summaryrefslogtreecommitdiffstats
path: root/src/usr/local
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/local')
-rwxr-xr-xsrc/usr/local/bin/3gstats.php83
-rwxr-xr-xsrc/usr/local/bin/beep.sh43
-rw-r--r--src/usr/local/bin/captiveportal_gather_stats.php115
-rwxr-xr-xsrc/usr/local/bin/easyrule147
-rwxr-xr-xsrc/usr/local/bin/filterparser.php58
-rwxr-xr-xsrc/usr/local/bin/mail.php25
-rwxr-xr-xsrc/usr/local/bin/ping_hosts.sh134
-rwxr-xr-xsrc/usr/local/bin/runmsntp.sh12
-rwxr-xr-xsrc/usr/local/bin/slowdownpipe.sh9
-rwxr-xr-xsrc/usr/local/bin/viconfig3
-rw-r--r--src/usr/local/captiveportal/index.php252
-rw-r--r--src/usr/local/captiveportal/radius_accounting.inc323
-rw-r--r--src/usr/local/captiveportal/radius_authentication.inc189
l---------src/usr/local/openssl/openssl.cnf1
-rw-r--r--src/usr/local/pkg/miniupnpd.inc297
-rw-r--r--src/usr/local/pkg/miniupnpd.xml135
-rwxr-xr-xsrc/usr/local/sbin/cleargmirror.sh26
-rwxr-xr-xsrc/usr/local/sbin/cleargpt.sh13
-rw-r--r--src/usr/local/sbin/gmirror_status_check.php96
-rw-r--r--src/usr/local/sbin/mpd.script1642
-rwxr-xr-xsrc/usr/local/sbin/ntpdate_sync_once.sh46
-rwxr-xr-xsrc/usr/local/sbin/openvpn.attributes.sh16
-rwxr-xr-xsrc/usr/local/sbin/ovpn-linkdown7
-rwxr-xr-xsrc/usr/local/sbin/ovpn-linkup21
-rwxr-xr-xsrc/usr/local/sbin/ovpn_auth_verify16
-rwxr-xr-xsrc/usr/local/sbin/pfSsh.php344
-rwxr-xr-xsrc/usr/local/sbin/ppp-linkdown31
-rwxr-xr-xsrc/usr/local/sbin/ppp-linkup62
-rwxr-xr-xsrc/usr/local/sbin/ppp-log-uptime.sh5
-rwxr-xr-xsrc/usr/local/sbin/ppp-uptime.sh3
-rw-r--r--src/usr/local/sbin/prefixes.php93
-rwxr-xr-xsrc/usr/local/sbin/show_filter_reload_status.php26
-rwxr-xr-xsrc/usr/local/sbin/ufslabels.sh149
-rwxr-xr-xsrc/usr/local/sbin/vpn-linkdown6
-rwxr-xr-xsrc/usr/local/sbin/vpn-linkup16
-rw-r--r--src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot29959
-rw-r--r--src/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po48738
-rw-r--r--src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.mobin0 -> 651246 bytes
-rw-r--r--src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.po41314
-rw-r--r--src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mobin0 -> 578231 bytes
-rw-r--r--src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po34350
-rwxr-xr-xsrc/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml987
-rw-r--r--src/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml13576
-rw-r--r--src/usr/local/share/pbi-keys/pfSense-BETA.ssl14
-rwxr-xr-xsrc/usr/local/share/pfSense/post_upgrade_command64
-rwxr-xr-xsrc/usr/local/share/pfSense/post_upgrade_command.php31
-rw-r--r--src/usr/local/share/pfSense/pre_upgrade_command58
-rw-r--r--src/usr/local/share/protocols/100bao.pat12
-rw-r--r--src/usr/local/share/protocols/EAOrigin.pat7
-rw-r--r--src/usr/local/share/protocols/LICENSE605
-rw-r--r--src/usr/local/share/protocols/aim.pat28
-rw-r--r--src/usr/local/share/protocols/aimwebcontent.pat10
-rw-r--r--src/usr/local/share/protocols/any.pat8
-rw-r--r--src/usr/local/share/protocols/applejuice.pat12
-rw-r--r--src/usr/local/share/protocols/ares.pat63
-rw-r--r--src/usr/local/share/protocols/armagetron.pat12
-rw-r--r--src/usr/local/share/protocols/audiogalaxy.pat19
-rw-r--r--src/usr/local/share/protocols/battlefield1942.pat14
-rw-r--r--src/usr/local/share/protocols/battlefield2.pat26
-rw-r--r--src/usr/local/share/protocols/battlefield2142.pat14
-rw-r--r--src/usr/local/share/protocols/bgp.pat19
-rw-r--r--src/usr/local/share/protocols/biff.pat16
-rw-r--r--src/usr/local/share/protocols/bittorrent.pat25
-rw-r--r--src/usr/local/share/protocols/chikka.pat17
-rw-r--r--src/usr/local/share/protocols/cimd.pat19
-rw-r--r--src/usr/local/share/protocols/ciscovpn.pat11
-rw-r--r--src/usr/local/share/protocols/citrix.pat12
-rw-r--r--src/usr/local/share/protocols/code_red.pat8
-rw-r--r--src/usr/local/share/protocols/counterstrike-source.pat42
-rw-r--r--src/usr/local/share/protocols/cvs.pat14
-rw-r--r--src/usr/local/share/protocols/dayofdefeat-source.pat11
-rw-r--r--src/usr/local/share/protocols/dazhihui.pat11
-rw-r--r--src/usr/local/share/protocols/dhcp.pat36
-rw-r--r--src/usr/local/share/protocols/directconnect.pat14
-rw-r--r--src/usr/local/share/protocols/dns.pat63
-rw-r--r--src/usr/local/share/protocols/doom3.pat10
-rw-r--r--src/usr/local/share/protocols/edonkey.pat37
-rw-r--r--src/usr/local/share/protocols/exe.pat20
-rw-r--r--src/usr/local/share/protocols/fasttrack.pat23
-rw-r--r--src/usr/local/share/protocols/finger.pat15
-rw-r--r--src/usr/local/share/protocols/flash.pat18
-rw-r--r--src/usr/local/share/protocols/freenet.pat10
-rw-r--r--src/usr/local/share/protocols/ftp.pat46
-rw-r--r--src/usr/local/share/protocols/gif.pat8
-rw-r--r--src/usr/local/share/protocols/gkrellm.pat13
-rw-r--r--src/usr/local/share/protocols/gnucleuslan.pat10
-rw-r--r--src/usr/local/share/protocols/gnutella.pat34
-rw-r--r--src/usr/local/share/protocols/goboogy.pat13
-rw-r--r--src/usr/local/share/protocols/gopher.pat25
-rw-r--r--src/usr/local/share/protocols/gtalk.pat11
-rw-r--r--src/usr/local/share/protocols/guildwars.pat14
-rw-r--r--src/usr/local/share/protocols/h323.pat36
-rw-r--r--src/usr/local/share/protocols/halflife2-deathmatch.pat10
-rw-r--r--src/usr/local/share/protocols/hddtemp.pat14
-rw-r--r--src/usr/local/share/protocols/hotline.pat12
-rw-r--r--src/usr/local/share/protocols/html.pat11
-rw-r--r--src/usr/local/share/protocols/http-dap.pat19
-rw-r--r--src/usr/local/share/protocols/http-freshdownload.pat17
-rw-r--r--src/usr/local/share/protocols/http-itunes.pat14
-rw-r--r--src/usr/local/share/protocols/http-rtsp.pat16
-rw-r--r--src/usr/local/share/protocols/http.pat28
-rw-r--r--src/usr/local/share/protocols/httpaudio.pat32
-rw-r--r--src/usr/local/share/protocols/httpcachehit.pat19
-rw-r--r--src/usr/local/share/protocols/httpcachemiss.pat17
-rw-r--r--src/usr/local/share/protocols/httpvideo.pat32
-rw-r--r--src/usr/local/share/protocols/ident.pat15
-rw-r--r--src/usr/local/share/protocols/imap.pat14
-rw-r--r--src/usr/local/share/protocols/imesh.pat15
-rw-r--r--src/usr/local/share/protocols/ipp.pat12
-rw-r--r--src/usr/local/share/protocols/irc.pat20
-rw-r--r--src/usr/local/share/protocols/jabber.pat24
-rw-r--r--src/usr/local/share/protocols/jpeg.pat8
-rw-r--r--src/usr/local/share/protocols/kugoo.pat21
-rw-r--r--src/usr/local/share/protocols/live365.pat15
-rw-r--r--src/usr/local/share/protocols/liveforspeed.pat13
-rw-r--r--src/usr/local/share/protocols/lpd.pat18
-rw-r--r--src/usr/local/share/protocols/mohaa.pat11
-rw-r--r--src/usr/local/share/protocols/mp3.pat11
-rw-r--r--src/usr/local/share/protocols/msn-filetransfer.pat30
-rw-r--r--src/usr/local/share/protocols/msnmessenger.pat28
-rw-r--r--src/usr/local/share/protocols/mute.pat11
-rw-r--r--src/usr/local/share/protocols/napster.pat24
-rw-r--r--src/usr/local/share/protocols/nbns.pat20
-rw-r--r--src/usr/local/share/protocols/ncp.pat23
-rw-r--r--src/usr/local/share/protocols/netbios.pat29
-rw-r--r--src/usr/local/share/protocols/nimda.pat8
-rw-r--r--src/usr/local/share/protocols/nntp.pat21
-rw-r--r--src/usr/local/share/protocols/ntp.pat17
-rw-r--r--src/usr/local/share/protocols/ogg.pat7
-rw-r--r--src/usr/local/share/protocols/openft.pat13
-rw-r--r--src/usr/local/share/protocols/pcanywhere.pat12
-rw-r--r--src/usr/local/share/protocols/pdf.pat11
-rw-r--r--src/usr/local/share/protocols/perl.pat7
-rw-r--r--src/usr/local/share/protocols/png.pat13
-rw-r--r--src/usr/local/share/protocols/poco.pat12
-rw-r--r--src/usr/local/share/protocols/pop3.pat50
-rw-r--r--src/usr/local/share/protocols/postscript.pat7
-rw-r--r--src/usr/local/share/protocols/pplive.pat11
-rw-r--r--src/usr/local/share/protocols/pressplay.pat15
-rw-r--r--src/usr/local/share/protocols/qq.pat26
-rw-r--r--src/usr/local/share/protocols/quake-halflife.pat32
-rw-r--r--src/usr/local/share/protocols/quake1.pat19
-rw-r--r--src/usr/local/share/protocols/quicktime.pat21
-rw-r--r--src/usr/local/share/protocols/radmin.pat17
-rw-r--r--src/usr/local/share/protocols/rar.pat7
-rw-r--r--src/usr/local/share/protocols/rdp.pat20
-rw-r--r--src/usr/local/share/protocols/replaytv-ivs.pat11
-rw-r--r--src/usr/local/share/protocols/rlogin.pat19
-rw-r--r--src/usr/local/share/protocols/rpm.pat7
-rw-r--r--src/usr/local/share/protocols/rtf.pat8
-rw-r--r--src/usr/local/share/protocols/rtmp.pat13
-rw-r--r--src/usr/local/share/protocols/rtp.pat33
-rw-r--r--src/usr/local/share/protocols/rtsp.pat15
-rw-r--r--src/usr/local/share/protocols/runesofmagic.pat63
-rw-r--r--src/usr/local/share/protocols/shoutcast.pat27
-rw-r--r--src/usr/local/share/protocols/sip.pat20
-rw-r--r--src/usr/local/share/protocols/skypeout.pat50
-rw-r--r--src/usr/local/share/protocols/skypetoskype.pat14
-rw-r--r--src/usr/local/share/protocols/smb.pat19
-rw-r--r--src/usr/local/share/protocols/smtp.pat40
-rw-r--r--src/usr/local/share/protocols/snmp-mon.pat32
-rw-r--r--src/usr/local/share/protocols/snmp-trap.pat33
-rw-r--r--src/usr/local/share/protocols/snmp.pat19
-rw-r--r--src/usr/local/share/protocols/socks.pat32
-rw-r--r--src/usr/local/share/protocols/soribada.pat51
-rw-r--r--src/usr/local/share/protocols/soulseek.pat17
-rw-r--r--src/usr/local/share/protocols/ssdp.pat21
-rw-r--r--src/usr/local/share/protocols/ssh.pat17
-rw-r--r--src/usr/local/share/protocols/ssl.pat16
-rw-r--r--src/usr/local/share/protocols/stun.pat46
-rw-r--r--src/usr/local/share/protocols/subspace.pat21
-rw-r--r--src/usr/local/share/protocols/subversion.pat13
-rw-r--r--src/usr/local/share/protocols/swf.pat2
-rw-r--r--src/usr/local/share/protocols/tar.pat12
-rw-r--r--src/usr/local/share/protocols/teamfortress2.pat11
-rw-r--r--src/usr/local/share/protocols/teamspeak.pat15
-rw-r--r--src/usr/local/share/protocols/telnet.pat16
-rw-r--r--src/usr/local/share/protocols/tesla.pat15
-rw-r--r--src/usr/local/share/protocols/tftp.pat21
-rw-r--r--src/usr/local/share/protocols/thecircle.pat12
-rw-r--r--src/usr/local/share/protocols/tonghuashun.pat11
-rw-r--r--src/usr/local/share/protocols/tor.pat17
-rw-r--r--src/usr/local/share/protocols/tsp.pat14
-rw-r--r--src/usr/local/share/protocols/unset.pat8
-rw-r--r--src/usr/local/share/protocols/uucp.pat12
-rw-r--r--src/usr/local/share/protocols/validcertssl.pat25
-rw-r--r--src/usr/local/share/protocols/ventrilo.pat18
-rw-r--r--src/usr/local/share/protocols/vnc.pat23
-rw-r--r--src/usr/local/share/protocols/whois.pat14
-rw-r--r--src/usr/local/share/protocols/worldofwarcraft.pat66
-rw-r--r--src/usr/local/share/protocols/x11.pat23
-rw-r--r--src/usr/local/share/protocols/xboxlive.pat41
-rw-r--r--src/usr/local/share/protocols/xunlei.pat83
-rw-r--r--src/usr/local/share/protocols/yahoo.pat27
-rw-r--r--src/usr/local/share/protocols/zip.pat7
-rw-r--r--src/usr/local/share/protocols/zmaap.pat18
-rw-r--r--src/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttfbin0 -> 60444 bytes
-rwxr-xr-xsrc/usr/local/www/apple-touch-icon.pngbin0 -> 4068 bytes
-rwxr-xr-xsrc/usr/local/www/bandwidth_by_ip.php150
-rw-r--r--src/usr/local/www/carp_status.php252
-rw-r--r--src/usr/local/www/classes/maintable.inc206
-rw-r--r--src/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css166
-rw-r--r--src/usr/local/www/code-syntax-highlighter/gpl.txt340
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushCSharp.js30
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushCpp.js72
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushCss.js50
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushDelphi.js31
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushJScript.js22
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushJava.js26
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushPhp.js23
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushPython.js71
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushRuby.js26
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushSql.js40
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushVb.js29
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shBrushXml.js61
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shCore.js589
-rw-r--r--src/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js636
-rw-r--r--src/usr/local/www/crash_reporter.php156
-rw-r--r--src/usr/local/www/csrf/csrf-magic.js186
-rw-r--r--src/usr/local/www/csrf/csrf-magic.php403
-rw-r--r--src/usr/local/www/css/table.css46
-rw-r--r--src/usr/local/www/diag_arp.php365
-rw-r--r--src/usr/local/www/diag_authentication.php138
-rw-r--r--src/usr/local/www/diag_backup.php818
-rw-r--r--src/usr/local/www/diag_confbak.php301
-rwxr-xr-xsrc/usr/local/www/diag_defaults.php90
-rw-r--r--src/usr/local/www/diag_dns.php320
-rwxr-xr-xsrc/usr/local/www/diag_dump_states.php280
-rw-r--r--src/usr/local/www/diag_dump_states_sources.php211
-rw-r--r--src/usr/local/www/diag_gmirror.php406
-rw-r--r--src/usr/local/www/diag_ipsec.php555
-rw-r--r--src/usr/local/www/diag_ipsec_leases.php131
-rw-r--r--src/usr/local/www/diag_ipsec_sad.php141
-rw-r--r--src/usr/local/www/diag_ipsec_spd.php138
-rw-r--r--src/usr/local/www/diag_ipsec_xml.php84
-rw-r--r--src/usr/local/www/diag_limiter_info.php121
-rwxr-xr-xsrc/usr/local/www/diag_logs.php145
-rw-r--r--src/usr/local/www/diag_logs_auth.php112
-rw-r--r--src/usr/local/www/diag_logs_dhcp.php115
-rw-r--r--src/usr/local/www/diag_logs_filter.php503
-rwxr-xr-xsrc/usr/local/www/diag_logs_filter_dynamic.php223
-rw-r--r--src/usr/local/www/diag_logs_filter_summary.php249
-rwxr-xr-xsrc/usr/local/www/diag_logs_gateways.php147
-rw-r--r--src/usr/local/www/diag_logs_ipsec.php123
-rw-r--r--src/usr/local/www/diag_logs_ntpd.php110
-rw-r--r--src/usr/local/www/diag_logs_openvpn.php111
-rw-r--r--src/usr/local/www/diag_logs_ppp.php109
-rw-r--r--src/usr/local/www/diag_logs_relayd.php111
-rwxr-xr-xsrc/usr/local/www/diag_logs_resolver.php152
-rw-r--r--src/usr/local/www/diag_logs_routing.php123
-rw-r--r--src/usr/local/www/diag_logs_settings.php517
-rwxr-xr-xsrc/usr/local/www/diag_logs_vpn.php211
-rw-r--r--src/usr/local/www/diag_logs_wireless.php125
-rw-r--r--src/usr/local/www/diag_nanobsd.php289
-rw-r--r--src/usr/local/www/diag_ndp.php184
-rw-r--r--src/usr/local/www/diag_packet_capture.php485
-rw-r--r--src/usr/local/www/diag_patterns.php97
-rw-r--r--src/usr/local/www/diag_pf_info.php117
-rw-r--r--src/usr/local/www/diag_ping.php202
-rwxr-xr-xsrc/usr/local/www/diag_pkglogs.php147
-rw-r--r--src/usr/local/www/diag_resetstate.php143
-rw-r--r--src/usr/local/www/diag_routes.php247
-rw-r--r--src/usr/local/www/diag_smart.php453
-rw-r--r--src/usr/local/www/diag_sockets.php181
-rw-r--r--src/usr/local/www/diag_states_summary.php206
-rw-r--r--src/usr/local/www/diag_system_activity.php115
-rw-r--r--src/usr/local/www/diag_system_pftop.php216
-rw-r--r--src/usr/local/www/diag_tables.php191
-rw-r--r--src/usr/local/www/diag_testport.php290
-rw-r--r--src/usr/local/www/diag_traceroute.php218
-rw-r--r--src/usr/local/www/easyrule.php89
-rw-r--r--src/usr/local/www/edit.php254
-rw-r--r--src/usr/local/www/exec.php355
-rwxr-xr-xsrc/usr/local/www/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/fbegin.inc459
-rwxr-xr-xsrc/usr/local/www/fend.inc27
-rw-r--r--src/usr/local/www/filebrowser/browser.js48
-rw-r--r--src/usr/local/www/filebrowser/browser.php165
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_code.gifbin0 -> 610 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_database.gifbin0 -> 621 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_doc.gifbin0 -> 1061 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_flash.gifbin0 -> 627 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_generic.gifbin0 -> 1068 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_image.gifbin0 -> 608 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_js.gifbin0 -> 1077 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_pdf.gifbin0 -> 603 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_php.gifbin0 -> 603 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_ppt.gifbin0 -> 1071 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_system.gifbin0 -> 601 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_xls.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/file_zip.gifbin0 -> 612 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/folder_generic.gifbin0 -> 996 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_cancel.gifbin0 -> 1024 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_contract.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_expand.gifbin0 -> 613 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_home.gifbin0 -> 1027 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_left.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/filebrowser/images/icon_magnifier.gifbin0 -> 568 bytes
-rw-r--r--src/usr/local/www/firewall_aliases.php311
-rwxr-xr-xsrc/usr/local/www/firewall_aliases_edit.php890
-rwxr-xr-xsrc/usr/local/www/firewall_aliases_import.php246
-rw-r--r--src/usr/local/www/firewall_nat.php399
-rw-r--r--src/usr/local/www/firewall_nat_1to1.php371
-rw-r--r--src/usr/local/www/firewall_nat_1to1_edit.php592
-rw-r--r--src/usr/local/www/firewall_nat_edit.php1016
-rw-r--r--src/usr/local/www/firewall_nat_npt.php195
-rw-r--r--src/usr/local/www/firewall_nat_npt_edit.php311
-rw-r--r--src/usr/local/www/firewall_nat_out.php695
-rw-r--r--src/usr/local/www/firewall_nat_out_edit.php905
-rw-r--r--src/usr/local/www/firewall_rules.php944
-rw-r--r--src/usr/local/www/firewall_rules_edit.php1946
-rw-r--r--src/usr/local/www/firewall_schedule.php255
-rw-r--r--src/usr/local/www/firewall_schedule_edit.php1151
-rw-r--r--src/usr/local/www/firewall_shaper.php486
-rw-r--r--src/usr/local/www/firewall_shaper_layer7.php584
-rw-r--r--src/usr/local/www/firewall_shaper_queues.php244
-rw-r--r--src/usr/local/www/firewall_shaper_vinterface.php475
-rw-r--r--src/usr/local/www/firewall_shaper_wizards.php146
-rw-r--r--src/usr/local/www/firewall_virtual_ip.php373
-rw-r--r--src/usr/local/www/firewall_virtual_ip_edit.php572
-rw-r--r--src/usr/local/www/getserviceproviders.php150
-rw-r--r--src/usr/local/www/getstats.php50
-rwxr-xr-xsrc/usr/local/www/graph.php408
-rw-r--r--src/usr/local/www/graph_cpu.php211
-rwxr-xr-xsrc/usr/local/www/green_dot.jpgbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/gui.css363
-rw-r--r--src/usr/local/www/guiconfig.inc1252
-rwxr-xr-xsrc/usr/local/www/halt.php77
-rwxr-xr-xsrc/usr/local/www/head.inc120
-rw-r--r--src/usr/local/www/headjs.php186
-rw-r--r--src/usr/local/www/help.php377
-rw-r--r--src/usr/local/www/ifstats.php66
-rw-r--r--src/usr/local/www/includes/functions.inc.php407
-rw-r--r--src/usr/local/www/index.php799
-rw-r--r--src/usr/local/www/interfaces.php3882
-rw-r--r--src/usr/local/www/interfaces_assign.php597
-rw-r--r--src/usr/local/www/interfaces_bridge.php179
-rw-r--r--src/usr/local/www/interfaces_bridge_edit.php708
-rw-r--r--src/usr/local/www/interfaces_gif.php162
-rw-r--r--src/usr/local/www/interfaces_gif_edit.php272
-rw-r--r--src/usr/local/www/interfaces_gre.php158
-rw-r--r--src/usr/local/www/interfaces_gre_edit.php262
-rw-r--r--src/usr/local/www/interfaces_groups.php171
-rw-r--r--src/usr/local/www/interfaces_groups_edit.php378
-rw-r--r--src/usr/local/www/interfaces_lagg.php169
-rw-r--r--src/usr/local/www/interfaces_lagg_edit.php278
-rw-r--r--src/usr/local/www/interfaces_ppps.php159
-rw-r--r--src/usr/local/www/interfaces_ppps_edit.php903
-rw-r--r--src/usr/local/www/interfaces_qinq.php181
-rw-r--r--src/usr/local/www/interfaces_qinq_edit.php444
-rw-r--r--src/usr/local/www/interfaces_vlan.php165
-rw-r--r--src/usr/local/www/interfaces_vlan_edit.php236
-rw-r--r--src/usr/local/www/interfaces_wireless.php160
-rw-r--r--src/usr/local/www/interfaces_wireless_edit.php230
-rw-r--r--src/usr/local/www/javascript/autosuggest.js337
-rw-r--r--src/usr/local/www/javascript/base64.js142
-rw-r--r--src/usr/local/www/javascript/carp_status/carp_status.js5
-rw-r--r--src/usr/local/www/javascript/chosen/chosen-sprite.pngbin0 -> 1866 bytes
-rw-r--r--src/usr/local/www/javascript/chosen/chosen.css317
-rw-r--r--src/usr/local/www/javascript/chosen/chosen.jquery.js755
-rw-r--r--src/usr/local/www/javascript/chosen/chosen.jquery.min.js9
-rw-r--r--src/usr/local/www/javascript/chosen/chosen.proto.js765
-rw-r--r--src/usr/local/www/javascript/chosen/chosen.proto.min.js9
-rw-r--r--src/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee633
-rw-r--r--src/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee629
-rw-r--r--src/usr/local/www/javascript/datepicker/css/datepicker.css178
-rw-r--r--src/usr/local/www/javascript/datepicker/js/blank.html6
-rw-r--r--src/usr/local/www/javascript/datepicker/js/datepicker.js1111
-rwxr-xr-xsrc/usr/local/www/javascript/datepicker/media/bg_header.jpgbin0 -> 1792 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/datepicker/media/bullet1.gifbin0 -> 55 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/datepicker/media/bullet2.gifbin0 -> 262 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/datepicker/media/cal.gifbin0 -> 127 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gifbin0 -> 526 bytes
-rw-r--r--src/usr/local/www/javascript/domTT/LICENSE202
-rw-r--r--src/usr/local/www/javascript/domTT/behaviour.js254
-rw-r--r--src/usr/local/www/javascript/domTT/domLib.js706
-rw-r--r--src/usr/local/www/javascript/domTT/domTT.js1132
-rw-r--r--src/usr/local/www/javascript/domTT/fadomatic.js180
-rw-r--r--src/usr/local/www/javascript/filter_log.js168
-rw-r--r--src/usr/local/www/javascript/firebug-lite.js1000
-rw-r--r--src/usr/local/www/javascript/firewall_nat_edit/autosuggest.js337
-rw-r--r--src/usr/local/www/javascript/firewall_nat_edit/disablekeys.js6
-rw-r--r--src/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js203
-rw-r--r--src/usr/local/www/javascript/firewall_nat_edit/suggestions.js33
-rw-r--r--src/usr/local/www/javascript/firewall_rules_edit/autosuggest.js337
-rw-r--r--src/usr/local/www/javascript/firewall_rules_edit/disablekeys.js6
-rw-r--r--src/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js237
-rw-r--r--src/usr/local/www/javascript/firewall_rules_edit/suggestions.js33
-rw-r--r--src/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js337
-rw-r--r--src/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js6
-rw-r--r--src/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js37
-rw-r--r--src/usr/local/www/javascript/firewall_shaper_edit/suggestions.js33
-rw-r--r--src/usr/local/www/javascript/global.js43
-rw-r--r--src/usr/local/www/javascript/index/ajax.js196
-rw-r--r--src/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js253
-rw-r--r--src/usr/local/www/javascript/jquery-1.11.1.min.js4
-rw-r--r--src/usr/local/www/javascript/jquery-migrate-1.2.1.min.js2
-rw-r--r--src/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css7
-rw-r--r--src/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js1326
-rwxr-xr-xsrc/usr/local/www/javascript/jquery.ipv4v6ify.js140
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 260 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 251 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 178 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.pngbin0 -> 213 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.pngbin0 -> 104 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.pngbin0 -> 105 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.pngbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.pngbin0 -> 109 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.pngbin0 -> 110 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin0 -> 3762 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 90 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin0 -> 129 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.pngbin0 -> 96 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.pngbin0 -> 5355 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--src/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js13
-rw-r--r--src/usr/local/www/javascript/load_balancer_pool_edit/pool.js191
-rw-r--r--src/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js56
-rw-r--r--src/usr/local/www/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/javascript/numericupdown/css/numericupdown.css40
-rwxr-xr-xsrc/usr/local/www/javascript/numericupdown/images/down.gifbin0 -> 60 bytes
-rwxr-xr-xsrc/usr/local/www/javascript/numericupdown/images/up.gifbin0 -> 60 bytes
-rw-r--r--src/usr/local/www/javascript/numericupdown/js/numericupdown.js287
-rw-r--r--src/usr/local/www/javascript/pi.js682
-rw-r--r--src/usr/local/www/javascript/row_helper.js97
-rw-r--r--src/usr/local/www/javascript/row_helper_dynamic.js98
-rw-r--r--src/usr/local/www/javascript/row_toggle.js66
-rw-r--r--src/usr/local/www/javascript/scriptaculous/builder.js136
-rw-r--r--src/usr/local/www/javascript/scriptaculous/controls.js965
-rw-r--r--src/usr/local/www/javascript/scriptaculous/dragdrop.js974
-rw-r--r--src/usr/local/www/javascript/scriptaculous/effects.js1123
-rw-r--r--src/usr/local/www/javascript/scriptaculous/prototype.js6079
-rw-r--r--src/usr/local/www/javascript/scriptaculous/scriptaculous.js68
-rw-r--r--src/usr/local/www/javascript/scriptaculous/slider.js275
-rw-r--r--src/usr/local/www/javascript/scriptaculous/sound.js59
-rw-r--r--src/usr/local/www/javascript/scriptaculous/unittest.js568
-rw-r--r--src/usr/local/www/javascript/sorttable.js584
-rw-r--r--src/usr/local/www/javascript/suggestions.js33
-rw-r--r--src/usr/local/www/javascript/ticker.js73
-rw-r--r--src/usr/local/www/javascript/wizard/autosuggest.js337
-rw-r--r--src/usr/local/www/javascript/wizard/disablekeys.js6
-rw-r--r--src/usr/local/www/javascript/wizard/suggestions.js33
-rw-r--r--src/usr/local/www/license.php133
-rw-r--r--src/usr/local/www/load_balancer_monitor.php138
-rw-r--r--src/usr/local/www/load_balancer_monitor_edit.php390
-rw-r--r--src/usr/local/www/load_balancer_pool.php159
-rw-r--r--src/usr/local/www/load_balancer_pool_edit.php368
-rw-r--r--src/usr/local/www/load_balancer_setting.php173
-rw-r--r--src/usr/local/www/load_balancer_virtual_server.php152
-rw-r--r--src/usr/local/www/load_balancer_virtual_server_edit.php315
-rwxr-xr-xsrc/usr/local/www/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/niftycssCode.css21
-rwxr-xr-xsrc/usr/local/www/niftycssprintCode.css1
-rwxr-xr-xsrc/usr/local/www/pkg.php582
-rw-r--r--src/usr/local/www/pkg_edit.php1267
-rw-r--r--src/usr/local/www/pkg_mgr.php221
-rw-r--r--src/usr/local/www/pkg_mgr_install.php323
-rw-r--r--src/usr/local/www/pkg_mgr_installed.php259
-rw-r--r--src/usr/local/www/pkg_mgr_settings.php163
-rw-r--r--src/usr/local/www/protochart/ProtoChart.js2653
-rw-r--r--src/usr/local/www/protochart/excanvas-compressed.js19
-rw-r--r--src/usr/local/www/protochart/excanvas.js785
-rwxr-xr-xsrc/usr/local/www/reboot.php72
-rw-r--r--src/usr/local/www/restart_httpd.php68
-rw-r--r--src/usr/local/www/services_captiveportal.php1253
-rw-r--r--src/usr/local/www/services_captiveportal_filemanager.php267
-rw-r--r--src/usr/local/www/services_captiveportal_hostname.php232
-rw-r--r--src/usr/local/www/services_captiveportal_hostname_edit.php244
-rw-r--r--src/usr/local/www/services_captiveportal_ip.php208
-rw-r--r--src/usr/local/www/services_captiveportal_ip_edit.php253
-rw-r--r--src/usr/local/www/services_captiveportal_mac.php244
-rw-r--r--src/usr/local/www/services_captiveportal_mac_edit.php270
-rw-r--r--src/usr/local/www/services_captiveportal_vouchers.php715
-rw-r--r--src/usr/local/www/services_captiveportal_vouchers_edit.php230
-rw-r--r--src/usr/local/www/services_captiveportal_zones.php154
-rw-r--r--src/usr/local/www/services_captiveportal_zones_edit.php124
-rw-r--r--src/usr/local/www/services_dhcp.php1442
-rw-r--r--src/usr/local/www/services_dhcp_edit.php625
-rw-r--r--src/usr/local/www/services_dhcp_relay.php216
-rw-r--r--src/usr/local/www/services_dhcpv6.php995
-rw-r--r--src/usr/local/www/services_dhcpv6_edit.php285
-rw-r--r--src/usr/local/www/services_dhcpv6_relay.php216
-rw-r--r--src/usr/local/www/services_dnsmasq.php582
-rw-r--r--src/usr/local/www/services_dnsmasq_domainoverride_edit.php197
-rw-r--r--src/usr/local/www/services_dnsmasq_edit.php345
-rw-r--r--src/usr/local/www/services_dyndns.php229
-rw-r--r--src/usr/local/www/services_dyndns_edit.php485
-rw-r--r--src/usr/local/www/services_igmpproxy.php189
-rw-r--r--src/usr/local/www/services_igmpproxy_edit.php312
-rw-r--r--src/usr/local/www/services_ntpd.php462
-rw-r--r--src/usr/local/www/services_ntpd_gps.php619
-rw-r--r--src/usr/local/www/services_ntpd_pps.php251
-rw-r--r--src/usr/local/www/services_rfc2136.php206
-rw-r--r--src/usr/local/www/services_rfc2136_edit.php276
-rw-r--r--src/usr/local/www/services_router_advertisements.php480
-rw-r--r--src/usr/local/www/services_snmp.php443
-rw-r--r--src/usr/local/www/services_unbound.php626
-rw-r--r--src/usr/local/www/services_unbound_acls.php421
-rw-r--r--src/usr/local/www/services_unbound_advanced.php469
-rw-r--r--src/usr/local/www/services_unbound_domainoverride_edit.php183
-rw-r--r--src/usr/local/www/services_unbound_host_edit.php337
-rw-r--r--src/usr/local/www/services_wol.php233
-rw-r--r--src/usr/local/www/services_wol_edit.php180
-rw-r--r--src/usr/local/www/shortcuts.inc289
-rw-r--r--src/usr/local/www/shortcuts/pkg_upnp.inc11
-rw-r--r--src/usr/local/www/stats.php46
-rwxr-xr-xsrc/usr/local/www/status.php281
-rw-r--r--src/usr/local/www/status_captiveportal.php260
-rw-r--r--src/usr/local/www/status_captiveportal_expire.php126
-rw-r--r--src/usr/local/www/status_captiveportal_test.php128
-rw-r--r--src/usr/local/www/status_captiveportal_voucher_rolls.php147
-rw-r--r--src/usr/local/www/status_captiveportal_vouchers.php150
-rw-r--r--src/usr/local/www/status_dhcp_leases.php457
-rw-r--r--src/usr/local/www/status_dhcpv6_leases.php581
-rw-r--r--src/usr/local/www/status_filter_reload.php179
-rwxr-xr-xsrc/usr/local/www/status_gateway_groups.php173
-rw-r--r--src/usr/local/www/status_gateways.php169
-rw-r--r--src/usr/local/www/status_graph.php352
-rw-r--r--src/usr/local/www/status_graph_cpu.php55
-rw-r--r--src/usr/local/www/status_interfaces.php607
-rw-r--r--src/usr/local/www/status_lb_pool.php231
-rw-r--r--src/usr/local/www/status_lb_vs.php158
-rw-r--r--src/usr/local/www/status_ntpd.php320
-rw-r--r--src/usr/local/www/status_openvpn.php443
-rw-r--r--src/usr/local/www/status_queues.php310
-rw-r--r--src/usr/local/www/status_rrd_graph.php834
-rw-r--r--src/usr/local/www/status_rrd_graph_img.php1278
-rw-r--r--src/usr/local/www/status_rrd_graph_settings.php316
-rwxr-xr-xsrc/usr/local/www/status_services.php135
-rw-r--r--src/usr/local/www/status_upnp.php130
-rw-r--r--src/usr/local/www/status_wireless.php201
-rw-r--r--src/usr/local/www/system.php565
-rw-r--r--src/usr/local/www/system_advanced_admin.php657
-rw-r--r--src/usr/local/www/system_advanced_firewall.php807
-rw-r--r--src/usr/local/www/system_advanced_misc.php738
-rw-r--r--src/usr/local/www/system_advanced_network.php320
-rw-r--r--src/usr/local/www/system_advanced_notifications.php413
-rw-r--r--src/usr/local/www/system_advanced_sysctl.php305
-rw-r--r--src/usr/local/www/system_authservers.php912
-rw-r--r--src/usr/local/www/system_camanager.php770
-rw-r--r--src/usr/local/www/system_certmanager.php1349
-rw-r--r--src/usr/local/www/system_crlmanager.php722
-rw-r--r--src/usr/local/www/system_firmware.php343
-rwxr-xr-xsrc/usr/local/www/system_firmware_auto.php296
-rw-r--r--src/usr/local/www/system_firmware_check.php206
-rw-r--r--src/usr/local/www/system_firmware_restorefullbackup.php220
-rw-r--r--src/usr/local/www/system_firmware_settings.php318
-rw-r--r--src/usr/local/www/system_gateway_groups.php235
-rw-r--r--src/usr/local/www/system_gateway_groups_edit.php378
-rw-r--r--src/usr/local/www/system_gateways.php436
-rw-r--r--src/usr/local/www/system_gateways_edit.php950
-rw-r--r--src/usr/local/www/system_groupmanager.php607
-rw-r--r--src/usr/local/www/system_groupmanager_addprivs.php255
-rwxr-xr-xsrc/usr/local/www/system_hasync.php365
-rw-r--r--src/usr/local/www/system_routes.php407
-rw-r--r--src/usr/local/www/system_routes_edit.php445
-rw-r--r--src/usr/local/www/system_usermanager.php1040
-rw-r--r--src/usr/local/www/system_usermanager_addprivs.php220
-rw-r--r--src/usr/local/www/system_usermanager_passwordmg.php155
-rw-r--r--src/usr/local/www/system_usermanager_settings.php185
-rw-r--r--src/usr/local/www/system_usermanager_settings_ldapacpicker.php131
-rwxr-xr-xsrc/usr/local/www/system_usermanager_settings_test.php134
-rw-r--r--src/usr/local/www/themes/_corporate/all.css1209
-rw-r--r--src/usr/local/www/themes/_corporate/bottom-loader.js10
-rw-r--r--src/usr/local/www/themes/_corporate/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/alert_bgr.gifbin0 -> 3415 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/footer.gifbin0 -> 5630 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/header.gifbin0 -> 16536 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/horizontal.gifbin0 -> 460 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_help.gifbin0 -> 1669 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/in.gifbin0 -> 177 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/in_d.gifbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/out.gifbin0 -> 179 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/logo.gifbin0 -> 10012 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/menu_down.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/metal_bgr.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/metal_bgr_red.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bar_left.gifbin0 -> 63 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bar_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/logon.pngbin0 -> 27029 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_0.gifbin0 -> 2195 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_1.gifbin0 -> 3851 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_10.gifbin0 -> 10624 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_2.gifbin0 -> 4611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_3.gifbin0 -> 5572 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_4.gifbin0 -> 7103 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_5.gifbin0 -> 8717 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_6.gifbin0 -> 9422 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_7.gifbin0 -> 9443 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_8.gifbin0 -> 10240 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/plogo_9.gifbin0 -> 10823 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/misc/widget_loader.gifbin0 -> 1064 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/_corporate/loader.js29
-rw-r--r--src/usr/local/www/themes/_corporate/new_tab_menu.css101
-rwxr-xr-xsrc/usr/local/www/themes/_corporate/new_tab_menu.pngbin0 -> 444 bytes
-rw-r--r--src/usr/local/www/themes/_corporate/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/code-red/all.css1301
-rwxr-xr-xsrc/usr/local/www/themes/code-red/bottom-loader.js10
-rwxr-xr-xsrc/usr/local/www/themes/code-red/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/alert_bgr.pngbin0 -> 1407 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/background.gifbin0 -> 112090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/background.pngbin0 -> 8502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/button_left.gifbin0 -> 534 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/button_mid.gifbin0 -> 149 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/button_right.gifbin0 -> 333 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/footer.pngbin0 -> 25072 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/header.pngbin0 -> 43633 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/horizontal.gifbin0 -> 461 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_cablenic.gifbin0 -> 109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/logo.gifbin0 -> 7555 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/logobig.jpgbin0 -> 7697 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/logon-background.gifbin0 -> 114596 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menu_down.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menubgr.pngbin0 -> 132 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menubgr_footer.pngbin0 -> 372 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/menubgr_highlight.pngbin0 -> 129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/metal_bgr.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/metal_bgr_red.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/background.gifbin0 -> 115138 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/logon.pngbin0 -> 65956 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_0.gifbin0 -> 2195 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_1.gifbin0 -> 3851 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_10.gifbin0 -> 10624 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_2.gifbin0 -> 4611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_3.gifbin0 -> 5572 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_4.gifbin0 -> 7103 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_5.gifbin0 -> 8717 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_6.gifbin0 -> 9422 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_7.gifbin0 -> 9443 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_8.gifbin0 -> 10240 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/plogo_9.gifbin0 -> 10823 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/misc/widget_loader.gifbin0 -> 2545 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/blank.gifbin0 -> 48 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js3
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js3
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/img/grey-40.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/img/submenu-off.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/img/submenu-on.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/img/white-90.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/img/x.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/code-red/javascript/niftyjsCode.js174
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/transmenu-body.php53
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/transmenu-head.php87
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/transmenu.org785
-rwxr-xr-xsrc/usr/local/www/themes/code-red/javascript/transmenuC.js86
-rwxr-xr-xsrc/usr/local/www/themes/code-red/jsevents/body.def7
-rw-r--r--src/usr/local/www/themes/code-red/loader.js29
-rwxr-xr-xsrc/usr/local/www/themes/code-red/login.css1136
-rwxr-xr-xsrc/usr/local/www/themes/code-red/menu.inc177
-rw-r--r--src/usr/local/www/themes/code-red/new_tab_menu.css101
-rwxr-xr-xsrc/usr/local/www/themes/code-red/no_big_logo1
-rwxr-xr-xsrc/usr/local/www/themes/code-red/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css1226
-rwxr-xr-xsrc/usr/local/www/themes/code-red/styles/menustyles.css44
-rwxr-xr-xsrc/usr/local/www/themes/code-red/styles/transmenu.css75
-rwxr-xr-xsrc/usr/local/www/themes/code-red/wizard.css1068
-rw-r--r--src/usr/local/www/themes/metallic/all.css1269
-rwxr-xr-xsrc/usr/local/www/themes/metallic/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/metallic/bottom-loader.js10
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/alert_bgr.gifbin0 -> 3415 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/footer.gifbin0 -> 20440 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/header.gifbin0 -> 33347 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/horizontal.gifbin0 -> 461 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/logo.gifbin0 -> 10012 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/menu_down.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/metal_bgr.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/metal_bgr_red.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/logon.pngbin0 -> 27029 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/tri_c_black.gifbin0 -> 84 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/tri_o_black.gifbin0 -> 82 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/misc/widget_loader.gifbin0 -> 1064 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/metallic/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/metallic/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rw-r--r--src/usr/local/www/themes/metallic/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/metallic/loader.js29
-rw-r--r--src/usr/local/www/themes/metallic/login.css1127
-rw-r--r--src/usr/local/www/themes/metallic/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/metallic/no_big_logo1
-rw-r--r--src/usr/local/www/themes/metallic/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/nervecenter/all.css1301
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/bottom-loader.js10
-rw-r--r--src/usr/local/www/themes/nervecenter/favicon.icobin0 -> 1406 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/alert_bgr.pngbin0 -> 10240 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/background.gifbin0 -> 44574 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/background.pngbin0 -> 8502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/footer.pngbin0 -> 41755 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/header.pngbin0 -> 49602 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/horizontal.gifbin0 -> 461 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/logo.gifbin0 -> 7599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/menu_down.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/metal_bgr.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/metal_bgr_red.gifbin0 -> 734 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/logon.pngbin0 -> 47467 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/misc/widget_loader.gifbin0 -> 2545 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/img/grey-40.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/img/white-90.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/nervecenter/javascript/img/x.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/transmenu-body.php51
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/transmenu-head.php85
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/transmenu.org785
-rw-r--r--src/usr/local/www/themes/nervecenter/javascript/transmenuC.js86
-rw-r--r--src/usr/local/www/themes/nervecenter/jsevents/body.def7
-rw-r--r--src/usr/local/www/themes/nervecenter/loader.js29
-rw-r--r--src/usr/local/www/themes/nervecenter/login.css1127
-rw-r--r--src/usr/local/www/themes/nervecenter/menu.inc177
-rw-r--r--src/usr/local/www/themes/nervecenter/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/nervecenter/no_big_logo1
-rw-r--r--src/usr/local/www/themes/nervecenter/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/nervecenter/styles/menustyles.css44
-rw-r--r--src/usr/local/www/themes/nervecenter/styles/transmenu.css75
-rw-r--r--src/usr/local/www/themes/nervecenter/wizard.css1060
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/all.css1028
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/bottom-loader.js11
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gifbin0 -> 1651 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/header-alert.gifbin0 -> 4910 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/header.gifbin0 -> 7932 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/help.pngbin0 -> 324 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gifbin0 -> 1044 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gifbin0 -> 1669 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gifbin0 -> 1114 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/in.gifbin0 -> 177 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gifbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/out.gifbin0 -> 179 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/logo.gifbin0 -> 4878 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/menu.gifbin0 -> 460 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/logon.pngbin0 -> 27029 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gifbin0 -> 1064 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/loader.js29
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/login.css1127
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/pfsense/all.css1036
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/bottom-loader.js12
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/alert_bgr.gifbin0 -> 1651 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/header-alert.gifbin0 -> 4910 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/header.gifbin0 -> 18510 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/help.pngbin0 -> 324 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_alert.gifbin0 -> 1044 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_help.gifbin0 -> 1669 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/in.gifbin0 -> 177 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/in_d.gifbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/out.gifbin0 -> 179 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/logo.gifbin0 -> 4878 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/logon.pngbin0 -> 27029 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/misc/widget_loader.gifbin0 -> 1064 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense/images/transparent_pixel.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/pfsense/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/pfsense/loader.js30
-rw-r--r--src/usr/local/www/themes/pfsense/login.css1127
-rw-r--r--src/usr/local/www/themes/pfsense/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/pfsense/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/pfsense_ng/all.css1414
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/bottom-loader.js10
-rw-r--r--src/usr/local/www/themes/pfsense_ng/favicon.icobin0 -> 1406 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/alert_bgr.pngbin0 -> 2483 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/alerter.pngbin0 -> 3748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/background.jpgbin0 -> 49431 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/footer.pngbin0 -> 2956 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/header.pngbin0 -> 4994 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/horizontal.pngbin0 -> 191 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/hostname.pngbin0 -> 1899 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/logo.gifbin0 -> 2471 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gifbin0 -> 55 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gifbin0 -> 56 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gifbin0 -> 54 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menu-dot.gifbin0 -> 54 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menubgr.pngbin0 -> 132 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menubgr_footer.pngbin0 -> 496 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.pngbin0 -> 252 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/logon.pngbin0 -> 50494 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gifbin0 -> 2545 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/img/white-90.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng/javascript/img/x.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php51
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php85
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/transmenu.org785
-rw-r--r--src/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js86
-rw-r--r--src/usr/local/www/themes/pfsense_ng/jsevents/body.def7
-rw-r--r--src/usr/local/www/themes/pfsense_ng/loader.js36
-rw-r--r--src/usr/local/www/themes/pfsense_ng/login.css1127
-rw-r--r--src/usr/local/www/themes/pfsense_ng/menu.inc177
-rw-r--r--src/usr/local/www/themes/pfsense_ng/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/pfsense_ng/no_big_logo1
-rw-r--r--src/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/pfsense_ng/styles/menustyles.css44
-rw-r--r--src/usr/local/www/themes/pfsense_ng/styles/transmenu.css75
-rw-r--r--src/usr/local/www/themes/pfsense_ng/wizard.css1117
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/all.css1375
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js10
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/favicon.icobin0 -> 1406 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.pngbin0 -> 2483 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/alerter.pngbin0 -> 3748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/background.jpgbin0 -> 49431 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/footer.pngbin0 -> 2956 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/header.pngbin0 -> 4994 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/horizontal.pngbin0 -> 191 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/hostname.pngbin0 -> 1899 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/logo.gifbin0 -> 2471 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gifbin0 -> 55 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gifbin0 -> 56 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gifbin0 -> 54 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gifbin0 -> 54 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gifbin0 -> 234 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menubgr.pngbin0 -> 132 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.pngbin0 -> 496 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.pngbin0 -> 252 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gifbin0 -> 38943 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gifbin0 -> 5971 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gifbin0 -> 5852 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.pngbin0 -> 50494 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gifbin0 -> 2545 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php51
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php85
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org785
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js86
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def7
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/loader.js294
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/login.css1127
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/menu.inc177
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/no_big_logo1
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css44
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css75
-rw-r--r--src/usr/local/www/themes/pfsense_ng_fs/wizard.css1117
-rw-r--r--src/usr/local/www/themes/the_wall/all.css1308
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/apple-touch-icon.pngbin0 -> 4068 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/bottom-loader.js10
-rw-r--r--src/usr/local/www/themes/the_wall/favicon.icobin0 -> 1406 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/graphlink.css43
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/alert_bgr.pngbin0 -> 12705 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/background.jpgbin0 -> 50449 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/footer.pngbin0 -> 7774 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/header.pngbin0 -> 44524 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/help.pngbin0 -> 324 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/horizontal.gifbin0 -> 461 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/horizontal.pngbin0 -> 190 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_3g.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gifbin0 -> 200 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_advanced.gifbin0 -> 306 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alert.gifbin0 -> 1015 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gifbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gifbin0 -> 331 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gifbin0 -> 346 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gifbin0 -> 314 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_block.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_block_add.gifbin0 -> 192 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_block_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gifbin0 -> 91 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_cal.gifbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gifbin0 -> 1060 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_carp.gifbin0 -> 352 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gifbin0 -> 357 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_chain.pngbin0 -> 161 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_check.gifbin0 -> 1291 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gifbin0 -> 308 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_close.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_configure.gifbin0 -> 64 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_down.gifbin0 -> 1114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_down_d.gifbin0 -> 689 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_e.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_error.gifbin0 -> 1312 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_exclam.gifbin0 -> 1274 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_flag_de.pngbin0 -> 114 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_flag_en.pngbin0 -> 618 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_flag_es.pngbin0 -> 281 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.pngbin0 -> 502 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.pngbin0 -> 1528 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.pngbin0 -> 687 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.pngbin0 -> 748 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.pngbin0 -> 513 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.pngbin0 -> 644 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.pngbin0 -> 371 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.pngbin0 -> 620 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.pngbin0 -> 593 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.pngbin0 -> 646 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.pngbin0 -> 487 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.pngbin0 -> 704 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.pngbin0 -> 654 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gifbin0 -> 43785 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_help.gifbin0 -> 1669 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gifbin0 -> 315 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gifbin0 -> 88 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gifbin0 -> 87 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_left.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_left_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_log.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_log_d.gifbin0 -> 297 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_log_s.gifbin0 -> 305 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gifbin0 -> 305 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_logs.gifbin0 -> 2092 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_match.gifbin0 -> 847 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_match_d.gifbin0 -> 843 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_minus.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_open.gifbin0 -> 62 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_other.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_other_d.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_parp.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gifbin0 -> 303 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_pass.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gifbin0 -> 183 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gifbin0 -> 182 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus.gifbin0 -> 1100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gifbin0 -> 1096 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gifbin0 -> 682 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gifbin0 -> 1087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gifbin0 -> 701 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gifbin0 -> 1109 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gifbin0 -> 694 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gifbin0 -> 1135 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gifbin0 -> 1105 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gifbin0 -> 686 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gifbin0 -> 1131 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reject.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_right.gifbin0 -> 1117 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gifbin0 -> 1120 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_service_running.gifbin0 -> 1390 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_start.gifbin0 -> 1119 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gifbin0 -> 1115 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_service_status.gifbin0 -> 2150 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gifbin0 -> 1106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gifbin0 -> 1100 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gifbin0 -> 1695 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gifbin0 -> 1130 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.pngbin0 -> 1566 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system-group.pngbin0 -> 3128 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.pngbin0 -> 1107 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system-user.pngbin0 -> 2084 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.pngbin0 -> 1841 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_system_logout.pngbin0 -> 2087 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_trapped.gifbin0 -> 1101 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gifbin0 -> 1079 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gifbin0 -> 194 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gifbin0 -> 193 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_up.gifbin0 -> 1116 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_up_d.gifbin0 -> 691 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gifbin0 -> 1129 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_wlan.gifbin0 -> 66 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gifbin0 -> 100 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.pngbin0 -> 512 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.pngbin0 -> 399 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_x.gifbin0 -> 1111 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_x_d.gifbin0 -> 680 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gifbin0 -> 1126 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/icon_x_p.gifbin0 -> 1090 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/in.gifbin0 -> 177 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/in_d.gifbin0 -> 190 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/out.gifbin0 -> 179 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/icons/out_d.gifbin0 -> 189 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/log.pngbin0 -> 270 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/logo.gifbin0 -> 7599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/logobig.jpgbin0 -> 7540 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/menu_down.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/menu_right.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bar_blue.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bar_gray.gifbin0 -> 94 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bar_left.gifbin0 -> 289 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bar_right.gifbin0 -> 288 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.pngbin0 -> 154 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.pngbin0 -> 156 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/button.gifbin0 -> 805 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/graph.pngbin0 -> 2256 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/key_128.gifbin0 -> 2766 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/key_152.gifbin0 -> 2772 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/key_256.gifbin0 -> 2808 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/key_64.gifbin0 -> 2723 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/loader.gifbin0 -> 2248 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/loader_all.gifbin0 -> 1398 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/loader_filter.gifbin0 -> 1436 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/loader_tab.gifbin0 -> 2248 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/logon.pngbin0 -> 22000 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/progress_bar.gifbin0 -> 44791 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/rrd_error.pngbin0 -> 38898 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_alerter.gifbin0 -> 2203 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gifbin0 -> 1558 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_left.gifbin0 -> 600 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_page_loading.gifbin0 -> 1621 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_reload_all.gifbin0 -> 1611 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gifbin0 -> 1612 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/status_right.gifbin0 -> 599 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/tri_c.gifbin0 -> 61 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/tri_c_black.gifbin0 -> 69 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/tri_o.gifbin0 -> 58 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/tri_o_black.gifbin0 -> 67 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/widget_loader.gifbin0 -> 2545 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gifbin0 -> 1064 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/new_tab_menu.pngbin0 -> 444 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/status.pngbin0 -> 348 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/transparent.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/images/transparent_pixel.gifbin0 -> 43 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/ie7/blank.gifbin0 -> 48 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js3
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js2
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css43
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js3
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js2
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/ie7/test-trans.pngbin0 -> 106 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/img/grey-40.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/img/submenu-off.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/img/submenu-on.gifbin0 -> 65 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/img/white-90.pngbin0 -> 223 bytes
-rwxr-xr-xsrc/usr/local/www/themes/the_wall/javascript/img/x.gifbin0 -> 43 bytes
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/niftyjsCode.js174
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/transmenu-body.php51
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/transmenu-head.php85
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/transmenu.org785
-rw-r--r--src/usr/local/www/themes/the_wall/javascript/transmenuC.js86
-rw-r--r--src/usr/local/www/themes/the_wall/jsevents/body.def7
-rw-r--r--src/usr/local/www/themes/the_wall/loader.js30
-rw-r--r--src/usr/local/www/themes/the_wall/login.css1159
-rw-r--r--src/usr/local/www/themes/the_wall/menu.inc177
-rw-r--r--src/usr/local/www/themes/the_wall/new_tab_menu.css101
-rw-r--r--src/usr/local/www/themes/the_wall/no_big_logo1
-rw-r--r--src/usr/local/www/themes/the_wall/rrdcolors.inc.php89
-rw-r--r--src/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css1226
-rw-r--r--src/usr/local/www/themes/the_wall/styles/menustyles.css44
-rw-r--r--src/usr/local/www/themes/the_wall/styles/transmenu.css75
-rw-r--r--src/usr/local/www/themes/the_wall/wizard.css1060
-rwxr-xr-xsrc/usr/local/www/tree-images/empty.gifbin0 -> 837 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/join.gifbin0 -> 857 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/joinbottom.gifbin0 -> 850 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/line.gifbin0 -> 853 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/minus_.gifbin0 -> 913 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/minus_up.gifbin0 -> 911 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/page.gifbin0 -> 980 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/plus_.gifbin0 -> 910 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/plus_up.gifbin0 -> 913 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/plus_updown.gifbin0 -> 915 bytes
-rwxr-xr-xsrc/usr/local/www/tree-images/zone.gifbin0 -> 318 bytes
-rwxr-xr-xsrc/usr/local/www/tree/i-bottom.gifbin0 -> 125 bytes
-rwxr-xr-xsrc/usr/local/www/tree/i-repeater.gifbin0 -> 91 bytes
-rw-r--r--src/usr/local/www/tree/index.html228
-rwxr-xr-xsrc/usr/local/www/tree/l.gifbin0 -> 131 bytes
-rwxr-xr-xsrc/usr/local/www/tree/minus.gifbin0 -> 146 bytes
-rwxr-xr-xsrc/usr/local/www/tree/page-file.pngbin0 -> 211 bytes
-rwxr-xr-xsrc/usr/local/www/tree/page-file_play.gifbin0 -> 1021 bytes
-rwxr-xr-xsrc/usr/local/www/tree/page-file_x.gifbin0 -> 630 bytes
-rwxr-xr-xsrc/usr/local/www/tree/page-foldericon.pngbin0 -> 210 bytes
-rwxr-xr-xsrc/usr/local/www/tree/page-openfoldericon.pngbin0 -> 219 bytes
-rwxr-xr-xsrc/usr/local/www/tree/plus.gifbin0 -> 149 bytes
-rwxr-xr-xsrc/usr/local/www/tree/t.gifbin0 -> 141 bytes
-rw-r--r--src/usr/local/www/tree/tree.css136
-rw-r--r--src/usr/local/www/tree/tree.js195
-rw-r--r--src/usr/local/www/treeview.css48
-rw-r--r--src/usr/local/www/uploadconfig.php65
-rw-r--r--src/usr/local/www/vpn_ipsec.php704
-rw-r--r--src/usr/local/www/vpn_ipsec_keys.php230
-rw-r--r--src/usr/local/www/vpn_ipsec_keys_edit.php199
-rw-r--r--src/usr/local/www/vpn_ipsec_mobile.php740
-rw-r--r--src/usr/local/www/vpn_ipsec_phase1.php1092
-rw-r--r--src/usr/local/www/vpn_ipsec_phase2.php983
-rw-r--r--src/usr/local/www/vpn_ipsec_settings.php445
-rw-r--r--src/usr/local/www/vpn_l2tp.php493
-rw-r--r--src/usr/local/www/vpn_l2tp_users.php146
-rw-r--r--src/usr/local/www/vpn_l2tp_users_edit.php212
-rw-r--r--src/usr/local/www/vpn_openvpn_client.php1271
-rw-r--r--src/usr/local/www/vpn_openvpn_csc.php868
-rw-r--r--src/usr/local/www/vpn_openvpn_server.php2042
-rw-r--r--src/usr/local/www/vpn_pppoe.php167
-rw-r--r--src/usr/local/www/vpn_pppoe_edit.php671
-rw-r--r--src/usr/local/www/vpn_pptp.php504
-rw-r--r--src/usr/local/www/vpn_pptp_users.php142
-rw-r--r--src/usr/local/www/vpn_pptp_users_edit.php184
-rw-r--r--src/usr/local/www/widgets/include/captiveportal.inc4
-rw-r--r--src/usr/local/www/widgets/include/carp_status.inc7
-rw-r--r--src/usr/local/www/widgets/include/dyn_dns_status.inc7
-rw-r--r--src/usr/local/www/widgets/include/gateways.inc5
-rw-r--r--src/usr/local/www/widgets/include/gmirror_status.inc4
-rw-r--r--src/usr/local/www/widgets/include/installed_packages.inc7
-rw-r--r--src/usr/local/www/widgets/include/interface_statistics.inc5
-rw-r--r--src/usr/local/www/widgets/include/interfaces.inc6
-rw-r--r--src/usr/local/www/widgets/include/ipsec.inc4
-rw-r--r--src/usr/local/www/widgets/include/load_balancer.inc4
-rw-r--r--src/usr/local/www/widgets/include/log.inc6
-rw-r--r--src/usr/local/www/widgets/include/ntp_status.inc5
-rw-r--r--src/usr/local/www/widgets/include/openvpn.inc4
-rw-r--r--src/usr/local/www/widgets/include/services_status.inc7
-rw-r--r--src/usr/local/www/widgets/include/smart_status.inc5
-rw-r--r--src/usr/local/www/widgets/include/thermal_sensors.inc27
-rw-r--r--src/usr/local/www/widgets/include/traffic_graph.inc4
-rw-r--r--src/usr/local/www/widgets/include/wake_on_lan.inc7
-rw-r--r--src/usr/local/www/widgets/javascript/cpu_graphs.js245
-rw-r--r--src/usr/local/www/widgets/javascript/ipsec.js9
-rw-r--r--src/usr/local/www/widgets/javascript/thermal_sensors.js296
-rw-r--r--src/usr/local/www/widgets/javascript/traffic_graph.js41
-rw-r--r--src/usr/local/www/widgets/widgets/captive_portal_status.widget.php146
-rw-r--r--src/usr/local/www/widgets/widgets/carp_status.widget.php85
-rw-r--r--src/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php76
-rw-r--r--src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php174
-rw-r--r--src/usr/local/www/widgets/widgets/gateways.widget.php227
-rw-r--r--src/usr/local/www/widgets/widgets/gmirror_status.widget.php52
-rw-r--r--src/usr/local/www/widgets/widgets/installed_packages.widget.php126
-rw-r--r--src/usr/local/www/widgets/widgets/interface_statistics.widget.php216
-rw-r--r--src/usr/local/www/widgets/widgets/interfaces.widget.php126
-rw-r--r--src/usr/local/www/widgets/widgets/ipsec.widget.php265
-rw-r--r--src/usr/local/www/widgets/widgets/load_balancer_status.widget.php155
-rw-r--r--src/usr/local/www/widgets/widgets/log.widget.php281
-rw-r--r--src/usr/local/www/widgets/widgets/ntp_status.widget.php515
-rw-r--r--src/usr/local/www/widgets/widgets/openvpn.widget.php290
-rw-r--r--src/usr/local/www/widgets/widgets/picture.widget.php96
-rw-r--r--src/usr/local/www/widgets/widgets/rss.widget.php198
-rw-r--r--src/usr/local/www/widgets/widgets/services_status.widget.php105
-rw-r--r--src/usr/local/www/widgets/widgets/smart_status.widget.php76
-rw-r--r--src/usr/local/www/widgets/widgets/system_information.widget.php322
-rw-r--r--src/usr/local/www/widgets/widgets/thermal_sensors.widget.php279
-rw-r--r--src/usr/local/www/widgets/widgets/traffic_graphs.widget.php193
-rw-r--r--src/usr/local/www/widgets/widgets/wake_on_lan.widget.php80
-rw-r--r--src/usr/local/www/wizard.php1061
-rw-r--r--src/usr/local/www/wizards/openvpn_wizard.inc676
-rw-r--r--src/usr/local/www/wizards/openvpn_wizard.xml987
-rw-r--r--src/usr/local/www/wizards/setup_wizard.xml703
-rw-r--r--src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc1664
-rwxr-xr-xsrc/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml1649
-rw-r--r--src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc1741
-rwxr-xr-xsrc/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml1657
-rwxr-xr-xsrc/usr/local/www/xmlrpc.php592
2632 files changed, 367957 insertions, 0 deletions
diff --git a/src/usr/local/bin/3gstats.php b/src/usr/local/bin/3gstats.php
new file mode 100755
index 0000000..cc385fc
--- /dev/null
+++ b/src/usr/local/bin/3gstats.php
@@ -0,0 +1,83 @@
+#!/usr/local/bin/php-cgi -f
+<?php
+
+ini_set("max_execution_time", "0");
+
+if(empty($argv[1])) {
+ echo "No modem device given \n";
+ exit(0);
+}
+
+/* Huawei example */
+$device = "/dev/{$argv[1]}";
+$statfile = "/tmp/3gstats.{$argv[2]}";
+/* mode is a comma separated value, thus submode is born */
+$header = "#seconds,rssi,mode,submode,upstream,downstream,sentbytes,receivedbyts,bwupstream,bwdownstream,simstate,service\n";
+
+$i = 0;
+
+$record = array();
+$handle = fopen($device, "r");
+if(! $handle) {
+ echo "Can not open modem stats device\n";
+ exit(1);
+}
+
+$record['time'] = 0;
+$record['rssi'] = 0;
+$record['mode'] = "0,0";
+$record['upstream'] = 0;
+$record['downstream'] = 0;
+$record['sent'] = 0;
+$record['received'] = 0;
+$record['bwupstream'] = 0;
+$record['bwdownstream'] = 0;
+$record['simstate'] = 0;
+$record['service'] = 0;
+
+while (true) {
+ $string = "";
+ $string = fgets($handle, 256);
+
+ $elements = array();
+ $elements = explode(':', $string);
+ $elements[0] = trim($elements[0]);
+ $elements[1] = trim($elements[1]);
+
+ switch ($elements[0]) {
+ case "^MODE":
+ $record['mode'] = $elements[1];
+ break;
+ case "^SRVST":
+ $record['service'] = $elements[1];
+ break;
+ case "^SIMST":
+ $record['simstate'] = $elements[1];
+ break;
+ case "^RSSI":
+ $record['rssi'] = $elements[1];
+ break;
+ case "^DSFLOWRPT":
+ $items = array();
+ $items = explode(',', $elements[1]);
+ $record['time'] = hexdec($items[0]);
+ $record['upstream'] = round((floatval(hexdec($items[1])) * 8) /1024);
+ $record['downstream'] = round((floatval(hexdec($items[2])) * 8) /1024);
+ $record['sent'] = hexdec($items[3]);
+ $record['received'] = hexdec($items[4]);
+ $record['bwupstream'] = round((floatval(hexdec($items[5])) * 8) /1024);
+ $record['bwdownstream'] = round((floatval(hexdec($items[6])) * 8) /1024);
+ break;
+ }
+
+ if ($i > 10) {
+ $csv = $header;
+ $csv .= implode(",", $record);
+ $csv .= "\n";
+ file_put_contents($statfile, $csv);
+ $i = 0;
+ }
+ $i++;
+}
+fclose($handle);
+?>
diff --git a/src/usr/local/bin/beep.sh b/src/usr/local/bin/beep.sh
new file mode 100755
index 0000000..ed9382d
--- /dev/null
+++ b/src/usr/local/bin/beep.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+
+BEEP=`/usr/bin/grep -c disablebeep /conf/config.xml`
+if [ $BEEP -gt 0 ]; then
+ exit;
+fi
+
+# Standard note length
+NOTELENGTH="25"
+
+# this is super annoying in VMware, exit if in VMware
+if [ -f /var/log/dmesg.boot ]; then
+ VMWCOUNT=`/usr/bin/grep -c VMware /var/log/dmesg.boot`
+ if [ $VMWCOUNT -gt 0 ]; then
+ exit;
+ fi
+fi
+
+# Check for different HZ
+if [ -f /boot/loader.conf ]; then
+ HZ=`/usr/bin/grep -c kern.hz /boot/loader.conf`
+ if [ "$HZ" = "1" ]; then
+ NOTELENGTH="10"
+ fi
+fi
+
+if [ -c "/dev/speaker" ]; then
+ if [ "$1" = "start" ]; then
+ /usr/local/bin/beep -p 500 $NOTELENGTH
+ /usr/local/bin/beep -p 400 $NOTELENGTH
+ /usr/local/bin/beep -p 600 $NOTELENGTH
+ /usr/local/bin/beep -p 800 $NOTELENGTH
+ /usr/local/bin/beep -p 800 $NOTELENGTH
+ fi
+ if [ "$1" = "stop" ]; then
+ /usr/local/bin/beep -p 600 $NOTELENGTH
+ /usr/local/bin/beep -p 800 $NOTELENGTH
+ /usr/local/bin/beep -p 500 $NOTELENGTH
+ /usr/local/bin/beep -p 400 $NOTELENGTH
+ /usr/local/bin/beep -p 400 $NOTELENGTH
+ fi
+fi
diff --git a/src/usr/local/bin/captiveportal_gather_stats.php b/src/usr/local/bin/captiveportal_gather_stats.php
new file mode 100644
index 0000000..23d6b5d
--- /dev/null
+++ b/src/usr/local/bin/captiveportal_gather_stats.php
@@ -0,0 +1,115 @@
+#!/usr/local/bin/php-cgi -q
+<?php
+/* $Id$ */
+/*
+ captiveportal_gather_stats.php
+ Copyright (C) 2011 Warren Baker
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require_once("functions.inc");
+require_once("captiveportal.inc");
+require_once("util.inc");
+
+global $cpzone;
+
+$cpzone = $argv[1];
+$type = $argv[2];
+
+/* read in captive portal db */
+$cpdb = captiveportal_read_db();
+
+/* determine number of logged in users */
+$no_users = count($cpdb);
+$concurrent_users = $no_users;
+
+/* set initial user count to zero */
+$current_user_count = 0;
+
+/* tmp file to use to store old data (per interface)*/
+$tmpfile = "{$g['vardb_path']}/captiveportal_online_users";
+
+if (empty($type)) {
+ exit;
+}
+
+/* echo the rrd required syntax */
+echo "N:";
+$result = "NaN";
+
+if ($type == "loggedin") {
+
+ /* Find out the previous user timestamp
+ * so we can determine the difference between the current
+ * and previous user count. If the file is empty return a 0.
+ */
+ $fd = @fopen($tmpfile, "r");
+ if ($fd) {
+ while (!feof($fd)) {
+ $line = trim(fgets($fd));
+ if ($line) {
+ $previous_user_timestamp = $line;
+ } else {
+ $previous_user_timestamp = 0;
+ }
+ }
+ } else {
+ $previous_user_timestamp = 0;
+ }
+ @fclose($fd);
+
+ foreach ($cpdb as $user) {
+ $user_ip = $user[2];
+ // Record the timestamp
+ $timestamp = $user[0];
+ if ($timestamp > $previous_user_timestamp) {
+ $current_user_count = $current_user_count + 1;
+ }
+ }
+
+ // Write out the latest timestamp but not if it is empty
+ if (!empty($timestamp)) {
+ $fd = @fopen($tmpfile, "w");
+ if ($fd) {
+ fwrite($fd, $timestamp);
+ }
+ @fclose($fd);
+ }
+
+ /* If $timestamp is less than or equal to previous_user_timestamp return 0,
+ * as we only want the 'X' number of users logged in since last RRD poll.
+ */
+ if ($timestamp <= $previous_user_timestamp) {
+ $result = 0;
+ } else {
+ $result = $current_user_count;
+ }
+} elseif ($type == "concurrent") {
+ $result = $no_users;
+}
+
+echo "$result";
+
+?>
diff --git a/src/usr/local/bin/easyrule b/src/usr/local/bin/easyrule
new file mode 100755
index 0000000..8461a7a
--- /dev/null
+++ b/src/usr/local/bin/easyrule
@@ -0,0 +1,147 @@
+#!/usr/local/bin/php-cgi -q
+<?php
+/*
+ easyrule CLI Program
+
+ Copyright (C) 2010 Jim Pingle (jpingle@gmail.com)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require_once("pfsense-utils.inc");
+require_once("easyrule.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$message = "";
+$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn");
+$ifdisp = get_configured_interface_with_descr();
+foreach ($ifdisp as $kif => $kdescr) {
+ $specialsrcdst[] = "{$kif}";
+ $specialsrcdst[] = "{$kif}ip";
+}
+
+/* Borrow this function from guiconfig.inc since we can't include it for use at the CLI
+
+ - Maybe these need to be moved to util.inc or pfsense-utils.inc?
+
+*/
+function pconfig_to_address(&$adr, $padr, $pmask, $pnot=false, $pbeginport=0, $pendport=0) {
+
+ $adr = array();
+
+ if ($padr == "any") {
+ $adr['any'] = true;
+ } else if (is_specialnet($padr)) {
+ $adr['network'] = $padr;
+ } else {
+ $adr['address'] = $padr;
+ if ($pmask != 32) {
+ $adr['address'] .= "/" . $pmask;
+ }
+ }
+
+ if ($pnot) {
+ $adr['not'] = true;
+ } else {
+ unset($adr['not']);
+ }
+
+ if (($pbeginport != 0) && ($pbeginport != "any")) {
+ if ($pbeginport != $pendport) {
+ $adr['port'] = $pbeginport . "-" . $pendport;
+ } else {
+ $adr['port'] = $pbeginport;
+ }
+ }
+
+ if (is_alias($pbeginport)) {
+ $adr['port'] = $pbeginport;
+ }
+}
+
+/* Borrow this one from guiconfig.inc also */
+function is_specialnet($net) {
+ global $specialsrcdst;
+
+ if (!$net) {
+ return false;
+ }
+ if (in_array($net, $specialsrcdst)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+if (($argc > 1) && !empty($argv[1])) {
+
+ /* Automagically derive an alternate alias name from the scripts name
+ * This allows for using alternate alias lists with just a symlink */
+ if (($alias = basename($argv[0])) != 'easyrule') {
+ $blockaliasname = ucfirst($alias).'Rules';
+ }
+
+ $message = "";
+ switch ($argv[1]) {
+ case 'block':
+ $message = easyrule_parse_block($argv[2], $argv[3]);
+ break;
+ case 'unblock':
+ $message = easyrule_parse_unblock($argv[2], $argv[3]);
+ break;
+ case 'showblock':
+ $message = easyrule_parse_getblock($argv[2]);
+ break;
+ case 'pass':
+ $message = easyrule_parse_pass($argv[2], $argv[3], $argv[4], $argv[5], $argv[6]);
+ break;
+ }
+ echo $message . "\n";
+} else {
+ // Print usage:
+ echo "usage:\n";
+ echo " Blocking only requires an IP to block, block rules can be shown with showblock and revoked using unblock\n";
+ echo " " . basename($argv[0]) . " block <interface> <source IP>\n";
+ echo "\n";
+ echo " Passing requires more detail, as it must be as specific as possible. The destination port is optional if you're using a protocol without a port (e.g. ICMP, OSPF, etc).\n";
+ echo " " . basename($argv[0]) . " pass <interface> <protocol> <source IP> <destination ip> [destination port]\n";
+ echo "\n";
+ echo " Block example:\n";
+ echo " " . basename($argv[0]) . " block wan 1.2.3.4\n";
+ echo "\n";
+ echo " Show active blocks example:\n";
+ echo " " . basename($argv[0]) . " showblock wan\n";
+ echo "\n";
+ echo " Unblock example:\n";
+ echo " " . basename($argv[0]) . " unblock wan 1.2.3.4\n";
+ echo "\n";
+ echo " Pass example (protocol with port):\n";
+ echo " " . basename($argv[0]) . " pass wan tcp 1.2.3.4 192.168.0.4 80\n";
+ echo "\n";
+ echo " Pass example (protocol without port):\n";
+ echo " " . basename($argv[0]) . " pass wan icmp 1.2.3.4 192.168.0.4\n";
+ echo "\n";
+}
+?>
diff --git a/src/usr/local/bin/filterparser.php b/src/usr/local/bin/filterparser.php
new file mode 100755
index 0000000..fa60262
--- /dev/null
+++ b/src/usr/local/bin/filterparser.php
@@ -0,0 +1,58 @@
+#!/usr/local/bin/php-cgi -q
+<?php
+/* $Id$ */
+/*
+ filterparser.php
+ part of pfSesne by Scott Ullrich
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2009 Jim Pingle <myfirstname>@<mylastname>.org
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+ A quick CLI log parser.
+ Examples:
+ clog /var/log/filter.log | tail -50 | /usr/local/www/filterparser.php
+ clog -f /var/log/filter.log | /usr/local/www/filterparser.php
+*/
+/*
+ pfSense_MODULE: logs
+*/
+
+include_once("functions.inc");
+include_once("filter_log.inc");
+
+$log = fopen("php://stdin", "r");
+$lastline = "";
+while (!feof($log)) {
+ $line = fgets($log);
+ $line = rtrim($line);
+ $flent = parse_filter_line(trim($line));
+ if ($flent != "") {
+ $flags = (($flent['proto'] == "TCP") && !empty($flent['tcpflags'])) ? ":" . $flent['tcpflags'] : "";
+ echo "{$flent['time']} {$flent['act']} {$flent['realint']} {$flent['proto']}{$flags} {$flent['src']} {$flent['dst']}\n";
+ $flent = "";
+ }
+}
+fclose($log); ?>
diff --git a/src/usr/local/bin/mail.php b/src/usr/local/bin/mail.php
new file mode 100755
index 0000000..130d9e0
--- /dev/null
+++ b/src/usr/local/bin/mail.php
@@ -0,0 +1,25 @@
+#!/usr/local/bin/php-cgi -q
+<?php
+require_once("config.inc");
+require_once("globals.inc");
+require_once("notices.inc");
+$options = getopt("s::");
+
+$message = "";
+
+if ($options['s'] <> "") {
+ $subject = $options['s'];
+}
+
+
+$in = file("php://stdin");
+foreach ($in as $line){
+ $message .= "$line";
+}
+
+if (!empty($subject)) {
+ send_smtp_message($message, $subject);
+} else {
+ send_smtp_message($message);
+}
+?>
diff --git a/src/usr/local/bin/ping_hosts.sh b/src/usr/local/bin/ping_hosts.sh
new file mode 100755
index 0000000..eef64f3
--- /dev/null
+++ b/src/usr/local/bin/ping_hosts.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+
+# pfSense ping helper
+# written by Scott Ullrich
+# (C)2006 Scott Ullrich
+# All rights reserved.
+
+# Format of file should be delimited by |
+# Field 1: Source IP
+# Field 2: Destination IP
+# Field 3: Ping count
+# Field 4: Script to run when service is down
+# Field 5: Script to run once service is restored
+# Field 6: Ping time threshold
+# Field 7: Wan ping time threshold
+# Field 8: Address family
+
+# Read in ipsec ping hosts and check the CARP status
+if [ -f /var/db/ipsecpinghosts ]; then
+ IPSECHOSTS="/var/db/ipsecpinghosts"
+ CURRENTIPSECHOSTS="/var/db/currentipsecpinghosts"
+ IFVPNSTATE=`ifconfig $IFVPN | grep "carp: BACKUP vhid" | wc -l`
+ if [ $IFVPNSTATE -gt 1 ]; then
+ echo -e "CARP interface in BACKUP (not pinging ipsec hosts)"
+ rm -f $CURRENTIPSECHOSTS
+ touch $CURRENTIPSECHOSTS
+ else
+ echo -e "CARP interface is MASTER or non CARP (pinging ipsec hosts)"
+ cat < $IPSECHOSTS > $CURRENTIPSECHOSTS
+ fi
+fi
+
+# General file meant for user consumption
+if [ -f /var/db/hosts ]; then
+ HOSTS="/var/db/hosts"
+fi
+
+# Package specific ping requests
+if [ -f /var/db/pkgpinghosts ]; then
+ PKGHOSTS="/var/db/pkgpinghosts"
+fi
+
+cat $PKGHOSTS $HOSTS $CURRENTIPSECHOSTS >/tmp/tmpHOSTS
+
+if [ ! -d /var/db/pingstatus ]; then
+ /bin/mkdir -p /var/db/pingstatus
+fi
+
+if [ ! -d /var/db/pingmsstatus ]; then
+ /bin/mkdir -p /var/db/pingmsstatus
+fi
+
+PINGHOSTS=`cat /tmp/tmpHOSTS`
+
+PINGHOSTCOUNT=`cat /tmp/tmpHOSTS | wc -l`
+
+if [ "$PINGHOSTCOUNT" -lt "1" ]; then
+ exit
+fi
+
+for TOPING in $PINGHOSTS ; do
+ echo "PROCESSING $TOPING"
+ SRCIP=`echo $TOPING | cut -d"|" -f1`
+ DSTIP=`echo $TOPING | cut -d"|" -f2`
+ COUNT=`echo $TOPING | cut -d"|" -f3`
+ FAILURESCRIPT=`echo $TOPING | cut -d"|" -f4`
+ SERVICERESTOREDSCRIPT=`echo $TOPING | cut -d"|" -f5`
+ THRESHOLD=`echo $TOPING | cut -d"|" -f6`
+ WANTHRESHOLD=`echo $TOPING | cut -d"|" -f7`
+ AF=`echo $TOPING | cut -d"|" -f8`
+ if [ "$AF" == "inet6" ]; then
+ PINGCMD=ping6
+ else
+ PINGCMD=ping
+ fi
+ echo Processing $DSTIP
+ # Look for a service being down
+ # Read in previous status
+ PREVIOUSSTATUS=""
+ if [ -f "/var/db/pingstatus/${DSTIP}" ]; then
+ PREVIOUSSTATUS=`cat /var/db/pingstatus/$DSTIP`
+ fi
+ $PINGCMD -c $COUNT -S $SRCIP $DSTIP
+ if [ $? -eq 0 ]; then
+ # Host is up
+ if [ "$PREVIOUSSTATUS" != "UP" ]; then
+ # Service restored
+ echo "UP" > /var/db/pingstatus/$DSTIP
+ if [ "$SERVICERESTOREDSCRIPT" != "" ]; then
+ echo "$DSTIP is UP, previous state was DOWN .. Running $SERVICERESTOREDSCRIPT"
+ echo "$DSTIP is UP, previous state was DOWN .. Running $SERVICERESTOREDSCRIPT" | logger -p daemon.info -i -t PingMonitor
+ sh -c $SERVICERESTOREDSCRIPT
+ fi
+ fi
+ else
+ # Host is down
+ if [ "$PREVIOUSSTATUS" != "DOWN" ]; then
+ # Service is down
+ echo "DOWN" > /var/db/pingstatus/$DSTIP
+ if [ "$FAILURESCRIPT" != "" ]; then
+ echo "$DSTIP is DOWN, previous state was UP .. Running $FAILURESCRIPT"
+ echo "$DSTIP is DOWN, previous state was UP .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor
+ sh -c $FAILURESCRIPT
+ fi
+ fi
+ fi
+ echo "Checking ping time $DSTIP"
+ # Look at ping values themselves
+ PINGTIME=`$PINGCMD -c 1 -S $SRCIP $DSTIP | awk '{ print $7 }' | grep time | cut -d "=" -f2`
+ echo "Ping returned $?"
+ echo $PINGTIME > /var/db/pingmsstatus/$DSTIP
+ if [ "$THRESHOLD" != "" ]; then
+ if [ $(echo "${PINGTIME} > ${THRESHOLD}" | /usr/bin/bc) -eq 1 ]; then
+ echo "$DSTIP has exceeded ping threshold $PINGTIME / $THRESHOLD .. Running $FAILURESCRIPT"
+ echo "$DSTIP has exceeded ping threshold $PINGTIME / $THRESHOLD .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor
+ sh -c $FAILURESCRIPT
+ fi
+ fi
+ # Wan ping time threshold
+ #WANTIME=`rrdtool fetch /var/db/rrd/wan-quality.rrd AVERAGE -r 120 -s -1min -e -1min | grep ":" | cut -f3 -d" " | cut -d"e" -f1`
+ echo "Checking wan ping time $WANTIME"
+ echo $WANTIME > /var/db/wanaverage
+ if [ "$WANTHRESHOLD" != "" -a "$WANTIME" != "" ]; then
+ if [ $(echo "${WANTIME} > ${WANTHRESHOLD}" | /usr/bin/bc) -eq 1 ]; then
+ echo "$DSTIP has exceeded wan ping threshold $WANTIME / $WANTHRESHOLD .. Running $FAILURESCRIPT"
+ echo "$DSTIP has exceeded wan ping threshold $WANTIME / $WANTHRESHOLD .. Running $FAILURESCRIPT" | logger -p daemon.info -i -t PingMonitor
+ sh -c $FAILURESCRIPT
+ fi
+ fi
+ sleep 1
+done
+
+exit 0
+
diff --git a/src/usr/local/bin/runmsntp.sh b/src/usr/local/bin/runmsntp.sh
new file mode 100755
index 0000000..d770632
--- /dev/null
+++ b/src/usr/local/bin/runmsntp.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# write our PID to file
+echo $$ > $1
+
+# execute msntp in endless loop; restart if it
+# exits (wait 1 second to avoid restarting too fast in case
+# the network is not yet setup)
+while true; do
+ /usr/local/bin/msntp -v -r -P no -l $2 -x $3 $4 2>&1 | logger -p daemon.info -i -t msntp
+ sleep 60
+done
diff --git a/src/usr/local/bin/slowdownpipe.sh b/src/usr/local/bin/slowdownpipe.sh
new file mode 100755
index 0000000..13b9e8d
--- /dev/null
+++ b/src/usr/local/bin/slowdownpipe.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Illustrates use of a while loop to read a file
+
+cat - | \
+while read line
+do
+ echo "$line"
+ sleep 0.01
+done
diff --git a/src/usr/local/bin/viconfig b/src/usr/local/bin/viconfig
new file mode 100755
index 0000000..93618f2
--- /dev/null
+++ b/src/usr/local/bin/viconfig
@@ -0,0 +1,3 @@
+#!/bin/sh
+vi /cf/conf/config.xml
+rm /tmp/config.cache \ No newline at end of file
diff --git a/src/usr/local/captiveportal/index.php b/src/usr/local/captiveportal/index.php
new file mode 100644
index 0000000..d450233
--- /dev/null
+++ b/src/usr/local/captiveportal/index.php
@@ -0,0 +1,252 @@
+<?php
+/*
+ $Id$
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+require_once("auth.inc");
+require_once("functions.inc");
+require_once("captiveportal.inc");
+
+$errormsg = "Invalid credentials specified.";
+
+header("Expires: 0");
+header("Cache-Control: no-cache, no-store, must-revalidate");
+header("Pragma: no-cache");
+header("Connection: close");
+
+global $cpzone, $cpzoneid;
+
+$cpzone = $_REQUEST['zone'];
+$cpcfg = $config['captiveportal'][$cpzone];
+if (empty($cpcfg)) {
+ log_error("Submission to captiveportal with unknown parameter zone: " . htmlspecialchars($cpzone));
+ portal_reply_page($redirurl, "error", $errormsg);
+ ob_flush();
+ return;
+}
+
+$cpzoneid = $cpcfg['zoneid'];
+
+$orig_host = $_SERVER['HTTP_HOST'];
+/* NOTE: IE 8/9 is buggy and that is why this is needed */
+$orig_request = trim($_REQUEST['redirurl'], " /");
+$clientip = $_SERVER['REMOTE_ADDR'];
+
+if (!$clientip) {
+ /* not good - bail out */
+ log_error("Zone: {$cpzone} - Captive portal could not determine client's IP address.");
+ $error_message = "An error occurred. Please check the system logs for more information.";
+ portal_reply_page($redirurl, "error", $errormsg);
+ ob_flush();
+ return;
+}
+
+$ourhostname = portal_hostname_from_client_ip($clientip);
+if ($orig_host != $ourhostname) {
+ /* the client thinks it's connected to the desired web server, but instead
+ it's connected to us. Issue a redirect... */
+ $protocol = (isset($cpcfg['httpslogin'])) ? 'https://' : 'http://';
+ header("Location: {$protocol}{$ourhostname}/index.php?zone={$cpzone}&redirurl=" . urlencode("http://{$orig_host}/{$orig_request}"));
+
+ ob_flush();
+ return;
+}
+
+if (!empty($cpcfg['redirurl'])) {
+ $redirurl = $cpcfg['redirurl'];
+} else if (preg_match("/redirurl=(.*)/", $orig_request, $matches)) {
+ $redirurl = urldecode($matches[1]);
+} else if ($_REQUEST['redirurl']) {
+ $redirurl = $_REQUEST['redirurl'];
+}
+
+$macfilter = !isset($cpcfg['nomacfilter']);
+$passthrumac = isset($cpcfg['passthrumacadd']);
+
+/* find MAC address for client */
+if ($macfilter || $passthrumac) {
+ $tmpres = pfSense_ip_to_mac($clientip);
+ if (!is_array($tmpres)) {
+ /* unable to find MAC address - shouldn't happen! - bail out */
+ captiveportal_logportalauth("unauthenticated", "noclientmac", $clientip, "ERROR");
+ echo "An error occurred. Please check the system logs for more information.";
+ log_error("Zone: {$cpzone} - Captive portal could not determine client's MAC address. Disable MAC address filtering in captive portal if you do not need this functionality.");
+ ob_flush();
+ return;
+ }
+ $clientmac = $tmpres['macaddr'];
+ unset($tmpres);
+}
+
+/* find out if we need RADIUS + RADIUSMAC or not */
+if (file_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db")) {
+ $radius_enable = TRUE;
+ if (isset($cpcfg['radmac_enable'])) {
+ $radmac_enable = TRUE;
+ }
+}
+
+/* find radius context */
+$radiusctx = 'first';
+if ($_POST['auth_user2']) {
+ $radiusctx = 'second';
+}
+
+if ($_POST['logout_id']) {
+ echo <<<EOD
+<html>
+<head><title>Disconnecting...</title></head>
+<body bgcolor="#435370">
+<span style="color: #ffffff; font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">
+<b>You have been disconnected.</b>
+</span>
+<script type="text/javascript">
+<!--
+setTimeout('window.close();',5000) ;
+-->
+</script>
+</body>
+</html>
+
+EOD;
+ captiveportal_disconnect_client($_POST['logout_id']);
+
+} else if ($macfilter && $clientmac && captiveportal_blocked_mac($clientmac)) {
+ captiveportal_logportalauth($clientmac, $clientmac, $clientip, "Blocked MAC address");
+ if (!empty($cpcfg['blockedmacsurl'])) {
+ portal_reply_page($cpcfg['blockedmacsurl'], "redir");
+ } else {
+ portal_reply_page($redirurl, "error", "This MAC address has been blocked");
+ }
+
+} else if ($clientmac && $radmac_enable && portal_mac_radius($clientmac, $clientip, $radiusctx)) {
+ /* radius functions handle everything so we exit here since we're done */
+
+} else if (portal_consume_passthrough_credit($clientmac)) {
+ /* allow the client through if it had a pass-through credit for its MAC */
+ captiveportal_logportalauth("unauthenticated", $clientmac, $clientip, "ACCEPT");
+ portal_allow($clientip, $clientmac, "unauthenticated");
+
+} else if (isset($config['voucher'][$cpzone]['enable']) && $_POST['accept'] && $_POST['auth_voucher']) {
+ $voucher = trim($_POST['auth_voucher']);
+ $timecredit = voucher_auth($voucher);
+ // $timecredit contains either a credit in minutes or an error message
+ if ($timecredit > 0) { // voucher is valid. Remaining minutes returned
+ // if multiple vouchers given, use the first as username
+ $a_vouchers = preg_split("/[\t\n\r ]+/s", $voucher);
+ $voucher = $a_vouchers[0];
+ $attr = array(
+ 'voucher' => 1,
+ 'session_timeout' => $timecredit*60,
+ 'session_terminate_time' => 0);
+ if (portal_allow($clientip, $clientmac, $voucher, null, $attr)) {
+ // YES: user is good for $timecredit minutes.
+ captiveportal_logportalauth($voucher, $clientmac, $clientip, "Voucher login good for $timecredit min.");
+ } else {
+ portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['descrmsgexpired'] ? $config['voucher'][$cpzone]['descrmsgexpired']: $errormsg);
+ }
+ } else if (-1 == $timecredit) { // valid but expired
+ captiveportal_logportalauth($voucher, $clientmac, $clientip, "FAILURE", "voucher expired");
+ portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['descrmsgexpired'] ? $config['voucher'][$cpzone]['descrmsgexpired']: $errormsg);
+ } else {
+ captiveportal_logportalauth($voucher, $clientmac, $clientip, "FAILURE");
+ portal_reply_page($redirurl, "error", $config['voucher'][$cpzone]['descrmsgnoaccess'] ? $config['voucher'][$cpzone]['descrmsgnoaccess'] : $errormsg);
+ }
+
+} else if ($_POST['accept'] && $radius_enable) {
+ if (($_POST['auth_user'] && isset($_POST['auth_pass'])) || ($_POST['auth_user2'] && isset($_POST['auth_pass2']))) {
+ if (!empty($_POST['auth_user'])) {
+ $user = $_POST['auth_user'];
+ $paswd = $_POST['auth_pass'];
+ } else if (!empty($_POST['auth_user2'])) {
+ $user = $_POST['auth_user2'];
+ $paswd = $_POST['auth_pass2'];
+ }
+ $auth_list = radius($user, $paswd, $clientip, $clientmac, "USER LOGIN", $radiusctx);
+ $type = "error";
+ if (!empty($auth_list['url_redirection'])) {
+ $redirurl = $auth_list['url_redirection'];
+ $type = "redir";
+ }
+
+ if ($auth_list['auth_val'] == 1) {
+ captiveportal_logportalauth($user, $clientmac, $clientip, "ERROR", $auth_list['error']);
+ portal_reply_page($redirurl, $type, $auth_list['error'] ? $auth_list['error'] : $errormsg);
+ } else if ($auth_list['auth_val'] == 3) {
+ captiveportal_logportalauth($user, $clientmac, $clientip, "FAILURE", $auth_list['reply_message']);
+ portal_reply_page($redirurl, $type, $auth_list['reply_message'] ? $auth_list['reply_message'] : $errormsg);
+ }
+ } else {
+ if (!empty($_POST['auth_user'])) {
+ $user = $_POST['auth_user'];
+ } else if (!empty($_POST['auth_user2'])) {
+ $user = $_POST['auth_user2'];
+ } else {
+ $user = 'unknown';
+ }
+ captiveportal_logportalauth($user, $clientmac, $clientip, "ERROR");
+ portal_reply_page($redirurl, "error", $errormsg);
+ }
+
+} else if ($_POST['accept'] && $cpcfg['auth_method'] == "local") {
+ if ($_POST['auth_user'] && $_POST['auth_pass']) {
+ //check against local user manager
+ $loginok = local_backed($_POST['auth_user'], $_POST['auth_pass']);
+
+ if ($loginok && isset($cpcfg['localauth_priv'])) {
+ $loginok = userHasPrivilege(getUserEntry($_POST['auth_user']), "user-services-captiveportal-login");
+ }
+
+ if ($loginok) {
+ captiveportal_logportalauth($_POST['auth_user'], $clientmac, $clientip, "LOGIN");
+ portal_allow($clientip, $clientmac, $_POST['auth_user']);
+ } else {
+ captiveportal_logportalauth($_POST['auth_user'], $clientmac, $clientip, "FAILURE");
+ portal_reply_page($redirurl, "error", $errormsg);
+ }
+ } else {
+ portal_reply_page($redirurl, "error", $errormsg);
+ }
+
+} else if ($_POST['accept'] && $clientip && $cpcfg['auth_method'] == "none") {
+ captiveportal_logportalauth("unauthenticated", $clientmac, $clientip, "ACCEPT");
+ portal_allow($clientip, $clientmac, "unauthenticated");
+
+} else {
+ /* display captive portal page */
+ portal_reply_page($redirurl, "login", null, $clientmac, $clientip);
+}
+
+ob_flush();
+
+?>
diff --git a/src/usr/local/captiveportal/radius_accounting.inc b/src/usr/local/captiveportal/radius_accounting.inc
new file mode 100644
index 0000000..2d9c97e
--- /dev/null
+++ b/src/usr/local/captiveportal/radius_accounting.inc
@@ -0,0 +1,323 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+/*
+
+ $Id$
+
+ Copyright (c) 2006, Jonathan De Graeve <jonathan.de.graeve@imelda.be>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. The names of the authors may not 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 COPYRIGHT OWNER 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.
+
+ This code cannot simply be copied and put under the GNU Public License or
+ any other GPL-like (LGPL, GPL2) License.
+
+ This code is made possible thx to samples made by Michael Bretterklieber <michael@bretterklieber.com>
+ author of the PHP PECL Radius package
+
+*/
+
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+define('GIGAWORDS_RIGHT_OPERAND', '4294967296'); // 2^32
+
+/*
+RADIUS ACCOUNTING START
+-----------------------
+*/
+
+PEAR::loadExtension('bcmath');
+
+function RADIUS_ACCOUNTING_START($ruleno, $username, $sessionid, $radiusservers, $clientip, $clientmac) {
+
+ global $config, $cpzone;
+
+ $retvalue = array();
+ $nas_mac = mac_format(get_interface_mac("wan"));
+ $clientmac = mac_format($clientmac);
+ $nas_port = intval($ruleno);
+ $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null;
+
+ switch ($radiusvendor) {
+
+ case 'cisco':
+ $calledstationid = $clientmac;
+ $callingstationid = $clientip;
+ break;
+
+ default:
+ if (!function_exists('getNasIP'))
+ require_once("captiveportal.inc");
+ $calledstationid = getNasIP();
+ $callingstationid = $clientmac;
+ break;
+ }
+
+ // Create our instance
+ $racct = new Auth_RADIUS_Acct_Start;
+
+ /* Different Authentication options
+ *
+ * Its possible todo other authentication methods but still do radius accounting
+ *
+ * RADIUS_AUTH_RADIUS => authenticated via Radius
+ * RADIUS_AUTH_LOCAL => authenticated local
+ * RADIUS_AUTH_REMOTE => authenticated remote
+ *
+ */
+ $racct->authentic = RADIUS_AUTH_RADIUS;
+
+ // Construct data package
+ $racct->username = $username;
+ /*
+ Add support for more then one radiusserver.
+ At most 10 servers may be specified.
+ When multiple servers are given, they are tried in round-robin fashion until a valid response is received
+ */
+ foreach ($radiusservers as $radsrv) {
+ // Add a new server to our instance
+ $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']);
+ }
+
+ if (PEAR::isError($racct->start())) {
+ $retvalue['acct_val'] = 1;
+ $retvalue['error'] = $racct->getMessage();
+
+ // If we encounter an error immediately stop this function and go back
+ $racct->close();
+ return $retvalue;
+
+ /* Old code:
+ * $status = $racct->start();
+ * if(PEAR::isError($status)) {
+ * if ($debug)
+ * printf("Radius start: %s<br />\n", $status->getMessage());
+ * exit;
+ * }
+ */
+ }
+
+ /*
+ * NAS_PORT_TYPE, int => RADIUS_ETHERNET (15), RADIUS_WIRELESS_OTHER (18), RADIUS_WIRELESS_IEEE_802_11 (19)
+ */
+
+ // Default attributes
+ $racct->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET);
+ $racct->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer');
+ $racct->putAttribute(RADIUS_ACCT_SESSION_ID, $sessionid);
+
+ // Extra data to identify the client and nas
+ $racct->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, "addr");
+ $racct->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid);
+ $racct->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid);
+
+ // Send request
+ $result = $racct->send();
+
+ // Evaluation of the response
+ // 5 -> Accounting-Response
+ // See RFC2866 for this.
+ if (PEAR::isError($result)) {
+ $retvalue['acct_val'] = 1;
+ $retvalue['error'] = $result->getMessage();
+
+ } else if ($result === true) {
+ $retvalue['acct_val'] = 5 ;
+
+ } else {
+ $retvalue['acct_val'] = 1 ;
+
+ }
+
+ // close OO RADIUS_ACCOUNTING
+ $racct->close();
+ unset($racct);
+
+ return $retvalue ;
+
+}
+
+/*
+RADIUS ACCOUNTING STOP/UPDATE
+-----------------------------
+*/
+
+function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radiusservers,$clientip,$clientmac, $term_cause = 1, $interimupdate=false,$stop_time = null) {
+
+ global $config, $cpzone;
+
+ $retvalue = array();
+ $nas_mac = mac_format(get_interface_mac("wan"));
+ $volume = getVolume($clientip, $clientmac);
+ $clientmac = mac_format($clientmac);
+ $nas_port = intval($ruleno);
+ $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null;
+ $stop_time = (empty($stop_time)) ? time() : $stop_time;
+ $session_time = $stop_time - $start_time;
+ $volume['input_bytes_radius'] = remainder($volume['input_bytes']);
+ $volume['input_gigawords'] = gigawords($volume['input_bytes']);
+ $volume['output_bytes_radius'] = remainder($volume['output_bytes']);
+ $volume['output_gigawords'] = gigawords($volume['output_bytes']);
+
+ switch($radiusvendor) {
+
+ case 'cisco':
+ $calledstationid = $clientmac;
+ $callingstationid = $clientip;
+ break;
+
+ default:
+ $calledstationid = getNasIP();
+ $callingstationid = $clientmac;
+ break;
+ }
+
+ // Create our instance, see if we should use Accounting Interim Updates or Accounting STOP messages
+ if ($interimupdate)
+ $racct = new Auth_RADIUS_Acct_Update;
+ else
+ $racct = new Auth_RADIUS_Acct_Stop;
+
+ /*
+ Add support for more then one radiusserver.
+ At most 10 servers may be specified.
+ When multiple servers are given, they are tried in round-robin fashion until a valid response is received
+ */
+ foreach ($radiusservers as $radsrv) {
+ // Add a new server to our instance
+ $racct->addServer($radsrv['ipaddr'], $radsrv['acctport'], $radsrv['key']);
+ }
+
+ // See RADIUS_ACCOUNTING_START for info
+ $racct->authentic = RADIUS_AUTH_RADIUS;
+
+ // Construct data package
+ $racct->username = $username;
+ // Set session_time
+ $racct->session_time = $session_time;
+
+ if (PEAR::isError($racct->start())) {
+ $retvalue['acct_val'] = 1;
+ $retvalue['error'] = $racct->getMessage();
+
+ // If we encounter an error immediately stop this function and go back
+ $racct->close();
+ return $retvalue;
+ }
+
+ // The RADIUS PECL Package doesn't have this vars so we create them ourself
+ define("RADIUS_ACCT_INPUT_GIGAWORDS", "52");
+ define("RADIUS_ACCT_OUTPUT_GIGAWORDS", "53");
+
+ // Default attributes
+ $racct->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET);
+ $racct->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer');
+ $racct->putAttribute(RADIUS_ACCT_SESSION_ID, $sessionid);
+
+ // Extra data to identify the client and nas
+ $racct->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, "addr");
+ $racct->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid);
+ $racct->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid);
+
+ // Volume stuff: Ingress
+ $racct->putAttribute(RADIUS_ACCT_INPUT_PACKETS, $volume['input_pkts'], "integer");
+ $racct->putAttribute(RADIUS_ACCT_INPUT_OCTETS, $volume['input_bytes_radius'], "integer");
+ $racct->putAttribute(RADIUS_ACCT_INPUT_GIGAWORDS, $volume['input_gigawords'], "integer");
+ // Volume stuff: Outgress
+ $racct->putAttribute(RADIUS_ACCT_OUTPUT_PACKETS, $volume['output_pkts'], "integer");
+ $racct->putAttribute(RADIUS_ACCT_OUTPUT_OCTETS, $volume['output_bytes_radius'], "integer");
+ $racct->putAttribute(RADIUS_ACCT_OUTPUT_GIGAWORDS, $volume['output_gigawords'], "integer");
+ $racct->putAttribute(RADIUS_ACCT_SESSION_TIME, $session_time, "integer");
+
+ if (!$interimupdate)
+ $racct->putAttribute(RADIUS_ACCT_TERMINATE_CAUSE, $term_cause);
+
+ // Send request
+ $result = $racct->send();
+
+ // Evaluation of the response
+ // 5 -> Accounting-Response
+ // See RFC2866 for this.
+ if (PEAR::isError($result)) {
+ $retvalue['acct_val'] = 1;
+ $retvalue['error'] = $result->getMessage();
+
+ } else if ($result === true) {
+ $retvalue['acct_val'] = 5 ;
+
+ } else {
+ $retvalue['acct_val'] = 1 ;
+
+ }
+
+ // close OO RADIUS_ACCOUNTING
+ $racct->close();
+
+ return $retvalue;
+
+}
+
+
+/**
+ * Radius Volume Helpers
+ *
+ */
+
+function gigawords($bytes) {
+
+
+ /*
+ * RFC2866 Specifies a 32bit unsigned integer, which is a max of 4294967295
+ * Currently there is a fault in the PECL radius_put_int function which can handle only 32bit signed integer.
+ */
+
+ // We use BCMath functions since normal integers don't work with so large numbers
+ $gigawords = bcdiv( bcsub( $bytes, remainder($bytes) ) , GIGAWORDS_RIGHT_OPERAND) ;
+
+ // We need to manually set this to a zero instead of NULL for put_int() safety
+ if (is_null($gigawords)) {
+ $gigawords = 0;
+ }
+
+ return $gigawords;
+
+}
+
+function remainder($bytes) {
+
+ // Calculate the bytes we are going to send to the radius
+ $bytes = bcmod($bytes, GIGAWORDS_RIGHT_OPERAND);
+
+ if (is_null($bytes)) {
+ $bytes = 0;
+ }
+
+
+ return $bytes;
+
+}
+
+?>
diff --git a/src/usr/local/captiveportal/radius_authentication.inc b/src/usr/local/captiveportal/radius_authentication.inc
new file mode 100644
index 0000000..9938e24
--- /dev/null
+++ b/src/usr/local/captiveportal/radius_authentication.inc
@@ -0,0 +1,189 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+/*
+ $Id$
+
+ Copyright (c) 2006, Jonathan De Graeve <jonathan.de.graeve@imelda.be>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+ 3. The names of the authors may not 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 COPYRIGHT OWNER 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.
+
+ This code cannot simply be copied and put under the GNU Public License or
+ any other GPL-like (LGPL, GPL2) License.
+
+ This code is made possible thx to samples made by Michael Bretterklieber <michael@bretterklieber.com>
+ author of the PHP PECL Radius package
+
+*/
+
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+/*
+RADIUS AUTHENTICATION
+---------------------
+*/
+
+require_once("CHAP.inc");
+
+function RADIUS_AUTHENTICATION($username,$password,$radiusservers,$clientip,$clientmac,$ruleno) {
+
+ global $config, $cpzone;
+
+ $retvalue = array();
+ $clientmac = mac_format($clientmac);
+ $nas_port = $ruleno;
+ $radiusvendor = $config['captiveportal'][$cpzone]['radiusvendor'] ? $config['captiveportal'][$cpzone]['radiusvendor'] : null;
+ $radius_protocol = $config['captiveportal'][$cpzone]['radius_protocol'];
+ // Do we even need to set it to NULL?
+ $retvalue['error'] = $retvalue['reply_message'] = $retvalue['url_redirection'] = $retvalue['session_timeout'] = null;
+ $retvalue['idle_timeout'] = $retvalue['session_terminate_time'] = $retvalue['interim_interval'] = null;
+
+ switch($radiusvendor) {
+
+ case 'cisco':
+ $calledstationid = $clientmac;
+ $callingstationid = $clientip;
+ break;
+ default:
+ if (!function_exists('getNasIP'))
+ require_once("captiveportal.inc");
+ $calledstationid = getNasIP();
+ $callingstationid = $clientmac;
+ break;
+ }
+
+ // Create our instance
+ $classname = 'Auth_RADIUS_' . $radius_protocol;
+ $rauth = new $classname($username, $password);
+
+ /*
+ * Add support for more then one radiusserver.
+ * At most 10 servers may be specified.
+ * When multiple servers are given, they are tried in round-robin fashion until a valid response is received
+ */
+ foreach ($radiusservers as $radsrv) {
+ // Add a new server to our instance
+ $rauth->addServer($radsrv['ipaddr'], $radsrv['port'], $radsrv['key']);
+
+ }
+
+ // Construct data package
+ $rauth->username = $username;
+ switch ($radius_protocol) {
+ case 'CHAP_MD5':
+ case 'MSCHAPv1':
+ $classname = $radius_protocol == 'MSCHAPv1' ? 'Crypt_CHAP_MSv1' : 'Crypt_CHAP_MD5';
+ $crpt = new $classname;
+ $crpt->username = $username;
+ $crpt->password = $password;
+ $rauth->challenge = $crpt->challenge;
+ $rauth->chapid = $crpt->chapid;
+ $rauth->response = $crpt->challengeResponse();
+ $rauth->flags = 1;
+ // If you must use deprecated and weak LAN-Manager-Responses use this:
+ //$rauth->lmResponse = $crpt->lmChallengeResponse();
+ //$rauth->flags = 0;
+ break;
+
+ case 'MSCHAPv2':
+ // Construct data package
+ $crpt = new Crypt_CHAP_MSv2;
+ $crpt->username = $username;
+ $crpt->password = $password;
+ $rauth->challenge = $crpt->authChallenge;
+ $rauth->peerChallenge = $crpt->peerChallenge;
+ $rauth->chapid = $crpt->chapid;
+ $rauth->response = $crpt->challengeResponse();
+ break;
+
+ default:
+ $rauth->password = $password;
+ break;
+ }
+
+ if (PEAR::isError($rauth->start())) {
+ $retvalue['auth_val'] = 1;
+ $retvalue['error'] = $rauth->getError();
+
+ // If we encounter an error immediately stop this function and go back
+ $rauth->close();
+ return $retvalue;
+ }
+
+ // Default attributes
+ $rauth->putAttribute(RADIUS_SERVICE_TYPE, RADIUS_LOGIN);
+ $rauth->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET);
+ $rauth->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer');
+
+ // Extra data to identify the client and nas
+ $rauth->putAttribute(RADIUS_FRAMED_IP_ADDRESS, $clientip, addr);
+ $rauth->putAttribute(RADIUS_CALLED_STATION_ID, $calledstationid);
+ $rauth->putAttribute(RADIUS_CALLING_STATION_ID, $callingstationid);
+
+ // Send request
+ $result = $rauth->send();
+
+ // Evaluation of the response
+ // 1 -> Access-Request => We will use this value as an error indicator since we can't get a 1 back from the radius
+ // 2 -> Access-Accept
+ // 3 -> Access-Reject
+ // See RFC2865 for this.
+ if (PEAR::isError($result)) {
+ $retvalue['auth_val'] = 1;
+ $retvalue['error'] = $result->getMessage();
+
+ } else if ($result === true) {
+ $retvalue['auth_val'] = 2;
+
+ } else {
+ $retvalue['auth_val'] = 3;
+
+ }
+
+ // Get attributes, even if auth failed.
+ // We will push the results in the retvalue array
+ if (!$rauth->getAttributes()) {
+ $retvalue['error'] = $rauth->getError();
+
+ } else {
+ $retvalue = array_merge($retvalue,$rauth->listAttributes());
+
+ // We convert the session_terminate_time to unixtimestamp if its set before returning the whole array to our caller
+ if (!empty($retvalue['session_terminate_time'])) {
+ $stt = &$retvalue['session_terminate_time'];
+ $stt = strtotime(preg_replace("/\+(\d+):(\d+)$/", " +\${1}\${2}", preg_replace("/(\d+)T(\d+)/", "\${1} \${2}",$stt)));
+ }
+ }
+
+ // close OO RADIUS_AUTHENTICATION
+ $rauth->close();
+ unset($rauth);
+
+ return $retvalue;
+
+}
+
+?>
diff --git a/src/usr/local/openssl/openssl.cnf b/src/usr/local/openssl/openssl.cnf
new file mode 120000
index 0000000..f95d25b
--- /dev/null
+++ b/src/usr/local/openssl/openssl.cnf
@@ -0,0 +1 @@
+../../../etc/ssl/openssl.cnf \ No newline at end of file
diff --git a/src/usr/local/pkg/miniupnpd.inc b/src/usr/local/pkg/miniupnpd.inc
new file mode 100644
index 0000000..4ea768c
--- /dev/null
+++ b/src/usr/local/pkg/miniupnpd.inc
@@ -0,0 +1,297 @@
+<?php
+ require_once("util.inc");
+ require_once("config.inc");
+ require_once("functions.inc");
+ require_once("shaper.inc");
+
+ $shortcut_section = "upnp";
+
+ /* MiniUPnPd */
+
+ function upnp_notice($msg) {
+ log_error("miniupnpd: {$msg}");
+ }
+
+ function upnp_warn($msg) {
+ log_error("miniupnpd: {$msg}");
+ }
+
+ function upnp_running () {
+ if ((int)exec('/bin/pgrep -a miniupnpd | /usr/bin/wc -l') > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ function upnp_write_config($file, $text) {
+ $handle = fopen($file, 'w');
+ if (!$handle) {
+ upnp_warn("Could not open {$file} for writing.");
+ return;
+ }
+ fwrite($handle, $text);
+ fclose($handle);
+ }
+
+ function upnp_uuid() {
+ /* md5 hash of wan mac */
+ $uuid = md5(get_interface_mac(get_real_interface("wan")));
+ /* put uuid in correct format 8-4-4-4-12 */
+ return substr($uuid, 0, 8) . '-' . substr($uuid, 9, 4) . '-' . substr($uuid, 13, 4) . '-' . substr($uuid, 17, 4) . '-' . substr($uuid, 21, 12);
+ }
+
+ function upnp_validate_queue($qname) {
+ read_altq_config();
+ $qlist = get_altq_name_list();
+ if (is_array($qlist)) {
+ return in_array($qname, $qlist);
+ } else {
+ return false;
+ }
+ }
+
+ function upnp_validate_ip($ip, $check_cdir) {
+ /* validate cidr */
+ $ip_array = array();
+ if ($check_cdir) {
+ $ip_array = explode('/', $ip);
+ if (count($ip_array) == 2) {
+ if ($ip_array[1] < 1 || $ip_array[1] > 32) {
+ return false;
+ }
+ } else {
+ if (count($ip_array) != 1) {
+ return false;
+ }
+ }
+ } else {
+ $ip_array[] = $ip;
+ }
+
+ /* validate ip */
+ if (!is_ipaddr($ip_array[0])) {
+ return false;
+ }
+ return true;
+ }
+
+ function upnp_validate_port($port) {
+ foreach (explode('-', $port) as $sub) {
+ if ($sub < 0 || $sub > 65535) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function before_form_miniupnpd(&$pkg) {
+ global $config;
+
+ }
+
+ function validate_form_miniupnpd($post, &$input_errors) {
+ if ($post['enable'] && (!$post['enable_upnp'] && !$post['enable_natpmp'])) {
+ $input_errors[] = 'At least one of \'UPnP\' or \'NAT-PMP\' must be allowed';
+ }
+ if ($post['iface_array']) {
+ foreach ($post['iface_array'] as $iface) {
+ if ($iface == 'wan') {
+ $input_errors[] = 'It is a security risk to specify WAN in the \'Interface\' field';
+ } elseif ($iface == $post['ext_iface']) {
+ $input_errors[] = 'You cannot select the external interface as an internal interface.';
+ }
+ }
+ }
+ if ($post['overridewanip'] && !upnp_validate_ip($post['overridewanip'], false)) {
+ $input_errors[] = 'You must specify a valid ip address in the \'Override WAN address\' field';
+ }
+ if (($post['download'] && !$post['upload']) || ($post['upload'] && !$post['download'])) {
+ $input_errors[] = 'You must fill in both \'Maximum Download Speed\' and \'Maximum Upload Speed\' fields';
+ }
+ if ($post['download'] && $post['download'] <= 0) {
+ $input_errors[] = 'You must specify a value greater than 0 in the \'Maximum Download Speed\' field';
+ }
+ if ($post['upload'] && $post['upload'] <= 0) {
+ $input_errors[] = 'You must specify a value greater than 0 in the \'Maximum Upload Speed\' field';
+ }
+ if ($post['upnpqueue'] && !upnp_validate_queue($post['upnpqueue'])) {
+ $input_errors[] = 'You must specify a valid traffic shaping queue.';
+ }
+
+ /* user permissions validation */
+ $j = substr_count(implode(array_keys($post)), "permuser");
+ for ($i = 0; $i < $j; $i++) {
+ if ($post["permuser{$i}"]) {
+ $perm = explode(' ', $post["permuser{$i}"]);
+ /* should explode to 4 args */
+ if (count($perm) != 4) {
+ $input_errors[] = "You must follow the specified format in the 'User specified permissions {$i}' field";
+ } else {
+ /* must with allow or deny */
+ if (!($perm[0] == 'allow' || $perm[0] == 'deny')) {
+ $input_errors[] = "You must begin with allow or deny in the 'User specified permissions {$i}' field";
+ }
+ /* verify port or port range */
+ if (!upnp_validate_port($perm[1]) || !upnp_validate_port($perm[3])) {
+ $input_errors[] = "You must specify a port or port range between 0 and 65535 in the 'User specified permissions {$i}' field";
+ }
+ /* verify ip address */
+ if (!upnp_validate_ip($perm[2], true)) {
+ $input_errors[] = "You must specify a valid ip address in the 'User specified permissions {$i}' field";
+ }
+ }
+ }
+ }
+ }
+
+ function sync_package_miniupnpd() {
+ global $g, $config;
+ global $input_errors;
+
+ $upnp_config = $config['installedpackages']['miniupnpd']['config'][0];
+ $config_file = '/var/etc/miniupnpd.conf';
+
+ if (!isset($upnp_config['ext_iface']) || empty($upnp_config['ext_iface'])) {
+ $ext_ifname = get_real_interface();
+ } else {
+ $if = convert_friendly_interface_to_real_interface_name($upnp_config['ext_iface']);
+ if ($if != $upnp_config['ext_iface']) {
+ $ext_ifname = $if;
+ } else {
+ $ext_ifname = get_real_interface();
+ upnp_warn("Could not resolve real interface for {$upnp_config['ext_iface']}, defaulting to WAN");
+ }
+ }
+
+ $config_text = "ext_ifname={$ext_ifname}\n";
+ $config_text .= "port=2189\n";
+
+ $ifaces_active = '';
+
+ /* since config is written before this file is invoked we don't need to read post data */
+ if ($upnp_config['enable'] && !empty($upnp_config['iface_array'])) {
+ $iface_array = explode(',', $upnp_config['iface_array']);
+
+ foreach ($iface_array as $iface) {
+ /* Setting the same internal and external interface is not allowed. */
+ if ($iface == $upnp_config['ext_iface']) {
+ continue;
+ }
+ $if = convert_friendly_interface_to_real_interface_name($iface);
+ /* above function returns iface if fail */
+ if ($if != $iface) {
+ $addr = find_interface_ip($if);
+ $bits = find_interface_subnet($if);
+ /* check that the interface has an ip address before adding parameters */
+ if (is_ipaddr($addr)) {
+ $config_text .= "listening_ip={$if}\n";
+ if (!$ifaces_active) {
+ $webgui_ip = $addr;
+ $ifaces_active = $iface;
+ } else {
+ $ifaces_active .= ", {$iface}";
+ }
+ } else {
+ upnp_warn("Interface {$iface} has no ip address, ignoring");
+ }
+ } else {
+ upnp_warn("Could not resolve real interface for {$iface}");
+ }
+ }
+
+ if (!empty($ifaces_active)) {
+ /* override wan ip address, common for carp, etc */
+ if ($upnp_config['overridewanip']) {
+ $config_text .= "ext_ip={$upnp_config['overridewanip']}\n";
+ }
+
+ $download = $upnp_config['download']*1000;
+ $upload = $upnp_config['upload']*1000;
+
+ /* set upload and download bitrates */
+ if (!empty($download) && !empty($upload)) {
+ $config_text .= "bitrate_down={$download}\n";
+ $config_text .= "bitrate_up={$upload}\n";
+ }
+
+ /* enable logging of packets handled by miniupnpd rules */
+ if ($upnp_config['logpackets']) {
+ $config_text .= "packet_log=yes\n";
+ }
+
+ /* enable system uptime instead of miniupnpd uptime */
+ if ($upnp_config['sysuptime']) {
+ $config_text .= "system_uptime=yes\n";
+ }
+
+ /* set webgui url */
+ if (!empty($config['system']['webgui']['protocol'])) {
+ $config_text .= "presentation_url={$config['system']['webgui']['protocol']}://{$webgui_ip}";
+ if (!empty($config['system']['webgui']['port'])) {
+ $config_text .= ":{$config['system']['webgui']['port']}";
+ }
+ $config_text .= "/\n";
+ }
+
+ /* set uuid and serial */
+ $config_text .= "uuid=".upnp_uuid()."\n";
+ $config_text .= "serial=".strtoupper(substr(upnp_uuid(), 0, 8))."\n";
+
+ /* set model number */
+ $config_text .= "model_number=" . $g['product_version'] . "\n";
+
+ /* upnp access restrictions */
+ foreach ($upnp_config['row'] as $row) {
+ if ($row['permuser']) {
+ $config_text .= "{$row["permuser"]}\n";
+ }
+ }
+
+ if ($upnp_config['permdefault']) {
+ $config_text .= "deny 0-65535 0.0.0.0/0 0-65535\n";
+ }
+
+ /* Recheck if queue is valid */
+ if (!upnp_validate_queue($upnp_config['upnpqueue'])) {
+ unset($upnp_config['upnpqueue']);
+ }
+
+ /* Add shaper queue */
+ if ($upnp_config['upnpqueue']) {
+ $config_text .= "queue={$upnp_config['upnpqueue']}\n";
+ }
+
+ /* Allow UPnP or NAT-PMP as requested */
+ $config_text .= "enable_upnp=" . ($upnp_config['enable_upnp'] ? "yes\n" : "no\n");
+ $config_text .= "enable_natpmp=" . ($upnp_config['enable_natpmp'] ? "yes\n" : "no\n");
+
+ /* write out the configuration */
+ upnp_write_config($config_file, $config_text);
+
+ /* if miniupnpd not running start it */
+ if (!upnp_running()) {
+ upnp_notice("Starting service on interface: {$ifaces_active}");
+ upnp_action('start');
+ } else {
+ /* restart miniupnpd if settings were changed */
+ upnp_notice("Restarting service on interface: {$ifaces_active}");
+ upnp_action('restart');
+ }
+ }
+ } else {
+ /* user does not want miniupnpd running */
+ /* lets stop the service and remove the rc file */
+
+ if (file_exists($config_file)) {
+ if (!$upnp_config['enable']) {
+ upnp_notice('Stopping service: miniupnpd disabled');
+ } else {
+ upnp_notice('Stopping service: no interfaces selected');
+ }
+
+ upnp_action('stop');
+ @unlink($config_file);
+ }
+ }
+ }
+?>
diff --git a/src/usr/local/pkg/miniupnpd.xml b/src/usr/local/pkg/miniupnpd.xml
new file mode 100644
index 0000000..33d8ac4
--- /dev/null
+++ b/src/usr/local/pkg/miniupnpd.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<packagegui>
+ <title>Services: UPnP &amp; NAT-PMP</title>
+ <name>miniupnpd</name>
+ <version>20100712</version>
+ <savetext>Change</savetext>
+ <include_file>/usr/local/pkg/miniupnpd.inc</include_file>
+ <menu>
+ <name>UPnP &amp; NAT-PMP</name>
+ <tooltiptext>Set UPnP &amp; NAT-PMP settings such as interfaces to listen on.</tooltiptext>
+ <section>Services</section>
+ <url>/pkg_edit.php?xml=miniupnpd.xml&amp;id=0</url>
+ </menu>
+ <additional_files_needed>
+ <item>https://packages.pfsense.org/packages/config/miniupnpd/miniupnpd.inc</item>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ </additional_files_needed>
+ <additional_files_needed>
+ <item>https://packages.pfsense.org/packages/config/miniupnpd/status_upnp.php</item>
+ <prefix>/usr/local/www/</prefix>
+ <chmod>0755</chmod>
+ </additional_files_needed>
+ <additional_files_needed>
+ <prefix>/usr/local/sbin/</prefix>
+ <chmod>0755</chmod>
+ <item>https://packages.pfsense.org/packages/config/miniupnpd/sbin/miniupnpd</item>
+ </additional_files_needed>
+ <service>
+ <name>miniupnpd</name>
+ <rcfile>miniupnpd.sh</rcfile>
+ <executable>miniupnpd</executable>
+ </service>
+ <fields>
+ <field>
+ <name>UPnP &amp; NAT-PMP Settings</name>
+ <type>listtopic</type>
+ <enablefields>enable_upnp,enable_natpmp,ext_iface,iface_array,download,upload,overridewanip,upnpqueue,logpackets,sysuptime,permdefault</enablefields>
+ </field>
+ <field>
+ <fielddescr>Enable UPnP &amp; NAT-PMP</fielddescr>
+ <fieldname>enable</fieldname>
+ <type>checkbox</type>
+ <enablefields>enable_upnp,enable_natpmp,ext_iface,iface_array,download,upload,overridewanip,upnpqueue,logpackets,sysuptime,permdefault</enablefields>
+ </field>
+ <field>
+ <fielddescr>Allow UPnP Port Mapping</fielddescr>
+ <fieldname>enable_upnp</fieldname>
+ <type>checkbox</type>
+ <description>This protocol is often used by Microsoft-compatible systems.</description>
+ </field>
+ <field>
+ <fielddescr>Allow NAT-PMP Port Mapping</fielddescr>
+ <fieldname>enable_natpmp</fieldname>
+ <type>checkbox</type>
+ <description>This protocol is often used by Apple-compatible systems.</description>
+ </field>
+ <field>
+ <fielddescr>External Interface (generally WAN)</fielddescr>
+ <fieldname>ext_iface</fieldname>
+ <default_value>wan</default_value>
+ <type>interfaces_selection</type>
+ <hideinterfaceregex>loopback</hideinterfaceregex>
+ <description>Select only your primary WAN interface (interface with your default route). Only one interface is allowed here, not multiple.</description>
+ <required/>
+ </field>
+ <field>
+ <fielddescr>Interfaces (generally LAN)</fielddescr>
+ <fieldname>iface_array</fieldname>
+ <default_value>lan</default_value>
+ <type>interfaces_selection</type>
+ <description>You can use the CTRL or COMMAND key to select multiple interfaces.</description>
+ <required/>
+ <multiple/>
+ </field>
+ <field>
+ <fielddescr>Maximum Download Speed (Kbits/second)</fielddescr>
+ <fieldname>download</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Maximum Upload Speed (Kbits/second)</fielddescr>
+ <fieldname>upload</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Override WAN address</fielddescr>
+ <fieldname>overridewanip</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Traffic Shaping Queue</fielddescr>
+ <fieldname>upnpqueue</fieldname>
+ <type>input</type>
+ </field>
+ <field>
+ <fielddescr>Log packets handled by UPnP &amp; NAT-PMP rules?</fielddescr>
+ <fieldname>logpackets</fieldname>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>Use system uptime instead of UPnP &amp; NAT-PMP service uptime?</fielddescr>
+ <fieldname>sysuptime</fieldname>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>By default deny access to UPnP &amp; NAT-PMP?</fielddescr>
+ <fieldname>permdefault</fieldname>
+ <type>checkbox</type>
+ </field>
+ <field>
+ <fielddescr>User specified permissions</fielddescr>
+ <fieldname>none</fieldname>
+ <description>Format: [allow or deny] [ext port or range] [int ipaddr or ipaddr/CIDR] [int port or range]
+ &lt;br /&gt;Example: allow 1024-65535 192.168.0.0/24 1024-65535</description>
+ <type>rowhelper</type>
+ <rowhelper>
+ <rowhelperfield>
+ <fieldname>permuser</fieldname>
+ <type>input</type>
+ <size>60</size>
+ </rowhelperfield>
+ </rowhelper>
+ </field>
+ </fields>
+ <custom_php_command_before_form>
+ before_form_miniupnpd($pkg);
+ </custom_php_command_before_form>
+ <custom_php_validation_command>
+ validate_form_miniupnpd($_POST, $input_errors);
+ </custom_php_validation_command>
+ <custom_php_resync_config_command>
+ sync_package_miniupnpd();
+ </custom_php_resync_config_command>
+</packagegui>
diff --git a/src/usr/local/sbin/cleargmirror.sh b/src/usr/local/sbin/cleargmirror.sh
new file mode 100755
index 0000000..a00cc93
--- /dev/null
+++ b/src/usr/local/sbin/cleargmirror.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+clear_disk() {
+ local _disk="${1}"
+ local _mirror=$(/sbin/gmirror dump ${_disk} 2>/dev/null | sed '/name: /!d; s,^.*: ,,')
+
+ if [ -n "${_mirror}" ]; then
+ /sbin/gmirror destroy -f ${_mirror} >/dev/null 2>&1
+ fi
+ /sbin/gmirror clear ${_disk} >/dev/null 2>&1
+}
+
+mirror="${1}"
+disk1="${2}"
+disk2="${3}"
+
+if [ -z "${mirror}" -o -z "${disk1}" -o -z "${disk2}" ]; then
+ echo "You must specify mirror name, and disks that should be cleared"
+ exit 1
+fi
+
+/sbin/gmirror destroy -f ${mirror} >/dev/null 2>&1
+clear_disk ${disk1}
+clear_disk ${disk2}
+
+exit 0
diff --git a/src/usr/local/sbin/cleargpt.sh b/src/usr/local/sbin/cleargpt.sh
new file mode 100755
index 0000000..07d530a
--- /dev/null
+++ b/src/usr/local/sbin/cleargpt.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+DISK=$1
+if [ "$DISK" = "" ]; then
+ echo "You must specify the disk that should be formatted/cleared."
+ exit 1
+fi
+for PART in `/sbin/gpart show $DISK | grep -v '=>' | awk '{ print $3 }'`; do
+ if [ "$PART" != "" ]; then
+ /sbin/gpart delete -i $PART $DISK >/dev/null
+ fi
+done
+/sbin/gpart destroy $DISK >/dev/null
+exit 0
diff --git a/src/usr/local/sbin/gmirror_status_check.php b/src/usr/local/sbin/gmirror_status_check.php
new file mode 100644
index 0000000..f19a5d1
--- /dev/null
+++ b/src/usr/local/sbin/gmirror_status_check.php
@@ -0,0 +1,96 @@
+#!/usr/local/bin/php-cgi -f
+<?php
+/*
+ gmirror_status_check.php
+ Copyright (C) 2014 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/gmirror /sbin/geom /usr/bin/grep /usr/bin/egrep /usr/bin/cut /usr/bin/head
+ pfSense_BUILDER_BINARIES: /sbin/mount /usr/bin/awk /usr/bin/sed
+ pfSense_MODULE: gmirror
+*/
+
+require_once("config.inc");
+require_once("notices.inc");
+require_once("globals.inc");
+require_once("gmirror.inc");
+
+global $g;
+$status_file = "{$g['varrun_path']}/gmirror.status";
+
+$mirror_status = gmirror_get_status();
+$mirror_list = array_keys($mirror_status);
+sort($mirror_list);
+$notices = array();
+
+// Check for gmirror.status
+if (file_exists($status_file)) {
+ // If it exists, read status in
+ $previous_mirror_status = unserialize(file_get_contents($status_file));
+ $previous_mirror_list = array_keys($previous_mirror_status);
+ sort($previous_mirror_list);
+ if (count($previous_mirror_status) > 0) {
+ // Check list of current mirrors vs old mirrors, notify if one has appeared/disappeared
+ if ($mirror_list != $previous_mirror_list) {
+ $notices[] = sprintf(gettext("List of mirrors changed. Old: (%s) New: (%s)"), implode(", ", $previous_mirror_list), implode(", ", $mirror_list));
+ }
+
+ // For each mirror, check the mirror status, notify if changed
+ foreach ($mirror_list as $mirror) {
+ if (is_array($previous_mirror_status[$mirror])) {
+ // Notify if the status changed
+ if ($mirror_status[$mirror]['status'] != $previous_mirror_status[$mirror]['status']) {
+ $notices[] = sprintf(gettext("Mirror %s status changed from %s to %s."), $mirror, $previous_mirror_status[$mirror]['status'], $mirror_status[$mirror]['status']);
+ }
+ // Notify if the drive count changed
+ if (count($mirror_status[$mirror]['components']) != count($previous_mirror_status[$mirror]['components'])) {
+ // Notify if the consumer count changed.
+ $notices[] = sprintf(gettext("Mirror %s consumer count changed from %d to %d."), $mirror, count($previous_mirror_status[$mirror]['components']), count($mirror_status[$mirror]['components']));
+ }
+ if (strtoupper($mirror_status[$mirror]['status']) == "DEGRADED") {
+ // Check the drive status as it may be different.
+ asort($mirror_status[$mirror]['components']);
+ asort($previous_mirror_status[$mirror]['components']);
+ if ($mirror_status[$mirror]['components'] != $previous_mirror_status[$mirror]['components']) {
+ $notices[] = sprintf(gettext("Mirror %s drive status changed. Old: (%s) New: (%s)"),
+ $mirror,
+ implode(", ", $previous_mirror_status[$mirror]['components']),
+ implode(", ", $mirror_status[$mirror]['components']));
+ }
+ }
+ }
+ }
+ }
+}
+if (count($notices)) {
+ file_notice("gmirror", implode("\n ", $notices), "GEOM Mirror Status Change", 1);
+}
+// Write out current status if changed
+if ($mirror_status != $previous_mirror_status) {
+ file_put_contents($status_file, serialize($mirror_status));
+}
+
+?>
diff --git a/src/usr/local/sbin/mpd.script b/src/usr/local/sbin/mpd.script
new file mode 100644
index 0000000..28054d7
--- /dev/null
+++ b/src/usr/local/sbin/mpd.script
@@ -0,0 +1,1642 @@
+#################################################################
+#
+# $Id: mpd.script.sample,v 1.9 2009/10/04 19:36:04 amotin Exp $
+#
+# Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
+# See ``COPYRIGHT.whistle''
+#
+#################################################################
+
+##
+## MPD Modem script variables:
+##
+## $DialPrefix Modem dialing prefix (eg. "DT")
+## $Telephone Telephone number to dial (not duplicated using &)
+## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs)
+## $SpeakerOff Set to "yes" to quiet modem speakers
+## $Serial230K If "yes", we can support 230K serial port speed
+## $CountryCode Country code for Winmodem
+## $InitString External initialization string
+## $LoginScript If "yes", look for script login
+##
+## pfSense specific variables:
+## $APN Access Point (host)Name for 3G connections
+## $APNum Access Point Number, typically "1", might not matter
+## $SimPin SIM card PIN number
+## $PinWait Wait for SIM to connect to network after PIN entered
+##
+## ISDN Terminal Adapter specific variables (all start with "TA_"):
+##
+## $TA_Bonding Bonding on TA: "yes" or "no"
+## $TA_NoDoubleTelno When $TA_Bonding, don't double the dialed number
+## $TA_56K Restrict to 56K on TA: "yes" or "no"
+## $TA_VoiceCall Originate calls using voice mode
+## $TA_AuthChap Tell TA to use CHAP: "yes" or "no"
+## $TA_Dirno1 TA directory #1
+## $TA_Dirno2 TA directory #2
+## $TA_SPID1 SPID #1
+## $TA_SPID2 SPID #2
+## $TA_SwitchType One of these values
+## "NI-1"
+## "DMS-100"
+## "5ESS P2P"
+## "5ESS MP"
+## $TA_NewSwitch Means the switch type is new, initiate auto-detect
+## (3Com Impact IQ only)
+##
+## We set $OptimizeNextTime to "yes" after a successful connection so we
+## can avoid verifing configuration when things are working good.
+##
+## Internal variables:
+##
+## $ModemSetupFunc Routine to set up modem for dialing out
+## $ModemAnsSetupFunc Routine to set up modem for answer mode (if different)
+## $ModemDetectRing Routine to detect an incoming call for ringback
+## $ModemIsAnalog If "yes" modem is analog (ie, not terminal adapter)
+##
+
+#################################################################
+#
+# MODEM DIALING
+#
+#################################################################
+
+DialPeer:
+ set $CallingID ""
+ set $CalledID $Telephone
+ if $Telephone == "00000" goto DialNullModem
+ set $optimize $OptimizeNextTime
+ set $OptimizeNextTime "no"
+
+ if $optimize == "yes" goto DialPeer2
+ call ModemFind
+ if $ErrorMsg == "" goto DialPeer1
+ log $ErrorMsg
+ failure
+DialPeer1:
+ set $ModTelephone $Telephone
+ call ModemIdent
+ if $ModemDescription != "" goto DialPeer2
+ log "No match found in the ModemIdent function in the chat script."
+ failure
+
+DialPeer2:
+ log "Detected $ModemDescription."
+ call $ModemSetupFunc
+ log "Dialing server at $Telephone..."
+ call ModemDial
+ if $dialResult == "OK" goto DialPeerOK
+ set $optimize "no"
+ failure
+
+DialPeerOK:
+ if $ConnectionSpeed == "" log "Connected at an unknown speed."
+ if $ConnectionSpeed == "" goto DialPeer3
+ log "Connected at $ConnectionSpeed."
+DialPeer3:
+ if $LoginScript == "yes" call AutoLogin
+ set $OptimizeNextTime "yes"
+ success
+
+DialPeerSetPin:
+ set $modemCmd "+CPIN?"
+ log $modemCmd
+ call ModemQuery
+ log $modemQuery
+ if $modemQuery match ".*READY.*" goto DialPinReady
+ set $modemCmd "+CPIN=\"$SimPin\""
+ call ModemCmd2
+ wait $PinWait
+
+DialPinReady:
+ return
+
+DialPeerSetAPN:
+ set $modemCmd "+CGDCONT=$APNum,\"IP\",\"$APN\""
+ log $modemCmd
+ call ModemCmd2
+ return
+
+# Null-modem connection
+DialNullModem:
+ log "Connected via null modem connection."
+ success
+
+##
+## Dial modem
+##
+## Variables:
+##
+## $DialPrefix Modem dialing prefix (eg. "DT")
+## $ModTelephone Telephone number to dial
+## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs)
+## $noDialToneSubr (optional) Subroutine to call if NO DIALTONE
+## $dialErrorSubr (optional) Subroutine to call if ERR
+##
+## Returns:
+##
+## $dialResult "OK" or "FAIL"
+## $ConnectionSpeed Connection speed reported by modem (possibly empty)
+##
+
+ModemDial:
+ set $dialResult "FAIL"
+ set $ConnectionSpeed ""
+ if $ConnectTimeout == "" set $ConnectTimeout 45
+ print "AT${DialPrefix}${ModTelephone}\r\n"
+ log "AT${DialPrefix}${ModTelephone}"
+ match "NO CARRIER" DialAbortNoCar
+ match "NO DIAL" DialAbortNoDial
+ match "BUSY" DialAbortBusy
+ regex "CONNECT *([0-9]*).*$" DialConnect
+ match "ERR" DialError
+ wait $ConnectTimeout
+ log "No response from the modem after dialing."
+ return
+DialAbortNoCar:
+ log "The remote modem did not answer."
+ return
+DialAbortNoDial:
+ if $noDialToneSubr != "" goto $noDialToneSubr
+ log "No dialtone. Is the modem plugged in?"
+ return
+DialError:
+ if ${ModTelephone} != "" goto DialErrorInit
+ log "Invalid empty telephone number."
+ return
+DialErrorInit:
+ if $dialErrorSubr != "" goto $dialErrorSubr
+ log "Invalid dial init string."
+ return
+DialAbortBusy:
+ log "The line was busy."
+ return
+DialConnect:
+ set $ConnectionSpeed $matchedString1
+ set $dialResult "OK"
+ return
+
+#################################################################
+#
+# MODEM ANSWERING
+#
+#################################################################
+
+##
+## This is an idle script that waits for an incoming call and answers it
+##
+## Variables:
+##
+## $RingTimeout How long to wait for a RING before giving up
+## $ConnectTimeout Wait-for-connect timeout, in seconds (default 45 secs)
+##
+
+AnswerCall:
+ set $CallingID ""
+ set $CalledID ""
+ set $optimize $OptimizeNextTime
+ set $OptimizeNextTime "no"
+
+# Skip modem detection if we connected successfully last time
+
+ if $optimize == "yes" goto AnswerCall2
+ call ModemFind
+ if $ErrorMsg == "" goto AnswerCall0
+ log $ErrorMsg
+ failure
+AnswerCall0:
+ call ModemIdent
+ if $ModemDescription != "" goto AnswerCall1
+ log "The modem is not responding."
+ failure
+AnswerCall1:
+ log "Detected $ModemDescription."
+
+AnswerCall2:
+ if $ModemAnsSetupFunc == "" set $ModemAnsSetupFunc $ModemSetupFunc
+ call $ModemAnsSetupFunc
+ log "Waiting for ring..."
+ call ModemAnswer
+ if $answerReturn == "OK" goto AnswerCallOK
+ set $IdleResult ""
+ set $optimize "no"
+ failure
+
+AnswerCallOK:
+ log "Connected at $ConnectionSpeed."
+ set $OptimizeNextTime "yes"
+ set $IdleResult "answer"
+ success
+
+#################################################################
+#
+# MODEM RINGBACK
+#
+#################################################################
+
+##
+## This is an idle script that implements the ringback feature.
+## When we're idle, and we detect an incoming call, then call back
+## to bring up the link. For analog modems, we have to wait until
+## the ringing stops before dialing back (otherwise we'd answer the
+## call, which we don't want to do).
+##
+## Variables:
+##
+## $RingbackTimeout How long before giving up (reset and try again).
+## Default: 60 minutes
+## $RingStoppedTime Max time between consecutive "RING"s (if analog)
+## Default: 8 seconds
+##
+
+Ringback:
+ set $CallingID ""
+ set $CalledID ""
+ if $RingbackTimeout == "" set $RingbackTimeout "3600"
+ if $RingStoppedTime == "" set $RingStoppedTime "8"
+ set $ModemDetectRing RingbackWait
+ call ModemFind
+ if $ErrorMsg == "" goto Ringback1
+ log $ErrorMsg
+ failure
+Ringback1:
+ call ModemIdent
+ if $ModemDescription != "" goto Ringback2
+ log "The modem is not responding."
+ failure
+
+Ringback2:
+ log "Detected $ModemDescription."
+ goto $ModemDetectRing
+
+# Detect an incoming call by waiting for a "RING" indication
+# On an analog modem, we have to wait for the ringing to stop
+
+RingbackWait:
+ match "RING\r\n" RingbackGotRings
+ log "Remote Dial-Back mode enabled; waiting for incoming call."
+ wait $RingbackTimeout
+ failure
+
+# We saw it ring; wait for the ringing to stop (analog modems only).
+
+RingbackGotRings:
+ log "Incoming call detected..."
+ if $ModemIsAnalog != "yes" goto RingbackDone
+RingbackWaitStop:
+ match "RING\r\n" RingbackWaitStop
+ wait $RingStoppedTime
+RingbackDone:
+ set $IdleResult "ringback"
+ success
+
+# Strip leading and trailing spaces and log calling party number
+
+RingbackDetectCID:
+ if $cid match " *(.*) *" nop
+ set $cid $matchedString1
+ if $cid == "" goto RingbackDetectNoCID
+ log "Incoming call detected from $cid..."
+ success
+
+# We couldn't determine calling party number
+
+RingbackDetectNoCID:
+ log "Incoming call detected..."
+ success
+
+#################################################################
+#
+# MODEM IDENTIFICATION
+#
+#################################################################
+
+##
+## Identify
+##
+## This is meant to be called from the top level, to just identify
+## what's on the serial port and print out some info about it.
+##
+
+Identify:
+ call ModemFind
+ if $ErrorMsg == "" goto Identify1
+ failure
+Identify1:
+ call ModemIdent
+ if $ModemDescription == "" failure
+ log "ANALOG=$ModemIsAnalog"
+ log "DESCRIPTION=$ModemDescription"
+ success
+
+##
+## ModemIdent
+##
+## This identifies the type of modem and sets these variables accordingly:
+##
+## $ModemDescription
+## $ModemSetupFunc
+## $ModemAnsSetupFunc
+## $ModemDetectRing
+## $ModemIsAnalog
+##
+## If no response seen, this sets $ModemDescription to the empty string.
+##
+
+ModemIdent:
+ set $ModemDescription ""
+ set $ModemSetupFunc ""
+ set $ModemAnsSetupFunc ""
+ set $ModemDetectRing ""
+ set $ModemIsAnalog "yes"
+ if $InitString != "" goto ModemIdentCustom
+ print "ATI\r\n"
+ match "ADTRAN EXPRESS XR" ModemIdentAdtranXRT
+ match "Model: Ovation MC950D Card" ModemIdentMC950D
+ match "ERR" ModemIdentGeneric
+ match "OK\r\n" ModemIdentGeneric
+ wait 3
+ print "ATI1\r\n"
+ match "NTK omni.net" ModemIdentNTK
+ match "ERR" ModemIdentGeneric
+ match "OK\r\n" ModemIdentGeneric
+ wait 3
+ print "ATI3\r\n"
+ match "Courier" ModemIdentUsr
+ match "Sportster" ModemIdentUsr
+ match "3ComImpact IQ" ModemIdentImpactIQ
+ match "U.S. Robotics 56K" ModemIdentUsr
+ match "ZOOM V.90" ModemIdentZoom56
+ match "LT V.90" ModemIdentLucent
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ print "ATI4\r\n"
+ match "AtermIT NEC Corporation" ModemIdentAterm
+ match "INSMATEV-7 NTT Corporation" ModemIdentAterm
+ match "MNP Class 10 V.34 Modem" ModemIdentDeskPorte
+ match "Smart One 56" ModemIdentSmartOne
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ print "ATI5\r\n"
+ match "C885" ModemIdentC885
+ match "ERR"
+ match "OK\r\n" ModemIdentGeneric
+ wait 3
+ print "ATI8\r\n"
+ match "BitSURFR PRO\r" ModemIdentBitsurfr
+ match "BitSURFR PRO EZ" ModemIdentBitsurfrEZ
+ match "3C882" ModemIdentImpactIQ
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ log "The modem is not responding to any ATI[1,3-5,8] commands."
+ failure
+
+ModemIdentGeneric:
+ set $ModemDescription "Hayes compatible modem"
+ if $SimPin != "" call DialPeerSetPin
+ if $APN != "" call DialPeerSetAPN
+ set $ModemSetupFunc GenericSetup
+ return
+
+ModemIdentCustom:
+ set $ModemDescription "Custom modem"
+ set $ModemSetupFunc CustomSetup
+ return
+
+ModemIdentUsr:
+ set $SportsterHack "no"
+ if $matchedString == "Sportster" set $SportsterHack "yes"
+ set $ModemDescription "USR $matchedString modem"
+ call GetOK
+ set $ModemSetupFunc UsrSetup
+ return
+ModemIdentC885:
+ set $ModemDescription "Sierra Wireless Compass $matchedString USB 3G modem"
+ set $ModemSetupFunc GenericSetup
+ return
+ModemIdentMC950D:
+ set $ModemDescription "Novatel Wireless $matchedString USB 3G modem"
+ set $ModemSetupFunc GenericSetup
+ return
+ModemIdentBitsurfrEZ:
+ set $bitsEZ "yes"
+ModemIdentBitsurfr:
+ set $ModemDescription "Motorola $matchedString"
+ call GetOK
+ set $ModemSetupFunc BitsurfrSetup
+ set $ModemIsAnalog "no"
+ set $ModemDetectRing BitsurfrDetectRing
+ return
+
+ModemIdentImpactIQ:
+ set $matchedString "3ComImpact IQ"
+ set $ModemDescription "$matchedString"
+ call GetOK
+ set $ModemSetupFunc ImpactIQSetup
+ set $ModemIsAnalog "no"
+ set $ModemDetectRing ImpactIQDetectRing
+ return
+
+ModemIdentAdtranXRT:
+ set $ModemDescription "AdTran Express XR/XRT"
+ call GetOK
+ set $ModemSetupFunc AdtranXRTSetup
+ set $ModemIsAnalog "no"
+ return
+
+ModemIdentAterm:
+ set $ModemDescription "NEC Aterm TA"
+ call GetOK
+ set $ModemSetupFunc AtermSetup
+ set $ModemIsAnalog "no"
+ return
+
+ModemIdentNTK:
+ set $ModemDescription "$matchedString"
+ call GetOK
+ set $ModemSetupFunc NTKSetup
+ set $ModemIsAnalog "no"
+ return
+
+ModemIdentDeskPorte:
+ set $ModemDescription "$matchedString"
+ call GetOK
+ set $ModemSetupFunc DeskPorteSetup
+ return
+
+ModemIdentZoom56:
+ModemIdentSmartOne:
+ set $ModemDescription "$matchedString"
+ call GetOK
+ set $ModemSetupFunc Modem56Setup
+ return
+
+# Support the Lucent Winmodem, Xircom 56k
+ModemIdentLucent:
+ set $ModemDescription "$matchedString"
+ call GetOK
+ set $ModemSetupFunc ModemLucentSetup
+ return
+
+#################################################################
+#
+# GENERIC MODEM SETUP
+#
+#################################################################
+
+GenericSetup:
+ set $noDialToneSubr GenericNoDialtone
+ set $temp "M1"
+ if $SpeakerOff == "yes" set $temp "M0"
+ set $modemCmd "&F&C1&D2E0S0=0${temp}"
+ call ModemCmd2
+ return
+
+CustomSetup:
+ set $noDialToneSubr GenericNoDialtone
+ set $modemCmd "${InitString}"
+ call ModemCmd2
+ return
+
+GenericNoDialtone:
+ log "No dialtone. Is the modem plugged in?"
+ return
+
+#################################################################
+#
+# USR MODEM SETUP
+#
+#################################################################
+
+UsrSetup:
+# Lower baudrate to 57600 for crappy internal Sportster modem
+ if $SportsterHack != "yes" goto UsrSetup2
+ if $modemDevice != "/dev/cuad2" goto UsrSetup2
+ set $Baudrate 57600
+ set $modemCmd ""
+ call ModemCmd2
+UsrSetup2:
+ set $noDialToneSubr GenericNoDialtone
+ set $temp "M1"
+ if $SpeakerOff == "yes" set $temp "M0"
+ set $modemCmd "&F1&C1&D2E0S0=0S13.0=1L0S6=5${temp}"
+ call ModemCmd2
+ return
+
+#################################################################
+#
+# GENERAL 56K MODEM SETUP
+#
+#################################################################
+
+Modem56Setup:
+ set $noDialToneSubr GenericNoDialtone
+ set $temp "M1"
+ if $SpeakerOff == "yes" set $temp "M0"
+ set $modemCmd "&FL2W2E0${temp}"
+ call ModemCmd2
+ return
+
+#################################################################
+#
+# LUCENT WINMODEM AND XIRCOM 56K SETUP
+#
+#################################################################
+
+ModemLucentSetup:
+ set $noDialToneSubr GenericNoDialtone
+ set $temp "M1"
+ if $SpeakerOff == "yes" set $temp "M0"
+ set $tempCountryCode ""
+ if $CountryCode != "" set $tempCountryCode "+GCI=${CountryCode}"
+ if $CountryCode != "" log "Use country ${CountryCode}"
+ set $modemCmd "&FL2W2E0${temp}${tempCountryCode}"
+ call ModemCmd2
+ return
+
+#################################################################
+#
+# BITSURFR PRO AND BITSURFR PRO EZ SETUP
+#
+#################################################################
+
+BitsurfrSetup:
+ set $noDialToneSubr BitsurfrNoDialtone
+ set $factory "1"
+ if $bitsEZ == "yes" set $factory "0"
+ set $modemCmd "Z&F${factory}&C1&D2E0W1X2%A2=95S0=0"
+ call ModemCmd2
+
+# Set to 230K baud if we support it
+
+ if $bitsEZ != "yes" goto BitsurfrSetup1
+ set $modemCmd "@P2=230400"
+ set $newBaudrate "230400"
+ call SetBaudrate
+
+# Check software revision and ISDN settings
+
+BitsurfrSetup1:
+ if $optimize == "yes" goto BitsurfrSetup2
+ if $bitsEZ != "yes" call BitsurfrCheckRev
+ call BitsurfrCheckConfig
+
+# Set the PAP/CHAP, multi-link, and 56K/64K settings, and return
+
+BitsurfrSetup2:
+ set $authCmd "@M2=P"
+ if $TA_AuthChap == "yes" set $authCmd "@M2=C"
+ set $bondCmd "@B0=1"
+ if $TA_Bonding == "yes" set $bondCmd "@B0=2"
+ set $bearCmd "%A4=0"
+ if $TA_56K == "yes" set $bearCmd "%A4=1"
+ if $TA_VoiceCall == "yes" set $bearCmd "%A4=1"
+ set $voiceCmd "%A98=D%A96=0"
+ if $TA_VoiceCall == "yes" set $voiceCmd "%A98=S%A96=1"
+
+# BS PRO EZ changes
+
+ if $bitsEZ == "yes" set $authCmd "${authCmd}@M20=\"\""
+ set $modemCmd "$authCmd$bondCmd$bearCmd$voiceCmd"
+ call ModemCmd2
+ if $TA_NoDoubleTelno == "yes" return
+ if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}"
+ return
+
+##
+## What to do when NO DIALTONE
+##
+
+BitsurfrNoDialtone:
+ log "ISDN initialization failed (or BitSURFR restarting). Please verify proper line connection and ISDN settings."
+ return
+
+##
+## BitsurfrCheckConfig
+##
+## Verify and adjust ISDN configuration as necessary
+##
+
+BitsurfrCheckConfig:
+ log "Checking the BitSURFR's ISDN configuration..."
+ set $valueChanged "no"
+
+# Check switch type
+
+ set $checkCmd "!C0"
+ set $checkValue "000"
+ set $checkValueNew "0"
+ if $TA_SwitchType == "DMS-100" set $checkValue "001"
+ if $TA_SwitchType == "DMS-100" set $checkValueNew "1"
+ if $TA_SwitchType == "NI-1" set $checkValue "002"
+ if $TA_SwitchType == "NI-1" set $checkValueNew "2"
+ set $checkMsg "Reprogramming switch type ($TA_SwitchType)..."
+ call ModemCheckValue
+
+ set $checkCmd "!C1"
+ set $checkValue "004"
+ set $checkValueNew "4"
+ if $TA_SwitchType == "DMS-100" set $checkValue "003"
+ if $TA_SwitchType == "DMS-100" set $checkValueNew "3"
+ if $TA_SwitchType == "5ESS P2P" set $checkValue "000"
+ if $TA_SwitchType == "5ESS P2P" set $checkValueNew "0"
+ if $TA_SwitchType == "5ESS MP" set $checkValue "001"
+ if $TA_SwitchType == "5ESS MP" set $checkValueNew "1"
+ set $checkMsg "Reprogramming switch software version..."
+ call ModemCheckValue
+
+# Check directory numbers
+
+ set $checkCmd "*1!N1"
+ set $checkValue $TA_Dirno1
+ set $checkValueNew $TA_Dirno1
+ set $checkMsg "Reprogramming voice line #1 directory number..."
+ call ModemCheckValue
+
+ set $checkCmd "*2!N1"
+ set $checkValue $TA_Dirno2
+ set $checkValueNew $TA_Dirno2
+ set $checkMsg "Reprogramming voice line #2 directory number..."
+ call ModemCheckValue
+ set $checkCmd "!N1"
+ set $checkMsg "Reprogramming data line directory number..."
+ call ModemCheckValue
+
+# Check SPIDs
+
+ set $checkCmd "*1!C6"
+ set $checkValue $TA_SPID1
+ set $checkValueNew $TA_SPID1
+ set $checkMsg "Reprogramming voice line #1 SPID..."
+ call ModemCheckValue
+
+ set $checkCmd "*2!C6"
+ set $checkValue $TA_SPID2
+ set $checkValueNew $TA_SPID2
+ set $checkMsg "Reprogramming voice line #2 SPID..."
+ call ModemCheckValue
+ set $checkCmd "!C6"
+ set $checkMsg "Reprogramming data line SPID..."
+ call ModemCheckValue
+
+# Restart if necessary
+
+ if $valueChanged == "no" return
+ log "Restarting BitSURFR Pro with new configuration..."
+ set $modemCmd ">W"
+ call ModemCmd2
+ set $modemCmd ">Z"
+ call ModemCmd2
+ failure
+
+##
+## Verify the BitSURFR's software revision. Only do this
+## once, the first time we try to dial.
+##
+
+BitsurfrCheckRev:
+ log "Checking the BitSURFR's software revision..."
+ print "ATI3\r\n"
+ match "-1A" BitsurfrCheckRevOld
+ match "-1B" BitsurfrCheckRevOld
+ match "-1C" BitsurfrCheckRevOld
+ match "-1D" BitsurfrCheckRevOld
+ match "-1E" BitsurfrCheckRevOld
+ match "-1F" BitsurfrCheckRevOld
+ match "-1G" BitsurfrCheckRevOld
+ match "-1H" BitsurfrCheckRevOld
+ match "-1I" BitsurfrCheckRevOld
+ match "OK\r\n" BitsurfrCheckRevOK
+ match "ERR"
+ wait 5
+ log "The BitSURFR did not properly answer ATI3."
+ failure
+BitsurfrCheckRevOK:
+ return
+BitsurfrCheckRevOld:
+ log "The BitSURFR Pro has an old software revision $matchedString. Please upgrade according to the manufacturer's instructions."
+ call GetOK
+ failure
+
+# This is how we detect an incoming call with a BitSURFR
+
+BitsurfrDetectRing:
+# First, we need to be properly configured
+ call BitsurfrSetup
+# Enable Caller-ID logging
+ set $modemCmd "@N0=1*1@N0=1*2@N0=1"
+ call ModemCmd
+ if $modemCmdResult != "OK" goto RingbackWait
+# A "RING" at any time is good enough
+ match ringset "RING\r\n" RingbackDone
+# Clear Caller-ID buffers
+ set $modemCmd "@L0*1@L0*2@L0"
+ call ModemCmd2
+# Read each buffer
+ call BitsurfrDetectReadCID
+ log "Remote Dial-Back mode enabled; waiting for incoming call."
+# Now wait indefinitely for one of those buffers to change
+BitsurfrDetectLoop:
+ wait 5
+ set $oldDataCID $dataCID
+ set $oldVoice1CID $voice1CID
+ set $oldVoice2CID $voice2CID
+ call BitsurfrDetectReadCID
+ if $oldDataCID != $dataCID goto BitsurfrDetectDone
+ if $oldVoice1CID != $voice1CID goto BitsurfrDetectDone
+ if $oldVoice2CID != $voice2CID goto BitsurfrDetectDone
+ goto BitsurfrDetectLoop
+
+# Examine the CID from each port
+BitsurfrDetectDone:
+ set $cid $dataCID
+ call BitsurfrDetectTryCID
+ set $cid $voice1CID
+ call BitsurfrDetectTryCID
+ set $cid $voice2CID
+ call BitsurfrDetectTryCID
+ goto RingbackDetectNoCID
+
+# Try to extract the calling party number
+BitsurfrDetectTryCID:
+# Strip the log number
+ if $cid match "[0-9] (.*)" set $cid $matchedString1
+# Check for various strings
+ if $cid match "BLOCKED" return
+ if $cid match "NO NUMBER" return
+ if $cid match "NO CID SERVICE" return
+ if $cid match "OUT OF AREA" return
+ goto RingbackDetectCID
+
+# Read Caller-ID buffers
+BitsurfrDetectReadCID:
+ set $modemCmd "@L1"
+ call ModemQueryStrip
+ set $dataCID $modemQuery
+ set $modemCmd "*1@L1"
+ call ModemQueryStrip
+ set $voice1CID $modemQuery
+ set $modemCmd "*2@L1"
+ call ModemQueryStrip
+ set $voice2CID $modemQuery
+ return
+
+#################################################################
+#
+# 3COM IMPACT IQ SETUP
+#
+#################################################################
+
+ImpactIQSetup:
+ set $noDialToneSubr ImpactIQNoDialtone
+ set $modemCmd "Z&F%C2E0"
+ call ModemCmd2
+
+# Set to 230K baud if we support it
+
+ set $modemCmd "$$B230400"
+ set $newBaudrate "230400"
+ call SetBaudrate
+
+# Check ISDN config and link status (XXX should we check revision too?)
+
+ImpactIQSetup1:
+ if $optimize == "yes" goto IQInitSetup2
+ call ImpactIQCheckConfig
+ call ImpactIQCheckLink
+
+# Now set the PAP/CHAP setting and voice/data originate mode setting
+
+IQInitSetup2:
+ set $authCmd "S84=1"
+ if $TA_AuthChap == "yes" set $authCmd "S84=0"
+ set $voiceCmd "S61=0"
+ if $TA_VoiceCall == "yes" set $voiceCmd "S61=1"
+ set $modemCmd "$authCmd$voiceCmd"
+ call ModemCmd2
+ if $TA_NoDoubleTelno == "yes" return
+ if $TA_Bonding == "yes" set $ModTelephone "${Telephone}&${Telephone}"
+ return
+
+##
+## What to do when NO DIALTONE
+##
+
+ImpactIQNoDialtone:
+ log "ISDN config problem (or modem restart). Check your ISDN switch type, directory numbers, and SPID settings."
+ return
+
+##
+## ImpactIQCheckLink
+##
+## Check the link status registers
+##
+
+ImpactIQCheckLink:
+ log "Checking the ISDN modem's link status..."
+ print "ATS59?\r\n"
+ match "000" IQSyncFail
+ match "001" IQSyncOK
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ call GetOK
+ log "The ISDN modem did not properly answer ATS59?"
+ failure
+IQSyncOK:
+ call GetOK
+ goto ImpactIQCheckInit
+IQSyncFail:
+ log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line."
+ call GetOK
+ failure
+
+ImpactIQCheckInit:
+ set $impactInitReg "57"
+ call IQInitCheck
+ if $TA_Bonding == "yes" return
+ set $impactInitReg "58"
+ call IQInitCheck
+ return
+
+# A little subroutine
+
+IQInitCheck:
+ print "ATS${impactInitReg}?\r\n"
+ match "000" IQInitOK
+ match "001" IQInitOK
+ match "002" IQInitFail
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ call GetOK
+ log "The ISDN modem did not properly answer ATS${impactInitReg}?"
+ failure
+IQInitOK:
+ call GetOK
+ return
+IQInitFail:
+ log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings."
+ call GetOK
+ failure
+
+##
+## ImpactIQCheckConfig
+##
+## Verify and adjust ISDN configuration as necessary
+##
+
+ImpactIQCheckConfig:
+ log "Checking the ISDN modem's ISDN configuration..."
+ set $valueChanged "no"
+
+# Check switch type XXX
+#
+# NOTE: The Impact IQ changes the value of this field as it auto-detects.
+# Not only that, but it cycles through each switch type as it is "trying
+# out" that type, so that reading this field is pretty much useless...
+# Our strategy is just to hope that auto-detect works!
+
+ if $TA_NewSwitch != "yes" goto ImpactIQCheckDirnos
+ log "Initiating switch type auto-detect..."
+ set $modemCmd "S50=0"
+ call ModemCmd2
+ set $TA_NewSwitch ""
+ set $valueChanged "yes"
+ set $iq_new_switch "yes"
+
+# Check directory numbers
+
+ImpactIQCheckDirnos:
+ set $checkCmd "S51"
+ set $checkValue $TA_Dirno1
+ set $checkValueNew $TA_Dirno1
+ set $checkMsg "Reprogramming line #1 directory number..."
+ call ModemCheckValue
+
+ set $checkCmd "S53"
+ set $checkValue $TA_Dirno2
+ set $checkValueNew $TA_Dirno2
+ set $checkMsg "Reprogramming line #2 directory number..."
+ call ModemCheckValue
+
+# Check SPIDs
+
+ set $checkCmd "S52"
+ set $checkValue $TA_SPID1
+ set $checkValueNew $TA_SPID1
+ set $checkMsg "Reprogramming line #1 SPID..."
+ call ModemCheckValue
+
+ set $checkCmd "S54"
+ set $checkValue $TA_SPID2
+ set $checkValueNew $TA_SPID2
+ set $checkMsg "Reprogramming line #2 SPID..."
+ call ModemCheckValue
+
+# Check 56K/64K setting
+
+ set $checkValue "064"
+ set $checkValueNew "64"
+ if $TA_56K == "yes" set $checkValue "056"
+ if $TA_56K == "yes" set $checkValueNew "56"
+ set $checkCmd "S60"
+ set $checkMsg "Reprogramming B channel data rate to ${checkValueNew}K..."
+ call ModemCheckValue
+ set $checkValueNew ""
+
+# Check Multi-link setting
+
+ set $checkValue "000"
+ set $checkValueNew "0"
+ if $TA_Bonding == "yes" set $checkValue "001"
+ if $TA_Bonding == "yes" set $checkValueNew "1"
+ set $checkCmd "S80"
+ set $checkMsg "Reprogramming mutli-link PPP setting..."
+ call ModemCheckValue
+
+# Restart if necessary, and wait extra long if the switch type changed
+
+ if $valueChanged == "no" return
+ log "Restarting ISDN modem with the new configuration..."
+ set $modemCmd "Z"
+ call ModemCmd2
+ failure
+
+##
+## Detect an incoming call with the 3Com
+##
+
+ImpactIQDetectRing:
+ call ImpactIQSetup
+ if $modemCmdResult != "OK" goto RingbackWait
+ match ringset "RING\r\n" RingbackDone
+# Clear Caller-ID buffers
+ set $modemCmd "\\N0"
+# We don't care if this command fails...
+ call ModemCmd
+# Read most recent incoming call
+ call ImpactIQDetectReadCID
+ log "Remote Dial-Back mode enabled; waiting for incoming call."
+# Now wait for a change
+ImpactIQDetectLoop:
+ wait 5
+ set $oldIncomingCall $incomingCall
+ call ImpactIQDetectReadCID
+ if $oldIncomingCall != $incomingCall goto ImpactIQDetectDone
+ goto ImpactIQDetectLoop
+
+# Examine the CID from each port
+ImpactIQDetectDone:
+ if $incomingCall !match "((.{14}).{10}) ((.{14}).{10}) ((.{14}).{10})" goto RingbackDetectNoCID
+ set $dataCID $matchedString2
+ set $voice1CID $matchedString4
+ set $voice2CID $matchedString6
+ set $cid $dataCID
+ call ImpactIQDetectTryCID
+ set $cid $voice1CID
+ call ImpactIQDetectTryCID
+ set $cid $voice2CID
+ call ImpactIQDetectTryCID
+ goto RingbackDetectNoCID
+
+# Look for a valid CID string
+ImpactIQDetectTryCID:
+ if $cid match " *" return
+ if $cid match " *N/A" return
+ goto RingbackDetectCID
+
+# Read first line of incoming call log (it's the 14th line of output)
+ImpactIQDetectReadCID:
+ set $modemCmd "\\N"
+ call ModemCmdSend
+ call ReadLine
+# Older version of the 3Com don't support this command
+ if $matchedString == "OK" return
+ if $matchedString match "ERR(O)?(R)?" return
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ call ReadLine
+ set $incomingCall $matchedString
+ call GetOK
+ return
+
+#################################################################
+#
+# NEC ATERM SETUP
+#
+#################################################################
+
+AtermSetup:
+ if $AtermHardReset == "yes" goto AtermSetup2
+
+# Do hardware reset, which takes a while and doesn't give back "OK"
+
+ log "Initializing modem..."
+ print "ATZ98\r\n"
+ wait 6
+ set $AtermHardReset "yes"
+ failure
+
+AtermSetup2:
+
+# Set to 230K baud if we support it
+
+ set $modemCmd ""
+ set $newBaudrate "230400"
+ call SetBaudrate
+
+# Is this an IT55 or IT65?
+
+ set $atermIT65 ""
+ set $modemCmd "$$N14=0"
+ call ModemCmd
+ if $modemCmdResult == "OK" set $atermIT65 "yes"
+
+# Set normal stuff, PPP mode
+
+ set $modemCmd "&C1&D0&K3X4$$N1=1$$N9=0"
+ call ModemCmd2
+
+# Set the multi-link setting
+
+ set $bondCmd "$$N11=0"
+ if $TA_Bonding == "yes" set $bondCmd "$$N11=1"
+ set $modemCmd "$bondCmd"
+ call ModemCmd2
+
+# Additional settings for the IT65 go here...
+
+ if $atermIT65 != "yes" return
+ return
+
+#################################################################
+#
+# MICROCOM DESKPORTE SETUP
+#
+#################################################################
+
+DeskPorteSetup:
+ set $noDialToneSubr GenericNoDialtone
+ set $temp "M1"
+ if $SpeakerOff == "yes" set $temp "M0"
+ set $modemCmd "Z&F&C1&D2X3E0S0=0${temp}"
+ call ModemCmd2
+ return
+
+#################################################################
+#
+# KOREAN TERMINAL ADAPTER SETUP
+#
+#################################################################
+
+NTKSetup:
+ set $noDialToneSubr GenericNoDialtone
+ set $modemCmd "ZB40&J3"
+ call ModemCmd2
+ return
+
+#################################################################
+#
+# ADTRAN EXPRESS XRT SETUP
+#
+#################################################################
+
+AdtranXRTSetup:
+ set $noDialToneSubr ImpactIQNoDialtone
+ set $dialErrorSubr AdtranXRTDialError
+ set $bonding "&F1"
+ if $TA_Bonding == "yes" set $bonding "&F2"
+ set $chap "S118=0"
+ if $TA_AuthChap == "yes" set $chap "S118=32"
+ set $origCmd "S53=3"
+ if $TA_56K == "yes" set $origCmd "S53=2"
+ if $TA_VoiceCall == "yes" set $origCmd "S53=0"
+ set $modemCmd "ZE0${bonding}&C1&D2${chap}${origCmd}"
+ call ModemCmd2
+
+# Check ISDN config and link status (XXX should we check revision too?)
+
+ if $optimize == "yes" return
+ call AdtranXRTCheckConfig
+ call AdtranXRTCheckLink
+ return
+
+##
+## What to do when ERROR when dialing
+##
+## This is what the Adtran returns if the line is not ready yet.
+## So we look into the status buffer to see if we recognize the
+## error condition.
+##
+
+AdtranXRTDialError:
+ call AdtranXRTDiagnose
+ failure
+
+##
+## Check the last status bufffer entry for what the problem is
+## XXX Figure out more stuff to look for and when it can happen
+##
+
+AdtranXRTDiagnose:
+ log "Checking the Adtran status buffer..."
+ print "AT!S\r\n"
+ match "\r\n\r\n" AdtranXRTDiagBlank
+ match "END OF STATUS BUFFER" AdtranXRTDiagBlank
+ match "L1 not up." AdtranXRTDiagL1
+ match "FACILITY_NOT_SUBSCRIBED" AdtranXRTDiagFNS
+ match "Unknown AT cmd" IQSyncOK
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ call GetOK
+ log "The ISDN modem did not properly answer ATS59?"
+ failure
+ goto ImpactIQCheckInit
+
+AdtranXRTDiagFNS:
+ log "ISDN initialization failed. Please check your ISDN switch type, directory numbers, and SPID settings."
+ failure
+
+AdtranXRTDiagL1:
+ log "The ISDN modem is not receiving any ISDN signal. Please verify that it's connected to an ISDN line."
+ failure
+
+AdtranXRTDiagBlank:
+ log "ISDN initialization failed or restarting link. Please verify proper line connection and ISDN settings."
+ failure
+
+##
+## AdtranXRTCheckLink
+##
+## Check the link status registers
+##
+
+AdtranXRTCheckLink:
+ log "Checking the ISDN modem's link status..."
+ print "AT!S1\r\n"
+ match "Link In Sync" AdtranXRTSyncReg
+ match "Getting" AdtranXRTSyncReg
+ match "Register" AdtranXRTSyncReg
+ match "Ready" AdtranXRTSyncOK
+ match "Down" AdtranXRTSyncFail
+ match "ERR"
+ match "OK\r\n"
+ wait 3
+ call GetOK
+ log "The ISDN modem did not properly answer AT!S1."
+ failure
+AdtranXRTSyncOK:
+ return
+AdtranXRTSyncFail:
+ print "ATDT1\r\n"
+ wait 1
+ goto AdtranXRTDiagnose
+AdtranXRTSyncReg:
+ log "The ISDN modem is initializing itself."
+ failure
+
+##
+## AdtranXRTCheckConfig
+##
+## Verify and adjust ISDN configuration as necessary
+##
+
+AdtranXRTCheckConfig:
+ log "Checking the ISDN modem's ISDN configuration..."
+ set $valueChanged "no"
+
+ set $checkCmd "S52"
+ set $checkValue "000"
+ set $checkValueNew "0"
+ if $TA_SwitchType == "DMS-100" set $checkValue "001"
+ if $TA_SwitchType == "DMS-100" set $checkValueNew "1"
+ if $TA_SwitchType == "NI-1" set $checkValue "002"
+ if $TA_SwitchType == "NI-1" set $checkValueNew "2"
+ set $checkMsg "Reprogramming switch type ($TA_SwitchType)..."
+ call ModemCheckValue
+
+# Check directory numbers
+
+AdtranXRTCheckDirnos:
+ set $checkCmd "SS62"
+ set $checkValue $TA_Dirno1
+ set $checkValueNew $TA_Dirno1
+ set $checkMsg "Reprogramming line #1 directory number..."
+ call ModemCheckValue
+
+ set $checkCmd "SS63"
+ set $checkValue $TA_Dirno2
+ set $checkValueNew $TA_Dirno2
+ set $checkMsg "Reprogramming line #2 directory number..."
+ call ModemCheckValue
+
+# Check SPIDs
+
+ set $checkCmd "SS60"
+ set $checkValue $TA_SPID1
+ set $checkValueNew $TA_SPID1
+ set $checkMsg "Reprogramming line #1 SPID..."
+ call ModemCheckValue
+
+ set $checkCmd "SS61"
+ set $checkValue $TA_SPID2
+ set $checkValueNew $TA_SPID2
+ set $checkMsg "Reprogramming line #2 SPID..."
+ call ModemCheckValue
+
+# Restart if necessary
+
+ if $valueChanged == "no" return
+ log "Restarting ISDN modem with the new configuration..."
+ set $modemCmd "&W"
+ call ModemCmd2
+ set $modemCmd "Z"
+ call ModemCmd2
+ failure
+
+#################################################################
+#
+# BASIC MODEM STUFF
+#
+#################################################################
+
+##
+## ModemAnswer
+##
+## Wait for a RING and answer it. Variables:
+##
+## $RingTimeout How long for a RING before giving up (default 10 min)
+## $ConnectTimeout How long for connect after answering (default 45 secs)
+##
+## Returns:
+##
+## $answerReturn "OK" or "FAIL"
+## $ConnectionSpeed Connection speed reported by modem (possibly empty)
+##
+
+ModemAnswer:
+ if $RingTimeout == "" set $RingTimeout 600
+ if $ConnectTimeout == "" set $ConnectTimeout 45
+ match "RING\r" ModemAnswerGotRing
+ wait $RingTimeout
+ log "No RING detected after $RingTimeout seconds."
+ set $answerReturn "FAIL"
+ return
+ModemAnswerGotRing:
+ log "Incoming call detected..."
+ print "ATA\r\n"
+ regex "CONNECT *([0-9]*).*$" ModemAnswerConnect
+ wait $ConnectTimeout
+ log "Failed to connect incoming call."
+ set $answerReturn "FAIL"
+ return
+ModemAnswerConnect:
+ set $ConnectionSpeed $matchedString1
+ set $answerReturn "OK"
+ return
+
+##
+## ModemFind
+##
+## Just try to get where we are talking to the modem.
+## Returns with $ErrorMsg equal to the empty string if
+## we found the modem, or else some error message if not.
+##
+
+ModemFind:
+
+# Do a quick check first...
+
+ set $ErrorMsg ""
+ call ModemFind4
+ if $modemCmdResult == "OK" return
+ if $Serial230K != "yes" goto ModemFind1
+ set $newBaudrate 230400
+ if $Baudrate == "230400" set $newBaudrate 115200
+ set $Baudrate $newBaudrate
+ call ModemFind4
+ if $modemCmdResult == "OK" return
+
+# Now try possible baud rates more extensively
+
+ModemFind1:
+ set $Baudrate 115200
+ call ModemFind2
+ if $modemCmdResult == "OK" return
+ if $Serial230K != "yes" return
+ set $Baudrate 230400
+ wait 1
+ call ModemFind2
+ if $modemCmdResult == "OK" return
+ set $ErrorMsg "The modem is not responding."
+ return
+
+# This tries the +++ sequence in case the modem is in "on-line" mode
+
+ModemFind2:
+ call ModemFind3
+ if $modemCmdResult == "OK" return
+ call SendTriplePlus
+ call ModemFind3
+ return
+
+# This tries a few commands to see if the modem responds with "OK"
+
+ModemFind3:
+ set $modemCmd ""
+ set $modemCmdTimeout 1
+ call ModemCmd0
+ if $modemCmdResult == "OK" return
+ set $modemCmd "Z"
+ set $modemCmdTimeout 2
+ call ModemCmd0
+ if $modemCmdResult == "OK" return
+ModemFind4:
+ set $modemCmd ""
+ set $modemCmdTimeout 1
+ call ModemCmd0
+ return
+
+##
+## SetBaudrate
+##
+## Change baud rates (as allowed) and verify modem is still there.
+## If not, then fail the script.
+##
+## $newBaudrate New baud rate; if we don't support it, just return.
+## $modemCmd Command to send modem to jump to the new baud rate.
+##
+
+SetBaudrate:
+ if $Baudrate == $newBaudrate return
+ if $newBaudrate != 230400 goto SetBaudrate2
+ if $Serial230K != "yes" return
+SetBaudrate2:
+ log "Setting serial port speed to $newBaudrate..."
+ print "AT$modemCmd\r\n"
+ wait 1
+ set $Baudrate $newBaudrate
+ wait 1
+ set $modemCmd ""
+ goto ModemCmd2
+
+##
+## ModemCheckValue
+##
+## Check the value in an S-register (or equivalent). If it is
+## not what we want, then change it and set $valueChanged to "yes",
+## and log $checkMsg (if not empty). The value $checkValueNew is
+## what we program the S-register to equal if it doesn't match.
+##
+## The $checkValue must match exactly on the first line of output.
+## If we get any weird error, then fail the script.
+##
+
+ModemCheckValue:
+ set $modemCmd "${checkCmd}?"
+ call ModemQuery
+ if $modemQuery == $checkValue return
+ set $valueChanged "yes"
+ set $checkValueMyNew $checkValueNew
+ if $checkValueNew == "" set $checkValueMyNew $checkValue
+ set $modemCmd "${checkCmd}=${checkValueMyNew}"
+ if $checkMsg != "" log $checkMsg
+ goto ModemCmd2
+
+##
+## ModemCmd
+##
+## Do the modem command in $modemCmd. Set $modemCmdResult to
+##
+## OK The modem returned "OK"
+## ERROR The modem returned "ERR" or "ERROR"
+## TIMEOUT The modem did not respond within three seconds
+##
+## If ERR or TIMEOUT, also set $ErrorMsg to an appropriate message
+##
+
+ModemCmd:
+ set $modemCmdTimeout 3
+ModemCmd0:
+ print "AT$modemCmd\r\n"
+ match "OK\r\n" ModemCmdOk
+ match "ERR" ModemCmdErr
+ wait $modemCmdTimeout
+ set $modemCmdResult "TIMEOUT"
+ModemCmdTimeout:
+ set $ErrorMsg "The modem is not responding to \"AT$modemCmd\" at ModemCmd: label."
+ return
+ModemCmdOk:
+ set $modemCmdResult "OK"
+ return
+ModemCmdErr:
+ set $modemCmdResult "ERROR"
+ set $ErrorMsg "The modem responded with \"ERROR\" to the command \"AT$modemCmd\" at ModemCmd: label."
+ return
+
+##
+## ModemCmd2
+##
+## Do the modem command in $modemCmd. If we don't get OK back,
+## fail the script and log an error message.
+##
+
+ModemCmd2:
+ call ModemCmd
+ if $modemCmdResult == "OK" return
+ log $ErrorMsg
+ failure
+
+##
+## ModemCmdSend
+##
+## Send a modem command and read the echo'ed CR-LF
+##
+
+ModemCmdSend:
+ print "AT$modemCmd\r\n"
+ match "\r\n" ModemCmdSend2
+ wait 3
+ goto ModemCmdTimeout
+ModemCmdSend2:
+ return
+
+##
+## ModemQuery
+##
+## Do the $modemCmd and expect exactly one line of response, then OK.
+## Return the response in $modemQuery. If anything goes wrong, die.
+##
+
+ModemQuery:
+ call ModemCmdSend
+ call ReadLine
+ set $modemQuery $matchedString
+ if $modemQuery == "ERR" goto ModemQueryError
+ if $modemQuery == "ERROR" goto ModemQueryError
+ goto GetOK
+ModemQueryError:
+ call ModemCmdErr
+ failure
+
+# Same thing, but strip leading and trailing blanks
+
+ModemQueryStrip:
+ call ModemQuery
+ if $modemQuery match " *(.*) *" nop
+ set $modemQuery $matchedString1
+ return
+
+##
+## ReadLine
+##
+## Read the next line of output. It should come within $modemCmdTimeout
+## seconds, or else we fail. Return it in $matchedString.
+##
+
+ReadLine:
+ regex "^.*$" ReadLineDone
+ wait $modemCmdTimeout
+ set $ErrorMsg "The modem is not responding."
+ log $ErrorMsg
+ failure
+ReadLineDone:
+ return
+
+##
+## Get an OK within 3 seconds or die
+##
+
+GetOK:
+ match "OK\r\n" GotOK
+ wait 3
+ log "The modem did not respond with \"OK\"."
+ failure
+GotOK:
+ return
+
+##
+## Send "+++" to get modem attention if on-line
+##
+
+SendTriplePlus:
+ print "\r\n"
+ wait 2
+ print "+++"
+ wait 2
+ return
+
+#################################################################
+#
+# LOGIN AUTO-SCRIPTING
+#
+#################################################################
+
+##
+## AutoLogin
+##
+## Here we attempt to figure out what the remote server wants
+## from us. We do this by checking for bytes that correspond
+## to PPP packets (in which case we are done) as well as common
+## login type stuff like "name:", "ogin:", etc.
+##
+## This always returns. The hope is that when it returns, the
+## remote side has reached PPP mode.
+##
+## This has been crafted from empirical evidence. Lots of terminal
+## servers have various intelligent/stupid features which we
+## take advantage of/have to work around.
+##
+## Variables (set automatically by mpd):
+##
+## $Login Authorization login
+## $Password Authorization password
+##
+
+AutoLogin:
+ log "Initiating auto-login..."
+
+# Spend at most this long doing auto-login before giving up
+
+ timer autoLogin 5 AutoLoginTimeout
+
+# At any time if we see an LCP frame (not our own echo) then we're done
+
+ match autoLogin "\x7e\xff\x03\xc0\x21" AutoLoginFrame
+ match autoLogin "\x7e\xff\x7d\x23\xc0\x21\x7d\x21" AutoLoginFrame
+ match autoLogin "\x7e\xc0\x21" AutoLoginFrame
+
+# Now send a "fake" PPP frame (this is an empty config-reject with id# 172).
+# This should trigger any auto-detecting servers to jump into PPP mode,
+# which is good because it's faster (by avoiding human readable messages)
+# and more reliable (PPP framing).
+
+ print "\x7e\xff\x7d\x23\xc0\x21\x7d\x24\xac\x7d\x20\x7d\x24\x2e\x2b\x7e"
+
+# Wait one second for server to auto-detect PPP or send a login prompt.
+# After one second of neither, try sending a carriage return (some servers
+# require this). After that, we have to see something recognizable from
+# the peer, otherwise we'll just timeout.
+
+ match "ogin" AutoLoginPrompt
+ match "name" AutoLoginPrompt
+ wait 1
+ print "\r"
+ match "ogin" AutoLoginPrompt
+ match "name" AutoLoginPrompt
+ wait
+
+# At this point we've seen a login prompt; do the manual login
+
+AutoLoginPrompt:
+ log "Sending login..."
+ print "${Login}\r"
+ match "word"
+ wait
+ log "Sending password..."
+ print "${Password}\r"
+ match "\r"
+ wait
+ if $didLogin != "yes" match "ogin:" LoginAgain
+ match ">"
+ match "%"
+ match ":"
+ wait
+ log "Enabling PPP..."
+ print "ppp\r"
+ cancel all
+ return
+
+LoginAgain:
+ set $didLogin "yes"
+ goto AutoLoginPrompt
+
+# We saw a PPP frame
+
+AutoLoginFrame:
+ log "Detected PPP frame."
+ cancel all
+ return
+
+# We timed out before seeing a PPP frame. Cross your fingers and pray.
+
+AutoLoginTimeout:
+ log "Auto-login timeout."
+ cancel all
+ return
+
diff --git a/src/usr/local/sbin/ntpdate_sync_once.sh b/src/usr/local/sbin/ntpdate_sync_once.sh
new file mode 100755
index 0000000..c183b79
--- /dev/null
+++ b/src/usr/local/sbin/ntpdate_sync_once.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+NOTSYNCED="true"
+MAX_ATTEMPTS=3
+SERVER=`/bin/cat /cf/conf/config.xml | /usr/bin/grep timeservers | /usr/bin/cut -d">" -f2 | /usr/bin/cut -d"<" -f1`
+if [ "${SERVER}" = "" ]; then
+ exit
+fi
+
+/bin/pkill -f ntpdate_sync_once.sh
+
+ATTEMPT=1
+# Loop until we're synchronized, but for a set number of attempts so we don't get stuck here forever.
+while [ "$NOTSYNCED" = "true" ] && [ ${ATTEMPT} -le ${MAX_ATTEMPTS} ]; do
+ # Ensure that ntpd and ntpdate are not running so that the socket we want will be free.
+ while [ true ]; do
+ /usr/bin/killall ntpdate 2>/dev/null
+ /bin/pgrep ntpd
+ if [ $? -eq 0 ]; then
+ /usr/bin/killall ntpd 2>/dev/null
+ else
+ break
+ fi
+ done
+ sleep 1
+ /usr/local/sbin/ntpdate -s -t 5 ${SERVER}
+ if [ "$?" = "0" ]; then
+ NOTSYNCED="false"
+ else
+ sleep 5
+ ATTEMPT=`expr ${ATTEMPT} + 1`
+ fi
+done
+
+if [ "$NOTSYNCED" = "true" ]; then
+ echo "Giving up on time sync after ${MAX_ATTEMPTS} attempts." | /usr/bin/logger -t ntp;
+else
+ echo "Successfully synced time after ${ATTEMPT} attempts." | /usr/bin/logger -t ntp;
+fi
+
+if [ -f /var/etc/ntpd.conf ]; then
+ echo "Starting NTP Daemon." | /usr/bin/logger -t ntp;
+ /usr/local/sbin/ntpd -g -c /var/etc/ntpd.conf -p /var/run/ntpd.pid
+else
+ echo "NTP configuration file missing, not starting daemon." | /usr/bin/logger -t ntp;
+fi
diff --git a/src/usr/local/sbin/openvpn.attributes.sh b/src/usr/local/sbin/openvpn.attributes.sh
new file mode 100755
index 0000000..add8e32
--- /dev/null
+++ b/src/usr/local/sbin/openvpn.attributes.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+echo $script_type > /tmp/script
+if [ "$script_type" = "client-connect" ]; then
+ if [ -f /tmp/$common_name ]; then
+ /bin/cat /tmp/$common_name > $1
+ /bin/rm /tmp/$common_name
+ fi
+elif [ "$script_type" = "client-disconnect" ]; then
+ command="/sbin/pfctl -a 'openvpn/$common_name' -F rules"
+ eval $command
+ /sbin/pfctl -k $ifconfig_pool_remote_ip
+ /sbin/pfctl -K $ifconfig_pool_remote_ip
+fi
+
+exit 0
diff --git a/src/usr/local/sbin/ovpn-linkdown b/src/usr/local/sbin/ovpn-linkdown
new file mode 100755
index 0000000..708d507
--- /dev/null
+++ b/src/usr/local/sbin/ovpn-linkdown
@@ -0,0 +1,7 @@
+#!/bin/sh
+/sbin/pfctl -i $1 -Fs
+# delete the node just in case mpd cannot do that
+/bin/rm -f /var/etc/nameserver_$1
+/bin/rm -f /tmp/$1_router
+/bin/rm -f /tmp/$1up
+/usr/local/sbin/pfSctl -c 'filter reload'
diff --git a/src/usr/local/sbin/ovpn-linkup b/src/usr/local/sbin/ovpn-linkup
new file mode 100755
index 0000000..1164835
--- /dev/null
+++ b/src/usr/local/sbin/ovpn-linkup
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# let the configuration system know that the ip has changed.
+#/usr/local/sbin/pfSctl -c "interface newip $interface"
+
+if [ "${dev_type}" = "tun" ]; then
+ if [ -n "${route_vpn_gateway}" ]; then
+ /bin/echo ${route_vpn_gateway} > /tmp/${1}_router
+ elif [ -n "${ifconfig_remote}" ]; then
+ /bin/echo ${ifconfig_remote} > /tmp/${1}_router
+ elif [ -n "${ifconfig_local}" ]; then
+ /bin/echo ${ifconfig_local} > /tmp/${1}_router
+ else
+ /bin/echo ${5} > /tmp/${1}_router
+ fi
+fi
+
+/usr/bin/touch /tmp/${1}up
+# reload filter
+/usr/local/sbin/pfSctl -c "interface newip ${1}"
+exit 0
diff --git a/src/usr/local/sbin/ovpn_auth_verify b/src/usr/local/sbin/ovpn_auth_verify
new file mode 100755
index 0000000..b38fcb9
--- /dev/null
+++ b/src/usr/local/sbin/ovpn_auth_verify
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if [ "$1" = "tls" ]; then
+ RESULT=$(/usr/local/sbin/fcgicli -f /etc/inc/openvpn.tls-verify.php -d "servercn=$2&depth=$3&certdepth=$4&certsubject=$5")
+else
+ # Single quoting $password breaks getting the value from the variable.
+ password=$(echo -n "${password}" | openssl enc -base64 | sed -e 's/=/%3D/g')
+ username=$(echo -n "${username}" | openssl enc -base64 | sed -e 's/=/%3D/g')
+ RESULT=$(/usr/local/sbin/fcgicli -f /etc/inc/openvpn.auth-user.php -d "username=$username&password=$password&cn=$common_name&strictcn=$3&authcfg=$2&modeid=$4")
+fi
+
+if [ "${RESULT}" = "OK" ]; then
+ exit 0
+fi
+
+exit 1
diff --git a/src/usr/local/sbin/pfSsh.php b/src/usr/local/sbin/pfSsh.php
new file mode 100755
index 0000000..8bfc909
--- /dev/null
+++ b/src/usr/local/sbin/pfSsh.php
@@ -0,0 +1,344 @@
+#!/usr/local/bin/php-cgi -f
+
+<?php
+
+require_once("globals.inc");
+echo "Starting the {$g['product_name']} developer shell";
+require_once("functions.inc");
+echo ".";
+require_once("config.inc");
+echo ".";
+require_once("util.inc");
+echo ".";
+
+$shell_cmds = array("alias", "alloc", "bg", "bind", "bindkey", "break",
+ "breaksw", "builtins", "case", "cd", "chdir", "command", "complete", "continue", "default",
+ "dirs", "do", "done", "echo", "echotc", "elif", "else", "end", "endif", "endsw", "esac", "eval",
+ "exec", "exit", "export", "false", "fc", "fg", "filetest", "fi", "for", "foreach", "getopts",
+ "glob", "goto", "hash", "hashstat", "history", "hup", "if", "jobid", "jobs", "kill", "limit",
+ "local", "log", "login", "logout", "ls-F", "nice", "nohup", "notify", "onintr", "popd",
+ "printenv", "pushd", "pwd", "read", "readonly", "rehash", "repeat", "return", "sched", "set",
+ "setenv", "settc", "setty", "setvar", "shift", "source", "stop", "suspend", "switch",
+ "telltc", "test", "then", "time", "trap", "true", "type", "ulimit", "umask", "unalias",
+ "uncomplete", "unhash", "unlimit", "unset", "unsetenv", "until", "wait", "where", "which",
+ "while");
+
+function pipe_cmd($command, $text_to_pipe) {
+ $descriptorspec = array(
+ 0 => array("pipe", "r"), // stdin
+ 1 => array("pipe", "w"), // stdout
+ 2 => array("pipe", "w")); // stderr ?? instead of a file
+
+ $fd = proc_open("$command", $descriptorspec, $pipes);
+ if (is_resource($fd)) {
+ fwrite($pipes[0], "{$text_to_pipe}");
+ fclose($pipes[0]);
+ while ($s= fgets($pipes[1], 1024)) {
+ // read from the pipe
+ $buffer .= $s;
+ }
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+ }
+ return $buffer;
+}
+
+if (!function_exists("readline")) {
+ function readline() {
+ $fp = fopen('php://stdin', 'r');
+ $textinput = chop(fgets($fp));
+ fclose($fp);
+ return $textinput;
+ }
+}
+
+function more($text, $count=24) {
+ $counter=0;
+ $lines = explode("\n", $text);
+ foreach ($lines as $line) {
+ if ($counter > $count) {
+ echo "Press RETURN to continue ...";
+ $fp = fopen('php://stdin', 'r');
+ $pressreturn = chop(fgets($fp));
+ if ($pressreturn == "q" || $pressreturn == "quit") {
+ return;
+ }
+ fclose($fp);
+ $counter = 0;
+ }
+ echo "{$line}\n";
+ $counter++;
+ }
+}
+
+function show_help() {
+
+$show_help_text = <<<EOF
+
+ Enter a series of commands and then execute the set with "exec".
+
+ For example:
+ echo "foo"; // php command
+ echo "foo2"; // php command
+ ! echo "heh" # shell command
+ exec
+
+ Example commands:
+
+ startrecording <recordingfilename>
+ stoprecording <recordingfilename>
+ showrecordings
+
+ parse_config(true); # reloads the \$config array
+
+ \$temp = print_r(\$config, true);
+ more(\$temp);
+
+ /* to output a configuration array */
+ print_r(\$config);
+
+ /* to output the interfaces configuration portion of config.xml */
+ print_r(\$config['interfaces']);
+
+ /* to output the dhcp server configuration */
+ print_r(\$config['dhcpd']);
+
+ /* to exit the {$g['product_name']} developer shell */
+ exit
+
+ /* to output supported wireless modes for an interface */
+ print_r(get_wireless_modes(\"ath0\"));
+
+ /* to enable SSH */
+ \$config['system']['enablesshd'] = true;
+
+ /* change OPTX to the OPT interface name such as BACKHAUL */
+ \$config['interfaces']['optx']['wireless']['standard'] = "11a";
+ \$config['interfaces']['optx']['wireless']['mode'] = "hostap";
+ \$config['interfaces']['optx']['wireless']['channel'] = "6";
+
+ /* to enable dhcp server for an optx interface */
+ \$config['dhcpd']['optx']['enable'] = true;
+ \$config['dhcpd']['optx']['range']['from'] = "192.168.31.100";
+ \$config['dhcpd']['optx']['range']['to'] = "192.168.31.150";
+
+ /* to disable the firewall filter */
+ \$config['system']['disablefilter'] = true;
+
+ /* to enable an interface and configure it as a DHCP client */
+ \$config['interfaces']['optx']['disabled'] = false;
+ \$config['interfaces']['optx']['ipaddr'] = "dhcp";
+
+ /* to enable an interface and set a static IPv4 address */
+ \$config['interfaces']['wan']['enable'] = true;
+ \$config['interfaces']['wan']['ipaddr'] = "192.168.100.1";
+ \$config['interfaces']['wan']['subnet'] = "24";
+
+ /* to save out the new configuration (config.xml) */
+ write_config();
+
+ /* to reboot the system after saving */
+ system_reboot_sync();
+
+EOF;
+
+ more($show_help_text);
+
+}
+
+$fp = fopen('php://stdin', 'r');
+
+echo ".\n\n";
+
+$pkg_interface='console';
+
+$shell_active = true;
+$tccommands = array();
+
+function completion($string, $index) {
+ global $tccommands;
+ return $tccommands;
+}
+
+readline_completion_function("completion");
+
+if ($argc < 2) {
+ echo "Welcome to the {$g['product_name']} developer shell\n";
+ echo "\nType \"help\" to show common usage scenarios.\n";
+ echo "\nAvailable playback commands:\n ";
+ $files = scandir("/etc/phpshellsessions/");
+ $tccommands[] = "playback";
+ foreach ($files as $file) {
+ if ($file <> "." and $file <> "..") {
+ echo $file . " ";
+ if (function_exists("readline_add_history")) {
+ readline_add_history("playback $file");
+ $tccommands[] = "$file";
+ }
+ }
+ }
+ echo "\n\n";
+}
+
+$recording = false;
+$playback_file_split = array();
+$playbackbuffer = "";
+
+if ($argv[1]=="playback" or $argv[1]=="run") {
+ if (!file_exists("/etc/phpshellsessions/{$argv[2]}")) {
+ echo "Could not locate playback file.";
+ exit;
+ }
+ playback_file($argv[2]);
+ exit;
+}
+
+// Define more commands
+$tccommands[] = "exit";
+$tccommands[] = "quit";
+$tccommands[] = "?";
+$tccommands[] = "exec";
+$tccommands[] = "startrecording";
+$tccommands[] = "stoprecording";
+$tccommands[] = "showrecordings";
+$tccommands[] = "record";
+$tccommands[] = "reset";
+$tccommands[] = "master";
+$tccommands[] = "RELENG_1_2";
+
+while ($shell_active == true) {
+ $command = readline("{$g['product_name']} shell: ");
+ readline_add_history($command);
+ $command_split = explode(" ", $command);
+ $first_command = $command_split[0];
+ if ($first_command == "playback" || $first_command == "run") {
+ $playback_file = $command_split[1];
+ if (!$playback_file || !file_exists("/etc/phpshellsessions/{$playback_file}")) {
+ $command = "";
+ echo "Could not locate playback file.\n";
+ } else {
+ $command = "";
+ echo "\nPlayback of file {$command_split[1]} started.\n\n";
+ playback_file("{$playback_file}");
+ continue;
+ }
+ }
+ if ($first_command == "exit" or $first_command == "quit") {
+ die;
+ }
+ if ($first_command == "help" or $first_command == "?") {
+ show_help();
+ $playbackbuffer = "";
+ continue;
+ }
+ if ($first_command == "exec" or $first_command == "exec;") {
+ playback_text($playbackbuffer);
+ $playbackbuffer = "";
+ continue;
+ }
+ if ($first_command == "stoprecording" || $first_command == "stoprecord" || $first_command == "stop") {
+ if ($recording) {
+ fwrite($recording_fd, $playbackbuffer);
+ fclose($recording_fd);
+ $command = "";
+ conf_mount_ro();
+ echo "Recording stopped.\n";
+ $recording = false;
+ } else {
+ echo "No recording session in progress.\n";
+ $command = "";
+ }
+ }
+ if ($first_command == "showrecordings") {
+ show_recordings();
+ $command = "";
+ }
+ if ($first_command == "reset") {
+ $playbackbuffer = "";
+ echo "\nBuffer reset.\n\n";
+ continue;
+ }
+ if ($first_command == "record") {
+ if (!$command_split[1]) {
+ echo "usage: record playbackname\n";
+ $command = "";
+ } else {
+ /* time to record */
+ conf_mount_rw();
+ safe_mkdir("/etc/phpshellsessions");
+ $recording_fd = fopen("/etc/phpshellsessions/{$command_split[1]}","w");
+ if (!$recording_fd) {
+ echo "Could not start recording session.\n";
+ $command = "";
+ } else {
+ $recording = true;
+ echo "Recording of {$command_split[1]} started.\n";
+ $command = "";
+ }
+ }
+ }
+ $playbackbuffer .= $command . "\n";
+}
+
+function show_recordings() {
+ conf_mount_rw();
+ safe_mkdir("/etc/phpshellsessions");
+ if ($recording) {
+ conf_mount_ro();
+ }
+ echo "==> Sessions available for playback are:\n";
+ system("cd /etc/phpshellsessions && ls /etc/phpshellsessions");
+ echo "==> end of list.\n";
+}
+
+function returnlastchar($command) {
+ $commandlen = strlen($command);
+ $endofstring = substr($command, ($commandlen-1));
+ return $endofstring;
+}
+
+function returnfirstchar($command) {
+ $commandlen = strlen($command);
+ $endofstring = substr($command, 0, 1);
+ return $endofstring;
+}
+
+function str_replace_all($search,$replace,$subject) {
+ while (strpos($subject,$search)!==false) {
+ $subject = str_replace($search,$replace,$subject);
+ }
+ return $subject;
+}
+
+function playback_text($playback_file_contents) {
+ $playback_file_split = explode("\n", $playback_file_contents);
+ $playback_text = "require_once('functions.inc');\n";
+ $playback_text .= "require_once('globals.inc');\n";
+ $playback_text .= "require_once('config.inc');\n";
+ $toquote = '"';
+ $toquotereplace = '\\"';
+ foreach ($playback_file_split as $pfs) {
+ $firstchar = returnfirstchar($pfs);
+ $currentline = $pfs;
+ if ($firstchar == "!") {
+ /* XXX: encode " in $pfs */
+ $pfsa = str_replace($toquote, $toquotereplace, $currentline);
+ $playback_text .= str_replace("!", "system(\"", $pfsa) . "\");\n";
+ } else if ($firstchar == "=") {
+ /* XXX: encode " in $pfs */
+ $pfsa = str_replace($toquote, $toquotereplace, $currentline);
+ $currentline .= str_replace("!", "system(\"", $pfsa) . "\");\n";
+ } else {
+ $playback_text .= $pfs . "\n";
+ }
+ }
+ global $config;
+ eval($playback_text);
+}
+
+function playback_file($playback_file) {
+ $playback_file_contents = file_get_contents("/etc/phpshellsessions/{$playback_file}");
+ playback_text($playback_file_contents);
+}
+
+?>
diff --git a/src/usr/local/sbin/ppp-linkdown b/src/usr/local/sbin/ppp-linkdown
new file mode 100755
index 0000000..62d07ed
--- /dev/null
+++ b/src/usr/local/sbin/ppp-linkdown
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+IF="${1}"
+LOCAL_IP="${3}"
+
+if [ -f /tmp/${IF}up ] && [ -f /conf/${IF}.log ]; then
+ seconds=$((`date -j +%s` - `/usr/bin/stat -f %m /tmp/${IF}up`))
+ /usr/local/sbin/ppp-log-uptime.sh $seconds ${IF} &
+fi
+
+/etc/rc.kill_states ${IF} ${LOCAL_IP}
+
+if [ -s "/tmp/${IF}_defaultgw" ]; then
+ GW=`head -n 1 /tmp/${IF}_defaultgw`
+ [ -n "${GW}" ] \
+ && /sbin/route delete default ${GW}
+fi
+# delete the node just in case mpd cannot do that
+/usr/sbin/ngctl shutdown ${IF}:
+if [ -f "/var/etc/nameserver_${IF}" ]; then
+ # Remove old entries
+ for nameserver in `cat /var/etc/nameserver_${IF}`; do
+ /sbin/route delete ${nameserver} >/dev/null 2>&1
+ done
+ /bin/rm -f /var/etc/nameserver_${IF}
+fi
+# Do not remove gateway used during filter reload.
+/bin/rm -f /tmp/${IF}_router
+/bin/rm -f /tmp/${IF}up
+/bin/rm -f /tmp/${IF}_ip
+/usr/local/sbin/pfSctl -c 'service reload dns'
diff --git a/src/usr/local/sbin/ppp-linkup b/src/usr/local/sbin/ppp-linkup
new file mode 100755
index 0000000..2d1eb33
--- /dev/null
+++ b/src/usr/local/sbin/ppp-linkup
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
+
+if [ "${2}" == "inet" ]; then
+
+ OLD_ROUTER=`cat /tmp/${1}_router`
+ if [ -n "${OLD_ROUTER}" ]; then
+ echo "Removing states to old router ${OLD_ROUTER}" | logger -t ppp-linkup
+ pfctl -i ${1} -k 0.0.0.0/0 -k ${OLD_ROUTER}/32
+ pfctl -i ${1} -k ${OLD_ROUTER}/32 -k 0.0.0.0/0
+ fi
+
+ # let the configuration system know that the ipv4 has changed.
+ echo ${4} > /tmp/${1}_router
+ echo ${3} > /tmp/${1}_ip
+ touch /tmp/${1}up
+
+ if grep -q dnsallowoverride /conf/config.xml; then
+ # write nameservers to file
+ echo -n "" > /var/etc/nameserver_${1}
+ if echo "${6}" | grep -q dns1; then
+ DNS1=`echo "${6}" | awk '{print $2}'`
+ echo "${DNS1}" >> /var/etc/nameserver_${1}
+ route change "${DNS1}" ${4}
+ fi
+ if echo "${7}" | grep -q dns2; then
+ DNS2=`echo "${7}" | awk '{print $2}'`
+ echo "${DNS2}" >> /var/etc/nameserver_${1}
+ route change "${DNS2}" ${4}
+ fi
+ pfSctl -c 'service reload dns'
+ sleep 1
+ fi
+ pfSctl -c "interface newip ${1}"
+
+elif [ "${2}" == "inet6" ]; then
+ # let the configuration system know that the ipv6 has changed.
+ echo ${4} |cut -d% -f1 > /tmp/${1}_routerv6
+ echo ${3} |cut -d% -f1 > /tmp/${1}_ipv6
+ touch /tmp/${1}upv6
+
+ if grep -q dnsallowoverride /conf/config.xml; then
+ # write nameservers to file
+ echo -n "" > /var/etc/nameserver_v6${1}
+ if echo "${6}" | grep -q dns1; then
+ DNS1=`echo "${6}" | awk '{print $2}'`
+ echo "${DNS1}" >> /var/etc/nameserver_v6${1}
+ route change -inet6 "${DNS1}" ${4}
+ fi
+ if echo "${7}" | grep -q dns2; then
+ DNS2=`echo "${7}" | awk '{print $2}'`
+ echo "${DNS2}" >> /var/etc/nameserver_v6${1}
+ route change -inet6 "${DNS2}" ${4}
+ fi
+ pfSctl -c 'service reload dns'
+ sleep 1
+ fi
+ pfSctl -c "interface newipv6 ${1}"
+fi
+
+exit 0
diff --git a/src/usr/local/sbin/ppp-log-uptime.sh b/src/usr/local/sbin/ppp-log-uptime.sh
new file mode 100755
index 0000000..6fd8def
--- /dev/null
+++ b/src/usr/local/sbin/ppp-log-uptime.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+#write the uptime in seconds to the persistent log in /conf/
+/etc/rc.conf_mount_rw
+/bin/echo `date -j +%Y.%m.%d-%H:%M:%S` $1 >> /conf/$2.log
+/etc/rc.conf_mount_ro
diff --git a/src/usr/local/sbin/ppp-uptime.sh b/src/usr/local/sbin/ppp-uptime.sh
new file mode 100755
index 0000000..d7a8441
--- /dev/null
+++ b/src/usr/local/sbin/ppp-uptime.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+#get ppp uptime from age of /tmp/{interface}up file
+[ -f /tmp/$1up ] && /bin/echo $((`date -j +%s` - `/usr/bin/stat -f %m /tmp/$1up`)) \ No newline at end of file
diff --git a/src/usr/local/sbin/prefixes.php b/src/usr/local/sbin/prefixes.php
new file mode 100644
index 0000000..118bd9e
--- /dev/null
+++ b/src/usr/local/sbin/prefixes.php
@@ -0,0 +1,93 @@
+<?php
+
+$leases_file = "/var/dhcpd/var/db/dhcpd6.leases";
+if (!file_exists($leases_file)) {
+ exit(1);
+}
+
+$fd = fopen($leases_file, 'r');
+
+$duid_arr = array();
+while (( $line = fgets($fd, 4096)) !== false) {
+ // echo "$line";
+ if (preg_match("/^(ia-[np][ad])[ ]+\"(.*?)\"/i", $line, $duidmatch)) {
+ $type = $duidmatch[1];
+ $duid = $duidmatch[2];
+ continue;
+ }
+
+ /* is it active? otherwise just discard */
+ if (preg_match("/binding state active/i", $line, $activematch)) {
+ $active = true;
+ continue;
+ }
+
+ if (preg_match("/iaaddr[ ]+([0-9a-f:]+)[ ]+/i", $line, $addressmatch)) {
+ $ia_na = $addressmatch[1];
+ continue;
+ }
+
+ if (preg_match("/iaprefix[ ]+([0-9a-f:\/]+)[ ]+/i", $line, $prefixmatch)) {
+ $ia_pd = $prefixmatch[1];
+ continue;
+ }
+
+ /* closing bracket */
+ if (preg_match("/^}/i", $line)) {
+ switch ($type) {
+ case "ia-na":
+ $duid_arr[$duid][$type] = $ia_na;
+ break;
+ case "ia-pd":
+ $duid_arr[$duid][$type] = $ia_pd;
+ break;
+ }
+ unset($type);
+ unset($duid);
+ unset($active);
+ unset($ia_na);
+ unset($ia_pd);
+ continue;
+ }
+}
+fclose($fd);
+
+$routes = array();
+foreach ($duid_arr as $entry) {
+ if (!empty($entry['ia-pd'])) {
+ $routes[$entry['ia-na']] = $entry['ia-pd'];
+ }
+}
+
+// echo "add routes\n";
+if (count($routes) > 0) {
+ foreach ($routes as $address => $prefix) {
+ echo "/sbin/route change -inet6 {$prefix} {$address}\n";
+ }
+}
+
+/* get clog from dhcpd */
+$dhcpdlogfile = "/var/log/dhcpd.log";
+$expires = array();
+if (file_exists($dhcpdlogfile)) {
+ $fd = popen("clog $dhcpdlogfile", 'r');
+ while (($line = fgets($fd)) !== false) {
+ //echo $line;
+ if (preg_match("/releases[ ]+prefix[ ]+([0-9a-f:]+\/[0-9]+)/i", $line, $expire)) {
+ if (in_array($expire[1], $routes)) {
+ continue;
+ }
+ $expires[$expire[1]] = $expire[1];
+ }
+ }
+ pclose($fd);
+}
+
+// echo "remove routes\n";
+if (count($expires) > 0) {
+ foreach ($expires as $prefix) {
+ echo "/sbin/route delete -inet6 {$prefix['prefix']}\n";
+ }
+}
+
+?>
diff --git a/src/usr/local/sbin/show_filter_reload_status.php b/src/usr/local/sbin/show_filter_reload_status.php
new file mode 100755
index 0000000..e66c890
--- /dev/null
+++ b/src/usr/local/sbin/show_filter_reload_status.php
@@ -0,0 +1,26 @@
+#!/usr/local/bin/php-cgi -q
+<?php
+
+$last_text = "";
+
+while (!stristr($status, "Done")) {
+ $status = get_status();
+ if ($status <> "") {
+ echo $status . "\n";
+ }
+ sleep(1);
+}
+
+function get_status() {
+ global $last_text;
+ $status = file_get_contents("/var/run/filter_reload_status");
+ $status = str_replace("...", "", $status);
+ $status .= "...";
+ if ($status <> $last_text) {
+ $last_text = $status;
+ return $status;
+ }
+ return "";
+}
+
+?>
diff --git a/src/usr/local/sbin/ufslabels.sh b/src/usr/local/sbin/ufslabels.sh
new file mode 100755
index 0000000..bded665
--- /dev/null
+++ b/src/usr/local/sbin/ufslabels.sh
@@ -0,0 +1,149 @@
+#!/bin/sh
+############################################
+#
+# Change fstab to use ufsid and geom labels to avoid relying on device numbers directly.
+#
+############################################
+
+# : cat /etc/fstab
+# # Device Mountpoint FStype Options Dump Pass#
+# /dev/ad0s1a / ufs rw 1 1
+# /dev/ad0s1b none swap sw 0 0
+
+string_length() {
+ unset LEN
+ LEN=$(echo -n "${1}" | /usr/bin/wc -m)
+}
+
+get_ufsid() {
+ # $1 = device
+ # : /sbin/dumpfs /dev/ad0s1a | /usr/bin/head -n 2 | /usr/bin/tail -n 1 | /usr/bin/cut -f2 -d'[' | /usr/bin/cut -f1 -d ']' | /usr/bin/sed -e 's/[[:blank:]]//g'
+ # 51928c99a471c440
+
+ unset UFSID
+ local _dev="${1}"
+
+ if [ -z "${_dev}" ]; then
+ return
+ fi
+
+ ID_PARTS=$(/sbin/dumpfs /dev/${_dev} | \
+ /usr/bin/head -n 2 | \
+ /usr/bin/tail -n 1 | \
+ /usr/bin/cut -f2 -d'[' | \
+ /usr/bin/cut -f1 -d ']')
+ # " 51110eb0 f288b35d " (note it has more spaces than we need/want)
+ ID_PART1=$(echo ${ID_PARTS} | awk '{print $1}')
+ # "51110eb0"
+ ID_PART2=$(echo ${ID_PARTS} | awk '{print $2}')
+ # "f288b35d"
+
+ if [ -z "${ID_PART1}" -o -z "${ID_PART2}" ]; then
+ echo "Invalid ufsid on ${1} (${ID_PARTS}), cannot continue"
+ exit -1
+ fi
+
+ # Safety check to avoid http://www.freebsd.org/cgi/query-pr.cgi?pr=156908
+ string_length "${ID_PART1}"
+ if [ ${LEN} -ne 8 ]; then
+ ID_PART1=$(printf "%08s" "${ID_PART1}")
+ fi
+ string_length "${ID_PART2}"
+ if [ ${LEN} -ne 8 ]; then
+ ID_PART2=$(printf "%08s" "${ID_PART2}")
+ fi
+ UFSID="${ID_PART1}${ID_PART2}"
+}
+
+find_fs_device() {
+ unset DEV
+ DEV=$(/usr/bin/grep -e "[[:blank:]]*${1}[[:blank:]]" ${FSTAB} | awk '{print $1}')
+ DEV=${DEV##/dev/}
+}
+
+FSTAB=${DESTDIR}/etc/fstab
+unset NEED_CHANGES
+cp ${FSTAB} ${FSTAB}.tmp
+
+ALL_FILESYSTEMS=$(/usr/bin/awk '/ufs/ && !(/dev\/mirror\// || /dev\/ufsid\// || /dev\/label\// || /dev\/geom\//) {print $2}' ${DESTDIR}/etc/fstab)
+
+for FS in ${ALL_FILESYSTEMS}
+do
+ find_fs_device "${FS}"
+ if [ "${DEV}" != "" ]; then
+ get_ufsid ${DEV}
+ string_length "${UFSID}"
+ if [ ${LEN} -ne 16 ]; then
+ echo "Invalid UFS ID for FS ${FS} ($UFSID), skipping"
+ else
+ /usr/bin/sed -i '' -e "s/${DEV}/ufsid\/${UFSID}/g" ${FSTAB}.tmp
+ NEED_CHANGES=1
+ fi
+ else
+ echo "Unable to find device for ${FS}"
+ exit -1
+ fi
+ echo "FS: ${FS} on device ${DEV} with ufsid ${UFSID}"
+done
+
+ALL_SWAPFS=$(/usr/bin/awk '/swap/ && !(/dev\/mirror\// || /dev\/ufsid\// || /dev\/label\// || /dev\/geom\//) {print $1}' ${DESTDIR}/etc/fstab)
+SWAPNUM=0
+for SFS in ${ALL_SWAPFS}
+do
+ DEV=${SFS##/dev/}
+ if [ "${DEV}" != "" ]; then
+ SWAPDEV=${DEV}
+ echo "FS: Swap slice ${SWAPNUM} on device ${SWAPDEV}"
+ if [ "${SWAPDEV}" != "" ]; then
+ /usr/bin/sed -i '' -e "s/${SWAPDEV}/label\/swap${SWAPNUM}/g" ${FSTAB}.tmp
+ NEED_CHANGES=1
+ fi
+ SWAPNUM=$((SWAPNUM+1))
+ fi
+done
+
+if [ -z "${NEED_CHANGES}" ]; then
+ echo Nothing to do, all filesystems and swap already use some form of device-independent labels
+ exit 0
+fi
+
+echo "===================="
+echo "Current fstab:"
+cat ${FSTAB}
+echo "===================="
+echo "New fstab:"
+cat ${FSTAB}.tmp
+
+if [ "${1}" = "commit" ]; then
+ COMMIT=y
+else
+ echo "Commit changes? (y/n):"
+ read COMMIT
+fi
+
+# Commit changes
+if [ "${COMMIT}" = "y" -o "${COMMIT}" = "Y" ]; then
+
+ echo "Applying label to swap partition"
+ SWAPNUM=0
+ for SFS in ${ALL_SWAPFS}
+ do
+ find_fs_device "${SFS}"
+ if [ "${DEV}" != "" ]; then
+ SWAPDEV=${DEV}
+ if [ -n "${SWAPDEV}" ]; then
+ echo "Disabling swap ${SWAPDEV} to apply label"
+ /sbin/swapoff /dev/${SWAPDEV}
+ /sbin/glabel label swap${SWAPNUM} /dev/${SWAPDEV}
+ fi
+ SWAPNUM=$((SWAPNUM+1))
+ fi
+ done
+
+ echo "Activating new fstab"
+ /bin/mv -f ${FSTAB} ${FSTAB}.old
+ /bin/mv -f ${FSTAB}.tmp ${FSTAB}
+
+ echo "Re-enabling swap"
+ /sbin/swapon -a 2>/dev/null >/dev/null
+fi
diff --git a/src/usr/local/sbin/vpn-linkdown b/src/usr/local/sbin/vpn-linkdown
new file mode 100755
index 0000000..b6d033c
--- /dev/null
+++ b/src/usr/local/sbin/vpn-linkdown
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# record logout
+/usr/bin/logger -p local3.info "logout,$1,$4,$5"
+/sbin/pfctl -i $1 -Fs
+/sbin/pfctl -K $4/32
diff --git a/src/usr/local/sbin/vpn-linkup b/src/usr/local/sbin/vpn-linkup
new file mode 100755
index 0000000..bca7b6e
--- /dev/null
+++ b/src/usr/local/sbin/vpn-linkup
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# record login
+/usr/bin/logger -p local3.info "login,$1,$4,$5"
+
+case `/bin/echo $1 | /usr/bin/cut -c1-4` in
+ pptp)
+ /sbin/ifconfig $1 group pptp
+ ;;
+ poes)
+ /sbin/ifconfig $1 group pppoe
+ ;;
+ l2tp)
+ /sbin/ifconfig $1 group l2tp
+ ;;
+esac
diff --git a/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot b/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot
new file mode 100644
index 0000000..7c01160
--- /dev/null
+++ b/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot
@@ -0,0 +1,29959 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-12-12 12:10-0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: etc/inc/array_intersect_key.inc:37
+msgid "Wrong parameter count for array_intersect_key()"
+msgstr ""
+
+#: etc/inc/array_intersect_key.inc:45
+msgid "array_intersect_key() Argument #"
+msgstr ""
+
+#: etc/inc/array_intersect_key.inc:46
+msgid " is not an array"
+msgstr ""
+
+#: etc/inc/auth.inc:106
+msgid ""
+"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/"
+"DNS_rebinding<br />Try accessing the router by IP address instead of by "
+"hostname."
+msgstr ""
+
+#: etc/inc/auth.inc:121
+msgid "Redirecting..."
+msgstr ""
+
+#: etc/inc/auth.inc:121
+msgid "Redirecting to the dashboard..."
+msgstr ""
+
+#: etc/inc/auth.inc:338 etc/inc/auth.inc:358 etc/inc/auth.inc:429
+#: etc/inc/auth.inc:458 etc/inc/auth.inc:514 etc/inc/auth.inc:648
+#: etc/inc/auth.inc:660
+#, php-format
+msgid "Running: %s"
+msgstr ""
+
+#: etc/inc/auth.inc:695 etc/inc/auth.inc:767 etc/inc/auth.inc:838
+#: etc/inc/auth.inc:1093
+#, php-format
+msgid "ERROR! Could not connect to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:713
+#, php-format
+msgid "LDAP: Could not lookup CA by reference for host %s."
+msgstr ""
+
+#: etc/inc/auth.inc:825
+msgid ""
+"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication "
+"server defined."
+msgstr ""
+
+#: etc/inc/auth.inc:852
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:857
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:953
+#, php-format
+msgid "ERROR! ldap_get_groups() Could not connect to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:966
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:971
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:1072
+msgid ""
+"ERROR! ldap_backed() called with no LDAP authentication server defined. "
+"Defaulting to local user database. Visit System -> User Manager."
+msgstr ""
+
+#: etc/inc/auth.inc:1075
+msgid "ERROR! ldap_backed() called with no LDAP authentication server defined."
+msgstr ""
+
+#: etc/inc/auth.inc:1109
+#, php-format
+msgid "ERROR! Could not bind to server %s."
+msgstr ""
+
+#: etc/inc/auth.inc:1127
+#, php-format
+msgid "Now Searching for %s in directory."
+msgstr ""
+
+#: etc/inc/auth.inc:1135
+#, php-format
+msgid "Now Searching in server %1$s, container %2$s with filter %3$s."
+msgstr ""
+
+#: etc/inc/auth.inc:1146
+#, php-format
+msgid "Search resulted in error: %s"
+msgstr ""
+
+#: etc/inc/auth.inc:1162
+msgid "ERROR! Either LDAP search failed, or multiple users were found."
+msgstr ""
+
+#: etc/inc/auth.inc:1169
+#, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s"
+msgstr ""
+
+#: etc/inc/auth.inc:1176
+#, php-format
+msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s."
+msgstr ""
+
+#: etc/inc/auth.inc:1211
+#, php-format
+msgid "Radius start: %s<br />\n"
+msgstr ""
+
+#: etc/inc/auth.inc:1222
+#, php-format
+msgid "Radius send failed: %s<br />\n"
+msgstr ""
+
+#: etc/inc/auth.inc:1228
+#, php-format
+msgid "Radius Auth succeeded"
+msgstr ""
+
+#: etc/inc/auth.inc:1233
+#, php-format
+msgid "Radius Auth rejected"
+msgstr ""
+
+#: etc/inc/auth.inc:1276 etc/inc/auth.inc:1291
+msgid "Local Database"
+msgstr ""
+
+#: etc/inc/auth.inc:1380
+#, php-format
+msgid "Successful login for user '%1$s' from: %2$s"
+msgstr ""
+
+#: etc/inc/auth.inc:1433
+#, php-format
+msgid "Session timed out for user '%1$s' from: %2$s"
+msgstr ""
+
+#: etc/inc/auth.inc:1435
+#, php-format
+msgid "User logged out for user '%1$s' from: %2$s"
+msgstr ""
+
+#: etc/inc/authgui.inc:75
+msgid "No page assigned to this user! Click here to logout."
+msgstr ""
+
+#: etc/inc/authgui.inc:105
+#, php-format
+msgid "Error: %1$s Description: %2$s"
+msgstr ""
+
+#: etc/inc/authgui.inc:168
+msgid "unknown reason"
+msgstr ""
+
+#: etc/inc/authgui.inc:169
+#, php-format
+msgid "Invalid login (%s)."
+msgstr ""
+
+#: etc/inc/authgui.inc:174
+#, php-format
+msgid "This device is currently being maintained by: %s."
+msgstr ""
+
+#: etc/inc/authgui.inc:245 etc/inc/authgui.inc:308
+msgid "Login"
+msgstr ""
+
+#: etc/inc/authgui.inc:273
+msgid ""
+"You are accessing this router by an IP address not configured locally, which "
+"may be forwarded by NAT or other means. <br /><br />If you did not setup "
+"this forwarding, you may be the target of a man-in-the-middle attack."
+msgstr ""
+
+#: etc/inc/authgui.inc:282
+msgid "Username:"
+msgstr ""
+
+#: etc/inc/authgui.inc:289 usr/local/www/diag_backup.php:693
+#: usr/local/www/system_authservers.php:655
+msgid "Password:"
+msgstr ""
+
+#: etc/inc/authgui.inc:296
+msgid "Enter username and password to login."
+msgstr ""
+
+#: etc/inc/authgui.inc:302
+msgid "Your browser must support cookies to login."
+msgstr ""
+
+#: etc/inc/captiveportal.inc:1388
+#, php-format
+msgid "Error: cannot open '%s' in captiveportal_write_elements()%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:59
+msgid "DANGER! WARNING! ACHTUNG!"
+msgstr ""
+
+#: etc/inc/config.console.inc:60
+#, php-format
+msgid "%s requires *AT LEAST* %s RAM to function correctly.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:61
+#, php-format
+msgid "Only (%s) MB RAM has been detected, with (%s) available to %s.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:62
+msgid "Press ENTER to continue."
+msgstr ""
+
+#: etc/inc/config.console.inc:84 etc/inc/config.console.inc:484
+msgid "No interfaces found!"
+msgstr ""
+
+#: etc/inc/config.console.inc:182
+msgid "VLAN interfaces:"
+msgstr ""
+
+#: etc/inc/config.console.inc:201
+msgid "Enter the WAN interface name or 'a' for auto-detection:"
+msgstr ""
+
+#: etc/inc/config.console.inc:209 etc/inc/config.console.inc:234
+#: etc/inc/config.console.inc:266 etc/inc/config.console.inc:507
+#, php-format
+msgid "%sInvalid interface name '%s'%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:216
+#, php-format
+msgid ""
+"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this "
+"enables full Firewalling/NAT mode.%s(or nothing if finished):%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:251
+#, php-format
+msgid "%sOptional interface %s description found: %s"
+msgstr ""
+
+#: etc/inc/config.console.inc:253
+#, php-format
+msgid ""
+"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or "
+"nothing if finished):%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:260
+msgid "Optional"
+msgstr ""
+
+#: etc/inc/config.console.inc:294
+msgid "The interfaces will be assigned as follows:"
+msgstr ""
+
+#: etc/inc/config.console.inc:408
+#, php-format
+msgid "%sWriting configuration..."
+msgstr ""
+
+#: etc/inc/config.console.inc:410
+#, php-format
+msgid "done.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:417
+msgid "One moment while we reload the settings..."
+msgstr ""
+
+#: etc/inc/config.console.inc:418
+msgid " done!"
+msgstr ""
+
+#: etc/inc/config.console.inc:438
+#, php-format
+msgid "Detected link-up on interface %s.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:443
+#, php-format
+msgid "No link-up detected.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:482
+msgid "VLAN Capable interfaces:"
+msgstr ""
+
+#: etc/inc/config.console.inc:497
+msgid "No VLAN capable interfaces detected."
+msgstr ""
+
+#: etc/inc/config.console.inc:501
+msgid ""
+"Enter the parent interface name for the new VLAN (or nothing if finished):"
+msgstr ""
+
+#: etc/inc/config.console.inc:514
+msgid "Enter the VLAN tag (1-4094):"
+msgstr ""
+
+#: etc/inc/config.console.inc:518
+#, php-format
+msgid "%sInvalid VLAN tag '%s'%s"
+msgstr ""
+
+#: etc/inc/config.inc:96
+msgid "Upgrading m0n0wall configuration to pfSense... "
+msgstr ""
+
+#: etc/inc/config.inc:99
+msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml"
+msgstr ""
+
+#: etc/inc/config.inc:128
+msgid "CDROM build"
+msgstr ""
+
+#: etc/inc/config.inc:129 etc/inc/config.inc:130
+msgid "CFG:"
+msgstr ""
+
+#: etc/inc/config.inc:131
+msgid "TYPE:"
+msgstr ""
+
+#: etc/inc/config.inc:146 etc/inc/config.inc:161
+#, php-format
+msgid "Found configuration on %s.%s"
+msgstr ""
+
+#: etc/inc/config.inc:175 etc/inc/config.inc:176 etc/inc/config.lib.inc:105
+#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:249
+#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:272
+msgid "No config.xml found, attempting last known config restore."
+msgstr ""
+
+#: etc/inc/config.inc:179
+msgid "No config.xml or config backups found, resetting to factory defaults."
+msgstr ""
+
+#: etc/inc/config.lib.inc:79
+msgid "Config.xml unlocked."
+msgstr ""
+
+#: etc/inc/config.lib.inc:82
+msgid "Invalid password entered. Please try again."
+msgstr ""
+
+#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140
+#: etc/inc/config.lib.inc:276
+msgid ""
+"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."
+msgstr ""
+
+#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149
+#: etc/inc/config.lib.inc:548
+msgid "Could not restore config.xml."
+msgstr ""
+
+#: etc/inc/config.lib.inc:214 etc/inc/config.lib.inc:215
+#, php-format
+msgid "%1$s is restoring the configuration %2$s"
+msgstr ""
+
+#: etc/inc/config.lib.inc:237
+msgid "Resetting factory defaults..."
+msgstr ""
+
+#: etc/inc/config.lib.inc:240
+msgid ""
+"No XML configuration file found - using factory defaults.\n"
+"Make sure that the configuration floppy disk with the conf/config.xml\n"
+"file is inserted. If it isn't, your configuration changes will be lost\n"
+"on reboot.\n"
+msgstr ""
+
+#: etc/inc/config.lib.inc:253
+#, php-format
+msgid "XML configuration file not found. %s cannot continue booting."
+msgstr ""
+
+#: etc/inc/config.lib.inc:259
+msgid ""
+"Last known config found and restored. Please double check your "
+"configuration file for accuracy."
+msgstr ""
+
+#: etc/inc/config.lib.inc:263
+msgid "Could not find a usable configuration file! Exiting...."
+msgstr ""
+
+#: etc/inc/config.lib.inc:323
+msgid "Disk is dirty. Running fsck -y"
+msgstr ""
+
+#: etc/inc/config.lib.inc:334
+msgid "File system is dirty. Launching FSCK for /"
+msgstr ""
+
+#: etc/inc/config.lib.inc:388
+#, php-format
+msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes"
+msgstr ""
+
+#: etc/inc/config.lib.inc:399 etc/inc/config.lib.inc:400
+msgid "Updated bogon update frequency to 3am"
+msgstr ""
+
+#: etc/inc/config.lib.inc:431
+#, php-format
+msgid "Ended Configuration upgrade at %s"
+msgstr ""
+
+#: etc/inc/config.lib.inc:434
+#, php-format
+msgid "Upgraded config version level from %1$s to %2$s"
+msgstr ""
+
+#: etc/inc/config.lib.inc:525
+msgid "WARNING: Config contents could not be save. Could not open file!"
+msgstr ""
+
+#: etc/inc/config.lib.inc:527
+#, php-format
+msgid "Unable to open %s/config.xml for writing in write_config()%s"
+msgstr ""
+
+#: etc/inc/config.lib.inc:633
+msgid "Reverted to"
+msgstr ""
+
+#: etc/inc/config.lib.inc:648
+msgid "Installing configuration..."
+msgstr ""
+
+#: etc/inc/config.lib.inc:650
+msgid "Installing configuration ...."
+msgstr ""
+
+#: etc/inc/config.lib.inc:701
+msgid "XML error: unable to open file"
+msgstr ""
+
+#: etc/inc/config.lib.inc:707
+#, php-format
+msgid "%1$s at line %2$d"
+msgstr ""
+
+#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761
+#, php-format
+msgid "The backup cache file %s is corrupted. Unlinking."
+msgstr ""
+
+#: etc/inc/config.lib.inc:901
+#, php-format
+msgid "%s made unknown change"
+msgstr ""
+
+#: etc/inc/easyrule.inc:118
+msgid "Easy Rule: Blocked from Firewall Log View"
+msgstr ""
+
+#: etc/inc/easyrule.inc:119 etc/inc/easyrule.inc:302
+msgid "Easy Rule"
+msgstr ""
+
+#: etc/inc/easyrule.inc:179 etc/inc/easyrule.inc:187
+msgid "Entry added"
+msgstr ""
+
+#: etc/inc/easyrule.inc:184
+msgid "Hosts blocked from Firewall Log view"
+msgstr ""
+
+#: etc/inc/easyrule.inc:264
+msgid "Easy Rule: Passed from Firewall Log View"
+msgstr ""
+
+#: etc/inc/easyrule.inc:319
+msgid "Tried to block invalid IP:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:323
+msgid "Invalid interface for block rule:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:326
+msgid "Host added successfully"
+msgstr ""
+
+#: etc/inc/easyrule.inc:328
+msgid "Failed to create block rule, alias, or add host."
+msgstr ""
+
+#: etc/inc/easyrule.inc:331
+msgid "Tried to block but had no host IP or interface"
+msgstr ""
+
+#: etc/inc/easyrule.inc:333
+msgid "Unknown block error."
+msgstr ""
+
+#: etc/inc/easyrule.inc:344
+msgid "Invalid interface for pass rule:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:347
+msgid "Invalid protocol for pass rule:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:350
+msgid "Tried to pass invalid source IP:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:353
+msgid "Tried to pass invalid destination IP:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:357
+msgid "Missing destination port:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:360
+msgid "Tried to pass invalid destination port:"
+msgstr ""
+
+#: etc/inc/easyrule.inc:367
+msgid "Successfully added pass rule!"
+msgstr ""
+
+#: etc/inc/easyrule.inc:369
+msgid "Failed to add pass rule."
+msgstr ""
+
+#: etc/inc/easyrule.inc:372
+msgid "Missing parameters for pass rule."
+msgstr ""
+
+#: etc/inc/easyrule.inc:374
+msgid "Unknown pass error."
+msgstr ""
+
+#: etc/inc/filter.inc:62 etc/inc/filter.inc:92
+#: usr/local/www/firewall_nat_1to1_edit.php:364
+#: usr/local/www/firewall_nat_1to1_edit.php:437
+#: usr/local/www/firewall_nat_edit.php:569
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:629
+#: usr/local/www/firewall_nat_edit.php:658
+#: usr/local/www/firewall_nat_out_edit.php:540
+#: usr/local/www/firewall_nat_out_edit.php:590
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1110
+#: usr/local/www/firewall_rules_edit.php:1123
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1209
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/services_captiveportal_hostname.php:180
+#: usr/local/www/services_captiveportal_hostname.php:187
+msgid "any"
+msgstr ""
+
+#: etc/inc/filter.inc:63 etc/inc/filter.inc:97
+msgid "Echo request"
+msgstr ""
+
+#: etc/inc/filter.inc:64 etc/inc/filter.inc:98
+msgid "Echo reply"
+msgstr ""
+
+#: etc/inc/filter.inc:65 etc/inc/filter.inc:93
+msgid "Destination unreachable"
+msgstr ""
+
+#: etc/inc/filter.inc:66
+msgid "Source quench"
+msgstr ""
+
+#: etc/inc/filter.inc:67 etc/inc/filter.inc:109
+msgid "Redirect"
+msgstr ""
+
+#: etc/inc/filter.inc:68
+msgid "Alternate Host"
+msgstr ""
+
+#: etc/inc/filter.inc:69 etc/inc/filter.inc:106
+msgid "Router advertisement"
+msgstr ""
+
+#: etc/inc/filter.inc:70 etc/inc/filter.inc:105
+msgid "Router solicitation"
+msgstr ""
+
+#: etc/inc/filter.inc:71 etc/inc/filter.inc:95
+msgid "Time exceeded"
+msgstr ""
+
+#: etc/inc/filter.inc:72
+msgid "Invalid IP header"
+msgstr ""
+
+#: etc/inc/filter.inc:73
+msgid "Timestamp"
+msgstr ""
+
+#: etc/inc/filter.inc:74
+msgid "Timestamp reply"
+msgstr ""
+
+#: etc/inc/filter.inc:75
+msgid "Information request"
+msgstr ""
+
+#: etc/inc/filter.inc:76
+msgid "Information reply"
+msgstr ""
+
+#: etc/inc/filter.inc:77
+msgid "Address mask request"
+msgstr ""
+
+#: etc/inc/filter.inc:78
+msgid "Address mask reply"
+msgstr ""
+
+#: etc/inc/filter.inc:79 usr/local/www/diag_dns.php:264
+#: usr/local/www/diag_traceroute.php:47 usr/local/www/diag_traceroute.php:97
+#: usr/local/www/diag_traceroute.php:156 usr/local/www/fbegin.inc:233
+msgid "Traceroute"
+msgstr ""
+
+#: etc/inc/filter.inc:80
+msgid "Datagram conversion error"
+msgstr ""
+
+#: etc/inc/filter.inc:81
+msgid "Mobile host redirect"
+msgstr ""
+
+#: etc/inc/filter.inc:82
+msgid "IPv6 where-are-you"
+msgstr ""
+
+#: etc/inc/filter.inc:83
+msgid "IPv6 I-am-here"
+msgstr ""
+
+#: etc/inc/filter.inc:84
+msgid "Mobile registration request"
+msgstr ""
+
+#: etc/inc/filter.inc:85
+msgid "Mobile registration reply"
+msgstr ""
+
+#: etc/inc/filter.inc:86
+msgid "SKIP"
+msgstr ""
+
+#: etc/inc/filter.inc:87
+msgid "Photuris"
+msgstr ""
+
+#: etc/inc/filter.inc:94
+msgid "Packet too big"
+msgstr ""
+
+#: etc/inc/filter.inc:96
+msgid "Parameter problem"
+msgstr ""
+
+#: etc/inc/filter.inc:99
+msgid "Group membership query"
+msgstr ""
+
+#: etc/inc/filter.inc:100
+msgid "Multicast listener query"
+msgstr ""
+
+#: etc/inc/filter.inc:101
+msgid "Group membership report"
+msgstr ""
+
+#: etc/inc/filter.inc:102
+msgid "Multicast listener report"
+msgstr ""
+
+#: etc/inc/filter.inc:103
+msgid "Group membership termination"
+msgstr ""
+
+#: etc/inc/filter.inc:104
+msgid "Multicast listener done"
+msgstr ""
+
+#: etc/inc/filter.inc:107
+msgid "Neighbor solicitation"
+msgstr ""
+
+#: etc/inc/filter.inc:108
+msgid "Neighbor advertisement"
+msgstr ""
+
+#: etc/inc/filter.inc:110
+msgid "Router renumbering"
+msgstr ""
+
+#: etc/inc/filter.inc:111
+msgid "Who are you request"
+msgstr ""
+
+#: etc/inc/filter.inc:112
+msgid "Who are you reply"
+msgstr ""
+
+#: etc/inc/filter.inc:113
+msgid "FQDN query"
+msgstr ""
+
+#: etc/inc/filter.inc:114
+msgid "FQDN reply"
+msgstr ""
+
+#: etc/inc/filter.inc:115
+msgid "Node information request"
+msgstr ""
+
+#: etc/inc/filter.inc:116
+msgid "Node information reply"
+msgstr ""
+
+#: etc/inc/filter.inc:117
+msgid "mtrace resp"
+msgstr ""
+
+#: etc/inc/filter.inc:118
+msgid "mtrace messages"
+msgstr ""
+
+#: etc/inc/filter.inc:223
+msgid "Initializing"
+msgstr ""
+
+#: etc/inc/filter.inc:235
+msgid "Configuring firewall"
+msgstr ""
+
+#: etc/inc/filter.inc:240
+msgid "Creating aliases"
+msgstr ""
+
+#: etc/inc/filter.inc:245
+msgid "Generating Limiter rules"
+msgstr ""
+
+#: etc/inc/filter.inc:248
+msgid "Generating NAT rules"
+msgstr ""
+
+#: etc/inc/filter.inc:253
+msgid "Generating filter rules"
+msgstr ""
+
+#: etc/inc/filter.inc:259
+msgid "Generating ALTQ queues"
+msgstr ""
+
+#: etc/inc/filter.inc:261
+msgid "Generating Layer7 rules"
+msgstr ""
+
+#: etc/inc/filter.inc:265
+msgid "Loading filter rules"
+msgstr ""
+
+#: etc/inc/filter.inc:272
+msgid "Filter is disabled. Not loading rules."
+msgstr ""
+
+#: etc/inc/filter.inc:274 etc/inc/filter.inc:462 etc/inc/interfaces.inc:190
+#: etc/inc/interfaces.inc:210 etc/inc/interfaces.inc:342
+#: etc/inc/interfaces.inc:399 etc/inc/interfaces.inc:653
+#: etc/inc/interfaces.inc:959 etc/inc/interfaces.inc:987
+#: etc/inc/interfaces.inc:1008 etc/inc/interfaces.inc:1023
+#: etc/inc/interfaces.inc:1922 etc/inc/pkg-utils.inc:365
+#: etc/inc/pkg-utils.inc:651 etc/inc/pkg-utils.inc:676
+#: etc/inc/pkg-utils.inc:754 etc/inc/pkg-utils.inc:769
+#: etc/inc/pkg-utils.inc:803 etc/inc/pkg-utils.inc:832
+#: etc/inc/pkg-utils.inc:839 etc/inc/pkg-utils.inc:856
+#: etc/inc/pkg-utils.inc:872 etc/inc/pkg-utils.inc:888
+#: etc/inc/pkg-utils.inc:995 etc/inc/pkg-utils.inc:1012
+#: etc/inc/pkg-utils.inc:1037 etc/inc/pkg-utils.inc:1082
+#: etc/inc/pkg-utils.inc:1091 etc/inc/pkg-utils.inc:1101
+#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1123
+#: etc/inc/pkg-utils.inc:1142 etc/inc/pkg-utils.inc:1468
+#: etc/inc/pkg-utils.inc:1494 etc/inc/pkg-utils.inc:1537 etc/inc/rrd.inc:938
+#: etc/inc/services.inc:1328 etc/inc/services.inc:1686
+#: etc/inc/services.inc:1870 etc/inc/services.inc:1907
+#: etc/inc/services.inc:2118 etc/inc/system.inc:895 etc/inc/system.inc:986
+#: etc/inc/system.inc:1406 etc/inc/system.inc:1769 etc/inc/system.inc:1909
+msgid "done."
+msgstr ""
+
+#: etc/inc/filter.inc:314
+msgid "Setting up logging information"
+msgstr ""
+
+#: etc/inc/filter.inc:319
+msgid "Setting up SCRUB information"
+msgstr ""
+
+#: etc/inc/filter.inc:363
+#, php-format
+msgid "The line in question reads [%1$d]: %2$s"
+msgstr ""
+
+#: etc/inc/filter.inc:369
+msgid "PF was wedged/busy and has been reset."
+msgstr ""
+
+#: etc/inc/filter.inc:377 etc/inc/filter.inc:378
+#, php-format
+msgid "There were error(s) loading the rules: %1$s - %2$s"
+msgstr ""
+
+#: etc/inc/filter.inc:388
+msgid "Starting up layer7 daemon"
+msgstr ""
+
+#: etc/inc/filter.inc:447
+msgid "Processing down interface states"
+msgstr ""
+
+#: etc/inc/filter.inc:451
+msgid "Running plugins"
+msgstr ""
+
+#: etc/inc/filter.inc:455
+msgid "Running plugins (pf)"
+msgstr ""
+
+#: etc/inc/filter.inc:457
+msgid "Plugins completed."
+msgstr ""
+
+#: etc/inc/filter.inc:460 usr/local/www/restart_httpd.php:53
+#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:59
+#: usr/local/www/restart_httpd.php:62
+msgid "Done"
+msgstr ""
+
+#: etc/inc/filter.inc:738
+msgid "Creating gateway group item..."
+msgstr ""
+
+#: etc/inc/filter.inc:773
+#, php-format
+msgid "Setting up route with %1$s on %2$s"
+msgstr ""
+
+#: etc/inc/filter.inc:780
+#, php-format
+msgid ""
+"An error occurred while trying to find the interface got %s . The rule has "
+"not been added."
+msgstr ""
+
+#: etc/inc/filter.inc:1118
+#, php-format
+msgid "Creating reflection NAT rule for %s..."
+msgstr ""
+
+#: etc/inc/filter.inc:1207
+#, php-format
+msgid "Creating reflection rule for %s..."
+msgstr ""
+
+#: etc/inc/filter.inc:1390
+msgid "localhost"
+msgstr ""
+
+#: etc/inc/filter.inc:1398
+msgid "static route"
+msgstr ""
+
+#: etc/inc/filter.inc:1409
+msgid "DHCP alias address"
+msgstr ""
+
+#: etc/inc/filter.inc:1446
+msgid "PPTP server"
+msgstr ""
+
+#: etc/inc/filter.inc:1455
+msgid "PPPoE server"
+msgstr ""
+
+#: etc/inc/filter.inc:1464
+msgid "L2TP server"
+msgstr ""
+
+#: etc/inc/filter.inc:1473
+msgid "OpenVPN server"
+msgstr ""
+
+#: etc/inc/filter.inc:1480
+msgid "OpenVPN client"
+msgstr ""
+
+#: etc/inc/filter.inc:1488
+msgid "IPsec client"
+msgstr ""
+
+#: etc/inc/filter.inc:1521
+msgid "Auto created rule for ISAKMP"
+msgstr ""
+
+#: etc/inc/filter.inc:1531
+msgid "Auto created rule"
+msgstr ""
+
+#: etc/inc/filter.inc:1630
+msgid "Creating 1:1 rules..."
+msgstr ""
+
+#: etc/inc/filter.inc:1786
+#, php-format
+msgid "Creating advanced outbound rule %s"
+msgstr ""
+
+#: etc/inc/filter.inc:1824
+msgid "Creating outbound NAT rules"
+msgstr ""
+
+#: etc/inc/filter.inc:1831
+msgid "Creating automatic outbound rules"
+msgstr ""
+
+#: etc/inc/filter.inc:1861
+msgid "Setting up TFTP helper"
+msgstr ""
+
+#: etc/inc/filter.inc:1893
+#, php-format
+msgid "Creating NAT rule %s"
+msgstr ""
+
+#: etc/inc/filter.inc:2100
+#, php-format
+msgid "Creating filter rule %s ..."
+msgstr ""
+
+#: etc/inc/filter.inc:2432
+#, php-format
+msgid "Setting up pass/block rules %s"
+msgstr ""
+
+#: etc/inc/filter.inc:2441
+#, php-format
+msgid "Could not find IPv6 gateway for interface (%s)."
+msgstr ""
+
+#: etc/inc/filter.inc:2447
+#, php-format
+msgid "Could not find IPv4 gateway for interface (%s)."
+msgstr ""
+
+#: etc/inc/filter.inc:2474
+#, php-format
+msgid "Creating rule %s"
+msgstr ""
+
+#: etc/inc/filter.inc:2725
+msgid "Creating default rules"
+msgstr ""
+
+#: etc/inc/filter.inc:3344
+msgid "Creating IPsec rules..."
+msgstr ""
+
+#: etc/inc/filter.inc:3397
+msgid ""
+"Please use filter_tdr_install_cron() function tdr_install_cron will be "
+"deprecated!"
+msgstr ""
+
+#: etc/inc/filter.inc:3443
+msgid "Installed 15 minute filter reload for Time Based Rules"
+msgstr ""
+
+#: etc/inc/filter.inc:3450
+msgid "Removed 15 minute filter reload for Time Based Rules"
+msgstr ""
+
+#: etc/inc/filter.inc:3766
+#, php-format
+msgid "Checking for %1$s PF hooks in package %2$s"
+msgstr ""
+
+#: etc/inc/filter.inc:3772
+#, php-format
+msgid "Processing early %1$s rules for package %2$s"
+msgstr ""
+
+#: etc/inc/filter.inc:3777
+#, php-format
+msgid "There was an error while parsing the package filter rules for %s."
+msgstr ""
+
+#: etc/inc/filter_log.inc:251
+#, php-format
+msgid ""
+"There was a error parsing rule number: %s. Please report to mailing list "
+"or forum."
+msgstr ""
+
+#: etc/inc/filter_log.inc:260
+#, php-format
+msgid ""
+"There was a error parsing rule: %s. Please report to mailing list or forum."
+msgstr ""
+
+#: etc/inc/filter_log.inc:273
+#, php-format
+msgid "Service %1$s/%2$s: %3$s"
+msgstr ""
+
+#: etc/inc/functions.inc:94
+msgid "Acknowledge All Notices"
+msgstr ""
+
+#: etc/inc/functions.inc:95
+msgid "Click to Acknowledge"
+msgstr ""
+
+#: etc/inc/functions.inc:113
+msgid "unread notice"
+msgstr ""
+
+#: etc/inc/functions.inc:115
+msgid "unread notices"
+msgstr ""
+
+#: etc/inc/gwlb.inc:939
+#, php-format
+msgid "Updating gateway group gateway for %1$s - new gateway is %2$s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:51
+msgid "interfaces_bring_up() was called but no variable defined."
+msgstr ""
+
+#: etc/inc/interfaces.inc:186
+msgid "Configuring loopback interface..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:197
+msgid "Configuring VLAN interfaces..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:217
+msgid "VLAN: called with wrong options. Problems with config!"
+msgstr ""
+
+#: etc/inc/interfaces.inc:225
+msgid "interface_vlan_configure called with if undefined."
+msgstr ""
+
+#: etc/inc/interfaces.inc:259 etc/inc/interfaces.inc:349
+#, php-format
+msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:266
+#, php-format
+msgid "interface_qinq_configure called with if undefined.%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:271
+#, php-format
+msgid "interface_qinq_configure called with invalid if.%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:334
+msgid "Configuring QinQ interfaces..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:357
+#, php-format
+msgid "interface_qinq2_configure called with if undefined.%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:378
+msgid "Creating wireless clone interfaces..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:446
+#, php-format
+msgid "No members found on %s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:502
+msgid "realif not defined in interfaces bridge - up"
+msgstr ""
+
+#: etc/inc/interfaces.inc:615
+msgid "bridgeif not defined -- could not bring interface up"
+msgstr ""
+
+#: etc/inc/interfaces.inc:639
+msgid "Configuring LAGG interfaces..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:778
+msgid "Could not bring greif up -- variable not defined."
+msgstr ""
+
+#: etc/inc/interfaces.inc:847
+msgid ""
+"could not bring realif up -- variable not defined -- "
+"interface_gif_configure()"
+msgstr ""
+
+#: etc/inc/interfaces.inc:872
+msgid "could not bring gifif up -- variable not defined"
+msgstr ""
+
+#: etc/inc/interfaces.inc:953 etc/inc/interfaces.inc:980
+#: etc/inc/interfaces.inc:1001 etc/inc/interfaces.inc:1016
+#, php-format
+msgid "Configuring %s interface..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:956 etc/inc/interfaces.inc:982
+#: etc/inc/interfaces.inc:1003 etc/inc/interfaces.inc:1018
+#, php-format
+msgid "Configuring %s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:1103
+msgid "Wrong parameters used during interface_bring_down"
+msgstr ""
+
+#: etc/inc/interfaces.inc:1440
+#, php-format
+msgid "Can't find PPP config for %s in interface_ppps_configure()."
+msgstr ""
+
+#: etc/inc/interfaces.inc:1499
+#, php-format
+msgid ""
+"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in "
+"interfaces_ppps_configure."
+msgstr ""
+
+#: etc/inc/interfaces.inc:1506
+#, php-format
+msgid ""
+"Device %s does not exist. PPP link cannot start without the modem device."
+msgstr ""
+
+#: etc/inc/interfaces.inc:1511
+#, php-format
+msgid "Unkown %s configured as ppp interface."
+msgstr ""
+
+#: etc/inc/interfaces.inc:1783
+#, php-format
+msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:1865
+msgid "Configuring CARP settings..."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2120
+#, php-format
+msgid ""
+"Interface specified for the virtual IP address %s does not exist. Skipping "
+"this VIP."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2128
+#, php-format
+msgid ""
+"Interface does not have required IP address in the subnet of virtual IP "
+"address %s. Skipping this VIP."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2135
+#, php-format
+msgid ""
+"Interface does not have required IPv6 address in the subnet of virtual IPv6 "
+"address %s. Skipping this VIP."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2191
+#, php-format
+msgid "Interface %s changed to hostap mode"
+msgstr ""
+
+#: etc/inc/interfaces.inc:2195
+#, php-format
+msgid "Interface %s changed to adhoc mode"
+msgstr ""
+
+#: etc/inc/interfaces.inc:2199
+#, php-format
+msgid "Interface %s changed to infrastructure mode"
+msgstr ""
+
+#: etc/inc/interfaces.inc:2211
+#, php-format
+msgid "Cloning new wireless interface %s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:2216
+#, php-format
+msgid "Failed to clone interface %1$s with error code %2$s, output %3$s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:2914
+msgid "Generating new MAC address."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2920
+#, php-format
+msgid ""
+"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been "
+"automatically replaced with %2$s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:3741
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for "
+"writing.%s"
+msgstr ""
+
+#: etc/inc/interfaces.inc:3754
+#, php-format
+msgid "Invalid interface \"%s\" in interface_dhcp_configure()"
+msgstr ""
+
+#: etc/inc/interfaces.inc:3806
+#, php-format
+msgid "Could not bring up %s interface in interface_dhcp_configure()"
+msgstr ""
+
+#: etc/inc/ipsec.inc:45
+msgid "My IP address"
+msgstr ""
+
+#: etc/inc/ipsec.inc:46 etc/inc/ipsec.inc:55 usr/local/www/diag_arp.php:314
+#: usr/local/www/diag_logs_vpn.php:178
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:747
+#: usr/local/www/services_captiveportal.php:769
+#: usr/local/www/services_captiveportal.php:788
+#: usr/local/www/services_captiveportal_ip.php:119
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+#: usr/local/www/services_dhcp.php:1248
+#: usr/local/www/services_dhcp_edit.php:394
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:76
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dnsmasq_edit.php:230
+#: usr/local/www/services_unbound_domainoverride_edit.php:71
+#: usr/local/www/services_unbound_domainoverride_edit.php:137
+#: usr/local/www/services_unbound_host_edit.php:87
+#: usr/local/www/services_unbound_host_edit.php:232
+#: usr/local/www/status_captiveportal.php:157
+#: usr/local/www/status_dhcp_leases.php:331
+#: usr/local/www/system_advanced_network.php:233
+#: usr/local/www/vpn_ipsec_phase2.php:823 usr/local/www/vpn_l2tp_users.php:104
+#: usr/local/www/vpn_l2tp_users_edit.php:174
+#: usr/local/www/vpn_pptp_users.php:101
+#: usr/local/www/vpn_pptp_users_edit.php:165
+msgid "IP address"
+msgstr ""
+
+#: etc/inc/ipsec.inc:47 etc/inc/ipsec.inc:56
+#: usr/local/www/system_camanager.php:503
+#: usr/local/www/system_certmanager.php:748
+#: usr/local/www/system_certmanager.php:900
+msgid "Distinguished name"
+msgstr ""
+
+#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:57
+msgid "User distinguished name"
+msgstr ""
+
+#: etc/inc/ipsec.inc:49 etc/inc/ipsec.inc:58
+msgid "ASN.1 distinguished Name"
+msgstr ""
+
+#: etc/inc/ipsec.inc:50 etc/inc/ipsec.inc:59
+msgid "KeyID tag"
+msgstr ""
+
+#: etc/inc/ipsec.inc:51 usr/local/www/fbegin.inc:147
+#: usr/local/www/services_dhcp.php:1041
+#: usr/local/www/services_dhcp_edit.php:496
+#: usr/local/www/services_dhcpv6.php:697
+msgid "Dynamic DNS"
+msgstr ""
+
+#: etc/inc/ipsec.inc:54
+msgid "Peer IP address"
+msgstr ""
+
+#: etc/inc/ipsec.inc:302 usr/local/www/vpn_ipsec.php:343
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase2.php:360
+msgid "Mobile Client"
+msgstr ""
+
+#: etc/inc/ipsec.inc:305 usr/local/www/diag_system_pftop.php:153
+#: usr/local/www/firewall_nat_edit.php:818
+#: usr/local/www/firewall_nat_edit.php:849 usr/local/www/interfaces.php:1411
+#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1798
+#: usr/local/www/interfaces.php:1904
+#: usr/local/www/interfaces_bridge_edit.php:449
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/vpn_ipsec_phase2.php:629
+msgid "None"
+msgstr ""
+
+#: etc/inc/ipsec.inc:598
+msgid ""
+"Unable to find IPsec daemon leases file. Could not display mobile user stats!"
+msgstr ""
+
+#: etc/inc/meta.inc:68
+#, php-format
+msgid "list_phpfiles: unable to examine path %s\n"
+msgstr ""
+
+#: etc/inc/meta.inc:99
+#, php-format
+msgid "unable to read %s\n"
+msgstr ""
+
+#: etc/inc/meta.inc:132
+#, php-format
+msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s"
+msgstr ""
+
+#: etc/inc/meta.inc:143
+#, php-format
+msgid "warning: tag %1$s has no data in '%2$s'%3$s"
+msgstr ""
+
+#: etc/inc/meta.inc:163
+#, php-format
+msgid "warning: tag %1$s has malformed data in '%2$s'%3$s"
+msgstr ""
+
+#: etc/inc/meta.inc:185
+#, php-format
+msgid "warning: tag %1$s has invalid data in '%2$s'%3$s"
+msgstr ""
+
+#: etc/inc/notices.inc:76
+#, php-format
+msgid "Could not open %s for writing"
+msgstr ""
+
+#: etc/inc/notices.inc:337
+#, php-format
+msgid "Message sent to %s OK"
+msgstr ""
+
+#: etc/inc/notices.inc:340 etc/inc/notices.inc:341
+#, php-format
+msgid "Could not send the message to %1$s -- Error: %2$s"
+msgstr ""
+
+#: etc/inc/openvpn.inc:101 etc/inc/openvpn.inc:109
+msgid "Peer to Peer ( SSL/TLS )"
+msgstr ""
+
+#: etc/inc/openvpn.inc:102 etc/inc/openvpn.inc:110
+msgid "Peer to Peer ( Shared Key )"
+msgstr ""
+
+#: etc/inc/openvpn.inc:103
+msgid "Remote Access ( SSL/TLS )"
+msgstr ""
+
+#: etc/inc/openvpn.inc:104
+msgid "Remote Access ( User Auth )"
+msgstr ""
+
+#: etc/inc/openvpn.inc:105
+msgid "Remote Access ( SSL/TLS + User Auth )"
+msgstr ""
+
+#: etc/inc/openvpn.inc:114
+msgid "No Preference"
+msgstr ""
+
+#: etc/inc/openvpn.inc:115
+msgid "Disabled - No Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:116
+msgid "Enabled with Adaptive Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:117
+msgid "Enabled without Adaptive Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:223
+msgid "None (No Encryption)"
+msgstr ""
+
+#: etc/inc/openvpn.inc:237
+msgid "None (No Authentication)"
+msgstr ""
+
+#: etc/inc/openvpn.inc:280
+#, php-format
+msgid "The field '%s' must contain a valid IP address or domain name."
+msgstr ""
+
+#: etc/inc/openvpn.inc:287
+#, php-format
+msgid "The field '%s' must contain a valid port, ranging from 0 to 65535."
+msgstr ""
+
+#: etc/inc/openvpn.inc:299
+#, php-format
+msgid "The field '%s' must contain a single valid %s CIDR range."
+msgstr ""
+
+#: etc/inc/openvpn.inc:311
+#, php-format
+msgid ""
+"The field '%s' must contain only valid %s CIDR range(s) separated by commas."
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:380
+msgid "MASTER"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:382
+msgid "BACKUP"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:384
+msgid "INIT"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:452
+msgid "After synch increase advertising skew"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:497
+msgid "Error creating socket!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:498
+#, php-format
+msgid "Error code is '%1$s' - %2$s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:503
+#, php-format
+msgid "setsockopt() failed, error: %s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:506
+#, php-format
+msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:568 etc/inc/pfsense-utils.inc:590
+#, php-format
+msgid "Restored %s of config file (maybe from CARP partner)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:751
+#, php-format
+msgid "XMLRPC communication error: %s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:754
+#, php-format
+msgid "XMLRPC request failed with error %1$s: %2$s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:854
+msgid "reload_interfaces_sync() is starting."
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:862
+msgid "Enabling system routing"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:865
+msgid "Cleaning up Interfaces"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1213
+msgid "No history data found!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1336
+msgid "device not present! Is the modem attached to the system?"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1403
+msgid "running"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1404 usr/local/www/graph.php:207
+msgid "up"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1447
+msgid "blocking"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1447
+msgid "check for ethernet loops"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1450
+msgid "learning"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1453
+msgid "forwarding"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1586
+#, php-format
+msgid "DNSCACHE: Found old IP %1$s and new IP %2$s"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1960
+msgid ""
+"Alias archive is a .zip file which cannot be decompressed because utility is "
+"missing!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1992
+msgid ""
+"Alias archive is a .tar/tgz file which cannot be decompressed because "
+"utility is missing!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2659 etc/inc/pfsense-utils.inc:2701
+msgid "English"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2660 etc/inc/pfsense-utils.inc:2713
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2661 etc/inc/pfsense-utils.inc:2718
+msgid "Turkish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2695
+msgid "Albanian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2696
+msgid "Bulgarian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2697
+msgid "Chinese (Simplified)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2698
+msgid "Chinese (Traditional)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2699
+msgid "Dutch"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2700
+msgid "Danish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2702
+msgid "Finnish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2703
+msgid "French"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2704
+msgid "German"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2705
+msgid "Greek"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2706
+msgid "Hungarian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2707
+msgid "Italian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2708
+msgid "Japanese"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2709
+msgid "Korean"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2710
+msgid "Latvian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2711
+msgid "Norwegian (Bokmal)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2712
+msgid "Polish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2714
+msgid "Portuguese (Portugal)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2715
+msgid "Romanian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2716
+msgid "Russian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2717
+msgid "Slovenian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2719
+msgid "Spanish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2720
+msgid "Swedish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2721
+msgid "Slovak"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2722
+msgid "Czech"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:219
+msgid "Resyncing configuration for all packages."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:239
+msgid "Syncing packages:"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:281
+#, php-format
+msgid ""
+"The %1$s package is missing required dependencies and must be reinstalled. "
+"%2$s"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:306 etc/inc/pkg-utils.inc:432
+#, php-format
+msgid ""
+"The %s package is missing required dependencies and must be reinstalled."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:399
+#, php-format
+msgid ""
+"The %s package is missing its configuration file and must be reinstalled."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:628 etc/inc/pkg-utils.inc:629
+#, php-format
+msgid "Package %s is not supported on this version."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:636 usr/local/www/pkg_mgr_install.php:170
+msgid "Beginning package installation."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:637 etc/inc/pkg-utils.inc:638
+#, php-format
+msgid "Beginning package installation for %s ."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:646
+msgid "Saving updated package information..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:650
+#, php-format
+msgid "Installed %s package."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:654
+#, php-format
+msgid "Overwrote previous installation of %s."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:655
+msgid "overwrite!"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:667
+#, php-format
+msgid "Failed to install package: %s."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:668
+msgid "Failed to install package."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:672
+msgid "Writing configuration... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:675
+#, php-format
+msgid "Successfully installed package: %s."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:709
+#, php-format
+msgid "The %s package is not installed.%sInstallation aborted."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:724
+msgid "Installing"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:724
+msgid "and its dependencies."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:725
+msgid "Downloading"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:725
+msgid "and its dependencies... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:737
+msgid "Package WAS NOT installed properly."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:751 etc/inc/pkg-utils.inc:1491
+msgid "Loading package configuration... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:756
+msgid "Configuring package components...\n"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:762 etc/inc/pkg-utils.inc:1077
+msgid "System files... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:1053
+msgid "Loading package instructions..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:796
+msgid "Custom commands..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:800
+msgid "Executing custom_php_global_functions()..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:807
+msgid "Executing custom_php_install_command()..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:836
+msgid "Executing custom_php_resync_config_command()..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:1000
+msgid "Menu items... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:861
+msgid "Integrated Tab items... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:1017
+msgid "Services... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:892
+msgid "Loading package configuration... failed!"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:892
+msgid "Installation aborted."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:894
+msgid "Unable to load package configuration. Installation aborted."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:939
+#, php-format
+msgid "Starting package deletion for %s..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:959
+#, php-format
+msgid "The %s package is not installed.%sDeletion aborted."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:970
+#, php-format
+msgid "Removing %s package... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:971
+#, php-format
+msgid "Removing %s components..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:983
+msgid "Tabs items... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1087
+msgid "Deinstall commands... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1097
+msgid "Removing package instructions..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1099
+#, php-format
+msgid "Remove '%s'"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1106
+msgid "Auxiliary files... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1120
+msgid "Package XML... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1139
+msgid "Configuration... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1222
+msgid "One moment please, reinstalling packages...\n"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1223
+msgid " >>> Trying to fetch package info..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1224
+msgid "Attempting to reinstall all packages"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1230
+#, php-format
+msgid ""
+" >>> Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1232
+msgid "Cannot reinstall packages: "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1241
+msgid "List of packages to reinstall: "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1248
+msgid "Uninstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1250
+msgid "Finished uninstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1251
+msgid "Reinstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1253
+msgid "Finished installing package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1256
+msgid "Finished reinstalling all packages."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1432
+msgid "Package Manager Settings"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1451
+msgid "Downloading package configuration file... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1453
+msgid "Downloading package configuration file..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1457
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting installation."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1459
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting package "
+"installation."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1461
+msgid ""
+"failed!\n"
+"\n"
+"Installation aborted.\n"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1498
+msgid "Additional files... "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1524
+msgid "Extracting tarball to -C for "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1530
+#, php-format
+msgid "Changing file mode to %1$s for %2$s%3$s%4$s"
+msgstr ""
+
+#: etc/inc/priv/user.priv.inc:6
+msgid "User - Services - Captive portal login"
+msgstr ""
+
+#: etc/inc/priv/user.priv.inc:7
+msgid "Indicates whether the user is able to login on the captive portal."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:10
+msgid "WebCfg - All pages"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:11
+msgid "Allow access to all pages"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:16
+msgid "WebCfg - Status: CARP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:17
+msgid "Allow access to the 'Status: CARP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:22
+msgid "WebCfg - Crash reporter"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:23
+msgid "Uploads crash reports to pfSense and or deletes crash reports."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:28
+msgid "WebCfg - Diagnostics: ARP Table page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:29
+msgid "Allow access to the 'Diagnostics: ARP Table' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:34
+msgid "WebCfg - Diagnostics: Authentication page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:35
+msgid "Allow access to the 'Diagnostics: Authentication' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:40
+msgid "WebCfg - Diagnostics: Backup/restore page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:41
+msgid "Allow access to the 'Diagnostics: Backup/restore' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:46
+msgid "WebCfg - Diagnostics: Configuration History page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:47
+msgid "Allow access to the 'Diagnostics: Configuration History' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:52
+msgid "WebCfg - Diagnostics: Factory defaults page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:53
+msgid "Allow access to the 'Diagnostics: Factory defaults' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:58
+msgid "Webcfg - Diagnostics: NDP Table page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:59
+msgid "Allow access to the 'Diagnostics: NDP Table' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:64
+msgid "Webcfg - Diagnostics: Restore full backup"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:65
+msgid "Allow access to the 'Diagnostics: Restore Full Backup' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:70
+msgid "WebCfg - Diagnostics: Show States page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:71
+msgid "Allow access to the 'Diagnostics: Show States' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:76
+msgid "WebCfg - Diagnostics: Sockets page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:77
+msgid "Allow access to the 'Diagnostics: Sockets' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:82
+msgid "Webcfg - Diagnostics: Test Port"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:83
+msgid "Allow access to the 'Diagnostics: Test Port' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:88
+msgid "WebCfg - Status: IPsec page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:89
+msgid "Allow access to the 'Status: IPsec' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:94
+msgid "WebCfg - Status: IPsec: Leasespage"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:95
+msgid "Allow access to the 'Status: IPsec: Leases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:100
+msgid "WebCfg - Status: IPsec: SAD page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:101
+msgid "Allow access to the 'Status: IPsec: SAD' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:106
+msgid "WebCfg - Status: IPsec: SPD page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:107
+msgid "Allow access to the 'Status: IPsec: SPD' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:112
+msgid "Webcfg - Status: NTP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:113
+msgid "Allow access to the 'Status: NTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:118
+msgid "WebCfg - Diag IPsec XML page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:119
+msgid "Allow access to the 'Diag IPsec XML' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:124
+msgid "WebCfg - Diagnostics: Logs: System page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:125
+msgid "Allow access to the 'Diagnostics: Logs: System' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:130
+msgid "WebCfg - Status: System logs: Portal Auth page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Status: System logs: Portal Auth' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:136
+msgid "WebCfg - Diagnostics: Logs: DHCP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:137
+msgid "Allow access to the 'Diagnostics: Logs: DHCP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:142
+msgid "WebCfg - Diagnostics: Logs: Firewall page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:143
+msgid "Allow access to the 'Diagnostics: Logs: Firewall' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:148
+msgid "WebCfg - Diagnostics: Logs: Gateways page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:149
+msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:154
+msgid "WebCfg - Diagnostics: Logs: Resolver page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:155
+msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:160
+msgid "WebCfg - Hidden: No longer included page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:161
+msgid "Allow access to the 'Hidden: No longer included' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184
+msgid "WebCfg - Status: System logs: IPsec VPN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185
+msgid "Allow access to the 'Status: System logs: IPsec VPN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:172
+msgid "WebCfg - Status: System logs: NTP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:173
+msgid "Allow access to the 'Status: System logs: NTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:178
+msgid "WebCfg - Status: System logs: OpenVPN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:179
+msgid "Allow access to the 'Status: System logs: OpenVPN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:190
+msgid "WebCfg - Status: System logs: Load Balancer page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:191
+msgid "Allow access to the 'Status: System logs: Load Balancer' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:196
+msgid "Webcfg - Status: System logs: Routing page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:197
+msgid "Allow access to the 'Status: System logs: System: Routing' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:202
+msgid "Webcfg - Status: System logs: Wireless page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:203
+msgid "Allow access to the 'Status: System logs: System: Wireless' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:208
+msgid "WebCfg - Diagnostics: Logs: Settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:209
+msgid "Allow access to the 'Diagnostics: Logs: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:214
+msgid "WebCfg - Diagnostics: Logs: VPN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:215
+msgid "Allow access to the 'Diagnostics: Logs: VPN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:220
+msgid "WebCfg - Diagnostics: NanoBSD"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:221
+msgid "Allow access to the 'Diagnostics: NanoBSD' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:226
+msgid "WebCfg - Diagnostics: Packet Capture page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:227
+msgid "Allow access to the 'Diagnostics: Packet Capture' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:232
+msgid "WebCfg - Diagnostics: Patterns page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:233
+msgid "Allow access to the 'Diagnostics: Patterns' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:238 usr/local/www/diag_limiter_info.php:45
+msgid "Diagnostics: Limiter Info"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:239
+msgid "Allows access to the 'Diagnostics: Limiter Info' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:244 usr/local/www/diag_pf_info.php:45
+msgid "Diagnostics: pfInfo"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:245
+msgid "Allows access to the 'Diagnostics: pfInfo' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:250
+msgid "WebCfg - Diagnostics: System Activity"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:251
+msgid "Allows access to the 'Diagnostics: System Activity' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:256 usr/local/www/diag_system_pftop.php:44
+msgid "Diagnostics: pfTop"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:257
+msgid "Allows access to the 'Diagnostics: pfTop' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:262
+msgid "WebCfg - Diagnostics: Ping page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:263
+msgid "Allow access to the 'Diagnostics: Ping' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:268
+msgid "WebCfg - Status: Package logs page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:269
+msgid "Allow access to the 'Status: Package logs' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:274
+msgid "WebCfg - Diagnostics: Reset state page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:275
+msgid "Allow access to the 'Diagnostics: Reset state' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:280
+msgid "WebCfg - Diagnostics: Routing tables page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:281
+msgid "Allow access to the 'Diagnostics: Routing tables' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:286
+msgid "WebCfg - Diagnostics: States Summary page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:287
+msgid "Allow access to the 'Diagnostics: States Summary' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:292
+msgid "WebCfg - Diagnostics: PF Table IP addresses"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:293
+msgid "Allow access to the 'Diagnostics: Tables' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:298
+msgid "WebCfg - Diagnostics: Traceroute page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:299
+msgid "Allow access to the 'Diagnostics: Traceroute' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:304
+msgid "WebCfg - Diagnostics: Edit FIle"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:305
+msgid "Allow access to the 'Diagnostics: Edit File' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:312
+msgid "WebCfg - Diagnostics: Command page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:313
+msgid "Allow access to the 'Diagnostics: Command' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:318
+msgid "WebCfg - Firewall: Aliases page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:319
+msgid "Allow access to the 'Firewall: Aliases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:324
+msgid "WebCfg - Firewall: Alias: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:325
+msgid "Allow access to the 'Firewall: Alias: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:330
+msgid "WebCfg - Firewall: Alias: Import page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:331
+msgid "Allow access to the 'Firewall: Alias: Import' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:336
+msgid "Webcfg - Firewall: NAT: NPT page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:337
+msgid "Allow access to the 'Firewall: NAT: NPT' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:342
+msgid "Webcfg - Firewall: NAT: NPt: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:343
+msgid "Allow access to the 'Firewall: NAT: NPt: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:348
+msgid "WebCfg - Firewall: NAT: Port Forward page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:349
+msgid "Allow access to the 'Firewall: NAT: Port Forward' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:354
+msgid "WebCfg - Firewall: NAT: 1:1 page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:355
+msgid "Allow access to the 'Firewall: NAT: 1:1' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:360
+msgid "WebCfg - Firewall: NAT: 1:1: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:361
+msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:366
+msgid "WebCfg - Firewall: NAT: Port Forward: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:367
+msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:372
+msgid "WebCfg - Firewall: NAT: Outbound page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:373
+msgid "Allow access to the 'Firewall: NAT: Outbound' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:378
+msgid "WebCfg - Firewall: NAT: Outbound: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:379
+msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:384
+msgid "WebCfg - Firewall: Rules page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:385
+msgid "Allow access to the 'Firewall: Rules' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:390
+msgid "WebCfg - Firewall: Rules: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:391
+msgid "Allow access to the 'Firewall: Rules: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:396
+msgid "WebCfg - Firewall: Schedules page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:397
+msgid "Allow access to the 'Firewall: Schedules' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:402
+msgid "WebCfg - Firewall: Schedules: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:403
+msgid "Allow access to the 'Firewall: Schedules: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:408
+msgid "WebCfg - Firewall: Traffic Shaper page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:409
+msgid "Allow access to the 'Firewall: Traffic Shaper' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:414
+msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:415
+msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:420
+msgid "WebCfg - Firewall: Traffic Shaper: Queues page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:421
+msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:426
+msgid "WebCfg - Firewall: Traffic Shaper: Limiter page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:427
+msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:432
+msgid "WebCfg - Firewall: Traffic Shaper: Wizard page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:433
+msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:438
+msgid "WebCfg - Firewall: Virtual IP Addresses page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:439
+msgid "Allow access to the 'Firewall: Virtual IP Addresses' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:444
+msgid "WebCfg - Firewall: Virtual IP Address: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:445
+msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:450
+msgid "WebCfg - AJAX: Get Service Providers"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:451
+msgid "Allow access to the 'AJAX: Service Providers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:456
+msgid "WebCfg - AJAX: Get Stats"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:457
+msgid "Allow access to the 'AJAX: Get Stats' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:462
+msgid "WebCfg - Diagnostics: Interface Traffic page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:463
+msgid "Allow access to the 'Diagnostics: Interface Traffic' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:468 etc/inc/priv.defs.inc:972
+msgid "WebCfg - Diagnostics: CPU Utilization page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:469 etc/inc/priv.defs.inc:973
+msgid "Allow access to the 'Diagnostics: CPU Utilization' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:474
+msgid "WebCfg - Diagnostics: Halt system page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:475
+msgid "Allow access to the 'Diagnostics: Halt system' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:480
+msgid "WebCfg - Required for javascript page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:481
+msgid "Allow access to the 'Required for javascript' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:486
+msgid "WebCfg - XMLRPC Interface Stats page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:487
+msgid "Allow access to the 'XMLRPC Interface Stats' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:492
+msgid "WebCfg - System: Login / Logout page / Dashboard"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:493
+msgid "Allow access to the 'System: Login / Logout' page and Dashboard."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:498
+msgid "WebCfg - Interfaces: WAN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:499
+msgid "Allow access to the 'Interfaces' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:504
+msgid "WebCfg - Interfaces: Assign network ports page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:505
+msgid "Allow access to the 'Interfaces: Assign network ports' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:510
+msgid "WebCfg - Interfaces: Bridge page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:511
+msgid "Allow access to the 'Interfaces: Bridge' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:516
+msgid "WebCfg - Interfaces: Bridge edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:517
+msgid "Allow access to the 'Interfaces: Bridge : Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:522
+msgid "WebCfg - Interfaces: GIF page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:523
+msgid "Allow access to the 'Interfaces: GIF' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:528
+msgid "WebCfg - Interfaces: GIF: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:529
+msgid "Allow access to the 'Interfaces: GIF: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:534
+msgid "WebCfg - Interfaces: GRE page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:535
+msgid "Allow access to the 'Interfaces: GRE' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:540
+msgid "WebCfg - Interfaces: GRE: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:541
+msgid "Allow access to the 'Interfaces: GRE: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:546
+msgid "WebCfg - Interfaces: Groups page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:547
+msgid "Create interface groups"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:552
+msgid "Interfaces: Groups: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:553
+msgid "Allow access to the 'Interfaces: Groups: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:558
+msgid "WebCfg - Interfaces: LAGG: page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:559
+msgid "Edit Interface LAGG"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:564
+msgid "Interfaces: LAGG: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:565
+msgid "Allow access to the 'Interfaces: LAGG: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:570
+msgid "WebCfg - Interfaces: ppps page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:571
+msgid "Allow access to the 'Interfaces: ppps' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:576
+msgid "WebCfg - Interfaces: PPPs: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:577
+msgid "Allow access to the 'Interfaces: PPPs: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:582
+msgid "WebCfg - Interfaces: QinQ page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:583
+msgid "Allow access to the 'Interfaces: QinQ' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:588
+msgid "Interfaces: QinQ: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:589
+msgid "Allow access to 'Interfaces: QinQ: Edit' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:594
+msgid "WebCfg - Interfaces: VLAN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:595
+msgid "Allow access to the 'Interfaces: VLAN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:600
+msgid "WebCfg - Interfaces: VLAN: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:601
+msgid "Allow access to the 'Interfaces: VLAN: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:606
+msgid "WebCfg - Interfaces: Wireless page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:607
+msgid "Allow access to the 'Interfaces: Wireless' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:612
+msgid "WebCfg - Interfaces: Wireless edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:613
+msgid "Allow access to the 'Interfaces: Wireless : Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:618
+msgid "WebCfg - System: License page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:619
+msgid "Allow access to the 'System: License' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:624
+msgid "WebCfg - Services: Load Balancer: Monitors page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:625
+msgid "Allow access to the 'Services: Load Balancer: Monitors' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:630
+msgid "WebCfg - Services: Load Balancer: Monitor: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:631
+msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:636
+msgid "WebCfg - Load Balancer: Pool page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:637
+msgid "Allow access to the 'Load Balancer: Pool' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:642
+msgid "WebCfg - Load Balancer: Pool: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:643
+msgid "Allow access to the 'Load Balancer: Pool: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:648
+msgid "WebCfg - Services: Load Balancer: Relay Actions page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:649
+msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:654
+msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:655
+msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:660
+msgid "WebCfg - Services: Load Balancer: Relay Protocols page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:661
+msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:666
+msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:667
+msgid ""
+"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:672
+msgid "Webcfg - Services: Load Balancer: setting page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:673
+msgid "Allow access to the 'Settings: Load Balancer: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:678
+msgid "WebCfg - Services: Load Balancer: Virtual Servers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:679
+msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:684
+msgid "Webcfg - Services: NTP"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:685
+msgid "Allow access to the 'Services: NTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:690
+msgid "Webcfg - Status: NTP GPS page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:691
+msgid "Allow access to the 'Status: NTP Serial GPS' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:696
+msgid "Webcfg - Status: NTP PPS page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:697
+msgid "Allow access to the 'Status: NTP PPS' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:702
+msgid "WebCfg - Load Balancer: Virtual Server: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:703
+msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:708
+msgid "WebCfg - Package: Settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:709
+msgid "Allow access to the 'Package: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:714
+msgid "WebCfg - Package: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:715
+msgid "Allow access to the 'Package: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:720
+msgid "WebCfg - System: Package Manager page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:721
+msgid "Allow access to the 'System: Package Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:726
+msgid "WebCfg - System: Package Manager: Install Package page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:727
+msgid "Allow access to the 'System: Package Manager: Install Package' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:732
+msgid "WebCfg - System: Package Manager: Installed page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:733
+msgid "Allow access to the 'System: Package Manager: Installed' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:738
+msgid "WebCfg - Packages: Settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:739
+msgid "Allow access to the 'Packages: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:744
+msgid "WebCfg - Diagnostics: Reboot System page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:745
+msgid "Allow access to the 'Diagnostics: Reboot System' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:750
+msgid "WebCfg - Diagnostics: Restart HTTPD : System page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:751
+msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:756
+msgid "WebCfg - Services: Captive portal page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:757
+msgid "Allow access to the 'Services: Captive portal' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:762
+msgid "WebCfg - Services: Captive portal: File Manager page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:763
+msgid "Allow access to the 'Services: Captive portal: File Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:768
+msgid "WebCfg - Services: Captive portal: Allowed IPs page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:769
+msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:774
+msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:775
+msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:780
+msgid "WebCfg - Services: Captive portal: Mac Addresses page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:781
+msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:786
+msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:787
+msgid ""
+"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:792
+msgid "WebCfg - Services: Captive portal: Allowed Hostnames page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:793 etc/inc/priv.defs.inc:799
+msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:798
+msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:804
+msgid "Webcfg - Services: Captive portal: Edit Zones page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:805
+msgid "Allow access to the 'Services: Captive portal: Edit Zones' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:810
+msgid "WebCfg - Services: Captive portal Vouchers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:811
+msgid "Allow access to the 'Services: Captive portal Vouchers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:822
+msgid "WebCfg - Services: Captiveprotal Zones page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:823
+msgid "Allow access to the 'Services: CaptivePortal Zones' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:828
+msgid "WebCfg - Services: DHCP server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:829
+msgid "Allow access to the 'Services: DHCP server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:834
+msgid "WebCfg - Services: DHCP Server : Edit static mapping page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:835
+msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:840
+msgid "WebCfg - Services: DHCP Relay page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:841
+msgid "Allow access to the 'Services: DHCP Relay' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:846
+msgid "Webcfg - Services: DHCPv6 server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:847
+msgid "Allow access to the 'Services: DHCPv6 server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:852
+msgid "Webcfg - Services: DHCPv6 Server : Edit static mapping page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:853
+msgid ""
+"Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:858
+msgid "Webcfg - Services: DHCPv6 Relay page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:859
+msgid "Allow access to the 'Services: DHCPv6 Relay' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:864
+msgid "WebCfg - Services: DNS Forwarder page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:865
+msgid "Allow access to the 'Services: DNS Forwarder' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:870
+msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:871
+msgid ""
+"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:876
+msgid "WebCfg - Services: DNS Forwarder: Edit host page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:877
+msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:882
+msgid "WebCfg - Services: DNS Resolver page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:883
+msgid "Allow access to the 'Services: DNS Resolver' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:888
+msgid "WebCfg - Services: DNS Resolver: Advanced page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:889
+msgid "Allow access to the 'Services: DNS Resolver: Advanced' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:894
+msgid "WebCfg - Services: DNS Resolver: Access Lists page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:895
+msgid "Allow access to the 'Services: DNS Resolver: Access Lists' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:900
+msgid "WebCfg - Services: DNS Resolver: Access Lists: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:901
+msgid "Allow access to the 'Services: DNS Resolver: Access Lists: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:906
+msgid "WebCfg - Services: DNS Resolver: Edit Domain Override page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:907
+msgid ""
+"Allow access to the 'Services: DNS Resolver: Edit Domain Override' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:912
+msgid "WebCfg - Services: DNS Resolver: Edit host page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:913
+msgid "Allow access to the 'Services: DNS Resolver: Edit host' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:918
+msgid "WebCfg - Services: Dynamic DNS clients page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:919
+msgid "Allow access to the 'Services: Dynamic DNS clients' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:924
+msgid "WebCfg - Services: Dynamic DNS client page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:925
+msgid "Allow access to the 'Services: Dynamic DNS client' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:930
+msgid "WebCfg - Services: Igmpproxy page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:931
+msgid "Allow access to the 'Services: Igmpproxy' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:936
+msgid "Firewall: Igmpproxy: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:937
+msgid "Allow access to the 'Services: Igmpproxy: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:942
+msgid "WebCfg - Services: RFC 2136 clients page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:943
+msgid "Allow access to the 'Services: RFC 2136 clients' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:948
+msgid "Webcfg - Services: Router advertisementspage"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:949
+msgid "Allow access to the 'Services: Router Advertisements' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:954
+msgid "WebCfg - Services: SNMP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:955
+msgid "Allow access to the 'Services: SNMP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:960
+msgid "WebCfg - Services: Wake on LAN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:961
+msgid "Allow access to the 'Services: Wake on LAN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:966
+msgid "WebCfg - Services: Wake on LAN: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:967
+msgid "Allow access to the 'Services: Wake on LAN: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:978
+msgid "WebCfg - Hidden: Detailed Status page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:979
+msgid "Allow access to the 'Hidden: Detailed Status' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:984
+msgid "WebCfg - Status: Captive portal page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:985
+msgid "Allow access to the 'Status: Captive portal' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:990
+msgid "Webcfg - Status: Captive portal Expire Vouchers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:991
+msgid "Allow access to the 'Status: Captive portal Expire Vouchers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:996
+msgid "WebCfg - Status: Captive portal test Vouchers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:997
+msgid "Allow access to the 'Status: Captive portal Test Vouchers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1002
+msgid "WebCfg - Status: Captive portal Voucher Rolls page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1003
+msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1008
+msgid "WebCfg - Status: Captive portal Vouchers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1009
+msgid "Allow access to the 'Status: Captive portal Vouchers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1014
+msgid "WebCfg - Status: DHCP leases page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1015
+msgid "Allow access to the 'Status: DHCP leases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1020
+msgid "Webcfg - Status: DHCPv6 leases page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1021
+msgid "Allow access to the 'Status: DHCPv6 leases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1026
+msgid "WebCfg - Status: Filter Reload Status page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1027
+msgid "Allow access to the 'Status: Filter Reload Status' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1032
+msgid "WebCfg - Status: Gateway Groups page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1033
+msgid "Allow access to the 'Status: Gateway Groups' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1038
+msgid "WebCfg - Status: Gateways page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1039
+msgid "Allow access to the 'Status: Gateways' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1044
+msgid "WebCfg - Status: Traffic Graph page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1045
+msgid "Allow access to the 'Status: Traffic Graph' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1053
+msgid "WebCfg - Status: CPU load page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1054
+msgid "Allow access to the 'Status: CPU load' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1059
+msgid "WebCfg - Status: Interfaces page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1060
+msgid "Allow access to the 'Status: Interfaces' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1065
+msgid "WebCfg - Status: Load Balancer: Pool page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1066
+msgid "Allow access to the 'Status: Load Balancer: Pool' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1071
+msgid "WebCfg - Status: Load Balancer: Virtual Server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1072
+msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1077
+msgid "WebCfg - Status: OpenVPN page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1078
+msgid "Allow access to the 'Status: OpenVPN' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1083
+msgid "WebCfg - Status: Traffic shaper: Queues page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1084
+msgid "Allow access to the 'Status: Traffic shaper: Queues' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1089
+msgid "WebCfg - Status: RRD Graphs page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1090
+msgid "Allow access to the 'Status: RRD Graphs' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1096
+msgid "WebCfg - Status: RRD Graphs settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1097
+msgid "Allow access to the 'Status: RRD Graphs: settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1102
+msgid "WebCfg - Status: Services page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1103
+msgid "Allow access to the 'Status: Services' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1108
+msgid "WebCfg - Status: UPnP Status page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1109
+msgid "Allow access to the 'Status: UPnP Status' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1114
+msgid "WebCfg - Status: Wireless page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1115
+msgid "Allow access to the 'Status: Wireless' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1120
+msgid "WebCfg - System: General Setup page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1121
+msgid "Allow access to the 'System: General Setup' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1126
+msgid "WebCfg - System: Advanced: Admin Access Page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1127
+msgid "Allow access to the 'System: Advanced: Admin Access' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1132
+msgid "WebCfg - System: Advanced: Firewall and NAT page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1133
+msgid "Allow access to the 'System: Advanced: Firewall and NAT' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1138
+msgid "WebCfg - System: Advanced: Miscellaneous page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1139
+msgid "Allow access to the 'System: Advanced: Miscellaneous' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1144
+msgid "WebCfg - System: Advanced: Network page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1145
+msgid "Allow access to the 'System: Advanced: Networking' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1150
+msgid "WebCfg - System: Advanced: Notifications page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1151
+msgid "Allow access to the 'System: Advanced: Notifications' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1156
+msgid "WebCfg - System: Advanced: Tunables page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1157
+msgid "Allow access to the 'System: Advanced: Tunables' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1162
+msgid "WebCfg - System: Authentication Servers"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1163
+msgid "Allow access to the 'System: Authentication Servers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1168
+msgid "WebCfg - System: CA Manager"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1169
+msgid "Allow access to the 'System: CA Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1174
+msgid "WebCfg - System: Certificate Manager"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1175
+msgid "Allow access to the 'System: Certificate Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1180
+msgid "WebCfg - System: CRL Manager"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1181
+msgid "Allow access to the 'System: CRL Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1186
+msgid "WebCfg - System: Firmware: Manual Update page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1187
+msgid "Allow access to the 'System: Firmware: Manual Update' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1192
+msgid "WebCfg - System: Firmware: Check For Update page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1193
+msgid "Allow access to the 'System: Firmware: Check For Update' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1198
+msgid "WebCfg - System: Firmware: Auto Update page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1199
+msgid "Allow access to the 'System: Firmware: Auto Update' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1204
+msgid "WebCfg - System: Firmware: Settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1205
+msgid "Allow access to the 'System: Firmware: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1210
+msgid "WebCfg - System: Gateway Groups page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1211
+msgid "Allow access to the 'System: Gateway Groups' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1216
+msgid "WebCfg - System: Gateways: Edit Gateway Groups page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1217
+msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1222
+msgid "WebCfg - System: Gateways page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1223
+msgid "Allow access to the 'System: Gateways' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1228
+msgid "WebCfg - System: Gateways: Edit Gateway page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1229
+msgid "Allow access to the 'System: Gateways: Edit Gateway' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1234
+msgid "WebCfg - System: Group manager page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1235
+msgid "Allow access to the 'System: Group manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1240
+msgid "WebCfg - System: Group Manager: Add Privileges page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1241
+msgid "Allow access to the 'System: Group Manager: Add Privileges' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1246
+msgid "Webcfg - System: High Availability Sync"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1247
+msgid "Allow access to the 'System: High Availability Sync' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1252
+msgid "WebCfg - System: Static Routes page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1253
+msgid "Allow access to the 'System: Static Routes' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1258
+msgid "WebCfg - System: Static Routes: Edit route page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1259
+msgid "Allow access to the 'System: Static Routes: Edit route' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1264
+msgid "WebCfg - System: User Manager page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1265
+msgid "Allow access to the 'System: User Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1270
+msgid "WebCfg - System: User Manager: Add Privileges page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1271
+msgid "Allow access to the 'System: User Manager: Add Privileges' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1276
+msgid "WebCfg - System: User Password Manager page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1277
+msgid "Allow access to the 'System: User Password Manager' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1282
+msgid "WebCfg - System: User Manager: settings page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1283
+msgid "Allow access to the 'System: User Manager: settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1288
+msgid "WebCfg - System: User Manager: Settings: Test LDAP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1289
+msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1294
+msgid "WebCfg - System: Firmware: Manual Update page (progress bar)"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1295
+msgid ""
+"Allow access to the 'System: Firmware: Manual Update: Progress bar' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1300
+msgid "WebCfg - Hidden: Upload Configuration page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1301
+msgid "Allow access to the 'Hidden: Upload Configuration' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1306
+msgid "WebCfg - VPN: IPsec page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1307
+msgid "Allow access to the 'VPN: IPsec' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1312
+msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1313
+msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1318
+msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1319
+msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1324
+msgid "WebCfg - VPN: IPsec: Mobile page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1325
+msgid "Allow access to the 'VPN: IPsec: Mobile' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1330
+msgid "WebCfg - VPN: IPsec: Edit Phase 1 page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1331
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1336
+msgid "WebCfg - VPN: IPsec: Edit Phase 2 page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1337
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1342
+msgid "WebCfg - VPN: VPN L2TP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1343
+msgid "Allow access to the 'VPN: VPN L2TP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1348
+msgid "WebCfg - VPN: VPN L2TP : Users page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1349
+msgid "Allow access to the 'VPN: VPN L2TP : Users' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1354
+msgid "WebCfg - VPN: VPN L2TP : Users : Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1355
+msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1360
+msgid "WebCfg - OpenVPN: Client page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1361
+msgid "Allow access to the 'OpenVPN: Client' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1366
+msgid "WebCfg - OpenVPN: Client Specific Override page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1367
+msgid "Allow access to the 'OpenVPN: Client Specific Override' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1372
+msgid "WebCfg - OpenVPN: Server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1373
+msgid "Allow access to the 'OpenVPN: Server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1378
+msgid "WebCfg - Services: PPPoE Server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1379
+msgid "Allow access to the 'Services: PPPoE Server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1384
+msgid "WebCfg - Services: PPPoE Server: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1385
+msgid "Allow access to the 'Services: PPPoE Server: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1390
+msgid "WebCfg - VPN: VPN PPTP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1391
+msgid "Allow access to the 'VPN: VPN PPTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1396
+msgid "WebCfg - VPN: VPN PPTP: Users page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1397
+msgid "Allow access to the 'VPN: VPN PPTP: Users' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1402
+msgid "WebCfg - VPN: VPN PPTP: User: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1403
+msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1408
+msgid "WebCfg - pfSense wizard subsystem page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1409
+msgid "Allow access to the 'pfSense wizard subsystem' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1414
+msgid "WebCfg - XMLRPC Library page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1415
+msgid "Allow access to the 'XMLRPC Library' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1420
+msgid "WebCfg - Firewall: Easy Rule add/status page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1421
+msgid "Allow access to the 'Firewall: Easy Rule' add/status page."
+msgstr ""
+
+#: etc/inc/radius.inc:406
+msgid "Error sending request:"
+msgstr ""
+
+#: etc/inc/radius.inc:412
+msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting"
+msgstr ""
+
+#: etc/inc/radius.inc:421
+msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication"
+msgstr ""
+
+#: etc/inc/radius.inc:426
+#, php-format
+msgid "Unexpected return value: %s"
+msgstr ""
+
+#: etc/inc/rrd.inc:44
+#, php-format
+msgid "RRD dump failed exited with %1$s, the error is: %2$s"
+msgstr ""
+
+#: etc/inc/rrd.inc:102
+#, php-format
+msgid "RRD create failed exited with %1$s, the error is: %2$s"
+msgstr ""
+
+#: etc/inc/rrd.inc:117
+#, php-format
+msgid ""
+"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has "
+"%3$s DS values and %4$s RRA databases"
+msgstr ""
+
+#: etc/inc/rrd.inc:201
+#, php-format
+msgid "The new RRD now has %1$s DS values and %2$s RRA databases"
+msgstr ""
+
+#: etc/inc/rrd.inc:209
+msgid "Generating RRD graphs..."
+msgstr ""
+
+#: etc/inc/rrd.inc:912
+msgid "Creating rrd update script"
+msgstr ""
+
+#: etc/inc/service-utils.inc:239
+msgid "Router Advertisement Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:246 usr/local/www/diag_backup.php:184
+#: usr/local/www/fbegin.inc:139
+msgid "DNS Forwarder"
+msgstr ""
+
+#: etc/inc/service-utils.inc:253
+msgid "Unbound DNS Resolver"
+msgstr ""
+
+#: etc/inc/service-utils.inc:259
+msgid "NTP clock sync"
+msgstr ""
+
+#: etc/inc/service-utils.inc:268 usr/local/www/diag_backup.php:182
+#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:173
+#: usr/local/www/services_captiveportal_zones.php:64
+#: usr/local/www/status_rrd_graph_settings.php:59
+#: usr/local/www/status_rrd_graph_settings.php:162
+msgid "Captive Portal"
+msgstr ""
+
+#: etc/inc/service-utils.inc:285 usr/local/www/fbegin.inc:141
+#: usr/local/www/services_dhcp_relay.php:102
+msgid "DHCP Relay"
+msgstr ""
+
+#: etc/inc/service-utils.inc:292 usr/local/www/fbegin.inc:142
+#: usr/local/www/services_dhcpv6_relay.php:103
+msgid "DHCPv6 Relay"
+msgstr ""
+
+#: etc/inc/service-utils.inc:299
+msgid "DHCP Service"
+msgstr ""
+
+#: etc/inc/service-utils.inc:307
+msgid "Gateway Monitoring Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:314
+msgid "SNMP Service"
+msgstr ""
+
+#: etc/inc/service-utils.inc:321 usr/local/www/fbegin.inc:148
+msgid "IGMP proxy"
+msgstr ""
+
+#: etc/inc/service-utils.inc:328
+msgid "UPnP Service"
+msgstr ""
+
+#: etc/inc/service-utils.inc:335
+msgid "RIP Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:342 usr/local/www/diag_logs_ipsec.php:61
+msgid "IPsec VPN"
+msgstr ""
+
+#: etc/inc/service-utils.inc:349
+msgid "Secure Shell Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:362 etc/inc/system.inc:2091
+#: usr/local/www/diag_backup.php:191 usr/local/www/diag_logs.php:86
+#: usr/local/www/diag_logs_auth.php:77 usr/local/www/diag_logs_dhcp.php:80
+#: usr/local/www/diag_logs_filter.php:143
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_filter_summary.php:197
+#: usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_ipsec.php:81 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs_openvpn.php:46
+#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77
+#: usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/diag_logs_resolver.php:88
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:275
+#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_packet_capture.php:110 usr/local/www/fbegin.inc:165
+#: usr/local/www/fbegin.inc:184 usr/local/www/license.php:143
+#: usr/local/www/status_graph.php:69 usr/local/www/status_openvpn.php:46
+#: usr/local/www/vpn_openvpn_client.php:41
+#: usr/local/www/vpn_openvpn_csc.php:41
+#: usr/local/www/vpn_openvpn_server.php:479
+msgid "OpenVPN"
+msgstr ""
+
+#: etc/inc/service-utils.inc:372
+msgid "Server load balancing daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:416
+msgid "Not available."
+msgstr ""
+
+#: etc/inc/service-utils.inc:449
+msgid "Running"
+msgstr ""
+
+#: etc/inc/service-utils.inc:450 etc/inc/service-utils.inc:458
+#, php-format
+msgid "%s Service is"
+msgstr ""
+
+#: etc/inc/service-utils.inc:457
+msgid "Stopped"
+msgstr ""
+
+#: etc/inc/service-utils.inc:457 usr/local/www/firewall_nat_1to1_edit.php:287
+#: usr/local/www/firewall_nat_edit.php:479
+#: usr/local/www/firewall_nat_npt_edit.php:165
+#: usr/local/www/firewall_nat_out_edit.php:453
+#: usr/local/www/firewall_rules_edit.php:856 usr/local/www/interfaces.php:2732
+#: usr/local/www/interfaces_ppps_edit.php:616
+#: usr/local/www/system_gateways_edit.php:647
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/system_usermanager.php:527
+#: usr/local/www/system_usermanager.php:906
+#: usr/local/www/vpn_ipsec_phase1.php:569
+#: usr/local/www/vpn_ipsec_phase2.php:552
+#: usr/local/www/vpn_openvpn_client.php:465
+#: usr/local/www/vpn_openvpn_client.php:1115
+#: usr/local/www/vpn_openvpn_csc.php:336 usr/local/www/vpn_openvpn_csc.php:746
+#: usr/local/www/vpn_openvpn_server.php:763
+#: usr/local/www/vpn_openvpn_server.php:1831
+msgid "Disabled"
+msgstr ""
+
+#: etc/inc/service-utils.inc:482
+#, php-format
+msgid "Restart %sService"
+msgstr ""
+
+#: etc/inc/service-utils.inc:493
+#, php-format
+msgid "Stop %sService"
+msgstr ""
+
+#: etc/inc/service-utils.inc:509
+#, php-format
+msgid "Start %sService"
+msgstr ""
+
+#: etc/inc/service-utils.inc:577
+#, php-format
+msgid "%s has been started."
+msgstr ""
+
+#: etc/inc/service-utils.inc:647
+#, php-format
+msgid "%s has been stopped."
+msgstr ""
+
+#: etc/inc/service-utils.inc:716
+#, php-format
+msgid "%s has been restarted."
+msgstr ""
+
+#: etc/inc/services.inc:378
+#, php-format
+msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr ""
+
+#: etc/inc/services.inc:404
+msgid "Starting DHCP service..."
+msgstr ""
+
+#: etc/inc/services.inc:487
+msgid "Warning! DHCP Failover setup and no CARP virtual IPs defined!"
+msgstr ""
+
+#: etc/inc/services.inc:896
+#, php-format
+msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"
+msgstr ""
+
+#: etc/inc/services.inc:1377
+msgid "Could not write Igmpproxy configuration file!"
+msgstr ""
+
+#: etc/inc/services.inc:1386
+msgid "Started IGMP proxy service."
+msgstr ""
+
+#: etc/inc/services.inc:1410
+msgid "Starting DHCP relay service..."
+msgstr ""
+
+#: etc/inc/services.inc:1532
+msgid "Starting DHCPv6 relay service..."
+msgstr ""
+
+#: etc/inc/services.inc:1673
+msgid "Starting DynDNS clients..."
+msgstr ""
+
+#: etc/inc/services.inc:1742
+msgid "Starting DNS forwarder..."
+msgstr ""
+
+#: etc/inc/services.inc:1896
+msgid "Starting DNS Resolver..."
+msgstr ""
+
+#: etc/inc/services.inc:1936
+msgid "Starting SNMP daemon... "
+msgstr ""
+
+#: etc/inc/services.inc:1941
+#, php-format
+msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s"
+msgstr ""
+
+#: etc/inc/services.inc:2285
+msgid "pfSense specific crontab entries"
+msgstr ""
+
+#: etc/inc/services.inc:2286
+msgid "Created:"
+msgstr ""
+
+#: etc/inc/services.inc:2307
+msgid "If possible do not add items to this file manually."
+msgstr ""
+
+#: etc/inc/services.inc:2308
+msgid ""
+"If you do so, this file must be terminated with a blank line (e.g. new line)"
+msgstr ""
+
+#: etc/inc/services.inc:2352
+msgid "Starting UPnP service... "
+msgstr ""
+
+#: etc/inc/services.inc:2389
+#, php-format
+msgid "Installed cron job for %s"
+msgstr ""
+
+#: etc/inc/services.inc:2392
+#, php-format
+msgid "Updated cron job for %s"
+msgstr ""
+
+#: etc/inc/services.inc:2397
+#, php-format
+msgid "Removed cron job for %s"
+msgstr ""
+
+#: etc/inc/shaper.inc:190
+#, php-format
+msgid "The field '%s' contains invalid characters."
+msgstr ""
+
+#: etc/inc/shaper.inc:196
+#, php-format
+msgid "The field '%s' is required."
+msgstr ""
+
+#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:680 etc/inc/shaper.inc:1599
+#: etc/inc/shaper.inc:1914 etc/inc/shaper.inc:2259 etc/inc/shaper.inc:2399
+#: etc/inc/shaper.inc:2542 etc/inc/shaper.inc:2673 etc/inc/shaper.inc:2889
+#: etc/inc/shaper.inc:3323 usr/local/www/interfaces_ppps_edit.php:762
+#: usr/local/www/status_queues.php:175
+msgid "Bandwidth"
+msgstr ""
+
+#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1601 etc/inc/shaper.inc:2261
+#: etc/inc/shaper.inc:2544 etc/inc/shaper.inc:2893
+msgid "Bandwidthtype"
+msgstr ""
+
+#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:1607 etc/inc/shaper.inc:2266
+#: etc/inc/shaper.inc:2549
+msgid "Bandwidth must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:2270
+#: etc/inc/shaper.inc:2553
+msgid "Bandwidth cannot be negative."
+msgstr ""
+
+#: etc/inc/shaper.inc:332
+msgid "Qlimit must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:334
+msgid "Qlimit must be positive."
+msgstr ""
+
+#: etc/inc/shaper.inc:336
+msgid "Tbrsize must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:338
+msgid "Tbrsize must be positive."
+msgstr ""
+
+#: etc/inc/shaper.inc:639 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:3632
+#: etc/inc/shaper.inc:3879
+msgid "Enable/Disable"
+msgstr ""
+
+#: etc/inc/shaper.inc:644
+msgid "Enable/disable discipline and its children"
+msgstr ""
+
+#: etc/inc/shaper.inc:646 etc/inc/shaper.inc:1004 etc/inc/shaper.inc:2895
+#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3639 etc/inc/shaper.inc:3887
+#: etc/inc/shaper.inc:3959 usr/local/www/diag_gmirror.php:220
+#: usr/local/www/diag_gmirror.php:287 usr/local/www/firewall_aliases.php:191
+#: usr/local/www/firewall_aliases_edit.php:131
+#: usr/local/www/firewall_aliases_edit.php:746
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/firewall_schedule.php:97
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:237
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:201
+#: usr/local/www/load_balancer_relay_action.php:139
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:412
+#: usr/local/www/load_balancer_relay_protocol.php:133
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:196
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:166
+#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr_installed.php:123
+#: usr/local/www/services_captiveportal_filemanager.php:160
+#: usr/local/www/services_igmpproxy.php:96
+#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:131
+#: usr/local/www/status_lb_vs.php:78 usr/local/www/status_openvpn.php:276
+#: usr/local/www/status_openvpn.php:339 usr/local/www/system_camanager.php:593
+#: usr/local/www/system_certmanager.php:1083
+#: usr/local/www/system_crlmanager.php:541
+#: usr/local/www/system_gateways.php:217
+#: usr/local/www/system_gateways_edit.php:114
+#: usr/local/www/system_gateways_edit.php:689
+#: usr/local/www/system_groupmanager.php:410
+#: usr/local/www/system_usermanager.php:644
+#: usr/local/www/system_usermanager.php:704
+#: usr/local/www/widgets/widgets/system_information.widget.php:118
+msgid "Name"
+msgstr ""
+
+#: etc/inc/shaper.inc:650
+msgid "Scheduler Type "
+msgstr ""
+
+#: etc/inc/shaper.inc:676
+msgid "NOTE: Changing this changes all child queues!"
+msgstr ""
+
+#: etc/inc/shaper.inc:677
+msgid " Beware you can lose information."
+msgstr ""
+
+#: etc/inc/shaper.inc:715
+msgid ""
+"Adjusts the size, in bytes, of the token bucket regulator. If not specified, "
+"heuristics based on the interface bandwidth are used to determine the size."
+msgstr ""
+
+#: etc/inc/shaper.inc:1013
+msgid "The priority must be an integer between 1 and 15."
+msgstr ""
+
+#: etc/inc/shaper.inc:1016 etc/inc/shaper.inc:2906
+msgid "Queue limit must be an integer"
+msgstr ""
+
+#: etc/inc/shaper.inc:1018
+msgid "Queue limit must be positive"
+msgstr ""
+
+#: etc/inc/shaper.inc:1020 etc/inc/shaper.inc:1022 etc/inc/shaper.inc:2908
+#: etc/inc/shaper.inc:2910 etc/inc/shaper.inc:3964
+msgid "Queue names must be alphanumeric and _ or - only."
+msgstr ""
+
+#: etc/inc/shaper.inc:1025
+msgid "Only one default queue per interface is allowed."
+msgstr ""
+
+#: etc/inc/shaper.inc:1172
+msgid "Enable/Disable queue and its children"
+msgstr ""
+
+#: etc/inc/shaper.inc:1176
+msgid "Queue Name"
+msgstr ""
+
+#: etc/inc/shaper.inc:1183
+msgid ""
+"Enter the name of the queue here. Do not use spaces and limit the size to "
+"15 characters."
+msgstr ""
+
+#: etc/inc/shaper.inc:1186 usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/interfaces_bridge_edit.php:392
+#: usr/local/www/system_gateway_groups.php:133
+msgid "Priority"
+msgstr ""
+
+#: etc/inc/shaper.inc:1190
+msgid ""
+"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher "
+"priority are preferred in the case of overload."
+msgstr ""
+
+#: etc/inc/shaper.inc:1193
+msgid "Queue limit"
+msgstr ""
+
+#: etc/inc/shaper.inc:1197
+msgid "Queue limit in packets."
+msgstr ""
+
+#: etc/inc/shaper.inc:1200
+msgid "Scheduler options"
+msgstr ""
+
+#: etc/inc/shaper.inc:1205 etc/inc/shaper.inc:1208
+msgid "Default queue"
+msgstr ""
+
+#: etc/inc/shaper.inc:1215
+msgid "Random Early Detection"
+msgstr ""
+
+#: etc/inc/shaper.inc:1220
+msgid "Random Early Detection In and Out"
+msgstr ""
+
+#: etc/inc/shaper.inc:1225
+msgid "Explicit Congestion Notification"
+msgstr ""
+
+#: etc/inc/shaper.inc:1230
+msgid "Codel Active Queue"
+msgstr ""
+
+#: etc/inc/shaper.inc:1231
+msgid "Select options for this queue"
+msgstr ""
+
+#: etc/inc/shaper.inc:1233 etc/inc/shaper.inc:3413 etc/inc/shaper.inc:3694
+#: etc/inc/shaper.inc:3892 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/firewall_aliases.php:193
+#: usr/local/www/firewall_aliases_edit.php:583
+#: usr/local/www/firewall_aliases_edit.php:761
+#: usr/local/www/firewall_aliases_edit.php:798
+#: usr/local/www/firewall_aliases_import.php:185
+#: usr/local/www/firewall_nat.php:212 usr/local/www/firewall_nat_1to1.php:186
+#: usr/local/www/firewall_nat_1to1_edit.php:508
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_npt.php:110
+#: usr/local/www/firewall_nat_npt_edit.php:269
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:550
+#: usr/local/www/firewall_nat_out_edit.php:781
+#: usr/local/www/firewall_rules.php:350
+#: usr/local/www/firewall_rules_edit.php:1249
+#: usr/local/www/firewall_schedule.php:99
+#: usr/local/www/firewall_schedule_edit.php:805
+#: usr/local/www/firewall_schedule_edit.php:1010
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/interfaces.php:1655 usr/local/www/interfaces_bridge.php:120
+#: usr/local/www/interfaces_bridge_edit.php:292
+#: usr/local/www/interfaces_gif.php:114
+#: usr/local/www/interfaces_gif_edit.php:223
+#: usr/local/www/interfaces_gre.php:115
+#: usr/local/www/interfaces_gre_edit.php:226
+#: usr/local/www/interfaces_groups.php:98
+#: usr/local/www/interfaces_groups_edit.php:261
+#: usr/local/www/interfaces_lagg.php:120
+#: usr/local/www/interfaces_lagg_edit.php:225
+#: usr/local/www/interfaces_ppps.php:112
+#: usr/local/www/interfaces_ppps_edit.php:482
+#: usr/local/www/interfaces_qinq.php:124
+#: usr/local/www/interfaces_qinq_edit.php:343
+#: usr/local/www/interfaces_vlan.php:117
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_wireless.php:112
+#: usr/local/www/interfaces_wireless_edit.php:191
+#: usr/local/www/load_balancer_monitor.php:124
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:243
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/load_balancer_pool_edit.php:216
+#: usr/local/www/load_balancer_relay_action.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:418
+#: usr/local/www/load_balancer_relay_protocol.php:136
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:219
+#: usr/local/www/load_balancer_virtual_server.php:138
+#: usr/local/www/load_balancer_virtual_server_edit.php:172
+#: usr/local/www/pkg_mgr.php:199 usr/local/www/pkg_mgr_installed.php:126
+#: usr/local/www/services_captiveportal_hostname.php:127
+#: usr/local/www/services_captiveportal_hostname_edit.php:186
+#: usr/local/www/services_captiveportal_ip.php:120
+#: usr/local/www/services_captiveportal_ip_edit.php:203
+#: usr/local/www/services_captiveportal_mac.php:171
+#: usr/local/www/services_captiveportal_mac_edit.php:218
+#: usr/local/www/services_captiveportal_zones.php:83
+#: usr/local/www/services_captiveportal_zones_edit.php:106
+#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dhcp.php:1250
+#: usr/local/www/services_dhcp_edit.php:424
+#: usr/local/www/services_dhcpv6.php:861
+#: usr/local/www/services_dhcpv6_edit.php:240
+#: usr/local/www/services_dnsmasq.php:355
+#: usr/local/www/services_dnsmasq.php:442
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:155
+#: usr/local/www/services_dnsmasq_edit.php:237
+#: usr/local/www/services_dnsmasq_edit.php:258
+#: usr/local/www/services_dyndns.php:90
+#: usr/local/www/services_dyndns_edit.php:416
+#: usr/local/www/services_igmpproxy.php:99
+#: usr/local/www/services_igmpproxy_edit.php:180
+#: usr/local/www/services_rfc2136.php:84
+#: usr/local/www/services_rfc2136_edit.php:206
+#: usr/local/www/services_unbound.php:423
+#: usr/local/www/services_unbound.php:510
+#: usr/local/www/services_unbound_acls.php:242
+#: usr/local/www/services_unbound_acls.php:296
+#: usr/local/www/services_unbound_acls.php:323
+#: usr/local/www/services_unbound_domainoverride_edit.php:148
+#: usr/local/www/services_unbound_host_edit.php:240
+#: usr/local/www/services_unbound_host_edit.php:261
+#: usr/local/www/services_wol.php:164 usr/local/www/services_wol_edit.php:152
+#: usr/local/www/status_gateway_groups.php:78
+#: usr/local/www/status_gateways.php:80 usr/local/www/status_lb_pool.php:135
+#: usr/local/www/status_lb_vs.php:82 usr/local/www/status_services.php:85
+#: usr/local/www/status_upnp.php:91
+#: usr/local/www/system_advanced_sysctl.php:182
+#: usr/local/www/system_advanced_sysctl.php:255
+#: usr/local/www/system_gateway_groups.php:134
+#: usr/local/www/system_gateway_groups_edit.php:339
+#: usr/local/www/system_gateways.php:221
+#: usr/local/www/system_gateways_edit.php:852
+#: usr/local/www/system_groupmanager.php:327
+#: usr/local/www/system_groupmanager.php:411
+#: usr/local/www/system_groupmanager.php:482
+#: usr/local/www/system_groupmanager_addprivs.php:218
+#: usr/local/www/system_routes.php:237
+#: usr/local/www/system_routes_edit.php:323
+#: usr/local/www/system_usermanager.php:645
+#: usr/local/www/system_usermanager_addprivs.php:187
+#: usr/local/www/vpn_ipsec_phase1.php:660
+#: usr/local/www/vpn_ipsec_phase2.php:691
+#: usr/local/www/vpn_openvpn_client.php:663
+#: usr/local/www/vpn_openvpn_client.php:1118
+#: usr/local/www/vpn_openvpn_csc.php:364 usr/local/www/vpn_openvpn_csc.php:748
+#: usr/local/www/vpn_openvpn_server.php:892
+#: usr/local/www/vpn_openvpn_server.php:1834 usr/local/www/vpn_pppoe.php:107
+#: usr/local/www/vpn_pppoe_edit.php:456
+msgid "Description"
+msgstr ""
+
+#: etc/inc/shaper.inc:1260
+msgid "Bandwidth:"
+msgstr ""
+
+#: etc/inc/shaper.inc:1264
+msgid "Priority: on"
+msgstr ""
+
+#: etc/inc/shaper.inc:1267
+msgid "Default: on"
+msgstr ""
+
+#: etc/inc/shaper.inc:1274 etc/inc/shaper.inc:1275
+msgid "Delete queue from interface"
+msgstr ""
+
+#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:2274 etc/inc/shaper.inc:2558
+msgid "Bandwidth in percentage should be between 1 and 100 bounds."
+msgstr ""
+
+#: etc/inc/shaper.inc:1631
+msgid "upperlimit service curve defined but missing (d) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1633
+msgid ""
+"upperlimit service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1635
+msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1637
+msgid "upperlimit d value needs to be numeric"
+msgstr ""
+
+#: etc/inc/shaper.inc:1639
+msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1653
+msgid "linkshare service curve defined but missing (d) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1655
+msgid ""
+"linkshare service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1657
+msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1659
+msgid "linkshare d value needs to be numeric"
+msgstr ""
+
+#: etc/inc/shaper.inc:1661
+msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1663
+msgid "realtime service curve defined but missing (d) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1665
+msgid "realtime service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+
+#: etc/inc/shaper.inc:1680
+msgid "realtime m1 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1682
+msgid "realtime d value needs to be numeric"
+msgstr ""
+
+#: etc/inc/shaper.inc:1684
+msgid "realtime m2 value needs to be Kb, Mb, Gb, or %"
+msgstr ""
+
+#: etc/inc/shaper.inc:1922 etc/inc/shaper.inc:2408 etc/inc/shaper.inc:2682
+msgid "Gbit/s"
+msgstr ""
+
+#: etc/inc/shaper.inc:1926 etc/inc/shaper.inc:2412 etc/inc/shaper.inc:2686
+msgid "Mbit/s"
+msgstr ""
+
+#: etc/inc/shaper.inc:1930 etc/inc/shaper.inc:2416 etc/inc/shaper.inc:2690
+#: usr/local/www/services_captiveportal.php:652
+#: usr/local/www/services_captiveportal.php:656
+msgid "Kbit/s"
+msgstr ""
+
+#: etc/inc/shaper.inc:1934 etc/inc/shaper.inc:2420 etc/inc/shaper.inc:2694
+msgid "Bit/s"
+msgstr ""
+
+#: etc/inc/shaper.inc:1940 etc/inc/shaper.inc:2426 etc/inc/shaper.inc:2700
+msgid "Choose the amount of bandwidth for this queue"
+msgstr ""
+
+#: etc/inc/shaper.inc:1943
+msgid "Service Curve (sc)"
+msgstr ""
+
+#: etc/inc/shaper.inc:1950
+msgid "Upperlimit:"
+msgstr ""
+
+#: etc/inc/shaper.inc:1965
+msgid "The maximum allowed bandwidth for the queue."
+msgstr ""
+
+#: etc/inc/shaper.inc:1969
+msgid "Real time:"
+msgstr ""
+
+#: etc/inc/shaper.inc:1984
+msgid "The minimum required bandwidth for the queue."
+msgstr ""
+
+#: etc/inc/shaper.inc:1988
+msgid "Link share:"
+msgstr ""
+
+#: etc/inc/shaper.inc:2003
+msgid "The bandwidth share of a backlogged queue - this overrides priority."
+msgstr ""
+
+#: etc/inc/shaper.inc:2005
+msgid ""
+"The format for service curve specifications is (m1, d, m2). m2 controls the "
+"bandwidth assigned to the queue. m1 and d are optional and can be used to "
+"control the initial bandwidth assignment. For the first d milliseconds the "
+"queue gets the bandwidth given as m1, afterwards the value given in m2."
+msgstr ""
+
+#: etc/inc/shaper.inc:2257
+msgid "Priority must be an integer between 1 and 7."
+msgstr ""
+
+#: etc/inc/shaper.inc:2428 etc/inc/shaper.inc:2702
+msgid "Scheduler specific options"
+msgstr ""
+
+#: etc/inc/shaper.inc:2432
+msgid "Borrow from other queues when available"
+msgstr ""
+
+#: etc/inc/shaper.inc:2540
+msgid "Priority must be an integer between 1 and 255."
+msgstr ""
+
+#: etc/inc/shaper.inc:2708
+msgid "Number of buckets available."
+msgstr ""
+
+#: etc/inc/shaper.inc:2713
+msgid "Bandwidth limit for hosts to not saturate link."
+msgstr ""
+
+#: etc/inc/shaper.inc:2901
+msgid "Plr must be a value between 0 and 1."
+msgstr ""
+
+#: etc/inc/shaper.inc:2904
+msgid "Buckets must be an integer between 16 and 65535."
+msgstr ""
+
+#: etc/inc/shaper.inc:2913
+msgid "IPV4 bit mask must be blank or numeric value between 1 and 32."
+msgstr ""
+
+#: etc/inc/shaper.inc:2916
+msgid "IPV6 bit mask must be blank or numeric value between 1 and 128."
+msgstr ""
+
+#: etc/inc/shaper.inc:3057
+#, php-format
+msgid "Bandwidth for schedule %s must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:3059
+#, php-format
+msgid "Burst for schedule %s must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:3065
+msgid "You need to specify a schedule for every additional entry"
+msgstr ""
+
+#: etc/inc/shaper.inc:3067
+msgid "If more than one bandwidth configured all schedules need to be selected"
+msgstr ""
+
+#: etc/inc/shaper.inc:3069
+msgid "At least one bw specification is necessary"
+msgstr ""
+
+#: etc/inc/shaper.inc:3071
+msgid "Delay must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:3305 usr/local/www/diag_routes.php:171
+#: usr/local/www/interfaces.php:1645 usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_rfc2136_edit.php:135
+#: usr/local/www/services_snmp.php:291 usr/local/www/services_snmp.php:351
+#: usr/local/www/services_unbound.php:254
+#: usr/local/www/system_firmware.php:125
+msgid "Enable"
+msgstr ""
+
+#: etc/inc/shaper.inc:3310
+msgid "Enable limiter and its children"
+msgstr ""
+
+#: etc/inc/shaper.inc:3365
+msgid "add another schedule"
+msgstr ""
+
+#: etc/inc/shaper.inc:3367
+msgid ""
+"Bandwidth is the rate (e.g. Mbit/s) to which traffic in this limiter will be "
+"restricted."
+msgstr ""
+
+#: etc/inc/shaper.inc:3369 etc/inc/shaper.inc:3650
+msgid "Mask"
+msgstr ""
+
+#: etc/inc/shaper.inc:3380 etc/inc/shaper.inc:3661
+msgid "Source addresses"
+msgstr ""
+
+#: etc/inc/shaper.inc:3384 etc/inc/shaper.inc:3665
+msgid "Destination addresses"
+msgstr ""
+
+#: etc/inc/shaper.inc:3387 etc/inc/shaper.inc:3668
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given "
+"above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr ""
+
+#: etc/inc/shaper.inc:3408
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per pipe."
+msgstr ""
+
+#: etc/inc/shaper.inc:3419 etc/inc/shaper.inc:3700 etc/inc/shaper.inc:3898
+#: usr/local/www/firewall_aliases_edit.php:766
+#: usr/local/www/firewall_nat_1to1_edit.php:513
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_npt_edit.php:272
+#: usr/local/www/firewall_nat_out_edit.php:785
+#: usr/local/www/firewall_schedule_edit.php:808
+#: usr/local/www/firewall_schedule_edit.php:982
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/interfaces_gif_edit.php:226
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:266
+#: usr/local/www/interfaces_qinq_edit.php:348
+#: usr/local/www/interfaces_vlan_edit.php:196
+#: usr/local/www/interfaces_wireless_edit.php:194
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcpv6_edit.php:243
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:158
+#: usr/local/www/services_dnsmasq_edit.php:240
+#: usr/local/www/services_igmpproxy_edit.php:185
+#: usr/local/www/services_unbound_domainoverride_edit.php:152
+#: usr/local/www/services_unbound_host_edit.php:243
+#: usr/local/www/services_wol_edit.php:155
+#: usr/local/www/system_gateway_groups_edit.php:342
+#: usr/local/www/system_routes_edit.php:326
+msgid "You may enter a description here for your reference (not parsed)."
+msgstr ""
+
+#: etc/inc/shaper.inc:3425 etc/inc/shaper.inc:3706
+#: usr/local/www/interfaces_bridge_edit.php:300
+#: usr/local/www/interfaces_ppps_edit.php:751
+msgid "Show advanced options"
+msgstr ""
+
+#: etc/inc/shaper.inc:3429 usr/local/www/status_ntpd.php:186
+msgid "Delay"
+msgstr ""
+
+#: etc/inc/shaper.inc:3433
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty)"
+msgstr ""
+
+#: etc/inc/shaper.inc:3437 etc/inc/shaper.inc:3717
+msgid "Packet loss rate"
+msgstr ""
+
+#: etc/inc/shaper.inc:3441 etc/inc/shaper.inc:3721
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty). A "
+"value of 0.001 means one packet in 1000 gets dropped"
+msgstr ""
+
+#: etc/inc/shaper.inc:3446 etc/inc/shaper.inc:3726
+msgid "Queue Size"
+msgstr ""
+
+#: etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3731
+msgid ""
+"Hint: in most cases, you should leave the field empty. All packets in this "
+"pipe are placed into a fixed-size queue first, then they are delayed by "
+"value specified in the Delay field, and then they are delivered to their "
+"destination."
+msgstr ""
+
+#: etc/inc/shaper.inc:3457 etc/inc/shaper.inc:3737
+msgid "Bucket Size"
+msgstr ""
+
+#: etc/inc/shaper.inc:3462 etc/inc/shaper.inc:3742
+msgid ""
+"Hint: in most cases, you should leave the field empty. It increases the hash "
+"size set."
+msgstr ""
+
+#: etc/inc/shaper.inc:3530
+msgid "Weight must be an integer between 1 and 100."
+msgstr ""
+
+#: etc/inc/shaper.inc:3637
+msgid "Enable/Disable queue"
+msgstr ""
+
+#: etc/inc/shaper.inc:3657 usr/local/www/firewall_rules.php:734
+#: usr/local/www/firewall_rules_edit.php:1410
+#: usr/local/www/firewall_rules_edit.php:1419
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/load_balancer_virtual_server_edit.php:232
+#: usr/local/www/vpn_ipsec_mobile.php:405
+#: usr/local/www/vpn_openvpn_client.php:609
+msgid "none"
+msgstr ""
+
+#: etc/inc/shaper.inc:3689
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per queue."
+msgstr ""
+
+#: etc/inc/shaper.inc:3709 usr/local/www/system_gateways_edit.php:753
+msgid "Weight"
+msgstr ""
+
+#: etc/inc/shaper.inc:3713
+msgid ""
+"Hint: For queues under the same parent this specifies the share that a queue "
+"gets(values range from 1 to 100, you can leave it blank otherwise)"
+msgstr ""
+
+#: etc/inc/shaper.inc:3741
+msgid "slots"
+msgstr ""
+
+#: etc/inc/shaper.inc:3885
+msgid "Enable/Disable layer7 Container"
+msgstr ""
+
+#: etc/inc/shaper.inc:4150
+#, php-format
+msgid "Sending HUP signal to %s"
+msgstr ""
+
+#: etc/inc/shaper.inc:4511
+msgid " Clone shaper/queue on this interface"
+msgstr ""
+
+#: etc/inc/shaper.inc:4519 etc/inc/shaper.inc:4526
+#, php-format
+msgid "Welcome to the %s Traffic Shaper."
+msgstr ""
+
+#: etc/inc/shaper.inc:4520 etc/inc/shaper.inc:4527
+msgid ""
+"The tree on the left helps you navigate through the queues <br />buttons at "
+"the bottom represent queue actions and are activated accordingly."
+msgstr ""
+
+#: etc/inc/smtp.inc:93
+msgid ": data access time out"
+msgstr ""
+
+#: etc/inc/smtp.inc:96
+msgid ": the server disconnected"
+msgstr ""
+
+#: etc/inc/smtp.inc:108
+msgid "reached the end of data while reading from the SMTP server conection"
+msgstr ""
+
+#: etc/inc/smtp.inc:114
+msgid "it was not possible to read line from the SMTP server"
+msgstr ""
+
+#: etc/inc/smtp.inc:136
+msgid "it was not possible to send a line to the SMTP server"
+msgstr ""
+
+#: etc/inc/smtp.inc:150
+msgid "it was not possible to send data to the SMTP server"
+msgstr ""
+
+#: etc/inc/smtp.inc:222
+msgid "establishing SSL connections requires at least PHP version 4.3.0"
+msgstr ""
+
+#: etc/inc/smtp.inc:225
+msgid "establishing SSL connections requires the OpenSSL extension enabled"
+msgstr ""
+
+#: etc/inc/smtp.inc:234
+#, php-format
+msgid "could not resolve host \"%s\""
+msgstr ""
+
+#: etc/inc/smtp.inc:238
+#, php-format
+msgid "domain \"%s\" resolved to an address excluded to be valid"
+msgstr ""
+
+#: etc/inc/smtp.inc:240
+#, php-format
+msgid "Connecting to host address \"%1$s\" port %2$s..."
+msgstr ""
+
+#: etc/inc/smtp.inc:247
+msgid "-3 socket could not be created"
+msgstr ""
+
+#: etc/inc/smtp.inc:249
+#, php-format
+msgid "-4 dns lookup on hostname \"%s\" failed"
+msgstr ""
+
+#: etc/inc/smtp.inc:251
+msgid "-5 connection refused or timed out"
+msgstr ""
+
+#: etc/inc/smtp.inc:253
+msgid "-6 fdopen() call failed"
+msgstr ""
+
+#: etc/inc/smtp.inc:255
+msgid "-7 setvbuf() call failed"
+msgstr ""
+
+#: etc/inc/smtp.inc:257
+#, php-format
+msgid "could not connect to the host \"%1$s\": %2$s"
+msgstr ""
+
+#: etc/inc/smtp.inc:266
+msgid ""
+"it is not possible to authenticate using the specified mechanism because the "
+"SASL library class is not loaded"
+msgstr ""
+
+#: etc/inc/smtp.inc:290
+#, php-format
+msgid "authenticated mechanism %1$s may not be used: %2$s"
+msgstr ""
+
+#: etc/inc/smtp.inc:295
+msgid "Could not start the SASL authentication client:"
+msgstr ""
+
+#: etc/inc/smtp.inc:302
+msgid "Could not send the AUTH command"
+msgstr ""
+
+#: etc/inc/smtp.inc:317 etc/inc/smtp.inc:347
+msgid "Authentication error:"
+msgstr ""
+
+#: etc/inc/smtp.inc:332
+msgid "Could not send the authentication step message"
+msgstr ""
+
+#: etc/inc/smtp.inc:352
+msgid "Could not process the SASL authentication step:"
+msgstr ""
+
+#: etc/inc/smtp.inc:366
+msgid "connection is already established"
+msgstr ""
+
+#: etc/inc/smtp.inc:404
+msgid "it was not specified the POP3 authentication user"
+msgstr ""
+
+#: etc/inc/smtp.inc:410
+msgid "it was not specified the POP3 authentication password"
+msgstr ""
+
+#: etc/inc/smtp.inc:414
+#, php-format
+msgid "Resolving POP3 authentication host \"%s\"..."
+msgstr ""
+
+#: etc/inc/smtp.inc:421
+msgid "POP3 authentication server greeting was not found"
+msgstr ""
+
+#: etc/inc/smtp.inc:429
+msgid "POP3 authentication user was not accepted:"
+msgstr ""
+
+#: etc/inc/smtp.inc:437
+msgid "POP3 authentication password was not accepted:"
+msgstr ""
+
+#: etc/inc/smtp.inc:446
+msgid "could not determine the SMTP to connect"
+msgstr ""
+
+#: etc/inc/smtp.inc:452
+#, php-format
+msgid "Resolving SMTP server domain \"%s\"..."
+msgstr ""
+
+#: etc/inc/smtp.inc:464
+#, php-format
+msgid "Connected to SMTP server \"%s\"."
+msgstr ""
+
+#: etc/inc/smtp.inc:478
+msgid "server does not require authentication"
+msgstr ""
+
+#: etc/inc/smtp.inc:542
+msgid ""
+"it is not supported any of the authentication mechanisms required by the "
+"server"
+msgstr ""
+
+#: etc/inc/smtp.inc:632
+msgid ""
+"direct delivery connection is already established and sender is already set"
+msgstr ""
+
+#: etc/inc/smtp.inc:640
+msgid "connection is not in the initial state"
+msgstr ""
+
+#: etc/inc/smtp.inc:662
+msgid "it was not specified a valid direct recipient"
+msgstr ""
+
+#: etc/inc/smtp.inc:681
+msgid ""
+"it is not possible to deliver directly to recipients of different domains"
+msgstr ""
+
+#: etc/inc/smtp.inc:686
+msgid "connection is already established and the recipient is already set"
+msgstr ""
+
+#: etc/inc/smtp.inc:698
+msgid "connection is not in the recipient setting state"
+msgstr ""
+
+#: etc/inc/smtp.inc:727
+msgid "connection is not in the start sending data state"
+msgstr ""
+
+#: etc/inc/smtp.inc:757 etc/inc/smtp.inc:768
+msgid "connection is not in the sending data state"
+msgstr ""
+
+#: etc/inc/smtp.inc:804
+msgid "it was not previously established a SMTP connection"
+msgstr ""
+
+#: etc/inc/system.inc:515
+#, php-format
+msgid "Not adding default route because OLSR dynamic gateway is enabled."
+msgstr ""
+
+#: etc/inc/system.inc:556
+#, php-format
+msgid "Static Routes: Gateway IP could not be found for %s"
+msgstr ""
+
+#: etc/inc/system.inc:715
+msgid "Starting syslog..."
+msgstr ""
+
+#: etc/inc/system.inc:860
+#, php-format
+msgid "Error: cannot open syslog.conf in system_syslogd_start().%s"
+msgstr ""
+
+#: etc/inc/system.inc:942
+msgid "Starting webConfigurator..."
+msgstr ""
+
+#: etc/inc/system.inc:988 etc/inc/system.inc:1912 etc/inc/system.inc:1915
+msgid "failed!"
+msgstr ""
+
+#: etc/inc/system.inc:1288
+#, php-format
+msgid "Error: cannot open cert.pem in system_webgui_start().%s"
+msgstr ""
+
+#: etc/inc/system.inc:1299
+#, php-format
+msgid "Error: cannot open ca.pem in system_webgui_start().%s"
+msgstr ""
+
+#: etc/inc/system.inc:1307
+msgid "ssl configuration"
+msgstr ""
+
+#: etc/inc/system.inc:1360
+#, php-format
+msgid "Error: cannot open %s in system_generate_lighty_config().%s"
+msgstr ""
+
+#: etc/inc/system.inc:1380
+msgid "Setting timezone..."
+msgstr ""
+
+#: etc/inc/system.inc:1761
+msgid "Syncing system time before startup..."
+msgstr ""
+
+#: etc/inc/system.inc:1875
+#, php-format
+msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s"
+msgstr ""
+
+#: etc/inc/system.inc:1897
+msgid "Setting hard disk standby... "
+msgstr ""
+
+#: etc/inc/system.inc:2018
+msgid "Generic PC"
+msgstr ""
+
+#: etc/inc/system.inc:2021
+msgid "Generic PC (CD-ROM)"
+msgstr ""
+
+#: etc/inc/system.inc:2030
+msgid "PC Engines WRAP"
+msgstr ""
+
+#: etc/inc/system.inc:2033
+msgid "PC Engines ALIX"
+msgstr ""
+
+#: etc/inc/system.inc:2045
+msgid "embedded (unknown)"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:113
+#, php-format
+msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:125
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (source network '%s' does not exist anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:138
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (destination network '%s' does not exist "
+"anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:158
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (interface '%s' does not exist "
+"anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:170
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (source network '%s' does not exist "
+"anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:183
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (destination network '%s' does not "
+"exist anymore)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:333
+#, php-format
+msgid "CARP vhid %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:510
+msgid "Permit IPsec traffic."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:585
+msgid "System Administrators"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:604
+msgid ""
+"Indicates whether this user will lock access to the webConfigurator for "
+"other users."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:607
+msgid ""
+"Indicates whether this user will lock individual HTML pages after having "
+"accessed a particular page (the lock will be freed if the user leaves or "
+"saves the page form)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:610
+msgid "Indicates whether this user is able to login for example via SSH."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:613
+#, php-format
+msgid ""
+"Indicates whether this user is allowed to copy files onto the %s appliance "
+"via SCP/SFTP. If you are going to use this privilege, you must install "
+"scponly on the appliance (Hint: pkg_add -r scponly)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:616
+msgid ""
+"This user is associated with the UNIX root user (you should associate this "
+"privilege only with one single user)."
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:633
+msgid "Drop packets to closed TCP ports without returning a RST"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:637
+msgid "Do not send ICMP port unreachable messages for closed UDP ports"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:641
+msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:645
+msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:649
+msgid "Sending of IPv4 ICMP redirects"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:653
+msgid "Sending of IPv6 ICMP redirects"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:657
+msgid "Generate SYN cookies for outbound SYN-ACK packets"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:661
+msgid "Maximum incoming TCP datagram size"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:665
+msgid "Maximum outgoing TCP datagram size"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:669
+msgid ""
+"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-"
+"January/002534.html)"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:673
+msgid "Do not delay ACK to try and piggyback it onto a data packet"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:677
+msgid "Maximum outgoing UDP datagram size"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:681
+msgid ""
+"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:685
+msgid "Allow unprivileged access to tap(4) device nodes"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:689
+msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:693
+msgid ""
+"The system will attempt to calculate the bandwidth delay product for each "
+"connection and limit the amount of data queued to the network to just the "
+"amount required to maintain optimum throughput. "
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:697
+msgid "Set ICMP Limits"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:701
+msgid "TCP Offload engine"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:742
+#, php-format
+msgid "Interface %s Static Gateway"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:745
+#, php-format
+msgid "Interface %s Dynamic Gateway"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:811
+#, php-format
+msgid "Upgraded static route for %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:908
+#, php-format
+msgid "Sitedown pool for VS: %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:1063
+#, php-format
+msgid "phase2 for %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:1290
+#, php-format
+msgid "Upgraded Dyndns %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:1342
+msgid "All Users"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:1474
+#, php-format
+msgid "Converted bridged %s"
+msgstr ""
+
+#: etc/inc/upgrade_config.inc:1848
+msgid "Auto added OpenVPN rule from config upgrade."
+msgstr ""
+
+#: etc/inc/util.inc:101
+#, php-format
+msgid "WARNING: Could not mark subsystem: %s dirty"
+msgstr ""
+
+#: etc/inc/util.inc:121
+msgid "WARNING: You must give a name as parameter to lock() function."
+msgstr ""
+
+#: etc/inc/util.inc:138
+msgid "WARNING: You must give a name as parameter to try_lock() function."
+msgstr ""
+
+#: etc/inc/util.inc:273
+#, php-format
+msgid "Reference %s is going negative, not doing unreference."
+msgstr ""
+
+#: etc/inc/util.inc:1254
+#, php-format
+msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' "
+msgstr ""
+
+#: etc/inc/voucher.inc:391
+#, php-format
+msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes"
+msgstr ""
+
+#: etc/inc/voucher.inc:428
+msgid "Access denied!"
+msgstr ""
+
+#: etc/inc/voucher.inc:430
+#, php-format
+msgid "Access granted for %d Minutes in total."
+msgstr ""
+
+#: etc/inc/voucher.inc:496
+msgid "Enabling voucher support... "
+msgstr ""
+
+#: etc/inc/voucher.inc:535
+#, php-format
+msgid "Error: cannot write voucher.cfg"
+msgstr ""
+
+#: etc/inc/voucher.inc:586
+#, php-format
+msgid "cant write %1$s/voucher_%s_used_%2$s.db"
+msgstr ""
+
+#: etc/inc/voucher.inc:667
+#, php-format
+msgid "cant read %1$s/voucher_%s_used_%2$s.db"
+msgstr ""
+
+#: etc/inc/voucher.inc:684
+#, php-format
+msgid "Voucher: %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:161
+msgid "Configuring IPsec VPN... "
+msgstr ""
+
+#: etc/inc/vpn.inc:423
+#, php-format
+msgid "Error: Invalid certificate info for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:429
+#, php-format
+msgid "Error: Invalid certificate hash info for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:434
+#, php-format
+msgid "Error: Cannot write IPsec CA file for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:456
+#, php-format
+msgid "Error: Invalid phase1 certificate reference for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:464
+#, php-format
+msgid "Error: Cannot write phase1 key file for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:471
+#, php-format
+msgid "Error: Cannot write phase1 certificate file for %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:916
+#, php-format
+msgid "Ignoring IPsec reload since there are no tunnels on interface %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:923
+msgid "Forcefully reloading IPsec"
+msgstr ""
+
+#: etc/inc/vpn.inc:967
+msgid "Configuring PPTP VPN service... "
+msgstr ""
+
+#: etc/inc/vpn.inc:977
+msgid "Could not kill mpd within 3 seconds. Trying again."
+msgstr ""
+
+#: etc/inc/vpn.inc:1000
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1119
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pptpd_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1144
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1202
+msgid "Configuring PPPoE Server service... "
+msgstr ""
+
+#: etc/inc/vpn.inc:1226
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1335
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pppoe_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1362
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1395 usr/local/www/system_firmware_check.php:141
+msgid "done"
+msgstr ""
+
+#: etc/inc/vpn.inc:1414
+msgid "Configuring l2tp VPN service... "
+msgstr ""
+
+#: etc/inc/vpn.inc:1439
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1538
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_l2tp_configure()."
+msgstr ""
+
+#: etc/inc/vpn.inc:1564
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()."
+msgstr ""
+
+#: etc/inc/xmlparse.inc:93 etc/inc/xmlparse_attr.inc:78
+#, php-format
+msgid "XML error: %1$s at line %2$d cannot occur more than once"
+msgstr ""
+
+#: etc/inc/xmlparse.inc:184 etc/inc/xmlparse_attr.inc:187
+msgid "Error: could not open XML input"
+msgstr ""
+
+#: etc/inc/xmlparse.inc:190
+#, php-format
+msgid "XML error: %1$s at line %2$d in %3$s"
+msgstr ""
+
+#: etc/inc/xmlparse.inc:207 etc/inc/xmlparse_attr.inc:210
+#, php-format
+msgid "XML error: no %s object found!"
+msgstr ""
+
+#: etc/inc/xmlparse_attr.inc:197
+#, php-format
+msgid "XML error: %1$s at line %2$d"
+msgstr ""
+
+#: etc/inc/xmlreader.inc:168
+#, php-format
+msgid "Error returned while trying to parse %s"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:152
+msgid "Unknown method"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:153
+msgid "Invalid return payload: enable debugging to examine incoming payload"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:154
+msgid "Incorrect parameters passed to method"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:155
+msgid "Can't introspect: method unknown"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:156
+msgid "Didn't receive 200 OK from remote server."
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:157
+msgid "The requested method didn't return an XML_RPC_Response object."
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:158
+msgid "Invalid request payload"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:260
+msgid "missing top level xmlrpc element"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:268
+#, php-format
+msgid "xmlrpc element %1$s cannot be child of %2$s"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:431
+msgid "Non-numeric value received in INT or DOUBLE"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:860
+#, php-format
+msgid "send()'s %s parameter must be an XML_RPC_Message object."
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:951
+#, php-format
+msgid ""
+"Connection to proxy server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:957
+#, php-format
+msgid ""
+"Connection to RPC server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1330
+msgid "The submitted request did not contain this parameter"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1361
+msgid "mb_convert_encoding() is not available"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1470
+#, php-format
+msgid "HTTP error, got response: %s"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1593
+msgid "Scalar can have only one value"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1600
+#, php-format
+msgid "Not a scalar type (%s)"
+msgstr ""
+
+#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652
+#, php-format
+msgid "Already initialized as a [%s]"
+msgstr ""
+
+#: etc/inc/xmlrpc_server.inc:48
+msgid ""
+"This method lists all the methods that the XML-RPC server knows how to "
+"dispatch"
+msgstr ""
+
+#: etc/inc/xmlrpc_server.inc:66
+msgid ""
+"Returns an array of known signatures (an array of arrays) for the method "
+"name passed. If no signatures are known, returns a none-array (test for "
+"type != array to detect missing signature)"
+msgstr ""
+
+#: etc/inc/xmlrpc_server.inc:86
+msgid ""
+"Returns help text if defined for the method passed, otherwise returns an "
+"empty string"
+msgstr ""
+
+#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236
+#, php-format
+msgid "Merged in config (%s sections) from ZeroMQ client."
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:58
+#, php-format
+msgid "List of mirrors changed. Old: (%s) New: (%s)"
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:65
+#, php-format
+msgid "Mirror %s status changed from %s to %s."
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:70
+#, php-format
+msgid "Mirror %s consumer count changed from %d to %d."
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:77
+#, php-format
+msgid "Mirror %s drive status changed. Old: (%s) New: (%s)"
+msgstr ""
+
+#: usr/local/www/bandwidth_by_ip.php:24
+msgid "Wrong Interface"
+msgstr ""
+
+#: usr/local/www/bandwidth_by_ip.php:119
+msgid "no info"
+msgstr ""
+
+#: usr/local/www/carp_status.php:72
+#, php-format
+msgid ""
+"%s IPs have been disabled. Please note that disabling does not survive a "
+"reboot."
+msgstr ""
+
+#: usr/local/www/carp_status.php:75
+msgid "CARP has been enabled."
+msgstr ""
+
+#: usr/local/www/carp_status.php:99 usr/local/www/carp_status.php:148
+#: usr/local/www/diag_gmirror.php:221 usr/local/www/diag_ipsec.php:49
+#: usr/local/www/diag_ipsec.php:115 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_leases.php:89 usr/local/www/diag_ipsec_sad.php:50
+#: usr/local/www/diag_ipsec_spd.php:50 usr/local/www/diag_logs.php:66
+#: usr/local/www/diag_logs_auth.php:57 usr/local/www/diag_logs_dhcp.php:60
+#: usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+#: usr/local/www/diag_logs_filter_summary.php:35
+#: usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_ipsec.php:61 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_openvpn.php:46 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_relayd.php:56
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_settings.php:187 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_wireless.php:57 usr/local/www/diag_pkglogs.php:86
+#: usr/local/www/easyrule.php:83 usr/local/www/fbegin.inc:324
+#: usr/local/www/pkg_mgr.php:198
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_vouchers.php:58
+#: usr/local/www/status_dhcp_leases.php:50
+#: usr/local/www/status_dhcpv6_leases.php:51
+#: usr/local/www/status_filter_reload.php:45
+#: usr/local/www/status_gateway_groups.php:53
+#: usr/local/www/status_gateways.php:52 usr/local/www/status_gateways.php:79
+#: usr/local/www/status_graph.php:114 usr/local/www/status_graph_cpu.php:42
+#: usr/local/www/status_interfaces.php:60
+#: usr/local/www/status_interfaces.php:88 usr/local/www/status_lb_pool.php:63
+#: usr/local/www/status_lb_vs.php:57 usr/local/www/status_lb_vs.php:81
+#: usr/local/www/status_ntpd.php:164 usr/local/www/status_ntpd.php:178
+#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:277
+#: usr/local/www/status_openvpn.php:340 usr/local/www/status_queues.php:124
+#: usr/local/www/status_rrd_graph.php:260
+#: usr/local/www/status_rrd_graph_settings.php:120
+#: usr/local/www/status_services.php:68 usr/local/www/status_services.php:86
+#: usr/local/www/status_upnp.php:59 usr/local/www/status_wireless.php:42
+#: usr/local/www/status_wireless.php:79
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:46
+msgid "Status"
+msgstr ""
+
+#: usr/local/www/carp_status.php:99
+#: usr/local/www/firewall_virtual_ip_edit.php:389
+msgid "CARP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:110
+msgid ""
+"CARP has detected a problem and this unit has been demoted to BACKUP status."
+msgstr ""
+
+#: usr/local/www/carp_status.php:110
+msgid "Check link status on all interfaces with configured CARP VIPs."
+msgstr ""
+
+#: usr/local/www/carp_status.php:130
+msgid "Temporarily Disable CARP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:133
+msgid "Enable CARP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:136
+msgid "Leave Persistent CARP Maintenance Mode"
+msgstr ""
+
+#: usr/local/www/carp_status.php:138
+msgid "Enter Persistent CARP Maintenance Mode"
+msgstr ""
+
+#: usr/local/www/carp_status.php:146
+msgid "CARP Interface"
+msgstr ""
+
+#: usr/local/www/carp_status.php:147 usr/local/www/firewall_nat_out.php:649
+#: usr/local/www/firewall_nat_out_edit.php:712
+#: usr/local/www/system_gateway_groups_edit.php:319
+msgid "Virtual IP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:152
+msgid "Could not locate any defined CARP interfaces."
+msgstr ""
+
+#: usr/local/www/carp_status.php:199 usr/local/www/diag_packet_capture.php:262
+#: usr/local/www/diag_packet_capture.php:348
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/interfaces_wireless.php:137 usr/local/www/pkg_edit.php:936
+#: usr/local/www/services_ntpd_pps.php:138 usr/local/www/status_graph.php:338
+#: usr/local/www/status_graph_cpu.php:54 usr/local/www/status_queues.php:187
+#: usr/local/www/vpn_ipsec.php:642 usr/local/www/vpn_ipsec_keys.php:180
+#: usr/local/www/vpn_ipsec_keys_edit.php:161
+#: usr/local/www/vpn_pppoe_edit.php:610 usr/local/www/vpn_pptp.php:487
+msgid "Note"
+msgstr ""
+
+#: usr/local/www/carp_status.php:201
+msgid "You can configure high availability sync settings"
+msgstr ""
+
+#: usr/local/www/carp_status.php:201
+#: usr/local/www/firewall_shaper_layer7.php:67
+#: usr/local/www/firewall_virtual_ip.php:308 usr/local/www/interfaces.php:3490
+#: usr/local/www/interfaces.php:3499 usr/local/www/status_queues.php:189
+msgid "here"
+msgstr ""
+
+#: usr/local/www/carp_status.php:205
+msgid "pfSync nodes"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:69
+msgid "Unfortunately we have detected a programming bug."
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:70
+msgid ""
+"Would you like to submit the programming debug logs to the pfSense "
+"developers for inspection?"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:71
+msgid ""
+"Please double check the contents to ensure you are comfortable sending this "
+"information before clicking Yes."
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:72
+msgid "Contents of crash reports"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:74 usr/local/www/diag_defaults.php:61
+#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:83
+#: usr/local/www/halt.php:61 usr/local/www/halt.php:70
+#: usr/local/www/pkg.php:426 usr/local/www/reboot.php:55
+#: usr/local/www/reboot.php:65 usr/local/www/system_firmware.php:231
+msgid "Yes"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:74
+msgid " - Submit this to the developers for inspection"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:75 usr/local/www/diag_defaults.php:48
+#: usr/local/www/diag_defaults.php:84 usr/local/www/halt.php:50
+#: usr/local/www/halt.php:71 usr/local/www/pkg.php:424
+#: usr/local/www/reboot.php:44 usr/local/www/reboot.php:66
+#: usr/local/www/system_firmware.php:232
+msgid "No"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:75
+msgid " - Just delete the crash report and take me back to the Dashboard"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:79 usr/local/www/diag_arp.php:262
+#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:593
+#: usr/local/www/diag_confbak.php:110 usr/local/www/diag_defaults.php:53
+#: usr/local/www/diag_dns.php:35 usr/local/www/diag_dump_states.php:72
+#: usr/local/www/diag_dump_states_sources.php:66
+#: usr/local/www/diag_gmirror.php:46 usr/local/www/diag_nanobsd.php:50
+#: usr/local/www/diag_ndp.php:107 usr/local/www/diag_packet_capture.php:88
+#: usr/local/www/diag_patterns.php:63 usr/local/www/diag_ping.php:47
+#: usr/local/www/diag_resetstate.php:65 usr/local/www/diag_routes.php:71
+#: usr/local/www/diag_smart.php:18 usr/local/www/diag_sockets.php:45
+#: usr/local/www/diag_states_summary.php:187 usr/local/www/diag_tables.php:45
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_traceroute.php:47
+#: usr/local/www/edit.php:42 usr/local/www/exec.php:96
+#: usr/local/www/fbegin.inc:332 usr/local/www/halt.php:55
+#: usr/local/www/reboot.php:49 usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_restorefullbackup.php:105
+msgid "Diagnostics"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:79
+msgid "Crash reporter"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:100
+msgid "Processing..."
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:109
+msgid "Uploading..."
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:119
+#: usr/local/www/services_captiveportal_zones_edit.php:116
+msgid "Continue"
+msgstr ""
+
+#: usr/local/www/crash_reporter.php:119
+msgid " and delete crash report files from local disk."
+msgstr ""
+
+#: usr/local/www/diag_arp.php:262 usr/local/www/fbegin.inc:206
+msgid "ARP Table"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:272 usr/local/www/diag_ndp.php:117
+#: usr/local/www/firewall_rules.php:300
+msgid "Loading, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_arp.php:315 usr/local/www/diag_ndp.php:134
+#: usr/local/www/interfaces.php:1694
+#: usr/local/www/services_captiveportal_mac.php:170
+#: usr/local/www/services_captiveportal_mac_edit.php:102
+#: usr/local/www/services_captiveportal_mac_edit.php:205
+#: usr/local/www/services_dhcp.php:1247
+#: usr/local/www/services_dhcp_edit.php:374 usr/local/www/services_wol.php:145
+#: usr/local/www/services_wol.php:163 usr/local/www/services_wol_edit.php:86
+#: usr/local/www/services_wol_edit.php:144
+#: usr/local/www/status_captiveportal.php:158
+#: usr/local/www/status_dhcp_leases.php:332
+#: usr/local/www/status_interfaces.php:246
+msgid "MAC address"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:316 usr/local/www/diag_ndp.php:135
+#: usr/local/www/interfaces.php:2004
+#: usr/local/www/services_captiveportal_hostname.php:126
+#: usr/local/www/services_captiveportal_hostname_edit.php:179
+#: usr/local/www/services_captiveportal_hostname_edit.php:183
+#: usr/local/www/services_dhcp.php:1249
+#: usr/local/www/services_dhcp_edit.php:404
+#: usr/local/www/services_dhcpv6.php:860
+#: usr/local/www/services_dhcpv6_edit.php:220
+#: usr/local/www/services_dyndns.php:88
+#: usr/local/www/services_dyndns_edit.php:100
+#: usr/local/www/services_dyndns_edit.php:312
+#: usr/local/www/services_rfc2136.php:82
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:152
+#: usr/local/www/status_dhcp_leases.php:333 usr/local/www/system.php:108
+#: usr/local/www/system.php:312
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:83
+msgid "Hostname"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:317 usr/local/www/diag_logs_filter.php:203
+#: usr/local/www/diag_logs_filter.php:237 usr/local/www/diag_ndp.php:136
+#: usr/local/www/diag_packet_capture.php:243
+#: usr/local/www/firewall_nat_1to1.php:182
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+#: usr/local/www/firewall_nat_1to1_edit.php:295
+#: usr/local/www/firewall_nat_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_edit.php:495
+#: usr/local/www/firewall_nat_npt.php:107
+#: usr/local/www/firewall_nat_npt_edit.php:108
+#: usr/local/www/firewall_nat_npt_edit.php:173
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/firewall_nat_out.php:542
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/firewall_rules_edit.php:906
+#: usr/local/www/firewall_virtual_ip.php:240
+#: usr/local/www/firewall_virtual_ip_edit.php:397
+#: usr/local/www/interfaces_assign.php:482
+#: usr/local/www/interfaces_bridge.php:118
+#: usr/local/www/interfaces_gif.php:112 usr/local/www/interfaces_gre.php:113
+#: usr/local/www/interfaces_groups_edit.php:276
+#: usr/local/www/interfaces_lagg.php:118 usr/local/www/interfaces_ppps.php:110
+#: usr/local/www/interfaces_qinq.php:121 usr/local/www/interfaces_vlan.php:115
+#: usr/local/www/interfaces_wireless.php:110
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_dhcp_relay.php:73
+#: usr/local/www/services_dhcpv6_relay.php:74
+#: usr/local/www/services_dyndns.php:86
+#: usr/local/www/services_igmpproxy_edit.php:166
+#: usr/local/www/services_wol.php:131 usr/local/www/services_wol.php:162
+#: usr/local/www/services_wol_edit.php:86
+#: usr/local/www/services_wol_edit.php:130 usr/local/www/status_graph.php:208
+#: usr/local/www/system_gateways.php:218
+#: usr/local/www/system_gateways_edit.php:114
+#: usr/local/www/system_gateways_edit.php:655
+#: usr/local/www/system_routes.php:236 usr/local/www/vpn_ipsec_phase1.php:610
+#: usr/local/www/vpn_l2tp.php:309 usr/local/www/vpn_openvpn_client.php:530
+#: usr/local/www/vpn_openvpn_server.php:850 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/vpn_pppoe_edit.php:383
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:45
+msgid "Interface"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:343
+msgid "NOTE: Local IPv6 peers use"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:343
+msgid "NDP"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:343
+msgid "instead of ARP"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:52
+msgid "is not a valid authentication server"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:55
+msgid "A username and password must be specified."
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/system_groupmanager.php:533
+#: usr/local/www/system_usermanager.php:99
+#: usr/local/www/system_usermanager.php:959
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "User"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:59
+msgid "authenticated successfully."
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:61
+msgid "This user is a member of these groups"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:65
+msgid "Authentication failed."
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:69 usr/local/www/fbegin.inc:207
+#: usr/local/www/interfaces.php:3238
+#: usr/local/www/services_captiveportal.php:662
+#: usr/local/www/services_captiveportal.php:1039
+msgid "Authentication"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:91
+#: usr/local/www/system_authservers.php:85
+#: usr/local/www/system_usermanager_settings.php:141
+msgid "Authentication Server"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:107
+#: usr/local/www/firewall_aliases_edit.php:602
+#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2693
+#: usr/local/www/interfaces.php:2802
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:523
+#: usr/local/www/services_dyndns_edit.php:104
+#: usr/local/www/services_dyndns_edit.php:356
+#: usr/local/www/status_captiveportal.php:159
+#: usr/local/www/system_usermanager.php:205
+#: usr/local/www/system_usermanager.php:210
+#: usr/local/www/system_usermanager.php:215
+#: usr/local/www/system_usermanager.php:533
+#: usr/local/www/system_usermanager.php:904
+#: usr/local/www/vpn_l2tp_users.php:103
+#: usr/local/www/vpn_l2tp_users_edit.php:83
+#: usr/local/www/vpn_l2tp_users_edit.php:86
+#: usr/local/www/vpn_l2tp_users_edit.php:159
+#: usr/local/www/vpn_openvpn_client.php:621
+#: usr/local/www/vpn_openvpn_client.php:685
+#: usr/local/www/vpn_pppoe_edit.php:548 usr/local/www/vpn_pptp_users.php:100
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:82
+#: usr/local/www/vpn_pptp_users_edit.php:150
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:107
+msgid "Username"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:113 usr/local/www/interfaces.php:2625
+#: usr/local/www/interfaces.php:2699 usr/local/www/interfaces.php:2808
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:529
+#: usr/local/www/services_dyndns_edit.php:102
+#: usr/local/www/services_dyndns_edit.php:365
+#: usr/local/www/system_advanced_notifications.php:232
+#: usr/local/www/system_usermanager.php:211
+#: usr/local/www/system_usermanager.php:216
+#: usr/local/www/system_usermanager.php:540
+#: usr/local/www/system_usermanager_passwordmg.php:51
+#: usr/local/www/system_usermanager_passwordmg.php:111
+#: usr/local/www/system_usermanager_passwordmg.php:115
+#: usr/local/www/vpn_l2tp_users_edit.php:86
+#: usr/local/www/vpn_l2tp_users_edit.php:165
+#: usr/local/www/vpn_openvpn_client.php:631
+#: usr/local/www/vpn_openvpn_client.php:695
+#: usr/local/www/vpn_pppoe_edit.php:549
+#: usr/local/www/vpn_pptp_users_edit.php:82
+#: usr/local/www/vpn_pptp_users_edit.php:156
+msgid "Password"
+msgstr ""
+
+#: usr/local/www/diag_authentication.php:121 usr/local/www/diag_smart.php:370
+#: usr/local/www/diag_testport.php:181
+msgid "Test"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:162
+msgid "Restored base_package menus after configuration restore."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_aliases.php:157
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_aliases_import.php:50
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/services_dnsmasq_edit.php:244
+#: usr/local/www/services_unbound_host_edit.php:247
+msgid "Aliases"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:183
+msgid "Captive Portal Vouchers"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:185 usr/local/www/fbegin.inc:144
+msgid "DHCP Server"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:186 usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_dhcpv6.php:543
+#: usr/local/www/services_router_advertisements.php:262
+msgid "DHCPv6 Server"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:187
+msgid "Firewall Rules"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:188
+#: usr/local/www/diag_logs_filter_summary.php:48 usr/local/www/fbegin.inc:180
+#: usr/local/www/fbegin.inc:292 usr/local/www/interfaces.php:1406
+#: usr/local/www/interfaces_assign.php:44
+#: usr/local/www/interfaces_bridge.php:87
+#: usr/local/www/interfaces_bridge_edit.php:240
+#: usr/local/www/interfaces_gif.php:81
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre.php:82
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups.php:64
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/interfaces_lagg.php:87
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq.php:90
+#: usr/local/www/interfaces_qinq_edit.php:40
+#: usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_vlan_edit.php:152
+#: usr/local/www/interfaces_wireless.php:79
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/services_captiveportal.php:523
+#: usr/local/www/services_captiveportal_zones.php:81
+#: usr/local/www/services_dnsmasq.php:269
+#: usr/local/www/status_interfaces.php:60
+msgid "Interfaces"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:189
+msgid "IPSEC"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:190 usr/local/www/fbegin.inc:129
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:81
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "NAT"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:192 usr/local/www/fbegin.inc:437
+#: usr/local/www/pkg_mgr.php:59 usr/local/www/pkg_mgr.php:106
+#: usr/local/www/pkg_mgr_install.php:58 usr/local/www/pkg_mgr_installed.php:52
+#: usr/local/www/pkg_mgr_installed.php:81
+msgid "Package Manager"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:193
+msgid "PPTP Server"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:194
+msgid "RRD Data"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:195
+msgid "Scheduled Tasks"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:196
+msgid "Syslog"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:197 usr/local/www/diag_logs.php:78
+#: usr/local/www/diag_logs_auth.php:69 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_filter.php:135
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/diag_logs_ipsec.php:73 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69
+#: usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/diag_logs_resolver.php:80
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:267
+#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/fbegin.inc:284 usr/local/www/fbegin.inc:437
+#: usr/local/www/pkg_mgr.php:59 usr/local/www/pkg_mgr.php:106
+#: usr/local/www/pkg_mgr_install.php:58 usr/local/www/pkg_mgr_installed.php:52
+#: usr/local/www/pkg_mgr_installed.php:81
+#: usr/local/www/pkg_mgr_settings.php:63
+#: usr/local/www/status_rrd_graph.php:416
+#: usr/local/www/status_rrd_graph_img.php:44
+#: usr/local/www/status_rrd_graph_settings.php:54
+#: usr/local/www/status_rrd_graph_settings.php:135 usr/local/www/system.php:76
+#: usr/local/www/system.php:289 usr/local/www/system.php:309
+#: usr/local/www/system_advanced_admin.php:275
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_misc.php:245
+#: usr/local/www/system_advanced_network.php:154
+#: usr/local/www/system_advanced_notifications.php:164
+#: usr/local/www/system_advanced_sysctl.php:135
+#: usr/local/www/system_authservers.php:45
+#: usr/local/www/system_camanager.php:52
+#: usr/local/www/system_certmanager.php:58
+#: usr/local/www/system_crlmanager.php:47
+#: usr/local/www/system_firmware.php:103 usr/local/www/system_firmware.php:202
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_settings.php:87
+#: usr/local/www/system_gateway_groups.php:99
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways.php:182
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_groupmanager.php:53
+#: usr/local/www/system_groupmanager_addprivs.php:57
+#: usr/local/www/system_hasync.php:101 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_usermanager.php:58
+#: usr/local/www/system_usermanager_passwordmg.php:44
+#: usr/local/www/system_usermanager_settings.php:50
+msgid "System"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:198
+msgid "Static routes"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:199
+msgid "System tunables"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:200
+msgid "SNMP Server"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:132
+#: usr/local/www/firewall_shaper.php:55
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:74
+msgid "Traffic Shaper"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:202
+msgid "VLANS"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:203 usr/local/www/fbegin.inc:159
+#: usr/local/www/services_wol.php:116 usr/local/www/services_wol.php:128
+#: usr/local/www/services_wol_edit.php:116
+msgid "Wake on LAN"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:207
+msgid "ALL"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:715
+#: usr/local/www/diag_backup.php:752
+msgid "Restore configuration"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:250
+msgid "Reinstall"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:252 usr/local/www/diag_backup.php:774
+msgid "Clear Package Lock"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:254 usr/local/www/diag_tables.php:157
+#: usr/local/www/diag_tables.php:166 usr/local/www/exec.php:279
+#: usr/local/www/exec.php:289
+#: usr/local/www/system_firmware_restorefullbackup.php:167
+msgid "Download"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:256
+msgid "Restore version"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:271
+msgid "You must supply and confirm the password for encryption."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:273 usr/local/www/diag_backup.php:350
+msgid "The supplied 'Password' and 'Confirm' field values must match."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:348
+msgid "You must supply and confirm the password for decryption."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:360
+#, php-format
+msgid "Warning, could not read file %s"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:366
+msgid ""
+"The uploaded file does not appear to contain an encrypted pfsense "
+"configuration."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:373
+msgid "Upgrading m0n0wall configuration to pfsense."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:381 usr/local/www/diag_backup.php:384
+msgid ""
+"You have selected to restore an area but we could not locate the correct xml "
+"tag."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:396
+msgid ""
+"The configuration area has been restored. You may need to reboot the "
+"firewall."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:401
+#, php-format
+msgid ""
+"You have selected to restore the full configuration but we could not locate "
+"a %s tag."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:527
+msgid "The m0n0wall configuration has been restored and upgraded to pfSense."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:555 usr/local/www/diag_backup.php:579
+msgid "The configuration could not be restored."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:560
+msgid "The configuration could not be restored (file upload error)."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:573
+msgid ""
+"XXX - this feature may hose your config (do NOT backrev configs!) - billm"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:582
+msgid "No version selected."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:593
+msgid "Backup/restore"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:636
+#: usr/local/www/system_firmware_restorefullbackup.php:117
+msgid "The firewall configuration has been changed."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:636
+#: usr/local/www/system_firmware_restorefullbackup.php:117
+msgid "The firewall is now rebooting."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:645 usr/local/www/diag_confbak.php:151
+msgid "Config History"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:646 usr/local/www/diag_confbak.php:152
+#: usr/local/www/fbegin.inc:208
+msgid "Backup/Restore"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:656
+msgid "Backup configuration"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:661
+msgid "Click this button to download the system configuration in XML format."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:661
+msgid "Backup area:"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:668
+msgid "Do not backup package information."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:678
+msgid "Encrypt this configuration file."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:686
+msgid ""
+"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config."
+"xml space!)"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:701
+msgid "confirm:"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:708
+msgid "Download configuration"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:720
+msgid "Open a"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:720
+msgid ""
+"configuration XML file and click the button below to restore the "
+"configuration."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:722
+msgid "Restore area:"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:730
+msgid "Configuration file is encrypted."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:737
+msgid "Password :"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:745
+msgid "confirm :"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:753 usr/local/www/diag_ipsec.php:498
+#: usr/local/www/diag_ipsec_leases.php:125
+#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:132
+#: usr/local/www/diag_logs_settings.php:469
+#: usr/local/www/diag_packet_capture.php:339 usr/local/www/diag_routes.php:207
+#: usr/local/www/firewall_aliases.php:291
+#: usr/local/www/firewall_nat_1to1.php:339
+#: usr/local/www/firewall_nat_out.php:637
+#: usr/local/www/firewall_schedule.php:241
+#: usr/local/www/firewall_virtual_ip.php:306
+#: usr/local/www/firewall_virtual_ip_edit.php:520
+#: usr/local/www/interfaces.php:2749 usr/local/www/interfaces_bridge.php:155
+#: usr/local/www/interfaces_bridge_edit.php:467
+#: usr/local/www/interfaces_bridge_edit.php:511
+#: usr/local/www/interfaces_bridge_edit.php:555
+#: usr/local/www/interfaces_gif.php:138 usr/local/www/interfaces_gre.php:139
+#: usr/local/www/interfaces_groups.php:150
+#: usr/local/www/interfaces_lagg.php:144
+#: usr/local/www/interfaces_ppps_edit.php:633
+#: usr/local/www/interfaces_qinq.php:156 usr/local/www/interfaces_vlan.php:141
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/services_captiveportal.php:1087
+#: usr/local/www/services_captiveportal_filemanager.php:213
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_ip.php:172
+#: usr/local/www/services_captiveportal_mac.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:642
+#: usr/local/www/services_dhcp.php:1007 usr/local/www/services_dhcp.php:1032
+#: usr/local/www/services_dhcp.php:1227 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcpv6.php:840
+#: usr/local/www/services_dnsmasq.php:323
+#: usr/local/www/services_dyndns.php:189
+#: usr/local/www/services_dyndns_edit.php:317
+#: usr/local/www/services_dyndns_edit.php:434
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_rfc2136_edit.php:224
+#: usr/local/www/services_unbound.php:394 usr/local/www/services_wol.php:211
+#: usr/local/www/status_rrd_graph_settings.php:247
+#: usr/local/www/system_advanced_network.php:268
+#: usr/local/www/system_advanced_network.php:279
+#: usr/local/www/system_advanced_network.php:290
+#: usr/local/www/system_gateway_groups.php:206
+#: usr/local/www/system_routes.php:372 usr/local/www/vpn_l2tp.php:456
+msgid "Note:"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:753
+msgid "The firewall will reboot after restoring the configuration."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:761
+msgid "Package Functions"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:767
+msgid ""
+"Click this button to reinstall all system packages. This may take a while."
+msgstr ""
+
+#: usr/local/www/diag_backup.php:768
+msgid "Reinstall packages"
+msgstr ""
+
+#: usr/local/www/diag_backup.php:773
+msgid ""
+"Click this button to clear the package lock if a package fails to reinstall "
+"properly after an upgrade."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:55 usr/local/www/diag_confbak.php:185
+#: usr/local/www/diag_gmirror.php:74 usr/local/www/diag_gmirror.php:204
+msgid "Confirm"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:64
+#, php-format
+msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:64 usr/local/www/diag_confbak.php:70
+#: usr/local/www/diag_confbak.php:123 usr/local/www/diag_confbak.php:184
+#: usr/local/www/diag_confbak.php:231 usr/local/www/diag_confbak.php:241
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_nat_edit.php:884
+#: usr/local/www/firewall_nat_out_edit.php:805
+#: usr/local/www/firewall_nat_out_edit.php:816
+#: usr/local/www/firewall_rules_edit.php:1721
+#: usr/local/www/firewall_rules_edit.php:1729
+msgid "n/j/y H:i:s"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:66
+msgid "Unable to revert to the selected configuration."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:70
+#, php-format
+msgid "Deleted backup with timestamp %1$s and description \"%2$s\"."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:110
+msgid "Configuration History"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:123
+msgid "Configuration diff from"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:123 usr/local/www/diag_dump_states.php:213
+#: usr/local/www/diag_dump_states_sources.php:182
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_dhcp.php:864 usr/local/www/services_dhcpv6.php:606
+#: usr/local/www/services_dhcpv6.php:613
+msgid "to"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:165 usr/local/www/diag_gmirror.php:186
+msgid "Confirm Action"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_gmirror.php:191
+msgid "Please confirm the selected action"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:173 usr/local/www/diag_gmirror.php:193
+#: usr/local/www/diag_logs_filter.php:174 usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/firewall_rules_edit.php:836
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:485
+#: usr/local/www/services_captiveportal_mac_edit.php:102
+#: usr/local/www/services_captiveportal_mac_edit.php:186
+#: usr/local/www/services_unbound_acls.php:215
+#: usr/local/www/services_unbound_acls.php:322
+msgid "Action"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:175
+msgid "Restore from Configuration Backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:179
+msgid "Remove Configuration Backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:183
+msgid "Target Configuration"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:184
+#, php-format
+msgid "Timestamp %1$s"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:192
+msgid "Backup Count"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:197
+msgid ""
+"Enter the number of older configurations to keep in the local backup cache. "
+"By default this is 30 for a full install or 5 on NanoBSD."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:199 usr/local/www/diag_logs_settings.php:464
+#: usr/local/www/diag_nanobsd.php:199 usr/local/www/diag_smart.php:244
+#: usr/local/www/edit.php:189 usr/local/www/firewall_aliases_edit.php:851
+#: usr/local/www/firewall_aliases_import.php:215
+#: usr/local/www/firewall_nat_1to1_edit.php:536
+#: usr/local/www/firewall_nat_edit.php:896
+#: usr/local/www/firewall_nat_npt_edit.php:278
+#: usr/local/www/firewall_nat_out.php:265
+#: usr/local/www/firewall_nat_out_edit.php:828
+#: usr/local/www/firewall_rules_edit.php:1261
+#: usr/local/www/firewall_rules_edit.php:1738
+#: usr/local/www/firewall_schedule_edit.php:1168
+#: usr/local/www/firewall_shaper.php:351
+#: usr/local/www/firewall_shaper_layer7.php:566
+#: usr/local/www/firewall_shaper_vinterface.php:319
+#: usr/local/www/firewall_virtual_ip_edit.php:509
+#: usr/local/www/interfaces.php:3379 usr/local/www/interfaces_assign.php:553
+#: usr/local/www/interfaces_bridge_edit.php:604
+#: usr/local/www/interfaces_gif_edit.php:233
+#: usr/local/www/interfaces_gre_edit.php:236
+#: usr/local/www/interfaces_groups_edit.php:333
+#: usr/local/www/interfaces_lagg_edit.php:235
+#: usr/local/www/interfaces_ppps_edit.php:795
+#: usr/local/www/interfaces_qinq_edit.php:397
+#: usr/local/www/interfaces_vlan_edit.php:203
+#: usr/local/www/interfaces_wireless_edit.php:201
+#: usr/local/www/load_balancer_monitor_edit.php:358
+#: usr/local/www/load_balancer_pool_edit.php:334
+#: usr/local/www/load_balancer_relay_action_edit.php:558
+#: usr/local/www/load_balancer_relay_protocol_edit.php:281
+#: usr/local/www/load_balancer_setting.php:162 usr/local/www/pkg_edit.php:435
+#: usr/local/www/pkg_mgr_settings.php:143
+#: usr/local/www/services_captiveportal.php:1081
+#: usr/local/www/services_captiveportal_hostname_edit.php:206
+#: usr/local/www/services_captiveportal_ip_edit.php:226
+#: usr/local/www/services_captiveportal_mac_edit.php:244
+#: usr/local/www/services_captiveportal_vouchers.php:636
+#: usr/local/www/services_captiveportal_vouchers_edit.php:208
+#: usr/local/www/services_dhcp.php:1222
+#: usr/local/www/services_dhcp_edit.php:545
+#: usr/local/www/services_dhcp_relay.php:192
+#: usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcpv6_edit.php:249
+#: usr/local/www/services_dhcpv6_relay.php:193
+#: usr/local/www/services_dnsmasq.php:318
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:164
+#: usr/local/www/services_dnsmasq_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:424
+#: usr/local/www/services_igmpproxy.php:155
+#: usr/local/www/services_igmpproxy_edit.php:282
+#: usr/local/www/services_ntpd.php:411 usr/local/www/services_ntpd_gps.php:574
+#: usr/local/www/services_ntpd_pps.php:217
+#: usr/local/www/services_rfc2136_edit.php:214
+#: usr/local/www/services_router_advertisements.php:407
+#: usr/local/www/services_snmp.php:438 usr/local/www/services_unbound.php:382
+#: usr/local/www/services_unbound_acls.php:117
+#: usr/local/www/services_unbound_acls.php:310
+#: usr/local/www/services_unbound_domainoverride_edit.php:159
+#: usr/local/www/services_unbound_host_edit.php:310
+#: usr/local/www/services_wol_edit.php:161
+#: usr/local/www/status_lb_pool.php:218
+#: usr/local/www/status_rrd_graph_settings.php:236
+#: usr/local/www/system.php:521 usr/local/www/system_advanced_admin.php:611
+#: usr/local/www/system_advanced_firewall.php:559
+#: usr/local/www/system_advanced_misc.php:651
+#: usr/local/www/system_advanced_network.php:330
+#: usr/local/www/system_advanced_notifications.php:101
+#: usr/local/www/system_advanced_notifications.php:343
+#: usr/local/www/system_advanced_sysctl.php:114
+#: usr/local/www/system_advanced_sysctl.php:269
+#: usr/local/www/system_authservers.php:791
+#: usr/local/www/system_camanager.php:369
+#: usr/local/www/system_camanager.php:580
+#: usr/local/www/system_certmanager.php:197
+#: usr/local/www/system_certmanager.php:595
+#: usr/local/www/system_certmanager.php:1016
+#: usr/local/www/system_crlmanager.php:298
+#: usr/local/www/system_crlmanager.php:401
+#: usr/local/www/system_crlmanager.php:433
+#: usr/local/www/system_firmware_settings.php:274
+#: usr/local/www/system_gateway_groups_edit.php:347
+#: usr/local/www/system_gateways_edit.php:861
+#: usr/local/www/system_groupmanager.php:460
+#: usr/local/www/system_groupmanager_addprivs.php:226
+#: usr/local/www/system_routes_edit.php:332
+#: usr/local/www/system_usermanager.php:882
+#: usr/local/www/system_usermanager_addprivs.php:195
+#: usr/local/www/system_usermanager_passwordmg.php:133
+#: usr/local/www/system_usermanager_settings.php:163
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124
+#: usr/local/www/vpn_ipsec.php:266 usr/local/www/vpn_ipsec_keys_edit.php:150
+#: usr/local/www/vpn_ipsec_mobile.php:659
+#: usr/local/www/vpn_ipsec_phase1.php:924
+#: usr/local/www/vpn_ipsec_phase2.php:833
+#: usr/local/www/vpn_ipsec_settings.php:297 usr/local/www/vpn_l2tp.php:450
+#: usr/local/www/vpn_l2tp_users_edit.php:182
+#: usr/local/www/vpn_openvpn_client.php:1100
+#: usr/local/www/vpn_openvpn_csc.php:732
+#: usr/local/www/vpn_openvpn_server.php:1816
+#: usr/local/www/vpn_pppoe_edit.php:604 usr/local/www/vpn_pptp.php:482
+#: usr/local/www/vpn_pptp_users_edit.php:173
+msgid "Save"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:204
+msgid ""
+"NOTE: Be aware of how much space is consumed by backups before adjusting "
+"this value. Current space used by backups: "
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:214
+msgid ""
+"To view the differences between an older configuration and a newer "
+"configuration, select the older configuration using the left column of radio "
+"options and select the newer configuration in the right column, then press "
+"the Diff button."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:219 usr/local/www/diag_confbak.php:275
+msgid "Diff"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:220
+#: usr/local/www/system_firmware_restorefullbackup.php:141
+msgid "Date"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:221 usr/local/www/pkg_mgr_installed.php:125
+#: usr/local/www/widgets/widgets/system_information.widget.php:122
+msgid "Version"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:222 usr/local/www/diag_gmirror.php:288
+#: usr/local/www/diag_system_pftop.php:138
+#: usr/local/www/diag_system_pftop.php:157
+#: usr/local/www/services_captiveportal_filemanager.php:161
+#: usr/local/www/system_firmware_restorefullbackup.php:142
+msgid "Size"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:223
+msgid "Configuration Change"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:235
+msgid "Current"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:243 usr/local/www/diag_ipsec.php:143
+#: usr/local/www/diag_ipsec.php:151 usr/local/www/diag_ipsec.php:158
+#: usr/local/www/diag_ipsec.php:164 usr/local/www/diag_ipsec.php:173
+#: usr/local/www/diag_ipsec.php:188 usr/local/www/diag_ipsec.php:198
+#: usr/local/www/diag_ipsec.php:204 usr/local/www/diag_ipsec.php:302
+#: usr/local/www/diag_ipsec.php:321 usr/local/www/diag_ipsec.php:409
+#: usr/local/www/diag_ipsec.php:418 usr/local/www/diag_ipsec.php:427
+#: usr/local/www/diag_ipsec.php:436
+#: usr/local/www/widgets/widgets/gateways.widget.php:123
+msgid "Unknown"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:263
+msgid "Revert to this configuration"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:266
+msgid "Remove this backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:269
+msgid "Download this backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:281
+msgid "No backups found."
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:53
+msgid "Factory defaults"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:62
+msgid ""
+"The system has been reset to factory defaults and is now rebooting. This may "
+"take a few minutes, depending on your hardware."
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:71
+msgid "If you click"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:71
+msgid "the firewall will:"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:73
+msgid "Reset to factory defaults"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:74
+msgid "LAN IP address will be reset to 192.168.1.1"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:75
+msgid "System will be configured as a DHCP server on the default LAN interface"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:76
+msgid "Reboot after changes are installed"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:77
+msgid ""
+"WAN interface will be set to obtain an address automatically from a DHCP "
+"server"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:78
+msgid "webConfigurator admin username will be reset to 'admin'"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:79
+msgid "webConfigurator admin password will be reset to"
+msgstr ""
+
+#: usr/local/www/diag_defaults.php:81
+msgid "Are you sure you want to proceed?"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:35 usr/local/www/diag_dns.php:277
+#: usr/local/www/fbegin.inc:210
+msgid "DNS Lookup"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:101
+msgid "Host must be a valid hostname or IP address."
+msgstr ""
+
+#: usr/local/www/diag_dns.php:110
+msgid "No response"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:143
+msgid "No record found"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_tables.php:137
+#: usr/local/www/interfaces_ppps_edit.php:673
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:178
+#: usr/local/www/system_advanced_notifications.php:225
+msgid "IP Address"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:157 usr/local/www/system_authservers.php:807
+msgid "Host Name"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:160 usr/local/www/diag_dns.php:234
+#: usr/local/www/diag_logs_settings.php:421
+#: usr/local/www/diag_logs_settings.php:425
+#: usr/local/www/diag_logs_settings.php:429
+#: usr/local/www/services_rfc2136.php:81
+#: usr/local/www/services_rfc2136_edit.php:187
+#: usr/local/www/status_ntpd.php:179 usr/local/www/vpn_ipsec_mobile.php:547
+#: usr/local/www/vpn_ipsec_mobile.php:553
+#: usr/local/www/vpn_ipsec_mobile.php:559
+#: usr/local/www/vpn_ipsec_mobile.php:565
+#: usr/local/www/vpn_ipsec_mobile.php:589
+#: usr/local/www/vpn_ipsec_mobile.php:595
+#: usr/local/www/vpn_openvpn_client.php:445
+#: usr/local/www/vpn_openvpn_client.php:1117
+#: usr/local/www/vpn_openvpn_csc.php:316 usr/local/www/vpn_openvpn_csc.php:551
+#: usr/local/www/vpn_openvpn_csc.php:559 usr/local/www/vpn_openvpn_csc.php:567
+#: usr/local/www/vpn_openvpn_csc.php:575 usr/local/www/vpn_openvpn_csc.php:603
+#: usr/local/www/vpn_openvpn_csc.php:611 usr/local/www/vpn_openvpn_csc.php:699
+#: usr/local/www/vpn_openvpn_csc.php:707
+#: usr/local/www/vpn_openvpn_server.php:479
+#: usr/local/www/vpn_openvpn_server.php:743
+#: usr/local/www/vpn_openvpn_server.php:1554
+#: usr/local/www/vpn_openvpn_server.php:1562
+#: usr/local/www/vpn_openvpn_server.php:1570
+#: usr/local/www/vpn_openvpn_server.php:1578
+#: usr/local/www/vpn_openvpn_server.php:1626
+#: usr/local/www/vpn_openvpn_server.php:1634
+#: usr/local/www/vpn_openvpn_server.php:1722
+#: usr/local/www/vpn_openvpn_server.php:1730
+msgid "Server"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:160
+msgid "Query Time"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:182
+msgid "Resolve DNS hostname or IP"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:185 usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:191
+msgid "Hostname or IP"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:229
+msgid "Resolution time per server"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:237
+msgid "Query time"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:261
+msgid "More Information:"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:263 usr/local/www/diag_ping.php:47
+#: usr/local/www/diag_ping.php:97 usr/local/www/diag_ping.php:144
+#: usr/local/www/fbegin.inc:222
+msgid "Ping"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:266
+msgid ""
+"NOTE: The following links are to external services, so their reliability "
+"cannot be guaranteed."
+msgstr ""
+
+#: usr/local/www/diag_dns.php:267
+msgid "IP WHOIS @ DNS Stuff"
+msgstr ""
+
+#: usr/local/www/diag_dns.php:268
+msgid "IP Info @ DNS Stuff"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:52
+#: usr/local/www/diag_dump_states_sources.php:52
+#: usr/local/www/status_openvpn.php:63
+#: usr/local/www/widgets/widgets/openvpn.widget.php:20
+msgid "invalid input"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:72
+msgid "Show States"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:108
+#: usr/local/www/diag_dump_states_sources.php:96
+#: usr/local/www/status_openvpn.php:134
+#: usr/local/www/widgets/widgets/openvpn.widget.php:87
+msgid "An error occurred."
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:124
+#: usr/local/www/diag_dump_states_sources.php:112
+#: usr/local/www/diag_resetstate.php:78
+#: usr/local/www/diag_states_summary.php:153
+#: usr/local/www/diag_states_summary.php:155 usr/local/www/fbegin.inc:230
+msgid "States"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:126
+#: usr/local/www/diag_dump_states_sources.php:113
+#: usr/local/www/diag_resetstate.php:80
+msgid "Source Tracking"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:127
+#: usr/local/www/diag_dump_states_sources.php:114
+#: usr/local/www/diag_resetstate.php:81
+msgid "Reset States"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:149
+msgid "Current total state count"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/diag_dump_states_sources.php:133
+msgid "Filter expression:"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:154
+#: usr/local/www/diag_dump_states_sources.php:135
+#: usr/local/www/diag_logs.php:127 usr/local/www/diag_logs_filter.php:219
+#: usr/local/www/diag_logs_filter.php:282
+#: usr/local/www/diag_logs_gateways.php:129
+#: usr/local/www/diag_logs_resolver.php:129
+msgid "Filter"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:156
+msgid "Kill"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:169
+msgid "Int"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:170
+#: usr/local/www/diag_logs_filter.php:329
+#: usr/local/www/diag_logs_filter_dynamic.php:140
+#: usr/local/www/diag_states_summary.php:154
+#: usr/local/www/firewall_nat.php:205 usr/local/www/firewall_rules.php:339
+msgid "Proto"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:171
+msgid "Source -> Router -> Destination"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:172
+#: usr/local/www/diag_system_pftop.php:140
+#: usr/local/www/status_dhcpv6_leases.php:507
+msgid "State"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:213
+msgid "Remove all state entries from"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:224
+msgid "No states were found."
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:237
+msgid "States matching current filter"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:66
+msgid "Show Source Tracking"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:147
+msgid "Source -> Destination"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:148
+msgid "# States"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:149
+msgid "# Connections"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:150
+#: usr/local/www/diag_system_pftop.php:156
+#: usr/local/www/status_interfaces.php:377
+msgid "Rate"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:182
+msgid "Remove all source tracking entries from"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:192
+msgid "No source tracking entries were found."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:46 usr/local/www/fbegin.inc:215
+msgid "GEOM Mirrors"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:58
+msgid "Forget all formerly connected consumers"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:59 usr/local/www/diag_gmirror.php:301
+msgid "Remove metadata from disk"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:60
+msgid "Insert consumer into mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:61
+msgid "Remove consumer from mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:62
+msgid "Reactivate consumer on mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:63
+msgid "Deactivate consumer from mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:64
+msgid "Force rebuild of mirror consumer"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:81
+msgid "You must supply a valid mirror name."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:84
+msgid "You must supply a valid consumer name"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:90
+msgid ""
+"Consumer is already in use and cannot be inserted. Remove consumer from "
+"existing mirror first."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:92
+msgid ""
+"Consumer has metadata from an existing mirror. Clear metadata before "
+"inserting consumer."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:95
+msgid ""
+"Mirror is not in a COMPLETE state, cannot insert consumer. Forget "
+"disconnected disks or wait for rebuild to finish."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:99
+msgid "Consumer is in use and cannot be cleared. Deactivate disk first."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:101
+msgid "Consumer has no metadata to clear."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:105
+msgid "Consumer is already present on specified mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:107
+msgid "Consumer has no metadata and cannot be reactivated."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:114
+msgid "Consumer must be present on the specified mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:166
+msgid ""
+"There was an error performing the chosen mirror operation. Check the System "
+"Log for details."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:176 usr/local/www/diag_nanobsd.php:137
+#: usr/local/www/interfaces.php:3490 usr/local/www/interfaces.php:3499
+#: usr/local/www/interfaces_groups_edit.php:325
+#: usr/local/www/load_balancer_virtual_server_edit.php:210
+#: usr/local/www/load_balancer_virtual_server_edit.php:229
+#: usr/local/www/system_advanced_admin.php:322
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_misc.php:302
+#: usr/local/www/system_advanced_network.php:203
+#: usr/local/www/system_advanced_sysctl.php:173
+#: usr/local/www/system_firmware_settings.php:175
+#: usr/local/www/system_routes_edit.php:393
+msgid "NOTE:"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:178
+msgid ""
+"The options on this page are intended for use by advanced users only. This "
+"page is for managing existing mirrors, not creating new mirrors."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:196
+msgid "Mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:200
+msgid "Consumer"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:209
+msgid "GEOM Mirror information"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:213
+msgid "Mirror Status"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:222
+msgid "Component"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:234
+msgid "Forget Disconnected Disks"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:242 usr/local/www/diag_gmirror.php:257
+msgid "Rebuild"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:243 usr/local/www/diag_gmirror.php:258
+msgid "Deactivate"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:244 usr/local/www/diag_gmirror.php:259
+#: usr/local/www/load_balancer_pool_edit.php:303
+#: usr/local/www/load_balancer_pool_edit.php:323
+#: usr/local/www/load_balancer_relay_protocol_edit.php:254
+msgid "Remove"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:267
+msgid "No Mirrors Found"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:271
+msgid ""
+"Some disk operations may only be performed when there are multiple consumers "
+"present in a mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:276
+msgid "Consumer information"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:280
+msgid "Available Consumers"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:289
+msgid "Add to Mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:300
+msgid "Reactivate on:"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:316
+msgid "No unused consumers found"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:320
+msgid ""
+"Consumers may only be added to a mirror if they are larger than the size of "
+"the mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:327
+msgid ""
+"To repair a failed mirror, first perform a 'Forget' command on the mirror, "
+"followed by an 'insert' action on the new consumer."
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:49 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_sad.php:50 usr/local/www/diag_ipsec_spd.php:50
+#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:73
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:139
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_ipsec.php:77 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:73
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/diag_logs_resolver.php:84
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:271
+#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:181
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_mobile.php:241
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+#: usr/local/www/vpn_ipsec_settings.php:168
+msgid "IPsec"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_leases.php:61
+#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:64
+msgid "Overview"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_leases.php:62 usr/local/www/diag_ipsec_sad.php:76
+#: usr/local/www/diag_ipsec_spd.php:65
+msgid "Leases"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:94 usr/local/www/diag_ipsec_leases.php:63
+#: usr/local/www/diag_ipsec_sad.php:50 usr/local/www/diag_ipsec_sad.php:77
+#: usr/local/www/diag_ipsec_spd.php:66
+msgid "SAD"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:95 usr/local/www/diag_ipsec_leases.php:64
+#: usr/local/www/diag_ipsec_sad.php:78 usr/local/www/diag_ipsec_spd.php:50
+#: usr/local/www/diag_ipsec_spd.php:67
+msgid "SPD"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_leases.php:65
+#: usr/local/www/diag_ipsec_sad.php:79 usr/local/www/diag_ipsec_spd.php:68
+msgid "Logs"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:108
+msgid "Local ID"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_ppps_edit.php:665
+#: usr/local/www/vpn_pppoe.php:105
+msgid "Local IP"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:110
+msgid "Remote ID"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:111
+msgid "Remote IP"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:112
+msgid "Role"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:113
+msgid "Reauth"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:114 usr/local/www/diag_ipsec.php:284
+msgid "Algo"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:147
+msgid "Any identifier"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:162 usr/local/www/diag_ipsec.php:202
+msgid "Port: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:246 usr/local/www/diag_ipsec.php:472
+msgid "Connect VPN"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:254
+msgid "Disconnect VPN"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:257
+msgid "Disconnect VPN Connection"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:280
+msgid "Local subnets"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:281
+msgid "Local SPI(s)"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:282
+msgid "Remote subnets"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:283
+msgid "Times"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:285
+msgid "Stats"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:308
+msgid "Local: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:310
+msgid "Remote: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:326
+msgid "Rekey: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:327
+msgid "Life: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:328
+msgid "Install: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:350
+msgid "IPComp: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:355
+msgid "Bytes-In: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:357
+msgid "Packets-In: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:359
+msgid "Bytes-Out: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:361
+msgid "Packets-Out: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:367
+msgid "Disconnect Child SA"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:452 usr/local/www/diag_ipsec.php:453
+msgid "Awaiting connections"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:465 usr/local/www/diag_ipsec.php:466
+msgid "Disconnected"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:500
+msgid "You can configure IPsec"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:79
+msgid "Pool: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:80
+msgid "usage: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:81
+msgid "online: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:87 usr/local/www/firewall_rules.php:335
+#: usr/local/www/load_balancer_relay_action_edit.php:511
+msgid "ID"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:88 usr/local/www/diag_ping.php:60
+#: usr/local/www/diag_ping.php:100 usr/local/www/diag_testport.php:60
+#: usr/local/www/diag_testport.php:117 usr/local/www/diag_traceroute.php:64
+#: usr/local/www/diag_traceroute.php:100
+#: usr/local/www/load_balancer_monitor_edit.php:280
+#: usr/local/www/load_balancer_monitor_edit.php:313
+#: usr/local/www/services_dnsmasq.php:352
+#: usr/local/www/services_dnsmasq_edit.php:215
+#: usr/local/www/services_dnsmasq_edit.php:256
+#: usr/local/www/services_rfc2136_edit.php:175
+#: usr/local/www/services_unbound.php:420
+#: usr/local/www/services_unbound_host_edit.php:216
+#: usr/local/www/services_unbound_host_edit.php:259
+msgid "Host"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:104
+msgid "No leases from this pool yet."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:114
+msgid "No IPsec pools."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:126
+#: usr/local/www/diag_ipsec_sad.php:136 usr/local/www/diag_ipsec_spd.php:133
+msgid "You can configure your IPsec"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:126
+#: usr/local/www/diag_ipsec_sad.php:136 usr/local/www/diag_ipsec_spd.php:133
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "here."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_spd.php:79
+#: usr/local/www/diag_logs_filter.php:327
+#: usr/local/www/diag_logs_filter_dynamic.php:138
+#: usr/local/www/firewall_nat_edit.php:548
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_out.php:306
+#: usr/local/www/firewall_nat_out.php:543
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:533
+#: usr/local/www/firewall_rules.php:340
+#: usr/local/www/firewall_rules_edit.php:1034
+#: usr/local/www/vpn_ipsec_mobile.php:385
+#: usr/local/www/vpn_ipsec_mobile.php:403
+#: usr/local/www/widgets/widgets/log.widget.php:181
+msgid "Source"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_spd.php:80
+#: usr/local/www/diag_logs_filter.php:328
+#: usr/local/www/diag_logs_filter_dynamic.php:139
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_nat_out.php:308
+#: usr/local/www/firewall_nat_out.php:545
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:578
+#: usr/local/www/firewall_rules.php:342
+#: usr/local/www/firewall_rules_edit.php:1137
+#: usr/local/www/widgets/widgets/log.widget.php:182
+msgid "Destination"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_spd.php:82
+#: usr/local/www/diag_logs_filter.php:193
+#: usr/local/www/diag_packet_capture.php:277
+#: usr/local/www/firewall_nat_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:513
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_shaper_layer7.php:467
+#: usr/local/www/interfaces_bridge_edit.php:310
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:425
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/services_rfc2136_edit.php:193
+#: usr/local/www/status_upnp.php:88
+#: usr/local/www/system_advanced_admin.php:333
+#: usr/local/www/vpn_ipsec_phase2.php:710
+#: usr/local/www/vpn_openvpn_client.php:500
+#: usr/local/www/vpn_openvpn_client.php:1116
+#: usr/local/www/vpn_openvpn_server.php:815
+msgid "Protocol"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:93
+msgid "SPI"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:94
+msgid "Enc. alg."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:95
+msgid "Auth. alg."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:96
+msgid "Data"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:115
+msgid "Do you really want to delete this security association?"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_sad.php:124
+msgid "No IPsec security associations."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_spd.php:81
+#: usr/local/www/firewall_rules_edit.php:954
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:444
+#: usr/local/www/services_captiveportal_hostname_edit.php:163
+msgid "Direction"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_spd.php:83
+msgid "Tunnel endpoints"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_spd.php:109
+msgid "incoming (as seen by firewall)"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_spd.php:116
+msgid "outgoing (as seen by firewall)"
+msgstr ""
+
+#: usr/local/www/diag_ipsec_spd.php:121
+msgid "No IPsec security policies."
+msgstr ""
+
+#: usr/local/www/diag_limiter_info.php:106
+msgid "Gathering Limiter information, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_logs.php:66 usr/local/www/diag_logs_auth.php:57
+#: usr/local/www/diag_logs_dhcp.php:60 usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+#: usr/local/www/diag_logs_filter_summary.php:35
+#: usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_ipsec.php:61 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_openvpn.php:46 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_relayd.php:56
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_settings.php:187 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_wireless.php:57
+msgid "System logs"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:66 usr/local/www/diag_logs.php:96
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/diag_logs_resolver.php:98
+#: usr/local/www/diag_logs_routing.php:84
+#: usr/local/www/diag_logs_wireless.php:86
+msgid "General"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter.php:136
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_ipsec.php:74 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/diag_logs_ppp.php:70
+#: usr/local/www/diag_logs_relayd.php:69
+#: usr/local/www/diag_logs_resolver.php:81
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:268
+#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/fbegin.inc:300 usr/local/www/firewall_aliases.php:157
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_aliases_import.php:50
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:81
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_rules.php:50
+#: usr/local/www/firewall_rules_edit.php:805
+#: usr/local/www/firewall_schedule.php:51
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/firewall_shaper.php:55
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:74
+#: usr/local/www/firewall_virtual_ip.php:203
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/services_igmpproxy_edit.php:46
+msgid "Firewall"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_dhcp.php:60 usr/local/www/diag_logs_dhcp.php:74
+#: usr/local/www/diag_logs_filter.php:137
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_ipsec.php:75 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_openvpn.php:73 usr/local/www/diag_logs_ppp.php:71
+#: usr/local/www/diag_logs_relayd.php:70
+#: usr/local/www/diag_logs_resolver.php:82
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:269
+#: usr/local/www/diag_logs_vpn.php:129 usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/interfaces.php:1411 usr/local/www/services_dhcp_edit.php:335
+msgid "DHCP"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:57
+#: usr/local/www/diag_logs_auth.php:72 usr/local/www/diag_logs_dhcp.php:75
+#: usr/local/www/diag_logs_filter.php:138
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_gateways.php:83
+#: usr/local/www/diag_logs_ipsec.php:76 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72
+#: usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/diag_logs_resolver.php:83
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:270
+#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_wireless.php:72
+msgid "Portal Auth"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:74
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:140
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/diag_logs_ipsec.php:78 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/diag_logs_resolver.php:85
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:272
+#: usr/local/www/diag_logs_vpn.php:132 usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/interfaces.php:1411 usr/local/www/status_interfaces.php:165
+msgid "PPP"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:75
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:141
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_filter_summary.php:195
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_ipsec.php:79 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/diag_logs_ppp.php:75
+#: usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/diag_logs_resolver.php:86
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:273 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/fbegin.inc:316
+#: usr/local/www/status_rrd_graph_settings.php:158
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_mobile.php:241
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+#: usr/local/www/vpn_ipsec_settings.php:168 usr/local/www/vpn_l2tp.php:39
+#: usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users_edit.php:39 usr/local/www/vpn_pppoe.php:88
+#: usr/local/www/vpn_pptp.php:197 usr/local/www/vpn_pptp_users.php:72
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "VPN"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:76
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:142
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter_summary.php:196
+#: usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_ipsec.php:80 usr/local/www/diag_logs_ntpd.php:74
+#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76
+#: usr/local/www/diag_logs_relayd.php:56 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_resolver.php:87
+#: usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:274
+#: usr/local/www/diag_logs_vpn.php:134 usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/status_lb_pool.php:63 usr/local/www/status_lb_vs.php:57
+msgid "Load Balancer"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:78
+#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:144
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/diag_logs_filter_summary.php:198
+#: usr/local/www/diag_logs_gateways.php:89
+#: usr/local/www/diag_logs_ipsec.php:82 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:77
+#: usr/local/www/diag_logs_resolver.php:89
+#: usr/local/www/diag_logs_routing.php:76
+#: usr/local/www/diag_logs_settings.php:276
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_wireless.php:78
+#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:183
+#: usr/local/www/services_ntpd.php:180 usr/local/www/services_ntpd.php:237
+#: usr/local/www/services_ntpd_gps.php:366
+#: usr/local/www/services_ntpd_pps.php:117 usr/local/www/status_ntpd.php:164
+#: usr/local/www/status_rrd_graph_settings.php:62
+msgid "NTP"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:79
+#: usr/local/www/diag_logs_dhcp.php:82 usr/local/www/diag_logs_filter.php:145
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/diag_logs_filter_summary.php:199
+#: usr/local/www/diag_logs_gateways.php:90
+#: usr/local/www/diag_logs_ipsec.php:83 usr/local/www/diag_logs_ntpd.php:77
+#: usr/local/www/diag_logs_openvpn.php:81 usr/local/www/diag_logs_ppp.php:79
+#: usr/local/www/diag_logs_relayd.php:78
+#: usr/local/www/diag_logs_resolver.php:90
+#: usr/local/www/diag_logs_routing.php:77
+#: usr/local/www/diag_logs_settings.php:187
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_vpn.php:137 usr/local/www/diag_logs_wireless.php:79
+#: usr/local/www/load_balancer_monitor.php:111
+#: usr/local/www/load_balancer_pool.php:120
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_setting.php:123
+#: usr/local/www/load_balancer_virtual_server.php:121
+#: usr/local/www/status_rrd_graph.php:452
+#: usr/local/www/status_rrd_graph_settings.php:171
+#: usr/local/www/system_authservers.php:450
+#: usr/local/www/system_firmware_settings.php:87
+#: usr/local/www/system_groupmanager.php:290
+#: usr/local/www/system_groupmanager_addprivs.php:170
+#: usr/local/www/system_usermanager.php:496
+#: usr/local/www/system_usermanager_addprivs.php:159
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/vpn_ipsec_settings.php:168
+msgid "Settings"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:97 usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_gateways.php:99
+#: usr/local/www/diag_logs_resolver.php:99
+#: usr/local/www/diag_logs_routing.php:85
+#: usr/local/www/diag_logs_wireless.php:87 usr/local/www/fbegin.inc:176
+#: usr/local/www/status_gateway_groups.php:66
+#: usr/local/www/status_gateway_groups.php:77
+#: usr/local/www/status_gateways.php:52 usr/local/www/status_gateways.php:64
+#: usr/local/www/system_gateway_groups.php:119
+#: usr/local/www/system_gateway_groups.php:132
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways.php:182 usr/local/www/system_gateways.php:203
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_routes.php:220
+msgid "Gateways"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_resolver.php:100
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_routing.php:86
+#: usr/local/www/diag_logs_wireless.php:88 usr/local/www/fbegin.inc:108
+msgid "Routing"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:99 usr/local/www/diag_logs_gateways.php:101
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_resolver.php:101
+#: usr/local/www/diag_logs_routing.php:87
+#: usr/local/www/diag_logs_wireless.php:89
+msgid "Resolver"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:100 usr/local/www/diag_logs_gateways.php:102
+#: usr/local/www/diag_logs_resolver.php:102
+#: usr/local/www/diag_logs_routing.php:88
+#: usr/local/www/diag_logs_wireless.php:57
+#: usr/local/www/diag_logs_wireless.php:90 usr/local/www/fbegin.inc:201
+#: usr/local/www/interfaces_assign.php:467
+#: usr/local/www/interfaces_bridge.php:102 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_ppps.php:94
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_vlan.php:99
+#: usr/local/www/interfaces_wireless.php:79
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/status_rrd_graph.php:431
+#: usr/local/www/status_rrd_graph_settings.php:150
+#: usr/local/www/status_wireless.php:42
+msgid "Wireless"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:110 usr/local/www/diag_logs_gateways.php:112
+#: usr/local/www/diag_logs_resolver.php:112
+#, php-format
+msgid "Last %s system log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs.php:121 usr/local/www/diag_logs_auth.php:93
+#: usr/local/www/diag_logs_dhcp.php:96 usr/local/www/diag_logs_filter.php:410
+#: usr/local/www/diag_logs_gateways.php:123
+#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:92
+#: usr/local/www/diag_logs_openvpn.php:98 usr/local/www/diag_logs_ppp.php:96
+#: usr/local/www/diag_logs_relayd.php:92
+#: usr/local/www/diag_logs_resolver.php:123
+#: usr/local/www/diag_logs_routing.php:103 usr/local/www/diag_logs_vpn.php:188
+#: usr/local/www/diag_logs_wireless.php:105
+msgid "Clear log"
+msgstr ""
+
+#: usr/local/www/diag_logs_auth.php:89
+#, php-format
+msgid "Last %s Portal Auth log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_dhcp.php:92
+#, php-format
+msgid "Last %s DHCP service log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:58
+msgid "Cannot resolve"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:78
+msgid "The rule that triggered this action is"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter_summary.php:206
+msgid "Normal View"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:153
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter_summary.php:207
+msgid "Dynamic View"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:154
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:208
+msgid "Summary View"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:322
+#: usr/local/www/diag_logs_filter_dynamic.php:136
+#: usr/local/www/diag_logs_vpn.php:175 usr/local/www/diag_system_pftop.php:141
+#: usr/local/www/firewall_schedule_edit.php:922
+#: usr/local/www/widgets/widgets/log.widget.php:179
+msgid "Time"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:185
+msgid "Source IP Address"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:189
+#: usr/local/www/diag_system_pftop.php:158 usr/local/www/diag_testport.php:129
+#: usr/local/www/firewall_nat_out.php:307
+#: usr/local/www/firewall_nat_out.php:544
+msgid "Source Port"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:197
+#: usr/local/www/diag_logs_filter.php:277
+msgid "Quantity"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:207
+msgid "Destination IP Address"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:211
+#: usr/local/www/diag_system_pftop.php:151
+#: usr/local/www/firewall_nat_out.php:309
+#: usr/local/www/firewall_nat_out.php:546
+msgid "Destination Port"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:215
+msgid "Protocol Flags"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:225
+#: usr/local/www/diag_logs_filter.php:288
+#, php-format
+msgid "Matches %1$s regular expression%2$s."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:226
+msgid "Precede with exclamation (!) as first character to exclude match."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:273 usr/local/www/diag_routes.php:193
+msgid "Filter expression"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:314
+#, php-format
+msgid "Last %s firewall log entries."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:316
+msgid "matched log entries."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:317
+#, php-format
+msgid "Max(%s)"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:321
+#: usr/local/www/diag_logs_filter_dynamic.php:135
+#: usr/local/www/widgets/widgets/log.widget.php:178
+msgid "Act"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:323
+#: usr/local/www/diag_logs_filter_dynamic.php:137
+#: usr/local/www/firewall_nat.php:204 usr/local/www/services_rfc2136.php:80
+msgid "If"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:325
+msgid "Rule"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:370
+#: usr/local/www/diag_logs_filter.php:376
+msgid "Click to resolve"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:371
+msgid "Easy Rule: Add to Block List"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:371
+msgid "Do you really want to add this BLOCK rule?"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:377
+msgid "Easy Rule: Pass this traffic"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:377
+msgid "Do you really want to add this PASS rule?"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:398
+#, php-format
+msgid "Last %s firewall log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+msgid "Firewall (Dynamic View)"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#, php-format
+msgid "Last %s records"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+msgid "Pause:"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_dynamic.php:173
+msgid "TCP Flags"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:35
+msgid "Firewall Log Summary"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/load_balancer_relay_protocol_edit.php:231
+msgid "Actions"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:49
+msgid "Protocols"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:50
+msgid "Source IPs"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:51
+msgid "Destination IPs"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:52
+msgid "Source Ports"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:53
+msgid "Destination Ports"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:73
+msgid "data"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:83
+#: usr/local/www/widgets/widgets/log.widget.php:201
+#: usr/local/www/widgets/widgets/log.widget.php:204
+msgid "Reverse Resolve with DNS"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:219
+#, php-format
+msgid ""
+"This is a firewall log summary, of the last %1$s lines of the firewall log "
+"(Max %2$s)."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter_summary.php:220
+msgid "NOTE: IE8 users must enable compatibility view."
+msgstr ""
+
+#: usr/local/www/diag_logs_ipsec.php:93
+#, php-format
+msgid "Last %s IPsec log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_ntpd.php:87
+#, php-format
+msgid "Last %s NTP log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_openvpn.php:91
+#, php-format
+msgid "Last %s OpenVPN log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_ppp.php:89
+#, php-format
+msgid "Last %s PPP log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_relayd.php:88
+#, php-format
+msgid "Last %s Load Balancer log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_routing.php:99
+#, php-format
+msgid "Routing daemon log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:88
+#: usr/local/www/diag_logs_settings.php:366
+msgid "Reset Log Files"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:90
+msgid "The log files have been reset."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:98
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #1."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:101
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #2."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:104
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #3."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:108
+msgid "Number of log entries to show must be between 5 and 2000."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:113
+msgid "Log file size must be a positive integer greater than 5120."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:178
+#: usr/local/www/system_advanced_admin.php:650
+msgid "webConfigurator configuration has changed. Restarting webConfigurator."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:180
+msgid "WebGUI process is restarting."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:286
+msgid "General Logging Options"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:291
+msgid "Show log entries in reverse order (newest entries on top)"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:297
+msgid ""
+"Hint: This is only the number of log entries displayed in the GUI. It does "
+"not affect how many entries are contained in the actual log files."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:303
+msgid ""
+"Logs are held in constant-size circular log files. This field controls how "
+"large each log file is, and thus how many entries may exist inside the log. "
+"By default this is approximately 500KB per log file, and there are nearly 20 "
+"such log files."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:305
+msgid ""
+"NOTE: Log sizes are changed the next time a log file is cleared or deleted. "
+"To immediately increase the size of the log files, you must first save the "
+"options to set the size, then clear all logs using the \"Reset Log Files\" "
+"option farther down this page. "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:306
+msgid ""
+"Be aware that increasing this value increases every log file size, so disk "
+"usage will increase significantly."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:307
+msgid "Disk space currently used by log files: "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:308
+msgid "Remaining disk space for log files: "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:315
+msgid "Log packets matched from the default block rules put in the ruleset"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:316
+msgid ""
+"Hint: packets that are blocked by the implicit default block rule will not "
+"be logged if you uncheck this option. Per-rule logging options are still "
+"respected."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:319
+msgid "Log packets matched from the default pass rules put in the ruleset"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:320
+msgid ""
+"Hint: packets that are allowed by the implicit default pass rule will be "
+"logged if you check this option. Per-rule logging options are still "
+"respected."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:323
+msgid "Log packets blocked by 'Block Bogon Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:326
+msgid "Log packets blocked by 'Block Private Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:332
+msgid "Log errors from the web server process."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:333
+msgid ""
+"Hint: If this is checked, errors from the lighttpd web server process for "
+"the GUI or Captive Portal will appear in the main system log."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:338
+msgid "Show raw filter logs"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:339
+msgid ""
+"Hint: If this is checked, filter logs are shown as generated by the packet "
+"filter, without any formatting. This will reveal more detailed information, "
+"but it is more difficult to read."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:349
+msgid "Show the applied rule description below or in the firewall log rows."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:351
+msgid ""
+"Displaying rule descriptions for all lines in the log might affect "
+"performance with large rule sets."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:358
+msgid "Disable writing log files to the local disk"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:360
+msgid "Disable writing log files to the local RAM disk"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:366
+msgid ""
+"Do you really want to reset the log files? This will erase all local log "
+"data."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:368
+msgid ""
+"Note: Clears all local log files and reinitializes them as empty logs. This "
+"also restarts the DHCP daemon. Use the Save button first if you have made "
+"any setting changes."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:375
+msgid "Remote Logging Options"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:378 usr/local/www/diag_ping.php:114
+#: usr/local/www/diag_system_pftop.php:159 usr/local/www/diag_testport.php:143
+#: usr/local/www/diag_traceroute.php:114
+msgid "Source Address"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:394
+msgid ""
+"This option will allow the logging daemon to bind to a single IP address, "
+"rather than all IP addresses."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:395
+msgid ""
+"If you pick a single IP, remote syslog severs must all be of that IP type. "
+"If you wish to mix IPv4 and IPv6 remote syslog servers, you must bind to all "
+"interfaces."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:397
+msgid ""
+"NOTE: If an IP address cannot be located on the chosen interface, the daemon "
+"will bind to all addresses."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:401 usr/local/www/diag_ping.php:105
+#: usr/local/www/diag_testport.php:161 usr/local/www/diag_traceroute.php:105
+msgid "IP Protocol"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:408
+msgid ""
+"This option is only used when a non-default address is chosen as the source "
+"above. This option only expresses a preference; If an IP address of the "
+"selected type is not found on the chosen interface, the other type will be "
+"tried."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:412
+msgid "Enable Remote Logging"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:414
+msgid "Send log messages to remote syslog server"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:417
+msgid "Remote Syslog Servers"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:434
+msgid "IP addresses of remote syslog servers, or an IP:port."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:440
+msgid "Remote Syslog Contents"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:443
+msgid "Everything"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:445
+msgid "System events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:447
+msgid "Firewall events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:449
+msgid "DHCP service events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:451
+msgid "Portal Auth events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:453
+msgid "VPN (PPTP, IPsec, OpenVPN) events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:455
+msgid "Gateway Monitor events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:457
+msgid "Server Load Balancer events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:459
+msgid "Wireless events"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:470
+msgid ""
+"syslog sends UDP datagrams to port 514 on the specified remote syslog "
+"server, unless another port is specified. Be sure to set syslogd on the "
+"remote server to accept syslog messages from"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:144
+msgid "PPTP Logins"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:147
+msgid "PPTP Raw"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:150
+msgid "PPPoE Logins"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:153
+msgid "PPPoE Raw"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:156
+msgid "L2TP Logins"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:159
+msgid "L2TP Raw"
+msgstr ""
+
+#: usr/local/www/diag_logs_vpn.php:171
+#, php-format
+msgid "Last %1$s %2$s VPN log entries"
+msgstr ""
+
+#: usr/local/www/diag_logs_wireless.php:101
+#, php-format
+msgid "Wireless (hostapd) log entries"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:50 usr/local/www/fbegin.inc:236
+msgid "NanoBSD"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:70
+msgid "Setting slice information, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:79
+msgid "The boot slice has been set to"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:86
+msgid "Duplicating slice. Please wait, this will take a moment..."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:95
+msgid "The slice has been duplicated."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:95
+msgid ""
+"If you would like to boot from this newly duplicated slice please set it "
+"using the bootup information area."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:97
+msgid "There was an error while duplicating the slice. Operation aborted."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:139
+#: usr/local/www/system_advanced_admin.php:324
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_misc.php:304
+#: usr/local/www/system_advanced_network.php:205
+#: usr/local/www/system_advanced_sysctl.php:175
+msgid "The options on this page are intended for use by advanced users only."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:145
+msgid "Bootup information"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:148
+msgid "NanoBSD Image size"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:154
+msgid "Bootup"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:157
+msgid "Bootup slice is currently:"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:158
+msgid "This will switch the bootup slice to the alternate slice."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:168
+msgid "Media Read/Write Status"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:182
+msgid "Read/Write"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:184
+msgid "Switch to Read-Only"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:186
+msgid "Read-Only"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:188
+msgid "Switch to Read/Write"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:191
+msgid ""
+"NOTE: This setting is only temporary, and can be switched dynamically in the "
+"background."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:198
+msgid "Keep media mounted read/write at all times."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:207
+msgid "Duplicate bootup slice to alternate"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:210
+msgid "Duplicate bootup slice"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:213
+msgid "Destination slice:"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:220
+msgid ""
+"This will duplicate the bootup slice to the alternate slice. Use this if "
+"you would like to duplicate the known good working boot partition to the "
+"alternate."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:221
+msgid "Duplicate slice"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:229
+msgid "Periodic Data Backup"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:232
+msgid "RRD/DHCP Backup"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:234
+msgid "These options have been relocated to"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:234
+msgid "System > Advanced, Miscellaneous tab"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:242
+msgid "View upgrade log"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:245
+msgid "View previous upgrade log"
+msgstr ""
+
+#: usr/local/www/diag_ndp.php:107 usr/local/www/fbegin.inc:219
+msgid "NDP Table"
+msgstr ""
+
+#: usr/local/www/diag_ndp.php:133 usr/local/www/interfaces.php:564
+#: usr/local/www/interfaces.php:1883 usr/local/www/services_dhcpv6.php:859
+#: usr/local/www/services_dhcpv6_edit.php:210
+#: usr/local/www/status_dhcpv6_leases.php:416
+#: usr/local/www/status_interfaces.php:291
+msgid "IPv6 address"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:85
+#: usr/local/www/diag_packet_capture.php:371
+msgid "Download Capture"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:88 usr/local/www/fbegin.inc:234
+msgid "Packet Capture"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:127
+msgid "Invalid interface."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:130
+msgid "Invalid address family."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:133
+msgid "Invalid protocol."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:145
+#, php-format
+msgid "A valid IP address or CIDR block must be specified. [%s]"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:151
+msgid "Invalid value specified for port."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:158
+msgid "Invalid value specified for packet length."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:165
+msgid "Invalid value specified for packet count."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:191
+#: usr/local/www/diag_packet_capture.php:365
+#: usr/local/www/diag_packet_capture.php:420
+#: usr/local/www/status_dhcp_leases.php:334
+#: usr/local/www/status_dhcpv6_leases.php:420
+#: usr/local/www/status_dhcpv6_leases.php:505
+msgid "Start"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:198
+#: usr/local/www/diag_packet_capture.php:364
+#: usr/local/www/diag_packet_capture.php:367
+msgid "Stop"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:240
+msgid "Packet capture"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:254
+msgid "Select the interface on which to capture traffic."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:258
+msgid "Promiscuous"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:261
+msgid "If checked, the"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:261
+msgid "packet capture"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:261
+msgid "will be performed using promiscuous mode."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:262
+msgid "Some network adapters do not support or work well in promiscuous mode."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/system_gateways_edit.php:672
+msgid "Address Family"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:273
+msgid ""
+"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 "
+"only."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:295
+msgid "Select the protocol to capture, or Any."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:299
+msgid "Host Address"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:302
+msgid ""
+"This value is either the Source or Destination IP address or subnet in CIDR "
+"notation. The packet capture will look for this address in either field."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:303
+msgid ""
+"Matching can be negated by preceding the value with \"!\". Multiple IP "
+"addresses or CIDR subnets may be specified. Comma (\",\") separated values "
+"perform a boolean \"and\". Separating with a pipe (\"|\") performs a boolean "
+"\"or\"."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:304
+msgid ""
+"If you leave this field blank, all packets on the specified interface will "
+"be captured."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:308
+#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:123
+#: usr/local/www/firewall_aliases_edit.php:587
+#: usr/local/www/firewall_rules.php:341 usr/local/www/firewall_rules.php:343
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:223
+#: usr/local/www/load_balancer_virtual_server.php:135
+#: usr/local/www/load_balancer_virtual_server_edit.php:192
+#: usr/local/www/services_captiveportal.php:731
+#: usr/local/www/services_captiveportal.php:752
+#: usr/local/www/services_captiveportal.php:774
+#: usr/local/www/services_captiveportal.php:793
+#: usr/local/www/status_upnp.php:87
+msgid "Port"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:311
+msgid ""
+"The port can be either the source or destination port. The packet capture "
+"will look for this port in either field."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:312
+msgid "Leave blank if you do not want to filter by port."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:316
+msgid "Packet Length"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:319
+msgid ""
+"The Packet length is the number of bytes of each packet that will be "
+"captured. Default value is 0, which will capture the entire frame regardless "
+"of its size."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:323 usr/local/www/diag_ping.php:60
+#: usr/local/www/diag_ping.php:132
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_captiveportal_vouchers_edit.php:190
+msgid "Count"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:326
+msgid ""
+"This is the number of packets the packet capture will grab. Default value is "
+"100."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:326
+msgid "Enter 0 (zero) for no count limit."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:330
+msgid "Level of Detail"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:333
+msgid "Normal"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:334
+msgid "Medium"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:335
+msgid "High"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:336
+msgid "Full"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:338
+msgid ""
+"This is the level of detail that will be displayed after hitting 'Stop' when "
+"the packets have been captured."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:340
+msgid ""
+"This option does not affect the level of detail when downloading the packet "
+"capture."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:344
+msgid "Reverse DNS Lookup"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:347
+msgid ""
+"This check box will cause the packet capture to perform a reverse DNS lookup "
+"associated with all IP addresses."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:348
+msgid "This option can cause delays for large packet captures."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:370
+msgid "View Capture"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:372
+msgid "The packet capture file was last updated:"
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:385
+#: usr/local/www/diag_packet_capture.php:422
+msgid "Packet Capture is running."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:429
+msgid "Packet Capture stopped."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:429
+msgid "Packets Captured:"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:85
+msgid "Upload Pattern file"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:49
+#, php-format
+msgid "Added custom l7 pattern %s"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:51
+msgid "Uploaded file to"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:54
+msgid "Warning: You must upload a file with .pat extension."
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:63
+msgid "Add layer7 pattern"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:74
+msgid "Upload layer7 pattern file"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:77
+msgid "File to upload:"
+msgstr ""
+
+#: usr/local/www/diag_pf_info.php:101
+msgid "Gathering PF information, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_ping.php:64
+#, php-format
+msgid "Count must be between 1 and %s"
+msgstr ""
+
+#: usr/local/www/diag_ping.php:70 usr/local/www/diag_traceroute.php:73
+msgid "When using IPv4, the target host must be an IPv4 address or hostname."
+msgstr ""
+
+#: usr/local/www/diag_ping.php:72 usr/local/www/diag_traceroute.php:75
+msgid "When using IPv6, the target host must be an IPv6 address or hostname."
+msgstr ""
+
+#: usr/local/www/diag_ping.php:151
+msgid "Ping output"
+msgstr ""
+
+#: usr/local/www/diag_pkglogs.php:86
+msgid "Package logs"
+msgstr ""
+
+#: usr/local/www/diag_pkglogs.php:97
+msgid "No packages with logging facilities are currently installed."
+msgstr ""
+
+#: usr/local/www/diag_pkglogs.php:108 usr/local/www/diag_pkglogs.php:110
+#, php-format
+msgid "%s"
+msgstr ""
+
+#: usr/local/www/diag_pkglogs.php:123
+#, php-format
+msgid "Last %1$s %2$s log entries"
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:55
+msgid "The state table has been flushed successfully."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:61
+msgid "The source tracking table has been flushed successfully."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:65
+msgid "Reset state"
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:92
+msgid "Firewall state table"
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:94
+msgid ""
+"Resetting the state tables will remove all entries from the corresponding "
+"tables. This means that all open connections will be broken and will have to "
+"be re-established. This may be necessary after making substantial changes to "
+"the firewall and/or NAT rules, especially if there are IP protocol mappings "
+"(e.g. for PPTP or IPv6) with open connections."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:101
+msgid ""
+"The firewall will normally leave the state tables intact when changing rules."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:104
+msgid ""
+"NOTE: If you reset the firewall state table, the browser session may appear "
+"to be hung after clicking &quot;Reset&quot;. Simply refresh the page to "
+"continue."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:114
+msgid "Firewall Source Tracking"
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:116
+msgid ""
+"Resetting the source tracking table will remove all source/destination "
+"associations. This means that the \"sticky\" source/destination association "
+"will be cleared for all clients."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:120
+msgid "This does not clear active connection states, only source tracking."
+msgstr ""
+
+#: usr/local/www/diag_resetstate.php:128 usr/local/www/status_lb_pool.php:219
+msgid "Reset"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:71
+msgid "Routing tables"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:169
+msgid "Name resolution"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:173
+msgid "Enable this to attempt to resolve names when displaying the tables."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:178
+msgid "Number of rows"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:182 usr/local/www/diag_tables.php:169
+msgid "all"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:188
+msgid "Select how many rows to display."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:197
+msgid "Use a regular expression to filter IP address or hostnames."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:204 usr/local/www/system_certmanager.php:413
+#: usr/local/www/system_certmanager.php:1025
+#: usr/local/www/system_certmanager.php:1069
+msgid "Update"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:207
+msgid ""
+"By enabling name resolution, the query should take a bit longer. You can "
+"stop it at any time by clicking the Stop button in your browser."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:219 usr/local/www/diag_routes.php:227
+msgid "Gathering data, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_smart.php:18
+msgid "S.M.A.R.T. Monitor Tools"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:77
+msgid "PASSED"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:78
+msgid "FAILED"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:79
+msgid "Warning"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:130 usr/local/www/diag_smart.php:437
+msgid "Abort"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:179
+#, php-format
+msgid "Email sent to %s"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:219 usr/local/www/diag_smart.php:290
+msgid "Information/Tests"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:220 usr/local/www/diag_smart.php:231
+msgid "Config"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:234 usr/local/www/system_camanager.php:552
+#: usr/local/www/system_certmanager.php:776
+#: usr/local/www/system_certmanager.php:949
+msgid "Email Address"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:256
+msgid "Test email"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:261
+#, php-format
+msgid "Send test email to %s"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:269 usr/local/www/services_wol.php:153
+msgid "Send"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:302 usr/local/www/diag_smart.php:307
+msgid "Info"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:305
+msgid "Info type"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:308
+msgid "Health"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:309
+msgid "SMART Capabilities"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:310
+msgid "Attributes"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:311 usr/local/www/firewall_aliases.php:180
+#: usr/local/www/pkg_mgr.php:176
+msgid "All"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:315 usr/local/www/diag_smart.php:354
+#: usr/local/www/diag_smart.php:391 usr/local/www/diag_smart.php:421
+msgid "Device: /dev/"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:331 usr/local/www/diag_smart.php:407
+msgid "View"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:342
+msgid "Perform Self-tests"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:345
+msgid "Test type"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:347
+#: usr/local/www/status_gateway_groups.php:125
+#: usr/local/www/status_gateways.php:123
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:63
+msgid "Offline"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:348
+msgid "Short"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:349 usr/local/www/diag_system_pftop.php:135
+msgid "Long"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:350
+msgid "Conveyance (ATA Disks Only)"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:381
+msgid "View Logs"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:384
+msgid "Log type"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:386
+msgid "Error"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:387
+msgid "Self-test"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:418
+msgid "Abort tests"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:437
+msgid "Do you really want to abort the test?"
+msgstr ""
+
+#: usr/local/www/diag_smart.php:452
+msgid "Back"
+msgstr ""
+
+#: usr/local/www/diag_sockets.php:45 usr/local/www/fbegin.inc:229
+msgid "Sockets"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:152
+#: usr/local/www/firewall_aliases.php:177
+#: usr/local/www/services_dnsmasq.php:354
+#: usr/local/www/services_dnsmasq.php:441
+#: usr/local/www/services_unbound.php:422
+#: usr/local/www/services_unbound.php:509 usr/local/www/vpn_pppoe_edit.php:550
+msgid "IP"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:156
+msgid "Src Ports"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:157
+msgid "Dst Ports"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:187
+msgid "State Table Summary"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:194
+msgid "By Source IP"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:195
+msgid "By Destination IP"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:196
+msgid "Total per IP"
+msgstr ""
+
+#: usr/local/www/diag_states_summary.php:197
+msgid "By IP Pair"
+msgstr ""
+
+#: usr/local/www/diag_system_activity.php:46
+msgid "Diagnostics: System Activity"
+msgstr ""
+
+#: usr/local/www/diag_system_activity.php:99
+msgid "Gathering CPU activity, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:131
+msgid "View type:"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:133 usr/local/www/interfaces.php:2972
+#: usr/local/www/interfaces.php:2983 usr/local/www/interfaces.php:2995
+#: usr/local/www/interfaces.php:3025 usr/local/www/interfaces.php:3041
+#: usr/local/www/interfaces.php:3057
+msgid "Default"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:134
+msgid "Label"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:136
+#: usr/local/www/firewall_rules.php:345 usr/local/www/status_queues.php:166
+msgid "Queue"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:137 usr/local/www/fbegin.inc:130
+#: usr/local/www/firewall_rules.php:50
+#: usr/local/www/firewall_rules_edit.php:805
+msgid "Rules"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:139
+msgid "Speed"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:146
+msgid "Sort type:"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:148
+msgid "Age"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:149
+msgid "Bytes"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:150
+msgid "Destination Address"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:152
+msgid "Expiry"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:154
+msgid "Peak"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:155
+msgid "Packet"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:164
+msgid "Number of States:"
+msgstr ""
+
+#: usr/local/www/diag_system_pftop.php:184
+msgid "Gathering pfTOP activity, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_tables.php:45 usr/local/www/fbegin.inc:221
+msgid "Tables"
+msgstr ""
+
+#: usr/local/www/diag_tables.php:88
+msgid "The bogons database has been updated."
+msgstr ""
+
+#: usr/local/www/diag_tables.php:122
+msgid "Table:"
+msgstr ""
+
+#: usr/local/www/diag_tables.php:157 usr/local/www/diag_tables.php:159
+msgid "No entries exist in this table."
+msgstr ""
+
+#: usr/local/www/diag_tables.php:157 usr/local/www/diag_tables.php:166
+msgid " the latest bogon data."
+msgstr ""
+
+#: usr/local/www/diag_tables.php:166 usr/local/www/diag_tables.php:169
+msgid "entries in this table."
+msgstr ""
+
+#: usr/local/www/diag_tables.php:169
+#: usr/local/www/firewall_shaper_layer7.php:572
+#: usr/local/www/services_dhcpv6.php:809
+#: usr/local/www/system_firmware_restorefullbackup.php:164
+msgid "Delete"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114
+#: usr/local/www/fbegin.inc:223
+msgid "Test Port"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:64
+msgid "Please enter a valid IP or hostname."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:68
+msgid "Please enter a valid port number."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:72
+msgid "Please enter a valid source port number, or leave the field blank."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:76
+msgid "You cannot connect to an IPv4 address using IPv6."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:79
+msgid "You cannot connect to an IPv6 address using IPv4."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:106
+msgid ""
+"This page allows you to perform a simple TCP connection test to determine if "
+"a host is up and accepting connections on a given port. This test does not "
+"function for UDP since there is no way to reliably determine if a UDP port "
+"accepts connections in this manner."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:108
+msgid ""
+"No data is transmitted to the remote host during this test, it will only "
+"attempt to open a connection and optionally display the data sent back from "
+"the server."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:132
+msgid "This should typically be left blank."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:136
+msgid "Show Remote Text"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:139
+msgid ""
+"Shows the text given by the server when connecting to the port. Will take "
+"10+ seconds to display if checked."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:168
+msgid "IPv4"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:171
+msgid "IPv6"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:175
+msgid ""
+"If you force IPv4 or IPv6 and use a hostname that does not contain a result "
+"using that protocol, it will result in an error. For example if you force "
+"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will "
+"not work."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:188
+msgid "Port Test Results"
+msgstr ""
+
+#: usr/local/www/diag_testport.php:266
+msgid ""
+"No output received, or connection failed. Try with \"Show Remote Text\" "
+"unchecked first."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:268
+msgid "Connection failed (Refused/Timeout)"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:64
+msgid "ttl"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:68
+#, php-format
+msgid "Maximum number of hops must be between 1 and %s"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:132
+msgid "Maximum number of hops"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:142
+msgid "Reverse Address Lookup"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:148
+msgid "Use ICMP"
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:162
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/services_ntpd_gps.php:402
+#: usr/local/www/services_ntpd_gps.php:404
+msgid "Note: "
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:163
+msgid ""
+"Traceroute may take a while to complete. You may hit the Stop button on your "
+"browser at any time to see the progress of failed traceroutes."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:165
+msgid ""
+"Using a source interface/IP address that does not match selected type (IPv4, "
+"IPv6) will result in an error or empty output."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:174
+msgid "Traceroute output:"
+msgstr ""
+
+#: usr/local/www/easyrule.php:42
+msgid "Firewall: EasyRule"
+msgstr ""
+
+#: usr/local/www/easyrule.php:77
+msgid "Message"
+msgstr ""
+
+#: usr/local/www/easyrule.php:80
+msgid ""
+"This is the Easy Rule status page, mainly used to display errors when adding "
+"rules. If you are seeing this, there apparently was not an error, and you "
+"navigated to the page directly without telling it what to do"
+msgstr ""
+
+#: usr/local/www/easyrule.php:83
+msgid ""
+"This page is meant to be called from the block/pass buttons on the Firewall "
+"Logs page"
+msgstr ""
+
+#: usr/local/www/easyrule.php:83
+msgid "System Logs, Firewall Tab"
+msgstr ""
+
+#: usr/local/www/edit.php:42
+msgid "Edit file"
+msgstr ""
+
+#: usr/local/www/edit.php:49 usr/local/www/edit.php:66
+msgid "No file name specified"
+msgstr ""
+
+#: usr/local/www/edit.php:51
+msgid "Loading a directory is not supported"
+msgstr ""
+
+#: usr/local/www/edit.php:53
+msgid "File does not exist or is not a regular file"
+msgstr ""
+
+#: usr/local/www/edit.php:57
+msgid "Failed to read file"
+msgstr ""
+
+#: usr/local/www/edit.php:78
+msgid "Failed to write file"
+msgstr ""
+
+#: usr/local/www/edit.php:80
+msgid "Error while writing file"
+msgstr ""
+
+#: usr/local/www/edit.php:82
+msgid "File successfully saved"
+msgstr ""
+
+#: usr/local/www/edit.php:104
+msgid "Loading file"
+msgstr ""
+
+#: usr/local/www/edit.php:124
+msgid "File successfully loaded"
+msgstr ""
+
+#: usr/local/www/edit.php:147
+msgid "Saving file"
+msgstr ""
+
+#: usr/local/www/edit.php:185
+msgid "Save / Load from path"
+msgstr ""
+
+#: usr/local/www/edit.php:187
+msgid "Load"
+msgstr ""
+
+#: usr/local/www/edit.php:188
+msgid "Browse"
+msgstr ""
+
+#: usr/local/www/exec.php:96
+msgid "Execute command"
+msgstr ""
+
+#: usr/local/www/exec.php:159
+msgid "Nothing to recall"
+msgstr ""
+
+#: usr/local/www/exec.php:228
+msgid "Note: this function is unsupported. Use it on your own risk"
+msgstr ""
+
+#: usr/local/www/exec.php:259
+msgid "Execute Shell command"
+msgstr ""
+
+#: usr/local/www/exec.php:262 usr/local/www/exec.php:315
+msgid "Command"
+msgstr ""
+
+#: usr/local/www/exec.php:270 usr/local/www/exec.php:321
+msgid "Execute"
+msgstr ""
+
+#: usr/local/www/exec.php:272 usr/local/www/status_upnp.php:79
+msgid "Clear"
+msgstr ""
+
+#: usr/local/www/exec.php:282
+msgid "File to download"
+msgstr ""
+
+#: usr/local/www/exec.php:296 usr/local/www/exec.php:306
+#: usr/local/www/services_captiveportal_filemanager.php:193
+msgid "Upload"
+msgstr ""
+
+#: usr/local/www/exec.php:299
+msgid "File to upload"
+msgstr ""
+
+#: usr/local/www/exec.php:312
+msgid "PHP Execute"
+msgstr ""
+
+#: usr/local/www/exec.php:323
+msgid "Example"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:100 usr/local/www/firewall_nat_edit.php:550
+#: usr/local/www/firewall_rules_edit.php:1096
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_rules_edit.php:1318
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1398
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1440
+#: usr/local/www/firewall_rules_edit.php:1495
+#: usr/local/www/firewall_rules_edit.php:1522
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1621
+#: usr/local/www/firewall_rules_edit.php:1676
+#: usr/local/www/interfaces.php:1743 usr/local/www/interfaces.php:2847
+#: usr/local/www/pkg_edit.php:1129 usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcp.php:1066 usr/local/www/services_dhcp.php:1080
+#: usr/local/www/services_dhcp.php:1092 usr/local/www/services_dhcp.php:1104
+#: usr/local/www/services_dhcp.php:1116 usr/local/www/services_dhcp.php:1143
+#: usr/local/www/services_dhcp_edit.php:499
+#: usr/local/www/services_dhcp_edit.php:522
+#: usr/local/www/services_dhcp_edit.php:534
+#: usr/local/www/services_dhcpv6.php:700 usr/local/www/services_dhcpv6.php:723
+#: usr/local/www/services_dhcpv6.php:736 usr/local/www/services_dhcpv6.php:749
+#: usr/local/www/services_dhcpv6.php:761 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dnsmasq.php:304
+#: usr/local/www/services_dnsmasq.php:307
+#: usr/local/www/services_dnsmasq.php:310 usr/local/www/services_ntpd.php:346
+#: usr/local/www/services_ntpd.php:366 usr/local/www/services_ntpd.php:395
+#: usr/local/www/services_ntpd_gps.php:558
+#: usr/local/www/services_unbound.php:368
+#: usr/local/www/services_unbound.php:371
+#: usr/local/www/services_unbound.php:374
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/system_gateways_edit.php:744
+#: usr/local/www/vpn_openvpn_client.php:1057
+#: usr/local/www/vpn_openvpn_csc.php:716
+#: usr/local/www/vpn_openvpn_server.php:1773
+msgid "Advanced"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:101 usr/local/www/system_firmware.php:103
+#: usr/local/www/system_firmware.php:202
+#: usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_settings.php:87
+msgid "Firmware"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:102 usr/local/www/system.php:289
+msgid "General Setup"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:103
+msgid "High Avail. Sync"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:104 usr/local/www/services_captiveportal.php:1059
+msgid "Logout"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:106
+msgid "Packages"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:107
+msgid "Setup Wizard"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:109
+msgid "Cert Manager"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:111 usr/local/www/fbegin.inc:113
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/system_usermanager.php:58
+msgid "User Manager"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:119
+msgid "(assign)"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:131 usr/local/www/firewall_schedule.php:51
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/system_advanced_misc.php:496
+msgid "Schedules"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:133 usr/local/www/firewall_virtual_ip.php:226
+msgid "Virtual IPs"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:140 usr/local/www/services_unbound.php:204
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+#: usr/local/www/services_unbound_host_edit.php:183
+msgid "DNS Resolver"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:145
+msgid "DHCPv6 Server/RA"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:151 usr/local/www/vpn_pppoe_edit.php:239
+msgid "PPPoE Server"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:152 usr/local/www/services_snmp.php:170
+msgid "SNMP"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193
+msgid "UPnP &amp; NAT-PMP"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:166 usr/local/www/interfaces.php:1411
+#: usr/local/www/status_interfaces.php:139
+msgid "PPTP"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:167 usr/local/www/interfaces.php:1411
+#: usr/local/www/status_interfaces.php:152 usr/local/www/vpn_l2tp.php:39
+#: usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+msgid "L2TP"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:174
+msgid "CARP (failover)"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:175
+msgid "Dashboard"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:177
+msgid "DHCP Leases"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:178
+msgid "DHCPv6 Leases"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:179
+msgid "Filter Reload"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:186
+msgid "Package Logs"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:187 usr/local/www/status_queues.php:124
+#: usr/local/www/status_rrd_graph.php:425
+#: usr/local/www/status_rrd_graph_settings.php:58
+#: usr/local/www/status_rrd_graph_settings.php:144
+msgid "Queues"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:188 usr/local/www/status_rrd_graph.php:260
+#: usr/local/www/status_rrd_graph_img.php:44
+#: usr/local/www/status_rrd_graph_settings.php:120
+#: usr/local/www/status_rrd_graph_settings.php:182
+msgid "RRD Graphs"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:189 usr/local/www/fbegin.inc:308
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/services_captiveportal.php:69
+#: usr/local/www/services_captiveportal_filemanager.php:72
+#: usr/local/www/services_captiveportal_hostname.php:67
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+#: usr/local/www/services_captiveportal_ip.php:65
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+#: usr/local/www/services_captiveportal_mac.php:64
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+#: usr/local/www/services_dhcp.php:597
+#: usr/local/www/services_dhcp_edit.php:335
+#: usr/local/www/services_dhcp_relay.php:102
+#: usr/local/www/services_dhcpv6.php:375
+#: usr/local/www/services_dhcpv6_edit.php:185
+#: usr/local/www/services_dhcpv6_relay.php:103
+#: usr/local/www/services_dnsmasq.php:153
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_dnsmasq_edit.php:182
+#: usr/local/www/services_dyndns.php:61
+#: usr/local/www/services_dyndns_edit.php:181
+#: usr/local/www/services_igmpproxy.php:81 usr/local/www/services_ntpd.php:180
+#: usr/local/www/services_ntpd_gps.php:160
+#: usr/local/www/services_ntpd_pps.php:101
+#: usr/local/www/services_rfc2136.php:56
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_snmp.php:170 usr/local/www/services_unbound.php:204
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+#: usr/local/www/services_unbound_host_edit.php:183
+#: usr/local/www/services_wol.php:116 usr/local/www/services_wol_edit.php:116
+#: usr/local/www/status_services.php:68
+#: usr/local/www/system_authservers.php:192
+#: usr/local/www/vpn_pppoe_edit.php:239
+msgid "Services"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:190
+msgid "System Logs"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:191 usr/local/www/status_graph.php:114
+msgid "Traffic Graph"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:209
+msgid "Command Prompt"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:211
+msgid "Edit File"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:212
+msgid "Factory Defaults"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:217
+msgid "Halt System"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:218
+msgid "Limiter Info"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:224
+msgid "pfInfo"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:225
+msgid "pfTop"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:226
+msgid "Reboot"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:227 usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_gateways.php:204 usr/local/www/system_routes.php:221
+msgid "Routes"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:228
+#: usr/local/www/widgets/widgets/smart_status.widget.php:40
+msgid "SMART Status"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:231
+msgid "States Summary"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:232
+msgid "System Activity"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:239
+msgid "Restart HTTPD"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:245
+msgid "pfSense Gold"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:250
+msgid "About this Page"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:252
+msgid "Bug Database"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:253
+msgid "User Forum"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:254
+msgid "Documentation"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:255
+msgid "Developers Wiki"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:256
+msgid "Paid Support"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:257
+msgid "pfSense Book"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:258
+msgid "Search portal"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:259
+msgid "FreeBSD Handbook"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:340
+msgid "Gold"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:349
+msgid "Help"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:428
+msgid "Help for items on this page"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:438
+msgid ""
+"Packages are currently being reinstalled in the background.<p>Do not make "
+"changes in the GUI until this is complete."
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:109
+#, php-format
+msgid "Cannot delete alias. Currently in use by %s"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:169
+msgid "The alias list has been changed."
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:169 usr/local/www/firewall_nat.php:184
+#: usr/local/www/firewall_nat_1to1.php:162
+#: usr/local/www/firewall_nat_npt.php:90
+#: usr/local/www/firewall_nat_out.php:226
+#: usr/local/www/firewall_shaper.php:406
+#: usr/local/www/firewall_shaper_layer7.php:402
+#: usr/local/www/firewall_shaper_queues.php:189
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/firewall_virtual_ip.php:218 usr/local/www/interfaces.php:1633
+#: usr/local/www/load_balancer_monitor.php:101
+#: usr/local/www/load_balancer_relay_protocol.php:113
+#: usr/local/www/load_balancer_setting.php:112
+#: usr/local/www/load_balancer_virtual_server.php:111
+#: usr/local/www/services_captiveportal_zones.php:75
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:482
+#: usr/local/www/services_dnsmasq.php:182
+#: usr/local/www/services_igmpproxy.php:91
+#: usr/local/www/services_unbound_acls.php:179
+#: usr/local/www/services_unbound_advanced.php:204
+#: usr/local/www/system_gateways.php:196 usr/local/www/vpn_ipsec.php:231
+#: usr/local/www/vpn_ipsec_keys.php:92 usr/local/www/vpn_ipsec_mobile.php:331
+#: usr/local/www/vpn_pppoe.php:99
+msgid "You must apply the changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:178
+msgid "Ports"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:179
+msgid "URLs"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:192
+#: usr/local/www/services_igmpproxy.php:98
+msgid "Values"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:198
+#: usr/local/www/firewall_aliases.php:278
+msgid "Add a new alias"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:260
+msgid "Edit alias"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:261
+msgid ""
+"Do you really want to delete this alias? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:261
+msgid "Delete alias"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:281
+msgid "Bulk import aliases from list"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:291
+msgid ""
+"Aliases act as placeholders for real hosts, networks or ports. They can be "
+"used to minimize the number of changes that have to be made if a host, "
+"network or port changes. You can enter the name of an alias instead of the "
+"host, network or port in all fields that have a red background. The alias "
+"will be resolved according to the list above. If an alias cannot be resolved "
+"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/"
+"shaper rule) will be considered invalid and skipped."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_rules_edit.php:805
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/interfaces_bridge_edit.php:240
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq_edit.php:40
+#: usr/local/www/interfaces_vlan_edit.php:152
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/pkg_edit.php:259 usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_wol_edit.php:116
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+#: usr/local/www/vpn_pppoe_edit.php:239
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "Edit"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:126
+msgid ""
+"Vertical bars (|) at start or end, or double in the middle of descriptions "
+"not allowed. Descriptions have been cleaned. Check and save again."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:137
+#: usr/local/www/firewall_aliases_edit.php:139
+msgid "Reserved word used for alias name."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:142
+msgid ""
+"The alias name must be less than 32 characters long, may not consist of only "
+"numbers, and may only contain the following characters"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:148
+#: usr/local/www/firewall_aliases_import.php:77
+msgid "An alias with this name already exists."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:157
+#: usr/local/www/firewall_aliases_import.php:83
+#, php-format
+msgid "Cannot use a reserved keyword as alias name %s"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:162
+#: usr/local/www/firewall_aliases_import.php:88
+msgid "An interface description with this name already exists."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:185
+msgid "You must provide a valid URL."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:187
+msgid "Unable to fetch usable data."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:199
+#: usr/local/www/firewall_aliases_edit.php:241
+#: usr/local/www/firewall_aliases_edit.php:306
+#, php-format
+msgid "Entry added %s"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:270
+#, php-format
+msgid "You must provide a valid URL. Could not fetch usable data from '%s'."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:274
+#, php-format
+msgid "URL '%s' is not valid."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:337
+#, php-format
+msgid "Range is too large to expand into individual host IP addresses (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:338
+#: usr/local/www/firewall_aliases_edit.php:366
+#, php-format
+msgid "The maximum number of entries in an alias is %s"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:346
+#: usr/local/www/firewall_aliases_import.php:113
+#, php-format
+msgid "IPv6 address ranges are not supported (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:365
+#, php-format
+msgid "Subnet is too large to expand into individual host IP addresses (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:373
+#, php-format
+msgid "IPv6 subnets are not supported in host aliases (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:400
+#, php-format
+msgid "The maximum number of entries in an alias has been exceeded (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:417
+msgid "is not a valid port or alias."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:421
+#, php-format
+msgid "%1$s is not a valid %2$s address, FQDN or alias."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:426
+#, php-format
+msgid "%s/%s is not a valid subnet."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:434
+#, php-format
+msgid ""
+"The alias(es): %s cannot be nested because they are not of the same type."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:580
+msgid "Network or FQDN"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/firewall_aliases_edit.php:775
+msgid "Network(s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:582
+#: usr/local/www/services_igmpproxy_edit.php:229
+#: usr/local/www/services_unbound_acls.php:241
+msgid "CIDR"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:584
+#: usr/local/www/firewall_aliases_edit.php:774
+#: usr/local/www/firewall_aliases_edit.php:786
+msgid "Host(s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:585
+msgid "IP or FQDN"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:586
+#: usr/local/www/firewall_aliases_edit.php:776
+msgid "Port(s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:588
+#: usr/local/www/firewall_aliases_edit.php:778
+msgid "URL (IPs)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:589
+#: usr/local/www/firewall_aliases_edit.php:779
+msgid "URL (Ports)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:590
+#: usr/local/www/firewall_aliases_edit.php:780
+msgid "URL Table (IPs)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:591
+#: usr/local/www/firewall_aliases_edit.php:781
+msgid "URL Table (Ports)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:592
+msgid "Update Freq. (days)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:594
+msgid ""
+"Networks are specified in CIDR format. Select the CIDR mask that pertains "
+"to each entry. /32 specifies a single IPv4 host, /128 specifies a single "
+"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, "
+"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 "
+"or /128 for IPv6. You may also enter an IP range such as "
+"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to "
+"fill the range."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:595
+msgid ""
+"Enter as many hosts as you would like. Hosts must be specified by their IP "
+"address or fully qualified domain name (FQDN). FQDN hostnames are "
+"periodically re-resolved and updated. If multiple IPs are returned by a DNS "
+"query, all are used. You may also enter an IP range such as "
+"192.168.1.1-192.168.1.10 or a small subnet such as 192.168.1.16/28 and a "
+"list of individual IP addresses will be generated."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:596
+msgid ""
+"Enter as many ports as you wish. Port ranges can be expressed by separating "
+"with a colon."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:597
+#, php-format
+msgid ""
+"Enter as many URLs as you wish. After saving %s will download the URL and "
+"import the items into the alias. Use only with small sets of IP addresses "
+"(less than 3000)."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:598
+#, php-format
+msgid ""
+"Enter as many URLs as you wish. After saving %s will download the URL and "
+"import the items into the alias. Use only with small sets of Ports (less "
+"than 3000)."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:599
+#, php-format
+msgid ""
+"Enter a single URL containing a large number of IPs and/or Subnets. After "
+"saving %s will download the URL and create a table file containing these "
+"addresses. This will work with large numbers of addresses (30,000+) or small "
+"numbers."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:600
+#, php-format
+msgid ""
+"Enter a single URL containing a list of Port numbers and/or Port ranges. "
+"After saving %s will download the URL."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:603
+#: usr/local/www/firewall_aliases_edit.php:777
+msgid "OpenVPN Users"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:604
+msgid "Enter as many usernames as you wish."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:743
+msgid "Alias Edit"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:755
+msgid ""
+"The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and "
+"_\"."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:771
+#: usr/local/www/firewall_virtual_ip.php:241
+#: usr/local/www/firewall_virtual_ip_edit.php:110
+#: usr/local/www/firewall_virtual_ip_edit.php:384
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:249
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/load_balancer_relay_action_edit.php:464
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:202
+#: usr/local/www/services_captiveportal.php:894
+#: usr/local/www/services_dhcp.php:1157
+#: usr/local/www/services_igmpproxy.php:97
+#: usr/local/www/services_igmpproxy_edit.php:190
+#: usr/local/www/status_ntpd.php:182 usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:190
+#: usr/local/www/system_authservers.php:476
+#: usr/local/www/system_authservers.php:806
+#: usr/local/www/system_certmanager.php:805
+#: usr/local/www/vpn_ipsec_phase2.php:582
+#: usr/local/www/vpn_ipsec_phase2.php:617
+#: usr/local/www/vpn_ipsec_phase2.php:659
+msgid "Type"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:792
+msgid "Item information"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:796
+#: usr/local/www/firewall_nat_1to1_edit.php:368
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_nat_out_edit.php:542
+#: usr/local/www/firewall_nat_out_edit.php:593
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/firewall_rules_edit.php:1160
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/services_igmpproxy_edit.php:228
+#: usr/local/www/services_unbound_acls.php:240
+#: usr/local/www/system_routes.php:234 usr/local/www/vpn_ipsec_mobile.php:435
+#: usr/local/www/vpn_ipsec_phase2.php:587
+#: usr/local/www/vpn_ipsec_phase2.php:622
+#: usr/local/www/vpn_ipsec_phase2.php:664
+msgid "Network"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:830
+#: usr/local/www/services_dnsmasq_edit.php:279
+#: usr/local/www/services_router_advertisements.php:345
+#: usr/local/www/services_unbound_host_edit.php:283
+#: usr/local/www/system_certmanager.php:825
+msgid "remove this entry"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:843
+#: usr/local/www/firewall_shaper_layer7.php:556
+#: usr/local/www/interfaces_groups_edit.php:322
+#: usr/local/www/interfaces_qinq_edit.php:390
+#: usr/local/www/services_dhcp.php:1197 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dnsmasq_edit.php:290
+#: usr/local/www/services_igmpproxy_edit.php:275
+#: usr/local/www/services_router_advertisements.php:363
+#: usr/local/www/services_unbound_acls.php:281
+#: usr/local/www/services_unbound_host_edit.php:295
+#: usr/local/www/system_certmanager.php:837
+#: usr/local/www/vpn_pppoe_edit.php:586
+msgid "add another entry"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:852
+#: usr/local/www/firewall_aliases_import.php:216
+#: usr/local/www/firewall_nat_1to1_edit.php:537
+#: usr/local/www/firewall_nat_edit.php:897
+#: usr/local/www/firewall_nat_npt_edit.php:279
+#: usr/local/www/firewall_nat_out_edit.php:829
+#: usr/local/www/firewall_rules_edit.php:1262
+#: usr/local/www/firewall_rules_edit.php:1739
+#: usr/local/www/firewall_schedule_edit.php:1169
+#: usr/local/www/firewall_shaper_layer7.php:569
+#: usr/local/www/firewall_virtual_ip_edit.php:510
+#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1962
+#: usr/local/www/interfaces.php:3380
+#: usr/local/www/interfaces_bridge_edit.php:605
+#: usr/local/www/interfaces_gif_edit.php:234
+#: usr/local/www/interfaces_gre_edit.php:237
+#: usr/local/www/interfaces_groups_edit.php:334
+#: usr/local/www/interfaces_lagg_edit.php:236
+#: usr/local/www/interfaces_ppps_edit.php:796
+#: usr/local/www/interfaces_qinq_edit.php:398
+#: usr/local/www/interfaces_vlan_edit.php:204
+#: usr/local/www/interfaces_wireless_edit.php:202
+#: usr/local/www/load_balancer_monitor_edit.php:359
+#: usr/local/www/load_balancer_pool_edit.php:335
+#: usr/local/www/load_balancer_relay_action_edit.php:559
+#: usr/local/www/load_balancer_relay_protocol_edit.php:282
+#: usr/local/www/load_balancer_virtual_server_edit.php:280
+#: usr/local/www/pkg_edit.php:942
+#: usr/local/www/services_captiveportal.php:1082
+#: usr/local/www/services_captiveportal_vouchers.php:637
+#: usr/local/www/services_dhcp_edit.php:546
+#: usr/local/www/services_dhcpv6_edit.php:250
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:165
+#: usr/local/www/services_dnsmasq_edit.php:306
+#: usr/local/www/services_dyndns_edit.php:425
+#: usr/local/www/services_igmpproxy_edit.php:283
+#: usr/local/www/services_rfc2136_edit.php:215
+#: usr/local/www/services_unbound_acls.php:311
+#: usr/local/www/services_unbound_domainoverride_edit.php:160
+#: usr/local/www/services_unbound_host_edit.php:311
+#: usr/local/www/services_wol_edit.php:162
+#: usr/local/www/system_advanced_sysctl.php:270
+#: usr/local/www/system_gateway_groups_edit.php:348
+#: usr/local/www/system_gateways_edit.php:862
+#: usr/local/www/system_groupmanager.php:461
+#: usr/local/www/system_groupmanager_addprivs.php:227
+#: usr/local/www/system_hasync.php:348
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:333
+#: usr/local/www/system_usermanager.php:883
+#: usr/local/www/system_usermanager_addprivs.php:196
+#: usr/local/www/vpn_l2tp_users_edit.php:183
+#: usr/local/www/vpn_pppoe_edit.php:605
+msgid "Cancel"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:50
+msgid "Bulk import"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:73
+msgid "The alias name may only consist of the characters"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:115
+#, php-format
+msgid "%s is not an IP address. Please correct the error to continue"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:123
+msgid ""
+"Descriptions may not start or end with vertical bar (|) or contain double "
+"vertical bar ||."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:132
+msgid "Descriptions must be less than 200 characters long."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:172
+msgid "Alias Import"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:175
+msgid "Alias Name"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:180
+msgid ""
+"The name of the alias may only consist of the characters \"a-z, A-Z and "
+"0-9\"."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:190
+#: usr/local/www/interfaces_lagg_edit.php:228
+#: usr/local/www/services_captiveportal_hostname_edit.php:189
+#: usr/local/www/services_captiveportal_ip_edit.php:206
+#: usr/local/www/services_captiveportal_mac_edit.php:222
+#: usr/local/www/services_captiveportal_zones_edit.php:110
+#: usr/local/www/system_gateways_edit.php:855
+#: usr/local/www/vpn_ipsec_phase1.php:665
+#: usr/local/www/vpn_ipsec_phase2.php:696
+#: usr/local/www/vpn_openvpn_client.php:667
+#: usr/local/www/vpn_openvpn_csc.php:368
+#: usr/local/www/vpn_openvpn_server.php:896
+msgid "You may enter a description here for your reference (not parsed)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:195
+msgid "Aliases to import"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:200
+msgid ""
+"Paste in the aliases to import separated by a carriage return. Common "
+"examples are lists of IPs, networks, blacklists, etc."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:202
+msgid ""
+"The list may contain IP addresses, with or without CIDR prefix, IP ranges, "
+"blank lines (ignored) and an optional description after each IP. e.g.:"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat.php:190
+#: usr/local/www/firewall_nat_1to1.php:169
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:95
+#: usr/local/www/firewall_nat_out.php:233
+msgid "Port Forward"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:184 usr/local/www/firewall_nat_npt.php:90
+msgid "The NAT configuration has been changed"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1.php:170
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_npt.php:96
+#: usr/local/www/firewall_nat_out.php:234
+msgid "1:1"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_1to1.php:171
+#: usr/local/www/firewall_nat_npt.php:97
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out.php:235
+#: usr/local/www/firewall_nat_out_edit.php:343
+msgid "Outbound"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:193 usr/local/www/firewall_nat_1to1.php:172
+#: usr/local/www/firewall_nat_npt.php:81 usr/local/www/firewall_nat_npt.php:98
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:236
+msgid "NPt"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:206
+msgid "Src. addr"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:207
+msgid "Src. ports"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:208
+msgid "Dest. addr"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:209
+msgid "Dest. ports"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:210
+msgid "NAT IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:211
+msgid "NAT Ports"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:218 usr/local/www/firewall_nat.php:220
+#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:351
+#: usr/local/www/firewall_nat_1to1.php:321
+#: usr/local/www/firewall_nat_out.php:515 usr/local/www/firewall_rules.php:367
+#: usr/local/www/firewall_rules.php:368 usr/local/www/firewall_rules.php:804
+#: usr/local/www/firewall_rules.php:805
+msgid "delete selected rules"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:220 usr/local/www/firewall_nat.php:351
+#: usr/local/www/firewall_rules.php:368 usr/local/www/firewall_rules.php:805
+msgid "Do you really want to delete the selected rules?"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:269
+msgid "All traffic matching this NAT entry is passed"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:271
+msgid "Firewall rule ID"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:271
+msgid "is managed with this rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat_1to1.php:260
+#: usr/local/www/firewall_nat_out.php:460 usr/local/www/firewall_rules.php:402
+#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:459
+#: usr/local/www/firewall_rules.php:750
+msgid "move selected rules before this rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:327 usr/local/www/firewall_nat_1to1.php:265
+#: usr/local/www/firewall_nat_npt.php:160 usr/local/www/firewall_rules.php:403
+#: usr/local/www/firewall_rules.php:432 usr/local/www/firewall_rules.php:460
+#: usr/local/www/firewall_rules.php:751
+msgid "edit rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:330 usr/local/www/firewall_nat_1to1.php:271
+#: usr/local/www/firewall_nat_out.php:469
+msgid "Do you really want to delete this rule?"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:330 usr/local/www/firewall_nat_1to1.php:272
+#: usr/local/www/firewall_nat_npt.php:161
+#: usr/local/www/firewall_nat_out.php:470 usr/local/www/firewall_rules.php:754
+msgid "delete rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:331 usr/local/www/firewall_nat_out.php:475
+msgid "add a new NAT based on this one"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:344 usr/local/www/firewall_rules.php:798
+msgid "move selected rules to end"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:362 usr/local/www/firewall_rules.php:817
+msgid "pass"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:366
+msgid "linked rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:160
+#: usr/local/www/firewall_nat_out.php:226
+msgid "The NAT configuration has been changed."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:183
+msgid "External IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:184
+#: usr/local/www/firewall_nat_1to1_edit.php:348
+#: usr/local/www/status_upnp.php:89
+msgid "Internal IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:185
+msgid "Destination IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:193
+#: usr/local/www/firewall_nat_npt.php:115
+#: usr/local/www/firewall_nat_npt.php:173
+msgid "add rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:219
+#: usr/local/www/firewall_nat_out.php:371 usr/local/www/firewall_rules.php:507
+#: usr/local/www/system_gateways.php:272 usr/local/www/system_gateways.php:278
+#: usr/local/www/system_routes.php:264 usr/local/www/vpn_ipsec.php:300
+#: usr/local/www/vpn_ipsec.php:475
+msgid "click to toggle enabled/disabled status"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:277
+#: usr/local/www/firewall_rules.php:407 usr/local/www/firewall_rules.php:436
+#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:755
+msgid "add a new rule based on this one"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:298
+#: usr/local/www/firewall_nat_1to1.php:303
+#: usr/local/www/firewall_nat_out.php:495
+#: usr/local/www/firewall_nat_out.php:499
+msgid "move selected mappings to end"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:311
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out.php:506
+msgid "add new mapping"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:326
+#: usr/local/www/firewall_nat_out.php:519
+msgid "delete selected mappings"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:327
+#: usr/local/www/firewall_nat_out.php:519
+msgid "Do you really want to delete the selected mappings?"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:340
+msgid "Depending on the way your WAN connection is setup, you may also need a"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:341
+msgid "Virtual IP."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1.php:342
+msgid ""
+"If you add a 1:1 NAT entry for any of the interface IPs on this system, it "
+"will make this system inaccessible on that IP address. i.e. if you use your "
+"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) "
+"using the WAN IP address will no longer function."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:112
+#: usr/local/www/firewall_nat_out_edit.php:141
+#, php-format
+msgid ""
+"Invalid characters detected (%s). Please remove invalid characters and save "
+"again."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+msgid "External subnet"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:120
+#: usr/local/www/firewall_nat_edit.php:205
+msgid "Source address"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:124
+#: usr/local/www/firewall_nat_edit.php:209
+msgid "Destination address"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:155
+msgid "A valid external subnet must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:159
+#: usr/local/www/firewall_nat_edit.php:254
+#: usr/local/www/firewall_rules_edit.php:446
+#: usr/local/www/firewall_rules_edit.php:450
+msgid "You must specify single host or alias for alias entries."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+#, php-format
+msgid "%s is not a valid internal IP address."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:167
+msgid "A valid internal bit count must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:174
+#: usr/local/www/firewall_nat_edit.php:267
+#: usr/local/www/firewall_rules_edit.php:463
+#, php-format
+msgid "%s is not a valid destination IP address or alias."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:177
+#: usr/local/www/firewall_nat_edit.php:270
+#: usr/local/www/firewall_nat_out_edit.php:188
+#: usr/local/www/firewall_rules_edit.php:466
+msgid "A valid destination bit count must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:284
+msgid "Edit NAT 1:1 entry"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:290
+#: usr/local/www/firewall_nat_edit.php:482
+#: usr/local/www/firewall_nat_npt_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:859
+msgid "Disable this rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:291
+#: usr/local/www/firewall_nat_edit.php:483
+#: usr/local/www/firewall_nat_npt_edit.php:169
+#: usr/local/www/firewall_nat_out_edit.php:457
+#: usr/local/www/firewall_rules_edit.php:860
+msgid "Set this option to disable this rule without removing it from the list."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:332
+#: usr/local/www/firewall_nat_npt_edit.php:209
+msgid "Choose which interface this rule applies to"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/firewall_nat_npt_edit.php:210
+msgid "Hint: in most cases, you'll want to use WAN here"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:336
+msgid "External subnet IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:341
+msgid ""
+"Enter the external (usually on a WAN) subnet's starting address for the 1:1 "
+"mapping. The subnet mask from the internal address below will be applied to "
+"this IP address."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+msgid ""
+"Hint: this is generally an address owned by the router itself on the "
+"selected interface."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:425
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_out_edit.php:581
+#: usr/local/www/firewall_rules_edit.php:1037
+#: usr/local/www/firewall_rules_edit.php:1140
+msgid "not"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:427
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_nat_npt_edit.php:218
+#: usr/local/www/firewall_nat_npt_edit.php:246
+#: usr/local/www/firewall_nat_out_edit.php:582
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:1142
+msgid "Use this option to invert the sense of the match."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:432
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_out_edit.php:537
+#: usr/local/www/firewall_nat_out_edit.php:586
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_rules_edit.php:1147
+#: usr/local/www/firewall_virtual_ip_edit.php:419
+msgid "Type:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:366
+msgid "Single host"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:372
+#: usr/local/www/firewall_nat_1to1_edit.php:448
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_rules_edit.php:1062
+#: usr/local/www/firewall_rules_edit.php:1163
+msgid "PPTP clients"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:377
+#: usr/local/www/firewall_nat_1to1_edit.php:455
+#: usr/local/www/firewall_nat_edit.php:576
+#: usr/local/www/firewall_nat_edit.php:666
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1166
+msgid "PPPoE clients"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:382
+#: usr/local/www/firewall_nat_1to1_edit.php:462
+#: usr/local/www/firewall_nat_edit.php:579
+#: usr/local/www/firewall_nat_edit.php:669
+#: usr/local/www/firewall_rules_edit.php:1068
+#: usr/local/www/firewall_rules_edit.php:1169
+msgid "L2TP clients"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:389
+#: usr/local/www/firewall_nat_1to1_edit.php:471
+#: usr/local/www/firewall_nat_edit.php:584
+#: usr/local/www/firewall_nat_edit.php:674
+#: usr/local/www/firewall_rules_edit.php:1073
+#: usr/local/www/firewall_rules_edit.php:1174
+msgid "net"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:392
+#: usr/local/www/firewall_nat_1to1_edit.php:474
+#: usr/local/www/firewall_nat_edit.php:586
+#: usr/local/www/firewall_nat_edit.php:676
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_rules_edit.php:1176
+msgid "address"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:402
+#: usr/local/www/firewall_nat_1to1_edit.php:484
+#: usr/local/www/firewall_nat_edit.php:594
+#: usr/local/www/firewall_nat_edit.php:705
+#: usr/local/www/firewall_nat_npt_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:251
+#: usr/local/www/firewall_nat_out_edit.php:547
+#: usr/local/www/firewall_nat_out_edit.php:599
+#: usr/local/www/firewall_nat_out_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1184
+#: usr/local/www/firewall_virtual_ip_edit.php:430
+#: usr/local/www/vpn_ipsec_phase2.php:598
+#: usr/local/www/vpn_ipsec_phase2.php:634
+msgid "Address:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:418
+msgid ""
+"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size "
+"specified for the internal subnet will be applied to the external subnet."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:439
+#: usr/local/www/firewall_nat_edit.php:570
+#: usr/local/www/firewall_nat_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:1056
+#: usr/local/www/firewall_rules_edit.php:1159
+msgid "Single host or alias"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:502
+msgid ""
+"The 1:1 mapping will only be used for connections to or from the specified "
+"destination."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:503
+msgid "Hint: this is usually 'any'."
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:518
+#: usr/local/www/firewall_nat_edit.php:803
+msgid "NAT reflection"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:522
+msgid "use system default"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:525
+msgid "enable"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:528
+msgid "disable"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:124
+#, php-format
+msgid ""
+"Invalid characters detected %s. Please remove invalid characters and save "
+"again."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:197
+msgid "Destination port from"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:197
+msgid "Destination port to"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:213
+#: usr/local/www/firewall_nat_edit.php:760
+msgid "Redirect target IP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:235
+#, php-format
+msgid "\"%s\" is not a valid redirect target IP address or host alias."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:410
+#, php-format
+msgid ""
+"%s is not a valid start source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:241
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:243
+#: usr/local/www/firewall_rules_edit.php:414
+#, php-format
+msgid ""
+"%s is not a valid start destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:416
+#, php-format
+msgid ""
+"%s is not a valid end destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:248
+#, php-format
+msgid ""
+"A valid redirect target port must be specified. It must be a port alias or "
+"integer between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:259
+#: usr/local/www/firewall_rules_edit.php:455
+#, php-format
+msgid "%s is not a valid source IP address or alias."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:262
+#: usr/local/www/firewall_nat_out_edit.php:180
+#: usr/local/www/firewall_rules_edit.php:458
+msgid "A valid source bit count must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:289
+msgid "The target port range must be an integer between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:310
+msgid "The destination port range overlaps with an existing entry."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:422
+msgid "NAT Port Forward"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:472
+msgid "Edit Redirect entry"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:487
+msgid "No RDR (NOT)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:490
+msgid ""
+"Enabling this option will disable redirection for traffic matching this rule."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:491
+msgid ""
+"Hint: this option is rarely needed, don't use this unless you know what "
+"you're doing."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/firewall_nat_out_edit.php:507
+msgid "Choose which interface this rule applies to."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:534
+#: usr/local/www/firewall_nat_out_edit.php:508
+msgid "Hint: in most cases, you'll want to use WAN here."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:543
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "Choose which IP protocol this rule should match."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:545
+msgid "Hint: in most cases, you should specify"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+msgid "TCP"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:550
+msgid "Show source address and port range"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:608
+#: usr/local/www/firewall_rules_edit.php:1102
+msgid "Source port range"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:612
+#: usr/local/www/firewall_nat_edit.php:725
+#: usr/local/www/firewall_rules_edit.php:1106
+#: usr/local/www/firewall_rules_edit.php:1205
+msgid "from:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:615
+#: usr/local/www/firewall_nat_edit.php:628
+#: usr/local/www/firewall_nat_edit.php:728
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:771
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1122
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1221
+msgid "other"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:625
+#: usr/local/www/firewall_nat_edit.php:738
+#: usr/local/www/firewall_rules_edit.php:1119
+#: usr/local/www/firewall_rules_edit.php:1218
+msgid "to:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+msgid "Specify the source port or port range for this rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "This is usually"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "random"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+msgid ""
+"and almost never equal to the destination port range (and should usually be "
+"'any')"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "Hint: you can leave the"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "field empty if you only want to filter a single port."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:661
+#: usr/local/www/firewall_nat_out_edit.php:541
+#: usr/local/www/firewall_rules_edit.php:1059
+#: usr/local/www/firewall_rules_edit.php:1161
+msgid "This Firewall (self)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:721
+msgid "Destination port range"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:753
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"mapping."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:755
+msgid "field empty if you only want to map a single port"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:763
+msgid ""
+"Enter the internal IP address of the server on which you want to map the "
+"ports."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:765
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+#: usr/local/www/services_dnsmasq_edit.php:220
+#: usr/local/www/services_dnsmasq_edit.php:227
+#: usr/local/www/services_dnsmasq_edit.php:234
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+#: usr/local/www/services_unbound_domainoverride_edit.php:142
+#: usr/local/www/services_unbound_host_edit.php:220
+#: usr/local/www/services_unbound_host_edit.php:228
+#: usr/local/www/services_unbound_host_edit.php:236
+#: usr/local/www/system.php:318 usr/local/www/system.php:329
+msgid "e.g."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:768
+msgid "Redirect target port"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:782
+msgid ""
+"Specify the port on the machine with the IP address entered above. In case "
+"of a port range, specify the beginning port of the range (the end port will "
+"be calculated automatically)."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:786
+msgid "Hint: this is usually identical to the 'from' port above"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_out_edit.php:774
+#: usr/local/www/firewall_rules_edit.php:1425
+msgid "No XMLRPC Sync"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_out_edit.php:777
+#: usr/local/www/firewall_rules_edit.php:1432
+msgid ""
+"Hint: This prevents the rule on Master from automatically syncing to other "
+"CARP members. This does NOT prevent the rule from being overwritten on Slave."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:806
+msgid "Use system default"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:807
+#: usr/local/www/system_advanced_firewall.php:490
+msgid "Enable (NAT + Proxy)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/system_advanced_firewall.php:491
+msgid "Enable (Pure NAT)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:809
+#: usr/local/www/services_dyndns_edit.php:241
+#: usr/local/www/system_advanced_firewall.php:489
+#: usr/local/www/system_advanced_misc.php:576
+#: usr/local/www/system_advanced_misc.php:592
+#: usr/local/www/system_firmware.php:127
+msgid "Disable"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:815
+#: usr/local/www/firewall_nat_edit.php:846
+msgid "Filter rule association"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:819
+#: usr/local/www/firewall_nat_edit.php:852
+msgid "Pass"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:829
+msgid "View the filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:837
+msgid "Create new associated filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:850
+msgid "Add associated filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:851
+msgid "Add unassociated filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:854
+msgid ""
+"NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will "
+"only work on an interface containing the default gateway."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_out_edit.php:797
+#: usr/local/www/firewall_rules_edit.php:1715
+msgid "Rule Information"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:874
+#: usr/local/www/firewall_nat_out_edit.php:803
+#: usr/local/www/firewall_rules_edit.php:1719
+msgid "Created"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_nat_edit.php:884
+#: usr/local/www/firewall_nat_out_edit.php:805
+#: usr/local/www/firewall_nat_out_edit.php:816
+#: usr/local/www/firewall_rules_edit.php:1721
+#: usr/local/www/firewall_rules_edit.php:1729 usr/local/www/license.php:49
+msgid "by"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:882
+#: usr/local/www/firewall_nat_out_edit.php:814
+#: usr/local/www/firewall_rules_edit.php:1727
+msgid "Updated"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt.php:108
+msgid "External Prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt.php:109
+msgid "Internal prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt.php:161 usr/local/www/services_dhcp.php:1285
+#: usr/local/www/services_dhcpv6.php:891
+msgid "Do you really want to delete this mapping?"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:110
+msgid "Source prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:112
+msgid "Destination prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:162
+msgid "Edit NAT NPt entry"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:213
+msgid "Internal IPv6 Prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:235
+msgid ""
+"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. "
+"The prefix size specified for the internal IPv6 prefix will be applied to "
+"the \n"
+"external prefix."
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:241
+msgid "Destination IPv6 Prefix"
+msgstr ""
+
+#: usr/local/www/firewall_nat_npt_edit.php:265
+msgid "Enter the Global Unicast routable IPv6 prefix here"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:101
+#, php-format
+msgid " - %1$s to %2$s"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:104
+msgid "Manual Outbound NAT Switch"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:123
+msgid "Default rules for each interface have been created."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:245
+msgid "Mode:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:251
+msgid "Automatic outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:252
+msgid "(IPsec passthrough included)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:260
+msgid "Hybrid Outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:261
+msgid "(Automatic Outbound NAT + rules below)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:279
+msgid "Manual Outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:280
+msgid "(AON - Advanced Outbound NAT)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:288
+msgid "Disable Outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:289
+msgid "(No Outbound NAT rules)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:300
+msgid "Mappings:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_out.php:547
+msgid "NAT Address"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_out.php:548
+msgid "NAT Port"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_out.php:549
+msgid "Static Port"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:365
+msgid "This rule is being ignored"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:620
+msgid "YES"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:622
+msgid "NO"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:463
+msgid "edit mapping"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:537
+msgid "Automatic rules:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:559
+msgid "automatic outbound nat"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:638
+msgid ""
+"If automatic outbound NAT selected, a mapping is automatically created for "
+"each interface's subnet (except WAN-type connections) and the rules on "
+"\"Mappings\" section of this page are ignored.<br /><br /> If manual "
+"outbound NAT is selected, outbound NAT rules will not be automatically "
+"generated and only the mappings you specify on this page will be used. <br /"
+"><br /> If hybrid outbound NAT is selected, mappings you specify on this "
+"page will be used, followed by the automatically generated ones. <br /><br /"
+">If disable outbound NAT is selected, no rules will be used. <br /><br />If "
+"a target address other than an interface's IP address is used, then "
+"depending on the way the WAN connection is setup, a "
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:650
+msgid " may also be required."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:146
+msgid "Source bit count"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_rules_edit.php:395
+msgid "Destination bit count"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:166
+msgid ""
+"You must supply either a valid port or port alias for the source port entry."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:169
+msgid ""
+"You must supply either a valid port or port alias for the destination port "
+"entry."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:172
+msgid "You must supply a valid port for the NAT port entry."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:176
+msgid "A valid source must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:184
+msgid "A valid destination must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:192
+msgid "Negating destination address of \"any\" is invalid."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:197
+msgid "A valid target IP address must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:202
+msgid "A valid target IP must be specified when using the 'Other Subnet' type."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:205
+msgid ""
+"A valid target bit count must be specified when using the 'Other Subnet' "
+"type."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:218
+msgid "Only Round Robin pool options may be chosen when selecting an alias."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:446
+msgid "Edit Advanced Outbound NAT entry"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:461
+msgid "Do not NAT"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:464
+msgid ""
+"Enabling this option will disable NAT for traffic matching this rule and "
+"stop processing Outbound NAT rules."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:465
+msgid "Hint: in most cases, you won't use this option."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:525
+msgid "Choose which protocol this rule should match."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:527
+#, php-format
+msgid "Hint: in most cases, you should specify %s any %s here."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:564
+msgid "Enter the source network for the outbound NAT mapping."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:568
+msgid "Source port:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:571
+#: usr/local/www/firewall_nat_out_edit.php:623
+msgid "(leave blank for any)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:616
+msgid "Enter the destination network for the outbound NAT mapping."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:620
+msgid "Destination port:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:630
+msgid "Translation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:638
+msgid "Interface address"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:684
+msgid "Other Subnet (Enter Below)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:691
+msgid "Other Subnet:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:709
+msgid "Packets matching this rule will be mapped to the IP address given here."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:710
+msgid ""
+"If you want this rule to apply to another IP address rather than the IP "
+"address of the interface chosen above, select it here (you will need to "
+"define "
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:713
+msgid "addresses on the interface first)."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:745
+msgid ""
+"Only Round Robin types work with Host Aliases. Any type can be used with a "
+"Subnet."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:746
+msgid "Round Robin: Loops through the translation addresses."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:747
+msgid "Random: Selects an address from the translation address pool at random."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:748
+msgid ""
+"Source Hash: Uses a hash of the source address to determine the translation "
+"address, ensuring that the redirection address is always the same for a "
+"given source."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:749
+msgid ""
+"Bitmask: Applies the subnet mask and keeps the last portion identical; "
+"10.0.1.50 -&gt; x.x.x.50."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:750
+msgid ""
+"Sticky Address: The Sticky Address option can be used with the Random and "
+"Round Robin pool types to ensure that a particular source address is always "
+"mapped to the same translation address."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:755
+msgid "Port:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:763
+msgid "Enter the source port for the outbound NAT mapping."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:767
+msgid "Static-port:"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:109
+msgid "Drag and drop firewall rules ordering update."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:184
+#, php-format
+msgid ""
+"The settings have been applied. The firewall rules are now reloading in the "
+"background.<br />You can also %s monitor %s the reload progress"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:292 usr/local/www/firewall_rules.php:294
+msgid ""
+"The firewall rule configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:292 usr/local/www/guiconfig.inc:307
+#: usr/local/www/headjs.php:148
+msgid "Apply changes"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:315
+msgid "Floating"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:344
+#: usr/local/www/firewall_rules_edit.php:1519 usr/local/www/interfaces.php:511
+#: usr/local/www/interfaces.php:564 usr/local/www/services_dhcp.php:944
+#: usr/local/www/services_dhcp_edit.php:455
+#: usr/local/www/status_gateways.php:75 usr/local/www/system_gateways.php:219
+#: usr/local/www/system_gateways_edit.php:696
+#: usr/local/www/system_routes.php:235 usr/local/www/system_routes_edit.php:87
+#: usr/local/www/system_routes_edit.php:244
+msgid "Gateway"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:346
+#: usr/local/www/firewall_rules_edit.php:1492
+msgid "Schedule"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:371 usr/local/www/firewall_rules.php:774
+#: usr/local/www/firewall_rules.php:808
+msgid "add new rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:398
+msgid "Anti-Lockout Rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:420
+msgid "RFC 1918 networks"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:427 usr/local/www/interfaces.php:3348
+msgid "Block private networks"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:448
+msgid "Reserved/not assigned by IANA"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:455 usr/local/www/interfaces.php:3360
+msgid "Block bogon networks"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:480
+msgid "advanced settings set"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:858
+msgid "Mon"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+msgid "Tues"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:860
+msgid "Wed"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+msgid "Thur"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:862
+msgid "Fri"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:863
+msgid "Sat"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:864
+msgid "Sun"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "January"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "February"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "March"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "April"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "May"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "June"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "July"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "August"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "September"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "October"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "November"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "December"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:654
+msgid "Traffic matching this rule is currently being denied"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:657
+msgid "Traffic matching this rule is currently being allowed"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:665
+msgid "This rule is not currently active because its period has expired"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:769
+msgid "No floating rules are currently defined."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:771
+msgid "No rules are currently defined for this interface"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:772
+msgid ""
+"All incoming connections on this interface will be blocked until you add "
+"pass rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:774
+msgid "Click the"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:774
+msgid " button to add a new rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:820
+msgid "match"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:823
+msgid "block"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:826
+msgid "reject"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:829
+msgid "log"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:833
+msgid "pass (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:836
+msgid "match (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:839
+msgid "block (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:842
+msgid "reject (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:845
+msgid "log (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:851
+#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:359
+#: usr/local/www/vpn_l2tp.php:376
+msgid "Hint:"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:855
+msgid ""
+"Rules are evaluated on a first-match basis (i.e. the action of the first "
+"rule to match a packet will be executed). This means that if you use block "
+"rules, you'll have to pay attention to the rule order. Everything that isn't "
+"explicitly passed is blocked by default. "
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:862
+msgid ""
+"Floating rules are evaluated on a first-match basis (i.e. the action of the "
+"first rule to match a packet will be executed) only if the 'quick' option is "
+"checked on a rule. Otherwise they will only apply if no other rules match. "
+"Pay close attention to the rule order and options chosen. If no rule here "
+"matches, the per-interface or default rules are used. "
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:278
+#: usr/local/www/firewall_rules_edit.php:292
+msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:281
+msgid "You can not assign an IPv4 gateway group on IPv6 Address Family rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:284
+msgid "You can not assign an IPv6 gateway group on IPv4 Address Family rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:295
+msgid "You can not assign an IPv4 Gateway to an IPv6 Filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:298
+msgid "You can not assign an IPv6 Gateway to an IPv4 Filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:304
+msgid ""
+"You can not assign a protocol other than ICMP, TCP, UDP or TCP/UDP to a rule "
+"that applies to IPv4 and IPv6"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:308
+msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:382
+#, php-format
+msgid "%s is only valid with protocol TCP."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:384
+#, php-format
+msgid "%s is only valid if the gateway is set to 'default'."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:412
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:471
+#, php-format
+msgid ""
+"The Source IP address %s Address Family differs from the destination %s."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:473
+msgid "You can not use IPv6 addresses in IPv4 rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:475
+msgid "You can not use IPv4 addresses in IPv6 rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:479
+msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:495
+msgid "OS detection is only valid with protocol TCP."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:497
+msgid "Invalid OS detection selection. Please select a valid OS."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:502
+msgid "You have to select a queue when you select an acknowledge queue too."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:504
+msgid "Acknowledge queue and Queue cannot be the same."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:507
+msgid ""
+"You can not use limiters in Floating rules without choosing a direction."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:509
+msgid ""
+"You can not use gateways in Floating rules without choosing a direction."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:512
+msgid ""
+"You must select a queue for the In direction before selecting one for Out "
+"too."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:514
+msgid "In and Out Queue cannot be the same."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:516
+#: usr/local/www/firewall_rules_edit.php:518
+msgid ""
+"You cannot select one queue and one virtual interface for IN and Out. Both "
+"must be from the same type."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:520
+msgid ""
+"Please select a gateway, normally the interface selected gateway, so the "
+"limiters work correctly"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:523
+msgid "ID must be an integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:526
+msgid "You can only select a layer7 container for TCP and/or UDP protocols"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:528
+msgid "You can only select a layer7 container for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:533
+msgid ""
+"You can only specify the maximum number of established connections per host "
+"(advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:535
+msgid ""
+"You can only specify the maximum new connections per host / per second(s) "
+"(advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:537
+msgid ""
+"You can only specify the state timeout (advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:542
+msgid ""
+"You can only specify the maximum state entries (advanced option) for Pass "
+"type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:544
+msgid ""
+"You can only specify the maximum number of unique source hosts (advanced "
+"option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:546
+msgid ""
+"You can only specify the maximum number of established connections per host "
+"(advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:548
+msgid ""
+"You can only specify the maximum state entries per host (advanced option) "
+"for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:550
+msgid ""
+"You can only specify the maximum new connections per host / per second(s) "
+"(advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:552
+msgid ""
+"You can only specify the state timeout (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:557
+msgid ""
+"You cannot specify the maximum state entries (advanced option) if statetype "
+"is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:559
+msgid ""
+"You cannot specify the maximum number of unique source hosts (advanced "
+"option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:561
+msgid ""
+"You cannot specify the maximum number of established connections per host "
+"(advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:563
+msgid ""
+"You cannot specify the maximum state entries per host (advanced option) if "
+"statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:565
+msgid ""
+"You cannot specify the maximum new connections per host / per second(s) "
+"(advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:567
+msgid ""
+"You cannot specify the state timeout (advanced option) if statetype is none "
+"and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:571
+msgid "Maximum state entries (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:574
+msgid ""
+"Maximum number of unique source hosts (advanced option) must be a positive "
+"integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:577
+msgid ""
+"Maximum number of established connections per host (advanced option) must be "
+"a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:580
+msgid ""
+"Maximum state entries per host (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:583
+msgid ""
+"Maximum new connections per host / per second(s) (advanced option) must be a "
+"positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:586
+msgid "State timeout (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:590
+msgid ""
+"Both maximum new connections per host and the interval (per second(s)) must "
+"be specified"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:602
+msgid ""
+"If you specify TCP flags that should be set you should specify out of which "
+"flags as well."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:829
+msgid "Edit Firewall rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:850
+msgid "Choose what to do with packets that match the criteria specified below."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:851
+msgid ""
+"Hint: the difference between block and reject is that with reject, a packet "
+"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, "
+"whereas with block the packet is dropped silently. In either case, the "
+"original packet is discarded."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:866
+msgid "Quick"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:870
+msgid "Apply the action immediately on match."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:871
+msgid ""
+"Set this option if you need to apply this action to traffic that matches "
+"this rule immediately."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:878
+msgid "Associated filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:880
+msgid "This is associated to a NAT rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:881
+msgid ""
+"You cannot edit the interface, protocol, source, or destination of "
+"associated filter rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:888
+msgid "View the NAT rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:948
+msgid "Choose on which interface packets must come in to match this rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:972
+msgid "TCP/IP Version"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:984
+msgid "Select the Internet Protocol version this rule applies to"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "Hint: in most cases, you should specify "
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1002
+msgid "ICMP type"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_rules_edit.php:1030
+msgid ""
+"If you selected ICMP for the protocol above, you may specify an ICMP type "
+"here."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1018
+msgid "ICMPv6 type"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1096
+msgid "Show source port range"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "Specify the source port or port range for this rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid ""
+"and almost never equal to the destination port range (and should usually be"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "'to'"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1201
+msgid "Destination port range "
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1233
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "field empty if you only want to filter a single port"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1240
+msgid "Log"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1243
+msgid "Log packets that are handled by this rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid ""
+"Hint: the firewall has limited local log space. Don't turn on logging for "
+"everything. If you want to do a lot of logging, consider using a remote "
+"syslog server"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid "see the"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid "Diagnostics: System logs: Settings"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1245
+#: usr/local/www/services_captiveportal.php:1060
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "page"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1253
+#: usr/local/www/services_unbound_acls.php:300
+msgid "You may enter a description here for your reference."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1274 usr/local/www/pkg_edit.php:446
+msgid "Advanced features"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1277
+msgid "Source OS"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_rules_edit.php:1318
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1398
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1440
+#: usr/local/www/firewall_rules_edit.php:1495
+#: usr/local/www/firewall_rules_edit.php:1522
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1621
+#: usr/local/www/firewall_rules_edit.php:1676
+#: usr/local/www/interfaces.php:1743 usr/local/www/pkg_edit.php:1129
+#: usr/local/www/services_dnsmasq.php:307
+#: usr/local/www/services_unbound.php:371
+msgid "Show advanced option"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1283
+msgid "OS Type:"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1294
+msgid ""
+"Note: this only works for TCP rules. General OS choice matches all subtypes."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1299
+msgid "Diffserv Code Point"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1315
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/vpn_ipsec_phase1.php:862
+#: usr/local/www/vpn_ipsec_phase2.php:817
+msgid "Advanced Options"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1322
+msgid ""
+"This allows packets with IP options to pass. Otherwise they are blocked by "
+"default. This is usually only seen with multicast traffic."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1325
+msgid "This will disable auto generated reply-to for this rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1328
+msgid ""
+"You can mark a packet matching this rule and use this mark to match on other "
+"NAT/filter rules. It is called"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1328
+msgid "Policy filtering"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1331
+msgid "You can match packet on a mark placed before on another rule."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1333
+msgid " Maximum state entries this rule can create"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1334
+msgid " Maximum number of unique source hosts"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1335
+msgid " Maximum number of established connections per host (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1336
+msgid " Maximum state entries per host"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1345
+msgid "Maximum new connections per host / per second(s) (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1348
+msgid "State Timeout in seconds (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1350
+msgid "Note: Leave fields blank to disable that feature."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1355
+msgid "TCP flags"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1387
+msgid "Any flags."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1389
+msgid ""
+"Use this to choose TCP flags that must be set or cleared for this rule to "
+"match."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1395
+msgid "State Type"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1404
+msgid ""
+"Hint: This prevents states created by this rule to be sync'ed over pfsync."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1407
+#: usr/local/www/firewall_rules_edit.php:1416
+msgid "keep state"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1408
+#: usr/local/www/firewall_rules_edit.php:1417
+msgid "sloppy state"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1409
+#: usr/local/www/firewall_rules_edit.php:1418
+msgid "synproxy state"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1413
+msgid ""
+"Hint: Select which type of state tracking mechanism you would like to use. "
+"If in doubt, use keep state."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1416
+#: usr/local/www/firewall_rules_edit.php:1417
+msgid "Works with all IP protocols."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1418
+msgid ""
+"Proxies incoming TCP connections to help protect servers from spoofed TCP "
+"SYN floods. This option includes the functionality of keep state and "
+"modulate state combined."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1419
+msgid ""
+"Do not use state mechanisms to keep track. This is only useful if you're "
+"doing advanced queueing in certain situations. Please check the "
+"documentation."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1437
+msgid "802.1p"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1472
+msgid "Choose 802.1p priority to match on"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1476
+msgid "Choose 802.1p priority to apply"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1514
+msgid "Leave as 'none' to leave the rule enabled all the time."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1526
+#: usr/local/www/services_captiveportal.php:896
+#: usr/local/www/services_captiveportal.php:926
+#: usr/local/www/services_ntpd_gps.php:464
+#: usr/local/www/services_ntpd_gps.php:470
+#: usr/local/www/services_ntpd_gps.php:476
+#: usr/local/www/services_ntpd_gps.php:552
+#: usr/local/www/services_ntpd_pps.php:162
+#: usr/local/www/services_ntpd_pps.php:168
+#: usr/local/www/services_ntpd_pps.php:212
+msgid "default"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1563
+msgid ""
+"Leave as 'default' to use the system routing table. Or choose a gateway to "
+"utilize policy based routing."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1568
+msgid "In/Out"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"Choose the Out queue/Virtual interface only if you have also selected In."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"The Out selection is applied to traffic leaving the interface where the rule "
+"is created, In is applied to traffic coming into the chosen interface."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"If you are creating a floating rule, if the direction is In then the same "
+"rules apply, if the direction is out the selections are reverted Out is for "
+"incoming and In is for outgoing."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1618
+msgid "Ackqueue/Queue"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1668
+msgid "Choose the Acknowledge Queue only if you have selected Queue."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1673
+#: usr/local/www/firewall_shaper.php:415
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_layer7.php:411
+#: usr/local/www/firewall_shaper_queues.php:198
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_shaper_wizards.php:106
+msgid "Layer7"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1696
+msgid ""
+"Choose a Layer7 container to apply application protocol inspection rules. "
+"These are valid for TCP and UDP protocols only."
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:78
+#, php-format
+msgid "Cannot delete Schedule. Currently in use by %s"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:98
+msgid "Time Range(s)"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:104
+#: usr/local/www/firewall_schedule.php:234
+msgid "add a new schedule"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:116
+msgid "Schedule is currently active"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:221
+msgid "edit alias"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:222
+msgid "Do you really want to delete this schedule?"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:222
+msgid "delete alias"
+msgstr ""
+
+#: usr/local/www/firewall_schedule.php:241
+msgid ""
+"Schedules act as placeholders for time ranges to be used in Firewall Rules."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:90
+msgid "Schedule may not be named LAN."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:92
+msgid "Schedule may not be named WAN."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:94
+msgid "Schedule name cannot be blank."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:98
+msgid "Reserved word used for schedule name."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:101
+msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:110
+msgid "A Schedule with this name already exists."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:123
+#, php-format
+msgid "Invalid start time - '%s'"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:127
+#, php-format
+msgid "Invalid stop time - '%s'"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:175
+msgid "The schedule must have at least one time range configured."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:782
+msgid "Schedule information"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:788
+msgid "Schedule Name"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:794
+msgid "NOTE: This schedule is in use so the name may not be modified!"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:799
+msgid ""
+"The name of the alias may only consist of the characters a-z, A-Z and 0-9"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:816
+msgid "Month"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:859
+msgid "Tue"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:861
+msgid "Thu"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:918
+msgid ""
+"Click individual date to select that date only. Click the appropriate "
+"weekday Header to select all occurrences of that weekday."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:1008
+msgid "Start Time"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:1009
+msgid "Stop Time"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:939
+#: usr/local/www/firewall_schedule_edit.php:964
+msgid "Hr"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:946
+#: usr/local/www/firewall_schedule_edit.php:971
+msgid "Min"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:975
+msgid ""
+"Select the time range for the day(s) selected on the Month(s) above. A full "
+"day is 0:00-23:59."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:979
+msgid "Time Range Description"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:989
+msgid "Add Time"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:990
+msgid "Clear Selection"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:999
+msgid "Schedule repeat"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:1002
+msgid "Configured Ranges"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:1007
+msgid "Day(s)"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:132
+#: usr/local/www/firewall_shaper_vinterface.php:146
+msgid "Unable to write config.xml (Access Denied?)"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:161
+#: usr/local/www/firewall_shaper_vinterface.php:160
+msgid "Could not create new queue/discipline!"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:177 usr/local/www/firewall_shaper.php:186
+#: usr/local/www/firewall_shaper.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:173
+#: usr/local/www/firewall_shaper_vinterface.php:183
+#: usr/local/www/firewall_shaper_vinterface.php:193
+msgid "Queue not found!"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:272
+#: usr/local/www/firewall_shaper_vinterface.php:247
+msgid "Could not add new queue."
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:348
+#: usr/local/www/firewall_shaper_vinterface.php:316
+msgid "Queue Actions"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:359
+#: usr/local/www/firewall_shaper_vinterface.php:327
+msgid "Add new queue"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:370
+#: usr/local/www/firewall_shaper_vinterface.php:338
+msgid "Delete this queue"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:372
+msgid "Disable shaper on interface"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:406
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+msgid "The traffic shaper configuration has been changed."
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_layer7.php:408
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_shaper_wizards.php:103
+msgid "By Interface"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_layer7.php:409
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/firewall_shaper_wizards.php:104
+msgid "By Queue"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:414
+#: usr/local/www/firewall_shaper_layer7.php:410
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:394
+#: usr/local/www/firewall_shaper_wizards.php:105
+msgid "Limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:416
+#: usr/local/www/firewall_shaper_layer7.php:412
+#: usr/local/www/firewall_shaper_queues.php:199
+#: usr/local/www/firewall_shaper_vinterface.php:396
+#: usr/local/www/firewall_shaper_wizards.php:74
+#: usr/local/www/firewall_shaper_wizards.php:107
+#: usr/local/www/vpn_openvpn_client.php:448
+#: usr/local/www/vpn_openvpn_csc.php:319
+#: usr/local/www/vpn_openvpn_server.php:746
+msgid "Wizards"
+msgstr ""
+
+#: usr/local/www/firewall_shaper.php:427
+msgid "Remove Shaper"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:67
+msgid "You can add new layer7 protocol patterns by simply uploading the file"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:112
+msgid "Layer7 Rules Container not found!"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:162
+msgid "Found the following repeated protocol definitions"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:402
+#: usr/local/www/firewall_shaper_queues.php:189
+msgid "The traffic shaper configuration has been changed"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:433
+msgid "Create new l7 rules group"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:446
+msgid "Rule(s)"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:458
+msgid "Add one or more rules"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:474
+msgid "Structure"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_layer7.php:481
+msgid "Behaviour"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_queues.php:173
+msgid "Firewall: Shaper: By Queues View"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:102
+msgid ""
+"This pipe/queue is referenced in filter rules, please remove references from "
+"there before deleting."
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:114
+#, php-format
+msgid "No queue with name %s was found!"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:205
+#: usr/local/www/firewall_shaper_vinterface.php:230
+msgid "You cannot name a child queue with the same name as a parent limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:340
+msgid "Delete Limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:415
+msgid "Create new limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_wizards.php:78
+msgid "Multiple Lan/Wan"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_wizards.php:79
+msgid "Dedicated Links"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_wizards.php:116
+msgid "Wizard function"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_wizards.php:117
+msgid "Wizard Link"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:104
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"NAT mapping."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:138
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"Gateway."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:165
+msgid ""
+"This entry cannot be deleted because it is still referenced by a CARP IP "
+"with the description"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:170
+msgid ""
+"This entry cannot be deleted because it is still referenced by an IP alias "
+"entry with the description"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:203
+msgid "Virtual IP Addresses"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:218
+msgid "The VIP configuration has been changed."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:227
+msgid "CARP Settings"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:239
+msgid "Virtual IP address"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:285
+#: usr/local/www/services_captiveportal_zones.php:117
+#: usr/local/www/services_dyndns.php:179 usr/local/www/services_wol.php:189
+#: usr/local/www/system_advanced_sysctl.php:210
+msgid "Do you really want to delete this entry?"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "The virtual IP addresses defined on this page may be used in"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "mappings."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip.php:308
+msgid "You can check the status of your CARP Virtual IPs and interfaces "
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:119
+#: usr/local/www/services_dhcp_edit.php:180
+#: usr/local/www/services_dnsmasq_edit.php:103
+#: usr/local/www/services_unbound_host_edit.php:105
+msgid "A valid IP address must be specified."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:140
+msgid "This IP address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:149
+msgid ""
+"The interface chosen for the VIP has no IPv4 or IPv6 address configured so "
+"it cannot be used as a parent for the VIP."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:163
+msgid "You cannot use the network address for this VIP"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:165
+msgid "You cannot use the broadcast address for this VIP"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:177
+#, php-format
+msgid ""
+"VHID %s is already in use on interface %s. Pick a unique number on this "
+"interface."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:181
+msgid ""
+"You must specify a CARP password that is shared between the two VHID members."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:194
+#: usr/local/www/firewall_virtual_ip_edit.php:218
+msgid "For this type of vip localhost is not allowed."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:196
+#: usr/local/www/firewall_virtual_ip_edit.php:220
+msgid ""
+"A CARP parent interface can only be used with IP Alias type Virtual IPs."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:212
+#, php-format
+msgid ""
+"Sorry, we could not locate an interface with a matching subnet for %s. "
+"Please add an IP alias in this subnet on this interface."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+msgid "Virtual IP Address"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:316
+#: usr/local/www/firewall_virtual_ip_edit.php:318
+msgid ""
+"This must be the network's subnet mask. It does not specify a CIDR range."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:317
+msgid "This is a CIDR block of proxy ARP addresses."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:381
+msgid "Edit Virtual IP"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:387
+msgid "IP Alias"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:391
+msgid "Proxy ARP"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:393
+msgid "Other"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:415
+msgid "IP Address(es)"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:422
+msgid "Single address"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:442
+msgid "Expansion:"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:462
+msgid "Virtual IP Password"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:464
+msgid "Enter the VHID group password."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:468
+msgid "VHID Group"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:476
+msgid "Enter the VHID group that the machines will share"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:480
+msgid "Advertising Frequency"
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:497
+msgid ""
+"The frequency that this machine will advertise. 0 means usually master. "
+"Otherwise the lowest combination of both values in the cluster determines "
+"the master."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:522
+msgid ""
+"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running "
+"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type "
+"address for these cases."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:523
+msgid "For more information on CARP and the above values, visit the OpenBSD "
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:523
+msgid "CARP FAQ"
+msgstr ""
+
+#: usr/local/www/graph.php:117
+msgid "In"
+msgstr ""
+
+#: usr/local/www/graph.php:118
+msgid "Out"
+msgstr ""
+
+#: usr/local/www/graph.php:122
+msgid "Switch to bytes/s"
+msgstr ""
+
+#: usr/local/www/graph.php:123
+msgid "AutoScale"
+msgstr ""
+
+#: usr/local/www/graph.php:126
+msgid "Graph shows last"
+msgstr ""
+
+#: usr/local/www/graph.php:126 usr/local/www/interfaces.php:2721
+#: usr/local/www/interfaces.php:2843
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:357
+#: usr/local/www/interfaces_bridge_edit.php:366
+#: usr/local/www/interfaces_bridge_edit.php:437
+#: usr/local/www/services_dhcp.php:968 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp_edit.php:479
+#: usr/local/www/services_dhcp_edit.php:489
+#: usr/local/www/services_dhcpv6.php:655 usr/local/www/services_dhcpv6.php:665
+#: usr/local/www/services_ntpd_gps.php:463
+#: usr/local/www/services_ntpd_gps.php:469
+#: usr/local/www/services_ntpd_pps.php:161
+#: usr/local/www/services_rfc2136_edit.php:162
+#: usr/local/www/vpn_ipsec_phase1.php:855
+#: usr/local/www/vpn_ipsec_phase1.php:900
+#: usr/local/www/vpn_ipsec_phase2.php:810
+msgid "seconds"
+msgstr ""
+
+#: usr/local/www/graph.php:129 usr/local/www/graph_cpu.php:85
+msgid "Collecting initial data, please wait"
+msgstr ""
+
+#: usr/local/www/graph.php:141 usr/local/www/graph_cpu.php:97
+msgid "No URL for getURL"
+msgstr ""
+
+#: usr/local/www/graph.php:148 usr/local/www/graph_cpu.php:104
+msgid "No callback function for getURL"
+msgstr ""
+
+#: usr/local/www/graph.php:164 usr/local/www/graph_cpu.php:120
+msgid "Both getURL and XMLHttpRequest are undefined"
+msgstr ""
+
+#: usr/local/www/graph.php:201
+msgid "Switch to"
+msgstr ""
+
+#: usr/local/www/graph.php:207
+msgid "follow"
+msgstr ""
+
+#: usr/local/www/graph.php:368
+msgid "Kbps"
+msgstr ""
+
+#: usr/local/www/graph.php:370
+msgid "Mbps"
+msgstr ""
+
+#: usr/local/www/graph.php:372
+msgid "Gbps"
+msgstr ""
+
+#: usr/local/www/graph.php:378
+msgid "KB/s"
+msgstr ""
+
+#: usr/local/www/graph.php:380
+msgid "MB/s"
+msgstr ""
+
+#: usr/local/www/graph.php:382
+msgid "GB/s"
+msgstr ""
+
+#: usr/local/www/graph_cpu.php:84
+msgid "Cannot get CPU load"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:257
+#, php-format
+msgid "The field %s contains invalid characters."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:263
+#, php-format
+msgid "The field %s is required."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:280
+msgid "The following input errors were detected:"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:314
+msgid "apply"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:314
+msgid "save"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:314 usr/local/www/system_certmanager.php:667
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "create"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:337 usr/local/www/guiconfig.inc:402
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98
+#: usr/local/www/system_usermanager_settings_test.php:128
+msgid "Close"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:379
+msgid "Undo"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:448
+msgid "The changes have been applied successfully."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:453
+msgid ""
+"You can also <a href=\"status_filter_reload.php\">monitor</a> the filter "
+"reload progress."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1013
+msgid "Currently viewing: "
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1071
+msgid "move mouse out this alias to hide"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1111
+msgid "listing only first 10k items"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1135
+msgid "edit this alias"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1146 usr/local/www/guiconfig.inc:1158
+msgid "loading..."
+msgstr ""
+
+#: usr/local/www/halt.php:55
+msgid "Halt system"
+msgstr ""
+
+#: usr/local/www/halt.php:62
+msgid "The system is halting now. This may take one minute."
+msgstr ""
+
+#: usr/local/www/halt.php:68
+msgid "Are you sure you want to halt the system?"
+msgstr ""
+
+#: usr/local/www/index.php:128
+msgid "Widget configuration has been changed."
+msgstr ""
+
+#: usr/local/www/index.php:185
+#, php-format
+msgid "Welcome to %s!\n"
+msgstr ""
+
+#: usr/local/www/index.php:186
+msgid "One moment while we start the initial setup wizard."
+msgstr ""
+
+#: usr/local/www/index.php:187
+msgid ""
+"Embedded platform users: Please be patient, the wizard takes a little longer "
+"to run than the normal GUI."
+msgstr ""
+
+#: usr/local/www/index.php:188
+#, php-format
+msgid "To bypass the wizard, click on the %s logo on the initial page."
+msgstr ""
+
+#: usr/local/www/index.php:467
+msgid "Status: Dashboard"
+msgstr ""
+
+#: usr/local/www/index.php:497
+msgid "Available Widgets"
+msgstr ""
+
+#: usr/local/www/index.php:534
+msgid "Welcome to the Dashboard page"
+msgstr ""
+
+#: usr/local/www/index.php:541
+msgid ""
+"This page allows you to customize the information you want to be displayed!"
+msgstr ""
+
+#: usr/local/www/index.php:542
+msgid "To get started click the"
+msgstr ""
+
+#: usr/local/www/index.php:542
+msgid "icon to add widgets."
+msgstr ""
+
+#: usr/local/www/index.php:544
+msgid "You can move any widget around by clicking and dragging the title."
+msgstr ""
+
+#: usr/local/www/index.php:551
+msgid "Click here to add widgets"
+msgstr ""
+
+#: usr/local/www/index.php:553
+msgid "Click here for help"
+msgstr ""
+
+#: usr/local/www/index.php:557
+msgid "Save Settings"
+msgstr ""
+
+#: usr/local/www/index.php:730
+msgid "Loading selected widget"
+msgstr ""
+
+#: usr/local/www/installer/installer.php:187
+msgid "Could not open /tmp/installer.sh for writing"
+msgstr ""
+
+#: usr/local/www/installer/installer.php:362
+#, php-format
+msgid "Beginning installation on disk %s."
+msgstr ""
+
+#: usr/local/www/installer/installer.php:408
+msgid "Installer"
+msgstr ""
+
+#: usr/local/www/installer/installer.php:916
+#: usr/local/www/installer/installer.php:1104
+msgid "ERROR: Could not find any suitable disks for installation."
+msgstr ""
+
+#: usr/local/www/interfaces.php:250
+#, php-format
+msgid "Sorry, an alias with the name %s already exists."
+msgstr ""
+
+#: usr/local/www/interfaces.php:415
+msgid "You have already applied your settings!"
+msgstr ""
+
+#: usr/local/www/interfaces.php:495
+msgid "An interface with the specified description already exists."
+msgstr ""
+
+#: usr/local/www/interfaces.php:500
+msgid "The interface description cannot contain only numbers."
+msgstr ""
+
+#: usr/local/www/interfaces.php:504
+msgid ""
+"The DHCP Server is active on this interface and it can be used only with a "
+"static IP configuration. Please disable the DHCP Server service on this "
+"interface first, then change the interface configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:506
+msgid ""
+"The DHCP6 Server is active on this interface and it can be used only with a "
+"static IPv6 configuration. Please disable the DHCPv6 Server service on this "
+"interface first, then change the interface configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:511 usr/local/www/interfaces.php:1777
+#: usr/local/www/status_interfaces.php:260
+msgid "IPv4 address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:511 usr/local/www/interfaces.php:564
+msgid "Subnet bit count"
+msgstr ""
+
+#: usr/local/www/interfaces.php:518
+msgid ""
+"This interface is referenced by IPv4 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:576
+#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:598
+#: usr/local/www/interfaces.php:603
+#, php-format
+msgid "You have to reassign the interface to be able to configure as %s."
+msgstr ""
+
+#: usr/local/www/interfaces.php:527 usr/local/www/interfaces.php:2643
+msgid "Modem Port"
+msgstr ""
+
+#: usr/local/www/interfaces.php:527 usr/local/www/interfaces.php:2631
+#: usr/local/www/interfaces_ppps_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:536
+msgid "Phone Number"
+msgstr ""
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:536
+msgid "PPPoE username"
+msgstr ""
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:536
+msgid "PPPoE password"
+msgstr ""
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:2711
+#: usr/local/www/interfaces.php:2833
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:210
+msgid "Dial on demand"
+msgstr ""
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:210
+msgid "Idle timeout value"
+msgstr ""
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP username"
+msgstr ""
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP password"
+msgstr ""
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP local IP address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP subnet"
+msgstr ""
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP remote IP address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP username"
+msgstr ""
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP password"
+msgstr ""
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP remote IP address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:571
+msgid ""
+"This interface is referenced by IPv6 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:582
+msgid "You can only have one interface configured in 6rd with same prefix."
+msgstr ""
+
+#: usr/local/www/interfaces.php:593
+#, php-format
+msgid "You can only have one interface configured as 6to4."
+msgstr ""
+
+#: usr/local/www/interfaces.php:606
+msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID."
+msgstr ""
+
+#: usr/local/www/interfaces.php:618
+#, php-format
+msgid "This track6 prefix ID is already being used in %s."
+msgstr ""
+
+#: usr/local/www/interfaces.php:631
+msgid "A valid IPv4 address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:634
+msgid "This IPv4 address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:639
+msgid "This IPv4 address is the network address and cannot be used"
+msgstr ""
+
+#: usr/local/www/interfaces.php:641
+msgid "This IPv4 address is the broadcast address and cannot be used"
+msgstr ""
+
+#: usr/local/www/interfaces.php:647
+msgid "This IPv4 address conflicts with a Static Route."
+msgstr ""
+
+#: usr/local/www/interfaces.php:656 usr/local/www/services_dhcpv6_edit.php:132
+msgid "A valid IPv6 address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:659
+msgid "This IPv6 address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:664
+msgid "This IPv6 address conflicts with a Static Route."
+msgstr ""
+
+#: usr/local/www/interfaces.php:672 usr/local/www/interfaces.php:674
+msgid "A valid subnet bit count must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:676
+msgid "A valid alias IP address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:678
+msgid "A valid alias subnet bit count must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:680
+msgid "A valid alias IP address must be specified to reject DHCP Leases from."
+msgstr ""
+
+#: usr/local/www/interfaces.php:694 usr/local/www/system_routes_edit.php:99
+msgid "A valid gateway must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:698
+msgid "The service name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/interfaces.php:700 usr/local/www/interfaces.php:716
+#: usr/local/www/interfaces_ppps_edit.php:228
+msgid "The idle timeout value must be an integer."
+msgstr ""
+
+#: usr/local/www/interfaces.php:703 usr/local/www/interfaces_ppps_edit.php:231
+msgid "A valid PPPoE reset hour must be specified (0-23)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:706 usr/local/www/interfaces_ppps_edit.php:234
+msgid "A valid PPPoE reset minute must be specified (0-59)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:708 usr/local/www/interfaces_ppps_edit.php:236
+msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:710
+msgid "A valid PPTP local IP address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:712
+msgid "A valid PPTP subnet bit count must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:714
+msgid "A valid PPTP remote IP address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:718 usr/local/www/services_dhcp_edit.php:183
+#: usr/local/www/services_wol.php:87 usr/local/www/services_wol_edit.php:94
+msgid "A valid MAC address must be specified."
+msgstr ""
+
+#: usr/local/www/interfaces.php:731
+#, php-format
+msgid "The MTU must be between %d and %d bytes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:742
+msgid "The MTU of a VLAN cannot be greater than that of its parent interface."
+msgstr ""
+
+#: usr/local/www/interfaces.php:757
+#, php-format
+msgid "Interface %s (VLAN) has MTU set to a larger value"
+msgstr ""
+
+#: usr/local/www/interfaces.php:763
+msgid "The MSS must be an integer between 576 and 65535 bytes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:767 usr/local/www/interfaces.php:3075
+#: usr/local/www/interfaces_wireless.php:111
+#: usr/local/www/interfaces_wireless_edit.php:90
+#: usr/local/www/interfaces_wireless_edit.php:182
+#: usr/local/www/load_balancer_pool.php:132
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:207
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/status_lb_pool.php:132 usr/local/www/vpn_ipsec.php:276
+#: usr/local/www/vpn_ipsec.php:444 usr/local/www/vpn_ipsec_phase2.php:563
+msgid "Mode"
+msgstr ""
+
+#: usr/local/www/interfaces.php:770 usr/local/www/interfaces.php:3085
+#: usr/local/www/status_interfaces.php:363
+msgid "SSID"
+msgstr ""
+
+#: usr/local/www/interfaces.php:805
+msgid ""
+"Invalid WEP key. Enter a valid 40, 64, 104 or 128 bit WEP key."
+msgstr ""
+
+#: usr/local/www/interfaces.php:813
+msgid "The WPA passphrase must be between 8 and 63 characters long."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1383
+#, php-format
+msgid ""
+"Unable to change mode to %s. You may already have the maximum number of "
+"wireless clones supported in this mode."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1411
+msgid "Static IPv4"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1411 usr/local/www/status_interfaces.php:126
+#: usr/local/www/vpn_pppoe.php:88
+msgid "PPPoE"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "Static IPv6"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "DHCP6"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "SLAAC"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "6rd Tunnel"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "6to4 Tunnel"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1412
+msgid "Track Interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1633
+#, php-format
+msgid "The %s configuration has been changed."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1633
+msgid "Don't forget to adjust the DHCP Server range if needed after applying."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1642
+msgid "General configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1648
+msgid "Enable Interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1658
+msgid "Enter a description (name) for the interface here."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1662
+msgid "IPv4 Configuration Type"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1678
+msgid "IPv6 Configuration Type"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1703
+msgid "Insert my local MAC address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1706
+msgid ""
+"This field can be used to modify (\"spoof\") the MAC address of this "
+"interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1708
+msgid "(may be required with some cable connections)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1709
+msgid ""
+"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1714
+#: usr/local/www/interfaces_ppps_edit.php:769
+#: usr/local/www/status_interfaces.php:326
+msgid "MTU"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1719
+msgid ""
+"If you leave this field blank, the adapter's default MTU will be used. This "
+"is typically 1500 bytes but can vary in some circumstances."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1725
+msgid "MSS"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1729
+msgid ""
+"If you enter a value in this field, then MSS clamping for TCP connections to "
+"the value entered above minus 40 (TCP/IP header size) will be in effect."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1738
+msgid "Speed and duplex"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1759
+msgid ""
+"Here you can explicitly set speed and duplex mode for this interface. "
+"WARNING: You MUST leave this set to autoselect (automatically negotiate "
+"speed) unless the port this interface connects to has its speed and duplex "
+"forced."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1774
+msgid "Static IPv4 configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1795
+msgid "IPv4 Upstream Gateway"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1813 usr/local/www/interfaces.php:1919
+#: usr/local/www/system_routes_edit.php:257
+msgid "add a new one."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1816 usr/local/www/interfaces.php:1922
+msgid ""
+"If this interface is an Internet connection, select an existing Gateway from "
+"the list or add a new one using the link above."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1923
+msgid "On local LANs the upstream gateway should be \"none\"."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1831 usr/local/www/system_routes_edit.php:270
+msgid "Add new gateway:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1839
+msgid "Default gateway:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1842 usr/local/www/system_routes_edit.php:288
+msgid "Gateway Name:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1845
+msgid "Gateway IPv4:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1848 usr/local/www/interfaces.php:1954
+#: usr/local/www/system_routes_edit.php:294
+msgid "Description:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1961
+#: usr/local/www/system_routes_edit.php:301
+msgid "Save Gateway"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1880
+msgid "Static IPv6 configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1901
+msgid "IPv6 Upstream Gateway"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1937
+msgid "Add new v6 gateway:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1945
+msgid "Default v6 gateway:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1948
+msgid "Gateway Name IPv6:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1951
+msgid "Gateway IPv6:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1985
+msgid ""
+"DHCP client configuration &nbsp; &nbsp; <input name="
+"\"adv_dhcp_config_advanced\" type=\"checkbox\" id=\"adv_dhcp_config_advanced"
+"\" value=\"\" onclick=\"show_adv_dhcp_config(this)\" /> Advanced &nbsp; "
+"&nbsp; <input name=\"adv_dhcp_config_file_override\" type=\"checkbox\" id="
+"\"adv_dhcp_config_file_override\" value=\"\" onclick="
+"\"show_adv_dhcp_config(this)\" /> Config File Override &nbsp; &nbsp; "
+msgstr ""
+
+#: usr/local/www/interfaces.php:1994
+msgid "Enable DHCP+"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1997
+msgid "Enable DHCP+L2TP or DHCP+PPTP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1999
+msgid ""
+"Status changes on this interface will trigger reconfiguration (if necessary) "
+"of the associated PPTP/L2TP link."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2008
+msgid ""
+"The value in this field is sent as the DHCP client identifier and hostname "
+"when requesting a DHCP lease. Some ISPs may require this (for client "
+"identification)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2014
+msgid "Alias IPv4 address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2028
+msgid ""
+"The value in this field is used as a fixed alias IPv4 address by the DHCP "
+"client."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2033
+msgid "Reject Leases From"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2037
+msgid ""
+"If there is a certain upstream DHCP server that should be ignored, place the "
+"IP address or subnet of the DHCP server to be ignored here."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2038
+msgid ""
+"This is useful for rejecting leases from cable modems that offer private IPs "
+"when they lose upstream sync."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2043
+msgid "Protocol Timing"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2064
+msgid ""
+"The values in these fields are DHCP protocol timings used when requesting a "
+"lease. <br /> "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2105
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Lease "
+"Requirements and Requests</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2107
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Send</a> "
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2110
+msgid ""
+"The values in this field are DHCP options to be sent when requesting a DHCP "
+"lease. [option declaration [, ...]] <br />Value Substitutions: {interface}, "
+"{hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />Where C is U(pper) or "
+"L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) "
+"(omitted for none). <br />Some ISPs may require certain options be or not be "
+"sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2115
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Request</"
+"a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2118
+msgid ""
+"The values in this field are DHCP option 55 to be sent when requesting a "
+"DHCP lease. [option [, ...]] <br />Some ISPs may require certain options be "
+"or not be requested. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2121
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Require</"
+"a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2124
+msgid ""
+"The values in this field are DHCP options required by the client when "
+"requesting a DHCP lease. [option [, ...]] "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2129
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Option</a> <a target=\"FreeBSD_DHCP\" "
+"href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;"
+"sektion=5#OPTION_MODIFIERS\">Modifiers</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2133
+msgid ""
+"The values in this field are DHCP option modifiers applied to obtained DHCP "
+"lease. [modifier option declaration [, ...]] <br /> modifiers: (default, "
+"supersede, prepend, append)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2139
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5\">Configuration File</a> Override"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2143 usr/local/www/interfaces.php:2388
+msgid ""
+"The value in this field is the full absolute path to a DHCP client "
+"configuration file. [/[dirname/[.../]]filename[.ext]] <br /> Value "
+"Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, "
+"{mac_addr_hexCD} <br />Where C is U(pper) or L(ower) Case, and D is \" :-.\" "
+"Delimiter (space, colon, hyphen, or period) (omitted for none). <br />Some "
+"ISPs may require certain options be or not be sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2197
+msgid ""
+"DHCP6 client configuration &nbsp; &nbsp; <input name="
+"\"adv_dhcp6_config_advanced\" type=\"checkbox\" id="
+"\"adv_dhcp6_config_advanced\" value=\"\" onclick="
+"\"show_adv_dhcp6_config(this)\" /> Advanced &nbsp; &nbsp; <input name="
+"\"adv_dhcp6_config_file_override\" type=\"checkbox\" id="
+"\"adv_dhcp6_config_file_override\" value=\"\" onclick="
+"\"show_adv_dhcp6_config(this)\" /> Config File Override &nbsp; &nbsp; "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2206
+msgid "DHCPv6 Unique Identifier (DUID)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2210
+msgid ""
+"The value in this field is sent as the DHCPv6 client identifier when "
+"requesting a DHCPv6 lease."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2215
+#, php-format
+msgid "The current DUID is: '%s'"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2222
+msgid "Use IPv4 connectivity as parent interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2225
+msgid "Request a IPv6 prefix/information through the IPv4 connectivity link"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2229
+msgid "Request only an IPv6 prefix"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2232
+msgid "Only request an IPv6 prefix, do not request an IPv6 address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2236
+msgid "DHCPv6 Prefix Delegation size"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2249
+msgid ""
+"The value in this field is the delegated prefix length provided by the "
+"DHCPv6 server. Normally specified by the ISP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2253
+msgid "Send IPv6 prefix hint"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2256
+msgid ""
+"Send an IPv6 prefix hint to indicate the desired prefix size for delegation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2262
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Interface_statement\">Interface Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2265
+msgid "Information Only"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2268
+msgid "Send Options"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2271
+msgid ""
+"The values in this field are DHCP send options to be sent when requesting a "
+"DHCP lease. [option declaration [, ...]] <br />Value Substitutions: "
+"{interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />Where C "
+"is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, "
+"hyphen, or period) (omitted for none). <br />Some DHCP services may require "
+"certain options be or not be sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2277
+msgid "Request Options"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2280
+msgid ""
+"The values in this field are DHCP request options to be sent when requesting "
+"a DHCP lease. [option [, ...]] <br />Some DHCP services may require certain "
+"options be or not be requested. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2284
+msgid "Script"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2287
+msgid ""
+"The value in this field is the absolute path to a script invoked on certain "
+"conditions including when a reply message is received. <br />[/[dirname/"
+"[.../]]filename[.ext]] "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2294
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Identity_association_statement\">Identity Association Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2299
+msgid "Non-Temporary Address Allocation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2301
+msgid "id-assoc na"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2302 usr/local/www/interfaces.php:2319
+msgid "<i>ID</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2305 usr/local/www/status_lb_vs.php:79
+#: usr/local/www/vpn_ipsec_phase2.php:586
+#: usr/local/www/vpn_ipsec_phase2.php:621
+#: usr/local/www/vpn_ipsec_phase2.php:663
+#: usr/local/www/vpn_ipsec_phase2.php:669
+msgid "Address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2306
+msgid "<i>ipv6-address</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2325
+msgid "<i>pltime</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2327
+msgid "<i>vltime</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2316
+msgid "Prefix Delegation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2318
+msgid "id-assoc pd"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2322
+msgid "Prefix"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2323
+msgid "<i>ipv6-prefix</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2335
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Prefix_interface_statement\">Prefix Interface Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2338
+msgid "Prefix Interface "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2339
+msgid "<i>sla-id</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2341
+msgid "<i>sla-len</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2348
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Authentication_statement\">Authentication Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2351
+msgid "<i>authname</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2353
+msgid "<i>protocol</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2355
+msgid "<i>algorithm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2357
+msgid "<i>rdm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2364
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Keyinfo_statement\">Keyinfo Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2367
+msgid "<i>keyname</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2369
+msgid "<i>realm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2372
+msgid "<i>keyid</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2374
+msgid "<i>secret</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2376
+msgid "<i>expire</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2383
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports"
+"\">Configuration File</a> Override"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2469
+msgid "6RD Configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2472
+msgid "6RD prefix"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2476
+msgid ""
+"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. "
+"'2001:db8::/32'"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2480
+msgid "6RD Border Relay"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2484
+msgid ""
+"The value in this field is 6RD IPv4 gateway address assigned by your ISP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2488
+msgid "6RD IPv4 Prefix length"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2500
+msgid ""
+"The value in this field is the 6RD IPv4 prefix length. Normally specified by "
+"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD "
+"prefix."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2513
+msgid "Track IPv6 Interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2516
+msgid "IPv6 Interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2554
+msgid "This selects the dynamic IPv6 WAN interface to track for configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2558
+msgid "IPv6 Prefix ID"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2569
+msgid ""
+"The value in this field is the (Delegated) IPv6 prefix ID. This determines "
+"the configurable network ID based on the dynamic IPv6 connection"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2571
+msgid "default value is 0."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2584
+msgid "PPP configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2587
+#: usr/local/www/interfaces_ppps_edit.php:491
+msgid "Service Provider"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2591
+#: usr/local/www/interfaces_ppps_edit.php:495
+msgid "Country:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2599
+#: usr/local/www/interfaces_ppps_edit.php:503
+msgid "Provider:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2607
+#: usr/local/www/interfaces_ppps_edit.php:511
+msgid "Plan:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces_ppps_edit.php:519
+msgid "Select to fill in data for your service provider."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2637
+#: usr/local/www/interfaces_ppps_edit.php:543
+msgid "Access Point Name (APN)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2667
+msgid "Advanced PPP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2670 usr/local/www/interfaces.php:2675
+#: usr/local/www/interfaces.php:2779 usr/local/www/interfaces.php:2784
+#: usr/local/www/interfaces.php:2850 usr/local/www/interfaces.php:2855
+msgid "Click here"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2671
+msgid "to edit PPP configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2676
+msgid "to create a PPP configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2690
+msgid "PPPoE configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2705
+#: usr/local/www/interfaces_ppps_edit.php:602
+msgid "Service name"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2707
+msgid "Hint: this field can usually be left empty"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2714 usr/local/www/interfaces.php:2836
+msgid "Enable Dial-On-Demand mode"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2715
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2715 usr/local/www/interfaces.php:2837
+msgid "virtual full time"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2715 usr/local/www/interfaces.php:2837
+msgid ""
+"connection. The interface is configured, but the actual connection of the "
+"link is delayed until qualifying outgoing traffic is detected."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2719 usr/local/www/interfaces.php:2841
+#: usr/local/www/services_captiveportal.php:550
+msgid "Idle timeout"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2721 usr/local/www/interfaces.php:2843
+msgid ""
+"If no qualifying outgoing packets are transmitted for the specified number "
+"of seconds, the connection is brought down. An idle timeout of zero disables "
+"this feature."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2725
+#: usr/local/www/interfaces_ppps_edit.php:609
+msgid "Periodic reset"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2733
+#: usr/local/www/interfaces_ppps_edit.php:617
+#: usr/local/www/status_rrd_graph.php:450
+#: usr/local/www/status_rrd_graph_settings.php:169
+msgid "Custom"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2734
+#: usr/local/www/interfaces_ppps_edit.php:618
+msgid "Pre-Set"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2735
+#: usr/local/www/interfaces_ppps_edit.php:619
+msgid "Select a reset timing type"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2743
+#: usr/local/www/interfaces_ppps_edit.php:627
+msgid "hour (0-23)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2745
+#: usr/local/www/interfaces_ppps_edit.php:629
+msgid "minute (0-59)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2747
+#: usr/local/www/interfaces_ppps_edit.php:631
+msgid "reset at a specific date (mm/dd/yyyy)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2750
+#: usr/local/www/interfaces_ppps_edit.php:634
+msgid ""
+"If you leave the date field empty, the reset will be executed each day at "
+"the time you did specify using the minutes and hour field."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2758
+#: usr/local/www/interfaces_ppps_edit.php:642
+msgid "reset at each month ('0 0 1 * *')"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2761
+#: usr/local/www/interfaces_ppps_edit.php:645
+msgid "reset at each week ('0 0 * * 0')"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2764
+#: usr/local/www/interfaces_ppps_edit.php:648
+msgid "reset at each day ('0 0 * * *')"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2767
+#: usr/local/www/interfaces_ppps_edit.php:651
+msgid "reset at each hour ('0 * * * *')"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2776
+msgid "Advanced and MLPPP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2780
+msgid ""
+"for additional PPPoE configuration options. Save first if you made changes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2785
+msgid "for advanced PPPoE configuration options and MLPPP configuration."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2799
+msgid "PPTP/L2TP configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2814
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Local IP address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2827
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Remote IP address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2837
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2851
+msgid ""
+"for additional PPTP and L2TP configuration options. Save first if you made "
+"changes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2856
+msgid "for advanced PPTP and L2TP configuration options"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2871
+msgid ""
+"Common wireless configuration - Settings apply to all wireless networks on"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2874
+msgid "Persist common settings"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2877
+msgid ""
+"Enabling this preserves the common wireless configuration through interface "
+"deletions and reassignments."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2881
+msgid "Standard"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2901
+msgid "Protection Mode"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2904
+msgid "Protection mode off"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2905
+msgid "Protection mode CTS to self"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2906
+msgid "Protection mode RTS and CTS"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2909
+msgid ""
+"For IEEE 802.11g, use the specified technique for protecting OFDM frames in "
+"a mixed 11b/11g network."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2917
+msgid "Transmit power"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2930
+msgid ""
+"Note: Typically only a few discreet power settings are available and the "
+"driver will use the setting closest to the specified value. Not all "
+"adapters support changing the transmit power setting."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2934 usr/local/www/status_interfaces.php:356
+msgid "Channel"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2937 usr/local/www/interfaces.php:2984
+#: usr/local/www/interfaces.php:2996 usr/local/www/vpn_ipsec_phase1.php:882
+msgid "Auto"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2957
+msgid ""
+"Legend: wireless standards - channel # (frequency @ max TX power / TX power "
+"allowed in reg. domain)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2959
+msgid ""
+"Note: Not all channels may be supported by your card. Auto may override the "
+"wireless standard selected above."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2964
+msgid "Antenna settings"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2970
+msgid "Diversity"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2973 usr/local/www/vpn_l2tp.php:299
+#: usr/local/www/vpn_pppoe_edit.php:372 usr/local/www/vpn_pptp.php:320
+msgid "Off"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2974
+msgid "On"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2981
+msgid "Transmit antenna"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2985 usr/local/www/interfaces.php:2997
+msgid "#1"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2986 usr/local/www/interfaces.php:2998
+msgid "#2"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2993
+msgid "Receive antenna"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3005
+msgid ""
+"Note: The antenna numbers do not always match up with the labels on the card."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3011
+msgid "Distance setting"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3015
+msgid ""
+"Note: This field can be used to tune ACK/CTS timers to fit the distance "
+"between AP and Client"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3016
+msgid "(measured in meters)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3021
+msgid "Regulatory settings"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3023
+msgid "Regulatory domain"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3037
+msgid ""
+"Note: Some cards have a default that is not recognized and require changing "
+"the regulatory domain to one in this list for the changes to other "
+"regulatory settings to work."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3039
+msgid "Country (listed with country code and regulatory domain)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3053
+msgid ""
+"Note: Any country setting other than \"Default\" will override the "
+"regulatory domain setting"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3055
+msgid "Location"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3058
+msgid "Indoor"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3059
+msgid "Outdoor"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3060
+msgid "Anywhere"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3063
+msgid ""
+"These settings may affect which channels are available and the maximum "
+"transmit power allowed on those channels. Using the correct settings to "
+"comply with local regulatory requirements is recommended."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3065
+msgid ""
+"Note: All wireless networks on this interface will be temporarily brought "
+"down when changing regulatory settings. Some of the regulatory domains or "
+"country codes may not be allowed by some cards. These settings may not be "
+"able to add additional channels that are not already supported."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3072
+msgid "Network-specific wireless configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3078
+#: usr/local/www/interfaces_wireless_edit.php:185
+msgid "Infrastructure (BSS)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3079
+#: usr/local/www/interfaces_wireless_edit.php:186
+msgid "Ad-hoc (IBSS)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3080
+#: usr/local/www/interfaces_wireless_edit.php:187
+msgid "Access Point"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3089
+msgid ""
+"Note: Only required in Access Point mode. If left blank in Ad-hoc or "
+"Infrastructure mode, this interface will connect to any available SSID"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3094
+msgid "Minimum wireless standard"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3097
+msgid "Any"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3099
+msgid "802.11g"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3101
+msgid "802.11n"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3104
+msgid ""
+"When operating as an access point, allow only stations capable of the "
+"selected wireless standard to associate (stations not capable are not "
+"permitted to associate)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3109
+msgid "802.11g only"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3112
+msgid ""
+"When operating as an access point in 802.11g mode, allow only 11g-capable "
+"stations to associate (11b-only stations are not permitted to associate)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3117
+msgid "Allow intra-BSS communication"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3121
+msgid ""
+"When operating as an access point, enable this if you want to pass packets "
+"between wireless clients directly."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3123
+msgid ""
+"Disabling the internal bridging is useful when traffic is to be processed "
+"with packet filtering."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3127
+msgid "Enable WME"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3130
+msgid "Setting this option will force the card to use WME (wireless QoS)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3134
+msgid "Enable Hide SSID"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3138
+msgid "Setting this option will force the card to NOT broadcast its SSID"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3140
+msgid "(this might create problems for some clients)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3144
+msgid "WEP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3147
+msgid "Enable WEP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3152
+msgid "TX key"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3155
+msgid "Key 1:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3164
+msgid "Key 2:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3173
+msgid "Key 3:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3182
+msgid "Key 4:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3192
+msgid ""
+"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits "
+"preceded by '0x'."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3193
+msgid ""
+"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits "
+"preceded by '0x'."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3197 usr/local/www/interfaces.php:3221
+msgid "WPA"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3200
+msgid "Enable WPA"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3205
+msgid "WPA Pre-Shared Key"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3208
+msgid "PSK:"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3214
+msgid "WPA Passphrase must be between 8 and 63 characters long."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3218
+msgid "WPA Mode"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3222
+msgid "WPA2"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3223 usr/local/www/interfaces.php:3233
+#: usr/local/www/interfaces.php:3243 usr/local/www/interfaces.php:3252
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+msgid "Both"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3228
+msgid "WPA Key Management Mode"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3231 usr/local/www/vpn_ipsec_keys.php:113
+#: usr/local/www/vpn_ipsec_keys_edit.php:72
+#: usr/local/www/vpn_ipsec_keys_edit.php:142
+#: usr/local/www/vpn_ipsec_mobile.php:348
+#: usr/local/www/vpn_ipsec_phase1.php:174
+#: usr/local/www/vpn_ipsec_phase1.php:747
+#: usr/local/www/vpn_ipsec_settings.php:206
+msgid "Pre-Shared Key"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3232
+msgid "Extensible Authentication Protocol"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3241
+msgid "Open System Authentication"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3242
+msgid "Shared Key Authentication"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3245
+msgid "Note: Shared Key Authentication requires WEP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3249
+msgid "WPA Pairwise"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3253
+msgid "AES (recommended)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3254
+msgid "TKIP"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3259
+msgid "Key Rotation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3262
+msgid ""
+"Allowed values are 1-9999. Must be longer than Master Key "
+"Regeneration time."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3266
+msgid "Master Key Regeneration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3269
+msgid ""
+"Allowed values are 1-9999. Must be shorter than Key Rotation time."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3273
+msgid "Strict Key Regeneration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3276
+msgid ""
+"Setting this option will force the AP to rekey whenever a client "
+"disassociates."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3280
+msgid "Enable IEEE802.1X Authentication"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3283
+msgid "Setting this option will enable 802.1X authentication."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3284
+#: usr/local/www/load_balancer_pool_edit.php:267
+#: usr/local/www/status_openvpn.php:392
+msgid "NOTE"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3284
+msgid "this option requires checking the \"Enable WPA box\"."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3288
+msgid "802.1X Authentication Server IP Address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3291 usr/local/www/interfaces.php:3312
+msgid ""
+"Enter the IP address of the 802.1X Authentication Server. This is commonly "
+"a Radius server (FreeRadius, Internet Authentication Services, etc.)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3295
+msgid "802.1X Authentication Server Port"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3298 usr/local/www/interfaces.php:3319
+msgid "Leave blank for the default port 1812."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3302
+msgid "802.1X Authentication Server Shared Secret"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3309
+msgid "Secondary 802.1X Authentication Server IP Address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3316
+msgid "Secondary 802.1X Authentication Server Port"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3323
+msgid "Secondary 802.1X Authentication Server Shared Secret"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3330
+msgid "Authentication Roaming Preauth"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3341
+msgid "Private networks"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3349
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved for "
+"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"
+msgstr ""
+
+#: usr/local/www/interfaces.php:3351
+msgid "well as loopback addresses (127/8)."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3351
+msgid ""
+"You should generally leave this option turned on, unless your WAN network "
+"lies in such a private address space, too."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3361
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved "
+"(but not RFC 1918) or not yet assigned by IANA."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3363
+msgid ""
+"Bogons are prefixes that should never appear in the Internet routing table, "
+"and obviously should not appear as the source address in any packets you "
+"receive."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3366
+msgid ""
+"Note: The update frequency can be changed under System->Advanced Firewall/"
+"NAT settings."
+msgstr ""
+
+#: usr/local/www/interfaces.php:3490 usr/local/www/interfaces.php:3499
+msgid "You can manage Gateways"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:44
+msgid "Assign network ports"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:59
+#, php-format
+msgid "VLAN %1$s on %2$s"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:208
+msgid "lan"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:209
+msgid "LAN"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:234
+msgid "Interface has been added."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:274
+#, php-format
+msgid "Port %1$s was assigned to %2$s interfaces:"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:290
+#, php-format
+msgid ""
+"You cannot set port %s to interface %s because this interface is a member of "
+"%s."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:367
+msgid ""
+"The interface is part of a group. Please remove it from the group to continue"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:369
+msgid ""
+"The interface is part of a bridge. Please remove it from the bridge to "
+"continue"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:371
+msgid ""
+"The interface is part of a gre tunnel. Please delete the tunnel to continue"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:373
+msgid ""
+"The interface is part of a gif tunnel. Please delete the tunnel to continue"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:411
+msgid "Interface has been deleted."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:435
+msgid "The system is now rebooting. Please wait."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:437
+msgid "Reboot is needed. Please apply the settings in order to reboot."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:439
+msgid ""
+"Interface mismatch detected. Please resolve the mismatch and click 'Apply "
+"changes'. The firewall will reboot afterwards."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:451
+msgid ""
+"The interface configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:465
+#: usr/local/www/interfaces_bridge.php:100 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_vlan.php:97
+#: usr/local/www/interfaces_wireless.php:92
+msgid "Interface assignments"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:466
+#: usr/local/www/interfaces_bridge.php:101 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_ppps.php:93
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_vlan.php:98
+#: usr/local/www/interfaces_wireless.php:93
+msgid "Interface Groups"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:468
+#: usr/local/www/interfaces_bridge.php:103 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_vlan.php:100
+#: usr/local/www/interfaces_wireless.php:95
+msgid "VLANs"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:469
+#: usr/local/www/interfaces_bridge.php:104 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_ppps.php:96
+#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_vlan.php:101
+#: usr/local/www/interfaces_wireless.php:96
+msgid "QinQs"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:470
+#: usr/local/www/interfaces_bridge.php:105 usr/local/www/interfaces_gif.php:99
+#: usr/local/www/interfaces_gre.php:100 usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_lagg.php:105 usr/local/www/interfaces_ppps.php:97
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_vlan.php:102
+#: usr/local/www/interfaces_wireless.php:97
+msgid "PPPs"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:471
+#: usr/local/www/interfaces_bridge.php:106
+#: usr/local/www/interfaces_gif.php:100 usr/local/www/interfaces_gre.php:82
+#: usr/local/www/interfaces_gre.php:101
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_lagg.php:106 usr/local/www/interfaces_ppps.php:98
+#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_vlan.php:103
+#: usr/local/www/interfaces_wireless.php:98
+msgid "GRE"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:472
+#: usr/local/www/interfaces_bridge.php:107 usr/local/www/interfaces_gif.php:81
+#: usr/local/www/interfaces_gif.php:101
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_lagg.php:107 usr/local/www/interfaces_ppps.php:99
+#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_vlan.php:104
+#: usr/local/www/interfaces_wireless.php:99
+msgid "GIF"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:473
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_gif.php:102 usr/local/www/interfaces_gre.php:103
+#: usr/local/www/interfaces_groups.php:85
+#: usr/local/www/interfaces_lagg.php:108 usr/local/www/interfaces_ppps.php:100
+#: usr/local/www/interfaces_qinq.php:111 usr/local/www/interfaces_vlan.php:105
+#: usr/local/www/interfaces_wireless.php:100
+msgid "Bridges"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:474
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_gif.php:103 usr/local/www/interfaces_gre.php:104
+#: usr/local/www/interfaces_groups.php:86 usr/local/www/interfaces_lagg.php:87
+#: usr/local/www/interfaces_lagg.php:109
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps.php:101 usr/local/www/interfaces_qinq.php:112
+#: usr/local/www/interfaces_vlan.php:106
+#: usr/local/www/interfaces_wireless.php:101
+msgid "LAGG"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:483
+msgid "Network port"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:513
+msgid "delete interface"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:515
+msgid "Do you really want to delete this interface?"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:527
+msgid "Available network ports:"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:543
+msgid "add selected interface"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:556
+msgid ""
+"Interfaces that are configured as members of a lagg(4) interface will not be "
+"shown."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:64 usr/local/www/interfaces_gif.php:64
+#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_lagg.php:70
+#: usr/local/www/interfaces_vlan.php:65
+msgid "Wrong parameters supplied"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:66 usr/local/www/interfaces_gif.php:66
+#: usr/local/www/interfaces_gre.php:67 usr/local/www/interfaces_lagg.php:72
+#: usr/local/www/interfaces_vlan.php:67
+msgid "Wrong index supplied"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:69
+msgid "This bridge cannot be deleted because it is assigned as an interface."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:87
+#: usr/local/www/interfaces_bridge_edit.php:240
+msgid "Bridge"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:119
+#: usr/local/www/interfaces_groups.php:97
+#: usr/local/www/interfaces_lagg.php:119
+#: usr/local/www/load_balancer_pool_edit.php:286
+#: usr/local/www/system_groupmanager.php:375
+msgid "Members"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:146
+msgid "Do you really want to delete this bridge?"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:157
+msgid "Here you can configure bridging of interfaces."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:123
+msgid "Member Interfaces"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:128
+msgid "Maxage needs to be an integer between 6 and 40."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:130
+msgid "Maxaddr needs to be an integer."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:132
+msgid "Timeout needs to be an integer."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:134
+msgid "Forward Delay needs to be an integer between 4 and 30."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:136
+msgid "Hello time for STP needs to be an integer between 1 and 2."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:138
+msgid "Priority for STP needs to be an integer between 0 and 61440."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:140
+msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:143
+msgid "interface priority for STP needs to be an integer between 0 and 240."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:148
+msgid ""
+"interface path cost for STP needs to be an integer between 1 and 200000000."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:153
+msgid "You must select at least 2 member interfaces for a bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:158
+msgid "A member interface passed does not exist in configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:161
+msgid "Bridging a wireless interface is only possible in hostap mode."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:163
+msgid ""
+"Span interface cannot be part of the bridge. Remove the span interface from "
+"bridge members to continue."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:221
+#: usr/local/www/interfaces_gif_edit.php:117
+#: usr/local/www/interfaces_gre_edit.php:111
+#: usr/local/www/interfaces_lagg_edit.php:118
+#: usr/local/www/interfaces_vlan_edit.php:134
+msgid "Error occurred creating interface, please retry."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:270
+msgid "Bridge configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:273
+#: usr/local/www/interfaces_lagg_edit.php:92
+msgid "Member interfaces"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:288
+msgid "Interfaces participating in the bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:304
+msgid "RSTP/STP"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:307
+msgid "Enable spanning tree options for this bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:323
+msgid "Protocol used for spanning tree."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:325
+msgid "STP interfaces"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:339
+msgid ""
+"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has "
+"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to "
+"detect and remove loops in a network topology."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:345
+msgid "Valid time"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:350
+msgid ""
+"Set the time that a Spanning Tree Protocol configuration is valid. The "
+"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 "
+"seconds."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:355
+msgid "Forward time"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:360
+msgid ""
+"Set the time that must pass before an interface begins forwarding packets "
+"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 "
+"seconds and the maximum is 30 seconds."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:364
+msgid "Hello time"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:369
+msgid ""
+"Set the time between broadcasting of Spanning Tree Protocol configuration "
+"messages. The hello time may only be changed when operating in legacy STP "
+"mode. The default is 2 seconds. The minimum is 1 second and the maximum is "
+"2 seconds."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:378
+msgid ""
+"Set the bridge priority for Spanning Tree. The default is 32768. The "
+"minimum is 0 and the maximum is 61440."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:382
+msgid "Hold count"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:387
+msgid ""
+"Set the transmit hold count for Spanning Tree. This is the number of "
+"packets transmitted before being rate limited. The default is 6. The "
+"minimum is 1 and the maximum is 10."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:402
+msgid ""
+"Set the Spanning Tree priority of interface to value. The default is 128. "
+"The minimum is 0 and the maximum is 240. Increments of 16."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:406
+msgid "Path cost"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:416
+msgid ""
+"Set the Spanning Tree path cost of interface to value. The default is "
+"calculated from the link speed. To change a previously selected path cost "
+"back to automatic, set the cost to 0. The minimum is 1 and the maximum is "
+"200000000."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:425
+msgid "Cache size"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:427
+msgid "entries"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:429
+msgid ""
+"Set the size of the bridge address cache to size.\tThe default is .100 "
+"entries."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:435
+msgid "Cache entry expire time"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:439
+msgid ""
+"Set the timeout of address cache entries to this number of seconds. If "
+"seconds is zero, then address cache entries will not be expired. The default "
+"is 240 seconds."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:446
+msgid "Span port"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:460
+msgid ""
+"Add the interface named by interface as a span port on the bridge. Span "
+"ports transmit a copy of every frame received by the bridge. This is most "
+"useful for snooping a bridged network passively on another host connected to "
+"one of the span ports of the bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:469
+msgid "The span interface cannot be part of the bridge member interfaces."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:474
+msgid "Edge ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:488
+msgid ""
+"Set interface as an edge port. An edge port connects directly to end "
+"stations and cannot create bridging loops in the network; this allows it to "
+"transition straight to forwarding."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:494
+msgid "Auto Edge ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:508
+msgid ""
+"Allow interface to automatically detect edge status. This is the default "
+"for all interfaces added to a bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:513
+msgid "This will disable the autoedge status of interfaces."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:517
+msgid "PTP ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:531
+msgid ""
+"Set the interface as a point-to-point link. This is required for straight "
+"transitions to forwarding and should be enabled on a direct link to another "
+"RSTP-capable switch."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:537
+msgid "Auto PTP ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:551
+msgid ""
+"Automatically detect the point-to-point status on interface by checking the "
+"full duplex link status. This is the default for interfaces added to the "
+"bridge."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:557
+msgid ""
+"The interfaces selected here will be removed from default autoedge status."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:561
+msgid "Sticky ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:575
+msgid ""
+"Mark an interface as a \"sticky\" interface. Dynamically learned address "
+"entries are treated as static once entered into the cache. Sticky entries "
+"are never aged out of the cache or replaced, even if the address is seen on "
+"a different interface."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:582
+msgid "Private ports"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:596
+msgid ""
+"Mark an interface as a \"private\" interface. A private interface does not "
+"forward any traffic to any other port that is also a private interface."
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:69
+msgid ""
+"This gif TUNNEL cannot be deleted because it is still being used as an "
+"interface."
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:113 usr/local/www/interfaces_gre.php:114
+msgid "Tunnel to..."
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:129
+msgid "Do you really want to delete this gif tunnel?"
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:140
+msgid "GIF tunnels are configured here."
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:142
+msgid ""
+"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) "
+"Tunnel Broker on a WAN with a dynamic IP, you may want to add a"
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:142
+msgid "HE.net Tunnelbroker type DynDNS Entry"
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:142
+msgid "to keep your tunnel functional when your IP changes."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:78
+msgid ""
+"Parent interface,Local address, Remote tunnel address, Remote tunnel "
+"network, Local tunnel address"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:84
+#: usr/local/www/interfaces_gre_edit.php:83
+msgid "The tunnel local and tunnel remote fields must have valid IP addresses."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:90
+msgid ""
+"The alias IP address family has to match the family of the remote peer "
+"address."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:98
+#, php-format
+msgid "A gif with the network %s is already defined."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:149
+msgid "GIF configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:152
+#: usr/local/www/interfaces_gre_edit.php:77
+#: usr/local/www/interfaces_gre_edit.php:146
+#: usr/local/www/interfaces_lagg_edit.php:152
+#: usr/local/www/interfaces_qinq_edit.php:294
+#: usr/local/www/interfaces_vlan_edit.php:79
+#: usr/local/www/interfaces_vlan_edit.php:167
+#: usr/local/www/interfaces_wireless_edit.php:90
+#: usr/local/www/interfaces_wireless_edit.php:165
+msgid "Parent interface"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:172
+msgid ""
+"The interface here serves as the local address to be used for the gif tunnel."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:175
+msgid "gif remote address"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:179
+msgid "Peer address where encapsulated gif packets will be sent. "
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:182
+msgid "gif tunnel local address"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:186
+msgid "Local gif tunnel endpoint"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:189
+msgid "gif tunnel remote address "
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:203
+msgid ""
+"Remote gif address endpoint. The subnet part is used for determining the "
+"network that is tunnelled."
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:206
+msgid "Route caching "
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid ""
+"Specify if route caching can be enabled. Be careful with these settings on "
+"dynamic networks. "
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:213
+msgid "ECN friendly behavior"
+msgstr ""
+
+#: usr/local/www/interfaces_gif_edit.php:218
+msgid ""
+"Note that the ECN friendly behavior violates RFC2893. This should be used "
+"in mutual agreement with the peer."
+msgstr ""
+
+#: usr/local/www/interfaces_gre.php:70
+msgid ""
+"This GRE tunnel cannot be deleted because it is still being used as an "
+"interface."
+msgstr ""
+
+#: usr/local/www/interfaces_gre.php:130
+msgid "Do you really want to delete this GRE tunnel?"
+msgstr ""
+
+#: usr/local/www/interfaces_gre.php:139
+msgid ""
+"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) "
+"tunnels."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Local address"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Remote tunnel address"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Remote tunnel network"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Local tunnel address"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:91
+#, php-format
+msgid "A GRE tunnel with the network %s is already defined."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:143
+msgid "GRE configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:166
+msgid ""
+"The interface here serves as the local address to be used for the GRE tunnel."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:169
+msgid "Remote tunnel endpoint IP address"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:173
+msgid "Peer address where encapsulated GRE packets will be sent "
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:176
+msgid "Local tunnel IP address "
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:180
+msgid "Local IP address assigned inside this tunnel"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:183
+msgid "Remote tunnel IP address "
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:197
+msgid ""
+"IP address inside this tunnel on the remote end. The subnet part is used for "
+"the determining the network that is tunneled."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:200
+msgid "Mobile encapsulation"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:204
+msgid ""
+"Check this box to use mobile encapsulation (IP protocol 55, RFC 2004). When "
+"unchecked, uses GRE encapsulation (IP protocol 47, RFCs 1701, 1702)."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:207
+msgid "Route search type"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:212
+msgid ""
+"For correct operation, the GRE device needs a route to the destination that "
+"is less specific than the one over the tunnel. (Basically, there needs to "
+"be a route to the decapsulating host that does not run over the tunnel, as "
+"this would be a loop."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:219
+msgid "WCCP version"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:223
+msgid ""
+"Check this box for WCCP encapsulation version 2, or leave unchecked for "
+"version 1."
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:64
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/system_authservers.php:449
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/system_gateways.php:205
+#: usr/local/www/system_groupmanager.php:289
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/system_routes.php:222
+#: usr/local/www/system_usermanager.php:495
+#: usr/local/www/system_usermanager.php:907
+#: usr/local/www/system_usermanager_addprivs.php:158
+#: usr/local/www/system_usermanager_settings.php:115
+msgid "Groups"
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:130
+#: usr/local/www/system_groupmanager.php:552
+msgid "edit group"
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:131
+msgid ""
+"Do you really want to delete this group? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:131
+msgid "delete ifgroupentry"
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:143
+msgid "add a new group"
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:150
+msgid ""
+"Interface Groups allow you to create rules that apply to multiple interfaces "
+"without duplicating the rules. If you remove members from an interface "
+"group, the group rules no longer apply to that interface."
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:75
+msgid "Group name already exists!"
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:78
+msgid "Only letters A-Z are allowed as the group name."
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:250
+msgid "Interface Groups Edit"
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:253
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/system_gateway_groups.php:131
+#: usr/local/www/system_gateway_groups_edit.php:235
+#: usr/local/www/system_gateway_groups_edit.php:238
+#: usr/local/www/system_groupmanager.php:143
+msgid "Group Name"
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:257
+msgid "No numbers or spaces are allowed. Only characters in a-zA-Z"
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:271
+#: usr/local/www/interfaces_qinq_edit.php:353
+msgid "Member (s)"
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:326
+msgid ""
+"Rules for WAN type interfaces in groups do not contain the reply-to "
+"mechanism upon which Multi-WAN typically relies."
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:327
+msgid "More Information"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg.php:75
+msgid "This LAGG interface cannot be deleted because it is still being used."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg.php:146
+msgid ""
+"LAGG allows for link aggregation, bonding and fault tolerance. Only "
+"unassigned interfaces can be added to LAGG."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:92
+msgid "Lagg protocol"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:99
+#: usr/local/www/interfaces_lagg_edit.php:102
+msgid "Interface supplied as member is invalid"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:105
+msgid "Protocol supplied is invalid"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:149
+msgid "LAGG configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:167
+msgid "Choose the members that will be used for the link aggregation"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:170
+msgid "Lag proto"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:185
+msgid "failover"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:186
+msgid ""
+"Sends and receives traffic only through the master port. If the master port "
+"becomes unavailable, the next active port is used. The first interface "
+"added is the master port; any interfaces added after that are used as "
+"failover devices."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid "fec"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid ""
+"Supports Cisco EtherChannel. This is a static setup and does not negotiate "
+"aggregation with the peer or exchange frames to monitor the link."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:195
+msgid "lacp"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:195
+msgid ""
+"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the "
+"Marker Protocol. LACP will negotiate a set of aggregable links with the "
+"peer in to one or more Link Aggregated Groups. Each LAG is composed of "
+"ports of the same speed, set to full-duplex operation. The traffic will be "
+"balanced across the ports in the LAG with the greatest total speed, in most "
+"cases there will only be one LAG which contains all ports. In the event of "
+"changes in physical connectivity, Link Aggregation will quickly converge to "
+"a new configuration."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:206
+msgid "loadbalance"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:206
+msgid ""
+"Balances outgoing traffic across the active ports based on hashed protocol "
+"header information and accepts incoming traffic from any active port. This "
+"is a static setup and does not negotiate aggregation with the peer or "
+"exchange frames to monitor the link. The hash includes the Ethernet source "
+"and destination address, and, if available, the VLAN tag, and the IP source "
+"and destination address"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid "roundrobin"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid ""
+"Distributes outgoing traffic using a round-robin scheduler through all "
+"active ports and accepts incoming traffic from any active port"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:218
+msgid ""
+"This protocol is intended to do nothing: it disables any traffic without "
+"disabling the lagg interface itself"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps.php:63
+msgid ""
+"This point-to-point link cannot be deleted because it is still being used as "
+"an interface."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps.php:79
+msgid "Interfaces: PPPs"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps.php:111
+msgid "Interface(s)/Port(s)"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps.php:134
+msgid "Do you really want to delete this PPP interface?"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Link Interface(s)"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/services_dhcp.php:804 usr/local/www/services_dhcpv6.php:555
+msgid "Subnet"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:218
+msgid "Please choose a Link Type."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:222
+msgid ""
+"Multilink connections (MLPPP) using the PPP link type is not currently "
+"supported. Please select only one Link Interface."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:224
+msgid "The Service name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:226
+msgid "Do not specify both a Service name and a NULL Service name."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:240
+msgid ""
+"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE "
+"Periodic reset fields."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:242
+msgid ""
+"A valid PPPoE reset day of month must be specified (1-31) in the Custom "
+"PPPoE Periodic reset fields. No checks are done on valid # of days per month"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:244
+msgid ""
+"A valid PPPoE reset year must be specified. Don't select a year in the past!"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:249
+#, php-format
+msgid "A valid local IP address must be specified for %s."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:251
+#, php-format
+msgid "A valid gateway IP address OR hostname must be specified for %s."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:253
+#, php-format
+msgid "The bandwidth value for %s must be an integer."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:255
+#, php-format
+msgid "The MTU for %s must be greater than 576 bytes."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:257
+#, php-format
+msgid "The MRU for %s must be greater than 576 bytes."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:393
+#: usr/local/www/system_authservers.php:605
+msgid "Select"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:412
+msgid "PPPs configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:415
+msgid "Link Type"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:430
+msgid "Link interface(s)"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:436
+msgid "Select at least two interfaces for Multilink (MLPPP) connections."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:485
+msgid ""
+"You may enter a description here for your reference. Description will appear "
+"in the \"Interfaces Assign\" select lists."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:539
+msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:553
+msgid "APN number (optional)"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:556
+msgid ""
+"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:560
+msgid "SIM PIN"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:567
+msgid "SIM PIN wait"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:570
+msgid ""
+"Note: Time to wait for SIM to discover network after PIN is sent to SIM "
+"(seconds)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:574
+msgid "Init String"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:577
+msgid ""
+"Note: Enter the modem initialization string here. Do NOT include the \"AT\" "
+"string at the beginning of the command. Many modern USB 3G modems don't need "
+"an initialization string."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:582
+msgid "Connection Timeout"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:585
+msgid ""
+"Note: Enter timeout in seconds for connection to be established (sec.) "
+"Default is 45 sec."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:589
+msgid "Uptime Logging"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:591
+msgid "Enable persistent logging of connection uptime."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:592
+msgid ""
+"This option causes cumulative uptime to be recorded and displayed on the "
+"Status Interfaces page."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:604
+msgid "Configure a NULL Service name"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:605
+msgid ""
+"Hint: this field can usually be left empty. Service name will not be "
+"configured if this field is empty. Check the \"Configure NULL\" box to "
+"configure a blank Service name."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:680
+msgid "IP Address OR Hostname"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:691
+msgid "Dial On Demand"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:693
+msgid "Enable Dial-on-Demand mode"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:694
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode. Do NOT "
+"enable if you want your link to be always up. The interface is configured, "
+"but the actual connection of the link is delayed until qualifying outgoing "
+"traffic is detected."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:699
+msgid "Idle Timeout"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:701
+msgid "(seconds) Default is 0, which disables the timeout feature."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:702
+msgid ""
+"If no incoming or outgoing packets are transmitted for the entered number of "
+"seconds the connection is brought down."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:703
+msgid ""
+"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd "
+"goes back into dial-on-demand mode. Otherwise, the interface is brought down "
+"and all associated routes removed."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:707
+#: usr/local/www/vpn_openvpn_client.php:956
+#: usr/local/www/vpn_openvpn_server.php:1349
+msgid "Compression"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:709
+msgid "Disable vjcomp(compression) (auto-negotiated by default)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:710
+msgid ""
+"This option enables Van Jacobson TCP header compression, which saves several "
+"bytes per TCP data packet. You almost always want this option. This "
+"compression ineffective for TCP connections with enabled modern extensions "
+"like time stamping or SACK, which modify TCP options between sequential "
+"packets."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:716
+msgid "TCPmssFix"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:718
+msgid "Disable tcpmssfix (enabled by default)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:719
+msgid ""
+"This option causes mpd to adjust incoming and outgoing TCP SYN segments so "
+"that the requested maximum segment size is not greater than the amount "
+"allowed by the interface MTU. This is necessary in many setups to avoid "
+"problems caused by routers that drop ICMP Datagram Too Big messages. Without "
+"these messages, the originating machine sends data, it passes the rogue "
+"router then hits a machine that has an MTU that is not big enough for the "
+"data. Because the IP Don't Fragment option is set, this machine sends an "
+"ICMP Datagram Too Big message back to the originator and drops the packet. "
+"The rogue router drops the ICMP message and the originator never gets to "
+"discover that it must reduce the fragment size or drop the IP Don't Fragment "
+"option from its outgoing data."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:727
+msgid "ShortSeq"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:729
+msgid "Disable shortseq (auto-negotiated by default)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:730
+msgid ""
+"This option is only meaningful if multi-link PPP is negotiated. It "
+"proscribes shorter multi-link fragment headers, saving two bytes on every "
+"frame. It is not necessary to disable this for connections that are not "
+"multi-link."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:735
+msgid "ACFComp"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:737
+msgid "Disable acfcomp (compression) (auto-negotiated by default)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:738
+msgid ""
+"Address and control field compression. This option only applies to "
+"asynchronous link types. It saves two bytes per frame."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:742
+msgid "ProtoComp"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:744
+msgid "Disable protocomp (compression) (auto-negotiated by default)."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:745
+msgid ""
+"Protocol field compression. This option saves one byte per frame for most "
+"frames."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:758
+msgid "Link Parameters"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:765
+msgid ""
+"Set ONLY for MLPPP connections and ONLY when links have different bandwidths."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:772
+msgid "MTU will default to 1492."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:776
+msgid "MRU"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:779
+#: usr/local/www/interfaces_ppps_edit.php:786
+msgid "will be auto-negotiated by default."
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:783
+msgid "MRRU"
+msgstr ""
+
+#: usr/local/www/interfaces_ppps_edit.php:786
+msgid "Set ONLY for MLPPP connections."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:67
+msgid ""
+"This QinQ cannot be deleted because it is still being used as an interface."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:69
+msgid "QinQ interface does not exist"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:90
+#: usr/local/www/interfaces_qinq_edit.php:40
+msgid "QinQ"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:122
+#: usr/local/www/interfaces_qinq_edit.php:362
+msgid "Tag"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:123
+msgid "QinQ members"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:147
+msgid "Do you really want to delete this QinQ?"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:158
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do "
+"not explicitly support it, QinQ tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:87
+msgid "First level tag cannot be empty."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:89
+msgid ""
+"You are editing an existing entry and modifying the first level tag is not "
+"allowed."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:91
+msgid ""
+"You are editing an existing entry and modifying the interface is not allowed."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:95
+msgid "QinQ level already exists for this interface, edit it!"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:99
+msgid ""
+"A normal VLAN exists with this tag please remove it to use this tag for QinQ "
+"first level."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:126
+#: usr/local/www/interfaces_qinq_edit.php:136
+msgid "Tags can contain only numbers or a range in format #-#."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:199
+msgid "QinQ VLANs group"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:274
+msgid "members"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:278
+msgid "detail"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:291
+msgid "Interface QinQ Edit"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:311
+msgid "Only QinQ capable interfaces will be shown."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:314
+msgid "First level tag"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:319
+msgid ""
+"This is the first level VLAN tag. On top of this are stacked the member "
+"VLANs defined below."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:324
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/load_balancer_relay_action_edit.php:516
+#: usr/local/www/load_balancer_relay_action_edit.php:536
+#: usr/local/www/load_balancer_relay_protocol.php:135
+msgid "Options"
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:339
+msgid ""
+"Adds interface to QinQ interface groups so you can write filter rules easily."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq_edit.php:356
+msgid ""
+"You can specify ranges in the input below. The format is pretty simple i.e "
+"9-100 or 10.20..."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:70
+msgid ""
+"This VLAN cannot be deleted because it is still being used as an interface."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_vlan_edit.php:152
+msgid "VLAN"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:116
+#: usr/local/www/interfaces_vlan_edit.php:79
+msgid "VLAN tag"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:132
+msgid "Do you really want to delete this VLAN?"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:143
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do "
+"not explicitly support it, VLAN tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:84
+msgid "The VLAN tag must be an integer between 1 and 4094."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:88
+msgid "Interface supplied as parent is invalid"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:93
+msgid ""
+"Interface is assigned and you cannot change the VLAN tag while assigned."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:101
+#, php-format
+msgid "A VLAN with the tag %s is already defined on this interface."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:108
+msgid "A QinQ VLAN exists with this tag please remove it to use this tag with."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:164
+msgid "VLAN configuration"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:183
+msgid "Only VLAN capable interfaces will be shown."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:186
+msgid "VLAN tag "
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:190
+msgid "802.1Q VLAN tag (between 1 and 4094) "
+msgstr ""
+
+#: usr/local/www/interfaces_wireless.php:66
+msgid ""
+"This wireless clone cannot be deleted because it is assigned as an interface."
+msgstr ""
+
+#: usr/local/www/interfaces_wireless.php:128
+msgid "Do you really want to delete this wireless clone?"
+msgstr ""
+
+#: usr/local/www/interfaces_wireless.php:139
+msgid ""
+"Here you can configure clones of wireless interfaces, which can be assigned "
+"as separate independent interfaces. Only available on wireless chipsets that "
+"support this, with limitations on the number that can be created in each "
+"mode."
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:122
+msgid ""
+"This wireless clone cannot be modified because it is still assigned as an "
+"interface."
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:124
+msgid ""
+"Use the configuration page for the assigned interface to change the mode."
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:129
+#, php-format
+msgid ""
+"Error creating interface with mode %1$s. The %2$s interface may not support "
+"creating more clones with the selected mode."
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:134
+#, php-format
+msgid "Created with id %s"
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:137
+msgid "Created without id"
+msgstr ""
+
+#: usr/local/www/interfaces_wireless_edit.php:162
+msgid "Wireless clone configuration"
+msgstr ""
+
+#: usr/local/www/license.php:47
+msgid "License"
+msgstr ""
+
+#: usr/local/www/license.php:49
+msgid "is Copyright"
+msgstr ""
+
+#: usr/local/www/license.php:50 usr/local/www/license.php:54
+msgid "All rights reserved"
+msgstr ""
+
+#: usr/local/www/license.php:52
+msgid "m0n0wall is Copyright "
+msgstr ""
+
+#: usr/local/www/license.php:52
+msgid "2002-2014 by Manuel Kasper"
+msgstr ""
+
+#: usr/local/www/license.php:55
+msgid "Redistribution and use in source and binary forms, with or without"
+msgstr ""
+
+#: usr/local/www/license.php:56
+msgid ""
+"modification, are permitted provided that the following conditions are met"
+msgstr ""
+
+#: usr/local/www/license.php:59
+msgid ""
+"1. Redistributions of source code must retain the above copyright notice,"
+msgstr ""
+
+#: usr/local/www/license.php:61
+msgid "this list of conditions and the following disclaimer"
+msgstr ""
+
+#: usr/local/www/license.php:63
+msgid "2. Redistributions in binary form must reproduce the above copyright"
+msgstr ""
+
+#: usr/local/www/license.php:64
+msgid "notice, this list of conditions and the following disclaimer in the"
+msgstr ""
+
+#: usr/local/www/license.php:66
+msgid "documentation and/or other materials provided with the distribution."
+msgstr ""
+
+#: usr/local/www/license.php:68
+msgid "THIS SOFTWARE IS PROVIDED "
+msgstr ""
+
+#: usr/local/www/license.php:68
+msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,"
+msgstr ""
+
+#: usr/local/www/license.php:70
+msgid ""
+"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY"
+msgstr ""
+
+#: usr/local/www/license.php:71
+msgid ""
+"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE"
+msgstr ""
+
+#: usr/local/www/license.php:73
+msgid ""
+"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"
+msgstr ""
+
+#: usr/local/www/license.php:75
+msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF"
+msgstr ""
+
+#: usr/local/www/license.php:77
+msgid ""
+"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"
+msgstr ""
+
+#: usr/local/www/license.php:79
+msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN"
+msgstr ""
+
+#: usr/local/www/license.php:81
+msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"
+msgstr ""
+
+#: usr/local/www/license.php:82
+msgid ""
+"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE"
+msgstr ""
+
+#: usr/local/www/license.php:84
+msgid "POSSIBILITY OF SUCH DAMAGE"
+msgstr ""
+
+#: usr/local/www/license.php:86
+msgid "is based upon/includes various free software packages, listed below."
+msgstr ""
+
+#: usr/local/www/license.php:88
+#, php-format
+msgid ""
+"The authors of %s would like to thank the authors of these software packages "
+"for their efforts"
+msgstr ""
+
+#: usr/local/www/license.php:91 usr/local/www/license.php:94
+#: usr/local/www/license.php:97 usr/local/www/license.php:101
+#: usr/local/www/license.php:102 usr/local/www/license.php:107
+#: usr/local/www/license.php:111 usr/local/www/license.php:114
+#: usr/local/www/license.php:117 usr/local/www/license.php:120
+#: usr/local/www/license.php:124 usr/local/www/license.php:125
+#: usr/local/www/license.php:127 usr/local/www/license.php:133
+#: usr/local/www/license.php:134 usr/local/www/license.php:141
+msgid "Copyright"
+msgstr ""
+
+#: usr/local/www/license.php:91
+msgid "1992-2014 The FreeBSD Project. All rights reserved"
+msgstr ""
+
+#: usr/local/www/license.php:93
+msgid "This product includes PHP, freely available from"
+msgstr ""
+
+#: usr/local/www/license.php:94
+msgid "1999-2014 The PHP Group. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:96
+msgid "LightTPD"
+msgstr ""
+
+#: usr/local/www/license.php:97
+msgid "2004, Jan Knescke, incremental"
+msgstr ""
+
+#: usr/local/www/license.php:98 usr/local/www/license.php:108
+msgid "All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:100
+msgid "ISC DHCP server "
+msgstr ""
+
+#: usr/local/www/license.php:101
+msgid "2004-2012 Internet Software Consortium, Inc."
+msgstr ""
+
+#: usr/local/www/license.php:102
+msgid "1995-2003 Internet Software Consortium"
+msgstr ""
+
+#: usr/local/www/license.php:104 usr/local/www/services_snmp.php:397
+msgid "PF"
+msgstr ""
+
+#: usr/local/www/license.php:106
+msgid "MPD - Multi-link PPP daemon for FreeBSD"
+msgstr ""
+
+#: usr/local/www/license.php:110
+msgid "Circular log support for FreeBSD syslogd "
+msgstr ""
+
+#: usr/local/www/license.php:113
+msgid "Dnsmasq - a DNS forwarder for NAT firewalls"
+msgstr ""
+
+#: usr/local/www/license.php:116
+msgid "IPsec-Tools"
+msgstr ""
+
+#: usr/local/www/license.php:117
+msgid "1995-2002 WIDE Project. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:119
+msgid "msntp"
+msgstr ""
+
+#: usr/local/www/license.php:120
+msgid ""
+" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights "
+"reserved."
+msgstr ""
+
+#: usr/local/www/license.php:123
+msgid "UCD-SNMP"
+msgstr ""
+
+#: usr/local/www/license.php:124
+msgid "1989, 1991, 1992 by Carnegie Mellon University."
+msgstr ""
+
+#: usr/local/www/license.php:125
+msgid ""
+"1996, 1998-2000 The Regents of the University of California. All rights "
+"reserved"
+msgstr ""
+
+#: usr/local/www/license.php:127
+msgid "2001-2002, Network Associates Technology, Inc. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:129
+msgid "Portions of this code are copyright"
+msgstr ""
+
+#: usr/local/www/license.php:129
+msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:132
+msgid "choparp"
+msgstr ""
+
+#: usr/local/www/license.php:136
+msgid "php-radius"
+msgstr ""
+
+#: usr/local/www/license.php:137
+msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:138
+msgid "This product includes software developed by Edwin Groothuis."
+msgstr ""
+
+#: usr/local/www/license.php:140
+msgid "wol"
+msgstr ""
+
+#: usr/local/www/license.php:144
+msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC "
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:73
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"pool."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:252
+#: usr/local/www/status_gateways.php:76 usr/local/www/status_lb_pool.php:134
+msgid "Monitor"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:101
+#: usr/local/www/load_balancer_relay_protocol.php:113
+#: usr/local/www/load_balancer_setting.php:112
+msgid "The load balancer configuration has been changed"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:108
+#: usr/local/www/load_balancer_pool.php:117
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_virtual_server.php:118
+#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68
+msgid "Pools"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_relay_action.php:126
+#: usr/local/www/load_balancer_relay_protocol.php:122
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server.php:119
+#: usr/local/www/status_lb_pool.php:122 usr/local/www/status_lb_vs.php:69
+msgid "Virtual Servers"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/load_balancer_relay_action.php:124
+#: usr/local/www/load_balancer_relay_protocol.php:120
+#: usr/local/www/load_balancer_setting.php:122
+#: usr/local/www/load_balancer_virtual_server.php:120
+msgid "Monitors"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:69
+msgid "Load Balancer: Monitor:"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:98
+msgid "This monitor name has already been used. Monitor names must be unique."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:101
+#: usr/local/www/load_balancer_pool_edit.php:91
+#: usr/local/www/load_balancer_relay_action_edit.php:131
+#: usr/local/www/load_balancer_relay_protocol_edit.php:92
+msgid "You cannot use spaces in the 'name' field."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:115
+#: usr/local/www/services_dhcp_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:124
+msgid "The hostname can only contain the characters A-Z, 0-9 and '-'."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:121
+msgid "HTTP(s) codes must be from RFC2616."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:125
+msgid "The path to monitor must be set."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:148
+#, php-format
+msgid "modified '%s' monitor:"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+msgid "ICMP"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:270
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+#: usr/local/www/system_advanced_admin.php:344
+msgid "HTTP"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:303
+#: usr/local/www/system_advanced_admin.php:347
+msgid "HTTPS"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:337
+msgid "Send/Expect"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:234
+msgid "Edit Load Balancer - Monitor entry"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:274
+#: usr/local/www/load_balancer_monitor_edit.php:307
+msgid "Path"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:282
+#: usr/local/www/load_balancer_monitor_edit.php:315
+msgid "Hostname for Host: header if needed."
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:286
+#: usr/local/www/load_balancer_monitor_edit.php:319
+msgid "HTTP Code"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:341
+msgid "Send string"
+msgstr ""
+
+#: usr/local/www/load_balancer_monitor_edit.php:347
+msgid "Expect string"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:73
+#: usr/local/www/load_balancer_relay_protocol.php:72
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"virtual server."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_virtual_server.php:136
+#: usr/local/www/status_lb_pool.php:63
+msgid "Pool"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:110
+#: usr/local/www/status_lb_pool.php:114
+#, php-format
+msgid ""
+"The load balancer configuration has been changed%sYou must apply the changes "
+"in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:133
+#: usr/local/www/status_lb_pool.php:133 usr/local/www/status_lb_vs.php:80
+#: usr/local/www/system_authservers.php:451
+#: usr/local/www/system_groupmanager.php:291
+#: usr/local/www/system_groupmanager_addprivs.php:171
+#: usr/local/www/system_usermanager.php:497
+#: usr/local/www/system_usermanager_addprivs.php:160
+#: usr/local/www/system_usermanager_settings.php:117
+msgid "Servers"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:149
+#, php-format
+msgid ""
+"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For "
+"load balancing or failover for multiple WANs, use "
+msgstr ""
+
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/status_gateway_groups.php:49
+#: usr/local/www/status_gateway_groups.php:53
+#: usr/local/www/status_gateway_groups.php:67
+#: usr/local/www/status_gateways.php:65
+#: usr/local/www/system_gateway_groups.php:54
+#: usr/local/www/system_gateway_groups.php:99
+msgid "Gateway Groups"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:70
+msgid "Load Balancer: Pool:"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:81
+msgid "Server List"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:88
+msgid "This pool name has already been used. Pool names must be unique."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:94
+#, php-format
+msgid "The name '%s' is a reserved word and cannot be used."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:97
+#, php-format
+msgid "Sorry, an alias is already named %s."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:100
+msgid "The port must be an integer between 1 and 65535, or a port alias."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:104
+msgid "The retry value must be an integer between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:109
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:112
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:119
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:122
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:131
+msgid "Invalid monitor chosen."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:138
+#, php-format
+msgid " modified '%s' pool:"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:198
+msgid "Add/edit Load Balancer - Pool entry"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:210
+msgid "Load Balance"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:211
+msgid "Manual Failover"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:227
+msgid "This is the port your servers are listening on."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:228
+#: usr/local/www/load_balancer_virtual_server_edit.php:197
+msgid ""
+"You may also specify a port alias listed in Firewall -&gt; Aliases here."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:239
+msgid "Retry"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:242
+msgid ""
+"Optionally specify how many times to retry checking a server before "
+"declaring it down."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:249
+msgid "Add item to pool"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:267
+msgid ""
+"Please add a monitor IP address on the monitors tab if you wish to use this "
+"feature."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:273
+msgid "Server IP Address"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:276
+msgid "Add to pool"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:283
+msgid "Current Pool Members"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:292
+msgid "Pool Disabled"
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:312
+msgid "Enabled (default)"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:75
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"relay protocol."
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+msgid "Relay Action"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:117
+msgid ""
+"The load balancer configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:127
+msgid "Relay Actions"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:128
+msgid "Relay Protocols"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:69
+msgid "Load Balancer: Relay Action:"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:128
+msgid "This action name has already been used. Action names must be unique."
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:138
+#, php-format
+msgid "modified '%s' action:"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+msgid "DNS"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:409
+msgid "Edit Load Balancer - Relay Action entry"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/system_advanced_sysctl.php:183
+#: usr/local/www/system_advanced_sysctl.php:261
+#: usr/local/www/system_certmanager.php:806
+msgid "Value"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:509
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:180
+msgid "Key"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action_edit.php:518
+#: usr/local/www/load_balancer_relay_action_edit.php:538
+msgid "TODO"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:260
+msgid "Relay Protocol"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:68
+msgid "Load Balancer: Relay Protocol:"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:89
+msgid ""
+"This protocol name has already been used. Protocol names must be unique."
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:108
+#, php-format
+msgid "modified '%s' load balancing protocol:"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:110
+msgid "name"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:111
+#: usr/local/www/load_balancer_relay_protocol_edit.php:113
+msgid "type"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:112
+msgid "description"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:114
+msgid "action"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:193
+msgid "Edit Load Balancer - Relay Protocol entry"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:228
+msgid "Add / remove available actions"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:238
+msgid "Available Actions"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:253
+#: usr/local/www/system_crlmanager.php:528
+msgid "Add"
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:260
+msgid "Enabled Actions"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:71
+msgid "Timeout must be a numeric value"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:75
+msgid "Interval must be a numeric value"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:80
+msgid "Prefork must be a numeric value"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:83
+msgid "Prefork value must be between 1 and 32"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:133
+msgid "Relayd global settings"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:136
+msgid "timeout"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:140
+msgid ""
+"Set the global timeout in milliseconds for checks. Leave blank to use the "
+"default value of 1000 ms "
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:144
+msgid "interval"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:148
+msgid ""
+"Set the interval in seconds at which the member of a pool will be checked. "
+"Leave blank to use the default interval of 10 seconds"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:152
+msgid "prefork"
+msgstr ""
+
+#: usr/local/www/load_balancer_setting.php:156
+msgid ""
+"Number of processes used by relayd for dns protocol. Leave blank to use the "
+"default value of 5 processes"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server.php:111
+msgid "The virtual server configuration has been changed"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server.php:137
+#: usr/local/www/load_balancer_virtual_server_edit.php:226
+msgid "Fall Back Pool"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:65
+msgid "Load Balancer: Virtual Server:"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:90
+msgid ""
+"This virtual server name has already been used. Virtual server names must "
+"be unique."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:93
+msgid "You cannot use spaces or slashes in the 'name' field."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:96
+msgid ""
+"The port must be an integer between 1 and 65535, a port alias, or left blank."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:99
+#, php-format
+msgid "%s is not a valid IP address, IPv4 subnet, or alias."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:101
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+msgid "You cannot select a Fall Back Pool when using the DNS relay protocol."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:111
+#, php-format
+msgid "modified '%s' vs:"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:113
+#, php-format
+msgid "created '%s' vs:"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/status_lb_vs.php:57
+msgid "Virtual Server"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:163
+msgid "Edit Load Balancer - Virtual Server entry"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:181
+msgid ""
+"This is normally the WAN IP address that you would like the server to listen "
+"on. All connections to this IP and port will be forwarded to the pool "
+"cluster."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:182
+msgid ""
+"You may also specify a host alias listed in Firewall -&gt; Aliases here."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:195
+msgid ""
+"This is the port that the clients will connect to. All connections to this "
+"port will be forwarded to the pool cluster."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:196
+msgid "If left blank, listening ports from the pool will be used."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:207
+msgid "Virtual Server Pool"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:210
+#: usr/local/www/load_balancer_virtual_server_edit.php:229
+msgid "Please add a pool on the Pools tab to use this feature."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:242
+msgid ""
+"The server pool to which clients will be redirected if *ALL* servers in the "
+"Virtual Server Pool are offline."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:243
+msgid "This option is NOT compatible with the DNS relay protocol."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:279
+#: usr/local/www/status_captiveportal_expire.php:95
+#: usr/local/www/status_captiveportal_test.php:95
+msgid "Submit"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+msgid ""
+"Don't forget to add a firewall rule for the virtual server/pool after you're "
+"finished setting it up."
+msgstr ""
+
+#: usr/local/www/pkg.php:57
+msgid "ERROR: No package defined."
+msgstr ""
+
+#: usr/local/www/pkg.php:188
+msgid "Saving changes..."
+msgstr ""
+
+#: usr/local/www/pkg.php:189
+msgid "Do you really want to save changes?"
+msgstr ""
+
+#: usr/local/www/pkg.php:458
+msgid "Do you really want to delete this item?"
+msgstr ""
+
+#: usr/local/www/pkg_edit.php:74
+msgid "ERROR: No valid package defined."
+msgstr ""
+
+#: usr/local/www/pkg_edit.php:263
+msgid "Package Editor"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:91
+#, php-format
+msgid "Unable to retrieve package info from %s. Cached data will be used."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:94
+#, php-format
+msgid ""
+"Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:138 usr/local/www/pkg_mgr_installed.php:109
+msgid "Available Packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:139 usr/local/www/pkg_mgr_installed.php:113
+#: usr/local/www/pkg_mgr_settings.php:102
+msgid "Installed Packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:184
+msgid "Other Categories"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:196 usr/local/www/pkg_mgr_installed.php:124
+msgid "Category"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:203 usr/local/www/pkg_mgr.php:279
+msgid "There are currently no packages available for installation."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:225 usr/local/www/pkg_mgr_installed.php:190
+msgid "Package info"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:228 usr/local/www/pkg_mgr_installed.php:194
+msgid "No package info, check the forum"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:234
+msgid "Click on package name to access its website."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:245
+msgid "Click "
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:245
+msgid " version to check its change log."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:257
+msgid "platform"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:261 usr/local/www/pkg_mgr_installed.php:211
+msgid "Click package info for more details about "
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:273
+msgid "Install "
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:58
+msgid "Install Package"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:100
+msgid "Available packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:101
+msgid "Installed packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:102
+msgid "Package Installer"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:197
+msgid "Something is wrong on the request."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:201
+msgid "Log was not retrievable."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:206
+msgid "installation completed."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:209
+#, php-format
+msgid "Could not find %s."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:220
+msgid "Creating restore point before package installation."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:225 usr/local/www/pkg_mgr_install.php:226
+msgid "Package deleted."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:236 usr/local/www/pkg_mgr_install.php:237
+msgid "Package reinstallation failed."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:240 usr/local/www/pkg_mgr_install.php:241
+msgid "Package reinstalled."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:263 usr/local/www/pkg_mgr_install.php:264
+msgid "All packages reinstalled."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:269
+msgid "No packages are installed."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:275
+msgid "Installation of"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:275
+msgid "FAILED!"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:276
+msgid "Installation halted."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:283
+msgid "Installation completed."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:283
+msgid "setup instructions"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:285
+msgid ""
+"Installation completed. Please check to make sure that the package is "
+"configured from the respective menu then start the package."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:154
+#: usr/local/www/pkg_mgr_installed.php:156
+#: usr/local/www/pkg_mgr_installed.php:163
+#: usr/local/www/pkg_mgr_installed.php:165
+msgid "Available"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:157
+#: usr/local/www/pkg_mgr_installed.php:166
+#: usr/local/www/pkg_mgr_installed.php:184
+msgid "Installed"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:183
+msgid "Latest"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:183
+msgid "N/A"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:209
+msgid "Click on "
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:220
+msgid "Remove "
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:224
+#: usr/local/www/pkg_mgr_installed.php:227
+msgid "Reinstall "
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:237
+msgid "There are no packages currently installed."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:63
+#: usr/local/www/pkg_mgr_settings.php:103
+msgid "Package Settings"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:101
+#, php-format
+msgid "%s packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:112
+msgid ""
+"This page allows an alternate package repository to be configured, primarily "
+"for temporary use as a testing mechanism."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:113
+msgid ""
+"The contents of unofficial packages servers cannot be verified and may "
+"contain malicious files."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:114
+msgid ""
+"The package server settings should remain at their default values to ensure "
+"that verifiable and trusted packages are recevied."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:116
+msgid ""
+"A warning is printed on the Dashboard and in the package manager when an "
+"unofficial package server is in use."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:121
+#: usr/local/www/pkg_mgr_settings.php:124
+msgid "Package Repository URL"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:126
+msgid "Use a non-official server for packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:128
+#: usr/local/www/system_firmware_settings.php:170
+msgid "Base URL:"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:131
+#, php-format
+msgid "This is where %s will check for packages when the"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:131
+msgid "System: Packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:131
+#: usr/local/www/system_firmware_settings.php:173
+msgid "page is viewed."
+msgstr ""
+
+#: usr/local/www/reboot.php:49
+msgid "Reboot System"
+msgstr ""
+
+#: usr/local/www/reboot.php:57
+msgid "The system is rebooting now. This may take one minute."
+msgstr ""
+
+#: usr/local/www/reboot.php:63
+msgid "Are you sure you want to reboot the system?"
+msgstr ""
+
+#: usr/local/www/restart_httpd.php:43
+msgid "Restarting httpd"
+msgstr ""
+
+#: usr/local/www/restart_httpd.php:51
+msgid "Mounting file systems read/write"
+msgstr ""
+
+#: usr/local/www/restart_httpd.php:54
+msgid "Forcing all PHP file permissions to 0755"
+msgstr ""
+
+#: usr/local/www/restart_httpd.php:57
+msgid "Mounting file systems read only"
+msgstr ""
+
+#: usr/local/www/restart_httpd.php:60
+msgid "Restarting mini_httpd"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:69
+#: usr/local/www/services_captiveportal_filemanager.php:72
+#: usr/local/www/services_captiveportal_hostname.php:67
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+#: usr/local/www/services_captiveportal_ip.php:65
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+#: usr/local/www/services_captiveportal_mac.php:64
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_vouchers.php:58
+msgid "Captive portal"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:88
+#, php-format
+msgid "Captive Portal: zone %s: Restore default portal page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:107
+#, php-format
+msgid "Captive Portal: zone %s: Restore default error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:126
+#, php-format
+msgid "Captive Portal: zone %s: Restore default logout page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_captiveportal_zones_edit.php:60
+#: usr/local/www/services_captiveportal_zones_edit.php:98
+msgid "Zone name"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:219
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is part of a "
+"bridge."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:223
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is used already "
+"on %s instance."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:231
+msgid "Certificate must be specified for HTTPS login."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:234
+msgid "The HTTPS server name must be specified for HTTPS login."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:241
+msgid "The timeout must be at least 1 minute."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:254
+msgid ""
+"Hard timeout must be less or equal Default lease time set on DHCP Server"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:259
+msgid "The idle timeout must be at least 1 minute."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:262
+msgid "The pass-through credit count must be a number or left blank."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:265
+msgid ""
+"The waiting period to restore pass-through credits must be above 0 hours."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:269
+#: usr/local/www/services_captiveportal.php:272
+#: usr/local/www/services_captiveportal.php:275
+#: usr/local/www/services_captiveportal.php:278
+#: usr/local/www/services_captiveportal_ip_edit.php:106
+#, php-format
+msgid "A valid IP address must be specified. [%s]"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:281
+#: usr/local/www/services_captiveportal.php:284
+#: usr/local/www/services_captiveportal.php:287
+#: usr/local/www/services_captiveportal.php:290
+#: usr/local/www/services_captiveportal.php:293
+#, php-format
+msgid "A valid port number must be specified. [%s]"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:296
+msgid ""
+"The maximum number of concurrent connections per client IP address may not "
+"be larger than the global maximum."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:299
+msgid ""
+"The NAS-Identifier must be 3-253 characters long and should only contain "
+"ASCII characters."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:505
+#: usr/local/www/services_captiveportal_filemanager.php:148
+#: usr/local/www/services_captiveportal_hostname.php:113
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_vouchers.php:442
+msgid "Captive portal(s)"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:506
+#: usr/local/www/services_captiveportal_filemanager.php:149
+#: usr/local/www/services_captiveportal_hostname.php:114
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_vouchers.php:443
+msgid "MAC"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_ip.php:108
+#: usr/local/www/services_captiveportal_mac.php:158
+#: usr/local/www/services_captiveportal_vouchers.php:444
+msgid "Allowed IP addresses"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:508
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_hostname.php:116
+#: usr/local/www/services_captiveportal_ip.php:109
+#: usr/local/www/services_captiveportal_mac.php:159
+#: usr/local/www/services_captiveportal_vouchers.php:445
+msgid "Allowed Hostnames"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:509
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_hostname.php:117
+#: usr/local/www/services_captiveportal_ip.php:110
+#: usr/local/www/services_captiveportal_mac.php:160
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers.php:446
+#: usr/local/www/status_captiveportal_vouchers.php:58
+msgid "Vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal_filemanager.php:153
+#: usr/local/www/services_captiveportal_hostname.php:118
+#: usr/local/www/services_captiveportal_ip.php:111
+#: usr/local/www/services_captiveportal_mac.php:161
+#: usr/local/www/services_captiveportal_vouchers.php:447
+msgid "File Manager"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:520
+msgid "Enable captive portal"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:535
+msgid "Select the interface(s) to enable for captive portal."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:538
+msgid "Maximum concurrent connections"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:542
+msgid "per client IP address (0 = no limit)"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:545
+msgid ""
+"This setting limits the number of concurrent connections to the captive "
+"portal HTTP(S) server. This does not set how many users can be logged in to "
+"the captive portal, but rather how many users can load the portal page or "
+"authenticate at the same time! Possible setting allowed is: minimum 4 "
+"connections per client IP address, with a total maximum of 100 connections."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:560
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/system_advanced_misc.php:623
+msgid "minutes"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:554
+msgid ""
+"Clients will be disconnected after this amount of inactivity. They may log "
+"in again immediately, though. Leave this field blank for no idle timeout."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:557
+msgid "Hard timeout"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:561
+msgid ""
+"Clients will be disconnected after this amount of time, regardless of "
+"activity. They may log in again immediately, though. Leave this field blank "
+"for no hard timeout (not recommended unless an idle timeout is set)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:564
+msgid "Pass-through credits allowed per MAC address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:567
+msgid "per client MAC address (0 or blank = none)"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:568
+msgid ""
+"This setting allows passing through the captive portal without "
+"authentication a limited number of times per MAC address. Once used up, the "
+"client can only log in with valid credentials until the waiting period "
+"specified below has expired. Recommended to set a hard timeout and/or idle "
+"timeout when using this for it to be effective."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:571
+msgid "Waiting period to restore pass-through credits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:574
+msgid "hours"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:575
+msgid ""
+"Clients will have their available pass-through credits restored to the "
+"original count after this amount of time since using the first one. This "
+"must be above 0 hours if pass-through credits are enabled."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:578
+msgid "Reset waiting period on attempted access"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:581
+msgid "Enable waiting period reset on attempted access"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:582
+msgid ""
+"If enabled, the waiting period is reset to the original duration if access "
+"is attempted when all pass-through credits have already been exhausted."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:585
+msgid "Logout popup window"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:588
+msgid "Enable logout popup window"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:589
+msgid ""
+"If enabled, a popup window will appear when clients are allowed through the "
+"captive portal. This allows clients to explicitly disconnect themselves "
+"before the idle or hard timeout occurs."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:592
+msgid "Pre-authentication redirect URL"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:595
+#, php-format
+msgid ""
+"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using "
+"your custom captive portal index.php page or error pages."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:599
+msgid "After authentication Redirection URL"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:603
+msgid ""
+"If you provide a URL here, clients will be redirected to that URL instead of "
+"the one they initially tried to access after they've authenticated."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:607
+msgid "Blocked MAC address redirect URL"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:610
+#, php-format
+msgid ""
+"If you provide a URL here, MAC addresses set to be blocked will be redirect "
+"to that URL when attempt to access anything."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:614
+msgid "Concurrent user logins"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:617
+msgid "Disable concurrent logins"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:618
+msgid ""
+"If this option is set, only the most recent login per username will be "
+"active. Subsequent logins will cause machines previously logged in with the "
+"same username to be disconnected."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:621
+msgid "MAC filtering"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:624
+msgid "Disable MAC filtering"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:625
+msgid ""
+"If this option is set, no attempts will be made to ensure that the MAC "
+"address of clients stays the same while they're logged in.This is required "
+"when the MAC address of the client cannot be determined (usually because "
+"there are routers between"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:626
+msgid "and the clients)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:627
+msgid "If this is enabled, RADIUS MAC authentication cannot be used."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:630
+msgid "Pass-through MAC Auto Entry"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:633
+msgid "Enable Pass-through MAC automatic additions"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:634
+msgid ""
+"If this option is set, a MAC passthrough entry is automatically added after "
+"the user has successfully authenticated. Users of that MAC address will "
+"never have to authenticate again."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid ""
+"To remove the passthrough MAC entry you either have to log in and remove it "
+"manually from the"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid "MAC tab"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid "or send a POST from another system to remove it."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:636
+msgid ""
+"If this is enabled, RADIUS MAC authentication cannot be used. Also, the "
+"logout window will not be shown."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:639
+msgid "Enable Pass-through MAC automatic addition with username"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:640
+msgid ""
+"If this option is set, with the automatically MAC passthrough entry created "
+"the username, used during authentication, will be saved."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:645
+msgid "Per-user bandwidth restriction"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:648
+msgid "Enable per-user bandwidth restriction"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:651
+msgid "Default download"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:655
+msgid "Default upload"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:659
+msgid ""
+"If this option is set, the captive portal will restrict each user who logs "
+"in to the specified default bandwidth. RADIUS can override the default "
+"settings. Leave empty or set to 0 for no limit."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:667
+msgid "No Authentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:671
+msgid "Local"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:680
+msgid "Allow only users/groups with 'Captive portal login' privilege set"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:683
+msgid "RADIUS Authentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:689
+msgid "RADIUS Protocol"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:694 usr/local/www/vpn_l2tp.php:392
+msgid "PAP"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:698
+msgid "CHAP_MD5"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:702
+msgid "MSCHAPv1"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:706
+msgid "MSCHAPv2"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:723
+#: usr/local/www/services_captiveportal.php:766
+msgid "Primary RADIUS server"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:728
+msgid ""
+"Enter the IP address of the RADIUS server which users of the captive portal "
+"have to authenticate against."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:733
+msgid "Leave this field blank to use the default port (1812)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:756
+#: usr/local/www/services_captiveportal.php:778
+#: usr/local/www/services_captiveportal.php:797
+msgid "Shared secret"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:738
+msgid ""
+"Leave this field blank to not use a RADIUS shared secret (not recommended)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:744
+#: usr/local/www/services_captiveportal.php:785 usr/local/www/vpn_pptp.php:450
+msgid "Secondary RADIUS server"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:749
+msgid ""
+"If you have a second RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:771
+msgid ""
+"If you have a third RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:790
+msgid ""
+"If you have a fourth RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:804
+msgid "Accounting"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:809
+msgid "send RADIUS accounting packets"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:810
+msgid ""
+"If this is enabled, RADIUS accounting packets will be sent to the primary "
+"RADIUS server."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:813
+msgid "Accounting port"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:815
+msgid "Leave blank to use the default port (1813)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:821
+msgid "Accounting updates"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:823
+msgid "no accounting updates"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:824
+msgid "stop/start accounting"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:825
+msgid "interim update"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:832
+msgid "RADIUS options"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:835
+msgid "Reauthentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:837
+msgid "Reauthenticate connected users every minute"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:838
+msgid ""
+"If reauthentication is enabled, Access-Requests will be sent to the RADIUS "
+"server for each user that is logged in every minute. If an Access-Reject is "
+"received for a user, that user is disconnected from the captive portal "
+"immediately."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:842
+msgid "RADIUS MAC authentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:844
+msgid "Enable RADIUS MAC authentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:845
+msgid ""
+"If this option is enabled, the captive portal will try to authenticate users "
+"by sending their MAC address as the username and the password entered below "
+"to the RADIUS server."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:849
+msgid "MAC authentication secret"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:853
+msgid "RADIUS NAS IP attribute"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:883
+msgid "Choose the IP to use for calling station attribute."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:888
+msgid "Session-Timeout"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:889
+msgid "Use RADIUS Session-Timeout attributes"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:890
+msgid ""
+"When this is enabled, clients will be disconnected after the amount of time "
+"retrieved from the RADIUS Session-Timeout attribute."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:906
+#, php-format
+msgid ""
+"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-"
+"Station-Id will be set to the client's IP address and the Called-Station-Id "
+"to the client's MAC address. Default behavior is Calling-Station-Id = "
+"client's MAC address and Called-Station-Id = %s's WAN IP address."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:912
+msgid "Accounting Style"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:913
+msgid "Invert Acct-Input-Octets and Acct-Output-Octets"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:914
+msgid ""
+"When this is enabled, data counts for RADIUS accounting packets will be "
+"taken from the client perspective, not the NAS. Acct-Input-Octets will "
+"represent download, and Acct-Output-Octets will represent upload."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:918
+msgid "NAS Identifier"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:920
+msgid "Specify a NAS identifier to override the default value"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:923
+msgid "MAC address format"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:938
+msgid ""
+"This option changes the MAC address format used in the whole RADIUS system. "
+"Change this if you also"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:939
+msgid "need to change the username format for RADIUS MAC authentication."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:940
+msgid "default:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:941
+msgid "singledash:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:942
+msgid "ietf:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:943
+msgid "cisco:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:944
+msgid "unformatted:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:951
+msgid "HTTPS login"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:954
+msgid "Enable HTTPS login"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:955
+msgid ""
+"If enabled, the username and password will be transmitted over an HTTPS "
+"connection to protect against eavesdroppers. A server name and certificate "
+"must also be specified below."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:958
+msgid "HTTPS server name"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:961
+#, php-format
+msgid ""
+"This name will be used in the form action for the HTTPS POST and should "
+"match the Common Name (CN) in your certificate (otherwise, the client "
+"browser will most likely display a security warning). Make sure captive "
+"portal clients can resolve this name in DNS and verify on the client that "
+"the IP resolves to the correct interface IP on %s."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:964
+#: usr/local/www/system_advanced_admin.php:357
+msgid "SSL Certificate"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:978
+msgid "No Certificates defined."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:983
+#: usr/local/www/services_captiveportal.php:986
+msgid "Disable HTTPS forwards"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:987
+msgid ""
+"If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites "
+"will not be forwarded to the captive portal. This prevents certificate "
+"errors from being presented to the user even if HTTPS logins are enabled. "
+"Users must attempt a connecton to an HTTP (Port 80) site to get forwarded to "
+"the captive portal. If HTTPS logins are enabled, the user will be redirected "
+"to the HTTPS login page."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:990
+msgid "Portal page contents"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1005
+#: usr/local/www/services_captiveportal.php:1045
+#: usr/local/www/services_captiveportal.php:1065
+msgid "View current page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1007
+#: usr/local/www/services_captiveportal.php:1047
+#: usr/local/www/services_captiveportal.php:1067
+msgid "Download current page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1010
+msgid "Restore default portal page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1017
+#, php-format
+msgid ""
+"Upload an HTML/PHP file for the portal page here (leave blank to keep the "
+"current one). Make sure to include a form (POST to %1$s) with a submit "
+"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and "
+"%6$s and/or %7$s input fields if authentication is enabled, otherwise it "
+"will always fail."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1028
+msgid "Example code for the form:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1040
+msgid "error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1041
+#: usr/local/www/services_captiveportal.php:1061
+msgid "contents"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1050
+msgid "Restore default error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1055
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed when an "
+"authentication error occurs. You may include"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1056
+msgid ""
+"which will be replaced by the error or reply messages from the RADIUS "
+"server, if any."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1070
+msgid "Restore default logout page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1075
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed on "
+"authentication success when the logout popup is enabled."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1088
+msgid ""
+"Changing any settings on this page will disconnect all clients! Don't forget "
+"to enable the DHCP server on your captive portal interface! Make sure that "
+"the default/maximum DHCP lease time is higher than the timeout entered on "
+"this page. Also, the DNS Forwarder or Resolver needs to be enabled for DNS lookups by "
+"unauthenticated clients to work."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:99
+#, php-format
+msgid "A file with the name '%s' already exists."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:106
+msgid "The total size of all files uploaded may not exceed "
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:166
+#: usr/local/www/services_captiveportal_filemanager.php:205
+msgid "add file"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:177
+msgid "Do you really want to delete this file?"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:177
+msgid "delete file"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:184
+msgid "TOTAL"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:195
+msgid "cancel"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:215
+msgid ""
+"Any files that you upload here with the filename prefix of captiveportal- "
+"will be made available in the root directory of the captive portal HTTP(S) "
+"server. You may reference them directly from your portal page HTML code "
+"using relative paths. Example: you've uploaded an image with the name "
+"'captiveportal-test.jpg' using the file manager. Then you can include it in "
+"your portal page like this:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:222
+msgid ""
+"In addition, you can also upload .php files for execution. You can pass the "
+"filename to your custom page from the initial page by using text similar to:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:225
+msgid "Acceptable usage policy"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_filemanager.php:227
+#, php-format
+msgid "The total size limit for all files is %s."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:115
+msgid "Allowed IP Addresses"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:132
+#: usr/local/www/services_captiveportal_hostname.php:168
+#: usr/local/www/services_captiveportal_ip.php:125
+#: usr/local/www/services_captiveportal_ip.php:165
+msgid "add address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:158
+#: usr/local/www/services_captiveportal_ip.php:155
+msgid "edit address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:159
+#: usr/local/www/services_captiveportal_ip.php:156
+msgid "Do you really want to delete this address?"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:159
+#: usr/local/www/services_captiveportal_ip.php:156
+msgid "delete address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:177
+msgid ""
+"Adding allowed Hostnames will allow a DNS hostname access to/from access "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example. By specifying <em>from</em> addresses, it "
+"may be used to always allow pass-through access from a client behind the "
+"captive portal."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "All connections"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "the Hostname are allowed"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "from"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+msgid "Edit allowed Hostname"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:102
+msgid "Allowed Hostname"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:107
+#, php-format
+msgid "A valid Hostname must be specified. [%s]"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_ip_edit.php:112
+#: usr/local/www/services_captiveportal_mac_edit.php:122
+msgid "Upload speed needs to be an integer"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:112
+#: usr/local/www/services_captiveportal_ip_edit.php:115
+#: usr/local/www/services_captiveportal_mac_edit.php:124
+msgid "Download speed needs to be an integer"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:119
+#: usr/local/www/services_captiveportal_ip_edit.php:122
+msgid "already allowed"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+#: usr/local/www/system_gateways_edit.php:771
+#: usr/local/www/system_gateways_edit.php:783
+msgid "From"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+#: usr/local/www/system_gateways_edit.php:774
+#: usr/local/www/system_gateways_edit.php:786
+msgid "To"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+msgid "Use"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+msgid ""
+"to always allow an Hostname through the captive portal (without "
+"authentication)"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+msgid ""
+"to allow access from all clients (even non-authenticated ones) behind the "
+"portal to this Hostname"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:192
+#: usr/local/www/services_captiveportal_ip_edit.php:210
+#: usr/local/www/services_captiveportal_mac_edit.php:226
+msgid "Bandwidth up"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:195
+msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:198
+#: usr/local/www/services_captiveportal_ip_edit.php:217
+#: usr/local/www/services_captiveportal_mac_edit.php:234
+msgid "Bandwidth down"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:201
+msgid "Enter a download limit to be enforced on this Hostname in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip.php:174
+msgid ""
+"Adding allowed IP addresses will allow IP access to/from these addresses "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+msgid "Edit allowed IP address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:101
+msgid "Allowed IP address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:101
+#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcpv6.php:561
+msgid "Subnet mask"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:109
+msgid "A valid subnet mask must be specified"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:187
+msgid "Edit allowed ip rule"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:199
+msgid "IP address and subnet mask. Use /32 for a single IP"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:213
+msgid "Enter a upload limit to be enforced on this IP address in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:220
+msgid "Enter a download limit to be enforced on this IP address in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:82
+msgid "No entry exists yet!"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:86
+msgid "Please set the zone on which the operation should be allowed"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:98
+msgid "No entry exists for this username:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:117
+msgid "The entry was sucessfully deleted"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:119
+msgid "No entry exists for this mac address:"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:150
+msgid ""
+"The captive portal MAC address configuration has been changed.<br />You must "
+"apply the changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:191
+msgid "edit host"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:194
+#: usr/local/www/services_dnsmasq.php:398
+#: usr/local/www/services_unbound.php:466
+msgid "Do you really want to delete this host?"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:195
+msgid "delete host"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:208
+msgid "add host"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:216
+msgid ""
+"Adding MAC addresses as 'pass' MACs allows them access through the captive "
+"portal automatically without being taken to the portal page."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_mac_edit.php:183
+msgid "Edit MAC address rules"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:113
+#, php-format
+msgid ""
+"The MAC address %s belongs to a local interface, you cannot use it here."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:118
+msgid "A valid MAC address must be specified"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:131
+#: usr/local/www/services_captiveportal_zones_edit.php:70
+msgid "already exists"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:201
+msgid "Choose what to do with packets coming from this MAC address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:213
+#: usr/local/www/services_dhcp_edit.php:382
+msgid "Copy my MAC address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:215
+msgid "MAC address (6 hex octets separated by colons)"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:230
+msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:238
+msgid "Enter a download limit to be enforced on this MAC address in Kbit/s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:67
+msgid ""
+"You will need to recreate any existing Voucher Rolls due to the public and "
+"private key changes. Click cancel if you do not wish to recreate the "
+"vouchers."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:133
+msgid "Voucher invalid"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:135
+msgid "Voucher expired"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:158
+msgid "Cannot write private key file"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:178
+msgid "Need private RSA key to print vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "charset"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "rollbits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "ticketbits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "checksumbits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "publickey"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "magic"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+#: usr/local/www/services_captiveportal_vouchers.php:603
+msgid "Synchronize Voucher Database IP"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync port"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync password"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync username"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:225
+msgid "Need at least 2 characters to create vouchers."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:227
+msgid "Double quotes aren't allowed."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:229
+msgid "aren't allowed."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:231
+msgid "# of Bits to store Roll Id needs to be between 1..31."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:233
+msgid "# of Bits to store Ticket Id needs to be between 1..16."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:235
+msgid "# of Bits to store checksum needs to be between 1..31."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:237
+msgid "This doesn't look like an RSA Public key."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:239
+msgid "This doesn't look like an RSA Private key."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:241
+msgid "You cannot sync the voucher database to this host (itself)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+msgid "Enable Vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:464
+#: usr/local/www/status_captiveportal.php:117
+#: usr/local/www/status_captiveportal_expire.php:74
+#: usr/local/www/status_captiveportal_test.php:74
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:79
+#: usr/local/www/status_captiveportal_vouchers.php:112
+msgid "Voucher Rolls"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:473
+#: usr/local/www/services_captiveportal_vouchers_edit.php:174
+#: usr/local/www/status_captiveportal_vouchers.php:124
+msgid "Roll"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:474
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+msgid "Minutes/Ticket"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:475
+msgid "of Tickets"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:476
+#: usr/local/www/services_captiveportal_vouchers_edit.php:198
+#: usr/local/www/status_captiveportal_voucher_rolls.php:93
+msgid "Comment"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:496
+msgid "edit voucher"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:497
+msgid ""
+"Do you really want to delete this voucher? This makes all vouchers from this "
+"roll invalid"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:497
+msgid "delete vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:498
+msgid "generate vouchers for this roll to CSV file"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:508
+msgid "add voucher"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:513
+msgid ""
+"Create, generate and activate Rolls with Vouchers that allow access through "
+"the captive portal for the configured time. Once a voucher is activated, its "
+"clock is started and runs uninterrupted until it expires. During that time, "
+"the voucher can be re-used from the same or a different computer. If the "
+"voucher is used again from another computer, the previous session is stopped."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:519
+msgid ""
+"Enable Voucher support first using the checkbox above and hit Save at the "
+"bottom."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:525
+msgid "Voucher public key"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+msgid ""
+"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is "
+"used to decrypt vouchers."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid "Generate"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid "new key"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:533
+msgid "Voucher private key"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid ""
+"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is "
+"only used to generate encrypted vouchers and doesn't need to be available if "
+"the vouchers have been generated offline."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:540
+msgid "Character set"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:544
+msgid ""
+"Tickets are generated with the specified character set. It should contain "
+"printable characters (numbers, lower case and upper case letters) that are "
+"hard to confuse with others. Avoid e.g. 0/O and l/1."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:548
+msgid "of Roll Bits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:552
+msgid ""
+"Reserves a range in each voucher to store the Roll # it belongs to. Allowed "
+"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the "
+"RSA key size."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:556
+msgid "of Ticket Bits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:560
+msgid ""
+"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed "
+"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A "
+"bit array, stored in RAM and in the config, is used to mark if a voucher has "
+"been used. A bit array for 65535 vouchers requires 8 KB of storage."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:564
+msgid "of Checksum Bits"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:568
+msgid ""
+"Reserves a range in each voucher to store a simple checksum over Roll # and "
+"Ticket#. Allowed range is 0..31."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:572
+msgid "Magic Number"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:576
+msgid ""
+"Magic number stored in every voucher. Verified during voucher check. Size "
+"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits "
+"are used, no magic number will be used and checked."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:580
+msgid "Invalid Voucher Message"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:583
+msgid ""
+"Error message displayed for invalid vouchers on captive portal error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:587
+msgid "Expired Voucher Message"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:590
+msgid ""
+"Error message displayed for expired vouchers on captive portal error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:600
+msgid "Voucher database synchronization"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:606
+msgid ""
+"IP address of master nodes webConfigurator to synchronize voucher database "
+"and used vouchers from."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:607
+msgid "NOTE: this should be setup on the slave nodes and not the primary node!"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:611
+msgid "Voucher sync port"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:614
+msgid ""
+"This is the port of the master voucher nodes webConfigurator. Example: 443"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:618
+msgid "Voucher sync username"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:621
+msgid "This is the username of the master voucher nodes webConfigurator."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:625
+msgid "Voucher sync password"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:628
+msgid "This is the password of the master voucher nodes webConfigurator."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:643
+msgid ""
+"Changing any Voucher parameter (apart from managing the list of Rolls) on "
+"this page will render existing vouchers useless if they were generated with "
+"different settings."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:645
+msgid ""
+"Specifying the Voucher Database Synchronization options will not record any "
+"other value from the other options. They will be retrieved/synced from the "
+"master."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+msgid "Edit Voucher Rolls"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_dhcp.php:1156 usr/local/www/services_dhcpv6.php:789
+msgid "Number"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:101
+#, php-format
+msgid "Roll number %s already exists."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:107
+#, php-format
+msgid "Roll number must be numeric and less than %s"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:110
+#, php-format
+msgid "A roll has at least one voucher and less than %s."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:113
+msgid "Each voucher must be good for at least 1 minute."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:134
+#, php-format
+msgid "All %1$s vouchers from Roll %2$s marked unused"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:178
+msgid "Enter the Roll"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:178
+msgid "found on top of the generated/printed vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:182
+msgid "Minutes per Ticket"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:186
+msgid ""
+"Defines the time in minutes that a user is allowed access. The clock starts "
+"ticking the first time a voucher is used for authentication"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:194
+msgid "Enter the number of vouchers"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:194
+msgid ""
+"found on top of the generated/printed vouchers. WARNING: Changing this "
+"number for an existing Roll will mark all vouchers as unused again"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:202
+msgid "Can be used to further identify this roll. Ignored by the system"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:64
+msgid "Zones"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:75
+msgid "The CaptivePortal entry list has been changed"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:80
+#: usr/local/www/services_rfc2136_edit.php:174
+msgid "Zone"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:82
+#: usr/local/www/vpn_pppoe.php:106
+msgid "Number of users"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:88
+#: usr/local/www/services_captiveportal_zones.php:129
+msgid "add a new captiveportal instance"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:116
+msgid "edit captiveportal instance"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones.php:117
+msgid "delete captiveportal instance"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+msgid "Edit Zones"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones_edit.php:65
+msgid "The zone name can only contain letters, digits, and underscores (_)."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones_edit.php:95
+msgid "Edit Captive Portal Zones"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones_edit.php:102
+msgid "Zone name. Can only contain letters, digits, and underscores (_)."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:249 usr/local/www/services_dhcpv6.php:170
+msgid "Range begin"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:249 usr/local/www/services_dhcpv6.php:170
+msgid "Range end"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcp.php:256
+#: usr/local/www/services_dhcpv6.php:175 usr/local/www/services_dhcpv6.php:179
+#: usr/local/www/services_dhcpv6.php:181
+msgid "A valid range must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:258
+#: usr/local/www/services_dhcp_edit.php:225
+msgid "A valid IP address must be specified for the gateway."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:260
+#: usr/local/www/services_dhcp_edit.php:227
+msgid ""
+"A valid IP address must be specified for the primary/secondary WINS servers."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:265
+#: usr/local/www/services_dhcp_edit.php:233
+#, php-format
+msgid ""
+"The gateway address %s does not lie within the chosen interface's subnet."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:268
+#: usr/local/www/services_dhcp_edit.php:236
+msgid "A valid IP address must be specified for each of the DNS servers."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:271
+#: usr/local/www/services_dhcp_edit.php:239
+#: usr/local/www/services_dhcpv6.php:188
+msgid "The default lease time must be at least 60 seconds."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:288
+#, php-format
+msgid ""
+"The Captive Portal zone '%s' has Hard Timeout parameter set to a value "
+"bigger than Default lease time (%s)."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:293
+#: usr/local/www/services_dhcp_edit.php:241
+#: usr/local/www/services_dhcpv6.php:190
+msgid ""
+"The maximum lease time must be at least 60 seconds and higher than the "
+"default lease time."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:295
+#: usr/local/www/services_dhcp_edit.php:243
+#: usr/local/www/services_dhcpv6.php:192
+msgid "A valid domain name must be specified for the dynamic DNS registration."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp_edit.php:245
+msgid ""
+"A valid primary domain name server IP address must be specified for the "
+"dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:300
+#: usr/local/www/services_dhcp_edit.php:248
+#: usr/local/www/services_dhcpv6.php:197
+msgid "You must specify both a valid domain key and key name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:305
+#: usr/local/www/services_dhcp_edit.php:253
+#: usr/local/www/services_dhcpv6.php:202
+#: usr/local/www/services_router_advertisements.php:155
+msgid "A valid domain search list must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:313
+msgid ""
+"If you specify a mac allow list, it must contain only valid partial MAC "
+"addresses."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:315
+msgid ""
+"If you specify a mac deny list, it must contain only valid partial MAC "
+"addresses."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:318
+#: usr/local/www/services_dhcp_edit.php:260
+msgid ""
+"A valid IP address must be specified for the primary/secondary NTP servers."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:320 usr/local/www/services_dhcpv6.php:211
+msgid "A valid domain name must be specified for the DNS domain."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:322
+#: usr/local/www/services_dhcp_edit.php:262
+msgid "A valid IP address or hostname must be specified for the TFTP server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:324
+#: usr/local/www/services_dhcp_edit.php:264
+msgid "A valid IP address must be specified for the network boot server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:327
+msgid "You cannot use the network address in the starting subnet range."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:329
+msgid "You cannot use the broadcast address in the ending subnet range."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:336
+#, php-format
+msgid "The subnet range cannot overlap with virtual IP address %s."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:351
+msgid "Text type cannot include quotation marks."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:353
+msgid ""
+"String type must be enclosed in quotes like \"this\" or must be a series of "
+"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:"
+"cd:ef"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:355
+msgid "Boolean type must be true, false, on, or off."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:357
+msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:359
+msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:361
+msgid ""
+"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:363
+msgid "Signed 8-bit integer type must be a number in the range -128 to 127."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:365
+msgid ""
+"Signed 16-bit integer type must be a number in the range -32768 to 32767."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:367
+msgid ""
+"Signed 32-bit integer type must be a number in the range -2147483648 to "
+"2147483647."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:369
+msgid "IP address or host type must be an IP address or host name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:380 usr/local/www/services_dhcpv6.php:239
+msgid "The specified range lies outside of the current subnet."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:384 usr/local/www/services_dhcpv6.php:244
+msgid "The range is invalid (first element higher than second element)."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:391
+msgid ""
+"The specified range must not be within the DHCP range for this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:400
+msgid ""
+"The specified range must not be within the range configured on a DHCP pool "
+"for this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:407 usr/local/www/services_dhcpv6.php:248
+#, php-format
+msgid ""
+"You must disable the DHCP relay on the %s interface before enabling the DHCP "
+"server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:417 usr/local/www/services_dhcpv6.php:263
+#, php-format
+msgid "The DHCP range cannot overlap any static DHCP mappings."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:597
+msgid "DHCP server"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:611
+msgid "Text"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:611
+msgid "String"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:611
+msgid "Boolean"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 8-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 16-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 32-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 8-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 16-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 32-bit integer"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:613
+msgid "IP address or host"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:730 usr/local/www/services_dhcpv6.php:474
+msgid ""
+"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while "
+"the DHCP Relay is enabled on any interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:482
+msgid "The static mapping configuration has been changed"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:760
+msgid ""
+"The DHCP Server can only be enabled on interfaces configured with a static "
+"IPv4 address. This system has none."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:779
+#, php-format
+msgid "Enable DHCP server on %s interface"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:785
+msgid ""
+"Editing Pool-Specific Options. To return to the Interface, click its tab "
+"above."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:792
+msgid "Deny unknown clients"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:793
+msgid ""
+"If this is checked, only the clients defined below will get DHCP leases from "
+"this server. "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:797
+msgid "Pool Description"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:816 usr/local/www/services_dhcpv6.php:567
+msgid "Available range"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:844 usr/local/www/services_dhcpv6.php:586
+#: usr/local/www/vpn_l2tp.php:346
+msgid "Subnet Mask"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcpv6.php:603
+msgid "Range"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:869
+msgid "Additional Pools"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:871
+msgid ""
+"If you need additional pools of addresses inside of this subnet outside the "
+"above Range, they may be specified here."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:874
+msgid "Pool Start"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:875
+msgid "Pool End"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:903
+msgid "Do you really want to delete this pool?"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:927
+#: usr/local/www/services_dhcp_edit.php:438
+msgid "WINS servers"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:934
+#: usr/local/www/services_dhcp_edit.php:445
+#: usr/local/www/services_dhcpv6.php:628
+#: usr/local/www/services_router_advertisements.php:377
+#: usr/local/www/system.php:334 usr/local/www/vpn_pppoe_edit.php:463
+msgid "DNS servers"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:940
+#: usr/local/www/services_dhcp_edit.php:451
+#: usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_router_advertisements.php:383
+msgid ""
+"NOTE: leave blank to use the system default DNS servers - this interface's "
+"IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the "
+"General page."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:947
+msgid ""
+"The default is to use the IP on this interface of the firewall as the "
+"gateway. Specify an alternate gateway here if this is not the correct "
+"gateway for your network. Type \"none\" for no gateway assignment."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:951
+#: usr/local/www/services_dhcp_edit.php:462
+#: usr/local/www/services_dhcpv6.php:638
+msgid "Domain name"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:954
+#: usr/local/www/services_dhcp_edit.php:465
+#: usr/local/www/services_dhcpv6.php:641
+msgid ""
+"The default is to use the domain name of this system as the default domain "
+"name provided by DHCP. You may specify an alternate domain name here."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:958
+#: usr/local/www/services_dhcp_edit.php:469
+#: usr/local/www/services_dhcpv6.php:645
+#: usr/local/www/services_router_advertisements.php:388
+msgid "Domain search list"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcp_edit.php:472
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as separator "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:965
+#: usr/local/www/services_dhcp_edit.php:476
+#: usr/local/www/services_dhcpv6.php:652
+msgid "Default lease time"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:969
+#: usr/local/www/services_dhcp_edit.php:480
+#: usr/local/www/services_dhcpv6.php:656
+msgid ""
+"This is used for clients that do not ask for a specific expiration time."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:971
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcpv6.php:658
+msgid "The default is 7200 seconds."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:975
+#: usr/local/www/services_dhcp_edit.php:486
+#: usr/local/www/services_dhcpv6.php:662
+msgid "Maximum lease time"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:979
+#: usr/local/www/services_dhcp_edit.php:490
+#: usr/local/www/services_dhcpv6.php:666
+msgid ""
+"This is the maximum lease time for clients that ask for a specific "
+"expiration time."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:981
+#: usr/local/www/services_dhcp_edit.php:492
+#: usr/local/www/services_dhcpv6.php:668
+msgid "The default is 86400 seconds."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:986
+msgid "Failover peer IP:"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:989
+msgid ""
+"Leave blank to disable. Enter the interface IP address of the other "
+"machine. Machines must be using CARP. Interface's advskew determines "
+"whether the DHCPd process is Primary or Secondary. Ensure one machine's "
+"advskew<20 (and the other is >20)."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:995 usr/local/www/services_dhcp.php:1246
+msgid "Static ARP"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1002
+msgid "Enable Static ARP entries"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1007
+msgid ""
+"This option persists even if DHCP server is disabled. Only the machines "
+"listed below will be able to communicate with the firewall on this NIC."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:672
+msgid "Time format change"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1025
+msgid "Change DHCP display lease time from UTC to local time."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1032
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this\n"
+"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcp_edit.php:499
+#: usr/local/www/services_dhcpv6.php:700
+msgid "Show Dynamic DNS"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1048
+#: usr/local/www/services_dhcp_edit.php:503
+#: usr/local/www/services_dhcpv6.php:704
+msgid "Enable registration of DHCP client names in DNS."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1051
+#: usr/local/www/services_dhcp_edit.php:506
+#: usr/local/www/services_dhcpv6.php:707
+msgid "Note: Leave blank to disable dynamic DNS registration."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1052
+#: usr/local/www/services_dhcp_edit.php:507
+#: usr/local/www/services_dhcpv6.php:708
+msgid ""
+"Enter the dynamic DNS domain which will be used to register client names in "
+"the DNS server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1054
+#: usr/local/www/services_dhcp_edit.php:509
+#: usr/local/www/services_dhcpv6.php:710
+msgid ""
+"Enter the primary domain name server IP address for the dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1056
+#: usr/local/www/services_dhcp_edit.php:511
+#: usr/local/www/services_dhcpv6.php:712
+msgid ""
+"Enter the dynamic DNS domain key name which will be used to register client "
+"names in the DNS server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1058
+#: usr/local/www/services_dhcp_edit.php:513
+#: usr/local/www/services_dhcpv6.php:714
+msgid ""
+"Enter the dynamic DNS domain key secret which will be used to register "
+"client names in the DNS server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1063
+msgid "MAC Address Control"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1066
+msgid "Show MAC Address Control"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1070
+msgid ""
+"Enter a list of partial MAC addresses to allow, comma separated, no spaces, "
+"such as "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1072
+msgid ""
+"Enter a list of partial MAC addresses to deny access, comma separated, no "
+"spaces, such as "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1077
+#: usr/local/www/services_dhcp_edit.php:519
+#: usr/local/www/services_dhcpv6.php:720
+msgid "NTP servers"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1080
+#: usr/local/www/services_dhcp_edit.php:522
+#: usr/local/www/services_dhcpv6.php:723
+msgid "Show NTP configuration"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1089
+#: usr/local/www/services_dhcp_edit.php:531
+#: usr/local/www/services_dhcpv6.php:733
+msgid "TFTP server"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1092
+#: usr/local/www/services_dhcp_edit.php:534
+#: usr/local/www/services_dhcpv6.php:736
+msgid "Show TFTP configuration"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1096
+#: usr/local/www/services_dhcp_edit.php:538
+#: usr/local/www/services_dhcpv6.php:740
+msgid ""
+"Leave blank to disable. Enter a full hostname or IP for the TFTP server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1101 usr/local/www/services_dhcpv6.php:746
+msgid "LDAP URI"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1104 usr/local/www/services_dhcpv6.php:749
+msgid "Show LDAP configuration"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1108 usr/local/www/services_dhcpv6.php:753
+msgid ""
+"Leave blank to disable. Enter a full URI for the LDAP server in the form "
+"ldap://ldap.example.com/dc=example,dc=com"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1113 usr/local/www/services_dhcpv6.php:758
+msgid "Enable network booting"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1116 usr/local/www/services_dhcpv6.php:761
+msgid "Show Network booting"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:765
+msgid "Enables network booting."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1122
+msgid "Enter the IP of the"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1122
+msgid "next-server"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1124
+msgid "and the default bios filename"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1126
+msgid "and the UEFI 32bit filename "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1128
+msgid "and the UEFI 64bit filename "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1130
+msgid ""
+"Note: You need both a filename and a boot server configured for this to work!"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1131
+msgid ""
+"You will need all three filenames and a boot server configured for UEFI to "
+"work!"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "Enter the"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "root-path"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "string"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1134
+msgid ""
+"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1140 usr/local/www/services_dhcpv6.php:773
+msgid "Additional BOOTP/DHCP Options"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1143 usr/local/www/services_dhcpv6.php:776
+msgid "Show Additional BOOTP/DHCP Options"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/services_dhcpv6.php:784
+msgid ""
+"Enter the DHCP option number and the value for each item you would like to "
+"include in the DHCP lease information. For a list of available options "
+"please visit this"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/services_dhcpv6.php:784
+msgid "URL"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1228 usr/local/www/services_dhcpv6.php:841
+msgid "The DNS servers entered in"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1228 usr/local/www/services_dhcpv6.php:841
+msgid "System: General setup"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1229 usr/local/www/services_dhcpv6.php:842
+msgid "(or the"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1229 usr/local/www/services_dhcpv6.php:842
+#: usr/local/www/services_dnsmasq.php:153
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_dnsmasq_edit.php:182
+msgid "DNS forwarder"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1230 usr/local/www/services_dhcpv6.php:843
+msgid "if enabled)"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1230 usr/local/www/services_dhcpv6.php:843
+msgid "will be assigned to clients by the DHCP server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1233 usr/local/www/services_dhcpv6.php:846
+msgid "The DHCP lease table can be viewed on the"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1233
+msgid "Status: DHCP leases"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1234 usr/local/www/services_dhcpv6.php:847
+msgid "page."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1242
+msgid "DHCP Static Mappings for this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:162
+msgid "Either MAC address or Client identifier must be specified"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:170
+#: usr/local/www/services_dhcpv6_edit.php:122
+msgid "The hostname cannot end with a hyphen according to RFC952"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:175
+#: usr/local/www/services_dhcpv6_edit.php:127
+#: usr/local/www/services_dnsmasq_edit.php:94
+#: usr/local/www/services_unbound_host_edit.php:96
+#: usr/local/www/system.php:117
+msgid ""
+"A valid hostname is specified, but the domain name part should be omitted"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:186
+msgid "Static ARP is enabled. You must specify an IP address."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:195
+msgid "This Hostname, IP, MAC address or Client identifier already exists."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:206
+#, php-format
+msgid "The IP address must not be within the DHCP range for this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:211
+msgid ""
+"The IP address must not be within the range configured on a DHCP pool for "
+"this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:220
+#, php-format
+msgid "The IP address must lie in the %s subnet."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:335
+#: usr/local/www/services_dhcpv6_edit.php:185
+msgid "Edit static mapping"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:371
+msgid "Static DHCP Mapping"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:384
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:388
+msgid "Client identifier"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:398
+msgid "If an IPv4 address is entered, the address must be outside of the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:400
+msgid ""
+"If no IPv4 address is given, one will be dynamically allocated from the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:407
+#: usr/local/www/services_dhcpv6_edit.php:223
+msgid "Name of the host, without domain part."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:431
+msgid "ARP Table Static Entry"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:434
+msgid "Create an ARP Table Static Entry for this MAC &amp; IP Address pair. "
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:458
+msgid ""
+"The default is to use the IP on this interface of the firewall as the "
+"gateway. Specify an alternate gateway here if this is not the correct "
+"gateway for your network."
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:73
+#: usr/local/www/services_dhcpv6_relay.php:74
+msgid "Destination Server"
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:81
+msgid "A valid Destination Server IP address must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:147
+msgid "DHCP Relay configuration"
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:153
+#, php-format
+msgid "Enable DHCP relay on interface"
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:178
+#: usr/local/www/services_dhcpv6_relay.php:179
+msgid "Append circuit ID and agent ID to requests"
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:179
+#, php-format
+msgid ""
+"If this is checked, the DHCP relay will append the circuit ID (%s interface "
+"number) and the agent ID to the DHCP request."
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:182
+#: usr/local/www/services_dhcpv6_relay.php:183
+msgid "Destination server"
+msgstr ""
+
+#: usr/local/www/services_dhcp_relay.php:186
+msgid ""
+"This is the IP address of the server to which DHCP requests are relayed. You "
+"can enter multiple server IP addresses, separated by commas. Select \"Proxy "
+"requests to DHCP server on WAN subnet\" to relay DHCP packets to the server "
+"that was used on the WAN interface."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:177
+msgid "A valid prefix range must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:183
+msgid "A valid IPv6 address must be specified for the gateway."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:185
+#: usr/local/www/services_router_advertisements.php:150
+msgid "A valid IPv6 address must be specified for each of the DNS servers."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:194
+msgid ""
+"A valid primary domain name server IPv4 address must be specified for the "
+"dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:209
+msgid ""
+"A valid IPv6 address must be specified for the primary/secondary NTP servers."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:213
+msgid "A valid IPv6 address or hostname must be specified for the TFTP server."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:215
+msgid "A valid URL must be specified for the network bootfile."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:222
+#, php-format
+msgid "The subnet range cannot overlap with virtual IPv6 address %s."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:375
+msgid "DHCPv6 server"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:520
+msgid ""
+"The DHCPv6 Server can only be enabled on interfaces configured with a static "
+"IPv6 address. This system has none."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_router_advertisements.php:263
+#: usr/local/www/services_router_advertisements.php:272
+msgid "Router Advertisements"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:546
+#, php-format
+msgid "Enable DHCPv6 server on %s interface"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:610
+msgid "Prefix Delegation Range"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:614
+msgid "Prefix Delegation Size"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:623
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows "
+"for \n"
+"\t\t\t\t\tassigning networks to subrouters. The start and end of the range "
+"must end on boundaries of the prefix delegation size."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:648
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as separator"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:681
+msgid "Change DHCPv6 display lease time from UTC to local time."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:688
+msgid ""
+"By default DHCPv6 leases are displayed in UTC time. By checking this \n"
+"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCPv6 interfaces lease time."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:767
+msgid "Enter the Bootfile URL"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:846
+msgid "Status: DHCPv6 leases"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:854
+msgid "DHCPv6 Static Mappings for this interface."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:858
+#: usr/local/www/status_dhcpv6_leases.php:418
+#: usr/local/www/status_dhcpv6_leases.php:504
+msgid "DUID"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dhcpv6_edit.php:201
+msgid "DUID Identifier"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:135
+msgid "A valid DUID Identifier must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:144
+msgid "This Hostname, IP or DUID Identifier already exists."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:185
+msgid "DHCPv6"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:198
+msgid "Static DHCPv6 Mapping"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:205
+msgid "Enter a DUID Identifier in the following format: "
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:214
+msgid "If an IPv6 address is entered, the address must be outside of the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:216
+msgid ""
+"If no IPv6 address is given, one will be dynamically allocated from the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:82
+msgid "A valid Destination Server IPv6 address must be specified."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:148
+msgid "DHCPv6 Relay configuration"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:154
+#, php-format
+msgid "Enable DHCPv6 relay on interface"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:172
+msgid "Interfaces without an IPv6 address will not be shown."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:180
+#, php-format
+msgid ""
+"If this is checked, the DHCPv6 relay will append the circuit ID (%s "
+"interface number) and the agent ID to the DHCPv6 request."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_relay.php:187
+msgid ""
+"This is the IPv6 address of the server to which DHCPv6 requests are relayed. "
+"You can enter multiple server IPv6 addresses, separated by commas. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:94
+#: usr/local/www/system_advanced_admin.php:105
+msgid "You must specify a valid port number"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:109
+msgid "Invalid custom options"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:182
+msgid "The DNS forwarder configuration has been changed"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:186
+msgid "General DNS Forwarder Options"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:192
+msgid "Enable DNS forwarder"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:196
+#: usr/local/www/services_unbound.php:337
+msgid "DHCP Registration"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:199
+msgid "Register DHCP leases in DNS forwarder"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:200
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS forwarder, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:208
+#: usr/local/www/services_unbound.php:349
+msgid "Static DHCP"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:211
+msgid "Register DHCP static mappings in DNS forwarder"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:212
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS forwarder, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:219
+msgid "Prefer DHCP"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:222
+msgid "Resolve DHCP mappings first"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:223
+#, php-format
+msgid ""
+"If this option is set, then DHCP mappings will be resolved before the manual "
+"list of names below. This only affects the name given for a reverse lookup "
+"(PTR)."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:229
+#: usr/local/www/services_unbound.php:330
+msgid "DNS Query Forwarding"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:232
+msgid "Query DNS servers sequentially"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:233
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers "
+"sequentially in the order specified (<i>System - General Setup - DNS "
+"Servers</i>), rather than all at once in parallel. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:242
+msgid "Require domain"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:243
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA "
+"queries for plain names, without dots or domain parts, to upstream name "
+"servers. If the name is not known from /etc/hosts or DHCP then a \"not found"
+"\" answer is returned. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:252
+msgid "Do not forward private reverse lookups"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:253
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse "
+"DNS lookups (PTR) for private addresses (RFC 1918) to upstream name "
+"servers. Any entries in the Domain Overrides section forwarding private \"n."
+"n.n.in-addr.arpa\" names to a specific server are still forwarded. If the IP "
+"to name is not known from /etc/hosts, DHCP or a specific domain override "
+"then a \"not found\" answer is immediately returned. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:261
+#: usr/local/www/services_unbound.php:262
+msgid "Listen Port"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:265
+#: usr/local/www/services_unbound.php:267
+msgid ""
+"The port used for responding to DNS queries. It should normally be left "
+"blank unless another service needs to bind to TCP/UDP port 53."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:275
+msgid ""
+"Interface IPs used by the DNS Forwarder for responding to queries from "
+"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries "
+"to other interface IPs not selected below are discarded. The default "
+"behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:295
+msgid "Strict Interface Binding"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:297
+msgid ""
+"If this option is set, the DNS forwarder will only bind to the interfaces "
+"containing the IP addresses selected above, rather than binding to all "
+"interfaces and discarding queries to other addresses."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:299
+msgid ""
+"NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to "
+"IPv6 addresses."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:312
+msgid ""
+"Enter any additional options you would like to add to the dnsmasq "
+"configuration here, separated by a space or newline"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:324
+#, php-format
+msgid ""
+"If the DNS forwarder is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the forwarder. The DNS forwarder will use the DNS servers "
+"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on "
+"WAN if the &quot;Allow DNS server list to be overridden by DHCP/PPP on "
+"WAN&quot; is checked. If you don't use that option (or if you use a static "
+"IP address on WAN), you must manually specify at least one DNS server on the "
+"%sSystem:General setup%s page."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:340
+#: usr/local/www/services_unbound.php:408
+msgid "Host Overrides"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:344
+#: usr/local/www/services_unbound.php:412
+msgid ""
+"Entries in this section override individual results from the forwarders."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:345
+#: usr/local/www/services_unbound.php:413
+msgid "Use these for changing DNS results or for adding custom DNS records."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:353
+#: usr/local/www/services_dnsmasq.php:440
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:76
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dnsmasq_edit.php:223
+#: usr/local/www/services_dnsmasq_edit.php:257
+#: usr/local/www/services_unbound.php:421
+#: usr/local/www/services_unbound.php:508
+#: usr/local/www/services_unbound_domainoverride_edit.php:71
+#: usr/local/www/services_unbound_domainoverride_edit.php:127
+#: usr/local/www/services_unbound_host_edit.php:87
+#: usr/local/www/services_unbound_host_edit.php:224
+#: usr/local/www/services_unbound_host_edit.php:260
+#: usr/local/www/system.php:108 usr/local/www/system.php:323
+msgid "Domain"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:430
+#: usr/local/www/services_unbound.php:498
+msgid "Domain Overrides"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:433
+msgid ""
+"Entries in this area override an entire domain, and subdomains, by "
+"specifying an authoritative DNS server to be queried for that domain."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:479
+#: usr/local/www/services_unbound.php:552
+msgid "Do you really want to delete this domain override?"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87
+#: usr/local/www/services_unbound_domainoverride_edit.php:82
+msgid "A valid domain must be specified after _msdcs."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:91
+#: usr/local/www/services_dnsmasq_edit.php:100
+#: usr/local/www/services_unbound_domainoverride_edit.php:84
+#: usr/local/www/services_unbound_host_edit.php:102
+msgid "A valid domain must be specified."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:94
+msgid ""
+"A valid IP address must be specified, or # for an exclusion or ! to not "
+"forward at all."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:97
+msgid "An interface IP address must be specified for the DNS query source."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+msgid "Edit Domain Override"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137
+#: usr/local/www/services_unbound_domainoverride_edit.php:131
+msgid "Domain to override (NOTE: this does not have to be a valid TLD!)"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+msgid "test"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_dnsmasq_edit.php:234
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+#: usr/local/www/services_unbound_host_edit.php:236
+msgid "or"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144
+#: usr/local/www/services_unbound_domainoverride_edit.php:141
+msgid "IP address of the authoritative DNS server for this domain"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+msgid ""
+"Or enter # for an exclusion to pass through this host/subdomain to standard "
+"nameservers instead of a previous override."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+msgid ""
+"Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148
+msgid "Source IP"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151
+msgid ""
+"Source IP address for queries to the DNS server for the override domain."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:152
+msgid "Leave blank unless your DNS server is accessed through a VPN tunnel."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:91 usr/local/www/system.php:114
+msgid ""
+"The hostname can only contain the characters A-Z, 0-9 and '-'. It may not "
+"start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:130
+#: usr/local/www/services_unbound_host_edit.php:132
+msgid "Alias Domain"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:135
+#: usr/local/www/services_unbound_host_edit.php:137
+msgid ""
+"Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. "
+"They may not start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:138
+#: usr/local/www/services_unbound_host_edit.php:140
+msgid ""
+"A valid alias hostname is specified, but the domain name part should be "
+"omitted"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:143
+#: usr/local/www/services_unbound_host_edit.php:145
+msgid "A valid domain must be specified in alias list."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:154
+#: usr/local/www/services_unbound_host_edit.php:155
+msgid "This host/domain already exists."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:182
+#: usr/local/www/services_unbound_host_edit.php:183
+msgid "Edit host"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:212
+msgid "Edit DNS Forwarder entry"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:218
+#: usr/local/www/services_unbound_host_edit.php:219
+msgid "Name of the host, without domain part"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:220
+#: usr/local/www/services_unbound_host_edit.php:220
+msgid "myhost"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:226
+#: usr/local/www/services_unbound_host_edit.php:227
+msgid "Domain of the host"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:227
+#: usr/local/www/services_unbound_host_edit.php:228
+msgid "example.com"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:233
+#: usr/local/www/services_unbound_host_edit.php:235
+msgid "IP address of the host"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:251
+#: usr/local/www/services_unbound_host_edit.php:254
+msgid "Enter additional names for this host."
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:61
+msgid "Dynamic DNS clients"
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:75 usr/local/www/services_rfc2136.php:69
+msgid "DynDns"
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_rfc2136.php:70
+msgid "RFC 2136"
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:87 usr/local/www/status_openvpn.php:283
+#: usr/local/www/status_openvpn.php:346 usr/local/www/status_services.php:84
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:82
+msgid "Service"
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:83
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:84
+msgid "Cached IP"
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:191
+msgid ""
+"IP addresses appearing in green are up to date with Dynamic DNS provider."
+msgstr ""
+
+#: usr/local/www/services_dyndns.php:192
+msgid ""
+"You can force an update for an IP address on the edit page for that service."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:97
+#: usr/local/www/services_dyndns_edit.php:247
+msgid "Service type"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:107
+#: usr/local/www/services_dyndns_edit.php:382
+msgid "Update URL"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:121
+msgid "The hostname contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:126
+msgid "The MX contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:128
+#: usr/local/www/system_usermanager.php:227
+#: usr/local/www/vpn_l2tp_users_edit.php:92
+#: usr/local/www/vpn_pptp_users_edit.php:88
+msgid "The username contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:181
+#: usr/local/www/services_dyndns_edit.php:236
+msgid "Dynamic DNS client"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:243
+#: usr/local/www/services_rfc2136_edit.php:195
+#: usr/local/www/services_rfc2136_edit.php:201
+msgid "yes"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:261
+#: usr/local/www/services_rfc2136_edit.php:141
+msgid "Interface to monitor"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:286
+msgid "Interface to send update from"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:308
+msgid "Note: This is almost always the same as the Interface to Monitor."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:319
+msgid "Enter the complete host/domain name. example: myhost.dyndns.org"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:320
+msgid "For he.net tunnelbroker, enter your tunnel ID"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:325
+msgid "MX"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:329
+msgid ""
+"Note: With DynDNS service you can only use a hostname, not an IP address."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:331
+msgid ""
+"Set this option only if you need a special MX record. Not all services "
+"support this."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:335
+msgid "Wildcards"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:344
+msgid "Enable "
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:338
+msgid "Wildcard"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:341
+msgid "Verbose logging"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:344
+msgid "verbose logging"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:347
+msgid "CURL options"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:350
+msgid "Force IPv4 resolving"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:352
+msgid "Verify SSL peer"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:359
+msgid ""
+"Username is required for all types except Namecheap, FreeDNS and Custom "
+"Entries."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:360
+msgid "Route 53: Enter your Access Key ID."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:361
+msgid ""
+"For Custom Entries, Username and Password represent HTTP Authentication "
+"username and passwords."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:369
+msgid ""
+"FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided "
+"by FreeDNS."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:370
+msgid "Route 53: Enter your Secret Access Key."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:375
+msgid "Zone ID"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:378
+msgid ""
+"Enter Zone ID that you received when you created your domain in Route 53."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:385
+msgid ""
+"This is the only field required by for Custom Dynamic DNS, and is only used "
+"by Custom Entries."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:387
+#: usr/local/www/services_dyndns_edit.php:398
+msgid ""
+"If you need the new IP to be included in the request, put %IP% in its place."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:391
+msgid "Result Match"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:394
+msgid "This field is only used by Custom Dynamic DNS Entries."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:396
+msgid ""
+"This field should be identical to what your DDNS Provider will return if the "
+"update succeeds, leave it blank to disable checking of returned results."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:400
+msgid ""
+"If you need to include multiple possible values, separate them with a |. If "
+"your provider includes a |, escape it with \\|"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:402
+msgid ""
+"Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or "
+"end of the returned results are removed before comparison."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:407
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:159
+msgid "TTL"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:410
+msgid "Choose TTL for your dns record."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:428
+#: usr/local/www/services_rfc2136_edit.php:106
+msgid "Save & Force Update"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:435
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem:\n"
+" General setup%s or allow the DNS server list to be "
+"overridden\n"
+" by DHCP/PPP on WAN for dynamic DNS updates to work."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:81
+#: usr/local/www/services_igmpproxy_edit.php:46
+msgid "IGMP Proxy"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:91
+msgid "The IGMP entry list has been changed"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:104
+#: usr/local/www/services_igmpproxy.php:147
+msgid "add a new igmpentry"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:134
+msgid "edit igmpentry"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:135
+msgid ""
+"Do you really want to delete this igmp entry? All elements that still use it "
+"will become invalid (e.g. filter rules)!"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:135
+msgid "delete igmpentry"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:161
+msgid ""
+"Please add the interface for upstream, the allowed subnets, and the "
+"downstream interfaces you would like the proxy to allow. Only one 'upstream' "
+"interface can be configured."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:80
+msgid "Only one 'upstream' interface can be configured."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:163
+msgid "IGMP Proxy Edit"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:193
+msgid "Upstream Interface"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:194
+msgid "Downstream Interface"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:198
+msgid ""
+"The <b>upstream</b> network interface is the outgoing interface which is "
+"responsible for communicating to available multicast data sources. There can "
+"only be one upstream interface."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:204
+msgid "Downstream"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:204
+msgid ""
+"network interfaces are the distribution interfaces to the destination "
+"networks, where multicast clients can join groups and receive multicast "
+"data. One or more downstream interfaces must be configured."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:211
+msgid "Threshold"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:216
+msgid ""
+"Defines the TTL threshold for the network interface. Packets with a "
+"lower TTL than the threshold value will be ignored. This setting is "
+"optional, and by default the threshold is 1."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:223
+msgid "Network (s)"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:214 usr/local/www/services_ntpd.php:306
+msgid "Add another Time server"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:238 usr/local/www/services_ntpd_gps.php:367
+#: usr/local/www/services_ntpd_pps.php:118
+msgid "Serial GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:239 usr/local/www/services_ntpd_gps.php:368
+#: usr/local/www/services_ntpd_pps.php:119 usr/local/www/status_queues.php:174
+msgid "PPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:249
+msgid "NTP Server Configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:276
+msgid "Interfaces without an IP address will not be shown."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:278
+msgid "Selecting no interfaces will listen on all interfaces with a wildcard."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:279
+msgid ""
+"Selecting all interfaces will explicitly listen on only the interfaces/IPs "
+"specified."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:309
+msgid "For best results three to five servers should be configured here."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:311
+msgid ""
+"The <i>prefer</i> option indicates that NTP should favor the use of this "
+"server more than all others."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:313
+msgid ""
+"The <i>noselect</i> option indicates that NTP should not use this server for "
+"time, but stats for this server will be collected and displayed."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:319
+msgid "(0-15)"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:320
+msgid ""
+"Orphan mode allows the system clock to be used when no other clocks are "
+"available. The number here specifies the stratum reported during orphan mode "
+"and should normally be set to a number high enough to insure that any other "
+"servers available to clients are preferred over this server. (default: 12)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:327
+msgid "Enable RRD graphs of NTP statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:333
+msgid ""
+"These options enable additional messages from NTP to be written to the "
+"System Log"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:333
+msgid "Status > System Logs > NTP"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:336
+msgid "Enable logging of peer messages (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:339
+msgid "Enable logging of system messages (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:346
+msgid "Show statistics logging options"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:349
+msgid "Warning: "
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:349
+msgid "these options will create persistant daily log files in /var/log/ntp."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:352
+msgid "Enable logging of reference clock statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:355
+msgid "Enable logging of clock discipline statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:358
+msgid "Enable logging of NTP peer statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:366
+msgid "Show access restriction options"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:369
+msgid "these options control access to NTP from the WAN."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:372
+msgid "Enable Kiss-o'-death packets (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:375
+msgid ""
+"Deny state modifications (i.e. run time configuration) by ntpq and ntpdc "
+"(default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:378
+msgid "Disable ntpq and ntpdc queries (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:381
+msgid "Disable all except ntpq and ntpdc queries (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:384
+msgid "Deny packets that attempt a peer association (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:387
+msgid "Deny mode 6 control message trap service (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:395
+msgid "Show Leap second configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:398
+msgid ""
+"A leap second file allows NTP to advertize an upcoming leap second addition "
+"or subtraction."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:399
+msgid "Normally this is only useful if this server is a stratum 1 time server."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:401
+msgid "Enter Leap second configuration as text:"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:403
+msgid "Or"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:403
+msgid "select a file to upload:"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:160
+msgid "NTP GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:376
+msgid "NTP Serial GPS Configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+msgid ""
+"For the best results, NTP should have at least three sources of time. So it "
+"is best to configure at least 2 servers under"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "Services > NTP"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+msgid ""
+"to minimize clock drift if the GPS data is not valid over time. Otherwise "
+"ntpd may only use values from the unsynchronized local clock when providing "
+"time to clients."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:387
+msgid "GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:399
+msgid "This option allows you to select a predefined configuration."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:402
+msgid "Default is the configuration of pfSense 2.1 and earlier"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:403
+msgid " (not recommended). Select Generic if your GPS is not listed.)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:404
+msgid ""
+"The perdefined configurations assume your GPS has already been set to NMEA "
+"mode."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:428
+msgid ""
+"All serial ports are listed, be sure to pick the port with the GPS attached."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:437
+msgid "Serial port baud rate."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:440
+msgid ""
+"Note: A higher baud rate is generally only helpful if the GPS is sending too "
+"many sentences. It is recommended to configure the GPS to send only one "
+"sentence at a baud rate of 4800 or 9600."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:457
+msgid ""
+"By default NTP will listen for all supported NMEA sentences. Here one or "
+"more sentences to listen for may be specified."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:464
+msgid "Fudge time 1 is used to specify the GPS PPS signal offset"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:470
+msgid "Fudge time 2 is used to specify the GPS time offset"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:475
+#: usr/local/www/services_ntpd_pps.php:167
+msgid "(0-16)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:476
+msgid "This may be used to change the GPS Clock stratum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:476
+msgid ""
+"This may be useful if, for some reason, you want ntpd to prefer a different "
+"clock"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:484
+#: usr/local/www/services_ntpd_pps.php:176
+msgid ""
+"Normally there should be no need to change these options from the defaults."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:494
+msgid "NTP should prefer this clock (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:502
+msgid ""
+"NTP should not use this clock, it will be displayed for reference "
+"only(default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:510
+msgid "Enable PPS signal processing (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:518
+#: usr/local/www/services_ntpd_pps.php:186
+msgid "Enable falling edge PPS signal processing (default: rising edge)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:526
+msgid "Enable kernel PPS clock discipline (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:534
+msgid "Obscure location in timestamp (default: unobscured)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:542
+msgid ""
+"Log the sub-second fraction of the received time stamp (default: Not logged)."
+"<br />Note: enabling this will rapidly fill the log, but is useful for "
+"tuning Fudge time 2."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:551
+#: usr/local/www/services_ntpd_pps.php:211
+msgid "(1 to 4 charactors)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:552
+msgid "This may be used to change the GPS Clock ID"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:558
+msgid "Show GPS Initialization commands"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:563
+msgid ""
+"Note: Commands entered here will be sent to the GPS during initialization. "
+"Please read and understand your GPS documentation before making any changes "
+"here."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:564
+msgid "NMEA checksum calculator"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:566
+msgid ""
+"Enter the text between &quot;$&quot; and &quot;*&quot; of a NMEA command "
+"string:"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:566
+msgid "checksum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:567
+msgid "Calculate NMEA checksum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:101
+msgid "NTP PPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:129
+msgid "NTP PPS Configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:134
+msgid ""
+"Devices with a Pulse Per Second output such as radios that receive a time "
+"signal from DCF77 (DE), JJY (JP), MSF (GB) or WWVB (US) may be used as a PPS "
+"reference for NTP."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:135
+msgid ""
+"A serial GPS may also be used, but the serial GPS driver would usually be "
+"the better option."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:136
+msgid ""
+"A PPS signal only provides a reference to the change of a second, so at "
+"least one other source to number the seconds is required."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "At least 3 additional time sources should be configured under"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "to reliably supply the time of each PPS pulse."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:154
+msgid ""
+"All serial ports are listed, be sure to pick the port with the PPS source "
+"attached."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:162
+msgid ""
+"Fudge time is used to specify the PPS signal offset from the actual second "
+"such as the transmission delay between the transmitter and the receiver."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:168
+msgid "This may be used to change the PPS Clock stratum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:168
+msgid ""
+"This may be useful if, for some reason, you want ntpd to prefer a different "
+"clock and just monitor this source."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:194
+msgid "Enable kernel PPS clock discipline (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:202
+msgid ""
+"Record a timestamp once for each second, useful for constructing Allan "
+"deviation plots (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:212
+msgid "This may be used to change the PPS Clock ID"
+msgstr ""
+
+#: usr/local/www/services_rfc2136.php:56
+msgid "RFC 2136 clients"
+msgstr ""
+
+#: usr/local/www/services_rfc2136.php:166
+#: usr/local/www/vpn_openvpn_client.php:1165
+msgid "Do you really want to delete this client?"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:165
+msgid "Key name"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:79
+msgid "The DNS update host name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:81
+msgid "The DNS update TTL must be an integer."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:83
+msgid "The DNS update key name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:104
+msgid "New/Edited RFC2136 dnsupdate entry was posted."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_rfc2136_edit.php:130
+msgid "RFC 2136 client"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:169
+msgid "This must match the setting on the DNS server."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:172
+msgid "Key type"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:176
+msgid " User"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:184
+msgid "Paste an HMAC-MD5 key here."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:196
+msgid "Use TCP instead of UDP"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:199
+msgid "Use Public IP"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:202
+msgid ""
+"If the interface IP is private, attempt to fetch and use the public IP "
+"instead."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:216
+msgid "Save &amp; Force Update"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:225
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem: General setup %sor allow the "
+"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates "
+"to work."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:75
+msgid ""
+"The DHCPv6 Server can only be enabled on interfaces configured with static "
+"IP addresses"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:76
+msgid "Only interfaces configured with a static IP will be shown"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:118
+msgid ""
+"Subnets are specified in CIDR format. Select the CIDR mask that pertains to "
+"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 "
+"network; etc. If no subnets are specified here, the Router Advertisement "
+"(RA) Daemon will advertise to the subnet to which the router's interface is "
+"assigned."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:145
+#, php-format
+msgid "An invalid subnet or alias was specified. [%s/%s]"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:194
+msgid "Router advertisements"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:279
+#, php-format
+msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:280
+#, php-format
+msgid ""
+"Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router "
+"Advertising with Stateless Autoconfig, \"Managed\" for assignment through "
+"(a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with "
+"Stateless Autoconfig"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:281
+#, php-format
+msgid ""
+"It is not required to activate this DHCPv6 server when set to \"Managed\", "
+"this can be another host on the network"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:285
+msgid "Router Priority"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:292
+#, php-format
+msgid "Select the Priority for the Router Advertisement (RA) Daemon."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:306
+msgid "RA Interface"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:314
+#, php-format
+msgid "Select the Interface for the Router Advertisement (RA) Daemon."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:320
+msgid "RA Subnet(s)"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:391
+msgid ""
+"The RA server can optionally provide a domain search list. Use the semicolon "
+"character as separator"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:399
+msgid "Use same settings as DHCPv6 server"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:95
+msgid "Invalid character '#' in system location"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:96
+msgid "Invalid character '#' in system contact"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:97
+msgid "Invalid character '#' in read community string"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:100
+msgid "Community"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:104
+msgid "Polling Port"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:111
+msgid "Invalid character '#' in SNMP trap string"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:357
+msgid "Trap server"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:118
+msgid "Trap server port"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:122 usr/local/www/services_snmp.php:376
+msgid "Trap string"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:290
+msgid "SNMP Daemon"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:296
+msgid "Polling Port "
+msgstr ""
+
+#: usr/local/www/services_snmp.php:299
+msgid "Enter the port to accept polling events on (default 161)"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:304
+msgid "System location"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:311
+msgid "System contact"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:318
+msgid "Read Community String"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:321
+msgid ""
+"The community string is like a password, restricting access to querying SNMP "
+"to hosts knowing the community string. Use a strong value here to protect "
+"from unauthorized information disclosure."
+msgstr ""
+
+#: usr/local/www/services_snmp.php:350
+msgid "SNMP Traps"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:360
+msgid "Enter trap server name"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:365
+msgid "Trap server port "
+msgstr ""
+
+#: usr/local/www/services_snmp.php:368
+msgid "Enter the port to send the traps to (default 162)"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:373
+msgid "Enter the SNMP trap string"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:385
+msgid "Modules"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:391
+msgid "SNMP Modules"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:393
+msgid "MibII"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:395
+msgid "Netgraph"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:399
+msgid "Host Resources (Requires MibII)"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:401
+msgid "UCD"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:403
+msgid "Regex"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:413
+msgid "Interface Binding"
+msgstr ""
+
+#: usr/local/www/services_snmp.php:418
+msgid "Bind Interface"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:130
+msgid "You must specify a valid port number."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:230
+msgid "The configuration of the DNS Resolver has been changed"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:230
+msgid "You must apply changes for them to take effect."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:238
+#: usr/local/www/services_unbound_advanced.php:212
+msgid "General settings"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:239
+#: usr/local/www/services_unbound_acls.php:189
+#: usr/local/www/services_unbound_advanced.php:213
+msgid "Advanced settings"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:240
+#: usr/local/www/services_unbound_acls.php:190
+#: usr/local/www/services_unbound_advanced.php:214
+msgid "Access Lists"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:251
+msgid "General DNS Resolver Options"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:257
+msgid "Enable DNS Resolver"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:272
+#: usr/local/www/system_advanced_network.php:251
+msgid "Network Interfaces"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:278
+msgid ""
+"Interface IPs used by the DNS Resolver for responding to queries from "
+"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries "
+"to other interface IPs not selected below are discarded. The default "
+"behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:297
+msgid "Outgoing Network Interfaces"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:303
+msgid ""
+"Utilize different network interface(s) that the DNS Resolver will use to "
+"send queries to authoritative servers and receive their replies. By default "
+"all interfaces are used."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:322
+msgid "DNSSEC"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:325
+msgid "Enable DNSSEC Support"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:333
+msgid "Enable Forwarding Mode"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:340
+msgid "Register DHCP leases in the DNS Resolver"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:341
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS Resolver, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:352
+msgid "Register DHCP static mappings in the DNS Resolver"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:353
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS Resolver, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:360
+msgid "TXT Comment Support"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:363
+msgid ""
+"If this option is set, then any descriptions associated with Host entries "
+"and DHCP Static mappings will create a corresponding TXT record."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:376
+msgid ""
+"Enter any additional configuration parameters to add to the DNS Resolver "
+"configuration here, separated by a newline"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:395
+#, php-format
+msgid ""
+"If the DNS Resolver is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver "
+"will use the DNS servers entered in %sSystem: General setup%s or those "
+"obtained via DHCP or PPP on WAN if the &quot;Allow DNS server list to be "
+"overridden by DHCP/PPP on WAN&quot; is checked."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:501
+msgid ""
+"Entries in this area override an entire domain by specifying an "
+"authoritative DNS server to be queried for that domain."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:95
+#: usr/local/www/services_unbound_acls.php:109
+msgid "You must enter a valid IP address for each row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:100
+msgid "You must enter a valid IPv4 netmask for each IPv4 row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:106
+msgid "You must enter a valid IPv6 netmask for each IPv6 row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:179
+#: usr/local/www/services_unbound_advanced.php:204
+msgid "The configuration of the DNS Resolver, has been changed"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:188
+msgid "General Settings"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:204
+#, php-format
+msgid "%s Access List"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:207
+msgid "Access List name"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:211
+msgid "Provide an Access List name."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:226
+msgid ""
+"Choose what to do with DNS requests that match the criteria specified below."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:227
+msgid ""
+"<b>Deny:</b> This action stops queries from hosts within the netblock "
+"defined below."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:228
+msgid ""
+"<b>Refuse:</b> This action also stops queries from hosts within the netblock "
+"defined below, but sends a DNS rcode REFUSED error message back to the "
+"client."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:229
+msgid ""
+"<b>Allow:</b> This action allows queries from hosts within the netblock "
+"defined below."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:230
+msgid ""
+"<b>Allow Snoop:</b> This action allows recursive and nonrecursive access "
+"from hosts within the netblock defined below. Used for cache snooping and "
+"ideally should only be configured for your administrative host."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:235
+msgid "Networks"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:321
+msgid "Access List Name"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:335
+msgid "Add new Access List"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:344
+msgid "Access Lists to control access to the DNS Resolver can be defined here."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:368
+msgid "edit access list"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:370
+msgid "Do you really want to delete this access list?"
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:371
+msgid "delete access list"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:225
+msgid "Advanced Resolver Options"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:228
+msgid "Hide Identity"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:231
+msgid "If enabled, id.server and hostname.bind queries are refused."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:235
+msgid "Hide Version"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:238
+msgid "If enabled, version.server and version.bind queries are refused."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:242
+msgid "Prefetch Support"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:245
+msgid ""
+"Message cache elements are prefetched before they expire to help keep the "
+"cache up to date. When enabled, this option can cause an increase of around "
+"10% more DNS traffic and load on the server, but frequently requested items "
+"will not expire from the cache."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:249
+msgid "Prefetch DNS Key Support"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:252
+#, php-format
+msgid ""
+"DNSKEY's are fetched earlier in the validation process when a %sDelegation "
+"signer%s is encountered. This helps lower the latency of requests but does "
+"utilize a little more CPU."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:256
+msgid "Harden Glue"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:259
+msgid "Only trust glue if it is within the servers authority."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:263
+msgid "Harden DNSSEC data"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:266
+msgid ""
+"DNSSEC data is required for trust-anchored zones. If such data is absent, "
+"the zone becomes bogus. If this is disabled and no DNSSEC data is received, "
+"then the zone is made insecure."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:270
+msgid "Message Cache Size"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:283
+msgid ""
+"Size of the message cache. The message cache stores DNS rcodes and "
+"validation statuses. The RRSet cache will automatically be set to twice this "
+"amount. The RRSet cache contains the actual RR data. The default is 4 "
+"megabytes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:287
+msgid "Outgoing TCP Buffers"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:300
+msgid ""
+"The number of outgoing TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, to authoritative servers, are "
+"done."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:304
+msgid "Incoming TCP Buffers"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:317
+msgid ""
+"The number of incoming TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, from clients, are accepted."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:321
+msgid "EDNS Buffer Size"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:334
+msgid ""
+"Number of bytes size to advertise as the EDNS reassembly buffer size. This "
+"is the value that is used in UDP datagrams sent to peers. RFC recommendation "
+"is 4096 (which is the default). If you have fragmentation reassemble "
+"problems, usually seen as timeouts, then a value of 1480 should help. The "
+"512 value bypasses most MTU path problems, but it can generate an excessive "
+"amount of TCP fallback."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:338
+msgid "Number of queries per thread"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:351
+msgid ""
+"The number of queries that every thread will service simultaneously. If more "
+"queries arrive that need to be serviced, and no queries can be jostled, then "
+"these queries are dropped."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:355
+msgid "Jostle Timeout"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:368
+msgid ""
+"This timeout is used for when the server is very busy. This protects against "
+"denial of service by slow queries or high query rates. The default value is "
+"200 milliseconds."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:372
+msgid "Maximum TTL for RRsets and messages"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:375
+msgid ""
+"Configure a maximum Time to live for RRsets and messages in the cache. The "
+"default is 86400 seconds (1 day). When the internal TTL expires the cache "
+"item is expired. This can be configured to force the resolver to query for "
+"data more often and not trust (very large) TTL values."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:379
+msgid "Minimum TTL for RRsets and messages"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:382
+msgid ""
+"Configure a minimum Time to live for RRsets and messages in the cache. The "
+"default is 0 seconds. If the minimum value kicks in, the data is cached for "
+"longer than the domain owner intended, and thus less queries are made to "
+"look up the data. The 0 value ensures the data in the cache is as the domain "
+"owner intended. High values can lead to trouble as the data in the cache "
+"might not match up with the actual data anymore."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:386
+msgid "TTL for Host cache entries"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:395
+msgid ""
+"Time to live for entries in the host cache. The host cache contains "
+"roundtrip timing and EDNS support information. The default is 15 minutes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:399
+msgid "TTL for lame delegation"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:408
+msgid ""
+"Time to live for when a delegation is considered to be lame. The default is "
+"15 minutes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:412
+msgid "Number of Hosts to cache"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:421
+msgid "Number of hosts for which information is cached. The default is 10,000."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:425
+msgid "Unwanted Reply Threshold"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:435
+msgid ""
+"If enabled, a total number of unwanted replies is kept track of in every "
+"thread. When it reaches the threshold, a defensive action is taken and a "
+"warning is printed to the log file. This defensive action is to clear the "
+"RRSet and message caches, hopefully flushing away any poison. The default is "
+"disabled, but if enabled a value of 10 million is suggested."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:439
+msgid "Log level verbosity"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:452
+msgid "Select the log verbosity."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:456
+msgid "Disable auto-added access control"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:459
+msgid ""
+"Check this box to disable the automatically-added access control entries. By "
+"default, IPv4 and IPv6 networks residing on internal interfaces of this "
+"system are permitted. Allowed networks must be manually configured on the "
+"Access Lists tab if the auto-added entries are disabled."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:90
+msgid ""
+"A valid IP address and port must be specified, for example "
+"192.168.100.10@5353."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:92
+msgid "A valid IP address must be specified, for example 192.168.100.10."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:143
+msgid ""
+"To use a nondefault port for communication, append an '@' with the port "
+"number."
+msgstr ""
+
+#: usr/local/www/services_unbound_host_edit.php:93
+msgid ""
+"The hostname can only contain the characters A-Z, 0-9, '_' and '-'. It may "
+"not start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_unbound_host_edit.php:213
+msgid "Edit DNS Resolver entry"
+msgstr ""
+
+#: usr/local/www/services_wol.php:64
+#, php-format
+msgid "Sent magic packet to %1$s (%2$s)%3$s"
+msgstr ""
+
+#: usr/local/www/services_wol.php:66
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not "
+"complete successfully%5$s"
+msgstr ""
+
+#: usr/local/www/services_wol.php:89
+msgid "A valid interface must be specified."
+msgstr ""
+
+#: usr/local/www/services_wol.php:95
+msgid "A valid ip could not be found!"
+msgstr ""
+
+#: usr/local/www/services_wol.php:100
+#, php-format
+msgid "Sent magic packet to %s."
+msgstr ""
+
+#: usr/local/www/services_wol.php:102
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s did not "
+"complete successfully%4$s"
+msgstr ""
+
+#: usr/local/www/services_wol.php:142
+msgid "Choose which interface the host to be woken up is connected to."
+msgstr ""
+
+#: usr/local/www/services_wol.php:149
+msgid "Enter a MAC address "
+msgstr ""
+
+#: usr/local/www/services_wol.php:149
+msgid "in the following format: xx:xx:xx:xx:xx:xx"
+msgstr ""
+
+#: usr/local/www/services_wol.php:158
+msgid "Wake all clients at once: "
+msgstr ""
+
+#: usr/local/www/services_wol.php:159
+msgid "Or Click the MAC address to wake up an individual device:"
+msgstr ""
+
+#: usr/local/www/services_wol.php:213
+msgid ""
+"This service can be used to wake up (power on) computers by sending special"
+msgstr ""
+
+#: usr/local/www/services_wol.php:213
+msgid "Magic Packets"
+msgstr ""
+
+#: usr/local/www/services_wol.php:213
+msgid ""
+"The NIC in the computer that is to be woken up must support Wake on LAN and "
+"has to be configured properly (WOL cable, BIOS settings). "
+msgstr ""
+
+#: usr/local/www/services_wol_edit.php:127
+msgid "Edit WOL entry"
+msgstr ""
+
+#: usr/local/www/services_wol_edit.php:141
+msgid "Choose which interface this host is connected to."
+msgstr ""
+
+#: usr/local/www/services_wol_edit.php:148
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr ""
+
+#: usr/local/www/shortcuts.inc:96
+msgid "Main page for this section"
+msgstr ""
+
+#: usr/local/www/shortcuts.inc:120
+msgid "Status of items on this page"
+msgstr ""
+
+#: usr/local/www/shortcuts.inc:127
+msgid "Log entries for items on this page"
+msgstr ""
+
+#: usr/local/www/status.php:125
+msgid "This status page includes the following information"
+msgstr ""
+
+#: usr/local/www/status.php:245
+msgid ""
+"Note: make sure to remove any sensitive information (passwords, maybe also "
+"IP addresses) before posting information from this page in public places "
+"(like mailing lists)"
+msgstr ""
+
+#: usr/local/www/status.php:248
+msgid "Passwords in config.xml have been automatically removed"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:53
+msgid "Status: Captive portal"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:115
+#: usr/local/www/status_captiveportal_expire.php:72
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/status_captiveportal_vouchers.php:110
+msgid "Active Users"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:116
+#: usr/local/www/status_captiveportal_expire.php:73
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:78
+#: usr/local/www/status_captiveportal_vouchers.php:111
+msgid "Active Vouchers"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:118
+#: usr/local/www/status_captiveportal_expire.php:75
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_test.php:75
+#: usr/local/www/status_captiveportal_voucher_rolls.php:80
+#: usr/local/www/status_captiveportal_vouchers.php:113
+msgid "Test Vouchers"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:119
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_expire.php:76
+#: usr/local/www/status_captiveportal_test.php:76
+#: usr/local/www/status_captiveportal_voucher_rolls.php:81
+#: usr/local/www/status_captiveportal_vouchers.php:114
+msgid "Expire Vouchers"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:130
+msgid "Captive Portal Zone"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:154
+msgid "Captive Portal status"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:161
+#: usr/local/www/status_captiveportal.php:164
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:111
+msgid "Session start"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:162
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:112
+msgid "Last activity"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:190
+msgid "Do you really want to disconnect this client?"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:190
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:145
+#: usr/local/www/status_interfaces.php:158
+#: usr/local/www/status_interfaces.php:172
+msgid "Disconnect"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:207
+msgid "Don't show last activity"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:210
+msgid "Show last activity"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_expire.php:85
+#: usr/local/www/status_captiveportal_test.php:85
+msgid "Voucher(s)"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_expire.php:89
+msgid ""
+"Enter multiple vouchers separated by space or newline. All valid vouchers "
+"will be marked as expired"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_test.php:89
+msgid ""
+"Enter multiple vouchers separated by space or newline. The remaining time, "
+"if valid, will be shown for each voucher"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+msgid "Roll#"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+msgid "# of Tickets"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:94
+msgid "used"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:95
+msgid "active"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:96
+msgid "ready"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_vouchers.php:123
+msgid "Voucher"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_vouchers.php:125
+msgid "Activated at"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_vouchers.php:126
+msgid "Expires in"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_vouchers.php:127
+msgid "Expires at"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_vouchers.php:135
+msgid "min"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:50
+msgid "DHCP leases"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:300
+#: usr/local/www/status_dhcpv6_leases.php:385
+msgid "Failover Group"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:301
+#: usr/local/www/status_dhcpv6_leases.php:386
+msgid "My State"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:302
+#: usr/local/www/status_dhcp_leases.php:304
+#: usr/local/www/status_dhcpv6_leases.php:387
+#: usr/local/www/status_dhcpv6_leases.php:389
+msgid "Since"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:303
+#: usr/local/www/status_dhcpv6_leases.php:388
+msgid "Peer State"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:335
+#: usr/local/www/status_dhcpv6_leases.php:421
+#: usr/local/www/status_dhcpv6_leases.php:506
+msgid "End"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:336
+#: usr/local/www/status_dhcpv6_leases.php:422
+#: usr/local/www/status_gateway_groups.php:134
+#: usr/local/www/status_gateways.php:132 usr/local/www/status_gateways.php:136
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60
+msgid "Online"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:337
+#: usr/local/www/status_dhcpv6_leases.php:423
+msgid "Lease Type"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:386
+msgid "send Wake on LAN packet to this MAC address"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:482
+msgid "add a static mapping for this MAC address"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:411
+msgid "edit the static mapping for this entry"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:415
+msgid "add a Wake on LAN mapping for this MAC address"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:420
+#: usr/local/www/status_dhcpv6_leases.php:491
+msgid "delete this DHCP lease"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:433
+#: usr/local/www/status_dhcpv6_leases.php:562
+msgid "Show active and static leases only"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:436
+#: usr/local/www/status_dhcpv6_leases.php:565
+msgid "Show all configured leases"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:440
+#: usr/local/www/status_dhcpv6_leases.php:569
+msgid "No leases file found. Is the DHCP server active"
+msgstr ""
+
+#: usr/local/www/status_dhcpv6_leases.php:51
+msgid "DHCPv6 leases"
+msgstr ""
+
+#: usr/local/www/status_dhcpv6_leases.php:417
+#: usr/local/www/status_dhcpv6_leases.php:503
+msgid "IAID"
+msgstr ""
+
+#: usr/local/www/status_dhcpv6_leases.php:419
+msgid "Hostname/MAC"
+msgstr ""
+
+#: usr/local/www/status_dhcpv6_leases.php:502
+msgid "IPv6 Prefix"
+msgstr ""
+
+#: usr/local/www/status_filter_reload.php:45
+msgid "Filter Reload Status"
+msgstr ""
+
+#: usr/local/www/status_filter_reload.php:90
+msgid ""
+"This page will automatically refresh every 3 seconds until the filter is "
+"done reloading"
+msgstr ""
+
+#: usr/local/www/status_gateway_groups.php:102
+#, php-format
+msgid "Tier %s"
+msgstr ""
+
+#: usr/local/www/status_gateway_groups.php:128
+#: usr/local/www/status_gateways.php:126
+msgid "Warning, Packetloss"
+msgstr ""
+
+#: usr/local/www/status_gateway_groups.php:131
+#: usr/local/www/status_gateways.php:129
+msgid "Warning, Latency"
+msgstr ""
+
+#: usr/local/www/status_gateway_groups.php:137
+msgid "Gathering data"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:77
+msgid "RTT"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:78
+msgid "Loss"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:102 usr/local/www/status_gateways.php:110
+#: usr/local/www/status_gateways.php:139
+#: usr/local/www/widgets/widgets/gateways.widget.php:88
+#: usr/local/www/widgets/widgets/gateways.widget.php:97
+msgid "Pending"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:120
+msgid "Offline (forced)"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:145
+msgid "Last check:"
+msgstr ""
+
+#: usr/local/www/status_graph.php:250
+msgid "Host IP"
+msgstr ""
+
+#: usr/local/www/status_graph.php:250
+msgid "Host Name or IP"
+msgstr ""
+
+#: usr/local/www/status_graph.php:251
+msgid "Bandwidth In"
+msgstr ""
+
+#: usr/local/www/status_graph.php:252
+msgid "Bandwidth Out"
+msgstr ""
+
+#: usr/local/www/status_graph.php:338
+msgid "the"
+msgstr ""
+
+#: usr/local/www/status_graph.php:338
+msgid "Adobe SVG Viewer"
+msgstr ""
+
+#: usr/local/www/status_graph.php:338
+msgid ""
+"Firefox 1.5 or later or other browser supporting SVG is required to view the "
+"graph"
+msgstr ""
+
+#: usr/local/www/status_graph_cpu.php:42
+msgid "CPU load"
+msgstr ""
+
+#: usr/local/www/status_graph_cpu.php:47
+msgid "Status: CPU Graph"
+msgstr ""
+
+#: usr/local/www/status_graph_cpu.php:54
+msgid "if you can't see the graph, you may have to install the"
+msgstr ""
+
+#: usr/local/www/status_graph_cpu.php:54
+msgid "Adobe SVG viewer"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:84
+msgid "interface"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:103
+#: usr/local/www/status_interfaces.php:119
+msgid "Release"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:103
+#: usr/local/www/status_interfaces.php:119
+msgid "Renew"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:145
+#: usr/local/www/status_interfaces.php:158
+#: usr/local/www/status_interfaces.php:175
+msgid "Connect"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:183
+msgid "Uptime "
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:190
+msgid "Cell Signal (RSSI)"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:197
+msgid "Cell Mode"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:204
+msgid "Cell SIM State"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:211
+msgid "Cell Service"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:218
+msgid "Cell Upstream"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:225
+msgid "Cell Downstream"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:232
+msgid "Cell Current Up"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:239
+msgid "Cell Current Down"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:268
+msgid "Subnet mask IPv4"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:275
+msgid "Gateway IPv4"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:283
+msgid "IPv6 Link Local"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:299
+msgid "Subnet mask IPv6"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:306
+msgid "Gateway IPv6"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:314
+msgid "ISP DNS servers"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:333
+msgid "Media"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:340
+msgid "LAGG Protocol"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:347
+msgid "LAGG Ports"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:370
+msgid "BSSID"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:384
+msgid "RSSI"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:391
+msgid "In/out packets"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:400
+msgid "In/out packets (pass)"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:409
+msgid "In/out packets (block)"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:419
+msgid "In/out errors"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:427
+msgid "Collisions"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:436
+#, php-format
+msgid "Bridge (%s)"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:458
+msgid "Interrupts/Second"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:461
+msgid "total"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:463
+msgid "rate"
+msgstr ""
+
+#: usr/local/www/status_interfaces.php:474
+#, php-format
+msgid ""
+"Using dial-on-demand will bring the connection up again if any packet "
+"triggers it. To substantiate this point: disconnecting manually will %snot%s "
+"prevent dial-on-demand from making connections to the outside! Don't use "
+"dial-on-demand if you want to make sure that the line is kept disconnected."
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:180
+msgid "Ref ID"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:181
+msgid "Stratum"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:183
+msgid "When"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:184
+msgid "Poll"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:185
+msgid "Reach"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:187
+msgid "Offset"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:188
+msgid "Jitter"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:245
+msgid "Clock Latitude"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:246
+msgid "Clock Longitude"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:247
+msgid "Clock Altitude"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:248
+msgid "Satellites"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:150
+msgid "Client connections"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:227
+#: usr/local/www/system_camanager.php:562
+#: usr/local/www/system_certmanager.php:786
+#: usr/local/www/system_certmanager.php:959
+#: usr/local/www/vpn_openvpn_csc.php:747
+msgid "Common Name"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:228
+msgid "Real Address"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:159
+msgid "Virtual Address"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:160 usr/local/www/status_openvpn.php:278
+#: usr/local/www/status_openvpn.php:341
+msgid "Connected Since"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:161 usr/local/www/status_openvpn.php:281
+#: usr/local/www/status_openvpn.php:344
+msgid "Bytes Sent"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:162
+msgid "Bytes Received"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:189
+msgid "Kill client connection from"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:214
+msgid "Show Routing Table"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:214
+msgid "Display OpenVPN's internal routing table for this server."
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:220
+msgid "Routing Table"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:229
+msgid "Target Network"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:230
+msgid "Last Used"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:252
+msgid ""
+"An IP address followed by C indicates a host currently connected through the "
+"VPN."
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:269
+msgid "Peer to Peer Server Instance Statistics"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:342
+msgid "Virtual Addr"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:280 usr/local/www/status_openvpn.php:343
+msgid "Remote Host"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:282 usr/local/www/status_openvpn.php:345
+msgid "Bytes Rcvd"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:332
+msgid "Client Instance Statistics"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:392
+msgid ""
+"If you have custom options that override the management features of OpenVPN "
+"on a client or server, they will cause that OpenVPN instance to not work "
+"correctly with this status page."
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:396
+msgid "No OpenVPN instances defined"
+msgstr ""
+
+#: usr/local/www/status_queues.php:124
+msgid "Traffic shaper"
+msgstr ""
+
+#: usr/local/www/status_queues.php:132
+msgid "Traffic shaping is not configured."
+msgstr ""
+
+#: usr/local/www/status_queues.php:168
+msgid "Statistics"
+msgstr ""
+
+#: usr/local/www/status_queues.php:176
+msgid "Borrows"
+msgstr ""
+
+#: usr/local/www/status_queues.php:177
+msgid "Suspends"
+msgstr ""
+
+#: usr/local/www/status_queues.php:178
+msgid "Drops"
+msgstr ""
+
+#: usr/local/www/status_queues.php:179
+msgid "Length"
+msgstr ""
+
+#: usr/local/www/status_queues.php:188
+msgid "Queue graphs take 5 seconds to sample data"
+msgstr ""
+
+#: usr/local/www/status_queues.php:189
+msgid "You can configure the Traffic Shaper"
+msgstr ""
+
+#: usr/local/www/status_queues.php:250
+msgid "Loading"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:160
+msgid "Invalid start date/time:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:173
+msgid "Invalid end date/time:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:188
+#: usr/local/www/status_rrd_graph_settings.php:65
+msgid "Inverse"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:189
+#: usr/local/www/status_rrd_graph_settings.php:66
+msgid "Absolute"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:67
+msgid "Absolute Timespans"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:68
+msgid "Current Period"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:69
+msgid "Previous Period"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:418
+#: usr/local/www/status_rrd_graph_settings.php:55
+#: usr/local/www/status_rrd_graph_settings.php:137
+msgid "Traffic"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:420
+#: usr/local/www/status_rrd_graph_settings.php:56
+#: usr/local/www/status_rrd_graph_settings.php:139
+msgid "Packets"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:422
+#: usr/local/www/status_rrd_graph_settings.php:57
+#: usr/local/www/status_rrd_graph_settings.php:141
+msgid "Quality"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:427
+#: usr/local/www/status_rrd_graph_settings.php:146
+msgid "QueueDrops"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:435
+#: usr/local/www/status_rrd_graph_settings.php:154
+msgid "Cellular"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:469
+msgid ""
+"Note: Change of color and/or style may not take effect until the next refresh"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:473
+msgid "Graphs:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:536
+msgid "Style:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:550
+msgid "Period:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:566
+msgid "Enter date and/or time. Current timezone:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:570
+msgid "Start:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:572
+msgid "End:"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph.php:574
+msgid "Go"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_img.php:44
+msgid "Image viewer"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_img.php:268
+#, php-format
+msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_img.php:1228
+#, php-format
+msgid "Sorry we do not have data to graph for %s"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_img.php:1248
+#, php-format
+msgid "Failed to create graph with error code %1$s, the error is: %2$s"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_img.php:1250
+#: usr/local/www/status_rrd_graph_img.php:1257
+#, php-format
+msgid "failed to create graph from %s%s, removing database"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:185
+msgid "Enables the RRD graphing backend."
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:189
+msgid "Default category"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:200
+msgid "This selects default category."
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:204
+msgid "Default style"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:215
+msgid "This selects the default style."
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:219
+msgid "Default period"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:230
+msgid "This selects the default period."
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:242
+msgid "Reset RRD Data"
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:242
+msgid ""
+"Do you really want to reset the RRD graphs? This will erase all graph data."
+msgstr ""
+
+#: usr/local/www/status_rrd_graph_settings.php:248
+msgid ""
+"Graphs will not be allowed to be recreated within a 1 minute interval, "
+"please take this into account after changing the style."
+msgstr ""
+
+#: usr/local/www/status_services.php:120
+#: usr/local/www/widgets/widgets/services_status.widget.php:90
+msgid "No services found"
+msgstr ""
+
+#: usr/local/www/status_upnp.php:49
+msgid "Rules have been cleared and the daemon restarted"
+msgstr ""
+
+#: usr/local/www/status_upnp.php:59
+msgid "UPnP &amp; NAT-PMP Status"
+msgstr ""
+
+#: usr/local/www/status_upnp.php:69
+msgid "UPnP is currently disabled."
+msgstr ""
+
+#: usr/local/www/status_upnp.php:79
+msgid "all currently connected sessions"
+msgstr ""
+
+#: usr/local/www/status_upnp.php:90
+msgid "Int. Port"
+msgstr ""
+
+#: usr/local/www/status_wireless.php:85
+msgid ""
+"Rescan has been initiated in the background. Refresh this page in 10 seconds "
+"to see the results."
+msgstr ""
+
+#: usr/local/www/status_wireless.php:95
+msgid "Nearby access points or ad-hoc peers"
+msgstr ""
+
+#: usr/local/www/status_wireless.php:142
+msgid "Associated or ad-hoc peers"
+msgstr ""
+
+#: usr/local/www/system.php:122
+msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr ""
+
+#: usr/local/www/system.php:158
+#, php-format
+msgid ""
+"You can not assign a gateway to DNS '%s' server which is on a directly "
+"connected network."
+msgstr ""
+
+#: usr/local/www/system.php:167
+msgid ""
+"The time update interval must be either 0 (disabled) or between 6 and 1440."
+msgstr ""
+
+#: usr/local/www/system.php:174
+msgid ""
+"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr ""
+
+#: usr/local/www/system.php:316
+msgid "Name of the firewall host, without domain part"
+msgstr ""
+
+#: usr/local/www/system.php:327
+msgid ""
+"Do not use 'local' as a domain name. It will cause local hosts running mDNS "
+"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."
+msgstr ""
+
+#: usr/local/www/system.php:329
+msgid "mycorp.com, home, office, private, etc."
+msgstr ""
+
+#: usr/local/www/system.php:339
+msgid "DNS Server"
+msgstr ""
+
+#: usr/local/www/system.php:341
+msgid "Use gateway"
+msgstr ""
+
+#: usr/local/www/system.php:388
+msgid ""
+"Enter IP addresses to be used by the system for DNS resolution. These are "
+"also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+msgstr ""
+
+#: usr/local/www/system.php:393
+msgid ""
+"In addition, optionally select the gateway for each DNS server. When using "
+"multiple WAN connections there should be at least one unique DNS server per "
+"gateway."
+msgstr ""
+
+#: usr/local/www/system.php:400
+msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN"
+msgstr ""
+
+#: usr/local/www/system.php:403
+#, php-format
+msgid ""
+"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server "
+"on WAN for its own purposes (including the DNS forwarder). However, they "
+"will not be assigned to DHCP and PPTP VPN clients."
+msgstr ""
+
+#: usr/local/www/system.php:412
+msgid "Do not use the DNS Forwarder or Resolver as a DNS server for the firewall"
+msgstr ""
+
+#: usr/local/www/system.php:415
+msgid ""
+"By default localhost (127.0.0.1) will be used as the first DNS server where "
+"the DNS Forwarder or DNS Resolver is enabled and set to listen on Localhost, "
+"so system can use the local DNS service to perform lookups. Checking this "
+"box omits localhost from the list of DNS servers."
+msgstr ""
+
+#: usr/local/www/system.php:421
+msgid "Time zone"
+msgstr ""
+
+#: usr/local/www/system.php:433
+msgid "Select the location closest to you"
+msgstr ""
+
+#: usr/local/www/system.php:451
+msgid "NTP time server"
+msgstr ""
+
+#: usr/local/www/system.php:456
+msgid ""
+"Use a space to separate multiple hosts (only one required). Remember to set "
+"up at least one DNS server if you enter a host name here!"
+msgstr ""
+
+#: usr/local/www/system.php:463
+msgid "Language"
+msgstr ""
+
+#: usr/local/www/system.php:476
+msgid "Choose a language for the webConfigurator"
+msgstr ""
+
+#: usr/local/www/system.php:485
+msgid "Theme"
+msgstr ""
+
+#: usr/local/www/system.php:509
+msgid "This will change the look and feel of"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:90
+msgid "You must specify a valid webConfigurator port number"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:94
+msgid "Max Processes must be a number 1 or greater"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:100
+#, php-format
+msgid "Alternate hostname %s is not a valid hostname."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:247
+#, php-format
+msgid "One moment...redirecting to %s in 20 seconds."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:275
+msgid "Advanced: Admin Access"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:307
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_misc.php:287
+#: usr/local/www/system_advanced_network.php:188
+#: usr/local/www/system_advanced_notifications.php:184
+#: usr/local/www/system_advanced_sysctl.php:157
+msgid "Admin Access"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:308
+#: usr/local/www/system_advanced_firewall.php:271
+#: usr/local/www/system_advanced_misc.php:288
+#: usr/local/www/system_advanced_network.php:189
+#: usr/local/www/system_advanced_notifications.php:185
+#: usr/local/www/system_advanced_sysctl.php:158
+msgid "Firewall / NAT"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:309
+#: usr/local/www/system_advanced_firewall.php:272
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_network.php:190
+#: usr/local/www/system_advanced_notifications.php:186
+#: usr/local/www/system_advanced_sysctl.php:159
+msgid "Networking"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:310
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/system_advanced_misc.php:290
+#: usr/local/www/system_advanced_network.php:191
+#: usr/local/www/system_advanced_notifications.php:187
+#: usr/local/www/system_advanced_sysctl.php:160
+msgid "Miscellaneous"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:311
+#: usr/local/www/system_advanced_firewall.php:274
+#: usr/local/www/system_advanced_misc.php:291
+#: usr/local/www/system_advanced_network.php:192
+#: usr/local/www/system_advanced_notifications.php:188
+#: usr/local/www/system_advanced_sysctl.php:161
+msgid "System Tunables"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:312
+#: usr/local/www/system_advanced_firewall.php:275
+#: usr/local/www/system_advanced_misc.php:292
+#: usr/local/www/system_advanced_network.php:193
+#: usr/local/www/system_advanced_notifications.php:189
+#: usr/local/www/system_advanced_sysctl.php:162
+msgid "Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:330
+msgid "webConfigurator"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:350
+msgid "No Certificates have been defined. You must"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:351
+msgid "Create or Import"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:352
+msgid "a Certificate before SSL can be enabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:376
+msgid "TCP port"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:381
+msgid ""
+"Enter a custom port number for the webConfigurator above if you want to "
+"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect "
+"immediately after save."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:388
+msgid "Max Processes"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:393
+msgid ""
+"Enter the number of webConfigurator processes you want to run. This defaults "
+"to 2. Increasing this will allow more users/browsers to access the GUI "
+"concurrently."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:400
+msgid "WebGUI redirect"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:403
+msgid "Disable webConfigurator redirect rule"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:405
+msgid ""
+"When this is unchecked, access to the webConfigurator is always permitted "
+"even on port 80, regardless of the listening port configured. Check this box "
+"to disable this automatically added redirect rule. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:412
+msgid "WebGUI Login Autocomplete"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:415
+msgid "Enable webConfigurator login autocomplete"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:417
+msgid ""
+"When this is checked, login credentials for the webConfigurator may be saved "
+"by the browser. While convenient, some security standards require this to be "
+"disabled. Check this box to enable autocomplete on the login form so that "
+"browsers will prompt to save credentials (NOTE: Some browsers do not respect "
+"this option). "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:424
+msgid "WebGUI login messages"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:427
+msgid "Disable logging of webConfigurator successful logins"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:429
+msgid ""
+"When this is checked, successful logins to the webConfigurator will not be "
+"logged."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:435
+msgid "Anti-lockout"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:444
+msgid "Disable webConfigurator anti-lockout rule"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:446
+#, php-format
+msgid ""
+"When this is unchecked, access to the webConfigurator on the %s interface is "
+"always permitted, regardless of the user-defined firewall rule set. Check "
+"this box to disable this automatically added rule, so access to the "
+"webConfigurator is controlled by the user-defined firewall rules (ensure you "
+"have a firewall rule in place that allows you in, or you will lock yourself "
+"out!)"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:452
+msgid ""
+"Hint: the &quot;Set interface(s) IP address&quot; option in the console menu "
+"resets this setting as well."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:456
+msgid "DNS Rebind Check"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:459
+msgid "Disable DNS Rebinding Checks"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:461
+msgid ""
+"When this is unchecked, your system is protected against <a href=\"http://en."
+"wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. This blocks "
+"private IP responses from your configured DNS servers. Check this box to "
+"disable this protection if it interferes with webConfigurator access or name "
+"resolution in your environment. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:468
+msgid "Alternate Hostnames"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:472
+msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:474
+msgid ""
+"Here you can specify alternate hostnames by which the router may be queried, "
+"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:479
+msgid "Browser HTTP_REFERER enforcement"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:482
+msgid "Disable HTTP_REFERER enforcement check"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:484
+msgid ""
+"When this is unchecked, access to the webConfigurator is protected against "
+"HTTP_REFERER redirection attempts. Check this box to disable this protection "
+"if you find that it interferes with webConfigurator access in certain corner "
+"cases such as using external scripts to interact with this system. More "
+"information on HTTP_REFERER is available from <a target='_blank' "
+"href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:491
+msgid "BEAST Attack Protection"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:494
+msgid "Mitigate the BEAST SSL Attack"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:496
+msgid ""
+"When this is checked, the webConfigurator can mitigate BEAST SSL attacks. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:499
+#, php-format
+msgid ""
+"This option has been automatically disabled because a conflicting "
+"cryptographic accelerator card has been detected (%s)."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:501
+msgid ""
+"This option is off by default because Hifn accelerators do NOT work with "
+"this option, and the GUI will not function. It is possible that other "
+"accelerators have a similar problem that is not yet known/documented. More "
+"information on BEAST is available from <a target='_blank' href='https://en."
+"wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack'>Wikipedia</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:507
+msgid "Browser tab text"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:510
+msgid "Display page name first in browser tab"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:512
+msgid ""
+"When this is unchecked, the browser tab shows the host name followed by the "
+"current page. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:514
+msgid "Check this box to display the current page followed by the host name."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:521
+msgid "Secure Shell"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:524
+msgid "Secure Shell Server"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:527
+msgid "Enable Secure Shell"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:531
+msgid "Authentication Method"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:534
+msgid "Disable password login for Secure Shell (RSA/DSA key only)"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:536
+msgid "When enabled, authorized keys need to be configured for each"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:537
+msgid "user"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:538
+msgid "that has been granted secure shell access."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:542
+msgid "SSH port"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:546
+msgid "Note: Leave this blank for the default of 22."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:553
+msgid "Serial Communications"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:557
+msgid "Serial Terminal"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:560
+msgid ""
+"Enables the first serial port with 115200/8/N/1 by default, or another speed "
+"selectable below."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:561
+msgid ""
+"Note: This will redirect the console output and messages to the serial "
+"port. You can still access the console menu from the internal video card/"
+"keyboard. A <b>null modem</b> serial cable or adapter is required to use the "
+"serial console."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:566
+msgid "Serial Speed"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:576
+msgid "Allows selection of different speeds for the serial console port."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:581
+msgid "Primary Console"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:587
+msgid ""
+"Select the preferred console if multiple consoles are present. The preferred "
+"console will show pfSense boot script output. All consoles display OS boot "
+"messages, console messages, and the console menu."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:595
+msgid "Console Options"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:598
+msgid "Console menu"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:601
+msgid "Password protect the console menu"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:603
+msgid "Changes to this option will take effect after a reboot."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:640
+msgid "secure shell configuration has changed. Stopping sshd."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:643
+msgid "secure shell configuration has changed. Restarting sshd."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:82
+msgid "The Firewall Adaptive values must be set together."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:84
+msgid "The Firewall Adaptive Start value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:87
+msgid "The Firewall Adaptive End value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:90
+msgid "The Firewall Maximum States value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:93
+msgid "The Aliases Hostname Resolve Interval value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:96
+msgid "The Firewall Maximum Table Entries value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:99
+msgid "The TCP idle timeout must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:102
+msgid "The Reflection timeout must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:233
+msgid "Advanced: Firewall and NAT"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:245
+msgid "as the name says, it's the normal optimization algorithm"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:246
+msgid ""
+"used for high latency links, such as satellite links. Expires idle "
+"connections later than default"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:247
+msgid ""
+"expires idle connections quicker. More efficient use of CPU and memory but "
+"can drop legitimate idle connections"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:248
+msgid ""
+"tries to avoid dropping any legitimate idle connections at the expense of "
+"increased memory usage and CPU utilization."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:293
+msgid "Firewall Advanced"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:296
+msgid "IP Do-Not-Fragment compatibility"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:299
+msgid "Clear invalid DF bits instead of dropping the packets"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:300
+msgid ""
+"This allows for communications with hosts that generate fragmented packets "
+"with the don't fragment (DF) bit set. Linux NFS is known to do this. This "
+"will cause the filter to not drop such packets but instead clear the don't "
+"fragment bit."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:307
+msgid "IP Random id generation"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:310
+msgid ""
+"Insert a stronger id into IP header of packets passing through the filter."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:311
+msgid ""
+"Replaces the IP identification field of packets with random values to "
+"compensate for operating systems that use predictable values. This option "
+"only applies to packets that are not fragmented after the optional packet "
+"reassembly."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:318
+msgid "Firewall Optimization Options"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:321
+msgid "normal"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:322
+msgid "high-latency"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:323
+msgid "aggressive"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:324
+msgid "conservative"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:334
+msgid "Select the type of state table optimization to use"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:338
+msgid "Disable Firewall"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:341
+msgid "Disable all packet filtering."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:343
+#, php-format
+msgid "Note: This converts %s into a routing only platform!"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:344
+msgid "Note: This will also turn off NAT!"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "If you only want to disable NAT, and not firewall rules, visit the"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "Outbound NAT"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:350
+msgid "Disable Firewall Scrub"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:353
+msgid ""
+"Disables the PF scrubbing option which can sometimes interfere with NFS and "
+"PPTP traffic."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:358
+msgid "Firewall Adaptive Timeouts"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:360
+msgid ""
+"Timeouts for states can be scaled adaptively as the number of state table "
+"entries grows."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:363
+msgid ""
+"When the number of state entries exceeds this value, adaptive scaling "
+"begins. All timeout values are scaled linearly with factor (adaptive.end - "
+"number of states) / (adaptive.end - adaptive.start)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:367
+msgid ""
+"When reaching this number of state entries, all timeout values become zero, "
+"effectively purging all state entries immediately. This value is used to "
+"define the scale factor, it should not actually be reached (set a lower "
+"state limit, see below)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:369
+msgid "Note: Leave this blank for the default(0)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:373
+msgid "Firewall Maximum States"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:377
+msgid "Maximum number of connections to hold in the firewall state table."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:379
+msgid ""
+"Note: Leave this blank for the default. On your system the default size is:"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:383
+msgid "Firewall Maximum Table Entries"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:387
+msgid ""
+"Maximum number of table entries for systems such as aliases, sshlockout, "
+"snort, etc, combined."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:390
+msgid "Note: Leave this blank for the default."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:392
+msgid "On your system the default size is:"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:398
+msgid "Static route filtering"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:401
+msgid "Bypass firewall rules for traffic on the same interface"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:403
+msgid ""
+"This option only applies if you have defined one or more static routes. If "
+"it is enabled, traffic that enters and leaves through the same interface "
+"will not be checked by the firewall. This may be desirable in some "
+"situations where multiple subnets are connected to the same interface."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:413
+msgid "Disable all auto-added VPN rules."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:415
+msgid "Note: This disables automatically added rules for IPsec, PPTP."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:423
+msgid "Disable reply-to on WAN rules"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:425
+msgid ""
+"With Multi-WAN you generally want to ensure traffic leaves the same "
+"interface it arrives on, hence reply-to is added automatically by default. "
+"When using bridging, you must disable this behavior if the WAN gateway IP is "
+"different from the gateway IP of the hosts behind the bridged interface."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:434
+msgid "Disable Negate rule on policy routing rules"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:436
+msgid ""
+"With Multi-WAN you generally want to ensure traffic reaches directly "
+"connected networks and VPN networks when using policy routing. You can "
+"disable this for special purposes but it requires manually creating rules "
+"for these networks"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:441
+msgid "Aliases Hostnames Resolve Interval"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:445
+msgid ""
+"Interval, in seconds, that will be used to resolve hostnames configured on "
+"aliases."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:447
+msgid "Note: Leave this blank for the default (300s)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:451
+msgid "Check certificate of aliases URLs"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:454
+msgid "Verify HTTPS certificates when downloading alias URLs"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:456
+msgid ""
+"Make sure the certificate is valid for all HTTPS addresses on aliases. If "
+"it's not valid or is revoked, do not download it."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:464
+msgid "Bogon Networks"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:467
+msgid "Update Frequency"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:470
+msgid "Monthly"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:471
+msgid "Weekly"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:472
+msgid "Daily"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:475
+msgid ""
+"The frequency of updating the lists of IP addresses that are reserved (but "
+"not RFC 1918) or not yet assigned by IANA."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:483
+msgid "Network Address Translation"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:486
+msgid "NAT Reflection mode for port forwards"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:494
+msgid ""
+"When enabled, this automatically creates additional NAT redirect rules for "
+"access to port forwards on your external IP addresses from within your "
+"internal networks."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:496
+msgid ""
+"The NAT + proxy mode uses a helper program to send packets to the target of "
+"the port forward. It is useful in setups where the interface and/or gateway "
+"IP used for communication with the target cannot be accurately determined at "
+"the time the rules are loaded. Reflection rules are not created for ranges "
+"larger than 500 ports and will not be used for more than 1000 ports total "
+"between all port forwards. Only TCP and UDP protocols are supported."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:498
+msgid ""
+"The pure NAT mode uses a set of NAT rules to direct packets to the target of "
+"the port forward. It has better scalability, but it must be possible to "
+"accurately determine the interface and gateway IP used for communication "
+"with the target at the time the rules are loaded. There are no inherent "
+"limits to the number of ports other than the limits of the protocols. All "
+"protocols available for port forwards are supported."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:500
+#: usr/local/www/system_advanced_firewall.php:520
+msgid ""
+"Individual rules may be configured to override this system setting on a per-"
+"rule basis."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:504
+msgid "Reflection Timeout"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:507
+msgid "Enter value for Reflection timeout in seconds."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:509
+msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:513
+msgid "Enable NAT Reflection for 1:1 NAT"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:516
+msgid ""
+"Enables the automatic creation of additional NAT redirect rules for access "
+"to 1:1 mappings of your external IP addresses from within your internal "
+"networks."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:518
+msgid ""
+"Note: Reflection on 1:1 mappings is only for the inbound component of the "
+"1:1 mappings. This functions the same as the pure NAT mode for port "
+"forwards. For more details, refer to the pure NAT mode description above."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:524
+msgid "Enable automatic outbound NAT for Reflection"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:527
+msgid ""
+"Automatically create outbound NAT rules which assist inbound NAT rules that "
+"direct traffic back out to the same subnet it originated from."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:529
+msgid ""
+"Required for full functionality of the pure NAT mode of NAT Reflection for "
+"port forwards or NAT Reflection for 1:1 NAT."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:531
+msgid ""
+"Note: This only works for assigned interfaces. Other interfaces require "
+"manually creating the outbound NAT rules that direct the reply packets back "
+"through the router."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:535
+msgid "TFTP Proxy"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:550
+msgid "Choose the interfaces where you want TFTP proxy helper to be enabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:85
+msgid "AMD Geode LX Security Block"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:86
+msgid "AES-NI CPU-based Acceleration"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:88
+msgid "Intel Core* CPU on-die thermal sensor"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:89
+msgid "AMD K8, K10 and K11 CPU on-die thermal sensor"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:100
+msgid "Please select a valid Cryptographic Accelerator."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:103
+msgid "Please select a valid Thermal Hardware Sensor."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:106
+msgid "/tmp Size must be numeric and should not be less than 40MB."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:109
+msgid "/var Size must be numeric and should not be less than 60MB."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:245
+msgid "Advanced: Miscellaneous"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:310
+msgid "Proxy support"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:313
+msgid "Proxy URL"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:317
+#, php-format
+msgid ""
+"Hostname or IP address of proxy server this system will use for its outbound "
+"Internet access."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:321
+msgid "Proxy Port"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:325
+#, php-format
+msgid "Port where proxy server is listening."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:329
+msgid "Proxy Username"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:333
+#, php-format
+msgid ""
+"Username for authentication to proxy server. Optional, leave blank to not "
+"use authentication."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:337
+msgid "Proxy Password"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:341
+#, php-format
+msgid "Password for authentication to proxy server."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:345
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:369
+msgid "Load Balancing"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:351
+msgid "Use sticky connections"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:352
+msgid ""
+"Successive connections will be redirected to the servers in a round-robin "
+"manner with connections from the same source being sent to the same web "
+"server. This 'sticky connection' will exist as long as there are states that "
+"refer to this connection. Once the states expire, so will the sticky "
+"connection. Further connections from that host will be redirected to the "
+"next web server in the round robin. Changing this option will restart the "
+"Load Balancing service."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:363
+msgid ""
+"Set the source tracking timeout for sticky connections. By default this is "
+"0, so source tracking is removed as soon as the state expires. Setting this "
+"timeout higher will cause the source/destination relationship to persist for "
+"longer periods of time."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:372
+msgid "Enable default gateway switching"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:373
+msgid ""
+"If the default gateway goes down, switch the default gateway to another "
+"available one. This is not enabled by default, as it's unnecessary in most "
+"all scenarios, which instead use gateway groups."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:381
+msgid "Power savings"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:384
+msgid "PowerD"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:387
+msgid "Use PowerD"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:389
+msgid "On AC Power Mode"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:391
+#: usr/local/www/system_advanced_misc.php:399
+#: usr/local/www/system_advanced_misc.php:407
+msgid "Hiadaptive"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:408
+msgid "Adaptive"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:393
+#: usr/local/www/system_advanced_misc.php:401
+#: usr/local/www/system_advanced_misc.php:409
+msgid "Minimum"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:394
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:410
+msgid "Maximum"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:397
+msgid "On Battery Power Mode"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:405
+msgid "On Unknown Power Mode"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:413
+msgid ""
+"The powerd utility monitors the system state and sets various power control "
+"options accordingly. It offers four modes (maximum, minimum, adaptive and "
+"hiadaptive) that can be individually selected while on AC power or "
+"batteries. The modes maximum, minimum, adaptive and hiadaptive may be "
+"abbreviated max, min, adp, hadp. Maximum mode chooses the highest "
+"performance values. Minimum mode selects the lowest performance values to "
+"get the most power savings. Adaptive mode attempts to strike a balance by "
+"degrading performance when the system appears idle and increasing it when "
+"the system is busy. It offers a good balance between a small performance "
+"loss for greatly increased power savings. Hiadaptive mode is alike adaptive "
+"mode, but tuned for systems where performance and interactivity are more "
+"important than power consumption. It raises frequency faster, drops slower "
+"and keeps twice lower CPU load."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:432
+msgid "Cryptographic Hardware Acceleration"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:435
+msgid "Cryptographic Hardware"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:444
+msgid ""
+"A cryptographic accelerator module will use hardware support to speed up "
+"some cryptographic functions on systems which have the chip. Do not enable "
+"this option if you have a Hifn cryptographic acceleration card, as this will "
+"take precedence and the Hifn card will not be used. Acceleration should be "
+"automatic for IPsec when using a cipher supported by your chip, such as "
+"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled "
+"for hardware acceleration."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:452
+msgid ""
+"If you do not have a crypto chip in your system, this option will have no "
+"effect. To unload the selected module, set this option to 'none' and then "
+"reboot."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:460
+#: usr/local/www/system_advanced_misc.php:463
+msgid "Thermal Sensors"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:466
+msgid "None/ACPI"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:472
+msgid ""
+"If you have a supported CPU, selecting a themal sensor will load the "
+"appropriate driver to read its temperature. Setting this to 'None' will "
+"attempt to read the temperature from an ACPI-compliant motherboard sensor "
+"instead, if one is present."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:476
+msgid ""
+"If you do not have a supported thermal sensor chip in your system, this "
+"option will have no effect. To unload the selected module, set this option "
+"to 'none' and then reboot."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:484
+msgid "IP Security"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:489
+msgid ""
+"These settings have moved to <a href=\"vpn_ipsec_settings.php\">VPN &gt; "
+"IPsec on the Advanced Settings tab</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:499
+msgid "Schedule States"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:503
+msgid ""
+"By default, when a schedule expires, connections permitted by that schedule "
+"are killed. This option overrides that behavior by not clearing states for "
+"existing connections."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:511
+msgid "Gateway Monitoring"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:514
+msgid "State Killing on Gateway Failure"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:518
+msgid ""
+"The monitoring process will flush states for a gateway that goes down if "
+"this box is not checked. Check this box to disable this behavior."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:522
+msgid "Skip rules when gateway is down"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:526
+msgid ""
+"By default, when a rule has a gateway specified and this gateway is down, "
+"the rule is created omitting the gateway. This option overrides that "
+"behavior by omitting the entire rule instead."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:532
+msgid "Enable gateway monitoring debug logging"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:536
+msgid ""
+"Enable this setting to log debug information from the gateway monitoring "
+"process to the system logs."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:540
+msgid "RAM Disk Settings (Reboot to Apply Changes)"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:544
+msgid "Use RAM Disks"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:547
+msgid "Use memory file system for /tmp and /var"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:548
+msgid ""
+"Set this if you wish to use /tmp and /var as RAM disks (memory file system "
+"disks) on a full install rather than use the hard disk. Setting this will "
+"cause the data in /tmp and /var to be lost at reboot, including log data. "
+"RRD and DHCP Leases will be retained."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:554
+msgid "/tmp RAM Disk Size"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:558
+msgid ""
+"Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set "
+"lower than 40."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:563
+msgid "/var RAM Disk Size"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:567
+msgid ""
+"Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set "
+"lower than 60."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:572
+msgid "Periodic RRD Backup"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:574
+#: usr/local/www/system_advanced_misc.php:590
+msgid "Frequency:"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:578
+#: usr/local/www/system_advanced_misc.php:594
+msgid "hour"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:582
+msgid ""
+"This will periodically backup the RRD data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:588
+msgid "Periodic DHCP Leases Backup"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:598
+msgid ""
+"This will periodically backup the DHCP leases data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:608
+msgid "Hardware Settings"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:611
+msgid "Hard disk standby time "
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:618
+msgid "Always on"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:627
+msgid ""
+"Puts the hard disk into standby mode when the selected amount of time after "
+"the last access has elapsed."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:628
+msgid "Do not set this for CF cards."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:637
+msgid "Package settings"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:640
+msgid "Package signature"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:643
+msgid "Do NOT check package signature"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:644
+msgid ""
+"Enable this option to allow pfSense to install any package without checking "
+"its signature."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:68
+msgid "You must specify an IP address to NAT IPv6 packets."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:154
+msgid "Advanced: Networking"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:211
+msgid "IPv6 Options"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:214
+#: usr/local/www/system_advanced_network.php:217
+msgid "Allow IPv6"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:218
+msgid ""
+"All IPv6 traffic will be blocked by the firewall unless this box is checked."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:219
+msgid ""
+"NOTE: This does not disable any IPv6 features on the firewall, it only "
+"blocks traffic."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:224
+msgid "IPv6 over IPv4 Tunneling"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:227
+msgid "Enable IPv4 NAT encapsulation of IPv6 packets"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:228
+msgid ""
+"This provides an RFC 2893 compatibility mechanism that can be used to "
+"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't "
+"forget to add a firewall rule to permit IPv6 packets."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:238
+msgid "Prefer IPv4 over IPv6"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:241
+msgid "Prefer to use IPv4 even if IPv6 is available"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:242
+msgid ""
+"By default, if a hostname resolves IPv6 and IPv4 addresses IPv6 will be "
+"used, if you check this option, IPv4 will be used instead of IPv6."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:254
+msgid "Device polling"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:257
+msgid "Enable device polling"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:258
+#, php-format
+msgid ""
+"Device polling is a technique that lets the system periodically poll network "
+"devices for new data instead of relying on interrupts. This prevents your "
+"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods "
+"when under extreme load. Generally this is not recommended. Not all NICs "
+"support polling; see the %s homepage for a list of supported cards."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:262
+msgid "Hardware Checksum Offloading"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:265
+msgid "Disable hardware checksum offload"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:266
+msgid ""
+"Checking this option will disable hardware checksum offloading. Checksum "
+"offloading is broken in some hardware, particularly some Realtek cards. "
+"Rarely, drivers may have problems with checksum offloading and some specific "
+"NICs."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:269
+#: usr/local/www/system_advanced_network.php:280
+#: usr/local/www/system_advanced_network.php:291
+msgid ""
+"This will take effect after you reboot the machine or re-configure each "
+"interface."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:273
+msgid "Hardware TCP Segmentation Offloading"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:276
+msgid "Disable hardware TCP segmentation offload"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:277
+msgid ""
+"Checking this option will disable hardware TCP segmentation offloading (TSO, "
+"TSO4, TSO6). This offloading is broken in some hardware drivers, and may "
+"impact performance with some specific NICs."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:284
+msgid "Hardware Large Receive Offloading"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:287
+msgid "Disable hardware large receive offload"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:288
+msgid ""
+"Checking this option will disable hardware large receive offloading (LRO). "
+"This offloading is broken in some hardware drivers, and may impact "
+"performance with some specific NICs."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:295
+msgid "ARP Handling"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:298
+msgid "Suppress ARP messages"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:299
+msgid ""
+"This option will suppress ARP log messages when multiple interfaces reside "
+"on the same broadcast domain"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:147
+#: usr/local/www/system_advanced_notifications.php:243
+msgid "Test Growl"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:153
+#: usr/local/www/system_advanced_notifications.php:160
+#, php-format
+msgid "This is a test message from %s. It is safe to ignore this message."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:156
+#: usr/local/www/system_advanced_notifications.php:315
+msgid "Test SMTP"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:164
+msgid "Advanced: Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:201
+msgid "Growl"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:204
+msgid "Disable Growl Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:207
+msgid ""
+"Check this option to disable growl notifications but preserve the settings "
+"below."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:211
+msgid "Registration Name"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:214
+msgid "Enter the name to register with the Growl server (default: PHP-Growl)."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:218
+msgid "Notification Name"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:221
+#, php-format
+msgid "Enter a name for the Growl notifications (default: %s growl alert)."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:228
+msgid ""
+"This is the IP address that you would like to send growl notifications to."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:235
+msgid "Enter the password of the remote growl notification device."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:244
+msgid ""
+"NOTE: A test notification will be sent even if the service is marked as "
+"disabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:252
+msgid "SMTP E-Mail"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:255
+msgid "Disable SMTP Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:258
+msgid ""
+"Check this option to disable SMTP notifications but preserve the settings "
+"below. Some other mechanisms, such as packages, may need these settings in "
+"place to function."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:262
+msgid "E-Mail server"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:265
+msgid ""
+"This is the FQDN or IP address of the SMTP E-Mail server to which "
+"notifications will be sent."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:269
+msgid "SMTP Port of E-Mail server"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:272
+msgid ""
+"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) "
+"or 465 (smtps)"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:276
+msgid "Secure SMTP Connection"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:283
+msgid "From e-mail address"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:286
+msgid "This is the e-mail address that will appear in the from field."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:290
+msgid "Notification E-Mail address"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:293
+msgid ""
+"Enter the e-mail address that you would like email notifications sent to."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:297
+msgid "Notification E-Mail auth username (optional)"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:300
+msgid "Enter the e-mail address username for SMTP authentication."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:304
+msgid "Notification E-Mail auth password"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:307
+msgid "Enter the e-mail address password for SMTP authentication."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:316
+msgid ""
+"NOTE: A test message will be sent even if the service is marked as disabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:324
+msgid "System Sounds"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:327
+msgid "Startup/Shutdown Sound"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:330
+msgid "Disable the startup/shutdown beep"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:332
+msgid "When this is checked, startup and shutdown sounds will no longer play."
+msgstr ""
+
+#: usr/local/www/system_advanced_sysctl.php:135
+msgid "Advanced: System Tunables"
+msgstr ""
+
+#: usr/local/www/system_advanced_sysctl.php:149
+msgid ""
+"The firewall tunables have changed. You must apply the configuration to "
+"take affect."
+msgstr ""
+
+#: usr/local/www/system_advanced_sysctl.php:181
+msgid "Tunable Name"
+msgstr ""
+
+#: usr/local/www/system_advanced_sysctl.php:246
+msgid "Edit system tunable"
+msgstr ""
+
+#: usr/local/www/system_advanced_sysctl.php:249
+msgid "Tunable"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:45
+msgid "Authentication Servers"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:86
+msgid "deleted"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:189
+#: usr/local/www/system_authservers.php:465
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_camanager.php:379
+#: usr/local/www/system_certmanager.php:206
+#: usr/local/www/system_certmanager.php:218
+#: usr/local/www/system_certmanager.php:236
+#: usr/local/www/system_certmanager.php:420
+#: usr/local/www/system_certmanager.php:621
+#: usr/local/www/system_certmanager.php:1030
+#: usr/local/www/system_crlmanager.php:195
+#: usr/local/www/system_crlmanager.php:202
+#: usr/local/www/system_crlmanager.php:327
+#: usr/local/www/system_crlmanager.php:417
+#: usr/local/www/system_usermanager.php:217
+#: usr/local/www/system_usermanager.php:795
+msgid "Descriptive name"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:512
+msgid "Port value"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:518
+msgid "Transport"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:554
+msgid "Protocol version"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:172
+msgid "Search level"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:173
+msgid "User naming Attribute"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:174
+msgid "Group naming Attribute"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:175
+#: usr/local/www/system_authservers.php:693
+msgid "Group member attribute"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:176
+msgid "Authentication container"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:181
+msgid "Bind user DN"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:182
+msgid "Bind Password"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:197
+#: usr/local/www/system_authservers.php:765
+msgid "Authentication port value"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:203
+#: usr/local/www/system_authservers.php:771
+msgid "Accounting port value"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:208
+#: usr/local/www/system_authservers.php:744
+msgid "Shared Secret"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:215
+msgid "The host name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:218
+msgid "An authentication server with the same name already exists."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:221
+msgid "RADIUS Timeout value must be numeric and positive."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:405
+msgid "Please fill the required values."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:411
+msgid "Please fill the bind username/password."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:433
+#: usr/local/www/system_usermanager_settings.php:103
+msgid "Popup blocker detected. Action aborted."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:448
+#: usr/local/www/system_groupmanager.php:288
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/system_usermanager.php:494
+#: usr/local/www/system_usermanager_addprivs.php:157
+#: usr/local/www/system_usermanager_settings.php:114
+#: usr/local/www/vpn_l2tp.php:286 usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users.php:95 usr/local/www/vpn_pptp.php:307
+#: usr/local/www/vpn_pptp_users.php:72 usr/local/www/vpn_pptp_users.php:92
+msgid "Users"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:502
+msgid "LDAP Server Settings"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:505
+#: usr/local/www/system_authservers.php:738
+msgid "Hostname or IP address"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:508
+msgid ""
+"NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the "
+"LDAP server's SSL Certificate."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:533
+#: usr/local/www/vpn_openvpn_client.php:751
+#: usr/local/www/vpn_openvpn_server.php:948
+msgid "Peer Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:546
+msgid "This option is used if 'SSL Encrypted' option is choosen."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:547
+msgid "It must match with the CA in the AD otherwise problems will arise."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:569
+msgid "Search scope"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:573
+msgid "Level:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:588
+msgid "Base DN:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:598
+msgid "Authentication containers"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:602
+msgid "Containers:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:606
+msgid ""
+"Note: Semi-Colon separated. This will be prepended to the search base dn "
+"above or you can specify full container path containing a dc= component."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:607
+#: usr/local/www/system_authservers.php:608
+#: usr/local/www/system_authservers.php:625
+msgid "Example:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:615
+msgid "Extended Query"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:632
+msgid "Bind credentials"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:640
+msgid "Use anonymous binds to resolve distinguished names"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:649
+msgid "User DN:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:665
+msgid "Initial Template"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:681
+msgid "User naming attribute"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:687
+msgid "Group naming attribute"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:699
+msgid "UTF8 Encode"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:707
+msgid ""
+"UTF8 encode LDAP parameters before sending them to the server. Required to "
+"support international characters, but may not be supported by every LDAP "
+"server."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:714
+msgid "Username Alterations"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:722
+msgid ""
+"Do not strip away parts of the username after the @ symbol, e.g. user@host "
+"becomes user when unchecked."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:735
+msgid "Radius Server Settings"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:750
+msgid "Services offered"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:777
+msgid "Authentication Timeout"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:780
+msgid ""
+"This value controls how long, in seconds, that the RADIUS server may take to "
+"respond to an authentication request."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:781
+msgid "If left blank, the default value is 5 seconds."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:782
+msgid ""
+"NOTE: If you are using an interactive two-factor authentication system, "
+"increase this timeout to account for how long it will take the user to "
+"receive and enter a token."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:805
+msgid "Server Name"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:816
+#: usr/local/www/vpn_openvpn_server.php:1842
+msgid "add server"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:823
+msgid "Additional authentication servers can be added here."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:843
+#: usr/local/www/vpn_openvpn_server.php:1871
+msgid "edit server"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:846
+msgid "Do you really want to delete this Server?"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:847
+#: usr/local/www/vpn_openvpn_server.php:1875
+msgid "delete server"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:45
+msgid "Import an existing Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:46
+msgid "Create an internal Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:47
+msgid "Create an intermediate Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:52
+msgid "Certificate Authority Manager"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:98
+#, php-format
+msgid "Certificate Authority %s and its CRLs (if any) successfully deleted"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:171
+#: usr/local/www/system_camanager.php:412
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:637
+msgid "Certificate data"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:173
+#: usr/local/www/system_certmanager.php:210
+msgid "This certificate does not appear to be valid."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:175
+msgid "Encrypted private keys are not yet supported."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_camanager.php:464
+#: usr/local/www/system_certmanager.php:220
+#: usr/local/www/system_certmanager.php:237
+#: usr/local/www/system_certmanager.php:692
+#: usr/local/www/system_certmanager.php:866
+#: usr/local/www/system_usermanager.php:219
+#: usr/local/www/system_usermanager.php:821
+msgid "Key length"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_camanager.php:496
+#: usr/local/www/system_certmanager.php:222
+#: usr/local/www/system_certmanager.php:741
+#: usr/local/www/system_crlmanager.php:380
+#: usr/local/www/system_usermanager.php:220
+#: usr/local/www/system_usermanager.php:839
+#: usr/local/www/vpn_ipsec_phase1.php:852
+#: usr/local/www/vpn_ipsec_phase2.php:807
+msgid "Lifetime"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:223
+#: usr/local/www/system_certmanager.php:238
+msgid "Distinguished name Country Code"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:186
+#: usr/local/www/system_camanager.php:202
+#: usr/local/www/system_certmanager.php:224
+#: usr/local/www/system_certmanager.php:239
+msgid "Distinguished name State or Province"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:187
+#: usr/local/www/system_camanager.php:203
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_certmanager.php:240
+msgid "Distinguished name City"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:188
+#: usr/local/www/system_camanager.php:204
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_certmanager.php:241
+msgid "Distinguished name Organization"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:189
+#: usr/local/www/system_camanager.php:205
+#: usr/local/www/system_certmanager.php:227
+#: usr/local/www/system_certmanager.php:242
+msgid "Distinguished name Email Address"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:190
+#: usr/local/www/system_camanager.php:206
+#: usr/local/www/system_certmanager.php:228
+#: usr/local/www/system_certmanager.php:243
+msgid "Distinguished name Common Name"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_camanager.php:447
+msgid "Signing Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:223
+#: usr/local/www/system_certmanager.php:311
+#: usr/local/www/system_certmanager.php:316
+msgid "Please select a valid Key Length."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:225
+#: usr/local/www/system_certmanager.php:313
+#: usr/local/www/system_certmanager.php:318
+msgid "Please select a valid Digest Algorithm."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:358
+#: usr/local/www/system_certmanager.php:584
+#: usr/local/www/system_crlmanager.php:287
+msgid "CAs"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:359
+#: usr/local/www/system_camanager.php:596
+#: usr/local/www/system_certmanager.php:585
+#: usr/local/www/system_crlmanager.php:288
+#: usr/local/www/system_crlmanager.php:543
+msgid "Certificates"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:360
+#: usr/local/www/system_certmanager.php:586
+#: usr/local/www/system_crlmanager.php:289
+msgid "Certificate Revocation"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:386
+#: usr/local/www/system_certmanager.php:601
+#: usr/local/www/system_crlmanager.php:304
+msgid "Method"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:408
+msgid "Existing Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:416
+#: usr/local/www/system_certmanager.php:641
+msgid "Paste a certificate in X.509 PEM format here."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:420
+msgid "Certificate Private Key"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:420
+msgid "(optional)"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:424
+msgid ""
+"Paste the private key for the above certificate here. This is optional in "
+"most cases, but required if you need to generate a Certificate Revocation "
+"List (CRL)."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:430
+msgid "Serial for next certificate"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:433
+msgid ""
+"Enter a decimal number to be used as the serial number for the next "
+"certificate to be created using this CA."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:444
+msgid "Internal Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:476
+#: usr/local/www/system_certmanager.php:704 usr/local/www/vpn_ipsec.php:363
+#: usr/local/www/vpn_ipsec.php:517 usr/local/www/vpn_ipsec_phase2.php:757
+#: usr/local/www/vpn_openvpn_server.php:1034
+msgid "bits"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:480
+#: usr/local/www/system_certmanager.php:708
+#: usr/local/www/system_certmanager.php:884
+msgid "Digest Algorithm"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:492
+#: usr/local/www/system_certmanager.php:720
+#: usr/local/www/system_certmanager.php:896
+msgid ""
+"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:499
+#: usr/local/www/system_certmanager.php:744
+#: usr/local/www/system_crlmanager.php:383
+msgid "days"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:507
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:904
+msgid "Country Code"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:522
+#: usr/local/www/system_certmanager.php:758
+#: usr/local/www/system_certmanager.php:919
+msgid "State or Province"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:526
+#: usr/local/www/system_camanager.php:536
+#: usr/local/www/system_camanager.php:546
+#: usr/local/www/system_camanager.php:556
+#: usr/local/www/system_camanager.php:566
+msgid "ex:"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:528
+#: usr/local/www/system_certmanager.php:925
+msgid "Texas"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:532
+#: usr/local/www/system_certmanager.php:764
+#: usr/local/www/system_certmanager.php:929
+msgid "City"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:538
+#: usr/local/www/system_certmanager.php:935
+msgid "Austin"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:542
+#: usr/local/www/system_certmanager.php:770
+#: usr/local/www/system_certmanager.php:939
+msgid "Organization"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:548
+#: usr/local/www/system_certmanager.php:945
+msgid "My Company Inc."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:558
+msgid "admin@mycompany.com"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:568
+msgid "internal-ca"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:594
+#: usr/local/www/system_crlmanager.php:542
+msgid "Internal"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:595
+#: usr/local/www/system_certmanager.php:1084
+msgid "Issuer"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:597
+#: usr/local/www/system_certmanager.php:1085
+msgid "Distinguished Name"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:608
+#: usr/local/www/system_certmanager.php:1100
+msgid "self-signed"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:610
+#: usr/local/www/system_certmanager.php:1102
+msgid "external"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:656
+#: usr/local/www/system_certmanager.php:1148
+msgid "Valid From"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:661
+#: usr/local/www/system_certmanager.php:1153
+msgid "Valid Until"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:668
+msgid "edit CA"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:671
+msgid "export CA cert"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:675
+msgid "export CA private key"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:678
+msgid ""
+"Do you really want to delete this Certificate Authority and its CRLs, and "
+"unreference any associated certificates?"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:679
+msgid "delete ca"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:691
+msgid "add or import ca"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:691
+msgid "add ca"
+msgstr ""
+
+#: usr/local/www/system_camanager.php:698
+msgid "Additional trusted Certificate Authorities can be added here."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:45
+msgid "Import an existing Certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:46
+msgid "Create an internal Certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:47
+msgid "Create a Certificate Signing Request"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:58
+msgid "Certificate Manager"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:66
+msgid "Choose an existing certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:106
+#, php-format
+msgid "Certificate %s successfully deleted"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:208
+msgid "Key data"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:219
+#: usr/local/www/system_certmanager.php:675
+#: usr/local/www/system_usermanager.php:218
+#: usr/local/www/system_usermanager.php:801
+msgid "Certificate authority"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:221
+#: usr/local/www/system_certmanager.php:724
+msgid "Certificate Type"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:248
+msgid "Existing Certificate Choice"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:421
+msgid "Final Certificate data"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:441
+#, php-format
+msgid "The certificate modulus does not match the signing request modulus."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:633
+msgid "Import Certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:645
+msgid "Private key data"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:649
+msgid "Paste a private key in X.509 PEM format here."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:659
+msgid "Internal Certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:666
+msgid "No internal Certificate Authorities have been defined. You must"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:668
+msgid "an internal CA before creating an internal certificate."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:737
+msgid ""
+"Type of certificate to generate. Used for placing restrictions on the usage "
+"of the generated certificate."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/system_certmanager.php:955
+msgid "webadmin@mycompany.com"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:796
+#: usr/local/www/system_certmanager.php:965
+msgid "www.example.com"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:800
+msgid "Alternative Names"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:863
+msgid "External Signing Request"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:978
+msgid "Choose an Existing Certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:981
+msgid "Existing Certificates"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1039
+msgid "Complete Signing Request"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1043
+msgid "Signing request data"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1047
+msgid ""
+"Copy the certificate signing data from here and forward it to your "
+"certificate authority for signing."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1051
+msgid "Final certificate data"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1055
+msgid "Paste the certificate received from your certificate authority here."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1086
+#: usr/local/www/system_crlmanager.php:544
+msgid "In Use"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1108
+msgid "external - signature pending"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1183
+#: usr/local/www/system_usermanager.php:742
+msgid "export cert"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1183
+#: usr/local/www/system_certmanager.php:1186
+msgid "export ca"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1186
+msgid "export key"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1189
+msgid "export ca cert+user cert+user cert key in .p12 format"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1192
+msgid "Do you really want to delete this Certificate?"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1193
+#: usr/local/www/system_usermanager.php:749
+msgid "delete cert"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1199
+msgid "update csr"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1212
+msgid "add or import certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1212
+msgid "add certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1218
+msgid "Note: You can only delete a certificate if it is not currently in use."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:47
+msgid "Certificate Revocation List Manager"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:50
+msgid "Create an internal Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:51
+msgid "Import an existing Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:88
+msgid "Invalid CRL reference."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:94
+#, php-format
+msgid "Certificate Revocation List %s is in use and cannot be deleted"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:100
+#, php-format
+msgid "Certificate Revocation List %s successfully deleted"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:139
+msgid "Both the Certificate and CRL must be specified."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:143
+msgid "CA mismatch between the Certificate and CRL. Unable to Revoke."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:146
+msgid "Cannot revoke certificates for an imported/external CRL."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:178
+#: usr/local/www/system_crlmanager.php:180
+#, php-format
+msgid "Deleted Certificate %s from CRL %s"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:182
+#, php-format
+msgid "Failed to delete Certificate %s from CRL %s"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:196
+msgid "Certificate Revocation List data"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:203
+#: usr/local/www/system_crlmanager.php:333
+#: usr/local/www/vpn_ipsec_phase1.php:181
+#: usr/local/www/vpn_openvpn_client.php:258
+#: usr/local/www/vpn_openvpn_server.php:333
+msgid "Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:359
+msgid "Existing Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:363
+#: usr/local/www/system_crlmanager.php:423
+msgid "CRL data"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:367
+#: usr/local/www/system_crlmanager.php:427
+msgid "Paste a Certificate Revocation List in X.509 CRL format here."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:377
+msgid "Internal Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:384
+msgid "Default: 9999"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:388
+msgid "Serial"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:392
+msgid "Default: 0"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:414
+msgid "Edit Imported Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:447
+msgid "Currently Revoked Certificates for CRL"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:451
+msgid "Certificate Name"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:452
+msgid "Revocation Reason"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:453
+msgid "Revoked At"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:462
+msgid "No Certificates Found for this CRL."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:481
+msgid "Do you really want to delete this Certificate from the CRL?"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:482
+msgid "Delete this certificate from the CRL "
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:499
+msgid "No Certificates Found for this CA."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:506
+msgid "Choose a Certificate to Revoke"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:515
+msgid "Reason"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:552
+msgid "Additional Certificate Revocation Lists can be added here."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:589
+#, php-format
+msgid "Add or Import CRL for %s"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:589
+#: usr/local/www/system_crlmanager.php:593
+msgid "add crl"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:593
+#, php-format
+msgid "Import CRL for %s"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:613
+msgid "Export CRL"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:617
+#: usr/local/www/system_crlmanager.php:621
+msgid "Edit CRL"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:625
+msgid "Do you really want to delete this Certificate Revocation List?"
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:626
+msgid "Delete CRL"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:83
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:85
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:87
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:89
+msgid "No file was uploaded"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:91
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:93
+msgid "Failed to write file to disk"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:95
+msgid "File upload stopped by extension"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:97
+msgid "Unknown upload error"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:103 usr/local/www/system_firmware.php:240
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware_check.php:65
+#: usr/local/www/system_firmware_restorefullbackup.php:126
+#: usr/local/www/system_firmware_settings.php:125
+msgid "Manual Update"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:108
+msgid ""
+"An upgrade is currently in progress.<p>The firewall will reboot when the "
+"operation is complete."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:129
+msgid "Upgrade"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:148
+msgid "The uploaded image file is not for this platform."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:151
+msgid "Image upload failed (out of memory?)"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:162
+#: usr/local/www/system_firmware_auto.php:209
+msgid "The digital signature on this image is invalid."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:164
+#: usr/local/www/system_firmware_auto.php:212
+msgid "This image is not digitally signed."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:166
+#: usr/local/www/system_firmware_auto.php:216
+msgid "There has been an error verifying the signature on this image."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:169
+#: usr/local/www/system_firmware_auto.php:231
+msgid "The image file is corrupt."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:182
+msgid ""
+"The firmware is now being updated. The firewall will reboot automatically."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:196
+#, php-format
+msgid "Firmware image missing or other error, please try again %s."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:222
+msgid ""
+"This means that the image you uploaded is not an official/supported image "
+"and may lead to unexpected behavior or security compromises. Only install "
+"images that come from sources that you trust, and make sure that the image "
+"has not been tampered with."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:226
+msgid "Do you want to install this image anyway (on your own risk)?"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:241
+#: usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_auto.php:82
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_restorefullbackup.php:127
+#: usr/local/www/system_firmware_settings.php:126
+msgid "Auto Update"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:242
+#: usr/local/www/system_firmware_auto.php:83
+#: usr/local/www/system_firmware_check.php:67
+#: usr/local/www/system_firmware_restorefullbackup.php:128
+#: usr/local/www/system_firmware_settings.php:127
+msgid "Updater Settings"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:244
+#: usr/local/www/system_firmware_auto.php:85
+#: usr/local/www/system_firmware_check.php:69
+#: usr/local/www/system_firmware_restorefullbackup.php:130
+#: usr/local/www/system_firmware_settings.php:129
+msgid "Restore Full Backup"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:254
+msgid "Invoke"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:254
+msgid "Manual Upgrade"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:261
+msgid "Enable firmware upload"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:263
+#, php-format
+msgid "Click \"Enable firmware upload\" to begin."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:266
+msgid "Disable firmware upload"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:282
+#: usr/local/www/system_firmware_check.php:106
+msgid "Perform full backup prior to upgrade"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:285
+msgid "Upgrade firmware"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:286
+msgid "Click \"Upgrade firmware\" to start the upgrade process."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:288
+msgid "You must reboot the system before you can upgrade the firmware."
+msgstr ""
+
+#: usr/local/www/system_firmware.php:299
+msgid "Warning:"
+msgstr ""
+
+#: usr/local/www/system_firmware.php:302
+msgid ""
+"DO NOT abort the firmware upgrade once it has started. The firewall will "
+"reboot automatically after storing the new firmware. The configuration will "
+"be maintained."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:122
+msgid "Beginning firmware upgrade"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:141
+msgid "Downloading current version information"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:156
+#: usr/local/www/system_firmware_auto.php:165
+#: usr/local/www/system_firmware_check.php:143
+msgid "Unable to check for updates."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:170
+msgid "Downloading updates"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:180
+msgid "download complete."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:182
+#: usr/local/www/system_firmware_check.php:161
+msgid "You are on the latest version."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:222
+msgid ""
+"Update cannot continue. You can disable this check on the Updater Settings "
+"tab."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:227
+msgid ""
+"Upgrade Image does not contain a signature but the system has been "
+"configured to allow unsigned images. One moment please..."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:232
+msgid "Update cannot continue"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:243
+msgid "Downloading complete but sha256 does not match."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Auto upgrade aborted."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Downloaded SHA256"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Needed SHA256"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:246
+msgid "is now upgrading."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:246
+msgid "The firewall will reboot once the operation is completed."
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:268
+msgid "Auto Update Download Status"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:270
+msgid "Current Version"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:271
+msgid "Latest Version"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:272
+msgid "File size"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:273
+msgid "Downloaded"
+msgstr ""
+
+#: usr/local/www/system_firmware_auto.php:274
+msgid "Percent"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:109
+msgid "Invoke Auto Upgrade"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:127
+msgid "Downloading new version information..."
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:145
+msgid "Could not contact custom update server."
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:147
+#, php-format
+msgid "Could not contact %1$s update server %2$s%3$s"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:149
+msgid "Obtaining current version information..."
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:186
+msgid "A new version is now available"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:187
+msgid "Current version"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:189
+msgid "NanoBSD Size"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:191
+msgid "Built On"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:192
+msgid "New version"
+msgstr ""
+
+#: usr/local/www/system_firmware_check.php:193
+msgid "Update source"
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:105
+msgid "Restore full backup"
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:140
+msgid "Filename"
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:163
+msgid "Do you really want to delete this backup?"
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:175
+msgid "Could not locate any previous backups."
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:183
+msgid "do not restore config.xml."
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:185
+msgid "Restore"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:50
+msgid ""
+"A Firmware Auto Update Base URL must be specified when \"Use an unofficial "
+"server for firmware upgrades\" is enabled."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:137
+msgid "Firmware Branch"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:141
+msgid "Default Auto Update URLs"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:161
+#, php-format
+msgid ""
+"Entries denoted by \"Current architecture\" match the architecture of your "
+"current installation, such as %s. Changing architectures during an upgrade "
+"is not recommended, and may require a manual reboot after the update "
+"completes."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:166
+msgid "Firmware Auto Update URL"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:168
+msgid "Use an unofficial server for firmware upgrades"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "This is where"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "will check for newer firmware versions when the"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "System: Firmware: Auto Update"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:175
+#, php-format
+msgid ""
+"When a custom URL is configured, the system will not verify the image has an "
+"official digital signature"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:183
+msgid "Updates"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:186
+msgid "Unsigned images"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:190
+msgid ""
+"Allow auto-update firmware images with a missing or invalid digital "
+"signature to be used."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:194
+msgid "Dashboard check"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:198
+msgid "Disable the automatic dashboard auto-update check."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:206
+msgid "Gitsync"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:209
+msgid "Auto sync on update"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:213
+msgid ""
+"After updating, sync with the following repository/branch before reboot."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:225
+msgid "Repository URL"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:230
+#, php-format
+msgid "The most recently used repository was %s"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:232
+msgid "This will be used if the field is left blank."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:251
+msgid "Branch name"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:256
+#, php-format
+msgid "The most recently used branch was %s"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:259
+msgid "Usually the branch name is master"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:262
+msgid "Note: Sync will not be performed if a branch is not specified."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups.php:86
+msgid "removed gateway group"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups.php:112
+#, php-format
+msgid ""
+"The gateway configuration has been changed.%sYou must apply the changes in "
+"order for them to take effect."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups.php:188
+msgid "Do you really want to delete this gateway group?"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups.php:206
+msgid ""
+"Remember to use these Gateway Groups in firewall rules in order to enable "
+"load balancing, failover, or policy-based routing. Without rules directing "
+"traffic into the Gateway Groups, they will not be used."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:56
+msgid "Member Down"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:57
+msgid "Packet Loss"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:58
+msgid "High Latency"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:59
+msgid "Packet Loss or High Latency"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:91
+msgid "A valid gateway group name must be specified."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:94
+#: usr/local/www/system_gateways_edit.php:122
+msgid "The gateway name must not contain invalid characters."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:103
+msgid "Changing name on a gateway group is not allowed."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:108
+#, php-format
+msgid "A gateway group with this name \"%s\" already exists."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:125
+#, php-format
+msgid ""
+"A gateway group cannot have the same name with a gateway \"%s\" please "
+"choose another name."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:129
+msgid "No gateway(s) have been selected to be used in this group"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:153
+msgid "Edit gateway group"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:232
+msgid "Edit gateway group entry"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:241
+msgid "Gateway Priority"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:275
+msgid "Never"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:276
+msgid "Tier 1"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:277
+msgid "Tier 2"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:278
+msgid "Tier 3"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:279
+msgid "Tier 4"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:280
+msgid "Tier 5"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:296
+msgid "Interface Address"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:314
+msgid "Link Priority"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:315
+msgid ""
+"The priority selected here defines in what order failover and balancing of "
+"links will be done. Multiple links of the same priority will balance "
+"connections until all links in the priority will be exhausted. If all links "
+"in a priority level are exhausted we will use the next available link(s) in "
+"the next priority level."
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:320
+msgid ""
+"The virtual IP field selects what (virtual) IP should be used when this "
+"group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:325
+msgid "Trigger Level"
+msgstr ""
+
+#: usr/local/www/system_gateway_groups_edit.php:336
+msgid "When to trigger exclusion of a member"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:89
+#, php-format
+msgid ""
+"Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:99
+#, php-format
+msgid ""
+"Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:196
+msgid "The gateway configuration has been changed."
+msgstr ""
+
+#: usr/local/www/system_gateways.php:220
+#: usr/local/www/system_gateways_edit.php:719
+msgid "Monitor IP"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:266
+msgid "This gateway is inactive because interface is missing"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:340
+msgid "Do you really want to delete this gateway?"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:377 usr/local/www/system_gateways.php:382
+msgid "delete selected items"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:383
+msgid "Do you really want to delete the selected gateway items?"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:126
+msgid "A valid gateway IP address must be specified."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:134
+msgid ""
+"Cannot add IPv4 Gateway Address because no IPv4 address could be found on "
+"the interface."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:153
+#: usr/local/www/system_gateways_edit.php:181
+#, php-format
+msgid ""
+"The gateway address %1$s does not lie within one of the chosen interface's "
+"subnets."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:162
+msgid ""
+"Cannot add IPv6 Gateway Address because no IPv6 address could be found on "
+"the interface."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:188
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv4 "
+"configuration."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:192
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv6 "
+"configuration."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:196
+msgid "A valid monitor IP address must be specified."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:222
+msgid "Changing name on a gateway is not allowed."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:227
+#, php-format
+msgid "The gateway name \"%s\" already exists."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:233
+#, php-format
+msgid "The gateway IP address \"%s\" already exists."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:239
+#, php-format
+msgid ""
+"The monitor IP address \"%s\" is already in use. You must choose a different "
+"monitor IP."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:249
+msgid "The low latency threshold needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:252
+msgid "The low latency threshold needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:259
+msgid "The high latency threshold needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:262
+msgid "The high latency threshold needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:269
+msgid "The low Packet Loss threshold needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:272
+msgid "The low Packet Loss threshold needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:275
+msgid "The low Packet Loss threshold needs to be less than 100."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:282
+msgid "The high Packet Loss threshold needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:285
+msgid "The high Packet Loss threshold needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:288
+msgid "The high Packet Loss threshold needs to be 100 or less."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:296
+msgid ""
+"The high latency threshold needs to be higher than the low latency threshold"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:319
+msgid ""
+"The high Packet Loss threshold needs to be higher than the low Packet Loss "
+"threshold"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:341
+msgid "The probe interval needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:344
+msgid "The probe interval needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:351
+msgid "The down time setting needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:354
+msgid "The down time setting needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:362
+msgid "The probe interval needs to be less than the down time setting."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:384
+msgid "The average delay replies qty needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:387
+msgid "The average delay replies qty needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:394
+msgid "The average packet loss probes qty needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:397
+msgid "The average packet loss probes qty needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:404
+msgid "The lost probe delay needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:407
+msgid "The lost probe delay needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_gateways_edit.php:644
+msgid "Edit gateway"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:650
+msgid "Disable this gateway"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:651
+msgid ""
+"Set this option to disable this gateway without removing it from the list."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:668
+msgid "Choose which interface this gateway applies to."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:685
+msgid "Choose the Internet Protocol this gateway uses."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:692
+msgid "Gateway name"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:699
+msgid "Gateway IP address"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:703
+#: usr/local/www/system_gateways_edit.php:706
+msgid "Default Gateway"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:707
+msgid "This will select the above gateway as the default gateway"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:711
+#: usr/local/www/system_gateways_edit.php:714
+msgid "Disable Gateway Monitoring"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:715
+msgid "This will consider this gateway as always being up"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:728
+msgid "Alternative monitor IP"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:729
+msgid ""
+"Enter an alternative address here to be used to monitor the link. This is "
+"used for the quality RRD graphs as well as the load balancer entries. Use "
+"this if the gateway does not respond to ICMP echo requests (pings)"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:736
+#: usr/local/www/system_gateways_edit.php:739
+msgid "Mark Gateway as Down"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:740
+msgid "This will force this gateway to be considered Down"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:748
+msgid " - Show advanced option"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:765
+msgid "Weight for this gateway when used in a Gateway Group."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:769
+msgid "Latency thresholds"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:781
+msgid "Packet Loss thresholds"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:793
+msgid "Probe Interval"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:799
+msgid ""
+"NOTE: The quality graph is averaged over seconds, not intervals, so as the "
+"probe interval is increased the accuracy of the quality graph is decreased."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:804
+msgid "Down"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:812
+msgid "Average Delay Replies Qty"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:817
+#: usr/local/www/system_gateways_edit.php:827
+#: usr/local/www/system_gateways_edit.php:837
+msgid "Use calculated value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:822
+msgid "Average Packet Loss Probes Qty"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:832
+msgid "Lost Probe Delay"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:843
+msgid ""
+"The probe interval must be less than the down time, otherwise the gateway "
+"will seem to go down then come up again at the next probe."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:844
+msgid ""
+"The down time defines the length of time before the gateway is marked as "
+"down, but the accuracy is controlled by the probe interval. For example, if "
+"your down time is 40 seconds but on a 30 second probe interval, only one "
+"probe would have to fail before the gateway is marked down at the 40 second "
+"mark. By default, the gateway is considered down after 10 seconds, and the "
+"probe interval is 1 second, so 10 probes would have to fail before the "
+"gateway is marked down."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:53
+#: usr/local/www/system_groupmanager_addprivs.php:57
+msgid "Group manager"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:79
+#: usr/local/www/vpn_ipsec_mobile.php:619
+msgid "Group"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:80
+#: usr/local/www/system_groupmanager.php:104
+#: usr/local/www/system_usermanager.php:100
+#: usr/local/www/system_usermanager.php:115
+msgid "successfully deleted"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:103
+#: usr/local/www/system_usermanager.php:114
+msgid "Privilege"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:131
+msgid "Selected groups removed successfully!"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:148
+msgid "The group name contains invalid characters."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:151
+msgid "The group name is longer than 16 characters."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:157
+msgid "Another entry with the same group name already exists."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:314
+#: usr/local/www/system_usermanager.php:520
+msgid "Defined by"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:321
+#: usr/local/www/system_groupmanager.php:481
+msgid "Group name"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:331
+msgid "Group description, for your own information only"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:338
+#: usr/local/www/system_usermanager.php:566
+msgid "Group Memberships"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:343
+msgid "Not Members"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:367
+msgid "Add Members"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:371
+msgid "Remove Members"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:398
+#: usr/local/www/system_groupmanager_addprivs.php:196
+#: usr/local/www/system_usermanager.php:632
+#: usr/local/www/system_usermanager_addprivs.php:183
+msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:406
+msgid "Assigned Privileges"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:432
+#: usr/local/www/system_usermanager.php:674
+msgid "Do you really want to delete this privilege?"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:433
+#: usr/local/www/system_usermanager.php:675
+msgid "delete privilege"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:483
+msgid "Member Count"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:494
+msgid "add group"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:495
+msgid "Delete selected groups"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:495
+msgid "Do you really want to delete selected groups?"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:501
+msgid ""
+"Additional webConfigurator groups can be added here.\n"
+"\t\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by "
+"users who are members of the group.\n"
+"\t\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system "
+"defined object.\n"
+"\t\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they "
+"cannot be deleted."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:562
+msgid "Do you really want to delete this group?"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:563
+msgid "delete group"
+msgstr ""
+
+#: usr/local/www/system_groupmanager_addprivs.php:57
+msgid "Add privileges"
+msgstr ""
+
+#: usr/local/www/system_groupmanager_addprivs.php:81
+#: usr/local/www/system_usermanager_addprivs.php:75
+msgid "Selected priveleges"
+msgstr ""
+
+#: usr/local/www/system_groupmanager_addprivs.php:182
+#: usr/local/www/system_usermanager_addprivs.php:171
+msgid "System Privileges"
+msgstr ""
+
+#: usr/local/www/system_groupmanager_addprivs.php:220
+#: usr/local/www/system_usermanager_addprivs.php:189
+msgid "Select a privilege from the list above for a description"
+msgstr ""
+
+#: usr/local/www/system_hasync.php:101
+msgid "High Availability Sync"
+msgstr ""
+
+#: usr/local/www/system_routes.php:54 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes_edit.php:212
+msgid "Static Routes"
+msgstr ""
+
+#: usr/local/www/system_routes.php:114 usr/local/www/system_routes.php:126
+msgid "removed route to"
+msgstr ""
+
+#: usr/local/www/system_routes.php:141
+msgid "enabled route to"
+msgstr ""
+
+#: usr/local/www/system_routes.php:145
+msgid "disabled route to"
+msgstr ""
+
+#: usr/local/www/system_routes.php:212
+#, php-format
+msgid ""
+"The static route configuration has been changed.%sYou must apply the changes "
+"in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/system_routes.php:293
+msgid "move selected routes before this route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:298
+msgid "edit route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:304
+msgid "Do you really want to delete this route?"
+msgstr ""
+
+#: usr/local/www/system_routes.php:305
+msgid "delete route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:310
+msgid "add a new route based on this one"
+msgstr ""
+
+#: usr/local/www/system_routes.php:328 usr/local/www/system_routes.php:333
+msgid "move selected routes to end"
+msgstr ""
+
+#: usr/local/www/system_routes.php:341
+msgid "add new route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:351 usr/local/www/system_routes.php:356
+msgid "delete selected routes"
+msgstr ""
+
+#: usr/local/www/system_routes.php:357
+msgid "Do you really want to delete the selected routes?"
+msgstr ""
+
+#: usr/local/www/system_routes.php:372
+msgid ""
+"Do not enter static routes for networks assigned on any interface of this "
+"firewall. Static routes are only used for networks reachable via a "
+"different router, and not reachable via your default gateway."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:85
+#: usr/local/www/system_routes_edit.php:229
+msgid "Destination network"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:86
+msgid "Destination network bit count"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:92
+msgid "A valid IPv4 or IPv6 destination network must be specified."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:95
+msgid "A valid destination network bit count must be specified."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:113
+msgid "A IPv4 subnet can not be over 32 bits."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:155
+msgid "A route to these destination networks already exists"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:172
+#, php-format
+msgid "This network conflicts with address configured on interface %s."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:212
+msgid "Edit route"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:226
+msgid "Edit route entry"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:240
+msgid "Destination network for this static route"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:257
+msgid "Choose which gateway this route applies to or"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:274
+msgid "Default gateway:"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:277
+msgid "Interface:"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:291
+msgid "Gateway IP:"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:318
+msgid "Disable this static route"
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:319
+msgid ""
+"Set this option to disable this static route without removing it from the "
+"list."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:393
+#, php-format
+msgid "You can manage Gateways %shere%s."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:396
+msgid "Sorry, we could not create your gateway at this time."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:167
+#: usr/local/www/system_usermanager.php:781
+#: usr/local/www/system_usermanager.php:791
+#: usr/local/www/vpn_ipsec_phase1.php:181
+#: usr/local/www/vpn_openvpn_server.php:333
+msgid "Certificate"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:168
+msgid "association removed."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:193
+msgid "Selected users removed successfully!"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:230
+msgid "The username is longer than 16 characters."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:233
+#: usr/local/www/system_usermanager_passwordmg.php:55
+#: usr/local/www/vpn_l2tp_users_edit.php:98
+#: usr/local/www/vpn_pptp_users_edit.php:97
+msgid "The passwords do not match."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:236
+msgid "IPsec Pre-Shared Key contains invalid characters."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:246
+#: usr/local/www/vpn_l2tp_users_edit.php:108
+#: usr/local/www/vpn_pptp_users_edit.php:107
+msgid "Another entry with the same username already exists."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:257
+msgid "That username is reserved by the system."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:277
+msgid "Invalid expiration date format; use MM/DD/YYYY instead."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:284
+msgid "Invalid internal Certificate Authority"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:547
+#: usr/local/www/system_usermanager_passwordmg.php:123
+msgid "(confirmation)"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:551
+#: usr/local/www/system_usermanager.php:905
+msgid "Full name"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:555
+msgid "User's full name, for your own information only"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:559
+msgid "Expiration date"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:563
+msgid ""
+"Leave blank if the account shouldn't expire, otherwise enter the expiration "
+"date in the following format: mm/dd/yyyy"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:571
+msgid "Not Member Of"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:597
+msgid "Add Groups"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:601
+msgid "Remove Groups"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:605
+msgid "Member Of"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:639
+msgid "Effective Privileges"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:643
+msgid "Inherited From"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:700
+msgid "User Certificates"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:705
+msgid "CA"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:736
+msgid "export private key"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:748
+msgid "Do you really want to remove this certificate association?"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:748
+msgid "(Certificate will not be deleted)"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:783
+msgid "Click to create a user certificate."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:853
+#: usr/local/www/system_usermanager.php:859
+msgid "Authorized keys"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:855
+msgid "Click to paste an authorized key."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:870
+msgid "Paste an authorized keys file here."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:874
+msgid "IPsec Pre-Shared Key"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:918
+#: usr/local/www/vpn_l2tp_users.php:122 usr/local/www/vpn_pptp_users.php:106
+#: usr/local/www/vpn_pptp_users.php:129
+msgid "add user"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:919
+msgid "Delete selected users"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:919
+msgid "Do you really want to delete selected Users?"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:925
+msgid ""
+"Additional users can be added here. User permissions for accessing the "
+"webConfigurator can be assigned directly or inherited from group "
+"memberships. An icon that appears grey indicates that it is a system defined "
+"object. Some system object properties can be modified but they cannot be "
+"deleted."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:930
+msgid ""
+"Accounts created here are also used for other parts of the system such as "
+"OpenVPN, IPsec, and Captive Portal."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:978
+#: usr/local/www/vpn_pptp_users.php:119
+msgid "edit user"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:988
+#: usr/local/www/vpn_l2tp_users.php:117 usr/local/www/vpn_pptp_users.php:120
+msgid "Do you really want to delete this user?"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:989
+#: usr/local/www/vpn_l2tp_users.php:117 usr/local/www/vpn_pptp_users.php:120
+msgid "delete user"
+msgstr ""
+
+#: usr/local/www/system_usermanager_passwordmg.php:44
+msgid "User Password"
+msgstr ""
+
+#: usr/local/www/system_usermanager_passwordmg.php:67
+msgid "Password successfully changed"
+msgstr ""
+
+#: usr/local/www/system_usermanager_passwordmg.php:96
+msgid "Sorry, you cannot change the password for a non-local user."
+msgstr ""
+
+#: usr/local/www/system_usermanager_passwordmg.php:126
+msgid "Select a new password"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:50
+msgid "User manager settings"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:60
+msgid "Session timeout must be an integer value."
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:70
+msgid ""
+"The test was not performed because it is supported only for ldap based "
+"backends."
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:132
+msgid "Session Timeout"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:136
+msgid ""
+"Time in minutes to expire idle management sessions. The default is 4 hours "
+"(240 minutes)."
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:137
+msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings.php:164
+msgid "Save and Test"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97
+msgid ""
+"Could not connect to the LDAP server. Please check your LDAP configuration."
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100
+msgid "Please select which containers to Authenticate against:"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:81
+#, php-format
+msgid "Could not find settings for %s%s"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:86
+#, php-format
+msgid "Testing %s LDAP settings... One moment please..."
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:90
+msgid "Attempting connection to"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:94
+msgid "Attempting bind to"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:98
+msgid "Attempting to fetch Organizational Units from"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:105
+msgid "Organization units found"
+msgstr ""
+
+#: usr/local/www/system_usermanager_settings_test.php:112
+#: usr/local/www/system_usermanager_settings_test.php:117
+#: usr/local/www/system_usermanager_settings_test.php:121
+msgid "failed"
+msgstr ""
+
+#: usr/local/www/uploadconfig.php:49
+msgid "ERR Could not save configuration."
+msgstr ""
+
+#: usr/local/www/uploadconfig.php:55
+msgid "OK"
+msgstr ""
+
+#: usr/local/www/uploadconfig.php:58
+msgid "ERR Could not install configuration."
+msgstr ""
+
+#: usr/local/www/uploadconfig.php:61
+msgid "ERR Invalid configuration received."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec_keys.php:92
+#: usr/local/www/vpn_ipsec_mobile.php:331
+msgid "The IPsec tunnel configuration has been changed"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:238 usr/local/www/vpn_ipsec_keys.php:100
+#: usr/local/www/vpn_ipsec_mobile.php:346
+#: usr/local/www/vpn_ipsec_phase1.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:539
+#: usr/local/www/vpn_ipsec_settings.php:204
+msgid "Tunnels"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:239 usr/local/www/vpn_ipsec_keys.php:101
+#: usr/local/www/vpn_ipsec_mobile.php:347
+#: usr/local/www/vpn_ipsec_phase1.php:554
+#: usr/local/www/vpn_ipsec_phase2.php:540
+#: usr/local/www/vpn_ipsec_settings.php:205
+msgid "Mobile clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:240 usr/local/www/vpn_ipsec_keys.php:102
+#: usr/local/www/vpn_ipsec_phase1.php:555
+#: usr/local/www/vpn_ipsec_phase2.php:541
+msgid "Pre-Shared Keys"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:241 usr/local/www/vpn_ipsec_keys.php:103
+#: usr/local/www/vpn_ipsec_mobile.php:349
+#: usr/local/www/vpn_ipsec_phase1.php:556
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/vpn_ipsec_settings.php:207
+msgid "Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:258
+msgid "Enable IPsec"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:274
+msgid "IKE"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:275
+msgid "Remote Gateway"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:277
+msgid "P1 Protocol"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:278
+msgid "P1 Transforms"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:279
+msgid "P1 Description"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:361 usr/local/www/vpn_ipsec.php:515
+#: usr/local/www/vpn_ipsec_phase2.php:746
+msgid "auto"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:384 usr/local/www/vpn_ipsec.php:539
+msgid "move selected entries before this"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:389
+msgid "edit phase1 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:396
+msgid "delete phase1 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:398
+msgid ""
+"Do you really want to delete this phase1 and all associated phase2 entries?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:405
+msgid "copy phase1 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:437
+#, php-format
+msgid "Show %s Phase-2 entries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:445
+msgid "Local Subnet"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:446
+msgid "Remote Subnet"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:447
+msgid "P2 Protocol"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:448
+msgid "P2 Transforms"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:449
+msgid "P2 Auth Methods"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:542
+msgid "edit phase2 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:545
+msgid "delete phase2 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:547
+msgid "Do you really want to delete this phase2 entry?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:549
+msgid "add a new Phase 2 based on this one"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:563 usr/local/www/vpn_ipsec.php:567
+msgid "move selected phase2 entries to end"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:572
+msgid "add phase2 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:577 usr/local/www/vpn_ipsec.php:581
+msgid "delete selected phase2 entries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:581
+msgid "Do you really want to delete the selected phase2 entries?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:604 usr/local/www/vpn_ipsec.php:608
+msgid "move selected phase1 entries to end"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:615
+msgid "add new phase1"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:624 usr/local/www/vpn_ipsec.php:628
+msgid "delete selected phase1 entries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:628
+msgid "Do you really want to delete the selected phase1 entries?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:644
+msgid "You can check your IPsec status at"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:644
+msgid "Status:IPsec"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:645
+msgid "IPsec Debug Mode can be enabled at"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:645 usr/local/www/vpn_ipsec.php:646
+msgid "VPN:IPsec:Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:646
+msgid "IPsec can be set to prefer older SAs at"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:71
+msgid "Deleted IPsec Pre-Shared Key"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:78
+msgid "VPN: IPsec: Keys"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:112
+#: usr/local/www/vpn_ipsec_keys_edit.php:72
+#: usr/local/www/vpn_ipsec_keys_edit.php:134
+msgid "Identifier"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:118 usr/local/www/vpn_ipsec_keys.php:166
+msgid "add key"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:128
+msgid "ANY USER"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:142
+msgid "edit"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:156
+msgid "edit key"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:157
+msgid "Do you really want to delete this Pre-Shared Key?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:157
+msgid "delete key"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:182
+#: usr/local/www/vpn_ipsec_keys_edit.php:163
+msgid "PSK for any user can be set by using an identifier of any/ANY"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:77
+msgid "The identifier contains invalid characters."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:80
+msgid "A user with this name already exists. Add the key to the user instead."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:84
+#: usr/local/www/vpn_ipsec_phase1.php:193
+msgid "Pre-Shared Key contains invalid characters."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:90
+msgid "Another entry with the same identifier already exists."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:107
+msgid "Edited"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:110
+msgid "Added"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:121
+msgid "VPN: IPsec: Edit Pre-Shared Key"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:138
+msgid ""
+"This can be either an IP address, fully qualified domain name or an e-mail "
+"address"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:133
+msgid "User Authentication Source"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:133
+msgid "Group Authentication Source"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:139
+msgid ""
+"A valid IP address for 'Virtual Address Pool Network' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:143
+msgid "A valid value for 'DNS Default Domain' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:150
+msgid "A valid split DNS domain list must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:160
+msgid ""
+"At least one DNS server must be specified to enable the DNS Server option."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:162
+msgid "A valid IP address for 'DNS Server #1' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:164
+msgid "A valid IP address for 'DNS Server #2' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:166
+msgid "A valid IP address for 'DNS Server #3' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:168
+msgid "A valid IP address for 'DNS Server #4' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:173
+msgid ""
+"At least one WINS server must be specified to enable the DNS Server option."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:175
+msgid "A valid IP address for 'WINS Server #1' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:177
+msgid "A valid IP address for 'WINS Server #2' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:182
+msgid "A valid value for 'Login Banner' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:241
+msgid "Mobile"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid ""
+"Support for IPsec Mobile clients is enabled but a Phase1 definition was not "
+"found"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "Please click Create to define one."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "Create Phase1"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:359
+msgid "IKE Extensions"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:368
+msgid "Enable IPsec Mobile Client Support"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:379
+msgid "Extended Authentication (Xauth)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:383
+msgid "User Authentication"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:401
+msgid "Group Authentication"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:406
+msgid "system"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:415
+msgid "Client Configuration (mode-cfg)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:419
+msgid "Virtual Address Pool"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:428
+msgid "Provide a virtual IP address to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:451
+msgid "Network List"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:460
+msgid "Provide a list of accessible networks to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:467
+msgid "Save Xauth Password"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:476
+msgid "Allow clients to save Xauth passwords (Cisco VPN client only)."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:477
+msgid ""
+"NOTE: With iPhone clients, this does not work when deployed via the iPhone "
+"configuration utility, only by manual entry."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:484
+#: usr/local/www/vpn_openvpn_csc.php:507
+#: usr/local/www/vpn_openvpn_server.php:1510
+msgid "DNS Default Domain"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:493
+#: usr/local/www/vpn_openvpn_csc.php:517
+#: usr/local/www/vpn_openvpn_server.php:1520
+msgid "Provide a default domain name to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:507
+msgid "Split DNS"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:516
+msgid ""
+"Provide a list of split DNS domain names to clients. Enter a comma separated "
+"list."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:517
+msgid ""
+"NOTE: If left blank, and a default domain is set, it will be used for this "
+"value."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:531
+#: usr/local/www/vpn_openvpn_csc.php:532
+#: usr/local/www/vpn_openvpn_server.php:1535
+msgid "DNS Servers"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:540
+#: usr/local/www/vpn_openvpn_csc.php:542
+#: usr/local/www/vpn_openvpn_server.php:1545
+msgid "Provide a DNS server list to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:573
+#: usr/local/www/vpn_openvpn_csc.php:680
+#: usr/local/www/vpn_openvpn_server.php:1703
+msgid "WINS Servers"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:582
+#: usr/local/www/vpn_openvpn_csc.php:690
+#: usr/local/www/vpn_openvpn_server.php:1713
+msgid "Provide a WINS server list to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:603
+msgid "Phase2 PFS Group"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:612
+msgid ""
+"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 "
+"settings )"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:633
+msgid "Login Banner"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_mobile.php:642
+msgid "Provide a login banner to clients"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:165
+msgid "EAP-TLS can only be used with IKEv2 type VPNs."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:186
+#: usr/local/www/vpn_ipsec_phase1.php:649
+msgid "Remote gateway"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:197
+msgid "The P1 lifetime must be an integer."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:201
+msgid "A valid remote gateway address or host name must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:203
+msgid ""
+"A valid remote gateway IPv4 address must be specified or you need to change "
+"protocol to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:205
+msgid ""
+"A valid remote gateway IPv6 address must be specified or you need to change "
+"protocol to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:214
+#, php-format
+msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:225
+msgid "There is a Phase 2 using IPv6, you cannot use IPv4."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:229
+msgid "There is a Phase 2 using IPv4, you cannot use IPv6."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:242
+msgid "Please enter an address for 'My Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:245
+msgid "Please enter a keyid tag for 'My Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:248
+msgid "Please enter a fully qualified domain name for 'My Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:251
+msgid "Please enter a user and fully qualified domain name for 'My Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:254
+msgid "Please enter a dynamic domain name for 'My Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:257
+msgid "A valid IP address for 'My identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:260
+msgid "A valid domain name for 'My identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:264
+msgid "A valid FQDN for 'My identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:269
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must "
+"be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:274
+msgid "A valid Dynamic DNS address for 'My identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:284
+msgid "Please enter an address for 'Peer Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:287
+msgid "Please enter a keyid tag for 'Peer Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:290
+msgid "Please enter a fully qualified domain name for 'Peer Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:293
+msgid ""
+"Please enter a user and fully qualified domain name for 'Peer Identifier'"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:296
+msgid "A valid IP address for 'Peer identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:299
+msgid "A valid domain name for 'Peer identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:303
+msgid "A valid FQDN for 'Peer identifier' must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:308
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' "
+"must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:314
+msgid "A numeric value must be specified for DPD delay."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:317
+msgid "A numeric value must be specified for DPD retries."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:321
+msgid "Valid arguments for IKE type is v1 or v2 or auto"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+msgid "Edit Phase 1"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:566
+#: usr/local/www/vpn_openvpn_client.php:462
+#: usr/local/www/vpn_openvpn_csc.php:333
+#: usr/local/www/vpn_openvpn_server.php:760
+msgid "General information"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:572
+msgid "Disable this phase1 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:574
+msgid ""
+"Set this option to disable this phase1 without removing it from the list"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:580
+msgid "Key Exchange version"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:591
+msgid ""
+"Select the Internet Key Exchange protocol version to be used, IKEv1 or IKEv2"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:595
+msgid "Internet Protocol"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:606
+msgid "Select the Internet Protocol family from this dropdown"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:642
+msgid "Select the interface for the local endpoint of this phase1 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:653
+msgid "Enter the public IP address or host name of the remote gateway"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:675
+msgid "Phase 1 proposal (Authentication)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:679
+#: usr/local/www/vpn_openvpn_client.php:604
+msgid "Authentication method"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:694
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase1.php:847
+msgid "Must match the setting chosen on the remote side"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:699
+msgid "Negotiation mode"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:710
+msgid "Aggressive is more flexible, but less secure"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:714
+msgid "My identifier"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:727
+msgid "Peer identifier"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:742
+msgid ""
+"NOTE: This is known as the \"group\" setting on some VPN client "
+"implementations"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:753
+msgid "Input your Pre-Shared Key string"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:758
+msgid "My Certificate"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:772
+msgid "Select a certificate previously configured in the Certificate Manager"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:777
+msgid "My Certificate Authority"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:791
+msgid ""
+"Select a certificate authority previously configured in the Certificate "
+"Manager"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:797
+msgid "Phase 1 proposal (Algorithms)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:801
+#: usr/local/www/vpn_openvpn_client.php:828
+#: usr/local/www/vpn_openvpn_server.php:1068
+msgid "Encryption algorithm"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:820
+msgid "Hash algorithm"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:836
+msgid "DH key group"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:865
+msgid "Disable Rekey"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:868
+msgid "Whether a connection should be renegotiated when it is about to expire."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:872
+msgid "Disable Reauth"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:875
+msgid ""
+"Whether rekeying of an IKE_SA should also reauthenticate the peer. In IKEv1, "
+"reauthentication is always done."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:879
+msgid "NAT Traversal"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:883
+msgid "Force"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:887
+msgid ""
+"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in "
+"UDP packets) if needed, which can help with clients that are behind "
+"restrictive firewalls"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:893
+msgid "Dead Peer Detection"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:896
+msgid "Enable DPD"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:902
+msgid "Delay between requesting peer acknowledgement"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:906
+msgid "retries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:908
+msgid "Number of consecutive failures allowed before disconnect"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:132
+msgid "A valid ikeid must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+msgid "Local network type"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+msgid "Unique Identifier"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:139
+msgid "Remote network type"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:149
+msgid "A valid local network bit count must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:152
+msgid "A valid local network IP address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:154
+msgid ""
+"A valid local network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:156
+msgid ""
+"A valid local network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:166
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "Invalid Local Network."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:166
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "has no subnet."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:173
+msgid "A valid NAT local network bit count must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:175
+msgid ""
+"You cannot configure a network type address for NAT while only an address "
+"type is selected for local source."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:178
+msgid "A valid NAT local network IP address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:180
+msgid ""
+"A valid NAT local network IPv4 address must be specified or you need to "
+"change Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:182
+msgid ""
+"A valid NAT local network IPv6 address must be specified or you need to "
+"change Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:199
+msgid "A valid remote network bit count must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:202
+msgid "A valid remote network IP address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:204
+msgid ""
+"A valid remote network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:206
+msgid ""
+"A valid remote network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:224
+msgid "Phase2 with this Local Network is already defined for mobile clients."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:249
+msgid ""
+"Phase2 with this Local/Remote networks combination is already defined for "
+"this Phase1."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:280
+#: usr/local/www/vpn_ipsec_phase2.php:285
+msgid ""
+"The local and remote networks of a phase 2 entry cannot overlap the outside "
+"of the tunnel (interface and remote gateway) configured in its phase 1."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:299
+msgid "At least one encryption algorithm must be selected."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:304
+msgid "At least one hashing algorithm needs to be selected."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:313
+msgid "The P2 lifetime must be an integer."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+msgid "Edit Phase 2"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:555
+msgid "Disable this phase2 entry"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:557
+msgid ""
+"Set this option to disable this phase2 entry without removing it from the "
+"list"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:578
+msgid "Local Network"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:592
+#: usr/local/www/vpn_ipsec_phase2.php:627
+#, php-format
+msgid "%s subnet"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:614
+msgid ""
+"In case you need NAT/BINAT on this network specify the address to be "
+"translated"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:655
+msgid "Remote Network"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:706
+msgid "Phase 2 proposal (SA/Key Exchange)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:721
+msgid "ESP is encryption, AH is authentication only"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:726
+msgid "Encryption algorithms"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:768
+msgid ""
+"Hint: use 3DES for best compatibility or if you have a hardware crypto "
+"accelerator card. Blowfish is usually the fastest in software encryption"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:774
+msgid "Hash algorithms"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:784
+msgid "PFS key group"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:802
+msgid "Set globally in mobile client options"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:820
+msgid "Automatically ping host"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:217
+msgid "IPsec Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:220
+msgid "Security Associations"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:223
+msgid "Prefer older IPsec SAs"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:225
+msgid ""
+"By default, if several SAs match, the newest one is preferred if it's at "
+"least 30 seconds old. Select this option to always prefer old SAs over new "
+"ones."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:231
+msgid "IPsec Debug"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:233
+msgid "Start IPsec in debug mode based on sections selected"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:254
+msgid ""
+"Launches IPsec in debug mode so that more verbose logs will be generated to "
+"aid in troubleshooting."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:259
+msgid "IPsec Reload on Failover"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:262
+msgid "Force IPsec Reload on Failover"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:264
+msgid ""
+"In some circumstances using a gateway group as the interface for an IPsec "
+"tunnel does not function properly, and IPsec must be forcefully reloaded "
+"when a failover occurs. Because this will disrupt all IPsec tunnels, this "
+"behavior is disabled by default. Check this box to force IPsec to fully "
+"reload on failover."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:271
+msgid "Unencrypted payloads in IKEv1 Main Mode"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:274
+msgid "Accept unencrypted ID and HASH payloads in IKEv1 Main Mode"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:276
+msgid ""
+"Some implementations send the third Main Mode message unencrypted, probably "
+"to find the PSKs for the specified ID for authentication.This is very "
+"similar to Aggressive Mode, and has the same security implications: A "
+"passive attacker can sniff the negotiated Identity, and start brute forcing "
+"the PSK using the HASH payload. It is recommended to keep this option to no, "
+"unless you know exactly what the implications are and require compatibility "
+"to such devices (for example, some SonicWall boxes)."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:283
+msgid "Maximum MSS"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:286
+msgid "Enable MSS clamping on VPN traffic"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:290
+msgid ""
+"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with "
+"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:75 usr/local/www/vpn_pppoe_edit.php:114
+#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pptp.php:83
+#: usr/local/www/vpn_pptp.php:362
+msgid "Server address"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:75 usr/local/www/vpn_pppoe_edit.php:114
+#: usr/local/www/vpn_pptp.php:83
+msgid "Remote start address"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:80 usr/local/www/vpn_pppoe_edit.php:119
+#: usr/local/www/vpn_pptp.php:88
+msgid "RADIUS server address"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:80 usr/local/www/vpn_pppoe_edit.php:119
+#: usr/local/www/vpn_pptp.php:88 usr/local/www/vpn_pptp.php:442
+msgid "RADIUS shared secret"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:86 usr/local/www/vpn_pppoe_edit.php:125
+#: usr/local/www/vpn_pptp.php:94
+msgid "A valid server address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:89 usr/local/www/vpn_pptp.php:97
+msgid ""
+"'Server address' parameter should NOT be set to any IP address currently in "
+"use on this firewall."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:92 usr/local/www/vpn_pppoe_edit.php:127
+#: usr/local/www/vpn_pptp.php:100
+msgid "A valid remote start address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:95 usr/local/www/vpn_pppoe_edit.php:129
+#: usr/local/www/vpn_pptp.php:103
+msgid "A valid RADIUS server address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:111 usr/local/www/vpn_pppoe_edit.php:136
+#: usr/local/www/vpn_pptp.php:112
+msgid "The specified server address lies in the remote subnet."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:114 usr/local/www/vpn_pptp.php:116
+msgid "The specified server address is equal to the LAN interface address."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:285 usr/local/www/vpn_l2tp_users.php:94
+#: usr/local/www/vpn_pptp.php:306 usr/local/www/vpn_pptp_users.php:91
+msgid "Configuration"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:305
+msgid "Enable L2TP server"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:326
+msgid "Server Address"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:330
+msgid ""
+"Enter the IP address the L2TP server should give to clients for use as their "
+"\"gateway\""
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:332 usr/local/www/vpn_pppoe_edit.php:442
+#: usr/local/www/vpn_pptp.php:368
+msgid "Typically this is set to an unused IP just outside of the client range"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:335 usr/local/www/vpn_pppoe_edit.php:445
+#: usr/local/www/vpn_pptp.php:371
+msgid ""
+"NOTE: This should NOT be set to any IP address currently in use on this "
+"firewall"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:338
+msgid "Remote Address Range"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:342
+msgid "Specify the starting address for the client IP address subnet."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:359 usr/local/www/vpn_pppoe_edit.php:415
+msgid "is"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:363
+msgid "Number of L2TP users"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:376
+msgid "is ten L2TP clients"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:380
+msgid "Secret"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:384
+msgid ""
+"Specify optional secret shared between peers. Required on some devices/"
+"setups."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:388
+msgid "Authentication Type"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:391
+msgid "CHAP"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:395
+msgid "Specifies which protocol to use for authentication."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:399
+msgid "L2TP DNS Servers"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:405
+msgid "primary and secondary DNS servers assigned to L2TP clients"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:409 usr/local/www/vpn_pptp.php:393
+msgid "WINS Server"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:415 usr/local/www/vpn_pppoe_edit.php:473
+#: usr/local/www/vpn_pptp.php:399
+msgid "RADIUS"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_pppoe_edit.php:476
+#: usr/local/www/vpn_pptp.php:402
+msgid "Use a RADIUS server for authentication"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:419
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_pppoe_edit.php:482
+#: usr/local/www/vpn_pptp.php:408
+msgid "Enable RADIUS accounting"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:423
+msgid "Sends accounting packets to the RADIUS server."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:426 usr/local/www/vpn_pptp.php:433
+msgid "RADIUS Server"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:430
+msgid "Enter the IP address of the RADIUS server."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:433
+msgid "RADIUS Shared Secret"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:437
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:440
+msgid "RADIUS Issued IP's"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:444
+msgid "Issue IP Addresses via RADIUS server."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:457
+msgid ""
+"Don't forget to add a firewall rule to permit traffic from L2TP clients!"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_pptp_users.php:83
+msgid "Warning: RADIUS is enabled. The local user database will not be used."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users.php:88
+msgid "The l2tp user list has been modified"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users.php:88 usr/local/www/vpn_pptp_users.php:85
+msgid "You must apply the changes in order for them to take effect"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users.php:88
+msgid "Warning: this will terminate all current l2tp sessions!"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users_edit.php:95
+#: usr/local/www/vpn_pptp_users_edit.php:94
+msgid "The password contains invalid characters."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users_edit.php:101
+#: usr/local/www/vpn_pptp_users_edit.php:100
+msgid "The IP address entered is not valid."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users_edit.php:169
+#: usr/local/www/vpn_pptp_users_edit.php:160
+msgid "confirmation"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users_edit.php:170
+msgid "If you want to change the users password, enter it here twice."
+msgstr ""
+
+#: usr/local/www/vpn_l2tp_users_edit.php:177
+#: usr/local/www/vpn_pptp_users_edit.php:168
+msgid ""
+"If you want the user to be assigned a specific IP address, enter it here."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:41
+#: usr/local/www/vpn_openvpn_client.php:446
+#: usr/local/www/vpn_openvpn_csc.php:317
+#: usr/local/www/vpn_openvpn_server.php:744
+msgid "Client"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:88
+msgid "Client successfully deleted"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:180
+#: usr/local/www/vpn_openvpn_server.php:232
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv6 "
+"protocol and an IPv4 IP address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:182
+#: usr/local/www/vpn_openvpn_server.php:234
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv4 "
+"protocol and an IPv6 IP address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:184
+#: usr/local/www/vpn_openvpn_server.php:236
+msgid ""
+"An IPv4 protocol was selected, but the selected interface has no IPv4 "
+"address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:186
+#: usr/local/www/vpn_openvpn_server.php:238
+msgid ""
+"An IPv6 protocol was selected, but the selected interface has no IPv6 "
+"address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:202
+#: usr/local/www/vpn_openvpn_server.php:273
+msgid "The specified 'Local port' is in use. Please select another value"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:221
+msgid "User name and password are required for proxy with authentication."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:240
+msgid "The bandwidth limit must be a positive numeric value."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:248
+#: usr/local/www/vpn_openvpn_server.php:281
+msgid "The field 'Shared Key' does not appear to be valid"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:253
+#: usr/local/www/vpn_openvpn_server.php:286
+msgid "The field 'TLS Authentication Key' does not appear to be valid"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:262
+#: usr/local/www/vpn_openvpn_server.php:337
+msgid "Shared key"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:268
+msgid ""
+"If no Client Certificate is selected, a username and password must be "
+"entered."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:447
+#: usr/local/www/vpn_openvpn_csc.php:318
+#: usr/local/www/vpn_openvpn_server.php:745
+msgid "Client Specific Overrides"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:476
+msgid "Disable this client"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:481
+msgid ""
+"Set this option to disable this client without removing it from the list"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:485
+#: usr/local/www/vpn_openvpn_server.php:783
+msgid "Server Mode"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:515
+msgid "Device mode"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:566
+#: usr/local/www/vpn_openvpn_server.php:886
+msgid "Local port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:570
+msgid ""
+"Set this option if you would like to bind to a specific port. Leave this "
+"blank or enter 0 for a random dynamic port."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:574
+msgid "Server host or address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:580
+msgid "Server port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:586
+msgid "Proxy host or address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:592
+msgid "Proxy port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:598
+msgid "Proxy authentication extra options"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:610
+msgid "basic"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:611
+msgid "ntlm"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:642
+msgid "Server host name resolution"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:652
+msgid "Infinitely resolve server"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:657
+msgid ""
+"Continuously attempt to resolve the server host name. Useful when "
+"communicating with a server that is not permanently connected to the Internet"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:674
+msgid "User Authentication Settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:677
+msgid "User name/pass"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:679
+msgid "Leave empty when no user name and password are needed."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:706
+#: usr/local/www/vpn_openvpn_server.php:903
+msgid "Cryptographic Settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:709
+#: usr/local/www/vpn_openvpn_server.php:906
+msgid "TLS Authentication"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:719
+#: usr/local/www/vpn_openvpn_server.php:916
+msgid "Enable authentication of TLS packets"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:733
+#: usr/local/www/vpn_openvpn_server.php:930
+msgid "Automatically generate a shared TLS authentication key"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:744
+#: usr/local/www/vpn_openvpn_client.php:821
+#: usr/local/www/vpn_openvpn_server.php:941
+#: usr/local/www/vpn_openvpn_server.php:1061
+msgid "Paste your shared key here"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:770
+msgid "Client Certificate"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:799
+#: usr/local/www/vpn_openvpn_server.php:1039
+msgid "Shared Key"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:810
+#: usr/local/www/vpn_openvpn_server.php:1050
+msgid "Automatically generate a shared key"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:846
+#: usr/local/www/vpn_openvpn_server.php:1086
+msgid "Auth Digest Algorithm"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:861
+msgid ""
+"NOTE: Leave this set to SHA1 unless the server is set to match. SHA1 is the "
+"default for OpenVPN."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:865
+#: usr/local/www/vpn_openvpn_server.php:1105
+msgid "Hardware Crypto"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:886
+#: usr/local/www/vpn_openvpn_csc.php:396
+#: usr/local/www/vpn_openvpn_server.php:1169
+msgid "Tunnel Settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:889
+#: usr/local/www/vpn_openvpn_server.php:1172
+msgid "IPv4 Tunnel Network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:893
+#: usr/local/www/vpn_openvpn_csc.php:403
+msgid ""
+"This is the virtual network used for private communications between this "
+"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:903
+#: usr/local/www/vpn_openvpn_server.php:1186
+msgid "IPv6 Tunnel Network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:907
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this client and the server expressed using CIDR (eg. fe80::/64). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:917
+#: usr/local/www/vpn_openvpn_csc.php:435
+#: usr/local/www/vpn_openvpn_server.php:1313
+msgid "IPv4 Remote Network/s"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:921
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:931
+#: usr/local/www/vpn_openvpn_csc.php:450
+#: usr/local/www/vpn_openvpn_server.php:1327
+msgid "IPv6 Remote Network/s"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:935
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:945
+msgid "Limit outgoing bandwidth"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:949
+msgid ""
+"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The "
+"input value has to be something between 100 bytes/sec and 100 Mbytes/sec "
+"(entered as bytes per second)"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:969
+msgid ""
+"Compress tunnel packets using the LZO algorithm. Adaptive compression will "
+"dynamically disable compression for a period of time if OpenVPN detects that "
+"the data in the packets is not being compressed efficiently."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:973
+#: usr/local/www/vpn_openvpn_server.php:1366
+msgid "Type-of-Service"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:983
+#: usr/local/www/vpn_openvpn_server.php:1376
+msgid ""
+"Set the TOS IP header value of tunnel packets to match the encapsulated "
+"packet value"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:992
+#: usr/local/www/vpn_openvpn_server.php:1421
+msgid "Disable IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1002
+#: usr/local/www/vpn_openvpn_server.php:1431
+msgid "Don't forward IPv6 traffic"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1011
+msgid "Don't pull routes"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1021
+msgid "Don't add or remove routes automatically. Instead pass routes to "
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1021
+msgid "script using environmental variables"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1030
+msgid "Don't add/remove routes"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1040
+msgid ""
+"This option effectively bars the server from adding routes to the client's "
+"routing table, however note that this option still allows the server to set "
+"the TCP/IP properties of the client's TUN/TAP interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1054
+#: usr/local/www/vpn_openvpn_server.php:1770
+msgid "Advanced configuration"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1063
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN client "
+"configuration here, separated by a semicolon"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1064
+msgid "EXAMPLE:"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1072
+#: usr/local/www/vpn_openvpn_server.php:1788
+msgid "Verbosity level"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1085
+#: usr/local/www/vpn_openvpn_server.php:1801
+msgid ""
+"Each level shows all info from the previous levels. Level 3 is recommended "
+"if you want a good summary of what's happening without being swamped by "
+"output"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1086
+#: usr/local/www/vpn_openvpn_server.php:1802
+msgid "No output except fatal errors"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1087
+#: usr/local/www/vpn_openvpn_server.php:1803
+msgid "Normal usage range"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1088
+#: usr/local/www/vpn_openvpn_server.php:1804
+msgid ""
+"Output R and W characters to the console for each packet read and write, "
+"uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP "
+"packets"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1089
+#: usr/local/www/vpn_openvpn_server.php:1805
+msgid "Debug info range"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1126
+msgid "add client"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1133
+msgid "Additional OpenVPN clients can be added here."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1162
+msgid "edit client"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1166
+msgid "delete client"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:41
+msgid "Client Specific Override"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:68
+msgid "Client Specific Override successfully deleted"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:148
+#: usr/local/www/vpn_openvpn_server.php:290
+msgid "The field 'DNS Server #1' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:150
+#: usr/local/www/vpn_openvpn_server.php:292
+msgid "The field 'DNS Server #2' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:152
+#: usr/local/www/vpn_openvpn_server.php:294
+msgid "The field 'DNS Server #3' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:154
+#: usr/local/www/vpn_openvpn_server.php:296
+msgid "The field 'DNS Server #4' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:159
+#: usr/local/www/vpn_openvpn_server.php:301
+msgid "The field 'NTP Server #1' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:161
+#: usr/local/www/vpn_openvpn_server.php:303
+msgid "The field 'NTP Server #2' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:163
+#: usr/local/www/vpn_openvpn_server.php:305
+msgid "The field 'NTP Server #3' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:165
+#: usr/local/www/vpn_openvpn_server.php:307
+msgid "The field 'NTP Server #4' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:171
+#: usr/local/www/vpn_openvpn_server.php:313
+msgid "The field 'WINS Server #1' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:173
+#: usr/local/www/vpn_openvpn_server.php:315
+msgid "The field 'WINS Server #2' must contain a valid IP address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:177
+#: usr/local/www/vpn_openvpn_server.php:319
+msgid ""
+"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP "
+"address"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:347
+msgid "Disable this override"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:352
+msgid ""
+"Set this option to disable this client-specific override without removing it "
+"from the list"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:356
+msgid "Common name"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:360
+msgid "Enter the client's X.509 common name here"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:372
+msgid "Connection blocking"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:382
+msgid "Block this client connection based on its common name"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:387
+msgid ""
+"Don't use this option to permanently disable a client due to a compromised "
+"key or password. Use a CRL (certificate revocation list) instead"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:399
+#: usr/local/www/vpn_openvpn_server.php:1833
+msgid "Tunnel Network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:413
+#: usr/local/www/vpn_openvpn_server.php:1287
+msgid "IPv4 Local Network/s"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:417
+msgid ""
+"These are the IPv4 networks that will be accessible from this particular "
+"client. Expressed as a comma-separated list of one or more CIDR ranges."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:419 usr/local/www/vpn_openvpn_csc.php:430
+msgid ""
+"NOTE: You do not need to specify networks here if they have already been "
+"defined on the main server configuration."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:424
+#: usr/local/www/vpn_openvpn_server.php:1300
+msgid "IPv6 Local Network/s"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:428
+msgid ""
+"These are the IPv6 networks that will be accessible from this particular "
+"client. Expressed as a comma-separated list of one or more IP/PREFIX "
+"networks."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:439
+msgid ""
+"These are the IPv4 networks that will be routed to this client specifically "
+"using iroute, so that a site-to-site VPN can be established. Expressed as a "
+"comma-separated list of one or more CIDR ranges. You may leave this blank if "
+"there are no client-side networks to be routed"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:445
+msgid ""
+"NOTE: Remember to add these subnets to the IPv4 Remote Networks list on the "
+"corresponding OpenVPN server settings."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:454
+msgid ""
+"These are the IPv6 networks that will be routed to this client specifically "
+"using iroute, so that a site-to-site VPN can be established. Expressed as a "
+"comma-separated list of one or more IP/PREFIX networks. You may leave this "
+"blank if there are no client-side networks to be routed"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:460
+msgid ""
+"NOTE: Remember to add these subnets to the IPv6 Remote Networks list on the "
+"corresponding OpenVPN server settings."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:465
+#: usr/local/www/vpn_openvpn_server.php:1269
+msgid "Redirect Gateway"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:475
+#: usr/local/www/vpn_openvpn_server.php:1279
+msgid "Force all client generated traffic through the tunnel"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:486
+#: usr/local/www/vpn_openvpn_server.php:1446
+msgid "Client Settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:489
+msgid "Server Definitions"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:499
+msgid "Prevent this client from receiving any server-defined client settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:584
+#: usr/local/www/vpn_openvpn_server.php:1607
+msgid "NTP Servers"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:594
+#: usr/local/www/vpn_openvpn_server.php:1617
+msgid "Provide a NTP server list to clients"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:620
+#: usr/local/www/vpn_openvpn_server.php:1643
+msgid "NetBIOS Options"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:630
+#: usr/local/www/vpn_openvpn_server.php:1653
+msgid "Enable NetBIOS over TCP/IP"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:635
+#: usr/local/www/vpn_openvpn_server.php:1658
+msgid ""
+"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) "
+"will be disabled"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:642
+#: usr/local/www/vpn_openvpn_server.php:1665
+msgid "Node Type"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:655
+#: usr/local/www/vpn_openvpn_server.php:1678
+msgid ""
+"Possible options: b-node (broadcasts), p-node (point-to-point name queries "
+"to a WINS server), m-node (broadcast then query name server), and h-node "
+"(query name server, then broadcast)"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:669
+#: usr/local/www/vpn_openvpn_server.php:1692
+msgid ""
+"A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over "
+"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to "
+"only those nodes with the same NetBIOS scope ID"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:722
+msgid ""
+"Enter any additional options you would like to add for this client specific "
+"override, separated by a semicolon"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:723
+#: usr/local/www/vpn_openvpn_server.php:1780
+msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:770
+msgid "edit csc"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:773
+msgid "Do you really want to delete this csc?"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:774
+msgid "delete csc"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:785
+msgid "add csc"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:792
+msgid "Additional OpenVPN client specific overrides can be added here."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:89
+msgid "Server successfully deleted"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:247
+msgid ""
+"You must select a Backend for Authentication if the server mode requires "
+"User Auth."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:328
+msgid "The field 'Concurrent connections' must be numeric."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:342
+msgid "Tunnel network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:345
+msgid ""
+"Using a tunnel network and server bridge settings together is not allowed."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:348
+msgid "Server Bridge DHCP Start and End must both be empty, or defined."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:350
+msgid "Server Bridge DHCP Start must be an IPv4 address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:352
+msgid "Server Bridge DHCP End must be an IPv4 address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:354
+msgid "The Server Bridge DHCP range is invalid (start higher than end)."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:774
+msgid "Disable this server"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:779
+msgid ""
+"Set this option to disable this server without removing it from the list"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:798
+msgid "Backend for authentication"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:830
+msgid "Device Mode"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:967
+msgid "Peer Certificate Revocation List"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:992
+msgid "Server Certificate"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1021
+msgid "DH Parameters Length"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1101
+msgid ""
+"NOTE: Leave this set to SHA1 unless all clients are set to match. SHA1 is "
+"the default for OpenVPN."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1123
+msgid "Certificate Depth"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1141
+msgid ""
+"When a certificate-based client logs in, do not accept certificates below "
+"this depth. Useful for denying certificates made with intermediate CAs "
+"generated from the same CA as the server."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1148
+msgid "Strict User/CN Matching"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1158
+msgid ""
+"When authenticating users, enforce a match between the common name of the "
+"client certificate and the username given at login."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1176
+msgid ""
+"This is the IPv4 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The "
+"first network address will be assigned to the\tserver virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1190
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. fe80::/64). The first "
+"network address will be assigned to the server virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1200
+msgid "Bridge DHCP"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1210
+msgid "Allow clients on the bridge to obtain DHCP."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1218
+msgid "Bridge Interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1240
+msgid ""
+"The interface to which this tap instance will be bridged. This is not done "
+"automatically. You must assign this interface and create the bridge "
+"separately. This setting controls which existing IP address and subnet mask "
+"are used by OpenVPN for the bridge. Setting this to 'none' will cause the "
+"Server Bridge DHCP settings below to be ignored."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1249
+msgid "Server Bridge DHCP Start"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1253
+msgid ""
+"When using tap mode as a multi-point server, you may optionally supply a "
+"DHCP range to use on the interface to which this tap instance is bridged. If "
+"these settings are left blank, DHCP will be passed through to the LAN, and "
+"the interface setting above will be ignored."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1262
+msgid "Server Bridge DHCP End"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1291
+msgid ""
+"These are the IPv4 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. "
+"You may leave this blank if you don't want to add a route to the local "
+"network through this tunnel on the remote machine. This is generally set to "
+"your LAN network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1304
+msgid ""
+"These are the IPv6 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You "
+"may leave this blank if you don't want to add a route to the local network "
+"through this tunnel on the remote machine. This is generally set to your LAN "
+"network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1317
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1331
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1341
+msgid "Concurrent connections"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1345
+msgid ""
+"Specify the maximum number of clients allowed to concurrently connect to "
+"this server"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1362
+msgid ""
+"Compress tunnel packets using the LZO algorithm. Adaptive compression will "
+"dynamically disable compression for a period of time if OpenVPN detects that "
+"the data in the packets is not being compressed efficiently"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1384
+msgid "Inter-client communication"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1394
+msgid "Allow communication between clients connected to this server"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1402
+msgid "Duplicate Connections"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1412
+msgid ""
+"Allow multiple concurrent connections from clients using the same Common "
+"Name.<br />NOTE: This is not generally recommended, but may be needed for "
+"some scenarios."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1449
+msgid "Dynamic IP"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1459
+msgid ""
+"Allow connected clients to retain their connections if their IP address "
+"changes"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1467
+msgid "Address Pool"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1477
+msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1485
+msgid "Topology"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1495
+msgid ""
+"Allocate only one IP per client (topology subnet), rather than an isolated "
+"subnet per client (topology net30)."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1502
+msgid ""
+"Relevant when supplying a virtual adapter IP address to clients when using "
+"tun mode on IPv4."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1503
+msgid ""
+"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/"
+"Android). Others may break if it is present, such as older versions of "
+"OpenVPN or clients such as Yealink phones."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1588
+msgid "Force DNS cache update"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1598
+msgid ""
+"Run ''net stop dnscache'', ''net start dnscache'', ''ipconfig /flushdns'' "
+"and ''ipconfig /registerdns'' on connection initiation. This is known to "
+"kick Windows into recognizing pushed DNS servers."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1688
+msgid "Scope ID"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1739
+msgid "Client Management Port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1749
+msgid ""
+"Use a different management port on clients. The default port is 166. Specify "
+"a different port if the client machines need to select from multiple OpenVPN "
+"links."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1779
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN server "
+"configuration here, separated by a semicolon"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1832
+msgid "Protocol / Port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1874
+msgid "Do you really want to delete this server?"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1887
+msgid "Additional OpenVPN servers can be added here."
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:99
+msgid "The PPPoE entry list has been changed"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:112 usr/local/www/vpn_pppoe.php:147
+msgid "add a new pppoe instance"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:134
+msgid "edit PPPoE instance"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:135
+msgid ""
+"Do you really want to delete this entry? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:135
+msgid "delete pppoe instance"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:138
+msgid "The specified server address is equal to an interface ip address."
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:143
+#, php-format
+msgid "No password specified for username %s"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:145
+#, php-format
+msgid "Incorrect ip address specified for username %s"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:151
+msgid "Wrong data submitted"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:366
+msgid "PPPoE server configuration"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:379
+msgid "Enable PPPoE server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:402
+msgid "Subnet netmask"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:415
+msgid "Hint"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:419
+msgid "No. PPPoE users"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:432
+msgid "Hint: 10 is ten PPPoE clients"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:440
+msgid ""
+"Enter the IP address the PPPoE server should give to clients for use as "
+"their \"gateway\""
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/vpn_pptp.php:374
+msgid "Remote address range"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:452
+msgid "Specify the starting address for the client IP address subnet"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:469
+msgid ""
+"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN "
+"DNS will go to all clients"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:477 usr/local/www/vpn_pptp.php:403
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:484 usr/local/www/vpn_pptp.php:409
+msgid "Sends accounting packets to the RADIUS server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:486
+msgid "Use Backup RADIUS Server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:487
+msgid ""
+"When set, if primary server fails all requests will be sent via backup server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:490
+msgid "NAS IP Address"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:493
+msgid "RADIUS server NAS IP Address"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:497 usr/local/www/vpn_pptp.php:427
+msgid "RADIUS Accounting Update"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:500
+msgid "RADIUS accounting update period in seconds"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pptp.php:416
+msgid "RADIUS issued IPs"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:507
+msgid "Issue IP Addresses via RADIUS server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:510
+msgid "RADIUS server Primary"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:515
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the RADIUS server."
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:516 usr/local/www/vpn_pppoe_edit.php:532
+msgid "standard port 1812 and 1813 accounting"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:519
+msgid "RADIUS primary shared secret"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:522 usr/local/www/vpn_pppoe_edit.php:539
+#: usr/local/www/vpn_pptp.php:446
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:526
+msgid "RADIUS server Secondary"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:531
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the backup RADIUS server."
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:535
+msgid "RADIUS secondary shared secret"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:543
+msgid "User (s)"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:611
+msgid ""
+"don't forget to add a firewall rule to permit traffic from PPPoE clients"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:121
+msgid "PPTP redirection target address"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:126
+msgid "A valid target address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:197 usr/local/www/vpn_pptp_users.php:72
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "VPN PPTP"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:301
+msgid ""
+"PPTP is no longer considered a secure VPN technology because it relies upon "
+"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware "
+"that intercepted traffic can be decrypted by a third party, so it should be "
+"considered unencrypted. We advise migrating to another VPN type such as "
+"OpenVPN or IPsec.<br /><br /><a href=\"https://isc.sans.edu/diary/End+of+Days"
+"+for+MS-CHAPv2/13807\">Read More</a>"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:327
+msgid "Redirect incoming PPTP connections to"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:330
+msgid "PPTP redirection"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:334
+msgid ""
+"Enter the IP address of a host which will accept incoming PPTP connections"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:341
+msgid "Enable PPTP server"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:344
+msgid "No. PPTP users"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:358
+msgid "Hint: 10 is ten PPTP clients"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:366
+msgid ""
+"Enter the IP address the PPTP server should give to clients for use as their "
+"\"gateway\""
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:379
+msgid "Specify the starting address for the client IP subnet"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:383
+msgid "PPTP DNS Servers"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:389
+msgid "primary and secondary DNS servers assigned to PPTP clients"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:412
+msgid "Secondary RADIUS server for failover authentication"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:413
+msgid ""
+"When set, all requests will go to the secondary server when primary fails"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:417
+msgid "Issue IP addresses via RADIUS server"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:421
+msgid "RADIUS NAS IP"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:439 usr/local/www/vpn_pptp.php:456
+msgid ""
+"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS "
+"server"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:459
+msgid "Secondary RADIUS shared secret"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:463
+msgid ""
+"Enter the shared secret that will be used to authenticate to the secondary "
+"RADIUS server"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:473
+msgid "Require 128-bit encryption"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:474
+msgid ""
+"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-"
+"bit encryption will be accepted as well. Note that encryption will always be "
+"forced on PPTP connections (i.e. unencrypted connections will not be "
+"accepted)"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:488
+msgid "don't forget to "
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:488
+msgid "add a firewall rule"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:488
+msgid "to permit traffic from PPTP clients"
+msgstr ""
+
+#: usr/local/www/vpn_pptp_users.php:85
+msgid "The PPTP user list has been modified"
+msgstr ""
+
+#: usr/local/www/vpn_pptp_users.php:85
+msgid "Warning: this will terminate all current PPTP sessions"
+msgstr ""
+
+#: usr/local/www/vpn_pptp_users_edit.php:91
+msgid "The password cannot start with '!'."
+msgstr ""
+
+#: usr/local/www/vpn_pptp_users_edit.php:161
+msgid "If you want to change the users' password, enter it here twice."
+msgstr ""
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81
+msgid "Int."
+msgstr ""
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:134
+msgid "Checking ..."
+msgstr ""
+
+#: usr/local/www/widgets/widgets/log.widget.php:180
+msgid "IF"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+msgid "Drive"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:39
+msgid "Ident"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:133
+msgid "Obtaining update status"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:139
+msgid "Platform"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:157
+msgid "NanoBSD Boot Slice"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:168
+msgid "CPU Type"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:183
+msgid "Hardware crypto"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:188
+msgid "Uptime"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:192
+msgid "Current date/time"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:198
+msgid "DNS server(s)"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:210
+msgid "Last config change"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:215
+msgid "State table size"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:223
+msgid "Show states"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:227
+msgid "MBUF Usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:239
+msgid "Temperature"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:248
+msgid "Load average"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:254
+msgid "CPU usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:261
+msgid "Memory usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:270
+msgid "SWAP usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:279
+msgid "Disk usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:44
+msgid "Computer / Device"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:70
+msgid "Wake Up"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:75
+msgid "No saved WoL addresses"
+msgstr ""
+
+#: usr/local/www/wizard.php:66 usr/local/www/wizard.php:72
+#, php-format
+msgid "ERROR: Could not open %s."
+msgstr ""
+
+#: usr/local/www/wizard.php:78
+#, php-format
+msgid "ERROR: Could not parse %s/wizards/%s file."
+msgstr ""
+
+#: usr/local/www/wizards/openvpn_wizard.inc:626
+#: usr/local/www/wizards/openvpn_wizard.inc:643
+#, php-format
+msgid "OpenVPN %s wizard"
+msgstr ""
+
+#: usr/local/www/wizards/openvpn_wizard.inc:638
+#: usr/local/www/wizards/openvpn_wizard.inc:653
+msgid "OpenVPN Wizard"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:60
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:63
+msgid "You need to specify the number of connections."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:65
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:68
+msgid "The number of connections should be greater than 1."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:90
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:104
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:111
+msgid "You have less interfaces than number of connections!"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:302
+msgid "You cannot specify bandwidth smaller than 1!"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:313
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:336
+msgid "You cannot select the same interface for local and outside."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:495
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:591
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:538
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:641
+msgid ""
+"Address must be a valid IP address or Firewall Alias. Please correct this "
+"value to continue."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:579
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:608
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:629
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:656
+msgid "Only percentage bandwidth specification is allowed."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:762
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1146
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:811
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1209
+msgid ""
+"Custom Bandwidths are greater than 30%. Please lower them for the wizard to "
+"continue."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1448
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1517
+msgid "Penalty Box"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1455
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1475
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1489
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1506
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1525
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1549
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1628
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1545
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1559
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1576
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1595
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1619
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1699
+msgid "Traffic Shaper Wizard"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1537
+msgid "Connections From Upstream SIP Server"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1481
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1551
+msgid "Connections To Upstream SIP Server"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:74
+msgid "You need to specify the number of LAN type interfaces."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:79
+msgid "The number of LAN type interfaces should be greater than 1."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:323
+msgid "You cannot specify 0 bandwidth!"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:345
+msgid "You cannot select the same interface twice on local interfaces."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:68
+msgid "Authentication failed"
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:79
+msgid ""
+"XMLRPC wrapper for eval(). This method must be called with two parameters: a "
+"string containing the local system\\'s password followed by the PHP code to "
+"evaluate."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:110
+msgid ""
+"XMLRPC wrapper for mwexec(). This method must be called with two parameters: "
+"a string containing the local system\\'s password followed by an shell "
+"command to execute."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:134
+msgid ""
+"XMLRPC wrapper for backup_config_section. This method must be called with "
+"two parameters: a string containing the local system\\'s password followed "
+"by an array containing the keys to be backed up."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:162
+msgid ""
+"XMLRPC wrapper for restore_config_section. This method must be called with "
+"two parameters: a string containing the local system\\'s password and an "
+"array to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:229 usr/local/www/xmlrpc.php:320
+#: usr/local/www/xmlrpc.php:351
+#, php-format
+msgid "Merged in config (%s sections) from XMLRPC client."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:296
+msgid ""
+"XMLRPC wrapper for merging package sections. This method must be called with "
+"two parameters: a string containing the local system\\'s password and an "
+"array to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:326
+msgid ""
+"XMLRPC wrapper for merge_config_section. This method must be called with two "
+"parameters: a string containing the local system\\'s password and an array "
+"to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:356
+msgid ""
+"Basic XMLRPC wrapper for filter_configure. This method must be called with "
+"one paramater: a string containing the local system\\'s password. This "
+"function returns true upon completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:393
+msgid "Basic XMLRPC wrapper for configuring CARP interfaces."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:420 usr/local/www/xmlrpc.php:441
+msgid ""
+"Basic XMLRPC wrapper for check_firmware_version. This function will return "
+"the output of check_firmware_version upon completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:462
+msgid "Basic XMLRPC wrapper for rc.reboot."
+msgstr ""
diff --git a/src/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po b/src/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po
new file mode 100644
index 0000000..6b417dc
--- /dev/null
+++ b/src/usr/local/share/locale/ja/LC_MESSAGES/pfSense.po
@@ -0,0 +1,48738 @@
+# Language translation for pfSense project.
+# Copyright (C) 2011-2015 Electric Sheep Fencing LLC
+# This file is distributed under the same license as the pfSense package.
+# Kiyo Takami and Isaac (.ike) Levy, 2013.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.1\n"
+"Report-Msgid-Bugs-To: foof@blackskyresearch.net\n"
+"POT-Creation-Date: 2013-12-31 18:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: The Foof <foof@blackskyresearch.net>\n"
+"Language-Team: JAPANESE <foof@blackskyresearch.net>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: vim(1), awk(1), sed(1)\n, https://github.com/soimort/google-translate-cli"
+"X-Machinegen: translate.google.com"
+
+#: etc/inc/PEAR.inc:161
+#, php-format
+msgid "PEAR constructor called, class=%s\n"
+msgstr "ã¨å‘¼ã°ã‚Œã‚‹PEARã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã€ã‚¯ãƒ©ã‚¹="
+
+#: etc/inc/PEAR.inc:198
+#, php-format
+msgid "PEAR destructor called, class=%s\n"
+msgstr "ã¨å‘¼ã°ã‚Œã‚‹PEARã®ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã€ã‚¯ãƒ©ã‚¹="
+
+#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632
+msgid "invalid error callback"
+msgstr "エラー·コールãƒãƒƒã‚¯ç„¡åŠ¹"
+
+#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637
+msgid "invalid error mode"
+msgstr "エラーモード無効"
+
+#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451
+msgid "The expected error you submitted does not exist"
+msgstr "ã‚ãªãŸãŒæ出ã—ãŸäºˆæƒ³ã•ã‚Œã‚‹ã‚¨ãƒ©ãƒ¼ãŒå­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“"
+
+#: etc/inc/PEAR.inc:455
+msgid "The expected error you submitted is empty"
+msgstr "ã‚ãªãŸãŒæ出ã—ãŸäºˆæƒ³ã•ã‚Œã‚‹ã‚¨ãƒ©ãƒ¼ã¯ç©ºã§ã™"
+
+#: etc/inc/PEAR.inc:866
+msgid ""
+"PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions"
+msgstr "PEAR_ERROR_EXCEPTIONã¯ä¾‹å¤–ã®å»ƒæ­¢ã•ã‚Œã€ä½¿ç”¨ã‚¯ãƒ©ã‚¹ã®PEAR_ErrorStackã§ã™"
+
+#: etc/inc/PEAR.inc:1023
+#, php-format
+msgid ""
+"[%s: message="%s" code=%d mode=callback callback=%s prefix="%s" info="%s"
+""]"
+msgstr ""((%s: message="%s" code=%d mode=callback callback=%s prefix="%s" info="%s""))"
+
+#: etc/inc/PEAR.inc:1041
+#, php-format
+msgid "[%s: message="%s" code=%d mode=%s level=%s prefix="%s" info="%s"]"
+msgstr "((%s: message="%s" code=%d mode=%s level=%s prefix="%s" info="%s"))"
+
+#: etc/inc/array_intersect_key.inc:37 etc/inc/array_intersect_key.inc:37
+msgid "Wrong parameter count for array_intersect_key()"
+msgstr "é–“é•ã£ãŸãƒ‘ラメータ数 array_intersect_key.()"
+
+#: etc/inc/array_intersect_key.inc:45 etc/inc/array_intersect_key.inc:45
+msgid "array_intersect_key() Argument #"
+msgstr "array_intersect_key.() アーギュメント #"
+
+#: etc/inc/array_intersect_key.inc:46 etc/inc/array_intersect_key.inc:46
+msgid " is not an array"
+msgstr " ã¯é…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/auth.inc:100 etc/inc/auth.inc:100
+msgid ""
+"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/"
+"DNS_rebinding<br />Try accessing the router by IP address instead of by "
+"hostname."
+msgstr ""検出ã•ã‚ŒãŸæ½œåœ¨çš„ãªDNSå†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒ, 見る http://en.wikipedia.org/wiki/"DNS_rebinding<br />"IPアドレスã§ãƒ«ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ä»£ã‚ã‚Šã«ãƒ›ã‚¹ãƒˆåã§ã¿ã¦ãã ã•ã„。"
+
+#: etc/inc/auth.inc:115 etc/inc/auth.inc:115
+msgid "Redirecting..."
+msgstr "リダイレクト..."
+
+#: etc/inc/auth.inc:115 etc/inc/auth.inc:115
+msgid "Redirecting to the dashboard..."
+msgstr "ダッシュボードã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ..."
+
+#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406
+#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609
+#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331
+#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487
+#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:311
+#: etc/inc/auth.inc:331 etc/inc/auth.inc:402 etc/inc/auth.inc:431
+#: etc/inc/auth.inc:487 etc/inc/auth.inc:618 etc/inc/auth.inc:630
+#, php-format
+msgid "Running: %s"
+msgstr "%s 実行中"
+
+#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796
+#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737
+#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053
+#: etc/inc/auth.inc:806 etc/inc/auth.inc:1057 etc/inc/auth.inc:665
+#: etc/inc/auth.inc:737 etc/inc/auth.inc:806 etc/inc/auth.inc:1057
+#, php-format
+msgid "ERROR! Could not connect to server %s."
+msgstr "エラー!サーãƒãƒ¼%sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:683
+#, php-format
+msgid "LDAP: Could not lookup CA by reference for host %s."
+msgstr "LDAP:ホスト%sã‚’å‚ç…§ã—ãŸçµæžœã€CAを検索ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:793
+#: etc/inc/auth.inc:793
+msgid ""
+"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication "
+"server defined."
+msgstr "エラー! ldap_get_user_ous.() ãŒå®šç¾©ã•ã‚Œã¦ã„ãªã„LDAPèªè¨¼ã‚µãƒ¼ãƒã¨é¸æŠžã—ãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—。"
+
+#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:818
+#: etc/inc/auth.inc:818
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s."
+msgstr "エラー! ldap_get_user_ous.() サーãƒ%sã«åŒ¿åã§ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:823
+#: etc/inc/auth.inc:823
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind to server %s."
+msgstr "エラー! ldap_get_user_ous.() サーãƒ%sã‚’ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:919
+#: etc/inc/auth.inc:919
+#, php-format
+msgid "ERROR! ldap_get_groups() Could not connect to server %s."
+msgstr "エラー! ldap_get_groups.() サーãƒãƒ¼%sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:930
+#: etc/inc/auth.inc:930
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s."
+msgstr "エラー! ldap_get_groups.() サーãƒ%sã«åŒ¿åã§ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:935
+#: etc/inc/auth.inc:935
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind to server %s."
+msgstr "エラー! ldap_get_groups.() サーãƒ%sã‚’ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033
+#: etc/inc/auth.inc:1036 etc/inc/auth.inc:1036
+msgid ""
+"ERROR! ldap_backed() called with no LDAP authentication server defined. "
+"Defaulting to local user database. Visit System -> User Manager."
+msgstr ""エラー\! ldap_backed.() ã¯LDAPèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®å®šç¾©ãªã呼ã³å‡ºã•ã‚Œã¾ã—ãŸã€‚"ローカルユーザデータベースã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã€‚"㸠システム -> ユーザーマãƒãƒ¼ã‚¸ãƒ£"
+
+#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036
+#: etc/inc/auth.inc:1039 etc/inc/auth.inc:1039
+msgid "ERROR! ldap_backed() called with no LDAP authentication server defined."
+msgstr "エラー! ldap_backed.() ã¯LDAPèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®å®šç¾©ãªã呼ã³å‡ºã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067
+#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1071
+#, php-format
+msgid "ERROR! Could not bind to server %s."
+msgstr "エラー! サーãƒãƒ¼%sã«ãƒã‚¤ãƒ³ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084
+#: etc/inc/auth.inc:1085 etc/inc/auth.inc:1089 etc/inc/auth.inc:1089
+#, php-format
+msgid "Now Searching for %s in directory."
+msgstr "ディレクトリ内ã§%sを検索中。"
+
+#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088
+#: etc/inc/auth.inc:1090 etc/inc/auth.inc:1094 etc/inc/auth.inc:1094
+#, php-format
+msgid "Now Searching in server %1$s, container %2$s with filter %3$s."
+msgstr "サーãƒãƒ¼%1$sã¨ã‚³ãƒ³ãƒ†ãƒŠ%2$s内をフィルター%3$sã§æ¤œç´¢ä¸­ã€‚"
+
+#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099
+#: etc/inc/auth.inc:1101 etc/inc/auth.inc:1105 etc/inc/auth.inc:1105
+#, php-format
+msgid "Search resulted in error: %s"
+msgstr "検索çµæžœã‚¨ãƒ©ãƒ¼ï¼š%s"
+
+#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115
+#: etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 etc/inc/auth.inc:1121
+msgid "ERROR! Either LDAP search failed, or multiple users were found."
+msgstr "エラー! LDAP検索ã«å¤±æ•—ã—ã¾ã—ãŸã€ã¾ãŸã¯è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121
+#: etc/inc/auth.inc:1123
+#, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s."
+msgstr "エラー! ユーザーå%2$sã¯ã‚µãƒ¼ãƒ%1$sã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126
+#: etc/inc/auth.inc:1129 etc/inc/auth.inc:1133 etc/inc/auth.inc:1133
+#, php-format
+msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s."
+msgstr "DN = %3$sã¨LDAPサーãƒãƒ¼%2$s経由%1$sã¨ã—ã¦æ­£å¸¸ã«ãƒ­ã‚°ã‚¤ãƒ³ã—"
+
+#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157
+#: etc/inc/auth.inc:1163 etc/inc/auth.inc:1167 etc/inc/auth.inc:1167
+#, php-format
+msgid "Radius start: %s<br />\n"
+msgstr "RADIUSスタート: "
+
+#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168
+#: etc/inc/auth.inc:1174 etc/inc/auth.inc:1178 etc/inc/auth.inc:1178
+#, php-format
+msgid "Radius send failed: %s<br />\n"
+msgstr "RADIUSé€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ: %s<br />\n"
+
+#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174
+#: etc/inc/auth.inc:1180 etc/inc/auth.inc:1184 etc/inc/auth.inc:1184
+#, php-format
+msgid "Radius Auth succeeded"
+msgstr "RADIUSèªè¨¼ãŒæˆåŠŸã—ã¾ã—ãŸ"
+
+#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179
+#: etc/inc/auth.inc:1185 etc/inc/auth.inc:1189 etc/inc/auth.inc:1189
+#, php-format
+msgid "Radius Auth rejected"
+msgstr "RADIUSèªè¨¼ã¯æ‹’å¦"
+
+#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218
+#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228
+#: etc/inc/auth.inc:1243 etc/inc/auth.inc:1232 etc/inc/auth.inc:1247
+#: etc/inc/auth.inc:1232 etc/inc/auth.inc:1247
+msgid "Local Database"
+msgstr "ローカルデータベース"
+
+#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218
+#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237
+msgid "Local Auth"
+msgstr "ローカルèªè¨¼"
+
+#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321
+#: etc/inc/auth.inc:1327 etc/inc/auth.inc:1331 etc/inc/auth.inc:1331
+#, php-format
+msgid "Successful login for user '%1$s' from: %2$s"
+msgstr "%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŸã‚ã®ãƒ­ã‚°ã‚¤ãƒ³ã«æˆåŠŸ"
+
+#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375
+#: etc/inc/auth.inc:1381 etc/inc/auth.inc:1385 etc/inc/auth.inc:1385
+#, php-format
+msgid "Session timed out for user '%1$s' from: %2$s"
+msgstr "セッションã¯%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŸã‚タイムアウトã—ã¾ã—ãŸ"
+
+#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377
+#: etc/inc/auth.inc:1383 etc/inc/auth.inc:1387 etc/inc/auth.inc:1387
+#, php-format
+msgid "User logged out for user '%1$s' from: %2$s"
+msgstr "ユーザーã¯%2$sã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼'%1$s'ãŒãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹"
+
+#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383
+#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335
+#: etc/inc/captiveportal.inc:1338 etc/inc/captiveportal.inc:1338
+#, php-format
+msgid "Error: cannot open '%s' in captiveportal_write_elements()%s"
+msgstr "エラー: captiveportal_write_elements.()%s を処ç†'%s'ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/config.inc:100 etc/inc/config.inc:100
+msgid "Upgrading m0n0wall configuration to pfSense... "
+msgstr "pfSenseã«m0n0wall構æˆã®ã‚¢ãƒƒãƒ—グレード... "
+
+#: etc/inc/config.inc:103 etc/inc/config.inc:103
+msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml"
+msgstr "エラー! m0n0wallã¯config.xmlã«pfsenseã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/config.inc:133 etc/inc/config.inc:133
+msgid "CDROM build"
+msgstr "CD-ROMã®ãƒ“ルド"
+
+#: etc/inc/config.inc:134 etc/inc/config.inc:135 etc/inc/config.inc:134
+#: etc/inc/config.inc:135
+msgid "CFG:"
+msgstr "CFG:"
+
+#: etc/inc/config.inc:136 etc/inc/config.inc:136
+msgid "TYPE:"
+msgstr "タイプ:"
+
+#: etc/inc/config.inc:151 etc/inc/config.inc:166 etc/inc/config.inc:151
+#: etc/inc/config.inc:166
+#, php-format
+msgid "Found configuration on %s.%s"
+msgstr "%s.%sタブã®è¨­å®š"
+
+#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105
+#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245
+#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267
+#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105
+#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245
+#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267
+msgid "No config.xml found, attempting last known config restore."
+msgstr "ã„ã„ãˆconfig.xmlã«ã¯æœ€å¾Œã®æ—¢çŸ¥ã®è¨­å®šã®å¾©å…ƒã‚’試ã¿ã¦ã€è¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸã€‚"
+
+#: etc/inc/config.inc:184 etc/inc/config.inc:184
+msgid "No config.xml or config backups found, resetting to factory defaults."
+msgstr "å…¨ãconfig.xmlや設定ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—工場出è·æ™‚設定ã¸ã®ãƒªã‚»ãƒƒãƒˆã€è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193
+#: etc/inc/filter.inc:168 etc/inc/filter.inc:168
+msgid "Initializing"
+msgstr "イニシャライズ"
+
+#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205
+#: etc/inc/filter.inc:180 etc/inc/filter.inc:180
+msgid "Configuring firewall"
+msgstr "設定ファイアウォール"
+
+#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210
+#: etc/inc/filter.inc:185 etc/inc/filter.inc:185
+msgid "Creating aliases"
+msgstr "エイリアスã®ä½œæˆ"
+
+#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193
+#: etc/inc/filter.inc:193
+msgid "Generating NAT rules"
+msgstr "NATã®ãƒ«ãƒ¼ãƒ«ã‚’生æˆã™ã‚‹"
+
+#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198
+#: etc/inc/filter.inc:198
+msgid "Generating filter rules"
+msgstr "フィルタルールを生æˆã™ã‚‹"
+
+#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204
+#: etc/inc/filter.inc:204
+msgid "Generating ALTQ queues"
+msgstr "ALTQキューを生æˆã™ã‚‹"
+
+#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215
+#: etc/inc/filter.inc:190 etc/inc/filter.inc:190
+msgid "Generating Limiter rules"
+msgstr "リミッタールールを生æˆã™ã‚‹"
+
+#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231
+#: etc/inc/filter.inc:206 etc/inc/filter.inc:206
+msgid "Generating Layer7 rules"
+msgstr "生æˆãƒ¬ã‚¤ãƒ¤7ルール"
+
+#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235
+#: etc/inc/filter.inc:210 etc/inc/filter.inc:210
+msgid "Loading filter rules"
+msgstr "フィルタルールã®ãƒ­ãƒ¼ãƒ‰"
+
+#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242
+#: etc/inc/filter.inc:217 etc/inc/filter.inc:217
+msgid "Filter is disabled. Not loading rules."
+msgstr "フィルタãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ルールをロードã—ã¦ã„ãªã„。"
+
+#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217
+#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360
+#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664
+#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964
+#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780
+#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596
+#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696
+#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755
+#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805
+#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829
+#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861
+#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984
+#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054
+#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073
+#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095
+#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899
+#: etc/inc/services.inc:1234 etc/inc/services.inc:1297
+#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674
+#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278
+#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699
+#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249
+#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612
+#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645
+#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737
+#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841
+#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865
+#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897
+#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021
+#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091
+#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110
+#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132
+#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219
+#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362
+#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671
+#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991
+#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806
+#: etc/inc/services.inc:1028 etc/inc/services.inc:1370
+#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245
+#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726
+#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376
+#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613
+#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646
+#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738
+#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813
+#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849
+#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882
+#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005
+#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047
+#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101
+#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126
+#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152
+#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235
+#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411
+#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950
+#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005
+#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160
+#: etc/inc/services.inc:1509 etc/inc/services.inc:1573
+#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423
+#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411
+#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658
+#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758
+#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817
+#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:884
+#: etc/inc/pkg-utils.inc:901 etc/inc/pkg-utils.inc:917
+#: etc/inc/pkg-utils.inc:933 etc/inc/pkg-utils.inc:1040
+#: etc/inc/pkg-utils.inc:1057 etc/inc/pkg-utils.inc:1082
+#: etc/inc/pkg-utils.inc:1127 etc/inc/pkg-utils.inc:1136
+#: etc/inc/pkg-utils.inc:1146 etc/inc/pkg-utils.inc:1161
+#: etc/inc/pkg-utils.inc:1168 etc/inc/pkg-utils.inc:1187
+#: etc/inc/interfaces.inc:216 etc/inc/interfaces.inc:233
+#: etc/inc/interfaces.inc:365 etc/inc/interfaces.inc:422
+#: etc/inc/interfaces.inc:697 etc/inc/interfaces.inc:1033
+#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069
+#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154
+#: etc/inc/services.inc:1499 etc/inc/services.inc:1596
+#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735
+#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318
+#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 etc/inc/filter.inc:399
+#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1516
+#: etc/inc/services.inc:1628 etc/inc/services.inc:1837 etc/inc/rrd.inc:831
+#: etc/inc/services.inc:1659 etc/inc/services.inc:1868 etc/inc/rrd.inc:834
+#: etc/inc/filter.inc:219 etc/inc/filter.inc:399 etc/inc/pkg-utils.inc:411
+#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658
+#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758
+#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817
+#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:877
+#: etc/inc/pkg-utils.inc:884 etc/inc/pkg-utils.inc:901
+#: etc/inc/pkg-utils.inc:917 etc/inc/pkg-utils.inc:933
+#: etc/inc/pkg-utils.inc:1040 etc/inc/pkg-utils.inc:1057
+#: etc/inc/pkg-utils.inc:1082 etc/inc/pkg-utils.inc:1127
+#: etc/inc/pkg-utils.inc:1136 etc/inc/pkg-utils.inc:1146
+#: etc/inc/pkg-utils.inc:1161 etc/inc/pkg-utils.inc:1168
+#: etc/inc/pkg-utils.inc:1187 etc/inc/interfaces.inc:216
+#: etc/inc/interfaces.inc:233 etc/inc/interfaces.inc:365
+#: etc/inc/interfaces.inc:422 etc/inc/interfaces.inc:697
+#: etc/inc/interfaces.inc:1005 etc/inc/interfaces.inc:1033
+#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069
+#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1212
+#: etc/inc/services.inc:1568 etc/inc/services.inc:1723
+#: etc/inc/services.inc:1932 etc/inc/system.inc:771 etc/inc/system.inc:794
+#: etc/inc/system.inc:874 etc/inc/system.inc:1237 etc/inc/system.inc:1377
+#: etc/inc/system.inc:1516 etc/inc/rrd.inc:834
+msgid "done."
+msgstr "完了。"
+
+#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289
+#: etc/inc/filter.inc:269 etc/inc/filter.inc:269
+msgid "Setting up logging information"
+msgstr "ログ情報ã®è¨­å®š"
+
+#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274
+#: etc/inc/filter.inc:274
+msgid "Setting up SCRUB information"
+msgstr "SCRUB情報を設定ã™ã‚‹"
+
+#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341
+#: etc/inc/filter.inc:313 etc/inc/filter.inc:313
+#, php-format
+msgid "The line in question reads [%1$d]: %2$s"
+msgstr "%2$s:å•é¡Œã®è¡Œã¯((%1$d))を読ã¿è¾¼ã¿"
+
+#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342
+#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316
+#: etc/inc/filter.inc:317 etc/inc/filter.inc:316 etc/inc/filter.inc:317
+#, php-format
+msgid "There were error(s) loading the rules: %1$s - %2$s"
+msgstr "ルールã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ï¼ˆS)ãŒã‚ã‚Šã¾ã—ãŸï¼š%1$s - %2$s"
+
+#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354
+#: etc/inc/filter.inc:324 etc/inc/filter.inc:324
+msgid "PF was wedged/busy and has been reset."
+msgstr "PFã¯å¿™ã—ã„/押ã—è¾¼ã¾ã‚Œã€ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360
+#: etc/inc/filter.inc:329 etc/inc/filter.inc:333 etc/inc/filter.inc:333
+msgid "Starting up layer7 daemon"
+msgstr "レイヤ7デーモンを起動"
+
+#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408
+#: etc/inc/filter.inc:380 etc/inc/filter.inc:384 etc/inc/filter.inc:384
+msgid "Processing down interface states"
+msgstr "ç•Œé¢æº–ä½ã‚’下処ç†"
+
+#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412
+#: etc/inc/filter.inc:384 etc/inc/filter.inc:388 etc/inc/filter.inc:388
+msgid "Running plugins"
+msgstr "プラグインを実行ã—ã¦ã„ã‚‹"
+
+#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416
+#: etc/inc/filter.inc:388 etc/inc/filter.inc:392 etc/inc/filter.inc:392
+msgid "Running plugins (pf)"
+msgstr "実行ã•ã‚Œã¦ã„るプラグイン(PF)"
+
+#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418
+#: etc/inc/filter.inc:390 etc/inc/filter.inc:394 etc/inc/filter.inc:394
+msgid "Plugins completed."
+msgstr "プラグイン完了"
+
+#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52
+#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58
+#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418
+#: etc/inc/filter.inc:421 etc/inc/filter.inc:393 etc/inc/filter.inc:397
+#: usr/local/www/restart_httpd.php:52 usr/local/www/restart_httpd.php:55
+#: usr/local/www/restart_httpd.php:58 usr/local/www/restart_httpd.php:61
+#: etc/inc/filter.inc:397
+msgid "Done"
+msgstr "è¡Œã†"
+
+#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652
+#: etc/inc/filter.inc:641 etc/inc/filter.inc:657 etc/inc/filter.inc:652
+msgid "Creating gateway group item..."
+msgstr "ゲートウェイ·グループ項目を作æˆã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684
+#: etc/inc/filter.inc:673 etc/inc/filter.inc:687 etc/inc/filter.inc:692
+#: etc/inc/filter.inc:687
+#, php-format
+msgid "Setting up route with %1$s on %2$s"
+msgstr "%2$sã®ä¸Šã®%1$sã§ãƒ«ãƒ¼ãƒˆã‚’設定ã™ã‚‹"
+
+#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691
+#: etc/inc/filter.inc:680 etc/inc/filter.inc:694 etc/inc/filter.inc:699
+#: etc/inc/filter.inc:694
+#, php-format
+msgid ""
+"An error occurred while trying to find the interface got %s . The rule has "
+"not been added."
+msgstr ""インタフェースã¯%sã‚’æŒã£è¦‹ã¤ã‘よã†ã¨ã—ã¦ã„ã‚‹ã¨ãã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"ルールãŒè¿½åŠ ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975
+#: etc/inc/filter.inc:1009 etc/inc/filter.inc:1027 etc/inc/filter.inc:1032
+#: etc/inc/filter.inc:1027
+#, php-format
+msgid "Creating reflection NAT rule for %s..."
+msgstr "%sã®ãŸã‚ã®åå°„NATルールを作æˆã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064
+#: etc/inc/filter.inc:1098 etc/inc/filter.inc:1116 etc/inc/filter.inc:1121
+#: etc/inc/filter.inc:1116
+#, php-format
+msgid "Creating reflection rule for %s..."
+msgstr "%sã®ãŸã‚ã®åå°„ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326
+#: etc/inc/filter.inc:1360 etc/inc/filter.inc:1378 etc/inc/filter.inc:1383
+#: etc/inc/filter.inc:1378
+msgid "Creating 1:1 rules..."
+msgstr "1:1ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454
+#: etc/inc/filter.inc:1501 etc/inc/filter.inc:1519 etc/inc/filter.inc:1524
+#: etc/inc/filter.inc:1519
+#, php-format
+msgid "Creating advanced outbound rule %s"
+msgstr "高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ãƒ«ãƒ¼ãƒ«%sを作æˆ"
+
+#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490
+#: etc/inc/filter.inc:1533 etc/inc/filter.inc:1551 etc/inc/filter.inc:1556
+#: etc/inc/filter.inc:1551
+msgid "Creating outbound NAT rules"
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰NATルールを作æˆã™ã‚‹"
+
+#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583
+#: etc/inc/filter.inc:1626 etc/inc/filter.inc:1644 etc/inc/filter.inc:1649
+#: etc/inc/filter.inc:1644
+#, php-format
+msgid "Creating outbound rules %1$s - (%2$s)"
+msgstr "%1$s - (%2$s) をアウトãƒã‚¦ãƒ³ãƒ‰ãƒ«ãƒ¼ãƒ«ã®ä½œæˆ"
+
+#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601
+#: etc/inc/filter.inc:1644 etc/inc/filter.inc:1662 etc/inc/filter.inc:1667
+#: etc/inc/filter.inc:1662
+msgid "Setting up TFTP helper"
+msgstr "TFTPヘルパーã®è¨­å®š"
+
+#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644
+#: etc/inc/filter.inc:1676 etc/inc/filter.inc:1694 etc/inc/filter.inc:1699
+#: etc/inc/filter.inc:1694
+#, php-format
+msgid "Creating NAT rule %s"
+msgstr "NATルール%sã¯ä½œæˆ"
+
+#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850
+#: etc/inc/filter.inc:1882 etc/inc/filter.inc:1900 etc/inc/filter.inc:1905
+#: etc/inc/filter.inc:1900
+#, php-format
+msgid "Creating filter rule %s ..."
+msgstr "フィルタルール%sã¯ä½œæˆ..."
+
+#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988
+#: etc/inc/filter.inc:2024 etc/inc/filter.inc:2054 etc/inc/filter.inc:2059
+#: etc/inc/filter.inc:2054
+#, php-format
+msgid "filter_generate_address: %s is not a valid source port."
+msgstr "filter_generate_address:%sã‚’ã€æœ‰åŠ¹ãªé€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107
+#: etc/inc/filter.inc:2142 etc/inc/filter.inc:2172 etc/inc/filter.inc:2177
+#: etc/inc/filter.inc:2172
+#, php-format
+msgid "Setting up pass/block rules %s"
+msgstr "パス/ブロックルール%sã®è¨­å®š"
+
+#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126
+#: etc/inc/filter.inc:2157 etc/inc/filter.inc:2187 etc/inc/filter.inc:2192
+#: etc/inc/filter.inc:2187
+#, php-format
+msgid "Could not find IPv4 gateway for interface (%s)."
+msgstr "インターフェイスã®IPv4ゲートウェイ(%s)を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153
+#: etc/inc/filter.inc:2182 etc/inc/filter.inc:2214 etc/inc/filter.inc:2219
+#: etc/inc/filter.inc:2214
+#, php-format
+msgid "Creating rule %s"
+msgstr "ルール%sを作æˆä¸­"
+
+#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378
+#: etc/inc/filter.inc:2407 etc/inc/filter.inc:2439 etc/inc/filter.inc:2444
+#: etc/inc/filter.inc:2439
+msgid "Creating default rules"
+msgstr "デフォルトã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆä¸­"
+
+#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887
+#: etc/inc/filter.inc:2976 etc/inc/filter.inc:3000 etc/inc/filter.inc:3005
+#: etc/inc/filter.inc:3000
+msgid "Creating IPsec rules..."
+msgstr "IPsecã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆä¸­..."
+
+#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940
+#: etc/inc/filter.inc:3026 etc/inc/filter.inc:3050 etc/inc/filter.inc:3055
+#: etc/inc/filter.inc:3050
+msgid ""
+"Please use filter_tdr_install_cron() function tdr_install_cron will be "
+"deprecated!"
+msgstr ""filter_tdr_install_cron.() を使用ã—ã¦ãã ã•ã„機能tdr_install_cronã¯ã¯å»ƒæ­¢ã•ã‚Œã¾ã™ï¼"
+
+#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986
+#: etc/inc/filter.inc:3072 etc/inc/filter.inc:3096 etc/inc/filter.inc:3101
+#: etc/inc/filter.inc:3096
+msgid "Installed 15 minute filter reload for Time Based Rules"
+msgstr "時間ベースã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•15分ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãƒªãƒ­ãƒ¼ãƒ‰"
+
+#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293
+#: etc/inc/filter.inc:3389 etc/inc/filter.inc:3413 etc/inc/filter.inc:3418
+#: etc/inc/filter.inc:3412
+#, php-format
+msgid "Checking for %1$s PF hooks in package %2$s"
+msgstr "パッケージ%2$sを処ç†%1$s PFフックã®ãƒã‚§ãƒƒã‚¯"
+
+#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299
+#: etc/inc/filter.inc:3395 etc/inc/filter.inc:3419 etc/inc/filter.inc:3424
+#: etc/inc/filter.inc:3418
+#, php-format
+msgid "Processing early %1$s rules for package %2$s"
+msgstr "パッケージ%2$sを早期%1$sã®ãƒ«ãƒ¼ãƒ«ã®å‡¦ç†"
+
+#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304
+#: etc/inc/filter.inc:3400 etc/inc/filter.inc:3424 etc/inc/filter.inc:3429
+#: etc/inc/filter.inc:3423
+#, php-format
+msgid "There was an error while parsing the package filter rules for %s."
+msgstr "%sã®ãƒ‘ッケージフィルタルール解æžä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53
+#: etc/inc/interfaces.inc:51
+msgid "interfaces_bring_up() was called but no variable defined."
+msgstr "interfaces_bring_up.() ãŒå‘¼ã³å‡ºã•ã—ã‹ã—ã€èª°å¤‰æ•°ãŒå®šç¾©ã•ã‚Œã¦ã„ãªã‹ã£ãŸã€‚"
+
+#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215
+#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212
+#: etc/inc/interfaces.inc:212
+msgid "Configuring loopback interface..."
+msgstr "ループãƒãƒƒã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’設定中..."
+
+#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226
+#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223
+#: etc/inc/interfaces.inc:223
+msgid "Configuring VLAN interfaces..."
+msgstr "VLANインターフェイスを設定中..."
+
+#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243
+#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240
+#: etc/inc/interfaces.inc:240
+msgid "VLAN: called with wrong options. Problems with config!"
+msgstr "VLAN:間é•ã£ãŸã‚ªãƒ—ションを使用ã—ã¦å‘¼ã³å‡ºã•ã€‚設定ã«å•é¡ŒãŒï¼"
+
+#: etc/inc/interfaces.inc:249
+msgid "interface_vlan_confgure called with if undefined."
+msgstr "定義ã•ã‚Œã¦ã„ãªã„å ´åˆã§å‘¼ã³å‡ºã•ã‚Œinterface_vlan_confgure。"
+
+#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367
+#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369
+#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368
+#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372
+#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372
+#, php-format
+msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s"
+msgstr "QinQã®äº’æ›VLAN:間é•ã£ãŸã‚ªãƒ—ションを使用ã—ã¦å‘¼ã³å‡ºã•ã€‚設定ã«å•é¡ŒãŒï¼%s"
+
+#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375
+#, php-format
+msgid "interface_qinq_confgure called with if undefined.%s"
+msgstr "ã¨å‘¼ã°interface_qinq_confgureå ´åˆundefined.%s"
+
+#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354
+#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357
+#: etc/inc/interfaces.inc:357
+msgid "Configuring QinQ interfaces..."
+msgstr "QinQサブインターフェイスã®è¨­å®š..."
+
+#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398
+#: etc/inc/interfaces.inc:397
+msgid "Creating other wireless clone interfaces..."
+msgstr "ä»–ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³Â·ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’作æˆä¸­..."
+
+#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438
+#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466
+#: etc/inc/interfaces.inc:466
+#, php-format
+msgid "No members found on %s"
+msgstr "%sã«ã¯ãƒ¡ãƒ³ãƒãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512
+#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541
+#: etc/inc/interfaces.inc:541
+msgid "realif not defined in interfaces bridge - up"
+msgstr "realifインターフェースブリッジã§å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“ - アップ"
+
+#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625
+#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654
+#: etc/inc/interfaces.inc:654
+msgid "bridgeif not defined -- could not bring interface up"
+msgstr "bridgeif定義ã•ã‚Œã¦ã„ãªã„ - インタフェースをæŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659
+#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685
+#: etc/inc/interfaces.inc:685
+msgid "Configuring LAGG interfaces..."
+msgstr "LAGGインターフェイスã®è¨­å®š..."
+
+#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801
+#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835
+#: etc/inc/interfaces.inc:835
+msgid "Could not bring greif up -- variable not defined."
+msgstr "変数定義ã•ã‚Œã¦ã„ã¾ã›ã‚“ - 最大グライフãªã‚Œãªã‹ã£ãŸã€‚"
+
+#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851
+#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899
+#: etc/inc/interfaces.inc:899
+msgid ""
+"could not bring realif up -- variable not defined -- "
+"interface_gif_configure()"
+msgstr ""変数ã«å®šç¾©ã•ã‚Œã¦ã„ãªã„ - - interface_gif_configure.()"を最大realifãªã‚Œãªã‹ã£ãŸ"
+
+#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874
+#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922
+#: etc/inc/interfaces.inc:922
+msgid "could not bring gifif up -- variable not defined"
+msgstr "変数定義ã•ã‚Œã¦ã„ã¾ã›ã‚“ - 最大gififãªã‚Œãªã‹ã£ãŸ"
+
+#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957
+#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945
+#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999
+#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983
+#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:1026
+#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062
+#: etc/inc/interfaces.inc:999 etc/inc/interfaces.inc:1026
+#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062
+#, php-format
+msgid "Configuring %s interface..."
+msgstr "%sã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’設定中..."
+
+#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959
+#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948
+#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001
+#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985
+#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002
+#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049
+#: etc/inc/interfaces.inc:1064 etc/inc/interfaces.inc:1002
+#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049
+#: etc/inc/interfaces.inc:1064
+#, php-format
+msgid "Configuring %s"
+msgstr "%s を設定中"
+
+#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339
+#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407
+#: etc/inc/interfaces.inc:1412 etc/inc/interfaces.inc:1412
+#, php-format
+msgid "Can't find PPP config for %s in interface_ppps_configure()."
+msgstr "interface_ppps_configure.() を処ç†%sã®PPP設定を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402
+#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464
+#: etc/inc/interfaces.inc:1469 etc/inc/interfaces.inc:1469
+#, php-format
+msgid ""
+"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in "
+"interfaces_ppps_configure."
+msgstr ""interfaces_ppps_configure中%2$sã‚’ãŸã‚%1$sã‹ã‚‰PPTP/L2TPリモート"IPアドレスをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409
+#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471
+#: etc/inc/interfaces.inc:1476 etc/inc/interfaces.inc:1476
+#, php-format
+msgid ""
+"Device %s does not exist. PPP link cannot start without the modem device."
+msgstr ""デãƒã‚¤ã‚¹%sã¯å­˜åœ¨ã—ã¾ã›ã‚“。 PPPリンクã¯ã€ãƒ¢ãƒ‡ãƒ è£…ç½®ãªã—ã§é–‹å§‹ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414
+#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476
+#: etc/inc/interfaces.inc:1481 etc/inc/interfaces.inc:1481
+#, php-format
+msgid "Unkown %s configured as ppp interface."
+msgstr "UNKOWN %sã¯ã€PPPインターフェイスã¨ã—ã¦è¨­å®šã€‚"
+
+#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686
+#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748
+#: etc/inc/interfaces.inc:1753 etc/inc/interfaces.inc:1753
+#, php-format
+msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s"
+msgstr "エラー:interface_ppps_configure.().%s を処ç†mpd_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771
+#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828
+#: etc/inc/interfaces.inc:1833 etc/inc/interfaces.inc:1833
+msgid "Configuring CARP settings..."
+msgstr "CARPを設定中..."
+
+#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788
+#: etc/inc/interfaces.inc:1787
+msgid "Enable CARP ARP-balancing"
+msgstr "CARP ARPãƒãƒ©ãƒ³ã‚¹ã‚’有効ã«ã™ã‚‹"
+
+#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789
+#: etc/inc/interfaces.inc:1788
+msgid "Disallow CARP preemption"
+msgstr "CARPプリエンプションをç¦æ­¢ã™ã‚‹"
+
+#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791
+#: etc/inc/interfaces.inc:1790
+msgid "Enable CARP preemption"
+msgstr "CARPプリエンプションを有効ã«ã™ã‚‹"
+
+#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793
+#: etc/inc/interfaces.inc:1792
+msgid "Enable CARP logging"
+msgstr "CARPã®ãƒ­ã‚°ã‚’有効ã«ã™ã‚‹"
+
+#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809
+#: etc/inc/interfaces.inc:1808
+msgid "Could not create rules.boot file!"
+msgstr "rules.bootファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815
+#: etc/inc/interfaces.inc:1814
+msgid "Bring up pfsync0 syncpeer"
+msgstr "pfsync0ã®syncpeerã‚’æŒã¡å‡ºã™"
+
+#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817
+#: etc/inc/interfaces.inc:1816
+msgid "Bring up pfsync0 syncdev"
+msgstr "pfsync0ã®syncdevã‚’æŒã¡å‡ºã™"
+
+#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819
+#: etc/inc/interfaces.inc:1818
+msgid "Bring up pfsync0"
+msgstr "pfsync0ã‚’æŒã¡å‡ºã™"
+
+#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833
+#: etc/inc/interfaces.inc:1837
+msgid "Allow CARP."
+msgstr "CARPを許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835
+#: etc/inc/interfaces.inc:1839
+msgid "Disallow CARP."
+msgstr "CARPã‚’ç¦æ­¢ã€‚"
+
+#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038
+#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099
+#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056
+#: etc/inc/interfaces.inc:2061 etc/inc/interfaces.inc:2061
+#, php-format
+msgid ""
+"Interface specified for the virtual IP address %s does not exist. Skipping "
+"this VIP."
+msgstr ""仮想IPアドレス%sã«æŒ‡å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒå­˜åœ¨ã—ã¾ã›ã‚“。ã“ã®VIPをスキップã™ã‚‹ã€‚"
+
+#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029
+#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065
+#: etc/inc/interfaces.inc:2070 etc/inc/interfaces.inc:2070
+#, php-format
+msgid ""
+"Sorry but we could not find a matching real interface subnet for the virtual "
+"IP address %s."
+msgstr ""申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€æˆ‘々ã¯ä»®æƒ³IPv4アドレス%sã®ãƒžãƒƒãƒãƒ³ã‚°å®Ÿéš›"ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038
+#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074
+#: etc/inc/interfaces.inc:2079 etc/inc/interfaces.inc:2079
+#, php-format
+msgid ""
+"Sorry but we could not find a matching real interface subnet for the virtual "
+"IPv6 address %s."
+msgstr ""申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€æˆ‘々ã¯ä»®æƒ³IPv6アドレス%sã®ãƒžãƒƒãƒãƒ³ã‚°å®Ÿéš›"ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/interfaces.inc:2084
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for "
+"writing.%s"
+msgstr ""エラー:writing.%s用interfaces_carpdev_configure.()を処ç†dhclient_%s.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185
+#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144
+#: etc/inc/interfaces.inc:2149 etc/inc/interfaces.inc:2149
+#, php-format
+msgid "Interface %s changed to hostap mode"
+msgstr "インターフェース%sã‚’hostapモードã«å¤‰æ›´"
+
+#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189
+#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148
+#: etc/inc/interfaces.inc:2153 etc/inc/interfaces.inc:2153
+#, php-format
+msgid "Interface %s changed to adhoc mode"
+msgstr "インターフェース%sã¯ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã«å¤‰æ›´"
+
+#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193
+#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152
+#: etc/inc/interfaces.inc:2157 etc/inc/interfaces.inc:2157
+#, php-format
+msgid "Interface %s changed to infrastructure mode"
+msgstr "インターフェース%sアドホックモードã«å¤‰æ›´"
+
+#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205
+#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164
+#: etc/inc/interfaces.inc:2169 etc/inc/interfaces.inc:2169
+#, php-format
+msgid "Cloning new wireless interface %s"
+msgstr "æ–°ã—ã„無線インタフェース%sã®ã‚¯ãƒ­ãƒ¼ãƒ³ä½œæˆ"
+
+#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210
+#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169
+#: etc/inc/interfaces.inc:2174 etc/inc/interfaces.inc:2174
+#, php-format
+msgid "Failed to clone interface %1$s with error code %2$s, output %3$s"
+msgstr "エラーコード%2$sã€å‡ºåŠ›%3$sã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯%1$sã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790
+#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761
+#: etc/inc/interfaces.inc:2784 etc/inc/interfaces.inc:2784
+msgid "Generating new MAC address."
+msgstr "æ–°ã—ã„MACアドレスを生æˆã™ã‚‹ã€‚"
+
+#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796
+#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767
+#: etc/inc/interfaces.inc:2790 etc/inc/interfaces.inc:2790
+#, php-format
+msgid ""
+"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been "
+"automatically replaced with %2$s"
+msgstr ""無効ãªMACアドレスã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯%1$s上(ff:ff:ff:ff:ff:ff)"ãŒè‡ªå‹•çš„%2$sã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸ"
+
+#: etc/inc/interfaces.inc:2910
+msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()"
+msgstr "terface_carpdev_dhcp_configure.() を処ç†wanifã‚’æŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/interfaces.inc:3016
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for "
+"writing.%s"
+msgstr ""エラー:writing.%sãŸã‚ interfaces_wan_dhcp_configure.() ã«dhclient_%s.conf"ã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+msgstr ""エラー:writing.%sãŸã‚ interfaces_wan_dhcp_configure.() ã«dhclient_%s.conf"ã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513
+#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466
+#: etc/inc/interfaces.inc:3593 etc/inc/interfaces.inc:3538
+#: etc/inc/interfaces.inc:3538
+#, php-format
+msgid "Invalid interface "%s" in interface_dhcp_configure()"
+msgstr "interface_dhcp_configure.() 内ã®ç„¡åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹"%s""
+
+#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548
+#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501
+#: etc/inc/interfaces.inc:3628 etc/inc/interfaces.inc:3573
+#: etc/inc/interfaces.inc:3573
+#, php-format
+msgid "Could not bring up %s interface in interface_dhcp_configure()"
+msgstr "interface_dhcp_configure.() ã§%sã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’èµ·å‹•ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/notices.inc:76 etc/inc/notices.inc:76
+#, php-format
+msgid "Could not open %s for writing"
+msgstr "書ãè¾¼ã¿ç”¨%sã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/notices.inc:327 etc/inc/notices.inc:327
+#, php-format
+msgid "Message sent to %s OK"
+msgstr "((OK))ã‚’%sã¯ã«é€ä¿¡ã•ã‚ŒãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:330
+#: etc/inc/notices.inc:331
+#, php-format
+msgid "Could not send the message to %1$s -- Error: %2$s"
+msgstr "%1$sã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã§ãã¾ã›ã‚“ã§ã—㟠- エラー:%2$s"
+
+#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81
+#: etc/inc/openvpn.inc:88 etc/inc/openvpn.inc:81 etc/inc/openvpn.inc:88
+msgid "Peer to Peer ( SSL/TLS )"
+msgstr "ピア·ツー·ピア(SSL / TLS)"
+
+#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82
+#: etc/inc/openvpn.inc:89 etc/inc/openvpn.inc:82 etc/inc/openvpn.inc:89
+msgid "Peer to Peer ( Shared Key )"
+msgstr "ピアツーピア(共有éµï¼‰"
+
+#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:83
+msgid "Remote Access ( SSL/TLS )"
+msgstr "リモートアクセス ( SSL/TLS )"
+
+#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:84
+msgid "Remote Access ( User Auth )"
+msgstr "リモートアクセス(ユーザèªè¨¼ï¼‰"
+
+#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:85
+msgid "Remote Access ( SSL/TLS + User Auth )"
+msgstr "リモートアクセス ( SSL/TLS + ユーザèªè¨¼)"
+
+#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195
+#: etc/inc/openvpn.inc:195
+msgid "None (No Encryption)"
+msgstr "ãªã—(暗å·åŒ–ãªã—)"
+
+#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238
+#: etc/inc/openvpn.inc:238
+#, php-format
+msgid "The field '%s' must contain a valid IP address or domain name."
+msgstr "フィールド㌠'%s'ã¯æœ‰åŠ¹ãªIPアドレスã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³åãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245
+#: etc/inc/openvpn.inc:245
+#, php-format
+msgid "The field '%s' must contain a valid port, ranging from 0 to 65535."
+msgstr "フィールド㌠'%s'ã¯0〜65535範囲ã€æœ‰åŠ¹ãªãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217
+#, php-format
+msgid "The field '%s' must contain a valid CIDR range."
+msgstr "フィールド㌠'%s'ã¯æœ‰åŠ¹ãªCIDR範囲ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330
+#: etc/inc/pfsense-utils.inc:330
+msgid "MASTER"
+# ikenote: not sure if this is the best word to use?
+msgstr "マスター"
+
+#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332
+#: etc/inc/pfsense-utils.inc:332
+msgid "BACKUP"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+
+#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334
+#: etc/inc/pfsense-utils.inc:334
+msgid "INIT"
+# ikenote: not sure if this is the best word to use?
+msgstr "イニシャライズ"
+
+#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402
+#: etc/inc/pfsense-utils.inc:402
+msgid "After synch increase advertising skew"
+msgstr "後ã®åŒæœŸã®å¢—加広告スキュー"
+
+#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447
+#: etc/inc/pfsense-utils.inc:447
+msgid "Error creating socket!"
+msgstr "エラーソケットを作æˆã™ã‚‹ï¼"
+
+#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448
+#: etc/inc/pfsense-utils.inc:448
+#, php-format
+msgid "Error code is '%1$s' - %2$s"
+msgstr "'%2$s' - エラーコードã¯'%1$s'ã§ã™"
+
+#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453
+#: etc/inc/pfsense-utils.inc:453
+#, php-format
+msgid "setsockopt() failed, error: %s"
+msgstr "%s :setsockopt.() ã€ã‚¨ãƒ©ãƒ¼ã€éšœå®³ãŒç™ºç”Ÿã—ãŸ"
+
+#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456
+#: etc/inc/pfsense-utils.inc:456
+#, php-format
+msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s"
+msgstr "マジックパケットã¯ã€MAC=%3$sã‚’{%2$s}ã™ã‚‹ã¯(%1$s)ã‚’é€ã£ãŸ"
+
+#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540
+#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555
+#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540
+#, php-format
+msgid "Restored %s of config file (maybe from CARP partner)"
+msgstr "configファイルã®å¾©å…ƒ%sã¯ï¼ˆå¤šåˆ†CARPパートナーã‹ã‚‰ï¼‰"
+
+#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714
+#: etc/inc/pfsense-utils.inc:699
+#, php-format
+msgid "XMLRPC communication error: %s"
+msgstr "XMLRPC通信エラー:%s"
+
+#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717
+#: etc/inc/pfsense-utils.inc:702
+#, php-format
+msgid "XMLRPC request failed with error %1$s: %2$s"
+msgstr "XMLRPCè¦æ±‚ã¯ã€ã‚¨ãƒ©ãƒ¼ã¯%1$sã§å¤±æ•—ã—ã¾ã—ãŸï¼š%2$s"
+
+#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810
+#: etc/inc/pfsense-utils.inc:795
+msgid "reload_interfaces_sync() is starting."
+msgstr "reload_interfaces_sync.() 開始ã—ã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818
+#: etc/inc/pfsense-utils.inc:803
+msgid "Enabling system routing"
+msgstr "システムルーティングを有効ã«ã™ã‚‹"
+
+#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821
+#: etc/inc/pfsense-utils.inc:806
+msgid "Cleaning up Interfaces"
+msgstr "インタフェースã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—"
+
+#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927
+#: etc/inc/pfsense-utils.inc:936 etc/inc/pfsense-utils.inc:936
+msgid "Enabling auto login was not possible."
+msgstr "自動ログインを有効ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137
+#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196
+#: etc/inc/pfsense-utils.inc:1196
+msgid "No history data found!"
+msgstr "履歴ã¯ã‚ã‚Šã¾ã›ã‚“データ発見ï¼"
+
+#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260
+#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318
+#: etc/inc/pfsense-utils.inc:1318
+msgid "device not present! Is the modem attached to the system?"
+msgstr "デãƒã‚¤ã‚¹ãŒå­˜åœ¨ã—ã¾ã›ã‚“ï¼ãƒ¢ãƒ‡ãƒ ãŒã‚·ã‚¹ãƒ†ãƒ ã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“ã‹ï¼Ÿ"
+
+#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327
+#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385
+#: etc/inc/pfsense-utils.inc:1385
+msgid "running"
+msgstr "ランニング"
+
+#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201
+#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381
+#: etc/inc/pfsense-utils.inc:1386 usr/local/www/graph.php:201
+#: etc/inc/pfsense-utils.inc:1386
+msgid "up"
+msgstr "アップ"
+
+#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371
+#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429
+#: etc/inc/pfsense-utils.inc:1429
+msgid "blocking"
+msgstr "ブロッキング"
+
+#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371
+#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429
+#: etc/inc/pfsense-utils.inc:1429
+msgid "check for ethernet loops"
+msgstr "イーサãƒãƒƒãƒˆãƒ«ãƒ¼ãƒ—ã®æœ‰ç„¡ã‚’調ã¹ã‚‹"
+
+#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374
+#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432
+#: etc/inc/pfsense-utils.inc:1432
+msgid "learning"
+msgstr "ラーニング"
+
+#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377
+#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435
+#: etc/inc/pfsense-utils.inc:1435
+msgid "forwarding"
+msgstr "転é€"
+
+#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493
+#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551
+#: etc/inc/pfsense-utils.inc:1555
+#, php-format
+msgid "DNSCACHE: Found old IP %1$s and new IP %2$s"
+msgstr "DNSCACHE:実測å¤ã„IPã¯%1$sã¨æ–°ã—ã„IP %2$s"
+
+#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226
+#: etc/inc/pkg-utils.inc:244 etc/inc/pkg-utils.inc:244
+msgid "Resyncing configuration for all packages."
+msgstr "ã™ã¹ã¦ã®ãƒ‘ッケージã®æ§‹æˆã‚’å†åŒæœŸã€‚"
+
+#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246
+#: etc/inc/pkg-utils.inc:264 etc/inc/pkg-utils.inc:264
+msgid "Syncing packages:"
+msgstr "パッケージをåŒæœŸã™ã‚‹ï¼š"
+
+#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288
+#: etc/inc/pkg-utils.inc:306 etc/inc/pkg-utils.inc:306
+#, php-format
+msgid ""
+"The %1$s package is missing required dependencies and must be reinstalled. "
+"%2$s"
+msgstr ""%1$sパッケージã«ã¯ã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"%2$s"
+
+#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437
+#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462
+#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330
+#: etc/inc/pkg-utils.inc:481 etc/inc/pkg-utils.inc:330
+#: etc/inc/pkg-utils.inc:481
+#, php-format
+msgid ""
+"The %s package is missing required dependencies and must be reinstalled."
+msgstr ""%sパッケージã«ã¯ã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429
+#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448
+#: etc/inc/pkg-utils.inc:448
+#, php-format
+msgid ""
+"The %s package is missing its configuration file and must be reinstalled."
+msgstr ""%sパッケージã«ã¯ã€ãã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒæ¬ è½ã—ã¦ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101
+#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590
+#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625
+#: usr/local/www/pkg_mgr_install.php:97 usr/local/www/pkg_mgr_install.php:97
+#: etc/inc/pkg-utils.inc:625
+msgid "Beginning package installation."
+msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’開始ã™ã‚‹ã€‚"
+
+#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565
+#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591
+#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626
+#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:626
+#: etc/inc/pkg-utils.inc:627
+#, php-format
+msgid "Beginning package installation for %s ."
+msgstr "%sãŸã‚ã«é–‹å§‹ã™ã‚‹ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚"
+
+#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595
+#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631
+#: etc/inc/pkg-utils.inc:631
+msgid "Downloading package configuration file... "
+msgstr "パッケージ構æˆãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰... "
+
+#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597
+#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633
+#: etc/inc/pkg-utils.inc:633
+msgid "Downloading package configuration file..."
+msgstr "パッケージ構æˆãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰..."
+
+#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601
+#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637
+#: etc/inc/pkg-utils.inc:637
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting installation."
+msgstr ""エラーï¼ãƒ‘ッケージ構æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。インストールを中止ã—ã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603
+#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639
+#: etc/inc/pkg-utils.inc:639
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting package "
+"installation."
+msgstr ""エラーï¼ãƒ‘ッケージ構æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’中止ã—ã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605
+#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641
+#: etc/inc/pkg-utils.inc:641
+msgid ""
+"failed!\n"
+"\n"
+"Installation aborted.\n"
+msgstr ""失敗ã—ã¾ã—ãŸï¼\n"\n"インストールãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚\n"
+
+#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617
+#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653
+#: etc/inc/pkg-utils.inc:653
+msgid "Saving updated package information..."
+msgstr "æ›´æ–°ã•ã‚ŒãŸãƒ‘ッケージ情報ã®ä¿å­˜..."
+
+#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621
+#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657
+#: etc/inc/pkg-utils.inc:657
+#, php-format
+msgid "Installed %s package."
+msgstr "インストールã•ã‚Œã¦ãƒ‘ッケージ。"
+
+#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625
+#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661
+#: etc/inc/pkg-utils.inc:661
+#, php-format
+msgid "Overwrote previous installation of %s."
+msgstr "%sã®ä¸Šæ›¸ã以å‰ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€‚"
+
+#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626
+#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662
+#: etc/inc/pkg-utils.inc:662
+msgid "overwrite!"
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒˆ!"
+
+#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638
+#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674
+#: etc/inc/pkg-utils.inc:674
+msgid "Failed to install package."
+msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642
+#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678
+#: etc/inc/pkg-utils.inc:678
+msgid "Writing configuration... "
+msgstr "設定を書ãè¾¼ã¿ä¸­... "
+
+#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678
+#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714
+#: etc/inc/pkg-utils.inc:714
+#, php-format
+msgid "The %s package is not installed.%sInstallation aborted."
+msgstr "%sパッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。%sインストールãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693
+#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729
+#: etc/inc/pkg-utils.inc:729
+msgid "Installing"
+msgstr "インストール"
+
+#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693
+#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729
+#: etc/inc/pkg-utils.inc:729
+msgid "and its dependencies."
+msgstr "ã¨ãã®ä¾å­˜é–¢ä¿‚。"
+
+#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694
+#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730
+#: etc/inc/pkg-utils.inc:730
+msgid "Downloading"
+msgstr "ダウンロード中"
+
+#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694
+#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730
+#: etc/inc/pkg-utils.inc:730
+msgid "and its dependencies... "
+msgstr "ã¨ãã®ä¾å­˜é–¢ä¿‚... "
+
+#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706
+#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742
+#: etc/inc/pkg-utils.inc:742
+msgid "Package WAS NOT installed properly."
+msgstr "パッケージãŒæ­£ã—ãインストールã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719
+#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755
+#: etc/inc/pkg-utils.inc:755
+msgid "Loading package configuration... "
+msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™... "
+
+#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724
+#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760
+#: etc/inc/pkg-utils.inc:760
+msgid "Configuring package components...\n"
+msgstr "パッケージコンãƒãƒ¼ãƒãƒ³ãƒˆã®è¨­å®š...\n"
+
+#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049
+#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086
+#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087
+#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122
+#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122
+msgid "System files... "
+msgstr "システムファイル..."
+
+#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742
+#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778
+#: etc/inc/pkg-utils.inc:778
+msgid "Additional files... "
+msgstr "追加ファイル..."
+
+#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768
+#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804
+#: etc/inc/pkg-utils.inc:804
+msgid "Extracting tarball to -C for "
+msgstr "ã®ãŸã‚ã« -C ã¸ã®tarballを解å‡"
+
+#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774
+#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810
+#: etc/inc/pkg-utils.inc:810
+#, php-format
+msgid "Changing file mode to %1$s for %2$s%3$s%4$s"
+msgstr "%2$s%3$s%4$sã‚’ã™ã‚‹ãŸã‚ã«%1$sã«ãƒ•ã‚¡ã‚¤ãƒ«ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹"
+
+#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025
+#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062
+#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063
+#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098
+#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098
+msgid "Loading package instructions..."
+msgstr "ローディングパッケージã®èª¬æ˜Žæ›¸..."
+
+#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805
+#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841
+#: etc/inc/pkg-utils.inc:841
+msgid "Custom commands..."
+msgstr "カスタムコマンド..."
+
+#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809
+#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845
+#: etc/inc/pkg-utils.inc:845
+msgid "Executing custom_php_global_functions()..."
+msgstr "custom_php_global_functions.() を実行..."
+
+#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816
+#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852
+#: etc/inc/pkg-utils.inc:852
+msgid "Executing custom_php_install_command()..."
+msgstr "custom_php_global_functions.() を実行..."
+
+#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845
+#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881
+#: etc/inc/pkg-utils.inc:881
+msgid "Executing custom_php_resync_config_command()..."
+msgstr "custom_php_global_functions.() を実行..."
+
+#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972
+#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009
+#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010
+#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045
+#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045
+msgid "Menu items... "
+msgstr "メニュー項目..."
+
+#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870
+#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906
+#: etc/inc/pkg-utils.inc:906
+msgid "Integrated Tab items... "
+msgstr "çµ±åˆã•ã‚ŒãŸã‚¿ãƒ–é …ç›®..."
+
+#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989
+#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026
+#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027
+#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062
+#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062
+msgid "Services... "
+msgstr "サービス..."
+
+#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901
+#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937
+#: etc/inc/pkg-utils.inc:937
+msgid "Loading package configuration... failed!"
+msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚“ã§ã„ã¾ã™...失敗ã—ã¾ã—ãŸï¼"
+
+#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901
+#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937
+#: etc/inc/pkg-utils.inc:937
+msgid "Installation aborted."
+msgstr "インストールãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903
+#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939
+#: etc/inc/pkg-utils.inc:939
+msgid "Unable to load package configuration. Installation aborted."
+msgstr "パッケージ構æˆã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。インストールãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948
+#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984
+#: etc/inc/pkg-utils.inc:984
+#, php-format
+msgid "Starting package deletion for %s..."
+msgstr "%sã®ãƒ‘ッケージã®å‰Šé™¤ã‚’開始ã™ã‚‹..."
+
+#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968
+#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004
+#: etc/inc/pkg-utils.inc:1004
+#, php-format
+msgid "The %s package is not installed.%sDeletion aborted."
+msgstr "%sã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。%sを削除ã¯ä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979
+#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015
+#: etc/inc/pkg-utils.inc:1015
+#, php-format
+msgid "Removing %s package... "
+msgstr "%sã®ãƒ‘ッケージを削除ã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980
+#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016
+#: etc/inc/pkg-utils.inc:1016
+#, php-format
+msgid "Removing %s components..."
+msgstr "%sã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’削除ã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992
+#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028
+#: etc/inc/pkg-utils.inc:1028
+msgid "Tabs items... "
+msgstr "タブ項目... "
+
+#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096
+#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132
+#: etc/inc/pkg-utils.inc:1132
+msgid "Deinstall commands... "
+msgstr "アンインストールコマンド... "
+
+#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106
+#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142
+#: etc/inc/pkg-utils.inc:1142
+msgid "Removing package instructions..."
+msgstr "パッケージã®æŒ‡ç¤ºã«å¾“ã£ã¦å‰Šé™¤ã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108
+#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144
+#: etc/inc/pkg-utils.inc:1144
+#, php-format
+msgid "Remove '%s'"
+msgstr "'%s'をを削除"
+
+#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115
+#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151
+#: etc/inc/pkg-utils.inc:1151
+msgid "Auxiliary files... "
+msgstr "補助ファイル... "
+
+#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129
+#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165
+#: etc/inc/pkg-utils.inc:1165
+msgid "Package XML... "
+msgstr "パッケージXML... "
+
+#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148
+#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184
+#: etc/inc/pkg-utils.inc:1184
+msgid "Configuration... "
+msgstr "コンフィギュレーション··· "
+
+#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242
+#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274
+#: etc/inc/pkg-utils.inc:1274
+#, php-format
+msgid ""
+" >>> Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr ""%1$sã¨é€šä¿¡ã§ãã¾ã›ã‚“。DNSã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®è¨­å®šã‚’確èªã—ã¦ãã ã•ã„ã€"ãã®%2$sã€æ©Ÿèƒ½ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’æŒã£ã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/radius.inc:404 etc/inc/radius.inc:406 etc/inc/radius.inc:406
+msgid "Error sending request:"
+msgstr "リクエストé€ä¿¡ã‚¨ãƒ©ãƒ¼ï¼š"
+
+#: etc/inc/radius.inc:410 etc/inc/radius.inc:412 etc/inc/radius.inc:412
+msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting"
+msgstr "RADIUS_ACCESS_ACCEPTã¯ã€ä¼šè¨ˆã®ãŸã‚ã«äºˆæƒ³å¤–ã§ã‚ã‚‹"
+
+#: etc/inc/radius.inc:419 etc/inc/radius.inc:421 etc/inc/radius.inc:421
+msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication"
+msgstr "RADIUS_ACCOUNTING_RESPONSEã¯ã€èªè¨¼ã®ãŸã‚ã«äºˆæƒ³å¤–ã§ã‚ã‚‹"
+
+#: etc/inc/radius.inc:424 etc/inc/radius.inc:426 etc/inc/radius.inc:426
+#, php-format
+msgid "Unexpected return value: %s"
+msgstr "予期ã—ãªã„戻り値:%s"
+
+#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360
+#: etc/inc/services.inc:369 etc/inc/services.inc:371 etc/inc/services.inc:373
+#, php-format
+msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr "DHCPリースã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š%2$s%3$s"
+
+#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373
+#: etc/inc/services.inc:382 etc/inc/services.inc:387 etc/inc/services.inc:389
+msgid "Starting DHCP service..."
+msgstr "DHCPサービスを開始..."
+
+#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380
+#: etc/inc/services.inc:820 etc/inc/services.inc:825 etc/inc/services.inc:877
+#, php-format
+msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"
+msgstr "エラー:services_dhcpdv4_configure.().%s を処ç†dhcpd.confã®é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461
+#: etc/inc/services.inc:463 etc/inc/services.inc:468 etc/inc/services.inc:469
+msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!"
+msgstr "警告ï¼DHCPフェールオーãƒãƒ¼ã®è¨­å®šãªã—CARP仮想IPã®å®šç¾©ã•ã‚ŒãŸï¼"
+
+#: etc/inc/services.inc:949 etc/inc/services.inc:1078
+#: etc/inc/services.inc:1210 etc/inc/services.inc:1203
+#: etc/inc/services.inc:1209 etc/inc/services.inc:1261
+msgid "Could not write Igmpproxy configuration file!"
+msgstr "Igmpproxy設定ファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: etc/inc/services.inc:956
+msgid "Started Igmpproxy service successfully."
+msgstr "首尾Igmpproxyサービスを開始ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/services.inc:980 etc/inc/services.inc:1109
+#: etc/inc/services.inc:1241 etc/inc/services.inc:1235
+#: etc/inc/services.inc:1242 etc/inc/services.inc:1294
+msgid "Starting DHCP relay service..."
+msgstr "DHCPリレーサービスを開始..."
+
+#: etc/inc/services.inc:1096 etc/inc/services.inc:1223
+#: etc/inc/services.inc:1355 etc/inc/services.inc:1350
+#: etc/inc/services.inc:1365 etc/inc/services.inc:1417
+msgid "Starting DHCPv6 relay service..."
+msgstr "DHCPv6リレーサービスを開始..."
+
+#: etc/inc/services.inc:1222 etc/inc/services.inc:1358
+#: etc/inc/services.inc:1493 etc/inc/services.inc:1489
+#: etc/inc/services.inc:1505 etc/inc/services.inc:1557
+msgid "Starting DynDNS clients..."
+msgstr "DynDNSクライアント起動中..."
+
+#: etc/inc/services.inc:1255 etc/inc/services.inc:1392
+#: etc/inc/services.inc:1531 etc/inc/services.inc:1545
+#: etc/inc/services.inc:1562 etc/inc/services.inc:1622
+msgid "Starting DNS forwarder..."
+msgstr "DNSフォワーダを開始..."
+
+#: etc/inc/services.inc:1324 etc/inc/services.inc:1507
+#: etc/inc/services.inc:1646 etc/inc/services.inc:1623
+#: etc/inc/services.inc:1655 etc/inc/services.inc:1686
+#: etc/inc/services.inc:1750
+msgid "Starting SNMP daemon... "
+msgstr "SNMPデーモンを起動ã™ã‚‹... "
+
+#: etc/inc/services.inc:1329 etc/inc/services.inc:1512
+#: etc/inc/services.inc:1651 etc/inc/services.inc:1628
+#: etc/inc/services.inc:1660 etc/inc/services.inc:1691
+#: etc/inc/services.inc:1755
+#, php-format
+msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s"
+msgstr "エラー:services_snmpd_configure.().%sを処ç†ã®snmpd.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/services.inc:1875 etc/inc/services.inc:2067
+#: etc/inc/services.inc:1919 etc/inc/services.inc:1908
+#: etc/inc/services.inc:1948 etc/inc/services.inc:1979
+#: etc/inc/services.inc:2043
+msgid "pfSense specific crontab entries"
+msgstr "pfSense特定crontabã®ã‚¨ãƒ³ãƒˆãƒª"
+
+#: etc/inc/services.inc:1876 etc/inc/services.inc:2068
+#: etc/inc/services.inc:1920 etc/inc/services.inc:1909
+#: etc/inc/services.inc:1949 etc/inc/services.inc:1980
+#: etc/inc/services.inc:2044
+msgid "Created:"
+msgstr "作æˆï¼š"
+
+#: etc/inc/services.inc:1890 etc/inc/services.inc:2082
+#: etc/inc/services.inc:1934 etc/inc/services.inc:1923
+#: etc/inc/services.inc:1963 etc/inc/services.inc:1994
+#: etc/inc/services.inc:2058
+msgid "If possible do not add items to this file manually."
+msgstr "ã§ãã‚Œã°ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«é …目を手動ã§è¿½åŠ ã—ãªã„ã§ãã ã•ã„。"
+
+#: etc/inc/services.inc:1891 etc/inc/services.inc:2083
+#: etc/inc/services.inc:1935 etc/inc/services.inc:1924
+#: etc/inc/services.inc:1964 etc/inc/services.inc:1995
+#: etc/inc/services.inc:2059
+msgid ""
+"If you do so, this file must be terminated with a blank line (e.g. new line)"
+msgstr ""ãã®å ´åˆã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«ã¯ã€ç©ºç™½è¡Œï¼ˆä¾‹ãˆã°æ–°ã—ã„行)ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: etc/inc/services.inc:1934 etc/inc/services.inc:2126
+#: etc/inc/services.inc:1978 etc/inc/services.inc:1968
+#: etc/inc/services.inc:2008 etc/inc/services.inc:2039
+#: etc/inc/services.inc:2103
+msgid "Starting UPnP service... "
+msgstr "UPnPサービスを開始... "
+
+#: etc/inc/services.inc:1969 etc/inc/services.inc:2161
+#: etc/inc/services.inc:2013 etc/inc/services.inc:2005
+#: etc/inc/services.inc:2045 etc/inc/services.inc:2076
+#: etc/inc/services.inc:2140
+#, php-format
+msgid "Installed cron job for %s"
+msgstr "%sã®ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«cronジョブ"
+
+#: etc/inc/services.inc:1972 etc/inc/services.inc:2164
+#: etc/inc/services.inc:2016 etc/inc/services.inc:2008
+#: etc/inc/services.inc:2048 etc/inc/services.inc:2079
+#: etc/inc/services.inc:2143
+#, php-format
+msgid "Updated cron job for %s"
+msgstr "%sã®ãŸã‚ã®æ›´æ–°ã•ã‚ŒãŸcronジョブ"
+
+#: etc/inc/services.inc:1977 etc/inc/services.inc:2169
+#: etc/inc/services.inc:2021
+#, php-format
+msgid "Remvoed cron job for %s"
+msgstr "%sã®ãŸã‚ã«å–り外ã•cronジョブ"
+
+#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190 etc/inc/shaper.inc:190
+#, php-format
+msgid "The field '%s' contains invalid characters."
+msgstr "フィールド㌠'%s'ã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196 etc/inc/shaper.inc:196
+#, php-format
+msgid "The field '%s' is required."
+msgstr "フィールド㌠'%s'ãŒå¿…è¦ã§ã™ã€‚"
+
+#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544
+#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327
+#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787
+#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750
+#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546
+#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329
+#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789
+#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161
+#: usr/local/www/interfaces_ppps_edit.php:751
+#: usr/local/www/interfaces_ppps_edit.php:757
+#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:1547
+#: etc/inc/shaper.inc:1853 etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330
+#: etc/inc/shaper.inc:2470 etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790
+#: etc/inc/shaper.inc:3162 etc/inc/shaper.inc:654 etc/inc/shaper.inc:1550
+#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2200 etc/inc/shaper.inc:2335
+#: etc/inc/shaper.inc:2475 etc/inc/shaper.inc:2601 etc/inc/shaper.inc:2795
+#: etc/inc/shaper.inc:3169 usr/local/www/interfaces_ppps_edit.php:754
+#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601
+#: etc/inc/shaper.inc:1916 etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398
+#: etc/inc/shaper.inc:2538 etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2863
+#: etc/inc/shaper.inc:3237 usr/local/www/interfaces_ppps_edit.php:754
+#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:321
+#: etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601 etc/inc/shaper.inc:1916
+#: etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398 etc/inc/shaper.inc:2538
+#: etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3293
+msgid "Bandwidth"
+msgstr "帯域幅"
+
+#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194
+#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320
+#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471
+#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:1549 etc/inc/shaper.inc:2197
+#: etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 etc/inc/shaper.inc:1552
+#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 etc/inc/shaper.inc:2797
+#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260
+#: etc/inc/shaper.inc:2540 etc/inc/shaper.inc:2865 etc/inc/shaper.inc:323
+#: etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260 etc/inc/shaper.inc:2540
+#: etc/inc/shaper.inc:2884
+msgid "Bandwidthtype"
+msgstr "帯域幅タイプ"
+
+#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199
+#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325
+#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476
+#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2202
+#: etc/inc/shaper.inc:2477 etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2207
+#: etc/inc/shaper.inc:2482 etc/inc/shaper.inc:328 etc/inc/shaper.inc:1609
+#: etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545 etc/inc/shaper.inc:328
+#: etc/inc/shaper.inc:1609 etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545
+msgid "Bandwidth must be an integer."
+msgstr "帯域幅ã¯ã€æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203
+#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557
+#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:1558
+#: etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 etc/inc/shaper.inc:1561
+#: etc/inc/shaper.inc:2211 etc/inc/shaper.inc:2486 etc/inc/shaper.inc:330
+#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 etc/inc/shaper.inc:2549
+#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269
+#: etc/inc/shaper.inc:2549
+msgid "Bandwidth cannot be negative."
+msgstr "帯域幅ã¯ã€è² ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:332
+#: etc/inc/shaper.inc:332
+msgid "Qlimit must be an integer."
+msgstr "Qlimitã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:334
+#: etc/inc/shaper.inc:334
+msgid "Qlimit must be an positive."
+msgstr "Qlimitã¯æ­£ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:336
+#: etc/inc/shaper.inc:336
+msgid "Tbrsize must be an integer."
+msgstr "Tbrsizeã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:338
+#: etc/inc/shaper.inc:338
+msgid "Tbrsize must be an positive."
+msgstr "Tbrsizeã¯æ­£ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269
+#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121
+#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432
+#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:1122 etc/inc/shaper.inc:3433
+#: etc/inc/shaper.inc:3656 etc/inc/shaper.inc:617 etc/inc/shaper.inc:1126
+#: etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:637
+#: etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3731
+#: etc/inc/shaper.inc:637 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3589
+#: etc/inc/shaper.inc:3836
+msgid "Enable/Disable"
+msgstr "有効/無効"
+
+#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:622
+#: etc/inc/shaper.inc:642 etc/inc/shaper.inc:642
+msgid "Enable/disable discipline and its children"
+msgstr "è¦å¾‹ã¨ãã®å­ã‚’有効ã¾ãŸã¯ç„¡åŠ¹ã«ã™ã‚‹"
+
+#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791
+#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496
+#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/interfaces_groups.php:94
+#: usr/local/www/firewall_aliases.php:165
+#: usr/local/www/firewall_aliases_edit.php:134
+#: usr/local/www/firewall_aliases_edit.php:576
+#: usr/local/www/firewall_schedule.php:96
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:235
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:181
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:183
+#: usr/local/www/services_captiveportal_filemanager.php:162
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:411
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:195
+#: usr/local/www/services_igmpproxy.php:95
+#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130
+#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211
+#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565
+#: usr/local/www/system_certmanager.php:854
+#: usr/local/www/system_crlmanager.php:487
+#: usr/local/www/system_gateways.php:152
+#: usr/local/www/system_gateways_edit.php:98
+#: usr/local/www/system_gateways_edit.php:370
+#: usr/local/www/system_groupmanager.php:346
+#: usr/local/www/system_usermanager.php:577
+#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622
+#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020
+#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580
+#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020
+#: usr/local/www/load_balancer_relay_action_edit.php:410
+#: usr/local/www/system_usermanager.php:575
+#: usr/local/www/system_usermanager.php:628
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/pkg_mgr_installed.php:111
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/system_gateways_edit.php:99
+#: usr/local/www/system_gateways_edit.php:391
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_virtual_server_edit.php:157
+#: usr/local/www/firewall_aliases.php:168
+#: usr/local/www/system_camanager.php:566
+#: usr/local/www/load_balancer_pool_edit.php:189
+#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150
+#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735
+#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265
+#: usr/local/www/load_balancer_relay_protocol_edit.php:193
+#: usr/local/www/interfaces_groups.php:95
+#: usr/local/www/load_balancer_relay_action_edit.php:408
+#: usr/local/www/load_balancer_monitor_edit.php:233
+#: usr/local/www/system_crlmanager.php:520
+#: usr/local/www/firewall_aliases_edit.php:584
+#: usr/local/www/load_balancer_virtual_server.php:127
+#: usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:497
+#: usr/local/www/status_gateways.php:73
+#: usr/local/www/services_captiveportal_filemanager.php:159
+#: usr/local/www/load_balancer_monitor.php:121
+#: usr/local/www/load_balancer_relay_protocol.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:155
+#: usr/local/www/firewall_aliases.php:188
+#: usr/local/www/load_balancer_relay_action.php:138
+#: usr/local/www/load_balancer_pool_edit.php:187
+#: usr/local/www/load_balancer_pool.php:130
+#: usr/local/www/system_gateways_edit.php:499
+#: usr/local/www/system_camanager.php:590 usr/local/www/status_openvpn.php:313
+#: usr/local/www/system_certmanager.php:1062 etc/inc/shaper.inc:2794
+#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664
+#: etc/inc/shaper.inc:3736 usr/local/www/system_gateways_edit.php:501
+#: usr/local/www/status_openvpn.php:272 usr/local/www/status_openvpn.php:333
+#: usr/local/www/pkg_mgr_installed.php:113
+#: usr/local/www/system_certmanager.php:1066 usr/local/www/pkg_mgr.php:132
+#: usr/local/www/firewall_aliases_edit.php:128
+#: usr/local/www/firewall_aliases_edit.php:615 etc/inc/shaper.inc:624
+#: etc/inc/shaper.inc:970 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:3158
+#: etc/inc/shaper.inc:3447 etc/inc/shaper.inc:3671 etc/inc/shaper.inc:3743
+#: usr/local/www/system_gateways_edit.php:531 etc/inc/shaper.inc:644
+#: etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2867 etc/inc/shaper.inc:3226
+#: etc/inc/shaper.inc:3515 etc/inc/shaper.inc:3739 etc/inc/shaper.inc:3811
+#: usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:531
+#: usr/local/www/system_camanager.php:590
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:193
+#: usr/local/www/system_groupmanager.php:346
+#: usr/local/www/firewall_schedule.php:96 usr/local/www/status_openvpn.php:272
+#: usr/local/www/status_openvpn.php:333
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:155
+#: usr/local/www/firewall_aliases.php:188
+#: usr/local/www/load_balancer_relay_protocol.php:132
+#: usr/local/www/pkg_mgr_installed.php:113
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/load_balancer_relay_action.php:138
+#: usr/local/www/system_certmanager.php:1066
+#: usr/local/www/status_lb_pool.php:130 usr/local/www/interfaces_groups.php:95
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:408
+#: usr/local/www/pkg_mgr.php:177 usr/local/www/system_crlmanager.php:520
+#: usr/local/www/load_balancer_pool.php:130
+#: usr/local/www/services_captiveportal_filemanager.php:159
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:233
+#: usr/local/www/firewall_aliases_edit.php:128
+#: usr/local/www/firewall_aliases_edit.php:601
+#: usr/local/www/services_igmpproxy.php:95
+#: usr/local/www/widgets/widgets/system_information.widget.php:88
+#: usr/local/www/load_balancer_monitor.php:121
+#: usr/local/www/system_usermanager.php:575
+#: usr/local/www/system_usermanager.php:628
+#: usr/local/www/system_gateways.php:152
+#: usr/local/www/load_balancer_virtual_server.php:127
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:187
+#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_gateways.php:73
+#: etc/inc/shaper.inc:644 etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2886
+#: etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3596 etc/inc/shaper.inc:3844
+#: etc/inc/shaper.inc:3916
+msgid "Name"
+msgstr "ãƒãƒ¼ãƒ "
+
+#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:628
+#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:648
+msgid "Scheduler Type "
+msgstr "スケジューラã®ç¨®é¡ž "
+
+#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:650
+#: etc/inc/shaper.inc:674 etc/inc/shaper.inc:674
+msgid "NOTE: Changing this changes all child queues!"
+msgstr "注:ã“ã‚Œã¯ã€ã™ã¹ã¦ã®å­ã®ã‚­ãƒ¥ãƒ¼ã‚’変更ã™ã‚‹å¤‰æ›´ï¼"
+
+#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:651
+#: etc/inc/shaper.inc:675 etc/inc/shaper.inc:675
+msgid " Beware you can lose information."
+msgstr " 情報を失ã†å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™æ³¨æ„ã—ã¦ãã ã•ã„。"
+
+#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:689
+#: etc/inc/shaper.inc:713 etc/inc/shaper.inc:713
+msgid ""
+"Adjusts the size, in bytes, of the token bucket regulator. If not specified, "
+"heuristics based on the interface bandwidth are used to determine the size."
+msgstr ""トークンãƒã‚±ãƒƒãƒˆãƒ¬ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ã‚µã‚¤ã‚ºã‚’ãƒã‚¤ãƒˆå˜ä½ã§ã€èª¿æ•´ã—ã¾ã™ã€‚"指定ã—ãªã„å ´åˆã€ãƒ’ューリスティックã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®å¸¯åŸŸå¹…ã«åŸºã¥ã„ã¦"サイズを決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:983
+#: etc/inc/shaper.inc:1015 etc/inc/shaper.inc:1015
+msgid "The priority must be an integer between 1 and 15."
+msgstr "優先度ã¯1ã‹ã‚‰15ã¾ã§ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982
+#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:2805 etc/inc/shaper.inc:986
+#: etc/inc/shaper.inc:2810 etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2878
+#: etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2897
+msgid "Queue limit must be an integer"
+msgstr "キュー制é™ã¯ã€æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:988
+#: etc/inc/shaper.inc:1020 etc/inc/shaper.inc:1020
+msgid "Queue limit must be positive"
+msgstr "キュー制é™ã¯æ­£ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804
+#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986
+#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585
+#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809
+#: etc/inc/shaper.inc:3741 etc/inc/shaper.inc:990 etc/inc/shaper.inc:992
+#: etc/inc/shaper.inc:2812 etc/inc/shaper.inc:2814 etc/inc/shaper.inc:3748
+#: etc/inc/shaper.inc:1022 etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2880
+#: etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3816 etc/inc/shaper.inc:1022
+#: etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2899 etc/inc/shaper.inc:2901
+#: etc/inc/shaper.inc:3921
+msgid "Queue names must be alphanumeric and _ or - only."
+msgstr "キューåã¯è‹±æ•°å­—ã§ã¨ '_'ã¾ãŸã¯å¿…è¦ãŒã‚ã‚Šã¾ã™' - 'ã®ã¿ã€‚"
+
+#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991
+#: etc/inc/shaper.inc:995 etc/inc/shaper.inc:1027 etc/inc/shaper.inc:1027
+msgid "Only one default queue per interface is allowed."
+msgstr "インターフェイスã”ã¨ã«1ã¤ã ã‘ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚­ãƒ¥ãƒ¼ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127
+#: etc/inc/shaper.inc:1131 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1174
+msgid "Enable/Disable queue and its children"
+msgstr "キューã¨ãã®å­ã‚’有効ã¾ãŸã¯ç„¡åŠ¹ã«ã™ã‚‹"
+
+#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131
+#: etc/inc/shaper.inc:1135 etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1178
+msgid "Queue Name"
+msgstr "キューå"
+
+#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138
+#: etc/inc/shaper.inc:1142 etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1185
+msgid ""
+"Enter the name of the queue here. Do not use spaces and limit the size to "
+"15 characters."
+msgstr ""ã“ã“ã«ã‚­ãƒ¥ãƒ¼ã®åå‰ã‚’入力ã—ã¾ã™ã€‚"スペースを使用ã—ã€15文字ã¾ã§ã®ã‚µã‚¤ã‚ºã‚’é™å®šã™ã‚‹ã‚‚ã®ã§ã¯ãªã„。"
+
+#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354
+#: usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140
+#: usr/local/www/interfaces_bridge_edit.php:363
+#: usr/local/www/interfaces_bridge_edit.php:382
+#: usr/local/www/system_gateway_groups.php:123
+#: usr/local/www/interfaces_bridge_edit.php:364
+#: usr/local/www/interfaces_bridge_edit.php:383
+#: usr/local/www/interfaces_bridge_edit.php:365
+#: usr/local/www/interfaces_bridge_edit.php:384 etc/inc/shaper.inc:1141
+#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1145
+#: usr/local/www/interfaces_bridge_edit.php:367
+#: usr/local/www/interfaces_bridge_edit.php:386 etc/inc/shaper.inc:1188
+#: usr/local/www/interfaces_bridge_edit.php:367
+#: usr/local/www/interfaces_bridge_edit.php:386
+#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1188
+msgid "Priority"
+msgstr "プライオリティ"
+
+#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145
+#: etc/inc/shaper.inc:1149 etc/inc/shaper.inc:1192 etc/inc/shaper.inc:1192
+msgid ""
+"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher "
+"priority are preferred in the case of overload."
+msgstr ""HFSCã®å ´åˆã€ç¯„囲ã¯0〜7ã§ã™ã€‚デフォルトã¯1ã§ã™ã€‚"優先度ã®é«˜ã„キューã¯HFSCéŽè² è·ã®å ´åˆã«å¥½ã¾ã—ã„。"
+
+#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148
+#: etc/inc/shaper.inc:1152 etc/inc/shaper.inc:1195 etc/inc/shaper.inc:1195
+msgid "Queue limit"
+msgstr "キュー制é™"
+
+#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152
+#: etc/inc/shaper.inc:1156 etc/inc/shaper.inc:1199 etc/inc/shaper.inc:1199
+msgid "Queue limit in packets per second."
+msgstr "1秒ã‚ãŸã‚Šã®ãƒ‘ケット数ã€ã‚­ãƒ¥ãƒ¼åˆ¶é™ã€‚"
+
+#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155
+#: etc/inc/shaper.inc:1159 etc/inc/shaper.inc:1202 etc/inc/shaper.inc:1202
+msgid "Scheduler options"
+msgstr "スケジューラオプション"
+
+#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159
+#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163
+#: etc/inc/shaper.inc:1164 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:1207
+#: etc/inc/shaper.inc:1210 etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1210
+msgid "Default queue"
+msgstr "デフォルトã®ã‚­ãƒ¥ãƒ¼"
+
+#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170
+#: etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1217
+msgid "Random Early Detection"
+msgstr "ランダム早期検出"
+
+#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175
+#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1222
+msgid "Random Early Detection In and Out"
+msgstr "ランダム早期検出Inã¨Out"
+
+#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180
+#: etc/inc/shaper.inc:1184 etc/inc/shaper.inc:1227 etc/inc/shaper.inc:1227
+msgid "Explicit Congestion Notification"
+msgstr "明示的輻輳通知"
+
+#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181
+#: etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1233 etc/inc/shaper.inc:1233
+msgid "Select options for this queue"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®((オプション))ã‚’é¸æŠžã—ã¾ã™"
+
+#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/pkg_mgr_installed.php:94
+#: usr/local/www/firewall_aliases_import.php:140
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121
+#: usr/local/www/firewall_virtual_ip_edit.php:538
+#: usr/local/www/load_balancer_relay_action.php:143
+#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163
+#: usr/local/www/services_wol_edit.php:148
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_bridge_edit.php:273
+#: usr/local/www/interfaces_gif.php:108
+#: usr/local/www/interfaces_gif_edit.php:208
+#: usr/local/www/interfaces_gre.php:109
+#: usr/local/www/interfaces_gre_edit.php:219
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/interfaces_groups_edit.php:259
+#: usr/local/www/firewall_aliases.php:167
+#: usr/local/www/firewall_aliases_edit.php:455
+#: usr/local/www/firewall_aliases_edit.php:591
+#: usr/local/www/firewall_aliases_edit.php:626
+#: usr/local/www/firewall_nat_1to1.php:108
+#: usr/local/www/firewall_nat_1to1_edit.php:440
+#: usr/local/www/firewall_nat_edit.php:769
+#: usr/local/www/firewall_nat_out.php:349
+#: usr/local/www/firewall_nat_out_edit.php:636
+#: usr/local/www/firewall_rules.php:374
+#: usr/local/www/firewall_rules_edit.php:1053
+#: usr/local/www/firewall_schedule.php:98
+#: usr/local/www/firewall_schedule_edit.php:793
+#: usr/local/www/firewall_schedule_edit.php:998
+#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/interfaces_vlan.php:110
+#: usr/local/www/interfaces_vlan_edit.php:179
+#: usr/local/www/system_routes.php:129
+#: usr/local/www/system_routes_edit.php:267
+#: usr/local/www/interfaces_lagg.php:114
+#: usr/local/www/interfaces_lagg_edit.php:208
+#: usr/local/www/interfaces_ppps.php:110
+#: usr/local/www/interfaces_ppps_edit.php:467
+#: usr/local/www/interfaces_qinq.php:119
+#: usr/local/www/interfaces_qinq_edit.php:337
+#: usr/local/www/interfaces_wireless.php:108
+#: usr/local/www/interfaces_wireless_edit.php:185
+#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:241
+#: usr/local/www/load_balancer_pool_edit.php:196
+#: usr/local/www/load_balancer_virtual_server_edit.php:189
+#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203
+#: usr/local/www/diag_ipsec.php:95
+#: usr/local/www/services_captiveportal_ip.php:118
+#: usr/local/www/services_captiveportal_ip_edit.php:208
+#: usr/local/www/services_captiveportal_mac.php:168
+#: usr/local/www/services_captiveportal_mac_edit.php:182
+#: usr/local/www/services_dhcp.php:893
+#: usr/local/www/services_dhcp_edit.php:242
+#: usr/local/www/services_dnsmasq.php:246
+#: usr/local/www/services_dnsmasq.php:313
+#: usr/local/www/services_dnsmasq_edit.php:163
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:417
+#: usr/local/www/load_balancer_relay_protocol.php:137
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:218
+#: usr/local/www/services_captiveportal_hostname.php:123
+#: usr/local/www/services_captiveportal_hostname_edit.php:183
+#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88
+#: usr/local/www/services_dyndns_edit.php:228
+#: usr/local/www/services_igmpproxy.php:98
+#: usr/local/www/services_igmpproxy_edit.php:175
+#: usr/local/www/services_rfc2136.php:80
+#: usr/local/www/services_rfc2136_edit.php:192
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134
+#: usr/local/www/status_lb_vs.php:81
+#: usr/local/www/system_advanced_sysctl.php:172
+#: usr/local/www/system_advanced_sysctl.php:243
+#: usr/local/www/system_gateway_groups.php:123
+#: usr/local/www/system_gateway_groups_edit.php:219
+#: usr/local/www/system_gateways.php:156
+#: usr/local/www/system_gateways_edit.php:484
+#: usr/local/www/system_groupmanager.php:275
+#: usr/local/www/system_groupmanager.php:347
+#: usr/local/www/system_groupmanager.php:405
+#: usr/local/www/system_groupmanager_addprivs.php:216
+#: usr/local/www/system_usermanager.php:578
+#: usr/local/www/system_usermanager_addprivs.php:197
+#: usr/local/www/vpn_ipsec_phase1.php:575
+#: usr/local/www/vpn_ipsec_phase2.php:497
+#: usr/local/www/vpn_openvpn_client.php:573
+#: usr/local/www/vpn_openvpn_client.php:863
+#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674
+#: usr/local/www/vpn_openvpn_server.php:722
+#: usr/local/www/vpn_openvpn_server.php:1451
+#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107
+#: usr/local/www/firewall_nat_npt_edit.php:261
+#: usr/local/www/services_dhcpv6.php:806
+#: usr/local/www/services_dhcpv6_edit.php:219
+#: usr/local/www/services_captiveportal_zones.php:55
+#: usr/local/www/services_captiveportal_zones_edit.php:106
+#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513
+#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132
+#: usr/local/www/services_unbound_acls.php:238
+#: usr/local/www/services_unbound_acls.php:292
+#: usr/local/www/services_unbound_acls.php:319
+#: usr/local/www/system_gateway_groups_edit.php:274
+#: usr/local/www/services_dnsmasq.php:334
+#: usr/local/www/services_dyndns_edit.php:358
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/services_dnsmasq_edit.php:218
+#: usr/local/www/services_dnsmasq_edit.php:239
+#: usr/local/www/firewall_nat_1to1_edit.php:447
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/firewall_nat_npt_edit.php:266
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/diag_ipsec.php:106
+#: usr/local/www/load_balancer_relay_action_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/services_unbound.php:282
+#: usr/local/www/services_unbound.php:349
+#: usr/local/www/system_usermanager.php:576
+#: usr/local/www/services_igmpproxy_edit.php:177
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:596
+#: usr/local/www/firewall_aliases_edit.php:631
+#: usr/local/www/pkg_mgr_installed.php:114
+#: usr/local/www/firewall_rules.php:378
+#: usr/local/www/load_balancer_virtual_server.php:135
+#: usr/local/www/system_groupmanager_addprivs.php:214
+#: usr/local/www/system_gateways_edit.php:519
+#: usr/local/www/load_balancer_monitor.php:125
+#: usr/local/www/services_dyndns.php:112
+#: usr/local/www/vpn_openvpn_server.php:795
+#: usr/local/www/vpn_openvpn_server.php:1593
+#: usr/local/www/services_dhcp.php:931
+#: usr/local/www/load_balancer_virtual_server_edit.php:163
+#: usr/local/www/interfaces_bridge_edit.php:282
+#: usr/local/www/firewall_aliases.php:170
+#: usr/local/www/vpn_ipsec_phase2.php:523
+#: usr/local/www/firewall_nat_edit.php:776
+#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348
+#: usr/local/www/vpn_openvpn_client.php:578
+#: usr/local/www/vpn_openvpn_client.php:868
+#: usr/local/www/load_balancer_pool_edit.php:204
+#: usr/local/www/firewall_virtual_ip_edit.php:526
+#: usr/local/www/interfaces_gre_edit.php:218
+#: usr/local/www/load_balancer_pool.php:137
+#: usr/local/www/vpn_ipsec_phase1.php:588
+#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225
+#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445
+#: usr/local/www/system_routes_edit.php:308
+#: usr/local/www/system_gateway_groups_edit.php:334
+#: usr/local/www/interfaces_vlan_edit.php:180
+#: usr/local/www/services_dnsmasq.php:247
+#: usr/local/www/services_dnsmasq.php:335
+#: usr/local/www/firewall_nat_out.php:360
+#: usr/local/www/system_groupmanager.php:406
+#: usr/local/www/services_dnsmasq_edit.php:219
+#: usr/local/www/services_dnsmasq_edit.php:240
+#: usr/local/www/load_balancer_relay_protocol_edit.php:216
+#: usr/local/www/firewall_nat_1to1_edit.php:445
+#: usr/local/www/services_dhcpv6_edit.php:230
+#: usr/local/www/services_captiveportal_ip.php:116
+#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105
+#: usr/local/www/interfaces_groups.php:97
+#: usr/local/www/services_captiveportal_hostname_edit.php:181
+#: usr/local/www/interfaces_qinq_edit.php:338
+#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120
+#: usr/local/www/load_balancer_relay_action_edit.php:414
+#: usr/local/www/interfaces_ppps.php:111
+#: usr/local/www/load_balancer_monitor_edit.php:239
+#: usr/local/www/services_captiveportal_mac.php:166
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151
+#: usr/local/www/services_captiveportal_mac_edit.php:180
+#: usr/local/www/firewall_schedule_edit.php:792
+#: usr/local/www/firewall_schedule_edit.php:997
+#: usr/local/www/interfaces_bridge.php:110
+#: usr/local/www/interfaces_ppps_edit.php:468
+#: usr/local/www/interfaces_lagg.php:115
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/firewall_aliases_edit.php:599
+#: usr/local/www/firewall_aliases_edit.php:634
+#: usr/local/www/interfaces_lagg_edit.php:209
+#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673
+#: usr/local/www/services_captiveportal_hostname.php:121
+#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/interfaces_wireless.php:109
+#: usr/local/www/system_gateway_groups.php:124
+#: usr/local/www/status_services.php:241
+#: usr/local/www/system_gateways_edit.php:619
+#: usr/local/www/status_gateways.php:79
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/services_captiveportal_ip_edit.php:206
+#: usr/local/www/load_balancer_relay_protocol.php:135
+#: usr/local/www/vpn_openvpn_server.php:823
+#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89
+#: usr/local/www/services_dhcp.php:1135
+#: usr/local/www/load_balancer_virtual_server_edit.php:161
+#: usr/local/www/interfaces_bridge_edit.php:283
+#: usr/local/www/firewall_aliases.php:190
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/interfaces_groups_edit.php:260
+#: usr/local/www/services_captiveportal_zones_edit.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:625
+#: usr/local/www/interfaces_vlan.php:111
+#: usr/local/www/firewall_nat_edit.php:775
+#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336
+#: usr/local/www/services_captiveportal_zones.php:56
+#: usr/local/www/vpn_openvpn_client.php:596
+#: usr/local/www/vpn_openvpn_client.php:921
+#: usr/local/www/status_gateway_groups.php:77
+#: usr/local/www/load_balancer_pool_edit.php:202
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/interfaces_gif.php:109
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/firewall_virtual_ip.php:191
+#: usr/local/www/vpn_ipsec_phase1.php:587
+#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81
+#: usr/local/www/status_services.php:239
+#: usr/local/www/system_gateways_edit.php:623
+#: usr/local/www/services_captiveportal_ip_edit.php:200
+#: usr/local/www/vpn_pppoe.php:106
+#: usr/local/www/interfaces_wireless_edit.php:187
+#: usr/local/www/services_captiveportal_zones_edit.php:105
+#: usr/local/www/vpn_openvpn_client.php:615
+#: usr/local/www/vpn_openvpn_client.php:940
+#: usr/local/www/services_dhcpv6_edit.php:233
+#: usr/local/www/services_dyndns_edit.php:362
+#: usr/local/www/firewall_rules_edit.php:1103
+#: usr/local/www/interfaces_qinq.php:123
+#: usr/local/www/interfaces_vlan_edit.php:183
+#: usr/local/www/interfaces_ppps_edit.php:474
+#: usr/local/www/firewall_virtual_ip.php:205
+#: usr/local/www/interfaces_lagg_edit.php:222
+#: usr/local/www/firewall_nat_edit.php:770
+#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117
+#: usr/local/www/interfaces_gif_edit.php:220
+#: usr/local/www/services_dhcp_edit.php:381
+#: usr/local/www/firewall_virtual_ip_edit.php:463
+#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_bridge.php:116
+#: usr/local/www/interfaces_wireless.php:111
+#: usr/local/www/system_routes.php:133 usr/local/www/vpn_pppoe_edit.php:448
+#: usr/local/www/services_dhcp.php:792 usr/local/www/services_dhcp.php:1154
+#: usr/local/www/services_captiveportal_mac_edit.php:193
+#: usr/local/www/services_dhcpv6.php:853
+#: usr/local/www/interfaces_bridge_edit.php:284
+#: usr/local/www/services_dnsmasq.php:272
+#: usr/local/www/services_dnsmasq.php:360
+#: usr/local/www/services_captiveportal_mac.php:176
+#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114
+#: usr/local/www/firewall_nat_out_edit.php:651
+#: usr/local/www/vpn_openvpn_server.php:850
+#: usr/local/www/vpn_openvpn_server.php:1686
+#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/services_dyndns.php:93
+#: usr/local/www/interfaces_gif.php:113
+#: usr/local/www/interfaces_qinq_edit.php:341
+#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183
+#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669
+#: usr/local/www/status_services.php:80
+#: usr/local/www/system_gateways_edit.php:625
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/firewall_rules_edit.php:1116
+#: usr/local/www/firewall_nat_edit.php:782
+#: usr/local/www/firewall_virtual_ip_edit.php:483
+#: usr/local/www/pkg_mgr_installed.php:116 usr/local/www/services_dhcp.php:812
+#: usr/local/www/services_dhcp.php:1174 usr/local/www/pkg_mgr.php:135
+#: usr/local/www/system_routes_edit.php:331
+#: usr/local/www/firewall_nat_out.php:367 usr/local/www/firewall_rules.php:369
+#: usr/local/www/system_gateway_groups_edit.php:336
+#: usr/local/www/firewall_aliases_edit.php:482
+#: usr/local/www/firewall_aliases_edit.php:630
+#: usr/local/www/firewall_aliases_edit.php:665
+#: usr/local/www/services_dnsmasq.php:285
+#: usr/local/www/services_dnsmasq.php:373
+#: usr/local/www/firewall_nat_out_edit.php:663
+#: usr/local/www/services_dyndns.php:89
+#: usr/local/www/system_gateway_groups.php:133
+#: usr/local/www/interfaces.php:1391 etc/inc/shaper.inc:1187
+#: etc/inc/shaper.inc:3233 etc/inc/shaper.inc:3481 etc/inc/shaper.inc:3676
+#: usr/local/www/system_gateways_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_virtual_ip.php:228
+#: usr/local/www/interfaces_lagg_edit.php:221
+#: usr/local/www/firewall_nat_edit.php:783 usr/local/www/system_routes.php:149
+#: usr/local/www/firewall_nat.php:211 usr/local/www/system_routes_edit.php:340
+#: usr/local/www/firewall_nat_out.php:366
+#: usr/local/www/interfaces_bridge_edit.php:286
+#: usr/local/www/services_dnsmasq.php:349
+#: usr/local/www/services_dnsmasq.php:437 usr/local/www/interfaces.php:1386
+#: etc/inc/shaper.inc:1235 etc/inc/shaper.inc:3301 etc/inc/shaper.inc:3549
+#: etc/inc/shaper.inc:3744 usr/local/www/services_rfc2136.php:81
+#: usr/local/www/status_services.php:80
+#: usr/local/www/system_gateways_edit.php:656
+#: usr/local/www/services_captiveportal_ip_edit.php:200
+#: usr/local/www/vpn_pppoe.php:106
+#: usr/local/www/interfaces_wireless_edit.php:187
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:216
+#: usr/local/www/system_groupmanager.php:275
+#: usr/local/www/system_groupmanager.php:347
+#: usr/local/www/system_groupmanager.php:406
+#: usr/local/www/services_captiveportal_zones_edit.php:105
+#: usr/local/www/interfaces_gre_edit.php:219
+#: usr/local/www/vpn_openvpn_client.php:615
+#: usr/local/www/vpn_openvpn_client.php:940
+#: usr/local/www/firewall_schedule.php:98
+#: usr/local/www/system_usermanager_addprivs.php:197
+#: usr/local/www/services_dhcpv6_edit.php:233
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/services_wol.php:163
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/load_balancer_virtual_server_edit.php:161
+#: usr/local/www/services_captiveportal_ip.php:116
+#: usr/local/www/interfaces_qinq.php:123
+#: usr/local/www/interfaces_vlan_edit.php:183
+#: usr/local/www/interfaces_ppps_edit.php:474
+#: usr/local/www/firewall_virtual_ip.php:228
+#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673
+#: usr/local/www/interfaces_lagg_edit.php:221
+#: usr/local/www/firewall_schedule_edit.php:792
+#: usr/local/www/firewall_schedule_edit.php:997
+#: usr/local/www/firewall_nat_edit.php:783
+#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117
+#: usr/local/www/services_captiveportal_hostname_edit.php:183
+#: usr/local/www/interfaces_gif_edit.php:220
+#: usr/local/www/firewall_aliases.php:190
+#: usr/local/www/services_dhcp_edit.php:381
+#: usr/local/www/services_wol_edit.php:148
+#: usr/local/www/firewall_virtual_ip_edit.php:483
+#: usr/local/www/load_balancer_relay_protocol.php:135
+#: usr/local/www/diag_ipsec.php:109 usr/local/www/pkg_mgr_installed.php:116
+#: usr/local/www/interfaces_bridge.php:116
+#: usr/local/www/firewall_aliases_import.php:140
+#: usr/local/www/interfaces_wireless.php:111
+#: usr/local/www/system_routes.php:149
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/services_dhcp.php:812
+#: usr/local/www/services_dhcp.php:1174 usr/local/www/firewall_nat.php:211
+#: usr/local/www/status_lb_pool.php:134 usr/local/www/interfaces_groups.php:97
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:414
+#: usr/local/www/pkg_mgr.php:183 usr/local/www/system_routes_edit.php:334
+#: usr/local/www/services_captiveportal_mac_edit.php:193
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/services_captiveportal_hostname.php:121
+#: usr/local/www/services_dhcpv6.php:853
+#: usr/local/www/firewall_nat_out.php:366
+#: usr/local/www/interfaces_ppps.php:111 usr/local/www/firewall_rules.php:369
+#: usr/local/www/firewall_nat_npt.php:107
+#: usr/local/www/firewall_nat_1to1.php:108
+#: usr/local/www/firewall_nat_npt_edit.php:265
+#: usr/local/www/interfaces_groups_edit.php:260
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:239
+#: usr/local/www/system_gateway_groups_edit.php:336
+#: usr/local/www/services_captiveportal_zones.php:56
+#: usr/local/www/system_groupmanager_addprivs.php:216
+#: usr/local/www/firewall_aliases_edit.php:468
+#: usr/local/www/firewall_aliases_edit.php:616
+#: usr/local/www/firewall_aliases_edit.php:651
+#: usr/local/www/interfaces_bridge_edit.php:286
+#: usr/local/www/services_igmpproxy_edit.php:177
+#: usr/local/www/services_igmpproxy.php:98
+#: usr/local/www/firewall_nat_1to1_edit.php:447
+#: usr/local/www/status_gateway_groups.php:77
+#: usr/local/www/services_dnsmasq_edit.php:219
+#: usr/local/www/services_dnsmasq_edit.php:240
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/services_rfc2136_edit.php:192
+#: usr/local/www/services_dnsmasq.php:349
+#: usr/local/www/services_dnsmasq.php:437
+#: usr/local/www/services_captiveportal_mac.php:176
+#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114
+#: usr/local/www/system_usermanager.php:576
+#: usr/local/www/system_gateways.php:156
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/load_balancer_pool_edit.php:202
+#: usr/local/www/status_lb_vs.php:81
+#: usr/local/www/firewall_nat_out_edit.php:663
+#: usr/local/www/vpn_openvpn_server.php:850
+#: usr/local/www/vpn_openvpn_server.php:1686
+#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/status_gateways.php:79
+#: usr/local/www/services_dyndns.php:89
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151
+#: usr/local/www/interfaces_gif.php:113
+#: usr/local/www/interfaces_qinq_edit.php:341
+#: usr/local/www/system_gateway_groups.php:133
+#: usr/local/www/status_upnp.php:89
+#: usr/local/www/system_advanced_sysctl.php:172
+#: usr/local/www/system_advanced_sysctl.php:243
+#: usr/local/www/interfaces.php:1386 etc/inc/shaper.inc:1235
+#: etc/inc/shaper.inc:3378 etc/inc/shaper.inc:3651 etc/inc/shaper.inc:3849
+msgid "Description"
+msgstr "デスクリプション"
+
+#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210
+#: etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1262 etc/inc/shaper.inc:1262
+msgid "Bandwidth:"
+msgstr "帯域幅:"
+
+#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215
+#: etc/inc/shaper.inc:1218 etc/inc/shaper.inc:1266 etc/inc/shaper.inc:1266
+msgid "Priority: on"
+msgstr "優先:オン"
+
+#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218
+#: etc/inc/shaper.inc:1221 etc/inc/shaper.inc:1269 etc/inc/shaper.inc:1269
+msgid "Default: on"
+msgstr "デフォルト:オン"
+
+#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224
+#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 etc/inc/shaper.inc:1228
+#: etc/inc/shaper.inc:1229 etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277
+#: etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277
+msgid "Delete queue from interface"
+msgstr "インターフェイスã‹ã‚‰ã‚­ãƒ¥ãƒ¼ã‚’削除"
+
+#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483
+#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485
+#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486
+#: etc/inc/shaper.inc:1565 etc/inc/shaper.inc:2215 etc/inc/shaper.inc:2491
+#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554
+#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554
+msgid "Bandwidth in percentage should be between 1 and 100 bounds."
+msgstr "割åˆã®å¸¯åŸŸå¹…ã¯1ã¨100ã®å¢ƒç•Œã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579
+#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1633
+msgid "upperlimit service curve defined but missing (d) value"
+msgstr "UPPERLIMITサービスカーブãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã™ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹(d)ã®å€¤"
+
+#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581
+#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1635
+msgid ""
+"upperlimit service curve defined but missing initial bandwidth (m1) value"
+msgstr "UPPERLIMITサービス曲線ãŒä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤ã‚’定義ã•ã‚Œã¦ã„ã¾ã™ãŒã€"
+
+#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583
+#: etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1637 etc/inc/shaper.inc:1637
+msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "upperlimit m1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585
+#: etc/inc/shaper.inc:1588 etc/inc/shaper.inc:1639 etc/inc/shaper.inc:1639
+msgid "upperlimit d value needs to be numeric"
+msgstr "upperlimit d値ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587
+#: etc/inc/shaper.inc:1590 etc/inc/shaper.inc:1641 etc/inc/shaper.inc:1641
+msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "upperlimit m2 値ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601
+#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1655 etc/inc/shaper.inc:1655
+msgid "linkshare service curve defined but missing (d) value"
+msgstr "リンクシェア·サービス曲線定義ã•ã‚Œã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„る(d)ã®å€¤"
+
+#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603
+#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1657 etc/inc/shaper.inc:1657
+msgid ""
+"linkshare service curve defined but missing initial bandwidth (m1) value"
+msgstr ""リンクシェア·サービス曲線定義ã•ã‚Œã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤"
+
+#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605
+#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1659 etc/inc/shaper.inc:1659
+msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "リンクシェアã®m1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607
+#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1661 etc/inc/shaper.inc:1661
+msgid "linkshare d value needs to be numeric"
+msgstr "リンクシェアã®d値ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609
+#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1663 etc/inc/shaper.inc:1663
+msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "リンクシェアã®m2ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611
+#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:1665 etc/inc/shaper.inc:1665
+msgid "realtime service curve defined but missing (d) value"
+msgstr "リアルタイムサービス曲線定義ã•ã‚Œã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„る(d)ã®å€¤"
+
+#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613
+#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:1667 etc/inc/shaper.inc:1667
+msgid "realtime service curve defined but missing initial bandwidth (m1) value"
+msgstr "リアルタイムサービス曲線定義ã•ã‚Œã¦ã„ã‚‹ãŒã€ä¸è¶³ã—ã¦ã„ã‚‹åˆæœŸã®å¸¯åŸŸå¹…(m1)ã®å€¤"
+
+#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628
+#: etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1682 etc/inc/shaper.inc:1682
+msgid "realtime m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "リアルタイムm1ã®å€¤ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630
+#: etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1684 etc/inc/shaper.inc:1684
+msgid "realtime d value needs to be numeric"
+msgstr "リアルタイムD値ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632
+#: etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1686 etc/inc/shaper.inc:1686
+msgid "realtime m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "リアルタイムã®m2値ã¯KBã€MBã€GBã€ã¾ãŸã¯ï¼…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602
+#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338
+#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861
+#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 etc/inc/shaper.inc:1866
+#: etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 etc/inc/shaper.inc:1924
+#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678 etc/inc/shaper.inc:1924
+#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678
+msgid "Gbit/s"
+msgstr "Gビット/秒"
+
+#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606
+#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342
+#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865
+#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 etc/inc/shaper.inc:1870
+#: etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 etc/inc/shaper.inc:1928
+#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682 etc/inc/shaper.inc:1928
+#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682
+msgid "Mbit/s"
+msgstr "Mビット/秒"
+
+#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610
+#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560
+#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868
+#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039
+#: usr/local/www/services_captiveportal.php:565
+#: usr/local/www/services_captiveportal.php:569
+#: usr/local/www/services_captiveportal.php:563
+#: usr/local/www/services_captiveportal.php:567 etc/inc/shaper.inc:1869
+#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613
+#: usr/local/www/services_captiveportal.php:581
+#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1874
+#: etc/inc/shaper.inc:2352 etc/inc/shaper.inc:2618 etc/inc/shaper.inc:1932
+#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686
+#: usr/local/www/services_captiveportal.php:581
+#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1932
+#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686
+msgid "Kbit/s"
+msgstr "Kビット/秒"
+
+#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614
+#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350
+#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873
+#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 etc/inc/shaper.inc:1878
+#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:1936
+#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690 etc/inc/shaper.inc:1936
+#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690
+msgid "Bit/s"
+msgstr "ビット/秒"
+
+#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620
+#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622
+#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623
+#: etc/inc/shaper.inc:1884 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2628
+#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696
+#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696
+msgid "Choose the amount of bandwidth for this queue"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã®é‡ã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882
+#: etc/inc/shaper.inc:1887 etc/inc/shaper.inc:1945 etc/inc/shaper.inc:1945
+msgid "Service Curve (sc)"
+msgstr "サービス曲線(SC)"
+
+#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889
+#: etc/inc/shaper.inc:1894 etc/inc/shaper.inc:1952 etc/inc/shaper.inc:1952
+msgid "Upperlimit:"
+msgstr "上é™ï¼š"
+
+#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904
+#: etc/inc/shaper.inc:1909 etc/inc/shaper.inc:1967 etc/inc/shaper.inc:1967
+msgid "The maximum allowed bandwidth for the queue."
+msgstr "最大値ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã‚’å¯èƒ½ã«ã—ãŸã€‚"
+
+#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908
+#: etc/inc/shaper.inc:1913 etc/inc/shaper.inc:1971 etc/inc/shaper.inc:1971
+msgid "Real time:"
+msgstr "リアルタイム:"
+
+#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923
+#: etc/inc/shaper.inc:1928 etc/inc/shaper.inc:1986 etc/inc/shaper.inc:1986
+msgid "The minimum required bandwidth for the queue."
+msgstr "最å°å€¤ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸã‚’å¿…è¦ã¨ã—ãŸã€‚"
+
+#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927
+#: etc/inc/shaper.inc:1932 etc/inc/shaper.inc:1990 etc/inc/shaper.inc:1990
+msgid "Link share:"
+msgstr "共有リンク:"
+
+#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942
+#: etc/inc/shaper.inc:1947 etc/inc/shaper.inc:2005 etc/inc/shaper.inc:2005
+msgid "The bandwidth share of a backlogged queue - this overrides priority."
+msgstr "ãƒãƒƒã‚¯ãƒ­ã‚°ã‚­ãƒ¥ãƒ¼ã®å¸¯åŸŸå¹…ã®å…±æœ‰ - ã“ã‚Œã¯ã€å„ªå…ˆåº¦ã‚’上書ãã™ã‚‹ã€‚"
+
+#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944
+#: etc/inc/shaper.inc:1949 etc/inc/shaper.inc:2007 etc/inc/shaper.inc:2007
+msgid ""
+"The format for service curve specifications is (m1, d, m2). m2 controls the "
+"bandwidth assigned to the queue. m1 and d are optional and can be used to "
+"control the initial bandwidth assignment. For the first d milliseconds the "
+"queue gets the bandwidth given as m1, afterwards the value given in m2."
+msgstr ""サービスカーブ仕様ã®å½¢å¼ã¯ã€ï¼ˆm1ã€dã€m2)。 m2ã¯ã‚­ãƒ¥ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå¸¯åŸŸå¹…を制御ã—ã¾ã™ã€‚"m1ãŠã‚ˆã³dã¯ä»»æ„ã§ã‚ã‚Šã€æœ€åˆã®å¸¯åŸŸå¹…ã®å‰²ã‚Šå½“ã¦ã‚’制御ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãる。"最åˆã®dミリ秒待ã¡ã€ãã®å¾Œm1ã€m2ã§ä¸Žãˆã‚‰ã‚ŒãŸå€¤ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸå¸¯åŸŸå¹…ã‚’å–å¾—ã—ã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193
+#: etc/inc/shaper.inc:2198 etc/inc/shaper.inc:2256 etc/inc/shaper.inc:2256
+msgid "Priority must be an integer between 1 and 7."
+msgstr "優先順ä½ã¯1ã‹ã‚‰7ã¾ã§ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358
+#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625
+#: etc/inc/shaper.inc:2364 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2427
+#: etc/inc/shaper.inc:2698 etc/inc/shaper.inc:2427 etc/inc/shaper.inc:2698
+msgid "Scheduler specific options"
+msgstr "スケジューラ固有ã®ã‚ªãƒ—ション"
+
+#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363
+#: etc/inc/shaper.inc:2368 etc/inc/shaper.inc:2431 etc/inc/shaper.inc:2431
+msgid "Borrow from other queues when available"
+msgstr "ä»–ã®ã‚­ãƒ¥ãƒ¼ã‹ã‚‰å€Ÿã‚Šã‚‹éš›ã«åˆ©ç”¨ã§ãã‚‹"
+
+#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468
+#: etc/inc/shaper.inc:2473 etc/inc/shaper.inc:2536 etc/inc/shaper.inc:2536
+msgid "Priority must be an integer between 1 and 255."
+msgstr "優先順ä½ã¯1ã‹ã‚‰255ã¾ã§ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631
+#: etc/inc/shaper.inc:2636 etc/inc/shaper.inc:2704 etc/inc/shaper.inc:2704
+msgid "Number of buckets available."
+msgstr "利用å¯èƒ½ãªãƒã‚±ãƒƒãƒˆæ•°ã€‚"
+
+#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636
+#: etc/inc/shaper.inc:2641 etc/inc/shaper.inc:2709 etc/inc/shaper.inc:2709
+msgid "Bandwidth limit for hosts to not saturate link."
+msgstr "ホストãŒãƒªãƒ³ã‚¯ã‚’飽和ã—ãªã„よã†ã«ã™ã‚‹ãŸã‚ã®å¸¯åŸŸå¹…制é™ã€‚"
+
+#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800
+#: etc/inc/shaper.inc:2805 etc/inc/shaper.inc:2873 etc/inc/shaper.inc:2892
+msgid "Plr must be an integer between 1 and 100."
+msgstr "Plr 1〜100ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803
+#: etc/inc/shaper.inc:2808 etc/inc/shaper.inc:2876 etc/inc/shaper.inc:2895
+msgid "Buckets must be an integer between 16 and 65535."
+msgstr "ãƒã‚±ãƒƒãƒˆã¯ã€16〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921
+#: etc/inc/shaper.inc:2922 etc/inc/shaper.inc:2927 etc/inc/shaper.inc:2995
+#: etc/inc/shaper.inc:3053
+msgid "Delay must be an integer."
+msgstr "é…延ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276
+#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234
+#: usr/local/www/system_firmware.php:131
+#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60
+#: usr/local/www/services_rfc2136_edit.php:128
+#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013
+#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338
+#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334
+#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143
+#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61
+#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326
+#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335
+#: usr/local/www/vpn_ipsec_phase1.php:823
+#: usr/local/www/system_firmware.php:133
+#: usr/local/www/services_dnsmasq.php:159
+#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285
+#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339
+#: etc/inc/shaper.inc:3144 usr/local/www/services_dnsmasq.php:161
+#: usr/local/www/interfaces.php:1381 etc/inc/shaper.inc:3151
+#: usr/local/www/services_dnsmasq.php:182 usr/local/www/interfaces.php:1376
+#: etc/inc/shaper.inc:3219 usr/local/www/system_firmware.php:133
+#: usr/local/www/diag_routes.php:61
+#: usr/local/www/services_rfc2136_edit.php:128
+#: usr/local/www/services_dnsmasq.php:182
+#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285
+#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1376
+#: etc/inc/shaper.inc:3275
+msgid "Enable"
+msgstr "有効ã«ã™ã‚‹"
+
+#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148
+#: etc/inc/shaper.inc:3149 etc/inc/shaper.inc:3156 etc/inc/shaper.inc:3224
+#: etc/inc/shaper.inc:3280
+msgid "Enable limiter and its children"
+msgstr "リミッターã¨ãã®å­ã‚’有効ã«ã™ã‚‹"
+
+#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054
+#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450
+#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3210
+#: etc/inc/shaper.inc:3458 etc/inc/shaper.inc:3278 etc/inc/shaper.inc:3526
+#: etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3607
+msgid "Mask"
+msgstr "マスク"
+
+#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064
+#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460
+#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 etc/inc/shaper.inc:3220
+#: etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3288 etc/inc/shaper.inc:3536
+#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3618
+msgid "Source addresses"
+msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068
+#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464
+#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 etc/inc/shaper.inc:3224
+#: etc/inc/shaper.inc:3472 etc/inc/shaper.inc:3292 etc/inc/shaper.inc:3540
+#: etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3622
+msgid "Destination addresses"
+msgstr "宛先アドレス"
+
+#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071
+#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467
+#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3227
+#: etc/inc/shaper.inc:3475 etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3543
+msgid ""
+"If 'source' or 'destination' is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given "
+"above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr ""「ソースã€ã¾ãŸã¯ã€Œé€ä¿¡å…ˆã€ãŒé¸æŠžã•ã‚ŒãŸå ´åˆã€å‰è¨˜æ‰€å®šã®å¸¯åŸŸå¹…ã€é…延ã€ãƒ‘ケットæ失ã€"キューサイズã®å‹•çš„パイプã¯ãã‚Œãžã‚Œã€é­é‡ã—ãŸå„é€ä¿¡å…ƒ/宛先IPアドレスãŒä½œæˆã•ã‚Œã¾ã™ã€‚"ã“ã‚Œã«ã‚ˆã‚Šã€ç°¡å˜ã«ãƒ›ã‚¹ãƒˆã”ã¨ã«å¸¯åŸŸå¹…制é™ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124
+#: usr/local/www/firewall_virtual_ip_edit.php:541
+#: usr/local/www/services_wol_edit.php:151
+#: usr/local/www/interfaces_gif_edit.php:211
+#: usr/local/www/interfaces_gre_edit.php:222
+#: usr/local/www/interfaces_groups_edit.php:264
+#: usr/local/www/firewall_aliases_edit.php:596
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+#: usr/local/www/firewall_nat_edit.php:772
+#: usr/local/www/firewall_nat_out_edit.php:639
+#: usr/local/www/firewall_schedule_edit.php:796
+#: usr/local/www/firewall_schedule_edit.php:970
+#: usr/local/www/interfaces_vlan_edit.php:182
+#: usr/local/www/system_routes_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:342
+#: usr/local/www/interfaces_wireless_edit.php:188
+#: usr/local/www/services_dhcp_edit.php:245
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_igmpproxy_edit.php:180
+#: usr/local/www/system_gateway_groups_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:264
+#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083
+#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519
+#: usr/local/www/system_routes_edit.php:310
+#: usr/local/www/system_gateway_groups_edit.php:278
+#: usr/local/www/services_dnsmasq_edit.php:221
+#: usr/local/www/firewall_nat_1to1_edit.php:450
+#: usr/local/www/services_dhcpv6_edit.php:231
+#: usr/local/www/firewall_nat_npt_edit.php:269
+#: usr/local/www/firewall_nat_out_edit.php:652
+#: usr/local/www/services_igmpproxy_edit.php:182
+#: usr/local/www/firewall_aliases_edit.php:601
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/services_dhcp_edit.php:254
+#: usr/local/www/firewall_virtual_ip_edit.php:529
+#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231
+#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674
+#: usr/local/www/system_routes_edit.php:311
+#: usr/local/www/system_gateway_groups_edit.php:338
+#: usr/local/www/interfaces_vlan_edit.php:183
+#: usr/local/www/services_dnsmasq_edit.php:222
+#: usr/local/www/firewall_nat_1to1_edit.php:448
+#: usr/local/www/services_dhcpv6_edit.php:233
+#: usr/local/www/firewall_nat_npt_edit.php:268
+#: usr/local/www/interfaces_qinq_edit.php:343
+#: usr/local/www/interfaces_gif_edit.php:212
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154
+#: usr/local/www/firewall_schedule_edit.php:795
+#: usr/local/www/firewall_schedule_edit.php:969
+#: usr/local/www/firewall_aliases_edit.php:604
+#: usr/local/www/interfaces_groups_edit.php:265
+#: usr/local/www/firewall_nat_edit.php:778
+#: usr/local/www/services_dhcp_edit.php:256
+#: usr/local/www/firewall_virtual_ip_edit.php:474
+#: usr/local/www/interfaces_wireless_edit.php:190
+#: usr/local/www/services_dhcpv6_edit.php:236
+#: usr/local/www/interfaces_vlan_edit.php:186
+#: usr/local/www/firewall_nat_edit.php:773
+#: usr/local/www/interfaces_gif_edit.php:223
+#: usr/local/www/services_dhcp_edit.php:384
+#: usr/local/www/firewall_virtual_ip_edit.php:466
+#: usr/local/www/firewall_nat_out_edit.php:654
+#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232
+#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675
+#: usr/local/www/firewall_nat_edit.php:785
+#: usr/local/www/firewall_virtual_ip_edit.php:486
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/system_gateway_groups_edit.php:339
+#: usr/local/www/firewall_aliases_edit.php:635
+#: usr/local/www/firewall_nat_out_edit.php:666 etc/inc/shaper.inc:3239
+#: etc/inc/shaper.inc:3487 etc/inc/shaper.inc:3682
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/system_routes_edit.php:343 etc/inc/shaper.inc:3307
+#: etc/inc/shaper.inc:3555 etc/inc/shaper.inc:3750
+#: usr/local/www/interfaces_wireless_edit.php:190
+#: usr/local/www/interfaces_gre_edit.php:222
+#: usr/local/www/services_dhcpv6_edit.php:236
+#: usr/local/www/interfaces_vlan_edit.php:186
+#: usr/local/www/firewall_schedule_edit.php:795
+#: usr/local/www/firewall_schedule_edit.php:969
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/interfaces_gif_edit.php:223
+#: usr/local/www/services_dhcp_edit.php:384
+#: usr/local/www/services_wol_edit.php:151
+#: usr/local/www/firewall_virtual_ip_edit.php:486
+#: usr/local/www/system_routes_edit.php:337
+#: usr/local/www/firewall_nat_npt_edit.php:268
+#: usr/local/www/interfaces_groups_edit.php:265
+#: usr/local/www/system_gateway_groups_edit.php:339
+#: usr/local/www/firewall_aliases_edit.php:621
+#: usr/local/www/services_igmpproxy_edit.php:182
+#: usr/local/www/firewall_nat_1to1_edit.php:450
+#: usr/local/www/services_dnsmasq_edit.php:222
+#: usr/local/www/firewall_nat_out_edit.php:666
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154
+#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3384
+#: etc/inc/shaper.inc:3657 etc/inc/shaper.inc:3855
+msgid "You may enter a description here for your reference (not parsed)."
+msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼ˆæ§‹æ–‡è§£æžã•ã‚Œã¾ã›ã‚“)。"
+
+#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318
+#: usr/local/www/interfaces_bridge_edit.php:281
+#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089
+#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290
+#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485
+#: usr/local/www/interfaces_ppps_edit.php:739
+#: usr/local/www/interfaces_bridge_edit.php:291
+#: usr/local/www/interfaces_ppps_edit.php:745
+#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238
+#: etc/inc/shaper.inc:3486 etc/inc/shaper.inc:3245 etc/inc/shaper.inc:3493
+#: usr/local/www/interfaces_ppps_edit.php:743
+#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3313
+#: etc/inc/shaper.inc:3561 usr/local/www/interfaces_ppps_edit.php:743
+#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3390
+#: etc/inc/shaper.inc:3663
+msgid "Show advanced options"
+msgstr "高度ãªã‚ªãƒ—ションを表示ã™ã‚‹"
+
+#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093
+#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241
+#: usr/local/www/status_ntpd.php:131 etc/inc/shaper.inc:3242
+#: usr/local/www/status_ntpd.php:137 etc/inc/shaper.inc:3249
+#: etc/inc/shaper.inc:3317 usr/local/www/status_ntpd.php:137
+#: etc/inc/shaper.inc:3394
+msgid "Delay"
+msgstr "ディレイ"
+
+#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245
+#: etc/inc/shaper.inc:3246 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3321
+#: etc/inc/shaper.inc:3398
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty)"
+msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã«0を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼ˆã‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空ã«ã—ã¦ãŠã)"
+
+#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101
+#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496
+#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 etc/inc/shaper.inc:3257
+#: etc/inc/shaper.inc:3504 etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3572
+#: etc/inc/shaper.inc:3402 etc/inc/shaper.inc:3674
+msgid "Packet loss rate"
+msgstr "パケットæ失率"
+
+#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105
+#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500
+#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 etc/inc/shaper.inc:3261
+#: etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3576
+#: etc/inc/shaper.inc:3406 etc/inc/shaper.inc:3678
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty). A "
+"value of 0.001 means one packet in 1000 gets dropped"
+msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã«0を指定ã™ã‚‹ï¼ˆã‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空ã«ã—ã¦ãŠã)必è¦ãŒã‚ã‚Šã¾ã™ã€‚"0.001ã®å€¤ã¯ã€1000å¹´ã«ãŠã‘ã‚‹1パケットã¯ãƒ‰ãƒ­ãƒƒãƒ—ã•ã‚Œã¾ã™ã“ã¨ã‚’æ„味"
+
+#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110
+#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505
+#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3266
+#: etc/inc/shaper.inc:3513 etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3581
+#: etc/inc/shaper.inc:3411 etc/inc/shaper.inc:3683
+msgid "Queue Size"
+msgstr "キューサイズ"
+
+#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115
+#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510
+#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 etc/inc/shaper.inc:3271
+#: etc/inc/shaper.inc:3518 etc/inc/shaper.inc:3339 etc/inc/shaper.inc:3586
+#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3688
+msgid ""
+"Hint: in most cases, you should leave the field empty. All packets in this "
+"pipe are placed into a fixed-size queue first, then they are delayed by "
+"value specified in the Delay field, and then they are delivered to their "
+"destination."
+msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’残ã—ã¦ãã ã•ã„。"ã“ã®é…管内ã®ã™ã¹ã¦ã®ãƒ‘ケットã¯ã€æœ€åˆã«å›ºå®šã‚µã‚¤ã‚ºã®ã‚­ãƒ¥ãƒ¼ã«é…ç½®ã•ã‚Œã¦ã„ã‚‹"ãã—ã¦ãれらã¯ã€Delayフィールドã§æŒ‡å®šã•ã‚ŒãŸå€¤é…ã‚Œã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™"ãã—ã¦ã€å½¼ã‚‰ã¯ã€ãã®é€ä¿¡å…ˆã«é…ä¿¡ã•ã‚Œã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121
+#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516
+#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 etc/inc/shaper.inc:3277
+#: etc/inc/shaper.inc:3524 etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3592
+#: etc/inc/shaper.inc:3422 etc/inc/shaper.inc:3694
+msgid "Bucket Size"
+msgstr "ãƒã‚±ãƒƒãƒˆã‚µã‚¤ã‚º"
+
+#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126
+#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521
+#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 etc/inc/shaper.inc:3282
+#: etc/inc/shaper.inc:3529 etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3597
+#: etc/inc/shaper.inc:3427 etc/inc/shaper.inc:3699
+msgid ""
+"Hint: in most cases, you should leave the field empty. It increases the hash "
+"size set."
+msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’残ã—ã¦ãã ã•ã„。"ã“ã‚Œã¯ã€ãƒãƒƒã‚·ãƒ¥Â·ã‚µã‚¤ã‚ºã®ã‚»ãƒƒãƒˆãŒå¢—加ã—ã¾ã™ã€‚"
+
+msgstr ""ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ç©ºã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’残ã—ã¦ãã ã•ã„。"ã“ã‚Œã¯ã€ãƒãƒƒã‚·ãƒ¥Â·ã‚µã‚¤ã‚ºã®ã‚»ãƒƒãƒˆãŒå¢—加ã—ã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339
+#: etc/inc/shaper.inc:3340 etc/inc/shaper.inc:3347 etc/inc/shaper.inc:3415
+#: etc/inc/shaper.inc:3495
+msgid "Weight must be an integer between 1 and 100."
+msgstr "é‡é‡ã¯1ã‹ã‚‰100ã¾ã§ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437
+#: etc/inc/shaper.inc:3438 etc/inc/shaper.inc:3445 etc/inc/shaper.inc:3513
+#: etc/inc/shaper.inc:3594
+msgid "Enable/Disable queue"
+msgstr "キューを有効ã¾ãŸã¯ç„¡åŠ¹ã«ã™ã‚‹"
+
+#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760
+#: usr/local/www/firewall_rules_edit.php:1224
+#: usr/local/www/firewall_rules_edit.php:1231
+#: usr/local/www/diag_system_pftop.php:107
+#: usr/local/www/interfaces_lagg_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:234
+#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301
+#: usr/local/www/firewall_rules_edit.php:1259
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules.php:757
+#: usr/local/www/load_balancer_virtual_server_edit.php:223
+#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456
+#: usr/local/www/vpn_ipsec_mobile.php:403
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/firewall_rules.php:750
+#: usr/local/www/load_balancer_virtual_server_edit.php:221
+#: usr/local/www/vpn_openvpn_client.php:542
+#: usr/local/www/vpn_openvpn_client.php:561
+#: usr/local/www/firewall_rules_edit.php:1274
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/interfaces_lagg_edit.php:215 etc/inc/shaper.inc:3457
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1289
+#: usr/local/www/firewall_rules.php:749 etc/inc/shaper.inc:3464
+#: usr/local/www/firewall_rules_edit.php:1282
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/interfaces_lagg_edit.php:214 etc/inc/shaper.inc:3532
+#: usr/local/www/vpn_openvpn_client.php:561
+#: usr/local/www/firewall_rules_edit.php:1282
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/load_balancer_virtual_server_edit.php:221
+#: usr/local/www/interfaces_lagg_edit.php:214
+#: usr/local/www/firewall_rules.php:749 usr/local/www/vpn_ipsec_mobile.php:403
+#: etc/inc/shaper.inc:3614
+msgid "none"
+msgstr "ãªã—"
+
+#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424
+#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445
+#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551
+#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489
+#: usr/local/www/system_gateways_edit.php:557 etc/inc/shaper.inc:3496
+#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3564
+#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3666
+msgid "Weight"
+msgstr "ウエート"
+
+#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492
+#: etc/inc/shaper.inc:3493 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3568
+#: etc/inc/shaper.inc:3670
+msgid ""
+"Hint: For queues under the same parent this specifies the share that a queue "
+"gets(values range from 1 to 100, you can leave it blank otherwise)"
+msgstr ""ヒント:åŒã˜è¦ªã®ä¸‹ã«ã‚­ãƒ¥ãƒ¼ã®å ´åˆã€ã“ã‚Œã¯ã‚­ãƒ¥ãƒ¼ãŒå–å¾—ã™ã‚‹å…±æœ‰ã‚’指定"(値ã¯1ã‹ã‚‰100ã®ç¯„囲ã«ã¯ã€ãã†ã§ãªã„å ´åˆã€ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰"
+
+#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520
+#: etc/inc/shaper.inc:3521 etc/inc/shaper.inc:3528 etc/inc/shaper.inc:3596
+#: etc/inc/shaper.inc:3698
+msgid "slots"
+msgstr "スロット"
+
+#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661
+#: etc/inc/shaper.inc:3662 etc/inc/shaper.inc:3669 etc/inc/shaper.inc:3737
+#: etc/inc/shaper.inc:3842
+msgid "Enable/Disable layer7 Container"
+msgstr "レイヤ7コンテナを有効ã¾ãŸã¯ç„¡åŠ¹ã«ã—ã¾ã™"
+
+#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911
+#: etc/inc/shaper.inc:3912 etc/inc/shaper.inc:3919 etc/inc/shaper.inc:3987
+#: etc/inc/shaper.inc:4092
+#, php-format
+msgid "Sending HUP signal to %s"
+msgstr "%sã«HUPシグナルをé€ã‚‹"
+
+#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269
+#: etc/inc/shaper.inc:4270 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4345
+#: etc/inc/shaper.inc:4450
+msgid " Clone shaper/queue on this interface"
+msgstr " Clone shaper/queue on this interface"
+
+#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120
+#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284
+#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 etc/inc/shaper.inc:4292
+#: etc/inc/shaper.inc:4353 etc/inc/shaper.inc:4360 etc/inc/shaper.inc:4458
+#: etc/inc/shaper.inc:4465
+#, php-format
+msgid "Welcome to the %s Traffic Shaper."
+msgstr "%sã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯Â·ã‚·ã‚§ãƒ¼ãƒ‘ã«ã‚ˆã†ã“ã。"
+
+#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121
+#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285
+#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 etc/inc/shaper.inc:4293
+#: etc/inc/shaper.inc:4354 etc/inc/shaper.inc:4361 etc/inc/shaper.inc:4459
+#: etc/inc/shaper.inc:4466
+msgid ""
+"The tree on the left helps you navigate through the queues <br />buttons at "
+"the bottom represent queue actions and are activated accordingly."
+msgstr ""å·¦å´ã®ãƒ„リーã§ã¯ã€ã‚­ãƒ¥ãƒ¼ã®å‹•ä½œã‚’表ã—ã¦ãŠã‚Šã€ãã‚Œã«å¿œã˜ã¦<br />èµ·å‹•ã•ã‚Œã‚‹ä¸‹éƒ¨"ã«ã‚­ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã‚’ナビゲートã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚"
+
+#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457
+#: etc/inc/system.inc:467
+#, php-format
+msgid "Static Routes: Gateway IP could not be found for %s"
+msgstr "é™çš„ルート:ゲートウェイã®IPã¯%sを見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533
+#: etc/inc/system.inc:547 etc/inc/system.inc:606
+msgid "Starting syslog..."
+msgstr "syslogを開始..."
+
+#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572
+#: etc/inc/system.inc:695 etc/inc/system.inc:754
+#, php-format
+msgid "Error: cannot open syslog.conf in system_syslogd_start().%s"
+msgstr "エラー:system_syslogd_start.().%s 処ç†ã®syslog.confã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716
+#: etc/inc/system.inc:725 etc/inc/system.inc:784
+msgid "Initializing PCMCIA..."
+msgstr "PCMCIAã®åˆæœŸåŒ–..."
+
+#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412
+#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808
+#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728
+#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514
+#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460
+#: etc/inc/system.inc:1463 etc/inc/system.inc:796 etc/inc/system.inc:876
+#: etc/inc/system.inc:1519 etc/inc/system.inc:1522
+msgid "failed!"
+msgstr "フェイル"
+
+#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739
+#: etc/inc/system.inc:748 etc/inc/system.inc:807
+msgid "Starting webConfigurator..."
+msgstr "webConfiguratorを開始..."
+
+#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771
+#: etc/inc/system.inc:775 etc/inc/system.inc:834
+msgid "webConfigurator default"
+msgstr "webConfiguratorデフォルト"
+
+#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781
+#: etc/inc/system.inc:785 etc/inc/system.inc:844
+msgid "Importing HTTPS certificate"
+msgstr "HTTPS証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
+
+#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147
+#: etc/inc/system.inc:1096 etc/inc/system.inc:1155
+#, php-format
+msgid "Error: cannot open cert.pem in system_webgui_start().%s"
+msgstr "エラー:system_webgui_start.().%s 処ç†cert.pemã«é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158
+#: etc/inc/system.inc:1107 etc/inc/system.inc:1166
+#, php-format
+msgid "Error: cannot open ca.pem in system_webgui_start().%s"
+msgstr "エラー:system_webgui_start.().%s 処ç†ca.pemã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166
+#: etc/inc/system.inc:1115 etc/inc/system.inc:1174
+msgid "ssl configuration"
+msgstr "SSL設定"
+
+#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193
+#: etc/inc/system.inc:1142 etc/inc/system.inc:1201
+#, php-format
+msgid "Error: cannot open %s in system_generate_lighty_config().%s"
+msgstr "エラー:system_generate_lighty_config.().%s 処ç†%sã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213
+#: etc/inc/system.inc:1162 etc/inc/system.inc:1221
+msgid "Setting timezone..."
+msgstr "タイムゾーンã®è¨­å®š..."
+
+#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368
+#: etc/inc/system.inc:1310 etc/inc/system.inc:1369
+msgid "Syncing system time before startup..."
+msgstr "èµ·å‹•ã™ã‚‹å‰ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã®æ™‚刻をåŒæœŸã•ã›ã‚‹..."
+
+#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475
+#: etc/inc/system.inc:1424 etc/inc/system.inc:1483
+#, php-format
+msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s"
+msgstr "エラー:system_dmesg_save.().%s 処ç†dmesg.booté–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496
+#: etc/inc/system.inc:1445 etc/inc/system.inc:1504
+msgid "Setting hard disk standby... "
+msgstr "ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒ³ãƒã‚¤ã®è¨­å®š... "
+
+#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613
+#: etc/inc/system.inc:1562 etc/inc/system.inc:1621
+msgid "Generic PC"
+msgstr "一般的ãªPC"
+
+#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616
+#: etc/inc/system.inc:1565 etc/inc/system.inc:1624
+msgid "Generic PC (CD-ROM)"
+msgstr "一般的ãªPC (シーディーロム)"
+
+#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625
+#: etc/inc/system.inc:1574 etc/inc/system.inc:1633
+msgid "PC Engines WRAP"
+msgstr "PCエンジンラップ"
+
+#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628
+#: etc/inc/system.inc:1577 etc/inc/system.inc:1636
+msgid "PC Engines ALIX"
+msgstr "PCエンジンALIX"
+
+#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640
+#: etc/inc/system.inc:1589 etc/inc/system.inc:1648
+msgid "embedded (unknown)"
+msgstr "埋ã‚è¾¼ã¿ï¼ˆä¸æ˜Žï¼‰"
+
+msgstr "埋ã‚è¾¼ã¿ï¼ˆä¸æ˜Žï¼‰"
+
+#: etc/inc/util.inc:99 etc/inc/util.inc:101 etc/inc/util.inc:101
+#, php-format
+msgid "WARNING: Could not mark subsystem: %s dirty"
+msgstr "警告:サブシステムをマークã§ãã¾ã›ã‚“ã§ã—ãŸï¼šæ±šã„%s"
+
+#: etc/inc/util.inc:119 etc/inc/util.inc:121 etc/inc/util.inc:121
+msgid "WARNING: You must give a name as parameter to lock() function."
+msgstr "警告:ã‚ãªãŸãŒæ©Ÿèƒ½ã‚’ lock.() パラメータã¨ã—ã¦åå‰ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238
+#: etc/inc/util.inc:240 etc/inc/util.inc:240
+#, php-format
+msgid "Reference %s is going negative, not doing unreference."
+msgstr "å‚ç…§%sã¯ã¯ã€è² æ–¹å‘ã®éžå‚照を実行ã—ã¦ã„ã¾ã›ã‚“。"
+
+#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026
+#: etc/inc/util.inc:1076 etc/inc/util.inc:1080 etc/inc/util.inc:1080
+#, php-format
+msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' "
+msgstr "コマンドã¯ã€Œ%1$sã€ãŒçµ‚了コード'%2$dã€ã‚’è¿”ã•ã‚Œã‚‹ã¨ã€å‡ºåŠ›ã¯ã€Œ%3$sã€ã ã£ãŸ"
+
+#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:133
+msgid "Configuring IPsec VPN... "
+msgstr "IPsecã®VPNを設定... "
+
+#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238
+#: etc/inc/vpn.inc:237 etc/inc/vpn.inc:236
+#, php-format
+msgid "Error: Invalid certificate info for %s"
+msgstr "エラー:%s無効ãªè¨¼æ˜Žæ›¸æƒ…å ±"
+
+#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244
+#: etc/inc/vpn.inc:243 etc/inc/vpn.inc:242
+#, php-format
+msgid "Error: Invalid certificate hash info for %s"
+msgstr "エラー:%s無効ãªè¨¼æ˜Žæ›¸ã®ãƒãƒƒã‚·ãƒ¥æƒ…å ±"
+
+#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249
+#: etc/inc/vpn.inc:248 etc/inc/vpn.inc:247
+#, php-format
+msgid "Error: Cannot write IPsec CA file for %s"
+msgstr "エラー: %sã®IPsec CAファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248
+#, php-format
+msgid "Error: cannot open psk.txt in vpn_ipsec_configure()."
+msgstr "エラー: vpn_ipsec_configure.()ã«psk.txtã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311
+#, php-format
+msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()."
+msgstr "エラー: vpn_ipsec_configure.()ã§ã®racoon.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403
+#, php-format
+msgid "Error: cannot open server %s in vpn.\n"
+msgstr "エラー: vpn.\nã§ã‚µãƒ¼ãƒãƒ¼%sã‚’é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546
+#: etc/inc/vpn.inc:549 etc/inc/vpn.inc:548
+#, php-format
+msgid "Error: Invalid phase1 certificate reference for %s"
+msgstr "エラー: %sã®ç„¡åŠ¹ãªãƒ•ã‚§ãƒ¼ã‚º1証明書ã®å‚ç…§"
+
+#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555
+#: etc/inc/vpn.inc:558 etc/inc/vpn.inc:557
+#, php-format
+msgid "Error: Cannot write phase1 certificate file for %s"
+msgstr "エラー: %sãŸã‚ã®ãƒ•ã‚§ãƒ¼ã‚º1ã®è¨¼æ˜Žæ›¸ãƒ•ã‚¡ã‚¤ãƒ«ã‚’書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566
+#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568
+#, php-format
+msgid "Error: Cannot write phase1 key file for %s"
+msgstr "エラー: %sãŸã‚ã®ãƒ•ã‚§ãƒ¼ã‚º1キーファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579
+#: etc/inc/vpn.inc:582 etc/inc/vpn.inc:581
+#, php-format
+msgid "Error: Cannot write phase1 CA certificate file for %s"
+msgstr "エラー: %sãŸã‚ã®ãƒ•ã‚§ãƒ¼ã‚º1ã®CA証明書ファイルを書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829
+#, php-format
+msgid "Error: cannot open spd.conf in vpn_ipsec_configure()."
+msgstr "エラー: vpn_ipsec_configure.()ã«spd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013
+#: etc/inc/vpn.inc:1022 etc/inc/vpn.inc:1035 etc/inc/vpn.inc:1034
+msgid "Forcefully reloading IPsec racoon daemon"
+msgstr "強制的ã«IPsec racoonデーモンをå†ãƒ­ãƒ¼ãƒ‰"
+
+#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056
+#: etc/inc/vpn.inc:1065 etc/inc/vpn.inc:1078 etc/inc/vpn.inc:1077
+msgid "Configuring PPTP VPN service... "
+msgstr "PPTPã®VPNサービスã®è¨­å®š..."
+
+#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066
+#: etc/inc/vpn.inc:1075 etc/inc/vpn.inc:1088 etc/inc/vpn.inc:1087
+msgid "Could not kill mpd within 3 seconds. Trying again."
+msgstr "3秒以内ã«MPDを殺ã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚å†è©¦è¡Œã€‚"
+
+#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089
+#: etc/inc/vpn.inc:1098 etc/inc/vpn.inc:1111 etc/inc/vpn.inc:1110
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()."
+msgstr "エラー: vpn_pptpd_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202
+#: etc/inc/vpn.inc:1212 etc/inc/vpn.inc:1225 etc/inc/vpn.inc:1224
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pptpd_configure()."
+msgstr "エラー: vpn_pptpd_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226
+#: etc/inc/vpn.inc:1237 etc/inc/vpn.inc:1250 etc/inc/vpn.inc:1249
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()."
+msgstr "エラー: vpn_pptpd_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283
+#: etc/inc/vpn.inc:1295 etc/inc/vpn.inc:1308 etc/inc/vpn.inc:1307
+msgid "Configuring PPPoE Server service... "
+msgstr "PPPoEã®VPNサービスã®è¨­å®š..."
+
+#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307
+#: etc/inc/vpn.inc:1319 etc/inc/vpn.inc:1332 etc/inc/vpn.inc:1331
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()."
+msgstr "エラー: vpn_pppoe_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410
+#: etc/inc/vpn.inc:1423 etc/inc/vpn.inc:1436 etc/inc/vpn.inc:1435
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pppoe_configure()."
+msgstr "エラー: vpn_pppoe_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436
+#: etc/inc/vpn.inc:1450 etc/inc/vpn.inc:1463 etc/inc/vpn.inc:1462
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()."
+msgstr "エラー: vpn_pppoe_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139
+#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468
+#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483
+#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1496
+#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1495
+msgid "done"
+msgstr "終ã‚ã£ãŸ"
+
+#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487
+#: etc/inc/vpn.inc:1502 etc/inc/vpn.inc:1515 etc/inc/vpn.inc:1514
+msgid "Configuring l2tp VPN service... "
+msgstr "L2TPã®VPNサービスã®è¨­å®š..."
+
+#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512
+#: etc/inc/vpn.inc:1527 etc/inc/vpn.inc:1540 etc/inc/vpn.inc:1539
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()."
+msgstr "エラー: vpn_l2tp_configure.()ã«mpd.confã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605
+#: etc/inc/vpn.inc:1621 etc/inc/vpn.inc:1634 etc/inc/vpn.inc:1633
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_l2tp_configure()."
+msgstr "エラー: vpn_l2tp_configure.()ã«mpd.linksã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630
+#: etc/inc/vpn.inc:1647 etc/inc/vpn.inc:1660 etc/inc/vpn.inc:1659
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()."
+msgstr "エラー: vpn_l2tp_configure.()ã«mpd.secretã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764
+#: etc/inc/vpn.inc:1836 etc/inc/vpn.inc:1849 etc/inc/vpn.inc:1846
+#, php-format
+msgid "Could not determine VPN endpoint for '%s'"
+msgstr "「 %s'ã®VPNエンドãƒã‚¤ãƒ³ãƒˆã‚’決定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769
+#: etc/inc/vpn.inc:1841 etc/inc/vpn.inc:1854 etc/inc/vpn.inc:1851
+#, php-format
+msgid ""
+"IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP "
+"'%2$s'"
+msgstr "「 IPSEC :エラー:エンドãƒã‚¤ãƒ³ãƒˆã®ä¸€ã¤ã¯ã€ IPアドレスã®æ—§EP "ã¯%1$s'æ–°EPã§ã¯ã‚ã‚Šã¾ã›ã‚“〠「 %2$s'"
+
+#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772
+#: etc/inc/vpn.inc:1844 etc/inc/vpn.inc:1857 etc/inc/vpn.inc:1854
+#, php-format
+msgid ""
+"IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' "
+"new RG '%2$s'"
+msgstr "「 IPSEC :エラー:リモートエンドãƒã‚¤ãƒ³ãƒˆã®ä¸€ã¤ã¯ã€ IPアドレスオールドRG'ã¯%1$s ã€ã§ã¯ãªã„「新ã—ã„RG' %2$s'"
+
+#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835
+#: etc/inc/vpn.inc:1907 etc/inc/vpn.inc:1920 etc/inc/vpn.inc:1917
+#, php-format
+msgid ""
+"Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. "
+"Reloading policy"
+msgstr "「リロードIPsecトンãƒãƒ«ã€ã¯%1$s' 。以å‰ã®IP' %2$s'ã€ç¾åœ¨ã®IP' %3$s' 。 "リロードãƒãƒªã‚·ãƒ¼"
+
+#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78
+#: etc/inc/xmlparse_attr.inc:78 etc/inc/xmlparse.inc:85
+#, php-format
+msgid "XML error: %1$s at line %2$d cannot occur more than once"
+msgstr "XMLエラー:行% 2ã® $ dã®ã¯%1$sãŒè¤‡æ•°å›žå‡ºç¾ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187
+#: etc/inc/xmlparse_attr.inc:187 etc/inc/xmlparse.inc:176
+msgid "Error: could not open XML input"
+msgstr "エラー: XML入力をオープンã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/xmlparse.inc:182 etc/inc/xmlparse.inc:182
+#, php-format
+msgid "XML error: %1$s at line %2$d in %3$s"
+msgstr "XMLエラー:行%ã§ã¯%1$s %3$s中2 $ dã®"
+
+#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210
+#: etc/inc/xmlparse.inc:199 etc/inc/xmlparse_attr.inc:210
+#: etc/inc/xmlparse.inc:199
+#, php-format
+msgid "XML error: no %s object found!"
+msgstr "XMLエラー:ãªã—%sオブジェクト見ã¤ã‹ã‚‰ãªã„ ï¼"
+
+#: etc/inc/xmlrpc_client.inc:152 etc/inc/xmlrpc_client.inc:152
+msgid "Unknown method"
+msgstr "未知ã®æ–¹æ³•"
+
+#: etc/inc/xmlrpc_client.inc:153 etc/inc/xmlrpc_client.inc:153
+msgid "Invalid return payload: enable debugging to examine incoming payload"
+msgstr "無効ãªæˆ»ã‚Šãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ï¼šå—信ペイロードを検査ã™ã‚‹ãŸã‚ã«ãƒ‡ãƒãƒƒã‚°ã‚’有効ã«"
+
+#: etc/inc/xmlrpc_client.inc:154 etc/inc/xmlrpc_client.inc:154
+msgid "Incorrect parameters passed to method"
+msgstr "メソッドã«æ¸¡ã•ã‚ŒãŸãƒ‘ラメータãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/xmlrpc_client.inc:155 etc/inc/xmlrpc_client.inc:155
+msgid "Can't introspect: method unknown"
+msgstr "イントロスペクションã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“:メソッド未知"
+
+#: etc/inc/xmlrpc_client.inc:156 etc/inc/xmlrpc_client.inc:156
+msgid "Didn't receive 200 OK from remote server."
+msgstr "リモートサーãƒã‹ã‚‰200 OKã‚’å—ä¿¡ã—ã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/xmlrpc_client.inc:157 etc/inc/xmlrpc_client.inc:157
+msgid "The requested method didn't return an XML_RPC_Response object."
+msgstr "è¦æ±‚ã•ã‚ŒãŸãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã¯XML_RPC_ResponseオブジェクトãŒè¿”ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/xmlrpc_client.inc:158 etc/inc/xmlrpc_client.inc:158
+msgid "Invalid request payload"
+msgstr "無効ãªè¦æ±‚ペイロード"
+
+#: etc/inc/xmlrpc_client.inc:260 etc/inc/xmlrpc_client.inc:260
+msgid "missing top level xmlrpc element"
+msgstr "トップレベルã®XMLRPCè¦ç´ ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/xmlrpc_client.inc:268 etc/inc/xmlrpc_client.inc:268
+#, php-format
+msgid "xmlrpc element %1$s cannot be child of %2$s"
+msgstr "XMLRPCè¦ç´ ã¯%1$sã¯%2$sã®å­ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/xmlrpc_client.inc:431 etc/inc/xmlrpc_client.inc:431
+msgid "Non-numeric value received in INT or DOUBLE"
+msgstr "数値以外ã®å€¤ãŒINTã¾ãŸã¯DOUBLEã§å—ä¿¡"
+
+#: etc/inc/xmlrpc_client.inc:860 etc/inc/xmlrpc_client.inc:860
+#, php-format
+msgid "send()'s %s parameter must be an XML_RPC_Message object."
+msgstr "send.()ã®%sパラメータã¯XML_RPC_Messageオブジェクトã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/xmlrpc_client.inc:951 etc/inc/xmlrpc_client.inc:951
+#, php-format
+msgid ""
+"Connection to proxy server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr "ã¯%1$s 「プロキシサーãƒ\nã¸ã®æŽ¥ç¶šã€ : %2$sã«å¤±æ•—ã—ã¾ã—ãŸã€‚ %3$s"
+
+#: etc/inc/xmlrpc_client.inc:957 etc/inc/xmlrpc_client.inc:957
+#, php-format
+msgid ""
+"Connection to RPC server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr "ã¯%1$s 「RPCサーãƒãƒ¼\nã¸ã®æŽ¥ç¶šã€ : %2$sã«å¤±æ•—ã—ã¾ã—ãŸã€‚ %3$s"
+
+#: etc/inc/xmlrpc_client.inc:1330 etc/inc/xmlrpc_client.inc:1330
+msgid "The submitted request did not contain this parameter"
+msgstr "é€ä¿¡ã•ã‚ŒãŸè¦æ±‚ã¯ã€ã“ã®ãƒ‘ラメータãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/xmlrpc_client.inc:1361 etc/inc/xmlrpc_client.inc:1361
+msgid "mb_convert_encoding() is not available"
+msgstr "mb_convert_encoding.()ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
+
+#: etc/inc/xmlrpc_client.inc:1470 etc/inc/xmlrpc_client.inc:1470
+#, php-format
+msgid "HTTP error, got response: %s"
+msgstr "HTTPエラーã€æŒã£å¿œç­”: %s"
+
+#: etc/inc/xmlrpc_client.inc:1496
+msgid "XML error at line 1, check URL"
+msgstr "1行目ã®XMLエラー〠URLを確èªã—ã¦ãã ã•ã„"
+
+#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593
+#: etc/inc/xmlrpc_client.inc:1593
+msgid "Scalar can have only one value"
+msgstr "スカラ1ã¤ã®å€¤ã—ã‹æŒã¤ã“ã¨ãŒã§ãã¾ã™"
+
+#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600
+#: etc/inc/xmlrpc_client.inc:1600
+#, php-format
+msgid "Not a scalar type (%s)"
+msgstr "スカラ型ã§ãªã„( %s )"
+
+#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650
+#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652
+#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652
+#, php-format
+msgid "Already initialized as a [%s]"
+msgstr "ã™ã§ã«ï¼ˆ ) ( %s )ã¨ã—ã¦åˆæœŸåŒ–"
+
+#: etc/inc/xmlrpc_server.inc:48 etc/inc/xmlrpc_server.inc:48
+msgid ""
+"This method lists all the methods that the XML-RPC server knows how to "
+"dispatch"
+msgstr "発é€"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€XML -RPCサーãƒãŒã©ã®ã‚ˆã†ã«çŸ¥ã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒä¸€è¦§è¡¨ç¤ºã•ã‚Œã¾ã™""
+
+#: etc/inc/xmlrpc_server.inc:66 etc/inc/xmlrpc_server.inc:66
+msgid ""
+"Returns an array of known signatures (an array of arrays) for the method "
+"name passed. If no signatures are known, returns a none-array (test for "
+"type != array to detect missing signature)"
+msgstr "渡ã•ã‚ŒãŸåå‰"メソッドã®ãŸã‚ã«çŸ¥ã‚‰ã‚Œã¦ã‚·ã‚°ãƒãƒãƒ£ã®é…列(é…列ã®é…列)を返ã—ã¾ã™ã€ 。全ãç½²åãŒçŸ¥ã‚‰ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ ( 「タイプ ï¼ =行方ä¸æ˜Žã®ç½²åを検出ã™ã‚‹ãŸã‚ã®ã‚¢ãƒ¬ã‚¤ã®ãŸã‚ã®ãƒ†ã‚¹ãƒˆï¼‰ãªã— - é…列を返ã—ã¾ã™"
+
+#: etc/inc/xmlrpc_server.inc:86 etc/inc/xmlrpc_server.inc:86
+msgid ""
+"Returns help text if defined for the method passed, otherwise returns an "
+"empty string"
+msgstr "空ã®æ–‡å­—列"渡ã•ã‚ŒãŸãƒ¡ã‚½ãƒƒãƒ‰ã®ãŸã‚ã«å®šç¾©ã•ã‚Œã¦ã„ã‚‹å ´åˆæˆ»ã‚Šå€¤ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’助ã‘ã‚‹ã€ãã†ã§ãªã‘ã‚Œã°è¿”ã™ã€"
+
+#: etc/inc/authgui.inc:73 etc/inc/authgui.inc:73
+msgid "No page assigned to this user! Click here to logout."
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒšãƒ¼ã‚¸ã§ã™ï¼ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹ã«ã¯ã“ã“をクリックã—ã¦ãã ã•ã„。"
+
+#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103 etc/inc/authgui.inc:103
+#, php-format
+msgid "Error: %1$s Description: %2$s"
+msgstr "エラー:ã¯%1$sã®èª¬æ˜Žï¼š %2$s"
+
+#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165
+#: etc/inc/authgui.inc:165
+msgid "unknown reason"
+msgstr "未知ã®åŽŸå› "
+
+#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166
+#: etc/inc/authgui.inc:166
+#, php-format
+msgid "Invalid login (%s)."
+msgstr "無効ãªãƒ­ã‚°ã‚¤ãƒ³ï¼ˆ %s ) 。"
+
+#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171
+#: etc/inc/authgui.inc:171
+#, php-format
+msgid "This device is currently being maintained by: %s."
+msgstr "%s. :ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ç¾åœ¨ã§ç¶­æŒã•ã‚Œã¦ã„ã‚‹"
+
+#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212
+#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298
+#: etc/inc/authgui.inc:235 etc/inc/authgui.inc:298
+msgid "Login"
+msgstr "ログイン"
+
+#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263
+#: etc/inc/authgui.inc:263
+msgid ""
+"You are accessing this router by an IP address not configured locally, which "
+"may be forwarded by NAT or other means. <br /><br />If you did not setup this "
+"forwarding, you may be the target of a man-in-the-middle attack."
+msgstr "NATã¾ãŸã¯ãã®ä»–ã®æ‰‹æ®µã«ã‚ˆã£ã¦è»¢é€ã•ã‚Œã¦ã‚‚よã„ã€ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã«è¨­å®šã•ã‚Œã¦ã„ãªã„IPアドレスã«ã‚ˆã£ã¦ã€ã“ã®ãƒ«ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„る〠。セットアップã“ã®ã€Œè»¢é€ã—ãªã‹ã£ãŸ<br /><br />Ifã¯ã€ man-in-the-middle攻撃ã®æ¨™çš„ã¨ãªã‚‹å¯èƒ½æ€§ãŒã‚る。"
+
+#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272
+#: etc/inc/authgui.inc:272
+msgid "Username:"
+msgstr "ユーザーå:"
+
+#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597
+#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256
+#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632
+#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681
+#: etc/inc/authgui.inc:279 usr/local/www/system_authservers.php:639
+#: usr/local/www/diag_backup.php:681 etc/inc/authgui.inc:279
+msgid "Password:"
+msgstr "パスワード:"
+
+#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286
+#: etc/inc/authgui.inc:286
+msgid "Enter username and password to login."
+msgstr "ユーザåã¨ãƒ‘スワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚"
+
+#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292
+#: etc/inc/authgui.inc:292
+msgid "Your browser must support cookies to login."
+msgstr "ãŠä½¿ã„ã®ãƒ–ラウザã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã‚ã«Cookieをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/cmd_chain.inc:101
+#, php-format
+msgid "CmdCHAIN is executing -> %1$s - %2$s"
+msgstr "CmdCHAIN​​ãŒå®Ÿè¡Œã•ã‚Œã¦ã„ã‚‹ - u003eã¯%1$s - %2$s"
+
+#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111
+#, php-format
+msgid "%1$s failed with return code -> %2$s. The command was %3$s"
+msgstr "ã¯%1$s ã€æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã§å¤±æ•—ã—ã¾ã—㟠- u003e %2$s 。コマンドã¯%3$sãŸ"
+
+#: etc/inc/config.console.inc:58 etc/inc/config.console.inc:58
+msgid "DANGER! WARNING! ACHTUNG!"
+msgstr "å±é™º ï¼è­¦å‘Š ï¼ ACHTUNG ï¼"
+
+#: etc/inc/config.console.inc:59 etc/inc/config.console.inc:59
+#, php-format
+msgid "%s requires *AT LEAST* %s RAM to function correctly.%s"
+msgstr "%sã¯* correctly.%s機能ã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚* %s RAMãŒå¿…è¦ã§ã™"
+
+#: etc/inc/config.console.inc:60 etc/inc/config.console.inc:60
+#, php-format
+msgid "Only (%s) MB RAM has been detected.%s"
+msgstr "ã®ã¿ï¼ˆ %s ) MBã®RAMãŒdetected.%sã•ã‚Œã¦ã„ã‚‹"
+
+#: etc/inc/config.console.inc:61 etc/inc/config.console.inc:61
+msgid "Press ENTER to continue."
+msgstr "Enterキーを押ã—ã¦ç¶šè¡Œã—ã¾ã™ã€‚"
+
+#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495
+#: etc/inc/config.console.inc:497 etc/inc/config.console.inc:83
+#: etc/inc/config.console.inc:497
+msgid "No interfaces found!"
+msgstr "何ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€è¦‹ã¤ã‹ã‚‰ãªã„ï¼"
+
+#: etc/inc/config.console.inc:181 etc/inc/config.console.inc:181
+msgid "VLAN interfaces:"
+msgstr "VLANインタフェース:"
+
+#: etc/inc/config.console.inc:207 etc/inc/config.console.inc:207
+msgid "Enter the WAN interface name or 'a' for auto-detection:"
+msgstr ": WANインターフェイスåã€ã¾ãŸã¯è‡ªå‹•æ¤œå‡ºã®ãŸã‚ã®ã€ŒAã€ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276
+#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520
+#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:215
+#: etc/inc/config.console.inc:244 etc/inc/config.console.inc:276
+#: etc/inc/config.console.inc:520
+#, php-format
+msgid "%sInvalid interface name '%s'%s"
+msgstr "%sInvalidインタフェースå「 %s' %s"
+
+#: etc/inc/config.console.inc:222 etc/inc/config.console.inc:222
+#, php-format
+msgid ""
+"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this "
+"enables full Firewalling/NAT mode.%s(or nothing if finished):%s"
+msgstr "「LANインタフェースåã¾ãŸã¯''自動検出%sNOTEãŸã‚%sEnter :ã“ã‚Œã¯ã€Œãƒ•ãƒ«ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼/ NAT mode.%s (ã¾ãŸã¯å®Œæˆã—ãŸå ´åˆNothing)を有効ã«ã—ã¾ã™ã€‚ %s"
+
+#: etc/inc/config.console.inc:244
+#, php-format
+msgid "%sInvalid interface name '%s'%s)"
+msgstr "%sInvalidインタフェースå「 %s' %s )"
+
+#: etc/inc/config.console.inc:261 etc/inc/config.console.inc:261
+#, php-format
+msgid "%sOptional interface %s description found: %s"
+msgstr "%s : %sOptionalインタフェースãŒè¨˜è¿°ç™ºè¦‹ã‚’%s"
+
+#: etc/inc/config.console.inc:264
+#, php-format
+msgid "(or nothing if finished):%s"
+msgstr "(ã¾ãŸã¯ä½•ã‚‚終ã‚ã£ã¦ã„ã‚‹å ´åˆï¼‰ : %s"
+
+#: etc/inc/config.console.inc:270 etc/inc/config.console.inc:270
+msgid "Optional"
+msgstr "オプショナル"
+
+#: etc/inc/config.console.inc:304 etc/inc/config.console.inc:304
+msgid "The interfaces will be assigned as follows:"
+msgstr "次ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚"
+
+#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418
+#: etc/inc/config.console.inc:418
+#, php-format
+msgid "%sWriting configuration..."
+msgstr "設定を%sWriting..."
+
+#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420
+#: etc/inc/config.console.inc:420
+#, php-format
+msgid "done.%s"
+msgstr "done.%s"
+
+#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427
+#: etc/inc/config.console.inc:427
+msgid "One moment while we reload the settings..."
+msgstr "一瞬我々ã¯ã€è¨­å®šã‚’リロードã—ãªãŒã‚‰..."
+
+#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431
+#: etc/inc/config.console.inc:431
+msgid " done!"
+msgstr "行゠ï¼"
+
+#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451
+#: etc/inc/config.console.inc:451
+#, php-format
+msgid "Detected link-up on interface %s.%s"
+msgstr "インタフェース%s.%sã§æ¤œå‡ºã•ã‚ŒãŸãƒªãƒ³ã‚¯ã‚¢ãƒƒãƒ—"
+
+#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456
+#: etc/inc/config.console.inc:456
+#, php-format
+msgid "No link-up detected.%s"
+msgstr "ã„ã„ãˆãƒªãƒ³ã‚¯ã‚¢ãƒƒãƒ—detected.%sã‚“"
+
+#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495
+#: etc/inc/config.console.inc:495
+msgid "VLAN Capable interfaces:"
+msgstr "VLAN対応インターフェイス:"
+
+#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510
+#: etc/inc/config.console.inc:510
+msgid "No VLAN capable interfaces detected."
+msgstr "ã„ã„ãˆã€VLANãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€æ¤œå‡ºã•ã‚Œã¾ã›ã‚“。"
+
+#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514
+#: etc/inc/config.console.inc:514
+msgid ""
+"Enter the parent interface name for the new VLAN (or nothing if finished):"
+msgstr "「新ã—ã„VLAN (ã¾ãŸã¯å®Œæˆã—ãŸå ´åˆã¯Nothing)ã®è¦ªã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹åを入力ã—ã¾ã™ã€‚"
+
+#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527
+#: etc/inc/config.console.inc:527
+msgid "Enter the VLAN tag (1-4094):"
+msgstr "VLANタグ( 1-4094 )を入力ã—ã¾ã™ã€‚"
+
+#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531
+#: etc/inc/config.console.inc:531
+#, php-format
+msgid "%sInvalid VLAN tag '%s'%s"
+msgstr "%sInvalid VLANタグ「 %s' %s"
+
+#: etc/inc/config.lib.inc:79 etc/inc/config.lib.inc:79
+msgid "Config.xml unlocked."
+msgstr "config.xmlãŒã‚¢ãƒ³ãƒ­ãƒƒã‚¯ã€‚"
+
+#: etc/inc/config.lib.inc:82 etc/inc/config.lib.inc:82
+msgid "Invalid password entered. Please try again."
+msgstr "無効ãªãƒ‘スワードãŒå…¥åŠ›ã•ã‚Œã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。"
+
+#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140
+#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:110
+#: etc/inc/config.lib.inc:140 etc/inc/config.lib.inc:271
+msgid ""
+"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."
+msgstr "「 config.xmlã¨ã„ã†ç ´æã—〠0ãƒã‚¤ãƒˆã§ã‚る。以å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã§ãã¾ã›ã‚“ã§ã—ãŸã•ã‚Œã¦ã„る。"
+
+#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149
+#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560
+#: etc/inc/config.lib.inc:577 etc/inc/config.lib.inc:555
+#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149
+#: etc/inc/config.lib.inc:555
+msgid "Could not restore config.xml."
+msgstr "config.xmlã«ã¯å¾©å…ƒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211
+#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211
+#, php-format
+msgid "%1$s is restoring the configuration %2$s"
+msgstr "ã¯%1$sã¯ã€ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³%2$sを復元ã•ã‚Œã¦ã„ã‚‹"
+
+#: etc/inc/config.lib.inc:233 etc/inc/config.lib.inc:233
+msgid "Resetting factory defaults..."
+msgstr "工場出è·æ™‚ã®è¨­å®šã‚’リセットã™ã‚‹..."
+
+#: etc/inc/config.lib.inc:236 etc/inc/config.lib.inc:236
+msgid ""
+"No XML configuration file found - using factory defaults.\n"
+"Make sure that the configuration floppy disk with the conf/config.xml\n"
+"file is inserted. If it isn't, your configuration changes will be lost\n"
+"on reboot.\n"
+msgstr "「見ã¤ã‹ã‚Šã¾ã›ã‚“XML設定ファイル - 工場defaults.\n使用ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ãã†ã§ãªã„å ´åˆã¯ç ”究会/ config.xml\n "ファイルを使用ã—ã¦æ§‹æˆã‚’フロッピーディスクãŒæŒ¿å…¥ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã€è¨­å®šã®å¤‰æ›´ã¯lost\nã§ããªããªã‚Šã¾ã™ã€Œ reboot.\n上"
+
+#: etc/inc/config.lib.inc:249 etc/inc/config.lib.inc:249
+#, php-format
+msgid "XML configuration file not found. %s cannot continue booting."
+msgstr "XML設定ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 %sã¯ãƒ–ートを続行ã§ãã¾ã›ã‚“。"
+
+#: etc/inc/config.lib.inc:255 etc/inc/config.lib.inc:255
+msgid ""
+"Last known config found and restored. Please double check your "
+"configuration file for accuracy."
+msgstr "精度ã®ãŸã‚ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã€Œæœ€å¾Œã®æ—¢çŸ¥ã®è¨­å®šãŒè¦‹ã¤ã‹ã‚Šã€å¾©å…ƒã•ã‚ŒãŸã€‚ã‚ãªãŸã‚’å†ç¢ºèªã—ã¦ãã ã•ã„〠。"
+
+#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320
+#: etc/inc/config.lib.inc:320
+msgid "Disk is dirty. Running fsck -y"
+msgstr "ディスクãŒæ±šã‚Œã¦ã„ã¾ã™ã€‚ fsckã‚’-Y稼åƒ"
+
+#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331
+#: etc/inc/config.lib.inc:331
+msgid "File system is dirty. Launching FSCK for /"
+msgstr "ファイルシステムã¯æ±šã‚Œã¦ã„る。 /ã®ãŸã‚ã®èµ·å‹•FSCK"
+
+#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382
+#: etc/inc/config.lib.inc:382
+#, php-format
+msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes"
+msgstr "%sã§ã®ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒƒãƒ—グレード〠15分ã«è¨­å®šã•ã‚Œã€å®Ÿè¡Œã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’開始"
+
+#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390
+#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393
+#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393
+msgid "Updated bogon update frequency to 3am"
+msgstr "åˆå‰3時ã«æ›´æ–°ã•ã‚ŒãŸbogonã®æ›´æ–°é »åº¦"
+
+#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423
+#: etc/inc/config.lib.inc:423
+#, php-format
+msgid "Ended Configuration upgrade at %s"
+msgstr "%sã§ã‚¨ãƒ³ãƒ‰æ§‹æˆã®ã‚¢ãƒƒãƒ—グレード"
+
+#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426
+#: etc/inc/config.lib.inc:426
+#, php-format
+msgid "Upgraded config version level from %1$s to %2$s"
+msgstr "%2$sã«ã¯%1$sã‹ã‚‰ã‚¢ãƒƒãƒ—グレードã—ãŸã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³Â·ãƒ¬ãƒ™ãƒ«"
+
+#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520
+#: etc/inc/config.lib.inc:537 etc/inc/config.lib.inc:903
+#: etc/inc/config.lib.inc:903
+#, php-format
+msgid "%s made unknown change"
+msgstr "%sã¯ã€æœªçŸ¥ã®å¤‰æ›´ã‚’è¡Œã£ãŸ"
+
+#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533
+#: etc/inc/config.lib.inc:550 etc/inc/config.lib.inc:528
+#: etc/inc/config.lib.inc:528
+msgid "WARNING: Config contents could not be save. Could not open file!"
+msgstr "警告:構æˆå†…容ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535
+#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:530
+#: etc/inc/config.lib.inc:530
+#, php-format
+msgid "Unable to open %s/config.xml for writing in write_config()%s"
+msgstr "write_config.()%sã«æ›¸ã込むãŸã‚%s / config.xmlã®ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644
+#: etc/inc/config.lib.inc:661 etc/inc/config.lib.inc:639
+#: etc/inc/config.lib.inc:639
+msgid "Reverted to"
+msgstr "ã«æˆ»ã£ãŸ"
+
+#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659
+#: etc/inc/config.lib.inc:676 etc/inc/config.lib.inc:654
+#: etc/inc/config.lib.inc:654
+msgid "Installing configuration..."
+msgstr "構æˆã‚’インストール..."
+
+#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661
+#: etc/inc/config.lib.inc:678 etc/inc/config.lib.inc:656
+#: etc/inc/config.lib.inc:656
+msgid "Installing configuration ...."
+msgstr "構æˆã‚’インストール...."
+
+#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712
+#: etc/inc/config.lib.inc:729 etc/inc/config.lib.inc:707
+#: etc/inc/config.lib.inc:707
+msgid "XML error: unable to open file"
+msgstr "XMLエラー:ファイルをオープンã§ãã¾ã›ã‚“"
+
+#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718
+#: etc/inc/config.lib.inc:735 etc/inc/config.lib.inc:713
+#: etc/inc/config.lib.inc:713
+#, php-format
+msgid "%1$s at line %2$d"
+msgstr "行%ã§ã¯%1$s 2 $ dã®"
+
+#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758
+#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766
+#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783
+#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761
+#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761
+#, php-format
+msgid "The backup cache file %s is corrupted. Unlinking."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—キャッシュファイル%sãŒç ´æã—ã¦ã„ã¾ã™ã€‚リンク解除。"
+
+#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117 etc/inc/easyrule.inc:117
+msgid "Easy Rule: Blocked from Firewall Log View"
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ­ã‚°ã®è¡¨ç¤ºãŒãƒ–ロックã•ã‚Œ"
+
+#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181
+#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:178
+#: etc/inc/easyrule.inc:186 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:186
+msgid "Entry added"
+msgstr "副出記入"
+
+#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182
+#: etc/inc/easyrule.inc:183 etc/inc/easyrule.inc:183
+msgid "Hosts blocked from Firewall Log view"
+msgstr "ファイアウォールログビューã‹ã‚‰ãƒ–ロックã®ãƒ›ã‚¹ãƒˆ"
+
+#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262
+#: etc/inc/easyrule.inc:263 etc/inc/easyrule.inc:263
+msgid "Easy Rule: Passed from Firewall Log View"
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ­ã‚°ãƒ“ューã‹ã‚‰æ¸¡ã•ã‚ŒãŸ"
+
+#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309
+#: etc/inc/easyrule.inc:313 etc/inc/easyrule.inc:318 etc/inc/easyrule.inc:318
+msgid "Tried to block invalid IP:"
+msgstr "無効ãªIPをブロックã—よã†ã¨ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313
+#: etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:322
+msgid "Invalid interface for block rule:"
+msgstr "ブロックルールã®ç„¡åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ï¼š"
+
+#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316
+#: etc/inc/easyrule.inc:320 etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:325
+msgid "Host added successfully"
+msgstr "ホスト正常ã«è¿½åŠ "
+
+#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318
+#: etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:327
+msgid "Failed to create block rule, alias, or add host."
+msgstr "ブロックルールã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚’追加ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321
+#: etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:330 etc/inc/easyrule.inc:330
+msgid "Tried to block but had no host IP or interface"
+msgstr "ブロックã—よã†ã¨ã—ãŸãŒã€æŒã£ã¦ã„ãŸã‚“ホストIPã¾ã›ã‚“ã¾ãŸã¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹"
+
+#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323
+#: etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:332
+msgid "Unknown block error."
+msgstr "ä¸æ˜Žãªãƒ–ロックエラー。"
+
+#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334
+#: etc/inc/easyrule.inc:338 etc/inc/easyrule.inc:343 etc/inc/easyrule.inc:343
+msgid "Invalid interface for pass rule:"
+msgstr "パス·ルールã®ç„¡åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ï¼š"
+
+#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337
+#: etc/inc/easyrule.inc:341 etc/inc/easyrule.inc:346 etc/inc/easyrule.inc:346
+msgid "Invalid protocol for pass rule:"
+msgstr "パス·ルールã®ç„¡åŠ¹ãªãƒ—ロトコル:"
+
+#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340
+#: etc/inc/easyrule.inc:344 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:349
+msgid "Tried to pass invalid source IP:"
+msgstr "無効ãªé€ä¿¡å…ƒIPアドレスを渡ãã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343
+#: etc/inc/easyrule.inc:347 etc/inc/easyrule.inc:352 etc/inc/easyrule.inc:352
+msgid "Tried to pass invalid destination IP:"
+msgstr "無効ãªé€ä¿¡å…ˆIPを渡ãã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347
+#: etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:356
+msgid "Missing destination port:"
+msgstr "ä¸è¶³ã—ã¦ã„る宛先ãƒãƒ¼ãƒˆï¼š"
+
+#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350
+#: etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:359 etc/inc/easyrule.inc:359
+msgid "Tried to pass invalid destination port:"
+msgstr "無効ãªå®›å…ˆãƒãƒ¼ãƒˆã‚’渡ãã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357
+#: etc/inc/easyrule.inc:361 etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:366
+msgid "Successfully added pass rule!"
+msgstr "正常ã«è¿½åŠ ã•ã‚Œã€ãƒ‘スã®ãƒ«ãƒ¼ãƒ« ï¼"
+
+#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359
+#: etc/inc/easyrule.inc:363 etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:368
+msgid "Failed to add pass rule."
+msgstr "パス·ルールを追加ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362
+#: etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:371 etc/inc/easyrule.inc:371
+msgid "Missing parameters for pass rule."
+msgstr "パス·ルールã®ãƒ‘ラメータãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364
+#: etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:373 etc/inc/easyrule.inc:373
+msgid "Unknown pass error."
+msgstr "未知ã®ãƒ‘スエラー。"
+
+#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167
+#: etc/inc/filter_log.inc:191 etc/inc/filter_log.inc:201
+#: etc/inc/filter_log.inc:201
+#, php-format
+msgid ""
+"There was a error parsing rule: %s. Please report to mailing list or forum."
+msgstr "%s.ãŒãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã‚„フォーラムã«å ±å‘Šã—ã¦ãã ã•ã„。「エラー解æžãƒ«ãƒ¼ãƒ«ãŒã‚ã‚Šã¾ã—ãŸã€‚"
+
+#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210
+#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237
+#: etc/inc/filter_log.inc:247 etc/inc/filter_log.inc:247
+#, php-format
+msgid "Service %1$s/%2$s: %3$s"
+msgstr "サービス%1$s/%2$s : %3$s"
+
+#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242
+#: etc/inc/gwlb.inc:244 etc/inc/gwlb.inc:244
+#, php-format
+msgid ""
+"Removing static route for monitor %1$s and adding a new route through %2$s"
+msgstr "「モニターã¯%1$sã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã®å–り外ã—ã¨%2$sを通ã˜ã¦æ–°ã—ã„ルートを追加ã™ã‚‹"
+
+#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750
+#, php-format
+msgid "MONITOR: %s is down, omitting from routing group"
+msgstr "モニタ: %s ã€ã‚°ãƒ«ãƒ¼ãƒ—をルーティングã‹ã‚‰å–り出ã—ã€ãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹"
+
+#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754
+#, php-format
+msgid "MONITOR: %s has packet loss, omitting from routing group"
+msgstr "MONITOR : %sã¯ã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰é™¤åŽ»ã—ã€ãƒ‘ケットæ失を有ã™ã‚‹"
+
+#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758
+#, php-format
+msgid "MONITOR: %s has high latency, omitting from routing group"
+msgstr "モニタ: %s ã€ã‚°ãƒ«ãƒ¼ãƒ—をルーティングã‹ã‚‰å–り出ã—ã€å¤§ããªé…延ãŒã‚ã‚‹"
+
+#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775
+msgid "Gateways status could not be determined, considering all as up/active."
+msgstr "ゲートウェイã®çŠ¶æ…‹ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–/アップã¨ã—ã¦ã€ã™ã¹ã¦ã‚’考慮ã—ã€æ±ºå®šã™ã‚‹ã“ã¨ãŒã§ããªã‹ã£ãŸã€‚"
+
+#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835
+#: etc/inc/gwlb.inc:844 etc/inc/gwlb.inc:823 etc/inc/gwlb.inc:807
+#: etc/inc/gwlb.inc:807
+#, php-format
+msgid "Updating gateway group gateway for %1$s - new gateway is %2$s"
+msgstr "ã¯%1$sã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ゲートウェイã®æ›´æ–° - æ–°è¦ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã¯ã€ %2$sã§ã™"
+
+#: etc/inc/ipsec.inc:39 etc/inc/ipsec.inc:39
+msgid "My IP address"
+msgstr "ç§ã®IPアドレス"
+
+#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114
+#: usr/local/www/diag_logs_vpn.php:178
+#: usr/local/www/status_captiveportal.php:160
+#: usr/local/www/services_captiveportal.php:602
+#: usr/local/www/services_captiveportal.php:623
+#: usr/local/www/services_captiveportal.php:642
+#: usr/local/www/services_captiveportal.php:661
+#: usr/local/www/services_captiveportal_ip.php:117
+#: usr/local/www/services_captiveportal_ip_edit.php:195
+#: usr/local/www/services_dhcp.php:891
+#: usr/local/www/services_dhcp_edit.php:221
+#: usr/local/www/services_dnsmasq_edit.php:80
+#: usr/local/www/services_dnsmasq_edit.php:156
+#: usr/local/www/vpn_pptp_users.php:99
+#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313
+#: usr/local/www/status_dhcp_leases.php:318
+#: usr/local/www/system_advanced_network.php:226
+#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102
+#: usr/local/www/vpn_l2tp_users_edit.php:168
+#: usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:211
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/services_captiveportal.php:638
+#: usr/local/www/services_captiveportal.php:659
+#: usr/local/www/services_captiveportal.php:681
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/status_dhcp_leases.php:339
+#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661
+#: usr/local/www/services_dhcp_edit.php:224
+#: usr/local/www/services_dnsmasq_edit.php:212
+#: usr/local/www/services_captiveportal_ip.php:115
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137
+#: usr/local/www/vpn_l2tp_users.php:103
+#: usr/local/www/services_captiveportal.php:636
+#: usr/local/www/services_captiveportal.php:657
+#: usr/local/www/services_captiveportal.php:679
+#: usr/local/www/services_captiveportal.php:698
+#: usr/local/www/status_dhcp_leases.php:341
+#: usr/local/www/services_captiveportal_ip_edit.php:193
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757
+#: usr/local/www/vpn_pptp_users_edit.php:161
+#: usr/local/www/services_dhcp_edit.php:223
+#: usr/local/www/vpn_l2tp_users_edit.php:169
+#: usr/local/www/vpn_pptp_users.php:100
+#: usr/local/www/services_captiveportal_ip_edit.php:187
+#: usr/local/www/services_dhcp_edit.php:351
+#: usr/local/www/services_dhcp.php:1152
+#: usr/local/www/status_captiveportal.php:146
+#: usr/local/www/services_captiveportal.php:637
+#: usr/local/www/services_captiveportal.php:658
+#: usr/local/www/services_captiveportal.php:680
+#: usr/local/www/services_captiveportal.php:699
+#: usr/local/www/vpn_ipsec_phase2.php:778 usr/local/www/services_dhcp.php:1172
+#: usr/local/www/services_captiveportal.php:653
+#: usr/local/www/services_captiveportal.php:674
+#: usr/local/www/services_captiveportal.php:696
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/system_advanced_network.php:227
+#: usr/local/www/services_captiveportal_ip_edit.php:187
+#: usr/local/www/diag_arp.php:313 usr/local/www/vpn_pptp_users.php:100
+#: usr/local/www/services_captiveportal_ip.php:115
+#: usr/local/www/services_dhcp_edit.php:351
+#: usr/local/www/services_dhcp.php:1172 usr/local/www/vpn_l2tp_users.php:103
+#: usr/local/www/status_captiveportal.php:146
+#: usr/local/www/services_captiveportal.php:653
+#: usr/local/www/services_captiveportal.php:674
+#: usr/local/www/services_captiveportal.php:696
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/status_dhcp_leases.php:341
+#: usr/local/www/vpn_l2tp_users_edit.php:169
+#: usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:212
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/vpn_pptp_users_edit.php:161
+#: usr/local/www/system_advanced_network.php:227
+#: usr/local/www/vpn_ipsec_phase2.php:778
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137
+#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49
+msgid "IP address"
+msgstr "IPアドレス"
+
+#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50
+#: usr/local/www/system_camanager.php:476
+#: usr/local/www/system_certmanager.php:589
+#: usr/local/www/system_certmanager.php:672
+#: usr/local/www/system_certmanager.php:705
+#: usr/local/www/system_certmanager.php:838
+#: usr/local/www/system_camanager.php:477
+#: usr/local/www/system_camanager.php:500
+#: usr/local/www/system_certmanager.php:730
+#: usr/local/www/system_certmanager.php:879
+#: usr/local/www/system_certmanager.php:731
+#: usr/local/www/system_certmanager.php:883
+#: usr/local/www/system_camanager.php:500
+#: usr/local/www/system_certmanager.php:731
+#: usr/local/www/system_certmanager.php:883 etc/inc/ipsec.inc:41
+#: etc/inc/ipsec.inc:50
+msgid "Distinguished name"
+msgstr "識別å"
+
+#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51 etc/inc/ipsec.inc:42
+#: etc/inc/ipsec.inc:51
+msgid "User distinguished name"
+msgstr "ユーザー識別å"
+
+#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52 etc/inc/ipsec.inc:43
+#: etc/inc/ipsec.inc:52
+msgid "ASN.1 distinguished Name"
+msgstr "ASN.1ã®è­˜åˆ¥å"
+
+#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53 etc/inc/ipsec.inc:44
+#: etc/inc/ipsec.inc:53
+msgid "KeyID tag"
+msgstr "KEYIDã‚¿ã‚°"
+
+#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722
+#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648
+#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760
+#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154
+#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672
+#: usr/local/www/services_dhcp_edit.php:451
+#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689
+#: usr/local/www/fbegin.inc:146 usr/local/www/services_dhcp.php:975
+#: usr/local/www/services_dhcp_edit.php:451
+#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:689
+#: usr/local/www/fbegin.inc:146 etc/inc/ipsec.inc:45
+msgid "Dynamic DNS"
+msgstr "ダイナミックDNS"
+
+#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:48
+msgid "Peer IP address"
+msgstr "ピアIPアドレス"
+
+#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217
+#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289
+#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289
+msgid "Mobile Client"
+msgstr "移動クライアント"
+
+#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428
+#: usr/local/www/firewall_nat_edit.php:797
+#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385
+#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567
+#: usr/local/www/vpn_ipsec_phase2.php:435
+#: usr/local/www/interfaces_bridge_edit.php:437
+#: usr/local/www/vpn_ipsec_phase2.php:461
+#: usr/local/www/firewall_nat_edit.php:805
+#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489
+#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283
+#: usr/local/www/system_advanced_misc.php:386
+#: usr/local/www/interfaces_bridge_edit.php:438
+#: usr/local/www/vpn_ipsec_phase2.php:527
+#: usr/local/www/vpn_ipsec_phase2.php:563
+#: usr/local/www/firewall_nat_edit.php:804
+#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477
+#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/diag_system_pftop.php:155
+#: usr/local/www/system_advanced_misc.php:398
+#: usr/local/www/interfaces_bridge_edit.php:439
+#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490
+#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292
+#: usr/local/www/firewall_nat_edit.php:811
+#: usr/local/www/firewall_nat_edit.php:842
+#: usr/local/www/system_advanced_misc.php:445
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1535 usr/local/www/interfaces.php:1641
+#: usr/local/www/firewall_nat_edit.php:812
+#: usr/local/www/firewall_nat_edit.php:843
+#: usr/local/www/interfaces_bridge_edit.php:443
+#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1529 usr/local/www/interfaces.php:1634
+#: usr/local/www/firewall_nat_edit.php:812
+#: usr/local/www/firewall_nat_edit.php:843
+#: usr/local/www/diag_system_pftop.php:155
+#: usr/local/www/system_advanced_misc.php:445
+#: usr/local/www/interfaces_bridge_edit.php:443
+#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1157
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1529
+#: usr/local/www/interfaces.php:1634 etc/inc/ipsec.inc:292
+msgid "None"
+msgstr "ãªã—"
+
+#: etc/inc/meta.inc:68 etc/inc/meta.inc:68
+#, php-format
+msgid "list_phpfiles: unable to examine path %s\n"
+msgstr "list_phpfiles :パス%s\nを調ã¹ã‚‹ã“ã¨ãŒã§ããªã„"
+
+#: etc/inc/meta.inc:99 etc/inc/meta.inc:99
+#, php-format
+msgid "unable to read %s\n"
+msgstr "%s\nを読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: etc/inc/meta.inc:132 etc/inc/meta.inc:132
+#, php-format
+msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s"
+msgstr "エラー:' %3$s' ï¼… 4 $ s内ã®ã‚¿ã‚°ãŒä¸€è‡´ã—ã¾ã›ã‚“(ã¯%1$sã® = %2$s ï¼ï¼‰"
+
+#: etc/inc/meta.inc:143 etc/inc/meta.inc:143
+#, php-format
+msgid "warning: tag %1$s has no data in '%2$s'%3$s"
+msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$s内ã®ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/meta.inc:163 etc/inc/meta.inc:163
+#, php-format
+msgid "warning: tag %1$s has malformed data in '%2$s'%3$s"
+msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$s内ã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¸æ­£ãªå½¢å¼ã—ã¦ã„ã‚‹"
+
+#: etc/inc/meta.inc:185 etc/inc/meta.inc:185
+#, php-format
+msgid "warning: tag %1$s has invalid data in '%2$s'%3$s"
+msgstr "警告:タグã¯%1$sã¯ã€Œ %2$s' %3$sã«ç„¡åŠ¹ãªãƒ‡ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ã‚‹"
+
+#: etc/inc/priv.defs.inc:10 etc/inc/priv.defs.inc:10
+msgid "WebCfg - All pages"
+msgstr "WebCfg - 全ページ"
+
+#: etc/inc/priv.defs.inc:11 etc/inc/priv.defs.inc:11
+msgid "Allow access to all pages"
+msgstr "ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯"
+
+#: etc/inc/priv.defs.inc:16 etc/inc/priv.defs.inc:16
+msgid "WebCfg - Status: CARP page"
+msgstr "WebCfg - ステータス: CARPページ"
+
+#: etc/inc/priv.defs.inc:17 etc/inc/priv.defs.inc:17
+msgid "Allow access to the 'Status: CARP' page."
+msgstr "ページ: 「 CARP状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:22 etc/inc/priv.defs.inc:22
+msgid "WebCfg - Crash reporter"
+msgstr "WebCfg - クラッシュレãƒãƒ¼ã‚¿"
+
+#: etc/inc/priv.defs.inc:23 etc/inc/priv.defs.inc:23
+msgid "Uploads crash reports to pfSense and or deletes crash reports."
+msgstr "pfSenseã¨ORã¸ã®ã‚¢ãƒƒãƒ—ロードã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:28 etc/inc/priv.defs.inc:28
+msgid "WebCfg - Diagnostics: ARP Table page"
+msgstr "WebCfg - 診断: ARPテーブルページ"
+
+#: etc/inc/priv.defs.inc:29 etc/inc/priv.defs.inc:29
+msgid "Allow access to the 'Diagnostics: ARP Table' page."
+msgstr "ページ: 「 ARPテーブル診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:34 etc/inc/priv.defs.inc:34
+msgid "WebCfg - Diagnostics: Authentication page"
+msgstr "WebCfg - 診断:èªè¨¼ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:35 etc/inc/priv.defs.inc:35
+msgid "Allow access to the 'Diagnostics: Authentication' page."
+msgstr "ページ:'èªè¨¼è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:40 etc/inc/priv.defs.inc:40
+msgid "WebCfg - Diagnostics: Backup/restore page"
+msgstr "WebCfg - 診断:ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/ページを復元ã™ã‚‹"
+
+#: etc/inc/priv.defs.inc:41 etc/inc/priv.defs.inc:41
+msgid "Allow access to the 'Diagnostics: Backup/restore' page."
+msgstr "ページ: 「ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/リストア診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:46 etc/inc/priv.defs.inc:46
+msgid "WebCfg - Diagnostics: Configuration History page"
+msgstr "WebCfg - 診断:構æˆå±¥æ­´ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:47 etc/inc/priv.defs.inc:47
+msgid "Allow access to the 'Diagnostics: Configuration History' page."
+msgstr "ページ: 「設定履歴診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:52 etc/inc/priv.defs.inc:52
+msgid "WebCfg - Diagnostics: Factory defaults page"
+msgstr "WebCfg - 診断:工場出è·æ™‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:53 etc/inc/priv.defs.inc:53
+msgid "Allow access to the 'Diagnostics: Factory defaults' page."
+msgstr "ページ: 「工場出è·æ™‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:58 etc/inc/priv.defs.inc:58
+msgid "WebCfg - Diagnostics: Show States page"
+msgstr "WebCfg - 診断:表示状態ページ"
+
+#: etc/inc/priv.defs.inc:59 etc/inc/priv.defs.inc:59
+msgid "Allow access to the 'Diagnostics: Show States' page."
+msgstr "' :表示状態ã®è¨ºæ–­ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:70
+msgid "WebCfg - Status: IPsec page"
+msgstr "WebCfg - ステータス: IPsecã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:71
+msgid "Allow access to the 'Status: IPsec' page."
+msgstr "ページ: 「 IPsecã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:76
+msgid "WebCfg - Status: IPsec: SAD page"
+msgstr "WebCfg - ステータス: IPsecã®ï¼š SADページ"
+
+#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:77
+msgid "Allow access to the 'Status: IPsec: SAD' page."
+msgstr "ページ': IPsecã®SAD状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:82
+msgid "WebCfg - Status: IPsec: SPD page"
+msgstr "WebCfg - ステータス: IPsecã®ï¼š SPDページ"
+
+#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:83
+msgid "Allow access to the 'Status: IPsec: SPD' page."
+msgstr "ページ': IPsecã®SPDステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:88
+msgid "WebCfg - Diag IPsec XML page"
+msgstr "WebCfg - ダイアグã®IPsec XMLページ"
+
+#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:89
+msgid "Allow access to the 'Diag IPsec XML' page."
+msgstr "「ダイアグã®IPsec XML ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184
+#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226
+#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238
+#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94
+#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250
+#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:208
+#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:250
+msgid "WebCfg - Diagnostics: System Activity"
+msgstr "WebCfg - 診断:システムアクティビティ"
+
+#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185
+#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227
+#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239
+#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95
+#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251
+#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:209
+#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:251
+msgid "Allows access to the 'Diagnostics: System Activity' page"
+msgstr "ã“ã¨ãŒã§ãã¾ã™'診断:システム動作'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100
+#: etc/inc/priv.defs.inc:100
+msgid "WebCfg - Diagnostics: Logs: System page"
+msgstr "WebCfg - 診断:ログ: Systemページ"
+
+#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101
+#: etc/inc/priv.defs.inc:101
+msgid "Allow access to the 'Diagnostics: Logs: System' page."
+msgstr "ページ':ログシステム診断プログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106
+#: etc/inc/priv.defs.inc:106
+msgid "WebCfg - Status: System logs: Portal Auth page"
+msgstr "WebCfg - ステータス:システムログ:ãƒãƒ¼ã‚¿ãƒ«èªè¨¼ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107
+#: etc/inc/priv.defs.inc:107
+msgid "Allow access to the 'Status: System logs: Portal Auth' page."
+msgstr "ページ':システムログãƒãƒ¼ã‚¿ãƒ«èªè¨¼ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112
+#: etc/inc/priv.defs.inc:112
+msgid "WebCfg - Diagnostics: Logs: DHCP page"
+msgstr "WebCfg - 診断:ログ: DHCPページ"
+
+#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113
+#: etc/inc/priv.defs.inc:113
+msgid "Allow access to the 'Diagnostics: Logs: DHCP' page."
+msgstr "ページ':ログDHCPã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118
+#: etc/inc/priv.defs.inc:118
+msgid "WebCfg - Diagnostics: Logs: Firewall page"
+msgstr "WebCfg - 診断:ログ:ファイアウォールã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119
+#: etc/inc/priv.defs.inc:119
+msgid "Allow access to the 'Diagnostics: Logs: Firewall' page."
+msgstr "ページ':ログファイアウォール診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136
+#: etc/inc/priv.defs.inc:142 etc/inc/priv.defs.inc:142
+msgid "WebCfg - Hidden: No longer included page"
+msgstr "WebCfg - éžè¡¨ç¤ºï¼šã‚‚ã†å«ã¾ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137
+#: etc/inc/priv.defs.inc:143 etc/inc/priv.defs.inc:143
+msgid "Allow access to the 'Hidden: No longer included' page."
+msgstr "ページ:'ã¯ã‚‚ã¯ã‚„å«ã¾ã‚Œã¦éš ã•ã‚ŒãŸ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142
+#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148
+#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:148
+#: etc/inc/priv.defs.inc:166
+msgid "WebCfg - Status: System logs: IPsec VPN page"
+msgstr "WebCfg - ステータス:システムログ: IPsec VPNã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143
+#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149
+#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:149
+#: etc/inc/priv.defs.inc:167
+msgid "Allow access to the 'Status: System logs: IPsec VPN' page."
+msgstr "ページ':システムログã®IPsec VPNã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:130
+msgid "WebCfg - Status: System logs: OpenNTPD page"
+msgstr "WebCfg - ステータス:システムログ: OpenNTPDページ"
+
+#: etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Status: System logs: OpenNTPD' page."
+msgstr "ページ':システムログOpenNTPD状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154
+#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:160
+msgid "WebCfg - Status: System logs: OpenVPN page"
+msgstr "WebCfg - ステータス:システムログ: OpenVPNã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155
+#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:161
+msgid "Allow access to the 'Status: System logs: OpenVPN' page."
+msgstr "ページ':システムログOpenVPNã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166
+#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:172
+msgid "WebCfg - Status: System logs: Load Balancer page"
+msgstr "WebCfg - ステータス:システムログ:ロードãƒãƒ©ãƒ³ã‚µãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167
+#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:173
+msgid "Allow access to the 'Status: System logs: Load Balancer' page."
+msgstr "ページ':システムログã¯ã€Load Balancerã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172
+#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:178
+msgid "WebCfg - Diagnostics: Logs: Settings page"
+msgstr "WebCfg - 診断:ログ:((設定))ページ"
+
+#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173
+#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:179
+msgid "Allow access to the 'Diagnostics: Logs: Settings' page."
+msgstr "ページ':ログ設定ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178
+#: etc/inc/priv.defs.inc:184 etc/inc/priv.defs.inc:184
+msgid "WebCfg - Diagnostics: Logs: VPN page"
+msgstr "WebCfg - 診断:ログ: VPNã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179
+#: etc/inc/priv.defs.inc:185 etc/inc/priv.defs.inc:185
+msgid "Allow access to the 'Diagnostics: Logs: VPN' page."
+msgstr "ページ':ログVPNã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184
+#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:190
+msgid "WebCfg - Diagnostics: NanoBSD"
+msgstr "WebCfg - 診断: NanoBSDã®"
+
+#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185
+#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:191
+msgid "Allow access to the 'Diagnostics: NanoBSD' page."
+msgstr "ページ:' NanoBSDã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190
+#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:196
+msgid "WebCfg - Diagnostics: Packet Capture page"
+msgstr "WebCfg - 診断:パケットキャプãƒãƒ£ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191
+#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:197
+msgid "Allow access to the 'Diagnostics: Packet Capture' page."
+msgstr "ページ: 「パケットキャプãƒãƒ£è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196
+#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:202
+msgid "WebCfg - Diagnostics: Patterns page"
+msgstr "WebCfg - 診断:パターンページ"
+
+#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197
+#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:203
+msgid "Allow access to the 'Diagnostics: Patterns' page."
+msgstr "ページ:'パターン診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208
+#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:214
+msgid "WebCfg - Diagnostics: Ping page"
+msgstr "WebCfg - 診断: Pingã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209
+#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:215
+msgid "Allow access to the 'Diagnostics: Ping' page."
+msgstr "ページ:' Pingã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214
+#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:220
+msgid "WebCfg - Status: Package logs page"
+msgstr "WebCfg - ステータス:パッケージログページ"
+
+#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215
+#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:221
+msgid "Allow access to the 'Status: Package logs' page."
+msgstr "ページ:'パッケージログステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220
+#: etc/inc/priv.defs.inc:226 etc/inc/priv.defs.inc:226
+msgid "WebCfg - Diagnostics: Reset state page"
+msgstr "WebCfg - 診断:状態ページをリセット"
+
+#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221
+#: etc/inc/priv.defs.inc:227 etc/inc/priv.defs.inc:227
+msgid "Allow access to the 'Diagnostics: Reset state' page."
+msgstr "ページ: 「リセット状態診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226
+#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:232
+msgid "WebCfg - Diagnostics: Routing tables page"
+msgstr "WebCfg - 診断:ルーティングテーブルページ"
+
+#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227
+#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:233
+msgid "Allow access to the 'Diagnostics: Routing tables' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€Œè¨ºæ–­ï¼šãƒ†ãƒ¼ãƒ–ルルーティングã€ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232
+#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:238
+msgid "WebCfg - Diagnostics: States Summary page"
+msgstr "WebCfg - 診断:米国ã®æ¦‚è¦))ページ"
+
+#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233
+#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:239
+msgid "Allow access to the 'Diagnostics: States Summary' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€Œè¨ºæ–­ï¼šç±³å›½æ¦‚ç•¥))ページ。"
+
+#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250
+#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:256
+msgid "WebCfg - Diagnostics: PF Table IP addresses"
+msgstr "WebCfg - 診断:PF表ã®IPアドレス"
+
+#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251
+#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:257
+msgid "Allow access to the 'Diagnostics: Tables' page."
+msgstr "ページ:「表ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256
+#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:262
+msgid "WebCfg - Diagnostics: Traceroute page"
+msgstr "WebCfg - 診断:tracerouteã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257
+#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:263
+msgid "Allow access to the 'Diagnostics: Traceroute' page."
+msgstr "ページ:「トレースルート診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262
+#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:268
+msgid "WebCfg - Diagnostics: Edit FIle"
+msgstr "WebCfg - 診断:編集ファイル"
+
+#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263
+#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:269
+msgid "Allow access to the 'Diagnostics: Edit File' page."
+msgstr "ページ:'ファイルã®ç·¨é›†è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268
+#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276
+#: etc/inc/priv.defs.inc:276
+msgid "WebCfg - Diagnostics: Command page"
+msgstr "WebCfg - 診断:コマンドã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269
+#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277
+#: etc/inc/priv.defs.inc:277
+msgid "Allow access to the 'Diagnostics: Command' page."
+msgstr "ページ:'コマンド診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274
+#: etc/inc/priv.defs.inc:280
+msgid "WebCfg - Hidden: Exec Raw page"
+msgstr "WebCfg - éžè¡¨ç¤ºï¼š Execã®ç”Ÿã®ãƒšãƒ¼ã‚¸ãŒ"
+
+#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275
+#: etc/inc/priv.defs.inc:281
+msgid "Allow access to the 'Hidden: Exec Raw' page."
+msgstr "ページ:' Execã®ç”Ÿã®éš ã‚ŒãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280
+#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282
+#: etc/inc/priv.defs.inc:282
+msgid "WebCfg - Firewall: Aliases page"
+msgstr "WebCfg - ファイアウォール:エイリアスページ"
+
+#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281
+#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283
+#: etc/inc/priv.defs.inc:283
+msgid "Allow access to the 'Firewall: Aliases' page."
+msgstr "ページ: 「エイリアスファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286
+#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288
+#: etc/inc/priv.defs.inc:288
+msgid "WebCfg - Firewall: Alias: Edit page"
+msgstr "WebCfg - ファイアウォール:別å: Editページ"
+
+#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287
+#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289
+#: etc/inc/priv.defs.inc:289
+msgid "Allow access to the 'Firewall: Alias: Edit' page."
+msgstr "ページ':エイリアスã®ç·¨é›†ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292
+#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294
+#: etc/inc/priv.defs.inc:294
+msgid "WebCfg - Firewall: Alias: Import page"
+msgstr "WebCfg - ファイアウォール:別å: Importページ"
+
+#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293
+#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295
+#: etc/inc/priv.defs.inc:295
+msgid "Allow access to the 'Firewall: Alias: Import' page."
+msgstr "' :別å:輸入ファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298
+#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300
+#: etc/inc/priv.defs.inc:300
+msgid "WebCfg - Firewall: NAT: Port Forward page"
+msgstr "WebCfg - ファイアウォール: NAT :ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299
+#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301
+#: etc/inc/priv.defs.inc:301
+msgid "Allow access to the 'Firewall: NAT: Port Forward' page."
+msgstr "ページ': NATã®ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304
+#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306
+#: etc/inc/priv.defs.inc:306
+msgid "WebCfg - Firewall: NAT: 1:1 page"
+msgstr "WebCfg - ファイアウォール: NATã®1:1ページ"
+
+#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305
+#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307
+#: etc/inc/priv.defs.inc:307
+msgid "Allow access to the 'Firewall: NAT: 1:1' page."
+msgstr "ページ': NATã®åˆå‰1時01ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310
+#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312
+#: etc/inc/priv.defs.inc:312
+msgid "WebCfg - Firewall: NAT: 1:1: Edit page"
+msgstr "WebCfg - ファイアウォール: NAT : 1時01分: Editページ"
+
+#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311
+#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313
+#: etc/inc/priv.defs.inc:313
+msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page."
+msgstr "' : NAT :åˆå‰1時01分:編集ファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316
+#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318
+#: etc/inc/priv.defs.inc:318
+msgid "WebCfg - Firewall: NAT: Port Forward: Edit page"
+msgstr "WebCfg - ファイアウォール: NAT :ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ï¼š Editページ"
+
+#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317
+#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319
+#: etc/inc/priv.defs.inc:319
+msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page."
+msgstr "ページ' : NAT :ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ç·¨é›†ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322
+#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324
+#: etc/inc/priv.defs.inc:324
+msgid "WebCfg - Firewall: NAT: Outbound page"
+msgstr "WebCfg - ファイアウォール: NAT :発信ページ"
+
+#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323
+#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325
+#: etc/inc/priv.defs.inc:325
+msgid "Allow access to the 'Firewall: NAT: Outbound' page."
+msgstr "ページ': NATã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328
+#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330
+#: etc/inc/priv.defs.inc:330
+msgid "WebCfg - Firewall: NAT: Outbound: Edit page"
+msgstr "WebCfg - ファイアウォール: NAT :é€ä¿¡ï¼š Editページ"
+
+#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329
+#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331
+#: etc/inc/priv.defs.inc:331
+msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page."
+msgstr "ページ' : NAT :アウトãƒã‚¦ãƒ³ãƒ‰ç·¨é›†ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334
+#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336
+#: etc/inc/priv.defs.inc:336
+msgid "WebCfg - Firewall: Rules page"
+msgstr "WebCfg - ファイアウォール:ルールページ"
+
+#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335
+#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337
+#: etc/inc/priv.defs.inc:337
+msgid "Allow access to the 'Firewall: Rules' page."
+msgstr "' :ルールファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340
+#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342
+#: etc/inc/priv.defs.inc:342
+msgid "WebCfg - Firewall: Rules: Edit page"
+msgstr "WebCfg - ファイアウォール:ルール: Editページ"
+
+#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341
+#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343
+#: etc/inc/priv.defs.inc:343
+msgid "Allow access to the 'Firewall: Rules: Edit' page."
+msgstr "ページ':ルールã®ç·¨é›†ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346
+#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348
+#: etc/inc/priv.defs.inc:348
+msgid "WebCfg - Firewall: Schedules page"
+msgstr "WebCfg - ファイアウォール:スケジュール·ページ"
+
+#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347
+#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349
+#: etc/inc/priv.defs.inc:349
+msgid "Allow access to the 'Firewall: Schedules' page."
+msgstr "ページ: 「スケジュールファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352
+#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354
+#: etc/inc/priv.defs.inc:354
+msgid "WebCfg - Firewall: Schedules: Edit page"
+msgstr "WebCfg - ファイアウォール:スケジュール: Editページ"
+
+#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353
+#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355
+#: etc/inc/priv.defs.inc:355
+msgid "Allow access to the 'Firewall: Schedules: Edit' page."
+msgstr "ページ':スケジュールを編集ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358
+#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360
+#: etc/inc/priv.defs.inc:360
+msgid "WebCfg - Firewall: Traffic Shaper page"
+msgstr "WebCfg - ファイアウォール:トラフィックシェイパーページ"
+
+#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359
+#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361
+#: etc/inc/priv.defs.inc:361
+msgid "Allow access to the 'Firewall: Traffic Shaper' page."
+msgstr "ページ: 「トラフィック·シェイパーファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364
+#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366
+#: etc/inc/priv.defs.inc:366
+msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page"
+msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:レイヤ7ページ"
+
+#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365
+#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367
+#: etc/inc/priv.defs.inc:367
+msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page."
+msgstr "ページ': Traffic Shaperã¯ãƒ¬ã‚¤ãƒ¤7ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370
+#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372
+#: etc/inc/priv.defs.inc:372
+msgid "WebCfg - Firewall: Traffic Shaper: Queues page"
+msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:キューページ"
+
+#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371
+#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373
+#: etc/inc/priv.defs.inc:373
+msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page."
+msgstr "ページ': Traffic Shaperã¯ã‚­ãƒ¥ãƒ¼ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376
+#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378
+#: etc/inc/priv.defs.inc:378
+msgid "WebCfg - Firewall: Traffic Shaper: Limiter page"
+msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:リミッターページ"
+
+#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377
+#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379
+#: etc/inc/priv.defs.inc:379
+msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page."
+msgstr "ページ': Traffic Shaperã¯ãƒªãƒŸãƒƒã‚¿ãƒ¼ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382
+#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384
+#: etc/inc/priv.defs.inc:384
+msgid "WebCfg - Firewall: Traffic Shaper: Wizard page"
+msgstr "WebCfg - ファイアウォール:トラフィックシェイパー:ウィザードã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383
+#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385
+#: etc/inc/priv.defs.inc:385
+msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page."
+msgstr "ページ': Traffic Shaperã¯ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388
+#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390
+#: etc/inc/priv.defs.inc:390
+msgid "WebCfg - Firewall: Virtual IP Addresses page"
+msgstr "WebCfg - ファイアウォール:仮想IPアドレス))ページ"
+
+#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389
+#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391
+#: etc/inc/priv.defs.inc:391
+msgid "Allow access to the 'Firewall: Virtual IP Addresses' page."
+msgstr "ページ:「仮想IPアドレスファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394
+#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396
+#: etc/inc/priv.defs.inc:396
+msgid "WebCfg - Firewall: Virtual IP Address: Edit page"
+msgstr "WebCfg - ファイアウォール:仮想IPアドレス:Editページ"
+
+#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395
+#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397
+#: etc/inc/priv.defs.inc:397
+msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page."
+msgstr "ページ':仮想IPアドレスを編集ファイアウォールã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400
+#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402
+#: etc/inc/priv.defs.inc:402
+msgid "WebCfg - AJAX: Get Service Providers"
+msgstr "WebCfg - AJAX:サービスプロãƒã‚¤ãƒ€ã‚’å–å¾—ã™ã‚‹"
+
+#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401
+#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403
+#: etc/inc/priv.defs.inc:403
+msgid "Allow access to the 'AJAX: Service Providers' page."
+msgstr "ページ:「サービスプロãƒã‚¤ãƒ€AJAXã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406
+#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408
+#: etc/inc/priv.defs.inc:408
+msgid "WebCfg - AJAX: Get Stats"
+msgstr "WebCfg - AJAX:ゲット統計"
+
+#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407
+#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409
+#: etc/inc/priv.defs.inc:409
+msgid "Allow access to the 'AJAX: Get Stats' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚ページ'ã€Ajaxを統計å–å¾—))を。"
+
+#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414
+#: etc/inc/priv.defs.inc:414
+msgid "WebCfg - Diagnostics: Interface Traffic page"
+msgstr "WebCfg - 診断:インターフェイストラフィックページ"
+
+#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415
+#: etc/inc/priv.defs.inc:415
+msgid "Allow access to the 'Diagnostics: Interface Traffic' page."
+msgstr "ページ:「インターフェーストラフィック診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832
+#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838
+#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846
+#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846
+msgid "WebCfg - Diagnostics: CPU Utilization page"
+msgstr "WebCfg - 診断:CPU使用率ページ"
+
+#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833
+#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839
+#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847
+#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847
+msgid "Allow access to the 'Diagnostics: CPU Utilization' page."
+msgstr "ページ:「CPU使用率ã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424
+#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426
+#: etc/inc/priv.defs.inc:426
+msgid "WebCfg - Diagnostics: Halt system page"
+msgstr "WebCfg - 診断:åœæ­¢ã‚·ã‚¹ãƒ†ãƒ ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425
+#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427
+#: etc/inc/priv.defs.inc:427
+msgid "Allow access to the 'Diagnostics: Halt system' page."
+msgstr "ページ:'ホルトシステム診断プログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430
+#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432
+#: etc/inc/priv.defs.inc:432
+msgid "WebCfg - Required for javascript page"
+msgstr "WebCfg - javascriptã®ãƒšãƒ¼ã‚¸ã«å¿…è¦ãª"
+
+#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431
+#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433
+#: etc/inc/priv.defs.inc:433
+msgid "Allow access to the 'Required for javascript' page."
+msgstr "「 JavaScriptãŒå¿…è¦ã§ã™ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436
+#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438
+#: etc/inc/priv.defs.inc:438
+msgid "WebCfg - XMLRPC Interface Stats page"
+msgstr "WebCfg - XMLRPCインタフェース統計ページ"
+
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437
+#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439
+#: etc/inc/priv.defs.inc:439
+msgid "Allow access to the 'XMLRPC Interface Stats' page."
+msgstr "' XMLRPCインタフェース統計ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442
+#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444
+#: etc/inc/priv.defs.inc:444
+msgid "WebCfg - System: Login / Logout page / Dashboard"
+msgstr "WebCfg - システム:ログイン/ログアウトページ/ダッシュボード"
+
+#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443
+#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445
+#: etc/inc/priv.defs.inc:445
+msgid "Allow access to the 'System: Login / Logout' page and Dashboard."
+msgstr "ページã¨ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ï¼š'ログイン/ログアウトシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448
+#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450
+#: etc/inc/priv.defs.inc:450
+msgid "WebCfg - Interfaces: WAN page"
+msgstr "WebCfg - インターフェース: WANã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449
+#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451
+#: etc/inc/priv.defs.inc:451
+msgid "Allow access to the 'Interfaces' page."
+msgstr "'インタフェース'ページã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454
+#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456
+#: etc/inc/priv.defs.inc:456
+msgid "WebCfg - Interfaces: Assign network ports page"
+msgstr "WebCfg - インターフェース:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®ãƒšãƒ¼ã‚¸ã‚’割り当ã¦"
+
+#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455
+#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457
+#: etc/inc/priv.defs.inc:457
+msgid "Allow access to the 'Interfaces: Assign network ports' page."
+msgstr "ページ:'割り当ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460
+#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462
+#: etc/inc/priv.defs.inc:462
+msgid "WebCfg - Interfaces: Bridge page"
+msgstr "WebCfg - インターフェース:ブリッジページ"
+
+#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461
+#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463
+#: etc/inc/priv.defs.inc:463
+msgid "Allow access to the 'Interfaces: Bridge' page."
+msgstr "ページ: 「ブリッジ·インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466
+#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468
+#: etc/inc/priv.defs.inc:468
+msgid "WebCfg - Interfaces: Bridge edit page"
+msgstr "WebCfg - インターフェース:ブリッジEditページ"
+
+#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467
+#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469
+#: etc/inc/priv.defs.inc:469
+msgid "Allow access to the 'Interfaces: Bridge : Edit' page."
+msgstr "ページ':橋編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472
+#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474
+#: etc/inc/priv.defs.inc:474
+msgid "WebCfg - Interfaces: GIF page"
+msgstr "WebCfg - インターフェース: GIFページ"
+
+#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473
+#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475
+#: etc/inc/priv.defs.inc:475
+msgid "Allow access to the 'Interfaces: GIF' page."
+msgstr "ページ:' GIFインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478
+#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480
+#: etc/inc/priv.defs.inc:480
+msgid "WebCfg - Interfaces: GIF: Edit page"
+msgstr "WebCfg - インターフェース: GIF : Editページ"
+
+#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479
+#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481
+#: etc/inc/priv.defs.inc:481
+msgid "Allow access to the 'Interfaces: GIF: Edit' page."
+msgstr "ページ': GIF編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484
+#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486
+#: etc/inc/priv.defs.inc:486
+msgid "WebCfg - Interfaces: GRE page"
+msgstr "WebCfg - インターフェース: GREã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485
+#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487
+#: etc/inc/priv.defs.inc:487
+msgid "Allow access to the 'Interfaces: GRE' page."
+msgstr "ページ: 「 GREインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490
+#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492
+#: etc/inc/priv.defs.inc:492
+msgid "WebCfg - Interfaces: GRE: Edit page"
+msgstr "WebCfg - インターフェース: GRE : Editページ"
+
+#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491
+#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493
+#: etc/inc/priv.defs.inc:493
+msgid "Allow access to the 'Interfaces: GRE: Edit' page."
+msgstr "ページ': GRE編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496
+#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498
+#: etc/inc/priv.defs.inc:498
+msgid "WebCfg - Interfaces: Groups page"
+msgstr "WebCfg - インターフェース:グループ))ページ"
+
+#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497
+#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499
+#: etc/inc/priv.defs.inc:499
+msgid "Create interface groups"
+msgstr "インタフェースグループを作æˆã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502
+#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504
+#: etc/inc/priv.defs.inc:504
+msgid "WebCfg - Interfaces: Groups: Edit page"
+msgstr "WebCfg - インターフェース:グループ:Editページ"
+
+#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505
+#: etc/inc/priv.defs.inc:505
+msgid "Edit Interface groups"
+msgstr "インターフェースã®ç·¨é›†ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508
+#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510
+#: etc/inc/priv.defs.inc:510
+msgid "WebCfg - Interfaces: LAGG: page"
+msgstr "WebCfg - インターフェース:LAGG:ページ"
+
+#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515
+#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511
+#: etc/inc/priv.defs.inc:517 etc/inc/priv.defs.inc:511
+#: etc/inc/priv.defs.inc:517
+msgid "Edit Interface LAGG"
+msgstr "インターフェースã®ç·¨é›†LAGG"
+
+#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514
+#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516
+#: etc/inc/priv.defs.inc:516
+msgid "WebCfg - Interfaces: LAGG: Edit page"
+msgstr "WebCfg - インターフェース:LAGG:Editページ"
+
+#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520
+#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522
+#: etc/inc/priv.defs.inc:522
+msgid "WebCfg - Interfaces: ppps page"
+msgstr "WebCfg - インターフェース:購買力平価ページ"
+
+#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521
+#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523
+#: etc/inc/priv.defs.inc:523
+msgid "Allow access to the 'Interfaces: ppps' page."
+msgstr "ページ: 'ã®PPPインタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526
+#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528
+#: etc/inc/priv.defs.inc:528
+msgid "WebCfg - Interfaces: PPPs: Edit page"
+msgstr "WebCfg - インターフェース:購買力平価:Editページ"
+
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527
+#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529
+#: etc/inc/priv.defs.inc:529
+msgid "Allow access to the 'Interfaces: PPPs: Edit' page."
+msgstr "ページ':PPPã®ç·¨é›†ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532
+#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534
+#: etc/inc/priv.defs.inc:534
+msgid "WebCfg - Interfaces: QinQ page"
+msgstr "WebCfg - インターフェース:QinQサブページ"
+
+#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533
+#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535
+#: etc/inc/priv.defs.inc:535
+msgid "Allow access to the 'Interfaces: QinQ' page."
+msgstr "ページ: 'ã®QinQインターフェイスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538
+#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540
+#: etc/inc/priv.defs.inc:540
+msgid "WebCfg - Interfaces: QinQ: Edit page"
+msgstr "WebCfg - インターフェース:ã®QinQ:Editページ""
+
+#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539
+#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541
+#: etc/inc/priv.defs.inc:541
+msgid "Edit Interface qinq"
+msgstr "インターフェースã®ç·¨é›†ã®QinQ"
+
+#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544
+#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546
+#: etc/inc/priv.defs.inc:546
+msgid "WebCfg - Interfaces: VLAN page"
+msgstr "WebCfg - インターフェース:VLANã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545
+#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547
+#: etc/inc/priv.defs.inc:547
+msgid "Allow access to the 'Interfaces: VLAN' page."
+msgstr "Allow access to the 'Interfaces: VLAN' page."
+
+#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550
+#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552
+#: etc/inc/priv.defs.inc:552
+msgid "WebCfg - Interfaces: VLAN: Edit page"
+msgstr "WebCfg - インターフェース:VLAN:Editページ"
+
+#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551
+#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553
+#: etc/inc/priv.defs.inc:553
+msgid "Allow access to the 'Interfaces: VLAN: Edit' page."
+msgstr "ページ':VLANã®ç·¨é›†ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556
+#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558
+#: etc/inc/priv.defs.inc:558
+msgid "WebCfg - Interfaces: Wireless page"
+msgstr "WebCfg - インターフェース:ワイヤレスページ"
+
+#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557
+#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559
+#: etc/inc/priv.defs.inc:559
+msgid "Allow access to the 'Interfaces: Wireless' page."
+msgstr "ページ:「ワイヤレスインターフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562
+#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564
+#: etc/inc/priv.defs.inc:564
+msgid "WebCfg - Interfaces: Wireless edit page"
+msgstr "WebCfg - インターフェース:ワイヤレスEditページ"
+
+#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563
+#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565
+#: etc/inc/priv.defs.inc:565
+msgid "Allow access to the 'Interfaces: Wireless : Edit' page."
+msgstr "ページ':ワイヤレス編集インタフェースã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568
+#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570
+#: etc/inc/priv.defs.inc:570
+msgid "WebCfg - System: License page"
+msgstr "WebCfg - システム:ライセンスページ"
+
+#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569
+#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571
+#: etc/inc/priv.defs.inc:571
+msgid "Allow access to the 'System: License' page."
+msgstr "ページ:「ライセンスシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574
+#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576
+#: etc/inc/priv.defs.inc:576
+msgid "WebCfg - Services: Load Balancer: Monitors page"
+msgstr "WebCfg - サービス:監視))ページ:ロードãƒãƒ©ãƒ³ã‚µ"
+
+#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575
+#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577
+#: etc/inc/priv.defs.inc:577
+msgid "Allow access to the 'Services: Load Balancer: Monitors' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ¢ãƒ‹ã‚¿ãƒ¼ã®ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580
+#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582
+#: etc/inc/priv.defs.inc:582
+msgid "WebCfg - Services: Load Balancer: Monitor: Edit page"
+msgstr "WebCfg - サービス:モニタ:Editページロードãƒãƒ©ãƒ³ã‚µ"
+
+#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581
+#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583
+#: etc/inc/priv.defs.inc:583
+msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page."
+msgstr "Allow access to the 'Services: Load Balancer: Monitor: Edit' page."
+
+#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586
+#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588
+#: etc/inc/priv.defs.inc:588
+msgid "WebCfg - Load Balancer: Pool page"
+msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ールページを"
+
+#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587
+#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589
+#: etc/inc/priv.defs.inc:589
+msgid "Allow access to the 'Load Balancer: Pool' page."
+msgstr "ページ: 「プールã®Load Balancer ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592
+#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594
+#: etc/inc/priv.defs.inc:594
+msgid "WebCfg - Load Balancer: Pool: Edit page"
+msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール:Editページ"
+
+#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593
+#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595
+#: etc/inc/priv.defs.inc:595
+msgid "Allow access to the 'Load Balancer: Pool: Edit' page."
+msgstr "ページ':プールã®ç·¨é›†ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598
+#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600
+#: etc/inc/priv.defs.inc:600
+msgid "WebCfg - Services: Load Balancer: Relay Actions page"
+msgstr "WebCfg - サービス:リレーアクション))ページ:ロードãƒãƒ©ãƒ³ã‚µ"
+
+#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599
+#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601
+#: etc/inc/priv.defs.inc:601
+msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604
+#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606
+#: etc/inc/priv.defs.inc:606
+msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page"
+msgstr "WebCfg - サービス:リレー動作:Editページãƒãƒ©ãƒ³ã‚µã‚’ロード"
+
+#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605
+#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607
+#: etc/inc/priv.defs.inc:607
+msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãƒšãƒ¼ã‚¸ã€ã‚µãƒ¼ãƒ“ス:リレー動作:編集ロードãƒãƒ©ãƒ³ã‚µã€ 。"
+
+#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610
+#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612
+#: etc/inc/priv.defs.inc:612
+msgid "WebCfg - Services: Load Balancer: Relay Protocols page"
+msgstr "WebCfg - サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル))ページを"
+
+#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611
+#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613
+#: etc/inc/priv.defs.inc:613
+msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼Â·ãƒ—ロトコルã€ã®ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616
+#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618
+#: etc/inc/priv.defs.inc:618
+msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page"
+msgstr "WebCfg - サービス:リレープロトコル::Editページãƒãƒ©ãƒ³ã‚µã‚’ロード"
+
+#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617
+#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619
+#: etc/inc/priv.defs.inc:619
+msgid ""
+"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page."
+msgstr ""ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル:編集'ページ。"
+
+#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622
+#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624
+#: etc/inc/priv.defs.inc:624
+msgid "WebCfg - Services: Load Balancer: Virtual Servers page"
+msgstr "WebCfg - サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ã®ãƒšãƒ¼ã‚¸ã‚’"
+
+#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623
+#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625
+#: etc/inc/priv.defs.inc:625
+msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒã®ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628
+#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630
+#: etc/inc/priv.defs.inc:630
+msgid "WebCfg - Load Balancer: Virtual Server: Edit page"
+msgstr "WebCfg - ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ï¼šEditページ"
+
+#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629
+#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631
+#: etc/inc/priv.defs.inc:631
+msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page."
+msgstr "ページ':仮想サーãƒãƒ¼ã®ç·¨é›†ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634
+#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636
+#: etc/inc/priv.defs.inc:636
+msgid "WebCfg - Package: Settings page"
+msgstr "WebCfg - パッケージ: Settingsページ"
+
+#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635
+#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637
+#: etc/inc/priv.defs.inc:637
+msgid "Allow access to the 'Package: Settings' page."
+msgstr "ページ: 「設定パッケージ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640
+#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642
+#: etc/inc/priv.defs.inc:642
+msgid "WebCfg - Package: Edit page"
+msgstr "WebCfg - パッケージ: Editページ"
+
+#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641
+#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643
+#: etc/inc/priv.defs.inc:643
+msgid "Allow access to the 'Package: Edit' page."
+msgstr "ページ: 「編集パッケージ'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646
+#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648
+#: etc/inc/priv.defs.inc:648
+msgid "WebCfg - System: Package Manager page"
+msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£))ページ"
+
+#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647
+#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649
+#: etc/inc/priv.defs.inc:649
+msgid "Allow access to the 'System: Package Manager' page."
+msgstr "ページ:'パッケージマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652
+#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654
+#: etc/inc/priv.defs.inc:654
+msgid "WebCfg - System: Package Manager: Install Package page"
+msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«))ページ"
+
+#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653
+#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655
+#: etc/inc/priv.defs.inc:655
+msgid "Allow access to the 'System: Package Manager: Install Package' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹' :パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658
+#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660
+#: etc/inc/priv.defs.inc:660
+msgid "WebCfg - System: Package Manager: Installed page"
+msgstr "WebCfg - システム:パッケージマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659
+#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661
+#: etc/inc/priv.defs.inc:661
+msgid "Allow access to the 'System: Package Manager: Installed' page."
+msgstr "ページ':パッケージマãƒãƒ¼ã‚¸ãƒ£ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664
+#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666
+#: etc/inc/priv.defs.inc:666
+msgid "WebCfg - Packages: Settings page"
+msgstr "WebCfg - パッケージ:Settingsページ"
+
+#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665
+#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667
+#: etc/inc/priv.defs.inc:667
+msgid "Allow access to the 'Packages: Settings' page."
+msgstr "ページ: 「設定パッケージã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670
+#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672
+#: etc/inc/priv.defs.inc:672
+msgid "WebCfg - Diagnostics: Reboot System page"
+msgstr "WebCfg - 診断:å†èµ·å‹•ã‚·ã‚¹ãƒ†ãƒ ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671
+#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673
+#: etc/inc/priv.defs.inc:673
+msgid "Allow access to the 'Diagnostics: Reboot System' page."
+msgstr "ページ: 「å†èµ·å‹•ã®ã‚·ã‚¹ãƒ†ãƒ è¨ºæ–­ãƒ—ログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676
+#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678
+#: etc/inc/priv.defs.inc:678
+msgid "WebCfg - Diagnostics: Restart HTTPD : System page"
+msgstr "WebCfg - 診断:å†èµ·å‹•HTTPD:システムページ"
+
+#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677
+#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679
+#: etc/inc/priv.defs.inc:679
+msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page."
+msgstr "ページ':å†èµ·å‹•httpdã®ã‚·ã‚¹ãƒ†ãƒ è¨ºæ–­ãƒ—ログラムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682
+#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684
+#: etc/inc/priv.defs.inc:684
+msgid "WebCfg - Services: Captive portal page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683
+#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685
+#: etc/inc/priv.defs.inc:685
+msgid "Allow access to the 'Services: Captive portal' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688
+#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690
+#: etc/inc/priv.defs.inc:690
+msgid "WebCfg - Services: Captive portal: File Manager page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šãƒ•ã‚¡ã‚¤ãƒ«ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689
+#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691
+#: etc/inc/priv.defs.inc:691
+msgid "Allow access to the 'Services: Captive portal: File Manager' page."
+msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ãƒžãƒãƒ¼ã‚¸ãƒ£ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688
+#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712
+#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708
+#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708
+msgid "WebCfg - Services: Captive portal: Allowed IPs page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šå¯IPアドレスページ"
+
+#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689
+#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713
+#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709
+#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709
+msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page."
+msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«å¯ã®IPサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712
+#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718
+#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714
+#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714
+msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†å¯ã®IPページ"
+
+#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713
+#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719
+#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715
+#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715
+msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†IPを許å¯ã€ã®ãƒšãƒ¼ã‚¸ã€‚"
+
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718
+#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720
+#: etc/inc/priv.defs.inc:720
+msgid "WebCfg - Services: Captive portal: Mac Addresses page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šMACアドレスã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719
+#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721
+#: etc/inc/priv.defs.inc:721
+msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page."
+msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ã®MACアドレスサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724
+#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726
+#: etc/inc/priv.defs.inc:726
+msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†ã®MACアドレス))ページ"
+
+#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725
+#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727
+#: etc/inc/priv.defs.inc:727
+msgid ""
+"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page."
+msgstr "ページ"':キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ç·¨é›†MACアドレスサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730
+#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744
+#: etc/inc/priv.defs.inc:744
+msgid "WebCfg - Services: Captive portal Vouchers page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731
+#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745
+#: etc/inc/priv.defs.inc:745
+msgid "Allow access to the 'Services: Captive portal Vouchers' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742
+#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756
+#: etc/inc/priv.defs.inc:756
+msgid "WebCfg - Services: DHCP server page"
+msgstr "WebCfg - サービス:DHCP Serverページ"
+
+#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743
+#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757
+#: etc/inc/priv.defs.inc:757
+msgid "Allow access to the 'Services: DHCP server' page."
+msgstr "ページ:「DHCPサーãƒã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748
+#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762
+#: etc/inc/priv.defs.inc:762
+msgid "WebCfg - Services: DHCP Server : Edit static mapping page"
+msgstr "WebCfg - サービス:DHCPサーãƒï¼šé™çš„マッピングページを編集"
+
+#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749
+#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763
+#: etc/inc/priv.defs.inc:763
+msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page."
+msgstr "ページ': DHCPサーãƒã®ç·¨é›†é™çš„マッピングサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754
+#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768
+#: etc/inc/priv.defs.inc:768
+msgid "WebCfg - Services: DHCP Relay page"
+msgstr "WebCfg - サービス:DHCPリレーページ"
+
+#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755
+#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769
+#: etc/inc/priv.defs.inc:769
+msgid "Allow access to the 'Services: DHCP Relay' page."
+msgstr "ページ: 「 DHCPリレーサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760
+#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774
+#: etc/inc/priv.defs.inc:774
+msgid "WebCfg - Services: DHCPv6 Relay page"
+msgstr "WebCfg - Services: DHCPv6 Relay page"
+
+#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761
+#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775
+#: etc/inc/priv.defs.inc:775
+msgid "Allow access to the 'Services: DHCPv6 Relay' page."
+msgstr "ページ: 「 DHCPv6リレーサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766
+#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780
+#: etc/inc/priv.defs.inc:780
+msgid "WebCfg - Services: DNS Forwarder page"
+msgstr "WebCfg - サービス: DNSフォワーダページ"
+
+#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767
+#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781
+#: etc/inc/priv.defs.inc:781
+msgid "Allow access to the 'Services: DNS Forwarder' page."
+msgstr "ページ: 「 DNSフォワーダサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772
+#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786
+#: etc/inc/priv.defs.inc:786
+msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page"
+msgstr "WebCfg - サービス: DNSフォワーダ:ドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773
+#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787
+#: etc/inc/priv.defs.inc:787
+msgid ""
+"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page."
+msgstr "ページ"': DNSフォワーダドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778
+#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792
+#: etc/inc/priv.defs.inc:792
+msgid "WebCfg - Services: DNS Forwarder: Edit host page"
+msgstr "WebCfg - サービス: DNSフォワーダ:編集ホストページ"
+
+#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779
+#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793
+#: etc/inc/priv.defs.inc:793
+msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page."
+msgstr "ページ': DNSフォワーダã®ç·¨é›†ãƒ›ã‚¹ãƒˆã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784
+#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798
+#: etc/inc/priv.defs.inc:798
+msgid "WebCfg - Services: Dynamic DNS clients page"
+msgstr "WebCfg - サービス:ダイナミックDNSクライアントã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785
+#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799
+#: etc/inc/priv.defs.inc:799
+msgid "Allow access to the 'Services: Dynamic DNS clients' page."
+msgstr "ページ: 「ダイナミックDNSクライアントサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790
+#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804
+#: etc/inc/priv.defs.inc:804
+msgid "WebCfg - Services: Dynamic DNS client page"
+msgstr "WebCfg - サービス:ダイナミックDNSクライアントページ"
+
+#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791
+#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805
+#: etc/inc/priv.defs.inc:805
+msgid "Allow access to the 'Services: Dynamic DNS client' page."
+msgstr "ページ: 「ダイナミックDNSクライアントサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796
+#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810
+#: etc/inc/priv.defs.inc:810
+msgid "WebCfg - Services: Igmpproxy page"
+msgstr "WebCfg - サービス: Igmpproxyページ"
+
+#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797
+#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811
+#: etc/inc/priv.defs.inc:811
+msgid "Allow access to the 'Services: Igmpproxy' page."
+msgstr "ページ:' Igmpproxyサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802
+#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816
+#: etc/inc/priv.defs.inc:816
+msgid "WebCfg - Firewall: Igmpproxy: Edit page"
+msgstr "WebCfg - ファイアウォール: Igmpproxy : Editページ"
+
+#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803
+#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817
+#: etc/inc/priv.defs.inc:817
+msgid "Allow access to the 'Firewall: Igmpproxy' page."
+msgstr "' : Igmpproxyファイアウォールã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808
+#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822
+#: etc/inc/priv.defs.inc:822
+msgid "WebCfg - Services: RFC 2136 clients page"
+msgstr "WebCfg - サービス: RFC 2136 Clientsページ"
+
+#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809
+#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823
+#: etc/inc/priv.defs.inc:823
+msgid "Allow access to the 'Services: RFC 2136 clients' page."
+msgstr "ページ:' ã€RFC 2136ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆÂ·ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814
+#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828
+#: etc/inc/priv.defs.inc:828
+msgid "WebCfg - Services: SNMP page"
+msgstr "WebCfg - サービス:SNMP]ページ"
+
+#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815
+#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829
+#: etc/inc/priv.defs.inc:829
+msgid "Allow access to the 'Services: SNMP' page."
+msgstr "ページ: 「 SNMPサービスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820
+#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834
+#: etc/inc/priv.defs.inc:834
+msgid "WebCfg - Services: Wake on LAN page"
+msgstr "WebCfg - サービス: LANã®ãƒšãƒ¼ã‚¸ã§ã‚¦ã‚§ã‚¤ã‚¯"
+
+#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821
+#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835
+#: etc/inc/priv.defs.inc:835
+msgid "Allow access to the 'Services: Wake on LAN' page."
+msgstr "ページ: 「モーニングLAN上ã®ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826
+#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840
+#: etc/inc/priv.defs.inc:840
+msgid "WebCfg - Services: Wake on LAN: Edit page"
+msgstr "WebCfg - サービス: Wake on LANã¯ï¼š Editページ"
+
+#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827
+#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841
+#: etc/inc/priv.defs.inc:841
+msgid "Allow access to the 'Services: Wake on LAN: Edit' page."
+msgstr "ページ':ウェイクLAN上ã®ã‚µãƒ¼ãƒ“スを編集ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838
+#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852
+#: etc/inc/priv.defs.inc:852
+msgid "WebCfg - Hidden: Detailed Status page"
+msgstr "WebCfg - éžè¡¨ç¤ºï¼šè©³ç´°ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã«ã¯ã€"
+
+#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839
+#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853
+#: etc/inc/priv.defs.inc:853
+msgid "Allow access to the 'Hidden: Detailed Status' page."
+msgstr "ページ: 「詳細ステータス隠れãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844
+#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858
+#: etc/inc/priv.defs.inc:858
+msgid "WebCfg - Status: Captive portal page"
+msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845
+#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859
+#: etc/inc/priv.defs.inc:859
+msgid "Allow access to the 'Status: Captive portal' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850
+#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864
+#: etc/inc/priv.defs.inc:864
+msgid "WebCfg - Status: Captive portal test Vouchers page"
+msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ã®è©¦é¨“ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851
+#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865
+#: etc/inc/priv.defs.inc:865
+msgid "Allow access to the 'Status: Captive portal Test Vouchers' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ†ã‚¹ãƒˆãƒã‚¦ãƒãƒ£ãƒ¼çŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856
+#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870
+#: etc/inc/priv.defs.inc:870
+msgid "WebCfg - Status: Captive portal Voucher Rolls page"
+msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857
+#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871
+#: etc/inc/priv.defs.inc:871
+msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹çŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862
+#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876
+#: etc/inc/priv.defs.inc:876
+msgid "WebCfg - Status: Captive portal Vouchers page"
+msgstr "WebCfg - ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863
+#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877
+#: etc/inc/priv.defs.inc:877
+msgid "Allow access to the 'Status: Captive portal Vouchers' page."
+msgstr "ページ: 「キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼çŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868
+#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882
+#: etc/inc/priv.defs.inc:882
+msgid "WebCfg - Status: DHCP leases page"
+msgstr "WebCfg - ステータス: DHCPã¯ã€ãƒšãƒ¼ã‚¸ã‚’リース"
+
+#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869
+#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883
+#: etc/inc/priv.defs.inc:883
+msgid "Allow access to the 'Status: DHCP leases' page."
+msgstr "ページ: 「 DHCPã®ãƒªãƒ¼ã‚¹çŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874
+#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888
+#: etc/inc/priv.defs.inc:888
+msgid "WebCfg - Status: Filter Reload Status page"
+msgstr "WebCfg - ステータス:フィルタã®ãƒªãƒ­ãƒ¼ãƒ‰ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875
+#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889
+#: etc/inc/priv.defs.inc:889
+msgid "Allow access to the 'Status: Filter Reload Status' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚ページ「ステータスをリロードステータスフィルタ〠。"
+
+#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880
+#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894
+#: etc/inc/priv.defs.inc:894
+msgid "WebCfg - Status: Gateway Groups page"
+msgstr "WebCfg - ステータス:ゲートウェイグループ]"
+
+#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881
+#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895
+#: etc/inc/priv.defs.inc:895
+msgid "Allow access to the 'Status: Gateway Groups' page."
+msgstr "ページ:'ゲートウェイグループステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886
+#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900
+#: etc/inc/priv.defs.inc:900
+msgid "WebCfg - Status: Gateways page"
+msgstr "WebCfg - ステータス:ゲートウェイページ"
+
+#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887
+#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901
+#: etc/inc/priv.defs.inc:901
+msgid "Allow access to the 'Status: Gateways' page."
+msgstr "ページ:'ゲートウェイã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892
+#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906
+#: etc/inc/priv.defs.inc:906
+msgid "WebCfg - Status: Traffic Graph page"
+msgstr "WebCfg - ステータス:トラフィックグラフページ"
+
+#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893
+#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907
+#: etc/inc/priv.defs.inc:907
+msgid "Allow access to the 'Status: Traffic Graph' page."
+msgstr "ページ: 「トラフィックグラフ状æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899
+#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913
+#: etc/inc/priv.defs.inc:913
+msgid "WebCfg - Status: CPU load page"
+msgstr "WebCfg - ステータス: CPUè² è·ã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900
+#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914
+#: etc/inc/priv.defs.inc:914
+msgid "Allow access to the 'Status: CPU load' page."
+msgstr "ページ: 「 CPUè² è·çŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905
+#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919
+#: etc/inc/priv.defs.inc:919
+msgid "WebCfg - Status: Interfaces page"
+msgstr "WebCfg - ステータス: Interfacesページ"
+
+#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906
+#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920
+#: etc/inc/priv.defs.inc:920
+msgid "Allow access to the 'Status: Interfaces' page."
+msgstr "ページ: 「インタフェースã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911
+#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925
+#: etc/inc/priv.defs.inc:925
+msgid "WebCfg - Status: Load Balancer: Pool page"
+msgstr "WebCfg - ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ールページ"
+
+#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912
+#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926
+#: etc/inc/priv.defs.inc:926
+msgid "Allow access to the 'Status: Load Balancer: Pool' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール'ページを。"
+
+#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917
+#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931
+#: etc/inc/priv.defs.inc:931
+msgid "WebCfg - Status: Load Balancer: Virtual Server page"
+msgstr "WebCfg - ステータス:仮想サーãƒãƒ¼ã®ãƒšãƒ¼ã‚¸ï¼šãƒãƒ©ãƒ³ã‚µã‚’ロード"
+
+#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918
+#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932
+#: etc/inc/priv.defs.inc:932
+msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹'ステータス:ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ã€ãƒšãƒ¼ã‚¸ã‚’。"
+
+#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923
+#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937
+#: etc/inc/priv.defs.inc:937
+msgid "WebCfg - Status: OpenVPN page"
+msgstr "WebCfg - ステータス: OpenVPNã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924
+#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938
+#: etc/inc/priv.defs.inc:938
+msgid "Allow access to the 'Status: OpenVPN' page."
+msgstr "ページ: 「 OpenVPNã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929
+#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943
+#: etc/inc/priv.defs.inc:943
+msgid "WebCfg - Status: Traffic shaper: Queues page"
+msgstr "WebCfg - ステータス:トラフィックシェイ:キューページ"
+
+#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930
+#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944
+#: etc/inc/priv.defs.inc:944
+msgid "Allow access to the 'Status: Traffic shaper: Queues' page."
+msgstr "ページ':トラフィックシェーパキューã®çŠ¶æ…‹ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935
+#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949
+#: etc/inc/priv.defs.inc:949
+msgid "WebCfg - Status: RRD Graphs page"
+msgstr "WebCfg - ステータス: RRDグラフページ"
+
+#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936
+#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950
+#: etc/inc/priv.defs.inc:950
+msgid "Allow access to the 'Status: RRD Graphs' page."
+msgstr "ページ:' RRDグラフã®çŠ¶æ³ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942
+#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956
+#: etc/inc/priv.defs.inc:956
+msgid "WebCfg - Status: RRD Graphs settings page"
+msgstr "WebCfg - ステータス: RRDグラフã®è¨­å®šãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943
+#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957
+#: etc/inc/priv.defs.inc:957
+msgid "Allow access to the 'Status: RRD Graphs: settings' page."
+msgstr "ページ': RRDグラフã®è¨­å®šçŠ¶æ³ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948
+#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962
+#: etc/inc/priv.defs.inc:962
+msgid "WebCfg - Status: Services page"
+msgstr "WebCfg - ステータス:サービスページ"
+
+#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949
+#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963
+#: etc/inc/priv.defs.inc:963
+msgid "Allow access to the 'Status: Services' page."
+msgstr "ページ: 「サービスステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954
+#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968
+#: etc/inc/priv.defs.inc:968
+msgid "WebCfg - Status: UPnP Status page"
+msgstr "WebCfg - ステータス: UPnPã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955
+#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969
+#: etc/inc/priv.defs.inc:969
+msgid "Allow access to the 'Status: UPnP Status' page."
+msgstr "ページ: 「 UPnPã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960
+#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974
+#: etc/inc/priv.defs.inc:974
+msgid "WebCfg - Status: Wireless page"
+msgstr "WebCfg - ステータス:ワイヤレスページ"
+
+#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961
+#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975
+#: etc/inc/priv.defs.inc:975
+msgid "Allow access to the 'Status: Wireless' page."
+msgstr "ページ: 「ワイヤレスステータスã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966
+#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980
+#: etc/inc/priv.defs.inc:980
+msgid "WebCfg - System: General Setup page"
+msgstr "WebCfg - システム: General Setupページ"
+
+#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967
+#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981
+#: etc/inc/priv.defs.inc:981
+msgid "Allow access to the 'System: General Setup' page."
+msgstr "ページ: 「一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—システムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972
+#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986
+#: etc/inc/priv.defs.inc:986
+msgid "WebCfg - System: Advanced: Admin Access Page"
+msgstr "WebCfg - システム:高度:管ç†ã‚¢ã‚¯ã‚»ã‚¹ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973
+#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987
+#: etc/inc/priv.defs.inc:987
+msgid "Allow access to the 'System: Advanced: Admin Access' page."
+msgstr "ページ':上級管ç†è€…ã®ã‚¢ã‚¯ã‚»ã‚¹Â·ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978
+#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992
+#: etc/inc/priv.defs.inc:992
+msgid "WebCfg - System: Advanced: Firewall and NAT page"
+msgstr "WebCfg - システム:高度:ファイアウォールやNATã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979
+#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993
+#: etc/inc/priv.defs.inc:993
+msgid "Allow access to the 'System: Advanced: Firewall and NAT' page."
+msgstr "' :高度:ファイアウォールã¨NATシステムã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984
+#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998
+#: etc/inc/priv.defs.inc:998
+msgid "WebCfg - System: Advanced: Miscellaneous page"
+msgstr "WebCfg - システム:高度:ãã®ä»–ã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985
+#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999
+#: etc/inc/priv.defs.inc:999
+msgid "Allow access to the 'System: Advanced: Miscellaneous' page."
+msgstr "' :高度:雑多ãªã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004
+#: etc/inc/priv.defs.inc:1004
+msgid "WebCfg - System: Advanced: Network page"
+msgstr "WebCfg - システム:拡張:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005
+#: etc/inc/priv.defs.inc:1005
+msgid "Allow access to the 'System: Advanced: Networking' page."
+msgstr "' :高度:ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002
+#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010
+#: etc/inc/priv.defs.inc:1016 etc/inc/priv.defs.inc:1010
+#: etc/inc/priv.defs.inc:1016
+msgid "WebCfg - System: Advanced: Tunables page"
+msgstr "WebCfg - システム:高度:ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ãƒ‘ラメータページ"
+
+#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003
+#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011
+#: etc/inc/priv.defs.inc:1017 etc/inc/priv.defs.inc:1011
+#: etc/inc/priv.defs.inc:1017
+msgid "Allow access to the 'System: Advanced: Tunables' page."
+msgstr "' :高度:ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½ã‚·ã‚¹ãƒ†ãƒ ã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008
+#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022
+#: etc/inc/priv.defs.inc:1022
+msgid "WebCfg - System: Authentication Servers"
+msgstr "WebCfg - システム:èªè¨¼ã‚µãƒ¼ãƒãƒ¼"
+
+#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009
+#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023
+#: etc/inc/priv.defs.inc:1023
+msgid "Allow access to the 'System: Authentication Servers' page."
+msgstr "ページ:'èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014
+#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028
+#: etc/inc/priv.defs.inc:1028
+msgid "WebCfg - System: CA Manager"
+msgstr "WebCfg - システム:カリフォルニアマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015
+#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029
+#: etc/inc/priv.defs.inc:1029
+msgid "Allow access to the 'System: CA Manager' page."
+msgstr "ページ:'CAマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020
+#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034
+#: etc/inc/priv.defs.inc:1034
+msgid "WebCfg - System: Certificate Manager"
+msgstr "WebCfg - システム:証明書マãƒãƒ¼ã‚¸ãƒ£"
+
+#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021
+#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035
+#: etc/inc/priv.defs.inc:1035
+msgid "Allow access to the 'System: Certificate Manager' page."
+msgstr "ページ: 「証明書マãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026
+#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040
+#: etc/inc/priv.defs.inc:1040
+msgid "WebCfg - System: CRL Manager"
+msgstr "WebCfg - システム: CRLマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027
+#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041
+#: etc/inc/priv.defs.inc:1041
+msgid "Allow access to the 'System: CRL Manager' page."
+msgstr "ページ: 「 CRLマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032
+#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046
+#: etc/inc/priv.defs.inc:1046
+msgid "WebCfg - System: Firmware: Manual Update page"
+msgstr "WebCfg - システム:ファームウェア:手動アップデートページ"
+
+#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033
+#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047
+#: etc/inc/priv.defs.inc:1047
+msgid "Allow access to the 'System: Firmware: Manual Update' page."
+msgstr "ページ':ファームウェアã®æ‰‹å‹•æ›´æ–°ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038
+#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052
+#: etc/inc/priv.defs.inc:1052
+msgid "WebCfg - System: Firmware: Check For Update page"
+msgstr "WebCfg - システム:ファームウェア:アップデートページã§ã¯ãƒã‚§ãƒƒã‚¯"
+
+#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039
+#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053
+#: etc/inc/priv.defs.inc:1053
+msgid "Allow access to the 'System: Firmware: Check For Update' page."
+msgstr "ページ':ファームウェアã®æ›´æ–°ã‚’確èªã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044
+#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058
+#: etc/inc/priv.defs.inc:1058
+msgid "WebCfg - System: Firmware: Auto Update page"
+msgstr "WebCfg - システム:ファームウェア:自動アップデートページ"
+
+#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045
+#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059
+#: etc/inc/priv.defs.inc:1059
+msgid "Allow access to the 'System: Firmware: Auto Update' page."
+msgstr "ページ':ファームウェアã®è‡ªå‹•ã‚¢ãƒƒãƒ—デートシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050
+#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064
+#: etc/inc/priv.defs.inc:1064
+msgid "WebCfg - System: Firmware: Settings page"
+msgstr "WebCfg - システム:ファームウェア: Settingsページ"
+
+#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051
+#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065
+#: etc/inc/priv.defs.inc:1065
+msgid "Allow access to the 'System: Firmware: Settings' page."
+msgstr "ページ':ファームウェアã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056
+#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070
+#: etc/inc/priv.defs.inc:1070
+msgid "WebCfg - System: Gateway Groups page"
+msgstr "WebCfg - システム:ゲートウェイグループ]"
+
+#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057
+#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071
+#: etc/inc/priv.defs.inc:1071
+msgid "Allow access to the 'System: Gateway Groups' page."
+msgstr "ページ:'ゲートウェイグループシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062
+#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076
+#: etc/inc/priv.defs.inc:1076
+msgid "WebCfg - System: Gateways: Edit Gateway Groups page"
+msgstr "WebCfg - システム:ゲートウェイ:編集ゲートウェイグループ]"
+
+#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063
+#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077
+#: etc/inc/priv.defs.inc:1077
+msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page."
+msgstr "ページ':ゲートウェイã®ç·¨é›†ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚°ãƒ«ãƒ¼ãƒ—システムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068
+#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082
+#: etc/inc/priv.defs.inc:1082
+msgid "WebCfg - System: Gateways page"
+msgstr "WebCfg - システム:ゲートウェイページ"
+
+#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069
+#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083
+#: etc/inc/priv.defs.inc:1083
+msgid "Allow access to the 'System: Gateways' page."
+msgstr "ページ: 「ゲートウェイシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074
+#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088
+#: etc/inc/priv.defs.inc:1088
+msgid "WebCfg - System: Gateways: Edit Gateway page"
+msgstr "WebCfg - システム:ゲートウェイ:編集ゲートウェイページ"
+
+#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075
+#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089
+#: etc/inc/priv.defs.inc:1089
+msgid "Allow access to the 'System: Gateways: Edit Gateway' page."
+msgstr "ページ':ゲートウェイã®ç·¨é›†ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080
+#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094
+#: etc/inc/priv.defs.inc:1094
+msgid "WebCfg - System: Group manager page"
+msgstr "WebCfg - システム:グループマãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081
+#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095
+#: etc/inc/priv.defs.inc:1095
+msgid "Allow access to the 'System: Group manager' page."
+msgstr "ページ: 「グループ·マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086
+#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100
+#: etc/inc/priv.defs.inc:1100
+msgid "WebCfg - System: Group Manager: Add Privileges page"
+msgstr "WebCfg - システム:グループマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼šç‰¹æ¨©ã®ãƒšãƒ¼ã‚¸ã‚’追加"
+
+#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087
+#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101
+#: etc/inc/priv.defs.inc:1101
+msgid "Allow access to the 'System: Group Manager: Add Privileges' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ :グループ·マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼šã‚·ã‚¹ãƒ†ãƒ æ¨©é™ã®è¿½åŠ ã€ãƒšãƒ¼ã‚¸ãŒã€‚"
+
+#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092
+#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106
+#: etc/inc/priv.defs.inc:1106
+msgid "WebCfg - System: Static Routes page"
+msgstr "WebCfg - システム:é™çš„ルート]ページ"
+
+#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093
+#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107
+#: etc/inc/priv.defs.inc:1107
+msgid "Allow access to the 'System: Static Routes' page."
+msgstr "ページ: 「スタティックルートシステムã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098
+#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112
+#: etc/inc/priv.defs.inc:1112
+msgid "WebCfg - System: Static Routes: Edit route page"
+msgstr "WebCfg - システム:é™çš„ルート:編集ルートページ"
+
+#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099
+#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113
+#: etc/inc/priv.defs.inc:1113
+msgid "Allow access to the 'System: Static Routes: Edit route' page."
+msgstr "ページ':é™çš„ルートã®ç·¨é›†ãƒ«ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104
+#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118
+#: etc/inc/priv.defs.inc:1118
+msgid "WebCfg - System: User Manager page"
+msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105
+#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119
+#: etc/inc/priv.defs.inc:1119
+msgid "Allow access to the 'System: User Manager' page."
+msgstr "ページ: 「ユーザーマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110
+#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124
+#: etc/inc/priv.defs.inc:1124
+msgid "WebCfg - System: User Manager: Add Privileges page"
+msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šæ¨©é™]ページを追加ã™ã‚‹"
+
+#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111
+#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125
+#: etc/inc/priv.defs.inc:1125
+msgid "Allow access to the 'System: User Manager: Add Privileges' page."
+msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®æ¨©é™ã®è¿½åŠ ã‚·ã‚¹ãƒ†ãƒ ã€ã‚’ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116
+#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130
+#: etc/inc/priv.defs.inc:1130
+msgid "WebCfg - System: User Password Manager page"
+msgstr "WebCfg - システム:ユーザーパスワードマãƒãƒ¼ã‚¸ãƒ£]ページ"
+
+#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117
+#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131
+#: etc/inc/priv.defs.inc:1131
+msgid "Allow access to the 'System: User Password Manager' page."
+msgstr "ページ: 「ユーザー·パスワードマãƒãƒ¼ã‚¸ãƒ£ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122
+#: etc/inc/priv.defs.inc:1128
+msgid "WebCfg - System: User manager: settings page"
+msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123
+#: etc/inc/priv.defs.inc:1129
+msgid "Allow access to the 'System: User manager: settings' page."
+msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128
+#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142
+#: etc/inc/priv.defs.inc:1142
+msgid "WebCfg - System: User Manager: Settings: Test LDAP page"
+msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šã‚»ãƒƒãƒ†ã‚£ãƒ³ã‚°ï¼šãƒ†ã‚¹ãƒˆã®LDAPページ"
+
+#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129
+#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143
+#: etc/inc/priv.defs.inc:1143
+msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page."
+msgstr "ページ' :ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒ†ã‚¹ãƒˆLDAPシステムã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134
+#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148
+#: etc/inc/priv.defs.inc:1148
+msgid "WebCfg - System: Firmware: Manual Update page (progress bar)"
+msgstr "WebCfg - システム:ファームウェア:手動アップデートページ(プログレスãƒãƒ¼ï¼‰"
+
+#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135
+#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149
+#: etc/inc/priv.defs.inc:1149
+msgid ""
+"Allow access to the 'System: Firmware: Manual Update: Progress bar' page."
+msgstr "ページ"' :ファームウェア:手動アップデートプログレスãƒãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140
+#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154
+#: etc/inc/priv.defs.inc:1154
+msgid "WebCfg - Hidden: Upload Configuration page"
+msgstr "WebCfg - éžè¡¨ç¤ºï¼šã‚¢ãƒƒãƒ—ロード設定]ページãŒ"
+
+#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141
+#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155
+#: etc/inc/priv.defs.inc:1155
+msgid "Allow access to the 'Hidden: Upload Configuration' page."
+msgstr "ページ:'アップロードã®è¨­å®šéš ã‚ŒãŸã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146
+#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160
+#: etc/inc/priv.defs.inc:1160
+msgid "WebCfg - VPN: IPsec page"
+msgstr "WebCfg - VPN : IPsecã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147
+#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161
+#: etc/inc/priv.defs.inc:1161
+msgid "Allow access to the 'VPN: IPsec' page."
+msgstr "ページ:'ã®IPsec VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152
+#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166
+#: etc/inc/priv.defs.inc:1166
+msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List"
+msgstr "WebCfg - VPN : IPsecã®ï¼šäº‹å‰å…±æœ‰éµãƒªã‚¹ãƒˆ"
+
+#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153
+#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167
+#: etc/inc/priv.defs.inc:1167
+msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page."
+msgstr "ページ': IPsecã®äº‹å‰å…±æœ‰éµãƒªã‚¹ãƒˆã®VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158
+#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172
+#: etc/inc/priv.defs.inc:1172
+msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys"
+msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰éµ"
+
+#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159
+#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173
+#: etc/inc/priv.defs.inc:1173
+msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰éµã€ã®ãƒšãƒ¼ã‚¸ã€‚"
+
+#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164
+#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178
+#: etc/inc/priv.defs.inc:1178
+msgid "WebCfg - VPN: IPsec: Mobile page"
+msgstr "WebCfg - VPN : IPsecã®ï¼šãƒ¢ãƒã‚¤ãƒ«ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165
+#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179
+#: etc/inc/priv.defs.inc:1179
+msgid "Allow access to the 'VPN: IPsec: Mobile' page."
+msgstr "ページ': IPsecã®ãƒ¢ãƒã‚¤ãƒ«VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170
+#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184
+#: etc/inc/priv.defs.inc:1184
+msgid "WebCfg - VPN: IPsec: Edit Phase 1 page"
+msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šãƒ•ã‚§ãƒ¼ã‚º1ページ"
+
+#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171
+#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185
+#: etc/inc/priv.defs.inc:1185
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šãƒ•ã‚§ãƒ¼ã‚º1 ã€ã®ãƒšãƒ¼ã‚¸ã€‚"
+
+#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176
+#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190
+#: etc/inc/priv.defs.inc:1190
+msgid "WebCfg - VPN: IPsec: Edit Phase 2 page"
+msgstr "WebCfg - VPN : IPsecã®ç·¨é›†ï¼šãƒ•ã‚§ãƒ¼ã‚º2ページ"
+
+#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177
+#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191
+#: etc/inc/priv.defs.inc:1191
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page."
+msgstr "ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã€ã«VPNを: IPsecã®ç·¨é›†ï¼šãƒ•ã‚§ãƒ¼ã‚º2 ã€ã®ãƒšãƒ¼ã‚¸ã€‚"
+
+#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182
+#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196
+#: etc/inc/priv.defs.inc:1196
+msgid "WebCfg - VPN: VPN L2TP page"
+msgstr "WebCfg - VPN : VPN L2TPページ"
+
+#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183
+#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197
+#: etc/inc/priv.defs.inc:1197
+msgid "Allow access to the 'VPN: VPN L2TP' page."
+msgstr "ページ: 「 VPNã®L2TP VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188
+#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202
+#: etc/inc/priv.defs.inc:1202
+msgid "WebCfg - VPN: VPN L2TP : Users page"
+msgstr "WebCfg - VPN : VPN L2TP :ユーザーã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189
+#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203
+#: etc/inc/priv.defs.inc:1203
+msgid "Allow access to the 'VPN: VPN L2TP : Users' page."
+msgstr "ページ': VPN L2TPユーザーVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194
+#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208
+#: etc/inc/priv.defs.inc:1208
+msgid "WebCfg - VPN: VPN L2TP : Users : Edit page"
+msgstr "WebCfg - VPN : VPN L2TP :ユーザー: Editページ"
+
+#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195
+#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209
+#: etc/inc/priv.defs.inc:1209
+msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page."
+msgstr "ページ' : VPN L2TP :ユーザーã®ç·¨é›†VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200
+#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214
+#: etc/inc/priv.defs.inc:1214
+msgid "WebCfg - OpenVPN: Client page"
+msgstr "WebCfg - OpenVPNã®ï¼š Clientページ"
+
+#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201
+#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215
+#: etc/inc/priv.defs.inc:1215
+msgid "Allow access to the 'OpenVPN: Client' page."
+msgstr "ページ:'クライアントã®OpenVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206
+#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220
+#: etc/inc/priv.defs.inc:1220
+msgid "WebCfg - OpenVPN: Client Specific Override page"
+msgstr "WebCfg - OpenVPNã®ï¼šã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå›ºæœ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207
+#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221
+#: etc/inc/priv.defs.inc:1221
+msgid "Allow access to the 'OpenVPN: Client Specific Override' page."
+msgstr "ページ:'クライアントã®ç‰¹å®šã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰OpenVPNã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212
+#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226
+#: etc/inc/priv.defs.inc:1226
+msgid "WebCfg - OpenVPN: Server page"
+msgstr "WebCfg - OpenVPNã®ï¼š Serverページ"
+
+#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213
+#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227
+#: etc/inc/priv.defs.inc:1227
+msgid "Allow access to the 'OpenVPN: Server' page."
+msgstr "ページ:'サーãƒãƒ¼OpenVPNã®'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218
+#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232
+#: etc/inc/priv.defs.inc:1232
+msgid "WebCfg - Services: PPPoE Server page"
+msgstr "WebCfg - サービス: PPPoEサーãƒãƒšãƒ¼ã‚¸ã«"
+
+#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219
+#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233
+#: etc/inc/priv.defs.inc:1233
+msgid "Allow access to the 'Services: PPPoE Server' page."
+msgstr "ページ:'ã®PPPoEサーãƒã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224
+#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238
+#: etc/inc/priv.defs.inc:1238
+msgid "WebCfg - Services: PPPoE Server: Edit page"
+msgstr "WebCfg - サービス: PPPoEサーãƒï¼š Editページ"
+
+#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225
+#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239
+#: etc/inc/priv.defs.inc:1239
+msgid "Allow access to the 'Services: PPPoE Server: Edit' page."
+msgstr "ページ': PPPoEサーãƒã‚µãƒ¼ãƒ“スを編集ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230
+#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244
+#: etc/inc/priv.defs.inc:1244
+msgid "WebCfg - VPN: VPN PPTP page"
+msgstr "WebCfg - VPN : VPNã®PPTPページ"
+
+#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231
+#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245
+#: etc/inc/priv.defs.inc:1245
+msgid "Allow access to the 'VPN: VPN PPTP' page."
+msgstr "ページ: 「 VPN PPTP VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236
+#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250
+#: etc/inc/priv.defs.inc:1250
+msgid "WebCfg - VPN: VPN PPTP: Users page"
+msgstr "WebCfg - VPN : VPNã®PPTP :ユーザーã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237
+#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251
+#: etc/inc/priv.defs.inc:1251
+msgid "Allow access to the 'VPN: VPN PPTP: Users' page."
+msgstr "ページ': VPN PPTPユーザーVPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242
+#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256
+#: etc/inc/priv.defs.inc:1256
+msgid "WebCfg - VPN: VPN PPTP: User: Edit page"
+msgstr "WebCfg - VPN : VPN PPTPユーザー: Editページ"
+
+#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243
+#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257
+#: etc/inc/priv.defs.inc:1257
+msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page."
+msgstr "ページ' : VPN PPTP :ユーザーã®ç·¨é›†VPN ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248
+#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262
+#: etc/inc/priv.defs.inc:1262
+msgid "WebCfg - pfSense wizard subsystem page"
+msgstr "WebCfg - pfSenseウィザード·サブページ"
+
+#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249
+#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263
+#: etc/inc/priv.defs.inc:1263
+msgid "Allow access to the 'pfSense wizard subsystem' page."
+msgstr "「 pfSenseウィザードサブシステムã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254
+#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268
+#: etc/inc/priv.defs.inc:1268
+msgid "WebCfg - XMLRPC Library page"
+msgstr "WebCfg - XMLRPCライブラリページ"
+
+#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255
+#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269
+#: etc/inc/priv.defs.inc:1269
+msgid "Allow access to the 'XMLRPC Library' page."
+msgstr "' XMLRPCライブラリã€ãƒšãƒ¼ã‚¸ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/rrd.inc:45 etc/inc/rrd.inc:45
+#, php-format
+msgid "RRD dump failed exited with %1$s, the error is: %2$s"
+msgstr "RRDダンプãŒã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¤±æ•—ã—ã€ã‚¨ãƒ©ãƒ¼ã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ %2$s"
+
+#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:96 etc/inc/rrd.inc:98
+#: etc/inc/rrd.inc:98
+#, php-format
+msgid "RRD create failed exited with %1$s, the error is: %2$s"
+msgstr "RRDã¯%1$sã§çµ‚了ã—ã¾ã—ãŸä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s"
+
+#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:110
+#: etc/inc/rrd.inc:113 etc/inc/rrd.inc:113
+#, php-format
+msgid ""
+"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has "
+"%3$s DS values and %4$s RRA databases"
+msgstr "%3$s DSã®å€¤ãŠã‚ˆã³ï¼… 4 $ sã®RRAデータベース「インãƒãƒ¼ãƒˆRRDã¯ã¯%1$s ã€DS値ã¨%2$sã®RRAデータベース〠RRDãŒæŒã¤æ–°ã—ã„フォーマットをæŒã£ã¦ã„ã‚‹ã€"
+
+#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:194
+#: etc/inc/rrd.inc:197 etc/inc/rrd.inc:197
+#, php-format
+msgid "The new RRD now has %1$s DS values and %2$s RRA databases"
+msgstr "æ–°ã—ã„RRDã¯ä»Šã¯%1$s DSã®å€¤ã¨%2$sã®RRAデータベースをæŒã£ã¦ã„ã‚‹"
+
+#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:202
+#: etc/inc/rrd.inc:205 etc/inc/rrd.inc:205
+msgid "Generating RRD graphs..."
+msgstr "RRDグラフを生æˆã™ã‚‹..."
+
+#: etc/inc/rrd.inc:247
+#, php-format
+msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr "RRDã¯%1$sã§çµ‚了ã—ã¾ã—ãŸå¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s%3$s"
+
+#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803
+#: etc/inc/rrd.inc:805 etc/inc/rrd.inc:808 etc/inc/rrd.inc:808
+msgid "Creating rrd update script"
+msgstr "RRD更新スクリプトã®ä½œæˆ"
+
+#: etc/inc/smtp.inc:92 etc/inc/smtp.inc:92
+msgid ": data access time out"
+msgstr ":外データアクセス時間"
+
+#: etc/inc/smtp.inc:95 etc/inc/smtp.inc:95
+msgid ": the server disconnected"
+msgstr ":切断ã•ã‚ŒãŸã‚µãƒ¼ãƒãƒ¼"
+
+#: etc/inc/smtp.inc:107 etc/inc/smtp.inc:107
+msgid "reached the end of data while reading from the SMTP server conection"
+msgstr "SMTPサーãƒãŸã£ã‹ã‚‰èª­ã¿å–り中ã«ãƒ‡ãƒ¼ã‚¿ã®æœ€å¾Œã«åˆ°é”ã—ãŸ"
+
+#: etc/inc/smtp.inc:113 etc/inc/smtp.inc:113
+msgid "it was not possible to read line from the SMTP server"
+msgstr "ãã‚Œã¯ã€SMTPサーãƒãƒ¼ã‹ã‚‰ã®ãƒ©ã‚¤ãƒ³ã‚’読むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:135 etc/inc/smtp.inc:135
+msgid "it was not possible to send a line to the SMTP server"
+msgstr "ãã‚Œã¯SMTPサーãƒã«è¡Œã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:149 etc/inc/smtp.inc:149
+msgid "it was not possible to send data to the SMTP server"
+msgstr "ã“ã‚Œã¯ã€SMTPサーãƒãƒ¼ã«ãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:221 etc/inc/smtp.inc:221
+msgid "establishing SSL connections requires at least PHP version 4.3.0"
+msgstr "SSL接続を確立ã™ã‚‹ã“ã¨ã¯ã€å°‘ãªãã¨ã‚‚ã€PHPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³4.3.0ãŒå¿…è¦ã§ã™"
+
+#: etc/inc/smtp.inc:224 etc/inc/smtp.inc:224
+msgid "establishing SSL connections requires the OpenSSL extension enabled"
+msgstr "SSL接続を確立ã™ã‚‹ã“ã¨ã¯æœ‰åŠ¹ã®OpenSSL拡張モジュールを必è¦ã¨"
+
+#: etc/inc/smtp.inc:233 etc/inc/smtp.inc:233
+#, php-format
+msgid "could not resolve host "%s""
+msgstr "ホスト「 %s "を解決ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:237 etc/inc/smtp.inc:237
+#, php-format
+msgid "domain "%s" resolved to an address excluded to be valid"
+msgstr "有効ã§ã‚ã‚‹ãŸã‚ã«é™¤å¤–ã•ã‚ŒãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã«è§£æ±ºã•ã‚ŒãŸãƒ‰ãƒ¡ã‚¤ãƒ³ã€ %s ã€"
+
+#: etc/inc/smtp.inc:239 etc/inc/smtp.inc:239
+#, php-format
+msgid "Connecting to host address "%1$s" port %2$s..."
+msgstr "アドレス "ã¯%1$s "ãƒãƒ¼ãƒˆ%2$sをホストã«æŽ¥ç¶šã™ã‚‹..."
+
+#: etc/inc/smtp.inc:246 etc/inc/smtp.inc:246
+msgid "-3 socket could not be created"
+msgstr "-3ソケットを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:248 etc/inc/smtp.inc:248
+#, php-format
+msgid "-4 dns lookup on hostname "%s" failed"
+msgstr "-4 DNSルックアップã®ãƒ›ã‚¹ãƒˆåã®ã€Œ %s 「失敗ã—ãŸ"
+
+#: etc/inc/smtp.inc:250 etc/inc/smtp.inc:250
+msgid "-5 connection refused or timed out"
+msgstr "-5接続ãŒæ‹’å¦ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ"
+
+#: etc/inc/smtp.inc:252 etc/inc/smtp.inc:252
+msgid "-6 fdopen() call failed"
+msgstr "-6 fdopen.()呼ã³å‡ºã—ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: etc/inc/smtp.inc:254 etc/inc/smtp.inc:254
+msgid "-7 setvbuf() call failed"
+msgstr "-7 setvbuf.()呼ã³å‡ºã—ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: etc/inc/smtp.inc:256 etc/inc/smtp.inc:256
+#, php-format
+msgid "could not connect to the host "%1$s": %2$s"
+msgstr "ホスト"ã¯%1$s "ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ %2$s"
+
+#: etc/inc/smtp.inc:265 etc/inc/smtp.inc:265
+msgid ""
+"it is not possible to authenticate using the specified mechanism because the "
+"SASL library class is not loaded"
+msgstr "SASLライブラリクラスロードã•ã‚Œã¦ã„ãªã„ã€ã“ã¨ãŒåŽŸå› æŒ‡å®šã•ã‚ŒãŸãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使用ã—ã¦èªè¨¼ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€"
+
+#: etc/inc/smtp.inc:289 etc/inc/smtp.inc:289
+#, php-format
+msgid "authenticated mechanism %1$s may not be used: %2$s"
+msgstr "èªè¨¼ã•ã‚ŒãŸæ©Ÿæ§‹ã¯%1$sを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 %2$s"
+
+#: etc/inc/smtp.inc:294 etc/inc/smtp.inc:294
+msgid "Could not start the SASL authentication client:"
+msgstr "SASLèªè¨¼ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’èµ·å‹•ã§ãã¾ã›ã‚“ã§ã—ãŸï¼š"
+
+#: etc/inc/smtp.inc:301 etc/inc/smtp.inc:301
+msgid "Could not send the AUTH command"
+msgstr "AUTHコマンドをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346 etc/inc/smtp.inc:316
+#: etc/inc/smtp.inc:346
+msgid "Authentication error:"
+msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼ï¼š"
+
+#: etc/inc/smtp.inc:331 etc/inc/smtp.inc:331
+msgid "Could not send the authentication step message"
+msgstr "èªè¨¼ã‚¹ãƒ†ãƒƒãƒ—メッセージをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:351 etc/inc/smtp.inc:351
+msgid "Could not process the SASL authentication step:"
+msgstr "SASLèªè¨¼ã‚¹ãƒ†ãƒƒãƒ—を処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/smtp.inc:365 etc/inc/smtp.inc:365
+msgid "connection is already established"
+msgstr "接続ãŒã™ã§ã«ç¢ºç«‹ã•ã‚Œã¦ã„ã‚‹"
+
+#: etc/inc/smtp.inc:403 etc/inc/smtp.inc:403
+msgid "it was not specified the POP3 authentication user"
+msgstr "ãã‚Œã¯ã€POP3èªè¨¼ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŒ‡å®šã•ã‚Œã¦ã„ãªã‹ã£ãŸ"
+
+#: etc/inc/smtp.inc:409 etc/inc/smtp.inc:409
+msgid "it was not specified the POP3 authentication password"
+msgstr "ãã‚Œã¯ã€POP3èªè¨¼ãƒ‘スワードを指定ã—ãªã‹ã£ãŸ"
+
+#: etc/inc/smtp.inc:413 etc/inc/smtp.inc:413
+#, php-format
+msgid "Resolving POP3 authentication host "%s"..."
+msgstr "POP3èªè¨¼ãƒ›ã‚¹ãƒˆã€ %s ã€ã‚’解決ã™ã‚‹..."
+
+#: etc/inc/smtp.inc:420 etc/inc/smtp.inc:420
+msgid "POP3 authentication server greeting was not found"
+msgstr "POP3èªè¨¼ã‚µãƒ¼ãƒã®ã‚°ãƒªãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:428 etc/inc/smtp.inc:428
+msgid "POP3 authentication user was not accepted:"
+msgstr "POP3èªè¨¼ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå—ã‘入れられã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/smtp.inc:436 etc/inc/smtp.inc:436
+msgid "POP3 authentication password was not accepted:"
+msgstr "POP3èªè¨¼ã®ãƒ‘スワードãŒå—ã‘入れられã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/smtp.inc:445 etc/inc/smtp.inc:445
+msgid "could not determine the SMTP to connect"
+msgstr "接続ã™ã‚‹ãŸã‚ã«SMTPを決定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/smtp.inc:451 etc/inc/smtp.inc:451
+#, php-format
+msgid "Resolving SMTP server domain "%s"..."
+msgstr "解決SMTPサーãƒãƒ‰ãƒ¡ã‚¤ãƒ³ã€ %s "..."
+
+#: etc/inc/smtp.inc:463 etc/inc/smtp.inc:463
+#, php-format
+msgid "Connected to SMTP server "%s"."
+msgstr "SMTPサーãƒã€ %s ã€ã«æŽ¥ç¶šã•ã‚Œã¦ã„る。"
+
+#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519 etc/inc/smtp.inc:519
+msgid "server does not require authentication"
+msgstr "サーãƒãŒèªè¨¼ã‚’å¿…è¦ã¨ã—ãªã„"
+
+#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583 etc/inc/smtp.inc:583
+msgid ""
+"it is not supported any of the authentication mechanisms required by the "
+"server"
+msgstr "サーãƒãƒ¼ã€ã¨ã¯ã€ã«ã‚ˆã£ã¦å¿…è¦ã¨ã•ã‚Œã‚‹èªè¨¼ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã®ã„ãšã‚Œã‚‚サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“ ""
+
+#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615 etc/inc/smtp.inc:615
+msgid ""
+"direct delivery connection is already established and sender is already set"
+msgstr "「直接å—ã‘渡ã—接続ãŒã™ã§ã«ç¢ºç«‹ã•ã‚Œã€é€ä¿¡è€…ãŒã™ã§ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™"
+
+#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623 etc/inc/smtp.inc:623
+msgid "connection is not in the initial state"
+msgstr "接続ã¯ã€åˆæœŸçŠ¶æ…‹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645 etc/inc/smtp.inc:645
+msgid "it was not specified a valid direct recipient"
+msgstr "ãã‚Œã¯ã€æœ‰åŠ¹ãªç›´æŽ¥å—信者ã«æŒ‡å®šã•ã‚Œã¦ã„ãªã‹ã£ãŸ"
+
+#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664 etc/inc/smtp.inc:664
+msgid ""
+"it is not possible to deliver directly to recipients of different domains"
+msgstr "「ãã‚Œã¯ç•°ãªã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³ã®å—信者ã«ç›´æŽ¥é…ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669 etc/inc/smtp.inc:669
+msgid "connection is already established and the recipient is already set"
+msgstr "接続ãŒã™ã§ã«ç¢ºç«‹ã•ã‚Œã€å—信者ãŒã™ã§ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™"
+
+#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681 etc/inc/smtp.inc:681
+msgid "connection is not in the recipient setting state"
+msgstr "接続ã¯ã€å—信者ã®è¨­å®šçŠ¶æ…‹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710 etc/inc/smtp.inc:710
+msgid "connection is not in the start sending data state"
+msgstr "接続ãŒé–‹å§‹é€ä¿¡ãƒ‡ãƒ¼ã‚¿çŠ¶æ…‹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740
+#: etc/inc/smtp.inc:751 etc/inc/smtp.inc:740 etc/inc/smtp.inc:751
+msgid "connection is not in the sending data state"
+msgstr "接続ã¯ã€ãƒ‡ãƒ¼ã‚¿é€ä¿¡çŠ¶æ…‹ã§ã¯ãªã„"
+
+#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787 etc/inc/smtp.inc:787
+msgid "it was not previously established a SMTP connection"
+msgstr "ãã‚Œã¯ã€ä»¥å‰ã®SMTP接続を確立ã—ã¦ã„ãªã‹ã£ãŸ"
+
+#: etc/inc/upgrade_config.inc:113 etc/inc/upgrade_config.inc:113
+#, php-format
+msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)."
+msgstr "%sWarning :削除フィルタルール(インタフェース「 %s ã€ã¯ã‚‚ã¯ã‚„存在ã—ãªã„) 。"
+
+#: etc/inc/upgrade_config.inc:125 etc/inc/upgrade_config.inc:125
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (source network '%s' does not exist anymore)."
+msgstr "「 %sWarning :削除フィルタルール(ソース·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ %s ã€ã¯ã‚‚ã¯ã‚„存在ã—ãªã„) 。"
+
+#: etc/inc/upgrade_config.inc:138 etc/inc/upgrade_config.inc:138
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (destination network '%s' does not exist "
+"anymore)."
+msgstr "「 : (もã†%sWarning削除フィルタルール宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯' %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。"
+
+#: etc/inc/upgrade_config.inc:158 etc/inc/upgrade_config.inc:158
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (interface '%s' does not exist "
+"anymore)."
+msgstr "「 : (もã†%sWarning削除トラフィックシェールールインターフェース「 %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。"
+
+#: etc/inc/upgrade_config.inc:170 etc/inc/upgrade_config.inc:170
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (source network '%s' does not exist "
+"anymore)."
+msgstr "「 : (もã†%sWarning削除トラフィックシェールールソース·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ %s'ã¯å­˜åœ¨ã—ã¾ã›ã‚“〠) 。"
+
+#: etc/inc/upgrade_config.inc:183 etc/inc/upgrade_config.inc:183
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (destination network '%s' does not "
+"exist anymore)."
+msgstr "「 %sWarning :削除トラフィックシェールール(' %s'宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒã‚ã‚Šã¾ã›ã‚“ã€ã‚‚ã¯ã‚„存在) 。"
+
+#: etc/inc/upgrade_config.inc:333 etc/inc/upgrade_config.inc:333
+#, php-format
+msgid "CARP vhid %s"
+msgstr "CARPã®VHIDã®%s"
+
+#: etc/inc/upgrade_config.inc:510 etc/inc/upgrade_config.inc:510
+msgid "Permit IPsec traffic."
+msgstr "IPsecトラフィックを許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/upgrade_config.inc:585 etc/inc/upgrade_config.inc:585
+msgid "System Administrators"
+msgstr "システム管ç†è€…"
+
+#: etc/inc/upgrade_config.inc:604 etc/inc/upgrade_config.inc:604
+msgid ""
+"Indicates whether this user will lock access to the webConfigurator for "
+"other users."
+msgstr "ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŽ¢ã—webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ロックã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。"
+
+#: etc/inc/upgrade_config.inc:607 etc/inc/upgrade_config.inc:607
+msgid ""
+"Indicates whether this user will lock individual HTML pages after having "
+"accessed a particular page (the lock will be freed if the user leaves or "
+"saves the page form)."
+msgstr "特定ã®ãƒšãƒ¼ã‚¸ã‚’(ユーザーãŒãƒ­ã‚°ã‚ªãƒ•ã—ãŸã¨ãã€ã¾ãŸã¯ã€Œãƒšãƒ¼ã‚¸ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’ä¿å­˜ã™ã‚‹å ´åˆã¯ã€ãƒ­ãƒƒã‚¯ãŒè§£æ”¾ã•ã‚Œã¾ã™ï¼‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã—ãŸå¾Œã€å€‹ã€…ã®HTMLページをロックã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。"
+
+#: etc/inc/upgrade_config.inc:610 etc/inc/upgrade_config.inc:610
+msgid "Indicates whether this user is able to login for example via SSH."
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€SSH経由ã§ä¾‹ãˆã°ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚"
+
+#: etc/inc/upgrade_config.inc:613 etc/inc/upgrade_config.inc:613
+#, php-format
+msgid ""
+"Indicates whether this user is allowed to copy files onto the %s appliance "
+"via SCP/SFTP. If you are going to use this privilege, you must install "
+"scponly on the appliance (Hint: pkg_add -r scponly)."
+msgstr "SCP / SFTP経由ã§ã€Œã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ%sアプライアンスã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€ 。ã“ã®æ¨©é™ã‚’使用ã—よã†ã¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¢ãƒ—ライアンス( : scponlyã®pkg_addã«-Rヒント)ã«scponlyã®ã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/upgrade_config.inc:616 etc/inc/upgrade_config.inc:616
+msgid ""
+"This user is associated with the UNIX root user (you should associate this "
+"privilege only with one single user)."
+msgstr "「 (一ã¤ã ã‘å˜ä¸€ã®ãƒ¦ãƒ¼ã‚¶ã¨æ¨©é™ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€UNIXã®rootユーザーã“れを関連付ã‘ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼‰ã¨é–¢é€£ã—ã¦ã„る〠。"
+
+#: etc/inc/upgrade_config.inc:633 etc/inc/upgrade_config.inc:633
+msgid "Drop packets to closed TCP ports without returning a RST"
+msgstr "RSTã‚’è¿”ã•ãšã«ã€é–‰ã˜ãŸTCPãƒãƒ¼ãƒˆã«ãƒ‘ケットをドロップã™ã‚‹"
+
+#: etc/inc/upgrade_config.inc:637 etc/inc/upgrade_config.inc:637
+msgid "Do not send ICMP port unreachable messages for closed UDP ports"
+msgstr "é–‰ã˜ã‚‰ã‚ŒãŸUDPãƒãƒ¼ãƒˆã®ãŸã‚ã®ICMPãƒãƒ¼ãƒˆåˆ°é”ä¸èƒ½ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ãªã„ã§ãã ã•ã„"
+
+#: etc/inc/upgrade_config.inc:641 etc/inc/upgrade_config.inc:641
+msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)"
+msgstr "IPパケット内ã®IDフィールドをランダム化ã—ã¾ã™ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯0ã§ã‚る:連続ã—ãŸIPã®ID )"
+
+#: etc/inc/upgrade_config.inc:645 etc/inc/upgrade_config.inc:645
+msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"
+msgstr "ドロップSYN- FINパケット(休憩ã®RFC1379ãŒã€èª°ã‚‚ã¨ã«ã‹ããれを使用ã—ã¾ã›ã‚“)"
+
+#: etc/inc/upgrade_config.inc:649 etc/inc/upgrade_config.inc:649
+msgid "Sending of IPv4 ICMP redirects"
+msgstr "IPv4ã®ICMPリダイレクトをé€ä¿¡"
+
+#: etc/inc/upgrade_config.inc:653 etc/inc/upgrade_config.inc:653
+msgid "Sending of IPv6 ICMP redirects"
+msgstr "IPv6ã®ICMPリダイレクトをé€ä¿¡"
+
+#: etc/inc/upgrade_config.inc:657 etc/inc/upgrade_config.inc:657
+msgid "Generate SYN cookies for outbound SYN-ACK packets"
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰SYN- ACKパケットã®ãŸã‚ã«SYNクッキーを生æˆ"
+
+#: etc/inc/upgrade_config.inc:661 etc/inc/upgrade_config.inc:661
+msgid "Maximum incoming TCP datagram size"
+msgstr "最大ç€ä¿¡TCPデータグラムサイズ"
+
+#: etc/inc/upgrade_config.inc:665 etc/inc/upgrade_config.inc:665
+msgid "Maximum outgoing TCP datagram size"
+msgstr "最大発信TCPデータグラムサイズ"
+
+#: etc/inc/upgrade_config.inc:669 etc/inc/upgrade_config.inc:669
+msgid ""
+"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-"
+"January/002534.html)"
+msgstr "「 ( January/002534.htmlã‚’æ—©é€ã‚Šã¯http://lists.freebsd.org/pipermail/freebsd-net/2004-ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 ")"
+
+#: etc/inc/upgrade_config.inc:673 etc/inc/upgrade_config.inc:673
+msgid "Do not delay ACK to try and piggyback it onto a data packet"
+msgstr "データパケットã«ãれを試ã—ã¦ã¿ã¦ã€ãƒ”ギーãƒãƒƒã‚¯ã«ACKã‚’é…らã›ãªã„ã§ãã ã•ã„"
+
+#: etc/inc/upgrade_config.inc:677 etc/inc/upgrade_config.inc:677
+msgid "Maximum outgoing UDP datagram size"
+msgstr "最大é€ä¿¡UDPデータグラムサイズ"
+
+#: etc/inc/upgrade_config.inc:681 etc/inc/upgrade_config.inc:681
+msgid ""
+"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"
+msgstr "「 pfilã‚’ã«æ¸¡ã•ã‚Œã¾ã›ã‚“éžIPパケットã®å‡¦ç†ã¯ã€ ( if_bridge (4)をå‚照)"
+
+#: etc/inc/upgrade_config.inc:685 etc/inc/upgrade_config.inc:685
+msgid "Allow unprivileged access to tap(4) device nodes"
+msgstr "( 4 )デãƒã‚¤ã‚¹ãƒŽãƒ¼ãƒ‰ã‚’タップã—ã¦ã€æ¨©é™ã®ãªã„アクセスをå¯èƒ½ã«ã™ã‚‹"
+
+#: etc/inc/upgrade_config.inc:689 etc/inc/upgrade_config.inc:689
+msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+msgstr "ランダム化ã€PIDã®ï¼ˆSRC / SYS /カーン/ kern_fork.cå‚照: sysctl_kern_randompid.() )"
+
+#: etc/inc/upgrade_config.inc:693 etc/inc/upgrade_config.inc:693
+msgid ""
+"The system will attempt to calculate the bandwidth delay product for each "
+"connection and limit the amount of data queued to the network to just the "
+"amount required to maintain optimum throughput. "
+msgstr "接続ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚­ãƒ¥ãƒ¼ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã®é‡ã‚’制é™ã™ã‚‹ã€Œã‚·ã‚¹ãƒ†ãƒ æ¯Žã«å¸¯åŸŸå¹…é…延ç©ã‚’計算ã—よã†ã¨ã™ã‚‹ã€Œæœ€é©ãªã‚¹ãƒ«ãƒ¼ãƒ—ットを維æŒã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚ãšã‹ãªã€é‡ã§ã‚る。"
+
+#: etc/inc/upgrade_config.inc:697 etc/inc/upgrade_config.inc:697
+msgid "Set ICMP Limits"
+msgstr "ICMPã®åˆ¶é™ã‚’設定"
+
+#: etc/inc/upgrade_config.inc:701 etc/inc/upgrade_config.inc:701
+msgid "TCP Offload engine"
+msgstr "TCPオフロードエンジン"
+
+#: etc/inc/upgrade_config.inc:742 etc/inc/upgrade_config.inc:742
+#, php-format
+msgid "Interface %s Static Gateway"
+msgstr "インターフェイス%sé™çš„ゲートウェイ"
+
+#: etc/inc/upgrade_config.inc:745 etc/inc/upgrade_config.inc:745
+#, php-format
+msgid "Interface %s Dynamic Gateway"
+msgstr "インターフェイス%sダイナミックゲートウェイ"
+
+#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811
+#: etc/inc/upgrade_config.inc:811
+#, php-format
+msgid "Upgraded static route for %s"
+msgstr "%sãŸã‚ã«ã‚¢ãƒƒãƒ—グレードスタティックルート"
+
+#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908
+#: etc/inc/upgrade_config.inc:908
+#, php-format
+msgid "Sitedown pool for VS: %s"
+msgstr "VS用Sitedownプール: %s"
+
+#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062
+#: etc/inc/upgrade_config.inc:1063 etc/inc/upgrade_config.inc:1063
+#, php-format
+msgid "phase2 for %s"
+msgstr "%sãŸã‚ã®ãƒ•ã‚§ãƒ¼ã‚º2"
+
+#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289
+#: etc/inc/upgrade_config.inc:1290 etc/inc/upgrade_config.inc:1290
+#, php-format
+msgid "Upgraded Dyndns %s"
+msgstr "アップグレードã•ã‚ŒãŸãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS %s"
+
+#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341
+#: etc/inc/upgrade_config.inc:1342 etc/inc/upgrade_config.inc:1342
+msgid "All Users"
+msgstr "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+
+#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473
+#: etc/inc/upgrade_config.inc:1474 etc/inc/upgrade_config.inc:1474
+#, php-format
+msgid "Converted bridged %s"
+msgstr "変æ›ã•ã‚ŒãŸæ©‹ã‹ã‘%s"
+
+#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845
+#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848
+#: etc/inc/upgrade_config.inc:1848
+msgid "Auto added OpenVPN rule from config upgrade."
+msgstr "自動設定ã®ã‚¢ãƒƒãƒ—グレードã‹ã‚‰OpenVPNã®ãƒ«ãƒ¼ãƒ«ã‚’追加ã—ã¾ã—ãŸã€‚"
+
+#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 etc/inc/voucher.inc:382
+#, php-format
+msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes"
+msgstr "ã¯%1$s ( %2$s/%3$s )アクティブãŠã‚ˆã³ï¼… 4 ã®$ d分ã®ãŸã‚ã«è‰¯ã„"
+
+#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 etc/inc/voucher.inc:419
+msgid "Access denied!"
+msgstr "アクセスã¯ã€ã‚’å¦å®šï¼"
+
+#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 etc/inc/voucher.inc:421
+#, php-format
+msgid "Access granted for %d Minutes in total."
+msgstr "アクセスã¯å…¨éƒ¨ã§ï¼… d分ã«ä»˜ä¸Žã•ã‚ŒãŸã€‚"
+
+#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 etc/inc/voucher.inc:484
+msgid "Enabling voucher support... "
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹..."
+
+#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 etc/inc/voucher.inc:523
+#, php-format
+msgid "Error: cannot write voucher.cfg"
+msgstr "エラー: voucher.cfgを書ã込むã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 etc/inc/voucher.inc:574
+#, php-format
+msgid "cant write %1$s/voucher_%s_used_%2$s.db"
+msgstr "カント書ãè¾¼ã¿%1$s/voucher_%s_used_%2$s.db"
+
+#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 etc/inc/voucher.inc:653
+#, php-format
+msgid "cant read %1$s/voucher_%s_used_%2$s.db"
+msgstr "カント%1$s/voucher_%s_used_%2$s.dbを読む"
+
+#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655
+#: etc/inc/voucher.inc:670
+#, php-format
+msgid "Voucher: %s"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ï¼š %s"
+
+#: etc/inc/xmlparse_attr.inc:197 etc/inc/xmlparse_attr.inc:197
+#, php-format
+msgid "XML error: %1$s at line %2$d"
+msgstr "XMLエラー:行%ã§ã¯%1$s 2 $ dã®"
+
+#: etc/inc/xmlreader.inc:129 etc/inc/xmlreader.inc:129
+#, php-format
+msgid "Error returned while trying to parse %s"
+msgstr "%sを解æžã—よã†ã¨ã—ã¦ã‚¨ãƒ©ãƒ¼ãŒè¿”ã•"
+
+#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236 etc/inc/zeromq.inc:225
+#: etc/inc/zeromq.inc:236
+#, php-format
+msgid "Merged in config (%s sections) from ZeroMQ client."
+msgstr "ZeroMQクライアントã‹ã‚‰ï¼ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³%s )設定ã«åˆä½µã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159
+#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112
+#: usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/services_captiveportal.php:63
+#: usr/local/www/services_captiveportal_filemanager.php:75
+#: usr/local/www/services_captiveportal_ip.php:64
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_mac.php:63
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_dhcp.php:421
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/services_dhcp_relay.php:100
+#: usr/local/www/services_dnsmasq.php:119
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/services_captiveportal_hostname.php:66
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343
+#: usr/local/www/status_services.php:226
+#: usr/local/www/services_dyndns_edit.php:133
+#: usr/local/www/services_igmpproxy.php:80
+#: usr/local/www/services_rfc2136.php:55
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189
+#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/services_unbound.php:102
+#: usr/local/www/services_unbound_advanced.php:88
+#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/services_dhcpv6.php:386
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/status_services.php:222
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/services_dhcpv6.php:367
+#: usr/local/www/system_authservers.php:187
+#: usr/local/www/status_services.php:220
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dyndns_edit.php:160
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526
+#: usr/local/www/services_dhcpv6.php:362
+#: usr/local/www/system_authservers.php:188 usr/local/www/fbegin.inc:188
+#: usr/local/www/fbegin.inc:299 usr/local/www/services_dnsmasq.php:123
+#: usr/local/www/services_dyndns.php:64 usr/local/www/services_snmp.php:165
+#: usr/local/www/status_services.php:63
+#: usr/local/www/services_router_advertisements.php:189
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dnsmasq.php:125
+#: usr/local/www/services_dyndns.php:60 usr/local/www/services_dnsmasq.php:146
+#: usr/local/www/services_rfc2136.php:55 usr/local/www/status_services.php:63
+#: usr/local/www/services_router_advertisements.php:189
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_wol.php:115
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/services_wol_edit.php:112
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/services_ntpd.php:76
+#: usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:546
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/services_dhcpv6.php:362
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/system_authservers.php:188
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_igmpproxy.php:80
+#: usr/local/www/services_dnsmasq_edit.php:166 usr/local/www/fbegin.inc:188
+#: usr/local/www/fbegin.inc:299 usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/services_dnsmasq.php:146
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/services_dyndns.php:60
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dhcp_relay.php:100
+#: usr/local/www/services_snmp.php:165
+msgid "Services"
+msgstr "サービス"
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_openvpn.php:76
+#: usr/local/www/diag_logs_settings.php:217
+#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165
+#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56
+#: usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147
+#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/diag_logs_resolver.php:85
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156
+#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110
+#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_openvpn.php:77
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_filter.php:98
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:181 usr/local/www/diag_logs_filter.php:128
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/diag_logs_auth.php:73
+#: usr/local/www/diag_logs_settings.php:229
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/diag_logs_filter.php:128
+#: usr/local/www/diag_logs_routing.php:73 usr/local/www/diag_logs_dhcp.php:78
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/diag_logs.php:84
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/status_lb_pool.php:62
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:181
+#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_ipsec.php:110
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/status_lb_vs.php:56 usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/diag_logs_resolver.php:86
+#: usr/local/www/diag_logs_filter_summary.php:192
+msgid "Load Balancer"
+msgstr "ãƒãƒ©ãƒ³ã‚µã‚’ロードã™ã‚‹"
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_virtual_server.php:116
+#: usr/local/www/load_balancer_relay_action.php:127
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/load_balancer_relay_protocol.php:123
+#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_setting.php:119
+#: usr/local/www/load_balancer_virtual_server.php:114
+#: usr/local/www/load_balancer_monitor.php:108
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_pool.php:117
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/status_lb_pool.php:121
+#: usr/local/www/load_balancer_setting.php:119
+#: usr/local/www/load_balancer_pool.php:117
+#: usr/local/www/load_balancer_monitor.php:108
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_virtual_server.php:114
+#: usr/local/www/status_lb_vs.php:68
+msgid "Virtual Servers"
+msgstr "仮想サーãƒãƒ¼"
+
+#: usr/local/www/load_balancer_virtual_server.php:108
+#: usr/local/www/load_balancer_virtual_server.php:106
+#: usr/local/www/load_balancer_virtual_server.php:106
+msgid "The virtual server configuration has been changed"
+msgstr "仮想サーãƒãƒ¼ã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/load_balancer_virtual_server.php:108
+#: usr/local/www/firewall_shaper_layer7.php:401
+#: usr/local/www/firewall_shaper_vinterface.php:366
+#: usr/local/www/firewall_shaper_wizards.php:96
+#: usr/local/www/firewall_aliases.php:160
+#: usr/local/www/firewall_nat_1to1.php:87
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_shaper.php:403
+#: usr/local/www/firewall_shaper_queues.php:187
+#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222
+#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86
+#: usr/local/www/vpn_ipsec_mobile.php:303
+#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96
+#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536
+#: usr/local/www/services_dnsmasq.php:147
+#: usr/local/www/load_balancer_relay_protocol.php:114
+#: usr/local/www/services_igmpproxy.php:90
+#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87
+#: usr/local/www/services_dhcpv6.php:461
+#: usr/local/www/services_captiveportal_zones.php:47
+#: usr/local/www/firewall_nat_out.php:304
+#: usr/local/www/load_balancer_setting.php:111
+#: usr/local/www/services_unbound.php:129
+#: usr/local/www/services_unbound_advanced.php:116
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163
+#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488
+#: usr/local/www/services_dnsmasq.php:148
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97
+#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330
+#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404
+#: usr/local/www/vpn_ipsec_keys.php:85
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/load_balancer_virtual_server.php:106
+#: usr/local/www/load_balancer_monitor.php:100
+#: usr/local/www/load_balancer_relay_protocol.php:112
+#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167
+#: usr/local/www/interfaces.php:1314
+#: usr/local/www/services_captiveportal_zones.php:48
+#: usr/local/www/firewall_virtual_ip.php:167
+#: usr/local/www/services_dhcpv6.php:468 usr/local/www/vpn_pppoe.php:98
+#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181
+#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463
+#: usr/local/www/services_dnsmasq.php:152 usr/local/www/interfaces.php:1327
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_queues.php:188
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/services_dnsmasq.php:154 usr/local/www/interfaces.php:1369
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/services_dnsmasq.php:175 usr/local/www/interfaces.php:1364
+#: usr/local/www/firewall_shaper_layer7.php:401 usr/local/www/vpn_pppoe.php:98
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_shaper_queues.php:188
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/load_balancer_relay_protocol.php:112
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat.php:183
+#: usr/local/www/load_balancer_setting.php:110
+#: usr/local/www/services_dhcpv6.php:463
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_npt.php:87
+#: usr/local/www/firewall_nat_1to1.php:87
+#: usr/local/www/services_captiveportal_zones.php:48
+#: usr/local/www/services_igmpproxy.php:90
+#: usr/local/www/load_balancer_monitor.php:100
+#: usr/local/www/services_dnsmasq.php:175
+#: usr/local/www/vpn_ipsec_mobile.php:330
+#: usr/local/www/system_gateways.php:134
+#: usr/local/www/load_balancer_virtual_server.php:106
+#: usr/local/www/vpn_ipsec_keys.php:85 usr/local/www/interfaces.php:1364
+msgid "You must apply the changes in order for them to take effect."
+msgstr "ã‚ãªãŸã¯ãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server.php:115
+#: usr/local/www/load_balancer_relay_action.php:126
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_relay_protocol.php:122
+#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67
+#: usr/local/www/load_balancer_setting.php:119
+#: usr/local/www/load_balancer_setting.php:118
+#: usr/local/www/load_balancer_virtual_server.php:113
+#: usr/local/www/load_balancer_monitor.php:107
+#: usr/local/www/load_balancer_relay_protocol.php:120
+#: usr/local/www/load_balancer_relay_action.php:124
+#: usr/local/www/load_balancer_pool.php:116
+#: usr/local/www/load_balancer_relay_protocol.php:120
+#: usr/local/www/load_balancer_relay_action.php:124
+#: usr/local/www/status_lb_pool.php:120
+#: usr/local/www/load_balancer_setting.php:118
+#: usr/local/www/load_balancer_pool.php:116
+#: usr/local/www/load_balancer_monitor.php:107
+#: usr/local/www/load_balancer_virtual_server.php:113
+#: usr/local/www/status_lb_vs.php:67
+msgid "Pools"
+msgstr "プール"
+
+#: usr/local/www/load_balancer_virtual_server.php:117
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_pool.php:120
+#: usr/local/www/load_balancer_monitor.php:111
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_virtual_server.php:115
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_relay_protocol.php:119
+#: usr/local/www/load_balancer_relay_action.php:123
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_relay_protocol.php:119
+#: usr/local/www/load_balancer_relay_action.php:123
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_virtual_server.php:115
+msgid "Monitors"
+msgstr "モニター"
+
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/firewall_shaper_layer7.php:466
+#: usr/local/www/interfaces_bridge_edit.php:291
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:185
+#: usr/local/www/firewall_nat_edit.php:518
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:808
+#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:424
+#: usr/local/www/status_upnp.php:86
+#: usr/local/www/services_rfc2136_edit.php:186
+#: usr/local/www/system_advanced_admin.php:300
+#: usr/local/www/vpn_ipsec_phase2.php:516
+#: usr/local/www/vpn_openvpn_client.php:421
+#: usr/local/www/vpn_openvpn_client.php:861
+#: usr/local/www/vpn_openvpn_server.php:656
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/load_balancer_relay_action_edit.php:423
+#: usr/local/www/firewall_rules_edit.php:843
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/vpn_openvpn_server.php:729
+#: usr/local/www/interfaces_bridge_edit.php:300
+#: usr/local/www/diag_packet_capture.php:160
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/firewall_nat_edit.php:525
+#: usr/local/www/vpn_openvpn_client.php:426
+#: usr/local/www/vpn_openvpn_client.php:866
+#: usr/local/www/load_balancer_relay_action_edit.php:421
+#: usr/local/www/diag_ipsec_sad.php:90
+#: usr/local/www/load_balancer_virtual_server.php:128
+#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87
+#: usr/local/www/interfaces_bridge_edit.php:301
+#: usr/local/www/diag_packet_capture.php:207
+#: usr/local/www/vpn_ipsec_phase2.php:644
+#: usr/local/www/firewall_nat_edit.php:524
+#: usr/local/www/vpn_openvpn_client.php:434
+#: usr/local/www/vpn_openvpn_client.php:919
+#: usr/local/www/diag_ipsec_spd.php:90
+#: usr/local/www/vpn_openvpn_client.php:452
+#: usr/local/www/vpn_openvpn_client.php:938
+#: usr/local/www/firewall_rules_edit.php:846
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:519
+#: usr/local/www/interfaces_bridge_edit.php:302
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:473
+#: usr/local/www/vpn_openvpn_server.php:773
+#: usr/local/www/vpn_ipsec_phase2.php:665
+#: usr/local/www/firewall_rules_edit.php:858
+#: usr/local/www/diag_logs_filter.php:171
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:857
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/interfaces_bridge_edit.php:304
+#: usr/local/www/firewall_shaper_layer7.php:466
+#: usr/local/www/vpn_openvpn_client.php:452
+#: usr/local/www/vpn_openvpn_client.php:938
+#: usr/local/www/firewall_rules_edit.php:857
+#: usr/local/www/diag_logs_filter.php:171
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/diag_ipsec_spd.php:90
+#: usr/local/www/system_advanced_admin.php:300
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:421
+#: usr/local/www/interfaces_bridge_edit.php:304
+#: usr/local/www/services_rfc2136_edit.php:186
+#: usr/local/www/load_balancer_virtual_server.php:128
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/diag_ipsec_sad.php:90
+#: usr/local/www/vpn_openvpn_server.php:773
+#: usr/local/www/vpn_ipsec_phase2.php:665 usr/local/www/status_upnp.php:87
+msgid "Protocol"
+msgstr "プロトコル"
+
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/diag_tables.php:133
+#: usr/local/www/interfaces_ppps_edit.php:660
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:195
+#: usr/local/www/system_advanced_notifications.php:185
+#: usr/local/www/diag_tables.php:132
+#: usr/local/www/system_advanced_notifications.php:194
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/load_balancer_virtual_server_edit.php:169
+#: usr/local/www/interfaces_ppps_edit.php:661
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/load_balancer_virtual_server_edit.php:167
+#: usr/local/www/interfaces_ppps_edit.php:667 usr/local/www/diag_dns.php:153
+#: usr/local/www/interfaces_ppps_edit.php:665
+#: usr/local/www/diag_tables.php:133
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:167
+#: usr/local/www/interfaces_ppps_edit.php:665 usr/local/www/diag_dns.php:153
+#: usr/local/www/system_advanced_notifications.php:194
+#: usr/local/www/load_balancer_virtual_server.php:129
+msgid "IP Address"
+msgstr "IPアドレス"
+
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/diag_packet_capture.php:165
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:203
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:202
+#: usr/local/www/services_captiveportal.php:607
+#: usr/local/www/services_captiveportal.php:628
+#: usr/local/www/services_captiveportal.php:647
+#: usr/local/www/services_captiveportal.php:666
+#: usr/local/www/status_upnp.php:85
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/services_captiveportal.php:643
+#: usr/local/www/services_captiveportal.php:664
+#: usr/local/www/services_captiveportal.php:686
+#: usr/local/www/services_captiveportal.php:705
+#: usr/local/www/load_balancer_virtual_server_edit.php:183
+#: usr/local/www/diag_packet_capture.php:185
+#: usr/local/www/load_balancer_pool_edit.php:211
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/services_captiveportal.php:641
+#: usr/local/www/services_captiveportal.php:662
+#: usr/local/www/services_captiveportal.php:684
+#: usr/local/www/services_captiveportal.php:703
+#: usr/local/www/status_upnp.php:86
+#: usr/local/www/load_balancer_virtual_server_edit.php:181
+#: usr/local/www/diag_packet_capture.php:232
+#: usr/local/www/load_balancer_pool_edit.php:209
+#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60
+#: usr/local/www/diag_testport.php:123
+#: usr/local/www/services_captiveportal.php:642
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:685
+#: usr/local/www/services_captiveportal.php:704
+#: usr/local/www/diag_packet_capture.php:248
+#: usr/local/www/firewall_rules.php:360
+#: usr/local/www/services_captiveportal.php:658
+#: usr/local/www/services_captiveportal.php:679
+#: usr/local/www/services_captiveportal.php:701
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/firewall_aliases_edit.php:486
+#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:123
+#: usr/local/www/load_balancer_virtual_server_edit.php:181
+#: usr/local/www/diag_packet_capture.php:248
+#: usr/local/www/load_balancer_pool.php:133
+#: usr/local/www/firewall_rules.php:360 usr/local/www/firewall_rules.php:362
+#: usr/local/www/services_captiveportal.php:658
+#: usr/local/www/services_captiveportal.php:679
+#: usr/local/www/services_captiveportal.php:701
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/firewall_aliases_edit.php:472
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:209
+#: usr/local/www/status_upnp.php:86
+msgid "Port"
+msgstr "ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/status_lb_pool.php:62
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/status_lb_pool.php:62 usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/load_balancer_pool_edit.php:159
+msgid "Pool"
+msgstr "プール"
+
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/load_balancer_virtual_server_edit.php:228
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/load_balancer_virtual_server_edit.php:217
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:215
+#: usr/local/www/load_balancer_virtual_server_edit.php:215
+#: usr/local/www/load_balancer_virtual_server.php:132
+msgid "Fall Back Pool"
+msgstr "プールã®ãƒ•ã‚©ãƒ¼ãƒ«ãƒãƒƒã‚¯"
+
+#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58
+#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49
+#: usr/local/www/diag_packet_capture.php:41
+#: usr/local/www/crash_reporter.php:82
+#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499
+#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59
+#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34
+#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39
+#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64
+#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45
+#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367
+#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385
+#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48
+#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75
+#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174
+#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44
+#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43
+#: usr/local/www/diag_states_summary.php:176
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_defaults.php:52
+#: usr/local/www/diag_backup.php:581 usr/local/www/edit.php:41
+#: usr/local/www/fbegin.inc:323 usr/local/www/diag_dump_states.php:67
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_ping.php:44
+#: usr/local/www/diag_ndp.php:103 usr/local/www/reboot.php:48
+#: usr/local/www/diag_arp.php:261 usr/local/www/diag_authentication.php:69
+#: usr/local/www/diag_tables.php:44 usr/local/www/diag_testport.php:49
+#: usr/local/www/diag_dump_states.php:67
+#: usr/local/www/diag_states_summary.php:176
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/diag_defaults.php:52
+#: usr/local/www/diag_dump_states_sources.php:65
+#: usr/local/www/diag_packet_capture.php:43 usr/local/www/diag_routes.php:45
+#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_smart.php:14
+#: usr/local/www/exec.php:93 usr/local/www/halt.php:54
+#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_backup.php:581
+#: usr/local/www/diag_ping.php:44 usr/local/www/diag_resetstate.php:64
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+#: usr/local/www/diag_dns.php:34 usr/local/www/edit.php:41
+#: usr/local/www/fbegin.inc:323 usr/local/www/diag_confbak.php:98
+#: usr/local/www/diag_sockets.php:44 usr/local/www/diag_nanobsd.php:49
+#: usr/local/www/crash_reporter.php:82
+msgid "Diagnostics"
+msgstr "診断法"
+
+#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199
+#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225
+#: usr/local/www/fbegin.inc:216 usr/local/www/diag_tables.php:44
+#: usr/local/www/fbegin.inc:216
+msgid "Tables"
+msgstr "テーブル"
+
+#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87
+#: usr/local/www/diag_tables.php:87
+msgid "The bogons database has been updated."
+msgstr "bogonsデータベースãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117
+#: usr/local/www/diag_tables.php:118
+msgid "Table:"
+msgstr "表:"
+
+#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155
+msgid "No entries exist in this table."
+msgstr "エントリã¯ã“ã®è¡¨ã«å­˜åœ¨ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163
+#: usr/local/www/exec.php:273 usr/local/www/exec.php:283
+#: usr/local/www/system_firmware_restorefullbackup.php:166
+#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250
+#: usr/local/www/exec.php:275 usr/local/www/exec.php:285
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+#: usr/local/www/exec.php:275 usr/local/www/exec.php:285
+#: usr/local/www/diag_backup.php:250
+#: usr/local/www/system_firmware_restorefullbackup.php:166
+msgid "Download"
+msgstr "ダウンロード"
+
+#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+msgid " the latest bogon data."
+msgstr "最新ã®bogonデータ。"
+
+#: usr/local/www/diag_tables.php:162
+#: usr/local/www/firewall_shaper_layer7.php:576
+#: usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/system_firmware_restorefullbackup.php:163
+#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853
+#: usr/local/www/services_dhcpv6.php:784 usr/local/www/diag_tables.php:165
+#: usr/local/www/services_dhcpv6.php:801
+#: usr/local/www/firewall_shaper_layer7.php:571
+#: usr/local/www/firewall_shaper_layer7.php:571
+#: usr/local/www/diag_tables.php:165 usr/local/www/services_dhcpv6.php:801
+#: usr/local/www/system_firmware_restorefullbackup.php:163
+msgid "Delete"
+msgstr "削除"
+
+#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161
+#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:165
+msgid "all"
+msgstr "ã™ã¹ã¦"
+
+#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161
+#: usr/local/www/diag_tables.php:165 usr/local/www/diag_tables.php:162
+#: usr/local/www/diag_tables.php:165
+msgid "entries in this table."
+msgstr "ã“ã®è¡¨ã®ã‚¨ãƒ³ãƒˆãƒªã€‚"
+
+#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51
+#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69
+#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69
+msgid "ERROR: No package defined."
+msgstr "エラー:パッケージ定義ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/pkg_edit.php:256
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/services_wol_edit.php:112
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_rules_edit.php:628
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_wireless_edit.php:145
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/vpn_pppoe_edit.php:234
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254
+#: usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/vpn_pppoe_edit.php:237
+#: usr/local/www/interfaces_bridge_edit.php:236
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_nat_edit.php:452
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/firewall_nat_edit.php:452
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/services_wol_edit.php:112
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/vpn_pppoe_edit.php:237
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/firewall_aliases_edit.php:56 usr/local/www/pkg_edit.php:254
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/interfaces_bridge_edit.php:236
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/interfaces_qinq_edit.php:39
+msgid "Edit"
+msgstr "編集"
+
+#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255
+#: usr/local/www/pkg_edit.php:258 usr/local/www/pkg_edit.php:258
+msgid "Package Editor"
+msgstr "パッケージ·エディター"
+
+#: usr/local/www/pkg_edit.php:405
+#: usr/local/www/firewall_aliases_import.php:154
+#: usr/local/www/firewall_shaper_layer7.php:569
+#: usr/local/www/firewall_shaper_vinterface.php:307
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:546
+#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219
+#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:583
+#: usr/local/www/interfaces_gif_edit.php:218
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:322
+#: usr/local/www/firewall_aliases_edit.php:686
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:846
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1480
+#: usr/local/www/firewall_schedule_edit.php:1156
+#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443
+#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219
+#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189
+#: usr/local/www/system_firmware_settings.php:238
+#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168
+#: usr/local/www/vpn_ipsec_keys_edit.php:144
+#: usr/local/www/vpn_ipsec_mobile.php:608
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/interfaces_ppps_edit.php:783
+#: usr/local/www/interfaces_qinq_edit.php:394
+#: usr/local/www/interfaces_wireless_edit.php:195
+#: usr/local/www/load_balancer_monitor_edit.php:356
+#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181
+#: usr/local/www/services_captiveportal.php:923
+#: usr/local/www/services_captiveportal_ip_edit.php:231
+#: usr/local/www/services_captiveportal_mac_edit.php:203
+#: usr/local/www/services_dhcp.php:871
+#: usr/local/www/services_dhcp_edit.php:251
+#: usr/local/www/services_dhcp_relay.php:189
+#: usr/local/www/services_dnsmasq.php:209
+#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472
+#: usr/local/www/vpn_pptp_users_edit.php:168
+#: usr/local/www/load_balancer_relay_action_edit.php:557
+#: usr/local/www/load_balancer_relay_protocol_edit.php:280
+#: usr/local/www/pkg_mgr_settings.php:120
+#: usr/local/www/services_captiveportal_hostname_edit.php:203
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers_edit.php:207
+#: usr/local/www/status_rrd_graph_settings.php:225
+#: usr/local/www/services_dyndns_edit.php:236
+#: usr/local/www/services_igmpproxy.php:155
+#: usr/local/www/services_igmpproxy_edit.php:280
+#: usr/local/www/services_rfc2136_edit.php:200
+#: usr/local/www/status_lb_pool.php:217
+#: usr/local/www/system_advanced_admin.php:535
+#: usr/local/www/system_advanced_firewall.php:416
+#: usr/local/www/system_advanced_misc.php:442
+#: usr/local/www/system_advanced_network.php:304
+#: usr/local/www/system_advanced_notifications.php:93
+#: usr/local/www/system_advanced_notifications.php:254
+#: usr/local/www/system_advanced_sysctl.php:104
+#: usr/local/www/system_advanced_sysctl.php:257
+#: usr/local/www/system_authservers.php:724
+#: usr/local/www/system_camanager.php:359
+#: usr/local/www/system_camanager.php:552
+#: usr/local/www/system_certmanager.php:155
+#: usr/local/www/system_certmanager.php:469
+#: usr/local/www/system_certmanager.php:787
+#: usr/local/www/system_crlmanager.php:294
+#: usr/local/www/system_crlmanager.php:387
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateways_edit.php:492
+#: usr/local/www/system_groupmanager.php:390
+#: usr/local/www/system_groupmanager_addprivs.php:224
+#: usr/local/www/system_usermanager.php:774
+#: usr/local/www/system_usermanager_addprivs.php:205
+#: usr/local/www/system_usermanager_passwordmg.php:119
+#: usr/local/www/system_usermanager_settings.php:161
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124
+#: usr/local/www/vpn_ipsec_phase1.php:855
+#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445
+#: usr/local/www/vpn_l2tp_users_edit.php:176
+#: usr/local/www/vpn_openvpn_client.php:845
+#: usr/local/www/vpn_openvpn_csc.php:658
+#: usr/local/www/vpn_openvpn_server.php:1433
+#: usr/local/www/vpn_pppoe_edit.php:589
+#: usr/local/www/firewall_nat_npt_edit.php:270
+#: usr/local/www/services_dhcpv6.php:784
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/services_dhcpv6_relay.php:190
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/services_unbound_acls.php:101
+#: usr/local/www/services_unbound_acls.php:306
+#: usr/local/www/diag_logs_settings.php:328
+#: usr/local/www/system_gateway_groups_edit.php:283
+#: usr/local/www/services_captiveportal_vouchers.php:604
+#: usr/local/www/services_dyndns_edit.php:366
+#: usr/local/www/firewall_nat_out.php:330
+#: usr/local/www/services_dnsmasq_edit.php:284
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dhcpv6_edit.php:237
+#: usr/local/www/firewall_nat_npt_edit.php:275
+#: usr/local/www/load_balancer_setting.php:161
+#: usr/local/www/status_rrd_graph_settings.php:226
+#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662
+#: usr/local/www/system_certmanager.php:183
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_certmanager.php:953
+#: usr/local/www/load_balancer_relay_action_edit.php:556
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/services_unbound.php:245
+#: usr/local/www/system_usermanager.php:772
+#: usr/local/www/services_igmpproxy_edit.php:282
+#: usr/local/www/system_advanced_firewall.php:475
+#: usr/local/www/firewall_aliases_edit.php:691
+#: usr/local/www/system_advanced_notifications.php:96
+#: usr/local/www/system_advanced_notifications.php:281
+#: usr/local/www/system_advanced_misc.php:485
+#: usr/local/www/firewall_shaper_vinterface.php:317
+#: usr/local/www/system_groupmanager_addprivs.php:222
+#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/vpn_openvpn_server.php:1575
+#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121
+#: usr/local/www/interfaces_bridge_edit.php:592
+#: usr/local/www/system_camanager.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:674
+#: usr/local/www/firewall_nat_edit.php:854
+#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644
+#: usr/local/www/vpn_openvpn_client.php:850
+#: usr/local/www/load_balancer_pool_edit.php:328
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476
+#: usr/local/www/interfaces_gre_edit.php:228
+#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218
+#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879
+#: usr/local/www/vpn_pppoe_edit.php:590
+#: usr/local/www/system_routes_edit.php:316
+#: usr/local/www/diag_logs_settings.php:348
+#: usr/local/www/system_gateway_groups_edit.php:343
+#: usr/local/www/interfaces_vlan_edit.php:190
+#: usr/local/www/services_dnsmasq.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:618
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/services_captiveportal_vouchers_edit.php:205
+#: usr/local/www/firewall_nat_1to1_edit.php:464
+#: usr/local/www/services_dhcpv6_edit.php:239
+#: usr/local/www/services_router_advertisements.php:400
+#: usr/local/www/firewall_nat_npt_edit.php:274
+#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167
+#: usr/local/www/services_dhcp_relay.php:190
+#: usr/local/www/services_captiveportal_hostname_edit.php:201
+#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416
+#: usr/local/www/interfaces_qinq_edit.php:395
+#: usr/local/www/interfaces_gif_edit.php:219
+#: usr/local/www/firewall_shaper.php:350
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/services_captiveportal_mac_edit.php:201
+#: usr/local/www/firewall_schedule_edit.php:1155
+#: usr/local/www/interfaces_ppps_edit.php:784
+#: usr/local/www/system_crlmanager.php:295
+#: usr/local/www/system_crlmanager.php:388
+#: usr/local/www/system_crlmanager.php:420
+#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474
+#: usr/local/www/interfaces_lagg_edit.php:219
+#: usr/local/www/vpn_openvpn_csc.php:657
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/firewall_shaper_vinterface.php:319
+#: usr/local/www/services_captiveportal.php:964
+#: usr/local/www/system_gateways_edit.php:627
+#: usr/local/www/services_dhcpv6_relay.php:191
+#: usr/local/www/system_usermanager_passwordmg.php:120
+#: usr/local/www/interfaces_assign.php:495
+#: usr/local/www/services_captiveportal_ip_edit.php:229
+#: usr/local/www/vpn_openvpn_server.php:1616
+#: usr/local/www/services_dhcp.php:1113
+#: usr/local/www/system_firmware_settings.php:251
+#: usr/local/www/services_ntpd.php:151
+#: usr/local/www/interfaces_bridge_edit.php:593
+#: usr/local/www/interfaces_groups_edit.php:323
+#: usr/local/www/vpn_ipsec_phase2.php:770
+#: usr/local/www/firewall_nat_edit.php:853
+#: usr/local/www/vpn_pptp_users_edit.php:169
+#: usr/local/www/vpn_ipsec_keys_edit.php:143
+#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632
+#: usr/local/www/vpn_openvpn_client.php:903
+#: usr/local/www/load_balancer_pool_edit.php:326
+#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469
+#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209
+#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/system_authservers.php:729 usr/local/www/vpn_l2tp.php:449
+#: usr/local/www/system_gateways_edit.php:632
+#: usr/local/www/system_camanager.php:366
+#: usr/local/www/system_camanager.php:577
+#: usr/local/www/services_captiveportal_ip_edit.php:223
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/vpn_openvpn_client.php:922
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1566
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173
+#: usr/local/www/system_firmware_settings.php:260
+#: usr/local/www/interfaces_lagg_edit.php:232
+#: usr/local/www/firewall_nat_edit.php:849
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/diag_smart.php:240
+#: usr/local/www/services_captiveportal_vouchers.php:627
+#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126
+#: usr/local/www/system_certmanager.php:186
+#: usr/local/www/system_certmanager.php:577
+#: usr/local/www/system_certmanager.php:995
+#: usr/local/www/system_advanced_misc.php:546
+#: usr/local/www/services_captiveportal_mac_edit.php:214
+#: usr/local/www/services_dhcpv6.php:827
+#: usr/local/www/system_usermanager_passwordmg.php:125
+#: usr/local/www/system_authservers.php:745
+#: usr/local/www/system_advanced_firewall.php:537
+#: usr/local/www/services_captiveportal.php:966 usr/local/www/vpn_pptp.php:477
+#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185
+#: usr/local/www/interfaces_bridge_edit.php:594
+#: usr/local/www/services_dnsmasq.php:235
+#: usr/local/www/vpn_ipsec_phase1.php:886
+#: usr/local/www/firewall_nat_out_edit.php:664
+#: usr/local/www/vpn_openvpn_server.php:1668
+#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/services_snmp.php:430
+#: usr/local/www/interfaces_qinq_edit.php:398
+#: usr/local/www/interfaces.php:2664
+#: usr/local/www/firewall_shaper_layer7.php:565
+#: usr/local/www/services_router_advertisements.php:395
+#: usr/local/www/system_gateways_edit.php:634
+#: usr/local/www/services_dyndns_edit.php:378
+#: usr/local/www/firewall_rules_edit.php:1128
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/system_firmware_settings.php:266 usr/local/www/system.php:467
+#: usr/local/www/firewall_nat_edit.php:889
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/services_dhcp.php:1146
+#: usr/local/www/system_certmanager.php:578
+#: usr/local/www/system_certmanager.php:999
+#: usr/local/www/system_advanced_misc.php:667
+#: usr/local/www/system_routes_edit.php:339
+#: usr/local/www/firewall_nat_out.php:338
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/system_advanced_firewall.php:538
+#: usr/local/www/services_captiveportal.php:982
+#: usr/local/www/firewall_aliases_edit.php:725
+#: usr/local/www/pkg_mgr_settings.php:123
+#: usr/local/www/system_usermanager_settings.php:164
+#: usr/local/www/services_dnsmasq.php:248
+#: usr/local/www/system_advanced_network.php:305
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/diag_nanobsd.php:200 usr/local/www/interfaces.php:2710
+#: usr/local/www/system_gateways_edit.php:664
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/interfaces_ppps_edit.php:787
+#: usr/local/www/interfaces_lagg_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/system_routes_edit.php:349
+#: usr/local/www/firewall_nat_out.php:337
+#: usr/local/www/interfaces_groups_edit.php:320 usr/local/www/pkg_edit.php:422
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/services_dnsmasq.php:312 usr/local/www/interfaces.php:2699
+#: usr/local/www/firewall_shaper_layer7.php:565 usr/local/www/vpn_l2tp.php:449
+#: usr/local/www/services_router_advertisements.php:395
+#: usr/local/www/system_gateways_edit.php:665
+#: usr/local/www/system_camanager.php:366
+#: usr/local/www/system_camanager.php:577
+#: usr/local/www/services_captiveportal_ip_edit.php:223
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/firewall_shaper.php:350
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/system_groupmanager.php:390
+#: usr/local/www/diag_logs_settings.php:348
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/firewall_shaper_vinterface.php:319
+#: usr/local/www/vpn_openvpn_client.php:922
+#: usr/local/www/system_usermanager_addprivs.php:205
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:378
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:787 usr/local/www/vpn_ipsec.php:173
+#: usr/local/www/system_firmware_settings.php:266
+#: usr/local/www/vpn_openvpn_csc.php:657
+#: usr/local/www/interfaces_lagg_edit.php:231 usr/local/www/system.php:467
+#: usr/local/www/firewall_schedule_edit.php:1155
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/services_captiveportal_hostname_edit.php:203
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/vpn_ipsec_keys_edit.php:143
+#: usr/local/www/services_wol_edit.php:157
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/services_ntpd.php:151
+#: usr/local/www/status_rrd_graph_settings.php:226
+#: usr/local/www/services_dhcpv6_relay.php:191
+#: usr/local/www/firewall_aliases_import.php:154
+#: usr/local/www/diag_smart.php:240
+#: usr/local/www/services_captiveportal_vouchers.php:632
+#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1146
+#: usr/local/www/services_captiveportal_vouchers_edit.php:205
+#: usr/local/www/system_certmanager.php:186
+#: usr/local/www/system_certmanager.php:578
+#: usr/local/www/system_certmanager.php:999
+#: usr/local/www/status_lb_pool.php:217
+#: usr/local/www/load_balancer_setting.php:160
+#: usr/local/www/system_advanced_admin.php:535
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/system_advanced_misc.php:667
+#: usr/local/www/system_routes_edit.php:343
+#: usr/local/www/services_captiveportal_mac_edit.php:214
+#: usr/local/www/system_crlmanager.php:295
+#: usr/local/www/system_crlmanager.php:388
+#: usr/local/www/system_crlmanager.php:420
+#: usr/local/www/services_dhcpv6.php:827
+#: usr/local/www/firewall_nat_out.php:337
+#: usr/local/www/system_usermanager_passwordmg.php:125
+#: usr/local/www/firewall_nat_npt_edit.php:274
+#: usr/local/www/interfaces_groups_edit.php:320
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/system_authservers.php:745
+#: usr/local/www/system_advanced_firewall.php:538
+#: usr/local/www/services_captiveportal.php:982
+#: usr/local/www/system_groupmanager_addprivs.php:224
+#: usr/local/www/firewall_aliases_edit.php:711 usr/local/www/vpn_pptp.php:477
+#: usr/local/www/pkg_mgr_settings.php:123
+#: usr/local/www/system_usermanager_settings.php:164
+#: usr/local/www/pkg_edit.php:422 usr/local/www/edit.php:185
+#: usr/local/www/vpn_l2tp_users_edit.php:177
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/services_igmpproxy_edit.php:282
+#: usr/local/www/services_igmpproxy.php:155
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124
+#: usr/local/www/system_advanced_notifications.php:96
+#: usr/local/www/system_advanced_notifications.php:281
+#: usr/local/www/vpn_pptp_users_edit.php:169
+#: usr/local/www/services_rfc2136_edit.php:200
+#: usr/local/www/services_dnsmasq.php:312
+#: usr/local/www/vpn_ipsec_phase1.php:886
+#: usr/local/www/system_usermanager.php:772
+#: usr/local/www/vpn_ipsec_mobile.php:657
+#: usr/local/www/load_balancer_pool_edit.php:326
+#: usr/local/www/system_advanced_network.php:305
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/vpn_openvpn_server.php:1668
+#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/diag_nanobsd.php:200
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/services_dhcp_relay.php:190
+#: usr/local/www/interfaces_assign.php:501 usr/local/www/services_snmp.php:430
+#: usr/local/www/interfaces_qinq_edit.php:395
+#: usr/local/www/system_advanced_sysctl.php:104
+#: usr/local/www/system_advanced_sysctl.php:257
+#: usr/local/www/interfaces.php:2699
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077
+#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/pkg_edit.php:431 usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433
+#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433
+msgid "Advanced features"
+msgstr "高度ãªæ©Ÿèƒ½"
+
+#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65
+#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422
+#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477
+#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194
+#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53
+#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433
+#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864
+#: usr/local/www/status_queues.php:180
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187
+#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297
+#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181
+#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134
+#: usr/local/www/diag_packet_capture.php:270 usr/local/www/vpn_ipsec.php:438
+#: usr/local/www/status_graph.php:308
+#: usr/local/www/interfaces_wireless.php:136
+#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482
+#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163
+#: usr/local/www/status_graph.php:330
+#: usr/local/www/diag_packet_capture.php:208
+#: usr/local/www/diag_packet_capture.php:288 usr/local/www/pkg_edit.php:921
+#: usr/local/www/firewall_shaper_layer7.php:65 usr/local/www/vpn_ipsec.php:438
+#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph.php:330
+#: usr/local/www/diag_packet_capture.php:208
+#: usr/local/www/diag_packet_capture.php:288
+#: usr/local/www/interfaces_wireless.php:136
+#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482
+#: usr/local/www/pkg_edit.php:921 usr/local/www/status_queues.php:163
+#: usr/local/www/carp_status.php:187
+msgid "Note"
+msgstr "ノート"
+
+#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835
+#: usr/local/www/firewall_aliases_import.php:155
+#: usr/local/www/firewall_shaper_layer7.php:573
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:546
+#: usr/local/www/services_wol_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:583
+#: usr/local/www/interfaces_gif_edit.php:218
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:323
+#: usr/local/www/firewall_aliases_edit.php:687
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:846
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1480
+#: usr/local/www/firewall_schedule_edit.php:1157
+#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549
+#: usr/local/www/interfaces.php:2444
+#: usr/local/www/interfaces_vlan_edit.php:189
+#: usr/local/www/system_routes_edit.php:255
+#: usr/local/www/system_routes_edit.php:275
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/interfaces_ppps_edit.php:784
+#: usr/local/www/interfaces_qinq_edit.php:395
+#: usr/local/www/interfaces_wireless_edit.php:195
+#: usr/local/www/load_balancer_monitor_edit.php:356
+#: usr/local/www/load_balancer_pool_edit.php:312
+#: usr/local/www/load_balancer_virtual_server_edit.php:280
+#: usr/local/www/services_captiveportal.php:924
+#: usr/local/www/services_dhcp_edit.php:251
+#: usr/local/www/services_dnsmasq_edit.php:172
+#: usr/local/www/load_balancer_relay_action_edit.php:557
+#: usr/local/www/load_balancer_relay_protocol_edit.php:280
+#: usr/local/www/services_captiveportal_vouchers.php:598
+#: usr/local/www/services_dyndns_edit.php:237
+#: usr/local/www/services_igmpproxy_edit.php:281
+#: usr/local/www/services_rfc2136_edit.php:201
+#: usr/local/www/system_advanced_sysctl.php:258
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateways_edit.php:492
+#: usr/local/www/system_groupmanager_addprivs.php:225
+#: usr/local/www/system_usermanager_addprivs.php:206
+#: usr/local/www/vpn_l2tp_users_edit.php:177
+#: usr/local/www/vpn_pppoe_edit.php:590
+#: usr/local/www/firewall_nat_npt_edit.php:270
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/system_routes_edit.php:287
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/services_unbound_acls.php:306
+#: usr/local/www/system_gateway_groups_edit.php:283
+#: usr/local/www/services_captiveportal_vouchers.php:605
+#: usr/local/www/services_dyndns_edit.php:367
+#: usr/local/www/services_dnsmasq_edit.php:284
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dhcpv6_edit.php:237
+#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870
+#: usr/local/www/firewall_nat_out_edit.php:662
+#: usr/local/www/load_balancer_relay_action_edit.php:556
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/services_igmpproxy_edit.php:283
+#: usr/local/www/firewall_aliases_edit.php:692
+#: usr/local/www/system_groupmanager_addprivs.php:223
+#: usr/local/www/services_captiveportal.php:969
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/load_balancer_virtual_server_edit.php:269
+#: usr/local/www/interfaces_bridge_edit.php:592
+#: usr/local/www/firewall_nat_edit.php:854
+#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655
+#: usr/local/www/interfaces.php:2645
+#: usr/local/www/load_balancer_pool_edit.php:329
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/interfaces_gre_edit.php:228
+#: usr/local/www/vpn_pppoe_edit.php:591
+#: usr/local/www/system_routes_edit.php:288
+#: usr/local/www/system_routes_edit.php:316
+#: usr/local/www/system_gateway_groups_edit.php:343
+#: usr/local/www/interfaces_vlan_edit.php:190
+#: usr/local/www/services_captiveportal_vouchers.php:619
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/firewall_nat_1to1_edit.php:464
+#: usr/local/www/services_dhcpv6_edit.php:239
+#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879
+#: usr/local/www/interfaces_qinq_edit.php:396
+#: usr/local/www/interfaces_gif_edit.php:219
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/firewall_schedule_edit.php:1156
+#: usr/local/www/interfaces_ppps_edit.php:785
+#: usr/local/www/firewall_aliases_edit.php:695
+#: usr/local/www/interfaces_lagg_edit.php:219
+#: usr/local/www/services_captiveportal.php:965
+#: usr/local/www/system_gateways_edit.php:627
+#: usr/local/www/load_balancer_virtual_server_edit.php:267
+#: usr/local/www/interfaces_bridge_edit.php:593
+#: usr/local/www/interfaces_groups_edit.php:324
+#: usr/local/www/firewall_nat_edit.php:853
+#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537
+#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633
+#: usr/local/www/load_balancer_pool_edit.php:327
+#: usr/local/www/vpn_l2tp_users_edit.php:178
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/system_gateways_edit.php:632
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:371
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1566
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:791
+#: usr/local/www/interfaces_lagg_edit.php:232
+#: usr/local/www/firewall_nat_edit.php:849
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/services_captiveportal_vouchers.php:628
+#: usr/local/www/vpn_pppoe_edit.php:594
+#: usr/local/www/services_captiveportal.php:967 usr/local/www/pkg_edit.php:923
+#: usr/local/www/interfaces_bridge_edit.php:594
+#: usr/local/www/firewall_nat_out_edit.php:664
+#: usr/local/www/interfaces_qinq_edit.php:399
+#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652
+#: usr/local/www/interfaces.php:2665
+#: usr/local/www/firewall_shaper_layer7.php:568
+#: usr/local/www/system_gateways_edit.php:634
+#: usr/local/www/services_dyndns_edit.php:379
+#: usr/local/www/firewall_rules_edit.php:1128
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/firewall_nat_edit.php:889
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/system_routes_edit.php:313
+#: usr/local/www/system_routes_edit.php:339
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/services_captiveportal.php:983
+#: usr/local/www/firewall_aliases_edit.php:726
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1698
+#: usr/local/www/interfaces.php:2711
+#: usr/local/www/system_gateways_edit.php:664
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/interfaces_ppps_edit.php:788
+#: usr/local/www/interfaces_lagg_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/system_routes_edit.php:319
+#: usr/local/www/system_routes_edit.php:349
+#: usr/local/www/interfaces_groups_edit.php:321 usr/local/www/pkg_edit.php:927
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691
+#: usr/local/www/interfaces.php:2700
+#: usr/local/www/firewall_shaper_layer7.php:568
+#: usr/local/www/system_gateways_edit.php:665
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/system_usermanager_addprivs.php:206
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:379
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/load_balancer_virtual_server_edit.php:267
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:788
+#: usr/local/www/interfaces_lagg_edit.php:231
+#: usr/local/www/firewall_schedule_edit.php:1156
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/services_wol_edit.php:157
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/firewall_aliases_import.php:155
+#: usr/local/www/services_captiveportal_vouchers.php:633
+#: usr/local/www/vpn_pppoe_edit.php:594
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/system_routes_edit.php:313
+#: usr/local/www/system_routes_edit.php:343
+#: usr/local/www/firewall_nat_npt_edit.php:274
+#: usr/local/www/interfaces_groups_edit.php:321
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/services_captiveportal.php:983
+#: usr/local/www/system_groupmanager_addprivs.php:225
+#: usr/local/www/firewall_aliases_edit.php:712 usr/local/www/pkg_edit.php:927
+#: usr/local/www/vpn_l2tp_users_edit.php:178
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/services_igmpproxy_edit.php:283
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/services_rfc2136_edit.php:201
+#: usr/local/www/load_balancer_pool_edit.php:327
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/interfaces_qinq_edit.php:396
+#: usr/local/www/system_advanced_sysctl.php:258
+#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691
+#: usr/local/www/interfaces.php:2700
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1117
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1291
+#: usr/local/www/firewall_rules_edit.php:1342
+#: usr/local/www/firewall_rules_edit.php:1392
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940
+#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741
+#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799
+#: usr/local/www/services_dnsmasq.php:194
+#: usr/local/www/services_dnsmasq.php:197
+#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83
+#: usr/local/www/system_gateways_edit.php:415
+#: usr/local/www/vpn_openvpn_client.php:829
+#: usr/local/www/vpn_openvpn_csc.php:642
+#: usr/local/www/vpn_openvpn_server.php:1412
+#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667
+#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:1118
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1168
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1252
+#: usr/local/www/firewall_rules_edit.php:1276
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1331
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1413
+#: usr/local/www/firewall_rules_edit.php:1463
+#: usr/local/www/firewall_rules_edit.php:1517
+#: usr/local/www/services_unbound_advanced.php:88
+#: usr/local/www/system_gateways_edit.php:436
+#: usr/local/www/vpn_openvpn_server.php:1554
+#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803
+#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837
+#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434
+#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834
+#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786
+#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820
+#: usr/local/www/services_dnsmasq.php:195
+#: usr/local/www/services_dnsmasq.php:198
+#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108
+#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641
+#: usr/local/www/system_gateways_edit.php:542
+#: usr/local/www/vpn_openvpn_server.php:1596
+#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987
+#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011
+#: usr/local/www/services_dhcp.php:1034
+#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422
+#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883
+#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704
+#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729
+#: usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/system_gateways_edit.php:546
+#: usr/local/www/vpn_openvpn_client.php:902
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1303
+#: usr/local/www/firewall_rules_edit.php:1346
+#: usr/local/www/firewall_rules_edit.php:1373
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1478
+#: usr/local/www/firewall_rules_edit.php:1532
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974
+#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000
+#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692
+#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746
+#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107
+#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220
+#: usr/local/www/services_dnsmasq.php:223
+#: usr/local/www/services_dnsmasq.php:226
+#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435
+#: usr/local/www/interfaces.php:2136
+#: usr/local/www/system_gateways_edit.php:548
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1236
+#: usr/local/www/firewall_rules_edit.php:1298
+#: usr/local/www/firewall_rules_edit.php:1310
+#: usr/local/www/firewall_rules_edit.php:1353
+#: usr/local/www/firewall_rules_edit.php:1380
+#: usr/local/www/firewall_rules_edit.php:1435
+#: usr/local/www/firewall_rules_edit.php:1485
+#: usr/local/www/firewall_rules_edit.php:1540
+#: usr/local/www/firewall_nat_edit.php:544 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1008
+#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1067
+#: usr/local/www/services_dnsmasq.php:233
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_dnsmasq.php:239 usr/local/www/interfaces.php:1479
+#: usr/local/www/interfaces.php:2182
+#: usr/local/www/system_gateways_edit.php:578
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/firewall_nat_edit.php:545 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/services_dnsmasq.php:297
+#: usr/local/www/services_dnsmasq.php:300
+#: usr/local/www/services_dnsmasq.php:303 usr/local/www/interfaces.php:1474
+#: usr/local/www/interfaces.php:2171
+#: usr/local/www/system_gateways_edit.php:578
+#: usr/local/www/vpn_openvpn_client.php:902
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/vpn_openvpn_csc.php:641
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcp.php:994
+#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcp.php:1020
+#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcpv6.php:692
+#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746
+#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:297
+#: usr/local/www/services_dnsmasq.php:300
+#: usr/local/www/services_dnsmasq.php:303
+#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1474
+#: usr/local/www/interfaces.php:2171
+msgid "Advanced"
+msgstr "高度ãª"
+
+#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1117
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1291
+#: usr/local/www/firewall_rules_edit.php:1342
+#: usr/local/www/firewall_rules_edit.php:1392
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197
+#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1168
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1252
+#: usr/local/www/firewall_rules_edit.php:1276
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1331
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1413
+#: usr/local/www/firewall_rules_edit.php:1463
+#: usr/local/www/firewall_rules_edit.php:1517
+#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198
+#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1303
+#: usr/local/www/firewall_rules_edit.php:1346
+#: usr/local/www/firewall_rules_edit.php:1373
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1478
+#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107
+#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1236
+#: usr/local/www/firewall_rules_edit.php:1298
+#: usr/local/www/firewall_rules_edit.php:1310
+#: usr/local/www/firewall_rules_edit.php:1353
+#: usr/local/www/firewall_rules_edit.php:1380
+#: usr/local/www/firewall_rules_edit.php:1435
+#: usr/local/www/firewall_rules_edit.php:1485
+#: usr/local/www/firewall_rules_edit.php:1540
+#: usr/local/www/services_dnsmasq.php:236 usr/local/www/interfaces.php:1479
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474
+msgid "Show advanced option"
+msgstr "高度ãªã‚ªãƒ—ションを表示ã™ã‚‹"
+
+#: usr/local/www/pkg_mgr_installed.php:45
+#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65
+#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65
+#: usr/local/www/diag_logs_openvpn.php:69
+#: usr/local/www/diag_logs_settings.php:210
+#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117
+#: usr/local/www/system.php:74 usr/local/www/system.php:231
+#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102
+#: usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_settings.php:74
+#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165
+#: usr/local/www/diag_logs_filter_summary.php:184
+#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66
+#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62
+#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440
+#: usr/local/www/status_rrd_graph.php:329
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_settings.php:53
+#: usr/local/www/status_rrd_graph_settings.php:128
+#: usr/local/www/system_advanced_admin.php:242
+#: usr/local/www/system_advanced_firewall.php:178
+#: usr/local/www/system_advanced_misc.php:179
+#: usr/local/www/system_advanced_network.php:148
+#: usr/local/www/system_advanced_notifications.php:131
+#: usr/local/www/system_advanced_sysctl.php:125
+#: usr/local/www/system_authservers.php:44
+#: usr/local/www/system_camanager.php:50
+#: usr/local/www/system_certmanager.php:51
+#: usr/local/www/system_crlmanager.php:46
+#: usr/local/www/system_gateway_groups.php:88
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways.php:120
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/system_groupmanager_addprivs.php:56
+#: usr/local/www/system_usermanager.php:54
+#: usr/local/www/system_usermanager_passwordmg.php:43
+#: usr/local/www/system_usermanager_settings.php:51
+#: usr/local/www/diag_logs_wireless.php:67
+#: usr/local/www/diag_logs_routing.php:65
+#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55
+#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458
+#: usr/local/www/status_rrd_graph_settings.php:129
+#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195
+#: usr/local/www/diag_logs_resolver.php:78
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80
+#: usr/local/www/system_advanced_notifications.php:140
+#: usr/local/www/status_rrd_graph.php:377
+#: usr/local/www/system_advanced_misc.php:199
+#: usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75
+#: usr/local/www/system.php:242 usr/local/www/system.php:262
+#: usr/local/www/diag_logs_routing.php:66
+#: usr/local/www/diag_logs_settings.php:222
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428
+#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66
+#: usr/local/www/diag_logs_ipsec.php:103
+#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66
+#: usr/local/www/system_advanced_misc.php:218
+#: usr/local/www/diag_logs_dhcp.php:71
+#: usr/local/www/system_gateway_groups.php:89
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/diag_logs_wireless.php:68
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210
+#: usr/local/www/diag_logs_filter_summary.php:185
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_gateways.php:79
+#: usr/local/www/diag_logs_openvpn.php:70
+#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235
+#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_camanager.php:51
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph.php:402
+#: usr/local/www/diag_logs_filter_dynamic.php:97
+#: usr/local/www/system_routes.php:98 usr/local/www/system_hasync.php:97
+#: usr/local/www/system_certmanager.php:57
+#: usr/local/www/system_advanced_misc.php:222
+#: usr/local/www/diag_logs_ppp.php:68
+#: usr/local/www/system_advanced_firewall.php:221
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275
+#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:94
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_gateway_groups.php:98
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_routes.php:113
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_camanager.php:51 usr/local/www/diag_logs_auth.php:66
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/diag_logs_settings.php:222
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_routing.php:66 usr/local/www/system.php:75
+#: usr/local/www/system.php:235 usr/local/www/system.php:255
+#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/status_rrd_graph.php:402
+#: usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80
+#: usr/local/www/status_rrd_graph_settings.php:53
+#: usr/local/www/status_rrd_graph_settings.php:129
+#: usr/local/www/diag_logs.php:77
+#: usr/local/www/diag_logs_filter_dynamic.php:97
+#: usr/local/www/system_routes.php:113 usr/local/www/diag_logs_ntpd.php:66
+#: usr/local/www/system_hasync.php:97 usr/local/www/system_certmanager.php:57
+#: usr/local/www/diag_logs_openvpn.php:70
+#: usr/local/www/system_advanced_admin.php:242
+#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:57
+#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_logs_ppp.php:68
+#: usr/local/www/system_routes_edit.php:223
+#: usr/local/www/system_crlmanager.php:46
+#: usr/local/www/system_usermanager_passwordmg.php:43
+#: usr/local/www/diag_logs_gateways.php:79
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_authservers.php:44
+#: usr/local/www/system_advanced_firewall.php:221
+#: usr/local/www/system_groupmanager_addprivs.php:56
+#: usr/local/www/diag_backup.php:195 usr/local/www/pkg_mgr_settings.php:62
+#: usr/local/www/system_usermanager_settings.php:51
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275
+#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_relayd.php:67
+#: usr/local/www/diag_logs_vpn.php:126
+#: usr/local/www/system_advanced_notifications.php:140
+#: usr/local/www/diag_logs_ipsec.php:103
+#: usr/local/www/system_usermanager.php:54
+#: usr/local/www/system_gateways.php:120
+#: usr/local/www/system_advanced_network.php:148
+#: usr/local/www/diag_logs_wireless.php:68
+#: usr/local/www/system_gateway_groups.php:98
+#: usr/local/www/diag_logs_resolver.php:79
+#: usr/local/www/system_advanced_sysctl.php:125
+#: usr/local/www/diag_logs_filter_summary.php:185
+msgid "System"
+msgstr "システム"
+
+#: usr/local/www/pkg_mgr_installed.php:45
+#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113
+#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440
+#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93
+#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190
+#: usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420
+#: usr/local/www/pkg_mgr.php:94 usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:57
+#: usr/local/www/pkg_mgr.php:104 usr/local/www/diag_backup.php:190
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420
+msgid "Package Manager"
+msgstr "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99
+#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97
+#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:118
+#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:127
+msgid "Available Packages"
+msgstr "利用å¯èƒ½ãªãƒ‘ッケージ"
+
+#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103
+#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119
+#: usr/local/www/pkg_mgr_installed.php:101
+#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:122
+#: usr/local/www/pkg_mgr_settings.php:92
+#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:128
+#: usr/local/www/pkg_mgr_settings.php:92
+msgid "Installed Packages"
+msgstr "インストール済ã¿ãƒ‘ッケージ"
+
+#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113
+msgid "Package Name"
+msgstr "パッケージå"
+
+#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114
+#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112
+#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:133
+#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:180
+msgid "Category"
+msgstr "カテゴリ"
+
+#: usr/local/www/pkg_mgr_installed.php:92
+#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117
+#: usr/local/www/pkg_mgr.php:200
+msgid "Package Info"
+msgstr "パッケージ情報"
+
+#: usr/local/www/pkg_mgr_installed.php:93
+msgid "Package Version"
+msgstr "パッケージãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/pkg_mgr_installed.php:116
+#: usr/local/www/pkg_mgr_installed.php:122
+#: usr/local/www/pkg_mgr_installed.php:142
+#: usr/local/www/pkg_mgr_installed.php:144
+#: usr/local/www/pkg_mgr_installed.php:151
+#: usr/local/www/pkg_mgr_installed.php:153
+#: usr/local/www/pkg_mgr_installed.php:146
+#: usr/local/www/pkg_mgr_installed.php:155
+#: usr/local/www/pkg_mgr_installed.php:144
+#: usr/local/www/pkg_mgr_installed.php:146
+#: usr/local/www/pkg_mgr_installed.php:153
+#: usr/local/www/pkg_mgr_installed.php:155
+msgid "Available"
+msgstr "利用ã§ãã‚‹"
+
+#: usr/local/www/pkg_mgr_installed.php:117
+#: usr/local/www/pkg_mgr_installed.php:123
+#: usr/local/www/pkg_mgr_installed.php:145
+#: usr/local/www/pkg_mgr_installed.php:154
+#: usr/local/www/pkg_mgr_installed.php:147
+#: usr/local/www/pkg_mgr_installed.php:156
+#: usr/local/www/pkg_mgr_installed.php:147
+#: usr/local/www/pkg_mgr_installed.php:156
+msgid "Installed"
+msgstr "インストールã•ã‚Œã¦"
+
+#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202
+msgid "No info, check the"
+msgstr "情報無ã€ãƒã‚§ãƒƒã‚¯ã—ãªã„"
+
+#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202
+msgid "forum"
+msgstr "フォーラム"
+
+#: usr/local/www/pkg_mgr_installed.php:163
+msgid "Do you really want to remove this package?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘ッケージを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/pkg_mgr_installed.php:164
+msgid "Remove this package."
+msgstr "ã“ã®ãƒ‘ッケージを削除ã—ã¾ã™ã€‚"
+
+#: usr/local/www/pkg_mgr_installed.php:168
+msgid "Reinstall this package."
+msgstr "ã“ã®ãƒ‘ッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/pkg_mgr_installed.php:171
+msgid "Reinstall this package's GUI components."
+msgstr "ã“ã®ãƒ‘ッケージã®GUIコンãƒãƒ¼ãƒãƒ³ãƒˆã‚’å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:222
+#: usr/local/www/pkg_mgr_installed.php:225
+#: usr/local/www/pkg_mgr_installed.php:227
+#: usr/local/www/pkg_mgr_installed.php:227
+msgid "There are no packages currently installed."
+msgstr "ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œãªã„パッケージãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/easyrule.php:34 usr/local/www/easyrule.php:34
+msgid "Status : EasyRule"
+msgstr "ステータス: EasyRule"
+
+#: usr/local/www/easyrule.php:69 usr/local/www/easyrule.php:69
+msgid "Message"
+msgstr "メッセージ"
+
+#: usr/local/www/easyrule.php:72 usr/local/www/easyrule.php:72
+msgid ""
+"This is the Easy Rule status page, mainly used to display errors when adding "
+"rules. If you are seeing this, there apparently was not an error, and you "
+"navigated to the page directly without telling it what to do"
+msgstr "ルールを"ã“ã‚Œã¯ä¸»ã«è¿½åŠ ã™ã‚‹ã¨ãã«ã‚¨ãƒ©ãƒ¼ã‚’表示ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã€ã§ã™ã€‚ã‚ãªãŸã¯ã“れを見ã¦ã„ã‚‹å ´åˆã¯ã€æ˜Žã‚‰ã‹ã«èª¤ã‚ŠãŒãªã‹ã£ãŸã—ã€ã‚ãªãŸãŒã€Œä½•ã‚’è¡Œã†ã«ã¯ã€ãれをä¼ãˆã‚‹ã“ã¨ãªãã€ç›´æŽ¥ãƒšãƒ¼ã‚¸ã«ç§»å‹•"
+
+#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75
+msgid ""
+"This page is meant to be called from the block/pass buttons on the Firewall "
+"Logs page"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ­ã‚°ãƒšãƒ¼ã‚¸ä¸Šã®ãƒ–ロック/パスボタンã‹ã‚‰å‘¼ã³å‡ºã•ã‚Œã‚‹ã“ã¨ã‚’æ„図ã—ã¦"
+
+#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59
+#: usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48
+#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81
+#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85
+#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140
+#: usr/local/www/status_interfaces.php:58
+#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359
+#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224
+#: usr/local/www/status_rrd_graph_settings.php:113
+#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246
+#: usr/local/www/status_upnp.php:58
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/status_dhcp_leases.php:48
+#: usr/local/www/status_gateway_groups.php:52
+#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77
+#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62
+#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80
+#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212
+#: usr/local/www/status_openvpn.php:263
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43
+#: usr/local/www/status_dhcpv6_leases.php:49
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131
+#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94
+#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50
+#: usr/local/www/status_dhcp_leases.php:49
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266
+#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323
+#: usr/local/www/status_interfaces.php:60
+#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92
+#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90
+#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78
+#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123
+#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242
+#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79
+#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240
+#: usr/local/www/status_openvpn.php:314
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_graph.php:101 usr/local/www/diag_ipsec.php:110
+#: usr/local/www/status_rrd_graph.php:248 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:315
+#: usr/local/www/status_services.php:63 usr/local/www/status_services.php:81
+#: usr/local/www/status_openvpn.php:273 usr/local/www/status_openvpn.php:334
+#: usr/local/www/diag_logs_filter.php:109 usr/local/www/status_graph.php:111
+#: usr/local/www/pkg_mgr.php:134 usr/local/www/status_ntpd.php:115
+#: usr/local/www/status_ntpd.php:129 usr/local/www/status_services.php:63
+#: usr/local/www/status_services.php:81
+#: usr/local/www/status_dhcpv6_leases.php:50
+#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:78
+#: usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:273
+#: usr/local/www/status_openvpn.php:334 usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_graph_cpu.php:41
+#: usr/local/www/diag_logs_routing.php:54 usr/local/www/status_graph.php:111
+#: usr/local/www/diag_logs_dhcp.php:59
+#: usr/local/www/status_filter_reload.php:44 usr/local/www/diag_ipsec.php:48
+#: usr/local/www/diag_ipsec.php:110 usr/local/www/status_rrd_graph.php:248
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/status_interfaces.php:60
+#: usr/local/www/status_interfaces.php:88 usr/local/www/diag_ipsec_spd.php:49
+#: usr/local/www/diag_logs_openvpn.php:45 usr/local/www/status_lb_pool.php:62
+#: usr/local/www/pkg_mgr.php:182 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/diag_pkglogs.php:81 usr/local/www/status_ntpd.php:115
+#: usr/local/www/status_ntpd.php:129 usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_dhcp_leases.php:49 usr/local/www/status_queues.php:109
+#: usr/local/www/status_gateway_groups.php:52 usr/local/www/fbegin.inc:315
+#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_ipsec.php:91
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80
+#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/status_gateways.php:51
+#: usr/local/www/status_gateways.php:78
+#: usr/local/www/diag_logs_wireless.php:56 usr/local/www/status_upnp.php:58
+#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/carp_status.php:92 usr/local/www/carp_status.php:133
+msgid "Status"
+msgstr "ステータス"
+
+#: usr/local/www/easyrule.php:75 usr/local/www/easyrule.php:75
+msgid "System Logs, Firewall Tab"
+msgstr "システムログã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã‚¿ãƒ–"
+
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66
+#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter.php:102
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66
+#: usr/local/www/diag_logs_openvpn.php:70
+#: usr/local/www/diag_logs_settings.php:211
+#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_rules.php:52
+#: usr/local/www/firewall_rules_edit.php:628
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/firewall_shaper.php:54
+#: usr/local/www/firewall_virtual_ip.php:149
+#: usr/local/www/diag_logs_filter_summary.php:185
+#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67
+#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/diag_logs_wireless.php:68
+#: usr/local/www/diag_logs_routing.php:66
+#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/diag_logs_resolver.php:79
+#: usr/local/www/firewall_aliases.php:153
+#: usr/local/www/diag_logs_gateways.php:79
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/diag_logs_filter_dynamic.php:99
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299
+#: usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67
+#: usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/diag_logs_ipsec.php:104
+#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/diag_logs_filter_summary.php:186
+#: usr/local/www/firewall_aliases.php:155
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/diag_logs_openvpn.php:71
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/firewall_virtual_ip.php:152
+#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/firewall_virtual_ip.php:166
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/diag_logs_filter_dynamic.php:98
+#: usr/local/www/diag_logs_ppp.php:69 usr/local/www/fbegin.inc:291
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_aliases.php:154
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_logs_auth.php:67
+#: usr/local/www/diag_logs_settings.php:223
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/firewall_nat_edit.php:452
+#: usr/local/www/firewall_aliases.php:154 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_shaper_wizards.php:73 usr/local/www/diag_logs.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:98
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/diag_logs_ntpd.php:67 usr/local/www/firewall_nat.php:166
+#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69
+#: usr/local/www/firewall_nat_out.php:301 usr/local/www/firewall_rules.php:49
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:291
+#: usr/local/www/diag_logs_relayd.php:68 usr/local/www/diag_logs_vpn.php:127
+#: usr/local/www/diag_logs_ipsec.php:104
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/diag_logs_resolver.php:80
+#: usr/local/www/diag_logs_filter_summary.php:186
+msgid "Firewall"
+msgstr "ファイアウォール"
+
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/firewall_aliases.php:150
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110
+#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225
+#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153
+#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226
+#: usr/local/www/firewall_aliases.php:155 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_aliases.php:154
+#: usr/local/www/firewall_aliases.php:154
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/diag_backup.php:180
+#: usr/local/www/services_dnsmasq_edit.php:226 usr/local/www/fbegin.inc:128
+msgid "Aliases"
+msgstr "エイリアス"
+
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_aliases_import.php:48
+msgid "Bulk import"
+msgstr "一括インãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_aliases_import.php:64
+#: usr/local/www/firewall_aliases_import.php:64
+msgid "The alias name may only consist of the characters"
+msgstr "エイリアスåã¯ã€æ–‡å­—ã ã‘ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹"
+
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/firewall_aliases_edit.php:151
+#: usr/local/www/firewall_aliases_edit.php:145
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/firewall_aliases_edit.php:145
+msgid "An alias with this name already exists."
+msgstr "ã“ã®åå‰ã®åˆ¥åãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_import.php:74
+#: usr/local/www/firewall_aliases_edit.php:160
+#: usr/local/www/firewall_aliases_edit.php:154
+#: usr/local/www/firewall_aliases_import.php:74
+#: usr/local/www/firewall_aliases_edit.php:154
+#, php-format
+msgid "Cannot use a reserved keyword as alias name %s"
+msgstr "別å%sã¨ã—ã¦äºˆç´„キーワードを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_aliases_import.php:79
+#: usr/local/www/firewall_aliases_edit.php:165
+#: usr/local/www/firewall_aliases_edit.php:159
+#: usr/local/www/firewall_aliases_import.php:79
+#: usr/local/www/firewall_aliases_edit.php:159
+msgid "An interface description with this name already exists."
+msgstr "ã“ã®åå‰ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®èª¬æ˜Žã¯ã€ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_import.php:94
+#: usr/local/www/firewall_aliases_import.php:94
+#, php-format
+msgid "%s is not an IP address. Please correct the error to continue"
+msgstr "%sã¯ã€IPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。継続ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ã‚’修正ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/firewall_aliases_import.php:131
+#: usr/local/www/firewall_aliases_import.php:131
+msgid "Alias Import"
+msgstr "エイリアスã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_aliases_import.php:134
+#: usr/local/www/firewall_aliases_import.php:134
+msgid "Alias Name"
+msgstr "別å"
+
+#: usr/local/www/firewall_aliases_import.php:137
+#: usr/local/www/firewall_aliases_edit.php:585
+#: usr/local/www/firewall_aliases_import.php:137
+msgid ""
+"The name of the alias may only consist of the characters "a-z, A-Z and "
+"0-9"."
+msgstr "AZ 〠AZ㨠"0-9 ""エイリアスã®åå‰ãŒæ–‡å­—ã®ã¿ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。"
+
+#: usr/local/www/firewall_aliases_import.php:142
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/services_captiveportal_ip_edit.php:211
+#: usr/local/www/services_captiveportal_mac_edit.php:185
+#: usr/local/www/services_captiveportal_hostname_edit.php:186
+#: usr/local/www/system_gateways_edit.php:487
+#: usr/local/www/vpn_ipsec_phase1.php:580
+#: usr/local/www/vpn_ipsec_phase2.php:502
+#: usr/local/www/vpn_openvpn_client.php:577
+#: usr/local/www/vpn_openvpn_csc.php:346
+#: usr/local/www/vpn_openvpn_server.php:726
+#: usr/local/www/services_captiveportal_zones_edit.php:109
+#: usr/local/www/system_gateways_edit.php:522
+#: usr/local/www/vpn_openvpn_server.php:799
+#: usr/local/www/vpn_ipsec_phase2.php:528
+#: usr/local/www/vpn_openvpn_client.php:582
+#: usr/local/www/vpn_ipsec_phase1.php:593
+#: usr/local/www/services_captiveportal_hostname_edit.php:184
+#: usr/local/www/services_captiveportal_mac_edit.php:183
+#: usr/local/www/interfaces_lagg_edit.php:212
+#: usr/local/www/vpn_openvpn_csc.php:345
+#: usr/local/www/system_gateways_edit.php:622
+#: usr/local/www/services_captiveportal_ip_edit.php:209
+#: usr/local/www/vpn_openvpn_server.php:827
+#: usr/local/www/services_captiveportal_zones_edit.php:111
+#: usr/local/www/vpn_ipsec_phase2.php:630
+#: usr/local/www/vpn_openvpn_client.php:600
+#: usr/local/www/vpn_ipsec_phase1.php:592
+#: usr/local/www/system_gateways_edit.php:626
+#: usr/local/www/services_captiveportal_ip_edit.php:203
+#: usr/local/www/vpn_openvpn_client.php:619
+#: usr/local/www/interfaces_lagg_edit.php:225
+#: usr/local/www/services_captiveportal_mac_edit.php:196
+#: usr/local/www/vpn_ipsec_phase1.php:613
+#: usr/local/www/vpn_openvpn_server.php:854
+#: usr/local/www/vpn_ipsec_phase2.php:651
+#: usr/local/www/system_gateways_edit.php:628
+#: usr/local/www/system_gateways_edit.php:658
+#: usr/local/www/interfaces_lagg_edit.php:224
+#: usr/local/www/system_gateways_edit.php:659
+#: usr/local/www/services_captiveportal_ip_edit.php:203
+#: usr/local/www/services_captiveportal_zones_edit.php:109
+#: usr/local/www/vpn_openvpn_client.php:619
+#: usr/local/www/vpn_openvpn_csc.php:345
+#: usr/local/www/interfaces_lagg_edit.php:224
+#: usr/local/www/services_captiveportal_hostname_edit.php:186
+#: usr/local/www/firewall_aliases_import.php:142
+#: usr/local/www/services_captiveportal_mac_edit.php:196
+#: usr/local/www/vpn_ipsec_phase1.php:613
+#: usr/local/www/vpn_openvpn_server.php:854
+#: usr/local/www/vpn_ipsec_phase2.php:651
+msgid "You may enter a description here for your reference (not parsed)"
+msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼ˆæ§‹æ–‡è§£æžã•ã‚Œã¾ã›ã‚“)"
+
+#: usr/local/www/firewall_aliases_import.php:146
+#: usr/local/www/firewall_aliases_import.php:146
+msgid "Aliases to import"
+msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚¨ã‚¤ãƒªã‚¢ã‚¹"
+
+#: usr/local/www/firewall_aliases_import.php:148
+#: usr/local/www/firewall_aliases_import.php:148
+msgid ""
+"Paste in the aliases to import separated by a carriage return. Common "
+"examples are lists of IPs, networks, blacklists, etc."
+msgstr "「キャリッジリターンã§åŒºåˆ‡ã‚‰ã‚ŒãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹åˆ¥åã«è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚共通ã€ã®ä¾‹ã§ã‚ã‚‹ãªã©IPSã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ–ラックリストã®ä¸€è¦§è¡¨ç¤º"
+
+#: usr/local/www/firewall_aliases_import.php:149
+#: usr/local/www/firewall_aliases_import.php:149
+msgid "The list may contain only IP addresses."
+msgstr "リストã¯ã€ IPアドレスをå«ã‚“ã§ã‚‚よã„。"
+
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121
+#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131
+#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140
+#: usr/local/www/fbegin.inc:132 usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:132
+msgid "Traffic Shaper"
+msgstr "トラフィックシェー"
+
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_layer7.php:410
+#: usr/local/www/firewall_shaper_vinterface.php:375
+#: usr/local/www/firewall_shaper_wizards.php:105
+#: usr/local/www/firewall_rules_edit.php:1443
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_rules_edit.php:1514
+#: usr/local/www/firewall_shaper_vinterface.php:385
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_rules_edit.php:1529
+#: usr/local/www/firewall_shaper.php:414
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_rules_edit.php:1537
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/firewall_shaper_wizards.php:106
+#: usr/local/www/firewall_rules_edit.php:1548
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_layer7.php:410
+#: usr/local/www/firewall_shaper.php:414
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_rules_edit.php:1548
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/firewall_shaper_wizards.php:106
+msgid "Layer7"
+msgstr "レイヤ7"
+
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/firewall_shaper_layer7.php:66
+msgid "You can add new layer7 protocol patterns by simply uploading the file"
+msgstr "ã‚ãªãŸã¯ã€å˜ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’アップロードã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€æ–°ãŸãªãƒ¬ã‚¤ãƒ¤7プロトコルã®ãƒ‘ターンを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196
+#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/firewall_virtual_ip.php:249
+#: usr/local/www/firewall_virtual_ip.php:269
+#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774
+#: usr/local/www/interfaces.php:2783 usr/local/www/interfaces.php:2820
+#: usr/local/www/interfaces.php:2829 usr/local/www/firewall_virtual_ip.php:292
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/firewall_virtual_ip.php:292
+#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2806
+#: usr/local/www/interfaces.php:2815 usr/local/www/carp_status.php:189
+msgid "here"
+msgstr "ã“ã“ã«"
+
+#: usr/local/www/firewall_shaper_layer7.php:111
+#: usr/local/www/firewall_shaper_layer7.php:111
+msgid "Layer7 Rules Container not found!"
+msgstr "レイヤ7ルールコンテナãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ ï¼"
+
+#: usr/local/www/firewall_shaper_layer7.php:161
+#: usr/local/www/firewall_shaper_layer7.php:161
+msgid "Found the following repeated protocol definitions"
+msgstr "次ã®å復プロトコル定義を見ã¤ã‘ãŸ"
+
+#: usr/local/www/firewall_shaper_layer7.php:401
+#: usr/local/www/firewall_shaper_queues.php:187
+#: usr/local/www/firewall_shaper_queues.php:188
+#: usr/local/www/firewall_shaper_layer7.php:401
+#: usr/local/www/firewall_shaper_queues.php:188
+msgid "The traffic shaper configuration has been changed"
+msgstr "トラフィックシェーパã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/firewall_shaper_layer7.php:407
+#: usr/local/www/firewall_shaper_vinterface.php:372
+#: usr/local/www/firewall_shaper_wizards.php:102
+#: usr/local/www/firewall_shaper.php:409
+#: usr/local/www/firewall_shaper_queues.php:193
+#: usr/local/www/firewall_shaper_vinterface.php:382
+#: usr/local/www/firewall_shaper.php:410
+#: usr/local/www/firewall_shaper_vinterface.php:389
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_shaper_queues.php:194
+#: usr/local/www/firewall_shaper_wizards.php:103
+#: usr/local/www/firewall_shaper_layer7.php:407
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_shaper_queues.php:194
+#: usr/local/www/firewall_shaper_wizards.php:103
+msgid "By Interface"
+msgstr "インタフェースã§"
+
+#: usr/local/www/firewall_shaper_layer7.php:408
+#: usr/local/www/firewall_shaper_vinterface.php:373
+#: usr/local/www/firewall_shaper_wizards.php:103
+#: usr/local/www/firewall_shaper.php:410
+#: usr/local/www/firewall_shaper_queues.php:194
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:390
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_wizards.php:104
+#: usr/local/www/firewall_shaper_layer7.php:408
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_wizards.php:104
+msgid "By Queue"
+msgstr "キューã«ã‚ˆã£ã¦"
+
+#: usr/local/www/firewall_shaper_layer7.php:409
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:374
+#: usr/local/www/firewall_shaper_wizards.php:104
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:384
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:391
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_vinterface.php:394
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_shaper_wizards.php:105
+#: usr/local/www/firewall_shaper_layer7.php:409
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:394
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_shaper_wizards.php:105
+msgid "Limiter"
+msgstr "リミッタ"
+
+#: usr/local/www/firewall_shaper_layer7.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_shaper_wizards.php:106
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/vpn_openvpn_client.php:368
+#: usr/local/www/vpn_openvpn_csc.php:296
+#: usr/local/www/vpn_openvpn_server.php:586
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/vpn_openvpn_server.php:659
+#: usr/local/www/vpn_openvpn_client.php:373
+#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/vpn_openvpn_server.php:677
+#: usr/local/www/vpn_openvpn_client.php:381
+#: usr/local/www/vpn_openvpn_client.php:399
+#: usr/local/www/vpn_openvpn_server.php:703
+#: usr/local/www/firewall_shaper.php:415
+#: usr/local/www/firewall_shaper_vinterface.php:396
+#: usr/local/www/firewall_shaper_queues.php:198
+#: usr/local/www/firewall_shaper_wizards.php:107
+#: usr/local/www/firewall_shaper_layer7.php:411
+#: usr/local/www/firewall_shaper.php:415
+#: usr/local/www/firewall_shaper_vinterface.php:396
+#: usr/local/www/vpn_openvpn_client.php:399
+#: usr/local/www/vpn_openvpn_csc.php:295
+#: usr/local/www/firewall_shaper_queues.php:198
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_shaper_wizards.php:107
+#: usr/local/www/vpn_openvpn_server.php:703
+msgid "Wizards"
+msgstr "ウィザーズ"
+
+#: usr/local/www/firewall_shaper_layer7.php:432
+#: usr/local/www/firewall_shaper_layer7.php:432
+msgid "Create new l7 rules group"
+msgstr "æ–°ã—ã„L7ルール·グループを作æˆã™ã‚‹"
+
+#: usr/local/www/firewall_shaper_layer7.php:445
+#: usr/local/www/firewall_shaper_layer7.php:445
+msgid "Rule(s)"
+msgstr "è¦å‰‡ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰"
+
+#: usr/local/www/firewall_shaper_layer7.php:457
+#: usr/local/www/firewall_shaper_layer7.php:457
+msgid "Add one or more rules"
+msgstr "1ã¤ä»¥ä¸Šã®ãƒ«ãƒ¼ãƒ«ã‚’追加"
+
+#: usr/local/www/firewall_shaper_layer7.php:473
+#: usr/local/www/firewall_shaper_layer7.php:473
+msgid "Structure"
+msgstr "構造"
+
+#: usr/local/www/firewall_shaper_layer7.php:480
+#: usr/local/www/firewall_shaper_layer7.php:480
+msgid "Behaviour"
+msgstr "行動"
+
+#: usr/local/www/firewall_shaper_layer7.php:558
+#: usr/local/www/interfaces_groups_edit.php:315
+#: usr/local/www/firewall_aliases_edit.php:680
+#: usr/local/www/interfaces_qinq_edit.php:387
+#: usr/local/www/services_dhcp.php:855
+#: usr/local/www/services_igmpproxy_edit.php:273
+#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768
+#: usr/local/www/services_unbound_acls.php:279
+#: usr/local/www/services_dnsmasq_edit.php:271
+#: usr/local/www/system_certmanager.php:793
+#: usr/local/www/services_igmpproxy_edit.php:275
+#: usr/local/www/firewall_aliases_edit.php:685
+#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863
+#: usr/local/www/vpn_pppoe_edit.php:574
+#: usr/local/www/services_dnsmasq_edit.php:272
+#: usr/local/www/services_router_advertisements.php:358
+#: usr/local/www/interfaces_qinq_edit.php:388
+#: usr/local/www/firewall_aliases_edit.php:688
+#: usr/local/www/services_dhcp.php:1090
+#: usr/local/www/interfaces_groups_edit.php:316
+#: usr/local/www/services_dhcpv6.php:794 usr/local/www/vpn_pppoe_edit.php:577
+#: usr/local/www/services_dhcp.php:1103
+#: usr/local/www/system_certmanager.php:818
+#: usr/local/www/services_dhcpv6.php:811
+#: usr/local/www/interfaces_qinq_edit.php:391
+#: usr/local/www/firewall_shaper_layer7.php:555
+#: usr/local/www/services_router_advertisements.php:353
+#: usr/local/www/services_dhcp.php:1123
+#: usr/local/www/system_certmanager.php:820
+#: usr/local/www/firewall_aliases_edit.php:717
+#: usr/local/www/interfaces_groups_edit.php:313
+#: usr/local/www/firewall_shaper_layer7.php:555
+#: usr/local/www/services_router_advertisements.php:353
+#: usr/local/www/vpn_pppoe_edit.php:577 usr/local/www/services_dhcp.php:1123
+#: usr/local/www/system_certmanager.php:820
+#: usr/local/www/services_dhcpv6.php:811
+#: usr/local/www/interfaces_groups_edit.php:313
+#: usr/local/www/firewall_aliases_edit.php:703
+#: usr/local/www/services_igmpproxy_edit.php:275
+#: usr/local/www/services_dnsmasq_edit.php:272
+#: usr/local/www/interfaces_qinq_edit.php:388
+msgid "add another entry"
+msgstr "別ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加"
+
+#: usr/local/www/firewall_shaper_vinterface.php:102
+#: usr/local/www/firewall_shaper_vinterface.php:102
+msgid ""
+"This pipe/queue is referenced in filter rules, please remove references from "
+"there before deleting."
+msgstr "削除ã™ã‚‹å‰ã«ã€ãã“ã«ã€Œã“ã®ãƒ‘イプ/キューã¯ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ã§å‚ç…§ã•ã‚Œã¦ã‹ã‚‰å‚照を削除ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_shaper_vinterface.php:114
+#: usr/local/www/firewall_shaper_vinterface.php:114
+#, php-format
+msgid "No queue with name %s was found!"
+msgstr "åå‰%sã¨ã®ã‚­ãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠ï¼"
+
+#: usr/local/www/firewall_shaper_vinterface.php:160
+#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160
+#: usr/local/www/firewall_shaper.php:160
+#: usr/local/www/firewall_shaper_vinterface.php:160
+msgid "Could not create new queue/discipline!"
+msgstr "æ–°ã—ã„キュー/è¦å¾‹ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: usr/local/www/firewall_shaper_vinterface.php:172
+#: usr/local/www/firewall_shaper_vinterface.php:181
+#: usr/local/www/firewall_shaper_vinterface.php:190
+#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184
+#: usr/local/www/firewall_shaper.php:193
+#: usr/local/www/firewall_shaper_vinterface.php:182
+#: usr/local/www/firewall_shaper_vinterface.php:192
+#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185
+#: usr/local/www/firewall_shaper.php:194
+#: usr/local/www/firewall_shaper_vinterface.php:173
+#: usr/local/www/firewall_shaper_vinterface.php:183
+#: usr/local/www/firewall_shaper_vinterface.php:193
+#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185
+#: usr/local/www/firewall_shaper.php:194
+#: usr/local/www/firewall_shaper_vinterface.php:173
+#: usr/local/www/firewall_shaper_vinterface.php:183
+#: usr/local/www/firewall_shaper_vinterface.php:193
+msgid "Queue not found!"
+msgstr "キューãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ ï¼"
+
+#: usr/local/www/firewall_shaper_vinterface.php:235
+#: usr/local/www/firewall_shaper.php:270
+#: usr/local/www/firewall_shaper_vinterface.php:245
+#: usr/local/www/firewall_shaper.php:271
+#: usr/local/www/firewall_shaper_vinterface.php:247
+#: usr/local/www/firewall_shaper.php:271
+#: usr/local/www/firewall_shaper_vinterface.php:247
+msgid "Could not add new queue."
+msgstr "æ–°ã—ã„キューを追加ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/firewall_shaper_vinterface.php:304
+#: usr/local/www/firewall_shaper.php:346
+#: usr/local/www/firewall_shaper_vinterface.php:314
+#: usr/local/www/firewall_shaper.php:347
+#: usr/local/www/firewall_shaper_vinterface.php:316
+#: usr/local/www/firewall_shaper.php:347
+#: usr/local/www/firewall_shaper_vinterface.php:316
+msgid "Queue Actions"
+msgstr "アクションをキュー"
+
+#: usr/local/www/firewall_shaper_vinterface.php:315
+#: usr/local/www/firewall_shaper.php:357
+#: usr/local/www/firewall_shaper_vinterface.php:325
+#: usr/local/www/firewall_shaper.php:358
+#: usr/local/www/firewall_shaper_vinterface.php:327
+#: usr/local/www/firewall_shaper.php:358
+#: usr/local/www/firewall_shaper_vinterface.php:327
+msgid "Add new queue"
+msgstr "æ–°ã—ã„キューを追加ã™ã‚‹"
+
+#: usr/local/www/firewall_shaper_vinterface.php:326
+#: usr/local/www/firewall_shaper.php:367
+#: usr/local/www/firewall_shaper_vinterface.php:336
+#: usr/local/www/firewall_shaper.php:368
+#: usr/local/www/firewall_shaper_vinterface.php:338
+#: usr/local/www/firewall_shaper.php:368
+#: usr/local/www/firewall_shaper_vinterface.php:338
+msgid "Delete this queue"
+msgstr "ã“ã®ã‚­ãƒ¥ãƒ¼ã®å‰Šé™¤"
+
+#: usr/local/www/firewall_shaper_vinterface.php:328
+#: usr/local/www/firewall_shaper_vinterface.php:338
+#: usr/local/www/firewall_shaper_vinterface.php:340
+#: usr/local/www/firewall_shaper_vinterface.php:340
+msgid "Delete virtual interface"
+msgstr "仮想インターフェイスを削除ã™ã‚‹"
+
+#: usr/local/www/firewall_shaper_vinterface.php:366
+#: usr/local/www/firewall_shaper_wizards.php:96
+#: usr/local/www/firewall_shaper.php:403
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/firewall_shaper.php:404
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+msgid "The traffic shaper configuration has been changed."
+msgstr "トラフィックシェーパã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_shaper_vinterface.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:415
+#: usr/local/www/firewall_shaper_vinterface.php:415
+msgid "Create new limiter"
+msgstr "æ–°ã—ã„リミッターを作æˆ"
+
+#: usr/local/www/firewall_shaper_wizards.php:76
+#: usr/local/www/firewall_shaper_wizards.php:76
+msgid "Single Lan multi Wan"
+msgstr "å˜ä¸€ã®LANマルãƒãƒ¯ãƒ³"
+
+#: usr/local/www/firewall_shaper_wizards.php:77
+#: usr/local/www/firewall_shaper_wizards.php:77
+msgid "Single Wan multi Lan"
+msgstr "シングルワンマルãƒè˜­"
+
+#: usr/local/www/firewall_shaper_wizards.php:78
+#: usr/local/www/firewall_shaper_wizards.php:78
+msgid "Multiple Lan/Wan"
+msgstr "複数ã®LAN / WAN"
+
+#: usr/local/www/firewall_shaper_wizards.php:79
+#: usr/local/www/firewall_shaper_wizards.php:79
+msgid "Dedicated Links"
+msgstr "ã®å°‚用リンク"
+
+#: usr/local/www/firewall_shaper_wizards.php:115
+#: usr/local/www/firewall_shaper_wizards.php:116
+#: usr/local/www/firewall_shaper_wizards.php:116
+msgid "Wizard function"
+msgstr "ウィザード機能"
+
+#: usr/local/www/firewall_shaper_wizards.php:116
+#: usr/local/www/firewall_shaper_wizards.php:117
+#: usr/local/www/firewall_shaper_wizards.php:117
+msgid "Wizard Link"
+msgstr "ウィザードã®ãƒªãƒ³ã‚¯"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107
+#: usr/local/www/system.php:113 usr/local/www/system.php:265
+#: usr/local/www/services_dnsmasq.php:244
+#: usr/local/www/services_dnsmasq.php:311
+#: usr/local/www/services_dnsmasq_edit.php:80
+#: usr/local/www/services_dnsmasq_edit.php:149
+#: usr/local/www/services_dnsmasq.php:332
+#: usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:204
+#: usr/local/www/services_dnsmasq_edit.php:238
+#: usr/local/www/services_unbound.php:280
+#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114
+#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245
+#: usr/local/www/services_dnsmasq.php:333
+#: usr/local/www/services_dnsmasq_edit.php:205
+#: usr/local/www/services_dnsmasq_edit.php:239
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/system.php:107 usr/local/www/system.php:269
+#: usr/local/www/services_dnsmasq.php:270
+#: usr/local/www/services_dnsmasq.php:358
+#: usr/local/www/services_dnsmasq.php:283
+#: usr/local/www/services_dnsmasq.php:371
+#: usr/local/www/services_dnsmasq.php:347
+#: usr/local/www/services_dnsmasq.php:435 usr/local/www/system.php:107
+#: usr/local/www/system.php:269 usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:205
+#: usr/local/www/services_dnsmasq_edit.php:239
+#: usr/local/www/services_dnsmasq.php:347
+#: usr/local/www/services_dnsmasq.php:435
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+msgid "Domain"
+msgstr "ドメイン"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70
+#: usr/local/www/services_dnsmasq_edit.php:88
+#: usr/local/www/services_dnsmasq_edit.php:89
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87
+#: usr/local/www/services_dnsmasq_edit.php:89
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87
+msgid "A valid domain must be specified."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90
+msgid "A valid IP address must be specified, or # for an exclusion."
+msgstr "有効ãªIPアドレスãŒæŒ‡å®šã•ã‚ŒãŸã€ã¾ãŸã¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/services_dhcpv6.php:791
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/services_dnsmasq.php:123 usr/local/www/services_dhcp.php:1153
+#: usr/local/www/services_dnsmasq.php:125
+#: usr/local/www/services_dnsmasq.php:146 usr/local/www/services_dhcp.php:1153
+#: usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dnsmasq.php:146
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+msgid "DNS forwarder"
+msgstr "DNSフォワーダ"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+msgid "Edit Domain Override"
+msgstr "ドメイン編集オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133
+msgid "Domain to override (NOTE: this does not have to be a valid TLD!)"
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ãƒ‰ãƒ¡ã‚¤ãƒ³ï¼ˆæ³¨ï¼šã“ã‚ŒãŒæœ‰åŠ¹ãªTLD ã§ã‚ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“)"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260
+#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146
+#: usr/local/www/services_dnsmasq_edit.php:153
+#: usr/local/www/services_dnsmasq_edit.php:160
+#: usr/local/www/services_dnsmasq_edit.php:201
+#: usr/local/www/services_dnsmasq_edit.php:208
+#: usr/local/www/services_dnsmasq_edit.php:215
+#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282
+#: usr/local/www/services_dnsmasq_edit.php:202
+#: usr/local/www/services_dnsmasq_edit.php:209
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264
+#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:758
+#: usr/local/www/firewall_nat_edit.php:759 usr/local/www/system.php:264
+#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:759
+#: usr/local/www/services_dnsmasq_edit.php:202
+#: usr/local/www/services_dnsmasq_edit.php:209
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+msgid "e.g."
+msgstr "例ãˆã°"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+msgid "test"
+msgstr "テスト"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140
+msgid "IP address of the authoritative DNS server for this domain"
+msgstr "ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®æ¨©é™DNSサーãƒã®IPアドレス"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+msgid ""
+"Or enter # for an exclusion to pass through this host/subdomain to standard "
+"nameservers instead of a previous override."
+msgstr ""ã¾ãŸã¯Enter"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:106
+#: usr/local/www/firewall_virtual_ip_edit.php:415
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/firewall_aliases_edit.php:601
+#: usr/local/www/firewall_virtual_ip.php:186
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:247
+#: usr/local/www/services_captiveportal.php:777
+#: usr/local/www/services_dhcp.php:813
+#: usr/local/www/load_balancer_relay_action_edit.php:463
+#: usr/local/www/load_balancer_relay_protocol.php:135
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:201
+#: usr/local/www/services_igmpproxy.php:96
+#: usr/local/www/services_igmpproxy_edit.php:185
+#: usr/local/www/system_authservers.php:161
+#: usr/local/www/system_authservers.php:184
+#: usr/local/www/system_authservers.php:449
+#: usr/local/www/system_authservers.php:738
+#: usr/local/www/vpn_ipsec_phase2.php:423
+#: usr/local/www/vpn_ipsec_phase2.php:465
+#: usr/local/www/system_certmanager.php:762
+#: usr/local/www/load_balancer_relay_action_edit.php:462
+#: usr/local/www/services_igmpproxy_edit.php:187
+#: usr/local/www/firewall_aliases_edit.php:606
+#: usr/local/www/status_ntpd.php:111
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/load_balancer_monitor.php:124
+#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449
+#: usr/local/www/vpn_ipsec_phase2.php:491
+#: usr/local/www/firewall_virtual_ip_edit.php:403
+#: usr/local/www/load_balancer_relay_protocol_edit.php:199
+#: usr/local/www/load_balancer_relay_action_edit.php:460
+#: usr/local/www/load_balancer_monitor_edit.php:245
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/status_ntpd.php:127
+#: usr/local/www/services_captiveportal.php:817
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_relay_protocol.php:133
+#: usr/local/www/services_dhcp.php:1048
+#: usr/local/www/load_balancer_relay_action.php:139
+#: usr/local/www/vpn_ipsec_phase2.php:515
+#: usr/local/www/vpn_ipsec_phase2.php:551
+#: usr/local/www/vpn_ipsec_phase2.php:593
+#: usr/local/www/firewall_virtual_ip_edit.php:355
+#: usr/local/www/firewall_virtual_ip.php:190
+#: usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185
+#: usr/local/www/system_authservers.php:454
+#: usr/local/www/system_authservers.php:744
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_virtual_ip_edit.php:347
+#: usr/local/www/services_dhcp.php:1061
+#: usr/local/www/system_certmanager.php:787
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/system_authservers.php:461
+#: usr/local/www/system_authservers.php:760
+#: usr/local/www/services_captiveportal.php:805
+#: usr/local/www/vpn_ipsec_phase2.php:537
+#: usr/local/www/vpn_ipsec_phase2.php:572
+#: usr/local/www/vpn_ipsec_phase2.php:614
+#: usr/local/www/firewall_virtual_ip_edit.php:367
+#: usr/local/www/services_dhcp.php:1081
+#: usr/local/www/system_certmanager.php:788 usr/local/www/status_ntpd.php:133
+#: usr/local/www/services_captiveportal.php:821
+#: usr/local/www/firewall_aliases_edit.php:640
+#: usr/local/www/firewall_virtual_ip.php:227
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:199
+#: usr/local/www/firewall_virtual_ip.php:227
+#: usr/local/www/firewall_virtual_ip_edit.php:106
+#: usr/local/www/firewall_virtual_ip_edit.php:367
+#: usr/local/www/load_balancer_relay_protocol.php:133
+#: usr/local/www/load_balancer_relay_action.php:139
+#: usr/local/www/services_dhcp.php:1081
+#: usr/local/www/system_certmanager.php:788
+#: usr/local/www/load_balancer_relay_action_edit.php:460
+#: usr/local/www/status_ntpd.php:133
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:245
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/system_authservers.php:461
+#: usr/local/www/system_authservers.php:760
+#: usr/local/www/services_captiveportal.php:821
+#: usr/local/www/firewall_aliases_edit.php:626
+#: usr/local/www/services_igmpproxy_edit.php:187
+#: usr/local/www/services_igmpproxy.php:96
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/vpn_ipsec_phase2.php:537
+#: usr/local/www/vpn_ipsec_phase2.php:572
+#: usr/local/www/vpn_ipsec_phase2.php:614
+msgid "Type"
+msgstr "タイプ"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:111
+#: usr/local/www/diag_logs_settings.php:88
+#: usr/local/www/services_dhcp_edit.php:126
+#: usr/local/www/services_dnsmasq_edit.php:91
+#: usr/local/www/services_dnsmasq_edit.php:92
+#: usr/local/www/services_dhcp_edit.php:128
+#: usr/local/www/firewall_virtual_ip_edit.php:114
+#: usr/local/www/services_dhcp_edit.php:162
+#: usr/local/www/firewall_virtual_ip_edit.php:115
+#: usr/local/www/services_dhcp_edit.php:162
+#: usr/local/www/firewall_virtual_ip_edit.php:115
+#: usr/local/www/services_dnsmasq_edit.php:92
+msgid "A valid IP address must be specified."
+msgstr "有効ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:116
+#: usr/local/www/firewall_virtual_ip_edit.php:119
+#: usr/local/www/firewall_virtual_ip_edit.php:123
+#: usr/local/www/firewall_virtual_ip_edit.php:123
+msgid ""
+"The interface chosen for the VIP has no IPv4 or IPv6 address configured so "
+"it cannot be used as a parent for the VIP."
+msgstr "「 VIPã®ãŸã‚ã«é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«ã¯IPv4アドレスをæŒã£ã¦ã„ãªã„ã‹ã€è¨­å®šã•ã‚ŒãŸIPv6アドレスã¯ã€ãã®ã€Œãã‚Œã¯ã€VIPã®è¦ªã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:118
+#: usr/local/www/firewall_virtual_ip_edit.php:121
+#, php-format
+msgid "The %s IP address may not be used in a virtual entry."
+msgstr "%s IPアドレスã¯ã€ä»®æƒ³ã‚¨ãƒ³ãƒˆãƒªã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:123
+#: usr/local/www/firewall_virtual_ip_edit.php:126
+msgid "The /32 subnet mask is invalid for CARP IPs."
+msgstr "/ 32サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:127
+#: usr/local/www/firewall_virtual_ip_edit.php:130
+msgid "The /128 subnet mask is invalid for CARP IPs."
+msgstr "/ 128サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:135
+#: usr/local/www/firewall_virtual_ip_edit.php:138
+msgid "There is already a virtual IP entry for the specified IP address."
+msgstr "指定ã—ãŸIPアドレスã®ä»®æƒ³IPエントリãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:150
+#, php-format
+msgid "VHID %s is already in use. Pick a unique number."
+msgstr "VHIDã®%sã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚一æ„ã®ç•ªå·ã‚’é¸ã¶ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:154
+#: usr/local/www/firewall_virtual_ip_edit.php:157
+#: usr/local/www/firewall_virtual_ip_edit.php:156
+#: usr/local/www/firewall_virtual_ip_edit.php:148
+#: usr/local/www/firewall_virtual_ip_edit.php:164
+#: usr/local/www/firewall_virtual_ip_edit.php:164
+msgid ""
+"You must specify a CARP password that is shared between the two VHID members."
+msgstr ""ã‚ãªãŸã¯2 VHIDメンãƒãƒ¼é–“ã§å…±æœ‰ã•ã‚Œã¦ã„ã‚‹CARPã®ãƒ‘スワードを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:161
+#: usr/local/www/firewall_virtual_ip_edit.php:170
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:164
+#: usr/local/www/firewall_virtual_ip_edit.php:173
+#: usr/local/www/firewall_virtual_ip_edit.php:185
+#: usr/local/www/firewall_virtual_ip_edit.php:163
+#: usr/local/www/firewall_virtual_ip_edit.php:172
+#: usr/local/www/firewall_virtual_ip_edit.php:184
+#: usr/local/www/firewall_virtual_ip_edit.php:155
+#: usr/local/www/firewall_virtual_ip_edit.php:176
+#: usr/local/www/firewall_virtual_ip_edit.php:178
+#: usr/local/www/firewall_virtual_ip_edit.php:197
+#: usr/local/www/firewall_virtual_ip_edit.php:178
+#: usr/local/www/firewall_virtual_ip_edit.php:197
+#, php-format
+msgid ""
+"Sorry, we could not locate an interface with a matching subnet for %s. "
+"Please add an IP alias in this subnet on this interface."
+msgstr "「申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€æˆ‘々ã¯%s.用一致ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã“ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã®IPエイリアスを追加ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:174
+#: usr/local/www/firewall_virtual_ip_edit.php:177
+#: usr/local/www/firewall_virtual_ip_edit.php:176
+#: usr/local/www/firewall_virtual_ip_edit.php:168
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+msgid "A CARP parent interface can only be used with IP Alias type Virtual IPs."
+msgstr "VIPã“ã®ç¨®ã®ã‚³ã‚¤è¦ªãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:188
+#: usr/local/www/firewall_virtual_ip_edit.php:191
+#: usr/local/www/firewall_virtual_ip_edit.php:190
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:203
+#: usr/local/www/firewall_virtual_ip_edit.php:203
+msgid "For this type of VIP, a CARP parent is not allowed."
+msgstr "VIPã®ã“ã®ç¨®ã®ã‚³ã‚¤ã®è¦ªãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:202
+msgid "This entry cannot be modified because it is still referenced by CARP"
+msgstr "ãã‚Œã¯ã¾ã CARPã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+msgid "Virtual IP Address"
+msgstr "仮想IPアドレス"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:300
+#: usr/local/www/firewall_virtual_ip_edit.php:302
+#: usr/local/www/firewall_virtual_ip_edit.php:288
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/firewall_virtual_ip_edit.php:287
+#: usr/local/www/firewall_virtual_ip_edit.php:289
+#: usr/local/www/firewall_virtual_ip_edit.php:279
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/firewall_virtual_ip_edit.php:299
+#: usr/local/www/firewall_virtual_ip_edit.php:301
+#: usr/local/www/firewall_virtual_ip_edit.php:299
+#: usr/local/www/firewall_virtual_ip_edit.php:301
+msgid ""
+"This must be the network's subnet mask. It does not specify a CIDR range."
+msgstr "「ã“ã‚Œã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯ã€ CIDR範囲を指定ã—ã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:301
+#: usr/local/www/firewall_virtual_ip_edit.php:289
+#: usr/local/www/firewall_virtual_ip_edit.php:288
+#: usr/local/www/firewall_virtual_ip_edit.php:280
+#: usr/local/www/firewall_virtual_ip_edit.php:300
+#: usr/local/www/firewall_virtual_ip_edit.php:300
+msgid "This is a CIDR block of proxy ARP addresses."
+msgstr "ã“ã‚Œã¯ã€ãƒ—ロキシARPã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®CIDRブロックã§ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:400
+#: usr/local/www/firewall_virtual_ip_edit.php:352
+#: usr/local/www/firewall_virtual_ip_edit.php:344
+#: usr/local/www/firewall_virtual_ip_edit.php:364
+#: usr/local/www/firewall_virtual_ip_edit.php:364
+msgid "Edit Virtual IP"
+msgstr "仮想IPを編集"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:418
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+#: usr/local/www/firewall_virtual_ip_edit.php:362
+#: usr/local/www/firewall_virtual_ip_edit.php:354
+#: usr/local/www/firewall_virtual_ip_edit.php:374
+#: usr/local/www/firewall_virtual_ip_edit.php:374
+msgid "Proxy ARP"
+msgstr "プロキシARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:420
+#: usr/local/www/carp_status.php:100
+#: usr/local/www/firewall_virtual_ip_edit.php:408
+#: usr/local/www/carp_status.php:92
+#: usr/local/www/firewall_virtual_ip_edit.php:360
+#: usr/local/www/firewall_virtual_ip_edit.php:352
+#: usr/local/www/firewall_virtual_ip_edit.php:372
+#: usr/local/www/firewall_virtual_ip_edit.php:372
+#: usr/local/www/carp_status.php:92
+msgid "CARP"
+msgstr "CARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:422
+#: usr/local/www/firewall_virtual_ip_edit.php:410
+#: usr/local/www/firewall_virtual_ip_edit.php:364
+#: usr/local/www/firewall_virtual_ip_edit.php:356
+#: usr/local/www/firewall_virtual_ip_edit.php:376
+#: usr/local/www/firewall_virtual_ip_edit.php:376
+msgid "Other"
+msgstr "ãã®ä»–"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:358
+#: usr/local/www/firewall_virtual_ip_edit.php:350
+#: usr/local/www/firewall_virtual_ip_edit.php:370
+#: usr/local/www/firewall_virtual_ip_edit.php:370
+msgid "IP Alias"
+msgstr "IPエイリアス"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:435
+#: usr/local/www/diag_packet_capture.php:119
+#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:126
+#: usr/local/www/interfaces_bridge.php:107
+#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107
+#: usr/local/www/interfaces_groups_edit.php:274
+#: usr/local/www/firewall_nat_1to1.php:104
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+#: usr/local/www/firewall_nat_1to1_edit.php:280
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:185
+#: usr/local/www/firewall_nat_edit.php:476
+#: usr/local/www/firewall_nat_out.php:341
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:417
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/interfaces_assign.php:420
+#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128
+#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108
+#: usr/local/www/interfaces_qinq.php:116
+#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101
+#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95
+#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179
+#: usr/local/www/diag_arp.php:316
+#: usr/local/www/services_igmpproxy_edit.php:161
+#: usr/local/www/system_gateways.php:153
+#: usr/local/www/system_gateways_edit.php:98
+#: usr/local/www/system_gateways_edit.php:347
+#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304
+#: usr/local/www/vpn_openvpn_client.php:451
+#: usr/local/www/vpn_openvpn_server.php:691
+#: usr/local/www/vpn_pppoe_edit.php:372
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42
+#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:166
+#: usr/local/www/services_dhcpv6_relay.php:73
+#: usr/local/www/firewall_nat_out.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:287
+#: usr/local/www/firewall_nat_npt_edit.php:171
+#: usr/local/www/status_graph.php:177
+#: usr/local/www/firewall_nat_out_edit.php:430
+#: usr/local/www/firewall_rules_edit.php:760
+#: usr/local/www/services_igmpproxy_edit.php:163
+#: usr/local/www/services_captiveportal.php:147
+#: usr/local/www/system_gateways_edit.php:99
+#: usr/local/www/system_gateways_edit.php:353
+#: usr/local/www/services_dyndns.php:108
+#: usr/local/www/vpn_openvpn_server.php:764
+#: usr/local/www/diag_packet_capture.php:123
+#: usr/local/www/firewall_nat_edit.php:483
+#: usr/local/www/vpn_openvpn_client.php:456
+#: usr/local/www/firewall_virtual_ip_edit.php:423
+#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:285
+#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102
+#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117
+#: usr/local/www/interfaces_ppps.php:109
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108
+#: usr/local/www/interfaces_wireless.php:107
+#: usr/local/www/services_captiveportal.php:153
+#: usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:459
+#: usr/local/www/interfaces_assign.php:414
+#: usr/local/www/vpn_openvpn_server.php:782
+#: usr/local/www/interfaces_groups_edit.php:275
+#: usr/local/www/diag_packet_capture.php:181
+#: usr/local/www/interfaces_vlan.php:109
+#: usr/local/www/firewall_nat_edit.php:482
+#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305
+#: usr/local/www/firewall_virtual_ip_edit.php:368
+#: usr/local/www/interfaces_gif.php:107
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/vpn_l2tp.php:308
+#: usr/local/www/vpn_pppoe.php:103 usr/local/www/vpn_openvpn_client.php:482
+#: usr/local/www/diag_testport.php:143
+#: usr/local/www/firewall_rules_edit.php:763
+#: usr/local/www/interfaces_qinq.php:120
+#: usr/local/www/firewall_virtual_ip.php:203
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196
+#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115
+#: usr/local/www/firewall_virtual_ip_edit.php:360
+#: usr/local/www/interfaces_bridge.php:114
+#: usr/local/www/interfaces_wireless.php:109
+#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:434
+#: usr/local/www/vpn_openvpn_server.php:808
+#: usr/local/www/services_dyndns.php:89 usr/local/www/interfaces_gif.php:111
+#: usr/local/www/system_gateways_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:775
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:215
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:489 usr/local/www/status_graph.php:206
+#: usr/local/www/firewall_virtual_ip_edit.php:380
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:446
+#: usr/local/www/services_dyndns.php:85
+#: usr/local/www/system_gateways_edit.php:491
+#: usr/local/www/firewall_virtual_ip.php:226
+#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/system_routes.php:148
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_npt_edit.php:169
+#: usr/local/www/firewall_nat_1to1_edit.php:286 usr/local/www/diag_ndp.php:132
+#: usr/local/www/vpn_l2tp.php:308 usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:491 usr/local/www/vpn_pppoe.php:103
+#: usr/local/www/diag_arp.php:316 usr/local/www/vpn_openvpn_client.php:482
+#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161
+#: usr/local/www/firewall_rules_edit.php:775
+#: usr/local/www/interfaces_qinq.php:120
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:215
+#: usr/local/www/firewall_virtual_ip.php:226
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/status_graph.php:206
+#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:126
+#: usr/local/www/firewall_virtual_ip_edit.php:380
+#: usr/local/www/services_dhcpv6_relay.php:73
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/interfaces_bridge.php:114
+#: usr/local/www/interfaces_wireless.php:109
+#: usr/local/www/system_routes.php:148 usr/local/www/vpn_pppoe_edit.php:376
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/interfaces_ppps.php:109
+#: usr/local/www/firewall_nat_npt.php:104
+#: usr/local/www/firewall_nat_1to1.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:169
+#: usr/local/www/interfaces_groups_edit.php:275
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/services_igmpproxy_edit.php:163
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+#: usr/local/www/firewall_nat_1to1_edit.php:286
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42
+#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112
+#: usr/local/www/system_gateways.php:153
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:446
+#: usr/local/www/vpn_openvpn_server.php:808
+#: usr/local/www/services_dyndns.php:85
+#: usr/local/www/services_dhcp_relay.php:72
+#: usr/local/www/interfaces_gif.php:111
+#: usr/local/www/interfaces_assign.php:420
+msgid "Interface"
+msgstr "インターフェース"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:452
+#: usr/local/www/firewall_virtual_ip_edit.php:440
+#: usr/local/www/firewall_virtual_ip_edit.php:385
+#: usr/local/www/firewall_virtual_ip_edit.php:377
+#: usr/local/www/firewall_virtual_ip_edit.php:397
+#: usr/local/www/firewall_virtual_ip_edit.php:397
+msgid "IP Address(es)"
+msgstr "IPアドレス( ES )"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:456
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_out_edit.php:472
+#: usr/local/www/firewall_nat_out_edit.php:506
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules_edit.php:958
+#: usr/local/www/firewall_nat_1to1_edit.php:345
+#: usr/local/www/firewall_nat_1to1_edit.php:400
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_nat_out_edit.php:519
+#: usr/local/www/firewall_rules_edit.php:900
+#: usr/local/www/firewall_rules_edit.php:993
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_virtual_ip_edit.php:444
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+#: usr/local/www/firewall_nat_1to1_edit.php:398
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_virtual_ip_edit.php:389
+#: usr/local/www/firewall_rules_edit.php:903
+#: usr/local/www/firewall_rules_edit.php:1002
+#: usr/local/www/firewall_nat_edit.php:546
+#: usr/local/www/firewall_nat_edit.php:635
+#: usr/local/www/firewall_virtual_ip_edit.php:381
+#: usr/local/www/firewall_nat_out_edit.php:489
+#: usr/local/www/firewall_nat_out_edit.php:523
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_virtual_ip_edit.php:401
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_nat_out_edit.php:535
+#: usr/local/www/firewall_rules_edit.php:914
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_nat_1to1_edit.php:344
+#: usr/local/www/firewall_nat_1to1_edit.php:399
+#: usr/local/www/firewall_nat_out_edit.php:536
+#: usr/local/www/firewall_rules_edit.php:914
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_virtual_ip_edit.php:401
+#: usr/local/www/firewall_nat_1to1_edit.php:344
+#: usr/local/www/firewall_nat_1to1_edit.php:399
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_nat_out_edit.php:536
+msgid "Type:"
+msgstr "タイプ:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:459
+#: usr/local/www/firewall_virtual_ip_edit.php:447
+#: usr/local/www/firewall_virtual_ip_edit.php:392
+#: usr/local/www/firewall_virtual_ip_edit.php:384
+#: usr/local/www/firewall_virtual_ip_edit.php:404
+#: usr/local/www/firewall_virtual_ip_edit.php:404
+msgid "Single address"
+msgstr "å˜ä¸€ã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:452
+#: usr/local/www/firewall_aliases_edit.php:624
+#: usr/local/www/firewall_nat_1to1_edit.php:345
+#: usr/local/www/firewall_nat_1to1_edit.php:400
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_nat_out_edit.php:476
+#: usr/local/www/firewall_nat_out_edit.php:511
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408
+#: usr/local/www/services_igmpproxy_edit.php:223
+#: usr/local/www/vpn_ipsec_phase2.php:428
+#: usr/local/www/vpn_ipsec_phase2.php:470
+#: usr/local/www/services_unbound_acls.php:236
+#: usr/local/www/firewall_nat_1to1_edit.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:407
+#: usr/local/www/firewall_nat_out_edit.php:489
+#: usr/local/www/firewall_nat_out_edit.php:524
+#: usr/local/www/firewall_rules_edit.php:907
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/services_igmpproxy_edit.php:225
+#: usr/local/www/firewall_aliases_edit.php:455
+#: usr/local/www/firewall_aliases_edit.php:629
+#: usr/local/www/vpn_ipsec_phase2.php:454
+#: usr/local/www/vpn_ipsec_phase2.php:496
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_virtual_ip_edit.php:449
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/vpn_ipsec_mobile.php:433
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/firewall_aliases_edit.php:632
+#: usr/local/www/vpn_ipsec_phase2.php:520
+#: usr/local/www/vpn_ipsec_phase2.php:556
+#: usr/local/www/vpn_ipsec_phase2.php:598
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_virtual_ip_edit.php:394
+#: usr/local/www/firewall_rules_edit.php:916
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:553
+#: usr/local/www/firewall_nat_edit.php:642
+#: usr/local/www/firewall_virtual_ip_edit.php:386
+#: usr/local/www/system_routes.php:130
+#: usr/local/www/firewall_nat_out_edit.php:493
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/vpn_ipsec_phase2.php:577
+#: usr/local/www/vpn_ipsec_phase2.php:619
+#: usr/local/www/firewall_rules_edit.php:928
+#: usr/local/www/firewall_rules_edit.php:1028
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+#: usr/local/www/firewall_aliases_edit.php:479
+#: usr/local/www/firewall_aliases_edit.php:663
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:540
+#: usr/local/www/firewall_rules_edit.php:927
+#: usr/local/www/firewall_rules_edit.php:1027
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655 usr/local/www/system_routes.php:146
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:406
+#: usr/local/www/firewall_nat_out_edit.php:541
+#: usr/local/www/firewall_rules_edit.php:927
+#: usr/local/www/firewall_rules_edit.php:1027
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+#: usr/local/www/system_routes.php:146
+#: usr/local/www/firewall_aliases_edit.php:465
+#: usr/local/www/firewall_aliases_edit.php:649
+#: usr/local/www/services_igmpproxy_edit.php:225
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:406
+#: usr/local/www/vpn_ipsec_mobile.php:433
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:541
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/vpn_ipsec_phase2.php:577
+#: usr/local/www/vpn_ipsec_phase2.php:619
+msgid "Network"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_nat_1to1_edit.php:367
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_nat_edit.php:575
+#: usr/local/www/firewall_nat_edit.php:685
+#: usr/local/www/firewall_nat_out_edit.php:479
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:542
+#: usr/local/www/firewall_rules_edit.php:895
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/vpn_ipsec_phase2.php:440
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_1to1_edit.php:374
+#: usr/local/www/firewall_nat_1to1_edit.php:429
+#: usr/local/www/firewall_nat_npt_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:249
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1023
+#: usr/local/www/vpn_ipsec_phase2.php:466
+#: usr/local/www/firewall_nat_edit.php:582
+#: usr/local/www/firewall_nat_edit.php:692
+#: usr/local/www/firewall_virtual_ip_edit.php:455
+#: usr/local/www/firewall_nat_1to1_edit.php:372
+#: usr/local/www/firewall_nat_1to1_edit.php:427
+#: usr/local/www/firewall_nat_npt_edit.php:220
+#: usr/local/www/firewall_nat_npt_edit.php:248
+#: usr/local/www/vpn_ipsec_phase2.php:532
+#: usr/local/www/vpn_ipsec_phase2.php:568
+#: usr/local/www/firewall_nat_edit.php:581
+#: usr/local/www/firewall_nat_edit.php:691
+#: usr/local/www/firewall_virtual_ip_edit.php:400
+#: usr/local/www/firewall_rules_edit.php:939
+#: usr/local/www/firewall_rules_edit.php:1038
+#: usr/local/www/firewall_nat_edit.php:576
+#: usr/local/www/firewall_nat_edit.php:686
+#: usr/local/www/firewall_virtual_ip_edit.php:392
+#: usr/local/www/firewall_nat_out_edit.php:496
+#: usr/local/www/firewall_nat_out_edit.php:532
+#: usr/local/www/firewall_nat_out_edit.php:559
+#: usr/local/www/vpn_ipsec_phase2.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:589
+#: usr/local/www/firewall_rules_edit.php:951
+#: usr/local/www/firewall_rules_edit.php:1051
+#: usr/local/www/firewall_nat_edit.php:588
+#: usr/local/www/firewall_nat_edit.php:698
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_nat_out_edit.php:508
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:571
+#: usr/local/www/firewall_rules_edit.php:950
+#: usr/local/www/firewall_rules_edit.php:1050
+#: usr/local/www/firewall_nat_edit.php:589
+#: usr/local/www/firewall_nat_edit.php:699
+#: usr/local/www/firewall_nat_npt_edit.php:219
+#: usr/local/www/firewall_nat_npt_edit.php:247
+#: usr/local/www/firewall_nat_1to1_edit.php:373
+#: usr/local/www/firewall_nat_1to1_edit.php:428
+#: usr/local/www/firewall_nat_out_edit.php:510
+#: usr/local/www/firewall_nat_out_edit.php:545
+#: usr/local/www/firewall_rules_edit.php:950
+#: usr/local/www/firewall_rules_edit.php:1050
+#: usr/local/www/firewall_nat_edit.php:589
+#: usr/local/www/firewall_nat_edit.php:699
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_nat_npt_edit.php:219
+#: usr/local/www/firewall_nat_npt_edit.php:247
+#: usr/local/www/firewall_nat_1to1_edit.php:373
+#: usr/local/www/firewall_nat_1to1_edit.php:428
+#: usr/local/www/firewall_nat_out_edit.php:510
+#: usr/local/www/firewall_nat_out_edit.php:545
+#: usr/local/www/firewall_nat_out_edit.php:571
+#: usr/local/www/vpn_ipsec_phase2.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:589
+msgid "Address:"
+msgstr "ä½æ‰€ï¼š"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:404
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+msgid "Expansion:"
+msgstr "拡大:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:499
+#: usr/local/www/firewall_virtual_ip_edit.php:487
+#: usr/local/www/firewall_virtual_ip_edit.php:432
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:444
+#: usr/local/www/firewall_virtual_ip_edit.php:444
+msgid "Virtual IP Password"
+msgstr "仮想IPパスワード"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/firewall_virtual_ip_edit.php:489
+#: usr/local/www/firewall_virtual_ip_edit.php:434
+#: usr/local/www/firewall_virtual_ip_edit.php:426
+#: usr/local/www/firewall_virtual_ip_edit.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:446
+msgid "Enter the VHID group password."
+msgstr "VHIDグループã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:505
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:438
+#: usr/local/www/firewall_virtual_ip_edit.php:430
+#: usr/local/www/firewall_virtual_ip_edit.php:450
+#: usr/local/www/firewall_virtual_ip_edit.php:450
+msgid "VHID Group"
+msgstr "VHIDグループ"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:513
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/firewall_virtual_ip_edit.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:438
+#: usr/local/www/firewall_virtual_ip_edit.php:458
+#: usr/local/www/firewall_virtual_ip_edit.php:458
+msgid "Enter the VHID group that the machines will share"
+msgstr "マシンãŒå…±æœ‰ã™ã‚‹VHIDグループを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:517
+#: usr/local/www/firewall_virtual_ip_edit.php:505
+#: usr/local/www/firewall_virtual_ip_edit.php:450
+#: usr/local/www/firewall_virtual_ip_edit.php:442
+#: usr/local/www/firewall_virtual_ip_edit.php:462
+#: usr/local/www/firewall_virtual_ip_edit.php:462
+msgid "Advertising Frequency"
+msgstr "広告頻度"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/firewall_virtual_ip_edit.php:522
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_virtual_ip_edit.php:459
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+msgid ""
+"The frequency that this machine will advertise. 0 means usually master. "
+"Otherwise the lowest combination of both values in the cluster determines "
+"the master."
+msgstr "「ã“ã®ãƒžã‚·ãƒ³ãŒåºƒå‘Šã™ã‚‹ã“ã¨ã‚’周波数。 0ã¯é€šå¸¸ã®ãƒžã‚¹ã‚¿ãƒ¼ã‚’æ„味ã™ã‚‹ã€ãã†ã§ãªã„å ´åˆã¯ã€ã‚¯ãƒ©ã‚¹ã‚¿å†…ã®ä¸¡æ–¹ã®å€¤ã®æœ€ã‚‚低ã„組ã¿åˆã‚ã›ã¯"マスターãŒæ±ºå®šã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:557
+#: usr/local/www/diag_logs_settings.php:326
+#: usr/local/www/diag_packet_capture.php:195
+#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210
+#: usr/local/www/interfaces_bridge.php:144
+#: usr/local/www/interfaces_bridge_edit.php:446
+#: usr/local/www/interfaces_bridge_edit.php:490
+#: usr/local/www/interfaces_bridge_edit.php:534
+#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133
+#: usr/local/www/interfaces_groups.php:148
+#: usr/local/www/firewall_aliases.php:229
+#: usr/local/www/firewall_nat_1to1.php:179
+#: usr/local/www/firewall_nat_out.php:459
+#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655
+#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845
+#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188
+#: usr/local/www/interfaces_lagg.php:138
+#: usr/local/www/interfaces_ppps_edit.php:620
+#: usr/local/www/interfaces_qinq.php:151
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/services_captiveportal.php:929
+#: usr/local/www/services_captiveportal_filemanager.php:215
+#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134
+#: usr/local/www/services_captiveportal_ip.php:170
+#: usr/local/www/services_captiveportal_mac.php:190
+#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715
+#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214
+#: usr/local/www/services_captiveportal_hostname.php:171
+#: usr/local/www/services_captiveportal_vouchers.php:603
+#: usr/local/www/diag_routes.php:72
+#: usr/local/www/status_rrd_graph_settings.php:236
+#: usr/local/www/services_dyndns_edit.php:189
+#: usr/local/www/services_dyndns_edit.php:245
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_rfc2136_edit.php:209
+#: usr/local/www/system_advanced_admin.php:289
+#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451
+#: usr/local/www/services_dhcpv6.php:789
+#: usr/local/www/diag_logs_settings.php:333
+#: usr/local/www/services_captiveportal_vouchers.php:610
+#: usr/local/www/services_dyndns_edit.php:272
+#: usr/local/www/services_dyndns_edit.php:376
+#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199
+#: usr/local/www/status_rrd_graph_settings.php:237
+#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736
+#: usr/local/www/services_unbound.php:253
+#: usr/local/www/services_captiveportal.php:974
+#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728
+#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914
+#: usr/local/www/load_balancer_virtual_server_edit.php:278
+#: usr/local/www/interfaces_bridge_edit.php:455
+#: usr/local/www/interfaces_bridge_edit.php:499
+#: usr/local/www/interfaces_bridge_edit.php:543
+#: usr/local/www/firewall_aliases.php:232
+#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023
+#: usr/local/www/firewall_virtual_ip_edit.php:545
+#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884
+#: usr/local/www/diag_logs_settings.php:353
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:624
+#: usr/local/www/firewall_nat_out.php:471
+#: usr/local/www/services_captiveportal_ip.php:168
+#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222
+#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135
+#: usr/local/www/services_captiveportal_mac.php:188
+#: usr/local/www/interfaces_bridge.php:145
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces_lagg.php:139
+#: usr/local/www/services_captiveportal_hostname.php:169
+#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73
+#: usr/local/www/system_gateway_groups.php:196
+#: usr/local/www/services_captiveportal.php:970
+#: usr/local/www/services_captiveportal_filemanager.php:212
+#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932
+#: usr/local/www/services_dhcp.php:1118
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+#: usr/local/www/interfaces_bridge_edit.php:456
+#: usr/local/www/interfaces_bridge_edit.php:500
+#: usr/local/www/interfaces_bridge_edit.php:544
+#: usr/local/www/firewall_aliases.php:284
+#: usr/local/www/diag_packet_capture.php:262
+#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011
+#: usr/local/www/vpn_l2tp.php:452
+#: usr/local/www/firewall_virtual_ip_edit.php:490
+#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144
+#: usr/local/www/firewall_virtual_ip.php:247
+#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815
+#: usr/local/www/vpn_l2tp.php:455 usr/local/www/services_dyndns_edit.php:276
+#: usr/local/www/services_dyndns_edit.php:380
+#: usr/local/www/interfaces_qinq.php:155
+#: usr/local/www/interfaces_ppps_edit.php:627
+#: usr/local/www/firewall_virtual_ip.php:267
+#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141
+#: usr/local/www/firewall_virtual_ip_edit.php:482
+#: usr/local/www/diag_ipsec.php:223 usr/local/www/interfaces_bridge.php:151
+#: usr/local/www/services_captiveportal_vouchers.php:633
+#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921
+#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131
+#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832
+#: usr/local/www/firewall_nat_out.php:468
+#: usr/local/www/services_captiveportal.php:972
+#: usr/local/www/diag_backup.php:741
+#: usr/local/www/interfaces_bridge_edit.php:457
+#: usr/local/www/interfaces_bridge_edit.php:501
+#: usr/local/www/interfaces_bridge_edit.php:545
+#: usr/local/www/services_dnsmasq.php:240
+#: usr/local/www/services_captiveportal_mac.php:198
+#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gif.php:137
+#: usr/local/www/interfaces.php:2038
+#: usr/local/www/services_dyndns_edit.php:278
+#: usr/local/www/services_dyndns_edit.php:388
+#: usr/local/www/firewall_aliases.php:287
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/diag_packet_capture.php:279
+#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:966
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/firewall_nat_out.php:475
+#: usr/local/www/services_captiveportal.php:988
+#: usr/local/www/services_dnsmasq.php:253
+#: usr/local/www/services_dyndns.php:177
+#: usr/local/www/system_gateway_groups.php:205
+#: usr/local/www/interfaces.php:2084
+#: usr/local/www/interfaces_ppps_edit.php:625
+#: usr/local/www/firewall_virtual_ip.php:290
+#: usr/local/www/firewall_aliases.php:288 usr/local/www/system_routes.php:219
+#: usr/local/www/firewall_nat_out.php:474
+#: usr/local/www/interfaces_bridge_edit.php:461
+#: usr/local/www/interfaces_bridge_edit.php:505
+#: usr/local/www/interfaces_bridge_edit.php:549
+#: usr/local/www/services_dnsmasq.php:317 usr/local/www/interfaces.php:2073
+#: usr/local/www/vpn_l2tp.php:455 usr/local/www/diag_logs_settings.php:353
+#: usr/local/www/firewall_schedule.php:240
+#: usr/local/www/services_dyndns_edit.php:278
+#: usr/local/www/services_dyndns_edit.php:388
+#: usr/local/www/services_wol.php:210
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+#: usr/local/www/services_captiveportal_ip.php:168
+#: usr/local/www/interfaces_qinq.php:155
+#: usr/local/www/interfaces_ppps_edit.php:625
+#: usr/local/www/firewall_virtual_ip.php:290
+#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141
+#: usr/local/www/firewall_aliases.php:288
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/diag_ipsec.php:223
+#: usr/local/www/status_rrd_graph_settings.php:237
+#: usr/local/www/diag_packet_capture.php:279 usr/local/www/diag_routes.php:73
+#: usr/local/www/interfaces_bridge.php:151
+#: usr/local/www/services_captiveportal_vouchers.php:638
+#: usr/local/www/system_routes.php:219 usr/local/www/services_dhcp.php:941
+#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcp.php:1151
+#: usr/local/www/diag_ipsec_spd.php:144
+#: usr/local/www/interfaces_groups.php:148
+#: usr/local/www/services_captiveportal_hostname.php:169
+#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832
+#: usr/local/www/firewall_nat_out.php:474
+#: usr/local/www/services_captiveportal_filemanager.php:212
+#: usr/local/www/firewall_nat_1to1.php:179
+#: usr/local/www/services_captiveportal.php:988
+#: usr/local/www/diag_backup.php:741
+#: usr/local/www/interfaces_bridge_edit.php:461
+#: usr/local/www/interfaces_bridge_edit.php:505
+#: usr/local/www/interfaces_bridge_edit.php:549
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_rfc2136_edit.php:209
+#: usr/local/www/services_dnsmasq.php:317
+#: usr/local/www/services_captiveportal_mac.php:198
+#: usr/local/www/interfaces_gre.php:138 usr/local/www/diag_ipsec_sad.php:135
+#: usr/local/www/services_dyndns.php:177 usr/local/www/interfaces_gif.php:137
+#: usr/local/www/system_gateway_groups.php:205
+#: usr/local/www/interfaces.php:2073
+msgid "Note:"
+msgstr "注æ„:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:559
+#: usr/local/www/firewall_virtual_ip_edit.php:547
+#: usr/local/www/firewall_virtual_ip_edit.php:492
+#: usr/local/www/firewall_virtual_ip_edit.php:484
+#: usr/local/www/firewall_virtual_ip_edit.php:503
+#: usr/local/www/firewall_virtual_ip_edit.php:503
+msgid ""
+"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running "
+"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type "
+"address for these cases."
+msgstr "ã“ã®ã‚ˆã†ãªå ´åˆã®ãŸã‚ã«ã€CARPã¾ãŸã¯IPエイリアスタイプ "アドレスを使用ã—ã¦ãã ã•ã„ãªã©ã®IPsec 〠OpenVPNã‚’ã€ã¨ã—ã¦ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ã€Œãƒ—ロキシARPãŠã‚ˆã³ä»–ã®ã‚¿ã‚¤ãƒ—ã®ä»®æƒ³IPã¯ä½•ã‚‚実行ã—ã¦ã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:560
+#: usr/local/www/firewall_virtual_ip_edit.php:548
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:485
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+msgid "For more information on CARP and the above values, visit the OpenBSD "
+msgstr "CARPã¨ä¸Šè¨˜ã®å€¤ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ OpenBSDã®ã‚’ã”覧ãã ã•ã„"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:560
+#: usr/local/www/firewall_virtual_ip_edit.php:548
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:485
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+msgid "CARP FAQ"
+msgstr "CARPよãã‚る質å•"
+
+#: usr/local/www/load_balancer_relay_action.php:74
+#: usr/local/www/load_balancer_relay_action.php:74
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"relay protocol."
+msgstr "リレープロトコル"ãã‚Œã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+msgid "Relay Action"
+msgstr "リレー動作"
+
+#: usr/local/www/load_balancer_relay_action.php:118
+#: usr/local/www/load_balancer_relay_action.php:116
+#: usr/local/www/load_balancer_relay_action.php:116
+msgid ""
+"The load balancer configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã®å¤‰æ›´ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µè¨­å®šãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚検索ã—ã¦ã€é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/load_balancer_relay_action.php:128
+#: usr/local/www/load_balancer_relay_action.php:126
+#: usr/local/www/load_balancer_relay_action.php:126
+msgid "Relay Actions"
+msgstr "アクションリレー"
+
+#: usr/local/www/load_balancer_relay_action.php:129
+#: usr/local/www/load_balancer_relay_action.php:127
+#: usr/local/www/load_balancer_relay_action.php:127
+msgid "Relay Protocols"
+msgstr "リレープロトコル"
+
+#: usr/local/www/load_balancer_relay_action.php:142
+#: usr/local/www/interfaces_qinq_edit.php:318
+#: usr/local/www/load_balancer_relay_action_edit.php:515
+#: usr/local/www/load_balancer_relay_action_edit.php:535
+#: usr/local/www/load_balancer_relay_protocol.php:136
+#: usr/local/www/load_balancer_relay_action_edit.php:514
+#: usr/local/www/load_balancer_relay_action_edit.php:534
+#: usr/local/www/interfaces_qinq_edit.php:319
+#: usr/local/www/load_balancer_relay_action_edit.php:512
+#: usr/local/www/load_balancer_relay_action_edit.php:532
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/interfaces_qinq_edit.php:322
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/load_balancer_relay_action_edit.php:512
+#: usr/local/www/load_balancer_relay_action_edit.php:532
+#: usr/local/www/interfaces_qinq_edit.php:322
+msgid "Options"
+msgstr "オプション"
+
+#: usr/local/www/diag_defaults.php:51
+msgid ""
+"The system has been reset to factory defaults and is now rebooting. This may "
+"take one minute."
+msgstr "「システムã¯å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆã•ã‚Œã€ç¾åœ¨ã€å†èµ·å‹•ã•ã‚Œã¦ã„る。ã“ã‚Œã¯å¯èƒ½æ€§"1分ã»ã©ã‹ã‹ã‚‹ã€‚"
+
+#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52
+#: usr/local/www/diag_defaults.php:52
+msgid "Factory defaults"
+msgstr "工場出è·æ™‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70
+#: usr/local/www/diag_defaults.php:70
+msgid "If you click"
+msgstr "ã‚ãªãŸãŒã‚¯ãƒªãƒƒã‚¯ã—ãŸå ´åˆ"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81
+#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69
+#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229
+#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72
+#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53
+#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60
+#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239
+#: usr/local/www/diag_defaults.php:60 usr/local/www/diag_defaults.php:70
+#: usr/local/www/diag_defaults.php:82 usr/local/www/system_firmware.php:239
+#: usr/local/www/reboot.php:53 usr/local/www/reboot.php:64
+#: usr/local/www/pkg.php:424 usr/local/www/diag_defaults.php:60
+#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:82
+#: usr/local/www/halt.php:60 usr/local/www/halt.php:69
+#: usr/local/www/crash_reporter.php:76
+msgid "Yes"
+msgstr "ã¯ã„"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70
+#: usr/local/www/diag_defaults.php:70
+msgid "the firewall will:"
+msgstr "ファイアウォールã¯ã€ä»¥ä¸‹ã¨ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72
+#: usr/local/www/diag_defaults.php:72
+msgid "Reset to factory defaults"
+msgstr "工場出è·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆ"
+
+#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73
+#: usr/local/www/diag_defaults.php:73
+msgid "LAN IP address will be reset to 192.168.1.1"
+msgstr "LAN IPアドレスã¯192.168.1.1ã«ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™"
+
+#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74
+#: usr/local/www/diag_defaults.php:74
+msgid "System will be configured as a DHCP server on the default LAN interface"
+msgstr "システムã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®LANインターフェイス上ã§DHCPサーãƒã¨ã—ã¦è¨­å®šã•ã‚Œã¾ã™"
+
+#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75
+#: usr/local/www/diag_defaults.php:75
+msgid "Reboot after changes are installed"
+msgstr "変更ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸå¾Œã«å†èµ·å‹•ã—ã¾ã™"
+
+#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76
+#: usr/local/www/diag_defaults.php:76
+msgid ""
+"WAN interface will be set to obtain an address automatically from a DHCP "
+"server"
+msgstr "サーãƒã€ WANインターフェイスãŒDHCPã‹ã‚‰è‡ªå‹•çš„ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•ã‚Œã‚‹""
+
+#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77
+#: usr/local/www/diag_defaults.php:77
+msgid "webConfigurator admin username will be reset to 'admin'"
+msgstr "webConfigurator管ç†è€…ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€Œç®¡ç†è€…ã€ã«"
+
+#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78
+#: usr/local/www/diag_defaults.php:78
+msgid "webConfigurator admin password will be reset to"
+msgstr "webConfigurator管ç†è€…パスワードã«ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™"
+
+#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80
+#: usr/local/www/diag_defaults.php:80
+msgid "Are you sure you want to proceed?"
+msgstr "ã‚ãªãŸãŒç¶šè¡Œã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77
+#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340
+#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62
+#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43
+#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49
+#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240
+#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83
+#: usr/local/www/system_firmware.php:240 usr/local/www/reboot.php:43
+#: usr/local/www/reboot.php:65 usr/local/www/pkg.php:422
+#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83
+#: usr/local/www/halt.php:49 usr/local/www/halt.php:70
+#: usr/local/www/crash_reporter.php:77
+msgid "No"
+msgstr "ã„ã„ãˆ"
+
+#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_routing.php:54
+#: usr/local/www/diag_logs_settings.php:136
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/diag_logs_filter.php:109 usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_routing.php:54 usr/local/www/diag_logs_dhcp.php:59
+#: usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_relayd.php:55 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_ipsec.php:91
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_filter_summary.php:34
+msgid "System logs"
+msgstr "システムログ"
+
+#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67
+#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_filter.php:103
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/diag_logs_openvpn.php:71
+#: usr/local/www/diag_logs_settings.php:212
+#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032
+#: usr/local/www/diag_logs_filter_summary.php:186
+#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:217
+#: usr/local/www/diag_logs_resolver.php:80
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:224
+#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68
+#: usr/local/www/diag_logs_ipsec.php:105
+#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/diag_logs_filter_summary.php:187
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_filter.php:93
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/diag_logs_filter_dynamic.php:99
+#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/interfaces.php:1120
+#: usr/local/www/diag_logs_filter.php:123 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/diag_logs_auth.php:68
+#: usr/local/www/diag_logs_settings.php:224
+#: usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:73
+#: usr/local/www/diag_logs.php:79
+#: usr/local/www/diag_logs_filter_dynamic.php:99
+#: usr/local/www/diag_logs_ntpd.php:68 usr/local/www/diag_logs_openvpn.php:72
+#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_vpn.php:128
+#: usr/local/www/diag_logs_ipsec.php:105
+#: usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/diag_logs_resolver.php:81
+#: usr/local/www/diag_logs_filter_summary.php:187
+#: usr/local/www/interfaces.php:1157
+msgid "DHCP"
+msgstr "DHCP"
+
+#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73
+#: usr/local/www/diag_logs_filter.php:104
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_openvpn.php:72
+#: usr/local/www/diag_logs_settings.php:213
+#: usr/local/www/diag_logs_vpn.php:129
+#: usr/local/www/diag_logs_filter_summary.php:187
+#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69
+#: usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:218
+#: usr/local/www/diag_logs_resolver.php:81
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:225
+#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69
+#: usr/local/www/diag_logs_ipsec.php:106
+#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/diag_logs_filter_summary.php:188
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_openvpn.php:73
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_filter.php:94
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_filter.php:124
+#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_auth.php:69
+#: usr/local/www/diag_logs_settings.php:225
+#: usr/local/www/diag_logs_filter.php:124
+#: usr/local/www/diag_logs_routing.php:69 usr/local/www/diag_logs_dhcp.php:74
+#: usr/local/www/diag_logs.php:80
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_ntpd.php:69 usr/local/www/diag_logs_openvpn.php:73
+#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_vpn.php:129
+#: usr/local/www/diag_logs_ipsec.php:106
+#: usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/diag_logs_resolver.php:82
+#: usr/local/www/diag_logs_filter_summary.php:188
+msgid "Portal Auth"
+msgstr "ãƒãƒ¼ã‚¿ãƒ«èªè¨¼"
+
+#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69
+#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_openvpn.php:73
+#: usr/local/www/diag_logs_settings.php:214
+#: usr/local/www/diag_logs_vpn.php:130
+#: usr/local/www/diag_logs_filter_summary.php:188
+#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74
+#: usr/local/www/diag_logs_relayd.php:70
+#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48
+#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49
+#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257
+#: usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181
+#: usr/local/www/diag_logs_resolver.php:82
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172
+#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_ipsec.php:107
+#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/diag_logs_gateways.php:83
+#: usr/local/www/diag_logs_openvpn.php:74
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/fbegin.inc:163
+#: usr/local/www/fbegin.inc:180 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_filter.php:125 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_settings.php:226
+#: usr/local/www/diag_logs_filter.php:125 usr/local/www/vpn_ipsec.php:125
+#: usr/local/www/diag_logs_routing.php:70 usr/local/www/diag_logs_dhcp.php:75
+#: usr/local/www/diag_ipsec.php:48 usr/local/www/diag_logs.php:81
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_ntpd.php:70 usr/local/www/diag_ipsec_spd.php:49
+#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72
+#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/fbegin.inc:163
+#: usr/local/www/fbegin.inc:180 usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_ipsec.php:107
+#: usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_wireless.php:72
+#: usr/local/www/diag_logs_resolver.php:83
+#: usr/local/www/diag_logs_filter_summary.php:189
+msgid "IPsec"
+msgstr "IPsecã®"
+
+#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_openvpn.php:74
+#: usr/local/www/diag_logs_settings.php:215
+#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75
+#: usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/status_interfaces.php:154
+#: usr/local/www/diag_logs_wireless.php:72
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:220
+#: usr/local/www/status_interfaces.php:172
+#: usr/local/www/diag_logs_resolver.php:83
+#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:227
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_ipsec.php:108
+#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_filter.php:96
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_ppp.php:73
+#: usr/local/www/interfaces.php:1120 usr/local/www/diag_logs_filter.php:126
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_settings.php:227
+#: usr/local/www/diag_logs_filter.php:126
+#: usr/local/www/diag_logs_routing.php:71 usr/local/www/diag_logs_dhcp.php:76
+#: usr/local/www/diag_logs.php:82
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_ntpd.php:71 usr/local/www/status_interfaces.php:175
+#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_relayd.php:72 usr/local/www/diag_logs_vpn.php:131
+#: usr/local/www/diag_logs_ipsec.php:108
+#: usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/diag_logs_resolver.php:84
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/interfaces.php:1157
+msgid "PPP"
+msgstr "PPP"
+
+#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_openvpn.php:75
+#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_vpn.php:132
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86
+#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351
+#: usr/local/www/status_rrd_graph_settings.php:151
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369
+#: usr/local/www/status_rrd_graph_settings.php:152
+#: usr/local/www/diag_logs_resolver.php:84
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315
+#: usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72
+#: usr/local/www/diag_logs_ipsec.php:109
+#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/diag_logs_openvpn.php:76
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_pppoe.php:87
+#: usr/local/www/vpn_ipsec.php:125
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/vpn_pptp.php:196
+#: usr/local/www/fbegin.inc:307 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_filter.php:127 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/vpn_pppoe.php:87 usr/local/www/diag_logs_auth.php:72
+#: usr/local/www/diag_logs_settings.php:228
+#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/diag_logs_filter.php:127
+#: usr/local/www/vpn_ipsec.php:125 usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_dhcp.php:77
+#: usr/local/www/status_rrd_graph_settings.php:152
+#: usr/local/www/diag_logs.php:83
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_ntpd.php:72 usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:74
+#: usr/local/www/diag_logs_gateways.php:85 usr/local/www/vpn_pptp.php:196
+#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:307
+#: usr/local/www/diag_logs_relayd.php:73 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_vpn.php:132
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/diag_logs_ipsec.php:109
+#: usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_mobile.php:240
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/diag_logs_resolver.php:85
+#: usr/local/www/diag_logs_filter_summary.php:191
+msgid "VPN"
+msgstr "VPN"
+
+#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_openvpn.php:77
+#: usr/local/www/diag_logs_settings.php:218
+#: usr/local/www/diag_logs_vpn.php:134
+#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112
+#: usr/local/www/license.php:213
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343
+#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40
+#: usr/local/www/vpn_openvpn_csc.php:40
+#: usr/local/www/vpn_openvpn_server.php:40
+#: usr/local/www/widgets/widgets/services_status.widget.php:148
+#: usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165
+#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189
+#: usr/local/www/diag_logs_resolver.php:86
+#: usr/local/www/diag_packet_capture.php:134
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173
+#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111
+#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/vpn_openvpn_server.php:423
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_packet_capture.php:64
+#: usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter.php:99
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_ppp.php:76 usr/local/www/fbegin.inc:164
+#: usr/local/www/fbegin.inc:183 usr/local/www/vpn_openvpn_server.php:445
+#: etc/inc/service-utils.inc:332 usr/local/www/diag_logs_filter.php:129
+#: etc/inc/system.inc:1627 etc/inc/service-utils.inc:349
+#: etc/inc/system.inc:1635 usr/local/www/diag_logs_auth.php:74
+#: usr/local/www/diag_logs_settings.php:230
+#: usr/local/www/vpn_openvpn_client.php:40 usr/local/www/status_openvpn.php:46
+#: usr/local/www/diag_logs_filter.php:129 usr/local/www/vpn_openvpn_csc.php:40
+#: usr/local/www/diag_logs_routing.php:74 usr/local/www/status_graph.php:66
+#: usr/local/www/diag_logs_dhcp.php:79
+#: usr/local/www/diag_packet_capture.php:64 usr/local/www/diag_logs.php:85
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/license.php:213
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76
+#: usr/local/www/diag_logs_gateways.php:87 usr/local/www/diag_backup.php:189
+#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:183
+#: usr/local/www/diag_logs_relayd.php:75 usr/local/www/diag_logs_vpn.php:134
+#: usr/local/www/diag_logs_ipsec.php:111
+#: usr/local/www/vpn_openvpn_server.php:445
+#: usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/diag_logs_resolver.php:87
+#: usr/local/www/diag_logs_filter_summary.php:193 etc/inc/system.inc:1694
+#: etc/inc/service-utils.inc:349
+msgid "OpenVPN"
+msgstr "OpenVPNã®"
+
+#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_settings.php:219
+#: usr/local/www/diag_logs_vpn.php:135
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76
+msgid "OpenNTPD"
+msgstr "OpenNTPD"
+
+#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75
+#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_settings.php:220
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91
+#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91
+#: usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_assign.php:404
+#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_qinq.php:100
+#: usr/local/www/interfaces_wireless.php:76
+#: usr/local/www/interfaces_wireless.php:90
+#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183
+#: usr/local/www/status_rrd_graph.php:344
+#: usr/local/www/status_rrd_graph_settings.php:143
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201
+#: usr/local/www/status_rrd_graph_settings.php:144
+#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99
+#: usr/local/www/status_rrd_graph.php:392
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209
+#: usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93
+#: usr/local/www/interfaces_bridge.php:92
+#: usr/local/www/diag_logs_resolver.php:101
+#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/diag_logs_wireless.php:89
+#: usr/local/www/interfaces_assign.php:398
+#: usr/local/www/diag_logs_gateways.php:101
+#: usr/local/www/interfaces_vlan.php:93
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/interfaces_gif.php:91
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_lagg.php:101
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/status_rrd_graph.php:417
+#: usr/local/www/interfaces_bridge.php:98
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/interfaces_wireless.php:93 usr/local/www/fbegin.inc:200
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/status_wireless.php:41
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_qinq.php:104
+#: usr/local/www/diag_logs_routing.php:87
+#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_vlan.php:99
+#: usr/local/www/status_rrd_graph.php:417
+#: usr/local/www/status_rrd_graph_settings.php:144
+#: usr/local/www/diag_logs.php:99 usr/local/www/interfaces_bridge.php:98
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/interfaces_wireless.php:93
+#: usr/local/www/interfaces_groups.php:78 usr/local/www/interfaces_ppps.php:93
+#: usr/local/www/diag_logs_gateways.php:101 usr/local/www/fbegin.inc:200
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_assign.php:404
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_wireless.php:89
+#: usr/local/www/diag_logs_resolver.php:101
+msgid "Wireless"
+msgstr "ワイヤレス"
+
+#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76
+#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112
+#: usr/local/www/diag_logs_filter_dynamic.php:111
+#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76
+#: usr/local/www/diag_logs_openvpn.php:80
+#: usr/local/www/diag_logs_settings.php:132
+#: usr/local/www/diag_logs_settings.php:221
+#: usr/local/www/diag_logs_vpn.php:137
+#: usr/local/www/system_firmware_settings.php:74
+#: usr/local/www/diag_logs_filter_summary.php:195
+#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77
+#: usr/local/www/status_rrd_graph.php:361
+#: usr/local/www/status_rrd_graph_settings.php:160
+#: usr/local/www/system_authservers.php:423
+#: usr/local/www/system_groupmanager.php:242
+#: usr/local/www/system_groupmanager_addprivs.php:170
+#: usr/local/www/system_usermanager.php:442
+#: usr/local/www/system_usermanager_addprivs.php:169
+#: usr/local/www/system_usermanager_settings.php:115
+#: usr/local/www/diag_logs_wireless.php:78
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:136
+#: usr/local/www/diag_logs_settings.php:225
+#: usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/load_balancer_setting.php:122
+#: usr/local/www/status_rrd_graph_settings.php:161
+#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112
+#: usr/local/www/system_usermanager.php:440
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80
+#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409
+#: usr/local/www/load_balancer_virtual_server.php:118
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/load_balancer_monitor.php:112
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/load_balancer_pool.php:121
+#: usr/local/www/diag_logs_filter.php:111
+#: usr/local/www/diag_logs_routing.php:76
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_settings.php:232
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/diag_logs_resolver.php:89
+#: usr/local/www/load_balancer_virtual_server.php:116
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_gateways.php:89
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/system_authservers.php:428
+#: usr/local/www/diag_logs_filter.php:101
+#: usr/local/www/status_rrd_graph.php:434
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/system_authservers.php:435
+#: usr/local/www/diag_logs_filter.php:131
+#: usr/local/www/system_usermanager_settings.php:117
+#: usr/local/www/diag_logs_auth.php:76
+#: usr/local/www/system_groupmanager.php:242
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_settings.php:232
+#: usr/local/www/system_usermanager_addprivs.php:169
+#: usr/local/www/diag_logs_filter.php:131
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_routing.php:76 usr/local/www/diag_logs_dhcp.php:81
+#: usr/local/www/status_rrd_graph.php:434
+#: usr/local/www/status_rrd_graph_settings.php:161
+#: usr/local/www/diag_logs.php:87
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/diag_logs_gateways.php:89
+#: usr/local/www/system_authservers.php:435
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/system_usermanager_settings.php:117
+#: usr/local/www/diag_logs_relayd.php:77 usr/local/www/diag_logs_vpn.php:136
+#: usr/local/www/diag_logs_ipsec.php:113
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/system_usermanager.php:440
+#: usr/local/www/load_balancer_virtual_server.php:116
+#: usr/local/www/diag_logs_wireless.php:78
+#: usr/local/www/diag_logs_resolver.php:89
+#: usr/local/www/diag_logs_filter_summary.php:195
+msgid "Settings"
+msgstr "セッティング"
+
+#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110
+#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110
+#: usr/local/www/diag_logs_resolver.php:111
+#: usr/local/www/diag_logs_gateways.php:111 usr/local/www/diag_logs.php:109
+#: usr/local/www/diag_logs_gateways.php:111
+#: usr/local/www/diag_logs_resolver.php:111
+#, php-format
+msgid "Last %s system log entries"
+msgstr "最後%sシステムログエントリ"
+
+#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90
+#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208
+#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91
+#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188
+#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91
+#: usr/local/www/diag_logs_wireless.php:92
+#: usr/local/www/diag_logs_routing.php:101
+#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89
+#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187
+#: usr/local/www/diag_logs_ppp.php:113
+#: usr/local/www/diag_logs_resolver.php:121
+#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120
+#: usr/local/www/diag_logs_dhcp.php:94
+#: usr/local/www/diag_logs_wireless.php:103
+#: usr/local/www/diag_logs_gateways.php:121
+#: usr/local/www/diag_logs_openvpn.php:96
+#: usr/local/www/diag_logs_filter.php:205
+#: usr/local/www/diag_logs_routing.php:102
+#: usr/local/www/diag_logs_resolver.php:122
+#: usr/local/www/diag_logs_wireless.php:104
+#: usr/local/www/diag_logs_gateways.php:122
+#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_ppp.php:95
+#: usr/local/www/diag_logs_ipsec.php:151
+#: usr/local/www/diag_logs_filter.php:398 usr/local/www/diag_logs_auth.php:90
+#: usr/local/www/diag_logs_filter.php:398
+#: usr/local/www/diag_logs_routing.php:102 usr/local/www/diag_logs_dhcp.php:95
+#: usr/local/www/diag_logs.php:120 usr/local/www/diag_logs_ntpd.php:91
+#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_ppp.php:95
+#: usr/local/www/diag_logs_gateways.php:122
+#: usr/local/www/diag_logs_relayd.php:91 usr/local/www/diag_logs_vpn.php:187
+#: usr/local/www/diag_logs_ipsec.php:151
+#: usr/local/www/diag_logs_wireless.php:104
+#: usr/local/www/diag_logs_resolver.php:122
+msgid "Clear log"
+msgstr "ログã®æ¶ˆåŽ»"
+
+#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128
+#: usr/local/www/diag_dump_states.php:138
+#: usr/local/www/diag_dump_states_sources.php:133
+#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126
+#: usr/local/www/diag_dump_states.php:153
+#: usr/local/www/diag_logs_gateways.php:127
+#: usr/local/www/diag_logs_filter.php:127
+#: usr/local/www/diag_logs_resolver.php:128
+#: usr/local/www/diag_dump_states_sources.php:132
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/diag_logs_gateways.php:128
+#: usr/local/www/diag_logs_filter.php:147
+#: usr/local/www/diag_logs_filter.php:197
+#: usr/local/www/diag_logs_filter.php:260
+#: usr/local/www/diag_dump_states.php:141
+#: usr/local/www/diag_logs_filter.php:197
+#: usr/local/www/diag_logs_filter.php:260
+#: usr/local/www/diag_dump_states.php:141
+#: usr/local/www/diag_dump_states_sources.php:132
+#: usr/local/www/diag_logs.php:126 usr/local/www/diag_logs_gateways.php:128
+#: usr/local/www/diag_logs_resolver.php:128
+msgid "Filter"
+msgstr "フィルター"
+
+#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85
+#: usr/local/www/diag_logs_auth.php:86
+#, php-format
+msgid "Last %s Portal Auth log entries"
+msgstr "最後%sãƒãƒ¼ã‚¿ãƒ«èªè¨¼ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90
+#: usr/local/www/diag_logs_dhcp.php:91
+#, php-format
+msgid "Last %s DHCP service log entries"
+msgstr "最後%s DHCPサービスã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63
+#: usr/local/www/diag_logs_filter.php:63
+msgid "The rule that triggered this action is"
+msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’トリガã—ãŸãƒ«ãƒ¼ãƒ«ãŒã‚ã‚‹"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter_summary.php:204
+msgid "Normal View"
+msgstr "通常ã®ãƒ“ュー"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter_summary.php:204
+msgid "Dynamic View"
+msgstr "動的ビュー"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter.php:274
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter_summary.php:204
+msgid "Summary View"
+msgstr "概è¦ãƒ“ュー"
+
+#: usr/local/www/diag_logs_filter.php:139
+#: usr/local/www/diag_logs_filter.php:138
+#: usr/local/www/diag_logs_filter.php:170
+#: usr/local/www/diag_logs_filter.php:296
+#: usr/local/www/diag_logs_filter.php:296
+#, php-format
+msgid "Last %s firewall log entries."
+msgstr "最後%sã¯ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’ファイアウォール。"
+
+#: usr/local/www/diag_logs_filter.php:141
+#: usr/local/www/diag_logs_filter.php:140
+#: usr/local/www/diag_logs_filter.php:172
+#: usr/local/www/diag_logs_filter.php:298
+#: usr/local/www/diag_logs_filter.php:298
+msgid "matched log entries."
+msgstr "一致ã—ãŸãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã€‚"
+
+#: usr/local/www/diag_logs_filter.php:143
+#: usr/local/www/diag_logs_filter.php:142
+#: usr/local/www/diag_logs_filter.php:173
+#: usr/local/www/diag_logs_filter.php:299
+#: usr/local/www/diag_logs_filter.php:299
+#, php-format
+msgid "Max(%s)"
+msgstr "マックス( %s )"
+
+#: usr/local/www/diag_logs_filter.php:146
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#: usr/local/www/diag_logs_filter.php:145
+#: usr/local/www/diag_logs_filter_dynamic.php:125
+#: usr/local/www/diag_logs_filter.php:177
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/widgets/widgets/log.widget.php:163
+#: usr/local/www/diag_logs_filter.php:303
+#: usr/local/www/widgets/widgets/log.widget.php:167
+#: usr/local/www/diag_logs_filter.php:303
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/widgets/widgets/log.widget.php:174
+msgid "Act"
+msgstr "行為"
+
+#: usr/local/www/diag_logs_filter.php:147
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_vpn.php:175
+#: usr/local/www/firewall_schedule_edit.php:910
+#: usr/local/www/diag_logs_vpn.php:174
+#: usr/local/www/diag_logs_filter_dynamic.php:125
+#: usr/local/www/diag_logs_filter.php:146
+#: usr/local/www/firewall_schedule_edit.php:909
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter.php:178
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_system_pftop.php:143
+#: usr/local/www/diag_logs_filter.php:159
+#: usr/local/www/diag_logs_filter.php:304
+#: usr/local/www/diag_logs_filter.php:159
+#: usr/local/www/diag_logs_filter.php:304
+#: usr/local/www/firewall_schedule_edit.php:909
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_system_pftop.php:143 usr/local/www/diag_logs_vpn.php:174
+#: usr/local/www/widgets/widgets/log.widget.php:175
+msgid "Time"
+msgstr "時間"
+
+#: usr/local/www/diag_logs_filter.php:148
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/firewall_nat.php:195
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/diag_logs_filter.php:305 usr/local/www/firewall_nat.php:203
+#: usr/local/www/diag_logs_filter.php:305
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/firewall_nat.php:203
+msgid "If"
+msgstr "ã‚‚ã—"
+
+#: usr/local/www/diag_logs_filter.php:149
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/firewall_nat_edit.php:529
+#: usr/local/www/firewall_nat_edit.php:535
+#: usr/local/www/firewall_nat_out.php:342
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:468
+#: usr/local/www/firewall_rules.php:364
+#: usr/local/www/firewall_rules_edit.php:855
+#: usr/local/www/vpn_ipsec_mobile.php:356
+#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87
+#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules.php:368
+#: usr/local/www/firewall_nat_edit.php:536
+#: usr/local/www/firewall_nat_edit.php:542
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_filter.php:148
+#: usr/local/www/firewall_nat_out.php:353
+#: usr/local/www/vpn_ipsec_mobile.php:383
+#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88
+#: usr/local/www/firewall_rules.php:361
+#: usr/local/www/firewall_nat_edit.php:541
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_nat_edit.php:530
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#: usr/local/www/widgets/widgets/log.widget.php:165
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:905
+#: usr/local/www/diag_logs_filter.php:309
+#: usr/local/www/firewall_nat_edit.php:548
+#: usr/local/www/firewall_nat_out.php:360 usr/local/www/firewall_rules.php:359
+#: usr/local/www/widgets/widgets/log.widget.php:169
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:497
+#: usr/local/www/firewall_rules_edit.php:904
+#: usr/local/www/firewall_nat_edit.php:543
+#: usr/local/www/firewall_nat_edit.php:549
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_rules_edit.php:904
+#: usr/local/www/diag_logs_filter.php:309
+#: usr/local/www/firewall_nat_edit.php:543
+#: usr/local/www/firewall_nat_edit.php:549
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_rules.php:359
+#: usr/local/www/widgets/widgets/log.widget.php:177
+#: usr/local/www/vpn_ipsec_mobile.php:383
+#: usr/local/www/vpn_ipsec_mobile.php:401
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:497
+#: usr/local/www/diag_ipsec_sad.php:88
+msgid "Source"
+msgstr "ソース"
+
+#: usr/local/www/diag_logs_filter.php:150
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/firewall_nat_1to1_edit.php:383
+#: usr/local/www/firewall_nat_edit.php:624
+#: usr/local/www/firewall_nat_out.php:344
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:498
+#: usr/local/www/firewall_rules.php:366
+#: usr/local/www/firewall_rules_edit.php:948
+#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_1to1_edit.php:390
+#: usr/local/www/firewall_nat_out_edit.php:511
+#: usr/local/www/firewall_rules_edit.php:983
+#: usr/local/www/firewall_rules.php:370
+#: usr/local/www/firewall_nat_edit.php:631
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/diag_logs_filter.php:149
+#: usr/local/www/firewall_nat_out.php:355
+#: usr/local/www/firewall_nat_1to1_edit.php:388
+#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363
+#: usr/local/www/firewall_nat_edit.php:630
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/firewall_rules_edit.php:992
+#: usr/local/www/firewall_nat_edit.php:625
+#: usr/local/www/diag_logs_filter_dynamic.php:132
+#: usr/local/www/widgets/widgets/log.widget.php:166
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/diag_logs_filter.php:310
+#: usr/local/www/firewall_nat_edit.php:637
+#: usr/local/www/firewall_nat_out.php:362 usr/local/www/firewall_rules.php:361
+#: usr/local/www/widgets/widgets/log.widget.php:170
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:527
+#: usr/local/www/firewall_rules_edit.php:1004
+#: usr/local/www/firewall_nat_edit.php:638
+#: usr/local/www/firewall_nat_out.php:361
+#: usr/local/www/firewall_nat_1to1_edit.php:389
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/firewall_rules_edit.php:1004
+#: usr/local/www/diag_logs_filter.php:310
+#: usr/local/www/firewall_nat_edit.php:638
+#: usr/local/www/diag_logs_filter_dynamic.php:132
+#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/firewall_nat_out.php:361
+#: usr/local/www/firewall_rules.php:361
+#: usr/local/www/firewall_nat_1to1_edit.php:389
+#: usr/local/www/widgets/widgets/log.widget.php:178
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/diag_ipsec_sad.php:89
+msgid "Destination"
+msgstr "å…ˆ"
+
+#: usr/local/www/diag_logs_filter.php:151
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363
+#: usr/local/www/diag_states_summary.php:152
+#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367
+#: usr/local/www/diag_dump_states.php:168
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_states_summary.php:141
+#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201
+#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/diag_states_summary.php:143
+#: usr/local/www/diag_logs_filter.php:185
+#: usr/local/www/diag_logs_filter_dynamic.php:133
+#: usr/local/www/diag_logs_filter.php:311
+#: usr/local/www/diag_dump_states.php:156 usr/local/www/firewall_rules.php:358
+#: usr/local/www/firewall_nat.php:204 usr/local/www/diag_logs_filter.php:311
+#: usr/local/www/diag_dump_states.php:156
+#: usr/local/www/diag_states_summary.php:143
+#: usr/local/www/diag_logs_filter_dynamic.php:133
+#: usr/local/www/firewall_nat.php:204 usr/local/www/firewall_rules.php:358
+msgid "Proto"
+msgstr "プロト"
+
+#: usr/local/www/diag_logs_filter.php:178
+#: usr/local/www/diag_logs_filter.php:183
+#: usr/local/www/diag_logs_filter_summary.php:81
+#: usr/local/www/diag_logs_filter.php:175
+#: usr/local/www/diag_logs_filter.php:180
+#: usr/local/www/diag_logs_filter_summary.php:82
+#: usr/local/www/diag_logs_filter.php:221
+#: usr/local/www/diag_logs_filter.php:228
+#: usr/local/www/diag_logs_filter.php:351
+#: usr/local/www/diag_logs_filter.php:353
+#: usr/local/www/diag_logs_filter.php:360
+#: usr/local/www/diag_logs_filter.php:362
+#: usr/local/www/widgets/widgets/log.widget.php:189
+#: usr/local/www/widgets/widgets/log.widget.php:192
+#: usr/local/www/diag_logs_filter.php:351
+#: usr/local/www/diag_logs_filter.php:353
+#: usr/local/www/diag_logs_filter.php:360
+#: usr/local/www/diag_logs_filter.php:362
+#: usr/local/www/widgets/widgets/log.widget.php:197
+#: usr/local/www/widgets/widgets/log.widget.php:200
+#: usr/local/www/diag_logs_filter_summary.php:82
+msgid "Reverse Resolve with DNS"
+msgstr "DNSã«é€†è§£æ±º"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:355
+msgid "Easy Rule: Add to Block List"
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šãƒªã‚¹ãƒˆã‚’ブロックã™ã‚‹ãŸã‚ã«è¿½åŠ ã™ã‚‹"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:355
+msgid "Do you really want to add this BLOCK rule?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ–ロックルールを追加ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Easy Rule is still experimental."
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ã¯ã€ã¾ã å®Ÿé¨“çš„ãªã‚‚ã®ã§ã™ã€‚"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Continue at risk of your own peril."
+msgstr "ã‚ãªãŸè‡ªèº«ã®å±é™ºã®ãƒªã‚¹ã‚¯ãŒç¶™ç¶šã™ã‚‹ã€‚"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Backups are also nice."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‚‚ã„ã„ã§ã™ã€‚"
+
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:364
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Easy Rule: Pass this traffic"
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«ï¼šã“ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’通éŽã•ã›ã‚‹"
+
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:364
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Do you really want to add this PASS rule?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘スã®è¦å‰‡ã‚’追加ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_logs_filter.php:196
+#: usr/local/www/diag_logs_filter.php:193
+#: usr/local/www/diag_logs_filter.php:251
+#: usr/local/www/diag_logs_filter.php:385
+#: usr/local/www/diag_logs_filter.php:385
+#, php-format
+msgid "Last %s firewall log entries"
+msgstr "最後%sファイアウォールã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+msgid "Firewall (Dynamic View)"
+msgstr "ファイアウォール(ダイナミックビュー)"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:120
+#: usr/local/www/diag_logs_filter_dynamic.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#, php-format
+msgid "Last %s records"
+msgstr "最後%sレコード"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:120
+#: usr/local/www/diag_logs_filter_dynamic.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+msgid "Pause:"
+msgstr "一時åœæ­¢ï¼š"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:153
+#: usr/local/www/diag_logs_filter_dynamic.php:151
+#: usr/local/www/diag_logs_filter_dynamic.php:152
+#: usr/local/www/diag_logs_filter_dynamic.php:165
+#: usr/local/www/diag_logs_filter_dynamic.php:165
+msgid "TCP Flags"
+msgstr "TCPフラグ"
+
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330
+#: usr/local/www/widgets/widgets/services_status.widget.php:135
+#: etc/inc/service-utils.inc:320 etc/inc/service-utils.inc:319
+#: etc/inc/service-utils.inc:336 usr/local/www/diag_logs_ipsec.php:91
+#: etc/inc/service-utils.inc:336
+msgid "IPsec VPN"
+msgstr "IPsec VPNã®"
+
+#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122
+#: usr/local/www/diag_logs_ipsec.php:123
+#, php-format
+msgid "Last %s IPsec log entries"
+msgstr "最後%s IPsecã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99
+#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98
+#: usr/local/www/diag_logs_ipsec.php:136 usr/local/www/diag_logs_ipsec.php:136
+msgid "Unknown Gateway/Dynamic"
+msgstr "未知ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤/ダイナミック"
+
+#: usr/local/www/diag_logs_ntpd.php:86
+#, php-format
+msgid "Last %s OpenNTPD log entries"
+msgstr "最後%sã¯ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’OpenNTPD"
+
+#: usr/local/www/diag_logs_openvpn.php:90
+#: usr/local/www/diag_logs_openvpn.php:89
+#: usr/local/www/diag_logs_openvpn.php:90
+#, php-format
+msgid "Last %s OpenVPN log entries"
+msgstr "最後%s OpenVPNã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59
+#: usr/local/www/widgets/widgets/openvpn.widget.php:16
+#: usr/local/www/diag_dump_states_sources.php:51
+#: usr/local/www/widgets/widgets/openvpn.widget.php:17
+#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:62
+#: usr/local/www/status_openvpn.php:62 usr/local/www/diag_dump_states.php:51
+#: usr/local/www/diag_dump_states_sources.php:51
+#: usr/local/www/widgets/widgets/openvpn.widget.php:17
+msgid "invalid input"
+msgstr "無効入力"
+
+#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75
+#: usr/local/www/diag_dump_states.php:67 usr/local/www/diag_dump_states.php:67
+msgid "Show States"
+msgstr "表示状態"
+
+#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130
+#: usr/local/www/widgets/widgets/openvpn.widget.php:84
+#: usr/local/www/diag_dump_states_sources.php:95
+#: usr/local/www/diag_dump_states.php:105
+#: usr/local/www/widgets/widgets/openvpn.widget.php:85
+#: usr/local/www/status_openvpn.php:131
+#: usr/local/www/diag_dump_states_sources.php:94
+#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:132
+#: usr/local/www/diag_dump_states.php:96 usr/local/www/status_openvpn.php:132
+#: usr/local/www/diag_dump_states.php:96
+#: usr/local/www/diag_dump_states_sources.php:94
+#: usr/local/www/widgets/widgets/openvpn.widget.php:84
+msgid "An error occurred."
+msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_dump_states.php:110
+#: usr/local/www/diag_states_summary.php:151
+#: usr/local/www/diag_states_summary.php:153
+#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206
+#: usr/local/www/system_advanced_misc.php:398
+#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224
+#: usr/local/www/system_advanced_misc.php:441
+#: usr/local/www/diag_dump_states.php:120
+#: usr/local/www/diag_states_summary.php:140
+#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233
+#: usr/local/www/system_advanced_misc.php:490
+#: usr/local/www/diag_dump_states_sources.php:109
+#: usr/local/www/diag_dump_states.php:119
+#: usr/local/www/diag_states_summary.php:144
+#: usr/local/www/system_advanced_misc.php:502 usr/local/www/fbegin.inc:225
+#: usr/local/www/diag_dump_states.php:111
+#: usr/local/www/system_advanced_misc.php:549
+#: usr/local/www/diag_dump_states.php:111
+#: usr/local/www/diag_states_summary.php:142
+#: usr/local/www/diag_states_summary.php:144
+#: usr/local/www/diag_dump_states_sources.php:109
+#: usr/local/www/system_advanced_misc.php:549
+#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:225
+msgid "States"
+msgstr "米国"
+
+#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79
+#: usr/local/www/diag_dump_states_sources.php:111
+#: usr/local/www/diag_dump_states.php:122
+#: usr/local/www/diag_dump_states_sources.php:110
+#: usr/local/www/diag_dump_states.php:121
+#: usr/local/www/diag_dump_states.php:113
+#: usr/local/www/diag_dump_states.php:113
+#: usr/local/www/diag_dump_states_sources.php:110
+#: usr/local/www/diag_resetstate.php:79
+msgid "Source Tracking"
+msgstr "ソースã®è¿½è·¡"
+
+#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80
+#: usr/local/www/diag_dump_states_sources.php:112
+#: usr/local/www/diag_dump_states.php:123
+#: usr/local/www/diag_dump_states_sources.php:111
+#: usr/local/www/diag_dump_states.php:122
+#: usr/local/www/diag_dump_states.php:114
+#: usr/local/www/diag_dump_states.php:114
+#: usr/local/www/diag_dump_states_sources.php:111
+#: usr/local/www/diag_resetstate.php:80
+msgid "Reset States"
+msgstr "米国ã®ãƒªã‚»ãƒƒãƒˆ"
+
+#: usr/local/www/diag_dump_states.php:134
+msgid "Current state count:"
+msgstr "ç¾åœ¨ã®çŠ¶æ…‹ã‚«ã‚¦ãƒ³ãƒˆï¼š"
+
+#: usr/local/www/diag_dump_states.php:136
+#: usr/local/www/diag_dump_states_sources.php:131
+#: usr/local/www/diag_dump_states.php:151
+#: usr/local/www/diag_dump_states_sources.php:130
+#: usr/local/www/diag_dump_states.php:150
+#: usr/local/www/diag_dump_states.php:139
+#: usr/local/www/diag_dump_states.php:139
+#: usr/local/www/diag_dump_states_sources.php:130
+msgid "Filter expression:"
+msgstr "å¼ã‚’フィルタ:"
+
+#: usr/local/www/diag_dump_states.php:151
+#: usr/local/www/diag_dump_states.php:169
+#: usr/local/www/diag_dump_states.php:168
+#: usr/local/www/diag_dump_states.php:157
+#: usr/local/www/diag_dump_states.php:157
+msgid "Source -> Router -> Destination"
+msgstr "ソース - u003eルータ - u003e目的地"
+
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/status_dhcpv6_leases.php:486
+#: usr/local/www/diag_dump_states.php:170
+#: usr/local/www/status_dhcpv6_leases.php:487
+#: usr/local/www/diag_dump_states.php:169
+#: usr/local/www/status_dhcpv6_leases.php:490
+#: usr/local/www/diag_system_pftop.php:142
+#: usr/local/www/diag_dump_states.php:158
+#: usr/local/www/status_dhcpv6_leases.php:490
+#: usr/local/www/diag_dump_states.php:158
+#: usr/local/www/diag_system_pftop.php:142
+msgid "State"
+msgstr "状態"
+
+#: usr/local/www/diag_dump_states.php:185
+#: usr/local/www/diag_dump_states.php:203
+#: usr/local/www/diag_dump_states.php:202
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/diag_dump_states.php:194
+msgid "Remove all state entries from"
+msgstr "ã‹ã‚‰ã™ã¹ã¦ã®çŠ¶æ…‹ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã™ã‚‹"
+
+#: usr/local/www/diag_dump_states.php:185
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_dhcp.php:636
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579
+#: usr/local/www/diag_dump_states_sources.php:180
+#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/diag_dump_states_sources.php:179
+#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:736 usr/local/www/services_dhcp.php:780
+#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:748 usr/local/www/services_dhcp.php:800
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/diag_dump_states_sources.php:179
+#: usr/local/www/services_dhcp.php:800
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600
+#: usr/local/www/diag_confbak.php:111
+msgid "to"
+msgstr "ã¸"
+
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/diag_dump_states.php:212
+#: usr/local/www/diag_dump_states.php:211
+#: usr/local/www/diag_dump_states.php:205
+#: usr/local/www/diag_dump_states.php:205
+msgid "No states were found."
+msgstr "何ã®çŠ¶æ…‹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/diag_logs_settings.php:79
+msgid "A valid IP address must be specified for remote syslog server #1."
+msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/diag_logs_settings.php:82
+msgid "A valid IP address must be specified for remote syslog server #2."
+msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/diag_logs_settings.php:85
+msgid "A valid IP address must be specified for remote syslog server #3."
+msgstr "有効ãªIPアドレスã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆsyslogサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/diag_logs_settings.php:92
+#: usr/local/www/diag_logs_settings.php:96
+#: usr/local/www/diag_logs_settings.php:97
+#: usr/local/www/diag_logs_settings.php:97
+msgid "Number of log entries to show must be between 5 and 2000."
+msgstr "表示ã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã¯ã€ 5å¹´ã‹ã‚‰2000å¹´ã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/diag_logs_settings.php:232
+#: usr/local/www/diag_logs_settings.php:239
+#: usr/local/www/diag_logs_settings.php:246
+#: usr/local/www/diag_logs_settings.php:246
+msgid "Show log entries in reverse order (newest entries on top)"
+msgstr "逆ã®é †åºã§è¡¨ç¤ºã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªï¼ˆä¸€ç•ªä¸Šã®æœ€æ–°ã®ã‚¨ãƒ³ãƒˆãƒªï¼‰"
+
+#: usr/local/www/diag_logs_settings.php:236
+msgid "Number of log entries to show:"
+msgstr "ショーã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ï¼š"
+
+#: usr/local/www/diag_logs_settings.php:242
+#: usr/local/www/diag_logs_settings.php:250
+#: usr/local/www/diag_logs_settings.php:257
+#: usr/local/www/diag_logs_settings.php:257
+msgid "Log packets blocked by the default rule"
+msgstr "デフォルトã®ãƒ«ãƒ¼ãƒ«ã§ãƒ–ロックã•ã‚ŒãŸãƒ‘ケットをログã«è¨˜éŒ²ã™ã‚‹"
+
+#: usr/local/www/diag_logs_settings.php:243
+msgid ""
+"Hint: packets that are blocked by the implicit default block rule will not "
+"be logged anymore if you uncheck this option. Per-rule logging options are "
+"not affected."
+msgstr ""ヒント:暗黙ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ–ロックルールã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚ŒãŸãƒ‘ケットãŒãªã„ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ãŸå ´åˆã¯ã‚‚ã†ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã€‚ルールã”ã¨ã®ãƒ­ã‚°ã‚ªãƒ—ションã€ã®å½±éŸ¿ã‚’å—ã‘ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_logs_settings.php:250
+#: usr/local/www/diag_logs_settings.php:258
+#: usr/local/www/diag_logs_settings.php:265
+#: usr/local/www/diag_logs_settings.php:265
+msgid "Show raw filter logs"
+msgstr "生ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ­ã‚°ã‚’表示ã™ã‚‹"
+
+#: usr/local/www/diag_logs_settings.php:251
+msgid ""
+"Hint: If this is checked, filter logs are shown as generated by the packet "
+"filter, without any formatting. This will reveal more detailed information."
+msgstr ""ヒント:ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒ‘ケットã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚Œã‚‹ã‚ˆã†ã«ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ­ã‚°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™"をフォーマットã›ãšã«ã€ãƒ•ã‚£ãƒ«ã‚¿ã€‚ã“ã‚Œã¯ã€ã‚ˆã‚Šè©³ç´°ãªæƒ…報を明らã‹ã«ã™ã‚‹ã€‚"
+
+#: usr/local/www/diag_logs_settings.php:256
+#: usr/local/www/diag_logs_settings.php:267
+#: usr/local/www/diag_logs_settings.php:287
+#: usr/local/www/diag_logs_settings.php:287
+msgid "Disable writing log files to the local RAM disk"
+msgstr "ローカルRAMディスクã«ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’書ãè¾¼ã¿ä¸å¯ã«"
+
+#: usr/local/www/diag_logs_settings.php:261
+msgid "Enable syslog'ing to remote syslog server"
+msgstr "リモートsyslogサーãƒã«syslog'ing有効ã«ã—ã¾ã™"
+
+#: usr/local/www/diag_logs_settings.php:264
+msgid "Remote syslog servers"
+msgstr "リモートsyslogサーãƒ"
+
+#: usr/local/www/diag_logs_settings.php:269
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_settings.php:285
+#: usr/local/www/vpn_ipsec_mobile.php:496
+#: usr/local/www/vpn_ipsec_mobile.php:502
+#: usr/local/www/vpn_ipsec_mobile.php:508
+#: usr/local/www/vpn_ipsec_mobile.php:514
+#: usr/local/www/vpn_ipsec_mobile.php:538
+#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208
+#: usr/local/www/services_rfc2136_edit.php:180
+#: usr/local/www/vpn_openvpn_client.php:365
+#: usr/local/www/vpn_openvpn_client.php:862
+#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477
+#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493
+#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529
+#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625
+#: usr/local/www/vpn_openvpn_csc.php:633
+#: usr/local/www/vpn_openvpn_server.php:40
+#: usr/local/www/vpn_openvpn_server.php:583
+#: usr/local/www/vpn_openvpn_server.php:1238
+#: usr/local/www/vpn_openvpn_server.php:1246
+#: usr/local/www/vpn_openvpn_server.php:1254
+#: usr/local/www/vpn_openvpn_server.php:1262
+#: usr/local/www/vpn_openvpn_server.php:1290
+#: usr/local/www/vpn_openvpn_server.php:1298
+#: usr/local/www/vpn_openvpn_server.php:1386
+#: usr/local/www/vpn_openvpn_server.php:1394
+#: usr/local/www/diag_logs_settings.php:286
+#: usr/local/www/diag_logs_settings.php:290
+#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108
+#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656
+#: usr/local/www/vpn_openvpn_server.php:1380
+#: usr/local/www/vpn_openvpn_server.php:1388
+#: usr/local/www/vpn_openvpn_server.php:1396
+#: usr/local/www/vpn_openvpn_server.php:1404
+#: usr/local/www/vpn_openvpn_server.php:1432
+#: usr/local/www/vpn_openvpn_server.php:1440
+#: usr/local/www/vpn_openvpn_server.php:1528
+#: usr/local/www/vpn_openvpn_server.php:1536
+#: usr/local/www/vpn_openvpn_client.php:370
+#: usr/local/www/vpn_openvpn_client.php:867
+#: usr/local/www/diag_logs_settings.php:306
+#: usr/local/www/diag_logs_settings.php:310
+#: usr/local/www/diag_logs_settings.php:314
+#: usr/local/www/vpn_ipsec_mobile.php:545
+#: usr/local/www/vpn_ipsec_mobile.php:551
+#: usr/local/www/vpn_ipsec_mobile.php:557
+#: usr/local/www/vpn_ipsec_mobile.php:563
+#: usr/local/www/vpn_ipsec_mobile.php:587
+#: usr/local/www/vpn_ipsec_mobile.php:593
+#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476
+#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492
+#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528
+#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624
+#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124
+#: usr/local/www/vpn_openvpn_server.php:423
+#: usr/local/www/vpn_openvpn_server.php:674
+#: usr/local/www/vpn_openvpn_server.php:1422
+#: usr/local/www/vpn_openvpn_server.php:1430
+#: usr/local/www/vpn_openvpn_server.php:1438
+#: usr/local/www/vpn_openvpn_server.php:1446
+#: usr/local/www/vpn_openvpn_server.php:1474
+#: usr/local/www/vpn_openvpn_server.php:1482
+#: usr/local/www/vpn_openvpn_server.php:1570
+#: usr/local/www/vpn_openvpn_server.php:1578
+#: usr/local/www/vpn_openvpn_client.php:378
+#: usr/local/www/vpn_openvpn_client.php:920
+#: usr/local/www/vpn_openvpn_client.php:396
+#: usr/local/www/vpn_openvpn_client.php:939
+#: usr/local/www/vpn_openvpn_server.php:445
+#: usr/local/www/vpn_openvpn_server.php:700
+#: usr/local/www/vpn_openvpn_server.php:1490
+#: usr/local/www/vpn_openvpn_server.php:1498
+#: usr/local/www/vpn_openvpn_server.php:1526
+#: usr/local/www/vpn_openvpn_server.php:1534
+#: usr/local/www/vpn_openvpn_server.php:1622
+#: usr/local/www/vpn_openvpn_server.php:1630 usr/local/www/status_ntpd.php:130
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224
+#: usr/local/www/diag_logs_settings.php:306
+#: usr/local/www/diag_logs_settings.php:310
+#: usr/local/www/diag_logs_settings.php:314
+#: usr/local/www/vpn_openvpn_client.php:396
+#: usr/local/www/vpn_openvpn_client.php:939
+#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476
+#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492
+#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528
+#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624
+#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:130
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224
+#: usr/local/www/services_rfc2136_edit.php:180
+#: usr/local/www/vpn_ipsec_mobile.php:545
+#: usr/local/www/vpn_ipsec_mobile.php:551
+#: usr/local/www/vpn_ipsec_mobile.php:557
+#: usr/local/www/vpn_ipsec_mobile.php:563
+#: usr/local/www/vpn_ipsec_mobile.php:587
+#: usr/local/www/vpn_ipsec_mobile.php:593
+#: usr/local/www/vpn_openvpn_server.php:445
+#: usr/local/www/vpn_openvpn_server.php:700
+#: usr/local/www/vpn_openvpn_server.php:1474
+#: usr/local/www/vpn_openvpn_server.php:1482
+#: usr/local/www/vpn_openvpn_server.php:1490
+#: usr/local/www/vpn_openvpn_server.php:1498
+#: usr/local/www/vpn_openvpn_server.php:1526
+#: usr/local/www/vpn_openvpn_server.php:1534
+#: usr/local/www/vpn_openvpn_server.php:1622
+#: usr/local/www/vpn_openvpn_server.php:1630
+msgid "Server"
+msgstr "サーãƒãƒ¼"
+
+#: usr/local/www/diag_logs_settings.php:296
+msgid "IP addresses of remote syslog servers"
+msgstr "リモートsyslogサーãƒã®IPアドレス"
+
+#: usr/local/www/diag_logs_settings.php:300
+#: usr/local/www/diag_logs_settings.php:309
+#: usr/local/www/diag_logs_settings.php:329
+#: usr/local/www/diag_logs_settings.php:329
+msgid "System events"
+msgstr "システム·イベント"
+
+#: usr/local/www/diag_logs_settings.php:302
+#: usr/local/www/diag_logs_settings.php:311
+#: usr/local/www/diag_logs_settings.php:331
+#: usr/local/www/diag_logs_settings.php:331
+msgid "Firewall events"
+msgstr "ファイアウォールイベント"
+
+#: usr/local/www/diag_logs_settings.php:304
+#: usr/local/www/diag_logs_settings.php:313
+#: usr/local/www/diag_logs_settings.php:333
+#: usr/local/www/diag_logs_settings.php:333
+msgid "DHCP service events"
+msgstr "DHCPサービスã®ã‚¤ãƒ™ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_logs_settings.php:306
+#: usr/local/www/diag_logs_settings.php:315
+#: usr/local/www/diag_logs_settings.php:335
+#: usr/local/www/diag_logs_settings.php:335
+msgid "Portal Auth events"
+msgstr "ãƒãƒ¼ã‚¿ãƒ«èªè¨¼ã‚¤ãƒ™ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_logs_settings.php:308
+#: usr/local/www/diag_logs_settings.php:317
+#: usr/local/www/diag_logs_settings.php:337
+#: usr/local/www/diag_logs_settings.php:337
+msgid "VPN (PPTP, IPsec, OpenVPN) events"
+msgstr "VPN ( PPTP 〠IPsecã®ã€ OpenVPNã®ï¼‰ã‚¤ãƒ™ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_logs_settings.php:310
+#: usr/local/www/diag_logs_settings.php:319
+#: usr/local/www/diag_logs_settings.php:339
+#: usr/local/www/diag_logs_settings.php:339
+msgid "Gateway Monitor events"
+msgstr "ゲートウェイモニタイベント"
+
+#: usr/local/www/diag_logs_settings.php:312
+#: usr/local/www/diag_logs_settings.php:321
+#: usr/local/www/diag_logs_settings.php:341
+#: usr/local/www/diag_logs_settings.php:341
+msgid "Server Load Balancer events"
+msgstr "サーãƒãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã‚¤ãƒ™ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_logs_settings.php:314
+#: usr/local/www/diag_logs_settings.php:323
+#: usr/local/www/diag_logs_settings.php:343
+#: usr/local/www/diag_logs_settings.php:343
+msgid "Wireless events"
+msgstr "ワイヤレスイベント"
+
+#: usr/local/www/diag_logs_settings.php:316
+#: usr/local/www/diag_logs_settings.php:307
+#: usr/local/www/diag_logs_settings.php:327
+#: usr/local/www/diag_logs_settings.php:327
+msgid "Everything"
+msgstr "ã™ã¹ã¦ã®ã‚‚ã®"
+
+#: usr/local/www/diag_logs_settings.php:327
+msgid ""
+"syslog sends UDP datagrams to port 514 on the specified remote syslog "
+"server. Be sure to set syslogd on the remote server to accept syslog "
+"messages from"
+msgstr "サーãƒãƒ¼ã€Œ syslogãŒæŒ‡å®šã•ã‚ŒãŸãƒªãƒ¢ãƒ¼ãƒˆã®syslogã®ãƒãƒ¼ãƒˆ514ã«UDPデータグラムをé€ä¿¡ã—ã¾ã™ã€ 。ã‹ã‚‰ã®syslog ã€ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ã‘入れるよã†ã«ãƒªãƒ¢ãƒ¼ãƒˆÂ·ã‚µãƒ¼ãƒãƒ¼ä¸Šã®syslogd設定ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143
+#: usr/local/www/diag_logs_vpn.php:143
+msgid "PPTP Logins"
+msgstr "PPTPログイン"
+
+#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146
+#: usr/local/www/diag_logs_vpn.php:146
+msgid "PPTP Raw"
+msgstr "PPTP生"
+
+#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149
+#: usr/local/www/diag_logs_vpn.php:149
+msgid "PPPoE Logins"
+msgstr "PPPoEã®ãƒ­ã‚°ã‚¤ãƒ³"
+
+#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152
+#: usr/local/www/diag_logs_vpn.php:152
+msgid "PPPoE Raw"
+msgstr "PPPoEã®ç”Ÿ"
+
+#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155
+#: usr/local/www/diag_logs_vpn.php:155
+msgid "L2TP Logins"
+msgstr "L2TPログイン"
+
+#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158
+#: usr/local/www/diag_logs_vpn.php:158
+msgid "L2TP Raw"
+msgstr "L2TP生"
+
+#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170
+#: usr/local/www/diag_logs_vpn.php:170
+#, php-format
+msgid "Last %1$s %2$s VPN log entries"
+msgstr "最後ã¯%1$s %2$s VPNã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/firewall_rules_edit.php:659
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:484
+#: usr/local/www/services_unbound_acls.php:211
+#: usr/local/www/services_unbound_acls.php:318
+#: usr/local/www/load_balancer_relay_action_edit.php:483
+#: usr/local/www/firewall_rules_edit.php:692
+#: usr/local/www/diag_logs_vpn.php:175
+#: usr/local/www/load_balancer_relay_action_edit.php:481
+#: usr/local/www/firewall_rules_edit.php:695
+#: usr/local/www/firewall_rules_edit.php:707
+#: usr/local/www/diag_logs_filter.php:151
+#: usr/local/www/firewall_rules_edit.php:707
+#: usr/local/www/diag_logs_filter.php:151
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:481
+#: usr/local/www/diag_logs_vpn.php:175
+msgid "Action"
+msgstr "アクション"
+
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/system_groupmanager.php:426
+#: usr/local/www/system_usermanager.php:89
+#: usr/local/www/system_usermanager.php:808
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/system_usermanager.php:806
+#: usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/system_groupmanager.php:429
+#: usr/local/www/system_usermanager.php:809
+#: usr/local/www/system_groupmanager.php:448
+#: usr/local/www/system_usermanager.php:832
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/system_groupmanager.php:448
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/system_usermanager.php:89
+#: usr/local/www/system_usermanager.php:832
+msgid "User"
+msgstr "ユーザー"
+
+#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212
+#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239
+#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:231
+#: usr/local/www/diag_nanobsd.php:49
+msgid "NanoBSD"
+msgstr "NanoBSDã®"
+
+#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69
+#: usr/local/www/diag_nanobsd.php:69
+msgid "Setting slice information, please wait..."
+msgstr "スライス情報を設定ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78
+#: usr/local/www/diag_nanobsd.php:78
+msgid "The boot slice has been set to"
+msgstr "ブート·スライスã«è¨­å®šã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85
+#: usr/local/www/diag_nanobsd.php:85
+msgid "Duplicating slice. Please wait, this will take a moment..."
+msgstr "スライスを複製。ã“ã‚Œã¯å°‘ã—時間ãŒã‹ã‹ã‚‹ã§ã—ょã†ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94
+#: usr/local/www/diag_nanobsd.php:94
+msgid "The slice has been duplicated."
+msgstr "スライスãŒè¤‡è£½ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94
+#: usr/local/www/diag_nanobsd.php:94
+msgid ""
+"If you would like to boot from this newly duplicated slice please set it "
+"using the bootup information area."
+msgstr "ブートアップ情報領域を使用ã—ã¦ã€Œã‚ãªãŸã¯ã€ã“ã®æ–°ãŸã«è¤‡è£½ã•ã‚ŒãŸã‚¹ãƒ©ã‚¤ã‚¹ã‹ã‚‰èµ·å‹•ã—ãŸã„å ´åˆã«è¨­å®šã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96
+#: usr/local/www/diag_nanobsd.php:96
+msgid "There was an error while duplicating the slice. Operation aborted."
+msgstr "スライスを複製中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚æ“作ã¯ä¸­æ–­ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2559
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/load_balancer_virtual_server_edit.php:212
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/load_balancer_virtual_server_edit.php:244
+#: usr/local/www/system_advanced_firewall.php:231
+#: usr/local/www/system_advanced_misc.php:221
+#: usr/local/www/system_advanced_network.php:197
+#: usr/local/www/system_advanced_sysctl.php:163
+#: usr/local/www/system_routes_edit.php:374
+#: usr/local/www/system_advanced_firewall.php:245
+#: usr/local/www/system_advanced_admin.php:289
+#: usr/local/www/system_advanced_misc.php:247
+#: usr/local/www/load_balancer_virtual_server_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:220
+#: usr/local/www/load_balancer_virtual_server_edit.php:233
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375
+#: usr/local/www/system_advanced_misc.php:266
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/diag_nanobsd.php:148
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_firewall.php:274
+#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_advanced_misc.php:317
+#: usr/local/www/system_routes_edit.php:399
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/diag_nanobsd.php:139 usr/local/www/interfaces.php:2820
+#: usr/local/www/interfaces.php:2829 usr/local/www/system_routes_edit.php:409
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_advanced_admin.php:289
+#: usr/local/www/system_advanced_misc.php:317
+#: usr/local/www/system_routes_edit.php:403
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/system_advanced_network.php:197
+#: usr/local/www/diag_nanobsd.php:139
+#: usr/local/www/system_advanced_sysctl.php:163
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+msgid "NOTE:"
+msgstr "注:"
+
+#: usr/local/www/diag_nanobsd.php:130
+#: usr/local/www/system_advanced_admin.php:291
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_misc.php:223
+#: usr/local/www/system_advanced_network.php:199
+#: usr/local/www/system_advanced_sysctl.php:165
+#: usr/local/www/system_advanced_firewall.php:247
+#: usr/local/www/system_advanced_misc.php:249
+#: usr/local/www/diag_nanobsd.php:129
+#: usr/local/www/system_advanced_misc.php:268
+#: usr/local/www/diag_nanobsd.php:150
+#: usr/local/www/system_advanced_misc.php:272
+#: usr/local/www/system_advanced_firewall.php:276
+#: usr/local/www/system_advanced_misc.php:319
+#: usr/local/www/system_advanced_firewall.php:275
+#: usr/local/www/diag_nanobsd.php:141
+#: usr/local/www/system_advanced_admin.php:291
+#: usr/local/www/system_advanced_misc.php:319
+#: usr/local/www/system_advanced_firewall.php:275
+#: usr/local/www/system_advanced_network.php:199
+#: usr/local/www/diag_nanobsd.php:141
+#: usr/local/www/system_advanced_sysctl.php:165
+msgid "The options on this page are intended for use by advanced users only."
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚ªãƒ—ションã¯ã€ä¸Šç´šãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ãŒä½¿ç”¨ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135
+#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:147
+#: usr/local/www/diag_nanobsd.php:147
+msgid "Bootup information"
+msgstr "情報をブートアップ"
+
+#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138
+#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:150
+#: usr/local/www/diag_nanobsd.php:150
+msgid "NanoBSD Image size"
+msgstr "NanoBSDã®ç”»åƒã‚µã‚¤ã‚º"
+
+#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144
+#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:156
+#: usr/local/www/diag_nanobsd.php:156
+msgid "Bootup"
+msgstr "ブートアップ"
+
+#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147
+#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:159
+#: usr/local/www/diag_nanobsd.php:159
+msgid "Bootup slice is currently:"
+msgstr "ブートアップスライスã¯ã€ç¾åœ¨ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™"
+
+#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148
+#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:160
+#: usr/local/www/diag_nanobsd.php:160
+msgid "This will switch the bootup slice to the alternate slice."
+msgstr "ã“ã‚Œã¯åˆ¥ã®ã‚¹ãƒ©ã‚¤ã‚¹ã«ãƒ–ートアップスライスを切り替ãˆã¾ã™ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158
+#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:208
+#: usr/local/www/diag_nanobsd.php:208
+msgid "Duplicate bootup slice to alternate"
+msgstr "交互ã«ãƒ–ートアップスライスを複製"
+
+#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161
+#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:211
+#: usr/local/www/diag_nanobsd.php:211
+msgid "Duplicate bootup slice"
+msgstr "ブートアップスライスを複製"
+
+#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164
+#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:214
+#: usr/local/www/diag_nanobsd.php:214
+msgid "Destination slice:"
+msgstr "å…ˆã®ã‚¹ãƒ©ã‚¤ã‚¹ï¼š"
+
+#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171
+#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:221
+#: usr/local/www/diag_nanobsd.php:221
+msgid ""
+"This will duplicate the bootup slice to the alternate slice. Use this if "
+"you would like to duplicate the known good working boot partition to the "
+"alternate."
+msgstr ""ã“ã‚Œã¯åˆ¥ã®ã‚¹ãƒ©ã‚¤ã‚¹ã«ã€èµ·å‹•ã‚¹ãƒ©ã‚¤ã‚¹ã‚’複製ã—ã¾ã™ã€‚å ´åˆã¯ã€ã“れを使用ã—ã¦"ã‚ãªãŸã¯"代替ã«çŸ¥ã‚‰ã‚Œã¦ã„る良好ãªãƒ–ートパーティションを複製ã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181
+#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:231
+#: usr/local/www/diag_nanobsd.php:231
+msgid "Periodic Data Backup"
+msgstr "定期的ãªãƒ‡ãƒ¼ã‚¿ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184
+#: usr/local/www/diag_nanobsd.php:243
+msgid "RRD Backup"
+msgstr "RRDã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205
+#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204
+#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263
+#: usr/local/www/system_advanced_misc.php:602
+#: usr/local/www/system_advanced_misc.php:618
+#: usr/local/www/system_advanced_misc.php:602
+#: usr/local/www/system_advanced_misc.php:618
+msgid "Frequency:"
+msgstr "周波数:"
+
+#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207
+#: usr/local/www/system_firmware.php:133
+#: usr/local/www/services_dyndns_edit.php:152
+#: usr/local/www/vpn_ipsec_phase1.php:812
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/system_advanced_firewall.php:410
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189
+#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140
+#: usr/local/www/firewall_nat_edit.php:795
+#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248
+#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135
+#: usr/local/www/services_dyndns_edit.php:214
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/system_advanced_firewall.php:472
+#: usr/local/www/vpn_ipsec_phase1.php:843
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/system_advanced_misc.php:604
+#: usr/local/www/system_advanced_misc.php:620
+#: usr/local/www/system_advanced_firewall.php:473
+#: usr/local/www/firewall_nat_edit.php:803
+#: usr/local/www/system_firmware.php:135
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:803
+#: usr/local/www/system_advanced_misc.php:604
+#: usr/local/www/system_advanced_misc.php:620
+#: usr/local/www/system_advanced_firewall.php:473
+#: usr/local/www/vpn_ipsec_phase1.php:843
+msgid "Disable"
+msgstr "無効ã«ã™ã‚‹"
+
+#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209
+#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208
+#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267
+#: usr/local/www/system_advanced_misc.php:606
+#: usr/local/www/system_advanced_misc.php:622
+#: usr/local/www/system_advanced_misc.php:606
+#: usr/local/www/system_advanced_misc.php:622
+msgid "hour"
+msgstr "時間"
+
+#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195
+#: usr/local/www/diag_nanobsd.php:254
+#: usr/local/www/system_advanced_misc.php:610
+#: usr/local/www/system_advanced_misc.php:610
+msgid ""
+"This will periodically backup the RRD data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr "次回ã®èµ·å‹•æ™‚ã«è‡ªå‹•çš„ã« "ã“ã‚Œã¯RRDデータを定期的ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—復元ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ 。より頻ç¹ã«ã¯ã€ã€Œãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ã‚ˆã‚Šå¤šãã®æ›¸ãè¾¼ã¿ãŒã€ãƒ¡ãƒ‡ã‚£ã‚¢ã¯ã©ã†ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201
+#: usr/local/www/diag_nanobsd.php:260
+msgid "DHCP Leases Backup"
+msgstr "DHCPã¯ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212
+#: usr/local/www/diag_nanobsd.php:271
+#: usr/local/www/system_advanced_misc.php:626
+#: usr/local/www/system_advanced_misc.php:626
+msgid ""
+"This will periodically backup the DHCP leases data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr "次回ã®èµ·å‹•æ™‚ã«è‡ªå‹•çš„ã«ã€Œãã‚ŒãŒå¾©å…ƒã§ãるよã†ã«ã“ã‚Œã¯ã€DHCPã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’定期的ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—リースã¾ã™ã€ 。より頻ç¹ã«ã¯ã€ã€Œãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ã‚ˆã‚Šå¤šãã®æ›¸ãè¾¼ã¿ãŒã€ãƒ¡ãƒ‡ã‚£ã‚¢ã¯ã©ã†ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225
+#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:244
+#: usr/local/www/diag_nanobsd.php:244
+msgid "View upgrade log"
+msgstr "ビューアップグレードログ"
+
+#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228
+#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:247
+#: usr/local/www/diag_nanobsd.php:247
+msgid "View previous upgrade log"
+msgstr "å‰å›žã®ã‚¢ãƒƒãƒ—グレードログを表示ã™ã‚‹"
+
+#: usr/local/www/diag_packet_capture.php:38
+#: usr/local/www/diag_packet_capture.php:225
+#: usr/local/www/diag_packet_capture.php:246
+#: usr/local/www/diag_packet_capture.php:40
+#: usr/local/www/diag_packet_capture.php:293
+#: usr/local/www/diag_packet_capture.php:311
+#: usr/local/www/diag_packet_capture.php:40
+#: usr/local/www/diag_packet_capture.php:311
+msgid "Download Capture"
+msgstr "キャプãƒãƒ£ã‚’ダウンロード"
+
+#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210
+#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237
+#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229
+#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229
+msgid "Packet Capture"
+msgstr "パケットキャプãƒãƒ£"
+
+#: usr/local/www/diag_packet_capture.php:71
+#: usr/local/www/diag_packet_capture.php:220
+#: usr/local/www/diag_packet_capture.php:265
+#: usr/local/www/status_dhcp_leases.php:321
+#: usr/local/www/status_dhcpv6_leases.php:363
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/status_dhcpv6_leases.php:484
+#: usr/local/www/status_dhcp_leases.php:342
+#: usr/local/www/diag_packet_capture.php:75
+#: usr/local/www/diag_packet_capture.php:240
+#: usr/local/www/diag_packet_capture.php:294
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:485
+#: usr/local/www/status_dhcp_leases.php:344
+#: usr/local/www/diag_packet_capture.php:129
+#: usr/local/www/diag_packet_capture.php:287
+#: usr/local/www/diag_packet_capture.php:341
+#: usr/local/www/status_dhcpv6_leases.php:411
+#: usr/local/www/status_dhcpv6_leases.php:488
+#: usr/local/www/diag_packet_capture.php:137
+#: usr/local/www/diag_packet_capture.php:305
+#: usr/local/www/diag_packet_capture.php:359
+#: usr/local/www/status_dhcpv6_leases.php:411
+#: usr/local/www/status_dhcpv6_leases.php:488
+#: usr/local/www/diag_packet_capture.php:137
+#: usr/local/www/diag_packet_capture.php:305
+#: usr/local/www/diag_packet_capture.php:359
+#: usr/local/www/status_dhcp_leases.php:344
+msgid "Start"
+msgstr "スタート"
+
+#: usr/local/www/diag_packet_capture.php:78
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:222
+#: usr/local/www/diag_packet_capture.php:82
+#: usr/local/www/diag_packet_capture.php:239
+#: usr/local/www/diag_packet_capture.php:242
+#: usr/local/www/diag_packet_capture.php:136
+#: usr/local/www/diag_packet_capture.php:286
+#: usr/local/www/diag_packet_capture.php:289
+#: usr/local/www/diag_packet_capture.php:144
+#: usr/local/www/diag_packet_capture.php:304
+#: usr/local/www/diag_packet_capture.php:307
+#: usr/local/www/diag_packet_capture.php:144
+#: usr/local/www/diag_packet_capture.php:304
+#: usr/local/www/diag_packet_capture.php:307
+msgid "Stop"
+msgstr "åœæ­¢"
+
+#: usr/local/www/diag_packet_capture.php:116
+#: usr/local/www/diag_packet_capture.php:120
+#: usr/local/www/diag_packet_capture.php:178
+#: usr/local/www/diag_packet_capture.php:186
+#: usr/local/www/diag_packet_capture.php:186
+msgid "Packet capture"
+msgstr "パケットキャプãƒãƒ£"
+
+#: usr/local/www/diag_packet_capture.php:141
+#: usr/local/www/diag_packet_capture.php:145
+#: usr/local/www/diag_packet_capture.php:192
+#: usr/local/www/diag_packet_capture.php:200
+#: usr/local/www/diag_packet_capture.php:200
+msgid "Select the interface on which to capture traffic."
+msgstr "トラフィックをキャプãƒãƒ£ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:145
+#: usr/local/www/system_gateways_edit.php:376
+#: usr/local/www/diag_packet_capture.php:149
+#: usr/local/www/system_gateways_edit.php:482
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/system_gateways_edit.php:484
+#: usr/local/www/diag_packet_capture.php:212
+#: usr/local/www/system_gateways_edit.php:514
+#: usr/local/www/system_gateways_edit.php:514
+#: usr/local/www/diag_packet_capture.php:212
+msgid "Address Family"
+msgstr "アドレスファミリ"
+
+#: usr/local/www/diag_packet_capture.php:152
+#: usr/local/www/diag_packet_capture.php:156
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:219
+msgid ""
+"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 "
+"only."
+msgstr "「æ•ç²ã•ã‚Œã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®ç¨®é¡žã‚’é¸æŠžã—ã€ã„ãšã‚Œã‹ä»»æ„ã®ã¯IPv4ã®ã¿ã¾ãŸã¯IPv6 ã€ã®ã¿ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:156
+#: usr/local/www/diag_packet_capture.php:176
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/diag_packet_capture.php:239
+#: usr/local/www/diag_packet_capture.php:239
+msgid "Host Address"
+msgstr "ホストアドレス"
+
+#: usr/local/www/diag_packet_capture.php:159
+#: usr/local/www/diag_packet_capture.php:179
+#: usr/local/www/diag_packet_capture.php:226
+#: usr/local/www/diag_packet_capture.php:242
+#: usr/local/www/diag_packet_capture.php:242
+msgid ""
+"This value is either the Source or Destination IP address or subnet in CIDR "
+"notation. The packet capture will look for this address in either field."
+msgstr "表記"ã“ã®å€¤ã¯ã€CIDRã§ã®ã‚½ãƒ¼ã‚¹ã¾ãŸã¯å®›å…ˆIPアドレスやサブãƒãƒƒãƒˆã®ã©ã¡ã‚‰ã‹ã§ã‚る〠。パケットキャプãƒãƒ£ã¯ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ã„ãšã‚Œã‹ã§ã€ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’検索ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:160
+#: usr/local/www/diag_packet_capture.php:180
+#: usr/local/www/diag_packet_capture.php:227
+#: usr/local/www/diag_packet_capture.php:243
+#: usr/local/www/diag_packet_capture.php:243
+msgid ""
+"This value can be a domain name or IP address, or subnet in CIDR notation."
+msgstr "「ã“ã®å€¤ã¯ã€ CIDR表記ã®ãƒ‰ãƒ¡ã‚¤ãƒ³åã¾ãŸã¯IPアドレスã€ã¾ãŸã¯ã‚µãƒ–ãƒãƒƒãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:161
+#: usr/local/www/diag_packet_capture.php:181
+#: usr/local/www/diag_packet_capture.php:228
+#: usr/local/www/diag_packet_capture.php:244
+#: usr/local/www/diag_packet_capture.php:244
+msgid ""
+"If you leave this field blank, all packets on the specified interface will "
+"be captured."
+msgstr ""ã‚ãªãŸã¯ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã—ã¦ãŠãã¨ã€æŒ‡å®šã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã®ã™ã¹ã¦ã®ãƒ‘ケットãŒã—ã¾ã™ã€æ•ç²ã™ã‚‹ã“ã¨ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:168
+#: usr/local/www/diag_packet_capture.php:188
+#: usr/local/www/diag_packet_capture.php:235
+#: usr/local/www/diag_packet_capture.php:251
+#: usr/local/www/diag_packet_capture.php:251
+msgid ""
+"The port can be either the source or destination port. The packet capture "
+"will look for this port in either field."
+msgstr "「ãƒãƒ¼ãƒˆã¯ã€é€ä¿¡å…ƒã¾ãŸã¯å®›å…ˆãƒãƒ¼ãƒˆã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚パケットキャプãƒãƒ£ã€ã¯ã„ãšã‚Œã‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«ã€ã“ã®ãƒãƒ¼ãƒˆã‚’検索ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:169
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/diag_packet_capture.php:236
+#: usr/local/www/diag_packet_capture.php:252
+#: usr/local/www/diag_packet_capture.php:252
+msgid "Leave blank if you do not want to filter by port."
+msgstr "ã‚ãªãŸã¯ã€ãƒãƒ¼ãƒˆã§ãƒ•ã‚£ãƒ«ã‚¿ã—ãŸããªã„å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:173
+#: usr/local/www/diag_packet_capture.php:193
+#: usr/local/www/diag_packet_capture.php:240
+#: usr/local/www/diag_packet_capture.php:256
+#: usr/local/www/diag_packet_capture.php:256
+msgid "Packet Length"
+msgstr "パケット長"
+
+#: usr/local/www/diag_packet_capture.php:176
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/diag_packet_capture.php:243
+#: usr/local/www/diag_packet_capture.php:259
+#: usr/local/www/diag_packet_capture.php:259
+msgid ""
+"The Packet length is the number of bytes of each packet that will be "
+"captured. Default value is 0, which will capture the entire frame regardless "
+"of its size."
+msgstr "æ•æ‰ã€Œãƒ‘ケット長ãŒã•ã‚Œã‚‹å„パケットã®ãƒã‚¤ãƒˆæ•°ã§ã‚る〠。デフォルト値ã¯ã€ãã®ã‚µã‚¤ã‚ºã®ãŸã‚"ã«é–¢ä¿‚ãªãã€ãƒ•ãƒ¬ãƒ¼ãƒ å…¨ä½“をキャプãƒãƒ£ã—ã¦ã„る〠0ã§ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55
+#: usr/local/www/diag_ping.php:108
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_captiveportal_vouchers_edit.php:189
+#: usr/local/www/diag_packet_capture.php:200
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:187
+#: usr/local/www/diag_packet_capture.php:247
+#: usr/local/www/diag_packet_capture.php:263 usr/local/www/diag_ping.php:57
+#: usr/local/www/diag_ping.php:129 usr/local/www/diag_packet_capture.php:263
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:187
+#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:129
+msgid "Count"
+msgstr "カウント"
+
+#: usr/local/www/diag_packet_capture.php:183
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:250
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/diag_packet_capture.php:266
+msgid ""
+"This is the number of packets the packet capture will grab. Default value is "
+"100."
+msgstr "「ã“ã‚Œã¯ã€ãƒ‘ケットキャプãƒãƒ£ãŒã¤ã‹ã‚€ã¾ã™ãƒ‘ケットã®æ•°ã§ã™ã€‚デフォルト値ã¯"100 。"
+
+#: usr/local/www/diag_packet_capture.php:183
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:250
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/diag_packet_capture.php:266
+msgid "Enter 0 (zero) for no count limit."
+msgstr "無カウント制é™ã®ãŸã‚ã«0 (ゼロ)を入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:186
+#: usr/local/www/diag_packet_capture.php:206
+#: usr/local/www/diag_packet_capture.php:253
+#: usr/local/www/diag_packet_capture.php:270
+#: usr/local/www/diag_packet_capture.php:270
+msgid "Level of Detail"
+msgstr "詳細度"
+
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/diag_packet_capture.php:209
+#: usr/local/www/diag_packet_capture.php:256
+#: usr/local/www/diag_packet_capture.php:273
+#: usr/local/www/diag_packet_capture.php:273
+msgid "Normal"
+msgstr "通常ã®"
+
+#: usr/local/www/diag_packet_capture.php:190
+#: usr/local/www/diag_packet_capture.php:210
+#: usr/local/www/diag_packet_capture.php:257
+#: usr/local/www/diag_packet_capture.php:274
+#: usr/local/www/diag_packet_capture.php:274
+msgid "Medium"
+msgstr "メディア"
+
+#: usr/local/www/diag_packet_capture.php:191
+#: usr/local/www/diag_packet_capture.php:211
+#: usr/local/www/diag_packet_capture.php:258
+#: usr/local/www/diag_packet_capture.php:275
+#: usr/local/www/diag_packet_capture.php:275
+msgid "High"
+msgstr "高ã„"
+
+#: usr/local/www/diag_packet_capture.php:192
+#: usr/local/www/diag_packet_capture.php:212
+#: usr/local/www/diag_packet_capture.php:259
+#: usr/local/www/diag_packet_capture.php:276
+#: usr/local/www/diag_packet_capture.php:276
+msgid "Full"
+msgstr "フル"
+
+#: usr/local/www/diag_packet_capture.php:194
+#: usr/local/www/diag_packet_capture.php:214
+#: usr/local/www/diag_packet_capture.php:261
+#: usr/local/www/diag_packet_capture.php:278
+#: usr/local/www/diag_packet_capture.php:278
+msgid ""
+"This is the level of detail that will be displayed after hitting 'Stop' when "
+"the packets have been captured."
+msgstr "パケットãŒã‚­ãƒ£ãƒ—ãƒãƒ£ã•ã‚Œã¦ããŸã€Œã“ã‚ŒãŒã¨ã' stop'を打ã£ãŸå¾Œã«è¡¨ç¤ºã•ã‚ŒãŸè©³ç´°ãƒ¬ãƒ™ãƒ«ã§ã‚る〠。"
+
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/diag_packet_capture.php:216
+#: usr/local/www/diag_packet_capture.php:263
+#: usr/local/www/diag_packet_capture.php:280
+#: usr/local/www/diag_packet_capture.php:280
+msgid ""
+"This option does not affect the level of detail when downloading the packet "
+"capture."
+msgstr "キャプãƒãƒ£"パケットをダウンロードã™ã‚‹ã¨ãã«ã“ã®ã‚ªãƒ—ションã¯ã€è©³ç´°ãƒ¬ãƒ™ãƒ«ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“〠。"
+
+#: usr/local/www/diag_packet_capture.php:199
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/diag_packet_capture.php:284
+#: usr/local/www/diag_packet_capture.php:284
+msgid "Reverse DNS Lookup"
+msgstr "DNSã®é€†å¼•ã"
+
+#: usr/local/www/diag_packet_capture.php:202
+#: usr/local/www/diag_packet_capture.php:222
+#: usr/local/www/diag_packet_capture.php:269
+#: usr/local/www/diag_packet_capture.php:287
+#: usr/local/www/diag_packet_capture.php:287
+msgid ""
+"This check box will cause the packet capture to perform a reverse DNS lookup "
+"associated with all IP addresses."
+msgstr "ã™ã¹ã¦ã®IPアドレスã«é–¢é€£ä»˜ã‘られã¦ã„ã‚‹"ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã¯ã€ãƒ‘ケットキャプãƒãƒ£ã¯ã€ DNSã®é€†å¼•ããŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/diag_packet_capture.php:270
+#: usr/local/www/diag_packet_capture.php:288
+#: usr/local/www/diag_packet_capture.php:288
+msgid "This option can cause delays for large packet captures."
+msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€å¤§è¦æ¨¡ãªãƒ‘ケットキャプãƒãƒ£ã®é…延ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:226
+#: usr/local/www/diag_packet_capture.php:247
+#: usr/local/www/diag_packet_capture.php:294
+#: usr/local/www/diag_packet_capture.php:312
+#: usr/local/www/diag_packet_capture.php:312
+msgid "The packet capture file was last updated:"
+msgstr "パケットキャプãƒãƒ£ãƒ•ã‚¡ã‚¤ãƒ«ãŒæœ€å¾Œã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_packet_capture.php:239
+#: usr/local/www/diag_packet_capture.php:267
+#: usr/local/www/diag_packet_capture.php:260
+#: usr/local/www/diag_packet_capture.php:296
+#: usr/local/www/diag_packet_capture.php:307
+#: usr/local/www/diag_packet_capture.php:343
+#: usr/local/www/diag_packet_capture.php:325
+#: usr/local/www/diag_packet_capture.php:361
+#: usr/local/www/diag_packet_capture.php:325
+#: usr/local/www/diag_packet_capture.php:361
+msgid "Packet Capture is running."
+msgstr "パケットキャプãƒãƒ£ãŒå®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:272
+#: usr/local/www/diag_packet_capture.php:301
+#: usr/local/www/diag_packet_capture.php:347
+#: usr/local/www/diag_packet_capture.php:365
+#: usr/local/www/diag_packet_capture.php:365
+msgid "Packet Capture stopped."
+msgstr "パケットキャプãƒãƒ£ã‚’åœæ­¢ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_packet_capture.php:272
+#: usr/local/www/diag_packet_capture.php:301
+#: usr/local/www/diag_packet_capture.php:347
+#: usr/local/www/diag_packet_capture.php:365
+#: usr/local/www/diag_packet_capture.php:365
+msgid "Packets Captured:"
+msgstr "パケットã¯ã€ä¿å­˜ã•ã‚ŒãŸãƒ“デオ:"
+
+#: usr/local/www/crash_reporter.php:68 usr/local/www/crash_reporter.php:68
+msgid "Unfortunately we have detected a programming bug."
+msgstr "残念ãªãŒã‚‰ã€æˆ‘々ã¯ã€ãƒ—ログラミングã®ãƒã‚°ã‚’検出ã—ãŸã€‚"
+
+#: usr/local/www/crash_reporter.php:69 usr/local/www/crash_reporter.php:69
+msgid ""
+"Would you like to submit the programming debug logs to the pfSense "
+"developers for inspection?"
+msgstr "検査ã®ãŸã‚ã«é–‹ç™ºè€…ã¯ã€Œã‚ãªãŸã¯pfSenseã«ãƒ—ログラミングデãƒãƒƒã‚°ãƒ­ã‚°ã‚’é€ä¿¡ã—ãŸã„"?"
+
+#: usr/local/www/crash_reporter.php:71 usr/local/www/crash_reporter.php:71
+msgid ""
+"Please double check the contents to ensure you are comfortable sending this "
+"information before clicking Yes."
+msgstr "[ã¯ã„]をクリックã™ã‚‹å‰ã«ã“ã®æƒ…報をé€ä¿¡ã™ã‚‹ã“ã¨ã§å¿«é©ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«å†…容をå†ç¢ºèªã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/crash_reporter.php:73 usr/local/www/crash_reporter.php:73
+msgid "Contents of crash reports"
+msgstr "クラッシュレãƒãƒ¼ãƒˆã®å†…容"
+
+#: usr/local/www/crash_reporter.php:76 usr/local/www/crash_reporter.php:76
+msgid " - Submit this to the developers for inspection"
+msgstr " - 検査ã®ãŸã‚ã«ã€é–‹ç™ºè€…ã«ã“れをæ出"
+
+#: usr/local/www/crash_reporter.php:77 usr/local/www/crash_reporter.php:77
+msgid " - Just delete the crash report and take me back to the Dashboard"
+msgstr " - ã¡ã‚‡ã†ã©ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆã‚’削除ã—ã¦ã€ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã«ç§ã‚’å–り戻ã™"
+
+#: usr/local/www/crash_reporter.php:82 usr/local/www/crash_reporter.php:82
+msgid "Crash reporter"
+msgstr "クラッシュレãƒãƒ¼ã‚¿ãƒ¼"
+
+#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103
+#: usr/local/www/crash_reporter.php:103
+msgid "Processing..."
+msgstr "処ç†ä¸­..."
+
+#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110
+#: usr/local/www/crash_reporter.php:112 usr/local/www/crash_reporter.php:112
+msgid "Uploading..."
+msgstr "アップロード..."
+
+#: usr/local/www/crash_reporter.php:116
+#: usr/local/www/services_captiveportal_zones_edit.php:115
+#: usr/local/www/crash_reporter.php:120
+#: usr/local/www/services_captiveportal_zones_edit.php:117
+#: usr/local/www/crash_reporter.php:122
+#: usr/local/www/services_captiveportal_zones_edit.php:115
+#: usr/local/www/crash_reporter.php:122
+msgid "Continue"
+msgstr "続ã‘ã‚‹"
+
+#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120
+#: usr/local/www/crash_reporter.php:122 usr/local/www/crash_reporter.php:122
+msgid " and delete crash report files from local disk."
+msgstr "ローカルディスクã‹ã‚‰ã®ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ãƒ¬ãƒãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_authentication.php:52
+#: usr/local/www/diag_authentication.php:52
+msgid "is not a valid authentication server"
+msgstr "有効ãªèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/diag_authentication.php:55
+#: usr/local/www/diag_authentication.php:55
+msgid "A username and password must be specified."
+msgstr "ユーザーåã¨ãƒ‘スワードを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/diag_authentication.php:59
+msgid "authenticated successfully."
+msgstr "èªè¨¼ã«æˆåŠŸã€‚"
+
+#: usr/local/www/diag_authentication.php:61
+#: usr/local/www/diag_authentication.php:61
+msgid "This user is a member of these groups"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹"
+
+#: usr/local/www/diag_authentication.php:65
+#: usr/local/www/diag_authentication.php:65
+msgid "Authentication failed."
+msgstr "èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325
+#: usr/local/www/services_captiveportal.php:578
+#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189
+#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583
+#: usr/local/www/services_captiveportal.php:938
+#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215
+#: usr/local/www/services_captiveportal.php:581
+#: usr/local/www/services_captiveportal.php:934
+#: usr/local/www/interfaces.php:2493
+#: usr/local/www/services_captiveportal.php:575
+#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206
+#: usr/local/www/interfaces.php:2523
+#: usr/local/www/services_captiveportal.php:591
+#: usr/local/www/services_captiveportal.php:952
+#: usr/local/www/interfaces.php:2569 usr/local/www/interfaces.php:2558
+#: usr/local/www/diag_authentication.php:69
+#: usr/local/www/services_captiveportal.php:591
+#: usr/local/www/services_captiveportal.php:952 usr/local/www/fbegin.inc:206
+#: usr/local/www/interfaces.php:2558
+msgid "Authentication"
+msgstr "èªè¨¼"
+
+#: usr/local/www/diag_authentication.php:90
+#: usr/local/www/system_authservers.php:82
+#: usr/local/www/system_usermanager_settings.php:140
+#: usr/local/www/diag_authentication.php:91
+#: usr/local/www/system_authservers.php:83
+#: usr/local/www/system_usermanager_settings.php:143
+#: usr/local/www/diag_authentication.php:91
+#: usr/local/www/system_authservers.php:83
+#: usr/local/www/system_usermanager_settings.php:143
+msgid "Authentication Server"
+msgstr "èªè¨¼ã‚µãƒ¼ãƒãƒ¼"
+
+#: usr/local/www/diag_authentication.php:106
+#: usr/local/www/status_captiveportal.php:162
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789
+#: usr/local/www/interfaces.php:1895
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:510
+#: usr/local/www/vpn_pptp_users.php:98
+#: usr/local/www/vpn_pptp_users_edit.php:76
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:146
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:213
+#: usr/local/www/system_usermanager.php:177
+#: usr/local/www/system_usermanager.php:182
+#: usr/local/www/system_usermanager.php:187
+#: usr/local/www/system_usermanager.php:475
+#: usr/local/www/system_usermanager.php:787
+#: usr/local/www/vpn_l2tp_users.php:101
+#: usr/local/www/vpn_l2tp_users_edit.php:78
+#: usr/local/www/vpn_l2tp_users_edit.php:81
+#: usr/local/www/vpn_l2tp_users_edit.php:154
+#: usr/local/www/vpn_openvpn_client.php:531
+#: usr/local/www/vpn_pppoe_edit.php:536
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95
+#: usr/local/www/services_dyndns_edit.php:99
+#: usr/local/www/services_dyndns_edit.php:296
+#: usr/local/www/system_usermanager.php:473
+#: usr/local/www/system_usermanager.php:785
+#: usr/local/www/firewall_aliases_edit.php:473
+#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967
+#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536
+#: usr/local/www/vpn_pppoe_edit.php:537
+#: usr/local/www/system_usermanager.php:786
+#: usr/local/www/interfaces_ppps_edit.php:511
+#: usr/local/www/firewall_aliases_edit.php:475
+#: usr/local/www/vpn_l2tp_users.php:102
+#: usr/local/www/diag_authentication.php:107
+#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890
+#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061
+#: usr/local/www/vpn_openvpn_client.php:554
+#: usr/local/www/vpn_l2tp_users_edit.php:79
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:155
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97
+#: usr/local/www/vpn_pptp_users.php:99
+#: usr/local/www/vpn_openvpn_client.php:573
+#: usr/local/www/services_dyndns_edit.php:300
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:517
+#: usr/local/www/vpn_pppoe_edit.php:540
+#: usr/local/www/status_captiveportal.php:148
+#: usr/local/www/interfaces.php:1914 usr/local/www/interfaces.php:1982
+#: usr/local/www/interfaces.php:2091
+#: usr/local/www/services_dyndns_edit.php:100
+#: usr/local/www/services_dyndns_edit.php:308
+#: usr/local/www/firewall_aliases_edit.php:497
+#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:2028
+#: usr/local/www/interfaces.php:2137
+#: usr/local/www/interfaces_ppps_edit.php:515
+#: usr/local/www/interfaces.php:1948 usr/local/www/interfaces.php:2017
+#: usr/local/www/interfaces.php:2126 usr/local/www/diag_authentication.php:107
+#: usr/local/www/vpn_pptp_users.php:99
+#: usr/local/www/vpn_openvpn_client.php:573
+#: usr/local/www/services_dyndns_edit.php:100
+#: usr/local/www/services_dyndns_edit.php:308
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:515
+#: usr/local/www/vpn_pppoe_edit.php:540 usr/local/www/vpn_l2tp_users.php:102
+#: usr/local/www/status_captiveportal.php:148
+#: usr/local/www/firewall_aliases_edit.php:483
+#: usr/local/www/vpn_l2tp_users_edit.php:79
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:155
+#: usr/local/www/vpn_pptp_users_edit.php:76
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:147
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95
+#: usr/local/www/system_usermanager.php:177
+#: usr/local/www/system_usermanager.php:182
+#: usr/local/www/system_usermanager.php:187
+#: usr/local/www/system_usermanager.php:473
+#: usr/local/www/system_usermanager.php:786 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces.php:2017 usr/local/www/interfaces.php:2126
+msgid "Username"
+msgstr "ユーザå"
+
+#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730
+#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:516
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:151
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:220
+#: usr/local/www/system_advanced_notifications.php:192
+#: usr/local/www/system_usermanager.php:183
+#: usr/local/www/system_usermanager.php:188
+#: usr/local/www/system_usermanager.php:482
+#: usr/local/www/system_usermanager_passwordmg.php:50
+#: usr/local/www/system_usermanager_passwordmg.php:98
+#: usr/local/www/system_usermanager_passwordmg.php:101
+#: usr/local/www/vpn_l2tp_users_edit.php:81
+#: usr/local/www/vpn_l2tp_users_edit.php:159
+#: usr/local/www/vpn_openvpn_client.php:541
+#: usr/local/www/vpn_pppoe_edit.php:537
+#: usr/local/www/services_dyndns_edit.php:97
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/system_usermanager.php:480
+#: usr/local/www/system_advanced_notifications.php:201
+#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973
+#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546
+#: usr/local/www/vpn_pppoe_edit.php:538
+#: usr/local/www/interfaces_ppps_edit.php:517
+#: usr/local/www/system_usermanager_passwordmg.php:99
+#: usr/local/www/system_usermanager_passwordmg.php:102
+#: usr/local/www/diag_authentication.php:113
+#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896
+#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067
+#: usr/local/www/vpn_openvpn_client.php:564
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:160
+#: usr/local/www/vpn_openvpn_client.php:583
+#: usr/local/www/services_dyndns_edit.php:309
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:523
+#: usr/local/www/vpn_pppoe_edit.php:541
+#: usr/local/www/system_usermanager_passwordmg.php:104
+#: usr/local/www/system_usermanager_passwordmg.php:107
+#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1988
+#: usr/local/www/interfaces.php:2097 usr/local/www/services_dyndns_edit.php:98
+#: usr/local/www/services_dyndns_edit.php:317
+#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2034
+#: usr/local/www/interfaces.php:2143
+#: usr/local/www/interfaces_ppps_edit.php:521
+#: usr/local/www/interfaces.php:1954 usr/local/www/interfaces.php:2023
+#: usr/local/www/interfaces.php:2132 usr/local/www/diag_authentication.php:113
+#: usr/local/www/vpn_openvpn_client.php:583
+#: usr/local/www/services_dyndns_edit.php:98
+#: usr/local/www/services_dyndns_edit.php:317
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:521
+#: usr/local/www/vpn_pppoe_edit.php:541
+#: usr/local/www/system_usermanager_passwordmg.php:50
+#: usr/local/www/system_usermanager_passwordmg.php:104
+#: usr/local/www/system_usermanager_passwordmg.php:107
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:160
+#: usr/local/www/system_advanced_notifications.php:201
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:152
+#: usr/local/www/system_usermanager.php:183
+#: usr/local/www/system_usermanager.php:188
+#: usr/local/www/system_usermanager.php:480 usr/local/www/interfaces.php:1954
+#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2132
+msgid "Password"
+msgstr "パスワード"
+
+#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346
+#: usr/local/www/diag_authentication.php:121
+#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367
+#: usr/local/www/diag_testport.php:181
+#: usr/local/www/diag_authentication.php:121
+#: usr/local/www/diag_testport.php:181 usr/local/www/diag_smart.php:367
+msgid "Test"
+msgstr "テスト"
+
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85
+#: usr/local/www/services_dyndns.php:64 usr/local/www/services_dyndns.php:60
+#: usr/local/www/services_dyndns.php:60
+msgid "Dynamic DNS clients"
+msgstr "ダイナミックDNSクライアント"
+
+#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68
+#: usr/local/www/services_dyndns.php:98 usr/local/www/services_dyndns.php:78
+#: usr/local/www/services_dyndns.php:74 usr/local/www/services_rfc2136.php:68
+#: usr/local/www/services_dyndns.php:74
+msgid "DynDns"
+msgstr "ダイナミックDNS"
+
+#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69
+#: usr/local/www/services_dyndns.php:99 usr/local/www/services_dyndns.php:79
+#: usr/local/www/services_dyndns.php:75 usr/local/www/services_rfc2136.php:69
+#: usr/local/www/services_dyndns.php:75
+msgid "RFC 2136"
+msgstr "RFC 2136"
+
+#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244
+#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240
+#: usr/local/www/status_services.php:238
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52
+#: usr/local/www/services_dyndns.php:90 usr/local/www/status_services.php:79
+#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79
+#: usr/local/www/services_dyndns.php:86 usr/local/www/status_services.php:79
+#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79
+#: usr/local/www/services_dyndns.php:86
+msgid "Service"
+msgstr "サービス"
+
+#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612
+#: usr/local/www/system.php:113 usr/local/www/system.php:254
+#: usr/local/www/services_dhcp.php:892
+#: usr/local/www/services_dhcp_edit.php:228
+#: usr/local/www/services_captiveportal_hostname.php:122
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+#: usr/local/www/services_captiveportal_hostname_edit.php:180
+#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:184
+#: usr/local/www/services_rfc2136.php:79
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:146
+#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131
+#: usr/local/www/services_dhcpv6.php:805
+#: usr/local/www/services_dhcpv6_edit.php:205
+#: usr/local/www/services_dyndns_edit.php:95
+#: usr/local/www/services_dyndns_edit.php:267
+#: usr/local/www/services_dhcpv6_edit.php:208
+#: usr/local/www/status_dhcp_leases.php:341
+#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930
+#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690
+#: usr/local/www/system.php:114 usr/local/www/system.php:265
+#: usr/local/www/services_dhcpv6.php:900
+#: usr/local/www/services_dhcpv6_edit.php:210
+#: usr/local/www/services_captiveportal_hostname_edit.php:174
+#: usr/local/www/services_captiveportal_hostname_edit.php:178
+#: usr/local/www/services_captiveportal_hostname.php:120
+#: usr/local/www/status_dhcp_leases.php:343
+#: usr/local/www/services_dhcp.php:1134
+#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678
+#: usr/local/www/system.php:107 usr/local/www/system.php:258
+#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80
+#: usr/local/www/services_dhcpv6_edit.php:213
+#: usr/local/www/services_dyndns_edit.php:271
+#: usr/local/www/services_dhcp_edit.php:361
+#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcpv6.php:852
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53
+#: usr/local/www/services_dyndns.php:91
+#: usr/local/www/services_dyndns_edit.php:96
+#: usr/local/www/services_dyndns_edit.php:273
+#: usr/local/www/services_dhcp.php:1173
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80
+#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces.php:1728 usr/local/www/services_rfc2136.php:80
+#: usr/local/www/diag_ndp.php:131 usr/local/www/diag_arp.php:315
+#: usr/local/www/services_dhcpv6_edit.php:213
+#: usr/local/www/services_dyndns_edit.php:96
+#: usr/local/www/services_dyndns_edit.php:273 usr/local/www/system.php:107
+#: usr/local/www/system.php:258
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+#: usr/local/www/services_captiveportal_hostname_edit.php:180
+#: usr/local/www/services_dhcp_edit.php:361
+#: usr/local/www/services_dhcp.php:1173
+#: usr/local/www/services_captiveportal_hostname.php:120
+#: usr/local/www/services_dhcpv6.php:852
+#: usr/local/www/status_dhcp_leases.php:343
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:146
+#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1728
+msgid "Hostname"
+msgstr "ホストå"
+
+#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54
+#: usr/local/www/services_dyndns.php:92
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81
+#: usr/local/www/services_dyndns.php:88
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81
+#: usr/local/www/services_dyndns.php:88
+msgid "Cached IP"
+msgstr "キャッシュã•ã‚ŒãŸIPアドレス"
+
+#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188
+#: usr/local/www/firewall_virtual_ip.php:221
+#: usr/local/www/system_advanced_sysctl.php:199
+#: usr/local/www/services_captiveportal_zones.php:89
+#: usr/local/www/services_dyndns.php:172
+#: usr/local/www/services_captiveportal_zones.php:90
+#: usr/local/www/firewall_virtual_ip.php:227
+#: usr/local/www/firewall_virtual_ip.php:247
+#: usr/local/www/services_dyndns.php:171 usr/local/www/services_dyndns.php:167
+#: usr/local/www/firewall_virtual_ip.php:270
+#: usr/local/www/services_wol.php:188
+#: usr/local/www/firewall_virtual_ip.php:270
+#: usr/local/www/services_captiveportal_zones.php:90
+#: usr/local/www/services_dyndns.php:167
+#: usr/local/www/system_advanced_sysctl.php:199
+msgid "Do you really want to delete this entry?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183
+#: usr/local/www/services_dyndns.php:179 usr/local/www/services_dyndns.php:179
+msgid ""
+"IP addresses appearing in green are up to date with Dynamic DNS provider."
+msgstr "「緑ã®ä¸­ã«ç¾ã‚Œã‚‹IPアドレスã¯ã€ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSプロãƒã‚¤ãƒ€ã¨ã®æœ€æ–°ã®ã‚‚ã®ã§ã‚る。"
+
+#: usr/local/www/graph_cpu.php:83 usr/local/www/graph_cpu.php:83
+msgid "Cannot get CPU load"
+msgstr "CPUè² è·ã‚’å–å¾—ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123
+#: usr/local/www/graph.php:123 usr/local/www/graph_cpu.php:84
+msgid "Collecting initial data, please wait"
+msgstr "åˆæœŸãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„"
+
+#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135
+#: usr/local/www/graph.php:135 usr/local/www/graph_cpu.php:96
+msgid "No URL for getURL"
+msgstr "ã®getURLã®ãŸã‚ã®URLãŒãªã„"
+
+#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142
+#: usr/local/www/graph.php:142 usr/local/www/graph_cpu.php:103
+msgid "No callback function for getURL"
+msgstr "ã®getURLã®ãŸã‚ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã¾ã›ã‚“"
+
+#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158
+#: usr/local/www/graph.php:158 usr/local/www/graph_cpu.php:119
+msgid "Both getURL and XMLHttpRequest are undefined"
+msgstr "ã®getURLã¨XMLHttpRequestã®ä¸¡æ–¹ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91
+#: usr/local/www/services_snmp.php:91
+msgid "Invalid character '#' in system location"
+msgstr "無効ãªæ–‡å­—'"
+
+#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92
+#: usr/local/www/services_snmp.php:92
+msgid "Invalid character '#' in system contact"
+msgstr "無効ãªæ–‡å­—'"
+
+#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93
+#: usr/local/www/services_snmp.php:93
+msgid "Invalid character '#' in read community string"
+msgstr "無効ãªæ–‡å­—'"
+
+#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96
+#: usr/local/www/services_snmp.php:96
+msgid "Community"
+msgstr "コミュニティ"
+
+#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100
+#: usr/local/www/services_snmp.php:100
+msgid "Polling Port"
+msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107
+#: usr/local/www/services_snmp.php:107
+msgid "Invalid character '#' in SNMP trap string"
+msgstr "無効ãªæ–‡å­—'"
+
+#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342
+#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341
+#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351
+#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351
+msgid "Trap server"
+msgstr "トラップサーãƒ"
+
+#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114
+#: usr/local/www/services_snmp.php:114
+msgid "Trap server port"
+msgstr "トラップサーãƒãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361
+#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360
+#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370
+#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370
+msgid "Trap string"
+msgstr "トラップ文字列"
+
+#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134
+#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160
+#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165
+#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165
+msgid "SNMP"
+msgstr "SNMP"
+
+#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273
+#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284
+#: usr/local/www/services_snmp.php:284
+msgid "SNMP Daemon"
+msgstr "SNMPデーモン"
+
+#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279
+#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290
+#: usr/local/www/services_snmp.php:290
+msgid "Polling Port "
+msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282
+#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293
+#: usr/local/www/services_snmp.php:293
+msgid "Enter the port to accept polling events on (default 161)"
+msgstr "(デフォルト161 )上ã§ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã‚¤ãƒ™ãƒ³ãƒˆã‚’å—ã‘入れるãŸã‚ã«ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™"
+
+#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287
+#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298
+#: usr/local/www/services_snmp.php:298
+msgid "System location"
+msgstr "システムã®å ´æ‰€"
+
+#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294
+#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305
+#: usr/local/www/services_snmp.php:305
+msgid "System contact"
+msgstr "システムã®é€£çµ¡å…ˆ"
+
+#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301
+#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312
+#: usr/local/www/services_snmp.php:312
+msgid "Read Community String"
+msgstr "コミュニティストリングを読む"
+
+#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304
+#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315
+#: usr/local/www/services_snmp.php:315
+msgid ""
+"The community string is like a password, restricting access to querying SNMP "
+"to hosts knowing the community string. Use a strong value here to protect "
+"from unauthorized information disclosure."
+msgstr "コミュニティストリングを知ã£ã¦ã„るホストã«ã€Œã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£æ–‡å­—列ã¯ã€SNMPを照会ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã™ã‚‹ã€ãƒ‘スワードã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€ 。ä¸æ­£ãªæƒ…報開示ã‹ã‚‰ã€Œä¿è­·ã™ã‚‹ãŸã‚ã«ã“ã“ã«å¼·åŠ›ãªå€¤ã‚’使用ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333
+#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344
+#: usr/local/www/services_snmp.php:344
+msgid "SNMP Traps"
+msgstr "SNMPトラップ"
+
+#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343
+#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354
+#: usr/local/www/services_snmp.php:354
+msgid "Enter trap server name"
+msgstr "トラップサーãƒåを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348
+#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359
+#: usr/local/www/services_snmp.php:359
+msgid "Trap server port "
+msgstr "トラップサーãƒãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351
+#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362
+#: usr/local/www/services_snmp.php:362
+msgid "Enter the port to send the traps to (default 162)"
+msgstr "(デフォルト162 )ã«ãƒˆãƒ©ãƒƒãƒ—ã‚’é€ä¿¡ã™ã‚‹ã‚ˆã†ã«ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™"
+
+#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356
+#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367
+#: usr/local/www/services_snmp.php:367
+msgid "Enter the SNMP trap string"
+msgstr "SNMPトラップã®æ–‡å­—列を入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368
+#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379
+#: usr/local/www/services_snmp.php:379
+msgid "Modules"
+msgstr "モジュール"
+
+#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374
+#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385
+#: usr/local/www/services_snmp.php:385
+msgid "SNMP Modules"
+msgstr "SNMPモジュール"
+
+#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376
+#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387
+#: usr/local/www/services_snmp.php:387
+msgid "MibII"
+msgstr "MIBII"
+
+#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378
+#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389
+#: usr/local/www/services_snmp.php:389
+msgid "Netgraph"
+msgstr "NETGRAPH"
+
+#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171
+#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381
+#: usr/local/www/services_snmp.php:391 usr/local/www/license.php:171
+#: usr/local/www/services_snmp.php:391
+msgid "PF"
+msgstr "PF"
+
+#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382
+#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393
+#: usr/local/www/services_snmp.php:393
+msgid "Host Resources (Requires MibII)"
+msgstr "ホストリソース( MIBIIãŒå¿…è¦ã§ã™ï¼‰"
+
+#: usr/local/www/services_snmp.php:391
+msgid "Bind to LAN interface only"
+msgstr "LANインターフェイスã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ã ã‘"
+
+#: usr/local/www/services_snmp.php:393
+msgid ""
+"This option can be useful when trying to access the SNMP agent by the LAN "
+"interface's IP address through a VPN tunnel terminated on the WAN interface."
+msgstr "WANインターフェイス上ã§çµ‚端VPNトンãƒãƒ«çµŒç”±ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®IPアドレス「LANã«ã‚ˆã£ã¦SNMPエージェントã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨ã€ã“ã®ã‚ªãƒ—ションãŒå½¹ç«‹ã¡ã¾ã™ã€ 。"
+
+#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315
+#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302
+#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291
+#: usr/local/www/guiconfig.inc:290 usr/local/www/headjs.php:146
+#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287
+#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287
+#: usr/local/www/headjs.php:146
+msgid "Apply changes"
+msgstr "変更をé©ç”¨"
+
+#: usr/local/www/services_wol.php:63 usr/local/www/services_wol.php:63
+#, php-format
+msgid "Sent magic packet to %1$s (%2$s)%3$s"
+msgstr "ã¯%1$s ( %2$s ) %3$sã«ãƒžã‚¸ãƒƒã‚¯ãƒ‘ケットをé€ä¿¡ã—ãŸ"
+
+#: usr/local/www/services_wol.php:65 usr/local/www/services_wol.php:65
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not "
+"complete successfully%5$s"
+msgstr "「 ( $ S ï¼… 4 ) %3$sãŸã‚〠WOLコマンドを%1$ssystemã®log%2$sを確èªã—ã¦ãã ã•ã„ã¾ã›ã‚“ã§ã—ãŸ"5 $ sã®ï¼…正常ã«å®Œäº†"
+
+#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90
+#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129
+#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611
+#: usr/local/www/interfaces.php:608 usr/local/www/services_dhcp_edit.php:165
+#: usr/local/www/interfaces.php:623 usr/local/www/interfaces.php:634
+#: usr/local/www/interfaces.php:630 usr/local/www/services_wol.php:86
+#: usr/local/www/services_dhcp_edit.php:165
+#: usr/local/www/services_wol_edit.php:90 usr/local/www/interfaces.php:630
+msgid "A valid MAC address must be specified."
+msgstr "有効ãªMACアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_wol.php:88 usr/local/www/services_wol.php:88
+msgid "A valid interface must be specified."
+msgstr "有効ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_wol.php:94 usr/local/www/services_wol.php:94
+msgid "A valid ip could not be found!"
+msgstr "有効ãªIPãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—㟠ï¼"
+
+#: usr/local/www/services_wol.php:99 usr/local/www/services_wol.php:99
+#, php-format
+msgid "Sent magic packet to %s."
+msgstr "%s.ã«é€ä¿¡ã•ã‚ŒãŸãƒžã‚¸ãƒƒã‚¯ãƒ‘ケット"
+
+#: usr/local/www/services_wol.php:101 usr/local/www/services_wol.php:101
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s did not "
+"complete successfully%4$s"
+msgstr "「 %1$ssystemã®log%2$sを確èªã—ã¦ãã ã•ã„〠%3$s用WOLコマンドã¯ã—ã¾ã›ã‚“ã§ã—ãŸ"4 $ sã®ï¼…正常ã«å®Œäº†"
+
+#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127
+#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123
+#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159
+#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167
+#: usr/local/www/fbegin.inc:158 usr/local/www/services_wol.php:115
+#: usr/local/www/services_wol.php:127 usr/local/www/services_wol_edit.php:112
+#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:158
+msgid "Wake on LAN"
+msgstr "Wake On LANã®"
+
+#: usr/local/www/services_wol.php:141 usr/local/www/services_wol.php:141
+msgid "Choose which interface the host to be woken up is connected to."
+msgstr "ã«æŽ¥ç¶šã•ã‚Œã¦ã„るウェイクアップã™ã‚‹ãƒ›ã‚¹ãƒˆã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‹ã‚’é¸æŠžã€‚"
+
+#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:140
+#: usr/local/www/status_captiveportal.php:161
+#: usr/local/www/interfaces.php:1283
+#: usr/local/www/services_captiveportal_mac.php:167
+#: usr/local/www/services_captiveportal_mac_edit.php:98
+#: usr/local/www/services_captiveportal_mac_edit.php:175
+#: usr/local/www/services_dhcp.php:890
+#: usr/local/www/services_dhcp_edit.php:106
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314
+#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130
+#: usr/local/www/status_interfaces.php:252
+#: usr/local/www/status_dhcp_leases.php:340
+#: usr/local/www/services_dhcp.php:928
+#: usr/local/www/services_dhcp_edit.php:108
+#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387
+#: usr/local/www/status_interfaces.php:255
+#: usr/local/www/services_captiveportal_mac.php:165
+#: usr/local/www/services_captiveportal_mac_edit.php:96
+#: usr/local/www/services_captiveportal_mac_edit.php:173
+#: usr/local/www/status_dhcp_leases.php:342
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375
+#: usr/local/www/services_dhcp_edit.php:142
+#: usr/local/www/services_dhcp_edit.php:337
+#: usr/local/www/services_dhcp.php:1151
+#: usr/local/www/services_captiveportal_mac_edit.php:180
+#: usr/local/www/status_captiveportal.php:147
+#: usr/local/www/services_captiveportal_mac.php:175
+#: usr/local/www/interfaces.php:1388 usr/local/www/services_dhcp.php:1171
+#: usr/local/www/interfaces.php:1430 usr/local/www/interfaces.php:1425
+#: usr/local/www/diag_ndp.php:130 usr/local/www/diag_arp.php:314
+#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162
+#: usr/local/www/services_dhcp_edit.php:142
+#: usr/local/www/services_dhcp_edit.php:337
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:140
+#: usr/local/www/status_interfaces.php:255
+#: usr/local/www/services_dhcp.php:1171
+#: usr/local/www/services_captiveportal_mac_edit.php:96
+#: usr/local/www/services_captiveportal_mac_edit.php:180
+#: usr/local/www/status_captiveportal.php:147
+#: usr/local/www/status_dhcp_leases.php:342
+#: usr/local/www/services_captiveportal_mac.php:175
+#: usr/local/www/interfaces.php:1425
+msgid "MAC address"
+msgstr "MACアドレス"
+
+#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148
+msgid "Enter a MAC address "
+msgstr "MACアドレスを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_wol.php:148 usr/local/www/services_wol.php:148
+msgid "in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "次ã®å½¢å¼ã§ï¼š XX : XX : XX : XX : XX : XX"
+
+#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244
+#: usr/local/www/diag_smart.php:265 usr/local/www/services_wol.php:152
+#: usr/local/www/diag_smart.php:265
+msgid "Send"
+msgstr "é€ä¿¡"
+
+#: usr/local/www/services_wol.php:157 usr/local/www/services_wol.php:157
+msgid "Wake all clients at once: "
+msgstr "一度ã«ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’覚ã¾ã™ã€‚"
+
+#: usr/local/www/services_wol.php:158 usr/local/www/services_wol.php:158
+msgid "Or Click the MAC address to wake up an individual device:"
+msgstr "ã¾ãŸã¯å€‹ã€…ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’èµ·å‹•ã™ã‚‹ã®ã«MACアドレスをクリックã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212
+msgid ""
+"This service can be used to wake up (power on) computers by sending special"
+msgstr "「ã“ã®ã‚µãƒ¼ãƒ“スã¯ã€ç‰¹åˆ¥ãªã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ (電æºON )コンピュータを起動ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212
+msgid "Magic Packets"
+msgstr "マジックパケット"
+
+#: usr/local/www/services_wol.php:212 usr/local/www/services_wol.php:212
+msgid ""
+"The NIC in the computer that is to be woken up must support Wake on LAN and "
+"has to be configured properly (WOL cable, BIOS settings). "
+msgstr "「ウェイクアップã™ã‚‹ã‚³ãƒ³ãƒ”ュータ内ã®NICãŒWake on LANã®ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚り〠「 ( WOLケーブル〠BIOS設定)を正ã—ã設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_wol_edit.php:123
+#: usr/local/www/services_wol_edit.php:123
+msgid "Edit WOL entry"
+msgstr "編集WOLエントリ"
+
+#: usr/local/www/services_wol_edit.php:137
+#: usr/local/www/services_wol_edit.php:137
+msgid "Choose which interface this host is connected to."
+msgstr "é¸æŠžã—ãŸã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã“ã®ãƒ›ã‚¹ãƒˆãŒã«æŽ¥ç¶šã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/services_wol_edit.php:144
+#: usr/local/www/services_wol_edit.php:144
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„: XX : XX : XX : XX : XX : XX"
+
+#: usr/local/www/status_captiveportal.php:58
+#: usr/local/www/status_captiveportal.php:58
+msgid "Status: Captive portal"
+msgstr "ステータス:キャプティブãƒãƒ¼ã‚¿ãƒ«"
+
+#: usr/local/www/status_captiveportal.php:121
+#: usr/local/www/status_captiveportal_test.php:70
+#: usr/local/www/status_captiveportal_voucher_rolls.php:73
+#: usr/local/www/status_captiveportal_vouchers.php:103
+#: usr/local/www/status_captiveportal_vouchers.php:104
+#: usr/local/www/status_captiveportal_test.php:71
+#: usr/local/www/status_captiveportal_voucher_rolls.php:74
+#: usr/local/www/status_captiveportal_expire.php:69
+#: usr/local/www/status_captiveportal_vouchers.php:108
+#: usr/local/www/status_captiveportal.php:106
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+#: usr/local/www/status_captiveportal_expire.php:69
+#: usr/local/www/status_captiveportal_vouchers.php:108
+#: usr/local/www/status_captiveportal.php:106
+#: usr/local/www/status_captiveportal_test.php:71
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+msgid "Active Users"
+msgstr "アクティブユーザー"
+
+#: usr/local/www/status_captiveportal.php:122
+#: usr/local/www/status_captiveportal_test.php:71
+#: usr/local/www/status_captiveportal_voucher_rolls.php:74
+#: usr/local/www/status_captiveportal_vouchers.php:104
+#: usr/local/www/status_captiveportal_vouchers.php:105
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+#: usr/local/www/status_captiveportal_expire.php:70
+#: usr/local/www/status_captiveportal_vouchers.php:109
+#: usr/local/www/status_captiveportal.php:107
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+#: usr/local/www/status_captiveportal_expire.php:70
+#: usr/local/www/status_captiveportal_vouchers.php:109
+#: usr/local/www/status_captiveportal.php:107
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+msgid "Active Vouchers"
+msgstr "アクティブãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/status_captiveportal.php:123
+#: usr/local/www/services_captiveportal_vouchers.php:426
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+#: usr/local/www/status_captiveportal_vouchers.php:105
+#: usr/local/www/services_captiveportal_vouchers.php:433
+#: usr/local/www/status_captiveportal_vouchers.php:106
+#: usr/local/www/services_captiveportal_vouchers.php:446
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+#: usr/local/www/status_captiveportal_expire.php:71
+#: usr/local/www/services_captiveportal_vouchers.php:455
+#: usr/local/www/status_captiveportal_vouchers.php:110
+#: usr/local/www/status_captiveportal.php:108
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/status_captiveportal_expire.php:71
+#: usr/local/www/services_captiveportal_vouchers.php:460
+#: usr/local/www/status_captiveportal_vouchers.php:110
+#: usr/local/www/status_captiveportal.php:108
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+msgid "Voucher Rolls"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹"
+
+#: usr/local/www/status_captiveportal.php:124
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+#: usr/local/www/status_captiveportal_vouchers.php:106
+#: usr/local/www/status_captiveportal_vouchers.php:107
+#: usr/local/www/status_captiveportal_test.php:74
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/status_captiveportal_expire.php:72
+#: usr/local/www/status_captiveportal_vouchers.php:111
+#: usr/local/www/status_captiveportal.php:109
+#: usr/local/www/status_captiveportal_voucher_rolls.php:78
+#: usr/local/www/status_captiveportal_expire.php:72
+#: usr/local/www/status_captiveportal_vouchers.php:111
+#: usr/local/www/status_captiveportal.php:109
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_test.php:74
+#: usr/local/www/status_captiveportal_voucher_rolls.php:78
+msgid "Test Vouchers"
+msgstr "テストãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/status_captiveportal.php:135
+#: usr/local/www/status_captiveportal.php:121
+#: usr/local/www/status_captiveportal.php:121
+msgid "Captive Portal Zone"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¾ãƒ¼ãƒ³"
+
+#: usr/local/www/status_captiveportal.php:157
+#: usr/local/www/status_captiveportal.php:143
+#: usr/local/www/status_captiveportal.php:143
+msgid "Captive Portal status"
+msgstr "Captive Portal状æ³"
+
+#: usr/local/www/status_captiveportal.php:164
+#: usr/local/www/status_captiveportal.php:167
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99
+#: usr/local/www/status_captiveportal.php:150
+#: usr/local/www/status_captiveportal.php:153
+#: usr/local/www/status_captiveportal.php:150
+#: usr/local/www/status_captiveportal.php:153
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97
+msgid "Session start"
+msgstr "セッション開始"
+
+#: usr/local/www/status_captiveportal.php:165
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100
+#: usr/local/www/status_captiveportal.php:151
+#: usr/local/www/status_captiveportal.php:151
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98
+msgid "Last activity"
+msgstr "最後ã®æ´»å‹•"
+
+#: usr/local/www/status_captiveportal.php:181
+#: usr/local/www/status_captiveportal.php:168
+#: usr/local/www/status_captiveportal.php:168
+msgid "Do you really want to disconnect this client?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’切断ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/status_captiveportal.php:181
+#: usr/local/www/status_interfaces.php:114
+#: usr/local/www/status_interfaces.php:129
+#: usr/local/www/status_interfaces.php:144
+#: usr/local/www/status_interfaces.php:159
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:147
+#: usr/local/www/status_interfaces.php:162
+#: usr/local/www/status_interfaces.php:177
+#: usr/local/www/status_interfaces.php:135
+#: usr/local/www/status_interfaces.php:150
+#: usr/local/www/status_interfaces.php:165
+#: usr/local/www/status_interfaces.php:180
+#: usr/local/www/status_captiveportal.php:168
+#: usr/local/www/status_interfaces.php:135
+#: usr/local/www/status_interfaces.php:150
+#: usr/local/www/status_interfaces.php:165
+#: usr/local/www/status_interfaces.php:180
+#: usr/local/www/status_captiveportal.php:168
+msgid "Disconnect"
+msgstr "切断"
+
+#: usr/local/www/status_captiveportal.php:198
+#: usr/local/www/status_captiveportal.php:185
+#: usr/local/www/status_captiveportal.php:185
+msgid "Don't show last activity"
+msgstr "最後ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを表示ã—ãªã„"
+
+#: usr/local/www/status_captiveportal.php:201
+#: usr/local/www/status_captiveportal.php:188
+#: usr/local/www/status_captiveportal.php:188
+msgid "Show last activity"
+msgstr "最後ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを表示ã™ã‚‹"
+
+#: usr/local/www/installer/installer.php:186
+#: usr/local/www/installer/installer.php:186
+msgid "Could not open /tmp/installer.sh for writing"
+msgstr "書ãè¾¼ã¿ç”¨ã«ã‚ªãƒ¼ãƒ—ンã§ãã¾ã›ã‚“ã§ã—ãŸ/ tmpã«/ installer.sh"
+
+#: usr/local/www/installer/installer.php:360
+#: usr/local/www/installer/installer.php:361
+#: usr/local/www/installer/installer.php:361
+#, php-format
+msgid "Beginning installation on disk %s."
+msgstr "ディスク%s.上ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®é–‹å§‹"
+
+#: usr/local/www/installer/installer.php:409
+#: usr/local/www/installer/installer.php:410
+#: usr/local/www/installer/installer.php:410
+msgid "Installer"
+msgstr "インストーラ"
+
+#: usr/local/www/installer/installer.php:916
+#: usr/local/www/installer/installer.php:1104
+#: usr/local/www/installer/installer.php:917
+#: usr/local/www/installer/installer.php:1105
+#: usr/local/www/installer/installer.php:917
+#: usr/local/www/installer/installer.php:1105
+msgid "ERROR: Could not find any suitable disks for installation."
+msgstr "エラー:インストールã™ã‚‹ãŸã‚ã®ä»»æ„ã®é©åˆ‡ãªãƒ‡ã‚£ã‚¹ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/interfaces_bridge.php:64
+#: usr/local/www/interfaces_bridge.php:68
+#: usr/local/www/interfaces_bridge.php:68
+msgid "This bridge cannot be deleted because it is assigned as an interface."
+msgstr "ãã‚Œã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®æ©‹ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_bridge.php:77
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_gif.php:76
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre.php:77
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027
+#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/diag_logs_filter_summary.php:46
+#: usr/local/www/interfaces_lagg.php:82
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq.php:86
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_wireless.php:76
+#: usr/local/www/interfaces_wireless_edit.php:145
+#: usr/local/www/services_captiveportal.php:439
+#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163
+#: usr/local/www/fbegin.inc:327
+#: usr/local/www/services_captiveportal_zones.php:53
+#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345
+#: usr/local/www/diag_backup.php:186
+#: usr/local/www/services_captiveportal.php:443
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188
+#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60
+#: usr/local/www/services_captiveportal.php:441
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/interfaces.php:1101
+#: usr/local/www/services_captiveportal_zones.php:54
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_qinq.php:89
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179
+#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81
+#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces.php:1115
+#: usr/local/www/services_captiveportal.php:459
+#: usr/local/www/interfaces.php:1157 usr/local/www/services_dnsmasq.php:262
+#: usr/local/www/interfaces.php:1152
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_qinq.php:89
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/status_interfaces.php:60
+#: usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/services_captiveportal_zones.php:54
+#: usr/local/www/services_captiveportal.php:459
+#: usr/local/www/diag_backup.php:186
+#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179
+#: usr/local/www/fbegin.inc:283 usr/local/www/services_dnsmasq.php:262
+#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gif.php:80
+#: usr/local/www/interfaces_assign.php:43
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/interfaces.php:1152
+msgid "Interfaces"
+msgstr "インターフェース"
+
+#: usr/local/www/interfaces_bridge.php:77
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_bridge_edit.php:236
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_bridge_edit.php:236
+msgid "Bridge"
+msgstr "ブリッジ"
+
+#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88
+#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75
+#: usr/local/www/interfaces_assign.php:402
+#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94
+#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98
+#: usr/local/www/interfaces_wireless.php:88
+#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99
+#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90
+#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90
+#: usr/local/www/interfaces_wireless.php:89
+#: usr/local/www/interfaces_assign.php:396
+#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89
+#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_ppps.php:91
+#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_assign.php:402
+msgid "Interface assignments"
+msgstr "インターフェイスã®å‰²ã‚Šå½“ã¦"
+
+#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89
+#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76
+#: usr/local/www/interfaces_assign.php:403
+#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95
+#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99
+#: usr/local/www/interfaces_wireless.php:89
+#: usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96
+#: usr/local/www/interfaces_gre.php:91
+#: usr/local/www/interfaces_wireless.php:90
+#: usr/local/www/interfaces_assign.php:397
+#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_groups.php:77 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_assign.php:403
+msgid "Interface Groups"
+msgstr "インタフェースグループ"
+
+#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91
+#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_assign.php:405
+#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97
+#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94
+#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98
+#: usr/local/www/interfaces_gre.php:93
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_assign.php:399
+#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102
+#: usr/local/www/interfaces_vlan.php:100
+#: usr/local/www/interfaces_bridge.php:99
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102
+#: usr/local/www/interfaces_vlan.php:100
+#: usr/local/www/interfaces_bridge.php:99
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_groups.php:79 usr/local/www/interfaces_ppps.php:94
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_assign.php:405
+msgid "VLANs"
+msgstr "VLANã¯"
+
+#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92
+#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_assign.php:406
+#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98
+#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_gre.php:94
+#: usr/local/www/interfaces_wireless.php:93
+#: usr/local/www/interfaces_assign.php:400
+#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103
+#: usr/local/www/interfaces_vlan.php:101
+#: usr/local/www/interfaces_bridge.php:100
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103
+#: usr/local/www/interfaces_vlan.php:101
+#: usr/local/www/interfaces_bridge.php:100
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_groups.php:80 usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_assign.php:406
+msgid "QinQs"
+msgstr "QinQs"
+
+#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_assign.php:407
+#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq.php:103
+#: usr/local/www/interfaces_wireless.php:93
+#: usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96
+#: usr/local/www/interfaces_bridge.php:95
+#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_assign.php:401
+#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_qinq.php:107
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102
+#: usr/local/www/interfaces_bridge.php:101
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_qinq.php:107
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102
+#: usr/local/www/interfaces_bridge.php:101
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_groups.php:81 usr/local/www/interfaces_ppps.php:96
+#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_assign.php:407
+msgid "PPPs"
+msgstr "購買力平価"
+
+#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_assign.php:408
+#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100
+#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97
+#: usr/local/www/interfaces_bridge.php:96
+#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_assign.php:402
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105
+#: usr/local/www/interfaces_vlan.php:103
+#: usr/local/www/interfaces_bridge.php:102
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100
+#: usr/local/www/interfaces_gif.php:99
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105
+#: usr/local/www/interfaces_vlan.php:103
+#: usr/local/www/interfaces_bridge.php:102
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_groups.php:82 usr/local/www/interfaces_ppps.php:97
+#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100
+#: usr/local/www/interfaces_gif.php:99 usr/local/www/interfaces_assign.php:408
+msgid "GRE"
+msgstr "GRE"
+
+#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76
+#: usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_assign.php:409
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101
+#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98
+#: usr/local/www/interfaces_bridge.php:97
+#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_assign.php:403
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106
+#: usr/local/www/interfaces_vlan.php:104
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:103
+#: usr/local/www/interfaces_wireless.php:98
+#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80
+#: usr/local/www/interfaces_gif.php:100 usr/local/www/interfaces_qinq.php:109
+#: usr/local/www/interfaces_lagg.php:106 usr/local/www/interfaces_vlan.php:104
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:103
+#: usr/local/www/interfaces_wireless.php:98
+#: usr/local/www/interfaces_groups.php:83 usr/local/www/interfaces_ppps.php:98
+#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80
+#: usr/local/www/interfaces_gif.php:100
+#: usr/local/www/interfaces_assign.php:409
+msgid "GIF"
+msgstr "GIF"
+
+#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_assign.php:410
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102
+#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99
+#: usr/local/www/interfaces_bridge.php:98
+#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_assign.php:404
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107
+#: usr/local/www/interfaces_vlan.php:105
+#: usr/local/www/interfaces_bridge.php:104
+#: usr/local/www/interfaces_wireless.php:99
+#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101
+#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107
+#: usr/local/www/interfaces_vlan.php:105
+#: usr/local/www/interfaces_bridge.php:104
+#: usr/local/www/interfaces_wireless.php:99
+#: usr/local/www/interfaces_groups.php:84 usr/local/www/interfaces_ppps.php:99
+#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101
+#: usr/local/www/interfaces_assign.php:410
+msgid "Bridges"
+msgstr "æ©‹"
+
+#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_assign.php:411
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82
+#: usr/local/www/interfaces_lagg.php:103
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_groups.php:85
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100
+#: usr/local/www/interfaces_bridge.php:99
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99
+#: usr/local/www/interfaces_wireless.php:98
+#: usr/local/www/interfaces_assign.php:405
+#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_qinq.php:111
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108
+#: usr/local/www/interfaces_vlan.php:106
+#: usr/local/www/interfaces_bridge.php:105
+#: usr/local/www/interfaces_wireless.php:100
+#: usr/local/www/interfaces_gre.php:103 usr/local/www/interfaces_gif.php:102
+#: usr/local/www/interfaces_qinq.php:111
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108
+#: usr/local/www/interfaces_vlan.php:106
+#: usr/local/www/interfaces_bridge.php:105
+#: usr/local/www/interfaces_wireless.php:100
+#: usr/local/www/interfaces_groups.php:85
+#: usr/local/www/interfaces_ppps.php:100 usr/local/www/interfaces_gre.php:103
+#: usr/local/www/interfaces_gif.php:102
+#: usr/local/www/interfaces_assign.php:411
+msgid "LAGG"
+msgstr "LAGG"
+
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_groups.php:95
+#: usr/local/www/interfaces_lagg.php:113
+#: usr/local/www/load_balancer_pool_edit.php:257
+#: usr/local/www/system_groupmanager.php:317
+#: usr/local/www/load_balancer_pool_edit.php:274
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_lagg.php:114
+#: usr/local/www/load_balancer_pool_edit.php:272
+#: usr/local/www/interfaces_lagg.php:118
+#: usr/local/www/interfaces_bridge.php:115
+#: usr/local/www/system_groupmanager.php:317
+#: usr/local/www/interfaces_lagg.php:118
+#: usr/local/www/interfaces_bridge.php:115
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/load_balancer_pool_edit.php:272
+msgid "Members"
+msgstr "メンãƒãƒ¼"
+
+#: usr/local/www/interfaces_bridge.php:135
+#: usr/local/www/interfaces_bridge.php:136
+#: usr/local/www/interfaces_bridge.php:142
+#: usr/local/www/interfaces_bridge.php:142
+msgid "Do you really want to delete this bridge?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®æ©‹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_bridge.php:146
+#: usr/local/www/interfaces_bridge.php:147
+#: usr/local/www/interfaces_bridge.php:153
+#: usr/local/www/interfaces_bridge.php:153
+msgid "Here you can configure bridging of interfaces."
+msgstr "ã“ã“ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ãƒ–リッジングを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:111
+#: usr/local/www/interfaces_bridge_edit.php:119
+#: usr/local/www/interfaces_bridge_edit.php:119
+msgid "Member Interfaces"
+msgstr "メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹"
+
+#: usr/local/www/interfaces_bridge_edit.php:116
+#: usr/local/www/interfaces_bridge_edit.php:124
+#: usr/local/www/interfaces_bridge_edit.php:124
+msgid "Maxage needs to be an integer between 6 and 40."
+msgstr "MAXAGEã¯6ã¨40ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:118
+#: usr/local/www/interfaces_bridge_edit.php:126
+#: usr/local/www/interfaces_bridge_edit.php:126
+msgid "Maxaddr needs to be an integer."
+msgstr "Maxaddrã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:120
+#: usr/local/www/interfaces_bridge_edit.php:128
+#: usr/local/www/interfaces_bridge_edit.php:128
+msgid "Timeout needs to be an integer."
+msgstr "タイムアウトã¯æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:122
+#: usr/local/www/interfaces_bridge_edit.php:130
+#: usr/local/www/interfaces_bridge_edit.php:130
+msgid "Forward Delay needs to be an integer between 4 and 30."
+msgstr "転é€é…延ã¯4ã¨30ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:124
+#: usr/local/www/interfaces_bridge_edit.php:132
+#: usr/local/www/interfaces_bridge_edit.php:132
+msgid "Hello time for STP needs to be an integer between 1 and 2."
+msgstr "ãƒãƒ­ãƒ¼STPã®ãŸã‚ã®æ™‚é–“ã¯1ã¨2ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/interfaces_bridge_edit.php:126
+#: usr/local/www/interfaces_bridge_edit.php:134
+#: usr/local/www/interfaces_bridge_edit.php:134
+msgid "Priority for STP needs to be an integer between 0 and 61440."
+msgstr "STPã®å„ªå…ˆé †ä½ã¯0ã¨61440ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:128
+#: usr/local/www/interfaces_bridge_edit.php:136
+#: usr/local/www/interfaces_bridge_edit.php:136
+msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10."
+msgstr "STPã¯1 〜10ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ä¿ç•™ã‚«ã‚¦ãƒ³ãƒˆã‚’é€ä¿¡ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:131
+#: usr/local/www/interfaces_bridge_edit.php:139
+#: usr/local/www/interfaces_bridge_edit.php:139
+msgid "interface priority for STP needs to be an integer between 0 and 240."
+msgstr "STPã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®å„ªå…ˆé †ä½ã¯0ã‹ã‚‰240ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:136
+#: usr/local/www/interfaces_bridge_edit.php:144
+#: usr/local/www/interfaces_bridge_edit.php:144
+msgid ""
+"interface path cost for STP needs to be an integer between 1 and 200000000."
+msgstr "「STPã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ãƒ‘スコストã¯1ã¨200000000ã®é–“ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:141
+#: usr/local/www/interfaces_bridge_edit.php:149
+#: usr/local/www/interfaces_bridge_edit.php:149
+msgid "You must select at least 2 member interfaces for a bridge."
+msgstr "ã‚ãªãŸã¯æ©‹ã®ãŸã‚ã«å°‘ãªãã¨ã‚‚2メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:147
+#: usr/local/www/interfaces_bridge_edit.php:155
+#: usr/local/www/interfaces_bridge_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:157
+msgid "Bridging a wireless interface is only possible in hostap mode."
+msgstr "無線インタフェースをブリッジングã®hostapモードã§ã®ã¿å¯èƒ½ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:149
+#: usr/local/www/interfaces_bridge_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:159
+#: usr/local/www/interfaces_bridge_edit.php:159
+msgid ""
+"Span interface cannot be part of the bridge. Remove the span interface from "
+"bridge members to continue."
+msgstr "「スパンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€ãƒ–リッジã®ä¸€éƒ¨ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã‹ã‚‰ã‚¹ãƒ‘ンインターフェイスを削除ã—ã€ã€Œç¶™ç¶šã—ã¦ãƒ–リッジ部æ。"
+
+#: usr/local/www/interfaces_bridge_edit.php:206
+#: usr/local/www/interfaces_gif_edit.php:106
+#: usr/local/www/interfaces_gre_edit.php:108
+#: usr/local/www/interfaces_vlan_edit.php:121
+#: usr/local/www/interfaces_lagg_edit.php:101
+#: usr/local/www/interfaces_bridge_edit.php:215
+#: usr/local/www/interfaces_vlan_edit.php:124
+#: usr/local/www/interfaces_lagg_edit.php:114
+#: usr/local/www/interfaces_gif_edit.php:114
+#: usr/local/www/interfaces_bridge_edit.php:217
+#: usr/local/www/interfaces_gre_edit.php:108
+#: usr/local/www/interfaces_vlan_edit.php:124
+#: usr/local/www/interfaces_lagg_edit.php:114
+#: usr/local/www/interfaces_gif_edit.php:114
+#: usr/local/www/interfaces_bridge_edit.php:217
+msgid "Error occurred creating interface, please retry."
+msgstr "エラーãŒç™ºç”Ÿã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’作æˆã€å†è©¦è¡Œã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_bridge_edit.php:253
+#: usr/local/www/interfaces_bridge_edit.php:262
+#: usr/local/www/interfaces_bridge_edit.php:263
+#: usr/local/www/interfaces_bridge_edit.php:264
+#: usr/local/www/interfaces_bridge_edit.php:266
+#: usr/local/www/interfaces_bridge_edit.php:266
+msgid "Bridge configuration"
+msgstr "ブリッジ構æˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:256
+#: usr/local/www/interfaces_lagg_edit.php:86
+#: usr/local/www/interfaces_bridge_edit.php:265
+#: usr/local/www/interfaces_bridge_edit.php:266
+#: usr/local/www/interfaces_lagg_edit.php:88
+#: usr/local/www/interfaces_bridge_edit.php:267
+#: usr/local/www/interfaces_bridge_edit.php:269
+#: usr/local/www/interfaces_lagg_edit.php:88
+#: usr/local/www/interfaces_bridge_edit.php:269
+msgid "Member interfaces"
+msgstr "メンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹"
+
+#: usr/local/www/interfaces_bridge_edit.php:269
+#: usr/local/www/interfaces_bridge_edit.php:278
+#: usr/local/www/interfaces_bridge_edit.php:279
+#: usr/local/www/interfaces_bridge_edit.php:280
+#: usr/local/www/interfaces_bridge_edit.php:282
+#: usr/local/www/interfaces_bridge_edit.php:282
+msgid "Interfaces participating in the bridge."
+msgstr "ブリッジã«å‚加ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:285
+#: usr/local/www/interfaces_bridge_edit.php:294
+#: usr/local/www/interfaces_bridge_edit.php:295
+#: usr/local/www/interfaces_bridge_edit.php:296
+#: usr/local/www/interfaces_bridge_edit.php:298
+#: usr/local/www/interfaces_bridge_edit.php:298
+msgid "RSTP/STP"
+msgstr "RSTP / STP"
+
+#: usr/local/www/interfaces_bridge_edit.php:288
+#: usr/local/www/interfaces_bridge_edit.php:297
+#: usr/local/www/interfaces_bridge_edit.php:298
+#: usr/local/www/interfaces_bridge_edit.php:299
+#: usr/local/www/interfaces_bridge_edit.php:301
+#: usr/local/www/interfaces_bridge_edit.php:301
+msgid "Enable spanning tree options for this bridge."
+msgstr "ã“ã®ãƒ–リッジã®ãƒ„リーオプションã«ã¾ãŸãŒã‚‹æœ‰åŠ¹ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:304
+#: usr/local/www/interfaces_bridge_edit.php:313
+#: usr/local/www/interfaces_bridge_edit.php:314
+#: usr/local/www/interfaces_bridge_edit.php:315
+#: usr/local/www/interfaces_bridge_edit.php:317
+#: usr/local/www/interfaces_bridge_edit.php:317
+msgid "Protocol used for spanning tree."
+msgstr "プロトコルã¯ã€ã‚¹ãƒ‘ニングツリーã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:306
+#: usr/local/www/interfaces_bridge_edit.php:315
+#: usr/local/www/interfaces_bridge_edit.php:316
+#: usr/local/www/interfaces_bridge_edit.php:317
+#: usr/local/www/interfaces_bridge_edit.php:319
+#: usr/local/www/interfaces_bridge_edit.php:319
+msgid "STP interfaces"
+msgstr "STPインターフェイス"
+
+#: usr/local/www/interfaces_bridge_edit.php:320
+#: usr/local/www/interfaces_bridge_edit.php:329
+#: usr/local/www/interfaces_bridge_edit.php:330
+#: usr/local/www/interfaces_bridge_edit.php:331
+#: usr/local/www/interfaces_bridge_edit.php:333
+#: usr/local/www/interfaces_bridge_edit.php:333
+msgid ""
+"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has "
+"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to "
+"detect and remove loops in a network topology."
+msgstr "「インターフェイス上ã§ã‚¹ãƒ‘ニングツリープロトコルを有効ã«ã—ã¾ã™ã€‚ if_bridgeを( 4 )ドライãƒãŒæŒã£ã¦ã„る「IEEE 802.1Dスパニングツリープロトコル(STP )をサãƒãƒ¼ãƒˆã€‚ STPã¯ã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒãƒ­ã‚¸ãƒ¼å†…ã®ãƒ«ãƒ¼ãƒ—を検出ã—ã€é™¤åŽ»ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:326
+#: usr/local/www/interfaces_bridge_edit.php:335
+#: usr/local/www/interfaces_bridge_edit.php:336
+#: usr/local/www/interfaces_bridge_edit.php:337
+#: usr/local/www/interfaces_bridge_edit.php:339
+#: usr/local/www/interfaces_bridge_edit.php:339
+msgid "Valid time"
+msgstr "é©ç”¨æ™‚é–“"
+
+#: usr/local/www/interfaces_bridge_edit.php:328
+#: usr/local/www/interfaces_bridge_edit.php:338
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:416
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936
+#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679
+#: usr/local/www/services_dhcp.php:689
+#: usr/local/www/services_rfc2136_edit.php:156
+#: usr/local/www/vpn_ipsec_phase1.php:761
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase2.php:622
+#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702
+#: usr/local/www/interfaces_bridge_edit.php:337
+#: usr/local/www/interfaces_bridge_edit.php:356
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774
+#: usr/local/www/vpn_ipsec_phase1.php:844
+#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702
+#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878
+#: usr/local/www/interfaces_bridge_edit.php:348
+#: usr/local/www/interfaces_bridge_edit.php:357
+#: usr/local/www/interfaces_bridge_edit.php:426
+#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983
+#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771
+#: usr/local/www/vpn_ipsec_phase1.php:841
+#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633
+#: usr/local/www/services_dhcp_edit.php:434
+#: usr/local/www/services_dhcp_edit.php:444
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892
+#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650
+#: usr/local/www/interfaces_bridge_edit.php:339
+#: usr/local/www/interfaces_bridge_edit.php:349
+#: usr/local/www/interfaces_bridge_edit.php:358
+#: usr/local/www/interfaces_bridge_edit.php:427
+#: usr/local/www/vpn_ipsec_phase1.php:792
+#: usr/local/www/vpn_ipsec_phase1.php:862
+#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010
+#: usr/local/www/interfaces.php:2132 usr/local/www/services_dhcp.php:902
+#: usr/local/www/services_dhcp.php:912 usr/local/www/interfaces.php:2056
+#: usr/local/www/interfaces.php:2178
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:351
+#: usr/local/www/interfaces_bridge_edit.php:360
+#: usr/local/www/interfaces_bridge_edit.php:431
+#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167
+#: usr/local/www/services_dhcp_edit.php:434
+#: usr/local/www/services_dhcp_edit.php:444
+#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:912
+#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650
+#: usr/local/www/graph.php:120 usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:351
+#: usr/local/www/interfaces_bridge_edit.php:360
+#: usr/local/www/interfaces_bridge_edit.php:431
+#: usr/local/www/services_rfc2136_edit.php:156
+#: usr/local/www/vpn_ipsec_phase1.php:792
+#: usr/local/www/vpn_ipsec_phase1.php:862
+#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2045
+#: usr/local/www/interfaces.php:2167
+msgid "seconds"
+msgstr "秒"
+
+#: usr/local/www/interfaces_bridge_edit.php:331
+#: usr/local/www/interfaces_bridge_edit.php:340
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:342
+#: usr/local/www/interfaces_bridge_edit.php:344
+#: usr/local/www/interfaces_bridge_edit.php:344
+msgid ""
+"Set the time that a Spanning Tree Protocol configuration is valid. The "
+"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 "
+"seconds."
+msgstr "「スパニングツリープロトコルã®è¨­å®šãŒæœ‰åŠ¹ã§ã‚る時間を設定ã—ã¾ã™ã€‚ 「デフォルトã¯20秒ã§ã™ã€‚最å°å€¤ã¯6秒ã§ã€æœ€å¤§å€¤ã¯40 ã€ç§’ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:336
+#: usr/local/www/interfaces_bridge_edit.php:345
+#: usr/local/www/interfaces_bridge_edit.php:346
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:349
+#: usr/local/www/interfaces_bridge_edit.php:349
+msgid "Forward time"
+msgstr "転é€æ™‚é–“"
+
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:350
+#: usr/local/www/interfaces_bridge_edit.php:351
+#: usr/local/www/interfaces_bridge_edit.php:352
+#: usr/local/www/interfaces_bridge_edit.php:354
+#: usr/local/www/interfaces_bridge_edit.php:354
+msgid ""
+"Set the time that must pass before an interface begins forwarding packets "
+"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 "
+"seconds and the maximum is 30 seconds."
+msgstr "スパニングツリーãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ã¨ãã«ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒãƒ‘ケットã®è»¢é€ã‚’開始ã™ã‚‹å‰ã«é€šéŽã—ãªã‘ã‚Œã°ãªã‚‰ãªã„時間を設定ã—ã¾ã™ã€ 。デフォルトã¯15秒ã§ã™ã€‚最å°å€¤ã¯4秒ã€ã§ã€æœ€å¤§å€¤ã¯30秒ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:345
+#: usr/local/www/interfaces_bridge_edit.php:354
+#: usr/local/www/interfaces_bridge_edit.php:355
+#: usr/local/www/interfaces_bridge_edit.php:356
+#: usr/local/www/interfaces_bridge_edit.php:358
+#: usr/local/www/interfaces_bridge_edit.php:358
+msgid "Hello time"
+msgstr "ãƒãƒ­ãƒ¼ã‚¿ã‚¤ãƒ "
+
+#: usr/local/www/interfaces_bridge_edit.php:350
+#: usr/local/www/interfaces_bridge_edit.php:359
+#: usr/local/www/interfaces_bridge_edit.php:360
+#: usr/local/www/interfaces_bridge_edit.php:361
+#: usr/local/www/interfaces_bridge_edit.php:363
+#: usr/local/www/interfaces_bridge_edit.php:363
+msgid ""
+"Set the time between broadcasting of Spanning Tree Protocol configuration "
+"messages. The hello time may only be changed when operating in legacy STP "
+"mode. The default is 2 seconds. The minimum is 1 second and the maximum is "
+"2 seconds."
+msgstr "メッセージ「スパニングツリープロトコルã®è¨­å®šã®æ”¾é€ã¾ã§ã®æ™‚間を設定ã—ã¦ãã ã•ã„〠。レガシーSTPã«å‹•ä½œã—ã¦ã„ã‚‹å ´åˆã€helloタイムã¯å¤‰æ›´ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€ãƒ¢ãƒ¼ãƒ‰ã€‚デフォルトã¯2秒ã§ã™ã€‚最å°å€¤ã¯1秒ã§ã€æœ€å¤§å€¤ã¯ã€Œ 2秒。"
+
+#: usr/local/www/interfaces_bridge_edit.php:359
+#: usr/local/www/interfaces_bridge_edit.php:368
+#: usr/local/www/interfaces_bridge_edit.php:369
+#: usr/local/www/interfaces_bridge_edit.php:370
+#: usr/local/www/interfaces_bridge_edit.php:372
+#: usr/local/www/interfaces_bridge_edit.php:372
+msgid ""
+"Set the bridge priority for Spanning Tree. The default is 32768. The "
+"minimum is 0 and the maximum is 61440."
+msgstr "「スパニングツリーã®ãƒ–リッジプライオリティを設定ã—ã¾ã™ã€‚デフォルトã¯32768ã§ã™ã€‚ "最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯61440ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:363
+#: usr/local/www/interfaces_bridge_edit.php:372
+#: usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/interfaces_bridge_edit.php:374
+#: usr/local/www/interfaces_bridge_edit.php:376
+#: usr/local/www/interfaces_bridge_edit.php:376
+msgid "Hold count"
+msgstr "カウントをä¿æŒ"
+
+#: usr/local/www/interfaces_bridge_edit.php:368
+#: usr/local/www/interfaces_bridge_edit.php:377
+#: usr/local/www/interfaces_bridge_edit.php:378
+#: usr/local/www/interfaces_bridge_edit.php:379
+msgid ""
+"Set the transmit hold count for Spanning Tree. This is the num- ber of "
+"packets transmitted before being rate limited. The default is 6. The "
+"minimum is 1 and the maximum is 10."
+msgstr "レート制é™ã•ã‚Œã‚‹å‰ã«é€ä¿¡ã•ã‚ŒãŸãƒ‘ケットã€ã‚¹ãƒ‘ニングツリーã®é€ä¿¡ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¾ã™ã€‚ã“ã‚Œã¯Â·ãƒŠãƒ³ãƒãƒ¼ã§ã‚ã‚‹"。デフォルトã¯6ã§ã™ã€‚ 「最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯10ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:382
+msgid ""
+"Set the Spanning Tree priority of interface to value. The default is 128. "
+"The minimum is 0 and the maximum is 240."
+msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¹ãƒ‘ニングツリー優先度を設定ã—ã¾ã™ã€‚デフォルトã¯128ã§ã™ã€‚ 「最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯240ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:386
+#: usr/local/www/interfaces_bridge_edit.php:395
+#: usr/local/www/interfaces_bridge_edit.php:396
+#: usr/local/www/interfaces_bridge_edit.php:397
+#: usr/local/www/interfaces_bridge_edit.php:400
+#: usr/local/www/interfaces_bridge_edit.php:400
+msgid "Path cost"
+msgstr "パスコスト"
+
+#: usr/local/www/interfaces_bridge_edit.php:395
+#: usr/local/www/interfaces_bridge_edit.php:404
+#: usr/local/www/interfaces_bridge_edit.php:405
+#: usr/local/www/interfaces_bridge_edit.php:406
+#: usr/local/www/interfaces_bridge_edit.php:410
+#: usr/local/www/interfaces_bridge_edit.php:410
+msgid ""
+"Set the Spanning Tree path cost of interface to value. The default is "
+"calculated from the link speed. To change a previously selected path cost "
+"back to automatic, set the cost to 0. The minimum is 1 and the maximum is "
+"200000000."
+msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¹ãƒ‘ニングツリーパスコストを設定ã—ã¾ã™ã€‚デフォルトã¯ã•ã‚Œã¦ã„る「リンク速度ã‹ã‚‰ç®—出ã—ãŸã€‚以å‰ã«é¸æŠžã—ãŸãƒ‘スコストを変更ã™ã‚‹ã«ã¯ã€ ã€æˆ»ã£ã¦è‡ªå‹•ã«ã‚³ã‚¹ãƒˆã‚’0ã«è¨­å®šã™ã‚‹ã€‚最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯ã€Œ 200000000 。"
+
+#: usr/local/www/interfaces_bridge_edit.php:404
+#: usr/local/www/interfaces_bridge_edit.php:413
+#: usr/local/www/interfaces_bridge_edit.php:414
+#: usr/local/www/interfaces_bridge_edit.php:415
+#: usr/local/www/interfaces_bridge_edit.php:419
+#: usr/local/www/interfaces_bridge_edit.php:419
+msgid "Cache size"
+msgstr "キャッシュサイズ"
+
+#: usr/local/www/interfaces_bridge_edit.php:406
+#: usr/local/www/interfaces_bridge_edit.php:415
+#: usr/local/www/interfaces_bridge_edit.php:416
+#: usr/local/www/interfaces_bridge_edit.php:417
+#: usr/local/www/interfaces_bridge_edit.php:421
+#: usr/local/www/interfaces_bridge_edit.php:421
+msgid "entries"
+msgstr "エントリー"
+
+#: usr/local/www/interfaces_bridge_edit.php:408
+#: usr/local/www/interfaces_bridge_edit.php:417
+#: usr/local/www/interfaces_bridge_edit.php:418
+#: usr/local/www/interfaces_bridge_edit.php:419
+#: usr/local/www/interfaces_bridge_edit.php:423
+#: usr/local/www/interfaces_bridge_edit.php:423
+msgid ""
+"Set the size of the bridge address cache to size.tThe default is .100 "
+"entries."
+msgstr "エントリ「 size.tTheã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«ãƒ–リッジ·アドレス·キャッシュã®ã‚µã‚¤ã‚ºã‚’設定.100ã§ã™ã€ 。"
+
+#: usr/local/www/interfaces_bridge_edit.php:414
+#: usr/local/www/interfaces_bridge_edit.php:423
+#: usr/local/www/interfaces_bridge_edit.php:424
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/interfaces_bridge_edit.php:429
+#: usr/local/www/interfaces_bridge_edit.php:429
+msgid "Cache entry expire time"
+msgstr "キャッシュエントリã¯æœ‰åŠ¹æœŸé™ã‚’"
+
+#: usr/local/www/interfaces_bridge_edit.php:418
+#: usr/local/www/interfaces_bridge_edit.php:427
+#: usr/local/www/interfaces_bridge_edit.php:428
+#: usr/local/www/interfaces_bridge_edit.php:429
+#: usr/local/www/interfaces_bridge_edit.php:433
+#: usr/local/www/interfaces_bridge_edit.php:433
+msgid ""
+"Set the timeout of address cache entries to this number of seconds. If "
+"seconds is zero, then address cache entries will not be expired. The default "
+"is 240 seconds."
+msgstr "「ã“ã®ç§’æ•°ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚¨ãƒ³ãƒˆãƒªã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚å ´åˆã¯ã€ "秒ãŒã‚¼ãƒ­ã®å ´åˆã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚¨ãƒ³ãƒˆãƒªãŒæœŸé™åˆ‡ã‚Œã«ã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“å–り組む。デフォルト㯠"240秒ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/interfaces_bridge_edit.php:434
+#: usr/local/www/interfaces_bridge_edit.php:435
+#: usr/local/www/interfaces_bridge_edit.php:436
+#: usr/local/www/interfaces_bridge_edit.php:440
+#: usr/local/www/interfaces_bridge_edit.php:440
+msgid "Span port"
+msgstr "SPANãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:439
+#: usr/local/www/interfaces_bridge_edit.php:448
+#: usr/local/www/interfaces_bridge_edit.php:449
+#: usr/local/www/interfaces_bridge_edit.php:450
+#: usr/local/www/interfaces_bridge_edit.php:454
+#: usr/local/www/interfaces_bridge_edit.php:454
+msgid ""
+"Add the interface named by interface as a span port on the bridge. Span "
+"ports transmit a copy of every frame received by the bridge. This is most "
+"useful for snooping a bridged network passively on another host connected to "
+"one of the span ports of the bridge."
+msgstr "「ブリッジã®SPANãƒãƒ¼ãƒˆãªã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«ã‚ˆã£ã¦æŒ‡å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’追加ã—ã¾ã™ã€‚スパンã€ãƒãƒ¼ãƒˆã¯ã€ãƒ–リッジãŒå—ä¿¡ã—ãŸã™ã¹ã¦ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã®ã‚³ãƒ”ーをé€ä¿¡ã™ã‚‹ã€‚ã“ã‚Œã¯ãƒ–リッジã®ã‚¹ãƒ‘ンãƒãƒ¼ãƒˆã®1ã»ã¨ã‚“ã©ã® "ã«æŽ¥ç¶šã•ã‚ŒãŸåˆ¥ã®ãƒ›ã‚¹ãƒˆä¸Šã§å—å‹•çš„ã«ãƒ–リッジãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’スヌーピングã«ä¾¿åˆ©ã€ã§ã‚る。"
+
+#: usr/local/www/interfaces_bridge_edit.php:448
+#: usr/local/www/interfaces_bridge_edit.php:457
+#: usr/local/www/interfaces_bridge_edit.php:458
+#: usr/local/www/interfaces_bridge_edit.php:459
+#: usr/local/www/interfaces_bridge_edit.php:463
+#: usr/local/www/interfaces_bridge_edit.php:463
+msgid "The span interface cannot be part of the bridge member interfaces."
+msgstr "スパンã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€ãƒ–リッジメンãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ä¸€éƒ¨ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_bridge_edit.php:453
+#: usr/local/www/interfaces_bridge_edit.php:462
+#: usr/local/www/interfaces_bridge_edit.php:463
+#: usr/local/www/interfaces_bridge_edit.php:464
+#: usr/local/www/interfaces_bridge_edit.php:468
+#: usr/local/www/interfaces_bridge_edit.php:468
+msgid "Edge ports"
+msgstr "エッジãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:467
+#: usr/local/www/interfaces_bridge_edit.php:476
+#: usr/local/www/interfaces_bridge_edit.php:477
+#: usr/local/www/interfaces_bridge_edit.php:478
+#: usr/local/www/interfaces_bridge_edit.php:482
+#: usr/local/www/interfaces_bridge_edit.php:482
+msgid ""
+"Set interface as an edge port. An edge port connects directly to end "
+"stations and cannot create bridging loops in the network; this allows it to "
+"transition straight to forwarding."
+msgstr "「エッジãƒãƒ¼ãƒˆã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’設定ã—ã€ã‚¨ãƒƒã‚¸ãƒãƒ¼ãƒˆã¯ã€ã‚¨ãƒ³ãƒ‰ã«ç›´æŽ¥æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã™ã€ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã®ãƒ–リッジングループã¯ä½œæˆã§ãã¾ã›ã‚“ãŒã€ã“ã‚Œã¯ãã‚ŒãŒã¾ã£ã™ãフォワーディングを「移行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:473
+#: usr/local/www/interfaces_bridge_edit.php:482
+#: usr/local/www/interfaces_bridge_edit.php:483
+#: usr/local/www/interfaces_bridge_edit.php:484
+#: usr/local/www/interfaces_bridge_edit.php:488
+#: usr/local/www/interfaces_bridge_edit.php:488
+msgid "Auto Edge ports"
+msgstr "自動エッジãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:487
+#: usr/local/www/interfaces_bridge_edit.php:496
+#: usr/local/www/interfaces_bridge_edit.php:497
+#: usr/local/www/interfaces_bridge_edit.php:498
+#: usr/local/www/interfaces_bridge_edit.php:502
+#: usr/local/www/interfaces_bridge_edit.php:502
+msgid ""
+"Allow interface to automatically detect edge status. This is the default "
+"for all interfaces added to a bridge."
+msgstr "ブリッジã«è¿½åŠ ã•ã‚ŒãŸã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®"インタフェースãŒè‡ªå‹•çš„ã«ã‚¨ãƒƒã‚¸ã®çŠ¶æ…‹ã‚’検出ã™ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚ã“ã‚ŒãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã™ã€ 。"
+
+#: usr/local/www/interfaces_bridge_edit.php:492
+#: usr/local/www/interfaces_bridge_edit.php:501
+#: usr/local/www/interfaces_bridge_edit.php:502
+#: usr/local/www/interfaces_bridge_edit.php:503
+#: usr/local/www/interfaces_bridge_edit.php:507
+#: usr/local/www/interfaces_bridge_edit.php:507
+msgid "This will disable the autoedge status of interfaces."
+msgstr "ã“ã‚Œã¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®autoedge状態ãŒç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:496
+#: usr/local/www/interfaces_bridge_edit.php:505
+#: usr/local/www/interfaces_bridge_edit.php:506
+#: usr/local/www/interfaces_bridge_edit.php:507
+#: usr/local/www/interfaces_bridge_edit.php:511
+#: usr/local/www/interfaces_bridge_edit.php:511
+msgid "PTP ports"
+msgstr "PTPãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:510
+#: usr/local/www/interfaces_bridge_edit.php:519
+#: usr/local/www/interfaces_bridge_edit.php:520
+#: usr/local/www/interfaces_bridge_edit.php:521
+#: usr/local/www/interfaces_bridge_edit.php:525
+#: usr/local/www/interfaces_bridge_edit.php:525
+msgid ""
+"Set the interface as a point-to-point link. This is required for straight "
+"transitions to forwarding and should be enabled on a direct link to another "
+"RSTP-capable switch."
+msgstr "「インターフェースã®è¨­å®šãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆãƒªãƒ³ã‚¯ã¨ã—ã¦ã€‚ã“ã‚Œã¯çœŸã£ç›´ãã«å¿…è¦ã¨ã•ã‚Œã‚‹ã€Œè»¢é€ã«é·ç§»ã—ã€åˆ¥ã®ã€Œ RSTP対応スイッãƒã¸ã®ç›´æŽ¥ã®ãƒªãƒ³ã‚¯ã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:516
+#: usr/local/www/interfaces_bridge_edit.php:525
+#: usr/local/www/interfaces_bridge_edit.php:526
+#: usr/local/www/interfaces_bridge_edit.php:527
+#: usr/local/www/interfaces_bridge_edit.php:531
+#: usr/local/www/interfaces_bridge_edit.php:531
+msgid "Auto PTP ports"
+msgstr "オートPTPãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:530
+#: usr/local/www/interfaces_bridge_edit.php:539
+#: usr/local/www/interfaces_bridge_edit.php:540
+#: usr/local/www/interfaces_bridge_edit.php:541
+#: usr/local/www/interfaces_bridge_edit.php:545
+#: usr/local/www/interfaces_bridge_edit.php:545
+msgid ""
+"Automatically detect the point-to-point status on interface by checking the "
+"full duplex link status. This is the default for interfaces added to the "
+"bridge."
+msgstr "全二é‡ãƒªãƒ³ã‚¯çŠ¶æ…‹ã€ã‚’自動的ã«ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã®ãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆçŠ¶æ…‹ã‚’検出〠。ã“ã‚Œã¯ã€ "ブリッジã«è¿½åŠ ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:536
+#: usr/local/www/interfaces_bridge_edit.php:545
+#: usr/local/www/interfaces_bridge_edit.php:546
+#: usr/local/www/interfaces_bridge_edit.php:547
+#: usr/local/www/interfaces_bridge_edit.php:551
+#: usr/local/www/interfaces_bridge_edit.php:551
+msgid ""
+"The interfaces selected here will be removed from default autoedge status."
+msgstr "「ã“ã“ã§é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®autoedge状態ã‹ã‚‰å‰Šé™¤ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_bridge_edit.php:540
+#: usr/local/www/interfaces_bridge_edit.php:549
+#: usr/local/www/interfaces_bridge_edit.php:550
+#: usr/local/www/interfaces_bridge_edit.php:551
+#: usr/local/www/interfaces_bridge_edit.php:555
+#: usr/local/www/interfaces_bridge_edit.php:555
+msgid "Sticky ports"
+msgstr "スティッキーãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:554
+#: usr/local/www/interfaces_bridge_edit.php:563
+#: usr/local/www/interfaces_bridge_edit.php:564
+#: usr/local/www/interfaces_bridge_edit.php:565
+#: usr/local/www/interfaces_bridge_edit.php:569
+#: usr/local/www/interfaces_bridge_edit.php:569
+msgid ""
+"Mark an interface as a "sticky" interface. Dynamically learned address "
+"entries are treated as static once entered into the cache. Sticky entries "
+"are never aged out of the cache or replaced, even if the address is seen on "
+"a different interface."
+msgstr "「マークã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼ã€ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒå‹•çš„ã«å­¦ç¿’ã•ã‚ŒãŸã‚¢ãƒ‰ãƒ¬ã‚¹ "ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ã¨ã—ã¦æ‰±ã‚ã‚Œã€ä¸€åº¦ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã«å…¥ã£ãŸã€‚スティッキエントリã«ã¯ç•°ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã€Œã‚¢ãƒ‰ãƒ¬ã‚¹ãŒã§è¦‹ã¦ã„ã¦ã‚‚ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰è€åŒ–ã—ãªã„ã€ã¾ãŸã¯äº¤æ›æ±ºã—ã¦ã‚り〠。"
+
+#: usr/local/www/interfaces_bridge_edit.php:561
+#: usr/local/www/interfaces_bridge_edit.php:570
+#: usr/local/www/interfaces_bridge_edit.php:571
+#: usr/local/www/interfaces_bridge_edit.php:572
+#: usr/local/www/interfaces_bridge_edit.php:576
+#: usr/local/www/interfaces_bridge_edit.php:576
+msgid "Private ports"
+msgstr "プライベートãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_bridge_edit.php:575
+#: usr/local/www/interfaces_bridge_edit.php:584
+#: usr/local/www/interfaces_bridge_edit.php:585
+#: usr/local/www/interfaces_bridge_edit.php:586
+#: usr/local/www/interfaces_bridge_edit.php:590
+#: usr/local/www/interfaces_bridge_edit.php:590
+msgid ""
+"Mark an interface as a "private" interface. A private interface does not "
+"forward any traffic to any other port that is also a private interface."
+msgstr "プライベート "ã¨ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãƒžãƒ¼ã‚¯ã€ ã€ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’。プライベート·インタフェースãŒã‚ã‚Šã¾ã›ã‚“ã€ã¾ãŸã€ãƒ—ライベート·インタフェースã§ã‚ã‚‹ä»–ã®ãƒãƒ¼ãƒˆã«ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’転é€ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68
+#: usr/local/www/interfaces_gif.php:68
+msgid ""
+"This gif TUNNEL cannot be deleted because it is still being used as an "
+"interface."
+msgstr "インターフェイス「ãã‚Œã¯ã¾ã ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®GIFトンãƒãƒ«ã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108
+#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108
+#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112
+#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112
+msgid "Tunnel to..."
+msgstr "トンãƒãƒ«ã«..."
+
+#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124
+#: usr/local/www/interfaces_gif.php:128 usr/local/www/interfaces_gif.php:128
+msgid "Do you really want to delete this gif tunnel?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®GIFトンãƒãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135
+#: usr/local/www/interfaces_gif.php:139 usr/local/www/interfaces_gif.php:139
+msgid "GIF tunnels are configured here."
+msgstr "GIFトンãƒãƒ«ã¯ã“ã“ã§è¨­å®šã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gif_edit.php:72
+#: usr/local/www/interfaces_gif_edit.php:75
+#: usr/local/www/interfaces_gif_edit.php:75
+msgid ""
+"Parent interface,Local address, Remote tunnel address, Remote tunnel "
+"network, Local tunnel address"
+msgstr "「親ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒˆãƒ³ãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒˆãƒ³ãƒãƒ«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒˆãƒ³ãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gif_edit.php:78
+#: usr/local/www/interfaces_gre_edit.php:80
+#: usr/local/www/interfaces_gif_edit.php:81
+#: usr/local/www/interfaces_gre_edit.php:80
+#: usr/local/www/interfaces_gif_edit.php:81
+msgid "The tunnel local and tunnel remote fields must have valid IP addresses."
+msgstr "トンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒˆãƒ³ãƒãƒ«ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€æœ‰åŠ¹ãªIPアドレスをæŒã£ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gif_edit.php:87
+#: usr/local/www/interfaces_gif_edit.php:95
+#: usr/local/www/interfaces_gif_edit.php:95
+#, php-format
+msgid "A gif with the network %s is already defined."
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯%sã¨GIFãŒã™ã§ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gif_edit.php:137
+#: usr/local/www/interfaces_gif_edit.php:138
+#: usr/local/www/interfaces_gif_edit.php:146
+#: usr/local/www/interfaces_gif_edit.php:146
+msgid "GIF configuration"
+msgstr "GIFã®è¨­å®š"
+
+#: usr/local/www/interfaces_gif_edit.php:139
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:141
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan_edit.php:153
+#: usr/local/www/interfaces_lagg_edit.php:134
+#: usr/local/www/interfaces_qinq_edit.php:288
+#: usr/local/www/interfaces_wireless_edit.php:84
+#: usr/local/www/interfaces_wireless_edit.php:159
+#: usr/local/www/interfaces_gif_edit.php:140
+#: usr/local/www/interfaces_vlan_edit.php:154
+#: usr/local/www/interfaces_qinq_edit.php:289
+#: usr/local/www/interfaces_gif_edit.php:141
+#: usr/local/www/interfaces_lagg_edit.php:135
+#: usr/local/www/interfaces_gre_edit.php:142
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:161
+#: usr/local/www/interfaces_vlan_edit.php:157
+#: usr/local/www/interfaces_lagg_edit.php:148
+#: usr/local/www/interfaces_gif_edit.php:149
+#: usr/local/www/interfaces_qinq_edit.php:292
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:161
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:142
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan_edit.php:157
+#: usr/local/www/interfaces_lagg_edit.php:148
+#: usr/local/www/interfaces_gif_edit.php:149
+#: usr/local/www/interfaces_qinq_edit.php:292
+msgid "Parent interface"
+msgstr "親インターフェース"
+
+#: usr/local/www/interfaces_gif_edit.php:156
+#: usr/local/www/interfaces_gif_edit.php:157
+#: usr/local/www/interfaces_gif_edit.php:158
+#: usr/local/www/interfaces_gif_edit.php:169
+msgid ""
+"The interface here servers as the local address to be used for the gif "
+"tunnel."
+msgstr "トンãƒãƒ«"GIFã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦ã€ã“ã“ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®ã‚µãƒ¼ãƒãƒ¼ã€ 。"
+
+#: usr/local/www/interfaces_gif_edit.php:159
+#: usr/local/www/interfaces_gif_edit.php:160
+#: usr/local/www/interfaces_gif_edit.php:161
+#: usr/local/www/interfaces_gif_edit.php:172
+#: usr/local/www/interfaces_gif_edit.php:172
+msgid "gif remote address"
+msgstr "GIFリモートアドレス"
+
+#: usr/local/www/interfaces_gif_edit.php:163
+#: usr/local/www/interfaces_gif_edit.php:164
+#: usr/local/www/interfaces_gif_edit.php:165
+#: usr/local/www/interfaces_gif_edit.php:176
+#: usr/local/www/interfaces_gif_edit.php:176
+msgid "Peer address where encapsulated gif packets will be sent. "
+msgstr "カプセル化ã•ã‚ŒãŸGIFパケットãŒé€ä¿¡ã•ã‚Œã‚‹ãƒ”アアドレス。"
+
+#: usr/local/www/interfaces_gif_edit.php:166
+#: usr/local/www/interfaces_gif_edit.php:167
+#: usr/local/www/interfaces_gif_edit.php:168
+#: usr/local/www/interfaces_gif_edit.php:179
+#: usr/local/www/interfaces_gif_edit.php:179
+msgid "gif tunnel local address"
+msgstr "GIFトンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gif_edit.php:170
+#: usr/local/www/interfaces_gif_edit.php:171
+#: usr/local/www/interfaces_gif_edit.php:172
+#: usr/local/www/interfaces_gif_edit.php:183
+#: usr/local/www/interfaces_gif_edit.php:183
+msgid "Local gif tunnel endpoint"
+msgstr "ローカルGIFトンãƒãƒ«ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ"
+
+#: usr/local/www/interfaces_gif_edit.php:173
+#: usr/local/www/interfaces_gif_edit.php:174
+#: usr/local/www/interfaces_gif_edit.php:175
+#: usr/local/www/interfaces_gif_edit.php:186
+#: usr/local/www/interfaces_gif_edit.php:186
+msgid "gif tunnel remote address "
+msgstr "GIFトンãƒãƒ«ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gif_edit.php:188
+#: usr/local/www/interfaces_gif_edit.php:189
+#: usr/local/www/interfaces_gif_edit.php:200
+#: usr/local/www/interfaces_gif_edit.php:200
+msgid ""
+"Remote gif address endpoint. The subnet part is used for determining the "
+"network that is tunnelled."
+msgstr "「リモートgif注アドレス·エンドãƒã‚¤ãƒ³ãƒˆã€‚サブãƒãƒƒãƒˆéƒ¨ã‚’決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€Œãƒˆãƒ³ãƒãƒªãƒ³ã‚°ã•ã‚Œã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚"
+
+#: usr/local/www/interfaces_gif_edit.php:191
+#: usr/local/www/interfaces_gif_edit.php:192
+#: usr/local/www/interfaces_gif_edit.php:203
+#: usr/local/www/interfaces_gif_edit.php:203
+msgid "Route caching "
+msgstr "ルート·キャッシング"
+
+#: usr/local/www/interfaces_gif_edit.php:195
+#: usr/local/www/interfaces_gif_edit.php:196
+#: usr/local/www/interfaces_gif_edit.php:207
+#: usr/local/www/interfaces_gif_edit.php:207
+msgid ""
+"Specify if route caching can be enabled. Be careful with these settings on "
+"dynamic networks. "
+msgstr "「ルートキャッシュを有効ã«ã§ãã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ã“れらã®è¨­å®šã«ã¯æ³¨æ„ã—ã¦ãã ã•ã„"ダイナミックãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚"
+
+#: usr/local/www/interfaces_gif_edit.php:198
+#: usr/local/www/interfaces_gif_edit.php:199
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid "ECN friendly behaviour"
+msgstr "é›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚„ã•ã—ã„行動"
+
+#: usr/local/www/interfaces_gif_edit.php:203
+#: usr/local/www/interfaces_gif_edit.php:204
+#: usr/local/www/interfaces_gif_edit.php:215
+#: usr/local/www/interfaces_gif_edit.php:215
+msgid ""
+"Note that the ECN friendly behavior violates RFC2893. This should be used "
+"in mutual agreement with the peer."
+msgstr "ピアã¨ã®åˆæ„ã§ã€Œé›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«å„ªã—ã„行動ãŒRFC2893ã«é•åã—ã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69
+#: usr/local/www/interfaces_gre.php:69
+msgid ""
+"This GRE tunnel cannot be deleted because it is still being used as an "
+"interface."
+msgstr "インターフェイス「ãã‚Œã¯ã¾ã ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®GREトンãƒãƒ«ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125
+#: usr/local/www/interfaces_gre.php:129 usr/local/www/interfaces_gre.php:129
+msgid "Do you really want to delete this GRE tunnel?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®GREトンãƒãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134
+#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gre.php:138
+msgid ""
+"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) "
+"tunnels."
+msgstr "トンãƒãƒ« - "ã“ã“ã§ã¯ç·ç§°ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚«ãƒ—セル化( RFC 2784 GRE )を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Local address"
+msgstr "ローカルアドレス"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Remote tunnel address"
+msgstr "リモートトンãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Remote tunnel network"
+msgstr "リモートトンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Local tunnel address"
+msgstr "ローカルトンãƒãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gre_edit.php:88
+#: usr/local/www/interfaces_gre_edit.php:88
+#, php-format
+msgid "A GRE tunnel with the network %s is already defined."
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯%sã¨GREトンãƒãƒ«ã¯ã™ã§ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gre_edit.php:138
+#: usr/local/www/interfaces_gre_edit.php:139
+#: usr/local/www/interfaces_gre_edit.php:139
+msgid "GRE configuration"
+msgstr "GREã®è¨­å®š"
+
+#: usr/local/www/interfaces_gre_edit.php:158
+#: usr/local/www/interfaces_gre_edit.php:159
+#: usr/local/www/interfaces_gre_edit.php:159
+msgid ""
+"The interface here serves as the local address to be used for the GRE tunnel."
+msgstr "「ã“ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ GREトンãƒãƒ«ã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gre_edit.php:161
+#: usr/local/www/interfaces_gre_edit.php:162
+#: usr/local/www/interfaces_gre_edit.php:162
+msgid "GRE remote address"
+msgstr "GREã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gre_edit.php:165
+#: usr/local/www/interfaces_gre_edit.php:166
+#: usr/local/www/interfaces_gre_edit.php:166
+msgid "Peer address where encapsulated GRE packets will be sent "
+msgstr "カプセル化ã•ã‚ŒãŸGREパケットã®é€ä¿¡å…ˆã¨ãªã‚‹ãƒ”アアドレス"
+
+#: usr/local/www/interfaces_gre_edit.php:168
+#: usr/local/www/interfaces_gre_edit.php:169
+#: usr/local/www/interfaces_gre_edit.php:169
+msgid "GRE tunnel local address "
+msgstr "GREトンãƒãƒ«ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gre_edit.php:172
+#: usr/local/www/interfaces_gre_edit.php:173
+#: usr/local/www/interfaces_gre_edit.php:173
+msgid "Local GRE tunnel endpoint"
+msgstr "ローカルã®GREトンãƒãƒ«ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ"
+
+#: usr/local/www/interfaces_gre_edit.php:175
+#: usr/local/www/interfaces_gre_edit.php:176
+#: usr/local/www/interfaces_gre_edit.php:176
+msgid "GRE tunnel remote address "
+msgstr "GREトンãƒãƒ«ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/interfaces_gre_edit.php:190
+#: usr/local/www/interfaces_gre_edit.php:189
+#: usr/local/www/interfaces_gre_edit.php:190
+msgid ""
+"Remote GRE address endpoint. The subnet part is used for the determining the "
+"network that is tunneled."
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ãƒˆãƒ³ãƒãƒªãƒ³ã‚°ã•ã‚Œã‚‹ã€Œãƒªãƒ¢ãƒ¼ãƒˆGREアドレスエンドãƒã‚¤ãƒ³ãƒˆã¯ã€‚サブãƒãƒƒãƒˆéƒ¨ã‚’決定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹"。"
+
+#: usr/local/www/interfaces_gre_edit.php:193
+#: usr/local/www/interfaces_gre_edit.php:192
+#: usr/local/www/interfaces_gre_edit.php:193
+msgid "Mobile tunnel"
+msgstr "モãƒã‚¤ãƒ«ãƒˆãƒ³ãƒãƒ«"
+
+#: usr/local/www/interfaces_gre_edit.php:197
+#: usr/local/www/interfaces_gre_edit.php:196
+#: usr/local/www/interfaces_gre_edit.php:197
+msgid "Specify which encapsulation method the tunnel should use. "
+msgstr "トンãƒãƒ«ãŒä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚るカプセル化方法を指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_gre_edit.php:200
+#: usr/local/www/interfaces_gre_edit.php:199
+#: usr/local/www/interfaces_gre_edit.php:200
+msgid "Route search type"
+msgstr "経路探索タイプ"
+
+#: usr/local/www/interfaces_gre_edit.php:205
+#: usr/local/www/interfaces_gre_edit.php:204
+#: usr/local/www/interfaces_gre_edit.php:205
+msgid ""
+"For correct operation, the GRE device needs a route to the destination that "
+"is less specific than the one over the tunnel. (Basically, there needs to "
+"be a route to the decapsulating host that does not run over the tunnel, as "
+"this would be a loop."
+msgstr "トンãƒãƒ«ä¸Šã®1よりもå°ã•ã„固有ã§ã‚る「正常ãªå‹•ä½œã®ãŸã‚ã«ã¯ã€ GREã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ãã®ç›®çš„地ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ã€ 。 (基本的ã«ã€ã“ã‚ŒãŒãƒ«ãƒ¼ãƒ—ã«ãªã‚‹ã€ã¨ã€ãƒˆãƒ³ãƒãƒ«ä¸Šã§å®Ÿè¡Œã•ã‚Œãªã„カプセル化解除ホストã¸ã®çµŒè·¯ã§ã‚ã‚‹ã“ã¨ã€ã«ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/interfaces_gre_edit.php:212
+#: usr/local/www/interfaces_gre_edit.php:211
+#: usr/local/www/interfaces_gre_edit.php:212
+msgid "WCCP version"
+msgstr "WCCPãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/interfaces_gre_edit.php:216
+#: usr/local/www/interfaces_gre_edit.php:215
+#: usr/local/www/interfaces_gre_edit.php:216
+msgid ""
+"Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use"
+msgstr "「ã“ã‚ŒWCCPカプセル化(ãƒãƒ¼ã‚¸ãƒ§ãƒ³1ã¾ãŸã¯2 )ã®æ–¹æ³•ãƒˆãƒ³ãƒãƒ«ãŒä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã‚’指定"
+
+#: usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/system_routes.php:117
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/system_authservers.php:422
+#: usr/local/www/system_gateway_groups.php:110
+#: usr/local/www/system_gateways.php:143
+#: usr/local/www/system_groupmanager.php:241
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/system_usermanager.php:441
+#: usr/local/www/system_usermanager.php:790
+#: usr/local/www/system_usermanager_addprivs.php:168
+#: usr/local/www/system_usermanager_settings.php:114
+#: usr/local/www/system_usermanager.php:439
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/system_groupmanager_addprivs.php:167
+#: usr/local/www/system_usermanager.php:789
+#: usr/local/www/system_gateway_groups.php:111
+#: usr/local/www/system_authservers.php:427
+#: usr/local/www/system_routes.php:121
+#: usr/local/www/system_authservers.php:434
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_routes.php:136
+#: usr/local/www/system_groupmanager.php:241
+#: usr/local/www/system_usermanager_addprivs.php:168
+#: usr/local/www/system_routes.php:136 usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/system_authservers.php:434
+#: usr/local/www/system_groupmanager_addprivs.php:167
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/system_usermanager.php:439
+#: usr/local/www/system_usermanager.php:789
+#: usr/local/www/system_gateways.php:143
+#: usr/local/www/system_gateway_groups.php:120
+msgid "Groups"
+msgstr "グループ"
+
+#: usr/local/www/interfaces_groups.php:127
+#: usr/local/www/system_groupmanager.php:443
+#: usr/local/www/system_groupmanager.php:446
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/system_groupmanager.php:464
+#: usr/local/www/system_groupmanager.php:464
+#: usr/local/www/interfaces_groups.php:128
+msgid "edit group"
+msgstr "編集グループ"
+
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/interfaces_groups.php:129
+#: usr/local/www/interfaces_groups.php:129
+msgid ""
+"Do you really want to delete this group? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr " (例ãˆã°ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ï¼‰ãŒç„¡åŠ¹ã«ãªã‚‹ã€Œæœ¬å½“ã«ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™ã€‚ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹"ï¼"
+
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/interfaces_groups.php:129
+#: usr/local/www/interfaces_groups.php:129
+msgid "delete ifgroupentry"
+msgstr "ifgroupentryを削除"
+
+#: usr/local/www/interfaces_groups.php:140
+#: usr/local/www/interfaces_groups.php:141
+#: usr/local/www/interfaces_groups.php:141
+msgid "add a new group"
+msgstr "æ–°ã—ã„グループを追加"
+
+#: usr/local/www/interfaces_groups.php:148
+#: usr/local/www/interfaces_groups.php:149
+#: usr/local/www/interfaces_groups.php:148
+msgid ""
+"Interface Groups allow you to create rules that apply to multiple interfaces "
+"without duplicating the rules. If you remove members from an interface "
+"group, the group rules no longer apply to that interface."
+msgstr "ルールを複製ã™ã‚‹ã“ã¨ãªã「インターフェイスグループã¯ã€è¤‡æ•°ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。インターフェイス"グループã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã™ã‚‹ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—ルールã¯ã€ã‚‚ã¯ã‚„ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«é©ç”¨ã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_groups_edit.php:71
+#: usr/local/www/interfaces_groups_edit.php:72
+#: usr/local/www/interfaces_groups_edit.php:72
+msgid "Group name already exists!"
+msgstr "グループåã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ ï¼"
+
+#: usr/local/www/interfaces_groups_edit.php:74
+#: usr/local/www/interfaces_groups_edit.php:75
+#: usr/local/www/interfaces_groups_edit.php:75
+msgid "Only letters A-Z are allowed as the group name."
+msgstr "唯一ã®æ–‡å­—A - Zã¯ã‚°ãƒ«ãƒ¼ãƒ—åã¨ã—ã¦è¨±å¯ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_groups_edit.php:248
+#: usr/local/www/interfaces_groups_edit.php:249
+#: usr/local/www/interfaces_groups_edit.php:249
+msgid "Interface Groups Edit"
+msgstr "インターフェースグループã®ç·¨é›†"
+
+#: usr/local/www/interfaces_groups_edit.php:251
+#: usr/local/www/status_gateway_groups.php:74
+#: usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_gateway_groups_edit.php:158
+#: usr/local/www/system_gateway_groups_edit.php:161
+#: usr/local/www/system_groupmanager.php:117
+#: usr/local/www/system_gateway_groups_edit.php:169
+#: usr/local/www/system_gateway_groups_edit.php:172
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateway_groups_edit.php:231
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/interfaces_groups_edit.php:252
+#: usr/local/www/status_gateway_groups.php:75
+#: usr/local/www/system_gateway_groups_edit.php:232
+#: usr/local/www/system_gateway_groups_edit.php:235
+#: usr/local/www/system_gateway_groups.php:130
+#: usr/local/www/system_groupmanager.php:117
+#: usr/local/www/interfaces_groups_edit.php:252
+#: usr/local/www/system_gateway_groups_edit.php:232
+#: usr/local/www/system_gateway_groups_edit.php:235
+#: usr/local/www/status_gateway_groups.php:75
+#: usr/local/www/system_gateway_groups.php:130
+msgid "Group Name"
+msgstr "グループå"
+
+#: usr/local/www/interfaces_groups_edit.php:255
+#: usr/local/www/interfaces_groups_edit.php:256
+#: usr/local/www/interfaces_groups_edit.php:256
+msgid "No numbers or spaces are allowed. Only characters in a-zA-Z"
+msgstr "å…¨ã数字やスペースã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。 - ZA- Zã®ä¸­ã®æ–‡å­—ã®ã¿"
+
+#: usr/local/www/interfaces_groups_edit.php:269
+#: usr/local/www/interfaces_qinq_edit.php:347
+#: usr/local/www/interfaces_qinq_edit.php:348
+#: usr/local/www/interfaces_groups_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:351
+#: usr/local/www/interfaces_groups_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:351
+msgid "Member (s)"
+msgstr "(履歴)"
+
+#: usr/local/www/firewall_aliases.php:103
+#: usr/local/www/firewall_aliases.php:106
+#: usr/local/www/firewall_aliases.php:107
+#: usr/local/www/firewall_aliases.php:106
+#, php-format
+msgid "Cannot delete alias. Currently in use by %s"
+msgstr "エイリアスを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ç¾åœ¨%sã§ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/firewall_aliases.php:160
+#: usr/local/www/firewall_aliases.php:163
+#: usr/local/www/firewall_aliases.php:167
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/firewall_aliases.php:166
+msgid "The alias list has been changed."
+msgstr "エイリアスリストãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/services_igmpproxy.php:97
+#: usr/local/www/firewall_aliases.php:169
+#: usr/local/www/firewall_aliases.php:189
+#: usr/local/www/firewall_aliases.php:189
+#: usr/local/www/services_igmpproxy.php:97
+msgid "Values"
+msgstr "値"
+
+#: usr/local/www/firewall_aliases.php:172
+#: usr/local/www/firewall_aliases.php:218
+#: usr/local/www/firewall_aliases.php:175
+#: usr/local/www/firewall_aliases.php:221
+msgid "add a new alias"
+msgstr "æ–°ã—ã„エイリアスを追加"
+
+#: usr/local/www/firewall_aliases.php:204
+#: usr/local/www/firewall_schedule.php:220
+#: usr/local/www/firewall_aliases.php:207
+#: usr/local/www/firewall_schedule.php:220
+msgid "edit alias"
+msgstr "編集別å"
+
+#: usr/local/www/firewall_aliases.php:205
+#: usr/local/www/firewall_aliases.php:208
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+#: usr/local/www/firewall_aliases.php:258
+#: usr/local/www/firewall_aliases.php:258
+msgid ""
+"Do you really want to delete this alias? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™" (例ãˆã°ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ï¼‰ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases.php:205
+#: usr/local/www/firewall_schedule.php:221
+#: usr/local/www/firewall_aliases.php:208
+#: usr/local/www/firewall_schedule.php:221
+msgid "delete alias"
+msgstr "エイリアスを削除"
+
+#: usr/local/www/firewall_aliases.php:221
+#: usr/local/www/firewall_aliases.php:224
+#: usr/local/www/firewall_aliases.php:275
+#: usr/local/www/firewall_aliases.php:277
+#: usr/local/www/firewall_aliases.php:278
+#: usr/local/www/firewall_aliases.php:278
+msgid "Bulk import aliases from list"
+msgstr "リストã‹ã‚‰ä¸€æ‹¬ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹"
+
+#: usr/local/www/firewall_aliases.php:229
+#: usr/local/www/firewall_aliases.php:232
+#: usr/local/www/firewall_aliases.php:284
+#: usr/local/www/firewall_aliases.php:287
+#: usr/local/www/firewall_aliases.php:288
+#: usr/local/www/firewall_aliases.php:288
+msgid ""
+"Aliases act as placeholders for real hosts, networks or ports. They can be "
+"used to minimize the number of changes that have to be made if a host, "
+"network or port changes. You can enter the name of an alias instead of the "
+"host, network or port in all fields that have a red background. The alias "
+"will be resolved according to the list above. If an alias cannot be resolved "
+"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/"
+"shaper rule) will be considered invalid and skipped."
+msgstr "「エイリアスã¯ã€å®Ÿéš›ã®ãƒ›ã‚¹ãƒˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆã®ãƒ—レースホルダã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚彼らãŒã™ã‚‹ã“ã¨ãŒã§ãる「ã‚ãªãŸã®ä»£ã‚ã‚Šã«åˆ¥åã®åå‰ã‚’入力ã™ã‚‹ã“ã¨ãŒã§ãã€ãƒ›ã‚¹ãƒˆã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆãŒå¤‰æ›´ã•ã‚ŒãŸå ´åˆã€‚è¡Œã‚ãªã‘ã‚Œã°ãªã‚‰ãªã„変更ã®æ•°ã‚’最å°åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨èµ¤ã„背景をæŒã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã§ã¯ã€Œãƒ›ã‚¹ãƒˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒãƒ¼ãƒˆã€‚エイリアスãŒã€Œä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã«å¾“ã£ã¦è§£æ±ºã•ã‚Œã¾ã™ã€‚エイリアスãŒè§£æ±ºã§ããªã„å ´åˆã¯ã€ã€Œ (ã‚ãªãŸãŒãれを削除ã—ãŸãªã©ãŸã‚) ã€å¯¾å¿œã™ã‚‹è¦ç´ ï¼ˆä¾‹ãˆã°ã€ãƒ•ã‚£ãƒ«ã‚¿/ NAT / 「シェールール)ã¯ã€ç„¡åŠ¹ã¨ã¿ãªã•ã‚Œã€ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:105
+#: usr/local/www/firewall_aliases_edit.php:107
+#: usr/local/www/firewall_aliases_edit.php:107
+#, php-format
+msgid "Sorry, an interface is already named %s."
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã™ã§ã«%s.ã¨ã„ã†åå‰ã§ã™"
+
+#: usr/local/www/firewall_aliases_edit.php:140
+#: usr/local/www/firewall_aliases_edit.php:142
+#: usr/local/www/firewall_aliases_edit.php:134
+#: usr/local/www/firewall_aliases_edit.php:136
+#: usr/local/www/firewall_aliases_edit.php:134
+#: usr/local/www/firewall_aliases_edit.php:136
+msgid "Reserved word used for alias name."
+msgstr "エイリアスåã«ä½¿ç”¨ã™ã‚‹äºˆç´„語。"
+
+#: usr/local/www/firewall_aliases_edit.php:145
+#: usr/local/www/firewall_aliases_edit.php:139
+#: usr/local/www/firewall_aliases_edit.php:139
+msgid ""
+"The alias name must be less than 32 characters long, may not consist of only numbers, and may only contain the following characters "
+msgstr "「エイリアスåã¯ã€é•·ã„32文字未満ã§ãªã‘ã‚Œã°ãªã‚‰ãšã€å”¯ä¸€ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã€ã®æ–‡å­—"
+
+#: usr/local/www/firewall_aliases_edit.php:187
+#: usr/local/www/firewall_aliases_edit.php:242
+#: usr/local/www/firewall_aliases_edit.php:188
+#: usr/local/www/firewall_aliases_edit.php:244
+#: usr/local/www/firewall_aliases_edit.php:182
+#: usr/local/www/firewall_aliases_edit.php:182
+msgid "You must provide a valid URL."
+msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:190
+#: usr/local/www/firewall_aliases_edit.php:191
+#: usr/local/www/firewall_aliases_edit.php:185
+#: usr/local/www/firewall_aliases_edit.php:185
+msgid "Unable to fetch usable data."
+msgstr "使用å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_aliases_edit.php:235
+#: usr/local/www/firewall_aliases_edit.php:237
+msgid "You must provide a valid URL. Could not fetch usable data."
+msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚使用å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:261
+#: usr/local/www/firewall_aliases_edit.php:264
+#: usr/local/www/firewall_aliases_edit.php:278
+#: usr/local/www/firewall_aliases_edit.php:269
+msgid "is not a valid port or alias."
+msgstr "有効ãªãƒãƒ¼ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_aliases_edit.php:266
+#: usr/local/www/firewall_aliases_edit.php:269
+#: usr/local/www/firewall_aliases_edit.php:283
+#: usr/local/www/firewall_aliases_edit.php:274
+#, php-format
+msgid "%1$s is not a valid %2$s alias."
+msgstr "ã¯%1$sã¯æœ‰åŠ¹%2$sã®åˆ¥åã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_aliases_edit.php:281
+#: usr/local/www/firewall_aliases_edit.php:284
+#: usr/local/www/firewall_aliases_edit.php:191
+#: usr/local/www/firewall_aliases_edit.php:221
+#: usr/local/www/firewall_aliases_edit.php:303
+#: usr/local/www/firewall_aliases_edit.php:191
+#: usr/local/www/firewall_aliases_edit.php:221
+#: usr/local/www/firewall_aliases_edit.php:289
+#, php-format
+msgid "Entry added %s"
+msgstr "エントリ追加%s"
+
+#: usr/local/www/firewall_aliases_edit.php:285
+#: usr/local/www/firewall_aliases_edit.php:288
+#: usr/local/www/firewall_aliases_edit.php:307
+#: usr/local/www/firewall_aliases_edit.php:293
+#, php-format
+msgid ""
+"The alias(es): %s cannot be nested because they are not of the same type."
+msgstr "「エイリアス( ES ) :彼らã¯åŒã˜åž‹ã§ã¯ãªã„ãŸã‚%sを入れå­ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_aliases_edit.php:453
+#: usr/local/www/firewall_aliases_edit.php:605
+#: usr/local/www/firewall_aliases_edit.php:456
+#: usr/local/www/firewall_aliases_edit.php:610
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:613
+#: usr/local/www/firewall_aliases_edit.php:480
+#: usr/local/www/firewall_aliases_edit.php:644
+#: usr/local/www/firewall_aliases_edit.php:466
+#: usr/local/www/firewall_aliases_edit.php:630
+msgid "Network(s)"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰"
+
+#: usr/local/www/firewall_aliases_edit.php:454
+#: usr/local/www/services_igmpproxy_edit.php:224
+#: usr/local/www/services_unbound_acls.php:237
+#: usr/local/www/services_igmpproxy_edit.php:226
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_aliases_edit.php:481
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/services_igmpproxy_edit.php:226
+msgid "CIDR"
+msgstr "CIDR"
+
+#: usr/local/www/firewall_aliases_edit.php:456
+#: usr/local/www/firewall_aliases_edit.php:604
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/firewall_aliases_edit.php:619
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:622
+#: usr/local/www/firewall_aliases_edit.php:483
+#: usr/local/www/firewall_aliases_edit.php:643
+#: usr/local/www/firewall_aliases_edit.php:653
+#: usr/local/www/firewall_aliases_edit.php:469
+#: usr/local/www/firewall_aliases_edit.php:629
+#: usr/local/www/firewall_aliases_edit.php:639
+msgid "Host(s)"
+msgstr "ホスト(å˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰"
+
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/diag_states_summary.php:150
+#: usr/local/www/services_dnsmasq.php:245
+#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538
+#: usr/local/www/services_dnsmasq.php:333
+#: usr/local/www/services_unbound.php:281
+#: usr/local/www/services_unbound.php:348
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/diag_states_summary.php:139
+#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246
+#: usr/local/www/services_dnsmasq.php:334
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_aliases.php:176
+#: usr/local/www/diag_states_summary.php:141
+#: usr/local/www/vpn_pppoe_edit.php:542 usr/local/www/services_dnsmasq.php:271
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/firewall_aliases.php:174
+#: usr/local/www/firewall_aliases_edit.php:484
+#: usr/local/www/services_dnsmasq.php:284
+#: usr/local/www/services_dnsmasq.php:372
+#: usr/local/www/services_dnsmasq.php:348
+#: usr/local/www/services_dnsmasq.php:436
+#: usr/local/www/diag_states_summary.php:141
+#: usr/local/www/firewall_aliases.php:174 usr/local/www/vpn_pppoe_edit.php:542
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/services_dnsmasq.php:348
+#: usr/local/www/services_dnsmasq.php:436
+msgid "IP"
+msgstr "IP"
+
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:606
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:611
+#: usr/local/www/firewall_aliases_edit.php:463
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:485
+#: usr/local/www/firewall_aliases_edit.php:645
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:631
+msgid "Port(s)"
+msgstr "ãƒãƒ¼ãƒˆï¼ˆè¤‡æ•°å¯ï¼‰"
+
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/firewall_aliases_edit.php:608
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/firewall_aliases_edit.php:463
+#: usr/local/www/firewall_aliases_edit.php:613
+#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828
+#: usr/local/www/firewall_aliases_edit.php:465
+#: usr/local/www/firewall_aliases_edit.php:616
+#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759
+#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dhcp.php:1075
+#: usr/local/www/firewall_aliases_edit.php:487
+#: usr/local/www/firewall_aliases_edit.php:647
+#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/firewall_aliases_edit.php:473
+#: usr/local/www/firewall_aliases_edit.php:633
+msgid "URL"
+msgstr "URLã¯"
+
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:466
+#: usr/local/www/firewall_aliases_edit.php:617
+#: usr/local/www/firewall_aliases_edit.php:488
+#: usr/local/www/firewall_aliases_edit.php:648
+#: usr/local/www/firewall_aliases_edit.php:474
+#: usr/local/www/firewall_aliases_edit.php:634
+msgid "URL Table"
+msgstr "URLテーブル"
+
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_aliases_edit.php:465
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:489
+#: usr/local/www/firewall_aliases_edit.php:475
+msgid "Update Freq."
+msgstr "周波数を更新ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:469
+#: usr/local/www/firewall_aliases_edit.php:491
+#: usr/local/www/firewall_aliases_edit.php:477
+msgid ""
+"Networks are specified in CIDR format. Select the CIDR mask that pertains "
+"to each entry. /32 specifies a single IPv4 host, /128 specifies a single "
+"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, "
+"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 "
+"or /128 for IPv6. You may also enter an IP range such as "
+"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to "
+"fill the range."
+msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¯CIDRå½¢å¼ã§æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚関連ã™ã‚‹CIDRマスクé¸æŠžã€ã®å„エントリã«ã¯ã€‚ / 32ã¯ã€å˜ä¸€ã®IPv4ホストを指定ã—〠/ 128ãªã©ã€ ã€é€šå¸¸ã®IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã—ãŸIPv6ホスト〠255.255.255.0 〠/ 64 / 24指定"シングルを指定ホストå( FQDNã®ï¼‰ã‚‚IPv4ã®/ 32マスクを用ã„ã¦ã€æŒ‡å®šã™ã‚‹ã“ã¨ãŒ192.168.1.254ã®ã€Œ IPv6ã®ã‹/ 128 。ã¾ãŸã€ã®ã‚ˆã†ãªIPアドレスã®ç¯„囲を入力ã™ã‚‹ã“ã¨ã€ã¨CIDRãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚¹ãƒˆã¯ã€æ´¾ç”Ÿã•ã‚Œã¾ã™ã€Œç¯„囲を入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:465
+msgid ""
+"Enter as many hosts as you would like. Hosts must be specified by their IP "
+"address."
+msgstr "「ã‚ãªãŸãŒæœ›ã‚“ã§ã„ã‚‹ã»ã©å¤šãã®ãƒ›ã‚¹ãƒˆã‚’入力ã—ã¾ã™ã€‚ホストãŒIPアドレスã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:466
+#: usr/local/www/firewall_aliases_edit.php:469
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:493
+#: usr/local/www/firewall_aliases_edit.php:479
+msgid ""
+"Enter as many ports as you wish. Port ranges can be expressed by seperating "
+"with a colon."
+msgstr "コロンã§"ã‚ãªãŸã¯ã€‚ãƒãƒ¼ãƒˆç¯„囲ãŒseperatingã§è¡¨ã™ã“ã¨ãŒã§ãã‚‹ã“ã¨ã‚’願ã†ã¨åŒæ•°ã®ãƒãƒ¼ãƒˆã‚’入力ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/firewall_aliases_edit.php:472
+#: usr/local/www/firewall_aliases_edit.php:494
+#: usr/local/www/firewall_aliases_edit.php:480
+#, php-format
+msgid ""
+"Enter as many URLs as you wish. After saving %s will download the URL and "
+"import the items into the alias. Use only with small sets of IP addresses "
+"(less than 3000)."
+msgstr "「ã‚ãªãŸãŒæœ›ã‚€é™ã‚Šå¤šãã®URLを入力ã—ã¦ãã ã•ã„。ä¿å­˜ã—ãŸå¾Œ%sã™ã‚‹URLをダウンロードã—〠「エイリアスã«ã‚¢ã‚¤ãƒ†ãƒ ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ IPアドレスã®å°ã•ãªã‚»ãƒƒãƒˆã€ ( 3000未満)ã§ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_aliases_edit.php:468
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:473
+#: usr/local/www/firewall_aliases_edit.php:495
+#: usr/local/www/firewall_aliases_edit.php:481
+#, php-format
+msgid ""
+"Enter a single URL containing a large number of IPs and/or Subnets. After "
+"saving %s will download the URL and create a table file containing these "
+"addresses. This will work with large numbers of addresses (30,000+) or small "
+"numbers."
+msgstr "%sã‚’ä¿å­˜ã™ã‚‹ã¨ã€URLをダウンロードã—ã€ã“れらをå«ã‚€ãƒ†ãƒ¼ãƒ–ルファイルãŒä½œæˆã•ã‚Œã¾ã™"ã®å¾Œã«IPアドレスã€ãŠã‚ˆã³/ã¾ãŸã¯ã‚µãƒ–ãƒãƒƒãƒˆã®å¤šæ•°ã‚’å«ã‚€å˜ä¸€ã®URLを入力ã—ã¦ãã ã•ã„。""アドレスã¯ã€ã“ã‚Œã¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤šæ•°ã®ï¼ˆ30,000 )ã§ä½œæ¥­ã—ãŸã‚Šã€å°ã•ãªã§ã—ょã†ã€æ•°å­—。"
+
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:607
+#: usr/local/www/firewall_aliases_edit.php:474
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:476
+#: usr/local/www/firewall_aliases_edit.php:615
+#: usr/local/www/firewall_aliases_edit.php:498
+#: usr/local/www/firewall_aliases_edit.php:646
+#: usr/local/www/firewall_aliases_edit.php:484
+#: usr/local/www/firewall_aliases_edit.php:632
+msgid "OpenVPN Users"
+msgstr "OpenVPNã®ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+
+#: usr/local/www/firewall_aliases_edit.php:472
+#: usr/local/www/firewall_aliases_edit.php:475
+#: usr/local/www/firewall_aliases_edit.php:477
+#: usr/local/www/firewall_aliases_edit.php:499
+#: usr/local/www/firewall_aliases_edit.php:485
+msgid "Enter as many usernames as you wish."
+msgstr "ã‚ãªãŸãŒæœ›ã‚€é™ã‚Šå¤šãã®ãƒ¦ãƒ¼ã‚¶åを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_aliases_edit.php:573
+#: usr/local/www/firewall_aliases_edit.php:578
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:598
+msgid "Alias Edit"
+msgstr "エイリアスを編集"
+
+#: usr/local/www/firewall_aliases_edit.php:620
+#: usr/local/www/firewall_aliases_edit.php:625
+#: usr/local/www/firewall_aliases_edit.php:628
+#: usr/local/www/firewall_aliases_edit.php:659
+#: usr/local/www/firewall_aliases_edit.php:645
+msgid "Item information"
+msgstr "アイテム情報"
+
+#: usr/local/www/firewall_aliases_edit.php:665
+#: usr/local/www/services_dnsmasq_edit.php:260
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/firewall_aliases_edit.php:670
+#: usr/local/www/services_dnsmasq_edit.php:261
+#: usr/local/www/services_router_advertisements.php:343
+#: usr/local/www/firewall_aliases_edit.php:673
+#: usr/local/www/system_certmanager.php:807
+#: usr/local/www/services_router_advertisements.php:338
+#: usr/local/www/system_certmanager.php:808
+#: usr/local/www/firewall_aliases_edit.php:704
+#: usr/local/www/services_router_advertisements.php:338
+#: usr/local/www/system_certmanager.php:808
+#: usr/local/www/firewall_aliases_edit.php:690
+#: usr/local/www/services_dnsmasq_edit.php:261
+msgid "remove this entry"
+msgstr "ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/fbegin.inc:129
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/diag_backup.php:188
+#: usr/local/www/firewall_nat_1to1_edit.php:221 usr/local/www/fbegin.inc:129
+#: usr/local/www/firewall_nat_out_edit.php:329
+msgid "NAT"
+msgstr "NAT"
+
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1.php:93
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182
+#: usr/local/www/firewall_nat_npt.php:93
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317
+#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317
+#: usr/local/www/firewall_nat_npt.php:93
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1.php:93
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+msgid "1:1"
+msgstr "åˆå‰1時01分"
+
+#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175
+#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180
+#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat.php:183
+#: usr/local/www/firewall_nat_npt.php:87
+#: usr/local/www/firewall_nat_1to1.php:87
+msgid "The NAT configuration has been changed"
+msgstr "NAT設定ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/firewall_nat_1to1.php:92
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160
+#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92
+#: usr/local/www/firewall_nat_out.php:309
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165
+#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_nat_out.php:317
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316
+#: usr/local/www/firewall_nat_npt.php:92
+#: usr/local/www/firewall_nat_1to1.php:92
+msgid "Port Forward"
+msgstr "ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰"
+
+#: usr/local/www/firewall_nat_1to1.php:94
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_nat_out.php:319
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat_npt.php:94
+#: usr/local/www/firewall_nat_1to1.php:94
+#: usr/local/www/firewall_nat_out_edit.php:329
+msgid "Outbound"
+msgstr "外国行ãã®"
+
+#: usr/local/www/firewall_nat_1to1.php:95
+#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184
+#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319
+#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319
+#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95
+#: usr/local/www/firewall_nat_1to1.php:95
+#: usr/local/www/firewall_nat_npt_edit.php:144
+msgid "NPt"
+msgstr "NPT"
+
+#: usr/local/www/firewall_nat_1to1.php:105
+#: usr/local/www/firewall_nat_1to1.php:105
+msgid "External IP"
+msgstr "外部IP"
+
+#: usr/local/www/firewall_nat_1to1.php:106
+#: usr/local/www/firewall_nat_1to1_edit.php:328
+#: usr/local/www/status_upnp.php:87
+#: usr/local/www/firewall_nat_1to1_edit.php:335
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/status_upnp.php:88
+#: usr/local/www/firewall_nat_1to1_edit.php:334
+#: usr/local/www/firewall_nat_1to1.php:106
+#: usr/local/www/firewall_nat_1to1_edit.php:334
+#: usr/local/www/status_upnp.php:88
+msgid "Internal IP"
+msgstr "内部IP"
+
+#: usr/local/www/firewall_nat_1to1.php:107
+#: usr/local/www/firewall_nat_1to1.php:107
+msgid "Destination IP"
+msgstr "宛先IP"
+
+#: usr/local/www/firewall_nat_1to1.php:113
+#: usr/local/www/firewall_nat_1to1.php:172
+#: usr/local/www/firewall_nat_npt.php:112
+#: usr/local/www/firewall_nat_npt.php:170
+#: usr/local/www/firewall_nat_npt.php:112
+#: usr/local/www/firewall_nat_npt.php:170
+#: usr/local/www/firewall_nat_1to1.php:113
+#: usr/local/www/firewall_nat_1to1.php:172
+msgid "add rule"
+msgstr "ルールを追加"
+
+#: usr/local/www/firewall_nat_1to1.php:159
+#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465
+#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776
+#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157
+#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459
+#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773
+#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423
+#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480
+#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_rules.php:422
+#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479
+#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat.php:326
+#: usr/local/www/firewall_rules.php:422 usr/local/www/firewall_rules.php:451
+#: usr/local/www/firewall_rules.php:479 usr/local/www/firewall_rules.php:766
+#: usr/local/www/firewall_nat_npt.php:157
+#: usr/local/www/firewall_nat_1to1.php:159
+msgid "edit rule"
+msgstr "編集è¦å‰‡"
+
+#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165
+#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189
+#: usr/local/www/services_dhcpv6.php:883 usr/local/www/services_dhcp.php:1209
+#: usr/local/www/services_dhcp.php:1209 usr/local/www/services_dhcpv6.php:883
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/firewall_nat_1to1.php:160
+msgid "Do you really want to delete this mapping?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒžãƒƒãƒ”ングを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/firewall_nat_1to1.php:160
+#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326
+#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_rules.php:769
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/firewall_nat_1to1.php:160
+msgid "delete rule"
+msgstr "ルールを削除ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_1to1.php:180
+#: usr/local/www/firewall_nat_1to1.php:180
+msgid "Depending on the way your WAN connection is setup, you may also need a"
+msgstr "ã‚ãªãŸã®WAN接続ãŒã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã•ã‚Œã¦ã„る方法ã«å¿œã˜ã¦ã€ã¾ãŸå¿…è¦ãªå ´åˆãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/firewall_nat_1to1.php:180
+#: usr/local/www/firewall_nat_1to1.php:180
+msgid "Virtual IP."
+msgstr "仮想IP 。"
+
+#: usr/local/www/firewall_nat_1to1.php:181
+#: usr/local/www/firewall_nat_1to1.php:181
+msgid ""
+"If you add a 1:1 NAT entry for any of the interface IPs on this system, it "
+"will make this system inaccessible on that IP address. i.e. if you use your "
+"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) "
+"using the WAN IP address will no longer function."
+msgstr "「ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹IPã®ã„ãšã‚Œã‹ã®1:1ã®NATエントリを追加ã™ã‚‹å ´åˆã¯ã€ 「ãã®IPアドレスã«ã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚ãªãŸã®ä½¿ç”¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ WAN IPアドレスをã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ï¼ˆ IPsecã®ã€ OpenVPNã®ã‚µãƒ¼ãƒãªã©ï¼‰ä¸Šã®ä»»æ„ã®ã‚µãƒ¼ãƒ“ス「WAN IPアドレスを使用ã—ã¦æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:109
+#: usr/local/www/firewall_nat_out_edit.php:125
+#: usr/local/www/firewall_nat_out_edit.php:129
+#: usr/local/www/firewall_nat_out_edit.php:135
+#: usr/local/www/firewall_nat_1to1_edit.php:109
+#: usr/local/www/firewall_nat_out_edit.php:135
+#, php-format
+msgid ""
+"Invalid characters detected (%s). Please remove invalid characters and save "
+"again."
+msgstr "「無効ãªæ–‡å­—ãŒï¼ˆ %s )を検出ã—ã¾ã—ãŸã€‚無効ãªæ–‡å­—を削除ã—ã¦ãã ã•ã„ã—ã¦ä¿å­˜ã€ã‚’å†ã³ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+msgid "External subnet"
+msgstr "外部サブãƒãƒƒãƒˆ"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+msgid "Source address"
+msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:121
+#: usr/local/www/firewall_nat_edit.php:194
+#: usr/local/www/firewall_nat_edit.php:199
+#: usr/local/www/firewall_nat_edit.php:204
+#: usr/local/www/firewall_nat_edit.php:204
+#: usr/local/www/firewall_nat_1to1_edit.php:121
+msgid "Destination address"
+msgstr "宛先アドレス"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:145
+#: usr/local/www/firewall_nat_1to1_edit.php:152
+#: usr/local/www/firewall_nat_1to1_edit.php:152
+msgid "A valid external subnet must be specified."
+msgstr "有効ãªå¤–部ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:149
+#: usr/local/www/firewall_nat_edit.php:232
+#: usr/local/www/firewall_rules_edit.php:356
+#: usr/local/www/firewall_rules_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:156
+#: usr/local/www/firewall_rules_edit.php:385
+#: usr/local/www/firewall_rules_edit.php:389
+#: usr/local/www/firewall_nat_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:384
+#: usr/local/www/firewall_rules_edit.php:388
+#: usr/local/www/firewall_rules_edit.php:387
+#: usr/local/www/firewall_rules_edit.php:391
+#: usr/local/www/firewall_nat_edit.php:244
+#: usr/local/www/firewall_rules_edit.php:393
+#: usr/local/www/firewall_rules_edit.php:397
+#: usr/local/www/firewall_nat_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:393
+#: usr/local/www/firewall_rules_edit.php:397
+#: usr/local/www/firewall_nat_edit.php:249
+#: usr/local/www/firewall_nat_1to1_edit.php:156
+msgid "You must specify single host or alias for alias entries."
+msgstr "エイリアスエントリã®å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:154
+#: usr/local/www/firewall_nat_1to1_edit.php:161
+#: usr/local/www/firewall_nat_1to1_edit.php:161
+#, php-format
+msgid "%s is not a valid internal IP address."
+msgstr "%sã¯ã€æœ‰åŠ¹ãªå†…部IPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:157
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+msgid "A valid internal bit count must be specified."
+msgstr "有効ãªå†…部ビット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+#: usr/local/www/firewall_nat_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:373
+#: usr/local/www/firewall_nat_1to1_edit.php:171
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:252
+#: usr/local/www/firewall_rules_edit.php:401
+#: usr/local/www/firewall_rules_edit.php:404
+#: usr/local/www/firewall_nat_edit.php:257
+#: usr/local/www/firewall_rules_edit.php:410
+#: usr/local/www/firewall_nat_edit.php:262
+#: usr/local/www/firewall_rules_edit.php:410
+#: usr/local/www/firewall_nat_edit.php:262
+#: usr/local/www/firewall_nat_1to1_edit.php:171
+#, php-format
+msgid "%s is not a valid destination IP address or alias."
+msgstr "%sã¯æœ‰åŠ¹ãªå®›å…ˆIPアドレスã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:167
+#: usr/local/www/firewall_nat_edit.php:248
+#: usr/local/www/firewall_nat_out_edit.php:159
+#: usr/local/www/firewall_rules_edit.php:376
+#: usr/local/www/firewall_nat_1to1_edit.php:174
+#: usr/local/www/firewall_nat_out_edit.php:172
+#: usr/local/www/firewall_rules_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:255
+#: usr/local/www/firewall_rules_edit.php:404
+#: usr/local/www/firewall_rules_edit.php:407
+#: usr/local/www/firewall_nat_edit.php:260
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:265
+#: usr/local/www/firewall_nat_out_edit.php:182
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:265
+#: usr/local/www/firewall_nat_1to1_edit.php:174
+#: usr/local/www/firewall_nat_out_edit.php:182
+msgid "A valid destination bit count must be specified."
+msgstr "有効ãªå®›å…ˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:270
+#: usr/local/www/firewall_nat_1to1_edit.php:277
+#: usr/local/www/firewall_nat_1to1_edit.php:275
+#: usr/local/www/firewall_nat_1to1_edit.php:275
+msgid "Edit NAT 1:1 entry"
+msgstr "編集NATã®åˆå‰1時01分エントリー"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:273
+#: usr/local/www/firewall_nat_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828
+#: usr/local/www/interfaces_ppps_edit.php:603
+#: usr/local/www/system_usermanager.php:469
+#: usr/local/www/system_usermanager.php:789
+#: usr/local/www/vpn_ipsec_phase1.php:512
+#: usr/local/www/vpn_ipsec_phase2.php:393
+#: usr/local/www/vpn_openvpn_client.php:386
+#: usr/local/www/vpn_openvpn_client.php:860
+#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672
+#: usr/local/www/vpn_openvpn_server.php:604
+#: usr/local/www/vpn_openvpn_server.php:1448
+#: usr/local/www/firewall_nat_npt_edit.php:159
+#: usr/local/www/system_routes_edit.php:299
+#: usr/local/www/firewall_nat_1to1_edit.php:280
+#: usr/local/www/firewall_nat_npt_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:712
+#: usr/local/www/system_usermanager.php:467
+#: usr/local/www/system_usermanager.php:787
+#: usr/local/www/vpn_openvpn_server.php:677
+#: usr/local/www/vpn_openvpn_server.php:1590
+#: usr/local/www/vpn_ipsec_phase2.php:419
+#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006
+#: usr/local/www/vpn_openvpn_client.php:391
+#: usr/local/www/vpn_openvpn_client.php:865
+#: usr/local/www/system_routes_edit.php:300
+#: usr/local/www/firewall_nat_1to1_edit.php:278
+#: usr/local/www/firewall_nat_npt_edit.php:163
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/interfaces_ppps_edit.php:604
+#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671
+#: usr/local/www/vpn_openvpn_server.php:695
+#: usr/local/www/vpn_openvpn_server.php:1631
+#: usr/local/www/vpn_ipsec_phase2.php:485
+#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994
+#: usr/local/www/vpn_openvpn_client.php:399
+#: usr/local/www/vpn_openvpn_client.php:918
+#: usr/local/www/vpn_ipsec_phase1.php:511
+#: usr/local/www/vpn_openvpn_client.php:417
+#: usr/local/www/vpn_openvpn_client.php:937
+#: usr/local/www/firewall_rules_edit.php:715
+#: usr/local/www/interfaces_ppps_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:461
+#: usr/local/www/vpn_ipsec_phase1.php:532
+#: usr/local/www/vpn_openvpn_server.php:721
+#: usr/local/www/vpn_openvpn_server.php:1683
+#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/firewall_nat_edit.php:473
+#: usr/local/www/system_routes_edit.php:323 usr/local/www/interfaces.php:2067
+#: etc/inc/service-utils.inc:437 usr/local/www/interfaces_ppps_edit.php:608
+#: usr/local/www/firewall_nat_edit.php:474
+#: usr/local/www/system_routes_edit.php:332
+#: usr/local/www/firewall_nat_npt_edit.php:161
+#: usr/local/www/interfaces.php:2056 etc/inc/service-utils.inc:440
+#: usr/local/www/vpn_openvpn_client.php:417
+#: usr/local/www/vpn_openvpn_client.php:937
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/interfaces_ppps_edit.php:608
+#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671
+#: usr/local/www/firewall_nat_edit.php:474
+#: usr/local/www/system_routes_edit.php:326
+#: usr/local/www/firewall_nat_npt_edit.php:161
+#: usr/local/www/firewall_nat_1to1_edit.php:278
+#: usr/local/www/vpn_ipsec_phase1.php:532
+#: usr/local/www/system_usermanager.php:467
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/vpn_openvpn_server.php:721
+#: usr/local/www/vpn_openvpn_server.php:1683
+#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2056
+#: etc/inc/service-utils.inc:440
+msgid "Disabled"
+msgstr "使用ç¦æ­¢"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:276
+#: usr/local/www/firewall_nat_edit.php:463
+#: usr/local/www/firewall_rules_edit.php:682
+#: usr/local/www/firewall_nat_npt_edit.php:162
+#: usr/local/www/firewall_nat_1to1_edit.php:283
+#: usr/local/www/firewall_nat_npt_edit.php:167
+#: usr/local/www/firewall_rules_edit.php:715
+#: usr/local/www/firewall_nat_edit.php:470
+#: usr/local/www/firewall_nat_1to1_edit.php:281
+#: usr/local/www/firewall_nat_npt_edit.php:166
+#: usr/local/www/firewall_nat_edit.php:469
+#: usr/local/www/firewall_rules_edit.php:718
+#: usr/local/www/firewall_nat_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:730
+#: usr/local/www/firewall_nat_edit.php:476
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_npt_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:730
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_npt_edit.php:164
+#: usr/local/www/firewall_nat_1to1_edit.php:281
+msgid "Disable this rule"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:277
+#: usr/local/www/firewall_nat_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:683
+#: usr/local/www/firewall_nat_npt_edit.php:163
+#: usr/local/www/firewall_nat_1to1_edit.php:284
+#: usr/local/www/firewall_nat_npt_edit.php:168
+#: usr/local/www/firewall_rules_edit.php:716
+#: usr/local/www/firewall_nat_edit.php:471
+#: usr/local/www/firewall_nat_1to1_edit.php:282
+#: usr/local/www/firewall_nat_npt_edit.php:167
+#: usr/local/www/firewall_nat_edit.php:470
+#: usr/local/www/firewall_rules_edit.php:719
+#: usr/local/www/firewall_nat_edit.php:465
+#: usr/local/www/firewall_rules_edit.php:731
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_npt_edit.php:165
+#: usr/local/www/firewall_rules_edit.php:731
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_npt_edit.php:165
+#: usr/local/www/firewall_nat_1to1_edit.php:282
+msgid "Set this option to disable this rule without removing it from the list."
+msgstr "リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:315
+#: usr/local/www/firewall_nat_npt_edit.php:202
+#: usr/local/www/firewall_nat_1to1_edit.php:322
+#: usr/local/www/firewall_nat_npt_edit.php:207
+#: usr/local/www/firewall_nat_1to1_edit.php:320
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_npt_edit.php:205
+#: usr/local/www/firewall_nat_1to1_edit.php:321
+#: usr/local/www/firewall_nat_npt_edit.php:205
+#: usr/local/www/firewall_nat_1to1_edit.php:321
+msgid "Choose which interface this rule applies to"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:316
+#: usr/local/www/firewall_nat_npt_edit.php:203
+#: usr/local/www/firewall_nat_1to1_edit.php:323
+#: usr/local/www/firewall_nat_npt_edit.php:208
+#: usr/local/www/firewall_nat_1to1_edit.php:321
+#: usr/local/www/firewall_nat_npt_edit.php:207
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_1to1_edit.php:322
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_1to1_edit.php:322
+msgid "Hint: in most cases, you'll want to use WAN here"
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã“ã§ã€WANを使用ã—ãŸã„ã¨æ€ã†"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:319
+#: usr/local/www/firewall_nat_1to1_edit.php:326
+#: usr/local/www/firewall_nat_1to1_edit.php:324
+#: usr/local/www/firewall_nat_1to1_edit.php:325
+#: usr/local/www/firewall_nat_1to1_edit.php:325
+msgid "External subnet IP"
+msgstr "外部サブãƒãƒƒãƒˆIP"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:323
+#: usr/local/www/firewall_nat_1to1_edit.php:330
+#: usr/local/www/firewall_nat_1to1_edit.php:328
+#: usr/local/www/firewall_nat_1to1_edit.php:329
+#: usr/local/www/firewall_nat_1to1_edit.php:329
+msgid ""
+"Enter the external (usually on a WAN) subnet's starting address for the 1:1 "
+"mapping. The subnet mask from the internal address below will be applied to "
+"this IP address."
+msgstr "マッピング「1:1ã®ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ˆé€šå¸¸ã¯WAN上)外部を入力ã—ã¦ãã ã•ã„ "。以下ã«å†…部アドレスã‹ã‚‰ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®IPアドレス "ã«é©ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:324
+#: usr/local/www/firewall_nat_1to1_edit.php:331
+#: usr/local/www/firewall_nat_1to1_edit.php:329
+#: usr/local/www/firewall_nat_1to1_edit.php:330
+#: usr/local/www/firewall_nat_1to1_edit.php:330
+msgid ""
+"Hint: this is generally an address owned by the router itself on the "
+"selected interface."
+msgstr ""ヒント:ã“ã‚Œã¯ä¸€èˆ¬çš„ã«ãƒ«ãƒ¼ã‚¿è‡ªèº«ãŒæ‰€æœ‰ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚る「é¸æŠžã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:331
+#: usr/local/www/firewall_nat_1to1_edit.php:386
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_rules_edit.php:858
+#: usr/local/www/firewall_rules_edit.php:951
+#: usr/local/www/firewall_nat_npt_edit.php:209
+#: usr/local/www/firewall_nat_npt_edit.php:237
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_npt_edit.php:214
+#: usr/local/www/firewall_nat_npt_edit.php:242
+#: usr/local/www/firewall_nat_out_edit.php:514
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_rules_edit.php:986
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_1to1_edit.php:336
+#: usr/local/www/firewall_nat_1to1_edit.php:391
+#: usr/local/www/firewall_nat_npt_edit.php:213
+#: usr/local/www/firewall_nat_npt_edit.php:241
+#: usr/local/www/firewall_nat_edit.php:544
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:896
+#: usr/local/www/firewall_rules_edit.php:995
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:628
+#: usr/local/www/firewall_nat_out_edit.php:518
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:1008
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_nat_out_edit.php:530
+#: usr/local/www/firewall_rules_edit.php:907
+#: usr/local/www/firewall_rules_edit.php:1007
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_nat_npt_edit.php:212
+#: usr/local/www/firewall_nat_npt_edit.php:240
+#: usr/local/www/firewall_nat_1to1_edit.php:337
+#: usr/local/www/firewall_nat_1to1_edit.php:392
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:907
+#: usr/local/www/firewall_rules_edit.php:1007
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_nat_npt_edit.php:212
+#: usr/local/www/firewall_nat_npt_edit.php:240
+#: usr/local/www/firewall_nat_1to1_edit.php:337
+#: usr/local/www/firewall_nat_1to1_edit.php:392
+#: usr/local/www/firewall_nat_out_edit.php:531
+msgid "not"
+msgstr "ã—ãªã„"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/firewall_nat_1to1_edit.php:388
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/firewall_nat_edit.php:629
+#: usr/local/www/firewall_nat_out_edit.php:502
+#: usr/local/www/firewall_rules_edit.php:860
+#: usr/local/www/firewall_rules_edit.php:953
+#: usr/local/www/firewall_nat_npt_edit.php:211
+#: usr/local/www/firewall_nat_npt_edit.php:239
+#: usr/local/www/firewall_nat_1to1_edit.php:340
+#: usr/local/www/firewall_nat_1to1_edit.php:395
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_rules_edit.php:895
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:547
+#: usr/local/www/firewall_nat_edit.php:636
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_npt_edit.php:215
+#: usr/local/www/firewall_nat_npt_edit.php:243
+#: usr/local/www/firewall_nat_edit.php:546
+#: usr/local/www/firewall_nat_edit.php:635
+#: usr/local/www/firewall_rules_edit.php:898
+#: usr/local/www/firewall_rules_edit.php:997
+#: usr/local/www/firewall_nat_edit.php:541
+#: usr/local/www/firewall_nat_edit.php:630
+#: usr/local/www/firewall_nat_out_edit.php:519
+#: usr/local/www/firewall_rules_edit.php:910
+#: usr/local/www/firewall_rules_edit.php:1010
+#: usr/local/www/firewall_nat_edit.php:553
+#: usr/local/www/firewall_nat_edit.php:642
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:909
+#: usr/local/www/firewall_rules_edit.php:1009
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_nat_npt_edit.php:214
+#: usr/local/www/firewall_nat_npt_edit.php:242
+#: usr/local/www/firewall_nat_1to1_edit.php:339
+#: usr/local/www/firewall_nat_1to1_edit.php:394
+#: usr/local/www/firewall_nat_out_edit.php:532
+#: usr/local/www/firewall_rules_edit.php:909
+#: usr/local/www/firewall_rules_edit.php:1009
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_nat_npt_edit.php:214
+#: usr/local/www/firewall_nat_npt_edit.php:242
+#: usr/local/www/firewall_nat_1to1_edit.php:339
+#: usr/local/www/firewall_nat_1to1_edit.php:394
+#: usr/local/www/firewall_nat_out_edit.php:532
+msgid "Use this option to invert the sense of the match."
+msgstr "マッãƒã®æ„味をå転ã•ã›ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを使用ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+#: usr/local/www/firewall_nat_1to1_edit.php:398
+#: usr/local/www/firewall_nat_edit.php:550
+#: usr/local/www/firewall_nat_edit.php:597
+#: usr/local/www/firewall_nat_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_out_edit.php:475
+#: usr/local/www/firewall_nat_out_edit.php:509
+#: usr/local/www/firewall_nat_out_edit.php:569
+#: usr/local/www/firewall_rules.php:128
+#: usr/local/www/firewall_rules_edit.php:827
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules_edit.php:921
+#: usr/local/www/firewall_rules_edit.php:934
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1013
+#: usr/local/www/firewall_rules_edit.php:1026
+#: usr/local/www/firewall_rules_edit.php:1090
+#: usr/local/www/services_captiveportal_ip.php:175
+#: usr/local/www/services_captiveportal_ip.php:182
+#: usr/local/www/services_captiveportal_hostname.php:176
+#: usr/local/www/services_captiveportal_hostname.php:183
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_nat_out_edit.php:488
+#: usr/local/www/firewall_nat_out_edit.php:522
+#: usr/local/www/firewall_nat_out_edit.php:582
+#: usr/local/www/firewall_rules_edit.php:862
+#: usr/local/www/firewall_rules_edit.php:905
+#: usr/local/www/firewall_rules_edit.php:956
+#: usr/local/www/firewall_rules_edit.php:969
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:998
+#: usr/local/www/firewall_rules_edit.php:1048
+#: usr/local/www/firewall_rules_edit.php:1061
+#: usr/local/www/firewall_rules_edit.php:1125
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:604
+#: usr/local/www/firewall_nat_edit.php:617
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_nat_1to1_edit.php:348
+#: usr/local/www/firewall_nat_1to1_edit.php:403
+#: usr/local/www/services_captiveportal_ip.php:173
+#: usr/local/www/services_captiveportal_ip.php:180
+#: usr/local/www/services_captiveportal_hostname.php:174
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/firewall_rules.php:126
+#: usr/local/www/firewall_nat_edit.php:556
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:645
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/firewall_rules_edit.php:978
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1007
+#: usr/local/www/firewall_rules_edit.php:1063
+#: usr/local/www/firewall_rules_edit.php:1076
+#: usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:598
+#: usr/local/www/firewall_nat_edit.php:611
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:526
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:991
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1020
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1153
+#: usr/local/www/firewall_nat_edit.php:563
+#: usr/local/www/firewall_nat_edit.php:623
+#: usr/local/www/firewall_nat_edit.php:652
+#: usr/local/www/firewall_nat_out_edit.php:504
+#: usr/local/www/firewall_nat_out_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:919
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1019
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:624
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_1to1_edit.php:349
+#: usr/local/www/firewall_nat_1to1_edit.php:404
+#: usr/local/www/firewall_nat_out_edit.php:539
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:919
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1019
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/services_captiveportal_ip.php:173
+#: usr/local/www/services_captiveportal_ip.php:180
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:611
+#: usr/local/www/firewall_nat_edit.php:624
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/services_captiveportal_hostname.php:174
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/firewall_rules.php:126
+#: usr/local/www/firewall_nat_1to1_edit.php:349
+#: usr/local/www/firewall_nat_1to1_edit.php:404
+#: usr/local/www/firewall_nat_out_edit.php:504
+#: usr/local/www/firewall_nat_out_edit.php:539
+msgid "any"
+msgstr "ä»»æ„ã®"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:344
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:349
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+msgid "Single host"
+msgstr "å˜ä¸€å®¿ä¸»"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:347
+#: usr/local/www/firewall_nat_1to1_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules_edit.php:967
+#: usr/local/www/firewall_nat_1to1_edit.php:354
+#: usr/local/www/firewall_nat_1to1_edit.php:409
+#: usr/local/www/firewall_rules_edit.php:909
+#: usr/local/www/firewall_rules_edit.php:1002
+#: usr/local/www/firewall_nat_edit.php:561
+#: usr/local/www/firewall_nat_edit.php:650
+#: usr/local/www/firewall_nat_1to1_edit.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:407
+#: usr/local/www/firewall_nat_edit.php:560
+#: usr/local/www/firewall_nat_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:918
+#: usr/local/www/firewall_rules_edit.php:1017
+#: usr/local/www/firewall_nat_edit.php:555
+#: usr/local/www/firewall_nat_edit.php:644
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1030
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:929
+#: usr/local/www/firewall_rules_edit.php:1029
+#: usr/local/www/firewall_nat_edit.php:568
+#: usr/local/www/firewall_nat_edit.php:657
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:408
+#: usr/local/www/firewall_rules_edit.php:929
+#: usr/local/www/firewall_rules_edit.php:1029
+#: usr/local/www/firewall_nat_edit.php:568
+#: usr/local/www/firewall_nat_edit.php:657
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:408
+msgid "PPTP clients"
+msgstr "PPTPクライアント"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:970
+#: usr/local/www/firewall_nat_1to1_edit.php:357
+#: usr/local/www/firewall_nat_1to1_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:912
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_1to1_edit.php:355
+#: usr/local/www/firewall_nat_1to1_edit.php:410
+#: usr/local/www/firewall_nat_edit.php:563
+#: usr/local/www/firewall_nat_edit.php:652
+#: usr/local/www/firewall_rules_edit.php:921
+#: usr/local/www/firewall_rules_edit.php:1020
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_rules_edit.php:933
+#: usr/local/www/firewall_rules_edit.php:1033
+#: usr/local/www/firewall_nat_edit.php:570
+#: usr/local/www/firewall_nat_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:932
+#: usr/local/www/firewall_rules_edit.php:1032
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_nat_1to1_edit.php:356
+#: usr/local/www/firewall_nat_1to1_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:932
+#: usr/local/www/firewall_rules_edit.php:1032
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_nat_1to1_edit.php:356
+#: usr/local/www/firewall_nat_1to1_edit.php:411
+msgid "PPPoE clients"
+msgstr "PPPoEクライアント"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:408
+#: usr/local/www/firewall_nat_edit.php:560
+#: usr/local/www/firewall_nat_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:973
+#: usr/local/www/firewall_nat_1to1_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:415
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1008
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:924
+#: usr/local/www/firewall_rules_edit.php:1023
+#: usr/local/www/firewall_nat_edit.php:561
+#: usr/local/www/firewall_nat_edit.php:650
+#: usr/local/www/firewall_rules_edit.php:936
+#: usr/local/www/firewall_rules_edit.php:1036
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:662
+#: usr/local/www/firewall_rules_edit.php:935
+#: usr/local/www/firewall_rules_edit.php:1035
+#: usr/local/www/firewall_nat_edit.php:574
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_nat_1to1_edit.php:359
+#: usr/local/www/firewall_nat_1to1_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:935
+#: usr/local/www/firewall_rules_edit.php:1035
+#: usr/local/www/firewall_nat_edit.php:574
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_nat_1to1_edit.php:359
+#: usr/local/www/firewall_nat_1to1_edit.php:414
+msgid "L2TP clients"
+msgstr "L2TPクライアント"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_rules_edit.php:978
+#: usr/local/www/firewall_nat_1to1_edit.php:365
+#: usr/local/www/firewall_nat_1to1_edit.php:420
+#: usr/local/www/firewall_rules_edit.php:1013
+#: usr/local/www/firewall_nat_edit.php:572
+#: usr/local/www/firewall_nat_edit.php:661
+#: usr/local/www/firewall_nat_1to1_edit.php:363
+#: usr/local/www/firewall_nat_1to1_edit.php:418
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_rules_edit.php:1028
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:1041
+#: usr/local/www/firewall_nat_edit.php:578
+#: usr/local/www/firewall_nat_edit.php:667
+#: usr/local/www/firewall_rules_edit.php:1040
+#: usr/local/www/firewall_nat_edit.php:579
+#: usr/local/www/firewall_nat_edit.php:668
+#: usr/local/www/firewall_nat_1to1_edit.php:364
+#: usr/local/www/firewall_nat_1to1_edit.php:419
+#: usr/local/www/firewall_rules_edit.php:1040
+#: usr/local/www/firewall_nat_edit.php:579
+#: usr/local/www/firewall_nat_edit.php:668
+#: usr/local/www/firewall_nat_1to1_edit.php:364
+#: usr/local/www/firewall_nat_1to1_edit.php:419
+msgid "subnet"
+msgstr "サブãƒãƒƒãƒˆ"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:415
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:980
+#: usr/local/www/firewall_nat_1to1_edit.php:367
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_rules_edit.php:922
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:574
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_nat_1to1_edit.php:365
+#: usr/local/www/firewall_nat_1to1_edit.php:420
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:662
+#: usr/local/www/firewall_rules_edit.php:931
+#: usr/local/www/firewall_rules_edit.php:1030
+#: usr/local/www/firewall_nat_edit.php:568
+#: usr/local/www/firewall_nat_edit.php:657
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:1043
+#: usr/local/www/firewall_nat_edit.php:580
+#: usr/local/www/firewall_nat_edit.php:669
+#: usr/local/www/firewall_rules_edit.php:942
+#: usr/local/www/firewall_rules_edit.php:1042
+#: usr/local/www/firewall_nat_edit.php:581
+#: usr/local/www/firewall_nat_edit.php:670
+#: usr/local/www/firewall_nat_1to1_edit.php:366
+#: usr/local/www/firewall_nat_1to1_edit.php:421
+#: usr/local/www/firewall_rules_edit.php:942
+#: usr/local/www/firewall_rules_edit.php:1042
+#: usr/local/www/firewall_nat_edit.php:581
+#: usr/local/www/firewall_nat_edit.php:670
+#: usr/local/www/firewall_nat_1to1_edit.php:366
+#: usr/local/www/firewall_nat_1to1_edit.php:421
+msgid "address"
+msgstr "アドレス"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:379
+#: usr/local/www/firewall_nat_1to1_edit.php:386
+#: usr/local/www/firewall_nat_1to1_edit.php:384
+#: usr/local/www/firewall_nat_1to1_edit.php:385
+#: usr/local/www/firewall_nat_1to1_edit.php:385
+msgid ""
+"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size "
+"specified for the internal subnet will be applied to the external subnet."
+msgstr "「 1対1ã®ãƒžãƒƒãƒ”ングã®ãŸã‚ã«ã€å†…部( LAN)ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’入力ã—ã¾ã™ã€‚サブãƒãƒƒãƒˆã‚µã‚¤ã‚ºã€Œå†…部サブãƒãƒƒãƒˆã«æŒ‡å®šã•ã‚Œã€å¤–部ã®ã‚µãƒ–ãƒãƒƒãƒˆã«é©ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:399
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_nat_1to1_edit.php:406
+#: usr/local/www/firewall_rules_edit.php:906
+#: usr/local/www/firewall_rules_edit.php:999
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_nat_1to1_edit.php:404
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_rules_edit.php:927
+#: usr/local/www/firewall_rules_edit.php:1027
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_rules_edit.php:926
+#: usr/local/www/firewall_rules_edit.php:1026
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_rules_edit.php:926
+#: usr/local/www/firewall_rules_edit.php:1026
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+msgid "Single host or alias"
+msgstr "å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:436
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+#: usr/local/www/firewall_nat_1to1_edit.php:441
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+msgid ""
+"The 1:1 mapping will only be used for connections to or from the specified "
+"destination."
+msgstr "目的地「 1対1ã®ãƒžãƒƒãƒ”ングã¯ã€æŒ‡å®šã™ã‚‹ã‹ã€ã‹ã‚‰ã®æŽ¥ç¶šã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:437
+#: usr/local/www/firewall_nat_1to1_edit.php:444
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+msgid "Hint: this is usually 'any'."
+msgstr "ヒント:ã“ã‚Œã¯é€šå¸¸ã€ 「任æ„ã®ã€ã§ã‚る。"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:447
+#: usr/local/www/firewall_nat_edit.php:783
+#: usr/local/www/firewall_nat_1to1_edit.php:454
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/firewall_nat_1to1_edit.php:452
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_edit.php:784
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_edit.php:797
+#: usr/local/www/firewall_nat_edit.php:797
+#: usr/local/www/firewall_nat_1to1_edit.php:454
+msgid "NAT reflection"
+msgstr "NATã®åå°„"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:450
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/firewall_nat_1to1_edit.php:457
+#: usr/local/www/firewall_nat_1to1_edit.php:455
+#: usr/local/www/firewall_nat_1to1_edit.php:457
+msgid "use system default"
+msgstr "システムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’使用"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:451
+#: usr/local/www/firewall_nat_edit.php:787
+#: usr/local/www/firewall_nat_1to1_edit.php:458
+#: usr/local/www/firewall_nat_1to1_edit.php:456
+#: usr/local/www/firewall_nat_1to1_edit.php:458
+msgid "enable"
+msgstr "有効ã«ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:452
+#: usr/local/www/firewall_nat_edit.php:788
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_1to1_edit.php:457
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+msgid "disable"
+msgstr "無効ã«ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_edit.php:109
+#: usr/local/www/firewall_nat_edit.php:114
+#: usr/local/www/firewall_nat_edit.php:119
+#: usr/local/www/firewall_nat_edit.php:119
+#, php-format
+msgid ""
+"Invalid characters detected %s. Please remove invalid characters and save "
+"again."
+msgstr "å†ã³"無効ãªæ–‡å­—ãŒ%s.ã«ç„¡åŠ¹ãªæ–‡å­—を削除ã—ã¦ä¿å­˜ã—ã¦ãã ã•ã„検出ã•ã‚ŒãŸã€Œ 。"
+
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:192
+msgid "Destination port from"
+msgstr "ã‹ã‚‰ã®å®›å…ˆãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:192
+msgid "Destination port to"
+msgstr "宛先ãƒãƒ¼ãƒˆã«"
+
+#: usr/local/www/firewall_nat_edit.php:198
+#: usr/local/www/firewall_nat_edit.php:740
+#: usr/local/www/firewall_nat_edit.php:747
+#: usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:203
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:208
+#: usr/local/www/firewall_nat_edit.php:753
+#: usr/local/www/firewall_nat_edit.php:754
+#: usr/local/www/firewall_nat_edit.php:208
+#: usr/local/www/firewall_nat_edit.php:754
+msgid "Redirect target IP"
+msgstr "ターゲットIPã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ"
+
+#: usr/local/www/firewall_nat_edit.php:213
+#: usr/local/www/firewall_nat_edit.php:220
+#: usr/local/www/firewall_nat_edit.php:225
+#: usr/local/www/firewall_nat_edit.php:230
+#: usr/local/www/firewall_nat_edit.php:230
+#, php-format
+msgid ""%s" is not a valid redirect target IP address or host alias."
+msgstr "「 %s "ã¯æœ‰åŠ¹ãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_edit.php:217
+#: usr/local/www/firewall_rules_edit.php:325
+#: usr/local/www/firewall_rules_edit.php:349
+#: usr/local/www/firewall_nat_edit.php:224
+#: usr/local/www/firewall_rules_edit.php:348
+#: usr/local/www/firewall_rules_edit.php:351
+#: usr/local/www/firewall_nat_edit.php:229
+#: usr/local/www/firewall_rules_edit.php:357
+#: usr/local/www/firewall_nat_edit.php:234
+#: usr/local/www/firewall_rules_edit.php:357
+#: usr/local/www/firewall_nat_edit.php:234
+#, php-format
+msgid ""
+"%s is not a valid start source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªé–‹å§‹é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_nat_edit.php:219
+#: usr/local/www/firewall_nat_edit.php:226
+#: usr/local/www/firewall_nat_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:236
+#: usr/local/www/firewall_nat_edit.php:236
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªçµ‚了ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_nat_edit.php:221
+#: usr/local/www/firewall_rules_edit.php:329
+#: usr/local/www/firewall_rules_edit.php:353
+#: usr/local/www/firewall_nat_edit.php:228
+#: usr/local/www/firewall_rules_edit.php:352
+#: usr/local/www/firewall_rules_edit.php:355
+#: usr/local/www/firewall_nat_edit.php:233
+#: usr/local/www/firewall_rules_edit.php:361
+#: usr/local/www/firewall_nat_edit.php:238
+#: usr/local/www/firewall_rules_edit.php:361
+#: usr/local/www/firewall_nat_edit.php:238
+#, php-format
+msgid ""
+"%s is not a valid start destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªé–‹å§‹å®›å…ˆãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_nat_edit.php:223
+#: usr/local/www/firewall_rules_edit.php:331
+#: usr/local/www/firewall_rules_edit.php:355
+#: usr/local/www/firewall_nat_edit.php:230
+#: usr/local/www/firewall_rules_edit.php:354
+#: usr/local/www/firewall_rules_edit.php:357
+#: usr/local/www/firewall_nat_edit.php:235
+#: usr/local/www/firewall_rules_edit.php:363
+#: usr/local/www/firewall_nat_edit.php:240
+#: usr/local/www/firewall_rules_edit.php:363
+#: usr/local/www/firewall_nat_edit.php:240
+#, php-format
+msgid ""
+"%s is not a valid end destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªã‚¨ãƒ³ãƒ‰å®›å…ˆãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_nat_edit.php:226
+#, php-format
+msgid ""
+"%s is not a valid local port. It must be a port alias or integer between 1 "
+"and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ 1é–“ã®ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€ã¨65535 。"
+
+#: usr/local/www/firewall_nat_edit.php:237
+#: usr/local/www/firewall_rules_edit.php:365
+#: usr/local/www/firewall_rules_edit.php:394
+#: usr/local/www/firewall_nat_edit.php:244
+#: usr/local/www/firewall_rules_edit.php:393
+#: usr/local/www/firewall_rules_edit.php:396
+#: usr/local/www/firewall_nat_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:254
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:254
+#, php-format
+msgid "%s is not a valid source IP address or alias."
+msgstr "%sã¯ã€æœ‰åŠ¹ãªé€ä¿¡å…ƒIPアドレスã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_edit.php:240
+#: usr/local/www/firewall_nat_out_edit.php:151
+#: usr/local/www/firewall_rules_edit.php:368
+#: usr/local/www/firewall_nat_out_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:397
+#: usr/local/www/firewall_nat_edit.php:247
+#: usr/local/www/firewall_rules_edit.php:396
+#: usr/local/www/firewall_rules_edit.php:399
+#: usr/local/www/firewall_nat_edit.php:252
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_rules_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:257
+#: usr/local/www/firewall_nat_out_edit.php:174
+#: usr/local/www/firewall_rules_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:257
+#: usr/local/www/firewall_nat_out_edit.php:174
+msgid "A valid source bit count must be specified."
+msgstr "有効ãªã‚½ãƒ¼ã‚¹ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:267
+#: usr/local/www/firewall_nat_edit.php:274
+#: usr/local/www/firewall_nat_edit.php:279
+#: usr/local/www/firewall_nat_edit.php:284
+#: usr/local/www/firewall_nat_edit.php:284
+msgid "The target port range must be an integer between 1 and 65535."
+msgstr "ターゲットãƒãƒ¼ãƒˆã®ç¯„囲ã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_edit.php:288
+#: usr/local/www/firewall_nat_edit.php:295
+#: usr/local/www/firewall_nat_edit.php:300
+#: usr/local/www/firewall_nat_edit.php:305
+#: usr/local/www/firewall_nat_edit.php:305
+msgid "The destination port range overlaps with an existing entry."
+msgstr "宛先ãƒãƒ¼ãƒˆã®ç¯„囲ã¯ã€æ—¢å­˜ã®ã‚¨ãƒ³ãƒˆãƒªã¨é‡è¤‡ã™ã‚‹ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:453
+#: usr/local/www/firewall_nat_edit.php:460
+#: usr/local/www/firewall_nat_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:454
+#: usr/local/www/firewall_nat_edit.php:466
+#: usr/local/www/firewall_nat_edit.php:467
+#: usr/local/www/firewall_nat_edit.php:467
+msgid "Edit Redirect entry"
+msgstr "編集リダイレクトエントリー"
+
+#: usr/local/www/firewall_nat_edit.php:468
+#: usr/local/www/firewall_nat_edit.php:475
+#: usr/local/www/firewall_nat_edit.php:474
+#: usr/local/www/firewall_nat_edit.php:469
+#: usr/local/www/firewall_nat_edit.php:481
+#: usr/local/www/firewall_nat_edit.php:482
+#: usr/local/www/firewall_nat_edit.php:482
+msgid "No RDR (NOT)"
+msgstr "ノーRDR (NOT )"
+
+#: usr/local/www/firewall_nat_edit.php:471
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_edit.php:472
+#: usr/local/www/firewall_nat_edit.php:484
+#: usr/local/www/firewall_nat_edit.php:485
+#: usr/local/www/firewall_nat_edit.php:485
+msgid ""
+"Enabling this option will disable redirection for traffic matching this rule."
+msgstr ""ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:472
+#: usr/local/www/firewall_nat_edit.php:479
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_edit.php:473
+#: usr/local/www/firewall_nat_edit.php:485
+#: usr/local/www/firewall_nat_edit.php:486
+#: usr/local/www/firewall_nat_edit.php:486
+msgid ""
+"Hint: this option is rarely needed, don't use this unless you know what "
+"you're doing."
+msgstr "ã‚ãªãŸãŒã‚„ã£ã¦ã„る: "ヒントã‚ãªãŸãŒçŸ¥ã£ã¦ã„ã‚‹é™ã‚Šã€ã“ã®ã‚ªãƒ—ションã¯ã»ã¨ã‚“ã©å¿…è¦ã‚ã‚Šã¾ã›ã‚“ã€ã“れを使用ã—ãªã„ã§ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_nat_edit.php:514
+#: usr/local/www/firewall_nat_out_edit.php:452
+#: usr/local/www/firewall_nat_out_edit.php:465
+#: usr/local/www/firewall_nat_edit.php:521
+#: usr/local/www/firewall_nat_edit.php:520
+#: usr/local/www/firewall_nat_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_nat_edit.php:528
+#: usr/local/www/firewall_nat_edit.php:528
+#: usr/local/www/firewall_nat_out_edit.php:481
+msgid "Choose which interface this rule applies to."
+msgstr "é¸æŠžã—ã¦ã„るインターフェイスã€ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:453
+#: usr/local/www/firewall_nat_out_edit.php:466
+#: usr/local/www/firewall_nat_edit.php:522
+#: usr/local/www/firewall_nat_edit.php:521
+#: usr/local/www/firewall_nat_edit.php:516
+#: usr/local/www/firewall_nat_out_edit.php:470
+#: usr/local/www/firewall_nat_edit.php:528
+#: usr/local/www/firewall_nat_out_edit.php:482
+#: usr/local/www/firewall_nat_edit.php:529
+#: usr/local/www/firewall_nat_edit.php:529
+#: usr/local/www/firewall_nat_out_edit.php:482
+msgid "Hint: in most cases, you'll want to use WAN here."
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã§ã€WANを使ã†ã“ã¨ã«ãªã‚‹ã§ã—ょã†ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:524
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_nat_edit.php:530
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_nat_edit.php:525
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:538
+msgid "Choose which IP protocol this rule should match."
+msgstr "é¸æŠžã—ã¦ã„ã‚‹IPプロトコルã“ã®è¦å‰‡ã¯ã€ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/firewall_nat_edit.php:540
+msgid "Hint: in most cases, you should specify"
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€æ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Š"
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+msgid "TCP"
+msgstr "TCP"
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/diag_ipsec_sad.php:136
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/diag_ipsec_spd.php:145
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_sad.php:136
+msgid "here."
+msgstr "ã“ã“ã«ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:544
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_nat_edit.php:545
+msgid "Show source address and port range"
+msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ãŠã‚ˆã³ãƒãƒ¼ãƒˆç¯„囲を表示ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_edit.php:589
+#: usr/local/www/firewall_rules_edit.php:913
+#: usr/local/www/firewall_rules_edit.php:948
+#: usr/local/www/firewall_nat_edit.php:596
+#: usr/local/www/firewall_nat_edit.php:595
+#: usr/local/www/firewall_rules_edit.php:957
+#: usr/local/www/firewall_nat_edit.php:590
+#: usr/local/www/firewall_rules_edit.php:970
+#: usr/local/www/firewall_nat_edit.php:602
+#: usr/local/www/firewall_rules_edit.php:969
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_rules_edit.php:969
+#: usr/local/www/firewall_nat_edit.php:603
+msgid "Source port range"
+msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆç¯„囲"
+
+#: usr/local/www/firewall_nat_edit.php:593
+#: usr/local/www/firewall_nat_edit.php:705
+#: usr/local/www/firewall_rules_edit.php:917
+#: usr/local/www/firewall_rules_edit.php:1009
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_nat_edit.php:600
+#: usr/local/www/firewall_nat_edit.php:712
+#: usr/local/www/firewall_nat_edit.php:599
+#: usr/local/www/firewall_nat_edit.php:711
+#: usr/local/www/firewall_rules_edit.php:961
+#: usr/local/www/firewall_rules_edit.php:1059
+#: usr/local/www/firewall_nat_edit.php:594
+#: usr/local/www/firewall_nat_edit.php:706
+#: usr/local/www/firewall_rules_edit.php:974
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_nat_edit.php:606
+#: usr/local/www/firewall_nat_edit.php:718
+#: usr/local/www/firewall_rules_edit.php:973
+#: usr/local/www/firewall_rules_edit.php:1071
+#: usr/local/www/firewall_nat_edit.php:607
+#: usr/local/www/firewall_nat_edit.php:719
+#: usr/local/www/firewall_rules_edit.php:973
+#: usr/local/www/firewall_rules_edit.php:1071
+#: usr/local/www/firewall_nat_edit.php:607
+#: usr/local/www/firewall_nat_edit.php:719
+msgid "from:"
+msgstr "ã‹ã‚‰ï¼š"
+
+#: usr/local/www/firewall_nat_edit.php:596
+#: usr/local/www/firewall_nat_edit.php:609
+#: usr/local/www/firewall_nat_edit.php:708
+#: usr/local/www/firewall_nat_edit.php:721
+#: usr/local/www/firewall_nat_edit.php:751
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:933
+#: usr/local/www/firewall_rules_edit.php:1012
+#: usr/local/www/firewall_rules_edit.php:1025
+#: usr/local/www/firewall_rules_edit.php:955
+#: usr/local/www/firewall_rules_edit.php:968
+#: usr/local/www/firewall_rules_edit.php:1047
+#: usr/local/www/firewall_rules_edit.php:1060
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:715
+#: usr/local/www/firewall_nat_edit.php:728
+#: usr/local/www/firewall_nat_edit.php:758
+#: usr/local/www/firewall_nat_edit.php:602
+#: usr/local/www/firewall_nat_edit.php:615
+#: usr/local/www/firewall_nat_edit.php:714
+#: usr/local/www/firewall_nat_edit.php:727
+#: usr/local/www/firewall_nat_edit.php:757
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:1062
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_nat_edit.php:597
+#: usr/local/www/firewall_nat_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:709
+#: usr/local/www/firewall_nat_edit.php:722
+#: usr/local/www/firewall_nat_edit.php:752
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/firewall_nat_edit.php:622
+#: usr/local/www/firewall_nat_edit.php:734
+#: usr/local/www/firewall_nat_edit.php:764
+#: usr/local/www/firewall_rules_edit.php:976
+#: usr/local/www/firewall_rules_edit.php:989
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:1087
+#: usr/local/www/firewall_nat_edit.php:623
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_nat_edit.php:765
+#: usr/local/www/firewall_rules_edit.php:976
+#: usr/local/www/firewall_rules_edit.php:989
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:1087
+#: usr/local/www/firewall_nat_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:623
+#: usr/local/www/firewall_nat_edit.php:722
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_nat_edit.php:765
+msgid "other"
+msgstr "ãã®ä»–"
+
+#: usr/local/www/firewall_nat_edit.php:606
+#: usr/local/www/firewall_nat_edit.php:718
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1022
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/firewall_nat_edit.php:613
+#: usr/local/www/firewall_nat_edit.php:725
+#: usr/local/www/firewall_nat_edit.php:612
+#: usr/local/www/firewall_nat_edit.php:724
+#: usr/local/www/firewall_rules_edit.php:974
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_nat_edit.php:607
+#: usr/local/www/firewall_nat_edit.php:719
+#: usr/local/www/firewall_rules_edit.php:987
+#: usr/local/www/firewall_rules_edit.php:1085
+#: usr/local/www/firewall_nat_edit.php:619
+#: usr/local/www/firewall_nat_edit.php:731
+#: usr/local/www/firewall_rules_edit.php:986
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:732
+#: usr/local/www/firewall_rules_edit.php:986
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:732
+msgid "to:"
+msgstr "ã¸ï¼š"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "Specify the source port or port range for this rule"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "This is usually"
+msgstr "ã“ã‚Œã¯é€šå¸¸"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "random"
+msgstr "ランダム"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:634
+msgid ""
+"and almost never equal to the destination port range (and should usually be "
+"'any')"
+msgstr ""( 「任æ„ã®ã€ã¨å®›å…ˆãƒãƒ¼ãƒˆç¯„囲ã¨ã»ã¼ç­‰ã—ããªã‚‹ã“ã¨ã¯ã€é€šå¸¸ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠)"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749
+msgid "Hint: you can leave the"
+msgstr "ヒント:ã‚ãªãŸãŒæ®‹ã™ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "field empty if you only want to filter a single port."
+msgstr "フィールドã«ã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’フィルタリングã™ã‚‹å ´åˆã¯ã€ç©ºã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:701
+#: usr/local/www/firewall_nat_edit.php:708
+#: usr/local/www/firewall_nat_edit.php:707
+#: usr/local/www/firewall_nat_edit.php:702
+#: usr/local/www/firewall_nat_edit.php:714
+#: usr/local/www/firewall_nat_edit.php:715
+#: usr/local/www/firewall_nat_edit.php:715
+msgid "Destination port range"
+msgstr "宛先ãƒãƒ¼ãƒˆç¯„囲"
+
+#: usr/local/www/firewall_nat_edit.php:733
+#: usr/local/www/firewall_nat_edit.php:740
+#: usr/local/www/firewall_nat_edit.php:739
+#: usr/local/www/firewall_nat_edit.php:734
+#: usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:747
+#: usr/local/www/firewall_nat_edit.php:747
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"mapping."
+msgstr "マッピング"ã“ã®ãŸã‚ã€ãƒ‘ケットã®é€ä¿¡å…ˆã®ãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:736
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_nat_edit.php:749
+msgid "field empty if you only want to map a single port"
+msgstr "フィールドã®ç©ºã®ã‚ãªãŸã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’マップã™ã‚‹å ´åˆ"
+
+#: usr/local/www/firewall_nat_edit.php:743
+#: usr/local/www/firewall_nat_edit.php:750
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_nat_edit.php:744
+#: usr/local/www/firewall_nat_edit.php:756
+#: usr/local/www/firewall_nat_edit.php:757
+#: usr/local/www/firewall_nat_edit.php:757
+msgid ""
+"Enter the internal IP address of the server on which you want to map the "
+"ports."
+msgstr "ãƒãƒ¼ãƒˆã€ã‚’ã€ãƒžãƒƒãƒ—ã«ã—ãŸã„サーãƒãƒ¼ã®å†…部IPアドレスを入力ã—ã¦ãã ã•ã„ "。"
+
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/firewall_nat_edit.php:754
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_nat_edit.php:761
+#: usr/local/www/firewall_nat_edit.php:762
+#: usr/local/www/firewall_nat_edit.php:762
+msgid "Redirect target port"
+msgstr "ターゲットãƒãƒ¼ãƒˆã‚’リダイレクト"
+
+#: usr/local/www/firewall_nat_edit.php:762
+#: usr/local/www/firewall_nat_edit.php:769
+#: usr/local/www/firewall_nat_edit.php:768
+#: usr/local/www/firewall_nat_edit.php:763
+#: usr/local/www/firewall_nat_edit.php:775
+#: usr/local/www/firewall_nat_edit.php:776
+#: usr/local/www/firewall_nat_edit.php:776
+msgid ""
+"Specify the port on the machine with the IP address entered above. In case "
+"of a port range, specify the beginning port of the range (the end port will "
+"be calculated automatically)."
+msgstr ""上ã§å…¥åŠ›ã—ãŸIPアドレスをæŒã¤ãƒžã‚·ãƒ³ã®ãƒãƒ¼ãƒˆã‚’指定ã—ã¾ã™ã€‚å ´åˆã¯ã€ã€Œãƒãƒ¼ãƒˆç¯„囲ã®ã€ (エンド·ãƒãƒ¼ãƒˆãŒã€Œè‡ªå‹•çš„ã«è¨ˆç®—ã•ã‚Œã¾ã™ï¼‰ç¯„囲ã®é–‹å§‹ãƒãƒ¼ãƒˆã‚’指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_edit.php:766
+#: usr/local/www/firewall_nat_edit.php:773
+#: usr/local/www/firewall_nat_edit.php:772
+#: usr/local/www/firewall_nat_edit.php:767
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/firewall_nat_edit.php:780
+#: usr/local/www/firewall_nat_edit.php:780
+msgid "Hint: this is usually identical to the 'from' port above"
+msgstr "ヒント:ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆ'ã‹ã‚‰'上ã€é€šå¸¸ã¨åŒã˜ã§ã™"
+
+#: usr/local/www/firewall_nat_edit.php:776
+#: usr/local/www/firewall_nat_out_edit.php:629
+#: usr/local/www/firewall_rules_edit.php:1238
+#: usr/local/www/firewall_nat_out_edit.php:642
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_nat_edit.php:783
+#: usr/local/www/firewall_nat_edit.php:782
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_nat_edit.php:777
+#: usr/local/www/firewall_nat_out_edit.php:644
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_out_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:1294
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/firewall_rules_edit.php:1294
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/firewall_nat_out_edit.php:656
+msgid "No XMLRPC Sync"
+msgstr "ã„ã„ãˆXMLRPCåŒæœŸã—ãªã„"
+
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/firewall_nat_edit.php:785
+msgid ""
+"HINT: This prevents the rule from automatically syncing to other CARP members"
+msgstr ""ヒント:ã“ã‚Œã¯è‡ªå‹•çš„ã«ä»–ã®CARPã®ãƒ¡ãƒ³ãƒãƒ¼ã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãŽ"
+
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:825
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/firewall_nat_edit.php:833
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/firewall_nat_edit.php:832
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_edit.php:827
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/firewall_nat_edit.php:839
+#: usr/local/www/firewall_nat_edit.php:809
+#: usr/local/www/firewall_nat_edit.php:840
+#: usr/local/www/firewall_nat_edit.php:809
+#: usr/local/www/firewall_nat_edit.php:840
+msgid "Filter rule association"
+msgstr "フィルタ·ルールã®é–¢é€£ä»˜ã‘"
+
+#: usr/local/www/firewall_nat_edit.php:798
+#: usr/local/www/firewall_nat_edit.php:831
+#: usr/local/www/firewall_nat_edit.php:806
+#: usr/local/www/firewall_nat_edit.php:839
+#: usr/local/www/firewall_nat_edit.php:805
+#: usr/local/www/firewall_nat_edit.php:838
+#: usr/local/www/firewall_nat_edit.php:800
+#: usr/local/www/firewall_nat_edit.php:833
+#: usr/local/www/firewall_nat_edit.php:812
+#: usr/local/www/firewall_nat_edit.php:845
+#: usr/local/www/firewall_nat_edit.php:813
+#: usr/local/www/firewall_nat_edit.php:846
+#: usr/local/www/firewall_nat_edit.php:813
+#: usr/local/www/firewall_nat_edit.php:846
+msgid "Pass"
+msgstr "パス"
+
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/firewall_nat_edit.php:816
+#: usr/local/www/firewall_nat_edit.php:815
+#: usr/local/www/firewall_nat_edit.php:810
+#: usr/local/www/firewall_nat_edit.php:822
+#: usr/local/www/firewall_nat_edit.php:823
+#: usr/local/www/firewall_nat_edit.php:823
+msgid "View the filter rule"
+msgstr "フィルタルールを表示ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_edit.php:816
+#: usr/local/www/firewall_nat_edit.php:824
+#: usr/local/www/firewall_nat_edit.php:823
+#: usr/local/www/firewall_nat_edit.php:818
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/firewall_nat_edit.php:831
+#: usr/local/www/firewall_nat_edit.php:831
+msgid "Create new associated filter rule"
+msgstr "æ–°ã—ã„関連ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹"
+
+#: usr/local/www/firewall_nat_edit.php:829
+#: usr/local/www/firewall_nat_edit.php:837
+#: usr/local/www/firewall_nat_edit.php:836
+#: usr/local/www/firewall_nat_edit.php:831
+#: usr/local/www/firewall_nat_edit.php:843
+#: usr/local/www/firewall_nat_edit.php:844
+#: usr/local/www/firewall_nat_edit.php:844
+msgid "Add associated filter rule"
+msgstr "関連ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ã‚’追加"
+
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/firewall_nat_edit.php:838
+#: usr/local/www/firewall_nat_edit.php:837
+#: usr/local/www/firewall_nat_edit.php:832
+#: usr/local/www/firewall_nat_edit.php:844
+#: usr/local/www/firewall_nat_edit.php:845
+#: usr/local/www/firewall_nat_edit.php:845
+msgid "Add unassociated filter rule"
+msgstr "関連付ã‘られã¦ã„ãªã„フィルタルールを追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out.php:111
+#: usr/local/www/firewall_nat_out.php:112
+#: usr/local/www/firewall_nat_out.php:112
+#, php-format
+msgid "Auto created rule for ISAKMP - %1$s to %2$s"
+msgstr "%2$sã«ã¯%1$s - 自動ISAKMPã®ãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:121
+#: usr/local/www/firewall_nat_out.php:123
+#: usr/local/www/firewall_nat_out.php:123
+#, php-format
+msgid "Auto created rule for %1$s to %2$s"
+msgstr "自動%2$sã«ã¯%1$sã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:131
+#: usr/local/www/firewall_nat_out.php:135
+#: usr/local/www/firewall_nat_out.php:135
+#, php-format
+msgid "Auto created rule for localhost to %1$s"
+msgstr "オートã¯%1$sã«localhostã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:147
+#: usr/local/www/firewall_nat_out.php:148
+#: usr/local/www/firewall_nat_out.php:152
+#: usr/local/www/firewall_nat_out.php:152
+msgid "Auto created rule for PPTP server"
+msgstr "オートã¯ã€PPTPサーãƒãƒ¼ç”¨ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:167
+#: usr/local/www/firewall_nat_out.php:168
+#: usr/local/www/firewall_nat_out.php:173
+#: usr/local/www/firewall_nat_out.php:173
+msgid "Auto created rule for PPPoE server"
+msgstr "自動PPPoEサーãƒã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:187
+#: usr/local/www/firewall_nat_out.php:188
+#: usr/local/www/firewall_nat_out.php:194
+#: usr/local/www/firewall_nat_out.php:194
+msgid "Auto created rule for L2TP server"
+msgstr "オートã¯ã€L2TPサーãƒã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:201
+#: usr/local/www/firewall_nat_out.php:202
+#: usr/local/www/firewall_nat_out.php:209
+#: usr/local/www/firewall_nat_out.php:209
+msgid "Auto created rule for OpenVPN server"
+msgstr "自動OpenVPNã®ã‚µãƒ¼ãƒãƒ¼ç”¨ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ãŸ"
+
+#: usr/local/www/firewall_nat_out.php:212
+#: usr/local/www/firewall_nat_out.php:213
+#: usr/local/www/firewall_nat_out.php:220
+#: usr/local/www/firewall_nat_out.php:220
+msgid "Default rules for each interface have been created."
+msgstr "å„インタフェースã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ«ãƒ¼ãƒ«ãŒä½œæˆã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_out.php:304
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_out.php:311
+msgid "The NAT configuration has been changed."
+msgstr "NAT設定ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out.php:321
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:327
+#: usr/local/www/firewall_nat_out.php:327
+msgid "Mode:"
+msgstr "モード:"
+
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:323
+#: usr/local/www/firewall_nat_out.php:324
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/firewall_nat_out.php:330
+#: usr/local/www/firewall_nat_out.php:330
+msgid "Automatic outbound NAT rule generation"
+msgstr "自動アウトãƒã‚¦ãƒ³ãƒ‰NATルールã®ç”Ÿæˆ"
+
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:323
+#: usr/local/www/firewall_nat_out.php:324
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/firewall_nat_out.php:330
+#: usr/local/www/firewall_nat_out.php:330
+msgid "(IPsec passthrough included)"
+msgstr "( IPsecã®ãƒ‘ススルーã¯å«ã¾ã‚Œã¦ã„ã¾ã™ï¼‰"
+
+#: usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:329
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:335
+#: usr/local/www/firewall_nat_out.php:335
+msgid "Manual Outbound NAT rule generation"
+msgstr "手動ã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールã®ç”Ÿæˆ"
+
+#: usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:329
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:335
+#: usr/local/www/firewall_nat_out.php:335
+msgid "(AON - Advanced Outbound NAT)"
+msgstr "( AON - 高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT)"
+
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:346
+#: usr/local/www/firewall_nat_out.php:347
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_out.php:353
+#: usr/local/www/firewall_nat_out.php:353
+msgid "Mappings:"
+msgstr "マッピング:"
+
+#: usr/local/www/firewall_nat_out.php:343
+#: usr/local/www/firewall_nat_out.php:353
+#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129
+#: usr/local/www/diag_system_pftop.php:160
+#: usr/local/www/diag_logs_filter.php:167
+#: usr/local/www/firewall_nat_out.php:361
+#: usr/local/www/firewall_nat_out.php:360 usr/local/www/diag_testport.php:129
+#: usr/local/www/diag_logs_filter.php:167
+#: usr/local/www/diag_system_pftop.php:160
+#: usr/local/www/firewall_nat_out.php:360
+msgid "Source Port"
+msgstr "ソースãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat_out.php:345
+#: usr/local/www/firewall_nat_out.php:355
+#: usr/local/www/firewall_nat_out.php:356
+#: usr/local/www/diag_system_pftop.php:153
+#: usr/local/www/diag_logs_filter.php:189
+#: usr/local/www/firewall_nat_out.php:363
+#: usr/local/www/firewall_nat_out.php:362
+#: usr/local/www/diag_logs_filter.php:189
+#: usr/local/www/diag_system_pftop.php:153
+#: usr/local/www/firewall_nat_out.php:362
+msgid "Destination Port"
+msgstr "宛先ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat_out.php:346
+#: usr/local/www/firewall_nat_out.php:356
+#: usr/local/www/firewall_nat_out.php:357
+#: usr/local/www/firewall_nat_out.php:364
+#: usr/local/www/firewall_nat_out.php:363
+#: usr/local/www/firewall_nat_out.php:363
+msgid "NAT Address"
+msgstr "NATアドレス"
+
+#: usr/local/www/firewall_nat_out.php:347
+#: usr/local/www/firewall_nat_out.php:357
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_out.php:365
+#: usr/local/www/firewall_nat_out.php:364
+#: usr/local/www/firewall_nat_out.php:364
+msgid "NAT Port"
+msgstr "NATã®ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat_out.php:348
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_nat_out.php:366
+#: usr/local/www/firewall_nat_out.php:365
+#: usr/local/www/firewall_nat_out.php:365
+msgid "Static Port"
+msgstr "é™çš„ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:364
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:365
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:459
+#: usr/local/www/firewall_nat_out.php:372
+#: usr/local/www/firewall_nat_out.php:466
+#: usr/local/www/firewall_nat_out.php:371
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:371
+#: usr/local/www/firewall_nat_out.php:465
+msgid "add new mapping"
+msgstr "æ–°ã—ã„マッピングを追加ã™ã‚‹"
+
+#: usr/local/www/firewall_nat_out.php:425
+#: usr/local/www/firewall_nat_out.php:435
+#: usr/local/www/firewall_nat_out.php:436
+#: usr/local/www/firewall_nat_out.php:433
+#: usr/local/www/firewall_nat_out.php:440
+#: usr/local/www/firewall_nat_out.php:439
+#: usr/local/www/firewall_nat_out.php:439
+msgid "YES"
+msgstr "YES"
+
+#: usr/local/www/firewall_nat_out.php:427
+#: usr/local/www/firewall_nat_out.php:437
+#: usr/local/www/firewall_nat_out.php:438
+#: usr/local/www/firewall_nat_out.php:435
+#: usr/local/www/firewall_nat_out.php:442
+#: usr/local/www/firewall_nat_out.php:441
+#: usr/local/www/firewall_nat_out.php:441
+msgid "NO"
+msgstr "NO"
+
+#: usr/local/www/firewall_nat_out.php:436
+#: usr/local/www/firewall_nat_out.php:447
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:445
+#: usr/local/www/firewall_nat_out.php:452
+#: usr/local/www/firewall_nat_out.php:451
+#: usr/local/www/firewall_nat_out.php:451
+msgid "edit mapping"
+msgstr "編集マッピング"
+
+#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435
+#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492
+#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309
+#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429
+#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486
+#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447
+#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422
+#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479
+#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat_out.php:444
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_rules.php:421
+#: usr/local/www/firewall_rules.php:450 usr/local/www/firewall_rules.php:478
+#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_rules.php:421 usr/local/www/firewall_rules.php:450
+#: usr/local/www/firewall_rules.php:478 usr/local/www/firewall_rules.php:765
+msgid "move selected rules before this rule"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®å‰ã«ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’移動"
+
+#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314
+#: usr/local/www/firewall_nat_out.php:451
+#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327
+#: usr/local/www/firewall_nat_out.php:449
+#: usr/local/www/firewall_nat_out.php:456 usr/local/www/firewall_nat.php:330
+#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:330
+#: usr/local/www/firewall_nat_out.php:455
+msgid "add a new NAT based on this one"
+msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„NATを追加"
+
+#: usr/local/www/firewall_nat_out.php:449
+#: usr/local/www/firewall_nat_out.php:460
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:458
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_nat_out.php:464
+msgid "move selected mappings to end"
+msgstr "終了ã™ã‚‹ã«ã¯ã€é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを移動"
+
+#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391
+#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823
+#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209
+#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332
+#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396
+#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216
+#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347
+#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389
+#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469 usr/local/www/firewall_rules.php:386
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819
+#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_nat.php:217
+#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:348
+#: usr/local/www/firewall_nat.php:350 usr/local/www/firewall_nat_out.php:468
+#: usr/local/www/firewall_nat.php:217 usr/local/www/firewall_nat.php:219
+#: usr/local/www/firewall_nat.php:348 usr/local/www/firewall_nat.php:350
+#: usr/local/www/firewall_nat_out.php:468 usr/local/www/firewall_rules.php:386
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819
+#: usr/local/www/firewall_rules.php:820
+msgid "delete selected rules"
+msgstr "é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’削除"
+
+#: usr/local/www/firewall_nat_out.php:453
+#: usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out.php:468
+#: usr/local/www/firewall_nat_out.php:468
+msgid "delete selected mappings"
+msgstr "é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを削除"
+
+#: usr/local/www/firewall_nat_out.php:453
+#: usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out.php:468
+#: usr/local/www/firewall_nat_out.php:468
+msgid "Do you really want to delete the selected mappings?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«é¸æŠžã—ãŸãƒžãƒƒãƒ”ングを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:472
+#: usr/local/www/firewall_nat_out.php:473
+#: usr/local/www/firewall_nat_out.php:470
+#: usr/local/www/firewall_nat_out.php:477
+#: usr/local/www/firewall_nat_out.php:476
+#: usr/local/www/firewall_nat_out.php:476
+msgid ""
+"With automatic outbound NAT enabled, a mapping is automatically created for "
+"each interface's subnet (except WAN-type connections) and the rules on this "
+"page are ignored.<br /><br /> If manual outbound NAT is enabled, outbound NAT "
+"rules will not be automatically generated and only the mappings you specify "
+"on this page will be used. <br /><br /> If a target address other than a WAN-"
+"type interface's IP address is used, then depending on the way the WAN "
+"connection is setup, a "
+msgstr "「自動アウトãƒã‚¦ãƒ³ãƒ‰ã§ã®NATã¯ã€æœ‰åŠ¹ãªãƒžãƒƒãƒ”ングãŒè‡ªå‹•çš„ã«ã®ãŸã‚ã«ä½œæˆã•ã‚Œã¦ã„る「 (WANåž‹ã®æŽ¥ç¶šã‚’除ã)å„インターフェイスã®ã‚µãƒ–ãƒãƒƒãƒˆã¨ã“ã‚Œã«é–¢ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã¯ãƒ«ãƒ¼ãƒ«ã€ãƒšãƒ¼ã‚¸ã«ã¯ã€æ‰‹å‹•ã®ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT ignored.<br /><br />ã§ã™ã€è‡ªå‹•çš„ã«ç”Ÿæˆã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“ã—ã€æŒ‡å®šã—ãŸãƒžãƒƒãƒ”ングã®ã¿ã€ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€‚ <br /><br />を使用ã™ã‚‹å ´åˆã¯ã€WAN以外ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã‚¿ã‚¤ãƒ—ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®IPアドレスã¯ã€æ¬¡ã«ã‚ˆã†ã«ã€WANã«å¿œã˜ã¦ã€ä½¿ç”¨ã•ã‚Œã¦ã„る「接続セットアップ〠aã¯"
+
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/carp_status.php:139
+#: usr/local/www/system_gateway_groups_edit.php:252
+#: usr/local/www/firewall_nat_out.php:480
+#: usr/local/www/firewall_nat_out_edit.php:601
+#: usr/local/www/system_gateway_groups_edit.php:312
+#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132
+#: usr/local/www/firewall_nat_out.php:478
+#: usr/local/www/firewall_nat_out_edit.php:604
+#: usr/local/www/firewall_nat_out.php:485
+#: usr/local/www/system_gateway_groups_edit.php:316
+#: usr/local/www/firewall_nat_out_edit.php:616
+#: usr/local/www/firewall_nat_out.php:484
+#: usr/local/www/firewall_nat_out.php:484
+#: usr/local/www/system_gateway_groups_edit.php:316
+#: usr/local/www/firewall_nat_out_edit.php:616
+#: usr/local/www/carp_status.php:132
+msgid "Virtual IP"
+msgstr "仮想IP"
+
+#: usr/local/www/firewall_nat_out.php:470
+#: usr/local/www/firewall_nat_out.php:481
+#: usr/local/www/firewall_nat_out.php:482
+#: usr/local/www/firewall_nat_out.php:479
+#: usr/local/www/firewall_nat_out.php:486
+#: usr/local/www/firewall_nat_out.php:485
+#: usr/local/www/firewall_nat_out.php:485
+msgid " may also be required."
+msgstr "ã¾ãŸå¿…è¦ã¨ã•ã‚Œå¾—る。"
+
+#: usr/local/www/firewall_nat_out.php:472
+#: usr/local/www/firewall_nat_out.php:483
+#: usr/local/www/firewall_nat_out.php:484
+#: usr/local/www/firewall_nat_out.php:481
+#: usr/local/www/firewall_nat_out.php:488
+#: usr/local/www/firewall_nat_out.php:487
+#: usr/local/www/firewall_nat_out.php:487
+msgid ""
+"To completely disable outbound NAT, switch to Manual Outbound NAT then "
+"delete any NAT rules that appear in the list."
+msgstr "「完全ã«ç„¡åŠ¹ã«ã™ã‚‹ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATã€æ‰‹å‹•ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒã€ãã®å¾Œã«ã¯ã€Œãƒªã‚¹ãƒˆã«è¡¨ç¤ºã•ã‚Œã‚‹ã™ã¹ã¦ã®NATルールを削除。"
+
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:140
+msgid "Source bit count"
+msgstr "ソースビット数"
+
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_rules_edit.php:310
+#: usr/local/www/firewall_rules_edit.php:334
+#: usr/local/www/firewall_rules_edit.php:333
+#: usr/local/www/firewall_rules_edit.php:336
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_rules_edit.php:342
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_rules_edit.php:342
+#: usr/local/www/firewall_nat_out_edit.php:140
+msgid "Destination bit count"
+msgstr "å…ˆã®ãƒ“ット数"
+
+#: usr/local/www/firewall_nat_out_edit.php:137
+#: usr/local/www/firewall_nat_out_edit.php:150
+#: usr/local/www/firewall_nat_out_edit.php:154
+#: usr/local/www/firewall_nat_out_edit.php:160
+#: usr/local/www/firewall_nat_out_edit.php:160
+msgid ""
+"You must supply either a valid port or port alias for the source port entry."
+msgstr ""ã‚ãªãŸã¯ã€ã‚½ãƒ¼ã‚¹ãƒãƒ¼ãƒˆã®ã‚¨ãƒ³ãƒˆãƒªã®æœ‰åŠ¹ãªãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆã®åˆ¥åã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:153
+#: usr/local/www/firewall_nat_out_edit.php:157
+#: usr/local/www/firewall_nat_out_edit.php:163
+#: usr/local/www/firewall_nat_out_edit.php:163
+msgid ""
+"You must supply either a valid port or port alias for the destination port "
+"entry."
+msgstr "エントリ"ã‚ãªãŸã¯ã€å®›å…ˆãƒãƒ¼ãƒˆã®æœ‰åŠ¹ãªãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆã®åˆ¥åã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_nat_out_edit.php:143
+#: usr/local/www/firewall_nat_out_edit.php:156
+#: usr/local/www/firewall_nat_out_edit.php:160
+#: usr/local/www/firewall_nat_out_edit.php:166
+#: usr/local/www/firewall_nat_out_edit.php:166
+msgid "You must supply a valid port for the NAT port entry."
+msgstr "ã‚ãªãŸã¯ã€NATã®ãƒãƒ¼ãƒˆã‚¨ãƒ³ãƒˆãƒªã®æœ‰åŠ¹ãªãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:147
+#: usr/local/www/firewall_nat_out_edit.php:160
+#: usr/local/www/firewall_nat_out_edit.php:164
+#: usr/local/www/firewall_nat_out_edit.php:170
+#: usr/local/www/firewall_nat_out_edit.php:170
+msgid "A valid source must be specified."
+msgstr "有効ãªã‚½ãƒ¼ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:155
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:172
+#: usr/local/www/firewall_nat_out_edit.php:178
+#: usr/local/www/firewall_nat_out_edit.php:178
+msgid "A valid destination must be specified."
+msgstr "有効ãªå®›å…ˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:163
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_nat_out_edit.php:180
+#: usr/local/www/firewall_nat_out_edit.php:186
+#: usr/local/www/firewall_nat_out_edit.php:186
+msgid "Negating destination address of "any" is invalid."
+msgstr "ã®å¦å®šå®›å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã€Œanyã€ã¯ã€ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:181
+#: usr/local/www/firewall_nat_out_edit.php:185
+#: usr/local/www/firewall_nat_out_edit.php:191
+#: usr/local/www/firewall_nat_out_edit.php:191
+msgid "A valid target IP address must be specified."
+msgstr "有効ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:173
+#: usr/local/www/firewall_nat_out_edit.php:186
+#: usr/local/www/firewall_nat_out_edit.php:190
+#: usr/local/www/firewall_nat_out_edit.php:196
+#: usr/local/www/firewall_nat_out_edit.php:196
+msgid "A valid target IP must be specified when using the 'Other Subnet' type."
+msgstr "「ãã®ä»–サブãƒãƒƒãƒˆã€ã‚¿ã‚¤ãƒ—を使用ã—ã¦ã„ã‚‹å ´åˆã€æœ‰åŠ¹ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆIPを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_nat_out_edit.php:189
+#: usr/local/www/firewall_nat_out_edit.php:193
+#: usr/local/www/firewall_nat_out_edit.php:199
+#: usr/local/www/firewall_nat_out_edit.php:199
+msgid ""
+"A valid target bit count must be specified when using the 'Other Subnet' "
+"type."
+msgstr "タイプ ""ãã®ä»–ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’「使用ã—ã¦ã„ã‚‹å ´åˆã€æœ‰åŠ¹ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_nat_out_edit.php:189
+#: usr/local/www/firewall_nat_out_edit.php:202
+#: usr/local/www/firewall_nat_out_edit.php:206
+#: usr/local/www/firewall_nat_out_edit.php:212
+#: usr/local/www/firewall_nat_out_edit.php:212
+msgid "Only Round Robin pool options may be chosen when selecting an alias."
+msgstr "エイリアスをé¸æŠžã™ã‚‹ã¨ãã«ã®ã¿ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ン·プール·オプションをé¸æŠžã™ã‚‹ã“ã¨ãŒã§ãる。"
+
+#: usr/local/www/firewall_nat_out_edit.php:403
+#: usr/local/www/firewall_nat_out_edit.php:416
+#: usr/local/www/firewall_nat_out_edit.php:420
+#: usr/local/www/firewall_nat_out_edit.php:432
+#: usr/local/www/firewall_nat_out_edit.php:432
+msgid "Edit Advanced Outbound NAT entry"
+msgstr "編集高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰ã®NATエントリ"
+
+#: usr/local/www/firewall_nat_out_edit.php:410
+#: usr/local/www/firewall_nat_out_edit.php:423
+#: usr/local/www/firewall_nat_out_edit.php:427
+#: usr/local/www/firewall_nat_out_edit.php:439
+#: usr/local/www/firewall_nat_out_edit.php:439
+msgid "Do not NAT"
+msgstr "ã—ãªã„ã§ã€NAT"
+
+#: usr/local/www/firewall_nat_out_edit.php:413
+#: usr/local/www/firewall_nat_out_edit.php:426
+#: usr/local/www/firewall_nat_out_edit.php:430
+#: usr/local/www/firewall_nat_out_edit.php:442
+#: usr/local/www/firewall_nat_out_edit.php:442
+msgid ""
+"Enabling this option will disable NAT for traffic matching this rule and "
+"stop processing Outbound NAT rules."
+msgstr ""ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®NATを無効ã«ã—ã¾ã™ã€Œã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールã®å‡¦ç†ã‚’åœæ­¢ã™ã‚‹ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:414
+#: usr/local/www/firewall_nat_out_edit.php:427
+#: usr/local/www/firewall_nat_out_edit.php:431
+#: usr/local/www/firewall_nat_out_edit.php:443
+#: usr/local/www/firewall_nat_out_edit.php:443
+msgid "Hint: in most cases, you won't use this option."
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_out_edit.php:463
+#: usr/local/www/firewall_nat_out_edit.php:476
+#: usr/local/www/firewall_nat_out_edit.php:480
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:492
+msgid "Choose which protocol this rule should match."
+msgstr "é¸æŠžã—ãŸã©ã®ãƒ—ロトコルã“ã®ãƒ«ãƒ¼ãƒ«ãŒä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:464
+#: usr/local/www/firewall_nat_out_edit.php:477
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_nat_out_edit.php:493
+#: usr/local/www/firewall_nat_out_edit.php:493
+#, php-format
+msgid "Hint: in most cases, you should specify %s any %s here."
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã¯ã“ã“ã§ã©ã‚“ãª%s %s指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:488
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:517
+#: usr/local/www/firewall_nat_out_edit.php:519
+#: usr/local/www/firewall_nat_out_edit.php:519
+msgid "Enter the source network for the outbound NAT mapping."
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ã‚½ãƒ¼ã‚¹Â·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_nat_out_edit.php:491
+#: usr/local/www/firewall_nat_out_edit.php:504
+#: usr/local/www/firewall_nat_out_edit.php:508
+#: usr/local/www/firewall_nat_out_edit.php:520
+#: usr/local/www/firewall_nat_out_edit.php:522
+#: usr/local/www/firewall_nat_out_edit.php:522
+msgid "Source port:"
+msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆï¼š"
+
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:509
+#: usr/local/www/firewall_nat_out_edit.php:521
+msgid ""
+"(leave \n"
+"blank for any)"
+msgstr "「 (任æ„ã®ç©ºç™½ã®\nã®ã¾ã¾ã«ã€ )"
+
+#: usr/local/www/firewall_nat_out_edit.php:526
+#: usr/local/www/firewall_nat_out_edit.php:539
+#: usr/local/www/firewall_nat_out_edit.php:543
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_nat_out_edit.php:556
+#: usr/local/www/firewall_nat_out_edit.php:556
+msgid "Enter the destination network for the outbound NAT mapping."
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ãŸã‚ã«å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:530
+#: usr/local/www/firewall_nat_out_edit.php:543
+#: usr/local/www/firewall_nat_out_edit.php:547
+#: usr/local/www/firewall_nat_out_edit.php:559
+#: usr/local/www/firewall_nat_out_edit.php:560
+#: usr/local/www/firewall_nat_out_edit.php:560
+msgid "Destination port:"
+msgstr "宛先ãƒãƒ¼ãƒˆï¼š"
+
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:548
+#: usr/local/www/firewall_nat_out_edit.php:560
+msgid ""
+"(leave blank for \n"
+"any)"
+msgstr "「 (ã„ãšã‚Œã‹ã‚’\nã¯ç©ºç™½ã®ã¾ã¾ã«ã€ )"
+
+#: usr/local/www/firewall_nat_out_edit.php:538
+#: usr/local/www/firewall_nat_out_edit.php:551
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_nat_out_edit.php:567
+#: usr/local/www/firewall_nat_out_edit.php:567
+msgid "Translation"
+msgstr "翻訳"
+
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:557
+#: usr/local/www/firewall_nat_out_edit.php:561
+#: usr/local/www/firewall_nat_out_edit.php:573
+#: usr/local/www/firewall_nat_out_edit.php:573
+msgid "Interface address"
+msgstr "インターフェース·アドレス"
+
+#: usr/local/www/firewall_nat_out_edit.php:568
+#: usr/local/www/firewall_nat_out_edit.php:581
+#: usr/local/www/firewall_nat_out_edit.php:585
+#: usr/local/www/firewall_nat_out_edit.php:597
+#: usr/local/www/firewall_nat_out_edit.php:597
+msgid "Other Subnet (Enter Below)"
+msgstr "ä»–ã®ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆä¸‹è¨˜ã«å…¥åŠ›ï¼‰"
+
+#: usr/local/www/firewall_nat_out_edit.php:575
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/firewall_nat_out_edit.php:591
+#: usr/local/www/firewall_nat_out_edit.php:603
+#: usr/local/www/firewall_nat_out_edit.php:603
+msgid "Other Subnet:"
+msgstr "ãã®ä»–サブãƒãƒƒãƒˆï¼š"
+
+#: usr/local/www/firewall_nat_out_edit.php:586
+#: usr/local/www/firewall_nat_out_edit.php:599
+#: usr/local/www/firewall_nat_out_edit.php:602
+#: usr/local/www/firewall_nat_out_edit.php:614
+#: usr/local/www/firewall_nat_out_edit.php:614
+msgid "Packets matching this rule will be mapped to the IP address given here."
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットã¯ã€ã“ã“ã§æŒ‡å®šã—ãŸIPアドレスã«ãƒžãƒƒãƒ”ングã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:587
+#: usr/local/www/firewall_nat_out_edit.php:600
+#: usr/local/www/firewall_nat_out_edit.php:603
+#: usr/local/www/firewall_nat_out_edit.php:615
+#: usr/local/www/firewall_nat_out_edit.php:615
+msgid ""
+"If you want this rule to apply to another IP address rather than the IP "
+"address of the interface chosen above, select it here (you will need to "
+"define "
+msgstr "上記é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒã€Œã“ã®ãƒ«ãƒ¼ãƒ«ã¯IPã§ã¯ãªã別ã®IPアドレスã«é©ç”¨ã™ã‚‹å ´åˆã¯ã€ã€Œ (ã‚ãªãŸã¯ã€Œå®šç¾©ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ã“ã“ã§ãれをé¸æŠž"
+
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/firewall_nat_out_edit.php:601
+#: usr/local/www/firewall_nat_out_edit.php:604
+#: usr/local/www/firewall_nat_out_edit.php:616
+#: usr/local/www/firewall_nat_out_edit.php:616
+msgid "addresses on the interface first)."
+msgstr "インターフェイス上ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ€åˆï¼‰ 。"
+
+#: usr/local/www/firewall_nat_out_edit.php:589
+#: usr/local/www/firewall_nat_out_edit.php:602
+msgid ""
+"Also note that if you are trying to redirect connections on the LAN select "
+"the "any" option."
+msgstr ""ã™ã¹ã¦ã®"オプション"ã¾ãŸã€ã‚ãªãŸã¯ã€LAN上ã®æŽ¥ç¶šã‚’リダイレクトã—よã†ã¨ã™ã‚‹å ´åˆã«é¸æŠžã—ã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_nat_out_edit.php:605
+#: usr/local/www/firewall_nat_out_edit.php:618
+#: usr/local/www/firewall_nat_out_edit.php:620
+#: usr/local/www/firewall_nat_out_edit.php:632
+#: usr/local/www/firewall_nat_out_edit.php:632
+msgid ""
+"Only Round Robin types work with Host Aliases. Any type can be used with a "
+"Subnet."
+msgstr ""唯一ã®ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ン·タイプã¯ã€ãƒ›ã‚¹ãƒˆåˆ¥åã§å‹•ä½œã—ã¾ã™ã€‚ä»»æ„ã®ã‚¿ã‚¤ãƒ—ã§ä½¿ç”¨ã§ãる「サブãƒãƒƒãƒˆã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:606
+#: usr/local/www/firewall_nat_out_edit.php:619
+#: usr/local/www/firewall_nat_out_edit.php:621
+#: usr/local/www/firewall_nat_out_edit.php:633
+#: usr/local/www/firewall_nat_out_edit.php:633
+msgid "Round Robin: Loops through the translation addresses."
+msgstr "ラウンドロビン:翻訳·アドレスをループã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:607
+#: usr/local/www/firewall_nat_out_edit.php:620
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:634
+#: usr/local/www/firewall_nat_out_edit.php:634
+msgid "Random: Selects an address from the translation address pool at random."
+msgstr "ランダム:ランダムã«å¤‰æ›ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ—ールã‹ã‚‰ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’é¸æŠžã™ã‚‹ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:608
+#: usr/local/www/firewall_nat_out_edit.php:621
+#: usr/local/www/firewall_nat_out_edit.php:623
+#: usr/local/www/firewall_nat_out_edit.php:635
+#: usr/local/www/firewall_nat_out_edit.php:635
+msgid ""
+"Source Hash: Uses a hash of the source address to determine the translation "
+"address, ensuring that the redirection address is always the same for a "
+"given source."
+msgstr "リダイレクションアドレスãŒã€Œä¸Žãˆã‚‰ã‚ŒãŸã‚½ãƒ¼ã‚¹ã®ãŸã‚ã«ã€å¸¸ã«åŒã˜ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã—ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼š 「ソースãƒãƒƒã‚·ãƒ¥ã¯ç¿»è¨³ã‚’決定ã™ã‚‹ãŸã‚ã«ã€é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒãƒƒã‚·ãƒ¥ã‚’使用ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_nat_out_edit.php:609
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:624
+#: usr/local/www/firewall_nat_out_edit.php:636
+#: usr/local/www/firewall_nat_out_edit.php:636
+msgid ""
+"Bitmask: Applies the subnet mask and keeps the last portion identical; "
+"10.0.1.50 -&gt; x.x.x.50."
+msgstr "「ビットマスク:サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’é©ç”¨ã—ã€åŒä¸€ã®æœ€å¾Œã®éƒ¨åˆ†ã‚’ä¿æŒã—〠「 10.0.1.50㯠- u003e xxx50 。"
+
+#: usr/local/www/firewall_nat_out_edit.php:610
+#: usr/local/www/firewall_nat_out_edit.php:623
+#: usr/local/www/firewall_nat_out_edit.php:625
+#: usr/local/www/firewall_nat_out_edit.php:637
+#: usr/local/www/firewall_nat_out_edit.php:637
+msgid ""
+"Sticky Address: The Sticky Address option can be used with the Random and "
+"Round Robin pool types to ensure that a particular source address is always "
+"mapped to the same translation address."
+msgstr "「スティッキーä½æ‰€ï¼šã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚ªãƒ—ションãŒãƒ©ãƒ³ãƒ€ãƒ ã§ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã€ã¨ã¯ã€ç‰¹å®šã®é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¸¸ã«ã€ŒåŒã˜å¤‰æ›ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãƒžãƒƒãƒ—ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã«ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンプールタイプ。"
+
+#: usr/local/www/firewall_nat_out_edit.php:615
+#: usr/local/www/firewall_nat_out_edit.php:628
+#: usr/local/www/firewall_nat_out_edit.php:630
+#: usr/local/www/firewall_nat_out_edit.php:642
+#: usr/local/www/firewall_nat_out_edit.php:642
+msgid "Port:"
+msgstr "ãƒãƒ¼ãƒˆï¼š"
+
+#: usr/local/www/firewall_nat_out_edit.php:619
+#: usr/local/www/firewall_nat_out_edit.php:632
+#: usr/local/www/firewall_nat_out_edit.php:634
+#: usr/local/www/firewall_nat_out_edit.php:646
+#: usr/local/www/firewall_nat_out_edit.php:646
+msgid "Enter the source port for the outbound NAT mapping."
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NATマッピングã®ãŸã‚ã«é€ä¿¡å…ƒãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:635
+#: usr/local/www/firewall_nat_out_edit.php:637
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/firewall_nat_out_edit.php:649
+msgid "Static-port:"
+msgstr "é™çš„ãƒãƒ¼ãƒˆï¼š"
+
+#: usr/local/www/firewall_nat_out_edit.php:632
+#: usr/local/www/firewall_nat_out_edit.php:645
+msgid ""
+"HINT: This prevents the rule from automatically syncing to other CARP "
+"members."
+msgstr ""ヒント:ã“ã‚Œã¯ã€è‡ªå‹•çš„ã«ä»–ã®CARPã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãã€ã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚"
+
+#: usr/local/www/firewall_rules.php:52
+#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112
+#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/firewall_rules.php:49
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/diag_system_pftop.php:139 usr/local/www/fbegin.inc:130
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/diag_system_pftop.php:139 usr/local/www/firewall_rules.php:49
+#: usr/local/www/fbegin.inc:130
+msgid "Rules"
+msgstr "ルール"
+
+#: usr/local/www/firewall_rules.php:129
+#: usr/local/www/firewall_rules_edit.php:828
+#: usr/local/www/firewall_rules_edit.php:863
+#: usr/local/www/firewall_rules.php:127
+#: usr/local/www/firewall_rules_edit.php:866
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules.php:127
+msgid "Echo request"
+msgstr "エコーè¦æ±‚"
+
+#: usr/local/www/firewall_rules.php:130
+#: usr/local/www/firewall_rules_edit.php:829
+#: usr/local/www/firewall_rules_edit.php:864
+#: usr/local/www/firewall_rules.php:128
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules.php:128
+msgid "Echo reply"
+msgstr "エコー応答"
+
+#: usr/local/www/firewall_rules.php:131
+#: usr/local/www/firewall_rules_edit.php:830
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules.php:129
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules.php:129
+msgid "Destination unreachable"
+msgstr "宛先到é”ä¸èƒ½"
+
+#: usr/local/www/firewall_rules.php:132
+#: usr/local/www/firewall_rules_edit.php:831
+#: usr/local/www/firewall_rules_edit.php:866
+#: usr/local/www/firewall_rules.php:130
+#: usr/local/www/firewall_rules_edit.php:869
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules.php:130
+msgid "Source quench"
+msgstr "é€ä¿¡å…ƒæŠ‘制"
+
+#: usr/local/www/firewall_rules.php:133
+#: usr/local/www/firewall_rules_edit.php:832
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules.php:131
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules_edit.php:882
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules.php:131
+msgid "Redirect"
+msgstr "リダイレクト"
+
+#: usr/local/www/firewall_rules.php:134
+#: usr/local/www/firewall_rules_edit.php:833
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules.php:132
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:883
+#: usr/local/www/firewall_rules_edit.php:882
+#: usr/local/www/firewall_rules_edit.php:882
+#: usr/local/www/firewall_rules.php:132
+msgid "Alternate Host"
+msgstr "中間宿主"
+
+#: usr/local/www/firewall_rules.php:135
+#: usr/local/www/firewall_rules_edit.php:834
+#: usr/local/www/firewall_rules_edit.php:869
+#: usr/local/www/firewall_rules.php:133
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:884
+#: usr/local/www/firewall_rules_edit.php:883
+#: usr/local/www/firewall_rules_edit.php:883
+#: usr/local/www/firewall_rules.php:133
+msgid "Router advertisement"
+msgstr "ルーター通知"
+
+#: usr/local/www/firewall_rules.php:136
+#: usr/local/www/firewall_rules_edit.php:835
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules.php:134
+#: usr/local/www/firewall_rules_edit.php:873
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:884
+#: usr/local/www/firewall_rules_edit.php:884
+#: usr/local/www/firewall_rules.php:134
+msgid "Router solicitation"
+msgstr "ルータè¦è«‹"
+
+#: usr/local/www/firewall_rules.php:137
+#: usr/local/www/firewall_rules_edit.php:836
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules.php:135
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules.php:135
+msgid "Time exceeded"
+msgstr "時間超éŽ"
+
+#: usr/local/www/firewall_rules.php:138
+#: usr/local/www/firewall_rules_edit.php:837
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules.php:136
+#: usr/local/www/firewall_rules_edit.php:875
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules.php:136
+msgid "Invalid IP header"
+msgstr "無効ãªIPヘッダー"
+
+#: usr/local/www/firewall_rules.php:139
+#: usr/local/www/firewall_rules_edit.php:838
+#: usr/local/www/firewall_rules_edit.php:873
+#: usr/local/www/firewall_rules.php:137
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:888
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules.php:137
+msgid "Timestamp"
+msgstr "タイムスタンプ"
+
+#: usr/local/www/firewall_rules.php:140
+#: usr/local/www/firewall_rules_edit.php:839
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules.php:138
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:888
+#: usr/local/www/firewall_rules_edit.php:888
+#: usr/local/www/firewall_rules.php:138
+msgid "Timestamp reply"
+msgstr "タイムスタンプ応答"
+
+#: usr/local/www/firewall_rules.php:141
+#: usr/local/www/firewall_rules_edit.php:840
+#: usr/local/www/firewall_rules_edit.php:875
+#: usr/local/www/firewall_rules.php:139
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules.php:139
+msgid "Information request"
+msgstr "情報è¦æ±‚"
+
+#: usr/local/www/firewall_rules.php:142
+#: usr/local/www/firewall_rules_edit.php:841
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules.php:140
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:891
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules.php:140
+msgid "Information reply"
+msgstr "情報応答"
+
+#: usr/local/www/firewall_rules.php:143
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules.php:141
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:892
+#: usr/local/www/firewall_rules_edit.php:891
+#: usr/local/www/firewall_rules_edit.php:891
+#: usr/local/www/firewall_rules.php:141
+msgid "Address mask request"
+msgstr "アドレスマスクè¦æ±‚"
+
+#: usr/local/www/firewall_rules.php:144
+#: usr/local/www/firewall_rules_edit.php:843
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules.php:142
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_rules_edit.php:892
+#: usr/local/www/firewall_rules_edit.php:892
+#: usr/local/www/firewall_rules.php:142
+msgid "Address mask reply"
+msgstr "アドレスマスク応答"
+
+#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205
+#: usr/local/www/firewall_rules.php:203 usr/local/www/firewall_rules.php:203
+#, php-format
+msgid ""
+"The settings have been applied. The firewall rules are now reloading in the "
+"background.<br />You can also %s monitor %s the reload progress"
+msgstr "「設定ãŒé©ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚ファイアウォールã®ãƒ«ãƒ¼ãƒ«ã¯ä»Šã«ãƒªãƒ­ãƒ¼ãƒ‰ã•ã‚Œã‚‹ã€Œ background.<br />Youã“ã¨ã‚‚モニターãŒãƒªãƒ­ãƒ¼ãƒ‰ã®é€²è¡ŒçŠ¶æ³ã‚’%s %sã§ã"
+
+#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317
+#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321
+#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314
+msgid ""
+"The firewall rule configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr "「ファイアウォールルールã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒé©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ãƒã‚¹ã‚¿ãƒ¼ã€Œãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’。"
+
+#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342
+#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:334
+#: usr/local/www/firewall_rules.php:334
+msgid "Floating"
+msgstr "フローティング"
+
+#: usr/local/www/firewall_rules.php:359
+#: usr/local/www/load_balancer_relay_action_edit.php:510
+#: usr/local/www/load_balancer_relay_action_edit.php:509
+#: usr/local/www/firewall_rules.php:363
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/firewall_rules.php:356 usr/local/www/firewall_rules.php:354
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/firewall_rules.php:354
+msgid "ID"
+msgstr "ID"
+
+#: usr/local/www/firewall_rules.php:368
+#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382
+#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91
+#: usr/local/www/system_routes_edit.php:199
+#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73
+#: usr/local/www/system_gateways.php:154
+#: usr/local/www/system_gateways_edit.php:376
+#: usr/local/www/services_dhcpv6.php:599
+#: usr/local/www/system_routes_edit.php:92
+#: usr/local/www/system_routes_edit.php:231
+#: usr/local/www/firewall_rules_edit.php:1355
+#: usr/local/www/firewall_rules.php:372
+#: usr/local/www/system_gateways_edit.php:397
+#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456
+#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486
+#: usr/local/www/system_routes_edit.php:232
+#: usr/local/www/firewall_rules.php:365
+#: usr/local/www/system_gateways_edit.php:503
+#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:1474
+#: usr/local/www/system_gateways_edit.php:506
+#: usr/local/www/firewall_rules_edit.php:1370
+#: usr/local/www/services_dhcp_edit.php:410
+#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131
+#: usr/local/www/services_dhcp.php:858 usr/local/www/interfaces.php:441
+#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487
+#: usr/local/www/system_gateways_edit.php:508
+#: usr/local/www/firewall_rules_edit.php:1377
+#: usr/local/www/services_dhcp.php:878 usr/local/www/system_routes_edit.php:95
+#: usr/local/www/system_routes_edit.php:259
+#: usr/local/www/firewall_rules.php:363 usr/local/www/interfaces.php:446
+#: usr/local/www/interfaces.php:499 usr/local/www/interfaces.php:1532
+#: usr/local/www/system_gateways_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:1388
+#: usr/local/www/system_routes.php:147
+#: usr/local/www/system_routes_edit.php:261 usr/local/www/interfaces.php:442
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526
+#: usr/local/www/system_gateways_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:1388
+#: usr/local/www/services_dhcp_edit.php:410
+#: usr/local/www/system_routes.php:147 usr/local/www/services_dhcp.php:878
+#: usr/local/www/system_routes_edit.php:97
+#: usr/local/www/system_routes_edit.php:255
+#: usr/local/www/firewall_rules.php:363 usr/local/www/system_gateways.php:154
+#: usr/local/www/status_gateways.php:74 usr/local/www/interfaces.php:442
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526
+msgid "Gateway"
+msgstr "ゲートウェイ"
+
+#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135
+#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373
+#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366
+#: usr/local/www/diag_system_pftop.php:138 usr/local/www/status_queues.php:148
+#: usr/local/www/firewall_rules.php:364
+#: usr/local/www/diag_system_pftop.php:138
+#: usr/local/www/firewall_rules.php:364 usr/local/www/status_queues.php:148
+msgid "Queue"
+msgstr "キュー"
+
+#: usr/local/www/firewall_rules.php:370
+#: usr/local/www/firewall_rules_edit.php:1261
+#: usr/local/www/firewall_rules_edit.php:1328
+#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367
+#: usr/local/www/firewall_rules_edit.php:1343
+#: usr/local/www/firewall_rules_edit.php:1350
+#: usr/local/www/firewall_rules.php:365
+#: usr/local/www/firewall_rules_edit.php:1361
+#: usr/local/www/firewall_rules_edit.php:1361
+#: usr/local/www/firewall_rules.php:365
+msgid "Schedule"
+msgstr "スケジュール"
+
+#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824
+#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334
+#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825
+#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347
+#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820
+#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350
+#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820
+msgid "Do you really want to delete the selected rules?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794
+#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398
+#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827
+#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788
+#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:390
+#: usr/local/www/firewall_rules.php:789 usr/local/www/firewall_rules.php:823
+#: usr/local/www/firewall_rules.php:390 usr/local/www/firewall_rules.php:789
+#: usr/local/www/firewall_rules.php:823
+msgid "add new rule"
+msgstr "æ–°ã—ã„ルールを追加"
+
+#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425
+#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:417
+#: usr/local/www/firewall_rules.php:417
+msgid "Anti-Lockout Rule"
+msgstr "アンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆãƒ«ãƒ¼ãƒ«"
+
+#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469
+#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780
+#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463
+#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777
+#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456
+#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770
+#: usr/local/www/firewall_rules.php:426 usr/local/www/firewall_rules.php:455
+#: usr/local/www/firewall_rules.php:483 usr/local/www/firewall_rules.php:426
+#: usr/local/www/firewall_rules.php:455 usr/local/www/firewall_rules.php:483
+#: usr/local/www/firewall_rules.php:770
+msgid "add a new rule based on this one"
+msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„ルールを追加"
+
+#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447
+#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:439
+#: usr/local/www/firewall_rules.php:439
+msgid "RFC 1918 networks"
+msgstr "RFC 1918ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414
+#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615
+#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603
+#: usr/local/www/interfaces.php:2633 usr/local/www/firewall_rules.php:446
+#: usr/local/www/interfaces.php:2679 usr/local/www/interfaces.php:2668
+#: usr/local/www/firewall_rules.php:446 usr/local/www/interfaces.php:2668
+msgid "Block private networks"
+msgstr "プライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ブロックã™ã‚‹"
+
+#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475
+#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:467
+#: usr/local/www/firewall_rules.php:467
+msgid "Reserved/not assigned by IANA"
+msgstr "予約済ã¿/ IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„"
+
+#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426
+#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627
+#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2645 usr/local/www/firewall_rules.php:474
+#: usr/local/www/interfaces.php:2691 usr/local/www/interfaces.php:2680
+#: usr/local/www/firewall_rules.php:474 usr/local/www/interfaces.php:2680
+msgid "Block bogon networks"
+msgstr "ブロックbogonãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507
+#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:499
+#: usr/local/www/firewall_rules.php:499
+msgid "advanced settings set"
+msgstr "高度ãªè¨­å®šã¯ã€è¨­å®š"
+
+#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531
+#: usr/local/www/firewall_rules.php:524 usr/local/www/firewall_rules.php:524
+msgid "click to toggle enabled/disabled status"
+msgstr "有効/無効状態を切り替ãˆã‚‹ã‚’クリックã—ã¾ã™"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:846
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:845
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:845
+#: usr/local/www/firewall_rules.php:561
+msgid "Mon"
+msgstr "モン"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560
+#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:561
+msgid "Tues"
+msgstr "ç«æ›œ"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:848
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:847
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:847
+#: usr/local/www/firewall_rules.php:561
+msgid "Wed"
+msgstr "çµå©š"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560
+#: usr/local/www/firewall_rules.php:561 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:561
+msgid "Thur"
+msgstr "木"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:850
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:849
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:849
+#: usr/local/www/firewall_rules.php:561
+msgid "Fri"
+msgstr "金"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:851
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:850
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:850
+#: usr/local/www/firewall_rules.php:561
+msgid "Sat"
+msgstr "土"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:852
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:851
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:851
+#: usr/local/www/firewall_rules.php:561
+msgid "Sun"
+msgstr "太陽"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "January"
+msgstr "1月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "February"
+msgstr "2月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "March"
+msgstr "3月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "April"
+msgstr "4月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "May"
+msgstr "5月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "June"
+msgstr "6月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "July"
+msgstr "7月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "August"
+msgstr "8月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "September"
+msgstr "9月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "October"
+msgstr "10月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "November"
+msgstr "11月"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:562
+msgid "December"
+msgstr "12月"
+
+#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679
+#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:671
+#: usr/local/www/firewall_rules.php:671
+msgid "Traffic matching this rule is currently being denied"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ç¾åœ¨ã€æ‹’å¦ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684
+#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:674
+#: usr/local/www/firewall_rules.php:674
+msgid "Traffic matching this rule is currently being allowed"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ã€ç¾åœ¨è¨±å¯ã•ã‚Œã¦ã„ã¾ã™"
+
+#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694
+#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:682
+#: usr/local/www/firewall_rules.php:682
+msgid "This rule is not currently active because its period has expired"
+msgstr "ãã®æœŸé–“ãŒæº€äº†ã—ãŸãŸã‚ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã¯ã€ç¾åœ¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785
+#: usr/local/www/firewall_rules.php:786 usr/local/www/firewall_rules.php:786
+msgid "No rules are currently defined for this interface"
+msgstr "何ã®ãƒ«ãƒ¼ãƒ«ã¯ç¾åœ¨ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ãŸã‚ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786
+#: usr/local/www/firewall_rules.php:787 usr/local/www/firewall_rules.php:787
+msgid ""
+"All incoming connections on this interface will be blocked until you add "
+"pass rules."
+msgstr "パスルールã€ã‚’追加ã™ã‚‹ã¾ã§ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã™ã¹ã¦ã®ç€ä¿¡æŽ¥ç¶šãŒãƒ–ロックã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795
+#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789
+#: usr/local/www/firewall_rules.php:789
+msgid "Click the"
+msgstr "クリック"
+
+#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795
+#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789
+#: usr/local/www/firewall_rules.php:789
+msgid " button to add a new rule."
+msgstr "æ–°ã—ã„ルールを追加ã™ã‚‹ãŸã‚ã®ãƒœã‚¿ãƒ³ã€‚"
+
+#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327
+#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340
+#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_rules.php:813
+#: usr/local/www/firewall_nat.php:343 usr/local/www/firewall_nat.php:343
+#: usr/local/www/firewall_rules.php:813
+msgid "move selected rules to end"
+msgstr "終了ã™ã‚‹ã«ã¯ã€é¸æŠžã—ãŸãƒ«ãƒ¼ãƒ«ã‚’移動"
+
+#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345
+#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358
+#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_rules.php:832
+#: usr/local/www/firewall_nat.php:361 usr/local/www/firewall_nat.php:361
+#: usr/local/www/firewall_rules.php:832
+msgid "pass"
+msgstr "åˆæ ¼"
+
+#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839
+#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:835
+#: usr/local/www/firewall_rules.php:835
+msgid "block"
+msgstr "ブロック"
+
+#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125
+#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835
+#: usr/local/www/firewall_rules.php:838 usr/local/www/license.php:125
+#: usr/local/www/firewall_rules.php:838
+msgid "reject"
+msgstr "拒絶ã™ã‚‹"
+
+#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845
+#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:841
+#: usr/local/www/firewall_rules.php:841
+msgid "log"
+msgstr "ログ"
+
+#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849
+#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:845
+#: usr/local/www/firewall_rules.php:845
+msgid "pass (disabled)"
+msgstr "åˆæ ¼ï¼ˆç„¡åŠ¹ï¼‰"
+
+#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852
+#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:848
+#: usr/local/www/firewall_rules.php:848
+msgid "block (disabled)"
+msgstr "ブロック(無効)"
+
+#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855
+#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:851
+#: usr/local/www/firewall_rules.php:851
+msgid "reject (disabled)"
+msgstr "æ‹’å¦ï¼ˆç„¡åŠ¹ï¼‰"
+
+#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858
+#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:854
+#: usr/local/www/firewall_rules.php:854
+msgid "log (disabled)"
+msgstr "LOG(使用ä¸å¯ï¼‰"
+
+#: usr/local/www/firewall_rules.php:863
+#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354
+#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355
+#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375
+#: usr/local/www/firewall_rules.php:860 usr/local/www/vpn_l2tp.php:358
+#: usr/local/www/vpn_l2tp.php:375 usr/local/www/load_balancer_pool.php:147
+#: usr/local/www/firewall_rules.php:860
+msgid "Hint:"
+msgstr "ヒント:"
+
+#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868
+#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:864
+#: usr/local/www/firewall_rules.php:864
+msgid ""
+"Rules are evaluated on a first-match basis (i.e. the action of the first "
+"rule to match a packet will be executed). This means that if you use block "
+"rules, you'll have to pay attention to the rule order. Everything that isn't "
+"explicitly passed is blocked by default. "
+msgstr "「 (パケットã¨ä¸€è‡´ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ãƒ«ãƒ¼ãƒ«ã€ã™ãªã‚ã¡æœ€åˆã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ï¼‰æœ€åˆã®ãƒžãƒƒãƒã«åŸºã¥ã„ã¦è©•ä¾¡ã•ã‚Œã¦ã„る〠。ã“ã‚Œã¯ã€ãƒ–ロックを使用ã—ãŸå ´åˆã€æ˜Žç¤ºçš„ã«æ¸¡ã•ã‚ŒãŸãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ãƒ–ロックã•ã‚Œã¦ã„る「ルールã«ã¯ã€ãƒ«ãƒ¼ãƒ«ã®é †åºã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã™ã¹ã¦ã«æ³¨æ„を払ã†å¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã€ã¨ã„ã†ã“ã¨ã§ã™ã€‚"
+
+#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875
+#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:871
+#: usr/local/www/firewall_rules.php:871
+msgid ""
+"Floating rules are evaluated on a first-match basis (i.e. the action of the "
+"first rule to match a packet will be executed) only if the 'quick' option is "
+"checked on a rule. Otherwise they will only apply if no other rules match. "
+"Pay close attention to the rule order and options chosen. If no rule here "
+"matches, the per-interface or default rules are used. "
+msgstr "ãã†ã§ãªã‘ã‚Œã°ã€å½¼ã‚‰ã¯ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚ 「クイックã€ã‚ªãƒ—ションã¯ã€ã€Œãƒ«ãƒ¼ãƒ«ã«ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã«ã®ã¿ã€ 「 (パケットã¨ä¸€è‡´ã™ã‚‹æœ€åˆã®ãƒ«ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•ã‚Œã¾ã™æµ®å‹•ãƒ«ãƒ¼ãƒ«ã€ã™ãªã‚ã¡ã®ä½œç”¨ãŒï¼‰æœ€åˆã®ãƒžãƒƒãƒã«åŸºã¥ã„ã¦è©•ä¾¡ã•ã‚Œã¦ã„る「ãªã—ã®å ´åˆãƒ«ãƒ¼ãƒ«ã®ä¸€è‡´ã¯ã€Œãƒ«ãƒ¼ãƒ«ã®é †åºã‚„é¸æŠžã—ãŸã‚ªãƒ—ションã«ç´°å¿ƒã®æ³¨æ„を払ã£ã¦ãã ã•ã„。ã“ã“ã«ã¯ãƒ«ãƒ¼ãƒ«ãŒã€Œä¸€è‡´ã—ãªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹å˜ä½ã¾ãŸã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ«ãƒ¼ãƒ«ãŒä½¿ç”¨ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/firewall_rules_edit.php:201
+#: usr/local/www/firewall_rules_edit.php:210
+msgid "Reject type rules only works when the protocol is set to TCP."
+msgstr "プロトコルãŒTCPã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã«ã®ã¿æ©Ÿèƒ½ã‚¿ã‚¤ãƒ—ã®ãƒ«ãƒ¼ãƒ«ã‚’æ‹’å¦ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:204
+#: usr/local/www/firewall_rules_edit.php:213
+#: usr/local/www/firewall_rules_edit.php:210
+msgid "Queue type rules only work with queues."
+msgstr "キュータイプã®ãƒ«ãƒ¼ãƒ«ã¯ã€ã‚­ãƒ¥ãƒ¼ã ã‘ã§å‹•ä½œã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:212
+#: usr/local/www/firewall_rules_edit.php:227
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:228
+#: usr/local/www/firewall_rules_edit.php:228
+msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule"
+msgstr "ã‚ãªãŸã¯ã€IPv6アドレスファミリルールã«IPv4ゲートウェイ·グループを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:215
+#: usr/local/www/firewall_rules_edit.php:230
+#: usr/local/www/firewall_rules_edit.php:228
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:231
+#: usr/local/www/firewall_rules_edit.php:231
+msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule"
+msgstr "ã‚ãªãŸã¯ã€ IPv4アドレスファミリルールã«IPv6ゲートウェイ·グループを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:240
+#: usr/local/www/firewall_rules_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:236
+#: usr/local/www/firewall_rules_edit.php:242
+#: usr/local/www/firewall_rules_edit.php:242
+msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule"
+msgstr "ã‚ãªãŸã¯ã€IPv6フィルタルールã«ã¯IPv4ゲートウェイを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:243
+#: usr/local/www/firewall_rules_edit.php:242
+#: usr/local/www/firewall_rules_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:245
+msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule"
+msgstr "ã‚ãªãŸã¯ã€IPv4フィルタルールã«IPv6ゲートウェイを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:297
+#: usr/local/www/firewall_rules_edit.php:321
+#: usr/local/www/firewall_rules_edit.php:320
+#: usr/local/www/firewall_rules_edit.php:323
+#: usr/local/www/firewall_rules_edit.php:329
+#: usr/local/www/firewall_rules_edit.php:329
+#, php-format
+msgid "%s is only valid with protocol TCP."
+msgstr "%sã¯ãƒ—ロトコルTCPã§ã®ã¿æœ‰åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:299
+#: usr/local/www/firewall_rules_edit.php:323
+#: usr/local/www/firewall_rules_edit.php:322
+#: usr/local/www/firewall_rules_edit.php:325
+#: usr/local/www/firewall_rules_edit.php:331
+#: usr/local/www/firewall_rules_edit.php:331
+#, php-format
+msgid "%s is only valid if the gateway is set to 'default'."
+msgstr "ゲートウェイãŒã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã€ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆ%sã«ã®ã¿æœ‰åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:327
+#: usr/local/www/firewall_rules_edit.php:351
+#: usr/local/www/firewall_rules_edit.php:350
+#: usr/local/www/firewall_rules_edit.php:353
+#: usr/local/www/firewall_rules_edit.php:359
+#: usr/local/www/firewall_rules_edit.php:359
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「 %sã¯æœ‰åŠ¹ãªçµ‚了ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_rules_edit.php:381
+#: usr/local/www/firewall_rules_edit.php:410
+#: usr/local/www/firewall_rules_edit.php:409
+#: usr/local/www/firewall_rules_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:418
+#: usr/local/www/firewall_rules_edit.php:418
+#, php-format
+msgid ""
+"The Source IP address %s Address Family differs from the destination %s."
+msgstr "「é€ä¿¡å…ƒIPアドレス%sアドレスファミリã¯ã€å…ˆã®%s.ã¨ã¯ç•°ãªã‚Šã¾ã™"
+
+#: usr/local/www/firewall_rules_edit.php:383
+#: usr/local/www/firewall_rules_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:420
+#: usr/local/www/firewall_rules_edit.php:420
+msgid "You can not use IPv6 addresses in IPv4 rules."
+msgstr "ã‚ãªãŸã¯ã€IPv4ルールã§IPv6アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:385
+#: usr/local/www/firewall_rules_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:422
+#: usr/local/www/firewall_rules_edit.php:422
+msgid "You can not use IPv4 addresses in IPv6 rules."
+msgstr "ã‚ãªãŸã¯ã€IPv6ルールã§IPv4アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_rules_edit.php:434
+#: usr/local/www/firewall_rules_edit.php:433
+#: usr/local/www/firewall_rules_edit.php:436
+#: usr/local/www/firewall_rules_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:442
+msgid "OS detection is only valid with protocol TCP."
+msgstr "OS検出ã€ãƒ—ロトコルã¯TCPã§ã®ã¿æœ‰åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:406
+#: usr/local/www/firewall_rules_edit.php:438
+#: usr/local/www/firewall_rules_edit.php:437
+#: usr/local/www/firewall_rules_edit.php:440
+#: usr/local/www/firewall_rules_edit.php:446
+#: usr/local/www/firewall_rules_edit.php:446
+msgid "You have to select a queue when you select an acknowledge queue too."
+msgstr "ã‚ãªãŸã¯ã‚ãªãŸã‚‚èªã‚るキューをé¸æŠžã—ãŸã¨ãã«ã€ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:408
+#: usr/local/www/firewall_rules_edit.php:440
+#: usr/local/www/firewall_rules_edit.php:439
+#: usr/local/www/firewall_rules_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:448
+#: usr/local/www/firewall_rules_edit.php:448
+msgid "Acknowledge queue and Queue cannot be the same."
+msgstr "キューを確èªã—ã€ã‚­ãƒ¥ãƒ¼ã¯åŒã˜ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:443
+#: usr/local/www/firewall_rules_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:445
+#: usr/local/www/firewall_rules_edit.php:451
+#: usr/local/www/firewall_rules_edit.php:451
+msgid ""
+"You can not use limiters in Floating rules without choosing a direction."
+msgstr "「ã‚ãªãŸãŒæ–¹å‘ã‚’é¸ã°ãšãƒ•ãƒ­ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã®ä¸­ã§ãƒªãƒŸãƒƒã‚¿ãƒ¼ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_rules_edit.php:445
+#: usr/local/www/firewall_rules_edit.php:444
+#: usr/local/www/firewall_rules_edit.php:447
+#: usr/local/www/firewall_rules_edit.php:453
+#: usr/local/www/firewall_rules_edit.php:453
+msgid ""
+"You can not use gateways in Floating rules without choosing a direction."
+msgstr "「ã‚ãªãŸãŒæ–¹å‘ã‚’é¸ã°ãšãƒ•ãƒ­ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«å†…ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:448
+#: usr/local/www/firewall_rules_edit.php:447
+#: usr/local/www/firewall_rules_edit.php:450
+#: usr/local/www/firewall_rules_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:456
+msgid ""
+"You must select a queue for the In direction before selecting one for Out "
+"too."
+msgstr "ã‚ã¾ã‚Šã«ã‚‚"ã‚ãªãŸã¯ã‚¢ã‚¦ãƒˆã®ãŸã‚ã®1ã¤ã‚’é¸æŠžã™ã‚‹å‰ã«æ–¹å‘ã®ã‚­ãƒ¥ãƒ¼ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_rules_edit.php:418
+#: usr/local/www/firewall_rules_edit.php:450
+#: usr/local/www/firewall_rules_edit.php:449
+#: usr/local/www/firewall_rules_edit.php:452
+#: usr/local/www/firewall_rules_edit.php:458
+#: usr/local/www/firewall_rules_edit.php:458
+msgid "In and Out Queue cannot be the same."
+msgstr "INã¨OUTキューãŒåŒã˜ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:420
+#: usr/local/www/firewall_rules_edit.php:422
+#: usr/local/www/firewall_rules_edit.php:452
+#: usr/local/www/firewall_rules_edit.php:454
+#: usr/local/www/firewall_rules_edit.php:451
+#: usr/local/www/firewall_rules_edit.php:453
+#: usr/local/www/firewall_rules_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:462
+#: usr/local/www/firewall_rules_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:462
+msgid ""
+"You cannot select one queue and one virtual interface for IN and Out. both "
+"must be from the same type."
+msgstr "「ã‚ãªãŸã¯ã€ 1キューã¨INã¨OUTã®ãŸã‚ã®1ã¤ã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã©ã¡ã‚‰ã‚‚「åŒã˜ã‚¿ã‚¤ãƒ—ã®ã‚‚ã®ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:425
+#: usr/local/www/firewall_rules_edit.php:457
+#: usr/local/www/firewall_rules_edit.php:458
+#: usr/local/www/firewall_rules_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:467
+#: usr/local/www/firewall_rules_edit.php:467
+msgid "ID must be an integer"
+msgstr "IDã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:428
+#: usr/local/www/firewall_rules_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:470
+#: usr/local/www/firewall_rules_edit.php:470
+msgid "You can only select a layer7 container for TCP and/or UDP protocols"
+msgstr "ã‚ãªãŸã ã‘ã®TCPãŠã‚ˆã³/ã¾ãŸã¯UDPプロトコルã®ãŸã‚ã®ãƒ¬ã‚¤ãƒ¤7コンテナをé¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/firewall_rules_edit.php:430
+#: usr/local/www/firewall_rules_edit.php:462
+#: usr/local/www/firewall_rules_edit.php:463
+#: usr/local/www/firewall_rules_edit.php:466
+#: usr/local/www/firewall_rules_edit.php:472
+#: usr/local/www/firewall_rules_edit.php:472
+msgid "You can only select a layer7 container for Pass type rules."
+msgstr "ã‚ãªãŸã ã‘ã®é€šéŽåž‹ãƒ«ãƒ¼ãƒ«ã®ãƒ¬ã‚¤ãƒ¤7ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:443
+#: usr/local/www/firewall_rules_edit.php:475
+#: usr/local/www/firewall_rules_edit.php:476
+#: usr/local/www/firewall_rules_edit.php:479
+#: usr/local/www/firewall_rules_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:485
+msgid ""
+"If you specify TCP flags that should be set you should specify out of which "
+"flags as well."
+msgstr "åŒæ§˜ã«ãƒ•ãƒ©ã‚°"ã‚ãªãŸãŒè¨­å®šã™ã‚‹å¿…è¦ãŒTCPフラグを指定ã—ãŸå ´åˆã«ã¯ã€ãã®ã†ã¡æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/firewall_rules_edit.php:652
+#: usr/local/www/firewall_rules_edit.php:685
+#: usr/local/www/firewall_rules_edit.php:688
+#: usr/local/www/firewall_rules_edit.php:700
+#: usr/local/www/firewall_rules_edit.php:700
+msgid "Edit Firewall rule"
+msgstr "編集ファイアウォールルール"
+
+#: usr/local/www/firewall_rules_edit.php:673
+#: usr/local/www/firewall_rules_edit.php:706
+#: usr/local/www/firewall_rules_edit.php:709
+#: usr/local/www/firewall_rules_edit.php:721
+#: usr/local/www/firewall_rules_edit.php:721
+msgid "Choose what to do with packets that match the criteria specified below."
+msgstr "下ã®æŒ‡å®šã•ã‚ŒãŸæ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットをã©ã†ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:674
+#: usr/local/www/firewall_rules_edit.php:707
+#: usr/local/www/firewall_rules_edit.php:710
+#: usr/local/www/firewall_rules_edit.php:722
+#: usr/local/www/firewall_rules_edit.php:722
+msgid ""
+"Hint: the difference between block and reject is that with reject, a packet "
+"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, "
+"whereas with block the packet is dropped silently. In either case, the "
+"original packet is discarded."
+msgstr ""ヒント:ブロックã¨æ‹’å¦ã®é•ã„ã§ã‚ã‚‹æ‹’å¦ã—ã¦ã€ãã®ãƒ‘ケット"オリジナル "ã®ãƒ–ロックã¨ã€ãƒ‘ケットãŒã„ãšã‚Œã®å ´åˆã‚‚ã€é»™ã£ã¦å»ƒæ£„ã•ã‚Œã€ä¸€æ–¹ã€ 「 ( TCP RSTã¾ãŸã¯UDPã®åˆ°é”ä¸èƒ½ICMPãƒãƒ¼ãƒˆï¼‰ã¯ã€é€ä¿¡è€…ã«è¿”é€ã•ã‚Œã‚‹ãƒ‘ケットã¯ç ´æ£„ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:689
+#: usr/local/www/firewall_rules_edit.php:722
+#: usr/local/www/firewall_rules_edit.php:725
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:737
+msgid "Quick"
+msgstr "クイック"
+
+#: usr/local/www/firewall_rules_edit.php:693
+#: usr/local/www/firewall_rules_edit.php:726
+#: usr/local/www/firewall_rules_edit.php:729
+#: usr/local/www/firewall_rules_edit.php:741
+#: usr/local/www/firewall_rules_edit.php:741
+msgid "Apply the action immediately on match."
+msgstr "一致ã«ã™ãã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’é©ç”¨ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:694
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/firewall_rules_edit.php:730
+#: usr/local/www/firewall_rules_edit.php:742
+#: usr/local/www/firewall_rules_edit.php:742
+msgid ""
+"Set this option if you need to apply this action to traffic that matches "
+"this rule immediately."
+msgstr "ã™ãã«ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’"ã‚ãªãŸã¯ä¸€è‡´ã™ã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã«ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€ 。"
+
+#: usr/local/www/firewall_rules_edit.php:701
+#: usr/local/www/firewall_rules_edit.php:734
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:749
+#: usr/local/www/firewall_rules_edit.php:749
+msgid "Associated filter rule"
+msgstr "関連ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«"
+
+#: usr/local/www/firewall_rules_edit.php:703
+#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137
+#: usr/local/www/firewall_rules_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:739
+#: usr/local/www/diag_traceroute.php:141
+#: usr/local/www/firewall_rules_edit.php:751
+#: usr/local/www/diag_traceroute.php:161
+#: usr/local/www/firewall_rules_edit.php:751
+#: usr/local/www/diag_traceroute.php:161
+msgid "Note: "
+msgstr "注æ„:"
+
+#: usr/local/www/firewall_rules_edit.php:703
+#: usr/local/www/firewall_rules_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:739
+#: usr/local/www/firewall_rules_edit.php:751
+#: usr/local/www/firewall_rules_edit.php:751
+msgid "This is associated to a NAT rule."
+msgstr "ã“ã‚Œã¯ã€NATルールã«é–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:704
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:740
+#: usr/local/www/firewall_rules_edit.php:752
+#: usr/local/www/firewall_rules_edit.php:752
+msgid ""
+"You cannot edit the interface, protocol, source, or destination of "
+"associated filter rules."
+msgstr "関連ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«"ã‚ãªãŸã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã€ãƒ—ロトコルã€é€ä¿¡å…ƒã€ã¾ãŸã¯å®›å…ˆã‚’編集ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/firewall_rules_edit.php:711
+#: usr/local/www/firewall_rules_edit.php:744
+#: usr/local/www/firewall_rules_edit.php:747
+#: usr/local/www/firewall_rules_edit.php:759
+#: usr/local/www/firewall_rules_edit.php:759
+msgid "View the NAT rule"
+msgstr "NATルールを表示ã™ã‚‹"
+
+#: usr/local/www/firewall_rules_edit.php:768
+#: usr/local/www/firewall_rules_edit.php:803
+#: usr/local/www/firewall_rules_edit.php:806
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:817
+#: usr/local/www/firewall_rules_edit.php:817
+msgid "Choose on which interface packets must come in to match this rule."
+msgstr "ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãƒ‘ケットãŒã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ã«ã¯æ¥ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“]ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:774
+#: usr/local/www/services_captiveportal_ip_edit.php:178
+#: usr/local/www/diag_ipsec_spd.php:88
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:443
+#: usr/local/www/services_captiveportal_hostname_edit.php:160
+#: usr/local/www/load_balancer_relay_action_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:809
+#: usr/local/www/services_captiveportal_hostname_edit.php:158
+#: usr/local/www/load_balancer_relay_action_edit.php:440
+#: usr/local/www/services_captiveportal_ip_edit.php:176
+#: usr/local/www/diag_ipsec_spd.php:89
+#: usr/local/www/firewall_rules_edit.php:812
+#: usr/local/www/firewall_rules_edit.php:824
+#: usr/local/www/firewall_rules_edit.php:823
+#: usr/local/www/firewall_rules_edit.php:823
+#: usr/local/www/services_captiveportal_hostname_edit.php:160
+#: usr/local/www/diag_ipsec_spd.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:440
+msgid "Direction"
+msgstr "æ–¹å‘"
+
+#: usr/local/www/firewall_rules_edit.php:792
+#: usr/local/www/firewall_rules_edit.php:827
+#: usr/local/www/firewall_rules_edit.php:830
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:841
+#: usr/local/www/firewall_rules_edit.php:841
+msgid "TCP/IP Version"
+msgstr "TCP / IPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/firewall_rules_edit.php:804
+#: usr/local/www/firewall_rules_edit.php:839
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:854
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_rules_edit.php:853
+msgid "Select the Internet Protocol version this rule applies to"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆÂ·ãƒ—ロトコル·ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠž"
+
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules_edit.php:867
+msgid "Hint: in most cases, you should specify "
+msgstr "ヒント:ã»ã¨ã‚“ã©ã®å ´åˆã€æ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Š"
+
+#: usr/local/www/firewall_rules_edit.php:822
+#: usr/local/www/firewall_rules_edit.php:857
+#: usr/local/www/firewall_rules_edit.php:860
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:871
+msgid "ICMP type"
+msgstr "ICMPタイプ"
+
+#: usr/local/www/firewall_rules_edit.php:851
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:901
+#: usr/local/www/firewall_rules_edit.php:900
+#: usr/local/www/firewall_rules_edit.php:900
+msgid ""
+"If you selected ICMP for the protocol above, you may specify an ICMP type "
+"here."
+msgstr "ã“ã“ã§"ã‚ãªãŸã¯ä¸Šè¨˜ã®ãƒ—ロトコルã®ãŸã‚ã«ICMPã‚’é¸æŠžã—ãŸå ´åˆã¯ã€ ICMPタイプを指定ã™ã‚‹ã“ã¨ã‚‚〠。"
+
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:929
+#: usr/local/www/firewall_rules_edit.php:941
+#: usr/local/www/firewall_rules_edit.php:940
+#: usr/local/www/firewall_rules_edit.php:940
+msgid " subnet"
+msgstr "サブãƒãƒƒãƒˆ"
+
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:963
+msgid "Show source port range"
+msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆç¯„囲を表示ã™ã‚‹"
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1000
+msgid "Specify the source port or port range for this rule."
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã®é€ä¿¡å…ƒãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1000
+msgid ""
+"and almost never equal to the destination port range (and should usually be"
+msgstr "「宛先ãƒãƒ¼ãƒˆç¯„囲ã¨ã»ã¼ç­‰ã—ããªã‚‹ã“ã¨ã¯ï¼ˆé€šå¸¸ã¯ã‚ã‚‹ã¹ã"
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+msgid "'to'"
+msgstr "'ã‹ã‚‰'"
+
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/firewall_rules_edit.php:1040
+#: usr/local/www/firewall_rules_edit.php:1055
+#: usr/local/www/firewall_rules_edit.php:1068
+#: usr/local/www/firewall_rules_edit.php:1067
+#: usr/local/www/firewall_rules_edit.php:1067
+msgid "Destination port range "
+msgstr "宛先ãƒãƒ¼ãƒˆç¯„囲"
+
+#: usr/local/www/firewall_rules_edit.php:1037
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_rules_edit.php:1087
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1099
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"rule."
+msgstr "ルール"ã“ã®ãŸã‚ã€ãƒ‘ケットã®é€ä¿¡å…ˆã®ãƒãƒ¼ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆç¯„囲を指定ã™ã‚‹ã€ 。"
+
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_rules_edit.php:1101
+msgid "field empty if you only want to filter a single port"
+msgstr "フィールドã®ç©ºã®ã‚ãªãŸã¯ã€å˜ä¸€ã®ãƒãƒ¼ãƒˆã‚’フィルタリングã—ãŸã„å ´åˆã«"
+
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_rules_edit.php:1079
+#: usr/local/www/firewall_rules_edit.php:1094
+#: usr/local/www/firewall_rules_edit.php:1107
+#: usr/local/www/firewall_rules_edit.php:1106
+#: usr/local/www/firewall_rules_edit.php:1106
+msgid "Log"
+msgstr "ログ"
+
+#: usr/local/www/firewall_rules_edit.php:1047
+#: usr/local/www/firewall_rules_edit.php:1082
+#: usr/local/www/firewall_rules_edit.php:1097
+#: usr/local/www/firewall_rules_edit.php:1110
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1109
+msgid "Log packets that are handled by this rule"
+msgstr "ã“ã®è¦å‰‡ã«ã‚ˆã£ã¦å‡¦ç†ã•ã‚ŒãŸãƒ‘ケットをログã«è¨˜éŒ²ã™ã‚‹"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1111
+msgid ""
+"Hint: the firewall has limited local log space. Don't turn on logging for "
+"everything. If you want to do a lot of logging, consider using a remote "
+"syslog server"
+msgstr ""ヒント:ファイアウォールãŒãƒ­ãƒ¼ã‚«ãƒ«ã®ãƒ­ã‚°Â·ã‚¹ãƒšãƒ¼ã‚¹ãŒé™ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ãƒ­ã‚®ãƒ³ã‚°ã‚’オンã«ã—ãªã„ã§ãã ã•ã„。 ã€ã™ã¹ã¦ã®ã‚‚ã®ã€‚ロギングをãŸãã•ã‚“ã—ãŸã„å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã€Œ syslogサーãƒã‚’使用ã™ã‚‹ã“ã¨ã‚’検討"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1111
+msgid "see the"
+msgstr "見る"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1111
+msgid "Diagnostics: System logs: Settings"
+msgstr "診断:システムログ:セッティング"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/services_captiveportal.php:908
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/services_captiveportal.php:953
+#: usr/local/www/services_captiveportal.php:949
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/services_captiveportal.php:951
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/services_captiveportal.php:967
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/services_captiveportal.php:967
+msgid "page"
+msgstr "ページ"
+
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/services_unbound_acls.php:296
+#: usr/local/www/firewall_rules_edit.php:1092
+#: usr/local/www/firewall_rules_edit.php:1107
+#: usr/local/www/firewall_rules_edit.php:1120
+#: usr/local/www/firewall_rules_edit.php:1119
+#: usr/local/www/firewall_rules_edit.php:1119
+msgid "You may enter a description here for your reference."
+msgstr "ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1080
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1130
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1142
+#: usr/local/www/firewall_rules_edit.php:1142
+msgid "Source OS"
+msgstr "ソースã®OS"
+
+#: usr/local/www/firewall_rules_edit.php:1086
+#: usr/local/www/firewall_rules_edit.php:1121
+#: usr/local/www/firewall_rules_edit.php:1136
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1148
+#: usr/local/www/firewall_rules_edit.php:1148
+msgid "OS Type:"
+msgstr "OSã®ç¨®é¡žï¼š"
+
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1144
+#: usr/local/www/firewall_rules_edit.php:1159
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1171
+#: usr/local/www/firewall_rules_edit.php:1171
+msgid "Note: this only works for TCP rules"
+msgstr "注:TCPã®è¦å‰‡ã«ã¤ã„ã¦ã¯ã€ã“ã®å”¯ä¸€ã®ä½œå“"
+
+#: usr/local/www/firewall_rules_edit.php:1114
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1164
+#: usr/local/www/firewall_rules_edit.php:1177
+#: usr/local/www/firewall_rules_edit.php:1176
+#: usr/local/www/firewall_rules_edit.php:1176
+msgid "Diffserv Code Point"
+msgstr "DiffServã®ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆ"
+
+#: usr/local/www/firewall_rules_edit.php:1130
+#: usr/local/www/interfaces_ppps_edit.php:675
+#: usr/local/www/vpn_ipsec_phase1.php:806
+#: usr/local/www/vpn_ipsec_phase2.php:629
+#: usr/local/www/firewall_rules_edit.php:1165
+#: usr/local/www/vpn_ipsec_phase2.php:655
+#: usr/local/www/vpn_ipsec_phase1.php:819
+#: usr/local/www/interfaces_ppps_edit.php:676
+#: usr/local/www/vpn_ipsec_phase2.php:751
+#: usr/local/www/vpn_ipsec_phase1.php:816
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/interfaces_ppps_edit.php:682
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase2.php:772
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1192
+#: usr/local/www/interfaces_ppps_edit.php:680
+#: usr/local/www/firewall_rules_edit.php:1192
+#: usr/local/www/interfaces_ppps_edit.php:680
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase2.php:772
+msgid "Advanced Options"
+msgstr "詳細オプション"
+
+#: usr/local/www/firewall_rules_edit.php:1137
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1187
+#: usr/local/www/firewall_rules_edit.php:1200
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1199
+msgid ""
+"This allows packets with IP options to pass. Otherwise they are blocked by "
+"default. This is usually only seen with multicast traffic."
+msgstr "「ã“ã‚Œã¯ã€IPオプションをæŒã¤ãƒ‘ケットを通éŽã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã‘ã‚Œã°å½¼ã‚‰ã¯ã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚Œã¦ã„る「デフォルト。ã“ã‚Œã¯é€šå¸¸ã€ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã§è¦‹ã‚‰ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1190
+#: usr/local/www/firewall_rules_edit.php:1203
+#: usr/local/www/firewall_rules_edit.php:1202
+#: usr/local/www/firewall_rules_edit.php:1202
+msgid "This will disable auto generated reply-to for this rule."
+msgstr "ã“ã‚Œã¯è‡ªå‹•è¿”ä¿¡ã«ã“ã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«ç”ŸæˆãŒç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1178
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1205
+#: usr/local/www/firewall_rules_edit.php:1205
+msgid ""
+"You can mark a packet matching this rule and use this mark to match on other "
+"NAT/filter rules. It is called"
+msgstr ""ã‚ãªãŸã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«ä¸€è‡´ã™ã‚‹ãƒ‘ケットをマークã—ã€ä»–ã«ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ã€ã“ã®ãƒžãƒ¼ã‚¯ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ŒNAT /フィルタルール。ãã‚ŒãŒå‘¼ã³å‡ºã•ã‚Œã¾ã™"
+
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1178
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1205
+#: usr/local/www/firewall_rules_edit.php:1205
+msgid "Policy filtering"
+msgstr "ãƒãƒªã‚·ãƒ¼ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼"
+
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1181
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1209
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1208
+msgid "You can match packet on a mark placed before on another rule."
+msgstr "ã‚ãªãŸãŒåˆ¥ã®ãƒ«ãƒ¼ãƒ«ä¸Šã®å‰ã«ç½®ã‹ãƒžãƒ¼ã‚¯ã§ãƒ‘ケットを一致ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1148
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1198
+#: usr/local/www/firewall_rules_edit.php:1211
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1210
+msgid " Maximum state entries this rule can create"
+msgstr "最大ステートエントリã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1184
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1212
+#: usr/local/www/firewall_rules_edit.php:1211
+#: usr/local/www/firewall_rules_edit.php:1211
+msgid " Maximum number of unique source hosts"
+msgstr "一æ„ã®é€ä¿¡å…ƒãƒ›ã‚¹ãƒˆã®æœ€å¤§æ•°"
+
+#: usr/local/www/firewall_rules_edit.php:1150
+#: usr/local/www/firewall_rules_edit.php:1185
+#: usr/local/www/firewall_rules_edit.php:1200
+#: usr/local/www/firewall_rules_edit.php:1213
+#: usr/local/www/firewall_rules_edit.php:1212
+#: usr/local/www/firewall_rules_edit.php:1212
+msgid " Maximum number of established connections per host"
+msgstr "ホストã‚ãŸã‚Šã®ç¢ºç«‹ã•ã‚ŒãŸæŽ¥ç¶šã®æœ€å¤§æ•°"
+
+#: usr/local/www/firewall_rules_edit.php:1151
+#: usr/local/www/firewall_rules_edit.php:1186
+#: usr/local/www/firewall_rules_edit.php:1201
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1213
+#: usr/local/www/firewall_rules_edit.php:1213
+msgid " Maximum state entries per host"
+msgstr "ホストã”ã¨ã®æœ€å¤§ã‚¹ãƒ†ãƒ¼ãƒˆã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/firewall_rules_edit.php:1160
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1223
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/firewall_rules_edit.php:1222
+msgid "Maximum new connections / per second(s)"
+msgstr "最大ã®æ–°è¦æŽ¥ç¶š/秒(S )"
+
+#: usr/local/www/firewall_rules_edit.php:1164
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1226
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1225
+msgid "State Timeout in seconds"
+msgstr "秒å˜ä½ã®çŠ¶æ…‹ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ"
+
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1202
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1227
+#: usr/local/www/firewall_rules_edit.php:1227
+msgid "Note: Leave fields blank to disable that feature."
+msgstr "注:ã“ã®æ©Ÿèƒ½ã‚’無効ã«ç©ºæ¬„ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1207
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/firewall_rules_edit.php:1233
+#: usr/local/www/firewall_rules_edit.php:1232
+#: usr/local/www/firewall_rules_edit.php:1232
+msgid "TCP flags"
+msgstr "TCPフラグ"
+
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1256
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1264
+msgid "Any flags."
+msgstr "ä»»æ„ã®ãƒ•ãƒ©ã‚°ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1243
+#: usr/local/www/firewall_rules_edit.php:1258
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules_edit.php:1266
+msgid ""
+"Use this to choose TCP flags that must be set or cleared for this rule to "
+"match."
+msgstr "マッãƒã€ã«ã¯ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã«è¨­å®šã¾ãŸã¯ã‚¯ãƒªã‚¢ã™ã‚‹å¿…è¦ãŒTCPフラグをé¸æŠžã—ã¦ã€ã“れを使用ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1249
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_rules_edit.php:1272
+#: usr/local/www/firewall_rules_edit.php:1272
+msgid "State Type"
+msgstr "ステートタイプ"
+
+#: usr/local/www/firewall_rules_edit.php:1221
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1256
+#: usr/local/www/firewall_rules_edit.php:1263
+#: usr/local/www/firewall_rules_edit.php:1271
+#: usr/local/www/firewall_rules_edit.php:1278
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1285
+msgid "keep state"
+msgstr "状態を維æŒã™ã‚‹"
+
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/firewall_rules_edit.php:1229
+#: usr/local/www/firewall_rules_edit.php:1257
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1272
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1286
+msgid "sloppy state"
+msgstr "ãšã•ã‚“ãªçŠ¶æ…‹"
+
+#: usr/local/www/firewall_rules_edit.php:1223
+#: usr/local/www/firewall_rules_edit.php:1230
+#: usr/local/www/firewall_rules_edit.php:1258
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1282
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1287
+msgid "synproxy state"
+msgstr "synproxy状態"
+
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1260
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1284
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1283
+msgid ""
+"Hint: Select which type of state tracking mechanism you would like to use. "
+"If in doubt, use keep state."
+msgstr ""ヒント:ã‚ãªãŸãŒä½¿ç”¨ã—ãŸã„種類を状態追跡機構ã®é¸æŠžã€ç–‘ã‚ã—ã„å ´åˆã¯ã€çŠ¶æ…‹ã‚’維æŒã—使用ã—ã¦ã„ã‚‹å ´åˆã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1229
+#: usr/local/www/firewall_rules_edit.php:1263
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1278
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1286
+msgid "Works with all IP protocols."
+msgstr "ã™ã¹ã¦ã®IPプロトコルã§å‹•ä½œã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1230
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1287
+msgid ""
+"Proxies incoming TCP connections to help protect servers from spoofed TCP "
+"SYN floods. This option includes the functionality of keep state and "
+"modulate state combined."
+msgstr "SYNフラッドã€ã‚¹ãƒ—ーフィングã•ã‚ŒãŸTCPã‹ã‚‰ã‚µãƒ¼ãƒãƒ¼ã‚’ä¿è­·ã™ã‚‹ãŸã‚ã«TCP接続をç€ä¿¡ãƒ—ロキシ〠。ã“ã®ã‚ªãƒ—ションã¯ã€çµ„ã¿åˆã‚ã›ã¦ã‚­ãƒ¼ãƒ—状態ã®æ©Ÿèƒ½ã¨ã€Œèª¿ç¯€çŠ¶æ…‹ã‚’å«ã‚€ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1231
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1289
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1288
+msgid ""
+"Do not use state mechanisms to keep track. This is only useful if you're "
+"doing advanced queueing in certain situations. Please check the "
+"documentation."
+msgstr "特定ã®çŠ¶æ³ã§ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒˆÂ·ã‚­ãƒ¥ãƒ¼ã‚¤ãƒ³ã‚°ã‚’è¡Œã£ã¦"ã‚ãªãŸãŒã—ã¦ã„ã‚‹å ´åˆã‚’追跡ã™ã‚‹ãŸã‚ã«çŠ¶æ…‹ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使用ã—ãªã„ã§ãã ã•ã„。ã“ã‚Œã¯ä¾¿åˆ©ã§ã™ã€ 。 「マニュアルを確èªã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_rules_edit.php:1245
+#: usr/local/www/firewall_rules_edit.php:1280
+msgid ""
+"Hint: This prevents the rule from automatically syncing to other CARP "
+"members."
+msgstr ""ヒント:ã“ã‚Œã¯ã€è‡ªå‹•çš„ã«ä»–ã®CARPã¨åŒæœŸã‹ã‚‰ãƒ«ãƒ¼ãƒ«ã‚’防ãã€ã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1350
+#: usr/local/www/firewall_rules_edit.php:1365
+#: usr/local/www/firewall_rules_edit.php:1372
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1383
+msgid "Leave as 'none' to leave the rule enabled all the time."
+msgstr "ã™ã¹ã¦ã®æ™‚間を有効ã«ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã‚’残ã—ã¦ã€Œè©²å½“ãªã—ã€ã¨ã—ã¦ãŠãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/services_captiveportal.php:779
+#: usr/local/www/services_captiveportal.php:799
+#: usr/local/www/firewall_rules_edit.php:1362
+#: usr/local/www/services_captiveportal.php:821
+#: usr/local/www/services_captiveportal.php:841
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/services_captiveportal.php:839
+#: usr/local/www/firewall_rules_edit.php:1377
+#: usr/local/www/services_captiveportal.php:807
+#: usr/local/www/services_captiveportal.php:837
+#: usr/local/www/firewall_rules_edit.php:1384
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/firewall_rules_edit.php:1395
+#: usr/local/www/firewall_rules_edit.php:1395
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:853
+msgid "default"
+msgstr "デフォルト"
+
+#: usr/local/www/firewall_rules_edit.php:1334
+#: usr/local/www/firewall_rules_edit.php:1405
+#: usr/local/www/firewall_rules_edit.php:1420
+#: usr/local/www/firewall_rules_edit.php:1427
+#: usr/local/www/firewall_rules_edit.php:1438
+#: usr/local/www/firewall_rules_edit.php:1438
+msgid ""
+"Leave as 'default' to use the system routing table. Or choose a gateway to "
+"utilize policy based routing."
+msgstr "ãƒãƒªã‚·ãƒ¼ãƒ™ãƒ¼ã‚¹ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã™ã‚‹ã€ã«ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを使用ã™ã‚‹ã‚ˆã†ã«ã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã€ã®ã¾ã¾ã«ã—ã¾ã™ã€‚ã¾ãŸã¯ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ 。"
+
+#: usr/local/www/firewall_rules_edit.php:1339
+#: usr/local/www/firewall_rules_edit.php:1410
+#: usr/local/www/firewall_rules_edit.php:1425
+#: usr/local/www/firewall_rules_edit.php:1432
+#: usr/local/www/firewall_rules_edit.php:1443
+#: usr/local/www/firewall_rules_edit.php:1443
+msgid "In/Out"
+msgstr "イン/アウト"
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1487
+msgid ""
+"Choose the Out queue/Virtual interface only if you have also selected In."
+msgstr "「ã‚ãªãŸã‚‚ã€é¸æŠžã•ã‚ŒãŸå ´åˆã«ã®ã¿å‡ºåŠ›å¾…ã¡è¡Œåˆ—/仮想インターフェイスをé¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1487
+msgid ""
+"The Out selection is applied to traffic leaving the interface where the rule "
+"is created, In is applied to traffic coming into the chosen interface."
+msgstr "作æˆã•ã‚ŒãŸã€Œã‚¢ã‚¦ãƒˆé¸æŠžã¯ãƒ«ãƒ¼ãƒ«ãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‹ã‚‰é€ä¿¡ã•ã‚Œã‚‹ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã«é©ç”¨ã•ã‚Œã¦ã„ã‚‹ã€ã§ã¯ã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒé¸ã°ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«ç€ä¿¡ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1487
+msgid ""
+"If you are creating a floating rule, if the direction is In then the same "
+"rules apply, if the direction is out the selections are reverted Out is for "
+"incoming and In is for outgoing."
+msgstr "「フローティングルールを作æˆã™ã‚‹å ´åˆã¯æ–¹å‘ãŒåŒã˜ã§ã€ãã®å¾Œã«ã‚ã‚‹å ´åˆã¯ã€ 「方å‘ã¯é¸æŠžãŒã‚¢ã‚¦ãƒˆæˆ»ã•ã‚Œå¤–ã®å ´åˆã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã€Œç€ä¿¡ãŠã‚ˆã³Inã¯ã€ç™ºä¿¡ç”¨ã§ã™ç”¨ã§ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1389
+#: usr/local/www/firewall_rules_edit.php:1460
+#: usr/local/www/firewall_rules_edit.php:1475
+#: usr/local/www/firewall_rules_edit.php:1482
+#: usr/local/www/firewall_rules_edit.php:1493
+#: usr/local/www/firewall_rules_edit.php:1493
+msgid "Ackqueue/Queue"
+msgstr "Ackqueue /キュー"
+
+#: usr/local/www/firewall_rules_edit.php:1439
+#: usr/local/www/firewall_rules_edit.php:1510
+#: usr/local/www/firewall_rules_edit.php:1525
+#: usr/local/www/firewall_rules_edit.php:1532
+#: usr/local/www/firewall_rules_edit.php:1543
+#: usr/local/www/firewall_rules_edit.php:1543
+msgid "Choose the Acknowledge Queue only if you have selected Queue."
+msgstr "キューをé¸æŠžã—ãŸå ´åˆã«ã®ã¿è‚¯å®šå¿œç­”キューをé¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/firewall_rules_edit.php:1466
+#: usr/local/www/firewall_rules_edit.php:1537
+#: usr/local/www/firewall_rules_edit.php:1552
+#: usr/local/www/firewall_rules_edit.php:1560
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1571
+msgid ""
+"Choose a Layer7 container to apply application protocol inspection rules. "
+"These are valid for TCP and UDP protocols only."
+msgstr "「アプリケーションプロトコルインスペクションルールをé©ç”¨ã™ã‚‹ãƒ¬ã‚¤ãƒ¤7ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã—ã¾ã™ã€‚ 「ã“れらã¯TCPãŠã‚ˆã³UDPã®ã¿ã®ãƒ—ロトコルã«æœ‰åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113
+#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130
+#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139
+#: usr/local/www/system_advanced_misc.php:472
+#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131
+#: usr/local/www/system_advanced_misc.php:531
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/system_advanced_misc.php:531 usr/local/www/fbegin.inc:131
+msgid "Schedules"
+msgstr "スケジュール"
+
+#: usr/local/www/firewall_schedule.php:77
+#: usr/local/www/firewall_schedule.php:77
+#, php-format
+msgid "Cannot delete Schedule. Currently in use by %s"
+msgstr "スケジュールを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ç¾åœ¨%sã§ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/firewall_schedule.php:97
+#: usr/local/www/firewall_schedule.php:97
+msgid "Time Range(s)"
+msgstr "時間範囲( S )"
+
+#: usr/local/www/firewall_schedule.php:103
+#: usr/local/www/firewall_schedule.php:233
+#: usr/local/www/firewall_schedule.php:103
+#: usr/local/www/firewall_schedule.php:233
+msgid "add a new schedule"
+msgstr "æ–°ã—ã„スケジュールを追加"
+
+#: usr/local/www/firewall_schedule.php:115
+#: usr/local/www/firewall_schedule.php:115
+msgid "Schedule is currently active"
+msgstr "スケジュールãŒç¾åœ¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹"
+
+#: usr/local/www/firewall_schedule.php:221
+#: usr/local/www/firewall_schedule.php:221
+msgid "Do you really want to delete this schedule?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/firewall_schedule.php:240
+#: usr/local/www/firewall_schedule.php:240
+msgid ""
+"Schedules act as placeholders for time ranges to be used in Firewall Rules."
+msgstr "時間ã®ãƒ—レースホルダã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹ç¯„囲ã¨ã—ã¦ã€Œã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯è¡Œå‹•ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:93
+#: usr/local/www/firewall_schedule_edit.php:93
+msgid "Schedule may not be named LAN."
+msgstr "スケジュールã¯ã€LAN命åã•ã‚Œãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:95
+#: usr/local/www/firewall_schedule_edit.php:95
+msgid "Schedule may not be named WAN."
+msgstr "スケジュールã¯ã€WAN命åã•ã‚Œãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:97
+#: usr/local/www/firewall_schedule_edit.php:97
+msgid "Schedule name cannot be blank."
+msgstr "スケジュールåを空白ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_schedule_edit.php:101
+#: usr/local/www/firewall_schedule_edit.php:101
+msgid "Reserved word used for schedule name."
+msgstr "スケジュールåã«ä½¿ç”¨ã™ã‚‹äºˆç´„語。"
+
+#: usr/local/www/firewall_schedule_edit.php:104
+#: usr/local/www/firewall_schedule_edit.php:104
+msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9"
+msgstr "スケジュールåã¯æ–‡å­—ã ã‘AZ 〠AZ ã€ã‹ã‚‰æ§‹æˆã•ã‚Œã¦ã‚‚よã„0-9"
+
+#: usr/local/www/firewall_schedule_edit.php:113
+#: usr/local/www/firewall_schedule_edit.php:113
+msgid "A Schedule with this name already exists."
+msgstr "ã“ã®åå‰ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:170
+#: usr/local/www/firewall_schedule_edit.php:170
+msgid "The schedule must have at least one time range configured."
+msgstr "スケジュールã¯ã€å°‘ãªãã¨ã‚‚1時間範囲ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:770
+#: usr/local/www/firewall_schedule_edit.php:769
+#: usr/local/www/firewall_schedule_edit.php:769
+msgid "Schedule information"
+msgstr "スケジュール情報"
+
+#: usr/local/www/firewall_schedule_edit.php:776
+#: usr/local/www/firewall_schedule_edit.php:775
+#: usr/local/www/firewall_schedule_edit.php:775
+msgid "Schedule Name"
+msgstr "スケジュールå"
+
+#: usr/local/www/firewall_schedule_edit.php:782
+#: usr/local/www/firewall_schedule_edit.php:781
+#: usr/local/www/firewall_schedule_edit.php:781
+msgid "NOTE: This schedule is in use so the name may not be modified!"
+msgstr "注æ„:åå‰ã¯å¤‰æ›´ã•ã‚Œãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã®ã§ã€ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä½¿ç”¨ä¸­ã§ã™ ï¼"
+
+#: usr/local/www/firewall_schedule_edit.php:787
+#: usr/local/www/firewall_schedule_edit.php:786
+#: usr/local/www/firewall_schedule_edit.php:786
+msgid ""
+"The name of the alias may only consist of the characters a-z, A-Z and 0-9"
+msgstr "「エイリアスã®åå‰ã¯ã€æ–‡å­—ã ã‘AZ 〠AZã¨0-9ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹"
+
+#: usr/local/www/firewall_schedule_edit.php:804
+#: usr/local/www/firewall_schedule_edit.php:803
+#: usr/local/www/firewall_schedule_edit.php:803
+msgid "Month"
+msgstr "月"
+
+#: usr/local/www/firewall_schedule_edit.php:847
+#: usr/local/www/firewall_schedule_edit.php:846
+#: usr/local/www/firewall_schedule_edit.php:846
+msgid "Tue"
+msgstr "ç«æ›œ"
+
+#: usr/local/www/firewall_schedule_edit.php:849
+#: usr/local/www/firewall_schedule_edit.php:848
+#: usr/local/www/firewall_schedule_edit.php:848
+msgid "Thu"
+msgstr "木"
+
+#: usr/local/www/firewall_schedule_edit.php:906
+#: usr/local/www/firewall_schedule_edit.php:905
+#: usr/local/www/firewall_schedule_edit.php:905
+msgid ""
+"Click individual date to select that date only. Click the appropriate "
+"weekday Header to select all occurences of that weekday."
+msgstr "「ãã‚Œã ã‘ã§æ—¥ä»˜ã‚’é¸æŠžã—ã€å€‹ã€…ã®æ—¥ä»˜ã‚’クリックã—ã¾ã™ã€‚é©åˆ‡ãªã‚¯ãƒªãƒƒã‚¯ã—㦠"ãã®æ›œæ—¥ã®ã™ã¹ã¦ã®å‡ºç¾ç®‡æ‰€ã‚’é¸æŠžã™ã‚‹ã«ã¯ã€å¹³æ—¥ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:914
+#: usr/local/www/firewall_schedule_edit.php:996
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:995
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:995
+msgid "Start Time"
+msgstr "時間を開始"
+
+#: usr/local/www/firewall_schedule_edit.php:914
+#: usr/local/www/firewall_schedule_edit.php:997
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:996
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:996
+msgid "Stop Time"
+msgstr "åœæ­¢æ™‚é–“"
+
+#: usr/local/www/firewall_schedule_edit.php:927
+#: usr/local/www/firewall_schedule_edit.php:952
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:951
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:951
+msgid "Hr"
+msgstr "時間"
+
+#: usr/local/www/firewall_schedule_edit.php:934
+#: usr/local/www/firewall_schedule_edit.php:959
+#: usr/local/www/firewall_schedule_edit.php:933
+#: usr/local/www/firewall_schedule_edit.php:958
+#: usr/local/www/firewall_schedule_edit.php:933
+#: usr/local/www/firewall_schedule_edit.php:958
+msgid "Min"
+msgstr "ミン"
+
+#: usr/local/www/firewall_schedule_edit.php:963
+#: usr/local/www/firewall_schedule_edit.php:962
+#: usr/local/www/firewall_schedule_edit.php:962
+msgid ""
+"Select the time range for the day(s) selected on the Month(s) above. A full "
+"day is 0:00-23:59."
+msgstr "「上記ã®æœˆï¼ˆ S )上ã§é¸æŠžã—ãŸæ—¥ã®ï¼ˆS )ã®æ™‚間範囲をé¸æŠžã—ã¾ã™ã€‚完全㪠"æ—¥ã¯0:00-23:59ã§ã™ã€‚"
+
+#: usr/local/www/firewall_schedule_edit.php:967
+#: usr/local/www/firewall_schedule_edit.php:966
+#: usr/local/www/firewall_schedule_edit.php:966
+msgid "Time Range Description"
+msgstr "時間範囲説明"
+
+#: usr/local/www/firewall_schedule_edit.php:977
+#: usr/local/www/firewall_schedule_edit.php:976
+#: usr/local/www/firewall_schedule_edit.php:976
+msgid "Add Time"
+msgstr "時間を加ãˆ"
+
+#: usr/local/www/firewall_schedule_edit.php:978
+#: usr/local/www/firewall_schedule_edit.php:977
+#: usr/local/www/firewall_schedule_edit.php:977
+msgid "Clear Selection"
+msgstr "é¸æŠžã‚’クリア"
+
+#: usr/local/www/firewall_schedule_edit.php:987
+#: usr/local/www/firewall_schedule_edit.php:986
+#: usr/local/www/firewall_schedule_edit.php:986
+msgid "Schedule repeat"
+msgstr "スケジュールã®ç¹°ã‚Šè¿”ã—"
+
+#: usr/local/www/firewall_schedule_edit.php:990
+#: usr/local/www/firewall_schedule_edit.php:989
+#: usr/local/www/firewall_schedule_edit.php:989
+msgid "Configured Ranges"
+msgstr "構æˆã•ã‚ŒãŸç¯„囲"
+
+#: usr/local/www/firewall_schedule_edit.php:995
+#: usr/local/www/firewall_schedule_edit.php:994
+#: usr/local/www/firewall_schedule_edit.php:994
+msgid "Day(s)"
+msgstr "日( S )"
+
+#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370
+#: usr/local/www/firewall_shaper.php:370
+msgid "Disable shaper on interface"
+msgstr "インターフェイス上ã§ã‚·ã‚§ãƒ¼ãƒ‘ーを無効"
+
+#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425
+#: usr/local/www/firewall_shaper.php:426 usr/local/www/firewall_shaper.php:426
+msgid "Remove Shaper"
+msgstr "シェイパーを削除ã™ã‚‹"
+
+#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161
+#: usr/local/www/diag_backup.php:161
+msgid "Restored base_package menus after configuration restore."
+msgstr "コンフィギュレーション後ã«å¾©å…ƒbase_packageメニューãŒå¾©å…ƒã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120
+#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58
+#: usr/local/www/status_rrd_graph_settings.php:155
+#: usr/local/www/status_services.php:275
+#: usr/local/www/widgets/widgets/services_status.widget.php:80
+#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173
+#: usr/local/www/status_rrd_graph_settings.php:156
+#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256
+#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181
+#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:172
+#: etc/inc/service-utils.inc:255 etc/inc/service-utils.inc:272
+#: usr/local/www/status_rrd_graph_settings.php:58
+#: usr/local/www/status_rrd_graph_settings.php:156
+#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:138
+#: usr/local/www/fbegin.inc:172 etc/inc/service-utils.inc:272
+msgid "Captive Portal"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«"
+
+#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182
+#: usr/local/www/diag_backup.php:182
+msgid "Captive Portal Vouchers"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121
+#: usr/local/www/status_services.php:263
+#: usr/local/www/widgets/widgets/services_status.widget.php:68
+#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183
+#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147
+#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:240
+#: etc/inc/service-utils.inc:257 usr/local/www/diag_backup.php:183
+#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:257
+msgid "DNS Forwarder"
+msgstr "DNSフォワーダ"
+
+#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125
+#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184
+#: usr/local/www/fbegin.inc:151 usr/local/www/fbegin.inc:143
+#: usr/local/www/diag_backup.php:184 usr/local/www/fbegin.inc:143
+msgid "DHCP Server"
+msgstr "DHCPサーãƒ"
+
+#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185
+#: usr/local/www/diag_backup.php:185
+msgid "Firewall Rules"
+msgstr "ファイアウォールルール"
+
+#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187
+#: usr/local/www/diag_backup.php:187
+msgid "IPSEC"
+msgstr "IPSEC"
+
+#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191
+#: usr/local/www/diag_backup.php:191
+msgid "PPTP Server"
+msgstr "PPTPサーãƒãƒ¼"
+
+#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193
+#: usr/local/www/diag_backup.php:193
+msgid "Scheduled Tasks"
+msgstr "予定ã•ã‚ŒãŸã‚¿ã‚¹ã‚¯"
+
+#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194
+#: usr/local/www/diag_backup.php:194
+msgid "Syslog"
+msgstr "Syslogã®"
+
+#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196
+#: usr/local/www/diag_backup.php:196
+msgid "Static routes"
+msgstr "スタティックルート"
+
+#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197
+#: usr/local/www/diag_backup.php:197
+msgid "System tunables"
+msgstr "システム調整パラメータ"
+
+#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198
+#: usr/local/www/diag_backup.php:198
+msgid "SNMP Server"
+msgstr "SNMPサーãƒ"
+
+#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200
+#: usr/local/www/diag_backup.php:200
+msgid "VLANS"
+msgstr "ã®VLAN"
+
+#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205
+#: usr/local/www/diag_backup.php:205
+msgid "ALL"
+msgstr "ALL"
+
+#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619
+#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244
+#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735
+#: usr/local/www/diag_backup.php:703 usr/local/www/diag_backup.php:740
+#: usr/local/www/diag_backup.php:244 usr/local/www/diag_backup.php:703
+#: usr/local/www/diag_backup.php:740
+msgid "Restore configuration"
+msgstr "設定を復元ã™ã‚‹"
+
+#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246
+#: usr/local/www/diag_backup.php:246
+msgid "Reinstall"
+msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹"
+
+#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673
+#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754
+#: usr/local/www/diag_backup.php:762 usr/local/www/diag_backup.php:248
+#: usr/local/www/diag_backup.php:762
+msgid "Clear Package Lock"
+msgstr "クリアパッケージ·ロック"
+
+#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252
+#: usr/local/www/diag_backup.php:252
+msgid "Restore version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’復元"
+
+#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267
+#: usr/local/www/diag_backup.php:267
+msgid "You must supply and confirm the password for encryption."
+msgstr "ã‚ãªãŸã¯ã€æš—å·åŒ–ã®ãƒ‘スワードを入力ã—ã¦ç¢ºèªã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268
+#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346
+#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346
+msgid "The supplied 'Password' and 'Confirm' field values must match."
+msgstr "供給'パスワード'ã¨' CONFIRMã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ãŒä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344
+#: usr/local/www/diag_backup.php:344
+msgid "You must supply and confirm the password for decryption."
+msgstr "ã‚ãªãŸã¯ã€å¾©å·åŒ–ã«ãƒ‘スワードを入力ã—ã¦ç¢ºèªã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356
+#: usr/local/www/diag_backup.php:356
+#, php-format
+msgid "Warning, could not read file %s"
+msgstr "ã€è­¦å‘Šãƒ•ã‚¡ã‚¤ãƒ«%sを読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362
+#: usr/local/www/diag_backup.php:362
+msgid ""
+"The uploaded file does not appear to contain an encrypted pfsense "
+"configuration."
+msgstr "コンフィグレーション"アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯æš—å·åŒ–ã•ã‚ŒãŸpfsenseã‚’å«ã‚€ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“〠。"
+
+#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369
+#: usr/local/www/diag_backup.php:369
+msgid "Upgrading m0n0wall configuration to pfsense."
+msgstr "pfsenseã™ã‚‹m0n0wallã®æ§‹æˆã‚’アップグレードã™ã‚‹ã€‚"
+
+#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377
+#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:377
+#: usr/local/www/diag_backup.php:380
+msgid ""
+"You have selected to restore an area but we could not locate the correct xml "
+"tag."
+msgstr "「ã‚ãªãŸã¯ã€ã‚¨ãƒªã‚¢ã‚’回復ã™ã‚‹ãŸã‚ã«é¸æŠžã—ãŸãŒã€æˆ‘々ã¯æ­£ã—ã„XML見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"タグを。"
+
+#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392
+#: usr/local/www/diag_backup.php:392
+msgid ""
+"The configuration area has been restored. You may need to reboot the "
+"firewall."
+msgstr "「設定領域ãŒå¾©å…ƒã•ã‚Œã¾ã—ãŸã€‚å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã€ã®ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã‚’。"
+
+#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397
+#: usr/local/www/diag_backup.php:397
+#, php-format
+msgid ""
+"You have selected to restore the full configuration but we could not locate "
+"a %s tag."
+msgstr "「ã‚ãªãŸã¯ã€å®Œå…¨ãªæ§‹æˆã‚’復元ã™ã‚‹ã“ã¨ã‚’é¸æŠžã—ãŸãŒã€æˆ‘々ã¯è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€ %sタグを。"
+
+#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515
+#: usr/local/www/diag_backup.php:515
+msgid "The m0n0wall configuration has been restored and upgraded to pfSense."
+msgstr "m0n0wallã®æ§‹æˆã¯pfSenseã«å¾©å…ƒã—ã¦ã‚¢ãƒƒãƒ—グレードã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485
+#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562
+#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567
+#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567
+msgid "The configuration could not be restored."
+msgstr "設定ã¯å¾©å…ƒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543
+#: usr/local/www/diag_backup.php:548 usr/local/www/diag_backup.php:548
+msgid "The configuration could not be restored (file upload error)."
+msgstr "構æˆã¯ã€ (ファイルã®ã‚¢ãƒƒãƒ—ロードエラー)復元ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556
+#: usr/local/www/diag_backup.php:561 usr/local/www/diag_backup.php:561
+msgid ""
+"XXX - this feature may hose your config (do NOT backrev configs!) - billm"
+msgstr "「XXX - ã“ã®æ©Ÿèƒ½ã¯ã€ã‚ãªãŸã®è¨­å®šã‚’ホースも( backrevãªã„ã‚³ãƒ³ãƒ•ã‚£ã‚°ã‚’è¡Œã† ï¼ ï¼‰ - billm"
+
+#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565
+#: usr/local/www/diag_backup.php:570 usr/local/www/diag_backup.php:570
+msgid "No version selected."
+msgstr "noãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576
+#: usr/local/www/diag_backup.php:581 usr/local/www/diag_backup.php:581
+msgid "Backup/restore"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/リストア"
+
+#: usr/local/www/diag_backup.php:540
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624
+#: usr/local/www/diag_backup.php:624
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+msgid "The firewall configuration has been changed."
+msgstr "ファイアウォールã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/diag_backup.php:540
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624
+#: usr/local/www/diag_backup.php:624
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+msgid "The firewall is now rebooting."
+msgstr "ファイアウォールã¯ã€ä»Šã€å†èµ·å‹•ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139
+#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633
+#: usr/local/www/diag_backup.php:633 usr/local/www/diag_confbak.php:139
+msgid "Config History"
+msgstr "設定変更ã®æ­´å²"
+
+#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140
+#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208
+#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216
+#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207
+#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207
+#: usr/local/www/diag_confbak.php:140
+msgid "Backup/Restore"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—/復元"
+
+#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639
+#: usr/local/www/diag_backup.php:644 usr/local/www/diag_backup.php:644
+msgid "Backup configuration"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®æ§‹æˆ"
+
+#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644
+#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649
+msgid "Click this button to download the system configuration in XML format."
+msgstr "XMLå½¢å¼ã§ã‚·ã‚¹ãƒ†ãƒ æ§‹æˆã‚’ダウンロードã™ã‚‹ã«ã¯ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644
+#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:649
+msgid "Backup area:"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—領域:"
+
+#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651
+#: usr/local/www/diag_backup.php:656 usr/local/www/diag_backup.php:656
+msgid "Do not backup package information."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã•ã‚Œãªã„パッケージ情報を行ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661
+#: usr/local/www/diag_backup.php:666 usr/local/www/diag_backup.php:666
+msgid "Encrypt this configuration file."
+msgstr "ã“ã®æ§‹æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’æš—å·åŒ–ã™ã‚‹ã€‚"
+
+#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669
+#: usr/local/www/diag_backup.php:674 usr/local/www/diag_backup.php:674
+msgid ""
+"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config."
+"xml space!)"
+msgstr "「 ( ï¼ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã—ãªã„RRDデータDO注: RRDデータ設定ã®4メガãƒã‚¤ãƒˆã‚’消費ã™ã‚‹å¯èƒ½æ€§ãŒã€ŒXML空間 )"
+
+#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684
+#: usr/local/www/diag_backup.php:689 usr/local/www/diag_backup.php:689
+msgid "confirm:"
+msgstr "確èªã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691
+#: usr/local/www/diag_backup.php:696 usr/local/www/diag_backup.php:696
+msgid "Download configuration"
+msgstr "ダウンロードã®è¨­å®š"
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703
+#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708
+msgid "Open a"
+msgstr "オープンA"
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703
+#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:708
+msgid ""
+"configuration XML file and click the button below to restore the "
+"configuration."
+msgstr "「構æˆXMLファイルãŠã‚ˆã³å¾©å…ƒã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ã€Œè¨­å®šã‚’。"
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705
+#: usr/local/www/diag_backup.php:710 usr/local/www/diag_backup.php:710
+msgid "Restore area:"
+msgstr "エリアを復元ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713
+#: usr/local/www/diag_backup.php:718 usr/local/www/diag_backup.php:718
+msgid "Configuration file is encrypted."
+msgstr "設定ファイルãŒæš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720
+#: usr/local/www/diag_backup.php:725 usr/local/www/diag_backup.php:725
+msgid "Password :"
+msgstr "パスワード:"
+
+#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728
+#: usr/local/www/diag_backup.php:733 usr/local/www/diag_backup.php:733
+msgid "confirm :"
+msgstr "確èªã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736
+#: usr/local/www/diag_backup.php:741 usr/local/www/diag_backup.php:741
+msgid "The firewall will reboot after restoring the configuration."
+msgstr "ファイアウォールã¯ã€è¨­å®šã‚’復元ã—ãŸå¾Œã«å†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744
+#: usr/local/www/diag_backup.php:749 usr/local/www/diag_backup.php:749
+msgid "Package Functions"
+msgstr "パッケージ·ファンクション"
+
+#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749
+#: usr/local/www/diag_backup.php:755 usr/local/www/diag_backup.php:755
+msgid ""
+"Click this button to reinstall all system packages. This may take a while."
+msgstr "「ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。ã“ã‚Œã¯æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750
+#: usr/local/www/diag_backup.php:756 usr/local/www/diag_backup.php:756
+msgid "Reinstall packages"
+msgstr "パッケージをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
+
+#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753
+#: usr/local/www/diag_backup.php:761 usr/local/www/diag_backup.php:761
+msgid ""
+"Click this button to clear the package lock if a package fails to reinstall "
+"properly after an upgrade."
+msgstr "é©åˆ‡ã«ã‚¢ãƒƒãƒ—グレード後ã€ã€Œãƒ‘ッケージãŒå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ãŸå ´åˆã€ãƒ‘ッケージã®ãƒ­ãƒƒã‚¯ã‚’クリアã™ã‚‹ã«ã¯ã€ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„"。"
+
+#: usr/local/www/firewall_shaper_queues.php:172
+#: usr/local/www/firewall_shaper_queues.php:172
+msgid "Firewall: Shaper: By Queues View"
+msgstr "ファイアウォール:シェイパー:キューを見るã“ã¨ã«ã‚ˆã‚Šã€"
+
+#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:49
+#, php-format
+msgid "Successfully reverted to timestamp %1$s with description "%2$s"."
+msgstr "首尾よã説明「 %2$s ã€ã¨ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã¯%1$sã«æˆ»ã£ãŸã€‚"
+
+#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59
+#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161
+#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162
+#: usr/local/www/diag_confbak.php:171
+#: usr/local/www/firewall_rules_edit.php:1585
+#: usr/local/www/firewall_rules_edit.php:1593
+#: usr/local/www/firewall_nat_edit.php:869
+#: usr/local/www/firewall_nat_edit.php:877
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/diag_confbak.php:49
+#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:111
+#: usr/local/www/diag_confbak.php:162 usr/local/www/diag_confbak.php:171
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+msgid "n/j/y H:i:s"
+msgstr "N / J / Yã®H : I: S"
+
+#: usr/local/www/diag_confbak.php:51 usr/local/www/diag_confbak.php:51
+msgid "Unable to revert to the selected configuration."
+msgstr "é¸æŠžã•ã‚ŒãŸæ§‹æˆã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/diag_confbak.php:59 usr/local/www/diag_confbak.php:59
+#, php-format
+msgid "Deleted backup with timestamp %1$s and description "%2$s"."
+msgstr "タイムスタンプã¯%1$sã¨èª¬æ˜Žã€Œ %2$s ã€ã§å‰Šé™¤ã•ã‚ŒãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—。"
+
+#: usr/local/www/diag_confbak.php:98 usr/local/www/diag_confbak.php:98
+msgid "Configuration History"
+msgstr "構æˆå±¥æ­´"
+
+#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:111
+msgid "Configuration diff from"
+msgstr "ã‹ã‚‰è¨­å®šãƒ‡ãƒ•"
+
+#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206
+#: usr/local/www/diag_confbak.php:208 usr/local/www/diag_confbak.php:152
+#: usr/local/www/diag_confbak.php:208
+msgid "Diff"
+msgstr "デフ"
+
+#: usr/local/www/diag_confbak.php:153
+#: usr/local/www/system_firmware_restorefullbackup.php:140
+#: usr/local/www/system_firmware_restorefullbackup.php:140
+#: usr/local/www/diag_confbak.php:153
+msgid "Date"
+msgstr "日付"
+
+#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155
+#: usr/local/www/diag_confbak.php:155
+msgid "Configuration Change"
+msgstr "構æˆå¤‰æ›´"
+
+#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165
+#: usr/local/www/diag_confbak.php:165
+msgid "Current"
+msgstr "ç¾åœ¨ã®"
+
+#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173
+#: usr/local/www/widgets/widgets/gateways.widget.php:105
+#: usr/local/www/widgets/widgets/gateways.widget.php:128
+#: usr/local/www/widgets/widgets/gateways.widget.php:129
+#: usr/local/www/widgets/widgets/gateways.widget.php:129
+#: usr/local/www/diag_confbak.php:173
+msgid "Unknown"
+msgstr "ä¸æ˜Ž"
+
+#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191
+#: usr/local/www/diag_confbak.php:191
+msgid "Revert to this configuration?"
+msgstr "ã“ã®æ§‹æˆã«æˆ»ã™ï¼Ÿ"
+
+#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192
+#: usr/local/www/diag_confbak.php:192
+msgid "Revert to this configuration"
+msgstr "ã“ã®æ§‹æˆã«æˆ»ã™"
+
+#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196
+#: usr/local/www/diag_confbak.php:196
+msgid "Delete this configuration backup?"
+msgstr "ã“ã®æ§‹æˆã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197
+#: usr/local/www/diag_confbak.php:197
+msgid "Remove this backup"
+msgstr "ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除"
+
+#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202
+#: usr/local/www/diag_confbak.php:202
+msgid "Download this backup"
+msgstr "ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—をダウンロードã™ã‚‹"
+
+#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214
+#: usr/local/www/diag_confbak.php:214
+msgid "No backups found."
+msgstr "見ã¤ã‹ã‚Šã¾ã›ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_virtual_ip.php:106
+#: usr/local/www/firewall_virtual_ip.php:103
+#: usr/local/www/firewall_virtual_ip.php:103
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"NAT mapping."
+msgstr "NATã®ãƒžãƒƒãƒ”ングã¯ã€Œãã‚Œã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/firewall_virtual_ip.php:118
+msgid "This entry cannot be deleted because it is still referenced by CARP"
+msgstr "ãã‚Œã¯ã¾ã CARPã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_virtual_ip.php:124
+msgid ""
+"This entry cannot be deleted because it is still referenced by ip alias entry"
+msgstr "ãã‚Œã¯ã¾ã IPエイリアスエントリã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚〠「ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_virtual_ip.php:149
+#: usr/local/www/firewall_virtual_ip.php:152
+#: usr/local/www/firewall_virtual_ip.php:166
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/firewall_virtual_ip.php:189
+msgid "Virtual IP Addresses"
+msgstr "仮想IPアドレス"
+
+#: usr/local/www/firewall_virtual_ip.php:164
+#: usr/local/www/firewall_virtual_ip.php:167
+#: usr/local/www/firewall_virtual_ip.php:181
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_virtual_ip.php:204
+msgid "The VIP configuration has been changed."
+msgstr "VIPã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115
+#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141
+#: usr/local/www/firewall_virtual_ip.php:175
+#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133
+#: usr/local/www/firewall_virtual_ip.php:212
+#: usr/local/www/firewall_virtual_ip.php:212 usr/local/www/fbegin.inc:133
+msgid "Virtual IPs"
+msgstr "仮想IP"
+
+#: usr/local/www/firewall_virtual_ip.php:173
+#: usr/local/www/firewall_virtual_ip.php:176
+#: usr/local/www/firewall_virtual_ip.php:190
+#: usr/local/www/firewall_virtual_ip.php:213
+#: usr/local/www/firewall_virtual_ip.php:213
+msgid "CARP Settings"
+msgstr "CARPã®è¨­å®š"
+
+#: usr/local/www/firewall_virtual_ip.php:185
+#: usr/local/www/firewall_virtual_ip.php:188
+#: usr/local/www/firewall_virtual_ip.php:202
+#: usr/local/www/firewall_virtual_ip.php:225
+#: usr/local/www/firewall_virtual_ip.php:225
+msgid "Virtual IP address"
+msgstr "仮想IPアドレス"
+
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_virtual_ip.php:291
+msgid "The virtual IP addresses defined on this page may be used in"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§å®šç¾©ã•ã‚ŒãŸä»®æƒ³IPアドレスã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹"
+
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_virtual_ip.php:291
+msgid "mappings."
+msgstr "マッピング。"
+
+#: usr/local/www/firewall_virtual_ip.php:243
+#: usr/local/www/firewall_virtual_ip.php:249
+#: usr/local/www/firewall_virtual_ip.php:269
+#: usr/local/www/firewall_virtual_ip.php:292
+#: usr/local/www/firewall_virtual_ip.php:292
+msgid "You can check the status of your CARP Virtual IPs and interfaces "
+msgstr "ã‚ãªãŸã¯ã€CARPã®ä»®æƒ³IPã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309
+#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297
+#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294
+msgid "apply"
+msgstr "é©ç”¨ã™ã‚‹"
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309
+#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297
+#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:294
+msgid "save"
+msgstr "ä¿å­˜"
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/system_certmanager.php:541
+#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309
+#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298
+#: usr/local/www/system_certmanager.php:649 usr/local/www/guiconfig.inc:297
+#: usr/local/www/system_certmanager.php:650 usr/local/www/guiconfig.inc:294
+#: usr/local/www/system_certmanager.php:650
+#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:294
+msgid "create"
+msgstr "作る"
+
+#: usr/local/www/halt.php:52 usr/local/www/halt.php:61
+#: usr/local/www/halt.php:61
+msgid "The system is halting now. This may take one minute."
+msgstr "システムãŒåœæ­¢ã•ã‚Œã‚‹ã€‚ã“ã‚Œã¯1分ã‹ã‹ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/halt.php:59 usr/local/www/halt.php:54
+#: usr/local/www/halt.php:54
+msgid "Halt system"
+msgstr "åœæ­¢ã‚·ã‚¹ãƒ†ãƒ "
+
+#: usr/local/www/halt.php:67 usr/local/www/halt.php:67
+msgid "Are you sure you want to halt the system?"
+msgstr "ã‚ãªãŸã¯ã‚·ã‚¹ãƒ†ãƒ ã‚’åœæ­¢ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/index.php:115 usr/local/www/index.php:126
+#: usr/local/www/index.php:129 usr/local/www/index.php:126
+msgid "Widget configuration has been changed."
+msgstr "ウィジェットã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/index.php:172 usr/local/www/index.php:183
+#: usr/local/www/index.php:186 usr/local/www/index.php:183
+#, php-format
+msgid "Welcome to %s!\n"
+msgstr "%sã¸ã‚ˆã†ã“ã ï¼ \n"
+
+#: usr/local/www/index.php:173 usr/local/www/index.php:184
+#: usr/local/www/index.php:187 usr/local/www/index.php:184
+msgid "One moment while we start the initial setup wizard."
+msgstr "一瞬ã€æˆ‘々ã¯æœ€åˆã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ウィザードを開始ã—ã¦ã„る。"
+
+#: usr/local/www/index.php:174 usr/local/www/index.php:185
+#: usr/local/www/index.php:188 usr/local/www/index.php:185
+msgid ""
+"Embedded platform users: Please be patient, the wizard takes a little longer "
+"to run than the normal GUI."
+msgstr "通常ã®GUIよりも実行ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€Œçµ„è¾¼ã¿ãƒ—ラットフォームã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„ã€ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã¯å°‘ã—時間ãŒã‹ã‹ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/index.php:175 usr/local/www/index.php:186
+#: usr/local/www/index.php:189 usr/local/www/index.php:186
+#, php-format
+msgid "To bypass the wizard, click on the %s logo on the initial page."
+msgstr "ウィザードをãƒã‚¤ãƒ‘スã™ã‚‹ã«ã¯ã€æœ€åˆã®ãƒšãƒ¼ã‚¸ã«ã‚ã‚‹%sã®ãƒ­ã‚´ã‚’クリックã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/index.php:454 usr/local/www/index.php:446
+#: usr/local/www/index.php:463 usr/local/www/index.php:468
+#: usr/local/www/index.php:465 usr/local/www/index.php:465
+msgid "Status: Dashboard"
+msgstr "ステータス:ダッシュボード"
+
+#: usr/local/www/index.php:486 usr/local/www/index.php:478
+#: usr/local/www/index.php:490 usr/local/www/index.php:494
+#: usr/local/www/index.php:491 usr/local/www/index.php:491
+msgid "Available Widgets"
+msgstr "利用å¯èƒ½ãªã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆ"
+
+#: usr/local/www/index.php:524 usr/local/www/index.php:516
+#: usr/local/www/index.php:528 usr/local/www/index.php:531
+#: usr/local/www/index.php:528
+msgid "Welcome to the Dashboard page"
+msgstr "ダッシュボードページã¸ã‚ˆã†ã“ã"
+
+#: usr/local/www/index.php:532 usr/local/www/index.php:524
+#: usr/local/www/index.php:536 usr/local/www/index.php:538
+#: usr/local/www/index.php:535 usr/local/www/index.php:535
+msgid ""
+"This page allows you to customize the information you want to be displayed!"
+msgstr ""ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€è¡¨ç¤ºã—ãŸã„情報をカスタマイズã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ ï¼"
+
+#: usr/local/www/index.php:533 usr/local/www/index.php:525
+#: usr/local/www/index.php:537 usr/local/www/index.php:539
+#: usr/local/www/index.php:536 usr/local/www/index.php:536
+msgid "To get started click the"
+msgstr "クリック開始ã™ã‚‹ã«ã¯"
+
+#: usr/local/www/index.php:533 usr/local/www/index.php:525
+#: usr/local/www/index.php:537 usr/local/www/index.php:539
+#: usr/local/www/index.php:536 usr/local/www/index.php:536
+msgid "icon to add widgets."
+msgstr "ウィジェットを追加ã™ã‚‹ã«ã¯ã€ã‚¢ã‚¤ã‚³ãƒ³ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/index.php:535 usr/local/www/index.php:527
+#: usr/local/www/index.php:539 usr/local/www/index.php:541
+#: usr/local/www/index.php:538 usr/local/www/index.php:538
+msgid "You can move any widget around by clicking and dragging the title."
+msgstr "ã‚ãªãŸã¯ã‚¿ã‚¤ãƒˆãƒ«ã‚’クリックã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§å‘¨ã‚Šã®ä»»æ„ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’移動ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/index.php:541 usr/local/www/index.php:534
+#: usr/local/www/index.php:546 usr/local/www/index.php:548
+#: usr/local/www/index.php:545 usr/local/www/index.php:545
+msgid "Click here to add widgets"
+msgstr "ウィジェットを追加ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¦ãã ã•ã„"
+
+#: usr/local/www/index.php:543 usr/local/www/index.php:536
+#: usr/local/www/index.php:548 usr/local/www/index.php:550
+#: usr/local/www/index.php:547 usr/local/www/index.php:547
+msgid "Click here for help"
+msgstr "ヘルプã¯ã“ã¡ã‚‰ã‹ã‚‰"
+
+#: usr/local/www/index.php:547 usr/local/www/index.php:540
+#: usr/local/www/index.php:552 usr/local/www/index.php:554
+#: usr/local/www/index.php:551 usr/local/www/index.php:551
+msgid "Save Settings"
+msgstr "設定をä¿å­˜ã™ã‚‹"
+
+#: usr/local/www/index.php:699 usr/local/www/index.php:692
+#: usr/local/www/index.php:704 usr/local/www/index.php:701
+#: usr/local/www/index.php:701
+msgid "Loading selected widget"
+msgstr "é¸æŠžã—ãŸã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®ãƒ­ãƒ¼ãƒ‰"
+
+#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184
+#: usr/local/www/interfaces.php:185 usr/local/www/interfaces.php:185
+#, php-format
+msgid "Sorry, an alias with the name %s already exists."
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€åå‰%sã¨ã®åˆ¥åãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355
+#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350
+#: usr/local/www/interfaces.php:351 usr/local/www/interfaces.php:350
+msgid "You have already applied your settings!"
+msgstr "ã‚ãªãŸã¯ã™ã§ã«ã‚ãªãŸã®è¨­å®šã‚’é©ç”¨ã—㟠ï¼"
+
+#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443
+#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428
+#: usr/local/www/interfaces.php:433 usr/local/www/interfaces.php:429
+#: usr/local/www/interfaces.php:429
+msgid "An interface with the specified description already exists."
+msgstr "指定ã•ã‚ŒãŸèª¬æ˜Žã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434
+#: usr/local/www/interfaces.php:439 usr/local/www/interfaces.php:435
+#: usr/local/www/interfaces.php:435
+msgid ""
+"The DHCP Server is active on this interface and it can be used only with a "
+"static IP configuration. Please disable the DHCP Server service on this "
+"interface first, then change the interface configuration."
+msgstr "「DHCPサーãƒã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹ã¨ã€ãã‚Œã ã‘ã§ä½¿ç”¨ã§ãる「é™çš„IP設定。ã“ã®ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§DHCPサーãƒãƒ¼ã‚µãƒ¼ãƒ“スを無効ã«ã—ã¦ãã ã•ã„ã¾ãšã€ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451
+#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:437
+#: usr/local/www/interfaces.php:437
+msgid ""
+"The DHCP6 Server is active on this interface and it can be used only with a "
+"static IPv6 configuration. Please disable the DHCPv6 Server service on this "
+"interface first, then change the interface configuration."
+msgstr "「 DHCP6 Serverã¯ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹ã¨ã€ãã‚Œã ã‘ã§ä½¿ç”¨ã§ãる「é™çš„IPv6設定。ã“ã®ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§DHCPv6サーãƒã‚µãƒ¼ãƒ“スを無効ã«ã—ã¦ãã ã•ã„ã¾ãšã€ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364
+#: usr/local/www/status_interfaces.php:192
+#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456
+#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:1469
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:1514
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:1508
+#: usr/local/www/status_interfaces.php:269 usr/local/www/interfaces.php:442
+#: usr/local/www/interfaces.php:1508
+msgid "IPv4 address"
+msgstr "IPv4アドレス"
+
+#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495
+msgid "Subnet bit count"
+msgstr "サブãƒãƒƒãƒˆãƒ“ット数"
+
+#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480
+msgid ""
+"This interface is referenced by VIPs please delete those before setting the "
+"interface to 'none' configuration."
+msgstr "'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã€Œã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€è¨­å®šã™ã‚‹å‰ã«ã€ãれらを削除ã—ã¦ãã ã•ã„è¦äººã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„る〠。"
+
+#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521
+#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541
+#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528
+#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526
+#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:511
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:533
+#: usr/local/www/interfaces.php:454 usr/local/www/interfaces.php:507
+#: usr/local/www/interfaces.php:519 usr/local/www/interfaces.php:529
+#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:454
+#: usr/local/www/interfaces.php:507 usr/local/www/interfaces.php:519
+#: usr/local/www/interfaces.php:529 usr/local/www/interfaces.php:534
+#, php-format
+msgid "You have to reassign the interface to be able to configure as %s."
+msgstr "ã‚ãªãŸã¯%s.ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’å†å‰²ã‚Šå½“ã¦ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748
+#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926
+#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914
+#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1984
+#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972
+#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972
+msgid "Modem Port"
+msgstr "モデムãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces_ppps_edit.php:182
+#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472
+#: usr/local/www/interfaces.php:1914
+#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469
+#: usr/local/www/interfaces.php:1902
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457
+#: usr/local/www/interfaces.php:1926 usr/local/www/interfaces.php:462
+#: usr/local/www/interfaces.php:1972
+#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458
+#: usr/local/www/interfaces.php:1960
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458
+#: usr/local/www/interfaces.php:1960
+msgid "Phone Number"
+msgstr "電話番å·"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445
+#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468
+#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467
+msgid "PPPoE username"
+msgstr "PPPoEã®ãƒ¦ãƒ¼ã‚¶å"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445
+#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468
+#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467
+msgid "PPPoE password"
+msgstr "PPPoEã®ãƒ‘スワード"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807
+#: usr/local/www/interfaces.php:1926
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498
+#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973
+#: usr/local/www/interfaces.php:2092
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:2046
+#: usr/local/www/interfaces.php:2168 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157
+msgid "Dial on demand"
+msgstr "ダイヤルオンデマンド"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+msgid "Idle timeout value"
+msgstr "アイドルタイムアウト値"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477
+msgid "PPTP username"
+msgstr "PPTPユーザå"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477
+msgid "PPTP password"
+msgstr "PPTPã®ãƒ‘スワード"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477
+msgid "PPTP local IP address"
+msgstr "PPTPローカルIPアドレス"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477
+msgid "PPTP subnet"
+msgstr "PPTPサブãƒãƒƒãƒˆ"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477
+msgid "PPTP remote IP address"
+msgstr "PPTPリモートIPアドレス"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487
+msgid "L2TP username"
+msgstr "L2TPã®ãƒ¦ãƒ¼ã‚¶å"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487
+msgid "L2TP password"
+msgstr "L2TPパスワード"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487
+msgid "L2TP remote IP address"
+msgstr "L2TPリモートIPアドレス"
+
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470
+#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129
+#: usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcpv6_edit.php:198
+#: usr/local/www/status_dhcpv6_leases.php:359
+#: usr/local/www/services_dhcpv6_edit.php:201
+#: usr/local/www/status_interfaces.php:297
+#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509
+#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899
+#: usr/local/www/services_dhcpv6_edit.php:200
+#: usr/local/www/status_interfaces.php:300
+#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/services_dhcpv6_edit.php:203
+#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494
+#: usr/local/www/interfaces.php:1574 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:1620 usr/local/www/interfaces.php:495
+#: usr/local/www/interfaces.php:1613 usr/local/www/diag_ndp.php:129
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/services_dhcpv6_edit.php:203
+#: usr/local/www/status_interfaces.php:300
+#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:495
+#: usr/local/www/interfaces.php:1613
+msgid "IPv6 address"
+msgstr "IPv6アドレス"
+
+#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563
+#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550
+#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:553
+#: usr/local/www/interfaces.php:553
+msgid "A valid IPv4 address must be specified."
+msgstr "有効ãªIPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123
+#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565
+#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128
+#: usr/local/www/interfaces.php:574 usr/local/www/interfaces.php:570
+#: usr/local/www/services_dhcpv6_edit.php:128 usr/local/www/interfaces.php:570
+msgid "A valid IPv6 address must be specified."
+msgstr "有効ãªIPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569
+#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566
+#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581
+#: usr/local/www/interfaces.php:590 usr/local/www/interfaces.php:592
+#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588
+#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588
+msgid "A valid subnet bit count must be specified."
+msgstr "有効ãªã‚µãƒ–ãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571
+#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583
+#: usr/local/www/interfaces.php:594 usr/local/www/interfaces.php:590
+#: usr/local/www/interfaces.php:590
+msgid "A valid alias IP address must be specified."
+msgstr "有効ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573
+#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585
+#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:592
+#: usr/local/www/interfaces.php:592
+msgid "A valid alias subnet bit count must be specified."
+msgstr "有効ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚µãƒ–ãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103
+#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587
+#: usr/local/www/interfaces.php:584 usr/local/www/interfaces.php:599
+#: usr/local/www/system_routes_edit.php:107 usr/local/www/interfaces.php:610
+#: usr/local/www/interfaces.php:606 usr/local/www/system_routes_edit.php:109
+#: usr/local/www/interfaces.php:606
+msgid "A valid gateway must be specified."
+msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591
+#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603
+#: usr/local/www/interfaces.php:614 usr/local/www/interfaces.php:610
+#: usr/local/www/interfaces.php:610
+msgid "The service name contains invalid characters."
+msgstr "サービスåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539
+#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593
+#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590
+#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223
+#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621
+#: usr/local/www/interfaces.php:616 usr/local/www/interfaces.php:632
+#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:628
+#: usr/local/www/interfaces_ppps_edit.php:223 usr/local/www/interfaces.php:612
+#: usr/local/www/interfaces.php:628
+msgid "The idle timeout value must be an integer."
+msgstr "アイドルタイムアウト値ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220
+#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593
+#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608
+#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:615
+msgid "A valid PPPoE reset hour must be specified (0-23)."
+msgstr "有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆæ™‚ã«ã¯ã€ ( 0-23 )を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223
+#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596
+#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611
+#: usr/local/www/interfaces.php:622 usr/local/www/interfaces.php:618
+#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:618
+msgid "A valid PPPoE reset minute must be specified (0-59)."
+msgstr "有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆåˆ†ï¼ˆ 0〜59)を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225
+#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598
+#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613
+#: usr/local/www/interfaces.php:624 usr/local/www/interfaces.php:620
+#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:620
+msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)."
+msgstr "有効ãªã®PPPoEリセット日ã¯ï¼ˆ YYYY / MM / DD )を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603
+#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces.php:626 usr/local/www/interfaces.php:622
+#: usr/local/www/interfaces.php:622
+msgid "A valid PPTP local IP address must be specified."
+msgstr "有効ãªPPTPローカルIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605
+#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617
+#: usr/local/www/interfaces.php:628 usr/local/www/interfaces.php:624
+#: usr/local/www/interfaces.php:624
+msgid "A valid PPTP subnet bit count must be specified."
+msgstr "有効ãªPPTPサブãƒãƒƒãƒˆãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607
+#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619
+#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:626
+#: usr/local/www/interfaces.php:626
+msgid "A valid PPTP remote IP address must be specified."
+msgstr "有効ãªPPTPリモートIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613
+#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625
+#: usr/local/www/interfaces.php:637 usr/local/www/interfaces.php:633
+#: usr/local/www/interfaces.php:633
+msgid "The MTU must be greater than 576 bytes."
+msgstr "MTUã¯ã€ã‚ˆã‚Šå¤§ãã576ãƒã‚¤ãƒˆã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627
+#: usr/local/www/interfaces.php:668 usr/local/www/interfaces.php:664
+#: usr/local/www/interfaces.php:664
+msgid "The MSS must be greater than 576 bytes."
+msgstr "MSSã¯ã€ã‚ˆã‚Šå¤§ãã576ãƒã‚¤ãƒˆã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164
+#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283
+#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107
+#: usr/local/www/interfaces_wireless_edit.php:84
+#: usr/local/www/interfaces_wireless_edit.php:176
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:187
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404
+#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468
+#: usr/local/www/system_advanced_misc.php:334
+#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619
+#: usr/local/www/interfaces.php:2342
+#: usr/local/www/load_balancer_pool_edit.php:195
+#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293
+#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353
+#: usr/local/www/interfaces_wireless.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616
+#: usr/local/www/interfaces.php:2330
+#: usr/local/www/load_balancer_pool_edit.php:193
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:178
+#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473
+#: usr/local/www/interfaces_wireless.php:110
+#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631
+#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:672
+#: usr/local/www/interfaces.php:2406 usr/local/www/interfaces.php:668
+#: usr/local/www/interfaces.php:2395
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:178
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473
+#: usr/local/www/interfaces_wireless.php:110
+#: usr/local/www/status_lb_pool.php:131
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:193
+#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:668
+#: usr/local/www/interfaces.php:2395
+msgid "Mode"
+msgstr "モード"
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174
+#: usr/local/www/status_interfaces.php:265
+#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622
+#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365
+#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340
+#: usr/local/www/interfaces.php:634 usr/local/www/interfaces.php:2370
+#: usr/local/www/interfaces.php:675 usr/local/www/interfaces.php:2416
+#: usr/local/www/interfaces.php:671 usr/local/www/interfaces.php:2405
+#: usr/local/www/status_interfaces.php:365 usr/local/www/interfaces.php:671
+#: usr/local/www/interfaces.php:2405
+msgid "SSID"
+msgstr "SSID"
+
+#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657
+#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669
+#: usr/local/www/interfaces.php:710 usr/local/www/interfaces.php:706
+#: usr/local/www/interfaces.php:706
+msgid ""
+"Invalid WEP key size. Sizes should be 40 (64) bit keys or 104 (128) bit."
+msgstr ""無効ãªWEPキーã®ã‚µã‚¤ã‚ºã€‚サイズã¯40 ( 64 )ビットキーã€ã¾ãŸã¯104 ( 128 )ビットã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665
+#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677
+#: usr/local/www/interfaces.php:718 usr/local/www/interfaces.php:714
+#: usr/local/www/interfaces.php:714
+msgid "The WPA passphrase must be between 8 and 63 characters long."
+msgstr "パスフレーズã®é•·ã•ã¯8 〜63文字ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:659
+#, php-format
+msgid "Interface %s dynamic gateway"
+msgstr "インタフェースã¯ã€å‹•çš„ゲートウェイを%s"
+
+#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090
+#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092
+#: usr/local/www/interfaces.php:1134 usr/local/www/interfaces.php:1129
+#: usr/local/www/interfaces.php:1129
+#, php-format
+msgid ""
+"Unable to change mode to %s. You may already have the maximum number of "
+"wireless clones supported in this mode."
+msgstr "ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚ŒãŸç„¡ç·šã‚¯ãƒ­ãƒ¼ãƒ³"ã™ã§ã«æœ€å¤§æ•°ã‚’æŒã£ã¦ã„ã‚‹ã“ã¨ãŒã‚ã‚Š%s.ã™ã‚‹ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118
+#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/interfaces.php:1157
+msgid "Static IPv4"
+msgstr "é™çš„IPv4"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86
+#: usr/local/www/status_interfaces.php:109
+#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118
+#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106
+#: usr/local/www/vpn_pppoe.php:87 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/vpn_pppoe.php:87 usr/local/www/status_interfaces.php:130
+#: usr/local/www/interfaces.php:1157
+msgid "PPPoE"
+msgstr "PPPoEã®"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124
+#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166
+#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118
+#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145
+#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:165
+#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/status_interfaces.php:145
+#: usr/local/www/fbegin.inc:165 usr/local/www/interfaces.php:1157
+msgid "PPTP"
+msgstr "PPTP"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139
+#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167
+#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118
+#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160
+#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:166
+#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/status_interfaces.php:160 usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:166
+#: usr/local/www/interfaces.php:1157
+msgid "L2TP"
+msgstr "L2TP"
+
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121
+#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1158
+msgid "Static IPv6"
+msgstr "é™çš„IPv6"
+
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121
+#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1158
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326
+#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327
+#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364
+#: usr/local/www/interfaces.php:1364
+#, php-format
+msgid "The %s configuration has been changed."
+msgstr "%s構æˆãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326
+#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327
+#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364
+#: usr/local/www/interfaces.php:1364
+msgid "Don't forget to adjust the DHCP Server range if needed after applying."
+msgstr "é©ç”¨ã—ãŸå¾Œã€å¿…è¦ã«å¿œã˜ã¦ã€ DHCPサーãƒãƒ¼ã®ç¯„囲を調整ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。"
+
+#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335
+#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336
+#: usr/local/www/interfaces.php:1378 usr/local/www/interfaces.php:1373
+#: usr/local/www/interfaces.php:1373
+msgid "General configuration"
+msgstr "一般的ãªæ§‹æˆ"
+
+#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341
+#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342
+#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1379
+#: usr/local/www/interfaces.php:1379
+msgid "Enable Interface"
+msgstr "インターフェイスをイãƒãƒ¼ãƒ–ルã«ã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351
+#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352
+#: usr/local/www/interfaces.php:1394 usr/local/www/interfaces.php:1389
+#: usr/local/www/interfaces.php:1389
+msgid "Enter a description (name) for the interface here."
+msgstr "ã“ã“ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®èª¬æ˜Žï¼ˆåå‰ï¼‰ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355
+#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356
+#: usr/local/www/interfaces.php:1398 usr/local/www/interfaces.php:1393
+#: usr/local/www/interfaces.php:1393
+msgid "IPv4 Configuration Type"
+msgstr "IPv4ã®æ§‹æˆã‚¿ã‚¤ãƒ—"
+
+#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371
+#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372
+#: usr/local/www/interfaces.php:1414 usr/local/www/interfaces.php:1409
+#: usr/local/www/interfaces.php:1409
+msgid "IPv6 Configuration Type"
+msgstr "IPv6ã®æ§‹æˆã‚¿ã‚¤ãƒ—"
+
+#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396
+#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397
+#: usr/local/www/interfaces.php:1439 usr/local/www/interfaces.php:1434
+#: usr/local/www/interfaces.php:1434
+msgid "Insert my local MAC address"
+msgstr "ç§ã®åœ°å…ƒã®MACアドレスを挿入"
+
+#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399
+#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400
+#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1437
+#: usr/local/www/interfaces.php:1437
+msgid ""
+"This field can be used to modify ("spoof") the MAC address of this "
+"interface"
+msgstr "「ã“ã‚Œã®MACアドレス "(ãªã‚Šã™ã¾ã—) ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å¤‰æ›´ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹""
+
+#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401
+#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402
+#: usr/local/www/interfaces.php:1444 usr/local/www/interfaces.php:1439
+#: usr/local/www/interfaces.php:1439
+msgid "(may be required with some cable connections)"
+msgstr "(一部ã®ã‚±ãƒ¼ãƒ–ル接続ã§å¿…è¦ã¨ãªã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ï¼‰"
+
+#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402
+#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403
+#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1440
+#: usr/local/www/interfaces.php:1440
+msgid ""
+"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank"
+msgstr "XX: XX : XX : XX : XX : XXã¾ãŸã¯ç©ºç™½ã®ã¾ã¾ã«"次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/interfaces.php:1303
+#: usr/local/www/interfaces_ppps_edit.php:757
+#: usr/local/www/interfaces.php:1407
+#: usr/local/www/interfaces_ppps_edit.php:758
+#: usr/local/www/interfaces.php:1395
+#: usr/local/www/interfaces_ppps_edit.php:764
+#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1450
+#: usr/local/www/interfaces_ppps_edit.php:761
+#: usr/local/www/interfaces.php:1445
+#: usr/local/www/interfaces_ppps_edit.php:761
+#: usr/local/www/interfaces.php:1445
+msgid "MTU"
+msgstr "MTU"
+
+#: usr/local/www/interfaces.php:1307
+msgid ""
+"If you leave this field blank, the adapter's default MTU will be used. This "
+"is typically 1500 bytes but can vary on some hardware."
+msgstr "「ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ã‚¢ãƒ€ãƒ—ã‚¿ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®MTUãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ã€Œé€šå¸¸ã€ 1500ãƒã‚¤ãƒˆã§ã™ãŒã€ã„ãã¤ã‹ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ä¸Šã§ç•°ãªã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416
+#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417
+#: usr/local/www/interfaces.php:1461 usr/local/www/interfaces.php:1456
+#: usr/local/www/interfaces.php:1456
+msgid "MSS"
+msgstr "MSS"
+
+#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420
+#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421
+#: usr/local/www/interfaces.php:1465 usr/local/www/interfaces.php:1460
+#: usr/local/www/interfaces.php:1460
+msgid ""
+"If you enter a value in this field, then MSS clamping for TCP connections to "
+"the value entered above minus 40 (TCP/IP header size) will be in effect."
+msgstr "マイナス40 ( TCP / IPヘッダã®ã‚µã‚¤ã‚ºï¼‰ã®ä¸Šã«å…¥åŠ›ã•ã‚ŒãŸå€¤ãŒæœ‰åŠ¹ã«ãªã‚Šã¾ã™"ã‚ãªãŸã¯ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã™ã‚‹ã¨ã€ MSSã¯ã€ã¸ã®TCP接続ã™ã‚‹ãŸã‚ã®ã‚¯ãƒ©ãƒ³ãƒ—〠。"
+
+#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429
+#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430
+#: usr/local/www/interfaces.php:1474 usr/local/www/interfaces.php:1469
+#: usr/local/www/interfaces.php:1469
+msgid "Speed and duplex"
+msgstr "速度ã¨äºŒé‡"
+
+#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450
+#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451
+#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1490
+#: usr/local/www/interfaces.php:1490
+msgid ""
+"Here you can explicitly set speed and duplex mode for this interface. "
+"WARNING: You MUST leave this set to autoselect (automatically negotiate "
+"speed) unless the port this interface connects to has its speed and duplex "
+"forced."
+msgstr "「ã“ã“ã§ã¯ã€æ˜Žç¤ºçš„ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®é€Ÿåº¦ã¨äºŒé‡ãƒ¢ãƒ¼ãƒ‰ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ "警告:強制"ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã€ãã®é€Ÿåº¦ã¨ãƒ‡ãƒ¥ãƒ—レックスãŒæŒã£ã¦ã„ã‚‹ã«æŽ¥ç¶šã™ã‚‹ãƒãƒ¼ãƒˆãŒãªã„é™ã‚Šï¼ˆé€Ÿåº¦ã‚’自動的交渉) ã€ã‚ªãƒ¼ãƒˆã‚»ãƒ¬ã‚¯ãƒˆãŸã‚ã«ã“ã®ã‚»ãƒƒãƒˆã‚’残ã—ã¦ãŠãå¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465
+#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466
+#: usr/local/www/interfaces.php:1511 usr/local/www/interfaces.php:1505
+#: usr/local/www/interfaces.php:1505
+msgid "Static IPv4 configuration"
+msgstr "é™çš„IPv4ã®è¨­å®š"
+
+#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504
+#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245
+#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600
+#: usr/local/www/interfaces.php:1505 usr/local/www/interfaces.php:1610
+#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1550
+#: usr/local/www/interfaces.php:1656 usr/local/www/system_routes_edit.php:274
+#: usr/local/www/interfaces.php:1544 usr/local/www/interfaces.php:1649
+#: usr/local/www/system_routes_edit.php:268 usr/local/www/interfaces.php:1544
+#: usr/local/www/interfaces.php:1649
+msgid "add a new one."
+msgstr "æ–°ã—ã„ã‚‚ã®ã‚’追加ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507
+#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508
+#: usr/local/www/interfaces.php:1553 usr/local/www/interfaces.php:1547
+#: usr/local/www/interfaces.php:1547
+msgid ""
+"If this interface is an Internet connection, select an existing Gateway from "
+"the list or add one using the link above"
+msgstr "リスト「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã®å ´åˆã¯ã€æ—¢å­˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ã¾ãŸã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦1を追加"
+
+#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224
+#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521
+#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509
+#: usr/local/www/interfaces.php:1522 usr/local/www/system_routes_edit.php:283
+#: usr/local/www/interfaces.php:1567 usr/local/www/system_routes_edit.php:287
+#: usr/local/www/interfaces.php:1561 usr/local/www/system_routes_edit.php:281
+#: usr/local/www/interfaces.php:1561
+msgid "Add new gateway:"
+msgstr "æ–°ã—ã„ゲートウェイを追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529
+#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530
+#: usr/local/www/interfaces.php:1575 usr/local/www/interfaces.php:1569
+#: usr/local/www/interfaces.php:1569
+msgid "Default gateway:"
+msgstr "デフォルトゲートウェイ:"
+
+#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240
+#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532
+#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520
+#: usr/local/www/interfaces.php:1533 usr/local/www/system_routes_edit.php:299
+#: usr/local/www/interfaces.php:1578 usr/local/www/system_routes_edit.php:305
+#: usr/local/www/interfaces.php:1572 usr/local/www/system_routes_edit.php:299
+#: usr/local/www/interfaces.php:1572
+msgid "Gateway Name:"
+msgstr "ゲートウェイå:"
+
+#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535
+#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536
+#: usr/local/www/interfaces.php:1581 usr/local/www/interfaces.php:1575
+#: usr/local/www/interfaces.php:1575
+msgid "Gateway IPv4:"
+msgstr "ゲートウェイã®IPv4 :"
+
+#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540
+#: usr/local/www/system_routes_edit.php:246
+#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538
+#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279
+#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634
+#: usr/local/www/interfaces.php:1539 usr/local/www/interfaces.php:1644
+#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1584
+#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:311
+#: usr/local/www/interfaces.php:1578 usr/local/www/interfaces.php:1683
+#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1578
+#: usr/local/www/interfaces.php:1683
+msgid "Description:"
+msgstr "説明:"
+
+#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548
+#: usr/local/www/system_routes_edit.php:254
+#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654
+#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536
+#: usr/local/www/interfaces.php:1642 usr/local/www/interfaces.php:1546
+#: usr/local/www/interfaces.php:1651 usr/local/www/system_routes_edit.php:312
+#: usr/local/www/interfaces.php:1591 usr/local/www/interfaces.php:1697
+#: usr/local/www/system_routes_edit.php:318 usr/local/www/interfaces.php:1585
+#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:312
+#: usr/local/www/interfaces.php:1585 usr/local/www/interfaces.php:1690
+msgid "Save Gateway"
+msgstr "ゲートウェイã«ä¿å­˜"
+
+#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573
+#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571
+#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1610
+#: usr/local/www/interfaces.php:1610
+msgid "Static IPv6 configuration"
+msgstr "é™çš„IPv6構æˆ"
+
+#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231
+#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594
+#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582
+#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1638
+#: usr/local/www/interfaces.php:1631 usr/local/www/status_interfaces.php:315
+#: usr/local/www/interfaces.php:1631
+msgid "Gateway IPv6"
+msgstr "ゲートウェイã®IPv6"
+
+#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615
+#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613
+#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1652
+#: usr/local/www/interfaces.php:1652
+msgid ""
+"If this interface is an Internet connection, select an existing Gateway from "
+"the list or add a new one using the link above"
+msgstr "リスト「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã®å ´åˆã¯ã€æ—¢å­˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã™ã‚‹ã€ã¾ãŸã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦ã€æ–°ã—ã„1を追加"
+
+#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629
+#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627
+#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1666
+#: usr/local/www/interfaces.php:1666
+msgid "Add new v6 gateway:"
+msgstr "æ–°ã—ã„V6ゲートウェイを追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637
+#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635
+#: usr/local/www/interfaces.php:1681 usr/local/www/interfaces.php:1674
+#: usr/local/www/interfaces.php:1674
+msgid "Default v6 gateway:"
+msgstr "デフォルトV6ゲートウェイ:"
+
+#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640
+#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638
+#: usr/local/www/interfaces.php:1684 usr/local/www/interfaces.php:1677
+#: usr/local/www/interfaces.php:1677
+msgid "Gateway Name IPv6:"
+msgstr "ゲートウェイåã®IPv6 :"
+
+#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643
+#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641
+#: usr/local/www/interfaces.php:1687 usr/local/www/interfaces.php:1680
+#: usr/local/www/interfaces.php:1680
+msgid "Gateway IPv6:"
+msgstr "ゲートウェイã®IPv6 :"
+
+#: usr/local/www/interfaces.php:1564
+msgid "DHCPv6 Prefix Delegation ID"
+msgstr "DHCPv6ã®ãƒ—レフィックス委任ID"
+
+#: usr/local/www/interfaces.php:1588
+msgid ""
+"This ID sets the delegated DHCP-PD prefix number which will be used to setup "
+"the interface."
+msgstr "インターフェース「ã“ã®IDã¯ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹å§”ä»»DHCP -PDプレフィックス数を設定ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676
+#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1722
+#: usr/local/www/interfaces.php:1714 usr/local/www/interfaces.php:1714
+msgid "DHCP client configuration"
+msgstr "DHCPクライアントã®æ§‹æˆ"
+
+#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680
+#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1726
+#: usr/local/www/interfaces.php:1718 usr/local/www/interfaces.php:1718
+msgid "Enable DHCP+"
+msgstr "DHCPを有効ã«ã™ã‚‹"
+
+#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683
+#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1729
+#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1721
+msgid "Enable DHCP+L2TP or DHCP+PPTP."
+msgstr "DHCP L2TPã¾ãŸã¯DHCP PPTPを有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685
+#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1731
+#: usr/local/www/interfaces.php:1723 usr/local/www/interfaces.php:1723
+msgid ""
+"Status changes on this interface will trigger reconfiguration (if necessary) "
+"of the associated PPTP/L2TP link."
+msgstr "関連ã™ã‚‹PPTP/L2TPリンクã®ã€Œ (必è¦ãªã‚‰ã°ï¼‰ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã®å¤‰æ›´ã¯ã€å†è¨­å®šã‚’トリガーã—ã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694
+#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1740
+#: usr/local/www/interfaces.php:1732 usr/local/www/interfaces.php:1732
+msgid ""
+"The value in this field is sent as the DHCP client identifier and hostname "
+"when requesting a DHCP lease. Some ISPs may require this (for client "
+"identification)."
+msgstr "DHCPリースをè¦æ±‚ã™ã‚‹ã¨ãã«ã€Œã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€DHCPクライアント識別å­ã¨ãƒ›ã‚¹ãƒˆåã¨ã—ã¦é€ä¿¡ã•ã‚Œã¾ã™ã€ 。 ISPã«ã‚ˆã£ã¦ã¯ã€ã“ã®ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã€Œè­˜åˆ¥ï¼‰ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700
+#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1746
+#: usr/local/www/interfaces.php:1738 usr/local/www/interfaces.php:1738
+msgid "Alias IPv4 address"
+msgstr "別åIPv4アドレス"
+
+#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714
+#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1760
+#: usr/local/www/interfaces.php:1752 usr/local/www/interfaces.php:1752
+msgid ""
+"The value in this field is used as a fixed alias IPv4 address by the DHCP "
+"client."
+msgstr "クライアント「ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€DHCPãŒå›ºå®šã‚¨ã‚¤ãƒªã‚¢ã‚¹IPv4アドレスã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725
+#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728
+#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1766
+#: usr/local/www/interfaces.php:1766
+msgid "DHCP6 client configuration"
+msgstr "DHCP6クライアント設定"
+
+#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729
+#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732
+#: usr/local/www/interfaces.php:1778 usr/local/www/interfaces.php:1770
+#: usr/local/www/interfaces.php:1770
+msgid "DHCPv6 Unique Identifier (DUID)"
+msgstr "DHCPv6ã®ä¸€æ„識別å­ï¼ˆ DUID )"
+
+#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733
+#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces.php:1782 usr/local/www/interfaces.php:1774
+#: usr/local/www/interfaces.php:1774
+msgid ""
+"The value in this field is sent as the DHCPv6 client identifier when "
+"requesting a DHCPv6 lease."
+msgstr "DHCPv6ã®ãƒªãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹ã€ã¨ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€ DHCPv6クライアント識別å­ã¨ã—ã¦é€ä¿¡ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738
+#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741
+#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1779
+#: usr/local/www/interfaces.php:1779
+#, php-format
+msgid "The current DUID is: '%s'"
+msgstr "ç¾åœ¨ã®DUIDã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ 「 %s'"
+
+#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745
+#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748
+#: usr/local/www/interfaces.php:1794 usr/local/www/interfaces.php:1786
+#: usr/local/www/interfaces.php:1786
+msgid "DHCPv6 Prefix Delegation size"
+msgstr "DHCPv6ã®ãƒ—レフィックス委任サイズ"
+
+#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758
+#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761
+#: usr/local/www/interfaces.php:1807 usr/local/www/interfaces.php:1799
+#: usr/local/www/interfaces.php:1799
+msgid ""
+"The value in this field is the delegated prefix length provided by the "
+"DHCPv6 server. Normally specified by the ISP."
+msgstr "DHCPv6サーãƒã€Œã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ãŒæä¾›ã™ã‚‹å§”任プレフィックス長ã€ã§ã™ã€‚通常〠ISPã«ã‚ˆã£ã¦æŒ‡å®šã•ã‚ŒãŸã€‚"
+
+#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879
+#: usr/local/www/interfaces.php:1925 usr/local/www/interfaces.php:1913
+#: usr/local/www/interfaces.php:1913
+msgid "PPP configuration"
+msgstr "PPP設定"
+
+#: usr/local/www/interfaces.php:1692
+#: usr/local/www/interfaces_ppps_edit.php:478
+#: usr/local/www/interfaces.php:1870
+#: usr/local/www/interfaces_ppps_edit.php:479
+#: usr/local/www/interfaces.php:1858
+#: usr/local/www/interfaces_ppps_edit.php:485
+#: usr/local/www/interfaces.php:1882 usr/local/www/interfaces.php:1928
+#: usr/local/www/interfaces_ppps_edit.php:483
+#: usr/local/www/interfaces.php:1916
+#: usr/local/www/interfaces_ppps_edit.php:483
+#: usr/local/www/interfaces.php:1916
+msgid "Service Provider"
+msgstr "サービスプロãƒã‚¤ãƒ€ãƒ¼"
+
+#: usr/local/www/interfaces.php:1696
+#: usr/local/www/interfaces_ppps_edit.php:482
+#: usr/local/www/interfaces.php:1874
+#: usr/local/www/interfaces_ppps_edit.php:483
+#: usr/local/www/interfaces.php:1862
+#: usr/local/www/interfaces_ppps_edit.php:489
+#: usr/local/www/interfaces.php:1886 usr/local/www/interfaces.php:1932
+#: usr/local/www/interfaces_ppps_edit.php:487
+#: usr/local/www/interfaces.php:1920
+#: usr/local/www/interfaces_ppps_edit.php:487
+#: usr/local/www/interfaces.php:1920
+msgid "Country:"
+msgstr "国:"
+
+#: usr/local/www/interfaces.php:1704
+#: usr/local/www/interfaces_ppps_edit.php:490
+#: usr/local/www/interfaces.php:1882
+#: usr/local/www/interfaces_ppps_edit.php:491
+#: usr/local/www/interfaces.php:1870
+#: usr/local/www/interfaces_ppps_edit.php:497
+#: usr/local/www/interfaces.php:1894 usr/local/www/interfaces.php:1940
+#: usr/local/www/interfaces_ppps_edit.php:495
+#: usr/local/www/interfaces.php:1928
+#: usr/local/www/interfaces_ppps_edit.php:495
+#: usr/local/www/interfaces.php:1928
+msgid "Provider:"
+msgstr "プロãƒã‚¤ãƒ€ãƒ¼ï¼š"
+
+#: usr/local/www/interfaces.php:1712
+#: usr/local/www/interfaces_ppps_edit.php:498
+#: usr/local/www/interfaces.php:1890
+#: usr/local/www/interfaces_ppps_edit.php:499
+#: usr/local/www/interfaces.php:1878
+#: usr/local/www/interfaces_ppps_edit.php:505
+#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces_ppps_edit.php:503
+#: usr/local/www/interfaces.php:1936
+#: usr/local/www/interfaces_ppps_edit.php:503
+#: usr/local/www/interfaces.php:1936
+msgid "Plan:"
+msgstr "プラン:"
+
+#: usr/local/www/interfaces.php:1720
+#: usr/local/www/interfaces_ppps_edit.php:506
+#: usr/local/www/interfaces.php:1898
+#: usr/local/www/interfaces_ppps_edit.php:507
+#: usr/local/www/interfaces.php:1886
+#: usr/local/www/interfaces_ppps_edit.php:513
+#: usr/local/www/interfaces.php:1910 usr/local/www/interfaces.php:1956
+#: usr/local/www/interfaces_ppps_edit.php:511
+#: usr/local/www/interfaces.php:1944
+#: usr/local/www/interfaces_ppps_edit.php:511
+#: usr/local/www/interfaces.php:1944
+msgid "Select to fill in data for your service provider."
+msgstr "サービスプロãƒã‚¤ãƒ€ã®ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿ã‚’埋ã‚ã‚‹ãŸã‚ã«é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1742
+#: usr/local/www/interfaces_ppps_edit.php:530
+#: usr/local/www/interfaces.php:1920
+#: usr/local/www/interfaces_ppps_edit.php:531
+#: usr/local/www/interfaces.php:1908
+#: usr/local/www/interfaces_ppps_edit.php:537
+#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1978
+#: usr/local/www/interfaces_ppps_edit.php:535
+#: usr/local/www/interfaces.php:1966
+#: usr/local/www/interfaces_ppps_edit.php:535
+#: usr/local/www/interfaces.php:1966
+msgid "Access Point Name (APN)"
+msgstr "アクセスãƒã‚¤ãƒ³ãƒˆå( APN )"
+
+#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944
+#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956
+#: usr/local/www/interfaces.php:2002 usr/local/www/interfaces.php:1991
+#: usr/local/www/interfaces.php:1991
+msgid "Advanced PPP"
+msgstr "先進的ãªPPPã®"
+
+#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774
+#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880
+#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058
+#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940
+#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046
+#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964
+#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144
+#: usr/local/www/interfaces.php:2005 usr/local/www/interfaces.php:2010
+#: usr/local/www/interfaces.php:2119 usr/local/www/interfaces.php:2185
+#: usr/local/www/interfaces.php:2190 usr/local/www/interfaces.php:1994
+#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103
+#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174
+#: usr/local/www/interfaces.php:2179 usr/local/www/interfaces.php:1994
+#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103
+#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174
+#: usr/local/www/interfaces.php:2179
+msgid "Click here"
+msgstr "ã“ã¡ã‚‰ã‚’クリックã—ã¦"
+
+#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960
+#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces.php:1995
+msgid "to edit PPP configuration."
+msgstr "PPP設定を編集ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953
+#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965
+#: usr/local/www/interfaces.php:2011 usr/local/www/interfaces.php:2000
+#: usr/local/www/interfaces.php:2000
+msgid "to create a PPP configuration."
+msgstr "PPPã®æ§‹æˆã‚’作æˆã™ã‚‹ã«ã¯ã€‚"
+
+#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964
+#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979
+#: usr/local/www/interfaces.php:2025 usr/local/www/interfaces.php:2014
+#: usr/local/www/interfaces.php:2014
+msgid "PPPoE configuration"
+msgstr "PPPoEã®è¨­å®š"
+
+#: usr/local/www/interfaces.php:1801
+#: usr/local/www/interfaces_ppps_edit.php:589
+#: usr/local/www/interfaces.php:1979
+#: usr/local/www/interfaces_ppps_edit.php:590
+#: usr/local/www/interfaces.php:1967
+#: usr/local/www/interfaces_ppps_edit.php:596
+#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2040
+#: usr/local/www/interfaces_ppps_edit.php:594
+#: usr/local/www/interfaces.php:2029
+#: usr/local/www/interfaces_ppps_edit.php:594
+#: usr/local/www/interfaces.php:2029
+msgid "Service name"
+msgstr "サービスå"
+
+#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981
+#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996
+#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2031
+#: usr/local/www/interfaces.php:2031
+msgid "Hint: this field can usually be left empty"
+msgstr "ヒント:ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯é€šå¸¸ã€ç©ºã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929
+#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107
+#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095
+#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125
+#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2171
+#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160
+#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160
+msgid "Enable Dial-On-Demand mode"
+msgstr "有効ダイヤルオンデマンドモード"
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2039
+#: usr/local/www/interfaces.php:2039
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a "
+msgstr "ã‚ãªãŸãŒæŒã£ã¦ã„ã‚‹"ã“ã®ã‚ªãƒ—ションã¯å¯èƒ½ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•ä½œã™ã‚‹ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’引ãèµ·ã“ã™""
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930
+#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+msgid "virtual full time"
+msgstr "仮想フルタイム"
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930
+#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+msgid ""
+"connection. The interface is configured, but the actual connection of the "
+"link is delayed until qualifying outgoing traffic is detected."
+msgstr "「接続。インタフェースãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã™ãŒã€å®Ÿéš›ã®æŽ¥ç¶šã€ã®ãƒªãƒ³ã‚¯ã¯ã€é€ä¿¡ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¤œå‡ºã•ã‚ŒãŸäºˆé¸ã¾ã§é…延ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934
+#: usr/local/www/services_captiveportal.php:465
+#: usr/local/www/services_captiveportal.php:470
+#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112
+#: usr/local/www/services_captiveportal.php:468
+#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100
+#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/interfaces.php:2054 usr/local/www/interfaces.php:2176
+#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165
+msgid "Idle timeout"
+msgstr "アイドルタイムアウト"
+
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936
+#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102
+#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132
+#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2178
+#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167
+#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167
+msgid ""
+"If no qualifying outgoing packets are transmitted for the specified number "
+"of seconds, the connection is brought down. An idle timeout of zero disables "
+"this feature."
+msgstr "秒数ã€ã¯äºˆé¸ç™ºä¿¡ãƒ‘ケットãŒæŒ‡å®šã—ãŸæ•°ã®ãŸã‚ã«é€ä¿¡ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã€ŒæŽ¥ç¶šãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„る。ゼロã®ã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€ã€Œã“ã®æ©Ÿèƒ½ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1821
+#: usr/local/www/interfaces_ppps_edit.php:596
+#: usr/local/www/interfaces.php:1999
+#: usr/local/www/interfaces_ppps_edit.php:597
+#: usr/local/www/interfaces.php:1987
+#: usr/local/www/interfaces_ppps_edit.php:603
+#: usr/local/www/interfaces.php:2014 usr/local/www/interfaces.php:2060
+#: usr/local/www/interfaces_ppps_edit.php:601
+#: usr/local/www/interfaces.php:2049
+#: usr/local/www/interfaces_ppps_edit.php:601
+#: usr/local/www/interfaces.php:2049
+msgid "Periodic reset"
+msgstr "定期的ãªãƒªã‚»ãƒƒãƒˆ"
+
+#: usr/local/www/interfaces.php:1829
+#: usr/local/www/interfaces_ppps_edit.php:604
+#: usr/local/www/status_rrd_graph.php:359
+#: usr/local/www/status_rrd_graph_settings.php:158
+#: usr/local/www/status_rrd_graph_settings.php:159
+#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007
+#: usr/local/www/interfaces_ppps_edit.php:605
+#: usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces_ppps_edit.php:611
+#: usr/local/www/status_rrd_graph.php:432 usr/local/www/interfaces.php:2022
+#: usr/local/www/interfaces.php:2068
+#: usr/local/www/interfaces_ppps_edit.php:609
+#: usr/local/www/interfaces.php:2057
+#: usr/local/www/interfaces_ppps_edit.php:609
+#: usr/local/www/status_rrd_graph.php:432
+#: usr/local/www/status_rrd_graph_settings.php:159
+#: usr/local/www/interfaces.php:2057
+msgid "Custom"
+msgstr "カスタム"
+
+#: usr/local/www/interfaces.php:1830
+#: usr/local/www/interfaces_ppps_edit.php:605
+#: usr/local/www/interfaces.php:2008
+#: usr/local/www/interfaces_ppps_edit.php:606
+#: usr/local/www/interfaces.php:1996
+#: usr/local/www/interfaces_ppps_edit.php:612
+#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2069
+#: usr/local/www/interfaces_ppps_edit.php:610
+#: usr/local/www/interfaces.php:2058
+#: usr/local/www/interfaces_ppps_edit.php:610
+#: usr/local/www/interfaces.php:2058
+msgid "Pre-Set"
+msgstr "事å‰ã«è¨­å®š"
+
+#: usr/local/www/interfaces.php:1831
+#: usr/local/www/interfaces_ppps_edit.php:606
+#: usr/local/www/interfaces.php:2009
+#: usr/local/www/interfaces_ppps_edit.php:607
+#: usr/local/www/interfaces.php:1997
+#: usr/local/www/interfaces_ppps_edit.php:613
+#: usr/local/www/interfaces.php:2024 usr/local/www/interfaces.php:2070
+#: usr/local/www/interfaces_ppps_edit.php:611
+#: usr/local/www/interfaces.php:2059
+#: usr/local/www/interfaces_ppps_edit.php:611
+#: usr/local/www/interfaces.php:2059
+msgid "Select a reset timing type"
+msgstr "リセットタイミングã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:1839
+#: usr/local/www/interfaces_ppps_edit.php:614
+#: usr/local/www/interfaces.php:2017
+#: usr/local/www/interfaces_ppps_edit.php:615
+#: usr/local/www/interfaces.php:2005
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2032 usr/local/www/interfaces.php:2078
+#: usr/local/www/interfaces_ppps_edit.php:619
+#: usr/local/www/interfaces.php:2067
+#: usr/local/www/interfaces_ppps_edit.php:619
+#: usr/local/www/interfaces.php:2067
+msgid "hour (0-23)"
+msgstr "時間( 0-23 )"
+
+#: usr/local/www/interfaces.php:1841
+#: usr/local/www/interfaces_ppps_edit.php:616
+#: usr/local/www/interfaces.php:2019
+#: usr/local/www/interfaces_ppps_edit.php:617
+#: usr/local/www/interfaces.php:2007
+#: usr/local/www/interfaces_ppps_edit.php:623
+#: usr/local/www/interfaces.php:2034 usr/local/www/interfaces.php:2080
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2069
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2069
+msgid "minute (0-59)"
+msgstr "分(0〜59 )"
+
+#: usr/local/www/interfaces.php:1843
+#: usr/local/www/interfaces_ppps_edit.php:618
+#: usr/local/www/interfaces.php:2021
+#: usr/local/www/interfaces_ppps_edit.php:619
+#: usr/local/www/interfaces.php:2009
+#: usr/local/www/interfaces_ppps_edit.php:625
+#: usr/local/www/interfaces.php:2036 usr/local/www/interfaces.php:2082
+#: usr/local/www/interfaces_ppps_edit.php:623
+#: usr/local/www/interfaces.php:2071
+#: usr/local/www/interfaces_ppps_edit.php:623
+#: usr/local/www/interfaces.php:2071
+msgid "reset at a specific date (mm/dd/yyyy)"
+msgstr "特定ã®æ—¥ä»˜ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ YYYY / MM / DD )"
+
+#: usr/local/www/interfaces.php:1846
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2024
+#: usr/local/www/interfaces_ppps_edit.php:622
+#: usr/local/www/interfaces.php:2012
+#: usr/local/www/interfaces_ppps_edit.php:628
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2085
+#: usr/local/www/interfaces_ppps_edit.php:626
+#: usr/local/www/interfaces.php:2074
+#: usr/local/www/interfaces_ppps_edit.php:626
+#: usr/local/www/interfaces.php:2074
+msgid ""
+"If you leave the date field empty, the reset will be executed each day at "
+"the time you did specify using the minutes and hour field."
+msgstr "ã‚ãªãŸã¯æ•°åˆ†ã¨æ™‚é–“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’使用ã—ã¦æŒ‡å®šã—ãŸæ™‚é–“ãŒã€Œç©ºã®æ—¥ä»˜ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ãƒªã‚»ãƒƒãƒˆãŒã§æ¯Žæ—¥å®Ÿè¡Œã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1854
+#: usr/local/www/interfaces_ppps_edit.php:629
+#: usr/local/www/interfaces.php:2032
+#: usr/local/www/interfaces_ppps_edit.php:630
+#: usr/local/www/interfaces.php:2020
+#: usr/local/www/interfaces_ppps_edit.php:636
+#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2093
+#: usr/local/www/interfaces_ppps_edit.php:634
+#: usr/local/www/interfaces.php:2082
+#: usr/local/www/interfaces_ppps_edit.php:634
+#: usr/local/www/interfaces.php:2082
+msgid "reset at each month ('0 0 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')"
+msgstr "å„月ã§ï¼ˆ'0 0 1 README.txtã‚’_NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *' )をリセット"
+
+#: usr/local/www/interfaces.php:1857
+#: usr/local/www/interfaces_ppps_edit.php:632
+#: usr/local/www/interfaces.php:2035
+#: usr/local/www/interfaces_ppps_edit.php:633
+#: usr/local/www/interfaces.php:2023
+#: usr/local/www/interfaces_ppps_edit.php:639
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces_ppps_edit.php:637
+#: usr/local/www/interfaces.php:2085
+#: usr/local/www/interfaces_ppps_edit.php:637
+#: usr/local/www/interfaces.php:2085
+msgid "reset at each week ('0 0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 0')"
+msgstr "毎週ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ 0 0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã™ã‚‹ã®tmp USR 0')"
+
+#: usr/local/www/interfaces.php:1860
+#: usr/local/www/interfaces_ppps_edit.php:635
+#: usr/local/www/interfaces.php:2038
+#: usr/local/www/interfaces_ppps_edit.php:636
+#: usr/local/www/interfaces.php:2026
+#: usr/local/www/interfaces_ppps_edit.php:642
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2099
+#: usr/local/www/interfaces_ppps_edit.php:640
+#: usr/local/www/interfaces.php:2088
+#: usr/local/www/interfaces_ppps_edit.php:640
+#: usr/local/www/interfaces.php:2088
+msgid "reset at each day ('0 0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')"
+msgstr "毎日ã§ï¼ˆ'0 0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *' )をリセット"
+
+#: usr/local/www/interfaces.php:1863
+#: usr/local/www/interfaces_ppps_edit.php:638
+#: usr/local/www/interfaces.php:2041
+#: usr/local/www/interfaces_ppps_edit.php:639
+#: usr/local/www/interfaces.php:2029
+#: usr/local/www/interfaces_ppps_edit.php:645
+#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2102
+#: usr/local/www/interfaces_ppps_edit.php:643
+#: usr/local/www/interfaces.php:2091
+#: usr/local/www/interfaces_ppps_edit.php:643
+#: usr/local/www/interfaces.php:2091
+msgid "reset at each hour ('0 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr *')"
+msgstr "時間ã”ã¨ã«ãƒªã‚»ãƒƒãƒˆï¼ˆ'0ã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«TMP USRã®README.txt _NotesブートCF conf.defaultãªã©misc.translateルートsbinã«ã®TMPã®USR *')"
+
+#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050
+#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065
+#: usr/local/www/interfaces.php:2111 usr/local/www/interfaces.php:2100
+#: usr/local/www/interfaces.php:2100
+msgid "Advanced and MLPPP"
+msgstr "AdvancedãŠã‚ˆã³MLPPP"
+
+#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054
+#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069
+#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2104
+#: usr/local/www/interfaces.php:2104
+msgid ""
+"for additional PPPoE configuration options. Save first if you made changes."
+msgstr "ã‚ãªãŸãŒå¤‰æ›´ã‚’加ãˆãŸå ´åˆã¯ã€ã€Œè¿½åŠ ã®PPPoEã®è¨­å®šã‚ªãƒ—ションã®ãŸã‚ã«æœ€åˆã«ä¿å­˜ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059
+#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074
+#: usr/local/www/interfaces.php:2120 usr/local/www/interfaces.php:2109
+#: usr/local/www/interfaces.php:2109
+msgid "for advanced PPPoE configuration options and MLPPP configuration."
+msgstr "先進的ãªPPPoEã®è¨­å®šã‚ªãƒ—ションãŠã‚ˆã³MLPPPã®è¨­å®šã®ãŸã‚ã«ã€‚"
+
+#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070
+#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088
+#: usr/local/www/interfaces.php:2134 usr/local/www/interfaces.php:2123
+#: usr/local/www/interfaces.php:2123
+msgid "PPTP/L2TP configuration"
+msgstr "PPTP/L2TP構æˆ"
+
+#: usr/local/www/interfaces.php:1907
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2103 usr/local/www/interfaces.php:2149
+#: usr/local/www/interfaces.php:2138
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2138
+msgid "Local IP address"
+msgstr "ローカルIPアドレス"
+
+#: usr/local/www/interfaces.php:1920
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2116 usr/local/www/interfaces.php:2162
+#: usr/local/www/interfaces.php:2151
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2151
+msgid "Remote IP address"
+msgstr "リモートIPアドレス"
+
+#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2161
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a"
+msgstr "ã‚ãªãŸãŒæŒã£ã¦ã„ã‚‹"ã“ã®ã‚ªãƒ—ションã¯å¯èƒ½ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•ä½œã™ã‚‹ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’引ãèµ·ã“ã™""
+
+#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122
+#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140
+#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2175
+#: usr/local/www/interfaces.php:2175
+msgid ""
+"for additional PPTP and L2TP configuration options. Save first if you made "
+"changes."
+msgstr "変更を"ã‚ãªãŸãŒè¡Œã£ãŸå ´åˆã€è¿½åŠ ã®PPTPã¨L2TPã®è¨­å®šã‚ªãƒ—ションã«ã¤ã„ã¦ã€‚ã¾ãšä¿å­˜ã€ 。"
+
+#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127
+#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145
+#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2180
+#: usr/local/www/interfaces.php:2180
+msgid "for advanced PPTP and L2TP configuration options"
+msgstr "高度ãªPPTPã¨L2TPã®è¨­å®šã‚ªãƒ—ション用"
+
+#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142
+#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160
+#: usr/local/www/interfaces.php:2206 usr/local/www/interfaces.php:2195
+#: usr/local/www/interfaces.php:2195
+msgid ""
+"Common wireless configuration - Settings apply to all wireless networks on"
+msgstr "「一般的ãªãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®š - 設定上ã®ã™ã¹ã¦ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«é©ç”¨"
+
+#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145
+#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163
+#: usr/local/www/interfaces.php:2209 usr/local/www/interfaces.php:2198
+#: usr/local/www/interfaces.php:2198
+msgid "Persist common settings"
+msgstr "共通ã®è¨­å®šã‚’永続化"
+
+#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148
+#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166
+#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2201
+#: usr/local/www/interfaces.php:2201
+msgid ""
+"Enabling this preserves the common wireless configuration through interface "
+"deletions and reassignments."
+msgstr "欠失ãŠã‚ˆã³å†å‰²ã‚Šå½“ã¦"ã“れを有効ã«ã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’介ã—ã¦å…±é€šã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®šã‚’ä¿å­˜ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152
+#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170
+#: usr/local/www/interfaces.php:2216 usr/local/www/interfaces.php:2205
+#: usr/local/www/interfaces.php:2205
+msgid "Standard"
+msgstr "標準"
+
+#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168
+#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186
+#: usr/local/www/interfaces.php:2232 usr/local/www/interfaces.php:2221
+#: usr/local/www/interfaces.php:2221
+msgid "Protection Mode"
+msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171
+#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189
+#: usr/local/www/interfaces.php:2235 usr/local/www/interfaces.php:2224
+#: usr/local/www/interfaces.php:2224
+msgid "Protection mode off"
+msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã‚’オフ"
+
+#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190
+#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2225
+#: usr/local/www/interfaces.php:2225
+msgid "Protection mode CTS to self"
+msgstr "自己ã¸ã®ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã®CTS"
+
+#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173
+#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191
+#: usr/local/www/interfaces.php:2237 usr/local/www/interfaces.php:2226
+#: usr/local/www/interfaces.php:2226
+msgid "Protection mode RTS and CTS"
+msgstr "ä¿è­·ãƒ¢ãƒ¼ãƒ‰ã®RTSã¨CTS"
+
+#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176
+#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194
+#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2229
+#: usr/local/www/interfaces.php:2229
+msgid ""
+"For IEEE 802.11g, use the specified technique for protecting OFDM frames in "
+"a mixed 11b/11g network."
+msgstr "æ··åˆãŸ11b/11gãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ŒIEEEã®802.11グラムã®ãŸã‚ã«ã€å†…ã®OFDMフレームをä¿è­·ã™ã‚‹ãŸã‚ã®æŒ‡å®šã•ã‚ŒãŸãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’使用〠。"
+
+#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184
+#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202
+#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2237
+#: usr/local/www/interfaces.php:2237
+msgid "Transmit power"
+msgstr "動力をä¼é”"
+
+#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197
+#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215
+#: usr/local/www/interfaces.php:2261 usr/local/www/interfaces.php:2250
+#: usr/local/www/interfaces.php:2250
+msgid ""
+"Note: Typically only a few discreet power settings are available and the "
+"driver will use the setting closest to the specified value. Not all "
+"adapters support changing the transmit power setting."
+msgstr ""注:通常ã‚ãšã‹æ•°æŽ§ãˆã‚ãªé›»æºè¨­å®šãŒåˆ©ç”¨å¯èƒ½ã§ã‚り〠「ドライãƒãƒ¼ãŒæŒ‡å®šã•ã‚ŒãŸå€¤ã«è¨­å®šã—ã€æœ€ã‚‚è¿‘ã„使用ã•ã‚Œã¾ã™ã€‚ã™ã¹ã¦ã§ã¯ãªã„ã€ã®ã‚¢ãƒ€ãƒ—ã‚¿ã¯ã€é€ä¿¡é›»åŠ›è¨­å®šã®å¤‰æ›´ã‚’サãƒãƒ¼ãƒˆã€‚"
+
+#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258
+#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201
+#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189
+#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2265
+#: usr/local/www/interfaces.php:2254 usr/local/www/status_interfaces.php:358
+#: usr/local/www/interfaces.php:2254
+msgid "Channel"
+msgstr "ãƒãƒ£ãƒ³ãƒãƒ«"
+
+#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204
+#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263
+#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239
+#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269
+#: usr/local/www/interfaces.php:2281 usr/local/www/interfaces.php:2268
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2327
+#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2316 usr/local/www/interfaces.php:2257
+#: usr/local/www/interfaces.php:2304 usr/local/www/interfaces.php:2316
+msgid "Auto"
+msgstr "オート"
+
+#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224
+#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242
+#: usr/local/www/interfaces.php:2288 usr/local/www/interfaces.php:2277
+#: usr/local/www/interfaces.php:2277
+msgid ""
+"Legend: wireless standards - channel # (frequency @ max TX power / TX power "
+"allowed in reg. domain)"
+msgstr ""ä¼èª¬ï¼šãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¦æ ¼ - ãƒãƒ£ãƒ³ãƒãƒ«"
+
+#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226
+#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244
+#: usr/local/www/interfaces.php:2290 usr/local/www/interfaces.php:2279
+#: usr/local/www/interfaces.php:2279
+msgid ""
+"Note: Not all channels may be supported by your card. Auto may override the "
+"wireless standard selected above."
+msgstr ""注:ã™ã¹ã¦ã®ãƒãƒ£ãƒ³ãƒãƒ«ãŒã‚ãªãŸã®ã‚«ãƒ¼ãƒ‰ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹å ´åˆãŒã‚り自動上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ "上ã§é¸æŠžã—ãŸç„¡ç·šè¦æ ¼ã‚’。"
+
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231
+#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249
+#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2284
+#: usr/local/www/interfaces.php:2284
+msgid "Antenna settings"
+msgstr "アンテナã®è¨­å®š"
+
+#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237
+#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255
+#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2290
+msgid "Diversity"
+msgstr "多様性"
+
+#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072
+#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146
+#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250
+#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324
+#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238
+#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296
+#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135
+#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2326
+#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2303
+#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2356
+#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2388
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345
+#: usr/local/www/interfaces.php:2361 usr/local/www/interfaces.php:2377
+#: usr/local/www/diag_system_pftop.php:135 usr/local/www/interfaces.php:2292
+#: usr/local/www/interfaces.php:2303 usr/local/www/interfaces.php:2315
+#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2361
+#: usr/local/www/interfaces.php:2377
+msgid "Default"
+msgstr "デフォルト"
+
+#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314
+#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362
+#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363
+#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228
+#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298
+#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319
+#: usr/local/www/interfaces.php:2258 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2293 usr/local/www/vpn_l2tp.php:298
+#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319
+#: usr/local/www/interfaces.php:2293
+msgid "Off"
+msgstr "オフ"
+
+#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241
+#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259
+#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2294
+#: usr/local/www/interfaces.php:2294
+msgid "On"
+msgstr "上ã®"
+
+#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248
+#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266
+#: usr/local/www/interfaces.php:2312 usr/local/www/interfaces.php:2301
+#: usr/local/www/interfaces.php:2301
+msgid "Transmit antenna"
+msgstr "アンテナをé€ä¿¡"
+
+#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086
+#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264
+#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270
+#: usr/local/www/interfaces.php:2282 usr/local/www/interfaces.php:2316
+#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2305
+#: usr/local/www/interfaces.php:2317 usr/local/www/interfaces.php:2305
+#: usr/local/www/interfaces.php:2317
+msgid "#1"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087
+#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265
+#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271
+#: usr/local/www/interfaces.php:2283 usr/local/www/interfaces.php:2317
+#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2318
+msgid "#2"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260
+#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278
+#: usr/local/www/interfaces.php:2324 usr/local/www/interfaces.php:2313
+#: usr/local/www/interfaces.php:2313
+msgid "Receive antenna"
+msgstr "å—信アンテナ"
+
+#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272
+#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2325
+#: usr/local/www/interfaces.php:2325
+msgid ""
+"Note: The antenna numbers do not always match up with the labels on the card."
+msgstr ""注:アンテナ番å·ã¯å¸¸ã«ã‚«ãƒ¼ãƒ‰ä¸Šã®ãƒ©ãƒ™ãƒ«ã¨ä¸€è‡´ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278
+#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296
+#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2331
+#: usr/local/www/interfaces.php:2331
+msgid "Distance setting"
+msgstr "è·é›¢è¨­å®š"
+
+#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282
+#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2335
+#: usr/local/www/interfaces.php:2335
+msgid ""
+"Note: This field can be used to tune ACK/CTS timers to fit the distance "
+"between AP and Client"
+msgstr "APã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆé–“ã®ã€Œæ³¨æ„ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«ã¯ã€è·é›¢ã«åˆã‚ã›ã¦èª¿æ•´ã•ã‚ŒãŸACK / CTSタイマーを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€"
+
+#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283
+#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301
+#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2336
+#: usr/local/www/interfaces.php:2336
+msgid "(measured in meters)"
+msgstr "(メートルã§æ¸¬å®šã—ã€å”¯ä¸€ã®Atherosベースã®ã‚«ãƒ¼ãƒ‰ã®ãŸã‚ã«åƒã ï¼ ï¼‰"
+
+#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288
+#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2341
+#: usr/local/www/interfaces.php:2341
+msgid "Regulatory settings"
+msgstr "è¦åˆ¶ã®è¨­å®š"
+
+#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308
+#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2343
+#: usr/local/www/interfaces.php:2343
+msgid "Regulatory domain"
+msgstr "調節領域"
+
+#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322
+#: usr/local/www/interfaces.php:2368 usr/local/www/interfaces.php:2357
+#: usr/local/www/interfaces.php:2357
+msgid ""
+"Note: Some cards have a default that is not recognized and require changing "
+"the regulatory domain to one in this list for the changes to other "
+"regulatory settings to work."
+msgstr ""注:一部ã®ã‚«ãƒ¼ãƒ‰ãŒèªè­˜ã•ã‚Œã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã•ã‚Œã¦ã„ãªã„デフォルトã®æŒã£ã¦ã„ã‚‹"動作ã™ã‚‹ã‚ˆã†ã«ã€ä»–ã®ã€Œèª¿ç¯€ã®è¨­å®šã‚’変更ã™ã‚‹ãŸã‚ã«ã€ã“ã®ãƒªã‚¹ãƒˆã«1ã¸ã®è¦åˆ¶åŒºåŸŸã‚’。"
+
+#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324
+#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2359
+#: usr/local/www/interfaces.php:2359
+msgid "Country (listed with country code and regulatory domain)"
+msgstr "国(国コードã¨èª¿ç¯€ãƒ‰ãƒ¡ã‚¤ãƒ³ã¨è¨˜è¼‰ã•ã‚Œã¦ã„る)"
+
+#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338
+#: usr/local/www/interfaces.php:2384 usr/local/www/interfaces.php:2373
+#: usr/local/www/interfaces.php:2373
+msgid ""
+"Note: Any country setting other than "Default" will override the "
+"regulatory domain setting"
+msgstr ""注:以外ã®è¨­å®šã™ã¹ã¦ã®å›½"デフォルトã¯è¦åˆ¶åŒºåŸŸã®è¨­å®šã€ã‚ˆã‚Šå„ªå…ˆã•ã‚Œã¾ã™ã€"
+
+#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340
+#: usr/local/www/interfaces.php:2386 usr/local/www/interfaces.php:2375
+#: usr/local/www/interfaces.php:2375
+msgid "Location"
+msgstr "場所"
+
+#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325
+#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2378
+#: usr/local/www/interfaces.php:2378
+msgid "Indoor"
+msgstr "屋内"
+
+#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326
+#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344
+#: usr/local/www/interfaces.php:2390 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2379
+msgid "Outdoor"
+msgstr "アウトドア"
+
+#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345
+#: usr/local/www/interfaces.php:2391 usr/local/www/interfaces.php:2380
+#: usr/local/www/interfaces.php:2380
+msgid "Anywhere"
+msgstr "ã©ã“ã§ã‚‚"
+
+#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348
+#: usr/local/www/interfaces.php:2394 usr/local/www/interfaces.php:2383
+#: usr/local/www/interfaces.php:2383
+msgid ""
+"These settings may affect which channels are available and the maximum "
+"transmit power allowed on those channels. Using the correct settings to "
+"comply with local regulatory requirements is recommended."
+msgstr "é€ä¿¡é›»åŠ›ãれらã®ãƒãƒ£ãƒãƒ«ä¸Šã§è¨±å¯"ã“れらã®è¨­å®šã¯ã€ãƒãƒ£ãƒãƒ«ãŒåˆ©ç”¨å¯èƒ½ã§ã‚ã‚Šã€æœ€å¤§å€¤ã¯ã©ã®å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚り〠。 「ç¾åœ°ã®è¦åˆ¶è¦ä»¶ã«æº–æ‹ ã—ã¦ã€æ­£ã—ã„設定を使用ã™ã‚‹ã“ã¨ã¯ãŠå‹§ã‚ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332
+#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350
+#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2385
+#: usr/local/www/interfaces.php:2385
+msgid ""
+"Note: All wireless networks on this interface will be temporarily brought "
+"down when changing regulatory settings. Some of the regulatory domains or "
+"country codes may not be allowed by some cards. These settings may not be "
+"able to add additional channels that are not already supported."
+msgstr ""注:ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã™ã¹ã¦ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒä¸€æ™‚çš„ã«æèµ·ã•ã‚Œã‚‹ã€Œåˆ¶å¾¡ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ãã«ãƒ€ã‚¦ãƒ³ã€‚è¦åˆ¶åŒºåŸŸã¾ãŸã¯ä¸€éƒ¨ã®ã€Œå›½ã‚³ãƒ¼ãƒ‰ã¯ã€ä¸€éƒ¨ã®ã‚«ãƒ¼ãƒ‰ã§è¨±å¯ã•ã‚Œãªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚ã“れらã®è¨­å®šã¯ãªã„ã‹ã‚‚ã—ã‚Œãªã„ã€ãŒæ—¢ã«ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„追加ã®ãƒãƒ£ãƒãƒ«ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ã。"
+
+#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339
+#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357
+#: usr/local/www/interfaces.php:2403 usr/local/www/interfaces.php:2392
+#: usr/local/www/interfaces.php:2392
+msgid "Network-specific wireless configuration"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å›ºæœ‰ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹è¨­å®š"
+
+#: usr/local/www/interfaces.php:2167
+#: usr/local/www/interfaces_wireless_edit.php:179
+#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333
+#: usr/local/www/interfaces_wireless_edit.php:181
+#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2409
+#: usr/local/www/interfaces.php:2398
+#: usr/local/www/interfaces_wireless_edit.php:181
+#: usr/local/www/interfaces.php:2398
+msgid "Infrastructure (BSS)"
+msgstr "インフラストラクãƒãƒ£ï¼ˆ BSS)"
+
+#: usr/local/www/interfaces.php:2168
+#: usr/local/www/interfaces_wireless_edit.php:180
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334
+#: usr/local/www/interfaces_wireless_edit.php:182
+#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2410
+#: usr/local/www/interfaces.php:2399
+#: usr/local/www/interfaces_wireless_edit.php:182
+#: usr/local/www/interfaces.php:2399
+msgid "Ad-hoc (IBSS)"
+msgstr "アドホック( IBSS )"
+
+#: usr/local/www/interfaces.php:2169
+#: usr/local/www/interfaces_wireless_edit.php:181
+#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335
+#: usr/local/www/interfaces_wireless_edit.php:183
+#: usr/local/www/interfaces.php:2365 usr/local/www/interfaces.php:2411
+#: usr/local/www/interfaces.php:2400
+#: usr/local/www/interfaces_wireless_edit.php:183
+#: usr/local/www/interfaces.php:2400
+msgid "Access Point"
+msgstr "アクセスãƒã‚¤ãƒ³ãƒˆ"
+
+#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361
+#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2425 usr/local/www/interfaces.php:2414
+#: usr/local/www/interfaces.php:2414
+msgid "Minimum wireless standard"
+msgstr "最å°ç„¡ç·šè¦æ ¼"
+
+#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364
+#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382
+#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2417
+#: usr/local/www/interfaces.php:2417
+msgid "Any"
+msgstr "ä»»æ„ã®"
+
+#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366
+#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384
+#: usr/local/www/interfaces.php:2430 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2419
+msgid "802.11g"
+msgstr "802.11グラム"
+
+#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386
+#: usr/local/www/interfaces.php:2432 usr/local/www/interfaces.php:2421
+#: usr/local/www/interfaces.php:2421
+msgid "802.11n"
+msgstr "802.11nã®"
+
+#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371
+#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389
+#: usr/local/www/interfaces.php:2435 usr/local/www/interfaces.php:2424
+#: usr/local/www/interfaces.php:2424
+msgid ""
+"When operating as an access point, allow only stations capable of the "
+"selected wireless standard to associate (stations not capable are not "
+"permitted to associate)."
+msgstr "é¸æŠžã•ã‚ŒãŸç„¡ç·šè¦æ ¼ï¼ˆå¯¾å¿œã—ã¦ã„ãªã„å±€ã¯ã€Œé–¢é€£ä»˜ã‘ã‚‹ã“ã¨ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“)ã«é–¢é€£ä»˜ã‘ã‚‹ãŸã‚ã«ã€ã€Œã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•ä½œã™ã‚‹ã¨ãã€ã™ã‚‹ã“ã¨ãŒã§ãる唯一ã®å±€ãŒè¨±å¯ã™ã‚‹ã€ 。"
+
+#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376
+#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394
+#: usr/local/www/interfaces.php:2440 usr/local/www/interfaces.php:2429
+#: usr/local/www/interfaces.php:2429
+msgid "802.11g only"
+msgstr "802.11グラムã®ã¿"
+
+#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397
+#: usr/local/www/interfaces.php:2443 usr/local/www/interfaces.php:2432
+#: usr/local/www/interfaces.php:2432
+msgid ""
+"When operating as an access point in 802.11g mode, allow only 11g-capable "
+"stations to associate (11b-only stations are not permitted to associate)."
+msgstr "ステーション(11B専用ã®ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’関連付ã‘ã‚‹ã“ã¨ãŒè¨±å¯ã•ã‚Œã¦ã„ãªã„)ã«é–¢é€£ä»˜ã‘ã‚‹ãŸã‚ã«ã€ã®802.11gモードã§ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•ä½œã™ã‚‹å ´åˆã€å”¯ä¸€ã®11グラム対応ãŒã§ãるよã†ã«ã€ 。"
+
+#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384
+#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402
+#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2437
+#: usr/local/www/interfaces.php:2437
+msgid "Allow intra-BSS communication"
+msgstr "内ã®BSS通信を許å¯ã™ã‚‹"
+
+#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388
+#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406
+#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2441
+#: usr/local/www/interfaces.php:2441
+msgid ""
+"When operating as an access point, enable this if you want to pass packets "
+"between wireless clients directly."
+msgstr "直接無線クライアントã®é–“ã«ã€Œã‚ãªãŸã¯ã€ãƒ‘ケットを渡ã—ãŸã„å ´åˆã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦å‹•ä½œã—ã¦ã„ã‚‹å ´åˆã€ã“れをå¯èƒ½ã«ã™ã‚‹ã€ 。"
+
+#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390
+#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408
+#: usr/local/www/interfaces.php:2454 usr/local/www/interfaces.php:2443
+#: usr/local/www/interfaces.php:2443
+msgid ""
+"Disabling the internal bridging is useful when traffic is to be processed "
+"with packet filtering."
+msgstr "パケットフィルタリングã§ã€Œãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒå‡¦ç†ã•ã‚Œã‚‹ã¨ãã«ã€å†…部ã®ãƒ–リッジを無効ã«ã™ã‚‹ã¨ä¾¿åˆ©ã§ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394
+#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412
+#: usr/local/www/interfaces.php:2458 usr/local/www/interfaces.php:2447
+#: usr/local/www/interfaces.php:2447
+msgid "Enable WME"
+msgstr "WMEを有効ã«ã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397
+#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415
+#: usr/local/www/interfaces.php:2461 usr/local/www/interfaces.php:2450
+#: usr/local/www/interfaces.php:2450
+msgid "Setting this option will force the card to use WME (wireless QoS)."
+msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ WME (無線QoS)を使用ã™ã‚‹ã‚ˆã†ã«ã‚«ãƒ¼ãƒ‰ã‚’強制ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2465 usr/local/www/interfaces.php:2454
+#: usr/local/www/interfaces.php:2454
+msgid "Enable Hide SSID"
+msgstr "éžè¡¨ç¤ºã®SSIDを有効ã«ã™ã‚‹"
+
+#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405
+#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423
+#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2458
+#: usr/local/www/interfaces.php:2458
+msgid "Setting this option will force the card to NOT broadcast its SSID"
+msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ãã®SSIDをブロードキャストã—ãªã„よã†ã«ã€ã‚«ãƒ¼ãƒ‰ã‚’強制的ã«"
+
+#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407
+#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425
+#: usr/local/www/interfaces.php:2471 usr/local/www/interfaces.php:2460
+#: usr/local/www/interfaces.php:2460
+msgid "(this might create problems for some clients)."
+msgstr "(ã“ã‚Œã¯ã„ãã¤ã‹ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã®å•é¡Œã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰ 。"
+
+#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411
+#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429
+#: usr/local/www/interfaces.php:2475 usr/local/www/interfaces.php:2464
+#: usr/local/www/interfaces.php:2464
+msgid "WEP"
+msgstr "WEP"
+
+#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414
+#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432
+#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2467
+msgid "Enable WEP"
+msgstr "WEPを有効ã«"
+
+#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437
+#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2472
+#: usr/local/www/interfaces.php:2472
+msgid "TX key"
+msgstr "TXキー"
+
+#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422
+#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440
+#: usr/local/www/interfaces.php:2486 usr/local/www/interfaces.php:2475
+#: usr/local/www/interfaces.php:2475
+msgid "Key 1:"
+msgstr "キー1 :"
+
+#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431
+#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449
+#: usr/local/www/interfaces.php:2495 usr/local/www/interfaces.php:2484
+#: usr/local/www/interfaces.php:2484
+msgid "Key 2:"
+msgstr "キー2 :"
+
+#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440
+#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458
+#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2493
+#: usr/local/www/interfaces.php:2493
+msgid "Key 3:"
+msgstr "キー3 :"
+
+#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449
+#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2513 usr/local/www/interfaces.php:2502
+#: usr/local/www/interfaces.php:2502
+msgid "Key 4:"
+msgstr "キー4 :"
+
+#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459
+#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477
+#: usr/local/www/interfaces.php:2523 usr/local/www/interfaces.php:2512
+#: usr/local/www/interfaces.php:2512
+msgid ""
+"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits "
+"preceded by '0x'."
+msgstr "'0 XãŒå‰ã«ã€ã€ 40 ( 64 )ビットã®ã‚­ãƒ¼ã¯ã€ 5文字ã®ASCII文字ã¾ãŸã¯10æ¡ã®16進数ã§å…¥åŠ›ã—ã¦ã‚‚よã„〠。"
+
+#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460
+#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478
+#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2513
+#: usr/local/www/interfaces.php:2513
+msgid ""
+"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits "
+"preceded by '0x'."
+msgstr "'0 X'ã®å‰ã€ 104 ( 128 )ビットã®ã‚­ãƒ¼ã¯13文字ã®ASCII文字ã¾ãŸã¯26æ¡ã®16進数ã§å…¥åŠ›ã—ã¦ã‚‚よã„〠。"
+
+#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308
+#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488
+#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476
+#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2552
+#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541
+#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541
+msgid "WPA"
+msgstr "WPA"
+
+#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485
+#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2520
+#: usr/local/www/interfaces.php:2520
+msgid "Enable WPA"
+msgstr "WPAを有効ã«ã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472
+msgid "WPA Pre Shared Key"
+msgstr "WPA事å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475
+#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493
+#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2528
+#: usr/local/www/interfaces.php:2528
+msgid "PSK:"
+msgstr "PSK :"
+
+#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481
+#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499
+#: usr/local/www/interfaces.php:2545 usr/local/www/interfaces.php:2534
+#: usr/local/www/interfaces.php:2534
+msgid "WPA Passphrase must be between 8 and 63 characters long."
+msgstr "パスフレーズã¯ã€8〜 63文字ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485
+#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503
+#: usr/local/www/interfaces.php:2549 usr/local/www/interfaces.php:2538
+#: usr/local/www/interfaces.php:2538
+msgid "WPA Mode"
+msgstr "WPAモード"
+
+#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489
+#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507
+#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2542
+#: usr/local/www/interfaces.php:2542
+msgid "WPA2"
+msgstr "WPA2"
+
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320
+#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500
+#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488
+#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507
+#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537
+#: usr/local/www/interfaces.php:2554 usr/local/www/interfaces.php:2564
+#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583
+#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553
+#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553
+#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572
+msgid "Both"
+msgstr "両方"
+
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495
+#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513
+#: usr/local/www/interfaces.php:2559 usr/local/www/interfaces.php:2548
+#: usr/local/www/interfaces.php:2548
+msgid "WPA Key Management Mode"
+msgstr "WPAキー管ç†ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498
+msgid "Pre Shared Key"
+msgstr "事å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499
+#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517
+#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2552
+#: usr/local/www/interfaces.php:2552
+msgid "Extensible Authentication Protocol"
+msgstr "æ‹¡å¼µèªè¨¼ãƒ—ロトコル"
+
+#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508
+#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526
+#: usr/local/www/interfaces.php:2572 usr/local/www/interfaces.php:2561
+#: usr/local/www/interfaces.php:2561
+msgid "Open System Authentication"
+msgstr "オープンシステムèªè¨¼"
+
+#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509
+#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527
+#: usr/local/www/interfaces.php:2573 usr/local/www/interfaces.php:2562
+#: usr/local/www/interfaces.php:2562
+msgid "Shared Key Authentication"
+msgstr "共有éµèªè¨¼"
+
+#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512
+#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530
+#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2565
+msgid "Note: Shared Key Authentication requires WEP."
+msgstr "注æ„:共有キーèªè¨¼ãŒWEPã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516
+#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534
+#: usr/local/www/interfaces.php:2580 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2569
+msgid "WPA Pairwise"
+msgstr "WPAペアワイズ"
+
+#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520
+#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538
+#: usr/local/www/interfaces.php:2584 usr/local/www/interfaces.php:2573
+#: usr/local/www/interfaces.php:2573
+msgid "AES (recommended)"
+msgstr "AES (推奨)"
+
+#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521
+#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539
+#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2574
+#: usr/local/www/interfaces.php:2574
+msgid "TKIP"
+msgstr "TKIP"
+
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526
+#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544
+#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2579
+#: usr/local/www/interfaces.php:2579
+msgid "Key Rotation"
+msgstr "キーローテーション"
+
+#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529
+#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547
+#: usr/local/www/interfaces.php:2593 usr/local/www/interfaces.php:2582
+#: usr/local/www/interfaces.php:2582
+msgid ""
+"Allowed values are 1-9999. Must be longer than Master Key "
+"Regeneration time."
+msgstr ""指定ã§ãる値ã¯1ã‹ã‚‰9999ã§ã™ãŒã€ãƒžã‚¹ã‚¿ãƒ¼ã‚­ãƒ¼ã‚ˆã‚Šã‚‚é•·ãã™ã¹ãã§ã¯ãªã„ã€å†ç”Ÿæ™‚間。"
+
+#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533
+#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551
+#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2586
+#: usr/local/www/interfaces.php:2586
+msgid "Master Key Regeneration"
+msgstr "マスターキーã®å†ç”Ÿæˆ"
+
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536
+#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554
+#: usr/local/www/interfaces.php:2600 usr/local/www/interfaces.php:2589
+#: usr/local/www/interfaces.php:2589
+msgid ""
+"Allowed values are 1-9999. Must be shorter than Key Rotation time."
+msgstr ""指定ã§ãる値ã¯1ã‹ã‚‰9999ã§ã™ãŒã€ã‚­ãƒ¼ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³æ™‚間より短ãã™ã¹ãã§ã¯ãªã„。"
+
+#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2593
+#: usr/local/www/interfaces.php:2593
+msgid "Strict Key Regeneration"
+msgstr "厳密ãªã‚­ãƒ¼ã®å†ç”Ÿæˆ"
+
+#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543
+#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561
+#: usr/local/www/interfaces.php:2607 usr/local/www/interfaces.php:2596
+#: usr/local/www/interfaces.php:2596
+msgid ""
+"Setting this option will force the AP to rekey whenever a client "
+"disassociates."
+msgstr "関連付ã‘を解除ã—〠"ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã„ã¤ã§ã‚‚å†ç”Ÿæˆã™ã‚‹ãŸã‚ã«APを強制ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547
+#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2611 usr/local/www/interfaces.php:2600
+#: usr/local/www/interfaces.php:2600
+msgid "Enable IEEE802.1X Authentication"
+msgstr "IEEE802.1Xèªè¨¼ã‚’有効ã«ã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568
+#: usr/local/www/interfaces.php:2614 usr/local/www/interfaces.php:2603
+#: usr/local/www/interfaces.php:2603
+msgid "Setting this option will enable 802.1X authentication."
+msgstr "ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€ 802.1xèªè¨¼ã‚’有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2371
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551
+#: usr/local/www/load_balancer_pool_edit.php:255
+#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539
+#: usr/local/www/load_balancer_pool_edit.php:253
+#: usr/local/www/status_openvpn.php:355 usr/local/www/interfaces.php:2569
+#: usr/local/www/status_openvpn.php:385 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2604 usr/local/www/status_openvpn.php:385
+#: usr/local/www/load_balancer_pool_edit.php:253
+#: usr/local/www/interfaces.php:2604
+msgid "NOTE"
+msgstr "注"
+
+#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551
+#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2615 usr/local/www/interfaces.php:2604
+#: usr/local/www/interfaces.php:2604
+msgid "this option requires checking the "Enable WPA box"."
+msgstr "ã“ã®ã‚ªãƒ—ションã§ã¯ã€ 「有効WPAボックスã€ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555
+#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573
+#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2608
+#: usr/local/www/interfaces.php:2608
+msgid "802.1X Authentication Server IP Address"
+msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®IPアドレス"
+
+#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558
+#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546
+#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576
+#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2622
+#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2611
+#: usr/local/www/interfaces.php:2632 usr/local/www/interfaces.php:2611
+#: usr/local/www/interfaces.php:2632
+msgid ""
+"Enter the IP address of the 802.1X Authentication Server. This is commonly "
+"a Radius server (FreeRadius, Internet Authentication Services, etc.)"
+msgstr "「802.1Xèªè¨¼ã‚µãƒ¼ãƒã®IPアドレスを入力ã—ã¾ã™ã€‚ã“ã‚Œã¯ã€ä¸€èˆ¬çš„ã«ã¯ã€Œ Radiusサーãƒï¼ˆã«FreeRadius ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆèªè¨¼ã‚µãƒ¼ãƒ“スãªã©ï¼‰"
+
+#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562
+#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580
+#: usr/local/www/interfaces.php:2626 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2615
+msgid "802.1X Authentication Server Port"
+msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553
+#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2629
+#: usr/local/www/interfaces.php:2650 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2639 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2639
+msgid "Leave blank for the default port 1812."
+msgstr "デフォルト1812ãƒãƒ¼ãƒˆã«å¯¾ã—ã¦ã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587
+#: usr/local/www/interfaces.php:2633 usr/local/www/interfaces.php:2622
+#: usr/local/www/interfaces.php:2622
+msgid "802.1X Authentication Server Shared Secret"
+msgstr "802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ"
+
+#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597
+#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2661 usr/local/www/interfaces.php:2650
+#: usr/local/www/interfaces.php:2650
+msgid "Authentication Roaming Preauth"
+msgstr "èªè¨¼ãƒ­ãƒ¼ãƒŸãƒ³ã‚°PREAUTH"
+
+#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608
+#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626
+#: usr/local/www/interfaces.php:2672 usr/local/www/interfaces.php:2661
+#: usr/local/www/interfaces.php:2661
+msgid "Private networks"
+msgstr "プライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634
+#: usr/local/www/interfaces.php:2680 usr/local/www/interfaces.php:2669
+#: usr/local/www/interfaces.php:2669
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved for "
+"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"
+msgstr "「設定ã—ãŸå ´åˆã€ã“ã®ã‚ªãƒ—ションをブロックトラフィックã¯ã®ãŸã‚ã«äºˆç´„ã•ã‚Œã¦ã„ã‚‹IPアドレスã‹ã‚‰ã®ã€Œ RFC 1918 ( 10月8日〠172.16/12 〠192.168/16 )ã«å¾“ã£ã¦ãƒ—ライベートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã—ã¦"
+
+#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636
+#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671
+#: usr/local/www/interfaces.php:2671
+msgid "well as loopback addresses (127/8)."
+msgstr "ã ã‘ã§ãªãã€ãƒ«ãƒ¼ãƒ—ãƒãƒƒã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ˆ 8分ã®127 ) 。"
+
+#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636
+#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671
+#: usr/local/www/interfaces.php:2671
+msgid ""
+"You should generally leave this option turned on, unless your WAN network "
+"lies in such a private address space, too."
+msgstr "ã“ã®ã‚ˆã†ãªãƒ—ライベートアドレス空間ã«ã‚ã‚Šã™ãŽã¦ã€ 「ã‚ãªãŸã®WANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„é™ã‚Šã€ä¸€èˆ¬çš„ã«ã¯ã€ã‚ªãƒ³ã«ãªã£ã¦ã€ã“ã®ã‚ªãƒ—ションを残ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628
+#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646
+#: usr/local/www/interfaces.php:2692 usr/local/www/interfaces.php:2681
+#: usr/local/www/interfaces.php:2681
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved "
+"(but not RFC 1918) or not yet assigned by IANA."
+msgstr "「設定ã—ãŸå ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’ブロックã—ã€IPアドレスã‹ã‚‰äºˆç´„ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã€ (ãŸã ã—ã€RFC 1918 )ã‹ã€ã¾ã IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„。"
+
+#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630
+#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648
+#: usr/local/www/interfaces.php:2694 usr/local/www/interfaces.php:2683
+#: usr/local/www/interfaces.php:2683
+msgid ""
+"Bogons are prefixes that should never appear in the Internet routing table, "
+"and obviously should not appear as the source address in any packets you "
+"receive."
+msgstr "「 Bogonsã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルã«è¡¨ç¤ºã•ã‚Œãªã„よã†ã«ã—ã¦ãã ã•ã„接頭辞ã§ã‚ã‚‹ã€ã¨æ˜Žã‚‰ã‹ã«ã‚ãªãŸã¯ã€ 「å—ä¿¡ã—ãŸã™ã¹ã¦ã®ãƒ‘ケットã®é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783
+#: usr/local/www/interfaces.php:2820 usr/local/www/interfaces.php:2829
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+msgid "You can manage Gateways"
+msgstr "ã‚ãªãŸã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’管ç†ã§ãã‚‹"
+
+#: usr/local/www/interfaces_assign.php:43
+#: usr/local/www/interfaces_assign.php:43
+msgid "Assign network ports"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®å‰²ã‚Šå½“ã¦"
+
+#: usr/local/www/interfaces_assign.php:194
+#: usr/local/www/interfaces_assign.php:194
+#, php-format
+msgid "Port %1$s was assigned to %2$s interfaces:"
+msgstr "ãƒãƒ¼ãƒˆã¯%1$sã¯%2$sインタフェースã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã€‚"
+
+#: usr/local/www/interfaces_assign.php:262
+#: usr/local/www/interfaces_assign.php:274
+#: usr/local/www/interfaces_assign.php:274
+msgid ""
+"The interface is part of a group. Please remove it from the group to continue"
+msgstr "「インターフェースã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Šé™¤ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/interfaces_assign.php:264
+#: usr/local/www/interfaces_assign.php:276
+#: usr/local/www/interfaces_assign.php:276
+msgid ""
+"The interface is part of a bridge. Please remove it from the bridge to "
+"continue"
+msgstr "「インターフェイスã¯ã€ãƒ–リッジã®ä¸€éƒ¨ã§ã‚る。ブリッジã‹ã‚‰ãれを削除ã—ã¦ãã ã•ã„ã€ç¶™ç¶š"
+
+#: usr/local/www/interfaces_assign.php:266
+#: usr/local/www/interfaces_assign.php:278
+#: usr/local/www/interfaces_assign.php:278
+msgid ""
+"The interface is part of a gre tunnel. Please delete the tunnel to continue"
+msgstr "「インターフェースã¯GREトンãƒãƒ«ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ãƒˆãƒ³ãƒãƒ«ã‚’削除ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/interfaces_assign.php:268
+#: usr/local/www/interfaces_assign.php:280
+#: usr/local/www/interfaces_assign.php:280
+msgid ""
+"The interface is part of a gif tunnel. Please delete the tunnel to continue"
+msgstr "「インターフェースã¯ã€GIFトンãƒãƒ«ã®ä¸€éƒ¨ã§ã‚る。継続ã—ã¦ãƒˆãƒ³ãƒãƒ«ã‚’削除ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/interfaces_assign.php:318
+#: usr/local/www/interfaces_assign.php:312
+#: usr/local/www/interfaces_assign.php:318
+msgid "Interface has been deleted."
+msgstr "インターフェイスã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/interfaces_assign.php:325
+#: usr/local/www/interfaces_assign.php:319
+#: usr/local/www/interfaces_assign.php:325
+msgid "lan"
+msgstr "LAN"
+
+#: usr/local/www/interfaces_assign.php:326
+#: usr/local/www/interfaces_assign.php:320
+#: usr/local/www/interfaces_assign.php:326
+msgid "LAN"
+msgstr "LAN"
+
+#: usr/local/www/interfaces_assign.php:366
+#: usr/local/www/interfaces_assign.php:360
+#: usr/local/www/interfaces_assign.php:366
+msgid "Interface has been added."
+msgstr "インタフェースãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/interfaces_assign.php:376
+#: usr/local/www/interfaces_assign.php:370
+#: usr/local/www/interfaces_assign.php:376
+msgid "The system is now rebooting. Please wait."
+msgstr "システムãŒãƒªãƒ–ートã•ã‚Œã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
+
+#: usr/local/www/interfaces_assign.php:378
+#: usr/local/www/interfaces_assign.php:372
+#: usr/local/www/interfaces_assign.php:378
+msgid "Reboot is needed. Please apply the settings in order to reboot."
+msgstr "å†èµ·å‹•ãŒå¿…è¦ã«ãªã‚‹ã€‚å†èµ·å‹•ã™ã‚‹ãŸã‚ã«è¨­å®šã‚’é©ç”¨ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_assign.php:380
+#: usr/local/www/interfaces_assign.php:374
+#: usr/local/www/interfaces_assign.php:380
+msgid ""
+"Interface mismatch detected. Please resolve the mismatch and click Save. "
+"The firewall will reboot afterwards."
+msgstr "ファイアウォールã¯ã€ãã®å¾Œå†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_assign.php:390
+#: usr/local/www/interfaces_assign.php:384
+#: usr/local/www/interfaces_assign.php:390
+msgid ""
+"The interface configuration has been changed.<br />You must apply the changes "
+"in order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚検索ã—ã¦ã€å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces_assign.php:421
+#: usr/local/www/interfaces_assign.php:415
+#: usr/local/www/interfaces_assign.php:421
+msgid "Network port"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces_assign.php:437
+#: usr/local/www/interfaces_assign.php:431
+#: usr/local/www/interfaces_assign.php:437
+#, php-format
+msgid "VLAN %1$s on %2$s"
+msgstr "%2$sã®VLANã¯%1$s"
+
+#: usr/local/www/interfaces_assign.php:480
+#: usr/local/www/interfaces_assign.php:474
+#: usr/local/www/interfaces_assign.php:480
+msgid "Do you really want to delete this interface?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_assign.php:480
+#: usr/local/www/interfaces_assign.php:474
+#: usr/local/www/interfaces_assign.php:480
+msgid "delete interface"
+msgstr "インターフェイスを削除ã™ã‚‹"
+
+#: usr/local/www/interfaces_assign.php:489
+#: usr/local/www/interfaces_assign.php:483
+#: usr/local/www/interfaces_assign.php:489
+msgid "add interface"
+msgstr "インタフェースを追加"
+
+#: usr/local/www/interfaces_assign.php:506
+#: usr/local/www/interfaces_assign.php:500
+#: usr/local/www/interfaces_assign.php:504
+#: usr/local/www/interfaces_assign.php:504
+msgid ""
+"Interfaces that are configured as members of a lagg(4) interface will not be "
+"shown."
+msgstr "示ã•ã‚Œã¦ã„る「 laggã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦æ§‹æˆã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ ( 4 )インタフェースã¯ãªã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/diag_pf_info.php:46 usr/local/www/diag_pf_info.php:46
+msgid "Diagnostics: pfInfo"
+msgstr "診断: PFINFO"
+
+#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:103
+msgid "Gathering PF information, please wait..."
+msgstr "PF情報をåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/diag_smart.php:14 usr/local/www/diag_smart.php:14
+msgid "S.M.A.R.T. Monitor Tools"
+msgstr "S.M.A.R.T.ツールを監視"
+
+#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73
+#: usr/local/www/diag_smart.php:73
+msgid "PASSED"
+msgstr "PASSED"
+
+#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74
+#: usr/local/www/diag_smart.php:74
+msgid "FAILED"
+msgstr "FAILED"
+
+#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75
+#: usr/local/www/diag_smart.php:75
+msgid "Warning"
+msgstr "警告"
+
+#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413
+#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434
+#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434
+msgid "Abort"
+msgstr "中止"
+
+#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175
+#: usr/local/www/diag_smart.php:175
+#, php-format
+msgid "Email sent to %s"
+msgstr "メール%sã«é€ã‚‰"
+
+#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266
+#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287
+#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287
+msgid "Information/Tests"
+msgstr "情報/テスト"
+
+#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206
+#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227
+#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227
+msgid "Config"
+msgstr "設定"
+
+#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524
+#: usr/local/www/system_certmanager.php:617
+#: usr/local/www/system_certmanager.php:720
+#: usr/local/www/system_certmanager.php:733
+#: usr/local/www/system_certmanager.php:886
+#: usr/local/www/system_camanager.php:525
+#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230
+#: usr/local/www/system_certmanager.php:758
+#: usr/local/www/system_certmanager.php:928
+#: usr/local/www/system_certmanager.php:759
+#: usr/local/www/system_certmanager.php:932
+#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230
+#: usr/local/www/system_certmanager.php:759
+#: usr/local/www/system_certmanager.php:932
+msgid "Email Address"
+msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252
+#: usr/local/www/diag_smart.php:252
+msgid "Test email"
+msgstr "テストメール"
+
+#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257
+#: usr/local/www/diag_smart.php:257
+#, php-format
+msgid "Send test email to %s"
+msgstr "%sã«ãƒ†ã‚¹ãƒˆãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡"
+
+#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283
+#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304
+#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304
+msgid "Info"
+msgstr "インフォメーション"
+
+#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302
+#: usr/local/www/diag_smart.php:302
+msgid "Info type"
+msgstr "情報ã®ç¨®é¡ž"
+
+#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305
+#: usr/local/www/diag_smart.php:305
+msgid "Health"
+msgstr "å¥åº·"
+
+#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306
+#: usr/local/www/diag_smart.php:306
+msgid "SMART Capabilities"
+msgstr "SMART機能"
+
+#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307
+#: usr/local/www/diag_smart.php:307
+msgid "Attributes"
+msgstr "属性"
+
+#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179
+#: usr/local/www/diag_smart.php:308 usr/local/www/firewall_aliases.php:177
+#: usr/local/www/firewall_aliases.php:177 usr/local/www/diag_smart.php:308
+msgid "All"
+msgstr "ã™ã¹ã¦"
+
+#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330
+#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397
+#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351
+#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418
+#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351
+#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418
+msgid "Device: /dev/"
+msgstr "デãƒã‚¤ã‚¹ï¼šã¯/ dev /"
+
+#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383
+#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404
+#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404
+msgid "View"
+msgstr "ビュー"
+
+#: usr/local/www/diag_smart.php:318
+msgid "Perform Self Tests"
+msgstr "セルフ·テストを実行"
+
+#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342
+#: usr/local/www/diag_smart.php:342
+msgid "Test type"
+msgstr "視力検査表"
+
+#: usr/local/www/diag_smart.php:323
+#: usr/local/www/status_gateway_groups.php:123
+#: usr/local/www/status_gateways.php:118
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60
+#: usr/local/www/status_gateways.php:119
+#: usr/local/www/status_gateway_groups.php:124
+#: usr/local/www/diag_smart.php:344 usr/local/www/diag_smart.php:344
+#: usr/local/www/status_gateway_groups.php:124
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60
+#: usr/local/www/status_gateways.php:119
+msgid "Offline"
+msgstr "オフラインã§"
+
+#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345
+#: usr/local/www/diag_smart.php:345
+msgid "Short"
+msgstr "ショート"
+
+#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346
+#: usr/local/www/diag_system_pftop.php:137 usr/local/www/diag_smart.php:346
+#: usr/local/www/diag_system_pftop.php:137
+msgid "Long"
+msgstr "ロング"
+
+#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347
+#: usr/local/www/diag_smart.php:347
+msgid "Conveyance (ATA Disks Only)"
+msgstr "æ¬é€ï¼ˆ ATAディスクã®ã¿ï¼‰"
+
+#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378
+#: usr/local/www/diag_smart.php:378
+msgid "View Logs"
+msgstr "ログを見る"
+
+#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381
+#: usr/local/www/diag_smart.php:381
+msgid "Log type"
+msgstr "タイプをログã«è¨˜éŒ²ã™ã‚‹"
+
+#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383
+#: usr/local/www/diag_smart.php:383
+msgid "Error"
+msgstr "エラー"
+
+#: usr/local/www/diag_smart.php:363
+msgid "Self Test"
+msgstr "セルフテスト"
+
+#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415
+#: usr/local/www/diag_smart.php:415
+msgid "Abort tests"
+msgstr "テストを中止"
+
+#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434
+#: usr/local/www/diag_smart.php:434
+msgid "Do you really want to abort the test?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ãƒ†ã‚¹ãƒˆã‚’中止ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449
+#: usr/local/www/diag_smart.php:449
+msgid "Back"
+msgstr "ãƒãƒƒã‚¯"
+
+#: usr/local/www/diag_states_summary.php:154
+#: usr/local/www/diag_states_summary.php:143
+#: usr/local/www/diag_states_summary.php:145
+#: usr/local/www/diag_states_summary.php:145
+msgid "Src Ports"
+msgstr "SRCãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_states_summary.php:155
+#: usr/local/www/diag_states_summary.php:144
+#: usr/local/www/diag_states_summary.php:146
+#: usr/local/www/diag_states_summary.php:146
+msgid "Dst Ports"
+msgstr "DSTãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_states_summary.php:185
+#: usr/local/www/diag_states_summary.php:174
+#: usr/local/www/diag_states_summary.php:176
+#: usr/local/www/diag_states_summary.php:176
+msgid "State Table Summary"
+msgstr "状態表ã®æ¦‚è¦"
+
+#: usr/local/www/diag_states_summary.php:191
+#: usr/local/www/diag_states_summary.php:180
+#: usr/local/www/diag_states_summary.php:182
+#: usr/local/www/diag_states_summary.php:182
+msgid "By Source IP"
+msgstr "é€ä¿¡å…ƒIPã«ã‚ˆã‚‹"
+
+#: usr/local/www/diag_states_summary.php:192
+#: usr/local/www/diag_states_summary.php:181
+#: usr/local/www/diag_states_summary.php:183
+#: usr/local/www/diag_states_summary.php:183
+msgid "By Destination IP"
+msgstr "宛先IPã«ã‚ˆã‚‹"
+
+#: usr/local/www/diag_states_summary.php:193
+#: usr/local/www/diag_states_summary.php:182
+#: usr/local/www/diag_states_summary.php:184
+#: usr/local/www/diag_states_summary.php:184
+msgid "Total per IP"
+msgstr "IPアドレスã”ã¨ã®åˆè¨ˆ"
+
+#: usr/local/www/diag_states_summary.php:194
+#: usr/local/www/diag_states_summary.php:183
+#: usr/local/www/diag_states_summary.php:185
+#: usr/local/www/diag_states_summary.php:185
+msgid "By IP Pair"
+msgstr "IPペアã§"
+
+#: usr/local/www/diag_system_activity.php:46
+#: usr/local/www/diag_system_activity.php:46
+msgid "Diagnostics: System Activity"
+msgstr "診断:システムアクティビティ"
+
+#: usr/local/www/diag_system_activity.php:101
+#: usr/local/www/diag_system_activity.php:101
+msgid "Gathering CPU activity, please wait..."
+msgstr "CPUアクティビティをåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/diag_system_pftop.php:45
+#: usr/local/www/diag_system_pftop.php:45
+msgid "Diagnostics: pfTop"
+msgstr "診断: pfTop"
+
+#: usr/local/www/diag_system_pftop.php:51
+#: usr/local/www/diag_system_pftop.php:62
+#: usr/local/www/diag_system_pftop.php:103
+msgid "bytes"
+msgstr "ãƒã‚¤ãƒˆ"
+
+#: usr/local/www/diag_system_pftop.php:99
+#: usr/local/www/diag_system_pftop.php:148
+#: usr/local/www/diag_system_pftop.php:148
+msgid "Sort type:"
+msgstr "ソートã®ç¨®é¡žï¼š"
+
+#: usr/local/www/diag_system_pftop.php:102
+msgid "age"
+msgstr "時代"
+
+#: usr/local/www/diag_system_pftop.php:104
+msgid "dest"
+msgstr "DEST"
+
+#: usr/local/www/diag_system_pftop.php:105
+msgid "dport"
+msgstr "DPORT"
+
+#: usr/local/www/diag_system_pftop.php:106
+msgid "exp"
+msgstr "EXP"
+
+#: usr/local/www/diag_system_pftop.php:108
+msgid "peak"
+msgstr "ピーク"
+
+#: usr/local/www/diag_system_pftop.php:109
+msgid "pkt"
+msgstr "PKT"
+
+#: usr/local/www/diag_system_pftop.php:110
+#: usr/local/www/status_interfaces.php:365
+#: usr/local/www/status_interfaces.php:462
+#: usr/local/www/status_interfaces.php:465
+#: usr/local/www/status_interfaces.php:465
+msgid "rate"
+msgstr "率"
+
+#: usr/local/www/diag_system_pftop.php:111
+msgid "size"
+msgstr "サイズ"
+
+#: usr/local/www/diag_system_pftop.php:112
+msgid "sport"
+msgstr "スãƒãƒ¼ãƒ„"
+
+#: usr/local/www/diag_system_pftop.php:113
+msgid "src"
+msgstr "SRC"
+
+#: usr/local/www/diag_system_pftop.php:126
+#: usr/local/www/diag_system_pftop.php:187
+#: usr/local/www/diag_system_pftop.php:187
+msgid "Gathering pfTOP activity, please wait..."
+msgstr "pfTOPアクティビティをåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/license.php:45 usr/local/www/license.php:45
+msgid "License"
+msgstr "ライセンス"
+
+#: usr/local/www/license.php:47 usr/local/www/license.php:47
+msgid "is Copyright"
+msgstr "著作権ã¯ã€"
+
+#: usr/local/www/license.php:47 usr/local/www/firewall_rules_edit.php:1585
+#: usr/local/www/firewall_rules_edit.php:1593
+#: usr/local/www/firewall_nat_edit.php:869
+#: usr/local/www/firewall_nat_edit.php:877
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878 usr/local/www/license.php:47
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+msgid "by"
+msgstr "ãƒã‚¤"
+
+#: usr/local/www/license.php:48 usr/local/www/license.php:52
+#: usr/local/www/license.php:48 usr/local/www/license.php:52
+msgid "All rights reserved"
+msgstr "無断複写·転載をç¦ã˜ã¾ã™"
+
+#: usr/local/www/license.php:50 usr/local/www/license.php:50
+msgid "m0n0wall is Copyright "
+msgstr "m0n0wallã®è‘—作権ã§ã™"
+
+#: usr/local/www/license.php:50 usr/local/www/license.php:50
+msgid "2002-2007 by Manuel Kasper"
+msgstr "マヌエル·カスパーã«ã‚ˆã‚‹2002-2007"
+
+#: usr/local/www/license.php:53 usr/local/www/license.php:53
+msgid "Redistribution and use in source and binary forms, with or without"
+msgstr "å†é…布ã®æœ‰ç„¡ã«ã‹ã‹ã‚らãšã€ã‚½ãƒ¼ã‚¹ãŠã‚ˆã³ãƒã‚¤ãƒŠãƒªå½¢å¼ã§ã®ä½¿ç”¨"
+
+#: usr/local/www/license.php:54 usr/local/www/license.php:54
+msgid ""
+"modification, are permitted provided that the following conditions are met"
+msgstr "「修正ã¯ã€æ¬¡ã®æ¡ä»¶ã‚’満ãŸã™å ´åˆã«è¨±å¯ã•ã‚Œ"
+
+#: usr/local/www/license.php:57 usr/local/www/license.php:57
+msgid ""
+"1. Redistributions of source code must retain the above copyright notice,"
+msgstr "「 1 。ソースコードã®å†é…布ã«ã¯ã€ä¸Šè¨˜ã®è‘—作権表示をä¿æŒã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ã€"
+
+#: usr/local/www/license.php:59 usr/local/www/license.php:59
+msgid "this list of conditions and the following disclaimer"
+msgstr "ã“ã®æ¡ä»¶ãƒªã‚¹ãƒˆã€ãŠã‚ˆã³ä»¥ä¸‹ã®å…責"
+
+#: usr/local/www/license.php:61 usr/local/www/license.php:61
+msgid "2. Redistributions in binary form must reproduce the above copyright"
+msgstr "2 。ãƒã‚¤ãƒŠãƒªå½¢å¼ã§å†é…布ã™ã‚‹å ´åˆã¯ã€ä¸Šè¨˜ã®è‘—作権を複写ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/license.php:62 usr/local/www/license.php:62
+msgid "notice, this list of conditions and the following disclaimer in the"
+msgstr "ã€ã“ã®æ¡ä»¶ãƒªã‚¹ãƒˆã€ãŠã‚ˆã³ä¸‹è¨˜ã®å…責事項ã«æ°—付ã"
+
+#: usr/local/www/license.php:64 usr/local/www/license.php:64
+msgid "documentation and/or other materials provided with the distribution."
+msgstr "ドキュメントãŠã‚ˆã³/ã¾ãŸã¯é…布ã§æä¾›ã•ã‚Œã‚‹ä»–ã®ç‰©è³ªã€‚"
+
+#: usr/local/www/license.php:66 usr/local/www/license.php:66
+msgid "THIS SOFTWARE IS PROVIDED "
+msgstr "本ソフトウェアãŒæä¾›ã•ã‚Œ"
+
+#: usr/local/www/license.php:66 usr/local/www/license.php:66
+msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,"
+msgstr "ç¾çŠ¶ã®ã¾ã¾'' ã€ã„ã‹ãªã‚‹æ˜Žç¤ºã¾ãŸã¯é»™ç¤ºã®ä¿è¨¼ã€"
+
+#: usr/local/www/license.php:68 usr/local/www/license.php:68
+msgid ""
+"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY"
+msgstr "「一切ã®æ˜Žç¤ºã€ã‚’å«ã‚€ãŒã€ã“れらã«é™å®šã•ã‚Œãªã„"
+
+#: usr/local/www/license.php:69 usr/local/www/license.php:69
+msgid ""
+"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE"
+msgstr "特定ã®ç›®çš„ã«å¯¾ã™ã‚‹"ãŠã‚ˆã³é©åˆã¯ã€ã„ã‹ãªã‚‹å ´åˆã‚‚。放棄ã•ã‚ŒSHALL"
+
+#: usr/local/www/license.php:71 usr/local/www/license.php:71
+msgid ""
+"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"
+msgstr "「著者ã¯ã„ã‹ãªã‚‹ç›´æŽ¥çš„ã€é–“接的ã€å¶ç™ºçš„ã«å¯¾ã—ã¦ã€ä¸€åˆ‡è²¬ä»»ã‚’è² ã‚ã€ç‰¹æ®Šã€æ‡²æˆ’çš„ã€"
+
+#: usr/local/www/license.php:73 usr/local/www/license.php:73
+msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF"
+msgstr "ã¾ãŸã¯ãã®ä»–ã‚’å«ã‚€ã§ã¯ãªãã€å¿…然的ãªæ害ã¯ï¼ˆTO ã€èª¿é”ã®é™ã‚‰ã‚ŒãŸ"
+
+#: usr/local/www/license.php:75 usr/local/www/license.php:75
+msgid ""
+"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"
+msgstr "「代替商å“ã¾ãŸã¯ã‚µãƒ¼ãƒ“ス;ã®å–ªå¤±ã€ãƒ‡ãƒ¼ã‚¿ã‚„利益ã¾ãŸã¯äº‹æ¥­"
+
+#: usr/local/www/license.php:77 usr/local/www/license.php:77
+msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN"
+msgstr "中断ã¯ï¼‰ã„ã‹ãªã‚‹è²¬ä»»ã€ä¸æ³•INã®ä¸Šã®ä»»æ„ã®ç†è«–"
+
+#: usr/local/www/license.php:79 usr/local/www/license.php:79
+msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"
+msgstr "契約〠(éŽå¤±ã‚’å«ã‚€ã¾ãŸã¯ãã®ä»–)厳格責任ã€ã¾ãŸã¯ä¸æ³•è¡Œç‚º"
+
+#: usr/local/www/license.php:80 usr/local/www/license.php:80
+msgid ""
+"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE"
+msgstr ""ã«ã¤ã„ã¦ã®é€šå‘ŠãŒã‚ã£ãŸå ´åˆã§ã‚‚ã€æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ä½¿ç”¨ã«ã©ã®ã‚ˆã†ãªæ–¹æ³•ã§èµ·å› "
+
+#: usr/local/www/license.php:82 usr/local/www/license.php:82
+msgid "POSSIBILITY OF SUCH DAMAGE"
+msgstr "ãã®ã‚ˆã†ãªæ害ã®å¯èƒ½æ€§ã«ã¤ã„ã¦"
+
+#: usr/local/www/license.php:84 usr/local/www/license.php:84
+msgid "The following persons have contributed code to m0n0wall"
+msgstr "次ã®äººã¯m0n0wallã®ã«ã‚³ãƒ¼ãƒ‰ã‚’貢献ã—ã¦ã„ã‚‹"
+
+#: usr/local/www/license.php:86 usr/local/www/license.php:86
+msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder"
+msgstr "診断: Pingã®æ©Ÿèƒ½ã€ç„¡ç·šLANãƒãƒ£ãƒãƒ«ã‚’自動é¸æŠžã€ DNSフォワーダ"
+
+#: usr/local/www/license.php:90 usr/local/www/license.php:90
+msgid "Timezone and NTP client support"
+msgstr "タイムゾーンã¨NTPクライアントã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/license.php:94 usr/local/www/license.php:94
+msgid ""
+"Remote syslog'ing; some code bits for DHCP server on optional interfaces"
+msgstr "「リモートsyslog'ing ã€ã‚ªãƒ—ションã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã®DHCPサーãƒã®ãŸã‚ã®ã„ãã¤ã‹ã®ã‚³ãƒ¼ãƒ‰ãƒ“ット"
+
+#: usr/local/www/license.php:98 usr/local/www/license.php:98
+msgid ""
+"Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP "
+"agent"
+msgstr "「暗å·åŒ–webConfiguratorパスワードã®ã‚¢ã‚¤ãƒ‡ã‚¢/コードビット〠minimalized SNMP ã€ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ"
+
+#: usr/local/www/license.php:102 usr/local/www/license.php:102
+msgid "Advanced outbound NAT: destination selection"
+msgstr "高度ãªã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NAT :é€ä¿¡å…ˆã®é¸æŠž"
+
+#: usr/local/www/license.php:106 usr/local/www/license.php:106
+msgid "Filtering bridge patches "
+msgstr "フィルタリングブリッジパッãƒ"
+
+#: usr/local/www/license.php:110 usr/local/www/license.php:110
+msgid ""
+"Filter rule patches (ordering, block/pass, disabled); better status page;"
+msgstr "「フィルタルールã®ãƒ‘ッãƒï¼ˆã‚ªãƒ¼ãƒ€ãƒªãƒ³ã‚°ã€ãƒ–ロック/パスã€ç„¡åŠ¹ï¼‰ ã€å„ªã‚ŒãŸã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸;"
+
+#: usr/local/www/license.php:112 usr/local/www/license.php:112
+msgid "webConfigurator assign network ports page "
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒˆã®ãƒšãƒ¼ã‚¸ã‚’割り当ã¦webConfigurator"
+
+#: usr/local/www/license.php:115 usr/local/www/license.php:115
+msgid "enhanced "
+msgstr "強化ã•ã‚ŒãŸ"
+
+#: usr/local/www/license.php:115 usr/local/www/license.php:115
+msgid "execute command"
+msgstr "コマンドを実行ã™ã‚‹"
+
+#: usr/local/www/license.php:116 usr/local/www/license.php:116
+msgid " page"
+msgstr "ページ"
+
+#: usr/local/www/license.php:119 usr/local/www/license.php:119
+msgid "DHCP client: send hostname patch"
+msgstr "DHCPクライアント:ホストåパッãƒã‚’é€ã‚‹"
+
+#: usr/local/www/license.php:122 usr/local/www/license.php:122
+msgid "DHCP lease list page"
+msgstr "DHCPリースリストページ"
+
+#: usr/local/www/license.php:125 usr/local/www/license.php:125
+msgid "type filter rules; dial-on-demand"
+msgstr "フィルタルールを入力ã—ã€ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰"
+
+#: usr/local/www/license.php:128 usr/local/www/license.php:128
+msgid "SVG-based traffic grapher"
+msgstr "SVGベースã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚°ãƒ©ãƒ•ã‚¡"
+
+#: usr/local/www/license.php:131 usr/local/www/license.php:131
+msgid "per-user IP address assignments for PPTP VPN"
+msgstr "PPTP VPN用ã®ãƒ¦ãƒ¼ã‚¶ã”ã¨ã®IPアドレスã®å‰²ã‚Šå½“ã¦"
+
+#: usr/local/www/license.php:134 usr/local/www/license.php:134
+msgid "NAT on optional interfaces"
+msgstr "オプションã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã®NAT"
+
+#: usr/local/www/license.php:137 usr/local/www/license.php:137
+msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šãƒ‘ススルーã®MAC / IPアドレス〠RADIUSèªè¨¼"
+
+#: usr/local/www/license.php:137 usr/local/www/license.php:137
+msgid "accounting;"
+msgstr "会計;"
+
+#: usr/local/www/license.php:138 usr/local/www/license.php:138
+msgid "HTTP server concurrency limit"
+msgstr "HTTPサーãƒãƒ¼ã®åŒæ™‚実行ã®åˆ¶é™"
+
+#: usr/local/www/license.php:141 usr/local/www/license.php:141
+msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;"
+msgstr "トラフィックシェーパã®ToSマッãƒãƒ³ã‚°ã€ãƒžã‚¸ãƒƒã‚¯ã‚·ã‚§ã‚¤ãƒ‘ー〠DHCPãŒæœªçŸ¥ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å¦å®š;"
+
+#: usr/local/www/license.php:142 usr/local/www/license.php:142
+msgid "IPsec user FQDNs; DHCP relay"
+msgstr "IPsecã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®FQDN 〠DHCPリレー"
+
+#: usr/local/www/license.php:145 usr/local/www/license.php:145
+msgid "IDE hard disk standby"
+msgstr "IDEãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒ³ãƒã‚¤"
+
+#: usr/local/www/license.php:148 usr/local/www/license.php:148
+msgid "CPU/memory usage display"
+msgstr "CPU /メモリ使用é‡è¡¨ç¤º"
+
+#: usr/local/www/license.php:151 usr/local/www/license.php:151
+msgid "OpenVPN support"
+msgstr "OpenVPNã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/license.php:153 usr/local/www/license.php:153
+msgid "is based upon/includes various free software packages, listed below."
+msgstr "/下記ã®æ§˜ã€…ãªç„¡æ–™ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ‘ッケージãŒå«ã¾ã‚Œã¦åŸºã¥ã„ã¦ã„る。"
+
+#: usr/local/www/license.php:155 usr/local/www/license.php:155
+#, php-format
+msgid ""
+"The author of %s would like to thank the authors of these software packages "
+"for their efforts"
+msgstr "彼らã®åŠªåŠ›ã¯ã€ã€Œ %sã®è‘—者ã¯ã“れらã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ‘ッケージã®ä½œè€…ã«æ„Ÿè¬ã—ãŸã„ã¨æ€ã„ã¾ã™ã€"
+
+#: usr/local/www/license.php:158 usr/local/www/license.php:161
+#: usr/local/www/license.php:164 usr/local/www/license.php:168
+#: usr/local/www/license.php:174 usr/local/www/license.php:178
+#: usr/local/www/license.php:181 usr/local/www/license.php:184
+#: usr/local/www/license.php:187 usr/local/www/license.php:191
+#: usr/local/www/license.php:192 usr/local/www/license.php:194
+#: usr/local/www/license.php:200 usr/local/www/license.php:201
+#: usr/local/www/license.php:204 usr/local/www/license.php:211
+#: usr/local/www/license.php:169 usr/local/www/license.php:158
+#: usr/local/www/license.php:161 usr/local/www/license.php:164
+#: usr/local/www/license.php:168 usr/local/www/license.php:169
+#: usr/local/www/license.php:174 usr/local/www/license.php:178
+#: usr/local/www/license.php:181 usr/local/www/license.php:184
+#: usr/local/www/license.php:187 usr/local/www/license.php:191
+#: usr/local/www/license.php:192 usr/local/www/license.php:194
+#: usr/local/www/license.php:200 usr/local/www/license.php:201
+#: usr/local/www/license.php:204 usr/local/www/license.php:211
+msgid "Copyright"
+msgstr "著作権"
+
+#: usr/local/www/license.php:158
+msgid " 1994-2003 FreeBSD, Inc. All rights reserved"
+msgstr "1994-2003ã®FreeBSD ã€æ ªå¼ä¼šç¤¾ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ä¿æœ‰"
+
+#: usr/local/www/license.php:160 usr/local/www/license.php:160
+msgid "This product includes PHP, freely available from"
+msgstr "本製å“ã¯ã€ã‹ã‚‰ç„¡æ–™ã§å…¥æ‰‹PHPã‚’å«ã¿"
+
+#: usr/local/www/license.php:161
+msgid "1999 - 2003 The PHP Group. All rights reserved"
+msgstr "1999 - 2003ザ· PHPã®ã‚°ãƒ«ãƒ¼ãƒ—。無断複写·転載をç¦ã˜ã¾ã™"
+
+#: usr/local/www/license.php:163 usr/local/www/license.php:163
+msgid "LightTPD"
+msgstr "lighttpdã®"
+
+#: usr/local/www/license.php:164
+msgid " 2004 by Jan Kneschke "
+msgstr "2004ヤンKneschkeã«ã‚ˆã‚‹"
+
+#: usr/local/www/license.php:165 usr/local/www/license.php:175
+#: usr/local/www/license.php:165 usr/local/www/license.php:175
+msgid "All rights reserved."
+msgstr "無断複写·転載をç¦ã˜ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:167 usr/local/www/license.php:167
+msgid "ISC DHCP server "
+msgstr "ISC DHCPサーãƒãƒ¼"
+
+#: usr/local/www/license.php:168
+msgid "1996-2003 Internet Software Consortium. All rights reserved."
+msgstr "1996-2003 Internet Software Consortiumã®ã€‚無断複写·転載をç¦ã˜ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:173 usr/local/www/license.php:173
+msgid "MPD - Multi-link PPP daemon for FreeBSD"
+msgstr "MPD - FreeBSD用ã®ãƒžãƒ«ãƒãƒªãƒ³ã‚¯PPPデーモン"
+
+#: usr/local/www/license.php:177 usr/local/www/license.php:177
+msgid "Circular log support for FreeBSD syslogd "
+msgstr "FreeBSDã®syslogdã®ãŸã‚ã®å¾ªç’°ãƒ­ã‚°ã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/license.php:180 usr/local/www/license.php:180
+msgid "Dnsmasq - a DNS forwarder for NAT firewalls"
+msgstr "DNSMASQ - NATファイアウォールã®DNSフォワーダ"
+
+#: usr/local/www/license.php:183 usr/local/www/license.php:183
+msgid "Racoon"
+msgstr "ラクーン"
+
+#: usr/local/www/license.php:184 usr/local/www/license.php:184
+msgid "1995-2002 WIDE Project. All rights reserved."
+msgstr "1995-2002 WIDEプロジェクト。無断複写·転載をç¦ã˜ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:186 usr/local/www/license.php:186
+msgid "msntp"
+msgstr "msntp"
+
+#: usr/local/www/license.php:187 usr/local/www/license.php:187
+msgid ""
+" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights "
+"reserved."
+msgstr "「 1996年〠1997年〠2000年メキシコマクラーレンã€ã‚±ãƒ³ãƒ–リッジ大学。ã™ã¹ã¦ã®è‘—作権ã¯ã€ 「予約。"
+
+#: usr/local/www/license.php:190 usr/local/www/license.php:190
+msgid "UCD-SNMP"
+msgstr "UCD -SNMP"
+
+#: usr/local/www/license.php:191 usr/local/www/license.php:191
+msgid "1989, 1991, 1992 by Carnegie Mellon University."
+msgstr "1989 〠1991 〠1992カーãƒã‚®ãƒ¼ãƒ¡ãƒ­ãƒ³å¤§å­¦ã«ã‚ˆã‚‹ã€‚"
+
+#: usr/local/www/license.php:192 usr/local/www/license.php:192
+msgid ""
+"1996, 1998-2000 The Regents of the University of California. All rights "
+"reserved"
+msgstr "「 1996å¹´ã€ã‚«ãƒªãƒ•ã‚©ãƒ«ãƒ‹ã‚¢å¤§å­¦ã®1998å¹´ã‹ã‚‰2000年ジェンツ。ã™ã¹ã¦ã®æ¨©åˆ©ã‚’「予約"
+
+#: usr/local/www/license.php:194 usr/local/www/license.php:194
+msgid "2001-2002, Network Associates Technology, Inc. All rights reserved."
+msgstr "2001-2002 ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚½ã‚·ã‚¨ã‚¤ãƒ„テクノロジー株å¼ä¼šç¤¾ã™ã¹ã¦ã®ç‰ˆæ¨©ã‚’ä¿æœ‰ã—ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:196 usr/local/www/license.php:196
+msgid "Portions of this code are copyright"
+msgstr "ã“ã®ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã¯ã€è‘—作権ã§ã‚ã‚‹"
+
+#: usr/local/www/license.php:196 usr/local/www/license.php:196
+msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved."
+msgstr "2001-2002 ã€ã‚±ãƒ³ãƒ–リッジ·ブロードãƒãƒ³ãƒ‰ï¼ˆæ ªï¼‰ã™ã¹ã¦ã®ç‰ˆæ¨©ã‚’ä¿æœ‰ã—ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:199 usr/local/www/license.php:199
+msgid "choparp"
+msgstr "choparp"
+
+#: usr/local/www/license.php:203 usr/local/www/license.php:203
+msgid "BPALogin"
+msgstr "BPALogin"
+
+#: usr/local/www/license.php:203 usr/local/www/license.php:203
+msgid "lightweight portable BIDS2 login client"
+msgstr "軽é‡ã®ãƒãƒ¼ã‚¿ãƒ–ルBIDS2ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ"
+
+#: usr/local/www/license.php:204 usr/local/www/license.php:204
+msgid " 2001-3 Shane Hyde, and others."
+msgstr "2001-3シェーンãƒã‚¤ãƒ‰ãªã©ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/license.php:206 usr/local/www/license.php:206
+msgid "php-radius"
+msgstr "PHPåŠå¾„"
+
+#: usr/local/www/license.php:207 usr/local/www/license.php:207
+msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved."
+msgstr "エドウィンGroothuis著作権2000 〠2001 〠2002 。無断複写·転載をç¦ã˜ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:208 usr/local/www/license.php:208
+msgid "This product includes software developed by Edwin Groothuis."
+msgstr "ã“ã®è£½å“ã¯ã€ã‚¨ãƒ‰ã‚¦ã‚£ãƒ³GroothuisãŒé–‹ç™ºã—ãŸã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:210 usr/local/www/license.php:210
+msgid "wol"
+msgstr "WOL"
+
+#: usr/local/www/license.php:214 usr/local/www/license.php:214
+msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC "
+msgstr "COPYRIGHT(C ) 2002ã‹ã‚‰2005 OpenVPNã®ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³LLC"
+
+#: usr/local/www/load_balancer_pool.php:72
+#: usr/local/www/load_balancer_relay_protocol.php:71
+#: usr/local/www/load_balancer_relay_protocol.php:71
+#: usr/local/www/load_balancer_pool.php:72
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"virtual server."
+msgstr "仮想サーãƒãƒ¼ã€ã¨ã¯ã€ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/load_balancer_pool.php:111
+#: usr/local/www/status_lb_pool.php:113
+#: usr/local/www/load_balancer_pool.php:109
+#: usr/local/www/status_lb_pool.php:113
+#: usr/local/www/load_balancer_pool.php:109
+#, php-format
+msgid ""
+"The load balancer configuration has been changed%sYou must apply the changes "
+"in order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€Œãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®è¨­å®šã¯changed%sYouãŒå¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã—ãŸã€ 。"
+
+#: usr/local/www/load_balancer_pool.php:133
+#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79
+#: usr/local/www/system_authservers.php:424
+#: usr/local/www/system_groupmanager.php:243
+#: usr/local/www/system_groupmanager_addprivs.php:171
+#: usr/local/www/system_usermanager.php:443
+#: usr/local/www/system_usermanager_addprivs.php:170
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/system_usermanager.php:441
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool.php:132
+#: usr/local/www/system_authservers.php:429
+#: usr/local/www/system_authservers.php:436
+#: usr/local/www/system_usermanager_settings.php:118
+#: usr/local/www/system_groupmanager.php:243
+#: usr/local/www/system_usermanager_addprivs.php:170
+#: usr/local/www/status_lb_pool.php:132
+#: usr/local/www/load_balancer_pool.php:132
+#: usr/local/www/system_authservers.php:436
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/system_usermanager_settings.php:118
+#: usr/local/www/system_usermanager.php:441 usr/local/www/status_lb_vs.php:79
+msgid "Servers"
+msgstr "サーãƒ"
+
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:223
+#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133
+#: usr/local/www/load_balancer_pool_edit.php:240
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/status_gateways.php:75
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/status_lb_pool.php:133
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/status_gateways.php:75
+msgid "Monitor"
+msgstr "モニター"
+
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/load_balancer_pool.php:148
+#: usr/local/www/load_balancer_pool.php:148
+#, php-format
+msgid ""
+"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For "
+"load balancing or failover for multiple WANs, use "
+msgstr "「 %s 2.0ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®è² è·åˆ†æ•£ã®ãŸã‚ã§ã‚ã‚Šã€ã§ã¯ãªã„複数WAN 。ã¯ã€ã€Œãƒ­ãƒ¼ãƒ‰Â·ãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã‚„フェイルオーãƒãƒ¼ã€è¤‡æ•°ã®WANãŸã‚ã€ä½¿ç”¨"
+
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/status_gateway_groups.php:48
+#: usr/local/www/status_gateway_groups.php:52
+#: usr/local/www/status_gateways.php:63
+#: usr/local/www/system_gateway_groups.php:52
+#: usr/local/www/system_gateway_groups.php:88
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/load_balancer_pool.php:151
+#: usr/local/www/system_gateway_groups.php:89
+#: usr/local/www/status_gateways.php:64
+#: usr/local/www/status_gateway_groups.php:66
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/system_gateway_groups.php:53
+#: usr/local/www/system_gateway_groups.php:98
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/status_gateway_groups.php:48
+#: usr/local/www/status_gateway_groups.php:52
+#: usr/local/www/status_gateway_groups.php:66
+#: usr/local/www/status_gateways.php:64
+#: usr/local/www/system_gateway_groups.php:53
+#: usr/local/www/system_gateway_groups.php:98
+msgid "Gateway Groups"
+msgstr "ゲートウェイグループ"
+
+#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456
+#: usr/local/www/pkg.php:456
+msgid "Do you really want to delete this item?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84
+#: usr/local/www/status_wireless.php:84
+msgid ""
+"Rescan has been initiated in the background. Refresh this page in 10 seconds "
+"to see the results."
+msgstr "「å†ã‚¹ã‚­ãƒ£ãƒ³ã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹å§‹ã•ã‚ŒãŸã€‚ 10秒ã§ã“ã®ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã€ã€Œçµæžœã‚’確èªã™ã‚‹ã€‚"
+
+#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93
+#: usr/local/www/status_wireless.php:94 usr/local/www/status_wireless.php:94
+msgid "Nearby access points or ad-hoc peers"
+msgstr "è¿‘ãã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã‚„アドホックピア"
+
+#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140
+#: usr/local/www/status_wireless.php:141 usr/local/www/status_wireless.php:141
+msgid "Associated or ad-hoc peers"
+msgstr "関連ã™ã‚‹ã‹ã€ã¾ãŸã¯ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãƒ”ã‚¢"
+
+#: usr/local/www/system.php:118 usr/local/www/system.php:119
+#: usr/local/www/system.php:112 usr/local/www/system.php:112
+msgid "The hostname may only contain the characters a-z, 0-9 and '-'."
+msgstr "' -'ホストåã¯0-9ã¨ã€ AZã®æ–‡å­—ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system.php:121 usr/local/www/system.php:122
+#: usr/local/www/system.php:115 usr/local/www/system.php:115
+msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr "ã¨' -'ドメインã¯ã€ 0〜9ã€A〜Zã®æ–‡å­—ã‚’å«ã‚€ã“ã¨ãŒã§ãã‚‹'。' 。"
+
+#: usr/local/www/system.php:131
+msgid "'."
+msgstr "' 。"
+
+#: usr/local/www/system.php:137 usr/local/www/system.php:143
+#: usr/local/www/system.php:136 usr/local/www/system.php:136
+msgid "A valid TCP/IP port must be specified for the webConfigurator port."
+msgstr "有効ãªTCP / IPãƒãƒ¼ãƒˆã¯webConfiguratorãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system.php:148 usr/local/www/system.php:154
+#: usr/local/www/system.php:147 usr/local/www/system.php:147
+#, php-format
+msgid ""
+"You can not assign a gateway to DNS '%s' server which is on a directly "
+"connected network."
+msgstr "接続ã•ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€ç›´æŽ¥ä¸Šã«ã‚ã‚Šã€DNS' %s'サーãƒãƒ¼ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/system.php:157 usr/local/www/system.php:163
+#: usr/local/www/system.php:156 usr/local/www/system.php:156
+msgid ""
+"The time update interval must be either 0 (disabled) or between 6 and 1440."
+msgstr "「時間ã®æ›´æ–°é–“éš”ã¯ã€ 0 (無効)ã¾ãŸã¯6ã¨1440ã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system.php:161 usr/local/www/system.php:167
+#: usr/local/www/system.php:160 usr/local/www/system.php:160
+msgid ""
+"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr "ã¨' -' "NTPタイムサーãƒåã¯ã€ 0〜9ã€A〜Zã®æ–‡å­—ã‚’å«ã‚€ã“ã¨ãŒã§ãã‚‹'。' 。"
+
+#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85
+#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242
+#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235
+#: usr/local/www/fbegin.inc:102 usr/local/www/system.php:235
+#: usr/local/www/fbegin.inc:102
+msgid "General Setup"
+msgstr "一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/system.php:258 usr/local/www/system.php:269
+#: usr/local/www/system.php:262 usr/local/www/system.php:262
+msgid "Name of the firewall host, without domain part"
+msgstr "ドメイン部分ãªã—ã§ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ›ã‚¹ãƒˆã®åå‰"
+
+#: usr/local/www/system.php:269 usr/local/www/system.php:280
+#: usr/local/www/system.php:273 usr/local/www/system.php:273
+msgid ""
+"Do not use 'local' as a domain name. It will cause local hosts running mDNS "
+"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."
+msgstr "「ドメインåã¨ã—ã¦ã€Œãƒ­ãƒ¼ã‚«ãƒ«ã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ã“ã‚Œã¯ã€ mDNSã®ã‚’実行ã—ã¦ã„るローカルホストã®åŽŸå› ã¨ãªã‚Šã¾ã™ã€ã®mDNSを実行ã—ã¦ã„ãªã„ローカルホストを解決ã™ã‚‹ã“ã¨ãŒã§ããªã„よã†ã«ï¼ˆãªã©ã€ãƒœãƒ³ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ avahiã®ï¼‰ 。"
+
+#: usr/local/www/system.php:271 usr/local/www/system.php:282
+#: usr/local/www/system.php:275 usr/local/www/system.php:275
+msgid "mycorp.com, home, office, private, etc."
+msgstr "mycorp.com ã€å®¶åº­ã€ã‚ªãƒ•ã‚£ã‚¹ã€ãƒ—ライベートãªã©"
+
+#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647
+#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590
+#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287
+#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452
+#: usr/local/www/services_router_advertisements.php:372
+#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280
+#: usr/local/www/services_dhcpv6.php:598
+#: usr/local/www/services_dhcp_edit.php:402
+#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850
+#: usr/local/www/services_dhcpv6.php:615
+#: usr/local/www/services_router_advertisements.php:367
+#: usr/local/www/services_dhcp.php:870
+#: usr/local/www/services_router_advertisements.php:367
+#: usr/local/www/system.php:280 usr/local/www/services_dhcp_edit.php:402
+#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:870
+#: usr/local/www/services_dhcpv6.php:615
+msgid "DNS servers"
+msgstr "DNSサーãƒ"
+
+#: usr/local/www/system.php:281 usr/local/www/system.php:292
+#: usr/local/www/system.php:285 usr/local/www/system.php:285
+msgid "DNS Server"
+msgstr "DNSサーãƒ"
+
+#: usr/local/www/system.php:283 usr/local/www/system.php:294
+#: usr/local/www/system.php:287 usr/local/www/system.php:287
+msgid "Use gateway"
+msgstr "ゲートウェイを使用"
+
+#: usr/local/www/system.php:331 usr/local/www/system.php:342
+#: usr/local/www/system.php:335 usr/local/www/system.php:334
+#: usr/local/www/system.php:334
+msgid ""
+"Enter IP addresses to by used by the system for DNS resolution.These are "
+"also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+msgstr "「DNS resolution.TheseãŸã‚ã®ã‚·ã‚¹ãƒ†ãƒ ãŒä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€IPアドレスを入力ã—ã¦ã¯ã—ã¦ã„ã‚‹ã€ã¾ãŸã€ DHCPサービス〠DNSフォワーダã®ãŸã‚ã«ã¨PPTPã®VPNクライアントã§ä½¿ç”¨ã™ã‚‹ã€‚"
+
+#: usr/local/www/system.php:336 usr/local/www/system.php:347
+#: usr/local/www/system.php:340 usr/local/www/system.php:339
+#: usr/local/www/system.php:339
+msgid ""
+"In addition, optionally select the gateway for each DNS server. When using "
+"multiple WAN connections there should be at least one unique DNS server per "
+"gateway."
+msgstr "「ã•ã‚‰ã«ã€å¿…è¦ã«å¿œã˜ã¦ã€å„DNSサーãƒã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¾ã™ã€‚使用ã™ã‚‹å ´åˆã¯ã€ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ã”ã¨ã«å°‘ãªãã¨ã‚‚1ã¤ã®å›ºæœ‰ã®DNSサーãƒãŒã‚ã‚‹ã¹ã複数ã®WAN接続を。"
+
+#: usr/local/www/system.php:343 usr/local/www/system.php:354
+#: usr/local/www/system.php:347 usr/local/www/system.php:346
+#: usr/local/www/system.php:346
+msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN"
+msgstr "DNSサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã¯ã€WAN上ã§DHCP / PPPã«ã‚ˆã£ã¦ç„¡åŠ¹ã«ã§ãるよã†ã«ã™ã‚‹"
+
+#: usr/local/www/system.php:346 usr/local/www/system.php:357
+#: usr/local/www/system.php:350 usr/local/www/system.php:349
+#: usr/local/www/system.php:349
+#, php-format
+msgid ""
+"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server "
+"on WAN for its own purposes (including the DNS forwarder). However, they "
+"will not be assigned to DHCP and PPTP VPN clients."
+msgstr "( DNSフォワーダをå«ã‚€ï¼‰ç‹¬è‡ªã®ç›®çš„ã®ãŸã‚ã«ã€WAN上ã®ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ %sã¯ã€DHCP / PPPサーãƒã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸDNSサーãƒãƒ¼ã‚’使用ã—ã¾ã™ã€ 。ã—ã‹ã—ã€å½¼ã‚‰ã¯ "DHCPãŠã‚ˆã³PPTP VPNクライアントã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system.php:355 usr/local/www/system.php:366
+#: usr/local/www/system.php:359 usr/local/www/system.php:358
+#: usr/local/www/system.php:358
+msgid "Do not use the DNS Forwarder as a DNS server for the firewall"
+msgstr "ファイアウォールã®DNSサーãƒãƒ¼ã¨ã—ã¦ã®DNSフォワーダを使用ã—ãªã„ã§ãã ã•ã„"
+
+#: usr/local/www/system.php:358 usr/local/www/system.php:369
+#: usr/local/www/system.php:362 usr/local/www/system.php:361
+#: usr/local/www/system.php:361
+msgid ""
+"By default localhost (127.0.0.1) will be used as the first DNS server where "
+"the DNS forwarder is enabled, so system can use the DNS forwarder to perform "
+"lookups. Checking this box omits localhost from the list of DNS servers."
+msgstr "DNSフォワーダãŒæœ‰åŠ¹ã«ãªã£ã¦ã„る「既定ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã§ã¯ï¼ˆ 127.0.0.1 )最åˆã®DNSサーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹"ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã¯ã€DNSサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‚’çœç•¥ã—ã¦ç¢ºèªã™ã‚‹ã€‚ 「ルックアップを実行ã™ã‚‹ãŸã‚ã«DNSフォワーダを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system.php:365 usr/local/www/system.php:376
+#: usr/local/www/system.php:369 usr/local/www/system.php:367
+#: usr/local/www/system.php:367
+msgid "Time zone"
+msgstr "時間帯"
+
+#: usr/local/www/system.php:377 usr/local/www/system.php:388
+#: usr/local/www/system.php:381 usr/local/www/system.php:379
+#: usr/local/www/system.php:379
+msgid "Select the location closest to you"
+msgstr "ã‚ãªãŸã«æœ€ã‚‚è¿‘ã„場所をé¸æŠžã—ã¾ã™"
+
+#: usr/local/www/system.php:395 usr/local/www/system.php:406
+#: usr/local/www/system.php:399 usr/local/www/system.php:397
+#: usr/local/www/system.php:397
+msgid "NTP time server"
+msgstr "NTPタイムサーãƒ"
+
+#: usr/local/www/system.php:400 usr/local/www/system.php:411
+#: usr/local/www/system.php:404 usr/local/www/system.php:402
+#: usr/local/www/system.php:402
+msgid ""
+"Use a space to separate multiple hosts (only one required). Remember to set "
+"up at least one DNS server if you enter a host name here!"
+msgstr "「複数ã®ãƒ›ã‚¹ãƒˆï¼ˆå¿…é ˆã®ã¿1 )をスペースã§åŒºåˆ‡ã‚Šã¾ã™ã€‚設定ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„"ã‚ãªãŸã¯ã“ã“ã«ãƒ›ã‚¹ãƒˆåを入力ã™ã‚‹ã¨ã€å°‘ãªãã¨ã‚‚1ã¤ã®DNSサーãƒãƒ¼ã‚’ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— ï¼"
+
+#: usr/local/www/system.php:411 usr/local/www/system.php:440
+#: usr/local/www/system.php:433 usr/local/www/system.php:431
+#: usr/local/www/system.php:431
+msgid "Theme"
+msgstr "テーマ"
+
+#: usr/local/www/system.php:435 usr/local/www/system.php:464
+#: usr/local/www/system.php:457 usr/local/www/system.php:455
+#: usr/local/www/system.php:455
+msgid "This will change the look and feel of"
+msgstr "ã“ã‚Œã¯ãƒ‡ã‚¶ã‚¤ãƒ³ã‚’変更ã™ã‚‹ãªã©ã®æ„Ÿã˜ã«ãªã‚Šã¾ã™"
+
+#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69
+#: usr/local/www/interfaces_vlan.php:69
+msgid ""
+"This VLAN cannot be deleted because it is still being used as an interface."
+msgstr "ãã‚Œã§ã‚‚インターフェイスã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚〠「ã“ã®VLANã¯å‰Šé™¤ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_vlan.php:78
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_vlan.php:84
+msgid "VLAN"
+msgstr "VLAN"
+
+#: usr/local/www/interfaces_vlan.php:109
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan.php:110 usr/local/www/interfaces_vlan.php:116
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan.php:116
+msgid "VLAN tag"
+msgstr "VLANã‚¿ã‚°"
+
+#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126
+#: usr/local/www/interfaces_vlan.php:132 usr/local/www/interfaces_vlan.php:132
+msgid "Do you really want to delete this VLAN?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®VLANを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137
+#: usr/local/www/interfaces_vlan.php:143 usr/local/www/interfaces_vlan.php:143
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do "
+"not explicitly support it, VLAN tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr "明示的ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„"ã™ã¹ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒ/ NICãŒ802.1Q VLANãŒãªã„カードã§ã¯ã€‚é©åˆ‡ã«ã‚¿ã‚°ä»˜ã‘をサãƒãƒ¼ãƒˆã—ãªã„〠〠VLANタギングã¯ã¾ã å‹•ä½œã—ã¾ã™ãŒã€ç¸®å°MTUã¯ã€Œå•é¡ŒãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るカードã«ã¤ã„ã¦ã¯ã€ %sãƒãƒ³ãƒ‰ãƒ–ックをå‚ç…§ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_vlan_edit.php:80
+#: usr/local/www/interfaces_vlan_edit.php:80
+msgid "The VLAN tag must be an integer between 1 and 4094."
+msgstr "VLANã‚¿ã‚°ã¯ã€ 1 〜4094ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_vlan_edit.php:88
+#: usr/local/www/interfaces_vlan_edit.php:91
+#: usr/local/www/interfaces_vlan_edit.php:91
+#, php-format
+msgid "A VLAN with the tag %s is already defined on this interface."
+msgstr "ã‚¿ã‚°%sã§VLANãŒã™ã§ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_vlan_edit.php:95
+#: usr/local/www/interfaces_vlan_edit.php:98
+#: usr/local/www/interfaces_vlan_edit.php:98
+msgid "A QinQ VLAN exists with this tag please remove it to use this tag with."
+msgstr "QinQã®VLANã¯ã€ã“ã®ã‚¿ã‚°ã«å­˜åœ¨ã—ã€ãã‚ŒãŒã“ã®ã‚¿ã‚°ã‚’使用ã™ã‚‹ã“ã¨ã‚’削除ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_vlan_edit.php:150
+#: usr/local/www/interfaces_vlan_edit.php:151
+#: usr/local/www/interfaces_vlan_edit.php:154
+#: usr/local/www/interfaces_vlan_edit.php:154
+msgid "VLAN configuration"
+msgstr "VLANã®è¨­å®š"
+
+#: usr/local/www/interfaces_vlan_edit.php:169
+#: usr/local/www/interfaces_vlan_edit.php:170
+#: usr/local/www/interfaces_vlan_edit.php:173
+#: usr/local/www/interfaces_vlan_edit.php:173
+msgid "Only VLAN capable interfaces will be shown."
+msgstr "VLANã®ã¿ãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_vlan_edit.php:172
+#: usr/local/www/interfaces_vlan_edit.php:173
+#: usr/local/www/interfaces_vlan_edit.php:176
+#: usr/local/www/interfaces_vlan_edit.php:176
+msgid "VLAN tag "
+msgstr "VLANã‚¿ã‚°"
+
+#: usr/local/www/interfaces_vlan_edit.php:176
+#: usr/local/www/interfaces_vlan_edit.php:177
+#: usr/local/www/interfaces_vlan_edit.php:180
+#: usr/local/www/interfaces_vlan_edit.php:180
+msgid "802.1Q VLAN tag (between 1 and 4094) "
+msgstr "( 1ã¨4094ã®é–“) 802.1Q VLANã‚¿ã‚°"
+
+#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89
+#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:88
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€php.iniã®upload_max_filesizeディレクティブã®å€¤ã‚’超ãˆã¦"
+
+#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91
+#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:90
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr "HTMLフォーム"アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã§æŒ‡å®šã•ã‚ŒãŸMAX_FILE_SIZEディレクティブã®å€¤ã‚’超ãˆã¦ã€"
+
+#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93
+#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:92
+msgid "The uploaded file was only partially uploaded"
+msgstr "アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€éƒ¨åˆ†çš„ã«ã—ã‹ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95
+#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:94
+msgid "No file was uploaded"
+msgstr "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97
+#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:96
+msgid "Missing a temporary folder"
+msgstr "一時フォルダãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99
+#: usr/local/www/system_firmware.php:98 usr/local/www/system_firmware.php:98
+msgid "Failed to write file to disk"
+msgstr "ディスクã¸ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101
+#: usr/local/www/system_firmware.php:100 usr/local/www/system_firmware.php:100
+msgid "File upload stopped by extension"
+msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロードã¯ã€æ‹¡å¼µå­ã«ã‚ˆã£ã¦åœæ­¢"
+
+#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103
+#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:102
+msgid "Unknown upload error"
+msgstr "ä¸æ˜Žã®ã‚¢ãƒƒãƒ—ロードエラー"
+
+#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84
+#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/system_firmware.php:108 usr/local/www/fbegin.inc:101
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:210
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/system_firmware_auto.php:61 usr/local/www/fbegin.inc:101
+msgid "Firmware"
+msgstr "ファームウェア"
+
+#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238
+#: usr/local/www/system_firmware_auto.php:79
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_settings.php:110
+#: usr/local/www/system_firmware_restorefullbackup.php:125
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245
+#: usr/local/www/system_firmware_settings.php:115
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248
+#: usr/local/www/system_firmware_check.php:64
+#: usr/local/www/system_firmware_settings.php:117
+#: usr/local/www/system_firmware_auto.php:80
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248
+#: usr/local/www/system_firmware_check.php:64
+#: usr/local/www/system_firmware_settings.php:117
+#: usr/local/www/system_firmware_auto.php:80
+#: usr/local/www/system_firmware_restorefullbackup.php:125
+msgid "Manual Update"
+msgstr "手動更新"
+
+#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114
+#: usr/local/www/system_firmware.php:113 usr/local/www/system_firmware.php:113
+msgid ""
+"An upgrade is currently in progress.<p>The firewall will reboot when the "
+"operation is complete."
+msgstr "「アップグレードã¯ç¾åœ¨é€²è¡Œä¸­ã§ã‚る。ã¨ãu003cPu003eファイアウォールãŒå†èµ·å‹•ã—ã¾ã™ã€æ“作ãŒå®Œäº†ã—ãŸã€‚"
+
+#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142
+#: usr/local/www/system_firmware.php:137 usr/local/www/system_firmware.php:137
+msgid "Upgrade"
+msgstr "アップグレード"
+
+#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161
+#: usr/local/www/system_firmware.php:156 usr/local/www/system_firmware.php:156
+msgid "The uploaded image file is not for this platform."
+msgstr "アップロードã•ã‚ŒãŸç”»åƒãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ã“ã®ãƒ—ラットフォーム用ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164
+#: usr/local/www/system_firmware.php:159 usr/local/www/system_firmware.php:159
+msgid "Image upload failed (out of memory?)"
+msgstr "ç”»åƒã®ã‚¢ãƒƒãƒ—ロードã¯ã€ (メモリãŒä¸è¶³ï¼Ÿ )ãŒå¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/system_firmware.php:168
+#: usr/local/www/system_firmware_auto.php:201
+#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170
+#: usr/local/www/system_firmware_auto.php:203
+#: usr/local/www/system_firmware_auto.php:199
+#: usr/local/www/system_firmware.php:170
+#: usr/local/www/system_firmware_auto.php:199
+msgid "The digital signature on this image is invalid."
+msgstr "ã“ã®ç”»åƒã®ãƒ‡ã‚¸ã‚¿ãƒ«ç½²åãŒç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/system_firmware.php:170
+#: usr/local/www/system_firmware_auto.php:204
+#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172
+#: usr/local/www/system_firmware_auto.php:206
+#: usr/local/www/system_firmware_auto.php:202
+#: usr/local/www/system_firmware.php:172
+#: usr/local/www/system_firmware_auto.php:202
+msgid "This image is not digitally signed."
+msgstr "ã“ã®ç”»åƒã¯ã€ãƒ‡ã‚¸ã‚¿ãƒ«ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware.php:172
+#: usr/local/www/system_firmware_auto.php:208
+#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174
+#: usr/local/www/system_firmware_auto.php:210
+#: usr/local/www/system_firmware_auto.php:206
+#: usr/local/www/system_firmware.php:174
+#: usr/local/www/system_firmware_auto.php:206
+msgid "There has been an error verifying the signature on this image."
+msgstr "ã“ã®ç”»åƒã«ç½²åを検証エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/system_firmware.php:175
+#: usr/local/www/system_firmware_auto.php:223
+#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177
+#: usr/local/www/system_firmware_auto.php:225
+#: usr/local/www/system_firmware_auto.php:221
+#: usr/local/www/system_firmware.php:177
+#: usr/local/www/system_firmware_auto.php:221
+msgid "The image file is corrupt."
+msgstr "ç”»åƒãƒ•ã‚¡ã‚¤ãƒ«ãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195
+#: usr/local/www/system_firmware.php:190 usr/local/www/system_firmware.php:190
+msgid ""
+"The firmware is now being updated. The firewall will reboot automatically."
+msgstr "「ファームウェアã¯ç¾åœ¨æ›´æ–°ä¸­ã§ã™ã€‚ファイアウォールã¯è‡ªå‹•çš„ã«å†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware.php:204 usr/local/www/system_firmware.php:204
+#, php-format
+msgid "Firmware image missing or other error, please try again %s."
+msgstr "ファームウェアイメージ欠è½ã¾ãŸã¯ãã®ä»–ã®ã‚¨ãƒ©ãƒ¼ã€ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„%s."
+
+#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227
+#: usr/local/www/system_firmware.php:230 usr/local/www/system_firmware.php:230
+msgid ""
+"This means that the image you uploaded is not an official/supported image "
+"and may lead to unexpected behavior or security compromises. Only install "
+"images that come from sources that you trust, and make sure that the image "
+"has not been tampered with."
+msgstr "予期ã—ãªã„動作やセキュリティ侵害ã«ã¤ãªãŒã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã€ã€Œã“ã‚Œã¯ã€ã‚¢ãƒƒãƒ—ロードã•ã‚ŒãŸç”»åƒã¯ã€å…¬å¼/サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ç”»åƒã§ã¯ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€ 。唯一㮠"ã‚ãªãŸãŒä¿¡é ¼ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®ç”»åƒã‚’ã€ç”»åƒãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ”¹ã–ã‚“ã•ã‚Œã¦ã„ãªã„。"
+
+#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231
+#: usr/local/www/system_firmware.php:234 usr/local/www/system_firmware.php:234
+msgid "Do you want to install this image anyway (on your own risk)?"
+msgstr "ã‚ãªãŸãŒï¼ˆã”自身ã®è²¬ä»»ã§ï¼‰ã¨ã«ã‹ãã“ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’インストールã—ã¾ã™ã‹ï¼Ÿã‚’"
+
+#: usr/local/www/system_firmware.php:239
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/system_firmware_auto.php:80
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_check.php:67
+#: usr/local/www/system_firmware_settings.php:111
+#: usr/local/www/system_firmware_restorefullbackup.php:126
+#: usr/local/www/system_firmware.php:246
+#: usr/local/www/system_firmware_settings.php:116
+#: usr/local/www/system_firmware.php:249
+#: usr/local/www/system_firmware_check.php:65
+#: usr/local/www/system_firmware_settings.php:118
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware.php:249
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_check.php:65
+#: usr/local/www/system_firmware_settings.php:118
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware_restorefullbackup.php:126
+msgid "Auto Update"
+msgstr "自動更新"
+
+#: usr/local/www/system_firmware.php:240
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware_check.php:68
+#: usr/local/www/system_firmware_settings.php:112
+#: usr/local/www/system_firmware_restorefullbackup.php:127
+#: usr/local/www/system_firmware.php:247
+#: usr/local/www/system_firmware_settings.php:117
+#: usr/local/www/system_firmware.php:250
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_settings.php:119
+#: usr/local/www/system_firmware_auto.php:82
+#: usr/local/www/system_firmware.php:250
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_settings.php:119
+#: usr/local/www/system_firmware_auto.php:82
+#: usr/local/www/system_firmware_restorefullbackup.php:127
+msgid "Updater Settings"
+msgstr "アップデータã®è¨­å®š"
+
+#: usr/local/www/system_firmware.php:242
+#: usr/local/www/system_firmware_auto.php:83
+#: usr/local/www/system_firmware_check.php:70
+#: usr/local/www/system_firmware_settings.php:114
+#: usr/local/www/system_firmware_restorefullbackup.php:129
+#: usr/local/www/system_firmware.php:249
+#: usr/local/www/system_firmware_settings.php:119
+#: usr/local/www/system_firmware.php:252
+#: usr/local/www/system_firmware_check.php:68
+#: usr/local/www/system_firmware_settings.php:121
+#: usr/local/www/system_firmware_auto.php:84
+#: usr/local/www/system_firmware.php:252
+#: usr/local/www/system_firmware_check.php:68
+#: usr/local/www/system_firmware_settings.php:121
+#: usr/local/www/system_firmware_auto.php:84
+#: usr/local/www/system_firmware_restorefullbackup.php:129
+msgid "Restore Full Backup"
+msgstr "フルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元"
+
+#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259
+#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262
+msgid "Invoke"
+msgstr "呼ã³å‡ºã™"
+
+#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259
+#: usr/local/www/system_firmware.php:262 usr/local/www/system_firmware.php:262
+msgid "Manual Upgrade"
+msgstr "手動アップグレード"
+
+#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266
+#: usr/local/www/system_firmware.php:269 usr/local/www/system_firmware.php:269
+msgid "Enable firmware upload"
+msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—ロードを有効ã«ã™ã‚‹"
+
+#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268
+#: usr/local/www/system_firmware.php:271 usr/local/www/system_firmware.php:271
+#, php-format
+msgid "Click "Enable firmware upload" to begin."
+msgstr "開始ã™ã‚‹ã€Œãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—ロードを有効ã«ã™ã‚‹ã€ã‚’クリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271
+#: usr/local/www/system_firmware.php:274 usr/local/www/system_firmware.php:274
+msgid "Disable firmware upload"
+msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—ロードを無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289
+#: usr/local/www/system_firmware.php:292 usr/local/www/system_firmware.php:292
+msgid "Please select kernel type"
+msgstr "カーãƒãƒ«ã®ç¨®é¡žã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55
+msgid "Multiprocessor kernel"
+msgstr "マルãƒãƒ—ロセッサカーãƒãƒ«"
+
+#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56
+msgid "Uniprocessor kernel"
+msgstr "ユニプロセッサカーãƒãƒ«"
+
+#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57
+msgid "Embedded kernel"
+msgstr "埋ã‚è¾¼ã¾ã‚ŒãŸã‚«ãƒ¼ãƒãƒ«"
+
+#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58
+msgid "Developers kernel"
+msgstr "開発者ã¯ã‚«ãƒ¼ãƒãƒ«"
+
+#: usr/local/www/system_firmware.php:298
+#: usr/local/www/system_firmware_check.php:103
+#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303
+#: usr/local/www/system_firmware_check.php:104
+#: usr/local/www/system_firmware_check.php:98
+#: usr/local/www/system_firmware.php:303
+#: usr/local/www/system_firmware_check.php:98
+msgid "Perform full backup prior to upgrade"
+msgstr "å‰ã®ã‚¢ãƒƒãƒ—グレードã«ãƒ•ãƒ«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を実行"
+
+#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306
+#: usr/local/www/system_firmware.php:306
+msgid "Upgrade firmware"
+msgstr "ファームウェアをアップグレード"
+
+#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307
+#: usr/local/www/system_firmware.php:307
+msgid "Click "Upgrade firmware" to start the upgrade process."
+msgstr "アップグレードプロセスを開始ã™ã‚‹ãŸã‚ã«ã€Œãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—グレードã€ã‚’クリックã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309
+#: usr/local/www/system_firmware.php:309
+msgid "You must reboot the system before you can upgrade the firmware."
+msgstr "ファームウェアをアップグレードã™ã‚‹å‰ã«ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322
+#: usr/local/www/system_firmware.php:320 usr/local/www/system_firmware.php:320
+msgid "Warning:"
+msgstr "警告:"
+
+#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325
+#: usr/local/www/system_firmware.php:323 usr/local/www/system_firmware.php:323
+msgid ""
+"DO NOT abort the firmware upgrade once it has started. The firewall will "
+"reboot automatically after storing the new firmware. The configuration will "
+"be maintained."
+msgstr "「ãã‚ŒãŒèµ·å‹•ã—ãŸå¾Œã¯ã€ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—グレードを中断ã—ãªã„ã§ãã ã•ã„。ファイアウォールãŒã—ã¾ã™"æ–°ã—ã„ファームウェアをä¿å­˜ã—ãŸå¾Œã€è‡ªå‹•çš„ã«å†èµ·å‹•ã—ã¾ã™ã€‚構æˆã¯ã€ 「維æŒã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/system_firmware_auto.php:115
+#: usr/local/www/system_firmware_auto.php:113
+#: usr/local/www/system_firmware_auto.php:113
+msgid "Beginning firmware upgrade"
+msgstr "ファームウェアã®ã‚¢ãƒƒãƒ—グレードを開始"
+
+#: usr/local/www/system_firmware_auto.php:133
+#: usr/local/www/system_firmware_auto.php:135
+#: usr/local/www/system_firmware_auto.php:131
+#: usr/local/www/system_firmware_auto.php:131
+msgid "Downloading current version information"
+msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をダウンロードã™ã‚‹"
+
+#: usr/local/www/system_firmware_auto.php:148
+#: usr/local/www/system_firmware_auto.php:157
+#: usr/local/www/system_firmware_check.php:141
+#: usr/local/www/system_firmware_check.php:143
+#: usr/local/www/system_firmware_auto.php:150
+#: usr/local/www/system_firmware_auto.php:159
+#: usr/local/www/system_firmware_check.php:135
+#: usr/local/www/system_firmware_auto.php:146
+#: usr/local/www/system_firmware_auto.php:155
+#: usr/local/www/system_firmware_check.php:135
+#: usr/local/www/system_firmware_auto.php:146
+#: usr/local/www/system_firmware_auto.php:155
+msgid "Unable to check for updates."
+msgstr "更新を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware_auto.php:162
+#: usr/local/www/system_firmware_auto.php:164
+#: usr/local/www/system_firmware_auto.php:160
+#: usr/local/www/system_firmware_auto.php:160
+msgid "Downloading updates"
+msgstr "更新をダウンロードã™ã‚‹"
+
+#: usr/local/www/system_firmware_auto.php:172
+#: usr/local/www/system_firmware_auto.php:174
+#: usr/local/www/system_firmware_auto.php:170
+#: usr/local/www/system_firmware_auto.php:170
+msgid "download complete."
+msgstr "完全ãªãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware_auto.php:174
+#: usr/local/www/system_firmware_check.php:159
+#: usr/local/www/system_firmware_check.php:161
+#: usr/local/www/system_firmware_auto.php:176
+#: usr/local/www/system_firmware_check.php:153
+#: usr/local/www/system_firmware_auto.php:172
+#: usr/local/www/system_firmware_check.php:153
+#: usr/local/www/system_firmware_auto.php:172
+msgid "You are on the latest version."
+msgstr "最新ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware_auto.php:214
+#: usr/local/www/system_firmware_auto.php:216
+#: usr/local/www/system_firmware_auto.php:212
+#: usr/local/www/system_firmware_auto.php:212
+msgid ""
+"Update cannot continue. You can disable this check on the Updater Settings "
+"tab."
+msgstr "「アップデートを続行ã§ãã¾ã›ã‚“。ã‚ãªãŸã¯ã‚¢ãƒƒãƒ—データ設定ã§ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ã‚¿ãƒ–をクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware_auto.php:219
+#: usr/local/www/system_firmware_auto.php:221
+#: usr/local/www/system_firmware_auto.php:217
+#: usr/local/www/system_firmware_auto.php:217
+msgid ""
+"Upgrade Image does not contain a signature but the system has been "
+"configured to allow unsigned images. One moment please..."
+msgstr "「アップグレードイメージã®ç½²åãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ ãŒã•ã‚Œã¦ã„る「未署åã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«è¨­å®šã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/system_firmware_auto.php:224
+#: usr/local/www/system_firmware_auto.php:226
+#: usr/local/www/system_firmware_auto.php:222
+#: usr/local/www/system_firmware_auto.php:222
+msgid "Update cannot continue"
+msgstr "アップデートを続行ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/system_firmware_auto.php:235
+#: usr/local/www/system_firmware_auto.php:237
+#: usr/local/www/system_firmware_auto.php:233
+#: usr/local/www/system_firmware_auto.php:233
+msgid "Downloading complete but sha256 does not match."
+msgstr "完全ãªãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¯ãªã〠SHA256一致ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Auto upgrade aborted."
+msgstr "自動アップグレードã¯ä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Downloaded SHA256"
+msgstr "ダウンロードã•ã‚ŒãŸSHA256"
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Needed SHA256"
+msgstr "å¿…è¦ã«SHA256"
+
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:240
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:236
+msgid "is now upgrading."
+msgstr "今アップグレードã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:240
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:236
+msgid "The firewall will reboot once the operation is completed."
+msgstr "æ“作ãŒå®Œäº†ã—ãŸã‚‰ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãŒå†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware_auto.php:256
+#: usr/local/www/system_firmware_auto.php:258
+#: usr/local/www/system_firmware_auto.php:258
+msgid "Auto Update Download Status"
+msgstr "自動更新ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰çŠ¶æ³"
+
+#: usr/local/www/system_firmware_auto.php:258
+#: usr/local/www/system_firmware_auto.php:260
+#: usr/local/www/system_firmware_auto.php:260
+msgid "Current Version"
+msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/system_firmware_auto.php:259
+#: usr/local/www/system_firmware_auto.php:261
+#: usr/local/www/system_firmware_auto.php:261
+msgid "Latest Version"
+msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/system_firmware_auto.php:260
+#: usr/local/www/system_firmware_auto.php:262
+#: usr/local/www/system_firmware_auto.php:262
+msgid "File size"
+msgstr "ファイルサイズ"
+
+#: usr/local/www/system_firmware_auto.php:261
+#: usr/local/www/system_firmware_auto.php:263
+#: usr/local/www/system_firmware_auto.php:263
+msgid "Downloaded"
+msgstr "ダウンロードã—ãŸ"
+
+#: usr/local/www/system_firmware_auto.php:262
+#: usr/local/www/system_firmware_auto.php:264
+#: usr/local/www/system_firmware_auto.php:264
+msgid "Percent"
+msgstr "パーセント"
+
+#: usr/local/www/system_firmware_check.php:107
+#: usr/local/www/system_firmware_check.php:109
+#: usr/local/www/system_firmware_check.php:101
+#: usr/local/www/system_firmware_check.php:101
+msgid "Invoke Auto Upgrade"
+msgstr "自動アップグレードを起動ã™ã‚‹"
+
+#: usr/local/www/system_firmware_check.php:125
+#: usr/local/www/system_firmware_check.php:127
+#: usr/local/www/system_firmware_check.php:119
+#: usr/local/www/system_firmware_check.php:119
+msgid "Downloading new version information..."
+msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をダウンロード..."
+
+#: usr/local/www/system_firmware_check.php:143
+#: usr/local/www/system_firmware_check.php:145
+#: usr/local/www/system_firmware_check.php:137
+#: usr/local/www/system_firmware_check.php:137
+msgid "Could not contact custom update server."
+msgstr "カスタムアップデートサーãƒã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/system_firmware_check.php:145
+#: usr/local/www/system_firmware_check.php:147
+#: usr/local/www/system_firmware_check.php:139
+#: usr/local/www/system_firmware_check.php:139
+#, php-format
+msgid "Could not contact %1$s update server %2$s%3$s"
+msgstr "ã¯%1$sアップデートサーãƒã®%2$s%3$sã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/system_firmware_check.php:147
+#: usr/local/www/system_firmware_check.php:149
+#: usr/local/www/system_firmware_check.php:141
+#: usr/local/www/system_firmware_check.php:141
+msgid "Obtaining current version information..."
+msgstr "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報をå–å¾—..."
+
+#: usr/local/www/system_firmware_check.php:172
+#: usr/local/www/system_firmware_check.php:174
+#: usr/local/www/system_firmware_check.php:178
+#: usr/local/www/system_firmware_check.php:178
+msgid "A new version is now available"
+msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã—ãŸ"
+
+#: usr/local/www/system_firmware_check.php:173
+#: usr/local/www/system_firmware_check.php:175
+#: usr/local/www/system_firmware_check.php:179
+#: usr/local/www/system_firmware_check.php:179
+msgid "Current version"
+msgstr "ç¾ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/system_firmware_check.php:175
+#: usr/local/www/system_firmware_check.php:177
+#: usr/local/www/system_firmware_check.php:181
+#: usr/local/www/system_firmware_check.php:181
+msgid "NanoBSD Size"
+msgstr "NanoBSDã®ã‚µã‚¤ã‚º"
+
+#: usr/local/www/system_firmware_check.php:177
+#: usr/local/www/system_firmware_check.php:179
+#: usr/local/www/system_firmware_check.php:183
+#: usr/local/www/system_firmware_check.php:183
+msgid "Built On"
+msgstr "上ã«æ§‹ç¯‰ã•ã‚ŒãŸ"
+
+#: usr/local/www/system_firmware_check.php:178
+#: usr/local/www/system_firmware_check.php:180
+#: usr/local/www/system_firmware_check.php:184
+#: usr/local/www/system_firmware_check.php:184
+msgid "New version"
+msgstr "æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/system_firmware_check.php:179
+#: usr/local/www/system_firmware_check.php:181
+#: usr/local/www/system_firmware_check.php:185
+#: usr/local/www/system_firmware_check.php:185
+msgid "Update source"
+msgstr "アップデート元"
+
+#: usr/local/www/system_firmware_settings.php:122
+#: usr/local/www/system_firmware_settings.php:127
+#: usr/local/www/system_firmware_settings.php:129
+#: usr/local/www/system_firmware_settings.php:129
+msgid "Firmware Branch"
+msgstr "ファームウェア支店"
+
+#: usr/local/www/system_firmware_settings.php:126
+#: usr/local/www/system_firmware_settings.php:131
+#: usr/local/www/system_firmware_settings.php:133
+#: usr/local/www/system_firmware_settings.php:133
+msgid "Default Auto Update URLs"
+msgstr "自動更新ã®URLをデフォルト"
+
+#: usr/local/www/system_firmware_settings.php:142
+#: usr/local/www/system_firmware_settings.php:147
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/system_firmware_settings.php:158
+#: usr/local/www/system_firmware_settings.php:158
+msgid "Firmware Auto Update URL"
+msgstr "ファームウェアã®è‡ªå‹•ã‚¢ãƒƒãƒ—デートã®URL"
+
+#: usr/local/www/system_firmware_settings.php:144
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:158
+#: usr/local/www/system_firmware_settings.php:160
+#: usr/local/www/system_firmware_settings.php:160
+msgid "Use a URL server for firmware upgrades other than"
+msgstr "以外ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ã‚¢ãƒƒãƒ—グレードã®URLサーãƒã‚’使用ã™ã‚‹"
+
+#: usr/local/www/system_firmware_settings.php:146
+#: usr/local/www/pkg_mgr_settings.php:109
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:160
+#: usr/local/www/system_firmware_settings.php:162
+#: usr/local/www/pkg_mgr_settings.php:108
+#: usr/local/www/system_firmware_settings.php:162
+#: usr/local/www/pkg_mgr_settings.php:108
+msgid "Base URL:"
+msgstr "ベースURL :"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_firmware_settings.php:165
+msgid "This is where"
+msgstr "ã“ã‚Œã¯ã“ã“ã§"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_firmware_settings.php:165
+msgid "will check for newer firmware versions when the"
+msgstr "æ–°ã—ã„ファームウェアã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã¨ã"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_firmware_settings.php:165
+msgid "System: Firmware: Auto Update"
+msgstr "システム:ファームウェア:自動更新"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/pkg_mgr_settings.php:111
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/pkg_mgr_settings.php:111
+msgid "page is viewed."
+msgstr "ページãŒè¦‹ã‚‰ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_firmware_settings.php:167
+#, php-format
+msgid ""
+"When a custom URL is enabled, the system will not verify the digital "
+"signature from %s."
+msgstr "%s.ã‹ã‚‰ç½²å「カスタムURLを有効ã«ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ãƒ‡ã‚¸ã‚¿ãƒ«ã‚’検証ã—ã¾ã›ã‚“ã€"
+
+#: usr/local/www/system_firmware_settings.php:159
+#: usr/local/www/system_firmware_settings.php:164
+#: usr/local/www/system_firmware_settings.php:173
+#: usr/local/www/system_firmware_settings.php:175
+#: usr/local/www/system_firmware_settings.php:175
+msgid "Updates"
+msgstr "アップデート"
+
+#: usr/local/www/system_firmware_settings.php:162
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_firmware_settings.php:176
+#: usr/local/www/system_firmware_settings.php:178
+#: usr/local/www/system_firmware_settings.php:178
+msgid "Unsigned images"
+msgstr "符å·ãªã—ã®ç”»åƒ"
+
+#: usr/local/www/system_firmware_settings.php:166
+#: usr/local/www/system_firmware_settings.php:171
+#: usr/local/www/system_firmware_settings.php:180
+#: usr/local/www/system_firmware_settings.php:182
+#: usr/local/www/system_firmware_settings.php:182
+msgid ""
+"Allow auto-update firmware images with a missing or invalid digital "
+"signature to be used."
+msgstr "ç½²åã«ä½¿ç”¨ã™ã‚‹ã€ãŒãªã„ã‹ã€ã¾ãŸã¯ç„¡åŠ¹ã§ã™ãƒ‡ã‚¸ã‚¿ãƒ«ã§è‡ªå‹•æ›´æ–°ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’許å¯ã™ã‚‹ "。"
+
+#: usr/local/www/system_firmware_settings.php:174
+#: usr/local/www/system_firmware_settings.php:187
+#: usr/local/www/system_firmware_settings.php:196
+#: usr/local/www/system_firmware_settings.php:198
+#: usr/local/www/system_firmware_settings.php:198
+msgid "Gitsync"
+msgstr "Gitsync"
+
+#: usr/local/www/system_firmware_settings.php:177
+#: usr/local/www/system_firmware_settings.php:190
+#: usr/local/www/system_firmware_settings.php:199
+#: usr/local/www/system_firmware_settings.php:201
+#: usr/local/www/system_firmware_settings.php:201
+msgid "Auto sync on update"
+msgstr "更新時ã«è‡ªå‹•åŒæœŸ"
+
+#: usr/local/www/system_firmware_settings.php:181
+#: usr/local/www/system_firmware_settings.php:194
+#: usr/local/www/system_firmware_settings.php:203
+#: usr/local/www/system_firmware_settings.php:205
+#: usr/local/www/system_firmware_settings.php:205
+msgid ""
+"After updating, sync with the following repository/branch before reboot."
+msgstr "「更新後ã€å†èµ·å‹•ã™ã‚‹å‰ã«ã€æ¬¡ã®ãƒªãƒã‚¸ãƒˆãƒª/ブランãƒã¨åŒæœŸã€‚"
+
+#: usr/local/www/system_firmware_settings.php:193
+#: usr/local/www/system_firmware_settings.php:206
+#: usr/local/www/system_firmware_settings.php:215
+#: usr/local/www/system_firmware_settings.php:217
+#: usr/local/www/system_firmware_settings.php:217
+msgid "Repository URL"
+msgstr "リãƒã‚¸ãƒˆãƒªURL"
+
+#: usr/local/www/system_firmware_settings.php:198
+#: usr/local/www/system_firmware_settings.php:211
+#: usr/local/www/system_firmware_settings.php:220
+#: usr/local/www/system_firmware_settings.php:222
+#: usr/local/www/system_firmware_settings.php:222
+#, php-format
+msgid "The most recently used repository was %s"
+msgstr "最近使用ã—ãŸãƒªãƒã‚¸ãƒˆãƒªãŒ%sãŸ"
+
+#: usr/local/www/system_firmware_settings.php:200
+#: usr/local/www/system_firmware_settings.php:213
+#: usr/local/www/system_firmware_settings.php:222
+#: usr/local/www/system_firmware_settings.php:224
+#: usr/local/www/system_firmware_settings.php:224
+msgid "This will be used if the field is left blank."
+msgstr "フィールドを空白ã®ã¾ã¾ã«ã™ã‚‹å ´åˆã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_firmware_settings.php:219
+#: usr/local/www/system_firmware_settings.php:232
+#: usr/local/www/system_firmware_settings.php:241
+#: usr/local/www/system_firmware_settings.php:243
+#: usr/local/www/system_firmware_settings.php:243
+msgid "Branch name"
+msgstr "支店å"
+
+#: usr/local/www/system_firmware_settings.php:224
+#: usr/local/www/system_firmware_settings.php:237
+#: usr/local/www/system_firmware_settings.php:246
+#: usr/local/www/system_firmware_settings.php:248
+#: usr/local/www/system_firmware_settings.php:248
+#, php-format
+msgid "The most recently used branch was %s"
+msgstr "最近使用ã—ãŸãƒ–ランãƒãŒ%sãŸ"
+
+#: usr/local/www/system_firmware_settings.php:227
+#: usr/local/www/system_firmware_settings.php:240
+#: usr/local/www/system_firmware_settings.php:249
+#: usr/local/www/system_firmware_settings.php:251
+#: usr/local/www/system_firmware_settings.php:251
+msgid "Usually the branch name is master"
+msgstr "通常ã€ãƒ–ランãƒåã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ã§ã‚ã‚‹"
+
+#: usr/local/www/system_firmware_settings.php:230
+#: usr/local/www/system_firmware_settings.php:243
+#: usr/local/www/system_firmware_settings.php:252
+#: usr/local/www/system_firmware_settings.php:254
+#: usr/local/www/system_firmware_settings.php:254
+msgid "Note: Sync will not be performed if a branch is not specified."
+msgstr "注:ブランãƒãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€åŒæœŸã¯å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:98
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_routes.php:113
+#: usr/local/www/system_routes_edit.php:229 usr/local/www/system_routes.php:52
+#: usr/local/www/system_routes.php:113
+#: usr/local/www/system_routes_edit.php:223
+msgid "Static Routes"
+msgstr "スタティックルートã®"
+
+#: usr/local/www/system_routes.php:83 usr/local/www/system_routes.php:83
+msgid "removed route to"
+msgstr "ã«å–り除ã‹ãƒ«ãƒ¼ãƒˆ"
+
+#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111
+#: usr/local/www/system_routes.php:126 usr/local/www/system_routes.php:126
+#, php-format
+msgid ""
+"The static route configuration has been changed.%sYou must apply the changes "
+"in order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã«ã€ã€Œã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã®è¨­å®šã¯changed.%sYouãŒå¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã—ãŸã€ 。"
+
+#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159
+#: usr/local/www/status_gateway_groups.php:64
+#: usr/local/www/status_gateway_groups.php:75
+#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62
+#: usr/local/www/system_gateway_groups.php:108
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/diag_logs_routing.php:83
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97
+#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/diag_logs_wireless.php:85
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_gateways.php:97
+#: usr/local/www/diag_logs_routing.php:84
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98
+#: usr/local/www/system_gateway_groups.php:109
+#: usr/local/www/system_gateway_groups.php:122
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/status_gateways.php:63
+#: usr/local/www/diag_logs_wireless.php:86
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/system_routes.php:119 usr/local/www/fbegin.inc:175
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_gateway_groups.php:118
+#: usr/local/www/system_gateway_groups.php:131
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_routes.php:134
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/diag_logs_routing.php:84 usr/local/www/diag_logs.php:96
+#: usr/local/www/system_routes.php:134 usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/status_gateway_groups.php:76 usr/local/www/fbegin.inc:175
+#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141
+#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:63
+#: usr/local/www/diag_logs_wireless.php:86
+#: usr/local/www/system_gateway_groups.php:118
+#: usr/local/www/system_gateway_groups.php:131
+#: usr/local/www/diag_logs_resolver.php:98
+msgid "Gateways"
+msgstr "ゲートウェイ"
+
+#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204
+#: usr/local/www/system_gateway_groups.php:109
+#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222
+#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110
+#: usr/local/www/system_routes.php:120
+#: usr/local/www/system_gateway_groups.php:119
+#: usr/local/www/system_routes.php:135 usr/local/www/system_routes.php:135
+#: usr/local/www/fbegin.inc:222 usr/local/www/system_gateways.php:142
+#: usr/local/www/system_gateway_groups.php:119
+msgid "Routes"
+msgstr "ルート"
+
+#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172
+#: usr/local/www/system_routes.php:176 usr/local/www/system_routes.php:192
+#: usr/local/www/system_routes.php:192
+msgid "Do you really want to delete this route?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ«ãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes.php:203 usr/local/www/system_routes.php:219
+#: usr/local/www/system_routes.php:219
+msgid ""
+"Do not enter static routes for networks assigned on any interface of this "
+"firewall. Static routes are only used for networks reachable via a "
+"different router, and not reachable via your default gateway."
+msgstr "ファイアウォール"ã“ã®ã„ãšã‚Œã‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’入力ã—ãªã„ã§ãã ã•ã„〠。スタティックルートã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’経由ã—ã¦ã€Œåˆ¥ã®ãƒ«ãƒ¼ã‚¿ã€ãŠã‚ˆã³åˆ°é”ã§ããªã„経由ã§åˆ°é”å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã«ã®ã¿ä½¿ç”¨ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/system_routes_edit.php:89
+#: usr/local/www/system_routes_edit.php:179
+#: usr/local/www/system_routes_edit.php:90
+#: usr/local/www/system_routes_edit.php:216
+#: usr/local/www/system_routes_edit.php:217
+#: usr/local/www/system_routes_edit.php:93
+#: usr/local/www/system_routes_edit.php:244
+#: usr/local/www/system_routes_edit.php:246
+#: usr/local/www/system_routes_edit.php:95
+#: usr/local/www/system_routes_edit.php:240
+msgid "Destination network"
+msgstr "é€ä¿¡å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/system_routes_edit.php:90
+#: usr/local/www/system_routes_edit.php:91
+#: usr/local/www/system_routes_edit.php:94
+#: usr/local/www/system_routes_edit.php:96
+msgid "Destination network bit count"
+msgstr "宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数"
+
+#: usr/local/www/system_routes_edit.php:96
+#: usr/local/www/system_routes_edit.php:97
+#: usr/local/www/system_routes_edit.php:100
+#: usr/local/www/system_routes_edit.php:102
+msgid "A valid IPv4 or IPv6 destination network must be specified."
+msgstr "有効ãªIPv4ã¾ãŸã¯IPv6宛先ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_routes_edit.php:99
+#: usr/local/www/system_routes_edit.php:100
+#: usr/local/www/system_routes_edit.php:103
+#: usr/local/www/system_routes_edit.php:105
+msgid "A valid destination network bit count must be specified."
+msgstr "有効ãªå®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_routes_edit.php:114
+#: usr/local/www/system_routes_edit.php:118
+#: usr/local/www/system_routes_edit.php:121
+#: usr/local/www/system_routes_edit.php:123
+msgid "A IPv4 subnet can not be over 32 bits."
+msgstr "IPv4サブãƒãƒƒãƒˆã¯32ビットを超ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_routes_edit.php:123
+msgid "A route to this destination network already exists."
+msgstr "ã“ã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:198
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:223
+msgid "Edit route"
+msgstr "編集ルート"
+
+#: usr/local/www/system_routes_edit.php:176
+#: usr/local/www/system_routes_edit.php:213
+#: usr/local/www/system_routes_edit.php:214
+#: usr/local/www/system_routes_edit.php:241
+#: usr/local/www/system_routes_edit.php:243
+#: usr/local/www/system_routes_edit.php:237
+msgid "Edit route entry"
+msgstr "編集ルートエントリ"
+
+#: usr/local/www/system_routes_edit.php:196
+#: usr/local/www/system_routes_edit.php:228
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:256
+#: usr/local/www/system_routes_edit.php:257
+#: usr/local/www/system_routes_edit.php:251
+msgid "Destination network for this static route"
+msgstr "ã“ã®é™çš„ルートã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_routes_edit.php:244
+#: usr/local/www/system_routes_edit.php:245
+#: usr/local/www/system_routes_edit.php:272
+#: usr/local/www/system_routes_edit.php:274
+#: usr/local/www/system_routes_edit.php:268
+msgid "Choose which gateway this route applies to or"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒˆã¯ã€ORã«é©ç”¨ã•ã‚Œã¦ã„るゲートウェイをé¸æŠžã™ã‚‹"
+
+#: usr/local/www/system_routes_edit.php:228
+#: usr/local/www/system_routes_edit.php:260
+#: usr/local/www/system_routes_edit.php:261
+#: usr/local/www/system_routes_edit.php:287
+#: usr/local/www/system_routes_edit.php:291
+#: usr/local/www/system_routes_edit.php:285
+msgid "Default gateway:"
+msgstr "デフォルトゲートウェイ:"
+
+#: usr/local/www/system_routes_edit.php:231
+#: usr/local/www/system_routes_edit.php:263
+#: usr/local/www/system_routes_edit.php:264
+#: usr/local/www/system_routes_edit.php:290
+#: usr/local/www/system_routes_edit.php:294
+#: usr/local/www/system_routes_edit.php:288
+msgid "Interface:"
+msgstr "インターフェース:"
+
+#: usr/local/www/system_routes_edit.php:243
+#: usr/local/www/system_routes_edit.php:275
+#: usr/local/www/system_routes_edit.php:276
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:308
+#: usr/local/www/system_routes_edit.php:302
+msgid "Gateway IP:"
+msgstr "ゲートウェイIP :"
+
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/system_routes_edit.php:374
+#: usr/local/www/system_routes_edit.php:375
+#: usr/local/www/system_routes_edit.php:399
+#: usr/local/www/system_routes_edit.php:409
+#: usr/local/www/system_routes_edit.php:403
+#, php-format
+msgid "You can manage Gateways %shere%s."
+msgstr "ã‚ãªãŸã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤%shere%sを管ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_routes_edit.php:337
+#: usr/local/www/system_routes_edit.php:377
+#: usr/local/www/system_routes_edit.php:378
+#: usr/local/www/system_routes_edit.php:402
+#: usr/local/www/system_routes_edit.php:412
+#: usr/local/www/system_routes_edit.php:406
+msgid "Sorry, we could not create your gateway at this time."
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ã“ã®æ™‚点ã§ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/diag_logs_filter_summary.php:34
+msgid "Firewall Log Summary"
+msgstr "ファイアウォールã®ãƒ­ã‚°ã®æ¦‚è¦"
+
+#: usr/local/www/diag_logs_filter_summary.php:45
+#: usr/local/www/load_balancer_relay_protocol_edit.php:230
+#: usr/local/www/load_balancer_relay_protocol_edit.php:228
+#: usr/local/www/diag_logs_filter_summary.php:46
+#: usr/local/www/load_balancer_relay_protocol_edit.php:228
+#: usr/local/www/diag_logs_filter_summary.php:46
+msgid "Actions"
+msgstr "アクション"
+
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/diag_logs_filter_summary.php:48
+#: usr/local/www/diag_logs_filter_summary.php:48
+msgid "Protocols"
+msgstr "プロトコル"
+
+#: usr/local/www/diag_logs_filter_summary.php:48
+#: usr/local/www/diag_logs_filter_summary.php:49
+#: usr/local/www/diag_logs_filter_summary.php:49
+msgid "Source IPs"
+msgstr "é€ä¿¡å…ƒIP"
+
+#: usr/local/www/diag_logs_filter_summary.php:49
+#: usr/local/www/diag_logs_filter_summary.php:50
+#: usr/local/www/diag_logs_filter_summary.php:50
+msgid "Destination IPs"
+msgstr "é€ä¿¡å…ˆIPアドレス"
+
+#: usr/local/www/diag_logs_filter_summary.php:50
+#: usr/local/www/diag_logs_filter_summary.php:51
+#: usr/local/www/diag_logs_filter_summary.php:51
+msgid "Source Ports"
+msgstr "é€ä¿¡å…ƒãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_logs_filter_summary.php:51
+#: usr/local/www/diag_logs_filter_summary.php:52
+#: usr/local/www/diag_logs_filter_summary.php:52
+msgid "Destination Ports"
+msgstr "宛先ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_logs_filter_summary.php:71
+#: usr/local/www/diag_logs_filter_summary.php:72
+#: usr/local/www/diag_logs_filter_summary.php:72
+msgid "data"
+msgstr "データ"
+
+#: usr/local/www/diag_logs_filter_summary.php:208
+#: usr/local/www/diag_logs_filter_summary.php:207
+#: usr/local/www/diag_logs_filter_summary.php:208
+#, php-format
+msgid ""
+"This is a firewall log summary, of the last %1$s lines of the firewall log "
+"(Max %2$s)."
+msgstr "(最大%2$s ) "ã“ã‚Œã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ­ã‚°ã®æœ€å¾Œã¯%1$sç·šã‹ã‚‰ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ­ã‚°ã‚’ã¾ã¨ã‚ãŸã‚‚ã®ã§ã™ã€ 。"
+
+#: usr/local/www/diag_logs_filter_summary.php:209
+#: usr/local/www/diag_logs_filter_summary.php:208
+#: usr/local/www/diag_logs_filter_summary.php:209
+msgid "NOTE: IE8 users must enable compatibility view."
+msgstr "注: IE8ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒäº’æ›è¡¨ç¤ºã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/uploadconfig.php:48 usr/local/www/uploadconfig.php:48
+msgid "ERR Could not save configuration."
+msgstr "ERR設定をä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/uploadconfig.php:54 usr/local/www/uploadconfig.php:54
+msgid "OK"
+msgstr "[OK]"
+
+#: usr/local/www/uploadconfig.php:57 usr/local/www/uploadconfig.php:57
+msgid "ERR Could not install configuration."
+msgstr "ERR設定をインストールã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/uploadconfig.php:60 usr/local/www/uploadconfig.php:60
+msgid "ERR Invalid configuration received."
+msgstr "ERR無効ãªè¨­å®šã‚’å—ä¿¡ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86
+#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133
+#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85
+#: usr/local/www/vpn_ipsec.php:139 usr/local/www/vpn_ipsec.php:139
+#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85
+msgid "The IPsec tunnel configuration has been changed"
+msgstr "IPsecトンãƒãƒ«ã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93
+#: usr/local/www/vpn_ipsec_mobile.php:318
+#: usr/local/www/vpn_ipsec_phase1.php:497
+#: usr/local/www/vpn_ipsec_phase2.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140
+#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92
+#: usr/local/www/vpn_ipsec_phase2.php:473
+#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146
+#: usr/local/www/vpn_ipsec_phase1.php:517
+#: usr/local/www/vpn_ipsec_phase2.php:495 usr/local/www/vpn_ipsec.php:146
+#: usr/local/www/vpn_ipsec_phase1.php:517
+#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92
+#: usr/local/www/vpn_ipsec_phase2.php:495
+msgid "Tunnels"
+msgstr "トンãƒãƒ«"
+
+#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94
+#: usr/local/www/vpn_ipsec_mobile.php:319
+#: usr/local/www/vpn_ipsec_phase1.php:498
+#: usr/local/www/vpn_ipsec_phase2.php:382
+#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141
+#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93
+#: usr/local/www/vpn_ipsec_phase2.php:474
+#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147
+#: usr/local/www/vpn_ipsec_phase1.php:518
+#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/vpn_ipsec.php:147
+#: usr/local/www/vpn_ipsec_phase1.php:518
+#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93
+#: usr/local/www/vpn_ipsec_phase2.php:496
+msgid "Mobile clients"
+msgstr "モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ"
+
+#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95
+#: usr/local/www/vpn_ipsec_mobile.php:320
+#: usr/local/www/vpn_ipsec_phase1.php:499
+#: usr/local/www/vpn_ipsec_phase2.php:383
+#: usr/local/www/vpn_ipsec_phase2.php:409
+msgid "Pre-shared keys"
+msgstr "事å‰å…±æœ‰éµ"
+
+#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159
+#: usr/local/www/vpn_ipsec.php:165 usr/local/www/vpn_ipsec.php:165
+msgid "Enable IPsec"
+msgstr "IPsecã®ã‚’å¯èƒ½ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351
+#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232
+#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578
+#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361
+#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237
+#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701
+#: usr/local/www/vpn_ipsec.php:237 usr/local/www/vpn_ipsec.php:367
+#: usr/local/www/vpn_ipsec_phase2.php:701
+msgid "auto"
+msgstr "オート"
+
+#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353
+#: usr/local/www/system_camanager.php:465
+#: usr/local/www/system_certmanager.php:578
+#: usr/local/www/vpn_ipsec_phase2.php:563
+#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234
+#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677
+#: usr/local/www/vpn_openvpn_server.php:937
+#: usr/local/www/system_camanager.php:466
+#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233
+#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965
+#: usr/local/www/vpn_ipsec_phase2.php:691
+#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239
+#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686
+#: usr/local/www/vpn_openvpn_server.php:992
+#: usr/local/www/vpn_ipsec_phase2.php:712
+#: usr/local/www/system_certmanager.php:687
+#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239
+#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:687
+#: usr/local/www/vpn_openvpn_server.php:992
+#: usr/local/www/vpn_ipsec_phase2.php:712
+msgid "bits"
+msgstr "ビット"
+
+#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254
+#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259
+#: usr/local/www/vpn_ipsec.php:259
+msgid "edit phase1 entry"
+msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集"
+
+#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258
+#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263
+#: usr/local/www/vpn_ipsec.php:263
+msgid ""
+"Do you really want to delete this phase1 and all associated phase2 entries?"
+msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ•ã‚§ãƒ¼ã‚º1ãŠã‚ˆã³é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒ•ã‚§ãƒ¼ã‚º2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259
+#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264
+#: usr/local/www/vpn_ipsec.php:264
+msgid "delete phase1 entry"
+msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除"
+
+#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269
+#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274
+#: usr/local/www/vpn_ipsec.php:274
+msgid "copy phase1 entry"
+msgstr "コピーフェーズ1エントリ"
+
+#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290
+#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295
+#: usr/local/www/vpn_ipsec.php:295
+#, php-format
+msgid "Show %s Phase-2 entries"
+msgstr "%sフェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’表示ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296
+#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301
+#: usr/local/www/vpn_ipsec.php:301
+msgid "Local Subnet"
+msgstr "ローカルサブãƒãƒƒãƒˆ"
+
+#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297
+#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302
+#: usr/local/www/vpn_ipsec.php:302
+msgid "Remote Subnet"
+msgstr "リモートサブãƒãƒƒãƒˆ"
+
+#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299
+#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304
+#: usr/local/www/vpn_ipsec.php:304
+msgid "P2 Protocol"
+msgstr "P2プロトコル"
+
+#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300
+#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305
+#: usr/local/www/vpn_ipsec.php:305
+msgid "P2 Transforms"
+msgstr "P2変æ›"
+
+#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301
+#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306
+#: usr/local/www/vpn_ipsec.php:306
+msgid "P2 Auth Methods"
+msgstr "P2ã¯èªè¨¼æ–¹æ³•"
+
+#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304
+#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309
+#: usr/local/www/vpn_ipsec.php:309
+msgid "add phase2 entry"
+msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加"
+
+#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384
+#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389
+#: usr/local/www/vpn_ipsec.php:389
+msgid "edit phase2 entry"
+msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集"
+
+#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386
+#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391
+#: usr/local/www/vpn_ipsec.php:391
+msgid "Do you really want to delete this phase2 entry?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ•ã‚§ãƒ¼ã‚º2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387
+#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392
+#: usr/local/www/vpn_ipsec.php:392
+msgid "delete phase2 entry"
+msgstr "フェーズ2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除"
+
+#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390
+#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395
+#: usr/local/www/vpn_ipsec.php:395
+msgid "add a new Phase 2 based on this one"
+msgstr "ã“ã®1ã«åŸºã¥ã„ã¦ã€æ–°ã—ã„フェーズ2を追加"
+
+#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421
+#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426
+#: usr/local/www/vpn_ipsec.php:426
+msgid "add phase1 entry"
+msgstr "フェーズ1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’追加"
+
+#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435
+#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440
+#: usr/local/www/vpn_ipsec.php:440
+msgid "You can check your IPsec status at"
+msgstr "ã‚ãªãŸãŒã§ã‚ãªãŸã®IPsecã®çŠ¶æ…‹ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435
+#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440
+#: usr/local/www/vpn_ipsec.php:440
+msgid "Status:IPsec"
+msgstr "ステータス: IPsecã®"
+
+#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436
+#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441
+#: usr/local/www/vpn_ipsec.php:441
+msgid "IPsec Debug Mode can be enabled at"
+msgstr "IPsecã®ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426
+#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437
+#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441
+#: usr/local/www/vpn_ipsec.php:442 usr/local/www/vpn_ipsec.php:441
+#: usr/local/www/vpn_ipsec.php:442
+msgid "System:Advanced:Miscellaneous"
+msgstr "システム:高度:ãã®ä»–"
+
+#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437
+#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442
+#: usr/local/www/vpn_ipsec.php:442
+msgid "IPsec can be set to prefer older SAs at"
+msgstr "IPsecã¯ã€å¤ã„SAã®æ™‚を好むよã†ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467
+#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472
+#: usr/local/www/vpn_ipsec.php:472
+msgid "Remote Gateway"
+msgstr "リモートゲートウェイ"
+
+#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469
+#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474
+#: usr/local/www/vpn_ipsec.php:474
+msgid "P1 Protocol"
+msgstr "P1プロトコル"
+
+#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470
+#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475
+#: usr/local/www/vpn_ipsec.php:475
+msgid "P1 Transforms"
+msgstr "P1変æ›"
+
+#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471
+#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476
+#: usr/local/www/vpn_ipsec.php:476
+msgid "P1 Description"
+msgstr "P1ã®èª¬æ˜Ž"
+
+#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90
+#: usr/local/www/diag_logs_ppp.php:88 usr/local/www/diag_logs_ppp.php:88
+#, php-format
+msgid "Last %s PPP log entries"
+msgstr "最後%sã®PPPログエントリ"
+
+#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86
+#: usr/local/www/diag_logs_relayd.php:87
+#, php-format
+msgid "Last %s Load Balancer log entries"
+msgstr "最後%sロードãƒãƒ©ãƒ³ã‚µã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/graph.php:112 usr/local/www/graph.php:112
+msgid "In"
+msgstr "ã§"
+
+#: usr/local/www/graph.php:113 usr/local/www/graph.php:113
+msgid "Out"
+msgstr "アウト"
+
+#: usr/local/www/graph.php:117 usr/local/www/graph.php:117
+msgid "Switch to bytes/s"
+msgstr "ãƒã‚¤ãƒˆ/秒ã«åˆ‡ã‚Šæ›¿ãˆã‚‹"
+
+#: usr/local/www/graph.php:118 usr/local/www/graph.php:118
+msgid "AutoScale"
+msgstr "オートスケール"
+
+#: usr/local/www/graph.php:120 usr/local/www/graph.php:120
+msgid "Graph shows last"
+msgstr "グラフã¯ã€æœ€å¾Œã«ç¤ºã—"
+
+#: usr/local/www/graph.php:195 usr/local/www/graph.php:195
+msgid "Switch to"
+msgstr "切り替ãˆã‚‹"
+
+#: usr/local/www/graph.php:201 usr/local/www/graph.php:201
+msgid "follow"
+msgstr "フォロー"
+
+#: usr/local/www/graph.php:361 usr/local/www/graph.php:361
+msgid "Kbps"
+msgstr "kbpsã®"
+
+#: usr/local/www/graph.php:363 usr/local/www/graph.php:363
+msgid "Mbps"
+msgstr "Mbpsã®"
+
+#: usr/local/www/graph.php:365 usr/local/www/graph.php:365
+msgid "Gbps"
+msgstr "Gbpsã®"
+
+#: usr/local/www/graph.php:371 usr/local/www/graph.php:371
+msgid "KB/s"
+msgstr "キロãƒã‚¤ãƒˆ/秒"
+
+#: usr/local/www/graph.php:373 usr/local/www/graph.php:373
+msgid "MB/s"
+msgstr "MB /秒"
+
+#: usr/local/www/graph.php:375 usr/local/www/graph.php:375
+msgid "GB/s"
+msgstr "GB /秒"
+
+#: usr/local/www/diag_patterns.php:43
+#: usr/local/www/services_captiveportal_filemanager.php:195
+#: usr/local/www/exec.php:290 usr/local/www/exec.php:300
+#: usr/local/www/exec.php:292 usr/local/www/exec.php:302
+#: usr/local/www/services_captiveportal_filemanager.php:192
+#: usr/local/www/exec.php:292 usr/local/www/exec.php:302
+#: usr/local/www/services_captiveportal_filemanager.php:192
+msgid "Upload"
+msgstr "アップロード"
+
+#: usr/local/www/diag_patterns.php:46 usr/local/www/diag_patterns.php:46
+msgid "Uploaded file to"
+msgstr "アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¸ã®"
+
+#: usr/local/www/diag_patterns.php:49 usr/local/www/diag_patterns.php:49
+msgid "Warning: You must upload a file with .pat extension."
+msgstr "警告:ã‚ãªãŸã¯ãƒ‘ットã®æ‹¡å¼µå­ã‚’æŒã¤ãƒ•ã‚¡ã‚¤ãƒ«ã‚’アップロードã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_patterns.php:58
+msgid "Add layer7 pattern"
+msgstr "レイヤ7パターンを追加"
+
+#: usr/local/www/diag_patterns.php:69 usr/local/www/diag_patterns.php:69
+msgid "Upload layer7 pattern file"
+msgstr "レイヤ7ã®ãƒ‘ターンファイルをアップロード"
+
+#: usr/local/www/diag_patterns.php:72 usr/local/www/diag_patterns.php:72
+msgid "File to upload:"
+msgstr "アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ï¼š"
+
+#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43
+#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:80
+msgid "Upload Pattern file"
+msgstr "パターンファイルをアップロード"
+
+#: usr/local/www/vpn_ipsec_keys.php:64 usr/local/www/vpn_ipsec_keys.php:64
+msgid "Deleted IPsec Pre-Shared Key"
+msgstr "削除ã•ã‚ŒãŸIPsecã®äº‹å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/vpn_ipsec_keys.php:71 usr/local/www/vpn_ipsec_keys.php:71
+msgid "VPN: IPsec: Keys"
+msgstr "VPN : IPsecã®ï¼šã‚­ãƒ¼"
+
+#: usr/local/www/vpn_ipsec_keys.php:104
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:128
+#: usr/local/www/vpn_ipsec_keys.php:103
+#: usr/local/www/vpn_ipsec_keys_edit.php:127
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:127
+#: usr/local/www/vpn_ipsec_keys.php:103
+msgid "Identifier"
+msgstr "識別å­"
+
+#: usr/local/www/vpn_ipsec_keys.php:105
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:136
+msgid "Pre-shared key"
+msgstr "事å‰å…±æœ‰éµ"
+
+#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146
+#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145
+#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145
+msgid "add key"
+msgstr "キーを追加"
+
+#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136
+#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135
+#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135
+msgid "edit key"
+msgstr "EDITキー"
+
+#: usr/local/www/vpn_ipsec_keys.php:137
+msgid "Do you really want to delete this pre-shared key?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136
+#: usr/local/www/vpn_ipsec_keys.php:136
+msgid "delete key"
+msgstr "削除キー"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:74
+#: usr/local/www/vpn_ipsec_keys_edit.php:74
+msgid "The identifier contains invalid characters."
+msgstr "識別å­ã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:77
+#: usr/local/www/vpn_ipsec_keys_edit.php:77
+msgid "A user with this name already exists. Add the key to the user instead."
+msgstr "ã“ã®åå‰ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚代ã‚ã‚Šã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚­ãƒ¼ã‚’追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:83
+#: usr/local/www/vpn_ipsec_keys_edit.php:83
+msgid "Another entry with the same identifier already exists."
+msgstr "åŒã˜è­˜åˆ¥å­ã‚’æŒã¤åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:100
+#: usr/local/www/vpn_ipsec_keys_edit.php:100
+msgid "Edited"
+msgstr "編集済ã¿ã®"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:103
+#: usr/local/www/vpn_ipsec_keys_edit.php:103
+msgid "Added"
+msgstr "追加ã•ã‚ŒãŸ"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:114
+msgid "VPN: IPsec: Edit pre-shared key"
+msgstr "VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:132
+#: usr/local/www/vpn_ipsec_keys_edit.php:131
+#: usr/local/www/vpn_ipsec_keys_edit.php:131
+msgid ""
+"This can be either an IP address, fully qualified domain name or an e-mail "
+"address"
+msgstr "アドレス「ã“ã‚Œã¯ã€IPアドレスã€å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åã¾ãŸã¯é›»å­ãƒ¡ãƒ¼ãƒ«ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€"
+
+#: usr/local/www/vpn_ipsec_mobile.php:128
+#: usr/local/www/vpn_ipsec_mobile.php:132
+#: usr/local/www/vpn_ipsec_mobile.php:132
+msgid "User Authentication Source"
+msgstr "ユーザーèªè¨¼å…ƒ"
+
+#: usr/local/www/vpn_ipsec_mobile.php:128
+#: usr/local/www/vpn_ipsec_mobile.php:132
+#: usr/local/www/vpn_ipsec_mobile.php:132
+msgid "Group Authentication Source"
+msgstr "グループèªè¨¼å…ƒ"
+
+#: usr/local/www/vpn_ipsec_mobile.php:134
+#: usr/local/www/vpn_ipsec_mobile.php:138
+#: usr/local/www/vpn_ipsec_mobile.php:138
+msgid ""
+"A valid IP address for 'Virtual Address Pool Network' must be specified."
+msgstr "「「仮想アドレスプールã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯'ã®æœ‰åŠ¹ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:138
+#: usr/local/www/vpn_ipsec_mobile.php:142
+#: usr/local/www/vpn_ipsec_mobile.php:142
+msgid "A valid value for 'DNS Default Domain' must be specified."
+msgstr "「 DNSã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ‰ãƒ¡ã‚¤ãƒ³ã€ã®æœ‰åŠ¹ãªå€¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:143
+#: usr/local/www/vpn_ipsec_mobile.php:159
+#: usr/local/www/vpn_ipsec_mobile.php:159
+msgid ""
+"At least one DNS server must be specified to enable the DNS Server option."
+msgstr "At least one DNS server must be specified to enable the DNS Server option."
+
+#: usr/local/www/vpn_ipsec_mobile.php:145
+#: usr/local/www/vpn_ipsec_mobile.php:161
+#: usr/local/www/vpn_ipsec_mobile.php:161
+msgid "A valid IP address for 'DNS Server #1' must be specified."
+msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åŠ¹ãªIPアドレス"
+
+#: usr/local/www/vpn_ipsec_mobile.php:147
+#: usr/local/www/vpn_ipsec_mobile.php:163
+#: usr/local/www/vpn_ipsec_mobile.php:163
+msgid "A valid IP address for 'DNS Server #2' must be specified."
+msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åŠ¹ãªIPアドレス"
+
+#: usr/local/www/vpn_ipsec_mobile.php:149
+#: usr/local/www/vpn_ipsec_mobile.php:165
+#: usr/local/www/vpn_ipsec_mobile.php:165
+msgid "A valid IP address for 'DNS Server #3' must be specified."
+msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åŠ¹ãªIPアドレス"
+
+#: usr/local/www/vpn_ipsec_mobile.php:151
+#: usr/local/www/vpn_ipsec_mobile.php:167
+#: usr/local/www/vpn_ipsec_mobile.php:167
+msgid "A valid IP address for 'DNS Server #4' must be specified."
+msgstr "「 DNSサーãƒãƒ¼ã®æœ‰åŠ¹ãªIPアドレス"
+
+#: usr/local/www/vpn_ipsec_mobile.php:156
+#: usr/local/www/vpn_ipsec_mobile.php:172
+#: usr/local/www/vpn_ipsec_mobile.php:172
+msgid ""
+"At least one WINS server must be specified to enable the DNS Server option."
+msgstr "å°‘ãªãã¨ã‚‚1 WINSサーãƒã¯ã€DNSサーãƒãƒ¼]オプションを有効ã«ã™ã‚‹ãŸã‚ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:158
+#: usr/local/www/vpn_ipsec_mobile.php:174
+#: usr/local/www/vpn_ipsec_mobile.php:174
+msgid "A valid IP address for 'WINS Server #1' must be specified."
+msgstr "ã®æœ‰åŠ¹ãªIPアドレスã¯ã€ 「 WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:160
+#: usr/local/www/vpn_ipsec_mobile.php:176
+#: usr/local/www/vpn_ipsec_mobile.php:176
+msgid "A valid IP address for 'WINS Server #2' must be specified."
+msgstr "ã®æœ‰åŠ¹ãªIPアドレスã¯ã€ 「 WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:165
+#: usr/local/www/vpn_ipsec_mobile.php:181
+#: usr/local/www/vpn_ipsec_mobile.php:181
+msgid "A valid value for 'Login Banner' must be specified."
+msgstr "「ログインãƒãƒŠãƒ¼ã€ã®æœ‰åŠ¹ãªå€¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:220
+#: usr/local/www/vpn_ipsec_mobile.php:240
+#: usr/local/www/vpn_ipsec_mobile.php:240
+msgid "Mobile"
+msgstr "æºå¸¯é›»è©±"
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid ""
+"Support for IPsec Mobile clients is enabled but a Phase1 definition was not "
+"found"
+msgstr "「 IPsecã®ãƒ¢ãƒã‚¤ãƒ«Â·ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚µãƒãƒ¼ãƒˆãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ãŒã€ãƒ•ã‚§ãƒ¼ã‚º1ã®å®šç¾©ã¯ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"ãŒè¦‹ã¤ã‹ã‚Š"
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid "Please click Create to define one."
+msgstr "ã“れらã®ã„ãšã‚Œã‹ã‚’定義ã™ã‚‹ãŸã‚ã«ä½œæˆ]をクリックã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid "Create Phase1"
+msgstr "フェーズ1を作æˆã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:330
+#: usr/local/www/vpn_ipsec_mobile.php:357
+#: usr/local/www/vpn_ipsec_mobile.php:357
+msgid "IKE Extensions"
+msgstr "IKEã®æ‹¡å¼µæ©Ÿèƒ½"
+
+#: usr/local/www/vpn_ipsec_mobile.php:339
+#: usr/local/www/vpn_ipsec_mobile.php:366
+#: usr/local/www/vpn_ipsec_mobile.php:366
+msgid "Enable IPsec Mobile Client Support"
+msgstr "IPsecã®ãƒ¢ãƒã‚¤ãƒ«Â·ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec_mobile.php:350
+#: usr/local/www/vpn_ipsec_mobile.php:377
+#: usr/local/www/vpn_ipsec_mobile.php:377
+msgid "Extended Authentication (Xauth)"
+msgstr "æ‹¡å¼µèªè¨¼ï¼ˆ Xauthã®ï¼‰"
+
+#: usr/local/www/vpn_ipsec_mobile.php:354
+#: usr/local/www/vpn_ipsec_mobile.php:381
+#: usr/local/www/vpn_ipsec_mobile.php:381
+msgid "User Authentication"
+msgstr "ユーザーèªè¨¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:358
+#: usr/local/www/vpn_ipsec_mobile.php:379
+#: usr/local/www/vpn_ipsec_mobile.php:404
+#: usr/local/www/vpn_ipsec_mobile.php:404
+msgid "system"
+msgstr "システム"
+
+#: usr/local/www/vpn_ipsec_mobile.php:375
+#: usr/local/www/vpn_ipsec_mobile.php:399
+#: usr/local/www/vpn_ipsec_mobile.php:399
+msgid "Group Authentication"
+msgstr "グループèªè¨¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:388
+#: usr/local/www/vpn_ipsec_mobile.php:413
+#: usr/local/www/vpn_ipsec_mobile.php:413
+msgid "Client Configuration (mode-cfg)"
+msgstr "クライアント構æˆï¼ˆãƒ¢ãƒ¼ãƒ‰CFG )"
+
+#: usr/local/www/vpn_ipsec_mobile.php:392
+#: usr/local/www/vpn_ipsec_mobile.php:417
+#: usr/local/www/vpn_ipsec_mobile.php:417
+msgid "Virtual Address Pool"
+msgstr "仮想アドレスプール"
+
+#: usr/local/www/vpn_ipsec_mobile.php:401
+#: usr/local/www/vpn_ipsec_mobile.php:426
+#: usr/local/www/vpn_ipsec_mobile.php:426
+msgid "Provide a virtual IP address to clients"
+msgstr "クライアントã«ä»®æƒ³IPアドレスをæä¾›ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec_mobile.php:424
+#: usr/local/www/vpn_ipsec_mobile.php:449
+#: usr/local/www/vpn_ipsec_mobile.php:449
+msgid "Network List"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/vpn_ipsec_mobile.php:433
+#: usr/local/www/vpn_ipsec_mobile.php:458
+#: usr/local/www/vpn_ipsec_mobile.php:458
+msgid "Provide a list of accessible networks to clients"
+msgstr "クライアントã«ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚¹ãƒˆã‚’æä¾›"
+
+#: usr/local/www/vpn_ipsec_mobile.php:440
+#: usr/local/www/vpn_ipsec_mobile.php:465
+#: usr/local/www/vpn_ipsec_mobile.php:465
+msgid "Save Xauth Password"
+msgstr "Xauthã®ãƒ‘スワードをä¿å­˜ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec_mobile.php:449
+#: usr/local/www/vpn_ipsec_mobile.php:474
+#: usr/local/www/vpn_ipsec_mobile.php:474
+msgid "Allow clients to save Xauth passwords (Cisco VPN client only)."
+msgstr "クライアントãŒXauthã®ãƒ‘スワードをä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼ˆCisco VPNクライアントã®ã¿ï¼‰ 。"
+
+#: usr/local/www/vpn_ipsec_mobile.php:450
+#: usr/local/www/vpn_ipsec_mobile.php:475
+#: usr/local/www/vpn_ipsec_mobile.php:475
+msgid ""
+"NOTE: With iPhone clients, this does not work when deployed via the iPhone "
+"configuration utility, only by manual entry."
+msgstr ""注: iPhone経由ã§å±•é–‹ã•ã‚ŒãŸã¨ãã€iPhoneã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã€ã“ã‚ŒãŒå‹•ä½œã—ãªã„ã€ã ã‘手入力ã«ã‚ˆã£ã¦ã€ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:457
+#: usr/local/www/vpn_openvpn_csc.php:433
+#: usr/local/www/vpn_openvpn_server.php:1194
+#: usr/local/www/vpn_openvpn_server.php:1336
+#: usr/local/www/vpn_ipsec_mobile.php:482
+#: usr/local/www/vpn_openvpn_csc.php:432
+#: usr/local/www/vpn_openvpn_server.php:1378
+#: usr/local/www/vpn_openvpn_server.php:1430
+#: usr/local/www/vpn_openvpn_csc.php:432
+#: usr/local/www/vpn_ipsec_mobile.php:482
+#: usr/local/www/vpn_openvpn_server.php:1430
+msgid "DNS Default Domain"
+msgstr "DNSã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ‰ãƒ¡ã‚¤ãƒ³"
+
+#: usr/local/www/vpn_ipsec_mobile.php:466
+#: usr/local/www/vpn_openvpn_csc.php:443
+#: usr/local/www/vpn_openvpn_server.php:1204
+#: usr/local/www/vpn_openvpn_server.php:1346
+#: usr/local/www/vpn_ipsec_mobile.php:491
+#: usr/local/www/vpn_openvpn_csc.php:442
+#: usr/local/www/vpn_openvpn_server.php:1388
+#: usr/local/www/vpn_openvpn_server.php:1440
+#: usr/local/www/vpn_openvpn_csc.php:442
+#: usr/local/www/vpn_ipsec_mobile.php:491
+#: usr/local/www/vpn_openvpn_server.php:1440
+msgid "Provide a default domain name to clients"
+msgstr "クライアントã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ‰ãƒ¡ã‚¤ãƒ³åã‚’æä¾›"
+
+#: usr/local/www/vpn_ipsec_mobile.php:480
+#: usr/local/www/vpn_openvpn_csc.php:458
+#: usr/local/www/vpn_openvpn_server.php:1219
+#: usr/local/www/vpn_openvpn_server.php:1361
+#: usr/local/www/vpn_ipsec_mobile.php:529
+#: usr/local/www/vpn_openvpn_csc.php:457
+#: usr/local/www/vpn_openvpn_server.php:1403
+#: usr/local/www/vpn_openvpn_server.php:1455
+#: usr/local/www/vpn_openvpn_csc.php:457
+#: usr/local/www/vpn_ipsec_mobile.php:529
+#: usr/local/www/vpn_openvpn_server.php:1455
+msgid "DNS Servers"
+msgstr "DNSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:489
+#: usr/local/www/vpn_openvpn_csc.php:468
+#: usr/local/www/vpn_openvpn_server.php:1229
+#: usr/local/www/vpn_openvpn_server.php:1371
+#: usr/local/www/vpn_ipsec_mobile.php:538
+#: usr/local/www/vpn_openvpn_csc.php:467
+#: usr/local/www/vpn_openvpn_server.php:1413
+#: usr/local/www/vpn_openvpn_server.php:1465
+#: usr/local/www/vpn_openvpn_csc.php:467
+#: usr/local/www/vpn_ipsec_mobile.php:538
+#: usr/local/www/vpn_openvpn_server.php:1465
+msgid "Provide a DNS server list to clients"
+msgstr "クライアントã«ã€DNSサーãƒãƒªã‚¹ãƒˆã‚’æä¾›"
+
+#: usr/local/www/vpn_ipsec_mobile.php:522
+#: usr/local/www/vpn_openvpn_csc.php:606
+#: usr/local/www/vpn_openvpn_server.php:1367
+#: usr/local/www/vpn_openvpn_server.php:1509
+#: usr/local/www/vpn_ipsec_mobile.php:571
+#: usr/local/www/vpn_openvpn_csc.php:605
+#: usr/local/www/vpn_openvpn_server.php:1551
+#: usr/local/www/vpn_openvpn_server.php:1603
+#: usr/local/www/vpn_openvpn_csc.php:605
+#: usr/local/www/vpn_ipsec_mobile.php:571
+#: usr/local/www/vpn_openvpn_server.php:1603
+msgid "WINS Servers"
+msgstr "WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:531
+#: usr/local/www/vpn_openvpn_csc.php:616
+#: usr/local/www/vpn_openvpn_server.php:1377
+#: usr/local/www/vpn_openvpn_server.php:1519
+#: usr/local/www/vpn_ipsec_mobile.php:580
+#: usr/local/www/vpn_openvpn_csc.php:615
+#: usr/local/www/vpn_openvpn_server.php:1561
+#: usr/local/www/vpn_openvpn_server.php:1613
+#: usr/local/www/vpn_openvpn_csc.php:615
+#: usr/local/www/vpn_ipsec_mobile.php:580
+#: usr/local/www/vpn_openvpn_server.php:1613
+msgid "Provide a WINS server list to clients"
+msgstr "クライアントã«ã€WINSサーãƒãƒ¼ã®ä¸€è¦§ã‚’æä¾›"
+
+#: usr/local/www/vpn_ipsec_mobile.php:552
+#: usr/local/www/vpn_ipsec_mobile.php:601
+#: usr/local/www/vpn_ipsec_mobile.php:601
+msgid "Phase2 PFS Group"
+msgstr "フェーズ2 PFSグループ"
+
+#: usr/local/www/vpn_ipsec_mobile.php:561
+#: usr/local/www/vpn_ipsec_mobile.php:610
+#: usr/local/www/vpn_ipsec_mobile.php:610
+msgid ""
+"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 "
+"settings )"
+msgstr "「 (設定クライアントã¸ã®ãƒ•ã‚§ãƒ¼ã‚º2 PFSグループをæä¾›ã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ãƒã‚¤ãƒ«Â·ãƒ•ã‚§ãƒ¼ã‚º2を上書ãã—ã¾ã™")"
+
+#: usr/local/www/vpn_ipsec_mobile.php:568
+#: usr/local/www/system_groupmanager.php:71
+#: usr/local/www/vpn_ipsec_mobile.php:617
+#: usr/local/www/system_groupmanager.php:71
+#: usr/local/www/vpn_ipsec_mobile.php:617
+msgid "Group"
+msgstr "グループ"
+
+#: usr/local/www/vpn_ipsec_mobile.php:582
+#: usr/local/www/vpn_ipsec_mobile.php:631
+#: usr/local/www/vpn_ipsec_mobile.php:631
+msgid "Login Banner"
+msgstr "ログインãƒãƒŠãƒ¼"
+
+#: usr/local/www/vpn_ipsec_mobile.php:591
+#: usr/local/www/vpn_ipsec_mobile.php:640
+#: usr/local/www/vpn_ipsec_mobile.php:640
+msgid "Provide a login banner to clients"
+msgstr "クライアントã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒãƒŠãƒ¼ã‚’æä¾›"
+
+#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74
+#: usr/local/www/interfaces_lagg.php:74
+msgid "This LAGG interface cannot be deleted because it is still being used."
+msgstr "ãã‚Œã¯ã¾ã ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®LAGGインターフェイスを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141
+#: usr/local/www/interfaces_lagg.php:145 usr/local/www/interfaces_lagg.php:145
+msgid ""
+"LAGG allows for link aggregation, bonding and fault tolerance. Only "
+"unassigned interfaces can be added to LAGG."
+msgstr "「 LAGG ã€ãƒªãƒ³ã‚¯ã‚¢ã‚°ãƒªã‚²ãƒ¼ã‚·ãƒ§ãƒ³ã€ãƒœãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŠã‚ˆã³è€éšœå®³æ€§ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚ã®ã¿"未割り当ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯LAGGã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_lagg_edit.php:86
+#: usr/local/www/interfaces_lagg_edit.php:88
+#: usr/local/www/interfaces_lagg_edit.php:88
+msgid "Lagg protocol"
+msgstr "Laggプロトコル"
+
+#: usr/local/www/interfaces_lagg_edit.php:131
+#: usr/local/www/interfaces_lagg_edit.php:132
+#: usr/local/www/interfaces_lagg_edit.php:145
+#: usr/local/www/interfaces_lagg_edit.php:145
+msgid "LAGG configuration"
+msgstr "LAGG構æˆ"
+
+#: usr/local/www/interfaces_lagg_edit.php:149
+#: usr/local/www/interfaces_lagg_edit.php:150
+#: usr/local/www/interfaces_lagg_edit.php:163
+#: usr/local/www/interfaces_lagg_edit.php:163
+msgid "Choose the members that will be used for the link aggregation"
+msgstr "リンクアグリゲーションã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¡ãƒ³ãƒãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/interfaces_lagg_edit.php:152
+#: usr/local/www/interfaces_lagg_edit.php:153
+#: usr/local/www/interfaces_lagg_edit.php:166
+#: usr/local/www/interfaces_lagg_edit.php:166
+msgid "Lag proto"
+msgstr "原始é…ã‚Œ"
+
+#: usr/local/www/interfaces_lagg_edit.php:168
+#: usr/local/www/interfaces_lagg_edit.php:169
+#: usr/local/www/interfaces_lagg_edit.php:182
+#: usr/local/www/interfaces_lagg_edit.php:181
+#: usr/local/www/interfaces_lagg_edit.php:181
+msgid "failover"
+msgstr "フェイルオーãƒãƒ¼"
+
+#: usr/local/www/interfaces_lagg_edit.php:169
+#: usr/local/www/interfaces_lagg_edit.php:170
+#: usr/local/www/interfaces_lagg_edit.php:183
+#: usr/local/www/interfaces_lagg_edit.php:182
+#: usr/local/www/interfaces_lagg_edit.php:182
+msgid ""
+"Sends and receives traffic only through the master port. If the master port "
+"becomes unavailable, the next active port is used. The first interface "
+"added is the master port; any interfaces added after that are used as "
+"failover devices."
+msgstr "「é€ä¿¡ã®ã¿ãƒžã‚¹ã‚¿ãƒãƒ¼ãƒˆã‚’介ã—ã¦ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’å—ä¿¡ã—ã¾ã™ã€‚マスタãƒãƒ¼ãƒˆãŒã‚ã‚Œã°ã€Œä½¿ç”¨ä¸å¯èƒ½ã«ãªã£ãŸã€æ¬¡ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•ã‚Œã¦ã„る。最åˆã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã€ã‚’追加ã¯ã€ãƒžã‚¹ã‚¿ãƒãƒ¼ãƒˆã§ã‚ã‚Šã€ã™ãªã‚ã¡å¾Œã«è¿½åŠ ã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€æ¬¡ã®ã‚ˆã†ã«ä½¿ç”¨ã•ã‚Œã¦ã„る「フェイルオーãƒãƒ¼ãƒ‡ãƒã‚¤ã‚¹ã€‚"
+
+#: usr/local/www/interfaces_lagg_edit.php:174
+#: usr/local/www/interfaces_lagg_edit.php:175
+#: usr/local/www/interfaces_lagg_edit.php:188
+#: usr/local/www/interfaces_lagg_edit.php:187
+#: usr/local/www/interfaces_lagg_edit.php:187
+msgid "fec"
+msgstr "FEC"
+
+#: usr/local/www/interfaces_lagg_edit.php:174
+#: usr/local/www/interfaces_lagg_edit.php:175
+#: usr/local/www/interfaces_lagg_edit.php:188
+#: usr/local/www/interfaces_lagg_edit.php:187
+#: usr/local/www/interfaces_lagg_edit.php:187
+msgid ""
+"Supports Cisco EtherChannel. This is a static setup and does not negotiate "
+"aggregation with the peer or exchange frames to monitor the link."
+msgstr "「シスコã®EtherChannelãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã‚Œã¯ã€é™çš„ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã§ã€äº¤æ¸‰ã—ã¦ã„ãªã„"ã®ãƒªãƒ³ã‚¯ã‚’監視ã™ã‚‹ãŸã‚ã®ãƒ”ã‚¢ã¾ãŸã¯äº¤æ›ãƒ•ãƒ¬ãƒ¼ãƒ ã§å‡é›†ã‚’。"
+
+#: usr/local/www/interfaces_lagg_edit.php:178
+#: usr/local/www/interfaces_lagg_edit.php:179
+#: usr/local/www/interfaces_lagg_edit.php:192
+#: usr/local/www/interfaces_lagg_edit.php:191
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid "lacp"
+msgstr "LACP"
+
+#: usr/local/www/interfaces_lagg_edit.php:178
+#: usr/local/www/interfaces_lagg_edit.php:179
+#: usr/local/www/interfaces_lagg_edit.php:192
+#: usr/local/www/interfaces_lagg_edit.php:191
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid ""
+"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the "
+"Marker Protocol. LACP will negotiate a set of aggregable links with the "
+"peer in to one or more Link Aggregated Groups. Each LAG is composed of "
+"ports of the same speed, set to full-duplex operation. The traffic will be "
+"balanced across the ports in the LAG with the greatest total speed, in most "
+"cases there will only be one LAG which contains all ports. In the event of "
+"changes in physical connectivity, Link Aggregation will quickly converge to "
+"a new configuration."
+msgstr "ã€ã‚’サãƒãƒ¼ãƒˆã—ã€IEEE 802.3adリンクアグリゲーション制御プロトコル( LACP)や「マーカープロトコル。 LACPã¯ã€ã¨ä¸€ã¤ã«ã¾ã¨ã‚られる一連ã®ãƒªãƒ³ã‚¯äº¤æ¸‰ã™ã‚‹ã€ 1ã¤ä»¥ä¸Šã®ãƒªãƒ³ã‚¯é›†ç´„グループã¸ã®ãƒ”アをå„LAGãŒæ§‹æˆã•ã‚Œã¦ã„る「全二é‡å‹•ä½œã«è¨­å®šã•ã‚Œã¦åŒã˜é€Ÿåº¦ã®ãƒãƒ¼ãƒˆã€‚トラフィックã¯ä¾‹ã ã‘ã€ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹1 LAGãŒã‚ã‚‹ã ã‚ã†ã€ã»ã¨ã‚“ã©ã§ã€æœ€å¤§ã®åˆè¨ˆé€Ÿåº¦ãŒã€LAGãƒãƒ¼ãƒˆé–“ã§ãƒãƒ©ãƒ³ã‚¹ã®ã¨ã‚ŒãŸã€ã¨ãªã‚Šã¾ã™ã€‚ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€æ–°ã—ã„コンフィギュレーションã€ã¯ã€ç‰©ç†çš„接続ã®å¤‰æ›´ã€ãƒªãƒ³ã‚¯ã‚¢ã‚°ãƒªã‚²ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ€¥é€Ÿã«åŽæŸã™ã‚‹ã€ 。"
+
+#: usr/local/www/interfaces_lagg_edit.php:189
+#: usr/local/www/interfaces_lagg_edit.php:190
+#: usr/local/www/interfaces_lagg_edit.php:203
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/interfaces_lagg_edit.php:202
+msgid "loadbalance"
+msgstr "ロードãƒãƒ©ãƒ³ã‚¹"
+
+#: usr/local/www/interfaces_lagg_edit.php:189
+#: usr/local/www/interfaces_lagg_edit.php:190
+#: usr/local/www/interfaces_lagg_edit.php:203
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/interfaces_lagg_edit.php:202
+msgid ""
+"Balances outgoing traffic across the active ports based on hashed protocol "
+"header information and accepts incoming traffic from any active port. This "
+"is a static setup and does not negotiate aggregation with the peer or "
+"exchange frames to monitor the link. The hash includes the Ethernet source "
+"and destination address, and, if available, the VLAN tag, and the IP source "
+"and destination address"
+msgstr "ヘッダ情報ã¨ä»»æ„ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆã‹ã‚‰ç€ä¿¡ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’å—ã‘付ã‘〠「ãƒãƒƒã‚·ãƒ¥åŒ–ã•ã‚ŒãŸãƒ—ロトコルã«åŸºã¥ã„ã¦ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒãƒ¼ãƒˆé–“残高発信トラフィックを〠。ã“ã‚Œã¯ã€Œé™çš„設定ã§ã€ãƒ”ã‚¢ã¾ãŸã¯ã¨ã®å‡é›†ã‚’ãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆã—ã¾ã›ã‚“ã€ã®ãƒªãƒ³ã‚¯ã‚’監視ã™ã‚‹ãŸã‚ã®äº¤æ›ãƒ•ãƒ¬ãƒ¼ãƒ ã€‚ãƒãƒƒã‚·ãƒ¥ã¯ã€ã‚¤ãƒ¼ã‚µãƒãƒƒãƒˆã‚½ãƒ¼ã‚¹ã€ã‚„宛先アドレスã€ãŠã‚ˆã³ã€å¯èƒ½ãªå ´åˆã€ VLANã‚¿ã‚°ã€ãŠã‚ˆã³IPソースã€ãŠã‚ˆã³å®›å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å«ã‚€"
+
+#: usr/local/www/interfaces_lagg_edit.php:197
+#: usr/local/www/interfaces_lagg_edit.php:198
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/interfaces_lagg_edit.php:210
+#: usr/local/www/interfaces_lagg_edit.php:210
+msgid "roundrobin"
+msgstr "ラウンドロビン"
+
+#: usr/local/www/interfaces_lagg_edit.php:197
+#: usr/local/www/interfaces_lagg_edit.php:198
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/interfaces_lagg_edit.php:210
+#: usr/local/www/interfaces_lagg_edit.php:210
+msgid ""
+"Distributes outgoing traffic using a round-robin scheduler through all "
+"active ports and accepts incoming traffic from any active port"
+msgstr "アクティブãƒãƒ¼ãƒˆã€Œã™ã¹ã¦ã‚’通ã˜ã¦ã€ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンスケジューラを使用ã—ã¦ã€ç™ºä¿¡ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’分散ã€ã—ã€ä»»æ„ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒãƒ¼ãƒˆã‹ã‚‰ç€ä¿¡ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’å—ã‘付ã‘ã¾ã™"
+
+#: usr/local/www/interfaces_lagg_edit.php:201
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/interfaces_lagg_edit.php:215
+#: usr/local/www/interfaces_lagg_edit.php:214
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid ""
+"This protocol is intended to do nothing: it disables any traffic without "
+"disabling the lagg interface itself"
+msgstr "「ã“ã®ãƒ—ロトコルã¯ã€ä½•ã‚‚ã—ãªã„ã“ã¨ã‚’æ„図ã—ã¦ã„る:ãã‚Œã¯ã›ãšã«ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™ã€ laggインタフェース自体を無効ã«ã™ã‚‹"
+
+#: usr/local/www/interfaces_ppps.php:62 usr/local/www/interfaces_ppps.php:62
+msgid ""
+"This point-to-point link cannot be deleted because it is still being used as "
+"an interface."
+msgstr "インターフェース「ãã‚Œã§ã‚‚ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ã®ã§ã€ã“ã®ãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆãƒªãƒ³ã‚¯ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_ppps.php:78 usr/local/www/interfaces_ppps.php:78
+msgid "Interfaces: PPPs"
+msgstr "インターフェース:購買力平価"
+
+#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110
+#: usr/local/www/interfaces_ppps.php:110
+msgid "Interface(s)/Port(s)"
+msgstr "インターフェイス(複数å¯ï¼‰ /ãƒãƒ¼ãƒˆï¼ˆè¤‡æ•°å¯ï¼‰"
+
+#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133
+#: usr/local/www/interfaces_ppps.php:133
+msgid "Do you really want to delete this PPP interface?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®PPPインタフェースを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_ppps_edit.php:182
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+msgid "Link Interface(s)"
+msgstr "リンク·インターフェース( S )"
+
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522
+#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596
+#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542
+#: usr/local/www/services_dhcp.php:740
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/services_dhcp.php:740 usr/local/www/services_dhcpv6.php:542
+msgid "Subnet"
+msgstr "サブãƒãƒƒãƒˆ"
+
+#: usr/local/www/interfaces_ppps_edit.php:207
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Please choose a Link Type."
+msgstr "リンクタイプをãŠé¸ã³ä¸‹ã•ã„。"
+
+#: usr/local/www/interfaces_ppps_edit.php:211
+#: usr/local/www/interfaces_ppps_edit.php:217
+#: usr/local/www/interfaces_ppps_edit.php:217
+msgid ""
+"Multilink connections (MLPPP) using the PPP link type is not currently "
+"supported. Please select only one Link Interface."
+msgstr "「 PPPリンクã®ç¨®é¡žã‚’使用ã—ã¦ãƒžãƒ«ãƒãƒªãƒ³ã‚¯æŽ¥ç¶šï¼ˆ MLPPP )ã¯ç¾åœ¨ã—ã¦ã„ãªã„ã€ãŒã‚µãƒãƒ¼ãƒˆã€‚唯一ã®1 Linkインタフェースをé¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:219
+#: usr/local/www/interfaces_ppps_edit.php:219
+msgid "The Service name contains invalid characters."
+msgstr "サービスåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:215
+#: usr/local/www/interfaces_ppps_edit.php:221
+#: usr/local/www/interfaces_ppps_edit.php:221
+msgid "Do not specify both a Service name and a NULL Service name."
+msgstr "サービスåã¨NULLã®ã‚µãƒ¼ãƒ“スåã®ä¸¡æ–¹ã‚’指定ã—ãªã„ã§ãã ã•ã„。"
+
+#: usr/local/www/interfaces_ppps_edit.php:229
+#: usr/local/www/interfaces_ppps_edit.php:235
+#: usr/local/www/interfaces_ppps_edit.php:235
+msgid ""
+"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE "
+"Periodic reset fields."
+msgstr "定期的ãªãƒªã‚»ãƒƒãƒˆã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰"ã¯æœ‰åŠ¹ãªã®PPPoEリセット月ã¯ã‚«ã‚¹ã‚¿ãƒ ã®PPPoEã§ï¼ˆ 1〜12)を指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_ppps_edit.php:231
+#: usr/local/www/interfaces_ppps_edit.php:237
+#: usr/local/www/interfaces_ppps_edit.php:237
+msgid ""
+"A valid PPPoE reset day of month must be specified (1-31) in the Custom "
+"PPPoE Periodic reset fields. No checks are done on valid # of days per month"
+msgstr "「月ã®æœ‰åŠ¹ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆæ—¥ã¯ã‚«ã‚¹ã‚¿ãƒ ã§ï¼ˆ 1月31日)を指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€ã®PPPoE定期フィールドをリセットã—ã¾ã™ã€‚ã„ã„ãˆãƒã‚§ãƒƒã‚¯ã¯æœ‰åŠ¹ãªã§è¡Œã‚ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: usr/local/www/interfaces_ppps_edit.php:233
+#: usr/local/www/interfaces_ppps_edit.php:239
+#: usr/local/www/interfaces_ppps_edit.php:239
+msgid ""
+"A valid PPPoE reset year must be specified. Don't select a year in the past!"
+msgstr "「有効ãªPPPoEã®ãƒªã‚»ãƒƒãƒˆã®å¹´ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚éŽåŽ»ã®ã®å¹´ã‚’é¸æŠžã—ãªã„ã§ãã ã•ã„ï¼"
+
+#: usr/local/www/interfaces_ppps_edit.php:238
+#: usr/local/www/interfaces_ppps_edit.php:244
+#: usr/local/www/interfaces_ppps_edit.php:244
+#, php-format
+msgid "A valid local IP address must be specified for %s."
+msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«IPアドレスã¯ã€ %s.を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/interfaces_ppps_edit.php:240
+#: usr/local/www/interfaces_ppps_edit.php:246
+#: usr/local/www/interfaces_ppps_edit.php:246
+#, php-format
+msgid "A valid gateway IP address OR hostname must be specified for %s."
+msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåãŒ%s.を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/interfaces_ppps_edit.php:242
+#: usr/local/www/interfaces_ppps_edit.php:248
+#: usr/local/www/interfaces_ppps_edit.php:248
+#, php-format
+msgid "The bandwidth value for %s must be an integer."
+msgstr "%sãŸã‚ã®å¸¯åŸŸå¹…ã®å€¤ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_ppps_edit.php:244
+#: usr/local/www/interfaces_ppps_edit.php:250
+#: usr/local/www/interfaces_ppps_edit.php:250
+#, php-format
+msgid "The MTU for %s must be greater than 576 bytes."
+msgstr "%sã®MTUを超ãˆã‚‹576ãƒã‚¤ãƒˆã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_ppps_edit.php:246
+#: usr/local/www/interfaces_ppps_edit.php:252
+#: usr/local/www/interfaces_ppps_edit.php:252
+#, php-format
+msgid "The MRU for %s must be greater than 576 bytes."
+msgstr "%sã®ãŸã‚ã®MRUを超ãˆã‚‹576ãƒã‚¤ãƒˆã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_ppps_edit.php:381
+#: usr/local/www/system_authservers.php:577
+#: usr/local/www/interfaces_ppps_edit.php:382
+#: usr/local/www/system_authservers.php:582
+#: usr/local/www/interfaces_ppps_edit.php:388
+#: usr/local/www/system_authservers.php:589
+#: usr/local/www/interfaces_ppps_edit.php:388
+#: usr/local/www/system_authservers.php:589
+msgid "Select"
+msgstr "é¸æŠžã™ã‚‹"
+
+#: usr/local/www/interfaces_ppps_edit.php:398
+#: usr/local/www/interfaces_ppps_edit.php:399
+#: usr/local/www/interfaces_ppps_edit.php:405
+#: usr/local/www/interfaces_ppps_edit.php:405
+msgid "PPPs configuration"
+msgstr "購買力平価ã®è¨­å®š"
+
+#: usr/local/www/interfaces_ppps_edit.php:401
+#: usr/local/www/interfaces_ppps_edit.php:402
+#: usr/local/www/interfaces_ppps_edit.php:408
+#: usr/local/www/interfaces_ppps_edit.php:408
+msgid "Link Type"
+msgstr "リンク型"
+
+#: usr/local/www/interfaces_ppps_edit.php:416
+#: usr/local/www/interfaces_ppps_edit.php:417
+#: usr/local/www/interfaces_ppps_edit.php:423
+#: usr/local/www/interfaces_ppps_edit.php:423
+msgid "Link interface(s)"
+msgstr "Linkインタフェース( S )"
+
+#: usr/local/www/interfaces_ppps_edit.php:422
+#: usr/local/www/interfaces_ppps_edit.php:423
+#: usr/local/www/interfaces_ppps_edit.php:429
+#: usr/local/www/interfaces_ppps_edit.php:429
+msgid "Select at least two interfaces for Multilink (MLPPP) connections."
+msgstr "マルãƒãƒªãƒ³ã‚¯ï¼ˆ MLPPP )接続ã®ãŸã‚ã«å°‘ãªãã¨ã‚‚2ã¤ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:470
+#: usr/local/www/interfaces_ppps_edit.php:471
+#: usr/local/www/interfaces_ppps_edit.php:477
+#: usr/local/www/interfaces_ppps_edit.php:477
+msgid ""
+"You may enter a description here for your reference. Description will appear "
+"in the "Interfaces Assign" select lists."
+msgstr ""ã“ã“ã«å‚照用ã®èª¬æ˜Žæ–‡ã‚’入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"説明「インターフェイスã¯ã€å‰²ã‚Šå½“ã¦ã€é¸æŠžãƒªã‚¹ãƒˆã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:526
+#: usr/local/www/interfaces_ppps_edit.php:527
+#: usr/local/www/interfaces_ppps_edit.php:533
+#: usr/local/www/interfaces_ppps_edit.php:531
+#: usr/local/www/interfaces_ppps_edit.php:531
+msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks"
+msgstr "注æ„:GSMãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨CDMAãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã®#777ãŸã‚通常*99"
+
+#: usr/local/www/interfaces_ppps_edit.php:540
+#: usr/local/www/interfaces_ppps_edit.php:541
+#: usr/local/www/interfaces_ppps_edit.php:547
+#: usr/local/www/interfaces_ppps_edit.php:545
+#: usr/local/www/interfaces_ppps_edit.php:545
+msgid "APN number (optional)"
+msgstr "APN番å·ï¼ˆã‚ªãƒ—ション)"
+
+#: usr/local/www/interfaces_ppps_edit.php:543
+#: usr/local/www/interfaces_ppps_edit.php:544
+#: usr/local/www/interfaces_ppps_edit.php:550
+#: usr/local/www/interfaces_ppps_edit.php:548
+#: usr/local/www/interfaces_ppps_edit.php:548
+msgid ""
+"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."
+msgstr ""注: 1デフォルトã¯ä¸Šè¨˜ã®APNを設定ã—ãŸå ´åˆã€ä¸Šè¨˜ã®ãªã„APNを設定ã—ãªã„å ´åˆã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:547
+#: usr/local/www/interfaces_ppps_edit.php:548
+#: usr/local/www/interfaces_ppps_edit.php:554
+#: usr/local/www/interfaces_ppps_edit.php:552
+#: usr/local/www/interfaces_ppps_edit.php:552
+msgid "SIM PIN"
+msgstr "SIMカードã®PIN"
+
+#: usr/local/www/interfaces_ppps_edit.php:554
+#: usr/local/www/interfaces_ppps_edit.php:555
+#: usr/local/www/interfaces_ppps_edit.php:561
+#: usr/local/www/interfaces_ppps_edit.php:559
+#: usr/local/www/interfaces_ppps_edit.php:559
+msgid "SIM PIN wait"
+msgstr "ã®SIM端å­ã‚¦ã‚§ã‚¤ãƒˆ"
+
+#: usr/local/www/interfaces_ppps_edit.php:557
+#: usr/local/www/interfaces_ppps_edit.php:558
+#: usr/local/www/interfaces_ppps_edit.php:564
+#: usr/local/www/interfaces_ppps_edit.php:562
+#: usr/local/www/interfaces_ppps_edit.php:562
+msgid ""
+"Note: Time to wait for SIM to discover network after PIN is sent to SIM "
+"(seconds)."
+msgstr ""注: SIMã¯PINã®å¾Œã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’検出ã™ã‚‹ã®ã‚’å¾…ã¤æ™‚é–“ãŒSIMã«é€ä¿¡ã•ã‚Œã¾ã™ã€ (秒) 。"
+
+#: usr/local/www/interfaces_ppps_edit.php:561
+#: usr/local/www/interfaces_ppps_edit.php:562
+#: usr/local/www/interfaces_ppps_edit.php:568
+#: usr/local/www/interfaces_ppps_edit.php:566
+#: usr/local/www/interfaces_ppps_edit.php:566
+msgid "Init String"
+msgstr "INIT文字列"
+
+#: usr/local/www/interfaces_ppps_edit.php:564
+#: usr/local/www/interfaces_ppps_edit.php:565
+#: usr/local/www/interfaces_ppps_edit.php:571
+#: usr/local/www/interfaces_ppps_edit.php:569
+#: usr/local/www/interfaces_ppps_edit.php:569
+msgid ""
+"Note: Enter the modem initialization string here. Do NOT include the "AT" "
+"string at the beginning of the command. Many modern USB 3G modems don't need "
+"an initialization string."
+msgstr ""注æ„:ã“ã“ã§ã®ãƒ¢ãƒ‡ãƒ ã®åˆæœŸåŒ–文字列を入力ã—ã¦å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。 ã€ã‚³ãƒžãƒ³ãƒ‰ã®å…ˆé ­ã«AT〠"ã¨ã„ã†æ–‡å­—列を。多ãã®ç¾ä»£ã®USB 3Gモデムã¯ã€ 「åˆæœŸåŒ–文字列ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_ppps_edit.php:569
+#: usr/local/www/interfaces_ppps_edit.php:570
+#: usr/local/www/interfaces_ppps_edit.php:576
+#: usr/local/www/interfaces_ppps_edit.php:574
+#: usr/local/www/interfaces_ppps_edit.php:574
+msgid "Connection Timeout"
+msgstr "接続タイムアウト"
+
+#: usr/local/www/interfaces_ppps_edit.php:572
+#: usr/local/www/interfaces_ppps_edit.php:573
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:577
+#: usr/local/www/interfaces_ppps_edit.php:577
+msgid ""
+"Note: Enter timeout in seconds for connection to be established (sec.) "
+"Default is 45 sec."
+msgstr ""注:確立ã™ã‚‹æŽ¥ç¶šã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’秒å˜ä½ã§å…¥åŠ›ã—ã¾ã™ï¼ˆç§’) ã€ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯45秒ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:576
+#: usr/local/www/interfaces_ppps_edit.php:577
+#: usr/local/www/interfaces_ppps_edit.php:583
+#: usr/local/www/interfaces_ppps_edit.php:581
+#: usr/local/www/interfaces_ppps_edit.php:581
+msgid "Uptime Logging"
+msgstr "稼åƒæ™‚é–“ã®ãƒ­ã‚°"
+
+#: usr/local/www/interfaces_ppps_edit.php:578
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:585
+#: usr/local/www/interfaces_ppps_edit.php:583
+#: usr/local/www/interfaces_ppps_edit.php:583
+msgid "Enable persistent logging of connection uptime."
+msgstr "接続ã®ã‚¢ãƒƒãƒ—タイムã®æ°¸ç¶šçš„ãªãƒ­ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:580
+#: usr/local/www/interfaces_ppps_edit.php:586
+#: usr/local/www/interfaces_ppps_edit.php:584
+#: usr/local/www/interfaces_ppps_edit.php:584
+msgid ""
+"This option causes cumulative uptime to be recorded and displayed on the "
+"Status Interfaces page."
+msgstr "ステータスInterfacesページ"ã“ã®ã‚ªãƒ—ションを記録ã—ã«è¡¨ç¤ºã•ã‚Œã‚‹ç´¯ç©ç¨¼åƒæ™‚é–“ã®åŽŸå› ã¨ãªã‚‹ã€ 。"
+
+#: usr/local/www/interfaces_ppps_edit.php:591
+#: usr/local/www/interfaces_ppps_edit.php:592
+#: usr/local/www/interfaces_ppps_edit.php:598
+#: usr/local/www/interfaces_ppps_edit.php:596
+#: usr/local/www/interfaces_ppps_edit.php:596
+msgid "Configure a NULL Service name"
+msgstr "NULLã®ã‚µãƒ¼ãƒ“スåを設定ã™ã‚‹"
+
+#: usr/local/www/interfaces_ppps_edit.php:592
+#: usr/local/www/interfaces_ppps_edit.php:593
+#: usr/local/www/interfaces_ppps_edit.php:599
+#: usr/local/www/interfaces_ppps_edit.php:597
+#: usr/local/www/interfaces_ppps_edit.php:597
+msgid ""
+"Hint: this field can usually be left empty. Service name will not be "
+"configured if this field is empty. Check the "Configure NULL" box to "
+"configure a blank Service name."
+msgstr ""ヒント:ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯é€šå¸¸ã€ç©ºã®ã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒã§ãるサービスåã¯ã•ã‚Œã¾ã›ã‚“。 「ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒç©ºã®å ´åˆã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ 「ブランクサービスåを設定ã™ã‚‹ã«ã¯ã€ 「設定NULLã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102
+#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102
+#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103
+#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105
+#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/interfaces_ppps_edit.php:657 usr/local/www/diag_ipsec.php:105
+msgid "Local IP"
+msgstr "ローカルIP"
+
+#: usr/local/www/interfaces_ppps_edit.php:667
+#: usr/local/www/interfaces_ppps_edit.php:668
+#: usr/local/www/interfaces_ppps_edit.php:674
+#: usr/local/www/interfaces_ppps_edit.php:672
+#: usr/local/www/interfaces_ppps_edit.php:672
+msgid "IP Address OR Hostname"
+msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆå"
+
+#: usr/local/www/interfaces_ppps_edit.php:678
+#: usr/local/www/interfaces_ppps_edit.php:679
+#: usr/local/www/interfaces_ppps_edit.php:685
+#: usr/local/www/interfaces_ppps_edit.php:683
+#: usr/local/www/interfaces_ppps_edit.php:683
+msgid "Dial On Demand"
+msgstr "ダイヤルオンデマンド"
+
+#: usr/local/www/interfaces_ppps_edit.php:680
+#: usr/local/www/interfaces_ppps_edit.php:681
+#: usr/local/www/interfaces_ppps_edit.php:687
+#: usr/local/www/interfaces_ppps_edit.php:685
+#: usr/local/www/interfaces_ppps_edit.php:685
+msgid "Enable Dial-on-Demand mode"
+msgstr "ダイヤルオンデマンドモードを有効ã«ã™ã‚‹"
+
+#: usr/local/www/interfaces_ppps_edit.php:681
+#: usr/local/www/interfaces_ppps_edit.php:682
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/interfaces_ppps_edit.php:686
+#: usr/local/www/interfaces_ppps_edit.php:686
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode. Do NOT "
+"enable if you want your link to be always up. The interface is configured, "
+"but the actual connection of the link is delayed until qualifying outgoing "
+"traffic is detected."
+msgstr ""ã“ã®ã‚ªãƒ—ションã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã§å‹•ä½œã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ãªã„ã€ã‚ãªãŸã®ãƒªãƒ³ã‚¯ã¯å¸¸ã«æœ€æ–°ã«ã—ãŸã„å ´åˆã¯ã€æœ‰åŠ¹ã«ã—ã¾ã™ã€‚インターフェイスã¯ã€è¨­å®šã•ã‚Œã¦ã„ã‚‹ã€ãŒã€ãƒªãƒ³ã‚¯ã®å®Ÿéš›ã®æŽ¥ç¶šã¯ã€ç™ºä¿¡äºˆé¸ã¾ã§é…延ã•ã‚Œã‚‹ã€Œãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¤œå‡ºã•ã‚ŒãŸã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:686
+#: usr/local/www/interfaces_ppps_edit.php:687
+#: usr/local/www/interfaces_ppps_edit.php:693
+#: usr/local/www/interfaces_ppps_edit.php:691
+#: usr/local/www/interfaces_ppps_edit.php:691
+msgid "Idle Timeout"
+msgstr "アイドルタイムアウト"
+
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/interfaces_ppps_edit.php:689
+#: usr/local/www/interfaces_ppps_edit.php:695
+#: usr/local/www/interfaces_ppps_edit.php:693
+#: usr/local/www/interfaces_ppps_edit.php:693
+msgid "(seconds) Default is 0, which disables the timeout feature."
+msgstr "(秒)デフォルトã¯ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆæ©Ÿèƒ½ã‚’無効ã«ã—〠0ã§ã‚る。"
+
+#: usr/local/www/interfaces_ppps_edit.php:689
+#: usr/local/www/interfaces_ppps_edit.php:690
+#: usr/local/www/interfaces_ppps_edit.php:696
+#: usr/local/www/interfaces_ppps_edit.php:694
+#: usr/local/www/interfaces_ppps_edit.php:694
+msgid ""
+"If no incoming or outgoing packets are transmitted for the entered number of "
+"seconds the connection is brought down."
+msgstr "秒ã€ç€ä¿¡ã¾ãŸã¯ç™ºä¿¡ãƒ‘ケットãŒå…¥åŠ›ã—ãŸæ•°å€¤ã®ãŸã‚ã«é€ä¿¡ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ŒæŽ¥ç¶šãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„る。"
+
+#: usr/local/www/interfaces_ppps_edit.php:690
+#: usr/local/www/interfaces_ppps_edit.php:691
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:695
+#: usr/local/www/interfaces_ppps_edit.php:695
+msgid ""
+"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd "
+"goes back into dial-on-demand mode. Otherwise, the interface is brought down "
+"and all associated routes removed."
+msgstr "「アイドルタイムアウトãŒç™ºç”Ÿã™ã‚‹ã¨ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã‚ªãƒ—ションãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ MPDã¯ã€Œãƒãƒƒã‚¯ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒãƒ€ã‚¦ãƒ³ã—〠"ãŠã‚ˆã³é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒ«ãƒ¼ãƒˆãŒå‰Šé™¤ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:694
+#: usr/local/www/vpn_openvpn_client.php:787
+#: usr/local/www/vpn_openvpn_server.php:1077
+#: usr/local/www/vpn_openvpn_server.php:1219
+#: usr/local/www/vpn_openvpn_client.php:792
+#: usr/local/www/interfaces_ppps_edit.php:695
+#: usr/local/www/vpn_openvpn_server.php:1261
+#: usr/local/www/vpn_openvpn_client.php:838
+#: usr/local/www/vpn_openvpn_client.php:857
+#: usr/local/www/interfaces_ppps_edit.php:701
+#: usr/local/www/vpn_openvpn_server.php:1288
+#: usr/local/www/interfaces_ppps_edit.php:699
+#: usr/local/www/vpn_openvpn_client.php:857
+#: usr/local/www/interfaces_ppps_edit.php:699
+#: usr/local/www/vpn_openvpn_server.php:1288
+msgid "Compression"
+msgstr "圧縮"
+
+#: usr/local/www/interfaces_ppps_edit.php:696
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:703
+#: usr/local/www/interfaces_ppps_edit.php:701
+#: usr/local/www/interfaces_ppps_edit.php:701
+msgid "Disable vjcomp(compression) (auto-negotiated by default)."
+msgstr "VJCOMP (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:698
+#: usr/local/www/interfaces_ppps_edit.php:704
+#: usr/local/www/interfaces_ppps_edit.php:702
+#: usr/local/www/interfaces_ppps_edit.php:702
+msgid ""
+"This option enables Van Jacobson TCP header compression, which saves several "
+"bytes per TCP data packet. You almost always want this option. This "
+"compression ineffective for TCP connections with enabled modern extensions "
+"like time stamping or SACK, which modify TCP options between sequential "
+"packets."
+msgstr "ãƒã‚¤ãƒˆã‚ãŸã‚Šã®TCPデータパケットã€ã“ã®ã‚ªãƒ—ションã¯ã€ã„ãã¤ã‹ãŒä¿å­˜ã•ã‚Œã¾ã™ãƒ´ã‚¡ãƒ³ãƒ¤ã‚³ãƒ–ソンTCPヘッダー圧縮をå¯èƒ½ã«ã€ 。ã‚ãªãŸã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆã€ã“ã®ã‚ªãƒ—ションãŒæ¬²ã—ã„。シーケンシャル「パケット間ã®TCPオプションを変更ã—ã€ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚„SACKã®ã‚ˆã†ã«ã€ã“ã®ã€Œæœ‰åŠ¹ç¾ä»£ã®æ‹¡å¼µå­ã‚’æŒã¤TCP接続ã®éžåŠ¹çŽ‡åœ§ç¸®ã€ 〠。"
+
+#: usr/local/www/interfaces_ppps_edit.php:703
+#: usr/local/www/interfaces_ppps_edit.php:704
+#: usr/local/www/interfaces_ppps_edit.php:710
+#: usr/local/www/interfaces_ppps_edit.php:708
+#: usr/local/www/interfaces_ppps_edit.php:708
+msgid "TCPmssFix"
+msgstr "TCPmssFix"
+
+#: usr/local/www/interfaces_ppps_edit.php:705
+#: usr/local/www/interfaces_ppps_edit.php:706
+#: usr/local/www/interfaces_ppps_edit.php:712
+#: usr/local/www/interfaces_ppps_edit.php:710
+#: usr/local/www/interfaces_ppps_edit.php:710
+msgid "Disable tcpmssfix (enabled by default)."
+msgstr "(デフォルトã§æœ‰åŠ¹ï¼‰ã‚’無効tcpmssfix 。"
+
+#: usr/local/www/interfaces_ppps_edit.php:706
+#: usr/local/www/interfaces_ppps_edit.php:707
+#: usr/local/www/interfaces_ppps_edit.php:713
+#: usr/local/www/interfaces_ppps_edit.php:711
+#: usr/local/www/interfaces_ppps_edit.php:711
+msgid ""
+"This option causes mpd to adjust incoming and outgoing TCP SYN segments so "
+"that the requested maximum segment size is not greater than the amount "
+"allowed by the interface MTU. This is necessary in many setups to avoid "
+"problems caused by routers that drop ICMP Datagram Too Big messages. Without "
+"these messages, the originating machine sends data, it passes the rogue "
+"router then hits a machine that has an MTU that is not big enough for the "
+"data. Because the IP Don't Fragment option is set, this machine sends an "
+"ICMP Datagram Too Big message back to the originator and drops the packet. "
+"The rogue router drops the ICMP message and the originator never gets to "
+"discover that it must reduce the fragment size or drop the IP Don't Fragment "
+"option from its outgoing data."
+msgstr "「ã“ã‚Œã¯é¿ã‘ã‚‹ãŸã‚ã«ã€å¤šãã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã§å¿…è¦ã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®MTUã§è¨±å¯ã•ã‚Œã¦ã„る「è¦æ±‚ã•ã‚ŒãŸæœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã¯ã€é‡ã‚ˆã‚Šã‚‚大ãããªã„ã¨ã€ICMPをドロップã—ã€ãƒ«ãƒ¼ã‚¿ã«ã‚ˆã‚‹å•é¡Œã‚’"ã“ã®ã‚ªãƒ—ションã¯ã¨ã¦ã‚‚ç€ä¿¡ãŠã‚ˆã³ç™ºä¿¡TCP SYNセグメントを調整ã™ã‚‹ãŸã‚ã«MPDã‚’èµ·ã“ã™ã€ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ Too Bigメッセージ。ã›ãšã«ã€IPフラグメントオプションãŒè¨­å®šã•ã‚Œã¦ã„ãªã„ãŸã‚ã€ãƒ«ãƒ¼ã‚¿ã—ã€ã€Œãƒ‡ãƒ¼ã‚¿ã®ãŸã‚ã®å分ãªå¤§ãã•ã§ã¯ã‚ã‚Šã¾ã›ã‚“MTUã‚’æŒã¤ãƒžã‚·ãƒ³ã‚’打ã¤ã€ã“れらã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ç™ºä¿¡æ©ŸãŒãƒ‡ãƒ¼ã‚¿ã‚’é€ä¿¡ã—ã€ãã‚ŒãŒä¸æ­£ã«åˆæ ¼ã€ ã€ã“ã®ãƒžã‚·ãƒ³ã¯é€ä¿¡ã—ã¾ã™ã€ŒICMPデータグラムéŽå¤§ãƒãƒƒã‚¯ç™ºä¿¡ã¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã¯ãƒ‘ケットをドロップã—ã¾ã™ã€‚ 「ä¸æ­£ãªãƒ«ãƒ¼ã‚¿ã¯ã€ ICMPメッセージを削除ã—ã€ç™ºä¿¡è€…ã¯ã“ã¨ã‚’å¾—ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“"ãã‚Œã¯ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã‚’減らã™ã‹ã€ã¾ãŸã¯IPãŒãã®ç™ºä¿¡ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰"オプションを断片化ã—ãªã„ã§ãã ã•ã„削除ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’発見。"
+
+#: usr/local/www/interfaces_ppps_edit.php:714
+#: usr/local/www/interfaces_ppps_edit.php:715
+#: usr/local/www/interfaces_ppps_edit.php:721
+#: usr/local/www/interfaces_ppps_edit.php:719
+#: usr/local/www/interfaces_ppps_edit.php:719
+msgid "ShortSeq"
+msgstr "ShortSeq"
+
+#: usr/local/www/interfaces_ppps_edit.php:716
+#: usr/local/www/interfaces_ppps_edit.php:717
+#: usr/local/www/interfaces_ppps_edit.php:723
+#: usr/local/www/interfaces_ppps_edit.php:721
+#: usr/local/www/interfaces_ppps_edit.php:721
+msgid "Disable shortseq (auto-negotiated by default)."
+msgstr "shortseqを(デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ç„¡åŠ¹ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:717
+#: usr/local/www/interfaces_ppps_edit.php:718
+#: usr/local/www/interfaces_ppps_edit.php:724
+#: usr/local/www/interfaces_ppps_edit.php:722
+#: usr/local/www/interfaces_ppps_edit.php:722
+msgid ""
+"This option is only meaningful if multi-link PPP is negotiated. It "
+"proscribes shorter multi-link fragment headers, saving two bytes on every "
+"frame. It is not necessary to disable this for connections that are not "
+"multi-link."
+msgstr "「マルãƒãƒªãƒ³ã‚¯PPPãŒãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯æ„味ãŒã‚ã‚Šã¾ã™ã€‚ãれ㯠"ã™ã¹ã¦ã®ä¸Šã®2ãƒã‚¤ãƒˆç¯€ç´„短ã„マルãƒãƒªãƒ³ã‚¯ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãƒ˜ãƒƒãƒ€ã‚’ã‚‚ç¦æ­¢ã€ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã‚’。ãã‚Œã¯ãªã„接続ã®ãŸã‚ã«ã“れを無効ã«ã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“"マルãƒãƒªãƒ³ã‚¯ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:722
+#: usr/local/www/interfaces_ppps_edit.php:723
+#: usr/local/www/interfaces_ppps_edit.php:729
+#: usr/local/www/interfaces_ppps_edit.php:727
+#: usr/local/www/interfaces_ppps_edit.php:727
+msgid "ACFComp"
+msgstr "ACFComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:724
+#: usr/local/www/interfaces_ppps_edit.php:725
+#: usr/local/www/interfaces_ppps_edit.php:731
+#: usr/local/www/interfaces_ppps_edit.php:729
+#: usr/local/www/interfaces_ppps_edit.php:729
+msgid "Disable acfcomp (compression) (auto-negotiated by default)."
+msgstr "acfcomp (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:725
+#: usr/local/www/interfaces_ppps_edit.php:726
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:730
+#: usr/local/www/interfaces_ppps_edit.php:730
+msgid ""
+"Address and control field compression. This option only applies to "
+"asynchronous link types. It saves two bytes per frame."
+msgstr "「アドレスãŠã‚ˆã³åˆ¶å¾¡ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®åœ§ç¸®ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€ã«é©ç”¨ã•ã‚Œã€ã€ŒéžåŒæœŸãƒªãƒ³ã‚¯ã‚¿ã‚¤ãƒ—。ã“ã‚Œã¯ã€ãƒ•ãƒ¬ãƒ¼ãƒ ã‚ãŸã‚Š2ãƒã‚¤ãƒˆã‚’ä¿å­˜ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:729
+#: usr/local/www/interfaces_ppps_edit.php:730
+#: usr/local/www/interfaces_ppps_edit.php:736
+#: usr/local/www/interfaces_ppps_edit.php:734
+#: usr/local/www/interfaces_ppps_edit.php:734
+msgid "ProtoComp"
+msgstr "ProtoComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:731
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:738
+#: usr/local/www/interfaces_ppps_edit.php:736
+#: usr/local/www/interfaces_ppps_edit.php:736
+msgid "Disable protocomp (compression) (auto-negotiated by default)."
+msgstr "protocomp (圧縮) (デフォルトã§ã¯ã‚ªãƒ¼ãƒˆãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰ã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:733
+#: usr/local/www/interfaces_ppps_edit.php:739
+#: usr/local/www/interfaces_ppps_edit.php:737
+#: usr/local/www/interfaces_ppps_edit.php:737
+msgid ""
+"Protocol field compression. This option saves one byte per frame for most "
+"frames."
+msgstr "フレーム「プロトコルフィールド圧縮。ã“ã®ã‚ªãƒ—ションã¯ã€ã»ã¨ã‚“ã©ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã‚ãŸã‚Š1ãƒã‚¤ãƒˆã‚’節約ã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/interfaces_ppps_edit.php:746
+#: usr/local/www/interfaces_ppps_edit.php:747
+#: usr/local/www/interfaces_ppps_edit.php:753
+#: usr/local/www/interfaces_ppps_edit.php:750
+#: usr/local/www/interfaces_ppps_edit.php:750
+msgid "Link Parameters"
+msgstr "リンク·パラメータ"
+
+#: usr/local/www/interfaces_ppps_edit.php:753
+#: usr/local/www/interfaces_ppps_edit.php:754
+#: usr/local/www/interfaces_ppps_edit.php:760
+#: usr/local/www/interfaces_ppps_edit.php:757
+#: usr/local/www/interfaces_ppps_edit.php:757
+msgid ""
+"Set ONLY for MLPPP connections and ONLY when links have different bandwidths."
+msgstr "「 MLPPP接続ã«ã®ã¿è¨­å®šã—ã€ãƒªãƒ³ã‚¯ã¯ç•°ãªã‚‹å¸¯åŸŸå¹…ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã®ã¿ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:760
+#: usr/local/www/interfaces_ppps_edit.php:761
+#: usr/local/www/interfaces_ppps_edit.php:767
+#: usr/local/www/interfaces_ppps_edit.php:764
+#: usr/local/www/interfaces_ppps_edit.php:764
+msgid "MTU will default to 1492."
+msgstr "MTUã¯1492ã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:764
+#: usr/local/www/interfaces_ppps_edit.php:765
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:768
+#: usr/local/www/interfaces_ppps_edit.php:768
+msgid "MRU"
+msgstr "MRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:767
+#: usr/local/www/interfaces_ppps_edit.php:774
+#: usr/local/www/interfaces_ppps_edit.php:768
+#: usr/local/www/interfaces_ppps_edit.php:775
+#: usr/local/www/interfaces_ppps_edit.php:781
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:778
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:778
+msgid "will be auto-negotiated by default."
+msgstr "オートãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¨ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:772
+#: usr/local/www/interfaces_ppps_edit.php:778
+#: usr/local/www/interfaces_ppps_edit.php:775
+#: usr/local/www/interfaces_ppps_edit.php:775
+msgid "MRRU"
+msgstr "MRRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:774
+#: usr/local/www/interfaces_ppps_edit.php:775
+#: usr/local/www/interfaces_ppps_edit.php:781
+#: usr/local/www/interfaces_ppps_edit.php:778
+#: usr/local/www/interfaces_ppps_edit.php:778
+msgid "Set ONLY for MLPPP connections."
+msgstr "ONLY MLPPP接続ã«è¨­å®šã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66
+#: usr/local/www/interfaces_qinq.php:66
+msgid ""
+"This QinQ cannot be deleted because it is still being used as an interface."
+msgstr "ãã‚Œã¯ã¾ã ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŸã‚〠「ã“ã‚Œã®QinQを削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_qinq.php:86
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_qinq.php:89 usr/local/www/interfaces_qinq.php:89
+#: usr/local/www/interfaces_qinq_edit.php:39
+msgid "QinQ"
+msgstr "ã®QinQ"
+
+#: usr/local/www/interfaces_qinq.php:117
+#: usr/local/www/interfaces_qinq_edit.php:356
+#: usr/local/www/interfaces_qinq_edit.php:357
+#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121
+#: usr/local/www/interfaces_qinq_edit.php:360
+#: usr/local/www/interfaces_qinq.php:121
+#: usr/local/www/interfaces_qinq_edit.php:360
+msgid "Tag"
+msgstr "ã‚¿ã‚°"
+
+#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119
+#: usr/local/www/interfaces_qinq.php:122 usr/local/www/interfaces_qinq.php:122
+msgid "QinQ members"
+msgstr "QinQã®ãƒ¡ãƒ³ãƒãƒ¼"
+
+#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143
+#: usr/local/www/interfaces_qinq.php:146 usr/local/www/interfaces_qinq.php:146
+msgid "Do you really want to delete this QinQ?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®QinQã®ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154
+#: usr/local/www/interfaces_qinq.php:157 usr/local/www/interfaces_qinq.php:157
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do "
+"not explicitly support it, QinQ tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr "明示的ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„"ã™ã¹ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒ/ NICãŒ802.1Q QinQã®ãŒãªã„カードã§ã¯ã€‚é©åˆ‡ã«ã‚¿ã‚°ä»˜ã‘をサãƒãƒ¼ãƒˆã—ãªã„〠ã€ã®QinQタギングã¯ã¾ã å‹•ä½œã—ã¾ã™ãŒã€ç¸®å°MTUã¯ã€Œå•é¡ŒãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るカードã«ã¤ã„ã¦ã¯ã€ %sãƒãƒ³ãƒ‰ãƒ–ックをå‚ç…§ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/interfaces_qinq_edit.php:84
+#: usr/local/www/interfaces_qinq_edit.php:85
+#: usr/local/www/interfaces_qinq_edit.php:85
+msgid "First level tag cannot be empty."
+msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°ã¯ç©ºã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_qinq_edit.php:86
+#: usr/local/www/interfaces_qinq_edit.php:87
+#: usr/local/www/interfaces_qinq_edit.php:87
+msgid ""
+"You are editing an existing entry and modifying the first level tag is not "
+"allowed."
+msgstr "「既存ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集ã—ã€æœ€åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°ãŒã•ã‚Œã¦ã„ãªã„変更ã—ã¦ã„ã‚‹ã€ã“ã¨ãŒã§ãã¾ã—ãŸã€‚"
+
+#: usr/local/www/interfaces_qinq_edit.php:88
+#: usr/local/www/interfaces_qinq_edit.php:89
+#: usr/local/www/interfaces_qinq_edit.php:89
+msgid ""
+"You are editing an existing entry and modifying the interface is not allowed."
+msgstr "「ã‚ãªãŸã¯ã€æ—¢å­˜ã®ã‚¨ãƒ³ãƒˆãƒªã‚’編集ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒè¨±å¯ã•ã‚Œã¦ã„ãªã„変更ã—ã¦ã„る。"
+
+#: usr/local/www/interfaces_qinq_edit.php:92
+#: usr/local/www/interfaces_qinq_edit.php:93
+#: usr/local/www/interfaces_qinq_edit.php:93
+msgid "QinQ level already exists for this interface, edit it!"
+msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€ãれを編集ã™ã‚‹ãŸã‚ã«QinQã®ãƒ¬ãƒ™ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ï¼"
+
+#: usr/local/www/interfaces_qinq_edit.php:96
+#: usr/local/www/interfaces_qinq_edit.php:97
+#: usr/local/www/interfaces_qinq_edit.php:97
+msgid ""
+"A normal VLAN exists with this tag please remove it to use this tag for QinQ "
+"first level."
+msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã€Œæ­£å¸¸ãªVLANã¯ã€ã“ã®ã‚¿ã‚°ã«å­˜åœ¨ã—ã€ãã‚ŒãŒQinQã®ãŸã‚ã«ã€ã“ã®ã‚¿ã‚°ã‚’使用ã™ã‚‹ãŸã‚ã«å‰Šé™¤ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/interfaces_qinq_edit.php:123
+#: usr/local/www/interfaces_qinq_edit.php:133
+#: usr/local/www/interfaces_qinq_edit.php:124
+#: usr/local/www/interfaces_qinq_edit.php:134
+#: usr/local/www/interfaces_qinq_edit.php:124
+#: usr/local/www/interfaces_qinq_edit.php:134
+msgid "Tags can contain only numbers or a range in format #-#."
+msgstr "ã‚¿ã‚°ã¯ã€æ•°å­—ã‚„å½¢å¼ã®ç¯„囲をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/interfaces_qinq_edit.php:193
+#: usr/local/www/interfaces_qinq_edit.php:194
+#: usr/local/www/interfaces_qinq_edit.php:197
+#: usr/local/www/interfaces_qinq_edit.php:197
+msgid "QinQ VLANs group"
+msgstr "QinQã®VLANã®ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: usr/local/www/interfaces_qinq_edit.php:269
+#: usr/local/www/interfaces_qinq_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:273
+#: usr/local/www/interfaces_qinq_edit.php:272
+#: usr/local/www/interfaces_qinq_edit.php:272
+msgid "members"
+msgstr "メンãƒãƒ¼"
+
+#: usr/local/www/interfaces_qinq_edit.php:273
+#: usr/local/www/interfaces_qinq_edit.php:274
+#: usr/local/www/interfaces_qinq_edit.php:277
+#: usr/local/www/interfaces_qinq_edit.php:276
+#: usr/local/www/interfaces_qinq_edit.php:276
+msgid "detail"
+msgstr "詳細"
+
+#: usr/local/www/interfaces_qinq_edit.php:285
+#: usr/local/www/interfaces_qinq_edit.php:286
+#: usr/local/www/interfaces_qinq_edit.php:289
+#: usr/local/www/interfaces_qinq_edit.php:289
+msgid "Interface QinQ Edit"
+msgstr "インタフェースã®QinQ編集"
+
+#: usr/local/www/interfaces_qinq_edit.php:305
+#: usr/local/www/interfaces_qinq_edit.php:306
+#: usr/local/www/interfaces_qinq_edit.php:309
+#: usr/local/www/interfaces_qinq_edit.php:309
+msgid "Only QinQ capable interfaces will be shown."
+msgstr "唯一ã®QinQãŒå¯èƒ½ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_qinq_edit.php:308
+#: usr/local/www/interfaces_qinq_edit.php:309
+#: usr/local/www/interfaces_qinq_edit.php:312
+#: usr/local/www/interfaces_qinq_edit.php:312
+msgid "First level tag"
+msgstr "最åˆã®ãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚°"
+
+#: usr/local/www/interfaces_qinq_edit.php:313
+#: usr/local/www/interfaces_qinq_edit.php:314
+#: usr/local/www/interfaces_qinq_edit.php:317
+#: usr/local/www/interfaces_qinq_edit.php:317
+msgid ""
+"This is the first level VLAN tag. On top of this are stacked the member "
+"VLANs defined below."
+msgstr "「ã“ã‚Œã¯æœ€åˆã®ãƒ¬ãƒ™ãƒ«ã®VLANã‚¿ã‚°ã§ã™ã€‚ãã®ä¸Šã«ç©å±¤ã•ã‚ŒãŸãƒ¡ãƒ³ãƒãƒ¼ã§ã€Œ VLANãŒä»¥ä¸‹ã«å®šç¾©ã€‚"
+
+#: usr/local/www/interfaces_qinq_edit.php:333
+#: usr/local/www/interfaces_qinq_edit.php:334
+#: usr/local/www/interfaces_qinq_edit.php:337
+#: usr/local/www/interfaces_qinq_edit.php:337
+msgid ""
+"Adds interface to QinQ interface groups so you can write filter rules easily."
+msgstr "ã‚ãªãŸãŒç°¡å˜ã«ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ 「 QinQサブインターフェイスグループã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_qinq_edit.php:350
+#: usr/local/www/interfaces_qinq_edit.php:351
+#: usr/local/www/interfaces_qinq_edit.php:354
+#: usr/local/www/interfaces_qinq_edit.php:354
+msgid ""
+"You can specify ranges in the input below. The format is pretty simple i.e "
+"9-100 or 10.20..."
+msgstr "「ã‚ãªãŸã¯ã€ä»¥ä¸‹ã®å…¥åŠ›ã§ç¯„囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å½¢å¼ã€ã™ãªã‚ã¡éžå¸¸ã«ç°¡å˜ã§ã™ã€ 9ã‹ã‚‰100ã¾ãŸã¯10.20ã‚’..."
+
+#: usr/local/www/interfaces_wireless.php:63
+#: usr/local/www/interfaces_wireless.php:65
+#: usr/local/www/interfaces_wireless.php:65
+msgid ""
+"This wireless clone cannot be deleted because it is assigned as an interface."
+msgstr "ãã‚Œã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ã®ã§ã€ã€Œã“ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_wireless.php:124
+#: usr/local/www/interfaces_wireless.php:125
+#: usr/local/www/interfaces_wireless.php:127
+#: usr/local/www/interfaces_wireless.php:127
+msgid "Do you really want to delete this wireless clone?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/interfaces_wireless.php:135
+#: usr/local/www/interfaces_wireless.php:136
+#: usr/local/www/interfaces_wireless.php:138
+#: usr/local/www/interfaces_wireless.php:138
+msgid ""
+"Here you can configure clones of wireless interfaces, which can be assigned "
+"as separate independent interfaces. Only available on wireless chipsets that "
+"support this, with limitations on the number that can be created in each "
+"mode."
+msgstr "別々ã®ç‹¬ç«‹ã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¨ã—ã¦ã€Œã“ã“ã§ã¯ã€å‰²ã‚Šå½“ã¦å¯èƒ½ãªç„¡ç·šã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’ã€è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。モードã€ãã‚Œãžã‚Œã«ä½œæˆã§ãã‚‹æ•°ã«ã¯åˆ¶é™ä»˜ãã§ã€ã“れをサãƒãƒ¼ãƒˆã™ã‚‹ã€ã¨ç„¡ç·šãƒãƒƒãƒ—セットã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_wireless_edit.php:116
+#: usr/local/www/interfaces_wireless_edit.php:118
+#: usr/local/www/interfaces_wireless_edit.php:118
+msgid ""
+"This wireless clone cannot be modified because it is still assigned as an "
+"interface."
+msgstr "インターフェース「ãã‚Œã¯ã¾ã ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ç„¡ç·šã‚¯ãƒ­ãƒ¼ãƒ³ã¯å¤‰æ›´ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_wireless_edit.php:118
+#: usr/local/www/interfaces_wireless_edit.php:120
+#: usr/local/www/interfaces_wireless_edit.php:120
+msgid ""
+"Use the configuration page for the assigned interface to change the mode."
+msgstr "ã€ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã«ã¯ã€å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®è¨­å®šãƒšãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces_wireless_edit.php:123
+#: usr/local/www/interfaces_wireless_edit.php:125
+#: usr/local/www/interfaces_wireless_edit.php:125
+#, php-format
+msgid ""
+"Error creating interface with mode %1$s. The %2$s interface may not support "
+"creating more clones with the selected mode."
+msgstr "é¸æŠžã—ãŸãƒ¢ãƒ¼ãƒ‰ã§ã‚ˆã‚Šå¤šãã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹ã€ãƒ¢ãƒ¼ãƒ‰ã¯%1$sã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ %2$sインタフェースã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã€ 。"
+
+#: usr/local/www/interfaces_wireless_edit.php:128
+#: usr/local/www/interfaces_wireless_edit.php:130
+#: usr/local/www/interfaces_wireless_edit.php:130
+#, php-format
+msgid "Created with id %s"
+msgstr "IDã®%sを使用ã—ã¦ä½œæˆ"
+
+#: usr/local/www/interfaces_wireless_edit.php:131
+#: usr/local/www/interfaces_wireless_edit.php:133
+#: usr/local/www/interfaces_wireless_edit.php:133
+msgid "Created without id"
+msgstr "IDãªã—ã§ä½œæˆ"
+
+#: usr/local/www/interfaces_wireless_edit.php:156
+#: usr/local/www/interfaces_wireless_edit.php:158
+#: usr/local/www/interfaces_wireless_edit.php:158
+msgid "Wireless clone configuration"
+msgstr "無線クローン構æˆ"
+
+#: usr/local/www/load_balancer_monitor.php:72
+#: usr/local/www/load_balancer_monitor.php:72
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"pool."
+msgstr "プール「ãã‚Œã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/load_balancer_monitor.php:102
+#: usr/local/www/load_balancer_relay_protocol.php:114
+#: usr/local/www/load_balancer_setting.php:111
+#: usr/local/www/load_balancer_setting.php:110
+#: usr/local/www/load_balancer_monitor.php:100
+#: usr/local/www/load_balancer_relay_protocol.php:112
+#: usr/local/www/load_balancer_relay_protocol.php:112
+#: usr/local/www/load_balancer_setting.php:110
+#: usr/local/www/load_balancer_monitor.php:100
+msgid "The load balancer configuration has been changed"
+msgstr "ロードãƒãƒ©ãƒ³ã‚µè¨­å®šãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97
+#: usr/local/www/vpn_pppoe.php:98 usr/local/www/vpn_pppoe.php:98
+msgid "The PPPoE entry list has been changed"
+msgstr "PPPoEã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒªã‚¹ãƒˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/vpn_pppoe.php:103
+#: usr/local/www/services_captiveportal_zones.php:54
+#: usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/services_captiveportal_zones.php:55
+#: usr/local/www/vpn_pppoe.php:105 usr/local/www/vpn_pppoe.php:105
+#: usr/local/www/services_captiveportal_zones.php:55
+msgid "Number of users"
+msgstr "ユーザー数"
+
+#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144
+#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145
+#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146
+#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146
+msgid "add a new pppoe instance"
+msgstr "æ–°ã—ã„ã®PPPoEインスタンスを追加"
+
+#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132
+#: usr/local/www/vpn_pppoe.php:133 usr/local/www/vpn_pppoe.php:133
+msgid "edit PPPoE instance"
+msgstr "編集ã®PPPoEインスタンス"
+
+#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133
+#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134
+msgid ""
+"Do you really want to delete this entry? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr " (例ãˆã°ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ï¼‰ãŒç„¡åŠ¹ã«ãªã‚‹ã€Œæœ¬å½“ã«ï¼Ÿã¾ã ãれを使用ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒã—ã¾ã™ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã‹"ï¼"
+
+#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133
+#: usr/local/www/vpn_pppoe.php:134 usr/local/www/vpn_pppoe.php:134
+msgid "delete pppoe instance"
+msgstr "ã®PPPoEインスタンスを削除"
+
+#: usr/local/www/load_balancer_monitor_edit.php:66
+#: usr/local/www/load_balancer_monitor_edit.php:66
+msgid "Load Balancer: Monitor:"
+msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ¢ãƒ‹ã‚¿ï¼š"
+
+#: usr/local/www/load_balancer_monitor_edit.php:95
+#: usr/local/www/load_balancer_monitor_edit.php:95
+msgid "This monitor name has already been used. Monitor names must be unique."
+msgstr "ã“ã®ãƒ¢ãƒ‹ã‚¿åãŒæ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚モニターåã¯ä¸€æ„ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_monitor_edit.php:98
+#: usr/local/www/load_balancer_pool_edit.php:86
+#: usr/local/www/load_balancer_virtual_server_edit.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:127
+#: usr/local/www/load_balancer_relay_protocol_edit.php:89
+#: usr/local/www/load_balancer_relay_protocol_edit.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:127
+#: usr/local/www/load_balancer_monitor_edit.php:98
+#: usr/local/www/load_balancer_pool_edit.php:86
+msgid "You cannot use spaces in the 'name' field."
+msgstr "ã‚ãªãŸã¯ã€ 「åå‰ã€æ¬„ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_monitor_edit.php:112
+#: usr/local/www/services_dhcp_edit.php:118
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dnsmasq_edit.php:86
+#: usr/local/www/services_dhcpv6_edit.php:117
+#: usr/local/www/services_dhcp_edit.php:120
+#: usr/local/www/services_dhcpv6_edit.php:120
+#: usr/local/www/services_dhcp_edit.php:154
+#: usr/local/www/services_dhcpv6_edit.php:120
+#: usr/local/www/services_dhcp_edit.php:154
+#: usr/local/www/load_balancer_monitor_edit.php:112
+#: usr/local/www/services_dnsmasq_edit.php:86
+msgid "The hostname can only contain the characters A-Z, 0-9 and '-'."
+msgstr "' -'ホストåã¯æ–‡å­—ã ã‘ã€A〜Zã€0〜9ã¨ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_monitor_edit.php:118
+#: usr/local/www/load_balancer_monitor_edit.php:118
+msgid "HTTP(s) codes must be from RFC2616."
+msgstr "HTTP(S )コードã¯RFC2616ã‹ã‚‰ã®ã‚‚ã®ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_monitor_edit.php:122
+#: usr/local/www/load_balancer_monitor_edit.php:122
+msgid "The path to monitor must be set."
+msgstr "監視ã™ã‚‹ãŸã‚ã®ãƒ‘スを設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_monitor_edit.php:145
+#: usr/local/www/load_balancer_monitor_edit.php:145
+#, php-format
+msgid "modified '%s' monitor:"
+msgstr "修正ã•ã‚ŒãŸã€Œ %s'モニター:"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:197
+msgid "ICMP"
+msgstr "ICMP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:268
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/system_advanced_admin.php:311
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:266
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/system_advanced_admin.php:311
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:266
+msgid "HTTP"
+msgstr "HTTP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:301
+#: usr/local/www/system_advanced_admin.php:314
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:299
+#: usr/local/www/system_advanced_admin.php:314
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:299
+msgid "HTTPS"
+msgstr "HTTPS"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:335
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:333
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:333
+msgid "Send/Expect"
+msgstr "センド/期待"
+
+#: usr/local/www/load_balancer_monitor_edit.php:232
+#: usr/local/www/load_balancer_monitor_edit.php:230
+#: usr/local/www/load_balancer_monitor_edit.php:230
+msgid "Edit Load Balancer - Monitor entry"
+msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - エントリを監視"
+
+#: usr/local/www/load_balancer_monitor_edit.php:272
+#: usr/local/www/load_balancer_monitor_edit.php:305
+#: usr/local/www/load_balancer_monitor_edit.php:270
+#: usr/local/www/load_balancer_monitor_edit.php:303
+#: usr/local/www/load_balancer_monitor_edit.php:270
+#: usr/local/www/load_balancer_monitor_edit.php:303
+msgid "Path"
+msgstr "パス"
+
+#: usr/local/www/load_balancer_monitor_edit.php:278
+#: usr/local/www/load_balancer_monitor_edit.php:311
+#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90
+#: usr/local/www/services_dnsmasq.php:243
+#: usr/local/www/services_dnsmasq_edit.php:141
+#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89
+#: usr/local/www/services_rfc2136_edit.php:169
+#: usr/local/www/services_dnsmasq_edit.php:196
+#: usr/local/www/services_dnsmasq_edit.php:237
+#: usr/local/www/services_unbound.php:279
+#: usr/local/www/services_dnsmasq.php:244
+#: usr/local/www/services_dnsmasq_edit.php:197
+#: usr/local/www/services_dnsmasq_edit.php:238
+#: usr/local/www/load_balancer_monitor_edit.php:276
+#: usr/local/www/load_balancer_monitor_edit.php:309
+#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117
+#: usr/local/www/diag_traceroute.php:93 usr/local/www/services_dnsmasq.php:269
+#: usr/local/www/diag_traceroute.php:63 usr/local/www/diag_traceroute.php:99
+#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97
+#: usr/local/www/services_dnsmasq.php:282
+#: usr/local/www/services_dnsmasq.php:346 usr/local/www/diag_testport.php:60
+#: usr/local/www/diag_testport.php:117 usr/local/www/diag_traceroute.php:63
+#: usr/local/www/diag_traceroute.php:99
+#: usr/local/www/load_balancer_monitor_edit.php:276
+#: usr/local/www/load_balancer_monitor_edit.php:309
+#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97
+#: usr/local/www/services_dnsmasq_edit.php:197
+#: usr/local/www/services_dnsmasq_edit.php:238
+#: usr/local/www/services_rfc2136_edit.php:169
+#: usr/local/www/services_dnsmasq.php:346
+msgid "Host"
+msgstr "ホスト"
+
+#: usr/local/www/load_balancer_monitor_edit.php:280
+#: usr/local/www/load_balancer_monitor_edit.php:313
+#: usr/local/www/load_balancer_monitor_edit.php:278
+#: usr/local/www/load_balancer_monitor_edit.php:311
+#: usr/local/www/load_balancer_monitor_edit.php:278
+#: usr/local/www/load_balancer_monitor_edit.php:311
+msgid "Hostname for Host: header if needed."
+msgstr "ホストã®ãƒ›ã‚¹ãƒˆå:ヘッダを必è¦ã«å¿œã˜ã¦ã€‚"
+
+#: usr/local/www/load_balancer_monitor_edit.php:284
+#: usr/local/www/load_balancer_monitor_edit.php:317
+#: usr/local/www/load_balancer_monitor_edit.php:282
+#: usr/local/www/load_balancer_monitor_edit.php:315
+#: usr/local/www/load_balancer_monitor_edit.php:282
+#: usr/local/www/load_balancer_monitor_edit.php:315
+msgid "HTTP Code"
+msgstr "HTTPコード"
+
+#: usr/local/www/load_balancer_monitor_edit.php:339
+#: usr/local/www/load_balancer_monitor_edit.php:337
+#: usr/local/www/load_balancer_monitor_edit.php:337
+msgid "Send string"
+msgstr "文字列をé€ä¿¡"
+
+#: usr/local/www/load_balancer_monitor_edit.php:345
+#: usr/local/www/load_balancer_monitor_edit.php:343
+#: usr/local/www/load_balancer_monitor_edit.php:343
+msgid "Expect string"
+msgstr "文字列を期待ã™ã‚‹"
+
+#: usr/local/www/load_balancer_pool_edit.php:65
+#: usr/local/www/load_balancer_pool_edit.php:65
+msgid "Load Balancer: Pool:"
+msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒ—ール:"
+
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:76
+msgid "Server List"
+msgstr "サーãƒãƒ¼ãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/load_balancer_pool_edit.php:83
+#: usr/local/www/load_balancer_pool_edit.php:83
+msgid "This pool name has already been used. Pool names must be unique."
+msgstr "ã“ã®ãƒ—ールåãŒæ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚プールåã¯ä¸€æ„ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:89
+#: usr/local/www/load_balancer_virtual_server_edit.php:92
+msgid "The port must be an integer between 1 and 65535."
+msgstr "ãƒãƒ¼ãƒˆã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:93
+#: usr/local/www/load_balancer_pool_edit.php:93
+msgid "The retry value must be an integer between 1 and 65535."
+msgstr "å†è©¦è¡Œå€¤ã¯1 〜65535ã®é–“ã®æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:98
+#, php-format
+msgid "%s is not a valid IP address (in "enabled" list)."
+msgstr "%sã¯ï¼ˆ 「有効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åŠ¹ãªIPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:105
+#, php-format
+msgid "%s is not a valid IP address (in "disabled" list)."
+msgstr "%sã¯ï¼ˆ 「無効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åŠ¹ãªIPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:114
+#: usr/local/www/load_balancer_pool_edit.php:120
+#: usr/local/www/load_balancer_pool_edit.php:120
+msgid "Invalid monitor chosen."
+msgstr "無効ãªãƒ¢ãƒ‹ã‚¿ãŒé¸æŠžã—ãŸã€‚"
+
+#: usr/local/www/load_balancer_pool_edit.php:121
+#: usr/local/www/load_balancer_pool_edit.php:127
+#: usr/local/www/load_balancer_pool_edit.php:127
+#, php-format
+msgid " modified '%s' pool:"
+msgstr "修正ã•ã‚ŒãŸã€Œ %s'プール:"
+
+#: usr/local/www/load_balancer_pool_edit.php:178
+#: usr/local/www/load_balancer_pool_edit.php:186
+#: usr/local/www/load_balancer_pool_edit.php:184
+#: usr/local/www/load_balancer_pool_edit.php:184
+msgid "Add/edit Load Balancer - Pool entry"
+msgstr "追加/編集ロードãƒãƒ©ãƒ³ã‚µ - プールエントリ"
+
+#: usr/local/www/load_balancer_pool_edit.php:190
+#: usr/local/www/load_balancer_pool_edit.php:198
+#: usr/local/www/load_balancer_pool_edit.php:196
+#: usr/local/www/load_balancer_pool_edit.php:196
+msgid "Load Balance"
+msgstr "è² è·å¹³è¡¡"
+
+#: usr/local/www/load_balancer_pool_edit.php:191
+#: usr/local/www/load_balancer_pool_edit.php:199
+#: usr/local/www/load_balancer_pool_edit.php:197
+#: usr/local/www/load_balancer_pool_edit.php:197
+msgid "Manual Failover"
+msgstr "手動フェイルオーãƒãƒ¼"
+
+#: usr/local/www/load_balancer_pool_edit.php:206
+#: usr/local/www/load_balancer_pool_edit.php:215
+#: usr/local/www/load_balancer_pool_edit.php:213
+#: usr/local/www/load_balancer_pool_edit.php:213
+msgid "This is the port your servers are listening on."
+msgstr "ã“ã‚Œã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒãƒªãƒƒã‚¹ãƒ³ã—ã¦ã„ã‚‹ãƒãƒ¼ãƒˆã§ã™ã€‚"
+
+#: usr/local/www/load_balancer_pool_edit.php:210
+#: usr/local/www/load_balancer_pool_edit.php:227
+#: usr/local/www/load_balancer_pool_edit.php:225
+#: usr/local/www/load_balancer_pool_edit.php:225
+msgid "Retry"
+msgstr "リトライ"
+
+#: usr/local/www/load_balancer_pool_edit.php:213
+#: usr/local/www/load_balancer_pool_edit.php:230
+#: usr/local/www/load_balancer_pool_edit.php:228
+#: usr/local/www/load_balancer_pool_edit.php:228
+msgid ""
+"Optionally specify how many times to retry checking a server before "
+"declaring it down."
+msgstr "ãれを宣言ã™ã‚‹"オプションã§å‰ã«ã‚µãƒ¼ãƒãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã—å†è©¦è¡Œã™ã‚‹å›žæ•°ã‚’指定〠。"
+
+#: usr/local/www/load_balancer_pool_edit.php:220
+#: usr/local/www/load_balancer_pool_edit.php:237
+#: usr/local/www/load_balancer_pool_edit.php:235
+#: usr/local/www/load_balancer_pool_edit.php:235
+msgid "Add item to pool"
+msgstr "プールã«é …目を追加ã™ã‚‹"
+
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/load_balancer_pool_edit.php:255
+#: usr/local/www/load_balancer_pool_edit.php:253
+#: usr/local/www/load_balancer_pool_edit.php:253
+msgid ""
+"Please add a monitor IP address on the monitors tab if you wish to use this "
+"feature."
+msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹å ´åˆã®ãƒ¢ãƒ‹ã‚¿]タブã§ç›£è¦–IPアドレスを追加ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/load_balancer_pool_edit.php:244
+#: usr/local/www/load_balancer_pool_edit.php:261
+#: usr/local/www/load_balancer_pool_edit.php:259
+#: usr/local/www/load_balancer_pool_edit.php:259
+msgid "Server IP Address"
+msgstr "サーãƒã®IPアドレス"
+
+#: usr/local/www/load_balancer_pool_edit.php:247
+#: usr/local/www/load_balancer_pool_edit.php:264
+#: usr/local/www/load_balancer_pool_edit.php:262
+#: usr/local/www/load_balancer_pool_edit.php:262
+msgid "Add to pool"
+msgstr "プールã«è¿½åŠ "
+
+#: usr/local/www/load_balancer_pool_edit.php:254
+#: usr/local/www/load_balancer_pool_edit.php:271
+#: usr/local/www/load_balancer_pool_edit.php:269
+#: usr/local/www/load_balancer_pool_edit.php:269
+msgid "Current Pool Members"
+msgstr "ç¾åœ¨ã®ãƒ—ールメンãƒãƒ¼"
+
+#: usr/local/www/load_balancer_pool_edit.php:264
+#: usr/local/www/load_balancer_pool_edit.php:281
+#: usr/local/www/load_balancer_pool_edit.php:279
+#: usr/local/www/load_balancer_pool_edit.php:279
+msgid "Pool Disabled"
+msgstr "プールãƒãƒªã‚¢ãƒ•ãƒªãƒ¼"
+
+#: usr/local/www/load_balancer_pool_edit.php:277
+#: usr/local/www/load_balancer_pool_edit.php:300
+#: usr/local/www/load_balancer_relay_protocol_edit.php:253
+#: usr/local/www/load_balancer_pool_edit.php:294
+#: usr/local/www/load_balancer_pool_edit.php:317
+#: usr/local/www/load_balancer_relay_protocol_edit.php:251
+#: usr/local/www/load_balancer_pool_edit.php:292
+#: usr/local/www/load_balancer_pool_edit.php:315
+#: usr/local/www/load_balancer_relay_protocol_edit.php:251
+#: usr/local/www/load_balancer_pool_edit.php:292
+#: usr/local/www/load_balancer_pool_edit.php:315
+msgid "Remove"
+msgstr "削除ã™ã‚‹"
+
+#: usr/local/www/load_balancer_pool_edit.php:287
+#: usr/local/www/load_balancer_pool_edit.php:304
+#: usr/local/www/load_balancer_pool_edit.php:302
+#: usr/local/www/load_balancer_pool_edit.php:302
+msgid "Enabled (default)"
+msgstr "有効(デフォルト)"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:61
+#: usr/local/www/load_balancer_virtual_server_edit.php:61
+msgid "Load Balancer: Virtual Server:"
+msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šä»®æƒ³ã‚µãƒ¼ãƒãƒ¼ï¼š"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:261
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/load_balancer_virtual_server_edit.php:250
+#: usr/local/www/load_balancer_virtual_server_edit.php:248
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:248
+#: usr/local/www/load_balancer_relay_protocol.php:100
+msgid "Relay Protocol"
+msgstr "リレー·プロトコル"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:86
+#: usr/local/www/load_balancer_virtual_server_edit.php:86
+msgid ""
+"This virtual server name has already been used. Virtual server names must "
+"be unique."
+msgstr "「ã“ã®ä»®æƒ³ã‚µãƒ¼ãƒãƒ¼åã¯ã™ã§ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚仮想サーãƒãƒ¼åãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€ã§ä¸€æ„ã§ã‚る。"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:95
+#, php-format
+msgid "%s is not a valid IP address."
+msgstr "%sã¯æœ‰åŠ¹ãªIPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:102
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+#, php-format
+msgid "modified '%s' vs:"
+msgstr ": VS修正' %s'"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+#: usr/local/www/load_balancer_virtual_server_edit.php:106
+#: usr/local/www/load_balancer_virtual_server_edit.php:106
+#, php-format
+msgid "created '%s' vs:"
+msgstr "VS作æˆ' %s 〠:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/status_lb_vs.php:56
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/status_lb_vs.php:56
+msgid "Virtual Server"
+msgstr "仮想サーãƒ"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:180
+#: usr/local/www/load_balancer_virtual_server_edit.php:154
+#: usr/local/www/load_balancer_virtual_server_edit.php:152
+#: usr/local/www/load_balancer_virtual_server_edit.php:152
+msgid "Edit Load Balancer - Virtual Server entry"
+msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - 仮想サーãƒãƒ¼ã®ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:198
+#: usr/local/www/load_balancer_virtual_server_edit.php:172
+#: usr/local/www/load_balancer_virtual_server_edit.php:170
+#: usr/local/www/load_balancer_virtual_server_edit.php:170
+msgid ""
+"This is normally the WAN IP address that you would like the server to listen "
+"on. All connections to this IP and port will be forwarded to the pool "
+"cluster."
+msgstr "ã®ã€Œã“ã‚Œã¯é€šå¸¸ã€ã‚µãƒ¼ãƒãƒ¼ãŒå¾…æ©Ÿã™ã‚‹ã‚ˆã†ã«ã—ãŸã„WAN IPアドレスã€ã§ã™ã€‚ã“ã®IPã¨ãƒãƒ¼ãƒˆã¸ã®ã™ã¹ã¦ã®æŽ¥ç¶šãƒ—ールã€ã‚¯ãƒ©ã‚¹ã‚¿ã«è»¢é€ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:205
+#: usr/local/www/load_balancer_virtual_server_edit.php:186
+#: usr/local/www/load_balancer_virtual_server_edit.php:184
+#: usr/local/www/load_balancer_virtual_server_edit.php:184
+msgid ""
+"This is the port that the clients will connect to. All connections to this "
+"port will be forwarded to the pool cluster."
+msgstr "「ã“ã‚Œã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã™ã‚‹ãƒãƒ¼ãƒˆã§ã™ã€‚ã“ã®ã¸ã®ã™ã¹ã¦ã®æŽ¥ç¶šã€ãƒãƒ¼ãƒˆã¯ã€ãƒ—ールã®ã‚¯ãƒ©ã‚¹ã‚¿ã«è»¢é€ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:209
+#: usr/local/www/load_balancer_virtual_server_edit.php:198
+#: usr/local/www/load_balancer_virtual_server_edit.php:196
+#: usr/local/www/load_balancer_virtual_server_edit.php:196
+msgid "Virtual Server Pool"
+msgstr "仮想サーãƒãƒ¼Â·ãƒ—ール"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:212
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/load_balancer_virtual_server_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:220
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+msgid "Please add a pool on the Pools tab to use this feature."
+msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒ—ール]タブã®[プールを追加ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:244
+#: usr/local/www/load_balancer_virtual_server_edit.php:233
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+msgid ""
+"This is the server that clients will be redirected to if *ALL* servers in "
+"the pool are offline."
+msgstr "プールオフラインã«ãªã£ã¦ã„ã‚‹"ã“ã‚Œã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒ*ã§ã®* ALLã®ã‚µãƒ¼ãƒãƒ¼ãŒã‚ã‚Œã°ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã€ã‚µãƒ¼ãƒãƒ¼ã§ã‚る「 。"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:279
+#: usr/local/www/status_captiveportal_test.php:92
+#: usr/local/www/load_balancer_virtual_server_edit.php:268
+#: usr/local/www/status_captiveportal_test.php:93
+#: usr/local/www/load_balancer_virtual_server_edit.php:266
+#: usr/local/www/status_captiveportal_expire.php:92
+#: usr/local/www/status_captiveportal_test.php:94
+#: usr/local/www/load_balancer_virtual_server_edit.php:266
+#: usr/local/www/status_captiveportal_expire.php:92
+#: usr/local/www/status_captiveportal_test.php:94
+msgid "Submit"
+msgstr "æ出ã™ã‚‹"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/load_balancer_virtual_server_edit.php:278
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+msgid ""
+"Don't forget to add a firewall rule for the virtual server/pool after you're "
+"finished setting it up."
+msgstr "ãれを設定終ãˆã€Œã‚ãªãŸãŒã—ã¦ã„ã‚‹ã®å¾Œã«ã€ä»®æƒ³ã‚µãƒ¼ãƒãƒ¼/プールã®ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„〠。"
+
+#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82
+#: usr/local/www/pkg_mgr.php:89
+#, php-format
+msgid "Unable to retrieve package info from %s. Cached data will be used."
+msgstr "%s.ã‹ã‚‰ãƒ‘ッケージ情報をå–å¾—ã§ãã¾ã›ã‚“キャッシュã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85
+#: usr/local/www/pkg_mgr.php:92
+#, php-format
+msgid ""
+"Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr "設定ã€ã¯%1$sã¨é€šä¿¡ã§ãã¾ã›ã‚“。 DNSã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’確èªã—ã¦ãã ã•ã„〠ã€ãŠã‚ˆã³ãã®%2$s ã€æ©Ÿèƒ½ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’æŒã£ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216
+#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243
+#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:140
+#: usr/local/www/pkg_mgr.php:249 usr/local/www/pkg_mgr.php:187
+#: usr/local/www/pkg_mgr.php:253
+msgid "There are currently no packages available for installation."
+msgstr "インストールã®ãŸã‚ã«åˆ©ç”¨å¯èƒ½ãªãƒ‘ッケージãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228
+#: usr/local/www/pkg_mgr.php:231 usr/local/www/pkg_mgr.php:235
+msgid "platform"
+msgstr "プラットフォーム"
+
+#: usr/local/www/pkg_mgr.php:210
+msgid "Do you really want to install this package?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ‘ッケージをインストールã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55
+#: usr/local/www/pkg_mgr_install.php:55
+msgid "Install Package"
+msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«"
+
+#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70
+#: usr/local/www/pkg_mgr_install.php:70
+msgid "Available packages"
+msgstr "利用å¯èƒ½ãªãƒ‘ッケージ"
+
+#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73
+#: usr/local/www/pkg_mgr_install.php:73
+msgid "Installed packages"
+msgstr "インストールã•ã‚ŒãŸãƒ‘ッケージ"
+
+#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74
+#: usr/local/www/pkg_mgr_install.php:74
+msgid "Package Installer"
+msgstr "パッケージインストーラ"
+
+#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134
+#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:128
+#: usr/local/www/pkg_mgr_install.php:128
+msgid "Creating restore point before package installation."
+msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å‰ã«å¾©å…ƒãƒã‚¤ãƒ³ãƒˆã‚’作æˆã™ã‚‹ã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133
+#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142
+#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140
+#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136
+#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136
+msgid "Package deleted."
+msgstr "パッケージãŒå‰Šé™¤ã•ã‚ŒãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148
+#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157
+#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155
+#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151
+#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151
+msgid "Package reinstallation failed."
+msgstr "パッケージã®å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152
+#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161
+#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159
+#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155
+#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155
+msgid "Package reinstalled."
+msgstr "パッケージã«ã¯ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172
+#: usr/local/www/pkg_mgr_install.php:170 usr/local/www/pkg_mgr_install.php:166
+#: usr/local/www/pkg_mgr_install.php:166
+msgid "installation completed."
+msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175
+#: usr/local/www/pkg_mgr_install.php:173 usr/local/www/pkg_mgr_install.php:169
+#: usr/local/www/pkg_mgr_install.php:169
+#, php-format
+msgid "Could not find %s."
+msgstr "%s.ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183
+#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192
+#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189
+#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185
+#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185
+msgid "All packages reinstalled."
+msgstr "ã™ã¹ã¦ã®ãƒ‘ッケージã¯ã€å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204
+#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203
+#: usr/local/www/pkg_mgr_install.php:195 usr/local/www/pkg_mgr_install.php:195
+#: usr/local/www/pkg_mgr_install.php:199
+msgid "Installation of"
+msgstr "ã®è¨­ç½®"
+
+#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200
+#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:195
+#: usr/local/www/pkg_mgr_install.php:195
+msgid "FAILED!"
+msgstr "FAILED ï¼"
+
+#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:196
+#: usr/local/www/pkg_mgr_install.php:196
+msgid "Installation halted."
+msgstr "インストールãŒåœæ­¢ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204
+#: usr/local/www/pkg_mgr_install.php:203 usr/local/www/pkg_mgr_install.php:199
+#: usr/local/www/pkg_mgr_install.php:199
+msgid "completed."
+msgstr "完了ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208
+#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203
+#: usr/local/www/pkg_mgr_install.php:203
+msgid "Installation completed."
+msgstr "インストールãŒå®Œäº†ã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208
+#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203
+#: usr/local/www/pkg_mgr_install.php:203
+msgid "setup instructions"
+msgstr "セットアップ手順"
+
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210
+#: usr/local/www/pkg_mgr_install.php:209 usr/local/www/pkg_mgr_install.php:205
+#: usr/local/www/pkg_mgr_install.php:205
+msgid ""
+"Installation completed. Please check to make sure that the package is "
+"configured from the respective menu then start the package."
+msgstr "ãã‚Œãžã‚Œã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰æ§‹æˆã•ã‚ŒãŸã€Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å®Œäº†ã—ã¾ã—ãŸã€‚パッケージãŒã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„〠ã€ãƒ‘ッケージを起動ã—ã¾ã™ã€‚"
+
+#: usr/local/www/preload.php:6
+msgid "You are not allowed to access this page."
+msgstr "ã‚ãªãŸã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/progress.php:25 usr/local/www/progress.php:22
+msgid "Invalid Meter ID"
+msgstr "無効ãªãƒ¡ãƒ¼ã‚¿ãƒ¼ç•ªå·"
+
+#: usr/local/www/progress.php:46 usr/local/www/progress.php:43
+msgid "UPLOAD completed"
+msgstr "アップロード完了"
+
+#: usr/local/www/progress.php:58 usr/local/www/progress.php:55
+msgid "Uploading Files... Please wait..."
+msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/progress.php:68 usr/local/www/progress.php:65
+msgid "Uploading files..."
+msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード..."
+
+#: usr/local/www/progress.php:87 usr/local/www/progress.php:84
+msgid "Time Remaining:"
+msgstr "残り時間:"
+
+#: usr/local/www/progress.php:88 usr/local/www/progress.php:85
+msgid "Speed:"
+msgstr "スピード:"
+
+#: usr/local/www/progress.php:88 usr/local/www/progress.php:85
+msgid "KB/sec"
+msgstr "KB /秒"
+
+#: usr/local/www/progress.php:92 usr/local/www/progress.php:89
+msgid "Uploaded:"
+msgstr "アップã—ãŸäººï¼š"
+
+#: usr/local/www/progress.php:93 usr/local/www/progress.php:90
+msgid "File Size:"
+msgstr "ファイルサイズ:"
+
+#: usr/local/www/progress.php:97 usr/local/www/progress.php:94
+msgid "Completed:"
+msgstr "完æˆï¼š"
+
+#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250
+#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210
+#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218
+#: usr/local/www/fbegin.inc:209 usr/local/www/diag_dns.php:266
+#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:266
+#: usr/local/www/fbegin.inc:209
+msgid "DNS Lookup"
+msgstr "DNSルックアップ"
+
+#: usr/local/www/diag_dns.php:100 usr/local/www/diag_dns.php:100
+msgid "Host must be a valid hostname or IP address."
+msgstr "ホストã¯ã€æœ‰åŠ¹ãªãƒ›ã‚¹ãƒˆåã¾ãŸã¯IPアドレスã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109
+#: usr/local/www/diag_dns.php:109
+msgid "No response"
+msgstr "応答ãªã—"
+
+#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142
+#: usr/local/www/diag_dns.php:142
+msgid "No record found"
+msgstr "見ã¤ã‹ã‚‰ãƒ¬ã‚³ãƒ¼ãƒ‰ã¾ã›ã‚“"
+
+#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157
+#: usr/local/www/diag_dns.php:174 usr/local/www/diag_dns.php:174
+msgid "Resolve DNS hostname or IP"
+msgstr "DNSホストåã¾ãŸã¯IPアドレスを解決ã™ã‚‹"
+
+#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177
+msgid "Hostname or IP"
+msgstr "ホストåã¾ãŸã¯IP"
+
+#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202
+#: usr/local/www/diag_dns.php:219 usr/local/www/diag_dns.php:219
+msgid "Resolution time per server"
+msgstr "サーãƒã‚ãŸã‚Šã®è§£æ±ºæ™‚é–“"
+
+#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210
+#: usr/local/www/diag_dns.php:227 usr/local/www/diag_dns.php:227
+msgid "Query time"
+msgstr "クエリ時間"
+
+#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234
+#: usr/local/www/diag_dns.php:251 usr/local/www/diag_dns.php:251
+msgid "More Information:"
+msgstr "ãã®ä»–ã®æƒ…報:"
+
+#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43
+#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119
+#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218
+#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226
+#: usr/local/www/fbegin.inc:217 usr/local/www/diag_ping.php:44
+#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141
+#: usr/local/www/diag_dns.php:253 usr/local/www/diag_ping.php:44
+#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141
+#: usr/local/www/diag_dns.php:253 usr/local/www/fbegin.inc:217
+msgid "Ping"
+msgstr "ピン"
+
+#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45
+#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112
+#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227
+#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236
+#: usr/local/www/diag_traceroute.php:90 usr/local/www/diag_traceroute.php:136
+#: usr/local/www/fbegin.inc:228 usr/local/www/diag_traceroute.php:46
+#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155
+#: usr/local/www/diag_dns.php:254 usr/local/www/diag_traceroute.php:46
+#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155
+#: usr/local/www/diag_dns.php:254 usr/local/www/fbegin.inc:228
+msgid "Traceroute"
+msgstr "トレースルート"
+
+#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239
+#: usr/local/www/diag_dns.php:256 usr/local/www/diag_dns.php:256
+msgid ""
+"NOTE: The following links are to external services, so their reliability "
+"cannot be guaranteed."
+msgstr ""注:以下ã®ãƒªãƒ³ã‚¯ã¯å¤–部ã®ã‚µãƒ¼ãƒ“スã«ã‚ã‚‹ãŸã‚ã€ãã®ä¿¡é ¼æ€§ã€ã¯ä¿è¨¼ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240
+#: usr/local/www/diag_dns.php:257 usr/local/www/diag_dns.php:257
+msgid "IP WHOIS @ DNS Stuff"
+msgstr "DNSã®ã‚¹ã‚¿ãƒƒãƒ•@ã®IP WHOIS"
+
+#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241
+#: usr/local/www/diag_dns.php:258 usr/local/www/diag_dns.php:258
+msgid "IP Info @ DNS Stuff"
+msgstr "IP情報@ DNSã®ã‚¹ã‚¿ãƒƒãƒ•"
+
+#: usr/local/www/reboot.php:44
+msgid " Yes "
+msgstr "ã¯ã„"
+
+#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76
+#: usr/local/www/reboot.php:56 usr/local/www/reboot.php:56
+msgid "The system is rebooting now. This may take one minute."
+msgstr "システムãŒãƒªãƒ–ートã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯1分ã‹ã‹ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48
+#: usr/local/www/reboot.php:48
+msgid "Reboot System"
+msgstr "システムをå†èµ·å‹•"
+
+#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62
+#: usr/local/www/reboot.php:62
+msgid "Are you sure you want to reboot the system?"
+msgstr "ã‚ãªãŸã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’å†èµ·å‹•ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/restart_httpd.php:42 usr/local/www/restart_httpd.php:42
+msgid "Restarting httpd"
+msgstr "httpdã®ã‚’å†èµ·å‹•ã™ã‚‹"
+
+#: usr/local/www/restart_httpd.php:50 usr/local/www/restart_httpd.php:50
+msgid "Mounting file systems read/write"
+msgstr "ファイルシステムã®ãƒžã‚¦ãƒ³ãƒˆã¯èª­ã¿å–ã‚Š/書ãè¾¼ã¿"
+
+#: usr/local/www/restart_httpd.php:53 usr/local/www/restart_httpd.php:53
+msgid "Forcing all PHP file permissions to 0755"
+msgstr "0755ã¸ã®ã™ã¹ã¦ã®PHPファイルã®ãƒ‘ーミッションを強制的ã«"
+
+#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:56
+msgid "Mounting file systems read only"
+msgstr "ファイルシステムã®ãƒžã‚¦ãƒ³ãƒˆã¯èª­ã¿å–り専用"
+
+#: usr/local/www/restart_httpd.php:59 usr/local/www/restart_httpd.php:59
+msgid "Restarting mini_httpd"
+msgstr "mini_httpdã‚’å†èµ·å‹•ã™ã‚‹"
+
+#: usr/local/www/edit.php:39 usr/local/www/edit.php:42
+#: usr/local/www/edit.php:41 usr/local/www/edit.php:41
+msgid "Edit file"
+msgstr "編集ファイル"
+
+#: usr/local/www/edit.php:46 usr/local/www/edit.php:62
+#: usr/local/www/edit.php:49 usr/local/www/edit.php:65
+#: usr/local/www/edit.php:48 usr/local/www/edit.php:48
+#: usr/local/www/edit.php:65
+msgid "No file name specified"
+msgstr "指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«åãªã„"
+
+#: usr/local/www/edit.php:48 usr/local/www/edit.php:51
+#: usr/local/www/edit.php:50 usr/local/www/edit.php:50
+msgid "Loading a directory is not supported"
+msgstr "ディレクトリã®èª­ã¿è¾¼ã¿ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: usr/local/www/edit.php:50 usr/local/www/edit.php:53
+#: usr/local/www/edit.php:52 usr/local/www/edit.php:52
+msgid "File does not exist or is not a regular file"
+msgstr "ファイルãŒå­˜åœ¨ã—ãªã„ã‹ã€å®šæœŸçš„ãªãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ãªã„。"
+
+#: usr/local/www/edit.php:54 usr/local/www/edit.php:57
+#: usr/local/www/edit.php:56 usr/local/www/edit.php:56
+msgid "Failed to read file"
+msgstr "ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/edit.php:74 usr/local/www/edit.php:77
+#: usr/local/www/edit.php:77
+msgid "Failed to write file"
+msgstr "ファイルã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/edit.php:76 usr/local/www/edit.php:79
+#: usr/local/www/edit.php:79
+msgid "Error while writing file"
+msgstr "エラーファイルã®æ›¸ãè¾¼ã¿ä¸­ã«"
+
+#: usr/local/www/edit.php:78 usr/local/www/edit.php:81
+#: usr/local/www/edit.php:81
+msgid "File successfully saved"
+msgstr "ä¿å­˜ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’正常"
+
+#: usr/local/www/edit.php:98 usr/local/www/edit.php:101
+#: usr/local/www/edit.php:101
+msgid "Loading file"
+msgstr "ロードファイル"
+
+#: usr/local/www/edit.php:117 usr/local/www/edit.php:120
+#: usr/local/www/edit.php:121 usr/local/www/edit.php:121
+msgid "File successfully loaded"
+msgstr "ロードファイルを正常"
+
+#: usr/local/www/edit.php:140 usr/local/www/edit.php:143
+#: usr/local/www/edit.php:144 usr/local/www/edit.php:144
+msgid "Saving file"
+msgstr "ファイルã®ä¿å­˜"
+
+#: usr/local/www/edit.php:177 usr/local/www/edit.php:180
+#: usr/local/www/edit.php:181 usr/local/www/edit.php:181
+msgid "Save / Load from path"
+msgstr "パスã‹ã‚‰ã‚»ãƒ¼ãƒ–/ロード"
+
+#: usr/local/www/edit.php:179 usr/local/www/edit.php:182
+#: usr/local/www/edit.php:183 usr/local/www/edit.php:183
+msgid "Load"
+msgstr "ロード"
+
+#: usr/local/www/edit.php:180 usr/local/www/edit.php:183
+#: usr/local/www/edit.php:184 usr/local/www/edit.php:184
+msgid "Browse"
+msgstr "ブラウズ"
+
+#: usr/local/www/services_captiveportal.php:63
+#: usr/local/www/services_captiveportal_filemanager.php:75
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_ip.php:64
+#: usr/local/www/services_captiveportal_ip.php:104
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_mac.php:63
+#: usr/local/www/services_captiveportal_mac.php:154
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_captiveportal_hostname.php:66
+#: usr/local/www/services_captiveportal_hostname.php:109
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers.php:403
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_captiveportal_vouchers.php:410
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/services_captiveportal_vouchers.php:423
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_ip.php:102
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/services_captiveportal_mac.php:152
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/services_captiveportal_hostname.php:107
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/services_captiveportal_filemanager.php:147
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:432
+#: usr/local/www/services_captiveportal_mac.php:162
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_ip.php:102
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:437
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/services_captiveportal_hostname.php:107
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/services_captiveportal_filemanager.php:147
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/services_captiveportal_mac.php:162
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+msgid "Captive portal"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«"
+
+#: usr/local/www/services_captiveportal.php:146
+#: usr/local/www/services_captiveportal_zones_edit.php:61
+#: usr/local/www/services_captiveportal_zones_edit.php:99
+#: usr/local/www/services_captiveportal.php:147
+#: usr/local/www/services_captiveportal.php:153
+#: usr/local/www/services_captiveportal_zones_edit.php:59
+#: usr/local/www/services_captiveportal_zones_edit.php:101
+#: usr/local/www/services_captiveportal_zones_edit.php:97
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/services_captiveportal_zones_edit.php:59
+#: usr/local/www/services_captiveportal_zones_edit.php:97
+#: usr/local/www/services_captiveportal.php:155
+msgid "Zone name"
+msgstr "ゾーンå"
+
+#: usr/local/www/services_captiveportal.php:154
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/services_captiveportal.php:161
+#: usr/local/www/services_captiveportal.php:163
+#: usr/local/www/services_captiveportal.php:163
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is part of a "
+"bridge."
+msgstr "æ©‹"ãã‚Œã¯ã®ä¸€éƒ¨ã§ã‚ã‚‹ãŸã‚キャプティブãƒãƒ¼ã‚¿ãƒ«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹%sã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/services_captiveportal.php:158
+#: usr/local/www/services_captiveportal.php:159
+#: usr/local/www/services_captiveportal.php:165
+#: usr/local/www/services_captiveportal.php:167
+#: usr/local/www/services_captiveportal.php:167
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is used already "
+"on %s instance."
+msgstr "%sインスタンス上ã§ã€Œãã‚ŒãŒæ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ã®ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹%sã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/services_captiveportal.php:166
+#: usr/local/www/services_captiveportal.php:167
+msgid "Certificate and key must be specified for HTTPS login."
+msgstr "証明書ã¨ã‚­ãƒ¼ã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:169
+#: usr/local/www/system_camanager.php:168
+#: usr/local/www/system_certmanager.php:168
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/services_captiveportal.php:170
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_certmanager.php:199
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_certmanager.php:199
+msgid "This certificate does not appear to be valid."
+msgstr "ã“ã®è¨¼æ˜Žæ›¸ã¯æœ‰åŠ¹ã§ã‚ã‚‹ã¨è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:171
+#: usr/local/www/services_captiveportal.php:172
+msgid "This intermmediate certificate does not appear to be valid."
+msgstr "ã“ã®intermmediate証明書ãŒæœ‰åŠ¹ã§ã‚ã‚‹ã¨è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:173
+#: usr/local/www/services_captiveportal.php:174
+msgid "This key does not appear to be valid."
+msgstr "ã“ã®ã‚­ãƒ¼ã¯æœ‰åŠ¹ã§ã‚ã‚‹ã¨è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:177
+#: usr/local/www/services_captiveportal.php:178
+#: usr/local/www/services_captiveportal.php:176
+#: usr/local/www/services_captiveportal.php:178
+msgid "The HTTPS server name must be specified for HTTPS login."
+msgstr "HTTPSサーãƒåã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:183
+#: usr/local/www/services_captiveportal.php:184
+#: usr/local/www/services_captiveportal.php:182
+#: usr/local/www/services_captiveportal.php:185
+#: usr/local/www/services_captiveportal.php:185
+msgid "The timeout must be at least 1 minute."
+msgstr "タイムアウトã¯1分以上ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:186
+#: usr/local/www/services_captiveportal.php:187
+#: usr/local/www/services_captiveportal.php:185
+#: usr/local/www/services_captiveportal.php:203
+#: usr/local/www/services_captiveportal.php:203
+msgid "The idle timeout must be at least 1 minute."
+msgstr "アイドルタイムアウトã¯1分以上ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:189
+#: usr/local/www/services_captiveportal.php:190
+#: usr/local/www/services_captiveportal.php:188
+#: usr/local/www/services_captiveportal.php:206
+#: usr/local/www/services_captiveportal.php:206
+msgid "The pass-through credit count must be a number or left blank."
+msgstr "パススルークレジット数ã¯ã€ç•ªå·ã¾ãŸã¯å·¦ç©ºç™½ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:192
+#: usr/local/www/services_captiveportal.php:193
+#: usr/local/www/services_captiveportal.php:191
+#: usr/local/www/services_captiveportal.php:209
+#: usr/local/www/services_captiveportal.php:209
+msgid ""
+"The waiting period to restore pass-through credits must be above 0 hours."
+msgstr "「パススルークレジットを復元ã™ã‚‹ãŸã‚ã«å¾…機期間ãŒ0時間以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:196
+#: usr/local/www/services_captiveportal.php:199
+#: usr/local/www/services_captiveportal.php:202
+#: usr/local/www/services_captiveportal.php:205
+#: usr/local/www/services_captiveportal_ip_edit.php:107
+#: usr/local/www/services_captiveportal.php:197
+#: usr/local/www/services_captiveportal.php:200
+#: usr/local/www/services_captiveportal.php:203
+#: usr/local/www/services_captiveportal.php:206
+#: usr/local/www/services_captiveportal.php:195
+#: usr/local/www/services_captiveportal.php:198
+#: usr/local/www/services_captiveportal.php:201
+#: usr/local/www/services_captiveportal.php:204
+#: usr/local/www/services_captiveportal_ip_edit.php:105
+#: usr/local/www/services_captiveportal_ip_edit.php:104
+#: usr/local/www/services_captiveportal.php:213
+#: usr/local/www/services_captiveportal.php:216
+#: usr/local/www/services_captiveportal.php:219
+#: usr/local/www/services_captiveportal.php:222
+#: usr/local/www/services_captiveportal_ip_edit.php:104
+#: usr/local/www/services_captiveportal.php:213
+#: usr/local/www/services_captiveportal.php:216
+#: usr/local/www/services_captiveportal.php:219
+#: usr/local/www/services_captiveportal.php:222
+#, php-format
+msgid "A valid IP address must be specified. [%s]"
+msgstr "有効ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ( ( %s ) )"
+
+#: usr/local/www/services_captiveportal.php:208
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_captiveportal.php:214
+#: usr/local/www/services_captiveportal.php:217
+#: usr/local/www/services_captiveportal.php:220
+#: usr/local/www/services_captiveportal.php:209
+#: usr/local/www/services_captiveportal.php:212
+#: usr/local/www/services_captiveportal.php:215
+#: usr/local/www/services_captiveportal.php:218
+#: usr/local/www/services_captiveportal.php:221
+#: usr/local/www/services_captiveportal.php:207
+#: usr/local/www/services_captiveportal.php:210
+#: usr/local/www/services_captiveportal.php:213
+#: usr/local/www/services_captiveportal.php:216
+#: usr/local/www/services_captiveportal.php:219
+#: usr/local/www/services_captiveportal.php:225
+#: usr/local/www/services_captiveportal.php:228
+#: usr/local/www/services_captiveportal.php:231
+#: usr/local/www/services_captiveportal.php:234
+#: usr/local/www/services_captiveportal.php:237
+#: usr/local/www/services_captiveportal.php:225
+#: usr/local/www/services_captiveportal.php:228
+#: usr/local/www/services_captiveportal.php:231
+#: usr/local/www/services_captiveportal.php:234
+#: usr/local/www/services_captiveportal.php:237
+#, php-format
+msgid "A valid port number must be specified. [%s]"
+msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ( ( %s ) )"
+
+#: usr/local/www/services_captiveportal.php:223
+#: usr/local/www/services_captiveportal.php:224
+#: usr/local/www/services_captiveportal.php:222
+#: usr/local/www/services_captiveportal.php:240
+#: usr/local/www/services_captiveportal.php:240
+msgid ""
+"The maximum number of concurrent connections per client IP address may not "
+"be larger than the global maximum."
+msgstr "「クライアントIPアドレスã”ã¨ã®åŒæ™‚接続ã®æœ€å¤§æ•°ãŒãªã„ã“ã¨ãŒã€ã€Œä¸–界的ãªæœ€å¤§å€¤ã‚ˆã‚Šã‚‚大ãããªã‚‹ã€‚"
+
+#: usr/local/www/services_captiveportal.php:421
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal.php:423
+#: usr/local/www/services_captiveportal.php:441
+#: usr/local/www/services_captiveportal.php:441
+msgid "Captive portal(s)"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼ˆ S )"
+
+#: usr/local/www/services_captiveportal.php:422
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_ip.php:105
+#: usr/local/www/services_captiveportal_mac.php:155
+#: usr/local/www/services_captiveportal_hostname.php:110
+#: usr/local/www/services_captiveportal_vouchers.php:404
+#: usr/local/www/services_captiveportal_vouchers.php:411
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_vouchers.php:424
+#: usr/local/www/services_captiveportal_ip.php:103
+#: usr/local/www/services_captiveportal_mac.php:153
+#: usr/local/www/services_captiveportal_hostname.php:108
+#: usr/local/www/services_captiveportal.php:424
+#: usr/local/www/services_captiveportal_filemanager.php:148
+#: usr/local/www/services_captiveportal_vouchers.php:433
+#: usr/local/www/services_captiveportal_mac.php:163
+#: usr/local/www/services_captiveportal.php:442
+#: usr/local/www/services_captiveportal_ip.php:103
+#: usr/local/www/services_captiveportal_vouchers.php:438
+#: usr/local/www/services_captiveportal_hostname.php:108
+#: usr/local/www/services_captiveportal_filemanager.php:148
+#: usr/local/www/services_captiveportal.php:442
+#: usr/local/www/services_captiveportal_mac.php:163
+msgid "Pass-through MAC"
+msgstr "パススルーMAC"
+
+#: usr/local/www/services_captiveportal.php:423
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_vouchers.php:405
+#: usr/local/www/services_captiveportal_vouchers.php:412
+#: usr/local/www/services_captiveportal.php:427
+#: usr/local/www/services_captiveportal_vouchers.php:425
+#: usr/local/www/services_captiveportal_ip.php:104
+#: usr/local/www/services_captiveportal_mac.php:154
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal_filemanager.php:149
+#: usr/local/www/services_captiveportal_vouchers.php:434
+#: usr/local/www/services_captiveportal_mac.php:164
+#: usr/local/www/services_captiveportal.php:443
+#: usr/local/www/services_captiveportal_ip.php:104
+#: usr/local/www/services_captiveportal_vouchers.php:439
+#: usr/local/www/services_captiveportal_filemanager.php:149
+#: usr/local/www/services_captiveportal.php:443
+#: usr/local/www/services_captiveportal_mac.php:164
+msgid "Allowed IP addresses"
+msgstr "許å¯ã™ã‚‹IPアドレス"
+
+#: usr/local/www/services_captiveportal.php:424
+#: usr/local/www/services_captiveportal_filemanager.php:153
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_hostname.php:112
+#: usr/local/www/services_captiveportal_vouchers.php:406
+#: usr/local/www/services_captiveportal_vouchers.php:413
+#: usr/local/www/services_captiveportal.php:428
+#: usr/local/www/services_captiveportal_vouchers.php:426
+#: usr/local/www/services_captiveportal_ip.php:105
+#: usr/local/www/services_captiveportal_mac.php:155
+#: usr/local/www/services_captiveportal_hostname.php:110
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_vouchers.php:435
+#: usr/local/www/services_captiveportal_mac.php:165
+#: usr/local/www/services_captiveportal.php:444
+#: usr/local/www/services_captiveportal_ip.php:105
+#: usr/local/www/services_captiveportal_vouchers.php:440
+#: usr/local/www/services_captiveportal_hostname.php:110
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal.php:444
+#: usr/local/www/services_captiveportal_mac.php:165
+msgid "Allowed Hostnames"
+msgstr "許å¯ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆå"
+
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal.php:587
+#: usr/local/www/services_captiveportal_filemanager.php:154
+#: usr/local/www/services_captiveportal_ip.php:108
+#: usr/local/www/services_captiveportal_mac.php:158
+#: usr/local/www/services_captiveportal_hostname.php:113
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers.php:407
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_vouchers.php:414
+#: usr/local/www/services_captiveportal.php:429
+#: usr/local/www/services_captiveportal.php:592
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/services_captiveportal_vouchers.php:427
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_hostname.php:111
+#: usr/local/www/services_captiveportal.php:427
+#: usr/local/www/services_captiveportal.php:590
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:436
+#: usr/local/www/services_captiveportal.php:584
+#: usr/local/www/services_captiveportal_mac.php:166
+#: usr/local/www/services_captiveportal.php:445
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:441
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_hostname.php:111
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal.php:445
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal_mac.php:166
+msgid "Vouchers"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_filemanager.php:155
+#: usr/local/www/services_captiveportal_ip.php:109
+#: usr/local/www/services_captiveportal_mac.php:159
+#: usr/local/www/services_captiveportal_hostname.php:114
+#: usr/local/www/services_captiveportal_vouchers.php:408
+#: usr/local/www/services_captiveportal_vouchers.php:415
+#: usr/local/www/services_captiveportal.php:430
+#: usr/local/www/services_captiveportal_vouchers.php:428
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_hostname.php:112
+#: usr/local/www/services_captiveportal.php:428
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_vouchers.php:437
+#: usr/local/www/services_captiveportal_mac.php:167
+#: usr/local/www/services_captiveportal.php:446
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_vouchers.php:442
+#: usr/local/www/services_captiveportal_hostname.php:112
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal.php:446
+#: usr/local/www/services_captiveportal_mac.php:167
+msgid "File Manager"
+msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: usr/local/www/services_captiveportal.php:436
+#: usr/local/www/services_captiveportal.php:440
+#: usr/local/www/services_captiveportal.php:438
+#: usr/local/www/services_captiveportal.php:456
+#: usr/local/www/services_captiveportal.php:456
+msgid "Enable captive portal"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:450
+#: usr/local/www/services_captiveportal.php:455
+#: usr/local/www/services_captiveportal.php:453
+#: usr/local/www/services_captiveportal.php:471
+#: usr/local/www/services_captiveportal.php:471
+msgid "Select the interface(s) to enable for captive portal."
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãŸã‚ã«æœ‰åŠ¹ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:453
+#: usr/local/www/services_captiveportal.php:458
+#: usr/local/www/services_captiveportal.php:456
+#: usr/local/www/services_captiveportal.php:474
+#: usr/local/www/services_captiveportal.php:474
+msgid "Maximum concurrent connections"
+msgstr "最大åŒæ™‚接続"
+
+#: usr/local/www/services_captiveportal.php:457
+#: usr/local/www/services_captiveportal.php:462
+#: usr/local/www/services_captiveportal.php:460
+#: usr/local/www/services_captiveportal.php:478
+#: usr/local/www/services_captiveportal.php:478
+msgid "per client IP address (0 = no limit)"
+msgstr "クライアントã®IPアドレスã”ã¨ã«ï¼ˆ 0 =制é™ãªã—)"
+
+#: usr/local/www/services_captiveportal.php:460
+msgid ""
+"This setting limits the number of concurrent connections to the captive "
+"portal HTTP(S) server. This does not set how many users can be logged in to "
+"the captive portal, but rather how many users can load the portal page or "
+"authenticate at the same time! Default is 4 connections per client IP "
+"address, with a total maximum of 16 connections."
+msgstr "ãƒãƒ¼ã‚¿ãƒ«HTTP(S )サーãƒã€Œã“ã®è¨­å®šã§ã¯ã€ã‚­ãƒ£ãƒ—ティブã¸ã®åŒæ™‚接続数を制é™ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãるユーザー数ã¯è¨­å®šã—ã¾ã›ã‚“ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ã§ã¯ãªãã€ã©ã®ã‚ˆã†ã«å¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã‚’ロードã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒåŒã˜æ™‚é–“ã« ã§èªè¨¼ï¼ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯16接続ã®åˆè¨ˆã€æœ€å¤§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®IP "アドレスã‚ãŸã‚Š4接続ã§ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:468
+#: usr/local/www/services_captiveportal.php:475
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:469
+#: usr/local/www/services_captiveportal.php:473
+#: usr/local/www/services_captiveportal.php:480
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/system_advanced_misc.php:518
+#: usr/local/www/services_captiveportal.php:471
+#: usr/local/www/services_captiveportal.php:478
+#: usr/local/www/system_advanced_misc.php:530
+#: usr/local/www/system_advanced_misc.php:651
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/system_advanced_misc.php:651
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:496
+msgid "minutes"
+msgstr "分"
+
+#: usr/local/www/services_captiveportal.php:469
+#: usr/local/www/services_captiveportal.php:474
+#: usr/local/www/services_captiveportal.php:472
+#: usr/local/www/services_captiveportal.php:490
+#: usr/local/www/services_captiveportal.php:490
+msgid ""
+"Clients will be disconnected after this amount of inactivity. They may log "
+"in again immediately, though. Leave this field blank for no idle timeout."
+msgstr "「クライアントãŒéžã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªçŠ¶æ…‹ãŒã“ã®é‡ã®å¾Œã«åˆ‡æ–­ã•ã‚Œã¾ã™ã€‚彼らãŒè¨˜éŒ²ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã€ã€Œã—ã‹ã—ã€ã™ãã«å†åº¦ã€‚ãªã—アイドルタイムアウトã®ãŸã‚ã«ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:472
+#: usr/local/www/services_captiveportal.php:477
+#: usr/local/www/services_captiveportal.php:475
+#: usr/local/www/services_captiveportal.php:493
+#: usr/local/www/services_captiveportal.php:493
+msgid "Hard timeout"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ"
+
+#: usr/local/www/services_captiveportal.php:476
+#: usr/local/www/services_captiveportal.php:481
+#: usr/local/www/services_captiveportal.php:479
+#: usr/local/www/services_captiveportal.php:497
+#: usr/local/www/services_captiveportal.php:497
+msgid ""
+"Clients will be disconnected after this amount of time, regardless of "
+"activity. They may log in again immediately, though. Leave this field blank "
+"for no hard timeout (not recommended unless an idle timeout is set)."
+msgstr "活性ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯é–¢ä¿‚ãªãã€ã“ã®æ™‚間後ã«åˆ‡æ–­ã•ã‚Œã¾ã™ã€ 。彼らã¯ã€ã—ã‹ã—ã€ã™ãã«å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãる。ãªã—ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®ãŸã‚ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã«ã—ã¦ã€ã®ã¾ã¾ã«ï¼ˆã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒè¨­å®šã•ã‚Œã¦ã„ãªã„é™ã‚ŠãŠå‹§ã‚ã—ã¾ã›ã‚“) 。"
+
+#: usr/local/www/services_captiveportal.php:479
+#: usr/local/www/services_captiveportal.php:484
+#: usr/local/www/services_captiveportal.php:482
+#: usr/local/www/services_captiveportal.php:500
+#: usr/local/www/services_captiveportal.php:500
+msgid "Pass-through credits allowed per MAC address"
+msgstr "MACアドレスã”ã¨ã«è¨±å¯ã•ã‚Œã‚‹ãƒ‘ススルークレジット"
+
+#: usr/local/www/services_captiveportal.php:482
+#: usr/local/www/services_captiveportal.php:487
+#: usr/local/www/services_captiveportal.php:485
+#: usr/local/www/services_captiveportal.php:503
+#: usr/local/www/services_captiveportal.php:503
+msgid "per client MAC address (0 or blank = none)"
+msgstr "クライアントã®MACアドレスã”ã¨ï¼ˆ 0ã¾ãŸã¯ç©ºç™½=ãªã—)"
+
+#: usr/local/www/services_captiveportal.php:483
+#: usr/local/www/services_captiveportal.php:488
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/services_captiveportal.php:504
+#: usr/local/www/services_captiveportal.php:504
+msgid ""
+"This setting allows passing through the captive portal without "
+"authentication a limited number of times per MAC address. Once used up, the "
+"client can only log in with valid credentials until the waiting period "
+"specified below has expired. Recommended to set a hard timeout and/or idle "
+"timeout when using this for it to be effective."
+msgstr "èªè¨¼ã€MACアドレスã”ã¨ã«é™ã‚‰ã‚ŒãŸå›žæ•°ã‚’"ã“ã®è¨­å®šã¯ã›ãšã«ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’通éŽã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。以下ã«æŒ‡å®šã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚ŒãŸå¾Œã¯ä½¿ã„切ã£ã¦ã€ 「待機期間ãŒã™ã‚‹ã¾ã§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€æœ‰åŠ¹ãªè³‡æ ¼æƒ…報を使ã£ã¦ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。ãれを有効ã«ã™ã‚‹ã«ã¯ã€ã“れを使用ã™ã‚‹éš›ã«ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŠã‚ˆã³/ã¾ãŸã¯ã‚¢ã‚¤ãƒ‰ãƒ«"タイムアウトを設定ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/services_captiveportal.php:491
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal.php:507
+msgid "Waiting period to restore pass-through credits"
+msgstr "パススルークレジットを復元ã™ã‚‹ãŸã‚ã«æ™‚é–“ã‚’å¾…ã£ã¦ã„ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:494
+#: usr/local/www/services_captiveportal.php:492
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal.php:510
+msgid "hours"
+msgstr "営業時間"
+
+#: usr/local/www/services_captiveportal.php:490
+#: usr/local/www/services_captiveportal.php:495
+#: usr/local/www/services_captiveportal.php:493
+#: usr/local/www/services_captiveportal.php:511
+#: usr/local/www/services_captiveportal.php:511
+msgid ""
+"Clients will have their available pass-through credits restored to the "
+"original count after this amount of time since using the first one. This "
+"must be above 0 hours if pass-through credits are enabled."
+msgstr "最åˆã®ã‚‚ã®ã‚’使用ã—ã¦ã„ã‚‹ã®ã§ã€ã“ã®æ™‚間後ã«å…ƒã®æ•°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ‘ススルークレジットã«å¾©å…ƒã•ã‚Œã¾ã™ã€ 。パススルークレジットãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã“ã‚Œã¯ã€Œ 0時間以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:493
+#: usr/local/www/services_captiveportal.php:498
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/services_captiveportal.php:514
+#: usr/local/www/services_captiveportal.php:514
+msgid "Reset waiting period on attempted access"
+msgstr "試ã¿ã‚‰ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ã«æ™‚é–“ã‚’å¾…ã£ã¦ãƒªã‚»ãƒƒãƒˆ"
+
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/services_captiveportal.php:501
+#: usr/local/www/services_captiveportal.php:499
+#: usr/local/www/services_captiveportal.php:517
+#: usr/local/www/services_captiveportal.php:517
+msgid "Enable waiting period reset on attempted access"
+msgstr "試ã¿ã‚‰ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ã«æœŸé–“ã®ãƒªã‚»ãƒƒãƒˆã‚’å¾…ã£ã¦æœ‰åŠ¹ã«ã—ã¾ã™"
+
+#: usr/local/www/services_captiveportal.php:497
+#: usr/local/www/services_captiveportal.php:502
+#: usr/local/www/services_captiveportal.php:500
+#: usr/local/www/services_captiveportal.php:518
+#: usr/local/www/services_captiveportal.php:518
+msgid ""
+"If enabled, the waiting period is reset to the original duration if access "
+"is attempted when all pass-through credits have already been exhausted."
+msgstr "ã™ã¹ã¦ã®ãƒ‘ススルークレジットãŒæ—¢ã«å°½ããŸæ™‚ã«è©¦è¡Œã•ã‚Œã¦ã„る「アクセスãŒã‚ã‚Œã°æœ‰åŠ¹ã«ã—ãŸå ´åˆã€å¾…機期間ã¯ã€å…ƒã®ç¶™ç¶šæ™‚é–“ã«ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:500
+#: usr/local/www/services_captiveportal.php:505
+#: usr/local/www/services_captiveportal.php:503
+#: usr/local/www/services_captiveportal.php:521
+#: usr/local/www/services_captiveportal.php:521
+msgid "Logout popup window"
+msgstr "ログアウトãƒãƒƒãƒ—アップウィンドウ"
+
+#: usr/local/www/services_captiveportal.php:503
+#: usr/local/www/services_captiveportal.php:508
+#: usr/local/www/services_captiveportal.php:506
+#: usr/local/www/services_captiveportal.php:524
+#: usr/local/www/services_captiveportal.php:524
+msgid "Enable logout popup window"
+msgstr "ログアウトãƒãƒƒãƒ—アップウィンドウを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:504
+#: usr/local/www/services_captiveportal.php:509
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal.php:525
+#: usr/local/www/services_captiveportal.php:525
+msgid ""
+"If enabled, a popup window will appear when clients are allowed through the "
+"captive portal. This allows clients to explicitly disconnect themselves "
+"before the idle or hard timeout occurs."
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒé€šéŽã‚’許å¯ã—ã¦ã„ã‚‹å ´åˆã«æœ‰åŠ¹ã«ã—ãŸå ´åˆã€ãƒãƒƒãƒ—アップウィンドウãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€ 。ã“ã‚Œã¯ã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã¾ãŸã¯ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒç™ºç”Ÿã™ã‚‹å‰ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæ˜Žç¤ºçš„ã«ã€Œè‡ªåˆ†è‡ªèº«ã‚’切断ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal.php:512
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal.php:528
+#: usr/local/www/services_captiveportal.php:528
+msgid "Pre-authentication redirect URL"
+msgstr "事å‰èªè¨¼ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURL"
+
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal.php:515
+#: usr/local/www/services_captiveportal.php:513
+#: usr/local/www/services_captiveportal.php:531
+#: usr/local/www/services_captiveportal.php:531
+#, php-format
+msgid ""
+"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using "
+"your custom captive portal index.php page or error pages."
+msgstr "カスタムキャプティブãƒãƒ¼ã‚¿ãƒ«index.phpページã¾ãŸã¯ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ã€ã‚’使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ $ PORTAL_REDIRURL $変数セットã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’使用ã™ã‚‹ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:514
+#: usr/local/www/services_captiveportal.php:519
+#: usr/local/www/services_captiveportal.php:517
+#: usr/local/www/services_captiveportal.php:535
+#: usr/local/www/services_captiveportal.php:535
+msgid "After authentication Redirection URL"
+msgstr "後ã«èªè¨¼ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURL"
+
+#: usr/local/www/services_captiveportal.php:518
+#: usr/local/www/services_captiveportal.php:523
+#: usr/local/www/services_captiveportal.php:521
+#: usr/local/www/services_captiveportal.php:539
+#: usr/local/www/services_captiveportal.php:539
+msgid ""
+"If you provide a URL here, clients will be redirected to that URL instead of "
+"the one they initially tried to access after they've authenticated."
+msgstr "彼らãŒèªè¨¼ã•ã‚ŒãŸå¾Œã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€å½¼ã‚‰ãŒæœ€åˆã«è©¦ã—ãŸ1 "ã‚ãªãŸã¯ã“ã“ã«URLを指定ã—ãŸå ´åˆã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ä»£ã‚ã‚Šã«ãã®URLã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:522
+#: usr/local/www/services_captiveportal.php:527
+#: usr/local/www/services_captiveportal.php:525
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:543
+msgid "Concurrent user logins"
+msgstr "åŒæ™‚ユーザログイン"
+
+#: usr/local/www/services_captiveportal.php:525
+#: usr/local/www/services_captiveportal.php:530
+#: usr/local/www/services_captiveportal.php:528
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:546
+msgid "Disable concurrent logins"
+msgstr "åŒæ™‚ログインを無効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:526
+#: usr/local/www/services_captiveportal.php:531
+#: usr/local/www/services_captiveportal.php:529
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:547
+msgid ""
+"If this option is set, only the most recent login per username will be "
+"active. Subsequent logins will cause machines previously logged in with the "
+"same username to be disconnected."
+msgstr "アクティブ"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã”ã¨ã«æœ€çµ‚ログインã¯ãªã‚Šã¾ã™ã€ 。以é™ã®ãƒ­ã‚°ã‚¤ãƒ³ã§ã¯ãƒžã‚·ãƒ³ãŒä»¥å‰ã«åˆ‡æ–­ã•ã‚Œã‚‹ã€ŒåŒã˜ãƒ¦ãƒ¼ã‚¶åã§ãƒ­ã‚°ã‚¤ãƒ³ãŒç™ºç”Ÿã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:529
+#: usr/local/www/services_captiveportal.php:534
+#: usr/local/www/services_captiveportal.php:532
+#: usr/local/www/services_captiveportal.php:550
+#: usr/local/www/services_captiveportal.php:550
+msgid "MAC filtering"
+msgstr "MACフィルタリング"
+
+#: usr/local/www/services_captiveportal.php:532
+#: usr/local/www/services_captiveportal.php:537
+#: usr/local/www/services_captiveportal.php:535
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:553
+msgid "Disable MAC filtering"
+msgstr "無効ã«ã™ã‚‹MACフィルタリング"
+
+#: usr/local/www/services_captiveportal.php:533
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:536
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:554
+msgid ""
+"If this option is set, no attempts will be made to ensure that the MAC "
+"address of clients stays the same while they're logged in.This is required "
+"when the MAC address of the client cannot be determined (usually because "
+"there are routers between"
+msgstr "彼らã¯in.ThisãŒå¿…è¦ã¨ã•ã‚Œã‚‹ãƒ­ã‚°ã«è¨˜éŒ²ã—ã¦ã„ã‚‹é–“ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ãƒ‰ãƒ¬ã‚¹åŒã˜ã¾ã¾"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€è©¦ã¿ã¯MACãŒã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«è¡Œã‚れるã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“""クライアントã®MACアドレスを決定ã™ã‚‹ã“ã¨ãŒã§ããªã„å ´åˆï¼ˆé€šå¸¸ã®ãŸã‚ã€ãŒé–“ã®ãƒ«ãƒ¼ã‚¿ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/services_captiveportal.php:534
+#: usr/local/www/services_captiveportal.php:539
+#: usr/local/www/services_captiveportal.php:537
+#: usr/local/www/services_captiveportal.php:555
+#: usr/local/www/services_captiveportal.php:555
+msgid "and the clients)."
+msgstr "ãŠã‚ˆã³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼‰ 。"
+
+#: usr/local/www/services_captiveportal.php:535
+#: usr/local/www/services_captiveportal.php:540
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:556
+#: usr/local/www/services_captiveportal.php:556
+msgid "If this is enabled, RADIUS MAC authentication cannot be used."
+msgstr "ã“ã‚ŒãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ RADIUS MACèªè¨¼ãŒä½¿ç”¨ã§ããªã„。"
+
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:541
+#: usr/local/www/services_captiveportal.php:559
+#: usr/local/www/services_captiveportal.php:559
+msgid "Pass-through MAC Auto Entry"
+msgstr "パススルーMAC自動エントリー"
+
+#: usr/local/www/services_captiveportal.php:541
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:544
+#: usr/local/www/services_captiveportal.php:562
+#: usr/local/www/services_captiveportal.php:562
+msgid "Enable Pass-through MAC automatic additions"
+msgstr "パススルーMAC自動追加を有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:542
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:545
+#: usr/local/www/services_captiveportal.php:563
+#: usr/local/www/services_captiveportal.php:563
+msgid ""
+"If this option is set, a MAC passthrough entry is automatically added after "
+"the user has successfully authenticated. Users of that MAC address will "
+"never have to authenticate again."
+msgstr "ユーザーãŒæ­£å¸¸ã«èªè¨¼ã•ã‚ŒãŸã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ MACパススルーエントリãŒå¾Œã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ã€ 。ãã®MACアドレスã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ 「å†åº¦èªè¨¼ã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid ""
+"To remove the passthrough MAC entry you either have to log in and remove it "
+"manually from the"
+msgstr "ã‹ã‚‰æ‰‹å‹•ã§ã€Œãƒ‘ススルーMACエントリを削除ã™ã‚‹ã«ã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã€ãれを削除ã™ã‚‹å¿…è¦ãŒã„ãšã‚Œã‹""
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid "Pass-through MAC tab"
+msgstr "パススルーã®MACタブ"
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid "or send a POST from another system to remove it."
+msgstr "ã¾ãŸã¯ãれを削除ã™ã‚‹ã«ã¯ã€åˆ¥ã®ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ã®POSTã‚’é€ä¿¡ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:544
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:565
+#: usr/local/www/services_captiveportal.php:565
+msgid ""
+"If this is enabled, RADIUS MAC authentication cannot be used. Also, the "
+"logout window will not be shown."
+msgstr "「ã“ã‚ŒãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ RADIUS MACèªè¨¼ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã¾ãŸã€ã€Œãƒ­ã‚°ã‚¢ã‚¦ãƒˆã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒè¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:550
+#: usr/local/www/services_captiveportal.php:568
+#: usr/local/www/services_captiveportal.php:568
+msgid "Enable Pass-through MAC automatic addition with username"
+msgstr "パススルーMACã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§è‡ªå‹•è¿½åŠ ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:551
+#: usr/local/www/services_captiveportal.php:569
+#: usr/local/www/services_captiveportal.php:569
+msgid ""
+"If this option is set, with the automatically MAC passthrough entry created "
+"the username, used during authentication, will be saved."
+msgstr "èªè¨¼æ™‚ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å〠「ã“ã®ã‚ªãƒ—ションã¯è‡ªå‹•çš„ã«ä½œæˆã•ã‚ŒãŸMACパススルーエントリã¨ã€è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã€Œä¿å­˜ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:558
+#: usr/local/www/services_captiveportal.php:556
+#: usr/local/www/services_captiveportal.php:574
+#: usr/local/www/services_captiveportal.php:574
+msgid "Per-user bandwidth restriction"
+msgstr "ユーザã”ã¨ã®å¸¯åŸŸå¹…ã®åˆ¶é™"
+
+#: usr/local/www/services_captiveportal.php:556
+#: usr/local/www/services_captiveportal.php:561
+#: usr/local/www/services_captiveportal.php:559
+#: usr/local/www/services_captiveportal.php:577
+#: usr/local/www/services_captiveportal.php:577
+msgid "Enable per-user bandwidth restriction"
+msgstr "ユーザã”ã¨ã®å¸¯åŸŸå¹…ã®åˆ¶é™ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:559
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:562
+#: usr/local/www/services_captiveportal.php:580
+#: usr/local/www/services_captiveportal.php:580
+msgid "Default download"
+msgstr "デフォルトã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
+
+#: usr/local/www/services_captiveportal.php:563
+#: usr/local/www/services_captiveportal.php:568
+#: usr/local/www/services_captiveportal.php:566
+#: usr/local/www/services_captiveportal.php:584
+#: usr/local/www/services_captiveportal.php:584
+msgid "Default upload"
+msgstr "デフォルトã®ã‚¢ãƒƒãƒ—ロード"
+
+#: usr/local/www/services_captiveportal.php:567
+#: usr/local/www/services_captiveportal.php:572
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:588
+#: usr/local/www/services_captiveportal.php:588
+msgid ""
+"If this option is set, the captive portal will restrict each user who logs "
+"in to the specified default bandwidth. RADIUS can override the default "
+"settings. Leave empty or set to 0 for no limit."
+msgstr "指定ã•ã‚ŒãŸãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å¸¯åŸŸå¹…ã«ã¯ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ãƒ­ã‚°ã‚ªãƒ³ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã”ã¨ã«åˆ¶é™ã—ã¾ã™ã€ 。 RADIUSã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã® "設定を上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚制é™ãªã—ã«ç©ºã¾ãŸã¯0ã®ã¾ã¾ã«ã—ã¦ãŠã„ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:575
+#: usr/local/www/services_captiveportal.php:573
+msgid "PMS authentication"
+msgstr "PMSèªè¨¼"
+
+#: usr/local/www/services_captiveportal.php:573
+#: usr/local/www/services_captiveportal.php:578
+#: usr/local/www/services_captiveportal.php:576
+msgid "Enable PMS authentication"
+msgstr "PMSèªè¨¼ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:574
+#: usr/local/www/services_captiveportal.php:579
+#: usr/local/www/services_captiveportal.php:577
+msgid ""
+"If this option is set, users will be authenticated through the PMS backend "
+"if they fill the necessary information in the login page."
+msgstr "彼らã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã«å¿…è¦äº‹é …を記入ã—ãŸå ´åˆã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€PMSã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使用ã—ã¦èªè¨¼ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:583
+#: usr/local/www/services_captiveportal.php:588
+#: usr/local/www/services_captiveportal.php:586
+#: usr/local/www/services_captiveportal.php:580
+#: usr/local/www/services_captiveportal.php:596
+#: usr/local/www/services_captiveportal.php:596
+msgid "No Authentication"
+msgstr "èªè¨¼ãªã—"
+
+#: usr/local/www/services_captiveportal.php:587
+#: usr/local/www/diag_ipsec.php:194
+#: usr/local/www/services_captiveportal.php:592
+#: usr/local/www/diag_ipsec.php:195
+#: usr/local/www/services_captiveportal.php:590
+#: usr/local/www/diag_ipsec.php:196
+#: usr/local/www/services_captiveportal.php:584
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/diag_ipsec.php:196
+#: usr/local/www/services_captiveportal.php:600
+msgid "Local"
+msgstr "ローカル"
+
+#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93
+#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54
+#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112
+#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119
+#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590
+#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111
+#: usr/local/www/fbegin.inc:113 usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal.php:600 usr/local/www/fbegin.inc:111
+#: usr/local/www/fbegin.inc:113 usr/local/www/system_usermanager.php:54
+msgid "User Manager"
+msgstr "ユーザーマãƒãƒ¼ã‚¸ãƒ£"
+
+#: usr/local/www/services_captiveportal.php:591
+#: usr/local/www/services_captiveportal.php:596
+#: usr/local/www/services_captiveportal.php:594
+#: usr/local/www/services_captiveportal.php:612
+#: usr/local/www/services_captiveportal.php:612
+msgid "RADIUS Authentication"
+msgstr "RADIUSèªè¨¼"
+
+#: usr/local/www/services_captiveportal.php:599
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:678
+#: usr/local/www/services_captiveportal.php:633
+#: usr/local/www/services_captiveportal.php:676
+#: usr/local/www/services_captiveportal.php:634
+#: usr/local/www/services_captiveportal.php:677
+#: usr/local/www/services_captiveportal.php:650
+#: usr/local/www/services_captiveportal.php:693
+#: usr/local/www/services_captiveportal.php:650
+#: usr/local/www/services_captiveportal.php:693
+msgid "Primary RADIUS server"
+msgstr "プライマリRADIUSサーãƒãƒ¼"
+
+#: usr/local/www/services_captiveportal.php:604
+#: usr/local/www/services_captiveportal.php:640
+#: usr/local/www/services_captiveportal.php:638
+#: usr/local/www/services_captiveportal.php:639
+#: usr/local/www/services_captiveportal.php:655
+#: usr/local/www/services_captiveportal.php:655
+msgid ""
+"Enter the IP address of the RADIUS server which users of the captive portal "
+"have to authenticate against."
+msgstr "ã«å¯¾ã—ã¦èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ RADIUSサーãƒã®IPアドレスを入力ã—ã¦ãã ã•ã„ "。"
+
+#: usr/local/www/services_captiveportal.php:609
+#: usr/local/www/services_captiveportal.php:645
+#: usr/local/www/services_captiveportal.php:643
+#: usr/local/www/services_captiveportal.php:644
+#: usr/local/www/services_captiveportal.php:660
+#: usr/local/www/services_captiveportal.php:660
+msgid "Leave this field blank to use the default port (1812)."
+msgstr "デフォルトãƒãƒ¼ãƒˆï¼ˆ 1812 )を使用ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:612
+#: usr/local/www/services_captiveportal.php:632
+#: usr/local/www/services_captiveportal.php:651
+#: usr/local/www/services_captiveportal.php:670
+#: usr/local/www/services_captiveportal.php:725
+#: usr/local/www/services_captiveportal.php:648
+#: usr/local/www/services_captiveportal.php:668
+#: usr/local/www/services_captiveportal.php:690
+#: usr/local/www/services_captiveportal.php:709
+#: usr/local/www/services_captiveportal.php:767
+#: usr/local/www/services_captiveportal.php:646
+#: usr/local/www/services_captiveportal.php:666
+#: usr/local/www/services_captiveportal.php:688
+#: usr/local/www/services_captiveportal.php:707
+#: usr/local/www/services_captiveportal.php:765
+#: usr/local/www/services_captiveportal.php:647
+#: usr/local/www/services_captiveportal.php:667
+#: usr/local/www/services_captiveportal.php:689
+#: usr/local/www/services_captiveportal.php:708
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:705
+#: usr/local/www/services_captiveportal.php:724
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:705
+#: usr/local/www/services_captiveportal.php:724
+msgid "Shared secret"
+msgstr "共有秘密éµ"
+
+#: usr/local/www/services_captiveportal.php:614
+#: usr/local/www/services_captiveportal.php:650
+#: usr/local/www/services_captiveportal.php:648
+#: usr/local/www/services_captiveportal.php:649
+#: usr/local/www/services_captiveportal.php:665
+#: usr/local/www/services_captiveportal.php:665
+msgid ""
+"Leave this field blank to not use a RADIUS shared secret (not recommended)."
+msgstr "「RADIUS共有シークレットを使用ã—ãªã„よã†ã«ã€ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã—ã¾ã™ï¼ˆæŽ¨å¥¨ã•ã‚Œã¾ã›ã‚“) 。"
+
+#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440
+#: usr/local/www/services_captiveportal.php:656
+#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442
+#: usr/local/www/services_captiveportal.php:654
+#: usr/local/www/services_captiveportal.php:695
+#: usr/local/www/services_captiveportal.php:655
+#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/services_captiveportal.php:712
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/services_captiveportal.php:712 usr/local/www/vpn_pptp.php:445
+msgid "Secondary RADIUS server"
+msgstr "セカンダリRADIUSサーãƒ"
+
+#: usr/local/www/services_captiveportal.php:625
+#: usr/local/www/services_captiveportal.php:661
+#: usr/local/www/services_captiveportal.php:659
+#: usr/local/www/services_captiveportal.php:660
+#: usr/local/www/services_captiveportal.php:676
+#: usr/local/www/services_captiveportal.php:676
+msgid ""
+"If you have a second RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "2å°ç›®ã®RADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:639
+msgid "Tertiary RADIUS server"
+msgstr "三次RADIUSサーãƒãƒ¼"
+
+#: usr/local/www/services_captiveportal.php:644
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:681
+#: usr/local/www/services_captiveportal.php:682
+#: usr/local/www/services_captiveportal.php:698
+#: usr/local/www/services_captiveportal.php:698
+msgid ""
+"If you have a third RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "サードRADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:658
+msgid "Quaternary RADIUS server"
+msgstr "第四紀ã®RADIUSサーãƒ"
+
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:702
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/services_captiveportal.php:701
+#: usr/local/www/services_captiveportal.php:717
+#: usr/local/www/services_captiveportal.php:717
+msgid ""
+"If you have a fourth RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr "ã“ã“ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ "4番目ã®RADIUSサーãƒãŒã‚ã‚‹å ´åˆã¯ã€ãã®IPアドレスを入力ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:677
+#: usr/local/www/services_captiveportal.php:719
+#: usr/local/www/services_captiveportal.php:717
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/services_captiveportal.php:731
+#: usr/local/www/services_captiveportal.php:731
+msgid "Accounting"
+msgstr "会計"
+
+#: usr/local/www/services_captiveportal.php:682
+#: usr/local/www/services_captiveportal.php:724
+#: usr/local/www/services_captiveportal.php:722
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:736
+msgid "send RADIUS accounting packets"
+msgstr "RADIUSアカウンティングパケットをé€ä¿¡"
+
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:725
+#: usr/local/www/services_captiveportal.php:723
+#: usr/local/www/services_captiveportal.php:721
+#: usr/local/www/services_captiveportal.php:737
+#: usr/local/www/services_captiveportal.php:737
+msgid ""
+"If this is enabled, RADIUS accounting packets will be sent to the primary "
+"RADIUS server."
+msgstr "RADIUSサーãƒã¯ã€Œã“ã‚ŒãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ RADIUSアカウンティングパケットãŒãƒ—ライマリーã«é€ä¿¡ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:686
+#: usr/local/www/services_captiveportal.php:728
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:724
+#: usr/local/www/services_captiveportal.php:740
+#: usr/local/www/services_captiveportal.php:740
+msgid "Accounting port"
+msgstr "アカウンティングãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_captiveportal.php:688
+#: usr/local/www/services_captiveportal.php:730
+#: usr/local/www/services_captiveportal.php:728
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:742
+#: usr/local/www/services_captiveportal.php:742
+msgid "Leave blank to use the default port (1813)."
+msgstr "デフォルトã®ãƒãƒ¼ãƒˆï¼ˆ 1813 )を使用ã™ã‚‹ã‚ˆã†ã«ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:694
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:734
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:762
+#: usr/local/www/services_captiveportal.php:762
+msgid "Reauthentication"
+msgstr "å†èªè¨¼"
+
+#: usr/local/www/services_captiveportal.php:699
+#: usr/local/www/services_captiveportal.php:741
+#: usr/local/www/services_captiveportal.php:739
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:764
+#: usr/local/www/services_captiveportal.php:764
+msgid "Reauthenticate connected users every minute"
+msgstr "接続中ã®ãƒ¦ãƒ¼ã‚¶æ¯Žåˆ†å†èªè¨¼"
+
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/services_captiveportal.php:742
+#: usr/local/www/services_captiveportal.php:740
+#: usr/local/www/services_captiveportal.php:749
+#: usr/local/www/services_captiveportal.php:765
+#: usr/local/www/services_captiveportal.php:765
+msgid ""
+"If reauthentication is enabled, Access-Requests will be sent to the RADIUS "
+"server for each user that is logged in every minute. If an Access-Reject is "
+"received for a user, that user is disconnected from the captive portal "
+"immediately."
+msgstr "毎分ログインã—ã¦ã„るユーザーã”ã¨ã«ã‚µãƒ¼ãƒãƒ¼"å†èªè¨¼ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€Access -è¦æ±‚ã¯ã€RADIUSã«é€ä¿¡ã•ã‚Œã¾ã™ã€ 。アクセス拒å¦ã•ã‚ŒãŸå ´åˆã€ã™ãã«ã€Œåˆ©ç”¨è€…ã®ãŸã‚ã«å—ä¿¡ã™ã‚‹ã¨ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‹ã‚‰åˆ‡æ–­ã•ã‚Œã¦ã„る〠。"
+
+#: usr/local/www/services_captiveportal.php:704
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:744
+#: usr/local/www/services_captiveportal.php:732
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:748
+msgid "Accounting updates"
+msgstr "会計ã®ã‚¢ãƒƒãƒ—デート"
+
+#: usr/local/www/services_captiveportal.php:706
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:734
+#: usr/local/www/services_captiveportal.php:750
+#: usr/local/www/services_captiveportal.php:750
+msgid "no accounting updates"
+msgstr "アカウンティングアップデートã¾ã›ã‚“"
+
+#: usr/local/www/services_captiveportal.php:707
+#: usr/local/www/services_captiveportal.php:749
+#: usr/local/www/services_captiveportal.php:747
+#: usr/local/www/services_captiveportal.php:735
+#: usr/local/www/services_captiveportal.php:751
+#: usr/local/www/services_captiveportal.php:751
+msgid "stop/start accounting"
+msgstr "åœæ­¢/アカウンティング開始"
+
+#: usr/local/www/services_captiveportal.php:708
+#: usr/local/www/services_captiveportal.php:750
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:752
+#: usr/local/www/services_captiveportal.php:752
+msgid "interim update"
+msgstr "中間更新"
+
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/services_captiveportal.php:757
+#: usr/local/www/services_captiveportal.php:755
+#: usr/local/www/services_captiveportal.php:753
+#: usr/local/www/services_captiveportal.php:769
+#: usr/local/www/services_captiveportal.php:769
+msgid "RADIUS MAC authentication"
+msgstr "RADIUS MACèªè¨¼"
+
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/services_captiveportal.php:762
+#: usr/local/www/services_captiveportal.php:760
+#: usr/local/www/services_captiveportal.php:755
+#: usr/local/www/services_captiveportal.php:771
+#: usr/local/www/services_captiveportal.php:771
+msgid "Enable RADIUS MAC authentication"
+msgstr "RADIUS MACèªè¨¼ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:721
+#: usr/local/www/services_captiveportal.php:763
+#: usr/local/www/services_captiveportal.php:761
+#: usr/local/www/services_captiveportal.php:756
+#: usr/local/www/services_captiveportal.php:772
+#: usr/local/www/services_captiveportal.php:772
+msgid ""
+"If this option is enabled, the captive portal will try to authenticate users "
+"by sending their MAC address as the username and the password entered below "
+"to the RADIUS server."
+msgstr "ユーザåã¨RADIUSサーãƒã«ã€Œä¸‹ã®å…¥åŠ›ã•ã‚ŒãŸãƒ‘スワードãªã©ã®MACアドレスをé€ä¿¡ã™ã‚‹ã“ã¨ã§ã€ "ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’èªè¨¼ã—よã†ã¨ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:732
+#: usr/local/www/services_captiveportal.php:774
+#: usr/local/www/services_captiveportal.php:772
+#: usr/local/www/services_captiveportal.php:743
+#: usr/local/www/services_captiveportal.php:759
+#: usr/local/www/services_captiveportal.php:759
+msgid "RADIUS options"
+msgstr "RADIUSã®ã‚ªãƒ—ション"
+
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:778
+#: usr/local/www/services_captiveportal.php:776
+#: usr/local/www/services_captiveportal.php:764
+#: usr/local/www/services_captiveportal.php:780
+#: usr/local/www/services_captiveportal.php:780
+msgid "RADIUS NAS IP attribute"
+msgstr "RADIUSã®NAS IPアトリビュート"
+
+#: usr/local/www/services_captiveportal.php:766
+#: usr/local/www/services_captiveportal.php:808
+#: usr/local/www/services_captiveportal.php:806
+#: usr/local/www/services_captiveportal.php:794
+#: usr/local/www/services_captiveportal.php:810
+#: usr/local/www/services_captiveportal.php:810
+msgid "Choose the IP to use for calling station attribute."
+msgstr "駅属性を呼ã³å‡ºã™ãŸã‚ã«ä½¿ç”¨ã™ã‚‹IPã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:771
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:811
+#: usr/local/www/services_captiveportal.php:799
+#: usr/local/www/services_captiveportal.php:815
+#: usr/local/www/services_captiveportal.php:815
+msgid "Session-Timeout"
+msgstr "セッションタイムアウト"
+
+#: usr/local/www/services_captiveportal.php:772
+#: usr/local/www/services_captiveportal.php:814
+#: usr/local/www/services_captiveportal.php:812
+#: usr/local/www/services_captiveportal.php:800
+#: usr/local/www/services_captiveportal.php:816
+#: usr/local/www/services_captiveportal.php:816
+msgid "Use RADIUS Session-Timeout attributes"
+msgstr "RADIUSを使用セッションタイムアウト属性"
+
+#: usr/local/www/services_captiveportal.php:773
+#: usr/local/www/services_captiveportal.php:815
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:817
+#: usr/local/www/services_captiveportal.php:817
+msgid ""
+"When this is enabled, clients will be disconnected after the amount of time "
+"retrieved from the RADIUS Session-Timeout attribute."
+msgstr "RADIUSセッションタイムアウト属性ã‹ã‚‰å–å¾—ã—ãŸã€Œã“れを有効ã«ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€æ™‚é–“ã®çµŒéŽå¾Œã«åˆ‡æ–­ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:789
+#: usr/local/www/services_captiveportal.php:831
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:817
+#: usr/local/www/services_captiveportal.php:833
+#: usr/local/www/services_captiveportal.php:833
+#, php-format
+msgid ""
+"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-"
+"Station-Id will be set to the client's IP address and the Called-Station-Id "
+"to the client's MAC address. Default behavior is Calling-Station-Id = "
+"client's MAC address and Called-Station-Id = %s's WAN IP address."
+msgstr "「RADIUSタイプã¯ã‚¢ã‚¯ã‚»ã‚¹Â·ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å€¤ã«ã€ã‚·ã‚¹ã‚³ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯å‘¼ã³å‡ºã— - 「ステーションIDã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®IPアドレスã¨å‘¼ã°ã‚Œé§…ã®ã‚¤ãƒ‰ã€ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®MACアドレスã«è¨­å®šã•ã‚Œã¾ã™ã€‚デフォルトã®å‹•ä½œã¯ã€ç™ºå‘¼å±€ã§ã‚り〠-ID = "クライアントã®MACアドレスã¨å‘¼ã°ã‚Œé§…ã®ã‚¤ãƒ‰= %sã®WAN IPアドレス。"
+
+#: usr/local/www/services_captiveportal.php:796
+#: usr/local/www/services_captiveportal.php:838
+#: usr/local/www/services_captiveportal.php:836
+#: usr/local/www/services_captiveportal.php:834
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/services_captiveportal.php:850
+msgid "MAC address format"
+msgstr "MACアドレス形å¼"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "singledash"
+msgstr "singledash"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "ietf"
+msgstr "IETF"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "cisco"
+msgstr "シスコ"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "unformatted"
+msgstr "未フォーマットã®"
+
+#: usr/local/www/services_captiveportal.php:810
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/services_captiveportal.php:849
+#: usr/local/www/services_captiveportal.php:865
+#: usr/local/www/services_captiveportal.php:865
+msgid ""
+"This option changes the MAC address format used in the whole RADIUS system. "
+"Change this if you also"
+msgstr ""ã“ã®ã‚ªãƒ—ションã¯ã€å…¨ä½“ã®RADIUSシステムã§ä½¿ç”¨ã•ã‚Œã‚‹MACアドレス形å¼ãŒå¤‰æ›´ã•ã‚Œã¾ã™ã€‚ 「ã‚ãªãŸã‚‚ã‚ã‚Œã°ã€ã“れを変更ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:811
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:851
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/services_captiveportal.php:866
+#: usr/local/www/services_captiveportal.php:866
+msgid "need to change the username format for RADIUS MAC authentication."
+msgstr "RADIUS MACèªè¨¼ç”¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®å½¢å¼ã‚’変更ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:812
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:851
+#: usr/local/www/services_captiveportal.php:867
+#: usr/local/www/services_captiveportal.php:867
+msgid "default:"
+msgstr "デフォルト:"
+
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:868
+#: usr/local/www/services_captiveportal.php:868
+msgid "singledash:"
+msgstr "singledash :"
+
+#: usr/local/www/services_captiveportal.php:814
+#: usr/local/www/services_captiveportal.php:856
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:869
+#: usr/local/www/services_captiveportal.php:869
+msgid "ietf:"
+msgstr "IETF :"
+
+#: usr/local/www/services_captiveportal.php:815
+#: usr/local/www/services_captiveportal.php:857
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:870
+#: usr/local/www/services_captiveportal.php:870
+msgid "cisco:"
+msgstr "シスコ:"
+
+#: usr/local/www/services_captiveportal.php:816
+#: usr/local/www/services_captiveportal.php:858
+#: usr/local/www/services_captiveportal.php:856
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:871
+#: usr/local/www/services_captiveportal.php:871
+msgid "unformatted:"
+msgstr "フォーマットã•ã‚Œã¦ã„ãªã„:"
+
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/services_captiveportal.php:861
+#: usr/local/www/services_captiveportal.php:859
+#: usr/local/www/services_captiveportal.php:877
+#: usr/local/www/services_captiveportal.php:877
+msgid "HTTPS login"
+msgstr "HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³"
+
+#: usr/local/www/services_captiveportal.php:822
+#: usr/local/www/services_captiveportal.php:864
+#: usr/local/www/services_captiveportal.php:862
+#: usr/local/www/services_captiveportal.php:880
+#: usr/local/www/services_captiveportal.php:880
+msgid "Enable HTTPS login"
+msgstr "HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’å¯èƒ½ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:865
+msgid ""
+"If enabled, the username and password will be transmitted over an HTTPS "
+"connection to protect against eavesdroppers. A server name, certificate and "
+"matching private key must also be specified below."
+msgstr "ç›—è´è€…ã‹ã‚‰ä¿è­·ã™ã‚‹ãŸã‚ã®æŽ¥ç¶šã€ã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯ã€HTTPSを介ã—ã¦é€ä¿¡ã•ã‚Œã¾ã™ã€ 。サーãƒãƒ¼åã€è¨¼æ˜Žæ›¸ã¨ã€Œä¸€è‡´ã™ã‚‹ç§˜å¯†éµã¯ã€ä»¥ä¸‹ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:826
+#: usr/local/www/services_captiveportal.php:868
+#: usr/local/www/services_captiveportal.php:866
+#: usr/local/www/services_captiveportal.php:884
+#: usr/local/www/services_captiveportal.php:884
+msgid "HTTPS server name"
+msgstr "HTTPSサーãƒå"
+
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:871
+#: usr/local/www/services_captiveportal.php:869
+#: usr/local/www/services_captiveportal.php:887
+#: usr/local/www/services_captiveportal.php:887
+#, php-format
+msgid ""
+"This name will be used in the form action for the HTTPS POST and should "
+"match the Common Name (CN) in your certificate (otherwise, the client "
+"browser will most likely display a security warning). Make sure captive "
+"portal clients can resolve this name in DNS and verify on the client that "
+"the IP resolves to the correct interface IP on %s."
+msgstr "「ã“ã®åå‰ã¯ã€HTTPS POSTã®ãƒ•ã‚©ãƒ¼ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§ä½¿ç”¨ã•ã‚Œã€å¿…è¦ãŒã‚ã‚Šã¾ã™"ã‚ãªãŸã®è¨¼æ˜Žæ›¸ã®å…±é€šå(CN )ã¨ä¸€è‡´ã™ã‚‹ï¼ˆãã†ã§ãªã‘ã‚Œã°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã€Œãƒ–ラウザ最もå¯èƒ½æ€§ã®é«˜ã„セキュリティ警告ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ï¼‰ 。必ãšè™œã€ãƒãƒ¼ã‚¿ãƒ«ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’ã™ã‚‹ã“ã¨ãŒã§ãDNSã«ã“ã®åå‰ã‚’解決ã—〠IPãŒ%s.上ã®æ­£ã—ã„インターフェイスIPã«è§£æ±ºã•ã‚Œã‚‹ã€ã“ã¨ã‚’クライアントã«ç¢ºèªã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal.php:832
+#: usr/local/www/services_captiveportal.php:874
+msgid "HTTPS certificate"
+msgstr "HTTPS証明書"
+
+#: usr/local/www/services_captiveportal.php:836
+#: usr/local/www/services_captiveportal.php:878
+msgid "Paste a signed certificate in X.509 PEM format here."
+msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®ç½²å付ã証明書を貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:839
+#: usr/local/www/services_captiveportal.php:881
+msgid "HTTPS private key"
+msgstr "HTTPSã®ç§˜å¯†éµ"
+
+#: usr/local/www/services_captiveportal.php:843
+#: usr/local/www/services_captiveportal.php:885
+msgid "Paste an RSA private key in PEM format here."
+msgstr "ã“ã“ã«PEMå½¢å¼ã®RSA秘密éµã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:846
+#: usr/local/www/services_captiveportal.php:888
+msgid "HTTPS intermediate certificate"
+msgstr "HTTPSã®ä¸­é–“証明書"
+
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/system_camanager.php:406
+#: usr/local/www/system_certmanager.php:515
+#: usr/local/www/system_certmanager.php:614
+#: usr/local/www/services_captiveportal.php:892
+#: usr/local/www/system_camanager.php:413
+#: usr/local/www/system_certmanager.php:623
+#: usr/local/www/system_certmanager.php:624
+#: usr/local/www/system_camanager.php:413
+#: usr/local/www/system_certmanager.php:624
+msgid "Paste a certificate in X.509 PEM format here."
+msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®è¨¼æ˜Žæ›¸ã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:895
+#: usr/local/www/services_captiveportal.php:891
+#: usr/local/www/services_captiveportal.php:893
+#: usr/local/www/services_captiveportal.php:909
+#: usr/local/www/services_captiveportal.php:909
+msgid "Portal page contents"
+msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã®å†…容"
+
+#: usr/local/www/services_captiveportal.php:865
+#: usr/local/www/services_captiveportal.php:899
+#: usr/local/www/services_captiveportal.php:913
+#: usr/local/www/services_captiveportal.php:910
+#: usr/local/www/services_captiveportal.php:944
+#: usr/local/www/services_captiveportal.php:958
+#: usr/local/www/services_captiveportal.php:906
+#: usr/local/www/services_captiveportal.php:940
+#: usr/local/www/services_captiveportal.php:954
+#: usr/local/www/services_captiveportal.php:908
+#: usr/local/www/services_captiveportal.php:942
+#: usr/local/www/services_captiveportal.php:956
+#: usr/local/www/services_captiveportal.php:924
+#: usr/local/www/services_captiveportal.php:972
+#: usr/local/www/services_captiveportal.php:924
+#: usr/local/www/services_captiveportal.php:958
+#: usr/local/www/services_captiveportal.php:972
+msgid "View current page"
+msgstr "ç¾åœ¨ã®ãƒšãƒ¼ã‚¸ã‚’表示"
+
+#: usr/local/www/services_captiveportal.php:871
+#: usr/local/www/services_captiveportal.php:916
+#: usr/local/www/services_captiveportal.php:912
+#: usr/local/www/services_captiveportal.php:914
+#: usr/local/www/services_captiveportal.php:930
+#: usr/local/www/services_captiveportal.php:930
+#, php-format
+msgid ""
+"Upload an HTML/PHP file for the portal page here (leave blank to keep the "
+"current one). Make sure to include a form (POST to %1$s) with a submit "
+"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and "
+"%6$s and/or %7$s input fields if authentication is enabled, otherwise it "
+"will always fail."
+msgstr "「 (ç¾åœ¨ã®1ã«ä¿ã¤ãŸã‚ã«ã€ç©ºç™½ã®ã¾ã¾ã«ï¼‰ã“ã“ã§ã€ãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã®HTML / PHPファイルã®ã‚¢ãƒƒãƒ—ロード〠。é€ä¿¡ã€ãƒœã‚¿ãƒ³ï¼ˆ %2$s )をæŒã¤ãƒ•ã‚©ãƒ¼ãƒ ï¼ˆã¯%1$sã«å¯¾ã—ã¦POST )㨠$ S %3$sãŠã‚ˆã³ï¼… 4ã§éš ã—フィールドãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ãŒã€‚ $ S ï¼… 5ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ "èªè¨¼ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ï¼… 6 $ sãŠã‚ˆã³/ã¾ãŸã¯ï¼… 7 $ sã®å…¥åŠ›ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ ã€ãれ以外ã®å ´åˆã¯ã€ã€Œå¸¸ã«å¤±æ•—ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:882
+#: usr/local/www/services_captiveportal.php:927
+#: usr/local/www/services_captiveportal.php:923
+#: usr/local/www/services_captiveportal.php:925
+#: usr/local/www/services_captiveportal.php:941
+#: usr/local/www/services_captiveportal.php:941
+msgid "Example code for the form:"
+msgstr "フォームã®ã‚µãƒ³ãƒ—ルコード:"
+
+#: usr/local/www/services_captiveportal.php:894
+#: usr/local/www/services_captiveportal.php:939
+#: usr/local/www/services_captiveportal.php:935
+#: usr/local/www/services_captiveportal.php:937
+#: usr/local/www/services_captiveportal.php:953
+#: usr/local/www/services_captiveportal.php:953
+msgid "error page"
+msgstr "エラーページ"
+
+#: usr/local/www/services_captiveportal.php:895
+#: usr/local/www/services_captiveportal.php:909
+#: usr/local/www/services_captiveportal.php:940
+#: usr/local/www/services_captiveportal.php:954
+#: usr/local/www/services_captiveportal.php:936
+#: usr/local/www/services_captiveportal.php:950
+#: usr/local/www/services_captiveportal.php:938
+#: usr/local/www/services_captiveportal.php:952
+#: usr/local/www/services_captiveportal.php:968
+#: usr/local/www/services_captiveportal.php:954
+#: usr/local/www/services_captiveportal.php:968
+msgid "contents"
+msgstr "中身"
+
+#: usr/local/www/services_captiveportal.php:903
+#: usr/local/www/services_captiveportal.php:948
+#: usr/local/www/services_captiveportal.php:944
+#: usr/local/www/services_captiveportal.php:946
+#: usr/local/www/services_captiveportal.php:962
+#: usr/local/www/services_captiveportal.php:962
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed when an "
+"authentication error occurs. You may include"
+msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã€ã—ãŸã¨ãã«ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸHTML / PHPファイルã®å†…容ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€ 。ã‚ãªãŸãŒå«ã¾ã‚Œã‚‹"
+
+#: usr/local/www/services_captiveportal.php:904
+#: usr/local/www/services_captiveportal.php:949
+#: usr/local/www/services_captiveportal.php:945
+#: usr/local/www/services_captiveportal.php:947
+#: usr/local/www/services_captiveportal.php:963
+#: usr/local/www/services_captiveportal.php:963
+msgid ""
+"which will be replaced by the error or reply messages from the RADIUS "
+"server, if any."
+msgstr ""ã©ã®ã‚¨ãƒ©ãƒ¼ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã‹RADIUSã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®è¿”ä¿¡ã€ãŒã‚ã‚Œã°ã€ã‚µãƒ¼ãƒã€‚"
+
+#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86
+#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952
+#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948
+#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104
+#: usr/local/www/services_captiveportal.php:966
+#: usr/local/www/services_captiveportal.php:966 usr/local/www/fbegin.inc:104
+msgid "Logout"
+msgstr "ログアウト"
+
+#: usr/local/www/services_captiveportal.php:917
+#: usr/local/www/services_captiveportal.php:962
+#: usr/local/www/services_captiveportal.php:958
+#: usr/local/www/services_captiveportal.php:960
+#: usr/local/www/services_captiveportal.php:976
+#: usr/local/www/services_captiveportal.php:976
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed on "
+"authentication success when the logout popup is enabled."
+msgstr "ログアウトãƒãƒƒãƒ—アップãŒæœ‰åŠ¹ãªå ´åˆã«èªè¨¼æˆåŠŸã€ã¯ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸHTML / PHPファイルã®å†…容ãŒä¸Šã«è¡¨ç¤ºã•ã‚Œã‚‹"。"
+
+#: usr/local/www/services_captiveportal.php:930
+#: usr/local/www/services_captiveportal.php:975
+#: usr/local/www/services_captiveportal.php:971
+#: usr/local/www/services_captiveportal.php:973
+#: usr/local/www/services_captiveportal.php:989
+#: usr/local/www/services_captiveportal.php:989
+msgid ""
+"Changing any settings on this page will disconnect all clients! Don't forget "
+"to enable the DHCP server on your captive portal interface! Make sure that "
+"the default/maximum DHCP lease time is higher than the timeout entered on "
+"this page. Also, the DNS forwarder needs to be enabled for DNS lookups by "
+"unauthenticated clients to work."
+msgstr "「ã“ã®ãƒšãƒ¼ã‚¸ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒåˆ‡æ–­ã•ã‚Œã¾ã™ã€‚ ï¼å¿˜ã‚Œã¦ã¯ã„ã‘ãªã„"ã‚ãªãŸã®ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ 上ã®DHCPサーãƒã‚’有効ã«ã™ã‚‹ãŸã‚ã«ï¼ã“ã®ãƒšãƒ¼ã‚¸ã®ã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ/最大DHCPリース時間ãŒã§å…¥åŠ›ã•ã‚ŒãŸã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚ˆã‚Šã‚‚高ããªã£ã¦ã„ã‚‹ã€ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã¾ãŸã€ DNSフォワーダãŒå‹•ä½œã™ã‚‹ã‚ˆã†ã«èªè¨¼ã•ã‚Œã¦ã„ãªã„クライアントã€ã§DNSルックアップを有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_filemanager.php:101
+#: usr/local/www/services_captiveportal_filemanager.php:98
+#: usr/local/www/services_captiveportal_filemanager.php:98
+#, php-format
+msgid "A file with the name '%s' already exists."
+msgstr "å' %s'ã‚’æŒã¤ãƒ•ã‚¡ã‚¤ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_filemanager.php:108
+#: usr/local/www/services_captiveportal_filemanager.php:105
+#: usr/local/www/services_captiveportal_filemanager.php:105
+msgid "The total size of all files uploaded may not exceed "
+msgstr "アップロードã•ã‚ŒãŸã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®åˆè¨ˆã‚µã‚¤ã‚ºãŒè¶…ãˆã¦ã¯ãªã‚‰ãªã„"
+
+#: usr/local/www/services_captiveportal_filemanager.php:163
+#: usr/local/www/system_firmware_restorefullbackup.php:141
+#: usr/local/www/services_captiveportal_filemanager.php:160
+#: usr/local/www/diag_system_pftop.php:140
+#: usr/local/www/diag_system_pftop.php:159
+#: usr/local/www/diag_system_pftop.php:140
+#: usr/local/www/diag_system_pftop.php:159
+#: usr/local/www/services_captiveportal_filemanager.php:160
+#: usr/local/www/system_firmware_restorefullbackup.php:141
+msgid "Size"
+msgstr "サイズ"
+
+#: usr/local/www/services_captiveportal_filemanager.php:168
+#: usr/local/www/services_captiveportal_filemanager.php:207
+#: usr/local/www/services_captiveportal_filemanager.php:165
+#: usr/local/www/services_captiveportal_filemanager.php:204
+#: usr/local/www/services_captiveportal_filemanager.php:165
+#: usr/local/www/services_captiveportal_filemanager.php:204
+msgid "add file"
+msgstr "ファイルを追加"
+
+#: usr/local/www/services_captiveportal_filemanager.php:179
+#: usr/local/www/services_captiveportal_filemanager.php:176
+#: usr/local/www/services_captiveportal_filemanager.php:176
+msgid "Do you really want to delete this file?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_captiveportal_filemanager.php:179
+#: usr/local/www/services_captiveportal_filemanager.php:176
+#: usr/local/www/services_captiveportal_filemanager.php:176
+msgid "delete file"
+msgstr "ファイルを削除ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_filemanager.php:186
+#: usr/local/www/services_captiveportal_filemanager.php:183
+#: usr/local/www/services_captiveportal_filemanager.php:183
+msgid "TOTAL"
+msgstr "åˆè¨ˆ"
+
+#: usr/local/www/services_captiveportal_filemanager.php:197
+#: usr/local/www/services_captiveportal_filemanager.php:194
+#: usr/local/www/services_captiveportal_filemanager.php:194
+msgid "cancel"
+msgstr "キャンセル"
+
+#: usr/local/www/services_captiveportal_filemanager.php:217
+#: usr/local/www/services_captiveportal_filemanager.php:214
+#: usr/local/www/services_captiveportal_filemanager.php:214
+msgid ""
+"Any files that you upload here with the filename prefix of captiveportal- "
+"will be made available in the root directory of the captive portal HTTP(S) "
+"server. You may reference them directly from your portal page HTML code "
+"using relative paths. Example: you've uploaded an image with the name "
+"'captiveportal-test.jpg' using the file manager. Then you can include it in "
+"your portal page like this:"
+msgstr "「ã‚ãªãŸãŒãƒ•ã‚¡ã‚¤ãƒ«åã®æŽ¥é ­è¾žã§ã€ã“ã“ã§ã‚¢ãƒƒãƒ—ロードã—ãŸã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«captiveportal -ã€ã¯ã€Œ 。サーãƒãƒ¼ã¯ã€ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã®HTMLコードã‹ã‚‰ç›´æŽ¥å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãる「キャプティブãƒãƒ¼ã‚¿ãƒ«HTTP(S)ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ç›¸å¯¾ãƒ‘スを使用ã—ãŸã€‚例:åå‰ã®ç”»åƒã‚¢ãƒƒãƒ—ロードã—ãŸã“ã®ã‚ˆã†ãªãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã€Œãƒ•ã‚¡ã‚¤ãƒ«ãƒžãƒãƒ¼ã‚¸ãƒ£ã‚’使ã£ã¦' captiveportal - test.jpgã¨ã„ã†ã®'次ã«ã€ãれをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 〠:"
+
+#: usr/local/www/services_captiveportal_filemanager.php:224
+#: usr/local/www/services_captiveportal_filemanager.php:221
+#: usr/local/www/services_captiveportal_filemanager.php:221
+msgid ""
+"In addition, you can also upload .php files for execution. You can pass the "
+"filename to your custom page from the initial page by using text similar to:"
+msgstr "「加ãˆã¦ã€ã¾ãŸã‚¢ãƒƒãƒ—ロードã§ãã‚‹PHPファイルを実行ã™ã‚‹ãŸã‚ã«ã‚ãªãŸãŒæ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ ã€ã®ã‚ˆã†ãªãƒ†ã‚­ã‚¹ãƒˆã‚’使ã£ã¦ã€æœ€åˆã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã‚«ã‚¹ã‚¿ãƒ ãƒšãƒ¼ã‚¸ã«ãƒ•ã‚¡ã‚¤ãƒ«åを。"
+
+#: usr/local/www/services_captiveportal_filemanager.php:227
+#: usr/local/www/services_captiveportal_filemanager.php:224
+#: usr/local/www/services_captiveportal_filemanager.php:224
+msgid "Acceptable usage policy"
+msgstr "許容å¯èƒ½ãªä½¿ç”¨ãƒãƒªã‚·ãƒ¼"
+
+#: usr/local/www/services_captiveportal_filemanager.php:229
+#: usr/local/www/services_captiveportal_filemanager.php:226
+#: usr/local/www/services_captiveportal_filemanager.php:226
+#, php-format
+msgid "The total size limit for all files is %s."
+msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®åˆè¨ˆã‚µã‚¤ã‚ºã®åˆ¶é™ã¯%s.ã§ã™"
+
+#: usr/local/www/diag_limiter_info.php:46
+#: usr/local/www/diag_limiter_info.php:46
+msgid "Diagnostics: Limiter Info"
+msgstr "診断:リミッター情報"
+
+#: usr/local/www/diag_limiter_info.php:108
+#: usr/local/www/diag_limiter_info.php:109
+#: usr/local/www/diag_limiter_info.php:109
+msgid "Gathering Limiter information, please wait..."
+msgstr "リミッター情報をåŽé›†ã—ã¦ã„ã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202
+#: usr/local/www/firewall_nat.php:205 usr/local/www/firewall_nat.php:205
+msgid "Src. addr"
+msgstr "SRC 。 ADDR"
+
+#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203
+#: usr/local/www/firewall_nat.php:206 usr/local/www/firewall_nat.php:206
+msgid "Src. ports"
+msgstr "SRC 。ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204
+#: usr/local/www/firewall_nat.php:207 usr/local/www/firewall_nat.php:207
+msgid "Dest. addr"
+msgstr "DEST 。 ADDR"
+
+#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205
+#: usr/local/www/firewall_nat.php:208 usr/local/www/firewall_nat.php:208
+msgid "Dest. ports"
+msgstr "DEST 。ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206
+#: usr/local/www/firewall_nat.php:209 usr/local/www/firewall_nat.php:209
+msgid "NAT IP"
+msgstr "NAT IP"
+
+#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207
+#: usr/local/www/firewall_nat.php:210 usr/local/www/firewall_nat.php:210
+msgid "NAT Ports"
+msgstr "NATã®ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265
+#: usr/local/www/firewall_nat.php:268 usr/local/www/firewall_nat.php:268
+msgid "All traffic matching this NAT entry is passed"
+msgstr "ã“ã®NATエントリã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒæ¸¡ã•ã‚Œã¾ã™"
+
+#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267
+#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270
+msgid "Firewall rule ID"
+msgstr "ファイアウォールã®ãƒ«ãƒ¼ãƒ«ID"
+
+#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267
+#: usr/local/www/firewall_nat.php:270 usr/local/www/firewall_nat.php:270
+msgid "is managed with this rule"
+msgstr "ã“ã®ãƒ«ãƒ¼ãƒ«ã§ç®¡ç†ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454
+msgid "Do you really want to delete this rule?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362
+#: usr/local/www/firewall_nat.php:365 usr/local/www/firewall_nat.php:365
+msgid "linked rule"
+msgstr "リンクã•ã‚ŒãŸãƒ«ãƒ¼ãƒ«"
+
+#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73
+#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88
+#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74
+#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91
+#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec_spd.php:73
+#: usr/local/www/diag_ipsec_sad.php:74
+msgid "Overview"
+msgstr "概è¦"
+
+#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73
+#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90
+#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:92
+#: usr/local/www/diag_ipsec_spd.php:74 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/diag_ipsec_sad.php:75
+msgid "SAD"
+msgstr "SAD"
+
+#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75
+#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74
+#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91
+#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75
+#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec.php:93
+#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:75
+#: usr/local/www/diag_ipsec_sad.php:76
+msgid "SPD"
+msgstr "SPD"
+
+#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76
+#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77
+#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94
+#: usr/local/www/diag_ipsec.php:94 usr/local/www/diag_ipsec_spd.php:76
+#: usr/local/www/diag_ipsec_sad.php:77
+msgid "Logs"
+msgstr "ログ"
+
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103
+#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106
+#: usr/local/www/diag_ipsec.php:106
+msgid "Remote IP"
+msgstr "リモートIP"
+
+#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419
+#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445
+#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511
+#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533
+#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533
+msgid "Local Network"
+msgstr "ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461
+#: usr/local/www/vpn_openvpn_client.php:762
+#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105
+#: usr/local/www/vpn_openvpn_server.php:1197
+#: usr/local/www/vpn_ipsec_phase2.php:487
+#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106
+#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:610 usr/local/www/diag_ipsec.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:610
+msgid "Remote Network"
+msgstr "é éš”ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135
+#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136
+#: usr/local/www/diag_ipsec_spd.php:145 usr/local/www/diag_ipsec_spd.php:145
+#: usr/local/www/diag_ipsec_sad.php:136
+msgid "You can configure your IPsec"
+msgstr "ã‚ãªãŸã®IPsecを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91
+#: usr/local/www/diag_ipsec_sad.php:91
+msgid "SPI"
+msgstr "SPI"
+
+#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92
+#: usr/local/www/diag_ipsec_sad.php:92
+msgid "Enc. alg."
+msgstr "ENC 。 ALG 。"
+
+#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93
+#: usr/local/www/diag_ipsec_sad.php:93
+msgid "Auth. alg."
+msgstr "èªè¨¼ã€‚ ALG 。"
+
+#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94
+#: usr/local/www/diag_ipsec_sad.php:94
+msgid "Data"
+msgstr "データ"
+
+#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113
+#: usr/local/www/diag_ipsec_sad.php:113
+msgid "Do you really want to delete this security association?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122
+#: usr/local/www/diag_ipsec_sad.php:122
+msgid "No IPsec security associations."
+msgstr "ã„ã„ãˆIPsecセキュリティアソシエーションã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_ip.php:123
+#: usr/local/www/services_captiveportal_ip.php:163
+#: usr/local/www/services_captiveportal_hostname.php:128
+#: usr/local/www/services_captiveportal_hostname.php:164
+#: usr/local/www/services_captiveportal_ip.php:121
+#: usr/local/www/services_captiveportal_ip.php:161
+#: usr/local/www/services_captiveportal_hostname.php:126
+#: usr/local/www/services_captiveportal_hostname.php:162
+#: usr/local/www/services_captiveportal_ip.php:121
+#: usr/local/www/services_captiveportal_ip.php:161
+#: usr/local/www/services_captiveportal_hostname.php:126
+#: usr/local/www/services_captiveportal_hostname.php:162
+msgid "add address"
+msgstr "アドレスを追加"
+
+#: usr/local/www/services_captiveportal_ip.php:153
+#: usr/local/www/services_captiveportal_hostname.php:154
+#: usr/local/www/services_captiveportal_ip.php:151
+#: usr/local/www/services_captiveportal_hostname.php:152
+#: usr/local/www/services_captiveportal_ip.php:151
+#: usr/local/www/services_captiveportal_hostname.php:152
+msgid "edit address"
+msgstr "編集アドレス"
+
+#: usr/local/www/services_captiveportal_ip.php:154
+#: usr/local/www/services_captiveportal_hostname.php:155
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+msgid "Do you really want to delete this address?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_captiveportal_ip.php:154
+#: usr/local/www/services_captiveportal_hostname.php:155
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+msgid "delete address"
+msgstr "アドレスを削除"
+
+#: usr/local/www/services_captiveportal_ip.php:172
+#: usr/local/www/services_captiveportal_ip.php:170
+#: usr/local/www/services_captiveportal_ip.php:170
+msgid ""
+"Adding allowed IP addresses will allow IP access to/from these addresses "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example. By specifying <em>from</em> addresses, it "
+"may be used to always allow pass-through access from a client behind the "
+"captive portal."
+msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ã€Œè¨±å¯ã™ã‚‹IPアドレスを追加ã™ã‚‹ã¨ã€ã™ã‚‹/ã“れらã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®IPアクセスを許å¯ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã€ä¾‹ãˆã°ã€åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ã€Œ Webサーãƒãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã¾ãŸã¯DNSサーãƒãƒ¼ç”¨ã®ç”»åƒã‚’æä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹"ã“ã¨ãŒã§ãã¾ã™ã€‚ u003c/ emu003eã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®u003cemu003e指定ã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€ã¯ã€å¸¸ã«èƒŒå¾Œã«ã‚るクライアントã‹ã‚‰ã®ãƒ‘ススルーã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãŸã‚ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãる〠。"
+
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "All connections"
+msgstr "ã™ã¹ã¦ã®æŽ¥ç¶š"
+
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+msgid "the IP address are allowed"
+msgstr "IPアドレスã¯è¨±å¯ã•ã‚Œã¦ã„"
+
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:182
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "from"
+msgstr "ã‹ã‚‰"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+msgid "Edit allowed IP address"
+msgstr "編集ã¯è¨±å¯ã•ã‚ŒãŸIPアドレス"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:102
+#: usr/local/www/services_captiveportal_ip_edit.php:100
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+msgid "Allowed IP address"
+msgstr "許å¯ã•ã‚ŒãŸIPアドレス"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:110
+#: usr/local/www/services_captiveportal_mac_edit.php:108
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_hostname_edit.php:108
+#: usr/local/www/services_captiveportal_mac_edit.php:106
+#: usr/local/www/services_captiveportal_ip_edit.php:108
+#: usr/local/www/services_captiveportal_ip_edit.php:110
+#: usr/local/www/services_captiveportal_hostname_edit.php:108
+#: usr/local/www/services_captiveportal_mac_edit.php:106
+msgid "Upload speed needs to be an integer"
+msgstr "アップロード速度ã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:113
+#: usr/local/www/services_captiveportal_mac_edit.php:110
+#: usr/local/www/services_captiveportal_hostname_edit.php:112
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_mac_edit.php:108
+#: usr/local/www/services_captiveportal_ip_edit.php:111
+#: usr/local/www/services_captiveportal_ip_edit.php:113
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_mac_edit.php:108
+msgid "Download speed needs to be an integer"
+msgstr "ダウンロード速度ã¯ã€æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:120
+#: usr/local/www/services_captiveportal_mac_edit.php:117
+#: usr/local/www/services_captiveportal_hostname_edit.php:119
+#: usr/local/www/services_captiveportal_hostname_edit.php:117
+#: usr/local/www/services_captiveportal_mac_edit.php:115
+#: usr/local/www/services_captiveportal_ip_edit.php:118
+#: usr/local/www/services_captiveportal_ip_edit.php:120
+#: usr/local/www/services_captiveportal_hostname_edit.php:117
+#: usr/local/www/services_captiveportal_mac_edit.php:115
+msgid "already allowed"
+msgstr "æ—¢ã«è¨±å¯ã•ã‚ŒãŸ"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:175
+#: usr/local/www/services_captiveportal_ip_edit.php:173
+#: usr/local/www/services_captiveportal_ip_edit.php:184
+#: usr/local/www/services_captiveportal_ip_edit.php:184
+msgid "Edit allowed ip rule"
+msgstr "編集ã¯ã€IPルールを許å¯"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/system_gateways_edit.php:442
+#: usr/local/www/system_gateways_edit.php:454
+#: usr/local/www/system_gateways_edit.php:463
+#: usr/local/www/system_gateways_edit.php:475
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+#: usr/local/www/system_gateways_edit.php:569
+#: usr/local/www/system_gateways_edit.php:581
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+#: usr/local/www/system_gateways_edit.php:573
+#: usr/local/www/system_gateways_edit.php:585
+#: usr/local/www/system_gateways_edit.php:575
+#: usr/local/www/system_gateways_edit.php:587
+#: usr/local/www/system_gateways_edit.php:605
+#: usr/local/www/system_gateways_edit.php:617
+#: usr/local/www/system_gateways_edit.php:605
+#: usr/local/www/system_gateways_edit.php:617
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+msgid "From"
+msgstr "ã‹ã‚‰"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/system_gateways_edit.php:445
+#: usr/local/www/system_gateways_edit.php:457
+#: usr/local/www/system_gateways_edit.php:466
+#: usr/local/www/system_gateways_edit.php:478
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+#: usr/local/www/system_gateways_edit.php:572
+#: usr/local/www/system_gateways_edit.php:584
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+#: usr/local/www/system_gateways_edit.php:576
+#: usr/local/www/system_gateways_edit.php:588
+#: usr/local/www/system_gateways_edit.php:578
+#: usr/local/www/system_gateways_edit.php:590
+#: usr/local/www/system_gateways_edit.php:608
+#: usr/local/www/system_gateways_edit.php:620
+#: usr/local/www/system_gateways_edit.php:608
+#: usr/local/www/system_gateways_edit.php:620
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+msgid "To"
+msgstr "ã¸"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+msgid "Use"
+msgstr "使用"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+msgid ""
+"to always allow an IP address through the captive portal (without "
+"authentication)"
+msgstr "「 (èªè¨¼å¸¸æ™‚ãšã«ï¼‰ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’使用ã—ã¦ã€IPアドレスを許å¯ã™ã‚‹ã«ã¯ã€ã€Œ"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+msgid ""
+"to allow access from all clients (even non-authenticated ones) behind the "
+"portal to this IP address"
+msgstr "ã“ã®IPアドレスã«ãƒãƒ¼ã‚¿ãƒ«ã€ã®èƒŒå¾Œã«ã‚ã‚‹ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼ˆãŸã¨ãˆéžèªè¨¼ã®ã‚‚ã®ï¼‰ã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«ã€"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:204
+#: usr/local/www/services_captiveportal_ip_edit.php:202
+#: usr/local/www/services_captiveportal_ip_edit.php:196
+#: usr/local/www/services_captiveportal_ip_edit.php:196
+msgid "IP address and subnet mask. Use /32 for a single IP"
+msgstr "IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã€‚å˜ä¸€ã®IPã®ãŸã‚ã«/ 32を使用ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:215
+#: usr/local/www/services_captiveportal_mac_edit.php:189
+#: usr/local/www/services_captiveportal_hostname_edit.php:189
+#: usr/local/www/services_captiveportal_hostname_edit.php:187
+#: usr/local/www/services_captiveportal_mac_edit.php:187
+#: usr/local/www/services_captiveportal_ip_edit.php:213
+#: usr/local/www/services_captiveportal_ip_edit.php:207
+#: usr/local/www/services_captiveportal_mac_edit.php:200
+#: usr/local/www/services_captiveportal_ip_edit.php:207
+#: usr/local/www/services_captiveportal_hostname_edit.php:189
+#: usr/local/www/services_captiveportal_mac_edit.php:200
+msgid "Bandwidth up"
+msgstr "最大帯域幅"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:218
+#: usr/local/www/services_captiveportal_ip_edit.php:216
+#: usr/local/www/services_captiveportal_ip_edit.php:210
+#: usr/local/www/services_captiveportal_ip_edit.php:210
+msgid "Enter a upload limit to be enforced on this IP address in Kbit/s"
+msgstr "キロビット/秒ã§ã€ã“ã®IPアドレスã«é©ç”¨ã•ã‚Œã‚‹ã‚¢ãƒƒãƒ—ロード制é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:222
+#: usr/local/www/services_captiveportal_mac_edit.php:195
+#: usr/local/www/services_captiveportal_hostname_edit.php:195
+#: usr/local/www/services_captiveportal_hostname_edit.php:193
+#: usr/local/www/services_captiveportal_mac_edit.php:193
+#: usr/local/www/services_captiveportal_ip_edit.php:220
+#: usr/local/www/services_captiveportal_ip_edit.php:214
+#: usr/local/www/services_captiveportal_mac_edit.php:206
+#: usr/local/www/services_captiveportal_ip_edit.php:214
+#: usr/local/www/services_captiveportal_hostname_edit.php:195
+#: usr/local/www/services_captiveportal_mac_edit.php:206
+msgid "Bandwidth down"
+msgstr "ダウン帯域幅"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:225
+#: usr/local/www/services_captiveportal_ip_edit.php:223
+#: usr/local/www/services_captiveportal_ip_edit.php:217
+#: usr/local/www/services_captiveportal_ip_edit.php:217
+msgid "Enter a download limit to be enforced on this IP address in Kbit/s"
+msgstr "キロビット/秒ã§ã®ã“ã®IPアドレスã«æ–½è¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_mac.php:80
+#: usr/local/www/services_captiveportal_mac.php:78
+#: usr/local/www/services_captiveportal_mac.php:78
+msgid "No entry exists yet!"
+msgstr "エントリãŒã¾ã å­˜åœ¨ã—ã¾ã›ã‚“ ï¼"
+
+#: usr/local/www/services_captiveportal_mac.php:84
+#: usr/local/www/services_captiveportal_mac.php:82
+#: usr/local/www/services_captiveportal_mac.php:82
+msgid "Please set the zone on which the operation should be allowed"
+msgstr "æ“作ãŒè¨±å¯ã•ã‚Œã‚‹ã¹ãã‹ã«ã‚¾ãƒ¼ãƒ³ã‚’設定ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_mac.php:96
+#: usr/local/www/services_captiveportal_mac.php:94
+#: usr/local/www/services_captiveportal_mac.php:94
+msgid "No entry exists for this username:"
+msgstr "エントリãŒã“ã®ãƒ¦ãƒ¼ã‚¶åã¯å­˜åœ¨ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_mac.php:115
+#: usr/local/www/services_captiveportal_mac.php:113
+#: usr/local/www/services_captiveportal_mac.php:118
+#: usr/local/www/services_captiveportal_mac.php:118
+msgid "The entry was sucessfully deleted"
+msgstr "エントリã¯sucessfully削除ã•ã‚ŒãŸ"
+
+#: usr/local/www/services_captiveportal_mac.php:117
+#: usr/local/www/services_captiveportal_mac.php:115
+#: usr/local/www/services_captiveportal_mac.php:120
+#: usr/local/www/services_captiveportal_mac.php:120
+msgid "No entry exists for this mac address:"
+msgstr "エントリãŒã“ã®MACアドレスã¯å­˜åœ¨ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_mac.php:148
+#: usr/local/www/services_captiveportal_mac.php:146
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_mac.php:156
+msgid ""
+"The captive portal MAC address configuration has been changed.<br />You must "
+"apply the changes in order for them to take effect."
+msgstr "「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®MACアドレスã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ãƒã‚¹ã‚¿ãƒ¼ã€Œãれらを有効ã«ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_mac.php:180
+#: usr/local/www/services_captiveportal_mac.php:178
+#: usr/local/www/services_captiveportal_mac.php:188
+#: usr/local/www/services_captiveportal_mac.php:188
+msgid "edit host"
+msgstr "編集ホスト"
+
+#: usr/local/www/services_captiveportal_mac.php:181
+#: usr/local/www/services_dnsmasq.php:276
+#: usr/local/www/services_unbound.php:312
+#: usr/local/www/services_dnsmasq.php:277
+#: usr/local/www/services_captiveportal_mac.php:179
+#: usr/local/www/services_dnsmasq.php:302
+#: usr/local/www/services_captiveportal_mac.php:189
+#: usr/local/www/services_dnsmasq.php:315
+#: usr/local/www/services_dnsmasq.php:379
+#: usr/local/www/services_dnsmasq.php:379
+#: usr/local/www/services_captiveportal_mac.php:189
+msgid "Do you really want to delete this host?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ›ã‚¹ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_captiveportal_mac.php:181
+#: usr/local/www/services_captiveportal_mac.php:179
+#: usr/local/www/services_captiveportal_mac.php:189
+#: usr/local/www/services_captiveportal_mac.php:189
+msgid "delete host"
+msgstr "ホストを削除ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_mac.php:186
+#: usr/local/www/services_captiveportal_mac.php:184
+#: usr/local/www/services_captiveportal_mac.php:194
+#: usr/local/www/services_captiveportal_mac.php:194
+msgid "add host"
+msgstr "ホストを追加"
+
+#: usr/local/www/services_captiveportal_mac.php:192
+#: usr/local/www/services_captiveportal_mac.php:190
+#: usr/local/www/services_captiveportal_mac.php:200
+#: usr/local/www/services_captiveportal_mac.php:200
+msgid ""
+"Adding MAC addresses as pass-through MACs allows them access through the "
+"captive portal automatically without being taken to the portal page."
+msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€è‡ªå‹•çš„ã«ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€Œé€šéŽã®MACã¯ã‚’通ã—ã¦å½¼ã‚‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã‚ˆã†ã«MACアドレスを追加ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+msgid "Edit pass-through MAC address"
+msgstr "パススルーã®MACアドレスを編集"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:105
+#: usr/local/www/services_captiveportal_mac_edit.php:103
+#: usr/local/www/services_captiveportal_mac_edit.php:103
+msgid "A valid MAC address must be specified"
+msgstr "有効ãªMACアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:172
+#: usr/local/www/services_captiveportal_mac_edit.php:170
+#: usr/local/www/services_captiveportal_mac_edit.php:177
+#: usr/local/www/services_captiveportal_mac_edit.php:177
+msgid "Edit Pass-through MAC address"
+msgstr "編集パススルーMACアドレス"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:179
+#: usr/local/www/services_captiveportal_mac_edit.php:177
+#: usr/local/www/services_captiveportal_mac_edit.php:190
+#: usr/local/www/services_captiveportal_mac_edit.php:190
+msgid "MAC address (6 hex octets separated by colons)"
+msgstr "MACアドレス( 6進オクテットコロンã§åŒºåˆ‡ã‚‰ã‚ŒãŸï¼‰"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:192
+#: usr/local/www/services_captiveportal_mac_edit.php:190
+#: usr/local/www/services_captiveportal_mac_edit.php:203
+#: usr/local/www/services_captiveportal_mac_edit.php:203
+msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s"
+msgstr "キロビット/秒ã§ã€ã“ã®MACアドレスã«æ–½è¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ã‚¢ãƒƒãƒ—ロード制é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:198
+#: usr/local/www/services_captiveportal_mac_edit.php:196
+#: usr/local/www/services_captiveportal_mac_edit.php:209
+#: usr/local/www/services_captiveportal_mac_edit.php:209
+msgid "Enter a download limit to be enforced on this MAC address in Kbit/s"
+msgstr "キロビット/秒ã§ã€ã“ã®MACアドレスã«æ–½è¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91
+#: usr/local/www/diag_ipsec_spd.php:91
+msgid "Tunnel endpoints"
+msgstr "トンãƒãƒ«ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109
+#: usr/local/www/diag_ipsec_spd.php:109
+msgid "Do you really want to delete this security policy?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒãƒªã‚·ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120
+#: usr/local/www/diag_ipsec_spd.php:120
+msgid "incoming (as seen by firewall)"
+msgstr "å…¥ã£ã¦ãる(ファイアウォールã§è¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ï¼‰"
+
+#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127
+#: usr/local/www/diag_ipsec_spd.php:127
+msgid "outgoing (as seen by firewall)"
+msgstr "発信(ファイアウォールã§è¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ï¼‰"
+
+#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132
+#: usr/local/www/diag_ipsec_spd.php:132
+msgid "No IPsec security policies."
+msgstr "ã„ã„ãˆIPsecセキュリティãƒãƒªã‚·ãƒ¼ã‚“。"
+
+#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:61
+#: usr/local/www/diag_ping.php:61
+#, php-format
+msgid "Count must be between 1 and %s"
+msgstr "カウントã¯1ã¨%sã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:148
+#: usr/local/www/diag_ping.php:148
+msgid "Ping output"
+msgstr "pingã®å‡ºåŠ›"
+
+#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:111
+msgid ""
+"The DHCP Server can only be enabled on interfaces configured with static IP "
+"addresses"
+msgstr "アドレス「DHCPサーãƒãƒ¼ã¯ã€é™çš„IPアドレスã§è¨­å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§æœ‰åŠ¹ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€"
+
+#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74
+#: usr/local/www/services_router_advertisements.php:75
+#: usr/local/www/services_dhcpv6.php:75
+#: usr/local/www/services_router_advertisements.php:75
+#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:75
+msgid "Only interfaces configured with a static IP will be shown"
+msgstr "é™çš„IPã§è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã ã‘ãŒè¡¨ç¤ºã•ã‚Œã¾ã™"
+
+#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177
+#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+msgid "Range begin"
+msgstr "範囲ã®é–‹å§‹"
+
+#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177
+#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+msgid "Range end"
+msgstr "範囲終了"
+
+#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214
+#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186
+#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213
+#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194
+#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200
+#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261
+#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183
+#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240
+#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173
+#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcp.php:240
+#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173
+#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcpv6.php:179
+msgid "A valid range must be specified."
+msgstr "有効ãªç¯„囲を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217
+#: usr/local/www/services_dhcp.php:263
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/services_dhcp.php:244
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/services_dhcp.php:244
+msgid "A valid IP address must be specified for the gateway."
+msgstr "有効ãªIPアドレスã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219
+#: usr/local/www/services_dhcp.php:265
+#: usr/local/www/services_dhcp_edit.php:209
+#: usr/local/www/services_dhcp.php:246
+#: usr/local/www/services_dhcp_edit.php:209
+#: usr/local/www/services_dhcp.php:246
+msgid ""
+"A valid IP address must be specified for the primary/secondary WINS servers."
+msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリWINSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224
+#: usr/local/www/services_dhcp.php:270
+#: usr/local/www/services_dhcp_edit.php:215
+#: usr/local/www/services_dhcp.php:251
+#: usr/local/www/services_dhcp_edit.php:215
+#: usr/local/www/services_dhcp.php:251
+#, php-format
+msgid ""
+"The gateway address %s does not lie within the chosen interface's subnet."
+msgstr "「ゲートウェイアドレス%sã¯ã€é¸æŠžã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã«ãªã„。"
+
+#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227
+#: usr/local/www/services_dhcp.php:273
+#: usr/local/www/services_dhcp_edit.php:218
+#: usr/local/www/services_dhcp.php:254
+#: usr/local/www/services_dhcp_edit.php:218
+#: usr/local/www/services_dhcp.php:254
+msgid ""
+"A valid IP address must be specified for the primary/secondary DNS servers."
+msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリDNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195
+#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207
+#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192
+#: usr/local/www/services_dhcp_edit.php:221
+#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186
+#: usr/local/www/services_dhcp_edit.php:221
+#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186
+msgid "The default lease time must be at least 60 seconds."
+msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯60秒以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197
+#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209
+#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194
+#: usr/local/www/services_dhcp_edit.php:223
+#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188
+#: usr/local/www/services_dhcp.php:279
+#: usr/local/www/services_dhcp_edit.php:223
+#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcpv6.php:188
+msgid ""
+"The maximum lease time must be at least 60 seconds and higher than the "
+"default lease time."
+msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“"最大リース時間ã¯å°‘ãªãã¨ã‚‚60秒よりも高ããªã‘ã‚Œã°ãªã‚‰ãªã„〠。"
+
+#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199
+#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211
+#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196
+#: usr/local/www/services_dhcp_edit.php:225
+#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190
+#: usr/local/www/services_dhcp.php:281
+#: usr/local/www/services_dhcp_edit.php:225
+#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:190
+msgid "A valid domain name must be specified for the dynamic DNS registration."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³åã¯ã€å‹•çš„DNS登録を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246
+#: usr/local/www/services_dhcp.php:298
+#: usr/local/www/services_dhcp_edit.php:237
+#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:299
+#: usr/local/www/services_dhcp_edit.php:237
+#: usr/local/www/services_dhcp.php:299
+msgid ""
+"A valid IP address must be specified for the primary/secondary NTP servers."
+msgstr "「有効ãªIPアドレスã¯ã€ãƒ—ライマリ/セカンダリã®NTPサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203
+#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225
+#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210
+#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204
+#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:301
+#: usr/local/www/services_dhcpv6.php:204
+msgid "A valid domain name must be specified for the DNS domain."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³åã¯ã€ DNSドメインを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250
+#: usr/local/www/services_dhcp.php:302
+#: usr/local/www/services_dhcp_edit.php:239
+#: usr/local/www/services_dhcp.php:283 usr/local/www/services_dhcp.php:303
+#: usr/local/www/services_dhcp_edit.php:239
+#: usr/local/www/services_dhcp.php:303
+msgid "A valid IP address or hostname must be specified for the TFTP server."
+msgstr "有効ãªIPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã¯ã€TFTPサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252
+#: usr/local/www/services_dhcp.php:304
+#: usr/local/www/services_dhcp_edit.php:241
+#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcp.php:305
+#: usr/local/www/services_dhcp_edit.php:241
+#: usr/local/www/services_dhcp.php:305
+msgid "A valid IP address must be specified for the network boot server."
+msgstr "有効ãªIPアドレスã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255
+#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288
+#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcp.php:308
+msgid "You cannot use the network address in the starting subnet range."
+msgstr "ã‚ãªãŸãŒå§‹ã¾ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆç¯„囲内ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257
+#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290
+#: usr/local/www/services_dhcp.php:310 usr/local/www/services_dhcp.php:310
+msgid "You cannot use the broadcast address in the ending subnet range."
+msgstr "ã‚ãªãŸãŒçµ‚ã‚るサブãƒãƒƒãƒˆç¯„囲内ã®ãƒ–ロードキャストアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264
+#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp.php:317 usr/local/www/services_dhcp.php:317
+#, php-format
+msgid "The subnet range cannot overlap with virtual IP address %s."
+msgstr "サブãƒãƒƒãƒˆç¯„囲ã¯ã€ä»®æƒ³IPアドレスã¨é‡è¤‡ã—ãªã„%s.ãŒã§ã"
+
+#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279
+#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312
+#: usr/local/www/services_dhcp.php:332 usr/local/www/services_dhcp.php:332
+msgid "Text type cannot include quotation marks."
+msgstr "テキストタイプã¯ã€å¼•ç”¨ç¬¦ã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281
+#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314
+#: usr/local/www/services_dhcp.php:334 usr/local/www/services_dhcp.php:334
+msgid ""
+"String type must be enclosed in quotes like "this" or must be a series of "
+"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:"
+"cd:ef"
+msgstr "ã“ã®ã€Œæ–‡å­—列型ã®ã‚ˆã†ã«å¼•ç”¨ç¬¦ã§å›²ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ ã€ã‚„ã€ä¸€é€£ã®ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "01:23:45:67:89ã®ã‚ˆã†ãªã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ16進数ã§æŒ‡å®šã‚ªã‚¯ãƒ†ãƒƒãƒˆã€ 〠: AB : "CD: EF"
+
+#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283
+#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316
+#: usr/local/www/services_dhcp.php:336 usr/local/www/services_dhcp.php:336
+msgid "Boolean type must be true, false, on, or off."
+msgstr "booleanåž‹ã¯ã€ã‚ªãƒ³ã€ã¾ãŸã¯ã‚ªãƒ•å½ã€çœŸã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285
+#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318
+#: usr/local/www/services_dhcp.php:338 usr/local/www/services_dhcp.php:338
+msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255."
+msgstr "符å·ãªã—8ビット整数型ã¯ã€ 255ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287
+#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320
+#: usr/local/www/services_dhcp.php:340 usr/local/www/services_dhcp.php:340
+msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535."
+msgstr "符å·ãªã—ã®16ビット整数型65535ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289
+#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322
+#: usr/local/www/services_dhcp.php:342 usr/local/www/services_dhcp.php:342
+msgid ""
+"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295."
+msgstr "「符å·ãªã—32ビット整数型ãŒ4294967295ã®ç¯„囲ã¯0ã®æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291
+#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324
+#: usr/local/www/services_dhcp.php:344 usr/local/www/services_dhcp.php:344
+msgid "Signed 8-bit integer type must be a number in the range -128 to 127."
+msgstr "符å·ä»˜ã8ビット整数型ã¯ç¯„囲-128〜127ã®æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293
+#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326
+#: usr/local/www/services_dhcp.php:346 usr/local/www/services_dhcp.php:346
+msgid ""
+"Signed 16-bit integer type must be a number in the range -32768 to 32767."
+msgstr "「符å·ä»˜ã16ビット整数型ã®ç¯„囲-32768〜32767ã®æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295
+#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328
+#: usr/local/www/services_dhcp.php:348 usr/local/www/services_dhcp.php:348
+msgid ""
+"Signed 32-bit integer type must be a number in the range -2147483648 to "
+"2147483647."
+msgstr "2147483647 「符å·ä»˜ã32ビット整数型ã¯-2147483648ã«å†…æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330
+#: usr/local/www/services_dhcp.php:350 usr/local/www/services_dhcp.php:350
+msgid "IP address or host type must be an IP address or host name."
+msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆã‚¿ã‚¤ãƒ—ã¯ã€IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230
+#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252
+#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237
+#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232
+#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:361
+#: usr/local/www/services_dhcpv6.php:232
+msgid "The specified range lies outside of the current subnet."
+msgstr "指定ã•ã‚ŒãŸç¯„囲ã¯ã€ç¾åœ¨ã®ã‚µãƒ–ãƒãƒƒãƒˆã®å¤–å´ã«ã‚る。"
+
+#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312
+#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364
+#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345
+#: usr/local/www/services_dhcpv6.php:237 usr/local/www/services_dhcp.php:365
+#: usr/local/www/services_dhcp.php:365 usr/local/www/services_dhcpv6.php:237
+msgid "The range is invalid (first element higher than second element)."
+msgstr "範囲ã¯ã€ (第2è¦ç´ ã‚ˆã‚Šã‚‚ã€æœ€åˆã®è¦ç´ ãŒé«˜ã„)ãŒç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240
+#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261
+#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246
+#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241
+#: usr/local/www/services_dhcp.php:388 usr/local/www/services_dhcp.php:388
+#: usr/local/www/services_dhcpv6.php:241
+#, php-format
+msgid ""
+"You must disable the DHCP relay on the %s interface before enabling the DHCP "
+"server."
+msgstr "サーãƒã€ã¯ã€DHCPを有効ã«ã™ã‚‹å‰ã«%sインターフェイス上ã§DHCPリレーを無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326
+#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382
+#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378
+#: usr/local/www/services_dhcpv6.php:256 usr/local/www/services_dhcp.php:398
+#: usr/local/www/services_dhcp.php:398 usr/local/www/services_dhcpv6.php:256
+#, php-format
+msgid "The DHCP range cannot overlap any static DHCP mappings."
+msgstr "DHCP範囲ã¯ã€é™çš„DHCPマッピングをオーãƒãƒ¼ãƒ©ãƒƒãƒ—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433
+#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526
+#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dhcp.php:546
+msgid "DHCP server"
+msgstr "DHCPサーãƒ"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559
+msgid "Text"
+msgstr "テキスト"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559
+msgid "String"
+msgstr "文字列"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:559
+msgid "Boolean"
+msgstr "ブーリアン"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560
+msgid "Unsigned 8-bit integer"
+msgstr "符å·ãªã—8ビット整数"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560
+msgid "Unsigned 16-bit integer"
+msgstr "符å·ãªã—ã®16ビット整数"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:560
+msgid "Unsigned 32-bit integer"
+msgstr "符å·ãªã—ã®32ビット整数"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561
+msgid "Signed 8-bit integer"
+msgstr "符å·ä»˜ã8ビット整数"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561
+msgid "Signed 16-bit integer"
+msgstr "符å·ä»˜ã16ビット整数"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561
+msgid "Signed 32-bit integer"
+msgstr "符å·ä»˜ã32ビット整数"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:561
+msgid "IP address or host"
+msgstr "IPアドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆ"
+
+#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480
+#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460
+#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455
+#: usr/local/www/services_dhcp.php:667 usr/local/www/services_dhcp.php:667
+#: usr/local/www/services_dhcpv6.php:455
+msgid ""
+"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while "
+"the DHCP Relay is enabled on any interface."
+msgstr "「 DHCPリレーã¯ã€ç¾åœ¨æœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ãªãŒã‚‰ã€ DHCPサーãƒãƒ¼ã‚µãƒ¼ãƒ“スを有効ã«ã§ãã¾ã›ã‚“〠DHCPリレーã¯ã€ã©ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§æœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461
+#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488
+#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468
+#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463
+#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcp.php:675
+#: usr/local/www/services_dhcpv6.php:463
+msgid "The static mapping configuration has been changed"
+msgstr "é™çš„ãªãƒžãƒƒãƒ”ング構æˆãŒå¤‰æ›´ã•ã‚ŒãŸ"
+
+#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588
+#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695
+#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:715
+#, php-format
+msgid "Enable DHCP server on %s interface"
+msgstr "%sインターフェイス上ã§DHCPサーãƒã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518
+#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592
+#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523
+#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_dhcp.php:728 usr/local/www/services_dhcp.php:728
+#: usr/local/www/services_dhcpv6.php:534
+msgid "Deny unknown clients"
+msgstr "ä¸æ˜Žãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å¦å®š"
+
+#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519
+#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593
+#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524
+#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535
+#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcp.php:729
+#: usr/local/www/services_dhcpv6.php:535
+msgid ""
+"If this is checked, only the clients defined below will get DHCP leases from "
+"this server. "
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼"ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ä»¥ä¸‹ã«å®šç¾©ã•ã‚Œã¦ã„る唯一ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®DHCPリースをå–å¾—ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528
+#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548
+#: usr/local/www/services_dhcp.php:746
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+#: usr/local/www/services_dhcp.php:746 usr/local/www/services_dhcpv6.php:548
+msgid "Subnet mask"
+msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯"
+
+#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608
+#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539
+#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554
+#: usr/local/www/services_dhcp.php:752 usr/local/www/services_dhcp.php:752
+#: usr/local/www/services_dhcpv6.php:554
+msgid "Available range"
+msgstr "利用å¯èƒ½ãªç¯„囲"
+
+#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552
+#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625
+#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342
+#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345
+#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573
+#: usr/local/www/services_dhcp.php:780 usr/local/www/vpn_l2tp.php:345
+#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcpv6.php:573
+msgid "Subnet Mask"
+msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯"
+
+#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569
+#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642
+#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590
+#: usr/local/www/services_dhcp.php:797 usr/local/www/services_dhcp.php:797
+#: usr/local/www/services_dhcpv6.php:590
+msgid "Range"
+msgstr "レンジ"
+
+#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653
+#: usr/local/www/services_dhcp.php:829
+#: usr/local/www/services_dhcp_edit.php:395
+#: usr/local/www/services_dhcp.php:843 usr/local/www/services_dhcp.php:863
+#: usr/local/www/services_dhcp_edit.php:395
+#: usr/local/www/services_dhcp.php:863
+msgid "WINS servers"
+msgstr "WINSサーãƒãƒ¼"
+
+#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594
+#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671
+#: usr/local/www/services_router_advertisements.php:376
+#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp_edit.php:406
+#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619
+#: usr/local/www/services_router_advertisements.php:371
+#: usr/local/www/services_dhcp.php:874
+#: usr/local/www/services_router_advertisements.php:371
+#: usr/local/www/services_dhcp_edit.php:406
+#: usr/local/www/services_dhcp.php:874 usr/local/www/services_dhcpv6.php:619
+msgid ""
+"NOTE: leave blank to use the system default DNS servers - this interface's "
+"IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the "
+"General page."
+msgstr ""注:システムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®DNSサーãƒãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ç©ºç™½ã®ã¾ã¾ã« - ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã€Œ DNSフォワーダãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€IP ã€ãã†ã§ãªã„サーãƒã¯ã€Œä¸€èˆ¬çš„ãªãƒšãƒ¼ã‚¸ã§è¨­å®šã€‚"
+
+#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847
+#: usr/local/www/services_dhcp_edit.php:413
+#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcp.php:881
+#: usr/local/www/services_dhcp_edit.php:413
+#: usr/local/www/services_dhcp.php:881
+msgid ""
+"The default is to use the IP on this interface of the firewall as the "
+"gateway. Specify an alternate gateway here if this is not the correct "
+"gateway for your network."
+msgstr "ゲートウェイã¯ã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§IPを使用ã™ã‚‹ã“ã¨ã§ã™ã€ 。ã“ã‚ŒãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«é©ã—ã¦ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã§ãªã„å ´åˆã¯ã€ã“ã“ã§åˆ¥ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607
+#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675
+#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606
+#: usr/local/www/services_dhcp_edit.php:417
+#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623
+#: usr/local/www/services_dhcp.php:885
+#: usr/local/www/services_dhcp_edit.php:417
+#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:623
+msgid "Domain name"
+msgstr "ドメインå"
+
+#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610
+#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678
+#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626
+#: usr/local/www/services_dhcp.php:888
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcp.php:888 usr/local/www/services_dhcpv6.php:626
+msgid ""
+"The default is to use the domain name of this system as the default domain "
+"name provided by DHCP. You may specify an alternate domain name here."
+msgstr "DHCPã«ã‚ˆã£ã¦æä¾›ã•ã‚ŒãŸåå‰ã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã¨ã—ã¦ã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‰ãƒ¡ã‚¤ãƒ³åを使用ã™ã‚‹ã“ã¨ã§ã™ã€ 。ã‚ãªãŸãŒã“ã“ã«ä»£æ›¿ãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614
+#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682
+#: usr/local/www/services_router_advertisements.php:381
+#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613
+#: usr/local/www/services_dhcp_edit.php:424
+#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630
+#: usr/local/www/services_router_advertisements.php:376
+#: usr/local/www/services_dhcp.php:892
+#: usr/local/www/services_router_advertisements.php:376
+#: usr/local/www/services_dhcp_edit.php:424
+#: usr/local/www/services_dhcp.php:892 usr/local/www/services_dhcpv6.php:630
+msgid "Domain search list"
+msgstr "ドメインサーãƒãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617
+msgid "The DHCP server can optionally provide a domain search list."
+msgstr "DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãる。"
+
+#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621
+#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689
+#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620
+#: usr/local/www/services_dhcp_edit.php:431
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637
+#: usr/local/www/services_dhcp.php:899
+#: usr/local/www/services_dhcp_edit.php:431
+#: usr/local/www/services_dhcp.php:899 usr/local/www/services_dhcpv6.php:637
+msgid "Default lease time"
+msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“"
+
+#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625
+#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693
+#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624
+#: usr/local/www/services_dhcp_edit.php:435
+#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641
+#: usr/local/www/services_dhcp.php:903
+#: usr/local/www/services_dhcp_edit.php:435
+#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcpv6.php:641
+msgid ""
+"This is used for clients that do not ask for a specific expiration time."
+msgstr "「ã“ã‚Œã¯ã€ç‰¹å®šã®æœ‰åŠ¹æœŸé™ã¯æ±‚ã‚ãªã„クライアントã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627
+#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695
+#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626
+#: usr/local/www/services_dhcp_edit.php:437
+#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643
+#: usr/local/www/services_dhcp.php:905
+#: usr/local/www/services_dhcp_edit.php:437
+#: usr/local/www/services_dhcp.php:905 usr/local/www/services_dhcpv6.php:643
+msgid "The default is 7200 seconds."
+msgstr "デフォルトã¯7200秒ã§ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699
+#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630
+#: usr/local/www/services_dhcp_edit.php:441
+#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647
+#: usr/local/www/services_dhcp.php:909
+#: usr/local/www/services_dhcp_edit.php:441
+#: usr/local/www/services_dhcp.php:909 usr/local/www/services_dhcpv6.php:647
+msgid "Maximum lease time"
+msgstr "最大リース時間"
+
+#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635
+#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_dhcp_edit.php:445
+#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651
+#: usr/local/www/services_dhcp.php:913
+#: usr/local/www/services_dhcp_edit.php:445
+#: usr/local/www/services_dhcp.php:913 usr/local/www/services_dhcpv6.php:651
+msgid ""
+"This is the maximum lease time for clients that ask for a specific "
+"expiration time."
+msgstr "有効期é™ã¯ã€Œã“ã‚Œã¯ã€ç‰¹å®šã‚’求ã‚るクライアントã®æœ€å¤§ãƒªãƒ¼ã‚¹æ™‚é–“ã§ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637
+#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705
+#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636
+#: usr/local/www/services_dhcp_edit.php:447
+#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653
+#: usr/local/www/services_dhcp.php:915
+#: usr/local/www/services_dhcp_edit.php:447
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:653
+msgid "The default is 86400 seconds."
+msgstr "デフォルトã¯86400秒ã§ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641
+#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640
+#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcp.php:920
+#: usr/local/www/services_dhcpv6.php:657
+msgid "Failover peer IP:"
+msgstr "フェールオーãƒãƒ¼ãƒ”ã‚¢ã®IPアドレス:"
+
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644
+#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712
+#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643
+#: usr/local/www/services_dhcpv6.php:660 usr/local/www/services_dhcpv6.php:660
+msgid ""
+"Leave blank to disable. Enter the interface IP address of the other "
+"machine. Machines must be using CARP."
+msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹IPアドレスを入力ã—〠"マシンを。マシンã¯ã€CARPを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716
+#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909
+#: usr/local/www/services_dhcp.php:1150 usr/local/www/services_dhcp.php:929
+#: usr/local/www/services_dhcp.php:1170 usr/local/www/services_dhcp.php:929
+#: usr/local/www/services_dhcp.php:1170
+msgid "Static ARP"
+msgstr "スタティックARP"
+
+#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723
+#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916
+#: usr/local/www/services_dhcp.php:936 usr/local/www/services_dhcp.php:936
+msgid "Enable Static ARP entries"
+msgstr "スタティックARPエントリを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728
+#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921
+#: usr/local/www/services_dhcp.php:941
+msgid ""
+"Only the machines listed below will be able to communicate with the firewall "
+"on this NIC."
+msgstr "ã“ã®NICã¯ã€ã€Œä»¥ä¸‹ã«ç¤ºã™ã ã‘ã®ãƒžã‚·ãƒ³ãŒãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã¨é€šä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651
+#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744
+#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692
+#: usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcpv6.php:692
+msgid "Show Dynamic DNS"
+msgstr "ダイナミックDNSを表示"
+
+#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655
+#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748
+#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679
+#: usr/local/www/services_dhcp_edit.php:458
+#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696
+#: usr/local/www/services_dhcp.php:982
+#: usr/local/www/services_dhcp_edit.php:458
+#: usr/local/www/services_dhcp.php:982 usr/local/www/services_dhcpv6.php:696
+msgid "Enable registration of DHCP client names in DNS."
+msgstr "DNSã«DHCPクライアントåã®ç™»éŒ²ã‚’有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658
+#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682
+#: usr/local/www/services_dhcp_edit.php:461
+#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699
+#: usr/local/www/services_dhcp.php:985
+#: usr/local/www/services_dhcp_edit.php:461
+#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:699
+msgid "Note: Leave blank to disable dynamic DNS registration."
+msgstr "注:動的DNS登録を無効ã«ã™ã‚‹ã«ã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659
+#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683
+#: usr/local/www/services_dhcp_edit.php:462
+#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700
+#: usr/local/www/services_dhcp.php:986
+#: usr/local/www/services_dhcp_edit.php:462
+#: usr/local/www/services_dhcp.php:986 usr/local/www/services_dhcpv6.php:700
+msgid ""
+"Enter the dynamic DNS domain which will be used to register client names in "
+"the DNS server."
+msgstr "DNSサーãƒã€ã§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆåを登録ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSドメインを入力ã—ã¦ãã ã•ã„ "。"
+
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664
+#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757
+#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcp_edit.php:467
+#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705
+#: usr/local/www/services_dhcp.php:1005
+#: usr/local/www/services_dhcp_edit.php:467
+#: usr/local/www/services_dhcp.php:1005 usr/local/www/services_dhcpv6.php:705
+msgid "NTP servers"
+msgstr "NTPサーãƒãƒ¼"
+
+#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667
+#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708
+#: usr/local/www/services_dhcp.php:1008
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:708
+msgid "Show NTP configuration"
+msgstr "表示NTP設定"
+
+#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676
+#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770
+#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701
+#: usr/local/www/services_dhcp_edit.php:479
+#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718
+#: usr/local/www/services_dhcp.php:1017
+#: usr/local/www/services_dhcp_edit.php:479
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:718
+msgid "TFTP server"
+msgstr "TFTPサーãƒ"
+
+#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773
+#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcp.php:1020
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcpv6.php:721
+msgid "Show TFTP configuration"
+msgstr "TFTP設定を表示ã—ã¾ã™"
+
+#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683
+#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777
+#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708
+#: usr/local/www/services_dhcp_edit.php:486
+#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/services_dhcp.php:1024
+#: usr/local/www/services_dhcp_edit.php:486
+#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:725
+msgid ""
+"Leave blank to disable. Enter a full hostname or IP for the TFTP server."
+msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã€‚ TFTPサーãƒã®å®Œå…¨ãªãƒ›ã‚¹ãƒˆåã¾ãŸã¯IPアドレスを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783
+#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714
+#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731
+#: usr/local/www/services_dhcp.php:1029 usr/local/www/services_dhcp.php:1029
+#: usr/local/www/services_dhcpv6.php:731
+msgid "LDAP URI"
+msgstr "LDAPã®URI"
+
+#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786
+#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717
+#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734
+#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1032
+#: usr/local/www/services_dhcpv6.php:734
+msgid "Show LDAP configuration"
+msgstr "LDAP設定を表示ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcp.php:1036
+#: usr/local/www/services_dhcpv6.php:738
+msgid ""
+"Leave blank to disable. Enter a full URI for the LDAP server in the form "
+"ldap://ldap.example.com/dc=example,dc=com"
+msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã€‚å½¢å¼ã§LDAPサーãƒã®å®Œå…¨ãªURIを入力ã—ã¦ãã ã•ã„ "LDAP:/ / ldap.example.com / dc = exampleã€dc = comã®"
+
+#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700
+#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726
+#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743
+#: usr/local/www/services_dhcp.php:1041 usr/local/www/services_dhcp.php:1041
+#: usr/local/www/services_dhcpv6.php:743
+msgid "Enable network booting"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703
+#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798
+#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729
+#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcpv6.php:746
+msgid "Show Network booting"
+msgstr "表示ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯èµ·å‹•"
+
+#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707
+#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802
+#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750
+#: usr/local/www/services_dhcp.php:1048 usr/local/www/services_dhcp.php:1048
+#: usr/local/www/services_dhcpv6.php:750
+msgid "Enables network booting."
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートを有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735
+#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050
+#: usr/local/www/services_dhcpv6.php:752
+msgid "Enter the IP of the"
+msgstr "ã®IPアドレスを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735
+#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1050
+#: usr/local/www/services_dhcpv6.php:752
+msgid "next-server"
+msgstr "次世代サーãƒãƒ¼"
+
+#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711
+#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806
+#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737
+#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754
+#: usr/local/www/services_dhcp.php:1052 usr/local/www/services_dhcp.php:1052
+#: usr/local/www/services_dhcpv6.php:754
+msgid "and the filename"
+msgstr "ã¨ãƒ•ã‚¡ã‚¤ãƒ«å"
+
+#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713
+#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808
+#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739
+#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756
+#: usr/local/www/services_dhcp.php:1054 usr/local/www/services_dhcp.php:1054
+#: usr/local/www/services_dhcpv6.php:756
+msgid ""
+"Note: You need both a filename and a boot server configured for this to work!"
+msgstr ""注æ„:ã‚ãªãŸã¯ä»•äº‹ã«ãƒ•ã‚¡ã‚¤ãƒ«åã¨ã€ã“ã®ãŸã‚ã«è¨­å®šã•ã‚Œã¦ã„るブート·サーãƒã®ä¸¡æ–¹ãŒå¿…è¦ ï¼"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758
+msgid "Enter the"
+msgstr "入力ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758
+msgid "root-path"
+msgstr "ルート·パス"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcpv6.php:758
+msgid "string"
+msgstr "文字列"
+
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717
+#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812
+#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743
+#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcp.php:1058 usr/local/www/services_dhcp.php:1058
+#: usr/local/www/services_dhcpv6.php:760
+msgid ""
+"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname"
+msgstr ""注:文字列形å¼ï¼š iSCSIイニシエータ: (サーãƒãƒ¼å) : (プロトコル) : (ãƒãƒ¼ãƒˆï¼‰ : ( LUN ) :ターゲットå"
+
+#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722
+#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765
+#: usr/local/www/services_dhcp.php:1064 usr/local/www/services_dhcp.php:1064
+#: usr/local/www/services_dhcpv6.php:765
+msgid "Additional BOOTP/DHCP Options"
+msgstr "追加ã®BOOTP / DHCPオプション"
+
+#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820
+#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768
+#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcp.php:1067
+#: usr/local/www/services_dhcpv6.php:768
+msgid "Show Additional BOOTP/DHCP Options"
+msgstr "追加ã®BOOTP / DHCPオプションを表示ã™ã‚‹"
+
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828
+#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759
+#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcp.php:1075
+#: usr/local/www/services_dhcpv6.php:776
+msgid ""
+"Enter the DHCP option number and the value for each item you would like to "
+"include in the DHCP lease information. For a list of available options "
+"please visit this"
+msgstr "DHCPリース情報ã«å«ã¾ã‚Œã‚‹ã€Œ DHCPオプション番å·ã€ã‚ãªãŸãŒã—ãŸã„é …ç›®ã”ã¨ã«å€¤ã‚’入力ã—ã¦ãã ã•ã„〠。使用å¯èƒ½ãªã‚ªãƒ—ションã®ãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ 「ã“れをã”覧ãã ã•ã„。"
+
+#: usr/local/www/services_dhcp.php:812
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850
+#: usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764
+#: usr/local/www/services_dhcp.php:1060 usr/local/www/services_dhcpv6.php:781
+#: usr/local/www/services_dhcp.php:1080 usr/local/www/services_dhcp.php:1080
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_dhcpv6.php:781
+msgid "Number"
+msgstr "æ•°"
+
+#: usr/local/www/services_dhcp.php:814
+#: usr/local/www/load_balancer_relay_action_edit.php:506
+#: usr/local/www/system_advanced_sysctl.php:173
+#: usr/local/www/system_advanced_sysctl.php:249
+#: usr/local/www/services_dhcpv6.php:739
+#: usr/local/www/system_certmanager.php:763
+#: usr/local/www/load_balancer_relay_action_edit.php:505
+#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/load_balancer_relay_action_edit.php:503
+#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765
+#: usr/local/www/services_dhcp.php:1062
+#: usr/local/www/system_certmanager.php:788
+#: usr/local/www/services_dhcpv6.php:782 usr/local/www/services_dhcp.php:1082
+#: usr/local/www/system_certmanager.php:789
+#: usr/local/www/services_dhcp.php:1082
+#: usr/local/www/system_certmanager.php:789
+#: usr/local/www/load_balancer_relay_action_edit.php:503
+#: usr/local/www/services_dhcpv6.php:782
+#: usr/local/www/system_advanced_sysctl.php:173
+#: usr/local/www/system_advanced_sysctl.php:249
+msgid "Value"
+msgstr "値"
+
+#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885
+#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816
+#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152
+#: usr/local/www/services_dhcpv6.php:833
+msgid "The DNS servers entered in"
+msgstr "ã«å…¥åŠ›ã•ã‚ŒãŸDNSサーãƒ"
+
+#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885
+#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816
+#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1152
+#: usr/local/www/services_dhcpv6.php:833
+msgid "System: General setup"
+msgstr "システム:一般的ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcp.php:1153
+#: usr/local/www/services_dhcpv6.php:834
+msgid "(or the"
+msgstr "(ã¾ãŸã¯"
+
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792
+#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887
+#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818
+#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154
+#: usr/local/www/services_dhcpv6.php:835
+msgid "if enabled)"
+msgstr "有効ãªå ´åˆï¼‰"
+
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792
+#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887
+#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818
+#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1154
+#: usr/local/www/services_dhcpv6.php:835
+msgid "will be assigned to clients by the DHCP server."
+msgstr "DHCPサーãƒã«ã‚ˆã£ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890
+#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821
+#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838
+#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157
+#: usr/local/www/services_dhcpv6.php:838
+msgid "The DHCP lease table can be viewed on the"
+msgstr "DHCPリーステーブルã«ã¯ã€ä¸Šã§é–²è¦§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890
+#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137
+#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1157
+msgid "Status: DHCP leases"
+msgstr "ステータス: DHCPリース"
+
+#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796
+#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891
+#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822
+#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839
+#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcp.php:1158
+#: usr/local/www/services_dhcpv6.php:839
+msgid "page."
+msgstr "ページ。"
+
+#: usr/local/www/services_dhcp_edit.php:116
+#: usr/local/www/services_dhcpv6_edit.php:113
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dhcp_edit.php:118
+#: usr/local/www/services_dhcpv6_edit.php:118
+#: usr/local/www/services_dhcp_edit.php:152
+#: usr/local/www/services_dhcpv6_edit.php:118
+#: usr/local/www/services_dhcp_edit.php:152
+msgid "The hostname cannot end with a hyphen according to RFC952"
+msgstr "ホストåã¯ã€ RFC952ã«å¾“ã£ã¦ãƒã‚¤ãƒ•ãƒ³ã§çµ‚了ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/services_dhcp_edit.php:121
+#: usr/local/www/services_dhcpv6_edit.php:118
+#: usr/local/www/services_dhcpv6_edit.php:120
+#: usr/local/www/services_dhcp_edit.php:123
+#: usr/local/www/services_dhcpv6_edit.php:123
+#: usr/local/www/services_dhcp_edit.php:157
+#: usr/local/www/services_dhcpv6_edit.php:123
+#: usr/local/www/services_dhcp_edit.php:157
+msgid ""
+"A valid hostname is specified, but the domain name part should be omitted"
+msgstr "「有効ãªãƒ›ã‚¹ãƒˆåãŒæŒ‡å®šã•ã‚Œã¦ã„ã‚‹ãŒã€ãƒ‰ãƒ¡ã‚¤ãƒ³åã®éƒ¨åˆ†ã¯çœç•¥ã•ã‚Œã‚‹ã¹ã"
+
+#: usr/local/www/services_dhcp_edit.php:132
+#: usr/local/www/services_dhcp_edit.php:134
+#: usr/local/www/services_dhcp_edit.php:168
+#: usr/local/www/services_dhcp_edit.php:168
+msgid "Static ARP is enabled. You must specify an IP address."
+msgstr "スタティックARPãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp_edit.php:141
+#: usr/local/www/services_dhcp_edit.php:143
+#: usr/local/www/services_dhcp_edit.php:177
+#: usr/local/www/services_dhcp_edit.php:177
+msgid "This Hostname, IP or MAC address already exists."
+msgstr "ã“ã®ãƒ›ã‚¹ãƒˆå〠IPアドレスã¾ãŸã¯MACアドレスãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp_edit.php:152
+#: usr/local/www/services_dhcp_edit.php:154
+#: usr/local/www/services_dhcp_edit.php:188
+#: usr/local/www/services_dhcp_edit.php:188
+#, php-format
+msgid "The IP address must not be within the DHCP range for this interface."
+msgstr "IPアドレスã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®DHCP範囲内ã«ã‚ã£ã¦ã¯ãªã‚‰ãªã„。"
+
+#: usr/local/www/services_dhcp_edit.php:159
+#: usr/local/www/services_dhcp_edit.php:161
+#: usr/local/www/services_dhcp_edit.php:202
+#: usr/local/www/services_dhcp_edit.php:202
+#, php-format
+msgid "The IP address must lie in the %s subnet."
+msgstr "IPアドレスã¯ã€ %sサブãƒãƒƒãƒˆå†…ã«ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/services_dhcp_edit.php:193
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dhcp_edit.php:301
+msgid "Edit static mapping"
+msgstr "é™çš„マッピングを編集"
+
+#: usr/local/www/services_dhcp_edit.php:204
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/services_dhcp_edit.php:206
+#: usr/local/www/services_dhcp_edit.php:334
+#: usr/local/www/services_dhcp_edit.php:334
+msgid "Static DHCP Mapping"
+msgstr "é™çš„DHCPマッピング"
+
+#: usr/local/www/services_dhcp_edit.php:215
+#: usr/local/www/services_dhcp_edit.php:218
+#: usr/local/www/services_dhcp_edit.php:217
+#: usr/local/www/services_dhcp_edit.php:345
+#: usr/local/www/services_captiveportal_mac_edit.php:188
+#: usr/local/www/services_dhcp_edit.php:345
+#: usr/local/www/services_captiveportal_mac_edit.php:188
+msgid "Copy my MAC address"
+msgstr "ç§ã®MACアドレスをコピーã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp_edit.php:217
+#: usr/local/www/services_dhcp_edit.php:220
+#: usr/local/www/services_dhcp_edit.php:219
+#: usr/local/www/services_dhcp_edit.php:347
+#: usr/local/www/services_dhcp_edit.php:347
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "次ã®å½¢å¼ã§MACアドレスを入力ã—ã¦ãã ã•ã„: XX : XX : XX : XX : XX : XX"
+
+#: usr/local/www/services_dhcp_edit.php:225
+#: usr/local/www/services_dhcp_edit.php:228
+msgid ""
+"If no IP address is given, one will be dynamically allocated from the pool."
+msgstr "IPアドレスãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp_edit.php:231
+#: usr/local/www/services_dhcpv6_edit.php:208
+#: usr/local/www/services_dhcpv6_edit.php:211
+#: usr/local/www/services_dhcp_edit.php:234
+#: usr/local/www/services_dhcpv6_edit.php:213
+#: usr/local/www/services_dhcp_edit.php:236
+#: usr/local/www/services_dhcpv6_edit.php:216
+#: usr/local/www/services_dhcp_edit.php:364
+#: usr/local/www/services_dhcpv6_edit.php:216
+#: usr/local/www/services_dhcp_edit.php:364
+msgid "Name of the host, without domain part."
+msgstr "ドメイン部分ãªã—ã§ã€ãƒ›ã‚¹ãƒˆã®åå‰ã€‚"
+
+#: usr/local/www/services_dhcp_relay.php:72
+#: usr/local/www/services_dhcpv6_relay.php:73
+#: usr/local/www/services_dhcpv6_relay.php:73
+#: usr/local/www/services_dhcp_relay.php:72
+msgid "Destination Server"
+msgstr "先サーãƒ"
+
+#: usr/local/www/services_dhcp_relay.php:80
+msgid "A valid Destination Server IP address must be specified."
+msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122
+#: usr/local/www/status_services.php:295
+#: usr/local/www/widgets/widgets/services_status.widget.php:100
+#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278
+#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140
+#: etc/inc/service-utils.inc:277 etc/inc/service-utils.inc:294
+#: usr/local/www/fbegin.inc:140 usr/local/www/services_dhcp_relay.php:100
+#: etc/inc/service-utils.inc:294
+msgid "DHCP Relay"
+msgstr "DHCPリレー"
+
+#: usr/local/www/services_dhcp_relay.php:144
+#: usr/local/www/services_dhcp_relay.php:145
+#: usr/local/www/services_dhcp_relay.php:145
+msgid "DHCP Relay configuration"
+msgstr "DHCPリレーã®è¨­å®š"
+
+#: usr/local/www/services_dhcp_relay.php:150
+#: usr/local/www/services_dhcp_relay.php:151
+#: usr/local/www/services_dhcp_relay.php:151
+#, php-format
+msgid "Enable DHCP relay on interface"
+msgstr "インターフェイス上ã§DHCPリレーを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcp_relay.php:175
+#: usr/local/www/services_dhcpv6_relay.php:176
+#: usr/local/www/services_dhcp_relay.php:176
+#: usr/local/www/services_dhcpv6_relay.php:177
+#: usr/local/www/services_dhcpv6_relay.php:177
+#: usr/local/www/services_dhcp_relay.php:176
+msgid "Append circuit ID and agent ID to requests"
+msgstr "è¦æ±‚ã«å›žç·šIDãŠã‚ˆã³ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDを追加"
+
+#: usr/local/www/services_dhcp_relay.php:176
+#: usr/local/www/services_dhcp_relay.php:177
+#: usr/local/www/services_dhcp_relay.php:177
+#, php-format
+msgid ""
+"If this is checked, the DHCP relay will append the circuit ID (%s interface "
+"number) and the agent ID to the DHCP request."
+msgstr "DHCPè¦æ±‚ã«"(番å·ã¨ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ DHCPリレーã¯ã€å›žç·šID %sインターフェース)を追加ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp_relay.php:179
+#: usr/local/www/services_dhcpv6_relay.php:180
+#: usr/local/www/services_dhcp_relay.php:180
+#: usr/local/www/services_dhcpv6_relay.php:181
+#: usr/local/www/services_dhcpv6_relay.php:181
+#: usr/local/www/services_dhcp_relay.php:180
+msgid "Destination server"
+msgstr "é€ä¿¡å…ˆã‚µãƒ¼ãƒãƒ¼"
+
+#: usr/local/www/services_dhcp_relay.php:183
+#: usr/local/www/services_dhcp_relay.php:184
+#: usr/local/www/services_dhcp_relay.php:184
+msgid ""
+"This is the IP address of the server to which DHCP requests are relayed. You "
+"can enter multiple server IP addresses, separated by commas. Select "Proxy "
+"requests to DHCP server on WAN subnet" to relay DHCP packets to the server "
+"that was used on the WAN interface."
+msgstr "「ã“ã‚Œã¯DHCPè¦æ±‚を中継先ã®ã‚µãƒ¼ãƒãƒ¼ã®IPアドレスã§ã™ã€‚ã‚ãªãŸã¯ "カンマã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ã‚µãƒ¼ãƒãƒ¼ã®IPアドレスをã€å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ WANインターフェイス上ã§ä½¿ç”¨ã•ã‚ŒãŸã€Œã‚µãƒ¼ãƒã«DHCPパケットを中継ã™ã‚‹ã€ŒWANサブãƒãƒƒãƒˆä¸Šã®DHCPサーãƒãƒ¼ã‚’「プロキシã€ã®è¦æ±‚ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84
+#: usr/local/www/services_dnsmasq.php:86
+#: usr/local/www/services_dnsmasq.php:107
+#: usr/local/www/services_dnsmasq.php:107
+msgid "Invalid custom options"
+msgstr "無効ãªã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ション"
+
+#: usr/local/www/services_dnsmasq.php:147
+#: usr/local/www/services_dnsmasq.php:148
+#: usr/local/www/services_dnsmasq.php:152
+#: usr/local/www/services_dnsmasq.php:154
+#: usr/local/www/services_dnsmasq.php:175
+#: usr/local/www/services_dnsmasq.php:175
+msgid "The DNS forwarder configuration has been changed"
+msgstr "DNSフォワーダã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/services_dnsmasq.php:151
+#: usr/local/www/services_dnsmasq.php:152
+#: usr/local/www/services_dnsmasq.php:156
+#: usr/local/www/services_dnsmasq.php:158
+#: usr/local/www/services_dnsmasq.php:179
+#: usr/local/www/services_dnsmasq.php:179
+msgid "General DNS Forwarder Options"
+msgstr "一般的ãªDNSã®ãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ã‚ªãƒ—ション"
+
+#: usr/local/www/services_dnsmasq.php:157
+#: usr/local/www/services_dnsmasq.php:158
+#: usr/local/www/services_dnsmasq.php:162
+#: usr/local/www/services_dnsmasq.php:164
+#: usr/local/www/services_dnsmasq.php:185
+#: usr/local/www/services_dnsmasq.php:185
+msgid "Enable DNS forwarder"
+msgstr "DNSフォワーダを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dnsmasq.php:161
+#: usr/local/www/services_unbound.php:211
+#: usr/local/www/services_dnsmasq.php:162
+#: usr/local/www/services_dnsmasq.php:166
+#: usr/local/www/services_dnsmasq.php:168
+#: usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_dnsmasq.php:189
+msgid "DHCP Registration"
+msgstr "DHCP登録"
+
+#: usr/local/www/services_dnsmasq.php:164
+#: usr/local/www/services_dnsmasq.php:165
+#: usr/local/www/services_dnsmasq.php:169
+#: usr/local/www/services_dnsmasq.php:171
+#: usr/local/www/services_dnsmasq.php:192
+#: usr/local/www/services_dnsmasq.php:192
+msgid "Register DHCP leases in DNS forwarder"
+msgstr "レジスタDHCPã¯DNSフォワーダ内ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/services_dnsmasq.php:165
+#: usr/local/www/services_dnsmasq.php:166
+#: usr/local/www/services_dnsmasq.php:170
+#: usr/local/www/services_dnsmasq.php:172
+#: usr/local/www/services_dnsmasq.php:193
+#: usr/local/www/services_dnsmasq.php:193
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS forwarder, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr "「ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã¨ã彼らã®ãƒ›ã‚¹ãƒˆåを指定ã—ã¦ãƒžã‚·ãƒ³""自分ã®åå‰ã‚’入手ã—%sSystemドメインを設定ã™ã‚‹å¿…è¦ãŒè§£æ±ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ : "よã†ã«DHCPリースをè¦æ±‚ã™ã‚‹ã«ã¯ã€ DNSフォワーダã«ç™»éŒ²ã•ã‚Œã¾ã™ä¸€èˆ¬setup%sを。é©åˆ‡ãªå€¤ã«ã­ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:173
+#: usr/local/www/services_unbound.php:223
+#: usr/local/www/services_dnsmasq.php:174
+#: usr/local/www/services_dnsmasq.php:178
+#: usr/local/www/services_dnsmasq.php:180
+#: usr/local/www/services_dnsmasq.php:201
+#: usr/local/www/services_dnsmasq.php:201
+msgid "Static DHCP"
+msgstr "é™çš„DHCP"
+
+#: usr/local/www/services_dnsmasq.php:176
+#: usr/local/www/services_dnsmasq.php:177
+#: usr/local/www/services_dnsmasq.php:181
+#: usr/local/www/services_dnsmasq.php:183
+#: usr/local/www/services_dnsmasq.php:204
+#: usr/local/www/services_dnsmasq.php:204
+msgid "Register DHCP static mappings in DNS forwarder"
+msgstr "DNSフォワーダã§DHCPã®é™çš„マッピングを登録"
+
+#: usr/local/www/services_dnsmasq.php:177
+#: usr/local/www/services_dnsmasq.php:178
+#: usr/local/www/services_dnsmasq.php:182
+#: usr/local/www/services_dnsmasq.php:184
+#: usr/local/www/services_dnsmasq.php:205
+#: usr/local/www/services_dnsmasq.php:205
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS forwarder, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr "ãã®åå‰ãŒè§£æ±ºã§ãるよã†ã«ã€ DNSフォワーダã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ DHCPã®é™çš„マッピングラーニング登録ã•ã‚Œã‚‹ã€ 。一般setup%sé©æ­£å€¤ã«ï¼šã¾ãŸ%sSystemã®ã€Œãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:184
+#: usr/local/www/services_unbound.php:234
+#: usr/local/www/services_dnsmasq.php:185
+#: usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_dnsmasq.php:191
+#: usr/local/www/services_dnsmasq.php:212
+#: usr/local/www/services_dnsmasq.php:212
+msgid "Prefer DHCP"
+msgstr "DHCPを好む"
+
+#: usr/local/www/services_dnsmasq.php:187
+#: usr/local/www/services_unbound.php:237
+#: usr/local/www/services_dnsmasq.php:188
+#: usr/local/www/services_dnsmasq.php:192
+#: usr/local/www/services_dnsmasq.php:194
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_dnsmasq.php:215
+msgid "Resolve DHCP mappings first"
+msgstr "最åˆã®DHCPマッピングを解決ã™ã‚‹"
+
+#: usr/local/www/services_dnsmasq.php:188
+#: usr/local/www/services_unbound.php:238
+#: usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_dnsmasq.php:193
+#: usr/local/www/services_dnsmasq.php:195
+#: usr/local/www/services_dnsmasq.php:216
+#: usr/local/www/services_dnsmasq.php:216
+#, php-format
+msgid ""
+"If this option is set, then DHCP mappings will be resolved before the manual "
+"list of names below. This only affects the name given for a reverse lookup "
+"(PTR)."
+msgstr "下ã®åå‰ã®ãƒªã‚¹ãƒˆã€ã«ã¯ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ DHCPã®ãƒžãƒƒãƒ”ングã¯ã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã®å‰ã«è§£æ±ºã•ã‚Œã¾ã™ã€ 。ã“ã‚Œã¯ã€é€†å¼•ã〠( PTR )ã«æŒ‡å®šã•ã‚ŒãŸåå‰ã«å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:202
+#: usr/local/www/services_dnsmasq.php:203
+#: usr/local/www/services_dnsmasq.php:228
+#: usr/local/www/services_dnsmasq.php:241
+#: usr/local/www/services_dnsmasq.php:305
+#: usr/local/www/services_dnsmasq.php:305
+msgid ""
+"Enter any additional options you would like to add to the dnsmasq "
+"configuration here, separated by a space or newline"
+msgstr "以下ã«è¨­å®šã€ç©ºç™½ã‚„改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸã€Œã‚ãªãŸãŒDNSMASQã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_dnsmasq.php:216
+#: usr/local/www/services_dnsmasq.php:241
+#: usr/local/www/services_dnsmasq.php:254
+#: usr/local/www/services_dnsmasq.php:318
+#: usr/local/www/services_dnsmasq.php:318
+#, php-format
+msgid ""
+"If the DNS forwarder is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the forwarder. The DNS forwarder will use the DNS servers "
+"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on "
+"WAN if the &quot;Allow DNS server list to be overridden by DHCP/PPP on "
+"WAN&quot; is checked. If you don't use that option (or if you use a static "
+"IP address on WAN), you must manually specify at least one DNS server on the "
+"%sSystem:General setup%s page."
+msgstr "「 DNSフォワーダãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DHCPサービス(有効ãªå ´åˆï¼‰ãŒã—ã¾ã™ã€ãŒè‡ªå‹•çš„ã®ã§ã€ã€Œå½¼ã‚‰ã¯ãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ã‚’使用ã—ã¾ã™ã€‚ DNSフォワーダã¯ã€ DNSサーãƒãƒ¼ã‚’使用ã—ã¾ã™"DHCPクライアントã«DNSサーãƒãƒ¼ã¨ã—ã¦LAN IPアドレスをæä¾›ã™ã‚‹ã®%sã«å…¥åŠ›ã•ã‚ŒãŸã€‚ ■システム:一般setup%sã¾ãŸã¯è¨±å¯ã•ã‚Œã¦ã„ã‚‹DNSサーãƒãƒªã‚¹ãƒˆã€ŒWANã€ã§ã®DHCP / PPPã«ã‚ˆã£ã¦ç„¡åŠ¹ã«ã•ã‚Œã‚‹ã‚ˆã†ã«ã€ŒIF WAN ã€ãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„る上ã§ã®DHCPã‚„PPPを介ã—ã¦å¾—られãŸã‚‚ã®ã€‚ã‚ãªãŸã¯ãã®ã‚ªãƒ—ションを使用ã—ãªã„(ã¾ãŸã¯é™çš„使用ã™ã‚‹å ´åˆ%sSystem 「WAN上ã®IPアドレス)ã¯ã€æ‰‹å‹•ã§å°‘ãªãã¨ã‚‚1ã¤ã®DNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ã¨ã—ã¾ã™ã€‚全般setup%sページ。"
+
+#: usr/local/www/services_dnsmasq.php:231
+#: usr/local/www/services_unbound.php:267
+#: usr/local/www/services_dnsmasq.php:232
+#: usr/local/www/services_dnsmasq.php:257
+#: usr/local/www/services_dnsmasq.php:270
+#: usr/local/www/services_dnsmasq.php:334
+#: usr/local/www/services_dnsmasq.php:334
+msgid "Host Overrides"
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’ホストã™ã‚‹"
+
+#: usr/local/www/services_dnsmasq.php:235
+#: usr/local/www/services_unbound.php:271
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_dnsmasq.php:261
+#: usr/local/www/services_dnsmasq.php:274
+#: usr/local/www/services_dnsmasq.php:338
+#: usr/local/www/services_dnsmasq.php:338
+msgid ""
+"Entries in this section override individual results from the forwarders."
+msgstr "「ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã€ãƒ•ã‚©ãƒ¯ãƒ¼ãƒ€ãƒ¼ã‹ã‚‰ã®å€‹ã€…ã®çµæžœã‚’上書ãã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_unbound.php:272
+#: usr/local/www/services_dnsmasq.php:237
+#: usr/local/www/services_dnsmasq.php:262
+#: usr/local/www/services_dnsmasq.php:275
+#: usr/local/www/services_dnsmasq.php:339
+#: usr/local/www/services_dnsmasq.php:339
+msgid "Use these for changing DNS results or for adding custom DNS records."
+msgstr "DNSã®çµæžœã‚’​​変更ã™ã‚‹ãŸã‚ã€ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ DNSレコードを追加ã™ã‚‹ãŸã‚ã«ã“れらを使用ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_dnsmasq.php:299
+#: usr/local/www/services_dnsmasq.php:320
+#: usr/local/www/services_unbound.php:335
+#: usr/local/www/services_dnsmasq.php:321
+#: usr/local/www/services_dnsmasq.php:346
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/services_dnsmasq.php:423
+#: usr/local/www/services_dnsmasq.php:423
+msgid "Domain Overrides"
+msgstr "ドメインオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰"
+
+#: usr/local/www/services_dnsmasq.php:303
+#: usr/local/www/services_dnsmasq.php:324
+#: usr/local/www/services_unbound.php:339
+#: usr/local/www/services_dnsmasq.php:325
+#: usr/local/www/services_dnsmasq.php:350
+#: usr/local/www/services_dnsmasq.php:363
+#: usr/local/www/services_dnsmasq.php:427
+#: usr/local/www/services_dnsmasq.php:427
+msgid ""
+"Entries in this area override an entire domain by specifying an "
+"authoritative DNS server to be queried for that domain."
+msgstr "ãã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’照会ã™ã‚‹æ¨©é™ã‚’æŒã¤DNSサーãƒãƒ¼ã€ ã€ã“ã®ã‚¨ãƒªã‚¢å†…ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã€æŒ‡å®šã™ã‚‹ã“ã¨ã§ã€ãƒ‰ãƒ¡ã‚¤ãƒ³å…¨ä½“を上書ãã™ã‚‹ã€ 。"
+
+#: usr/local/www/services_dnsmasq.php:337
+#: usr/local/www/services_dnsmasq.php:358
+#: usr/local/www/services_unbound.php:373
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/services_dnsmasq.php:384
+#: usr/local/www/services_dnsmasq.php:397
+#: usr/local/www/services_dnsmasq.php:461
+#: usr/local/www/services_dnsmasq.php:461
+msgid "Do you really want to delete this domain override?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_dnsmasq_edit.php:100
+#: usr/local/www/services_dnsmasq_edit.php:138
+#: usr/local/www/services_dnsmasq_edit.php:138
+msgid "This host/domain already exists."
+msgstr "ã“ã®ãƒ›ã‚¹ãƒˆ/ドメインãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dnsmasq_edit.php:166
+msgid "Edit host"
+msgstr "編集ホスト"
+
+#: usr/local/www/services_dnsmasq_edit.php:138
+#: usr/local/www/services_dnsmasq_edit.php:193
+#: usr/local/www/services_dnsmasq_edit.php:194
+#: usr/local/www/services_dnsmasq_edit.php:194
+msgid "Edit DNS Forwarder entry"
+msgstr "編集ã®DNSフォワーダエントリ"
+
+#: usr/local/www/services_dnsmasq_edit.php:144
+#: usr/local/www/services_dnsmasq_edit.php:199
+#: usr/local/www/services_dnsmasq_edit.php:200
+#: usr/local/www/services_dnsmasq_edit.php:200
+msgid "Name of the host, without domain part"
+msgstr "ドメイン部分ãªã—ã§ã€ãƒ›ã‚¹ãƒˆã®åå‰"
+
+#: usr/local/www/services_dnsmasq_edit.php:146
+#: usr/local/www/services_dnsmasq_edit.php:201
+#: usr/local/www/services_dnsmasq_edit.php:202
+#: usr/local/www/services_dnsmasq_edit.php:202
+msgid "myhost"
+msgstr "myhostã«"
+
+#: usr/local/www/services_dnsmasq_edit.php:152
+#: usr/local/www/services_dnsmasq_edit.php:207
+#: usr/local/www/services_dnsmasq_edit.php:208
+#: usr/local/www/services_dnsmasq_edit.php:208
+msgid "Domain of the host"
+msgstr "ホストã®ãƒ‰ãƒ¡ã‚¤ãƒ³"
+
+#: usr/local/www/services_dnsmasq_edit.php:153
+#: usr/local/www/services_dnsmasq_edit.php:208
+#: usr/local/www/services_dnsmasq_edit.php:209
+#: usr/local/www/services_dnsmasq_edit.php:209
+msgid "example.com"
+msgstr "example.com"
+
+#: usr/local/www/services_dnsmasq_edit.php:159
+#: usr/local/www/services_dnsmasq_edit.php:214
+#: usr/local/www/services_dnsmasq_edit.php:215
+#: usr/local/www/services_dnsmasq_edit.php:215
+msgid "IP address of the host"
+msgstr "ホストã®IPアドレス"
+
+#: usr/local/www/diag_pkglogs.php:81 usr/local/www/diag_pkglogs.php:81
+msgid "Package logs"
+msgstr "パッケージログ"
+
+#: usr/local/www/diag_pkglogs.php:92 usr/local/www/diag_pkglogs.php:92
+msgid "No packages with logging facilities are currently installed."
+msgstr "ロギング機能ã¨ã®ãƒ‘ッケージã¯ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105
+#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105
+#, php-format
+msgid "%s"
+msgstr "%s"
+
+#: usr/local/www/diag_pkglogs.php:118 usr/local/www/diag_pkglogs.php:118
+#, php-format
+msgid "Last %1$s %2$s log entries"
+msgstr "最後ã¯%1$s %2$sログエントリ"
+
+#: usr/local/www/status.php:110 usr/local/www/status.php:111
+#: usr/local/www/status.php:111
+msgid "This status page includes the following information"
+msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹Â·ãƒšãƒ¼ã‚¸ã«ã¯ã€ä»¥ä¸‹ã®æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™"
+
+#: usr/local/www/status.php:225 usr/local/www/status.php:226
+#: usr/local/www/status.php:230 usr/local/www/status.php:230
+msgid ""
+"Note: make sure to remove any sensitive information (passwords, maybe also "
+"IP addresses) before posting information from this page in public places "
+"(like mailing lists)"
+msgstr "(メーリングリストã®ã‚ˆã†ãªï¼‰ 「公共ã®å ´ã§ã€ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã®æƒ…報を投稿ã™ã‚‹å‰ã«ã€Œ ( IPアドレス注機密情報ã€ãƒ‘スワードã€å¤šåˆ†ã‚‚)を除去ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ã€"
+
+#: usr/local/www/status.php:228 usr/local/www/status.php:229
+#: usr/local/www/status.php:233 usr/local/www/status.php:233
+msgid "Passwords in config.xml have been automatically removed"
+msgstr "config.xml内ã®ãƒ‘スワードã¯è‡ªå‹•çš„ã«å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67
+#: usr/local/www/bandwidth_by_ip.php:61 usr/local/www/bandwidth_by_ip.php:103
+#: usr/local/www/bandwidth_by_ip.php:103
+msgid "no info"
+msgstr "情報ãªã—"
+
+#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353
+#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321
+#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424
+#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355
+#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:428
+#: usr/local/www/vpn_pptp.php:358 usr/local/www/vpn_l2tp.php:74
+#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:428
+#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:358
+msgid "Server address"
+msgstr "サーãƒãƒ¼ã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73
+#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74
+#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:112
+#: usr/local/www/vpn_pptp.php:82
+msgid "Remote start address"
+msgstr "リモートスタートアドレス"
+
+#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78
+#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79
+#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117
+#: usr/local/www/vpn_pptp.php:87
+msgid "RADIUS server address"
+msgstr "RADIUSサーãƒã®IPアドレス"
+
+#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432
+#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428
+#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434
+#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pptp.php:437
+#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pppoe_edit.php:117
+#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:437
+msgid "RADIUS shared secret"
+msgstr "RADIUSã®å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ"
+
+#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84
+#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85
+#: usr/local/www/vpn_l2tp.php:85 usr/local/www/vpn_pppoe_edit.php:123
+#: usr/local/www/vpn_pptp.php:93
+msgid "A valid server address must be specified."
+msgstr "有効ãªã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87
+#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88
+#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pptp.php:99
+#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pppoe_edit.php:125
+#: usr/local/www/vpn_pptp.php:99
+msgid "A valid remote start address must be specified."
+msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90
+#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91
+#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pptp.php:102
+#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pppoe_edit.php:127
+#: usr/local/www/vpn_pptp.php:102
+msgid "A valid RADIUS server address must be specified."
+msgstr "有効ãªRADIUSサーãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106
+#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107
+#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pptp.php:111
+#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pppoe_edit.php:134
+#: usr/local/www/vpn_pptp.php:111
+msgid "The specified server address lies in the remote subnet."
+msgstr "指定ã•ã‚ŒãŸã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ–ãƒãƒƒãƒˆã«ã‚る。"
+
+#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109
+#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113
+#: usr/local/www/vpn_pptp.php:115 usr/local/www/vpn_l2tp.php:113
+#: usr/local/www/vpn_pptp.php:115
+msgid "The specified server address is equal to the LAN interface address."
+msgstr "指定ã•ã‚ŒãŸã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€LANインターフェイスã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨åŒã˜ã§ã‚る。"
+
+#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120
+#: usr/local/www/vpn_pptp.php:120
+msgid "PPTP redirection target address"
+msgstr "PPTPリダイレクト先ã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125
+#: usr/local/www/vpn_pptp.php:125
+msgid "A valid target address must be specified."
+msgstr "有効ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/vpn_pptp.php:196
+#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp.php:196
+#: usr/local/www/vpn_pptp_users_edit.php:135
+msgid "VPN PPTP"
+msgstr "ã®VPN ã€PPTP"
+
+#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89
+#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92
+#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93
+#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90
+#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp.php:305
+#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp_users.php:90
+#: usr/local/www/vpn_l2tp_users.php:93 usr/local/www/vpn_pptp.php:305
+msgid "Configuration"
+msgstr "設定"
+
+#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users.php:90
+#: usr/local/www/system_authservers.php:421
+#: usr/local/www/system_groupmanager.php:240
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/system_usermanager.php:440
+#: usr/local/www/system_usermanager_addprivs.php:167
+#: usr/local/www/system_usermanager_settings.php:113
+#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users.php:93
+#: usr/local/www/system_usermanager.php:438
+#: usr/local/www/system_groupmanager_addprivs.php:166
+#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94
+#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91
+#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285
+#: usr/local/www/system_authservers.php:433 usr/local/www/vpn_pptp.php:306
+#: usr/local/www/system_usermanager_settings.php:115
+#: usr/local/www/vpn_l2tp.php:285 usr/local/www/system_groupmanager.php:240
+#: usr/local/www/vpn_pptp_users.php:71 usr/local/www/vpn_pptp_users.php:91
+#: usr/local/www/system_usermanager_addprivs.php:167
+#: usr/local/www/vpn_l2tp_users.php:38 usr/local/www/vpn_l2tp_users.php:94
+#: usr/local/www/system_authservers.php:433
+#: usr/local/www/system_groupmanager_addprivs.php:166
+#: usr/local/www/vpn_pptp.php:306
+#: usr/local/www/system_usermanager_settings.php:115
+#: usr/local/www/system_usermanager.php:438
+msgid "Users"
+msgstr "ユーザー"
+
+#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322
+#: usr/local/www/vpn_pptp.php:325 usr/local/www/vpn_pptp.php:325
+msgid "Redirect incoming PPTP connections to"
+msgstr "ã¸ã®ç€ä¿¡PPTP接続をリダイレクト"
+
+#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324
+#: usr/local/www/vpn_pptp.php:327 usr/local/www/vpn_pptp.php:327
+msgid "PPTP redirection"
+msgstr "PPTPã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ"
+
+#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328
+#: usr/local/www/vpn_pptp.php:331 usr/local/www/vpn_pptp.php:331
+msgid ""
+"Enter the IP address of a host which will accept incoming PPTP connections"
+msgstr "「ç€ä¿¡PPTP接続をå—ã‘入れるホストã®IPアドレスを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334
+#: usr/local/www/vpn_pptp.php:337 usr/local/www/vpn_pptp.php:337
+msgid "Enable PPTP server"
+msgstr "PPTPサーãƒãƒ¼ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337
+#: usr/local/www/vpn_pptp.php:340 usr/local/www/vpn_pptp.php:340
+msgid "No. PPTP users"
+msgstr "番å·PPTPユーザー"
+
+#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351
+#: usr/local/www/vpn_pptp.php:354 usr/local/www/vpn_pptp.php:354
+msgid "Hint: 10 is ten PPTP clients"
+msgstr "ヒント:10 10 PPTPクライアントã§ã‚ã‚‹"
+
+#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359
+#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_pptp.php:362
+msgid ""
+"Enter the IP address the PPTP server should give to clients for use as their "
+""gateway""
+msgstr "「 「ゲートウェイã€ã®IPアドレスを入力ã—ã¦PPTPサーãƒãƒ¼ã¯ã€ãã®ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä¸Žãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€"
+
+#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327
+#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431
+#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328
+#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434
+#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331
+#: usr/local/www/vpn_pppoe_edit.php:434 usr/local/www/vpn_pptp.php:364
+msgid "Typically this is set to an unused IP just outside of the client range"
+msgstr "一般的ã«ã€ã“ã‚Œã¯å˜ãªã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç¯„囲外ã®æœªä½¿ç”¨ã®IPã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™"
+
+#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330
+#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434
+#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331
+#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437
+#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_l2tp.php:334
+#: usr/local/www/vpn_pppoe_edit.php:437 usr/local/www/vpn_pptp.php:367
+msgid ""
+"NOTE: This should NOT be set to any IP address currently in use on this "
+"firewall"
+msgstr ""注:ã“ã‚Œã¯ã€ã“ã®ä¸Šã§ç¾åœ¨ä½¿ç”¨ä¸­ã®ä»»æ„ã®IPアドレスã«è¨­å®šã—ãªã„ã§ãã ã•ã„ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«"
+
+#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333
+#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437
+#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440
+#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pppoe_edit.php:440
+#: usr/local/www/vpn_pptp.php:370
+msgid "Remote address range"
+msgstr "リモートアドレス範囲"
+
+#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372
+#: usr/local/www/vpn_pptp.php:375 usr/local/www/vpn_pptp.php:375
+msgid "Specify the starting address for the client IP subnet"
+msgstr "クライアントIPサブãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã™ã‚‹"
+
+#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375
+#: usr/local/www/vpn_pptp.php:378 usr/local/www/vpn_pptp.php:378
+msgid "PPTP DNS Servers"
+msgstr "PPTP DNSサーãƒ"
+
+#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381
+#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_pptp.php:384
+msgid "primary and secondary DNS servers assigned to PPTP clients"
+msgstr "PPTPクライアントã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ—ライマリãŠã‚ˆã³ã‚»ã‚«ãƒ³ãƒ€ãƒªDNSサーãƒ"
+
+#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404
+#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405
+#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387
+#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387
+msgid "WINS Server"
+msgstr "WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410
+#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462
+#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411
+#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414
+#: usr/local/www/vpn_pppoe_edit.php:465 usr/local/www/vpn_pptp.php:393
+msgid "RADIUS"
+msgstr "RADIUS"
+
+#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413
+#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414
+#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468
+#: usr/local/www/vpn_pptp.php:396 usr/local/www/vpn_l2tp.php:417
+#: usr/local/www/vpn_pppoe_edit.php:468 usr/local/www/vpn_pptp.php:396
+msgid "Use a RADIUS server for authentication"
+msgstr "èªè¨¼ç”¨ã®RADIUSサーãƒã‚’使用"
+
+#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394
+#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397
+#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used"
+msgstr "下ã®ã€Œè¨­å®šã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã•ã‚ŒãŸRADIUSサーãƒã‚’使用ã—ã¦èªè¨¼ã•ã‚Œã¾ã™ã€ 。ローカルユーザデータベースãŒä½¿ç”¨ã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417
+#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471
+#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418
+#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474
+#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_l2tp.php:421
+#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pptp.php:402
+msgid "Enable RADIUS accounting"
+msgstr "RADIUSアカウンティングを有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472
+#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400
+#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403
+#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403
+msgid "Sends accounting packets to the RADIUS server"
+msgstr "RADIUSサーãƒã«ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒ‘ケットをé€ä¿¡ã—ã¾ã™"
+
+#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403
+#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:406
+msgid "Secondary RADIUS server for failover authentication"
+msgstr "フェイルオーãƒãƒ¼èªè¨¼ã®ãŸã‚ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªRADIUSサーãƒ"
+
+#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404
+#: usr/local/www/vpn_pptp.php:407 usr/local/www/vpn_pptp.php:407
+msgid ""
+"When set, all requests will go to the secondary server when primary fails"
+msgstr "設定ã™ã‚‹ã¨ã€ãƒ—ライマリã«éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã€ ã€ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã‚»ã‚«ãƒ³ãƒ€ãƒªã‚µãƒ¼ãƒã«ç§»å‹•ã—ã¾ã™"
+
+#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492
+#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407
+#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410
+#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410
+msgid "RADIUS issued IPs"
+msgstr "RADIUSã¯ã€ IPを発行"
+
+#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408
+#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:411
+msgid "Issue IP addresses via RADIUS server"
+msgstr "RADIUSサーãƒãƒ¼ã‚’経由ã—ã¦ç™ºè¡Œã™ã‚‹IPアドレス"
+
+#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413
+#: usr/local/www/vpn_pptp.php:416 usr/local/www/vpn_pptp.php:416
+msgid "RADIUS NAS IP"
+msgstr "RADIUSã®NAS IP"
+
+#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485
+#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419
+#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422
+#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422
+msgid "RADIUS Accounting Update"
+msgstr "RADIUSアカウンティングアップデート"
+
+#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425
+#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425
+#: usr/local/www/vpn_pptp.php:428 usr/local/www/vpn_l2tp.php:425
+#: usr/local/www/vpn_pptp.php:428
+msgid "RADIUS Server"
+msgstr "RADIUSサーãƒ"
+
+#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446
+#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448
+#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451
+#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451
+msgid ""
+"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS "
+"server"
+msgstr "サーãƒãƒ¼ã€ŒRADIUSã®ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã€IPアドレス〠RADIUSãƒãƒ¼ãƒˆã€ãŠã‚ˆã³RADIUSを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510
+#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511
+#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438
+#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531
+#: usr/local/www/vpn_pptp.php:441 usr/local/www/vpn_pppoe_edit.php:514
+#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pptp.php:441
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server"
+msgstr "サーãƒãƒ¼ã€ŒRADIUSã¸ã®èªè¨¼ã«ä½¿ç”¨ã•ã‚Œã‚‹å…±æœ‰ç§˜å¯†ã‚’入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451
+#: usr/local/www/vpn_pptp.php:454 usr/local/www/vpn_pptp.php:454
+msgid "Secondary RADIUS shared secret"
+msgstr "セカンダリRADIUS共有シークレット"
+
+#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455
+#: usr/local/www/vpn_pptp.php:458 usr/local/www/vpn_pptp.php:458
+msgid ""
+"Enter the shared secret that will be used to authenticate to the secondary "
+"RADIUS server"
+msgstr "RADIUSサーãƒã€ŒäºŒæ¬¡ã¸ã®èªè¨¼ã«ä½¿ç”¨ã•ã‚Œã‚‹å…±æœ‰ç§˜å¯†ã‚’入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465
+#: usr/local/www/vpn_pptp.php:468 usr/local/www/vpn_pptp.php:468
+msgid "Require 128-bit encryption"
+msgstr "128ビット暗å·åŒ–ã‚’è¦æ±‚"
+
+#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466
+#: usr/local/www/vpn_pptp.php:469 usr/local/www/vpn_pptp.php:469
+msgid ""
+"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-"
+"bit encryption will be accepted as well. Note that encryption will always be "
+"forced on PPTP connections (i.e. unencrypted connections will not be "
+"accepted)"
+msgstr "「設定ã—ãŸå ´åˆã€å”¯ä¸€ã®128ビット暗å·åŒ–ã‚’å—ã‘入れられるãã†ã§ãªã„å ´åˆã¯40ビットãŠã‚ˆã³56 - 。 "ビットã®æš—å·åŒ–ãŒåŒæ§˜ã«å—ã‘入れられã¾ã™ã€‚æš—å·åŒ–ã¯ã€å¸¸ã«ã€Œ (å—ã‘入れã™ãªã‚ã¡æš—å·åŒ–ã•ã‚Œã¦ã„ãªã„接続ã¯ã•ã‚Œã¾ã›ã‚“) PPTP接続ã«å¼·åˆ¶"ã•ã‚Œã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483
+msgid "don't forget to "
+msgstr "ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„"
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483
+msgid "add a firewall rule"
+msgstr "ファイアウォールルールを追加"
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483 usr/local/www/vpn_pptp.php:483
+msgid "to permit traffic from PPTP clients"
+msgstr "PPTPクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’許å¯ã™ã‚‹"
+
+#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84
+#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82
+#: usr/local/www/vpn_pptp_users.php:82 usr/local/www/vpn_l2tp_users.php:85
+msgid "Warning: RADIUS is enabled. The local user database will not be used."
+msgstr "警告: RADIUSãŒæœ‰åŠ¹ã«ãªã£ã¦ã„る。ローカルユーザデータベースã¯ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84
+#: usr/local/www/vpn_pptp_users.php:84
+msgid "The PPTP user list has been modified"
+msgstr "PPTPユーザリストãŒå¤‰æ›´ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86
+#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84
+#: usr/local/www/vpn_pptp_users.php:84 usr/local/www/vpn_l2tp_users.php:87
+msgid "You must apply the changes in order for them to take effect"
+msgstr "ãれらを有効ã«ã™ã‚‹ã«ã¯ã€é †åºã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84
+#: usr/local/www/vpn_pptp_users.php:84
+msgid "Warning: this will terminate all current PPTP sessions"
+msgstr "警告:ã“ã‚Œã¯ç¾åœ¨ã®ã™ã¹ã¦ã®PPTPセッションを終了ã—ã¾ã™"
+
+#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127
+#: usr/local/www/system_usermanager.php:842
+#: usr/local/www/vpn_l2tp_users.php:120
+#: usr/local/www/system_usermanager.php:840
+#: usr/local/www/system_usermanager.php:845
+#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105
+#: usr/local/www/vpn_pptp_users.php:128
+#: usr/local/www/system_usermanager.php:798
+#: usr/local/www/vpn_pptp_users.php:105 usr/local/www/vpn_pptp_users.php:128
+#: usr/local/www/vpn_l2tp_users.php:121
+#: usr/local/www/system_usermanager.php:798
+msgid "add user"
+msgstr "ユーザーを追加"
+
+#: usr/local/www/vpn_pptp_users.php:117
+#: usr/local/www/system_usermanager.php:824
+#: usr/local/www/system_usermanager.php:822
+#: usr/local/www/system_usermanager.php:825
+#: usr/local/www/vpn_pptp_users.php:118
+#: usr/local/www/system_usermanager.php:848
+#: usr/local/www/vpn_pptp_users.php:118
+#: usr/local/www/system_usermanager.php:848
+msgid "edit user"
+msgstr "ユーザーã®ç·¨é›†"
+
+#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115
+#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119
+#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116
+msgid "Do you really want to delete this user?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_pptp_users.php:118
+#: usr/local/www/system_usermanager.php:829
+#: usr/local/www/vpn_l2tp_users.php:115
+#: usr/local/www/system_usermanager.php:827
+#: usr/local/www/system_usermanager.php:830
+#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119
+#: usr/local/www/system_usermanager.php:853
+#: usr/local/www/vpn_pptp_users.php:119 usr/local/www/vpn_l2tp_users.php:116
+#: usr/local/www/system_usermanager.php:853
+msgid "delete user"
+msgstr "ユーザーを削除ã™ã‚‹"
+
+#: usr/local/www/vpn_pptp_users_edit.php:85
+#: usr/local/www/services_dyndns_edit.php:94
+#: usr/local/www/system_usermanager.php:199
+#: usr/local/www/vpn_l2tp_users_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:110
+#: usr/local/www/vpn_l2tp_users_edit.php:88
+#: usr/local/www/services_dyndns_edit.php:111
+#: usr/local/www/services_dyndns_edit.php:111
+#: usr/local/www/vpn_l2tp_users_edit.php:88
+#: usr/local/www/vpn_pptp_users_edit.php:85
+#: usr/local/www/system_usermanager.php:199
+msgid "The username contains invalid characters."
+msgstr "ユーザーåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp_users_edit.php:88
+#: usr/local/www/vpn_pptp_users_edit.php:88
+msgid "The password cannot start with '!'."
+msgstr "パスワードã¯' ï¼'ã§å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_pptp_users_edit.php:91
+#: usr/local/www/vpn_l2tp_users_edit.php:90
+#: usr/local/www/vpn_l2tp_users_edit.php:91
+#: usr/local/www/vpn_l2tp_users_edit.php:91
+#: usr/local/www/vpn_pptp_users_edit.php:91
+msgid "The password contains invalid characters."
+msgstr "パスワードã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp_users_edit.php:94
+#: usr/local/www/system_usermanager.php:205
+#: usr/local/www/system_usermanager_passwordmg.php:54
+#: usr/local/www/vpn_l2tp_users_edit.php:93
+#: usr/local/www/vpn_l2tp_users_edit.php:94
+#: usr/local/www/system_usermanager_passwordmg.php:54
+#: usr/local/www/vpn_l2tp_users_edit.php:94
+#: usr/local/www/vpn_pptp_users_edit.php:94
+#: usr/local/www/system_usermanager.php:205
+msgid "The passwords do not match."
+msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_pptp_users_edit.php:97
+#: usr/local/www/vpn_l2tp_users_edit.php:96
+#: usr/local/www/vpn_l2tp_users_edit.php:97
+#: usr/local/www/vpn_l2tp_users_edit.php:97
+#: usr/local/www/vpn_pptp_users_edit.php:97
+msgid "The IP address entered is not valid."
+msgstr "入力ã—ãŸIPアドレスãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_pptp_users_edit.php:104
+#: usr/local/www/system_usermanager.php:215
+#: usr/local/www/vpn_l2tp_users_edit.php:103
+#: usr/local/www/vpn_l2tp_users_edit.php:104
+#: usr/local/www/vpn_l2tp_users_edit.php:104
+#: usr/local/www/vpn_pptp_users_edit.php:104
+#: usr/local/www/system_usermanager.php:215
+msgid "Another entry with the same username already exists."
+msgstr "åŒã˜ãƒ¦ãƒ¼ã‚¶åã®åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp_users_edit.php:155
+#: usr/local/www/vpn_l2tp_users_edit.php:163
+#: usr/local/www/vpn_pptp_users_edit.php:156
+#: usr/local/www/vpn_l2tp_users_edit.php:164
+#: usr/local/www/vpn_l2tp_users_edit.php:164
+#: usr/local/www/vpn_pptp_users_edit.php:156
+msgid "confirmation"
+msgstr "確èª"
+
+#: usr/local/www/vpn_pptp_users_edit.php:156
+#: usr/local/www/vpn_pptp_users_edit.php:157
+#: usr/local/www/vpn_pptp_users_edit.php:157
+msgid "If you want to change the users' password, enter it here twice."
+msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã—ãŸã„å ´åˆã¯ã€äºŒåº¦ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_pptp_users_edit.php:163
+#: usr/local/www/vpn_l2tp_users_edit.php:171
+#: usr/local/www/vpn_pptp_users_edit.php:164
+#: usr/local/www/vpn_l2tp_users_edit.php:172
+#: usr/local/www/vpn_l2tp_users_edit.php:172
+#: usr/local/www/vpn_pptp_users_edit.php:164
+msgid ""
+"If you want the user to be assigned a specific IP address, enter it here."
+msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç‰¹å®šã®IPアドレスを割り当ã¦ã‚‹ã“ã¨ãŒã—ãŸã„å ´åˆã¯"ã€ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚"
+
+#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71
+#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71
+#, php-format
+msgid "ERROR: Could not open %s."
+msgstr "ERROR : %s.ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/wizard.php:77 usr/local/www/wizard.php:77
+#, php-format
+msgid "ERROR: Could not parse %s/wizards/%s file."
+msgstr "ERROR : %s /ウィザード/ %sファイルを解æžã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:65
+#: usr/local/www/load_balancer_relay_action_edit.php:65
+msgid "Load Balancer: Relay Action:"
+msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼å‹•ä½œï¼š"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:124
+#: usr/local/www/load_balancer_relay_action_edit.php:124
+msgid "This action name has already been used. Action names must be unique."
+msgstr "ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³åã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„る。アクションåã¯ä¸€æ„ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:134
+#: usr/local/www/load_balancer_relay_action_edit.php:134
+#, php-format
+msgid "modified '%s' action:"
+msgstr "修正ã•ã‚ŒãŸã€Œ %s'アクション:"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+msgid "DNS"
+msgstr "DNS"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:408
+#: usr/local/www/load_balancer_relay_action_edit.php:407
+#: usr/local/www/load_balancer_relay_action_edit.php:405
+#: usr/local/www/load_balancer_relay_action_edit.php:405
+msgid "Edit Load Balancer - Relay Action entry"
+msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - リレーactionエントリ"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:508
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:173
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/load_balancer_relay_action_edit.php:505
+#: usr/local/www/load_balancer_relay_action_edit.php:505
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:173
+msgid "Key"
+msgstr "キー"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:517
+#: usr/local/www/load_balancer_relay_action_edit.php:537
+#: usr/local/www/load_balancer_relay_action_edit.php:516
+#: usr/local/www/load_balancer_relay_action_edit.php:536
+#: usr/local/www/load_balancer_relay_action_edit.php:514
+#: usr/local/www/load_balancer_relay_action_edit.php:534
+#: usr/local/www/load_balancer_relay_action_edit.php:514
+#: usr/local/www/load_balancer_relay_action_edit.php:534
+msgid "TODO"
+msgstr "TODO"
+
+#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54
+msgid "Disallowing CARP sync loop."
+msgstr "CARPåŒæœŸãƒ«ãƒ¼ãƒ—を許å¯ã—ãªã„。"
+
+#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63
+#: usr/local/www/xmlrpc.php:67
+msgid "Authentication failed"
+msgstr "èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74
+#: usr/local/www/xmlrpc.php:78
+msgid ""
+"XMLRPC wrapper for eval(). This method must be called with two parameters: a "
+"string containing the local system's password followed by the PHP code to "
+"evaluate."
+msgstr "「評価ã™ã‚‹ãŸã‚ã«ã€PHPコードãŒç¶šãローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: "eval.().ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€2ã¤ã®ãƒ‘ラメータã§å‘¼ã³å‡ºã•ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105
+#: usr/local/www/xmlrpc.php:109
+msgid ""
+"XMLRPC wrapper for mwexec(). This method must be called with two parameters: "
+"a string containing the local system's password followed by an shell "
+"command to execute."
+msgstr "〠。 mwexec.()ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€2ã¤ã®ãƒ‘ラメータã§å‘¼ã³å‡ºã•ã‚Œãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。「ローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列を実行ã™ã‚‹ãŸã‚ã®ã‚·ã‚§ãƒ«ã€ã‚³ãƒžãƒ³ãƒ‰ãŒç¶šã。"
+
+#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129
+#: usr/local/www/xmlrpc.php:133
+msgid ""
+"XMLRPC wrapper for backup_config_section. This method must be called with "
+"two parameters: a string containing the local system's password followed "
+"by an array containing the keys to be backed up."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—対象ã®ã‚­ãƒ¼ã‚’å«ã‚€é…列ã«ã‚ˆã£ã¦"ã«ç¶šãã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ã‚¹ãƒ†ãƒ 'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: 2パラメータã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 backup_config_sectionã®ãŸã‚ã®XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ã€ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„〠。"
+
+#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152
+#: usr/local/www/xmlrpc.php:159 usr/local/www/xmlrpc.php:159
+msgid ""
+"XMLRPC wrapper for restore_config_section. This method must be called with "
+"two parameters: a string containing the local system's password and an "
+"array to merge into the system's config. This function returns true upon "
+"completion."
+msgstr "「 restore_config_section用XMLRPCラッパーã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å‘¼ã³å‡ºã™å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ 「 2パラメータ:ローカルシステム'sã®ãƒ‘スワードã¨ã€Œ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹é…列ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282
+#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212
+#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316
+#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313
+#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308
+#: usr/local/www/xmlrpc.php:337 usr/local/www/xmlrpc.php:224
+#: usr/local/www/xmlrpc.php:308 usr/local/www/xmlrpc.php:337
+#, php-format
+msgid "Merged in config (%s sections) from XMLRPC client."
+msgstr "XMLRPCクライアントã‹ã‚‰ï¼ˆã‚»ã‚¯ã‚·ãƒ§ãƒ³%s )設定ã«åˆä½µã—ã¾ã—ãŸã€‚"
+
+#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272
+#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286
+#: usr/local/www/xmlrpc.php:286
+msgid ""
+"XMLRPC wrapper for merging package sections. This method must be called with "
+"two parameters: a string containing the local system's password and an "
+"array to merge into the system's config. This function returns true upon "
+"completion."
+msgstr "「パッケージã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’マージã™ã‚‹ãŸã‚ã®XMLRPCラッパーã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å‘¼ã³å‡ºã™å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ 「 2パラメータ:ローカルシステム'sã®ãƒ‘スワードã¨ã€Œ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹é…列ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297
+#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314
+#: usr/local/www/xmlrpc.php:314
+msgid ""
+"XMLRPC wrapper for merge_config_section. This method must be called with two "
+"parameters: a string containing the local system's password and an array "
+"to merge into the system's config. This function returns true upon "
+"completion."
+msgstr "パラメータ"merge_config_sectionãŸã‚XMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ 2ã¨å‘¼ã°ã‚Œãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。 〠:ローカルシステム'sã®ãƒ‘スワードã¨ã‚¢ãƒ¬ã‚¤ã€ SYSTEM ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã€ã‚’å«ã‚€æ–‡å­—列を完æˆã€‚ã®è¨­å®šã‚’ã“ã®é–¢æ•°ã¯ã€ä¸Šã«trueã‚’è¿”ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321
+#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342
+#: usr/local/www/xmlrpc.php:342
+msgid ""
+"Basic XMLRPC wrapper for filter_configure. This method must be called with "
+"one paramater: a string containing the local system's password. This "
+"function returns true upon completion."
+msgstr "ローカルシステム'sã®ãƒ‘スワードをå«ã‚€æ–‡å­—列: 1ã®paramater "。 filter_configureã®ãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパーã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ã€ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„〠。ã“ã®ã€Œæ©Ÿèƒ½ãŒå®Œäº†ã—ãŸæ™‚点ã§trueã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351
+#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372
+#: usr/local/www/xmlrpc.php:372
+msgid "Basic XMLRPC wrapper for configuring CARP interfaces."
+msgstr "CARPインタフェースを設定ã™ã‚‹ãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパー。"
+
+#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385
+#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394
+#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391
+#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418
+#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418
+msgid ""
+"Basic XMLRPC wrapper for check_firmware_version. This function will return "
+"the output of check_firmware_version upon completion."
+msgstr "完了時ã«check_firmware_versionã®å‡ºåŠ›ã‚’"check_firmware_versionãŸã‚ã®åŸºæœ¬XMLRPCラッパー。ã“ã®é–¢æ•°ã¯æˆ»ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415
+#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439
+#: usr/local/www/xmlrpc.php:439
+msgid "Basic XMLRPC wrapper for rc.reboot."
+msgstr "rc.rebootãŸã‚ã®åŸºæœ¬çš„ãªXMLRPCラッパー。"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:65
+#: usr/local/www/load_balancer_relay_protocol_edit.php:65
+msgid "Load Balancer: Relay Protocol:"
+msgstr "ロード·ãƒãƒ©ãƒ³ã‚µï¼šãƒªãƒ¬ãƒ¼ãƒ—ロトコル:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:86
+#: usr/local/www/load_balancer_relay_protocol_edit.php:86
+msgid ""
+"This protocol name has already been used. Protocol names must be unique."
+msgstr "「ã“ã®ãƒ—ロトコルåãŒæ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚プロトコルåã¯ä¸€æ„ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:105
+#: usr/local/www/load_balancer_relay_protocol_edit.php:105
+#, php-format
+msgid "modified '%s' load balancing protocol:"
+msgstr "修正ã•ã‚ŒãŸã€Œ %s 「ロード·ãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°Â·ãƒ—ロトコル:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:107
+#: usr/local/www/load_balancer_relay_protocol_edit.php:107
+msgid "name"
+msgstr "åå‰"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:108
+#: usr/local/www/load_balancer_relay_protocol_edit.php:110
+#: usr/local/www/load_balancer_relay_protocol_edit.php:108
+#: usr/local/www/load_balancer_relay_protocol_edit.php:110
+msgid "type"
+msgstr "タイプ"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:109
+#: usr/local/www/load_balancer_relay_protocol_edit.php:109
+msgid "description"
+msgstr "説明"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:111
+#: usr/local/www/load_balancer_relay_protocol_edit.php:111
+msgid "action"
+msgstr "アクション"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:192
+#: usr/local/www/load_balancer_relay_protocol_edit.php:190
+#: usr/local/www/load_balancer_relay_protocol_edit.php:190
+msgid "Edit Load Balancer - Relay Protocol entry"
+msgstr "編集ロードãƒãƒ©ãƒ³ã‚µ - リレープロトコルエントリ"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:227
+#: usr/local/www/load_balancer_relay_protocol_edit.php:225
+#: usr/local/www/load_balancer_relay_protocol_edit.php:225
+msgid "Add / remove available actions"
+msgstr "追加/使用å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’削除"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:237
+#: usr/local/www/load_balancer_relay_protocol_edit.php:235
+#: usr/local/www/load_balancer_relay_protocol_edit.php:235
+msgid "Available Actions"
+msgstr "使用å¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:252
+#: usr/local/www/system_crlmanager.php:474
+#: usr/local/www/load_balancer_relay_protocol_edit.php:250
+#: usr/local/www/system_crlmanager.php:507
+#: usr/local/www/load_balancer_relay_protocol_edit.php:250
+#: usr/local/www/system_crlmanager.php:507
+msgid "Add"
+msgstr "加ãˆã‚‹"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:259
+#: usr/local/www/load_balancer_relay_protocol_edit.php:257
+#: usr/local/www/load_balancer_relay_protocol_edit.php:257
+msgid "Enabled Actions"
+msgstr "有効ã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³"
+
+#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94
+#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr_settings.php:62
+#: usr/local/www/pkg_mgr_settings.php:93
+msgid "Package Settings"
+msgstr "パッケージ設定"
+
+#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:91
+#: usr/local/www/pkg_mgr_settings.php:91
+#, php-format
+msgid "%s packages"
+msgstr "%sパッケージ"
+
+#: usr/local/www/pkg_mgr_settings.php:102
+#: usr/local/www/pkg_mgr_settings.php:105
+#: usr/local/www/pkg_mgr_settings.php:101
+#: usr/local/www/pkg_mgr_settings.php:104
+#: usr/local/www/pkg_mgr_settings.php:101
+#: usr/local/www/pkg_mgr_settings.php:104
+msgid "Package Repository URL"
+msgstr "パッケージリãƒã‚¸ãƒˆãƒªã®URL"
+
+#: usr/local/www/pkg_mgr_settings.php:107
+#: usr/local/www/pkg_mgr_settings.php:106
+#: usr/local/www/pkg_mgr_settings.php:106
+msgid "Use a different URL server for packages other than"
+msgstr "以外ã®ãƒ‘ッケージã«åˆ¥ã®URLサーãƒã‚’使用ã—ã¦ã€"
+
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/pkg_mgr_settings.php:111
+#: usr/local/www/pkg_mgr_settings.php:111
+#, php-format
+msgid "This is where %s will check for packages when the"
+msgstr "%sパッケージをãƒã‚§ãƒƒã‚¯ã™ã‚‹å ´æ‰€ã§ã™ã¨ã"
+
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/pkg_mgr_settings.php:111
+#: usr/local/www/pkg_mgr_settings.php:111
+msgid "System: Packages"
+msgstr "システム:パッケージ"
+
+#: usr/local/www/services_captiveportal_hostname.php:111
+#: usr/local/www/services_captiveportal_hostname.php:109
+#: usr/local/www/services_captiveportal_hostname.php:109
+msgid "Allowed IP Addresses"
+msgstr "許å¯ã™ã‚‹IPアドレス"
+
+#: usr/local/www/services_captiveportal_hostname.php:173
+#: usr/local/www/services_captiveportal_hostname.php:171
+#: usr/local/www/services_captiveportal_hostname.php:171
+msgid ""
+"Adding allowed Hostnames will allow a DNS hostname access to/from access "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example. By specifying <em>from</em> addresses, it "
+"may be used to always allow pass-through access from a client behind the "
+"captive portal."
+msgstr "ãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã«é€£ã‚Œã¦è¡Œã‹ã‚Œã‚‹ã“ã¨ãªãã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ã€Œè¨±å¯ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆåを追加ã™ã‚‹ã¨ã€ã‚¢ã‚¯ã‚»ã‚¹ã¸ã®/ã‹ã‚‰ã®DNSホストåã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã€ä¾‹ãˆã°ã€åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ã€Œ Webサーãƒãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«ãƒšãƒ¼ã‚¸ã¾ãŸã¯DNSサーãƒãƒ¼ç”¨ã®ç”»åƒã‚’æä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹"ã“ã¨ãŒã§ãã¾ã™ã€‚ u003c/ emu003eã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰ã®u003cemu003e指定ã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€ã¯ã€å¸¸ã«èƒŒå¾Œã«ã‚るクライアントã‹ã‚‰ã®ãƒ‘ススルーã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãŸã‚ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãる〠。"
+
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "the Hostname are allowed"
+msgstr "ホストåãŒè¨±å¯ã•ã‚Œã¦ã„"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+msgid "Edit allowed Hostname"
+msgstr "編集許å¯ãƒ›ã‚¹ãƒˆå"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:102
+#: usr/local/www/services_captiveportal_hostname_edit.php:100
+#: usr/local/www/services_captiveportal_hostname_edit.php:100
+msgid "Allowed Hostname"
+msgstr "許å¯ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆå"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:107
+#: usr/local/www/services_captiveportal_hostname_edit.php:105
+#: usr/local/www/services_captiveportal_hostname_edit.php:105
+#, php-format
+msgid "A valid Hostname must be specified. [%s]"
+msgstr "有効ãªãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ( ( %s ) )"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+msgid ""
+"to always allow an Hostname through the captive portal (without "
+"authentication)"
+msgstr "「 (èªè¨¼å¸¸æ™‚ãšã«ï¼‰ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã‚’介ã—ã¦ãƒ›ã‚¹ãƒˆåを許å¯ã™ã‚‹ã«ã¯ã€ã€Œ"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+msgid ""
+"to allow access from all clients (even non-authenticated ones) behind the "
+"portal to this Hostname"
+msgstr "ã“ã®ãƒ›ã‚¹ãƒˆåã¸ã®ãƒãƒ¼ã‚¿ãƒ«ã€ã®å¾Œã‚ã«ï¼ˆã‚‚å«ã‚ã¦éžèªè¨¼ï¼‰ ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã«ã¯ã€ã€Œ"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:190
+#: usr/local/www/services_captiveportal_hostname_edit.php:192
+msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s"
+msgstr "キロビット/秒ã§ã€ã“ã®ãƒ›ã‚¹ãƒˆåã«æ–½è¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ã‚¢ãƒƒãƒ—ロード制é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:198
+#: usr/local/www/services_captiveportal_hostname_edit.php:196
+#: usr/local/www/services_captiveportal_hostname_edit.php:198
+msgid "Enter a download limit to be enforced on this Hostname in Kbit/s"
+msgstr "キロビット/秒ã§ã€ã“ã®ãƒ›ã‚¹ãƒˆåã«æ–½è¡Œã•ã‚Œã‚‹ã‚ˆã†ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰åˆ¶é™ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_vouchers.php:67
+#: usr/local/www/services_captiveportal_vouchers.php:64
+#: usr/local/www/services_captiveportal_vouchers.php:64
+msgid ""
+"You will need to recreate any existing Voucher Rolls due to the public and "
+"private key changes. Click cancel if you do not wish to recreate the "
+"vouchers."
+msgstr "ã‚ãªãŸã¯ã€å…¬é–‹éµã¨ç§˜å¯†éµã®å¤‰æ›´ã«ã‚ˆã‚‹æ—¢å­˜ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚’å†ä½œæˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã‚ãªãŸãŒä¼ç¥¨ã‚’å†ä½œæˆã—ãŸããªã„å ´åˆã¯ã€[キャンセル]をクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:114
+#: usr/local/www/services_captiveportal_vouchers.php:123
+#: usr/local/www/services_captiveportal_vouchers.php:130
+#: usr/local/www/services_captiveportal_vouchers.php:130
+msgid "Voucher invalid"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ç„¡åŠ¹"
+
+#: usr/local/www/services_captiveportal_vouchers.php:116
+#: usr/local/www/services_captiveportal_vouchers.php:125
+#: usr/local/www/services_captiveportal_vouchers.php:132
+#: usr/local/www/services_captiveportal_vouchers.php:132
+msgid "Voucher expired"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:139
+#: usr/local/www/services_captiveportal_vouchers.php:148
+#: usr/local/www/services_captiveportal_vouchers.php:155
+#: usr/local/www/services_captiveportal_vouchers.php:155
+msgid "Cannot write private key file"
+msgstr "秘密éµãƒ•ã‚¡ã‚¤ãƒ«ã‚’書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+#: usr/local/www/services_captiveportal_vouchers.php:157
+#: usr/local/www/services_captiveportal_vouchers.php:166
+#: usr/local/www/services_captiveportal_vouchers.php:175
+#: usr/local/www/services_captiveportal_vouchers.php:175
+msgid "Need private RSA key to print vouchers"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’å°åˆ·ã™ã‚‹RSA秘密éµã‚’å¿…è¦ã¨ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "charset"
+msgstr "文字セット"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "rollbits"
+msgstr "rollbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "ticketbits"
+msgstr "ticketbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "checksumbits"
+msgstr "checksumbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "publickey"
+msgstr "公開éµ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "magic"
+msgstr "マジック"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:565
+#: usr/local/www/services_captiveportal_vouchers.php:572
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:585
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:594
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:599
+msgid "Synchronize Voucher Database IP"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®IPアドレスをåŒæœŸã•ã›ã‚‹"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync port"
+msgstr "åŒæœŸãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync password"
+msgstr "åŒæœŸãƒ‘スワード"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync username"
+msgstr "åŒæœŸãƒ¦ãƒ¼ã‚¶å"
+
+#: usr/local/www/services_captiveportal_vouchers.php:203
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:222
+#: usr/local/www/services_captiveportal_vouchers.php:222
+msgid "Need at least 2 characters to create vouchers."
+msgstr "ä¼ç¥¨ã‚’作æˆã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚2文字を必è¦ã¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:205
+#: usr/local/www/services_captiveportal_vouchers.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:224
+#: usr/local/www/services_captiveportal_vouchers.php:224
+msgid "Double quotes aren't allowed."
+msgstr "二é‡å¼•ç”¨ç¬¦ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:207
+#: usr/local/www/services_captiveportal_vouchers.php:217
+#: usr/local/www/services_captiveportal_vouchers.php:226
+#: usr/local/www/services_captiveportal_vouchers.php:226
+msgid "aren't allowed."
+msgstr "許å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:209
+#: usr/local/www/services_captiveportal_vouchers.php:219
+#: usr/local/www/services_captiveportal_vouchers.php:228
+#: usr/local/www/services_captiveportal_vouchers.php:228
+msgid "# of Bits to store Roll Id needs to be between 1..31."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:211
+#: usr/local/www/services_captiveportal_vouchers.php:221
+#: usr/local/www/services_captiveportal_vouchers.php:230
+#: usr/local/www/services_captiveportal_vouchers.php:230
+msgid "# of Bits to store Ticket Id needs to be between 1..16."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:223
+#: usr/local/www/services_captiveportal_vouchers.php:232
+#: usr/local/www/services_captiveportal_vouchers.php:232
+msgid "# of Bits to store checksum needs to be between 1..31."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_vouchers.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:225
+#: usr/local/www/services_captiveportal_vouchers.php:234
+#: usr/local/www/services_captiveportal_vouchers.php:234
+msgid "This doesn't look like an RSA Public key."
+msgstr "ã“ã‚Œã¯ã€RSA公開éµã®ã‚ˆã†ã«ã—ã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:217
+#: usr/local/www/services_captiveportal_vouchers.php:227
+#: usr/local/www/services_captiveportal_vouchers.php:236
+#: usr/local/www/services_captiveportal_vouchers.php:236
+msgid "This doesn't look like an RSA Private key."
+msgstr "ã“ã‚Œã¯RSA秘密éµã®ã‚ˆã†ã«ã—ã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:219
+#: usr/local/www/services_captiveportal_vouchers.php:229
+#: usr/local/www/services_captiveportal_vouchers.php:238
+#: usr/local/www/services_captiveportal_vouchers.php:238
+msgid "You cannot sync the voucher database to this host (itself)."
+msgstr "ã‚ãªãŸã¯ã“ã®ãƒ›ã‚¹ãƒˆï¼ˆè‡ªä½“)ã«ã‚¯ãƒ¼ãƒãƒ³ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’åŒæœŸã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:421
+#: usr/local/www/services_captiveportal_vouchers.php:428
+#: usr/local/www/services_captiveportal_vouchers.php:441
+#: usr/local/www/services_captiveportal_vouchers.php:450
+#: usr/local/www/services_captiveportal_vouchers.php:455
+msgid "Enable Vouchers"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_vouchers.php:435
+#: usr/local/www/services_captiveportal_vouchers_edit.php:173
+#: usr/local/www/status_captiveportal_vouchers.php:116
+#: usr/local/www/services_captiveportal_vouchers.php:442
+#: usr/local/www/status_captiveportal_vouchers.php:117
+#: usr/local/www/services_captiveportal_vouchers.php:455
+#: usr/local/www/services_captiveportal_vouchers_edit.php:171
+#: usr/local/www/services_captiveportal_vouchers.php:464
+#: usr/local/www/status_captiveportal_vouchers.php:122
+#: usr/local/www/services_captiveportal_vouchers.php:469
+#: usr/local/www/services_captiveportal_vouchers_edit.php:171
+#: usr/local/www/status_captiveportal_vouchers.php:122
+msgid "Roll"
+msgstr "ロール"
+
+#: usr/local/www/services_captiveportal_vouchers.php:436
+#: usr/local/www/status_captiveportal_voucher_rolls.php:86
+#: usr/local/www/services_captiveportal_vouchers.php:443
+#: usr/local/www/services_captiveportal_vouchers.php:456
+#: usr/local/www/status_captiveportal_voucher_rolls.php:87
+#: usr/local/www/services_captiveportal_vouchers.php:465
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:470
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+msgid "Minutes/Ticket"
+msgstr "分/ãƒã‚±ãƒƒãƒˆ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:437
+#: usr/local/www/services_captiveportal_vouchers.php:444
+#: usr/local/www/services_captiveportal_vouchers.php:457
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:471
+msgid "of Tickets"
+msgstr "ãƒã‚±ãƒƒãƒˆ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:438
+#: usr/local/www/services_captiveportal_vouchers_edit.php:197
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+#: usr/local/www/services_captiveportal_vouchers.php:445
+#: usr/local/www/services_captiveportal_vouchers.php:458
+#: usr/local/www/services_captiveportal_vouchers_edit.php:195
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:467
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/services_captiveportal_vouchers.php:472
+#: usr/local/www/services_captiveportal_vouchers_edit.php:195
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+msgid "Comment"
+msgstr "コメント"
+
+#: usr/local/www/services_captiveportal_vouchers.php:458
+#: usr/local/www/services_captiveportal_vouchers.php:465
+#: usr/local/www/services_captiveportal_vouchers.php:478
+#: usr/local/www/services_captiveportal_vouchers.php:487
+#: usr/local/www/services_captiveportal_vouchers.php:492
+msgid "edit voucher"
+msgstr "編集ãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:479
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:493
+msgid ""
+"Do you really want to delete this voucher? This makes all vouchers from this "
+"roll invalid"
+msgstr "ロール無効"本当ã«ã“ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿã“ã‚Œã¯ã€ã“ã®ã‹ã‚‰ã®ã™ã¹ã¦ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãŒä½œã‚‹""
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:479
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:493
+msgid "delete vouchers"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’削除"
+
+#: usr/local/www/services_captiveportal_vouchers.php:460
+#: usr/local/www/services_captiveportal_vouchers.php:467
+#: usr/local/www/services_captiveportal_vouchers.php:480
+#: usr/local/www/services_captiveportal_vouchers.php:489
+#: usr/local/www/services_captiveportal_vouchers.php:494
+msgid "generate vouchers for this roll to CSV file"
+msgstr "CSVファイルã¸ã®ã“ã®ãƒ­ãƒ¼ãƒ«ã®ãŸã‚ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’生æˆ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:470
+#: usr/local/www/services_captiveportal_vouchers.php:477
+#: usr/local/www/services_captiveportal_vouchers.php:490
+#: usr/local/www/services_captiveportal_vouchers.php:499
+#: usr/local/www/services_captiveportal_vouchers.php:504
+msgid "add voucher"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’追加"
+
+#: usr/local/www/services_captiveportal_vouchers.php:475
+#: usr/local/www/services_captiveportal_vouchers.php:482
+#: usr/local/www/services_captiveportal_vouchers.php:495
+#: usr/local/www/services_captiveportal_vouchers.php:504
+#: usr/local/www/services_captiveportal_vouchers.php:509
+msgid ""
+"Create, generate and activate Rolls with Vouchers that allow access through "
+"the captive portal for the configured time. Once a voucher is activated, its "
+"clock is started and runs uninterrupted until it expires. During that time, "
+"the voucher can be re-used from the same or a different computer. If the "
+"voucher is used again from another computer, the previous session is stopped."
+msgstr "「作æˆç”Ÿæˆã—ã€çµŒç”±ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ãƒã‚¦ãƒãƒ£ãƒ¼ã¨ãƒ­ãƒ¼ãƒ«ã‚’アクティブã«ã€è¨­å®šã•ã‚ŒãŸæ™‚é–“ã®ãŸã‚ã®ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€‚ãƒã‚¦ãƒãƒ£ãƒ¼ãŒèµ·å‹•ã•ã‚Œã‚‹ã¨ã€ãã®ã€Œã‚¯ãƒ­ãƒƒã‚¯ãŒé–‹å§‹ã•ã‚Œã€ãã‚Œã¯ãã®é–“ã€æœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ä¸­æ–­ã›ãšã«å®Ÿè¡Œã€Œãƒã‚¦ãƒãƒ£ãƒ¼ã¯ã€åŒä¸€ã¾ãŸã¯ç•°ãªã‚‹ã‚³ãƒ³ãƒ”ュータã‹ã‚‰å†ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãる。 「ãƒã‚¦ãƒãƒ£ãƒ¼ã¯ã€åˆ¥ã®ã‚³ãƒ³ãƒ”ュータã‹ã‚‰å†åº¦ä½¿ç”¨ã•ã‚Œã‚‹å ´åˆã€ä»¥å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’åœæ­¢ã™ã‚‹ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:481
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:501
+#: usr/local/www/services_captiveportal_vouchers.php:510
+#: usr/local/www/services_captiveportal_vouchers.php:515
+msgid ""
+"Enable Voucher support first using the checkbox above and hit Save at the "
+"bottom."
+msgstr "「最åˆã«ã€ä¸Šè¨˜ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’使用ã—ã¦ã‚¯ãƒ¼ãƒãƒ³ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¦ã€ã§ã€ä¿å­˜ã‚’打ã¤ã€Œãƒœãƒˆãƒ ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:486
+#: usr/local/www/services_captiveportal_vouchers.php:493
+#: usr/local/www/services_captiveportal_vouchers.php:506
+#: usr/local/www/services_captiveportal_vouchers.php:515
+#: usr/local/www/services_captiveportal_vouchers.php:520
+msgid "Voucher public key"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼å…¬é–‹éµ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:525
+msgid ""
+"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is "
+"used to decrypt vouchers."
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’復å·åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€Œ RSA公開éµã“ã“ã«PEMå½¢å¼ã®ï¼ˆ 64ビットã¾ãŸã¯ãれ以下) 。ã“ã®ã‚­ãƒ¼ã¯ã•ã‚Œã¦è²¼ã‚Šä»˜ã‘〠。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid "Generate"
+msgstr "生æˆã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid "new key"
+msgstr "æ–°ã—ã„キー"
+
+#: usr/local/www/services_captiveportal_vouchers.php:494
+#: usr/local/www/services_captiveportal_vouchers.php:501
+#: usr/local/www/services_captiveportal_vouchers.php:514
+#: usr/local/www/services_captiveportal_vouchers.php:523
+#: usr/local/www/services_captiveportal_vouchers.php:528
+msgid "Voucher private key"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ç§˜å¯†éµ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid ""
+"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is "
+"only used to generate encrypted vouchers and doesn't need to be available if "
+"the vouchers have been generated offline."
+msgstr "「 RSA秘密éµã“ã“ã«PEMå½¢å¼ã®ï¼ˆ 64ビットã¾ãŸã¯ãれ以下) 。ã“ã®ã‚­ãƒ¼ãŒè²¼ã‚Šä»˜ã‘ã€ã®ã¿ã€æš—å·åŒ–ã•ã‚ŒãŸä¼ç¥¨ã‚’生æˆã—ã€ä¼ç¥¨ã‚’オフラインã§ç”Ÿæˆã•ã‚ŒãŸã€å ´åˆã«ä½¿ç”¨å¯èƒ½ã§ã‚ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“使用。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:502
+#: usr/local/www/services_captiveportal_vouchers.php:509
+#: usr/local/www/services_captiveportal_vouchers.php:522
+#: usr/local/www/services_captiveportal_vouchers.php:531
+#: usr/local/www/services_captiveportal_vouchers.php:536
+msgid "Character set"
+msgstr "文字セット"
+
+#: usr/local/www/services_captiveportal_vouchers.php:506
+#: usr/local/www/services_captiveportal_vouchers.php:513
+#: usr/local/www/services_captiveportal_vouchers.php:526
+#: usr/local/www/services_captiveportal_vouchers.php:535
+#: usr/local/www/services_captiveportal_vouchers.php:540
+msgid ""
+"Tickets are generated with the specified character set. It should contain "
+"printable characters (numbers, lower case and upper case letters) that are "
+"hard to confuse with others. Avoid e.g. 0/O and l/1."
+msgstr "「ãƒã‚±ãƒƒãƒˆã¯æŒ‡å®šã•ã‚ŒãŸæ–‡å­—セットã§ç”Ÿæˆã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€å«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 「他ã®äººã¨æ··åŒã—ã«ãã„å°åˆ·å¯èƒ½ãªæ–‡å­—(数字ã€å°æ–‡å­—ã®ã¨å¤§æ–‡å­—を) 。例ãˆã°ã€0 / Oã¨L / 1ã‚’é¿ã‘ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_captiveportal_vouchers.php:510
+#: usr/local/www/services_captiveportal_vouchers.php:517
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:539
+#: usr/local/www/services_captiveportal_vouchers.php:544
+msgid "of Roll Bits"
+msgstr "ロールビットã®"
+
+#: usr/local/www/services_captiveportal_vouchers.php:514
+#: usr/local/www/services_captiveportal_vouchers.php:521
+#: usr/local/www/services_captiveportal_vouchers.php:534
+#: usr/local/www/services_captiveportal_vouchers.php:543
+#: usr/local/www/services_captiveportal_vouchers.php:548
+msgid ""
+"Reserves a range in each voucher to store the Roll # it belongs to. Allowed "
+"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the "
+"RSA key size."
+msgstr "「ロールを格ç´ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã«ç¯„囲を予約"
+
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:538
+#: usr/local/www/services_captiveportal_vouchers.php:547
+#: usr/local/www/services_captiveportal_vouchers.php:552
+msgid "of Ticket Bits"
+msgstr "ãƒã‚±ãƒƒãƒˆã®ãƒ“ット数"
+
+#: usr/local/www/services_captiveportal_vouchers.php:522
+#: usr/local/www/services_captiveportal_vouchers.php:529
+#: usr/local/www/services_captiveportal_vouchers.php:542
+#: usr/local/www/services_captiveportal_vouchers.php:551
+#: usr/local/www/services_captiveportal_vouchers.php:556
+msgid ""
+"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed "
+"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A "
+"bit array, stored in RAM and in the config, is used to mark if a voucher has "
+"been used. A bit array for 65535 vouchers requires 8 KB of storage."
+msgstr "「ãƒã‚±ãƒƒãƒˆã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã«ç¯„囲を予約"
+
+#: usr/local/www/services_captiveportal_vouchers.php:526
+#: usr/local/www/services_captiveportal_vouchers.php:533
+#: usr/local/www/services_captiveportal_vouchers.php:546
+#: usr/local/www/services_captiveportal_vouchers.php:555
+#: usr/local/www/services_captiveportal_vouchers.php:560
+msgid "of Checksum Bits"
+msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®ãƒ“ット数"
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+#: usr/local/www/services_captiveportal_vouchers.php:550
+#: usr/local/www/services_captiveportal_vouchers.php:559
+#: usr/local/www/services_captiveportal_vouchers.php:564
+msgid ""
+"Reserves a range in each voucher to store a simple checksum over Roll # and "
+"Ticket#. Allowed range is 0..31."
+msgstr "「ロールã«å¯¾ã™ã‚‹å˜ç´”ãªãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«ã€å„ãƒã‚¦ãƒãƒ£ãƒ¼ã§ã®ç¯„囲を予約"
+
+#: usr/local/www/services_captiveportal_vouchers.php:534
+#: usr/local/www/services_captiveportal_vouchers.php:541
+#: usr/local/www/services_captiveportal_vouchers.php:554
+#: usr/local/www/services_captiveportal_vouchers.php:563
+#: usr/local/www/services_captiveportal_vouchers.php:568
+msgid "Magic Number"
+msgstr "マジックナンãƒãƒ¼"
+
+#: usr/local/www/services_captiveportal_vouchers.php:538
+#: usr/local/www/services_captiveportal_vouchers.php:545
+#: usr/local/www/services_captiveportal_vouchers.php:558
+#: usr/local/www/services_captiveportal_vouchers.php:567
+#: usr/local/www/services_captiveportal_vouchers.php:572
+msgid ""
+"Magic number stored in every voucher. Verified during voucher check. Size "
+"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits "
+"are used, no magic number will be used and checked."
+msgstr "「ãƒã‚¦ãƒãƒ£ãƒ¼ãƒã‚§ãƒƒã‚¯ã€‚広ã•ã”ã¨ã«ä¼ç¥¨ãŒæ¤œè¨¼æ¸ˆã¿ã«æ ¼ç´ã•ã‚Œã¦ã„るマジックナンãƒãƒ¼ã¯ã€Œãƒ­ãƒ¼ãƒ«ãƒã‚±ãƒƒãƒˆãƒã‚§ãƒƒã‚¯ã‚µãƒ ãƒ“ットã ã‘残ã£ã¦ã„るビット数ã«ä¾å­˜ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ“ットãŒã€Œä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ãƒžã‚¸ãƒƒã‚¯ãƒŠãƒ³ãƒãƒ¼ã¯ä½¿ç”¨ã•ã‚Œãšã€ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:542
+#: usr/local/www/services_captiveportal_vouchers.php:549
+#: usr/local/www/services_captiveportal_vouchers.php:562
+#: usr/local/www/services_captiveportal_vouchers.php:571
+#: usr/local/www/services_captiveportal_vouchers.php:576
+msgid "Invalid Voucher Message"
+msgstr "無効ãªãƒã‚¦ãƒãƒ£ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+#: usr/local/www/services_captiveportal_vouchers.php:545
+#: usr/local/www/services_captiveportal_vouchers.php:552
+#: usr/local/www/services_captiveportal_vouchers.php:565
+#: usr/local/www/services_captiveportal_vouchers.php:574
+#: usr/local/www/services_captiveportal_vouchers.php:579
+msgid ""
+"Error message displayed for invalid vouchers on captive portal error page"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ã§ç„¡åŠ¹ãªã‚¯ãƒ¼ãƒãƒ³ã«è¡¨ç¤ºã•ã‚Œã‚‹"エラーメッセージ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:549
+#: usr/local/www/services_captiveportal_vouchers.php:556
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:578
+#: usr/local/www/services_captiveportal_vouchers.php:583
+msgid "Expired Voucher Message"
+msgstr "期é™åˆ‡ã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+#: usr/local/www/services_captiveportal_vouchers.php:552
+#: usr/local/www/services_captiveportal_vouchers.php:559
+#: usr/local/www/services_captiveportal_vouchers.php:572
+#: usr/local/www/services_captiveportal_vouchers.php:581
+#: usr/local/www/services_captiveportal_vouchers.php:586
+msgid ""
+"Error message displayed for expired vouchers on captive portal error page"
+msgstr "キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¨ãƒ©ãƒ¼ãƒšãƒ¼ã‚¸ä¸Šã®æœŸé™åˆ‡ã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã«è¡¨ç¤ºã•ã‚Œã‚‹"エラーメッセージ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:562
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:582
+#: usr/local/www/services_captiveportal_vouchers.php:591
+#: usr/local/www/services_captiveportal_vouchers.php:596
+msgid "Voucher database synchronization"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®åŒæœŸ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:568
+#: usr/local/www/services_captiveportal_vouchers.php:575
+#: usr/local/www/services_captiveportal_vouchers.php:588
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers.php:602
+msgid ""
+"IP address of master nodes webConfigurator to synchronize voucher database "
+"and used vouchers from."
+msgstr "「IPãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’åŒæœŸã™ã‚‹ã«ã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã¨ã®ä½¿ç”¨ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:576
+#: usr/local/www/services_captiveportal_vouchers.php:589
+#: usr/local/www/services_captiveportal_vouchers.php:598
+#: usr/local/www/services_captiveportal_vouchers.php:603
+msgid "NOTE: this should be setup on the slave nodes and not the primary node!"
+msgstr "注:ã“ã‚Œã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ノードã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¨ãƒ—ライマリノードã§ã¯ãªã„ã¯ãšï¼"
+
+#: usr/local/www/services_captiveportal_vouchers.php:573
+#: usr/local/www/services_captiveportal_vouchers.php:580
+#: usr/local/www/services_captiveportal_vouchers.php:593
+#: usr/local/www/services_captiveportal_vouchers.php:602
+#: usr/local/www/services_captiveportal_vouchers.php:607
+msgid "Voucher sync port"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_captiveportal_vouchers.php:576
+#: usr/local/www/services_captiveportal_vouchers.php:583
+#: usr/local/www/services_captiveportal_vouchers.php:596
+#: usr/local/www/services_captiveportal_vouchers.php:605
+#: usr/local/www/services_captiveportal_vouchers.php:610
+msgid ""
+"This is the port of the master voucher nodes webConfigurator. Example: 443"
+msgstr "「ã“ã‚Œã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒãƒ¼ãƒˆã§ã™ä¾‹ï¼š 443"
+
+#: usr/local/www/services_captiveportal_vouchers.php:580
+#: usr/local/www/services_captiveportal_vouchers.php:587
+#: usr/local/www/services_captiveportal_vouchers.php:600
+#: usr/local/www/services_captiveportal_vouchers.php:609
+#: usr/local/www/services_captiveportal_vouchers.php:614
+msgid "Voucher sync username"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒ¦ãƒ¼ã‚¶å"
+
+#: usr/local/www/services_captiveportal_vouchers.php:583
+#: usr/local/www/services_captiveportal_vouchers.php:590
+#: usr/local/www/services_captiveportal_vouchers.php:603
+#: usr/local/www/services_captiveportal_vouchers.php:612
+#: usr/local/www/services_captiveportal_vouchers.php:617
+msgid "This is the username of the master voucher nodes webConfigurator."
+msgstr "ã“ã‚Œã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:587
+#: usr/local/www/services_captiveportal_vouchers.php:594
+#: usr/local/www/services_captiveportal_vouchers.php:607
+#: usr/local/www/services_captiveportal_vouchers.php:616
+#: usr/local/www/services_captiveportal_vouchers.php:621
+msgid "Voucher sync password"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼åŒæœŸãƒ‘スワード"
+
+#: usr/local/www/services_captiveportal_vouchers.php:590
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers.php:610
+#: usr/local/www/services_captiveportal_vouchers.php:619
+#: usr/local/www/services_captiveportal_vouchers.php:624
+msgid "This is the password of the master voucher nodes webConfigurator."
+msgstr "ã“ã‚Œã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ãƒã‚¦ãƒãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰webConfiguratorã®ãƒ‘スワードã§ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:604
+#: usr/local/www/services_captiveportal_vouchers.php:611
+#: usr/local/www/services_captiveportal_vouchers.php:625
+#: usr/local/www/services_captiveportal_vouchers.php:634
+#: usr/local/www/services_captiveportal_vouchers.php:639
+msgid ""
+"Changing any Voucher parameter (apart from managing the list of Rolls) on "
+"this page will render existing vouchers useless if they were generated with "
+"different settings."
+msgstr "彼らã¯ç•°ãªã‚‹è¨­å®šã€ã§ç”Ÿæˆã•ã‚ŒãŸå ´åˆã¯ã€ã“ã®ãƒšãƒ¼ã‚¸"ã«ï¼ˆé›¢ã‚Œã¦ãƒ­ãƒ¼ãƒ«ã®ãƒªã‚¹ãƒˆã‚’管ç†ã™ã‚‹ã‹ã‚‰ï¼‰ä»»æ„ã®ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ‘ラメータを変更ã™ã‚‹ã¨ã€ 「既存ã®å•†å“券ãŒç„¡é§„ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers.php:606
+#: usr/local/www/services_captiveportal_vouchers.php:613
+#: usr/local/www/services_captiveportal_vouchers.php:627
+#: usr/local/www/services_captiveportal_vouchers.php:636
+#: usr/local/www/services_captiveportal_vouchers.php:641
+msgid ""
+"Specifying the Voucher Database Synchronization options will not record any "
+"other value from the other options. They will be retrieved/synced from the "
+"master."
+msgstr "ä»–ã®ã‚ªãƒ—ションã‹ã‚‰åˆ¥ã®å€¤ã€Œã‚¯ãƒ¼ãƒãƒ³ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹åŒæœŸã‚ªãƒ—ションを指定ã™ã‚‹ã¨ã€ã„ãšã‚Œã‚‚記録ã•ã‚Œã¾ã›ã‚“〠。彼らã¯ã€ 「マスターã‹ã‚‰åŒæœŸ/å–å¾—ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+msgid "Edit Voucher Rolls"
+msgstr "編集ãƒã‚¦ãƒãƒ£ãƒ¼ãƒ­ãƒ¼ãƒ«ã‚¹ãƒ­ã‚¤ã‚¹"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:101
+#: usr/local/www/services_captiveportal_vouchers_edit.php:99
+#: usr/local/www/services_captiveportal_vouchers_edit.php:99
+#, php-format
+msgid "Roll number %s already exists."
+msgstr "ロール番å·ã®%sã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:107
+#: usr/local/www/services_captiveportal_vouchers_edit.php:105
+#: usr/local/www/services_captiveportal_vouchers_edit.php:105
+#, php-format
+msgid "Roll number must be numeric and less than %s"
+msgstr "ロール番å·ã¯ã€æ•°å€¤ã‚„%s未満ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:110
+#: usr/local/www/services_captiveportal_vouchers_edit.php:108
+#: usr/local/www/services_captiveportal_vouchers_edit.php:108
+#, php-format
+msgid "A roll has at least one voucher and less than %s."
+msgstr "ロールã¯ã€å°‘ãªãã¨ã‚‚一ã¤ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã¨%s.未満を有ã™ã‚‹"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:113
+#: usr/local/www/services_captiveportal_vouchers_edit.php:111
+#: usr/local/www/services_captiveportal_vouchers_edit.php:111
+msgid "Each voucher must be good for at least 1 minute."
+msgstr "å„ãƒã‚¦ãƒãƒ£ãƒ¼ã¯1分以上良好ã§ãªã‘ã‚Œã°ãªã‚‰ãªã„。"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:134
+#: usr/local/www/services_captiveportal_vouchers_edit.php:132
+#: usr/local/www/services_captiveportal_vouchers_edit.php:132
+#, php-format
+msgid "All %1$s vouchers from Roll %2$s marked unused"
+msgstr "ロール%2$sã‹ã‚‰ã™ã¹ã¦ã¯%1$s券ã¯æœªä½¿ç”¨ã¨ãƒžãƒ¼ã‚¯"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:177
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+msgid "Enter the Roll"
+msgstr "ロールを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:177
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+msgid "found on top of the generated/printed vouchers"
+msgstr "生æˆã•ã‚ŒãŸ/å°åˆ·ã•ã‚ŒãŸä¼ç¥¨ã®ä¸Šã«ç™ºè¦‹"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:181
+#: usr/local/www/services_captiveportal_vouchers_edit.php:179
+#: usr/local/www/services_captiveportal_vouchers_edit.php:179
+msgid "Minutes per Ticket"
+msgstr "ãƒã‚±ãƒƒãƒˆã”ã¨ã®åˆ†"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:185
+#: usr/local/www/services_captiveportal_vouchers_edit.php:183
+#: usr/local/www/services_captiveportal_vouchers_edit.php:183
+msgid ""
+"Defines the time in minutes that a user is allowed access. The clock starts "
+"ticking the first time a voucher is used for authentication"
+msgstr "「ユーザーãŒã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã•ã‚Œã¦ã„る時間を分å˜ä½ã§å®šç¾©ã—ã¾ã™ã€‚クロック開始ã€ãƒã‚¦ãƒãƒ£ãƒ¼ãŒèªè¨¼ã«ä½¿ç”¨ã•ã‚Œã¦ã„る最åˆã«åˆ»ã‚€"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:193
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+msgid "Enter the number of vouchers"
+msgstr "ä¼ç¥¨ã®ç•ªå·ã‚’入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:193
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+msgid ""
+"found on top of the generated/printed vouchers. WARNING: Changing this "
+"number for an existing Roll will mark all vouchers as unused again"
+msgstr "「生æˆã•ã‚ŒãŸ/å°åˆ·ã•ã‚ŒãŸä¼ç¥¨ã®ä¸Šã«è¦‹ã‚‰ã‚Œã‚‹è­¦å‘Šï¼šã“ã®å¤‰æ›´ã€ã‚’ã€æ—¢å­˜ã®ãƒ­ãƒ¼ãƒ«ã®ç•ªå·ãŒå†ã³ä½¿ç”¨ã•ã‚Œã¦ã„ãªã„ãªã©ã€ã™ã¹ã¦ã®ãƒã‚¦ãƒãƒ£ãƒ¼ã‚’マークã—ã¾ã™"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:201
+#: usr/local/www/services_captiveportal_vouchers_edit.php:199
+#: usr/local/www/services_captiveportal_vouchers_edit.php:199
+msgid "Can be used to further identify this roll. Ignored by the system"
+msgstr "ã•ã‚‰ã«ã€ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’識別ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚システムã§ã¯ç„¡è¦–"
+
+#: usr/local/www/diag_resetstate.php:54 usr/local/www/diag_resetstate.php:54
+msgid "The state table has been flushed successfully."
+msgstr "状態テーブルã¯æ­£å¸¸ã«ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/diag_resetstate.php:60 usr/local/www/diag_resetstate.php:60
+msgid "The source tracking table has been flushed successfully."
+msgstr "ソース追跡テーブルã¯æ­£å¸¸ã«ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/diag_resetstate.php:64 usr/local/www/diag_resetstate.php:64
+msgid "Reset state"
+msgstr "リセット状態"
+
+#: usr/local/www/diag_resetstate.php:91 usr/local/www/diag_resetstate.php:91
+msgid "Firewall state table"
+msgstr "ファイアウォール状態テーブル"
+
+#: usr/local/www/diag_resetstate.php:93 usr/local/www/diag_resetstate.php:93
+msgid ""
+"Resetting the state tables will remove all entries from the corresponding "
+"tables. This means that all open connections will be broken and will have to "
+"be re-established. This may be necessary after making substantial changes to "
+"the firewall and/or NAT rules, especially if there are IP protocol mappings "
+"(e.g. for PPTP or IPv6) with open connections."
+msgstr "テーブル"状態テーブルをリセットã™ã‚‹ã¨ã€å¯¾å¿œã™ã‚‹ã‹ã‚‰ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’削除ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã€é–‹ã„ã¦ã„ã‚‹ã™ã¹ã¦ã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã€ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ï¼ˆ PPTP用ãªã©ã¾ãŸã¯ã€Œ IPプロトコルマッピングãŒã‚ã‚‹å ´åˆã¯ç‰¹ã«ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãŠã‚ˆã³/ã¾ãŸã¯NATã®ãƒ«ãƒ¼ãƒ«ã€Œå†ç¢ºç«‹ã™ã‚‹ã€‚ã“ã‚Œã¯å¤§å¹…ã«å¤‰æ›´ã‚’加ãˆãŸå¾Œå¿…è¦ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€ã‚ªãƒ¼ãƒ—ン接続ã¨IPv6)ã®ã€‚"
+
+#: usr/local/www/diag_resetstate.php:100 usr/local/www/diag_resetstate.php:100
+msgid ""
+"The firewall will normally leave the state tables intact when changing rules."
+msgstr "ルールを変更ã™ã‚‹ã¨ãã«ã€Œãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã¯ã€é€šå¸¸ã¯ãã®ã¾ã¾ã®çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ルを残ã™ã€‚"
+
+#: usr/local/www/diag_resetstate.php:103 usr/local/www/diag_resetstate.php:103
+msgid ""
+"NOTE: If you reset the firewall state table, the browser session may appear "
+"to be hung after clicking &quot;Reset&quot;. Simply refresh the page to "
+"continue."
+msgstr "「リセットã€ã‚’クリックã—ãŸå¾Œã«ãƒãƒ³ã‚°ã‚¢ãƒƒãƒ—ã—ã¦ã„るよã†ã«ã€ã€Œæ³¨ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ルをリセットã™ã‚‹ã¨ã€ãƒ–ラウザセッションãŒè¡¨ç¤ºã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€ 。å˜ã«ã€Œç¶™ç¶šã—ã¦ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_resetstate.php:113 usr/local/www/diag_resetstate.php:113
+msgid "Firewall Source Tracking"
+msgstr "ファイアウォールソースã®è¿½è·¡"
+
+#: usr/local/www/diag_resetstate.php:115 usr/local/www/diag_resetstate.php:115
+msgid ""
+"Resetting the source tracking table will remove all source/destination "
+"associations. This means that the "sticky" source/destination association "
+"will be cleared for all clients."
+msgstr "団体「ソース追跡テーブルをリセットã™ã‚‹ã¨ã€ã™ã¹ã¦ã®é€ä¿¡å…ƒ/é€ä¿¡å…ˆã‚’削除ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã€Œç²˜ç€æ€§ã€ ã€é€ä¿¡å…ƒ/宛先å”会ã¯ã€Œã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã«ã‚¯ãƒªã‚¢ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_resetstate.php:119 usr/local/www/diag_resetstate.php:119
+msgid "This does not clear active connection states, only source tracking."
+msgstr "ã“ã‚Œã¯ã¯ã£ãã‚Šã—ãªã„アクティブãªæŽ¥ç¶šçŠ¶æ…‹ã€å”¯ä¸€ã®ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã‚’è¡Œã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218
+#: usr/local/www/status_lb_pool.php:218 usr/local/www/diag_resetstate.php:127
+msgid "Reset"
+msgstr "リセット"
+
+#: usr/local/www/status_filter_reload.php:44
+#: usr/local/www/status_filter_reload.php:44
+msgid "Filter Reload Status"
+msgstr "フィルタリロードステータス"
+
+#: usr/local/www/status_filter_reload.php:88
+#: usr/local/www/status_filter_reload.php:89
+#: usr/local/www/status_filter_reload.php:89
+msgid ""
+"This page will automatically refresh every 3 seconds until the filter is "
+"done reloading"
+msgstr "リロード完了ã€ãƒ•ã‚£ãƒ«ã‚¿ãŒã•ã‚Œã‚‹ã¾ã§ã€ã“ã®ãƒšãƒ¼ã‚¸ã¯è‡ªå‹•çš„ã«3秒ã”ã¨ã«æ›´æ–°ã•ã‚Œã¾ã™ã€"
+
+#: usr/local/www/diag_routes.php:45 usr/local/www/diag_routes.php:45
+msgid "Routing tables"
+msgstr "ルーティングテーブル"
+
+#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59
+#: usr/local/www/diag_routes.php:59
+msgid "Name resolution"
+msgstr "ã®åå‰è§£æ±º"
+
+#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63
+#: usr/local/www/diag_routes.php:63
+msgid "Enable this to attempt to resolve names when displaying the tables."
+msgstr "テーブルを表示ã™ã‚‹ã¨ãã«åå‰ã‚’解決ã—よã†ã¨ã™ã‚‹ãŸã‚ã«ã€ã“れを有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70
+#: usr/local/www/diag_routes.php:70
+msgid "Show"
+msgstr "ショー"
+
+#: usr/local/www/diag_routes.php:72
+msgid ""
+"By enabling name resolution, the query should take a bit longer. You can "
+"stop it at any time by clicking the Stop button in your browser"
+msgstr "åå‰è§£æ±ºã‚’å¯èƒ½ã«ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¯ã‚¨ãƒªã¯å°‘ã—時間ãŒã‹ã‹ã‚‹ã¯ãšã§ã™ã€‚ãŠä½¿ã„ã®ãƒ–ラウザã§ã€[åœæ­¢]ボタンをクリックã™ã‚‹ã¨ã€ã„ã¤ã§ã‚‚ãれをåœæ­¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:63
+#: usr/local/www/diag_traceroute.php:63
+msgid "ttl"
+msgstr "ttl"
+
+#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:67
+#: usr/local/www/diag_traceroute.php:67
+#, php-format
+msgid "Maximum number of hops must be between 1 and %s"
+msgstr "最大ホップ数ã¯1ã¨%sã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112
+#: usr/local/www/diag_traceroute.php:131 usr/local/www/diag_traceroute.php:131
+msgid "Maximum number of hops"
+msgstr "ホップã®æœ€å¤§æ•°"
+
+#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128
+#: usr/local/www/diag_traceroute.php:147 usr/local/www/diag_traceroute.php:147
+msgid "Use ICMP"
+msgstr "使用ICMP"
+
+#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141
+#: usr/local/www/diag_traceroute.php:162 usr/local/www/diag_traceroute.php:162
+msgid ""
+"Traceroute may take a while to complete. You may hit the Stop button on your "
+"browser at any time to see the progress of failed traceroutes."
+msgstr "tracerouteã¯ã€å®Œäº†ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚ã‚ãªãŸãŒå¤±æ•—ã—ãŸãƒˆãƒ¬ãƒ¼ã‚¹ãƒ«ãƒ¼ãƒˆã®é€²è¡ŒçŠ¶æ³ã‚’確èªã™ã‚‹ãŸã‚ã«ã€ã„ã¤ã§ã‚‚ãŠä½¿ã„ã®ãƒ–ラウザã®[åœæ­¢]ボタンを押ã™ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144
+#: usr/local/www/diag_traceroute.php:173 usr/local/www/diag_traceroute.php:173
+msgid "Traceroute output:"
+msgstr "tracerouteã®å‡ºåŠ›ï¼š"
+
+#: usr/local/www/diag_traceroute.php:137
+msgid "Multi-wan is not supported from this utility currently."
+msgstr "マルãƒWANã¯ç¾åœ¨ã€ã“ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ã‹ã‚‰ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173
+#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199
+#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101
+#: usr/local/www/fbegin.inc:190 usr/local/www/status_graph.php:111
+#: usr/local/www/status_graph.php:111 usr/local/www/fbegin.inc:190
+msgid "Traffic Graph"
+msgstr "トラフィックグラフ"
+
+#: usr/local/www/status_graph.php:197
+msgid ""
+"Your browser does not support the type SVG! You need to either use Firefox "
+"or download the Adobe SVG plugin"
+msgstr "ã¾ãŸã¯Adobeã®SVGプラグインをダウンロード"ã‚ãªãŸã®ãƒ–ラウザã¯ã‚¿ã‚¤ãƒ—ã®SVG をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ ï¼ã‚ãªãŸãŒFirefoxを使用ã™ã‚‹ã‹å¿…è¦ãŒã‚ã‚‹ã€"
+
+#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198
+#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220
+#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242
+msgid "Host IP"
+msgstr "IPをホストã™ã‚‹"
+
+#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199
+#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221
+#: usr/local/www/status_graph.php:243 usr/local/www/status_graph.php:243
+msgid "Bandwidth In"
+msgstr "帯域幅"
+
+#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200
+#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222
+#: usr/local/www/status_graph.php:244 usr/local/www/status_graph.php:244
+msgid "Bandwidth Out"
+msgstr "帯域幅アウト"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330
+msgid "the"
+msgstr "ザ·"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330
+msgid "Adobe SVG Viewer"
+msgstr "アドビSVGビューアー"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330 usr/local/www/status_graph.php:330
+msgid ""
+"Firefox 1.5 or later or other browser supporting SVG is required to view the "
+"graph"
+msgstr "グラフ"ã®Firefox 1.5以é™ã€ã¾ãŸã¯ä»–ã®ãƒ–ラウザをサãƒãƒ¼ãƒˆã™ã‚‹SVGを表示ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€"
+
+#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67
+#: usr/local/www/carp_status.php:67
+#, php-format
+msgid ""
+"%s IPs have been disabled. Please note that disabling does not survive a "
+"reboot."
+msgstr "å†èµ·å‹•"%s IPãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ãã®ç„¡åŠ¹åŒ–ãŒç”Ÿå­˜ã—ã¾ã›ã‚“ã®ã§ã”注æ„ãã ã•ã„〠。"
+
+#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69
+#: usr/local/www/carp_status.php:69
+msgid "CARP has been enabled."
+msgstr "CARPã¯æœ‰åŠ¹ã«ãªã£ã¦ã„る。"
+
+#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120
+#: usr/local/www/carp_status.php:120
+msgid "Enable Carp"
+msgstr "カープを有効ã«ã—ã¾ã™"
+
+#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123
+#: usr/local/www/carp_status.php:123
+msgid "Disable Carp"
+msgstr "カープを無効ã«ã™ã‚‹"
+
+#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131
+#: usr/local/www/carp_status.php:131
+msgid "CARP Interface"
+msgstr "CARPインタフェース"
+
+#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137
+#: usr/local/www/carp_status.php:137
+msgid "Could not locate any defined CARP interfaces."
+msgstr "定義ã•ã‚ŒãŸä»»æ„ã®CARPインタフェースを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/carp_status.php:196
+msgid "You can configure CARP settings"
+msgstr "ã‚ãªãŸã¯ã€ CARPã®è¨­å®šã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195
+#: usr/local/www/carp_status.php:195
+msgid "pfSync nodes"
+msgstr "PFSYNC節"
+
+#: usr/local/www/status_interfaces.php:81
+#: usr/local/www/status_interfaces.php:84
+#: usr/local/www/status_interfaces.php:84
+msgid "interface"
+msgstr "インターフェース"
+
+#: usr/local/www/status_interfaces.php:99
+#: usr/local/www/status_interfaces.php:117
+#: usr/local/www/status_interfaces.php:102
+#: usr/local/www/status_interfaces.php:120
+#: usr/local/www/status_interfaces.php:102
+#: usr/local/www/status_interfaces.php:120
+msgid "Release"
+msgstr "リリース"
+
+#: usr/local/www/status_interfaces.php:102
+#: usr/local/www/status_interfaces.php:120
+#: usr/local/www/status_interfaces.php:105
+#: usr/local/www/status_interfaces.php:123
+#: usr/local/www/status_interfaces.php:105
+#: usr/local/www/status_interfaces.php:123
+msgid "Renew"
+msgstr "æ›´æ–°ã™ã‚‹"
+
+#: usr/local/www/status_interfaces.php:117
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:147
+#: usr/local/www/status_interfaces.php:163
+#: usr/local/www/status_interfaces.php:135
+#: usr/local/www/status_interfaces.php:150
+#: usr/local/www/status_interfaces.php:165
+#: usr/local/www/status_interfaces.php:181
+#: usr/local/www/status_interfaces.php:138
+#: usr/local/www/status_interfaces.php:153
+#: usr/local/www/status_interfaces.php:168
+#: usr/local/www/status_interfaces.php:184
+#: usr/local/www/status_interfaces.php:138
+#: usr/local/www/status_interfaces.php:153
+#: usr/local/www/status_interfaces.php:168
+#: usr/local/www/status_interfaces.php:184
+msgid "Connect"
+msgstr "接続ã™ã‚‹"
+
+#: usr/local/www/status_interfaces.php:171
+#: usr/local/www/status_interfaces.php:189
+#: usr/local/www/status_interfaces.php:192
+#: usr/local/www/status_interfaces.php:192
+msgid "Uptime "
+msgstr "稼åƒæ™‚é–“"
+
+#: usr/local/www/status_interfaces.php:200
+#: usr/local/www/status_interfaces.php:274
+#: usr/local/www/status_interfaces.php:277
+#: usr/local/www/status_interfaces.php:277
+msgid "Subnet mask IPv4"
+msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯IPv4"
+
+#: usr/local/www/status_interfaces.php:207
+#: usr/local/www/status_interfaces.php:281
+#: usr/local/www/status_interfaces.php:284
+#: usr/local/www/status_interfaces.php:284
+msgid "Gateway IPv4"
+msgstr "ゲートウェイã®IPv4"
+
+#: usr/local/www/status_interfaces.php:224
+#: usr/local/www/status_interfaces.php:305
+#: usr/local/www/status_interfaces.php:308
+#: usr/local/www/status_interfaces.php:308
+msgid "Subnet mask IPv6"
+msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã®IPv6"
+
+#: usr/local/www/status_interfaces.php:239
+#: usr/local/www/status_interfaces.php:320
+#: usr/local/www/status_interfaces.php:323
+#: usr/local/www/status_interfaces.php:323
+msgid "ISP DNS servers"
+msgstr "ISPã®DNSサーãƒ"
+
+#: usr/local/www/status_interfaces.php:251
+#: usr/local/www/status_interfaces.php:332
+#: usr/local/www/status_interfaces.php:335
+#: usr/local/www/status_interfaces.php:335
+msgid "Media"
+msgstr "メディア"
+
+#: usr/local/www/status_interfaces.php:272
+#: usr/local/www/status_interfaces.php:369
+#: usr/local/www/status_interfaces.php:372
+#: usr/local/www/status_interfaces.php:372
+msgid "BSSID"
+msgstr "BSSID"
+
+#: usr/local/www/status_interfaces.php:279
+#: usr/local/www/diag_dump_states_sources.php:148
+#: usr/local/www/status_interfaces.php:376
+#: usr/local/www/status_interfaces.php:379
+#: usr/local/www/diag_dump_states_sources.php:147
+#: usr/local/www/diag_system_pftop.php:158
+#: usr/local/www/diag_dump_states_sources.php:147
+#: usr/local/www/status_interfaces.php:379
+#: usr/local/www/diag_system_pftop.php:158
+msgid "Rate"
+msgstr "率"
+
+#: usr/local/www/status_interfaces.php:286
+#: usr/local/www/status_interfaces.php:383
+#: usr/local/www/status_interfaces.php:386
+#: usr/local/www/status_interfaces.php:386
+msgid "RSSI"
+msgstr "RSSI"
+
+#: usr/local/www/status_interfaces.php:293
+#: usr/local/www/status_interfaces.php:390
+#: usr/local/www/status_interfaces.php:393
+#: usr/local/www/status_interfaces.php:393
+msgid "In/out packets"
+msgstr "IN / OUTパケット"
+
+#: usr/local/www/status_interfaces.php:302
+#: usr/local/www/status_interfaces.php:399
+#: usr/local/www/status_interfaces.php:402
+#: usr/local/www/status_interfaces.php:402
+msgid "In/out packets (pass)"
+msgstr "IN / OUTパケット( PASS)"
+
+#: usr/local/www/status_interfaces.php:311
+#: usr/local/www/status_interfaces.php:408
+#: usr/local/www/status_interfaces.php:411
+#: usr/local/www/status_interfaces.php:411
+msgid "In/out packets (block)"
+msgstr "IN / OUTパケット(ブロック)"
+
+#: usr/local/www/status_interfaces.php:321
+#: usr/local/www/status_interfaces.php:418
+#: usr/local/www/status_interfaces.php:421
+#: usr/local/www/status_interfaces.php:421
+msgid "In/out errors"
+msgstr "IN / OUTã®èª¤å·®"
+
+#: usr/local/www/status_interfaces.php:329
+#: usr/local/www/status_interfaces.php:426
+#: usr/local/www/status_interfaces.php:429
+#: usr/local/www/status_interfaces.php:429
+msgid "Collisions"
+msgstr "è¡çª"
+
+#: usr/local/www/status_interfaces.php:338
+#: usr/local/www/status_interfaces.php:435
+#: usr/local/www/status_interfaces.php:438
+#: usr/local/www/status_interfaces.php:438
+#, php-format
+msgid "Bridge (%s)"
+msgstr "ブリッジ (%s)"
+
+#: usr/local/www/status_interfaces.php:360
+#: usr/local/www/status_interfaces.php:457
+#: usr/local/www/status_interfaces.php:460
+#: usr/local/www/status_interfaces.php:460
+msgid "Interrupts/Second"
+msgstr "割り込ã¿/秒"
+
+#: usr/local/www/status_interfaces.php:363
+#: usr/local/www/status_interfaces.php:460
+#: usr/local/www/status_interfaces.php:463
+#: usr/local/www/status_interfaces.php:463
+msgid "total"
+msgstr "ç·è¨ˆ"
+
+#: usr/local/www/status_interfaces.php:376
+#: usr/local/www/status_interfaces.php:473
+#: usr/local/www/status_interfaces.php:476
+#: usr/local/www/status_interfaces.php:476
+#, php-format
+msgid ""
+"Using dial-on-demand will bring the connection up again if any packet "
+"triggers it. To substantiate this point: disconnecting manually will %snot%s "
+"prevent dial-on-demand from making connections to the outside! Don't use "
+"dial-on-demand if you want to make sure that the line is kept disconnected."
+msgstr "ãれをトリガーã€ã®ã„ãšã‚Œã‹ã®ãƒ‘ケットãŒã‚ã‚Œã°ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ä½¿ç”¨ã™ã‚‹ã¨ã€å†æŽ¥ç¶šãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€ 。ã“ã®ç‚¹ã‚’実証ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«æ‰‹å‹•ã§åˆ‡æ–­ã™ã‚‹ã¨ã€ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã¾ã™ã“ã¨ã‚’確èªã™ã‚‹ã‹ã©ã†ã‹ã®ãƒ©ã‚¤ãƒ³ãŒä¿ãŸã‚Œã¦ã„る「 ï¼ãƒ€ã‚¤ãƒ¤ãƒ«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰å¤–部ã¸ã®æŽ¥ç¶šã‚’è¡Œã†ã¨ã€ ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„防ã〠%snot%sã¾ã™åˆ‡æ–­ã€‚"
+
+#: usr/local/www/exec.php:91 usr/local/www/exec.php:93
+#: usr/local/www/exec.php:93
+msgid "Execute command"
+msgstr "コマンドを実行"
+
+#: usr/local/www/exec.php:153 usr/local/www/exec.php:155
+#: usr/local/www/exec.php:155
+msgid "Nothing to recall"
+msgstr "ãªã—"
+
+#: usr/local/www/exec.php:222 usr/local/www/exec.php:224
+#: usr/local/www/exec.php:224
+msgid "Note: this function is unsupported. Use it on your own risk"
+msgstr "注æ„: ã“ã®æ©Ÿèƒ½ã¯ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。個人ã®è²¬ä»»ã§ã”使用ãã ã•ã„。"
+
+#: usr/local/www/exec.php:253 usr/local/www/exec.php:255
+#: usr/local/www/exec.php:255
+msgid "Execute Shell command"
+msgstr "シェルコマンドを実行ã—ã¾ã™ã€‚"
+
+#: usr/local/www/exec.php:256 usr/local/www/exec.php:309
+#: usr/local/www/exec.php:258 usr/local/www/exec.php:311
+#: usr/local/www/exec.php:258 usr/local/www/exec.php:311
+msgid "Command"
+msgstr "コマンド"
+
+#: usr/local/www/exec.php:264 usr/local/www/exec.php:315
+#: usr/local/www/exec.php:266 usr/local/www/exec.php:317
+#: usr/local/www/exec.php:266 usr/local/www/exec.php:317
+msgid "Execute"
+msgstr "実行"
+
+#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77
+#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78
+#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78
+msgid "Clear"
+msgstr "クリアー"
+
+#: usr/local/www/exec.php:276 usr/local/www/exec.php:278
+#: usr/local/www/exec.php:278
+msgid "File to download"
+msgstr "ダウンロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«"
+
+#: usr/local/www/exec.php:293 usr/local/www/exec.php:295
+#: usr/local/www/exec.php:295
+msgid "File to upload"
+msgstr "アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«"
+
+#: usr/local/www/exec.php:306 usr/local/www/exec.php:308
+#: usr/local/www/exec.php:308
+msgid "PHP Execute"
+msgstr "PHP実行"
+
+#: usr/local/www/exec.php:317 usr/local/www/exec.php:319
+#: usr/local/www/exec.php:319
+msgid "Example"
+msgstr "例"
+
+#: usr/local/www/exec_raw.php:47
+msgid "Nothing specified. Cannot continue."
+msgstr "指定ã•ã‚ŒãŸä½•ã‚‚ãªã„。続行ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105
+#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106
+#: usr/local/www/fbegin.inc:106
+msgid "Packages"
+msgstr "パッケージ"
+
+#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106
+#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107
+#: usr/local/www/fbegin.inc:107
+msgid "Setup Wizard"
+msgstr "セットアップウィザード"
+
+#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54
+#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107
+#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97
+#: usr/local/www/diag_logs_wireless.php:86
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116
+#: usr/local/www/diag_logs_resolver.php:99
+#: usr/local/www/diag_logs_wireless.php:87
+#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108
+#: usr/local/www/diag_logs_routing.php:54
+#: usr/local/www/diag_logs_routing.php:85 usr/local/www/diag_logs.php:97
+#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108
+#: usr/local/www/diag_logs_wireless.php:87
+#: usr/local/www/diag_logs_resolver.php:99
+msgid "Routing"
+msgstr "ルーティング"
+
+#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108
+#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109
+#: usr/local/www/fbegin.inc:109
+msgid "Cert Manager"
+msgstr "サティフィケートマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149
+#: usr/local/www/fbegin.inc:141 usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/fbegin.inc:141
+msgid "DHCPv6 Relay"
+msgstr "DHCPv6 リレー"
+
+#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143
+#: usr/local/www/services_dhcpv6.php:581
+#: usr/local/www/services_router_advertisements.php:260
+#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512
+#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523
+#: usr/local/www/services_router_advertisements.php:255
+#: usr/local/www/services_router_advertisements.php:255
+#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523
+msgid "DHCPv6 Server"
+msgstr "DHCPv6 サーãƒãƒ¼"
+
+#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316
+#: usr/local/www/widgets/widgets/services_status.widget.php:121
+#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299
+#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147
+#: etc/inc/service-utils.inc:298 etc/inc/service-utils.inc:315
+#: usr/local/www/fbegin.inc:147 etc/inc/service-utils.inc:315
+msgid "IGMP proxy"
+msgstr "IGMP プロキシ"
+
+#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149
+msgid "OLSR"
+msgstr "OSLR"
+
+#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234
+#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158
+#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/vpn_pppoe_edit.php:237
+#: usr/local/www/fbegin.inc:150
+msgid "PPPoE Server"
+msgstr "PPPoE サーãƒãƒ¼"
+
+#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151
+#: usr/local/www/fbegin.inc:159
+msgid "RIP"
+msgstr "RIP"
+
+#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193
+#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201
+#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192
+#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192
+msgid "UPnP &amp; NAT-PMP"
+msgstr "UPnP &amp; NAT-PMP"
+
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174
+#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173
+#: usr/local/www/fbegin.inc:173
+msgid "CARP (failover)"
+msgstr "CARP (フェイルオーãƒãƒ¼)"
+
+#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175
+#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174
+#: usr/local/www/fbegin.inc:174
+msgid "Dashboard"
+msgstr "ダッシュボード"
+
+#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177
+#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176
+#: usr/local/www/fbegin.inc:176
+msgid "DHCP Leases"
+msgstr "DHCP リース"
+
+#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178
+#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177
+#: usr/local/www/fbegin.inc:177
+msgid "DHCPv6 Leases"
+msgstr "DHCPv6 リース"
+
+#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179
+#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178
+#: usr/local/www/fbegin.inc:178
+msgid "Filter Reload"
+msgstr "リロードを絞り込む"
+
+#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186
+#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185
+#: usr/local/www/fbegin.inc:185
+msgid "Package Logs"
+msgstr "パッケージログ"
+
+#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98
+#: usr/local/www/status_rrd_graph.php:338
+#: usr/local/www/status_rrd_graph_settings.php:57
+#: usr/local/www/status_rrd_graph_settings.php:137
+#: usr/local/www/fbegin.inc:187
+#: usr/local/www/status_rrd_graph_settings.php:138
+#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386
+#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411
+#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186
+#: usr/local/www/status_rrd_graph.php:411
+#: usr/local/www/status_rrd_graph_settings.php:57
+#: usr/local/www/status_rrd_graph_settings.php:138
+#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186
+msgid "Queues"
+msgstr "キュー"
+
+#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_settings.php:113
+#: usr/local/www/status_rrd_graph_settings.php:171
+#: usr/local/www/fbegin.inc:188
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/status_rrd_graph_settings.php:172
+#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph.php:248 usr/local/www/fbegin.inc:187
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph.php:248
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/status_rrd_graph_settings.php:172
+#: usr/local/www/fbegin.inc:187
+msgid "RRD Graphs"
+msgstr "RRDグラフ"
+
+#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190
+#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189
+#: usr/local/www/fbegin.inc:189
+msgid "System Logs"
+msgstr "システムログ"
+
+#: usr/local/www/fbegin.inc:188
+msgid "ARP Tables"
+msgstr "ARPテーブル"
+
+#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209
+#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208
+#: usr/local/www/fbegin.inc:208
+msgid "Command Prompt"
+msgstr "コマンドプロンプト"
+
+#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211
+#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210
+#: usr/local/www/fbegin.inc:210
+msgid "Edit File"
+msgstr "ファイルã®ç·¨é›†"
+
+#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212
+#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211
+#: usr/local/www/fbegin.inc:211
+msgid "Factory Defaults"
+msgstr "工場出è·æ™‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ"
+
+#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213
+#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212
+#: usr/local/www/fbegin.inc:212
+msgid "Halt System"
+msgstr "åœæ­¢ã‚·ã‚¹ãƒ†ãƒ "
+
+#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214
+#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213
+#: usr/local/www/fbegin.inc:213
+msgid "Limiter Info"
+msgstr "リミッタ情報"
+
+#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103
+#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223
+#: usr/local/www/fbegin.inc:214 usr/local/www/diag_ndp.php:103
+#: usr/local/www/fbegin.inc:214
+msgid "NDP Table"
+msgstr "NDP表"
+
+#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219
+#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:219
+msgid "pfInfo"
+msgstr "PFINFO"
+
+#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220
+#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:220
+msgid "pfTop"
+msgstr "pfTop"
+
+#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221
+#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:221
+msgid "Reboot"
+msgstr "å†èµ·å‹•"
+
+#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+#: usr/local/www/fbegin.inc:231
+#: usr/local/www/widgets/widgets/smart_status.widget.php:39
+#: usr/local/www/fbegin.inc:223
+#: usr/local/www/widgets/widgets/smart_status.widget.php:39
+msgid "SMART Status"
+msgstr "SMARTステータス"
+
+#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225
+#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226
+#: usr/local/www/fbegin.inc:226
+msgid "States Summary"
+msgstr "米国ã®ã¾ã¨ã‚"
+
+#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226
+#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227
+#: usr/local/www/fbegin.inc:227
+msgid "System Activity"
+msgstr "システム活動"
+
+#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233
+#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234
+#: usr/local/www/fbegin.inc:234
+msgid "Restart HTTPD"
+msgstr "リスタートHTTPD"
+
+#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240
+#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241
+#: usr/local/www/fbegin.inc:241
+msgid "About this Page"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã«ã¤ã„ã¦"
+
+#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242
+#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243
+#: usr/local/www/fbegin.inc:243
+msgid "Bug Database"
+msgstr "ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹"
+
+#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243
+#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244
+#: usr/local/www/fbegin.inc:244
+msgid "User Forum"
+msgstr "ユーザーフォーラム"
+
+#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244
+#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245
+#: usr/local/www/fbegin.inc:245
+msgid "Documentation"
+msgstr "ドキュメンテーション"
+
+#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245
+#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246
+#: usr/local/www/fbegin.inc:246
+msgid "Developers Wiki"
+msgstr "開発者ã¯ã‚¦ã‚£ã‚­"
+
+#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246
+#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247
+#: usr/local/www/fbegin.inc:247
+msgid "Paid Support"
+msgstr "有償サãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247
+#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248
+#: usr/local/www/fbegin.inc:248
+msgid "pfSense Book"
+msgstr "pfSenseブック"
+
+#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248
+#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249
+#: usr/local/www/fbegin.inc:249
+msgid "Search portal"
+msgstr "検索ãƒãƒ¼ã‚¿ãƒ«"
+
+#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249
+#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250
+#: usr/local/www/fbegin.inc:250
+msgid "FreeBSD Handbook"
+msgstr "FreeBSDãƒãƒ³ãƒ‰ãƒ–ック"
+
+#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394
+#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332
+#: usr/local/www/fbegin.inc:332
+msgid "Help"
+msgstr "助ã‘"
+
+#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443
+msgid "Status of items on this page."
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã€‚"
+
+#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446
+msgid "Log entries for items on this page."
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¨ãƒ³ãƒˆãƒªã‚’ログã«è¨˜éŒ²ã—ã¾ã™ã€‚"
+
+#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449
+msgid "Help for items on this page."
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ãƒ˜ãƒ«ãƒ—を表示ã—ã¾ã™ã€‚"
+
+#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459
+#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421
+#: usr/local/www/fbegin.inc:421
+msgid ""
+"Packages are currently being reinstalled in the background.<p>Do not make "
+"changes in the GUI until this is complete."
+msgstr "「パッケージã¯ç¾åœ¨ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„る。 u003cPu003eã¯ã—ãªã„ã§ãã ã•ã„ã€ã“ã‚ŒãŒå®Œäº†ã™ã‚‹ã¾ã§ã€GUIã®å¤‰æ›´ã‚’。"
+
+#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101
+#: usr/local/www/status_queues.php:109 usr/local/www/status_queues.php:109
+msgid "Traffic shaper"
+msgstr "トラフィックシェー"
+
+#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110
+#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117
+#: usr/local/www/status_queues.php:117
+msgid "Traffic shaping is not configured."
+msgstr "トラフィックシェーピングãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143
+#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149
+#: usr/local/www/status_queues.php:149
+msgid "Statistics"
+msgstr "統計"
+
+#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165
+#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223
+#: usr/local/www/status_queues.php:224 usr/local/www/status_queues.php:224
+msgid "Loading"
+msgstr "è·é‡"
+
+#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181
+#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164
+#: usr/local/www/status_queues.php:164
+msgid "Queue graphs take 5 seconds to sample data"
+msgstr "キュー·グラフã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’サンプリングã™ã‚‹ãŸã‚ã«5秒をè¦ã™ã‚‹"
+
+#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182
+#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165
+#: usr/local/www/status_queues.php:165
+msgid "You can configure the Traffic Shaper"
+msgstr "ã‚ãªãŸã¯ã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯Â·ã‚·ã‚§ã‚¤ãƒ‘ーを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/status_rrd_graph.php:211
+#: usr/local/www/status_rrd_graph_settings.php:59
+#: usr/local/www/status_rrd_graph.php:174
+#: usr/local/www/status_rrd_graph.php:179
+#: usr/local/www/status_rrd_graph.php:179
+#: usr/local/www/status_rrd_graph_settings.php:59
+msgid "Inverse"
+msgstr "逆数"
+
+#: usr/local/www/status_rrd_graph.php:212
+#: usr/local/www/status_rrd_graph_settings.php:60
+#: usr/local/www/status_rrd_graph.php:175
+#: usr/local/www/status_rrd_graph.php:180
+#: usr/local/www/status_rrd_graph.php:180
+#: usr/local/www/status_rrd_graph_settings.php:60
+msgid "Absolute"
+msgstr "絶対的ãª"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:61
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph_settings.php:61
+msgid "Absolute Timespans"
+msgstr "絶対タイムスパン"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:62
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph_settings.php:62
+msgid "Current Period"
+msgstr "当期"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:63
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph.php:238
+#: usr/local/www/status_rrd_graph_settings.php:63
+msgid "Previous Period"
+msgstr "å‰æœŸ"
+
+#: usr/local/www/status_rrd_graph.php:331
+#: usr/local/www/status_rrd_graph_settings.php:54
+#: usr/local/www/status_rrd_graph_settings.php:130
+#: usr/local/www/status_rrd_graph_settings.php:131
+#: usr/local/www/status_rrd_graph.php:379
+#: usr/local/www/status_rrd_graph.php:404
+#: usr/local/www/status_rrd_graph.php:404
+#: usr/local/www/status_rrd_graph_settings.php:54
+#: usr/local/www/status_rrd_graph_settings.php:131
+msgid "Traffic"
+msgstr "トラフィック"
+
+#: usr/local/www/status_rrd_graph.php:333
+#: usr/local/www/status_rrd_graph_settings.php:55
+#: usr/local/www/status_rrd_graph_settings.php:132
+#: usr/local/www/status_rrd_graph_settings.php:133
+#: usr/local/www/status_rrd_graph.php:381
+#: usr/local/www/status_rrd_graph.php:406
+#: usr/local/www/status_rrd_graph.php:406
+#: usr/local/www/status_rrd_graph_settings.php:55
+#: usr/local/www/status_rrd_graph_settings.php:133
+msgid "Packets"
+msgstr "パケット"
+
+#: usr/local/www/status_rrd_graph.php:335
+#: usr/local/www/status_rrd_graph_settings.php:56
+#: usr/local/www/status_rrd_graph_settings.php:134
+#: usr/local/www/status_rrd_graph_settings.php:135
+#: usr/local/www/status_rrd_graph.php:383
+#: usr/local/www/status_rrd_graph.php:408
+#: usr/local/www/status_rrd_graph.php:408
+#: usr/local/www/status_rrd_graph_settings.php:56
+#: usr/local/www/status_rrd_graph_settings.php:135
+msgid "Quality"
+msgstr "å“質"
+
+#: usr/local/www/status_rrd_graph.php:340
+#: usr/local/www/status_rrd_graph_settings.php:139
+#: usr/local/www/status_rrd_graph_settings.php:140
+#: usr/local/www/status_rrd_graph.php:388
+#: usr/local/www/status_rrd_graph.php:413
+#: usr/local/www/status_rrd_graph.php:413
+#: usr/local/www/status_rrd_graph_settings.php:140
+msgid "QueueDrops"
+msgstr "QueueDrops"
+
+#: usr/local/www/status_rrd_graph.php:348
+#: usr/local/www/status_rrd_graph_settings.php:147
+#: usr/local/www/status_rrd_graph_settings.php:148
+#: usr/local/www/status_rrd_graph.php:396
+#: usr/local/www/status_rrd_graph.php:421
+#: usr/local/www/status_rrd_graph.php:421
+#: usr/local/www/status_rrd_graph_settings.php:148
+msgid "Cellular"
+msgstr "細胞ã®"
+
+#: usr/local/www/status_rrd_graph.php:371
+#: usr/local/www/status_rrd_graph.php:419
+#: usr/local/www/status_rrd_graph.php:451
+#: usr/local/www/status_rrd_graph.php:451
+msgid ""
+"Note: Change of color and/or style may not take effect until the next refresh"
+msgstr ""注:色ãŠã‚ˆã³/ã¾ãŸã¯ã‚¹ã‚¿ã‚¤ãƒ«ã®å¤‰æ›´ã¯ã€æ¬¡å›žã®æ›´æ–°ã¾ã§ã¯æœ‰åŠ¹ã«ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/status_rrd_graph.php:375
+#: usr/local/www/status_rrd_graph.php:423
+#: usr/local/www/status_rrd_graph.php:455
+#: usr/local/www/status_rrd_graph.php:455
+msgid "Graphs:"
+msgstr "グラフ:"
+
+#: usr/local/www/status_rrd_graph.php:432
+#: usr/local/www/status_rrd_graph.php:480
+#: usr/local/www/status_rrd_graph.php:515
+#: usr/local/www/status_rrd_graph.php:515
+msgid "Style:"
+msgstr "スタイル:"
+
+#: usr/local/www/status_rrd_graph.php:446
+#: usr/local/www/status_rrd_graph.php:494
+#: usr/local/www/status_rrd_graph.php:529
+#: usr/local/www/status_rrd_graph.php:529
+msgid "Period:"
+msgstr "期間:"
+
+#: usr/local/www/status_rrd_graph.php:461
+#: usr/local/www/status_rrd_graph.php:513
+#: usr/local/www/status_rrd_graph.php:548
+#: usr/local/www/status_rrd_graph.php:548
+msgid "Start:"
+msgstr "èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_rrd_graph.php:463
+#: usr/local/www/status_rrd_graph.php:515
+#: usr/local/www/status_rrd_graph.php:550
+#: usr/local/www/status_rrd_graph.php:550
+msgid "End:"
+msgstr "終了:"
+
+#: usr/local/www/status_rrd_graph.php:465
+#: usr/local/www/status_rrd_graph.php:517
+#: usr/local/www/status_rrd_graph.php:552
+#: usr/local/www/status_rrd_graph.php:552
+msgid "Go"
+msgstr "è¡Œã"
+
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph_img.php:43
+msgid "Image viewer"
+msgstr "ç”»åƒãƒ“ューアー"
+
+#: usr/local/www/status_rrd_graph_img.php:216
+#: usr/local/www/status_rrd_graph_img.php:221
+#: usr/local/www/status_rrd_graph_img.php:221
+#, php-format
+msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!"
+msgstr "テーマ%s用rrdcolors.inc.phpã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’使用ã—ã¦ã€å­˜åœ¨ã—ã¾ã›ã‚“ ï¼"
+
+#: usr/local/www/status_rrd_graph_img.php:1095
+#: usr/local/www/status_rrd_graph_img.php:1088
+#: usr/local/www/status_rrd_graph_img.php:1093
+#: usr/local/www/status_rrd_graph_img.php:1093
+#, php-format
+msgid "Sorry we do not have data to graph for %s"
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€æˆ‘々ã¯%sãŸã‚ã€ã‚°ãƒ©ãƒ•ã«ãƒ‡ãƒ¼ã‚¿ã‚’æŒã£ã¦ã„ãªã„"
+
+#: usr/local/www/status_rrd_graph_img.php:1115
+#: usr/local/www/status_rrd_graph_img.php:1108
+#: usr/local/www/status_rrd_graph_img.php:1113
+#: usr/local/www/status_rrd_graph_img.php:1113
+#, php-format
+msgid "Failed to create graph with error code %1$s, the error is: %2$s"
+msgstr "エラーコードã¯%1$sã§ã‚°ãƒ©ãƒ•ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€ã‚¨ãƒ©ãƒ¼ï¼š %2$s"
+
+#: usr/local/www/status_rrd_graph_img.php:1117
+#: usr/local/www/status_rrd_graph_img.php:1124
+#: usr/local/www/status_rrd_graph_img.php:1110
+#: usr/local/www/status_rrd_graph_img.php:1115
+#: usr/local/www/status_rrd_graph_img.php:1122
+#: usr/local/www/status_rrd_graph_img.php:1115
+#: usr/local/www/status_rrd_graph_img.php:1122
+#, php-format
+msgid "failed to create graph from %s%s, removing database"
+msgstr "データベースを削除〠%s%sã‹ã‚‰ã‚°ãƒ©ãƒ•ã‚’作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/status_rrd_graph_settings.php:174
+#: usr/local/www/status_rrd_graph_settings.php:175
+#: usr/local/www/status_rrd_graph_settings.php:175
+msgid "Enables the RRD graphing backend."
+msgstr "ã®RRDグラフã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’有効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_rrd_graph_settings.php:178
+#: usr/local/www/status_rrd_graph_settings.php:179
+#: usr/local/www/status_rrd_graph_settings.php:179
+msgid "Default category"
+msgstr "デフォルトã®ã‚«ãƒ†ã‚´ãƒª"
+
+#: usr/local/www/status_rrd_graph_settings.php:189
+#: usr/local/www/status_rrd_graph_settings.php:190
+#: usr/local/www/status_rrd_graph_settings.php:190
+msgid "This selects default category."
+msgstr "ã“ã‚Œã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã™ã‚‹ã€‚"
+
+#: usr/local/www/status_rrd_graph_settings.php:193
+#: usr/local/www/status_rrd_graph_settings.php:194
+#: usr/local/www/status_rrd_graph_settings.php:194
+msgid "Default style"
+msgstr "デフォルトã®ã‚¹ã‚¿ã‚¤ãƒ«"
+
+#: usr/local/www/status_rrd_graph_settings.php:204
+#: usr/local/www/status_rrd_graph_settings.php:205
+#: usr/local/www/status_rrd_graph_settings.php:205
+msgid "This selects the default style."
+msgstr "ã“ã‚ŒãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_rrd_graph_settings.php:208
+#: usr/local/www/status_rrd_graph_settings.php:209
+#: usr/local/www/status_rrd_graph_settings.php:209
+msgid "Default period"
+msgstr "デフォルトã®æœŸé–“"
+
+#: usr/local/www/status_rrd_graph_settings.php:219
+#: usr/local/www/status_rrd_graph_settings.php:220
+#: usr/local/www/status_rrd_graph_settings.php:220
+msgid "This selects the default period."
+msgstr "ã“ã‚Œã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æœŸé–“ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_rrd_graph_settings.php:231
+#: usr/local/www/status_rrd_graph_settings.php:232
+#: usr/local/www/status_rrd_graph_settings.php:232
+msgid "Reset RRD Data"
+msgstr "RRDデータをリセットã™ã‚‹"
+
+#: usr/local/www/status_rrd_graph_settings.php:231
+#: usr/local/www/status_rrd_graph_settings.php:232
+#: usr/local/www/status_rrd_graph_settings.php:232
+msgid ""
+"Do you really want to reset the RRD graphs? This will erase all graph data."
+msgstr ""本当ã«RRDグラフをリセットã—ã¾ã™ã‹ï¼Ÿã“ã‚Œã¯ã€ã™ã¹ã¦ã®ã‚°ãƒ©ãƒ•ã®ãƒ‡ãƒ¼ã‚¿ãŒæ¶ˆåŽ»ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/status_rrd_graph_settings.php:237
+#: usr/local/www/status_rrd_graph_settings.php:238
+#: usr/local/www/status_rrd_graph_settings.php:238
+msgid ""
+"Graphs will not be allowed to be recreated within a 1 minute interval, "
+"please take this into account after changing the style."
+msgstr "「グラフã¯1分間隔内ã§å†ä½œæˆã™ã‚‹ã“ã¨ã¯è¨±ã•ã‚Œãªã„ã ã‚ã†ã€ã¨ã€ã‚¹ã‚¿ã‚¤ãƒ«ã‚’変更ã—ãŸå¾Œã€ã“れを考慮ã«å…¥ã‚Œã¦ãã ã•ã„。"
+
+#: usr/local/www/status_services.php:60
+#: usr/local/www/widgets/widgets/services_status.widget.php:54
+#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386
+#: etc/inc/service-utils.inc:403 etc/inc/service-utils.inc:403
+msgid "Not available."
+msgstr "ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100
+#: usr/local/www/status_services.php:98 etc/inc/service-utils.inc:657
+#: etc/inc/service-utils.inc:660 etc/inc/service-utils.inc:660
+#, php-format
+msgid "%s has been restarted."
+msgstr "%sãŒå†èµ·å‹•ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151
+#: usr/local/www/status_services.php:149 etc/inc/service-utils.inc:544
+#: etc/inc/service-utils.inc:547 etc/inc/service-utils.inc:547
+#, php-format
+msgid "%s has been started."
+msgstr "%sãŒé–‹å§‹ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214
+#: usr/local/www/status_services.php:212 etc/inc/service-utils.inc:605
+#: etc/inc/service-utils.inc:608 etc/inc/service-utils.inc:608
+#, php-format
+msgid "%s has been stopped."
+msgstr "%sãŒåœæ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/status_services.php:269
+#: usr/local/www/widgets/widgets/services_status.widget.php:74
+#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246
+#: etc/inc/service-utils.inc:263 etc/inc/service-utils.inc:263
+msgid "NTP clock sync"
+msgstr "NTPクロックåŒæœŸ"
+
+#: usr/local/www/status_services.php:302
+#: usr/local/www/widgets/widgets/services_status.widget.php:107
+#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284
+#: etc/inc/service-utils.inc:301 etc/inc/service-utils.inc:301
+msgid "DHCP Service"
+msgstr "DHCPサービス"
+
+#: usr/local/www/status_services.php:309
+#: usr/local/www/widgets/widgets/services_status.widget.php:114
+#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291
+#: etc/inc/service-utils.inc:308 etc/inc/service-utils.inc:308
+msgid "SNMP Service"
+msgstr "SNMPサービス"
+
+#: usr/local/www/status_services.php:323
+#: usr/local/www/widgets/widgets/services_status.widget.php:128
+#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305
+#: etc/inc/service-utils.inc:322 etc/inc/service-utils.inc:322
+msgid "UPnP Service"
+msgstr "UPnPã®ã‚µãƒ¼ãƒ“ス"
+
+#: usr/local/www/status_services.php:353
+#: usr/local/www/widgets/widgets/services_status.widget.php:158
+#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342
+#: etc/inc/service-utils.inc:359 etc/inc/service-utils.inc:359
+msgid "Server load balancing daemon"
+msgstr "サーãƒè² è·åˆ†æ•£ãƒ‡ãƒ¼ãƒ¢ãƒ³"
+
+#: usr/local/www/status_services.php:380
+#: usr/local/www/widgets/widgets/services_status.widget.php:210
+#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410
+#: etc/inc/service-utils.inc:427 etc/inc/service-utils.inc:430
+#: etc/inc/service-utils.inc:430
+msgid "Running"
+msgstr "ランニング"
+
+#: usr/local/www/status_services.php:383
+#: usr/local/www/widgets/widgets/services_status.widget.php:213
+#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419
+#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:440
+#: etc/inc/service-utils.inc:440
+msgid "Stopped"
+msgstr "åœæ­¢"
+
+#: usr/local/www/status_services.php:392
+#: usr/local/www/widgets/widgets/services_status.widget.php:222
+msgid "Restart Service"
+msgstr "å†èµ·å‹•ã®ã‚µãƒ¼ãƒ“ス"
+
+#: usr/local/www/status_services.php:398
+#: usr/local/www/widgets/widgets/services_status.widget.php:228
+msgid "Stop Service"
+msgstr "サービスをåœæ­¢ã—ã¾ã™"
+
+#: usr/local/www/status_services.php:407
+#: usr/local/www/widgets/widgets/services_status.widget.php:237
+msgid "Start Service"
+msgstr "サービスを開始"
+
+#: usr/local/www/status_services.php:412
+#: usr/local/www/widgets/widgets/services_status.widget.php:242
+#: usr/local/www/status_services.php:271
+#: usr/local/www/widgets/widgets/services_status.widget.php:83
+#: usr/local/www/status_services.php:269 usr/local/www/status_services.php:110
+#: usr/local/www/widgets/widgets/services_status.widget.php:84
+#: usr/local/www/status_services.php:110
+#: usr/local/www/widgets/widgets/services_status.widget.php:84
+msgid "No services found"
+msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“サービス"
+
+#: usr/local/www/status_upnp.php:48 usr/local/www/status_upnp.php:48
+msgid "Rules have been cleared and the daemon restarted"
+msgstr "ルールãŒã‚¯ãƒªã‚¢ã•ã‚ŒãŸã¨ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’å†èµ·å‹•"
+
+#: usr/local/www/status_upnp.php:58 usr/local/www/status_upnp.php:58
+msgid "UPnP &amp; NAT-PMP Status"
+msgstr "UPnPã®ï¼† NAT -PMPã®çŠ¶æ³"
+
+#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68
+#: usr/local/www/status_upnp.php:68
+msgid "UPnP is currently disabled."
+msgstr "UPnPã®ã¯ç¾åœ¨ç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78
+#: usr/local/www/status_upnp.php:78
+msgid "all currently connected sessions"
+msgstr "ã™ã¹ã¦ã®ç¾åœ¨æŽ¥ç¶šã—ã¦ã„るセッション"
+
+#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206
+#: usr/local/www/fbegin.inc:214 usr/local/www/fbegin.inc:205
+#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:205
+msgid "ARP Table"
+msgstr "ARPテーブル"
+
+#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113
+#: usr/local/www/diag_ndp.php:113 usr/local/www/diag_arp.php:271
+msgid "Loading, please wait..."
+msgstr "読ã¿è¾¼ã¿ä¸­ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:158
+#: usr/local/www/services_dyndns_edit.php:92
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/services_dyndns_edit.php:220
+#: usr/local/www/services_dyndns_edit.php:93
+#: usr/local/www/services_dyndns_edit.php:222
+#: usr/local/www/services_dyndns_edit.php:93
+#: usr/local/www/services_dyndns_edit.php:222
+msgid "Service type"
+msgstr "サービスã®ç¨®é¡ž"
+
+#: usr/local/www/services_dyndns_edit.php:92
+#: usr/local/www/services_dyndns_edit.php:108
+#: usr/local/www/services_dyndns_edit.php:109
+#: usr/local/www/services_dyndns_edit.php:109
+msgid "The MX contains invalid characters."
+msgstr "MXã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:133
+#: usr/local/www/services_dyndns_edit.php:147
+#: usr/local/www/services_dyndns_edit.php:156
+#: usr/local/www/services_dyndns_edit.php:205
+#: usr/local/www/services_dyndns_edit.php:160
+#: usr/local/www/services_dyndns_edit.php:209
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_dyndns_edit.php:211
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_dyndns_edit.php:211
+msgid "Dynamic DNS client"
+msgstr "ダイナミックDNSクライアント"
+
+#: usr/local/www/services_dyndns_edit.php:154
+#: usr/local/www/services_rfc2136_edit.php:188
+#: usr/local/www/services_dyndns_edit.php:212
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/services_dyndns_edit.php:218
+#: usr/local/www/services_dyndns_edit.php:218
+#: usr/local/www/services_rfc2136_edit.php:188
+msgid "yes"
+msgstr "ã¯ã„"
+
+#: usr/local/www/services_dyndns_edit.php:172
+#: usr/local/www/services_rfc2136_edit.php:134
+#: usr/local/www/services_dyndns_edit.php:230
+#: usr/local/www/services_dyndns_edit.php:234
+#: usr/local/www/services_dyndns_edit.php:236
+#: usr/local/www/services_dyndns_edit.php:236
+#: usr/local/www/services_rfc2136_edit.php:134
+msgid "Interface to monitor"
+msgstr "監視ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹"
+
+#: usr/local/www/services_dyndns_edit.php:191
+#: usr/local/www/services_dyndns_edit.php:274
+#: usr/local/www/services_dyndns_edit.php:278
+#: usr/local/www/services_dyndns_edit.php:280
+#: usr/local/www/services_dyndns_edit.php:280
+msgid "Enter the complete host/domain name. example: myhost.dyndns.org"
+msgstr "完全ãªãƒ›ã‚¹ãƒˆ/ドメインåを入力ã—ã¾ã™ã€‚例: myhost.dyndns.org"
+
+#: usr/local/www/services_dyndns_edit.php:192
+#: usr/local/www/services_dyndns_edit.php:275
+#: usr/local/www/services_dyndns_edit.php:279
+#: usr/local/www/services_dyndns_edit.php:281
+#: usr/local/www/services_dyndns_edit.php:281
+msgid "For he.net tunnelbroker, enter your tunnel ID"
+msgstr "he.netã®tunnelbrokerã¯ã€ãŠä½¿ã„ã®ãƒˆãƒ³ãƒãƒ«IDを入力"
+
+#: usr/local/www/services_dyndns_edit.php:197
+#: usr/local/www/services_dyndns_edit.php:280
+#: usr/local/www/services_dyndns_edit.php:284
+#: usr/local/www/services_dyndns_edit.php:286
+#: usr/local/www/services_dyndns_edit.php:286
+msgid "MX"
+msgstr "MX"
+
+#: usr/local/www/services_dyndns_edit.php:201
+#: usr/local/www/services_dyndns_edit.php:284
+#: usr/local/www/services_dyndns_edit.php:288
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:290
+msgid ""
+"Note: With DynDNS service you can only use a hostname, not an IP address."
+msgstr ""注:ダイナミックDNSサービスを使用ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆåã ã‘ã§ãªã〠IPアドレスを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:203
+#: usr/local/www/services_dyndns_edit.php:286
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:292
+#: usr/local/www/services_dyndns_edit.php:292
+msgid ""
+"Set this option only if you need a special MX record. Not all services "
+"support this."
+msgstr ""ã‚ãªãŸã¯ç‰¹åˆ¥ãªMXレコードãŒå¿…è¦ãªå ´åˆã«ã®ã¿ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スãŒãªã„〠ã€ã“れをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:207
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:294
+#: usr/local/www/services_dyndns_edit.php:296
+#: usr/local/www/services_dyndns_edit.php:296
+msgid "Wildcards"
+msgstr "ワイルドカード"
+
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/services_dyndns_edit.php:293
+#: usr/local/www/services_dyndns_edit.php:297
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:305
+msgid "Enable "
+msgstr "有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/services_dyndns_edit.php:293
+#: usr/local/www/services_dyndns_edit.php:297
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:299
+msgid "Wildcard"
+msgstr "ワイルドカード"
+
+#: usr/local/www/services_dyndns_edit.php:216
+msgid "Username is required for all types except Namecheap and FreeDNS."
+msgstr "ユーザåã¯Namecheapã¨FreeDNSを除ãã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ã®ãŸã‚ã«å¿…è¦ã¨ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/services_dyndns_edit.php:224
+#: usr/local/www/services_dyndns_edit.php:309
+#: usr/local/www/services_dyndns_edit.php:313
+#: usr/local/www/services_dyndns_edit.php:321
+#: usr/local/www/services_dyndns_edit.php:321
+msgid ""
+"FreeDNS (freedns.afraid.org): Enter your "Authentication Token" provided "
+"by FreeDNS."
+msgstr "「 FreeDNS ( freedns.afraid.org ) :ã‚ãªãŸã®å…¥åŠ›ã—ã¦ãã ã•ã„ "èªè¨¼ãƒˆãƒ¼ã‚¯ãƒ³ã¯FreeDNSã«ã‚ˆã£ã¦ã€Œæ供〠。"
+
+#: usr/local/www/services_dyndns_edit.php:246
+#: usr/local/www/services_dyndns_edit.php:377
+#: usr/local/www/services_dyndns_edit.php:381
+#: usr/local/www/services_dyndns_edit.php:389
+#: usr/local/www/services_dyndns_edit.php:389
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem:\n"
+" General setup%s or allow the DNS server list to be "
+"overridden\n"
+" by DHCP/PPP on WAN for dynamic DNS updates to work."
+msgstr ""ã‚ãªãŸã¯%sSystemã§DNSサーãƒãƒ¼ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ \n 「一般的setup%sã¾ãŸã¯DNSサーãƒã®ãƒªã‚¹ãƒˆãŒå‹•çš„DNSæ›´æ–°ãŒæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã€WAN上ã®DHCP / PPPã«ã‚ˆã‚‹ã€Œ overridden\n ã€ã§ã‚ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã™ã‚‹ã€‚"
+
+#: usr/local/www/services_igmpproxy.php:80
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_igmpproxy.php:80
+msgid "IGMP Proxy"
+msgstr "IGMPプロキシ"
+
+#: usr/local/www/services_igmpproxy.php:90
+#: usr/local/www/services_igmpproxy.php:90
+msgid "The IGMP entry list has been changed"
+msgstr "IGMPエントリリストãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/services_igmpproxy.php:103
+#: usr/local/www/services_igmpproxy.php:146
+#: usr/local/www/services_igmpproxy.php:103
+#: usr/local/www/services_igmpproxy.php:146
+msgid "add a new igmpentry"
+msgstr "æ–°ã—ã„igmpentryを追加"
+
+#: usr/local/www/services_igmpproxy.php:133
+#: usr/local/www/services_igmpproxy.php:133
+msgid "edit igmpentry"
+msgstr "編集igmpentry"
+
+#: usr/local/www/services_igmpproxy.php:134
+#: usr/local/www/services_igmpproxy.php:134
+msgid ""
+"Do you really want to delete this igmpentry? All elements that still use it "
+"will become invalid (e.g. filter rules)!"
+msgstr "「本当ã«ã“ã®igmpentryを削除ã—ã¾ã™ã‹ï¼Ÿã¾ã ãã‚ŒãŒä½¿ç”¨ã™ã‚‹ã™ã¹ã¦ã®è¦ç´ ãŒ" (例ãˆã°ãƒ•ã‚£ãƒ«ã‚¿ãƒ«ãƒ¼ãƒ«ï¼‰ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ï¼"
+
+#: usr/local/www/services_igmpproxy.php:134
+#: usr/local/www/services_igmpproxy.php:134
+msgid "delete igmpentry"
+msgstr "igmpentryを削除"
+
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_igmpproxy.php:161
+msgid ""
+"Please add the interface for upstream, the allowed subnets, and the "
+"downstream interfaces you would like the proxy to allow. Only one 'upstream' "
+"interface can be configured."
+msgstr "「上æµã€è¨±å¯ã•ã‚ŒãŸã‚µãƒ–ãƒãƒƒãƒˆã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’追加ã—ã€ã—ã¦ãã ã•ã„「ダウンストリームインターフェイスã¯ã€ã‚ãªãŸãŒã§ãるよã†ã«ã€ãƒ—ロキシをã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚一ã¤ã ã‘'上æµã€ 「インタフェースãŒè¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_igmpproxy_edit.php:79
+#: usr/local/www/services_igmpproxy_edit.php:79
+msgid "Only one 'upstream' interface can be configured."
+msgstr "一ã¤ã ã‘'上æµ'インタフェースãŒè¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_igmpproxy_edit.php:158
+#: usr/local/www/services_igmpproxy_edit.php:160
+#: usr/local/www/services_igmpproxy_edit.php:160
+msgid "IGMP Proxy Edit"
+msgstr "IGMPプロキシ編集"
+
+#: usr/local/www/services_igmpproxy_edit.php:188
+#: usr/local/www/services_igmpproxy_edit.php:190
+#: usr/local/www/services_igmpproxy_edit.php:190
+msgid "Upstream Interface"
+msgstr "アップストリームインターフェイス"
+
+#: usr/local/www/services_igmpproxy_edit.php:189
+#: usr/local/www/services_igmpproxy_edit.php:191
+#: usr/local/www/services_igmpproxy_edit.php:191
+msgid "Downstream Interface"
+msgstr "ダウンストリームインターフェイス"
+
+#: usr/local/www/services_igmpproxy_edit.php:193
+#: usr/local/www/services_igmpproxy_edit.php:195
+#: usr/local/www/services_igmpproxy_edit.php:195
+msgid ""
+"The <b>upstream</b> network interface is the outgoing interface which is "
+"responsible for communicating to available multicast data sources. There can "
+"only be one upstream interface."
+msgstr "利用å¯èƒ½ãªãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆÂ·ãƒ‡ãƒ¼ã‚¿Â·ã‚½ãƒ¼ã‚¹ã¨ã®é€šä¿¡ã‚’担当ã™ã‚‹ã€Œ u003cBu003e上æµu003c / B u003eãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã‚る発信インターフェイスã§ã‚る〠。 「オンリーワンアップストリームインターフェイスãŒã‚ã‚‹å ´åˆã‚‚ã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_igmpproxy_edit.php:199
+#: usr/local/www/services_igmpproxy_edit.php:201
+#: usr/local/www/services_igmpproxy_edit.php:201
+msgid "Downstream"
+msgstr "下æµ"
+
+#: usr/local/www/services_igmpproxy_edit.php:199
+#: usr/local/www/services_igmpproxy_edit.php:201
+#: usr/local/www/services_igmpproxy_edit.php:201
+msgid ""
+"network interfaces are the distribution interfaces to the destination "
+"networks, where multicast clients can join groups and receive multicast "
+"data. One or more downstream interfaces must be configured."
+msgstr "マルãƒã‚­ãƒ£ã‚¹ãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã—ã€ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã€ã€Œãƒ‡ãƒ¼ã‚¿1ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’構æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã‚’å—ã‘å–ã‚‹ã“ã¨ãŒã§ãã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ 「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ç›®çš„地ã¸ã®é…布インターフェイスã§ã™ã€ 。"
+
+#: usr/local/www/services_igmpproxy_edit.php:206
+#: usr/local/www/services_igmpproxy_edit.php:208
+#: usr/local/www/services_igmpproxy_edit.php:208
+msgid "Threshold"
+msgstr "ã—ãã„値"
+
+#: usr/local/www/services_igmpproxy_edit.php:211
+#: usr/local/www/services_igmpproxy_edit.php:213
+#: usr/local/www/services_igmpproxy_edit.php:213
+msgid ""
+"Defines the TTL threshold for the network interface. Packets with a "
+"lower TTL than the threshold value will be ignored. This setting is "
+"optional, and by default the threshold is 1."
+msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®TTLã—ãã„値を定義ã—ã¾ã™ã€‚æŒã¤ãƒ‘ケット〠threshols値よりも低ã„TTLã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ 「オプションã§ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ã€ã—ãã„値ã¯1ã§ã™ã€‚"
+
+#: usr/local/www/services_igmpproxy_edit.php:218
+#: usr/local/www/services_igmpproxy_edit.php:220
+#: usr/local/www/services_igmpproxy_edit.php:220
+msgid "Network (s)"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼ˆå˜æ•°ã¾ãŸã¯è¤‡æ•°ï¼‰"
+
+#: usr/local/www/services_rfc2136.php:55 usr/local/www/services_rfc2136.php:55
+msgid "RFC 2136 clients"
+msgstr "RFC 2136ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ"
+
+#: usr/local/www/services_rfc2136.php:99
+#: usr/local/www/vpn_openvpn_client.php:894
+#: usr/local/www/vpn_openvpn_client.php:899
+#: usr/local/www/vpn_openvpn_client.php:952
+#: usr/local/www/services_rfc2136.php:118
+#: usr/local/www/vpn_openvpn_client.php:971
+#: usr/local/www/services_rfc2136.php:118
+#: usr/local/www/vpn_openvpn_client.php:971
+msgid "Do you really want to delete this client?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:153
+#: usr/local/www/services_dyndns_edit.php:348
+#: usr/local/www/services_dyndns_edit.php:352
+#: usr/local/www/services_dyndns_edit.php:360
+#: usr/local/www/services_dyndns_edit.php:360
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:153
+msgid "TTL"
+msgstr "TTL"
+
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:159
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:159
+msgid "Key name"
+msgstr "キーå"
+
+#: usr/local/www/services_rfc2136_edit.php:76
+#: usr/local/www/services_rfc2136_edit.php:76
+msgid "The DNS update host name contains invalid characters."
+msgstr "DNSæ›´æ–°ã®ãƒ›ã‚¹ãƒˆåãŒç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_rfc2136_edit.php:78
+#: usr/local/www/services_rfc2136_edit.php:78
+msgid "The DNS update TTL must be an integer."
+msgstr "DNSæ›´æ–°TTLã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_rfc2136_edit.php:80
+#: usr/local/www/services_rfc2136_edit.php:80
+msgid "The DNS update key name contains invalid characters."
+msgstr "DNS更新キーåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_rfc2136_edit.php:100
+#: usr/local/www/services_rfc2136_edit.php:100
+msgid "New/Edited RFC2136 dnsupdate entry was posted."
+msgstr "æ–°è¦/編集RFC2136ã®dnsupdateエントリãŒæŠ•ç¨¿ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/services_rfc2136_edit.php:123
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/services_rfc2136_edit.php:123
+msgid "RFC 2136 client"
+msgstr "RFC 2136クライアント"
+
+#: usr/local/www/services_rfc2136_edit.php:163
+#: usr/local/www/services_rfc2136_edit.php:163
+msgid "This must match the setting on the DNS server."
+msgstr "ã“ã‚Œã¯ã€DNSサーãƒãƒ¼ã®è¨­å®šã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_rfc2136_edit.php:166
+#: usr/local/www/services_rfc2136_edit.php:166
+msgid "Key type"
+msgstr "キータイプ"
+
+#: usr/local/www/services_rfc2136_edit.php:168
+#: usr/local/www/services_captiveportal_zones.php:52
+#: usr/local/www/services_captiveportal_zones.php:53
+#: usr/local/www/services_captiveportal_zones.php:53
+#: usr/local/www/services_rfc2136_edit.php:168
+msgid "Zone"
+msgstr "ゾーン"
+
+#: usr/local/www/services_rfc2136_edit.php:170
+#: usr/local/www/services_rfc2136_edit.php:170
+msgid " User"
+msgstr "ユーザー"
+
+#: usr/local/www/services_rfc2136_edit.php:177
+#: usr/local/www/services_rfc2136_edit.php:177
+msgid "Paste an HMAC-MD5 key here."
+msgstr "ã“ã“ã«HMAC- MD5キーを貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/services_rfc2136_edit.php:189
+#: usr/local/www/services_rfc2136_edit.php:189
+msgid "Use TCP instead of UDP"
+msgstr "UDPã§ã¯ãªãTCPを使用ã™ã‚‹"
+
+#: usr/local/www/services_rfc2136_edit.php:210
+#: usr/local/www/services_rfc2136_edit.php:210
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem: General setup %sor allow the "
+"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates "
+"to work."
+msgstr ""ã‚ãªãŸã¯%sSystemã«DNSサーãƒã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼šä¸€èˆ¬çš„ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—%sor許å¯ã€ã®DNSサーãƒãƒªã‚¹ãƒˆã‚’機能ã•ã›ã‚‹ã«ã¯ã€ã€Œãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSæ›´æ–°ã®ãŸã‚ã«ã€WAN上ã®DHCP / PPPã«ã‚ˆã£ã¦ç„¡åŠ¹ã«ã•ã‚Œã‚‹ã‚ˆã†ã«ã€‚"
+
+#: usr/local/www/status_captiveportal_test.php:82
+#: usr/local/www/status_captiveportal_test.php:83
+#: usr/local/www/status_captiveportal_expire.php:82
+#: usr/local/www/status_captiveportal_test.php:84
+#: usr/local/www/status_captiveportal_expire.php:82
+#: usr/local/www/status_captiveportal_test.php:84
+msgid "Voucher(s)"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ï¼ˆ S )"
+
+#: usr/local/www/status_captiveportal_test.php:86
+#: usr/local/www/status_captiveportal_test.php:87
+#: usr/local/www/status_captiveportal_test.php:88
+#: usr/local/www/status_captiveportal_test.php:88
+msgid ""
+"Enter multiple vouchers separated by space or newline. The remaining time, "
+"if valid, will be shown for each voucher"
+msgstr "「空白や改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸè¤‡æ•°ã®ä¼ç¥¨ã‚’入力ã—ã¦ãã ã•ã„。残り時間を〠「有効ã§ã‚ã‚Œã°ã€ãã‚Œãžã‚Œã®ã‚¯ãƒ¼ãƒãƒ³ã®ãŸã‚ã«è¡¨ç¤ºã•ã‚Œã¾ã™"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:85
+#: usr/local/www/status_captiveportal_voucher_rolls.php:86
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+msgid "Roll#"
+msgstr "ロール"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:87
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+msgid "# of Tickets"
+msgstr ""
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+msgid "used"
+msgstr "使用ã•ã‚ŒãŸ"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/status_captiveportal_voucher_rolls.php:93
+#: usr/local/www/status_captiveportal_voucher_rolls.php:93
+msgid "active"
+msgstr "アクティブ"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+#: usr/local/www/status_captiveportal_voucher_rolls.php:94
+#: usr/local/www/status_captiveportal_voucher_rolls.php:94
+msgid "ready"
+msgstr "レディー"
+
+#: usr/local/www/status_captiveportal_vouchers.php:115
+#: usr/local/www/status_captiveportal_vouchers.php:116
+#: usr/local/www/status_captiveportal_vouchers.php:121
+#: usr/local/www/status_captiveportal_vouchers.php:121
+msgid "Voucher"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼"
+
+#: usr/local/www/status_captiveportal_vouchers.php:117
+#: usr/local/www/status_captiveportal_vouchers.php:118
+#: usr/local/www/status_captiveportal_vouchers.php:123
+#: usr/local/www/status_captiveportal_vouchers.php:123
+msgid "Activated at"
+msgstr "ã§æ´»æ€§åŒ–"
+
+#: usr/local/www/status_captiveportal_vouchers.php:118
+#: usr/local/www/status_captiveportal_vouchers.php:119
+#: usr/local/www/status_captiveportal_vouchers.php:124
+#: usr/local/www/status_captiveportal_vouchers.php:124
+msgid "Expires in"
+msgstr "ã«å¤±åŠ¹"
+
+#: usr/local/www/status_captiveportal_vouchers.php:119
+#: usr/local/www/status_captiveportal_vouchers.php:120
+#: usr/local/www/status_captiveportal_vouchers.php:125
+#: usr/local/www/status_captiveportal_vouchers.php:125
+msgid "Expires at"
+msgstr "ã§æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹"
+
+#: usr/local/www/status_captiveportal_vouchers.php:127
+#: usr/local/www/status_captiveportal_vouchers.php:128
+#: usr/local/www/status_captiveportal_vouchers.php:133
+#: usr/local/www/status_captiveportal_vouchers.php:133
+msgid "min"
+msgstr "分"
+
+#: usr/local/www/status_dhcp_leases.php:48
+#: usr/local/www/status_dhcp_leases.php:49
+#: usr/local/www/status_dhcp_leases.php:49
+msgid "DHCP leases"
+msgstr "DHCPリース"
+
+#: usr/local/www/status_dhcp_leases.php:287
+#: usr/local/www/status_dhcpv6_leases.php:328
+#: usr/local/www/status_dhcpv6_leases.php:372
+#: usr/local/www/status_dhcp_leases.php:308
+#: usr/local/www/status_dhcpv6_leases.php:373
+#: usr/local/www/status_dhcp_leases.php:310
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:310
+msgid "Failover Group"
+msgstr "フェイルオーãƒãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: usr/local/www/status_dhcp_leases.php:288
+#: usr/local/www/status_dhcpv6_leases.php:329
+#: usr/local/www/status_dhcpv6_leases.php:373
+#: usr/local/www/status_dhcp_leases.php:309
+#: usr/local/www/status_dhcpv6_leases.php:374
+#: usr/local/www/status_dhcp_leases.php:311
+#: usr/local/www/status_dhcpv6_leases.php:377
+#: usr/local/www/status_dhcpv6_leases.php:377
+#: usr/local/www/status_dhcp_leases.php:311
+msgid "My State"
+msgstr "ç§ã®çŠ¶æ…‹"
+
+#: usr/local/www/status_dhcp_leases.php:289
+#: usr/local/www/status_dhcp_leases.php:291
+#: usr/local/www/status_dhcpv6_leases.php:330
+#: usr/local/www/status_dhcpv6_leases.php:332
+#: usr/local/www/status_dhcpv6_leases.php:374
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:310
+#: usr/local/www/status_dhcp_leases.php:312
+#: usr/local/www/status_dhcpv6_leases.php:375
+#: usr/local/www/status_dhcpv6_leases.php:377
+#: usr/local/www/status_dhcp_leases.php:314
+#: usr/local/www/status_dhcpv6_leases.php:378
+#: usr/local/www/status_dhcpv6_leases.php:380
+#: usr/local/www/status_dhcpv6_leases.php:378
+#: usr/local/www/status_dhcpv6_leases.php:380
+#: usr/local/www/status_dhcp_leases.php:312
+#: usr/local/www/status_dhcp_leases.php:314
+msgid "Since"
+msgstr "ã‹ã‚‰"
+
+#: usr/local/www/status_dhcp_leases.php:290
+#: usr/local/www/status_dhcpv6_leases.php:331
+#: usr/local/www/status_dhcpv6_leases.php:375
+#: usr/local/www/status_dhcp_leases.php:311
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:313
+#: usr/local/www/status_dhcpv6_leases.php:379
+#: usr/local/www/status_dhcpv6_leases.php:379
+#: usr/local/www/status_dhcp_leases.php:313
+msgid "Peer State"
+msgstr "ピア状態"
+
+#: usr/local/www/status_dhcp_leases.php:322
+#: usr/local/www/status_dhcpv6_leases.php:364
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:485
+#: usr/local/www/status_dhcp_leases.php:343
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcpv6_leases.php:486
+#: usr/local/www/status_dhcp_leases.php:345
+#: usr/local/www/status_dhcpv6_leases.php:412
+#: usr/local/www/status_dhcpv6_leases.php:489
+#: usr/local/www/status_dhcpv6_leases.php:412
+#: usr/local/www/status_dhcpv6_leases.php:489
+#: usr/local/www/status_dhcp_leases.php:345
+msgid "End"
+msgstr "終ã‚ã‚Š"
+
+#: usr/local/www/status_dhcp_leases.php:323
+#: usr/local/www/status_gateway_groups.php:132
+#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57
+#: usr/local/www/status_dhcpv6_leases.php:365
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcp_leases.php:344
+#: usr/local/www/status_dhcpv6_leases.php:410
+#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132
+#: usr/local/www/status_dhcp_leases.php:346
+#: usr/local/www/status_gateway_groups.php:133
+#: usr/local/www/status_dhcpv6_leases.php:413
+#: usr/local/www/status_dhcpv6_leases.php:413
+#: usr/local/www/status_dhcp_leases.php:346
+#: usr/local/www/status_gateway_groups.php:133
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57
+#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132
+msgid "Online"
+msgstr "オンライン"
+
+#: usr/local/www/status_dhcp_leases.php:324
+#: usr/local/www/status_dhcpv6_leases.php:366
+#: usr/local/www/status_dhcpv6_leases.php:410
+#: usr/local/www/status_dhcp_leases.php:345
+#: usr/local/www/status_dhcpv6_leases.php:411
+#: usr/local/www/status_dhcp_leases.php:347
+#: usr/local/www/status_dhcpv6_leases.php:414
+#: usr/local/www/status_dhcpv6_leases.php:414
+#: usr/local/www/status_dhcp_leases.php:347
+msgid "Lease Type"
+msgstr "リースã®ç¨®é¡ž"
+
+#: usr/local/www/status_dhcp_leases.php:368
+#: usr/local/www/status_dhcp_leases.php:389
+#: usr/local/www/status_dhcp_leases.php:393
+#: usr/local/www/status_dhcp_leases.php:393
+msgid "send Wake on LAN packet to this MAC address"
+msgstr "ã“ã®MACアドレスã«Wake on LANパケットをé€ä¿¡"
+
+#: usr/local/www/status_dhcp_leases.php:390
+#: usr/local/www/status_dhcpv6_leases.php:417
+#: usr/local/www/status_dhcpv6_leases.php:461
+#: usr/local/www/status_dhcp_leases.php:411
+#: usr/local/www/status_dhcpv6_leases.php:462
+#: usr/local/www/status_dhcp_leases.php:415
+#: usr/local/www/status_dhcpv6_leases.php:465
+#: usr/local/www/status_dhcpv6_leases.php:465
+#: usr/local/www/status_dhcp_leases.php:415
+msgid "add a static mapping for this MAC address"
+msgstr "ã“ã®MACアドレスã®é™çš„マッピングを追加"
+
+#: usr/local/www/status_dhcp_leases.php:397
+#: usr/local/www/status_dhcp_leases.php:418
+#: usr/local/www/status_dhcp_leases.php:422
+#: usr/local/www/status_dhcp_leases.php:422
+msgid "add a Wake on LAN mapping for this MAC address"
+msgstr "ã“ã®MACアドレス用ã®LANマッピングã«ã‚³ãƒ¼ãƒ«ã‚’追加"
+
+#: usr/local/www/status_dhcp_leases.php:402
+#: usr/local/www/status_dhcpv6_leases.php:426
+#: usr/local/www/status_dhcpv6_leases.php:470
+#: usr/local/www/status_dhcp_leases.php:423
+#: usr/local/www/status_dhcpv6_leases.php:471
+#: usr/local/www/status_dhcp_leases.php:427
+#: usr/local/www/status_dhcpv6_leases.php:474
+#: usr/local/www/status_dhcpv6_leases.php:474
+#: usr/local/www/status_dhcp_leases.php:427
+msgid "delete this DHCP lease"
+msgstr "ã“ã®DHCPリースを削除"
+
+#: usr/local/www/status_dhcp_leases.php:415
+#: usr/local/www/status_dhcpv6_leases.php:439
+#: usr/local/www/status_dhcpv6_leases.php:540
+#: usr/local/www/status_dhcp_leases.php:436
+#: usr/local/www/status_dhcpv6_leases.php:541
+#: usr/local/www/status_dhcp_leases.php:440
+#: usr/local/www/status_dhcpv6_leases.php:544
+#: usr/local/www/status_dhcpv6_leases.php:544
+#: usr/local/www/status_dhcp_leases.php:440
+msgid "Show active and static leases only"
+msgstr "アクティブãŠã‚ˆã³ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒªãƒ¼ã‚¹ã‚’表示ã™ã‚‹ã ã‘"
+
+#: usr/local/www/status_dhcp_leases.php:418
+#: usr/local/www/status_dhcpv6_leases.php:442
+#: usr/local/www/status_dhcpv6_leases.php:543
+#: usr/local/www/status_dhcp_leases.php:439
+#: usr/local/www/status_dhcpv6_leases.php:544
+#: usr/local/www/status_dhcp_leases.php:443
+#: usr/local/www/status_dhcpv6_leases.php:547
+#: usr/local/www/status_dhcpv6_leases.php:547
+#: usr/local/www/status_dhcp_leases.php:443
+msgid "Show all configured leases"
+msgstr "設定ã•ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒªãƒ¼ã‚¹ã‚’表示ã™ã‚‹"
+
+#: usr/local/www/status_dhcp_leases.php:422
+#: usr/local/www/status_dhcpv6_leases.php:446
+#: usr/local/www/status_dhcpv6_leases.php:547
+#: usr/local/www/status_dhcp_leases.php:443
+#: usr/local/www/status_dhcpv6_leases.php:548
+#: usr/local/www/status_dhcp_leases.php:447
+#: usr/local/www/status_dhcpv6_leases.php:551
+#: usr/local/www/status_dhcpv6_leases.php:551
+#: usr/local/www/status_dhcp_leases.php:447
+msgid "No leases file found. Is the DHCP server active"
+msgstr "リースファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ DHCPサーãƒãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã£ã¦ã„ã‚‹"
+
+#: usr/local/www/status_gateway_groups.php:100
+#: usr/local/www/status_gateway_groups.php:101
+#: usr/local/www/status_gateway_groups.php:101
+#, php-format
+msgid "Tier %s"
+msgstr "ティア%s"
+
+#: usr/local/www/status_gateway_groups.php:126
+#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122
+#: usr/local/www/status_gateway_groups.php:127
+#: usr/local/www/status_gateway_groups.php:127
+#: usr/local/www/status_gateways.php:122
+msgid "Warning, Packetloss"
+msgstr "警告ã€ãƒ‘ケットロス"
+
+#: usr/local/www/status_gateway_groups.php:129
+#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125
+#: usr/local/www/status_gateway_groups.php:130
+#: usr/local/www/status_gateway_groups.php:130
+#: usr/local/www/status_gateways.php:125
+msgid "Warning, Latency"
+msgstr "警告ã€ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼"
+
+#: usr/local/www/status_gateway_groups.php:135
+#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108
+#: usr/local/www/status_gateways.php:134
+#: usr/local/www/widgets/widgets/gateways.widget.php:69
+#: usr/local/www/widgets/widgets/gateways.widget.php:77
+#: usr/local/www/widgets/widgets/gateways.widget.php:98
+#: usr/local/www/status_gateway_groups.php:136
+#: usr/local/www/status_gateway_groups.php:136
+msgid "Gathering data"
+msgstr "データã®åŽé›†"
+
+#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76
+#: usr/local/www/status_gateways.php:76
+msgid "RTT"
+msgstr "RTT"
+
+#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77
+#: usr/local/www/status_gateways.php:77
+msgid "Loss"
+msgstr "æ失"
+
+#: usr/local/www/status_gateways.php:144
+#, php-format
+msgid "Last check %s"
+msgstr "最後ã®ãƒã‚§ãƒƒã‚¯ã®%s"
+
+#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_graph_cpu.php:41
+msgid "CPU load"
+msgstr "CPUè² è·"
+
+#: usr/local/www/status_graph_cpu.php:46 usr/local/www/status_graph_cpu.php:46
+msgid "Status: CPU Graph"
+msgstr "ステータス: CPUã®ã‚°ãƒ©ãƒ•"
+
+#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53
+msgid "if you can't see the graph, you may have to install the"
+msgstr "グラフを見るã“ã¨ãŒã§ããªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/status_graph_cpu.php:53 usr/local/www/status_graph_cpu.php:53
+msgid "Adobe SVG viewer"
+msgstr "アドビSVGビューア"
+
+#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427
+#: usr/local/www/vpn_ipsec_phase2.php:469
+#: usr/local/www/vpn_ipsec_phase2.php:475
+#: usr/local/www/vpn_ipsec_phase2.php:453
+#: usr/local/www/vpn_ipsec_phase2.php:495
+#: usr/local/www/vpn_ipsec_phase2.php:501
+#: usr/local/www/vpn_ipsec_phase2.php:519
+#: usr/local/www/vpn_ipsec_phase2.php:555
+#: usr/local/www/vpn_ipsec_phase2.php:597
+#: usr/local/www/vpn_ipsec_phase2.php:603
+#: usr/local/www/vpn_ipsec_phase2.php:541
+#: usr/local/www/vpn_ipsec_phase2.php:576
+#: usr/local/www/vpn_ipsec_phase2.php:618
+#: usr/local/www/vpn_ipsec_phase2.php:624 usr/local/www/status_lb_vs.php:78
+#: usr/local/www/vpn_ipsec_phase2.php:541
+#: usr/local/www/vpn_ipsec_phase2.php:576
+#: usr/local/www/vpn_ipsec_phase2.php:618
+#: usr/local/www/vpn_ipsec_phase2.php:624
+msgid "Address"
+msgstr "アドレス"
+
+#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146
+#: usr/local/www/status_openvpn.php:147 usr/local/www/status_openvpn.php:147
+msgid "Client connections"
+msgstr "クライアント接続"
+
+#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534
+#: usr/local/www/system_certmanager.php:627
+#: usr/local/www/system_certmanager.php:730
+#: usr/local/www/vpn_openvpn_csc.php:673
+#: usr/local/www/system_certmanager.php:743
+#: usr/local/www/system_certmanager.php:896
+#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153
+#: usr/local/www/vpn_openvpn_csc.php:672
+#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:214
+#: usr/local/www/system_certmanager.php:768
+#: usr/local/www/system_certmanager.php:938
+#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:224
+#: usr/local/www/system_certmanager.php:769
+#: usr/local/www/system_certmanager.php:942
+#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:154
+#: usr/local/www/status_openvpn.php:224 usr/local/www/vpn_openvpn_csc.php:672
+#: usr/local/www/system_certmanager.php:769
+#: usr/local/www/system_certmanager.php:942
+msgid "Common Name"
+msgstr "コモンãƒãƒ¼ãƒ "
+
+#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:155
+#: usr/local/www/status_openvpn.php:225 usr/local/www/status_openvpn.php:155
+#: usr/local/www/status_openvpn.php:225
+msgid "Real Address"
+msgstr "実アドレス"
+
+#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155
+#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:156
+msgid "Virtual Address"
+msgstr "仮想アドレス"
+
+#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213
+#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156
+#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267
+#: usr/local/www/status_openvpn.php:315 usr/local/www/status_openvpn.php:157
+#: usr/local/www/status_openvpn.php:274 usr/local/www/status_openvpn.php:335
+#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:274
+#: usr/local/www/status_openvpn.php:335
+msgid "Connected Since"
+msgstr "以æ¥æŽ¥ç¶š"
+
+#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216
+#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157
+#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270
+#: usr/local/www/status_openvpn.php:318 usr/local/www/status_openvpn.php:158
+#: usr/local/www/status_openvpn.php:277 usr/local/www/status_openvpn.php:338
+#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:277
+#: usr/local/www/status_openvpn.php:338
+msgid "Bytes Sent"
+msgstr "é€ä¿¡ã•ã‚ŒãŸãƒã‚¤ãƒˆ"
+
+#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217
+#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158
+#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271
+#: usr/local/www/status_openvpn.php:319 usr/local/www/status_openvpn.php:159
+#: usr/local/www/status_openvpn.php:159
+msgid "Bytes Received"
+msgstr "å—ä¿¡ãƒã‚¤ãƒˆ"
+
+#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185
+#: usr/local/www/status_openvpn.php:186 usr/local/www/status_openvpn.php:186
+msgid "Kill client connection from"
+msgstr "ã‹ã‚‰ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæŽ¥ç¶šã‚’強制終了"
+
+#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208
+#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:266
+#: usr/local/www/status_openvpn.php:266
+msgid "Peer to Peer Server Instance Statistics"
+msgstr "サーãƒãƒ¼ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹çµ±è¨ˆï¼ˆãƒ”アツーピア)"
+
+#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265
+#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268
+#: usr/local/www/status_openvpn.php:316 usr/local/www/status_openvpn.php:275
+#: usr/local/www/status_openvpn.php:336 usr/local/www/status_openvpn.php:275
+#: usr/local/www/status_openvpn.php:336
+msgid "Virtual Addr"
+msgstr "仮想アドレス"
+
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266
+#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269
+#: usr/local/www/status_openvpn.php:317 usr/local/www/status_openvpn.php:276
+#: usr/local/www/status_openvpn.php:337 usr/local/www/status_openvpn.php:276
+#: usr/local/www/status_openvpn.php:337
+msgid "Remote Host"
+msgstr "リモートホスト"
+
+#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259
+#: usr/local/www/status_openvpn.php:307 usr/local/www/status_openvpn.php:327
+#: usr/local/www/status_openvpn.php:327
+msgid "Client Instance Statistics"
+msgstr "クライアントインスタンス統計"
+
+#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307
+#: usr/local/www/status_openvpn.php:355
+msgid ""
+"You need to bind each OpenVPN client to enable its management daemon: use "
+"'Local port' setting in the OpenVPN client screen"
+msgstr ""ã‚ãªãŸã¯ã€ãã®ç®¡ç†ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã€å„OpenVPNクライアントをãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚使用"OpenVPNクライアント画é¢ã§è¨­å®šã€Œãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã€ã‚’"
+
+#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311
+#: usr/local/www/status_openvpn.php:359 usr/local/www/status_openvpn.php:389
+#: usr/local/www/status_openvpn.php:389
+msgid "No OpenVPN instances defined"
+msgstr "定義ã•ã‚ŒãŸã®OpenVPNインスタンスã¾ã›ã‚“"
+
+#: usr/local/www/system_advanced_admin.php:87
+#: usr/local/www/system_advanced_admin.php:87
+msgid "You must specify a valid webConfigurator port number"
+msgstr "有効ãªwebConfiguratorãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:91
+#: usr/local/www/system_advanced_admin.php:91
+msgid "Max Processes must be a number 1 or greater"
+msgstr "最大プロセスã¯æ•°1以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/system_advanced_admin.php:97
+#: usr/local/www/system_advanced_admin.php:97
+#, php-format
+msgid "Alternate hostname %s is not a valid hostname."
+msgstr "代替ホストå%sã¯æœ‰åŠ¹ãªãƒ›ã‚¹ãƒˆåã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_admin.php:102
+#: usr/local/www/services_dnsmasq.php:92
+#: usr/local/www/system_advanced_admin.php:102
+#: usr/local/www/services_dnsmasq.php:92
+msgid "You must specify a valid port number"
+msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/system_advanced_admin.php:232
+#: usr/local/www/system_advanced_admin.php:232
+#, php-format
+msgid "One moment...redirecting to %s in 20 seconds."
+msgstr "一ã¤ã®çž¬é–“ãŒÂ·Â·Â· 20秒ã§%sã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:242
+#: usr/local/www/system_advanced_admin.php:242
+msgid "Advanced: Admin Access"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šç®¡ç†ã‚¢ã‚¯ã‚»ã‚¹"
+
+#: usr/local/www/system_advanced_admin.php:274
+#: usr/local/www/system_advanced_firewall.php:215
+#: usr/local/www/system_advanced_misc.php:206
+#: usr/local/www/system_advanced_network.php:182
+#: usr/local/www/system_advanced_notifications.php:151
+#: usr/local/www/system_advanced_sysctl.php:147
+#: usr/local/www/system_advanced_firewall.php:229
+#: usr/local/www/system_advanced_notifications.php:160
+#: usr/local/www/system_advanced_misc.php:232
+#: usr/local/www/system_advanced_misc.php:251
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_firewall.php:258
+#: usr/local/www/system_advanced_misc.php:302
+#: usr/local/www/system_advanced_admin.php:274
+#: usr/local/www/system_advanced_misc.php:302
+#: usr/local/www/system_advanced_firewall.php:258
+#: usr/local/www/system_advanced_notifications.php:160
+#: usr/local/www/system_advanced_network.php:182
+#: usr/local/www/system_advanced_sysctl.php:147
+msgid "Admin Access"
+msgstr "管ç†è€…ã®ã‚¢ã‚¯ã‚»ã‚¹"
+
+#: usr/local/www/system_advanced_admin.php:275
+#: usr/local/www/system_advanced_firewall.php:216
+#: usr/local/www/system_advanced_misc.php:207
+#: usr/local/www/system_advanced_network.php:183
+#: usr/local/www/system_advanced_notifications.php:152
+#: usr/local/www/system_advanced_sysctl.php:148
+#: usr/local/www/system_advanced_firewall.php:230
+#: usr/local/www/system_advanced_notifications.php:161
+#: usr/local/www/system_advanced_misc.php:233
+#: usr/local/www/system_advanced_misc.php:252
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_firewall.php:259
+#: usr/local/www/system_advanced_misc.php:303
+#: usr/local/www/system_advanced_admin.php:275
+#: usr/local/www/system_advanced_misc.php:303
+#: usr/local/www/system_advanced_firewall.php:259
+#: usr/local/www/system_advanced_notifications.php:161
+#: usr/local/www/system_advanced_network.php:183
+#: usr/local/www/system_advanced_sysctl.php:148
+msgid "Firewall / NAT"
+msgstr "ファイアウォール/ NAT"
+
+#: usr/local/www/system_advanced_admin.php:276
+#: usr/local/www/system_advanced_firewall.php:217
+#: usr/local/www/system_advanced_misc.php:208
+#: usr/local/www/system_advanced_network.php:184
+#: usr/local/www/system_advanced_notifications.php:153
+#: usr/local/www/system_advanced_sysctl.php:149
+#: usr/local/www/system_advanced_firewall.php:231
+#: usr/local/www/system_advanced_notifications.php:162
+#: usr/local/www/system_advanced_misc.php:234
+#: usr/local/www/system_advanced_misc.php:253
+#: usr/local/www/system_advanced_misc.php:257
+#: usr/local/www/system_advanced_firewall.php:260
+#: usr/local/www/system_advanced_misc.php:304
+#: usr/local/www/system_advanced_admin.php:276
+#: usr/local/www/system_advanced_misc.php:304
+#: usr/local/www/system_advanced_firewall.php:260
+#: usr/local/www/system_advanced_notifications.php:162
+#: usr/local/www/system_advanced_network.php:184
+#: usr/local/www/system_advanced_sysctl.php:149
+msgid "Networking"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
+
+#: usr/local/www/system_advanced_admin.php:277
+#: usr/local/www/system_advanced_firewall.php:218
+#: usr/local/www/system_advanced_misc.php:209
+#: usr/local/www/system_advanced_network.php:185
+#: usr/local/www/system_advanced_notifications.php:154
+#: usr/local/www/system_advanced_sysctl.php:150
+#: usr/local/www/system_advanced_firewall.php:232
+#: usr/local/www/system_advanced_notifications.php:163
+#: usr/local/www/system_advanced_misc.php:235
+#: usr/local/www/system_advanced_misc.php:254
+#: usr/local/www/system_advanced_misc.php:258
+#: usr/local/www/system_advanced_firewall.php:261
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_admin.php:277
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_firewall.php:261
+#: usr/local/www/system_advanced_notifications.php:163
+#: usr/local/www/system_advanced_network.php:185
+#: usr/local/www/system_advanced_sysctl.php:150
+msgid "Miscellaneous"
+msgstr "雑多"
+
+#: usr/local/www/system_advanced_admin.php:278
+#: usr/local/www/system_advanced_firewall.php:219
+#: usr/local/www/system_advanced_misc.php:210
+#: usr/local/www/system_advanced_network.php:186
+#: usr/local/www/system_advanced_notifications.php:155
+#: usr/local/www/system_advanced_sysctl.php:151
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_notifications.php:164
+#: usr/local/www/system_advanced_misc.php:236
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_misc.php:259
+#: usr/local/www/system_advanced_firewall.php:262
+#: usr/local/www/system_advanced_misc.php:306
+#: usr/local/www/system_advanced_admin.php:278
+#: usr/local/www/system_advanced_misc.php:306
+#: usr/local/www/system_advanced_firewall.php:262
+#: usr/local/www/system_advanced_notifications.php:164
+#: usr/local/www/system_advanced_network.php:186
+#: usr/local/www/system_advanced_sysctl.php:151
+msgid "System Tunables"
+msgstr "システムã®ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½ãƒ‘ラメータ"
+
+#: usr/local/www/system_advanced_admin.php:279
+#: usr/local/www/system_advanced_firewall.php:220
+#: usr/local/www/system_advanced_misc.php:211
+#: usr/local/www/system_advanced_network.php:187
+#: usr/local/www/system_advanced_notifications.php:156
+#: usr/local/www/system_advanced_sysctl.php:152
+#: usr/local/www/system_advanced_firewall.php:234
+#: usr/local/www/system_advanced_notifications.php:165
+#: usr/local/www/system_advanced_misc.php:237
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_misc.php:260
+#: usr/local/www/system_advanced_firewall.php:263
+#: usr/local/www/system_advanced_misc.php:307
+#: usr/local/www/system_advanced_admin.php:279
+#: usr/local/www/system_advanced_misc.php:307
+#: usr/local/www/system_advanced_firewall.php:263
+#: usr/local/www/system_advanced_notifications.php:165
+#: usr/local/www/system_advanced_network.php:187
+#: usr/local/www/system_advanced_sysctl.php:152
+msgid "Notifications"
+msgstr "ãŠçŸ¥ã‚‰ã›ãƒ¡ãƒ¼ãƒ«"
+
+#: usr/local/www/system_advanced_admin.php:297
+#: usr/local/www/system_advanced_admin.php:297
+msgid "webConfigurator"
+msgstr "webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:317
+#: usr/local/www/system_advanced_admin.php:317
+msgid "No Certificates have been defined. You must"
+msgstr "ãªã—証明書ã¯ã€å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。作業を行ã†å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/system_advanced_admin.php:318
+#: usr/local/www/system_advanced_admin.php:318
+msgid "Create or Import"
+msgstr "作æˆã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_admin.php:319
+#: usr/local/www/system_advanced_admin.php:319
+msgid "a Certificate before SSL can be enabled."
+msgstr "SSLå‰ã«è¨¼æ˜Žæ›¸ã‚’有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:324
+#: usr/local/www/services_captiveportal.php:872
+#: usr/local/www/services_captiveportal.php:874
+#: usr/local/www/services_captiveportal.php:890
+#: usr/local/www/system_advanced_admin.php:324
+#: usr/local/www/services_captiveportal.php:890
+msgid "SSL Certificate"
+msgstr "SSL証明書"
+
+#: usr/local/www/system_advanced_admin.php:339
+#: usr/local/www/system_advanced_admin.php:339
+msgid "TCP port"
+msgstr "TCPãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_admin.php:344
+#: usr/local/www/system_advanced_admin.php:344
+msgid ""
+"Enter a custom port number for the webConfigurator above if you want to "
+"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect "
+"immediately after save."
+msgstr "( 〠HTTPã«HTTPSã®443ã‚’80ã«ï¼‰ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’上書ã"ã‚ãªãŸãŒã—ãŸã„å ´åˆã¯ã€ä¸Šè¨˜ã®webConfigurator用ã®ã‚«ã‚¹ã‚¿ãƒ ãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã—ã¦ãã ã•ã„〠。変更ã¯å¾Œã«ä¿å­˜ã€ã™ãã«ã€Œæœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:351
+#: usr/local/www/system_advanced_admin.php:351
+msgid "Max Processes"
+msgstr "最大プロセス"
+
+#: usr/local/www/system_advanced_admin.php:356
+#: usr/local/www/system_advanced_admin.php:356
+msgid ""
+"Enter the number of webConfigurator processes you want to run. This defaults "
+"to 2. Increasing this will allow more users/browsers to access the GUI "
+"concurrently."
+msgstr "2ã«ã€Œã‚ãªãŸã¯ã“ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’実行ã—ãŸã„webConfiguratorプロセスã®æ•°ã‚’入力ã—ã¦ãã ã•ã„〠。ã“れを大ããã™ã‚‹ã¨ã€ã‚ˆã‚Šå¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼/ブラウザãŒåŒæ™‚ã«GUI ã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:363
+#: usr/local/www/system_advanced_admin.php:363
+msgid "WebGUI redirect"
+msgstr "WebGUIã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ"
+
+#: usr/local/www/system_advanced_admin.php:366
+#: usr/local/www/system_advanced_admin.php:366
+msgid "Disable webConfigurator redirect rule"
+msgstr "webConfiguratorã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:368
+#: usr/local/www/system_advanced_admin.php:368
+msgid ""
+"When this is unchecked, access to the webConfigurator is always permitted "
+"even on port 80, regardless of the listening port configured. Check this box "
+"to disable this automatically added redirect rule. "
+msgstr "設定ã«é–¢ä¿‚ãªãリスニングãƒãƒ¼ãƒˆã®ã€ã§ã‚‚ã€ãƒãƒ¼ãƒˆ80上ã§ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯å¸¸ã«è¨±å¯ã•ã‚Œã¦ã„る〠。ã“ã®è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚ŒãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã€ã‚’確èªã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:375
+#: usr/local/www/system_advanced_admin.php:375
+msgid "WebGUI Login Autocomplete"
+msgstr "WebGUIã®ãƒ­ã‚°ã‚¤ãƒ³ã‚ªãƒ¼ãƒˆã‚³ãƒ³ãƒ—リート"
+
+#: usr/local/www/system_advanced_admin.php:378
+#: usr/local/www/system_advanced_admin.php:378
+msgid "Disable webConfigurator login autocomplete"
+msgstr "webConfiguratorログインオートコンプリートを無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:380
+#: usr/local/www/system_advanced_admin.php:380
+msgid ""
+"When this is unchecked, login credentials for the webConfigurator may be "
+"saved by the browser. While convenient, some security standards require this "
+"to be disabled. Check this box to disable autocomplete on the login form so "
+"that browsers will not prompt to save credentials (NOTE: Some browsers do "
+"not respect this option). "
+msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã®ãƒ­ã‚°ã‚¤ãƒ³èªè¨¼æƒ…å ±ã¨ã™ã‚‹ã“ã¨ãŒã§ãる「ブラウザã«ã‚ˆã£ã¦ä¿å­˜ã•ã‚ŒãŸã€‚便利ãªä¸€æ–¹ã§ã€ã„ãã¤ã‹ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£æ¨™æº–ã¯ã€Œç„¡åŠ¹ã«ã™ã‚‹ãƒ­ã‚°ã‚¤ãƒ³ãƒ•ã‚©ãƒ¼ãƒ ã«è‡ªå‹•è£œå®Œã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã®ã§ã€ "ã“れを必è¦ã¨ã™ã‚‹ãƒ–ラウザãŒèªè¨¼æƒ…å ±ä¿å­˜ã™ã‚‹ã‚ˆã†æ±‚ã‚られãªã„ã“ã¨ï¼ˆæ³¨ï¼šä¸€éƒ¨ã®ãƒ–ラウザã§ã¯ã€ "ã“ã®ã‚ªãƒ—ションを尊é‡ã—ãªã„ã§ãã ã•ã„) ​​。"
+
+#: usr/local/www/system_advanced_admin.php:387
+#: usr/local/www/system_advanced_admin.php:387
+msgid "WebGUI login messages"
+msgstr "WebGUIã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+#: usr/local/www/system_advanced_admin.php:390
+#: usr/local/www/system_advanced_admin.php:390
+msgid "Disable logging of webConfigurator successful logins"
+msgstr "webConfiguratoræˆåŠŸã—ãŸãƒ­ã‚°ã‚¤ãƒ³ã®ãƒ­ã‚°ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:392
+#: usr/local/www/system_advanced_admin.php:392
+msgid ""
+"When this is checked, successful logins to the webConfigurator will not be "
+"logged."
+msgstr "「ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ webConfiguratorã«æˆåŠŸã—ãŸãƒ­ã‚°ã‚¤ãƒ³ãŒã§ãã¾ã›ã‚“ã€ãƒ­ã‚°ã‚¤ãƒ³ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:398
+#: usr/local/www/system_advanced_admin.php:398
+msgid "Anti-lockout"
+msgstr "アンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆ"
+
+#: usr/local/www/system_advanced_admin.php:407
+#: usr/local/www/system_advanced_admin.php:407
+msgid "Disable webConfigurator anti-lockout rule"
+msgstr "webConfiguratorアンãƒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆãƒ«ãƒ¼ãƒ«ã‚’無効ã«"
+
+#: usr/local/www/system_advanced_admin.php:409
+#: usr/local/www/system_advanced_admin.php:409
+#, php-format
+msgid ""
+"When this is unchecked, access to the webConfigurator on the %s interface is "
+"always permitted, regardless of the user-defined firewall rule set. Check "
+"this box to disable this automatically added rule, so access to the "
+"webConfigurator is controlled by the user-defined firewall rules (ensure you "
+"have a firewall rule in place that allows you in, or you will lock yourself "
+"out!)"
+msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ %sインターフェイス上webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã•ã‚Œã¦ã„ã‚‹ã€ã«é–¢ä¿‚ãªãã€å¸¸ã«è¨­å®šã•ã‚Œã€ãƒ¦ãƒ¼ã‚¶å®šç¾©ã®ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’ã€è¨±å¯ã—ãŸã€‚ãƒã‚§ãƒƒã‚¯ã€Œã“ã®æœ¬ãŒè‡ªå‹•çš„ã«è¿½åŠ ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹ãƒœãƒƒã‚¯ã‚¹ãªã®ã§ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’「 webConfiguratorã¯ï¼ˆã‚ãªãŸãŒ "ã‚ãªãŸã®ä¸­ã§å¯èƒ½ã«ã™ã‚‹å ´æ‰€ã«ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’æŒã£ã¦ã„ã‚‹ã€ã¾ãŸã¯ã‚ãªãŸè‡ªèº«ã‚’ロックã—ã¾ã™ã€ã‚’確èªã—外ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã«ã‚ˆã£ã¦åˆ¶å¾¡ã•ã‚Œã¾ã™ ï¼ ï¼‰"
+
+#: usr/local/www/system_advanced_admin.php:415
+#: usr/local/www/system_advanced_admin.php:415
+msgid ""
+"Hint: the &quot;Set interface(s) IP address&quot; option in the console menu "
+"resets this setting as well."
+msgstr "「ヒント: ã€ã‚’設定ã—ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ï¼ˆS )ã®IPアドレス「コンソールメニューã®ã‚ªãƒ—ションã¯ã€ "ã ã‘ã§ãªãã€ã“ã®è¨­å®šã‚’リセットã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:419
+#: usr/local/www/system_advanced_admin.php:419
+msgid "DNS Rebind Check"
+msgstr "DNSã®å†ãƒã‚¤ãƒ³ãƒ‰ã‚’確èª"
+
+#: usr/local/www/system_advanced_admin.php:422
+#: usr/local/www/system_advanced_admin.php:422
+msgid "Disable DNS Rebinding Checks"
+msgstr "DNSリãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒã‚§ãƒƒã‚¯ã‚’無効ã«"
+
+#: usr/local/www/system_advanced_admin.php:424
+#: usr/local/www/system_advanced_admin.php:424
+msgid ""
+"When this is unchecked, your system is protected against <a href="http://en."
+"wikipedia.org/wiki/DNS_rebinding">DNS Rebinding attacks</a>. This blocks "
+"private IP responses from your configured DNS servers. Check this box to "
+"disable this protection if it interferes with webConfigurator access or name "
+"resolution in your environment. "
+msgstr "「ã“れをオフã«ã™ã‚‹ã¨ã€ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ã€ã‚‚ã—〠href="http://en."wikipedia.org/wiki/DNS_rebinding"u003e DNSã®å†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒu003c / au003eã§ä¿è­·ã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ–ロックã¯ã€ãã‚ŒãŒã‚ãªãŸã®ç’°å¢ƒã§webConfiguratorアクセスã¾ãŸã¯åå‰ã€Œè§£åƒåº¦ã¨å¹²æ¸‰ã™ã‚‹å ´åˆã¯ã€ã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹"ã‚ãªãŸã®è¨­å®šã•ã‚ŒãŸDNSサーãƒã‹ã‚‰ãƒ—ライベートIP応答ãŒã€‚ã™ã‚‹ã«ã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/system_advanced_admin.php:431
+#: usr/local/www/system_advanced_admin.php:431
+msgid "Alternate Hostnames"
+msgstr "代替ホストå"
+
+#: usr/local/www/system_advanced_admin.php:435
+#: usr/local/www/system_advanced_admin.php:435
+msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"
+msgstr "DNSリãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã¨HTTP_REFERERãƒã‚§ãƒƒã‚¯ã®ãŸã‚ã®ä»£æ›¿ãƒ›ã‚¹ãƒˆå"
+
+#: usr/local/www/system_advanced_admin.php:437
+#: usr/local/www/system_advanced_admin.php:437
+msgid ""
+"Here you can specify alternate hostnames by which the router may be queried, "
+"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."
+msgstr "DNSã®å†ãƒã‚¤ãƒ³ãƒ‰æ”»æ’ƒãƒã‚§ãƒƒã‚¯ã‚’回é¿ã™ã‚‹ãŸã‚ã«"ã“ã“ã§ã¯ã€ãƒ«ãƒ¼ã‚¿ãŒç…§ä¼šã•ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œãªã„別ã®ãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。スペースã§åŒºåˆ‡ã‚Šã®ãƒ›ã‚¹ãƒˆå。"
+
+#: usr/local/www/system_advanced_admin.php:442
+#: usr/local/www/system_advanced_admin.php:442
+msgid "Browser HTTP_REFERER enforcement"
+msgstr "ブラウザã®HTTP_REFERERã®æ–½è¡Œ"
+
+#: usr/local/www/system_advanced_admin.php:445
+#: usr/local/www/system_advanced_admin.php:445
+msgid "Disable HTTP_REFERER enforcement check"
+msgstr "HTTP_REFERER執行ã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:447
+msgid ""
+"When this is unchecked, access to the webConfigurator is protected against "
+"HTTP_REFERER redirection attempts. Check this box to disable this protection "
+"if you find that it interferes with webConfigurator access in certain corner "
+"cases such as using external scripts to interact with this system. More "
+"information on HTTP_REFERER is available from <a target='_new' href='http://"
+"en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr "HTTP_REFERERリダイレクトã—よã†ã¨ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‹ã‚‰ä¿è­·ã•ã‚Œã¦ã„ã¾ã™ã€ 。ã“ã®ã‚ˆã†ãªã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¨å¯¾è©±ã™ã‚‹å¤–部スクリプトを使用ã™ã‚‹ãªã©ã®ã‚±ãƒ¼ã‚¹"ã‚ãªãŸã¯ãã‚ŒãŒç‰¹å®šã®éš…ã«webConfiguratorアクセスを妨害ã™ã‚‹ã“ã¨ã‚’発見ã—ãŸå ´åˆã€ã€Œã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚ HTTP_REFERERã®è©³ç´°ã€ã®æƒ…å ±ã¯ã€ u003ca target='_new' href='http://"en.wikipedia.org/wiki/HTTP_referrer'u003eウィキペディアu003c/ A u003eã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:457
+#: usr/local/www/system_advanced_admin.php:457
+msgid "Secure Shell"
+msgstr "セキュアシェル"
+
+#: usr/local/www/system_advanced_admin.php:460
+#: usr/local/www/system_advanced_admin.php:460
+msgid "Secure Shell Server"
+msgstr "セキュアシェルサーãƒãƒ¼"
+
+#: usr/local/www/system_advanced_admin.php:463
+#: usr/local/www/system_advanced_admin.php:463
+msgid "Enable Secure Shell"
+msgstr "セキュアシェルを有効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:467
+#: usr/local/www/system_advanced_admin.php:467
+msgid "Authentication Method"
+msgstr "èªè¨¼æ–¹æ³•"
+
+#: usr/local/www/system_advanced_admin.php:470
+msgid "Disable password login for Secure Shell (RSA key only)"
+msgstr "セキュアシェルã®ãƒ‘スワードログインを無効ã«ã™ã‚‹ï¼ˆ RSAéµã®ã¿ï¼‰"
+
+#: usr/local/www/system_advanced_admin.php:472
+#: usr/local/www/system_advanced_admin.php:472
+msgid "When enabled, authorized keys need to be configured for each"
+msgstr "有効ã«ã™ã‚‹ã¨ã€èªè¨¼æ¸ˆã¿ã®ã‚­ãƒ¼ã¯ã€ãã‚Œãžã‚Œã®ãŸã‚ã«è¨­å®šã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚‹"
+
+#: usr/local/www/system_advanced_admin.php:473
+#: usr/local/www/system_advanced_admin.php:473
+msgid "user"
+msgstr "ユーザー"
+
+#: usr/local/www/system_advanced_admin.php:474
+#: usr/local/www/system_advanced_admin.php:474
+msgid "that has been granted secure shell access."
+msgstr "ã¤ã¾ã‚Šã€ã‚»ã‚­ãƒ¥ã‚¢ã‚·ã‚§ãƒ«ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:478
+#: usr/local/www/system_advanced_admin.php:478
+msgid "SSH port"
+msgstr "SSHãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_admin.php:482
+#: usr/local/www/system_advanced_admin.php:482
+msgid "Note: Leave this blank for the default of 22."
+msgstr "注: 22ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:489
+#: usr/local/www/system_advanced_admin.php:489
+msgid "Serial Communcations"
+msgstr "シリアルCommuncations"
+
+#: usr/local/www/system_advanced_admin.php:493
+#: usr/local/www/system_advanced_admin.php:493
+msgid "Serial Terminal"
+msgstr "シリアル端末"
+
+#: usr/local/www/system_advanced_admin.php:496
+#: usr/local/www/system_advanced_admin.php:496
+msgid ""
+"Enables the first serial port with 9600/8/N/1 by default, or another speed "
+"selectable below."
+msgstr "以下ã®é¸æŠžå¯èƒ½ãªã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§9600/8/N/1ã§æœ€åˆã®ã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆã€ã¾ãŸã¯åˆ¥ã®é€Ÿåº¦ã‚’å¯èƒ½ã«ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_admin.php:497
+#: usr/local/www/system_advanced_admin.php:497
+msgid ""
+"Note: This will redirect the console output and messages to the serial "
+"port. You can still access the console menu from the internal video card/"
+"keyboard. A <b>null modem</b> serial cable or adapter is required to use the "
+"serial console."
+msgstr ""注:ã“ã‚Œã¯ã€ã‚·ãƒªã‚¢ãƒ«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å‡ºåŠ›ã‚„メッセージをリダイレクトã—ã¾ã™ã€ãƒãƒ¼ãƒˆã€‚ã‚ãªãŸã¯ã¾ã ã€å†…部ビデオカード/ã‹ã‚‰ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãる「キーボード。 A u003cBu003eヌルモデムu003c / B u003eシリアルケーブルやアダプタãŒä½¿ç”¨ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™"シリアルコンソールを。"
+
+#: usr/local/www/system_advanced_admin.php:502
+#: usr/local/www/system_advanced_admin.php:502
+msgid "Serial Speed"
+msgstr "シリアルãƒãƒ¼ãƒˆã®é€Ÿåº¦"
+
+#: usr/local/www/system_advanced_admin.php:512
+#: usr/local/www/system_advanced_admin.php:512
+msgid "Allows selection of different speeds for the serial console port."
+msgstr "シリアルコンソールãƒãƒ¼ãƒˆã€ç•°ãªã‚‹é€Ÿåº¦ã®é¸æŠžãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:519
+#: usr/local/www/system_advanced_admin.php:519
+msgid "Console Options"
+msgstr "コンソールオプション"
+
+#: usr/local/www/system_advanced_admin.php:522
+#: usr/local/www/system_advanced_admin.php:522
+msgid "Console menu"
+msgstr "[コンソール]メニュー"
+
+#: usr/local/www/system_advanced_admin.php:525
+#: usr/local/www/system_advanced_admin.php:525
+msgid "Password protect the console menu"
+msgstr "パスワードã¯ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’ä¿è­·"
+
+#: usr/local/www/system_advanced_admin.php:527
+#: usr/local/www/system_advanced_admin.php:527
+msgid "Changes to this option will take effect after a reboot."
+msgstr "ã“ã®ã‚ªãƒ—ションã¸ã®å¤‰æ›´ã¯ã€å†èµ·å‹•å¾Œã«æœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:564
+#: usr/local/www/system_advanced_admin.php:564
+msgid "secure shell configuration has changed. Stopping sshd."
+msgstr "セキュアシェルã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚ sshdã‚’åœæ­¢ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:567
+#: usr/local/www/system_advanced_admin.php:567
+msgid "secure shell configuration has changed. Restarting sshd."
+msgstr "セキュアシェルã®æ§‹æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚ sshdã‚’å†èµ·å‹•ã€‚"
+
+#: usr/local/www/system_advanced_admin.php:574
+#: usr/local/www/system_advanced_admin.php:574
+msgid "webConfigurator configuration has changed. Restarting webConfigurator."
+msgstr "webConfigurator構æˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚ webConfiguratorã‚’å†èµ·å‹•ã™ã‚‹ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:78
+#: usr/local/www/system_advanced_firewall.php:77
+#: usr/local/www/system_advanced_firewall.php:88
+#: usr/local/www/system_advanced_firewall.php:88
+msgid "The Firewall Maximum States value must be an integer."
+msgstr "ファイアウォールã®æœ€å¤§çŠ¶æ…‹ã®å€¤ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:81
+#: usr/local/www/system_advanced_firewall.php:83
+#: usr/local/www/system_advanced_firewall.php:94
+#: usr/local/www/system_advanced_firewall.php:94
+msgid "The Firewall Maximum Table Entries value must be an integer."
+msgstr "ファイアウォールã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルエントリã®å€¤ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:84
+#: usr/local/www/system_advanced_firewall.php:86
+#: usr/local/www/system_advanced_firewall.php:97
+#: usr/local/www/system_advanced_firewall.php:97
+msgid "The TCP idle timeout must be an integer."
+msgstr "TCPアイドルタイムアウトã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:87
+#: usr/local/www/system_advanced_firewall.php:89
+#: usr/local/www/system_advanced_firewall.php:100
+#: usr/local/www/system_advanced_firewall.php:100
+msgid "The Reflection timeout must be an integer."
+msgstr "リフレクションタイムアウトã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:178
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/system_advanced_firewall.php:221
+#: usr/local/www/system_advanced_firewall.php:221
+msgid "Advanced: Firewall and NAT"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã¨NAT"
+
+#: usr/local/www/system_advanced_firewall.php:190
+#: usr/local/www/system_advanced_firewall.php:204
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_firewall.php:233
+msgid "as the name says, it's the normal optimization algorithm"
+msgstr "åå‰ãŒè¨€ã†ã‚ˆã†ã«ã€ãã‚Œã¯é€šå¸¸ã®æœ€é©åŒ–アルゴリズムã§ã™"
+
+#: usr/local/www/system_advanced_firewall.php:191
+#: usr/local/www/system_advanced_firewall.php:205
+#: usr/local/www/system_advanced_firewall.php:234
+#: usr/local/www/system_advanced_firewall.php:234
+msgid ""
+"used for high latency links, such as satellite links. Expires idle "
+"connections later than default"
+msgstr "後ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆä»¥å¤–ã®æŽ¥ç¶šã€ã¨ã¯ã€è¡›æ˜Ÿãƒªãƒ³ã‚¯ãªã©ã®é«˜é…延リンクã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€‚アイドルã®Expires ã€"
+
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/system_advanced_firewall.php:206
+msgid ""
+"expires idle connections quicker. More efficient use of CPU and memory but "
+"can drop legitimate connections"
+msgstr "「迅速アイドル状態ã®æŽ¥ç¶šã‚’期é™åˆ‡ã‚Œã«ã—ã¾ã™ã€‚ CPUã¨ãƒ¡ãƒ¢ãƒªãŒã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ã«ä½¿ç”¨ã€ã¨ã¯ã€æ­£å½“ãªæŽ¥ç¶šã‚’ドロップã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/system_advanced_firewall.php:193
+#: usr/local/www/system_advanced_firewall.php:207
+msgid ""
+"tries to avoid dropping any legitimate connections at the expense of "
+"increased memory usage and CPU utilization."
+msgstr "メモリ使用é‡ã®å¢—加やCPU使用率ã€ã‚’犠牲ã«ã—ã¦æ­£å½“ãªæŽ¥ç¶šã‚’è½ã¨ã•ãªã„よã†ã«ã—よã†ã¨ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:239
+#: usr/local/www/system_advanced_firewall.php:253
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:281
+#: usr/local/www/system_advanced_firewall.php:281
+msgid "Firewall Advanced"
+msgstr "ファイアウォールアドãƒãƒ³ã‚¹"
+
+#: usr/local/www/system_advanced_firewall.php:242
+#: usr/local/www/system_advanced_firewall.php:256
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_firewall.php:284
+#: usr/local/www/system_advanced_firewall.php:284
+msgid "IP Do-Not-Fragment compatibility"
+msgstr "IPドゥ-NOT-フラグメントã®äº’æ›æ€§"
+
+#: usr/local/www/system_advanced_firewall.php:245
+#: usr/local/www/system_advanced_firewall.php:259
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_firewall.php:287
+msgid "Clear invalid DF bits instead of dropping the packets"
+msgstr "代ã‚ã‚Šã«ã€ãƒ‘ケットをドロップã™ã‚‹æ˜Žç¢ºãªç„¡åŠ¹ã®DFビット"
+
+#: usr/local/www/system_advanced_firewall.php:246
+#: usr/local/www/system_advanced_firewall.php:260
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:288
+msgid ""
+"This allows for communications with hosts that generate fragmented packets "
+"with the don't fragment (DF) bit set. Linux NFS is known to do this. This "
+"will cause the filter to not drop such packets but instead clear the don't "
+"fragment bit."
+msgstr "断片化ã—ãªã„( DF )ã§ã€Œã“ã‚Œã¯æ–­ç‰‡åŒ–ã•ã‚ŒãŸãƒ‘ケットを生æˆã—ãŸãƒ›ã‚¹ãƒˆã¨ã®é€šä¿¡ã‚’å¯èƒ½ã«ã—ã€ã€Œè¨­å®šãƒ“ット。 Linuxã®NFSã¯ã€ã“ã®æ“作を行ã†ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„る。ã“ã‚Œã¯ã€ "フィルタã¯ã€ã“ã®ã‚ˆã†ãªãƒ‘ケットをドロップã—ãªã„よã†ã«ãªã‚Šã¾ã™ãŒã€ä»£ã‚ã‚Šã«æ˜Žç¢ºãªã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã—ã¦ãŠã‚Šã¾ã›ã€Œãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãƒ“ット。"
+
+#: usr/local/www/system_advanced_firewall.php:253
+#: usr/local/www/system_advanced_firewall.php:267
+#: usr/local/www/system_advanced_firewall.php:296
+#: usr/local/www/system_advanced_firewall.php:295
+#: usr/local/www/system_advanced_firewall.php:295
+msgid "IP Random id generation"
+msgstr "IPランダムIDã®ç”Ÿæˆ"
+
+#: usr/local/www/system_advanced_firewall.php:256
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:298
+#: usr/local/www/system_advanced_firewall.php:298
+msgid ""
+"Insert a stronger id into IP header of packets passing through the filter."
+msgstr "「フィルターを通éŽã™ã‚‹ãƒ‘ケットã®IPヘッダã«å¼·ã„IDを挿入ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:257
+#: usr/local/www/system_advanced_firewall.php:271
+#: usr/local/www/system_advanced_firewall.php:300
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:299
+msgid ""
+"Replaces the IP identification field of packets with random values to "
+"compensate for operating systems that use predictable values. This option "
+"only applies to packets that are not fragmented after the optional packet "
+"reassembly."
+msgstr "予測å¯èƒ½ãªå€¤ã‚’使用ã™ã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’補ã†ã€ãŸã‚ã«ãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’æŒã¤ãƒ‘ケットã®IP識別フィールドを置ãæ›ãˆã€ 。ã“ã®ã‚ªãƒ—ションã¯ã€å†æ§‹ç¯‰ã€ ã€ã‚ªãƒ—ションã®ãƒ‘ケットã®å¾Œã«æ–­ç‰‡åŒ–ã•ã‚Œã¦ã„ãªã„パケットã«é©ç”¨ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:264
+#: usr/local/www/system_advanced_firewall.php:278
+#: usr/local/www/system_advanced_firewall.php:307
+#: usr/local/www/system_advanced_firewall.php:306
+#: usr/local/www/system_advanced_firewall.php:306
+msgid "Firewall Optimization Options"
+msgstr "ファイアウォール最é©åŒ–オプション"
+
+#: usr/local/www/system_advanced_firewall.php:267
+#: usr/local/www/system_advanced_firewall.php:281
+#: usr/local/www/system_advanced_firewall.php:310
+#: usr/local/www/system_advanced_firewall.php:309
+#: usr/local/www/system_advanced_firewall.php:309
+msgid "normal"
+msgstr "ノーマル"
+
+#: usr/local/www/system_advanced_firewall.php:268
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:310
+#: usr/local/www/system_advanced_firewall.php:310
+msgid "high-latency"
+msgstr "高レイテンシ"
+
+#: usr/local/www/system_advanced_firewall.php:269
+#: usr/local/www/system_advanced_firewall.php:283
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:311
+msgid "aggressive"
+msgstr "ç©æ¥µçš„ãª"
+
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_firewall.php:284
+#: usr/local/www/system_advanced_firewall.php:313
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:312
+msgid "conservative"
+msgstr "ä¿å®ˆçš„"
+
+#: usr/local/www/system_advanced_firewall.php:278
+#: usr/local/www/system_advanced_firewall.php:292
+#: usr/local/www/system_advanced_firewall.php:321
+#: usr/local/www/system_advanced_firewall.php:322
+#: usr/local/www/system_advanced_firewall.php:322
+msgid "Select the type of state table optimization to use"
+msgstr "使用ã™ã‚‹çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ルã®æœ€é©åŒ–ã®ç¨®é¡žã‚’é¸æŠžã—ã¾ã™"
+
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:296
+#: usr/local/www/system_advanced_firewall.php:325
+#: usr/local/www/system_advanced_firewall.php:326
+#: usr/local/www/system_advanced_firewall.php:326
+msgid "Disable Firewall"
+msgstr "ファイアウォールを無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:328
+#: usr/local/www/system_advanced_firewall.php:329
+#: usr/local/www/system_advanced_firewall.php:329
+msgid "Disable all packet filtering."
+msgstr "ã™ã¹ã¦ã®ãƒ‘ケットフィルタリングを無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_firewall.php:301
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:331
+#, php-format
+msgid "Note: This converts %s into a routing only platform!"
+msgstr "注æ„:ã“ã‚Œã¯ã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ã¿ã€ãƒ—ラットフォームã®ã«%sã«å¤‰æ›ï¼"
+
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:302
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:332
+msgid "Note: This will also turn off NAT!"
+msgstr "注æ„:ã“ã‚Œã¯ã¾ãŸã€NAT をオフã«ã—ã¾ã™ï¼"
+
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/system_advanced_firewall.php:333
+msgid "If you only want to disable NAT, and not firewall rules, visit the"
+msgstr "ã‚ãªãŸã ã‘ã®NATã¯ãªãã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã™ã‚‹å ´åˆã¯ã€è¨ªå•"
+
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/system_advanced_firewall.php:333
+msgid "Outbound NAT"
+msgstr "アウトãƒã‚¦ãƒ³ãƒ‰ã®NAT"
+
+#: usr/local/www/system_advanced_firewall.php:294
+#: usr/local/www/system_advanced_firewall.php:308
+#: usr/local/www/system_advanced_firewall.php:337
+#: usr/local/www/system_advanced_firewall.php:338
+#: usr/local/www/system_advanced_firewall.php:338
+msgid "Disable Firewall Scrub"
+msgstr "ファイアウォールスクラブを無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_firewall.php:297
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:340
+#: usr/local/www/system_advanced_firewall.php:341
+#: usr/local/www/system_advanced_firewall.php:341
+msgid ""
+"Disables the PF scrubbing option which can sometimes interfere with NFS and "
+"PPTP traffic."
+msgstr "PPTPトラフィックã€æ™‚ã«ã¯NFSã¨ã‚’妨害ã™ã‚‹å¯èƒ½æ€§ãŒPFスクラブオプションを無効ã«ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:302
+#: usr/local/www/system_advanced_firewall.php:316
+#: usr/local/www/system_advanced_firewall.php:360
+#: usr/local/www/system_advanced_firewall.php:361
+#: usr/local/www/system_advanced_firewall.php:361
+msgid "Firewall Maximum States"
+msgstr "ファイアウォールã®æœ€å¤§çŠ¶æ…‹"
+
+#: usr/local/www/system_advanced_firewall.php:306
+#: usr/local/www/system_advanced_firewall.php:320
+#: usr/local/www/system_advanced_firewall.php:364
+#: usr/local/www/system_advanced_firewall.php:365
+#: usr/local/www/system_advanced_firewall.php:365
+msgid "Maximum number of connections to hold in the firewall state table."
+msgstr "ファイアウォールã®çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ルã«ä¿æŒã™ã‚‹æŽ¥ç¶šã®æœ€å¤§æ•°ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:308
+#: usr/local/www/system_advanced_firewall.php:322
+#: usr/local/www/system_advanced_firewall.php:366
+#: usr/local/www/system_advanced_firewall.php:367
+#: usr/local/www/system_advanced_firewall.php:367
+msgid ""
+"Note: Leave this blank for the default. On your system the default size is:"
+msgstr ""注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã€ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚µã‚¤ã‚ºã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:342
+#: usr/local/www/system_advanced_firewall.php:386
+#: usr/local/www/system_advanced_firewall.php:387
+#: usr/local/www/system_advanced_firewall.php:387
+msgid "Firewall Maximum Table Entries"
+msgstr "ファイアウォールã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルエントリ"
+
+#: usr/local/www/system_advanced_firewall.php:316
+#: usr/local/www/system_advanced_firewall.php:346
+#: usr/local/www/system_advanced_firewall.php:390
+#: usr/local/www/system_advanced_firewall.php:391
+#: usr/local/www/system_advanced_firewall.php:391
+msgid ""
+"Maximum number of table entries for systems such as aliases, sshlockout, "
+"snort, etc, combined."
+msgstr "組ã¿åˆã‚ã›ãªã©Snortã®ã€ 「ã“ã®ã‚ˆã†ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ sshlockout ã€ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ç”¨ã®ãƒ†ãƒ¼ãƒ–ルエントリã®æœ€å¤§æ•°ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:319
+#: usr/local/www/system_advanced_firewall.php:334
+#: usr/local/www/system_advanced_firewall.php:349
+#: usr/local/www/system_advanced_firewall.php:378
+#: usr/local/www/system_advanced_firewall.php:393
+#: usr/local/www/system_advanced_firewall.php:379
+#: usr/local/www/system_advanced_firewall.php:394
+#: usr/local/www/system_advanced_firewall.php:379
+#: usr/local/www/system_advanced_firewall.php:394
+msgid "Note: Leave this blank for the default."
+msgstr "注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:321
+#: usr/local/www/system_advanced_firewall.php:336
+#: usr/local/www/system_advanced_firewall.php:351
+#: usr/local/www/system_advanced_firewall.php:380
+#: usr/local/www/system_advanced_firewall.php:395
+#: usr/local/www/system_advanced_firewall.php:381
+#: usr/local/www/system_advanced_firewall.php:396
+#: usr/local/www/system_advanced_firewall.php:381
+#: usr/local/www/system_advanced_firewall.php:396
+msgid "On your system the default size is:"
+msgstr "システムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚µã‚¤ã‚ºã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:327
+#: usr/local/www/system_advanced_firewall.php:357
+#: usr/local/www/system_advanced_firewall.php:401
+#: usr/local/www/system_advanced_firewall.php:402
+#: usr/local/www/system_advanced_firewall.php:402
+msgid "Static route filtering"
+msgstr "スタティックルートフィルタリング"
+
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:360
+#: usr/local/www/system_advanced_firewall.php:404
+#: usr/local/www/system_advanced_firewall.php:405
+#: usr/local/www/system_advanced_firewall.php:405
+msgid "Bypass firewall rules for traffic on the same interface"
+msgstr "åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®ãŸã‚ã®ãƒã‚¤ãƒ‘スファイアウォールルール"
+
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:362
+#: usr/local/www/system_advanced_firewall.php:406
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:407
+msgid ""
+"This option only applies if you have defined one or more static routes. If "
+"it is enabled, traffic that enters and leaves through the same interface "
+"will not be checked by the firewall. This may be desirable in some "
+"situations where multiple subnets are connected to the same interface."
+msgstr ""ã‚ãªãŸã¯1ã¤ä»¥ä¸Šã®é™çš„ルートを定義ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションã¯é©ç”¨ã•ã‚Œã¾ã™ã€‚å ´åˆã€ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ã€å…¥ã£ã¦ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’介ã—ã¦è‘‰ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒçŠ¶æ³è¤‡æ•°ã®ã‚µãƒ–ãƒãƒƒãƒˆã€Œãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¾ã›ã‚“。ã“ã‚Œã¯ã€ã„ãã¤ã‹ã®ä¸­ã§æœ›ã¾ã—ã„ã“ã¨ãŒã‚ã‚‹ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã«æŽ¥ç¶šã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/system_advanced_firewall.php:342
+#: usr/local/www/system_advanced_firewall.php:372
+#: usr/local/www/system_advanced_firewall.php:416
+#: usr/local/www/system_advanced_firewall.php:417
+#: usr/local/www/system_advanced_firewall.php:417
+msgid "Disable all auto-added VPN rules."
+msgstr "ã™ã¹ã¦ã®è‡ªå‹•è¿½åŠ ã®VPNルールを無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:344
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:418
+#: usr/local/www/system_advanced_firewall.php:419
+#: usr/local/www/system_advanced_firewall.php:419
+msgid "Note: This disables automatically added rules for IPsec, PPTP."
+msgstr "注:ã“ã‚Œã¯IPsecã®ã€ PPTPã®ãŸã‚ã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚ŒãŸãƒ«ãƒ¼ãƒ«ã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:352
+#: usr/local/www/system_advanced_firewall.php:382
+#: usr/local/www/system_advanced_firewall.php:426
+#: usr/local/www/system_advanced_firewall.php:427
+#: usr/local/www/system_advanced_firewall.php:427
+msgid "Disable reply-to on WAN rules"
+msgstr "WANã®ãƒ«ãƒ¼ãƒ«ã«è¿”ä¿¡ã™ã‚‹ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_firewall.php:354
+#: usr/local/www/system_advanced_firewall.php:384
+#: usr/local/www/system_advanced_firewall.php:428
+#: usr/local/www/system_advanced_firewall.php:429
+#: usr/local/www/system_advanced_firewall.php:429
+msgid ""
+"With Multi-WAN you generally want to ensure traffic leaves the same "
+"interface it arrives on, hence reply-to is added automatically by default. "
+"When using bridging, you must disable this behavior if the WAN gateway IP is "
+"different from the gateway IP of the hosts behind the bridged interface."
+msgstr "「マルãƒWANを使用ã™ã‚‹ã¨ã€ä¸€èˆ¬çš„ã«ã¯ã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®è‘‰ã‚’確èªã—ãŸã„ã€åŒã˜"ã€ãã‚ŒãŒåˆ°ç€ã—ãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚†ãˆè¿”ä¿¡å…ˆã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚ブリッジドインターフェイスã®èƒŒå¾Œã«ã‚るホストã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスã¨ã¯åˆ¥ã®ã€Œãƒ–リッジングを使用ã™ã‚‹å ´åˆã¯WANゲートウェイIPãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®å‹•ä½œã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:364
+#: usr/local/www/system_advanced_firewall.php:404
+#: usr/local/www/system_advanced_firewall.php:466
+#: usr/local/www/system_advanced_firewall.php:467
+#: usr/local/www/system_advanced_firewall.php:467
+msgid "Network Address Translation"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹å¤‰æ›"
+
+#: usr/local/www/system_advanced_firewall.php:367
+msgid "Disable NAT Reflection for port forwards"
+msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ãŸã‚ã®NATリフレクションをディセーブル"
+
+#: usr/local/www/system_advanced_firewall.php:370
+msgid ""
+"Disables the automatic creation of additional NAT redirect rules for access "
+"to port forwards on your external IP addresses from within your internal "
+"networks. Note: Reflection for port forward entries is skipped for ranges "
+"larger than 500 ports."
+msgstr "内部内ã‹ã‚‰å¤–部IPアドレス上ã®ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ã€ã®ã‚¢ã‚¯ã‚»ã‚¹ã®ãŸã‚ã®è¦å‰‡ã‚’リダイレクトã®è¿½åŠ ã®NATã®è‡ªå‹•ä½œæˆã‚’無効ã«ã—ã¾ã™""ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ã‚¨ãƒ³ãƒˆãƒªã®åå°„ã¯ç¯„囲ã«ã¤ã„ã¦ã¯ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œã€ã€Œã‚ˆã‚Šå¤§ãã500ãƒãƒ¼ãƒˆã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:425
+#: usr/local/www/system_advanced_firewall.php:487
+#: usr/local/www/system_advanced_firewall.php:488
+#: usr/local/www/system_advanced_firewall.php:488
+msgid "Reflection Timeout"
+msgstr "å射タイムアウト"
+
+#: usr/local/www/system_advanced_firewall.php:377
+msgid ""
+"Enter value for Reflection timeout in seconds. Note: Only applies to "
+"Reflection on port forwards."
+msgstr "「秒ã«ãŠã‘ã‚‹å射タイムアウトã®å€¤ã‚’入力ã—ã¾ã™ï¼ˆæ³¨ï¼‰ 。ã«ã®ã¿é©ç”¨ã•ã‚Œã€ã€Œãƒãƒ¼ãƒˆã«è»¢é€ä¸Šã®ãƒªãƒ•ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:381
+msgid "Disable NAT Reflection for 1:1 NAT"
+msgstr "1時01分ã€NATã®NATリフレクションをディセーブル"
+
+#: usr/local/www/system_advanced_firewall.php:384
+msgid ""
+"Disables the automatic creation of additional NAT 1:1 mappings for access to "
+"1:1 mappings of your external IP addresses from within your internal "
+"networks. Note: Reflection for 1:1 NAT might not fully work in certain "
+"complex routing scenarios."
+msgstr "内部内ã‹ã‚‰å¤–部IPアドレスã®1:1ã®ãƒžãƒƒãƒ”ングã€ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ä»–ã®NAT 1時01分ã®ãƒžãƒƒãƒ”ングを自動的ã«ä½œæˆç„¡åŠ¹ã«ã€ :複雑ãªãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ã‚·ãƒŠãƒªã‚ªã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æ³¨æ„ã—ã¦ãã ã•ã„。 1時01 NATã®ãƒªãƒ•ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå®Œå…¨ã«ç‰¹å®šã®ã§ã¯å‹•ä½œã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:391
+#: usr/local/www/system_advanced_firewall.php:448
+#: usr/local/www/system_advanced_firewall.php:510
+#: usr/local/www/system_advanced_firewall.php:511
+#: usr/local/www/system_advanced_firewall.php:511
+msgid ""
+"Automatically create outbound NAT rules which assist inbound NAT rules that "
+"direct traffic back out to the same subnet it originated from."
+msgstr "直接的ãªãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒåŒã˜ã‚µãƒ–ãƒãƒƒãƒˆã«å¤–ã«ãã‚ŒãŒç”±æ¥ã™ã‚‹ã€Œè‡ªå‹•çš„ã«ç€ä¿¡NATルールを支æ´ã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰NATルールを作æˆã™ã‚‹ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:393
+msgid ""
+"Currently only applies to 1:1 NAT rules. Required for full functionality of "
+"NAT Reflection for 1:1 NAT."
+msgstr "「ç¾åœ¨ã¯ã€ 1時01 NATルールã«é©ç”¨ã•ã‚Œã¾ã™ã€‚ã®ã™ã¹ã¦ã®æ©Ÿèƒ½ã«å¿…è¦ãªã€Œ1:1 NATã®NATリフレクション。"
+
+#: usr/local/www/system_advanced_firewall.php:397
+#: usr/local/www/system_advanced_firewall.php:456
+#: usr/local/www/system_advanced_firewall.php:518
+#: usr/local/www/system_advanced_firewall.php:519
+#: usr/local/www/system_advanced_firewall.php:519
+msgid "TFTP Proxy"
+msgstr "TFTPプロキシ"
+
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:466
+#: usr/local/www/system_advanced_firewall.php:528
+#: usr/local/www/system_advanced_firewall.php:529
+#: usr/local/www/system_advanced_firewall.php:529
+msgid "Choose the interfaces where you want TFTP proxy helper to be enabled."
+msgstr "ã‚ãªãŸã¯ã€TFTPプロキシヘルパーを有効ã«ã—ãŸã„インターフェースをé¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:179
+#: usr/local/www/system_advanced_misc.php:199
+#: usr/local/www/system_advanced_misc.php:218
+#: usr/local/www/system_advanced_misc.php:222
+#: usr/local/www/system_advanced_misc.php:254
+#: usr/local/www/system_advanced_misc.php:254
+msgid "Advanced: Miscellaneous"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãã®ä»–"
+
+#: usr/local/www/system_advanced_misc.php:229
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_misc.php:274
+#: usr/local/www/system_advanced_misc.php:278
+#: usr/local/www/system_advanced_misc.php:325
+#: usr/local/www/system_advanced_misc.php:325
+msgid "Proxy support"
+msgstr "プロキシã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_misc.php:232
+#: usr/local/www/system_advanced_misc.php:258
+#: usr/local/www/system_advanced_misc.php:277
+#: usr/local/www/system_advanced_misc.php:281
+#: usr/local/www/system_advanced_misc.php:328
+#: usr/local/www/system_advanced_misc.php:328
+msgid "Proxy URL"
+msgstr "プロキシã®URL"
+
+#: usr/local/www/system_advanced_misc.php:236
+#: usr/local/www/system_advanced_misc.php:262
+#: usr/local/www/system_advanced_misc.php:281
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:332
+#, php-format
+msgid "Proxy url for allowing %s to use this proxy to connect outside."
+msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシURL 。"
+
+#: usr/local/www/system_advanced_misc.php:240
+#: usr/local/www/system_advanced_misc.php:266
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:336
+msgid "Proxy Port"
+msgstr "プロキシãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_misc.php:244
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:340
+#, php-format
+msgid ""
+"Proxy port to use when %s connects to the proxy URL configured above. "
+"Default is 8080 for http protocol or 443 for ssl."
+msgstr "デフォルト "%sプロキシURLã«ä¸Šè¨˜ã®ã‚ˆã†ã«æ§‹æˆã•ã‚Œã¦ã„ã¾ã™ã€‚接続ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ãƒ—ロキシãƒãƒ¼ãƒˆã¯ã€ 「SSLã®HTTPプロトコルã¾ãŸã¯443ã®ãŸã‚ã«8080ã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:248
+#: usr/local/www/system_advanced_misc.php:274
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:344
+#: usr/local/www/system_advanced_misc.php:344
+msgid "Proxy Username"
+msgstr "[プロキシユーザーå"
+
+#: usr/local/www/system_advanced_misc.php:252
+#: usr/local/www/system_advanced_misc.php:278
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:301
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:348
+#, php-format
+msgid "Proxy username for allowing %s to use this proxy to connect outside"
+msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å"
+
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_misc.php:282
+#: usr/local/www/system_advanced_misc.php:301
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_misc.php:352
+#: usr/local/www/system_advanced_misc.php:352
+msgid "Proxy Pass"
+msgstr "プロキシパス"
+
+#: usr/local/www/system_advanced_misc.php:260
+#: usr/local/www/system_advanced_misc.php:286
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_misc.php:309
+#: usr/local/www/system_advanced_misc.php:356
+#: usr/local/www/system_advanced_misc.php:356
+#, php-format
+msgid "Proxy password for allowing %s to use this proxy to connect outside"
+msgstr "%s外接続ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ—ロキシを使用ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ—ロキシパスワード"
+
+#: usr/local/www/system_advanced_misc.php:264
+#: usr/local/www/system_advanced_misc.php:267
+#: usr/local/www/system_advanced_misc.php:282
+#: usr/local/www/system_advanced_misc.php:290
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:314
+#: usr/local/www/system_advanced_misc.php:309
+#: usr/local/www/system_advanced_misc.php:312
+#: usr/local/www/system_advanced_misc.php:333
+#: usr/local/www/system_advanced_misc.php:313
+#: usr/local/www/system_advanced_misc.php:316
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:360
+#: usr/local/www/system_advanced_misc.php:363
+#: usr/local/www/system_advanced_misc.php:384
+#: usr/local/www/system_advanced_misc.php:360
+#: usr/local/www/system_advanced_misc.php:363
+#: usr/local/www/system_advanced_misc.php:384
+msgid "Load Balancing"
+msgstr "ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°"
+
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_misc.php:296
+#: usr/local/www/system_advanced_misc.php:315
+#: usr/local/www/system_advanced_misc.php:319
+#: usr/local/www/system_advanced_misc.php:366
+#: usr/local/www/system_advanced_misc.php:366
+msgid "Use sticky connections"
+msgstr "スティッキー接続を使用"
+
+#: usr/local/www/system_advanced_misc.php:271
+msgid ""
+"Successive connections will be redirected to the servers in a round-robin "
+"manner with connections from the same source being sent to the same web "
+"server. This 'sticky connection' will exist as long as there are states that "
+"refer to this connection. Once the states expire, so will the sticky "
+"connection. Further connections from that host will be redirected to the "
+"next web server in the round robin."
+msgstr "åŒã˜Webã«é€ä¿¡ã•ã‚Œã€åŒã˜é€ä¿¡å…ƒã‹ã‚‰ã®æŽ¥ç¶šã‚’æŒã¤æ–¹æ³•ã€Œé€£ç¶šæŽ¥ç¶šã¯ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®ã‚µãƒ¼ãƒã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã€ã€Œã“ã®æŽ¥ç¶šã‚’å‚ç…§ã—ã¦ã€ã€Œã‚µãƒ¼ãƒã€‚ã“ã®ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼æŽ¥ç¶šã¯ã€ 「é™ã‚Šã¨ã„ã†çŠ¶æ…‹ãŒã‚るよã†ã«å­˜åœ¨ã™ã‚‹ã“ã¨ã«ãªã‚‹ã€ 。状態ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãã®ã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®æ¬¡ã®Webサーãƒã€æŽ¥ç¶šã€‚ãã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã•ã‚‰ãªã‚‹æŽ¥ç¶šã¯ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¾ã™ã€ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:317
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:387
+#: usr/local/www/system_advanced_misc.php:387
+msgid "Allow default gateway switching"
+msgstr "デフォルトゲートウェイã®åˆ‡ã‚Šæ›¿ãˆã‚’許å¯ã™ã‚‹"
+
+#: usr/local/www/system_advanced_misc.php:286
+#: usr/local/www/system_advanced_misc.php:318
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:341
+#: usr/local/www/system_advanced_misc.php:388
+#: usr/local/www/system_advanced_misc.php:388
+msgid ""
+"If the link where the default gateway resides fails switch the default "
+"gateway to another available one."
+msgstr "別ã®åˆ©ç”¨å¯èƒ½ãª1ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒå­˜åœ¨ã™ã‚‹ãƒªãƒ³ã‚¯ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’切り替ãˆã‚‹ã«å¤±æ•—ã—ãŸå ´åˆã€ 。"
+
+#: usr/local/www/system_advanced_misc.php:294
+#: usr/local/www/system_advanced_misc.php:326
+#: usr/local/www/system_advanced_misc.php:345
+#: usr/local/www/system_advanced_misc.php:349
+#: usr/local/www/system_advanced_misc.php:396
+#: usr/local/www/system_advanced_misc.php:396
+msgid "Power savings"
+msgstr "電力ã®ç¯€ç´„"
+
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:329
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:352
+#: usr/local/www/system_advanced_misc.php:399
+#: usr/local/www/system_advanced_misc.php:399
+msgid "PowerD"
+msgstr "パワード"
+
+#: usr/local/www/system_advanced_misc.php:300
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:351
+#: usr/local/www/system_advanced_misc.php:355
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:402
+msgid "Use PowerD"
+msgstr "パワードを使ã†"
+
+#: usr/local/www/system_advanced_misc.php:302
+msgid ""
+"The powerd utility monitors the system state and sets various power control "
+"options accordingly. It offers three modes (maximum, minimum, and adaptive) "
+"that can be individually selected while on AC power or batteries. The modes "
+"maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum "
+"mode chooses the highest performance values. Minimum mode selects the "
+"lowest performance values to get the most power savings. Adaptive mode "
+"attempts to strike a balance by degrading performance when the system "
+"appears idle and increasing it when the system is busy. It offers a good "
+"balance between a small performance loss for greatly "
+msgstr "「パワードユーティリティã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®çŠ¶æ…‹ã‚’監視ã—ã€æ§˜ã€…ãªé›»åŠ›åˆ¶å¾¡ã«è¨­å®šã€ã¯ã€ãã‚Œã«å¿œã˜ã¦ã‚ªãƒ—ションを。ãã‚Œã¯ä¸‰ã¤ã®ãƒ¢ãƒ¼ãƒ‰ï¼ˆæœ€å¤§å€¤ã€æœ€å°å€¤ã€ãŠã‚ˆã³é©å¿œï¼‰æä¾›ã—ã¦ã„ã¾ã™ã€å€‹åˆ¥ã®ACé›»æºã¾ãŸã¯é›»æ± ã§ã„ã‚‹é–“ã«é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚モード〠ã€æœ€å¤§å€¤ã€æœ€å°å€¤ã€ãŠã‚ˆã³é©å¿œãŒæœ€å¤§ã€æœ€å°ã€ ADPã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãる。最大ã€ãƒ¢ãƒ¼ãƒ‰ã¯ã€æœ€é«˜ã®ãƒ‘フォーマンス値をé¸æŠžã—ã¾ã™ã€‚最å°ãƒ¢ãƒ¼ãƒ‰ãŒé¸æŠžã•ã‚Œã€ã€Œæœ€ã‚‚節電効果を得るãŸã‚ã«ã€æœ€ã‚‚低ã„パフォーマンス値を。é©å¿œãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚¢ã‚¤ãƒ‰ãƒ«è¡¨ç¤ºã•ã‚Œã€ã‚·ã‚¹ãƒ†ãƒ ãŒãƒ“ジー状態ã®ã¨ãã«ãれを増やã™ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã¨ãã®ãƒ‘フォーマンスを低下ã•ã›ã‚‹ã“ã¨ã§ãƒãƒ©ãƒ³ã‚¹ã‚’å–ã‚‹ã—よã†ã¨ã—ã¾ã™ã€ 。ãã‚ŒãŒå¤§å¹…用ã®å°ã•ãªãƒ‘フォーマンスã®ä½Žä¸‹ã¨ã®é–“ã«è‰¯å¥½ãªã€Œãƒãƒ©ãƒ³ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™"
+
+#: usr/local/www/system_advanced_misc.php:318
+#: usr/local/www/system_advanced_misc.php:361
+msgid "glxsb Crypto Acceleration"
+msgstr "glxsbæš—å·åŒ–アクセラレーション"
+
+#: usr/local/www/system_advanced_misc.php:321
+#: usr/local/www/system_advanced_misc.php:364
+msgid "glxsb"
+msgstr "glxsb"
+
+#: usr/local/www/system_advanced_misc.php:324
+#: usr/local/www/system_advanced_misc.php:367
+msgid "Use glxsb"
+msgstr "glxsbを使ã†"
+
+#: usr/local/www/system_advanced_misc.php:326
+#: usr/local/www/system_advanced_misc.php:369
+msgid ""
+"The AMD Geode LX Security Block will accelerate some cryptographic functions "
+"on systems which have the chip. Do not enable this option if you have a Hifn "
+"cryptographic acceleration card, as this will take precedence and the Hifn "
+"card will not be used. Acceleration should be automatic for IPsec when using "
+"Rijndael (AES). OpenVPN should be set for AES-128-CBC."
+msgstr "ãƒãƒƒãƒ—ã‚’æŒã¤ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€ŒAMDã®Geode LXセキュリティブロックã¯ã€ã„ãã¤ã‹ã®æš—å·æ©Ÿèƒ½ã‚’加速ã—ã¦ã„ãã¾ã™ã€ 。ã‚ãªãŸã¯Hifnã®ã‚ã‚‹å ´åˆã¯ã€ã€Œæš—å·åŒ–アクセラレータカードをã€ã“ã‚ŒãŒå„ªå…ˆã•ã‚Œã¾ã™ã—〠Hifnã®ã‚ˆã†ã«ã€ 「カードãŒä½¿ç”¨ã•ã‚Œãªã„å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを有効ã«ã—ãªã„ã§ãã ã•ã„。 「ラインダール( AES)を使用ã—ãŸå ´åˆã€åŠ é€ŸãŒIPsecã®è‡ªå‹•ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ OpenVPNã®ã¯ã€AES - 128 -CBCã®ãŸã‚ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:375
+msgid ""
+"If you do not have a glxsb chip in your system, this option will have no "
+"effect. To unload the module, uncheck this option and then reboot."
+msgstr "効果ã€ã‚’使用ã—ã¦ã„るシステムã§glxsbãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã‚ã‚Šã¾ã™ã€ 。モジュールをアンロードã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ã¦ã‹ã‚‰å†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:432
+#: usr/local/www/system_advanced_misc.php:444
+#: usr/local/www/system_advanced_misc.php:491
+#: usr/local/www/system_advanced_misc.php:491
+msgid "IP Security"
+msgstr "IPセキュリティ"
+
+#: usr/local/www/system_advanced_misc.php:343
+#: usr/local/www/system_advanced_misc.php:386
+#: usr/local/www/system_advanced_misc.php:435
+#: usr/local/www/system_advanced_misc.php:447
+#: usr/local/www/system_advanced_misc.php:494
+#: usr/local/www/system_advanced_misc.php:494
+msgid "Security Associations"
+msgstr "セキュリティアソシエーション"
+
+#: usr/local/www/system_advanced_misc.php:346
+#: usr/local/www/system_advanced_misc.php:389
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/system_advanced_misc.php:450
+#: usr/local/www/system_advanced_misc.php:497
+#: usr/local/www/system_advanced_misc.php:497
+msgid "Prefer older IPsec SAs"
+msgstr "å¤ã„IPsec SAã®ã‚’好む"
+
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:391
+#: usr/local/www/system_advanced_misc.php:440
+#: usr/local/www/system_advanced_misc.php:452
+#: usr/local/www/system_advanced_misc.php:499
+#: usr/local/www/system_advanced_misc.php:499
+msgid ""
+"By default, if several SAs match, the newest one is preferred if it's at "
+"least 30 seconds old. Select this option to always prefer old SAs over new "
+"ones."
+msgstr "30秒以上å¤ã„ "ãã‚Œã¯ATã®å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ã€ã„ãã¤ã‹ã®SAãŒä¸€è‡´ã™ã‚‹å ´åˆã€æœ€æ–°ã®1ãŒå¥½ã¾ã—ã„〠。常ã«æ–°ã—ã„「もã®ã‚ˆã‚Šå¤ã„SAを好む場åˆã¯ã€ã“ã®ã‚ªãƒ—ションをé¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:354
+#: usr/local/www/system_advanced_misc.php:397
+#: usr/local/www/system_advanced_misc.php:446
+#: usr/local/www/system_advanced_misc.php:458
+#: usr/local/www/system_advanced_misc.php:505
+#: usr/local/www/system_advanced_misc.php:505
+msgid "IPsec Debug"
+msgstr "IPsecã®ãƒ‡ãƒãƒƒã‚°"
+
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:449
+#: usr/local/www/system_advanced_misc.php:461
+#: usr/local/www/system_advanced_misc.php:508
+#: usr/local/www/system_advanced_misc.php:508
+msgid "Start racoon in debug mode"
+msgstr "デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã§ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:359
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:451
+#: usr/local/www/system_advanced_misc.php:463
+#: usr/local/www/system_advanced_misc.php:510
+#: usr/local/www/system_advanced_misc.php:510
+msgid ""
+"Launches racoon in debug mode so that more verbose logs will be generated to "
+"aid in troubleshooting."
+msgstr "トラブルシューティングを支æ´"より冗長ãªãƒ­ã‚°ãŒç”Ÿæˆã•ã‚ŒãŸã•ã‚Œã‚‹ã‚ˆã†ã«ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã§ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’èµ·å‹•ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:453
+#: usr/local/www/system_advanced_misc.php:465
+#: usr/local/www/system_advanced_misc.php:512
+#: usr/local/www/system_advanced_misc.php:512
+msgid "NOTE: Changing this setting will restart racoon."
+msgstr "注:ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ã€ã‚¢ãƒ©ã‚¤ã‚°ãƒžã‚’å†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:365
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:457
+#: usr/local/www/system_advanced_misc.php:469
+#: usr/local/www/system_advanced_misc.php:516
+#: usr/local/www/system_advanced_misc.php:516
+msgid "Maximum MSS"
+msgstr "最大MSS"
+
+#: usr/local/www/system_advanced_misc.php:368
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:460
+#: usr/local/www/system_advanced_misc.php:472
+#: usr/local/www/system_advanced_misc.php:519
+#: usr/local/www/system_advanced_misc.php:519
+msgid "Enable MSS clamping on VPN traffic"
+msgstr "MSSã¯ã€VPNトラフィックã«ã‚¯ãƒ©ãƒ³ãƒ—å¯èƒ½ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_misc.php:372
+#: usr/local/www/system_advanced_misc.php:415
+#: usr/local/www/system_advanced_misc.php:464
+#: usr/local/www/system_advanced_misc.php:476
+#: usr/local/www/system_advanced_misc.php:523
+#: usr/local/www/system_advanced_misc.php:523
+msgid ""
+"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with "
+"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "
+msgstr "IPsec VPNã®ãƒªãƒ³ã‚¯ä¸Šã§PMTUD 「VPN上をæµã‚Œã‚‹TCP上ã§ã‚¯ãƒ©ãƒ³ãƒ—ã™ã‚‹MSSを有効ã«ã—ã¾ã™ã€‚ã“ã‚Œã¯ã®å•é¡Œã‚’å…‹æœã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€ 。空白ã®å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯1400ãƒã‚¤ãƒˆã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:475
+#: usr/local/www/system_advanced_misc.php:487
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/system_advanced_misc.php:534
+msgid "Schedule States"
+msgstr "スケジュール状態"
+
+#: usr/local/www/system_advanced_misc.php:387
+#: usr/local/www/system_advanced_misc.php:430
+#: usr/local/www/system_advanced_misc.php:479
+#: usr/local/www/system_advanced_misc.php:491
+#: usr/local/www/system_advanced_misc.php:538
+#: usr/local/www/system_advanced_misc.php:538
+msgid ""
+"By default schedules clear the states of existing connections when the "
+"expiration time has come. This option overrides that behavior by not "
+"clearing states for existing connections."
+msgstr "有効期é™ãŒåˆ°æ¥ã—ãŸã€ã¨ãã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯æ—¢å­˜ã®æŽ¥ç¶šã®çŠ¶æ…‹ã‚’オフã«ã—ã¾ã™ã€ 。ã“ã®ã‚ªãƒ—ションã§ã¯ã€ 「既存ã®æŽ¥ç¶šã®ãŸã‚ã®çŠ¶æ…‹ã‚’クリアã—ã¦ã„ãªã„ã“ã¨ã§ã€ãã®å‹•ä½œã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:395
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/system_advanced_misc.php:487
+#: usr/local/www/system_advanced_misc.php:499
+#: usr/local/www/system_advanced_misc.php:546
+#: usr/local/www/system_advanced_misc.php:546
+msgid "Gateway Monitoring"
+msgstr "ゲートウェイã®ç›£è¦–"
+
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:445
+#: usr/local/www/system_advanced_misc.php:494
+#: usr/local/www/system_advanced_misc.php:506
+#: usr/local/www/system_advanced_misc.php:553
+#: usr/local/www/system_advanced_misc.php:553
+msgid ""
+"By default the monitoring process will flush states for a gateway that goes "
+"down. This option overrides that behavior by not clearing states for "
+"existing connections."
+msgstr "ダウン "デフォルトã§ã¯ã€ç›£è¦–プロセスãŒè¡Œãゲートウェイã®çŠ¶æ…‹ã‚’フラッシュã—ã¾ã™ã€ 。ã“ã®ã‚ªãƒ—ションã§ã¯ã€æ—¢å­˜ã®æŽ¥ç¶šã€ã®çŠ¶æ…‹ã‚’クリアã—ã¦ã„ãªã„ã“ã¨ã«ã‚ˆã£ã¦ã€ãã®å‹•ä½œã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:454
+#: usr/local/www/system_advanced_misc.php:503
+#: usr/local/www/system_advanced_misc.php:515
+#: usr/local/www/system_advanced_misc.php:636
+#: usr/local/www/system_advanced_misc.php:636
+msgid "Hardware Settings"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨­å®š"
+
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:457
+#: usr/local/www/system_advanced_misc.php:506
+#: usr/local/www/system_advanced_misc.php:518
+#: usr/local/www/system_advanced_misc.php:639
+#: usr/local/www/system_advanced_misc.php:639
+msgid "Hard disk standby time "
+msgstr "ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯å¾…機時間"
+
+#: usr/local/www/system_advanced_misc.php:421
+#: usr/local/www/system_advanced_misc.php:464
+#: usr/local/www/system_advanced_misc.php:513
+#: usr/local/www/system_advanced_misc.php:525
+#: usr/local/www/system_advanced_misc.php:646
+#: usr/local/www/system_advanced_misc.php:646
+msgid "Always on"
+msgstr "常ã«ã‚ªãƒ³"
+
+#: usr/local/www/system_advanced_misc.php:430
+#: usr/local/www/system_advanced_misc.php:473
+#: usr/local/www/system_advanced_misc.php:522
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/system_advanced_misc.php:655
+#: usr/local/www/system_advanced_misc.php:655
+msgid ""
+"Puts the hard disk into standby mode when the selected amount of time after "
+"the last access has elapsed."
+msgstr "最終アクセス経éŽã—ãŸã€å¾Œã®æ™‚é–“ã®é¸æŠžã•ã‚ŒãŸé‡ã¯ã€ã‚¹ã‚¿ãƒ³ãƒã‚¤ãƒ¢ãƒ¼ãƒ‰ã«ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã‚’ç½®ãã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_misc.php:431
+#: usr/local/www/system_advanced_misc.php:474
+#: usr/local/www/system_advanced_misc.php:523
+#: usr/local/www/system_advanced_misc.php:535
+#: usr/local/www/system_advanced_misc.php:656
+#: usr/local/www/system_advanced_misc.php:656
+msgid "Do not set this for CF cards."
+msgstr "CFカードã®ãŸã‚ã«ã“れを設定ã—ãªã„ã§ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_network.php:68
+#: usr/local/www/system_advanced_network.php:68
+msgid "You must specify an IP address to NAT IPv6 packets."
+msgstr "ã‚ãªãŸã¯ã€NAT ã€IPv6パケットã«IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_network.php:148
+#: usr/local/www/system_advanced_network.php:148
+msgid "Advanced: Networking"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
+
+#: usr/local/www/system_advanced_network.php:205
+#: usr/local/www/system_advanced_network.php:205
+msgid "IPv6 Options"
+msgstr "IPv6ã®ã‚ªãƒ—ション"
+
+#: usr/local/www/system_advanced_network.php:208
+#: usr/local/www/system_advanced_network.php:211
+#: usr/local/www/system_advanced_network.php:208
+#: usr/local/www/system_advanced_network.php:211
+msgid "Allow IPv6"
+msgstr "IPv6ã®ã‚’許容"
+
+#: usr/local/www/system_advanced_network.php:212
+msgid "All IPv6 will be blocked unless this box is checked."
+msgstr "ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ãªã„é™ã‚Šã€ã™ã¹ã¦ã®IPv6ãŒãƒ–ロックã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_network.php:217
+#: usr/local/www/system_advanced_network.php:218
+#: usr/local/www/system_advanced_network.php:218
+msgid "IPv6 over IPv4 Tunneling"
+msgstr "IPv4ã®ãƒˆãƒ³ãƒãƒªãƒ³ã‚°ä¸Šã®IPv6"
+
+#: usr/local/www/system_advanced_network.php:220
+#: usr/local/www/system_advanced_network.php:221
+#: usr/local/www/system_advanced_network.php:221
+msgid "Enable IPv4 NAT encapsulation of IPv6 packets"
+msgstr "IPv6パケットã®IPv4ã®NATã®ã‚«ãƒ—セル化をå¯èƒ½ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_network.php:221
+#: usr/local/www/system_advanced_network.php:222
+#: usr/local/www/system_advanced_network.php:222
+msgid ""
+"This provides an RFC 2893 compatibility mechanism that can be used to "
+"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't "
+"forget to add a firewall rule to permit IPv6 packets."
+msgstr "IPv4ルーティングインフラ上ã§IPv6パケットをトンãƒãƒªãƒ³ã‚°"ã“ã‚Œã¯ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã€RFC 2893互æ›æ€§ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’æä¾›ã—ã¾ã™ã€ 。有効ã«ã™ã‚‹ã¨ã€ 「 IPv6パケットを許å¯ã™ã‚‹ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_network.php:234
+#: usr/local/www/system_advanced_network.php:235
+#: usr/local/www/system_advanced_network.php:235
+msgid "Network Interfaces"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹"
+
+#: usr/local/www/system_advanced_network.php:237
+#: usr/local/www/system_advanced_network.php:238
+#: usr/local/www/system_advanced_network.php:238
+msgid "Device polling"
+msgstr "デãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°"
+
+#: usr/local/www/system_advanced_network.php:240
+#: usr/local/www/system_advanced_network.php:241
+#: usr/local/www/system_advanced_network.php:241
+msgid "Enable device polling"
+msgstr "デãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_network.php:241
+#: usr/local/www/system_advanced_network.php:242
+#: usr/local/www/system_advanced_network.php:242
+#, php-format
+msgid ""
+"Device polling is a technique that lets the system periodically poll network "
+"devices for new data instead of relying on interrupts. This prevents your "
+"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods "
+"when under extreme load. Generally this is not recommended. Not all NICs "
+"support polling; see the %s homepage for a list of supported cards."
+msgstr "代ã‚ã‚Šã«ã€å‰²ã‚Šè¾¼ã¿ã«ä¾å­˜ã™ã‚‹ã®ã§æ–°ã—ã„データã®ãŸã‚ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ã€Œãƒ‡ãƒã‚¤ã‚¹ã®ãƒãƒ¼ãƒªãƒ³ã‚°ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ãŒå®šæœŸçš„ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™æŠ€è¡“ã§ã™ã€ 。ã“ã‚Œã¯æ™‚ã«æ¥µç«¯ãªè² è·ã®ä¸‹ã§"洪水を中断ã™ã‚‹ã“ã¨ãŒã‚¢ã‚¯ã‚»ã‚¹ä¸èƒ½ã®ãŸã‚ã§ã‚ã‚‹ã“ã¨ã‹ã‚‰webConfigurator 〠SSHãªã©ã€Œã‚ãªãŸã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚一般ã«ã€ã“ã‚Œã¯ãŠå‹§ã‚ã§ãã¾ã›ã‚“。ã™ã¹ã¦ã®NICã¯ã€Œãƒãƒ¼ãƒªãƒ³ã‚°ã‚’サãƒãƒ¼ãƒˆã—ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るカードã®ãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ %sホームページをå‚ç…§ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_network.php:245
+#: usr/local/www/system_advanced_network.php:246
+#: usr/local/www/system_advanced_network.php:246
+msgid "Hardware Checksum Offloading"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰"
+
+#: usr/local/www/system_advanced_network.php:248
+#: usr/local/www/system_advanced_network.php:249
+#: usr/local/www/system_advanced_network.php:249
+msgid "Disable hardware checksum offload"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_network.php:249
+#: usr/local/www/system_advanced_network.php:250
+#: usr/local/www/system_advanced_network.php:250
+msgid ""
+"Checking this option will disable hardware checksum offloading. Checksum "
+"offloading is broken in some hardware, particularly some Realtek cards. "
+"Rarely, drivers may have problems with checksum offloading and some specific "
+"NICs."
+msgstr ""ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã‚’無効ã«ã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã‚µãƒ "オフロードã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ç‰¹ã«ã„ãã¤ã‹ã®Realtekã®ã‚«ãƒ¼ãƒ‰ã«åˆ†å‰²ã•ã‚Œã¾ã™ã€‚ NICã¯ã€Œã¾ã‚Œã«ã€ãƒ‰ãƒ©ã‚¤ãƒãŒãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã¨ã€ã„ãã¤ã‹ã®ç‰¹å®šã®å•é¡Œã‚’有ã—ã¦ã„ãªãã¦ã‚‚よã„〠。"
+
+#: usr/local/www/system_advanced_network.php:253
+#: usr/local/www/system_advanced_network.php:254
+#: usr/local/www/system_advanced_network.php:254
+msgid "Hardware TCP Segmentation Offloading"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®TCPセグメンテーションオフロード"
+
+#: usr/local/www/system_advanced_network.php:256
+#: usr/local/www/system_advanced_network.php:257
+#: usr/local/www/system_advanced_network.php:257
+msgid "Disable hardware TCP segmentation offload"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€TCPセグメンテーションオフロードを無効ã«"
+
+#: usr/local/www/system_advanced_network.php:257
+#: usr/local/www/system_advanced_network.php:258
+#: usr/local/www/system_advanced_network.php:258
+msgid ""
+"Checking this option will disable hardware TCP segmentation offloading (TSO, "
+"TSO4, TSO6). This offloading is broken in some hardware drivers, and may "
+"impact performance with some specific NICs."
+msgstr "〠( TSO4 〠TSO6ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢TCPセグメンテーションオフロードTSOを)無効ã«ãªã‚Šã¾ã™ã€ 。ã“ã®ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ‰ãƒ©ã‚¤ãƒã«åˆ†å‰²ã•ã‚Œã€ 「ã„ãã¤ã‹ã®ç‰¹å®šã®NICã®ãƒ‘フォーマンスã«å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚る。"
+
+#: usr/local/www/system_advanced_network.php:261
+#: usr/local/www/system_advanced_network.php:262
+#: usr/local/www/system_advanced_network.php:262
+msgid "Hardware Large Receive Offloading"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å¤§ããªã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã‚’å—ä¿¡"
+
+#: usr/local/www/system_advanced_network.php:264
+#: usr/local/www/system_advanced_network.php:265
+#: usr/local/www/system_advanced_network.php:265
+msgid "Disable hardware large receive offload"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«å¤§ããªå—信オフロードを無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_network.php:265
+#: usr/local/www/system_advanced_network.php:266
+#: usr/local/www/system_advanced_network.php:266
+msgid ""
+"Checking this option will disable hardware large receive offloading (LRO). "
+"This offloading is broken in some hardware drivers, and may impact "
+"performance with some specific NICs."
+msgstr ""ã“ã®ã‚ªãƒ—ションをオンã«ã™ã‚‹ã¨ã€ç„¡åŠ¹ã«ãªã‚Šã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®å¤§ã€‚ ( LRO )ã®ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰å—ä¿¡ã€ã“ã®ã‚ªãƒ•ãƒ­ãƒ¼ãƒ‰ã¯ã€ä¸€éƒ¨ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ‰ãƒ©ã‚¤ãƒã«åˆ†å‰²ã•ã‚Œã€ã„ãã¤ã‹ã®ç‰¹å®šã®NICを「パフォーマンスã«å½±éŸ¿ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_network.php:269
+#: usr/local/www/system_advanced_network.php:270
+#: usr/local/www/system_advanced_network.php:270
+msgid "ARP Handling"
+msgstr "ARPã®å–り扱ã„"
+
+#: usr/local/www/system_advanced_network.php:272
+#: usr/local/www/system_advanced_network.php:273
+#: usr/local/www/system_advanced_network.php:273
+msgid "Suppress ARP messages"
+msgstr "ARPメッセージを抑制ã™ã‚‹"
+
+#: usr/local/www/system_advanced_network.php:273
+#: usr/local/www/system_advanced_network.php:274
+#: usr/local/www/system_advanced_network.php:274
+msgid ""
+"This option will suppress ARP log messages when multiple interfaces reside "
+"on the same broadcast domain"
+msgstr "åŒã˜ãƒ–ロードキャストドメインã«ã€Œè¤‡æ•°ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã€ARP ã€ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œãªããªã‚Šã¾ã™ã€"
+
+#: usr/local/www/system_advanced_notifications.php:118
+#: usr/local/www/system_advanced_notifications.php:124
+#: usr/local/www/system_advanced_notifications.php:127
+#: usr/local/www/system_advanced_notifications.php:133
+#: usr/local/www/system_advanced_notifications.php:127
+#: usr/local/www/system_advanced_notifications.php:133
+#, php-format
+msgid "This is a test message from %s. It is safe to ignore this message."
+msgstr "ã“ã‚Œã¯%s.ã‹ã‚‰ã®ãƒ†ã‚¹ãƒˆÂ·ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ãã‚Œã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ã‚‚安全ã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:131
+#: usr/local/www/system_advanced_notifications.php:140
+#: usr/local/www/system_advanced_notifications.php:140
+msgid "Advanced: Notifications"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šé€šçŸ¥"
+
+#: usr/local/www/system_advanced_notifications.php:168
+#: usr/local/www/system_advanced_notifications.php:177
+#: usr/local/www/system_advanced_notifications.php:177
+msgid "Growl"
+msgstr "ã†ãªã‚Šå£°"
+
+#: usr/local/www/system_advanced_notifications.php:171
+#: usr/local/www/system_advanced_notifications.php:180
+#: usr/local/www/system_advanced_notifications.php:180
+msgid "Registration Name"
+msgstr "登録å"
+
+#: usr/local/www/system_advanced_notifications.php:174
+#: usr/local/www/system_advanced_notifications.php:183
+#: usr/local/www/system_advanced_notifications.php:183
+msgid "Enter the name to register with the Growl server (default: PHP-Growl)."
+msgstr "Growlã®ã‚µãƒ¼ãƒï¼ˆ : PHP- Growlã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰ã«ç™»éŒ²ã™ã‚‹åå‰ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:178
+#: usr/local/www/system_advanced_notifications.php:187
+#: usr/local/www/system_advanced_notifications.php:187
+msgid "Notification Name"
+msgstr "通知å"
+
+#: usr/local/www/system_advanced_notifications.php:181
+#: usr/local/www/system_advanced_notifications.php:190
+#: usr/local/www/system_advanced_notifications.php:190
+#, php-format
+msgid "Enter a name for the Growl notifications (default: %s growl alert)."
+msgstr "Growl通知( : %sã†ãªã‚Šå£°ã‚¢ãƒ©ãƒ¼ãƒˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰ã®åå‰ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:188
+#: usr/local/www/system_advanced_notifications.php:197
+#: usr/local/www/system_advanced_notifications.php:197
+msgid ""
+"This is the IP address that you would like to send growl notifications to."
+msgstr ""ã“ã‚Œã¯ã‚ãªãŸãŒã«Growl通知をé€ä¿¡ã—ãŸã„IPアドレスã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:195
+#: usr/local/www/system_advanced_notifications.php:204
+#: usr/local/www/system_advanced_notifications.php:204
+msgid "Enter the password of the remote growl notification device."
+msgstr "リモートã†ãªã‚Šå£°ã®é€šçŸ¥ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ‘スワードを入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:203
+#: usr/local/www/system_advanced_notifications.php:212
+#: usr/local/www/system_advanced_notifications.php:212
+msgid "SMTP E-Mail"
+msgstr "SMTPé›»å­ãƒ¡ãƒ¼ãƒ«"
+
+#: usr/local/www/system_advanced_notifications.php:206
+#: usr/local/www/system_advanced_notifications.php:215
+#: usr/local/www/system_advanced_notifications.php:215
+msgid "E-Mail server"
+msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒãƒ¼"
+
+#: usr/local/www/system_advanced_notifications.php:209
+#: usr/local/www/system_advanced_notifications.php:218
+#: usr/local/www/system_advanced_notifications.php:218
+msgid ""
+"This is the FQDN or IP address of the SMTP E-Mail server to which "
+"notifications will be sent."
+msgstr "通知ãŒé€ä¿¡ã•ã‚Œã¾ã™"ã“ã‚Œã¯ã™ã‚‹SMTPé›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒã®FQDNã¾ãŸã¯IPアドレスã§ã™ã€ 。"
+
+#: usr/local/www/system_advanced_notifications.php:213
+#: usr/local/www/system_advanced_notifications.php:222
+#: usr/local/www/system_advanced_notifications.php:222
+msgid "SMTP Port of E-Mail server"
+msgstr "é›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒã®SMTPãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_advanced_notifications.php:217
+#: usr/local/www/system_advanced_notifications.php:226
+#: usr/local/www/system_advanced_notifications.php:226
+msgid ""
+"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) "
+"or 465 (smtps, tick ssl/tls checkbox)"
+msgstr "ã¾ãŸã¯465 ( SMTPS ã€ãƒ€ãƒ‹SSL / TLSãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ï¼‰ "ã“ã‚Œã¯ã€SMTPé›»å­ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒãƒ¼ã®ãƒãƒ¼ãƒˆã€é€šå¸¸ã¯25 〠587 (サブミッション)ã§ã‚ã‚‹""
+
+#: usr/local/www/system_advanced_notifications.php:221
+#: usr/local/www/system_advanced_notifications.php:230
+#: usr/local/www/system_advanced_notifications.php:230
+msgid "From e-mail address"
+msgstr "Eメールアドレスã‹ã‚‰"
+
+#: usr/local/www/system_advanced_notifications.php:224
+#: usr/local/www/system_advanced_notifications.php:233
+#: usr/local/www/system_advanced_notifications.php:233
+msgid "This is the e-mail address that will appear in the from field."
+msgstr "ã“ã‚Œã¯ã‹ã‚‰ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«è¡¨ç¤ºã•ã‚Œã‚‹é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚"
+
+#: usr/local/www/system_advanced_notifications.php:228
+#: usr/local/www/system_advanced_notifications.php:237
+#: usr/local/www/system_advanced_notifications.php:237
+msgid "Notification E-Mail address"
+msgstr "通知ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/system_advanced_notifications.php:231
+#: usr/local/www/system_advanced_notifications.php:240
+#: usr/local/www/system_advanced_notifications.php:240
+msgid ""
+"Enter the e-mail address that you would like email notifications sent to."
+msgstr "「ã‚ãªãŸã¯ã«é€ã‚‰ã‚ŒãŸé›»å­ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚’ã”希望ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_notifications.php:235
+#: usr/local/www/system_advanced_notifications.php:244
+#: usr/local/www/system_advanced_notifications.php:244
+msgid "Notification E-Mail auth username (optional)"
+msgstr "通知メールã®èªè¨¼ã®ãƒ¦ãƒ¼ã‚¶å(オプション)"
+
+#: usr/local/www/system_advanced_notifications.php:238
+#: usr/local/www/system_advanced_notifications.php:247
+#: usr/local/www/system_advanced_notifications.php:247
+msgid "Enter the e-mail address username for SMTP authentication."
+msgstr "SMTPèªè¨¼ç”¨ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_notifications.php:242
+#: usr/local/www/system_advanced_notifications.php:251
+#: usr/local/www/system_advanced_notifications.php:251
+msgid "Notification E-Mail auth password"
+msgstr "通知メールã®èªè¨¼ãƒ‘スワード"
+
+#: usr/local/www/system_advanced_notifications.php:245
+#: usr/local/www/system_advanced_notifications.php:254
+#: usr/local/www/system_advanced_notifications.php:254
+msgid "Enter the e-mail address password for SMTP authentication."
+msgstr "SMTPèªè¨¼ç”¨ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ‘スワードを入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_sysctl.php:125
+#: usr/local/www/system_advanced_sysctl.php:125
+msgid "Advanced: System Tunables"
+msgstr "アドãƒãƒ³ã‚¹ãƒˆï¼šã‚·ã‚¹ãƒ†ãƒ ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°å¯èƒ½"
+
+#: usr/local/www/system_advanced_sysctl.php:139
+#: usr/local/www/system_advanced_sysctl.php:139
+msgid ""
+"The firewall tunables have changed. You must apply the configuration to "
+"take affect."
+msgstr "「ファイアウォールã®èª¿æ•´ãƒ‘ラメータãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒã«è¨­å®šã‚’é©ç”¨ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ã€æœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_sysctl.php:171
+#: usr/local/www/system_advanced_sysctl.php:171
+msgid "Tunable Name"
+msgstr "調整å¯èƒ½ãªåå‰"
+
+#: usr/local/www/system_advanced_sysctl.php:234
+#: usr/local/www/system_advanced_sysctl.php:234
+msgid "Edit system tunable"
+msgstr "編集システム調整"
+
+#: usr/local/www/system_advanced_sysctl.php:237
+#: usr/local/www/system_advanced_sysctl.php:237
+msgid "Tunable"
+msgstr "調節å¯èƒ½ãª"
+
+#: usr/local/www/system_authservers.php:44
+#: usr/local/www/system_authservers.php:44
+msgid "Authentication Servers"
+msgstr "èªè¨¼ã‚µãƒ¼ãƒãƒ¼"
+
+#: usr/local/www/system_authservers.php:83
+#: usr/local/www/system_authservers.php:84
+#: usr/local/www/system_authservers.php:84
+msgid "deleted"
+msgstr "削除ã•ã‚ŒãŸ"
+
+#: usr/local/www/system_authservers.php:160
+#: usr/local/www/system_authservers.php:183
+#: usr/local/www/system_authservers.php:438
+#: usr/local/www/system_camanager.php:165
+#: usr/local/www/system_camanager.php:177
+#: usr/local/www/system_camanager.php:192
+#: usr/local/www/system_camanager.php:369
+#: usr/local/www/system_certmanager.php:164
+#: usr/local/www/system_certmanager.php:176
+#: usr/local/www/system_certmanager.php:193
+#: usr/local/www/system_certmanager.php:307
+#: usr/local/www/system_certmanager.php:495
+#: usr/local/www/system_certmanager.php:801
+#: usr/local/www/system_crlmanager.php:193
+#: usr/local/www/system_crlmanager.php:200
+#: usr/local/www/system_crlmanager.php:318
+#: usr/local/www/system_usermanager.php:189
+#: usr/local/www/system_usermanager.php:705
+#: usr/local/www/system_certmanager.php:192
+#: usr/local/www/system_certmanager.php:204
+#: usr/local/www/system_certmanager.php:222
+#: usr/local/www/system_certmanager.php:394
+#: usr/local/www/system_certmanager.php:594
+#: usr/local/www/system_certmanager.php:967
+#: usr/local/www/system_usermanager.php:703
+#: usr/local/www/system_crlmanager.php:192
+#: usr/local/www/system_crlmanager.php:199
+#: usr/local/www/system_crlmanager.php:319
+#: usr/local/www/system_crlmanager.php:404
+#: usr/local/www/system_authservers.php:161
+#: usr/local/www/system_authservers.php:184
+#: usr/local/www/system_authservers.php:443
+#: usr/local/www/system_camanager.php:167
+#: usr/local/www/system_camanager.php:179
+#: usr/local/www/system_camanager.php:194
+#: usr/local/www/system_camanager.php:376
+#: usr/local/www/system_certmanager.php:195
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_certmanager.php:403
+#: usr/local/www/system_certmanager.php:603
+#: usr/local/www/system_certmanager.php:1009
+#: usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185
+#: usr/local/www/system_authservers.php:450
+#: usr/local/www/system_certmanager.php:604
+#: usr/local/www/system_certmanager.php:1013
+#: usr/local/www/system_camanager.php:167
+#: usr/local/www/system_camanager.php:179
+#: usr/local/www/system_camanager.php:194
+#: usr/local/www/system_camanager.php:376
+#: usr/local/www/system_certmanager.php:195
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_certmanager.php:403
+#: usr/local/www/system_certmanager.php:604
+#: usr/local/www/system_certmanager.php:1013
+#: usr/local/www/system_crlmanager.php:192
+#: usr/local/www/system_crlmanager.php:199
+#: usr/local/www/system_crlmanager.php:319
+#: usr/local/www/system_crlmanager.php:404
+#: usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185
+#: usr/local/www/system_authservers.php:450
+#: usr/local/www/system_usermanager.php:189
+#: usr/local/www/system_usermanager.php:703
+msgid "Descriptive name"
+msgstr "記述å"
+
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:484
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:489
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:496
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:496
+msgid "Port value"
+msgstr "ãƒãƒ¼ãƒˆå€¤"
+
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:490
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:495
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:502
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:502
+msgid "Transport"
+msgstr "輸é€"
+
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:526
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:531
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:538
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:538
+msgid "Protocol version"
+msgstr "プロトコルãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:168
+msgid "Search level"
+msgstr "検索レベル"
+
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:169
+msgid "User naming Attribute"
+msgstr "ユーザーãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§"
+
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:170
+msgid "Group naming Attribute"
+msgstr "グループã®ãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§"
+
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:665
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:670
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:677
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:677
+msgid "Group member attribute"
+msgstr "グループメンãƒãƒ¼å±žæ€§"
+
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:172
+#: usr/local/www/system_authservers.php:172
+msgid "Authentication container"
+msgstr "èªè¨¼ã‚³ãƒ³ãƒ†ãƒŠ"
+
+#: usr/local/www/system_authservers.php:175
+#: usr/local/www/system_authservers.php:176
+#: usr/local/www/system_authservers.php:177
+#: usr/local/www/system_authservers.php:177
+msgid "Bind user DN"
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®DN"
+
+#: usr/local/www/system_authservers.php:176
+#: usr/local/www/system_authservers.php:177
+#: usr/local/www/system_authservers.php:178
+#: usr/local/www/system_authservers.php:178
+msgid "Bind Password"
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ‘スワード"
+
+#: usr/local/www/system_authservers.php:191
+#: usr/local/www/system_authservers.php:707
+#: usr/local/www/system_authservers.php:192
+#: usr/local/www/system_authservers.php:712
+#: usr/local/www/system_authservers.php:193
+#: usr/local/www/system_authservers.php:719
+#: usr/local/www/system_authservers.php:193
+#: usr/local/www/system_authservers.php:719
+msgid "Authentication port value"
+msgstr "èªè¨¼ãƒãƒ¼ãƒˆã®å€¤"
+
+#: usr/local/www/system_authservers.php:197
+#: usr/local/www/system_authservers.php:713
+#: usr/local/www/system_authservers.php:198
+#: usr/local/www/system_authservers.php:718
+#: usr/local/www/system_authservers.php:199
+#: usr/local/www/system_authservers.php:725
+#: usr/local/www/system_authservers.php:199
+#: usr/local/www/system_authservers.php:725
+msgid "Accounting port value"
+msgstr "会計ãƒãƒ¼ãƒˆå€¤"
+
+#: usr/local/www/system_authservers.php:202
+#: usr/local/www/system_authservers.php:686
+#: usr/local/www/system_authservers.php:203
+#: usr/local/www/system_authservers.php:691
+#: usr/local/www/system_authservers.php:204
+#: usr/local/www/system_authservers.php:698
+#: usr/local/www/system_authservers.php:204
+#: usr/local/www/system_authservers.php:698
+msgid "Shared Secret"
+msgstr "共有秘密éµ"
+
+#: usr/local/www/system_authservers.php:209
+#: usr/local/www/system_authservers.php:210
+#: usr/local/www/system_authservers.php:211
+#: usr/local/www/system_authservers.php:211
+msgid "The host name contains invalid characters."
+msgstr "ホストåãŒç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:212
+#: usr/local/www/system_authservers.php:213
+#: usr/local/www/system_authservers.php:214
+#: usr/local/www/system_authservers.php:214
+msgid "An authentication server with the same name already exists."
+msgstr "åŒã˜åå‰ã®èªè¨¼ã‚µãƒ¼ãƒãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:382
+#: usr/local/www/system_authservers.php:383
+#: usr/local/www/system_authservers.php:390
+#: usr/local/www/system_authservers.php:390
+msgid "Please fill the required values."
+msgstr "å¿…è¦ãªå€¤ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_authservers.php:388
+#: usr/local/www/system_authservers.php:389
+#: usr/local/www/system_authservers.php:396
+#: usr/local/www/system_authservers.php:396
+msgid "Please fill the bind username/password."
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_authservers.php:406
+#: usr/local/www/system_usermanager_settings.php:103
+#: usr/local/www/system_authservers.php:411
+#: usr/local/www/system_authservers.php:418
+#: usr/local/www/system_usermanager_settings.php:104
+#: usr/local/www/system_authservers.php:418
+#: usr/local/www/system_usermanager_settings.php:104
+msgid "Popup blocker detected. Action aborted."
+msgstr "ãƒãƒƒãƒ—アップブロッカーãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸã€‚アクションãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/system_authservers.php:475
+#: usr/local/www/system_authservers.php:480
+#: usr/local/www/system_authservers.php:487
+#: usr/local/www/system_authservers.php:487
+msgid "LDAP Server Settings"
+msgstr "LDAPサーãƒãƒ¼ã®è¨­å®š"
+
+#: usr/local/www/system_authservers.php:478
+#: usr/local/www/system_authservers.php:680
+#: usr/local/www/system_authservers.php:483
+#: usr/local/www/system_authservers.php:685
+#: usr/local/www/system_authservers.php:490
+#: usr/local/www/system_authservers.php:692
+#: usr/local/www/system_authservers.php:490
+#: usr/local/www/system_authservers.php:692
+msgid "Hostname or IP address"
+msgstr "ホストåã¾ãŸã¯IPアドレス"
+
+#: usr/local/www/system_authservers.php:505
+#: usr/local/www/vpn_openvpn_client.php:629
+#: usr/local/www/vpn_openvpn_server.php:778
+#: usr/local/www/vpn_openvpn_server.php:851
+#: usr/local/www/vpn_openvpn_client.php:634
+#: usr/local/www/vpn_openvpn_server.php:879
+#: usr/local/www/vpn_openvpn_client.php:652
+#: usr/local/www/system_authservers.php:510
+#: usr/local/www/vpn_openvpn_client.php:671
+#: usr/local/www/system_authservers.php:517
+#: usr/local/www/vpn_openvpn_server.php:906
+#: usr/local/www/vpn_openvpn_client.php:671
+#: usr/local/www/system_authservers.php:517
+#: usr/local/www/vpn_openvpn_server.php:906
+msgid "Peer Certificate Authority"
+msgstr "èªè¨¼å±€ã®ãƒ”ã‚¢"
+
+#: usr/local/www/system_authservers.php:518
+#: usr/local/www/system_authservers.php:523
+#: usr/local/www/system_authservers.php:530
+#: usr/local/www/system_authservers.php:530
+msgid "This option is used if 'SSL Encrypted' option is choosen."
+msgstr "「 SSLæš—å·åŒ–ã€ã‚ªãƒ—ションãŒé¸æŠžæ¸ˆã¿ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚ªãƒ—ションãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:519
+#: usr/local/www/system_authservers.php:524
+#: usr/local/www/system_authservers.php:531
+#: usr/local/www/system_authservers.php:531
+msgid "It must match with the CA in the AD otherwise problems will arise."
+msgstr "ãã†ã§ãªã‘ã‚Œã°ã€å•é¡ŒãŒç™ºç”Ÿã—ã¾ã™ã€ADã«ãŠã‘ã‚‹CAã¨ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:541
+#: usr/local/www/system_authservers.php:546
+#: usr/local/www/system_authservers.php:553
+#: usr/local/www/system_authservers.php:553
+msgid "Search scope"
+msgstr "検索範囲"
+
+#: usr/local/www/system_authservers.php:545
+#: usr/local/www/system_authservers.php:550
+#: usr/local/www/system_authservers.php:557
+#: usr/local/www/system_authservers.php:557
+msgid "Level:"
+msgstr "レベル:"
+
+#: usr/local/www/system_authservers.php:560
+#: usr/local/www/system_authservers.php:565
+#: usr/local/www/system_authservers.php:572
+#: usr/local/www/system_authservers.php:572
+msgid "Base DN:"
+msgstr "ベースDN :"
+
+#: usr/local/www/system_authservers.php:570
+#: usr/local/www/system_authservers.php:575
+#: usr/local/www/system_authservers.php:582
+#: usr/local/www/system_authservers.php:582
+msgid "Authentication containers"
+msgstr "èªè¨¼ã‚³ãƒ³ãƒ†ãƒŠ"
+
+#: usr/local/www/system_authservers.php:574
+#: usr/local/www/system_authservers.php:579
+#: usr/local/www/system_authservers.php:586
+#: usr/local/www/system_authservers.php:586
+msgid "Containers:"
+msgstr "コンテナ:"
+
+#: usr/local/www/system_authservers.php:578
+#: usr/local/www/system_authservers.php:583
+#: usr/local/www/system_authservers.php:590
+#: usr/local/www/system_authservers.php:590
+msgid ""
+"Note: Semi-Colon separated. This will be prepended to the search base dn "
+"above or you can specify full container path."
+msgstr ""注:セミコロン区切りã“ã‚Œã¯ã€æ¤œç´¢ãƒ™ãƒ¼ã‚¹DNã®å‰ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚ 「上やã€ãƒ•ãƒ«ã‚³ãƒ³ãƒ†ãƒŠã®ãƒ‘スを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:579
+#: usr/local/www/system_authservers.php:584
+#: usr/local/www/system_authservers.php:591
+#: usr/local/www/system_authservers.php:591
+msgid "Example: CN=Users;DC=example"
+msgstr "例: CNã¯=ユーザー〠DC =例"
+
+#: usr/local/www/system_authservers.php:580
+#: usr/local/www/system_authservers.php:585
+#: usr/local/www/system_authservers.php:592
+#: usr/local/www/system_authservers.php:592
+msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+msgstr "例: CN =ユーザー〠DC =例〠DC = comã®ã€ OU = OtherUsers 〠DC =例〠DC = comã®"
+
+#: usr/local/www/system_authservers.php:587
+#: usr/local/www/system_authservers.php:592
+#: usr/local/www/system_authservers.php:599
+#: usr/local/www/system_authservers.php:599
+msgid "Extended Query"
+msgstr "æ‹¡å¼µå•ã„åˆã‚ã›"
+
+#: usr/local/www/system_authservers.php:597
+#: usr/local/www/system_authservers.php:602
+#: usr/local/www/system_authservers.php:609
+#: usr/local/www/system_authservers.php:609
+msgid ""
+"Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,"
+"DC=com "
+msgstr "「例: CN =グループå〠OU = MyGroups 〠DC =例〠DC = comã®ã€ OU = OtherUsers 〠DC =例〠「DC = comã®"
+
+#: usr/local/www/system_authservers.php:604
+#: usr/local/www/system_authservers.php:609
+#: usr/local/www/system_authservers.php:616
+#: usr/local/www/system_authservers.php:616
+msgid "Bind credentials"
+msgstr "資格をãƒã‚¤ãƒ³ãƒ‰"
+
+#: usr/local/www/system_authservers.php:612
+#: usr/local/www/system_authservers.php:617
+#: usr/local/www/system_authservers.php:624
+#: usr/local/www/system_authservers.php:624
+msgid "Use anonymous binds to resolve distinguished names"
+msgstr "識別åを解決ã™ã‚‹ãŸã‚ã«åŒ¿åãƒã‚¤ãƒ³ãƒ‰ã‚’使用ã—ã¦ã€"
+
+#: usr/local/www/system_authservers.php:621
+#: usr/local/www/system_authservers.php:626
+#: usr/local/www/system_authservers.php:633
+#: usr/local/www/system_authservers.php:633
+msgid "User DN:"
+msgstr "ユーザーDN :"
+
+#: usr/local/www/system_authservers.php:637
+#: usr/local/www/system_authservers.php:642
+#: usr/local/www/system_authservers.php:649
+#: usr/local/www/system_authservers.php:649
+msgid "Initial Template"
+msgstr "åˆæœŸãƒ†ãƒ³ãƒ—レート"
+
+#: usr/local/www/system_authservers.php:653
+#: usr/local/www/system_authservers.php:658
+#: usr/local/www/system_authservers.php:665
+#: usr/local/www/system_authservers.php:665
+msgid "User naming attribute"
+msgstr "ユーザーãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§"
+
+#: usr/local/www/system_authservers.php:659
+#: usr/local/www/system_authservers.php:664
+#: usr/local/www/system_authservers.php:671
+#: usr/local/www/system_authservers.php:671
+msgid "Group naming attribute"
+msgstr "グループã®ãƒãƒ¼ãƒŸãƒ³ã‚°å±žæ€§"
+
+#: usr/local/www/system_authservers.php:677
+#: usr/local/www/system_authservers.php:682
+#: usr/local/www/system_authservers.php:689
+#: usr/local/www/system_authservers.php:689
+msgid "Radius Server Settings"
+msgstr "RADIUSサーãƒã®è¨­å®š"
+
+#: usr/local/www/system_authservers.php:692
+#: usr/local/www/system_authservers.php:697
+#: usr/local/www/system_authservers.php:704
+#: usr/local/www/system_authservers.php:704
+msgid "Services offered"
+msgstr "æä¾›ã™ã‚‹ã‚µãƒ¼ãƒ“ス"
+
+#: usr/local/www/system_authservers.php:737
+#: usr/local/www/system_authservers.php:743
+#: usr/local/www/system_authservers.php:759
+#: usr/local/www/system_authservers.php:759
+msgid "Server Name"
+msgstr "サーãƒãƒ¼å"
+
+#: usr/local/www/system_authservers.php:739
+#: usr/local/www/system_authservers.php:745
+#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154
+#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154
+msgid "Host Name"
+msgstr "ホストå"
+
+#: usr/local/www/system_authservers.php:756
+#: usr/local/www/vpn_openvpn_server.php:1479
+#: usr/local/www/vpn_openvpn_server.php:1621
+#: usr/local/www/vpn_openvpn_server.php:1662
+#: usr/local/www/system_authservers.php:764
+#: usr/local/www/system_authservers.php:780
+#: usr/local/www/vpn_openvpn_server.php:1714
+#: usr/local/www/system_authservers.php:797
+#: usr/local/www/system_authservers.php:797
+#: usr/local/www/vpn_openvpn_server.php:1714
+msgid "edit server"
+msgstr "サーãƒãƒ¼ã®ç·¨é›†"
+
+#: usr/local/www/system_authservers.php:759
+#: usr/local/www/system_authservers.php:767
+#: usr/local/www/system_authservers.php:783
+#: usr/local/www/system_authservers.php:800
+#: usr/local/www/system_authservers.php:800
+msgid "Do you really want to delete this Server?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚µãƒ¼ãƒã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_authservers.php:760
+#: usr/local/www/vpn_openvpn_server.php:1483
+#: usr/local/www/vpn_openvpn_server.php:1625
+#: usr/local/www/vpn_openvpn_server.php:1666
+#: usr/local/www/system_authservers.php:768
+#: usr/local/www/system_authservers.php:784
+#: usr/local/www/vpn_openvpn_server.php:1718
+#: usr/local/www/system_authservers.php:801
+#: usr/local/www/system_authservers.php:801
+#: usr/local/www/vpn_openvpn_server.php:1718
+msgid "delete server"
+msgstr "サーãƒã‚’削除"
+
+#: usr/local/www/system_authservers.php:772
+#: usr/local/www/vpn_openvpn_server.php:1496
+#: usr/local/www/vpn_openvpn_server.php:1638
+#: usr/local/www/vpn_openvpn_server.php:1679
+#: usr/local/www/system_authservers.php:782
+#: usr/local/www/system_authservers.php:798
+#: usr/local/www/vpn_openvpn_server.php:1731
+#: usr/local/www/system_authservers.php:770
+#: usr/local/www/system_authservers.php:770
+#: usr/local/www/vpn_openvpn_server.php:1731
+msgid "add server"
+msgstr "サーãƒãƒ¼ã‚’追加"
+
+#: usr/local/www/system_authservers.php:779
+#: usr/local/www/system_authservers.php:789
+#: usr/local/www/system_authservers.php:805
+#: usr/local/www/system_authservers.php:777
+#: usr/local/www/system_authservers.php:777
+msgid "Additional authentication servers can be added here."
+msgstr "追加ã®èªè¨¼ã‚µãƒ¼ãƒã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãる。"
+
+#: usr/local/www/system_camanager.php:44 usr/local/www/system_camanager.php:44
+msgid "Import an existing Certificate Authority"
+msgstr "既存ã®èªè¨¼å±€ã‚’インãƒãƒ¼ãƒˆã™ã‚‹"
+
+#: usr/local/www/system_camanager.php:45 usr/local/www/system_camanager.php:45
+msgid "Create an internal Certificate Authority"
+msgstr "内部èªè¨¼å±€ã‚’作æˆã™ã‚‹"
+
+#: usr/local/www/system_camanager.php:46 usr/local/www/system_camanager.php:46
+msgid "Create an intermediate Certificate Authority"
+msgstr "中間èªè¨¼å±€ã‚’作æˆã™ã‚‹"
+
+#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51
+#: usr/local/www/system_camanager.php:51
+msgid "Certificate Authority Manager"
+msgstr "èªè¨¼å±€ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96
+#: usr/local/www/system_camanager.php:96
+#, php-format
+msgid "Certificate Authority %s and its CRLs (if any) successfully deleted"
+msgstr "èªè¨¼å±€ã¯%sã¨ãã®CRLã¯ã€ (もã—ã‚ã‚Œã°ï¼‰æ­£å¸¸ã«å‰Šé™¤"
+
+#: usr/local/www/system_camanager.php:166
+#: usr/local/www/system_camanager.php:402
+#: usr/local/www/system_certmanager.php:165
+#: usr/local/www/system_certmanager.php:511
+#: usr/local/www/system_certmanager.php:193
+#: usr/local/www/system_certmanager.php:610
+#: usr/local/www/system_camanager.php:168
+#: usr/local/www/system_camanager.php:409
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/system_certmanager.php:619
+#: usr/local/www/system_certmanager.php:620
+#: usr/local/www/system_camanager.php:168
+#: usr/local/www/system_camanager.php:409
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/system_certmanager.php:620
+msgid "Certificate data"
+msgstr "証明書データ"
+
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_camanager.php:172
+#: usr/local/www/system_camanager.php:172
+msgid "Encrypted private keys are not yet supported."
+msgstr "æš—å·åŒ–ã•ã‚ŒãŸç§˜å¯†éµã¯ã€ã¾ã ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/system_camanager.php:178
+#: usr/local/www/system_camanager.php:194
+#: usr/local/www/system_camanager.php:453
+#: usr/local/www/system_certmanager.php:178
+#: usr/local/www/system_certmanager.php:194
+#: usr/local/www/system_certmanager.php:566
+#: usr/local/www/system_certmanager.php:656
+#: usr/local/www/system_usermanager.php:191
+#: usr/local/www/system_usermanager.php:725
+#: usr/local/www/system_certmanager.php:206
+#: usr/local/www/system_certmanager.php:223
+#: usr/local/www/system_certmanager.php:665
+#: usr/local/www/system_certmanager.php:820
+#: usr/local/www/system_usermanager.php:723
+#: usr/local/www/system_camanager.php:454
+#: usr/local/www/system_camanager.php:180
+#: usr/local/www/system_camanager.php:196
+#: usr/local/www/system_camanager.php:461
+#: usr/local/www/system_certmanager.php:209
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_certmanager.php:674
+#: usr/local/www/system_certmanager.php:845
+#: usr/local/www/system_certmanager.php:675
+#: usr/local/www/system_certmanager.php:849
+#: usr/local/www/system_camanager.php:180
+#: usr/local/www/system_camanager.php:196
+#: usr/local/www/system_camanager.php:461
+#: usr/local/www/system_certmanager.php:209
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_certmanager.php:675
+#: usr/local/www/system_certmanager.php:849
+#: usr/local/www/system_usermanager.php:191
+#: usr/local/www/system_usermanager.php:723
+msgid "Key length"
+msgstr "キーã®é•·ã•"
+
+#: usr/local/www/system_camanager.php:179
+#: usr/local/www/system_camanager.php:195
+#: usr/local/www/system_camanager.php:469
+#: usr/local/www/system_certmanager.php:179
+#: usr/local/www/system_certmanager.php:582
+#: usr/local/www/system_crlmanager.php:366
+#: usr/local/www/system_usermanager.php:192
+#: usr/local/www/system_usermanager.php:739
+#: usr/local/www/vpn_ipsec_phase1.php:758
+#: usr/local/www/vpn_ipsec_phase2.php:619
+#: usr/local/www/system_certmanager.php:208
+#: usr/local/www/system_certmanager.php:698
+#: usr/local/www/system_usermanager.php:737
+#: usr/local/www/system_camanager.php:470
+#: usr/local/www/vpn_ipsec_phase2.php:645
+#: usr/local/www/vpn_ipsec_phase1.php:771
+#: usr/local/www/system_crlmanager.php:367
+#: usr/local/www/vpn_ipsec_phase2.php:741
+#: usr/local/www/vpn_ipsec_phase1.php:768
+#: usr/local/www/system_camanager.php:181
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_camanager.php:493
+#: usr/local/www/system_certmanager.php:211
+#: usr/local/www/system_certmanager.php:723
+#: usr/local/www/vpn_ipsec_phase1.php:789
+#: usr/local/www/vpn_ipsec_phase2.php:762
+#: usr/local/www/system_certmanager.php:724
+#: usr/local/www/system_camanager.php:181
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_camanager.php:493
+#: usr/local/www/system_certmanager.php:211
+#: usr/local/www/system_certmanager.php:724
+#: usr/local/www/system_crlmanager.php:367
+#: usr/local/www/vpn_ipsec_phase1.php:789
+#: usr/local/www/system_usermanager.php:192
+#: usr/local/www/system_usermanager.php:737
+#: usr/local/www/vpn_ipsec_phase2.php:762
+msgid "Lifetime"
+msgstr "一生"
+
+#: usr/local/www/system_camanager.php:180
+#: usr/local/www/system_camanager.php:196
+#: usr/local/www/system_certmanager.php:180
+#: usr/local/www/system_certmanager.php:195
+#: usr/local/www/system_certmanager.php:209
+#: usr/local/www/system_certmanager.php:224
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_certmanager.php:212
+#: usr/local/www/system_certmanager.php:227
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_certmanager.php:212
+#: usr/local/www/system_certmanager.php:227
+msgid "Distinguished name Country Code"
+msgstr "識別åã®å›½ã‚³ãƒ¼ãƒ‰"
+
+#: usr/local/www/system_camanager.php:181
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_certmanager.php:181
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/system_certmanager.php:210
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_certmanager.php:213
+#: usr/local/www/system_certmanager.php:228
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_certmanager.php:213
+#: usr/local/www/system_certmanager.php:228
+msgid "Distinguished name State or Province"
+msgstr "識別åã®éƒ½é“府県"
+
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_certmanager.php:182
+#: usr/local/www/system_certmanager.php:197
+#: usr/local/www/system_certmanager.php:211
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_certmanager.php:214
+#: usr/local/www/system_certmanager.php:229
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_certmanager.php:214
+#: usr/local/www/system_certmanager.php:229
+msgid "Distinguished name City"
+msgstr "識別å市"
+
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_certmanager.php:183
+#: usr/local/www/system_certmanager.php:198
+#: usr/local/www/system_certmanager.php:212
+#: usr/local/www/system_certmanager.php:227
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:215
+#: usr/local/www/system_certmanager.php:230
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:215
+#: usr/local/www/system_certmanager.php:230
+msgid "Distinguished name Organization"
+msgstr "識別å組織"
+
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_certmanager.php:184
+#: usr/local/www/system_certmanager.php:199
+#: usr/local/www/system_certmanager.php:213
+#: usr/local/www/system_certmanager.php:228
+#: usr/local/www/system_camanager.php:186
+#: usr/local/www/system_camanager.php:202
+#: usr/local/www/system_certmanager.php:216
+#: usr/local/www/system_certmanager.php:231
+#: usr/local/www/system_camanager.php:186
+#: usr/local/www/system_camanager.php:202
+#: usr/local/www/system_certmanager.php:216
+#: usr/local/www/system_certmanager.php:231
+msgid "Distinguished name Email Address"
+msgstr "識別åã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:185
+#: usr/local/www/system_certmanager.php:200
+#: usr/local/www/system_certmanager.php:214
+#: usr/local/www/system_certmanager.php:229
+#: usr/local/www/system_camanager.php:187
+#: usr/local/www/system_camanager.php:203
+#: usr/local/www/system_certmanager.php:217
+#: usr/local/www/system_certmanager.php:232
+#: usr/local/www/system_camanager.php:187
+#: usr/local/www/system_camanager.php:203
+#: usr/local/www/system_certmanager.php:217
+#: usr/local/www/system_certmanager.php:232
+msgid "Distinguished name Common Name"
+msgstr "識別å共通å"
+
+#: usr/local/www/system_camanager.php:193
+#: usr/local/www/system_camanager.php:436
+#: usr/local/www/system_camanager.php:437
+#: usr/local/www/system_camanager.php:195
+#: usr/local/www/system_camanager.php:444
+#: usr/local/www/system_camanager.php:195
+#: usr/local/www/system_camanager.php:444
+msgid "Signing Certificate Authority"
+msgstr "èªè¨¼å±€ã®ç½²å"
+
+#: usr/local/www/system_camanager.php:348
+#: usr/local/www/system_certmanager.php:458
+#: usr/local/www/system_crlmanager.php:283
+#: usr/local/www/system_certmanager.php:557
+#: usr/local/www/system_crlmanager.php:284
+#: usr/local/www/system_camanager.php:355
+#: usr/local/www/system_certmanager.php:566
+#: usr/local/www/system_certmanager.php:567
+#: usr/local/www/system_camanager.php:355
+#: usr/local/www/system_certmanager.php:567
+#: usr/local/www/system_crlmanager.php:284
+msgid "CAs"
+msgstr "CAã¯"
+
+#: usr/local/www/system_camanager.php:349
+#: usr/local/www/system_camanager.php:568
+#: usr/local/www/system_certmanager.php:459
+#: usr/local/www/system_crlmanager.php:284
+#: usr/local/www/system_crlmanager.php:489
+#: usr/local/www/system_certmanager.php:558
+#: usr/local/www/system_camanager.php:569
+#: usr/local/www/system_crlmanager.php:285
+#: usr/local/www/system_crlmanager.php:522
+#: usr/local/www/system_camanager.php:356
+#: usr/local/www/system_camanager.php:593
+#: usr/local/www/system_certmanager.php:567
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_camanager.php:356
+#: usr/local/www/system_camanager.php:593
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_crlmanager.php:285
+#: usr/local/www/system_crlmanager.php:522
+msgid "Certificates"
+msgstr "証明書"
+
+#: usr/local/www/system_camanager.php:350
+#: usr/local/www/system_certmanager.php:460
+#: usr/local/www/system_crlmanager.php:285
+#: usr/local/www/system_certmanager.php:559
+#: usr/local/www/system_crlmanager.php:286
+#: usr/local/www/system_camanager.php:357
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_certmanager.php:569
+#: usr/local/www/system_camanager.php:357
+#: usr/local/www/system_certmanager.php:569
+#: usr/local/www/system_crlmanager.php:286
+msgid "Certificate Revocation"
+msgstr "証明書失効"
+
+#: usr/local/www/system_camanager.php:376
+#: usr/local/www/system_certmanager.php:475
+#: usr/local/www/system_crlmanager.php:300
+#: usr/local/www/system_certmanager.php:574
+#: usr/local/www/system_crlmanager.php:301
+#: usr/local/www/system_camanager.php:383
+#: usr/local/www/system_certmanager.php:583
+#: usr/local/www/system_certmanager.php:584
+#: usr/local/www/system_camanager.php:383
+#: usr/local/www/system_certmanager.php:584
+#: usr/local/www/system_crlmanager.php:301
+msgid "Method"
+msgstr "方法"
+
+#: usr/local/www/system_camanager.php:398
+#: usr/local/www/system_camanager.php:405
+#: usr/local/www/system_camanager.php:405
+msgid "Existing Certificate Authority"
+msgstr "既存ã®èªè¨¼å±€"
+
+#: usr/local/www/system_camanager.php:410
+#: usr/local/www/system_camanager.php:417
+#: usr/local/www/system_camanager.php:417
+msgid "Certificate Private Key"
+msgstr "証明書ã®ç§˜å¯†éµ"
+
+#: usr/local/www/system_camanager.php:410
+#: usr/local/www/system_camanager.php:417
+#: usr/local/www/system_camanager.php:417
+msgid "(optional)"
+msgstr "(オプション)"
+
+#: usr/local/www/system_camanager.php:414
+#: usr/local/www/system_camanager.php:421
+#: usr/local/www/system_camanager.php:421
+msgid ""
+"Paste the private key for the above certificate here. This is optional in "
+"most cases, but required if you need to generate a Certificate Revocation "
+"List (CRL)."
+msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã€ã€Œã“ã“ã«ä¸Šè¨˜ã®è¨¼æ˜Žæ›¸ã®ç§˜å¯†éµã‚’ペーストã—ã¾ã™ã€‚ã“ã‚Œã¯ã€ã‚ªãƒ—ションã®ã‚る「ã—ã‹ã—ã€ã‚ãªãŸãŒè¨¼æ˜Žæ›¸å¤±åŠ¹ã€ãƒªã‚¹ãƒˆï¼ˆ CRL)を生æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«å¿…è¦ã€‚"
+
+#: usr/local/www/system_camanager.php:420
+#: usr/local/www/system_crlmanager.php:374
+#: usr/local/www/system_crlmanager.php:375
+#: usr/local/www/system_crlmanager.php:375
+msgid "Serial"
+msgstr "シリアル"
+
+#: usr/local/www/system_camanager.php:433
+#: usr/local/www/system_camanager.php:434
+#: usr/local/www/system_camanager.php:441
+#: usr/local/www/system_camanager.php:441
+msgid "Internal Certificate Authority"
+msgstr "内部èªè¨¼å±€"
+
+#: usr/local/www/system_camanager.php:472
+#: usr/local/www/system_certmanager.php:585
+#: usr/local/www/system_crlmanager.php:369
+#: usr/local/www/system_certmanager.php:701
+#: usr/local/www/system_camanager.php:473
+#: usr/local/www/system_crlmanager.php:370
+#: usr/local/www/system_camanager.php:496
+#: usr/local/www/system_certmanager.php:726
+#: usr/local/www/system_certmanager.php:727
+#: usr/local/www/system_camanager.php:496
+#: usr/local/www/system_certmanager.php:727
+#: usr/local/www/system_crlmanager.php:370
+msgid "days"
+msgstr "æ—¥"
+
+#: usr/local/www/system_camanager.php:480
+#: usr/local/www/system_certmanager.php:593
+#: usr/local/www/system_certmanager.php:676
+#: usr/local/www/system_certmanager.php:709
+#: usr/local/www/system_certmanager.php:842
+#: usr/local/www/system_camanager.php:481
+#: usr/local/www/system_camanager.php:504
+#: usr/local/www/system_certmanager.php:734
+#: usr/local/www/system_certmanager.php:883
+#: usr/local/www/system_certmanager.php:735
+#: usr/local/www/system_certmanager.php:887
+#: usr/local/www/system_camanager.php:504
+#: usr/local/www/system_certmanager.php:735
+#: usr/local/www/system_certmanager.php:887
+msgid "Country Code"
+msgstr "国コード"
+
+#: usr/local/www/system_camanager.php:494
+#: usr/local/www/system_certmanager.php:599
+#: usr/local/www/system_certmanager.php:690
+#: usr/local/www/system_certmanager.php:715
+#: usr/local/www/system_certmanager.php:856
+#: usr/local/www/system_camanager.php:495
+#: usr/local/www/system_camanager.php:519
+#: usr/local/www/system_certmanager.php:740
+#: usr/local/www/system_certmanager.php:898
+#: usr/local/www/system_certmanager.php:741
+#: usr/local/www/system_certmanager.php:902
+#: usr/local/www/system_camanager.php:519
+#: usr/local/www/system_certmanager.php:741
+#: usr/local/www/system_certmanager.php:902
+msgid "State or Province"
+msgstr "å·žã¾ãŸã¯çœŒ"
+
+#: usr/local/www/system_camanager.php:498
+#: usr/local/www/system_camanager.php:508
+#: usr/local/www/system_camanager.php:518
+#: usr/local/www/system_camanager.php:528
+#: usr/local/www/system_camanager.php:538
+#: usr/local/www/system_camanager.php:499
+#: usr/local/www/system_camanager.php:509
+#: usr/local/www/system_camanager.php:519
+#: usr/local/www/system_camanager.php:529
+#: usr/local/www/system_camanager.php:539
+#: usr/local/www/system_camanager.php:523
+#: usr/local/www/system_camanager.php:533
+#: usr/local/www/system_camanager.php:543
+#: usr/local/www/system_camanager.php:553
+#: usr/local/www/system_camanager.php:563
+#: usr/local/www/system_camanager.php:523
+#: usr/local/www/system_camanager.php:533
+#: usr/local/www/system_camanager.php:543
+#: usr/local/www/system_camanager.php:553
+#: usr/local/www/system_camanager.php:563
+msgid "ex:"
+msgstr "例:"
+
+#: usr/local/www/system_camanager.php:500
+#: usr/local/www/system_certmanager.php:696
+#: usr/local/www/system_certmanager.php:862
+#: usr/local/www/system_camanager.php:501
+#: usr/local/www/system_camanager.php:525
+#: usr/local/www/system_certmanager.php:904
+#: usr/local/www/system_certmanager.php:908
+#: usr/local/www/system_camanager.php:525
+#: usr/local/www/system_certmanager.php:908
+msgid "Texas"
+msgstr "テキサス州"
+
+#: usr/local/www/system_camanager.php:504
+#: usr/local/www/system_certmanager.php:605
+#: usr/local/www/system_certmanager.php:700
+#: usr/local/www/system_certmanager.php:721
+#: usr/local/www/system_certmanager.php:866
+#: usr/local/www/system_camanager.php:505
+#: usr/local/www/system_camanager.php:529
+#: usr/local/www/system_certmanager.php:746
+#: usr/local/www/system_certmanager.php:908
+#: usr/local/www/system_certmanager.php:747
+#: usr/local/www/system_certmanager.php:912
+#: usr/local/www/system_camanager.php:529
+#: usr/local/www/system_certmanager.php:747
+#: usr/local/www/system_certmanager.php:912
+msgid "City"
+msgstr "都市"
+
+#: usr/local/www/system_camanager.php:510
+#: usr/local/www/system_certmanager.php:706
+#: usr/local/www/system_certmanager.php:872
+#: usr/local/www/system_camanager.php:511
+#: usr/local/www/system_camanager.php:535
+#: usr/local/www/system_certmanager.php:914
+#: usr/local/www/system_certmanager.php:918
+#: usr/local/www/system_camanager.php:535
+#: usr/local/www/system_certmanager.php:918
+msgid "Austin"
+msgstr "オースティン"
+
+#: usr/local/www/system_camanager.php:514
+#: usr/local/www/system_certmanager.php:611
+#: usr/local/www/system_certmanager.php:710
+#: usr/local/www/system_certmanager.php:727
+#: usr/local/www/system_certmanager.php:876
+#: usr/local/www/system_camanager.php:515
+#: usr/local/www/system_camanager.php:539
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:918
+#: usr/local/www/system_certmanager.php:753
+#: usr/local/www/system_certmanager.php:922
+#: usr/local/www/system_camanager.php:539
+#: usr/local/www/system_certmanager.php:753
+#: usr/local/www/system_certmanager.php:922
+msgid "Organization"
+msgstr "組織"
+
+#: usr/local/www/system_camanager.php:520
+#: usr/local/www/system_certmanager.php:716
+#: usr/local/www/system_certmanager.php:882
+#: usr/local/www/system_camanager.php:521
+#: usr/local/www/system_camanager.php:545
+#: usr/local/www/system_certmanager.php:924
+#: usr/local/www/system_certmanager.php:928
+#: usr/local/www/system_camanager.php:545
+#: usr/local/www/system_certmanager.php:928
+msgid "My Company Inc."
+msgstr "ç§ã®ä¼šç¤¾ï¼ˆæ ªï¼‰"
+
+#: usr/local/www/system_camanager.php:530
+#: usr/local/www/system_camanager.php:531
+#: usr/local/www/system_camanager.php:555
+#: usr/local/www/system_camanager.php:555
+msgid "admin@mycompany.com"
+msgstr "admin@mycompany.com"
+
+#: usr/local/www/system_camanager.php:540
+#: usr/local/www/system_camanager.php:541
+#: usr/local/www/system_camanager.php:565
+#: usr/local/www/system_camanager.php:565
+msgid "internal-ca"
+msgstr "内部CA"
+
+#: usr/local/www/system_camanager.php:566
+#: usr/local/www/system_crlmanager.php:488
+#: usr/local/www/system_camanager.php:567
+#: usr/local/www/system_crlmanager.php:521
+#: usr/local/www/system_camanager.php:591
+#: usr/local/www/system_camanager.php:591
+#: usr/local/www/system_crlmanager.php:521
+msgid "Internal"
+msgstr "内部"
+
+#: usr/local/www/system_camanager.php:567
+#: usr/local/www/system_certmanager.php:855
+#: usr/local/www/system_certmanager.php:1021
+#: usr/local/www/system_camanager.php:568
+#: usr/local/www/system_camanager.php:592
+#: usr/local/www/system_certmanager.php:1063
+#: usr/local/www/system_certmanager.php:1067
+#: usr/local/www/system_camanager.php:592
+#: usr/local/www/system_certmanager.php:1067
+msgid "Issuer"
+msgstr "発行者"
+
+#: usr/local/www/system_camanager.php:569
+#: usr/local/www/system_certmanager.php:856
+#: usr/local/www/system_certmanager.php:1022
+#: usr/local/www/system_camanager.php:570
+#: usr/local/www/system_camanager.php:594
+#: usr/local/www/system_certmanager.php:1064
+#: usr/local/www/system_certmanager.php:1068
+#: usr/local/www/system_camanager.php:594
+#: usr/local/www/system_certmanager.php:1068
+msgid "Distinguished Name"
+msgstr "識別å"
+
+#: usr/local/www/system_camanager.php:579
+#: usr/local/www/system_certmanager.php:869
+#: usr/local/www/system_certmanager.php:1036
+#: usr/local/www/system_camanager.php:580
+#: usr/local/www/system_camanager.php:605
+#: usr/local/www/system_certmanager.php:1079
+#: usr/local/www/system_certmanager.php:1083
+#: usr/local/www/system_camanager.php:605
+#: usr/local/www/system_certmanager.php:1083
+msgid "self-signed"
+msgstr "自己署å"
+
+#: usr/local/www/system_camanager.php:581
+#: usr/local/www/system_certmanager.php:871
+#: usr/local/www/system_certmanager.php:1038
+#: usr/local/www/system_camanager.php:582
+#: usr/local/www/system_camanager.php:607
+#: usr/local/www/system_certmanager.php:1081
+#: usr/local/www/system_certmanager.php:1085
+#: usr/local/www/system_camanager.php:607
+#: usr/local/www/system_certmanager.php:1085
+msgid "external"
+msgstr "外部"
+
+#: usr/local/www/system_camanager.php:626
+#: usr/local/www/system_camanager.php:627
+#: usr/local/www/system_camanager.php:665
+#: usr/local/www/system_camanager.php:665
+msgid "edit CA"
+msgstr "カリフォルニア州ã®ç·¨é›†"
+
+#: usr/local/www/system_camanager.php:629
+#: usr/local/www/system_camanager.php:630
+#: usr/local/www/system_camanager.php:668
+#: usr/local/www/system_camanager.php:668
+msgid "export CA cert"
+msgstr "輸出CA証明書"
+
+#: usr/local/www/system_camanager.php:633
+#: usr/local/www/system_camanager.php:634
+#: usr/local/www/system_camanager.php:672
+#: usr/local/www/system_camanager.php:672
+msgid "export CA private key"
+msgstr "輸出CA秘密éµ"
+
+#: usr/local/www/system_camanager.php:636
+#: usr/local/www/system_camanager.php:637
+#: usr/local/www/system_camanager.php:675
+#: usr/local/www/system_camanager.php:675
+msgid ""
+"Do you really want to delete this Certificate Authority and its CRLs, and "
+"unreference any associated certificates?"
+msgstr "「ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®èªè¨¼å±€ã¨ãã®CRLを削除ã—ãŸã„ã€ã¨ãªã„ "ä»»æ„ã®é–¢é€£ã®è¨¼æ˜Žæ›¸éžå‚照?"
+
+#: usr/local/www/system_camanager.php:637
+#: usr/local/www/system_camanager.php:638
+#: usr/local/www/system_camanager.php:676
+#: usr/local/www/system_camanager.php:676
+msgid "delete ca"
+msgstr "CAを削除"
+
+#: usr/local/www/system_camanager.php:649
+#: usr/local/www/system_certmanager.php:952
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_camanager.php:650
+#: usr/local/www/system_certmanager.php:1135
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1191
+#: usr/local/www/system_certmanager.php:1195
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1195
+msgid "add or import ca"
+msgstr "CAを追加ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹"
+
+#: usr/local/www/system_camanager.php:649
+#: usr/local/www/system_certmanager.php:952
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_camanager.php:650
+#: usr/local/www/system_certmanager.php:1135
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1191
+#: usr/local/www/system_certmanager.php:1195
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1195
+msgid "add ca"
+msgstr "CAを追加"
+
+#: usr/local/www/system_camanager.php:656
+#: usr/local/www/system_camanager.php:657
+#: usr/local/www/system_camanager.php:695
+#: usr/local/www/system_camanager.php:695
+msgid "Additional trusted Certificate Authorities can be added here."
+msgstr "追加ã®ä¿¡é ¼ã§ãã‚‹èªè¨¼å±€ã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_certmanager.php:44
+#: usr/local/www/system_certmanager.php:44
+msgid "Import an existing Certificate"
+msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’インãƒãƒ¼ãƒˆã™ã‚‹"
+
+#: usr/local/www/system_certmanager.php:45
+#: usr/local/www/system_certmanager.php:45
+msgid "Create an internal Certificate"
+msgstr "内部証明書を作æˆã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_certmanager.php:46
+#: usr/local/www/system_certmanager.php:46
+msgid "Create a Certificate Signing Request"
+msgstr "証明書署åè¦æ±‚を作æˆã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_certmanager.php:51
+#: usr/local/www/system_certmanager.php:56
+#: usr/local/www/system_certmanager.php:57
+#: usr/local/www/system_certmanager.php:57
+msgid "Certificate Manager"
+msgstr "証明書マãƒãƒ¼ã‚¸ãƒ£"
+
+#: usr/local/www/system_certmanager.php:57
+#: usr/local/www/system_certmanager.php:62
+#: usr/local/www/system_certmanager.php:63
+#: usr/local/www/system_certmanager.php:63
+msgid "Choose an existing certificate"
+msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/system_certmanager.php:96
+#: usr/local/www/system_certmanager.php:101
+#: usr/local/www/system_certmanager.php:102
+#: usr/local/www/system_certmanager.php:102
+#, php-format
+msgid "Certificate %s successfully deleted"
+msgstr "正常ã«å‰Šé™¤ã•ã‚ŒãŸè¨¼æ˜Žæ›¸%s"
+
+#: usr/local/www/system_certmanager.php:166
+#: usr/local/www/system_certmanager.php:194
+#: usr/local/www/system_certmanager.php:197
+#: usr/local/www/system_certmanager.php:197
+msgid "Key data"
+msgstr "é‡è¦ãªãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/system_certmanager.php:177
+#: usr/local/www/system_certmanager.php:549
+#: usr/local/www/system_usermanager.php:190
+#: usr/local/www/system_usermanager.php:711
+#: usr/local/www/system_certmanager.php:205
+#: usr/local/www/system_certmanager.php:648
+#: usr/local/www/system_usermanager.php:709
+#: usr/local/www/system_certmanager.php:208
+#: usr/local/www/system_certmanager.php:657
+#: usr/local/www/system_certmanager.php:658
+#: usr/local/www/system_certmanager.php:208
+#: usr/local/www/system_certmanager.php:658
+#: usr/local/www/system_usermanager.php:190
+#: usr/local/www/system_usermanager.php:709
+msgid "Certificate authority"
+msgstr "èªè¨¼å±€"
+
+#: usr/local/www/system_certmanager.php:205
+#: usr/local/www/system_certmanager.php:234
+#: usr/local/www/system_certmanager.php:237
+#: usr/local/www/system_certmanager.php:237
+msgid "Existing Certificate Choice"
+msgstr "既存ã®è¨¼æ˜Žæ›¸ã®é¸æŠž"
+
+#: usr/local/www/system_certmanager.php:300
+#: usr/local/www/system_certmanager.php:796
+#: usr/local/www/system_certmanager.php:840
+#: usr/local/www/system_certmanager.php:387
+#: usr/local/www/system_certmanager.php:962
+#: usr/local/www/system_certmanager.php:1006
+#: usr/local/www/system_certmanager.php:396
+#: usr/local/www/system_certmanager.php:1004
+#: usr/local/www/system_certmanager.php:1048
+#: usr/local/www/system_certmanager.php:1008
+#: usr/local/www/system_certmanager.php:1052
+#: usr/local/www/system_certmanager.php:396
+#: usr/local/www/system_certmanager.php:1008
+#: usr/local/www/system_certmanager.php:1052
+msgid "Update"
+msgstr "アップデート"
+
+#: usr/local/www/system_certmanager.php:308
+#: usr/local/www/system_certmanager.php:822
+#: usr/local/www/system_certmanager.php:395
+#: usr/local/www/system_certmanager.php:988
+#: usr/local/www/system_certmanager.php:404
+#: usr/local/www/system_certmanager.php:1030
+#: usr/local/www/system_certmanager.php:404
+msgid "Final Certificate data"
+msgstr "最終的ãªè¨¼æ˜Žæ›¸ãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/system_certmanager.php:328
+#: usr/local/www/system_certmanager.php:415
+#: usr/local/www/system_certmanager.php:424
+#: usr/local/www/system_certmanager.php:424
+#, php-format
+msgid "The certificate modulus does not match the signing request modulus."
+msgstr "証明書ã®å¼¾æ€§çŽ‡ã¯ã€ç½²åè¦æ±‚弾性率ã¨ä¸€è‡´ã—ãªã„。"
+
+#: usr/local/www/system_certmanager.php:507
+#: usr/local/www/system_certmanager.php:606
+#: usr/local/www/system_certmanager.php:615
+#: usr/local/www/system_certmanager.php:616
+#: usr/local/www/system_certmanager.php:616
+msgid "Import Certificate"
+msgstr "証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_certmanager.php:519
+#: usr/local/www/system_certmanager.php:618
+#: usr/local/www/system_certmanager.php:627
+#: usr/local/www/system_certmanager.php:628
+#: usr/local/www/system_certmanager.php:628
+msgid "Private key data"
+msgstr "秘密éµãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/system_certmanager.php:523
+#: usr/local/www/system_certmanager.php:622
+#: usr/local/www/system_certmanager.php:631
+#: usr/local/www/system_certmanager.php:632
+#: usr/local/www/system_certmanager.php:632
+msgid "Paste a private key in X.509 PEM format here."
+msgstr "ã“ã“ã§ã€X.509 PEMå½¢å¼ã®ç§˜å¯†éµã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/system_certmanager.php:533
+#: usr/local/www/system_certmanager.php:632
+#: usr/local/www/system_certmanager.php:641
+#: usr/local/www/system_certmanager.php:642
+#: usr/local/www/system_certmanager.php:642
+msgid "Internal Certificate"
+msgstr "内部èªè¨¼"
+
+#: usr/local/www/system_certmanager.php:540
+#: usr/local/www/system_certmanager.php:639
+#: usr/local/www/system_certmanager.php:648
+#: usr/local/www/system_certmanager.php:649
+#: usr/local/www/system_certmanager.php:649
+msgid "No internal Certificate Authorities have been defined. You must"
+msgstr "ã¯å†…部èªè¨¼å±€ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。作業を行ã†å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/system_certmanager.php:542
+#: usr/local/www/system_certmanager.php:641
+#: usr/local/www/system_certmanager.php:650
+#: usr/local/www/system_certmanager.php:651
+#: usr/local/www/system_certmanager.php:651
+msgid "an internal CA before creating an internal certificate."
+msgstr "内部証明書を作æˆã™ã‚‹å‰ã«ã€å†…部CA 。"
+
+#: usr/local/www/system_certmanager.php:623
+#: usr/local/www/system_certmanager.php:726
+#: usr/local/www/system_certmanager.php:739
+#: usr/local/www/system_certmanager.php:892
+#: usr/local/www/system_certmanager.php:764
+#: usr/local/www/system_certmanager.php:934
+#: usr/local/www/system_certmanager.php:765
+#: usr/local/www/system_certmanager.php:938
+#: usr/local/www/system_certmanager.php:765
+#: usr/local/www/system_certmanager.php:938
+msgid "webadmin@mycompany.com"
+msgstr "webadmin@mycompany.com"
+
+#: usr/local/www/system_certmanager.php:637
+#: usr/local/www/system_certmanager.php:736
+#: usr/local/www/system_certmanager.php:753
+#: usr/local/www/system_certmanager.php:902
+#: usr/local/www/system_certmanager.php:778
+#: usr/local/www/system_certmanager.php:944
+#: usr/local/www/system_certmanager.php:779
+#: usr/local/www/system_certmanager.php:948
+#: usr/local/www/system_certmanager.php:779
+#: usr/local/www/system_certmanager.php:948
+msgid "www.example.com"
+msgstr "www.example.com"
+
+#: usr/local/www/system_certmanager.php:653
+#: usr/local/www/system_certmanager.php:817
+#: usr/local/www/system_certmanager.php:842
+#: usr/local/www/system_certmanager.php:846
+#: usr/local/www/system_certmanager.php:846
+msgid "External Signing Request"
+msgstr "外部署åè¦æ±‚"
+
+#: usr/local/www/system_certmanager.php:749
+#: usr/local/www/system_certmanager.php:915
+#: usr/local/www/system_certmanager.php:957
+#: usr/local/www/system_certmanager.php:961
+#: usr/local/www/system_certmanager.php:961
+msgid "Choose an Existing Certificate"
+msgstr "既存ã®è¨¼æ˜Žæ›¸ã‚’é¸æŠžã™ã‚‹"
+
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:918
+#: usr/local/www/system_certmanager.php:960
+#: usr/local/www/system_certmanager.php:964
+#: usr/local/www/system_certmanager.php:964
+msgid "Existing Certificates"
+msgstr "既存ã®è¨¼æ˜Žæ›¸"
+
+#: usr/local/www/system_certmanager.php:810
+#: usr/local/www/system_certmanager.php:976
+#: usr/local/www/system_certmanager.php:1018
+#: usr/local/www/system_certmanager.php:1022
+#: usr/local/www/system_certmanager.php:1022
+msgid "Complete Signing Request"
+msgstr "完全ãªç½²åリクエスト"
+
+#: usr/local/www/system_certmanager.php:814
+#: usr/local/www/system_certmanager.php:980
+#: usr/local/www/system_certmanager.php:1022
+msgid "Signing Request data"
+msgstr "ç½²åè¦æ±‚データ"
+
+#: usr/local/www/system_certmanager.php:818
+#: usr/local/www/system_certmanager.php:984
+#: usr/local/www/system_certmanager.php:1026
+#: usr/local/www/system_certmanager.php:1030
+#: usr/local/www/system_certmanager.php:1030
+msgid ""
+"Copy the certificate signing data from here and forward it to your "
+"certificate authority for signing."
+msgstr "「ã“ã“ã‹ã‚‰è¨¼æ˜Žæ›¸ç½²åデータをコピーã—ã¦ã€ãれを転é€ã™ã‚‹ã€ã«ç½²åã™ã‚‹ãŸã‚ã®èªè¨¼å±€ã€‚"
+
+#: usr/local/www/system_certmanager.php:826
+#: usr/local/www/system_certmanager.php:992
+#: usr/local/www/system_certmanager.php:1034
+#: usr/local/www/system_certmanager.php:1038
+#: usr/local/www/system_certmanager.php:1038
+msgid "Paste the certificate received from your certificate authority here."
+msgstr "ã“ã“ã«ã‚ãªãŸã®èªè¨¼å±€ã‹ã‚‰å—ã‘å–ã£ãŸè¨¼æ˜Žæ›¸ã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/system_certmanager.php:857
+#: usr/local/www/system_crlmanager.php:490
+#: usr/local/www/system_certmanager.php:1023
+#: usr/local/www/system_crlmanager.php:523
+#: usr/local/www/system_certmanager.php:1065
+#: usr/local/www/system_certmanager.php:1069
+#: usr/local/www/system_certmanager.php:1069
+#: usr/local/www/system_crlmanager.php:523
+msgid "In Use"
+msgstr "使用中"
+
+#: usr/local/www/system_certmanager.php:877
+#: usr/local/www/system_certmanager.php:1044
+#: usr/local/www/system_certmanager.php:1087
+#: usr/local/www/system_certmanager.php:1091
+#: usr/local/www/system_certmanager.php:1091
+msgid "external - signature pending"
+msgstr "外部 - ç½²å申請中"
+
+#: usr/local/www/system_certmanager.php:926
+#: usr/local/www/system_usermanager.php:658
+#: usr/local/www/system_certmanager.php:1103
+#: usr/local/www/system_usermanager.php:656
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1162
+#: usr/local/www/system_certmanager.php:1166
+#: usr/local/www/system_certmanager.php:1166
+#: usr/local/www/system_usermanager.php:656
+msgid "export cert"
+msgstr "輸出証明書"
+
+#: usr/local/www/system_certmanager.php:926
+#: usr/local/www/system_certmanager.php:929
+#: usr/local/www/system_certmanager.php:1103
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1162
+#: usr/local/www/system_certmanager.php:1165
+#: usr/local/www/system_certmanager.php:1166
+#: usr/local/www/system_certmanager.php:1169
+#: usr/local/www/system_certmanager.php:1166
+#: usr/local/www/system_certmanager.php:1169
+msgid "export ca"
+msgstr "輸出CA"
+
+#: usr/local/www/system_certmanager.php:929
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1165
+#: usr/local/www/system_certmanager.php:1169
+#: usr/local/www/system_certmanager.php:1169
+msgid "export key"
+msgstr "輸出キー"
+
+#: usr/local/www/system_certmanager.php:932
+#: usr/local/www/system_certmanager.php:1112
+#: usr/local/www/system_certmanager.php:1115
+#: usr/local/www/system_certmanager.php:1171
+#: usr/local/www/system_certmanager.php:1175
+#: usr/local/www/system_certmanager.php:1175
+msgid "Do you really want to delete this Certificate?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_certmanager.php:933
+#: usr/local/www/system_usermanager.php:661
+#: usr/local/www/system_certmanager.php:1113
+#: usr/local/www/system_usermanager.php:659
+#: usr/local/www/system_certmanager.php:1116
+#: usr/local/www/system_certmanager.php:1172
+#: usr/local/www/system_certmanager.php:1176
+#: usr/local/www/system_certmanager.php:1176
+#: usr/local/www/system_usermanager.php:659
+msgid "delete cert"
+msgstr "証明書を削除ã™ã‚‹"
+
+#: usr/local/www/system_certmanager.php:939
+#: usr/local/www/system_certmanager.php:1119
+#: usr/local/www/system_certmanager.php:1122
+#: usr/local/www/system_certmanager.php:1178
+#: usr/local/www/system_certmanager.php:1182
+#: usr/local/www/system_certmanager.php:1182
+msgid "update csr"
+msgstr "æ›´æ–°CSR"
+
+#: usr/local/www/system_certmanager.php:958
+#: usr/local/www/system_certmanager.php:1138
+#: usr/local/www/system_certmanager.php:1141
+#: usr/local/www/system_certmanager.php:1197
+#: usr/local/www/system_certmanager.php:1201
+#: usr/local/www/system_certmanager.php:1201
+msgid "Note: You can only delete a certificate if it is not currently in use."
+msgstr "注æ„:ç¾åœ¨ä½¿ç”¨ã•ã‚Œã¦ã„ãªã„å ´åˆã«ã®ã¿ã€è¨¼æ˜Žæ›¸ã‚’削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_crlmanager.php:46
+#: usr/local/www/system_crlmanager.php:46
+msgid "Certificate Revocation List Manager"
+msgstr "証明書失効リストマãƒãƒ¼ã‚¸ãƒ£"
+
+#: usr/local/www/system_crlmanager.php:49
+#: usr/local/www/system_crlmanager.php:49
+msgid "Create an internal Certificate Revocation List"
+msgstr "内部証明書失効リストを作æˆã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_crlmanager.php:50
+#: usr/local/www/system_crlmanager.php:50
+msgid "Import an existing Certificate Revocation List"
+msgstr "既存ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’インãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_crlmanager.php:86
+#: usr/local/www/system_crlmanager.php:86
+msgid "Invalid CRL reference."
+msgstr "無効ãªCRLã®å‚照。"
+
+#: usr/local/www/system_crlmanager.php:92
+#: usr/local/www/system_crlmanager.php:92
+#, php-format
+msgid "Certificate Revocation List %s is in use and cannot be deleted"
+msgstr "証明書失効リストã®%sãŒä½¿ç”¨ã•ã‚Œã€å‰Šé™¤ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/system_crlmanager.php:98
+#: usr/local/www/system_crlmanager.php:98
+#, php-format
+msgid "Certificate Revocation List %s successfully deleted"
+msgstr "証明書失効リストãŒæ­£å¸¸ã«å‰Šé™¤ã•ã‚Œ%s"
+
+#: usr/local/www/system_crlmanager.php:136
+#: usr/local/www/system_crlmanager.php:136
+msgid "Both the Certificate and CRL must be specified."
+msgstr "証明書ã¨CRLã®ä¸¡æ–¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_crlmanager.php:140
+#: usr/local/www/system_crlmanager.php:140
+msgid "CA mismatch between the Certificate and CRL. Unable to Revoke."
+msgstr "証明書ã¨CRLã®é–“ã®CAãŒä¸€è‡´ã—ã¾ã›ã‚“。å–り消ã—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_crlmanager.php:143
+#: usr/local/www/system_crlmanager.php:143
+msgid "Cannot revoke certificates for an imported/external CRL."
+msgstr "インãƒãƒ¼ãƒˆã•ã‚ŒãŸå¤–部/ CRLã®è¨¼æ˜Žæ›¸ã‚’失効ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_crlmanager.php:175
+#: usr/local/www/system_crlmanager.php:177
+#: usr/local/www/system_crlmanager.php:175
+#: usr/local/www/system_crlmanager.php:177
+#, php-format
+msgid "Deleted Certificate %s from CRL %s"
+msgstr "CRLã®%sã‹ã‚‰å‰Šé™¤ã•ã‚ŒãŸè¨¼æ˜Žæ›¸ã®%s"
+
+#: usr/local/www/system_crlmanager.php:179
+#: usr/local/www/system_crlmanager.php:179
+#, php-format
+msgid "Failed to delete Certificate %s from CRL %s"
+msgstr "CRLã®%sã‹ã‚‰è¨¼æ˜Žæ›¸%sã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/system_crlmanager.php:194
+#: usr/local/www/system_crlmanager.php:193
+#: usr/local/www/system_crlmanager.php:193
+msgid "Certificate Revocation List data"
+msgstr "証明書失効リストデータ"
+
+#: usr/local/www/system_crlmanager.php:201
+#: usr/local/www/system_crlmanager.php:324
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/vpn_openvpn_server.php:287
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/system_crlmanager.php:200
+#: usr/local/www/system_crlmanager.php:325
+#: usr/local/www/vpn_openvpn_server.php:288
+#: usr/local/www/vpn_openvpn_client.php:220
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/vpn_openvpn_server.php:309
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/system_crlmanager.php:200
+#: usr/local/www/system_crlmanager.php:325
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/vpn_openvpn_server.php:309
+msgid "Certificate Authority"
+msgstr "èªè¨¼å±€"
+
+#: usr/local/www/system_crlmanager.php:345
+#: usr/local/www/system_crlmanager.php:346
+#: usr/local/www/system_crlmanager.php:346
+msgid "Existing Certificate Revocation List"
+msgstr "既存ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/system_crlmanager.php:349
+#: usr/local/www/system_crlmanager.php:350
+#: usr/local/www/system_crlmanager.php:410
+#: usr/local/www/system_crlmanager.php:350
+#: usr/local/www/system_crlmanager.php:410
+msgid "CRL data"
+msgstr "CRLã®ãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/system_crlmanager.php:353
+#: usr/local/www/system_crlmanager.php:354
+#: usr/local/www/system_crlmanager.php:414
+#: usr/local/www/system_crlmanager.php:354
+#: usr/local/www/system_crlmanager.php:414
+msgid "Paste a Certificate Revocation List in X.509 CRL format here."
+msgstr "ã“ã“ã§ã€X.509 CRLã®å½¢å¼ã§è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/system_crlmanager.php:363
+#: usr/local/www/system_crlmanager.php:364
+#: usr/local/www/system_crlmanager.php:364
+msgid "Internal Certificate Revocation List"
+msgstr "内部証明書失効リスト"
+
+#: usr/local/www/system_crlmanager.php:370
+#: usr/local/www/system_crlmanager.php:371
+#: usr/local/www/system_crlmanager.php:371
+msgid "Default: 9999"
+msgstr "デフォルト: 9999"
+
+#: usr/local/www/system_crlmanager.php:378
+#: usr/local/www/system_crlmanager.php:379
+#: usr/local/www/system_crlmanager.php:379
+msgid "Default: 0"
+msgstr "デフォルト: 0"
+
+#: usr/local/www/system_crlmanager.php:401
+#: usr/local/www/system_crlmanager.php:434
+#: usr/local/www/system_crlmanager.php:434
+msgid "Currently Revoked Certificates for CRL"
+msgstr "CRLã®ç¾åœ¨å¤±åŠ¹ã—ãŸè¨¼æ˜Žæ›¸"
+
+#: usr/local/www/system_crlmanager.php:405
+#: usr/local/www/system_crlmanager.php:438
+#: usr/local/www/system_crlmanager.php:438
+msgid "Certificate Name"
+msgstr "証明書ã®åå‰"
+
+#: usr/local/www/system_crlmanager.php:406
+#: usr/local/www/system_crlmanager.php:439
+#: usr/local/www/system_crlmanager.php:439
+msgid "Revocation Reason"
+msgstr "失効ç†ç”±"
+
+#: usr/local/www/system_crlmanager.php:407
+#: usr/local/www/system_crlmanager.php:440
+#: usr/local/www/system_crlmanager.php:440
+msgid "Revoked At"
+msgstr "ã§ã‚‚å–り消ã™"
+
+#: usr/local/www/system_crlmanager.php:416
+#: usr/local/www/system_crlmanager.php:449
+#: usr/local/www/system_crlmanager.php:449
+msgid "No Certificates Found for this CRL."
+msgstr "ã“ã®CRLãŒè¦‹ã¤ã‹ã‚Šã¾ã›è¨¼æ˜Žæ›¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_crlmanager.php:435
+#: usr/local/www/system_crlmanager.php:468
+#: usr/local/www/system_crlmanager.php:468
+msgid "Do you really want to delete this Certificate from the CRL?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€CRLã‹ã‚‰ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_crlmanager.php:436
+#: usr/local/www/system_crlmanager.php:469
+#: usr/local/www/system_crlmanager.php:469
+msgid "Delete this certificate from the CRL "
+msgstr "CRLã‹ã‚‰ã“ã®è¨¼æ˜Žæ›¸ã‚’削除ã™ã‚‹"
+
+#: usr/local/www/system_crlmanager.php:453
+#: usr/local/www/system_crlmanager.php:486
+#: usr/local/www/system_crlmanager.php:486
+msgid "No Certificates Found for this CA."
+msgstr "ã“ã®CAãŒè¦‹ã¤ã‹ã‚Šã¾ã›è¨¼æ˜Žæ›¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_crlmanager.php:460
+#: usr/local/www/system_crlmanager.php:493
+#: usr/local/www/system_crlmanager.php:493
+msgid "Choose a Certificate to Revoke"
+msgstr "å–り消ã™ã«ã¯ã€è¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/system_crlmanager.php:465
+#: usr/local/www/system_crlmanager.php:498
+#: usr/local/www/system_crlmanager.php:498
+msgid "Reason"
+msgstr "ç†ç”±"
+
+#: usr/local/www/system_crlmanager.php:527
+#: usr/local/www/system_crlmanager.php:560
+#: usr/local/www/system_crlmanager.php:568
+#: usr/local/www/system_crlmanager.php:568
+#, php-format
+msgid "Add or Import CRL for %s"
+msgstr "%sãŸã‚ã«è¿½åŠ ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã€CRL"
+
+#: usr/local/www/system_crlmanager.php:527
+#: usr/local/www/system_crlmanager.php:531
+#: usr/local/www/system_crlmanager.php:560
+#: usr/local/www/system_crlmanager.php:564
+#: usr/local/www/system_crlmanager.php:568
+#: usr/local/www/system_crlmanager.php:572
+#: usr/local/www/system_crlmanager.php:568
+#: usr/local/www/system_crlmanager.php:572
+msgid "add crl"
+msgstr "CRLを追加"
+
+#: usr/local/www/system_crlmanager.php:531
+#: usr/local/www/system_crlmanager.php:564
+#: usr/local/www/system_crlmanager.php:572
+#: usr/local/www/system_crlmanager.php:572
+#, php-format
+msgid "Import CRL for %s"
+msgstr "%sã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆCRL"
+
+#: usr/local/www/system_crlmanager.php:552
+#: usr/local/www/system_crlmanager.php:585
+#: usr/local/www/system_crlmanager.php:593
+#: usr/local/www/system_crlmanager.php:593
+msgid "Export CRL"
+msgstr "輸出CRL"
+
+#: usr/local/www/system_crlmanager.php:557
+#: usr/local/www/system_crlmanager.php:590
+#: usr/local/www/system_crlmanager.php:594
+#: usr/local/www/system_crlmanager.php:598
+#: usr/local/www/system_crlmanager.php:602
+#: usr/local/www/system_crlmanager.php:598
+#: usr/local/www/system_crlmanager.php:602
+msgid "Edit CRL"
+msgstr "編集CRL"
+
+#: usr/local/www/system_crlmanager.php:561
+#: usr/local/www/system_crlmanager.php:598
+#: usr/local/www/system_crlmanager.php:606
+#: usr/local/www/system_crlmanager.php:606
+msgid "Do you really want to delete this Certificate Revocation List?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_crlmanager.php:562
+#: usr/local/www/system_crlmanager.php:599
+#: usr/local/www/system_crlmanager.php:607
+#: usr/local/www/system_crlmanager.php:607
+msgid "Delete CRL"
+msgstr "CRLを削除"
+
+#: usr/local/www/system_crlmanager.php:582
+#: usr/local/www/system_crlmanager.php:619
+#: usr/local/www/system_crlmanager.php:531
+#: usr/local/www/system_crlmanager.php:531
+msgid "Additional Certificate Revocation Lists can be added here."
+msgstr "追加ã®è¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆã¯ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_gateway_groups.php:75
+#: usr/local/www/system_gateway_groups.php:76
+#: usr/local/www/system_gateway_groups.php:85
+#: usr/local/www/system_gateway_groups.php:85
+msgid "removed gateway group"
+msgstr "削除ゲートウェイ·グループ"
+
+#: usr/local/www/system_gateway_groups.php:101
+#: usr/local/www/system_gateway_groups.php:102
+#: usr/local/www/system_gateway_groups.php:111
+#: usr/local/www/system_gateway_groups.php:111
+#, php-format
+msgid ""
+"The gateway configuration has been changed.%sYou must apply the changes in "
+"order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚「ゲートウェイ設定ã¯changed.%sYouãŒã§å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã—ãŸã€ 。"
+
+#: usr/local/www/system_gateway_groups.php:165
+#: usr/local/www/system_gateway_groups.php:166
+#: usr/local/www/system_gateway_groups.php:187
+#: usr/local/www/system_gateway_groups.php:187
+msgid "Do you really want to delete this gateway group?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_gateway_groups.php:195
+#: usr/local/www/system_gateway_groups.php:196
+#: usr/local/www/system_gateway_groups.php:205
+#: usr/local/www/system_gateway_groups.php:205
+msgid ""
+"Remember to use these Gateway Groups in firewall rules in order to enable "
+"load balancing, failover, or policy-based routing. Without rules directing "
+"traffic into the Gateway Groups, they will not be used."
+msgstr "ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã€ãƒ•ã‚§ã‚¤ãƒ«ã‚ªãƒ¼ãƒãƒ¼ã€ã¾ãŸã¯ãƒãƒªã‚·ãƒ¼ãƒ™ãƒ¼ã‚¹ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã‚’有効ã«ã™ã‚‹ãŸã‚ã«ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒ«ãƒ¼ãƒ«ã§ã“れらã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚°ãƒ«ãƒ¼ãƒ—を使用ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„〠。ゲートウェイグループã«ã€Œãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’å°ŽãルールãŒãªã‘ã‚Œã°ã€ãれらã¯ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateway_groups_edit.php:50
+#: usr/local/www/system_gateway_groups_edit.php:53
+#: usr/local/www/system_gateway_groups_edit.php:53
+msgid "Member Down"
+msgstr "メンãƒãƒ¼ãƒ€ã‚¦ãƒ³"
+
+#: usr/local/www/system_gateway_groups_edit.php:51
+#: usr/local/www/system_gateway_groups_edit.php:54
+#: usr/local/www/system_gateway_groups_edit.php:54
+msgid "Packet Loss"
+msgstr "パケットロス"
+
+#: usr/local/www/system_gateway_groups_edit.php:52
+#: usr/local/www/system_gateway_groups_edit.php:55
+#: usr/local/www/system_gateway_groups_edit.php:55
+msgid "High Latency"
+msgstr "高é…延"
+
+#: usr/local/www/system_gateway_groups_edit.php:53
+#: usr/local/www/system_gateway_groups_edit.php:56
+#: usr/local/www/system_gateway_groups_edit.php:56
+msgid "Packet Loss or High Latency"
+msgstr "パケットæ失ã¾ãŸã¯é«˜ã„レイテンシ"
+
+#: usr/local/www/system_gateway_groups_edit.php:85
+#: usr/local/www/system_gateway_groups_edit.php:88
+#: usr/local/www/system_gateway_groups_edit.php:88
+msgid "A valid gateway group name must be specified."
+msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—åを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateway_groups_edit.php:88
+#: usr/local/www/system_gateways_edit.php:106
+#: usr/local/www/system_gateway_groups_edit.php:91
+#: usr/local/www/system_gateways_edit.php:107
+#: usr/local/www/system_gateways_edit.php:108
+#: usr/local/www/system_gateways_edit.php:108
+#: usr/local/www/system_gateway_groups_edit.php:91
+msgid "The gateway name must not contain invalid characters."
+msgstr "ゲートウェイåã«ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateway_groups_edit.php:99
+#: usr/local/www/system_gateway_groups_edit.php:102
+#: usr/local/www/system_gateway_groups_edit.php:105
+#: usr/local/www/system_gateway_groups_edit.php:105
+#, php-format
+msgid "A gateway group with this name "%s" already exists."
+msgstr "ã“ã®åå‰ã€Œ %s ã€ã¨ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_gateway_groups_edit.php:115
+#: usr/local/www/system_gateway_groups_edit.php:119
+#: usr/local/www/system_gateway_groups_edit.php:122
+#: usr/local/www/system_gateway_groups_edit.php:122
+#, php-format
+msgid ""
+"A gateway group cannot have the same name with a gateway "%s" please "
+"choose another name."
+msgstr "「ゲートウェイ·グループã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã¨åŒã˜åå‰ã‚’æŒã¤ã“ã¨ã¯ã§ãã¾ã›ã‚“""ãã ã•ã„ã€åˆ¥ã®åå‰ã‚’é¸æŠžã—%s 。"
+
+#: usr/local/www/system_gateway_groups_edit.php:119
+#: usr/local/www/system_gateway_groups_edit.php:123
+#: usr/local/www/system_gateway_groups_edit.php:126
+#: usr/local/www/system_gateway_groups_edit.php:126
+msgid "No gateway(s) have been selected to be used in this group"
+msgstr "ã¾ã ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ï¼ˆè¤‡æ•°å¯ï¼‰ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—内ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«é¸æŠžã•ã‚Œã¦ã„ãªã„"
+
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/system_gateways_edit.php:344
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/system_gateways_edit.php:350
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/system_gateways_edit.php:456
+#: usr/local/www/system_gateways_edit.php:458
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_gateways_edit.php:488
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_gateways_edit.php:488
+msgid "Edit gateway"
+msgstr "編集ゲートウェイ"
+
+#: usr/local/www/system_gateway_groups_edit.php:155
+#: usr/local/www/system_gateway_groups_edit.php:166
+#: usr/local/www/system_gateway_groups_edit.php:225
+msgid "Edit gateway entry"
+msgstr "編集ゲートウェイエントリ"
+
+#: usr/local/www/system_gateway_groups_edit.php:164
+#: usr/local/www/system_gateway_groups_edit.php:175
+#: usr/local/www/system_gateway_groups_edit.php:234
+#: usr/local/www/system_gateway_groups_edit.php:238
+#: usr/local/www/system_gateway_groups_edit.php:238
+msgid "Gateway Priority"
+msgstr "ゲートウェイã®å„ªå…ˆé †ä½"
+
+#: usr/local/www/system_gateway_groups_edit.php:185
+#: usr/local/www/system_gateway_groups_edit.php:208
+#: usr/local/www/system_gateway_groups_edit.php:268
+#: usr/local/www/system_gateway_groups_edit.php:272
+#: usr/local/www/system_gateway_groups_edit.php:272
+msgid "Never"
+msgstr "決ã—ã¦"
+
+#: usr/local/www/system_gateway_groups_edit.php:186
+#: usr/local/www/system_gateway_groups_edit.php:209
+#: usr/local/www/system_gateway_groups_edit.php:269
+#: usr/local/www/system_gateway_groups_edit.php:273
+#: usr/local/www/system_gateway_groups_edit.php:273
+msgid "Tier 1"
+msgstr "ティア1"
+
+#: usr/local/www/system_gateway_groups_edit.php:187
+#: usr/local/www/system_gateway_groups_edit.php:210
+#: usr/local/www/system_gateway_groups_edit.php:270
+#: usr/local/www/system_gateway_groups_edit.php:274
+#: usr/local/www/system_gateway_groups_edit.php:274
+msgid "Tier 2"
+msgstr "ティア2"
+
+#: usr/local/www/system_gateway_groups_edit.php:188
+#: usr/local/www/system_gateway_groups_edit.php:211
+#: usr/local/www/system_gateway_groups_edit.php:271
+#: usr/local/www/system_gateway_groups_edit.php:275
+#: usr/local/www/system_gateway_groups_edit.php:275
+msgid "Tier 3"
+msgstr "ティア3"
+
+#: usr/local/www/system_gateway_groups_edit.php:189
+#: usr/local/www/system_gateway_groups_edit.php:212
+#: usr/local/www/system_gateway_groups_edit.php:272
+#: usr/local/www/system_gateway_groups_edit.php:276
+#: usr/local/www/system_gateway_groups_edit.php:276
+msgid "Tier 4"
+msgstr "ティア4"
+
+#: usr/local/www/system_gateway_groups_edit.php:190
+#: usr/local/www/system_gateway_groups_edit.php:213
+#: usr/local/www/system_gateway_groups_edit.php:273
+#: usr/local/www/system_gateway_groups_edit.php:277
+#: usr/local/www/system_gateway_groups_edit.php:277
+msgid "Tier 5"
+msgstr "ティア5"
+
+#: usr/local/www/system_gateway_groups_edit.php:195
+#: usr/local/www/system_gateway_groups_edit.php:247
+#: usr/local/www/system_gateway_groups_edit.php:307
+#: usr/local/www/system_gateway_groups_edit.php:311
+#: usr/local/www/system_gateway_groups_edit.php:311
+msgid "Link Priority"
+msgstr "リンク優先順ä½"
+
+#: usr/local/www/system_gateway_groups_edit.php:196
+#: usr/local/www/system_gateway_groups_edit.php:248
+#: usr/local/www/system_gateway_groups_edit.php:308
+#: usr/local/www/system_gateway_groups_edit.php:312
+#: usr/local/www/system_gateway_groups_edit.php:312
+msgid ""
+"The priority selected here defines in what order failover and balancing of "
+"links will be done. Multiple links of the same priority will balance "
+"connections until all links in the priority will be exhausted. If all links "
+"in a priority level are exhausted we will use the next available link(s) in "
+"the next priority level."
+msgstr "リンクãŒè¡Œã‚ã‚Œã¾ã™"ã“ã“ã§é¸æŠžã®å„ªå…ˆé †ä½ã¯ã©ã®ã‚ˆã†ãªé †åºãƒ•ã‚§ã‚¤ãƒ«ã‚ªãƒ¼ãƒãƒ¼ã¨ã®ãƒãƒ©ãƒ³ã‚¹ã§å®šç¾©ã™ã‚‹ã€Œ 。 「優先内ã®ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ãŒæž¯æ¸‡ã™ã‚‹ã¾ã§ã€æŽ¥ç¶šã‚’。ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ãŒã€ŒåŒã˜å„ªå…ˆé †ä½ã®è¤‡æ•°ã®ãƒªãƒ³ã‚¯ãŒãƒãƒ©ãƒ³ã‚¹ã•å„ªå…ˆãƒ¬ãƒ™ãƒ«ã®ãŒã€æˆ‘々ã¯æ¬¡ã®å„ªå…ˆåº¦ãƒ¬ãƒ™ãƒ«ã€å†…ã®æ¬¡ã«ä½¿ç”¨å¯èƒ½ãªãƒªãƒ³ã‚¯ï¼ˆ S )を使用ã—ã¾ã™æŽ’æ°—ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/system_gateway_groups_edit.php:205
+#: usr/local/www/system_gateway_groups_edit.php:260
+#: usr/local/www/system_gateway_groups_edit.php:320
+#: usr/local/www/system_gateway_groups_edit.php:322
+#: usr/local/www/system_gateway_groups_edit.php:322
+msgid "Trigger Level"
+msgstr "トリガレベル"
+
+#: usr/local/www/system_gateway_groups_edit.php:216
+#: usr/local/www/system_gateway_groups_edit.php:271
+#: usr/local/www/system_gateway_groups_edit.php:331
+#: usr/local/www/system_gateway_groups_edit.php:333
+#: usr/local/www/system_gateway_groups_edit.php:333
+msgid "When to trigger exclusion of a member"
+msgstr "メンãƒãƒ¼ã®é™¤å¤–をトリガーã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°"
+
+#: usr/local/www/system_gateways.php:134 usr/local/www/system_gateways.php:134
+msgid "The gateway configuration has been changed."
+msgstr "ゲートウェイã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: usr/local/www/system_gateways.php:155
+#: usr/local/www/system_gateways_edit.php:398
+#: usr/local/www/system_gateways_edit.php:419
+#: usr/local/www/system_gateways_edit.php:525
+#: usr/local/www/system_gateways_edit.php:529
+#: usr/local/www/system_gateways_edit.php:531
+#: usr/local/www/system_gateways_edit.php:561
+#: usr/local/www/system_gateways_edit.php:561
+#: usr/local/www/system_gateways.php:155
+msgid "Monitor IP"
+msgstr "監視IP"
+
+#: usr/local/www/system_gateways.php:205 usr/local/www/system_gateways.php:205
+msgid "Do you really want to delete this gateway?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_gateways_edit.php:110
+#: usr/local/www/system_gateways_edit.php:111
+#: usr/local/www/system_gateways_edit.php:112
+#: usr/local/www/system_gateways_edit.php:112
+msgid "A valid gateway IP address must be specified."
+msgstr "有効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:118
+#: usr/local/www/system_gateways_edit.php:119
+#: usr/local/www/system_gateways_edit.php:120
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:148
+#: usr/local/www/system_gateways_edit.php:148
+msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface."
+msgstr "ã‚ãªãŸã¯ã€IPv4ã®ã¿ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§IPv6ゲートウェイアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:122
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:123
+#: usr/local/www/system_gateways_edit.php:136
+#: usr/local/www/system_gateways_edit.php:124
+#: usr/local/www/system_gateways_edit.php:137
+#, php-format
+msgid ""
+"The gateway address %1$s does not lie within the chosen interface's subnet "
+"'%2$s'."
+msgstr "「 %2$s 〠「ゲートウェイアドレスã¯%1$sã¯ã€é¸æŠžã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã«ãªã„〠。"
+
+#: usr/local/www/system_gateways_edit.php:129
+#: usr/local/www/system_gateways_edit.php:132
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:120
+#: usr/local/www/system_gateways_edit.php:120
+msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface."
+msgstr "ã‚ãªãŸã¯ã€IPv6ã®ã¿ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§IPv4ゲートウェイアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:139
+#: usr/local/www/system_gateways_edit.php:143
+#: usr/local/www/system_gateways_edit.php:144
+#: usr/local/www/system_gateways_edit.php:174
+#: usr/local/www/system_gateways_edit.php:174
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv4 "
+"configuration."
+msgstr "構æˆã®ã€Œå‹•çš„ゲートウェイ値ã¯ã€é™çš„IPv4ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/system_gateways_edit.php:143
+#: usr/local/www/system_gateways_edit.php:147
+#: usr/local/www/system_gateways_edit.php:148
+#: usr/local/www/system_gateways_edit.php:178
+#: usr/local/www/system_gateways_edit.php:178
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv6 "
+"configuration."
+msgstr "構æˆã®ã€Œå‹•çš„ゲートウェイ値ã¯ã€é™çš„IPv6ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/system_gateways_edit.php:147
+#: usr/local/www/system_gateways_edit.php:151
+#: usr/local/www/system_gateways_edit.php:152
+#: usr/local/www/system_gateways_edit.php:182
+#: usr/local/www/system_gateways_edit.php:182
+msgid "A valid monitor IP address must be specified."
+msgstr "有効ãªç›£è¦–IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:160
+#: usr/local/www/system_gateways_edit.php:168
+#: usr/local/www/system_gateways_edit.php:178
+#: usr/local/www/system_gateways_edit.php:208
+#: usr/local/www/system_gateways_edit.php:208
+msgid "Changing name on a gateway is not allowed."
+msgstr "ゲートウェイ上ã®å¤‰æ›´åãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:165
+#: usr/local/www/system_gateways_edit.php:173
+#: usr/local/www/system_gateways_edit.php:183
+#: usr/local/www/system_gateways_edit.php:213
+#: usr/local/www/system_gateways_edit.php:213
+#, php-format
+msgid "The gateway name "%s" already exists."
+msgstr "ゲートウェイå〠%s "ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:171
+#: usr/local/www/system_gateways_edit.php:179
+#: usr/local/www/system_gateways_edit.php:189
+#: usr/local/www/system_gateways_edit.php:219
+#: usr/local/www/system_gateways_edit.php:219
+#, php-format
+msgid "The gateway IP address "%s" already exists."
+msgstr "ゲートウェイIPアドレス〠%s "ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:177
+#: usr/local/www/system_gateways_edit.php:185
+#: usr/local/www/system_gateways_edit.php:195
+#: usr/local/www/system_gateways_edit.php:225
+#: usr/local/www/system_gateways_edit.php:225
+#, php-format
+msgid ""
+"The monitor IP address "%s" is already in use. You must choose a different "
+"monitor IP."
+msgstr "「モニタIPアドレス "%sã¯ã€Œæ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„る。別ã®é¸æŠžã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"監視IPを。"
+
+#: usr/local/www/system_gateways_edit.php:187
+#: usr/local/www/system_gateways_edit.php:220
+#: usr/local/www/system_gateways_edit.php:195
+#: usr/local/www/system_gateways_edit.php:228
+msgid "The low latency watermark needs to be a numeric value."
+msgstr "低é…延é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:193
+#: usr/local/www/system_gateways_edit.php:201
+msgid "The high latency watermark needs to be a numeric value."
+msgstr "高é…延é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:198
+#: usr/local/www/system_gateways_edit.php:206
+msgid "The low loss watermark needs to be a numeric value."
+msgstr "低æ失é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:203
+#: usr/local/www/system_gateways_edit.php:211
+msgid "The high loss watermark needs to be a numeric value."
+msgstr "高æ失é€ã‹ã—ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:209
+#: usr/local/www/system_gateways_edit.php:217
+msgid ""
+"The High latency watermark needs to be higher then the low latency watermark"
+msgstr "「高レイテンシã®é€ã‹ã—ã¯ã€ä½Žãƒ¬ã‚¤ãƒ†ãƒ³ã‚·Â·ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚ˆã‚Šé«˜ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹"
+
+#: usr/local/www/system_gateways_edit.php:215
+#: usr/local/www/system_gateways_edit.php:223
+msgid ""
+"The High packet loss watermark needs to be higher then the low packet loss "
+"watermark"
+msgstr "é€ã‹ã—を​​「高パケットæ失ã®é€ã‹ã—ã¯ã€ä½Žãƒ‘ケットæ失より高ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹""
+
+#: usr/local/www/system_gateways_edit.php:363
+#: usr/local/www/system_gateways_edit.php:369
+#: usr/local/www/system_gateways_edit.php:475
+#: usr/local/www/system_gateways_edit.php:474
+#: usr/local/www/system_gateways_edit.php:476
+#: usr/local/www/system_gateways_edit.php:506
+#: usr/local/www/system_gateways_edit.php:506
+msgid "Use BGPD"
+msgstr "bgpdをを使用ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/system_gateways_edit.php:367
+#: usr/local/www/system_gateways_edit.php:373
+#: usr/local/www/system_gateways_edit.php:479
+#: usr/local/www/system_gateways_edit.php:478
+#: usr/local/www/system_gateways_edit.php:480
+#: usr/local/www/system_gateways_edit.php:510
+#: usr/local/www/system_gateways_edit.php:510
+msgid "Choose which interface this gateway applies to."
+msgstr "é¸æŠžã—ã¦ã„るインターフェイスã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒé©ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:373
+#: usr/local/www/system_gateways_edit.php:394
+#: usr/local/www/system_gateways_edit.php:500
+#: usr/local/www/system_gateways_edit.php:502
+#: usr/local/www/system_gateways_edit.php:504
+#: usr/local/www/system_gateways_edit.php:534
+#: usr/local/www/system_gateways_edit.php:534
+msgid "Gateway name"
+msgstr "ゲートウェイå"
+
+#: usr/local/www/system_gateways_edit.php:379
+#: usr/local/www/system_gateways_edit.php:400
+#: usr/local/www/system_gateways_edit.php:506
+#: usr/local/www/system_gateways_edit.php:509
+#: usr/local/www/system_gateways_edit.php:511
+#: usr/local/www/system_gateways_edit.php:541
+#: usr/local/www/system_gateways_edit.php:541
+msgid "Gateway IP address"
+msgstr "ゲートウェイIPアドレス"
+
+#: usr/local/www/system_gateways_edit.php:382
+#: usr/local/www/system_gateways_edit.php:385
+#: usr/local/www/system_gateways_edit.php:403
+#: usr/local/www/system_gateways_edit.php:406
+#: usr/local/www/system_gateways_edit.php:509
+#: usr/local/www/system_gateways_edit.php:512
+#: usr/local/www/system_gateways_edit.php:513
+#: usr/local/www/system_gateways_edit.php:516
+#: usr/local/www/system_gateways_edit.php:515
+#: usr/local/www/system_gateways_edit.php:518
+#: usr/local/www/system_gateways_edit.php:545
+#: usr/local/www/system_gateways_edit.php:548
+#: usr/local/www/system_gateways_edit.php:545
+#: usr/local/www/system_gateways_edit.php:548
+msgid "Default Gateway"
+msgstr "デフォルトゲートウェイ"
+
+#: usr/local/www/system_gateways_edit.php:386
+#: usr/local/www/system_gateways_edit.php:407
+#: usr/local/www/system_gateways_edit.php:513
+#: usr/local/www/system_gateways_edit.php:517
+#: usr/local/www/system_gateways_edit.php:519
+#: usr/local/www/system_gateways_edit.php:549
+#: usr/local/www/system_gateways_edit.php:549
+msgid "This will select the above gateway as the default gateway"
+msgstr "ã“ã‚ŒãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã¨ã—ã¦ä¸Šè¨˜ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¾ã™"
+
+#: usr/local/www/system_gateways_edit.php:390
+#: usr/local/www/system_gateways_edit.php:393
+#: usr/local/www/system_gateways_edit.php:411
+#: usr/local/www/system_gateways_edit.php:414
+#: usr/local/www/system_gateways_edit.php:517
+#: usr/local/www/system_gateways_edit.php:520
+#: usr/local/www/system_gateways_edit.php:521
+#: usr/local/www/system_gateways_edit.php:524
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_gateways_edit.php:526
+#: usr/local/www/system_gateways_edit.php:553
+#: usr/local/www/system_gateways_edit.php:556
+#: usr/local/www/system_gateways_edit.php:553
+#: usr/local/www/system_gateways_edit.php:556
+msgid "Disable Gateway Monitoring"
+msgstr "ゲートウェイã®ç›£è¦–を無効ã«"
+
+#: usr/local/www/system_gateways_edit.php:394
+#: usr/local/www/system_gateways_edit.php:415
+#: usr/local/www/system_gateways_edit.php:521
+#: usr/local/www/system_gateways_edit.php:525
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/system_gateways_edit.php:557
+#: usr/local/www/system_gateways_edit.php:557
+msgid "This will consider this gateway as always being up"
+msgstr "ã“ã‚Œã¯ã€å¸¸ã«ã€æœ€å¤§ã§ã‚ã‚‹ã¨ã—ã¦ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’検討ã—ã¾ã™"
+
+#: usr/local/www/system_gateways_edit.php:407
+#: usr/local/www/system_gateways_edit.php:428
+#: usr/local/www/system_gateways_edit.php:534
+#: usr/local/www/system_gateways_edit.php:538
+#: usr/local/www/system_gateways_edit.php:540
+#: usr/local/www/system_gateways_edit.php:570
+#: usr/local/www/system_gateways_edit.php:570
+msgid "Alternative monitor IP"
+msgstr "代替監視IP"
+
+#: usr/local/www/system_gateways_edit.php:408
+#: usr/local/www/system_gateways_edit.php:429
+#: usr/local/www/system_gateways_edit.php:535
+#: usr/local/www/system_gateways_edit.php:539
+#: usr/local/www/system_gateways_edit.php:541
+#: usr/local/www/system_gateways_edit.php:571
+#: usr/local/www/system_gateways_edit.php:571
+msgid ""
+"Enter an alternative address here to be used to monitor the link. This is "
+"used for the quality RRD graphs as well as the load balancer entries. Use "
+"this if the gateway does not respond to ICMP echo requests (pings)"
+msgstr "「リンクを監視ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã“ã“ã«ä»£æ›¿ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。ã“ã‚ŒãŒã•ã‚Œã¦ã„る「å“質ã®RRDグラフã ã‘ã§ãªãã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®ã‚¨ãƒ³ãƒˆãƒªã«ä½¿ç”¨ã€‚ゲートウェイãŒICMPエコーè¦æ±‚ã«å¿œç­”ã—ãªã„å ´åˆã¯ã€ã€Œã“れを使用(ã®ping )"
+
+#: usr/local/www/system_gateways_edit.php:436
+#: usr/local/www/system_gateways_edit.php:457
+#: usr/local/www/system_gateways_edit.php:563
+#: usr/local/www/system_gateways_edit.php:567
+#: usr/local/www/system_gateways_edit.php:569
+#: usr/local/www/system_gateways_edit.php:599
+#: usr/local/www/system_gateways_edit.php:599
+msgid "Weight for this gateway when used in a Gateway Group."
+msgstr "ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®é‡ã¿ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤Â·ã‚°ãƒ«ãƒ¼ãƒ—ã§ä½¿ç”¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:440
+#: usr/local/www/system_gateways_edit.php:461
+#: usr/local/www/system_gateways_edit.php:567
+#: usr/local/www/system_gateways_edit.php:571
+#: usr/local/www/system_gateways_edit.php:573
+#: usr/local/www/system_gateways_edit.php:603
+#: usr/local/www/system_gateways_edit.php:603
+msgid "Latency thresholds"
+msgstr "å¾…ã¡æ™‚é–“ã®ã—ãã„値"
+
+#: usr/local/www/system_gateways_edit.php:448
+#: usr/local/www/system_gateways_edit.php:469
+msgid ""
+"These define the low and high water marks for latency in milliseconds. "
+"Default is 100/200."
+msgstr "「ã“れらã¯ãƒŸãƒªç§’ã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã®ãŸã‚ã®ãƒ­ãƒ¼ã¨ãƒã‚¤ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚’定義ã—ã¾ã™ã€‚ 「デフォルトã¯100/200ã§ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:452
+#: usr/local/www/system_gateways_edit.php:473
+#: usr/local/www/system_gateways_edit.php:579
+#: usr/local/www/system_gateways_edit.php:583
+#: usr/local/www/system_gateways_edit.php:585
+#: usr/local/www/system_gateways_edit.php:615
+#: usr/local/www/system_gateways_edit.php:615
+msgid "Packet Loss thresholds"
+msgstr "パケットæ失ã®ã—ãã„値"
+
+#: usr/local/www/system_gateways_edit.php:460
+#: usr/local/www/system_gateways_edit.php:481
+msgid ""
+"These define the low and high water marks for packet loss in %. Default is "
+"10/20."
+msgstr "「ã“れらã¯ï¼…ã§ãƒ‘ケットæ失ã®ä½ŽåŸŸã¨é«˜ã‚¦ã‚©ãƒ¼ã‚¿ãƒ¼ãƒžãƒ¼ã‚¯ã‚’定義ã—ã¾ã™ã€‚デフォルト㯠"10/20 。"
+
+#: usr/local/www/system_gateways_edit.php:464
+#: usr/local/www/system_gateways_edit.php:496
+#: usr/local/www/system_gateways_edit.php:602
+#: usr/local/www/system_gateways_edit.php:606
+#: usr/local/www/system_gateways_edit.php:608
+#: usr/local/www/system_gateways_edit.php:638
+#: usr/local/www/system_gateways_edit.php:638
+msgid "Down"
+msgstr "ダウン"
+
+#: usr/local/www/system_gateways_edit.php:468
+msgid ""
+"This defines the down time for the alarm to fire in seconds. Default is 10."
+msgstr "「ã“ã‚Œã¯ã€ç§’å˜ä½ã§ç™ºå°„ã™ã‚‹ã‚¢ãƒ©ãƒ¼ãƒ ã®åœæ­¢æ™‚間を定義ã—ã¾ã™ã€‚デフォルトã¯10ã§ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:472
+#: usr/local/www/system_gateways_edit.php:485
+#: usr/local/www/system_gateways_edit.php:591
+#: usr/local/www/system_gateways_edit.php:595
+#: usr/local/www/system_gateways_edit.php:597
+#: usr/local/www/system_gateways_edit.php:627
+#: usr/local/www/system_gateways_edit.php:627
+msgid "Frequency Probe"
+msgstr "高周波プローブ"
+
+#: usr/local/www/system_gateways_edit.php:476
+msgid ""
+"This defines the frequency that an icmp probe will be sent in seconds. "
+"Default is 1."
+msgstr "「ã“ã‚Œã¯ã€ICMPプローブã¯æ•°ç§’ã§é€ä¿¡ã•ã‚Œã‚‹é »åº¦ã‚’定義ã—ã¾ã™ã€‚ 「デフォルトã¯1ã§ã™ã€‚"
+
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/system_groupmanager_addprivs.php:56
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/system_groupmanager_addprivs.php:56
+msgid "Group manager"
+msgstr "グループマãƒãƒ¼ã‚¸ãƒ£ãƒ¼"
+
+#: usr/local/www/system_groupmanager.php:72
+#: usr/local/www/system_groupmanager.php:96
+#: usr/local/www/system_usermanager.php:90
+#: usr/local/www/system_usermanager.php:105
+#: usr/local/www/system_groupmanager.php:72
+#: usr/local/www/system_groupmanager.php:96
+#: usr/local/www/system_usermanager.php:90
+#: usr/local/www/system_usermanager.php:105
+msgid "successfully deleted"
+msgstr "正常ã«å‰Šé™¤"
+
+#: usr/local/www/system_groupmanager.php:95
+#: usr/local/www/system_usermanager.php:104
+#: usr/local/www/system_groupmanager.php:95
+#: usr/local/www/system_usermanager.php:104
+msgid "Privilege"
+msgstr "特権"
+
+#: usr/local/www/system_groupmanager.php:122
+#: usr/local/www/system_groupmanager.php:122
+msgid "The group name contains invalid characters."
+msgstr "グループåã¯ç„¡åŠ¹ãªæ–‡å­—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_groupmanager.php:128
+#: usr/local/www/system_groupmanager.php:128
+msgid "Another entry with the same group name already exists."
+msgstr "åŒã˜ã‚°ãƒ«ãƒ¼ãƒ—åã‚’æŒã¤åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_groupmanager.php:262
+#: usr/local/www/system_usermanager.php:462
+#: usr/local/www/system_usermanager.php:460
+#: usr/local/www/system_groupmanager.php:262
+#: usr/local/www/system_usermanager.php:460
+msgid "Defined by"
+msgstr "ã§å®šç¾©ã•ã‚ŒãŸ"
+
+#: usr/local/www/system_groupmanager.php:269
+#: usr/local/www/system_groupmanager.php:404
+#: usr/local/www/system_groupmanager.php:405
+#: usr/local/www/system_groupmanager.php:269
+#: usr/local/www/system_groupmanager.php:405
+msgid "Group name"
+msgstr "グループå"
+
+#: usr/local/www/system_groupmanager.php:279
+#: usr/local/www/system_groupmanager.php:279
+msgid "Group description, for your own information only"
+msgstr "ã‚ãªãŸè‡ªèº«ã®æƒ…å ±ã®ã¿ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®èª¬æ˜Žã€"
+
+#: usr/local/www/system_groupmanager.php:286
+#: usr/local/www/system_usermanager.php:511
+#: usr/local/www/system_usermanager.php:509
+#: usr/local/www/system_groupmanager.php:286
+#: usr/local/www/system_usermanager.php:509
+msgid "Group Memberships"
+msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—"
+
+#: usr/local/www/system_groupmanager.php:291
+#: usr/local/www/system_groupmanager.php:291
+msgid "Not Members"
+msgstr "ã„ãªã„メンãƒãƒ¼"
+
+#: usr/local/www/system_groupmanager.php:309
+#: usr/local/www/system_groupmanager.php:309
+msgid "Add Members"
+msgstr "メンãƒãƒ¼ã‚’追加"
+
+#: usr/local/www/system_groupmanager.php:313
+#: usr/local/www/system_groupmanager.php:313
+msgid "Remove Members"
+msgstr "メンãƒãƒ¼ã‚’削除"
+
+#: usr/local/www/system_groupmanager.php:334
+#: usr/local/www/system_groupmanager_addprivs.php:196
+#: usr/local/www/system_usermanager.php:565
+#: usr/local/www/system_usermanager_addprivs.php:193
+#: usr/local/www/system_usermanager.php:563
+#: usr/local/www/system_groupmanager_addprivs.php:194
+#: usr/local/www/system_groupmanager.php:334
+#: usr/local/www/system_usermanager_addprivs.php:193
+#: usr/local/www/system_groupmanager_addprivs.php:194
+#: usr/local/www/system_usermanager.php:563
+msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items"
+msgstr "複数ã®é …目をé¸æŠžã™ã‚‹ã«ã¯ã€CTRL ( PC ) / Commandキー(Mac )キーを押ã—ãŸã¾ã¾"
+
+#: usr/local/www/system_groupmanager.php:342
+#: usr/local/www/system_groupmanager.php:342
+msgid "Assigned Privileges"
+msgstr "割り当ã¦ã‚‰ã‚ŒãŸæ¨©é™"
+
+#: usr/local/www/system_groupmanager.php:363
+#: usr/local/www/system_usermanager.php:601
+#: usr/local/www/system_usermanager.php:599
+#: usr/local/www/system_groupmanager.php:363
+#: usr/local/www/system_usermanager.php:599
+msgid "Do you really want to delete this privilege?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®æ¨©é™ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_groupmanager.php:406
+#: usr/local/www/system_groupmanager.php:407
+#: usr/local/www/system_groupmanager.php:407
+msgid "Member Count"
+msgstr "メンãƒãƒ¼æ•°"
+
+#: usr/local/www/system_groupmanager.php:447
+#: usr/local/www/system_groupmanager.php:450
+#: usr/local/www/system_groupmanager.php:468
+#: usr/local/www/system_groupmanager.php:468
+msgid "Do you really want to delete this group?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_groupmanager.php:448
+#: usr/local/www/system_groupmanager.php:451
+#: usr/local/www/system_groupmanager.php:469
+#: usr/local/www/system_groupmanager.php:469
+msgid "delete group"
+msgstr "グループを削除"
+
+#: usr/local/www/system_groupmanager.php:460
+#: usr/local/www/system_groupmanager.php:465
+#: usr/local/www/system_groupmanager.php:415
+#: usr/local/www/system_groupmanager.php:415
+msgid "add group"
+msgstr "グループを追加"
+
+#: usr/local/www/system_groupmanager.php:467
+msgid ""
+"Additional webConfigurator groups can be added here. \n"
+"ttttttttGroup permissions can be assigned which are inherited by "
+"users who are members of the group.\n"
+"ttttttttAn icon that appears grey indicates that it is a system "
+"defined object.\n"
+"ttttttttSome system object properties can be modified but they "
+"cannot be deleted."
+msgstr "「追加webConfiguratorグループã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 〠ttttttttGroup許å¯ãŒç°è‰²ã€ãã‚ŒãŒã‚·ã‚¹ãƒ†ãƒ ã€ã«å®šç¾©ã•ã‚ŒãŸã‚ªãƒ–ジェクトã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦è¡¨ç¤ºã•ã‚ŒttttttttAnアイコン〠group.\nã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚るユーザーã€ã«ç¶™æ‰¿ã•ã‚Œã¦å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 「 ttttttttSomeシステムオブジェクトã®ãƒ—ロパティを変更ã§ãã¾ã™ãŒã€ãれらã¯ã€Œå‰Šé™¤ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_groupmanager_addprivs.php:56
+#: usr/local/www/system_groupmanager_addprivs.php:56
+msgid "Add privileges"
+msgstr "特権を追加"
+
+#: usr/local/www/system_groupmanager_addprivs.php:79
+#: usr/local/www/system_usermanager_addprivs.php:84
+#: usr/local/www/system_usermanager_addprivs.php:84
+#: usr/local/www/system_groupmanager_addprivs.php:79
+msgid "Selected priveleges"
+msgstr "é¸æŠžã—ãŸpriveleges"
+
+#: usr/local/www/system_groupmanager_addprivs.php:182
+#: usr/local/www/system_usermanager_addprivs.php:181
+#: usr/local/www/system_groupmanager_addprivs.php:180
+#: usr/local/www/system_usermanager_addprivs.php:181
+#: usr/local/www/system_groupmanager_addprivs.php:180
+msgid "System Privileges"
+msgstr "システム権é™"
+
+#: usr/local/www/system_groupmanager_addprivs.php:218
+#: usr/local/www/system_usermanager_addprivs.php:199
+#: usr/local/www/system_groupmanager_addprivs.php:216
+#: usr/local/www/system_usermanager_addprivs.php:199
+#: usr/local/www/system_groupmanager_addprivs.php:218
+msgid "Select a privilege from the list above for a description"
+msgstr "説明ã«ã¤ã„ã¦ã¯ã€ä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã‹ã‚‰æ¨©é™ã‚’é¸æŠž"
+
+#: usr/local/www/system_usermanager.php:157
+#: usr/local/www/system_usermanager.php:692
+#: usr/local/www/system_usermanager.php:701
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/system_usermanager.php:690
+#: usr/local/www/system_usermanager.php:699
+#: usr/local/www/vpn_openvpn_server.php:287
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/vpn_openvpn_server.php:288
+#: usr/local/www/vpn_openvpn_client.php:220
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/vpn_openvpn_server.php:309
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/system_usermanager.php:157
+#: usr/local/www/system_usermanager.php:690
+#: usr/local/www/system_usermanager.php:699
+#: usr/local/www/vpn_openvpn_server.php:309
+msgid "Certificate"
+msgstr "証明書"
+
+#: usr/local/www/system_usermanager.php:158
+#: usr/local/www/system_usermanager.php:158
+msgid "association removed."
+msgstr "関連付ã‘ã¯å‰Šé™¤ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:202
+#: usr/local/www/system_usermanager.php:202
+msgid "The username is longer than 16 characters."
+msgstr "ユーザーåã¯16文字を超ãˆã¦ã„る。"
+
+#: usr/local/www/system_usermanager.php:226
+#: usr/local/www/system_usermanager.php:226
+msgid "That username is reserved by the system."
+msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦äºˆç´„ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:250
+#: usr/local/www/system_usermanager.php:246
+#: usr/local/www/system_usermanager.php:246
+msgid "Invalid expiration date format; use MM/DD/YYYY instead."
+msgstr "無効ãªæœ‰åŠ¹æœŸé™ã®æ—¥ä»˜ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã€ä»£ã‚ã‚Šã«ã€MM / DD / YYYYを使用ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:257
+#: usr/local/www/system_usermanager.php:253
+#: usr/local/www/system_usermanager.php:253
+msgid "Invalid internal Certificate Authority"
+msgstr "無効ãªå†…部èªè¨¼å±€"
+
+#: usr/local/www/system_usermanager.php:489
+#: usr/local/www/system_usermanager_passwordmg.php:109
+#: usr/local/www/system_usermanager.php:487
+#: usr/local/www/system_usermanager_passwordmg.php:110
+#: usr/local/www/system_usermanager_passwordmg.php:115
+#: usr/local/www/system_usermanager_passwordmg.php:115
+#: usr/local/www/system_usermanager.php:487
+msgid "(confirmation)"
+msgstr "(確èªï¼‰"
+
+#: usr/local/www/system_usermanager.php:493
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/system_usermanager.php:491
+#: usr/local/www/system_usermanager.php:786
+#: usr/local/www/system_usermanager.php:787
+#: usr/local/www/system_usermanager.php:491
+#: usr/local/www/system_usermanager.php:787
+msgid "Full name"
+msgstr "フルãƒãƒ¼ãƒ "
+
+#: usr/local/www/system_usermanager.php:497
+#: usr/local/www/system_usermanager.php:495
+#: usr/local/www/system_usermanager.php:495
+msgid "User's full name, for your own information only"
+msgstr "ã‚ãªãŸè‡ªèº«ã®æƒ…å ±ã®ã¿ã®ãŸã‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ°åã€"
+
+#: usr/local/www/system_usermanager.php:501
+#: usr/local/www/system_usermanager.php:499
+#: usr/local/www/system_usermanager.php:499
+msgid "Expiration date"
+msgstr "有効期é™"
+
+#: usr/local/www/system_usermanager.php:505
+#: usr/local/www/system_usermanager.php:503
+#: usr/local/www/system_usermanager.php:503
+msgid "Pick a date"
+msgstr "日付をé¸æŠžã™ã‚‹"
+
+#: usr/local/www/system_usermanager.php:508
+#: usr/local/www/system_usermanager.php:506
+#: usr/local/www/system_usermanager.php:506
+msgid ""
+"Leave blank if the account shouldn't expire, otherwise enter the expiration "
+"date in the following format: mm/dd/yyyy"
+msgstr "次ã®å½¢å¼ã§æ—¥ä»˜"アカウントã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„ãªã„ã‹ã©ã†ã‹ãã†ã§ãªã„有効期é™ã‚’入力ã—ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€ : MM / DD / YYYY"
+
+#: usr/local/www/system_usermanager.php:516
+#: usr/local/www/system_usermanager.php:514
+#: usr/local/www/system_usermanager.php:514
+msgid "Not Member Of"
+msgstr "ã®ãƒ¡ãƒ³ãƒãƒ¼ã˜ã‚ƒãªã„ã®"
+
+#: usr/local/www/system_usermanager.php:536
+#: usr/local/www/system_usermanager.php:534
+#: usr/local/www/system_usermanager.php:534
+msgid "Add Groups"
+msgstr "グループã®è¿½åŠ "
+
+#: usr/local/www/system_usermanager.php:540
+#: usr/local/www/system_usermanager.php:538
+#: usr/local/www/system_usermanager.php:538
+msgid "Remove Groups"
+msgstr "グループを削除ã™ã‚‹"
+
+#: usr/local/www/system_usermanager.php:544
+#: usr/local/www/system_usermanager.php:542
+#: usr/local/www/system_usermanager.php:542
+msgid "Member Of"
+msgstr "メンãƒãƒ¼ã®"
+
+#: usr/local/www/system_usermanager.php:572
+#: usr/local/www/system_usermanager.php:570
+#: usr/local/www/system_usermanager.php:570
+msgid "Effective Privileges"
+msgstr "効果的ãªæ¨©é™"
+
+#: usr/local/www/system_usermanager.php:576
+#: usr/local/www/system_usermanager.php:574
+#: usr/local/www/system_usermanager.php:574
+msgid "Inherited From"
+msgstr "ã‹ã‚‰ç¶™æ‰¿ã•ã‚Œã¦ã„ã¾ã™"
+
+#: usr/local/www/system_usermanager.php:626
+#: usr/local/www/system_usermanager.php:624
+#: usr/local/www/system_usermanager.php:624
+msgid "User Certificates"
+msgstr "ユーザー証明書"
+
+#: usr/local/www/system_usermanager.php:631
+#: usr/local/www/system_usermanager.php:629
+#: usr/local/www/system_usermanager.php:629
+msgid "CA"
+msgstr "カリフォルニア州"
+
+#: usr/local/www/system_usermanager.php:655
+#: usr/local/www/system_usermanager.php:653
+#: usr/local/www/system_usermanager.php:653
+msgid "export private key"
+msgstr "[秘密キーã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/system_usermanager.php:660
+#: usr/local/www/system_usermanager.php:658
+#: usr/local/www/system_usermanager.php:658
+msgid "Do you really want to remove this certificate association?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®è¨¼æ˜Žæ›¸ã®é–¢é€£ä»˜ã‘を削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_usermanager.php:660
+#: usr/local/www/system_usermanager.php:658
+#: usr/local/www/system_usermanager.php:658
+msgid "(Certificate will not be deleted)"
+msgstr "(証明書ã¯å‰Šé™¤ã•ã‚Œã¾ã›ã‚“)"
+
+#: usr/local/www/system_usermanager.php:694
+#: usr/local/www/system_usermanager.php:692
+#: usr/local/www/system_usermanager.php:692
+msgid "Click to create a user certificate."
+msgstr "ユーザー証明書を作æˆã™ã‚‹å ´åˆã«ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:752
+#: usr/local/www/system_usermanager.php:758
+#: usr/local/www/system_usermanager.php:750
+#: usr/local/www/system_usermanager.php:756
+#: usr/local/www/system_usermanager.php:750
+#: usr/local/www/system_usermanager.php:756
+msgid "Authorized keys"
+msgstr "èªè¨¼ã‚­ãƒ¼"
+
+#: usr/local/www/system_usermanager.php:754
+#: usr/local/www/system_usermanager.php:752
+#: usr/local/www/system_usermanager.php:752
+msgid "Click to paste an authorized key."
+msgstr "許å¯ã•ã‚ŒãŸã‚­ãƒ¼ã‚’貼り付ã‘]をクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:762
+#: usr/local/www/system_usermanager.php:760
+#: usr/local/www/system_usermanager.php:760
+msgid "Paste an authorized keys file here."
+msgstr "èªè¨¼ã‚­ãƒ¼ã¯ã€ã“ã“ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’貼り付ã‘ã¾ã™ã€‚"
+
+#: usr/local/www/system_usermanager.php:766
+#: usr/local/www/system_usermanager.php:764
+#: usr/local/www/system_usermanager.php:764
+msgid "IPsec Pre-Shared Key"
+msgstr "IPsecã®äº‹å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/system_usermanager.php:828
+#: usr/local/www/system_usermanager.php:826
+#: usr/local/www/system_usermanager.php:829
+#: usr/local/www/system_usermanager.php:852
+#: usr/local/www/system_usermanager.php:852
+msgid "Do you really want to delete this User?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_usermanager.php:849
+#: usr/local/www/system_usermanager.php:847
+#: usr/local/www/system_usermanager.php:852
+#: usr/local/www/system_usermanager.php:805
+#: usr/local/www/system_usermanager.php:805
+msgid ""
+"Additional users can be added here. User permissions for accessing the "
+"webConfigurator can be assigned directly or inherited from group "
+"memberships. An icon that appears grey indicates that it is a system defined "
+"object. Some system object properties can be modified but they cannot be "
+"deleted."
+msgstr "「追加ユーザーã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚アクセスã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©é™ã€ webConfiguratorãŒç›´æŽ¥å‰²ã‚Šå½“ã¦ãŸã‚Šã€ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ã“ã¨ãŒã§ãã€ã€Œãƒ¡ãƒ³ãƒãƒ¼ã‚·ãƒƒãƒ—。グレーã«è¡¨ç¤ºã•ã‚Œã‚‹ã‚¢ã‚¤ã‚³ãƒ³ã¯ã€ãã‚ŒãŒå®šç¾©ã•ã‚ŒãŸã‚·ã‚¹ãƒ†ãƒ ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã‚‹"オブジェクト。ã„ãã¤ã‹ã®ã‚·ã‚¹ãƒ†ãƒ ã‚ªãƒ–ジェクトã®ãƒ—ロパティを変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ 「削除ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_usermanager.php:854
+#: usr/local/www/system_usermanager.php:852
+#: usr/local/www/system_usermanager.php:857
+#: usr/local/www/system_usermanager.php:810
+#: usr/local/www/system_usermanager.php:810
+msgid ""
+"Accounts created here are also used for other parts of the system such as "
+"OpenVPN, IPsec, and Captive Portal."
+msgstr "OpenVPNã¯ã€ IPsecã€ãŠã‚ˆã³ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã€Œã“ã“ã§ä½œæˆã—ãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã¾ãŸã€ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ã®ä»–ã®éƒ¨åˆ†ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/system_usermanager_passwordmg.php:43
+#: usr/local/www/system_usermanager_passwordmg.php:43
+msgid "User Password"
+msgstr "利用者パスワード"
+
+#: usr/local/www/system_usermanager_passwordmg.php:63
+#: usr/local/www/system_usermanager_passwordmg.php:63
+msgid "Password successfully changed"
+msgstr "パスワードã¯æ­£å¸¸ã«å¤‰æ›´ã•ã‚ŒãŸ"
+
+#: usr/local/www/system_usermanager_passwordmg.php:86
+#: usr/local/www/system_usermanager_passwordmg.php:87
+#: usr/local/www/system_usermanager_passwordmg.php:92
+#: usr/local/www/system_usermanager_passwordmg.php:92
+msgid "Sorry, you cannot change the password for a non-local user."
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ã‚ãªãŸãŒéžãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_usermanager_passwordmg.php:112
+#: usr/local/www/system_usermanager_passwordmg.php:113
+#: usr/local/www/system_usermanager_passwordmg.php:118
+#: usr/local/www/system_usermanager_passwordmg.php:118
+msgid "Select a new password"
+msgstr "æ–°ã—ã„パスワードをé¸æŠžã™ã‚‹"
+
+#: usr/local/www/system_usermanager_settings.php:51
+#: usr/local/www/system_usermanager_settings.php:51
+msgid "User manager settings"
+msgstr "ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®š"
+
+#: usr/local/www/system_usermanager_settings.php:61
+#: usr/local/www/system_usermanager_settings.php:61
+msgid "Session timeout must be an integer value."
+msgstr "セッションタイムアウトã¯æ•´æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_usermanager_settings.php:71
+#: usr/local/www/system_usermanager_settings.php:71
+msgid ""
+"The test was not performed because it is supported only for ldap based "
+"backends."
+msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"ãã‚ŒãŒå”¯ä¸€ã®LDAPベースã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ãƒ†ã‚¹ãƒˆã¯å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€ 。"
+
+#: usr/local/www/system_usermanager_settings.php:131
+#: usr/local/www/system_usermanager_settings.php:134
+#: usr/local/www/system_usermanager_settings.php:134
+msgid "Session Timeout"
+msgstr "セッションタイムアウト"
+
+#: usr/local/www/system_usermanager_settings.php:135
+#: usr/local/www/system_usermanager_settings.php:138
+#: usr/local/www/system_usermanager_settings.php:138
+msgid ""
+"Time in minutes to expire idle management sessions. The default is 4 hours "
+"(240 minutes)."
+msgstr "「時間ã¯åˆ†å˜ä½ã§ã‚¢ã‚¤ãƒ‰ãƒ«ã®ç®¡ç†ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’期é™åˆ‡ã‚Œã«ã™ã‚‹ã€‚デフォルトã¯4時間ã§ã™ã€ ( 240分) 。"
+
+#: usr/local/www/system_usermanager_settings.php:136
+#: usr/local/www/system_usermanager_settings.php:139
+#: usr/local/www/system_usermanager_settings.php:139
+msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!"
+msgstr "セッションを無期é™ã«ã™ã‚‹ã«ã¯ã€0を入力ã—ã¦ãã ã•ã„。注:ã“ã‚Œã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒªã‚¹ã‚¯ã®ã§ã™ï¼"
+
+#: usr/local/www/system_usermanager_settings.php:162
+#: usr/local/www/system_usermanager_settings.php:165
+#: usr/local/www/system_usermanager_settings.php:165
+msgid "Save and Test"
+msgstr "ä¿å­˜ã—ã¦ãƒ†ã‚¹ãƒˆ"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97
+msgid ""
+"Could not connect to the LDAP server. Please check your LDAP configuration."
+msgstr "「 LDAPサーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚ãªãŸã®LDAP設定を確èªã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98
+#: usr/local/www/system_usermanager_settings_test.php:119
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98
+#: usr/local/www/system_usermanager_settings_test.php:119
+msgid "Close"
+msgstr "クローズ"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100
+msgid "Please select which containers to Authenticate against:"
+msgstr "ã«å¯¾ã—ã¦èªè¨¼ã‚’ã©ã®ã‚³ãƒ³ãƒ†ãƒŠã‚’é¸æŠžã—ã¦ãã ã•ã„:"
+
+#: usr/local/www/system_usermanager_settings_test.php:76
+#: usr/local/www/system_usermanager_settings_test.php:76
+#, php-format
+msgid "Could not find settings for %s%s"
+msgstr "%s%sã®è¨­å®šã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: usr/local/www/system_usermanager_settings_test.php:78
+msgid "Testing pfSense LDAP settings... One moment please..."
+msgstr "テストpfSenseã®LDAP設定...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/system_usermanager_settings_test.php:82
+#: usr/local/www/system_usermanager_settings_test.php:82
+msgid "Attempting connection to"
+msgstr "ã¸ã®æŽ¥ç¶šã‚’試ã¿ã‚‹"
+
+#: usr/local/www/system_usermanager_settings_test.php:86
+#: usr/local/www/system_usermanager_settings_test.php:86
+msgid "Attempting bind to"
+msgstr "ã«ãƒã‚¤ãƒ³ãƒ‰ã‚’試ã¿ã‚‹"
+
+#: usr/local/www/system_usermanager_settings_test.php:90
+#: usr/local/www/system_usermanager_settings_test.php:90
+msgid "Attempting to fetch Organizational Units from"
+msgstr "ã‹ã‚‰çµ„ç¹”å˜ä½ã‚’å–å¾—ã—よã†ã¨ã™ã‚‹ã¨ã€"
+
+#: usr/local/www/system_usermanager_settings_test.php:96
+#: usr/local/www/system_usermanager_settings_test.php:96
+msgid "Organization units found"
+msgstr "見ã¤ã‹ã£ãŸçµ„ç¹”å˜ä½"
+
+#: usr/local/www/system_usermanager_settings_test.php:103
+#: usr/local/www/system_usermanager_settings_test.php:108
+#: usr/local/www/system_usermanager_settings_test.php:112
+#: usr/local/www/system_usermanager_settings_test.php:103
+#: usr/local/www/system_usermanager_settings_test.php:108
+#: usr/local/www/system_usermanager_settings_test.php:112
+msgid "failed"
+msgstr "失敗ã—ãŸ"
+
+#: usr/local/www/upload_progress.php:44
+msgid "Sorry, we could not find an uploadid code."
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€æˆ‘々ã¯uploadidコードを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/upload_progress.php:86
+msgid "Uploading Files"
+msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード"
+
+#: usr/local/www/upload_progress.php:86
+msgid "Please wait"
+msgstr "ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„"
+
+#: usr/local/www/upload_progress.php:95
+msgid "Uploading file"
+msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロード"
+
+#: usr/local/www/upload_progress.php:123
+msgid "Uploaded"
+msgstr "アップロードã•ã‚ŒãŸ"
+
+#: usr/local/www/upload_progress.php:133
+msgid "File Size"
+msgstr "ファイルサイズ"
+
+#: usr/local/www/upload_progress.php:145
+msgid "Completed"
+msgstr "完æˆã—ãŸ"
+
+#: usr/local/www/upload_progress.php:155
+msgid "Estimated"
+msgstr "推定"
+
+#: usr/local/www/vpn_ipsec_phase1.php:160
+#: usr/local/www/vpn_ipsec_phase1.php:662
+#: usr/local/www/vpn_ipsec_phase1.php:675
+#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486
+#: usr/local/www/vpn_ipsec_phase1.php:674
+#: usr/local/www/vpn_ipsec_phase1.php:695 usr/local/www/interfaces.php:2516
+#: usr/local/www/interfaces.php:2562 usr/local/www/interfaces.php:2551
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:135
+#: usr/local/www/vpn_ipsec_phase1.php:160
+#: usr/local/www/vpn_ipsec_phase1.php:695
+#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104
+#: usr/local/www/interfaces.php:2551
+msgid "Pre-Shared Key"
+msgstr "事å‰å…±æœ‰éµ"
+
+#: usr/local/www/vpn_ipsec_phase1.php:171
+#: usr/local/www/vpn_ipsec_phase1.php:564
+#: usr/local/www/vpn_ipsec_phase1.php:577
+#: usr/local/www/vpn_ipsec_phase1.php:576
+#: usr/local/www/vpn_ipsec_phase1.php:597
+#: usr/local/www/vpn_ipsec_phase1.php:171
+#: usr/local/www/vpn_ipsec_phase1.php:597
+msgid "Remote gateway"
+msgstr "リモートゲートウェイ"
+
+#: usr/local/www/vpn_ipsec_phase1.php:177
+#: usr/local/www/vpn_ipsec_phase1.php:177
+msgid "The P1 lifetime must be an integer."
+msgstr "P1ã¯å¯¿å‘½ãŒæ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:180
+#: usr/local/www/vpn_ipsec_phase1.php:181
+#: usr/local/www/vpn_ipsec_phase1.php:181
+msgid "A valid remote gateway address or host name must be specified."
+msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ãŸã¯ãƒ›ã‚¹ãƒˆåを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:188
+#: usr/local/www/vpn_ipsec_phase1.php:194
+#: usr/local/www/vpn_ipsec_phase1.php:194
+#, php-format
+msgid "The remote gateway "%1$s" is already used by phase1 "%2$s"."
+msgstr "リモートゲートウェイã€ã¯%1$s "ã¯ã™ã§ã«ãƒ•ã‚§ãƒ¼ã‚º1 〠%2$s ã€ã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:201
+#: usr/local/www/vpn_ipsec_phase1.php:222
+#: usr/local/www/vpn_ipsec_phase1.php:222
+msgid "Please enter an address for 'My Identifier'"
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:204
+#: usr/local/www/vpn_ipsec_phase1.php:225
+#: usr/local/www/vpn_ipsec_phase1.php:225
+msgid "Please enter a keyid tag for 'My Identifier'"
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãŸã‚ã®éµIDタグを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:207
+#: usr/local/www/vpn_ipsec_phase1.php:228
+#: usr/local/www/vpn_ipsec_phase1.php:228
+msgid "Please enter a fully qualified domain name for 'My Identifier'"
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:210
+#: usr/local/www/vpn_ipsec_phase1.php:231
+#: usr/local/www/vpn_ipsec_phase1.php:231
+msgid "Please enter a user and fully qualified domain name for 'My Identifier'"
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:213
+#: usr/local/www/vpn_ipsec_phase1.php:234
+#: usr/local/www/vpn_ipsec_phase1.php:234
+msgid "Please enter a dynamic domain name for 'My Identifier'"
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®å‹•çš„ãªãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:216
+#: usr/local/www/vpn_ipsec_phase1.php:237
+#: usr/local/www/vpn_ipsec_phase1.php:237
+msgid "A valid IP address for 'My identifier' must be specified."
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åŠ¹ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:219
+#: usr/local/www/vpn_ipsec_phase1.php:240
+#: usr/local/www/vpn_ipsec_phase1.php:240
+msgid "A valid domain name for 'My identifier' must be specified."
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®ãŸã‚ã®æœ‰åŠ¹ãªãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:223
+#: usr/local/www/vpn_ipsec_phase1.php:244
+#: usr/local/www/vpn_ipsec_phase1.php:244
+msgid "A valid FQDN for 'My identifier' must be specified."
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åŠ¹ãªFQDNã¯æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:228
+#: usr/local/www/vpn_ipsec_phase1.php:249
+#: usr/local/www/vpn_ipsec_phase1.php:249
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must "
+"be specified."
+msgstr "「「ç§ã®è­˜åˆ¥å­'ã®user@my.domain.comã®å½¢ã§æœ‰åŠ¹ãªãƒ¦ãƒ¼ã‚¶FQDNã¯ãªã‚Šã¾ã›ã‚“ã€æŒ‡å®šã•ã‚Œã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:233
+#: usr/local/www/vpn_ipsec_phase1.php:254
+#: usr/local/www/vpn_ipsec_phase1.php:254
+msgid "A valid Dynamic DNS address for 'My identifier' must be specified."
+msgstr "「ç§ã®è­˜åˆ¥å­'ã®æœ‰åŠ¹ãªãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:243
+#: usr/local/www/vpn_ipsec_phase1.php:264
+#: usr/local/www/vpn_ipsec_phase1.php:264
+msgid "Please enter an address for 'Peer Identifier'"
+msgstr "「ピア識別å­'ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:246
+#: usr/local/www/vpn_ipsec_phase1.php:267
+#: usr/local/www/vpn_ipsec_phase1.php:267
+msgid "Please enter a keyid tag for 'Peer Identifier'"
+msgstr "「ピア識別å­'ã®éµIDタグを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:249
+#: usr/local/www/vpn_ipsec_phase1.php:270
+#: usr/local/www/vpn_ipsec_phase1.php:270
+msgid "Please enter a fully qualified domain name for 'Peer Identifier'"
+msgstr "「ピア識別å­'ã®å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:252
+#: usr/local/www/vpn_ipsec_phase1.php:273
+#: usr/local/www/vpn_ipsec_phase1.php:273
+msgid ""
+"Please enter a user and fully qualified domain name for 'Peer Identifier'"
+msgstr "「「ピア識別å­'ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:255
+#: usr/local/www/vpn_ipsec_phase1.php:276
+#: usr/local/www/vpn_ipsec_phase1.php:276
+msgid "A valid IP address for 'Peer identifier' must be specified."
+msgstr "「ピア識別å­'ã®æœ‰åŠ¹ãªIPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:258
+#: usr/local/www/vpn_ipsec_phase1.php:279
+#: usr/local/www/vpn_ipsec_phase1.php:279
+msgid "A valid domain name for 'Peer identifier' must be specified."
+msgstr "「ピア識別å­'ã®æœ‰åŠ¹ãªãƒ‰ãƒ¡ã‚¤ãƒ³åを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:262
+#: usr/local/www/vpn_ipsec_phase1.php:283
+#: usr/local/www/vpn_ipsec_phase1.php:283
+msgid "A valid FQDN for 'Peer identifier' must be specified."
+msgstr "「ピア識別å­'ã®æœ‰åŠ¹ãªFQDNã¯æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:267
+#: usr/local/www/vpn_ipsec_phase1.php:288
+#: usr/local/www/vpn_ipsec_phase1.php:288
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' "
+"must be specified."
+msgstr "「「ピア識別å­'ã®user@my.domain.comã®å½¢ã§æœ‰åŠ¹ãªãƒ¦ãƒ¼ã‚¶FQDNã¯ã€ŒæŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:273
+#: usr/local/www/vpn_ipsec_phase1.php:294
+#: usr/local/www/vpn_ipsec_phase1.php:294
+msgid "A numeric value must be specified for DPD delay."
+msgstr "数値ã¯ã€DPDé…延を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:276
+#: usr/local/www/vpn_ipsec_phase1.php:297
+#: usr/local/www/vpn_ipsec_phase1.php:297
+msgid "A numeric value must be specified for DPD retries."
+msgstr "数値ã¯ã€DPDå†è©¦è¡Œã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+msgid "Edit Phase 1"
+msgstr "編集フェーズ1"
+
+#: usr/local/www/vpn_ipsec_phase1.php:509
+#: usr/local/www/vpn_openvpn_client.php:383
+#: usr/local/www/vpn_openvpn_csc.php:311
+#: usr/local/www/vpn_openvpn_server.php:601
+#: usr/local/www/vpn_openvpn_server.php:674
+#: usr/local/www/vpn_openvpn_client.php:388
+#: usr/local/www/vpn_openvpn_csc.php:310
+#: usr/local/www/vpn_openvpn_server.php:692
+#: usr/local/www/vpn_openvpn_client.php:396
+#: usr/local/www/vpn_ipsec_phase1.php:508
+#: usr/local/www/vpn_openvpn_client.php:414
+#: usr/local/www/vpn_ipsec_phase1.php:529
+#: usr/local/www/vpn_openvpn_server.php:718
+#: usr/local/www/vpn_openvpn_client.php:414
+#: usr/local/www/vpn_openvpn_csc.php:310
+#: usr/local/www/vpn_ipsec_phase1.php:529
+#: usr/local/www/vpn_openvpn_server.php:718
+msgid "General information"
+msgstr "一般的ãªæƒ…å ±"
+
+#: usr/local/www/vpn_ipsec_phase1.php:515
+#: usr/local/www/vpn_ipsec_phase1.php:514
+#: usr/local/www/vpn_ipsec_phase1.php:535
+#: usr/local/www/vpn_ipsec_phase1.php:535
+msgid "Disable this phase1 entry"
+msgstr "ã“ã®ãƒ•ã‚§ãƒ¼ã‚º1ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効化"
+
+#: usr/local/www/vpn_ipsec_phase1.php:517
+#: usr/local/www/vpn_ipsec_phase1.php:516
+#: usr/local/www/vpn_ipsec_phase1.php:537
+#: usr/local/www/vpn_ipsec_phase1.php:537
+msgid ""
+"Set this option to disable this phase1 without removing it from the list"
+msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ•ã‚§ãƒ¼ã‚º1を無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定"
+
+#: usr/local/www/vpn_ipsec_phase1.php:523
+#: usr/local/www/vpn_ipsec_phase1.php:522
+#: usr/local/www/vpn_ipsec_phase1.php:543
+#: usr/local/www/vpn_ipsec_phase1.php:543
+msgid "Internet Protocol"
+msgstr "インターãƒãƒƒãƒˆãƒ—ロトコル"
+
+#: usr/local/www/vpn_ipsec_phase1.php:534
+#: usr/local/www/vpn_ipsec_phase1.php:533
+#: usr/local/www/vpn_ipsec_phase1.php:554
+#: usr/local/www/vpn_ipsec_phase1.php:554
+msgid "Select the Internet Protocol family from this dropdown"
+msgstr "ã“ã®ãƒ‰ãƒ­ãƒƒãƒ—ダウンã‹ã‚‰ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ—ロトコルファミリをé¸æŠž"
+
+#: usr/local/www/vpn_ipsec_phase1.php:557
+#: usr/local/www/vpn_ipsec_phase1.php:570
+#: usr/local/www/vpn_ipsec_phase1.php:569
+#: usr/local/www/vpn_ipsec_phase1.php:590
+#: usr/local/www/vpn_ipsec_phase1.php:590
+msgid "Select the interface for the local endpoint of this phase1 entry"
+msgstr "ã“ã®ãƒ•ã‚§ãƒ¼ã‚º1エントリã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—"
+
+#: usr/local/www/vpn_ipsec_phase1.php:568
+#: usr/local/www/vpn_ipsec_phase1.php:581
+#: usr/local/www/vpn_ipsec_phase1.php:580
+#: usr/local/www/vpn_ipsec_phase1.php:601
+#: usr/local/www/vpn_ipsec_phase1.php:601
+msgid "Enter the public IP address or host name of the remote gateway"
+msgstr "パブリックIPアドレスã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®ãƒ›ã‚¹ãƒˆåを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_ipsec_phase1.php:590
+#: usr/local/www/vpn_ipsec_phase1.php:603
+#: usr/local/www/vpn_ipsec_phase1.php:602
+#: usr/local/www/vpn_ipsec_phase1.php:623
+#: usr/local/www/vpn_ipsec_phase1.php:623
+msgid "Phase 1 proposal (Authentication)"
+msgstr "フェーズ1プロãƒãƒ¼ã‚¶ãƒ«ï¼ˆèªè¨¼ï¼‰"
+
+#: usr/local/www/vpn_ipsec_phase1.php:594
+#: usr/local/www/vpn_openvpn_client.php:514
+#: usr/local/www/vpn_openvpn_client.php:519
+#: usr/local/www/vpn_ipsec_phase1.php:607
+#: usr/local/www/vpn_openvpn_client.php:537
+#: usr/local/www/vpn_ipsec_phase1.php:606
+#: usr/local/www/vpn_openvpn_client.php:556
+#: usr/local/www/vpn_ipsec_phase1.php:627
+#: usr/local/www/vpn_openvpn_client.php:556
+#: usr/local/www/vpn_ipsec_phase1.php:627
+msgid "Authentication method"
+msgstr "èªè¨¼æ–¹æ³•"
+
+#: usr/local/www/vpn_ipsec_phase1.php:609
+#: usr/local/www/vpn_ipsec_phase1.php:735
+#: usr/local/www/vpn_ipsec_phase1.php:753
+#: usr/local/www/vpn_ipsec_phase1.php:622
+#: usr/local/www/vpn_ipsec_phase1.php:748
+#: usr/local/www/vpn_ipsec_phase1.php:766
+#: usr/local/www/vpn_ipsec_phase1.php:621
+#: usr/local/www/vpn_ipsec_phase1.php:747
+#: usr/local/www/vpn_ipsec_phase1.php:763
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:768
+#: usr/local/www/vpn_ipsec_phase1.php:784
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:768
+#: usr/local/www/vpn_ipsec_phase1.php:784
+msgid "Must match the setting chosen on the remote side"
+msgstr "リモートå´ã§é¸æŠžã—ãŸè¨­å®šã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/vpn_ipsec_phase1.php:614
+#: usr/local/www/vpn_ipsec_phase1.php:627
+#: usr/local/www/vpn_ipsec_phase1.php:626
+#: usr/local/www/vpn_ipsec_phase1.php:647
+#: usr/local/www/vpn_ipsec_phase1.php:647
+msgid "Negotiation mode"
+msgstr "ãƒã‚´ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_ipsec_phase1.php:625
+#: usr/local/www/vpn_ipsec_phase1.php:638
+#: usr/local/www/vpn_ipsec_phase1.php:637
+#: usr/local/www/vpn_ipsec_phase1.php:658
+#: usr/local/www/vpn_ipsec_phase1.php:658
+msgid "Aggressive is more flexible, but less secure"
+msgstr "攻撃的ãªã€ã‚ˆã‚ŠæŸ”軟ãªã€ã—ã‹ã—安全性ãŒä½Žããªã‚Šã¾ã™"
+
+#: usr/local/www/vpn_ipsec_phase1.php:629
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:641
+#: usr/local/www/vpn_ipsec_phase1.php:662
+#: usr/local/www/vpn_ipsec_phase1.php:662
+msgid "My identifier"
+msgstr "ç§ã®è­˜åˆ¥å­"
+
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:655
+#: usr/local/www/vpn_ipsec_phase1.php:654
+#: usr/local/www/vpn_ipsec_phase1.php:675
+#: usr/local/www/vpn_ipsec_phase1.php:675
+msgid "Peer identifier"
+msgstr "ピア識別å­"
+
+#: usr/local/www/vpn_ipsec_phase1.php:657
+#: usr/local/www/vpn_ipsec_phase1.php:670
+#: usr/local/www/vpn_ipsec_phase1.php:669
+#: usr/local/www/vpn_ipsec_phase1.php:690
+#: usr/local/www/vpn_ipsec_phase1.php:690
+msgid ""
+"NOTE: This is known as the "group" setting on some VPN client "
+"implementations"
+msgstr ""注:ã“ã‚Œã¯ã¨ã—ã¦çŸ¥ã‚‰ã‚Œã¦ã„ã‚‹"ã®å®Ÿè£…〠"一部ã®VPNクライアントã®è¨­å®šã€ã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: usr/local/www/vpn_ipsec_phase1.php:668
+#: usr/local/www/vpn_ipsec_phase1.php:681
+msgid "Input your pre-shared key string"
+msgstr "入力ã‚ãªãŸã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã®æ–‡å­—列"
+
+#: usr/local/www/vpn_ipsec_phase1.php:673
+#: usr/local/www/vpn_ipsec_phase1.php:686
+#: usr/local/www/vpn_ipsec_phase1.php:685
+#: usr/local/www/vpn_ipsec_phase1.php:706
+#: usr/local/www/vpn_ipsec_phase1.php:706
+msgid "Policy Generation"
+msgstr "ãƒãƒªã‚·ãƒ¼ç”Ÿæˆ"
+
+#: usr/local/www/vpn_ipsec_phase1.php:684
+#: usr/local/www/vpn_ipsec_phase1.php:697
+#: usr/local/www/vpn_ipsec_phase1.php:696
+#: usr/local/www/vpn_ipsec_phase1.php:717
+#: usr/local/www/vpn_ipsec_phase1.php:717
+msgid ""
+"When working as a responder (as with mobile clients), this controls how "
+"policies are generated based on SA proposals."
+msgstr "ãƒãƒªã‚·ãƒ¼ã¯ã€SAã®æ案ã«åŸºã¥ã„ã¦ç”Ÿæˆã•ã‚ŒãŸã€ (モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨åŒæ§˜ã«ï¼‰å¿œç­”者ã¨ã—ã¦åƒã„ã¦ã„ãŸã¨ãã«ã€ã“ã‚Œã¯ã©ã®ã‚ˆã†ã«åˆ¶å¾¡ã™ã‚‹ã€Œ 。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:689
+#: usr/local/www/vpn_ipsec_phase1.php:702
+#: usr/local/www/vpn_ipsec_phase1.php:701
+#: usr/local/www/vpn_ipsec_phase1.php:722
+#: usr/local/www/vpn_ipsec_phase1.php:722
+msgid "Proposal Checking"
+msgstr "プロãƒãƒ¼ã‚¶ãƒ«ã®ãƒã‚§ãƒƒã‚¯"
+
+#: usr/local/www/vpn_ipsec_phase1.php:700
+#: usr/local/www/vpn_ipsec_phase1.php:713
+#: usr/local/www/vpn_ipsec_phase1.php:712
+#: usr/local/www/vpn_ipsec_phase1.php:733
+#: usr/local/www/vpn_ipsec_phase1.php:733
+msgid ""
+"Specifies the action of lifetime length, key length, and PFS of the phase 2 "
+"selection on the responder side, and the action of lifetime check in phase 1."
+msgstr "「寿命ã®é•·ã•ã€ã‚­ãƒ¼ã®é•·ã•ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’指定ã—ã€ãƒ•ã‚§ãƒ¼ã‚º2ã®PFS 「応答者å´ã®é¸æŠžã€ãŠã‚ˆã³ãƒ•ã‚§ãƒ¼ã‚º1ã§ã®å¯¿å‘½ç¢ºèªã®ä½œç”¨ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:705
+#: usr/local/www/vpn_openvpn_client.php:706
+#: usr/local/www/vpn_openvpn_server.php:898
+#: usr/local/www/vpn_openvpn_server.php:971
+#: usr/local/www/vpn_openvpn_client.php:711
+#: usr/local/www/vpn_ipsec_phase1.php:718
+#: usr/local/www/vpn_openvpn_server.php:999
+#: usr/local/www/vpn_openvpn_client.php:729
+#: usr/local/www/vpn_ipsec_phase1.php:717
+#: usr/local/www/vpn_openvpn_client.php:748
+#: usr/local/www/vpn_ipsec_phase1.php:738
+#: usr/local/www/vpn_openvpn_server.php:1026
+#: usr/local/www/vpn_openvpn_client.php:748
+#: usr/local/www/vpn_ipsec_phase1.php:738
+#: usr/local/www/vpn_openvpn_server.php:1026
+msgid "Encryption algorithm"
+msgstr "æš—å·åŒ–アルゴリズム"
+
+#: usr/local/www/vpn_ipsec_phase1.php:724
+#: usr/local/www/vpn_ipsec_phase1.php:737
+#: usr/local/www/vpn_ipsec_phase1.php:736
+#: usr/local/www/vpn_ipsec_phase1.php:757
+#: usr/local/www/vpn_ipsec_phase1.php:757
+msgid "Hash algorithm"
+msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ "
+
+#: usr/local/www/vpn_ipsec_phase1.php:740
+#: usr/local/www/vpn_ipsec_phase1.php:753
+#: usr/local/www/vpn_ipsec_phase1.php:752
+#: usr/local/www/vpn_ipsec_phase1.php:773
+#: usr/local/www/vpn_ipsec_phase1.php:773
+msgid "DH key group"
+msgstr "DHéµã‚°ãƒ«ãƒ¼ãƒ—"
+
+#: usr/local/www/vpn_ipsec_phase1.php:751
+#: usr/local/www/vpn_ipsec_phase2.php:603
+#: usr/local/www/vpn_ipsec_phase2.php:629
+#: usr/local/www/vpn_ipsec_phase1.php:764
+msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit"
+msgstr "1 = 768ビット〠2 = 1024ビット〠5 = 1536ビット"
+
+#: usr/local/www/vpn_ipsec_phase1.php:765
+#: usr/local/www/vpn_ipsec_phase1.php:778
+#: usr/local/www/vpn_ipsec_phase1.php:775
+#: usr/local/www/vpn_ipsec_phase1.php:796
+#: usr/local/www/vpn_ipsec_phase1.php:796
+msgid "My Certificate"
+msgstr "ç§ã®è¨¼æ˜Žæ›¸"
+
+#: usr/local/www/vpn_ipsec_phase1.php:779
+#: usr/local/www/vpn_ipsec_phase1.php:792
+#: usr/local/www/vpn_ipsec_phase1.php:789
+#: usr/local/www/vpn_ipsec_phase1.php:810
+#: usr/local/www/vpn_ipsec_phase1.php:810
+msgid "Select a certificate previously configured in the Certificate Manager"
+msgstr "以å‰ã«è¨¼æ˜Žæ›¸ãƒžãƒãƒ¼ã‚¸ãƒ£ã§è¨­å®šã•ã‚ŒãŸè¨¼æ˜Žæ›¸ã‚’é¸æŠžã—ã¾ã™"
+
+#: usr/local/www/vpn_ipsec_phase1.php:784
+#: usr/local/www/vpn_ipsec_phase1.php:797
+#: usr/local/www/vpn_ipsec_phase1.php:794
+#: usr/local/www/vpn_ipsec_phase1.php:815
+#: usr/local/www/vpn_ipsec_phase1.php:815
+msgid "My Certificate Authority"
+msgstr "ç§ã®èªè¨¼å±€"
+
+#: usr/local/www/vpn_ipsec_phase1.php:798
+#: usr/local/www/vpn_ipsec_phase1.php:811
+#: usr/local/www/vpn_ipsec_phase1.php:808
+#: usr/local/www/vpn_ipsec_phase1.php:829
+#: usr/local/www/vpn_ipsec_phase1.php:829
+msgid ""
+"Select a certificate authority previously configured in the Certificate "
+"Manager"
+msgstr "Managerã€ã®ä»¥å‰ã®è¨¼æ˜Žæ›¸ã§æ§‹æˆã•ã‚ŒãŸèªè¨¼å±€ã‚’é¸æŠžã—ã¦""
+
+#: usr/local/www/vpn_ipsec_phase1.php:809
+#: usr/local/www/vpn_ipsec_phase1.php:822
+#: usr/local/www/vpn_ipsec_phase1.php:819
+#: usr/local/www/vpn_ipsec_phase1.php:840
+#: usr/local/www/vpn_ipsec_phase1.php:840
+msgid "NAT Traversal"
+msgstr "NATトラãƒãƒ¼ã‚µãƒ«"
+
+#: usr/local/www/vpn_ipsec_phase1.php:814
+#: usr/local/www/vpn_ipsec_phase1.php:827
+#: usr/local/www/vpn_ipsec_phase1.php:824
+#: usr/local/www/vpn_ipsec_phase1.php:845
+#: usr/local/www/vpn_ipsec_phase1.php:845
+msgid "Force"
+msgstr "力"
+
+#: usr/local/www/vpn_ipsec_phase1.php:818
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase1.php:828
+#: usr/local/www/vpn_ipsec_phase1.php:849
+#: usr/local/www/vpn_ipsec_phase1.php:849
+msgid ""
+"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in "
+"UDP packets) if needed, which can help with clients that are behind "
+"restrictive firewalls"
+msgstr "å¿…è¦ã«å¿œã˜ã¦ã€ 「制é™çš„ファイヤーウォールã®å†…å´ã«ã‚るクライアントを支æ´ã™ã‚‹ã“ã¨ãŒã§ãã¦ã„る〠( UDPパケット内ã®ESPã®ã‚«ãƒ—セルIE) NAT-Tã®ä½¿ç”¨ã‚’有効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€"
+
+#: usr/local/www/vpn_ipsec_phase1.php:824
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:834
+#: usr/local/www/vpn_ipsec_phase1.php:855
+#: usr/local/www/vpn_ipsec_phase1.php:855
+msgid "Dead Peer Detection"
+msgstr "デッドピア検知"
+
+#: usr/local/www/vpn_ipsec_phase1.php:827
+#: usr/local/www/vpn_ipsec_phase1.php:840
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:858
+#: usr/local/www/vpn_ipsec_phase1.php:858
+msgid "Enable DPD"
+msgstr "DPDを有効ã«ã—ã¾ã™"
+
+#: usr/local/www/vpn_ipsec_phase1.php:833
+#: usr/local/www/vpn_ipsec_phase1.php:846
+#: usr/local/www/vpn_ipsec_phase1.php:843
+#: usr/local/www/vpn_ipsec_phase1.php:864
+#: usr/local/www/vpn_ipsec_phase1.php:864
+msgid "Delay between requesting peer acknowledgement"
+msgstr "ピアã®ç¢ºèªå¿œç­”ã‚’è¦æ±‚é–“ã®é…延"
+
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:850
+#: usr/local/www/vpn_ipsec_phase1.php:847
+#: usr/local/www/vpn_ipsec_phase1.php:868
+#: usr/local/www/vpn_ipsec_phase1.php:868
+msgid "retries"
+msgstr "リトライ"
+
+#: usr/local/www/vpn_ipsec_phase1.php:839
+#: usr/local/www/vpn_ipsec_phase1.php:852
+#: usr/local/www/vpn_ipsec_phase1.php:849
+#: usr/local/www/vpn_ipsec_phase1.php:870
+#: usr/local/www/vpn_ipsec_phase1.php:870
+msgid "Number of consecutive failures allowed before disconnect"
+msgstr "切断ã™ã‚‹å‰ã«è¨±å¯ã•ã‚ŒãŸé€£ç¶šå¤±æ•—回数"
+
+#: usr/local/www/vpn_ipsec_phase2.php:109
+#: usr/local/www/vpn_ipsec_phase2.php:111
+#: usr/local/www/vpn_ipsec_phase2.php:111
+msgid "A valid ikeid must be specified."
+msgstr "有効ãªikeidを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:113
+#: usr/local/www/vpn_ipsec_phase2.php:115
+#: usr/local/www/vpn_ipsec_phase2.php:115
+msgid "Local network type"
+msgstr "ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¨®é¡ž"
+
+#: usr/local/www/vpn_ipsec_phase2.php:113
+#: usr/local/www/vpn_ipsec_phase2.php:115
+#: usr/local/www/vpn_ipsec_phase2.php:115
+msgid "P2 Hash Algorithms"
+msgstr "P2ã¯ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ "
+
+#: usr/local/www/vpn_ipsec_phase2.php:116
+#: usr/local/www/vpn_ipsec_phase2.php:118
+#: usr/local/www/vpn_ipsec_phase2.php:118
+msgid "Remote network type"
+msgstr "リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¨®é¡ž"
+
+#: usr/local/www/vpn_ipsec_phase2.php:126
+#: usr/local/www/vpn_ipsec_phase2.php:128
+#: usr/local/www/vpn_ipsec_phase2.php:128
+msgid "A valid local network bit count must be specified."
+msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:129
+#: usr/local/www/vpn_ipsec_phase2.php:131
+#: usr/local/www/vpn_ipsec_phase2.php:131
+msgid "A valid local network IP address must be specified."
+msgstr "有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+#: usr/local/www/vpn_ipsec_phase2.php:146
+#: usr/local/www/vpn_ipsec_phase2.php:170
+#: usr/local/www/vpn_ipsec_phase2.php:178
+#: usr/local/www/vpn_ipsec_phase2.php:178
+msgid "A valid remote network bit count must be specified."
+msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:139
+#: usr/local/www/vpn_ipsec_phase2.php:149
+#: usr/local/www/vpn_ipsec_phase2.php:173
+#: usr/local/www/vpn_ipsec_phase2.php:181
+#: usr/local/www/vpn_ipsec_phase2.php:181
+msgid "A valid remote network IP address must be specified."
+msgstr "有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:158
+#: usr/local/www/vpn_ipsec_phase2.php:162
+#: usr/local/www/vpn_ipsec_phase2.php:168
+#: usr/local/www/vpn_ipsec_phase2.php:172
+#: usr/local/www/vpn_ipsec_phase2.php:192
+#: usr/local/www/vpn_ipsec_phase2.php:196
+#: usr/local/www/vpn_ipsec_phase2.php:206
+#: usr/local/www/vpn_ipsec_phase2.php:210
+#: usr/local/www/vpn_ipsec_phase2.php:206
+#: usr/local/www/vpn_ipsec_phase2.php:210
+msgid "Phase2 with this Local Network is already defined for mobile clients."
+msgstr "ã“ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã®ãƒ•ã‚§ãƒ¼ã‚º2ã¯ã€ã™ã§ã«ãƒ¢ãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãŸã‚ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:189
+#: usr/local/www/vpn_ipsec_phase2.php:193
+#: usr/local/www/vpn_ipsec_phase2.php:199
+#: usr/local/www/vpn_ipsec_phase2.php:203
+#: usr/local/www/vpn_ipsec_phase2.php:223
+#: usr/local/www/vpn_ipsec_phase2.php:227
+#: usr/local/www/vpn_ipsec_phase2.php:237
+#: usr/local/www/vpn_ipsec_phase2.php:241
+#: usr/local/www/vpn_ipsec_phase2.php:237
+#: usr/local/www/vpn_ipsec_phase2.php:241
+msgid ""
+"Phase2 with this Local/Remote networks combination is already defined for "
+"this Phase1."
+msgstr "ã“ã®ãƒ•ã‚§ãƒ¼ã‚º1 "ã“ã®ãƒ­ãƒ¼ã‚«ãƒ«/リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®çµ„ã¿åˆã‚ã›ã§ãƒ•ã‚§ãƒ¼ã‚º2ãŒæ—¢ã«ã®ãŸã‚ã«å®šç¾©ã•ã‚Œã¦ã„る〠。"
+
+#: usr/local/www/vpn_ipsec_phase2.php:204
+#: usr/local/www/vpn_ipsec_phase2.php:216
+#: usr/local/www/vpn_ipsec_phase2.php:240
+#: usr/local/www/vpn_ipsec_phase2.php:254
+#: usr/local/www/vpn_ipsec_phase2.php:254
+msgid "At least one encryption algorithm must be selected."
+msgstr "å°‘ãªãã¨ã‚‚1æš—å·åŒ–アルゴリズムをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:207
+#: usr/local/www/vpn_ipsec_phase2.php:220
+#: usr/local/www/vpn_ipsec_phase2.php:244
+#: usr/local/www/vpn_ipsec_phase2.php:258
+#: usr/local/www/vpn_ipsec_phase2.php:258
+msgid "The P2 lifetime must be an integer."
+msgstr "P2ã¯å¯¿å‘½ãŒæ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+msgid "Edit Phase 2"
+msgstr "編集フェーズ2"
+
+#: usr/local/www/vpn_ipsec_phase2.php:396
+#: usr/local/www/vpn_ipsec_phase2.php:422
+#: usr/local/www/vpn_ipsec_phase2.php:488
+#: usr/local/www/vpn_ipsec_phase2.php:510
+#: usr/local/www/vpn_ipsec_phase2.php:510
+msgid "Disable this phase2 entry"
+msgstr "ã“ã®ãƒ•ã‚§ãƒ¼ã‚º2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効化"
+
+#: usr/local/www/vpn_ipsec_phase2.php:398
+#: usr/local/www/vpn_ipsec_phase2.php:424
+#: usr/local/www/vpn_ipsec_phase2.php:490
+#: usr/local/www/vpn_ipsec_phase2.php:512
+#: usr/local/www/vpn_ipsec_phase2.php:512
+msgid ""
+"Set this option to disable this phase2 entry without removing it from the "
+"list"
+msgstr "リストã€ã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ãƒ•ã‚§ãƒ¼ã‚º2ã®ã‚¨ãƒ³ãƒˆãƒªã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€"
+
+#: usr/local/www/vpn_ipsec_phase2.php:433
+#: usr/local/www/vpn_ipsec_phase2.php:459
+#: usr/local/www/vpn_ipsec_phase2.php:525
+#: usr/local/www/vpn_ipsec_phase2.php:561
+#: usr/local/www/vpn_ipsec_phase2.php:547
+#: usr/local/www/vpn_ipsec_phase2.php:582
+#: usr/local/www/vpn_ipsec_phase2.php:547
+#: usr/local/www/vpn_ipsec_phase2.php:582
+#, php-format
+msgid "%s subnet"
+msgstr "%sサブãƒãƒƒãƒˆ"
+
+#: usr/local/www/vpn_ipsec_phase2.php:512
+#: usr/local/www/vpn_ipsec_phase2.php:538
+#: usr/local/www/vpn_ipsec_phase2.php:640
+#: usr/local/www/vpn_ipsec_phase2.php:661
+#: usr/local/www/vpn_ipsec_phase2.php:661
+msgid "Phase 2 proposal (SA/Key Exchange)"
+msgstr "フェーズ2ã®æ案( SA /éµäº¤æ›ï¼‰"
+
+#: usr/local/www/vpn_ipsec_phase2.php:527
+#: usr/local/www/vpn_ipsec_phase2.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:655
+#: usr/local/www/vpn_ipsec_phase2.php:676
+#: usr/local/www/vpn_ipsec_phase2.php:676
+msgid "ESP is encryption, AH is authentication only"
+msgstr "ESPã¯æš—å·åŒ–ã•ã‚Œã€ AHã¯èªè¨¼ã®ã¿ã§ã™"
+
+#: usr/local/www/vpn_ipsec_phase2.php:532
+#: usr/local/www/vpn_ipsec_phase2.php:558
+#: usr/local/www/vpn_ipsec_phase2.php:660
+#: usr/local/www/vpn_ipsec_phase2.php:681
+#: usr/local/www/vpn_ipsec_phase2.php:681
+msgid "Encryption algorithms"
+msgstr "æš—å·åŒ–アルゴリズム"
+
+#: usr/local/www/vpn_ipsec_phase2.php:574
+#: usr/local/www/vpn_ipsec_phase2.php:600
+#: usr/local/www/vpn_ipsec_phase2.php:702
+#: usr/local/www/vpn_ipsec_phase2.php:723
+#: usr/local/www/vpn_ipsec_phase2.php:723
+msgid ""
+"Hint: use 3DES for best compatibility or if you have a hardware crypto "
+"accelerator card. Blowfish is usually the fastest in software encryption"
+msgstr ""ヒント:最高ã®äº’æ›æ€§ã®ãŸã‚ã«ã€ã¾ãŸã¯ã‚ãªãŸãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·ãŒã‚ã‚‹å ´åˆã¯3DESを使用ã™ã‚‹ã€Œã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚¿ã‚«ãƒ¼ãƒ‰ã‚’。フグã¯é€šå¸¸ã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢æš—å·åŒ–ã§æœ€é€Ÿã§ã‚ã‚‹"
+
+#: usr/local/www/vpn_ipsec_phase2.php:580
+#: usr/local/www/vpn_ipsec_phase2.php:606
+#: usr/local/www/vpn_ipsec_phase2.php:708
+#: usr/local/www/vpn_ipsec_phase2.php:729
+#: usr/local/www/vpn_ipsec_phase2.php:729
+msgid "Hash algorithms"
+msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ "
+
+#: usr/local/www/vpn_ipsec_phase2.php:590
+#: usr/local/www/vpn_ipsec_phase2.php:616
+#: usr/local/www/vpn_ipsec_phase2.php:718
+#: usr/local/www/vpn_ipsec_phase2.php:739
+#: usr/local/www/vpn_ipsec_phase2.php:739
+msgid "PFS key group"
+msgstr "PFSキー群"
+
+#: usr/local/www/vpn_ipsec_phase2.php:614
+#: usr/local/www/vpn_ipsec_phase2.php:640
+#: usr/local/www/vpn_ipsec_phase2.php:736
+#: usr/local/www/vpn_ipsec_phase2.php:757
+#: usr/local/www/vpn_ipsec_phase2.php:757
+msgid "Set globally in mobile client options"
+msgstr "モãƒã‚¤ãƒ«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚ªãƒ—ションã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¨­å®š"
+
+#: usr/local/www/vpn_ipsec_phase2.php:632
+#: usr/local/www/vpn_ipsec_phase2.php:658
+#: usr/local/www/vpn_ipsec_phase2.php:754
+#: usr/local/www/vpn_ipsec_phase2.php:775
+#: usr/local/www/vpn_ipsec_phase2.php:775
+msgid "Automatically ping host"
+msgstr "自動的ã«pingをホスト"
+
+#: usr/local/www/vpn_l2tp.php:300
+msgid "Enable l2tp server"
+msgstr "L2TPサーãƒã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326
+#: usr/local/www/vpn_l2tp.php:329 usr/local/www/vpn_l2tp.php:329
+msgid ""
+"Enter the IP address the L2TP server should give to clients for use as their "
+""gateway""
+msgstr "「 「ゲートウェイ〠L2TPサーãƒã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«é¡§å®¢ã«å½¼ã‚‰ã®ã‚’与ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã€IPアドレスを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338
+#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_l2tp.php:341
+msgid "Specify the starting address for the client IP address subnet."
+msgstr "クライアントã®IPアドレスã€ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390
+#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394
+#: usr/local/www/vpn_pppoe_edit.php:394
+msgid "Subnet netmask"
+msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯"
+
+#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403
+#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407
+msgid "is"
+msgstr "ã§ã™"
+
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359
+#: usr/local/www/vpn_l2tp.php:362 usr/local/www/vpn_l2tp.php:362
+msgid "Number of L2TP users"
+msgstr "L2TPユーザーã®æ•°"
+
+#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372
+#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:375
+msgid "is ten L2TP clients"
+msgstr "10 L2TPクライアントã§ã‚ã‚‹"
+
+#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376
+#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:379
+msgid "Secret"
+msgstr "秘密"
+
+#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380
+#: usr/local/www/vpn_l2tp.php:383 usr/local/www/vpn_l2tp.php:383
+msgid ""
+"Specify optional secret shared between peers. Required on some devices/"
+"setups."
+msgstr "「ピア間ã§å…±æœ‰ã•ã‚Œã€ã‚ªãƒ—ションã®ç§˜å¯†ã‚’指定ã—ã¾ã™ã€‚一部ã®ãƒ‡ãƒã‚¤ã‚¹/上ã§å¿…è¦ãª"セットアップ。"
+
+#: usr/local/www/vpn_l2tp.php:383
+msgid "Encryption type"
+msgstr "æš—å·åŒ–ã®ç¨®é¡ž"
+
+#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387
+#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:390
+msgid "CHAP"
+msgstr "CHAP"
+
+#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607
+#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388
+#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606
+#: usr/local/www/services_captiveportal.php:622 usr/local/www/vpn_l2tp.php:391
+#: usr/local/www/services_captiveportal.php:622
+msgid "PAP"
+msgstr "PAP"
+
+#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391
+#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:394
+msgid "Specifies which protocol to use for authentication."
+msgstr "èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ—ロトコルを指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395
+#: usr/local/www/vpn_l2tp.php:398 usr/local/www/vpn_l2tp.php:398
+msgid "L2TP DNS Servers"
+msgstr "L2TP DNSサーãƒ"
+
+#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401
+#: usr/local/www/vpn_l2tp.php:404 usr/local/www/vpn_l2tp.php:404
+msgid "primary and secondary DNS servers assigned to L2TP clients"
+msgstr "L2TPクライアントã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ—ライマリãŠã‚ˆã³ã‚»ã‚«ãƒ³ãƒ€ãƒªDNSサーãƒ"
+
+#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415
+#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:418
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used."
+msgstr "下ã®ã€Œè¨­å®šã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã•ã‚ŒãŸRADIUSサーãƒã‚’使用ã—ã¦èªè¨¼ã•ã‚Œã¾ã™ã€ 。ローカルユーザデータベースã¯ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419
+#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:422
+msgid "Sends accounting packets to the RADIUS server."
+msgstr "RADIUSサーãƒã«ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒ‘ケットをé€ä¿¡ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_l2tp.php:421
+msgid "RADIUS server"
+msgstr "RADIUSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426
+#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:429
+msgid "Enter the IP address of the RADIUS server."
+msgstr "RADIUSサーãƒã®IPアドレスを入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433
+#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:436
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server."
+msgstr "サーãƒãƒ¼ã€ŒRADIUSã¸ã®èªè¨¼ã«ä½¿ç”¨ã•ã‚Œã‚‹å…±æœ‰ç§˜å¯†ã‚’入力ã—ã¦ãã ã•ã„ "。"
+
+#: usr/local/www/vpn_l2tp.php:435
+msgid "RADIUS issued IP's"
+msgstr "RADIUSã¯ã€IPã®ã‚’発行ã—ã¾ã—ãŸ"
+
+#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440
+#: usr/local/www/vpn_l2tp.php:443 usr/local/www/vpn_l2tp.php:443
+msgid "Issue IP Addresses via RADIUS server."
+msgstr "å•é¡Œã®IPã¯ã€RADIUSサーãƒã‚’経由ã—ã¦è§£æ±ºã€‚"
+
+#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453
+#: usr/local/www/vpn_l2tp.php:456 usr/local/www/vpn_l2tp.php:456
+msgid ""
+"Don't forget to add a firewall rule to permit traffic from L2TP clients!"
+msgstr "「 L2TPクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’許å¯ã™ã‚‹ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„ ï¼"
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87
+#: usr/local/www/vpn_l2tp_users.php:87
+msgid "The l2tp user list has been modified"
+msgstr "L2TPユーザリストãŒå¤‰æ›´ã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87
+#: usr/local/www/vpn_l2tp_users.php:87
+msgid "Warning: this will terminate all current l2tp sessions!"
+msgstr "警告:ã“ã‚Œã¯ç¾åœ¨ã®ã™ã¹ã¦ã®L2TPセッションを終了ã—ã¾ã™ ï¼"
+
+#: usr/local/www/vpn_l2tp_users_edit.php:164
+#: usr/local/www/vpn_l2tp_users_edit.php:165
+#: usr/local/www/vpn_l2tp_users_edit.php:165
+msgid "If you want to change the users password, enter it here twice."
+msgstr "ã‚ãªãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを変更ã™ã‚‹å ´åˆã¯ã€äºŒåº¦ã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_client.php:40
+#: usr/local/www/vpn_openvpn_client.php:366
+#: usr/local/www/vpn_openvpn_csc.php:294
+#: usr/local/www/vpn_openvpn_server.php:584
+#: usr/local/www/vpn_openvpn_server.php:657
+#: usr/local/www/vpn_openvpn_client.php:371
+#: usr/local/www/vpn_openvpn_csc.php:293
+#: usr/local/www/vpn_openvpn_server.php:675
+#: usr/local/www/vpn_openvpn_client.php:379
+#: usr/local/www/vpn_openvpn_client.php:397
+#: usr/local/www/vpn_openvpn_server.php:701
+#: usr/local/www/vpn_openvpn_client.php:40
+#: usr/local/www/vpn_openvpn_client.php:397
+#: usr/local/www/vpn_openvpn_csc.php:293
+#: usr/local/www/vpn_openvpn_server.php:701
+msgid "Client"
+msgstr "クライアント"
+
+#: usr/local/www/vpn_openvpn_client.php:82
+#: usr/local/www/vpn_openvpn_client.php:86
+#: usr/local/www/vpn_openvpn_client.php:86
+msgid "Client successfully deleted"
+msgstr "クライアント正常ã«å‰Šé™¤"
+
+#: usr/local/www/vpn_openvpn_client.php:164
+#: usr/local/www/vpn_openvpn_server.php:227
+#: usr/local/www/vpn_openvpn_server.php:232
+#: usr/local/www/vpn_openvpn_client.php:165
+#: usr/local/www/vpn_openvpn_server.php:233
+#: usr/local/www/vpn_openvpn_client.php:171
+#: usr/local/www/vpn_openvpn_client.php:182
+#: usr/local/www/vpn_openvpn_server.php:254
+#: usr/local/www/vpn_openvpn_client.php:182
+#: usr/local/www/vpn_openvpn_server.php:254
+msgid "The specified 'Local port' is in use. Please select another value"
+msgstr "指定ã•ã‚ŒãŸ'ローカルãƒãƒ¼ãƒˆã¯ã€Œä½¿ç”¨ä¸­ã§ã™ã€‚別ã®å€¤ã‚’é¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_openvpn_client.php:183
+#: usr/local/www/vpn_openvpn_client.php:184
+#: usr/local/www/vpn_openvpn_client.php:190
+#: usr/local/www/vpn_openvpn_client.php:201
+#: usr/local/www/vpn_openvpn_client.php:201
+msgid "User name and password are required for proxy with authentication."
+msgstr "ユーザーåã¨ãƒ‘スワードã¯ã€èªè¨¼ä»˜ãプロキシã®ãŸã‚ã«å¿…è¦ã¨ã•ã‚Œã‚‹ã€‚"
+
+#: usr/local/www/vpn_openvpn_client.php:200
+#: usr/local/www/vpn_openvpn_server.php:235
+#: usr/local/www/vpn_openvpn_server.php:240
+#: usr/local/www/vpn_openvpn_client.php:204
+#: usr/local/www/vpn_openvpn_server.php:241
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_client.php:228
+#: usr/local/www/vpn_openvpn_server.php:262
+#: usr/local/www/vpn_openvpn_client.php:228
+#: usr/local/www/vpn_openvpn_server.php:262
+msgid "The field 'Shared Key' does not appear to be valid"
+msgstr "フィールド'共有キー'ã¯æœ‰åŠ¹ã§ã¯ãªã„よã†ã§ã™"
+
+#: usr/local/www/vpn_openvpn_client.php:205
+#: usr/local/www/vpn_openvpn_server.php:240
+#: usr/local/www/vpn_openvpn_server.php:245
+#: usr/local/www/vpn_openvpn_client.php:209
+#: usr/local/www/vpn_openvpn_server.php:246
+#: usr/local/www/vpn_openvpn_client.php:215
+#: usr/local/www/vpn_openvpn_client.php:233
+#: usr/local/www/vpn_openvpn_server.php:267
+#: usr/local/www/vpn_openvpn_client.php:233
+#: usr/local/www/vpn_openvpn_server.php:267
+msgid "The field 'TLS Authentication Key' does not appear to be valid"
+msgstr "フィールド' TLSèªè¨¼ã‚­ãƒ¼'ã¯æœ‰åŠ¹ã§ã¯ãªã„よã†ã§ã™"
+
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/vpn_openvpn_server.php:286
+#: usr/local/www/vpn_openvpn_server.php:291
+#: usr/local/www/vpn_openvpn_client.php:218
+#: usr/local/www/vpn_openvpn_server.php:292
+#: usr/local/www/vpn_openvpn_client.php:224
+#: usr/local/www/vpn_openvpn_client.php:242
+#: usr/local/www/vpn_openvpn_server.php:313
+#: usr/local/www/vpn_openvpn_client.php:242
+#: usr/local/www/vpn_openvpn_server.php:313
+msgid "Shared key"
+msgstr "共有éµ"
+
+#: usr/local/www/vpn_openvpn_client.php:367
+#: usr/local/www/vpn_openvpn_csc.php:295
+#: usr/local/www/vpn_openvpn_server.php:585
+#: usr/local/www/vpn_openvpn_server.php:658
+#: usr/local/www/vpn_openvpn_client.php:372
+#: usr/local/www/vpn_openvpn_csc.php:294
+#: usr/local/www/vpn_openvpn_server.php:676
+#: usr/local/www/vpn_openvpn_client.php:380
+#: usr/local/www/vpn_openvpn_client.php:398
+#: usr/local/www/vpn_openvpn_server.php:702
+#: usr/local/www/vpn_openvpn_client.php:398
+#: usr/local/www/vpn_openvpn_csc.php:294
+#: usr/local/www/vpn_openvpn_server.php:702
+msgid "Client Specific Overrides"
+msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_client.php:397
+#: usr/local/www/vpn_openvpn_client.php:402
+#: usr/local/www/vpn_openvpn_client.php:410
+#: usr/local/www/vpn_openvpn_client.php:428
+#: usr/local/www/vpn_openvpn_client.php:428
+msgid "Disable this client"
+msgstr "ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_client.php:402
+#: usr/local/www/vpn_openvpn_client.php:407
+#: usr/local/www/vpn_openvpn_client.php:415
+#: usr/local/www/vpn_openvpn_client.php:433
+#: usr/local/www/vpn_openvpn_client.php:433
+msgid ""
+"Set this option to disable this client without removing it from the list"
+msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定"
+
+#: usr/local/www/vpn_openvpn_client.php:406
+#: usr/local/www/vpn_openvpn_server.php:624
+#: usr/local/www/vpn_openvpn_server.php:697
+#: usr/local/www/vpn_openvpn_client.php:411
+#: usr/local/www/vpn_openvpn_server.php:715
+#: usr/local/www/vpn_openvpn_client.php:419
+#: usr/local/www/vpn_openvpn_client.php:437
+#: usr/local/www/vpn_openvpn_server.php:741
+#: usr/local/www/vpn_openvpn_client.php:437
+#: usr/local/www/vpn_openvpn_server.php:741
+msgid "Server Mode"
+msgstr "サーãƒãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_client.php:436
+#: usr/local/www/vpn_openvpn_client.php:441
+#: usr/local/www/vpn_openvpn_client.php:449
+#: usr/local/www/vpn_openvpn_client.php:467
+#: usr/local/www/vpn_openvpn_client.php:467
+msgid "Device mode"
+msgstr "デãƒã‚¤ã‚¹ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_client.php:476
+#: usr/local/www/vpn_openvpn_server.php:716
+#: usr/local/www/vpn_openvpn_server.php:789
+#: usr/local/www/vpn_openvpn_client.php:481
+#: usr/local/www/vpn_openvpn_server.php:817
+#: usr/local/www/vpn_openvpn_client.php:499
+#: usr/local/www/vpn_openvpn_client.php:518
+#: usr/local/www/vpn_openvpn_server.php:844
+#: usr/local/www/vpn_openvpn_client.php:518
+#: usr/local/www/vpn_openvpn_server.php:844
+msgid "Local port"
+msgstr "ローカルãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/vpn_openvpn_client.php:480
+#: usr/local/www/vpn_openvpn_client.php:485
+#: usr/local/www/vpn_openvpn_client.php:503
+#: usr/local/www/vpn_openvpn_client.php:522
+#: usr/local/www/vpn_openvpn_client.php:522
+msgid ""
+"Set this option if you would like to bind to a specific port. Leave this "
+"blank or enter 0 for a random dynamic port."
+msgstr "「ã‚ãªãŸã¯ã€ç‰¹å®šã®ãƒãƒ¼ãƒˆã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ã€Œãƒ–ランクã¾ãŸã¯ãƒ©ãƒ³ãƒ€ãƒ å‹•çš„ãƒãƒ¼ãƒˆã«0を入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/vpn_openvpn_client.php:484
+#: usr/local/www/vpn_openvpn_client.php:489
+#: usr/local/www/vpn_openvpn_client.php:507
+#: usr/local/www/vpn_openvpn_client.php:526
+#: usr/local/www/vpn_openvpn_client.php:526
+msgid "Server host or address"
+msgstr "Serverホストã¾ãŸã¯ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/vpn_openvpn_client.php:490
+#: usr/local/www/vpn_openvpn_client.php:495
+#: usr/local/www/vpn_openvpn_client.php:513
+#: usr/local/www/vpn_openvpn_client.php:532
+#: usr/local/www/vpn_openvpn_client.php:532
+msgid "Server port"
+msgstr "サーãƒãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/vpn_openvpn_client.php:496
+#: usr/local/www/vpn_openvpn_client.php:501
+#: usr/local/www/vpn_openvpn_client.php:519
+#: usr/local/www/vpn_openvpn_client.php:538
+#: usr/local/www/vpn_openvpn_client.php:538
+msgid "Proxy host or address"
+msgstr "プロキシã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/vpn_openvpn_client.php:502
+#: usr/local/www/vpn_openvpn_client.php:507
+#: usr/local/www/vpn_openvpn_client.php:525
+#: usr/local/www/vpn_openvpn_client.php:544
+#: usr/local/www/vpn_openvpn_client.php:544
+msgid "Proxy port"
+msgstr "プロキシãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/vpn_openvpn_client.php:508
+#: usr/local/www/vpn_openvpn_client.php:513
+#: usr/local/www/vpn_openvpn_client.php:531
+#: usr/local/www/vpn_openvpn_client.php:550
+#: usr/local/www/vpn_openvpn_client.php:550
+msgid "Proxy authentication extra options"
+msgstr "プロキシèªè¨¼ã®ä½™åˆ†ãªã‚ªãƒ—ション"
+
+#: usr/local/www/vpn_openvpn_client.php:520
+#: usr/local/www/vpn_openvpn_client.php:525
+#: usr/local/www/vpn_openvpn_client.php:543
+#: usr/local/www/vpn_openvpn_client.php:562
+#: usr/local/www/vpn_openvpn_client.php:562
+msgid "basic"
+msgstr "基本"
+
+#: usr/local/www/vpn_openvpn_client.php:521
+#: usr/local/www/vpn_openvpn_client.php:526
+#: usr/local/www/vpn_openvpn_client.php:544
+#: usr/local/www/vpn_openvpn_client.php:563
+#: usr/local/www/vpn_openvpn_client.php:563
+msgid "ntlm"
+msgstr "NTLM"
+
+#: usr/local/www/vpn_openvpn_client.php:552
+#: usr/local/www/vpn_openvpn_client.php:557
+#: usr/local/www/vpn_openvpn_client.php:575
+#: usr/local/www/vpn_openvpn_client.php:594
+#: usr/local/www/vpn_openvpn_client.php:594
+msgid "Server host name resolution"
+msgstr "サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆå解決"
+
+#: usr/local/www/vpn_openvpn_client.php:562
+#: usr/local/www/vpn_openvpn_client.php:567
+#: usr/local/www/vpn_openvpn_client.php:585
+#: usr/local/www/vpn_openvpn_client.php:604
+#: usr/local/www/vpn_openvpn_client.php:604
+msgid "Infinitely resolve server"
+msgstr "ç„¡é™ã«è§£æ±ºã‚µãƒ¼ãƒ"
+
+#: usr/local/www/vpn_openvpn_client.php:567
+#: usr/local/www/vpn_openvpn_client.php:572
+#: usr/local/www/vpn_openvpn_client.php:590
+#: usr/local/www/vpn_openvpn_client.php:609
+#: usr/local/www/vpn_openvpn_client.php:609
+msgid ""
+"Continuously attempt to resolve the server host name. Useful when "
+"communicating with a server that is not permanently connected to the Internet"
+msgstr "「継続的ã«ã‚µãƒ¼ãƒã®ãƒ›ã‚¹ãƒˆåを解決ã—よã†ã€‚ã¨ãã«ä¾¿åˆ©ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«å¸¸æ™‚接続ã•ã‚Œã¦ã„ãªã„サーãƒãƒ¼ã¨ã®é€šä¿¡"
+
+#: usr/local/www/vpn_openvpn_client.php:584
+#: usr/local/www/vpn_openvpn_server.php:733
+#: usr/local/www/vpn_openvpn_server.php:806
+#: usr/local/www/vpn_openvpn_client.php:589
+#: usr/local/www/vpn_openvpn_server.php:834
+#: usr/local/www/vpn_openvpn_client.php:607
+#: usr/local/www/vpn_openvpn_client.php:626
+#: usr/local/www/vpn_openvpn_server.php:861
+#: usr/local/www/vpn_openvpn_client.php:626
+#: usr/local/www/vpn_openvpn_server.php:861
+msgid "Cryptographic Settings"
+msgstr "æš—å·åŒ–設定"
+
+#: usr/local/www/vpn_openvpn_client.php:587
+#: usr/local/www/vpn_openvpn_server.php:736
+#: usr/local/www/vpn_openvpn_server.php:809
+#: usr/local/www/vpn_openvpn_client.php:592
+#: usr/local/www/vpn_openvpn_server.php:837
+#: usr/local/www/vpn_openvpn_client.php:610
+#: usr/local/www/vpn_openvpn_client.php:629
+#: usr/local/www/vpn_openvpn_server.php:864
+#: usr/local/www/vpn_openvpn_client.php:629
+#: usr/local/www/vpn_openvpn_server.php:864
+msgid "TLS Authentication"
+msgstr "TLSèªè¨¼"
+
+#: usr/local/www/vpn_openvpn_client.php:597
+#: usr/local/www/vpn_openvpn_server.php:746
+#: usr/local/www/vpn_openvpn_server.php:819
+#: usr/local/www/vpn_openvpn_client.php:602
+#: usr/local/www/vpn_openvpn_server.php:847
+#: usr/local/www/vpn_openvpn_client.php:620
+#: usr/local/www/vpn_openvpn_client.php:639
+#: usr/local/www/vpn_openvpn_server.php:874
+#: usr/local/www/vpn_openvpn_client.php:639
+#: usr/local/www/vpn_openvpn_server.php:874
+msgid "Enable authentication of TLS packets"
+msgstr "TLSパケットã®èªè¨¼ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_client.php:611
+#: usr/local/www/vpn_openvpn_server.php:760
+#: usr/local/www/vpn_openvpn_server.php:833
+#: usr/local/www/vpn_openvpn_client.php:616
+#: usr/local/www/vpn_openvpn_server.php:861
+#: usr/local/www/vpn_openvpn_client.php:634
+#: usr/local/www/vpn_openvpn_client.php:653
+#: usr/local/www/vpn_openvpn_server.php:888
+#: usr/local/www/vpn_openvpn_client.php:653
+#: usr/local/www/vpn_openvpn_server.php:888
+msgid "Automatically generate a shared TLS authentication key"
+msgstr "自動的ã«å…±æœ‰TLSèªè¨¼ã‚­ãƒ¼ã‚’生æˆ"
+
+#: usr/local/www/vpn_openvpn_client.php:622
+#: usr/local/www/vpn_openvpn_client.php:699
+#: usr/local/www/vpn_openvpn_server.php:771
+#: usr/local/www/vpn_openvpn_server.php:891
+#: usr/local/www/vpn_openvpn_server.php:844
+#: usr/local/www/vpn_openvpn_server.php:964
+#: usr/local/www/vpn_openvpn_client.php:627
+#: usr/local/www/vpn_openvpn_client.php:704
+#: usr/local/www/vpn_openvpn_server.php:872
+#: usr/local/www/vpn_openvpn_server.php:992
+#: usr/local/www/vpn_openvpn_client.php:645
+#: usr/local/www/vpn_openvpn_client.php:722
+#: usr/local/www/vpn_openvpn_client.php:664
+#: usr/local/www/vpn_openvpn_client.php:741
+#: usr/local/www/vpn_openvpn_server.php:899
+#: usr/local/www/vpn_openvpn_server.php:1019
+#: usr/local/www/vpn_openvpn_client.php:664
+#: usr/local/www/vpn_openvpn_client.php:741
+#: usr/local/www/vpn_openvpn_server.php:899
+#: usr/local/www/vpn_openvpn_server.php:1019
+msgid "Paste your shared key here"
+msgstr "ã“ã“ã«ã‚ãªãŸã®å…±æœ‰ã‚­ãƒ¼ã‚’貼り付ã‘ã‚‹"
+
+#: usr/local/www/vpn_openvpn_client.php:648
+#: usr/local/www/vpn_openvpn_client.php:653
+#: usr/local/www/vpn_openvpn_client.php:671
+#: usr/local/www/vpn_openvpn_client.php:690
+#: usr/local/www/vpn_openvpn_client.php:690
+msgid "Client Certificate"
+msgstr "クライアント証明書"
+
+#: usr/local/www/vpn_openvpn_client.php:677
+#: usr/local/www/vpn_openvpn_server.php:869
+#: usr/local/www/vpn_openvpn_server.php:942
+#: usr/local/www/vpn_openvpn_client.php:682
+#: usr/local/www/vpn_openvpn_server.php:970
+#: usr/local/www/vpn_openvpn_client.php:700
+#: usr/local/www/vpn_openvpn_client.php:719
+#: usr/local/www/vpn_openvpn_server.php:997
+#: usr/local/www/vpn_openvpn_client.php:719
+#: usr/local/www/vpn_openvpn_server.php:997
+msgid "Shared Key"
+msgstr "共有éµ"
+
+#: usr/local/www/vpn_openvpn_client.php:688
+#: usr/local/www/vpn_openvpn_server.php:880
+#: usr/local/www/vpn_openvpn_server.php:953
+#: usr/local/www/vpn_openvpn_client.php:693
+#: usr/local/www/vpn_openvpn_server.php:981
+#: usr/local/www/vpn_openvpn_client.php:711
+#: usr/local/www/vpn_openvpn_client.php:730
+#: usr/local/www/vpn_openvpn_server.php:1008
+#: usr/local/www/vpn_openvpn_client.php:730
+#: usr/local/www/vpn_openvpn_server.php:1008
+msgid "Automatically generate a shared key"
+msgstr "自動的ã«å…±æœ‰éµã‚’生æˆã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_client.php:724
+#: usr/local/www/vpn_openvpn_server.php:916
+#: usr/local/www/vpn_openvpn_server.php:989
+#: usr/local/www/vpn_openvpn_client.php:729
+#: usr/local/www/vpn_openvpn_server.php:1017
+#: usr/local/www/vpn_openvpn_client.php:747
+#: usr/local/www/vpn_openvpn_client.php:766
+#: usr/local/www/vpn_openvpn_server.php:1044
+#: usr/local/www/vpn_openvpn_client.php:766
+#: usr/local/www/vpn_openvpn_server.php:1044
+msgid "Hardware Crypto"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·"
+
+#: usr/local/www/vpn_openvpn_client.php:745
+#: usr/local/www/vpn_openvpn_csc.php:374
+#: usr/local/www/vpn_openvpn_server.php:980
+#: usr/local/www/vpn_openvpn_server.php:1053
+#: usr/local/www/vpn_openvpn_client.php:750
+#: usr/local/www/vpn_openvpn_csc.php:373
+#: usr/local/www/vpn_openvpn_server.php:1081
+#: usr/local/www/vpn_openvpn_client.php:768
+#: usr/local/www/vpn_openvpn_client.php:787
+#: usr/local/www/vpn_openvpn_server.php:1108
+#: usr/local/www/vpn_openvpn_client.php:787
+#: usr/local/www/vpn_openvpn_csc.php:373
+#: usr/local/www/vpn_openvpn_server.php:1108
+msgid "Tunnel Settings"
+msgstr "トンãƒãƒ«è¨­å®š"
+
+#: usr/local/www/vpn_openvpn_client.php:748
+#: usr/local/www/vpn_openvpn_csc.php:377
+#: usr/local/www/vpn_openvpn_server.php:1450
+#: usr/local/www/vpn_openvpn_server.php:1592
+#: usr/local/www/vpn_openvpn_client.php:753
+#: usr/local/www/vpn_openvpn_csc.php:376
+#: usr/local/www/vpn_openvpn_server.php:1633
+#: usr/local/www/vpn_openvpn_server.php:1685
+#: usr/local/www/vpn_openvpn_csc.php:376
+#: usr/local/www/vpn_openvpn_server.php:1685
+msgid "Tunnel Network"
+msgstr "トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_client.php:752
+#: usr/local/www/vpn_openvpn_csc.php:381
+#: usr/local/www/vpn_openvpn_client.php:757
+#: usr/local/www/vpn_openvpn_csc.php:380
+#: usr/local/www/vpn_openvpn_client.php:775
+#: usr/local/www/vpn_openvpn_client.php:794
+#: usr/local/www/vpn_openvpn_client.php:794
+#: usr/local/www/vpn_openvpn_csc.php:380
+msgid ""
+"This is the virtual network used for private communications between this "
+"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr "クライアントã¨ã‚µãƒ¼ãƒãƒ¼ã®ã€Œã“ã‚Œã¯ã€ã“ã®é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•ã‚Œã‚‹ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る「 CIDR (例: 10.0.8.0/24 )を使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚ã‚‹ã¨ã¿ãªã•ã‚Œã€ç¬¬äºŒã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"アドレスã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™"
+
+#: usr/local/www/vpn_openvpn_client.php:766
+#: usr/local/www/vpn_openvpn_client.php:771
+msgid ""
+"This is a network that will be routed through the tunnel, so that a site-to-"
+"site VPN can be established without manually changing the routing tables. "
+"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the "
+"remote LAN here. You may leave this blank to only communicate with other "
+"clients"
+msgstr "「ã“ã‚Œã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•ã€‚ã“ã‚Œã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ã“ã“ã§å…¥åŠ›ã—ãŸã€Œã“ã“ã«ãƒªãƒ¢ãƒ¼ãƒˆLAN 。ã‚ãªãŸã ã‘ã®ä»–ã®ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/vpn_openvpn_client.php:776
+#: usr/local/www/vpn_openvpn_client.php:781
+#: usr/local/www/vpn_openvpn_client.php:827
+#: usr/local/www/vpn_openvpn_client.php:846
+#: usr/local/www/vpn_openvpn_client.php:846
+msgid "Limit outgoing bandwidth"
+msgstr "発信帯域幅を制é™"
+
+#: usr/local/www/vpn_openvpn_client.php:780
+#: usr/local/www/vpn_openvpn_client.php:785
+#: usr/local/www/vpn_openvpn_client.php:831
+#: usr/local/www/vpn_openvpn_client.php:850
+#: usr/local/www/vpn_openvpn_client.php:850
+msgid ""
+"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The "
+"input value has to be something between 100 bytes/sec and 100 Mbytes/sec "
+"(entered as bytes per second)"
+msgstr "「ã“ã®ãƒˆãƒ³ãƒãƒ«ã®æœ€å¤§é€ä¿¡å¸¯åŸŸå¹…ã¯åˆ¶é™ãªã—ã«ç©ºã®ã¾ã¾ã«ã—ã¾ã™ã€‚ 「入力値ãŒ100ãƒã‚¤ãƒˆ/秒ã¨100Mãƒã‚¤ãƒˆ/秒ã®é–“ã«ä½•ã‹ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ (ãƒã‚¤ãƒˆ/秒ã§å…¥åŠ›ï¼‰"
+
+#: usr/local/www/vpn_openvpn_client.php:797
+#: usr/local/www/vpn_openvpn_server.php:1087
+#: usr/local/www/vpn_openvpn_server.php:1229
+#: usr/local/www/vpn_openvpn_client.php:802
+#: usr/local/www/vpn_openvpn_server.php:1271
+#: usr/local/www/vpn_openvpn_client.php:848
+#: usr/local/www/vpn_openvpn_client.php:867
+#: usr/local/www/vpn_openvpn_server.php:1298
+#: usr/local/www/vpn_openvpn_client.php:867
+#: usr/local/www/vpn_openvpn_server.php:1298
+msgid "Compress tunnel packets using the LZO algorithm"
+msgstr "LZOアルゴリズムを使用ã—ã¦ã€ãƒˆãƒ³ãƒãƒ«ãƒ‘ケットを圧縮"
+
+#: usr/local/www/vpn_openvpn_client.php:805
+#: usr/local/www/vpn_openvpn_server.php:1095
+#: usr/local/www/vpn_openvpn_server.php:1237
+#: usr/local/www/vpn_openvpn_client.php:810
+#: usr/local/www/vpn_openvpn_server.php:1279
+#: usr/local/www/vpn_openvpn_client.php:856
+#: usr/local/www/vpn_openvpn_client.php:875
+#: usr/local/www/vpn_openvpn_server.php:1306
+#: usr/local/www/vpn_openvpn_client.php:875
+#: usr/local/www/vpn_openvpn_server.php:1306
+msgid "Type-of-Service"
+msgstr "サービスタイプ"
+
+#: usr/local/www/vpn_openvpn_client.php:815
+#: usr/local/www/vpn_openvpn_server.php:1105
+#: usr/local/www/vpn_openvpn_server.php:1247
+#: usr/local/www/vpn_openvpn_client.php:820
+#: usr/local/www/vpn_openvpn_server.php:1289
+#: usr/local/www/vpn_openvpn_client.php:866
+#: usr/local/www/vpn_openvpn_client.php:885
+#: usr/local/www/vpn_openvpn_server.php:1316
+#: usr/local/www/vpn_openvpn_client.php:885
+#: usr/local/www/vpn_openvpn_server.php:1316
+msgid ""
+"Set the TOS IP header value of tunnel packets to match the encapsulated "
+"packet value"
+msgstr "パケット値「カプセル化ã«åˆã‚ã›ã¦ã€ãƒˆãƒ³ãƒãƒ«ãƒ‘ケットã®TOS IPヘッダーã®å€¤ã‚’設定ã—ã¾ã™""
+
+#: usr/local/www/vpn_openvpn_client.php:826
+#: usr/local/www/vpn_openvpn_server.php:1409
+#: usr/local/www/vpn_openvpn_server.php:1551
+#: usr/local/www/vpn_openvpn_client.php:831
+#: usr/local/www/vpn_openvpn_server.php:1593
+#: usr/local/www/vpn_openvpn_client.php:880
+#: usr/local/www/vpn_openvpn_client.php:899
+#: usr/local/www/vpn_openvpn_server.php:1645
+#: usr/local/www/vpn_openvpn_client.php:899
+#: usr/local/www/vpn_openvpn_server.php:1645
+msgid "Advanced configuration"
+msgstr "高度ãªè¨­å®š"
+
+#: usr/local/www/vpn_openvpn_client.php:835
+#: usr/local/www/vpn_openvpn_client.php:840
+#: usr/local/www/vpn_openvpn_client.php:889
+#: usr/local/www/vpn_openvpn_client.php:908
+#: usr/local/www/vpn_openvpn_client.php:908
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN client "
+"configuration here, separated by a semicolon"
+msgstr "セミコロンã§åŒºåˆ‡ã‚‰ã‚Œã€ä»¥ä¸‹ã«è¨­å®šã€ã§ã¯ã€ OpenVPNクライアントã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_openvpn_client.php:836
+#: usr/local/www/vpn_openvpn_client.php:841
+#: usr/local/www/vpn_openvpn_client.php:890
+msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;"
+msgstr "例:ルート10.0.0.0 255.255.255.0;"
+
+#: usr/local/www/vpn_openvpn_client.php:891
+#: usr/local/www/vpn_openvpn_client.php:896
+#: usr/local/www/vpn_openvpn_client.php:949
+#: usr/local/www/vpn_openvpn_client.php:968
+#: usr/local/www/vpn_openvpn_client.php:968
+msgid "edit client"
+msgstr "編集クライアント"
+
+#: usr/local/www/vpn_openvpn_client.php:895
+#: usr/local/www/vpn_openvpn_client.php:900
+#: usr/local/www/vpn_openvpn_client.php:953
+#: usr/local/www/vpn_openvpn_client.php:972
+#: usr/local/www/vpn_openvpn_client.php:972
+msgid "delete client"
+msgstr "クライアントを削除ã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_client.php:908
+#: usr/local/www/vpn_openvpn_client.php:913
+#: usr/local/www/vpn_openvpn_client.php:966
+#: usr/local/www/vpn_openvpn_client.php:985
+#: usr/local/www/vpn_openvpn_client.php:985
+msgid "add client"
+msgstr "クライアントを追加"
+
+#: usr/local/www/vpn_openvpn_client.php:915
+#: usr/local/www/vpn_openvpn_client.php:920
+#: usr/local/www/vpn_openvpn_client.php:973
+#: usr/local/www/vpn_openvpn_client.php:992
+#: usr/local/www/vpn_openvpn_client.php:992
+msgid "Additional OpenVPN clients can be added here."
+msgstr "追加ã®OpenVPNã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_csc.php:40 usr/local/www/vpn_openvpn_csc.php:40
+msgid "Client Specific Override"
+msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66
+#: usr/local/www/vpn_openvpn_csc.php:66
+msgid "Client Specific Override successfully deleted"
+msgstr "クライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãŒæ­£å¸¸ã«å‰Šé™¤"
+
+#: usr/local/www/vpn_openvpn_csc.php:131
+#: usr/local/www/vpn_openvpn_server.php:244
+#: usr/local/www/vpn_openvpn_server.php:249
+#: usr/local/www/vpn_openvpn_csc.php:130
+#: usr/local/www/vpn_openvpn_server.php:250
+#: usr/local/www/vpn_openvpn_server.php:271
+#: usr/local/www/vpn_openvpn_csc.php:130
+#: usr/local/www/vpn_openvpn_server.php:271
+msgid "The field 'DNS Server #1' must contain a valid IP address"
+msgstr "フィールドã®DNSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:133
+#: usr/local/www/vpn_openvpn_server.php:246
+#: usr/local/www/vpn_openvpn_server.php:251
+#: usr/local/www/vpn_openvpn_csc.php:132
+#: usr/local/www/vpn_openvpn_server.php:252
+#: usr/local/www/vpn_openvpn_server.php:273
+#: usr/local/www/vpn_openvpn_csc.php:132
+#: usr/local/www/vpn_openvpn_server.php:273
+msgid "The field 'DNS Server #2' must contain a valid IP address"
+msgstr "フィールドã®DNSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:135
+#: usr/local/www/vpn_openvpn_server.php:248
+#: usr/local/www/vpn_openvpn_server.php:253
+#: usr/local/www/vpn_openvpn_csc.php:134
+#: usr/local/www/vpn_openvpn_server.php:254
+#: usr/local/www/vpn_openvpn_server.php:275
+#: usr/local/www/vpn_openvpn_csc.php:134
+#: usr/local/www/vpn_openvpn_server.php:275
+msgid "The field 'DNS Server #3' must contain a valid IP address"
+msgstr "フィールドã®DNSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:137
+#: usr/local/www/vpn_openvpn_server.php:250
+#: usr/local/www/vpn_openvpn_server.php:255
+#: usr/local/www/vpn_openvpn_csc.php:136
+#: usr/local/www/vpn_openvpn_server.php:256
+#: usr/local/www/vpn_openvpn_server.php:277
+#: usr/local/www/vpn_openvpn_csc.php:136
+#: usr/local/www/vpn_openvpn_server.php:277
+msgid "The field 'DNS Server #4' must contain a valid IP address"
+msgstr "フィールドã®DNSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:142
+#: usr/local/www/vpn_openvpn_server.php:255
+#: usr/local/www/vpn_openvpn_server.php:260
+#: usr/local/www/vpn_openvpn_csc.php:141
+#: usr/local/www/vpn_openvpn_server.php:261
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/vpn_openvpn_csc.php:141
+#: usr/local/www/vpn_openvpn_server.php:282
+msgid "The field 'NTP Server #1' must contain a valid IP address"
+msgstr "フィールド「 NTPサーãƒ"
+
+#: usr/local/www/vpn_openvpn_csc.php:144
+#: usr/local/www/vpn_openvpn_server.php:257
+#: usr/local/www/vpn_openvpn_server.php:262
+#: usr/local/www/vpn_openvpn_csc.php:143
+#: usr/local/www/vpn_openvpn_server.php:263
+#: usr/local/www/vpn_openvpn_server.php:284
+#: usr/local/www/vpn_openvpn_csc.php:143
+#: usr/local/www/vpn_openvpn_server.php:284
+msgid "The field 'NTP Server #2' must contain a valid IP address"
+msgstr "フィールド「 NTPサーãƒ"
+
+#: usr/local/www/vpn_openvpn_csc.php:146
+#: usr/local/www/vpn_openvpn_server.php:259
+#: usr/local/www/vpn_openvpn_server.php:264
+#: usr/local/www/vpn_openvpn_csc.php:145
+#: usr/local/www/vpn_openvpn_server.php:265
+#: usr/local/www/vpn_openvpn_server.php:286
+#: usr/local/www/vpn_openvpn_csc.php:145
+#: usr/local/www/vpn_openvpn_server.php:286
+msgid "The field 'NTP Server #3' must contain a valid IP address"
+msgstr "フィールド「 NTPサーãƒ"
+
+#: usr/local/www/vpn_openvpn_csc.php:148
+#: usr/local/www/vpn_openvpn_server.php:261
+#: usr/local/www/vpn_openvpn_server.php:266
+#: usr/local/www/vpn_openvpn_csc.php:147
+#: usr/local/www/vpn_openvpn_server.php:267
+#: usr/local/www/vpn_openvpn_server.php:288
+#: usr/local/www/vpn_openvpn_csc.php:147
+#: usr/local/www/vpn_openvpn_server.php:288
+msgid "The field 'NTP Server #4' must contain a valid IP address"
+msgstr "フィールド「 NTPサーãƒ"
+
+#: usr/local/www/vpn_openvpn_csc.php:154
+#: usr/local/www/vpn_openvpn_server.php:267
+#: usr/local/www/vpn_openvpn_server.php:272
+#: usr/local/www/vpn_openvpn_csc.php:153
+#: usr/local/www/vpn_openvpn_server.php:273
+#: usr/local/www/vpn_openvpn_server.php:294
+#: usr/local/www/vpn_openvpn_csc.php:153
+#: usr/local/www/vpn_openvpn_server.php:294
+msgid "The field 'WINS Server #1' must contain a valid IP address"
+msgstr "フィールドã«ã¯ã€ 「 WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:156
+#: usr/local/www/vpn_openvpn_server.php:269
+#: usr/local/www/vpn_openvpn_server.php:274
+#: usr/local/www/vpn_openvpn_csc.php:155
+#: usr/local/www/vpn_openvpn_server.php:275
+#: usr/local/www/vpn_openvpn_server.php:296
+#: usr/local/www/vpn_openvpn_csc.php:155
+#: usr/local/www/vpn_openvpn_server.php:296
+msgid "The field 'WINS Server #2' must contain a valid IP address"
+msgstr "フィールドã«ã¯ã€ 「 WINSサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:160
+#: usr/local/www/vpn_openvpn_server.php:273
+#: usr/local/www/vpn_openvpn_server.php:278
+#: usr/local/www/vpn_openvpn_csc.php:159
+#: usr/local/www/vpn_openvpn_server.php:279
+#: usr/local/www/vpn_openvpn_server.php:300
+#: usr/local/www/vpn_openvpn_csc.php:159
+#: usr/local/www/vpn_openvpn_server.php:300
+msgid ""
+"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP "
+"address"
+msgstr "「フィールドã€ã®NetBIOSデータé…信サーãƒ"
+
+#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324
+#: usr/local/www/vpn_openvpn_csc.php:324
+msgid "Disable this override"
+msgstr "ã“ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329
+#: usr/local/www/vpn_openvpn_csc.php:329
+msgid ""
+"Set this option to disable this client-specific override without removing it "
+"from the list"
+msgstr "リストã‹ã‚‰ã€Œå‰Šé™¤ã›ãšã«ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå›ºæœ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€"
+
+#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333
+#: usr/local/www/vpn_openvpn_csc.php:333
+msgid "Common name"
+msgstr "共通å"
+
+#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337
+#: usr/local/www/vpn_openvpn_csc.php:337
+msgid "Enter the client's X.509 common name here"
+msgstr "ã“ã“ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®X.509共通åを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349
+#: usr/local/www/vpn_openvpn_csc.php:349
+msgid "Connection blocking"
+msgstr "接続ブロック"
+
+#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359
+#: usr/local/www/vpn_openvpn_csc.php:359
+msgid "Block this client connection based on its common name"
+msgstr "ãã®å…±é€šã®åå‰ã«åŸºã¥ã„ã¦ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæŽ¥ç¶šã‚’ブロックã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364
+#: usr/local/www/vpn_openvpn_csc.php:364
+msgid ""
+"Don't use this option to permanently disable a client due to a compromised "
+"key or password. Use a CRL (certificate revocation list) instead"
+msgstr "キーã¾ãŸã¯ãƒ‘スワード「永久ã«èµ·å› ã™ã‚‹ä¾µå®³ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを使用ã—ãªã„ã§ãã ã•ã„〠。代ã‚ã‚Šã«ã€CRL (証明書失効リスト)を使用"
+
+#: usr/local/www/vpn_openvpn_csc.php:391
+#: usr/local/www/vpn_openvpn_server.php:1011
+#: usr/local/www/vpn_openvpn_server.php:1153
+#: usr/local/www/vpn_openvpn_csc.php:390
+#: usr/local/www/vpn_openvpn_server.php:1181
+#: usr/local/www/vpn_openvpn_server.php:1208
+#: usr/local/www/vpn_openvpn_csc.php:390
+#: usr/local/www/vpn_openvpn_server.php:1208
+msgid "Redirect Gateway"
+msgstr "ゲートウェイã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ"
+
+#: usr/local/www/vpn_openvpn_csc.php:401
+#: usr/local/www/vpn_openvpn_server.php:1021
+#: usr/local/www/vpn_openvpn_server.php:1163
+#: usr/local/www/vpn_openvpn_csc.php:400
+#: usr/local/www/vpn_openvpn_server.php:1191
+#: usr/local/www/vpn_openvpn_server.php:1218
+#: usr/local/www/vpn_openvpn_csc.php:400
+#: usr/local/www/vpn_openvpn_server.php:1218
+msgid "Force all client generated traffic through the tunnel"
+msgstr "トンãƒãƒ«ã‚’介ã—ã¦ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”Ÿæˆã•ã‚ŒãŸãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’強制的ã«"
+
+#: usr/local/www/vpn_openvpn_csc.php:412
+#: usr/local/www/vpn_openvpn_server.php:1155
+#: usr/local/www/vpn_openvpn_server.php:1297
+#: usr/local/www/vpn_openvpn_csc.php:411
+#: usr/local/www/vpn_openvpn_server.php:1339
+#: usr/local/www/vpn_openvpn_server.php:1366
+#: usr/local/www/vpn_openvpn_csc.php:411
+#: usr/local/www/vpn_openvpn_server.php:1366
+msgid "Client Settings"
+msgstr "クライアント設定"
+
+#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414
+#: usr/local/www/vpn_openvpn_csc.php:414
+msgid "Server Definitions"
+msgstr "サーãƒãƒ¼å®šç¾©"
+
+#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424
+#: usr/local/www/vpn_openvpn_csc.php:424
+msgid "Prevent this client from receiving any server-defined client settings"
+msgstr "ä»»æ„ã®ã‚µãƒ¼ãƒãƒ¼ã«å®šç¾©ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®è¨­å®šã‚’å—ã‘ã¦ã‹ã‚‰ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’防ã"
+
+#: usr/local/www/vpn_openvpn_csc.php:510
+#: usr/local/www/vpn_openvpn_server.php:1271
+#: usr/local/www/vpn_openvpn_server.php:1413
+#: usr/local/www/vpn_openvpn_csc.php:509
+#: usr/local/www/vpn_openvpn_server.php:1455
+#: usr/local/www/vpn_openvpn_server.php:1507
+#: usr/local/www/vpn_openvpn_csc.php:509
+#: usr/local/www/vpn_openvpn_server.php:1507
+msgid "NTP Servers"
+msgstr "NTPサーãƒãƒ¼"
+
+#: usr/local/www/vpn_openvpn_csc.php:520
+#: usr/local/www/vpn_openvpn_server.php:1281
+#: usr/local/www/vpn_openvpn_server.php:1423
+#: usr/local/www/vpn_openvpn_csc.php:519
+#: usr/local/www/vpn_openvpn_server.php:1465
+#: usr/local/www/vpn_openvpn_server.php:1517
+#: usr/local/www/vpn_openvpn_csc.php:519
+#: usr/local/www/vpn_openvpn_server.php:1517
+msgid "Provide a NTP server list to clients"
+msgstr "クライアントã«NTPサーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã‚’æä¾›"
+
+#: usr/local/www/vpn_openvpn_csc.php:546
+#: usr/local/www/vpn_openvpn_server.php:1307
+#: usr/local/www/vpn_openvpn_server.php:1449
+#: usr/local/www/vpn_openvpn_csc.php:545
+#: usr/local/www/vpn_openvpn_server.php:1491
+#: usr/local/www/vpn_openvpn_server.php:1543
+#: usr/local/www/vpn_openvpn_csc.php:545
+#: usr/local/www/vpn_openvpn_server.php:1543
+msgid "NetBIOS Options"
+msgstr "NetBIOSã®ã‚ªãƒ—ション"
+
+#: usr/local/www/vpn_openvpn_csc.php:556
+#: usr/local/www/vpn_openvpn_server.php:1317
+#: usr/local/www/vpn_openvpn_server.php:1459
+#: usr/local/www/vpn_openvpn_csc.php:555
+#: usr/local/www/vpn_openvpn_server.php:1501
+#: usr/local/www/vpn_openvpn_server.php:1553
+#: usr/local/www/vpn_openvpn_csc.php:555
+#: usr/local/www/vpn_openvpn_server.php:1553
+msgid "Enable NetBIOS over TCP/IP"
+msgstr "NetBIOS over TCP / IPを有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_openvpn_csc.php:561
+msgid ""
+"If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) "
+"will be disabled"
+msgstr ""ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ã™ã¹ã¦ã®NetBIOS-over-TCP/IPオプション( WINSを内蔵ã—ã¦ã„) ã€ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™"
+
+#: usr/local/www/vpn_openvpn_csc.php:568
+#: usr/local/www/vpn_openvpn_server.php:1329
+#: usr/local/www/vpn_openvpn_server.php:1471
+#: usr/local/www/vpn_openvpn_csc.php:567
+#: usr/local/www/vpn_openvpn_server.php:1513
+#: usr/local/www/vpn_openvpn_server.php:1565
+#: usr/local/www/vpn_openvpn_csc.php:567
+#: usr/local/www/vpn_openvpn_server.php:1565
+msgid "Node Type"
+msgstr "ノード種別"
+
+#: usr/local/www/vpn_openvpn_csc.php:581
+#: usr/local/www/vpn_openvpn_server.php:1342
+#: usr/local/www/vpn_openvpn_server.php:1484
+#: usr/local/www/vpn_openvpn_csc.php:580
+#: usr/local/www/vpn_openvpn_server.php:1526
+#: usr/local/www/vpn_openvpn_server.php:1578
+#: usr/local/www/vpn_openvpn_csc.php:580
+#: usr/local/www/vpn_openvpn_server.php:1578
+msgid ""
+"Possible options: b-node (broadcasts), p-node (point-to-point name queries "
+"to a WINS server), m-node (broadcast then query name server), and h-node "
+"(query name server, then broadcast)"
+msgstr "「å¯èƒ½ãªã‚ªãƒ—ション:B-ノード(ブロードキャスト) 〠Pノード(ãƒã‚¤ãƒ³ãƒˆÂ·ãƒ„ー·ãƒã‚¤ãƒ³ãƒˆã®åå‰ç…§ä¼šã€ 〠WINSサーãƒãƒ¼ã«ï¼‰ 〠Mノード(ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒã«ç…§ä¼šã—ã€ãƒ–ロードキャスト) ã€ãŠã‚ˆã³hノード〠(クエリーãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãã®å¾Œãƒ–ロードキャスト)"
+
+#: usr/local/www/vpn_openvpn_csc.php:595
+#: usr/local/www/vpn_openvpn_server.php:1356
+#: usr/local/www/vpn_openvpn_server.php:1498
+#: usr/local/www/vpn_openvpn_csc.php:594
+#: usr/local/www/vpn_openvpn_server.php:1540
+#: usr/local/www/vpn_openvpn_server.php:1592
+#: usr/local/www/vpn_openvpn_csc.php:594
+#: usr/local/www/vpn_openvpn_server.php:1592
+msgid ""
+"A NetBIOS ScopetID provides an extended naming service fortNetBIOS over "
+"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to "
+"only those nodes with the same NetBIOS scope ID"
+msgstr "TCP / IPã€ã®NetBIOS ScopetIDéŽå‰°æ‹¡å¼µãƒãƒ¼ãƒŸãƒ³ã‚°ã‚µãƒ¼ãƒ“スfortNetBIOSã‚’æä¾›ã—ã¦ã„ã¾ã™ã€ 。 NetBIOSスコープIDã¯ã€å˜ä¸€ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§NetBIOSトラフィックを分離ã™ã‚‹ã€ã¨ã¯ã€åŒã˜NetBIOSスコープIDã‚’æŒã¤ãƒŽãƒ¼ãƒ‰ã®ã¿"
+
+#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647
+#: usr/local/www/vpn_openvpn_csc.php:647
+msgid ""
+"Enter any additional options you would like to add for this client specific "
+"override, separated by a semicolon"
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸã€Œã‚ãªãŸã¯ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ç‰¹å®šã®ãŸã‚ã«è¿½åŠ ã—ãŸã„ä»»æ„ã®è¿½åŠ ã®ã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_openvpn_csc.php:649
+#: usr/local/www/vpn_openvpn_server.php:1419
+#: usr/local/www/vpn_openvpn_server.php:1561
+#: usr/local/www/vpn_openvpn_csc.php:648
+#: usr/local/www/vpn_openvpn_server.php:1603
+#: usr/local/www/vpn_openvpn_server.php:1655
+#: usr/local/www/vpn_openvpn_csc.php:648
+#: usr/local/www/vpn_openvpn_server.php:1655
+msgid "EXAMPLE: push "route 10.0.0.0 255.255.255.0""
+msgstr "例:プッシュã€ãƒ«ãƒ¼ãƒˆ10.0.0.0 255.255.255.0 ""
+
+#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695
+#: usr/local/www/vpn_openvpn_csc.php:695
+msgid "edit csc"
+msgstr "編集CSC"
+
+#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698
+#: usr/local/www/vpn_openvpn_csc.php:698
+msgid "Do you really want to delete this csc?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®CSCを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699
+#: usr/local/www/vpn_openvpn_csc.php:699
+msgid "delete csc"
+msgstr "CSCを削除"
+
+#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710
+#: usr/local/www/vpn_openvpn_csc.php:710
+msgid "add csc"
+msgstr "CSCを追加"
+
+#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717
+#: usr/local/www/vpn_openvpn_csc.php:717
+msgid "Additional OpenVPN client specific overrides can be added here."
+msgstr "追加ã®OpenVPNクライアント固有ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:86
+#: usr/local/www/vpn_openvpn_server.php:87
+#: usr/local/www/vpn_openvpn_server.php:87
+msgid "Server successfully deleted"
+msgstr "サーãƒãƒ¼ã‚’正常ã«å‰Šé™¤"
+
+#: usr/local/www/vpn_openvpn_server.php:210
+#: usr/local/www/vpn_openvpn_server.php:215
+#: usr/local/www/vpn_openvpn_server.php:216
+#: usr/local/www/vpn_openvpn_server.php:228
+#: usr/local/www/vpn_openvpn_server.php:228
+msgid ""
+"You must select a Backend for Authentication if the server mode requires "
+"User Auth."
+msgstr "ユーザーèªè¨¼ã‚’「サーãƒãƒ¼Â·ãƒ¢ãƒ¼ãƒ‰ãŒå¿…è¦ãªå ´åˆã¯ã€èªè¨¼ã®ãŸã‚ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/vpn_openvpn_server.php:277
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/vpn_openvpn_server.php:283
+#: usr/local/www/vpn_openvpn_server.php:304
+#: usr/local/www/vpn_openvpn_server.php:304
+msgid "The field 'Concurrent connections' must be numeric."
+msgstr "フィールド「åŒæ™‚接続ã€ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_openvpn_server.php:290
+#: usr/local/www/vpn_openvpn_server.php:296
+#: usr/local/www/vpn_openvpn_server.php:297
+#: usr/local/www/vpn_openvpn_server.php:318
+#: usr/local/www/vpn_openvpn_server.php:318
+msgid "Tunnel network"
+msgstr "トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:615
+#: usr/local/www/vpn_openvpn_server.php:688
+#: usr/local/www/vpn_openvpn_server.php:706
+#: usr/local/www/vpn_openvpn_server.php:732
+#: usr/local/www/vpn_openvpn_server.php:732
+msgid "Disable this server"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’使用ä¸å¯ã«"
+
+#: usr/local/www/vpn_openvpn_server.php:620
+#: usr/local/www/vpn_openvpn_server.php:693
+#: usr/local/www/vpn_openvpn_server.php:711
+#: usr/local/www/vpn_openvpn_server.php:737
+#: usr/local/www/vpn_openvpn_server.php:737
+msgid ""
+"Set this option to disable this server without removing it from the list"
+msgstr "「リストã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定"
+
+#: usr/local/www/vpn_openvpn_server.php:639
+#: usr/local/www/vpn_openvpn_server.php:712
+#: usr/local/www/vpn_openvpn_server.php:730
+#: usr/local/www/vpn_openvpn_server.php:756
+#: usr/local/www/vpn_openvpn_server.php:756
+msgid "Backend for authentication"
+msgstr "èªè¨¼ã®ãŸã‚ã«ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_server.php:671
+#: usr/local/www/vpn_openvpn_server.php:744
+#: usr/local/www/vpn_openvpn_server.php:762
+#: usr/local/www/vpn_openvpn_server.php:788
+#: usr/local/www/vpn_openvpn_server.php:788
+msgid "Device Mode"
+msgstr "デãƒã‚¤ã‚¹ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_openvpn_server.php:797
+#: usr/local/www/vpn_openvpn_server.php:870
+#: usr/local/www/vpn_openvpn_server.php:898
+#: usr/local/www/vpn_openvpn_server.php:925
+#: usr/local/www/vpn_openvpn_server.php:925
+msgid "Peer Certificate Revocation List"
+msgstr "証明書失効リストピア"
+
+#: usr/local/www/vpn_openvpn_server.php:822
+#: usr/local/www/vpn_openvpn_server.php:895
+#: usr/local/www/vpn_openvpn_server.php:923
+#: usr/local/www/vpn_openvpn_server.php:950
+#: usr/local/www/vpn_openvpn_server.php:950
+msgid "Server Certificate"
+msgstr "サーãƒãƒ¼è¨¼æ˜Žæ›¸"
+
+#: usr/local/www/vpn_openvpn_server.php:851
+#: usr/local/www/vpn_openvpn_server.php:924
+#: usr/local/www/vpn_openvpn_server.php:952
+#: usr/local/www/vpn_openvpn_server.php:979
+#: usr/local/www/vpn_openvpn_server.php:979
+msgid "DH Parameters Length"
+msgstr "DHパラメータ長"
+
+#: usr/local/www/vpn_openvpn_server.php:934
+#: usr/local/www/vpn_openvpn_server.php:1007
+#: usr/local/www/vpn_openvpn_server.php:1035
+#: usr/local/www/vpn_openvpn_server.php:1062
+#: usr/local/www/vpn_openvpn_server.php:1062
+msgid "Certificate Depth"
+msgstr "証明書ã®æ·±ã•"
+
+#: usr/local/www/vpn_openvpn_server.php:952
+#: usr/local/www/vpn_openvpn_server.php:1025
+#: usr/local/www/vpn_openvpn_server.php:1053
+#: usr/local/www/vpn_openvpn_server.php:1080
+#: usr/local/www/vpn_openvpn_server.php:1080
+msgid ""
+"When a certificate-based client logs in, do not accept certificates below "
+"this depth. Useful for denying certificates made with intermediate CAs "
+"generated from the same CA as the server."
+msgstr "ã“ã®æ·±ã•ã€ã®è¨¼æ˜Žæ›¸ãƒ™ãƒ¼ã‚¹ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®è¨¼æ˜Žæ›¸ã‚’å—ã‘入れãªã„〠。サーãƒã¨åŒã˜CAã‹ã‚‰ç”Ÿæˆã•ã‚ŒãŸä¸­é–“CA ã€ã§ä½œã‚‰ã‚ŒãŸè¨¼æ˜Žæ›¸ã‚’å¦å®šã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:959
+#: usr/local/www/vpn_openvpn_server.php:1032
+#: usr/local/www/vpn_openvpn_server.php:1060
+#: usr/local/www/vpn_openvpn_server.php:1087
+#: usr/local/www/vpn_openvpn_server.php:1087
+msgid "Strict User/CN Matching"
+msgstr "厳格ãªãƒ¦ãƒ¼ã‚¶ãƒ¼/ CNマッãƒãƒ³ã‚°"
+
+#: usr/local/www/vpn_openvpn_server.php:969
+#: usr/local/www/vpn_openvpn_server.php:1042
+#: usr/local/www/vpn_openvpn_server.php:1070
+#: usr/local/www/vpn_openvpn_server.php:1097
+#: usr/local/www/vpn_openvpn_server.php:1097
+msgid ""
+"When authenticating users, enforce a match between the common name of the "
+"client certificate and the username given at login."
+msgstr "クライアント証明書ã¨ã€ãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«æŒ‡å®šã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã€ãƒ¦ãƒ¼ã‚¶ã‚’èªè¨¼ã™ã‚‹ã¨ãã®ä¸€èˆ¬çš„ãªåå‰ã¨ã®é–“ã®ä¸€è‡´ã‚’強制ã™ã‚‹ã€ 。"
+
+#: usr/local/www/vpn_openvpn_server.php:983
+#: usr/local/www/vpn_openvpn_server.php:1056
+#: usr/local/www/vpn_openvpn_server.php:1084
+#: usr/local/www/vpn_openvpn_client.php:771
+#: usr/local/www/vpn_openvpn_client.php:790
+#: usr/local/www/vpn_openvpn_server.php:1111
+#: usr/local/www/vpn_openvpn_client.php:790
+#: usr/local/www/vpn_openvpn_server.php:1111
+msgid "IPv4 Tunnel Network"
+msgstr "IPv4ã®ãƒˆãƒ³ãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:987
+#: usr/local/www/vpn_openvpn_server.php:1060
+#: usr/local/www/vpn_openvpn_server.php:1088
+#: usr/local/www/vpn_openvpn_server.php:1115
+#: usr/local/www/vpn_openvpn_server.php:1115
+msgid ""
+"This is the IPv4 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The "
+"first network address will be assigned to thetserver virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“ã‚Œã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•ã‚Œã‚‹IPv4ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る「 CIDR (例: 10.0.8.0/24 )を使用ã—ã¦è¡¨ç¾ã€‚ 「最åˆã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒthetserver仮想インターフェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)"
+
+#: usr/local/www/vpn_openvpn_server.php:997
+#: usr/local/www/vpn_openvpn_server.php:1070
+#: usr/local/www/vpn_openvpn_server.php:1098
+#: usr/local/www/vpn_openvpn_client.php:785
+#: usr/local/www/vpn_openvpn_client.php:804
+#: usr/local/www/vpn_openvpn_server.php:1125
+#: usr/local/www/vpn_openvpn_client.php:804
+#: usr/local/www/vpn_openvpn_server.php:1125
+msgid "IPv6 Tunnel Network"
+msgstr "IPv6トンãƒãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:1001
+#: usr/local/www/vpn_openvpn_server.php:1074
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. fe80::/64). The first "
+"network address will be assigned to thetserver virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“ã‚Œã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•ã‚Œã‚‹IPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯thetserver仮想インターフェイスã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)"
+
+#: usr/local/www/vpn_openvpn_server.php:1029
+#: usr/local/www/vpn_openvpn_server.php:1171
+#: usr/local/www/vpn_openvpn_server.php:1199
+msgid "IPv4 Local Network"
+msgstr "IPv4ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:1033
+#: usr/local/www/vpn_openvpn_server.php:1175
+#: usr/local/www/vpn_openvpn_server.php:1203
+msgid ""
+"This is the network that will be accessible from the remote endpoint. "
+"Expressed as a CIDR range. You may leave this blank if you don't want to add "
+"a route to the local network through this tunnel on the remote machine. This "
+"is generally set to your LAN network"
+msgstr ""ã“ã‚Œã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã•ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る。 ã€ã®CIDR範囲ã¨ã—ã¦è¡¨ã•ã€‚ã‚ãªãŸãŒè¿½åŠ ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã‚‚"リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’。ã“ã‚Œã¯ã€ 「一般的ã«ã€ã‚ãªãŸã®LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_openvpn_server.php:1042
+#: usr/local/www/vpn_openvpn_server.php:1184
+#: usr/local/www/vpn_openvpn_server.php:1212
+msgid "IPv6 Local Network"
+msgstr "IPv6ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:1046
+#: usr/local/www/vpn_openvpn_server.php:1188
+#: usr/local/www/vpn_openvpn_server.php:1216
+msgid ""
+"This is the IPv6 network that will be accessible from the remote endpoint. "
+"Expressed as a CIDR range. You may leave this blank if you don't want to add "
+"a route to the local network through this tunnel on the remote machine. This "
+"is generally set to your LAN network"
+msgstr "「ã“ã‚Œã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る。 ã€ã®CIDR範囲ã¨ã—ã¦è¡¨ã•ã€‚ã‚ãªãŸãŒè¿½åŠ ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã‚‚"リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’。ã“ã‚Œã¯ã€ 「一般的ã«ã€ã‚ãªãŸã®LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_openvpn_server.php:1059
+#: usr/local/www/vpn_openvpn_server.php:1201
+msgid ""
+"This is a network that will be routed through the tunnel, so that a site-to-"
+"site VPN can be established without manually changing the routing tables. "
+"Expressed as a CIDR range. If this is a site-to-site VPN, enter here the "
+"remote LAN here. You may leave this blank if you don't want a site-to-site "
+"VPN"
+msgstr "「ã“ã‚Œã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•ã€‚ã“ã‚Œã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ã“ã“ã§å…¥åŠ›ã—ãŸã€Œã“ã“ã«ãƒªãƒ¢ãƒ¼ãƒˆLAN 。サイトツーサイト「VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/vpn_openvpn_server.php:1069
+#: usr/local/www/vpn_openvpn_server.php:1211
+#: usr/local/www/vpn_openvpn_server.php:1253
+#: usr/local/www/vpn_openvpn_server.php:1280
+#: usr/local/www/vpn_openvpn_server.php:1280
+msgid "Concurrent connections"
+msgstr "åŒæ™‚接続"
+
+#: usr/local/www/vpn_openvpn_server.php:1073
+#: usr/local/www/vpn_openvpn_server.php:1215
+#: usr/local/www/vpn_openvpn_server.php:1257
+#: usr/local/www/vpn_openvpn_server.php:1284
+#: usr/local/www/vpn_openvpn_server.php:1284
+msgid ""
+"Specify the maximum number of clients allowed to concurrently connect to "
+"this server"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã€ŒåŒæ™‚ã«ã¸ã®æŽ¥ç¶šã‚’許å¯ã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æœ€å¤§æ•°ã‚’指定ã™ã‚‹ã€"
+
+#: usr/local/www/vpn_openvpn_server.php:1113
+#: usr/local/www/vpn_openvpn_server.php:1255
+#: usr/local/www/vpn_openvpn_server.php:1297
+#: usr/local/www/vpn_openvpn_server.php:1324
+#: usr/local/www/vpn_openvpn_server.php:1324
+msgid "Inter-client communication"
+msgstr "クライアント間通信"
+
+#: usr/local/www/vpn_openvpn_server.php:1123
+#: usr/local/www/vpn_openvpn_server.php:1265
+#: usr/local/www/vpn_openvpn_server.php:1307
+#: usr/local/www/vpn_openvpn_server.php:1334
+#: usr/local/www/vpn_openvpn_server.php:1334
+msgid "Allow communication between clients connected to this server"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«æŽ¥ç¶šã—ã¦ã„るクライアント間ã®é€šä¿¡ã‚’å¯èƒ½ã«"
+
+#: usr/local/www/vpn_openvpn_server.php:1131
+#: usr/local/www/vpn_openvpn_server.php:1273
+#: usr/local/www/vpn_openvpn_server.php:1315
+#: usr/local/www/vpn_openvpn_server.php:1342
+#: usr/local/www/vpn_openvpn_server.php:1342
+msgid "Duplicate Connections"
+msgstr "接続を復元"
+
+#: usr/local/www/vpn_openvpn_server.php:1141
+#: usr/local/www/vpn_openvpn_server.php:1283
+#: usr/local/www/vpn_openvpn_server.php:1325
+#: usr/local/www/vpn_openvpn_server.php:1352
+#: usr/local/www/vpn_openvpn_server.php:1352
+msgid ""
+"Allow multiple concurrent connections from clients using the same Common "
+"Name.<br />NOTE: This is not generally recommended, but may be needed for "
+"some scenarios."
+msgstr "Name.<br />NOTE 「åŒã˜å…±é€šä½¿ç”¨ã—ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®è¤‡æ•°ã®åŒæ™‚接続を許å¯ã™ã‚‹ã€ :ã“ã‚Œã¯ã€ä¸€èˆ¬çš„ã«ã¯ãŠå‹§ã‚ã—ã¾ã›ã‚“ãŒã€ã„ãã¤ã‹ã®ã‚·ãƒŠãƒªã‚ªã€ã®ãŸã‚ã«å¿…è¦ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1158
+#: usr/local/www/vpn_openvpn_server.php:1300
+#: usr/local/www/vpn_openvpn_server.php:1342
+#: usr/local/www/vpn_openvpn_server.php:1369
+#: usr/local/www/vpn_openvpn_server.php:1369
+msgid "Dynamic IP"
+msgstr "å‹•çš„IP"
+
+#: usr/local/www/vpn_openvpn_server.php:1168
+#: usr/local/www/vpn_openvpn_server.php:1310
+#: usr/local/www/vpn_openvpn_server.php:1352
+#: usr/local/www/vpn_openvpn_server.php:1379
+#: usr/local/www/vpn_openvpn_server.php:1379
+msgid ""
+"Allow connected clients to retain their connections if their IP address "
+"changes"
+msgstr "「接続ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã‚’維æŒã§ãるよã†ã«ã—ã€ãã®IPアドレスãŒã‚ã‚Œã°ã€Œå¤‰åŒ–"
+
+#: usr/local/www/vpn_openvpn_server.php:1176
+#: usr/local/www/vpn_openvpn_server.php:1318
+#: usr/local/www/vpn_openvpn_server.php:1360
+#: usr/local/www/vpn_openvpn_server.php:1387
+#: usr/local/www/vpn_openvpn_server.php:1387
+msgid "Address Pool"
+msgstr "アドレスプール"
+
+#: usr/local/www/vpn_openvpn_server.php:1186
+#: usr/local/www/vpn_openvpn_server.php:1328
+#: usr/local/www/vpn_openvpn_server.php:1370
+#: usr/local/www/vpn_openvpn_server.php:1397
+#: usr/local/www/vpn_openvpn_server.php:1397
+msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)"
+msgstr "クライアントã«ä»®æƒ³ã‚¢ãƒ€ãƒ—ã‚¿ã®IPアドレスを指定ã—ã¾ã™ï¼ˆãƒˆãƒ³ãƒãƒ«Â·ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ï¼‰"
+
+#: usr/local/www/vpn_openvpn_server.php:1322
+#: usr/local/www/vpn_openvpn_server.php:1464
+#: usr/local/www/vpn_openvpn_csc.php:560
+#: usr/local/www/vpn_openvpn_server.php:1506
+#: usr/local/www/vpn_openvpn_server.php:1558
+#: usr/local/www/vpn_openvpn_csc.php:560
+#: usr/local/www/vpn_openvpn_server.php:1558
+msgid ""
+"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) "
+"will be disabled"
+msgstr ""ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ ( WINSã‚’å«ã‚€ï¼‰ã™ã¹ã¦ã®NetBIOS-over-TCP/IPオプションãŒã€Œç„¡åŠ¹ã«ãªã‚Šã¾ã™"
+
+#: usr/local/www/vpn_openvpn_server.php:1352
+#: usr/local/www/vpn_openvpn_server.php:1494
+#: usr/local/www/vpn_openvpn_server.php:1536
+#: usr/local/www/vpn_openvpn_server.php:1588
+#: usr/local/www/vpn_openvpn_server.php:1588
+msgid "Scope ID"
+msgstr "スコープID"
+
+#: usr/local/www/vpn_openvpn_server.php:1418
+#: usr/local/www/vpn_openvpn_server.php:1560
+#: usr/local/www/vpn_openvpn_server.php:1602
+#: usr/local/www/vpn_openvpn_server.php:1654
+#: usr/local/www/vpn_openvpn_server.php:1654
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN server "
+"configuration here, separated by a semicolon"
+msgstr "セミコロンã§åŒºåˆ‡ã‚‰ã‚Œã€ä»¥ä¸‹ã«è¨­å®šã€ã§ã¯ã€ OpenVPNã®ã‚µãƒ¼ãƒãƒ¼ã«è¿½åŠ ã™ã‚‹è¿½åŠ ã‚ªãƒ—ションを入力ã—ã¦ãã ã•ã„ ""
+
+#: usr/local/www/vpn_openvpn_server.php:1449
+#: usr/local/www/vpn_openvpn_server.php:1591
+#: usr/local/www/vpn_openvpn_server.php:1632
+#: usr/local/www/vpn_openvpn_server.php:1684
+#: usr/local/www/vpn_openvpn_server.php:1684
+msgid "Protocol / Port"
+msgstr "プロトコル/ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/vpn_openvpn_server.php:1482
+#: usr/local/www/vpn_openvpn_server.php:1624
+#: usr/local/www/vpn_openvpn_server.php:1665
+#: usr/local/www/vpn_openvpn_server.php:1717
+#: usr/local/www/vpn_openvpn_server.php:1717
+msgid "Do you really want to delete this server?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®ã‚µãƒ¼ãƒãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/vpn_openvpn_server.php:1503
+#: usr/local/www/vpn_openvpn_server.php:1645
+#: usr/local/www/vpn_openvpn_server.php:1686
+#: usr/local/www/vpn_openvpn_server.php:1738
+#: usr/local/www/vpn_openvpn_server.php:1738
+msgid "Additional OpenVPN servers can be added here."
+msgstr "追加ã®OpenVPNã®ã‚µãƒ¼ãƒãŒã“ã“ã«æ·»åŠ ã™ã‚‹ã“ã¨ãŒã§ãる。"
+
+#: usr/local/www/vpn_pppoe_edit.php:136 usr/local/www/vpn_pppoe_edit.php:136
+msgid "The specified server address is equal to an interface ip address."
+msgstr "指定ã•ã‚ŒãŸã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹IPアドレスã¨åŒã˜ã§ã‚る。"
+
+#: usr/local/www/vpn_pppoe_edit.php:141 usr/local/www/vpn_pppoe_edit.php:141
+#, php-format
+msgid "No password specified for username %s"
+msgstr "ユーザーå%sã«æŒ‡å®šã—ãŸãƒ‘スワードã¾ã›ã‚“"
+
+#: usr/local/www/vpn_pppoe_edit.php:143 usr/local/www/vpn_pppoe_edit.php:143
+#, php-format
+msgid "Incorrect ip address specified for username %s"
+msgstr "ユーザーå%sã«æŒ‡å®šã•ã‚Œã€èª¤ã£ãŸIPアドレス"
+
+#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356
+#: usr/local/www/vpn_pppoe_edit.php:359 usr/local/www/vpn_pppoe_edit.php:359
+msgid "PPPoE server configuration"
+msgstr "PPPoEサーãƒã®è¨­å®š"
+
+#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369
+#: usr/local/www/vpn_pppoe_edit.php:372 usr/local/www/vpn_pppoe_edit.php:372
+msgid "Enable PPPoE server"
+msgstr "PPPoEサーãƒã‚’有効ã«ã—ã¾ã™"
+
+#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404
+#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:407
+msgid "Hint"
+msgstr "ヒント"
+
+#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408
+#: usr/local/www/vpn_pppoe_edit.php:411 usr/local/www/vpn_pppoe_edit.php:411
+msgid "No. PPPoE users"
+msgstr "ã„ã„ãˆPPPoEã®ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+
+#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421
+#: usr/local/www/vpn_pppoe_edit.php:424 usr/local/www/vpn_pppoe_edit.php:424
+msgid "Hint: 10 is ten PPPoE clients"
+msgstr "ヒント:10 10 PPPoEクライアントã§ã™"
+
+#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429
+#: usr/local/www/vpn_pppoe_edit.php:432 usr/local/www/vpn_pppoe_edit.php:432
+msgid ""
+"Enter the IP address the PPPoE server should give to clients for use as "
+"their "gateway""
+msgstr "彼らã®ã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã€ 「 IPアドレスを入力ã—ã¦PPPoEサーãƒã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä¸Žãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€"
+
+#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441
+#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/vpn_pppoe_edit.php:444
+msgid "Specify the starting address for the client IP address subnet"
+msgstr "クライアントã®IPアドレスã€ã‚µãƒ–ãƒãƒƒãƒˆã®é–‹å§‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定"
+
+#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458
+#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:461
+msgid ""
+"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN "
+"DNS will go to all clients"
+msgstr "「入力ã—ãŸå ´åˆã€ãれらã¯ã™ã¹ã¦ã®PPPoEクライアントã«ä¸Žãˆã‚‰ã‚Œã¾ã™ã€ä»–ã®LAN DNSã¨1 WAN〠DNSã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¡Œã"
+
+#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475
+#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:478
+msgid "Use Backup RADIUS Server"
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—RADIUSサーãƒã‚’使用"
+
+#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476
+#: usr/local/www/vpn_pppoe_edit.php:479 usr/local/www/vpn_pppoe_edit.php:479
+msgid ""
+"When set, if primary server fails all requests will be sent via backup server"
+msgstr "ã€ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ—ライマリサーãƒãŒã™ã¹ã¦ã®è¦æ±‚を失敗ã—ãŸå ´åˆã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—サーãƒã‚’経由ã—ã¦é€ä¿¡ã•ã‚Œã¾ã™"
+
+#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479
+#: usr/local/www/vpn_pppoe_edit.php:482 usr/local/www/vpn_pppoe_edit.php:482
+msgid "NAS IP Address"
+msgstr "NASã®IPアドレス"
+
+#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482
+#: usr/local/www/vpn_pppoe_edit.php:485 usr/local/www/vpn_pppoe_edit.php:485
+msgid "RADIUS server NAS IP Address"
+msgstr "RADIUSサーãƒã®NASã®IPアドレス"
+
+#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489
+#: usr/local/www/vpn_pppoe_edit.php:492 usr/local/www/vpn_pppoe_edit.php:492
+msgid "RADIUS accounting update period in seconds"
+msgstr "秒å˜ä½ã®RADIUSアカウンティング更新期間"
+
+#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496
+#: usr/local/www/vpn_pppoe_edit.php:499 usr/local/www/vpn_pppoe_edit.php:499
+msgid "Issue IP Addresses via RADIUS server"
+msgstr "RADIUSサーãƒãƒ¼ã‚’経由ã—ã¦ç™ºè¡Œã™ã‚‹IPアドレス"
+
+#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499
+#: usr/local/www/vpn_pppoe_edit.php:502 usr/local/www/vpn_pppoe_edit.php:502
+msgid "RADIUS server Primary"
+msgstr "RADIUSサーãƒã®ãƒ—ライマリ"
+
+#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504
+#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:507
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the RADIUS server."
+msgstr "RADIUSサーãƒã€ã®IPアドレスã€èªè¨¼ãƒãƒ¼ãƒˆã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ï¼ˆã‚ªãƒ—ション) 〠。"
+
+#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520
+#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521
+#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524
+#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524
+msgid "standard port 1812 and 1813 accounting"
+msgstr "標準ã®ãƒãƒ¼ãƒˆ1812ãŠã‚ˆã³1813会計"
+
+#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508
+#: usr/local/www/vpn_pppoe_edit.php:511 usr/local/www/vpn_pppoe_edit.php:511
+msgid "RADIUS primary shared secret"
+msgstr "RADIUSプライマリ共有シークレット"
+
+#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515
+#: usr/local/www/vpn_pppoe_edit.php:518 usr/local/www/vpn_pppoe_edit.php:518
+msgid "RADIUS server Secondary"
+msgstr "RADIUSサーãƒã®ã‚»ã‚«ãƒ³ãƒ€ãƒª"
+
+#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520
+#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:523
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the backup RADIUS server."
+msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—RADIUSサーãƒã€ã®IPアドレスã€èªè¨¼ãƒãƒ¼ãƒˆã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒãƒ¼ãƒˆã‚’入力ã—ã¾ã™ï¼ˆã‚ªãƒ—ション) 〠。"
+
+#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524
+#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:527
+msgid "RADIUS secondary shared secret"
+msgstr "RADIUSセカンダリ共有秘密"
+
+#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532
+#: usr/local/www/vpn_pppoe_edit.php:535 usr/local/www/vpn_pppoe_edit.php:535
+msgid "User (s)"
+msgstr "ユーザ(複数å¯ï¼‰"
+
+#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597
+#: usr/local/www/vpn_pppoe_edit.php:600 usr/local/www/vpn_pppoe_edit.php:600
+msgid ""
+"don't forget to add a firewall rule to permit traffic from PPPoE clients"
+msgstr "「 PPPoEクライアントã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’許å¯ã™ã‚‹ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:37
+msgid "You need to specify the number of connections."
+msgstr "ã‚ãªãŸã¯ã€æŽ¥ç¶šã®æ•°ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:42
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:42
+msgid "The number of connections should be greater than 1."
+msgstr "接続数ã¯1より大ãããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:65
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:63
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:63
+msgid "You have less interfaces than number of connections!"
+msgstr "ã‚ãªãŸã¯ã€æŽ¥ç¶šã®æ•°ã‚ˆã‚Šã‚‚å°‘ãªã„インタフェースをæŒã£ã¦ã„ã‚‹ ï¼"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:445
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:518
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:443
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:516
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:443
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:516
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372
+msgid ""
+"Address must be a valid IP address or Firewall Alias. Please correct this "
+"value to continue."
+msgstr "「アドレスãŒæœ‰åŠ¹ãªIPアドレスã¾ãŸã¯ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。ã“ã®ä¿®æ­£ã—ã¦ãã ã•ã„ã€ã‚’継続ã™ã‚‹ä¾¡å€¤ã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:505
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:536
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:503
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:534
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:503
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:534
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392
+msgid "Only percentage bandwidth specification is allowed."
+msgstr "唯一ã®å¸¯åŸŸå¹…ã®å‰²åˆï¼ˆï¼…)ã®æŒ‡å®šãŒè¨±å¯ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:695
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:693
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:693
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930
+msgid ""
+"Custom Bandwidths are greater than 30%. Please lower them for the wizard to "
+"continue."
+msgstr "「カスタム帯域幅ãŒ30%を超ãˆã¦ã„ã¾ã™ã€‚ウィザードã®ãŸã‚ã«ãれらを下ã’ã¦ãã ã•ã„ã€ç¶™ç¶šã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205
+msgid "Penalty Box"
+msgstr "ペナルティーボックス"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364
+msgid "VOIP Adapter"
+msgstr "VOIPアダプタ"
+
+#: usr/local/www/wizards/openvpn_wizard.inc:602
+#: usr/local/www/wizards/openvpn_wizard.inc:618
+#: usr/local/www/wizards/openvpn_wizard.inc:619
+#: usr/local/www/wizards/openvpn_wizard.inc:602
+#: usr/local/www/wizards/openvpn_wizard.inc:619
+#, php-format
+msgid "OpenVPN %s wizard"
+msgstr "OpenVPNã®%sウィザード"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268
+msgid "You cannot specify bandwidth smaller than 1!"
+msgstr "ã‚ãªãŸã¯1 よりもå°ã•ã„帯域幅を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278
+msgid "You cannot select the same interface for local and outside."
+msgstr "ã‚ãªãŸãŒå¤–ã§ã€ãƒ­ãƒ¼ã‚«ãƒ«ãŠã‚ˆã³ã®ãŸã‚ã®åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276
+msgid "You cannot specify 0 bandwidth!"
+msgstr "ã‚ãªãŸãŒ0ã®å¸¯åŸŸå¹…を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297
+msgid "You cannot select the same interface twice on local interfaces."
+msgstr "ã‚ãªãŸã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§äºŒåº¦åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37
+msgid "You need to specify the number of local interfaces connected."
+msgstr "ã‚ãªãŸãŒæŽ¥ç¶šã•ã‚Œã¦ã„るローカルインターフェイスã®æ•°ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41
+msgid "The number of local connection needs to be greater than 1."
+msgstr "ローカル接続ã®æ•°ãŒ1より大ããã™ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240
+msgid "Upload bandwidth of connection is not valid."
+msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒƒãƒ—ロード帯域幅ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245
+msgid "Download bandwidth of connection is not valid."
+msgstr "接続ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å¸¯åŸŸå¹…ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252
+msgid "You cannot specify bandwidth less than 1!"
+msgstr "ã‚ãªãŸã¯ã€å¸¯åŸŸå¹…ãŒ1未満を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262
+msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."
+msgstr "我々ã¯128Kbit / sã®CBQスケジューラ用よりもå°ã•ã„帯域幅をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300
+msgid "Upload or download bandwidth is not valid."
+msgstr "アップロードã¾ãŸã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®å¸¯åŸŸå¹…ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317
+#, php-format
+msgid ""
+"You cannot set the VoIP upload bandwidth on WAN connection higher than "
+"80% of the connection."
+msgstr "接続ã®80ï¼… 「ã‚ãªãŸãŒã‚ˆã‚Šé«˜ã„WAN接続上ã§ã®VoIPã®ã‚¢ãƒƒãƒ—ロードã®å¸¯åŸŸå¹…を設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334
+#, php-format
+msgid ""
+"You cannot set the VoIP download bandwidth on connection higher than 80% of "
+"the connection."
+msgstr "コãƒã‚¯ã‚·ãƒ§ãƒ³"ã‚ãªãŸã¯80%よりも高ã„接続ã§ã®VoIPダウンロード帯域幅を設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:162
+#: usr/local/www/widgets/widgets/system_information.widget.php:153
+#: usr/local/www/widgets/widgets/system_information.widget.php:159
+#: usr/local/www/widgets/widgets/system_information.widget.php:160
+#: usr/local/www/widgets/widgets/system_information.widget.php:158
+#: usr/local/www/widgets/widgets/system_information.widget.php:160
+msgid "Current date/time"
+msgstr "ç¾åœ¨ã®æ—¥ä»˜/時刻"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41
+msgid "Computer / Device"
+msgstr "コンピュータ/デãƒã‚¤ã‚¹"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67
+msgid "Wake Up"
+msgstr "目を覚ã¾ã™"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72
+msgid "No saved WoL addresses"
+msgstr "ã¯ä¿å­˜ã•ã‚Œãªã„ã®WOLアドレス"
+
+#: usr/local/www/firewall_nat_npt.php:105
+#: usr/local/www/firewall_nat_npt.php:105
+msgid "External Prefix"
+msgstr "外部プレフィックス"
+
+#: usr/local/www/firewall_nat_npt.php:106
+#: usr/local/www/firewall_nat_npt.php:106
+msgid "Internal prefix"
+msgstr "内部接頭"
+
+#: usr/local/www/firewall_nat_npt_edit.php:106
+#: usr/local/www/firewall_nat_npt_edit.php:106
+msgid "Source prefix"
+msgstr "元プレフィクス"
+
+#: usr/local/www/firewall_nat_npt_edit.php:108
+#: usr/local/www/firewall_nat_npt_edit.php:108
+msgid "Destination prefix"
+msgstr "宛先プレフィックス"
+
+#: usr/local/www/firewall_nat_npt_edit.php:156
+#: usr/local/www/firewall_nat_npt_edit.php:161
+#: usr/local/www/firewall_nat_npt_edit.php:160
+#: usr/local/www/firewall_nat_npt_edit.php:158
+#: usr/local/www/firewall_nat_npt_edit.php:158
+msgid "Edit NAT NPt entry"
+msgstr "編集NAT NPTエントリー"
+
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_npt_edit.php:211
+#: usr/local/www/firewall_nat_npt_edit.php:210
+#: usr/local/www/firewall_nat_npt_edit.php:209
+#: usr/local/www/firewall_nat_npt_edit.php:209
+msgid "Internal IPv6 Prefix"
+msgstr "内部ã®IPv6プレフィックス"
+
+#: usr/local/www/firewall_nat_npt_edit.php:228
+#: usr/local/www/firewall_nat_npt_edit.php:233
+#: usr/local/www/firewall_nat_npt_edit.php:232
+#: usr/local/www/firewall_nat_npt_edit.php:231
+#: usr/local/www/firewall_nat_npt_edit.php:231
+msgid ""
+"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. "
+"The prefix size specified for the internal IPv6 prefix will be applied to "
+"the \n"
+"external prefix."
+msgstr "「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—レフィックスã®ç¿»è¨³ã®ãŸã‚ã®å†…部( LAN) ULAã®IPv6プレフィックスを入力ã—ã¾ã™ã€‚ 「内部IPv6プレフィックスã«æŒ‡å®šã•ã‚ŒãŸãƒ—レフィックスサイズãŒã€Œ \n 「外部プレフィックスã«é©ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/firewall_nat_npt_edit.php:234
+#: usr/local/www/firewall_nat_npt_edit.php:239
+#: usr/local/www/firewall_nat_npt_edit.php:238
+#: usr/local/www/firewall_nat_npt_edit.php:237
+#: usr/local/www/firewall_nat_npt_edit.php:237
+msgid "Destination IPv6 Prefix"
+msgstr "å…ˆã®IPv6プレフィックス"
+
+#: usr/local/www/firewall_nat_npt_edit.php:258
+#: usr/local/www/firewall_nat_npt_edit.php:263
+#: usr/local/www/firewall_nat_npt_edit.php:262
+#: usr/local/www/firewall_nat_npt_edit.php:261
+#: usr/local/www/firewall_nat_npt_edit.php:261
+msgid "Enter the Global Unicast routable IPv6 prefix here"
+msgstr "ã“ã“ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ¦ãƒ‹ã‚­ãƒ£ã‚¹ãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°å¯èƒ½ãªIPv6プレフィックスを入力ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_dhcpv6.php:74
+#: usr/local/www/services_router_advertisements.php:74
+#: usr/local/www/services_router_advertisements.php:74
+#: usr/local/www/services_dhcpv6.php:74
+msgid ""
+"The DHCPv6 Server can only be enabled on interfaces configured with static "
+"IP addresses"
+msgstr "IPアドレスã®ã€Œ DHCPv6サーãƒã¯ã€é™çš„ã«è¨­å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§æœ‰åŠ¹ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€"
+
+#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196
+#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175
+#: usr/local/www/services_dhcpv6.php:175
+msgid "A valid prefix range must be specified."
+msgstr "有効ãªãƒ—レフィックス範囲を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202
+#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181
+#: usr/local/www/services_dhcpv6.php:181
+msgid "A valid IPv6 address must be specified for the gateway."
+msgstr "有効ãªIPv6アドレスã¯ã€ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204
+#: usr/local/www/services_router_advertisements.php:154
+#: usr/local/www/services_dhcpv6.php:189 usr/local/www/services_dhcpv6.php:183
+#: usr/local/www/services_router_advertisements.php:149
+#: usr/local/www/services_router_advertisements.php:149
+#: usr/local/www/services_dhcpv6.php:183
+msgid ""
+"A valid IPv6 address must be specified for the primary/secondary DNS servers."
+msgstr "「有効ãªIPv6アドレスã¯ã€ãƒ—ライマリ/セカンダリDNSサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223
+#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202
+#: usr/local/www/services_dhcpv6.php:202
+msgid ""
+"A valid IPv6 address must be specified for the primary/secondary NTP servers."
+msgstr "「有効ãªIPv6アドレスã¯ã€ãƒ—ライマリ/セカンダリã®NTPサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227
+#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206
+#: usr/local/www/services_dhcpv6.php:206
+msgid "A valid IPv6 address or hostname must be specified for the TFTP server."
+msgstr "有効ãªIPv6アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã¯ã€TFTPサーãƒã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229
+#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208
+#: usr/local/www/services_dhcpv6.php:208
+msgid "A valid IPv6 address must be specified for the network boot server."
+msgstr "有効ãªIPv6アドレスã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ–ートサーãƒãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236
+#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215
+#: usr/local/www/services_dhcpv6.php:215
+#, php-format
+msgid "The subnet range cannot overlap with virtual IPv6 address %s."
+msgstr "サブãƒãƒƒãƒˆç¯„囲ã¯ã€ä»®æƒ³IPv6アドレス%s.ã¨é‡è¤‡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386
+#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362
+#: usr/local/www/services_dhcpv6.php:362
+msgid "DHCPv6 server"
+msgstr "DHCPv6サーãƒ"
+
+#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524
+#: usr/local/www/services_router_advertisements.php:261
+#: usr/local/www/services_router_advertisements.php:270
+#: usr/local/www/services_dhcpv6.php:503 usr/local/www/services_dhcpv6.php:514
+#: usr/local/www/services_router_advertisements.php:256
+#: usr/local/www/services_router_advertisements.php:265
+#: usr/local/www/services_router_advertisements.php:256
+#: usr/local/www/services_router_advertisements.php:265
+#: usr/local/www/services_dhcpv6.php:514
+msgid "Router Advertisements"
+msgstr "ルーター通知"
+
+#: usr/local/www/services_dhcpv6.php:504
+#, php-format
+msgid ""
+"Select the Operating Mode for the router advertisement Daemon. Use "Router "
+"Only" to only advertise the router, "Unmanaged" for Router Advertising "
+"with Stateless Autoconfig, "Managed" for DHCPv6 only with router "
+"advertisements, "Assisted" for DHCPv6 Combined with Stateless Autoconfig"
+msgstr "「ルータ広告デーモンã®ãŸã‚ã®å‹•ä½œãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚使用ã—ã¦ã€Œãƒ«ãƒ¼ã‚¿åºƒå‘Šã®ãŸã‚ã®ã€Œç®¡ç†å¯¾è±¡å¤–〠ã€ãƒ«ãƒ¼ã‚¿ã‚’宣ä¼"ã®ã¿"ã®ã¿ã¸ã®ãƒ«ãƒ¼ã‚¿ã®ã€Œã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•è¨­å®šã§ã€ 「管ç†ã€ DHCPv6ã®å ´åˆã¯ã€ãƒ«ãƒ¼ã‚¿ã¨"広告〠DHCPv6ã®ãŸã‚ã®ã€Œæ”¯æ´ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•è¨­å®šã¨çµ„ã¿åˆã‚ã›ã‚‹"
+
+#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584
+#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526
+#: usr/local/www/services_dhcpv6.php:526
+#, php-format
+msgid "Enable DHCPv6 server on %s interface"
+msgstr "%sインターフェイス上ã®DHCPv6サーãƒã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649
+#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597
+#: usr/local/www/services_dhcpv6.php:597
+msgid "Prefix Delegation Range"
+msgstr "接頭委任範囲"
+
+#: usr/local/www/services_dhcpv6.php:580
+msgid "prefix length"
+msgstr "プレフィックス長"
+
+#: usr/local/www/services_dhcpv6.php:585
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows "
+"for \n"
+"tttttassigning networks to subrouters"
+msgstr "subroutersã«\nãŸã‚ã®ã€Œ tttttassigningãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€DHCPプレフィックス委任ã®ãŸã‚ã«ã“ã“プレフィックス範囲を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã‚ŒãŒå¯èƒ½ã«ã€"
+
+#: usr/local/www/services_dhcpv6.php:803
+#: usr/local/www/status_dhcpv6_leases.php:361
+#: usr/local/www/status_dhcpv6_leases.php:405
+#: usr/local/www/status_dhcpv6_leases.php:483
+#: usr/local/www/services_dhcpv6.php:898
+#: usr/local/www/status_dhcpv6_leases.php:406
+#: usr/local/www/status_dhcpv6_leases.php:484
+#: usr/local/www/services_dhcpv6.php:829
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcpv6_leases.php:487
+#: usr/local/www/services_dhcpv6.php:850
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcpv6_leases.php:487
+#: usr/local/www/services_dhcpv6.php:850
+msgid "DUID"
+msgstr "DUID"
+
+#: usr/local/www/services_dhcpv6_edit.php:106
+#: usr/local/www/services_dhcpv6_edit.php:189
+#: usr/local/www/services_dhcpv6_edit.php:108
+#: usr/local/www/services_dhcpv6_edit.php:192
+#: usr/local/www/services_dhcpv6_edit.php:191
+#: usr/local/www/services_dhcpv6_edit.php:111
+#: usr/local/www/services_dhcpv6_edit.php:194
+#: usr/local/www/services_dhcpv6_edit.php:111
+#: usr/local/www/services_dhcpv6_edit.php:194
+msgid "DUID Identifier"
+msgstr "DUID識別å­"
+
+#: usr/local/www/services_dhcpv6_edit.php:126
+#: usr/local/www/services_dhcpv6_edit.php:128
+#: usr/local/www/services_dhcpv6_edit.php:131
+#: usr/local/www/services_dhcpv6_edit.php:131
+msgid "A valid DUID Identifier must be specified."
+msgstr "有効ãªDUID識別å­ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6_edit.php:135
+#: usr/local/www/services_dhcpv6_edit.php:137
+#: usr/local/www/services_dhcpv6_edit.php:140
+#: usr/local/www/services_dhcpv6_edit.php:140
+msgid "This Hostname, IP or DUID Identifier already exists."
+msgstr "ã“ã®ãƒ›ã‚¹ãƒˆåã¯ã€ IPã¾ãŸã¯DUID識別å­ã¯ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dhcpv6_edit.php:178
+msgid "DHCPv6"
+msgstr "DHCPv6ã®"
+
+#: usr/local/www/services_dhcpv6_edit.php:186
+#: usr/local/www/services_dhcpv6_edit.php:189
+#: usr/local/www/services_dhcpv6_edit.php:188
+#: usr/local/www/services_dhcpv6_edit.php:191
+#: usr/local/www/services_dhcpv6_edit.php:191
+msgid "Static DHCPv6 Mapping"
+msgstr "é™çš„DHCPv6ã®ãƒžãƒƒãƒ”ング"
+
+#: usr/local/www/services_dhcpv6_edit.php:193
+#: usr/local/www/services_dhcpv6_edit.php:196
+#: usr/local/www/services_dhcpv6_edit.php:195
+#: usr/local/www/services_dhcpv6_edit.php:198
+#: usr/local/www/services_dhcpv6_edit.php:198
+msgid "Enter a DUID Identifier in the following format: "
+msgstr "次ã®å½¢å¼ã§DUID識別å­ã‚’入力ã—ã¦ãã ã•ã„:"
+
+#: usr/local/www/services_dhcpv6_edit.php:202
+#: usr/local/www/services_dhcpv6_edit.php:205
+msgid ""
+"If no IPv6 address is given, one will be dynamically allocated from the "
+"pool."
+msgstr "プールã€ã¯ã€IPv6アドレスãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ 1ãŒå‹•çš„ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcpv6_relay.php:81
+#: usr/local/www/services_dhcpv6_relay.php:81
+msgid "A valid Destination Server IPv6 address must be specified."
+msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6_relay.php:145
+#: usr/local/www/services_dhcpv6_relay.php:146
+#: usr/local/www/services_dhcpv6_relay.php:146
+msgid "DHCPv6 Relay configuration"
+msgstr "DHCPv6リレーã®è¨­å®š"
+
+#: usr/local/www/services_dhcpv6_relay.php:151
+#: usr/local/www/services_dhcpv6_relay.php:152
+#: usr/local/www/services_dhcpv6_relay.php:152
+#, php-format
+msgid "Enable DHCPv6 relay on interface"
+msgstr "インターフェイス上ã®DHCPv6リレーを有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_dhcpv6_relay.php:169
+#: usr/local/www/services_dhcpv6_relay.php:170
+#: usr/local/www/services_dhcpv6_relay.php:170
+msgid "Interfaces without an IPv6 address will not be shown."
+msgstr "IPv6アドレスã®ãªã„インターフェースã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcpv6_relay.php:177
+#: usr/local/www/services_dhcpv6_relay.php:178
+#: usr/local/www/services_dhcpv6_relay.php:178
+#, php-format
+msgid ""
+"If this is checked, the DHCPv6 relay will append the circuit ID (%s "
+"interface number) and the agent ID to the DHCPv6 request."
+msgstr "DHCPv6ã®è¦æ±‚ã«ã€Œ (インターフェイス番å·ã¨ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆIDãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ DHCPv6リレーã¯å›žç·šID %s )を追加ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcpv6_relay.php:184
+#: usr/local/www/services_dhcpv6_relay.php:185
+#: usr/local/www/services_dhcpv6_relay.php:185
+msgid ""
+"This is the IPv6 address of the server to which DHCPv6 requests are relayed. "
+"You can enter multiple server IPv6 addresses, separated by commas. Select "
+""Proxy requests to DHCPv6 server on WAN subnet" to relay DHCPv6 packets to "
+"the server that was used on the WAN interface."
+msgstr "「ã“ã‚Œã¯ã€DHCPv6è¦æ±‚ãŒä¸­ç¶™ã•ã‚Œã‚‹ã‚ˆã†ã«ã‚µãƒ¼ãƒã®IPv6アドレスã§ã™ã€‚ "ã‚ãªãŸã¯ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ã‚µãƒ¼ãƒã®IPv6アドレスを入力ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 「 WANインターフェイス上ã§ä½¿ç”¨ã•ã‚ŒãŸã€Œã‚µãƒ¼ãƒã¸ã®DHCPv6パケットを中継ã™ã‚‹ã€ŒWANサブãƒãƒƒãƒˆä¸Šã®DHCPv6サーãƒã¸ã®ãƒ—ロキシã®è¦æ±‚ã€ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_dhcpv6_leases.php:49
+#: usr/local/www/status_dhcpv6_leases.php:50
+#: usr/local/www/status_dhcpv6_leases.php:50
+msgid "DHCPv6 leases"
+msgstr "DHCPv6ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/status_dhcpv6_leases.php:360
+#: usr/local/www/status_dhcpv6_leases.php:404
+#: usr/local/www/status_dhcpv6_leases.php:482
+#: usr/local/www/status_dhcpv6_leases.php:405
+#: usr/local/www/status_dhcpv6_leases.php:483
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:486
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:486
+msgid "IAID"
+msgstr "IAID"
+
+#: usr/local/www/status_dhcpv6_leases.php:362
+#: usr/local/www/status_dhcpv6_leases.php:406
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/status_dhcpv6_leases.php:410
+#: usr/local/www/status_dhcpv6_leases.php:410
+msgid "Hostname/MAC"
+msgstr "ホストå/ MAC"
+
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_wireless.php:99
+#: usr/local/www/diag_logs_wireless.php:100
+#: usr/local/www/diag_logs_wireless.php:100
+#, php-format
+msgid "Wireless (hostapd) log entries"
+msgstr "ワイヤレス( hostapdã®ï¼‰ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒª"
+
+#: usr/local/www/services_captiveportal_zones.php:37
+#: usr/local/www/services_captiveportal_zones.php:37
+msgid "Captive Portal"
+msgstr "Captive Portal"
+
+#: usr/local/www/services_captiveportal_zones.php:37
+#: usr/local/www/services_captiveportal_zones.php:37
+msgid "Zones"
+msgstr "ゾーン"
+
+#: usr/local/www/services_captiveportal_zones.php:47
+#: usr/local/www/services_captiveportal_zones.php:48
+#: usr/local/www/services_captiveportal_zones.php:48
+msgid "The CaptivePortal entry list has been changed"
+msgstr "CaptivePortalã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒªã‚¹ãƒˆãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#: usr/local/www/services_captiveportal_zones.php:60
+#: usr/local/www/services_captiveportal_zones.php:101
+#: usr/local/www/services_captiveportal_zones.php:61
+#: usr/local/www/services_captiveportal_zones.php:102
+#: usr/local/www/services_captiveportal_zones.php:61
+#: usr/local/www/services_captiveportal_zones.php:102
+msgid "add a new captiveportal instance"
+msgstr "æ–°ã—ã„captiveportalインスタンスを追加"
+
+#: usr/local/www/services_captiveportal_zones.php:88
+#: usr/local/www/services_captiveportal_zones.php:89
+#: usr/local/www/services_captiveportal_zones.php:89
+msgid "edit captiveportal instance"
+msgstr "captiveportalインスタンスを編集"
+
+#: usr/local/www/services_captiveportal_zones.php:89
+#: usr/local/www/services_captiveportal_zones.php:90
+#: usr/local/www/services_captiveportal_zones.php:90
+msgid "delete captiveportal instance"
+msgstr "captiveportalインスタンスを削除"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+msgid "Edit Zones"
+msgstr "編集ゾーン"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:67
+#: usr/local/www/services_captiveportal_zones_edit.php:69
+#: usr/local/www/services_captiveportal_zones_edit.php:69
+msgid "already exists"
+msgstr "ã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:96
+#: usr/local/www/services_captiveportal_zones_edit.php:98
+#: usr/local/www/services_captiveportal_zones_edit.php:94
+#: usr/local/www/services_captiveportal_zones_edit.php:94
+msgid "Edit Captive Portal Zones"
+msgstr "編集Captive Portalゾーン"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:103
+msgid "Zone name. Cannot contain spaces."
+msgstr "ゾーンå。スペースをå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+msgid "Restore full backup"
+msgstr "フルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:139
+#: usr/local/www/system_firmware_restorefullbackup.php:139
+msgid "Filename"
+msgstr "ファイルå"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:162
+#: usr/local/www/system_firmware_restorefullbackup.php:162
+msgid "Do you really want to delete this backup?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:174
+msgid "<center>Could not locate any previous backups.</center>"
+msgstr "u003cCENTERu003eã¯ä»¥å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ u003c /センターu003e"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:184
+#: usr/local/www/system_firmware_restorefullbackup.php:184
+msgid "Restore"
+msgstr "復元ã™ã‚‹"
+
+#: usr/local/www/diag_dump_states_sources.php:65
+#: usr/local/www/diag_dump_states_sources.php:65
+msgid "Show Source Tracking"
+msgstr "表示ã™ã‚‹ã‚½ãƒ¼ã‚¹ã®è¿½è·¡"
+
+#: usr/local/www/diag_dump_states_sources.php:145
+#: usr/local/www/diag_dump_states_sources.php:144
+#: usr/local/www/diag_dump_states_sources.php:144
+msgid "Source -> Destination"
+msgstr "ソース - u003eã™ã¹ã¦ã®å¸‚町æ‘"
+
+#: usr/local/www/diag_dump_states_sources.php:146
+#: usr/local/www/diag_dump_states_sources.php:145
+#: usr/local/www/diag_dump_states_sources.php:145
+msgid "# States"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:147
+#: usr/local/www/diag_dump_states_sources.php:146
+#: usr/local/www/diag_dump_states_sources.php:146
+msgid "# Connections"
+msgstr ""
+
+#: usr/local/www/diag_dump_states_sources.php:180
+#: usr/local/www/diag_dump_states_sources.php:179
+#: usr/local/www/diag_dump_states_sources.php:179
+msgid "Remove all source tracking entries from"
+msgstr "ã‹ã‚‰ã™ã¹ã¦ã®ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã‚¨ãƒ³ãƒˆãƒªã‚’削除"
+
+#: usr/local/www/diag_dump_states_sources.php:190
+#: usr/local/www/diag_dump_states_sources.php:189
+#: usr/local/www/diag_dump_states_sources.php:189
+msgid "No source tracking entries were found."
+msgstr "ソースãªã—ã®è¿½è·¡ã‚¨ãƒ³ãƒˆãƒªãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: etc/inc/system.inc:418 etc/inc/system.inc:425 etc/inc/system.inc:426
+#, php-format
+msgid "Not adding default route because OLSR dynamic gateway is enabled."
+msgstr "OLSRダイナミックゲートウェイãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ«ãƒ¼ãƒˆã‚’追加ã—ãªã„。"
+
+#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124
+#: etc/inc/priv.defs.inc:124
+msgid "WebCfg - Diagnostics: Logs: Gateways page"
+msgstr "WebCfg - 診断:ログ:ゲートウェイページ"
+
+#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125
+#: etc/inc/priv.defs.inc:125
+msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page."
+msgstr "ページ' :ログ:システムゲートウェイ診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130
+#: etc/inc/priv.defs.inc:130
+msgid "WebCfg - Diagnostics: Logs: Resolver page"
+msgstr "WebCfg - 診断:ログ:レゾルãƒãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131
+#: etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page."
+msgstr "ページ' :ログ:システムリゾルãƒè¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136
+#: etc/inc/priv.defs.inc:136
+msgid "WebCfg - Diagnostics: Logs: Wireless page"
+msgstr "WebCfg - 診断:ログ:ワイヤレスページ"
+
+#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137
+#: etc/inc/priv.defs.inc:137
+msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page."
+msgstr "ページ' :ログ:システムワイヤレス診断ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154
+#: etc/inc/priv.defs.inc:154
+msgid "WebCfg - Status: System logs: NTP page"
+msgstr "WebCfg - ステータス:システムログ: NTPã®ãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155
+#: etc/inc/priv.defs.inc:155
+msgid "Allow access to the 'Status: System logs: NTP' page."
+msgstr "ページ':システムログã®NTPステータス'ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468
+#: etc/inc/pfsense-utils.inc:2521 etc/inc/pfsense-utils.inc:2528
+#: etc/inc/pfsense-utils.inc:2535 etc/inc/pfsense-utils.inc:2539
+#: etc/inc/pfsense-utils.inc:2581
+msgid "English"
+msgstr "英語"
+
+#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469
+#: etc/inc/pfsense-utils.inc:2522 etc/inc/pfsense-utils.inc:2529
+#: etc/inc/pfsense-utils.inc:2536 etc/inc/pfsense-utils.inc:2540
+#: etc/inc/pfsense-utils.inc:2593
+msgid "Portuguese (Brazil)"
+msgstr "ãƒãƒ«ãƒˆã‚¬ãƒ«èªžï¼ˆãƒ–ラジル)"
+
+#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250
+#: etc/inc/interfaces.inc:248 etc/inc/interfaces.inc:248
+msgid "interface_vlan_configure called with if undefined."
+msgstr "interface_vlan_configureã«å®šç¾©ã•ã‚Œã¦ã„ãªã„å ´åˆã«å‘¼ã³å‡ºã•ã‚Œã‚‹ã€‚"
+
+#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291
+#: etc/inc/interfaces.inc:289 etc/inc/interfaces.inc:289
+#, php-format
+msgid "interface_qinq_configure called with if undefined.%s"
+msgstr "interface_qinq_configureã§å‘¼ã³å‡ºã•ã‚ŒãŸå ´åˆundefined.%s"
+
+#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376
+#: etc/inc/interfaces.inc:380 etc/inc/interfaces.inc:380
+#, php-format
+msgid "interface_qinq2_configure called with if undefined.%s"
+msgstr "interface_qinq2_configureã§å‘¼ã³å‡ºã•ã‚ŒãŸå ´åˆundefined.%s"
+
+#: etc/inc/interfaces.inc:2152
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for "
+"writing.%s"
+msgstr "writing.%s : 「エラーã®ãŸã‚interface_carpdev_configure.()ã«dhclient_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã€"
+
+#: etc/inc/interfaces.inc:2995
+msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()"
+msgstr "interface_carpdev_dhcp_configure.()ã«wanifã‚’æŒã¡å‡ºã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360
+#: etc/inc/interfaces.inc:3453 etc/inc/interfaces.inc:3580
+#: etc/inc/interfaces.inc:3525 etc/inc/interfaces.inc:3525
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for "
+"writing.%s"
+msgstr "writing.%s : 「エラーã®ãŸã‚interface_dhcp_configure.()ã«dhclient_%s.confé–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“ã€"
+
+#: etc/inc/services.inc:1085 etc/inc/services.inc:1217
+#: etc/inc/services.inc:1211 etc/inc/services.inc:1218
+#: etc/inc/services.inc:1270
+msgid "Started IGMP proxy service."
+msgstr "ã¯ã˜ã‚ã«ã€IGMPプロキシサービス。"
+
+#: usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111
+#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79
+#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86
+#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79
+#: usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter.php:110
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157
+#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112
+#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80
+#: usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_filter.php:100
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/fbegin.inc:149
+#: usr/local/www/fbegin.inc:182 usr/local/www/diag_logs_filter.php:130
+#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_auth.php:75
+#: usr/local/www/diag_logs_settings.php:231
+#: usr/local/www/diag_logs_filter.php:130
+#: usr/local/www/diag_logs_routing.php:75 usr/local/www/diag_logs_dhcp.php:80
+#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs.php:86
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_ntpd.php:54 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77
+#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182
+#: usr/local/www/diag_logs_relayd.php:76 usr/local/www/diag_logs_vpn.php:135
+#: usr/local/www/diag_logs_ipsec.php:112
+#: usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_logs_resolver.php:88
+#: usr/local/www/diag_logs_filter_summary.php:194
+msgid "NTP"
+msgstr "NTP"
+
+#: usr/local/www/diag_logs_routing.php:82
+#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84
+#: usr/local/www/diag_logs_gateways.php:96
+#: usr/local/www/diag_logs_routing.php:83
+#: usr/local/www/diag_logs_resolver.php:97
+#: usr/local/www/diag_logs_wireless.php:85
+#: usr/local/www/diag_logs_gateways.php:97
+#: usr/local/www/diag_logs_routing.php:83 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_gateways.php:97
+#: usr/local/www/diag_logs_wireless.php:85
+#: usr/local/www/diag_logs_resolver.php:97
+msgid "General"
+msgstr "一般"
+
+#: usr/local/www/diag_logs_routing.php:85
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98
+#: usr/local/www/diag_logs_wireless.php:87
+#: usr/local/www/diag_logs_gateways.php:99
+#: usr/local/www/diag_logs_routing.php:86
+#: usr/local/www/diag_logs_resolver.php:100
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_routing.php:86 usr/local/www/diag_logs.php:98
+#: usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_resolver.php:100
+msgid "Resolver"
+msgstr "リゾルãƒ"
+
+#: usr/local/www/diag_logs_routing.php:97
+#: usr/local/www/diag_logs_routing.php:98
+#: usr/local/www/diag_logs_routing.php:98
+#, php-format
+msgid "Routing daemon log entries"
+msgstr "デーモンログエントリをルーティング"
+
+#: usr/local/www/system_routes_edit.php:158
+#: usr/local/www/system_routes_edit.php:169
+#: usr/local/www/system_routes_edit.php:171
+#: usr/local/www/system_routes_edit.php:165
+msgid "A route to these destination networks already exists"
+msgstr "ã“れらã®å®›å…ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¾ã™"
+
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:303
+#: usr/local/www/system_routes_edit.php:326
+#: usr/local/www/system_routes_edit.php:335
+#: usr/local/www/system_routes_edit.php:329
+msgid "Disable this static route"
+msgstr "ã“ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_routes_edit.php:303
+#: usr/local/www/system_routes_edit.php:304
+#: usr/local/www/system_routes_edit.php:327
+#: usr/local/www/system_routes_edit.php:336
+#: usr/local/www/system_routes_edit.php:330
+msgid ""
+"Set this option to disable this static route without removing it from the "
+"list."
+msgstr "リストã€ã‹ã‚‰å‰Šé™¤ã›ãšã«ã€ã“ã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã€ 。"
+
+#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178
+#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:188
+#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:205
+msgid "Package info"
+msgstr "パッケージ情報"
+
+#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182
+#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:192
+#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:208
+msgid "No package info, check the forum"
+msgstr "ã„ã„ãˆãƒ‘ッケージ情報ã¯ã€ãƒ•ã‚©ãƒ¼ãƒ©ãƒ ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã¾ã›ã‚“"
+
+#: usr/local/www/pkg_mgr.php:193
+msgid "Click on package name to access it's website."
+msgstr "ãã‚Œã¯ã€ã‚¦ã‚§ãƒ–サイトã®ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€ãƒ‘ッケージåをクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:220
+#: usr/local/www/pkg_mgr.php:223
+msgid "Click "
+msgstr "クリック"
+
+#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199
+#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:235
+#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:239
+msgid "Click package info for more details about "
+msgstr "ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ãƒ‘ッケージ情報]をクリックã—ã¾ã™ "
+
+#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240
+#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247
+msgid "Do you really want to install "
+msgstr "ã‚ãªãŸãŒæœ¬å½“ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã‹"
+
+#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240
+#: usr/local/www/pkg_mgr.php:243 usr/local/www/pkg_mgr.php:247
+msgid "Install "
+msgstr "インストール"
+
+#: usr/local/www/services_unbound_acls.php:57
+msgid "Access List successfully deleted"
+msgstr "正常ã«å‰Šé™¤ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/services_unbound_acls.php:173
+msgid ""
+"The settings for the DNS Resolver have changed. You must apply the "
+"configuration to take affect."
+msgstr "「 DNSリゾルãƒã®è¨­å®šãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ã€‚ã‚ãªãŸãŒé©ç”¨ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"有効ã«ã™ã‚‹ã«è¨­å®šã‚’。"
+
+#: usr/local/www/services_unbound_acls.php:181
+msgid "General Settings"
+msgstr "一般設定"
+
+#: usr/local/www/services_unbound_acls.php:182
+#: usr/local/www/services_unbound.php:137
+#: usr/local/www/services_unbound_advanced.php:124
+msgid "Advanced settings"
+msgstr "[詳細設定]"
+
+#: usr/local/www/services_unbound_acls.php:183
+#: usr/local/www/services_unbound.php:138
+#: usr/local/www/services_unbound_advanced.php:125
+msgid "Access Lists"
+msgstr "アクセスリスト"
+
+#: usr/local/www/services_unbound_acls.php:200
+#, php-format
+msgid "%s Access List"
+msgstr "%sアクセスリスト"
+
+#: usr/local/www/services_unbound_acls.php:203
+msgid "Access List name"
+msgstr "アクセスリストå"
+
+#: usr/local/www/services_unbound_acls.php:207
+msgid "Provide an Access List name."
+msgstr "アクセスリストåを指定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:222
+msgid ""
+"Choose what to do with DNS requests that match the criteria specified below."
+msgstr "「下ã®æŒ‡å®šã•ã‚ŒãŸæ¡ä»¶ã«ä¸€è‡´ã™ã‚‹DNSè¦æ±‚ã‚’ã©ã†ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:223
+msgid ""
+"<b>Deny:</b> This action stops queries from hosts within the netblock "
+"defined below."
+msgstr "「拒å¦u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã‚’åœæ­¢ã—ã€ã€Œä»¥ä¸‹ã«å®šç¾©ã™ã‚‹ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:224
+msgid ""
+"<b>Refuse:</b> This action also stops queries from hosts within the netblock "
+"defined below, but sends a DNS rcode REFUSED error message back to the "
+"client."
+msgstr "「拒å¦u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã‚’åœæ­¢ã—ã€ã€Œä»¥ä¸‹ã«å®šç¾©ã—ã¾ã™ãŒã€ DNSã®RCODEãŒæˆ»ã£ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæ‹’å¦é€ä¿¡ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:225
+msgid ""
+"<b>Allow:</b> This action allows queries from hosts within the netblock "
+"defined below."
+msgstr "「許å¯u003cbu003eキーワード: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ç…§ä¼šãŒã§ãã¾ã™ã€ä»¥ä¸‹ã«å®šç¾©ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:226
+msgid ""
+"<b>Allow Snoop:</b> This action allows recursive and nonrecursive access "
+"from hosts within the netblock defined below. Used for cache snooping and "
+"ideally should only be configured for your administrative host."
+msgstr "「許å¯u003cbu003eキーワードã®ã‚¹ãƒŒãƒ¼ãƒ—: u003c/ B u003eã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€å†å¸°ã¨éžå†å¸°ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ã™ã‚‹ã€ä»¥ä¸‹ã«å®šç¾©ãƒãƒƒãƒˆãƒ–ロック内ã®ãƒ›ã‚¹ãƒˆã‚’購入ã™ã‚‹ã€‚キャッシュスヌーピングã®ãŸã‚ã«ä½¿ç”¨ã—〠「ç†æƒ³çš„ã«ã®ã¿ç®¡ç†è€…ã®ãƒ›ã‚¹ãƒˆç”¨ã«æ§‹æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_acls.php:231
+msgid "Networks"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹"
+
+#: usr/local/www/services_unbound_acls.php:317
+msgid "Access List Name"
+msgstr "アクセスリストå"
+
+#: usr/local/www/services_unbound_acls.php:340
+msgid "edit access list"
+msgstr "編集アクセスリスト"
+
+#: usr/local/www/services_unbound_acls.php:343
+msgid "Do you really want to delete this access list?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_unbound_acls.php:344
+msgid "delete access list"
+msgstr "アクセスリストを削除ã™ã‚‹"
+
+#: usr/local/www/services_unbound_acls.php:357
+msgid "Add new Access List"
+msgstr "æ–°ã—ã„アクセスリストを追加"
+
+#: usr/local/www/services_unbound_acls.php:364
+msgid "Access Lists to control access to the DNS Resolver can be defined here."
+msgstr "DNSリゾルãƒã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御ã™ã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒªã‚¹ãƒˆã¯ã€ã“ã“ã§å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/diag_logs_settings.php:86
+#: usr/local/www/diag_logs_settings.php:87
+#: usr/local/www/diag_logs_settings.php:87
+msgid ""
+"A valid IP address/hosname or IP/hostname:port must be specified for remote "
+"syslog server #1."
+msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€"
+
+#: usr/local/www/diag_logs_settings.php:89
+#: usr/local/www/diag_logs_settings.php:90
+#: usr/local/www/diag_logs_settings.php:90
+msgid ""
+"A valid IP address/hosname or IP/hostname:port must be specified for remote "
+"syslog server #2."
+msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€"
+
+#: usr/local/www/diag_logs_settings.php:92
+#: usr/local/www/diag_logs_settings.php:93
+#: usr/local/www/diag_logs_settings.php:93
+msgid ""
+"A valid IP address/hosname or IP/hostname:port must be specified for remote "
+"syslog server #3."
+msgstr "syslogサーãƒï¼š 「有効ãªIPアドレス/ hosnameã¾ãŸã¯IP /ホストåã€ãƒãƒ¼ãƒˆã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãŸã‚ã«æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã€"
+
+#: usr/local/www/diag_logs_settings.php:234
+#: usr/local/www/diag_logs_settings.php:241
+#: usr/local/www/diag_logs_settings.php:241
+msgid "General Logging Options"
+msgstr "一般的ãªãƒ­ã‚°ã‚ªãƒ—ション"
+
+#: usr/local/www/diag_logs_settings.php:245
+#: usr/local/www/diag_logs_settings.php:252
+#: usr/local/www/diag_logs_settings.php:252
+msgid ""
+"Hint: This is only the number of log entries displayed in the GUI. It does "
+"not affect how many entries are contained in the actual log files."
+msgstr ""ヒント:ã“ã‚Œã¯ã€ GUIã«è¡¨ç¤ºã™ã‚‹ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã ã‘ã§ãã‚ŒãŒãªã„。 ã€ã¯ã€å®Ÿéš›ã®ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã«å«ã¾ã‚Œã¦ã„るエントリã®æ•°ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_logs_settings.php:251
+#: usr/local/www/diag_logs_settings.php:258
+#: usr/local/www/diag_logs_settings.php:258
+msgid ""
+"Hint: packets that are blocked by the implicit default block rule will not "
+"be logged if you uncheck this option. Per-rule logging options are still "
+"respected."
+msgstr ""ヒント:暗黙ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ–ロックルールã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚ŒãŸãƒ‘ケットãŒãªã„ã€ã“ã®ã‚ªãƒ—ションをオフã«ã—ãŸå ´åˆè¨˜éŒ²ã•ã‚Œã‚‹ã€‚ルールã”ã¨ã®ãƒ­ã‚°è¨˜éŒ²ã‚ªãƒ—ションã¯ã€ä¾ç„¶ã¨ã—ã¦ã€Œå°Šé‡ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/diag_logs_settings.php:259
+#: usr/local/www/diag_logs_settings.php:266
+#: usr/local/www/diag_logs_settings.php:266
+msgid ""
+"Hint: If this is checked, filter logs are shown as generated by the packet "
+"filter, without any formatting. This will reveal more detailed information, "
+"but it is more difficult to read."
+msgstr ""ヒント:ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒ‘ケットã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚Œã‚‹ã‚ˆã†ã«ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ­ã‚°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™"をフォーマットã›ãšã«ã€ãƒ•ã‚£ãƒ«ã‚¿ã€‚ã“ã‚Œã¯ã€ã‚ˆã‚Šè©³ç´°ãªæƒ…報を明らã‹ã«ã™ã‚‹ã€ãŒã€ãã‚Œã¯èª­ã‚€ã“ã¨ãŒå›°é›£ã§ã‚る。"
+
+#: usr/local/www/diag_logs_settings.php:265
+#: usr/local/www/diag_logs_settings.php:285
+#: usr/local/www/diag_logs_settings.php:285
+msgid "Disable writing log files to the local disk"
+msgstr "ローカルディスクã¸ã®æ›¸ãè¾¼ã¿ã®ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’無効ã«ã™ã‚‹"
+
+#: usr/local/www/diag_logs_settings.php:274
+#: usr/local/www/diag_logs_settings.php:294
+#: usr/local/www/diag_logs_settings.php:294
+msgid "Remote Logging Options"
+msgstr "リモートロギングオプション"
+
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_settings.php:297
+#: usr/local/www/diag_logs_settings.php:297
+msgid "Enable Remote Logging"
+msgstr "リモートロギングを有効ã«ã™ã‚‹"
+
+#: usr/local/www/diag_logs_settings.php:279
+#: usr/local/www/diag_logs_settings.php:299
+#: usr/local/www/diag_logs_settings.php:299
+msgid "Send log messages to remote syslog server"
+msgstr "リモートsyslogサーãƒã«ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡"
+
+#: usr/local/www/diag_logs_settings.php:282
+#: usr/local/www/diag_logs_settings.php:302
+#: usr/local/www/diag_logs_settings.php:302
+msgid "Remote Syslog Servers"
+msgstr "リモートsyslogサーãƒ"
+
+#: usr/local/www/diag_logs_settings.php:299
+#: usr/local/www/diag_logs_settings.php:319
+#: usr/local/www/diag_logs_settings.php:319
+msgid "IP addresses of remote syslog servers, or an IP:port."
+msgstr "リモートsyslogサーãƒã€ã¾ãŸã¯IPã®IPアドレス:ãƒãƒ¼ãƒˆã€‚"
+
+#: usr/local/www/diag_logs_settings.php:304
+#: usr/local/www/diag_logs_settings.php:324
+#: usr/local/www/diag_logs_settings.php:324
+msgid "Remote Syslog Contents"
+msgstr "リモートsyslogã®å†…容"
+
+#: usr/local/www/diag_logs_settings.php:334
+#: usr/local/www/diag_logs_settings.php:354
+#: usr/local/www/diag_logs_settings.php:354
+msgid ""
+"syslog sends UDP datagrams to port 514 on the specified remote syslog "
+"server, unless another port is specified. Be sure to set syslogd on the "
+"remote server to accept syslog messages from"
+msgstr "別ã®ãƒãƒ¼ãƒˆã‚’指定ã—ãªã„é™ã‚Šã€ã‚µãƒ¼ãƒã€Œ syslogãŒæŒ‡å®šã•ã‚ŒãŸãƒªãƒ¢ãƒ¼ãƒˆã®syslogã®ãƒãƒ¼ãƒˆ514ã«UDPデータグラムをé€ä¿¡ã—ã¾ã™ã€ 。ã‹ã‚‰ã®syslogメッセージをå—ã‘入れるãŸã‚ã«ã€Œãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒä¸Šã®syslogd設定ã—ã¦ãã ã•ã„"
+
+#: usr/local/www/system_gateway_groups_edit.php:229
+#: usr/local/www/system_gateway_groups_edit.php:289
+#: usr/local/www/system_gateway_groups_edit.php:293
+#: usr/local/www/system_gateway_groups_edit.php:293
+msgid "Interface Address"
+msgstr "インターフェース·アドレス"
+
+#: usr/local/www/system_gateway_groups_edit.php:253
+#: usr/local/www/system_gateway_groups_edit.php:313
+msgid ""
+"The virtual IP field selects what (virtual) IP should be used when this "
+"group applies to a local Dyndns, IPsec or openvpn endpoint"
+msgstr "グループローカルDynDNSã®ã€ IPsecã‚„OpenVPNã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã•ã‚Œã€ã€Œä»®æƒ³IPフィールドã¯ã€ã“ã‚ŒãŒã¨ã(仮想) IPãŒä½¿ç”¨ã™ã¹ãã‹é¸æŠž""
+
+#: usr/local/www/services_dyndns_edit.php:102
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:326
+#: usr/local/www/services_dyndns_edit.php:103
+#: usr/local/www/services_dyndns_edit.php:334
+#: usr/local/www/services_dyndns_edit.php:103
+#: usr/local/www/services_dyndns_edit.php:334
+msgid "Update URL"
+msgstr "æ›´æ–°URL"
+
+#: usr/local/www/services_dyndns_edit.php:254
+#: usr/local/www/services_dyndns_edit.php:258
+#: usr/local/www/services_dyndns_edit.php:260
+#: usr/local/www/services_dyndns_edit.php:260
+msgid "Interface to send update from"
+msgstr "ã‹ã‚‰æ›´æ–°ã‚’é€ä¿¡ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹"
+
+#: usr/local/www/services_dyndns_edit.php:262
+#: usr/local/www/services_dyndns_edit.php:266
+#: usr/local/www/services_dyndns_edit.php:268
+#: usr/local/www/services_dyndns_edit.php:268
+msgid "Note: This is almost always the same as the Interface to Monitor."
+msgstr "注æ„:ã“ã‚Œã¯ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ¢ãƒ‹ã‚¿ãƒ¼ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¨åŒã˜ã§ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:303
+#: usr/local/www/services_dyndns_edit.php:311
+#: usr/local/www/services_dyndns_edit.php:311
+msgid ""
+"Username is required for all types except Namecheap, FreeDNS and Custom "
+"Entries."
+msgstr "エントリ"ユーザーåã¯Namecheap 〠FreeDNSã¨ã‚«ã‚¹ã‚¿ãƒ ã‚’除ãã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ã®ãŸã‚ã«å¿…è¦ã¨ã•ã‚Œã‚‹ã€ 。"
+
+#: usr/local/www/services_dyndns_edit.php:300
+#: usr/local/www/services_dyndns_edit.php:304
+#: usr/local/www/services_dyndns_edit.php:312
+#: usr/local/www/services_dyndns_edit.php:312
+msgid "Route 53: Enter your Access Key ID."
+msgstr "ルート53 :ã‚ãªãŸã®ã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼IDを入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:301
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:313
+#: usr/local/www/services_dyndns_edit.php:313
+msgid ""
+"For Custom Entries, Username and Password represent HTTP Authentication "
+"username and passwords."
+msgstr "ユーザåã¨ãƒ‘スワードã®ã€Œã‚«ã‚¹ã‚¿ãƒ ã‚¨ãƒ³ãƒˆãƒªã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯HTTPèªè¨¼ã‚’表ã™"。"
+
+#: usr/local/www/services_dyndns_edit.php:310
+#: usr/local/www/services_dyndns_edit.php:314
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:322
+msgid "Route 53: Enter your Secret Access Key."
+msgstr "ルート53 :ã‚ãªãŸã®ç§˜å¯†ã‚¢ã‚¯ã‚»ã‚¹ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_dyndns_edit.php:315
+#: usr/local/www/services_dyndns_edit.php:319
+#: usr/local/www/services_dyndns_edit.php:327
+#: usr/local/www/services_dyndns_edit.php:327
+msgid "Zone ID"
+msgstr "ゾーンID"
+
+#: usr/local/www/services_dyndns_edit.php:318
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:330
+#: usr/local/www/services_dyndns_edit.php:330
+msgid ""
+"Enter Zone ID that you received when you created your domain in Route 53."
+msgstr ""ã‚ãªãŸã¯ãƒ«ãƒ¼ãƒˆ53ã«ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’作æˆã—ãŸã¨ãã«å—ã‘å–ã£ãŸã‚¾ãƒ¼ãƒ³IDを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_dyndns_edit.php:325
+#: usr/local/www/services_dyndns_edit.php:329
+#: usr/local/www/services_dyndns_edit.php:337
+#: usr/local/www/services_dyndns_edit.php:337
+msgid ""
+"This is the only field required by for Custom Dynamic DNS, and is only used "
+"by Custom Entries."
+msgstr "「ã“ã‚Œã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS用ãŒå¿…è¦ã¨ã™ã‚‹å”¯ä¸€ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã§ã‚ã‚Šã€å”¯ä¸€ä½¿ç”¨ã•ã‚Œã¦ã„る「カスタムエントリã«ã‚ˆã£ã¦ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:327
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:331
+#: usr/local/www/services_dyndns_edit.php:342
+#: usr/local/www/services_dyndns_edit.php:339
+#: usr/local/www/services_dyndns_edit.php:350
+#: usr/local/www/services_dyndns_edit.php:339
+#: usr/local/www/services_dyndns_edit.php:350
+msgid ""
+"If you need the new IP to be included in the request, put %IP% in its place."
+msgstr "「ã‚ãªãŸã¯ã€è¦æ±‚ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«æ–°ã—ã„IPãŒå¿…è¦ãªå ´åˆã¯ã€ãã®å ´æ‰€ã§ï¼…ã®IP ï¼…ã‚’ç½®ã。"
+
+#: usr/local/www/services_dyndns_edit.php:331
+#: usr/local/www/services_dyndns_edit.php:335
+#: usr/local/www/services_dyndns_edit.php:343
+#: usr/local/www/services_dyndns_edit.php:343
+msgid "Result Match"
+msgstr "çµæžœãƒžãƒƒãƒ"
+
+#: usr/local/www/services_dyndns_edit.php:334
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:346
+#: usr/local/www/services_dyndns_edit.php:346
+msgid "This field is only used by Custom Dynamic DNS Entries."
+msgstr "ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€ã‚«ã‚¹ã‚¿ãƒ Â·ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNSã®ã‚¨ãƒ³ãƒˆãƒªã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:336
+#: usr/local/www/services_dyndns_edit.php:340
+#: usr/local/www/services_dyndns_edit.php:348
+#: usr/local/www/services_dyndns_edit.php:348
+msgid ""
+"This field should be identical to what your DDNS Provider will return if the "
+"update succeeds, leave it blank to disable checking of returned results."
+msgstr "æ›´æ–°æˆåŠŸã€è¿”ã•ã‚Œã‚‹çµæžœã®ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾"ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«ã¯ã€ DDNSプロãƒã‚¤ãƒ€ã®å ´åˆã«è¿”ã•ã‚Œã‚‹ã‹ã¨åŒä¸€ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dyndns_edit.php:340
+#: usr/local/www/services_dyndns_edit.php:344
+#: usr/local/www/services_dyndns_edit.php:352
+#: usr/local/www/services_dyndns_edit.php:352
+msgid ""
+"If you need to include multiple possible values, sperate them with a |. If "
+"your provider includes a |, escape it with |"
+msgstr "「ã‚ãªãŸã¯ã€è¤‡æ•°ã®å¯èƒ½ãªå€¤ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãれらをsperate | 。場åˆã¯"| ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—プロãƒã‚¤ãƒ€ãŒå«ã¾ã‚Œã¦ã„|"
+
+#: usr/local/www/services_dyndns_edit.php:342
+#: usr/local/www/services_dyndns_edit.php:346
+#: usr/local/www/services_dyndns_edit.php:354
+#: usr/local/www/services_dyndns_edit.php:354
+msgid ""
+"Tabs (t), newlines (\n) and carriage returns (r) at the beginning or "
+"end of the returned results are removed before comparison."
+msgstr "è¿”ã•ã‚Œã‚‹çµæžœã®æœ«å°¾ã€Œæœ€åˆã‹ã®ã‚¿ãƒ–( t)ã¯ã€æ”¹è¡Œï¼ˆ \n )ã¨ã‚­ãƒ£ãƒªãƒƒã‚¸ãƒªã‚¿ãƒ¼ãƒ³ï¼ˆ r)ã¯ã€Œæ¯”較ã®å‰ã«å‰Šé™¤ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_dyndns_edit.php:351
+#: usr/local/www/services_dyndns_edit.php:355
+#: usr/local/www/services_dyndns_edit.php:363
+#: usr/local/www/services_dyndns_edit.php:363
+msgid "Choose TTL for your dns record."
+msgstr "ã‚ãªãŸã®DNSレコードã®TTLã‚’é¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/services_dyndns_edit.php:374
+#: usr/local/www/services_dyndns_edit.php:382
+#: usr/local/www/services_dyndns_edit.php:382
+msgid "Save & Force Update"
+msgstr "ä¿å­˜ã—ã¦å¼·åˆ¶ã‚¢ãƒƒãƒ—デート"
+
+#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111
+#: usr/local/www/fbegin.inc:103 usr/local/www/fbegin.inc:103
+msgid "High Avail. Sync"
+msgstr "高空ã有りåŒæœŸã™ã‚‹"
+
+#: usr/local/www/services_dnsmasq_edit.php:119
+#: usr/local/www/services_dnsmasq_edit.php:119
+msgid "Alias Domain"
+msgstr "エイリアスドメイン"
+
+#: usr/local/www/services_dnsmasq_edit.php:124
+#: usr/local/www/services_dnsmasq_edit.php:124
+msgid ""
+"Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'."
+msgstr "' -' "エイリアスリスト内ã®ãƒ›ã‚¹ãƒˆåã¯æ–‡å­—ã ã‘ã€A〜Zã€0〜9ã¨ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/services_dnsmasq_edit.php:127
+msgid "A valid domain must be specified in alias list."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã¯ã€åˆ¥åリストã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq_edit.php:232
+#: usr/local/www/services_dnsmasq_edit.php:233
+#: usr/local/www/services_dnsmasq_edit.php:233
+msgid "Enter additional names for this host."
+msgstr "ã“ã®ãƒ›ã‚¹ãƒˆã®è¿½åŠ ã®åå‰ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:186
+#: usr/local/www/pkg.php:186
+msgid "Saving changes..."
+msgstr "変更をä¿å­˜..."
+
+#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:187
+#: usr/local/www/pkg.php:187
+msgid "Do you really want to save changes?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€å¤‰æ›´ã‚’ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/status_interfaces.php:196
+#: usr/local/www/status_interfaces.php:199
+#: usr/local/www/status_interfaces.php:199
+msgid "Cell Signal (RSSI)"
+msgstr "細胞シグナル( RSSI )"
+
+#: usr/local/www/status_interfaces.php:203
+#: usr/local/www/status_interfaces.php:206
+#: usr/local/www/status_interfaces.php:206
+msgid "Cell Mode"
+msgstr "セルモード"
+
+#: usr/local/www/status_interfaces.php:210
+#: usr/local/www/status_interfaces.php:213
+#: usr/local/www/status_interfaces.php:213
+msgid "Cell SIM State"
+msgstr "セルã®SIM状態"
+
+#: usr/local/www/status_interfaces.php:217
+#: usr/local/www/status_interfaces.php:220
+#: usr/local/www/status_interfaces.php:220
+msgid "Cell Service"
+msgstr "セルサービス"
+
+#: usr/local/www/status_interfaces.php:224
+#: usr/local/www/status_interfaces.php:227
+#: usr/local/www/status_interfaces.php:227
+msgid "Cell Upstream"
+msgstr "セル上æµ"
+
+#: usr/local/www/status_interfaces.php:231
+#: usr/local/www/status_interfaces.php:234
+#: usr/local/www/status_interfaces.php:234
+msgid "Cell Downstream"
+msgstr "セルダウンストリーム"
+
+#: usr/local/www/status_interfaces.php:238
+#: usr/local/www/status_interfaces.php:241
+#: usr/local/www/status_interfaces.php:241
+msgid "Cell Current Up"
+msgstr "セル電æµã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/status_interfaces.php:245
+#: usr/local/www/status_interfaces.php:248
+#: usr/local/www/status_interfaces.php:248
+msgid "Cell Current Down"
+msgstr "セル電æµãƒ€ã‚¦ãƒ³"
+
+#: usr/local/www/status_interfaces.php:289
+#: usr/local/www/status_interfaces.php:292
+#: usr/local/www/status_interfaces.php:292
+msgid "IPv6 Link Local"
+msgstr "IPv6ã®ãƒªãƒ³ã‚¯ãƒ­ãƒ¼ã‚«ãƒ«"
+
+#: usr/local/www/status_interfaces.php:339
+#: usr/local/www/status_interfaces.php:342
+#: usr/local/www/status_interfaces.php:342
+msgid "LAGG Protocol"
+msgstr "LAGGプロトコル"
+
+#: usr/local/www/status_interfaces.php:346
+#: usr/local/www/status_interfaces.php:349
+#: usr/local/www/status_interfaces.php:349
+msgid "LAGG Ports"
+msgstr "LAGGãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61
+#: usr/local/www/diag_defaults.php:61
+msgid ""
+"The system has been reset to factory defaults and is now rebooting. This may "
+"take a few minutes, depending on your hardware."
+msgstr "「システムã¯å·¥å ´å‡ºè·æ™‚ã®è¨­å®šã«ãƒªã‚»ãƒƒãƒˆã•ã‚Œã€ç¾åœ¨ã€å†èµ·å‹•ã•ã‚Œã¦ã„る。ã“ã‚Œã¯å¯èƒ½æ€§ã€ã¯ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«å¿œã˜ã¦ã€æ•°åˆ†ã‹ã‹ã‚‹ã€‚"
+
+#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189
+#: usr/local/www/carp_status.php:189
+msgid "You can configure high availability sync settings"
+msgstr "ã‚ãªãŸã¯ã€é«˜å¯ç”¨æ€§åŒæœŸè¨­å®šã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/load_balancer_setting.php:69
+#: usr/local/www/load_balancer_setting.php:69
+msgid "Timeout must be a numeric value"
+msgstr "タイムアウトã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/load_balancer_setting.php:73
+#: usr/local/www/load_balancer_setting.php:73
+msgid "Interval must be a numeric value"
+msgstr "é–“éš”ã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/load_balancer_setting.php:78
+#: usr/local/www/load_balancer_setting.php:78
+msgid "Prefork must be a numeric value"
+msgstr "preforkã®ã¯ã€æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/load_balancer_setting.php:81
+#: usr/local/www/load_balancer_setting.php:81
+msgid "Prefork value must be between 1 and 32"
+msgstr "preforkã®å€¤ã¯1ã¨32ã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#: usr/local/www/load_balancer_setting.php:132
+#: usr/local/www/load_balancer_setting.php:131
+#: usr/local/www/load_balancer_setting.php:131
+msgid "Relayd global settings"
+msgstr "Relaydグローãƒãƒ«è¨­å®š"
+
+#: usr/local/www/load_balancer_setting.php:135
+#: usr/local/www/load_balancer_setting.php:134
+#: usr/local/www/load_balancer_setting.php:134
+msgid "timeout"
+msgstr "タイムアウト"
+
+#: usr/local/www/load_balancer_setting.php:139
+#: usr/local/www/load_balancer_setting.php:138
+#: usr/local/www/load_balancer_setting.php:138
+msgid ""
+"Set the global timeout in milliseconds for checks. Leave blank to use the "
+"default value of 1000 ms "
+msgstr "「ãƒã‚§ãƒƒã‚¯ã®ãŸã‚ã®ãƒŸãƒªç§’å˜ä½ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€ 1000å¹´ã€MSã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã‚’"
+
+#: usr/local/www/load_balancer_setting.php:143
+#: usr/local/www/load_balancer_setting.php:142
+#: usr/local/www/load_balancer_setting.php:142
+msgid "interval"
+msgstr "インターãƒãƒ«"
+
+#: usr/local/www/load_balancer_setting.php:147
+#: usr/local/www/load_balancer_setting.php:146
+#: usr/local/www/load_balancer_setting.php:146
+msgid ""
+"Set the interval in seconds at which the member of a pool will be checked. "
+"Leave blank to use the default interval of 10 seconds"
+msgstr "「プールã®ãƒ¡ãƒ³ãƒãƒ¼ãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã‚‹é–“隔を秒å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚ "10秒ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆé–“隔を使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™"
+
+#: usr/local/www/load_balancer_setting.php:151
+#: usr/local/www/load_balancer_setting.php:150
+#: usr/local/www/load_balancer_setting.php:150
+msgid "prefork"
+msgstr "preforkã®"
+
+#: usr/local/www/load_balancer_setting.php:155
+#: usr/local/www/load_balancer_setting.php:154
+#: usr/local/www/load_balancer_setting.php:154
+msgid ""
+"Number of processes used by relayd. Leave blank to use the default value of "
+"5 processes"
+msgstr "5プロセス〠relaydãŒä½¿ç”¨ã™ã‚‹ãƒ—ロセスã®æ•°ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã‚’使用ã™ã‚‹ã«ã¯ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€"
+
+#: usr/local/www/services_dhcp_relay.php:80
+#: usr/local/www/services_dhcp_relay.php:80
+msgid "A valid Destination Server IP address must be specified."
+msgstr "有効ãªå®›å…ˆã‚µãƒ¼ãƒã®IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66
+#: usr/local/www/diag_ipsec.php:68 usr/local/www/diag_ipsec.php:68
+msgid "Disconnected user"
+msgstr "切断ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶"
+
+#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193
+#: usr/local/www/diag_ipsec.php:194 usr/local/www/diag_ipsec.php:194
+msgid "Mobile User"
+msgstr "モãƒã‚¤ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼"
+
+#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194
+#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:195
+msgid "Login Time"
+msgstr "ログイン時刻"
+
+#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196
+#: usr/local/www/diag_ipsec.php:197 usr/local/www/diag_ipsec.php:197
+msgid "Remote"
+msgstr "リモート"
+
+#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224
+#: usr/local/www/diag_ipsec.php:225 usr/local/www/diag_ipsec.php:225
+msgid "You can configure IPsec"
+msgstr "ã‚ãªãŸã¯ã€IPsecを構æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:681
+#: usr/local/www/system_certmanager.php:210
+#: usr/local/www/system_certmanager.php:706
+#: usr/local/www/system_certmanager.php:707
+#: usr/local/www/system_certmanager.php:210
+#: usr/local/www/system_certmanager.php:707
+msgid "Certificate Type"
+msgstr "証明書ã®ç¨®é¡ž"
+
+#: usr/local/www/system_certmanager.php:694
+#: usr/local/www/system_certmanager.php:719
+#: usr/local/www/system_certmanager.php:720
+#: usr/local/www/system_certmanager.php:720
+msgid ""
+"Type of certificate to generate. Used for placing restrictions on the usage "
+"of the generated certificate."
+msgstr "ã€ã‚’生æˆã™ã‚‹è¨¼æ˜Žæ›¸ã®ç¨®é¡žã€‚使用方法ã«åˆ¶é™ã‚’é…ç½®ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã€Œç”Ÿæˆã•ã‚ŒãŸè¨¼æ˜Žæ›¸ã®ã€‚"
+
+#: usr/local/www/system_certmanager.php:757
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/system_certmanager.php:783
+#: usr/local/www/system_certmanager.php:783
+msgid "Alternative Names"
+msgstr "代替å"
+
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1112
+#: usr/local/www/system_certmanager.php:1168
+#: usr/local/www/system_certmanager.php:1172
+#: usr/local/www/system_certmanager.php:1172
+msgid "export cert+key in .p12"
+msgstr "。 P12ã®è¼¸å‡ºè¨¼æ˜Žæ›¸ã®ã‚­ãƒ¼"
+
+#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:192
+msgid "RRD Data"
+msgstr "RRDデータ"
+
+#: usr/local/www/firewall_rules_edit.php:224
+#: usr/local/www/firewall_rules_edit.php:237
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:236
+#: usr/local/www/firewall_rules_edit.php:219
+#: usr/local/www/firewall_rules_edit.php:233
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:239
+msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6"
+msgstr "ã‚ãªãŸã¯ã€IPv4ãŠã‚ˆã³IPv6ã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã¸ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:248
+#: usr/local/www/firewall_rules_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:251
+#: usr/local/www/firewall_rules_edit.php:251
+msgid ""
+"You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule "
+"that applies to IPv4 and IPv6"
+msgstr "「ã‚ãªãŸã¯ã€ä»–ã®ãƒ—ロトコルを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“è¦å‰‡ã€ãã®å¾ŒICMPã€TCP 〠UDPã¾ãŸã¯TCP / UDP 〠IPv4ãŠã‚ˆã³IPv6ã«ã‚‚é©ç”¨ã•ã‚Œ"
+
+#: usr/local/www/firewall_rules_edit.php:253
+#: usr/local/www/firewall_rules_edit.php:252
+#: usr/local/www/firewall_rules_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:255
+#: usr/local/www/firewall_rules_edit.php:255
+msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6"
+msgstr "ã‚ãªãŸã¯ã€IPv4ãŠã‚ˆã³IPv6ã«é©ç”¨ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã«ICMPタイプを割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:415
+#: usr/local/www/firewall_rules_edit.php:418
+#: usr/local/www/firewall_rules_edit.php:424
+#: usr/local/www/firewall_rules_edit.php:424
+msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules."
+msgstr "ã‚ãªãŸãŒçµ„ã¿åˆã‚ã•ã‚ŒãŸIPv4ã®IPv6ルールã§IPv4ã¾ãŸã¯IPv6アドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1300
+#: usr/local/www/firewall_rules_edit.php:1307
+#: usr/local/www/firewall_rules_edit.php:1306
+#: usr/local/www/firewall_rules_edit.php:1306
+msgid "802.1p"
+msgstr "802.1pã®"
+
+#: usr/local/www/firewall_rules_edit.php:1308
+#: usr/local/www/firewall_rules_edit.php:1323
+#: usr/local/www/firewall_rules_edit.php:1330
+#: usr/local/www/firewall_rules_edit.php:1341
+#: usr/local/www/firewall_rules_edit.php:1341
+msgid "Choose 802.1p priority to match on"
+msgstr "上ã¨ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«802.1pプライオリティをé¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/firewall_rules_edit.php:1312
+#: usr/local/www/firewall_rules_edit.php:1327
+#: usr/local/www/firewall_rules_edit.php:1334
+#: usr/local/www/firewall_rules_edit.php:1345
+#: usr/local/www/firewall_rules_edit.php:1345
+msgid "Choose 802.1p priority to apply"
+msgstr "é©ç”¨ã™ã‚‹802.1pプライオリティをé¸æŠžã—ã¦ãã ã•ã„"
+
+#: usr/local/www/services_unbound.php:102
+#: usr/local/www/services_unbound_advanced.php:88
+msgid "DNS Resolver"
+msgstr "DNSリゾルãƒ"
+
+#: usr/local/www/services_unbound.php:129
+msgid "The configuration for the DNS Resolver, has been changed"
+msgstr "DNSリゾルãƒã®è¨­å®šã¯ã€å¤‰æ›´ã•ã‚ŒãŸ"
+
+#: usr/local/www/services_unbound.php:136
+#: usr/local/www/services_unbound_advanced.php:123
+msgid "General settings"
+msgstr "一般的ãªè¨­å®š"
+
+#: usr/local/www/services_unbound.php:147
+msgid "General DNS Resolver Options"
+msgstr "一般的ãªDNSリゾルãƒã®ã‚ªãƒ—ション"
+
+#: usr/local/www/services_unbound.php:153
+msgid "Enable DNS Resolver"
+msgstr "DNSリゾルãƒã‚’有効ã«ã—ã¾ã™"
+
+#: usr/local/www/services_unbound.php:157
+msgid "Network interfaces"
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹"
+
+#: usr/local/www/services_unbound.php:172
+msgid ""
+"The DNS Resolver Server will listen on the selected interfaces. To add an "
+"interface click inside the interface box and select the interface from the "
+"drop down."
+msgstr "「 DNSリゾルãƒã‚µãƒ¼ãƒãŒé¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§å¾…æ©Ÿã—ã¾ã™ã€‚追加ã™ã‚‹ã«ã¯ã€ã€Œã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãƒœãƒƒã‚¯ã‚¹å†…部インターフェイスをクリックã—ã¦ã¨ "ドロップダウンメニューã‹ã‚‰ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound.php:177
+msgid "Outgoing interfaces"
+msgstr "発信インターフェイス"
+
+#: usr/local/www/services_unbound.php:192
+msgid ""
+"Utilize different network interface(s) that the DNS Resolver will use to "
+"send queries to authoritative servers and receive their replies. By default "
+"all interfaces are used."
+msgstr "ãã®è¿”信を権å¨ã‚µãƒ¼ãƒã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’é€ä¿¡ã—ã€å—信〠DNSリゾルãƒãŒã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹åˆ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ï¼ˆS )を利用〠。デフォルトã§ã¯ã€Œã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound.php:197
+msgid "DNSSEC"
+msgstr "DNSSEC"
+
+#: usr/local/www/services_unbound.php:200
+msgid "Enable DNSSEC Support"
+msgstr "DNSSECサãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_unbound.php:204
+msgid "Forwarding"
+msgstr "転é€"
+
+#: usr/local/www/services_unbound.php:207
+msgid "Enable Forwarding Mode"
+msgstr "転é€ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/services_unbound.php:214
+msgid "Register DHCP leases in the DNS Resolver"
+msgstr "レジスタDHCPã¯DNSリゾルãƒå†…ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/services_unbound.php:215
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS Resolver, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr "「ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã¨ã彼らã®ãƒ›ã‚¹ãƒˆåを指定ã—ã¦ãƒžã‚·ãƒ³""自分ã®åå‰ã‚’入手ã—%sSystemドメインを設定ã™ã‚‹å¿…è¦ãŒè§£æ±ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ : "よã†ã«DHCPリースをè¦æ±‚ã™ã‚‹ã«ã¯ã€ DNSリゾルãƒã«ç™»éŒ²ã•ã‚Œã¾ã™ä¸€èˆ¬setup%sを。é©åˆ‡ãªå€¤ã«ã­ã€‚"
+
+#: usr/local/www/services_unbound.php:226
+msgid "Register DHCP static mappings in the DNS Resolver"
+msgstr "DNSリゾルãƒã®ãƒ¬ã‚¸ã‚¹ã‚¿ã®DHCPé™çš„マッピング"
+
+#: usr/local/www/services_unbound.php:227
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS Resolver, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr "ãã®åå‰ãŒè§£æ±ºã§ãるよã†ã«ã€ DNSリゾルãƒã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ DHCPã®é™çš„マッピングラーニング登録ã•ã‚Œã‚‹ã€ 。一般setup%sé©æ­£å€¤ã«ï¼šã¾ãŸ%sSystemã®ã€Œãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound.php:254
+#, php-format
+msgid ""
+"If the DNS Resolver is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver "
+"will use the DNS servers entered in %sSystem: General setup%s or those "
+"obtained via DHCP or PPP on WAN if the &quot;Allow DNS server list to be "
+"overridden by DHCP/PPP on WAN&quot; is checked."
+msgstr "「 DNSリゾルãƒãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DHCPサービス(有効ãªå ´åˆï¼‰ãŒã—ã¾ã™ã€ãŒè‡ªå‹•çš„ã«DHCPクライアントã«DNSサーãƒãƒ¼ã¨ã—ã¦LANã®IPアドレスをæä¾›ã™ã‚‹ã®ã§ã€ "彼らã¯ã€DNSリゾルãƒã‚’使用ã—ã¾ã™ã€‚転é€ãŒã€æœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ DNSリゾルãƒã¯ã€ "æ„志一般setup%sã¾ãŸã¯DNSサーãƒãƒ¼ãƒªã‚¹ãƒˆã€ã¨ã¯ã€WAN上ã§DHCP / PPPã«ã‚ˆã£ã¦ç„¡åŠ¹ã«ã™ã‚‹ã€ã“ã¨ãŒã§ãるよã†ã«ã™ã‚‹ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹ã€å ´åˆã«ã¯ã€WAN上ã§ã®DHCPã‚„PPPを介ã—ã¦å–å¾—ã—ãŸã€Œã‚‚ã®ï¼š DNSã®%sSystemã«å…¥åŠ›ã•ã‚ŒãŸã‚µãƒ¼ãƒã‚’使用ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:116
+msgid "The configuration of the DNS Resolver, has been changed"
+msgstr "DNSリゾルãƒã®è¨­å®šã¯ã€å¤‰æ›´ã•ã‚ŒãŸ"
+
+#: usr/local/www/services_unbound_advanced.php:134
+msgid "Advanced Resolver Options"
+msgstr "高度ãªãƒ¬ã‚¾ãƒ«ãƒã‚ªãƒ—ション"
+
+#: usr/local/www/services_unbound_advanced.php:137
+msgid "Hide Identity"
+msgstr "éš ã™ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£"
+
+#: usr/local/www/services_unbound_advanced.php:140
+msgid "If enabled, id.server and hostname.bind queries are refused."
+msgstr "有効ã«ã™ã‚‹ã¨ã€ id.serverã¨hostname.bindクエリãŒæ‹’å¦ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:144
+msgid "Hide Version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’éš ã™"
+
+#: usr/local/www/services_unbound_advanced.php:147
+msgid "If enabled, version.server and version.bind queries are refused."
+msgstr "有効ã«ã™ã‚‹ã¨ã€ version.serverã¨ã‚¯ã‚¨ãƒªversion.bindãŒæ‹’å¦ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:151
+msgid "Prefetch Support"
+msgstr "プリフェッãƒã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_unbound_advanced.php:154
+msgid ""
+"Message cache elements are prefetched before they expire to help keep the "
+"cache up to date. When enabled, this option can cause an increase of around "
+"10% more DNS traffic and load on the server, but frequently requested items "
+"will not expire from the cache."
+msgstr "最新ã§ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€Œå½¼ã‚‰ãŒä¿ã¤ãŸã‚ã«æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹å‰ã«ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¦ç´ ãŒãƒ—リフェッãƒã•ã‚Œã‚‹ã€ 。有効ã«ã™ã‚‹ã¨ã€ã“ã®ã‚ªãƒ—ションã¯å‘¨ã‚Šã®å¢—加原因ã¨ãªã‚Šã¾ã™ã€ 10パーセント以上ã®DNSトラフィックã¨ã‚µãƒ¼ãƒãƒ¼ã®è² è·ãŒã€ã—ã‹ã—é »ç¹ã«è¦æ±‚ã•ã‚Œã‚‹é …ç›®ã¯ã€ 「キャッシュã‹ã‚‰æœ‰åŠ¹æœŸé™ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_unbound_advanced.php:158
+msgid "Prefetch DNS Key Support"
+msgstr "プリフェッãƒDNSキーã®ã‚µãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/services_unbound_advanced.php:161
+#, php-format
+msgid ""
+"DNSKEY's are fetched earlier in the validation process when a %sDelegation "
+"signer%s is encountered. This helps lower the latency of requests but does "
+"utilize a little more CPU."
+msgstr "signer%sé­é‡ã—ãŸ"DNSKEYã®ã¯ã€ä»¥å‰ã®æ¤œè¨¼ãƒ—ロセスã«ãŠã‘ã‚‹%sDelegationãŒæ™‚ã«ãƒ•ã‚§ãƒƒãƒã•ã‚Œã‚‹ã€ 。ã“ã‚Œã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã‚’下ã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ "ã‚‚ã†å°‘ã—ã®CPUを利用ã—ã¦ã„ãªã„。"
+
+#: usr/local/www/services_unbound_advanced.php:165
+msgid "Harden Glue"
+msgstr "ãƒãƒ¼ãƒ‡ãƒ³ã‚°ãƒ«ãƒ¼"
+
+#: usr/local/www/services_unbound_advanced.php:168
+msgid "Only trust glue if it is within the servers authority."
+msgstr "ãã‚Œã¯ã‚µãƒ¼ãƒã®æ¨©é™ã®ç¯„囲内ã§ã‚ã‚‹å ´åˆã«ã®ã¿æŽ¥ç€å‰¤ã‚’ä¿¡é ¼ã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:172
+msgid "Harden DNSSEC data"
+msgstr "ãƒãƒ¼ãƒ‡ãƒ³DNSSECデータ"
+
+#: usr/local/www/services_unbound_advanced.php:175
+msgid ""
+"DNSSEC data is required for trust-anchored zones. If such data is absent, "
+"the zone becomes bogus. If this is disabled and no DNSSEC data is received, "
+"then the zone is made insecure."
+msgstr "「 DNSSECデータãŒä¿¡é ¼ã‚¢ãƒ³ã‚«ãƒ¼ã‚¾ãƒ¼ãƒ³ã«å¿…è¦ã¨ã•ã‚Œã‚‹ã€‚ã“ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€ã€Œã‚¾ãƒ¼ãƒ³ãŒå½ã¨ãªã‚‹ã€‚ã“ã‚Œã¯ç„¡åŠ¹ã§ã€ DNSSECデータãŒå—ä¿¡ã•ã‚Œãªã„å ´åˆã€ 「次ã«ã‚¾ãƒ¼ãƒ³ãŒå®‰å…¨ã§è¡Œã‚れる。"
+
+#: usr/local/www/services_unbound_advanced.php:179
+msgid "Message Cache Size"
+msgstr "メッセージキャッシュサイズ"
+
+#: usr/local/www/services_unbound_advanced.php:190
+msgid ""
+"Size of the message cache. The message cache stores DNS rcodes and "
+"validation statuses. The RRSet cache will automatically be set to twice this "
+"amount. The RRSet cache contains the actual RR data. The default is 4 "
+"megabytes."
+msgstr "「メッセージ·キャッシュã®ã‚µã‚¤ã‚ºã€‚メッセージキャッシュを格ç´ã™ã‚‹DNS rcodesã¨ã€Œæ¤œè¨¼ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã€‚資æºãƒ¬ã‚³ãƒ¼ãƒ‰é›†åˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯è‡ªå‹•çš„ã«2回ã«è¨­å®šã•ã‚Œã¾ã™ã€é‡ã€‚資æºãƒ¬ã‚³ãƒ¼ãƒ‰é›†åˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ã€å®Ÿéš›ã®RRデータãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚デフォルトã¯4ã§ã™ã€ãƒ¡ã‚¬ãƒã‚¤ãƒˆã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:194
+msgid "Outgoing TCP Buffers"
+msgstr "発信TCPãƒãƒƒãƒ•ã‚¡"
+
+#: usr/local/www/services_unbound_advanced.php:204
+msgid ""
+"The number of outgoing TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, to authoritative servers, are "
+"done."
+msgstr "「スレッドã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‹ãŸã‚ã®ç™ºä¿¡TCPãƒãƒƒãƒ•ã‚¡ã®æ•°ã€‚デフォルト値ã¯ã€Œ 10ã§ã™ã€‚ 0ã¯æ¨©å¨ã‚µãƒ¼ãƒã«ã¯ã€ä½•ã®TCPクエリをé¸æŠžã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ 「実行ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:208
+msgid "Incoming TCP Buffers"
+msgstr "ç€ä¿¡TCPãƒãƒƒãƒ•ã‚¡"
+
+#: usr/local/www/services_unbound_advanced.php:218
+msgid ""
+"The number of incoming TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, from clients, are accepted."
+msgstr "「スレッドã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‹ãŸã‚ã®ç€ä¿¡TCPãƒãƒƒãƒ•ã‚¡ã®æ•°ã€‚デフォルト値ã¯ã€Œ 10ã§ã™ã€‚ 0ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®ãã®å¾Œã®TCPクエリーをã€é¸æŠžã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€å—ã‘入れられã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:222
+msgid "EDNS Buffer Size"
+msgstr "EDNSãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚º"
+
+#: usr/local/www/services_unbound_advanced.php:229
+msgid ""
+"Number of bytes size to advertise as the EDNS reassembly buffer size. This "
+"is the value that is used in UDP datagrams sent to peers. RFC recommendation "
+"is 4096 (which is the default). If you have fragmentation reassemble "
+"problems, usually seen as timeouts, then a value of 1480 should help. The "
+"512 value bypasses most MTU path problems, but it can generate an excessive "
+"amount of TCP fallback."
+msgstr "「 EDNS組立ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºã¨ã—ã¦ã‚¢ãƒ‰ãƒã‚¿ã‚¤ã‚ºã™ã‚‹ãƒã‚¤ãƒˆã‚µã‚¤ã‚ºã®æ•°ã€‚ã“ã‚Œã¯ã€ "ピアã«é€ä¿¡ã•ã‚Œã‚‹UDPデータグラムã§ä½¿ç”¨ã•ã‚Œã‚‹å€¤ã§ã™ã€‚ RFC勧告ã¯é€šå¸¸ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¨è¦‹ã‚‰ã‚ŒãŸå•é¡Œã‚’ã€ãã—ã¦1480å¹´ã®å€¤ã¯å½¹ç«‹ã¤ã¯ãš"ã‚ãªãŸã¯æ–­ç‰‡åŒ–ãŒå†æ§‹æˆã—ã¦ã„ã‚‹å ´åˆã€‚ (デフォルト) 4096 ã€ã§ã™ã€‚ 「 512ã®å€¤ã¯ã€ã»ã¨ã‚“ã©ã®MTUパスã®å•é¡Œã‚’迂回ã™ã‚‹ãŒã€ãã‚Œã¯ã€éŽå‰°ãªç”Ÿæˆã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒTCPフォールãƒãƒƒã‚¯ã®é‡ã‚’。"
+
+#: usr/local/www/services_unbound_advanced.php:233
+msgid "Number of queries per thread"
+msgstr "スレッドã‚ãŸã‚Šã®ã‚¯ã‚¨ãƒªæ•°"
+
+#: usr/local/www/services_unbound_advanced.php:240
+msgid ""
+"The number of queries that every thread will service simultaneously. If more "
+"queries arrive that need to be serviced, and no queries can be jostled, then "
+"these queries are dropped."
+msgstr "クエリサービスをå—ã‘ã‚‹ãŸã‚ã«ãã®å¿…è¦æ€§ã‚’ç€ã‘ãªã„クエリã¯ã‚‚ã¾ã§ããªã„ã€ã‚ˆã‚Šã¯å ´åˆã€ã™ã¹ã¦ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒåŒæ™‚ã«ã‚µãƒ¼ãƒ“スã™ã‚‹ã‚¯ã‚¨ãƒªã®æ•°ã¯ã€‚ 〠ã€ãã—ã¦ã€Œã“れらã®ã‚¯ã‚¨ãƒªã¯å‰Šé™¤ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:244
+msgid "Jostle Timeout"
+msgstr "モーターボータイムアウト"
+
+#: usr/local/www/services_unbound_advanced.php:252
+msgid ""
+"This timeout is used for when the server is very busy. This protects against "
+"denial of service by slow queries or high query rates. The default value is "
+"200 milliseconds."
+msgstr "「ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒéžå¸¸ã«ãƒ“ジーã§ã‚ã‚‹ã¨ãã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã‹ã‚‰ä¿è­·ã€Œã‚¹ãƒ­ãƒ¼ã‚¯ã‚¨ãƒªã¾ãŸã¯é«˜ã„クエリãªæ–™é‡‘ã§ã‚µãƒ¼ãƒ“ス拒å¦ã€‚デフォルト値ã¯ã€Œ200ミリ秒ã§ã‚る。"
+
+#: usr/local/www/services_unbound_advanced.php:256
+msgid "Maximum TTL for RRsets and messages"
+msgstr "RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å¤§ã®TTL"
+
+#: usr/local/www/services_unbound_advanced.php:259
+msgid ""
+"Configure a maximum Time to live for RRsets and messages in the cache. The "
+"default is 86400 seconds (1 day). When the internal TTL expires the cache "
+"item is expired. This can be configured to force the resolver to query for "
+"data more often and not trust (very large) TTL values."
+msgstr "「キャッシュ内ã®RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãŸã‚ã«ç”Ÿãã‚‹ã®æœ€å¤§æ™‚間を設定ã—ã¾ã™ã€‚ 「デフォルトã¯86400秒( 1日)ã§ã™ã€‚内部ã®TTLã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ã‚’より頻ç¹ã§ã¯ãªãã€ä¿¡é ¼ï¼ˆéžå¸¸ã«å¤§ãã„) TTL値ã€ã®é …ç›®ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„る。ã“ã‚Œã¯ç…§ä¼šã™ã‚‹ãŸã‚ã«ã€ãƒªã‚¾ãƒ«ãƒã‚’強制的ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/services_unbound_advanced.php:263
+msgid "Minimum TTL for RRsets and messages"
+msgstr "RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€å°ã®TTL"
+
+#: usr/local/www/services_unbound_advanced.php:266
+msgid ""
+"Configure a minimum Time to live for RRsets and messages in the cache. The "
+"default is 0 seconds. If the minimum value kicks in, the data is cached for "
+"longer than the domain owner intended, and thus less queries are made to "
+"look up the data. The 0 value ensures the data in the cache is as the domain "
+"owner intended. High values can lead to trouble as the data in the cache "
+"might not match up with the actual data anymore."
+msgstr "「キャッシュ内ã®RRセットãŠã‚ˆã³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãŸã‚ã«ç”Ÿãã‚‹ã®æœ€å°æ™‚間を設定ã—ã¾ã™ã€‚ 「デフォルト値ã¯0秒ã§ã™ã€‚最å°å€¤ã¯ä¸­ã®ã‚­ãƒƒã‚¯ã¨ã€ãƒ‡ãƒ¼ã‚¿ãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã€ã€Œæ„図ã—ãŸãƒ‰ãƒ¡ã‚¤ãƒ³ã‚ªãƒ¼ãƒŠãƒ¼ã‚ˆã‚Šã‚‚é•·ã„ãŸã‚ã€å°‘ãªã„クエリãŒã™ã‚‹ãŸã‚ã«è¡Œã‚れる「データを検索ã—ã¾ã™ã€‚ 0値ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã€Œæ‰€æœ‰è€…ãŒæ„図ã—ãŸã€‚高ã„値ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥å†…ã®ãƒ‡ãƒ¼ã‚¿ã®ã‚ˆã†ã«ã€ãƒˆãƒ©ãƒ–ルã«ã¤ãªãŒã‚‹å¯èƒ½æ€§ã€ã¨ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥å†…ã®ãƒ‡ãƒ¼ã‚¿ã¯ã‚‚ã†å®Ÿéš›ã®ãƒ‡ãƒ¼ã‚¿ã¨ä¸€è‡´ã—ãªã„å ´åˆãŒã‚ã‚Šã¾ã™ãŒä¿è¨¼ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:270
+msgid "TTL for Host cache entries"
+msgstr "ホストキャッシュエントリã®TTL"
+
+#: usr/local/www/services_unbound_advanced.php:279
+msgid ""
+"Time to live for entries in the host cache. The host cache contains "
+"roundtrip timing and EDNS support information. The default is 15 minutes."
+msgstr "往復ã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã¨EDNSサãƒãƒ¼ãƒˆæƒ…報を「ホストキャッシュ内ã®ã‚¨ãƒ³ãƒˆãƒªã®å­˜ç¶šæ™‚é–“ã¯ã€ãƒ›ã‚¹ãƒˆÂ·ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€ 。デフォルトã¯15分ã§ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:283
+msgid "TTL for lame delegation"
+msgstr "ä¸å®Œå…¨ãªå§”ä»»ã®TTL"
+
+#: usr/local/www/services_unbound_advanced.php:292
+msgid ""
+"Time to live for when a delegation is considered to be lame. The default is "
+"15 minutes."
+msgstr "15分「委任ãŒãƒ©ãƒ¡ã§ã‚ã‚‹ã¨ã¿ãªã•ã‚ŒãŸã¨ãã®ãŸã‚ã«ç”Ÿãる時間。デフォルトã¯ã€Œã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:296
+msgid "Number of Hosts to cache"
+msgstr "キャッシュã«ãƒ›ã‚¹ãƒˆã®æ•°"
+
+#: usr/local/www/services_unbound_advanced.php:305
+msgid "Number of hosts for which information is cached. The default is 10,000."
+msgstr "情報ãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„るホストã®æ•°ã€‚デフォルトã¯10,000ã§ã™ã€‚"
+
+#: usr/local/www/services_unbound_advanced.php:309
+msgid "Unwanted Reply Threshold"
+msgstr "ä¸è¦ãªè¿”ä¿¡ã—ãã„値"
+
+#: usr/local/www/services_unbound_advanced.php:319
+msgid ""
+"If enabled, a total number of unwanted replies is kept track of in every "
+"thread. When it reaches the threshold, a defensive action is taken and a "
+"warning is printed to the log file. This defensive action is to clear the "
+"RRSet and message caches, hopefully flushing away any poison. The default is "
+"disabled, but if enabled a a value of 10 million is suggested."
+msgstr "スレッド「有効ã«ã™ã‚‹ã¨ã€ä¸å¿…è¦ãªå›žç­”ã®åˆè¨ˆæ•°ã¯ã€ã™ã¹ã¦ã®å†…ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’ä¿ãŸã‚Œã¦ã„る〠。ãã‚ŒãŒã—ãã„値ã«é”ã™ã‚‹ã¨ã€é˜²å¾¡çš„ãªè¡Œå‹•ãŒã¨ã‚‰ã‚Œã¦ãŠã‚Šã€ã†ã¾ãã„ã‘ã°ã©ã‚“ãªæ¯’ã‚’æ´—ã„æµã™ã€ RRSetã«ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€è­¦å‘ŠãŒãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚ã“ã®é˜²å¾¡çš„ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚ªãƒ•ã«ã—ã¦ã„ã¾ã™ã€ 。デフォルトã¯ã€Œç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ãŒã€åƒä¸‡ã®æœ‰åŠ¹ã«ã—ãŸå ´åˆã€AAã®å€¤ãŒæ案ã•ã‚Œã¦ã„る。"
+
+#: usr/local/www/services_unbound_advanced.php:323
+msgid "Log level verbosity"
+msgstr "レベルã®å†—長性をログã«è¨˜éŒ²"
+
+#: usr/local/www/services_unbound_advanced.php:333
+msgid "Select the log verbosity."
+msgstr "ログã®è©³ç´°åº¦ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:80
+#: usr/local/www/system_advanced_firewall.php:91
+#: usr/local/www/system_advanced_firewall.php:91
+msgid "The Firewall Maximum Tables value must be an integer."
+msgstr "ファイアウォールã®æœ€å¤§ãƒ†ãƒ¼ãƒ–ルã®å€¤ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:326
+#: usr/local/www/system_advanced_firewall.php:370
+#: usr/local/www/system_advanced_firewall.php:371
+#: usr/local/www/system_advanced_firewall.php:371
+msgid "Firewall Maximum Tables"
+msgstr "ファイアウォールã®æœ€å¤§è¡¨"
+
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:375
+#: usr/local/www/system_advanced_firewall.php:375
+msgid ""
+"Maximum number of tables for systems such as aliases, sshlockout, snort, "
+"etc, combined."
+msgstr "ãªã©ã€åˆã‚ã›ã¦ã€Œã“ã®ã‚ˆã†ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ sshlockout 〠Snortã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ã®ãŸã‚ã®ãƒ†ãƒ¼ãƒ–ルã®æœ€å¤§æ•°ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:375
+#: usr/local/www/system_advanced_firewall.php:376
+#: usr/local/www/system_advanced_firewall.php:376
+msgid ""
+"This is the actual number of tables, not the number of entries inside the "
+"tables (see below)"
+msgstr "テーブル(下記å‚照) ã€ã“ã‚Œã¯ã€ãƒ†ãƒ¼ãƒ–ルã®å®Ÿéš›ã®æ•°ã§ã¯ãªãã€å†…部ã®ã‚¨ãƒ³ãƒˆãƒªã®æ•°ã§ã‚ã‚‹""
+
+#: usr/local/www/system_advanced_firewall.php:393
+#: usr/local/www/system_advanced_firewall.php:437
+#: usr/local/www/system_advanced_firewall.php:438
+#: usr/local/www/system_advanced_firewall.php:438
+msgid "Disable Negate rule on policy routing rules"
+msgstr "ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã«å¦å®šã®ãƒ«ãƒ¼ãƒ«ã‚’無効ã«"
+
+#: usr/local/www/system_advanced_firewall.php:395
+#: usr/local/www/system_advanced_firewall.php:439
+#: usr/local/www/system_advanced_firewall.php:440
+#: usr/local/www/system_advanced_firewall.php:440
+msgid ""
+"With Multi-WAN you generally want to ensure traffic reaches directly "
+"connected networks and VPN networks when using policy routing. You can "
+"disable this for special purposes but it requires manually creating rules "
+"for these networks"
+msgstr "ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã™ã‚‹å ´åˆã¯ã€æŽ¥ç¶šã•ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨VPNãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’「マルãƒWANを使用ã™ã‚‹ã¨ã€ä¸€èˆ¬çš„ã«ã¯ã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒç›´æŽ¥åˆ°é”ã—ãŸã“ã¨ã‚’確èªã—ãŸã„〠。ã‚ãªãŸã¯ "特別ãªç›®çš„ã®ãŸã‚ã«ã“れを無効ã«ã™ã‚‹ãŒã€ãã‚Œã¯ã€æ‰‹å‹•ã§ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å¿…è¦ã€ãŒã§ãã€ã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãŸã‚ã«"
+
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:469
+#: usr/local/www/system_advanced_firewall.php:470
+#: usr/local/www/system_advanced_firewall.php:470
+msgid "NAT Reflection mode for port forwards"
+msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã™ã‚‹ãŸã‚ã€NATå射モード"
+
+#: usr/local/www/system_advanced_firewall.php:411
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_nat_edit.php:788
+#: usr/local/www/system_advanced_firewall.php:473
+#: usr/local/www/firewall_nat_edit.php:800
+#: usr/local/www/system_advanced_firewall.php:474
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/system_advanced_firewall.php:474
+msgid "Enable (NAT + Proxy)"
+msgstr "イãƒãƒ¼ãƒ–ル( NATプロキシ)"
+
+#: usr/local/www/system_advanced_firewall.php:412
+#: usr/local/www/firewall_nat_edit.php:795
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/system_advanced_firewall.php:474
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/system_advanced_firewall.php:475
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/system_advanced_firewall.php:475
+msgid "Enable (Pure NAT)"
+msgstr "イãƒãƒ¼ãƒ–ル(ピュアNAT)"
+
+#: usr/local/www/system_advanced_firewall.php:415
+#: usr/local/www/system_advanced_firewall.php:477
+#: usr/local/www/system_advanced_firewall.php:478
+#: usr/local/www/system_advanced_firewall.php:478
+msgid ""
+"When enabled, this automatically creates additional NAT redirect rules for "
+"access to port forwards on your external IP addresses from within your "
+"internal networks."
+msgstr "ã‚ãªãŸã®ã€Œå†…部ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã‹ã‚‰å¤–部IPアドレスã®ãƒãƒ¼ãƒˆã«è»¢é€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã€ã‚’有効ã«ã™ã‚‹ã¨ã€ã“ã‚Œã¯è‡ªå‹•çš„ã«è¿½åŠ ã®NATãŒãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:417
+#: usr/local/www/system_advanced_firewall.php:479
+#: usr/local/www/system_advanced_firewall.php:480
+#: usr/local/www/system_advanced_firewall.php:480
+msgid ""
+"The NAT + proxy mode uses a helper program to send packets to the target of "
+"the port forward. It is useful in setups where the interface and/or gateway "
+"IP used for communication with the target cannot be accurately determined at "
+"the time the rules are loaded. Reflection rules are not created for ranges "
+"larger than 500 ports and will not be used for more than 1000 ports total "
+"between all port forwards. Only TCP and UDP protocols are supported."
+msgstr "ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ã€ŒNATプロキシモードã§ã¯ã€ç›®æ¨™ã«ãƒ‘ケットをé€ä¿¡ã™ã‚‹ãŸã‚ã«ãƒ˜ãƒ«ãƒ‘ープログラムを使用ã—ã¦ã„ã¾ã™ã€ 。ãã‚Œã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŠã‚ˆã³/ã¾ãŸã¯ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®ãƒ«ãƒ¼ãƒ«ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¦ã„る時間〠ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã®é€šä¿¡ã«ä½¿ç”¨ã™ã‚‹IPを正確ã«æ±ºå®šã™ã‚‹ã“ã¨ãŒã§ããªã„ã€ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã«ä¾¿åˆ©ã§ã™ã€‚å射ルールã¯ç¯„囲ã®ãŸã‚ã«ä½œæˆã•ã‚Œã¦ã„ãªã„ã€ã‚’超ãˆã‚‹500ãƒãƒ¼ãƒˆã¨åˆè¨ˆ1000以上ã®ãƒãƒ¼ãƒˆã«ä½¿ç”¨ã•ã‚Œã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“"ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆã«è»¢é€é–“。ã ã‘TCPãŠã‚ˆã³UDPプロトコルãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:419
+#: usr/local/www/system_advanced_firewall.php:481
+#: usr/local/www/system_advanced_firewall.php:482
+#: usr/local/www/system_advanced_firewall.php:482
+msgid ""
+"The pure NAT mode uses a set of NAT rules to direct packets to the target of "
+"the port forward. It has better scalability, but it must be possible to "
+"accurately determine the interface and gateway IP used for communication "
+"with the target at the time the rules are loaded. There are no inherent "
+"limits to the number of ports other than the limits of the protocols. All "
+"protocols available for port forwards are supported."
+msgstr "ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰ã€Œç´”粋ãªNATモードã§ã¯ã€ç›®æ¨™ã¸ã®ç›´æŽ¥ã®ãƒ‘ケットã«NATè¦å‰‡ã®ã‚»ãƒƒãƒˆã‚’使用ã—ã¦ã„ã¾ã™ã€ 。ãã‚Œã¯ã€ã‚ˆã‚Šè‰¯ã„スケーラビリティをæŒã£ã¦ã„ã¾ã™ãŒã€ãã‚Œã¯ãƒ«ãƒ¼ãƒ«ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚ŒãŸæ™‚点ã§ã€å¯¾è±¡ã¨ã®ã€Œæ­£ç¢ºé€šä¿¡ã«ä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŠã‚ˆã³ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPを決定ã€ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。ã¯å›ºæœ‰ã®ã€Œãƒ—ロトコルã®åˆ¶é™ã‚ˆã‚Šã‚‚ã€ä»–ã®ãƒãƒ¼ãƒˆã®æ•°ã«ã¯é™ç•ŒãŒã€‚ã™ã¹ã¦ã€ãŒå­˜åœ¨ã—ãªã„ãƒãƒ¼ãƒˆã«è»¢é€ã«åˆ©ç”¨å¯èƒ½ãªãƒ—ロトコルãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:421
+#: usr/local/www/system_advanced_firewall.php:441
+#: usr/local/www/system_advanced_firewall.php:483
+#: usr/local/www/system_advanced_firewall.php:503
+#: usr/local/www/system_advanced_firewall.php:484
+#: usr/local/www/system_advanced_firewall.php:504
+#: usr/local/www/system_advanced_firewall.php:484
+#: usr/local/www/system_advanced_firewall.php:504
+msgid ""
+"Individual rules may be configured to override this system setting on a per-"
+"rule basis."
+msgstr "ルールベースã€å€‹ã€…ã®ãƒ«ãƒ¼ãƒ«ã”ã¨ã®ä¸Šã§ã“ã®ã‚·ã‚¹ãƒ†ãƒ è¨­å®šã‚’上書ãã™ã‚‹ã‚ˆã†ã«æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。"
+
+#: usr/local/www/system_advanced_firewall.php:428
+#: usr/local/www/system_advanced_firewall.php:490
+#: usr/local/www/system_advanced_firewall.php:491
+#: usr/local/www/system_advanced_firewall.php:491
+msgid "Enter value for Reflection timeout in seconds."
+msgstr "秒å˜ä½ã§ãƒªãƒ•ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å€¤ã‚’入力ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:430
+#: usr/local/www/system_advanced_firewall.php:492
+#: usr/local/www/system_advanced_firewall.php:493
+#: usr/local/www/system_advanced_firewall.php:493
+msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode."
+msgstr "注:ã®ã¿ã€NATプロキシモードã®ãƒãƒ¼ãƒˆã‚’転é€ã§ã®åå°„ã«ã‚‚é©ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:434
+#: usr/local/www/system_advanced_firewall.php:496
+#: usr/local/www/system_advanced_firewall.php:497
+#: usr/local/www/system_advanced_firewall.php:497
+msgid "Enable NAT Reflection for 1:1 NAT"
+msgstr "1時01分ã€NATã®NATリフレクションを有効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_firewall.php:437
+#: usr/local/www/system_advanced_firewall.php:499
+#: usr/local/www/system_advanced_firewall.php:500
+#: usr/local/www/system_advanced_firewall.php:500
+msgid ""
+"Enables the automatic creation of additional NAT redirect rules for access "
+"to 1:1 mappings of your external IP addresses from within your internal "
+"networks."
+msgstr "内部ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã‹ã‚‰å¤–部IPアドレスã®1:1マッピングã«ã€Œã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ«ãƒ¼ãƒ«ã‚’リダイレクトã®è¿½åŠ ã®NATã®è‡ªå‹•ä½œæˆã‚’å¯èƒ½ã«ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:439
+#: usr/local/www/system_advanced_firewall.php:501
+#: usr/local/www/system_advanced_firewall.php:502
+#: usr/local/www/system_advanced_firewall.php:502
+msgid ""
+"Note: Reflection on 1:1 mappings is only for the inbound component of the "
+"1:1 mappings. This functions the same as the pure NAT mode for port "
+"forwards. For more details, refer to the pure NAT mode description above."
+msgstr ""注1:1マッピングã®ãƒªãƒ•ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã®ã‚¤ãƒ³ãƒã‚¦ãƒ³ãƒ‰ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«ã‚る「1:1マッピング。ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆ"を転é€ã™ã‚‹ãŸã‚ã®ç´”粋ãªNATモードã¨åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚詳細ã¯ã€ä¸Šè¨˜ã®ç´”粋ãªNATモードã®èª¬æ˜Žã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_firewall.php:445
+#: usr/local/www/system_advanced_firewall.php:507
+#: usr/local/www/system_advanced_firewall.php:508
+#: usr/local/www/system_advanced_firewall.php:508
+msgid "Enable automatic outbound NAT for Reflection"
+msgstr "リフレクションã®è‡ªå‹•ç™ºä¿¡NATを有効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_firewall.php:450
+#: usr/local/www/system_advanced_firewall.php:512
+#: usr/local/www/system_advanced_firewall.php:513
+#: usr/local/www/system_advanced_firewall.php:513
+msgid ""
+"Required for full functionality of the pure NAT mode of NAT Reflection for "
+"port forwards or NAT Reflection for 1:1 NAT."
+msgstr "ãƒãƒ¼ãƒˆã«è»¢é€ã¾ãŸã¯1:1 NAT用ã®NATåå°„ã€ã®NATリフレクションã®ç´”粋ãªNATモードã®å…¨æ©Ÿèƒ½ã«å¿…è¦ãª"。"
+
+#: usr/local/www/system_advanced_firewall.php:452
+#: usr/local/www/system_advanced_firewall.php:514
+#: usr/local/www/system_advanced_firewall.php:515
+#: usr/local/www/system_advanced_firewall.php:515
+msgid ""
+"Note: This only works for assigned interfaces. Other interfaces require "
+"manually creating the outbound NAT rules that direct the reply packets back "
+"through the router."
+msgstr "手動ã§å¿œç­”ãŒãƒ«ãƒ¼ã‚¿ã‚’介ã—ã¦ã€Œé€£ç¶šãƒ‘ケット直接アウトãƒã‚¦ãƒ³ãƒ‰NATルールã®ä½œæˆï¼šã€Œæ³¨æ„ã—ã¦ãã ã•ã„。割り当ã¦ã‚‰ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ç”¨ã®ã¿å‹•ä½œãã®ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ãŒå¿…è¦ã§ã™ã€ 。"
+
+#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86
+#: usr/local/www/diag_logs_ntpd.php:86
+#, php-format
+msgid "Last %s NTP log entries"
+msgstr "最後%sã®NTPログエントリ"
+
+#: usr/local/www/firewall_aliases_edit.php:468
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/firewall_aliases_edit.php:492
+#: usr/local/www/firewall_aliases_edit.php:478
+msgid ""
+"Enter as many hosts as you would like. Hosts must be specified by their IP "
+"address or fully qualified domain name (FQDN). FQDN hostnames are "
+"periodically re-resolved and updated. If multiple IPs are returned by a DNS "
+"query, all are used."
+msgstr "「ã‚ãªãŸãŒæœ›ã‚“ã§ã„ã‚‹ã»ã©å¤šãã®ãƒ›ã‚¹ãƒˆã‚’入力ã—ã¾ã™ã€‚ホストãŒIPアドレスã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ãŸã¯å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³å(FQDN ) 。 FQDNホストåã¯ã€ã‚¯ã‚¨ãƒªã€ã™ã¹ã¦ãŒä½¿ç”¨ã•ã‚Œã¦ã„る「定期的ã«è¤‡æ•°ã®IPアドレスãŒDNSã«ã‚ˆã£ã¦è¿”ã•ã‚ŒãŸå ´åˆã€‚å†è§£æ±ºã•ã‚Œã€æ›´æ–°ã•ã‚Œã‚‹ã€ 。"
+
+#: usr/local/www/firewall_aliases_edit.php:590
+#: usr/local/www/firewall_aliases_edit.php:593
+#: usr/local/www/firewall_aliases_edit.php:624
+#: usr/local/www/firewall_aliases_edit.php:610
+msgid ""
+"The name of the alias may only consist of the characters "a-z, A-Z, 0-9 and "
+"_"."
+msgstr "AZ 〠AZ,0-9ã€ãŠã‚ˆã³"_""エイリアスã®åå‰ãŒæ–‡å­—ã®ã¿ã§æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãる〠。"
+
+#: usr/local/www/system_advanced_admin.php:470
+#: usr/local/www/system_advanced_admin.php:470
+msgid "Disable password login for Secure Shell (RSA/DSA key only)"
+msgstr "セキュアシェルã®ãƒ‘スワードログインを無効(RSA / DSAéµã®å ´åˆã®ã¿ï¼‰"
+
+#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154
+#: usr/local/www/pkg_mgr_installed.php:115
+#: usr/local/www/pkg_mgr_installed.php:115
+#: usr/local/www/widgets/widgets/system_information.widget.php:92
+#: usr/local/www/diag_confbak.php:154
+msgid "Version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
+
+#: usr/local/www/pkg_mgr_installed.php:197
+#: usr/local/www/pkg_mgr_installed.php:199
+#: usr/local/www/pkg_mgr_installed.php:199
+msgid "Click on "
+msgstr "をクリックã—ã¾ã™"
+
+#: usr/local/www/pkg_mgr_installed.php:205
+#: usr/local/www/pkg_mgr_installed.php:208
+#: usr/local/www/pkg_mgr_installed.php:210
+#: usr/local/www/pkg_mgr_installed.php:210
+msgid "Remove "
+msgstr "削除ã™ã‚‹"
+
+#: usr/local/www/pkg_mgr_installed.php:209
+#: usr/local/www/pkg_mgr_installed.php:212
+#: usr/local/www/pkg_mgr_installed.php:215
+#: usr/local/www/pkg_mgr_installed.php:214
+#: usr/local/www/pkg_mgr_installed.php:217
+#: usr/local/www/pkg_mgr_installed.php:214
+#: usr/local/www/pkg_mgr_installed.php:217
+msgid "Reinstall "
+msgstr "å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_notifications.php:262
+#: usr/local/www/system_advanced_notifications.php:262
+msgid "System Sounds"
+msgstr "システムサウンド"
+
+#: usr/local/www/system_advanced_notifications.php:265
+#: usr/local/www/system_advanced_notifications.php:265
+msgid "Startup/Shutdown Sound"
+msgstr "èµ·å‹•/åœæ­¢éŸ³"
+
+#: usr/local/www/system_advanced_notifications.php:268
+#: usr/local/www/system_advanced_notifications.php:268
+msgid "Disable the startup/shutdown beep"
+msgstr "èµ·å‹•/åœæ­¢ãƒ“ープ音を無効ã«ã™ã‚‹"
+
+#: usr/local/www/system_advanced_notifications.php:270
+#: usr/local/www/system_advanced_notifications.php:270
+msgid "When this is checked, startup and shutdown sounds will no longer play."
+msgstr "ã“れをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€èµ·å‹•ã¨ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã®éŸ³ã¯ã€ã‚‚ã¯ã‚„å†ç”Ÿã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/status_rrd_graph.php:146
+#: usr/local/www/status_rrd_graph.php:151
+#: usr/local/www/status_rrd_graph.php:151
+msgid "Invalid start date/time:"
+msgstr "無効ãªé–‹å§‹æ—¥/時間:"
+
+#: usr/local/www/status_rrd_graph.php:159
+#: usr/local/www/status_rrd_graph.php:164
+#: usr/local/www/status_rrd_graph.php:164
+msgid "Invalid end date/time:"
+msgstr "無効ãªçµ‚了日/時間:"
+
+#: usr/local/www/status_rrd_graph.php:509
+#: usr/local/www/status_rrd_graph.php:544
+#: usr/local/www/status_rrd_graph.php:544
+msgid "Enter date and/or time. Current timezone:"
+msgstr "日付ãŠã‚ˆã³/ã¾ãŸã¯æ™‚刻を入力ã—ã¾ã™ã€‚ç¾åœ¨ã®ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ï¼š"
+
+#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125
+#: usr/local/www/status_ntpd.php:131 usr/local/www/status_ntpd.php:131
+msgid "Ref ID"
+msgstr "REF ID"
+
+#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126
+#: usr/local/www/status_ntpd.php:132 usr/local/www/status_ntpd.php:132
+msgid "Stratum"
+msgstr "地層"
+
+#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128
+#: usr/local/www/status_ntpd.php:134 usr/local/www/status_ntpd.php:134
+msgid "When"
+msgstr "時"
+
+#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129
+#: usr/local/www/status_ntpd.php:135 usr/local/www/status_ntpd.php:135
+msgid "Poll"
+msgstr "世論調査"
+
+#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130
+#: usr/local/www/status_ntpd.php:136 usr/local/www/status_ntpd.php:136
+msgid "Reach"
+msgstr "リーãƒ"
+
+#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132
+#: usr/local/www/status_ntpd.php:138 usr/local/www/status_ntpd.php:138
+msgid "Offset"
+msgstr "オフセット"
+
+#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133
+#: usr/local/www/status_ntpd.php:139 usr/local/www/status_ntpd.php:139
+msgid "Jitter"
+msgstr "ジッタ"
+
+#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783
+#: usr/local/www/firewall_rules.php:784 usr/local/www/firewall_rules.php:784
+msgid "No floating rules are currently defined."
+msgstr "ã„ã„ãˆæµ®å‹•ãƒ«ãƒ¼ãƒ«ã¯ã€ç¾åœ¨å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:316
+#: usr/local/www/system_advanced_misc.php:320
+#: usr/local/www/system_advanced_misc.php:367
+#: usr/local/www/system_advanced_misc.php:367
+msgid ""
+"Successive connections will be redirected to the servers in a round-robin "
+"manner with connections from the same source being sent to the same web "
+"server. This 'sticky connection' will exist as long as there are states that "
+"refer to this connection. Once the states expire, so will the sticky "
+"connection. Further connections from that host will be redirected to the "
+"next web server in the round robin. Changing this option will restart the "
+"Load Balancing service."
+msgstr "åŒã˜Webã«é€ä¿¡ã•ã‚Œã€åŒã˜é€ä¿¡å…ƒã‹ã‚‰ã®æŽ¥ç¶šã‚’æŒã¤æ–¹æ³•ã€Œé€£ç¶šæŽ¥ç¶šã¯ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®ã‚µãƒ¼ãƒã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã€ã€Œã“ã®æŽ¥ç¶šã‚’å‚ç…§ã—ã¦ã€ã€Œã‚µãƒ¼ãƒã€‚ã“ã®ã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼æŽ¥ç¶šã¯ã€ 「é™ã‚Šã¨ã„ã†çŠ¶æ…‹ãŒã‚るよã†ã«å­˜åœ¨ã™ã‚‹ã“ã¨ã«ãªã‚‹ã€ 。状態ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãã®ã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ­ãƒ“ンã®æ¬¡ã®Webサーãƒã€æŽ¥ç¶šã€‚ãã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®ã•ã‚‰ãªã‚‹æŽ¥ç¶šã¯ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¾ã™ã€ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを変更ã™ã‚‹ã¨ã€ 「ロードãƒãƒ©ãƒ³ã‚·ãƒ³ã‚°ã‚µãƒ¼ãƒ“スをå†èµ·å‹•ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:308
+#: usr/local/www/system_advanced_misc.php:327
+#: usr/local/www/system_advanced_misc.php:331
+#: usr/local/www/system_advanced_misc.php:378
+#: usr/local/www/system_advanced_misc.php:378
+msgid ""
+"Set the source tracking timeout for sticky connections. By default this is "
+"0, so source tracking is removed as soon as the state expires. Setting this "
+"timeout higher will cause the source/destination relationship to persist for "
+"longer periods of time."
+msgstr "「スティッキー接続ã®é€ä¿¡å…ƒã®è¿½è·¡ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ã“ã‚Œã¯ã€Œ 0ãŸã‚ã€ã‚½ãƒ¼ã‚¹ã®è¿½è·¡ã¨ã™ã状態ãŒæœŸé™åˆ‡ã‚Œã«ãªã£ãŸã¨ã—ã¦é™¤åŽ»ã•ã‚Œã‚‹ã€‚ã“ã®è¨­å®šã¯ã€ã‚ˆã‚Šé•·ã„期間「タイムアウト高ãã—ã¦é€ä¿¡å…ƒ/é€ä¿¡å…ˆã®é–¢ä¿‚ãŒæŒç¶šã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:355
+#: usr/local/www/system_advanced_misc.php:359
+#: usr/local/www/system_advanced_misc.php:367
+#: usr/local/www/system_advanced_misc.php:406
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:406
+#: usr/local/www/system_advanced_misc.php:414
+msgid "Hiadaptive"
+msgstr "Hiadaptive"
+
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:356
+#: usr/local/www/system_advanced_misc.php:360
+#: usr/local/www/system_advanced_misc.php:368
+#: usr/local/www/system_advanced_misc.php:407
+#: usr/local/www/system_advanced_misc.php:415
+#: usr/local/www/system_advanced_misc.php:407
+#: usr/local/www/system_advanced_misc.php:415
+msgid "Adaptive"
+msgstr "é©å¿œåž‹"
+
+#: usr/local/www/system_advanced_misc.php:338
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:369
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:416
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:416
+msgid "Minimum"
+msgstr "最å°"
+
+#: usr/local/www/system_advanced_misc.php:339
+#: usr/local/www/system_advanced_misc.php:358
+#: usr/local/www/system_advanced_misc.php:362
+#: usr/local/www/system_advanced_misc.php:370
+#: usr/local/www/system_advanced_misc.php:409
+#: usr/local/www/system_advanced_misc.php:417
+#: usr/local/www/system_advanced_misc.php:409
+#: usr/local/www/system_advanced_misc.php:417
+msgid "Maximum"
+msgstr "最大"
+
+#: usr/local/www/system_advanced_misc.php:342
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:373
+#: usr/local/www/system_advanced_misc.php:420
+#: usr/local/www/system_advanced_misc.php:420
+msgid ""
+"The powerd utility monitors the system state and sets various power control "
+"options accordingly. It offers four modes (maximum, minimum, adaptive and "
+"hiadaptive) that can be individually selected while on AC power or "
+"batteries. The modes maximum, minimum, adaptive and hiadaptive may be "
+"abbreviated max, min, adp, hadp. Maximum mode chooses the highest "
+"performance values. Minimum mode selects the lowest performance values to "
+"get the most power savings. Adaptive mode attempts to strike a balance by "
+"degrading performance when the system appears idle and increasing it when "
+"the system is busy. It offers a good balance between a small performance "
+"loss for greatly increased power savings. Hiadaptive mode is alike adaptive "
+"mode, but tuned for systems where performance and interactivity are more "
+"importantthan power consumption. It rises frequency faster, drops slower "
+"andkeeps twice lower CPU load."
+msgstr "「パワードユーティリティã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®çŠ¶æ…‹ã‚’監視ã—ã€æ§˜ã€…ãªé›»åŠ›åˆ¶å¾¡ã«è¨­å®šã€ã¯ã€ãã‚Œã«å¿œã˜ã¦ã‚ªãƒ—ションを。ã“ã‚Œã¯ã€ãƒãƒƒãƒ†ãƒªãƒ¼ã€Œå€‹åˆ¥ã®ACé›»æºã¾ãŸã¯ã‚ªãƒ³ã—ãªãŒã‚‰ã€é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼ˆ hiadaptive 4ã¤ã®ãƒ¢ãƒ¼ãƒ‰ã€æœ€å¤§å€¤ã€æœ€å°å€¤ã€é©å¿œã¨ï¼‰ã€ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚モード最大値ã€æœ€å°å€¤ã€é©å¿œã¨hiadaptiveã¯ã€Œæœ€å¤§ã€æœ€å°ã€ ADP 〠hadpを短縮。最大モードã¯æœ€é«˜é¸ã¶ã€ã“ã¨ãŒãƒ‘フォーマンス値を。最å°ãƒ¢ãƒ¼ãƒ‰ãŒã€Œæœ€ã‚‚節電効果ãŒå¾—られã¾ã™ã€‚é©å¿œãƒ¢ãƒ¼ãƒ‰ãŒã§ãƒãƒ©ãƒ³ã‚¹ã‚’å–ã‚‹ã—よã†ã¨ã—ãŸã€ã«ã€æœ€ã‚‚低ã„パフォーマンス値をé¸æŠžã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®è¡¨ç¤ºã•ã‚ŒãŸã¨ãã«ãƒ‘フォーマンスを低下ã•ã›ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ãŒãƒ“ジー状態ã®ã¨ãã«ã€Œãã‚ŒãŒå¤§ãããªã‚‹ã€‚ã“ã‚Œã¯ã€å°ã•ãªãƒ‘フォーマンスã®é–“ã®è‰¯å¥½ãªãƒãƒ©ãƒ³ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™å¤§å¹…ã«å¢—加ã—ã€é›»åŠ›ã®ç¯€ç´„ã®ãŸã‚ã€ã®æ失。 Hiadaptiveモードをå•ã‚ãšã€é©å¿œåž‹ã€ãƒ¢ãƒ¼ãƒ‰ãŒã€ãƒ‘フォーマンスã¨ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–性をよりアールシステム用ã«èª¿æ•´ã•ã‚ŒãŸã€ã§ã‚ã‚‹importantthan消費電力。ãã‚Œã¯ã€å‘¨æ³¢æ•°é€Ÿã上昇ã—ã€é…ããªã‚‹ã€ andkeepså€ä½Žã„CPUè² è·ãŒä½Žä¸‹ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_shaper_vinterface.php:204
+#: usr/local/www/firewall_shaper_vinterface.php:228
+#: usr/local/www/firewall_shaper_vinterface.php:205
+#: usr/local/www/firewall_shaper_vinterface.php:230
+#: usr/local/www/firewall_shaper_vinterface.php:205
+#: usr/local/www/firewall_shaper_vinterface.php:230
+msgid "You cannot name a child queue with the same name as a parent limiter"
+msgstr "ã‚ãªãŸã¯ã€è¦ªãƒªãƒŸãƒƒã‚¿ã¨åŒã˜åå‰ã®å­ã‚­ãƒ¥ãƒ¼ã«åå‰ã‚’付ã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73
+#: usr/local/www/diag_routes.php:73
+msgid ""
+"By enabling name resolution, the query should take a bit longer. You can "
+"stop it at any time by clicking the Stop button in your browser."
+msgstr "åå‰è§£æ±ºã‚’å¯èƒ½ã«ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚¯ã‚¨ãƒªã¯å°‘ã—時間ãŒã‹ã‹ã‚‹ã¯ãšã§ã™ã€‚ãŠä½¿ã„ã®ãƒ–ラウザã§ã€[åœæ­¢]ボタンをクリックã™ã‚‹ã¨ã€ã„ã¤ã§ã‚‚ãれをåœæ­¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/status_dhcpv6_leases.php:481
+#: usr/local/www/status_dhcpv6_leases.php:482
+#: usr/local/www/status_dhcpv6_leases.php:485
+#: usr/local/www/status_dhcpv6_leases.php:485
+msgid "IPv6 Prefix"
+msgstr "IPv6ã®ãƒ—レフィックス"
+
+#: usr/local/www/services_captiveportal.php:465
+#: usr/local/www/services_captiveportal.php:463
+#: usr/local/www/services_captiveportal.php:481
+#: usr/local/www/services_captiveportal.php:481
+msgid ""
+"This setting limits the number of concurrent connections to the captive "
+"portal HTTP(S) server. This does not set how many users can be logged in to "
+"the captive portal, but rather how many users can load the portal page or "
+"authenticate at the same time! Possible setting allowed is: minimum 4 "
+"connections per client IP address, with a total maximum of 100 connections."
+msgstr "ãƒãƒ¼ã‚¿ãƒ«HTTP(S )サーãƒã€Œã“ã®è¨­å®šã§ã¯ã€ã‚­ãƒ£ãƒ—ティブã¸ã®åŒæ™‚接続数を制é™ã—ã¾ã™ã€ 。ã“ã‚Œã¯ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãるユーザー数ã¯è¨­å®šã—ã¾ã›ã‚“ã€ã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã®ã§ã¯ãªãã€ã©ã®ã‚ˆã†ã«å¤šãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒãƒ¼ã‚¿ãƒ«Â·ãƒšãƒ¼ã‚¸ã‚’ロードã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã€ã€ŒåŒã˜æ™‚é–“ã« ã§èªè¨¼ï¼è¨±å¯ã•ã‚ŒãŸå¯èƒ½æ€§ã®è¨­å®šã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚クライアントã®IPアドレスã”ã¨ã«æœ€å°4 "ã®æŽ¥ç¶šã€ 100接続ã®åˆè¨ˆã€æœ€å¤§ã€‚"
+
+#: usr/local/www/services_captiveportal.php:602
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal.php:601
+#: usr/local/www/services_captiveportal.php:617
+#: usr/local/www/services_captiveportal.php:617
+msgid "RADIUS Protocol"
+msgstr "åŠå¾„プロトコル"
+
+#: usr/local/www/services_captiveportal.php:611
+#: usr/local/www/services_captiveportal.php:609
+#: usr/local/www/services_captiveportal.php:610
+#: usr/local/www/services_captiveportal.php:626
+#: usr/local/www/services_captiveportal.php:626
+msgid "CHAP_MD5"
+msgstr "CHAP_MD5"
+
+#: usr/local/www/services_captiveportal.php:615
+#: usr/local/www/services_captiveportal.php:613
+#: usr/local/www/services_captiveportal.php:614
+#: usr/local/www/services_captiveportal.php:630
+#: usr/local/www/services_captiveportal.php:630
+msgid "MSCHAPv1"
+msgstr "MSCHAPv1ã®"
+
+#: usr/local/www/services_captiveportal.php:619
+#: usr/local/www/services_captiveportal.php:617
+#: usr/local/www/services_captiveportal.php:618
+#: usr/local/www/services_captiveportal.php:634
+#: usr/local/www/services_captiveportal.php:634
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2ã®"
+
+#: usr/local/www/system_gateways_edit.php:389
+#: usr/local/www/system_gateways_edit.php:495
+#: usr/local/www/system_gateways_edit.php:497
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/system_gateways_edit.php:527
+msgid "Choose the Internet Protocol this gateway uses."
+msgstr "ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ—ロトコルをé¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:490
+msgid ""
+"This defines how often that an icmp probe will be sent in seconds. Default "
+"is 1."
+msgstr "1ã§ã‚ã‚‹"ã“ã‚Œã¯ã©ã®ãらã„ã®é »åº¦ã§ã€ICMPプローブã¯æ•°ç§’ã§é€ä¿¡ã•ã‚Œã‚‹ã“ã¨ã§ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå®šç¾©ã€ 。"
+
+#: usr/local/www/system_gateways_edit.php:491
+#: usr/local/www/system_gateways_edit.php:597
+#: usr/local/www/system_gateways_edit.php:601
+#: usr/local/www/system_gateways_edit.php:603
+#: usr/local/www/system_gateways_edit.php:633
+#: usr/local/www/system_gateways_edit.php:633
+msgid ""
+"NOTE: The quality graph is averaged over seconds, not intervals, so as the "
+"frequency probe is increased the accuracy of the quality graph is decreased."
+msgstr ""注:ãªã‚‹ã‚ˆã†ã«å“質ã®ã‚°ãƒ©ãƒ•ã¯ã€ç§’ã§ã¯ãªãã€é–“éš”ã«ã‚ãŸã£ã¦å¹³å‡åŒ–ã•ã‚Œã€ã€Œé«˜å‘¨æ³¢ãƒ—ローブã€å“質グラフã®ç²¾åº¦ã‚’増加ã•ãŒæ¸›å°‘ã™ã‚‹ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:500
+msgid ""
+"This defines the number of bad probes before the alarm will fire. Default is "
+"10."
+msgstr "「アラームãŒèµ·å‹•ã•ã‚Œã‚‹å‰ã«ã€ã“ã‚Œã¯æ‚ªã„プローブã®æ•°ã‚’定義ã—ã¾ã™ã€‚デフォルト㯠"10 。"
+
+#: usr/local/www/system_gateways_edit.php:505
+msgid ""
+"NOTE: The total time before a gateway is down is the product of the "
+"Frequency Probe and the Down fields. By default this is 1*10=10 seconds."
+msgstr ""注:ゲートウェイã®å‰ã«åˆè¨ˆæ™‚é–“ãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã®ç”£ç‰©ã§ã‚る「高周波プローブã¨ä¸‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã€‚デフォルトã§ã¯ã€ 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 10 = 10秒ã§ã™ã€‚"
+
+#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108
+#: usr/local/www/status_gateways.php:134
+#: usr/local/www/widgets/widgets/gateways.widget.php:73
+#: usr/local/www/widgets/widgets/gateways.widget.php:81
+#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109
+#: usr/local/www/status_gateways.php:135
+#: usr/local/www/widgets/widgets/gateways.widget.php:94
+#: usr/local/www/widgets/widgets/gateways.widget.php:103
+#: usr/local/www/widgets/widgets/gateways.widget.php:95
+#: usr/local/www/widgets/widgets/gateways.widget.php:104
+#: usr/local/www/widgets/widgets/gateways.widget.php:95
+#: usr/local/www/widgets/widgets/gateways.widget.php:104
+#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109
+#: usr/local/www/status_gateways.php:135
+msgid "Pending"
+msgstr "ペンディング"
+
+#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141
+#: usr/local/www/status_gateways.php:141
+msgid "Last check:"
+msgstr "最後ã®ãƒã‚§ãƒƒã‚¯ï¼š"
+
+#: usr/local/www/diag_dump_states.php:145
+#: usr/local/www/diag_dump_states.php:144
+msgid "Current state count"
+msgstr "ç¾åœ¨ã®çŠ¶æ…‹ã‚«ã‚¦ãƒ³ãƒˆ"
+
+#: usr/local/www/diag_dump_states.php:147
+#: usr/local/www/diag_dump_states.php:146
+msgid "Matching filter"
+msgstr "マッãƒãƒ³ã‚°ãƒ•ã‚£ãƒ«ã‚¿"
+
+#: usr/local/www/diag_dump_states.php:155
+#: usr/local/www/diag_dump_states.php:154
+#: usr/local/www/diag_dump_states.php:143
+#: usr/local/www/diag_dump_states.php:143
+msgid "Kill"
+msgstr "殺ã™"
+
+#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:180
+#: usr/local/www/services_dyndns.php:180
+msgid ""
+"You can force an update for an IP address on the edit page for that service."
+msgstr "「ã‚ãªãŸã¯ã€ãã®ã‚µãƒ¼ãƒ“スã®ç·¨é›†ãƒšãƒ¼ã‚¸ä¸Šã®IPアドレスã®æ›´æ–°ã‚’強制ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:299
+#: usr/local/www/vpn_openvpn_server.php:300
+#: usr/local/www/vpn_openvpn_server.php:321
+#: usr/local/www/vpn_openvpn_server.php:321
+msgid ""
+"Using a tunnel network and server bridge settings together is not allowed."
+msgstr "「一緒ã«ãƒˆãƒ³ãƒãƒ«ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ã‚µãƒ¼ãƒã®ãƒ–リッジ設定を使用ã™ã‚‹ã“ã¨ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_openvpn_server.php:302
+#: usr/local/www/vpn_openvpn_server.php:303
+#: usr/local/www/vpn_openvpn_server.php:324
+#: usr/local/www/vpn_openvpn_server.php:324
+msgid "Server Bridge DHCP Start and End must both be empty, or defined."
+msgstr "サーãƒãƒ¼æ©‹DHCP開始ã¨çµ‚了ã®ä¸¡æ–¹ã®ç©ºã€ã¾ãŸã¯å®šç¾©ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:304
+#: usr/local/www/vpn_openvpn_server.php:305
+#: usr/local/www/vpn_openvpn_server.php:326
+#: usr/local/www/vpn_openvpn_server.php:326
+msgid "Server Bridge DHCP Start must be an IPv4 address."
+msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPã®é–‹å§‹ã¯ã€IPv4アドレスã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:306
+#: usr/local/www/vpn_openvpn_server.php:307
+#: usr/local/www/vpn_openvpn_server.php:328
+#: usr/local/www/vpn_openvpn_server.php:328
+msgid "Server Bridge DHCP End must be an IPv4 address."
+msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPエンドã¯ã€IPv4アドレスã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:308
+#: usr/local/www/vpn_openvpn_server.php:309
+#: usr/local/www/vpn_openvpn_server.php:330
+#: usr/local/www/vpn_openvpn_server.php:330
+msgid "The Server Bridge DHCP range is invalid (start higher than end)."
+msgstr "サーãƒãƒ¼ãƒ–リッジDHCP範囲ã¯ï¼ˆç«¯éƒ¨ã‚ˆã‚Šã‚‚高ã„開始)ã¯ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1084
+#: usr/local/www/vpn_openvpn_server.php:1112
+#: usr/local/www/vpn_openvpn_server.php:1139
+#: usr/local/www/vpn_openvpn_server.php:1139
+msgid "Bridge DHCP"
+msgstr "ブリッジDHCP"
+
+#: usr/local/www/vpn_openvpn_server.php:1094
+#: usr/local/www/vpn_openvpn_server.php:1122
+#: usr/local/www/vpn_openvpn_server.php:1149
+#: usr/local/www/vpn_openvpn_server.php:1149
+msgid "Allow clients on the bridge to obtain DHCP."
+msgstr "æ©‹ã®ä¸Šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒDHCPã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1102
+#: usr/local/www/vpn_openvpn_server.php:1130
+#: usr/local/www/vpn_openvpn_server.php:1157
+#: usr/local/www/vpn_openvpn_server.php:1157
+msgid "Bridge Interface"
+msgstr "ブリッジインターフェース"
+
+#: usr/local/www/vpn_openvpn_server.php:1124
+msgid ""
+"The interface to which this tap instance will be, bridged. This is not done "
+"automatically. You must assign this interface and create the bridge "
+"separately. This setting controls which existing IP address and subnet mask "
+"are used by OpenVPN for the bridge. Setting this to 'none' will cause the "
+"Server Bridge DHCP settings below to be ignored."
+msgstr "自動的ã«ã€Œã“ã®ã‚¿ãƒƒãƒ—インスタンスãŒå…ˆã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã€ã“ã‚Œã¯è¡Œã‚ã‚Œã¾ã›ã‚“架橋〠。ã‚ãªãŸã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’割り当ã¦ã€ 「別途既存ã®IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®è¨­å®šã‚’制御ã—「ブリッジ用ã®OpenVPNã§ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŒã€ãƒ–リッジを作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚' none'ã«ã€ã“れを設定ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã€Œã‚µãƒ¼ãƒãƒ¼Â·ãƒ–リッジDHCP設定ãŒç„¡è¦–ã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1133
+#: usr/local/www/vpn_openvpn_server.php:1161
+#: usr/local/www/vpn_openvpn_server.php:1188
+#: usr/local/www/vpn_openvpn_server.php:1188
+msgid "Server Bridge DHCP Start"
+msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCPスタート"
+
+#: usr/local/www/vpn_openvpn_server.php:1137
+msgid ""
+"When using tap mode as multi-point server, you may optionally supply a DHCP "
+"range to use on the interface to which this tap instance is bridged. If "
+"these settings are left blank, DHCP will be passed through to the LAN, and "
+"the interface setting above will be ignored."
+msgstr "ã“ã®ã‚¿ãƒƒãƒ—インスタンスãŒæž¶æ©‹ã•ã‚Œã¦ã„るよã†ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§ä½¿ç”¨ã™ã‚‹ç¯„囲「マルãƒãƒã‚¤ãƒ³ãƒˆã‚µãƒ¼ãƒãƒ¼ã¨ã—ã¦ã‚¿ãƒƒãƒ—·モードを使用ã™ã‚‹ã¨ãã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€DHCPを供給ã™ã‚‹ã“ã¨ãŒã§ãる〠。場åˆã¯"ã“れらã®è¨­å®šã¯ç©ºç™½ã®ã¾ã¾ã«ã€ DHCPãŒLANã«é€šéŽã•ã‚Œã€ 「上記ã®è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1146
+#: usr/local/www/vpn_openvpn_server.php:1174
+#: usr/local/www/vpn_openvpn_server.php:1201
+#: usr/local/www/vpn_openvpn_server.php:1201
+msgid "Server Bridge DHCP End"
+msgstr "サーãƒãƒ¼Â·ãƒ–リッジã®DHCP終了"
+
+#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216
+#: usr/local/www/services_router_advertisements.php:159
+#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201
+#: usr/local/www/services_dhcp_edit.php:230
+#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195
+#: usr/local/www/services_router_advertisements.php:154
+#: usr/local/www/services_dhcp.php:286
+#: usr/local/www/services_router_advertisements.php:154
+#: usr/local/www/services_dhcp_edit.php:230
+#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcpv6.php:195
+msgid "A valid domain search list must be specified."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcp.php:895
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcp.php:895
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as seperator "
+msgstr "「 DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚使用ã™ã‚‹ã€ SEPERATORã¨ã—ã¦ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’"
+
+#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647
+#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664
+#: usr/local/www/services_dhcp.php:950 usr/local/www/services_dhcp.php:950
+#: usr/local/www/services_dhcpv6.php:664
+msgid "Time format change"
+msgstr "時刻形å¼ã®å¤‰æ›´"
+
+#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925
+#: usr/local/www/services_dhcp.php:939 usr/local/www/services_dhcp.php:959
+#: usr/local/www/services_dhcp.php:959
+msgid "Change DHCP display lease time from UTC to local time."
+msgstr "UTCã‹ã‚‰ç¾åœ°æ™‚刻ã«ã€DHCPã®è¡¨ç¤ºãƒªãƒ¼ã‚¹æ™‚間を変更ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this \n"
+"ttttttbox DHCP lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr "「デフォルトã®DHCPã§ãƒªãƒ¼ã‚¹ã¯UTC時間ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã®\nã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã€Œ ttttttboxã®DHCPリース時間ã¯ã€é¸æŠžã—ãŸã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã€ã‚’ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•ã‚Œã€è¨­å®šã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ã™ã¹ã¦ã®DHCPインターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:92
+#: usr/local/www/load_balancer_virtual_server_edit.php:92
+msgid ""
+"The port must be an integer between 1 and 65535, a port alias, or left blank."
+msgstr "「ãƒãƒ¼ãƒˆã¯1 〜65535ã®æ•´æ•°ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ã¾ãŸã¯å·¦ç©ºç™½ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:95
+#: usr/local/www/load_balancer_virtual_server_edit.php:95
+#, php-format
+msgid "%s is not a valid IP address, IPv4 subnet, or alias."
+msgstr "%sã¯æœ‰åŠ¹ãªIPアドレス〠IPv4サブãƒãƒƒãƒˆã€ã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:97
+#: usr/local/www/load_balancer_virtual_server_edit.php:97
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses."
+msgstr "%sã¯64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:173
+#: usr/local/www/load_balancer_virtual_server_edit.php:171
+#: usr/local/www/load_balancer_virtual_server_edit.php:171
+msgid ""
+"You may also specify a host alias listed in Firewall -&gt; Aliases here."
+msgstr "ã“ã¡ã‚‰u003eエイリアス - "ã‚ãªãŸã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã«è¨˜è¼‰ã•ã‚Œã¦ã„るホストã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:187
+#: usr/local/www/load_balancer_virtual_server_edit.php:185
+#: usr/local/www/load_balancer_virtual_server_edit.php:185
+msgid "If left blank, listening ports from the pool will be used."
+msgstr "プールã‹ã‚‰ã®ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•ã‚Œã¾ã™èžã„ã¦ã€ç©ºç™½ã®ã¾ã¾ã«ã—ãŸå ´åˆã€‚"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:188
+#: usr/local/www/load_balancer_pool_edit.php:216
+#: usr/local/www/load_balancer_virtual_server_edit.php:186
+#: usr/local/www/load_balancer_pool_edit.php:214
+#: usr/local/www/load_balancer_virtual_server_edit.php:186
+#: usr/local/www/load_balancer_pool_edit.php:214
+msgid ""
+"You may also specify a port alias listed in Firewall -&gt; Aliases here."
+msgstr "ã“ã¡ã‚‰u003eエイリアス - "ã‚ãªãŸã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã‚‹ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97
+#: usr/local/www/system_hasync.php:97
+msgid "High Availability Sync"
+msgstr "高å¯ç”¨æ€§åŒæœŸ"
+
+#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92
+#: usr/local/www/services_ntpd.php:92
+msgid "NTP Server Configuration"
+msgstr "NTPサーãƒã®è¨­å®š"
+
+#: usr/local/www/interfaces_bridge_edit.php:391
+#: usr/local/www/interfaces_bridge_edit.php:392
+#: usr/local/www/interfaces_bridge_edit.php:393
+#: usr/local/www/interfaces_bridge_edit.php:396
+#: usr/local/www/interfaces_bridge_edit.php:396
+msgid ""
+"Set the Spanning Tree priority of interface to value. The default is 128. "
+"The minimum is 0 and the maximum is 240. Increments of 16."
+msgstr "「値ã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ã‚¹ãƒ‘ニングツリー優先度を設定ã—ã¾ã™ã€‚デフォルトã¯128ã§ã™ã€‚ 「最å°å€¤ã¯0ã§ã€æœ€å¤§å€¤ã¯240ã§ã™ã€‚ 16ãšã¤å¢—加。"
+
+#: usr/local/www/diag_packet_capture.php:172
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:235
+#: usr/local/www/diag_packet_capture.php:235
+msgid "Select the protocol to capture, or Any."
+msgstr "キャプãƒãƒ£ã™ã‚‹ãƒ—ロトコルã€ã¾ãŸã¯ã™ã¹ã¦ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:245
+#: usr/local/www/diag_packet_capture.php:292
+#: usr/local/www/diag_packet_capture.php:310
+#: usr/local/www/diag_packet_capture.php:310
+msgid "View Capture"
+msgstr "ビューキャプãƒãƒ£ãƒ¼"
+
+#: usr/local/www/system_camanager.php:420
+#: usr/local/www/system_camanager.php:427
+#: usr/local/www/system_camanager.php:427
+msgid "Serial for next certificate"
+msgstr "次ã®è¨¼æ˜Žæ›¸ã®ã‚·ãƒªã‚¢ãƒ«"
+
+#: usr/local/www/system_camanager.php:423
+#: usr/local/www/system_camanager.php:430
+#: usr/local/www/system_camanager.php:430
+msgid ""
+"Enter a decimal number to be used as the serial number for the next "
+"certificate to be created using this CA."
+msgstr "ã“ã®CAを使用ã—ã¦ä½œæˆã•ã‚Œã‚‹è¨¼æ˜Žæ›¸ã®ã€Œæ¬¡ã®ã‚·ãƒªã‚¢ãƒ«ç•ªå·ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹é€²æ•°ã‚’入力ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/vpn_ipsec_phase2.php:140
+#: usr/local/www/vpn_ipsec_phase2.php:141
+#: usr/local/www/vpn_ipsec_phase2.php:163
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+msgid "Invalid Local Network."
+msgstr "無効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:140
+#: usr/local/www/vpn_ipsec_phase2.php:141
+#: usr/local/www/vpn_ipsec_phase2.php:163
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+msgid "has no subnet."
+msgstr "何ã®ã‚µãƒ–ãƒãƒƒãƒˆãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_nat_edit.php:233
+#: usr/local/www/firewall_nat_edit.php:238
+#: usr/local/www/firewall_nat_edit.php:243
+#: usr/local/www/firewall_nat_edit.php:243
+#, php-format
+msgid ""
+"A valid local port must be specified. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¾ãŸã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ "1 〜65535ã®é–“。"
+
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_edit.php:787
+#: usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_edit.php:800
+#: usr/local/www/firewall_nat_edit.php:800
+msgid "Use system default"
+msgstr "システムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’使用ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460
+#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:453
+#: usr/local/www/interfaces.php:449 usr/local/www/interfaces.php:449
+msgid ""
+"This interface is referenced by IPv4 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr "「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€IPv4ã®VIPã‹ã‚‰å‚ç…§ã•ã‚Œã¦ã„る。å‰ã«ã€ã“れらを削除ã—ã¦ãã ã•ã„"'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’設定ã™ã‚‹ã€‚"
+
+#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513
+#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:502 usr/local/www/interfaces.php:502
+msgid ""
+"This interface is referenced by IPv6 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr "「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€IPv6ã®VIPã‹ã‚‰å‚ç…§ã•ã‚Œã¦ã„る。å‰ã«ã€ã“れらを削除ã—ã¦ãã ã•ã„"'none'ã«è¨­å®šã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’設定ã™ã‚‹ã€‚"
+
+#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523
+#: usr/local/www/interfaces.php:511
+#, php-format
+msgid "You can only have one interface configured as %s or 6to4."
+msgstr "ã‚ãªãŸã ã‘ã®1インタフェースãŒ%sã‚„6to4ã®ã‚ˆã†ã«æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533
+#: usr/local/www/interfaces.php:521
+#, php-format
+msgid "You can only have one interface configured as %s or 6rd."
+msgstr "ã‚ãªãŸã ã‘ã®1インタフェースãŒ%sã¾ãŸã¯6RDã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546
+#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:541
+#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:537
+msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID."
+msgstr "ã‚ãªãŸã¯ã€ IPv6プレフィックスIDã«å¯¾ã—ã¦æœ‰åŠ¹ãª16進数を入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550
+#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:545
+#: usr/local/www/interfaces.php:541 usr/local/www/interfaces.php:541
+msgid "You specified an IPv6 prefix ID that is out of range."
+msgstr "ã‚ãªãŸãŒç¯„囲外ã§ã™IPv6プレフィックスIDを指定。"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158
+msgid "SLAAC"
+msgstr "SLAAC"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158
+msgid "6rd Tunnel"
+msgstr "6RDトンãƒãƒ«"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158
+msgid "6to4 Tunnel"
+msgstr "ã®6to4トンãƒãƒ«"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1158
+msgid "Track Interface"
+msgstr "トラックインターフェイス"
+
+#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399
+#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1455
+#: usr/local/www/interfaces.php:1450 usr/local/www/interfaces.php:1450
+msgid ""
+"If you leave this field blank, the adapter's default MTU will be used. This "
+"is typically 1500 bytes but can vary in some circumstances."
+msgstr "「ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€ã‚¢ãƒ€ãƒ—ã‚¿ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®MTUãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ã€Œé€šå¸¸ã€ 1500ãƒã‚¤ãƒˆã§ã™ãŒã€ã„ãã¤ã‹ã®çŠ¶æ³ã§å¤‰åŒ–ã™ã‚‹ã“ã¨ãŒã§ãる。"
+
+#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756
+#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1820
+#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1812
+msgid "6RD Configuration"
+msgstr "6RDã®Rapid Deployment"
+
+#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759
+#: usr/local/www/interfaces.php:1777 usr/local/www/interfaces.php:1823
+#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1815
+msgid "6RD prefix"
+msgstr "6RDプレフィックス"
+
+#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763
+#: usr/local/www/interfaces.php:1781 usr/local/www/interfaces.php:1827
+#: usr/local/www/interfaces.php:1819 usr/local/www/interfaces.php:1819
+msgid ""
+"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. "
+"'2001:db8::/32'"
+msgstr ""ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€ ISPã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ6RD IPv6プレフィックスã§ã‚ã‚‹ãªã©ã€‚ 「'2001 : DB8:: / 32 ã€"
+
+#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767
+#: usr/local/www/interfaces.php:1785 usr/local/www/interfaces.php:1831
+#: usr/local/www/interfaces.php:1823 usr/local/www/interfaces.php:1823
+msgid "6RD Border Relay"
+msgstr "6RDボーダーリレー"
+
+#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771
+#: usr/local/www/interfaces.php:1789 usr/local/www/interfaces.php:1835
+#: usr/local/www/interfaces.php:1827 usr/local/www/interfaces.php:1827
+msgid ""
+"The value in this field is 6RD IPv4 gateway address assigned by your ISP"
+msgstr ""ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€ ISPã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ6RD IPv4ゲートウェイアドレスã§ã™"
+
+#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775
+#: usr/local/www/interfaces.php:1793 usr/local/www/interfaces.php:1839
+#: usr/local/www/interfaces.php:1831 usr/local/www/interfaces.php:1831
+msgid "6RD IPv4 Prefix length"
+msgstr "6RD IPv4ã®ãƒ—レフィックス長"
+
+#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787
+#: usr/local/www/interfaces.php:1805 usr/local/www/interfaces.php:1851
+#: usr/local/www/interfaces.php:1843 usr/local/www/interfaces.php:1843
+msgid ""
+"The value in this field is the 6RD IPv4 prefix length. Normally specified by "
+"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD "
+"prefix."
+msgstr ""ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯6RDã®IPv4プレフィックス長ã§ã‚る。通常ã§æŒ‡å®šã•ã‚ŒãŸã€ŒISP 。 0ã®å€¤ã¯ã€æˆ‘々ãŒ6RD "接頭全体ã®IPv4アドレスを埋ã‚込むã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797
+#: usr/local/www/interfaces.php:1818 usr/local/www/interfaces.php:1864
+#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1856
+msgid "Track IPv6 Interface"
+msgstr "トラックIPv6インタフェース"
+
+#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800
+#: usr/local/www/interfaces.php:1821 usr/local/www/interfaces.php:1867
+#: usr/local/www/interfaces.php:1859 usr/local/www/interfaces.php:1859
+msgid "IPv6 Interface"
+msgstr "IPv6インタフェース"
+
+#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826
+#: usr/local/www/interfaces.php:1847 usr/local/www/interfaces.php:1893
+#: usr/local/www/interfaces.php:1885 usr/local/www/interfaces.php:1885
+msgid "This selects the dynamic IPv6 WAN interface to track for configuration"
+msgstr "ã“ã‚Œã¯ã€æ§‹æˆã®ãŸã‚ã«è¿½è·¡ã™ã‚‹ãŸã‚ã«ã€å‹•çš„ãªIPv6ã®WANインターフェイスをé¸æŠžã—ã€"
+
+#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830
+#: usr/local/www/interfaces.php:1851 usr/local/www/interfaces.php:1897
+#: usr/local/www/interfaces.php:1889 usr/local/www/interfaces.php:1889
+msgid "IPv6 Prefix ID"
+msgstr "IPv6ã®ãƒ—レフィックス番å·"
+
+#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841
+#: usr/local/www/interfaces.php:1862 usr/local/www/interfaces.php:1908
+#: usr/local/www/interfaces.php:1898 usr/local/www/interfaces.php:1898
+msgid ""
+"The value in this field is the (Delegated) IPv6 prefix ID. This determines "
+"the configurable network ID based on the dynamic IPv6 connection"
+msgstr ""ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å€¤ã¯ã€ (委任) IPv6プレフィックスIDã§ã™ã€‚ã“ã‚ŒãŒæ±ºå®šã€Œå‹•çš„ãªIPv6接続ã«åŸºã¥ã„ã¦æ§‹æˆå¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IDã‚’"
+
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843
+#: usr/local/www/interfaces.php:1864 usr/local/www/interfaces.php:1910
+#, php-format
+msgid ""
+"Enter a <b>hexadecimal</b> value between %x and %x here, or leave blank."
+msgstr ""ï¼… xã¨ï¼… Xã“ã“é–“u003cBu003e進u003c / bu003eã®å€¤ã‚’入力ã™ã‚‹ã‹ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344
+#: usr/local/www/interfaces.php:2374 usr/local/www/interfaces.php:2420
+#: usr/local/www/interfaces.php:2409 usr/local/www/interfaces.php:2409
+msgid ""
+"Note: Only required in Access Point mode. If left blank in Ad-hoc or "
+"Infrastructure mode, this interface will connect to any available SSID"
+msgstr "「注:専用アクセスãƒã‚¤ãƒ³ãƒˆãƒ¢ãƒ¼ãƒ‰ã§å¿…è¦ã¨ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã¾ãŸã¯ã«ç©ºç™½ã®ã¾ã¾ã«ã—ãŸå ´åˆã€ã€Œã‚¤ãƒ³ãƒ•ãƒ©ã‚¹ãƒˆãƒ©ã‚¯ãƒãƒ£ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒåˆ©ç”¨å¯èƒ½ãªä»»æ„ã®SSIDã«æŽ¥ç¶šã—ã¾ã™"
+
+#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564
+#: usr/local/www/interfaces.php:2594 usr/local/www/interfaces.php:2640
+#: usr/local/www/interfaces.php:2629 usr/local/www/interfaces.php:2629
+msgid "Secondary 802.1X Authentication Server IP Address"
+msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®IPアドレス"
+
+#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571
+#: usr/local/www/interfaces.php:2601 usr/local/www/interfaces.php:2647
+#: usr/local/www/interfaces.php:2636 usr/local/www/interfaces.php:2636
+msgid "Secondary 802.1X Authentication Server Port"
+msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578
+#: usr/local/www/interfaces.php:2608 usr/local/www/interfaces.php:2654
+#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2643
+msgid "Secondary 802.1X Authentication Server Shared Secret"
+msgstr "二次802.1Xèªè¨¼ã‚µãƒ¼ãƒãƒ¼å…±æœ‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ"
+
+#: usr/local/www/vpn_openvpn_client.php:196
+#: usr/local/www/vpn_openvpn_client.php:202
+#: usr/local/www/vpn_openvpn_client.php:220
+#: usr/local/www/vpn_openvpn_client.php:220
+msgid "The bandwidth limit must be a positive numeric value."
+msgstr "帯域幅ã®åˆ¶é™ã¯ã€æ­£ã®æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:89
+#: usr/local/www/load_balancer_pool_edit.php:89
+msgid "The port must be an integer between 1 and 65535, or a port alias."
+msgstr "ãƒãƒ¼ãƒˆã¯1 〜65535ã®æ•´æ•°ã€ã¾ãŸã¯ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:98
+#: usr/local/www/load_balancer_pool_edit.php:98
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in "enabled" list)."
+msgstr "%sã¯ï¼ˆ 「有効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åŠ¹ãªIPアドレスã¾ãŸã¯IPv4サブãƒãƒƒãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:101
+#: usr/local/www/load_balancer_pool_edit.php:101
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in "enabled" list)."
+msgstr ""(許å¯ã€ãƒªã‚¹ãƒˆ%sã¯ä¸­ï¼‰ 64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã‚る〠。"
+
+#: usr/local/www/load_balancer_pool_edit.php:108
+#: usr/local/www/load_balancer_pool_edit.php:108
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in "disabled" list)."
+msgstr "%sã¯ï¼ˆ 「無効ã€ãƒªã‚¹ãƒˆä¸­ã®ï¼‰æœ‰åŠ¹ãªIPアドレスã¾ãŸã¯IPv4サブãƒãƒƒãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/load_balancer_pool_edit.php:111
+#: usr/local/www/load_balancer_pool_edit.php:111
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in "disabled" list)."
+msgstr ""(ç¦æ­¢ã€ãƒªã‚¹ãƒˆ%sã¯ä¸­ï¼‰ 64以上ã®IPアドレスをå«ã‚€ã‚µãƒ–ãƒãƒƒãƒˆã§ã‚る〠。"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:153
+#: usr/local/www/firewall_virtual_ip_edit.php:152
+#: usr/local/www/firewall_virtual_ip_edit.php:144
+#: usr/local/www/firewall_virtual_ip_edit.php:160
+#: usr/local/www/firewall_virtual_ip_edit.php:160
+#, php-format
+msgid ""
+"VHID %s is already in use on interface %s. Pick a unique number on this "
+"interface."
+msgstr "インターフェース「 VHIDã®%sãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§ã™ã§ã«ä½¿ç”¨ä¸­ã¯ã€ã“ã®ä¸Šã§ä¸€æ„ã®ç•ªå·ã‚’é¸ã‚“ã§%s. 〠。"
+
+#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392
+#: usr/local/www/services_snmp.php:407 usr/local/www/services_snmp.php:407
+msgid "Interface Binding"
+msgstr "インターフェイスã®ãƒã‚¤ãƒ³ãƒ‰"
+
+#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397
+#: usr/local/www/services_snmp.php:412 usr/local/www/services_snmp.php:412
+msgid "Bind Interface"
+msgstr "ãƒã‚¤ãƒ³ãƒ‰ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:36
+#: usr/local/www/widgets/widgets/smart_status.widget.php:37
+#: usr/local/www/widgets/widgets/smart_status.widget.php:37
+msgid "Drive"
+msgstr "ドライブ"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:37
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+msgid "Ident"
+msgstr "IDENT"
+
+#: usr/local/www/system.php:418 usr/local/www/system.php:411
+#: usr/local/www/system.php:409 usr/local/www/system.php:409
+msgid "Language"
+msgstr "言語"
+
+#: usr/local/www/system.php:431 usr/local/www/system.php:424
+#: usr/local/www/system.php:422 usr/local/www/system.php:422
+msgid "Choose a language for the webConfigurator"
+msgstr "webConfiguratorã®è¨€èªžã‚’é¸æŠž"
+
+#: usr/local/www/firewall_virtual_ip.php:118
+#: usr/local/www/firewall_virtual_ip.php:115
+#: usr/local/www/firewall_virtual_ip.php:127
+#: usr/local/www/firewall_virtual_ip.php:150
+#: usr/local/www/firewall_virtual_ip.php:150
+msgid ""
+"This entry cannot be deleted because it is still referenced by a CARP IP "
+"with the description"
+msgstr "説明ã«ã€Œãã‚Œã¯ã¾ã CARP IPã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã€"
+
+#: usr/local/www/firewall_virtual_ip.php:124
+#: usr/local/www/firewall_virtual_ip.php:121
+#: usr/local/www/firewall_virtual_ip.php:132
+#: usr/local/www/firewall_virtual_ip.php:155
+#: usr/local/www/firewall_virtual_ip.php:155
+msgid ""
+"This entry cannot be deleted because it is still referenced by an IP alias "
+"entry with the description"
+msgstr "記述ã®ã‚¨ãƒ³ãƒˆãƒªã€Œãã‚Œã¯ã¾ã IPエイリアスã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã€"
+
+#: usr/local/www/services_dhcpv6.php:531
+#: usr/local/www/services_router_advertisements.php:277
+#: usr/local/www/services_router_advertisements.php:272
+#: usr/local/www/services_router_advertisements.php:272
+#, php-format
+msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon."
+msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®å‹•ä½œãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:532
+#: usr/local/www/services_router_advertisements.php:278
+#: usr/local/www/services_router_advertisements.php:273
+#: usr/local/www/services_router_advertisements.php:273
+#, php-format
+msgid ""
+"Use "Router Only" to only advertise this router, "Unmanaged" for Router "
+"Advertising with Stateless Autoconfig, "Managed" for assignment through "
+"(a) DHCPv6 Server, "Assisted" for DHCPv6 Server assignment combined with "
+"Stateless Autoconfig"
+msgstr "を通ã˜ã¦å‰²ã‚Šå½“ã¦ã«ã€Œç®¡ç†ã€ ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è‡ªå‹•è¨­å®šã¨åºƒå‘Šã€Œãƒ«ãƒ¼ã‚¿ã®ãŸã‚ã«ã€ 〠ã€å®£ä¼ã ã‘ã«ã€ã“ã®ãƒ«ãƒ¼ã‚¿ã‚’「ステートレス自動設定ã€ã¨çµ„ã¿åˆã‚ã›ãŸDHCPv6サーãƒã®å‰²ã‚Šå½“ã¦ã®ãŸã‚ã®ã€Œæ”¯æ´ã€ ( A ) DHCPv6サーãƒã‚’〠「管ç†å¯¾è±¡å¤–ã®ãƒ«ãƒ¼ã‚¿"を使用ã€"
+
+#: usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_router_advertisements.php:279
+#: usr/local/www/services_router_advertisements.php:274
+#: usr/local/www/services_router_advertisements.php:274
+#, php-format
+msgid ""
+"It is not required to activate this DHCPv6 server when set to "Managed", "
+"this can be another host on the network"
+msgstr "マãƒãƒ¼ã‚¸ãƒ‰ã€ã«è¨­å®šã™ã‚‹ã¨ã€ã“ã®DHCPv6サーãƒã‚’活性化ã™ã‚‹ãŸã‚ã«å¿…è¦ã¨ã•ã‚Œã¦ã„ãªã„""〠"ã“ã‚Œã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®åˆ¥ã®ãƒ›ã‚¹ãƒˆã«ãªã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/services_dhcpv6.php:537
+#: usr/local/www/services_router_advertisements.php:283
+#: usr/local/www/services_router_advertisements.php:278
+#: usr/local/www/services_router_advertisements.php:278
+msgid "Router Priority"
+msgstr "ルータプライオリティ"
+
+#: usr/local/www/services_dhcpv6.php:544
+#: usr/local/www/services_router_advertisements.php:290
+#: usr/local/www/services_router_advertisements.php:285
+#: usr/local/www/services_router_advertisements.php:285
+#, php-format
+msgid "Select the Priority for the Router Advertisement (RA) Daemon."
+msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®å„ªå…ˆåº¦ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:558
+#: usr/local/www/services_router_advertisements.php:304
+#: usr/local/www/services_router_advertisements.php:299
+#: usr/local/www/services_router_advertisements.php:299
+msgid "RA Interface"
+msgstr "RAインタフェース"
+
+#: usr/local/www/services_dhcpv6.php:566
+#: usr/local/www/services_router_advertisements.php:312
+#: usr/local/www/services_router_advertisements.php:307
+#: usr/local/www/services_router_advertisements.php:307
+#, php-format
+msgid "Select the Interface for the Router Advertisement (RA) Daemon."
+msgstr "ルーター通知(RA )デーモンã®ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584
+msgid "prefix delegation size"
+msgstr "接頭語委譲サイズ"
+
+#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593
+#: usr/local/www/services_dhcpv6.php:610 usr/local/www/services_dhcpv6.php:610
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows "
+"for \n"
+"tttttassigning networks to subrouters. The start and end of the range "
+"must end on boundaries of the prefix delegation size."
+msgstr "\nã¯ã€ã€Œã‚ãªãŸã¯ã€DHCPプレフィックス委任ã®ãŸã‚ã«ã“ã“プレフィックス範囲を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã‚ŒãŒã§ãる「 〠subroutersã«tttttassigningãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€‚範囲​​ã®å§‹ã‚ã¨çµ‚ã‚ã‚Šã¯ã€Œãƒ—レフィックス委任サイズã®å¢ƒç•Œã§çµ‚ã‚ã£ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616
+#: usr/local/www/services_dhcpv6.php:633 usr/local/www/services_dhcpv6.php:633
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as seperator"
+msgstr "「 DHCPサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚使用ã™ã‚‹ã€ SEPERATORã¨ã—ã¦ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’"
+
+#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656
+#: usr/local/www/services_dhcpv6.php:673 usr/local/www/services_dhcpv6.php:673
+msgid "Change DHCPv6 display lease time from UTC to local time."
+msgstr "UTCã‹ã‚‰ç¾åœ°æ™‚刻ã«DHCPv6ã®è¡¨ç¤ºãƒªãƒ¼ã‚¹æ™‚間を変更ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663
+#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:680
+msgid ""
+"By default DHCPv6 leases are displayed in UTC time. By checking this \n"
+"ttttttbox DHCPv6 lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCPv6 interfaces lease time."
+msgstr "「デフォルトã§ã®DHCPv6リースã¯UTC時間ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã®\nã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã€Œ ttttttboxã®DHCPv6ã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•ã‚Œã€é¸æŠžã•ã‚ŒãŸ "タイムゾーンã«è¨­å®šã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ã™ã¹ã¦ã®DHCPv6インターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:64
+msgid "WebCfg - Diagnostics: Sockets page"
+msgstr "WebCfg - 診断:ソケットページ"
+
+#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:65
+msgid "Allow access to the 'Diagnostics: Sockets' page."
+msgstr "ページ:'ソケットã®è¨ºæ–­ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/config.console.inc:263 etc/inc/config.console.inc:263
+#, php-format
+msgid ""
+"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or "
+"nothing if finished):%s"
+msgstr "「 (何も終ã‚ã£ã¦ã„ã‚‹å ´åˆã‚ªãƒ—ション%sインターフェイスåã¾ãŸã¯''自動detection%sã¾ãŸã¯ï¼‰ %sEnter ": %s"
+
+#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 etc/inc/shaper.inc:2915
+#: etc/inc/shaper.inc:2983 etc/inc/shaper.inc:3041
+#, php-format
+msgid "Bandwidth for schedule %s must be an integer."
+msgstr "スケジュール%sã®ãŸã‚ã®å¸¯åŸŸå¹…ã¯ã€æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 etc/inc/shaper.inc:2921
+#: etc/inc/shaper.inc:2989 etc/inc/shaper.inc:3047
+msgid "You need to specify a schedule for every additional entry"
+msgstr "ã‚ãªãŸã¯ã™ã¹ã¦ã®è¿½åŠ ã®ã‚¨ãƒ³ãƒˆãƒªã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 etc/inc/shaper.inc:2923
+#: etc/inc/shaper.inc:2991 etc/inc/shaper.inc:3049
+msgid "If more than one bandwidth configured all schedules need to be selected"
+msgstr "複数ã®å¸¯åŸŸå¹…ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ã™ã¹ã¦ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒ"
+
+#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 etc/inc/shaper.inc:2925
+#: etc/inc/shaper.inc:2993 etc/inc/shaper.inc:3051
+msgid "At least one bw specification is necessary"
+msgstr "å°‘ãªãã¨ã‚‚一ã¤ã®ä½“é‡ä»•æ§˜ãŒå¿…è¦ã§ã‚ã‚‹"
+
+#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 etc/inc/shaper.inc:3208
+#: etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3332
+msgid "add another schedule"
+msgstr "ä»–ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加"
+
+#: etc/inc/functions.inc:94 etc/inc/functions.inc:94
+msgid "Acknowledge All Notices"
+msgstr "ã™ã¹ã¦ã®é€šçŸ¥ã‚’èªã‚ã‚‹"
+
+#: etc/inc/functions.inc:95 etc/inc/functions.inc:95
+msgid "Click to Acknowledge"
+msgstr "確èªã™ã‚‹]をクリックã—ã¾ã™"
+
+#: etc/inc/functions.inc:113 etc/inc/functions.inc:113
+msgid "unread notice"
+msgstr "未読ã®é€šçŸ¥"
+
+#: etc/inc/functions.inc:115 etc/inc/functions.inc:115
+msgid "unread notices"
+msgstr "未読ã®é€šçŸ¥"
+
+#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233
+#: etc/inc/service-utils.inc:250 etc/inc/service-utils.inc:250
+msgid "Router Advertisement Daemon"
+msgstr "ルータ通知デーモン"
+
+#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312
+#: etc/inc/service-utils.inc:329 etc/inc/service-utils.inc:329
+msgid "RIP Daemon"
+msgstr "RIPデーモン"
+
+#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422
+#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421
+#: etc/inc/service-utils.inc:429 etc/inc/service-utils.inc:439
+#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442
+#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442
+#, php-format
+msgid "%s Service is"
+msgstr "%sサービスã§ã™"
+
+#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446
+#: etc/inc/service-utils.inc:464 etc/inc/service-utils.inc:467
+#: etc/inc/service-utils.inc:467
+#, php-format
+msgid "Restart %sService"
+msgstr "リスタート%sService"
+
+#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457
+#: etc/inc/service-utils.inc:475 etc/inc/service-utils.inc:478
+#: etc/inc/service-utils.inc:478
+#, php-format
+msgid "Stop %sService"
+msgstr "ストップ%sService"
+
+#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470
+#: etc/inc/service-utils.inc:491 etc/inc/service-utils.inc:494
+#: etc/inc/service-utils.inc:494
+#, php-format
+msgid "Start %sService"
+msgstr "%sServiceを開始"
+
+#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 etc/inc/filter.inc:3103
+#: etc/inc/filter.inc:3108 etc/inc/filter.inc:3103
+msgid "Removed 15 minute filter reload for Time Based Rules"
+msgstr "時間ベースã®ãƒ«ãƒ¼ãƒ«ã®ãŸã‚ã«å–り外ã•15分ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãƒªãƒ­ãƒ¼ãƒ‰"
+
+#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:196
+#: usr/local/www/pkg_mgr.php:212
+msgid "Click on package name to access its website."
+msgstr "åŒç¤¾ã®ã‚¦ã‚§ãƒ–サイトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒ‘ッケージåをクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_logs_settings.php:276
+#: usr/local/www/diag_logs_settings.php:276
+msgid "Show the applied rule description below or in the firewall log rows."
+msgstr "ファイアウォールã®ãƒ­ã‚°ã®è¡Œã®ä¸‹ã¾ãŸã¯ä¸­ã®é©ç”¨ãƒ«ãƒ¼ãƒ«ã®èª¬æ˜Žã‚’表示ã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_logs_settings.php:278
+#: usr/local/www/diag_logs_settings.php:278
+msgid ""
+"Displaying rule descriptions for all lines in the log might affect "
+"performance with large rulessets."
+msgstr "大rulessetsã«ã‚ˆã‚‹ãƒ‘フォーマンスã®ã€Œãƒ­ã‚°å†…ã®ã™ã¹ã¦ã®è¡Œã®ãƒ«ãƒ¼ãƒ«ã®èª¬æ˜Žã‚’表示ã™ã‚‹ã¨ã€å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144
+#: usr/local/www/fbegin.inc:144
+msgid "DHCPv6 Server/RA"
+msgstr "DHCPv6サーãƒ/ RA"
+
+#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44
+#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:224
+#: usr/local/www/diag_sockets.php:44
+msgid "Sockets"
+msgstr "ソケット"
+
+#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411
+#: usr/local/www/fbegin.inc:411
+msgid "Help for items on this page"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ãƒ˜ãƒ«ãƒ—"
+
+#: usr/local/www/system_groupmanager.php:472
+#: usr/local/www/system_groupmanager.php:422
+#: usr/local/www/system_groupmanager.php:422
+msgid ""
+"Additional webConfigurator groups can be added here. \n"
+"tttttttttGroup permissions can be assigned which are inherited by "
+"users who are members of the group.\n"
+"tttttttttAn icon that appears grey indicates that it is a system "
+"defined object.\n"
+"tttttttttSome system object properties can be modified but they "
+"cannot be deleted."
+msgstr "「追加webConfiguratorグループã¯ã€ã“ã“ã§è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 〠tttttttttGroup許å¯ãŒç°è‰²ã€ãã‚ŒãŒã‚·ã‚¹ãƒ†ãƒ ã€ã«å®šç¾©ã•ã‚ŒãŸã‚ªãƒ–ジェクトã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦è¡¨ç¤ºã•ã‚ŒtttttttttAnアイコン〠group.\nã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚るユーザーã€ã«ç¶™æ‰¿ã•ã‚Œã¦å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ \n 「 tttttttttSomeシステムオブジェクトã®ãƒ—ロパティを変更ã§ãã¾ã™ãŒã€ãれらã¯ã€Œå‰Šé™¤ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+msgid "or"
+msgstr "ã¾ãŸã¯"
+
+#: usr/local/www/services_dhcpv6_edit.php:204
+#: usr/local/www/services_dhcpv6_edit.php:207
+#: usr/local/www/services_dhcpv6_edit.php:207
+msgid "If an IPv6 address is entered, the address must be outside of the pool."
+msgstr "IPv6アドレスを入力ã™ã‚‹ã¨ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ãƒ—ールã®å¤–ã«ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚"
+
+#: usr/local/www/services_dhcpv6_edit.php:206
+#: usr/local/www/services_dhcpv6_edit.php:209
+#: usr/local/www/services_dhcpv6_edit.php:209
+msgid ""
+"If no IPv6 address is given, one will be dynamically allocated from the pool."
+msgstr "ãªã„IPv6アドレスãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_router_advertisements.php:118
+#: usr/local/www/services_router_advertisements.php:117
+#: usr/local/www/services_router_advertisements.php:117
+msgid ""
+"Subnets are specified in CIDR format. Select the CIDR mask that pertains to "
+"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 "
+"network; etc. If no subnets are specified here, the Router Advertisement "
+"(RA) Daemon will advertise to the subnet to which the router's interface is "
+"assigned."
+msgstr "「サブãƒãƒƒãƒˆã¯CIDRå½¢å¼ã§æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ã«é–¢é€£ã™ã‚‹CIDRマスクã®é¸æŠžã€ã®å„項目を。 / 128ã¯ã€å˜ä¸€ã®IPv6ホストを指定ã—〠/ 64ã¯ã€é€šå¸¸ã®IPv6を指定ã™ã‚‹ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯;ãªã©ãªãサブãƒãƒƒãƒˆãŒã€ã“ã“ã§æŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ãƒ«ãƒ¼ã‚¿ãƒ¼åºƒå‘Šã€ ( RA )デーモンã¯ãƒ«ãƒ¼ã‚¿ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒ"割り当ã¦ã‚‰ã‚Œã¦ã„るサブãƒãƒƒãƒˆã«ã‚¢ãƒ‰ãƒã‚¿ã‚¤ã‚ºã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_router_advertisements.php:149
+#: usr/local/www/services_router_advertisements.php:144
+#: usr/local/www/services_router_advertisements.php:144
+#, php-format
+msgid "An invalid subnet or alias was specified. [%s/%s]"
+msgstr "無効ãªã‚µãƒ–ãƒãƒƒãƒˆã¾ãŸã¯åˆ¥åãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸã€‚ ( ( %s / %s ) )"
+
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_router_advertisements.php:189
+#: usr/local/www/services_router_advertisements.php:189
+msgid "Router advertisements"
+msgstr "ルータ通知"
+
+#: usr/local/www/services_router_advertisements.php:318
+#: usr/local/www/services_router_advertisements.php:313
+#: usr/local/www/services_router_advertisements.php:313
+msgid "RA Subnet(s)"
+msgstr "RAã®ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆ S )"
+
+#: usr/local/www/services_router_advertisements.php:384
+#: usr/local/www/services_router_advertisements.php:379
+#: usr/local/www/services_router_advertisements.php:379
+msgid ""
+"The RA server can optionally provide a domain search list. Use the semicolon "
+"character as seperator"
+msgstr "「 RAサーãƒã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‰ãƒ¡ã‚¤ãƒ³æ¤œç´¢ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚セミコロンã®ä½¿ç”¨ã€ SEPERATORãªã©ã®æ–‡å­—ã‚’"
+
+#: usr/local/www/services_router_advertisements.php:392
+#: usr/local/www/services_router_advertisements.php:387
+#: usr/local/www/services_router_advertisements.php:387
+msgid "Use same settings as DHCPv6 server"
+msgstr "DHCPv6サーãƒã¨åŒã˜è¨­å®šã‚’使用ã™ã‚‹"
+
+#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94
+#: usr/local/www/vpn_ipsec_phase2.php:475
+#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148
+#: usr/local/www/vpn_ipsec_phase1.php:519
+#: usr/local/www/vpn_ipsec_phase2.php:497 usr/local/www/vpn_ipsec.php:148
+#: usr/local/www/vpn_ipsec_phase1.php:519 usr/local/www/vpn_ipsec_keys.php:94
+#: usr/local/www/vpn_ipsec_phase2.php:497
+msgid "Pre-Shared Keys"
+msgstr "事å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/system_usermanager_settings_test.php:78
+#: usr/local/www/system_usermanager_settings_test.php:78
+#, php-format
+msgid "Testing %s LDAP settings... One moment please..."
+msgstr "テストã§ã¯ã€ LDAP設定を%s...ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„..."
+
+#: usr/local/www/vpn_ipsec_mobile.php:149
+#: usr/local/www/vpn_ipsec_mobile.php:149
+msgid "A valid split DNS domain list must be specified."
+msgstr "有効ãªã‚¹ãƒ—リットDNSドメインリストを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:505
+#: usr/local/www/vpn_ipsec_mobile.php:505
+msgid "Split DNS"
+msgstr "スプリットDNS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:514
+#: usr/local/www/vpn_ipsec_mobile.php:514
+msgid ""
+"Provide a list of split DNS domain names to clients. Enter a comma separated "
+"list."
+msgstr "「クライアントã¸ã®ã‚¹ãƒ—リットDNSドメインåã®ãƒªã‚¹ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚コンマã§åŒºåˆ‡ã£å…¥åŠ›ã€ãƒªã‚¹ãƒˆã€‚"
+
+#: usr/local/www/vpn_ipsec_mobile.php:515
+#: usr/local/www/vpn_ipsec_mobile.php:515
+msgid ""
+"NOTE: If left blank, and a default domain is set, it will be used for this "
+"value."
+msgstr ""注:空白ã®ã¾ã¾ã«ã—ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ‰ãƒ¡ã‚¤ãƒ³ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãã‚Œã¯ã“ã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹"値。"
+
+#: usr/local/www/firewall_shaper.php:131
+#: usr/local/www/firewall_shaper_vinterface.php:146
+#: usr/local/www/firewall_shaper.php:131
+#: usr/local/www/firewall_shaper_vinterface.php:146
+msgid "Unable to write config.xml (Access Denied?)"
+msgstr "config.xmlã®ã‚’書ã込むã“ã¨ãŒã§ãã¾ã›ã‚“(アクセスãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸï¼Ÿï¼‰"
+
+#: usr/local/www/firewall_rules_edit.php:455
+#: usr/local/www/firewall_rules_edit.php:458
+#: usr/local/www/firewall_rules_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:464
+msgid ""
+"Please select a gateway, normaly the interface selected gateway, so the "
+"limiters work correctly"
+msgstr "「ゲートウェイã€æ™®é€šã¯ä»¥ä¸‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹é¸æŠžã•ã‚ŒãŸã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚’é¸æŠžã—ã¦ã€ãã®ã‚ˆã†ã«ã—ã¦ãã ã•ã„ã€ãƒªãƒŸãƒƒã‚¿ãƒ¼ãŒæ­£å¸¸ã«å‹•ä½œ"
+
+#: usr/local/www/vpn_ipsec_keys.php:136 usr/local/www/vpn_ipsec_keys.php:136
+msgid "Do you really want to delete this Pre-Shared Key?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã€ã“ã®äº‹å‰å…±æœ‰ã‚­ãƒ¼ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83
+msgid "A valid domain must be specified after _msdcs."
+msgstr "有効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã¯_msdcsã®å¾Œã«æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93
+msgid "An interface IP address must be specified for the DNS query source."
+msgstr "インターフェイスã®IPアドレスã¯ã€ DNSクエリã®ã‚½ãƒ¼ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144
+msgid "Source IP"
+msgstr "é€ä¿¡å…ƒIP"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147
+msgid ""
+"Source IP address for queries to the DNS server for the override domain."
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ãƒ‰ãƒ¡ã‚¤ãƒ³ã®DNSサーãƒã¸ã®ã‚¯ã‚¨ãƒªã®ãŸã‚ã®ã€Œé€ä¿¡å…ƒIPアドレス。"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148
+msgid "Leave blank unless your DNS server is accessed through a VPN tunnel."
+msgstr "DNSサーãƒã¯ã€ VPNトンãƒãƒ«ã‚’介ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã•ã‚Œã¦ã„ãªã„é™ã‚Šã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_crlmanager.php:401
+#: usr/local/www/system_crlmanager.php:401
+msgid "Edit Imported Certificate Revocation List"
+msgstr "編集インãƒãƒ¼ãƒˆã—ãŸè¨¼æ˜Žæ›¸å¤±åŠ¹ãƒªã‚¹ãƒˆ"
+
+#: usr/local/www/system_advanced_firewall.php:206
+#: usr/local/www/system_advanced_firewall.php:235
+#: usr/local/www/system_advanced_firewall.php:235
+msgid ""
+"expires idle connections quicker. More efficient use of CPU and memory but "
+"can drop legitimate idle connections"
+msgstr "「迅速アイドル状態ã®æŽ¥ç¶šã‚’期é™åˆ‡ã‚Œã«ã—ã¾ã™ã€‚ CPUã¨ãƒ¡ãƒ¢ãƒªãŒã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ã«ä½¿ç”¨ã€Œåˆæ³•çš„ãªã‚¢ã‚¤ãƒ‰ãƒ«æŽ¥ç¶šã‚’ドロップã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: usr/local/www/system_advanced_firewall.php:207
+#: usr/local/www/system_advanced_firewall.php:236
+#: usr/local/www/system_advanced_firewall.php:236
+msgid ""
+"tries to avoid dropping any legitimate idle connections at the expense of "
+"increased memory usage and CPU utilization."
+msgstr "メモリ使用é‡ã®å¢—加やCPU使用率ã€ã‚’犠牲ã«ã—ã¦æ­£å½“ãªã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã®æŽ¥ç¶šã‚’è½ã¨ã•ãªã„よã†ã«ã—よã†ã¨ã—ã¾ã™ã€ 。"
+
+#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300
+#: usr/local/www/vpn_pptp.php:300
+msgid ""
+"PPTP is no longer considered a secure VPN technology because it relies upon "
+"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware "
+"that intercepted traffic can be decrypted by a third party, so it should be "
+"considered unencrypted. We advise migrating to another VPN type such as "
+"OpenVPN or IPsec.<br /><br /><a href="https://isc.sans.edu/diary/End+of+Days"
+"+for+MS-CHAPv2/13807">Read More</a>"
+msgstr "侵害ã•ã‚ŒãŸMS - CHAPv2を「ãã‚ŒãŒä¾å­˜ã—ã¦ã„ã‚‹ã®ã§ã€PPTPã¯ã‚‚ã¯ã‚„安全ãªVPN技術ã¨è¦‹ãªã•ã‚Œã¦ã„ãªã„〠。ã‚ãªãŸã¯ã€PPTPã‚’æ„è­˜ã™ã‚‹ä½¿ç”¨ã—続ã‘ã‚‹å ´åˆã¯ã€ã€Œãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ã€ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è§£èª­ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™å‚å—ã™ã‚‹ã“ã¨ãªã®ã§ã€ã™ã¹ãã§ã‚る〠ã€æš—å·åŒ–ã•ã‚Œã¦ã„ãªã„ã¨è€ƒãˆãŸã€‚ç§ãŸã¡ã¯ã€ã“ã®ã‚ˆã†ãªè©³ç´°MS-CHAPv2/13807"u003e読むãŸã‚ã®ã€Œ OpenVPNã®ã‹Days"ã®IPsec.<br /><br />ã‚‚ã—ã€ã”href="https://isc.sans.edu/diary/Endã¨ã—ã¦åˆ¥ã®VPNタイプã«ç§»è¡ŒåŠ©è¨€ã™ã‚‹u003c/ A u003e"
+
+#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:191
+#: usr/local/www/status_ntpd.php:191
+msgid "Clock Latitude"
+msgstr "クロック緯度"
+
+#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:192
+#: usr/local/www/status_ntpd.php:192
+msgid "Clock Longitude"
+msgstr "クロック経度"
+
+#: usr/local/www/system_advanced_misc.php:77
+#: usr/local/www/system_advanced_misc.php:80
+#: usr/local/www/system_advanced_misc.php:84
+#: usr/local/www/system_advanced_misc.php:84
+msgid "AMD Geode LX Security Block"
+msgstr "AMDã®Geode LXセキュリティブロック"
+
+#: usr/local/www/system_advanced_misc.php:78
+#: usr/local/www/system_advanced_misc.php:81
+#: usr/local/www/system_advanced_misc.php:85
+#: usr/local/www/system_advanced_misc.php:85
+msgid "AES-NI CPU-based Acceleration"
+msgstr "AES- NIã®CPUベースã®ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³"
+
+#: usr/local/www/system_advanced_misc.php:80
+#: usr/local/www/system_advanced_misc.php:83
+#: usr/local/www/system_advanced_misc.php:87
+#: usr/local/www/system_advanced_misc.php:87
+msgid "Intel Core* CPU on-die thermal sensor"
+msgstr "インテルCore README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr CPUオンダイ熱センサ"
+
+#: usr/local/www/system_advanced_misc.php:81
+#: usr/local/www/system_advanced_misc.php:84
+#: usr/local/www/system_advanced_misc.php:88
+#: usr/local/www/system_advanced_misc.php:88
+msgid "AMD K8, K10 and K11 CPU on-die thermal sensor"
+msgstr "AMD K8 〠K10ãŠã‚ˆã³K11 CPUãŒç†±ã‚»ãƒ³ã‚µã‚’オンダイ"
+
+#: usr/local/www/system_advanced_misc.php:92
+#: usr/local/www/system_advanced_misc.php:95
+#: usr/local/www/system_advanced_misc.php:99
+#: usr/local/www/system_advanced_misc.php:99
+msgid "Please select a valid Cryptographic Accelerator."
+msgstr "有効ãªæš—å·åŒ–アクセラレータをé¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_misc.php:95
+#: usr/local/www/system_advanced_misc.php:98
+#: usr/local/www/system_advanced_misc.php:102
+#: usr/local/www/system_advanced_misc.php:102
+msgid "Please select a valid Thermal Hardware Sensor."
+msgstr "有効ãªç†±ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚»ãƒ³ã‚µãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_advanced_misc.php:380
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:439
+#: usr/local/www/system_advanced_misc.php:439
+msgid "Cryptographic Hardware Acceleration"
+msgstr "æš—å·ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³"
+
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:395
+#: usr/local/www/system_advanced_misc.php:442
+#: usr/local/www/system_advanced_misc.php:442
+msgid "Cryptographic Hardware"
+msgstr "æš—å·ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:451
+#: usr/local/www/system_advanced_misc.php:451
+msgid ""
+"A cryptographic accelerator module will use hardware support to speed up "
+"some cryptographic functions on systems which have the chip. Do not enable "
+"this option if you have a Hifn cryptographic acceleration card, as this will "
+"take precedence and the Hifn card will not be used. Acceleration should be "
+"automatic for IPsec when using a cipher supported by your chip, such as "
+"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled "
+"for hardware acceleration."
+msgstr "ãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„るシステムã§ã¯ã€ã„ãã¤ã‹ã®æš—å·æ©Ÿèƒ½ã‚’「暗å·åŒ–アクセラレータモジュールã¯ã€é«˜é€ŸåŒ–ã™ã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢Â·ã‚µãƒãƒ¼ãƒˆã‚’使用ã—ã¾ã™ã€ 。優先ã•ã‚Œã€ hIFNãƒãƒªã‚«ãƒ¼ãƒ‰ã¯ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“ã€ã“ã‚Œã¯ã‚ˆã†ã«ã¯ã€ Hifnã®æš—å·åŒ–アクセラレータカードを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを"有効ã«ã—ãªã„ã§ãã ã•ã„。 AES- 128 ã€ãªã©ã€ãŠä½¿ã„ã®ãƒãƒƒãƒ—ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹æš—å·ã‚’使用ã™ã‚‹å ´åˆã¯ã€ IPsecã®ãŸã‚ã®è‡ªå‹•ã€ŒåŠ é€ŸãŒãªã‘ã‚Œã°ãªã‚‰ãªã„。 OpenVPNã®ã¯ã€AES - 128 -CBCã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚り〠cryptodevã¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ã‚¯ã‚»ãƒ©ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ãŸã‚ã®ã€Œæœ‰åŠ¹ã«ã—ã¦ã„る。"
+
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:412
+#: usr/local/www/system_advanced_misc.php:459
+#: usr/local/www/system_advanced_misc.php:459
+msgid ""
+"If you do not have a crypto chip in your system, this option will have no "
+"effect. To unload the selected module, set this option to 'none' and then "
+"reboot."
+msgstr "効果ã€ã‚’使用ã—ã¦ã„るシステムã§æš—å·ãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ã‚ã‚Šã¾ã™ã€ 。é¸æŠžã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’アンロードã™ã‚‹ã«ã¯ã€ 「å†èµ·å‹•ã—ã€' none'ã«ã¯ã€ã“ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:420
+#: usr/local/www/system_advanced_misc.php:423
+#: usr/local/www/system_advanced_misc.php:467
+#: usr/local/www/system_advanced_misc.php:470
+#: usr/local/www/system_advanced_misc.php:467
+#: usr/local/www/system_advanced_misc.php:470
+msgid "Thermal Sensors"
+msgstr "温度センサ"
+
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:473
+#: usr/local/www/system_advanced_misc.php:473
+msgid "None/ACPI"
+msgstr "ãªã—/ ACPI"
+
+#: usr/local/www/system_advanced_misc.php:420
+#: usr/local/www/system_advanced_misc.php:432
+#: usr/local/www/system_advanced_misc.php:479
+#: usr/local/www/system_advanced_misc.php:479
+msgid ""
+"If you have a supported CPU, selecting a themal sensor will load the "
+"appropriate driver to read its temperature. Setting this to 'None' will "
+"attempt to read the temperature from an ACPI-compliant motherboard sensor "
+"instead, if one is present."
+msgstr "ãã®æ¸©åº¦ã‚’読むãŸã‚ã«é©åˆ‡ãªãƒ‰ãƒ©ã‚¤ãƒã€ã¯ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹CPUを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ themalセンサーをé¸æŠžã™ã‚‹ã¨ã€ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€ 。 1ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Œãªã—ã€ã«è¨­å®šã™ã‚‹ã¨ã€ä»£ã‚ã‚Šã«ã€Œ ACPI準拠ã®ãƒžã‚¶ãƒ¼ãƒœãƒ¼ãƒ‰ã‚»ãƒ³ã‚µãƒ¼ã‹ã‚‰ã®æ¸©åº¦ã‚’読ã¿å–ã‚ã†ã¨ã€ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:424
+#: usr/local/www/system_advanced_misc.php:436
+#: usr/local/www/system_advanced_misc.php:483
+#: usr/local/www/system_advanced_misc.php:483
+msgid ""
+"If you do not have a supported thermal sensor chip in your system, this "
+"option will have no effect. To unload the selected module, set this option "
+"to 'none' and then reboot."
+msgstr "「ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„る温度センサーãƒãƒƒãƒ—ã‚’æŒã£ã¦ã„ãªã„å ´åˆã¯ã€ã“ã®"オプションã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚é¸æŠžã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’アンロードã™ã‚‹ã«ã¯ã€' none'ã«"ã“ã®ã‚ªãƒ—ションを設定ã—ã¦å†èµ·å‹•ã€‚"
+
+#: usr/local/www/services_captiveportal.php:173
+#: usr/local/www/services_captiveportal.php:175
+#: usr/local/www/services_captiveportal.php:175
+msgid "Certificate must be specified for HTTPS login."
+msgstr "証明書ã¯ã€HTTPSã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:863
+#: usr/local/www/services_captiveportal.php:865
+#: usr/local/www/services_captiveportal.php:881
+#: usr/local/www/services_captiveportal.php:881
+msgid ""
+"If enabled, the username and password will be transmitted over an HTTPS "
+"connection to protect against eavesdroppers. A server name and certificate "
+"must also be specified below."
+msgstr "ç›—è´è€…ã‹ã‚‰ä¿è­·ã™ã‚‹ãŸã‚ã®æŽ¥ç¶šã€ã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯ã€HTTPSを介ã—ã¦é€ä¿¡ã•ã‚Œã¾ã™ã€ 。サーãƒãƒ¼åã¨è¨¼æ˜Žæ›¸ã€ã‚‚ã€ä»¥ä¸‹ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:886
+#: usr/local/www/services_captiveportal.php:888
+#: usr/local/www/services_captiveportal.php:904
+#: usr/local/www/services_captiveportal.php:904
+msgid "No Certificates defined."
+msgstr "定義ã•ã‚Œãªã„証明書ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:205
+#: usr/local/www/system_gateways_edit.php:235
+#: usr/local/www/system_gateways_edit.php:235
+msgid "The low latency threshold needs to be a numeric value."
+msgstr "低レイテンシã®ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:208
+#: usr/local/www/system_gateways_edit.php:238
+#: usr/local/www/system_gateways_edit.php:238
+msgid "The low latency threshold needs to be positive."
+msgstr "低レイテンシã®ã—ãã„値ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:215
+#: usr/local/www/system_gateways_edit.php:245
+#: usr/local/www/system_gateways_edit.php:245
+msgid "The high latency threshold needs to be a numeric value."
+msgstr "高é…延ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:218
+#: usr/local/www/system_gateways_edit.php:248
+#: usr/local/www/system_gateways_edit.php:248
+msgid "The high latency threshold needs to be positive."
+msgstr "高é…延ã—ãã„値ãŒé™½æ€§ã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:225
+#: usr/local/www/system_gateways_edit.php:255
+#: usr/local/www/system_gateways_edit.php:255
+msgid "The low Packet Loss threshold needs to be a numeric value."
+msgstr "低パケットæ失ã®ã—ãã„値ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:228
+#: usr/local/www/system_gateways_edit.php:258
+#: usr/local/www/system_gateways_edit.php:258
+msgid "The low Packet Loss threshold needs to be positive."
+msgstr "低パケットæ失ã®ã—ãã„値ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:231
+#: usr/local/www/system_gateways_edit.php:261
+#: usr/local/www/system_gateways_edit.php:261
+msgid "The low Packet Loss threshold needs to be less than 100."
+msgstr "低パケットæ失閾値ã¯ã€ 100未満ã§ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:238
+#: usr/local/www/system_gateways_edit.php:268
+#: usr/local/www/system_gateways_edit.php:268
+msgid "The high Packet Loss threshold needs to be a numeric value."
+msgstr "高ã„パケットæ失ã—ãã„値ã¯ã€æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:241
+#: usr/local/www/system_gateways_edit.php:271
+#: usr/local/www/system_gateways_edit.php:271
+msgid "The high Packet Loss threshold needs to be positive."
+msgstr "高ã„パケットæ失ã—ãã„値ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:244
+#: usr/local/www/system_gateways_edit.php:274
+#: usr/local/www/system_gateways_edit.php:274
+msgid "The high Packet Loss threshold needs to be 100 or less."
+msgstr "高パケットæ失閾値ã¯100以下ã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:252
+#: usr/local/www/system_gateways_edit.php:282
+#: usr/local/www/system_gateways_edit.php:282
+msgid ""
+"The high latency threshold needs to be higher than the low latency threshold"
+msgstr "「高é…延ã—ãã„値ã¯ã€ä½Žãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼é–¾å€¤ã‚ˆã‚Šã‚‚高ã„ã“ã¨ãŒå¿…è¦ã§ã‚ã‚‹"
+
+#: usr/local/www/system_gateways_edit.php:275
+#: usr/local/www/system_gateways_edit.php:305
+#: usr/local/www/system_gateways_edit.php:305
+msgid ""
+"The high Packet Loss threshold needs to be higher than the low Packet Loss "
+"threshold"
+msgstr "閾値「高パケットæ失閾値ãŒä½Žã„パケットæ失よりも高ãã™ã‚‹å¿…è¦ãŒã‚ã‚‹""
+
+#: usr/local/www/system_gateways_edit.php:297
+#: usr/local/www/system_gateways_edit.php:327
+#: usr/local/www/system_gateways_edit.php:327
+msgid "The frequency probe interval needs to be a numeric value."
+msgstr "高周波プローブ間隔ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:300
+#: usr/local/www/system_gateways_edit.php:330
+#: usr/local/www/system_gateways_edit.php:330
+msgid "The frequency probe interval needs to be positive."
+msgstr "高周波プローブ間隔ã¯æ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:307
+#: usr/local/www/system_gateways_edit.php:337
+#: usr/local/www/system_gateways_edit.php:337
+msgid "The down time setting needs to be a numeric value."
+msgstr "ダウンタイムã®è¨­å®šã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateways_edit.php:310
+#: usr/local/www/system_gateways_edit.php:340
+#: usr/local/www/system_gateways_edit.php:340
+msgid "The down time setting needs to be positive."
+msgstr "åœæ­¢æ™‚é–“ã®è¨­å®šãŒæ­£ã§ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:318
+#: usr/local/www/system_gateways_edit.php:348
+#: usr/local/www/system_gateways_edit.php:348
+msgid ""
+"The Frequency Probe interval needs to be less than the down time setting."
+msgstr "「周波数プローブ間隔ã¯ã€ãƒ€ã‚¦ãƒ³æ™‚間設定未満ã§ã‚ã‚‹å¿…è¦ãŒã‚る。"
+
+#: usr/local/www/system_gateways_edit.php:611
+#: usr/local/www/system_gateways_edit.php:615
+#: usr/local/www/system_gateways_edit.php:617
+#: usr/local/www/system_gateways_edit.php:647
+msgid ""
+"NOTE: The Frequency Probe interval must be less than the Down time, "
+"otherwise the gateway will seem to go down then come up again at the next "
+"probe."
+msgstr ""注:高周波プローブ間隔ã¯ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ã‚ˆã‚Šã‚‚å°ã•ããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠「ãã†ã§ãªã„ゲートウェイã¯ã€æ¬¡ã®ã€Œãƒ—ローブã§å†ã³å‡ºã¦ãã‚‹ã—ã€ä¸‹ã«è¡Œãよã†ã«è¦‹ãˆã‚‹ã§ã—ょã†ã€‚"
+
+#: usr/local/www/shortcuts.inc:96 usr/local/www/shortcuts.inc:96
+msgid "Main page for this section"
+msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ã‚¤ãƒ³ãƒšãƒ¼ã‚¸"
+
+#: usr/local/www/shortcuts.inc:120 usr/local/www/shortcuts.inc:120
+msgid "Status of items on this page"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é …ç›®ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
+
+#: usr/local/www/shortcuts.inc:127 usr/local/www/shortcuts.inc:127
+msgid "Log entries for items on this page"
+msgstr "ã“ã®ãƒšãƒ¼ã‚¸ä¸Šã®ã‚¢ã‚¤ãƒ†ãƒ ã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’"
+
+#: usr/local/www/vpn_openvpn_server.php:1102
+#: usr/local/www/vpn_openvpn_server.php:1129
+#: usr/local/www/vpn_openvpn_server.php:1129
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. fe80::/64). The first "
+"network address will be assigned to the server virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ›ã‚¹ãƒˆã€Œã“ã‚Œã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•ã‚Œã‚‹IPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ 「残りã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€å¿…è¦ã«å¿œã˜ã¦ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ (アドレスプールをå‚ç…§ã—ã¦ãã ã•ã„)"
+
+#: usr/local/www/vpn_openvpn_server.php:1152
+#: usr/local/www/vpn_openvpn_server.php:1179
+#: usr/local/www/vpn_openvpn_server.php:1179
+msgid ""
+"The interface to which this tap instance will be bridged. This is not done "
+"automatically. You must assign this interface and create the bridge "
+"separately. This setting controls which existing IP address and subnet mask "
+"are used by OpenVPN for the bridge. Setting this to 'none' will cause the "
+"Server Bridge DHCP settings below to be ignored."
+msgstr "自動的ã«ã€Œã“ã®ã‚¿ãƒƒãƒ—インスタンスをブリッジ先ã¨ãªã‚‹ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã€ã“ã‚Œã¯è¡Œã‚ã‚Œã¦ã„ã¾ã›ã‚“〠。ã‚ãªãŸã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’割り当ã¦ã€ 「別途既存ã®IPアドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€ã“ã®è¨­å®šã‚’制御ã—「ブリッジ用ã®OpenVPNã§ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŒã€ãƒ–リッジを作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚' none'ã«ã€ã“れを設定ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã€Œã‚µãƒ¼ãƒãƒ¼Â·ãƒ–リッジDHCP設定ãŒç„¡è¦–ã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1165
+#: usr/local/www/vpn_openvpn_server.php:1192
+#: usr/local/www/vpn_openvpn_server.php:1192
+msgid ""
+"When using tap mode as a multi-point server, you may optionally supply a "
+"DHCP range to use on the interface to which this tap instance is bridged. If "
+"these settings are left blank, DHCP will be passed through to the LAN, and "
+"the interface setting above will be ignored."
+msgstr "ã“ã®ã‚¿ãƒƒãƒ—インスタンスãŒãƒ–リッジã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«DHCP範囲「マルãƒãƒã‚¤ãƒ³ãƒˆã‚µãƒ¼ãƒãƒ¼ã¨ã—ã¦ã‚¿ãƒƒãƒ—·モードを使用ã™ã‚‹ã¨ãã¯ã€å¿…è¦ã«å¿œã˜ã¦ä¾›çµ¦ã™ã‚‹ã“ã¨ãŒã§ãる〠。場åˆã¯"ã“れらã®è¨­å®šã¯ç©ºç™½ã®ã¾ã¾ã«ã€ DHCPãŒLANã«é€šéŽã•ã‚Œã€ 「上記ã®è¨­å®šã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/vpn_openvpn_server.php:1225
+#: usr/local/www/vpn_openvpn_client.php:799
+msgid "IPv4 Remote Network"
+msgstr "IPv4ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:1229
+msgid ""
+"This is a network that will be routed through the tunnel, so that a site-to-"
+"site VPN can be established without manually changing the routing tables. "
+"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote "
+"LAN here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr "「ã“ã‚Œã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•ã€‚ã“ã‚Œã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆå…¥åŠ›ã—「ã“ã“ã«LANã®ã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/vpn_openvpn_server.php:1239
+#: usr/local/www/vpn_openvpn_client.php:813
+msgid "IPv6 Remote Network"
+msgstr "IPv6ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/vpn_openvpn_server.php:1243
+msgid ""
+"This is an IPv6 network that will be routed through the tunnel, so that a "
+"site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the "
+"remote LAN here. You may leave this blank if you don't want a site-to-site "
+"VPN"
+msgstr ""ã“ã‚Œã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚るよã†ã«ã€ã€Œã‚µã‚¤ãƒˆé–“VPNを手動ã§ã€Œãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ IP /プレフィックスã¨ã—ã¦è¡¨ã•ã‚Œã¾ã™ã€‚ã“ã‚ŒãŒã‚ã‚Œã°ã€ã‚µã‚¤ãƒˆãƒ„ーサイト間VPNã¯ã€ã“ã“ã§ã¯ã€ã€Œãƒªãƒ¢ãƒ¼ãƒˆLANを入力ã—ã¦ãã ã•ã„。サイトツーサイト「VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274
+#: usr/local/www/services_dhcp.php:294 usr/local/www/services_dhcp.php:294
+msgid ""
+"If you specify a mac allow list, it must contain only valid partial MAC "
+"addresses."
+msgstr "アドレスã¯ã€Œã‚ãªãŸãŒMacã¯è¨±å¯ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã¨ã€ãã‚ŒãŒå”¯ä¸€ã®æœ‰åŠ¹ãªéƒ¨åˆ†çš„ãªMACãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276
+#: usr/local/www/services_dhcp.php:296 usr/local/www/services_dhcp.php:296
+msgid ""
+"If you specify a mac deny list, it must contain only valid partial MAC "
+"addresses."
+msgstr "アドレスã¯ã€Œã‚ãªãŸã¯MacãŒæ‹’å¦ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã¨ã€ãã‚ŒãŒå”¯ä¸€ã®æœ‰åŠ¹ãªéƒ¨åˆ†çš„ãªMACãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701
+#: usr/local/www/services_dhcp.php:721 usr/local/www/services_dhcp.php:721
+msgid ""
+"Editing Pool-Specific Options. To return to the Interface, click its tab "
+"above."
+msgstr "プール固有ã®ã‚ªãƒ—ションを編集。インターフェイスã«æˆ»ã‚‹ã«ã¯ã€ä¸Šè¨˜ã®ã‚¿ãƒ–をクリックã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785
+#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:805
+msgid "Additional Pools"
+msgstr "追加ã®ãƒ—ール"
+
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcp.php:807
+msgid ""
+"If you need additional pools of addresses inside of this subnet outside the "
+"above Range, they may be specified here."
+msgstr "範囲を超ãˆã‚‹ã€å½¼ã‚‰ãŒã“ã“ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"ã‚ãªãŸãŒå¤–ã§ã“ã®ã‚µãƒ–ãƒãƒƒãƒˆå†…ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®è¿½åŠ ã®ãƒ—ールãŒå¿…è¦ãªå ´åˆã¯ã€Œ 。"
+
+#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790
+#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcp.php:810
+msgid "Pool Start"
+msgstr "プールスタート"
+
+#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791
+#: usr/local/www/services_dhcp.php:811 usr/local/www/services_dhcp.php:811
+msgid "Pool End"
+msgstr "プール終了"
+
+#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819
+#: usr/local/www/services_dhcp.php:839 usr/local/www/services_dhcp.php:839
+msgid "Do you really want to delete this pool?"
+msgstr "ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ—ールを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971
+#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcp.php:991
+msgid "MAC Address Control"
+msgstr "MACアドレス管ç†"
+
+#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974
+#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:994
+msgid "Show MAC Address Control"
+msgstr "ショーã®MACアドレス制御"
+
+#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp.php:998 usr/local/www/services_dhcp.php:998
+msgid ""
+"Enter a list of partial MAC addresses to allow, comma separated, no spaces, "
+"such as "
+msgstr "ã®ã‚ˆã†ãªã€Œéƒ¨åˆ†çš„MACアドレスã®ãƒªã‚¹ãƒˆã‚’入力ã™ã‚‹ã¨ã€ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã€ã‚¹ãƒšãƒ¼ã‚¹ãªã—ã«ã€è¨±å¯ã—ãªã„よã†ã«å¯¾å‡¦ã™ã‚‹ã€"
+
+#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980
+#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcp.php:1000
+msgid ""
+"Enter a list of partial MAC addresses to deny access, comma separated, no "
+"spaces, such as "
+msgstr "「部分的ãªMACアドレスã®ãƒªã‚¹ãƒˆã‚’入力ã™ã‚‹ã¨ã€ã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã‚‰ã‚Œã€ NOã€ã®ã‚ˆã†ãªç©ºé–“ã‚’ã€"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:89
+#: usr/local/www/load_balancer_virtual_server_edit.php:89
+msgid "You cannot use spaces or slashes in the 'name' field."
+msgstr "ã‚ãªãŸã¯ã€ 「åå‰ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„スラッシュを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024
+#: usr/local/www/guiconfig.inc:1021 usr/local/www/guiconfig.inc:1021
+msgid "move mouse out this alias to hide"
+msgstr "éžè¡¨ç¤ºã«ã™ã‚‹ã«ã¯ã€ã“ã®åˆ¥åã‹ã‚‰ãƒžã‚¦ã‚¹ã‚’移動"
+
+#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081
+#: usr/local/www/guiconfig.inc:1078 usr/local/www/guiconfig.inc:1078
+msgid "edit this alias"
+msgstr "ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’編集"
+
+#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089
+#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104
+#: usr/local/www/guiconfig.inc:1101 usr/local/www/guiconfig.inc:1089
+#: usr/local/www/guiconfig.inc:1101
+msgid "loading..."
+msgstr "読ã¿è¾¼ã‚“ã§ã„ã¾ã™..."
+
+#: usr/local/www/system_firmware_settings.php:175
+#: usr/local/www/system_firmware_settings.php:184
+#: usr/local/www/system_firmware_settings.php:186
+#: usr/local/www/system_firmware_settings.php:186
+msgid "Dashboard check"
+msgstr "ダッシュボードã®ãƒã‚§ãƒƒã‚¯"
+
+#: usr/local/www/system_firmware_settings.php:179
+#: usr/local/www/system_firmware_settings.php:188
+#: usr/local/www/system_firmware_settings.php:190
+#: usr/local/www/system_firmware_settings.php:190
+msgid "Disable the automatic dashboard auto-update check."
+msgstr "自動ダッシュボードã®è‡ªå‹•æ›´æ–°ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_ntpd.php:119 usr/local/www/services_ntpd.php:119
+msgid "Interfaces without an IP address will not be shown."
+msgstr "IPアドレスをæŒãŸãªã„インタフェースã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/services_ntpd.php:121 usr/local/www/services_ntpd.php:121
+msgid "Selecting no interfaces will listen on all interfaces with a wildcard."
+msgstr "何ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã—ãªã„ã¨ã€ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚’æŒã¤ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§å¾…æ©Ÿã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_ntpd.php:122 usr/local/www/services_ntpd.php:122
+msgid ""
+"Selecting all interfaces will explicitly listen on only the interfaces/IPs "
+"specified."
+msgstr "指定ã•ã‚ŒãŸã€Œã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’é¸æŠžã™ã‚‹ã¨ã€æ˜Žç¤ºçš„ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®ã¿/ IPS上ã§å¾…æ©Ÿã—ã¾ã™ã€ 。"
+
+#: usr/local/www/services_ntpd.php:140 usr/local/www/services_ntpd.php:140
+msgid "The GPS must provide NMEA format output!"
+msgstr "GPSã¯NMEAå½¢å¼ã®å‡ºåŠ›ã‚’æä¾›ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ï¼"
+
+#: usr/local/www/services_ntpd.php:142 usr/local/www/services_ntpd.php:142
+msgid ""
+"All serial ports are listed, be sure to pick only the port with the GPS "
+"attached."
+msgstr "添付ã®ã€Œã™ã¹ã¦ã®ã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆãŒã€ãƒªã‚¹ãƒˆã•ã‚Œã¦ã„ã‚‹GPSを専用ãƒãƒ¼ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144
+msgid "It is best to configure at least 2 servers under"
+msgstr "ãã‚ŒãŒä¸‹ã«å°‘ãªãã¨ã‚‚2サーãƒã‚’設定ã™ã‚‹ã®ãŒæœ€é©ã§ã™"
+
+#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144
+msgid "System > General"
+msgstr "システムu003e一般"
+
+#: usr/local/www/services_ntpd.php:144 usr/local/www/services_ntpd.php:144
+msgid ""
+"to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd "
+"may only use values from the unsynchronized local clock when providing time "
+"to clients."
+msgstr "「 GPSデータãŒæ™‚é–“ã‚’ã‹ã‘ã¦æœ‰åŠ¹ã§ãªã„å ´åˆã€åŒæœŸã®æ失を回é¿ã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ntpdã¯ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸ã®æ™‚é–“ã€ã‚’æä¾›ã™ã‚‹å ´åˆã«ã®ã¿ã€éžåŒæœŸã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¯ãƒ­ãƒƒã‚¯ã®å€¤ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases.php:177
+#: usr/local/www/firewall_aliases.php:175
+#: usr/local/www/firewall_aliases.php:175
+msgid "Ports"
+msgstr "ãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/firewall_aliases.php:178
+#: usr/local/www/firewall_aliases.php:176
+#: usr/local/www/firewall_aliases.php:176
+msgid "Urls"
+msgstr "URLã¯"
+
+#: usr/local/www/firewall_aliases.php:195
+#: usr/local/www/firewall_aliases.php:272
+#: usr/local/www/firewall_aliases.php:274
+#: usr/local/www/firewall_aliases.php:275
+#: usr/local/www/firewall_aliases.php:195
+#: usr/local/www/firewall_aliases.php:275
+msgid "Add a new alias"
+msgstr "æ–°ã—ã„エイリアスを追加ã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_aliases.php:255
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+#: usr/local/www/firewall_aliases.php:257
+msgid "Edit alias"
+msgstr "編集別å"
+
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+#: usr/local/www/firewall_aliases.php:258
+#: usr/local/www/firewall_aliases.php:258
+msgid "Delete alias"
+msgstr "エイリアスを削除"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:64
+#: usr/local/www/services_captiveportal_zones_edit.php:64
+msgid "The zone name can only contain letters, digits, and underscores (_)."
+msgstr "ゾーンåã«ã¯ã€æ–‡å­—ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ï¼ˆ _)をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:105
+#: usr/local/www/services_captiveportal_zones_edit.php:101
+#: usr/local/www/services_captiveportal_zones_edit.php:101
+msgid "Zone name. Can only contain letters, digits, and underscores (_)."
+msgstr "ゾーンå。文字ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ï¼ˆ _)をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:81
+#: usr/local/www/diag_packet_capture.php:81
+msgid "Invalid interface."
+msgstr "無効ãªã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:84
+#: usr/local/www/diag_packet_capture.php:84
+msgid "Invalid address family."
+msgstr "無効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ•ã‚¡ãƒŸãƒªã€‚"
+
+#: usr/local/www/diag_packet_capture.php:87
+#: usr/local/www/diag_packet_capture.php:87
+msgid "Invalid protocol."
+msgstr "無効ãªãƒ—ロトコル。"
+
+#: usr/local/www/diag_packet_capture.php:92
+#: usr/local/www/diag_packet_capture.php:92
+#, php-format
+msgid "A valid IP address or CIDR block must be specified. [%s]"
+msgstr "有効ãªIPアドレスã¾ãŸã¯CIDRブロックを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ( ( %s ) )"
+
+#: usr/local/www/diag_packet_capture.php:97
+#: usr/local/www/diag_packet_capture.php:97
+msgid "Invalid value specified for port."
+msgstr "ãƒãƒ¼ãƒˆã«æŒ‡å®šã•ã‚ŒãŸå€¤ãŒç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:104
+#: usr/local/www/diag_packet_capture.php:104
+msgid "Invalid value specified for packet length."
+msgstr "パケット長ã«æŒ‡å®šã•ã‚ŒãŸå€¤ãŒç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:111
+#: usr/local/www/diag_packet_capture.php:111
+msgid "Invalid value specified for packet count."
+msgstr "パケット数ã«æŒ‡å®šã•ã‚ŒãŸå€¤ãŒç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:148
+#: usr/local/www/vpn_ipsec_phase2.php:152
+#: usr/local/www/vpn_ipsec_phase2.php:152
+msgid "A valid NAT local network bit count must be specified."
+msgstr "有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ット数を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:150
+#: usr/local/www/vpn_ipsec_phase2.php:154
+#: usr/local/www/vpn_ipsec_phase2.php:154
+msgid ""
+"You cannot configure a network type address for NAT while only an address "
+"type is selected for local source."
+msgstr "タイプローカルソースをé¸æŠžã—ãŸ"ã‚ãªãŸã ã‘ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ä¸€æ–¹NATã®ãŸã‚ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯åž‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/vpn_ipsec_phase2.php:153
+#: usr/local/www/vpn_ipsec_phase2.php:157
+#: usr/local/www/vpn_ipsec_phase2.php:157
+msgid "A valid NAT local network IP address must be specified."
+msgstr "有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯IPアドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:548
+#: usr/local/www/vpn_ipsec_phase2.php:569
+#: usr/local/www/vpn_ipsec_phase2.php:569
+msgid ""
+"In case you need NAT/BINAT on this network specify the address to be "
+"translated"
+msgstr "翻訳"ケースã§ã¯ã€å¯¾è±¡ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã€ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§NAT /ã®binatãŒå¿…è¦ã§ã™ã€"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:114
+#: usr/local/www/vpn_ipsec_keys_edit.php:114
+msgid "VPN: IPsec: Edit Pre-Shared Key"
+msgstr "VPN : IPsecã®ç·¨é›†ï¼šäº‹å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/services_dhcp_edit.php:227
+#: usr/local/www/services_dhcp_edit.php:355
+#: usr/local/www/services_dhcp_edit.php:355
+msgid "If an IPv4 address is entered, the address must be outside of the pool."
+msgstr "IPv4アドレスを入力ã™ã‚‹ã¨ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ãƒ—ールã®å¤–ã«ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚"
+
+#: usr/local/www/services_dhcp_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:357
+#: usr/local/www/services_dhcp_edit.php:357
+msgid ""
+"If no IPv4 address is given, one will be dynamically allocated from the pool."
+msgstr "ãªã„IPv4アドレスãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ 〠1ã¯ã€å‹•çš„ã«ãƒ—ールã‹ã‚‰å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490
+#: usr/local/www/interfaces.php:2536 usr/local/www/interfaces.php:2525
+#: usr/local/www/interfaces.php:2525
+msgid "WPA Pre-Shared Key"
+msgstr "WPA事å‰å…±æœ‰ã‚­ãƒ¼"
+
+#: usr/local/www/vpn_openvpn_client.php:789
+#: usr/local/www/vpn_openvpn_client.php:808
+#: usr/local/www/vpn_openvpn_client.php:808
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this client and the server expressed using CIDR (eg. fe80::/64). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr "ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒãƒ¼ã®ã€Œã“ã‚Œã¯é–“ã®ãƒ—ライベート通信ã«ä½¿ç”¨ã•ã‚Œã‚‹IPv6ã®ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹"(例: FE80:: / 64 ) ã€CIDRを使用ã—ã¦è¡¨ç¾ã€‚最åˆã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€ã‚µãƒ¼ãƒã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚ã‚‹ã¨ã¿ãªã•ã‚Œã€ç¬¬äºŒã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"アドレスã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ä»®æƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™"
+
+#: usr/local/www/vpn_openvpn_client.php:803
+msgid ""
+"This is a network that will be routed through the tunnel, so that a site-to-"
+"site VPN can be established without manually changing the routing tables. "
+"Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote "
+"LAN here. You may leave this blank to only communicate with other clients"
+msgstr "「ã“ã‚Œã¯ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚ã‚‹ã€ãã®çµæžœã€ã‚µã‚¤ãƒˆãƒ„ーã€ã‚µã‚¤ãƒˆVPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 「 CIDRã®ç¯„囲ã¨ã—ã¦è¡¨ã•ã€‚ã“ã‚Œã¯ã€ã‚µã‚¤ãƒˆé–“VPNã®å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆå…¥åŠ›ã—「ã“ã“ã«LANã®ã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/vpn_openvpn_client.php:817
+msgid ""
+"This is an IPv6 network that will be routed through the tunnel, so that a "
+"site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the "
+"remote LAN here. You may leave this blank to only communicate with other "
+"clients"
+msgstr ""ã“ã‚Œã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚るよã†ã«ã€ã€Œã‚µã‚¤ãƒˆé–“VPNを手動ã§ã€Œãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ IP /プレフィックスã¨ã—ã¦è¡¨ã•ã‚Œã¾ã™ã€‚ã“ã‚ŒãŒã‚ã‚Œã°ã€ã‚µã‚¤ãƒˆãƒ„ーサイト間VPNã¯ã€ã“ã“ã§ã¯ã€ã€Œãƒªãƒ¢ãƒ¼ãƒˆLANを入力ã—ã¦ãã ã•ã„。ã‚ãªãŸã ã‘ã®ä»–ã®ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ãŒ"
+
+#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304
+#: usr/local/www/vpn_l2tp.php:304
+msgid "Enable L2TP server"
+msgstr "L2TPサーãƒã‚’有効ã«ã™ã‚‹"
+
+#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325
+#: usr/local/www/vpn_l2tp.php:325
+msgid "Server Address"
+msgstr "サーãƒãƒ¼ã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337
+#: usr/local/www/vpn_l2tp.php:337
+msgid "Remote Address Range"
+msgstr "リモートアドレス範囲"
+
+#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387
+#: usr/local/www/vpn_l2tp.php:387
+msgid "Authentication Type"
+msgstr "èªè¨¼ã‚¿ã‚¤ãƒ—"
+
+#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432
+#: usr/local/www/vpn_l2tp.php:432
+msgid "RADIUS Shared Secret"
+msgstr "RADIUS共有シークレット"
+
+#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439
+#: usr/local/www/vpn_l2tp.php:439
+msgid "RADIUS Issued IP's"
+msgstr "RADIUSã¯ã€IPã®ç™ºè¡Œ"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:126
+#: usr/local/www/firewall_virtual_ip_edit.php:128
+#: usr/local/www/firewall_virtual_ip_edit.php:128
+msgid "The /31 and /32 subnet mask are invalid for CARP IPs."
+msgstr "/ 31ãŠã‚ˆã³/ 32サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:132
+#: usr/local/www/firewall_virtual_ip_edit.php:132
+msgid "The /127 and /128 subnet mask are invalid for CARP IPs."
+msgstr "/ 127ãŠã‚ˆã³/ 128サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ã€CARPã®IPアドレスã¯ç„¡åŠ¹ã§ã™ã€‚"
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+#: usr/local/www/interfaces_gif.php:141
+msgid ""
+"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) "
+"Tunnel Broker on a WAN with a dynamic IP, you may want to add a"
+msgstr "å‹•çš„IPã¨WAN上ã®ãƒˆãƒ³ãƒãƒ«ãƒ–ローカーã€ã§ã¯ã€ãƒãƒªã‚±ãƒ¼ãƒ³Â·ã‚¨ãƒ¬ã‚¯ãƒˆãƒªãƒƒã‚¯ï¼ˆ he.net )ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã«ã€GIFトンãƒãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€ã«ã¯ã€è¿½åŠ ã—ãŸã„ã“ã¨"
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+#: usr/local/www/interfaces_gif.php:141
+msgid "HE.net Tunnelbroker type DynDNS Entry"
+msgstr "HE.net TunnelbrokerタイプダイナミックDNSエントリー"
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+#: usr/local/www/interfaces_gif.php:141
+msgid "to keep your tunnel functional when your IP changes."
+msgstr "ã‚ãªãŸã®IPã®å¤‰æ›´æ™‚ã«æ©Ÿèƒ½çš„ãªã€ã‚ãªãŸã®ãƒˆãƒ³ãƒãƒ«ã‚’維æŒã™ã‚‹ã€‚"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:102
+#: usr/local/www/widgets/widgets/system_information.widget.php:103
+#: usr/local/www/widgets/widgets/system_information.widget.php:101
+#: usr/local/www/widgets/widgets/system_information.widget.php:103
+msgid "Obtaining update status"
+msgstr "更新ステータスã®å–å¾—"
+
+#: usr/local/www/vpn_ipsec_phase1.php:680
+#: usr/local/www/vpn_ipsec_phase1.php:701
+#: usr/local/www/vpn_ipsec_phase1.php:701
+msgid "Input your Pre-Shared Key string"
+msgstr "入力ã‚ãªãŸã®äº‹å‰å…±æœ‰éµã®æ–‡å­—列"
+
+#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:170
+#: usr/local/www/diag_nanobsd.php:170
+msgid "Media Read/Write Status"
+msgstr "メディア読ã¿å–ã‚Š/書ãè¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
+
+#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:183
+#: usr/local/www/diag_nanobsd.php:183
+msgid "Read/Write"
+msgstr "読ã¿æ›¸ã"
+
+#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:185
+#: usr/local/www/diag_nanobsd.php:185
+msgid "Switch to Read-Only"
+msgstr "読ã¿å–り専用ã«åˆ‡ã‚Šæ›¿ãˆ"
+
+#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:187
+#: usr/local/www/diag_nanobsd.php:187
+msgid "Read-Only"
+msgstr "リードオンリー"
+
+#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:189
+#: usr/local/www/diag_nanobsd.php:189
+msgid "Switch to Read/Write"
+msgstr "読ã¿å–ã‚Š/書ãè¾¼ã¿ã«åˆ‡ã‚Šæ›¿ãˆ"
+
+#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:192
+#: usr/local/www/diag_nanobsd.php:192
+msgid ""
+"NOTE: This setting is only temporary, and can be switched dynamically in the "
+"background."
+msgstr ""注:ã“ã®è¨­å®šã¯ä¸€æ™‚çš„ãªã‚‚ã®ã§ã‚ã‚Šã€å‹•çš„ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€èƒŒæ™¯ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:199
+#: usr/local/www/diag_nanobsd.php:199
+msgid "Keep media mounted read/write at all times."
+msgstr "維æŒåŸ¹åœ°ã¯ã€å¸¸ã«èª­ã¿å–ã‚Š/書ãè¾¼ã¿å–り付ã‘られã¦ã„る。"
+
+#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838
+#: usr/local/www/services_dhcpv6.php:838
+msgid "Status: DHCPv6 leases"
+msgstr "ステータス: DHCPv6ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:307
+#: usr/local/www/diag_logs_filter.php:307
+msgid "Rule"
+msgstr "ルール"
+
+#: usr/local/www/system_firmware.php:55 usr/local/www/system_firmware.php:55
+msgid "Standard Kernel"
+msgstr "標準カーãƒãƒ«"
+
+#: usr/local/www/system_firmware.php:56 usr/local/www/system_firmware.php:56
+msgid "Embedded Kernel"
+msgstr "埋ã‚è¾¼ã¾ã‚ŒãŸã‚«ãƒ¼ãƒãƒ«"
+
+#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96
+#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96
+msgid ""
+"'Server address' parameter should NOT be set to any IP address currently in "
+"use on this firewall."
+msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹ã€Œã€Œã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒ‘ラメータã¯ã€ç¾åœ¨ã®ä»»æ„ã®IPアドレスã«è¨­å®šã—ãªã„ã§ãã ã•ã„〠。"
+
+#: usr/local/www/system_camanager.php:220
+#: usr/local/www/system_certmanager.php:299
+#: usr/local/www/system_certmanager.php:301
+#: usr/local/www/system_camanager.php:220
+#: usr/local/www/system_certmanager.php:299
+#: usr/local/www/system_certmanager.php:301
+msgid "Please select a valid Key Length."
+msgstr "有効ãªã‚­ãƒ¼ã®é•·ã•ã‚’é¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_camanager.php:222
+#: usr/local/www/system_certmanager.php:303
+#: usr/local/www/system_camanager.php:222
+#: usr/local/www/system_certmanager.php:303
+msgid "Please select a valid Digest Algorithm."
+msgstr "有効ãªãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’é¸æŠžã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/system_camanager.php:477
+#: usr/local/www/system_certmanager.php:690
+#: usr/local/www/system_certmanager.php:863
+#: usr/local/www/system_certmanager.php:691
+#: usr/local/www/system_certmanager.php:867
+#: usr/local/www/system_camanager.php:477
+#: usr/local/www/system_certmanager.php:691
+#: usr/local/www/system_certmanager.php:867
+msgid "Digest Algorithm"
+msgstr "ダイジェストアルゴリズム"
+
+#: usr/local/www/system_camanager.php:489
+#: usr/local/www/system_certmanager.php:702
+#: usr/local/www/system_certmanager.php:875
+#: usr/local/www/system_certmanager.php:703
+#: usr/local/www/system_certmanager.php:879
+#: usr/local/www/system_camanager.php:489
+#: usr/local/www/system_certmanager.php:703
+#: usr/local/www/system_certmanager.php:879
+msgid ""
+"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible."
+msgstr ""注:ã“ã‚Œã¯ã€å¯èƒ½ãªå ´åˆã¯SHA1より強ã„アルゴリズムを使用ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚"
+
+#: usr/local/www/system_camanager.php:653
+#: usr/local/www/system_certmanager.php:1127
+#: usr/local/www/system_certmanager.php:1131
+#: usr/local/www/system_camanager.php:653
+#: usr/local/www/system_certmanager.php:1131
+msgid "Valid From"
+msgstr "ã‹ã‚‰æœ‰åŠ¹"
+
+#: usr/local/www/system_camanager.php:658
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_certmanager.php:1136
+#: usr/local/www/system_camanager.php:658
+#: usr/local/www/system_certmanager.php:1136
+msgid "Valid Until"
+msgstr "ã¾ã§æœ‰åŠ¹"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:107
+#: usr/local/www/services_captiveportal_ip_edit.php:107
+msgid "A valid subnet mask must be specified"
+msgstr "有効ãªã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/vpn_openvpn_client.php:160
+#: usr/local/www/vpn_openvpn_server.php:213
+#: usr/local/www/vpn_openvpn_client.php:160
+#: usr/local/www/vpn_openvpn_server.php:213
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv6 "
+"protocol and an IPv4 IP address."
+msgstr "プロトコルã¨IPv4ã®IPアドレス "プロトコルã¨IPアドレスファミリーã¯IPv6ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。一致ã—ã¦ã„ã¾ã›ã‚“〠。"
+
+#: usr/local/www/vpn_openvpn_client.php:162
+#: usr/local/www/vpn_openvpn_server.php:215
+#: usr/local/www/vpn_openvpn_client.php:162
+#: usr/local/www/vpn_openvpn_server.php:215
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv4 "
+"protocol and an IPv6 IP address."
+msgstr "プロトコルã¨IPv6ã®IPアドレス "プロトコルã¨IPアドレスファミリーã¯ã€ã‚ãªãŸãŒIPv4ã‚’é¸æŠžã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。一致ã—ã¦ã„ã¾ã›ã‚“〠。"
+
+#: usr/local/www/vpn_openvpn_client.php:164
+#: usr/local/www/vpn_openvpn_server.php:217
+#: usr/local/www/vpn_openvpn_client.php:164
+#: usr/local/www/vpn_openvpn_server.php:217
+msgid ""
+"An IPv4 protocol was selected, but the selected interface has no IPv4 "
+"address."
+msgstr "「 IPv4ã®ãƒ—ロトコルãŒé¸æŠžã•ã‚Œã‚‹ãŒã€é¸æŠžã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«ã¯IPv4アドレスãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’。"
+
+#: usr/local/www/vpn_openvpn_client.php:166
+#: usr/local/www/vpn_openvpn_server.php:219
+#: usr/local/www/vpn_openvpn_client.php:166
+#: usr/local/www/vpn_openvpn_server.php:219
+msgid ""
+"An IPv6 protocol was selected, but the selected interface has no IPv6 "
+"address."
+msgstr "「 IPv6プロトコルをé¸æŠžã—ã¾ã™ãŒã€é¸æŠžã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã«ã¯IPv6ã‚’æŒã£ã¦ã„ã¾ã›ã‚“ã—ã€ã€Œã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’。"
+
+#: usr/local/www/vpn_openvpn_client.php:818
+#: usr/local/www/vpn_openvpn_server.php:1252
+#: usr/local/www/vpn_openvpn_client.php:818
+#: usr/local/www/vpn_openvpn_server.php:1252
+msgid "IPv4 Remote Network/s"
+msgstr "IPv4ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S"
+
+#: usr/local/www/vpn_openvpn_client.php:822
+#: usr/local/www/vpn_openvpn_client.php:822
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã§ãã‚‹ã€ã‚ˆã†ã«ã€ã“れらã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚ŒãŸIPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDRã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã—ã¾ã™ã€‚範囲「ã“ã®ã‚ˆã†ã«å…¥åŠ›ã—ã€ã‚µã‚¤ãƒˆé–“VPNã§LANãŒ/ã“ã“ã®ãƒªãƒ¢ãƒ¼ãƒˆã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§"
+
+#: usr/local/www/vpn_openvpn_client.php:832
+#: usr/local/www/vpn_openvpn_server.php:1266
+#: usr/local/www/vpn_openvpn_client.php:832
+#: usr/local/www/vpn_openvpn_server.php:1266
+msgid "IPv6 Remote Network/s"
+msgstr "IPv6リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S"
+
+#: usr/local/www/vpn_openvpn_client.php:836
+#: usr/local/www/vpn_openvpn_client.php:836
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦ç™ºç¾ã•ã‚ŒãŸã€ã“れらã¯ã‚ˆã†ã«ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚ŒãŸIPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。ã“ã‚Œã¯ã‚µã‚¤ãƒˆé–“VPNã§ã‚ã‚‹ã€å ´åˆã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆLANã«å…¥ã‚‹/ sã“ã¡ã‚‰ã€‚ã‚ãªãŸã ã‘ã®ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã™ã‚‹ãŸã‚ã«ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§"
+
+#: usr/local/www/vpn_openvpn_client.php:909
+#: usr/local/www/vpn_openvpn_client.php:909
+msgid "EXAMPLE:"
+msgstr "例:"
+
+#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211
+#: usr/local/www/status_openvpn.php:211
+msgid "Show Routing Table"
+msgstr "ショールーティングテーブル"
+
+#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211
+#: usr/local/www/status_openvpn.php:211
+msgid "Display OpenVPN's internal routing table for this server."
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã®OpenVPNã®å†…部ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルを表示ã—ã¾ã™ã€‚"
+
+#: usr/local/www/status_openvpn.php:207 usr/local/www/status_openvpn.php:217
+#: usr/local/www/status_openvpn.php:217
+msgid "Routing Table"
+msgstr "経路指定テーブル"
+
+#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:226
+#: usr/local/www/status_openvpn.php:226
+msgid "Target Network"
+msgstr "ターゲットãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:227
+#: usr/local/www/status_openvpn.php:227
+msgid "Last Used"
+msgstr "最後ã«ä½¿ç”¨ã—ãŸ"
+
+#: usr/local/www/status_openvpn.php:239 usr/local/www/status_openvpn.php:249
+#: usr/local/www/status_openvpn.php:249
+msgid ""
+"An IP address followed by C indicates a host currently connected through the "
+"VPN."
+msgstr "VPN "Cã«ç¶šãIPアドレスã¯ã€ç¾åœ¨ã‚’介ã—ã¦æŽ¥ç¶šã•ã‚ŒãŸãƒ›ã‚¹ãƒˆã‚’示ã™ã€Œ 。"
+
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114
+#: usr/local/www/fbegin.inc:218 usr/local/www/diag_testport.php:49
+#: usr/local/www/diag_testport.php:114 usr/local/www/fbegin.inc:218
+msgid "Test Port"
+msgstr "テストãƒãƒ¼ãƒˆ"
+
+#: usr/local/www/diag_testport.php:64 usr/local/www/diag_testport.php:64
+msgid "Please enter a valid IP or hostname."
+msgstr "有効ãªIPã¾ãŸã¯ãƒ›ã‚¹ãƒˆåを入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_testport.php:68 usr/local/www/diag_testport.php:68
+msgid "Please enter a valid port number."
+msgstr "有効ãªãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_testport.php:72 usr/local/www/diag_testport.php:72
+msgid "Please enter a valid source port number, or leave the field blank."
+msgstr "有効ãªé€ä¿¡å…ƒãƒãƒ¼ãƒˆç•ªå·ã‚’入力ã™ã‚‹ã‹ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’空白ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_testport.php:76 usr/local/www/diag_testport.php:76
+msgid "You cannot connect to an IPv4 address using IPv6."
+msgstr "ã‚ãªãŸã¯ã€ IPv6を使用ã—ã¦ã€IPv4アドレスã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/diag_testport.php:79 usr/local/www/diag_testport.php:79
+msgid "You cannot connect to an IPv6 address using IPv4."
+msgstr "ã‚ãªãŸã¯IPv4を使用ã—ã¦IPv6アドレスã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/diag_testport.php:106 usr/local/www/diag_testport.php:106
+msgid ""
+"This page allows you to perform a simple TCP connection test to determine if "
+"a host is up and accepting connections on a given port. This test does not "
+"function for UDP since there is no way to reliably determine if a UDP port "
+"accepts connections in this manner."
+msgstr "ホストãŒèµ·å‹•ã—ã¦æŒ‡å®šã•ã‚ŒãŸãƒãƒ¼ãƒˆã§æŽ¥ç¶šã‚’å—ã‘入れã¦ã„ã‚‹ã€ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«ã€å˜ç´”ãªTCP接続テストを実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。ã“ã®ãƒ†ã‚¹ãƒˆã§ã¯ã€ã“ã®ã‚ˆã†ã«æŽ¥ç¶šã‚’å—ã‘付ã‘る「UDPã®ãŸã‚ã®æ©Ÿèƒ½ã¯ã€UDPãƒãƒ¼ãƒˆãŒã‚ã‚Œã°ã€ç¢ºå®Ÿã«åˆ¤åˆ¥ã™ã‚‹æ–¹æ³•ãŒãªã„ã®ã§ã€ 「ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/diag_testport.php:108 usr/local/www/diag_testport.php:108
+msgid ""
+"No data is transmitted to the remote host during this test, it will only "
+"attempt to open a connection and optionally display the data sent back from "
+"the server."
+msgstr "「データã¯ã€ã“ã®è©¦é¨“中ã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«é€ä¿¡ã•ã‚Œã¦ã„ãªã„ã€ãã‚Œã ã‘ã« "接続を開ãã€å¿…è¦ã«å¿œã˜ã¦ã‚µãƒ¼ãƒã€ã‹ã‚‰è¿”信データを表示ã—よã†ã€‚"
+
+#: usr/local/www/diag_testport.php:132 usr/local/www/diag_testport.php:132
+msgid "This should typically be left blank."
+msgstr "ã“ã‚Œã¯é€šå¸¸ã€ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。"
+
+#: usr/local/www/diag_testport.php:136 usr/local/www/diag_testport.php:136
+msgid "Show Remote Text"
+msgstr "リモートテキストを表示"
+
+#: usr/local/www/diag_testport.php:139 usr/local/www/diag_testport.php:139
+msgid ""
+"Shows the text given by the server when connecting to the port. Will take "
+"10+ seconds to display if checked."
+msgstr "ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«10秒"ãƒãƒ¼ãƒˆã«æŽ¥ç¶šã—ãŸå ´åˆã€ã‚µãƒ¼ãƒãƒ¼ã«ã‚ˆã£ã¦æŒ‡å®šã•ã‚ŒãŸãƒ†ã‚­ã‚¹ãƒˆã¯é€£ã‚Œã¦è¡Œã£ã¦ãã‚Œã¾ã›ã‚“示ã—ã¦ã„ã¾ã™ã€ 。"
+
+#: usr/local/www/diag_testport.php:159 usr/local/www/diag_testport.php:161
+#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_ping.php:102
+#: usr/local/www/diag_testport.php:161 usr/local/www/diag_traceroute.php:104
+#: usr/local/www/diag_ping.php:102
+msgid "IP Protocol"
+msgstr "IPプロトコル"
+
+#: usr/local/www/diag_testport.php:166 usr/local/www/diag_testport.php:168
+#: usr/local/www/diag_testport.php:168
+msgid "IPv4"
+msgstr "IPv4ã®"
+
+#: usr/local/www/diag_testport.php:169 usr/local/www/diag_testport.php:171
+#: usr/local/www/diag_testport.php:171
+msgid "IPv6"
+msgstr "IPv6ã®"
+
+#: usr/local/www/diag_testport.php:173 usr/local/www/diag_testport.php:175
+#: usr/local/www/diag_testport.php:175
+msgid ""
+"If you force IPv4 or IPv6 and use a hostname that does not contain a result "
+"using that protocol, it will result in an error. For example if you force "
+"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will "
+"not work."
+msgstr ""ã‚ãªãŸã¯IPv4ã¾ãŸã¯IPv6を強制ã—ã€ãã®çµæžœãŒå«ã¾ã‚Œã¦ã„ãªã„ホストåを使用ã™ã‚‹å ´åˆã€ã€Œãã®ãƒ—ロトコルを使用ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚ã‚ãªãŸãŒå¼·åˆ¶çš„ã«ãŸã¨ãˆã°ã€Œ IPv4ã®ãŒå”¯ä¸€AAAA IPv6ã®IPアドレスを返ã™ãƒ›ã‚¹ãƒˆåを使用ã—ã€ãã‚ŒãŒã—ã¾ã™ã€ã¯å‹•ä½œã—ã¾ã›ã€‚"
+
+#: usr/local/www/diag_testport.php:186 usr/local/www/diag_testport.php:188
+#: usr/local/www/diag_testport.php:188
+msgid "Port Test Results"
+msgstr "ãƒãƒ¼ãƒˆãƒ†ã‚¹ãƒˆçµæžœ"
+
+#: usr/local/www/diag_testport.php:246 usr/local/www/diag_testport.php:248
+#: usr/local/www/diag_testport.php:248
+msgid ""
+"No output received, or connection failed. Try with "Show Remote Text" "
+"unchecked first."
+msgstr "「何も出力ãŒå—ä¿¡ã•ã‚Œãªã„ã€ã¾ãŸã¯æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã§è©¦ã—ã¦ã¿ã¦ãã ã•ã„ã€ã®è¡¨ç¤ºãƒªãƒ¢ãƒ¼ãƒˆãƒ†ã‚­ã‚¹ãƒˆ""ãƒã‚§ãƒƒã‚¯ã—ãªã„第一。"
+
+#: usr/local/www/diag_testport.php:248 usr/local/www/diag_testport.php:250
+#: usr/local/www/diag_testport.php:250
+msgid "Connection failed (Refused/Timeout)"
+msgstr "接続ã¯ï¼ˆæ‹’å¦/タイムアウト)ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/firewall_nat_edit.php:780
+#: usr/local/www/firewall_nat_out_edit.php:647
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_out_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:1301
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_rules_edit.php:1301
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_nat_out_edit.php:659
+msgid ""
+"Hint: This prevents the rule on Master from automatically syncing to other "
+"CARP members. This does NOT prevent the rule from being overwritten on Slave."
+msgstr ""ヒント:ã“ã‚Œã¯ã€è‡ªå‹•çš„ã«ä»–ã®ã¨åŒæœŸã‹ã‚‰ãƒžã‚¹ã‚¿ãƒ¼ã«ãƒ«ãƒ¼ãƒ«ã‚’防ã「 CARPã®ãƒ¡ãƒ³ãƒãƒ¼ã€‚ã“ã‚Œã¯ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ä¸Šæ›¸ãã•ã‚Œãªã„ルールを防ãã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_qinq.php:68 usr/local/www/interfaces_qinq.php:68
+msgid "QinQ interface does not exist"
+msgstr "QinQã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯å­˜åœ¨ã—ã¾ã›ã‚“"
+
+#: usr/local/www/interfaces_vlan_edit.php:84
+#: usr/local/www/interfaces_vlan_edit.php:84
+msgid "Interface supplied as parent is invalid"
+msgstr "親ã¨ã—ã¦ä»˜å±žã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒç„¡åŠ¹ã§ã™"
+
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:153
+#: usr/local/www/system_firmware_settings.php:153
+#, php-format
+msgid ""
+"Entries denoted by "Current architecture" match the architecture of your "
+"current installation, such as %s. Changing architectures during an upgrade "
+"is not recommended, and may require a manual reboot after the update "
+"completes."
+msgstr "ç¾åœ¨ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã€ã§ç¤ºã™ã‚¨ãƒ³ãƒˆãƒªã¯ã€ãªã©%s.ãªã©ã®ç¾åœ¨ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ 「ã‚ãªãŸã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã¨ä¸€è‡´ã€ã‚¢ãƒƒãƒ—グレード中ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã‚’変更ã—ã¦ã‚‚〠「推奨ã•ã‚Œã¦ãŠã‚‰ãšã€æ›´æ–°å¾Œæ‰‹å‹•ã§å†èµ·å‹•ãŒå¿…è¦ãªå ´åˆãŒã‚ã‚Šã€ã€Œå®Œäº†ã™ã‚‹ã€‚"
+
+#: usr/local/www/interfaces_lagg_edit.php:95
+#: usr/local/www/interfaces_lagg_edit.php:98
+#: usr/local/www/interfaces_lagg_edit.php:95
+#: usr/local/www/interfaces_lagg_edit.php:98
+msgid "Interface supplied as member is invalid"
+msgstr "メンãƒãƒ¼ã¨ã—ã¦ä»˜å±žã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒç„¡åŠ¹ã§ã™"
+
+#: usr/local/www/interfaces_lagg_edit.php:101
+#: usr/local/www/interfaces_lagg_edit.php:101
+msgid "Protocol supplied is invalid"
+msgstr "付属議定書ã¯ç„¡åŠ¹ã§ã‚ã‚‹"
+
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_captiveportal_expire.php:73
+#: usr/local/www/status_captiveportal_vouchers.php:112
+#: usr/local/www/status_captiveportal.php:110
+#: usr/local/www/status_captiveportal_test.php:75
+#: usr/local/www/status_captiveportal_voucher_rolls.php:79
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_captiveportal_expire.php:73
+#: usr/local/www/status_captiveportal_vouchers.php:112
+#: usr/local/www/status_captiveportal.php:110
+#: usr/local/www/status_captiveportal_test.php:75
+#: usr/local/www/status_captiveportal_voucher_rolls.php:79
+msgid "Expire Vouchers"
+msgstr "ãƒã‚¦ãƒãƒ£ãƒ¼ã®æœ‰åŠ¹æœŸé™"
+
+#: usr/local/www/status_captiveportal_expire.php:86
+#: usr/local/www/status_captiveportal_expire.php:86
+msgid ""
+"Enter multiple vouchers separated by space or newline. All valid vouchers "
+"will be marked as expired"
+msgstr "「空白や改行ã§åŒºåˆ‡ã‚‰ã‚ŒãŸè¤‡æ•°ã®ä¼ç¥¨ã‚’入力ã—ã¾ã™ã€‚ã™ã¹ã¦ã®æœ‰åŠ¹ãªã‚¯ãƒ¼ãƒãƒ³ã€ã¯æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•ã‚Œã¾ã™"
+
+#: usr/local/www/firewall_nat_edit.php:835
+#: usr/local/www/firewall_nat_edit.php:847
+#: usr/local/www/firewall_nat_edit.php:848
+#: usr/local/www/firewall_nat_edit.php:848
+msgid ""
+"NOTE: The "pass" selection does not work properly with Multi-WAN. It will "
+"only work on an interface containing the default gateway."
+msgstr ""注: 「åˆæ ¼ã€ã®é¸æŠžã¯ã€è¤‡æ•°WANã§æ­£ã—ã動作ã—ãªã„ã“ã¨ãŒã—ã¾ã™ã€‚ ã€ã ã‘デフォルトゲートウェイをå«ã‚€ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ä¸Šã§å‹•ä½œã™ã‚‹ã€‚"
+
+#: usr/local/www/interfaces_vlan.php:71 usr/local/www/interfaces_vlan.php:71
+msgid "Invalid VLAN interface."
+msgstr "無効ãªVLANインターフェイス。"
+
+#: usr/local/www/interfaces_gif_edit.php:87
+#: usr/local/www/interfaces_gif_edit.php:87
+msgid ""
+"The alias IP address family has to match the family of the remote peer "
+"address."
+msgstr "アドレス「エイリアスIPアドレスファミリーã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ”ã‚¢ã®å®¶æ—を一致ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_dhcp_edit.php:193
+#: usr/local/www/services_dhcp_edit.php:193
+msgid ""
+"The IP address must not be within the range configured on a DHCP pool for "
+"this interface."
+msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®ã€ŒIPアドレスãŒç”¨DHCPプールã«è¨­å®šã•ã‚ŒãŸç¯„囲内ã§ã‚ã£ã¦ã¯ãªã‚‰ãªã„〠。"
+
+#: usr/local/www/services_dhcp_edit.php:388
+#: usr/local/www/services_dhcp_edit.php:388
+msgid "ARP Table Static Entry"
+msgstr "ARPテーブルスタティックエントリ"
+
+#: usr/local/www/services_dhcp_edit.php:391
+#: usr/local/www/services_dhcp_edit.php:391
+msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. "
+msgstr "ã“ã®MAC & IPアドレスã®ãƒšã‚¢ã®ãŸã‚ã®ARPテーブルã®ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ã‚¨ãƒ³ãƒˆãƒªã‚’作æˆã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:117
+#: usr/local/www/firewall_virtual_ip_edit.php:117
+msgid "This IP address is being used by another interface or VIP."
+msgstr "ã“ã®IPアドレスã¯åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¾ãŸã¯VIPã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/diag_traceroute.php:122 usr/local/www/diag_traceroute.php:141
+#: usr/local/www/diag_traceroute.php:141
+msgid "Reverse Address Lookup"
+msgstr "逆アドレス検索"
+
+#: usr/local/www/interfaces_bridge.php:70
+#: usr/local/www/interfaces_bridge.php:70
+msgid "Invalid bridge interface."
+msgstr "無効ãªãƒ–リッジ·インターフェース。"
+
+#: usr/local/www/diag_smart.php:339 usr/local/www/diag_smart.php:339
+msgid "Perform Self-tests"
+msgstr "セルフテストを実行ã™ã‚‹"
+
+#: usr/local/www/diag_smart.php:384 usr/local/www/diag_smart.php:384
+msgid "Self-test"
+msgstr "セルフテスト"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1485
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1428
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1365
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1226
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225
+msgid "Connections From Upstream SIP Server"
+msgstr "上æµã®SIPサーãƒã‹ã‚‰ã®æŽ¥ç¶š"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1499
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1442
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1379
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1240
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239
+msgid "Connections To Upstream SIP Server"
+msgstr "上æµSIPサーãƒãƒ¼ã¸ã®æŽ¥ç¶š"
+
+#: usr/local/www/vpn_pppoe_edit.php:149 usr/local/www/vpn_pppoe_edit.php:149
+msgid "Wrong data submitted"
+msgstr "æ出ã•ã‚Œã€èª¤ã£ãŸãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/license.php:158 usr/local/www/license.php:158
+msgid "1992-2012 The FreeBSD Project. All rights reserved"
+msgstr "1992-2012ザ· FreeBSDプロジェクト。無断複写·転載をç¦ã˜ã¾ã™"
+
+#: usr/local/www/license.php:161 usr/local/www/license.php:161
+msgid "1999-2010 The PHP Group. All rights reserved."
+msgstr "1999-2010ザ· PHPグループ。無断複写·転載をç¦ã˜ã¾ã™ã€‚"
+
+#: usr/local/www/license.php:164 usr/local/www/license.php:164
+msgid "2004, Jan Knescke, incremental"
+msgstr "2004 ã€ãƒ¤ãƒ³Knescke ã€ã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ã‚¿ãƒ«"
+
+#: usr/local/www/license.php:168 usr/local/www/license.php:168
+msgid "2004-2012 Internet Software Consortium, Inc."
+msgstr "2004-2012 Internet Software Consortiumã®æ ªå¼ä¼šç¤¾"
+
+#: usr/local/www/license.php:169 usr/local/www/license.php:169
+msgid "1995-2003 Internet Software Consortium"
+msgstr "1995-2003 Internet Software Consortiumã®"
+
+#: usr/local/www/services_dhcp.php:352 usr/local/www/services_dhcp.php:372
+#: usr/local/www/services_dhcp.php:372
+msgid ""
+"The specified range must not be within the DHCP range for this interface."
+msgstr "「指定ã•ã‚ŒãŸç¯„囲ã¯ã€ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®DHCP範囲内ã«ã‚ã£ã¦ã¯ãªã‚‰ãªã„。"
+
+#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:381
+#: usr/local/www/services_dhcp.php:381
+msgid ""
+"The specified range must not be within the range configured on a DHCP pool "
+"for this interface."
+msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã€ŒæŒ‡å®šã•ã‚ŒãŸç¯„囲ã¯ã€ DHCPプールã«è¨­å®šã•ã‚ŒãŸç¯„囲内ã§ã‚ã£ã¦ã¯ãªã‚‰ãªã„〠。"
+
+#: usr/local/www/services_dhcp.php:713 usr/local/www/services_dhcp.php:733
+#: usr/local/www/services_dhcp.php:733
+msgid "Pool Description"
+msgstr "プールã®èª¬æ˜Ž"
+
+#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:923
+#: usr/local/www/services_dhcp.php:923
+msgid ""
+"Leave blank to disable. Enter the interface IP address of the other "
+"machine. Machines must be using CARP. Interface's advskew determines "
+"whether the DHCPd process is Primary or Secondary. Ensure one machine's "
+"advskew<20 (and the other is >20)."
+msgstr "「無効ã«ã™ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹IPアドレスを入力ã—〠"マシンを。マシンã¯ã€CARPを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚インタフェースã®advskewã¯ã€Œã®dhcpdプロセスãŒãƒ—ライマリã¾ãŸã¯ã‚»ã‚«ãƒ³ãƒ€ãƒªã§ã‚ã‚‹ã‹ã©ã†ã‹ã€‚ 1マシンã®ç¢ºèªã€ã‚’決定advskew u003c 20 (他方ã¯u003e 20) 。"
+
+#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:966
+#: usr/local/www/services_dhcp.php:966
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this\n"
+"ttttttbox DHCP lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr "「デフォルトã®DHCPã§ãƒªãƒ¼ã‚¹ã¯UTC時間ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§this\n 「 ttttttbox DHCPリース時間ã¯ç¾åœ°æ™‚é–“ã§è¡¨ç¤ºã•ã‚Œã€é¸æŠžã—ãŸã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã€ã«è¨­å®šã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ã™ã¹ã¦ã®DHCPインターフェイスã®ãƒªãƒ¼ã‚¹æ™‚é–“ã®ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:1146 usr/local/www/services_dhcp.php:1166
+#: usr/local/www/services_dhcp.php:1166
+msgid "DHCP Static Mappings for this interface."
+msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®DHCPé™çš„マッピング。"
+
+#: usr/local/www/diag_system_pftop.php:133
+#: usr/local/www/diag_system_pftop.php:133
+msgid "View type:"
+msgstr "ビューã®ç¨®é¡žï¼š"
+
+#: usr/local/www/diag_system_pftop.php:136
+#: usr/local/www/diag_system_pftop.php:136
+msgid "Label"
+msgstr "ラベル"
+
+#: usr/local/www/diag_system_pftop.php:141
+#: usr/local/www/diag_system_pftop.php:141
+msgid "Speed"
+msgstr "スピード"
+
+#: usr/local/www/diag_system_pftop.php:150
+#: usr/local/www/diag_system_pftop.php:150
+msgid "Age"
+msgstr "時代"
+
+#: usr/local/www/diag_system_pftop.php:151
+#: usr/local/www/diag_system_pftop.php:151
+msgid "Bytes"
+msgstr "ãƒã‚¤ãƒˆ"
+
+#: usr/local/www/diag_system_pftop.php:152
+#: usr/local/www/diag_system_pftop.php:152
+msgid "Destination Address"
+msgstr "宛先アドレス"
+
+#: usr/local/www/diag_system_pftop.php:154
+#: usr/local/www/diag_system_pftop.php:154
+msgid "Expiry"
+msgstr "満了"
+
+#: usr/local/www/diag_system_pftop.php:156
+#: usr/local/www/diag_system_pftop.php:156
+msgid "Peak"
+msgstr "ピーク"
+
+#: usr/local/www/diag_system_pftop.php:157
+#: usr/local/www/diag_system_pftop.php:157
+msgid "Packet"
+msgstr "パケット"
+
+#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_testport.php:143
+#: usr/local/www/diag_traceroute.php:113 usr/local/www/diag_ping.php:111
+#: usr/local/www/diag_testport.php:143 usr/local/www/diag_traceroute.php:113
+#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_ping.php:111
+msgid "Source Address"
+msgstr "é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: usr/local/www/diag_system_pftop.php:166
+#: usr/local/www/diag_system_pftop.php:166
+msgid "Number of States:"
+msgstr "状態ã®æ•°ï¼š"
+
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:404
+msgid "On AC Power Mode"
+msgstr "ACé›»æºãƒ¢ãƒ¼ãƒ‰ã‚ªãƒ³"
+
+#: usr/local/www/system_advanced_misc.php:365
+#: usr/local/www/system_advanced_misc.php:412
+#: usr/local/www/system_advanced_misc.php:412
+msgid "On Battery Power Mode"
+msgstr "ãƒãƒƒãƒ†ãƒªé›»æºãƒ¢ãƒ¼ãƒ‰ã‚ªãƒ³"
+
+#: usr/local/www/bandwidth_by_ip.php:24 usr/local/www/bandwidth_by_ip.php:24
+msgid "Wrong Interface"
+msgstr "誤ã£ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹"
+
+#: usr/local/www/services_dhcpv6.php:601 usr/local/www/services_dhcpv6.php:601
+msgid "Prefix Delegation Size"
+msgstr "接頭委任サイズ"
+
+#: usr/local/www/services_dhcpv6.php:846 usr/local/www/services_dhcpv6.php:846
+msgid "DHCPv6 Static Mappings for this interface."
+msgstr "ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®DHCPv6ã®é™çš„マッピング。"
+
+#: usr/local/www/system_authservers.php:217
+#: usr/local/www/system_authservers.php:217
+msgid "RADIUS Timeout value must be numeric and positive."
+msgstr "RADIUSã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€æ•°å€¤ã€æ­£ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_authservers.php:731
+#: usr/local/www/system_authservers.php:731
+msgid "Authentication Timeout"
+msgstr "èªè¨¼ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ"
+
+#: usr/local/www/system_authservers.php:734
+#: usr/local/www/system_authservers.php:734
+msgid ""
+"This value controls how long, in seconds, that the RADIUS server may take to "
+"respond to an authentication request."
+msgstr "èªè¨¼è¦æ±‚ã«å¿œç­”ã—ã€ã€Œ RADIUSサーãƒã«ã‹ã‹ã‚‹å ´åˆãŒã‚ã‚‹ã“ã¨ç§’ã“ã®å€¤ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã®ã©ã®ãらã„〠〠〠。"
+
+#: usr/local/www/system_authservers.php:735
+#: usr/local/www/system_authservers.php:735
+msgid "If left blank, the default value is 5 seconds."
+msgstr "空白ã®å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯5秒ã§ã™ã€‚"
+
+#: usr/local/www/system_authservers.php:736
+#: usr/local/www/system_authservers.php:736
+msgid ""
+"NOTE: If you are using an interactive two-factor authentication system, "
+"increase this timeout to account for how long it will take the user to "
+"receive and enter a token."
+msgstr ""注:対話型ã®2è¦ç´ èªè¨¼ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ 「ãã‚Œã¯"å—ä¿¡ã—ãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’入力ã™ã‚‹ã‚ˆã†ã«ãƒ¦ãƒ¼ã‚¶ã«ã‹ã‹ã‚‹æ™‚間を考慮ã—ã¦ã€ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’増やã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:80
+#: usr/local/www/system_advanced_firewall.php:80
+msgid "The Firewall Adaptive values must be set together."
+msgstr "ファイアウォールé©å¿œå€¤ã‚’一緒ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:82
+#: usr/local/www/system_advanced_firewall.php:82
+msgid "The Firewall Adaptive Start value must be an integer."
+msgstr "ファイアウォールé©å¿œStart値ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:85
+#: usr/local/www/system_advanced_firewall.php:85
+msgid "The Firewall Adaptive End value must be an integer."
+msgstr "ファイアウォールé©å¿œçµ‚了値ã¯æ•´æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_firewall.php:345
+#: usr/local/www/system_advanced_firewall.php:346
+#: usr/local/www/system_advanced_firewall.php:346
+msgid "Firewall Adaptive Timeouts"
+msgstr "ファイアウォールアダプティブタイムアウト"
+
+#: usr/local/www/system_advanced_firewall.php:347
+#: usr/local/www/system_advanced_firewall.php:348
+#: usr/local/www/system_advanced_firewall.php:348
+msgid ""
+"Timeouts for states can be scaled adaptively as the number of state table "
+"entries grows."
+msgstr "æˆé•·ã®ã‚¨ãƒ³ãƒˆãƒª"状態ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€çŠ¶æ…‹ãƒ†ãƒ¼ãƒ–ルã®æ•°ãŒé©å¿œçš„ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: usr/local/www/system_advanced_firewall.php:350
+#: usr/local/www/system_advanced_firewall.php:351
+#: usr/local/www/system_advanced_firewall.php:351
+msgid ""
+"When the number of state entries exceeds this value, adaptive scaling "
+"begins. All timeout values are scaled linearly with factor (adaptive.end - "
+"number of states) / (adaptive.end - adaptive.start)."
+msgstr "「状態エントリã®æ•°ãŒã“ã®å€¤ã‚’超ãˆã‚‹ã¨ã€é©å¿œã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã€ã¯å§‹ã¾ã‚‹ã€‚ / ( adaptive.end - adaptive.start ) - ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€å› å­ï¼ˆã€ŒçŠ¶æ…‹æ•°adaptive.end )ã¨ç›´ç·šçš„ã«ã‚¹ã‚±ãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_firewall.php:354
+#: usr/local/www/system_advanced_firewall.php:355
+#: usr/local/www/system_advanced_firewall.php:355
+msgid ""
+"When reaching this number of state entries, all timeout values become zero, "
+"effectively purging all state entries immediately. This value is used to "
+"define the scale factor, it should not actually be reached (set a lower "
+"state limit, see below)."
+msgstr "事実上ã€ã™ãã«ã™ã¹ã¦ã®çŠ¶æ…‹ã®é …目をパージã™ã‚‹ã€çŠ¶æ…‹ã‚¨ãƒ³ãƒˆãƒªã®ã“ã®æ•°ã«é”ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã¯ã€ã‚¼ãƒ­ã«ãªã‚‹ã€ 。ã“ã®å€¤ã¯ã€ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹"(下記å‚ç…§ã€çŠ¶æ…‹åˆ¶é™ã‚¹ã‚±ãƒ¼ãƒ«ãƒ•ã‚¡ã‚¯ã‚¿ã‚’定義ã™ã‚‹ãŒã€å®Ÿéš›ã«ã¯ã‚ˆã‚Šä½Žã„セット)ã«åˆ°é”ã™ã¹ãã§ã¯ãªã„〠。"
+
+#: usr/local/www/system_advanced_firewall.php:356
+#: usr/local/www/system_advanced_firewall.php:357
+#: usr/local/www/system_advanced_firewall.php:357
+msgid "Note: Leave this blank for the default(0)."
+msgstr "注:デフォルトã¯ã€ã“ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ï¼ˆ 0 ) 。"
+
+#: usr/local/www/system_advanced_firewall.php:447
+#: usr/local/www/system_advanced_firewall.php:448
+#: usr/local/www/system_advanced_firewall.php:448
+msgid "Bogon Networks"
+msgstr "Bogonãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
+
+#: usr/local/www/system_advanced_firewall.php:450
+#: usr/local/www/system_advanced_firewall.php:451
+#: usr/local/www/system_advanced_firewall.php:451
+msgid "Update Frequency"
+msgstr "更新頻度"
+
+#: usr/local/www/system_advanced_firewall.php:453
+#: usr/local/www/system_advanced_firewall.php:454
+#: usr/local/www/system_advanced_firewall.php:454
+msgid "Monthly"
+msgstr "毎月"
+
+#: usr/local/www/system_advanced_firewall.php:454
+#: usr/local/www/system_advanced_firewall.php:455
+#: usr/local/www/system_advanced_firewall.php:455
+msgid "Weekly"
+msgstr "毎週"
+
+#: usr/local/www/system_advanced_firewall.php:455
+#: usr/local/www/system_advanced_firewall.php:456
+#: usr/local/www/system_advanced_firewall.php:456
+msgid "Daily"
+msgstr "日々"
+
+#: usr/local/www/system_advanced_firewall.php:458
+#: usr/local/www/system_advanced_firewall.php:459
+#: usr/local/www/system_advanced_firewall.php:459
+msgid ""
+"The frequency of updating the lists of IP addresses that are reserved (but "
+"not RFC 1918) or not yet assigned by IANA."
+msgstr "「 ( 1918å¹´ã®RFCã§ã¯ãªã„ã‹ã€ã¾ã IANAã«ã‚ˆã£ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„予約済ã¿ã¾ã™ãŒï¼‰ã•ã‚Œã¦ã„ã‚‹IPアドレスã®ãƒªã‚¹ãƒˆã‚’æ›´æ–°ã™ã‚‹é »åº¦ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:227
+#: usr/local/www/services_captiveportal.php:243
+#: usr/local/www/services_captiveportal.php:243
+msgid ""
+"The NAS-Identifier must be 3-253 characters long and should only contain "
+"ASCII characters."
+msgstr "ASCII文字を「NAS-識別å­ã¯3ã‹ã‚‰253文字ã®é•·ã•ã§ãªã‘ã‚Œã°ãªã‚‰ãšã€å”¯ä¸€ã®å«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€ 。"
+
+#: usr/local/www/services_captiveportal.php:593
+#: usr/local/www/services_captiveportal.php:609
+#: usr/local/www/services_captiveportal.php:609
+msgid "Allow only users/groups with 'Captive portal login' privilege set"
+msgstr "「キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ­ã‚°ã‚¤ãƒ³ã€ã®æ¨©é™ãŒè¨­å®šã•ã‚Œã¦ã„る唯一ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼/グループを許å¯"
+
+#: usr/local/www/services_captiveportal.php:760
+#: usr/local/www/services_captiveportal.php:776
+#: usr/local/www/services_captiveportal.php:776
+msgid "MAC authentication secret"
+msgstr "MACèªè¨¼ã®ç§˜å¯†"
+
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:839
+#: usr/local/www/services_captiveportal.php:839
+msgid "Accounting Style"
+msgstr "会計スタイル"
+
+#: usr/local/www/services_captiveportal.php:824
+#: usr/local/www/services_captiveportal.php:840
+#: usr/local/www/services_captiveportal.php:840
+msgid "Invert Acct-Input-Octets and Acct-Output-Octets"
+msgstr "å転ACCT-入力·オクテットãŠã‚ˆã³acct -出力 - オクテット"
+
+#: usr/local/www/services_captiveportal.php:825
+#: usr/local/www/services_captiveportal.php:841
+#: usr/local/www/services_captiveportal.php:841
+msgid ""
+"When this is enabled, data counts for RADIUS accounting packets will be "
+"taken from the client perspective, not the NAS. Acct-Input-Octets will "
+"represent download, and Acct-Output-Octets will represent upload."
+msgstr "「ã“れを有効ã«ã™ã‚‹ã¨ã€ RADIUSアカウンティングパケットã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒã•ã‚Œã€ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®è¦³ç‚¹ã§ã¯ãªãã€NASã‹ã‚‰æ’®å½±ã€‚ ACCT-入力·オクテットã¯ã€Œãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’表ç¾ã—〠ACCT-出力 - オクテットã¯ã€ã‚¢ãƒƒãƒ—ロードを表ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:845
+#: usr/local/www/services_captiveportal.php:845
+msgid "NAS Identifier"
+msgstr "NASã®è­˜åˆ¥å­"
+
+#: usr/local/www/services_captiveportal.php:831
+#: usr/local/www/services_captiveportal.php:847
+#: usr/local/www/services_captiveportal.php:847
+msgid "Specify a NAS identifier to override the default value"
+msgstr "デフォルト値を上書ãã™ã‚‹ãŸã‚ã«ã€NAS識別å­ã‚’指定ã™ã‚‹"
+
+#: usr/local/www/pkg_mgr_install.php:193 usr/local/www/pkg_mgr_install.php:189
+#: usr/local/www/pkg_mgr_install.php:189
+msgid "No packages are installed."
+msgstr "何ã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_bridge_edit.php:154
+#: usr/local/www/interfaces_bridge_edit.php:154
+msgid "A member interface passed does not exist in configuration"
+msgstr "渡ã•ã‚ŒãŸãƒ¡ãƒ³ãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¯ã€ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«å­˜åœ¨ã—ãªã„"
+
+#: usr/local/www/status_queues.php:150 usr/local/www/status_queues.php:150
+msgid "PPS"
+msgstr "PPS"
+
+#: usr/local/www/status_queues.php:152 usr/local/www/status_queues.php:152
+msgid "Borrows"
+msgstr "借用"
+
+#: usr/local/www/status_queues.php:153 usr/local/www/status_queues.php:153
+msgid "Suspends"
+msgstr "を中断"
+
+#: usr/local/www/status_queues.php:154 usr/local/www/status_queues.php:154
+msgid "Drops"
+msgstr "ドロップス"
+
+#: usr/local/www/status_queues.php:155 usr/local/www/status_queues.php:155
+msgid "Length"
+msgstr "é•·ã•"
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78
+msgid "Int."
+msgstr "int型。"
+
+#: usr/local/www/widgets/widgets/log.widget.php:164
+#: usr/local/www/widgets/widgets/log.widget.php:168
+#: usr/local/www/widgets/widgets/log.widget.php:176
+msgid "IF"
+msgstr "IF"
+
+#: usr/local/www/widgets/widgets/log.widget.php:167
+#: usr/local/www/widgets/widgets/log.widget.php:171
+msgid "Prot"
+msgstr "PROT"
+
+#: usr/local/www/services_dnsmasq.php:199
+#: usr/local/www/services_dnsmasq.php:201
+#: usr/local/www/services_dnsmasq.php:222
+#: usr/local/www/services_dnsmasq.php:222
+msgid "DNS Query Forwarding"
+msgstr "DNSクエリ転é€"
+
+#: usr/local/www/services_dnsmasq.php:202
+#: usr/local/www/services_dnsmasq.php:204
+#: usr/local/www/services_dnsmasq.php:225
+#: usr/local/www/services_dnsmasq.php:225
+msgid "Query DNS servers sequentially"
+msgstr "クエリã®DNSサーãƒãƒ¼ãŒé †æ¬¡"
+
+#: usr/local/www/services_dnsmasq.php:203
+#: usr/local/www/services_dnsmasq.php:205
+#: usr/local/www/services_dnsmasq.php:226
+#: usr/local/www/services_dnsmasq.php:226
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers "
+"sequentially in the order specified (<i>System - General Setup - DNS "
+"Servers</i>), rather than all at once in parallel. "
+msgstr "ã‚€ã—ã‚ã€ä¸€åº¦ã®ã™ã¹ã¦ã®ã‚ˆã‚Š - ( - 一般設定ã®DNS 「サーãƒãƒ¼u003c/ I u003eシステムu003cIu003e )指定ã•ã‚ŒãŸé †ã«ã€Œã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€DNSフォワーダ( DNSMASQ )ãŒDNSサーãƒã«å•ã„åˆã‚ã›ã‚’è¡Œã„%s "平行ã§ã‚る。"
+
+#: usr/local/www/services_dnsmasq.php:212
+#: usr/local/www/services_dnsmasq.php:214
+#: usr/local/www/services_dnsmasq.php:235
+#: usr/local/www/services_dnsmasq.php:235
+msgid "Require domain"
+msgstr "ドメインを必è¦ã¨ã™ã‚‹"
+
+#: usr/local/www/services_dnsmasq.php:213
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_dnsmasq.php:236
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA "
+"queries for plain names, without dots or domain parts, to upstream name "
+"servers. If the name is not known from /etc/hosts or DHCP then a "not found"
+"" answer is returned. "
+msgstr "åå‰ã€Œã‚µãƒ¼ãƒãƒ¼ã®ä¸Šæµã€ãƒ‰ãƒƒãƒˆã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã®éƒ¨åˆ†ãªã—ã§ã€ãƒ—レーンãªåå‰ã®ç…§ä¼šã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€DNSフォワーダã¯è»¢é€ã—ã¾ã›ã‚“Aã¾ãŸã¯AAAA ( DNSMASQ ) %s 〠。åå‰ã¯/ etc / hostsファイルã‹ã‚‰çŸ¥ã‚‰ã‚Œã¦ã„ãªã„å ´åˆã¾ãŸã¯DHCPã¯ãã®å¾Œã€ "見ã¤ã‹ã‚Šã¾ã›ã‚“""ç­”ãˆãŒè¿”ã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase1.php:183
+#: usr/local/www/vpn_ipsec_phase1.php:183
+msgid ""
+"A valid remote gateway IPv4 address must be specified or you need to change "
+"protocol to IPv6"
+msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚る〠IPv6ã¸ã®ãƒ—ロトコルを"
+
+#: usr/local/www/vpn_ipsec_phase1.php:185
+#: usr/local/www/vpn_ipsec_phase1.php:185
+msgid ""
+"A valid remote gateway IPv6 address must be specified or you need to change "
+"protocol to IPv4"
+msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚る〠IPv4ã«ãƒ—ロトコルを"
+
+#: usr/local/www/vpn_ipsec_phase1.php:205
+#: usr/local/www/vpn_ipsec_phase1.php:205
+msgid "There is a Phase 2 using IPv6, you cannot use IPv4."
+msgstr "IPv6を使用ã—ã¦ã€ãƒ•ã‚§ãƒ¼ã‚º2ãŒã‚ã‚Šã¾ã™ãŒã€ã‚ãªãŸã¯ã€IPv4を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase1.php:209
+#: usr/local/www/vpn_ipsec_phase1.php:209
+msgid "There is a Phase 2 using IPv4, you cannot use IPv6."
+msgstr "IPv4を使用ã—ã¦ã€ãƒ•ã‚§ãƒ¼ã‚º2ãŒã‚ã‚Šã¾ã™ãŒã€ã‚ãªãŸã¯ã€IPv6を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_openvpn_server.php:1226
+#: usr/local/www/vpn_openvpn_server.php:1226
+msgid "IPv4 Local Network/s"
+msgstr "IPv4ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S"
+
+#: usr/local/www/vpn_openvpn_server.php:1230
+#: usr/local/www/vpn_openvpn_server.php:1230
+msgid ""
+"These are the IPv4 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. "
+"You may leave this blank if you don't want to add a route to the local "
+"network through this tunnel on the remote machine. This is generally set to "
+"your LAN network"
+msgstr "エンドãƒã‚¤ãƒ³ãƒˆã¯"ã“れらã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDR範囲をカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã€‚リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’経由ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’追加ã—ãŸããªã„å ´åˆã¯ã€ã“ã®ç©ºç™½ã‚’残ã™ã“ã¨ã€ 。ã“ã‚Œã¯ä¸€èˆ¬ã«ã€Œ LANãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_openvpn_server.php:1239
+#: usr/local/www/vpn_openvpn_server.php:1239
+msgid "IPv6 Local Network/s"
+msgstr "IPv6ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯/ S"
+
+#: usr/local/www/vpn_openvpn_server.php:1243
+#: usr/local/www/vpn_openvpn_server.php:1243
+msgid ""
+"These are the IPv6 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You "
+"may leave this blank if you don't want to add a route to the local network "
+"through this tunnel on the remote machine. This is generally set to your LAN "
+"network"
+msgstr "エンドãƒã‚¤ãƒ³ãƒˆã¯"ã“れらã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã€IPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã€‚リモートマシン上ã§ã“ã®ãƒˆãƒ³ãƒãƒ«ã‚’通éŽã—ã¦ã€ 「ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒ«ãƒ¼ãƒˆã‚’追加ã—ãªã„å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã‚り〠。ã“ã‚Œã¯ã€ä¸€èˆ¬ã«LAN ã€ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹"
+
+#: usr/local/www/vpn_openvpn_server.php:1256
+#: usr/local/www/vpn_openvpn_server.php:1256
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«ç¢ºç«‹ã§ãã‚‹ã€ã‚ˆã†ã«ã€ã“れらã¯ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚ŒãŸIPv4ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。 1ã¤ä»¥ä¸Šã®CIDRã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã¨ã—ã¦è¡¨ç¾ã—ã¾ã™ã€‚範囲「ã“ã®ã‚ˆã†ã«å…¥åŠ›ã—ã€ã‚µã‚¤ãƒˆé–“VPNã§LANãŒ/ã“ã“ã®ãƒªãƒ¢ãƒ¼ãƒˆã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§"
+
+#: usr/local/www/vpn_openvpn_server.php:1270
+#: usr/local/www/vpn_openvpn_server.php:1270
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr "サイト間VPNを手動ã§ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã€ã®ãƒ†ãƒ¼ãƒ–ルを変更ã›ãšã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãる。 1ã¾ãŸã¯è¤‡æ•°ã®IP /プレフィックスをカンマã§åŒºåˆ‡ã£ãŸãƒªã‚¹ãƒˆã¨ã—ã¦ç™ºç¾ã•ã‚ŒãŸã€ã“れらã¯ã‚ˆã†ã«ã€ãƒˆãƒ³ãƒãƒ«ã‚’介ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚ŒãŸIPv6ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã‚る〠。ã“ã‚Œã¯ã‚µã‚¤ãƒˆé–“VPNã§ã‚ã‚‹ã€å ´åˆã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆLANã«å…¥ã‚‹/ sã“ã¡ã‚‰ã€‚ã‚ãªãŸã¯ã‚µã‚¤ãƒˆé–“VPNを使用ã—ãªã„å ´åˆã¯ã€ã“ã®ã€Œç©ºç™½ã®ã¾ã¾ã«å¯èƒ½æ€§"
+
+#: usr/local/www/vpn_openvpn_server.php:1405
+#: usr/local/www/vpn_openvpn_server.php:1405
+msgid "Topology"
+msgstr "トãƒãƒ­ã‚¸ãƒ¼"
+
+#: usr/local/www/vpn_openvpn_server.php:1415
+#: usr/local/www/vpn_openvpn_server.php:1415
+msgid ""
+"Allocate only one IP per client (topology subnet), rather than an isolated "
+"subnet per client (topology net30)."
+msgstr "クライアントã”ã¨ã«ã‚µãƒ–ãƒãƒƒãƒˆï¼ˆãƒˆãƒãƒ­ã‚¸ãƒ¼net30 ) ã€ã®ã¿1クライアントã”ã¨ã«IP(トãƒãƒ­ã‚¸ã®ã‚µãƒ–ãƒãƒƒãƒˆï¼‰ã®ã§ã¯ãªãã€å­¤ç«‹ã‚’割り当ã¦ã‚‹ã€ 。"
+
+#: usr/local/www/vpn_openvpn_server.php:1422
+#: usr/local/www/vpn_openvpn_server.php:1422
+msgid ""
+"Relevant when supplying a virtual adapter IP address to clients when using "
+"tun mode on IPv4."
+msgstr "「関連ã™ã‚‹ä½¿ç”¨æ™‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ä»®æƒ³ã‚¢ãƒ€ãƒ—ã‚¿ã®IPアドレスを供給ã™ã‚‹éš›ã«ã€ã€Œ IPv4ã®ä¸ŠTUNモードを。"
+
+#: usr/local/www/vpn_openvpn_server.php:1423
+#: usr/local/www/vpn_openvpn_server.php:1423
+msgid ""
+"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/"
+"Android). Others may break if it is present, such as older versions of "
+"OpenVPN or clients such as Yealink phones."
+msgstr "「 ( Androidã®ä¸€éƒ¨ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§ã‚‚ã€ã“ã®ã‚ˆã†ãªOpenVPNã®æŽ¥ç¶šã®iOS / )ãªã©ã®IPv6ã®ãŸã‚ã«ã“れを必è¦ã¨ã™ã‚‹ã“ã¨ã€ 。ãã‚Œã¯ãã®ã‚ˆã†ãª "OpenVPNã®ã‹ãªYealink電話ãªã©ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã€å­˜åœ¨ã™ã‚‹å ´åˆã€ä»–ã«ç ´æã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:133
+#: usr/local/www/vpn_ipsec_phase2.php:133
+msgid ""
+"A valid local network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã€ŒIPv6モードã«"
+
+#: usr/local/www/vpn_ipsec_phase2.php:135
+#: usr/local/www/vpn_ipsec_phase2.php:135
+msgid ""
+"A valid local network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr "「有効ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¯IPv4モードã«"
+
+#: usr/local/www/vpn_ipsec_phase2.php:159
+#: usr/local/www/vpn_ipsec_phase2.php:159
+msgid ""
+"A valid NAT local network IPv4 address must be specified or you need to "
+"change Mode to IPv6"
+msgstr "「有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã¾ãŸã¯æ¬¡ã®ã“ã¨ã‚’è¡Œã†å¿…è¦ãŒã‚ã‚Šã€ã€Œ IPv6ã¸ã®å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_ipsec_phase2.php:161
+#: usr/local/www/vpn_ipsec_phase2.php:161
+msgid ""
+"A valid NAT local network IPv6 address must be specified or you need to "
+"change Mode to IPv4"
+msgstr "「有効ãªNATã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã¾ãŸã¯æ¬¡ã®ã“ã¨ã‚’è¡Œã†å¿…è¦ãŒã‚り〠"IPv4ã«å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰"
+
+#: usr/local/www/vpn_ipsec_phase2.php:183
+#: usr/local/www/vpn_ipsec_phase2.php:183
+msgid ""
+"A valid remote network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv4アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã€ŒIPv6モードã«"
+
+#: usr/local/www/vpn_ipsec_phase2.php:185
+#: usr/local/www/vpn_ipsec_phase2.php:185
+msgid ""
+"A valid remote network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr "「有効ãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®IPv6アドレスを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¯IPv4モードã«"
+
+#: usr/local/www/vpn_ipsec_phase2.php:192
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "Mobile IPsec only supports Tunnel mode."
+msgstr "モãƒã‚¤ãƒ«IPsecã¯ãƒˆãƒ³ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/vpn_ipsec_phase2.php:287
+#: usr/local/www/vpn_ipsec_phase2.php:287
+msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2."
+msgstr "フェーズ1ã¯ã€IPv4を使用ã—ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ãƒ•ã‚§ãƒ¼ã‚º2ã®ãƒˆãƒ³ãƒãƒ«ã«IPv6を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/vpn_ipsec_phase2.php:289
+#: usr/local/www/vpn_ipsec_phase2.php:289
+msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2."
+msgstr "フェーズ1ã¯ã€IPv6を使用ã—ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã¯ã€ãƒ•ã‚§ãƒ¼ã‚º2ã®ãƒˆãƒ³ãƒãƒ«ã¯IPv4を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/interfaces_assign.php:210
+#: usr/local/www/interfaces_assign.php:210
+#, php-format
+msgid ""
+"You cannot set port %s to interface %s because this interface is a member of "
+"%s."
+msgstr "%s. 「ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒãƒ¡ãƒ³ãƒãƒ¼ã¨ãªã£ã¦ã„ã‚‹ãŸã‚ã§ã™%sã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã«ãƒãƒ¼ãƒˆ%sを設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€"
+
+#: usr/local/www/services_snmp.php:395 usr/local/www/services_snmp.php:395
+msgid "UCD"
+msgstr "UCD"
+
+#: usr/local/www/services_snmp.php:397 usr/local/www/services_snmp.php:397
+msgid "Regex"
+msgstr "æ­£è¦è¡¨ç¾"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:560
+#: usr/local/www/interfaces.php:556 usr/local/www/interfaces.php:556
+msgid "This IPv4 address is being used by another interface or VIP."
+msgstr "ã“ã®IPv4アドレスã¯ã€åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¾ãŸã¯VIPã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:565
+#: usr/local/www/interfaces.php:561 usr/local/www/interfaces.php:561
+msgid "This IPv4 address conflicts with a Static Route."
+msgstr "スタティックルートã§ã“ã®IPv4アドレスãŒç«¶åˆã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:577
+#: usr/local/www/interfaces.php:573 usr/local/www/interfaces.php:573
+msgid "This IPv6 address is being used by another interface or VIP."
+msgstr "ã“ã®IPv6アドレスã¯ã€åˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã¾ãŸã¯VIPã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:572 usr/local/www/interfaces.php:582
+#: usr/local/www/interfaces.php:578 usr/local/www/interfaces.php:578
+msgid "This IPv6 address conflicts with a Static Route."
+msgstr "スタティックルートã«ã“ã®IPv6アドレスã¯ç«¶åˆã—ã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:2651 usr/local/www/interfaces.php:2697
+#: usr/local/www/interfaces.php:2686 usr/local/www/interfaces.php:2686
+msgid ""
+"Note: The update frequency can be changed under System->Advanced Firewall/"
+"NAT settings."
+msgstr ""注:更新頻度ã¯ã€System -u003e高度ãªãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«/ã®ä¸‹ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã€ã€Œ NATã®è¨­å®šã‚’è¡Œã„ã¾ã™ã€‚"
+
+#: etc/inc/priv/user.priv.inc:6 etc/inc/priv/user.priv.inc:6
+msgid "User - Services - Captive portal login"
+msgstr "ユーザー - サービス - キャプティブãƒãƒ¼ã‚¿ãƒ«ã®ãƒ­ã‚°ã‚¤ãƒ³"
+
+#: etc/inc/priv/user.priv.inc:7 etc/inc/priv/user.priv.inc:7
+msgid "Indicates whether the user is able to login on the captive portal."
+msgstr "利用者ãŒã‚­ãƒ£ãƒ—ティブãƒãƒ¼ã‚¿ãƒ«ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚"
+
+#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618
+#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618
+#, php-format
+msgid "Package %s is not supported on this version."
+msgstr "パッケージ%sã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“。"
+
+#: etc/inc/priv.defs.inc:732 etc/inc/priv.defs.inc:732
+msgid "WebCfg - Services: Captive portal: Allowed Hostnames page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šå¯ãƒ›ã‚¹ãƒˆåページ"
+
+#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739
+#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739
+msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page."
+msgstr "ページ':キャプティブãƒãƒ¼ã‚¿ãƒ«ãƒ›ã‚¹ãƒˆåå¯ã‚µãƒ¼ãƒ“スã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/priv.defs.inc:738 etc/inc/priv.defs.inc:738
+msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page"
+msgstr "WebCfg - サービス:キャプティブãƒãƒ¼ã‚¿ãƒ«ï¼šç·¨é›†å¯ãƒ›ã‚¹ãƒˆåページ"
+
+#: etc/inc/priv.defs.inc:1136 etc/inc/priv.defs.inc:1136
+msgid "WebCfg - System: User Manager: settings page"
+msgstr "WebCfg - システム:ユーザーマãƒãƒ¼ã‚¸ãƒ£ï¼šè¨­å®šãƒšãƒ¼ã‚¸"
+
+#: etc/inc/priv.defs.inc:1137 etc/inc/priv.defs.inc:1137
+msgid "Allow access to the 'System: User Manager: settings' page."
+msgstr "ページ':ユーザーマãƒãƒ¼ã‚¸ãƒ£ã®è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã€ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚"
+
+#: etc/inc/interfaces.inc:294 etc/inc/interfaces.inc:294
+#, php-format
+msgid "interface_qinq_configure called with invalid if.%s"
+msgstr "interface_qinq_configure無効if.%sã¨å‘¼ã°ã‚Œã‚‹"
+
+#: etc/inc/interfaces.inc:401 etc/inc/interfaces.inc:401
+msgid "Creating wireless clone interfaces..."
+msgstr "ワイヤレスクローン·インターフェースを作æˆã—ã¦ã„ã¾ã™..."
+
+#: etc/inc/interfaces.inc:1139 etc/inc/interfaces.inc:1141
+#: etc/inc/interfaces.inc:1141
+msgid "Wrong parameters used during interface_bring_down"
+msgstr "interface_bring_down中ã«ä½¿ç”¨ã•ã‚Œã€é–“é•ã£ãŸãƒ‘ラメータ"
+
+#: etc/inc/services.inc:2013 etc/inc/services.inc:2053
+#: etc/inc/services.inc:2084 etc/inc/services.inc:2148
+#, php-format
+msgid "Removed cron job for %s"
+msgstr "%sãŸã‚ã«å–り外ã•cronジョブ"
+
+#: etc/inc/openvpn.inc:257 etc/inc/openvpn.inc:257
+#, php-format
+msgid "The field '%s' must contain a single valid %s CIDR range."
+msgstr "フィールド' %s ã€ã¯ã€å˜ä¸€ã®%s有効ãªCIDR範囲ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/openvpn.inc:269 etc/inc/openvpn.inc:269
+#, php-format
+msgid ""
+"The field '%s' must contain only valid %s CIDR range(s) separated by commas."
+msgstr "「フィールド' %sã¯ã€Œå”¯ä¸€ã®æœ‰åŠ¹ãªã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦ã€CIDR範囲(複数å¯ï¼‰ã‚’%så«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/vpn.inc:1780 etc/inc/vpn.inc:1793 etc/inc/vpn.inc:1790
+#, php-format
+msgid ""
+"Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet "
+"'%3$s'. Reloading policy"
+msgstr "「トンãƒãƒ«GW ã€ã¯%1$s'ã‹ã‚‰ã®SPDを削除ã™ã‚‹ã€‚ローカルサブãƒãƒƒãƒˆã‚’「 %2$s ã€ã¨ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ–ãƒãƒƒãƒˆã€ 「 %3$s 〠。ãƒãƒªã‚·ãƒ¼ã®å†ãƒ­ãƒ¼ãƒ‰"
+
+#: etc/inc/pfsense-utils.inc:938 etc/inc/pfsense-utils.inc:938
+msgid "Disabling auto login was not possible."
+msgstr "自動ログインを無効ã«ã™ã‚‹ã¨ã€å¯èƒ½ã§ã¯ãªã‹ã£ãŸã€‚"
+
+#: etc/inc/pfsense-utils.inc:956 etc/inc/pfsense-utils.inc:956
+msgid "Enabled console auto login, console menu is NOT password protected."
+msgstr "有効ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®è‡ªå‹•ãƒ­ã‚°ã‚¤ãƒ³ã¯ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ã€ãƒ‘スワードã§ä¿è­·ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: etc/inc/pfsense-utils.inc:958 etc/inc/pfsense-utils.inc:958
+msgid "Disabled console auto login, console menu is password protected."
+msgstr "[無効]コンソールã®è‡ªå‹•ãƒ­ã‚°ã‚¤ãƒ³ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ãƒ‘スワードã¯ä¿è­·ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: usr/local/www/system_gateways_edit.php:552
+#: usr/local/www/system_gateways_edit.php:582
+#: usr/local/www/system_gateways_edit.php:582
+msgid " - Show advanced option"
+msgstr " - 表示ã™ã‚‹é«˜åº¦ãªã‚ªãƒ—ション"
+
+#: usr/local/www/services_dyndns_edit.php:302
+#: usr/local/www/services_dyndns_edit.php:302
+msgid "Verbose logging"
+msgstr "詳細ログ"
+
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:305
+msgid "verbose logging"
+msgstr "詳細ログ"
+
+#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339
+#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339
+msgid "Bytes Rcvd"
+msgstr "ãƒã‚¤ãƒˆå—ä¿¡æ•°"
+
+#: usr/local/www/status_openvpn.php:385 usr/local/www/status_openvpn.php:385
+msgid ""
+"If you have custom options that override the management features of OpenVPN "
+"on a client or server, they will cause that OpenVPN instance to not work "
+"correctly with this status page."
+msgstr "クライアントã¾ãŸã¯ã‚µãƒ¼ãƒãƒ¼ä¸Šã§ã€Œã‚ãªãŸãŒOpenVPNã®ã®ç®¡ç†æ©Ÿèƒ½ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ションを使用ã—ã¦ã„ã‚‹å ´åˆã€ ã€å½¼ã‚‰ã¯OpenVPNã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸ã§ã¯æ­£ã—ã「動作ã—ãªã„ã“ã¨ãŒç™ºç”Ÿã—ã¾ã™ã€‚"
+
+#: usr/local/www/firewall_rules_edit.php:1579
+#: usr/local/www/firewall_nat_edit.php:863
+#: usr/local/www/firewall_nat_out_edit.php:678
+#: usr/local/www/firewall_rules_edit.php:1590
+#: usr/local/www/firewall_nat_edit.php:864
+#: usr/local/www/firewall_rules_edit.php:1590
+#: usr/local/www/firewall_nat_edit.php:864
+#: usr/local/www/firewall_nat_out_edit.php:678
+msgid "Rule Information"
+msgstr "情報ルール"
+
+#: usr/local/www/firewall_rules_edit.php:1583
+#: usr/local/www/firewall_nat_edit.php:867
+#: usr/local/www/firewall_nat_out_edit.php:682
+#: usr/local/www/firewall_rules_edit.php:1594
+#: usr/local/www/firewall_nat_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:1594
+#: usr/local/www/firewall_nat_edit.php:868
+#: usr/local/www/firewall_nat_out_edit.php:682
+msgid "Created"
+msgstr "作æˆ"
+
+#: usr/local/www/firewall_rules_edit.php:1591
+#: usr/local/www/firewall_nat_edit.php:875
+#: usr/local/www/firewall_nat_out_edit.php:690
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_nat_out_edit.php:690
+msgid "Updated"
+msgstr "æ›´æ–°ã—ãŸ"
+
+#: usr/local/www/diag_logs_filter.php:163
+#: usr/local/www/diag_logs_filter.php:163
+msgid "Source IP Address"
+msgstr "é€ä¿¡å…ƒIPアドレス"
+
+#: usr/local/www/diag_logs_filter.php:175
+#: usr/local/www/diag_logs_filter.php:255
+#: usr/local/www/diag_logs_filter.php:175
+#: usr/local/www/diag_logs_filter.php:255
+msgid "Quantity"
+msgstr "æ•°é‡"
+
+#: usr/local/www/diag_logs_filter.php:185
+#: usr/local/www/diag_logs_filter.php:185
+msgid "Destination IP Address"
+msgstr "宛先IPアドレス"
+
+#: usr/local/www/diag_logs_filter.php:193
+#: usr/local/www/diag_logs_filter.php:193
+msgid "Protocol Flags"
+msgstr "プロトコルフラグ"
+
+#: usr/local/www/diag_logs_filter.php:203
+#: usr/local/www/diag_logs_filter.php:266
+#: usr/local/www/diag_logs_filter.php:203
+#: usr/local/www/diag_logs_filter.php:266
+#, php-format
+msgid "Matches %1$s regular expression%2$s."
+msgstr "試åˆã¯ã€é€šå¸¸ã®expression%2$sã‚’ã¯%1$s 。"
+
+#: usr/local/www/diag_logs_filter.php:204
+#: usr/local/www/diag_logs_filter.php:204
+msgid "Precede with exclamation (!) as first character to exclude match."
+msgstr "マッãƒã‚’除外ã—ãŸæœ€åˆã®æ–‡å­—ã¨ã—ã¦æ„Ÿå˜†ç¬¦ï¼ˆ ï¼ï¼‰ã«å…ˆè¡Œã™ã‚‹ã€‚"
+
+#: usr/local/www/diag_logs_filter.php:251
+#: usr/local/www/diag_logs_filter.php:251
+msgid "Filter expresion"
+msgstr "フィルタEXPRESION"
+
+#: usr/local/www/diag_dump_states.php:136
+#: usr/local/www/diag_dump_states.php:136
+msgid "Current total state count"
+msgstr "ç¾åœ¨ã®ç·çŠ¶æ…‹æ•°"
+
+#: usr/local/www/diag_dump_states.php:218
+#: usr/local/www/diag_dump_states.php:218
+msgid "States matching current filter"
+msgstr "ç¾åœ¨ã®ãƒ•ã‚£ãƒ«ã‚¿ã«ä¸€è‡´ã™ã‚‹çŠ¶æ…‹"
+
+#: usr/local/www/firewall_nat_edit.php:417
+#: usr/local/www/firewall_nat_edit.php:417
+msgid "NAT Port Forward"
+msgstr "NATã®ãƒãƒ¼ãƒˆãƒ•ã‚©ãƒ¯ãƒ¼ãƒ‰"
+
+#: usr/local/www/status_graph.php:242 usr/local/www/status_graph.php:242
+msgid "Host Name or IP"
+msgstr "ホストåã¾ãŸã¯IP"
+
+#: usr/local/www/interfaces_gif_edit.php:210
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid "ECN friendly behavior"
+msgstr "é›»å­è¨¼åˆ¸å–引ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã‚„ã•ã—ã„行動"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:146
+#: usr/local/www/firewall_virtual_ip_edit.php:146
+msgid "You cannot use the network address for this VIP"
+msgstr "ã“ã®VIPã®ãŸã‚ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯Â·ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:148
+#: usr/local/www/firewall_virtual_ip_edit.php:148
+msgid "You cannot use the broadcast address for this VIP"
+msgstr "ã“ã®VIPã®ãŸã‚ã«ãƒ–ロードキャストアドレスを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+#: usr/local/www/diag_packet_capture.php:204
+#: usr/local/www/diag_packet_capture.php:204
+msgid "Promiscuous"
+msgstr "無差別"
+
+#: usr/local/www/diag_packet_capture.php:207
+#: usr/local/www/diag_packet_capture.php:207
+msgid "If checked, the"
+msgstr "ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€"
+
+#: usr/local/www/diag_packet_capture.php:207
+#: usr/local/www/diag_packet_capture.php:207
+msgid "packet capture"
+msgstr "パケットキャプãƒãƒ£"
+
+#: usr/local/www/diag_packet_capture.php:207
+#: usr/local/www/diag_packet_capture.php:207
+msgid "will be performed using promiscuous mode."
+msgstr "プロミスキャスモードを使用ã—ã¦å®Ÿè¡Œã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/diag_packet_capture.php:208
+#: usr/local/www/diag_packet_capture.php:208
+msgid "Some network adapters do not support or work well in promiscuous mode."
+msgstr "一部ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ€ãƒ—タをサãƒãƒ¼ãƒˆã¾ãŸã¯ç„¡å·®åˆ¥ãƒ¢ãƒ¼ãƒ‰ã§æ­£å¸¸ã«å‹•ä½œã—ã¾ã›ã‚“。"
+
+#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67
+#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67
+msgid "When using IPv4, the target host must be an IPv4 address or hostname."
+msgstr "IPv4を使用ã™ã‚‹å ´åˆã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã¯ã€IPv4アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69
+#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69
+msgid "When using IPv6, the target host must be an IPv6 address or hostname."
+msgstr "IPv6を使用ã™ã‚‹å ´åˆã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã¯ã€IPv6アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/diag_traceroute.php:164 usr/local/www/diag_traceroute.php:164
+msgid ""
+"Using a source interface/IP address that does not match selected type (IPv4, "
+"IPv6) will result in an error or empty output."
+msgstr "「 ( IPv6ã®é¸æŠžã—ãŸã‚¿ã‚¤ãƒ—ã®IPv4ãªã©ï¼‰ã¨ä¸€è‡´ã—ãªã„é€ä¿¡å…ƒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹/ IPアドレスを使用ã™ã‚‹ã¨ã€ 「エラーã¾ãŸã¯ç©ºã®å‡ºåŠ›ã«ãªã‚Šã¾ã™ã€‚"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1472
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1493
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1507
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1543
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1567
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1647
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1416
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1436
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1450
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1510
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1589
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1352
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1373
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1387
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1403
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1422
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1446
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1473
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1526
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1213
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1234
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1248
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1265
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1284
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1308
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1335
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1388
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387
+msgid "Traffic Shaper Wizard"
+msgstr "トラフィックシェーパーウィザード"
+
+#: usr/local/www/wizards/openvpn_wizard.inc:614
+#: usr/local/www/wizards/openvpn_wizard.inc:629
+#: usr/local/www/wizards/openvpn_wizard.inc:614
+#: usr/local/www/wizards/openvpn_wizard.inc:629
+msgid "OpenVPN Wizard"
+msgstr "OpenVPNã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰"
+
+#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:274
+#, php-format
+msgid ""
+"The Captive Portal zone '%s' has Hard Timeout parameter set to a value "
+"bigger than Default lease time (%s)."
+msgstr "デフォルトã®ãƒªãƒ¼ã‚¹æ™‚間( %s )よりも大ãã„「キャプティブãƒãƒ¼ã‚¿ãƒ«ã‚¾ãƒ¼ãƒ³ã®%sã¯'ã®å€¤ã«è¨­å®šãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãƒ‘ラメータをæŒã¤ã€ 。"
+
+#: usr/local/www/system_certmanager.php:1026
+#: usr/local/www/system_certmanager.php:1026
+msgid "Signing request data"
+msgstr "ç½²åè¦æ±‚データ"
+
+#: usr/local/www/system_certmanager.php:1034
+#: usr/local/www/system_certmanager.php:1034
+msgid "Final certificate data"
+msgstr "最終的ãªè¨¼æ˜Žæ›¸ãƒ‡ãƒ¼ã‚¿"
+
+#: usr/local/www/system_advanced_admin.php:447
+#: usr/local/www/system_advanced_admin.php:447
+msgid ""
+"When this is unchecked, access to the webConfigurator is protected against "
+"HTTP_REFERER redirection attempts. Check this box to disable this protection "
+"if you find that it interferes with webConfigurator access in certain corner "
+"cases such as using external scripts to interact with this system. More "
+"information on HTTP_REFERER is available from <a target='_blank' "
+"href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr "HTTP_REFERERリダイレクトã—よã†ã¨ã€Œã“れをオフã«ã™ã‚‹ã¨ã€ webConfiguratorã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã‹ã‚‰ä¿è­·ã•ã‚Œã¦ã„ã¾ã™ã€ 。ã“ã®ã‚ˆã†ãªã€ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã¨å¯¾è©±ã™ã‚‹å¤–部スクリプトを使用ã™ã‚‹ãªã©ã®ã‚±ãƒ¼ã‚¹"ã‚ãªãŸã¯ãã‚ŒãŒç‰¹å®šã®éš…ã«webConfiguratorアクセスを妨害ã™ã‚‹ã“ã¨ã‚’発見ã—ãŸå ´åˆã€ã€Œã“ã®ä¿è­·ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’オンã«ã—ã¾ã™ã€‚ HTTP_REFERERã®è©³ç´°ã€ã®æƒ…å ±ã¯ã€ u003ca target='_blank' "href='http://en.wikipedia.org/wiki/HTTP_referrer'u003eウィキペディアu003c/ A u003eã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:105
+#: usr/local/www/system_advanced_misc.php:105
+msgid "/tmp Size must be numeric and should not be less than 40MB."
+msgstr "/ tmpã®ã‚µã‚¤ã‚ºã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚‰ãšã€ 40MBを下回ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_misc.php:108
+#: usr/local/www/system_advanced_misc.php:108
+msgid "/var Size must be numeric and should not be less than 60MB."
+msgstr "/ VARサイズã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚‰ãšã€ 60MBを下回ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。"
+
+#: usr/local/www/system_advanced_misc.php:558
+#: usr/local/www/system_advanced_misc.php:558
+msgid "Skip rules when gateway is down"
+msgstr "ゲートウェイãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã¨ãã®ãƒ«ãƒ¼ãƒ«ã‚’スキップ"
+
+#: usr/local/www/system_advanced_misc.php:562
+#: usr/local/www/system_advanced_misc.php:562
+msgid ""
+"By default, when a rule has a specific gateway set, and this gateway is "
+"down, rule is created and traffic is sent to default gateway.This option "
+"overrides that behavior and the rule is not created when gateway is down"
+msgstr "「ルールã¯ç‰¹å®šã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ãŒè¨­å®šã•ã‚Œã¦ãŠã‚Šã€ã“ã®ã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã§ã‚ã‚‹å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã€ 「ダウンã€ãƒ«ãƒ¼ãƒ«ãŒä½œæˆã•ã‚Œã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒgateway.Thisオプションをデフォルトã«é€ä¿¡ã•ã‚Œã¾ã™ã€ã¨ã„ã†è¡Œå‹•ã‚„ゲートウェイãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã‚‹ã¨ãã€ãƒ«ãƒ¼ãƒ«ãŒä½œæˆã•ã‚Œã¦ã„ãªã„よりも優先ã•ã‚Œã¾ã™"
+
+#: usr/local/www/system_advanced_misc.php:568
+#: usr/local/www/system_advanced_misc.php:568
+msgid "RAM Disk Settings (Reboot to Apply Changes)"
+msgstr "RAMディスク設定(変更をé©ç”¨ã™ã‚‹ãŸã‚ã«å†èµ·å‹•ã—ã¾ã™ï¼‰"
+
+#: usr/local/www/system_advanced_misc.php:572
+#: usr/local/www/system_advanced_misc.php:572
+msgid "Use RAM Disks"
+msgstr "RAMディスクを使用ã—ã¦ã€"
+
+#: usr/local/www/system_advanced_misc.php:575
+#: usr/local/www/system_advanced_misc.php:575
+msgid "Use memory file system for /tmp and /var"
+msgstr "ã®ãŸã‚ã«/ tmpã¨/ varメモリファイルシステムを使用ã—ã¦ã€"
+
+#: usr/local/www/system_advanced_misc.php:576
+#: usr/local/www/system_advanced_misc.php:576
+msgid ""
+"Set this if you wish to use /tmp and /var as RAM disks (memory file system "
+"disks) on a full install rather than use the hard disk. Setting this will "
+"cause the data in /tmp and /var to be lost at reboot, including log data. "
+"RRD and DHCP Leases will be retained."
+msgstr "フルインストールã®ã€Œ (ディスクã§ã¯ãªããƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã‚’使用ã—ã¦RAMディスクメモリファイルシステム)ã¨ã—ã¦/ tmpディレクトリã¨/ varを使用ã—ãŸã„å ´åˆã¯ã€ã“れを設定ã™ã‚‹ã€ 。ã“れを設定ã™ã‚‹ã¨ã€ 「 / tmpã«ãƒ­ã‚°ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚ã¦ã€å†èµ·å‹•æ™‚ã«å¤±ã‚れるã“ã¨ã‚’/ var内ã®ãƒ‡ãƒ¼ã‚¿ãŒç™ºç”Ÿã—ã¾ã™ã€‚ ã€ã«ãªã‚‹RRDã¨DHCPリースã¯ä¿æŒã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_misc.php:582
+#: usr/local/www/system_advanced_misc.php:582
+msgid "/tmp RAM Disk Size"
+msgstr "/ tmpã«RAMディスクサイズ"
+
+#: usr/local/www/system_advanced_misc.php:586
+#: usr/local/www/system_advanced_misc.php:586
+msgid ""
+"Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set "
+"lower than 40."
+msgstr ""ã®/ tmp RAMディスクã¯ã€‚ 40MBã®ãŸã‚ã«ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ãŸã‚ã«ã€ MBå˜ä½ã§ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚設定ã—ãªã„ã§ãã ã•ã„〠40よりも低ã„。"
+
+#: usr/local/www/system_advanced_misc.php:591
+#: usr/local/www/system_advanced_misc.php:591
+msgid "/var RAM Disk Size"
+msgstr "ã®/ var RAMディスクã®ã‚µã‚¤ã‚º"
+
+#: usr/local/www/system_advanced_misc.php:595
+#: usr/local/www/system_advanced_misc.php:595
+msgid ""
+"Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set "
+"lower than 60."
+msgstr "「 / varã®å„RAMディスクã¯ã€‚ 60MBã®ãŸã‚ã«ç©ºç™½ã®ã¾ã¾ã«ã™ã‚‹ãŸã‚ã«ã€ MBå˜ä½ã§ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚設定ã—ãªã„ã§ãã ã•ã„〠60よりも低ã„。"
+
+#: usr/local/www/system_advanced_misc.php:600
+#: usr/local/www/system_advanced_misc.php:600
+msgid "Periodic RRD Backup"
+msgstr "定期的ãªRRDãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/system_advanced_misc.php:616
+#: usr/local/www/system_advanced_misc.php:616
+msgid "Periodic DHCP Leases Backup"
+msgstr "定期的ãªDHCPã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ãƒªãƒ¼ã‚¹"
+
+#: usr/local/www/system_routes_edit.php:132
+#, php-format
+msgid ""
+"The alias (%s) has one or more FQDNs configured and cannot be used to "
+"configure a static route."
+msgstr "「エイリアス( %s )ãŒæ§‹æˆã•ã‚ŒãŸ1ã¤ä»¥ä¸Šã®FQDNãŒã‚ã‚Šã€ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"スタティックルートを設定ã™ã‚‹ã€‚"
+
+#: usr/local/www/system_routes_edit.php:179
+#: usr/local/www/system_routes_edit.php:186
+#: usr/local/www/system_routes_edit.php:181
+#: usr/local/www/system_routes_edit.php:188
+#: usr/local/www/system_routes_edit.php:175
+#: usr/local/www/system_routes_edit.php:182
+#, php-format
+msgid "This network conflicts with address configured on interface %s."
+msgstr "アドレスãŒã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç«¶åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹%s.上ã§è¨­å®š"
+
+#: usr/local/www/firewall_nat_out.php:117
+#: usr/local/www/firewall_nat_out.php:128
+#: usr/local/www/firewall_nat_out.php:141
+#: usr/local/www/firewall_nat_out.php:157
+#: usr/local/www/firewall_nat_out.php:178
+#: usr/local/www/firewall_nat_out.php:199
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out.php:117
+#: usr/local/www/firewall_nat_out.php:128
+#: usr/local/www/firewall_nat_out.php:141
+#: usr/local/www/firewall_nat_out.php:157
+#: usr/local/www/firewall_nat_out.php:178
+#: usr/local/www/firewall_nat_out.php:199
+#: usr/local/www/firewall_nat_out.php:214
+msgid "Manual Outbound NAT Switch"
+msgstr "手動アウトãƒã‚¦ãƒ³ãƒ‰ã®NATスイッãƒ"
+
+#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313
+#: usr/local/www/firewall_rules.php:311 usr/local/www/firewall_rules.php:313
+msgid ""
+"The firewall rule configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr "ãれらを有効ã«ã™ã‚‹ãŸã‚ã®å¤‰æ›´ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ãƒ«ãƒ¼ãƒ«ã®è¨­å®šã¯changed.<br />YouãŒé©ç”¨ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã§ã—ãŸã€ 。"
+
+#: usr/local/www/system_gateway_groups_edit.php:100
+#: usr/local/www/system_gateway_groups_edit.php:100
+msgid "Changing name on a gateway group is not allowed."
+msgstr "ゲートウェイ·グループã«å¤‰æ›´ã™ã‚‹å ´åˆã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_gateway_groups_edit.php:150
+msgid "Edit gateway group"
+msgstr "編集ゲートウェイ·グループ"
+
+#: usr/local/www/system_gateway_groups_edit.php:229
+#: usr/local/www/system_gateway_groups_edit.php:229
+msgid "Edit gateway group entry"
+msgstr "編集ゲートウェイグループエントリ"
+
+#: usr/local/www/system_gateway_groups_edit.php:317
+#: usr/local/www/system_gateway_groups_edit.php:317
+msgid ""
+"The virtual IP field selects what (virtual) IP should be used when this "
+"group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint"
+msgstr "グループã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯DNS 〠IPsecã‚„OpenVPNã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã•ã‚Œã€ã€Œä»®æƒ³IPフィールドã¯ã€ã“ã‚ŒãŒã¨ã(仮想) IPãŒä½¿ç”¨ã™ã¹ãã‹é¸æŠž""
+
+#: usr/local/www/services_captiveportal.php:198
+#: usr/local/www/services_captiveportal.php:198
+msgid ""
+"Hard timeout must be less or equal Default lease time set on DHCP Server"
+msgstr "「ãƒãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ä»¥ä¸‹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ã‹ç­‰ã—ã„デフォルトã®ãƒªãƒ¼ã‚¹æ™‚é–“ã¯ã€DHCPサーãƒãƒ¼ã«è¨­å®š"
+
+#: usr/local/www/firewall_aliases_edit.php:245
+#: usr/local/www/firewall_aliases_edit.php:245
+#, php-format
+msgid "You must provide a valid URL. Could not fetch usable data from '%s'."
+msgstr "有効ãªURLを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ 「 %s ã€ã‹ã‚‰ä½¿ç”¨å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/firewall_aliases_edit.php:250
+#: usr/local/www/firewall_aliases_edit.php:250
+#, php-format
+msgid "URL '%s' is not valid."
+msgstr "URLã¯ã€Œ %s'ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: usr/local/www/firewall_aliases_edit.php:288
+msgid "This alias is used on a static route and cannot contain FQDNs."
+msgstr "ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯ã€ã‚¹ã‚¿ãƒ†ã‚£ãƒƒã‚¯ãƒ«ãƒ¼ãƒˆã«ä½¿ç”¨ã•ã‚Œã€ FQDNã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:174
+#: usr/local/www/system_firmware_restorefullbackup.php:174
+msgid "Could not locate any previous backups."
+msgstr "以å‰ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:182
+#: usr/local/www/system_firmware_restorefullbackup.php:182
+msgid "do not restore config.xml."
+msgstr "config.xmlã«ã¯å¾©å…ƒã•ã‚Œã¾ã›ã‚“。"
+
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:156
+msgid "Query Time"
+msgstr "クエリ時間"
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131
+msgid "Checking ..."
+msgstr "確èªã—ã¦ã„ã¾ã™..."
+
+#: usr/local/www/services_dnsmasq.php:224
+#: usr/local/www/services_dnsmasq.php:245
+#: usr/local/www/services_dnsmasq.php:245
+msgid "Do not forward private reverse lookups"
+msgstr "プライベートã®é€†å¼•ãを転é€ã—ãªã„ã§ãã ã•ã„"
+
+#: usr/local/www/services_dnsmasq.php:225
+#: usr/local/www/services_dnsmasq.php:246
+#: usr/local/www/services_dnsmasq.php:246
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse "
+"DNS lookups (PTR) for private addresses (RFC 1918) to upstream name "
+"servers. Any entries in the Domain Overrides section forwarding private "n."
+"n.n.in-addr.arpa" names to a specific server are still forwarded. If the IP "
+"to name is not known from /etc/hosts, DHCP or a specific domain override "
+"then a "not found" answer is immediately returned. "
+msgstr "åå‰ä¸Šæµãƒ—ライベートアドレス(RFC 1918)ã®DNSルックアップ( PTR )ã€ã‚’ã€ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€DNSフォワーダã¯æ­£é€†è»¢ã—ã¾ã›ã‚“( DNSMASQ ) %s ""サーãƒã‚’プライベート転é€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã€Œ nãŒã€‚特定ã®ã‚µãƒ¼ãƒãƒ¼ã«ã€Œ NNIN - addr.arpa ã€ã®åå‰ã¯ã€ã¾ã è»¢é€ã•ã‚Œã¾ã™ã€‚ IPã€ã®åå‰ã«ã¯ã€ etc / hostsã«ã€ DHCPã¾ãŸã¯ç‰¹å®šã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ä¸Šæ›¸ã/ã‹ã‚‰çŸ¥ã‚‰ã‚Œã¦ã„ãªã„ã€å ´åˆã«ã¯ã€ãã®ç­”ãˆã¯ã™ãã«è¿”ã•ã‚Œã¾ã™"ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/system_advanced_network.php:212
+#: usr/local/www/system_advanced_network.php:212
+msgid ""
+"All IPv6 traffic will be blocked by the firewall unless this box is checked."
+msgstr "ã“ã®ãƒœãƒƒã‚¯ã‚¹ãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ãªã„é™ã‚Šã€ 「ã™ã¹ã¦ã®IPv6トラフィックã¯ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚Œã¾ã™ã€‚"
+
+#: usr/local/www/system_advanced_network.php:213
+#: usr/local/www/system_advanced_network.php:213
+msgid ""
+"NOTE: This does not disable any IPv6 features on the firewall, it only "
+"blocks traffic."
+msgstr ""注:ã“ã‚Œã¯ã€ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ä¸Šã§ä»»æ„ã®IPv6機能を無効ã«ã—ãªã„ã€ãã‚ŒãŒå”¯ä¸€ã®"トラフィックをブロックã—ã¾ã™ã€‚"
+
+#: usr/local/www/diag_nanobsd.php:234 usr/local/www/diag_nanobsd.php:234
+msgid "RRD/DHCP Backup"
+msgstr "RRD / DHCPã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+
+#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236
+msgid "These options have been relocated to"
+msgstr "ã“れらã®ã‚ªãƒ—ションã¯ã«ç§»è»¢ã—ã¦ããŸ"
+
+#: usr/local/www/diag_nanobsd.php:236 usr/local/www/diag_nanobsd.php:236
+msgid "System > Advanced, Miscellaneous tab"
+msgstr "[システム]> [詳細設定ã€[ãã®ä»–]タブ"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90
+msgid ""
+"A valid IP address must be specified, or # for an exclusion or ! to not "
+"forward at all."
+msgstr "「有効ãªIPアドレスãŒæŒ‡å®šã•ã‚ŒãŸã€ã¾ãŸã¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+msgid ""
+"Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."
+msgstr ""ã¾ãŸã¯Enter ï¼ã“ã®ãƒ›ã‚¹ãƒˆ/サブドメインã®æ¤œç´¢ã«ä»»æ„ã®å ´æ‰€ã«è»¢é€ã•ã‚Œãªã„よã†ã«ã€‚"
+
+#: usr/local/www/interfaces.php:517 usr/local/www/interfaces.php:513
+#: usr/local/www/interfaces.php:513
+msgid "You can only have one interface configured in 6rd with same prefix."
+msgstr "ã‚ãªãŸã ã‘ã®1インタフェースã¯åŒã˜ãƒ—レフィックスをæŒã¤6RDã§è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:528 usr/local/www/interfaces.php:524
+#: usr/local/www/interfaces.php:524
+#, php-format
+msgid "You can only have one interface configured as 6to4."
+msgstr "ã‚ãªãŸã ã‘ã®1インタフェースã¯6to4ã®ã‚ˆã†ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: usr/local/www/interfaces.php:648 usr/local/www/interfaces.php:644
+#: usr/local/www/interfaces.php:644
+msgid "The MTU of a VLAN cannot be greater than that of its parent interface."
+msgstr "VLANã®MTUã¯ã€è¦ªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚ˆã‚Šã‚‚大ããã™ã¹ãã§ã¯ãªã„。"
+
+#: usr/local/www/interfaces.php:663 usr/local/www/interfaces.php:659
+#: usr/local/www/interfaces.php:659
+#, php-format
+msgid "Interface %s (VLAN) has MTU set to a bigger value"
+msgstr "インタフェース%s ( VLAN )ã¯ã€ MTUã¯å¤§ããªå€¤ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™"
+
+#: etc/inc/easyrule.inc:118 etc/inc/easyrule.inc:301 etc/inc/easyrule.inc:118
+#: etc/inc/easyrule.inc:301
+msgid "Easy Rule"
+msgstr "ç°¡å˜ãªãƒ«ãƒ¼ãƒ«"
+
+#: etc/inc/vpn.inc:1015 etc/inc/vpn.inc:1014
+#, php-format
+msgid ""
+"Ignoring IPsec racoon daemon reload since there are no tunnels on interface "
+"%s"
+msgstr "%s 「インターフェイスã«ã¯ãƒˆãƒ³ãƒãƒ«ãŒå­˜åœ¨ã—ãªã„ãŸã‚〠IPsecã®racoonデーモンã®å†ãƒ­ãƒ¼ãƒ‰ã‚’無視ã€"
+
+#: etc/inc/auth.inc:1127 etc/inc/auth.inc:1127
+#, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s"
+msgstr "エラー ï¼ãƒ¦ãƒ¼ã‚¶ãƒ¼%2$sã¨ã—ã¦ã‚µãƒ¼ãƒã¯%1$sã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸï¼š %3$s"
+
+#: usr/local/www/system_gateways_edit.php:139
+#: usr/local/www/system_gateways_edit.php:167
+#: usr/local/www/system_gateways_edit.php:139
+#: usr/local/www/system_gateways_edit.php:167
+#, php-format
+msgid ""
+"The gateway address %1$s does not lie within one of the chosen interface's "
+"subnets."
+msgstr "サブãƒãƒƒãƒˆã€Œã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯%1$sã¯ã€é¸æŠžã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®1ã®å†…ã«ãªã„〠。"
+
+#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342
+msgid "NOTE: Local IPv6 peers use"
+msgstr "注:ローカルIPv6ピアã¯ä½¿ç”¨"
+
+#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342
+msgid "NDP"
+msgstr "NDP"
+
+#: usr/local/www/diag_arp.php:342 usr/local/www/diag_arp.php:342
+msgid "instead of ARP"
+msgstr "代ã‚ã‚Šã«ã€ARPã®"
+
+#: usr/local/www/firewall_virtual_ip.php:128
+#: usr/local/www/firewall_virtual_ip.php:128
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"Gateway."
+msgstr "ゲートウェイã€ãã‚Œã¯ã¾ã å°‘ãªãã¨ã‚‚1ã«ã‚ˆã£ã¦å‚ç…§ã•ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¨ãƒ³ãƒˆãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“〠。"
+
+#: usr/local/www/interfaces_gif_edit.php:169
+#: usr/local/www/interfaces_gif_edit.php:169
+msgid ""
+"The interface here serves as the local address to be used for the gif tunnel."
+msgstr "「ã“ã“ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€GIFトンãƒãƒ«ã«ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚"
+
+#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:941
+msgid ""
+"This option persists even if DHCP server is disabled. Only the machines "
+"listed below will be able to communicate with the firewall on this NIC."
+msgstr "下記ã®ã“ã®NICã®ãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã¨é€šä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€ã“ã®ã‚ªãƒ—ションã¯ã€ DHCPサーãƒãƒ¼ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã‚‚åŒæ§˜ã§ã™ã€‚マシンã ã‘ãŒè§£æ±ºã—ãªã„〠。"
+
+#: usr/local/www/interfaces_bridge_edit.php:381
+#: usr/local/www/interfaces_bridge_edit.php:381
+msgid ""
+"Set the transmit hold count for Spanning Tree. This is the number of "
+"packets transmitted before being rate limited. The default is 6. The "
+"minimum is 1 and the maximum is 10."
+msgstr "レート制é™ã•ã‚Œã‚‹å‰ã«é€ä¿¡ã•ã‚ŒãŸãƒ‘ケットã€ã‚¹ãƒ‘ニングツリーã®é€ä¿¡ãƒ›ãƒ¼ãƒ«ãƒ‰ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¾ã™ã€‚ã“ã‚Œã¯æ•°ãŒã‚る〠。デフォルトã¯6ã§ã™ã€‚ 「最å°å€¤ã¯1ã§ã€æœ€å¤§å€¤ã¯10ã§ã™ã€‚"
+
+#: usr/local/www/services_dnsmasq.php:254
+#: usr/local/www/services_dnsmasq.php:254
+msgid "Listen Port"
+msgstr "ãƒãƒ¼ãƒˆã‚’èžã"
+
+#: usr/local/www/services_dnsmasq.php:258
+#: usr/local/www/services_dnsmasq.php:258
+msgid ""
+"The port used for responding to DNS queries. It should normally be left "
+"blank unless another service needs to bind to TCP/UDP port 53."
+msgstr "ä»–ã®ã‚µãƒ¼ãƒ“スã¯ã€TCP / UDPãƒãƒ¼ãƒˆ53ã«ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹å¿…è¦ãŒãªã„é™ã‚Šã€ç©ºç™½ã®ã€Œ DNSクエリã«å¿œç­”ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒãƒ¼ãƒˆã¯ã€ãã‚Œã¯é€šå¸¸ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„〠。"
+
+#: usr/local/www/services_dnsmasq.php:268
+#: usr/local/www/services_dnsmasq.php:268
+msgid ""
+"Interface IPs used by the DNS Forwarder for responding to queries from "
+"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries "
+"to other interface IPs not selected below are discarded. The default "
+"behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr "クライアントã€ã‹ã‚‰ã®ã‚¯ã‚¨ãƒªã«å¿œç­”ã™ã‚‹ãŸã‚ã€DNSフォワーダãŒä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®IPアドレス〠。インターフェイスã¯IPv4ã¨IPv6ã®IPアドレスã®ä¸¡æ–¹ãŒã‚ã‚‹å ´åˆã€ä¸¡æ–¹ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚クエリ動作ã¯ã€ã™ã¹ã¦ã®åˆ©ç”¨å¯èƒ½ãªIPv4アドレスã¨IPv6アドレスã§ã®è³ªå•ã«ç­”ãˆã‚‹ã“ã¨ã§ã™ã€ä¸‹ã®é¸æŠžã•ã‚Œã¦ã„ãªã„ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹IPã«ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ã€‚破棄ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_dnsmasq.php:288
+#: usr/local/www/services_dnsmasq.php:288
+msgid "Strict Interface Binding"
+msgstr "厳格ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®ãƒã‚¤ãƒ³ãƒ‰"
+
+#: usr/local/www/services_dnsmasq.php:290
+#: usr/local/www/services_dnsmasq.php:290
+msgid ""
+"If this option is set, the DNS forwarder will only bind to the interfaces "
+"containing the IP addresses selected above, rather than binding to all "
+"interfaces and discarding queries to other addresses."
+msgstr "ã‚€ã—ã‚ã™ã¹ã¦ã® "インターフェイスã«çµåˆã—ã€ä»–ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’破棄ã™ã‚‹ã‚ˆã‚Šã‚‚ã€ä¸Šã§é¸æŠžã—ãŸIPアドレスをå«ã‚€"ã“ã®ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ DNSフォワーダã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã«ãƒã‚¤ãƒ³ãƒ‰ã•ã‚Œã¾ã™ã€ 。"
+
+#: usr/local/www/services_dnsmasq.php:292
+#: usr/local/www/services_dnsmasq.php:292
+msgid ""
+"NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to "
+"IPv6 addresses."
+msgstr ""注:ã“ã®ã‚ªãƒ—ションã¯ã€IPv6ã§å‹•ä½œã—ãªã„設定ã—ãŸå ´åˆã€ DNSMASQãŒãƒã‚¤ãƒ³ãƒ‰ã•ã‚Œã¾ã›ã‚“。 ã€ã®IPv6アドレス。"
+
+#: usr/local/www/firewall_nat_out_edit.php:523
+#: usr/local/www/firewall_nat_out_edit.php:561
+#: usr/local/www/firewall_nat_out_edit.php:523
+#: usr/local/www/firewall_nat_out_edit.php:561
+msgid "(leave blank for any)"
+msgstr "(ã„ãšã‚Œã‹ã®ç©ºç™½ã®ã¾ã¾ã«ã—ã¾ã™ï¼‰"
+
+#: usr/local/www/interfaces.php:1900 usr/local/www/interfaces.php:1900
+#, php-format
+msgid ""
+"Enter a <b>hexadecimal</b> value between %x and %x here, default value is 0."
+msgstr ""ï¼… xã¨ï¼… Xã“ã“é–“u003cBu003e進u003c / bu003eã®å€¤ã‚’入力ã—ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯0ã§ã‚る。"
+
+#: etc/inc/shaper.inc:1232 etc/inc/shaper.inc:1232
+msgid "Codel Active Queue"
+msgstr "CODELアクティブキュー"
+
+#: etc/inc/pfsense-utils.inc:2537 etc/inc/pfsense-utils.inc:2541
+#: etc/inc/pfsense-utils.inc:2598
+msgid "Turkish"
+msgstr "トルコ語"
+
+#: usr/local/www/system_gateways_edit.php:647
+msgid ""
+"The Frequency Probe interval must be less than the Down time, otherwise the "
+"gateway will seem to go down then come up again at the next probe."
+msgstr "ゲートウェイ次ã®ãƒ—ローブã§å†ã³å‡ºã¦ãã‚‹ã—ã€ä¸‹ã«è¡Œãよã†ã«è¦‹ãˆã¾ã™ã€é«˜å‘¨æ³¢ãƒ—ローブ間隔ãŒã€ãれ以外ã®å ´åˆã¯ã€ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ã‚ˆã‚Šã‚‚å°ã•ããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“〠。"
+
+#: usr/local/www/system_gateways_edit.php:648
+msgid ""
+"The total time before a gateway is down is the product of the Frequency "
+"Probe and the Down fields. By default this is 1*10=10 seconds."
+msgstr "「ゲートウェイå‰ã®ç·æ™‚é–“ã¯ã€ãƒ€ã‚¦ãƒ³ã—ã¦ã„る周波数ã«ã€ 「プローブã¨ä¸‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã€‚デフォルトã§ã¯ã€ 1 README.txt _notes boot cf conf.default etc misc.translate root sbin tmp usr 10 = 10秒ã§ã™ã€‚"
+
+#: usr/local/www/pkg_mgr.php:169
+msgid "Other Categories"
+msgstr "ãã®ä»–ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼"
+
+#: usr/local/www/pkg_mgr.php:223
+msgid " version to check its change log."
+msgstr "ãã®å¤‰æ›´ãƒ­ã‚°ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:109
+msgid "Platform"
+msgstr "プラットフォーム"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:127
+msgid "NanoBSD Boot Slice"
+msgstr "NanoBSDã®ãƒ–ートスライス"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:138
+msgid "CPU Type"
+msgstr "CPUタイプ"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:151
+msgid "Hardware crypto"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æš—å·"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:156
+msgid "Uptime"
+msgstr "稼åƒæ™‚é–“"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:166
+msgid "DNS server(s)"
+msgstr "DNSサーãƒï¼ˆè¤‡æ•°å¯ï¼‰"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:178
+msgid "Last config change"
+msgstr "最後ã®è¨­å®šå¤‰æ›´"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:183
+msgid "State table size"
+msgstr "状態テーブルサイズ"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:187
+msgid "Show states"
+msgstr "状態を表示ã™ã‚‹"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:191
+msgid "MBUF Usage"
+msgstr "MBUF使用é‡"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:202
+msgid "Temperature"
+msgstr "温度"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:212
+msgid "Load average"
+msgstr "ロードアベレージ"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:218
+msgid "CPU usage"
+msgstr "CPU使用率"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:227
+msgid "Memory usage"
+msgstr "メモリ使用é‡"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:237
+msgid "SWAP usage"
+msgstr "スワップã®ä½¿ç”¨çŠ¶æ³"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:247
+msgid "Disk usage"
+msgstr "ディスクã®ä½¿ç”¨çŠ¶æ³"
+
+#: etc/inc/shaper.inc:2904
+msgid "IPV4 bit mask must be blank or numeric value between 1 and 32."
+msgstr "IPV4ã®ãƒ“ットマスクã¯ã€ 1ã¨32ã®é–“ã«ç©ºç™½ã¾ãŸã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:2907
+msgid "IPV6 bit mask must be blank or numeric value between 1 and 128."
+msgstr "IPV6ビットマスクã¯1ã¨128ã®é–“ã«ç©ºç™½ã¾ãŸã¯æ•°å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: etc/inc/shaper.inc:3352 etc/inc/shaper.inc:3625
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given "
+"above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr "「「ソースã€ã¾ãŸã¯ã€Œå®›å…ˆã€ã‚¹ãƒ­ãƒƒãƒˆãŒé¸æŠžã•ã‚Œã‚‹å ´åˆã€ \n 「é­é‡å„é€ä¿¡å…ƒ/宛先IPアドレスã®ãŸã‚ã«ä½œæˆã™ã‚‹ã“ã¨ãŒã€Œä¸Š\nを「所与ã®å¸¯åŸŸå¹…ã€é…延ã€ãƒ‘ケットæ失ã€ãŠã‚ˆã³ã‚­ãƒ¥ãƒ¼Â·ã‚µã‚¤ã‚ºãŒå‹•çš„パイプ\nホストã”ã¨ã®åˆ¶é™ã€ã§ã‚ã£ãŸã€‚ã“ã‚Œã«ã‚ˆã‚Šã€å®¹æ˜“ã«å¸¯åŸŸå¹…\nを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€ 。"
+
+#: etc/inc/shaper.inc:3373
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per pipe."
+msgstr "空白ã®ãƒžã‚¹ã‚¯ãƒ“ットを残ã™ã€ 「ソースã€ã‚„「目的地ã€ã®ã‚¹ãƒ­ãƒƒãƒˆã‚’é¸æŠžã—ãŸå ´åˆã€ \nã¯ã€Œãƒ›ã‚¹ãƒˆã”ã¨ã«1ã¤ã®ãƒ‘イプを作æˆã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€ãƒ‘イプã”ã¨ã«ã€Œã‚°ãƒ«ãƒ¼ãƒ—複数ã®ãƒ›ã‚¹ãƒˆã«ä½¿ç”¨ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã€Œ 1 ã€ã®ãƒ“ット数を\n 〠\nを指定〠。"
+
+#: etc/inc/shaper.inc:3646
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per queue."
+msgstr "空白ã®ãƒžã‚¹ã‚¯ãƒ“ットを残ã™ã€ 「ソースã€ã‚„「目的地ã€ã®ã‚¹ãƒ­ãƒƒãƒˆã‚’é¸æŠžã—ãŸå ´åˆã€ \nã¯ã€Œãƒ›ã‚¹ãƒˆã”ã¨ã«1ã¤ã®ãƒ‘イプを作æˆã—ã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€ã‚­ãƒ¥ãƒ¼ã”ã¨ã«ã€Œã‚°ãƒ«ãƒ¼ãƒ—複数ã®ãƒ›ã‚¹ãƒˆã«ä½¿ç”¨ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã§ã€Œ 1 ã€ã®ãƒ“ット数を\n 〠\nを指定〠。"
+
+#: etc/inc/pfsense-utils.inc:2575
+msgid "Albanian"
+msgstr "アルãƒãƒ‹ã‚¢äºº"
+
+#: etc/inc/pfsense-utils.inc:2576
+msgid "Bulgarian"
+msgstr "ブルガリア語"
+
+#: etc/inc/pfsense-utils.inc:2577
+msgid "Chinese (Simplified)"
+msgstr "中国語(簡体字)"
+
+#: etc/inc/pfsense-utils.inc:2578
+msgid "Chinese (Traditional)"
+msgstr "中国語(ç¹ä½“字)"
+
+#: etc/inc/pfsense-utils.inc:2579
+msgid "Dutch"
+msgstr "オランダ語"
+
+#: etc/inc/pfsense-utils.inc:2580
+msgid "Danish"
+msgstr "デンマーク語"
+
+#: etc/inc/pfsense-utils.inc:2582
+msgid "Finnish"
+msgstr "フィンランド語"
+
+#: etc/inc/pfsense-utils.inc:2583
+msgid "French"
+msgstr "フランス語"
+
+#: etc/inc/pfsense-utils.inc:2584
+msgid "German"
+msgstr "ドイツ語"
+
+#: etc/inc/pfsense-utils.inc:2585
+msgid "Greek"
+msgstr "ギリシャ語"
+
+#: etc/inc/pfsense-utils.inc:2586
+msgid "Hungarian"
+msgstr "ãƒãƒ³ã‚¬ãƒªãƒ¼èªž"
+
+#: etc/inc/pfsense-utils.inc:2587
+msgid "Italian"
+msgstr "イタリア語"
+
+#: etc/inc/pfsense-utils.inc:2588
+msgid "Japanese"
+msgstr "日本語"
+
+#: etc/inc/pfsense-utils.inc:2589
+msgid "Korean"
+msgstr "韓国語"
+
+#: etc/inc/pfsense-utils.inc:2590
+msgid "Latvian"
+msgstr "ラトビア語"
+
+#: etc/inc/pfsense-utils.inc:2591
+msgid "Norwegian (Bokmal)"
+msgstr "ノルウェー語(ブークモール)"
+
+#: etc/inc/pfsense-utils.inc:2592
+msgid "Polish"
+msgstr "ãƒãƒ¼ãƒ©ãƒ³ãƒ‰èªž"
+
+#: etc/inc/pfsense-utils.inc:2594
+msgid "Portuguese (Portugal)"
+msgstr "ãƒãƒ«ãƒˆã‚¬ãƒ«èªžï¼ˆãƒãƒ«ãƒˆã‚¬ãƒ«ï¼‰"
+
+#: etc/inc/pfsense-utils.inc:2595
+msgid "Romanian"
+msgstr "ルーマニア語"
+
+#: etc/inc/pfsense-utils.inc:2596
+msgid "Russian"
+msgstr "ロシア語"
+
+#: etc/inc/pfsense-utils.inc:2597
+msgid "Slovenian"
+msgstr "スロベニア語"
+
+#: etc/inc/pfsense-utils.inc:2599
+msgid "Spanish"
+msgstr "スペイン語"
+
+#: etc/inc/pfsense-utils.inc:2600
+msgid "Swedish"
+msgstr "スウェーデン語"
+
+#: etc/inc/pfsense-utils.inc:2601
+msgid "Slovak"
+msgstr "スロãƒã‚­ã‚¢èªž"
+
+#: etc/inc/pfsense-utils.inc:2602
+msgid "Czech"
+msgstr "ãƒã‚§ã‚³èªž"
diff --git a/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.mo b/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.mo
new file mode 100644
index 0000000..c2da72c
--- /dev/null
+++ b/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.mo
Binary files differ
diff --git a/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.po b/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.po
new file mode 100644
index 0000000..a4f299d
--- /dev/null
+++ b/src/usr/local/share/locale/pt_BR/LC_MESSAGES/pfSense.po
@@ -0,0 +1,41314 @@
+# Language translation for pfSense project.
+# Copyright (C) 2011-2015 Electric Sheep Fencing LLC
+# This file is distributed under the same license as the pfSense package.
+# Vinicius Coque <vcoque@gmail.com>, 2011.
+# Luiz Gustavo <luizgustavo@luizgustavo.pro>, 2014 Powered by: TrustUX Network (www.trustux.com)
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-07-29 09:27-0300\n"
+"PO-Revision-Date: 2014-02-28 14:46-0300\n"
+"Last-Translator: Luiz Gustavo <luizgustavo@luizgustavo.pro.br>\n"
+"Language-Team: Powered By: TrustUX Network <www.trustux.com>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 1.6.4\n"
+
+#: etc/inc/PEAR.inc:161
+#, php-format
+msgid "PEAR constructor called, class=%s\n"
+msgstr "Construtor PEAR chamado, class=%s\n"
+
+#: etc/inc/PEAR.inc:198
+#, php-format
+msgid "PEAR destructor called, class=%s\n"
+msgstr "Destrutor PEAR chamado, classe=%s\n"
+
+#: etc/inc/PEAR.inc:337 etc/inc/PEAR.inc:595 etc/inc/PEAR.inc:632
+msgid "invalid error callback"
+msgstr "retorno de chamada de erro inválida"
+
+#: etc/inc/PEAR.inc:342 etc/inc/PEAR.inc:600 etc/inc/PEAR.inc:637
+msgid "invalid error mode"
+msgstr "modo de erro inválido"
+
+#: etc/inc/PEAR.inc:445 etc/inc/PEAR.inc:451
+msgid "The expected error you submitted does not exist"
+msgstr "O erro esperado que você enviou não existe"
+
+#: etc/inc/PEAR.inc:455
+msgid "The expected error you submitted is empty"
+msgstr "O erro esperado que você enviou está vazio"
+
+#: etc/inc/PEAR.inc:866
+msgid "PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions"
+msgstr "PEAR_ERROR_EXCEPTION está obsoleto, use a classe PEAR_ErrorStack para exceções"
+
+#: etc/inc/PEAR.inc:1023
+#, php-format
+msgid "[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s\"]"
+msgstr "[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info=\"%s\"]"
+
+#: etc/inc/PEAR.inc:1041
+#, php-format
+msgid "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]"
+msgstr "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]"
+
+#: etc/inc/array_intersect_key.inc:37
+msgid "Wrong parameter count for array_intersect_key()"
+msgstr "Quantidade de parâmetros errada para array_intersect_key()"
+
+#: etc/inc/array_intersect_key.inc:45
+msgid "array_intersect_key() Argument #"
+msgstr "array_intersect_key() Argumento #"
+
+#: etc/inc/array_intersect_key.inc:46
+msgid " is not an array"
+msgstr "não é um array"
+
+# só se usa "ao invés", para coisas contrárias. "Dentro ao invés de fora."
+#: etc/inc/auth.inc:100 etc/inc/auth.inc:107
+msgid "Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding<br/>Try accessing the router by IP address instead of by hostname."
+msgstr "Potencial ataque DNS Rebind detectado, veja http://en.wikipedia.org/wiki/DNS_rebinding<br/> Tente acessar o roteador pelo endereço de IP em lugar do hostname."
+
+#: etc/inc/auth.inc:115 etc/inc/auth.inc:122
+msgid "Redirecting..."
+msgstr "Redirecionando..."
+
+#: etc/inc/auth.inc:115 etc/inc/auth.inc:122
+msgid "Redirecting to the dashboard..."
+msgstr "Redirecionando para ao dashboard..."
+
+#: etc/inc/auth.inc:315 etc/inc/auth.inc:335 etc/inc/auth.inc:406
+#: etc/inc/auth.inc:433 etc/inc/auth.inc:478 etc/inc/auth.inc:609
+#: etc/inc/auth.inc:621 etc/inc/auth.inc:311 etc/inc/auth.inc:331
+#: etc/inc/auth.inc:402 etc/inc/auth.inc:431 etc/inc/auth.inc:487
+#: etc/inc/auth.inc:618 etc/inc/auth.inc:630 etc/inc/auth.inc:334
+#: etc/inc/auth.inc:354 etc/inc/auth.inc:425 etc/inc/auth.inc:454
+#: etc/inc/auth.inc:510 etc/inc/auth.inc:641 etc/inc/auth.inc:653
+#, php-format
+msgid "Running: %s"
+msgstr "Executando: %s"
+
+#: etc/inc/auth.inc:656 etc/inc/auth.inc:728 etc/inc/auth.inc:796
+#: etc/inc/auth.inc:1040 etc/inc/auth.inc:665 etc/inc/auth.inc:737
+#: etc/inc/auth.inc:805 etc/inc/auth.inc:1049 etc/inc/auth.inc:1053
+#: etc/inc/auth.inc:806 etc/inc/auth.inc:1057 etc/inc/auth.inc:688
+#: etc/inc/auth.inc:760 etc/inc/auth.inc:831 etc/inc/auth.inc:1086
+#, php-format
+msgid "ERROR! Could not connect to server %s."
+msgstr "ERRO! Não foi possível conectar-se ao servidor %s."
+
+#: etc/inc/auth.inc:674 etc/inc/auth.inc:683 etc/inc/auth.inc:706
+#, php-format
+msgid "LDAP: Could not lookup CA by reference for host %s."
+msgstr "LDAP: Não foi possível encontrar a CA referenciada pelo host %s."
+
+#: etc/inc/auth.inc:783 etc/inc/auth.inc:792 etc/inc/auth.inc:793
+#: etc/inc/auth.inc:818
+msgid "ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined."
+msgstr "ERRO! ldap_get_user_ous() selecionado sem servidor de autenticação LDAP definido."
+
+#: etc/inc/auth.inc:807 etc/inc/auth.inc:816 etc/inc/auth.inc:818
+#: etc/inc/auth.inc:845
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s."
+msgstr "ERRO! ldap_get_user_ous() não foi possível vincular anonimamente ao servidor %s."
+
+#: etc/inc/auth.inc:812 etc/inc/auth.inc:821 etc/inc/auth.inc:823
+#: etc/inc/auth.inc:850
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind to server %s."
+msgstr "ERRO! ldap_get_user_ous() não pôde vincular ao servidor %s."
+
+#: etc/inc/auth.inc:908 etc/inc/auth.inc:917 etc/inc/auth.inc:919
+#: etc/inc/auth.inc:946
+#, php-format
+msgid "ERROR! ldap_get_groups() Could not connect to server %s."
+msgstr "ERRO! ldap_get_groups() Não foi possível conectar ao servidor %s."
+
+#: etc/inc/auth.inc:918 etc/inc/auth.inc:927 etc/inc/auth.inc:930
+#: etc/inc/auth.inc:959
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s."
+msgstr "ERRO! ldap_get_groups() não foi possível vincular anonimamente ao servidor %s."
+
+#: etc/inc/auth.inc:923 etc/inc/auth.inc:932 etc/inc/auth.inc:935
+#: etc/inc/auth.inc:964
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind to server %s."
+msgstr "ERRO! ldap_get_groups() não foi possível vincular ao servidor %s."
+
+#: etc/inc/auth.inc:1020 etc/inc/auth.inc:1029 etc/inc/auth.inc:1033
+#: etc/inc/auth.inc:1036 etc/inc/auth.inc:1065
+msgid "ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager."
+msgstr "ERRO! ldap_backed() nenhum chamado com servidor de autenticação LDAP foi definido. Padronizando o banco de dados do usuário local. Visite Sistema -> Gerenciador de Usuário."
+
+#: etc/inc/auth.inc:1023 etc/inc/auth.inc:1032 etc/inc/auth.inc:1036
+#: etc/inc/auth.inc:1039 etc/inc/auth.inc:1068
+msgid "ERROR! ldap_backed() called with no LDAP authentication server defined."
+msgstr "ERRO! ldap_backed() nenhum chamado com servidor de autenticação LDAP foi definido."
+
+#: etc/inc/auth.inc:1054 etc/inc/auth.inc:1063 etc/inc/auth.inc:1067
+#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1102
+#, php-format
+msgid "ERROR! Could not bind to server %s."
+msgstr "ERRO! Não foi possível vincular ao servidor %s."
+
+#: etc/inc/auth.inc:1071 etc/inc/auth.inc:1080 etc/inc/auth.inc:1084
+#: etc/inc/auth.inc:1085 etc/inc/auth.inc:1089 etc/inc/auth.inc:1120
+#, php-format
+msgid "Now Searching for %s in directory."
+msgstr "Buscando agora por %s no diretório."
+
+#: etc/inc/auth.inc:1075 etc/inc/auth.inc:1084 etc/inc/auth.inc:1088
+#: etc/inc/auth.inc:1090 etc/inc/auth.inc:1094 etc/inc/auth.inc:1128
+#, php-format
+msgid "Now Searching in server %1$s, container %2$s with filter %3$s."
+msgstr "Agora pesquisando no servidor %1$s, recipiente %2$s com filtro %3$s."
+
+#: etc/inc/auth.inc:1086 etc/inc/auth.inc:1095 etc/inc/auth.inc:1099
+#: etc/inc/auth.inc:1101 etc/inc/auth.inc:1105 etc/inc/auth.inc:1139
+#, php-format
+msgid "Search resulted in error: %s"
+msgstr "A busca resultou em erro: %s"
+
+#: etc/inc/auth.inc:1102 etc/inc/auth.inc:1111 etc/inc/auth.inc:1115
+#: etc/inc/auth.inc:1117 etc/inc/auth.inc:1121 etc/inc/auth.inc:1155
+msgid "ERROR! Either LDAP search failed, or multiple users were found."
+msgstr "ERRO! Ou a busca LDAP falhou, ou múltiplos usuários foram encontrados."
+
+#: etc/inc/auth.inc:1108 etc/inc/auth.inc:1117 etc/inc/auth.inc:1121
+#: etc/inc/auth.inc:1123
+#, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s."
+msgstr "ERRO! Não foi possível logar no servidor %1$s como usuário %2$s."
+
+#: etc/inc/auth.inc:1113 etc/inc/auth.inc:1122 etc/inc/auth.inc:1126
+#: etc/inc/auth.inc:1129 etc/inc/auth.inc:1133 etc/inc/auth.inc:1169
+#, php-format
+msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s."
+msgstr "Autenticado com sucesso como %1$s via servidor LDAP %2$s com DN = %3$s."
+
+#: etc/inc/auth.inc:1144 etc/inc/auth.inc:1153 etc/inc/auth.inc:1157
+#: etc/inc/auth.inc:1163 etc/inc/auth.inc:1167 etc/inc/auth.inc:1204
+#, php-format
+msgid "Radius start: %s<br>\n"
+msgstr "Início do Radius: %s<br>\n"
+
+#: etc/inc/auth.inc:1155 etc/inc/auth.inc:1164 etc/inc/auth.inc:1168
+#: etc/inc/auth.inc:1174 etc/inc/auth.inc:1178 etc/inc/auth.inc:1215
+#, php-format
+msgid "Radius send failed: %s<br>\n"
+msgstr "Envio do Radius falhou: %s<br>\n"
+
+#: etc/inc/auth.inc:1159 etc/inc/auth.inc:1170 etc/inc/auth.inc:1174
+#: etc/inc/auth.inc:1180 etc/inc/auth.inc:1184 etc/inc/auth.inc:1221
+#, php-format
+msgid "Radius Auth succeeded"
+msgstr "Autenticação do Radius bem sucedida"
+
+#: etc/inc/auth.inc:1164 etc/inc/auth.inc:1175 etc/inc/auth.inc:1179
+#: etc/inc/auth.inc:1185 etc/inc/auth.inc:1189 etc/inc/auth.inc:1226
+#, php-format
+msgid "Radius Auth rejected"
+msgstr "Autenticação do Radius rejeitada"
+
+#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218
+#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237 etc/inc/auth.inc:1228
+#: etc/inc/auth.inc:1243 etc/inc/auth.inc:1232 etc/inc/auth.inc:1247
+#: etc/inc/auth.inc:1269 etc/inc/auth.inc:1284
+msgid "Local Database"
+msgstr "Banco de Dados Local"
+
+#: etc/inc/auth.inc:1207 etc/inc/auth.inc:1222 etc/inc/auth.inc:1218
+#: etc/inc/auth.inc:1233 etc/inc/auth.inc:1237
+msgid "Local Auth"
+msgstr "Autenticação Local"
+
+#: etc/inc/auth.inc:1293 etc/inc/auth.inc:1317 etc/inc/auth.inc:1321
+#: etc/inc/auth.inc:1327 etc/inc/auth.inc:1331 etc/inc/auth.inc:1368
+#, php-format
+msgid "Successful login for user '%1$s' from: %2$s"
+msgstr "Login bem sucedido para o usuário '%1$s' de: %2$s"
+
+#: etc/inc/auth.inc:1347 etc/inc/auth.inc:1371 etc/inc/auth.inc:1375
+#: etc/inc/auth.inc:1381 etc/inc/auth.inc:1385 etc/inc/auth.inc:1422
+#, php-format
+msgid "Session timed out for user '%1$s' from: %2$s"
+msgstr "Sessão expirada para usuário '%1$s' de: %2$s"
+
+#: etc/inc/auth.inc:1349 etc/inc/auth.inc:1373 etc/inc/auth.inc:1377
+#: etc/inc/auth.inc:1383 etc/inc/auth.inc:1387 etc/inc/auth.inc:1424
+#, php-format
+msgid "User logged out for user '%1$s' from: %2$s"
+msgstr "Usuário desconectado para '%1$s' de: %2$s"
+
+#: etc/inc/captiveportal.inc:1374 etc/inc/captiveportal.inc:1383
+#: etc/inc/captiveportal.inc:1420 etc/inc/captiveportal.inc:1335
+#: etc/inc/captiveportal.inc:1338 etc/inc/captiveportal.inc:1334
+#, php-format
+msgid "Error: cannot open '%s' in captiveportal_write_elements()%s"
+msgstr "Erro: não pôde abrir '%s' em captiveportal_write_elements()%s"
+
+#: etc/inc/config.inc:100
+msgid "Upgrading m0n0wall configuration to pfSense... "
+msgstr "Atualizando configuração do m0n0wall para o pfSense..."
+
+#: etc/inc/config.inc:103
+msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml"
+msgstr "ERRO! Não pôde converter m0n0wall -> pfsense no config.xml"
+
+#: etc/inc/config.inc:133
+msgid "CDROM build"
+msgstr "Construção de CDROM"
+
+#: etc/inc/config.inc:134 etc/inc/config.inc:135
+msgid "CFG:"
+msgstr "CFG:"
+
+#: etc/inc/config.inc:136
+msgid "TYPE:"
+msgstr "TIPO:"
+
+#: etc/inc/config.inc:151 etc/inc/config.inc:166
+#, php-format
+msgid "Found configuration on %s.%s"
+msgstr "Encontrada configuração em %s.%s"
+
+#: etc/inc/config.inc:180 etc/inc/config.inc:181 etc/inc/config.lib.inc:105
+#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:245
+#: etc/inc/config.lib.inc:266 etc/inc/config.lib.inc:267
+msgid "No config.xml found, attempting last known config restore."
+msgstr "Nenhum config.xml encontrado, tentando última restauração conhecida do config."
+
+#: etc/inc/config.inc:184
+msgid "No config.xml or config backups found, resetting to factory defaults."
+msgstr "Nenhum config.xml ou backups encontrados, reconfigurando para padrões de fábrica."
+
+#: etc/inc/filter.inc:197 etc/inc/filter.inc:194 etc/inc/filter.inc:193
+#: etc/inc/filter.inc:168 etc/inc/filter.inc:183
+msgid "Initializing"
+msgstr "Inicializando"
+
+#: etc/inc/filter.inc:209 etc/inc/filter.inc:206 etc/inc/filter.inc:205
+#: etc/inc/filter.inc:180 etc/inc/filter.inc:195
+msgid "Configuring firewall"
+msgstr "Configurando firewall"
+
+#: etc/inc/filter.inc:214 etc/inc/filter.inc:211 etc/inc/filter.inc:210
+#: etc/inc/filter.inc:185 etc/inc/filter.inc:200
+msgid "Creating aliases"
+msgstr "Criando aliases"
+
+#: etc/inc/filter.inc:219 etc/inc/filter.inc:218 etc/inc/filter.inc:193
+#: etc/inc/filter.inc:208
+msgid "Generating NAT rules"
+msgstr "Gerando regras NAT"
+
+#: etc/inc/filter.inc:224 etc/inc/filter.inc:223 etc/inc/filter.inc:198
+#: etc/inc/filter.inc:213
+msgid "Generating filter rules"
+msgstr "Gerando regras de filtro"
+
+#: etc/inc/filter.inc:230 etc/inc/filter.inc:229 etc/inc/filter.inc:204
+#: etc/inc/filter.inc:219
+msgid "Generating ALTQ queues"
+msgstr "Gerando filas ALTQ"
+
+#: etc/inc/filter.inc:232 etc/inc/filter.inc:216 etc/inc/filter.inc:215
+#: etc/inc/filter.inc:190 etc/inc/filter.inc:205
+msgid "Generating Limiter rules"
+msgstr "Gerando regras Limiter"
+
+#: etc/inc/filter.inc:234 etc/inc/filter.inc:232 etc/inc/filter.inc:231
+#: etc/inc/filter.inc:206 etc/inc/filter.inc:221
+msgid "Generating Layer7 rules"
+msgstr "Gerando regras Layer7"
+
+#: etc/inc/filter.inc:238 etc/inc/filter.inc:236 etc/inc/filter.inc:235
+#: etc/inc/filter.inc:210 etc/inc/filter.inc:225
+msgid "Loading filter rules"
+msgstr "Carregando regras de filtro"
+
+#: etc/inc/filter.inc:245 etc/inc/filter.inc:243 etc/inc/filter.inc:242
+#: etc/inc/filter.inc:217 etc/inc/filter.inc:232
+msgid "Filter is disabled. Not loading rules."
+msgstr "Filtro estático desabilitado. Não carregando regras."
+
+#: etc/inc/filter.inc:247 etc/inc/filter.inc:418 etc/inc/interfaces.inc:217
+#: etc/inc/interfaces.inc:234 etc/inc/interfaces.inc:360
+#: etc/inc/interfaces.inc:410 etc/inc/interfaces.inc:664
+#: etc/inc/interfaces.inc:924 etc/inc/interfaces.inc:964
+#: etc/inc/interfaces.inc:979 etc/inc/interfaces.inc:1780
+#: etc/inc/pkg-utils.inc:586 etc/inc/pkg-utils.inc:596
+#: etc/inc/pkg-utils.inc:619 etc/inc/pkg-utils.inc:696
+#: etc/inc/pkg-utils.inc:711 etc/inc/pkg-utils.inc:755
+#: etc/inc/pkg-utils.inc:786 etc/inc/pkg-utils.inc:805
+#: etc/inc/pkg-utils.inc:812 etc/inc/pkg-utils.inc:829
+#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:861
+#: etc/inc/pkg-utils.inc:967 etc/inc/pkg-utils.inc:984
+#: etc/inc/pkg-utils.inc:1009 etc/inc/pkg-utils.inc:1054
+#: etc/inc/pkg-utils.inc:1063 etc/inc/pkg-utils.inc:1073
+#: etc/inc/pkg-utils.inc:1088 etc/inc/pkg-utils.inc:1095
+#: etc/inc/pkg-utils.inc:1114 etc/inc/services.inc:899
+#: etc/inc/services.inc:1234 etc/inc/services.inc:1297
+#: etc/inc/services.inc:1477 etc/inc/system.inc:651 etc/inc/system.inc:674
+#: etc/inc/system.inc:759 etc/inc/system.inc:1197 etc/inc/system.inc:1278
+#: etc/inc/system.inc:1409 etc/inc/rrd.inc:782 etc/inc/system.inc:699
+#: etc/inc/system.inc:722 etc/inc/system.inc:806 etc/inc/system.inc:1249
+#: etc/inc/system.inc:1334 etc/inc/system.inc:1466 etc/inc/pkg-utils.inc:612
+#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:645
+#: etc/inc/pkg-utils.inc:722 etc/inc/pkg-utils.inc:737
+#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:841
+#: etc/inc/pkg-utils.inc:848 etc/inc/pkg-utils.inc:865
+#: etc/inc/pkg-utils.inc:881 etc/inc/pkg-utils.inc:897
+#: etc/inc/pkg-utils.inc:1004 etc/inc/pkg-utils.inc:1021
+#: etc/inc/pkg-utils.inc:1046 etc/inc/pkg-utils.inc:1091
+#: etc/inc/pkg-utils.inc:1100 etc/inc/pkg-utils.inc:1110
+#: etc/inc/pkg-utils.inc:1125 etc/inc/pkg-utils.inc:1132
+#: etc/inc/pkg-utils.inc:1151 etc/inc/interfaces.inc:219
+#: etc/inc/interfaces.inc:236 etc/inc/interfaces.inc:362
+#: etc/inc/interfaces.inc:412 etc/inc/interfaces.inc:671
+#: etc/inc/interfaces.inc:951 etc/inc/interfaces.inc:991
+#: etc/inc/interfaces.inc:1006 etc/inc/interfaces.inc:1845 etc/inc/rrd.inc:806
+#: etc/inc/services.inc:1028 etc/inc/services.inc:1370
+#: etc/inc/services.inc:1434 etc/inc/services.inc:1669 etc/inc/filter.inc:245
+#: etc/inc/filter.inc:420 etc/inc/system.inc:703 etc/inc/system.inc:726
+#: etc/inc/system.inc:804 etc/inc/system.inc:1229 etc/inc/system.inc:1376
+#: etc/inc/system.inc:1508 etc/inc/pkg-utils.inc:394 etc/inc/pkg-utils.inc:613
+#: etc/inc/pkg-utils.inc:623 etc/inc/pkg-utils.inc:646
+#: etc/inc/pkg-utils.inc:723 etc/inc/pkg-utils.inc:738
+#: etc/inc/pkg-utils.inc:782 etc/inc/pkg-utils.inc:813
+#: etc/inc/pkg-utils.inc:842 etc/inc/pkg-utils.inc:849
+#: etc/inc/pkg-utils.inc:866 etc/inc/pkg-utils.inc:882
+#: etc/inc/pkg-utils.inc:898 etc/inc/pkg-utils.inc:1005
+#: etc/inc/pkg-utils.inc:1022 etc/inc/pkg-utils.inc:1047
+#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1101
+#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1126
+#: etc/inc/pkg-utils.inc:1133 etc/inc/pkg-utils.inc:1152
+#: etc/inc/interfaces.inc:218 etc/inc/interfaces.inc:235
+#: etc/inc/interfaces.inc:361 etc/inc/interfaces.inc:411
+#: etc/inc/interfaces.inc:670 etc/inc/interfaces.inc:950
+#: etc/inc/interfaces.inc:990 etc/inc/interfaces.inc:1005
+#: etc/inc/interfaces.inc:1849 etc/inc/services.inc:1160
+#: etc/inc/services.inc:1509 etc/inc/services.inc:1573
+#: etc/inc/services.inc:1808 etc/inc/filter.inc:244 etc/inc/filter.inc:423
+#: etc/inc/filter.inc:219 etc/inc/filter.inc:395 etc/inc/pkg-utils.inc:411
+#: etc/inc/pkg-utils.inc:648 etc/inc/pkg-utils.inc:658
+#: etc/inc/pkg-utils.inc:681 etc/inc/pkg-utils.inc:758
+#: etc/inc/pkg-utils.inc:773 etc/inc/pkg-utils.inc:817
+#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:884
+#: etc/inc/pkg-utils.inc:901 etc/inc/pkg-utils.inc:917
+#: etc/inc/pkg-utils.inc:933 etc/inc/pkg-utils.inc:1040
+#: etc/inc/pkg-utils.inc:1057 etc/inc/pkg-utils.inc:1082
+#: etc/inc/pkg-utils.inc:1127 etc/inc/pkg-utils.inc:1136
+#: etc/inc/pkg-utils.inc:1146 etc/inc/pkg-utils.inc:1161
+#: etc/inc/pkg-utils.inc:1168 etc/inc/pkg-utils.inc:1187
+#: etc/inc/interfaces.inc:216 etc/inc/interfaces.inc:233
+#: etc/inc/interfaces.inc:365 etc/inc/interfaces.inc:422
+#: etc/inc/interfaces.inc:697 etc/inc/interfaces.inc:1033
+#: etc/inc/interfaces.inc:1054 etc/inc/interfaces.inc:1069
+#: etc/inc/interfaces.inc:1889 etc/inc/services.inc:1154
+#: etc/inc/services.inc:1499 etc/inc/services.inc:1596
+#: etc/inc/services.inc:1797 etc/inc/system.inc:712 etc/inc/system.inc:735
+#: etc/inc/system.inc:815 etc/inc/system.inc:1178 etc/inc/system.inc:1318
+#: etc/inc/system.inc:1457 etc/inc/rrd.inc:829 etc/inc/filter.inc:399
+#: etc/inc/interfaces.inc:1894 etc/inc/services.inc:1516
+#: etc/inc/services.inc:1628 etc/inc/services.inc:1837 etc/inc/rrd.inc:831
+#: etc/inc/services.inc:1659 etc/inc/services.inc:1868 etc/inc/rrd.inc:834
+#: etc/inc/services.inc:1212 etc/inc/services.inc:1568
+#: etc/inc/services.inc:1723 etc/inc/services.inc:1932 etc/inc/filter.inc:234
+#: etc/inc/services.inc:1210 etc/inc/services.inc:1566
+#: etc/inc/services.inc:1721 etc/inc/services.inc:1930 etc/inc/system.inc:1205
+#: etc/inc/system.inc:1345 etc/inc/system.inc:1484 etc/inc/rrd.inc:873
+msgid "done."
+msgstr "pronto."
+
+#: etc/inc/filter.inc:259 etc/inc/filter.inc:265 etc/inc/filter.inc:289
+#: etc/inc/filter.inc:269 etc/inc/filter.inc:284
+msgid "Setting up logging information"
+msgstr "Configurando informação de log"
+
+#: etc/inc/filter.inc:290 etc/inc/filter.inc:294 etc/inc/filter.inc:274
+#: etc/inc/filter.inc:289
+msgid "Setting up SCRUB information"
+msgstr "Configurando informação de SCRUB"
+
+#: etc/inc/filter.inc:336 etc/inc/filter.inc:338 etc/inc/filter.inc:341
+#: etc/inc/filter.inc:313 etc/inc/filter.inc:328
+#, php-format
+msgid "The line in question reads [%1$d]: %2$s"
+msgstr "A linha em questão lida [%1$d]: %2$s"
+
+#: etc/inc/filter.inc:338 etc/inc/filter.inc:340 etc/inc/filter.inc:342
+#: etc/inc/filter.inc:343 etc/inc/filter.inc:345 etc/inc/filter.inc:316
+#: etc/inc/filter.inc:317 etc/inc/filter.inc:331 etc/inc/filter.inc:332
+#, php-format
+msgid "There were error(s) loading the rules: %1$s - %2$s"
+msgstr "Houve erro(s) carregando as regras: %1$s - %2$s"
+
+#: etc/inc/filter.inc:349 etc/inc/filter.inc:351 etc/inc/filter.inc:354
+#: etc/inc/filter.inc:324 etc/inc/filter.inc:339
+msgid "PF was wedged/busy and has been reset."
+msgstr "PF estava travado/ocupado e foi reiniciado."
+
+#: etc/inc/filter.inc:355 etc/inc/filter.inc:357 etc/inc/filter.inc:360
+#: etc/inc/filter.inc:329 etc/inc/filter.inc:333 etc/inc/filter.inc:348
+msgid "Starting up layer7 daemon"
+msgstr "Iniciando daemon layer7"
+
+#: etc/inc/filter.inc:403 etc/inc/filter.inc:405 etc/inc/filter.inc:408
+#: etc/inc/filter.inc:380 etc/inc/filter.inc:384
+msgid "Processing down interface states"
+msgstr "Processando estados de interface"
+
+#: etc/inc/filter.inc:407 etc/inc/filter.inc:409 etc/inc/filter.inc:412
+#: etc/inc/filter.inc:384 etc/inc/filter.inc:388
+msgid "Running plugins"
+msgstr "Executando plugins"
+
+#: etc/inc/filter.inc:411 etc/inc/filter.inc:413 etc/inc/filter.inc:416
+#: etc/inc/filter.inc:388 etc/inc/filter.inc:392
+msgid "Running plugins (pf)"
+msgstr "Executando plugins (pf)"
+
+#: etc/inc/filter.inc:413 etc/inc/filter.inc:415 etc/inc/filter.inc:418
+#: etc/inc/filter.inc:390 etc/inc/filter.inc:394
+msgid "Plugins completed."
+msgstr "Plugins finalizados."
+
+#: etc/inc/filter.inc:416 usr/local/www/restart_httpd.php:52
+#: usr/local/www/restart_httpd.php:55 usr/local/www/restart_httpd.php:58
+#: usr/local/www/restart_httpd.php:61 etc/inc/filter.inc:418
+#: etc/inc/filter.inc:421 etc/inc/filter.inc:393 etc/inc/filter.inc:397
+msgid "Done"
+msgstr "Pronto"
+
+#: etc/inc/filter.inc:636 etc/inc/filter.inc:649 etc/inc/filter.inc:652
+#: etc/inc/filter.inc:641 etc/inc/filter.inc:657 etc/inc/filter.inc:671
+msgid "Creating gateway group item..."
+msgstr "Criando um item de grupo de gateway..."
+
+#: etc/inc/filter.inc:666 etc/inc/filter.inc:681 etc/inc/filter.inc:684
+#: etc/inc/filter.inc:673 etc/inc/filter.inc:687 etc/inc/filter.inc:692
+#: etc/inc/filter.inc:706
+#, php-format
+msgid "Setting up route with %1$s on %2$s"
+msgstr "Configurando rota com %1$s em %2$s"
+
+#: etc/inc/filter.inc:673 etc/inc/filter.inc:688 etc/inc/filter.inc:691
+#: etc/inc/filter.inc:680 etc/inc/filter.inc:694 etc/inc/filter.inc:699
+#: etc/inc/filter.inc:713
+#, php-format
+msgid "An error occurred while trying to find the interface got %s . The rule has not been added."
+msgstr "Um erro ocorreu na tentativa de se encontrar a interface obtida %s. A regra não foi adicionada."
+
+#: etc/inc/filter.inc:937 etc/inc/filter.inc:987 etc/inc/filter.inc:975
+#: etc/inc/filter.inc:1009 etc/inc/filter.inc:1027 etc/inc/filter.inc:1032
+#: etc/inc/filter.inc:1046
+#, php-format
+msgid "Creating reflection NAT rule for %s..."
+msgstr "Criando regra de reflexão NAT para %s..."
+
+#: etc/inc/filter.inc:991 etc/inc/filter.inc:1076 etc/inc/filter.inc:1064
+#: etc/inc/filter.inc:1098 etc/inc/filter.inc:1116 etc/inc/filter.inc:1121
+#: etc/inc/filter.inc:1135
+#, php-format
+msgid "Creating reflection rule for %s..."
+msgstr "Criando regra de reflexão para %s..."
+
+#: etc/inc/filter.inc:1251 etc/inc/filter.inc:1338 etc/inc/filter.inc:1326
+#: etc/inc/filter.inc:1360 etc/inc/filter.inc:1378 etc/inc/filter.inc:1383
+#: etc/inc/filter.inc:1398
+msgid "Creating 1:1 rules..."
+msgstr "Criando regras 1:1..."
+
+#: etc/inc/filter.inc:1350 etc/inc/filter.inc:1437 etc/inc/filter.inc:1454
+#: etc/inc/filter.inc:1501 etc/inc/filter.inc:1519 etc/inc/filter.inc:1524
+#: etc/inc/filter.inc:1539
+#, php-format
+msgid "Creating advanced outbound rule %s"
+msgstr "Criando regra de saída avançada %s"
+
+#: etc/inc/filter.inc:1386 etc/inc/filter.inc:1473 etc/inc/filter.inc:1490
+#: etc/inc/filter.inc:1533 etc/inc/filter.inc:1551 etc/inc/filter.inc:1556
+#: etc/inc/filter.inc:1571
+msgid "Creating outbound NAT rules"
+msgstr "Criando regras NAT de outbound"
+
+#: etc/inc/filter.inc:1481 etc/inc/filter.inc:1566 etc/inc/filter.inc:1583
+#: etc/inc/filter.inc:1626 etc/inc/filter.inc:1644 etc/inc/filter.inc:1649
+#: etc/inc/filter.inc:1664
+#, php-format
+msgid "Creating outbound rules %1$s - (%2$s)"
+msgstr "Criando regras de saída %1$s - (%2$s)"
+
+#: etc/inc/filter.inc:1499 etc/inc/filter.inc:1584 etc/inc/filter.inc:1601
+#: etc/inc/filter.inc:1644 etc/inc/filter.inc:1662 etc/inc/filter.inc:1667
+#: etc/inc/filter.inc:1682
+msgid "Setting up TFTP helper"
+msgstr "Configurando ajuda do TFTP"
+
+#: etc/inc/filter.inc:1545 etc/inc/filter.inc:1630 etc/inc/filter.inc:1644
+#: etc/inc/filter.inc:1676 etc/inc/filter.inc:1694 etc/inc/filter.inc:1699
+#: etc/inc/filter.inc:1714
+#, php-format
+msgid "Creating NAT rule %s"
+msgstr "Criando regra NAT %s"
+
+#: etc/inc/filter.inc:1689 etc/inc/filter.inc:1837 etc/inc/filter.inc:1850
+#: etc/inc/filter.inc:1882 etc/inc/filter.inc:1900 etc/inc/filter.inc:1905
+#: etc/inc/filter.inc:1921
+#, php-format
+msgid "Creating filter rule %s ..."
+msgstr "Criando regra de filtro %s ..."
+
+#: etc/inc/filter.inc:1827 etc/inc/filter.inc:1975 etc/inc/filter.inc:1988
+#: etc/inc/filter.inc:2024 etc/inc/filter.inc:2054 etc/inc/filter.inc:2059
+#: etc/inc/filter.inc:2075
+#, php-format
+msgid "filter_generate_address: %s is not a valid source port."
+msgstr "filter_generate_address: %s não é uma porta de origem válida."
+
+#: etc/inc/filter.inc:1943 etc/inc/filter.inc:2094 etc/inc/filter.inc:2107
+#: etc/inc/filter.inc:2142 etc/inc/filter.inc:2172 etc/inc/filter.inc:2177
+#: etc/inc/filter.inc:2193
+#, php-format
+msgid "Setting up pass/block rules %s"
+msgstr "Configurando regras de liberação/bloqueio %s"
+
+#: etc/inc/filter.inc:1962 etc/inc/filter.inc:2113 etc/inc/filter.inc:2126
+#: etc/inc/filter.inc:2157 etc/inc/filter.inc:2187 etc/inc/filter.inc:2192
+#: etc/inc/filter.inc:2208
+#, php-format
+msgid "Could not find IPv4 gateway for interface (%s)."
+msgstr "Não é possível encontrar gateway IPv4 para interface (%s)."
+
+#: etc/inc/filter.inc:1989 etc/inc/filter.inc:2140 etc/inc/filter.inc:2153
+#: etc/inc/filter.inc:2182 etc/inc/filter.inc:2214 etc/inc/filter.inc:2219
+#: etc/inc/filter.inc:2235
+#, php-format
+msgid "Creating rule %s"
+msgstr "Criando regra %s"
+
+#: etc/inc/filter.inc:2198 etc/inc/filter.inc:2355 etc/inc/filter.inc:2378
+#: etc/inc/filter.inc:2407 etc/inc/filter.inc:2439 etc/inc/filter.inc:2444
+#: etc/inc/filter.inc:2474
+msgid "Creating default rules"
+msgstr "Criando regras padrão"
+
+#: etc/inc/filter.inc:2649 etc/inc/filter.inc:2862 etc/inc/filter.inc:2887
+#: etc/inc/filter.inc:2976 etc/inc/filter.inc:3000 etc/inc/filter.inc:3005
+#: etc/inc/filter.inc:3028
+msgid "Creating IPsec rules..."
+msgstr "Criando regras IPsec..."
+
+#: etc/inc/filter.inc:2702 etc/inc/filter.inc:2915 etc/inc/filter.inc:2940
+#: etc/inc/filter.inc:3026 etc/inc/filter.inc:3050 etc/inc/filter.inc:3055
+#: etc/inc/filter.inc:3078
+msgid "Please use filter_tdr_install_cron() function tdr_install_cron will be deprecated!"
+msgstr "Por favor, use a função filter_tdr_install_cron(). A função tdr_install_cron se tornará obsoleta!"
+
+#: etc/inc/filter.inc:2747 etc/inc/filter.inc:2960 etc/inc/filter.inc:2986
+#: etc/inc/filter.inc:3072 etc/inc/filter.inc:3096 etc/inc/filter.inc:3101
+#: etc/inc/filter.inc:3124
+msgid "Installed 15 minute filter reload for Time Based Rules"
+msgstr "Instalado filtro de recarregamento de 15 minutos para Tempo de Regras Baseadas"
+
+#: etc/inc/filter.inc:3102 etc/inc/filter.inc:3313 etc/inc/filter.inc:3293
+#: etc/inc/filter.inc:3389 etc/inc/filter.inc:3413 etc/inc/filter.inc:3418
+#: etc/inc/filter.inc:3412 etc/inc/filter.inc:3440
+#, php-format
+msgid "Checking for %1$s PF hooks in package %2$s"
+msgstr "Checando para %1$s saltos PF no pacote %2$s"
+
+#: etc/inc/filter.inc:3107 etc/inc/filter.inc:3318 etc/inc/filter.inc:3299
+#: etc/inc/filter.inc:3395 etc/inc/filter.inc:3419 etc/inc/filter.inc:3424
+#: etc/inc/filter.inc:3418 etc/inc/filter.inc:3446
+#, php-format
+msgid "Processing early %1$s rules for package %2$s"
+msgstr "Processando %1$s regras iniciais para o pacote %2$s"
+
+#: etc/inc/filter.inc:3112 etc/inc/filter.inc:3323 etc/inc/filter.inc:3304
+#: etc/inc/filter.inc:3400 etc/inc/filter.inc:3424 etc/inc/filter.inc:3429
+#: etc/inc/filter.inc:3423 etc/inc/filter.inc:3451
+#, php-format
+msgid "There was an error while parsing the package filter rules for %s."
+msgstr "Houve um erro ao analisar as regras de filtro do pacote para %s."
+
+#: etc/inc/interfaces.inc:51 etc/inc/interfaces.inc:53
+msgid "interfaces_bring_up() was called but no variable defined."
+msgstr "interfaces_bring_up() foi chamada mas nenhuma variável foi definida."
+
+#: etc/inc/interfaces.inc:213 etc/inc/interfaces.inc:215
+#: etc/inc/interfaces.inc:214 etc/inc/interfaces.inc:212
+msgid "Configuring loopback interface..."
+msgstr "Configurando interface de loopback..."
+
+#: etc/inc/interfaces.inc:224 etc/inc/interfaces.inc:226
+#: etc/inc/interfaces.inc:225 etc/inc/interfaces.inc:223
+msgid "Configuring VLAN interfaces..."
+msgstr "Configurando interfaces VLAN..."
+
+#: etc/inc/interfaces.inc:241 etc/inc/interfaces.inc:243
+#: etc/inc/interfaces.inc:242 etc/inc/interfaces.inc:240
+msgid "VLAN: called with wrong options. Problems with config!"
+msgstr "VLAN: chamada com as opções erradas. Problemas com configuração!"
+
+#: etc/inc/interfaces.inc:249
+msgid "interface_vlan_confgure called with if undefined."
+msgstr "interface_vlan_confgure chamada com if indefinido."
+
+#: etc/inc/interfaces.inc:283 etc/inc/interfaces.inc:367
+#: etc/inc/interfaces.inc:285 etc/inc/interfaces.inc:369
+#: etc/inc/interfaces.inc:284 etc/inc/interfaces.inc:368
+#: etc/inc/interfaces.inc:282 etc/inc/interfaces.inc:372
+#, php-format
+msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s"
+msgstr "QinQ compacta VLAN: chamada com opções erradas. Problemas com config!%s"
+
+#: etc/inc/interfaces.inc:290 etc/inc/interfaces.inc:375
+#, php-format
+msgid "interface_qinq_confgure called with if undefined.%s"
+msgstr "interface_qinq_confgure chamada com if indefinido.%s"
+
+#: etc/inc/interfaces.inc:352 etc/inc/interfaces.inc:354
+#: etc/inc/interfaces.inc:353 etc/inc/interfaces.inc:357
+msgid "Configuring QinQ interfaces..."
+msgstr "Configurando interfaces QinQ..."
+
+#: etc/inc/interfaces.inc:396 etc/inc/interfaces.inc:398
+#: etc/inc/interfaces.inc:397
+msgid "Creating other wireless clone interfaces..."
+msgstr "Criando outras interfaces clones sem fio..."
+
+#: etc/inc/interfaces.inc:439 etc/inc/interfaces.inc:438
+#: etc/inc/interfaces.inc:437 etc/inc/interfaces.inc:466
+#, php-format
+msgid "No members found on %s"
+msgstr "Nenhum membro encontrado em %s"
+
+#: etc/inc/interfaces.inc:505 etc/inc/interfaces.inc:512
+#: etc/inc/interfaces.inc:511 etc/inc/interfaces.inc:541
+msgid "realif not defined in interfaces bridge - up"
+msgstr "realif não definido em interfaces bridge - up"
+
+#: etc/inc/interfaces.inc:618 etc/inc/interfaces.inc:625
+#: etc/inc/interfaces.inc:624 etc/inc/interfaces.inc:654
+msgid "bridgeif not defined -- could not bring interface up"
+msgstr "bridgeif não definido -- não pôde iniciar a interface"
+
+#: etc/inc/interfaces.inc:652 etc/inc/interfaces.inc:659
+#: etc/inc/interfaces.inc:658 etc/inc/interfaces.inc:685
+msgid "Configuring LAGG interfaces..."
+msgstr "Configurando interfaces LAGG..."
+
+#: etc/inc/interfaces.inc:790 etc/inc/interfaces.inc:801
+#: etc/inc/interfaces.inc:800 etc/inc/interfaces.inc:835
+msgid "Could not bring greif up -- variable not defined."
+msgstr "Não pôde iniciar greif -- variável não definida."
+
+#: etc/inc/interfaces.inc:833 etc/inc/interfaces.inc:851
+#: etc/inc/interfaces.inc:850 etc/inc/interfaces.inc:899
+msgid "could not bring realif up -- variable not defined -- interface_gif_configure()"
+msgstr "O realif não pôde ser iniciado -- variável não definida -- interface_gif_configure()"
+
+#: etc/inc/interfaces.inc:856 etc/inc/interfaces.inc:874
+#: etc/inc/interfaces.inc:873 etc/inc/interfaces.inc:922
+msgid "could not bring gifif up -- variable not defined"
+msgstr "O gifif não pôde ser iniciado -- variável não definida"
+
+#: etc/inc/interfaces.inc:919 etc/inc/interfaces.inc:957
+#: etc/inc/interfaces.inc:972 etc/inc/interfaces.inc:945
+#: etc/inc/interfaces.inc:984 etc/inc/interfaces.inc:999
+#: etc/inc/interfaces.inc:944 etc/inc/interfaces.inc:983
+#: etc/inc/interfaces.inc:998 etc/inc/interfaces.inc:1026
+#: etc/inc/interfaces.inc:1047 etc/inc/interfaces.inc:1062
+#, php-format
+msgid "Configuring %s interface..."
+msgstr "Configurando interface %s..."
+
+#: etc/inc/interfaces.inc:921 etc/inc/interfaces.inc:959
+#: etc/inc/interfaces.inc:974 etc/inc/interfaces.inc:948
+#: etc/inc/interfaces.inc:986 etc/inc/interfaces.inc:1001
+#: etc/inc/interfaces.inc:947 etc/inc/interfaces.inc:985
+#: etc/inc/interfaces.inc:1000 etc/inc/interfaces.inc:1002
+#: etc/inc/interfaces.inc:1028 etc/inc/interfaces.inc:1049
+#: etc/inc/interfaces.inc:1064
+#, php-format
+msgid "Configuring %s"
+msgstr "Configurando %s"
+
+#: etc/inc/interfaces.inc:1299 etc/inc/interfaces.inc:1339
+#: etc/inc/interfaces.inc:1338 etc/inc/interfaces.inc:1407
+#: etc/inc/interfaces.inc:1412
+#, php-format
+msgid "Can't find PPP config for %s in interface_ppps_configure()."
+msgstr "O PPP config não pôde ser encontrado para %s em interface_ppps_configure()."
+
+#: etc/inc/interfaces.inc:1362 etc/inc/interfaces.inc:1402
+#: etc/inc/interfaces.inc:1401 etc/inc/interfaces.inc:1464
+#: etc/inc/interfaces.inc:1469
+#, php-format
+msgid "Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in interfaces_ppps_configure."
+msgstr "Não pôde obter um endereço de IP remoto PPTP/L2TP de %1$s para %2$s em interfaces_ppps_configure."
+
+#: etc/inc/interfaces.inc:1369 etc/inc/interfaces.inc:1409
+#: etc/inc/interfaces.inc:1408 etc/inc/interfaces.inc:1471
+#: etc/inc/interfaces.inc:1476
+#, php-format
+msgid "Device %s does not exist. PPP link cannot start without the modem device."
+msgstr "Dispositivo %s não existe. Link PPP não pode iniciar sem o dispositivo de modem."
+
+#: etc/inc/interfaces.inc:1374 etc/inc/interfaces.inc:1414
+#: etc/inc/interfaces.inc:1413 etc/inc/interfaces.inc:1476
+#: etc/inc/interfaces.inc:1481
+#, php-format
+msgid "Unkown %s configured as ppp interface."
+msgstr "%s desconhecido configurado como uma interface ppp."
+
+#: etc/inc/interfaces.inc:1641 etc/inc/interfaces.inc:1686
+#: etc/inc/interfaces.inc:1685 etc/inc/interfaces.inc:1748
+#: etc/inc/interfaces.inc:1753
+#, php-format
+msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s"
+msgstr "Erro: mpd_%s.conf não pôde ser aberto em interface_ppps_configure().%s"
+
+#: etc/inc/interfaces.inc:1702 etc/inc/interfaces.inc:1771
+#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1828
+#: etc/inc/interfaces.inc:1833
+msgid "Configuring CARP settings..."
+msgstr "Configurando CARP..."
+
+#: etc/inc/interfaces.inc:1723 etc/inc/interfaces.inc:1788
+#: etc/inc/interfaces.inc:1787
+msgid "Enable CARP ARP-balancing"
+msgstr "Habilitar CARP ARP-balancing"
+
+#: etc/inc/interfaces.inc:1724 etc/inc/interfaces.inc:1789
+#: etc/inc/interfaces.inc:1788
+msgid "Disallow CARP preemption"
+msgstr "Desabilitar preempção do CARP"
+
+#: etc/inc/interfaces.inc:1726 etc/inc/interfaces.inc:1791
+#: etc/inc/interfaces.inc:1790
+msgid "Enable CARP preemption"
+msgstr "Habilitar preempção do CARP"
+
+#: etc/inc/interfaces.inc:1728 etc/inc/interfaces.inc:1793
+#: etc/inc/interfaces.inc:1792
+msgid "Enable CARP logging"
+msgstr "Habilitar log do CARP"
+
+#: etc/inc/interfaces.inc:1744 etc/inc/interfaces.inc:1809
+#: etc/inc/interfaces.inc:1808
+msgid "Could not create rules.boot file!"
+msgstr "Não pôde criar arquivo rules.boot!"
+
+#: etc/inc/interfaces.inc:1750 etc/inc/interfaces.inc:1815
+#: etc/inc/interfaces.inc:1814
+msgid "Bring up pfsync0 syncpeer"
+msgstr "Levantando pfsync0 syncpeer"
+
+#: etc/inc/interfaces.inc:1752 etc/inc/interfaces.inc:1817
+#: etc/inc/interfaces.inc:1816
+msgid "Bring up pfsync0 syncdev"
+msgstr "Levantando pfsync0 syncdev"
+
+#: etc/inc/interfaces.inc:1754 etc/inc/interfaces.inc:1819
+#: etc/inc/interfaces.inc:1818
+msgid "Bring up pfsync0"
+msgstr "Levantando pfsync0"
+
+#: etc/inc/interfaces.inc:1768 etc/inc/interfaces.inc:1833
+#: etc/inc/interfaces.inc:1837
+msgid "Allow CARP."
+msgstr "Permitir CARP."
+
+#: etc/inc/interfaces.inc:1770 etc/inc/interfaces.inc:1835
+#: etc/inc/interfaces.inc:1839
+msgid "Disallow CARP."
+msgstr "Desabilitar CARP."
+
+#: etc/inc/interfaces.inc:1963 etc/inc/interfaces.inc:2038
+#: etc/inc/interfaces.inc:2020 etc/inc/interfaces.inc:2099
+#: etc/inc/interfaces.inc:2016 etc/inc/interfaces.inc:2056
+#: etc/inc/interfaces.inc:2061 etc/inc/interfaces.inc:2076
+#, php-format
+msgid "Interface specified for the virtual IP address %s does not exist. Skipping this VIP."
+msgstr "Interface especificada para o endereço de IP virtual %s não existe. Pulando esse IP virtual."
+
+#: etc/inc/interfaces.inc:1972 etc/inc/interfaces.inc:2029
+#: etc/inc/interfaces.inc:2025 etc/inc/interfaces.inc:2065
+#: etc/inc/interfaces.inc:2070 etc/inc/interfaces.inc:2085
+#, php-format
+msgid "Sorry but we could not find a matching real interface subnet for the virtual IP address %s."
+msgstr "Desculpe, mas não pudemos encontrar uma subrede em uma interface real correspondente ao endereço de IP virtual %s."
+
+#: etc/inc/interfaces.inc:1981 etc/inc/interfaces.inc:2038
+#: etc/inc/interfaces.inc:2034 etc/inc/interfaces.inc:2074
+#: etc/inc/interfaces.inc:2079 etc/inc/interfaces.inc:2094
+#, php-format
+msgid "Sorry but we could not find a matching real interface subnet for the virtual IPv6 address %s."
+msgstr "Lamento, mas não foi possível encontrar uma subrede em uma interface real correspondente ao endereço de IPv6 virtual %s."
+
+#: etc/inc/interfaces.inc:2084
+#, php-format
+msgid "Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for writing.%s"
+msgstr "Erro: dhclient_%s.conf não pôde ser aberto em interfaces_carpdev_configure() para escrita.%s"
+
+#: etc/inc/interfaces.inc:2117 etc/inc/interfaces.inc:2185
+#: etc/inc/interfaces.inc:2104 etc/inc/interfaces.inc:2144
+#: etc/inc/interfaces.inc:2149 etc/inc/interfaces.inc:2164
+#, php-format
+msgid "Interface %s changed to hostap mode"
+msgstr "Interface %s modificada para modo hostap"
+
+#: etc/inc/interfaces.inc:2121 etc/inc/interfaces.inc:2189
+#: etc/inc/interfaces.inc:2108 etc/inc/interfaces.inc:2148
+#: etc/inc/interfaces.inc:2153 etc/inc/interfaces.inc:2168
+#, php-format
+msgid "Interface %s changed to adhoc mode"
+msgstr "Interface %s modificada para modo adhoc"
+
+#: etc/inc/interfaces.inc:2125 etc/inc/interfaces.inc:2193
+#: etc/inc/interfaces.inc:2112 etc/inc/interfaces.inc:2152
+#: etc/inc/interfaces.inc:2157 etc/inc/interfaces.inc:2172
+#, php-format
+msgid "Interface %s changed to infrastructure mode"
+msgstr "Interface %s modificada para modo de infraestrutura"
+
+#: etc/inc/interfaces.inc:2137 etc/inc/interfaces.inc:2205
+#: etc/inc/interfaces.inc:2124 etc/inc/interfaces.inc:2164
+#: etc/inc/interfaces.inc:2169 etc/inc/interfaces.inc:2184
+#, php-format
+msgid "Cloning new wireless interface %s"
+msgstr "Clonando nova interface sem fio %s"
+
+#: etc/inc/interfaces.inc:2142 etc/inc/interfaces.inc:2210
+#: etc/inc/interfaces.inc:2129 etc/inc/interfaces.inc:2169
+#: etc/inc/interfaces.inc:2174 etc/inc/interfaces.inc:2189
+#, php-format
+msgid "Failed to clone interface %1$s with error code %2$s, output %3$s"
+msgstr "Falha ao clonar interface %1$s com código de erro %2$s, saída %3$s"
+
+#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2790
+#: etc/inc/interfaces.inc:2709 etc/inc/interfaces.inc:2761
+#: etc/inc/interfaces.inc:2784 etc/inc/interfaces.inc:2799
+msgid "Generating new MAC address."
+msgstr "Gerando novo endereço MAC."
+
+#: etc/inc/interfaces.inc:2721 etc/inc/interfaces.inc:2796
+#: etc/inc/interfaces.inc:2715 etc/inc/interfaces.inc:2767
+#: etc/inc/interfaces.inc:2790 etc/inc/interfaces.inc:2805
+#, php-format
+msgid "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been automatically replaced with %2$s"
+msgstr "O endereço MAC INVÃLIDO (ff:ff:ff:ff:ff:ff) na interface %1$s foi automaticamente substituído por %2$s"
+
+#: etc/inc/interfaces.inc:2910
+msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()"
+msgstr "wanif não pôde ser iniciado em terface_carpdev_dhcp_configure()"
+
+#: etc/inc/interfaces.inc:3016
+#, php-format
+msgid "Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for writing.%s"
+msgstr "Erro: dhclient_%s.conf não pôde ser aberto em interfaces_wan_dhcp_configure() para escrita.%s"
+
+#: etc/inc/interfaces.inc:3029 etc/inc/interfaces.inc:3513
+#: etc/inc/interfaces.inc:3373 etc/inc/interfaces.inc:3466
+#: etc/inc/interfaces.inc:3593 etc/inc/interfaces.inc:3538
+#: etc/inc/interfaces.inc:3560
+#, php-format
+msgid "Invalid interface \"%s\" in interface_dhcp_configure()"
+msgstr "Interface inválida \"%s\" em interface_dhcp_configure()"
+
+#: etc/inc/interfaces.inc:3064 etc/inc/interfaces.inc:3548
+#: etc/inc/interfaces.inc:3408 etc/inc/interfaces.inc:3501
+#: etc/inc/interfaces.inc:3628 etc/inc/interfaces.inc:3573
+#: etc/inc/interfaces.inc:3605
+#, php-format
+msgid "Could not bring up %s interface in interface_dhcp_configure()"
+msgstr "A interface %s não pôde ser iniciada em interface_dhcp_configure()"
+
+#: etc/inc/notices.inc:76
+#, php-format
+msgid "Could not open %s for writing"
+msgstr "%s não pôde ser aberto para escrita"
+
+#: etc/inc/notices.inc:327 etc/inc/notices.inc:336
+#, php-format
+msgid "Message sent to %s OK"
+msgstr "Mensagem enviada para %s OK"
+
+#: etc/inc/notices.inc:330 etc/inc/notices.inc:331 etc/inc/notices.inc:339
+#: etc/inc/notices.inc:340
+#, php-format
+msgid "Could not send the message to %1$s -- Error: %2$s"
+msgstr "A mensagem não pôde ser enviada para %1$s -- Erro: %2$s"
+
+#: etc/inc/openvpn.inc:83 etc/inc/openvpn.inc:90 etc/inc/openvpn.inc:81
+#: etc/inc/openvpn.inc:88
+msgid "Peer to Peer ( SSL/TLS )"
+msgstr "Ponto a Ponto ( SSL/TLS )"
+
+#: etc/inc/openvpn.inc:84 etc/inc/openvpn.inc:91 etc/inc/openvpn.inc:82
+#: etc/inc/openvpn.inc:89
+msgid "Peer to Peer ( Shared Key )"
+msgstr "Ponto a Ponto ( Chave compartilhada )"
+
+#: etc/inc/openvpn.inc:85 etc/inc/openvpn.inc:83
+msgid "Remote Access ( SSL/TLS )"
+msgstr "Acesso Remoto ( SSL/TLS )"
+
+#: etc/inc/openvpn.inc:86 etc/inc/openvpn.inc:84
+msgid "Remote Access ( User Auth )"
+msgstr "Acesso Remoto ( Autenticação de Usuário)"
+
+#: etc/inc/openvpn.inc:87 etc/inc/openvpn.inc:85
+msgid "Remote Access ( SSL/TLS + User Auth )"
+msgstr "Acesso Remoto ( SSL/TLS + Autenticação de Usuário )"
+
+#: etc/inc/openvpn.inc:179 etc/inc/openvpn.inc:177 etc/inc/openvpn.inc:195
+msgid "None (No Encryption)"
+msgstr "Nenhum (Sem criptografia)"
+
+#: etc/inc/openvpn.inc:203 etc/inc/openvpn.inc:201 etc/inc/openvpn.inc:238
+#, php-format
+msgid "The field '%s' must contain a valid IP address or domain name."
+msgstr "O campo '%s' deve conter um endereço de IP ou nome de domínio válido."
+
+#: etc/inc/openvpn.inc:210 etc/inc/openvpn.inc:208 etc/inc/openvpn.inc:245
+#, php-format
+msgid "The field '%s' must contain a valid port, ranging from 0 to 65535."
+msgstr "O campo '%s' deve conter uma porta válida, variando entre 0 e 65535."
+
+#: etc/inc/openvpn.inc:219 etc/inc/openvpn.inc:217
+#, php-format
+msgid "The field '%s' must contain a valid CIDR range."
+msgstr "O campo '%s' deve conter um intervalo CIDR válido."
+
+#: etc/inc/pfsense-utils.inc:345 etc/inc/pfsense-utils.inc:330
+msgid "MASTER"
+msgstr "MASTER"
+
+#: etc/inc/pfsense-utils.inc:347 etc/inc/pfsense-utils.inc:332
+msgid "BACKUP"
+msgstr "BACKUP"
+
+#: etc/inc/pfsense-utils.inc:349 etc/inc/pfsense-utils.inc:334
+msgid "INIT"
+msgstr "INIT"
+
+#: etc/inc/pfsense-utils.inc:417 etc/inc/pfsense-utils.inc:402
+msgid "After synch increase advertising skew"
+msgstr "Após sincronização, aumentar o advertising skew"
+
+#: etc/inc/pfsense-utils.inc:462 etc/inc/pfsense-utils.inc:447
+msgid "Error creating socket!"
+msgstr "Erro criando socket!"
+
+#: etc/inc/pfsense-utils.inc:463 etc/inc/pfsense-utils.inc:448
+#, php-format
+msgid "Error code is '%1$s' - %2$s"
+msgstr "Código do erro é '%1$s' - %2$s"
+
+#: etc/inc/pfsense-utils.inc:468 etc/inc/pfsense-utils.inc:453
+#, php-format
+msgid "setsockopt() failed, error: %s"
+msgstr "setsockopt() falhou, erro: %s"
+
+#: etc/inc/pfsense-utils.inc:471 etc/inc/pfsense-utils.inc:456
+#, php-format
+msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s"
+msgstr "Pacote Mágico enviado (%1$s) para {%2$s} MAC=%3$s"
+
+#: etc/inc/pfsense-utils.inc:518 etc/inc/pfsense-utils.inc:540
+#: etc/inc/pfsense-utils.inc:533 etc/inc/pfsense-utils.inc:555
+#, php-format
+msgid "Restored %s of config file (maybe from CARP partner)"
+msgstr "Restaurado %s do arquivo de configuração (talvez do parceiro do CARP)"
+
+#: etc/inc/pfsense-utils.inc:699 etc/inc/pfsense-utils.inc:714
+#, php-format
+msgid "XMLRPC communication error: %s"
+msgstr "Erro de comunicação XMLRPC: %s"
+
+#: etc/inc/pfsense-utils.inc:702 etc/inc/pfsense-utils.inc:717
+#, php-format
+msgid "XMLRPC request failed with error %1$s: %2$s"
+msgstr "Requisição XMLRPC falhou com o erro %1$s: %2$s"
+
+#: etc/inc/pfsense-utils.inc:795 etc/inc/pfsense-utils.inc:810
+msgid "reload_interfaces_sync() is starting."
+msgstr "reload_interfaces_sync() está iniciando."
+
+#: etc/inc/pfsense-utils.inc:803 etc/inc/pfsense-utils.inc:818
+msgid "Enabling system routing"
+msgstr "Habilitando roteamento do sistema"
+
+#: etc/inc/pfsense-utils.inc:806 etc/inc/pfsense-utils.inc:821
+msgid "Cleaning up Interfaces"
+msgstr "Limpando Interfaces"
+
+#: etc/inc/pfsense-utils.inc:912 etc/inc/pfsense-utils.inc:927
+#: etc/inc/pfsense-utils.inc:936
+msgid "Enabling auto login was not possible."
+msgstr "Não foi possível habilitar o auto login."
+
+#: etc/inc/pfsense-utils.inc:1100 etc/inc/pfsense-utils.inc:1137
+#: etc/inc/pfsense-utils.inc:1191 etc/inc/pfsense-utils.inc:1196
+msgid "No history data found!"
+msgstr "Nenhum dado de histórico encontrado!"
+
+#: etc/inc/pfsense-utils.inc:1222 etc/inc/pfsense-utils.inc:1260
+#: etc/inc/pfsense-utils.inc:1313 etc/inc/pfsense-utils.inc:1318
+msgid "device not present! Is the modem attached to the system?"
+msgstr "o dispositivo não está presente! O modem está acoplado ao sistema?"
+
+#: etc/inc/pfsense-utils.inc:1262 etc/inc/pfsense-utils.inc:1327
+#: etc/inc/pfsense-utils.inc:1380 etc/inc/pfsense-utils.inc:1385
+msgid "running"
+msgstr "executando"
+
+#: etc/inc/pfsense-utils.inc:1263 usr/local/www/graph.php:201
+#: etc/inc/pfsense-utils.inc:1328 etc/inc/pfsense-utils.inc:1381
+#: etc/inc/pfsense-utils.inc:1386
+msgid "up"
+msgstr "para cima"
+
+#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371
+#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429
+msgid "blocking"
+msgstr "bloqueando"
+
+#: etc/inc/pfsense-utils.inc:1300 etc/inc/pfsense-utils.inc:1371
+#: etc/inc/pfsense-utils.inc:1424 etc/inc/pfsense-utils.inc:1429
+msgid "check for ethernet loops"
+msgstr "verificar loops ethernet"
+
+#: etc/inc/pfsense-utils.inc:1303 etc/inc/pfsense-utils.inc:1374
+#: etc/inc/pfsense-utils.inc:1427 etc/inc/pfsense-utils.inc:1432
+msgid "learning"
+msgstr "aprendendo"
+
+#: etc/inc/pfsense-utils.inc:1306 etc/inc/pfsense-utils.inc:1377
+#: etc/inc/pfsense-utils.inc:1430 etc/inc/pfsense-utils.inc:1435
+msgid "forwarding"
+msgstr "encaminhando"
+
+#: etc/inc/pfsense-utils.inc:1417 etc/inc/pfsense-utils.inc:1493
+#: etc/inc/pfsense-utils.inc:1546 etc/inc/pfsense-utils.inc:1551
+#, php-format
+msgid "DNSCACHE: Found old IP %1$s and new IP %2$s"
+msgstr "DNSCACHE: Encontrado IP antigo %1$s e novo IP %2$s"
+
+#: etc/inc/pkg-utils.inc:211 etc/inc/pkg-utils.inc:226
+#: etc/inc/pkg-utils.inc:244
+msgid "Resyncing configuration for all packages."
+msgstr "Ressincronizando configurações para todos os pacotes."
+
+#: etc/inc/pkg-utils.inc:231 etc/inc/pkg-utils.inc:246
+#: etc/inc/pkg-utils.inc:264
+msgid "Syncing packages:"
+msgstr "Sincronizando pacotes:"
+
+#: etc/inc/pkg-utils.inc:273 etc/inc/pkg-utils.inc:288
+#: etc/inc/pkg-utils.inc:306
+#, php-format
+msgid "The %1$s package is missing required dependencies and must be reinstalled. %2$s"
+msgstr "O pacote %1$s possui dependências necessárias faltando e precisa ser reinstalado. %2$s"
+
+#: etc/inc/pkg-utils.inc:297 etc/inc/pkg-utils.inc:437
+#: etc/inc/pkg-utils.inc:312 etc/inc/pkg-utils.inc:462
+#: etc/inc/pkg-utils.inc:464 etc/inc/pkg-utils.inc:330
+#: etc/inc/pkg-utils.inc:481
+#, php-format
+msgid "The %s package is missing required dependencies and must be reinstalled."
+msgstr "As dependências requeridas pelo pacote %s estão faltando e o pacote deve ser reinstalado."
+
+#: etc/inc/pkg-utils.inc:404 etc/inc/pkg-utils.inc:429
+#: etc/inc/pkg-utils.inc:431 etc/inc/pkg-utils.inc:448
+#, php-format
+msgid "The %s package is missing its configuration file and must be reinstalled."
+msgstr "O arquivo de configuração do pacote %s não foi encontrado e o pacote deve ser reinstalado."
+
+#: etc/inc/pkg-utils.inc:563 usr/local/www/pkg_mgr_install.php:101
+#: etc/inc/pkg-utils.inc:589 etc/inc/pkg-utils.inc:590
+#: usr/local/www/pkg_mgr_install.php:99 etc/inc/pkg-utils.inc:625
+#: usr/local/www/pkg_mgr_install.php:97
+msgid "Beginning package installation."
+msgstr "Iniciando instalação de pacote."
+
+#: etc/inc/pkg-utils.inc:564 etc/inc/pkg-utils.inc:565
+#: etc/inc/pkg-utils.inc:590 etc/inc/pkg-utils.inc:591
+#: etc/inc/pkg-utils.inc:592 etc/inc/pkg-utils.inc:626
+#: etc/inc/pkg-utils.inc:627
+#, php-format
+msgid "Beginning package installation for %s ."
+msgstr "Iniciando instalação do pacote para %s ."
+
+#: etc/inc/pkg-utils.inc:569 etc/inc/pkg-utils.inc:595
+#: etc/inc/pkg-utils.inc:596 etc/inc/pkg-utils.inc:631
+msgid "Downloading package configuration file... "
+msgstr "Download de arquivo de configuração de pacote..."
+
+#: etc/inc/pkg-utils.inc:571 etc/inc/pkg-utils.inc:597
+#: etc/inc/pkg-utils.inc:598 etc/inc/pkg-utils.inc:633
+msgid "Downloading package configuration file..."
+msgstr "Download do arquivo de configuração de pacote..."
+
+#: etc/inc/pkg-utils.inc:575 etc/inc/pkg-utils.inc:601
+#: etc/inc/pkg-utils.inc:602 etc/inc/pkg-utils.inc:637
+msgid "ERROR! Unable to fetch package configuration file. Aborting installation."
+msgstr "ERRO! Não foi possível buscar o arquivo de configuração de pacote. Abortando instalação."
+
+#: etc/inc/pkg-utils.inc:577 etc/inc/pkg-utils.inc:603
+#: etc/inc/pkg-utils.inc:604 etc/inc/pkg-utils.inc:639
+msgid "ERROR! Unable to fetch package configuration file. Aborting package installation."
+msgstr "ERRO! Não foi possível buscar o arquivo de configuração de pacote. Abortando instalação de pacote."
+
+#: etc/inc/pkg-utils.inc:579 etc/inc/pkg-utils.inc:605
+#: etc/inc/pkg-utils.inc:606 etc/inc/pkg-utils.inc:641
+msgid ""
+"failed!\n"
+"\n"
+"Installation aborted.\n"
+msgstr ""
+"falhou!\n"
+"\n"
+"Instalação abortada.\n"
+
+#: etc/inc/pkg-utils.inc:591 etc/inc/pkg-utils.inc:617
+#: etc/inc/pkg-utils.inc:618 etc/inc/pkg-utils.inc:653
+msgid "Saving updated package information..."
+msgstr "Salvando informações atualizadas do pacote..."
+
+#: etc/inc/pkg-utils.inc:595 etc/inc/pkg-utils.inc:621
+#: etc/inc/pkg-utils.inc:622 etc/inc/pkg-utils.inc:657
+#, php-format
+msgid "Installed %s package."
+msgstr "Pacote %s instalado."
+
+#: etc/inc/pkg-utils.inc:599 etc/inc/pkg-utils.inc:625
+#: etc/inc/pkg-utils.inc:626 etc/inc/pkg-utils.inc:661
+#, php-format
+msgid "Overwrote previous installation of %s."
+msgstr "Sobrescreveu instalação anterior de %s."
+
+#: etc/inc/pkg-utils.inc:600 etc/inc/pkg-utils.inc:626
+#: etc/inc/pkg-utils.inc:627 etc/inc/pkg-utils.inc:662
+msgid "overwrite!"
+msgstr "sobrescreva!"
+
+#: etc/inc/pkg-utils.inc:612 etc/inc/pkg-utils.inc:638
+#: etc/inc/pkg-utils.inc:639 etc/inc/pkg-utils.inc:674
+msgid "Failed to install package."
+msgstr "Falha ao instalar pacote."
+
+#: etc/inc/pkg-utils.inc:616 etc/inc/pkg-utils.inc:642
+#: etc/inc/pkg-utils.inc:643 etc/inc/pkg-utils.inc:678
+msgid "Writing configuration... "
+msgstr "Escrevendo a configuração..."
+
+#: etc/inc/pkg-utils.inc:652 etc/inc/pkg-utils.inc:678
+#: etc/inc/pkg-utils.inc:679 etc/inc/pkg-utils.inc:714
+#, php-format
+msgid "The %s package is not installed.%sInstallation aborted."
+msgstr "O pacote %s não está instalado.%sInstalação abortada."
+
+#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693
+#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729
+msgid "Installing"
+msgstr "Instalando"
+
+#: etc/inc/pkg-utils.inc:667 etc/inc/pkg-utils.inc:693
+#: etc/inc/pkg-utils.inc:694 etc/inc/pkg-utils.inc:729
+msgid "and its dependencies."
+msgstr "e suas dependências."
+
+#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694
+#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730
+msgid "Downloading"
+msgstr "Fazendo download"
+
+#: etc/inc/pkg-utils.inc:668 etc/inc/pkg-utils.inc:694
+#: etc/inc/pkg-utils.inc:695 etc/inc/pkg-utils.inc:730
+msgid "and its dependencies... "
+msgstr "e suas dependências..."
+
+#: etc/inc/pkg-utils.inc:680 etc/inc/pkg-utils.inc:706
+#: etc/inc/pkg-utils.inc:707 etc/inc/pkg-utils.inc:742
+msgid "Package WAS NOT installed properly."
+msgstr "O pacote NÃO FOI instalado apropriadamente."
+
+#: etc/inc/pkg-utils.inc:693 etc/inc/pkg-utils.inc:719
+#: etc/inc/pkg-utils.inc:720 etc/inc/pkg-utils.inc:755
+msgid "Loading package configuration... "
+msgstr "Carregando configuração de pacote... "
+
+#: etc/inc/pkg-utils.inc:698 etc/inc/pkg-utils.inc:724
+#: etc/inc/pkg-utils.inc:725 etc/inc/pkg-utils.inc:760
+msgid "Configuring package components...\n"
+msgstr "Configurando componentes do pacote...\n"
+
+#: etc/inc/pkg-utils.inc:704 etc/inc/pkg-utils.inc:1049
+#: etc/inc/pkg-utils.inc:730 etc/inc/pkg-utils.inc:1086
+#: etc/inc/pkg-utils.inc:731 etc/inc/pkg-utils.inc:1087
+#: etc/inc/pkg-utils.inc:766 etc/inc/pkg-utils.inc:1122
+msgid "System files... "
+msgstr "Sistema de arquivos..."
+
+#: etc/inc/pkg-utils.inc:716 etc/inc/pkg-utils.inc:742
+#: etc/inc/pkg-utils.inc:743 etc/inc/pkg-utils.inc:778
+msgid "Additional files... "
+msgstr "Arquivos adicionais..."
+
+#: etc/inc/pkg-utils.inc:742 etc/inc/pkg-utils.inc:768
+#: etc/inc/pkg-utils.inc:769 etc/inc/pkg-utils.inc:804
+msgid "Extracting tarball to -C for "
+msgstr "Extraindo tarball para -C para"
+
+#: etc/inc/pkg-utils.inc:748 etc/inc/pkg-utils.inc:774
+#: etc/inc/pkg-utils.inc:775 etc/inc/pkg-utils.inc:810
+#, php-format
+msgid "Changing file mode to %1$s for %2$s%3$s%4$s"
+msgstr "Alterando modo de arquivo de %1$s para %2$s%3$s%4$s"
+
+#: etc/inc/pkg-utils.inc:764 etc/inc/pkg-utils.inc:1025
+#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:1062
+#: etc/inc/pkg-utils.inc:791 etc/inc/pkg-utils.inc:1063
+#: etc/inc/pkg-utils.inc:826 etc/inc/pkg-utils.inc:1098
+msgid "Loading package instructions..."
+msgstr "Carregando instruções de pacote..."
+
+#: etc/inc/pkg-utils.inc:779 etc/inc/pkg-utils.inc:805
+#: etc/inc/pkg-utils.inc:806 etc/inc/pkg-utils.inc:841
+msgid "Custom commands..."
+msgstr "Comandos personalizados..."
+
+#: etc/inc/pkg-utils.inc:783 etc/inc/pkg-utils.inc:809
+#: etc/inc/pkg-utils.inc:810 etc/inc/pkg-utils.inc:845
+msgid "Executing custom_php_global_functions()..."
+msgstr "Executando custom_php_global_functions()..."
+
+#: etc/inc/pkg-utils.inc:790 etc/inc/pkg-utils.inc:816
+#: etc/inc/pkg-utils.inc:817 etc/inc/pkg-utils.inc:852
+msgid "Executing custom_php_install_command()..."
+msgstr "Executando custom_php_install_command()..."
+
+#: etc/inc/pkg-utils.inc:809 etc/inc/pkg-utils.inc:845
+#: etc/inc/pkg-utils.inc:846 etc/inc/pkg-utils.inc:881
+msgid "Executing custom_php_resync_config_command()..."
+msgstr "Executando custom_php_resync_config_command()..."
+
+#: etc/inc/pkg-utils.inc:818 etc/inc/pkg-utils.inc:972
+#: etc/inc/pkg-utils.inc:854 etc/inc/pkg-utils.inc:1009
+#: etc/inc/pkg-utils.inc:855 etc/inc/pkg-utils.inc:1010
+#: etc/inc/pkg-utils.inc:890 etc/inc/pkg-utils.inc:1045
+msgid "Menu items... "
+msgstr "Items de menu..."
+
+#: etc/inc/pkg-utils.inc:834 etc/inc/pkg-utils.inc:870
+#: etc/inc/pkg-utils.inc:871 etc/inc/pkg-utils.inc:906
+msgid "Integrated Tab items... "
+msgstr "Itens de abas integrados..."
+
+#: etc/inc/pkg-utils.inc:850 etc/inc/pkg-utils.inc:989
+#: etc/inc/pkg-utils.inc:886 etc/inc/pkg-utils.inc:1026
+#: etc/inc/pkg-utils.inc:887 etc/inc/pkg-utils.inc:1027
+#: etc/inc/pkg-utils.inc:922 etc/inc/pkg-utils.inc:1062
+msgid "Services... "
+msgstr "Serviços... "
+
+#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901
+#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937
+msgid "Loading package configuration... failed!"
+msgstr "Carregando configuração de pacote... falhou!"
+
+#: etc/inc/pkg-utils.inc:865 etc/inc/pkg-utils.inc:901
+#: etc/inc/pkg-utils.inc:902 etc/inc/pkg-utils.inc:937
+msgid "Installation aborted."
+msgstr "Instalação abortada."
+
+#: etc/inc/pkg-utils.inc:867 etc/inc/pkg-utils.inc:903
+#: etc/inc/pkg-utils.inc:904 etc/inc/pkg-utils.inc:939
+msgid "Unable to load package configuration. Installation aborted."
+msgstr "Não foi possível carregar a configuração do pacote. Instalação abortada."
+
+#: etc/inc/pkg-utils.inc:911 etc/inc/pkg-utils.inc:948
+#: etc/inc/pkg-utils.inc:949 etc/inc/pkg-utils.inc:984
+#, php-format
+msgid "Starting package deletion for %s..."
+msgstr "Iniciando remoção do pacote para %s..."
+
+#: etc/inc/pkg-utils.inc:931 etc/inc/pkg-utils.inc:968
+#: etc/inc/pkg-utils.inc:969 etc/inc/pkg-utils.inc:1004
+#, php-format
+msgid "The %s package is not installed.%sDeletion aborted."
+msgstr "O pacote %s não está instalado.%sRemoção abortada."
+
+#: etc/inc/pkg-utils.inc:942 etc/inc/pkg-utils.inc:979
+#: etc/inc/pkg-utils.inc:980 etc/inc/pkg-utils.inc:1015
+#, php-format
+msgid "Removing %s package... "
+msgstr "Removendo pacote %s..."
+
+#: etc/inc/pkg-utils.inc:943 etc/inc/pkg-utils.inc:980
+#: etc/inc/pkg-utils.inc:981 etc/inc/pkg-utils.inc:1016
+#, php-format
+msgid "Removing %s components..."
+msgstr "Removendo componentes %s..."
+
+#: etc/inc/pkg-utils.inc:955 etc/inc/pkg-utils.inc:992
+#: etc/inc/pkg-utils.inc:993 etc/inc/pkg-utils.inc:1028
+msgid "Tabs items... "
+msgstr "Itens de abas..."
+
+#: etc/inc/pkg-utils.inc:1059 etc/inc/pkg-utils.inc:1096
+#: etc/inc/pkg-utils.inc:1097 etc/inc/pkg-utils.inc:1132
+msgid "Deinstall commands... "
+msgstr "Desinstalar comandos..."
+
+#: etc/inc/pkg-utils.inc:1069 etc/inc/pkg-utils.inc:1106
+#: etc/inc/pkg-utils.inc:1107 etc/inc/pkg-utils.inc:1142
+msgid "Removing package instructions..."
+msgstr "Removendo instruções de pacote..."
+
+#: etc/inc/pkg-utils.inc:1071 etc/inc/pkg-utils.inc:1108
+#: etc/inc/pkg-utils.inc:1109 etc/inc/pkg-utils.inc:1144
+#, php-format
+msgid "Remove '%s'"
+msgstr "Remover '%s'"
+
+#: etc/inc/pkg-utils.inc:1078 etc/inc/pkg-utils.inc:1115
+#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1151
+msgid "Auxiliary files... "
+msgstr "Arquivos auxiliares..."
+
+#: etc/inc/pkg-utils.inc:1092 etc/inc/pkg-utils.inc:1129
+#: etc/inc/pkg-utils.inc:1130 etc/inc/pkg-utils.inc:1165
+msgid "Package XML... "
+msgstr "Empacotar XML..."
+
+#: etc/inc/pkg-utils.inc:1111 etc/inc/pkg-utils.inc:1148
+#: etc/inc/pkg-utils.inc:1149 etc/inc/pkg-utils.inc:1184
+msgid "Configuration... "
+msgstr "Configuração..."
+
+#: etc/inc/pkg-utils.inc:1205 etc/inc/pkg-utils.inc:1242
+#: etc/inc/pkg-utils.inc:1243 etc/inc/pkg-utils.inc:1274
+#: etc/inc/pkg-utils.inc:1275
+#, php-format
+msgid " >>> Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity."
+msgstr ">>> Incapaz de comunicar-se com %1$s. Por favor, verifique o DNS a configuração de interface, e se %2$s tem conectividade com a Internet funcional."
+
+#: etc/inc/radius.inc:404 etc/inc/radius.inc:406
+msgid "Error sending request:"
+msgstr "Erro enviando a requisição:"
+
+#: etc/inc/radius.inc:410 etc/inc/radius.inc:412
+msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting"
+msgstr "RADIUS_ACCESS_ACCEPT é esperado para accounting"
+
+#: etc/inc/radius.inc:419 etc/inc/radius.inc:421
+msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication"
+msgstr "RADIUS_ACCOUNTING_RESPONSE é esperado para a autenticação"
+
+#: etc/inc/radius.inc:424 etc/inc/radius.inc:426
+#, php-format
+msgid "Unexpected return value: %s"
+msgstr "Valor de retorno inesperado: %s"
+
+#: etc/inc/services.inc:262 etc/inc/services.inc:333 etc/inc/services.inc:360
+#: etc/inc/services.inc:369 etc/inc/services.inc:371 etc/inc/services.inc:373
+#: etc/inc/services.inc:366
+#, php-format
+msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr "Restauração de concessões DHCP falhou ao sair com %1$s, o erro é: %2$s%3$s"
+
+#: etc/inc/services.inc:275 etc/inc/services.inc:346 etc/inc/services.inc:373
+#: etc/inc/services.inc:382 etc/inc/services.inc:387 etc/inc/services.inc:389
+msgid "Starting DHCP service..."
+msgstr "Iniciando serviço DHCP..."
+
+#: etc/inc/services.inc:282 etc/inc/services.inc:353 etc/inc/services.inc:380
+#: etc/inc/services.inc:820 etc/inc/services.inc:825 etc/inc/services.inc:877
+#: etc/inc/services.inc:874
+#, php-format
+msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"
+msgstr "Erro: não foi possível abrir dhcp.conf em services_dhcpdv4_configure().%s"
+
+#: etc/inc/services.inc:353 etc/inc/services.inc:434 etc/inc/services.inc:461
+#: etc/inc/services.inc:463 etc/inc/services.inc:468 etc/inc/services.inc:469
+msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!"
+msgstr "Atenção! Instalação de DHCP falhou e nenhum IP virtual do CARP definido!"
+
+#: etc/inc/services.inc:949 etc/inc/services.inc:1078
+#: etc/inc/services.inc:1210 etc/inc/services.inc:1203
+#: etc/inc/services.inc:1209 etc/inc/services.inc:1261
+#: etc/inc/services.inc:1259
+msgid "Could not write Igmpproxy configuration file!"
+msgstr "O arquivo de configuração do Igmpproxy não pôde ser escrito!"
+
+#: etc/inc/services.inc:956
+msgid "Started Igmpproxy service sucsesfully."
+msgstr "Serviço Igmpproxy iniciado com sucesso."
+
+#: etc/inc/services.inc:980 etc/inc/services.inc:1109
+#: etc/inc/services.inc:1241 etc/inc/services.inc:1235
+#: etc/inc/services.inc:1242 etc/inc/services.inc:1294
+#: etc/inc/services.inc:1292
+msgid "Starting DHCP relay service..."
+msgstr "Iniciando serviço de retransmição DHCP..."
+
+#: etc/inc/services.inc:1096 etc/inc/services.inc:1223
+#: etc/inc/services.inc:1355 etc/inc/services.inc:1350
+#: etc/inc/services.inc:1365 etc/inc/services.inc:1417
+#: etc/inc/services.inc:1415
+msgid "Starting DHCPv6 relay service..."
+msgstr "Iniciando serviço de retransmissão DHCPv6..."
+
+#: etc/inc/services.inc:1222 etc/inc/services.inc:1358
+#: etc/inc/services.inc:1493 etc/inc/services.inc:1489
+#: etc/inc/services.inc:1505 etc/inc/services.inc:1557
+#: etc/inc/services.inc:1555
+msgid "Starting DynDNS clients..."
+msgstr "Iniciando clientes DynDNS..."
+
+#: etc/inc/services.inc:1255 etc/inc/services.inc:1392
+#: etc/inc/services.inc:1531 etc/inc/services.inc:1545
+#: etc/inc/services.inc:1562 etc/inc/services.inc:1622
+#: etc/inc/services.inc:1620
+msgid "Starting DNS forwarder..."
+msgstr "Iniciando encaminhadores DNS..."
+
+#: etc/inc/services.inc:1324 etc/inc/services.inc:1507
+#: etc/inc/services.inc:1646 etc/inc/services.inc:1623
+#: etc/inc/services.inc:1655 etc/inc/services.inc:1686
+#: etc/inc/services.inc:1750 etc/inc/services.inc:1748
+msgid "Starting SNMP daemon... "
+msgstr "Iniciando daemon SNMP... "
+
+#: etc/inc/services.inc:1329 etc/inc/services.inc:1512
+#: etc/inc/services.inc:1651 etc/inc/services.inc:1628
+#: etc/inc/services.inc:1660 etc/inc/services.inc:1691
+#: etc/inc/services.inc:1755 etc/inc/services.inc:1753
+#, php-format
+msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s"
+msgstr "Erro: snmpd.conf não pôde ser aberto em services_snmpd_configure().%s"
+
+#: etc/inc/services.inc:1875 etc/inc/services.inc:2067
+#: etc/inc/services.inc:1919 etc/inc/services.inc:1908
+#: etc/inc/services.inc:1948 etc/inc/services.inc:1979
+#: etc/inc/services.inc:2043 etc/inc/services.inc:2093
+msgid "pfSense specific crontab entries"
+msgstr "Entradas do crontab específicas do pfSense"
+
+#: etc/inc/services.inc:1876 etc/inc/services.inc:2068
+#: etc/inc/services.inc:1920 etc/inc/services.inc:1909
+#: etc/inc/services.inc:1949 etc/inc/services.inc:1980
+#: etc/inc/services.inc:2044 etc/inc/services.inc:2094
+msgid "Created:"
+msgstr "Criado:"
+
+#: etc/inc/services.inc:1890 etc/inc/services.inc:2082
+#: etc/inc/services.inc:1934 etc/inc/services.inc:1923
+#: etc/inc/services.inc:1963 etc/inc/services.inc:1994
+#: etc/inc/services.inc:2058 etc/inc/services.inc:2108
+msgid "If possible do not add items to this file manually."
+msgstr "Se possível não adicione itens a esse arquivo manualmente."
+
+#: etc/inc/services.inc:1891 etc/inc/services.inc:2083
+#: etc/inc/services.inc:1935 etc/inc/services.inc:1924
+#: etc/inc/services.inc:1964 etc/inc/services.inc:1995
+#: etc/inc/services.inc:2059 etc/inc/services.inc:2109
+msgid "If you do so, this file must be terminated with a blank line (e.g. new line)"
+msgstr "Se você o fizer, o arquivo deve ser finalizado com uma linha em branco (e.g nova linha)"
+
+#: etc/inc/services.inc:1934 etc/inc/services.inc:2126
+#: etc/inc/services.inc:1978 etc/inc/services.inc:1968
+#: etc/inc/services.inc:2008 etc/inc/services.inc:2039
+#: etc/inc/services.inc:2103 etc/inc/services.inc:2153
+msgid "Starting UPnP service... "
+msgstr "Iniciando serviço UPnP..."
+
+#: etc/inc/services.inc:1969 etc/inc/services.inc:2161
+#: etc/inc/services.inc:2013 etc/inc/services.inc:2005
+#: etc/inc/services.inc:2045 etc/inc/services.inc:2076
+#: etc/inc/services.inc:2140 etc/inc/services.inc:2190
+#, php-format
+msgid "Installed cron job for %s"
+msgstr "Instalado serviço cron para %s"
+
+#: etc/inc/services.inc:1972 etc/inc/services.inc:2164
+#: etc/inc/services.inc:2016 etc/inc/services.inc:2008
+#: etc/inc/services.inc:2048 etc/inc/services.inc:2079
+#: etc/inc/services.inc:2143 etc/inc/services.inc:2193
+#, php-format
+msgid "Updated cron job for %s"
+msgstr "Atualizado serviço cron para %s"
+
+#: etc/inc/services.inc:1977 etc/inc/services.inc:2169
+#: etc/inc/services.inc:2021
+#, php-format
+msgid "Remvoed cron job for %s"
+msgstr "Removido serviço cron para %s"
+
+#: etc/inc/shaper.inc:189 etc/inc/shaper.inc:190
+#, php-format
+msgid "The field '%s' contains invalid characters."
+msgstr "O campo '%s' contém caracteres inválidos."
+
+#: etc/inc/shaper.inc:195 etc/inc/shaper.inc:196
+#, php-format
+msgid "The field '%s' is required."
+msgstr "O campo '%s' é requerido."
+
+#: etc/inc/shaper.inc:317 etc/inc/shaper.inc:651 etc/inc/shaper.inc:1544
+#: etc/inc/shaper.inc:1850 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2327
+#: etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2593 etc/inc/shaper.inc:2787
+#: etc/inc/shaper.inc:3023 usr/local/www/interfaces_ppps_edit.php:750
+#: etc/inc/shaper.inc:318 etc/inc/shaper.inc:652 etc/inc/shaper.inc:1546
+#: etc/inc/shaper.inc:1852 etc/inc/shaper.inc:2194 etc/inc/shaper.inc:2329
+#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2595 etc/inc/shaper.inc:2789
+#: etc/inc/shaper.inc:3031 etc/inc/shaper.inc:3161
+#: usr/local/www/interfaces_ppps_edit.php:751
+#: usr/local/www/interfaces_ppps_edit.php:757
+#: usr/local/www/status_queues.php:151 etc/inc/shaper.inc:1547
+#: etc/inc/shaper.inc:1853 etc/inc/shaper.inc:2195 etc/inc/shaper.inc:2330
+#: etc/inc/shaper.inc:2470 etc/inc/shaper.inc:2596 etc/inc/shaper.inc:2790
+#: etc/inc/shaper.inc:3162 etc/inc/shaper.inc:654 etc/inc/shaper.inc:1550
+#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2200 etc/inc/shaper.inc:2335
+#: etc/inc/shaper.inc:2475 etc/inc/shaper.inc:2601 etc/inc/shaper.inc:2795
+#: etc/inc/shaper.inc:3169 usr/local/www/interfaces_ppps_edit.php:754
+#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:678 etc/inc/shaper.inc:1601
+#: etc/inc/shaper.inc:1916 etc/inc/shaper.inc:2258 etc/inc/shaper.inc:2398
+#: etc/inc/shaper.inc:2538 etc/inc/shaper.inc:2669 etc/inc/shaper.inc:2863
+#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3293
+#: usr/local/www/status_queues.php:173 etc/inc/shaper.inc:3315
+msgid "Bandwidth"
+msgstr "Largura de banda"
+
+#: etc/inc/shaper.inc:319 etc/inc/shaper.inc:1546 etc/inc/shaper.inc:2194
+#: etc/inc/shaper.inc:2469 etc/inc/shaper.inc:2789 etc/inc/shaper.inc:320
+#: etc/inc/shaper.inc:1548 etc/inc/shaper.inc:2196 etc/inc/shaper.inc:2471
+#: etc/inc/shaper.inc:2791 etc/inc/shaper.inc:1549 etc/inc/shaper.inc:2197
+#: etc/inc/shaper.inc:2472 etc/inc/shaper.inc:2792 etc/inc/shaper.inc:1552
+#: etc/inc/shaper.inc:2202 etc/inc/shaper.inc:2477 etc/inc/shaper.inc:2797
+#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1603 etc/inc/shaper.inc:2260
+#: etc/inc/shaper.inc:2540 etc/inc/shaper.inc:2865 etc/inc/shaper.inc:2884
+#: etc/inc/shaper.inc:2886
+msgid "Bandwidthtype"
+msgstr "Tipo de largura de banda"
+
+#: etc/inc/shaper.inc:324 etc/inc/shaper.inc:1552 etc/inc/shaper.inc:2199
+#: etc/inc/shaper.inc:2474 etc/inc/shaper.inc:2900 etc/inc/shaper.inc:325
+#: etc/inc/shaper.inc:1554 etc/inc/shaper.inc:2201 etc/inc/shaper.inc:2476
+#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2202
+#: etc/inc/shaper.inc:2477 etc/inc/shaper.inc:1558 etc/inc/shaper.inc:2207
+#: etc/inc/shaper.inc:2482 etc/inc/shaper.inc:328 etc/inc/shaper.inc:1609
+#: etc/inc/shaper.inc:2265 etc/inc/shaper.inc:2545
+msgid "Bandwidth must be an integer."
+msgstr "Largura de banda deve ser um inteiro."
+
+#: etc/inc/shaper.inc:326 etc/inc/shaper.inc:1555 etc/inc/shaper.inc:2203
+#: etc/inc/shaper.inc:2478 etc/inc/shaper.inc:327 etc/inc/shaper.inc:1557
+#: etc/inc/shaper.inc:2205 etc/inc/shaper.inc:2480 etc/inc/shaper.inc:1558
+#: etc/inc/shaper.inc:2206 etc/inc/shaper.inc:2481 etc/inc/shaper.inc:1561
+#: etc/inc/shaper.inc:2211 etc/inc/shaper.inc:2486 etc/inc/shaper.inc:330
+#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:2269 etc/inc/shaper.inc:2549
+msgid "Bandwidth cannot be negative."
+msgstr "A largura de banda não pode ser negativa."
+
+#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:329 etc/inc/shaper.inc:332
+msgid "Qlimit must be an integer."
+msgstr "Qlimit deve ser um inteiro."
+
+#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:331 etc/inc/shaper.inc:334
+msgid "Qlimit must be an positive."
+msgstr "Qlimit deve ser positivo."
+
+#: etc/inc/shaper.inc:332 etc/inc/shaper.inc:333 etc/inc/shaper.inc:336
+msgid "Tbrsize must be an integer."
+msgstr "Tbrsize deve ser um inteiro."
+
+#: etc/inc/shaper.inc:334 etc/inc/shaper.inc:335 etc/inc/shaper.inc:338
+msgid "Tbrsize must be an positive."
+msgstr "Tbrsize deve ser positivo."
+
+#: etc/inc/shaper.inc:614 etc/inc/shaper.inc:1120 etc/inc/shaper.inc:3269
+#: etc/inc/shaper.inc:3488 etc/inc/shaper.inc:615 etc/inc/shaper.inc:1121
+#: etc/inc/shaper.inc:3277 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3432
+#: etc/inc/shaper.inc:3655 etc/inc/shaper.inc:1122 etc/inc/shaper.inc:3433
+#: etc/inc/shaper.inc:3656 etc/inc/shaper.inc:617 etc/inc/shaper.inc:1126
+#: etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:637
+#: etc/inc/shaper.inc:1169 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3731
+#: etc/inc/shaper.inc:3589 etc/inc/shaper.inc:3836 etc/inc/shaper.inc:3615
+#: etc/inc/shaper.inc:3862
+msgid "Enable/Disable"
+msgstr "Habilitar/Desabilitar"
+
+#: etc/inc/shaper.inc:619 etc/inc/shaper.inc:620 etc/inc/shaper.inc:622
+#: etc/inc/shaper.inc:642
+msgid "Enable/disable discipline and its children"
+msgstr "Habilitar/Desabilitar disciplina e suas filhas"
+
+#: etc/inc/shaper.inc:621 etc/inc/shaper.inc:965 etc/inc/shaper.inc:2791
+#: etc/inc/shaper.inc:3016 etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3496
+#: etc/inc/shaper.inc:3568 usr/local/www/load_balancer_virtual_server.php:128
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/interfaces_groups.php:94
+#: usr/local/www/firewall_aliases.php:165
+#: usr/local/www/firewall_aliases_edit.php:134
+#: usr/local/www/firewall_aliases_edit.php:576
+#: usr/local/www/firewall_schedule.php:96
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:235
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:181
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:183
+#: usr/local/www/services_captiveportal_filemanager.php:162
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:411
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:195
+#: usr/local/www/services_igmpproxy.php:95
+#: usr/local/www/status_gateways.php:72 usr/local/www/status_lb_pool.php:130
+#: usr/local/www/status_lb_vs.php:77 usr/local/www/status_openvpn.php:211
+#: usr/local/www/status_openvpn.php:262 usr/local/www/system_camanager.php:565
+#: usr/local/www/system_certmanager.php:854
+#: usr/local/www/system_crlmanager.php:487
+#: usr/local/www/system_gateways.php:152
+#: usr/local/www/system_gateways_edit.php:98
+#: usr/local/www/system_gateways_edit.php:370
+#: usr/local/www/system_groupmanager.php:346
+#: usr/local/www/system_usermanager.php:577
+#: usr/local/www/system_usermanager.php:630 etc/inc/shaper.inc:622
+#: etc/inc/shaper.inc:966 etc/inc/shaper.inc:2793 etc/inc/shaper.inc:3020
+#: etc/inc/shaper.inc:3284 etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3580
+#: usr/local/www/pkg_mgr.php:129 usr/local/www/system_certmanager.php:1020
+#: usr/local/www/load_balancer_relay_action_edit.php:410
+#: usr/local/www/system_usermanager.php:575
+#: usr/local/www/system_usermanager.php:628
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/pkg_mgr_installed.php:111
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/system_gateways_edit.php:99
+#: usr/local/www/system_gateways_edit.php:391
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_virtual_server_edit.php:157
+#: usr/local/www/firewall_aliases.php:168
+#: usr/local/www/system_camanager.php:566
+#: usr/local/www/load_balancer_pool_edit.php:189
+#: usr/local/www/load_balancer_pool.php:132 etc/inc/shaper.inc:3150
+#: etc/inc/shaper.inc:3439 etc/inc/shaper.inc:3663 etc/inc/shaper.inc:3735
+#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265
+#: usr/local/www/load_balancer_relay_protocol_edit.php:193
+#: usr/local/www/interfaces_groups.php:95
+#: usr/local/www/load_balancer_relay_action_edit.php:408
+#: usr/local/www/load_balancer_monitor_edit.php:233
+#: usr/local/www/system_crlmanager.php:520
+#: usr/local/www/firewall_aliases_edit.php:584
+#: usr/local/www/load_balancer_virtual_server.php:127
+#: usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:497
+#: usr/local/www/status_gateways.php:73
+#: usr/local/www/services_captiveportal_filemanager.php:159
+#: usr/local/www/load_balancer_monitor.php:121
+#: usr/local/www/load_balancer_relay_protocol.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:155
+#: usr/local/www/firewall_aliases.php:188
+#: usr/local/www/load_balancer_relay_action.php:138
+#: usr/local/www/load_balancer_pool_edit.php:187
+#: usr/local/www/load_balancer_pool.php:130
+#: usr/local/www/system_gateways_edit.php:499
+#: usr/local/www/system_camanager.php:590 usr/local/www/status_openvpn.php:313
+#: usr/local/www/system_certmanager.php:1062 etc/inc/shaper.inc:2794
+#: etc/inc/shaper.inc:3151 etc/inc/shaper.inc:3440 etc/inc/shaper.inc:3664
+#: etc/inc/shaper.inc:3736 usr/local/www/system_gateways_edit.php:501
+#: usr/local/www/status_openvpn.php:272 usr/local/www/status_openvpn.php:333
+#: usr/local/www/pkg_mgr_installed.php:113
+#: usr/local/www/system_certmanager.php:1066 usr/local/www/pkg_mgr.php:132
+#: usr/local/www/firewall_aliases_edit.php:128
+#: usr/local/www/firewall_aliases_edit.php:615 etc/inc/shaper.inc:624
+#: etc/inc/shaper.inc:970 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:3158
+#: etc/inc/shaper.inc:3447 etc/inc/shaper.inc:3671 etc/inc/shaper.inc:3743
+#: usr/local/www/system_gateways_edit.php:531 etc/inc/shaper.inc:644
+#: etc/inc/shaper.inc:1002 etc/inc/shaper.inc:2867 etc/inc/shaper.inc:3226
+#: etc/inc/shaper.inc:3515 etc/inc/shaper.inc:3739 etc/inc/shaper.inc:3811
+#: etc/inc/shaper.inc:2886 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3596
+#: etc/inc/shaper.inc:3844 etc/inc/shaper.inc:3916
+#: usr/local/www/system_groupmanager.php:349
+#: usr/local/www/firewall_aliases_edit.php:614 etc/inc/shaper.inc:2888
+#: etc/inc/shaper.inc:3304 etc/inc/shaper.inc:3622 etc/inc/shaper.inc:3870
+#: etc/inc/shaper.inc:3942
+msgid "Name"
+msgstr "Nome"
+
+#: etc/inc/shaper.inc:625 etc/inc/shaper.inc:626 etc/inc/shaper.inc:628
+#: etc/inc/shaper.inc:648
+msgid "Scheduler Type "
+msgstr "Tipo de Agendador"
+
+#: etc/inc/shaper.inc:647 etc/inc/shaper.inc:648 etc/inc/shaper.inc:650
+#: etc/inc/shaper.inc:674
+msgid "NOTE: Changing this changes all child queues!"
+msgstr "NOTA: Alterando isso, afetará todas as filas filhas!"
+
+#: etc/inc/shaper.inc:648 etc/inc/shaper.inc:649 etc/inc/shaper.inc:651
+#: etc/inc/shaper.inc:675
+msgid " Beware you can lose information."
+msgstr " Cuidado, você pode perder informações."
+
+#: etc/inc/shaper.inc:686 etc/inc/shaper.inc:687 etc/inc/shaper.inc:689
+#: etc/inc/shaper.inc:713
+msgid "Adjusts the size, in bytes, of the token bucket regulator. If not specified, heuristics based on the interface bandwidth are used to determine the size."
+msgstr "Ajuste o tamanho, em bytes, do token buket regulator. Se não especificado, heurísticas baseadas no tamanho da banda da interface são usadas para determinar o tamanho."
+
+#: etc/inc/shaper.inc:978 etc/inc/shaper.inc:979 etc/inc/shaper.inc:983
+#: etc/inc/shaper.inc:1015
+msgid "The priority must be an integer between 1 and 15."
+msgstr "A prioridade deve ser um inteiro entre 1 e 15."
+
+#: etc/inc/shaper.inc:981 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:982
+#: etc/inc/shaper.inc:2804 etc/inc/shaper.inc:2805 etc/inc/shaper.inc:986
+#: etc/inc/shaper.inc:2810 etc/inc/shaper.inc:1018 etc/inc/shaper.inc:2878
+#: etc/inc/shaper.inc:2897 etc/inc/shaper.inc:2899
+msgid "Queue limit must be an integer"
+msgstr "Limite da fila deve ser um inteiro"
+
+#: etc/inc/shaper.inc:983 etc/inc/shaper.inc:984 etc/inc/shaper.inc:988
+#: etc/inc/shaper.inc:1020
+msgid "Queue limit must be positive"
+msgstr "Limite da fila deve ser positivo"
+
+#: etc/inc/shaper.inc:985 etc/inc/shaper.inc:987 etc/inc/shaper.inc:2804
+#: etc/inc/shaper.inc:2806 etc/inc/shaper.inc:3573 etc/inc/shaper.inc:986
+#: etc/inc/shaper.inc:988 etc/inc/shaper.inc:2808 etc/inc/shaper.inc:3585
+#: etc/inc/shaper.inc:3740 etc/inc/shaper.inc:2807 etc/inc/shaper.inc:2809
+#: etc/inc/shaper.inc:3741 etc/inc/shaper.inc:990 etc/inc/shaper.inc:992
+#: etc/inc/shaper.inc:2812 etc/inc/shaper.inc:2814 etc/inc/shaper.inc:3748
+#: etc/inc/shaper.inc:1022 etc/inc/shaper.inc:1024 etc/inc/shaper.inc:2880
+#: etc/inc/shaper.inc:2882 etc/inc/shaper.inc:3816 etc/inc/shaper.inc:2899
+#: etc/inc/shaper.inc:2901 etc/inc/shaper.inc:3921 etc/inc/shaper.inc:2903
+#: etc/inc/shaper.inc:3947
+msgid "Queue names must be alphanumeric and _ or - only."
+msgstr "Nomes de filas devem ser alfanuméricos, _ ou - somente."
+
+#: etc/inc/shaper.inc:989 etc/inc/shaper.inc:990 etc/inc/shaper.inc:991
+#: etc/inc/shaper.inc:995 etc/inc/shaper.inc:1027
+msgid "Only one default queue per interface is allowed."
+msgstr "Apenas uma fila padrão é permitida por interface."
+
+#: etc/inc/shaper.inc:1125 etc/inc/shaper.inc:1126 etc/inc/shaper.inc:1127
+#: etc/inc/shaper.inc:1131 etc/inc/shaper.inc:1174
+msgid "Enable/Disable queue and its children"
+msgstr "Habilitar/Desabilitar fila e suas filhas"
+
+#: etc/inc/shaper.inc:1129 etc/inc/shaper.inc:1130 etc/inc/shaper.inc:1131
+#: etc/inc/shaper.inc:1135 etc/inc/shaper.inc:1178
+msgid "Queue Name"
+msgstr "Nome da Fila"
+
+#: etc/inc/shaper.inc:1136 etc/inc/shaper.inc:1137 etc/inc/shaper.inc:1138
+#: etc/inc/shaper.inc:1142 etc/inc/shaper.inc:1185
+msgid "Enter the name of the queue here. Do not use spaces and limit the size to 15 characters."
+msgstr "Informe o nome da fila aqui. Não use espaços e limite o tamanho para 15 caracteres."
+
+#: etc/inc/shaper.inc:1139 usr/local/www/interfaces_bridge_edit.php:354
+#: usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/system_gateway_groups.php:122 etc/inc/shaper.inc:1140
+#: usr/local/www/interfaces_bridge_edit.php:363
+#: usr/local/www/interfaces_bridge_edit.php:382
+#: usr/local/www/system_gateway_groups.php:123
+#: usr/local/www/interfaces_bridge_edit.php:364
+#: usr/local/www/interfaces_bridge_edit.php:383
+#: usr/local/www/interfaces_bridge_edit.php:365
+#: usr/local/www/interfaces_bridge_edit.php:384 etc/inc/shaper.inc:1141
+#: usr/local/www/system_gateway_groups.php:132 etc/inc/shaper.inc:1145
+#: usr/local/www/interfaces_bridge_edit.php:367
+#: usr/local/www/interfaces_bridge_edit.php:386 etc/inc/shaper.inc:1188
+msgid "Priority"
+msgstr "Prioridade"
+
+#: etc/inc/shaper.inc:1143 etc/inc/shaper.inc:1144 etc/inc/shaper.inc:1145
+#: etc/inc/shaper.inc:1149 etc/inc/shaper.inc:1192
+msgid "For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher priority are preferred in the case of overload."
+msgstr "Para hfsc, o intervalo é de 0 a 7. O padrão é 1. Filas Hfsc com maior prioridade são preferidas no caso de sobrecarga."
+
+#: etc/inc/shaper.inc:1146 etc/inc/shaper.inc:1147 etc/inc/shaper.inc:1148
+#: etc/inc/shaper.inc:1152 etc/inc/shaper.inc:1195
+msgid "Queue limit"
+msgstr "Limite da Fila"
+
+#: etc/inc/shaper.inc:1150 etc/inc/shaper.inc:1151 etc/inc/shaper.inc:1152
+#: etc/inc/shaper.inc:1156 etc/inc/shaper.inc:1199
+msgid "Queue limit in packets per second."
+msgstr "Limite da Fila em pacotes por segundo."
+
+#: etc/inc/shaper.inc:1153 etc/inc/shaper.inc:1154 etc/inc/shaper.inc:1155
+#: etc/inc/shaper.inc:1159 etc/inc/shaper.inc:1202
+msgid "Scheduler options"
+msgstr "Opções do agendador"
+
+#: etc/inc/shaper.inc:1158 etc/inc/shaper.inc:1161 etc/inc/shaper.inc:1159
+#: etc/inc/shaper.inc:1162 etc/inc/shaper.inc:1160 etc/inc/shaper.inc:1163
+#: etc/inc/shaper.inc:1164 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:1207
+#: etc/inc/shaper.inc:1210
+msgid "Default queue"
+msgstr "Fila padrão"
+
+#: etc/inc/shaper.inc:1168 etc/inc/shaper.inc:1169 etc/inc/shaper.inc:1170
+#: etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1217
+msgid "Random Early Detection"
+msgstr "Detecção Antecipada Aleatória"
+
+#: etc/inc/shaper.inc:1173 etc/inc/shaper.inc:1174 etc/inc/shaper.inc:1175
+#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1222
+msgid "Random Early Detection In and Out"
+msgstr "Detecção Randômica Recente de Entrada e Saída"
+
+#: etc/inc/shaper.inc:1178 etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180
+#: etc/inc/shaper.inc:1184 etc/inc/shaper.inc:1227
+msgid "Explicit Congestion Notification"
+msgstr "Notificação de Congestionamento Explícita"
+
+#: etc/inc/shaper.inc:1179 etc/inc/shaper.inc:1180 etc/inc/shaper.inc:1181
+#: etc/inc/shaper.inc:1185 etc/inc/shaper.inc:1233
+msgid "Select options for this queue"
+msgstr "Selecione opções para essa fila"
+
+#: etc/inc/shaper.inc:1181 etc/inc/shaper.inc:3069 etc/inc/shaper.inc:3501
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/pkg_mgr_installed.php:94
+#: usr/local/www/firewall_aliases_import.php:140
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:121
+#: usr/local/www/firewall_virtual_ip_edit.php:538
+#: usr/local/www/load_balancer_relay_action.php:143
+#: usr/local/www/services_dyndns.php:103 usr/local/www/services_wol.php:163
+#: usr/local/www/services_wol_edit.php:148
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_bridge_edit.php:273
+#: usr/local/www/interfaces_gif.php:108
+#: usr/local/www/interfaces_gif_edit.php:208
+#: usr/local/www/interfaces_gre.php:109
+#: usr/local/www/interfaces_gre_edit.php:219
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/interfaces_groups_edit.php:259
+#: usr/local/www/firewall_aliases.php:167
+#: usr/local/www/firewall_aliases_edit.php:455
+#: usr/local/www/firewall_aliases_edit.php:591
+#: usr/local/www/firewall_aliases_edit.php:626
+#: usr/local/www/firewall_nat_1to1.php:108
+#: usr/local/www/firewall_nat_1to1_edit.php:440
+#: usr/local/www/firewall_nat_edit.php:769
+#: usr/local/www/firewall_nat_out.php:349
+#: usr/local/www/firewall_nat_out_edit.php:636
+#: usr/local/www/firewall_rules.php:374
+#: usr/local/www/firewall_rules_edit.php:1053
+#: usr/local/www/firewall_schedule.php:98
+#: usr/local/www/firewall_schedule_edit.php:793
+#: usr/local/www/firewall_schedule_edit.php:998
+#: usr/local/www/firewall_virtual_ip.php:187 usr/local/www/interfaces.php:1244
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/interfaces_vlan.php:110
+#: usr/local/www/interfaces_vlan_edit.php:179
+#: usr/local/www/system_routes.php:129
+#: usr/local/www/system_routes_edit.php:267
+#: usr/local/www/interfaces_lagg.php:114
+#: usr/local/www/interfaces_lagg_edit.php:208
+#: usr/local/www/interfaces_ppps.php:110
+#: usr/local/www/interfaces_ppps_edit.php:467
+#: usr/local/www/interfaces_qinq.php:119
+#: usr/local/www/interfaces_qinq_edit.php:337
+#: usr/local/www/interfaces_wireless.php:108
+#: usr/local/www/interfaces_wireless_edit.php:185
+#: usr/local/www/load_balancer_monitor.php:124 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:241
+#: usr/local/www/load_balancer_pool_edit.php:196
+#: usr/local/www/load_balancer_virtual_server_edit.php:189
+#: usr/local/www/pkg_mgr.php:118 usr/local/www/firewall_nat.php:203
+#: usr/local/www/diag_ipsec.php:95
+#: usr/local/www/services_captiveportal_ip.php:118
+#: usr/local/www/services_captiveportal_ip_edit.php:208
+#: usr/local/www/services_captiveportal_mac.php:168
+#: usr/local/www/services_captiveportal_mac_edit.php:182
+#: usr/local/www/services_dhcp.php:893
+#: usr/local/www/services_dhcp_edit.php:242
+#: usr/local/www/services_dnsmasq.php:246
+#: usr/local/www/services_dnsmasq.php:313
+#: usr/local/www/services_dnsmasq_edit.php:163
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:417
+#: usr/local/www/load_balancer_relay_protocol.php:137
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:218
+#: usr/local/www/services_captiveportal_hostname.php:123
+#: usr/local/www/services_captiveportal_hostname_edit.php:183
+#: usr/local/www/status_services.php:245 usr/local/www/status_upnp.php:88
+#: usr/local/www/services_dyndns_edit.php:228
+#: usr/local/www/services_igmpproxy.php:98
+#: usr/local/www/services_igmpproxy_edit.php:175
+#: usr/local/www/services_rfc2136.php:80
+#: usr/local/www/services_rfc2136_edit.php:192
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/status_gateways.php:78 usr/local/www/status_lb_pool.php:134
+#: usr/local/www/status_lb_vs.php:81
+#: usr/local/www/system_advanced_sysctl.php:172
+#: usr/local/www/system_advanced_sysctl.php:243
+#: usr/local/www/system_gateway_groups.php:123
+#: usr/local/www/system_gateway_groups_edit.php:219
+#: usr/local/www/system_gateways.php:156
+#: usr/local/www/system_gateways_edit.php:484
+#: usr/local/www/system_groupmanager.php:275
+#: usr/local/www/system_groupmanager.php:347
+#: usr/local/www/system_groupmanager.php:405
+#: usr/local/www/system_groupmanager_addprivs.php:216
+#: usr/local/www/system_usermanager.php:578
+#: usr/local/www/system_usermanager_addprivs.php:197
+#: usr/local/www/vpn_ipsec_phase1.php:575
+#: usr/local/www/vpn_ipsec_phase2.php:497
+#: usr/local/www/vpn_openvpn_client.php:573
+#: usr/local/www/vpn_openvpn_client.php:863
+#: usr/local/www/vpn_openvpn_csc.php:342 usr/local/www/vpn_openvpn_csc.php:674
+#: usr/local/www/vpn_openvpn_server.php:722
+#: usr/local/www/vpn_openvpn_server.php:1451
+#: usr/local/www/vpn_pppoe_edit.php:444 usr/local/www/firewall_nat_npt.php:107
+#: usr/local/www/firewall_nat_npt_edit.php:261
+#: usr/local/www/services_dhcpv6.php:806
+#: usr/local/www/services_dhcpv6_edit.php:219
+#: usr/local/www/services_captiveportal_zones.php:55
+#: usr/local/www/services_captiveportal_zones_edit.php:106
+#: etc/inc/shaper.inc:1182 etc/inc/shaper.inc:3077 etc/inc/shaper.inc:3513
+#: usr/local/www/system_routes_edit.php:307 usr/local/www/pkg_mgr.php:132
+#: usr/local/www/services_unbound_acls.php:238
+#: usr/local/www/services_unbound_acls.php:292
+#: usr/local/www/services_unbound_acls.php:319
+#: usr/local/www/system_gateway_groups_edit.php:274
+#: usr/local/www/services_dnsmasq.php:334
+#: usr/local/www/services_dyndns_edit.php:358
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/services_dnsmasq_edit.php:218
+#: usr/local/www/services_dnsmasq_edit.php:239
+#: usr/local/www/firewall_nat_1to1_edit.php:447
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/firewall_nat_npt_edit.php:266
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/diag_ipsec.php:106
+#: usr/local/www/load_balancer_relay_action_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/services_unbound.php:282
+#: usr/local/www/services_unbound.php:349
+#: usr/local/www/system_usermanager.php:576
+#: usr/local/www/services_igmpproxy_edit.php:177
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:596
+#: usr/local/www/firewall_aliases_edit.php:631
+#: usr/local/www/pkg_mgr_installed.php:114
+#: usr/local/www/firewall_rules.php:378
+#: usr/local/www/load_balancer_virtual_server.php:135
+#: usr/local/www/system_groupmanager_addprivs.php:214
+#: usr/local/www/system_gateways_edit.php:519
+#: usr/local/www/load_balancer_monitor.php:125
+#: usr/local/www/services_dyndns.php:112
+#: usr/local/www/vpn_openvpn_server.php:795
+#: usr/local/www/vpn_openvpn_server.php:1593
+#: usr/local/www/services_dhcp.php:931
+#: usr/local/www/load_balancer_virtual_server_edit.php:163
+#: usr/local/www/interfaces_bridge_edit.php:282
+#: usr/local/www/firewall_aliases.php:170
+#: usr/local/www/vpn_ipsec_phase2.php:523
+#: usr/local/www/firewall_nat_edit.php:776
+#: usr/local/www/services_dhcp_edit.php:251 usr/local/www/interfaces.php:1348
+#: usr/local/www/vpn_openvpn_client.php:578
+#: usr/local/www/vpn_openvpn_client.php:868
+#: usr/local/www/load_balancer_pool_edit.php:204
+#: usr/local/www/firewall_virtual_ip_edit.php:526
+#: usr/local/www/interfaces_gre_edit.php:218
+#: usr/local/www/load_balancer_pool.php:137
+#: usr/local/www/vpn_ipsec_phase1.php:588
+#: usr/local/www/services_dhcpv6.php:901 etc/inc/shaper.inc:3225
+#: etc/inc/shaper.inc:3668 usr/local/www/vpn_pppoe_edit.php:445
+#: usr/local/www/system_routes_edit.php:308
+#: usr/local/www/system_gateway_groups_edit.php:334
+#: usr/local/www/interfaces_vlan_edit.php:180
+#: usr/local/www/services_dnsmasq.php:247
+#: usr/local/www/services_dnsmasq.php:335
+#: usr/local/www/firewall_nat_out.php:360
+#: usr/local/www/system_groupmanager.php:406
+#: usr/local/www/services_dnsmasq_edit.php:219
+#: usr/local/www/services_dnsmasq_edit.php:240
+#: usr/local/www/load_balancer_relay_protocol_edit.php:216
+#: usr/local/www/firewall_nat_1to1_edit.php:445
+#: usr/local/www/services_dhcpv6_edit.php:230
+#: usr/local/www/services_captiveportal_ip.php:116
+#: usr/local/www/firewall_nat_npt_edit.php:265 usr/local/www/vpn_pppoe.php:105
+#: usr/local/www/interfaces_groups.php:97
+#: usr/local/www/services_captiveportal_hostname_edit.php:181
+#: usr/local/www/interfaces_qinq_edit.php:338
+#: usr/local/www/interfaces_gif_edit.php:209 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/firewall_nat.php:208 usr/local/www/interfaces_qinq.php:120
+#: usr/local/www/load_balancer_relay_action_edit.php:414
+#: usr/local/www/interfaces_ppps.php:111
+#: usr/local/www/load_balancer_monitor_edit.php:239
+#: usr/local/www/services_captiveportal_mac.php:166
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151
+#: usr/local/www/services_captiveportal_mac_edit.php:180
+#: usr/local/www/firewall_schedule_edit.php:792
+#: usr/local/www/firewall_schedule_edit.php:997
+#: usr/local/www/interfaces_bridge.php:110
+#: usr/local/www/interfaces_ppps_edit.php:468
+#: usr/local/www/interfaces_lagg.php:115
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/firewall_aliases_edit.php:599
+#: usr/local/www/firewall_aliases_edit.php:634
+#: usr/local/www/interfaces_lagg_edit.php:209
+#: usr/local/www/vpn_openvpn_csc.php:341 usr/local/www/vpn_openvpn_csc.php:673
+#: usr/local/www/services_captiveportal_hostname.php:121
+#: usr/local/www/firewall_rules.php:371 usr/local/www/interfaces_gre.php:110
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/interfaces_wireless.php:109
+#: usr/local/www/system_gateway_groups.php:124
+#: usr/local/www/status_services.php:241
+#: usr/local/www/system_gateways_edit.php:619
+#: usr/local/www/status_gateways.php:79
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/services_captiveportal_ip_edit.php:206
+#: usr/local/www/load_balancer_relay_protocol.php:135
+#: usr/local/www/vpn_openvpn_server.php:823
+#: usr/local/www/vpn_openvpn_server.php:1634 usr/local/www/status_upnp.php:89
+#: usr/local/www/services_dhcp.php:1135
+#: usr/local/www/load_balancer_virtual_server_edit.php:161
+#: usr/local/www/interfaces_bridge_edit.php:283
+#: usr/local/www/firewall_aliases.php:190
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/interfaces_groups_edit.php:260
+#: usr/local/www/services_captiveportal_zones_edit.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:625
+#: usr/local/www/interfaces_vlan.php:111
+#: usr/local/www/firewall_nat_edit.php:775
+#: usr/local/www/services_dhcp_edit.php:253 usr/local/www/interfaces.php:1336
+#: usr/local/www/services_captiveportal_zones.php:56
+#: usr/local/www/vpn_openvpn_client.php:596
+#: usr/local/www/vpn_openvpn_client.php:921
+#: usr/local/www/status_gateway_groups.php:77
+#: usr/local/www/load_balancer_pool_edit.php:202
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/interfaces_gif.php:109
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/firewall_virtual_ip.php:191
+#: usr/local/www/vpn_ipsec_phase1.php:587
+#: usr/local/www/services_dhcpv6.php:832 usr/local/www/services_rfc2136.php:81
+#: usr/local/www/status_services.php:239
+#: usr/local/www/system_gateways_edit.php:623
+#: usr/local/www/services_captiveportal_ip_edit.php:200
+#: usr/local/www/vpn_pppoe.php:106
+#: usr/local/www/interfaces_wireless_edit.php:187
+#: usr/local/www/services_captiveportal_zones_edit.php:105
+#: usr/local/www/vpn_openvpn_client.php:615
+#: usr/local/www/vpn_openvpn_client.php:940
+#: usr/local/www/services_dhcpv6_edit.php:233
+#: usr/local/www/services_dyndns_edit.php:362
+#: usr/local/www/firewall_rules_edit.php:1103
+#: usr/local/www/interfaces_qinq.php:123
+#: usr/local/www/interfaces_vlan_edit.php:183
+#: usr/local/www/interfaces_ppps_edit.php:474
+#: usr/local/www/firewall_virtual_ip.php:205
+#: usr/local/www/interfaces_lagg_edit.php:222
+#: usr/local/www/firewall_nat_edit.php:770
+#: usr/local/www/interfaces_lagg.php:119 usr/local/www/interfaces_vlan.php:117
+#: usr/local/www/interfaces_gif_edit.php:220
+#: usr/local/www/services_dhcp_edit.php:381
+#: usr/local/www/firewall_virtual_ip_edit.php:463
+#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_bridge.php:116
+#: usr/local/www/interfaces_wireless.php:111
+#: usr/local/www/system_routes.php:133 usr/local/www/vpn_pppoe_edit.php:448
+#: usr/local/www/services_dhcp.php:792 usr/local/www/services_dhcp.php:1154
+#: usr/local/www/services_captiveportal_mac_edit.php:193
+#: usr/local/www/services_dhcpv6.php:853
+#: usr/local/www/interfaces_bridge_edit.php:284
+#: usr/local/www/services_dnsmasq.php:272
+#: usr/local/www/services_dnsmasq.php:360
+#: usr/local/www/services_captiveportal_mac.php:176
+#: usr/local/www/vpn_ipsec_phase1.php:608 usr/local/www/interfaces_gre.php:114
+#: usr/local/www/firewall_nat_out_edit.php:651
+#: usr/local/www/vpn_openvpn_server.php:850
+#: usr/local/www/vpn_openvpn_server.php:1686
+#: usr/local/www/vpn_ipsec_phase2.php:646 usr/local/www/services_dyndns.php:93
+#: usr/local/www/interfaces_gif.php:113
+#: usr/local/www/interfaces_qinq_edit.php:341
+#: usr/local/www/interfaces.php:1349 etc/inc/shaper.inc:1183
+#: etc/inc/shaper.inc:3226 etc/inc/shaper.inc:3669
+#: usr/local/www/status_services.php:80
+#: usr/local/www/system_gateways_edit.php:625
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/firewall_rules_edit.php:1116
+#: usr/local/www/firewall_nat_edit.php:782
+#: usr/local/www/firewall_virtual_ip_edit.php:483
+#: usr/local/www/pkg_mgr_installed.php:116 usr/local/www/services_dhcp.php:812
+#: usr/local/www/services_dhcp.php:1174 usr/local/www/pkg_mgr.php:135
+#: usr/local/www/system_routes_edit.php:331
+#: usr/local/www/firewall_nat_out.php:367 usr/local/www/firewall_rules.php:369
+#: usr/local/www/system_gateway_groups_edit.php:336
+#: usr/local/www/firewall_aliases_edit.php:482
+#: usr/local/www/firewall_aliases_edit.php:630
+#: usr/local/www/firewall_aliases_edit.php:665
+#: usr/local/www/services_dnsmasq.php:285
+#: usr/local/www/services_dnsmasq.php:373
+#: usr/local/www/firewall_nat_out_edit.php:663
+#: usr/local/www/services_dyndns.php:89
+#: usr/local/www/system_gateway_groups.php:133
+#: usr/local/www/interfaces.php:1391 etc/inc/shaper.inc:1187
+#: etc/inc/shaper.inc:3233 etc/inc/shaper.inc:3481 etc/inc/shaper.inc:3676
+#: usr/local/www/system_gateways_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_virtual_ip.php:228
+#: usr/local/www/interfaces_lagg_edit.php:221
+#: usr/local/www/firewall_nat_edit.php:783 usr/local/www/system_routes.php:149
+#: usr/local/www/firewall_nat.php:211 usr/local/www/system_routes_edit.php:340
+#: usr/local/www/firewall_nat_out.php:366
+#: usr/local/www/interfaces_bridge_edit.php:286
+#: usr/local/www/services_dnsmasq.php:349
+#: usr/local/www/services_dnsmasq.php:437 usr/local/www/interfaces.php:1386
+#: etc/inc/shaper.inc:1235 etc/inc/shaper.inc:3301 etc/inc/shaper.inc:3549
+#: etc/inc/shaper.inc:3744 usr/local/www/system_gateways_edit.php:656
+#: usr/local/www/system_routes_edit.php:342 etc/inc/shaper.inc:3378
+#: etc/inc/shaper.inc:3651 etc/inc/shaper.inc:3849
+#: usr/local/www/services_rfc2136.php:83
+#: usr/local/www/system_groupmanager.php:278
+#: usr/local/www/system_groupmanager.php:350
+#: usr/local/www/system_groupmanager.php:409
+#: usr/local/www/services_dyndns_edit.php:371
+#: usr/local/www/firewall_rules_edit.php:1163
+#: usr/local/www/firewall_virtual_ip.php:235
+#: usr/local/www/firewall_virtual_ip_edit.php:488
+#: usr/local/www/services_dhcp.php:824 usr/local/www/services_dhcp.php:1186
+#: usr/local/www/firewall_aliases_edit.php:481
+#: usr/local/www/firewall_aliases_edit.php:629
+#: usr/local/www/firewall_aliases_edit.php:664
+#: usr/local/www/services_rfc2136_edit.php:204
+#: usr/local/www/interfaces.php:1399 etc/inc/shaper.inc:3404
+#: etc/inc/shaper.inc:3677 etc/inc/shaper.inc:3875
+msgid "Description"
+msgstr "Descrição"
+
+#: etc/inc/shaper.inc:1207 etc/inc/shaper.inc:1209 etc/inc/shaper.inc:1210
+#: etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1262
+msgid "Bandwidth:"
+msgstr "Largura de banda:"
+
+#: etc/inc/shaper.inc:1212 etc/inc/shaper.inc:1214 etc/inc/shaper.inc:1215
+#: etc/inc/shaper.inc:1218 etc/inc/shaper.inc:1266
+msgid "Priority: on"
+msgstr "Prioridade: ligada"
+
+#: etc/inc/shaper.inc:1215 etc/inc/shaper.inc:1217 etc/inc/shaper.inc:1218
+#: etc/inc/shaper.inc:1221 etc/inc/shaper.inc:1269
+msgid "Default: on"
+msgstr "Padrão: ligado"
+
+#: etc/inc/shaper.inc:1222 etc/inc/shaper.inc:1223 etc/inc/shaper.inc:1224
+#: etc/inc/shaper.inc:1225 etc/inc/shaper.inc:1226 etc/inc/shaper.inc:1228
+#: etc/inc/shaper.inc:1229 etc/inc/shaper.inc:1276 etc/inc/shaper.inc:1277
+msgid "Delete queue from interface"
+msgstr "Apagar fila da interface"
+
+#: etc/inc/shaper.inc:1559 etc/inc/shaper.inc:2207 etc/inc/shaper.inc:2483
+#: etc/inc/shaper.inc:1561 etc/inc/shaper.inc:2209 etc/inc/shaper.inc:2485
+#: etc/inc/shaper.inc:1562 etc/inc/shaper.inc:2210 etc/inc/shaper.inc:2486
+#: etc/inc/shaper.inc:1565 etc/inc/shaper.inc:2215 etc/inc/shaper.inc:2491
+#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:2273 etc/inc/shaper.inc:2554
+msgid "Bandwidth in percentage should be between 1 and 100 bounds."
+msgstr "Tamanho de banda em porcentagem deve ser limitado de 1 a 100."
+
+#: etc/inc/shaper.inc:1576 etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1579
+#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1633
+msgid "upperlimit service curve defined but missing (d) value"
+msgstr "curva de serviço upperlimit definido mas o valor (d) está faltando"
+
+#: etc/inc/shaper.inc:1578 etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1581
+#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1635
+msgid "upperlimit service curve defined but missing initial bandwidth (m1) value"
+msgstr "curva de serviço upperlimit definido mas o valor do tamanho de banda inicial (m1) está faltando"
+
+#: etc/inc/shaper.inc:1580 etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1583
+#: etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1637
+msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "o valor m1 do upperlimit precisa ser Kb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1582 etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1585
+#: etc/inc/shaper.inc:1588 etc/inc/shaper.inc:1639
+msgid "upperlimit d value needs to be numeric"
+msgstr "o valor d do upperlimit precisa ser numérico"
+
+#: etc/inc/shaper.inc:1584 etc/inc/shaper.inc:1586 etc/inc/shaper.inc:1587
+#: etc/inc/shaper.inc:1590 etc/inc/shaper.inc:1641
+msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "valor m2 de upperlimit precisa ser Kb, Mb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1598 etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1601
+#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1655
+msgid "linkshare service curve defined but missing (d) value"
+msgstr "curva de serviço linkshare definida mas o valor (d) está faltando"
+
+#: etc/inc/shaper.inc:1600 etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1603
+#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1657
+msgid "linkshare service curve defined but missing initial bandwidth (m1) value"
+msgstr "curva de serviço linkshare definida mas o valor da largura de banda inicial (m1) está faltando"
+
+#: etc/inc/shaper.inc:1602 etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1605
+#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1659
+msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "O valor m1 de linkshare precisa ser Kb, Mb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1604 etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1607
+#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1661
+msgid "linkshare d value needs to be numeric"
+msgstr "o valor d de linkshare precisa ser numérico"
+
+#: etc/inc/shaper.inc:1606 etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1609
+#: etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1663
+msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "o valor m2 de linkshare precisa ser Kb, Mb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1608 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1611
+#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:1665
+msgid "realtime service curve defined but missing (d) value"
+msgstr "curva de serviço realtime definida mas o valor (d) está faltando"
+
+#: etc/inc/shaper.inc:1610 etc/inc/shaper.inc:1612 etc/inc/shaper.inc:1613
+#: etc/inc/shaper.inc:1616 etc/inc/shaper.inc:1667
+msgid "realtime service curve defined but missing initial bandwidth (m1) value"
+msgstr "curva de serviço realtime definida mas o valor da largura de banda inicial (m1) está faltando"
+
+#: etc/inc/shaper.inc:1625 etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1628
+#: etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1682
+msgid "realtime m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "o valor m1 de realtime precisa ser Kb, Mb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1627 etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1630
+#: etc/inc/shaper.inc:1633 etc/inc/shaper.inc:1684
+msgid "realtime d value needs to be numeric"
+msgstr "o valor d de realtime precisa ser numérico"
+
+#: etc/inc/shaper.inc:1629 etc/inc/shaper.inc:1631 etc/inc/shaper.inc:1632
+#: etc/inc/shaper.inc:1635 etc/inc/shaper.inc:1686
+msgid "realtime m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "o valor m2 de realtime precisa ser Kb, Mb, Gb, ou %"
+
+#: etc/inc/shaper.inc:1858 etc/inc/shaper.inc:2336 etc/inc/shaper.inc:2602
+#: etc/inc/shaper.inc:3039 etc/inc/shaper.inc:1860 etc/inc/shaper.inc:2338
+#: etc/inc/shaper.inc:2604 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:1861
+#: etc/inc/shaper.inc:2339 etc/inc/shaper.inc:2605 etc/inc/shaper.inc:1866
+#: etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610 etc/inc/shaper.inc:1924
+#: etc/inc/shaper.inc:2407 etc/inc/shaper.inc:2678
+msgid "Gbit/s"
+msgstr "Gbits/s"
+
+#: etc/inc/shaper.inc:1862 etc/inc/shaper.inc:2340 etc/inc/shaper.inc:2606
+#: etc/inc/shaper.inc:3035 etc/inc/shaper.inc:1864 etc/inc/shaper.inc:2342
+#: etc/inc/shaper.inc:2608 etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1865
+#: etc/inc/shaper.inc:2343 etc/inc/shaper.inc:2609 etc/inc/shaper.inc:1870
+#: etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614 etc/inc/shaper.inc:1928
+#: etc/inc/shaper.inc:2411 etc/inc/shaper.inc:2682
+msgid "Mbit/s"
+msgstr "Mbit/s"
+
+#: etc/inc/shaper.inc:1866 etc/inc/shaper.inc:2344 etc/inc/shaper.inc:2610
+#: etc/inc/shaper.inc:3031 usr/local/www/services_captiveportal.php:560
+#: usr/local/www/services_captiveportal.php:564 etc/inc/shaper.inc:1868
+#: etc/inc/shaper.inc:2346 etc/inc/shaper.inc:2612 etc/inc/shaper.inc:3039
+#: usr/local/www/services_captiveportal.php:565
+#: usr/local/www/services_captiveportal.php:569
+#: usr/local/www/services_captiveportal.php:563
+#: usr/local/www/services_captiveportal.php:567 etc/inc/shaper.inc:1869
+#: etc/inc/shaper.inc:2347 etc/inc/shaper.inc:2613
+#: usr/local/www/services_captiveportal.php:581
+#: usr/local/www/services_captiveportal.php:585 etc/inc/shaper.inc:1874
+#: etc/inc/shaper.inc:2352 etc/inc/shaper.inc:2618 etc/inc/shaper.inc:1932
+#: etc/inc/shaper.inc:2415 etc/inc/shaper.inc:2686
+msgid "Kbit/s"
+msgstr "Kbit/s"
+
+#: etc/inc/shaper.inc:1870 etc/inc/shaper.inc:2348 etc/inc/shaper.inc:2614
+#: etc/inc/shaper.inc:3043 etc/inc/shaper.inc:1872 etc/inc/shaper.inc:2350
+#: etc/inc/shaper.inc:2616 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:1873
+#: etc/inc/shaper.inc:2351 etc/inc/shaper.inc:2617 etc/inc/shaper.inc:1878
+#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:1936
+#: etc/inc/shaper.inc:2419 etc/inc/shaper.inc:2690
+msgid "Bit/s"
+msgstr "Bit/s"
+
+#: etc/inc/shaper.inc:1876 etc/inc/shaper.inc:2354 etc/inc/shaper.inc:2620
+#: etc/inc/shaper.inc:1878 etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622
+#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:2357 etc/inc/shaper.inc:2623
+#: etc/inc/shaper.inc:1884 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2628
+#: etc/inc/shaper.inc:1942 etc/inc/shaper.inc:2425 etc/inc/shaper.inc:2696
+msgid "Choose the amount of bandwidth for this queue"
+msgstr "Escolha a largura de banda total para essa fila"
+
+#: etc/inc/shaper.inc:1879 etc/inc/shaper.inc:1881 etc/inc/shaper.inc:1882
+#: etc/inc/shaper.inc:1887 etc/inc/shaper.inc:1945
+msgid "Service Curve (sc)"
+msgstr "Curva de Serviço (sc)"
+
+#: etc/inc/shaper.inc:1886 etc/inc/shaper.inc:1888 etc/inc/shaper.inc:1889
+#: etc/inc/shaper.inc:1894 etc/inc/shaper.inc:1952
+msgid "Upperlimit:"
+msgstr "Upperlimit:"
+
+#: etc/inc/shaper.inc:1901 etc/inc/shaper.inc:1903 etc/inc/shaper.inc:1904
+#: etc/inc/shaper.inc:1909 etc/inc/shaper.inc:1967
+msgid "The maximum allowed bandwidth for the queue."
+msgstr "A de largura de banda máxima permitida para esta fila."
+
+#: etc/inc/shaper.inc:1905 etc/inc/shaper.inc:1907 etc/inc/shaper.inc:1908
+#: etc/inc/shaper.inc:1913 etc/inc/shaper.inc:1971
+msgid "Real time:"
+msgstr "Tempo real:"
+
+#: etc/inc/shaper.inc:1920 etc/inc/shaper.inc:1922 etc/inc/shaper.inc:1923
+#: etc/inc/shaper.inc:1928 etc/inc/shaper.inc:1986
+msgid "The minimum required bandwidth for the queue."
+msgstr "A largura de banda mínima requerida para esta fila."
+
+#: etc/inc/shaper.inc:1924 etc/inc/shaper.inc:1926 etc/inc/shaper.inc:1927
+#: etc/inc/shaper.inc:1932 etc/inc/shaper.inc:1990
+msgid "Link share:"
+msgstr "Compartilhar Link:"
+
+#: etc/inc/shaper.inc:1939 etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1942
+#: etc/inc/shaper.inc:1947 etc/inc/shaper.inc:2005
+msgid "The bandwidth share of a backlogged queue - this overrides priority."
+msgstr "A largura de banda compartilhada de uma fila de backlog - isso substitui a prioridade."
+
+#: etc/inc/shaper.inc:1941 etc/inc/shaper.inc:1943 etc/inc/shaper.inc:1944
+#: etc/inc/shaper.inc:1949 etc/inc/shaper.inc:2007
+msgid "The format for service curve specifications is (m1, d, m2). m2 controls the bandwidth assigned to the queue. m1 and d are optional and can be used to control the initial bandwidth assignment. For the first d milliseconds the queue gets the bandwidth given as m1, afterwards the value given in m2."
+msgstr "O formato para as especificações de curva de serviço é (m1, d, m2). m2 controla o tamanho da banda atribuída para a fila. m1 e d são opcionais e podem ser usados para controlar quantidade de banda inicial atribuida. Para os primeiros d milisegundos a fila obtém a largura de banda dado como m1, depois o valor dado em m2."
+
+#: etc/inc/shaper.inc:2190 etc/inc/shaper.inc:2192 etc/inc/shaper.inc:2193
+#: etc/inc/shaper.inc:2198 etc/inc/shaper.inc:2256
+msgid "Priority must be an integer between 1 and 7."
+msgstr "A prioridade deve ser um inteiro entre 1 e 7."
+
+#: etc/inc/shaper.inc:2356 etc/inc/shaper.inc:2622 etc/inc/shaper.inc:2358
+#: etc/inc/shaper.inc:2624 etc/inc/shaper.inc:2359 etc/inc/shaper.inc:2625
+#: etc/inc/shaper.inc:2364 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2427
+#: etc/inc/shaper.inc:2698
+msgid "Scheduler specific options"
+msgstr "Opções específicas do Agendador"
+
+#: etc/inc/shaper.inc:2360 etc/inc/shaper.inc:2362 etc/inc/shaper.inc:2363
+#: etc/inc/shaper.inc:2368 etc/inc/shaper.inc:2431
+msgid "Borrow from other queues when available"
+msgstr "Emprestar de outras filas quando disponíveis"
+
+#: etc/inc/shaper.inc:2465 etc/inc/shaper.inc:2467 etc/inc/shaper.inc:2468
+#: etc/inc/shaper.inc:2473 etc/inc/shaper.inc:2536
+msgid "Priority must be an integer between 1 and 255."
+msgstr "Prioridade deve ser um inteiro entre 1 e 255."
+
+#: etc/inc/shaper.inc:2628 etc/inc/shaper.inc:2630 etc/inc/shaper.inc:2631
+#: etc/inc/shaper.inc:2636 etc/inc/shaper.inc:2704
+msgid "Number of buckets available."
+msgstr "Número de buckets disponíveis."
+
+#: etc/inc/shaper.inc:2633 etc/inc/shaper.inc:2635 etc/inc/shaper.inc:2636
+#: etc/inc/shaper.inc:2641 etc/inc/shaper.inc:2709
+msgid "Bandwidth limit for hosts to not saturate link."
+msgstr "Limite da largura de banda para hosts não saturarem o link."
+
+#: etc/inc/shaper.inc:2797 etc/inc/shaper.inc:2799 etc/inc/shaper.inc:2800
+#: etc/inc/shaper.inc:2805 etc/inc/shaper.inc:2873 etc/inc/shaper.inc:2892
+msgid "Plr must be an integer between 1 and 100."
+msgstr "Plr deve ser um inteiro entre 1 e 100."
+
+#: etc/inc/shaper.inc:2800 etc/inc/shaper.inc:2802 etc/inc/shaper.inc:2803
+#: etc/inc/shaper.inc:2808 etc/inc/shaper.inc:2876 etc/inc/shaper.inc:2895
+#: etc/inc/shaper.inc:2897
+msgid "Buckets must be an integer between 16 and 65535."
+msgstr "Buckets deve ser um inteiro entre 16 e 65535."
+
+#: etc/inc/shaper.inc:2902 etc/inc/shaper.inc:2906 etc/inc/shaper.inc:2921
+#: etc/inc/shaper.inc:2922 etc/inc/shaper.inc:2927 etc/inc/shaper.inc:2995
+#: etc/inc/shaper.inc:3053 etc/inc/shaper.inc:3063
+msgid "Delay must be an integer."
+msgstr "Espera deve ser um inteiro."
+
+#: etc/inc/shaper.inc:3009 usr/local/www/services_snmp.php:276
+#: usr/local/www/services_snmp.php:336 usr/local/www/interfaces.php:1234
+#: usr/local/www/system_firmware.php:131
+#: usr/local/www/services_dnsmasq.php:154 usr/local/www/diag_routes.php:60
+#: usr/local/www/services_rfc2136_edit.php:128
+#: usr/local/www/vpn_ipsec_phase1.php:813 etc/inc/shaper.inc:3013
+#: usr/local/www/services_unbound.php:150 usr/local/www/interfaces.php:1338
+#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:334
+#: usr/local/www/vpn_ipsec_phase1.php:826 etc/inc/shaper.inc:3143
+#: usr/local/www/services_dnsmasq.php:155 usr/local/www/diag_routes.php:61
+#: usr/local/www/system_firmware.php:138 usr/local/www/interfaces.php:1326
+#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:335
+#: usr/local/www/vpn_ipsec_phase1.php:823
+#: usr/local/www/system_firmware.php:133
+#: usr/local/www/services_dnsmasq.php:159
+#: usr/local/www/vpn_ipsec_phase1.php:844 usr/local/www/services_snmp.php:285
+#: usr/local/www/services_snmp.php:345 usr/local/www/interfaces.php:1339
+#: etc/inc/shaper.inc:3144 usr/local/www/services_dnsmasq.php:161
+#: usr/local/www/interfaces.php:1381 etc/inc/shaper.inc:3151
+#: usr/local/www/services_dnsmasq.php:182 usr/local/www/interfaces.php:1376
+#: etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3275
+#: usr/local/www/services_rfc2136_edit.php:133
+#: usr/local/www/interfaces.php:1389 etc/inc/shaper.inc:3297
+msgid "Enable"
+msgstr "Habilitar"
+
+#: etc/inc/shaper.inc:3014 etc/inc/shaper.inc:3018 etc/inc/shaper.inc:3148
+#: etc/inc/shaper.inc:3149 etc/inc/shaper.inc:3156 etc/inc/shaper.inc:3224
+#: etc/inc/shaper.inc:3280 etc/inc/shaper.inc:3302
+msgid "Enable limiter and its children"
+msgstr "Habilitar/Desabilitar limitador e seus dependentes"
+
+#: etc/inc/shaper.inc:3046 etc/inc/shaper.inc:3283 etc/inc/shaper.inc:3054
+#: etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3202 etc/inc/shaper.inc:3450
+#: etc/inc/shaper.inc:3203 etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3210
+#: etc/inc/shaper.inc:3458 etc/inc/shaper.inc:3278 etc/inc/shaper.inc:3526
+#: etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3607 etc/inc/shaper.inc:3360
+#: etc/inc/shaper.inc:3633
+msgid "Mask"
+msgstr "Máscara"
+
+#: etc/inc/shaper.inc:3056 etc/inc/shaper.inc:3293 etc/inc/shaper.inc:3064
+#: etc/inc/shaper.inc:3305 etc/inc/shaper.inc:3212 etc/inc/shaper.inc:3460
+#: etc/inc/shaper.inc:3213 etc/inc/shaper.inc:3461 etc/inc/shaper.inc:3220
+#: etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3288 etc/inc/shaper.inc:3536
+#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3618 etc/inc/shaper.inc:3371
+#: etc/inc/shaper.inc:3644
+msgid "Source addresses"
+msgstr "Endereços fonte"
+
+#: etc/inc/shaper.inc:3060 etc/inc/shaper.inc:3297 etc/inc/shaper.inc:3068
+#: etc/inc/shaper.inc:3309 etc/inc/shaper.inc:3216 etc/inc/shaper.inc:3464
+#: etc/inc/shaper.inc:3217 etc/inc/shaper.inc:3465 etc/inc/shaper.inc:3224
+#: etc/inc/shaper.inc:3472 etc/inc/shaper.inc:3292 etc/inc/shaper.inc:3540
+#: etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3622 etc/inc/shaper.inc:3375
+#: etc/inc/shaper.inc:3648
+msgid "Destination addresses"
+msgstr "Endereços de destino"
+
+#: etc/inc/shaper.inc:3063 etc/inc/shaper.inc:3300 etc/inc/shaper.inc:3071
+#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3219 etc/inc/shaper.inc:3467
+#: etc/inc/shaper.inc:3220 etc/inc/shaper.inc:3468 etc/inc/shaper.inc:3227
+#: etc/inc/shaper.inc:3475 etc/inc/shaper.inc:3295 etc/inc/shaper.inc:3543
+msgid ""
+"If 'source' or 'destination' is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr ""
+"Se 'origem' ou 'destino' é escolhido, \n"
+"um pipe dinâmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima serão \n"
+"criados para cada endereço IP de origem/destino encontrado, \n"
+"respectivamente. Isso faz com que seja possível especificar facilmente os limites de \n"
+"tamanho de banda por host."
+
+#: etc/inc/shaper.inc:3075 etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3507
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:124
+#: usr/local/www/firewall_virtual_ip_edit.php:541
+#: usr/local/www/services_wol_edit.php:151
+#: usr/local/www/interfaces_gif_edit.php:211
+#: usr/local/www/interfaces_gre_edit.php:222
+#: usr/local/www/interfaces_groups_edit.php:264
+#: usr/local/www/firewall_aliases_edit.php:596
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+#: usr/local/www/firewall_nat_edit.php:772
+#: usr/local/www/firewall_nat_out_edit.php:639
+#: usr/local/www/firewall_schedule_edit.php:796
+#: usr/local/www/firewall_schedule_edit.php:970
+#: usr/local/www/interfaces_vlan_edit.php:182
+#: usr/local/www/system_routes_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:342
+#: usr/local/www/interfaces_wireless_edit.php:188
+#: usr/local/www/services_dhcp_edit.php:245
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_igmpproxy_edit.php:180
+#: usr/local/www/system_gateway_groups_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:264
+#: usr/local/www/services_dhcpv6_edit.php:222 etc/inc/shaper.inc:3083
+#: etc/inc/shaper.inc:3324 etc/inc/shaper.inc:3519
+#: usr/local/www/system_routes_edit.php:310
+#: usr/local/www/system_gateway_groups_edit.php:278
+#: usr/local/www/services_dnsmasq_edit.php:221
+#: usr/local/www/firewall_nat_1to1_edit.php:450
+#: usr/local/www/services_dhcpv6_edit.php:231
+#: usr/local/www/firewall_nat_npt_edit.php:269
+#: usr/local/www/firewall_nat_out_edit.php:652
+#: usr/local/www/services_igmpproxy_edit.php:182
+#: usr/local/www/firewall_aliases_edit.php:601
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/services_dhcp_edit.php:254
+#: usr/local/www/firewall_virtual_ip_edit.php:529
+#: usr/local/www/interfaces_gre_edit.php:221 etc/inc/shaper.inc:3231
+#: etc/inc/shaper.inc:3479 etc/inc/shaper.inc:3674
+#: usr/local/www/system_routes_edit.php:311
+#: usr/local/www/system_gateway_groups_edit.php:338
+#: usr/local/www/interfaces_vlan_edit.php:183
+#: usr/local/www/services_dnsmasq_edit.php:222
+#: usr/local/www/firewall_nat_1to1_edit.php:448
+#: usr/local/www/services_dhcpv6_edit.php:233
+#: usr/local/www/firewall_nat_npt_edit.php:268
+#: usr/local/www/interfaces_qinq_edit.php:343
+#: usr/local/www/interfaces_gif_edit.php:212
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:154
+#: usr/local/www/firewall_schedule_edit.php:795
+#: usr/local/www/firewall_schedule_edit.php:969
+#: usr/local/www/firewall_aliases_edit.php:604
+#: usr/local/www/interfaces_groups_edit.php:265
+#: usr/local/www/firewall_nat_edit.php:778
+#: usr/local/www/services_dhcp_edit.php:256
+#: usr/local/www/firewall_virtual_ip_edit.php:474
+#: usr/local/www/interfaces_wireless_edit.php:190
+#: usr/local/www/services_dhcpv6_edit.php:236
+#: usr/local/www/interfaces_vlan_edit.php:186
+#: usr/local/www/firewall_nat_edit.php:773
+#: usr/local/www/interfaces_gif_edit.php:223
+#: usr/local/www/services_dhcp_edit.php:384
+#: usr/local/www/firewall_virtual_ip_edit.php:466
+#: usr/local/www/firewall_nat_out_edit.php:654
+#: usr/local/www/interfaces_qinq_edit.php:346 etc/inc/shaper.inc:3232
+#: etc/inc/shaper.inc:3480 etc/inc/shaper.inc:3675
+#: usr/local/www/firewall_nat_edit.php:785
+#: usr/local/www/firewall_virtual_ip_edit.php:486
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/system_gateway_groups_edit.php:339
+#: usr/local/www/firewall_aliases_edit.php:635
+#: usr/local/www/firewall_nat_out_edit.php:666 etc/inc/shaper.inc:3239
+#: etc/inc/shaper.inc:3487 etc/inc/shaper.inc:3682
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/system_routes_edit.php:343 etc/inc/shaper.inc:3307
+#: etc/inc/shaper.inc:3555 etc/inc/shaper.inc:3750
+#: usr/local/www/system_routes_edit.php:345 etc/inc/shaper.inc:3384
+#: etc/inc/shaper.inc:3657 etc/inc/shaper.inc:3855
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/firewall_aliases_edit.php:634 etc/inc/shaper.inc:3410
+#: etc/inc/shaper.inc:3683 etc/inc/shaper.inc:3881
+msgid "You may enter a description here for your reference (not parsed)."
+msgstr "Você pode inserir uma descrição aqui para sua referência (não analisado)."
+
+#: etc/inc/shaper.inc:3081 etc/inc/shaper.inc:3318
+#: usr/local/www/interfaces_bridge_edit.php:281
+#: usr/local/www/interfaces_ppps_edit.php:738 etc/inc/shaper.inc:3089
+#: etc/inc/shaper.inc:3330 usr/local/www/interfaces_bridge_edit.php:290
+#: etc/inc/shaper.inc:3237 etc/inc/shaper.inc:3485
+#: usr/local/www/interfaces_ppps_edit.php:739
+#: usr/local/www/interfaces_bridge_edit.php:291
+#: usr/local/www/interfaces_ppps_edit.php:745
+#: usr/local/www/interfaces_bridge_edit.php:292 etc/inc/shaper.inc:3238
+#: etc/inc/shaper.inc:3486 etc/inc/shaper.inc:3245 etc/inc/shaper.inc:3493
+#: usr/local/www/interfaces_ppps_edit.php:743
+#: usr/local/www/interfaces_bridge_edit.php:294 etc/inc/shaper.inc:3313
+#: etc/inc/shaper.inc:3561 etc/inc/shaper.inc:3390 etc/inc/shaper.inc:3663
+#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3689
+msgid "Show advanced options"
+msgstr "Exibir opções avançadas"
+
+#: etc/inc/shaper.inc:3085 etc/inc/shaper.inc:3093
+#: usr/local/www/status_ntpd.php:115 etc/inc/shaper.inc:3241
+#: usr/local/www/status_ntpd.php:131 etc/inc/shaper.inc:3242
+#: usr/local/www/status_ntpd.php:137 etc/inc/shaper.inc:3249
+#: etc/inc/shaper.inc:3317 etc/inc/shaper.inc:3394 etc/inc/shaper.inc:3420
+msgid "Delay"
+msgstr "Atraso"
+
+#: etc/inc/shaper.inc:3089 etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3245
+#: etc/inc/shaper.inc:3246 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3321
+#: etc/inc/shaper.inc:3398 etc/inc/shaper.inc:3424
+msgid "Hint: in most cases, you should specify 0 here (or leave the field empty)"
+msgstr "Dica: na maioria dos casos, você deve especificar 0 aqui (ou deixe o campo vazio)"
+
+#: etc/inc/shaper.inc:3093 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3101
+#: etc/inc/shaper.inc:3341 etc/inc/shaper.inc:3249 etc/inc/shaper.inc:3496
+#: etc/inc/shaper.inc:3250 etc/inc/shaper.inc:3497 etc/inc/shaper.inc:3257
+#: etc/inc/shaper.inc:3504 etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3572
+#: etc/inc/shaper.inc:3402 etc/inc/shaper.inc:3674 etc/inc/shaper.inc:3428
+#: etc/inc/shaper.inc:3700
+msgid "Packet loss rate"
+msgstr "Taxa de perda de pacote"
+
+#: etc/inc/shaper.inc:3097 etc/inc/shaper.inc:3333 etc/inc/shaper.inc:3105
+#: etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3253 etc/inc/shaper.inc:3500
+#: etc/inc/shaper.inc:3254 etc/inc/shaper.inc:3501 etc/inc/shaper.inc:3261
+#: etc/inc/shaper.inc:3508 etc/inc/shaper.inc:3329 etc/inc/shaper.inc:3576
+#: etc/inc/shaper.inc:3406 etc/inc/shaper.inc:3678 etc/inc/shaper.inc:3432
+#: etc/inc/shaper.inc:3704
+msgid "Hint: in most cases, you should specify 0 here (or leave the field empty). A value of 0.001 means one packet in 1000 gets dropped"
+msgstr "Dica: na maioria dos casos, você deve especificar 0 aqui (ou deixe o campo vazio). Um valor de 0.001 significa um pacote em 1000 é descartado"
+
+#: etc/inc/shaper.inc:3102 etc/inc/shaper.inc:3338 etc/inc/shaper.inc:3110
+#: etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3258 etc/inc/shaper.inc:3505
+#: etc/inc/shaper.inc:3259 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3266
+#: etc/inc/shaper.inc:3513 etc/inc/shaper.inc:3334 etc/inc/shaper.inc:3581
+#: etc/inc/shaper.inc:3411 etc/inc/shaper.inc:3683 etc/inc/shaper.inc:3437
+#: etc/inc/shaper.inc:3709
+msgid "Queue Size"
+msgstr "Tamanho da Fila"
+
+#: etc/inc/shaper.inc:3107 etc/inc/shaper.inc:3343 etc/inc/shaper.inc:3115
+#: etc/inc/shaper.inc:3355 etc/inc/shaper.inc:3263 etc/inc/shaper.inc:3510
+#: etc/inc/shaper.inc:3264 etc/inc/shaper.inc:3511 etc/inc/shaper.inc:3271
+#: etc/inc/shaper.inc:3518 etc/inc/shaper.inc:3339 etc/inc/shaper.inc:3586
+#: etc/inc/shaper.inc:3416 etc/inc/shaper.inc:3688 etc/inc/shaper.inc:3442
+#: etc/inc/shaper.inc:3714
+msgid "Hint: in most cases, you should leave the field empty. All packets in this pipe are placed into a fixed-size queue first, then they are delayed by value specified in the Delay field, and then they are delivered to their destination."
+msgstr "Dica: na maioria dos casos, você deve deixar o campo vazio. Todos os pacotes nesse pipe são colocados em uma lista de tamanho fixo primeiro, então eles são atrasados com o valor especificado no campo Atraso, e então eles são entregues aos seus destinos."
+
+#: etc/inc/shaper.inc:3113 etc/inc/shaper.inc:3349 etc/inc/shaper.inc:3121
+#: etc/inc/shaper.inc:3361 etc/inc/shaper.inc:3269 etc/inc/shaper.inc:3516
+#: etc/inc/shaper.inc:3270 etc/inc/shaper.inc:3517 etc/inc/shaper.inc:3277
+#: etc/inc/shaper.inc:3524 etc/inc/shaper.inc:3345 etc/inc/shaper.inc:3592
+#: etc/inc/shaper.inc:3422 etc/inc/shaper.inc:3694 etc/inc/shaper.inc:3448
+#: etc/inc/shaper.inc:3720
+msgid "Bucket Size"
+msgstr "Tamanho do bucket"
+
+#: etc/inc/shaper.inc:3118 etc/inc/shaper.inc:3354 etc/inc/shaper.inc:3126
+#: etc/inc/shaper.inc:3366 etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3521
+#: etc/inc/shaper.inc:3275 etc/inc/shaper.inc:3522 etc/inc/shaper.inc:3282
+#: etc/inc/shaper.inc:3529 etc/inc/shaper.inc:3350 etc/inc/shaper.inc:3597
+#: etc/inc/shaper.inc:3427 etc/inc/shaper.inc:3699 etc/inc/shaper.inc:3453
+#: etc/inc/shaper.inc:3725
+msgid "Hint: in most cases, you should leave the field empty. It increases the hash size set."
+msgstr "Dica: na maioria dos casos, você deve deixar o campo vazio. Ele aumenta o conjunto de tamanhos de hash."
+
+#: etc/inc/shaper.inc:3176 etc/inc/shaper.inc:3184 etc/inc/shaper.inc:3339
+#: etc/inc/shaper.inc:3340 etc/inc/shaper.inc:3347 etc/inc/shaper.inc:3415
+#: etc/inc/shaper.inc:3495 etc/inc/shaper.inc:3521
+msgid "Weight must be an integer between 1 and 100."
+msgstr "Peso deve ser um inteiro entre 1 e 100."
+
+#: etc/inc/shaper.inc:3274 etc/inc/shaper.inc:3282 etc/inc/shaper.inc:3437
+#: etc/inc/shaper.inc:3438 etc/inc/shaper.inc:3445 etc/inc/shaper.inc:3513
+#: etc/inc/shaper.inc:3594 etc/inc/shaper.inc:3620
+msgid "Enable/Disable queue"
+msgstr "Habilita/Desabilita fila"
+
+#: etc/inc/shaper.inc:3289 usr/local/www/firewall_rules.php:760
+#: usr/local/www/firewall_rules_edit.php:1224
+#: usr/local/www/firewall_rules_edit.php:1231
+#: usr/local/www/diag_system_pftop.php:107
+#: usr/local/www/interfaces_lagg_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:234
+#: usr/local/www/vpn_openvpn_client.php:519 etc/inc/shaper.inc:3301
+#: usr/local/www/firewall_rules_edit.php:1259
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules.php:757
+#: usr/local/www/load_balancer_virtual_server_edit.php:223
+#: usr/local/www/vpn_openvpn_client.php:524 etc/inc/shaper.inc:3456
+#: usr/local/www/vpn_ipsec_mobile.php:403
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/firewall_rules.php:750
+#: usr/local/www/load_balancer_virtual_server_edit.php:221
+#: usr/local/www/vpn_openvpn_client.php:542
+#: usr/local/www/vpn_openvpn_client.php:561
+#: usr/local/www/firewall_rules_edit.php:1274
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/interfaces_lagg_edit.php:215 etc/inc/shaper.inc:3457
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1289
+#: usr/local/www/firewall_rules.php:749 etc/inc/shaper.inc:3464
+#: usr/local/www/firewall_rules_edit.php:1282
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/interfaces_lagg_edit.php:214 etc/inc/shaper.inc:3532
+#: etc/inc/shaper.inc:3614 usr/local/www/firewall_rules_edit.php:1330
+#: usr/local/www/firewall_rules_edit.php:1336 etc/inc/shaper.inc:3640
+msgid "none"
+msgstr "nenhum"
+
+#: etc/inc/shaper.inc:3321 usr/local/www/system_gateways_edit.php:424
+#: etc/inc/shaper.inc:3333 usr/local/www/system_gateways_edit.php:445
+#: etc/inc/shaper.inc:3488 usr/local/www/system_gateways_edit.php:551
+#: usr/local/www/system_gateways_edit.php:555 etc/inc/shaper.inc:3489
+#: usr/local/www/system_gateways_edit.php:557 etc/inc/shaper.inc:3496
+#: usr/local/www/system_gateways_edit.php:587 etc/inc/shaper.inc:3564
+#: etc/inc/shaper.inc:3666 etc/inc/shaper.inc:3692
+msgid "Weight"
+msgstr "Peso"
+
+#: etc/inc/shaper.inc:3325 etc/inc/shaper.inc:3337 etc/inc/shaper.inc:3492
+#: etc/inc/shaper.inc:3493 etc/inc/shaper.inc:3500 etc/inc/shaper.inc:3568
+#: etc/inc/shaper.inc:3670 etc/inc/shaper.inc:3696
+msgid "Hint: For queues under the same parent this specifies the share that a queue gets(values range from 1 to 100, you can leave it blank otherwise)"
+msgstr "Dica: Para filas abaixo do mesmo pai, isso especifica o compartilhamento que a fila obtém (o intervalo de valores é de 1 a 100, do contrário, você pode deixá-lo em branco)"
+
+#: etc/inc/shaper.inc:3353 etc/inc/shaper.inc:3365 etc/inc/shaper.inc:3520
+#: etc/inc/shaper.inc:3521 etc/inc/shaper.inc:3528 etc/inc/shaper.inc:3596
+#: etc/inc/shaper.inc:3698 etc/inc/shaper.inc:3724
+msgid "slots"
+msgstr "slots"
+
+#: etc/inc/shaper.inc:3494 etc/inc/shaper.inc:3506 etc/inc/shaper.inc:3661
+#: etc/inc/shaper.inc:3662 etc/inc/shaper.inc:3669 etc/inc/shaper.inc:3737
+#: etc/inc/shaper.inc:3842 etc/inc/shaper.inc:3868
+msgid "Enable/Disable layer7 Container"
+msgstr "Habilitar/Desabilitar Contêiner de layer7"
+
+#: etc/inc/shaper.inc:3744 etc/inc/shaper.inc:3756 etc/inc/shaper.inc:3911
+#: etc/inc/shaper.inc:3912 etc/inc/shaper.inc:3919 etc/inc/shaper.inc:3987
+#: etc/inc/shaper.inc:4092 etc/inc/shaper.inc:4118
+#, php-format
+msgid "Sending HUP signal to %s"
+msgstr "Enviando sinal HUP para %s"
+
+#: etc/inc/shaper.inc:4052 etc/inc/shaper.inc:4112 etc/inc/shaper.inc:4269
+#: etc/inc/shaper.inc:4270 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4345
+#: etc/inc/shaper.inc:4450 etc/inc/shaper.inc:4476
+msgid " Clone shaper/queue on this interface"
+msgstr " Modelador/fila de clone nessa interface"
+
+#: etc/inc/shaper.inc:4060 etc/inc/shaper.inc:4067 etc/inc/shaper.inc:4120
+#: etc/inc/shaper.inc:4127 etc/inc/shaper.inc:4277 etc/inc/shaper.inc:4284
+#: etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285 etc/inc/shaper.inc:4292
+#: etc/inc/shaper.inc:4353 etc/inc/shaper.inc:4360 etc/inc/shaper.inc:4458
+#: etc/inc/shaper.inc:4465 etc/inc/shaper.inc:4484 etc/inc/shaper.inc:4491
+#, php-format
+msgid "Welcome to the %s Traffic Shaper."
+msgstr "Bem-vindo ao Traffic Shaper %s."
+
+#: etc/inc/shaper.inc:4061 etc/inc/shaper.inc:4068 etc/inc/shaper.inc:4121
+#: etc/inc/shaper.inc:4128 etc/inc/shaper.inc:4278 etc/inc/shaper.inc:4285
+#: etc/inc/shaper.inc:4279 etc/inc/shaper.inc:4286 etc/inc/shaper.inc:4293
+#: etc/inc/shaper.inc:4354 etc/inc/shaper.inc:4361 etc/inc/shaper.inc:4459
+#: etc/inc/shaper.inc:4466 etc/inc/shaper.inc:4485 etc/inc/shaper.inc:4492
+msgid "The tree on the left helps you navigate through the queues <br />buttons at the bottom represent queue actions and are activated accordingly."
+msgstr "A árvore do lado esquerdo ajuda-o a navegar através das filas <br /> botões no rodapé representam ações de filas e são ativados de acordo com as filas."
+
+#: etc/inc/system.inc:430 etc/inc/system.inc:449 etc/inc/system.inc:457
+#, php-format
+msgid "Static Routes: Gateway IP could not be found for %s"
+msgstr "Rotas estáticas: IP do Gateway não pôde ser encontrado para %s"
+
+#: etc/inc/system.inc:497 etc/inc/system.inc:529 etc/inc/system.inc:533
+#: etc/inc/system.inc:547
+msgid "Starting syslog..."
+msgstr "Iniciando syslog..."
+
+#: etc/inc/system.inc:536 etc/inc/system.inc:568 etc/inc/system.inc:572
+#: etc/inc/system.inc:695
+#, php-format
+msgid "Error: cannot open syslog.conf in system_syslogd_start().%s"
+msgstr "Erro: Não pôde abrir syslog.conf em system_syslogd_start().%s"
+
+#: etc/inc/system.inc:664 etc/inc/system.inc:712 etc/inc/system.inc:716
+#: etc/inc/system.inc:725
+msgid "Initializing PCMCIA..."
+msgstr "Inicializando PCMCIA..."
+
+#: etc/inc/system.inc:676 etc/inc/system.inc:761 etc/inc/system.inc:1412
+#: etc/inc/system.inc:1415 etc/inc/system.inc:724 etc/inc/system.inc:808
+#: etc/inc/system.inc:1469 etc/inc/system.inc:1472 etc/inc/system.inc:728
+#: etc/inc/system.inc:806 etc/inc/system.inc:1511 etc/inc/system.inc:1514
+#: etc/inc/system.inc:737 etc/inc/system.inc:817 etc/inc/system.inc:1460
+#: etc/inc/system.inc:1463 etc/inc/system.inc:1487 etc/inc/system.inc:1490
+msgid "failed!"
+msgstr "falhou!"
+
+#: etc/inc/system.inc:687 etc/inc/system.inc:735 etc/inc/system.inc:739
+#: etc/inc/system.inc:748
+msgid "Starting webConfigurator..."
+msgstr "Iniciando webConfigurator..."
+
+#: etc/inc/system.inc:719 etc/inc/system.inc:767 etc/inc/system.inc:771
+#: etc/inc/system.inc:775
+msgid "webConfigurator default"
+msgstr "webConfigurator padrão"
+
+#: etc/inc/system.inc:729 etc/inc/system.inc:777 etc/inc/system.inc:781
+#: etc/inc/system.inc:785
+msgid "Importing HTTPS certificate"
+msgstr "Importar certificados HTTPS"
+
+#: etc/inc/system.inc:1115 etc/inc/system.inc:1167 etc/inc/system.inc:1147
+#: etc/inc/system.inc:1096 etc/inc/system.inc:1103
+#, php-format
+msgid "Error: cannot open cert.pem in system_webgui_start().%s"
+msgstr "Erro: não pôde abrir cert.pem em system_webgui_start().%s"
+
+#: etc/inc/system.inc:1126 etc/inc/system.inc:1178 etc/inc/system.inc:1158
+#: etc/inc/system.inc:1107 etc/inc/system.inc:1114
+#, php-format
+msgid "Error: cannot open ca.pem in system_webgui_start().%s"
+msgstr "Erro: não pôde abrir ca.pem em system_webgui_start().%s"
+
+#: etc/inc/system.inc:1134 etc/inc/system.inc:1186 etc/inc/system.inc:1166
+#: etc/inc/system.inc:1115 etc/inc/system.inc:1122
+msgid "ssl configuration"
+msgstr "configuração ssl"
+
+#: etc/inc/system.inc:1161 etc/inc/system.inc:1213 etc/inc/system.inc:1193
+#: etc/inc/system.inc:1142 etc/inc/system.inc:1169
+#, php-format
+msgid "Error: cannot open %s in system_generate_lighty_config().%s"
+msgstr "Erro: não pôde abrir %s em system_generate_lighty_config().%s"
+
+#: etc/inc/system.inc:1181 etc/inc/system.inc:1233 etc/inc/system.inc:1213
+#: etc/inc/system.inc:1162 etc/inc/system.inc:1189
+msgid "Setting timezone..."
+msgstr "Configurando fuso horário..."
+
+#: etc/inc/system.inc:1270 etc/inc/system.inc:1326 etc/inc/system.inc:1368
+#: etc/inc/system.inc:1310 etc/inc/system.inc:1337
+msgid "Syncing system time before startup..."
+msgstr "Sincronizando horário do sistema antes de iniciar..."
+
+#: etc/inc/system.inc:1376 etc/inc/system.inc:1433 etc/inc/system.inc:1475
+#: etc/inc/system.inc:1424 etc/inc/system.inc:1451
+#, php-format
+msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s"
+msgstr "Erro: não pôde abrir dmesg.boot em system_dmesg_save().%s"
+
+#: etc/inc/system.inc:1397 etc/inc/system.inc:1454 etc/inc/system.inc:1496
+#: etc/inc/system.inc:1445 etc/inc/system.inc:1472
+msgid "Setting hard disk standby... "
+msgstr "Configurando modo de espera do disco rígido..."
+
+#: etc/inc/system.inc:1514 etc/inc/system.inc:1571 etc/inc/system.inc:1613
+#: etc/inc/system.inc:1562 etc/inc/system.inc:1589
+msgid "Generic PC"
+msgstr "PC Genérico"
+
+#: etc/inc/system.inc:1517 etc/inc/system.inc:1574 etc/inc/system.inc:1616
+#: etc/inc/system.inc:1565 etc/inc/system.inc:1592
+msgid "Generic PC (CD-ROM)"
+msgstr "PC Genérico (CD-ROM)"
+
+# Trata-se de um modelo de RouterBoard, acho válido preservar o modelo.
+#: etc/inc/system.inc:1526 etc/inc/system.inc:1583 etc/inc/system.inc:1625
+#: etc/inc/system.inc:1574 etc/inc/system.inc:1601
+msgid "PC Engines WRAP"
+msgstr "PC Engines WRAP"
+
+# Trata-se de um modelo de RouterBoard, acho prudente preservar o modelo.
+#: etc/inc/system.inc:1529 etc/inc/system.inc:1586 etc/inc/system.inc:1628
+#: etc/inc/system.inc:1577 etc/inc/system.inc:1604
+msgid "PC Engines ALIX"
+msgstr "Pc Engines ALIX"
+
+#: etc/inc/system.inc:1541 etc/inc/system.inc:1598 etc/inc/system.inc:1640
+#: etc/inc/system.inc:1589 etc/inc/system.inc:1616
+msgid "embedded (unknown)"
+msgstr "embarcado (desconhecido)"
+
+#: etc/inc/util.inc:99 etc/inc/util.inc:101
+#, php-format
+msgid "WARNING: Could not mark subsystem: %s dirty"
+msgstr "ADVERTÊNCIA: Não pôde marcar subsistema: %s sujo"
+
+#: etc/inc/util.inc:119 etc/inc/util.inc:121
+msgid "WARNING: You must give a name as parameter to lock() function."
+msgstr "ADVERTÊNCIA: Você deve dar um nome como parâmetro para a função lock()."
+
+#: etc/inc/util.inc:213 etc/inc/util.inc:208 etc/inc/util.inc:238
+#: etc/inc/util.inc:240
+#, php-format
+msgid "Reference %s is going negative, not doing unreference."
+msgstr "Referência %s está se tornando negavita, não desreferenciando."
+
+#: etc/inc/util.inc:980 etc/inc/util.inc:981 etc/inc/util.inc:1026
+#: etc/inc/util.inc:1076 etc/inc/util.inc:1080 etc/inc/util.inc:1084
+#, php-format
+msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' "
+msgstr "O comando '%1$s' retornou o código de saída '%2$d', a saída foi '%3$s' "
+
+#: etc/inc/vpn.inc:126 etc/inc/vpn.inc:134 etc/inc/vpn.inc:133
+#: etc/inc/vpn.inc:135
+msgid "Configuring IPsec VPN... "
+msgstr "Configurando VPN do IPsec..."
+
+#: etc/inc/vpn.inc:229 etc/inc/vpn.inc:228 etc/inc/vpn.inc:238
+#: etc/inc/vpn.inc:237 etc/inc/vpn.inc:236
+#, php-format
+msgid "Error: Invalid certificate info for %s"
+msgstr "Erro: Info de certificado inválido para %s"
+
+#: etc/inc/vpn.inc:235 etc/inc/vpn.inc:234 etc/inc/vpn.inc:244
+#: etc/inc/vpn.inc:243 etc/inc/vpn.inc:242
+#, php-format
+msgid "Error: Invalid certificate hash info for %s"
+msgstr "Erro: Info de hash de certificado inválido para %s"
+
+#: etc/inc/vpn.inc:240 etc/inc/vpn.inc:239 etc/inc/vpn.inc:249
+#: etc/inc/vpn.inc:248 etc/inc/vpn.inc:247
+#, php-format
+msgid "Error: Cannot write IPsec CA file for %s"
+msgstr "Erro: Não pode escrever arquivo de IPsec CA para %s"
+
+#: etc/inc/vpn.inc:249 etc/inc/vpn.inc:248
+#, php-format
+msgid "Error: cannot open psk.txt in vpn_ipsec_configure()."
+msgstr "Erro: não pode abrir psk.txt em vpn_ipsec_configure()."
+
+#: etc/inc/vpn.inc:312 etc/inc/vpn.inc:311
+#, php-format
+msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()."
+msgstr "Erro: não pode abrir racoon.conf em vpn_ipsec_configure()."
+
+#: etc/inc/vpn.inc:404 etc/inc/vpn.inc:403
+#, php-format
+msgid "Error: cannot open server %s in vpn.\n"
+msgstr "Erro: não foi possível abrir servidor %s na vpn.\n"
+
+#: etc/inc/vpn.inc:560 etc/inc/vpn.inc:559 etc/inc/vpn.inc:546
+#: etc/inc/vpn.inc:549 etc/inc/vpn.inc:548 etc/inc/vpn.inc:550
+#, php-format
+msgid "Error: Invalid phase1 certificate reference for %s"
+msgstr "Erro: Referência de certificado da fase1 inválida para %s"
+
+#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:555
+#: etc/inc/vpn.inc:558 etc/inc/vpn.inc:557 etc/inc/vpn.inc:559
+#, php-format
+msgid "Error: Cannot write phase1 certificate file for %s"
+msgstr "Erro: Não pode escrever arquivo de certificado da fase1 para %s"
+
+#: etc/inc/vpn.inc:580 etc/inc/vpn.inc:579 etc/inc/vpn.inc:566
+#: etc/inc/vpn.inc:569 etc/inc/vpn.inc:568 etc/inc/vpn.inc:570
+#, php-format
+msgid "Error: Cannot write phase1 key file for %s"
+msgstr "Erro: Não pode escrever arquivo de chave da fase1 para %s"
+
+#: etc/inc/vpn.inc:593 etc/inc/vpn.inc:592 etc/inc/vpn.inc:579
+#: etc/inc/vpn.inc:582 etc/inc/vpn.inc:581 etc/inc/vpn.inc:583
+#, php-format
+msgid "Error: Cannot write phase1 CA certificate file for %s"
+msgstr "Erro: não foi possível escrever o arquivo certificado CA phase1 para %s "
+
+#: etc/inc/vpn.inc:826 etc/inc/vpn.inc:829
+#, php-format
+msgid "Error: cannot open spd.conf in vpn_ipsec_configure()."
+msgstr "Erro: não foi possível abrir spd.conf na vpn_ipsec_configure()."
+
+#: etc/inc/vpn.inc:1008 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1013
+#: etc/inc/vpn.inc:1022 etc/inc/vpn.inc:1035 etc/inc/vpn.inc:1034
+#: etc/inc/vpn.inc:1036
+msgid "Forcefully reloading IPsec racoon daemon"
+msgstr "Recarga forçada do processo IPsec racoon"
+
+#: etc/inc/vpn.inc:1052 etc/inc/vpn.inc:1058 etc/inc/vpn.inc:1056
+#: etc/inc/vpn.inc:1065 etc/inc/vpn.inc:1078 etc/inc/vpn.inc:1077
+#: etc/inc/vpn.inc:1079
+msgid "Configuring PPTP VPN service... "
+msgstr "Configurando o serviço PPTP VPN..."
+
+#: etc/inc/vpn.inc:1062 etc/inc/vpn.inc:1068 etc/inc/vpn.inc:1066
+#: etc/inc/vpn.inc:1075 etc/inc/vpn.inc:1088 etc/inc/vpn.inc:1087
+#: etc/inc/vpn.inc:1089
+msgid "Could not kill mpd within 3 seconds. Trying again."
+msgstr "Não foi possível matar mpd em 3 segundos. Tente novamente."
+
+#: etc/inc/vpn.inc:1085 etc/inc/vpn.inc:1091 etc/inc/vpn.inc:1089
+#: etc/inc/vpn.inc:1098 etc/inc/vpn.inc:1111 etc/inc/vpn.inc:1110
+#: etc/inc/vpn.inc:1112
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()."
+msgstr "Erro: não pôde abrir mdp.conf em vpn_pptpd_configure()."
+
+#: etc/inc/vpn.inc:1198 etc/inc/vpn.inc:1204 etc/inc/vpn.inc:1202
+#: etc/inc/vpn.inc:1212 etc/inc/vpn.inc:1225 etc/inc/vpn.inc:1224
+#: etc/inc/vpn.inc:1226
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pptpd_configure()."
+msgstr "Erro: não pôde abrir mpd.links em vpn_pptpd_configure()."
+
+#: etc/inc/vpn.inc:1222 etc/inc/vpn.inc:1228 etc/inc/vpn.inc:1226
+#: etc/inc/vpn.inc:1237 etc/inc/vpn.inc:1250 etc/inc/vpn.inc:1249
+#: etc/inc/vpn.inc:1251
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()."
+msgstr "Erro: não pôde abrir mpd.secret em vpn_pptpd_configure()."
+
+#: etc/inc/vpn.inc:1279 etc/inc/vpn.inc:1285 etc/inc/vpn.inc:1283
+#: etc/inc/vpn.inc:1295 etc/inc/vpn.inc:1308 etc/inc/vpn.inc:1307
+#: etc/inc/vpn.inc:1309
+msgid "Configuring PPPoE Server service... "
+msgstr "Configurando serviço PPPoE da VPN..."
+
+#: etc/inc/vpn.inc:1303 etc/inc/vpn.inc:1309 etc/inc/vpn.inc:1307
+#: etc/inc/vpn.inc:1319 etc/inc/vpn.inc:1332 etc/inc/vpn.inc:1331
+#: etc/inc/vpn.inc:1333
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()."
+msgstr "Erro: não se pode abrir mpd.conf em vpn_pppoe_configure()."
+
+#: etc/inc/vpn.inc:1406 etc/inc/vpn.inc:1412 etc/inc/vpn.inc:1410
+#: etc/inc/vpn.inc:1423 etc/inc/vpn.inc:1436 etc/inc/vpn.inc:1435
+#: etc/inc/vpn.inc:1437
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pppoe_configure()."
+msgstr "Erro: não se pode abrir mpd.links em vpn_pppoe_configure()."
+
+#: etc/inc/vpn.inc:1432 etc/inc/vpn.inc:1438 etc/inc/vpn.inc:1436
+#: etc/inc/vpn.inc:1450 etc/inc/vpn.inc:1463 etc/inc/vpn.inc:1462
+#: etc/inc/vpn.inc:1464
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()."
+msgstr "Erro: não se pode abrir mpd.secret em vpn_pppoe_configure()."
+
+#: etc/inc/vpn.inc:1460 usr/local/www/system_firmware_check.php:139
+#: etc/inc/vpn.inc:1470 etc/inc/vpn.inc:1468
+#: usr/local/www/system_firmware_check.php:141 etc/inc/vpn.inc:1483
+#: usr/local/www/system_firmware_check.php:133 etc/inc/vpn.inc:1496
+#: etc/inc/vpn.inc:1495 etc/inc/vpn.inc:1497
+msgid "done"
+msgstr "feito"
+
+#: etc/inc/vpn.inc:1479 etc/inc/vpn.inc:1489 etc/inc/vpn.inc:1487
+#: etc/inc/vpn.inc:1502 etc/inc/vpn.inc:1515 etc/inc/vpn.inc:1514
+#: etc/inc/vpn.inc:1516
+msgid "Configuring l2tp VPN service... "
+msgstr "Configurando o serviço VPN l2tp..."
+
+#: etc/inc/vpn.inc:1504 etc/inc/vpn.inc:1514 etc/inc/vpn.inc:1512
+#: etc/inc/vpn.inc:1527 etc/inc/vpn.inc:1540 etc/inc/vpn.inc:1539
+#: etc/inc/vpn.inc:1541
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()."
+msgstr "Erro: não se pode abrir mpd.conf em vpn_l2tp_configure()."
+
+#: etc/inc/vpn.inc:1597 etc/inc/vpn.inc:1607 etc/inc/vpn.inc:1605
+#: etc/inc/vpn.inc:1621 etc/inc/vpn.inc:1634 etc/inc/vpn.inc:1633
+#: etc/inc/vpn.inc:1635
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_l2tp_configure()."
+msgstr "Erro: não se pode abrir mpd.links em vpn_l2tp_configure()."
+
+#: etc/inc/vpn.inc:1622 etc/inc/vpn.inc:1632 etc/inc/vpn.inc:1630
+#: etc/inc/vpn.inc:1647 etc/inc/vpn.inc:1660 etc/inc/vpn.inc:1659
+#: etc/inc/vpn.inc:1661
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()."
+msgstr "Erro: não se pode abrir mpd.secret em vpn_l2tp_configure()."
+
+#: etc/inc/vpn.inc:1769 etc/inc/vpn.inc:1779 etc/inc/vpn.inc:1764
+#: etc/inc/vpn.inc:1836 etc/inc/vpn.inc:1849 etc/inc/vpn.inc:1846
+#: etc/inc/vpn.inc:1848
+#, php-format
+msgid "Could not determine VPN endpoint for '%s'"
+msgstr "Não foi possível determinar o ponto final da VPN para '%s'"
+
+#: etc/inc/vpn.inc:1774 etc/inc/vpn.inc:1784 etc/inc/vpn.inc:1769
+#: etc/inc/vpn.inc:1841 etc/inc/vpn.inc:1854 etc/inc/vpn.inc:1851
+#: etc/inc/vpn.inc:1853
+#, php-format
+msgid "IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new EP '%2$s'"
+msgstr "IPSEC: ERRO: Um dos endpoints não é um endereço IP. EP antigo '%1$s' EP novo '%2$s'"
+
+#: etc/inc/vpn.inc:1777 etc/inc/vpn.inc:1787 etc/inc/vpn.inc:1772
+#: etc/inc/vpn.inc:1844 etc/inc/vpn.inc:1857 etc/inc/vpn.inc:1854
+#: etc/inc/vpn.inc:1856
+#, php-format
+msgid "IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1$s' new RG '%2$s'"
+msgstr "IPSEC: ERRO: Um dos endpoints remotos não é um endereço IP. RG antigo '%1$s' novo RG '%2$s'"
+
+#: etc/inc/vpn.inc:1833 etc/inc/vpn.inc:1843 etc/inc/vpn.inc:1835
+#: etc/inc/vpn.inc:1907 etc/inc/vpn.inc:1920 etc/inc/vpn.inc:1917
+#: etc/inc/vpn.inc:1919
+#, php-format
+msgid "Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. Reloading policy"
+msgstr "Recarregando túnel IPsec '%1$s'. IP anterior '%2$s', IP atual '%3$s'. Recarregando política"
+
+#: etc/inc/xmlparse.inc:85 etc/inc/xmlparse_attr.inc:78
+#, php-format
+msgid "XML error: %1$s at line %2$d cannot occur more than once"
+msgstr "Erro de XML: %1$s na linha %2$d não pode aparecer mais de uma vez"
+
+#: etc/inc/xmlparse.inc:176 etc/inc/xmlparse_attr.inc:187
+msgid "Error: could not open XML input"
+msgstr "Erro: não foi possível abrir a entrada XML"
+
+#: etc/inc/xmlparse.inc:182
+#, php-format
+msgid "XML error: %1$s at line %2$d in %3$s"
+msgstr "Erro de XML: %1$s na linha %2$d em %3$s"
+
+#: etc/inc/xmlparse.inc:198 etc/inc/xmlparse_attr.inc:210
+#: etc/inc/xmlparse.inc:199
+#, php-format
+msgid "XML error: no %s object found!"
+msgstr "Erro XML: objeto %s não encontrado!"
+
+#: etc/inc/xmlrpc_client.inc:152
+msgid "Unknown method"
+msgstr "Método desconhecido"
+
+#: etc/inc/xmlrpc_client.inc:153
+msgid "Invalid return payload: enable debugging to examine incoming payload"
+msgstr "Carga inválida retornada: habilite o debugging para examinar a carga de entrada"
+
+#: etc/inc/xmlrpc_client.inc:154
+msgid "Incorrect parameters passed to method"
+msgstr "Parâmetros incorretos passados ao método"
+
+#: etc/inc/xmlrpc_client.inc:155
+msgid "Can't introspect: method unknown"
+msgstr "Não foi possível analisar: método indefinido"
+
+#: etc/inc/xmlrpc_client.inc:156
+msgid "Didn't receive 200 OK from remote server."
+msgstr "Não foi recebido 200 OK do servidor remoto."
+
+#: etc/inc/xmlrpc_client.inc:157
+msgid "The requested method didn't return an XML_RPC_Response object."
+msgstr "O método solicitado não retorna um objeto XML_RPC_Response."
+
+#: etc/inc/xmlrpc_client.inc:158
+msgid "Invalid request payload"
+msgstr "Carga solicitada inválida"
+
+#: etc/inc/xmlrpc_client.inc:260
+msgid "missing top level xmlrpc element"
+msgstr "falta elemento de nível superior xmlrpc"
+
+#: etc/inc/xmlrpc_client.inc:268
+#, php-format
+msgid "xmlrpc element %1$s cannot be child of %2$s"
+msgstr "elemento xmlrpc %1$s não pode ser filho de %2$s"
+
+#: etc/inc/xmlrpc_client.inc:431
+msgid "Non-numeric value received in INT or DOUBLE"
+msgstr "Recebido um valor não numérico em INT ou DOUBLE "
+
+#: etc/inc/xmlrpc_client.inc:860
+#, php-format
+msgid "send()'s %s parameter must be an XML_RPC_Message object."
+msgstr "send()'s %s parametro pode ser um objeto XML_RPC_Message."
+
+#: etc/inc/xmlrpc_client.inc:951
+#, php-format
+msgid ""
+"Connection to proxy server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+"Conexão com servidor proxy \n"
+"%1$s:%2$s falhou. %3$s"
+
+#: etc/inc/xmlrpc_client.inc:957
+#, php-format
+msgid ""
+"Connection to RPC server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+"Conexão com servidor RPC \n"
+"%1$s:%2$s falhou. %3$s"
+
+#: etc/inc/xmlrpc_client.inc:1330
+msgid "The submitted request did not contain this parameter"
+msgstr "A requisição submetida não contêm esse parâmetro"
+
+#: etc/inc/xmlrpc_client.inc:1361
+msgid "mb_convert_encoding() is not available"
+msgstr "mb_convert_enconding() não está disponível"
+
+#: etc/inc/xmlrpc_client.inc:1470
+#, php-format
+msgid "HTTP error, got response: %s"
+msgstr "Erro de HTTP, obteve resposta: %s"
+
+#: etc/inc/xmlrpc_client.inc:1496
+msgid "XML error at line 1, check URL"
+msgstr "Erro de XML na linha 1, verificar URL"
+
+#: etc/inc/xmlrpc_client.inc:1591 etc/inc/xmlrpc_client.inc:1593
+msgid "Scalar can have only one value"
+msgstr "Escalar pode ter apenas um valor"
+
+#: etc/inc/xmlrpc_client.inc:1598 etc/inc/xmlrpc_client.inc:1600
+#, php-format
+msgid "Not a scalar type (%s)"
+msgstr "Não é um tipo escalar (%s)"
+
+#: etc/inc/xmlrpc_client.inc:1634 etc/inc/xmlrpc_client.inc:1650
+#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652
+#, php-format
+msgid "Already initialized as a [%s]"
+msgstr "Já inicializado como um [%s]"
+
+#: etc/inc/xmlrpc_server.inc:48
+msgid "This method lists all the methods that the XML-RPC server knows how to dispatch"
+msgstr "Esse método lista todos os métodos que o servidor XML-RPC sabe como enviar"
+
+#: etc/inc/xmlrpc_server.inc:66
+msgid "Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)"
+msgstr "Retorna um matriz de assinaturas conhecidas (uma matriz de matrizes) para o nome do método apresentado. Se não houver assinaturas conhecidas, retorna uma matriz vazia (tipo de teste != matriz para detectar assinaturas perdidas) "
+
+#: etc/inc/xmlrpc_server.inc:86
+msgid "Returns help text if defined for the method passed, otherwise returns an empty string"
+msgstr "Retorna o texto de ajuda se definido no método passado, senão retorna uma string vazia"
+
+#: etc/inc/authgui.inc:73
+msgid "No page assigned to this user! Click here to logout."
+msgstr "Nenhuma página atribuída à este usuário! Clique aqui para fazer logout."
+
+#: etc/inc/authgui.inc:97 etc/inc/authgui.inc:103
+#, php-format
+msgid "Error: %1$s Description: %2$s"
+msgstr "Erro: %1$s Descrição: %2$s"
+
+#: etc/inc/authgui.inc:160 etc/inc/authgui.inc:159 etc/inc/authgui.inc:165
+msgid "unknown reason"
+msgstr "razão desconhecida"
+
+#: etc/inc/authgui.inc:161 etc/inc/authgui.inc:160 etc/inc/authgui.inc:166
+#, php-format
+msgid "Invalid login (%s)."
+msgstr "Login inválido (%s)."
+
+#: etc/inc/authgui.inc:166 etc/inc/authgui.inc:165 etc/inc/authgui.inc:171
+#, php-format
+msgid "This device is currently being maintained by: %s."
+msgstr "O dispositivo atual esta sendo mantido por: %s."
+
+#: etc/inc/authgui.inc:214 etc/inc/authgui.inc:277 etc/inc/authgui.inc:212
+#: etc/inc/authgui.inc:275 etc/inc/authgui.inc:235 etc/inc/authgui.inc:298
+msgid "Login"
+msgstr "Login"
+
+#: etc/inc/authgui.inc:242 etc/inc/authgui.inc:240 etc/inc/authgui.inc:263
+msgid "You are accessing this router by an IP address not configured locally, which may be forwarded by NAT or other means. <br/><br/>If you did not setup this forwarding, you may be the target of a man-in-the-middle attack."
+msgstr "Você está acessando este roteador através de um endereço IP não configurado localmente, que pode ser encaminhado pelo NAT ou outros meios. <br/><br/>Se você não instalou este encaminhando, você pode estar sendo alvo de um ataque."
+
+#: etc/inc/authgui.inc:251 etc/inc/authgui.inc:249 etc/inc/authgui.inc:272
+msgid "Username:"
+msgstr "Usuário:"
+
+#: etc/inc/authgui.inc:258 usr/local/www/diag_backup.php:597
+#: usr/local/www/system_authservers.php:627 etc/inc/authgui.inc:256
+#: usr/local/www/diag_backup.php:676 usr/local/www/system_authservers.php:632
+#: usr/local/www/system_authservers.php:639 usr/local/www/diag_backup.php:681
+#: etc/inc/authgui.inc:279 usr/local/www/system_authservers.php:651
+#: usr/local/www/diag_backup.php:682
+msgid "Password:"
+msgstr "Senha:"
+
+#: etc/inc/authgui.inc:265 etc/inc/authgui.inc:263 etc/inc/authgui.inc:286
+msgid "Enter username and password to login."
+msgstr "Digite usuário e senha para entrar."
+
+#: etc/inc/authgui.inc:271 etc/inc/authgui.inc:269 etc/inc/authgui.inc:292
+msgid "Your browser must support cookies to login."
+msgstr "Seu browser precisa suportar cookies para logar."
+
+#: etc/inc/cmd_chain.inc:101
+#, php-format
+msgid "CmdCHAIN is executing -> %1$s - %2$s"
+msgstr "CmdCHAIN está sendo executado -> %1$s - %2$s"
+
+#: etc/inc/cmd_chain.inc:109 etc/inc/cmd_chain.inc:111
+#, php-format
+msgid "%1$s failed with return code -> %2$s. The command was %3$s"
+msgstr "%1$s falhou com código de retorno -> %2$s. O comando foi %3$s"
+
+#: etc/inc/config.console.inc:58
+msgid "DANGER! WARNING! ACHTUNG!"
+msgstr "PERIGO! ADVERTÊNCIA! ACHTUNG!"
+
+#: etc/inc/config.console.inc:59
+#, php-format
+msgid "%s requires *AT LEAST* %s RAM to function correctly.%s"
+msgstr "%s requer *PELO MENOS* %s de RAM para funcionar corretamente.%s"
+
+#: etc/inc/config.console.inc:60
+#, php-format
+msgid "Only (%s) MB RAM has been detected.%s"
+msgstr "Somente (%s) MB de RAM foi detectado.%s"
+
+#: etc/inc/config.console.inc:61
+msgid "Press ENTER to continue."
+msgstr "Pressione ENTER para continuar."
+
+#: etc/inc/config.console.inc:83 etc/inc/config.console.inc:495
+#: etc/inc/config.console.inc:497
+msgid "No interfaces found!"
+msgstr "Nenhuma interface encontrada!"
+
+#: etc/inc/config.console.inc:181
+msgid "VLAN interfaces:"
+msgstr "Interfaces VLAN:"
+
+#: etc/inc/config.console.inc:207
+msgid "Enter the WAN interface name or 'a' for auto-detection:"
+msgstr "Informe o nome da interface WAN ou 'uma' para auto-detecção:"
+
+#: etc/inc/config.console.inc:215 etc/inc/config.console.inc:276
+#: etc/inc/config.console.inc:518 etc/inc/config.console.inc:520
+#: etc/inc/config.console.inc:244
+#, php-format
+msgid "%sInvalid interface name '%s'%s"
+msgstr "%sNome de interface inválido '%s'%s"
+
+#: etc/inc/config.console.inc:222
+#, php-format
+msgid "%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this enables full Firewalling/NAT mode.%s(or nothing if finished):%s"
+msgstr "%sInforme o nome da interface LAN ou 'uma' para auto-detecção %sNOTA: isso habilita o modo Firewalling/NAT completo.%s(ou nada, se finalizado):%s"
+
+#: etc/inc/config.console.inc:244
+#, php-format
+msgid "%sInvalid interface name '%s'%s)"
+msgstr "%snome de interface inválido '%s'%s)"
+
+#: etc/inc/config.console.inc:261
+#, php-format
+msgid "%sOptional interface %s description found: %s"
+msgstr "Descrição de %s interface opcional %s encontrada: %s"
+
+#: etc/inc/config.console.inc:264
+#, php-format
+msgid "(or nothing if finished):%s"
+msgstr "(ou nada é finalizado):%s"
+
+#: etc/inc/config.console.inc:270
+msgid "Optional"
+msgstr "Opcional"
+
+#: etc/inc/config.console.inc:304
+msgid "The interfaces will be assigned as follows:"
+msgstr "As interfaces serão atribuídas conforme segue:"
+
+#: etc/inc/config.console.inc:416 etc/inc/config.console.inc:418
+#, php-format
+msgid "%sWriting configuration..."
+msgstr "%sEscrevendo configuração..."
+
+#: etc/inc/config.console.inc:418 etc/inc/config.console.inc:420
+#, php-format
+msgid "done.%s"
+msgstr "pronto.%s"
+
+#: etc/inc/config.console.inc:425 etc/inc/config.console.inc:427
+msgid "One moment while we reload the settings..."
+msgstr "Um momento enquanto recarregamos as configurações..."
+
+#: etc/inc/config.console.inc:429 etc/inc/config.console.inc:431
+msgid " done!"
+msgstr "pronto!"
+
+#: etc/inc/config.console.inc:449 etc/inc/config.console.inc:451
+#, php-format
+msgid "Detected link-up on interface %s.%s"
+msgstr "Detectado link-up na interface %s.%s"
+
+#: etc/inc/config.console.inc:454 etc/inc/config.console.inc:456
+#, php-format
+msgid "No link-up detected.%s"
+msgstr "Nenhum link-up detectado.%s"
+
+#: etc/inc/config.console.inc:493 etc/inc/config.console.inc:495
+msgid "VLAN Capable interfaces:"
+msgstr "Interfaces que suportam VLAN:"
+
+#: etc/inc/config.console.inc:508 etc/inc/config.console.inc:510
+msgid "No VLAN capable interfaces detected."
+msgstr "Nenhum interface que suporta VLAN detectada."
+
+#: etc/inc/config.console.inc:512 etc/inc/config.console.inc:514
+msgid "Enter the parent interface name for the new VLAN (or nothing if finished):"
+msgstr "Informe o nome da interface pai para a nova VLAN (ou nada se finalizado):"
+
+#: etc/inc/config.console.inc:525 etc/inc/config.console.inc:527
+msgid "Enter the VLAN tag (1-4094):"
+msgstr "Informe a tag da VLAN (1-4094):"
+
+#: etc/inc/config.console.inc:529 etc/inc/config.console.inc:531
+#, php-format
+msgid "%sInvalid VLAN tag '%s'%s"
+msgstr "%sTag de VLAN inválida '%s'%s"
+
+#: etc/inc/config.lib.inc:79
+msgid "Config.xml unlocked."
+msgstr "Config.xml desbloqueado."
+
+#: etc/inc/config.lib.inc:82
+msgid "Invalid password entered. Please try again."
+msgstr "Senha inválida informada. Por favor, tente novamente."
+
+#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140
+#: etc/inc/config.lib.inc:271
+msgid "Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."
+msgstr "Config.xml está corrompido e possui 0 bytes. Não pôde restaurar um backup anterior."
+
+#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149
+#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:560
+#: etc/inc/config.lib.inc:577 etc/inc/config.lib.inc:555
+msgid "Could not restore config.xml."
+msgstr "Não pôde restaurar config.xml."
+
+#: etc/inc/config.lib.inc:210 etc/inc/config.lib.inc:211
+#, php-format
+msgid "%1$s is restoring the configuration %2$s"
+msgstr "%1$s está restaurando a configuração %2$s"
+
+#: etc/inc/config.lib.inc:233
+msgid "Resetting factory defaults..."
+msgstr "Reconfigurando padrões de fábrica..."
+
+#: etc/inc/config.lib.inc:236
+msgid ""
+"No XML configuration file found - using factory defaults.\n"
+"Make sure that the configuration floppy disk with the conf/config.xml\n"
+"file is inserted. If it isn't, your configuration changes will be lost\n"
+"on reboot.\n"
+msgstr ""
+"Nenhuma configuração XML encontrada - usando configurações de fábrica.\n"
+"Tenha certeza de que a configuração conf/config.xml do disquete está inserida. Se não, suas configurações modificadas serão perdidas\n"
+"ao reiniciar.\n"
+
+#: etc/inc/config.lib.inc:249
+#, php-format
+msgid "XML configuration file not found. %s cannot continue booting."
+msgstr "Arquivo XML de configuração não encontrado. %s nãoo pode continuar iniciando."
+
+#: etc/inc/config.lib.inc:255
+msgid "Last known config found and restored. Please double check your configuration file for accuracy."
+msgstr "Última configuração conhecida encontrada e restaurada. Por favor, cheque duas vezes seu arquivo de configuração por precaução."
+
+#: etc/inc/config.lib.inc:317 etc/inc/config.lib.inc:320
+msgid "Disk is dirty. Running fsck -y"
+msgstr "O disco está sujo. Executando fsck -y"
+
+#: etc/inc/config.lib.inc:328 etc/inc/config.lib.inc:331
+msgid "File system is dirty. Launching FSCK for /"
+msgstr "O sistema de arquivos está sujo. Abrindo FSCK para /"
+
+#: etc/inc/config.lib.inc:379 etc/inc/config.lib.inc:382
+#, php-format
+msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes"
+msgstr "Iniciar atualização de Configuração em %s, configure tempo de execução para 15 minutos"
+
+#: etc/inc/config.lib.inc:389 etc/inc/config.lib.inc:390
+#: etc/inc/config.lib.inc:392 etc/inc/config.lib.inc:393
+msgid "Updated bogon update frequency to 3am"
+msgstr "Atualizada frequência de atualização bogon para 3 da manhã"
+
+#: etc/inc/config.lib.inc:420 etc/inc/config.lib.inc:423
+#, php-format
+msgid "Ended Configuration upgrade at %s"
+msgstr "Atualização de Configuração finalizada às %s"
+
+#: etc/inc/config.lib.inc:423 etc/inc/config.lib.inc:426
+#, php-format
+msgid "Upgraded config version level from %1$s to %2$s"
+msgstr "Atualizada versão config de nível %1$s para %2$s"
+
+#: etc/inc/config.lib.inc:512 etc/inc/config.lib.inc:520
+#: etc/inc/config.lib.inc:537 etc/inc/config.lib.inc:903
+#, php-format
+msgid "%s made unknown change"
+msgstr "%s fez mudança desconhecida"
+
+#: etc/inc/config.lib.inc:525 etc/inc/config.lib.inc:533
+#: etc/inc/config.lib.inc:550 etc/inc/config.lib.inc:528
+msgid "WARNING: Config contents could not be save. Could not open file!"
+msgstr "ADVERTÊNCIA: Conteúdo de config não pôde ser salvo. Não pôde abrir arquivo!"
+
+#: etc/inc/config.lib.inc:527 etc/inc/config.lib.inc:535
+#: etc/inc/config.lib.inc:552 etc/inc/config.lib.inc:530
+#, php-format
+msgid "Unable to open %s/config.xml for writing in write_config()%s"
+msgstr "Incapaz de abrir %s/config.cml para escrita em write_config()%s"
+
+#: etc/inc/config.lib.inc:636 etc/inc/config.lib.inc:644
+#: etc/inc/config.lib.inc:661 etc/inc/config.lib.inc:639
+msgid "Reverted to"
+msgstr "Revertido para"
+
+#: etc/inc/config.lib.inc:651 etc/inc/config.lib.inc:659
+#: etc/inc/config.lib.inc:676 etc/inc/config.lib.inc:654
+msgid "Installing configuration..."
+msgstr "Instalando configuração..."
+
+#: etc/inc/config.lib.inc:653 etc/inc/config.lib.inc:661
+#: etc/inc/config.lib.inc:678 etc/inc/config.lib.inc:656
+msgid "Installing configuration ...."
+msgstr "Instalando configuração ...."
+
+#: etc/inc/config.lib.inc:704 etc/inc/config.lib.inc:712
+#: etc/inc/config.lib.inc:729 etc/inc/config.lib.inc:707
+msgid "XML error: unable to open file"
+msgstr "Erro de XML: incapaz de abrir arquivo"
+
+#: etc/inc/config.lib.inc:710 etc/inc/config.lib.inc:718
+#: etc/inc/config.lib.inc:735 etc/inc/config.lib.inc:713
+#, php-format
+msgid "%1$s at line %2$d"
+msgstr "%1$s na linha %2$d"
+
+#: etc/inc/config.lib.inc:756 etc/inc/config.lib.inc:758
+#: etc/inc/config.lib.inc:764 etc/inc/config.lib.inc:766
+#: etc/inc/config.lib.inc:781 etc/inc/config.lib.inc:783
+#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761
+#, php-format
+msgid "The backup cache file %s is corrupted. Unlinking."
+msgstr "O arquivo de backup de cache %s está corrompido. Desvinculando."
+
+#: etc/inc/easyrule.inc:116 etc/inc/easyrule.inc:117
+msgid "Easy Rule: Blocked from Firewall Log View"
+msgstr "Regra Fácil: Bloqueado da Visualização de Log do Firewall"
+
+#: etc/inc/easyrule.inc:165 etc/inc/easyrule.inc:173 etc/inc/easyrule.inc:181
+#: etc/inc/easyrule.inc:177 etc/inc/easyrule.inc:185 etc/inc/easyrule.inc:178
+#: etc/inc/easyrule.inc:186
+msgid "Entry added"
+msgstr "Entrada adicionada"
+
+#: etc/inc/easyrule.inc:170 etc/inc/easyrule.inc:178 etc/inc/easyrule.inc:182
+#: etc/inc/easyrule.inc:183
+msgid "Hosts blocked from Firewall Log view"
+msgstr "Hosts bloqueados da Visualização de Log do Firewall"
+
+#: etc/inc/easyrule.inc:249 etc/inc/easyrule.inc:257 etc/inc/easyrule.inc:262
+#: etc/inc/easyrule.inc:263
+msgid "Easy Rule: Passed from Firewall Log View"
+msgstr "Regra Fácil: Liberado pela Visualização de Log do Firewall"
+
+#: etc/inc/easyrule.inc:280 etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:309
+#: etc/inc/easyrule.inc:313 etc/inc/easyrule.inc:318
+msgid "Tried to block invalid IP:"
+msgstr "Tentou bloquear IP inválido:"
+
+#: etc/inc/easyrule.inc:284 etc/inc/easyrule.inc:307 etc/inc/easyrule.inc:313
+#: etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:322
+msgid "Invalid interface for block rule:"
+msgstr "Interface inválida para regra de bloqueio:"
+
+#: etc/inc/easyrule.inc:287 etc/inc/easyrule.inc:310 etc/inc/easyrule.inc:316
+#: etc/inc/easyrule.inc:320 etc/inc/easyrule.inc:325
+msgid "Host added successfully"
+msgstr "Host adicionado com sucesso"
+
+#: etc/inc/easyrule.inc:289 etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:318
+#: etc/inc/easyrule.inc:322 etc/inc/easyrule.inc:327
+msgid "Failed to create block rule, alias, or add host."
+msgstr "Falhou ao criar regra de bloqueio, alias, ou ao adicionar um host."
+
+#: etc/inc/easyrule.inc:292 etc/inc/easyrule.inc:315 etc/inc/easyrule.inc:321
+#: etc/inc/easyrule.inc:325 etc/inc/easyrule.inc:330
+msgid "Tried to block but had no host IP or interface"
+msgstr "Tentou bloquear, mas não possuía nenhum IP de host ou interface"
+
+#: etc/inc/easyrule.inc:294 etc/inc/easyrule.inc:317 etc/inc/easyrule.inc:323
+#: etc/inc/easyrule.inc:327 etc/inc/easyrule.inc:332
+msgid "Unknown block error."
+msgstr "Erro desconhecido de bloqueio."
+
+#: etc/inc/easyrule.inc:303 etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:334
+#: etc/inc/easyrule.inc:338 etc/inc/easyrule.inc:343
+msgid "Invalid interface for pass rule:"
+msgstr "Interface inválida para regra de liberação:"
+
+#: etc/inc/easyrule.inc:306 etc/inc/easyrule.inc:329 etc/inc/easyrule.inc:337
+#: etc/inc/easyrule.inc:341 etc/inc/easyrule.inc:346
+msgid "Invalid protocol for pass rule:"
+msgstr "Protocolo inválido para regra de liberação:"
+
+#: etc/inc/easyrule.inc:309 etc/inc/easyrule.inc:332 etc/inc/easyrule.inc:340
+#: etc/inc/easyrule.inc:344 etc/inc/easyrule.inc:349
+msgid "Tried to pass invalid source IP:"
+msgstr "Tentou passar um IP fonte inválido:"
+
+#: etc/inc/easyrule.inc:312 etc/inc/easyrule.inc:335 etc/inc/easyrule.inc:343
+#: etc/inc/easyrule.inc:347 etc/inc/easyrule.inc:352
+msgid "Tried to pass invalid destination IP:"
+msgstr "Tentou passar um IP de destino inválido:"
+
+#: etc/inc/easyrule.inc:316 etc/inc/easyrule.inc:339 etc/inc/easyrule.inc:347
+#: etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:356
+msgid "Missing destination port:"
+msgstr "Porta de destino faltando:"
+
+#: etc/inc/easyrule.inc:319 etc/inc/easyrule.inc:342 etc/inc/easyrule.inc:350
+#: etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:359
+msgid "Tried to pass invalid destination port:"
+msgstr "Tentou passar uma porta de destino inválida:"
+
+#: etc/inc/easyrule.inc:326 etc/inc/easyrule.inc:349 etc/inc/easyrule.inc:357
+#: etc/inc/easyrule.inc:361 etc/inc/easyrule.inc:366
+msgid "Successfully added pass rule!"
+msgstr "Adicionou regra de liberação com sucesso!"
+
+#: etc/inc/easyrule.inc:328 etc/inc/easyrule.inc:351 etc/inc/easyrule.inc:359
+#: etc/inc/easyrule.inc:363 etc/inc/easyrule.inc:368
+msgid "Failed to add pass rule."
+msgstr "Falhou ao adicionar regra de passe."
+
+#: etc/inc/easyrule.inc:331 etc/inc/easyrule.inc:354 etc/inc/easyrule.inc:362
+#: etc/inc/easyrule.inc:366 etc/inc/easyrule.inc:371
+msgid "Missing parameters for pass rule."
+msgstr "Parâmetros faltando para regra de liberação."
+
+#: etc/inc/easyrule.inc:333 etc/inc/easyrule.inc:356 etc/inc/easyrule.inc:364
+#: etc/inc/easyrule.inc:368 etc/inc/easyrule.inc:373
+msgid "Unknown pass error."
+msgstr "Erro de liberação desconhecido."
+
+#: etc/inc/filter_log.inc:164 etc/inc/filter_log.inc:167
+#: etc/inc/filter_log.inc:191 etc/inc/filter_log.inc:201
+#, php-format
+msgid "There was a error parsing rule: %s. Please report to mailing list or forum."
+msgstr "Houve um erro ao fazer parse de regra: %s. Por favor reporte esse erro em lista de e-mails ou fórum."
+
+#: etc/inc/filter_log.inc:208 etc/inc/filter_log.inc:210
+#: etc/inc/filter_log.inc:213 etc/inc/filter_log.inc:237
+#: etc/inc/filter_log.inc:247
+#, php-format
+msgid "Service %1$s/%2$s: %3$s"
+msgstr "Serviço %1$s/%2$s: %3$s"
+
+#: etc/inc/gwlb.inc:230 etc/inc/gwlb.inc:237 etc/inc/gwlb.inc:242
+#: etc/inc/gwlb.inc:244
+#, php-format
+msgid "Removing static route for monitor %1$s and adding a new route through %2$s"
+msgstr "Removendo regras estáticas para monitor %1$s e adicionando nova rota através %2$s"
+
+#: etc/inc/gwlb.inc:501 etc/inc/gwlb.inc:727 etc/inc/gwlb.inc:750
+#, php-format
+msgid "MONITOR: %s is down, omitting from routing group"
+msgstr "MONITOR: %s não responde, removendo do grupo de roteamento"
+
+#: etc/inc/gwlb.inc:505 etc/inc/gwlb.inc:731 etc/inc/gwlb.inc:754
+#, php-format
+msgid "MONITOR: %s has packet loss, omitting from routing group"
+msgstr "MONITOR: %s tem perda de pacote, removendo de grupo de roteamento"
+
+#: etc/inc/gwlb.inc:509 etc/inc/gwlb.inc:735 etc/inc/gwlb.inc:758
+#, php-format
+msgid "MONITOR: %s has high latency, omitting from routing group"
+msgstr "MONITOR: %s tem alta latência, removendo de grupo de roteamento"
+
+#: etc/inc/gwlb.inc:526 etc/inc/gwlb.inc:752 etc/inc/gwlb.inc:775
+msgid "Gateways status could not be determined, considering all as up/active."
+msgstr "Status de gateways não pôde ser determinado, considerando todos como up/ativo."
+
+#: etc/inc/gwlb.inc:580 etc/inc/gwlb.inc:809 etc/inc/gwlb.inc:835
+#: etc/inc/gwlb.inc:844 etc/inc/gwlb.inc:823 etc/inc/gwlb.inc:807
+#: etc/inc/gwlb.inc:791
+#, php-format
+msgid "Updating gateway group gateway for %1$s - new gateway is %2$s"
+msgstr "Atualizando grupo de gateway para %1$s - novo gateway é %2$s"
+
+#: etc/inc/ipsec.inc:39
+msgid "My IP address"
+msgstr "Meu endereço IP"
+
+#: etc/inc/ipsec.inc:40 etc/inc/ipsec.inc:49
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:114
+#: usr/local/www/diag_logs_vpn.php:178
+#: usr/local/www/status_captiveportal.php:160
+#: usr/local/www/services_captiveportal.php:602
+#: usr/local/www/services_captiveportal.php:623
+#: usr/local/www/services_captiveportal.php:642
+#: usr/local/www/services_captiveportal.php:661
+#: usr/local/www/services_captiveportal_ip.php:117
+#: usr/local/www/services_captiveportal_ip_edit.php:195
+#: usr/local/www/services_dhcp.php:891
+#: usr/local/www/services_dhcp_edit.php:221
+#: usr/local/www/services_dnsmasq_edit.php:80
+#: usr/local/www/services_dnsmasq_edit.php:156
+#: usr/local/www/vpn_pptp_users.php:99
+#: usr/local/www/vpn_pptp_users_edit.php:160 usr/local/www/diag_arp.php:313
+#: usr/local/www/status_dhcp_leases.php:318
+#: usr/local/www/system_advanced_network.php:226
+#: usr/local/www/vpn_ipsec_phase2.php:635 usr/local/www/vpn_l2tp_users.php:102
+#: usr/local/www/vpn_l2tp_users_edit.php:168
+#: usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:211
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/services_captiveportal.php:638
+#: usr/local/www/services_captiveportal.php:659
+#: usr/local/www/services_captiveportal.php:681
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/status_dhcp_leases.php:339
+#: usr/local/www/services_dhcp.php:929 usr/local/www/vpn_ipsec_phase2.php:661
+#: usr/local/www/services_dhcp_edit.php:224
+#: usr/local/www/services_dnsmasq_edit.php:212
+#: usr/local/www/services_captiveportal_ip.php:115
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137
+#: usr/local/www/vpn_l2tp_users.php:103
+#: usr/local/www/services_captiveportal.php:636
+#: usr/local/www/services_captiveportal.php:657
+#: usr/local/www/services_captiveportal.php:679
+#: usr/local/www/services_captiveportal.php:698
+#: usr/local/www/status_dhcp_leases.php:341
+#: usr/local/www/services_captiveportal_ip_edit.php:193
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/vpn_ipsec_phase2.php:757
+#: usr/local/www/vpn_pptp_users_edit.php:161
+#: usr/local/www/services_dhcp_edit.php:223
+#: usr/local/www/vpn_l2tp_users_edit.php:169
+#: usr/local/www/vpn_pptp_users.php:100
+#: usr/local/www/services_captiveportal_ip_edit.php:187
+#: usr/local/www/services_dhcp_edit.php:351
+#: usr/local/www/services_dhcp.php:1152
+#: usr/local/www/status_captiveportal.php:146
+#: usr/local/www/services_captiveportal.php:637
+#: usr/local/www/services_captiveportal.php:658
+#: usr/local/www/services_captiveportal.php:680
+#: usr/local/www/services_captiveportal.php:699
+#: usr/local/www/vpn_ipsec_phase2.php:778 usr/local/www/services_dhcp.php:1172
+#: usr/local/www/services_captiveportal.php:653
+#: usr/local/www/services_captiveportal.php:674
+#: usr/local/www/services_captiveportal.php:696
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/system_advanced_network.php:227
+#: usr/local/www/services_dhcp.php:1184
+#: usr/local/www/status_dhcp_leases.php:342
+msgid "IP address"
+msgstr "Endereço IP"
+
+#: etc/inc/ipsec.inc:41 etc/inc/ipsec.inc:50
+#: usr/local/www/system_camanager.php:476
+#: usr/local/www/system_certmanager.php:589
+#: usr/local/www/system_certmanager.php:672
+#: usr/local/www/system_certmanager.php:705
+#: usr/local/www/system_certmanager.php:838
+#: usr/local/www/system_camanager.php:477
+#: usr/local/www/system_camanager.php:500
+#: usr/local/www/system_certmanager.php:730
+#: usr/local/www/system_certmanager.php:879
+#: usr/local/www/system_certmanager.php:731
+#: usr/local/www/system_certmanager.php:883
+msgid "Distinguished name"
+msgstr "Nome distinto"
+
+#: etc/inc/ipsec.inc:42 etc/inc/ipsec.inc:51
+msgid "User distinguished name"
+msgstr "Nome de usuário distinto"
+
+#: etc/inc/ipsec.inc:43 etc/inc/ipsec.inc:52
+msgid "ASN.1 distinguished Name"
+msgstr "Nome de ASN.1 distinto"
+
+#: etc/inc/ipsec.inc:44 etc/inc/ipsec.inc:53
+msgid "KeyID tag"
+msgstr "Tag KeyID"
+
+#: etc/inc/ipsec.inc:45 usr/local/www/services_dhcp.php:722
+#: usr/local/www/fbegin.inc:128 usr/local/www/services_dhcpv6.php:648
+#: usr/local/www/fbegin.inc:145 usr/local/www/services_dhcp.php:760
+#: usr/local/www/services_dhcpv6.php:741 usr/local/www/fbegin.inc:154
+#: usr/local/www/services_dhcp.php:942 usr/local/www/services_dhcpv6.php:672
+#: usr/local/www/services_dhcp_edit.php:451
+#: usr/local/www/services_dhcp.php:955 usr/local/www/services_dhcpv6.php:689
+#: usr/local/www/fbegin.inc:146 usr/local/www/services_dhcp.php:975
+#: usr/local/www/services_dhcp.php:987
+msgid "Dynamic DNS"
+msgstr "DNS dinâmico"
+
+#: etc/inc/ipsec.inc:48
+msgid "Peer IP address"
+msgstr "Endereço IP do Peer"
+
+#: etc/inc/ipsec.inc:256 usr/local/www/vpn_ipsec.php:206
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase2.php:255 usr/local/www/vpn_ipsec.php:217
+#: usr/local/www/vpn_ipsec_phase2.php:268 etc/inc/ipsec.inc:281
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec.php:222 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase2.php:316 etc/inc/ipsec.inc:289
+msgid "Mobile Client"
+msgstr "Cliente Móvel"
+
+#: etc/inc/ipsec.inc:258 usr/local/www/interfaces_bridge_edit.php:428
+#: usr/local/www/firewall_nat_edit.php:797
+#: usr/local/www/firewall_nat_edit.php:828 usr/local/www/interfaces.php:1032
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1385
+#: usr/local/www/interfaces.php:1491 usr/local/www/interfaces.php:1567
+#: usr/local/www/vpn_ipsec_phase2.php:435
+#: usr/local/www/interfaces_bridge_edit.php:437
+#: usr/local/www/vpn_ipsec_phase2.php:461
+#: usr/local/www/firewall_nat_edit.php:805
+#: usr/local/www/firewall_nat_edit.php:836 usr/local/www/interfaces.php:1118
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1489
+#: usr/local/www/interfaces.php:1597 etc/inc/ipsec.inc:283
+#: usr/local/www/system_advanced_misc.php:386
+#: usr/local/www/interfaces_bridge_edit.php:438
+#: usr/local/www/vpn_ipsec_phase2.php:527
+#: usr/local/www/vpn_ipsec_phase2.php:563
+#: usr/local/www/firewall_nat_edit.php:804
+#: usr/local/www/firewall_nat_edit.php:835 usr/local/www/interfaces.php:1106
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1477
+#: usr/local/www/interfaces.php:1585 usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/diag_system_pftop.php:155
+#: usr/local/www/system_advanced_misc.php:398
+#: usr/local/www/interfaces_bridge_edit.php:439
+#: usr/local/www/vpn_ipsec_phase2.php:584 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1490
+#: usr/local/www/interfaces.php:1595 etc/inc/ipsec.inc:292
+#: usr/local/www/firewall_nat_edit.php:811
+#: usr/local/www/firewall_nat_edit.php:842
+#: usr/local/www/system_advanced_misc.php:445
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1535 usr/local/www/interfaces.php:1641
+#: usr/local/www/firewall_nat_edit.php:812
+#: usr/local/www/firewall_nat_edit.php:843
+#: usr/local/www/interfaces_bridge_edit.php:443
+#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1529 usr/local/www/interfaces.php:1634
+#: usr/local/www/system_advanced_misc.php:451
+#: usr/local/www/interfaces.php:1170 usr/local/www/interfaces.php:1171
+#: usr/local/www/interfaces.php:1542 usr/local/www/interfaces.php:1647
+msgid "None"
+msgstr "Nenhum"
+
+#: etc/inc/meta.inc:68
+#, php-format
+msgid "list_phpfiles: unable to examine path %s\n"
+msgstr "list_phpfiles: impossibilitado de examinar o caminho %s\n"
+
+#: etc/inc/meta.inc:99
+#, php-format
+msgid "unable to read %s\n"
+msgstr "impossibilitado de ler %s\n"
+
+#: etc/inc/meta.inc:132
+#, php-format
+msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s"
+msgstr "erro: tag incompatível ( %1$s != %2$s ) em '%3$s'%4$s"
+
+#: etc/inc/meta.inc:143
+#, php-format
+msgid "warning: tag %1$s has no data in '%2$s'%3$s"
+msgstr "aviso: a tag %1$s não possui dados em '%2$s'%3$s"
+
+#: etc/inc/meta.inc:163
+#, php-format
+msgid "warning: tag %1$s has malformed data in '%2$s'%3$s"
+msgstr "aviso: a tag %1$s tem dados malformados em '%2$s'%3$s"
+
+#: etc/inc/meta.inc:185
+#, php-format
+msgid "warning: tag %1$s has invalid data in '%2$s'%3$s"
+msgstr "aviso: a tag %1$s tem dados inválidos em '%2$s'%3$s"
+
+#: etc/inc/priv.defs.inc:10
+msgid "WebCfg - All pages"
+msgstr "WebCfg - Todas as páginas"
+
+#: etc/inc/priv.defs.inc:11
+msgid "Allow access to all pages"
+msgstr "Permitir acesso a todas as páginas"
+
+#: etc/inc/priv.defs.inc:16
+msgid "WebCfg - Status: CARP page"
+msgstr "WebCfg - Página Status: CARP"
+
+#: etc/inc/priv.defs.inc:17
+msgid "Allow access to the 'Status: CARP' page."
+msgstr "Permitir acesso à página 'Status: CARP'."
+
+#: etc/inc/priv.defs.inc:22
+msgid "WebCfg - Crash reporter"
+msgstr "WebCfg - Relatório de falhas"
+
+#: etc/inc/priv.defs.inc:23
+msgid "Uploads crash reports to pfSense and or deletes crash reports."
+msgstr "Envie os relatórios de falha para o pfSense e/ou exclua-os."
+
+#: etc/inc/priv.defs.inc:28
+msgid "WebCfg - Diagnostics: ARP Table page"
+msgstr "WebCfg - Página Diagnóstico: Tabela ARP"
+
+#: etc/inc/priv.defs.inc:29
+msgid "Allow access to the 'Diagnostics: ARP Table' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Tabela ARP'."
+
+#: etc/inc/priv.defs.inc:34
+msgid "WebCfg - Diagnostics: Authentication page"
+msgstr "WebCfg - Diagnósticos: Página de Autenticação"
+
+#: etc/inc/priv.defs.inc:35
+msgid "Allow access to the 'Diagnostics: Authentication' page."
+msgstr "Permite acesso à 'Diagnóstico: Página de Autenticação'."
+
+#: etc/inc/priv.defs.inc:40
+msgid "WebCfg - Diagnostics: Backup/restore page"
+msgstr "WebCfg - Página Diagnóstico: Backup/Restaurar"
+
+#: etc/inc/priv.defs.inc:41
+msgid "Allow access to the 'Diagnostics: Backup/restore' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Backup/Restaurar'."
+
+#: etc/inc/priv.defs.inc:46
+msgid "WebCfg - Diagnostics: Configuration History page"
+msgstr "WebCfg - Página Diagnóstico: Histórico de Configuração"
+
+#: etc/inc/priv.defs.inc:47
+msgid "Allow access to the 'Diagnostics: Configuration History' page."
+msgstr "Permitir acesso à página 'Diagnósticos: Histórico de Configuração'."
+
+#: etc/inc/priv.defs.inc:52
+msgid "WebCfg - Diagnostics: Factory defaults page"
+msgstr "WebCfg - Página Diagnóstico: Padrões de fábrica"
+
+#: etc/inc/priv.defs.inc:53
+msgid "Allow access to the 'Diagnostics: Factory defaults' page."
+msgstr "Permitir acesso á  página 'Diagnóstico: Padrões de fábrica'."
+
+#: etc/inc/priv.defs.inc:58
+msgid "WebCfg - Diagnostics: Show States page"
+msgstr "WebCfg - Página Diagnóstico: Exibir Estados"
+
+#: etc/inc/priv.defs.inc:59
+msgid "Allow access to the 'Diagnostics: Show States' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Exibir Estados'."
+
+#: etc/inc/priv.defs.inc:64 etc/inc/priv.defs.inc:70
+msgid "WebCfg - Status: IPsec page"
+msgstr "WebCfg - Página Status: IPsec"
+
+#: etc/inc/priv.defs.inc:65 etc/inc/priv.defs.inc:71
+msgid "Allow access to the 'Status: IPsec' page."
+msgstr "Permitir acesso à  página 'Status: IPsec'."
+
+#: etc/inc/priv.defs.inc:70 etc/inc/priv.defs.inc:76
+msgid "WebCfg - Status: IPsec: SAD page"
+msgstr "WebCfg - Página Status: Ipsec: SAD"
+
+#: etc/inc/priv.defs.inc:71 etc/inc/priv.defs.inc:77
+msgid "Allow access to the 'Status: IPsec: SAD' page."
+msgstr "Permitir acesso à  página 'Status: Ipsec: SAD'."
+
+#: etc/inc/priv.defs.inc:76 etc/inc/priv.defs.inc:82
+msgid "WebCfg - Status: IPsec: SPD page"
+msgstr "WebCfg - Página Status: Ipsec: SPD"
+
+#: etc/inc/priv.defs.inc:77 etc/inc/priv.defs.inc:83
+msgid "Allow access to the 'Status: IPsec: SPD' page."
+msgstr "Permitir acesso à  página 'Status: Ipsec: SPD'."
+
+#: etc/inc/priv.defs.inc:82 etc/inc/priv.defs.inc:88
+msgid "WebCfg - Diag IPsec XML page"
+msgstr "WebCfg - Página de Diagnóstico IPsec XML"
+
+#: etc/inc/priv.defs.inc:83 etc/inc/priv.defs.inc:89
+msgid "Allow access to the 'Diag IPsec XML' page."
+msgstr "Permitir acesso à página 'Diag IPsec XML'."
+
+#: etc/inc/priv.defs.inc:88 etc/inc/priv.defs.inc:184
+#: etc/inc/priv.defs.inc:220 etc/inc/priv.defs.inc:226
+#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:238
+#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:94
+#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:250
+msgid "WebCfg - Diagnostics: System Activity"
+msgstr "WebCfg - Página Diagnóstico: Atividade do Sistema"
+
+#: etc/inc/priv.defs.inc:89 etc/inc/priv.defs.inc:185
+#: etc/inc/priv.defs.inc:221 etc/inc/priv.defs.inc:227
+#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:239
+#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:95
+#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:251
+msgid "Allows access to the 'Diagnostics: System Activity' page"
+msgstr "Permitir acesso à página 'Diagnósticos: Atividade do Sistema'"
+
+#: etc/inc/priv.defs.inc:94 etc/inc/priv.defs.inc:100
+msgid "WebCfg - Diagnostics: Logs: System page"
+msgstr "WebCfg - Página Diagnóstico: Logs: Sistema"
+
+#: etc/inc/priv.defs.inc:95 etc/inc/priv.defs.inc:101
+msgid "Allow access to the 'Diagnostics: Logs: System' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema'."
+
+#: etc/inc/priv.defs.inc:100 etc/inc/priv.defs.inc:106
+msgid "WebCfg - Status: System logs: Portal Auth page"
+msgstr "WebCfg - Página Status: Logs de distema: Portal de Autenticação"
+
+#: etc/inc/priv.defs.inc:101 etc/inc/priv.defs.inc:107
+msgid "Allow access to the 'Status: System logs: Portal Auth' page."
+msgstr "Permitir acesso à  página 'Status: Logs de distema: Portal de Autenticação'."
+
+#: etc/inc/priv.defs.inc:106 etc/inc/priv.defs.inc:112
+msgid "WebCfg - Diagnostics: Logs: DHCP page"
+msgstr "WebCfg - Página Diagnóstico: Logs: DHCP"
+
+#: etc/inc/priv.defs.inc:107 etc/inc/priv.defs.inc:113
+msgid "Allow access to the 'Diagnostics: Logs: DHCP' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: DHCP'."
+
+#: etc/inc/priv.defs.inc:112 etc/inc/priv.defs.inc:118
+msgid "WebCfg - Diagnostics: Logs: Firewall page"
+msgstr "WebCfg - Página Diagnóstico: Logs: Firewall"
+
+#: etc/inc/priv.defs.inc:113 etc/inc/priv.defs.inc:119
+msgid "Allow access to the 'Diagnostics: Logs: Firewall' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Firewall'."
+
+#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:136
+#: etc/inc/priv.defs.inc:142
+msgid "WebCfg - Hidden: No longer included page"
+msgstr "WebCfg - Página Omitidas: Página não mais inclusa"
+
+#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:137
+#: etc/inc/priv.defs.inc:143
+msgid "Allow access to the 'Hidden: No longer included' page."
+msgstr "Permitir acesso à  página 'Omitidas: Página não mais inclusa'."
+
+#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:142
+#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:148
+#: etc/inc/priv.defs.inc:166
+msgid "WebCfg - Status: System logs: IPsec VPN page"
+msgstr "WebCfg - Página Status: Logs do Sistema: IPsec"
+
+#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:143
+#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:149
+#: etc/inc/priv.defs.inc:167
+msgid "Allow access to the 'Status: System logs: IPsec VPN' page."
+msgstr "WebCfg - Página 'Status: Logs do Sistema: IPsec'."
+
+#: etc/inc/priv.defs.inc:130
+msgid "WebCfg - Status: System logs: OpenNTPD page"
+msgstr "WebCfg - Página Status: Logs do Sistema: OpenNTPD"
+
+#: etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Status: System logs: OpenNTPD' page."
+msgstr "Permitir acesso à  página 'Status: Logs do Sistema: OpenNTPD'."
+
+#: etc/inc/priv.defs.inc:136 etc/inc/priv.defs.inc:154
+#: etc/inc/priv.defs.inc:160
+msgid "WebCfg - Status: System logs: OpenVPN page"
+msgstr "WebCfg - Página Status: Logs do Sistema: OpenVPN"
+
+#: etc/inc/priv.defs.inc:137 etc/inc/priv.defs.inc:155
+#: etc/inc/priv.defs.inc:161
+msgid "Allow access to the 'Status: System logs: OpenVPN' page."
+msgstr "Permitir acesso à  página 'Status: Logs do Sistema: OpenVPN'."
+
+#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:166
+#: etc/inc/priv.defs.inc:172
+msgid "WebCfg - Status: System logs: Load Balancer page"
+msgstr "WebCfg - Página Status: Logs do Sistema: Balanceador de Carga"
+
+#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:167
+#: etc/inc/priv.defs.inc:173
+msgid "Allow access to the 'Status: System logs: Load Balancer' page."
+msgstr "Permitir acesso à  página 'Status: Logs do Sistema: Balanceador de Carga'."
+
+#: etc/inc/priv.defs.inc:154 etc/inc/priv.defs.inc:172
+#: etc/inc/priv.defs.inc:178
+msgid "WebCfg - Diagnostics: Logs: Settings page"
+msgstr "WebCfg - Página Status: Logs do Sistema: Configurações"
+
+#: etc/inc/priv.defs.inc:155 etc/inc/priv.defs.inc:173
+#: etc/inc/priv.defs.inc:179
+msgid "Allow access to the 'Diagnostics: Logs: Settings' page."
+msgstr "Permitir acesso à  página 'Status: Logs do Sistema: Configurações'."
+
+#: etc/inc/priv.defs.inc:160 etc/inc/priv.defs.inc:178
+#: etc/inc/priv.defs.inc:184
+msgid "WebCfg - Diagnostics: Logs: VPN page"
+msgstr "WebCfg - Página Diagnóstico: Logs: VPN"
+
+#: etc/inc/priv.defs.inc:161 etc/inc/priv.defs.inc:179
+#: etc/inc/priv.defs.inc:185
+msgid "Allow access to the 'Diagnostics: Logs: VPN' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: VPN'."
+
+#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184
+#: etc/inc/priv.defs.inc:190
+msgid "WebCfg - Diagnostics: NanoBSD"
+msgstr "WebCfg - Página Diagnóstico: NanoBSD"
+
+#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185
+#: etc/inc/priv.defs.inc:191
+msgid "Allow access to the 'Diagnostics: NanoBSD' page."
+msgstr "Permitir acesso à página 'Diagnóstico: NanoBSD'."
+
+#: etc/inc/priv.defs.inc:172 etc/inc/priv.defs.inc:190
+#: etc/inc/priv.defs.inc:196
+msgid "WebCfg - Diagnostics: Packet Capture page"
+msgstr "WebCfg - Página Diagnóstico: Captura de Pacotes"
+
+#: etc/inc/priv.defs.inc:173 etc/inc/priv.defs.inc:191
+#: etc/inc/priv.defs.inc:197
+msgid "Allow access to the 'Diagnostics: Packet Capture' page."
+msgstr "Permitir acesso à  'Página Diagnóstico: Captura de Pacotes'."
+
+#: etc/inc/priv.defs.inc:178 etc/inc/priv.defs.inc:196
+#: etc/inc/priv.defs.inc:202
+msgid "WebCfg - Diagnostics: Patterns page"
+msgstr "WebCfg - Página Diagnóstico: Modelos"
+
+#: etc/inc/priv.defs.inc:179 etc/inc/priv.defs.inc:197
+#: etc/inc/priv.defs.inc:203
+msgid "Allow access to the 'Diagnostics: Patterns' page."
+msgstr "Permitir acesso à 'Página Diagnóstico: Modelos'."
+
+#: etc/inc/priv.defs.inc:190 etc/inc/priv.defs.inc:208
+#: etc/inc/priv.defs.inc:214
+msgid "WebCfg - Diagnostics: Ping page"
+msgstr "WebCfg - Página Diagnóstico: Ping"
+
+#: etc/inc/priv.defs.inc:191 etc/inc/priv.defs.inc:209
+#: etc/inc/priv.defs.inc:215
+msgid "Allow access to the 'Diagnostics: Ping' page."
+msgstr "Permitir acesso à 'Página Diagnóstico: Ping'."
+
+#: etc/inc/priv.defs.inc:196 etc/inc/priv.defs.inc:214
+#: etc/inc/priv.defs.inc:220
+msgid "WebCfg - Status: Package logs page"
+msgstr "WebCfg - Página Status: Logs de Pacotes"
+
+#: etc/inc/priv.defs.inc:197 etc/inc/priv.defs.inc:215
+#: etc/inc/priv.defs.inc:221
+msgid "Allow access to the 'Status: Package logs' page."
+msgstr "Permitir acesso à página 'Status: Logs de Pacotes'."
+
+#: etc/inc/priv.defs.inc:202 etc/inc/priv.defs.inc:220
+#: etc/inc/priv.defs.inc:226
+msgid "WebCfg - Diagnostics: Reset state page"
+msgstr "WebCfg - Página Diagnóstico: Estado Inicial"
+
+#: etc/inc/priv.defs.inc:203 etc/inc/priv.defs.inc:221
+#: etc/inc/priv.defs.inc:227
+msgid "Allow access to the 'Diagnostics: Reset state' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Estado Inicial'."
+
+#: etc/inc/priv.defs.inc:208 etc/inc/priv.defs.inc:226
+#: etc/inc/priv.defs.inc:232
+msgid "WebCfg - Diagnostics: Routing tables page"
+msgstr "WebCfg - Página Diagnóstico: Tabelas de roteamento"
+
+#: etc/inc/priv.defs.inc:209 etc/inc/priv.defs.inc:227
+#: etc/inc/priv.defs.inc:233
+msgid "Allow access to the 'Diagnostics: Routing tables' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Tabelas de roteamento'."
+
+#: etc/inc/priv.defs.inc:214 etc/inc/priv.defs.inc:232
+#: etc/inc/priv.defs.inc:238
+msgid "WebCfg - Diagnostics: States Summary page"
+msgstr "WebCfg - Diagnósticos: Página de Resumo de Estados"
+
+#: etc/inc/priv.defs.inc:215 etc/inc/priv.defs.inc:233
+#: etc/inc/priv.defs.inc:239
+msgid "Allow access to the 'Diagnostics: States Summary' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Resumo de Estados'."
+
+#: etc/inc/priv.defs.inc:232 etc/inc/priv.defs.inc:250
+#: etc/inc/priv.defs.inc:256
+msgid "WebCfg - Diagnostics: PF Table IP addresses"
+msgstr "WebCfg - Diagnósticos: Tabela PF de Endereços IP"
+
+#: etc/inc/priv.defs.inc:233 etc/inc/priv.defs.inc:251
+#: etc/inc/priv.defs.inc:257
+msgid "Allow access to the 'Diagnostics: Tables' page."
+msgstr "Permitir acesso à  página 'Diagnósticos: Tabelas'."
+
+#: etc/inc/priv.defs.inc:238 etc/inc/priv.defs.inc:256
+#: etc/inc/priv.defs.inc:262
+msgid "WebCfg - Diagnostics: Traceroute page"
+msgstr "WebCfg - Página Diagnóstico: Traceroute"
+
+#: etc/inc/priv.defs.inc:239 etc/inc/priv.defs.inc:257
+#: etc/inc/priv.defs.inc:263
+msgid "Allow access to the 'Diagnostics: Traceroute' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Traceroute'."
+
+#: etc/inc/priv.defs.inc:244 etc/inc/priv.defs.inc:262
+#: etc/inc/priv.defs.inc:268
+msgid "WebCfg - Diagnostics: Edit FIle"
+msgstr "WebCfg - Diagnósticos: Editar arquivo"
+
+#: etc/inc/priv.defs.inc:245 etc/inc/priv.defs.inc:263
+#: etc/inc/priv.defs.inc:269
+msgid "Allow access to the 'Diagnostics: Edit File' page."
+msgstr "Permitir acesso à página 'Diagnósticos: Editar arquivo'."
+
+#: etc/inc/priv.defs.inc:250 etc/inc/priv.defs.inc:268
+#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:276
+msgid "WebCfg - Diagnostics: Command page"
+msgstr "WebCfg - Página Diagnóstico: Comando"
+
+#: etc/inc/priv.defs.inc:251 etc/inc/priv.defs.inc:269
+#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:277
+msgid "Allow access to the 'Diagnostics: Command' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Comando'."
+
+#: etc/inc/priv.defs.inc:256 etc/inc/priv.defs.inc:274
+#: etc/inc/priv.defs.inc:280
+msgid "WebCfg - Hidden: Exec Raw page"
+msgstr "WebCfg - Página Escondida: Exec Raw"
+
+#: etc/inc/priv.defs.inc:257 etc/inc/priv.defs.inc:275
+#: etc/inc/priv.defs.inc:281
+msgid "Allow access to the 'Hidden: Exec Raw' page."
+msgstr "Permitir acesso à página 'Escondida: Exec Raw'."
+
+#: etc/inc/priv.defs.inc:262 etc/inc/priv.defs.inc:280
+#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:282
+msgid "WebCfg - Firewall: Aliases page"
+msgstr "WebCfg - Página Firewall: Aliases"
+
+#: etc/inc/priv.defs.inc:263 etc/inc/priv.defs.inc:281
+#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:283
+msgid "Allow access to the 'Firewall: Aliases' page."
+msgstr "Permitir acesso à página 'Firewall: Aliases'."
+
+#: etc/inc/priv.defs.inc:268 etc/inc/priv.defs.inc:286
+#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:288
+msgid "WebCfg - Firewall: Alias: Edit page"
+msgstr "WebCfg - Página Firewall: Alias: Editar"
+
+#: etc/inc/priv.defs.inc:269 etc/inc/priv.defs.inc:287
+#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:289
+msgid "Allow access to the 'Firewall: Alias: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: Alias: Editar'."
+
+#: etc/inc/priv.defs.inc:274 etc/inc/priv.defs.inc:292
+#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:294
+msgid "WebCfg - Firewall: Alias: Import page"
+msgstr "WebCfg - Página Firewall: Alias: Importação"
+
+#: etc/inc/priv.defs.inc:275 etc/inc/priv.defs.inc:293
+#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:295
+msgid "Allow access to the 'Firewall: Alias: Import' page."
+msgstr "Permitir acesso à página 'Firewall: Alias: Importação'."
+
+#: etc/inc/priv.defs.inc:280 etc/inc/priv.defs.inc:298
+#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:300
+msgid "WebCfg - Firewall: NAT: Port Forward page"
+msgstr "WebCfg - Página Firewall: NAT: Encaminhamento de Porta"
+
+#: etc/inc/priv.defs.inc:281 etc/inc/priv.defs.inc:299
+#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:301
+msgid "Allow access to the 'Firewall: NAT: Port Forward' page."
+msgstr "Permitir acesso à  página 'Firewall: NAT: Encaminhamento de Porta'."
+
+#: etc/inc/priv.defs.inc:286 etc/inc/priv.defs.inc:304
+#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:306
+msgid "WebCfg - Firewall: NAT: 1:1 page"
+msgstr "WebCfg - Página Firewall: NAT: 1:1"
+
+#: etc/inc/priv.defs.inc:287 etc/inc/priv.defs.inc:305
+#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:307
+msgid "Allow access to the 'Firewall: NAT: 1:1' page."
+msgstr "Permitir acesso à página 'Firewall: NAT: 1:1'."
+
+#: etc/inc/priv.defs.inc:292 etc/inc/priv.defs.inc:310
+#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:312
+msgid "WebCfg - Firewall: NAT: 1:1: Edit page"
+msgstr "WebCfg - Página Firewall: NAT: 1:1: Editar"
+
+#: etc/inc/priv.defs.inc:293 etc/inc/priv.defs.inc:311
+#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:313
+msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: NAT: 1:1: Editar'."
+
+#: etc/inc/priv.defs.inc:298 etc/inc/priv.defs.inc:316
+#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:318
+msgid "WebCfg - Firewall: NAT: Port Forward: Edit page"
+msgstr "WebCfg - Página Firewall: NAT: Encaminhamento de Porta"
+
+#: etc/inc/priv.defs.inc:299 etc/inc/priv.defs.inc:317
+#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:319
+msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: NAT: Encaminhamento de Porta'."
+
+#: etc/inc/priv.defs.inc:304 etc/inc/priv.defs.inc:322
+#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:324
+msgid "WebCfg - Firewall: NAT: Outbound page"
+msgstr "WebCfg - Página Firewall: NAT: Outbound"
+
+#: etc/inc/priv.defs.inc:305 etc/inc/priv.defs.inc:323
+#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:325
+msgid "Allow access to the 'Firewall: NAT: Outbound' page."
+msgstr "Permitir acesso à página 'Firewall: NAT: Outbound'."
+
+#: etc/inc/priv.defs.inc:310 etc/inc/priv.defs.inc:328
+#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:330
+msgid "WebCfg - Firewall: NAT: Outbound: Edit page"
+msgstr "WebCfg - Página Firewall: NAT: Outbound: Editar"
+
+#: etc/inc/priv.defs.inc:311 etc/inc/priv.defs.inc:329
+#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:331
+msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: NAT: Outbound: Editar'."
+
+#: etc/inc/priv.defs.inc:316 etc/inc/priv.defs.inc:334
+#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:336
+msgid "WebCfg - Firewall: Rules page"
+msgstr "WebCfg - Página Firewall: Regras"
+
+#: etc/inc/priv.defs.inc:317 etc/inc/priv.defs.inc:335
+#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:337
+msgid "Allow access to the 'Firewall: Rules' page."
+msgstr "Permitir acesso à página 'Firewall: Regras'."
+
+#: etc/inc/priv.defs.inc:322 etc/inc/priv.defs.inc:340
+#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:342
+msgid "WebCfg - Firewall: Rules: Edit page"
+msgstr "WebCfg - Página Firewall: Regras: Editar"
+
+#: etc/inc/priv.defs.inc:323 etc/inc/priv.defs.inc:341
+#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:343
+msgid "Allow access to the 'Firewall: Rules: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: Regras: Editar'."
+
+#: etc/inc/priv.defs.inc:328 etc/inc/priv.defs.inc:346
+#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:348
+msgid "WebCfg - Firewall: Schedules page"
+msgstr "WebCfg - Página Firewall: Agendas"
+
+#: etc/inc/priv.defs.inc:329 etc/inc/priv.defs.inc:347
+#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:349
+msgid "Allow access to the 'Firewall: Schedules' page."
+msgstr "Permitir acesso à página 'Firewall: Agendas'."
+
+#: etc/inc/priv.defs.inc:334 etc/inc/priv.defs.inc:352
+#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:354
+msgid "WebCfg - Firewall: Schedules: Edit page"
+msgstr "WebCfg - Página Firewall: Agendas: Editar"
+
+#: etc/inc/priv.defs.inc:335 etc/inc/priv.defs.inc:353
+#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:355
+msgid "Allow access to the 'Firewall: Schedules: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: Agendas: Editar'."
+
+#: etc/inc/priv.defs.inc:340 etc/inc/priv.defs.inc:358
+#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:360
+msgid "WebCfg - Firewall: Traffic Shaper page"
+msgstr "WebCfg - Página Firewall: Traffic Shaper"
+
+#: etc/inc/priv.defs.inc:341 etc/inc/priv.defs.inc:359
+#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:361
+msgid "Allow access to the 'Firewall: Traffic Shaper' page."
+msgstr "Permitir acesso à página 'Firewall: Traffic Shaper'."
+
+#: etc/inc/priv.defs.inc:346 etc/inc/priv.defs.inc:364
+#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:366
+msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page"
+msgstr "WebCfg - Página Firewall: Traffic Shaper: Layer7"
+
+#: etc/inc/priv.defs.inc:347 etc/inc/priv.defs.inc:365
+#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:367
+msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page."
+msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Layer7'."
+
+#: etc/inc/priv.defs.inc:352 etc/inc/priv.defs.inc:370
+#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:372
+msgid "WebCfg - Firewall: Traffic Shaper: Queues page"
+msgstr "WebCfg - Página Firewall: Traffic Shaper: Filas"
+
+#: etc/inc/priv.defs.inc:353 etc/inc/priv.defs.inc:371
+#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:373
+msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page."
+msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Filas'."
+
+#: etc/inc/priv.defs.inc:358 etc/inc/priv.defs.inc:376
+#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:378
+msgid "WebCfg - Firewall: Traffic Shaper: Limiter page"
+msgstr "WebCfg - Página Firewall: Traffic Shaper: Limitador"
+
+#: etc/inc/priv.defs.inc:359 etc/inc/priv.defs.inc:377
+#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:379
+msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page."
+msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Limitador'."
+
+#: etc/inc/priv.defs.inc:364 etc/inc/priv.defs.inc:382
+#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:384
+msgid "WebCfg - Firewall: Traffic Shaper: Wizard page"
+msgstr "WebCfg - Página Firewall: Traffic Shaper: Wizard"
+
+#: etc/inc/priv.defs.inc:365 etc/inc/priv.defs.inc:383
+#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:385
+msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page."
+msgstr "Permitir acesso à página 'Firewall: Traffic Shaper: Wizard'."
+
+#: etc/inc/priv.defs.inc:370 etc/inc/priv.defs.inc:388
+#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:390
+msgid "WebCfg - Firewall: Virtual IP Addresses page"
+msgstr "WebCfg - Página Firewall: Endereços IP Virtuais"
+
+#: etc/inc/priv.defs.inc:371 etc/inc/priv.defs.inc:389
+#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:391
+msgid "Allow access to the 'Firewall: Virtual IP Addresses' page."
+msgstr "Permitir acesso à Página 'Firewall: Endereços IP Virtuais'."
+
+#: etc/inc/priv.defs.inc:376 etc/inc/priv.defs.inc:394
+#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:396
+msgid "WebCfg - Firewall: Virtual IP Address: Edit page"
+msgstr "WebCfg - Página Firewall: Endereços IP Virtuais: Editar"
+
+#: etc/inc/priv.defs.inc:377 etc/inc/priv.defs.inc:395
+#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:397
+msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page."
+msgstr "Permitir acesso à página 'Firewall: Endereços IP Virtuais: Editar'."
+
+#: etc/inc/priv.defs.inc:382 etc/inc/priv.defs.inc:400
+#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:402
+msgid "WebCfg - AJAX: Get Service Providers"
+msgstr "WebCfg - AJAX: Obter Provedores de Serviço"
+
+#: etc/inc/priv.defs.inc:383 etc/inc/priv.defs.inc:401
+#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:403
+msgid "Allow access to the 'AJAX: Service Providers' page."
+msgstr "Permitir acesso à página 'AJAX: Provedores de Serviço'."
+
+#: etc/inc/priv.defs.inc:388 etc/inc/priv.defs.inc:406
+#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:408
+msgid "WebCfg - AJAX: Get Stats"
+msgstr "WebCfg - Página AJAX: Obter Status"
+
+#: etc/inc/priv.defs.inc:389 etc/inc/priv.defs.inc:407
+#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:409
+msgid "Allow access to the 'AJAX: Get Stats' page."
+msgstr "Permitir acesso à página 'AJAX: Obter Status'."
+
+#: etc/inc/priv.defs.inc:394 etc/inc/priv.defs.inc:412
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:414
+msgid "WebCfg - Diagnostics: Interface Traffic page"
+msgstr "WebCfg - Página Diagnóstico: Tráfego de Interface"
+
+#: etc/inc/priv.defs.inc:395 etc/inc/priv.defs.inc:413
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:415
+msgid "Allow access to the 'Diagnostics: Interface Traffic' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Tráfego de Interface'."
+
+#: etc/inc/priv.defs.inc:400 etc/inc/priv.defs.inc:814
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:832
+#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:838
+#: etc/inc/priv.defs.inc:420 etc/inc/priv.defs.inc:846
+msgid "WebCfg - Diagnostics: CPU Utilization page"
+msgstr "WebCfg - Página Diagnóstico: Utilização de CPU"
+
+#: etc/inc/priv.defs.inc:401 etc/inc/priv.defs.inc:815
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:833
+#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:839
+#: etc/inc/priv.defs.inc:421 etc/inc/priv.defs.inc:847
+msgid "Allow access to the 'Diagnostics: CPU Utilization' page."
+msgstr "Permitir acesso à Página 'Diagnóstico: Utilização de CPU'."
+
+#: etc/inc/priv.defs.inc:406 etc/inc/priv.defs.inc:424
+#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:426
+msgid "WebCfg - Diagnostics: Halt system page"
+msgstr "WebCfg - Página Diagnóstico: Desligar sistema"
+
+#: etc/inc/priv.defs.inc:407 etc/inc/priv.defs.inc:425
+#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:427
+msgid "Allow access to the 'Diagnostics: Halt system' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Desligar sistema'."
+
+#: etc/inc/priv.defs.inc:412 etc/inc/priv.defs.inc:430
+#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:432
+msgid "WebCfg - Required for javascript page"
+msgstr "WebCfg - Página Requerido por javascript"
+
+#: etc/inc/priv.defs.inc:413 etc/inc/priv.defs.inc:431
+#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:433
+msgid "Allow access to the 'Required for javascript' page."
+msgstr "Permitir acesso à página 'Requerido por javascript'."
+
+#: etc/inc/priv.defs.inc:418 etc/inc/priv.defs.inc:436
+#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:438
+msgid "WebCfg - XMLRPC Interface Stats page"
+msgstr "WebCfg - Página Estatísticas de Interface XMLRPC"
+
+#: etc/inc/priv.defs.inc:419 etc/inc/priv.defs.inc:437
+#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:439
+msgid "Allow access to the 'XMLRPC Interface Stats' page."
+msgstr "Permitir acesso à página 'Estatísticas de Interface XMLRPC'."
+
+#: etc/inc/priv.defs.inc:424 etc/inc/priv.defs.inc:442
+#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:444
+msgid "WebCfg - System: Login / Logout page / Dashboard"
+msgstr "WebCfg - Sistema: Login / Página de Logout / Dashboard"
+
+#: etc/inc/priv.defs.inc:425 etc/inc/priv.defs.inc:443
+#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:445
+msgid "Allow access to the 'System: Login / Logout' page and Dashboard."
+msgstr "Permitir acesso à página 'Sistema: Login / Logout' e Dashboard."
+
+#: etc/inc/priv.defs.inc:430 etc/inc/priv.defs.inc:448
+#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:450
+msgid "WebCfg - Interfaces: WAN page"
+msgstr "WebCfg - Página Interfaces: WAN"
+
+#: etc/inc/priv.defs.inc:431 etc/inc/priv.defs.inc:449
+#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:451
+msgid "Allow access to the 'Interfaces' page."
+msgstr "Permitir acesso à página 'Interfaces'."
+
+#: etc/inc/priv.defs.inc:436 etc/inc/priv.defs.inc:454
+#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:456
+msgid "WebCfg - Interfaces: Assign network ports page"
+msgstr "WebCfg - Página Interfaces: Atribuir portas de rede"
+
+#: etc/inc/priv.defs.inc:437 etc/inc/priv.defs.inc:455
+#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:457
+msgid "Allow access to the 'Interfaces: Assign network ports' page."
+msgstr "Permitir acesso à página 'Interfaces: Atribuir portas de rede'."
+
+#: etc/inc/priv.defs.inc:442 etc/inc/priv.defs.inc:460
+#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:462
+msgid "WebCfg - Interfaces: Bridge page"
+msgstr "WebCfg - Página Interfaces: Ponte"
+
+#: etc/inc/priv.defs.inc:443 etc/inc/priv.defs.inc:461
+#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:463
+msgid "Allow access to the 'Interfaces: Bridge' page."
+msgstr "Permitir acesso à página 'Interfaces: Ponte'."
+
+#: etc/inc/priv.defs.inc:448 etc/inc/priv.defs.inc:466
+#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:468
+msgid "WebCfg - Interfaces: Bridge edit page"
+msgstr "WebCfg - Página Interfaces: Editar Ponte"
+
+#: etc/inc/priv.defs.inc:449 etc/inc/priv.defs.inc:467
+#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:469
+msgid "Allow access to the 'Interfaces: Bridge : Edit' page."
+msgstr "Permitir acesso à página 'Interfaces: Editar Ponte'."
+
+#: etc/inc/priv.defs.inc:454 etc/inc/priv.defs.inc:472
+#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:474
+msgid "WebCfg - Interfaces: GIF page"
+msgstr "WebCfg - Página Interfaces: GIF"
+
+#: etc/inc/priv.defs.inc:455 etc/inc/priv.defs.inc:473
+#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:475
+msgid "Allow access to the 'Interfaces: GIF' page."
+msgstr "Permitir acesso à página 'Interfaces: GIF'."
+
+#: etc/inc/priv.defs.inc:460 etc/inc/priv.defs.inc:478
+#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:480
+msgid "WebCfg - Interfaces: GIF: Edit page"
+msgstr "WebCfg - Página Interfaces: GIF: Editar"
+
+#: etc/inc/priv.defs.inc:461 etc/inc/priv.defs.inc:479
+#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:481
+msgid "Allow access to the 'Interfaces: GIF: Edit' page."
+msgstr "Permitir acesso à página 'Interfaces: GIF: Editar'."
+
+#: etc/inc/priv.defs.inc:466 etc/inc/priv.defs.inc:484
+#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:486
+msgid "WebCfg - Interfaces: GRE page"
+msgstr "WebCfg - Página Interfaces: GRE"
+
+#: etc/inc/priv.defs.inc:467 etc/inc/priv.defs.inc:485
+#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:487
+msgid "Allow access to the 'Interfaces: GRE' page."
+msgstr "Permitir acesso à página 'Interfaces: GRE'."
+
+#: etc/inc/priv.defs.inc:472 etc/inc/priv.defs.inc:490
+#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:492
+msgid "WebCfg - Interfaces: GRE: Edit page"
+msgstr "WebCfg - Página Interfaces: GRE: Editar"
+
+#: etc/inc/priv.defs.inc:473 etc/inc/priv.defs.inc:491
+#: etc/inc/priv.defs.inc:497 etc/inc/priv.defs.inc:493
+msgid "Allow access to the 'Interfaces: GRE: Edit' page."
+msgstr "Permitir acesso à página 'Interfaces: GRE: Editar'."
+
+#: etc/inc/priv.defs.inc:478 etc/inc/priv.defs.inc:496
+#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:498
+msgid "WebCfg - Interfaces: Groups page"
+msgstr "WebCfg - Página Interfaces: Grupos"
+
+#: etc/inc/priv.defs.inc:479 etc/inc/priv.defs.inc:497
+#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:499
+msgid "Create interface groups"
+msgstr "Criar grupos de interface"
+
+#: etc/inc/priv.defs.inc:484 etc/inc/priv.defs.inc:502
+#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:504
+msgid "WebCfg - Interfaces: Groups: Edit page"
+msgstr "WebCfg - Página Interfaces: Grupos: Editar"
+
+#: etc/inc/priv.defs.inc:485 etc/inc/priv.defs.inc:503
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:505
+msgid "Edit Interface groups"
+msgstr "Editar grupos de Interface"
+
+#: etc/inc/priv.defs.inc:490 etc/inc/priv.defs.inc:508
+#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:510
+msgid "WebCfg - Interfaces: LAGG: page"
+msgstr "WebCfg - Página Interfaces: LAGG"
+
+#: etc/inc/priv.defs.inc:491 etc/inc/priv.defs.inc:497
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:515
+#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:511
+#: etc/inc/priv.defs.inc:517
+msgid "Edit Interface LAGG"
+msgstr "Editar LAGG da Interface"
+
+#: etc/inc/priv.defs.inc:496 etc/inc/priv.defs.inc:514
+#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:516
+msgid "WebCfg - Interfaces: LAGG: Edit page"
+msgstr "WebCfg - Página Interfaces: LAGG: Editar"
+
+#: etc/inc/priv.defs.inc:502 etc/inc/priv.defs.inc:520
+#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:522
+msgid "WebCfg - Interfaces: ppps page"
+msgstr "WebCfg - Interfaces: Página PPPs"
+
+#: etc/inc/priv.defs.inc:503 etc/inc/priv.defs.inc:521
+#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:523
+msgid "Allow access to the 'Interfaces: ppps' page."
+msgstr "Permitir acesso à página 'Interfaces: PPPs'."
+
+#: etc/inc/priv.defs.inc:508 etc/inc/priv.defs.inc:526
+#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:528
+msgid "WebCfg - Interfaces: PPPs: Edit page"
+msgstr "WebCfg - Interfaces: PPPs: Editar página"
+
+#: etc/inc/priv.defs.inc:509 etc/inc/priv.defs.inc:527
+#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:529
+msgid "Allow access to the 'Interfaces: PPPs: Edit' page."
+msgstr "Permitir acesso à página 'Interfaces: PPPs: Editar página'."
+
+#: etc/inc/priv.defs.inc:514 etc/inc/priv.defs.inc:532
+#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:534
+msgid "WebCfg - Interfaces: QinQ page"
+msgstr "WebCfg - Página Interfaces: QinQ"
+
+#: etc/inc/priv.defs.inc:515 etc/inc/priv.defs.inc:533
+#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:535
+msgid "Allow access to the 'Interfaces: QinQ' page."
+msgstr "Permitir acesso à página 'Interfaces: QinQ'."
+
+#: etc/inc/priv.defs.inc:520 etc/inc/priv.defs.inc:538
+#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:540
+msgid "WebCfg - Interfaces: QinQ: Edit page"
+msgstr "WebCfg - Página Interfaces: QinQ: Editar"
+
+#: etc/inc/priv.defs.inc:521 etc/inc/priv.defs.inc:539
+#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:541
+msgid "Edit Interface qinq"
+msgstr "Editar Qinq da Interface"
+
+#: etc/inc/priv.defs.inc:526 etc/inc/priv.defs.inc:544
+#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:546
+msgid "WebCfg - Interfaces: VLAN page"
+msgstr "WebCfg - Página Interfaces: VLAN"
+
+#: etc/inc/priv.defs.inc:527 etc/inc/priv.defs.inc:545
+#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:547
+msgid "Allow access to the 'Interfaces: VLAN' page."
+msgstr "Permitir acesso à página 'Interfaces: VLAN'."
+
+#: etc/inc/priv.defs.inc:532 etc/inc/priv.defs.inc:550
+#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:552
+msgid "WebCfg - Interfaces: VLAN: Edit page"
+msgstr "WebCfg - Página Interfaces: VLAN: Editar"
+
+#: etc/inc/priv.defs.inc:533 etc/inc/priv.defs.inc:551
+#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:553
+msgid "Allow access to the 'Interfaces: VLAN: Edit' page."
+msgstr "Permitir acesso à página 'Interfaces: VLAN'."
+
+#: etc/inc/priv.defs.inc:538 etc/inc/priv.defs.inc:556
+#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:558
+msgid "WebCfg - Interfaces: Wireless page"
+msgstr "WebCfg - Página Interfaces: Sem fio"
+
+#: etc/inc/priv.defs.inc:539 etc/inc/priv.defs.inc:557
+#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:559
+msgid "Allow access to the 'Interfaces: Wireless' page."
+msgstr "Permitir acesso à página 'Interfaces: Sem fio'."
+
+#: etc/inc/priv.defs.inc:544 etc/inc/priv.defs.inc:562
+#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:564
+msgid "WebCfg - Interfaces: Wireless edit page"
+msgstr "WebCfg - Página Interfaces: Editar Sem fio"
+
+#: etc/inc/priv.defs.inc:545 etc/inc/priv.defs.inc:563
+#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:565
+msgid "Allow access to the 'Interfaces: Wireless : Edit' page."
+msgstr "WebCfg - Página 'Interfaces: Editar Sem fio'."
+
+#: etc/inc/priv.defs.inc:550 etc/inc/priv.defs.inc:568
+#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:570
+msgid "WebCfg - System: License page"
+msgstr "WebCfg - Página Sistema: Licença"
+
+#: etc/inc/priv.defs.inc:551 etc/inc/priv.defs.inc:569
+#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:571
+msgid "Allow access to the 'System: License' page."
+msgstr "Permitir acesso à página 'Sistema: Licença'."
+
+#: etc/inc/priv.defs.inc:556 etc/inc/priv.defs.inc:574
+#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:576
+msgid "WebCfg - Services: Load Balancer: Monitors page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Monitores"
+
+#: etc/inc/priv.defs.inc:557 etc/inc/priv.defs.inc:575
+#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:577
+msgid "Allow access to the 'Services: Load Balancer: Monitors' page."
+msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Monitores'."
+
+#: etc/inc/priv.defs.inc:562 etc/inc/priv.defs.inc:580
+#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:582
+msgid "WebCfg - Services: Load Balancer: Monitor: Edit page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Monitores: Editar"
+
+#: etc/inc/priv.defs.inc:563 etc/inc/priv.defs.inc:581
+#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:583
+msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page."
+msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Monitores: Editar'."
+
+#: etc/inc/priv.defs.inc:568 etc/inc/priv.defs.inc:586
+#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:588
+msgid "WebCfg - Load Balancer: Pool page"
+msgstr "WebCfg - Página Balanceador de Carga: Pool"
+
+#: etc/inc/priv.defs.inc:569 etc/inc/priv.defs.inc:587
+#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:589
+msgid "Allow access to the 'Load Balancer: Pool' page."
+msgstr "Permitir acesso à página 'Balanceador de Carga: Pool'."
+
+#: etc/inc/priv.defs.inc:574 etc/inc/priv.defs.inc:592
+#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:594
+msgid "WebCfg - Load Balancer: Pool: Edit page"
+msgstr "WebCfg - Página Balanceador de Carga: Pool: Editar"
+
+#: etc/inc/priv.defs.inc:575 etc/inc/priv.defs.inc:593
+#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:595
+msgid "Allow access to the 'Load Balancer: Pool: Edit' page."
+msgstr "Permitir acesso à página 'Balanceador de Carga: Pool: Editar'."
+
+#: etc/inc/priv.defs.inc:580 etc/inc/priv.defs.inc:598
+#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:600
+msgid "WebCfg - Services: Load Balancer: Relay Actions page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Ações de Relay"
+
+#: etc/inc/priv.defs.inc:581 etc/inc/priv.defs.inc:599
+#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:601
+msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page."
+msgstr "Permitir acesso à página 'Página Serviços: Balanceador de Carga: Ações de Relay'."
+
+#: etc/inc/priv.defs.inc:586 etc/inc/priv.defs.inc:604
+#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:606
+msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page"
+msgstr "WebCfg - Serviços: Balanceador de Carga: Ações de Relay: Página Editar"
+
+#: etc/inc/priv.defs.inc:587 etc/inc/priv.defs.inc:605
+#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:607
+msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page."
+msgstr "Permitir acesso à página 'Página Serviços: Balanceador de Carga: Ações de Relay: Editar'."
+
+#: etc/inc/priv.defs.inc:592 etc/inc/priv.defs.inc:610
+#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:612
+msgid "WebCfg - Services: Load Balancer: Relay Protocols page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Protocolos Relay"
+
+#: etc/inc/priv.defs.inc:593 etc/inc/priv.defs.inc:611
+#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:613
+msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page."
+msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Protocolos Relay'."
+
+#: etc/inc/priv.defs.inc:598 etc/inc/priv.defs.inc:616
+#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:618
+msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Protocolo Relay: Editar"
+
+#: etc/inc/priv.defs.inc:599 etc/inc/priv.defs.inc:617
+#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:619
+msgid "Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page."
+msgstr "Permitir acesso à  página 'Serviços: Balanceador de Carga: Protocolo Relay: Editar'."
+
+#: etc/inc/priv.defs.inc:604 etc/inc/priv.defs.inc:622
+#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:624
+msgid "WebCfg - Services: Load Balancer: Virtual Servers page"
+msgstr "WebCfg - Página Serviços: Balanceador de Carga: Servidores Virtuais"
+
+#: etc/inc/priv.defs.inc:605 etc/inc/priv.defs.inc:623
+#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:625
+msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page."
+msgstr "Permitir acesso à página 'Serviços: Balanceador de Carga: Servidores Virtuais'."
+
+#: etc/inc/priv.defs.inc:610 etc/inc/priv.defs.inc:628
+#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:630
+msgid "WebCfg - Load Balancer: Virtual Server: Edit page"
+msgstr "WebCfg - Página Balanceador de Carga: Servidor Virtual: Editar"
+
+#: etc/inc/priv.defs.inc:611 etc/inc/priv.defs.inc:629
+#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:631
+msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page."
+msgstr "Permitir acesso à página 'Balanceador de Carga: Servidor Virtual: Editar'."
+
+#: etc/inc/priv.defs.inc:616 etc/inc/priv.defs.inc:634
+#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:636
+msgid "WebCfg - Package: Settings page"
+msgstr "WebCfg - Página Pacote: Configurações"
+
+#: etc/inc/priv.defs.inc:617 etc/inc/priv.defs.inc:635
+#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:637
+msgid "Allow access to the 'Package: Settings' page."
+msgstr "Permitir acesso à página 'Pacote: Configurações'."
+
+#: etc/inc/priv.defs.inc:622 etc/inc/priv.defs.inc:640
+#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:642
+msgid "WebCfg - Package: Edit page"
+msgstr "WebCfg - Página Pacote: Editar"
+
+#: etc/inc/priv.defs.inc:623 etc/inc/priv.defs.inc:641
+#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:643
+msgid "Allow access to the 'Package: Edit' page."
+msgstr "Permitir acesso à página 'Pacote: Editar'."
+
+#: etc/inc/priv.defs.inc:628 etc/inc/priv.defs.inc:646
+#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:648
+msgid "WebCfg - System: Package Manager page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Pacote"
+
+#: etc/inc/priv.defs.inc:629 etc/inc/priv.defs.inc:647
+#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:649
+msgid "Allow access to the 'System: Package Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote'."
+
+#: etc/inc/priv.defs.inc:634 etc/inc/priv.defs.inc:652
+#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:654
+msgid "WebCfg - System: Package Manager: Install Package page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Pacote: Instalar Pacote"
+
+#: etc/inc/priv.defs.inc:635 etc/inc/priv.defs.inc:653
+#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:655
+msgid "Allow access to the 'System: Package Manager: Install Package' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote: Instalar Pacote'."
+
+#: etc/inc/priv.defs.inc:640 etc/inc/priv.defs.inc:658
+#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:660
+msgid "WebCfg - System: Package Manager: Installed page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Pacote: Instalado"
+
+#: etc/inc/priv.defs.inc:641 etc/inc/priv.defs.inc:659
+#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:661
+msgid "Allow access to the 'System: Package Manager: Installed' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Pacote: Instalado'."
+
+#: etc/inc/priv.defs.inc:646 etc/inc/priv.defs.inc:664
+#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:666
+msgid "WebCfg - Packages: Settings page"
+msgstr "WebCfg - Página Pacotes: Configurações"
+
+#: etc/inc/priv.defs.inc:647 etc/inc/priv.defs.inc:665
+#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:667
+msgid "Allow access to the 'Packages: Settings' page."
+msgstr "Permitir acesso à página 'Pacotes: Configurações'."
+
+#: etc/inc/priv.defs.inc:652 etc/inc/priv.defs.inc:670
+#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:672
+msgid "WebCfg - Diagnostics: Reboot System page"
+msgstr "WebCfg - Página Diagnóstico: Reiniciar Sistema"
+
+#: etc/inc/priv.defs.inc:653 etc/inc/priv.defs.inc:671
+#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:673
+msgid "Allow access to the 'Diagnostics: Reboot System' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Reiniciar Sistema'."
+
+#: etc/inc/priv.defs.inc:658 etc/inc/priv.defs.inc:676
+#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:678
+msgid "WebCfg - Diagnostics: Restart HTTPD : System page"
+msgstr "WebCfg - Página Diagnóstico: Reiniciar HTTPD: Sistema"
+
+#: etc/inc/priv.defs.inc:659 etc/inc/priv.defs.inc:677
+#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:679
+msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page."
+msgstr "Permitir acesso à página 'Diagnóstico: Reiniciar HTTPD: Sistema'."
+
+#: etc/inc/priv.defs.inc:664 etc/inc/priv.defs.inc:682
+#: etc/inc/priv.defs.inc:688 etc/inc/priv.defs.inc:684
+msgid "WebCfg - Services: Captive portal page"
+msgstr "WebCfg - Página Serviços: Portal Captive"
+
+#: etc/inc/priv.defs.inc:665 etc/inc/priv.defs.inc:683
+#: etc/inc/priv.defs.inc:689 etc/inc/priv.defs.inc:685
+msgid "Allow access to the 'Services: Captive portal' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive'."
+
+#: etc/inc/priv.defs.inc:670 etc/inc/priv.defs.inc:688
+#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:690
+msgid "WebCfg - Services: Captive portal: File Manager page"
+msgstr "WebCfg - Página Serviços: Portal Captive: Gerenciador de Arquivo"
+
+#: etc/inc/priv.defs.inc:671 etc/inc/priv.defs.inc:689
+#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:691
+msgid "Allow access to the 'Services: Captive portal: File Manager' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive: Gerenciador de Arquivo'."
+
+#: etc/inc/priv.defs.inc:676 etc/inc/priv.defs.inc:688
+#: etc/inc/priv.defs.inc:694 etc/inc/priv.defs.inc:706
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712
+#: etc/inc/priv.defs.inc:696 etc/inc/priv.defs.inc:708
+msgid "WebCfg - Services: Captive portal: Allowed IPs page"
+msgstr "WebCfg - Página Sistema: Portal Captive: IPs permitidos"
+
+#: etc/inc/priv.defs.inc:677 etc/inc/priv.defs.inc:689
+#: etc/inc/priv.defs.inc:695 etc/inc/priv.defs.inc:707
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713
+#: etc/inc/priv.defs.inc:697 etc/inc/priv.defs.inc:709
+msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive: IPs Permitidos'."
+
+#: etc/inc/priv.defs.inc:682 etc/inc/priv.defs.inc:694
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:712
+#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:718
+#: etc/inc/priv.defs.inc:702 etc/inc/priv.defs.inc:714
+msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page"
+msgstr "WebCfg - Página Serviços: Portal Captive: Editar IPs Permitidos"
+
+#: etc/inc/priv.defs.inc:683 etc/inc/priv.defs.inc:695
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:713
+#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:719
+#: etc/inc/priv.defs.inc:703 etc/inc/priv.defs.inc:715
+msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive: Editar IPs Permitidos'."
+
+#: etc/inc/priv.defs.inc:700 etc/inc/priv.defs.inc:718
+#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:720
+msgid "WebCfg - Services: Captive portal: Mac Addresses page"
+msgstr "WebCfg - Página Serviços: Portal Captive: Endereços MAC"
+
+#: etc/inc/priv.defs.inc:701 etc/inc/priv.defs.inc:719
+#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:721
+msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive: Endereços MAC'."
+
+#: etc/inc/priv.defs.inc:706 etc/inc/priv.defs.inc:724
+#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:726
+msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page"
+msgstr "WebCfg - Página Serviços: Portal Captive: Editar Endereços MAC"
+
+#: etc/inc/priv.defs.inc:707 etc/inc/priv.defs.inc:725
+#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:727
+msgid "Allow access to the 'Services: Captive portal: Edit MAC Addresses' page."
+msgstr "Permitir acesso à página 'Serviços: Portal Captive: Endereços MAC'."
+
+#: etc/inc/priv.defs.inc:712 etc/inc/priv.defs.inc:730
+#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:744
+msgid "WebCfg - Services: Captive portal Vouchers page"
+msgstr "WebCfg - Página Serviços: Vouchers do portal Captive"
+
+#: etc/inc/priv.defs.inc:713 etc/inc/priv.defs.inc:731
+#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:745
+msgid "Allow access to the 'Services: Captive portal Vouchers' page."
+msgstr "Permitir acesso à página 'Serviços: Vouchers do portal Captive'."
+
+#: etc/inc/priv.defs.inc:724 etc/inc/priv.defs.inc:742
+#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:756
+msgid "WebCfg - Services: DHCP server page"
+msgstr "WebCfg - Página Serviços: Servidor DHCP"
+
+#: etc/inc/priv.defs.inc:725 etc/inc/priv.defs.inc:743
+#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:757
+msgid "Allow access to the 'Services: DHCP server' page."
+msgstr "Permitir acesso à página 'Serviços: Servidor DHCP'."
+
+#: etc/inc/priv.defs.inc:730 etc/inc/priv.defs.inc:748
+#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:762
+msgid "WebCfg - Services: DHCP Server : Edit static mapping page"
+msgstr "WebCfg - Página Serviços: Servidor DHCP: Editar mapeamento estático"
+
+#: etc/inc/priv.defs.inc:731 etc/inc/priv.defs.inc:749
+#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:763
+msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page."
+msgstr "Permitir acesso à página 'Serviços: Servidor DHCP: Editar mapeamento estático'."
+
+#: etc/inc/priv.defs.inc:736 etc/inc/priv.defs.inc:754
+#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:768
+msgid "WebCfg - Services: DHCP Relay page"
+msgstr "WebCfg - Página Serviços: DHCP Relay"
+
+#: etc/inc/priv.defs.inc:737 etc/inc/priv.defs.inc:755
+#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:769
+msgid "Allow access to the 'Services: DHCP Relay' page."
+msgstr "Permitir acesso à página 'Serviços: DHCP Relay'."
+
+#: etc/inc/priv.defs.inc:742 etc/inc/priv.defs.inc:760
+#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:774
+msgid "WebCfg - Services: DHCPv6 Relay page"
+msgstr "WebCfg - Serviços: Página DHCPv6 Relay"
+
+#: etc/inc/priv.defs.inc:743 etc/inc/priv.defs.inc:761
+#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:775
+msgid "Allow access to the 'Services: DHCPv6 Relay' page."
+msgstr "Permitir acesso à página 'Serviços: DHCPv6 Relay'."
+
+#: etc/inc/priv.defs.inc:748 etc/inc/priv.defs.inc:766
+#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:780
+msgid "WebCfg - Services: DNS Forwarder page"
+msgstr "WebCfg - Página Serviços: DNS Forwarder"
+
+#: etc/inc/priv.defs.inc:749 etc/inc/priv.defs.inc:767
+#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:781
+msgid "Allow access to the 'Services: DNS Forwarder' page."
+msgstr "Permitir acesso à página 'Serviços: DNS Forwarder'."
+
+#: etc/inc/priv.defs.inc:754 etc/inc/priv.defs.inc:772
+#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:786
+msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page"
+msgstr "WebCfg - Página Serviços: DNS Forwarder: Editar Substituição de Domínio"
+
+#: etc/inc/priv.defs.inc:755 etc/inc/priv.defs.inc:773
+#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:787
+msgid "Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page."
+msgstr "Permitir acesso à página 'Serviços: DNS Forwarder: Editar Substituição de Domínio'."
+
+#: etc/inc/priv.defs.inc:760 etc/inc/priv.defs.inc:778
+#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:792
+msgid "WebCfg - Services: DNS Forwarder: Edit host page"
+msgstr "WebCfg - Página Serviços: DNS Forwarder: Editar"
+
+#: etc/inc/priv.defs.inc:761 etc/inc/priv.defs.inc:779
+#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:793
+msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page."
+msgstr "Permitir acesso à página 'Serviços: DNS Forwarder: Editar'."
+
+#: etc/inc/priv.defs.inc:766 etc/inc/priv.defs.inc:784
+#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:798
+msgid "WebCfg - Services: Dynamic DNS clients page"
+msgstr "WebCfg - Página Serviços: Clientes DNS Dinâmico"
+
+#: etc/inc/priv.defs.inc:767 etc/inc/priv.defs.inc:785
+#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:799
+msgid "Allow access to the 'Services: Dynamic DNS clients' page."
+msgstr "Permitir acesso à página 'Serviços: Clientes DNS Dinâmico'."
+
+#: etc/inc/priv.defs.inc:772 etc/inc/priv.defs.inc:790
+#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:804
+msgid "WebCfg - Services: Dynamic DNS client page"
+msgstr "WebCfg - Página Serviços: Cliente DNS Dinâmico"
+
+#: etc/inc/priv.defs.inc:773 etc/inc/priv.defs.inc:791
+#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:805
+msgid "Allow access to the 'Services: Dynamic DNS client' page."
+msgstr "Permitir acesso à página 'Serviços: Cliente DNS Dinâmico'."
+
+#: etc/inc/priv.defs.inc:778 etc/inc/priv.defs.inc:796
+#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:810
+msgid "WebCfg - Services: Igmpproxy page"
+msgstr "WebCfg - Página Serviços: Igmpproxy"
+
+#: etc/inc/priv.defs.inc:779 etc/inc/priv.defs.inc:797
+#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:811
+msgid "Allow access to the 'Services: Igmpproxy' page."
+msgstr "Permitir acesso à página 'Serviços: Igmpproxy'."
+
+#: etc/inc/priv.defs.inc:784 etc/inc/priv.defs.inc:802
+#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:816
+msgid "WebCfg - Firewall: Igmpproxy: Edit page"
+msgstr "WebCfg - Página Firewall: Igmpproxy: Editar"
+
+#: etc/inc/priv.defs.inc:785 etc/inc/priv.defs.inc:803
+#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:817
+msgid "Allow access to the 'Firewall: Igmpproxy' page."
+msgstr "Permitir acesso à página 'Firewall: Igmpproxy:'."
+
+#: etc/inc/priv.defs.inc:790 etc/inc/priv.defs.inc:808
+#: etc/inc/priv.defs.inc:814 etc/inc/priv.defs.inc:822
+msgid "WebCfg - Services: RFC 2136 clients page"
+msgstr "WebCfg - Página Serviços: Clientes de RFC 2136"
+
+#: etc/inc/priv.defs.inc:791 etc/inc/priv.defs.inc:809
+#: etc/inc/priv.defs.inc:815 etc/inc/priv.defs.inc:823
+msgid "Allow access to the 'Services: RFC 2136 clients' page."
+msgstr "Permitir acesso à página 'Serviços: Clientes de RFC 2136'."
+
+#: etc/inc/priv.defs.inc:796 etc/inc/priv.defs.inc:814
+#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:828
+msgid "WebCfg - Services: SNMP page"
+msgstr "WebCfg - Página Serviços: SNMP"
+
+#: etc/inc/priv.defs.inc:797 etc/inc/priv.defs.inc:815
+#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:829
+msgid "Allow access to the 'Services: SNMP' page."
+msgstr "Permitir acesso à página 'Serviços: SNMP'."
+
+#: etc/inc/priv.defs.inc:802 etc/inc/priv.defs.inc:820
+#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:834
+msgid "WebCfg - Services: Wake on LAN page"
+msgstr "WebCfg - Página Serviços: Wake on LAN"
+
+#: etc/inc/priv.defs.inc:803 etc/inc/priv.defs.inc:821
+#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:835
+msgid "Allow access to the 'Services: Wake on LAN' page."
+msgstr "Permitir acesso à página 'Serviços: Wake on LAN'."
+
+#: etc/inc/priv.defs.inc:808 etc/inc/priv.defs.inc:826
+#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:840
+msgid "WebCfg - Services: Wake on LAN: Edit page"
+msgstr "WebCfg - Página Serviços: Wake on LAN: Editar"
+
+#: etc/inc/priv.defs.inc:809 etc/inc/priv.defs.inc:827
+#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:841
+msgid "Allow access to the 'Services: Wake on LAN: Edit' page."
+msgstr "Permitir acesso à página 'Serviços: Wake on LAN: Editar'."
+
+#: etc/inc/priv.defs.inc:820 etc/inc/priv.defs.inc:838
+#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:852
+msgid "WebCfg - Hidden: Detailed Status page"
+msgstr "WebCfg - Página Omitida: Status Detalhado"
+
+#: etc/inc/priv.defs.inc:821 etc/inc/priv.defs.inc:839
+#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:853
+msgid "Allow access to the 'Hidden: Detailed Status' page."
+msgstr "Permitir acesso à página 'Omitida: Status Detalhado'."
+
+#: etc/inc/priv.defs.inc:826 etc/inc/priv.defs.inc:844
+#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:858
+msgid "WebCfg - Status: Captive portal page"
+msgstr "WebCfg - Página Status: Portal Captive"
+
+#: etc/inc/priv.defs.inc:827 etc/inc/priv.defs.inc:845
+#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:859
+msgid "Allow access to the 'Status: Captive portal' page."
+msgstr "Permitir acesso à página 'Status: Portal Captive'."
+
+#: etc/inc/priv.defs.inc:832 etc/inc/priv.defs.inc:850
+#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:864
+msgid "WebCfg - Status: Captive portal test Vouchers page"
+msgstr "WebCfg - Página Status: Vouchers de teste do portal Captive"
+
+#: etc/inc/priv.defs.inc:833 etc/inc/priv.defs.inc:851
+#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:865
+msgid "Allow access to the 'Status: Captive portal Test Vouchers' page."
+msgstr "Permitir acesso à página 'Status: Vouchers de teste do portal Captive'."
+
+#: etc/inc/priv.defs.inc:838 etc/inc/priv.defs.inc:856
+#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:870
+msgid "WebCfg - Status: Captive portal Voucher Rolls page"
+msgstr "WebCfg - Página Status: Listas de Vouchers do portal Captive"
+
+#: etc/inc/priv.defs.inc:839 etc/inc/priv.defs.inc:857
+#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:871
+msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page."
+msgstr "Permitir acesso à página 'Status: Listas de Vouchers do portal Captive'."
+
+#: etc/inc/priv.defs.inc:844 etc/inc/priv.defs.inc:862
+#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:876
+msgid "WebCfg - Status: Captive portal Vouchers page"
+msgstr "WebCfg - Página Status: Vouchers do portal Captive"
+
+#: etc/inc/priv.defs.inc:845 etc/inc/priv.defs.inc:863
+#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:877
+msgid "Allow access to the 'Status: Captive portal Vouchers' page."
+msgstr "Permitir acesso à página 'Status: Vouchers do portal Captive'."
+
+#: etc/inc/priv.defs.inc:850 etc/inc/priv.defs.inc:868
+#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:882
+msgid "WebCfg - Status: DHCP leases page"
+msgstr "WebCfg - Página Status: Concessões DHCP"
+
+#: etc/inc/priv.defs.inc:851 etc/inc/priv.defs.inc:869
+#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:883
+msgid "Allow access to the 'Status: DHCP leases' page."
+msgstr "Permitir acesso à  página 'Status: Concessões DHCP'."
+
+#: etc/inc/priv.defs.inc:856 etc/inc/priv.defs.inc:874
+#: etc/inc/priv.defs.inc:880 etc/inc/priv.defs.inc:888
+msgid "WebCfg - Status: Filter Reload Status page"
+msgstr "WebCfg - Página Status: Status do Filtro"
+
+#: etc/inc/priv.defs.inc:857 etc/inc/priv.defs.inc:875
+#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:889
+msgid "Allow access to the 'Status: Filter Reload Status' page."
+msgstr "Permitir acesso à página 'Status: Status do Filtro'."
+
+#: etc/inc/priv.defs.inc:862 etc/inc/priv.defs.inc:880
+#: etc/inc/priv.defs.inc:886 etc/inc/priv.defs.inc:894
+msgid "WebCfg - Status: Gateway Groups page"
+msgstr "WebCfg - Página Status: Grupos de Gateway"
+
+#: etc/inc/priv.defs.inc:863 etc/inc/priv.defs.inc:881
+#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:895
+msgid "Allow access to the 'Status: Gateway Groups' page."
+msgstr "Permitir acesso à página 'Status: Grupos de Gateway'."
+
+#: etc/inc/priv.defs.inc:868 etc/inc/priv.defs.inc:886
+#: etc/inc/priv.defs.inc:892 etc/inc/priv.defs.inc:900
+msgid "WebCfg - Status: Gateways page"
+msgstr "WebCfg - Página Status: Gateways"
+
+#: etc/inc/priv.defs.inc:869 etc/inc/priv.defs.inc:887
+#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:901
+msgid "Allow access to the 'Status: Gateways' page."
+msgstr "Permitir acesso à página 'Status: Gateways'."
+
+#: etc/inc/priv.defs.inc:874 etc/inc/priv.defs.inc:892
+#: etc/inc/priv.defs.inc:898 etc/inc/priv.defs.inc:906
+msgid "WebCfg - Status: Traffic Graph page"
+msgstr "WebCfg - Página Status: Gráfico de Tráfego"
+
+#: etc/inc/priv.defs.inc:875 etc/inc/priv.defs.inc:893
+#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:907
+msgid "Allow access to the 'Status: Traffic Graph' page."
+msgstr "Permitir acesso à página 'Status: Gráfico de Tráfego'."
+
+#: etc/inc/priv.defs.inc:881 etc/inc/priv.defs.inc:899
+#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:913
+msgid "WebCfg - Status: CPU load page"
+msgstr "WebCfg - Página Status: Carregamento de CPU"
+
+#: etc/inc/priv.defs.inc:882 etc/inc/priv.defs.inc:900
+#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:914
+msgid "Allow access to the 'Status: CPU load' page."
+msgstr "Permitir acesso à página 'Status: Carregamento de CPU'."
+
+#: etc/inc/priv.defs.inc:887 etc/inc/priv.defs.inc:905
+#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:919
+msgid "WebCfg - Status: Interfaces page"
+msgstr "WebCfg - Página Status: Interfaces"
+
+#: etc/inc/priv.defs.inc:888 etc/inc/priv.defs.inc:906
+#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:920
+msgid "Allow access to the 'Status: Interfaces' page."
+msgstr "Permitir acesso à página 'Status: Interfaces'."
+
+#: etc/inc/priv.defs.inc:893 etc/inc/priv.defs.inc:911
+#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:925
+msgid "WebCfg - Status: Load Balancer: Pool page"
+msgstr "WebCfg - Página Status: Balanceador de Carga: Pool"
+
+#: etc/inc/priv.defs.inc:894 etc/inc/priv.defs.inc:912
+#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:926
+msgid "Allow access to the 'Status: Load Balancer: Pool' page."
+msgstr "Permitir acesso à  página 'Status: Balanceador de Carga: Pool'."
+
+#: etc/inc/priv.defs.inc:899 etc/inc/priv.defs.inc:917
+#: etc/inc/priv.defs.inc:923 etc/inc/priv.defs.inc:931
+msgid "WebCfg - Status: Load Balancer: Virtual Server page"
+msgstr "WebCfg - Página Status: Balanceador de Carga: Servidor Virtual"
+
+#: etc/inc/priv.defs.inc:900 etc/inc/priv.defs.inc:918
+#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:932
+msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page."
+msgstr "Permitir acesso à página 'Status: Balanceador de Carga: Servidor Virtual'."
+
+#: etc/inc/priv.defs.inc:905 etc/inc/priv.defs.inc:923
+#: etc/inc/priv.defs.inc:929 etc/inc/priv.defs.inc:937
+msgid "WebCfg - Status: OpenVPN page"
+msgstr "WebCfg - Página Status: OpenVPN"
+
+#: etc/inc/priv.defs.inc:906 etc/inc/priv.defs.inc:924
+#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:938
+msgid "Allow access to the 'Status: OpenVPN' page."
+msgstr "Permitir acesso à página 'Status: OpenVPN'."
+
+#: etc/inc/priv.defs.inc:911 etc/inc/priv.defs.inc:929
+#: etc/inc/priv.defs.inc:935 etc/inc/priv.defs.inc:943
+msgid "WebCfg - Status: Traffic shaper: Queues page"
+msgstr "WebCfg - Página Status: Traffic Shaper: Filas"
+
+#: etc/inc/priv.defs.inc:912 etc/inc/priv.defs.inc:930
+#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:944
+msgid "Allow access to the 'Status: Traffic shaper: Queues' page."
+msgstr "Permitir acesso à página 'Status: Traffic Shaper: Filas'."
+
+#: etc/inc/priv.defs.inc:917 etc/inc/priv.defs.inc:935
+#: etc/inc/priv.defs.inc:941 etc/inc/priv.defs.inc:949
+msgid "WebCfg - Status: RRD Graphs page"
+msgstr "WebCfg - Página Status: Gráficos de RRD"
+
+#: etc/inc/priv.defs.inc:918 etc/inc/priv.defs.inc:936
+#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:950
+msgid "Allow access to the 'Status: RRD Graphs' page."
+msgstr "Permitir acesso à página 'Status: Gráficos de RRD'."
+
+#: etc/inc/priv.defs.inc:924 etc/inc/priv.defs.inc:942
+#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:956
+msgid "WebCfg - Status: RRD Graphs settings page"
+msgstr "WebCfg - Página Status: Configurações de Gráficos de RRD"
+
+#: etc/inc/priv.defs.inc:925 etc/inc/priv.defs.inc:943
+#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:957
+msgid "Allow access to the 'Status: RRD Graphs: settings' page."
+msgstr "Permitir acesso à página 'Status: Configurações de Gráficos de RRD'."
+
+#: etc/inc/priv.defs.inc:930 etc/inc/priv.defs.inc:948
+#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:962
+msgid "WebCfg - Status: Services page"
+msgstr "WebCfg - Página Status: Serviços"
+
+#: etc/inc/priv.defs.inc:931 etc/inc/priv.defs.inc:949
+#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:963
+msgid "Allow access to the 'Status: Services' page."
+msgstr "Permitir acesso à página 'Status: Serviços'."
+
+#: etc/inc/priv.defs.inc:936 etc/inc/priv.defs.inc:954
+#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:968
+msgid "WebCfg - Status: UPnP Status page"
+msgstr "WebCfg - Página Status: Status UPnP"
+
+#: etc/inc/priv.defs.inc:937 etc/inc/priv.defs.inc:955
+#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:969
+msgid "Allow access to the 'Status: UPnP Status' page."
+msgstr "Permitir acesso à página 'Status: Status UPnP'."
+
+#: etc/inc/priv.defs.inc:942 etc/inc/priv.defs.inc:960
+#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:974
+msgid "WebCfg - Status: Wireless page"
+msgstr "WebCfg - Página Status: Conexão sem fio"
+
+#: etc/inc/priv.defs.inc:943 etc/inc/priv.defs.inc:961
+#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:975
+msgid "Allow access to the 'Status: Wireless' page."
+msgstr "Permitir acesso à página 'Status: Conexão sem fio'."
+
+#: etc/inc/priv.defs.inc:948 etc/inc/priv.defs.inc:966
+#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:980
+msgid "WebCfg - System: General Setup page"
+msgstr "WebCfg - Sistema: Configuração Geral"
+
+#: etc/inc/priv.defs.inc:949 etc/inc/priv.defs.inc:967
+#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:981
+msgid "Allow access to the 'System: General Setup' page."
+msgstr "Permitir acesso à página 'Sistema: Configurações Gerais'."
+
+#: etc/inc/priv.defs.inc:954 etc/inc/priv.defs.inc:972
+#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:986
+msgid "WebCfg - System: Advanced: Admin Access Page"
+msgstr "WebCfg - Página Sistema: Avançado: Acesso de Administrador"
+
+#: etc/inc/priv.defs.inc:955 etc/inc/priv.defs.inc:973
+#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:987
+msgid "Allow access to the 'System: Advanced: Admin Access' page."
+msgstr "Permitir acesso à página 'Sistema: Avançado: Acesso de Administrador'."
+
+#: etc/inc/priv.defs.inc:960 etc/inc/priv.defs.inc:978
+#: etc/inc/priv.defs.inc:984 etc/inc/priv.defs.inc:992
+msgid "WebCfg - System: Advanced: Firewall and NAT page"
+msgstr "WebCfg - Página Sistema: Avançado: Firewall e NAT"
+
+#: etc/inc/priv.defs.inc:961 etc/inc/priv.defs.inc:979
+#: etc/inc/priv.defs.inc:985 etc/inc/priv.defs.inc:993
+msgid "Allow access to the 'System: Advanced: Firewall and NAT' page."
+msgstr "Permitir acesso à página 'Sistema: Avançado: Firewall e NAT'."
+
+#: etc/inc/priv.defs.inc:966 etc/inc/priv.defs.inc:984
+#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:998
+msgid "WebCfg - System: Advanced: Miscellaneous page"
+msgstr "WebCfg - Página Sistema: Avançado: Variados"
+
+#: etc/inc/priv.defs.inc:967 etc/inc/priv.defs.inc:985
+#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:999
+msgid "Allow access to the 'System: Advanced: Miscellaneous' page."
+msgstr "Permitir acesso à página 'Sistema: Avançado: Variados'."
+
+#: etc/inc/priv.defs.inc:972 etc/inc/priv.defs.inc:990
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1004
+msgid "WebCfg - System: Advanced: Network page"
+msgstr "WebCfg - Página Sistema: Avançado: Rede"
+
+#: etc/inc/priv.defs.inc:973 etc/inc/priv.defs.inc:991
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1005
+msgid "Allow access to the 'System: Advanced: Networking' page."
+msgstr "Permitir acesso à página 'Sistema: Avançado: Rede'."
+
+#: etc/inc/priv.defs.inc:978 etc/inc/priv.defs.inc:984
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1002
+#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1010
+#: etc/inc/priv.defs.inc:1016
+msgid "WebCfg - System: Advanced: Tunables page"
+msgstr "WebCfg - Página Sistema: Avançado: Ajustes"
+
+#: etc/inc/priv.defs.inc:979 etc/inc/priv.defs.inc:985
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1003
+#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1011
+#: etc/inc/priv.defs.inc:1017
+msgid "Allow access to the 'System: Advanced: Tunables' page."
+msgstr "Permitir acesso à página 'Sistema: Avançado: Ajustes'."
+
+#: etc/inc/priv.defs.inc:990 etc/inc/priv.defs.inc:1008
+#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1022
+msgid "WebCfg - System: Authentication Servers"
+msgstr "WebCfg - Página Sistema: Servidores de Autenticação"
+
+#: etc/inc/priv.defs.inc:991 etc/inc/priv.defs.inc:1009
+#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1023
+msgid "Allow access to the 'System: Authentication Servers' page."
+msgstr "Permitir acesso à página 'Sistema: Servidores de Autenticação'."
+
+#: etc/inc/priv.defs.inc:996 etc/inc/priv.defs.inc:1014
+#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1028
+msgid "WebCfg - System: CA Manager"
+msgstr "WebCfg - Sistema: Gerenciador CA"
+
+#: etc/inc/priv.defs.inc:997 etc/inc/priv.defs.inc:1015
+#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1029
+msgid "Allow access to the 'System: CA Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador CA'."
+
+#: etc/inc/priv.defs.inc:1002 etc/inc/priv.defs.inc:1020
+#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1034
+msgid "WebCfg - System: Certificate Manager"
+msgstr "WebCfg - Sistema: Gerenciador de Certificado"
+
+#: etc/inc/priv.defs.inc:1003 etc/inc/priv.defs.inc:1021
+#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1035
+msgid "Allow access to the 'System: Certificate Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciados de Certificado'."
+
+#: etc/inc/priv.defs.inc:1008 etc/inc/priv.defs.inc:1026
+#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1040
+msgid "WebCfg - System: CRL Manager"
+msgstr "WebCfg - Sistema: Gerenciador CRL"
+
+#: etc/inc/priv.defs.inc:1009 etc/inc/priv.defs.inc:1027
+#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1041
+msgid "Allow access to the 'System: CRL Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador CRL'."
+
+#: etc/inc/priv.defs.inc:1014 etc/inc/priv.defs.inc:1032
+#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1046
+msgid "WebCfg - System: Firmware: Manual Update page"
+msgstr "WebCfg - Página Sistema: Firmware: Atualização Manual"
+
+#: etc/inc/priv.defs.inc:1015 etc/inc/priv.defs.inc:1033
+#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1047
+msgid "Allow access to the 'System: Firmware: Manual Update' page."
+msgstr "Permitir acesso à  página 'Sistema: Firmware: Atualização Manual'."
+
+#: etc/inc/priv.defs.inc:1020 etc/inc/priv.defs.inc:1038
+#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1052
+msgid "WebCfg - System: Firmware: Check For Update page"
+msgstr "WebCfg - Página Sistema: Firmware: Verificar por Atualização"
+
+#: etc/inc/priv.defs.inc:1021 etc/inc/priv.defs.inc:1039
+#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1053
+msgid "Allow access to the 'System: Firmware: Check For Update' page."
+msgstr "Permitir acesso à página 'Sistema: Firmware: Verificar por Atualização'."
+
+#: etc/inc/priv.defs.inc:1026 etc/inc/priv.defs.inc:1044
+#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1058
+msgid "WebCfg - System: Firmware: Auto Update page"
+msgstr "WebCfg - Página Sistema: Firmware: Auto Atualização"
+
+#: etc/inc/priv.defs.inc:1027 etc/inc/priv.defs.inc:1045
+#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1059
+msgid "Allow access to the 'System: Firmware: Auto Update' page."
+msgstr "Permitir acesso à página 'Sistema: Firmware: Página de Auto Atualização'."
+
+#: etc/inc/priv.defs.inc:1032 etc/inc/priv.defs.inc:1050
+#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1064
+msgid "WebCfg - System: Firmware: Settings page"
+msgstr "WebCfg - Página Sistema: Firmware: Configurações"
+
+#: etc/inc/priv.defs.inc:1033 etc/inc/priv.defs.inc:1051
+#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1065
+msgid "Allow access to the 'System: Firmware: Settings' page."
+msgstr "Permitir acesso à página 'Sistema: Firmware: Configurações'."
+
+#: etc/inc/priv.defs.inc:1038 etc/inc/priv.defs.inc:1056
+#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1070
+msgid "WebCfg - System: Gateway Groups page"
+msgstr "WebCfg - Página Sistema: Grupos de Gateway"
+
+#: etc/inc/priv.defs.inc:1039 etc/inc/priv.defs.inc:1057
+#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1071
+msgid "Allow access to the 'System: Gateway Groups' page."
+msgstr "Permitir acesso à página 'Sistema: Grupos de Gateway'."
+
+#: etc/inc/priv.defs.inc:1044 etc/inc/priv.defs.inc:1062
+#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1076
+msgid "WebCfg - System: Gateways: Edit Gateway Groups page"
+msgstr "WebCfg - Página Sistema: Gateways: Editar Grupos de Gateways"
+
+#: etc/inc/priv.defs.inc:1045 etc/inc/priv.defs.inc:1063
+#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1077
+msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page."
+msgstr "Permitir acesso à página 'Sistema: Gateways: Editar Grupos de Gateways'."
+
+#: etc/inc/priv.defs.inc:1050 etc/inc/priv.defs.inc:1068
+#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1082
+msgid "WebCfg - System: Gateways page"
+msgstr "WebCfg - Página Sistema: Gateways"
+
+#: etc/inc/priv.defs.inc:1051 etc/inc/priv.defs.inc:1069
+#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1083
+msgid "Allow access to the 'System: Gateways' page."
+msgstr "Permitir acesso à página 'Sistema: Gateways'."
+
+#: etc/inc/priv.defs.inc:1056 etc/inc/priv.defs.inc:1074
+#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1088
+msgid "WebCfg - System: Gateways: Edit Gateway page"
+msgstr "WebCfg - Página Sistema: Gateway: Editar Gateway"
+
+#: etc/inc/priv.defs.inc:1057 etc/inc/priv.defs.inc:1075
+#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1089
+msgid "Allow access to the 'System: Gateways: Edit Gateway' page."
+msgstr "Permitir acesso à página 'Sistema: Gateway: Editar Gateway'."
+
+#: etc/inc/priv.defs.inc:1062 etc/inc/priv.defs.inc:1080
+#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1094
+msgid "WebCfg - System: Group manager page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Grupo"
+
+#: etc/inc/priv.defs.inc:1063 etc/inc/priv.defs.inc:1081
+#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1095
+msgid "Allow access to the 'System: Group manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Grupo'."
+
+#: etc/inc/priv.defs.inc:1068 etc/inc/priv.defs.inc:1086
+#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1100
+msgid "WebCfg - System: Group Manager: Add Privileges page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Grupo: Adicionar Priviégios"
+
+#: etc/inc/priv.defs.inc:1069 etc/inc/priv.defs.inc:1087
+#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1101
+msgid "Allow access to the 'System: Group Manager: Add Privileges' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Grupo: Adicionar Privilégios'."
+
+#: etc/inc/priv.defs.inc:1074 etc/inc/priv.defs.inc:1092
+#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1106
+msgid "WebCfg - System: Static Routes page"
+msgstr "WebCfg - Página Sistema: Rotas Estáticas"
+
+#: etc/inc/priv.defs.inc:1075 etc/inc/priv.defs.inc:1093
+#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1107
+msgid "Allow access to the 'System: Static Routes' page."
+msgstr "Permitir acesso à página 'Sistema: Rotas Estáticas'."
+
+#: etc/inc/priv.defs.inc:1080 etc/inc/priv.defs.inc:1098
+#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1112
+msgid "WebCfg - System: Static Routes: Edit route page"
+msgstr "WebCfg - Página Sistema: Rotas Estáticas: Editar rota"
+
+#: etc/inc/priv.defs.inc:1081 etc/inc/priv.defs.inc:1099
+#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1113
+msgid "Allow access to the 'System: Static Routes: Edit route' page."
+msgstr "Permitir acesso à página 'Sistema: Rotas Estáticas: Editar rota'."
+
+#: etc/inc/priv.defs.inc:1086 etc/inc/priv.defs.inc:1104
+#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1118
+msgid "WebCfg - System: User Manager page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Usuários"
+
+#: etc/inc/priv.defs.inc:1087 etc/inc/priv.defs.inc:1105
+#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1119
+msgid "Allow access to the 'System: User Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuários'."
+
+#: etc/inc/priv.defs.inc:1092 etc/inc/priv.defs.inc:1110
+#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1124
+msgid "WebCfg - System: User Manager: Add Privileges page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Usuários: Adicionar Privilégios"
+
+#: etc/inc/priv.defs.inc:1093 etc/inc/priv.defs.inc:1111
+#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1125
+msgid "Allow access to the 'System: User Manager: Add Privileges' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuários: Adicionar Privilégios'."
+
+#: etc/inc/priv.defs.inc:1098 etc/inc/priv.defs.inc:1116
+#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1130
+msgid "WebCfg - System: User Password Manager page"
+msgstr "WebCfg - Sistema: Página Gerenciador de Senha de Usuários"
+
+#: etc/inc/priv.defs.inc:1099 etc/inc/priv.defs.inc:1117
+#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1131
+msgid "Allow access to the 'System: User Password Manager' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Senha de Usuários'."
+
+#: etc/inc/priv.defs.inc:1104 etc/inc/priv.defs.inc:1122
+#: etc/inc/priv.defs.inc:1128
+msgid "WebCfg - System: User manager: settings page"
+msgstr "WebCfg - Sistema: Gerenciador de Usuários: Página de Configurações"
+
+#: etc/inc/priv.defs.inc:1105 etc/inc/priv.defs.inc:1123
+#: etc/inc/priv.defs.inc:1129
+msgid "Allow access to the 'System: User manager: settings' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de usuários: Página deConfigurações'."
+
+#: etc/inc/priv.defs.inc:1110 etc/inc/priv.defs.inc:1128
+#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1142
+msgid "WebCfg - System: User Manager: Settings: Test LDAP page"
+msgstr "WebCfg - Página Sistema: Gerenciador de Usuários: Configurações: Testar LDAP"
+
+#: etc/inc/priv.defs.inc:1111 etc/inc/priv.defs.inc:1129
+#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1143
+msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de Usuário: Configurações: Testar LDAP'."
+
+#: etc/inc/priv.defs.inc:1116 etc/inc/priv.defs.inc:1134
+#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1148
+msgid "WebCfg - System: Firmware: Manual Update page (progress bar)"
+msgstr "WebCfg - Página Sistema: Firmware: Atualização Manual (barra de progresso)"
+
+#: etc/inc/priv.defs.inc:1117 etc/inc/priv.defs.inc:1135
+#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1149
+msgid "Allow access to the 'System: Firmware: Manual Update: Progress bar' page."
+msgstr "Permitir acesso à página 'Sistema: Firmware: Atualização Manual: Barra de progresso'."
+
+#: etc/inc/priv.defs.inc:1122 etc/inc/priv.defs.inc:1140
+#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1154
+msgid "WebCfg - Hidden: Upload Configuration page"
+msgstr "WebCfg - Página Omitidos: Configuração de Carregamento"
+
+#: etc/inc/priv.defs.inc:1123 etc/inc/priv.defs.inc:1141
+#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1155
+msgid "Allow access to the 'Hidden: Upload Configuration' page."
+msgstr "Permitir acesso à página 'Omitidos: Configuração de Carregamento'."
+
+#: etc/inc/priv.defs.inc:1128 etc/inc/priv.defs.inc:1146
+#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1160
+msgid "WebCfg - VPN: IPsec page"
+msgstr "WebCfg - Página VPN: IPsec"
+
+#: etc/inc/priv.defs.inc:1129 etc/inc/priv.defs.inc:1147
+#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1161
+msgid "Allow access to the 'VPN: IPsec' page."
+msgstr "Permitir acesso à página 'VPN: IPsec'."
+
+#: etc/inc/priv.defs.inc:1134 etc/inc/priv.defs.inc:1152
+#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1166
+msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List"
+msgstr "WebCfg - VPN: IPsec: Lista de chaves pré-compartilhadas"
+
+#: etc/inc/priv.defs.inc:1135 etc/inc/priv.defs.inc:1153
+#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1167
+msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page."
+msgstr "Permitir acesso à página 'VPN: IPsec: Lista de chaves pré-compartilhadas'."
+
+#: etc/inc/priv.defs.inc:1140 etc/inc/priv.defs.inc:1158
+#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1172
+msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys"
+msgstr "WebCfg - VPN: IPsec: Editar chaves pré-compartilhadas"
+
+#: etc/inc/priv.defs.inc:1141 etc/inc/priv.defs.inc:1159
+#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1173
+msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page."
+msgstr "Permitir acesso à página 'VPN: IPsec: Editar chaves pré-compartilhadas'."
+
+#: etc/inc/priv.defs.inc:1146 etc/inc/priv.defs.inc:1164
+#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1178
+msgid "WebCfg - VPN: IPsec: Mobile page"
+msgstr "WebCfg - Página VPN: IPsec: Móvel"
+
+#: etc/inc/priv.defs.inc:1147 etc/inc/priv.defs.inc:1165
+#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1179
+msgid "Allow access to the 'VPN: IPsec: Mobile' page."
+msgstr "Permitir acesso à página 'VPN: IPsec: Móvel'."
+
+#: etc/inc/priv.defs.inc:1152 etc/inc/priv.defs.inc:1170
+#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1184
+msgid "WebCfg - VPN: IPsec: Edit Phase 1 page"
+msgstr "WebCfg - Página VPN: IPsec: Editar Fase 1"
+
+#: etc/inc/priv.defs.inc:1153 etc/inc/priv.defs.inc:1171
+#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1185
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page."
+msgstr "Permitir acesso à página 'VPN: IPsec: Editar Fase 1'."
+
+#: etc/inc/priv.defs.inc:1158 etc/inc/priv.defs.inc:1176
+#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1190
+msgid "WebCfg - VPN: IPsec: Edit Phase 2 page"
+msgstr "WebCfg - Página VPN: IPsec: Editar Fase 2"
+
+#: etc/inc/priv.defs.inc:1159 etc/inc/priv.defs.inc:1177
+#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1191
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page."
+msgstr "Permitir acesso à página 'VPN: IPsec: Editar Fase 2'."
+
+#: etc/inc/priv.defs.inc:1164 etc/inc/priv.defs.inc:1182
+#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1196
+msgid "WebCfg - VPN: VPN L2TP page"
+msgstr "WebCfg - Página VPN: L2TP da VPN"
+
+#: etc/inc/priv.defs.inc:1165 etc/inc/priv.defs.inc:1183
+#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1197
+msgid "Allow access to the 'VPN: VPN L2TP' page."
+msgstr "Permitir acesso à página 'VPN: L2TP da VPN'."
+
+#: etc/inc/priv.defs.inc:1170 etc/inc/priv.defs.inc:1188
+#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1202
+msgid "WebCfg - VPN: VPN L2TP : Users page"
+msgstr "WebCfg - Página VPN: L2TP da VPN: Usuários"
+
+#: etc/inc/priv.defs.inc:1171 etc/inc/priv.defs.inc:1189
+#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1203
+msgid "Allow access to the 'VPN: VPN L2TP : Users' page."
+msgstr "Permitir acesso à página 'VPN: L2TP da VPN: Usuários'."
+
+#: etc/inc/priv.defs.inc:1176 etc/inc/priv.defs.inc:1194
+#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1208
+msgid "WebCfg - VPN: VPN L2TP : Users : Edit page"
+msgstr "WebCfg - Página VPN: L2TP da VPN: Usuários: Editar"
+
+#: etc/inc/priv.defs.inc:1177 etc/inc/priv.defs.inc:1195
+#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1209
+msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page."
+msgstr "Permitir acesso à página 'VPN: L2TP da VPN: Usuários: Editar'."
+
+#: etc/inc/priv.defs.inc:1182 etc/inc/priv.defs.inc:1200
+#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1214
+msgid "WebCfg - OpenVPN: Client page"
+msgstr "WebCfg - Página OpenVPN: Cliente"
+
+#: etc/inc/priv.defs.inc:1183 etc/inc/priv.defs.inc:1201
+#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1215
+msgid "Allow access to the 'OpenVPN: Client' page."
+msgstr "Permitir acesso à página 'OpenVPN: Cliente'."
+
+#: etc/inc/priv.defs.inc:1188 etc/inc/priv.defs.inc:1206
+#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1220
+msgid "WebCfg - OpenVPN: Client Specific Override page"
+msgstr "WebCfg - Página OpenVPN: Substituição Específica de Cliente"
+
+#: etc/inc/priv.defs.inc:1189 etc/inc/priv.defs.inc:1207
+#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1221
+msgid "Allow access to the 'OpenVPN: Client Specific Override' page."
+msgstr "Permitir acesso à página 'OpenVPN: Substituição Específica de Cliente'."
+
+#: etc/inc/priv.defs.inc:1194 etc/inc/priv.defs.inc:1212
+#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1226
+msgid "WebCfg - OpenVPN: Server page"
+msgstr "WebCfg - Página OpenVPN: Servidor"
+
+#: etc/inc/priv.defs.inc:1195 etc/inc/priv.defs.inc:1213
+#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1227
+msgid "Allow access to the 'OpenVPN: Server' page."
+msgstr "Permitir acesso à página 'OpenVPN: Servidor'."
+
+#: etc/inc/priv.defs.inc:1200 etc/inc/priv.defs.inc:1218
+#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1232
+msgid "WebCfg - Services: PPPoE Server page"
+msgstr "WebCfg - Página Serviços: Servidor PPPoE"
+
+#: etc/inc/priv.defs.inc:1201 etc/inc/priv.defs.inc:1219
+#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1233
+msgid "Allow access to the 'Services: PPPoE Server' page."
+msgstr "Permitir acesso à página 'Serviços: Servidor PPPoE'."
+
+#: etc/inc/priv.defs.inc:1206 etc/inc/priv.defs.inc:1224
+#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1238
+msgid "WebCfg - Services: PPPoE Server: Edit page"
+msgstr "WebCfg - Serviços: Servidor PPPoE: Página Editar"
+
+#: etc/inc/priv.defs.inc:1207 etc/inc/priv.defs.inc:1225
+#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1239
+msgid "Allow access to the 'Services: PPPoE Server: Edit' page."
+msgstr "Permitir acesso à página 'Serviços: Servidor PPPoE: Editar'."
+
+#: etc/inc/priv.defs.inc:1212 etc/inc/priv.defs.inc:1230
+#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1244
+msgid "WebCfg - VPN: VPN PPTP page"
+msgstr "WebCfg - Página VPN: PPTP da VPN"
+
+#: etc/inc/priv.defs.inc:1213 etc/inc/priv.defs.inc:1231
+#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1245
+msgid "Allow access to the 'VPN: VPN PPTP' page."
+msgstr "Permitir acesso à página 'VPN: PPTP da VPN'."
+
+#: etc/inc/priv.defs.inc:1218 etc/inc/priv.defs.inc:1236
+#: etc/inc/priv.defs.inc:1242 etc/inc/priv.defs.inc:1250
+msgid "WebCfg - VPN: VPN PPTP: Users page"
+msgstr "WebCfg - Página VPN: PPTP da VPN: Usuários"
+
+#: etc/inc/priv.defs.inc:1219 etc/inc/priv.defs.inc:1237
+#: etc/inc/priv.defs.inc:1243 etc/inc/priv.defs.inc:1251
+msgid "Allow access to the 'VPN: VPN PPTP: Users' page."
+msgstr "Permitir acesso à página 'VPN: PPTP da VPN: Usuários'."
+
+#: etc/inc/priv.defs.inc:1224 etc/inc/priv.defs.inc:1242
+#: etc/inc/priv.defs.inc:1248 etc/inc/priv.defs.inc:1256
+msgid "WebCfg - VPN: VPN PPTP: User: Edit page"
+msgstr "WebCfg - Página VPN: PPTP da VPN: Usuários: Editar"
+
+#: etc/inc/priv.defs.inc:1225 etc/inc/priv.defs.inc:1243
+#: etc/inc/priv.defs.inc:1249 etc/inc/priv.defs.inc:1257
+msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page."
+msgstr "Permitir acesso à página 'VPN: PPTP da VPN: Usuários: Editar'."
+
+#: etc/inc/priv.defs.inc:1230 etc/inc/priv.defs.inc:1248
+#: etc/inc/priv.defs.inc:1254 etc/inc/priv.defs.inc:1262
+msgid "WebCfg - pfSense wizard subsystem page"
+msgstr "WebCfg - Página Subsistema de wizard do pfSense"
+
+#: etc/inc/priv.defs.inc:1231 etc/inc/priv.defs.inc:1249
+#: etc/inc/priv.defs.inc:1255 etc/inc/priv.defs.inc:1263
+msgid "Allow access to the 'pfSense wizard subsystem' page."
+msgstr "Permitir acesso à página 'Subsistema de wizard do pfSense'."
+
+#: etc/inc/priv.defs.inc:1236 etc/inc/priv.defs.inc:1254
+#: etc/inc/priv.defs.inc:1260 etc/inc/priv.defs.inc:1268
+msgid "WebCfg - XMLRPC Library page"
+msgstr "WebCfg - Página Biblioteca XMLRPC"
+
+#: etc/inc/priv.defs.inc:1237 etc/inc/priv.defs.inc:1255
+#: etc/inc/priv.defs.inc:1261 etc/inc/priv.defs.inc:1269
+msgid "Allow access to the 'XMLRPC Library' page."
+msgstr "Permitir acesso à página 'Biblioteca XMLRPC'."
+
+#: etc/inc/rrd.inc:45
+#, php-format
+msgid "RRD dump failed exited with %1$s, the error is: %2$s"
+msgstr "RRD dump falhou ao sair com %1$s, o erro é: %2$s"
+
+#: etc/inc/rrd.inc:56 etc/inc/rrd.inc:92 etc/inc/rrd.inc:96 etc/inc/rrd.inc:98
+#, php-format
+msgid "RRD create failed exited with %1$s, the error is: %2$s"
+msgstr "RRD create falhou ao sair com %1$s, o erro é: %2$s"
+
+#: etc/inc/rrd.inc:70 etc/inc/rrd.inc:106 etc/inc/rrd.inc:110
+#: etc/inc/rrd.inc:113
+#, php-format
+msgid "Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has %3$s DS values and %4$s RRA databases"
+msgstr "Import RRD tem %1$s valores DS e %2$s base de dados RRA, novo formato RRD tem %3$s valores DS e %4$s base de dados RRA"
+
+#: etc/inc/rrd.inc:154 etc/inc/rrd.inc:190 etc/inc/rrd.inc:194
+#: etc/inc/rrd.inc:197
+#, php-format
+msgid "The new RRD now has %1$s DS values and %2$s RRA databases"
+msgstr "O novo RRD agora tem %1$s valores DS e %2$s databases RRA"
+
+#: etc/inc/rrd.inc:162 etc/inc/rrd.inc:198 etc/inc/rrd.inc:202
+#: etc/inc/rrd.inc:205
+msgid "Generating RRD graphs..."
+msgstr "Gerando gráficos RRD..."
+
+#: etc/inc/rrd.inc:247
+#, php-format
+msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr "RRD restore falhou ao sair com %1$s, o erro é: %2$s%3$s"
+
+#: etc/inc/rrd.inc:758 etc/inc/rrd.inc:782 etc/inc/rrd.inc:803
+#: etc/inc/rrd.inc:805 etc/inc/rrd.inc:808 etc/inc/rrd.inc:847
+msgid "Creating rrd update script"
+msgstr "Criando script de atualização rrd"
+
+#: etc/inc/smtp.inc:92
+msgid ": data access time out"
+msgstr ": tempo de expiração de acesso a dados"
+
+#: etc/inc/smtp.inc:95
+msgid ": the server disconnected"
+msgstr ": o servidor desconectou"
+
+#: etc/inc/smtp.inc:107
+msgid "reached the end of data while reading from the SMTP server conection"
+msgstr "atingiu o fim dos dados enquanto lendo da conexão do servidor SMTP"
+
+#: etc/inc/smtp.inc:113
+msgid "it was not possible to read line from the SMTP server"
+msgstr "não foi possível ler linhas do servidor SMTP"
+
+#: etc/inc/smtp.inc:135
+msgid "it was not possible to send a line to the SMTP server"
+msgstr "não foi possível enviar uma linha para o servidor SMTP"
+
+#: etc/inc/smtp.inc:149
+msgid "it was not possible to send data to the SMTP server"
+msgstr "não foi possível enviar dados ao servidor SMTP"
+
+#: etc/inc/smtp.inc:221
+msgid "establishing SSL connections requires at least PHP version 4.3.0"
+msgstr "estabelecer conexões SSL requere pelo menos a versão 4.3.0 do PHP"
+
+#: etc/inc/smtp.inc:224
+msgid "establishing SSL connections requires the OpenSSL extension enabled"
+msgstr "estabelecer conexões SSL requere que a extensão OpenSSL esteja habilitada"
+
+#: etc/inc/smtp.inc:233
+#, php-format
+msgid "could not resolve host \"%s\""
+msgstr "não pôde resolver o host \"%s\""
+
+#: etc/inc/smtp.inc:237
+#, php-format
+msgid "domain \"%s\" resolved to an address excluded to be valid"
+msgstr "domínio \"%s\" resolvido para um endereço excluído de ser válido"
+
+#: etc/inc/smtp.inc:239
+#, php-format
+msgid "Connecting to host address \"%1$s\" port %2$s..."
+msgstr "Conectando ao endereço de host \"%1$s\" porta %2$s..."
+
+#: etc/inc/smtp.inc:246
+msgid "-3 socket could not be created"
+msgstr "-3 socket não pôde ser criado"
+
+#: etc/inc/smtp.inc:248
+#, php-format
+msgid "-4 dns lookup on hostname \"%s\" failed"
+msgstr "-4 dns lookup em nome de host \"%s\" falhou"
+
+#: etc/inc/smtp.inc:250
+msgid "-5 connection refused or timed out"
+msgstr "-5 conexão refugada ou expirada"
+
+#: etc/inc/smtp.inc:252
+msgid "-6 fdopen() call failed"
+msgstr "-6 chamada de fdopen() falhou"
+
+#: etc/inc/smtp.inc:254
+msgid "-7 setvbuf() call failed"
+msgstr "-7 chamada de setvbuf() falhou"
+
+#: etc/inc/smtp.inc:256
+#, php-format
+msgid "could not connect to the host \"%1$s\": %2$s"
+msgstr "não pôde conectar ao host \"%1$s\": %2$s"
+
+#: etc/inc/smtp.inc:265
+msgid "it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded"
+msgstr "não foi possível autenticar usando o mecanismo especificado porque a classe da biblioteca SASL não foi carregada"
+
+#: etc/inc/smtp.inc:289
+#, php-format
+msgid "authenticated mechanism %1$s may not be used: %2$s"
+msgstr "mecanismo autenticado %1$s pode não ser usado: %2$s"
+
+#: etc/inc/smtp.inc:294
+msgid "Could not start the SASL authentication client:"
+msgstr "Não pôde iniciar o cliente de autenticação SASL:"
+
+#: etc/inc/smtp.inc:301
+msgid "Could not send the AUTH command"
+msgstr "Não pôde enviar o comando de Autenticação"
+
+#: etc/inc/smtp.inc:316 etc/inc/smtp.inc:346
+msgid "Authentication error:"
+msgstr "Erro de autenticação:"
+
+#: etc/inc/smtp.inc:331
+msgid "Could not send the authentication step message"
+msgstr "Não pôde enviar a mensagem de passos de autenticação"
+
+#: etc/inc/smtp.inc:351
+msgid "Could not process the SASL authentication step:"
+msgstr "Não pôde processar o passo de autenticação SASL:"
+
+#: etc/inc/smtp.inc:365
+msgid "connection is already established"
+msgstr "conexão já está estabelecida"
+
+#: etc/inc/smtp.inc:403
+msgid "it was not specified the POP3 authentication user"
+msgstr "não foi especificado o usuário de autenticação POP3"
+
+#: etc/inc/smtp.inc:409
+msgid "it was not specified the POP3 authentication password"
+msgstr "não foi especificada a senha de autenticação POP3"
+
+#: etc/inc/smtp.inc:413
+#, php-format
+msgid "Resolving POP3 authentication host \"%s\"..."
+msgstr "Resolvendo host de autenticação POP3 \"%s\"..."
+
+#: etc/inc/smtp.inc:420
+msgid "POP3 authentication server greeting was not found"
+msgstr "Cumprimentos do servidor de autenticação POP3 não foi encontrado"
+
+#: etc/inc/smtp.inc:428
+msgid "POP3 authentication user was not accepted:"
+msgstr "Usuário de autenticação POP3 não foi aceito:"
+
+#: etc/inc/smtp.inc:436
+msgid "POP3 authentication password was not accepted:"
+msgstr "Senha de autenticação POP3 não foi aceita:"
+
+#: etc/inc/smtp.inc:445
+msgid "could not determine the SMTP to connect"
+msgstr "não pôde determinar o SMTP para conectar"
+
+#: etc/inc/smtp.inc:451
+#, php-format
+msgid "Resolving SMTP server domain \"%s\"..."
+msgstr "Resolvendo o domínio do servidor SMTP \"%s\"..."
+
+#: etc/inc/smtp.inc:463
+#, php-format
+msgid "Connected to SMTP server \"%s\"."
+msgstr "Conectado ao servidor SMTP \"%s\"."
+
+#: etc/inc/smtp.inc:517 etc/inc/smtp.inc:519
+msgid "server does not require authentication"
+msgstr "servidor não requere autenticação"
+
+#: etc/inc/smtp.inc:581 etc/inc/smtp.inc:583
+msgid "it is not supported any of the authentication mechanisms required by the server"
+msgstr "não é suportado por nenhum mecanismo de autenticação requerido pelo servidor"
+
+#: etc/inc/smtp.inc:613 etc/inc/smtp.inc:615
+msgid "direct delivery connection is already established and sender is already set"
+msgstr "conexão de entrega direta já está estabelecida e quem envia já esta configurado"
+
+#: etc/inc/smtp.inc:621 etc/inc/smtp.inc:623
+msgid "connection is not in the initial state"
+msgstr "conexão não está no seu estado inicial"
+
+#: etc/inc/smtp.inc:643 etc/inc/smtp.inc:645
+msgid "it was not specified a valid direct recipient"
+msgstr "um destinatário direto válido não foi especificado"
+
+#: etc/inc/smtp.inc:662 etc/inc/smtp.inc:664
+msgid "it is not possible to deliver directly to recipients of different domains"
+msgstr "não foi possível entregar diretamente para destinatários de diferentes domínios"
+
+#: etc/inc/smtp.inc:667 etc/inc/smtp.inc:669
+msgid "connection is already established and the recipient is already set"
+msgstr "conexão já está estabelecida e o destinatário já está configurado"
+
+#: etc/inc/smtp.inc:679 etc/inc/smtp.inc:681
+msgid "connection is not in the recipient setting state"
+msgstr "conexão não está no estado de configuração do destinatário"
+
+#: etc/inc/smtp.inc:708 etc/inc/smtp.inc:710
+msgid "connection is not in the start sending data state"
+msgstr "conexão não está no estado inicial de envio de dados"
+
+#: etc/inc/smtp.inc:738 etc/inc/smtp.inc:749 etc/inc/smtp.inc:740
+#: etc/inc/smtp.inc:751
+msgid "connection is not in the sending data state"
+msgstr "conexão não está no estado de envio de dados"
+
+#: etc/inc/smtp.inc:785 etc/inc/smtp.inc:787
+msgid "it was not previously established a SMTP connection"
+msgstr "não foi previamente estabelecida uma conexão SMTP"
+
+#: etc/inc/upgrade_config.inc:113
+#, php-format
+msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra de filtro removida (interface '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:125
+#, php-format
+msgid "%sWarning: filter rule removed (source network '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra de filtro removida (rede fonte '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:138
+#, php-format
+msgid "%sWarning: filter rule removed (destination network '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra de filtro removida (rede de destino '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:158
+#, php-format
+msgid "%sWarning: traffic shaper rule removed (interface '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (interface '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:170
+#, php-format
+msgid "%sWarning: traffic shaper rule removed (source network '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (rede fonte '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:183
+#, php-format
+msgid "%sWarning: traffic shaper rule removed (destination network '%s' does not exist anymore)."
+msgstr "%sADVERTÊNCIA: regra do Traffic Shaper removida (rede de destino '%s' não existe mais)."
+
+#: etc/inc/upgrade_config.inc:333
+#, php-format
+msgid "CARP vhid %s"
+msgstr "CARP vhid %s"
+
+#: etc/inc/upgrade_config.inc:510
+msgid "Permit IPsec traffic."
+msgstr "Tráfego IPsec permitido."
+
+#: etc/inc/upgrade_config.inc:585
+msgid "System Administrators"
+msgstr "Administradores do Sistema"
+
+#: etc/inc/upgrade_config.inc:604
+msgid "Indicates whether this user will lock access to the webConfigurator for other users."
+msgstr "Indica se esse usuário irá bloquear acesso ao webConfigurator para outros usuários."
+
+#: etc/inc/upgrade_config.inc:607
+msgid "Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form)."
+msgstr "Indica se esse usuário irá bloquear páginas HTMl individuais após acessar uma página em particular (o bloqueio será liberado se o usuário sair ou salvar o formulário da página)."
+
+#: etc/inc/upgrade_config.inc:610
+msgid "Indicates whether this user is able to login for example via SSH."
+msgstr "Indica se esse usuário pode fazer login, por exemplo, via SSH."
+
+#: etc/inc/upgrade_config.inc:613
+#, php-format
+msgid "Indicates whether this user is allowed to copy files onto the %s appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly)."
+msgstr "Indica se esse usuário tem permissão de copiar arquivos no aparelho %s via SCP/SFTP. Se você vai usar esse privilégio, você deve instalar scponly no aparelho (Dica: pkg_add -r scponly)."
+
+#: etc/inc/upgrade_config.inc:616
+msgid "This user is associated with the UNIX root user (you should associate this privilege only with one single user)."
+msgstr "Esse usuário é associado ao usuário root do UNIX (você deve associar esse privilégio somente a um único usuário)."
+
+#: etc/inc/upgrade_config.inc:633
+msgid "Drop packets to closed TCP ports without returning a RST"
+msgstr "Descarta pacotes para portas TCP fechadas sem retornar um RST"
+
+#: etc/inc/upgrade_config.inc:637
+msgid "Do not send ICMP port unreachable messages for closed UDP ports"
+msgstr "Não envie à porta ICMP mensagens inalcansáveis para portas UCP fechadas"
+
+#: etc/inc/upgrade_config.inc:641
+msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)"
+msgstr "Randomize o campo ID em pacotes (o padrão é 0: IDs de IP sequenciais)"
+
+#: etc/inc/upgrade_config.inc:645
+msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"
+msgstr "Descartar pacotes SYN-FIN (falha com a RFC1379, mas, de qualquer maneira, ninguém a usa)"
+
+#: etc/inc/upgrade_config.inc:649
+msgid "Sending of IPv4 ICMP redirects"
+msgstr "Envio de redirecionamentos ICMP de IPv4"
+
+#: etc/inc/upgrade_config.inc:653
+msgid "Sending of IPv6 ICMP redirects"
+msgstr "Envio de redirecionamentos ICMP de IPv6"
+
+#: etc/inc/upgrade_config.inc:657
+msgid "Generate SYN cookies for outbound SYN-ACK packets"
+msgstr "Gerar cookies SYN para pacotes SYN-ACK de outbound"
+
+#: etc/inc/upgrade_config.inc:661
+msgid "Maximum incoming TCP datagram size"
+msgstr "Tamanho máximo de datagrama TCP de entrada"
+
+#: etc/inc/upgrade_config.inc:665
+msgid "Maximum outgoing TCP datagram size"
+msgstr "Tamanho máximo de datagrama TCP de saída"
+
+#: etc/inc/upgrade_config.inc:669
+msgid "Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)"
+msgstr "Fastforwarding (veja http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)"
+
+#: etc/inc/upgrade_config.inc:673
+msgid "Do not delay ACK to try and piggyback it onto a data packet"
+msgstr "Não atrase o ACK para tentar e fazer pingback no pacote de dados"
+
+#: etc/inc/upgrade_config.inc:677
+msgid "Maximum outgoing UDP datagram size"
+msgstr "Tamanho máximo de datagrama UDP de saída"
+
+#: etc/inc/upgrade_config.inc:681
+msgid "Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"
+msgstr "Tratando de pacotes não-IP que não são passados para o pfil (veja if_bridge(4))"
+
+#: etc/inc/upgrade_config.inc:685
+msgid "Allow unprivileged access to tap(4) device nodes"
+msgstr "Permitir acesso sem privilégios a nós de dispositivo tap(4)"
+
+#: etc/inc/upgrade_config.inc:689
+msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+msgstr "Randomizar PID's (veja src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+
+#: etc/inc/upgrade_config.inc:693
+msgid "The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. "
+msgstr "O sistema tentará calcular o produto do atraso da largura de banda para cada conexão e limitar a quantidade de dados enfileirados para a rede para apenas a quantidade necessária para manter o throughput."
+
+#: etc/inc/upgrade_config.inc:697
+msgid "Set ICMP Limits"
+msgstr "Configurar Limites ICMP"
+
+#: etc/inc/upgrade_config.inc:701
+msgid "TCP Offload engine"
+msgstr "Mecanismo TCP Offload"
+
+#: etc/inc/upgrade_config.inc:742
+#, php-format
+msgid "Interface %s Static Gateway"
+msgstr "Interface %s Gateway Estático"
+
+#: etc/inc/upgrade_config.inc:745
+#, php-format
+msgid "Interface %s Dynamic Gateway"
+msgstr "Interface %s Gateway Dinâmico"
+
+#: etc/inc/upgrade_config.inc:810 etc/inc/upgrade_config.inc:811
+#, php-format
+msgid "Upgraded static route for %s"
+msgstr "Atualizar rota estática para %s"
+
+#: etc/inc/upgrade_config.inc:907 etc/inc/upgrade_config.inc:908
+#, php-format
+msgid "Sitedown pool for VS: %s"
+msgstr "Pool de sites indisponíveis para Servidor Virtual: %s"
+
+#: etc/inc/upgrade_config.inc:1060 etc/inc/upgrade_config.inc:1062
+#: etc/inc/upgrade_config.inc:1063
+#, php-format
+msgid "phase2 for %s"
+msgstr "fase2 para %s"
+
+#: etc/inc/upgrade_config.inc:1287 etc/inc/upgrade_config.inc:1289
+#: etc/inc/upgrade_config.inc:1290
+#, php-format
+msgid "Upgraded Dyndns %s"
+msgstr "Atualizar DNS Dinâmico %s"
+
+#: etc/inc/upgrade_config.inc:1339 etc/inc/upgrade_config.inc:1341
+#: etc/inc/upgrade_config.inc:1342
+msgid "All Users"
+msgstr "Todos Usuários"
+
+#: etc/inc/upgrade_config.inc:1471 etc/inc/upgrade_config.inc:1473
+#: etc/inc/upgrade_config.inc:1474
+#, php-format
+msgid "Converted bridged %s"
+msgstr "Converted bridged %s"
+
+#: etc/inc/upgrade_config.inc:1797 etc/inc/upgrade_config.inc:1845
+#: etc/inc/upgrade_config.inc:1847 etc/inc/upgrade_config.inc:1848
+msgid "Auto added OpenVPN rule from config upgrade."
+msgstr "Regra de OpenVPN auto adicionada pela atualização de config."
+
+#: etc/inc/voucher.inc:364 etc/inc/voucher.inc:367 etc/inc/voucher.inc:382
+#, php-format
+msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes"
+msgstr "%1$s (%2$s/%3$s) ativo e válido por %4$d Minutos"
+
+#: etc/inc/voucher.inc:401 etc/inc/voucher.inc:404 etc/inc/voucher.inc:419
+msgid "Access denied!"
+msgstr "Acesso negado!"
+
+#: etc/inc/voucher.inc:403 etc/inc/voucher.inc:406 etc/inc/voucher.inc:421
+#, php-format
+msgid "Access granted for %d Minutes in total."
+msgstr "Acesso garantido por %d minutos no total."
+
+#: etc/inc/voucher.inc:466 etc/inc/voucher.inc:469 etc/inc/voucher.inc:484
+msgid "Enabling voucher support... "
+msgstr "Habilitando suporte a voucher..."
+
+#: etc/inc/voucher.inc:505 etc/inc/voucher.inc:508 etc/inc/voucher.inc:523
+#, php-format
+msgid "Error: cannot write voucher.cfg"
+msgstr "Erro: não pode escrever voicher.cfg"
+
+#: etc/inc/voucher.inc:556 etc/inc/voucher.inc:559 etc/inc/voucher.inc:574
+#, php-format
+msgid "cant write %1$s/voucher_%s_used_%2$s.db"
+msgstr "não pode gravar em %1$s/voucher_%s_used_%2$s.db"
+
+#: etc/inc/voucher.inc:635 etc/inc/voucher.inc:638 etc/inc/voucher.inc:653
+#, php-format
+msgid "cant read %1$s/voucher_%s_used_%2$s.db"
+msgstr "não pode ler %1$s/voucher_%s_used_%2$s.db"
+
+#: etc/inc/voucher.inc:653 etc/inc/voucher.inc:652 etc/inc/voucher.inc:655
+#: etc/inc/voucher.inc:670
+#, php-format
+msgid "Voucher: %s"
+msgstr "Voucher: %s"
+
+#: etc/inc/xmlparse_attr.inc:197
+#, php-format
+msgid "XML error: %1$s at line %2$d"
+msgstr "Erro de XML: %1$s na linha %2$d"
+
+#: etc/inc/xmlreader.inc:129
+#, php-format
+msgid "Error returned while trying to parse %s"
+msgstr "Erro retornado quando tentava analisar %s"
+
+#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236
+#, php-format
+msgid "Merged in config (%s sections) from ZeroMQ client."
+msgstr "Mesclado em config (seções %s) do cliente ZeroMQ."
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_snmp.php:159
+#: usr/local/www/services_wol.php:115 usr/local/www/services_wol_edit.php:112
+#: usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/services_captiveportal.php:63
+#: usr/local/www/services_captiveportal_filemanager.php:75
+#: usr/local/www/services_captiveportal_ip.php:64
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_mac.php:63
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_dhcp.php:421
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/services_dhcp_relay.php:100
+#: usr/local/www/services_dnsmasq.php:119
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/services_captiveportal_hostname.php:66
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/fbegin.inc:171 usr/local/www/fbegin.inc:343
+#: usr/local/www/status_services.php:226
+#: usr/local/www/services_dyndns_edit.php:133
+#: usr/local/www/services_igmpproxy.php:80
+#: usr/local/www/services_rfc2136.php:55
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/vpn_pppoe_edit.php:234 usr/local/www/services_dhcpv6.php:359
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_dyndns_edit.php:156 usr/local/www/fbegin.inc:189
+#: usr/local/www/fbegin.inc:361 usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/services_unbound.php:102
+#: usr/local/www/services_unbound_advanced.php:88
+#: usr/local/www/services_dyndns.php:85 usr/local/www/services_dhcp.php:433
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/services_ntpd.php:71 usr/local/www/services_dhcp_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/services_dhcpv6.php:386
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/fbegin.inc:197 usr/local/www/fbegin.inc:307
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/status_services.php:222
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_dhcp.php:527 usr/local/www/services_ntpd.php:76
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/services_dhcpv6.php:367
+#: usr/local/www/system_authservers.php:187
+#: usr/local/www/status_services.php:220
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dyndns_edit.php:160
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/vpn_pppoe_edit.php:237 usr/local/www/services_dhcp.php:526
+#: usr/local/www/services_dhcpv6.php:362
+#: usr/local/www/system_authservers.php:188 usr/local/www/fbegin.inc:188
+#: usr/local/www/fbegin.inc:299 usr/local/www/services_dnsmasq.php:123
+#: usr/local/www/services_dyndns.php:64 usr/local/www/services_snmp.php:165
+#: usr/local/www/status_services.php:63
+#: usr/local/www/services_router_advertisements.php:189
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dnsmasq.php:125
+#: usr/local/www/services_dyndns.php:60 usr/local/www/services_dnsmasq.php:146
+#: usr/local/www/services_dhcp.php:558
+#: usr/local/www/system_authservers.php:190
+#: usr/local/www/services_rfc2136_edit.php:114
+msgid "Services"
+msgstr "Serviços"
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:72
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:108
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_ipsec.php:109 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_openvpn.php:76
+#: usr/local/www/diag_logs_settings.php:217
+#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/fbegin.inc:130 usr/local/www/fbegin.inc:165
+#: usr/local/www/status_lb_pool.php:62 usr/local/www/status_lb_vs.php:56
+#: usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:222 usr/local/www/fbegin.inc:147
+#: usr/local/www/fbegin.inc:182 usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/diag_logs_resolver.php:85
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:229 usr/local/www/fbegin.inc:156
+#: usr/local/www/fbegin.inc:190 usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/diag_logs_auth.php:73 usr/local/www/diag_logs_ipsec.php:110
+#: usr/local/www/diag_logs_resolver.php:86 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_openvpn.php:77
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_filter.php:98
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_ppp.php:75 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:181 usr/local/www/diag_logs_filter.php:128
+#: usr/local/www/diag_logs_settings.php:248
+msgid "Load Balancer"
+msgstr "Balanc. Carga"
+
+#: usr/local/www/load_balancer_virtual_server.php:94
+#: usr/local/www/load_balancer_virtual_server.php:116
+#: usr/local/www/load_balancer_relay_action.php:127
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/load_balancer_relay_protocol.php:123
+#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_setting.php:119
+#: usr/local/www/load_balancer_virtual_server.php:114
+#: usr/local/www/load_balancer_monitor.php:108
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_pool.php:117
+msgid "Virtual Servers"
+msgstr "Servidores Virtuais"
+
+#: usr/local/www/load_balancer_virtual_server.php:108
+#: usr/local/www/load_balancer_virtual_server.php:106
+msgid "The virtual server configuration has been changed"
+msgstr "A configuração do servidor virtual foi modificada"
+
+#: usr/local/www/load_balancer_virtual_server.php:108
+#: usr/local/www/firewall_shaper_layer7.php:401
+#: usr/local/www/firewall_shaper_vinterface.php:366
+#: usr/local/www/firewall_shaper_wizards.php:96
+#: usr/local/www/firewall_aliases.php:160
+#: usr/local/www/firewall_nat_1to1.php:87
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_shaper.php:403
+#: usr/local/www/firewall_shaper_queues.php:187
+#: usr/local/www/firewall_virtual_ip.php:164 usr/local/www/interfaces.php:1222
+#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86
+#: usr/local/www/vpn_ipsec_mobile.php:303
+#: usr/local/www/load_balancer_monitor.php:102 usr/local/www/vpn_pppoe.php:96
+#: usr/local/www/firewall_nat.php:175 usr/local/www/services_dhcp.php:536
+#: usr/local/www/services_dnsmasq.php:147
+#: usr/local/www/load_balancer_relay_protocol.php:114
+#: usr/local/www/services_igmpproxy.php:90
+#: usr/local/www/system_gateways.php:134 usr/local/www/firewall_nat_npt.php:87
+#: usr/local/www/services_dhcpv6.php:461
+#: usr/local/www/services_captiveportal_zones.php:47
+#: usr/local/www/firewall_nat_out.php:304
+#: usr/local/www/load_balancer_setting.php:111
+#: usr/local/www/services_unbound.php:129
+#: usr/local/www/services_unbound_advanced.php:116
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/services_dhcp.php:549 usr/local/www/firewall_aliases.php:163
+#: usr/local/www/interfaces.php:1326 usr/local/www/services_dhcpv6.php:488
+#: usr/local/www/services_dnsmasq.php:148
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/load_balancer_setting.php:110 usr/local/www/vpn_pppoe.php:97
+#: usr/local/www/vpn_ipsec.php:133 usr/local/www/vpn_ipsec_mobile.php:330
+#: usr/local/www/firewall_nat.php:180 usr/local/www/firewall_shaper.php:404
+#: usr/local/www/vpn_ipsec_keys.php:85
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/load_balancer_virtual_server.php:106
+#: usr/local/www/load_balancer_monitor.php:100
+#: usr/local/www/load_balancer_relay_protocol.php:112
+#: usr/local/www/services_dhcp.php:653 usr/local/www/firewall_aliases.php:167
+#: usr/local/www/interfaces.php:1314
+#: usr/local/www/services_captiveportal_zones.php:48
+#: usr/local/www/firewall_virtual_ip.php:167
+#: usr/local/www/services_dhcpv6.php:468 usr/local/www/vpn_pppoe.php:98
+#: usr/local/www/vpn_ipsec.php:139 usr/local/www/firewall_virtual_ip.php:181
+#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463
+#: usr/local/www/services_dnsmasq.php:152 usr/local/www/interfaces.php:1327
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_queues.php:188
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/services_dhcp.php:675 usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/services_dnsmasq.php:154 usr/local/www/interfaces.php:1369
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/services_dnsmasq.php:175 usr/local/www/interfaces.php:1364
+#: usr/local/www/firewall_virtual_ip.php:211
+#: usr/local/www/services_dhcp.php:687 usr/local/www/interfaces.php:1377
+msgid "You must apply the changes in order for them to take effect."
+msgstr "Você deve aplicar as mudanças para que elas tenham efeito."
+
+#: usr/local/www/load_balancer_virtual_server.php:115
+#: usr/local/www/load_balancer_relay_action.php:126
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_relay_protocol.php:122
+#: usr/local/www/status_lb_pool.php:120 usr/local/www/status_lb_vs.php:67
+#: usr/local/www/load_balancer_setting.php:119
+#: usr/local/www/load_balancer_setting.php:118
+#: usr/local/www/load_balancer_virtual_server.php:113
+#: usr/local/www/load_balancer_monitor.php:107
+#: usr/local/www/load_balancer_relay_protocol.php:120
+#: usr/local/www/load_balancer_relay_action.php:124
+#: usr/local/www/load_balancer_pool.php:116
+msgid "Pools"
+msgstr "Pools"
+
+#: usr/local/www/load_balancer_virtual_server.php:117
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_pool.php:120
+#: usr/local/www/load_balancer_monitor.php:111
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_virtual_server.php:115
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_relay_protocol.php:119
+#: usr/local/www/load_balancer_relay_action.php:123
+#: usr/local/www/load_balancer_pool.php:118
+msgid "Monitors"
+msgstr "Monitores"
+
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/firewall_shaper_layer7.php:466
+#: usr/local/www/interfaces_bridge_edit.php:291
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:185
+#: usr/local/www/firewall_nat_edit.php:518
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:808
+#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/diag_ipsec_spd.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:424
+#: usr/local/www/status_upnp.php:86
+#: usr/local/www/services_rfc2136_edit.php:186
+#: usr/local/www/system_advanced_admin.php:300
+#: usr/local/www/vpn_ipsec_phase2.php:516
+#: usr/local/www/vpn_openvpn_client.php:421
+#: usr/local/www/vpn_openvpn_client.php:861
+#: usr/local/www/vpn_openvpn_server.php:656
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/load_balancer_relay_action_edit.php:423
+#: usr/local/www/firewall_rules_edit.php:843
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/vpn_openvpn_server.php:729
+#: usr/local/www/interfaces_bridge_edit.php:300
+#: usr/local/www/diag_packet_capture.php:160
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/firewall_nat_edit.php:525
+#: usr/local/www/vpn_openvpn_client.php:426
+#: usr/local/www/vpn_openvpn_client.php:866
+#: usr/local/www/load_balancer_relay_action_edit.php:421
+#: usr/local/www/diag_ipsec_sad.php:90
+#: usr/local/www/load_balancer_virtual_server.php:128
+#: usr/local/www/vpn_openvpn_server.php:747 usr/local/www/status_upnp.php:87
+#: usr/local/www/interfaces_bridge_edit.php:301
+#: usr/local/www/diag_packet_capture.php:207
+#: usr/local/www/vpn_ipsec_phase2.php:644
+#: usr/local/www/firewall_nat_edit.php:524
+#: usr/local/www/vpn_openvpn_client.php:434
+#: usr/local/www/vpn_openvpn_client.php:919
+#: usr/local/www/diag_ipsec_spd.php:90
+#: usr/local/www/vpn_openvpn_client.php:452
+#: usr/local/www/vpn_openvpn_client.php:938
+#: usr/local/www/firewall_rules_edit.php:846
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:519
+#: usr/local/www/interfaces_bridge_edit.php:302
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:473
+#: usr/local/www/vpn_openvpn_server.php:773
+#: usr/local/www/vpn_ipsec_phase2.php:665
+#: usr/local/www/firewall_rules_edit.php:858
+#: usr/local/www/diag_logs_filter.php:171
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:857
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/interfaces_bridge_edit.php:304
+#: usr/local/www/firewall_rules_edit.php:905
+#: usr/local/www/system_advanced_admin.php:321
+#: usr/local/www/services_rfc2136_edit.php:191
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/diag_tables.php:133
+#: usr/local/www/interfaces_ppps_edit.php:660
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:195
+#: usr/local/www/system_advanced_notifications.php:185
+#: usr/local/www/diag_tables.php:132
+#: usr/local/www/system_advanced_notifications.php:194
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/load_balancer_virtual_server_edit.php:169
+#: usr/local/www/interfaces_ppps_edit.php:661
+#: usr/local/www/load_balancer_virtual_server.php:129
+#: usr/local/www/load_balancer_virtual_server_edit.php:167
+#: usr/local/www/interfaces_ppps_edit.php:667 usr/local/www/diag_dns.php:153
+#: usr/local/www/interfaces_ppps_edit.php:665
+#: usr/local/www/system_advanced_notifications.php:216
+msgid "IP Address"
+msgstr "Endereço IP"
+
+#: usr/local/www/load_balancer_virtual_server.php:131
+#: usr/local/www/diag_packet_capture.php:165
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_rules.php:365 usr/local/www/firewall_rules.php:367
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:203
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:202
+#: usr/local/www/services_captiveportal.php:607
+#: usr/local/www/services_captiveportal.php:628
+#: usr/local/www/services_captiveportal.php:647
+#: usr/local/www/services_captiveportal.php:666
+#: usr/local/www/status_upnp.php:85
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_rules.php:369 usr/local/www/firewall_rules.php:371
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/services_captiveportal.php:643
+#: usr/local/www/services_captiveportal.php:664
+#: usr/local/www/services_captiveportal.php:686
+#: usr/local/www/services_captiveportal.php:705
+#: usr/local/www/load_balancer_virtual_server_edit.php:183
+#: usr/local/www/diag_packet_capture.php:185
+#: usr/local/www/load_balancer_pool_edit.php:211
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_rules.php:362 usr/local/www/firewall_rules.php:364
+#: usr/local/www/load_balancer_virtual_server.php:130
+#: usr/local/www/services_captiveportal.php:641
+#: usr/local/www/services_captiveportal.php:662
+#: usr/local/www/services_captiveportal.php:684
+#: usr/local/www/services_captiveportal.php:703
+#: usr/local/www/status_upnp.php:86
+#: usr/local/www/load_balancer_virtual_server_edit.php:181
+#: usr/local/www/diag_packet_capture.php:232
+#: usr/local/www/load_balancer_pool_edit.php:209
+#: usr/local/www/load_balancer_pool.php:133 usr/local/www/diag_testport.php:60
+#: usr/local/www/diag_testport.php:123
+#: usr/local/www/services_captiveportal.php:642
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:685
+#: usr/local/www/services_captiveportal.php:704
+#: usr/local/www/diag_packet_capture.php:248
+#: usr/local/www/firewall_rules.php:360
+#: usr/local/www/services_captiveportal.php:658
+#: usr/local/www/services_captiveportal.php:679
+#: usr/local/www/services_captiveportal.php:701
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/firewall_aliases_edit.php:486
+#: usr/local/www/firewall_aliases_edit.php:485
+msgid "Port"
+msgstr "Porta"
+
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_pool.php:97
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/status_lb_pool.php:62
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/load_balancer_virtual_server.php:131
+msgid "Pool"
+msgstr "Pool"
+
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/load_balancer_virtual_server_edit.php:228
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/load_balancer_virtual_server_edit.php:217
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:215
+msgid "Fall Back Pool"
+msgstr "Pool de Fall Back"
+
+#: usr/local/www/diag_tables.php:44 usr/local/www/diag_defaults.php:58
+#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_nanobsd.php:49
+#: usr/local/www/diag_packet_capture.php:41
+#: usr/local/www/crash_reporter.php:82
+#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:499
+#: usr/local/www/diag_confbak.php:98 usr/local/www/halt.php:59
+#: usr/local/www/diag_smart.php:14 usr/local/www/diag_states_summary.php:185
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/diag_patterns.php:58 usr/local/www/diag_dns.php:34
+#: usr/local/www/reboot.php:51 usr/local/www/edit.php:39
+#: usr/local/www/diag_ping.php:43 usr/local/www/diag_resetstate.php:64
+#: usr/local/www/diag_routes.php:45 usr/local/www/diag_traceroute.php:45
+#: usr/local/www/exec.php:91 usr/local/www/fbegin.inc:367
+#: usr/local/www/diag_arp.php:261 usr/local/www/diag_ndp.php:103
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+#: usr/local/www/diag_dump_states_sources.php:65 usr/local/www/fbegin.inc:385
+#: usr/local/www/diag_backup.php:576 usr/local/www/reboot.php:48
+#: usr/local/www/edit.php:42 usr/local/www/diag_dump_states.php:75
+#: usr/local/www/halt.php:54 usr/local/www/diag_states_summary.php:174
+#: usr/local/www/fbegin.inc:331 usr/local/www/diag_sockets.php:44
+#: usr/local/www/exec.php:93 usr/local/www/diag_packet_capture.php:43
+#: usr/local/www/diag_states_summary.php:176
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_defaults.php:52
+#: usr/local/www/diag_backup.php:581 usr/local/www/edit.php:41
+#: usr/local/www/fbegin.inc:323 usr/local/www/diag_dump_states.php:67
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/diag_traceroute.php:46 usr/local/www/diag_ping.php:44
+#: usr/local/www/diag_backup.php:582
+msgid "Diagnostics"
+msgstr "Diagnósticos"
+
+#: usr/local/www/diag_tables.php:44 usr/local/www/fbegin.inc:199
+#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:225
+#: usr/local/www/fbegin.inc:216
+msgid "Tables"
+msgstr "Tabelas"
+
+#: usr/local/www/diag_tables.php:86 usr/local/www/diag_tables.php:87
+msgid "The bogons database has been updated."
+msgstr "O banco de dados bogons foi atualizado."
+
+#: usr/local/www/diag_tables.php:118 usr/local/www/diag_tables.php:117
+msgid "Table:"
+msgstr "Tabela:"
+
+#: usr/local/www/diag_tables.php:152 usr/local/www/diag_tables.php:151
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:155
+msgid "No entries exist in this table."
+msgstr "Não existe entradas nesta tabela."
+
+#: usr/local/www/diag_tables.php:160 usr/local/www/diag_backup.php:163
+#: usr/local/www/exec.php:273 usr/local/www/exec.php:283
+#: usr/local/www/system_firmware_restorefullbackup.php:166
+#: usr/local/www/diag_tables.php:159 usr/local/www/diag_backup.php:250
+#: usr/local/www/exec.php:275 usr/local/www/exec.php:285
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+#: usr/local/www/diag_backup.php:251
+msgid "Download"
+msgstr "Download"
+
+#: usr/local/www/diag_tables.php:160 usr/local/www/diag_tables.php:159
+#: usr/local/www/diag_tables.php:153 usr/local/www/diag_tables.php:162
+msgid " the latest bogon data."
+msgstr " dados de bogon mais recente."
+
+#: usr/local/www/diag_tables.php:162
+#: usr/local/www/firewall_shaper_layer7.php:576
+#: usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/system_firmware_restorefullbackup.php:163
+#: usr/local/www/diag_tables.php:161 usr/local/www/services_dhcpv6.php:853
+#: usr/local/www/services_dhcpv6.php:784 usr/local/www/diag_tables.php:165
+#: usr/local/www/services_dhcpv6.php:801
+#: usr/local/www/firewall_shaper_layer7.php:571
+msgid "Delete"
+msgstr "Excluir"
+
+#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161
+#: usr/local/www/diag_tables.php:165
+msgid "all"
+msgstr "todos"
+
+#: usr/local/www/diag_tables.php:162 usr/local/www/diag_tables.php:161
+#: usr/local/www/diag_tables.php:165
+msgid "entries in this table."
+msgstr "entradas nesta tabela."
+
+#: usr/local/www/pkg_edit.php:61 usr/local/www/pkg.php:51
+#: usr/local/www/pkg.php:55 usr/local/www/pkg_edit.php:69
+msgid "ERROR: No package defined."
+msgstr "ERRO: Nenhum pacote definido."
+
+#: usr/local/www/pkg_edit.php:256
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/services_wol_edit.php:112
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_rules_edit.php:628
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_wireless_edit.php:145
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:153
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/vpn_pppoe_edit.php:234
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145 usr/local/www/pkg_edit.php:251
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/load_balancer_pool_edit.php:159
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144 usr/local/www/pkg_edit.php:254
+#: usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/vpn_pppoe_edit.php:237
+#: usr/local/www/interfaces_bridge_edit.php:236
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_nat_edit.php:452
+#: usr/local/www/firewall_rules_edit.php:724
+#: usr/local/www/firewall_virtual_ip_edit.php:277
+#: usr/local/www/services_rfc2136_edit.php:114
+msgid "Edit"
+msgstr "Editar"
+
+#: usr/local/www/pkg_edit.php:260 usr/local/www/pkg_edit.php:255
+#: usr/local/www/pkg_edit.php:258
+msgid "Package Editor"
+msgstr "Editor de Pacote"
+
+#: usr/local/www/pkg_edit.php:405
+#: usr/local/www/firewall_aliases_import.php:154
+#: usr/local/www/firewall_shaper_layer7.php:569
+#: usr/local/www/firewall_shaper_vinterface.php:307
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:546
+#: usr/local/www/diag_logs_settings.php:321 usr/local/www/diag_nanobsd.php:219
+#: usr/local/www/services_snmp.php:400 usr/local/www/services_wol_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:583
+#: usr/local/www/interfaces_gif_edit.php:218
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:322
+#: usr/local/www/firewall_aliases_edit.php:686
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:846
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1480
+#: usr/local/www/firewall_schedule_edit.php:1156
+#: usr/local/www/firewall_shaper.php:349 usr/local/www/interfaces.php:2443
+#: usr/local/www/interfaces_assign.php:501 usr/local/www/diag_smart.php:219
+#: usr/local/www/system.php:447 usr/local/www/interfaces_vlan_edit.php:189
+#: usr/local/www/system_firmware_settings.php:238
+#: usr/local/www/system_routes_edit.php:275 usr/local/www/vpn_ipsec.php:168
+#: usr/local/www/vpn_ipsec_keys_edit.php:144
+#: usr/local/www/vpn_ipsec_mobile.php:608
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/interfaces_ppps_edit.php:783
+#: usr/local/www/interfaces_qinq_edit.php:394
+#: usr/local/www/interfaces_wireless_edit.php:195
+#: usr/local/www/load_balancer_monitor_edit.php:356
+#: usr/local/www/load_balancer_pool_edit.php:311 usr/local/www/edit.php:181
+#: usr/local/www/services_captiveportal.php:923
+#: usr/local/www/services_captiveportal_ip_edit.php:231
+#: usr/local/www/services_captiveportal_mac_edit.php:203
+#: usr/local/www/services_dhcp.php:871
+#: usr/local/www/services_dhcp_edit.php:251
+#: usr/local/www/services_dhcp_relay.php:189
+#: usr/local/www/services_dnsmasq.php:209
+#: usr/local/www/services_dnsmasq_edit.php:172 usr/local/www/vpn_pptp.php:472
+#: usr/local/www/vpn_pptp_users_edit.php:168
+#: usr/local/www/load_balancer_relay_action_edit.php:557
+#: usr/local/www/load_balancer_relay_protocol_edit.php:280
+#: usr/local/www/pkg_mgr_settings.php:120
+#: usr/local/www/services_captiveportal_hostname_edit.php:203
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers_edit.php:207
+#: usr/local/www/status_rrd_graph_settings.php:225
+#: usr/local/www/services_dyndns_edit.php:236
+#: usr/local/www/services_igmpproxy.php:155
+#: usr/local/www/services_igmpproxy_edit.php:280
+#: usr/local/www/services_rfc2136_edit.php:200
+#: usr/local/www/status_lb_pool.php:217
+#: usr/local/www/system_advanced_admin.php:535
+#: usr/local/www/system_advanced_firewall.php:416
+#: usr/local/www/system_advanced_misc.php:442
+#: usr/local/www/system_advanced_network.php:304
+#: usr/local/www/system_advanced_notifications.php:93
+#: usr/local/www/system_advanced_notifications.php:254
+#: usr/local/www/system_advanced_sysctl.php:104
+#: usr/local/www/system_advanced_sysctl.php:257
+#: usr/local/www/system_authservers.php:724
+#: usr/local/www/system_camanager.php:359
+#: usr/local/www/system_camanager.php:552
+#: usr/local/www/system_certmanager.php:155
+#: usr/local/www/system_certmanager.php:469
+#: usr/local/www/system_certmanager.php:787
+#: usr/local/www/system_crlmanager.php:294
+#: usr/local/www/system_crlmanager.php:387
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateways_edit.php:492
+#: usr/local/www/system_groupmanager.php:390
+#: usr/local/www/system_groupmanager_addprivs.php:224
+#: usr/local/www/system_usermanager.php:774
+#: usr/local/www/system_usermanager_addprivs.php:205
+#: usr/local/www/system_usermanager_passwordmg.php:119
+#: usr/local/www/system_usermanager_settings.php:161
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124
+#: usr/local/www/vpn_ipsec_phase1.php:855
+#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/vpn_l2tp.php:445
+#: usr/local/www/vpn_l2tp_users_edit.php:176
+#: usr/local/www/vpn_openvpn_client.php:845
+#: usr/local/www/vpn_openvpn_csc.php:658
+#: usr/local/www/vpn_openvpn_server.php:1433
+#: usr/local/www/vpn_pppoe_edit.php:589
+#: usr/local/www/firewall_nat_npt_edit.php:270
+#: usr/local/www/services_dhcpv6.php:784
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/services_dhcpv6_relay.php:190
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/services_unbound_acls.php:101
+#: usr/local/www/services_unbound_acls.php:306
+#: usr/local/www/diag_logs_settings.php:328
+#: usr/local/www/system_gateway_groups_edit.php:283
+#: usr/local/www/services_captiveportal_vouchers.php:604
+#: usr/local/www/services_dyndns_edit.php:366
+#: usr/local/www/firewall_nat_out.php:330
+#: usr/local/www/services_dnsmasq_edit.php:284
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dhcpv6_edit.php:237
+#: usr/local/www/firewall_nat_npt_edit.php:275
+#: usr/local/www/load_balancer_setting.php:161
+#: usr/local/www/status_rrd_graph_settings.php:226
+#: usr/local/www/pkg_edit.php:413 usr/local/www/firewall_nat_out_edit.php:662
+#: usr/local/www/system_certmanager.php:183
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_certmanager.php:953
+#: usr/local/www/load_balancer_relay_action_edit.php:556
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/services_unbound.php:245
+#: usr/local/www/system_usermanager.php:772
+#: usr/local/www/services_igmpproxy_edit.php:282
+#: usr/local/www/system_advanced_firewall.php:475
+#: usr/local/www/firewall_aliases_edit.php:691
+#: usr/local/www/system_advanced_notifications.php:96
+#: usr/local/www/system_advanced_notifications.php:281
+#: usr/local/www/system_advanced_misc.php:485
+#: usr/local/www/firewall_shaper_vinterface.php:317
+#: usr/local/www/system_groupmanager_addprivs.php:222
+#: usr/local/www/edit.php:184 usr/local/www/services_captiveportal.php:968
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/vpn_openvpn_server.php:1575
+#: usr/local/www/services_dhcp.php:909 usr/local/www/services_ntpd.php:121
+#: usr/local/www/interfaces_bridge_edit.php:592
+#: usr/local/www/system_camanager.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:674
+#: usr/local/www/firewall_nat_edit.php:854
+#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:2644
+#: usr/local/www/vpn_openvpn_client.php:850
+#: usr/local/www/load_balancer_pool_edit.php:328
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/services_snmp.php:414 usr/local/www/system.php:476
+#: usr/local/www/interfaces_gre_edit.php:228
+#: usr/local/www/vpn_ipsec_phase1.php:868 usr/local/www/diag_nanobsd.php:218
+#: usr/local/www/services_dhcpv6.php:574 usr/local/www/services_dhcpv6.php:879
+#: usr/local/www/vpn_pppoe_edit.php:590
+#: usr/local/www/system_routes_edit.php:316
+#: usr/local/www/diag_logs_settings.php:348
+#: usr/local/www/system_gateway_groups_edit.php:343
+#: usr/local/www/interfaces_vlan_edit.php:190
+#: usr/local/www/services_dnsmasq.php:210
+#: usr/local/www/services_captiveportal_vouchers.php:618
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/services_captiveportal_vouchers_edit.php:205
+#: usr/local/www/firewall_nat_1to1_edit.php:464
+#: usr/local/www/services_dhcpv6_edit.php:239
+#: usr/local/www/services_router_advertisements.php:400
+#: usr/local/www/firewall_nat_npt_edit.php:274
+#: usr/local/www/load_balancer_setting.php:160 usr/local/www/vpn_ipsec.php:167
+#: usr/local/www/services_dhcp_relay.php:190
+#: usr/local/www/services_captiveportal_hostname_edit.php:201
+#: usr/local/www/vpn_ipsec_mobile.php:657 usr/local/www/pkg_edit.php:416
+#: usr/local/www/interfaces_qinq_edit.php:395
+#: usr/local/www/interfaces_gif_edit.php:219
+#: usr/local/www/firewall_shaper.php:350
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/services_captiveportal_mac_edit.php:201
+#: usr/local/www/firewall_schedule_edit.php:1155
+#: usr/local/www/interfaces_ppps_edit.php:784
+#: usr/local/www/system_crlmanager.php:295
+#: usr/local/www/system_crlmanager.php:388
+#: usr/local/www/system_crlmanager.php:420
+#: usr/local/www/firewall_aliases_edit.php:694 usr/local/www/vpn_pptp.php:474
+#: usr/local/www/interfaces_lagg_edit.php:219
+#: usr/local/www/vpn_openvpn_csc.php:657
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/firewall_shaper_vinterface.php:319
+#: usr/local/www/services_captiveportal.php:964
+#: usr/local/www/system_gateways_edit.php:627
+#: usr/local/www/services_dhcpv6_relay.php:191
+#: usr/local/www/system_usermanager_passwordmg.php:120
+#: usr/local/www/interfaces_assign.php:495
+#: usr/local/www/services_captiveportal_ip_edit.php:229
+#: usr/local/www/vpn_openvpn_server.php:1616
+#: usr/local/www/services_dhcp.php:1113
+#: usr/local/www/system_firmware_settings.php:251
+#: usr/local/www/services_ntpd.php:151
+#: usr/local/www/interfaces_bridge_edit.php:593
+#: usr/local/www/interfaces_groups_edit.php:323
+#: usr/local/www/vpn_ipsec_phase2.php:770
+#: usr/local/www/firewall_nat_edit.php:853
+#: usr/local/www/vpn_pptp_users_edit.php:169
+#: usr/local/www/vpn_ipsec_keys_edit.php:143
+#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:2632
+#: usr/local/www/vpn_openvpn_client.php:903
+#: usr/local/www/load_balancer_pool_edit.php:326
+#: usr/local/www/vpn_l2tp_users_edit.php:177 usr/local/www/vpn_l2tp.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/services_snmp.php:415 usr/local/www/system.php:469
+#: usr/local/www/vpn_ipsec_phase1.php:865 usr/local/www/diag_nanobsd.php:209
+#: usr/local/www/diag_nanobsd.php:277 usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/system_authservers.php:729 usr/local/www/vpn_l2tp.php:449
+#: usr/local/www/system_gateways_edit.php:632
+#: usr/local/www/system_camanager.php:366
+#: usr/local/www/system_camanager.php:577
+#: usr/local/www/services_captiveportal_ip_edit.php:223
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/vpn_openvpn_client.php:922
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1566
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:790 usr/local/www/vpn_ipsec.php:173
+#: usr/local/www/system_firmware_settings.php:260
+#: usr/local/www/interfaces_lagg_edit.php:232
+#: usr/local/www/firewall_nat_edit.php:849
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/diag_smart.php:240
+#: usr/local/www/services_captiveportal_vouchers.php:627
+#: usr/local/www/vpn_pppoe_edit.php:593 usr/local/www/services_dhcp.php:1126
+#: usr/local/www/system_certmanager.php:186
+#: usr/local/www/system_certmanager.php:577
+#: usr/local/www/system_certmanager.php:995
+#: usr/local/www/system_advanced_misc.php:546
+#: usr/local/www/services_captiveportal_mac_edit.php:214
+#: usr/local/www/services_dhcpv6.php:827
+#: usr/local/www/system_usermanager_passwordmg.php:125
+#: usr/local/www/system_authservers.php:745
+#: usr/local/www/system_advanced_firewall.php:537
+#: usr/local/www/services_captiveportal.php:966 usr/local/www/vpn_pptp.php:477
+#: usr/local/www/pkg_edit.php:420 usr/local/www/edit.php:185
+#: usr/local/www/interfaces_bridge_edit.php:594
+#: usr/local/www/services_dnsmasq.php:235
+#: usr/local/www/vpn_ipsec_phase1.php:886
+#: usr/local/www/firewall_nat_out_edit.php:664
+#: usr/local/www/vpn_openvpn_server.php:1668
+#: usr/local/www/vpn_ipsec_phase2.php:791 usr/local/www/services_snmp.php:430
+#: usr/local/www/interfaces_qinq_edit.php:398
+#: usr/local/www/interfaces.php:2664
+#: usr/local/www/firewall_shaper_layer7.php:565
+#: usr/local/www/services_router_advertisements.php:395
+#: usr/local/www/system_gateways_edit.php:634
+#: usr/local/www/services_dyndns_edit.php:378
+#: usr/local/www/firewall_rules_edit.php:1128
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/system_firmware_settings.php:266 usr/local/www/system.php:467
+#: usr/local/www/firewall_nat_edit.php:889
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/services_dhcp.php:1146
+#: usr/local/www/system_certmanager.php:578
+#: usr/local/www/system_certmanager.php:999
+#: usr/local/www/system_advanced_misc.php:667
+#: usr/local/www/system_routes_edit.php:339
+#: usr/local/www/firewall_nat_out.php:338
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/system_advanced_firewall.php:538
+#: usr/local/www/services_captiveportal.php:982
+#: usr/local/www/firewall_aliases_edit.php:725
+#: usr/local/www/pkg_mgr_settings.php:123
+#: usr/local/www/system_usermanager_settings.php:164
+#: usr/local/www/services_dnsmasq.php:248
+#: usr/local/www/system_advanced_network.php:305
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/diag_nanobsd.php:200 usr/local/www/interfaces.php:2710
+#: usr/local/www/system_gateways_edit.php:664
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/interfaces_ppps_edit.php:787
+#: usr/local/www/interfaces_lagg_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/system_routes_edit.php:349
+#: usr/local/www/firewall_nat_out.php:337
+#: usr/local/www/interfaces_groups_edit.php:320 usr/local/www/pkg_edit.php:422
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/services_dnsmasq.php:312 usr/local/www/interfaces.php:2699
+#: usr/local/www/system_gateways_edit.php:665
+#: usr/local/www/services_captiveportal_vouchers.php:632
+#: usr/local/www/system_routes_edit.php:351
+#: usr/local/www/system_groupmanager.php:393
+#: usr/local/www/diag_logs_settings.php:379
+#: usr/local/www/services_dyndns_edit.php:379
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1661
+#: usr/local/www/firewall_virtual_ip_edit.php:496
+#: usr/local/www/services_dhcp.php:1158
+#: usr/local/www/system_advanced_admin.php:572
+#: usr/local/www/system_advanced_misc.php:685
+#: usr/local/www/system_authservers.php:787
+#: usr/local/www/system_advanced_firewall.php:559
+#: usr/local/www/firewall_aliases_edit.php:724
+#: usr/local/www/system_advanced_notifications.php:98
+#: usr/local/www/system_advanced_notifications.php:328
+#: usr/local/www/services_rfc2136_edit.php:212
+#: usr/local/www/interfaces.php:2735
+msgid "Save"
+msgstr "Salvar"
+
+#: usr/local/www/pkg_edit.php:415 usr/local/www/firewall_rules_edit.php:1077
+#: usr/local/www/pkg_edit.php:424 usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/pkg_edit.php:427 usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/pkg_edit.php:431 usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_rules_edit.php:1139 usr/local/www/pkg_edit.php:433
+#: usr/local/www/firewall_rules_edit.php:1187
+msgid "Advanced features"
+msgstr "Recursos avançados"
+
+#: usr/local/www/pkg_edit.php:817 usr/local/www/firewall_shaper_layer7.php:65
+#: usr/local/www/diag_packet_capture.php:203 usr/local/www/vpn_ipsec.php:422
+#: usr/local/www/interfaces_wireless.php:133 usr/local/www/vpn_pptp.php:477
+#: usr/local/www/status_graph.php:291 usr/local/www/carp_status.php:194
+#: usr/local/www/status_queues.php:172 usr/local/www/status_graph_cpu.php:53
+#: usr/local/www/vpn_pppoe_edit.php:595 usr/local/www/vpn_ipsec.php:433
+#: usr/local/www/status_graph.php:286 usr/local/www/pkg_edit.php:864
+#: usr/local/www/status_queues.php:180
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/carp_status.php:187
+#: usr/local/www/vpn_ipsec.php:432 usr/local/www/status_graph.php:297
+#: usr/local/www/pkg_edit.php:873 usr/local/www/status_queues.php:181
+#: usr/local/www/vpn_pptp.php:479 usr/local/www/interfaces_wireless.php:134
+#: usr/local/www/diag_packet_capture.php:270 usr/local/www/vpn_ipsec.php:438
+#: usr/local/www/status_graph.php:308
+#: usr/local/www/interfaces_wireless.php:136
+#: usr/local/www/vpn_pppoe_edit.php:599 usr/local/www/vpn_pptp.php:482
+#: usr/local/www/pkg_edit.php:917 usr/local/www/status_queues.php:163
+#: usr/local/www/status_graph.php:330
+#: usr/local/www/diag_packet_capture.php:208
+#: usr/local/www/diag_packet_capture.php:288 usr/local/www/pkg_edit.php:921
+#: usr/local/www/status_queues.php:185
+msgid "Note"
+msgstr "Nota"
+
+#: usr/local/www/pkg_edit.php:823 usr/local/www/pkg_edit.php:835
+#: usr/local/www/firewall_aliases_import.php:155
+#: usr/local/www/firewall_shaper_layer7.php:573
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:546
+#: usr/local/www/services_wol_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:583
+#: usr/local/www/interfaces_gif_edit.php:218
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:323
+#: usr/local/www/firewall_aliases_edit.php:687
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:846
+#: usr/local/www/firewall_nat_out_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1480
+#: usr/local/www/firewall_schedule_edit.php:1157
+#: usr/local/www/interfaces.php:1443 usr/local/www/interfaces.php:1549
+#: usr/local/www/interfaces.php:2444
+#: usr/local/www/interfaces_vlan_edit.php:189
+#: usr/local/www/system_routes_edit.php:255
+#: usr/local/www/system_routes_edit.php:275
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/interfaces_ppps_edit.php:784
+#: usr/local/www/interfaces_qinq_edit.php:395
+#: usr/local/www/interfaces_wireless_edit.php:195
+#: usr/local/www/load_balancer_monitor_edit.php:356
+#: usr/local/www/load_balancer_pool_edit.php:312
+#: usr/local/www/load_balancer_virtual_server_edit.php:280
+#: usr/local/www/services_captiveportal.php:924
+#: usr/local/www/services_dhcp_edit.php:251
+#: usr/local/www/services_dnsmasq_edit.php:172
+#: usr/local/www/load_balancer_relay_action_edit.php:557
+#: usr/local/www/load_balancer_relay_protocol_edit.php:280
+#: usr/local/www/services_captiveportal_vouchers.php:598
+#: usr/local/www/services_dyndns_edit.php:237
+#: usr/local/www/services_igmpproxy_edit.php:281
+#: usr/local/www/services_rfc2136_edit.php:201
+#: usr/local/www/system_advanced_sysctl.php:258
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateways_edit.php:492
+#: usr/local/www/system_groupmanager_addprivs.php:225
+#: usr/local/www/system_usermanager_addprivs.php:206
+#: usr/local/www/vpn_l2tp_users_edit.php:177
+#: usr/local/www/vpn_pppoe_edit.php:590
+#: usr/local/www/firewall_nat_npt_edit.php:270
+#: usr/local/www/services_dhcpv6_edit.php:228
+#: usr/local/www/system_routes_edit.php:287
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/services_unbound_acls.php:306
+#: usr/local/www/system_gateway_groups_edit.php:283
+#: usr/local/www/services_captiveportal_vouchers.php:605
+#: usr/local/www/services_dyndns_edit.php:367
+#: usr/local/www/services_dnsmasq_edit.php:284
+#: usr/local/www/firewall_nat_1to1_edit.php:466
+#: usr/local/www/services_dhcpv6_edit.php:237
+#: usr/local/www/firewall_nat_npt_edit.php:275 usr/local/www/pkg_edit.php:870
+#: usr/local/www/firewall_nat_out_edit.php:662
+#: usr/local/www/load_balancer_relay_action_edit.php:556
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/services_igmpproxy_edit.php:283
+#: usr/local/www/firewall_aliases_edit.php:692
+#: usr/local/www/system_groupmanager_addprivs.php:223
+#: usr/local/www/services_captiveportal.php:969
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/load_balancer_virtual_server_edit.php:269
+#: usr/local/www/interfaces_bridge_edit.php:592
+#: usr/local/www/firewall_nat_edit.php:854
+#: usr/local/www/services_dhcp_edit.php:260 usr/local/www/interfaces.php:1655
+#: usr/local/www/interfaces.php:2645
+#: usr/local/www/load_balancer_pool_edit.php:329
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/interfaces_gre_edit.php:228
+#: usr/local/www/vpn_pppoe_edit.php:591
+#: usr/local/www/system_routes_edit.php:288
+#: usr/local/www/system_routes_edit.php:316
+#: usr/local/www/system_gateway_groups_edit.php:343
+#: usr/local/www/interfaces_vlan_edit.php:190
+#: usr/local/www/services_captiveportal_vouchers.php:619
+#: usr/local/www/services_dnsmasq_edit.php:285
+#: usr/local/www/load_balancer_relay_protocol_edit.php:278
+#: usr/local/www/firewall_nat_1to1_edit.php:464
+#: usr/local/www/services_dhcpv6_edit.php:239
+#: usr/local/www/firewall_nat_npt_edit.php:274 usr/local/www/pkg_edit.php:879
+#: usr/local/www/interfaces_qinq_edit.php:396
+#: usr/local/www/interfaces_gif_edit.php:219
+#: usr/local/www/load_balancer_relay_action_edit.php:554
+#: usr/local/www/load_balancer_monitor_edit.php:354
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:160
+#: usr/local/www/firewall_schedule_edit.php:1156
+#: usr/local/www/interfaces_ppps_edit.php:785
+#: usr/local/www/firewall_aliases_edit.php:695
+#: usr/local/www/interfaces_lagg_edit.php:219
+#: usr/local/www/services_captiveportal.php:965
+#: usr/local/www/system_gateways_edit.php:627
+#: usr/local/www/load_balancer_virtual_server_edit.php:267
+#: usr/local/www/interfaces_bridge_edit.php:593
+#: usr/local/www/interfaces_groups_edit.php:324
+#: usr/local/www/firewall_nat_edit.php:853
+#: usr/local/www/services_dhcp_edit.php:262 usr/local/www/interfaces.php:1537
+#: usr/local/www/interfaces.php:1643 usr/local/www/interfaces.php:2633
+#: usr/local/www/load_balancer_pool_edit.php:327
+#: usr/local/www/vpn_l2tp_users_edit.php:178
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/system_gateways_edit.php:632
+#: usr/local/www/interfaces_wireless_edit.php:197
+#: usr/local/www/services_dhcpv6_edit.php:242
+#: usr/local/www/services_dyndns_edit.php:371
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1566
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:791
+#: usr/local/www/interfaces_lagg_edit.php:232
+#: usr/local/www/firewall_nat_edit.php:849
+#: usr/local/www/interfaces_gif_edit.php:230
+#: usr/local/www/services_dhcp_edit.php:494
+#: usr/local/www/firewall_virtual_ip_edit.php:471
+#: usr/local/www/services_captiveportal_vouchers.php:628
+#: usr/local/www/vpn_pppoe_edit.php:594
+#: usr/local/www/services_captiveportal.php:967 usr/local/www/pkg_edit.php:923
+#: usr/local/www/interfaces_bridge_edit.php:594
+#: usr/local/www/firewall_nat_out_edit.php:664
+#: usr/local/www/interfaces_qinq_edit.php:399
+#: usr/local/www/interfaces.php:1547 usr/local/www/interfaces.php:1652
+#: usr/local/www/interfaces.php:2665
+#: usr/local/www/firewall_shaper_layer7.php:568
+#: usr/local/www/system_gateways_edit.php:634
+#: usr/local/www/services_dyndns_edit.php:379
+#: usr/local/www/firewall_rules_edit.php:1128
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/firewall_nat_edit.php:889
+#: usr/local/www/firewall_virtual_ip_edit.php:491
+#: usr/local/www/system_routes_edit.php:313
+#: usr/local/www/system_routes_edit.php:339
+#: usr/local/www/system_gateway_groups_edit.php:344
+#: usr/local/www/services_captiveportal.php:983
+#: usr/local/www/firewall_aliases_edit.php:726
+#: usr/local/www/firewall_nat_out_edit.php:704
+#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1698
+#: usr/local/www/interfaces.php:2711
+#: usr/local/www/system_gateways_edit.php:664
+#: usr/local/www/firewall_rules_edit.php:1127
+#: usr/local/www/firewall_rules_edit.php:1613
+#: usr/local/www/interfaces_ppps_edit.php:788
+#: usr/local/www/interfaces_lagg_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:890
+#: usr/local/www/system_routes_edit.php:319
+#: usr/local/www/system_routes_edit.php:349
+#: usr/local/www/interfaces_groups_edit.php:321 usr/local/www/pkg_edit.php:927
+#: usr/local/www/interfaces_bridge_edit.php:598
+#: usr/local/www/interfaces.php:1586 usr/local/www/interfaces.php:1691
+#: usr/local/www/interfaces.php:2700
+#: usr/local/www/system_gateways_edit.php:665
+#: usr/local/www/services_captiveportal_vouchers.php:633
+#: usr/local/www/system_routes_edit.php:321
+#: usr/local/www/system_routes_edit.php:351
+#: usr/local/www/services_dyndns_edit.php:380
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1661
+#: usr/local/www/firewall_virtual_ip_edit.php:496
+#: usr/local/www/firewall_aliases_edit.php:725
+#: usr/local/www/services_rfc2136_edit.php:213
+#: usr/local/www/interfaces.php:1599 usr/local/www/interfaces.php:1704
+#: usr/local/www/interfaces.php:2736
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1117
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1291
+#: usr/local/www/firewall_rules_edit.php:1342
+#: usr/local/www/firewall_rules_edit.php:1392
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/interfaces.php:1330 usr/local/www/interfaces.php:1940
+#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcp.php:741
+#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcp.php:765
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:799
+#: usr/local/www/services_dnsmasq.php:194
+#: usr/local/www/services_dnsmasq.php:197
+#: usr/local/www/services_dnsmasq.php:200 usr/local/www/fbegin.inc:83
+#: usr/local/www/system_gateways_edit.php:415
+#: usr/local/www/vpn_openvpn_client.php:829
+#: usr/local/www/vpn_openvpn_csc.php:642
+#: usr/local/www/vpn_openvpn_server.php:1412
+#: usr/local/www/services_dhcpv6.php:651 usr/local/www/services_dhcpv6.php:667
+#: usr/local/www/services_dhcpv6.php:679 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcpv6.php:703 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/fbegin.inc:99 usr/local/www/pkg_edit.php:1052
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:1118
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1168
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1252
+#: usr/local/www/firewall_rules_edit.php:1276
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1331
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1413
+#: usr/local/www/firewall_rules_edit.php:1463
+#: usr/local/www/firewall_rules_edit.php:1517
+#: usr/local/www/services_unbound_advanced.php:88
+#: usr/local/www/system_gateways_edit.php:436
+#: usr/local/www/vpn_openvpn_server.php:1554
+#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcp.php:779
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcp.php:803
+#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcp.php:837
+#: usr/local/www/firewall_nat_edit.php:538 usr/local/www/interfaces.php:1434
+#: usr/local/www/interfaces.php:2118 usr/local/www/vpn_openvpn_client.php:834
+#: usr/local/www/services_dhcpv6.php:744 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcpv6.php:773 usr/local/www/services_dhcpv6.php:786
+#: usr/local/www/services_dhcpv6.php:798 usr/local/www/services_dhcpv6.php:820
+#: usr/local/www/services_dnsmasq.php:195
+#: usr/local/www/services_dnsmasq.php:198
+#: usr/local/www/services_dnsmasq.php:201 usr/local/www/fbegin.inc:108
+#: usr/local/www/pkg_edit.php:1063 usr/local/www/vpn_openvpn_csc.php:641
+#: usr/local/www/system_gateways_edit.php:542
+#: usr/local/www/vpn_openvpn_server.php:1596
+#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcp.php:987
+#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcp.php:1011
+#: usr/local/www/services_dhcp.php:1034
+#: usr/local/www/firewall_nat_edit.php:537 usr/local/www/interfaces.php:1422
+#: usr/local/www/interfaces.php:2106 usr/local/www/vpn_openvpn_client.php:883
+#: usr/local/www/services_dhcpv6.php:675 usr/local/www/services_dhcpv6.php:704
+#: usr/local/www/services_dhcpv6.php:717 usr/local/www/services_dhcpv6.php:729
+#: usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/system_gateways_edit.php:546
+#: usr/local/www/vpn_openvpn_client.php:902
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1303
+#: usr/local/www/firewall_rules_edit.php:1346
+#: usr/local/www/firewall_rules_edit.php:1373
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1478
+#: usr/local/www/firewall_rules_edit.php:1532
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:974
+#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcp.php:1000
+#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcp.php:1024
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:692
+#: usr/local/www/services_dhcpv6.php:708 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcpv6.php:734 usr/local/www/services_dhcpv6.php:746
+#: usr/local/www/services_dhcpv6.php:768 usr/local/www/pkg_edit.php:1107
+#: usr/local/www/fbegin.inc:100 usr/local/www/services_dnsmasq.php:220
+#: usr/local/www/services_dnsmasq.php:223
+#: usr/local/www/services_dnsmasq.php:226
+#: usr/local/www/vpn_openvpn_server.php:1648 usr/local/www/interfaces.php:1435
+#: usr/local/www/interfaces.php:2136
+#: usr/local/www/system_gateways_edit.php:548
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1236
+#: usr/local/www/firewall_rules_edit.php:1298
+#: usr/local/www/firewall_rules_edit.php:1310
+#: usr/local/www/firewall_rules_edit.php:1353
+#: usr/local/www/firewall_rules_edit.php:1380
+#: usr/local/www/firewall_rules_edit.php:1435
+#: usr/local/www/firewall_rules_edit.php:1485
+#: usr/local/www/firewall_rules_edit.php:1540
+#: usr/local/www/firewall_nat_edit.php:544 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1008
+#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1067
+#: usr/local/www/services_dnsmasq.php:233
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_dnsmasq.php:239 usr/local/www/interfaces.php:1479
+#: usr/local/www/interfaces.php:2182
+#: usr/local/www/system_gateways_edit.php:578
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551
+#: usr/local/www/firewall_nat_edit.php:545 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/services_dnsmasq.php:297
+#: usr/local/www/services_dnsmasq.php:300
+#: usr/local/www/services_dnsmasq.php:303 usr/local/www/interfaces.php:1474
+#: usr/local/www/interfaces.php:2171
+#: usr/local/www/firewall_rules_edit.php:1011
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1227
+#: usr/local/www/firewall_rules_edit.php:1243
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1323
+#: usr/local/www/firewall_rules_edit.php:1345
+#: usr/local/www/firewall_rules_edit.php:1357
+#: usr/local/www/firewall_rules_edit.php:1412
+#: usr/local/www/firewall_rules_edit.php:1439
+#: usr/local/www/firewall_rules_edit.php:1494
+#: usr/local/www/firewall_rules_edit.php:1544
+#: usr/local/www/firewall_rules_edit.php:1599
+#: usr/local/www/services_dhcp.php:990 usr/local/www/services_dhcp.php:1006
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1079
+#: usr/local/www/interfaces.php:1487 usr/local/www/interfaces.php:2207
+msgid "Advanced"
+msgstr "Avançado"
+
+#: usr/local/www/pkg_edit.php:1037 usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1117
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1291
+#: usr/local/www/firewall_rules_edit.php:1342
+#: usr/local/www/firewall_rules_edit.php:1392
+#: usr/local/www/firewall_rules_edit.php:1446
+#: usr/local/www/interfaces.php:1330 usr/local/www/services_dnsmasq.php:197
+#: usr/local/www/pkg_edit.php:1052 usr/local/www/firewall_rules_edit.php:1118
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1168
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1252
+#: usr/local/www/firewall_rules_edit.php:1276
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1331
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1413
+#: usr/local/www/firewall_rules_edit.php:1463
+#: usr/local/www/firewall_rules_edit.php:1517
+#: usr/local/www/interfaces.php:1434 usr/local/www/services_dnsmasq.php:198
+#: usr/local/www/pkg_edit.php:1063 usr/local/www/interfaces.php:1422
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1303
+#: usr/local/www/firewall_rules_edit.php:1346
+#: usr/local/www/firewall_rules_edit.php:1373
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1478
+#: usr/local/www/firewall_rules_edit.php:1532 usr/local/www/pkg_edit.php:1107
+#: usr/local/www/services_dnsmasq.php:223 usr/local/www/interfaces.php:1435
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1236
+#: usr/local/www/firewall_rules_edit.php:1298
+#: usr/local/www/firewall_rules_edit.php:1310
+#: usr/local/www/firewall_rules_edit.php:1353
+#: usr/local/www/firewall_rules_edit.php:1380
+#: usr/local/www/firewall_rules_edit.php:1435
+#: usr/local/www/firewall_rules_edit.php:1485
+#: usr/local/www/firewall_rules_edit.php:1540
+#: usr/local/www/services_dnsmasq.php:236 usr/local/www/interfaces.php:1479
+#: usr/local/www/firewall_rules_edit.php:1145
+#: usr/local/www/firewall_rules_edit.php:1179
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1235
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1297
+#: usr/local/www/firewall_rules_edit.php:1309
+#: usr/local/www/firewall_rules_edit.php:1364
+#: usr/local/www/firewall_rules_edit.php:1391
+#: usr/local/www/firewall_rules_edit.php:1496
+#: usr/local/www/firewall_rules_edit.php:1551 usr/local/www/pkg_edit.php:1114
+#: usr/local/www/services_dnsmasq.php:300 usr/local/www/interfaces.php:1474
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1227
+#: usr/local/www/firewall_rules_edit.php:1243
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1323
+#: usr/local/www/firewall_rules_edit.php:1345
+#: usr/local/www/firewall_rules_edit.php:1357
+#: usr/local/www/firewall_rules_edit.php:1412
+#: usr/local/www/firewall_rules_edit.php:1439
+#: usr/local/www/firewall_rules_edit.php:1494
+#: usr/local/www/firewall_rules_edit.php:1544
+#: usr/local/www/firewall_rules_edit.php:1599
+#: usr/local/www/interfaces.php:1487
+msgid "Show advanced option"
+msgstr "Mostrar opções avançadas"
+
+#: usr/local/www/pkg_mgr_installed.php:45
+#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs.php:77 usr/local/www/diag_logs_auth.php:65
+#: usr/local/www/diag_logs_dhcp.php:70 usr/local/www/diag_logs_filter.php:101
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_ipsec.php:102 usr/local/www/diag_logs_ntpd.php:65
+#: usr/local/www/diag_logs_openvpn.php:69
+#: usr/local/www/diag_logs_settings.php:210
+#: usr/local/www/diag_logs_vpn.php:126 usr/local/www/diag_backup.php:117
+#: usr/local/www/system.php:74 usr/local/www/system.php:231
+#: usr/local/www/system.php:251 usr/local/www/system_firmware.php:102
+#: usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_settings.php:74
+#: usr/local/www/system_routes.php:94 usr/local/www/system_routes_edit.php:165
+#: usr/local/www/diag_logs_filter_summary.php:184
+#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/diag_logs_relayd.php:66
+#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_settings.php:62
+#: usr/local/www/fbegin.inc:319 usr/local/www/fbegin.inc:440
+#: usr/local/www/status_rrd_graph.php:329
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_settings.php:53
+#: usr/local/www/status_rrd_graph_settings.php:128
+#: usr/local/www/system_advanced_admin.php:242
+#: usr/local/www/system_advanced_firewall.php:178
+#: usr/local/www/system_advanced_misc.php:179
+#: usr/local/www/system_advanced_network.php:148
+#: usr/local/www/system_advanced_notifications.php:131
+#: usr/local/www/system_advanced_sysctl.php:125
+#: usr/local/www/system_authservers.php:44
+#: usr/local/www/system_camanager.php:50
+#: usr/local/www/system_certmanager.php:51
+#: usr/local/www/system_crlmanager.php:46
+#: usr/local/www/system_gateway_groups.php:88
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways.php:120
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/system_groupmanager_addprivs.php:56
+#: usr/local/www/system_usermanager.php:54
+#: usr/local/www/system_usermanager_passwordmg.php:43
+#: usr/local/www/system_usermanager_settings.php:51
+#: usr/local/www/diag_logs_wireless.php:67
+#: usr/local/www/diag_logs_routing.php:65
+#: usr/local/www/system_routes_edit.php:198 usr/local/www/pkg_mgr.php:55
+#: usr/local/www/pkg_mgr.php:93 usr/local/www/diag_logs_settings.php:215
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/fbegin.inc:337 usr/local/www/fbegin.inc:458
+#: usr/local/www/status_rrd_graph_settings.php:129
+#: usr/local/www/system_certmanager.php:56 usr/local/www/diag_backup.php:195
+#: usr/local/www/diag_logs_resolver.php:78
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80
+#: usr/local/www/system_advanced_notifications.php:140
+#: usr/local/www/status_rrd_graph.php:377
+#: usr/local/www/system_advanced_misc.php:199
+#: usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/system_hasync.php:96 usr/local/www/diag_logs_gateways.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:98 usr/local/www/system.php:75
+#: usr/local/www/system.php:242 usr/local/www/system.php:262
+#: usr/local/www/diag_logs_routing.php:66
+#: usr/local/www/diag_logs_settings.php:222
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/fbegin.inc:283 usr/local/www/fbegin.inc:428
+#: usr/local/www/diag_logs_relayd.php:67 usr/local/www/diag_logs_auth.php:66
+#: usr/local/www/diag_logs_ipsec.php:103
+#: usr/local/www/diag_logs_resolver.php:79 usr/local/www/diag_logs_ntpd.php:66
+#: usr/local/www/system_advanced_misc.php:218
+#: usr/local/www/diag_logs_dhcp.php:71
+#: usr/local/www/system_gateway_groups.php:89
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/diag_logs_wireless.php:68
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210
+#: usr/local/www/diag_logs_filter_summary.php:185
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_gateways.php:79
+#: usr/local/www/diag_logs_openvpn.php:70
+#: usr/local/www/diag_logs_filter_dynamic.php:99 usr/local/www/system.php:235
+#: usr/local/www/system.php:255 usr/local/www/diag_logs_filter.php:91
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_camanager.php:51
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph.php:402
+#: usr/local/www/diag_logs_filter_dynamic.php:97
+#: usr/local/www/system_routes.php:98 usr/local/www/system_hasync.php:97
+#: usr/local/www/system_certmanager.php:57
+#: usr/local/www/system_advanced_misc.php:222
+#: usr/local/www/diag_logs_ppp.php:68
+#: usr/local/www/system_advanced_firewall.php:221
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:275
+#: usr/local/www/fbegin.inc:420 usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/system_advanced_misc.php:254 usr/local/www/pkg_mgr.php:94
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_gateway_groups.php:98
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_routes.php:113
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:231
+#: usr/local/www/diag_logs_settings.php:241 usr/local/www/system_hasync.php:98
+#: usr/local/www/system_advanced_admin.php:263
+#: usr/local/www/system_advanced_misc.php:260
+#: usr/local/www/system_advanced_firewall.php:232
+#: usr/local/www/diag_backup.php:196
+#: usr/local/www/system_advanced_notifications.php:155
+#: usr/local/www/system_advanced_network.php:147
+msgid "System"
+msgstr "Sistema"
+
+#: usr/local/www/pkg_mgr_installed.php:45
+#: usr/local/www/pkg_mgr_installed.php:63 usr/local/www/diag_backup.php:113
+#: usr/local/www/pkg_mgr.php:49 usr/local/www/pkg_mgr.php:81
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/fbegin.inc:440
+#: usr/local/www/pkg_mgr.php:55 usr/local/www/pkg_mgr.php:93
+#: usr/local/www/fbegin.inc:458 usr/local/www/diag_backup.php:190
+#: usr/local/www/pkg_mgr_installed.php:51
+#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/fbegin.inc:428
+#: usr/local/www/pkg_mgr_install.php:55 usr/local/www/fbegin.inc:420
+#: usr/local/www/pkg_mgr.php:94 usr/local/www/diag_backup.php:191
+msgid "Package Manager"
+msgstr "Gerenciador de Pacotes"
+
+#: usr/local/www/pkg_mgr_installed.php:76 usr/local/www/pkg_mgr.php:99
+#: usr/local/www/pkg_mgr.php:115 usr/local/www/pkg_mgr_installed.php:97
+#: usr/local/www/pkg_mgr_installed.php:99 usr/local/www/pkg_mgr.php:118
+msgid "Available Packages"
+msgstr "Pacotes disponíveis"
+
+#: usr/local/www/pkg_mgr_installed.php:80 usr/local/www/pkg_mgr.php:103
+#: usr/local/www/pkg_mgr_settings.php:93 usr/local/www/pkg_mgr.php:119
+#: usr/local/www/pkg_mgr_installed.php:101
+#: usr/local/www/pkg_mgr_installed.php:103 usr/local/www/pkg_mgr.php:122
+#: usr/local/www/pkg_mgr_settings.php:92
+msgid "Installed Packages"
+msgstr "Pacotes Instalados"
+
+#: usr/local/www/pkg_mgr_installed.php:90 usr/local/www/pkg_mgr.php:113
+msgid "Package Name"
+msgstr "Nome do Pacote"
+
+#: usr/local/www/pkg_mgr_installed.php:91 usr/local/www/pkg_mgr.php:114
+#: usr/local/www/pkg_mgr.php:130 usr/local/www/pkg_mgr_installed.php:112
+#: usr/local/www/pkg_mgr_installed.php:114 usr/local/www/pkg_mgr.php:133
+msgid "Category"
+msgstr "Categoria"
+
+#: usr/local/www/pkg_mgr_installed.php:92
+#: usr/local/www/pkg_mgr_installed.php:150 usr/local/www/pkg_mgr.php:117
+#: usr/local/www/pkg_mgr.php:200
+msgid "Package Info"
+msgstr "Info do Pacote"
+
+#: usr/local/www/pkg_mgr_installed.php:93
+msgid "Package Version"
+msgstr "Versão do Pacote"
+
+#: usr/local/www/pkg_mgr_installed.php:116
+#: usr/local/www/pkg_mgr_installed.php:122
+#: usr/local/www/pkg_mgr_installed.php:142
+#: usr/local/www/pkg_mgr_installed.php:144
+#: usr/local/www/pkg_mgr_installed.php:151
+#: usr/local/www/pkg_mgr_installed.php:153
+#: usr/local/www/pkg_mgr_installed.php:146
+#: usr/local/www/pkg_mgr_installed.php:155
+msgid "Available"
+msgstr "Disponível"
+
+#: usr/local/www/pkg_mgr_installed.php:117
+#: usr/local/www/pkg_mgr_installed.php:123
+#: usr/local/www/pkg_mgr_installed.php:145
+#: usr/local/www/pkg_mgr_installed.php:154
+#: usr/local/www/pkg_mgr_installed.php:147
+#: usr/local/www/pkg_mgr_installed.php:156
+msgid "Installed"
+msgstr "Instalado"
+
+#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202
+msgid "No info, check the"
+msgstr "Sem info, verifique o"
+
+#: usr/local/www/pkg_mgr_installed.php:152 usr/local/www/pkg_mgr.php:202
+msgid "forum"
+msgstr "fórum"
+
+#: usr/local/www/pkg_mgr_installed.php:163
+msgid "Do you really want to remove this package?"
+msgstr "Você realmente deseja remover esse pacote?"
+
+#: usr/local/www/pkg_mgr_installed.php:164
+msgid "Remove this package."
+msgstr "Remova esse pacote."
+
+#: usr/local/www/pkg_mgr_installed.php:168
+msgid "Reinstall this package."
+msgstr "Reinstalar esse pacote."
+
+#: usr/local/www/pkg_mgr_installed.php:171
+msgid "Reinstall this package's GUI components."
+msgstr "Reinstalar os componentes GUI desse pacote."
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:222
+#: usr/local/www/pkg_mgr_installed.php:225
+#: usr/local/www/pkg_mgr_installed.php:227
+msgid "There are no packages currently installed."
+msgstr "Não há pacotes instalados atualmente."
+
+#: usr/local/www/easyrule.php:34
+msgid "Status : EasyRule"
+msgstr "Status: EasyRule"
+
+#: usr/local/www/easyrule.php:69
+msgid "Message"
+msgstr "Mensagem"
+
+#: usr/local/www/easyrule.php:72
+msgid "This is the Easy Rule status page, mainly used to display errors when adding rules. If you are seeing this, there apparently was not an error, and you navigated to the page directly without telling it what to do"
+msgstr "Esta é a página de status do EasyRule, principalmente usada para mostrar erros quando regras são adicionadas. Se você está vendo isto, este aparentemente não foi um erro e você navegou direto para a página sem dizer a ela o que fazer"
+
+#: usr/local/www/easyrule.php:75
+msgid "This page is meant to be called from the block/pass buttons on the Firewall Logs page"
+msgstr "Esta página destina-se a ser chama pelos botões bloquear/liberar na página de logs do Firewall"
+
+#: usr/local/www/easyrule.php:75 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs_auth.php:54 usr/local/www/diag_logs_dhcp.php:59
+#: usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/status_wireless.php:41 usr/local/www/status_wireless.php:77
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/pkg_mgr.php:116 usr/local/www/diag_ipsec.php:48
+#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_pkglogs.php:81
+#: usr/local/www/status_filter_reload.php:44 usr/local/www/status_graph.php:85
+#: usr/local/www/carp_status.php:100 usr/local/www/carp_status.php:140
+#: usr/local/www/status_interfaces.php:58
+#: usr/local/www/status_interfaces.php:85 usr/local/www/fbegin.inc:359
+#: usr/local/www/status_queues.php:98 usr/local/www/status_rrd_graph.php:224
+#: usr/local/www/status_rrd_graph_settings.php:113
+#: usr/local/www/status_services.php:226 usr/local/www/status_services.php:246
+#: usr/local/www/status_upnp.php:58
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/status_dhcp_leases.php:48
+#: usr/local/www/status_gateway_groups.php:52
+#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:77
+#: usr/local/www/status_graph_cpu.php:41 usr/local/www/status_lb_pool.php:62
+#: usr/local/www/status_lb_vs.php:56 usr/local/www/status_lb_vs.php:80
+#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:212
+#: usr/local/www/status_openvpn.php:263
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:43
+#: usr/local/www/status_dhcpv6_leases.php:49
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_routing.php:54 usr/local/www/pkg_mgr.php:131
+#: usr/local/www/diag_logs_settings.php:136 usr/local/www/fbegin.inc:377
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/status_queues.php:101 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/status_rrd_graph.php:244 usr/local/www/status_ntpd.php:94
+#: usr/local/www/status_ntpd.php:107 usr/local/www/status_dhcpv6_leases.php:50
+#: usr/local/www/status_dhcp_leases.php:49
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266
+#: usr/local/www/diag_logs_settings.php:143 usr/local/www/fbegin.inc:323
+#: usr/local/www/status_interfaces.php:60
+#: usr/local/www/status_interfaces.php:88 usr/local/www/carp_status.php:92
+#: usr/local/www/carp_status.php:133 usr/local/www/status_graph.php:90
+#: usr/local/www/diag_ipsec.php:108 usr/local/www/status_wireless.php:78
+#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:123
+#: usr/local/www/status_services.php:222 usr/local/www/status_services.php:242
+#: usr/local/www/status_gateways.php:78 usr/local/www/diag_logs_filter.php:79
+#: usr/local/www/status_services.php:220 usr/local/www/status_services.php:240
+#: usr/local/www/status_openvpn.php:314
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_graph.php:101 usr/local/www/diag_ipsec.php:110
+#: usr/local/www/status_rrd_graph.php:248 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:315
+#: usr/local/www/status_services.php:63 usr/local/www/status_services.php:81
+#: usr/local/www/status_openvpn.php:273 usr/local/www/status_openvpn.php:334
+#: usr/local/www/diag_logs_filter.php:109 usr/local/www/status_graph.php:111
+#: usr/local/www/pkg_mgr.php:134 usr/local/www/status_ntpd.php:115
+#: usr/local/www/status_ntpd.php:129 usr/local/www/diag_logs_settings.php:162
+#: usr/local/www/status_queues.php:123
+msgid "Status"
+msgstr "Status"
+
+#: usr/local/www/easyrule.php:75
+msgid "System Logs, Firewall Tab"
+msgstr "Logs de Sistema, Firewall Tab"
+
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/diag_logs.php:78 usr/local/www/diag_logs_auth.php:66
+#: usr/local/www/diag_logs_dhcp.php:71 usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter.php:102
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_ipsec.php:103 usr/local/www/diag_logs_ntpd.php:66
+#: usr/local/www/diag_logs_openvpn.php:70
+#: usr/local/www/diag_logs_settings.php:211
+#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/firewall_aliases.php:150
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_rules.php:52
+#: usr/local/www/firewall_rules_edit.php:628
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_schedule_edit.php:61
+#: usr/local/www/firewall_shaper.php:54
+#: usr/local/www/firewall_virtual_ip.php:149
+#: usr/local/www/diag_logs_filter_summary.php:185
+#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_relayd.php:67
+#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:335
+#: usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/diag_logs_wireless.php:68
+#: usr/local/www/diag_logs_routing.php:66
+#: usr/local/www/diag_logs_settings.php:216 usr/local/www/fbegin.inc:353
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/diag_logs_resolver.php:79
+#: usr/local/www/firewall_aliases.php:153
+#: usr/local/www/diag_logs_gateways.php:79
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/diag_logs_filter_dynamic.php:99
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:299
+#: usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:165 usr/local/www/diag_logs_auth.php:67
+#: usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/diag_logs_ipsec.php:104
+#: usr/local/www/diag_logs_resolver.php:80 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/firewall_rules.php:49 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/diag_logs_filter_summary.php:186
+#: usr/local/www/firewall_aliases.php:155
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/diag_logs_openvpn.php:71
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/firewall_virtual_ip.php:152
+#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_filter.php:92
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/firewall_virtual_ip.php:166
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/diag_logs_filter_dynamic.php:98
+#: usr/local/www/diag_logs_ppp.php:69 usr/local/www/fbegin.inc:291
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_aliases.php:154
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/diag_logs_settings.php:242
+#: usr/local/www/firewall_rules_edit.php:724
+#: usr/local/www/firewall_virtual_ip.php:196
+#: usr/local/www/firewall_virtual_ip_edit.php:277
+msgid "Firewall"
+msgstr "Firewall"
+
+#: usr/local/www/firewall_aliases_import.php:48
+#: usr/local/www/firewall_aliases_import.php:59
+#: usr/local/www/firewall_aliases.php:150
+#: usr/local/www/firewall_aliases_edit.php:56
+#: usr/local/www/diag_backup.php:103 usr/local/www/fbegin.inc:110
+#: usr/local/www/fbegin.inc:127 usr/local/www/services_dnsmasq_edit.php:225
+#: usr/local/www/diag_backup.php:180 usr/local/www/firewall_aliases.php:153
+#: usr/local/www/fbegin.inc:136 usr/local/www/services_dnsmasq_edit.php:226
+#: usr/local/www/firewall_aliases.php:155 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_aliases.php:154
+msgid "Aliases"
+msgstr "Aliases"
+
+#: usr/local/www/firewall_aliases_import.php:48
+msgid "Bulk import"
+msgstr "Importação em massa"
+
+#: usr/local/www/firewall_aliases_import.php:64
+msgid "The alias name may only consist of the characters"
+msgstr "O nome de alias deve conter somente caracteres"
+
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/firewall_aliases_edit.php:151
+#: usr/local/www/firewall_aliases_edit.php:145
+msgid "An alias with this name already exists."
+msgstr "Já existe um alias com esse nome."
+
+#: usr/local/www/firewall_aliases_import.php:74
+#: usr/local/www/firewall_aliases_edit.php:160
+#: usr/local/www/firewall_aliases_edit.php:154
+#, php-format
+msgid "Cannot use a reserved keyword as alias name %s"
+msgstr "Não pode usar uma palavra reservada como nome de alias %s"
+
+#: usr/local/www/firewall_aliases_import.php:79
+#: usr/local/www/firewall_aliases_edit.php:165
+#: usr/local/www/firewall_aliases_edit.php:159
+msgid "An interface description with this name already exists."
+msgstr "Já existe uma descrição de interface com esse nome."
+
+#: usr/local/www/firewall_aliases_import.php:94
+#, php-format
+msgid "%s is not an IP address. Please correct the error to continue"
+msgstr "%s não é um endereço IP. Por favor corrija o erro para continuar"
+
+#: usr/local/www/firewall_aliases_import.php:131
+msgid "Alias Import"
+msgstr "Importação de Alias"
+
+#: usr/local/www/firewall_aliases_import.php:134
+msgid "Alias Name"
+msgstr "Nome Alias"
+
+#: usr/local/www/firewall_aliases_import.php:137
+#: usr/local/www/firewall_aliases_edit.php:585
+msgid "The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"."
+msgstr "O nome do alias deve consistir apenas de caracteres \"a-z, A-Z e 0-9\"."
+
+#: usr/local/www/firewall_aliases_import.php:142
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/services_captiveportal_ip_edit.php:211
+#: usr/local/www/services_captiveportal_mac_edit.php:185
+#: usr/local/www/services_captiveportal_hostname_edit.php:186
+#: usr/local/www/system_gateways_edit.php:487
+#: usr/local/www/vpn_ipsec_phase1.php:580
+#: usr/local/www/vpn_ipsec_phase2.php:502
+#: usr/local/www/vpn_openvpn_client.php:577
+#: usr/local/www/vpn_openvpn_csc.php:346
+#: usr/local/www/vpn_openvpn_server.php:726
+#: usr/local/www/services_captiveportal_zones_edit.php:109
+#: usr/local/www/system_gateways_edit.php:522
+#: usr/local/www/vpn_openvpn_server.php:799
+#: usr/local/www/vpn_ipsec_phase2.php:528
+#: usr/local/www/vpn_openvpn_client.php:582
+#: usr/local/www/vpn_ipsec_phase1.php:593
+#: usr/local/www/services_captiveportal_hostname_edit.php:184
+#: usr/local/www/services_captiveportal_mac_edit.php:183
+#: usr/local/www/interfaces_lagg_edit.php:212
+#: usr/local/www/vpn_openvpn_csc.php:345
+#: usr/local/www/system_gateways_edit.php:622
+#: usr/local/www/services_captiveportal_ip_edit.php:209
+#: usr/local/www/vpn_openvpn_server.php:827
+#: usr/local/www/services_captiveportal_zones_edit.php:111
+#: usr/local/www/vpn_ipsec_phase2.php:630
+#: usr/local/www/vpn_openvpn_client.php:600
+#: usr/local/www/vpn_ipsec_phase1.php:592
+#: usr/local/www/system_gateways_edit.php:626
+#: usr/local/www/services_captiveportal_ip_edit.php:203
+#: usr/local/www/vpn_openvpn_client.php:619
+#: usr/local/www/interfaces_lagg_edit.php:225
+#: usr/local/www/services_captiveportal_mac_edit.php:196
+#: usr/local/www/vpn_ipsec_phase1.php:613
+#: usr/local/www/vpn_openvpn_server.php:854
+#: usr/local/www/vpn_ipsec_phase2.php:651
+#: usr/local/www/system_gateways_edit.php:628
+#: usr/local/www/system_gateways_edit.php:658
+#: usr/local/www/interfaces_lagg_edit.php:224
+#: usr/local/www/system_gateways_edit.php:659
+msgid "You may enter a description here for your reference (not parsed)"
+msgstr "Você pode inserir uma descrição aqui para sua referência (não analisado)"
+
+#: usr/local/www/firewall_aliases_import.php:146
+msgid "Aliases to import"
+msgstr "Aliases para importar"
+
+#: usr/local/www/firewall_aliases_import.php:148
+msgid "Paste in the aliases to import separated by a carriage return. Common examples are lists of IPs, networks, blacklists, etc."
+msgstr "Cole nos alias para importar separada por retorno de carro. Exemplos comuns são listas de IP, redes, listas negras, etc."
+
+#: usr/local/www/firewall_aliases_import.php:149
+msgid "The list may contain only IP addresses."
+msgstr "Esta lista pode conter apenas endereços IP."
+
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_shaper.php:54 usr/local/www/diag_backup.php:121
+#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:131
+#: usr/local/www/diag_backup.php:199 usr/local/www/fbegin.inc:140
+#: usr/local/www/fbegin.inc:132 usr/local/www/diag_backup.php:200
+msgid "Traffic Shaper"
+msgstr "Traffic Shaper"
+
+#: usr/local/www/firewall_shaper_layer7.php:59
+#: usr/local/www/firewall_shaper_layer7.php:410
+#: usr/local/www/firewall_shaper_vinterface.php:375
+#: usr/local/www/firewall_shaper_wizards.php:105
+#: usr/local/www/firewall_rules_edit.php:1443
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_rules_edit.php:1514
+#: usr/local/www/firewall_shaper_vinterface.php:385
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_rules_edit.php:1529
+#: usr/local/www/firewall_shaper.php:414
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_rules_edit.php:1537
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/firewall_shaper_wizards.php:106
+#: usr/local/www/firewall_rules_edit.php:1548
+#: usr/local/www/firewall_rules_edit.php:1596
+msgid "Layer7"
+msgstr "Layer7"
+
+#: usr/local/www/firewall_shaper_layer7.php:66
+msgid "You can add new layer7 protocol patterns by simply uploading the file"
+msgstr "Você pode adicionar um novo padrão de protocolo layer7 simplesmente carregando o arquivo"
+
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/firewall_virtual_ip.php:243 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2559 usr/local/www/carp_status.php:196
+#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/carp_status.php:189 usr/local/www/status_queues.php:183
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/firewall_virtual_ip.php:249
+#: usr/local/www/firewall_virtual_ip.php:269
+#: usr/local/www/status_queues.php:165 usr/local/www/interfaces.php:2774
+#: usr/local/www/interfaces.php:2783 usr/local/www/interfaces.php:2820
+#: usr/local/www/interfaces.php:2829 usr/local/www/firewall_virtual_ip.php:292
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/firewall_virtual_ip.php:300
+#: usr/local/www/status_queues.php:187 usr/local/www/interfaces.php:2842
+#: usr/local/www/interfaces.php:2851
+msgid "here"
+msgstr "aqui"
+
+#: usr/local/www/firewall_shaper_layer7.php:111
+msgid "Layer7 Rules Container not found!"
+msgstr "Contâiner de Regras Layer7 não encontrado!"
+
+#: usr/local/www/firewall_shaper_layer7.php:161
+msgid "Found the following repeated protocol definitions"
+msgstr "Encontradas as seguintes definições de protocolo repetidas"
+
+#: usr/local/www/firewall_shaper_layer7.php:401
+#: usr/local/www/firewall_shaper_queues.php:187
+#: usr/local/www/firewall_shaper_queues.php:188
+msgid "The traffic shaper configuration has been changed"
+msgstr "A configuração do traffic shaper foi modificada"
+
+#: usr/local/www/firewall_shaper_layer7.php:407
+#: usr/local/www/firewall_shaper_vinterface.php:372
+#: usr/local/www/firewall_shaper_wizards.php:102
+#: usr/local/www/firewall_shaper.php:409
+#: usr/local/www/firewall_shaper_queues.php:193
+#: usr/local/www/firewall_shaper_vinterface.php:382
+#: usr/local/www/firewall_shaper.php:410
+#: usr/local/www/firewall_shaper_vinterface.php:389
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_shaper_queues.php:194
+#: usr/local/www/firewall_shaper_wizards.php:103
+msgid "By Interface"
+msgstr "Por Interface"
+
+#: usr/local/www/firewall_shaper_layer7.php:408
+#: usr/local/www/firewall_shaper_vinterface.php:373
+#: usr/local/www/firewall_shaper_wizards.php:103
+#: usr/local/www/firewall_shaper.php:410
+#: usr/local/www/firewall_shaper_queues.php:194
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:390
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_wizards.php:104
+msgid "By Queue"
+msgstr "Por Fila"
+
+#: usr/local/www/firewall_shaper_layer7.php:409
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:374
+#: usr/local/www/firewall_shaper_wizards.php:104
+#: usr/local/www/firewall_shaper.php:411
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:384
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:391
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_vinterface.php:394
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_shaper_wizards.php:105
+msgid "Limiter"
+msgstr "Limitador"
+
+#: usr/local/www/firewall_shaper_layer7.php:411
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/firewall_shaper_wizards.php:73
+#: usr/local/www/firewall_shaper_wizards.php:106
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/vpn_openvpn_client.php:368
+#: usr/local/www/vpn_openvpn_csc.php:296
+#: usr/local/www/vpn_openvpn_server.php:586
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/vpn_openvpn_server.php:659
+#: usr/local/www/vpn_openvpn_client.php:373
+#: usr/local/www/firewall_shaper.php:414 usr/local/www/vpn_openvpn_csc.php:295
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/vpn_openvpn_server.php:677
+#: usr/local/www/vpn_openvpn_client.php:381
+#: usr/local/www/vpn_openvpn_client.php:399
+#: usr/local/www/vpn_openvpn_server.php:703
+#: usr/local/www/firewall_shaper.php:415
+#: usr/local/www/firewall_shaper_vinterface.php:396
+#: usr/local/www/firewall_shaper_queues.php:198
+#: usr/local/www/firewall_shaper_wizards.php:107
+msgid "Wizards"
+msgstr "Wizards"
+
+#: usr/local/www/firewall_shaper_layer7.php:432
+msgid "Create new l7 rules group"
+msgstr "Criar um novo grupo de regras l7"
+
+#: usr/local/www/firewall_shaper_layer7.php:445
+msgid "Rule(s)"
+msgstr "Regra(s)"
+
+#: usr/local/www/firewall_shaper_layer7.php:457
+msgid "Add one or more rules"
+msgstr "Adicionar uma ou mais regras"
+
+#: usr/local/www/firewall_shaper_layer7.php:473
+msgid "Structure"
+msgstr "Estrutura"
+
+#: usr/local/www/firewall_shaper_layer7.php:480
+msgid "Behaviour"
+msgstr "Comportamento"
+
+#: usr/local/www/firewall_shaper_layer7.php:558
+#: usr/local/www/interfaces_groups_edit.php:315
+#: usr/local/www/firewall_aliases_edit.php:680
+#: usr/local/www/interfaces_qinq_edit.php:387
+#: usr/local/www/services_dhcp.php:855
+#: usr/local/www/services_igmpproxy_edit.php:273
+#: usr/local/www/vpn_pppoe_edit.php:573 usr/local/www/services_dhcpv6.php:768
+#: usr/local/www/services_unbound_acls.php:279
+#: usr/local/www/services_dnsmasq_edit.php:271
+#: usr/local/www/system_certmanager.php:793
+#: usr/local/www/services_igmpproxy_edit.php:275
+#: usr/local/www/firewall_aliases_edit.php:685
+#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:863
+#: usr/local/www/vpn_pppoe_edit.php:574
+#: usr/local/www/services_dnsmasq_edit.php:272
+#: usr/local/www/services_router_advertisements.php:358
+#: usr/local/www/interfaces_qinq_edit.php:388
+#: usr/local/www/firewall_aliases_edit.php:688
+#: usr/local/www/services_dhcp.php:1090
+#: usr/local/www/interfaces_groups_edit.php:316
+#: usr/local/www/services_dhcpv6.php:794 usr/local/www/vpn_pppoe_edit.php:577
+#: usr/local/www/services_dhcp.php:1103
+#: usr/local/www/system_certmanager.php:818
+#: usr/local/www/services_dhcpv6.php:811
+#: usr/local/www/interfaces_qinq_edit.php:391
+#: usr/local/www/firewall_shaper_layer7.php:555
+#: usr/local/www/services_router_advertisements.php:353
+#: usr/local/www/services_dhcp.php:1123
+#: usr/local/www/system_certmanager.php:820
+#: usr/local/www/firewall_aliases_edit.php:717
+#: usr/local/www/interfaces_groups_edit.php:313
+#: usr/local/www/services_dhcp.php:1135
+#: usr/local/www/firewall_aliases_edit.php:716
+msgid "add another entry"
+msgstr "adicionar outra entrada"
+
+#: usr/local/www/firewall_shaper_vinterface.php:102
+msgid ""
+"This pipe/queue is referenced in filter rules, please remove references from "
+"there before deleteing."
+msgstr ""
+"O pipe/fila é referenciado em regras de firewall, por favor remova estas "
+"referências antes de apagar."
+
+#: usr/local/www/firewall_shaper_vinterface.php:114
+#, php-format
+msgid "No queue with name %s was found!"
+msgstr "Nenhuma fila com o nome %s foi encontrada!"
+
+#: usr/local/www/firewall_shaper_vinterface.php:160
+#: usr/local/www/firewall_shaper.php:159 usr/local/www/firewall_shaper.php:160
+msgid "Could not create new queue/discipline!"
+msgstr "Não pôde criar uma nova fila/disciplina!"
+
+#: usr/local/www/firewall_shaper_vinterface.php:172
+#: usr/local/www/firewall_shaper_vinterface.php:181
+#: usr/local/www/firewall_shaper_vinterface.php:190
+#: usr/local/www/firewall_shaper.php:175 usr/local/www/firewall_shaper.php:184
+#: usr/local/www/firewall_shaper.php:193
+#: usr/local/www/firewall_shaper_vinterface.php:182
+#: usr/local/www/firewall_shaper_vinterface.php:192
+#: usr/local/www/firewall_shaper.php:176 usr/local/www/firewall_shaper.php:185
+#: usr/local/www/firewall_shaper.php:194
+#: usr/local/www/firewall_shaper_vinterface.php:173
+#: usr/local/www/firewall_shaper_vinterface.php:183
+#: usr/local/www/firewall_shaper_vinterface.php:193
+msgid "Queue not found!"
+msgstr "Fila não encontrada!"
+
+#: usr/local/www/firewall_shaper_vinterface.php:235
+#: usr/local/www/firewall_shaper.php:270
+#: usr/local/www/firewall_shaper_vinterface.php:245
+#: usr/local/www/firewall_shaper.php:271
+#: usr/local/www/firewall_shaper_vinterface.php:247
+msgid "Could not add new queue."
+msgstr "Não pôde adicionar uma nova fila."
+
+#: usr/local/www/firewall_shaper_vinterface.php:304
+#: usr/local/www/firewall_shaper.php:346
+#: usr/local/www/firewall_shaper_vinterface.php:314
+#: usr/local/www/firewall_shaper.php:347
+#: usr/local/www/firewall_shaper_vinterface.php:316
+msgid "Queue Actions"
+msgstr "Ações de Fila"
+
+#: usr/local/www/firewall_shaper_vinterface.php:315
+#: usr/local/www/firewall_shaper.php:357
+#: usr/local/www/firewall_shaper_vinterface.php:325
+#: usr/local/www/firewall_shaper.php:358
+#: usr/local/www/firewall_shaper_vinterface.php:327
+msgid "Add new queue"
+msgstr "Adicionar nova fila"
+
+#: usr/local/www/firewall_shaper_vinterface.php:326
+#: usr/local/www/firewall_shaper.php:367
+#: usr/local/www/firewall_shaper_vinterface.php:336
+#: usr/local/www/firewall_shaper.php:368
+#: usr/local/www/firewall_shaper_vinterface.php:338
+#: usr/local/www/firewall_shaper.php:369
+msgid "Delete this queue"
+msgstr "Apagar essa fila"
+
+#: usr/local/www/firewall_shaper_vinterface.php:328
+#: usr/local/www/firewall_shaper_vinterface.php:338
+#: usr/local/www/firewall_shaper_vinterface.php:340
+msgid "Delete virtual interface"
+msgstr "Apagar interface virtual"
+
+#: usr/local/www/firewall_shaper_vinterface.php:366
+#: usr/local/www/firewall_shaper_wizards.php:96
+#: usr/local/www/firewall_shaper.php:403
+#: usr/local/www/firewall_shaper_vinterface.php:376
+#: usr/local/www/firewall_shaper.php:404
+#: usr/local/www/firewall_shaper_vinterface.php:383
+#: usr/local/www/firewall_shaper.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+msgid "The traffic shaper configuration has been changed."
+msgstr "A configuração do traffic shaper foi modificada."
+
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_shaper_vinterface.php:405
+#: usr/local/www/firewall_shaper_vinterface.php:412
+#: usr/local/www/firewall_shaper_vinterface.php:415
+msgid "Create new limiter"
+msgstr "Criar novo limitador"
+
+#: usr/local/www/firewall_shaper_wizards.php:76
+msgid "Single Lan multi Wan"
+msgstr "Lan única Wan múltipla"
+
+#: usr/local/www/firewall_shaper_wizards.php:77
+msgid "Single Wan multi Lan"
+msgstr "Wan única Lan múltipla"
+
+#: usr/local/www/firewall_shaper_wizards.php:78
+msgid "Multiple Lan/Wan"
+msgstr "Lan/Wan Múltiplas"
+
+#: usr/local/www/firewall_shaper_wizards.php:79
+msgid "Dedicated Links"
+msgstr "Links dedicados"
+
+#: usr/local/www/firewall_shaper_wizards.php:115
+#: usr/local/www/firewall_shaper_wizards.php:116
+msgid "Wizard function"
+msgstr "Função do Wizard"
+
+#: usr/local/www/firewall_shaper_wizards.php:116
+#: usr/local/www/firewall_shaper_wizards.php:117
+msgid "Wizard Link"
+msgstr "Link do Wizard"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:65
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:107
+#: usr/local/www/system.php:113 usr/local/www/system.php:265
+#: usr/local/www/services_dnsmasq.php:244
+#: usr/local/www/services_dnsmasq.php:311
+#: usr/local/www/services_dnsmasq_edit.php:80
+#: usr/local/www/services_dnsmasq_edit.php:149
+#: usr/local/www/services_dnsmasq.php:332
+#: usr/local/www/services_dnsmasq_edit.php:81
+#: usr/local/www/services_dnsmasq_edit.php:204
+#: usr/local/www/services_dnsmasq_edit.php:238
+#: usr/local/www/services_unbound.php:280
+#: usr/local/www/services_unbound.php:347 usr/local/www/system.php:114
+#: usr/local/www/system.php:276 usr/local/www/services_dnsmasq.php:245
+#: usr/local/www/services_dnsmasq.php:333
+#: usr/local/www/services_dnsmasq_edit.php:205
+#: usr/local/www/services_dnsmasq_edit.php:239
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:72
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:130
+#: usr/local/www/system.php:107 usr/local/www/system.php:269
+#: usr/local/www/services_dnsmasq.php:270
+#: usr/local/www/services_dnsmasq.php:358
+#: usr/local/www/services_dnsmasq.php:283
+#: usr/local/www/services_dnsmasq.php:371
+#: usr/local/www/services_dnsmasq.php:347
+#: usr/local/www/services_dnsmasq.php:435
+msgid "Domain"
+msgstr "Domínio"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:70
+#: usr/local/www/services_dnsmasq_edit.php:88
+#: usr/local/www/services_dnsmasq_edit.php:89
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87
+msgid "A valid domain must be specified."
+msgstr "Um domínio válido deve ser especificado."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:73
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90
+msgid "A valid IP address must be specified, or # for an exclusion."
+msgstr "Um endereço IP válido deve ser especificado, ou # para uma exclusão."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dnsmasq.php:119
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/services_dhcpv6.php:791
+#: usr/local/www/services_dnsmasq_edit.php:166
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/services_dnsmasq.php:123 usr/local/www/services_dhcp.php:1153
+#: usr/local/www/services_dnsmasq.php:125
+#: usr/local/www/services_dnsmasq.php:146 usr/local/www/services_dhcp.php:1165
+msgid "DNS forwarder"
+msgstr "DNS forwarder"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:96
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+msgid "Edit Domain Override"
+msgstr "Editar Sobrescrita de domínio"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:110
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:133
+msgid "Domain to override (NOTE: this does not have to be a valid TLD!)"
+msgstr "Domínio para sobrescrever (NOTA: isso não precisa ser um TLD válido!)"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/firewall_nat_edit.php:745 usr/local/www/system.php:260
+#: usr/local/www/system.php:271 usr/local/www/services_dnsmasq_edit.php:146
+#: usr/local/www/services_dnsmasq_edit.php:153
+#: usr/local/www/services_dnsmasq_edit.php:160
+#: usr/local/www/services_dnsmasq_edit.php:201
+#: usr/local/www/services_dnsmasq_edit.php:208
+#: usr/local/www/services_dnsmasq_edit.php:215
+#: usr/local/www/firewall_nat_edit.php:752 usr/local/www/system.php:282
+#: usr/local/www/services_dnsmasq_edit.php:202
+#: usr/local/www/services_dnsmasq_edit.php:209
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/firewall_nat_edit.php:751 usr/local/www/system.php:264
+#: usr/local/www/system.php:275 usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:758
+#: usr/local/www/firewall_nat_edit.php:759
+msgid "e.g."
+msgstr "ex."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:111
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+msgid "test"
+msgstr "teste"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:117
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:140
+msgid "IP address of the authoritative DNS server for this domain"
+msgstr "Endereço IP do servidor DNS oficial para esse domínio"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:118
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+msgid "Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override."
+msgstr "Ou entre com # para remover a passagem através de host/sub-domínio para nameservers padrões, ao invés de substituir o anterior."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:106
+#: usr/local/www/firewall_virtual_ip_edit.php:415
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/firewall_aliases_edit.php:601
+#: usr/local/www/firewall_virtual_ip.php:186
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_monitor_edit.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:247
+#: usr/local/www/services_captiveportal.php:777
+#: usr/local/www/services_dhcp.php:813
+#: usr/local/www/load_balancer_relay_action_edit.php:463
+#: usr/local/www/load_balancer_relay_protocol.php:135
+#: usr/local/www/load_balancer_relay_protocol_edit.php:79
+#: usr/local/www/load_balancer_relay_protocol_edit.php:201
+#: usr/local/www/services_igmpproxy.php:96
+#: usr/local/www/services_igmpproxy_edit.php:185
+#: usr/local/www/system_authservers.php:161
+#: usr/local/www/system_authservers.php:184
+#: usr/local/www/system_authservers.php:449
+#: usr/local/www/system_authservers.php:738
+#: usr/local/www/vpn_ipsec_phase2.php:423
+#: usr/local/www/vpn_ipsec_phase2.php:465
+#: usr/local/www/system_certmanager.php:762
+#: usr/local/www/load_balancer_relay_action_edit.php:462
+#: usr/local/www/services_igmpproxy_edit.php:187
+#: usr/local/www/firewall_aliases_edit.php:606
+#: usr/local/www/status_ntpd.php:111
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/load_balancer_monitor.php:124
+#: usr/local/www/services_dhcp.php:851 usr/local/www/vpn_ipsec_phase2.php:449
+#: usr/local/www/vpn_ipsec_phase2.php:491
+#: usr/local/www/firewall_virtual_ip_edit.php:403
+#: usr/local/www/load_balancer_relay_protocol_edit.php:199
+#: usr/local/www/load_balancer_relay_action_edit.php:460
+#: usr/local/www/load_balancer_monitor_edit.php:245
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/status_ntpd.php:127
+#: usr/local/www/services_captiveportal.php:817
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_relay_protocol.php:133
+#: usr/local/www/services_dhcp.php:1048
+#: usr/local/www/load_balancer_relay_action.php:139
+#: usr/local/www/vpn_ipsec_phase2.php:515
+#: usr/local/www/vpn_ipsec_phase2.php:551
+#: usr/local/www/vpn_ipsec_phase2.php:593
+#: usr/local/www/firewall_virtual_ip_edit.php:355
+#: usr/local/www/firewall_virtual_ip.php:190
+#: usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185
+#: usr/local/www/system_authservers.php:454
+#: usr/local/www/system_authservers.php:744
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_virtual_ip_edit.php:347
+#: usr/local/www/services_dhcp.php:1061
+#: usr/local/www/system_certmanager.php:787
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/system_authservers.php:461
+#: usr/local/www/system_authservers.php:760
+#: usr/local/www/services_captiveportal.php:805
+#: usr/local/www/vpn_ipsec_phase2.php:537
+#: usr/local/www/vpn_ipsec_phase2.php:572
+#: usr/local/www/vpn_ipsec_phase2.php:614
+#: usr/local/www/firewall_virtual_ip_edit.php:367
+#: usr/local/www/services_dhcp.php:1081
+#: usr/local/www/system_certmanager.php:788 usr/local/www/status_ntpd.php:133
+#: usr/local/www/services_captiveportal.php:821
+#: usr/local/www/firewall_aliases_edit.php:640
+#: usr/local/www/firewall_virtual_ip.php:227
+#: usr/local/www/firewall_virtual_ip.php:234
+#: usr/local/www/firewall_virtual_ip_edit.php:371
+#: usr/local/www/services_dhcp.php:1093
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:188
+#: usr/local/www/system_authservers.php:472
+#: usr/local/www/system_authservers.php:802
+#: usr/local/www/firewall_aliases_edit.php:639
+msgid "Type"
+msgstr "Tipo"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:111
+#: usr/local/www/diag_logs_settings.php:88
+#: usr/local/www/services_dhcp_edit.php:126
+#: usr/local/www/services_dnsmasq_edit.php:91
+#: usr/local/www/services_dnsmasq_edit.php:92
+#: usr/local/www/services_dhcp_edit.php:128
+#: usr/local/www/firewall_virtual_ip_edit.php:114
+#: usr/local/www/services_dhcp_edit.php:162
+#: usr/local/www/firewall_virtual_ip_edit.php:115
+msgid "A valid IP address must be specified."
+msgstr "Um endereço de IP válido de ser especificado."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:116
+#: usr/local/www/firewall_virtual_ip_edit.php:119
+#: usr/local/www/firewall_virtual_ip_edit.php:123
+msgid "The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP."
+msgstr "A interface escolhida para o VIP não possui IPv4 ou IPv6 configurado, portanto não pode ser usado como um pai para o VIP."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:118
+#: usr/local/www/firewall_virtual_ip_edit.php:121
+#, php-format
+msgid "The %s IP address may not be used in a virtual entry."
+msgstr "O endereço de IP %s não deve ser usado em uma entrada virtual."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:123
+#: usr/local/www/firewall_virtual_ip_edit.php:126
+msgid "The /32 subnet mask is invalid for CARP IPs."
+msgstr "A máscara de subrede /32 é inválida para IPs CARP."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:127
+#: usr/local/www/firewall_virtual_ip_edit.php:130
+msgid "The /128 subnet mask is invalid for CARP IPs."
+msgstr "A máscara de rede /128 é inválida para IPs CARP."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:135
+#: usr/local/www/firewall_virtual_ip_edit.php:138
+msgid "There is already a virtual IP entry for the specified IP address."
+msgstr "Já existe uma entrada de IP virtual para o endereço de IP especificado."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:150
+#, php-format
+msgid "VHID %s is already in use. Pick a unique number."
+msgstr "VHID %s já está em uso. Escolha um número único."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:154
+#: usr/local/www/firewall_virtual_ip_edit.php:157
+#: usr/local/www/firewall_virtual_ip_edit.php:156
+#: usr/local/www/firewall_virtual_ip_edit.php:148
+#: usr/local/www/firewall_virtual_ip_edit.php:164
+msgid "You must specify a CARP password that is shared between the two VHID members."
+msgstr "Você deve especificar uma senha CARP que é compartilhada entre os dois membros VHID."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:161
+#: usr/local/www/firewall_virtual_ip_edit.php:170
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:164
+#: usr/local/www/firewall_virtual_ip_edit.php:173
+#: usr/local/www/firewall_virtual_ip_edit.php:185
+#: usr/local/www/firewall_virtual_ip_edit.php:163
+#: usr/local/www/firewall_virtual_ip_edit.php:172
+#: usr/local/www/firewall_virtual_ip_edit.php:184
+#: usr/local/www/firewall_virtual_ip_edit.php:155
+#: usr/local/www/firewall_virtual_ip_edit.php:176
+#: usr/local/www/firewall_virtual_ip_edit.php:178
+#: usr/local/www/firewall_virtual_ip_edit.php:197
+#: usr/local/www/firewall_virtual_ip_edit.php:199
+#, php-format
+msgid "Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."
+msgstr "Lamento, não podemos localizar uma interface com uma subrede correspondente a %s. Por favor, adicione um alias de IP nessa subrede nessa interface."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:174
+#: usr/local/www/firewall_virtual_ip_edit.php:177
+#: usr/local/www/firewall_virtual_ip_edit.php:176
+#: usr/local/www/firewall_virtual_ip_edit.php:168
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:184
+msgid "A CARP parent interface can only be used with IP Alias type Virtual IPs."
+msgstr "Para este tipo de VIP, um carp pai não é permitido."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:188
+#: usr/local/www/firewall_virtual_ip_edit.php:191
+#: usr/local/www/firewall_virtual_ip_edit.php:190
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:203
+#: usr/local/www/firewall_virtual_ip_edit.php:207
+msgid "For this type of VIP, a CARP parent is not allowed."
+msgstr "Para este tipo de VIP, um CARP pai não é permitido."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:202
+msgid "This entry cannot be modified because it is still referenced by CARP"
+msgstr "Essa entrada não pode ser modificada porque ela ainda é referenciada pela CARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/firewall_virtual_ip_edit.php:268
+#: usr/local/www/firewall_virtual_ip_edit.php:261
+#: usr/local/www/firewall_virtual_ip_edit.php:253
+#: usr/local/www/firewall_virtual_ip_edit.php:273
+#: usr/local/www/firewall_virtual_ip_edit.php:277
+msgid "Virtual IP Address"
+msgstr "Endereços de IP Virtuais"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:300
+#: usr/local/www/firewall_virtual_ip_edit.php:302
+#: usr/local/www/firewall_virtual_ip_edit.php:288
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/firewall_virtual_ip_edit.php:287
+#: usr/local/www/firewall_virtual_ip_edit.php:289
+#: usr/local/www/firewall_virtual_ip_edit.php:279
+#: usr/local/www/firewall_virtual_ip_edit.php:281
+#: usr/local/www/firewall_virtual_ip_edit.php:299
+#: usr/local/www/firewall_virtual_ip_edit.php:301
+#: usr/local/www/firewall_virtual_ip_edit.php:303
+#: usr/local/www/firewall_virtual_ip_edit.php:305
+msgid "This must be the network's subnet mask. It does not specify a CIDR range."
+msgstr "Essa deve ser a máscara de subrede da rede. Ela não especifica um intervalo CIDR."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:301
+#: usr/local/www/firewall_virtual_ip_edit.php:289
+#: usr/local/www/firewall_virtual_ip_edit.php:288
+#: usr/local/www/firewall_virtual_ip_edit.php:280
+#: usr/local/www/firewall_virtual_ip_edit.php:300
+#: usr/local/www/firewall_virtual_ip_edit.php:304
+msgid "This is a CIDR block of proxy ARP addresses."
+msgstr "Esse é um bloqueio CIDR de endereços Proxy ARP."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:400
+#: usr/local/www/firewall_virtual_ip_edit.php:352
+#: usr/local/www/firewall_virtual_ip_edit.php:344
+#: usr/local/www/firewall_virtual_ip_edit.php:364
+#: usr/local/www/firewall_virtual_ip_edit.php:368
+msgid "Edit Virtual IP"
+msgstr "Editar IP Virtual"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:418
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+#: usr/local/www/firewall_virtual_ip_edit.php:362
+#: usr/local/www/firewall_virtual_ip_edit.php:354
+#: usr/local/www/firewall_virtual_ip_edit.php:374
+#: usr/local/www/firewall_virtual_ip_edit.php:378
+msgid "Proxy ARP"
+msgstr "Proxy ARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:420
+#: usr/local/www/carp_status.php:100
+#: usr/local/www/firewall_virtual_ip_edit.php:408
+#: usr/local/www/carp_status.php:92
+#: usr/local/www/firewall_virtual_ip_edit.php:360
+#: usr/local/www/firewall_virtual_ip_edit.php:352
+#: usr/local/www/firewall_virtual_ip_edit.php:372
+#: usr/local/www/firewall_virtual_ip_edit.php:376
+msgid "CARP"
+msgstr "CARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:422
+#: usr/local/www/firewall_virtual_ip_edit.php:410
+#: usr/local/www/firewall_virtual_ip_edit.php:364
+#: usr/local/www/firewall_virtual_ip_edit.php:356
+#: usr/local/www/firewall_virtual_ip_edit.php:376
+#: usr/local/www/firewall_virtual_ip_edit.php:380
+msgid "Other"
+msgstr "Outro"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:358
+#: usr/local/www/firewall_virtual_ip_edit.php:350
+#: usr/local/www/firewall_virtual_ip_edit.php:370
+#: usr/local/www/firewall_virtual_ip_edit.php:374
+msgid "IP Alias"
+msgstr "Alias do IP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:435
+#: usr/local/www/diag_packet_capture.php:119
+#: usr/local/www/services_wol.php:130 usr/local/www/services_wol.php:161
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:126
+#: usr/local/www/interfaces_bridge.php:107
+#: usr/local/www/interfaces_gif.php:106 usr/local/www/interfaces_gre.php:107
+#: usr/local/www/interfaces_groups_edit.php:274
+#: usr/local/www/firewall_nat_1to1.php:104
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+#: usr/local/www/firewall_nat_1to1_edit.php:280
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:185
+#: usr/local/www/firewall_nat_edit.php:476
+#: usr/local/www/firewall_nat_out.php:341
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:417
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/interfaces_assign.php:420
+#: usr/local/www/interfaces_vlan.php:108 usr/local/www/system_routes.php:128
+#: usr/local/www/interfaces_lagg.php:112 usr/local/www/interfaces_ppps.php:108
+#: usr/local/www/interfaces_qinq.php:116
+#: usr/local/www/interfaces_wireless.php:106 usr/local/www/vpn_pppoe.php:101
+#: usr/local/www/services_captiveportal.php:146 usr/local/www/diag_ping.php:95
+#: usr/local/www/services_dhcp_relay.php:72 usr/local/www/status_graph.php:179
+#: usr/local/www/diag_arp.php:316
+#: usr/local/www/services_igmpproxy_edit.php:161
+#: usr/local/www/system_gateways.php:153
+#: usr/local/www/system_gateways_edit.php:98
+#: usr/local/www/system_gateways_edit.php:347
+#: usr/local/www/vpn_ipsec_phase1.php:538 usr/local/www/vpn_l2tp.php:304
+#: usr/local/www/vpn_openvpn_client.php:451
+#: usr/local/www/vpn_openvpn_server.php:691
+#: usr/local/www/vpn_pppoe_edit.php:372
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:42
+#: usr/local/www/diag_ndp.php:132 usr/local/www/firewall_nat_npt.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:104
+#: usr/local/www/firewall_nat_npt_edit.php:166
+#: usr/local/www/services_dhcpv6_relay.php:73
+#: usr/local/www/firewall_nat_out.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:287
+#: usr/local/www/firewall_nat_npt_edit.php:171
+#: usr/local/www/status_graph.php:177
+#: usr/local/www/firewall_nat_out_edit.php:430
+#: usr/local/www/firewall_rules_edit.php:760
+#: usr/local/www/services_igmpproxy_edit.php:163
+#: usr/local/www/services_captiveportal.php:147
+#: usr/local/www/system_gateways_edit.php:99
+#: usr/local/www/system_gateways_edit.php:353
+#: usr/local/www/services_dyndns.php:108
+#: usr/local/www/vpn_openvpn_server.php:764
+#: usr/local/www/diag_packet_capture.php:123
+#: usr/local/www/firewall_nat_edit.php:483
+#: usr/local/www/vpn_openvpn_client.php:456
+#: usr/local/www/firewall_virtual_ip_edit.php:423
+#: usr/local/www/vpn_pppoe_edit.php:373 usr/local/www/firewall_nat_out.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:285
+#: usr/local/www/firewall_nat_npt_edit.php:170 usr/local/www/vpn_pppoe.php:102
+#: usr/local/www/status_graph.php:183 usr/local/www/interfaces_qinq.php:117
+#: usr/local/www/interfaces_ppps.php:109
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_lagg.php:113 usr/local/www/interfaces_gre.php:108
+#: usr/local/www/interfaces_wireless.php:107
+#: usr/local/www/services_captiveportal.php:153
+#: usr/local/www/system_gateways_edit.php:100
+#: usr/local/www/system_gateways_edit.php:459
+#: usr/local/www/interfaces_assign.php:414
+#: usr/local/www/vpn_openvpn_server.php:782
+#: usr/local/www/interfaces_groups_edit.php:275
+#: usr/local/www/diag_packet_capture.php:181
+#: usr/local/www/interfaces_vlan.php:109
+#: usr/local/www/firewall_nat_edit.php:482
+#: usr/local/www/vpn_openvpn_client.php:464 usr/local/www/vpn_l2tp.php:305
+#: usr/local/www/firewall_virtual_ip_edit.php:368
+#: usr/local/www/interfaces_gif.php:107
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/vpn_ipsec_phase1.php:537 usr/local/www/vpn_l2tp.php:308
+#: usr/local/www/vpn_pppoe.php:103 usr/local/www/vpn_openvpn_client.php:482
+#: usr/local/www/diag_testport.php:143
+#: usr/local/www/firewall_rules_edit.php:763
+#: usr/local/www/interfaces_qinq.php:120
+#: usr/local/www/firewall_virtual_ip.php:203
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:477 usr/local/www/status_graph.php:196
+#: usr/local/www/interfaces_lagg.php:117 usr/local/www/interfaces_vlan.php:115
+#: usr/local/www/firewall_virtual_ip_edit.php:360
+#: usr/local/www/interfaces_bridge.php:114
+#: usr/local/www/interfaces_wireless.php:109
+#: usr/local/www/system_routes.php:132 usr/local/www/vpn_pppoe_edit.php:376
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/vpn_ipsec_phase1.php:558 usr/local/www/interfaces_gre.php:112
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:434
+#: usr/local/www/vpn_openvpn_server.php:808
+#: usr/local/www/services_dyndns.php:89 usr/local/www/interfaces_gif.php:111
+#: usr/local/www/system_gateways_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:775
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:215
+#: usr/local/www/firewall_nat_edit.php:192
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:489 usr/local/www/status_graph.php:206
+#: usr/local/www/firewall_virtual_ip_edit.php:380
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:446
+#: usr/local/www/services_dyndns.php:85
+#: usr/local/www/system_gateways_edit.php:491
+#: usr/local/www/firewall_virtual_ip.php:226
+#: usr/local/www/firewall_nat_edit.php:490 usr/local/www/system_routes.php:148
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_npt_edit.php:169
+#: usr/local/www/firewall_nat_1to1_edit.php:286
+#: usr/local/www/firewall_rules_edit.php:823
+#: usr/local/www/firewall_virtual_ip.php:233
+#: usr/local/www/firewall_virtual_ip_edit.php:384
+msgid "Interface"
+msgstr "Interface"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:452
+#: usr/local/www/firewall_virtual_ip_edit.php:440
+#: usr/local/www/firewall_virtual_ip_edit.php:385
+#: usr/local/www/firewall_virtual_ip_edit.php:377
+#: usr/local/www/firewall_virtual_ip_edit.php:397
+#: usr/local/www/firewall_virtual_ip_edit.php:402
+msgid "IP Address(es)"
+msgstr "Endereço(s) IP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:456
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_out_edit.php:472
+#: usr/local/www/firewall_nat_out_edit.php:506
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules_edit.php:958
+#: usr/local/www/firewall_nat_1to1_edit.php:345
+#: usr/local/www/firewall_nat_1to1_edit.php:400
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_nat_out_edit.php:519
+#: usr/local/www/firewall_rules_edit.php:900
+#: usr/local/www/firewall_rules_edit.php:993
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_virtual_ip_edit.php:444
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+#: usr/local/www/firewall_nat_1to1_edit.php:398
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_virtual_ip_edit.php:389
+#: usr/local/www/firewall_rules_edit.php:903
+#: usr/local/www/firewall_rules_edit.php:1002
+#: usr/local/www/firewall_nat_edit.php:546
+#: usr/local/www/firewall_nat_edit.php:635
+#: usr/local/www/firewall_virtual_ip_edit.php:381
+#: usr/local/www/firewall_nat_out_edit.php:489
+#: usr/local/www/firewall_nat_out_edit.php:523
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_virtual_ip_edit.php:401
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_nat_out_edit.php:535
+#: usr/local/www/firewall_rules_edit.php:914
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_nat_1to1_edit.php:344
+#: usr/local/www/firewall_nat_1to1_edit.php:399
+#: usr/local/www/firewall_nat_out_edit.php:536
+#: usr/local/www/firewall_rules_edit.php:962
+#: usr/local/www/firewall_rules_edit.php:1062
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+msgid "Type:"
+msgstr "Tipo:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:459
+#: usr/local/www/firewall_virtual_ip_edit.php:447
+#: usr/local/www/firewall_virtual_ip_edit.php:392
+#: usr/local/www/firewall_virtual_ip_edit.php:384
+#: usr/local/www/firewall_virtual_ip_edit.php:404
+#: usr/local/www/firewall_virtual_ip_edit.php:409
+msgid "Single address"
+msgstr "Endereço único"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:452
+#: usr/local/www/firewall_aliases_edit.php:624
+#: usr/local/www/firewall_nat_1to1_edit.php:345
+#: usr/local/www/firewall_nat_1to1_edit.php:400
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_nat_out_edit.php:476
+#: usr/local/www/firewall_nat_out_edit.php:511
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/system_routes.php:126 usr/local/www/vpn_ipsec_mobile.php:408
+#: usr/local/www/services_igmpproxy_edit.php:223
+#: usr/local/www/vpn_ipsec_phase2.php:428
+#: usr/local/www/vpn_ipsec_phase2.php:470
+#: usr/local/www/services_unbound_acls.php:236
+#: usr/local/www/firewall_nat_1to1_edit.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:407
+#: usr/local/www/firewall_nat_out_edit.php:489
+#: usr/local/www/firewall_nat_out_edit.php:524
+#: usr/local/www/firewall_rules_edit.php:907
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/services_igmpproxy_edit.php:225
+#: usr/local/www/firewall_aliases_edit.php:455
+#: usr/local/www/firewall_aliases_edit.php:629
+#: usr/local/www/vpn_ipsec_phase2.php:454
+#: usr/local/www/vpn_ipsec_phase2.php:496
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_virtual_ip_edit.php:449
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/vpn_ipsec_mobile.php:433
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/firewall_aliases_edit.php:632
+#: usr/local/www/vpn_ipsec_phase2.php:520
+#: usr/local/www/vpn_ipsec_phase2.php:556
+#: usr/local/www/vpn_ipsec_phase2.php:598
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_virtual_ip_edit.php:394
+#: usr/local/www/firewall_rules_edit.php:916
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:553
+#: usr/local/www/firewall_nat_edit.php:642
+#: usr/local/www/firewall_virtual_ip_edit.php:386
+#: usr/local/www/system_routes.php:130
+#: usr/local/www/firewall_nat_out_edit.php:493
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/vpn_ipsec_phase2.php:577
+#: usr/local/www/vpn_ipsec_phase2.php:619
+#: usr/local/www/firewall_rules_edit.php:928
+#: usr/local/www/firewall_rules_edit.php:1028
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_virtual_ip_edit.php:406
+#: usr/local/www/firewall_aliases_edit.php:479
+#: usr/local/www/firewall_aliases_edit.php:663
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:540
+#: usr/local/www/firewall_rules_edit.php:927
+#: usr/local/www/firewall_rules_edit.php:1027
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655 usr/local/www/system_routes.php:146
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:406
+#: usr/local/www/firewall_nat_out_edit.php:541
+#: usr/local/www/firewall_rules_edit.php:975
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_virtual_ip_edit.php:411
+#: usr/local/www/firewall_aliases_edit.php:478
+#: usr/local/www/firewall_aliases_edit.php:662
+msgid "Network"
+msgstr "Rede"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_nat_1to1_edit.php:367
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_nat_edit.php:575
+#: usr/local/www/firewall_nat_edit.php:685
+#: usr/local/www/firewall_nat_out_edit.php:479
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:542
+#: usr/local/www/firewall_rules_edit.php:895
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/vpn_ipsec_phase2.php:440
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_1to1_edit.php:374
+#: usr/local/www/firewall_nat_1to1_edit.php:429
+#: usr/local/www/firewall_nat_npt_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:249
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1023
+#: usr/local/www/vpn_ipsec_phase2.php:466
+#: usr/local/www/firewall_nat_edit.php:582
+#: usr/local/www/firewall_nat_edit.php:692
+#: usr/local/www/firewall_virtual_ip_edit.php:455
+#: usr/local/www/firewall_nat_1to1_edit.php:372
+#: usr/local/www/firewall_nat_1to1_edit.php:427
+#: usr/local/www/firewall_nat_npt_edit.php:220
+#: usr/local/www/firewall_nat_npt_edit.php:248
+#: usr/local/www/vpn_ipsec_phase2.php:532
+#: usr/local/www/vpn_ipsec_phase2.php:568
+#: usr/local/www/firewall_nat_edit.php:581
+#: usr/local/www/firewall_nat_edit.php:691
+#: usr/local/www/firewall_virtual_ip_edit.php:400
+#: usr/local/www/firewall_rules_edit.php:939
+#: usr/local/www/firewall_rules_edit.php:1038
+#: usr/local/www/firewall_nat_edit.php:576
+#: usr/local/www/firewall_nat_edit.php:686
+#: usr/local/www/firewall_virtual_ip_edit.php:392
+#: usr/local/www/firewall_nat_out_edit.php:496
+#: usr/local/www/firewall_nat_out_edit.php:532
+#: usr/local/www/firewall_nat_out_edit.php:559
+#: usr/local/www/vpn_ipsec_phase2.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:589
+#: usr/local/www/firewall_rules_edit.php:951
+#: usr/local/www/firewall_rules_edit.php:1051
+#: usr/local/www/firewall_nat_edit.php:588
+#: usr/local/www/firewall_nat_edit.php:698
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_nat_out_edit.php:508
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:571
+#: usr/local/www/firewall_rules_edit.php:950
+#: usr/local/www/firewall_rules_edit.php:1050
+#: usr/local/www/firewall_nat_edit.php:589
+#: usr/local/www/firewall_nat_edit.php:699
+#: usr/local/www/firewall_nat_npt_edit.php:219
+#: usr/local/www/firewall_nat_npt_edit.php:247
+#: usr/local/www/firewall_nat_1to1_edit.php:373
+#: usr/local/www/firewall_nat_1to1_edit.php:428
+#: usr/local/www/firewall_nat_out_edit.php:510
+#: usr/local/www/firewall_nat_out_edit.php:545
+#: usr/local/www/firewall_rules_edit.php:998
+#: usr/local/www/firewall_rules_edit.php:1098
+#: usr/local/www/firewall_virtual_ip_edit.php:417
+msgid "Address:"
+msgstr "Endereço:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_virtual_ip_edit.php:412
+#: usr/local/www/firewall_virtual_ip_edit.php:404
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:429
+msgid "Expansion:"
+msgstr "Expansão:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:499
+#: usr/local/www/firewall_virtual_ip_edit.php:487
+#: usr/local/www/firewall_virtual_ip_edit.php:432
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/firewall_virtual_ip_edit.php:444
+#: usr/local/www/firewall_virtual_ip_edit.php:449
+msgid "Virtual IP Password"
+msgstr "Senha de IP Virtual"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/firewall_virtual_ip_edit.php:489
+#: usr/local/www/firewall_virtual_ip_edit.php:434
+#: usr/local/www/firewall_virtual_ip_edit.php:426
+#: usr/local/www/firewall_virtual_ip_edit.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:451
+msgid "Enter the VHID group password."
+msgstr "Informe a senha de grupo VHID."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:505
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:438
+#: usr/local/www/firewall_virtual_ip_edit.php:430
+#: usr/local/www/firewall_virtual_ip_edit.php:450
+#: usr/local/www/firewall_virtual_ip_edit.php:455
+msgid "VHID Group"
+msgstr "Grupo VHID"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:513
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/firewall_virtual_ip_edit.php:446
+#: usr/local/www/firewall_virtual_ip_edit.php:438
+#: usr/local/www/firewall_virtual_ip_edit.php:458
+#: usr/local/www/firewall_virtual_ip_edit.php:463
+msgid "Enter the VHID group that the machines will share"
+msgstr "Informe o grupo VHID que a máquina irá compartilhar"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:517
+#: usr/local/www/firewall_virtual_ip_edit.php:505
+#: usr/local/www/firewall_virtual_ip_edit.php:450
+#: usr/local/www/firewall_virtual_ip_edit.php:442
+#: usr/local/www/firewall_virtual_ip_edit.php:462
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+msgid "Advertising Frequency"
+msgstr "Frequência de anúncio"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:534
+#: usr/local/www/firewall_virtual_ip_edit.php:522
+#: usr/local/www/firewall_virtual_ip_edit.php:467
+#: usr/local/www/firewall_virtual_ip_edit.php:459
+#: usr/local/www/firewall_virtual_ip_edit.php:479
+#: usr/local/www/firewall_virtual_ip_edit.php:484
+msgid "The frequency that this machine will advertise. 0 means usually master. Otherwise the lowest combination of both values in the cluster determines the master."
+msgstr "A frequência em que essa máquina irá anunciar. 0 normalmente significa master. Caso contrário, a menor combinação dos dois valores no cluster determinará o master."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:557
+#: usr/local/www/diag_logs_settings.php:326
+#: usr/local/www/diag_packet_capture.php:195
+#: usr/local/www/services_dyndns.php:160 usr/local/www/services_wol.php:210
+#: usr/local/www/interfaces_bridge.php:144
+#: usr/local/www/interfaces_bridge_edit.php:446
+#: usr/local/www/interfaces_bridge_edit.php:490
+#: usr/local/www/interfaces_bridge_edit.php:534
+#: usr/local/www/interfaces_gif.php:132 usr/local/www/interfaces_gre.php:133
+#: usr/local/www/interfaces_groups.php:148
+#: usr/local/www/firewall_aliases.php:229
+#: usr/local/www/firewall_nat_1to1.php:179
+#: usr/local/www/firewall_nat_out.php:459
+#: usr/local/www/firewall_schedule.php:240 usr/local/www/diag_backup.php:655
+#: usr/local/www/firewall_virtual_ip.php:241 usr/local/www/interfaces.php:1845
+#: usr/local/www/interfaces_vlan.php:134 usr/local/www/system_routes.php:188
+#: usr/local/www/interfaces_lagg.php:138
+#: usr/local/www/interfaces_ppps_edit.php:620
+#: usr/local/www/interfaces_qinq.php:151
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/services_captiveportal.php:929
+#: usr/local/www/services_captiveportal_filemanager.php:215
+#: usr/local/www/diag_ipsec.php:163 usr/local/www/diag_ipsec_sad.php:134
+#: usr/local/www/services_captiveportal_ip.php:170
+#: usr/local/www/services_captiveportal_mac.php:190
+#: usr/local/www/diag_ipsec_spd.php:143 usr/local/www/services_dhcp.php:715
+#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dnsmasq.php:214
+#: usr/local/www/services_captiveportal_hostname.php:171
+#: usr/local/www/services_captiveportal_vouchers.php:603
+#: usr/local/www/diag_routes.php:72
+#: usr/local/www/status_rrd_graph_settings.php:236
+#: usr/local/www/services_dyndns_edit.php:189
+#: usr/local/www/services_dyndns_edit.php:245
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_rfc2136_edit.php:209
+#: usr/local/www/system_advanced_admin.php:289
+#: usr/local/www/system_gateway_groups.php:195 usr/local/www/vpn_l2tp.php:451
+#: usr/local/www/services_dhcpv6.php:789
+#: usr/local/www/diag_logs_settings.php:333
+#: usr/local/www/services_captiveportal_vouchers.php:610
+#: usr/local/www/services_dyndns_edit.php:272
+#: usr/local/www/services_dyndns_edit.php:376
+#: usr/local/www/firewall_nat_out.php:470 usr/local/www/system_routes.php:199
+#: usr/local/www/status_rrd_graph_settings.php:237
+#: usr/local/www/diag_ipsec.php:221 usr/local/www/diag_backup.php:736
+#: usr/local/www/services_unbound.php:253
+#: usr/local/www/services_captiveportal.php:974
+#: usr/local/www/services_dyndns.php:181 usr/local/www/services_dhcp.php:728
+#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:914
+#: usr/local/www/load_balancer_virtual_server_edit.php:278
+#: usr/local/www/interfaces_bridge_edit.php:455
+#: usr/local/www/interfaces_bridge_edit.php:499
+#: usr/local/www/interfaces_bridge_edit.php:543
+#: usr/local/www/firewall_aliases.php:232
+#: usr/local/www/diag_packet_capture.php:215 usr/local/www/interfaces.php:2023
+#: usr/local/www/firewall_virtual_ip_edit.php:545
+#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:884
+#: usr/local/www/diag_logs_settings.php:353
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:624
+#: usr/local/www/firewall_nat_out.php:471
+#: usr/local/www/services_captiveportal_ip.php:168
+#: usr/local/www/interfaces_groups.php:149 usr/local/www/diag_ipsec.php:222
+#: usr/local/www/interfaces_qinq.php:152 usr/local/www/diag_ipsec_sad.php:135
+#: usr/local/www/services_captiveportal_mac.php:188
+#: usr/local/www/interfaces_bridge.php:145
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces_lagg.php:139
+#: usr/local/www/services_captiveportal_hostname.php:169
+#: usr/local/www/interfaces_gre.php:134 usr/local/www/diag_routes.php:73
+#: usr/local/www/system_gateway_groups.php:196
+#: usr/local/www/services_captiveportal.php:970
+#: usr/local/www/services_captiveportal_filemanager.php:212
+#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:932
+#: usr/local/www/services_dhcp.php:1118
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+#: usr/local/www/interfaces_bridge_edit.php:456
+#: usr/local/www/interfaces_bridge_edit.php:500
+#: usr/local/www/interfaces_bridge_edit.php:544
+#: usr/local/www/firewall_aliases.php:284
+#: usr/local/www/diag_packet_capture.php:262
+#: usr/local/www/interfaces_vlan.php:135 usr/local/www/interfaces.php:2011
+#: usr/local/www/vpn_l2tp.php:452
+#: usr/local/www/firewall_virtual_ip_edit.php:490
+#: usr/local/www/interfaces_gif.php:133 usr/local/www/diag_ipsec_spd.php:144
+#: usr/local/www/firewall_virtual_ip.php:247
+#: usr/local/www/services_dhcpv6.php:663 usr/local/www/services_dhcpv6.php:815
+#: usr/local/www/vpn_l2tp.php:455 usr/local/www/services_dyndns_edit.php:276
+#: usr/local/www/services_dyndns_edit.php:380
+#: usr/local/www/interfaces_qinq.php:155
+#: usr/local/www/interfaces_ppps_edit.php:627
+#: usr/local/www/firewall_virtual_ip.php:267
+#: usr/local/www/interfaces_lagg.php:143 usr/local/www/interfaces_vlan.php:141
+#: usr/local/www/firewall_virtual_ip_edit.php:482
+#: usr/local/www/diag_ipsec.php:223 usr/local/www/interfaces_bridge.php:151
+#: usr/local/www/services_captiveportal_vouchers.php:633
+#: usr/local/www/system_routes.php:203 usr/local/www/services_dhcp.php:921
+#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:1131
+#: usr/local/www/services_dhcpv6.php:680 usr/local/www/services_dhcpv6.php:832
+#: usr/local/www/firewall_nat_out.php:468
+#: usr/local/www/services_captiveportal.php:972
+#: usr/local/www/diag_backup.php:741
+#: usr/local/www/interfaces_bridge_edit.php:457
+#: usr/local/www/interfaces_bridge_edit.php:501
+#: usr/local/www/interfaces_bridge_edit.php:545
+#: usr/local/www/services_dnsmasq.php:240
+#: usr/local/www/services_captiveportal_mac.php:198
+#: usr/local/www/interfaces_gre.php:138 usr/local/www/interfaces_gif.php:137
+#: usr/local/www/interfaces.php:2038
+#: usr/local/www/services_dyndns_edit.php:278
+#: usr/local/www/services_dyndns_edit.php:388
+#: usr/local/www/firewall_aliases.php:287
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/diag_packet_capture.php:279
+#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:966
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/firewall_nat_out.php:475
+#: usr/local/www/services_captiveportal.php:988
+#: usr/local/www/services_dnsmasq.php:253
+#: usr/local/www/services_dyndns.php:177
+#: usr/local/www/system_gateway_groups.php:205
+#: usr/local/www/interfaces.php:2084
+#: usr/local/www/interfaces_ppps_edit.php:625
+#: usr/local/www/firewall_virtual_ip.php:290
+#: usr/local/www/firewall_aliases.php:288 usr/local/www/system_routes.php:219
+#: usr/local/www/firewall_nat_out.php:474
+#: usr/local/www/interfaces_bridge_edit.php:461
+#: usr/local/www/interfaces_bridge_edit.php:505
+#: usr/local/www/interfaces_bridge_edit.php:549
+#: usr/local/www/services_dnsmasq.php:317 usr/local/www/interfaces.php:2073
+#: usr/local/www/services_captiveportal_vouchers.php:638
+#: usr/local/www/diag_logs_settings.php:384
+#: usr/local/www/services_dyndns_edit.php:279
+#: usr/local/www/services_dyndns_edit.php:389
+#: usr/local/www/firewall_virtual_ip.php:298
+#: usr/local/www/firewall_virtual_ip_edit.php:506
+#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp.php:1163 usr/local/www/diag_backup.php:742
+#: usr/local/www/services_rfc2136_edit.php:222
+#: usr/local/www/services_dyndns.php:188 usr/local/www/interfaces.php:2109
+msgid "Note:"
+msgstr "Nota:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:559
+#: usr/local/www/firewall_virtual_ip_edit.php:547
+#: usr/local/www/firewall_virtual_ip_edit.php:492
+#: usr/local/www/firewall_virtual_ip_edit.php:484
+#: usr/local/www/firewall_virtual_ip_edit.php:503
+#: usr/local/www/firewall_virtual_ip_edit.php:508
+msgid "Proxy ARP and Other type Virtual IPs cannot be bound to by anything running on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type address for these cases."
+msgstr "IPs virtuais do tipo Proxy ARP e Outros não podem ser vinculados a nada rodando no firewall, como IPsec, OpenVPN, etc. Utilize endereços do tipo CARP ou Alis de IP para estes casos."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:560
+#: usr/local/www/firewall_virtual_ip_edit.php:548
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:485
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/firewall_virtual_ip_edit.php:509
+msgid "For more information on CARP and the above values, visit the OpenBSD "
+msgstr "Para mais informações sobre CARP e os valores acima, visite o OpenBSD "
+
+#: usr/local/www/firewall_virtual_ip_edit.php:560
+#: usr/local/www/firewall_virtual_ip_edit.php:548
+#: usr/local/www/firewall_virtual_ip_edit.php:493
+#: usr/local/www/firewall_virtual_ip_edit.php:485
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/firewall_virtual_ip_edit.php:509
+msgid "CARP FAQ"
+msgstr "FAQ do CARP"
+
+#: usr/local/www/load_balancer_relay_action.php:74
+msgid "This entry cannot be deleted because it is still referenced by at least one relay protocol."
+msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um protocolo relay."
+
+#: usr/local/www/load_balancer_relay_action.php:104
+#: usr/local/www/load_balancer_relay_action_edit.php:180
+msgid "Relay Action"
+msgstr "Ação Relay"
+
+#: usr/local/www/load_balancer_relay_action.php:118
+#: usr/local/www/load_balancer_relay_action.php:116
+msgid "The load balancer configuration has been changed.<br>You must apply the changes in order for them to take effect."
+msgstr "A configuração do balanceador de carga foi modificada.<br>Você deve aplicar as mudanças para que elas tenham efeito."
+
+#: usr/local/www/load_balancer_relay_action.php:128
+#: usr/local/www/load_balancer_relay_action.php:126
+msgid "Relay Actions"
+msgstr "Ações Relay"
+
+#: usr/local/www/load_balancer_relay_action.php:129
+#: usr/local/www/load_balancer_relay_action.php:127
+msgid "Relay Protocols"
+msgstr "Protocolos Relay"
+
+#: usr/local/www/load_balancer_relay_action.php:142
+#: usr/local/www/interfaces_qinq_edit.php:318
+#: usr/local/www/load_balancer_relay_action_edit.php:515
+#: usr/local/www/load_balancer_relay_action_edit.php:535
+#: usr/local/www/load_balancer_relay_protocol.php:136
+#: usr/local/www/load_balancer_relay_action_edit.php:514
+#: usr/local/www/load_balancer_relay_action_edit.php:534
+#: usr/local/www/interfaces_qinq_edit.php:319
+#: usr/local/www/load_balancer_relay_action_edit.php:512
+#: usr/local/www/load_balancer_relay_action_edit.php:532
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/interfaces_qinq_edit.php:322
+msgid "Options"
+msgstr "Opções"
+
+#: usr/local/www/diag_defaults.php:51
+msgid "The system has been reset to factory defaults and is now rebooting. This may take one minute."
+msgstr "O sistema foi restaurado para o padrão de fabrica e está sendo reiniciado agora. Isto pode levar uns minutos."
+
+#: usr/local/www/diag_defaults.php:58 usr/local/www/diag_defaults.php:52
+msgid "Factory defaults"
+msgstr "Padrão de fábrica"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70
+msgid "If you click"
+msgstr "Se você clicar"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:81
+#: usr/local/www/crash_reporter.php:76 usr/local/www/halt.php:69
+#: usr/local/www/pkg.php:342 usr/local/www/system_firmware.php:229
+#: usr/local/www/reboot.php:61 usr/local/www/reboot.php:72
+#: usr/local/www/pkg.php:424 usr/local/www/reboot.php:53
+#: usr/local/www/reboot.php:64 usr/local/www/halt.php:60
+#: usr/local/www/system_firmware.php:236 usr/local/www/system_firmware.php:239
+#: usr/local/www/diag_defaults.php:60 usr/local/www/diag_defaults.php:70
+#: usr/local/www/diag_defaults.php:82
+msgid "Yes"
+msgstr "Sim"
+
+#: usr/local/www/diag_defaults.php:67 usr/local/www/diag_defaults.php:70
+msgid "the firewall will:"
+msgstr "o firewall irá:"
+
+#: usr/local/www/diag_defaults.php:70 usr/local/www/diag_defaults.php:72
+msgid "Reset to factory defaults"
+msgstr "Restaurar o padrão de fábrica"
+
+#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:73
+msgid "LAN IP address will be reset to 192.168.1.1"
+msgstr "Endereço IP da LAN será redefinido para 192.168.1.1"
+
+#: usr/local/www/diag_defaults.php:72 usr/local/www/diag_defaults.php:74
+msgid "System will be configured as a DHCP server on the default LAN interface"
+msgstr "O sistema será configurado como um servidor DHCP na interface LAN padrão"
+
+#: usr/local/www/diag_defaults.php:73 usr/local/www/diag_defaults.php:75
+msgid "Reboot after changes are installed"
+msgstr "Reiniciar após instalar alterações"
+
+#: usr/local/www/diag_defaults.php:74 usr/local/www/diag_defaults.php:76
+msgid "WAN interface will be set to obtain an address automatically from a DHCP server"
+msgstr "Interface WAN será definida para obter um endereço automaticamente de um servidor DHCP"
+
+#: usr/local/www/diag_defaults.php:75 usr/local/www/diag_defaults.php:77
+msgid "webConfigurator admin username will be reset to 'admin'"
+msgstr "Usuário admin do webConfigurator será redefinido para 'admin'"
+
+#: usr/local/www/diag_defaults.php:76 usr/local/www/diag_defaults.php:78
+msgid "webConfigurator admin password will be reset to"
+msgstr "Senha para webConfigurator admin será redefinida para"
+
+#: usr/local/www/diag_defaults.php:79 usr/local/www/diag_defaults.php:80
+msgid "Are you sure you want to proceed?"
+msgstr "Você tem certeza que deseja prosseguir?"
+
+#: usr/local/www/diag_defaults.php:82 usr/local/www/crash_reporter.php:77
+#: usr/local/www/halt.php:70 usr/local/www/pkg.php:340
+#: usr/local/www/system_firmware.php:230 usr/local/www/reboot.php:62
+#: usr/local/www/pkg.php:422 usr/local/www/reboot.php:43
+#: usr/local/www/reboot.php:65 usr/local/www/halt.php:49
+#: usr/local/www/system_firmware.php:237 usr/local/www/system_firmware.php:240
+#: usr/local/www/diag_defaults.php:47 usr/local/www/diag_defaults.php:83
+msgid "No"
+msgstr "Não"
+
+#: usr/local/www/diag_logs.php:65 usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_filter.php:90
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_settings.php:132 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_filter_summary.php:34
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_relayd.php:55
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_routing.php:54
+#: usr/local/www/diag_logs_settings.php:136
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_filter.php:79 usr/local/www/diag_logs_ppp.php:57
+#: usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_settings.php:162
+msgid "System logs"
+msgstr "Registros do sistema"
+
+#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:67
+#: usr/local/www/diag_logs_dhcp.php:59 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_filter.php:103
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_ipsec.php:104 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/diag_logs_openvpn.php:71
+#: usr/local/www/diag_logs_settings.php:212
+#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/interfaces.php:1032
+#: usr/local/www/diag_logs_filter_summary.php:186
+#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:217
+#: usr/local/www/diag_logs_resolver.php:80
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/services_dhcp_edit.php:193 usr/local/www/interfaces.php:1118
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:224
+#: usr/local/www/diag_logs_relayd.php:69 usr/local/www/diag_logs_auth.php:68
+#: usr/local/www/diag_logs_ipsec.php:105
+#: usr/local/www/diag_logs_resolver.php:81 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/diag_logs_filter_summary.php:187
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/interfaces.php:1106
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_filter.php:93
+#: usr/local/www/services_dhcp_edit.php:301
+#: usr/local/www/diag_logs_filter_dynamic.php:99
+#: usr/local/www/diag_logs_ppp.php:70 usr/local/www/interfaces.php:1120
+#: usr/local/www/diag_logs_filter.php:123 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/diag_logs_settings.php:243
+#: usr/local/www/interfaces.php:1170
+msgid "DHCP"
+msgstr "DHCP"
+
+#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:54
+#: usr/local/www/diag_logs_auth.php:68 usr/local/www/diag_logs_dhcp.php:73
+#: usr/local/www/diag_logs_filter.php:104
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_ipsec.php:105 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_openvpn.php:72
+#: usr/local/www/diag_logs_settings.php:213
+#: usr/local/www/diag_logs_vpn.php:129
+#: usr/local/www/diag_logs_filter_summary.php:187
+#: usr/local/www/diag_logs_ppp.php:73 usr/local/www/diag_logs_relayd.php:69
+#: usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:218
+#: usr/local/www/diag_logs_resolver.php:81
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:225
+#: usr/local/www/diag_logs_relayd.php:70 usr/local/www/diag_logs_auth.php:69
+#: usr/local/www/diag_logs_ipsec.php:106
+#: usr/local/www/diag_logs_resolver.php:82 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/diag_logs_filter_summary.php:188
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_openvpn.php:73
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_filter.php:94
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_ppp.php:71 usr/local/www/diag_logs_filter.php:124
+#: usr/local/www/diag_logs_settings.php:244
+msgid "Portal Auth"
+msgstr "Portal Autorização"
+
+#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:69
+#: usr/local/www/diag_logs_dhcp.php:74 usr/local/www/diag_logs_filter.php:105
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_ipsec.php:106 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_openvpn.php:73
+#: usr/local/www/diag_logs_settings.php:214
+#: usr/local/www/diag_logs_vpn.php:130
+#: usr/local/www/diag_logs_filter_summary.php:188
+#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:74
+#: usr/local/www/diag_logs_relayd.php:70
+#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/diag_ipsec.php:48
+#: usr/local/www/diag_ipsec_sad.php:49 usr/local/www/diag_ipsec_spd.php:49
+#: usr/local/www/fbegin.inc:147 usr/local/www/fbegin.inc:164
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257
+#: usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:219 usr/local/www/fbegin.inc:181
+#: usr/local/www/diag_logs_resolver.php:82
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:226 usr/local/www/fbegin.inc:172
+#: usr/local/www/fbegin.inc:189 usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_ipsec.php:107
+#: usr/local/www/diag_logs_resolver.php:83 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_wireless.php:72
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/diag_logs_gateways.php:83
+#: usr/local/www/diag_logs_openvpn.php:74
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_filter.php:95 usr/local/www/vpn_ipsec.php:125
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_ppp.php:72 usr/local/www/fbegin.inc:163
+#: usr/local/www/fbegin.inc:180 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_filter.php:125
+#: usr/local/www/diag_logs_settings.php:245
+msgid "IPsec"
+msgstr "IPsec"
+
+#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_dhcp.php:75 usr/local/www/diag_logs_filter.php:106
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_ipsec.php:107 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_openvpn.php:74
+#: usr/local/www/diag_logs_settings.php:215
+#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/interfaces.php:1032
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/diag_logs_ppp.php:59 usr/local/www/diag_logs_ppp.php:75
+#: usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/status_interfaces.php:154
+#: usr/local/www/diag_logs_wireless.php:72
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:220
+#: usr/local/www/status_interfaces.php:172
+#: usr/local/www/diag_logs_resolver.php:83
+#: usr/local/www/diag_logs_gateways.php:83 usr/local/www/interfaces.php:1118
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:227
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/status_interfaces.php:175 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_ipsec.php:108
+#: usr/local/www/diag_logs_resolver.php:84 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/interfaces.php:1106
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_filter.php:96
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_ppp.php:57 usr/local/www/diag_logs_ppp.php:73
+#: usr/local/www/interfaces.php:1120 usr/local/www/diag_logs_filter.php:126
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/diag_logs_settings.php:246 usr/local/www/interfaces.php:1170
+msgid "PPP"
+msgstr "PPP"
+
+#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:107
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_ipsec.php:108 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_openvpn.php:75
+#: usr/local/www/diag_logs_settings.php:216 usr/local/www/diag_logs_vpn.php:44
+#: usr/local/www/diag_logs_vpn.php:132
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/vpn_ipsec.php:119 usr/local/www/diag_logs_ppp.php:76
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/vpn_ipsec_mobile.php:220 usr/local/www/vpn_pppoe.php:86
+#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/fbegin.inc:351
+#: usr/local/www/status_rrd_graph_settings.php:151
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:221 usr/local/www/fbegin.inc:369
+#: usr/local/www/status_rrd_graph_settings.php:152
+#: usr/local/www/diag_logs_resolver.php:84
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:228 usr/local/www/fbegin.inc:315
+#: usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/vpn_ipsec_mobile.php:240 usr/local/www/diag_logs_auth.php:72
+#: usr/local/www/diag_logs_ipsec.php:109
+#: usr/local/www/diag_logs_resolver.php:85 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/diag_logs_openvpn.php:76
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_filter.php:97 usr/local/www/vpn_pppoe.php:87
+#: usr/local/www/vpn_ipsec.php:125
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/vpn_pptp.php:196
+#: usr/local/www/fbegin.inc:307 usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+#: usr/local/www/diag_logs_filter.php:127
+#: usr/local/www/diag_logs_settings.php:247
+msgid "VPN"
+msgstr "VPN"
+
+#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:73
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:109
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_openvpn.php:45
+#: usr/local/www/diag_logs_openvpn.php:77
+#: usr/local/www/diag_logs_settings.php:218
+#: usr/local/www/diag_logs_vpn.php:134
+#: usr/local/www/diag_packet_capture.php:130 usr/local/www/diag_backup.php:112
+#: usr/local/www/license.php:213
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/status_graph.php:66 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:166 usr/local/www/status_services.php:343
+#: usr/local/www/status_openvpn.php:46 usr/local/www/vpn_openvpn_client.php:40
+#: usr/local/www/vpn_openvpn_csc.php:40
+#: usr/local/www/vpn_openvpn_server.php:40
+#: usr/local/www/widgets/widgets/services_status.widget.php:148
+#: usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:223 usr/local/www/fbegin.inc:165
+#: usr/local/www/fbegin.inc:184 usr/local/www/diag_backup.php:189
+#: usr/local/www/diag_logs_resolver.php:86
+#: usr/local/www/diag_packet_capture.php:134
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: etc/inc/service-utils.inc:333 usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:230 usr/local/www/fbegin.inc:173
+#: usr/local/www/fbegin.inc:192 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111
+#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:74
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/vpn_openvpn_server.php:423
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_packet_capture.php:64
+#: usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter.php:99
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_ppp.php:76 usr/local/www/fbegin.inc:164
+#: usr/local/www/fbegin.inc:183 usr/local/www/vpn_openvpn_server.php:445
+#: etc/inc/service-utils.inc:332 usr/local/www/diag_logs_filter.php:129
+#: etc/inc/system.inc:1627 etc/inc/service-utils.inc:349
+#: etc/inc/system.inc:1635 usr/local/www/diag_logs_settings.php:249
+#: usr/local/www/diag_backup.php:190 etc/inc/system.inc:1662
+#: etc/inc/service-utils.inc:351
+msgid "OpenVPN"
+msgstr "OpenVPN"
+
+#: usr/local/www/diag_logs.php:86 usr/local/www/diag_logs_auth.php:74
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:110
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/diag_logs_ipsec.php:111 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_settings.php:219
+#: usr/local/www/diag_logs_vpn.php:135
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_logs_ppp.php:79 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/fbegin.inc:141 usr/local/www/diag_logs_wireless.php:76
+msgid "OpenNTPD"
+msgstr "OpenNTPD"
+
+#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:75
+#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_filter.php:111
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/diag_logs_ipsec.php:112 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_settings.php:220
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/interfaces_bridge.php:91
+#: usr/local/www/interfaces_gif.php:90 usr/local/www/interfaces_gre.php:91
+#: usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_assign.php:404
+#: usr/local/www/status_wireless.php:41 usr/local/www/interfaces_vlan.php:92
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_ppp.php:80 usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/interfaces_lagg.php:96 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_qinq.php:100
+#: usr/local/www/interfaces_wireless.php:76
+#: usr/local/www/interfaces_wireless.php:90
+#: usr/local/www/interfaces_wireless_edit.php:145 usr/local/www/fbegin.inc:183
+#: usr/local/www/status_rrd_graph.php:344
+#: usr/local/www/status_rrd_graph_settings.php:143
+#: usr/local/www/diag_logs_wireless.php:56
+#: usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_logs_routing.php:86 usr/local/www/fbegin.inc:201
+#: usr/local/www/status_rrd_graph_settings.php:144
+#: usr/local/www/diag_logs_resolver.php:100 usr/local/www/diag_logs.php:99
+#: usr/local/www/status_rrd_graph.php:392
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_routing.php:87 usr/local/www/fbegin.inc:209
+#: usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_qinq.php:101 usr/local/www/interfaces_ppps.php:93
+#: usr/local/www/interfaces_bridge.php:92
+#: usr/local/www/diag_logs_resolver.php:101
+#: usr/local/www/interfaces_lagg.php:97 usr/local/www/interfaces_gre.php:92
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/diag_logs_wireless.php:89
+#: usr/local/www/interfaces_assign.php:398
+#: usr/local/www/diag_logs_gateways.php:101
+#: usr/local/www/interfaces_vlan.php:93
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/interfaces_gif.php:91
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_lagg.php:101
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/status_rrd_graph.php:417
+#: usr/local/www/interfaces_bridge.php:98
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/interfaces_wireless.php:93 usr/local/www/fbegin.inc:200
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_gif.php:95
+msgid "Wireless"
+msgstr "Sem fio"
+
+#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:76
+#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:112
+#: usr/local/www/diag_logs_filter_dynamic.php:111
+#: usr/local/www/diag_logs_ipsec.php:113 usr/local/www/diag_logs_ntpd.php:76
+#: usr/local/www/diag_logs_openvpn.php:80
+#: usr/local/www/diag_logs_settings.php:132
+#: usr/local/www/diag_logs_settings.php:221
+#: usr/local/www/diag_logs_vpn.php:137
+#: usr/local/www/system_firmware_settings.php:74
+#: usr/local/www/diag_logs_filter_summary.php:195
+#: usr/local/www/diag_logs_ppp.php:81 usr/local/www/diag_logs_relayd.php:77
+#: usr/local/www/status_rrd_graph.php:361
+#: usr/local/www/status_rrd_graph_settings.php:160
+#: usr/local/www/system_authservers.php:423
+#: usr/local/www/system_groupmanager.php:242
+#: usr/local/www/system_groupmanager_addprivs.php:170
+#: usr/local/www/system_usermanager.php:442
+#: usr/local/www/system_usermanager_addprivs.php:169
+#: usr/local/www/system_usermanager_settings.php:115
+#: usr/local/www/diag_logs_wireless.php:78
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:136
+#: usr/local/www/diag_logs_settings.php:225
+#: usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/load_balancer_setting.php:98
+#: usr/local/www/load_balancer_setting.php:122
+#: usr/local/www/status_rrd_graph_settings.php:161
+#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112
+#: usr/local/www/system_usermanager.php:440
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_ppp.php:80
+#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs.php:87 usr/local/www/status_rrd_graph.php:409
+#: usr/local/www/load_balancer_virtual_server.php:118
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/diag_logs_dhcp.php:80 usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/load_balancer_monitor.php:112
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/load_balancer_pool.php:121
+#: usr/local/www/diag_logs_filter.php:111
+#: usr/local/www/diag_logs_routing.php:76
+#: usr/local/www/diag_logs_settings.php:143
+#: usr/local/www/diag_logs_settings.php:232
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/diag_logs_resolver.php:89
+#: usr/local/www/load_balancer_virtual_server.php:116
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/diag_logs_gateways.php:89
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/system_authservers.php:428
+#: usr/local/www/diag_logs_filter.php:101
+#: usr/local/www/status_rrd_graph.php:434
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/system_authservers.php:435
+#: usr/local/www/diag_logs_filter.php:131
+#: usr/local/www/system_usermanager_settings.php:117
+#: usr/local/www/system_groupmanager.php:245
+#: usr/local/www/diag_logs_settings.php:162
+#: usr/local/www/diag_logs_settings.php:251
+#: usr/local/www/system_authservers.php:446
+msgid "Settings"
+msgstr "Configurações"
+
+#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_resolver.php:110
+#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_gateways.php:110
+#: usr/local/www/diag_logs_resolver.php:111
+#: usr/local/www/diag_logs_gateways.php:111
+#, php-format
+msgid "Last %s system log entries"
+msgstr "Últimas %s entradas de evento no sistema"
+
+#: usr/local/www/diag_logs.php:109 usr/local/www/diag_logs_auth.php:90
+#: usr/local/www/diag_logs_dhcp.php:95 usr/local/www/diag_logs_filter.php:208
+#: usr/local/www/diag_logs_ipsec.php:150 usr/local/www/diag_logs_ntpd.php:91
+#: usr/local/www/diag_logs_openvpn.php:97 usr/local/www/diag_logs_vpn.php:188
+#: usr/local/www/diag_logs_ppp.php:114 usr/local/www/diag_logs_relayd.php:91
+#: usr/local/www/diag_logs_wireless.php:92
+#: usr/local/www/diag_logs_routing.php:101
+#: usr/local/www/diag_logs_relayd.php:90 usr/local/www/diag_logs_auth.php:89
+#: usr/local/www/diag_logs_ipsec.php:149 usr/local/www/diag_logs_vpn.php:187
+#: usr/local/www/diag_logs_ppp.php:113
+#: usr/local/www/diag_logs_resolver.php:121
+#: usr/local/www/diag_logs_ntpd.php:90 usr/local/www/diag_logs.php:120
+#: usr/local/www/diag_logs_dhcp.php:94
+#: usr/local/www/diag_logs_wireless.php:103
+#: usr/local/www/diag_logs_gateways.php:121
+#: usr/local/www/diag_logs_openvpn.php:96
+#: usr/local/www/diag_logs_filter.php:205
+#: usr/local/www/diag_logs_routing.php:102
+#: usr/local/www/diag_logs_resolver.php:122
+#: usr/local/www/diag_logs_wireless.php:104
+#: usr/local/www/diag_logs_gateways.php:122
+#: usr/local/www/diag_logs_filter.php:264 usr/local/www/diag_logs_ppp.php:95
+#: usr/local/www/diag_logs_ipsec.php:151
+#: usr/local/www/diag_logs_filter.php:398
+msgid "Clear log"
+msgstr "Limpar log"
+
+#: usr/local/www/diag_logs.php:115 usr/local/www/diag_logs_filter.php:128
+#: usr/local/www/diag_dump_states.php:138
+#: usr/local/www/diag_dump_states_sources.php:133
+#: usr/local/www/diag_logs_resolver.php:127 usr/local/www/diag_logs.php:126
+#: usr/local/www/diag_dump_states.php:153
+#: usr/local/www/diag_logs_gateways.php:127
+#: usr/local/www/diag_logs_filter.php:127
+#: usr/local/www/diag_logs_resolver.php:128
+#: usr/local/www/diag_dump_states_sources.php:132
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/diag_logs_gateways.php:128
+#: usr/local/www/diag_logs_filter.php:147
+#: usr/local/www/diag_logs_filter.php:197
+#: usr/local/www/diag_logs_filter.php:260
+#: usr/local/www/diag_dump_states.php:141
+msgid "Filter"
+msgstr "Filtro"
+
+#: usr/local/www/diag_logs_auth.php:86 usr/local/www/diag_logs_auth.php:85
+#, php-format
+msgid "Last %s Portal Auth log entries"
+msgstr "Último %s evento de entrada no Portal de autenticação"
+
+#: usr/local/www/diag_logs_dhcp.php:91 usr/local/www/diag_logs_dhcp.php:90
+#, php-format
+msgid "Last %s DHCP service log entries"
+msgstr "Últimos %s logs de entrada do serviço DHCP"
+
+#: usr/local/www/diag_logs_filter.php:56 usr/local/www/diag_logs_filter.php:63
+msgid "The rule that triggered this action is"
+msgstr "A regra que desencadeou esta ação é"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+msgid "Normal View"
+msgstr "Visão Normal"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+msgid "Dynamic View"
+msgstr "Visão Dinâmica"
+
+#: usr/local/www/diag_logs_filter.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:204
+#: usr/local/www/diag_logs_filter_summary.php:203
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter.php:274
+msgid "Summary View"
+msgstr "Ver resumo"
+
+#: usr/local/www/diag_logs_filter.php:139
+#: usr/local/www/diag_logs_filter.php:138
+#: usr/local/www/diag_logs_filter.php:170
+#: usr/local/www/diag_logs_filter.php:296
+#, php-format
+msgid "Last %s firewall log entries."
+msgstr "Últimos %s logs de entrada do firewall."
+
+#: usr/local/www/diag_logs_filter.php:141
+#: usr/local/www/diag_logs_filter.php:140
+#: usr/local/www/diag_logs_filter.php:172
+#: usr/local/www/diag_logs_filter.php:298
+msgid "matched log entries."
+msgstr "entradas de log encontradas."
+
+#: usr/local/www/diag_logs_filter.php:143
+#: usr/local/www/diag_logs_filter.php:142
+#: usr/local/www/diag_logs_filter.php:173
+#: usr/local/www/diag_logs_filter.php:299
+#, php-format
+msgid "Max(%s)"
+msgstr "Máximo(%s)"
+
+#: usr/local/www/diag_logs_filter.php:146
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#: usr/local/www/diag_logs_filter.php:145
+#: usr/local/www/diag_logs_filter_dynamic.php:125
+#: usr/local/www/diag_logs_filter.php:177
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/widgets/widgets/log.widget.php:163
+#: usr/local/www/diag_logs_filter.php:303
+#: usr/local/www/widgets/widgets/log.widget.php:167
+msgid "Act"
+msgstr "Ação"
+
+#: usr/local/www/diag_logs_filter.php:147
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_vpn.php:175
+#: usr/local/www/firewall_schedule_edit.php:910
+#: usr/local/www/diag_logs_vpn.php:174
+#: usr/local/www/diag_logs_filter_dynamic.php:125
+#: usr/local/www/diag_logs_filter.php:146
+#: usr/local/www/firewall_schedule_edit.php:909
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter.php:178
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_system_pftop.php:143
+#: usr/local/www/diag_logs_filter.php:159
+#: usr/local/www/diag_logs_filter.php:304
+#: usr/local/www/widgets/widgets/log.widget.php:168
+msgid "Time"
+msgstr "Tempo"
+
+#: usr/local/www/diag_logs_filter.php:148
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/firewall_nat.php:195
+#: usr/local/www/diag_logs_filter_dynamic.php:126
+#: usr/local/www/diag_logs_filter.php:147 usr/local/www/firewall_nat.php:200
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/diag_logs_filter.php:305 usr/local/www/firewall_nat.php:203
+#: usr/local/www/services_rfc2136.php:79
+msgid "If"
+msgstr "Se"
+
+#: usr/local/www/diag_logs_filter.php:149
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/firewall_nat_edit.php:529
+#: usr/local/www/firewall_nat_edit.php:535
+#: usr/local/www/firewall_nat_out.php:342
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:468
+#: usr/local/www/firewall_rules.php:364
+#: usr/local/www/firewall_rules_edit.php:855
+#: usr/local/www/vpn_ipsec_mobile.php:356
+#: usr/local/www/vpn_ipsec_mobile.php:377 usr/local/www/diag_ipsec_sad.php:87
+#: usr/local/www/diag_ipsec_spd.php:86 usr/local/www/firewall_nat_out.php:352
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules.php:368
+#: usr/local/www/firewall_nat_edit.php:536
+#: usr/local/www/firewall_nat_edit.php:542
+#: usr/local/www/diag_logs_filter_dynamic.php:127
+#: usr/local/www/diag_logs_filter.php:148
+#: usr/local/www/firewall_nat_out.php:353
+#: usr/local/www/vpn_ipsec_mobile.php:383
+#: usr/local/www/vpn_ipsec_mobile.php:401 usr/local/www/diag_ipsec_sad.php:88
+#: usr/local/www/firewall_rules.php:361
+#: usr/local/www/firewall_nat_edit.php:541
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/diag_ipsec_spd.php:87 usr/local/www/diag_logs_filter.php:183
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_nat_edit.php:530
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#: usr/local/www/widgets/widgets/log.widget.php:165
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:905
+#: usr/local/www/diag_logs_filter.php:309
+#: usr/local/www/firewall_nat_edit.php:548
+#: usr/local/www/firewall_nat_out.php:360 usr/local/www/firewall_rules.php:359
+#: usr/local/www/widgets/widgets/log.widget.php:169
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:497
+#: usr/local/www/firewall_rules_edit.php:904
+#: usr/local/www/firewall_nat_edit.php:543
+#: usr/local/www/firewall_nat_edit.php:549
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/widgets/widgets/log.widget.php:170
+#: usr/local/www/firewall_rules_edit.php:952
+msgid "Source"
+msgstr "Origem"
+
+#: usr/local/www/diag_logs_filter.php:150
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/firewall_nat_1to1_edit.php:383
+#: usr/local/www/firewall_nat_edit.php:624
+#: usr/local/www/firewall_nat_out.php:344
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:498
+#: usr/local/www/firewall_rules.php:366
+#: usr/local/www/firewall_rules_edit.php:948
+#: usr/local/www/diag_ipsec_sad.php:88 usr/local/www/diag_ipsec_spd.php:87
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_1to1_edit.php:390
+#: usr/local/www/firewall_nat_out_edit.php:511
+#: usr/local/www/firewall_rules_edit.php:983
+#: usr/local/www/firewall_rules.php:370
+#: usr/local/www/firewall_nat_edit.php:631
+#: usr/local/www/diag_logs_filter_dynamic.php:128
+#: usr/local/www/diag_logs_filter.php:149
+#: usr/local/www/firewall_nat_out.php:355
+#: usr/local/www/firewall_nat_1to1_edit.php:388
+#: usr/local/www/diag_ipsec_sad.php:89 usr/local/www/firewall_rules.php:363
+#: usr/local/www/firewall_nat_edit.php:630
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_ipsec_spd.php:88 usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/firewall_rules_edit.php:992
+#: usr/local/www/firewall_nat_edit.php:625
+#: usr/local/www/diag_logs_filter_dynamic.php:132
+#: usr/local/www/widgets/widgets/log.widget.php:166
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/diag_logs_filter.php:310
+#: usr/local/www/firewall_nat_edit.php:637
+#: usr/local/www/firewall_nat_out.php:362 usr/local/www/firewall_rules.php:361
+#: usr/local/www/widgets/widgets/log.widget.php:170
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:527
+#: usr/local/www/firewall_rules_edit.php:1004
+#: usr/local/www/firewall_nat_edit.php:638
+#: usr/local/www/firewall_nat_out.php:361
+#: usr/local/www/firewall_nat_1to1_edit.php:389
+#: usr/local/www/firewall_nat_out_edit.php:528
+#: usr/local/www/widgets/widgets/log.widget.php:171
+#: usr/local/www/firewall_rules_edit.php:1052
+msgid "Destination"
+msgstr "Destino"
+
+#: usr/local/www/diag_logs_filter.php:151
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#: usr/local/www/diag_dump_states.php:150 usr/local/www/firewall_rules.php:363
+#: usr/local/www/diag_states_summary.php:152
+#: usr/local/www/firewall_nat.php:196 usr/local/www/firewall_rules.php:367
+#: usr/local/www/diag_dump_states.php:168
+#: usr/local/www/diag_logs_filter_dynamic.php:129
+#: usr/local/www/diag_states_summary.php:141
+#: usr/local/www/diag_logs_filter.php:150 usr/local/www/firewall_nat.php:201
+#: usr/local/www/firewall_rules.php:360 usr/local/www/diag_dump_states.php:167
+#: usr/local/www/diag_logs_filter_dynamic.php:130
+#: usr/local/www/diag_states_summary.php:143
+#: usr/local/www/diag_logs_filter.php:185
+#: usr/local/www/diag_logs_filter_dynamic.php:133
+#: usr/local/www/diag_logs_filter.php:311
+#: usr/local/www/diag_dump_states.php:156 usr/local/www/firewall_rules.php:358
+#: usr/local/www/firewall_nat.php:204
+msgid "Proto"
+msgstr "Proto"
+
+#: usr/local/www/diag_logs_filter.php:178
+#: usr/local/www/diag_logs_filter.php:183
+#: usr/local/www/diag_logs_filter_summary.php:81
+#: usr/local/www/diag_logs_filter.php:175
+#: usr/local/www/diag_logs_filter.php:180
+#: usr/local/www/diag_logs_filter_summary.php:82
+#: usr/local/www/diag_logs_filter.php:221
+#: usr/local/www/diag_logs_filter.php:228
+#: usr/local/www/diag_logs_filter.php:351
+#: usr/local/www/diag_logs_filter.php:353
+#: usr/local/www/diag_logs_filter.php:360
+#: usr/local/www/diag_logs_filter.php:362
+#: usr/local/www/widgets/widgets/log.widget.php:189
+#: usr/local/www/widgets/widgets/log.widget.php:192
+#: usr/local/www/widgets/widgets/log.widget.php:190
+#: usr/local/www/widgets/widgets/log.widget.php:193
+msgid "Reverse Resolve with DNS"
+msgstr "Solução reversa com DNS"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:355
+msgid "Easy Rule: Add to Block List"
+msgstr "Easy Rule: Adicione para a lista de bloqueados"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:355
+msgid "Do you really want to add this BLOCK rule?"
+msgstr "Você realmente quer adicionar essa regra de BLOQUEIO?"
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Easy Rule is still experimental."
+msgstr "Easy Rule é experimental ainda."
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Continue at risk of your own peril."
+msgstr "Continuar por sua conta e risco."
+
+#: usr/local/www/diag_logs_filter.php:179
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:176
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:223
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:355
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Backups are also nice."
+msgstr "Backups também são bons."
+
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Easy Rule: Pass this traffic"
+msgstr "Easy Rule: liberar esse tráfego"
+
+#: usr/local/www/diag_logs_filter.php:184
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:230
+#: usr/local/www/diag_logs_filter.php:364
+msgid "Do you really want to add this PASS rule?"
+msgstr "Você realmente quer adicionar essa regra de liberação?"
+
+#: usr/local/www/diag_logs_filter.php:196
+#: usr/local/www/diag_logs_filter.php:193
+#: usr/local/www/diag_logs_filter.php:251
+#: usr/local/www/diag_logs_filter.php:385
+#, php-format
+msgid "Last %s firewall log entries"
+msgstr "Últimos %s logs de entrada do firewall"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:61
+msgid "Firewall (Dynamic View)"
+msgstr "Firewall (Visão Dinâmica)"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:120
+#: usr/local/www/diag_logs_filter_dynamic.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+#, php-format
+msgid "Last %s records"
+msgstr "Últimos %s registros"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:122
+#: usr/local/www/diag_logs_filter_dynamic.php:120
+#: usr/local/www/diag_logs_filter_dynamic.php:121
+#: usr/local/www/diag_logs_filter_dynamic.php:124
+msgid "Pause:"
+msgstr "Pausa:"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:153
+#: usr/local/www/diag_logs_filter_dynamic.php:151
+#: usr/local/www/diag_logs_filter_dynamic.php:152
+#: usr/local/www/diag_logs_filter_dynamic.php:165
+msgid "TCP Flags"
+msgstr "Flags de TCP"
+
+#: usr/local/www/diag_logs_ipsec.php:91 usr/local/www/status_services.php:330
+#: usr/local/www/widgets/widgets/services_status.widget.php:135
+#: etc/inc/service-utils.inc:320 etc/inc/service-utils.inc:319
+#: etc/inc/service-utils.inc:336 etc/inc/service-utils.inc:338
+msgid "IPsec VPN"
+msgstr "IPsec VPN"
+
+#: usr/local/www/diag_logs_ipsec.php:123 usr/local/www/diag_logs_ipsec.php:122
+#, php-format
+msgid "Last %s IPsec log entries"
+msgstr "Últimos %s logs de entrada do IPsec"
+
+#: usr/local/www/diag_logs_ipsec.php:135 usr/local/www/diag_logs_ppp.php:99
+#: usr/local/www/diag_logs_ipsec.php:134 usr/local/www/diag_logs_ppp.php:98
+#: usr/local/www/diag_logs_ipsec.php:136
+msgid "Unknown Gateway/Dynamic"
+msgstr "Gateway/Dinâmico desconhecido"
+
+#: usr/local/www/diag_logs_ntpd.php:86
+#, php-format
+msgid "Last %s OpenNTPD log entries"
+msgstr "Últimas %s entradas de evento do OpenNTPD"
+
+#: usr/local/www/diag_logs_openvpn.php:90
+#: usr/local/www/diag_logs_openvpn.php:89
+#, php-format
+msgid "Last %s OpenVPN log entries"
+msgstr "Últimas %s entradas de log do OpenVPN"
+
+#: usr/local/www/diag_dump_states.php:51 usr/local/www/status_openvpn.php:59
+#: usr/local/www/widgets/widgets/openvpn.widget.php:16
+#: usr/local/www/diag_dump_states_sources.php:51
+#: usr/local/www/widgets/widgets/openvpn.widget.php:17
+#: usr/local/www/status_openvpn.php:61 usr/local/www/status_openvpn.php:62
+msgid "invalid input"
+msgstr "entrada inválida"
+
+#: usr/local/www/diag_dump_states.php:65 usr/local/www/diag_dump_states.php:75
+#: usr/local/www/diag_dump_states.php:67
+msgid "Show States"
+msgstr "Mostrar Estados"
+
+#: usr/local/www/diag_dump_states.php:95 usr/local/www/status_openvpn.php:130
+#: usr/local/www/widgets/widgets/openvpn.widget.php:84
+#: usr/local/www/diag_dump_states_sources.php:95
+#: usr/local/www/diag_dump_states.php:105
+#: usr/local/www/widgets/widgets/openvpn.widget.php:85
+#: usr/local/www/status_openvpn.php:131
+#: usr/local/www/diag_dump_states_sources.php:94
+#: usr/local/www/diag_dump_states.php:104 usr/local/www/status_openvpn.php:132
+#: usr/local/www/diag_dump_states.php:96
+msgid "An error occurred."
+msgstr "Ocorreu um erro."
+
+#: usr/local/www/diag_dump_states.php:110
+#: usr/local/www/diag_states_summary.php:151
+#: usr/local/www/diag_states_summary.php:153
+#: usr/local/www/diag_resetstate.php:77 usr/local/www/fbegin.inc:206
+#: usr/local/www/system_advanced_misc.php:398
+#: usr/local/www/diag_dump_states_sources.php:110 usr/local/www/fbegin.inc:224
+#: usr/local/www/system_advanced_misc.php:441
+#: usr/local/www/diag_dump_states.php:120
+#: usr/local/www/diag_states_summary.php:140
+#: usr/local/www/diag_states_summary.php:142 usr/local/www/fbegin.inc:233
+#: usr/local/www/system_advanced_misc.php:490
+#: usr/local/www/diag_dump_states_sources.php:109
+#: usr/local/www/diag_dump_states.php:119
+#: usr/local/www/diag_states_summary.php:144
+#: usr/local/www/system_advanced_misc.php:502 usr/local/www/fbegin.inc:225
+#: usr/local/www/diag_dump_states.php:111
+#: usr/local/www/system_advanced_misc.php:549
+#: usr/local/www/system_advanced_misc.php:567
+msgid "States"
+msgstr "Estados"
+
+#: usr/local/www/diag_dump_states.php:112 usr/local/www/diag_resetstate.php:79
+#: usr/local/www/diag_dump_states_sources.php:111
+#: usr/local/www/diag_dump_states.php:122
+#: usr/local/www/diag_dump_states_sources.php:110
+#: usr/local/www/diag_dump_states.php:121
+#: usr/local/www/diag_dump_states.php:113
+msgid "Source Tracking"
+msgstr "Rastreamento de Origem"
+
+#: usr/local/www/diag_dump_states.php:113 usr/local/www/diag_resetstate.php:80
+#: usr/local/www/diag_dump_states_sources.php:112
+#: usr/local/www/diag_dump_states.php:123
+#: usr/local/www/diag_dump_states_sources.php:111
+#: usr/local/www/diag_dump_states.php:122
+#: usr/local/www/diag_dump_states.php:114
+msgid "Reset States"
+msgstr "Reiniciar Estados"
+
+#: usr/local/www/diag_dump_states.php:134
+msgid "Current state count:"
+msgstr "Contagem de estado atual:"
+
+#: usr/local/www/diag_dump_states.php:136
+#: usr/local/www/diag_dump_states_sources.php:131
+#: usr/local/www/diag_dump_states.php:151
+#: usr/local/www/diag_dump_states_sources.php:130
+#: usr/local/www/diag_dump_states.php:150
+#: usr/local/www/diag_dump_states.php:139
+msgid "Filter expression:"
+msgstr "Expressão de filtro:"
+
+#: usr/local/www/diag_dump_states.php:151
+#: usr/local/www/diag_dump_states.php:169
+#: usr/local/www/diag_dump_states.php:168
+#: usr/local/www/diag_dump_states.php:157
+msgid "Source -> Router -> Destination"
+msgstr "Origem -> Roteador -> Destino"
+
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/status_dhcpv6_leases.php:486
+#: usr/local/www/diag_dump_states.php:170
+#: usr/local/www/status_dhcpv6_leases.php:487
+#: usr/local/www/diag_dump_states.php:169
+#: usr/local/www/status_dhcpv6_leases.php:490
+#: usr/local/www/diag_system_pftop.php:142
+#: usr/local/www/diag_dump_states.php:158
+msgid "State"
+msgstr "Estado"
+
+#: usr/local/www/diag_dump_states.php:185
+#: usr/local/www/diag_dump_states.php:203
+#: usr/local/www/diag_dump_states.php:202
+#: usr/local/www/diag_dump_states.php:194
+msgid "Remove all state entries from"
+msgstr "Remove todas as entradas de estado de"
+
+#: usr/local/www/diag_dump_states.php:185
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:735 usr/local/www/diag_confbak.php:111
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_dhcp.php:636
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_dhcpv6.php:572 usr/local/www/services_dhcpv6.php:579
+#: usr/local/www/diag_dump_states_sources.php:180
+#: usr/local/www/diag_dump_states.php:203 usr/local/www/services_dhcp.php:649
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/services_dhcpv6.php:645 usr/local/www/services_dhcpv6.php:652
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/diag_dump_states_sources.php:179
+#: usr/local/www/diag_dump_states.php:202 usr/local/www/services_dhcp.php:770
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:583
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:736 usr/local/www/services_dhcp.php:780
+#: usr/local/www/services_dhcpv6.php:593 usr/local/www/services_dhcpv6.php:600
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:748 usr/local/www/services_dhcp.php:800
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749 usr/local/www/services_dhcp.php:812
+msgid "to"
+msgstr "para"
+
+#: usr/local/www/diag_dump_states.php:194
+#: usr/local/www/diag_dump_states.php:212
+#: usr/local/www/diag_dump_states.php:211
+#: usr/local/www/diag_dump_states.php:205
+msgid "No states were found."
+msgstr "Nenhum estado foi encontrado."
+
+#: usr/local/www/diag_logs_settings.php:79
+msgid "A valid IP address must be specified for remote syslog server #1."
+msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #1."
+
+#: usr/local/www/diag_logs_settings.php:82
+msgid "A valid IP address must be specified for remote syslog server #2."
+msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #2."
+
+#: usr/local/www/diag_logs_settings.php:85
+msgid "A valid IP address must be specified for remote syslog server #3."
+msgstr "Um endereço de IP válido de ser especificado para o servidor syslog remoto #3."
+
+#: usr/local/www/diag_logs_settings.php:92
+#: usr/local/www/diag_logs_settings.php:96
+#: usr/local/www/diag_logs_settings.php:97
+#: usr/local/www/diag_logs_settings.php:100
+msgid "Number of log entries to show must be between 5 and 2000."
+msgstr "O número de logs de entrada para mostra deve estar entre 5 e 2000."
+
+#: usr/local/www/diag_logs_settings.php:232
+#: usr/local/www/diag_logs_settings.php:239
+#: usr/local/www/diag_logs_settings.php:246
+#: usr/local/www/diag_logs_settings.php:265
+msgid "Show log entries in reverse order (newest entries on top)"
+msgstr "Mostrar logs de entrada em ordem reversa (entradas mais recentes no topo)"
+
+#: usr/local/www/diag_logs_settings.php:236
+msgid "Number of log entries to show:"
+msgstr "Número de logs de entrada para mostra:"
+
+#: usr/local/www/diag_logs_settings.php:242
+#: usr/local/www/diag_logs_settings.php:250
+#: usr/local/www/diag_logs_settings.php:257
+#: usr/local/www/diag_logs_settings.php:277
+msgid "Log packets blocked by the default rule"
+msgstr "Pacotes de log bloqueados pela regra padrão"
+
+#: usr/local/www/diag_logs_settings.php:243
+msgid "Hint: packets that are blocked by the implicit default block rule will not be logged anymore if you uncheck this option. Per-rule logging options are not affected."
+msgstr "Dica: pacotes que são bloqueados pelo regra implícita de bloqueio padrão não serão mais registrados se você desmarcar essa opção. Por regra as opções de registro não são afetadas."
+
+#: usr/local/www/diag_logs_settings.php:250
+#: usr/local/www/diag_logs_settings.php:258
+#: usr/local/www/diag_logs_settings.php:265
+#: usr/local/www/diag_logs_settings.php:296
+msgid "Show raw filter logs"
+msgstr "Mostrar filtros de log base"
+
+#: usr/local/www/diag_logs_settings.php:251
+msgid "Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information."
+msgstr "Dica: Se isto for marcado, logs do filtro são mostrados como gerados pelo filtro de pacotes, sem qualquer formatação. Isto irá revelar informações mais detalhadas."
+
+#: usr/local/www/diag_logs_settings.php:256
+#: usr/local/www/diag_logs_settings.php:267
+#: usr/local/www/diag_logs_settings.php:287
+#: usr/local/www/diag_logs_settings.php:318
+msgid "Disable writing log files to the local RAM disk"
+msgstr "Desabilitar gravação de arquivos de log no RAM disk local"
+
+#: usr/local/www/diag_logs_settings.php:261
+msgid "Enable syslog'ing to remote syslog server"
+msgstr "Habilitar envio de logs para servidor syslog remoto"
+
+#: usr/local/www/diag_logs_settings.php:264
+msgid "Remote syslog servers"
+msgstr "Servidores syslog remotos"
+
+#: usr/local/www/diag_logs_settings.php:269
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_settings.php:285
+#: usr/local/www/vpn_ipsec_mobile.php:496
+#: usr/local/www/vpn_ipsec_mobile.php:502
+#: usr/local/www/vpn_ipsec_mobile.php:508
+#: usr/local/www/vpn_ipsec_mobile.php:514
+#: usr/local/www/vpn_ipsec_mobile.php:538
+#: usr/local/www/vpn_ipsec_mobile.php:544 usr/local/www/diag_dns.php:208
+#: usr/local/www/services_rfc2136_edit.php:180
+#: usr/local/www/vpn_openvpn_client.php:365
+#: usr/local/www/vpn_openvpn_client.php:862
+#: usr/local/www/vpn_openvpn_csc.php:293 usr/local/www/vpn_openvpn_csc.php:477
+#: usr/local/www/vpn_openvpn_csc.php:485 usr/local/www/vpn_openvpn_csc.php:493
+#: usr/local/www/vpn_openvpn_csc.php:501 usr/local/www/vpn_openvpn_csc.php:529
+#: usr/local/www/vpn_openvpn_csc.php:537 usr/local/www/vpn_openvpn_csc.php:625
+#: usr/local/www/vpn_openvpn_csc.php:633
+#: usr/local/www/vpn_openvpn_server.php:40
+#: usr/local/www/vpn_openvpn_server.php:583
+#: usr/local/www/vpn_openvpn_server.php:1238
+#: usr/local/www/vpn_openvpn_server.php:1246
+#: usr/local/www/vpn_openvpn_server.php:1254
+#: usr/local/www/vpn_openvpn_server.php:1262
+#: usr/local/www/vpn_openvpn_server.php:1290
+#: usr/local/www/vpn_openvpn_server.php:1298
+#: usr/local/www/vpn_openvpn_server.php:1386
+#: usr/local/www/vpn_openvpn_server.php:1394
+#: usr/local/www/diag_logs_settings.php:286
+#: usr/local/www/diag_logs_settings.php:290
+#: usr/local/www/diag_logs_settings.php:294 usr/local/www/status_ntpd.php:108
+#: usr/local/www/diag_dns.php:207 usr/local/www/vpn_openvpn_server.php:656
+#: usr/local/www/vpn_openvpn_server.php:1380
+#: usr/local/www/vpn_openvpn_server.php:1388
+#: usr/local/www/vpn_openvpn_server.php:1396
+#: usr/local/www/vpn_openvpn_server.php:1404
+#: usr/local/www/vpn_openvpn_server.php:1432
+#: usr/local/www/vpn_openvpn_server.php:1440
+#: usr/local/www/vpn_openvpn_server.php:1528
+#: usr/local/www/vpn_openvpn_server.php:1536
+#: usr/local/www/vpn_openvpn_client.php:370
+#: usr/local/www/vpn_openvpn_client.php:867
+#: usr/local/www/diag_logs_settings.php:306
+#: usr/local/www/diag_logs_settings.php:310
+#: usr/local/www/diag_logs_settings.php:314
+#: usr/local/www/vpn_ipsec_mobile.php:545
+#: usr/local/www/vpn_ipsec_mobile.php:551
+#: usr/local/www/vpn_ipsec_mobile.php:557
+#: usr/local/www/vpn_ipsec_mobile.php:563
+#: usr/local/www/vpn_ipsec_mobile.php:587
+#: usr/local/www/vpn_ipsec_mobile.php:593
+#: usr/local/www/vpn_openvpn_csc.php:292 usr/local/www/vpn_openvpn_csc.php:476
+#: usr/local/www/vpn_openvpn_csc.php:484 usr/local/www/vpn_openvpn_csc.php:492
+#: usr/local/www/vpn_openvpn_csc.php:500 usr/local/www/vpn_openvpn_csc.php:528
+#: usr/local/www/vpn_openvpn_csc.php:536 usr/local/www/vpn_openvpn_csc.php:624
+#: usr/local/www/vpn_openvpn_csc.php:632 usr/local/www/status_ntpd.php:124
+#: usr/local/www/vpn_openvpn_server.php:423
+#: usr/local/www/vpn_openvpn_server.php:674
+#: usr/local/www/vpn_openvpn_server.php:1422
+#: usr/local/www/vpn_openvpn_server.php:1430
+#: usr/local/www/vpn_openvpn_server.php:1438
+#: usr/local/www/vpn_openvpn_server.php:1446
+#: usr/local/www/vpn_openvpn_server.php:1474
+#: usr/local/www/vpn_openvpn_server.php:1482
+#: usr/local/www/vpn_openvpn_server.php:1570
+#: usr/local/www/vpn_openvpn_server.php:1578
+#: usr/local/www/vpn_openvpn_client.php:378
+#: usr/local/www/vpn_openvpn_client.php:920
+#: usr/local/www/vpn_openvpn_client.php:396
+#: usr/local/www/vpn_openvpn_client.php:939
+#: usr/local/www/vpn_openvpn_server.php:445
+#: usr/local/www/vpn_openvpn_server.php:700
+#: usr/local/www/vpn_openvpn_server.php:1490
+#: usr/local/www/vpn_openvpn_server.php:1498
+#: usr/local/www/vpn_openvpn_server.php:1526
+#: usr/local/www/vpn_openvpn_server.php:1534
+#: usr/local/www/vpn_openvpn_server.php:1622
+#: usr/local/www/vpn_openvpn_server.php:1630 usr/local/www/status_ntpd.php:130
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_dns.php:224
+#: usr/local/www/services_rfc2136.php:80
+#: usr/local/www/diag_logs_settings.php:337
+#: usr/local/www/diag_logs_settings.php:341
+#: usr/local/www/diag_logs_settings.php:345
+#: usr/local/www/services_rfc2136_edit.php:185
+msgid "Server"
+msgstr "Servidor"
+
+#: usr/local/www/diag_logs_settings.php:296
+msgid "IP addresses of remote syslog servers"
+msgstr "Endereços IP de servidores syslog remotos"
+
+#: usr/local/www/diag_logs_settings.php:300
+#: usr/local/www/diag_logs_settings.php:309
+#: usr/local/www/diag_logs_settings.php:329
+#: usr/local/www/diag_logs_settings.php:360
+msgid "System events"
+msgstr "Eventos do sistema"
+
+#: usr/local/www/diag_logs_settings.php:302
+#: usr/local/www/diag_logs_settings.php:311
+#: usr/local/www/diag_logs_settings.php:331
+#: usr/local/www/diag_logs_settings.php:362
+msgid "Firewall events"
+msgstr "Eventos do firewall"
+
+#: usr/local/www/diag_logs_settings.php:304
+#: usr/local/www/diag_logs_settings.php:313
+#: usr/local/www/diag_logs_settings.php:333
+#: usr/local/www/diag_logs_settings.php:364
+msgid "DHCP service events"
+msgstr "eventos do serviço DHCP"
+
+#: usr/local/www/diag_logs_settings.php:306
+#: usr/local/www/diag_logs_settings.php:315
+#: usr/local/www/diag_logs_settings.php:335
+#: usr/local/www/diag_logs_settings.php:366
+msgid "Portal Auth events"
+msgstr "Eventos de autenticação do portal"
+
+#: usr/local/www/diag_logs_settings.php:308
+#: usr/local/www/diag_logs_settings.php:317
+#: usr/local/www/diag_logs_settings.php:337
+#: usr/local/www/diag_logs_settings.php:368
+msgid "VPN (PPTP, IPsec, OpenVPN) events"
+msgstr "Eventos VPN (PPTP, IPsec, OpenVPN)"
+
+#: usr/local/www/diag_logs_settings.php:310
+#: usr/local/www/diag_logs_settings.php:319
+#: usr/local/www/diag_logs_settings.php:339
+#: usr/local/www/diag_logs_settings.php:370
+msgid "Gateway Monitor events"
+msgstr "Eventos do Monitor de Gateway"
+
+#: usr/local/www/diag_logs_settings.php:312
+#: usr/local/www/diag_logs_settings.php:321
+#: usr/local/www/diag_logs_settings.php:341
+#: usr/local/www/diag_logs_settings.php:372
+msgid "Server Load Balancer events"
+msgstr "Eventos do Servidor Load Balancer"
+
+#: usr/local/www/diag_logs_settings.php:314
+#: usr/local/www/diag_logs_settings.php:323
+#: usr/local/www/diag_logs_settings.php:343
+#: usr/local/www/diag_logs_settings.php:374
+msgid "Wireless events"
+msgstr "Eventos Wireless"
+
+#: usr/local/www/diag_logs_settings.php:316
+#: usr/local/www/diag_logs_settings.php:307
+#: usr/local/www/diag_logs_settings.php:327
+#: usr/local/www/diag_logs_settings.php:358
+msgid "Everything"
+msgstr "Tudo"
+
+#: usr/local/www/diag_logs_settings.php:327
+msgid "syslog sends UDP datagrams to port 514 on the specified remote syslog server. Be sure to set syslogd on the remote server to accept syslog messages from"
+msgstr "syslog envia datagramas UDP para a porta 514 no servidor syslog remoto especificado. Certifique-se de definir o syslogd no servidor remoto para aceitar mensagens syslog de"
+
+#: usr/local/www/diag_logs_vpn.php:144 usr/local/www/diag_logs_vpn.php:143
+msgid "PPTP Logins"
+msgstr "PPTP Logins"
+
+#: usr/local/www/diag_logs_vpn.php:147 usr/local/www/diag_logs_vpn.php:146
+msgid "PPTP Raw"
+msgstr "PPTP Raw"
+
+#: usr/local/www/diag_logs_vpn.php:150 usr/local/www/diag_logs_vpn.php:149
+msgid "PPPoE Logins"
+msgstr "PPPoE Logins"
+
+#: usr/local/www/diag_logs_vpn.php:153 usr/local/www/diag_logs_vpn.php:152
+msgid "PPPoE Raw"
+msgstr "PPPoE Raw"
+
+#: usr/local/www/diag_logs_vpn.php:156 usr/local/www/diag_logs_vpn.php:155
+msgid "L2TP Logins"
+msgstr "L2TP Logins"
+
+#: usr/local/www/diag_logs_vpn.php:159 usr/local/www/diag_logs_vpn.php:158
+msgid "L2TP Raw"
+msgstr "L2TP Raw"
+
+#: usr/local/www/diag_logs_vpn.php:171 usr/local/www/diag_logs_vpn.php:170
+#, php-format
+msgid "Last %1$s %2$s VPN log entries"
+msgstr "Últimos %1$s %2$s logs de entrada VPN"
+
+#: usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/firewall_rules_edit.php:659
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:484
+#: usr/local/www/services_unbound_acls.php:211
+#: usr/local/www/services_unbound_acls.php:318
+#: usr/local/www/load_balancer_relay_action_edit.php:483
+#: usr/local/www/firewall_rules_edit.php:692
+#: usr/local/www/diag_logs_vpn.php:175
+#: usr/local/www/load_balancer_relay_action_edit.php:481
+#: usr/local/www/firewall_rules_edit.php:695
+#: usr/local/www/firewall_rules_edit.php:707
+#: usr/local/www/diag_logs_filter.php:151
+#: usr/local/www/firewall_rules_edit.php:755
+msgid "Action"
+msgstr "Ação"
+
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/vpn_pptp_users_edit.php:135
+#: usr/local/www/system_groupmanager.php:426
+#: usr/local/www/system_usermanager.php:89
+#: usr/local/www/system_usermanager.php:808
+#: usr/local/www/vpn_l2tp_users_edit.php:38
+#: usr/local/www/system_usermanager.php:806
+#: usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/system_groupmanager.php:429
+#: usr/local/www/system_usermanager.php:809
+#: usr/local/www/system_groupmanager.php:448
+#: usr/local/www/system_usermanager.php:832
+#: usr/local/www/system_groupmanager.php:451
+msgid "User"
+msgstr "Usuário"
+
+#: usr/local/www/diag_nanobsd.php:49 usr/local/www/fbegin.inc:212
+#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:239
+#: usr/local/www/fbegin.inc:231
+msgid "NanoBSD"
+msgstr "NanoBSD"
+
+#: usr/local/www/diag_nanobsd.php:70 usr/local/www/diag_nanobsd.php:69
+msgid "Setting slice information, please wait..."
+msgstr "Definindo informações da fatia, por favor aguarde..."
+
+#: usr/local/www/diag_nanobsd.php:79 usr/local/www/diag_nanobsd.php:78
+msgid "The boot slice has been set to"
+msgstr "O boot slice foi definido como"
+
+#: usr/local/www/diag_nanobsd.php:86 usr/local/www/diag_nanobsd.php:85
+msgid "Duplicating slice. Please wait, this will take a moment..."
+msgstr "Duplicando slice. Por favor aguarde, isto vai levar um momento..."
+
+#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94
+msgid "The slice has been duplicated."
+msgstr "O slice foi duplicado."
+
+#: usr/local/www/diag_nanobsd.php:95 usr/local/www/diag_nanobsd.php:94
+msgid "If you would like to boot from this newly duplicated slice please set it using the bootup information area."
+msgstr "Se você gostaria de fazer boot neste novo slice duplicado, por favor defina isto utilizando a área de informação de boot."
+
+#: usr/local/www/diag_nanobsd.php:97 usr/local/www/diag_nanobsd.php:96
+msgid "There was an error while duplicating the slice. Operation aborted."
+msgstr "Ocorreu um erro durante a duplicação do slice. Operação abortada."
+
+#: usr/local/www/diag_nanobsd.php:128 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2559
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/load_balancer_virtual_server_edit.php:212
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/load_balancer_virtual_server_edit.php:244
+#: usr/local/www/system_advanced_firewall.php:231
+#: usr/local/www/system_advanced_misc.php:221
+#: usr/local/www/system_advanced_network.php:197
+#: usr/local/www/system_advanced_sysctl.php:163
+#: usr/local/www/system_routes_edit.php:374
+#: usr/local/www/system_advanced_firewall.php:245
+#: usr/local/www/system_advanced_admin.php:289
+#: usr/local/www/system_advanced_misc.php:247
+#: usr/local/www/load_balancer_virtual_server_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:220
+#: usr/local/www/load_balancer_virtual_server_edit.php:233
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/diag_nanobsd.php:127 usr/local/www/system_routes_edit.php:375
+#: usr/local/www/system_advanced_misc.php:266
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/diag_nanobsd.php:148
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_firewall.php:274
+#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_advanced_misc.php:317
+#: usr/local/www/system_routes_edit.php:399
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/diag_nanobsd.php:139 usr/local/www/interfaces.php:2820
+#: usr/local/www/interfaces.php:2829 usr/local/www/system_routes_edit.php:409
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/system_routes_edit.php:411
+#: usr/local/www/system_advanced_admin.php:310
+#: usr/local/www/system_advanced_misc.php:323
+#: usr/local/www/system_advanced_firewall.php:284
+#: usr/local/www/system_advanced_network.php:196
+#: usr/local/www/interfaces.php:2842 usr/local/www/interfaces.php:2851
+msgid "NOTE:"
+msgstr "NOTA:"
+
+#: usr/local/www/diag_nanobsd.php:130
+#: usr/local/www/system_advanced_admin.php:291
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_misc.php:223
+#: usr/local/www/system_advanced_network.php:199
+#: usr/local/www/system_advanced_sysctl.php:165
+#: usr/local/www/system_advanced_firewall.php:247
+#: usr/local/www/system_advanced_misc.php:249
+#: usr/local/www/diag_nanobsd.php:129
+#: usr/local/www/system_advanced_misc.php:268
+#: usr/local/www/diag_nanobsd.php:150
+#: usr/local/www/system_advanced_misc.php:272
+#: usr/local/www/system_advanced_firewall.php:276
+#: usr/local/www/system_advanced_misc.php:319
+#: usr/local/www/system_advanced_firewall.php:275
+#: usr/local/www/diag_nanobsd.php:141
+#: usr/local/www/system_advanced_admin.php:312
+#: usr/local/www/system_advanced_misc.php:325
+#: usr/local/www/system_advanced_firewall.php:286
+#: usr/local/www/system_advanced_network.php:198
+msgid "The options on this page are intended for use by advanced users only."
+msgstr "As opções nesta página são destinados somente para o uso de usuários avançados."
+
+#: usr/local/www/diag_nanobsd.php:136 usr/local/www/diag_nanobsd.php:135
+#: usr/local/www/diag_nanobsd.php:156 usr/local/www/diag_nanobsd.php:147
+msgid "Bootup information"
+msgstr "Informação de boot"
+
+#: usr/local/www/diag_nanobsd.php:139 usr/local/www/diag_nanobsd.php:138
+#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:150
+msgid "NanoBSD Image size"
+msgstr "Tamanho da imagem NanoBSD"
+
+#: usr/local/www/diag_nanobsd.php:145 usr/local/www/diag_nanobsd.php:144
+#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:156
+msgid "Bootup"
+msgstr "Bootup"
+
+#: usr/local/www/diag_nanobsd.php:148 usr/local/www/diag_nanobsd.php:147
+#: usr/local/www/diag_nanobsd.php:168 usr/local/www/diag_nanobsd.php:159
+msgid "Bootup slice is currently:"
+msgstr "Bootup slice atualmente é:"
+
+#: usr/local/www/diag_nanobsd.php:149 usr/local/www/diag_nanobsd.php:148
+#: usr/local/www/diag_nanobsd.php:169 usr/local/www/diag_nanobsd.php:160
+msgid "This will switch the bootup slice to the alternate slice."
+msgstr "Isto irá trocar o boot slice para o slice substituto."
+
+#: usr/local/www/diag_nanobsd.php:159 usr/local/www/diag_nanobsd.php:158
+#: usr/local/www/diag_nanobsd.php:217 usr/local/www/diag_nanobsd.php:208
+msgid "Duplicate bootup slice to alternate"
+msgstr "Duplicar bootup slice para alternar"
+
+#: usr/local/www/diag_nanobsd.php:162 usr/local/www/diag_nanobsd.php:161
+#: usr/local/www/diag_nanobsd.php:220 usr/local/www/diag_nanobsd.php:211
+msgid "Duplicate bootup slice"
+msgstr "Duplicar bootup slice"
+
+#: usr/local/www/diag_nanobsd.php:165 usr/local/www/diag_nanobsd.php:164
+#: usr/local/www/diag_nanobsd.php:223 usr/local/www/diag_nanobsd.php:214
+msgid "Destination slice:"
+msgstr "Fatia de destino:"
+
+#: usr/local/www/diag_nanobsd.php:172 usr/local/www/diag_nanobsd.php:171
+#: usr/local/www/diag_nanobsd.php:230 usr/local/www/diag_nanobsd.php:221
+msgid "This will duplicate the bootup slice to the alternate slice. Use this if you would like to duplicate the known good working boot partition to the alternate."
+msgstr "Isso irá duplicar a fatia de bootup para a alternativa. Use isso se gostaria de duplicar a partição de boot em bom funcionamento conhecida para a alternativa."
+
+#: usr/local/www/diag_nanobsd.php:182 usr/local/www/diag_nanobsd.php:181
+#: usr/local/www/diag_nanobsd.php:240 usr/local/www/diag_nanobsd.php:231
+msgid "Periodic Data Backup"
+msgstr "Cópia de dados periódica"
+
+#: usr/local/www/diag_nanobsd.php:185 usr/local/www/diag_nanobsd.php:184
+#: usr/local/www/diag_nanobsd.php:243
+msgid "RRD Backup"
+msgstr "RRD Backup"
+
+#: usr/local/www/diag_nanobsd.php:188 usr/local/www/diag_nanobsd.php:205
+#: usr/local/www/diag_nanobsd.php:187 usr/local/www/diag_nanobsd.php:204
+#: usr/local/www/diag_nanobsd.php:246 usr/local/www/diag_nanobsd.php:263
+#: usr/local/www/system_advanced_misc.php:602
+#: usr/local/www/system_advanced_misc.php:618
+#: usr/local/www/system_advanced_misc.php:620
+#: usr/local/www/system_advanced_misc.php:636
+msgid "Frequency:"
+msgstr "Frequência:"
+
+#: usr/local/www/diag_nanobsd.php:190 usr/local/www/diag_nanobsd.php:207
+#: usr/local/www/system_firmware.php:133
+#: usr/local/www/services_dyndns_edit.php:152
+#: usr/local/www/vpn_ipsec_phase1.php:812
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/system_advanced_firewall.php:410
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/vpn_ipsec_phase1.php:825 usr/local/www/diag_nanobsd.php:189
+#: usr/local/www/diag_nanobsd.php:206 usr/local/www/system_firmware.php:140
+#: usr/local/www/firewall_nat_edit.php:795
+#: usr/local/www/vpn_ipsec_phase1.php:822 usr/local/www/diag_nanobsd.php:248
+#: usr/local/www/diag_nanobsd.php:265 usr/local/www/system_firmware.php:135
+#: usr/local/www/services_dyndns_edit.php:214
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/system_advanced_firewall.php:472
+#: usr/local/www/vpn_ipsec_phase1.php:843
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/system_advanced_misc.php:604
+#: usr/local/www/system_advanced_misc.php:620
+#: usr/local/www/system_advanced_firewall.php:473
+#: usr/local/www/firewall_nat_edit.php:803
+#: usr/local/www/services_dyndns_edit.php:217
+#: usr/local/www/system_advanced_misc.php:622
+#: usr/local/www/system_advanced_misc.php:638
+#: usr/local/www/system_advanced_firewall.php:494
+msgid "Disable"
+msgstr "Desabilitar"
+
+#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:209
+#: usr/local/www/diag_nanobsd.php:191 usr/local/www/diag_nanobsd.php:208
+#: usr/local/www/diag_nanobsd.php:250 usr/local/www/diag_nanobsd.php:267
+#: usr/local/www/system_advanced_misc.php:606
+#: usr/local/www/system_advanced_misc.php:622
+#: usr/local/www/system_advanced_misc.php:624
+#: usr/local/www/system_advanced_misc.php:640
+msgid "hour"
+msgstr "hora"
+
+#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:195
+#: usr/local/www/diag_nanobsd.php:254
+#: usr/local/www/system_advanced_misc.php:610
+#: usr/local/www/system_advanced_misc.php:628
+msgid "This will periodically backup the RRD data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media."
+msgstr "Isto irá, periodicamente, fazer backup dos dados RRD, então eles pode ser restaurados automaticamente no próximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas serão feitas na midia."
+
+#: usr/local/www/diag_nanobsd.php:202 usr/local/www/diag_nanobsd.php:201
+#: usr/local/www/diag_nanobsd.php:260
+msgid "DHCP Leases Backup"
+msgstr "Backup de Concessões DHCP"
+
+#: usr/local/www/diag_nanobsd.php:213 usr/local/www/diag_nanobsd.php:212
+#: usr/local/www/diag_nanobsd.php:271
+#: usr/local/www/system_advanced_misc.php:626
+#: usr/local/www/system_advanced_misc.php:644
+msgid "This will periodically backup the DHCP leases data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media."
+msgstr "Isto irá, periodicamente, fazer backup dos dados de concessões DHCP, então eles podem ser restaurados automaticamente no próximo boot. Tenha em mente que quanto mais frequente o backup, mais escritas irão ocorrer na midia."
+
+#: usr/local/www/diag_nanobsd.php:226 usr/local/www/diag_nanobsd.php:225
+#: usr/local/www/diag_nanobsd.php:284 usr/local/www/diag_nanobsd.php:244
+msgid "View upgrade log"
+msgstr "Ver log de upgrade"
+
+#: usr/local/www/diag_nanobsd.php:229 usr/local/www/diag_nanobsd.php:228
+#: usr/local/www/diag_nanobsd.php:287 usr/local/www/diag_nanobsd.php:247
+msgid "View previous upgrade log"
+msgstr "Ver log de upgrade anterior"
+
+#: usr/local/www/diag_packet_capture.php:38
+#: usr/local/www/diag_packet_capture.php:225
+#: usr/local/www/diag_packet_capture.php:246
+#: usr/local/www/diag_packet_capture.php:40
+#: usr/local/www/diag_packet_capture.php:293
+#: usr/local/www/diag_packet_capture.php:311
+msgid "Download Capture"
+msgstr "Baixar captura"
+
+#: usr/local/www/diag_packet_capture.php:41 usr/local/www/fbegin.inc:210
+#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:237
+#: usr/local/www/diag_packet_capture.php:43 usr/local/www/fbegin.inc:229
+msgid "Packet Capture"
+msgstr "Captura de pacotes"
+
+#: usr/local/www/diag_packet_capture.php:71
+#: usr/local/www/diag_packet_capture.php:220
+#: usr/local/www/diag_packet_capture.php:265
+#: usr/local/www/status_dhcp_leases.php:321
+#: usr/local/www/status_dhcpv6_leases.php:363
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/status_dhcpv6_leases.php:484
+#: usr/local/www/status_dhcp_leases.php:342
+#: usr/local/www/diag_packet_capture.php:75
+#: usr/local/www/diag_packet_capture.php:240
+#: usr/local/www/diag_packet_capture.php:294
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:485
+#: usr/local/www/status_dhcp_leases.php:344
+#: usr/local/www/diag_packet_capture.php:129
+#: usr/local/www/diag_packet_capture.php:287
+#: usr/local/www/diag_packet_capture.php:341
+#: usr/local/www/status_dhcpv6_leases.php:411
+#: usr/local/www/status_dhcpv6_leases.php:488
+#: usr/local/www/diag_packet_capture.php:137
+#: usr/local/www/diag_packet_capture.php:305
+#: usr/local/www/diag_packet_capture.php:359
+#: usr/local/www/status_dhcp_leases.php:345
+msgid "Start"
+msgstr "Iniciar"
+
+#: usr/local/www/diag_packet_capture.php:78
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:222
+#: usr/local/www/diag_packet_capture.php:82
+#: usr/local/www/diag_packet_capture.php:239
+#: usr/local/www/diag_packet_capture.php:242
+#: usr/local/www/diag_packet_capture.php:136
+#: usr/local/www/diag_packet_capture.php:286
+#: usr/local/www/diag_packet_capture.php:289
+#: usr/local/www/diag_packet_capture.php:144
+#: usr/local/www/diag_packet_capture.php:304
+#: usr/local/www/diag_packet_capture.php:307
+msgid "Stop"
+msgstr "Parar"
+
+#: usr/local/www/diag_packet_capture.php:116
+#: usr/local/www/diag_packet_capture.php:120
+#: usr/local/www/diag_packet_capture.php:178
+#: usr/local/www/diag_packet_capture.php:186
+msgid "Packet capture"
+msgstr "Captura de pacotes"
+
+#: usr/local/www/diag_packet_capture.php:141
+#: usr/local/www/diag_packet_capture.php:145
+#: usr/local/www/diag_packet_capture.php:192
+#: usr/local/www/diag_packet_capture.php:200
+msgid "Select the interface on which to capture traffic."
+msgstr "Selecione a interface onde capturar o tráfego."
+
+#: usr/local/www/diag_packet_capture.php:145
+#: usr/local/www/system_gateways_edit.php:376
+#: usr/local/www/diag_packet_capture.php:149
+#: usr/local/www/system_gateways_edit.php:482
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/system_gateways_edit.php:484
+#: usr/local/www/diag_packet_capture.php:212
+#: usr/local/www/system_gateways_edit.php:514
+msgid "Address Family"
+msgstr "Família de Endereços"
+
+#: usr/local/www/diag_packet_capture.php:152
+#: usr/local/www/diag_packet_capture.php:156
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:219
+msgid "Select the type of traffic to be captured, either Any, IPv4 only or IPv6 only."
+msgstr "Selecione o tipo de tráfego a ser capturado, Qualquer um, IPv4 apenas ou IPv6 apenas."
+
+#: usr/local/www/diag_packet_capture.php:156
+#: usr/local/www/diag_packet_capture.php:176
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/diag_packet_capture.php:239
+msgid "Host Address"
+msgstr "Endereço do Host"
+
+#: usr/local/www/diag_packet_capture.php:159
+#: usr/local/www/diag_packet_capture.php:179
+#: usr/local/www/diag_packet_capture.php:226
+#: usr/local/www/diag_packet_capture.php:242
+msgid "This value is either the Source or Destination IP address or subnet in CIDR notation. The packet capture will look for this address in either field."
+msgstr "Este campo é o endereço IP tanto de Origem como Destino ou subrede na notação CIDR. A captura de pacotes irá observar os dois campos por este endereço."
+
+#: usr/local/www/diag_packet_capture.php:160
+#: usr/local/www/diag_packet_capture.php:180
+#: usr/local/www/diag_packet_capture.php:227
+#: usr/local/www/diag_packet_capture.php:243
+msgid "This value can be a domain name or IP address, or subnet in CIDR notation."
+msgstr "Este valor pode ser um nome de domínio, um endereço IP ou uma subrede no formato CIDR."
+
+#: usr/local/www/diag_packet_capture.php:161
+#: usr/local/www/diag_packet_capture.php:181
+#: usr/local/www/diag_packet_capture.php:228
+#: usr/local/www/diag_packet_capture.php:244
+msgid "If you leave this field blank, all packets on the specified interface will be captured."
+msgstr "Se você deixar esse campo em branco, todos os pacotes na interface especificada serão capturados."
+
+#: usr/local/www/diag_packet_capture.php:168
+#: usr/local/www/diag_packet_capture.php:188
+#: usr/local/www/diag_packet_capture.php:235
+#: usr/local/www/diag_packet_capture.php:251
+msgid "The port can be either the source or destination port. The packet capture will look for this port in either field."
+msgstr "A porta pode ser também a porta de destino ou origem. A captura de pacotes irá procurar por essa porta em qualquer campo."
+
+#: usr/local/www/diag_packet_capture.php:169
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/diag_packet_capture.php:236
+#: usr/local/www/diag_packet_capture.php:252
+msgid "Leave blank if you do not want to filter by port."
+msgstr "Deixe em branco se você não desejar filtrar por porta."
+
+#: usr/local/www/diag_packet_capture.php:173
+#: usr/local/www/diag_packet_capture.php:193
+#: usr/local/www/diag_packet_capture.php:240
+#: usr/local/www/diag_packet_capture.php:256
+msgid "Packet Length"
+msgstr "Tamanho do Pacote"
+
+#: usr/local/www/diag_packet_capture.php:176
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/diag_packet_capture.php:243
+#: usr/local/www/diag_packet_capture.php:259
+msgid "The Packet length is the number of bytes of each packet that will be captured. Default value is 0, which will capture the entire frame regardless of its size."
+msgstr "O tamanho do pacote é o número de bytes de cada pacote que será capturado. O valor padrão é 0, o qual irá capturar todo o quadro independentemente do seu tamanho."
+
+#: usr/local/www/diag_packet_capture.php:180 usr/local/www/diag_ping.php:55
+#: usr/local/www/diag_ping.php:108
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_captiveportal_vouchers_edit.php:189
+#: usr/local/www/diag_packet_capture.php:200
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:187
+#: usr/local/www/diag_packet_capture.php:247
+#: usr/local/www/diag_packet_capture.php:263 usr/local/www/diag_ping.php:57
+#: usr/local/www/diag_ping.php:129
+msgid "Count"
+msgstr "Contagem"
+
+#: usr/local/www/diag_packet_capture.php:183
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:250
+#: usr/local/www/diag_packet_capture.php:266
+msgid "This is the number of packets the packet capture will grab. Default value is 100."
+msgstr "Esse é o número de pacotes que a captura de pacotes irá pegar. O valor padrão é 100."
+
+#: usr/local/www/diag_packet_capture.php:183
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:250
+#: usr/local/www/diag_packet_capture.php:266
+msgid "Enter 0 (zero) for no count limit."
+msgstr "Digite 0 (zero) para não ter limite de contagem."
+
+#: usr/local/www/diag_packet_capture.php:186
+#: usr/local/www/diag_packet_capture.php:206
+#: usr/local/www/diag_packet_capture.php:253
+#: usr/local/www/diag_packet_capture.php:270
+msgid "Level of Detail"
+msgstr "Nível de detalhe"
+
+#: usr/local/www/diag_packet_capture.php:189
+#: usr/local/www/diag_packet_capture.php:209
+#: usr/local/www/diag_packet_capture.php:256
+#: usr/local/www/diag_packet_capture.php:273
+msgid "Normal"
+msgstr "Normal"
+
+#: usr/local/www/diag_packet_capture.php:190
+#: usr/local/www/diag_packet_capture.php:210
+#: usr/local/www/diag_packet_capture.php:257
+#: usr/local/www/diag_packet_capture.php:274
+msgid "Medium"
+msgstr "Médio"
+
+#: usr/local/www/diag_packet_capture.php:191
+#: usr/local/www/diag_packet_capture.php:211
+#: usr/local/www/diag_packet_capture.php:258
+#: usr/local/www/diag_packet_capture.php:275
+msgid "High"
+msgstr "Alto"
+
+#: usr/local/www/diag_packet_capture.php:192
+#: usr/local/www/diag_packet_capture.php:212
+#: usr/local/www/diag_packet_capture.php:259
+#: usr/local/www/diag_packet_capture.php:276
+msgid "Full"
+msgstr "Total"
+
+#: usr/local/www/diag_packet_capture.php:194
+#: usr/local/www/diag_packet_capture.php:214
+#: usr/local/www/diag_packet_capture.php:261
+#: usr/local/www/diag_packet_capture.php:278
+msgid "This is the level of detail that will be displayed after hitting 'Stop' when the packets have been captured."
+msgstr "Este é o nível de detalhes que será exibido após apertar 'Stop', quando os pacotes forem capturados."
+
+#: usr/local/www/diag_packet_capture.php:196
+#: usr/local/www/diag_packet_capture.php:216
+#: usr/local/www/diag_packet_capture.php:263
+#: usr/local/www/diag_packet_capture.php:280
+msgid "This option does not affect the level of detail when downloading the packet capture."
+msgstr "Essa opção não afeta o nível de detalhe quando baixar a captura de pacote."
+
+#: usr/local/www/diag_packet_capture.php:199
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/diag_packet_capture.php:284
+msgid "Reverse DNS Lookup"
+msgstr "DNS Lookup Reverso"
+
+#: usr/local/www/diag_packet_capture.php:202
+#: usr/local/www/diag_packet_capture.php:222
+#: usr/local/www/diag_packet_capture.php:269
+#: usr/local/www/diag_packet_capture.php:287
+msgid "This check box will cause the packet capture to perform a reverse DNS lookup associated with all IP addresses."
+msgstr "Essa caixa de seleção irá fazer com que a captura de pacote realize um consulta de DNS reversa associada com todos os endereços IP."
+
+#: usr/local/www/diag_packet_capture.php:203
+#: usr/local/www/diag_packet_capture.php:223
+#: usr/local/www/diag_packet_capture.php:270
+#: usr/local/www/diag_packet_capture.php:288
+msgid "This option can cause delays for large packet captures."
+msgstr "Esta opção pode causar atrasos na captura de grandes pacotes."
+
+#: usr/local/www/diag_packet_capture.php:226
+#: usr/local/www/diag_packet_capture.php:247
+#: usr/local/www/diag_packet_capture.php:294
+#: usr/local/www/diag_packet_capture.php:312
+msgid "The packet capture file was last updated:"
+msgstr "A última atualização da captura de pacotes foi:"
+
+#: usr/local/www/diag_packet_capture.php:239
+#: usr/local/www/diag_packet_capture.php:267
+#: usr/local/www/diag_packet_capture.php:260
+#: usr/local/www/diag_packet_capture.php:296
+#: usr/local/www/diag_packet_capture.php:307
+#: usr/local/www/diag_packet_capture.php:343
+#: usr/local/www/diag_packet_capture.php:325
+#: usr/local/www/diag_packet_capture.php:361
+msgid "Packet Capture is running."
+msgstr "Captura de pacotes está em execução."
+
+#: usr/local/www/diag_packet_capture.php:272
+#: usr/local/www/diag_packet_capture.php:301
+#: usr/local/www/diag_packet_capture.php:347
+#: usr/local/www/diag_packet_capture.php:365
+msgid "Packet Capture stopped."
+msgstr "Captura de pacotes parado."
+
+#: usr/local/www/diag_packet_capture.php:272
+#: usr/local/www/diag_packet_capture.php:301
+#: usr/local/www/diag_packet_capture.php:347
+#: usr/local/www/diag_packet_capture.php:365
+msgid "Packets Captured:"
+msgstr "Pacotes capturados:"
+
+#: usr/local/www/crash_reporter.php:68
+msgid "Unfortunately we have detected a programming bug."
+msgstr "Infelizmente nós detectamos um erro de programação."
+
+#: usr/local/www/crash_reporter.php:69
+msgid "Would you like to submit the programming debug logs to the pfSense developers for inspection?"
+msgstr "Você gostaria de enviar os logs de depuração de programação para os desenvolvedores do pfSense para inspeção?"
+
+#: usr/local/www/crash_reporter.php:71
+msgid "Please double check the contents to ensure you are comfortable sending this information before clicking Yes."
+msgstr "Por favor, verifique novamente o conteúdo para garantir que você está confortável enviando estas informações antes de clicar Sim."
+
+#: usr/local/www/crash_reporter.php:73
+msgid "Contents of crash reports"
+msgstr "Conteúdo dos relatórios de falhas"
+
+#: usr/local/www/crash_reporter.php:76
+msgid " - Submit this to the developers for inspection"
+msgstr "- Enviar isto para os desenvolvedores inspecionarem"
+
+#: usr/local/www/crash_reporter.php:77
+msgid " - Just delete the crash report and take me back to the Dashboard"
+msgstr "- Apenas apague o relatório de falhas e me mande de volta para o Dashboard"
+
+#: usr/local/www/crash_reporter.php:82
+msgid "Crash reporter"
+msgstr "Relator de falhas"
+
+#: usr/local/www/crash_reporter.php:101 usr/local/www/crash_reporter.php:103
+msgid "Processing..."
+msgstr "Processando..."
+
+#: usr/local/www/crash_reporter.php:108 usr/local/www/crash_reporter.php:110
+#: usr/local/www/crash_reporter.php:112
+msgid "Uploading..."
+msgstr "Enviando..."
+
+#: usr/local/www/crash_reporter.php:116
+#: usr/local/www/services_captiveportal_zones_edit.php:115
+#: usr/local/www/crash_reporter.php:120
+#: usr/local/www/services_captiveportal_zones_edit.php:117
+#: usr/local/www/crash_reporter.php:122
+msgid "Continue"
+msgstr "Continue"
+
+#: usr/local/www/crash_reporter.php:116 usr/local/www/crash_reporter.php:120
+#: usr/local/www/crash_reporter.php:122
+msgid " and delete crash report files from local disk."
+msgstr "e apagar relatório do disco local."
+
+#: usr/local/www/diag_authentication.php:52
+msgid "is not a valid authentication server"
+msgstr "não é um servidor de autenticação válido"
+
+#: usr/local/www/diag_authentication.php:55
+msgid "A username and password must be specified."
+msgstr "Um nome de usuário e senha devem ser especificados."
+
+#: usr/local/www/diag_authentication.php:59
+msgid "authenticated successfully."
+msgstr "autenticado com sucesso."
+
+#: usr/local/www/diag_authentication.php:61
+msgid "This user is a member of these groups"
+msgstr "Este usuário é um membro destes grupos"
+
+#: usr/local/www/diag_authentication.php:65
+msgid "Authentication failed."
+msgstr "Autenticação falhou."
+
+#: usr/local/www/diag_authentication.php:69 usr/local/www/interfaces.php:2325
+#: usr/local/www/services_captiveportal.php:578
+#: usr/local/www/services_captiveportal.php:893 usr/local/www/fbegin.inc:189
+#: usr/local/www/fbegin.inc:207 usr/local/www/services_captiveportal.php:583
+#: usr/local/www/services_captiveportal.php:938
+#: usr/local/www/interfaces.php:2505 usr/local/www/fbegin.inc:215
+#: usr/local/www/services_captiveportal.php:581
+#: usr/local/www/services_captiveportal.php:934
+#: usr/local/www/interfaces.php:2493
+#: usr/local/www/services_captiveportal.php:575
+#: usr/local/www/services_captiveportal.php:936 usr/local/www/fbegin.inc:206
+#: usr/local/www/interfaces.php:2523
+#: usr/local/www/services_captiveportal.php:591
+#: usr/local/www/services_captiveportal.php:952
+#: usr/local/www/interfaces.php:2569 usr/local/www/interfaces.php:2558
+#: usr/local/www/interfaces.php:2594
+msgid "Authentication"
+msgstr "Autenticação"
+
+#: usr/local/www/diag_authentication.php:90
+#: usr/local/www/system_authservers.php:82
+#: usr/local/www/system_usermanager_settings.php:140
+#: usr/local/www/diag_authentication.php:91
+#: usr/local/www/system_authservers.php:83
+#: usr/local/www/system_usermanager_settings.php:143
+msgid "Authentication Server"
+msgstr "Servidor de autenticação"
+
+#: usr/local/www/diag_authentication.php:106
+#: usr/local/www/status_captiveportal.php:162
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/interfaces.php:1724 usr/local/www/interfaces.php:1789
+#: usr/local/www/interfaces.php:1895
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:510
+#: usr/local/www/vpn_pptp_users.php:98
+#: usr/local/www/vpn_pptp_users_edit.php:76
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:146
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:213
+#: usr/local/www/system_usermanager.php:177
+#: usr/local/www/system_usermanager.php:182
+#: usr/local/www/system_usermanager.php:187
+#: usr/local/www/system_usermanager.php:475
+#: usr/local/www/system_usermanager.php:787
+#: usr/local/www/vpn_l2tp_users.php:101
+#: usr/local/www/vpn_l2tp_users_edit.php:78
+#: usr/local/www/vpn_l2tp_users_edit.php:81
+#: usr/local/www/vpn_l2tp_users_edit.php:154
+#: usr/local/www/vpn_openvpn_client.php:531
+#: usr/local/www/vpn_pppoe_edit.php:536
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:95
+#: usr/local/www/services_dyndns_edit.php:99
+#: usr/local/www/services_dyndns_edit.php:296
+#: usr/local/www/system_usermanager.php:473
+#: usr/local/www/system_usermanager.php:785
+#: usr/local/www/firewall_aliases_edit.php:473
+#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1967
+#: usr/local/www/interfaces.php:2073 usr/local/www/vpn_openvpn_client.php:536
+#: usr/local/www/vpn_pppoe_edit.php:537
+#: usr/local/www/system_usermanager.php:786
+#: usr/local/www/interfaces_ppps_edit.php:511
+#: usr/local/www/firewall_aliases_edit.php:475
+#: usr/local/www/vpn_l2tp_users.php:102
+#: usr/local/www/diag_authentication.php:107
+#: usr/local/www/vpn_pptp_users_edit.php:147 usr/local/www/interfaces.php:1890
+#: usr/local/www/interfaces.php:1955 usr/local/www/interfaces.php:2061
+#: usr/local/www/vpn_openvpn_client.php:554
+#: usr/local/www/vpn_l2tp_users_edit.php:79
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:155
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97
+#: usr/local/www/vpn_pptp_users.php:99
+#: usr/local/www/vpn_openvpn_client.php:573
+#: usr/local/www/services_dyndns_edit.php:300
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:517
+#: usr/local/www/vpn_pppoe_edit.php:540
+#: usr/local/www/status_captiveportal.php:148
+#: usr/local/www/interfaces.php:1914 usr/local/www/interfaces.php:1982
+#: usr/local/www/interfaces.php:2091
+#: usr/local/www/services_dyndns_edit.php:100
+#: usr/local/www/services_dyndns_edit.php:308
+#: usr/local/www/firewall_aliases_edit.php:497
+#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:2028
+#: usr/local/www/interfaces.php:2137
+#: usr/local/www/interfaces_ppps_edit.php:515
+#: usr/local/www/interfaces.php:1948 usr/local/www/interfaces.php:2017
+#: usr/local/www/interfaces.php:2126
+#: usr/local/www/services_dyndns_edit.php:309
+#: usr/local/www/firewall_aliases_edit.php:496
+#: usr/local/www/interfaces.php:1984 usr/local/www/interfaces.php:2053
+#: usr/local/www/interfaces.php:2162
+msgid "Username"
+msgstr "Usuário"
+
+#: usr/local/www/diag_authentication.php:112 usr/local/www/interfaces.php:1730
+#: usr/local/www/interfaces.php:1795 usr/local/www/interfaces.php:1901
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:516
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:151
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:220
+#: usr/local/www/system_advanced_notifications.php:192
+#: usr/local/www/system_usermanager.php:183
+#: usr/local/www/system_usermanager.php:188
+#: usr/local/www/system_usermanager.php:482
+#: usr/local/www/system_usermanager_passwordmg.php:50
+#: usr/local/www/system_usermanager_passwordmg.php:98
+#: usr/local/www/system_usermanager_passwordmg.php:101
+#: usr/local/www/vpn_l2tp_users_edit.php:81
+#: usr/local/www/vpn_l2tp_users_edit.php:159
+#: usr/local/www/vpn_openvpn_client.php:541
+#: usr/local/www/vpn_pppoe_edit.php:537
+#: usr/local/www/services_dyndns_edit.php:97
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/system_usermanager.php:480
+#: usr/local/www/system_advanced_notifications.php:201
+#: usr/local/www/interfaces.php:1908 usr/local/www/interfaces.php:1973
+#: usr/local/www/interfaces.php:2079 usr/local/www/vpn_openvpn_client.php:546
+#: usr/local/www/vpn_pppoe_edit.php:538
+#: usr/local/www/interfaces_ppps_edit.php:517
+#: usr/local/www/system_usermanager_passwordmg.php:99
+#: usr/local/www/system_usermanager_passwordmg.php:102
+#: usr/local/www/diag_authentication.php:113
+#: usr/local/www/vpn_pptp_users_edit.php:152 usr/local/www/interfaces.php:1896
+#: usr/local/www/interfaces.php:1961 usr/local/www/interfaces.php:2067
+#: usr/local/www/vpn_openvpn_client.php:564
+#: usr/local/www/vpn_l2tp_users_edit.php:82
+#: usr/local/www/vpn_l2tp_users_edit.php:160
+#: usr/local/www/vpn_openvpn_client.php:583
+#: usr/local/www/services_dyndns_edit.php:309
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces_ppps_edit.php:523
+#: usr/local/www/vpn_pppoe_edit.php:541
+#: usr/local/www/system_usermanager_passwordmg.php:104
+#: usr/local/www/system_usermanager_passwordmg.php:107
+#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1988
+#: usr/local/www/interfaces.php:2097 usr/local/www/services_dyndns_edit.php:98
+#: usr/local/www/services_dyndns_edit.php:317
+#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2034
+#: usr/local/www/interfaces.php:2143
+#: usr/local/www/interfaces_ppps_edit.php:521
+#: usr/local/www/interfaces.php:1954 usr/local/www/interfaces.php:2023
+#: usr/local/www/interfaces.php:2132
+#: usr/local/www/services_dyndns_edit.php:318
+#: usr/local/www/system_advanced_notifications.php:223
+#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2059
+#: usr/local/www/interfaces.php:2168
+msgid "Password"
+msgstr "Senha"
+
+#: usr/local/www/diag_authentication.php:120 usr/local/www/diag_smart.php:346
+#: usr/local/www/diag_authentication.php:121
+#: usr/local/www/diag_testport.php:179 usr/local/www/diag_smart.php:367
+#: usr/local/www/diag_testport.php:181
+msgid "Test"
+msgstr "Teste"
+
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_dyndns.php:85
+#: usr/local/www/services_dyndns.php:64 usr/local/www/services_dyndns.php:60
+msgid "Dynamic DNS clients"
+msgstr "Clientes DNS dinâmicos"
+
+#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:68
+#: usr/local/www/services_dyndns.php:98 usr/local/www/services_dyndns.php:78
+#: usr/local/www/services_dyndns.php:74
+msgid "DynDns"
+msgstr "DNS Dinâmico"
+
+#: usr/local/www/services_dyndns.php:90 usr/local/www/services_rfc2136.php:69
+#: usr/local/www/services_dyndns.php:99 usr/local/www/services_dyndns.php:79
+#: usr/local/www/services_dyndns.php:75
+msgid "RFC 2136"
+msgstr "RFC 2136"
+
+#: usr/local/www/services_dyndns.php:100 usr/local/www/status_services.php:244
+#: usr/local/www/services_dyndns.php:109 usr/local/www/status_services.php:240
+#: usr/local/www/status_services.php:238
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:52
+#: usr/local/www/services_dyndns.php:90 usr/local/www/status_services.php:79
+#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:340
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:79
+#: usr/local/www/services_dyndns.php:86
+msgid "Service"
+msgstr "Serviço"
+
+#: usr/local/www/services_dyndns.php:101 usr/local/www/interfaces.php:1612
+#: usr/local/www/system.php:113 usr/local/www/system.php:254
+#: usr/local/www/services_dhcp.php:892
+#: usr/local/www/services_dhcp_edit.php:228
+#: usr/local/www/services_captiveportal_hostname.php:122
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+#: usr/local/www/services_captiveportal_hostname_edit.php:180
+#: usr/local/www/diag_arp.php:315 usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:184
+#: usr/local/www/services_rfc2136.php:79
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:146
+#: usr/local/www/status_dhcp_leases.php:320 usr/local/www/diag_ndp.php:131
+#: usr/local/www/services_dhcpv6.php:805
+#: usr/local/www/services_dhcpv6_edit.php:205
+#: usr/local/www/services_dyndns_edit.php:95
+#: usr/local/www/services_dyndns_edit.php:267
+#: usr/local/www/services_dhcpv6_edit.php:208
+#: usr/local/www/status_dhcp_leases.php:341
+#: usr/local/www/services_dyndns.php:110 usr/local/www/services_dhcp.php:930
+#: usr/local/www/services_dhcp_edit.php:231 usr/local/www/interfaces.php:1690
+#: usr/local/www/system.php:114 usr/local/www/system.php:265
+#: usr/local/www/services_dhcpv6.php:900
+#: usr/local/www/services_dhcpv6_edit.php:210
+#: usr/local/www/services_captiveportal_hostname_edit.php:174
+#: usr/local/www/services_captiveportal_hostname_edit.php:178
+#: usr/local/www/services_captiveportal_hostname.php:120
+#: usr/local/www/status_dhcp_leases.php:343
+#: usr/local/www/services_dhcp.php:1134
+#: usr/local/www/services_dhcp_edit.php:233 usr/local/www/interfaces.php:1678
+#: usr/local/www/system.php:107 usr/local/www/system.php:258
+#: usr/local/www/services_dhcpv6.php:831 usr/local/www/services_rfc2136.php:80
+#: usr/local/www/services_dhcpv6_edit.php:213
+#: usr/local/www/services_dyndns_edit.php:271
+#: usr/local/www/services_dhcp_edit.php:361
+#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcpv6.php:852
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:53
+#: usr/local/www/services_dyndns.php:91
+#: usr/local/www/services_dyndns_edit.php:96
+#: usr/local/www/services_dyndns_edit.php:273
+#: usr/local/www/services_dhcp.php:1173
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:80
+#: usr/local/www/services_dyndns.php:87 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces.php:1728 usr/local/www/services_rfc2136.php:81
+#: usr/local/www/services_dyndns_edit.php:274
+#: usr/local/www/services_dhcp.php:1185
+#: usr/local/www/status_dhcp_leases.php:344
+#: usr/local/www/services_rfc2136_edit.php:72
+#: usr/local/www/services_rfc2136_edit.php:151
+#: usr/local/www/interfaces.php:1741
+msgid "Hostname"
+msgstr "Hostname"
+
+#: usr/local/www/services_dyndns.php:102 usr/local/www/services_dyndns.php:111
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:54
+#: usr/local/www/services_dyndns.php:92
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81
+#: usr/local/www/services_dyndns.php:88 usr/local/www/services_rfc2136.php:82
+msgid "Cached IP"
+msgstr "IP em cache"
+
+#: usr/local/www/services_dyndns.php:151 usr/local/www/services_wol.php:188
+#: usr/local/www/firewall_virtual_ip.php:221
+#: usr/local/www/system_advanced_sysctl.php:199
+#: usr/local/www/services_captiveportal_zones.php:89
+#: usr/local/www/services_dyndns.php:172
+#: usr/local/www/services_captiveportal_zones.php:90
+#: usr/local/www/firewall_virtual_ip.php:227
+#: usr/local/www/firewall_virtual_ip.php:247
+#: usr/local/www/services_dyndns.php:171 usr/local/www/services_dyndns.php:167
+#: usr/local/www/firewall_virtual_ip.php:270
+#: usr/local/www/firewall_virtual_ip.php:278
+#: usr/local/www/services_dyndns.php:178
+msgid "Do you really want to delete this entry?"
+msgstr "Você realmente quer apagar essa entrada?"
+
+#: usr/local/www/services_dyndns.php:162 usr/local/www/services_dyndns.php:183
+#: usr/local/www/services_dyndns.php:179 usr/local/www/services_dyndns.php:190
+msgid "IP addresses appearing in green are up to date with Dynamic DNS provider."
+msgstr "Endereços IP que aparecem em verde estão atualizados com o fornecedor de DNS Dinâmico."
+
+#: usr/local/www/graph_cpu.php:83
+msgid "Cannot get CPU load"
+msgstr "Não pôde obter carregamento de CPU"
+
+#: usr/local/www/graph_cpu.php:84 usr/local/www/graph.php:123
+msgid "Collecting initial data, please wait"
+msgstr "Coletando dados iniciais, por favor aguarde"
+
+#: usr/local/www/graph_cpu.php:96 usr/local/www/graph.php:135
+msgid "No URL for getURL"
+msgstr "Nenhuma URL para getURL"
+
+#: usr/local/www/graph_cpu.php:103 usr/local/www/graph.php:142
+msgid "No callback function for getURL"
+msgstr "Nenhuma função de callback para getURL"
+
+#: usr/local/www/graph_cpu.php:119 usr/local/www/graph.php:158
+msgid "Both getURL and XMLHttpRequest are undefined"
+msgstr "Ambas getURL e XMLHttpRequest estão indefinidas"
+
+#: usr/local/www/services_snmp.php:87 usr/local/www/services_snmp.php:91
+msgid "Invalid character '#' in system location"
+msgstr "Caractere '#' inválido no local do sistema"
+
+#: usr/local/www/services_snmp.php:88 usr/local/www/services_snmp.php:92
+msgid "Invalid character '#' in system contact"
+msgstr "Caractere '#' inválido no contato do sistema"
+
+#: usr/local/www/services_snmp.php:89 usr/local/www/services_snmp.php:93
+msgid "Invalid character '#' in read community string"
+msgstr "Caractere inválido '#' em ler string da comunidade"
+
+#: usr/local/www/services_snmp.php:92 usr/local/www/services_snmp.php:96
+msgid "Community"
+msgstr "Comunidade"
+
+#: usr/local/www/services_snmp.php:96 usr/local/www/services_snmp.php:100
+msgid "Polling Port"
+msgstr "Porta de Polling"
+
+#: usr/local/www/services_snmp.php:103 usr/local/www/services_snmp.php:107
+msgid "Invalid character '#' in SNMP trap string"
+msgstr "Caractere inválido '#' na string de SNMP trap"
+
+#: usr/local/www/services_snmp.php:106 usr/local/www/services_snmp.php:342
+#: usr/local/www/services_snmp.php:340 usr/local/www/services_snmp.php:341
+#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:351
+msgid "Trap server"
+msgstr "Servidor Trap"
+
+#: usr/local/www/services_snmp.php:110 usr/local/www/services_snmp.php:114
+msgid "Trap server port"
+msgstr "Porta do servidor Trap"
+
+#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:361
+#: usr/local/www/services_snmp.php:359 usr/local/www/services_snmp.php:360
+#: usr/local/www/services_snmp.php:118 usr/local/www/services_snmp.php:370
+msgid "Trap string"
+msgstr "String do Trap"
+
+#: usr/local/www/services_snmp.php:159 usr/local/www/fbegin.inc:134
+#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:160
+#: usr/local/www/fbegin.inc:151 usr/local/www/services_snmp.php:165
+msgid "SNMP"
+msgstr "SNMP"
+
+#: usr/local/www/services_snmp.php:275 usr/local/www/services_snmp.php:273
+#: usr/local/www/services_snmp.php:274 usr/local/www/services_snmp.php:284
+msgid "SNMP Daemon"
+msgstr "Daemon SNMP"
+
+#: usr/local/www/services_snmp.php:281 usr/local/www/services_snmp.php:279
+#: usr/local/www/services_snmp.php:280 usr/local/www/services_snmp.php:290
+msgid "Polling Port "
+msgstr "Porta de Polling"
+
+#: usr/local/www/services_snmp.php:284 usr/local/www/services_snmp.php:282
+#: usr/local/www/services_snmp.php:283 usr/local/www/services_snmp.php:293
+msgid "Enter the port to accept polling events on (default 161)"
+msgstr "Informe a porta para aceitar eventos de polling (padrão 161)"
+
+#: usr/local/www/services_snmp.php:289 usr/local/www/services_snmp.php:287
+#: usr/local/www/services_snmp.php:288 usr/local/www/services_snmp.php:298
+msgid "System location"
+msgstr "Localização do sistema"
+
+#: usr/local/www/services_snmp.php:296 usr/local/www/services_snmp.php:294
+#: usr/local/www/services_snmp.php:295 usr/local/www/services_snmp.php:305
+msgid "System contact"
+msgstr "Contato do sistema"
+
+#: usr/local/www/services_snmp.php:303 usr/local/www/services_snmp.php:301
+#: usr/local/www/services_snmp.php:302 usr/local/www/services_snmp.php:312
+msgid "Read Community String"
+msgstr "Ler string de comunidade"
+
+#: usr/local/www/services_snmp.php:306 usr/local/www/services_snmp.php:304
+#: usr/local/www/services_snmp.php:305 usr/local/www/services_snmp.php:315
+msgid "The community string is like a password, restricting access to querying SNMP to hosts knowing the community string. Use a strong value here to protect from unauthorized information disclosure."
+msgstr "A string de comunidade é como uma senha, restringe acesso a SNMP em fila para hosts que conhecem a string de comunidade. Use um valor forte aqui para proteger-se contra divulgação de informações não autorizada."
+
+#: usr/local/www/services_snmp.php:335 usr/local/www/services_snmp.php:333
+#: usr/local/www/services_snmp.php:334 usr/local/www/services_snmp.php:344
+msgid "SNMP Traps"
+msgstr "Traps SNMP"
+
+#: usr/local/www/services_snmp.php:345 usr/local/www/services_snmp.php:343
+#: usr/local/www/services_snmp.php:344 usr/local/www/services_snmp.php:354
+msgid "Enter trap server name"
+msgstr "Informe o nome do servidor Trap"
+
+#: usr/local/www/services_snmp.php:350 usr/local/www/services_snmp.php:348
+#: usr/local/www/services_snmp.php:349 usr/local/www/services_snmp.php:359
+msgid "Trap server port "
+msgstr "Porta de Servidor Trap"
+
+#: usr/local/www/services_snmp.php:353 usr/local/www/services_snmp.php:351
+#: usr/local/www/services_snmp.php:352 usr/local/www/services_snmp.php:362
+msgid "Enter the port to send the traps to (default 162)"
+msgstr "Informe a porta para a qual enviar traps (padrão 162)"
+
+#: usr/local/www/services_snmp.php:358 usr/local/www/services_snmp.php:356
+#: usr/local/www/services_snmp.php:357 usr/local/www/services_snmp.php:367
+msgid "Enter the SNMP trap string"
+msgstr "Informe a string de Trap SNMP"
+
+#: usr/local/www/services_snmp.php:370 usr/local/www/services_snmp.php:368
+#: usr/local/www/services_snmp.php:369 usr/local/www/services_snmp.php:379
+msgid "Modules"
+msgstr "Módulos"
+
+#: usr/local/www/services_snmp.php:376 usr/local/www/services_snmp.php:374
+#: usr/local/www/services_snmp.php:375 usr/local/www/services_snmp.php:385
+msgid "SNMP Modules"
+msgstr "Módulos SNMP"
+
+#: usr/local/www/services_snmp.php:378 usr/local/www/services_snmp.php:376
+#: usr/local/www/services_snmp.php:377 usr/local/www/services_snmp.php:387
+msgid "MibII"
+msgstr "MibII"
+
+#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:378
+#: usr/local/www/services_snmp.php:379 usr/local/www/services_snmp.php:389
+msgid "Netgraph"
+msgstr "Netgraph"
+
+#: usr/local/www/services_snmp.php:382 usr/local/www/license.php:171
+#: usr/local/www/services_snmp.php:380 usr/local/www/services_snmp.php:381
+#: usr/local/www/services_snmp.php:391
+msgid "PF"
+msgstr "PF"
+
+#: usr/local/www/services_snmp.php:384 usr/local/www/services_snmp.php:382
+#: usr/local/www/services_snmp.php:383 usr/local/www/services_snmp.php:393
+msgid "Host Resources (Requires MibII)"
+msgstr "Recursos de Host (Requer Mibll)"
+
+#: usr/local/www/services_snmp.php:391
+msgid "Bind to LAN interface only"
+msgstr "Vincular com interfaces LAN somente"
+
+#: usr/local/www/services_snmp.php:393
+msgid "This option can be useful when trying to access the SNMP agent by the LAN interface's IP address through a VPN tunnel terminated on the WAN interface."
+msgstr "Essa opção pode ser útil ao tentar acesso ao agente SNMP através do endereço IP da interface da LAN através o túnel VPN limitado à interface WAN."
+
+#: usr/local/www/headjs.php:143 usr/local/www/firewall_rules.php:315
+#: usr/local/www/firewall_rules.php:319 usr/local/www/guiconfig.inc:302
+#: usr/local/www/firewall_rules.php:312 usr/local/www/guiconfig.inc:291
+#: usr/local/www/guiconfig.inc:290 usr/local/www/headjs.php:146
+#: usr/local/www/firewall_rules.php:311 usr/local/www/guiconfig.inc:287
+#: usr/local/www/guiconfig.inc:294
+msgid "Apply changes"
+msgstr "Aplicar modificações"
+
+#: usr/local/www/services_wol.php:63
+#, php-format
+msgid "Sent magic packet to %1$s (%2$s)%3$s"
+msgstr "Enviar pacote mágico para %1$s (%2$s)%3$s"
+
+#: usr/local/www/services_wol.php:65
+#, php-format
+msgid "Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not complete successfully%5$s"
+msgstr "Por favor, verifique o %1$slog de sistema%2$s, o comando wol para %3$s (%4$s) não finalizou com sucesso%5$s"
+
+#: usr/local/www/services_wol.php:86 usr/local/www/services_wol_edit.php:90
+#: usr/local/www/interfaces.php:541 usr/local/www/services_dhcp_edit.php:129
+#: usr/local/www/services_dhcp_edit.php:131 usr/local/www/interfaces.php:611
+#: usr/local/www/interfaces.php:608 usr/local/www/services_dhcp_edit.php:165
+#: usr/local/www/interfaces.php:623 usr/local/www/interfaces.php:634
+#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:635
+msgid "A valid MAC address must be specified."
+msgstr "Um endereço MAC válido deve ser especificado."
+
+#: usr/local/www/services_wol.php:88
+msgid "A valid interface must be specified."
+msgstr "Uma interface válida deve ser especificada."
+
+#: usr/local/www/services_wol.php:94
+msgid "A valid ip could not be found!"
+msgstr "Não foi possível encontrar um ip válido!"
+
+#: usr/local/www/services_wol.php:99
+#, php-format
+msgid "Sent magic packet to %s."
+msgstr "Enviar pacote mágico para %s."
+
+#: usr/local/www/services_wol.php:101
+#, php-format
+msgid "Please check the %1$ssystem log%2$s, the wol command for %3$s did not complete successfully%4$s"
+msgstr "Por favor, verifique o %1$slog de sistema%2$s, o comando wol para %3$s não finalizou com sucesso%4$s"
+
+#: usr/local/www/services_wol.php:115 usr/local/www/services_wol.php:127
+#: usr/local/www/services_wol_edit.php:112 usr/local/www/diag_backup.php:123
+#: usr/local/www/fbegin.inc:142 usr/local/www/fbegin.inc:159
+#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:167
+#: usr/local/www/fbegin.inc:158 usr/local/www/diag_backup.php:202
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: usr/local/www/services_wol.php:141
+msgid "Choose which interface the host to be woken up is connected to."
+msgstr "Escolha em qual interface o host a ser ligado está conectado."
+
+#: usr/local/www/services_wol.php:144 usr/local/www/services_wol.php:162
+#: usr/local/www/services_wol_edit.php:82
+#: usr/local/www/services_wol_edit.php:140
+#: usr/local/www/status_captiveportal.php:161
+#: usr/local/www/interfaces.php:1283
+#: usr/local/www/services_captiveportal_mac.php:167
+#: usr/local/www/services_captiveportal_mac_edit.php:98
+#: usr/local/www/services_captiveportal_mac_edit.php:175
+#: usr/local/www/services_dhcp.php:890
+#: usr/local/www/services_dhcp_edit.php:106
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/status_interfaces.php:178 usr/local/www/diag_arp.php:314
+#: usr/local/www/status_dhcp_leases.php:319 usr/local/www/diag_ndp.php:130
+#: usr/local/www/status_interfaces.php:252
+#: usr/local/www/status_dhcp_leases.php:340
+#: usr/local/www/services_dhcp.php:928
+#: usr/local/www/services_dhcp_edit.php:108
+#: usr/local/www/services_dhcp_edit.php:210 usr/local/www/interfaces.php:1387
+#: usr/local/www/status_interfaces.php:255
+#: usr/local/www/services_captiveportal_mac.php:165
+#: usr/local/www/services_captiveportal_mac_edit.php:96
+#: usr/local/www/services_captiveportal_mac_edit.php:173
+#: usr/local/www/status_dhcp_leases.php:342
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:209 usr/local/www/interfaces.php:1375
+#: usr/local/www/services_dhcp_edit.php:142
+#: usr/local/www/services_dhcp_edit.php:337
+#: usr/local/www/services_dhcp.php:1151
+#: usr/local/www/services_captiveportal_mac_edit.php:180
+#: usr/local/www/status_captiveportal.php:147
+#: usr/local/www/services_captiveportal_mac.php:175
+#: usr/local/www/interfaces.php:1388 usr/local/www/services_dhcp.php:1171
+#: usr/local/www/interfaces.php:1430 usr/local/www/interfaces.php:1425
+#: usr/local/www/services_dhcp.php:1183
+#: usr/local/www/status_dhcp_leases.php:343 usr/local/www/interfaces.php:1438
+msgid "MAC address"
+msgstr "Endereço MAC"
+
+#: usr/local/www/services_wol.php:148
+msgid "Enter a MAC address "
+msgstr "Informe o endereço MAC"
+
+#: usr/local/www/services_wol.php:148
+msgid "in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "no seguinte formato: xx:xx:xx:xx:xx:xx"
+
+#: usr/local/www/services_wol.php:152 usr/local/www/diag_smart.php:244
+#: usr/local/www/diag_smart.php:265
+msgid "Send"
+msgstr "Enviar"
+
+#: usr/local/www/services_wol.php:157
+msgid "Wake all clients at once: "
+msgstr "Ligar todos os clientes ao mesmo tempo: "
+
+#: usr/local/www/services_wol.php:158
+msgid "Or Click the MAC address to wake up an individual device:"
+msgstr "Ou clique no endereço MAC para ligar um dispositivo individual:"
+
+#: usr/local/www/services_wol.php:212
+msgid "This service can be used to wake up (power on) computers by sending special"
+msgstr "Esse serviço pode ser usado para acordar (ligar) computadores enviando um especial"
+
+#: usr/local/www/services_wol.php:212
+msgid "Magic Packets"
+msgstr "Pacotes Mágicos"
+
+#: usr/local/www/services_wol.php:212
+msgid "The NIC in the computer that is to be woken up must support Wake on LAN and has to be configured properly (WOL cable, BIOS settings). "
+msgstr "O NIC no computador que seja ligado deve suportar Wake on LAN e tem que estar configurado apropriadamente (cabo WOL, configurações de BIOS). "
+
+#: usr/local/www/services_wol_edit.php:123
+msgid "Edit WOL entry"
+msgstr "Editar entrada WOL"
+
+#: usr/local/www/services_wol_edit.php:137
+msgid "Choose which interface this host is connected to."
+msgstr "Escolha em qual interface esse host está conectado."
+
+#: usr/local/www/services_wol_edit.php:144
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "Informe um endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx"
+
+#: usr/local/www/status_captiveportal.php:58
+msgid "Status: Captive portal"
+msgstr "Status: Portal Captive"
+
+#: usr/local/www/status_captiveportal.php:121
+#: usr/local/www/status_captiveportal_test.php:70
+#: usr/local/www/status_captiveportal_voucher_rolls.php:73
+#: usr/local/www/status_captiveportal_vouchers.php:103
+#: usr/local/www/status_captiveportal_vouchers.php:104
+#: usr/local/www/status_captiveportal_test.php:71
+#: usr/local/www/status_captiveportal_voucher_rolls.php:74
+#: usr/local/www/status_captiveportal_expire.php:69
+#: usr/local/www/status_captiveportal_vouchers.php:108
+#: usr/local/www/status_captiveportal.php:106
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+msgid "Active Users"
+msgstr "Usuários ativos"
+
+#: usr/local/www/status_captiveportal.php:122
+#: usr/local/www/status_captiveportal_test.php:71
+#: usr/local/www/status_captiveportal_voucher_rolls.php:74
+#: usr/local/www/status_captiveportal_vouchers.php:104
+#: usr/local/www/status_captiveportal_vouchers.php:105
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+#: usr/local/www/status_captiveportal_expire.php:70
+#: usr/local/www/status_captiveportal_vouchers.php:109
+#: usr/local/www/status_captiveportal.php:107
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+msgid "Active Vouchers"
+msgstr "Vouchers ativos"
+
+#: usr/local/www/status_captiveportal.php:123
+#: usr/local/www/services_captiveportal_vouchers.php:426
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_voucher_rolls.php:75
+#: usr/local/www/status_captiveportal_vouchers.php:105
+#: usr/local/www/services_captiveportal_vouchers.php:433
+#: usr/local/www/status_captiveportal_vouchers.php:106
+#: usr/local/www/services_captiveportal_vouchers.php:446
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+#: usr/local/www/status_captiveportal_expire.php:71
+#: usr/local/www/services_captiveportal_vouchers.php:455
+#: usr/local/www/status_captiveportal_vouchers.php:110
+#: usr/local/www/status_captiveportal.php:108
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/services_captiveportal_vouchers.php:460
+msgid "Voucher Rolls"
+msgstr "Listas de Voucher"
+
+#: usr/local/www/status_captiveportal.php:124
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:76
+#: usr/local/www/status_captiveportal_vouchers.php:106
+#: usr/local/www/status_captiveportal_vouchers.php:107
+#: usr/local/www/status_captiveportal_test.php:74
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/status_captiveportal_expire.php:72
+#: usr/local/www/status_captiveportal_vouchers.php:111
+#: usr/local/www/status_captiveportal.php:109
+#: usr/local/www/status_captiveportal_voucher_rolls.php:78
+msgid "Test Vouchers"
+msgstr "Vouchers de teste"
+
+#: usr/local/www/status_captiveportal.php:135
+#: usr/local/www/status_captiveportal.php:121
+msgid "Captive Portal Zone"
+msgstr "Zona Captive Portal"
+
+#: usr/local/www/status_captiveportal.php:157
+#: usr/local/www/status_captiveportal.php:143
+msgid "Captive Portal status"
+msgstr "Status Captive Portal"
+
+#: usr/local/www/status_captiveportal.php:164
+#: usr/local/www/status_captiveportal.php:167
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:97
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:99
+#: usr/local/www/status_captiveportal.php:150
+#: usr/local/www/status_captiveportal.php:153
+msgid "Session start"
+msgstr "Início de sessão"
+
+#: usr/local/www/status_captiveportal.php:165
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:98
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:100
+#: usr/local/www/status_captiveportal.php:151
+msgid "Last activity"
+msgstr "Última atividade"
+
+#: usr/local/www/status_captiveportal.php:181
+#: usr/local/www/status_captiveportal.php:168
+msgid "Do you really want to disconnect this client?"
+msgstr "Você realmente deseja desconectar esse cliente?"
+
+#: usr/local/www/status_captiveportal.php:181
+#: usr/local/www/status_interfaces.php:114
+#: usr/local/www/status_interfaces.php:129
+#: usr/local/www/status_interfaces.php:144
+#: usr/local/www/status_interfaces.php:159
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:147
+#: usr/local/www/status_interfaces.php:162
+#: usr/local/www/status_interfaces.php:177
+#: usr/local/www/status_interfaces.php:135
+#: usr/local/www/status_interfaces.php:150
+#: usr/local/www/status_interfaces.php:165
+#: usr/local/www/status_interfaces.php:180
+#: usr/local/www/status_captiveportal.php:168
+msgid "Disconnect"
+msgstr "Desconectar"
+
+#: usr/local/www/status_captiveportal.php:198
+#: usr/local/www/status_captiveportal.php:185
+msgid "Don't show last activity"
+msgstr "Não exibir a última atividade"
+
+#: usr/local/www/status_captiveportal.php:201
+#: usr/local/www/status_captiveportal.php:188
+msgid "Show last activity"
+msgstr "Exibir última atividade"
+
+#: usr/local/www/installer/installer.php:186
+msgid "Could not open /tmp/installer.sh for writing"
+msgstr "Não pôde abrir /tmp/installer.sh para escrita"
+
+#: usr/local/www/installer/installer.php:360
+#: usr/local/www/installer/installer.php:361
+#, php-format
+msgid "Beginning installation on disk %s."
+msgstr "Iniciando instalação no disco %s."
+
+#: usr/local/www/installer/installer.php:409
+#: usr/local/www/installer/installer.php:410
+msgid "Installer"
+msgstr "Instalador"
+
+#: usr/local/www/installer/installer.php:916
+#: usr/local/www/installer/installer.php:1104
+#: usr/local/www/installer/installer.php:917
+#: usr/local/www/installer/installer.php:1105
+msgid "ERROR: Could not find any suitable disks for installation."
+msgstr "ERRO: Não pôde encontrar um disco apropriado para instalação."
+
+#: usr/local/www/interfaces_bridge.php:64
+#: usr/local/www/interfaces_bridge.php:68
+msgid "This bridge cannot be deleted because it is assigned as an interface."
+msgstr "Essa ponte não pode ser removida porque ela está atribuída como uma interface."
+
+#: usr/local/www/interfaces_bridge.php:77
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_gif.php:76
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre.php:77
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/diag_backup.php:109 usr/local/www/interfaces.php:1027
+#: usr/local/www/interfaces_assign.php:43 usr/local/www/interfaces_vlan.php:78
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/diag_logs_filter_summary.php:46
+#: usr/local/www/interfaces_lagg.php:82
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq.php:86
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_wireless.php:76
+#: usr/local/www/interfaces_wireless_edit.php:145
+#: usr/local/www/services_captiveportal.php:439
+#: usr/local/www/status_interfaces.php:58 usr/local/www/fbegin.inc:163
+#: usr/local/www/fbegin.inc:327
+#: usr/local/www/services_captiveportal_zones.php:53
+#: usr/local/www/fbegin.inc:180 usr/local/www/fbegin.inc:345
+#: usr/local/www/diag_backup.php:186
+#: usr/local/www/services_captiveportal.php:443
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/interfaces.php:1113 usr/local/www/fbegin.inc:188
+#: usr/local/www/fbegin.inc:291 usr/local/www/status_interfaces.php:60
+#: usr/local/www/services_captiveportal.php:441
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/interfaces.php:1101
+#: usr/local/www/services_captiveportal_zones.php:54
+#: usr/local/www/interfaces_wireless_edit.php:147
+#: usr/local/www/interfaces_qinq.php:89
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_wireless.php:78
+#: usr/local/www/interfaces_bridge_edit.php:236 usr/local/www/fbegin.inc:179
+#: usr/local/www/fbegin.inc:283 usr/local/www/interfaces_gre.php:81
+#: usr/local/www/interfaces_gif.php:80 usr/local/www/interfaces.php:1115
+#: usr/local/www/services_captiveportal.php:459
+#: usr/local/www/interfaces.php:1157 usr/local/www/services_dnsmasq.php:262
+#: usr/local/www/interfaces.php:1152 usr/local/www/diag_backup.php:187
+#: usr/local/www/interfaces.php:1165
+msgid "Interfaces"
+msgstr "Interfaces"
+
+#: usr/local/www/interfaces_bridge.php:77
+#: usr/local/www/interfaces_bridge_edit.php:226
+#: usr/local/www/interfaces_bridge_edit.php:235
+#: usr/local/www/interfaces_bridge.php:83
+#: usr/local/www/interfaces_bridge_edit.php:236
+msgid "Bridge"
+msgstr "Ponte"
+
+#: usr/local/www/interfaces_bridge.php:89 usr/local/www/interfaces_gif.php:88
+#: usr/local/www/interfaces_gre.php:89 usr/local/www/interfaces_groups.php:75
+#: usr/local/www/interfaces_assign.php:402
+#: usr/local/www/interfaces_vlan.php:90 usr/local/www/interfaces_lagg.php:94
+#: usr/local/www/interfaces_ppps.php:90 usr/local/www/interfaces_qinq.php:98
+#: usr/local/www/interfaces_wireless.php:88
+#: usr/local/www/interfaces_groups.php:76 usr/local/www/interfaces_qinq.php:99
+#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_bridge.php:90
+#: usr/local/www/interfaces_lagg.php:95 usr/local/www/interfaces_gre.php:90
+#: usr/local/www/interfaces_wireless.php:89
+#: usr/local/www/interfaces_assign.php:396
+#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_gif.php:89
+#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_bridge.php:96
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_gif.php:93
+msgid "Interface assignments"
+msgstr "Atribuições de interface"
+
+#: usr/local/www/interfaces_bridge.php:90 usr/local/www/interfaces_gif.php:89
+#: usr/local/www/interfaces_gre.php:90 usr/local/www/interfaces_groups.php:76
+#: usr/local/www/interfaces_assign.php:403
+#: usr/local/www/interfaces_vlan.php:91 usr/local/www/interfaces_lagg.php:95
+#: usr/local/www/interfaces_ppps.php:91 usr/local/www/interfaces_qinq.php:99
+#: usr/local/www/interfaces_wireless.php:89
+#: usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_qinq.php:100 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_bridge.php:91 usr/local/www/interfaces_lagg.php:96
+#: usr/local/www/interfaces_gre.php:91
+#: usr/local/www/interfaces_wireless.php:90
+#: usr/local/www/interfaces_assign.php:397
+#: usr/local/www/interfaces_vlan.php:92 usr/local/www/interfaces_gif.php:90
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_lagg.php:100
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_bridge.php:97
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_gif.php:94
+msgid "Interface Groups"
+msgstr "Grupos de Interface"
+
+#: usr/local/www/interfaces_bridge.php:92 usr/local/www/interfaces_gif.php:91
+#: usr/local/www/interfaces_gre.php:92 usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_assign.php:405
+#: usr/local/www/interfaces_vlan.php:93 usr/local/www/interfaces_lagg.php:97
+#: usr/local/www/interfaces_ppps.php:93 usr/local/www/interfaces_qinq.php:101
+#: usr/local/www/interfaces_wireless.php:91
+#: usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_qinq.php:102 usr/local/www/interfaces_ppps.php:94
+#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_lagg.php:98
+#: usr/local/www/interfaces_gre.php:93
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_assign.php:399
+#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_gif.php:92
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_lagg.php:102
+#: usr/local/www/interfaces_vlan.php:100
+#: usr/local/www/interfaces_bridge.php:99
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_gif.php:96
+msgid "VLANs"
+msgstr "VLANs"
+
+#: usr/local/www/interfaces_bridge.php:93 usr/local/www/interfaces_gif.php:92
+#: usr/local/www/interfaces_gre.php:93 usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_assign.php:406
+#: usr/local/www/interfaces_vlan.php:94 usr/local/www/interfaces_lagg.php:98
+#: usr/local/www/interfaces_ppps.php:94 usr/local/www/interfaces_qinq.php:102
+#: usr/local/www/interfaces_wireless.php:92
+#: usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_gre.php:94
+#: usr/local/www/interfaces_wireless.php:93
+#: usr/local/www/interfaces_assign.php:400
+#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_lagg.php:103
+#: usr/local/www/interfaces_vlan.php:101
+#: usr/local/www/interfaces_bridge.php:100
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_gif.php:97
+msgid "QinQs"
+msgstr "QinQs"
+
+#: usr/local/www/interfaces_bridge.php:94 usr/local/www/interfaces_gif.php:93
+#: usr/local/www/interfaces_gre.php:94 usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_assign.php:407
+#: usr/local/www/interfaces_vlan.php:95 usr/local/www/interfaces_lagg.php:99
+#: usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_ppps_edit.php:378
+#: usr/local/www/interfaces_qinq.php:103
+#: usr/local/www/interfaces_wireless.php:93
+#: usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_ppps.php:96
+#: usr/local/www/interfaces_bridge.php:95
+#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_gre.php:95
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_assign.php:401
+#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_qinq.php:107
+#: usr/local/www/interfaces_ppps_edit.php:384
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_vlan.php:102
+#: usr/local/www/interfaces_bridge.php:101
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_gif.php:98
+msgid "PPPs"
+msgstr "PPPs"
+
+#: usr/local/www/interfaces_bridge.php:95 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_gre.php:77 usr/local/www/interfaces_gre.php:95
+#: usr/local/www/interfaces_gre_edit.php:127
+#: usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_assign.php:408
+#: usr/local/www/interfaces_vlan.php:96 usr/local/www/interfaces_lagg.php:100
+#: usr/local/www/interfaces_ppps.php:96 usr/local/www/interfaces_qinq.php:104
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_ppps.php:97
+#: usr/local/www/interfaces_bridge.php:96
+#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_gre.php:96
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_assign.php:402
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_lagg.php:105
+#: usr/local/www/interfaces_vlan.php:103
+#: usr/local/www/interfaces_bridge.php:102
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_gre.php:81 usr/local/www/interfaces_gre.php:100
+#: usr/local/www/interfaces_gif.php:99
+msgid "GRE"
+msgstr "GRE"
+
+#: usr/local/www/interfaces_bridge.php:96 usr/local/www/interfaces_gif.php:76
+#: usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_gif_edit.php:125
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_assign.php:409
+#: usr/local/www/interfaces_vlan.php:97 usr/local/www/interfaces_lagg.php:101
+#: usr/local/www/interfaces_ppps.php:97 usr/local/www/interfaces_qinq.php:105
+#: usr/local/www/interfaces_wireless.php:95
+#: usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_ppps.php:98
+#: usr/local/www/interfaces_bridge.php:97
+#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_gre.php:97
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_assign.php:403
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_lagg.php:106
+#: usr/local/www/interfaces_vlan.php:104
+#: usr/local/www/interfaces_gif_edit.php:133
+#: usr/local/www/interfaces_bridge.php:103
+#: usr/local/www/interfaces_wireless.php:98
+#: usr/local/www/interfaces_gre.php:101 usr/local/www/interfaces_gif.php:80
+#: usr/local/www/interfaces_gif.php:100
+msgid "GIF"
+msgstr "GIF"
+
+#: usr/local/www/interfaces_bridge.php:97 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_assign.php:410
+#: usr/local/www/interfaces_vlan.php:98 usr/local/www/interfaces_lagg.php:102
+#: usr/local/www/interfaces_ppps.php:98 usr/local/www/interfaces_qinq.php:106
+#: usr/local/www/interfaces_wireless.php:96
+#: usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_ppps.php:99
+#: usr/local/www/interfaces_bridge.php:98
+#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_gre.php:98
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_assign.php:404
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_lagg.php:107
+#: usr/local/www/interfaces_vlan.php:105
+#: usr/local/www/interfaces_bridge.php:104
+#: usr/local/www/interfaces_wireless.php:99
+#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_gif.php:101
+msgid "Bridges"
+msgstr "Pontes"
+
+#: usr/local/www/interfaces_bridge.php:98 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_assign.php:411
+#: usr/local/www/interfaces_vlan.php:99 usr/local/www/interfaces_lagg.php:82
+#: usr/local/www/interfaces_lagg.php:103
+#: usr/local/www/interfaces_lagg_edit.php:120
+#: usr/local/www/interfaces_ppps.php:99 usr/local/www/interfaces_qinq.php:107
+#: usr/local/www/interfaces_wireless.php:97
+#: usr/local/www/interfaces_groups.php:85
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_ppps.php:100
+#: usr/local/www/interfaces_bridge.php:99
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_gre.php:99
+#: usr/local/www/interfaces_wireless.php:98
+#: usr/local/www/interfaces_assign.php:405
+#: usr/local/www/interfaces_vlan.php:100 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_qinq.php:111
+#: usr/local/www/interfaces_lagg_edit.php:133
+#: usr/local/www/interfaces_lagg.php:86 usr/local/www/interfaces_lagg.php:108
+#: usr/local/www/interfaces_vlan.php:106
+#: usr/local/www/interfaces_bridge.php:105
+#: usr/local/www/interfaces_wireless.php:100
+#: usr/local/www/interfaces_gre.php:103 usr/local/www/interfaces_gif.php:102
+msgid "LAGG"
+msgstr "LAGG"
+
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_groups.php:95
+#: usr/local/www/interfaces_lagg.php:113
+#: usr/local/www/load_balancer_pool_edit.php:257
+#: usr/local/www/system_groupmanager.php:317
+#: usr/local/www/load_balancer_pool_edit.php:274
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_lagg.php:114
+#: usr/local/www/load_balancer_pool_edit.php:272
+#: usr/local/www/interfaces_lagg.php:118
+#: usr/local/www/interfaces_bridge.php:115
+#: usr/local/www/system_groupmanager.php:320
+msgid "Members"
+msgstr "Membros"
+
+#: usr/local/www/interfaces_bridge.php:135
+#: usr/local/www/interfaces_bridge.php:136
+#: usr/local/www/interfaces_bridge.php:142
+msgid "Do you really want to delete this bridge?"
+msgstr "Você realmente quer apagar essa ponte?"
+
+#: usr/local/www/interfaces_bridge.php:146
+#: usr/local/www/interfaces_bridge.php:147
+#: usr/local/www/interfaces_bridge.php:153
+msgid "Here you can configure bridging of interfaces."
+msgstr "Aqui você pode configurar as pontes de interfaces."
+
+#: usr/local/www/interfaces_bridge_edit.php:111
+#: usr/local/www/interfaces_bridge_edit.php:119
+msgid "Member Interfaces"
+msgstr "Interfaces Membros"
+
+#: usr/local/www/interfaces_bridge_edit.php:116
+#: usr/local/www/interfaces_bridge_edit.php:124
+msgid "Maxage needs to be an integer between 6 and 40."
+msgstr "Idade Máx precida ser um inteiro entre 6 e 40."
+
+#: usr/local/www/interfaces_bridge_edit.php:118
+#: usr/local/www/interfaces_bridge_edit.php:126
+msgid "Maxaddr needs to be an integer."
+msgstr "Endereços Máx. precisa ser um inteiro."
+
+#: usr/local/www/interfaces_bridge_edit.php:120
+#: usr/local/www/interfaces_bridge_edit.php:128
+msgid "Timeout needs to be an integer."
+msgstr "Tempo de espera precisa ser um inteiro."
+
+#: usr/local/www/interfaces_bridge_edit.php:122
+#: usr/local/www/interfaces_bridge_edit.php:130
+msgid "Forward Delay needs to be an integer between 4 and 30."
+msgstr "Tempo de reenvio precisa ser um inteiro entre 4 e 30."
+
+#: usr/local/www/interfaces_bridge_edit.php:124
+#: usr/local/www/interfaces_bridge_edit.php:132
+msgid "Hello time for STP needs to be an integer between 1 and 2."
+msgstr "Tempo de Hello para STP precisa ser um inteiro entre 1 e 2."
+
+#: usr/local/www/interfaces_bridge_edit.php:126
+#: usr/local/www/interfaces_bridge_edit.php:134
+msgid "Priority for STP needs to be an integer between 0 and 61440."
+msgstr "Prioridade para STP precisa ser um inteiro entre 0 e 61440."
+
+#: usr/local/www/interfaces_bridge_edit.php:128
+#: usr/local/www/interfaces_bridge_edit.php:136
+msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10."
+msgstr "Contagem de espera de transmissão para STP precisa ser um inteiro entre 1 e 10."
+
+#: usr/local/www/interfaces_bridge_edit.php:131
+#: usr/local/www/interfaces_bridge_edit.php:139
+msgid "interface priority for STP needs to be an integer between 0 and 240."
+msgstr "prioridade de interface para STP precisa ser um inteiro entre 0 e 240."
+
+#: usr/local/www/interfaces_bridge_edit.php:136
+#: usr/local/www/interfaces_bridge_edit.php:144
+msgid "interface path cost for STP needs to be an integer between 1 and 200000000."
+msgstr "custo de caminho de interface para STP precisa ser um inteiro entre 1 e 200000000."
+
+#: usr/local/www/interfaces_bridge_edit.php:141
+#: usr/local/www/interfaces_bridge_edit.php:149
+msgid "You must select at least 2 member interfaces for a bridge."
+msgstr "Você deve selecionar pelo menos 2 interfaces membro para uma ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:147
+#: usr/local/www/interfaces_bridge_edit.php:155
+#: usr/local/www/interfaces_bridge_edit.php:157
+msgid "Bridging a wireless interface is only possible in hostap mode."
+msgstr "Fazer uma ponte com uma interface sem fio somente é possível no modo hostap."
+
+#: usr/local/www/interfaces_bridge_edit.php:149
+#: usr/local/www/interfaces_bridge_edit.php:157
+#: usr/local/www/interfaces_bridge_edit.php:159
+msgid "Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue."
+msgstr "Interface Span não pode ser parte de uma ponte. Remova a interface span dos membros da ponte para continuar."
+
+#: usr/local/www/interfaces_bridge_edit.php:206
+#: usr/local/www/interfaces_gif_edit.php:106
+#: usr/local/www/interfaces_gre_edit.php:108
+#: usr/local/www/interfaces_vlan_edit.php:121
+#: usr/local/www/interfaces_lagg_edit.php:101
+#: usr/local/www/interfaces_bridge_edit.php:215
+#: usr/local/www/interfaces_vlan_edit.php:124
+#: usr/local/www/interfaces_lagg_edit.php:114
+#: usr/local/www/interfaces_gif_edit.php:114
+#: usr/local/www/interfaces_bridge_edit.php:217
+msgid "Error occurred creating interface, please retry."
+msgstr "Um erro ocorreu ao criar a interface. Por favor, tente novamente."
+
+#: usr/local/www/interfaces_bridge_edit.php:253
+#: usr/local/www/interfaces_bridge_edit.php:262
+#: usr/local/www/interfaces_bridge_edit.php:263
+#: usr/local/www/interfaces_bridge_edit.php:264
+#: usr/local/www/interfaces_bridge_edit.php:266
+msgid "Bridge configuration"
+msgstr "Configuração de ponte"
+
+#: usr/local/www/interfaces_bridge_edit.php:256
+#: usr/local/www/interfaces_lagg_edit.php:86
+#: usr/local/www/interfaces_bridge_edit.php:265
+#: usr/local/www/interfaces_bridge_edit.php:266
+#: usr/local/www/interfaces_lagg_edit.php:88
+#: usr/local/www/interfaces_bridge_edit.php:267
+#: usr/local/www/interfaces_bridge_edit.php:269
+msgid "Member interfaces"
+msgstr "Interfaces membro"
+
+#: usr/local/www/interfaces_bridge_edit.php:269
+#: usr/local/www/interfaces_bridge_edit.php:278
+#: usr/local/www/interfaces_bridge_edit.php:279
+#: usr/local/www/interfaces_bridge_edit.php:280
+#: usr/local/www/interfaces_bridge_edit.php:282
+msgid "Interfaces participating in the bridge."
+msgstr "Interfaces participando da ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:285
+#: usr/local/www/interfaces_bridge_edit.php:294
+#: usr/local/www/interfaces_bridge_edit.php:295
+#: usr/local/www/interfaces_bridge_edit.php:296
+#: usr/local/www/interfaces_bridge_edit.php:298
+msgid "RSTP/STP"
+msgstr "RSTP/STP"
+
+#: usr/local/www/interfaces_bridge_edit.php:288
+#: usr/local/www/interfaces_bridge_edit.php:297
+#: usr/local/www/interfaces_bridge_edit.php:298
+#: usr/local/www/interfaces_bridge_edit.php:299
+#: usr/local/www/interfaces_bridge_edit.php:301
+msgid "Enable spanning tree options for this bridge."
+msgstr "Habilitar opções de árvore expansível para essa ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:304
+#: usr/local/www/interfaces_bridge_edit.php:313
+#: usr/local/www/interfaces_bridge_edit.php:314
+#: usr/local/www/interfaces_bridge_edit.php:315
+#: usr/local/www/interfaces_bridge_edit.php:317
+msgid "Protocol used for spanning tree."
+msgstr "Protocolo usado para árvore expansível."
+
+#: usr/local/www/interfaces_bridge_edit.php:306
+#: usr/local/www/interfaces_bridge_edit.php:315
+#: usr/local/www/interfaces_bridge_edit.php:316
+#: usr/local/www/interfaces_bridge_edit.php:317
+#: usr/local/www/interfaces_bridge_edit.php:319
+msgid "STP interfaces"
+msgstr "Interfaces STP"
+
+#: usr/local/www/interfaces_bridge_edit.php:320
+#: usr/local/www/interfaces_bridge_edit.php:329
+#: usr/local/www/interfaces_bridge_edit.php:330
+#: usr/local/www/interfaces_bridge_edit.php:331
+#: usr/local/www/interfaces_bridge_edit.php:333
+msgid "Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to detect and remove loops in a network topology."
+msgstr "Habilitar Protocolo de Ãrvore Expansível na interface. O driver if_bridge(4) possui suporte para o Protocolo de Ãrvore Expansível (STP) IEEE 802.1D. STP é usado para detectar e remover loops em uma topologia de rede."
+
+#: usr/local/www/interfaces_bridge_edit.php:326
+#: usr/local/www/interfaces_bridge_edit.php:335
+#: usr/local/www/interfaces_bridge_edit.php:336
+#: usr/local/www/interfaces_bridge_edit.php:337
+#: usr/local/www/interfaces_bridge_edit.php:339
+msgid "Valid time"
+msgstr "Tempo válido"
+
+#: usr/local/www/interfaces_bridge_edit.php:328
+#: usr/local/www/interfaces_bridge_edit.php:338
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:416
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936
+#: usr/local/www/graph.php:120 usr/local/www/services_dhcp.php:679
+#: usr/local/www/services_dhcp.php:689
+#: usr/local/www/services_rfc2136_edit.php:156
+#: usr/local/www/vpn_ipsec_phase1.php:761
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase2.php:622
+#: usr/local/www/services_dhcpv6.php:624 usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcp.php:702
+#: usr/local/www/interfaces_bridge_edit.php:337
+#: usr/local/www/interfaces_bridge_edit.php:356
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/vpn_ipsec_phase2.php:648 usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces.php:2114 usr/local/www/vpn_ipsec_phase1.php:774
+#: usr/local/www/vpn_ipsec_phase1.php:844
+#: usr/local/www/services_dhcpv6.php:692 usr/local/www/services_dhcpv6.php:702
+#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcp.php:878
+#: usr/local/www/interfaces_bridge_edit.php:348
+#: usr/local/www/interfaces_bridge_edit.php:357
+#: usr/local/www/interfaces_bridge_edit.php:426
+#: usr/local/www/vpn_ipsec_phase2.php:744 usr/local/www/interfaces.php:1983
+#: usr/local/www/interfaces.php:2102 usr/local/www/vpn_ipsec_phase1.php:771
+#: usr/local/www/vpn_ipsec_phase1.php:841
+#: usr/local/www/services_dhcpv6.php:623 usr/local/www/services_dhcpv6.php:633
+#: usr/local/www/services_dhcp_edit.php:434
+#: usr/local/www/services_dhcp_edit.php:444
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcp.php:892
+#: usr/local/www/services_dhcpv6.php:640 usr/local/www/services_dhcpv6.php:650
+#: usr/local/www/interfaces_bridge_edit.php:339
+#: usr/local/www/interfaces_bridge_edit.php:349
+#: usr/local/www/interfaces_bridge_edit.php:358
+#: usr/local/www/interfaces_bridge_edit.php:427
+#: usr/local/www/vpn_ipsec_phase1.php:792
+#: usr/local/www/vpn_ipsec_phase1.php:862
+#: usr/local/www/vpn_ipsec_phase2.php:765 usr/local/www/interfaces.php:2010
+#: usr/local/www/interfaces.php:2132 usr/local/www/services_dhcp.php:902
+#: usr/local/www/services_dhcp.php:912 usr/local/www/interfaces.php:2056
+#: usr/local/www/interfaces.php:2178
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:351
+#: usr/local/www/interfaces_bridge_edit.php:360
+#: usr/local/www/interfaces_bridge_edit.php:431
+#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167
+#: usr/local/www/services_dhcp.php:914 usr/local/www/services_dhcp.php:924
+#: usr/local/www/services_rfc2136_edit.php:161
+#: usr/local/www/interfaces.php:2081 usr/local/www/interfaces.php:2203
+msgid "seconds"
+msgstr "segundos"
+
+#: usr/local/www/interfaces_bridge_edit.php:331
+#: usr/local/www/interfaces_bridge_edit.php:340
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:342
+#: usr/local/www/interfaces_bridge_edit.php:344
+msgid "Set the time that a Spanning Tree Protocol configuration is valid. The default is 20 seconds. The minimum is 6 seconds and the maximum is 40 seconds."
+msgstr "Configurar o tempo que uma configuração STP é válida. O padrão é 20 segundos. O mínimo é 6 segundos e o máximo e 40 segundos."
+
+#: usr/local/www/interfaces_bridge_edit.php:336
+#: usr/local/www/interfaces_bridge_edit.php:345
+#: usr/local/www/interfaces_bridge_edit.php:346
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:349
+msgid "Forward time"
+msgstr "Tempo de reenvio"
+
+#: usr/local/www/interfaces_bridge_edit.php:341
+#: usr/local/www/interfaces_bridge_edit.php:350
+#: usr/local/www/interfaces_bridge_edit.php:351
+#: usr/local/www/interfaces_bridge_edit.php:352
+#: usr/local/www/interfaces_bridge_edit.php:354
+msgid "Set the time that must pass before an interface begins forwarding packets when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 seconds and the maximum is 30 seconds."
+msgstr "Configure o tempo que deve passar antes que uma interface comece a reenviar pacotes quando o Spanning Tree está habilitado. O padrão é 15 segundos. O mínimo é 4 segundos e o máximo é 30 segundos."
+
+#: usr/local/www/interfaces_bridge_edit.php:345
+#: usr/local/www/interfaces_bridge_edit.php:354
+#: usr/local/www/interfaces_bridge_edit.php:355
+#: usr/local/www/interfaces_bridge_edit.php:356
+#: usr/local/www/interfaces_bridge_edit.php:358
+msgid "Hello time"
+msgstr "Hello time"
+
+#: usr/local/www/interfaces_bridge_edit.php:350
+#: usr/local/www/interfaces_bridge_edit.php:359
+#: usr/local/www/interfaces_bridge_edit.php:360
+#: usr/local/www/interfaces_bridge_edit.php:361
+#: usr/local/www/interfaces_bridge_edit.php:363
+msgid "Set the time between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when operating in legacy STP mode. The default is 2 seconds. The minimum is 1 second and the maximum is 2 seconds."
+msgstr "Configure o tempo entre os broadcasts de mensagems de configuração de Protocolo de Ãrvore Expansível. O tempo de hello somente pode ser modificado quando operando no modo legado do STP. O padrão é 2 segundos. O mínimo é 1 segundo e o máximo é 2 segundos."
+
+#: usr/local/www/interfaces_bridge_edit.php:359
+#: usr/local/www/interfaces_bridge_edit.php:368
+#: usr/local/www/interfaces_bridge_edit.php:369
+#: usr/local/www/interfaces_bridge_edit.php:370
+#: usr/local/www/interfaces_bridge_edit.php:372
+msgid "Set the bridge priority for Spanning Tree. The default is 32768. The minimum is 0 and the maximum is 61440."
+msgstr "Configure a prioridade da ponte para Ãrvore Expansível. O padrão é 32768. O mínimo é 0 e o máximo é 61440."
+
+#: usr/local/www/interfaces_bridge_edit.php:363
+#: usr/local/www/interfaces_bridge_edit.php:372
+#: usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/interfaces_bridge_edit.php:374
+#: usr/local/www/interfaces_bridge_edit.php:376
+msgid "Hold count"
+msgstr "Contagem de espera"
+
+#: usr/local/www/interfaces_bridge_edit.php:368
+#: usr/local/www/interfaces_bridge_edit.php:377
+#: usr/local/www/interfaces_bridge_edit.php:378
+#: usr/local/www/interfaces_bridge_edit.php:379
+msgid "Set the transmit hold count for Spanning Tree. This is the num- ber of packets transmitted before being rate limited. The default is 6. The minimum is 1 and the maximum is 10."
+msgstr "Configure a contagem de espera de transmissão para a Ãrvore Expansível. Esse é o número de pacotes transmitidos antes que seja limitado a uma taxa. O padrão é 6. O mínimo é 1 e o máximo é 10."
+
+#: usr/local/www/interfaces_bridge_edit.php:382
+msgid "Set the Spanning Tree priority of interface to value. The default is 128. The minimum is 0 and the maximum is 240."
+msgstr "Configure a prioridade da Ãrvore Expansível de uma interface para um valor. O padrão é 128. O mínimo é 0 e o máximo é 240."
+
+#: usr/local/www/interfaces_bridge_edit.php:386
+#: usr/local/www/interfaces_bridge_edit.php:395
+#: usr/local/www/interfaces_bridge_edit.php:396
+#: usr/local/www/interfaces_bridge_edit.php:397
+#: usr/local/www/interfaces_bridge_edit.php:400
+msgid "Path cost"
+msgstr "Custo do caminho"
+
+#: usr/local/www/interfaces_bridge_edit.php:395
+#: usr/local/www/interfaces_bridge_edit.php:404
+#: usr/local/www/interfaces_bridge_edit.php:405
+#: usr/local/www/interfaces_bridge_edit.php:406
+#: usr/local/www/interfaces_bridge_edit.php:410
+msgid "Set the Spanning Tree path cost of interface to value. The default is calculated from the link speed. To change a previously selected path cost back to automatic, set the cost to 0. The minimum is 1 and the maximum is 200000000."
+msgstr "Configure o custo do caminho da Ãrvore Expansível de uma interface para um valor. O padrão é calculado com base na velocidade do link. Para modificar um custo selecionado anteriormente para automático, configure o custo como 0. O mínimo e 1 e o máximo é 200000000."
+
+#: usr/local/www/interfaces_bridge_edit.php:404
+#: usr/local/www/interfaces_bridge_edit.php:413
+#: usr/local/www/interfaces_bridge_edit.php:414
+#: usr/local/www/interfaces_bridge_edit.php:415
+#: usr/local/www/interfaces_bridge_edit.php:419
+msgid "Cache size"
+msgstr "Tamanho do Cache"
+
+#: usr/local/www/interfaces_bridge_edit.php:406
+#: usr/local/www/interfaces_bridge_edit.php:415
+#: usr/local/www/interfaces_bridge_edit.php:416
+#: usr/local/www/interfaces_bridge_edit.php:417
+#: usr/local/www/interfaces_bridge_edit.php:421
+msgid "entries"
+msgstr "entradas"
+
+#: usr/local/www/interfaces_bridge_edit.php:408
+#: usr/local/www/interfaces_bridge_edit.php:417
+#: usr/local/www/interfaces_bridge_edit.php:418
+#: usr/local/www/interfaces_bridge_edit.php:419
+#: usr/local/www/interfaces_bridge_edit.php:423
+msgid "Set the size of the bridge address cache to size.\tThe default is .100 entries."
+msgstr "Configure o tamanho do endereço de cache da ponte para um tamanho.\tO padrão é 100 entradas."
+
+#: usr/local/www/interfaces_bridge_edit.php:414
+#: usr/local/www/interfaces_bridge_edit.php:423
+#: usr/local/www/interfaces_bridge_edit.php:424
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/interfaces_bridge_edit.php:429
+msgid "Cache entry expire time"
+msgstr "Tempo de expiração de entrada do Cache"
+
+#: usr/local/www/interfaces_bridge_edit.php:418
+#: usr/local/www/interfaces_bridge_edit.php:427
+#: usr/local/www/interfaces_bridge_edit.php:428
+#: usr/local/www/interfaces_bridge_edit.php:429
+#: usr/local/www/interfaces_bridge_edit.php:433
+msgid "Set the timeout of address cache entries to this number of seconds. If seconds is zero, then address cache entries will not be expired. The default is 240 seconds."
+msgstr "Configure o tempo de expiração de entradas do Cache para esse número em segundos. Se for zero, então as entradas de endereço de cache não expirarão. O padrão é 240 segundos."
+
+#: usr/local/www/interfaces_bridge_edit.php:425
+#: usr/local/www/interfaces_bridge_edit.php:434
+#: usr/local/www/interfaces_bridge_edit.php:435
+#: usr/local/www/interfaces_bridge_edit.php:436
+#: usr/local/www/interfaces_bridge_edit.php:440
+msgid "Span port"
+msgstr "Porta Span"
+
+#: usr/local/www/interfaces_bridge_edit.php:439
+#: usr/local/www/interfaces_bridge_edit.php:448
+#: usr/local/www/interfaces_bridge_edit.php:449
+#: usr/local/www/interfaces_bridge_edit.php:450
+#: usr/local/www/interfaces_bridge_edit.php:454
+msgid "Add the interface named by interface as a span port on the bridge. Span ports transmit a copy of every frame received by the bridge. This is most useful for snooping a bridged network passively on another host connected to one of the span ports of the bridge."
+msgstr "Adicione a interface nomeada pela interface como uma porta span na ponte. Portas Span transmitem uma cópia de cada frame recebido pela ponte. Esse é muito útil para fazer snooping em uma rede com ponte de modo passivo em outro host conectado a uma das portas span da ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:448
+#: usr/local/www/interfaces_bridge_edit.php:457
+#: usr/local/www/interfaces_bridge_edit.php:458
+#: usr/local/www/interfaces_bridge_edit.php:459
+#: usr/local/www/interfaces_bridge_edit.php:463
+msgid "The span interface cannot be part of the bridge member interfaces."
+msgstr "A interface span não pode ser parte das interfaces membros da ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:453
+#: usr/local/www/interfaces_bridge_edit.php:462
+#: usr/local/www/interfaces_bridge_edit.php:463
+#: usr/local/www/interfaces_bridge_edit.php:464
+#: usr/local/www/interfaces_bridge_edit.php:468
+msgid "Edge ports"
+msgstr "Portas Edge"
+
+#: usr/local/www/interfaces_bridge_edit.php:467
+#: usr/local/www/interfaces_bridge_edit.php:476
+#: usr/local/www/interfaces_bridge_edit.php:477
+#: usr/local/www/interfaces_bridge_edit.php:478
+#: usr/local/www/interfaces_bridge_edit.php:482
+msgid "Set interface as an edge port. An edge port connects directly to end stations and cannot create bridging loops in the network; this allows it to transition straight to forwarding."
+msgstr "Configura interface como uma porta edge. Uma porta edge conecta-se diretamente com estações fim e não pode criar loops de pontes na rede; isso a permite transicionar diretamente para reenvio."
+
+#: usr/local/www/interfaces_bridge_edit.php:473
+#: usr/local/www/interfaces_bridge_edit.php:482
+#: usr/local/www/interfaces_bridge_edit.php:483
+#: usr/local/www/interfaces_bridge_edit.php:484
+#: usr/local/www/interfaces_bridge_edit.php:488
+msgid "Auto Edge ports"
+msgstr "Portas Edge Auto"
+
+#: usr/local/www/interfaces_bridge_edit.php:487
+#: usr/local/www/interfaces_bridge_edit.php:496
+#: usr/local/www/interfaces_bridge_edit.php:497
+#: usr/local/www/interfaces_bridge_edit.php:498
+#: usr/local/www/interfaces_bridge_edit.php:502
+msgid "Allow interface to automatically detect edge status. This is the default for all interfaces added to a bridge."
+msgstr "Permite uma interface detectar automaticamente o status de edge. Esse é o padrão para todas as interfaces adicionadas à ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:492
+#: usr/local/www/interfaces_bridge_edit.php:501
+#: usr/local/www/interfaces_bridge_edit.php:502
+#: usr/local/www/interfaces_bridge_edit.php:503
+#: usr/local/www/interfaces_bridge_edit.php:507
+msgid "This will disable the autoedge status of interfaces."
+msgstr "Isso irá desabilitar o status edge automático das interfaces."
+
+#: usr/local/www/interfaces_bridge_edit.php:496
+#: usr/local/www/interfaces_bridge_edit.php:505
+#: usr/local/www/interfaces_bridge_edit.php:506
+#: usr/local/www/interfaces_bridge_edit.php:507
+#: usr/local/www/interfaces_bridge_edit.php:511
+msgid "PTP ports"
+msgstr "Portas PTP"
+
+#: usr/local/www/interfaces_bridge_edit.php:510
+#: usr/local/www/interfaces_bridge_edit.php:519
+#: usr/local/www/interfaces_bridge_edit.php:520
+#: usr/local/www/interfaces_bridge_edit.php:521
+#: usr/local/www/interfaces_bridge_edit.php:525
+msgid "Set the interface as a point-to-point link. This is required for straight transitions to forwarding and should be enabled on a direct link to another RSTP-capable switch."
+msgstr "Configura a interface como um link ponto-a-ponto. Ele é requisitado para encaminhar transições para reenvio e deve ser habilitado em um link direto para outro switch RSTP."
+
+#: usr/local/www/interfaces_bridge_edit.php:516
+#: usr/local/www/interfaces_bridge_edit.php:525
+#: usr/local/www/interfaces_bridge_edit.php:526
+#: usr/local/www/interfaces_bridge_edit.php:527
+#: usr/local/www/interfaces_bridge_edit.php:531
+msgid "Auto PTP ports"
+msgstr "Portas PTP Auto"
+
+#: usr/local/www/interfaces_bridge_edit.php:530
+#: usr/local/www/interfaces_bridge_edit.php:539
+#: usr/local/www/interfaces_bridge_edit.php:540
+#: usr/local/www/interfaces_bridge_edit.php:541
+#: usr/local/www/interfaces_bridge_edit.php:545
+msgid "Automatically detect the point-to-point status on interface by checking the full duplex link status. This is the default for interfaces added to the bridge."
+msgstr "Detecta automaticamente o status ponto-a-ponto na interface ao checar o status full duples do link. Esse é o padrão para interfaces adicionadas à ponte."
+
+#: usr/local/www/interfaces_bridge_edit.php:536
+#: usr/local/www/interfaces_bridge_edit.php:545
+#: usr/local/www/interfaces_bridge_edit.php:546
+#: usr/local/www/interfaces_bridge_edit.php:547
+#: usr/local/www/interfaces_bridge_edit.php:551
+msgid "The interfaces selected here will be removed from default autoedge status."
+msgstr "As interfaces selecionadas aqui serão removidas do status edge automático padrão."
+
+#: usr/local/www/interfaces_bridge_edit.php:540
+#: usr/local/www/interfaces_bridge_edit.php:549
+#: usr/local/www/interfaces_bridge_edit.php:550
+#: usr/local/www/interfaces_bridge_edit.php:551
+#: usr/local/www/interfaces_bridge_edit.php:555
+msgid "Sticky ports"
+msgstr "Portas Sticky"
+
+#: usr/local/www/interfaces_bridge_edit.php:554
+#: usr/local/www/interfaces_bridge_edit.php:563
+#: usr/local/www/interfaces_bridge_edit.php:564
+#: usr/local/www/interfaces_bridge_edit.php:565
+#: usr/local/www/interfaces_bridge_edit.php:569
+msgid "Mark an interface as a \"sticky\" interface. Dynamically learned address entries are treated as static once entered into the cache. Sticky entries are never aged out of the cache or replaced, even if the address is seen on a different interface."
+msgstr "Marca uma interface como \"sticky\". Entradas de endereços assimilados dinamicamente são tratados como estáticos uma vez que entram no cache. Entradas Sticky nunca não descartadas do cache ou substituídas, mesmo que o endereço for encontrado em uma interface diferente."
+
+#: usr/local/www/interfaces_bridge_edit.php:561
+#: usr/local/www/interfaces_bridge_edit.php:570
+#: usr/local/www/interfaces_bridge_edit.php:571
+#: usr/local/www/interfaces_bridge_edit.php:572
+#: usr/local/www/interfaces_bridge_edit.php:576
+msgid "Private ports"
+msgstr "Portas privadas"
+
+#: usr/local/www/interfaces_bridge_edit.php:575
+#: usr/local/www/interfaces_bridge_edit.php:584
+#: usr/local/www/interfaces_bridge_edit.php:585
+#: usr/local/www/interfaces_bridge_edit.php:586
+#: usr/local/www/interfaces_bridge_edit.php:590
+msgid "Mark an interface as a \"private\" interface. A private interface does not forward any traffic to any other port that is also a private interface."
+msgstr "Marca uma interface como \"privada\". A interface privada não encaminha nenhum tráfego para nenhuma outra porta que também é uma interface privada."
+
+#: usr/local/www/interfaces_gif.php:64 usr/local/www/interfaces_gif.php:68
+msgid "This gif TUNNEL cannot be deleted because it is still being used as an interface."
+msgstr "Esse TÚNEL gif não pode ser apagado porque ele ainda é usado como uma interface."
+
+#: usr/local/www/interfaces_gif.php:107 usr/local/www/interfaces_gre.php:108
+#: usr/local/www/interfaces_gre.php:109 usr/local/www/interfaces_gif.php:108
+#: usr/local/www/interfaces_gre.php:113 usr/local/www/interfaces_gif.php:112
+msgid "Tunnel to..."
+msgstr "Túnel para..."
+
+#: usr/local/www/interfaces_gif.php:123 usr/local/www/interfaces_gif.php:124
+#: usr/local/www/interfaces_gif.php:128
+msgid "Do you really want to delete this gif tunnel?"
+msgstr "Você realmente quer apagar esse túnel gif?"
+
+#: usr/local/www/interfaces_gif.php:134 usr/local/www/interfaces_gif.php:135
+#: usr/local/www/interfaces_gif.php:139
+msgid "GIF tunnels are configured here."
+msgstr "Túneis GIF são configurados aqui."
+
+#: usr/local/www/interfaces_gif_edit.php:72
+#: usr/local/www/interfaces_gif_edit.php:75
+msgid "Parent interface,Local address, Remote tunnel address, Remote tunnel network, Local tunnel address"
+msgstr "Interface pai, endereço local, endereço de túnel remoto, rede de túnel remoto, endereço de túnel local"
+
+#: usr/local/www/interfaces_gif_edit.php:78
+#: usr/local/www/interfaces_gre_edit.php:80
+#: usr/local/www/interfaces_gif_edit.php:81
+msgid "The tunnel local and tunnel remote fields must have valid IP addresses."
+msgstr "Os campos túnel local e remoto devem conter endereços IP válidos."
+
+#: usr/local/www/interfaces_gif_edit.php:87
+#: usr/local/www/interfaces_gif_edit.php:95
+#, php-format
+msgid "A gif with the network %s is already defined."
+msgstr "Um gif com a rede %s já foi definido."
+
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gif_edit.php:137
+#: usr/local/www/interfaces_gif_edit.php:138
+#: usr/local/www/interfaces_gif_edit.php:146
+msgid "GIF configuration"
+msgstr "Configuração GIF"
+
+#: usr/local/www/interfaces_gif_edit.php:139
+#: usr/local/www/interfaces_gre_edit.php:74
+#: usr/local/www/interfaces_gre_edit.php:141
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan_edit.php:153
+#: usr/local/www/interfaces_lagg_edit.php:134
+#: usr/local/www/interfaces_qinq_edit.php:288
+#: usr/local/www/interfaces_wireless_edit.php:84
+#: usr/local/www/interfaces_wireless_edit.php:159
+#: usr/local/www/interfaces_gif_edit.php:140
+#: usr/local/www/interfaces_vlan_edit.php:154
+#: usr/local/www/interfaces_qinq_edit.php:289
+#: usr/local/www/interfaces_gif_edit.php:141
+#: usr/local/www/interfaces_lagg_edit.php:135
+#: usr/local/www/interfaces_gre_edit.php:142
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:161
+#: usr/local/www/interfaces_vlan_edit.php:157
+#: usr/local/www/interfaces_lagg_edit.php:148
+#: usr/local/www/interfaces_gif_edit.php:149
+#: usr/local/www/interfaces_qinq_edit.php:292
+msgid "Parent interface"
+msgstr "Interface pai"
+
+#: usr/local/www/interfaces_gif_edit.php:156
+#: usr/local/www/interfaces_gif_edit.php:157
+#: usr/local/www/interfaces_gif_edit.php:158
+#: usr/local/www/interfaces_gif_edit.php:169
+msgid "The interface here servers as the local address to be used for the gif tunnel."
+msgstr "A interface aqui serve como endereço local para ser usada pelo túnel gif."
+
+#: usr/local/www/interfaces_gif_edit.php:159
+#: usr/local/www/interfaces_gif_edit.php:160
+#: usr/local/www/interfaces_gif_edit.php:161
+#: usr/local/www/interfaces_gif_edit.php:172
+msgid "gif remote address"
+msgstr "endereço gif remoto"
+
+#: usr/local/www/interfaces_gif_edit.php:163
+#: usr/local/www/interfaces_gif_edit.php:164
+#: usr/local/www/interfaces_gif_edit.php:165
+#: usr/local/www/interfaces_gif_edit.php:176
+msgid "Peer address where encapsulated gif packets will be sent. "
+msgstr "Endereços peer onde pacotes gif encapsulados serão enviados."
+
+#: usr/local/www/interfaces_gif_edit.php:166
+#: usr/local/www/interfaces_gif_edit.php:167
+#: usr/local/www/interfaces_gif_edit.php:168
+#: usr/local/www/interfaces_gif_edit.php:179
+msgid "gif tunnel local address"
+msgstr "endereço local do túnel gif"
+
+#: usr/local/www/interfaces_gif_edit.php:170
+#: usr/local/www/interfaces_gif_edit.php:171
+#: usr/local/www/interfaces_gif_edit.php:172
+#: usr/local/www/interfaces_gif_edit.php:183
+msgid "Local gif tunnel endpoint"
+msgstr "Ponto final de túnel gif local"
+
+#: usr/local/www/interfaces_gif_edit.php:173
+#: usr/local/www/interfaces_gif_edit.php:174
+#: usr/local/www/interfaces_gif_edit.php:175
+#: usr/local/www/interfaces_gif_edit.php:186
+msgid "gif tunnel remote address "
+msgstr "endereço remoto de túnel gif "
+
+#: usr/local/www/interfaces_gif_edit.php:188
+#: usr/local/www/interfaces_gif_edit.php:189
+#: usr/local/www/interfaces_gif_edit.php:200
+msgid "Remote gif address endpoint. The subnet part is used for determining the network that is tunnelled."
+msgstr "Ponto final de endereço gif remoto. A parte da subrede é usada para determinar a rede que está sendo usada no túnel."
+
+#: usr/local/www/interfaces_gif_edit.php:191
+#: usr/local/www/interfaces_gif_edit.php:192
+#: usr/local/www/interfaces_gif_edit.php:203
+msgid "Route caching "
+msgstr "Cache de rota"
+
+#: usr/local/www/interfaces_gif_edit.php:195
+#: usr/local/www/interfaces_gif_edit.php:196
+#: usr/local/www/interfaces_gif_edit.php:207
+msgid "Specify if route caching can be enabled. Be careful with these settings on dynamic networks. "
+msgstr "Especifique se a rota de cache pode ser habilitada. Seja cuidadoso com essas configurações em redes dinâmicas."
+
+#: usr/local/www/interfaces_gif_edit.php:198
+#: usr/local/www/interfaces_gif_edit.php:199
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid "ECN friendly behaviour"
+msgstr "Comportamento amigável ECN"
+
+#: usr/local/www/interfaces_gif_edit.php:203
+#: usr/local/www/interfaces_gif_edit.php:204
+#: usr/local/www/interfaces_gif_edit.php:215
+msgid "Note that the ECN friendly behavior violates RFC2893. This should be used in mutual agreement with the peer."
+msgstr "Note que o comportamento amigável ECN viola a RFC2893. Isso deve ser usado em comum acordo com o peer."
+
+#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_gre.php:69
+msgid "This GRE tunnel cannot be deleted because it is still being used as an interface."
+msgstr "Esse túbel GRE não pode ser apagado porque ele ainda está sendo usado como uma interface."
+
+#: usr/local/www/interfaces_gre.php:124 usr/local/www/interfaces_gre.php:125
+#: usr/local/www/interfaces_gre.php:129
+msgid "Do you really want to delete this GRE tunnel?"
+msgstr "Você realmente quer apagar esse túnel GRE?"
+
+#: usr/local/www/interfaces_gre.php:133 usr/local/www/interfaces_gre.php:134
+#: usr/local/www/interfaces_gre.php:138
+msgid "Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) tunnels."
+msgstr "Aqui você pode configurar os túneis de Encapsulamento de Rota Genérico (GRE - RFC 2784)."
+
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Local address"
+msgstr "Endereço local"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Remote tunnel address"
+msgstr "Endereço de túnel remoto"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Remote tunnel network"
+msgstr "Rede de túnel remota"
+
+#: usr/local/www/interfaces_gre_edit.php:74
+msgid "Local tunnel address"
+msgstr "Endereço de túnel remoto"
+
+#: usr/local/www/interfaces_gre_edit.php:88
+#, php-format
+msgid "A GRE tunnel with the network %s is already defined."
+msgstr "Uma GRE com a rede %s já foi definida."
+
+#: usr/local/www/interfaces_gre_edit.php:138
+#: usr/local/www/interfaces_gre_edit.php:139
+msgid "GRE configuration"
+msgstr "Configuração GRE"
+
+#: usr/local/www/interfaces_gre_edit.php:158
+#: usr/local/www/interfaces_gre_edit.php:159
+msgid "The interface here serves as the local address to be used for the GRE tunnel."
+msgstr "A interface aqui serve como o endereço local para ser usado para o túnel GRE."
+
+#: usr/local/www/interfaces_gre_edit.php:161
+#: usr/local/www/interfaces_gre_edit.php:162
+msgid "GRE remote address"
+msgstr "Endereço remoto GRE"
+
+#: usr/local/www/interfaces_gre_edit.php:165
+#: usr/local/www/interfaces_gre_edit.php:166
+msgid "Peer address where encapsulated GRE packets will be sent "
+msgstr "Endereço peer onde os pacotes GRE encapsulados serão enviados "
+
+#: usr/local/www/interfaces_gre_edit.php:168
+#: usr/local/www/interfaces_gre_edit.php:169
+msgid "GRE tunnel local address "
+msgstr "Endereço local de túnel GRE"
+
+#: usr/local/www/interfaces_gre_edit.php:172
+#: usr/local/www/interfaces_gre_edit.php:173
+msgid "Local GRE tunnel endpoint"
+msgstr "Ponta fim de túnel GRE local"
+
+#: usr/local/www/interfaces_gre_edit.php:175
+#: usr/local/www/interfaces_gre_edit.php:176
+msgid "GRE tunnel remote address "
+msgstr "Endereço remoto de túnel GRE "
+
+#: usr/local/www/interfaces_gre_edit.php:190
+#: usr/local/www/interfaces_gre_edit.php:189
+msgid "Remote GRE address endpoint. The subnet part is used for the determining the network that is tunneled."
+msgstr "Ponta final de endereço GRE remoto. A parte da subrede é usada para determinar a rede que está sendo usada no túnel."
+
+#: usr/local/www/interfaces_gre_edit.php:193
+#: usr/local/www/interfaces_gre_edit.php:192
+msgid "Mobile tunnel"
+msgstr "Túnel móvel"
+
+#: usr/local/www/interfaces_gre_edit.php:197
+#: usr/local/www/interfaces_gre_edit.php:196
+msgid "Specify which encapsulation method the tunnel should use. "
+msgstr "Especificar qual método de encapsulamento o túnel deve usar."
+
+#: usr/local/www/interfaces_gre_edit.php:200
+#: usr/local/www/interfaces_gre_edit.php:199
+msgid "Route search type"
+msgstr "Tipo de busca de rota"
+
+#: usr/local/www/interfaces_gre_edit.php:205
+#: usr/local/www/interfaces_gre_edit.php:204
+msgid "For correct operation, the GRE device needs a route to the destination that is less specific than the one over the tunnel. (Basically, there needs to be a route to the decapsulating host that does not run over the tunnel, as this would be a loop."
+msgstr "Para operação correta, o dispositivo GRE necessita de uma rota para o destino que é menos específica que aquela sobre o túnel. (Basicamente, é necessária uma rota para o host desencapsulado que não roda sobre o túnel, pois isso seria um loop."
+
+#: usr/local/www/interfaces_gre_edit.php:212
+#: usr/local/www/interfaces_gre_edit.php:211
+msgid "WCCP version"
+msgstr "Versão do WCCP"
+
+#: usr/local/www/interfaces_gre_edit.php:216
+#: usr/local/www/interfaces_gre_edit.php:215
+msgid "Specify which WCCP encapsulation(version 1 or 2) method the tunnel should use"
+msgstr "Especifique qual método de encapsulamento WCCP (versão 1 ou 2) o túnel deve usar"
+
+#: usr/local/www/interfaces_groups.php:63
+#: usr/local/www/interfaces_groups_edit.php:44
+#: usr/local/www/system_routes.php:117
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/system_authservers.php:422
+#: usr/local/www/system_gateway_groups.php:110
+#: usr/local/www/system_gateways.php:143
+#: usr/local/www/system_groupmanager.php:241
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/system_usermanager.php:441
+#: usr/local/www/system_usermanager.php:790
+#: usr/local/www/system_usermanager_addprivs.php:168
+#: usr/local/www/system_usermanager_settings.php:114
+#: usr/local/www/system_usermanager.php:439
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/system_groupmanager_addprivs.php:167
+#: usr/local/www/system_usermanager.php:789
+#: usr/local/www/system_gateway_groups.php:111
+#: usr/local/www/system_authservers.php:427
+#: usr/local/www/system_routes.php:121
+#: usr/local/www/system_authservers.php:434
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_routes.php:136
+#: usr/local/www/system_groupmanager.php:244
+#: usr/local/www/system_authservers.php:445
+msgid "Groups"
+msgstr "Grupos"
+
+#: usr/local/www/interfaces_groups.php:127
+#: usr/local/www/system_groupmanager.php:443
+#: usr/local/www/system_groupmanager.php:446
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/system_groupmanager.php:464
+#: usr/local/www/system_groupmanager.php:467
+msgid "edit group"
+msgstr "editar grupo"
+
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/interfaces_groups.php:129
+msgid "Do you really want to delete this group? All elements that still use it will become invalid (e.g. filter rules)!"
+msgstr "Você realmente uer apagar esse grupo? Todos os elementos que ainda o usam serão invalidados (e.g. regras de filtro)!"
+
+#: usr/local/www/interfaces_groups.php:128
+#: usr/local/www/interfaces_groups.php:129
+msgid "delete ifgroupentry"
+msgstr "apagar ifgroupentry"
+
+#: usr/local/www/interfaces_groups.php:140
+#: usr/local/www/interfaces_groups.php:141
+msgid "add a new group"
+msgstr "adicionar novo grupo"
+
+#: usr/local/www/interfaces_groups.php:148
+#: usr/local/www/interfaces_groups.php:149
+msgid "Interface Groups allow you to create rules that apply to multiple interfaces without duplicating the rules. If you remove members from an interface group, the group rules no longer apply to that interface."
+msgstr "Grupos de Interface permite que você crie regras que se aplicam a múltiplas interfaces sem duplicar as regras. Se você remover membros de um grupo de interface, as regras do grupo não mais serão aplicadas àquela interface."
+
+#: usr/local/www/interfaces_groups_edit.php:71
+#: usr/local/www/interfaces_groups_edit.php:72
+msgid "Group name already exists!"
+msgstr "Nome do grupo já existe!"
+
+#: usr/local/www/interfaces_groups_edit.php:74
+#: usr/local/www/interfaces_groups_edit.php:75
+msgid "Only letters A-Z are allowed as the group name."
+msgstr "Somente as letras de A-Z são permitidas como nome do grupo."
+
+#: usr/local/www/interfaces_groups_edit.php:248
+#: usr/local/www/interfaces_groups_edit.php:249
+msgid "Interface Groups Edit"
+msgstr "Edição de Grupos de Interface"
+
+#: usr/local/www/interfaces_groups_edit.php:251
+#: usr/local/www/status_gateway_groups.php:74
+#: usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_gateway_groups_edit.php:158
+#: usr/local/www/system_gateway_groups_edit.php:161
+#: usr/local/www/system_groupmanager.php:117
+#: usr/local/www/system_gateway_groups_edit.php:169
+#: usr/local/www/system_gateway_groups_edit.php:172
+#: usr/local/www/system_gateway_groups_edit.php:228
+#: usr/local/www/system_gateway_groups_edit.php:231
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/interfaces_groups_edit.php:252
+#: usr/local/www/status_gateway_groups.php:75
+#: usr/local/www/system_gateway_groups_edit.php:232
+#: usr/local/www/system_gateway_groups_edit.php:235
+#: usr/local/www/system_gateway_groups.php:130
+msgid "Group Name"
+msgstr "Nome do Grupo"
+
+#: usr/local/www/interfaces_groups_edit.php:255
+#: usr/local/www/interfaces_groups_edit.php:256
+msgid "No numbers or spaces are allowed. Only characters in a-zA-Z"
+msgstr "Não são permitidos números e espaços. Somente caracteres de a-z, A-Z"
+
+#: usr/local/www/interfaces_groups_edit.php:269
+#: usr/local/www/interfaces_qinq_edit.php:347
+#: usr/local/www/interfaces_qinq_edit.php:348
+#: usr/local/www/interfaces_groups_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:351
+msgid "Member (s)"
+msgstr "Membro(s)"
+
+#: usr/local/www/firewall_aliases.php:103
+#: usr/local/www/firewall_aliases.php:106
+#: usr/local/www/firewall_aliases.php:107
+#, php-format
+msgid "Cannot delete alias. Currently in use by %s"
+msgstr "Não é possível excluir este alias. Atualmente em uso por %s"
+
+#: usr/local/www/firewall_aliases.php:160
+#: usr/local/www/firewall_aliases.php:163
+#: usr/local/www/firewall_aliases.php:167
+#: usr/local/www/firewall_aliases.php:166
+msgid "The alias list has been changed."
+msgstr "A lista de alias foi alterada."
+
+#: usr/local/www/firewall_aliases.php:166
+#: usr/local/www/services_igmpproxy.php:97
+#: usr/local/www/firewall_aliases.php:169
+#: usr/local/www/firewall_aliases.php:189
+msgid "Values"
+msgstr "Valores"
+
+#: usr/local/www/firewall_aliases.php:172
+#: usr/local/www/firewall_aliases.php:218
+#: usr/local/www/firewall_aliases.php:175
+#: usr/local/www/firewall_aliases.php:221
+msgid "add a new alias"
+msgstr "adicionar novo alias"
+
+#: usr/local/www/firewall_aliases.php:204
+#: usr/local/www/firewall_schedule.php:220
+#: usr/local/www/firewall_aliases.php:207
+msgid "edit alias"
+msgstr "editar alias"
+
+#: usr/local/www/firewall_aliases.php:205
+#: usr/local/www/firewall_aliases.php:208
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+#: usr/local/www/firewall_aliases.php:258
+msgid "Do you really want to delete this alias? All elements that still use it will become invalid (e.g. filter rules)!"
+msgstr "Você realmente deseja excluir este alias? Todos os elementos que continuam a utiliza-lo irão se tornar inválidos. (ex. regras de filtro)!"
+
+#: usr/local/www/firewall_aliases.php:205
+#: usr/local/www/firewall_schedule.php:221
+#: usr/local/www/firewall_aliases.php:208
+msgid "delete alias"
+msgstr "excluir alias"
+
+#: usr/local/www/firewall_aliases.php:221
+#: usr/local/www/firewall_aliases.php:224
+#: usr/local/www/firewall_aliases.php:275
+#: usr/local/www/firewall_aliases.php:277
+#: usr/local/www/firewall_aliases.php:278
+msgid "Bulk import aliases from list"
+msgstr "Importação em massa de alias da lista"
+
+#: usr/local/www/firewall_aliases.php:229
+#: usr/local/www/firewall_aliases.php:232
+#: usr/local/www/firewall_aliases.php:284
+#: usr/local/www/firewall_aliases.php:287
+#: usr/local/www/firewall_aliases.php:288
+msgid "Aliases act as placeholders for real hosts, networks or ports. They can be used to minimize the number of changes that have to be made if a host, network or port changes. You can enter the name of an alias instead of the host, network or port in all fields that have a red background. The alias will be resolved according to the list above. If an alias cannot be resolved (e.g. because you deleted it), the corresponding element (e.g. filter/NAT/shaper rule) will be considered invalid and skipped."
+msgstr "Aliases atuam como espaços reservados para hosts, redes e portas reais. Eles podem ser usados para minimizar o número de alterações que devem ser feitas se um host, rede ou porta mudar. Você pode inserir o nome de um alias ao invés do host rede ou porta em todos os campos que possuem fundo vermelho. O alias irá ser resolvido de acordo com a lista acima. Se um alias não pode ser resolvido (ex. porque você o excluiu), o elemento correspondente (ex. regra de filtro/NAT/shaper) será considerada inválida e ignorada."
+
+#: usr/local/www/firewall_aliases_edit.php:105
+#: usr/local/www/firewall_aliases_edit.php:107
+#, php-format
+msgid "Sorry, an interface is already named %s."
+msgstr "Desculpe, uma interface já está nomeada %s."
+
+#: usr/local/www/firewall_aliases_edit.php:140
+#: usr/local/www/firewall_aliases_edit.php:142
+#: usr/local/www/firewall_aliases_edit.php:134
+#: usr/local/www/firewall_aliases_edit.php:136
+msgid "Reserved word used for alias name."
+msgstr "Palavra reservada usada para nome de alias."
+
+#: usr/local/www/firewall_aliases_edit.php:145
+#: usr/local/www/firewall_aliases_edit.php:139
+msgid "The alias name must be less than 32 characters long, may not consist of only numbers, and may only contain the following characters"
+msgstr "O nome de alias deve conter menos de 32 caracteres e deve consistir apenas de caracteres"
+
+#: usr/local/www/firewall_aliases_edit.php:187
+#: usr/local/www/firewall_aliases_edit.php:242
+#: usr/local/www/firewall_aliases_edit.php:188
+#: usr/local/www/firewall_aliases_edit.php:244
+#: usr/local/www/firewall_aliases_edit.php:182
+msgid "You must provide a valid URL."
+msgstr "Você deve fornecer uma URL válida."
+
+#: usr/local/www/firewall_aliases_edit.php:190
+#: usr/local/www/firewall_aliases_edit.php:191
+#: usr/local/www/firewall_aliases_edit.php:185
+msgid "Unable to fetch usable data."
+msgstr "Não foi possível obter dados úteis."
+
+#: usr/local/www/firewall_aliases_edit.php:235
+#: usr/local/www/firewall_aliases_edit.php:237
+msgid "You must provide a valid URL. Could not fetch usable data."
+msgstr "Você deve fornecer uma URL válida. Não foi possível obter dados úteis."
+
+#: usr/local/www/firewall_aliases_edit.php:261
+#: usr/local/www/firewall_aliases_edit.php:264
+#: usr/local/www/firewall_aliases_edit.php:278
+#: usr/local/www/firewall_aliases_edit.php:277
+msgid "is not a valid port or alias."
+msgstr "não é uma porta válida ou um alias."
+
+#: usr/local/www/firewall_aliases_edit.php:266
+#: usr/local/www/firewall_aliases_edit.php:269
+#: usr/local/www/firewall_aliases_edit.php:283
+#: usr/local/www/firewall_aliases_edit.php:282
+#, php-format
+msgid "%1$s is not a valid %2$s alias."
+msgstr "%1$s não é um válido %2$s alias."
+
+#: usr/local/www/firewall_aliases_edit.php:281
+#: usr/local/www/firewall_aliases_edit.php:284
+#: usr/local/www/firewall_aliases_edit.php:191
+#: usr/local/www/firewall_aliases_edit.php:221
+#: usr/local/www/firewall_aliases_edit.php:303
+#: usr/local/www/firewall_aliases_edit.php:220
+#: usr/local/www/firewall_aliases_edit.php:302
+#, php-format
+msgid "Entry added %s"
+msgstr "Entrada adicionada %s"
+
+#: usr/local/www/firewall_aliases_edit.php:285
+#: usr/local/www/firewall_aliases_edit.php:288
+#: usr/local/www/firewall_aliases_edit.php:307
+#: usr/local/www/firewall_aliases_edit.php:306
+#, php-format
+msgid "The alias(es): %s cannot be nested because they are not of the same type."
+msgstr "O(s) alias(es): %s não podem ser aninhados, porque não são do mesmo tipo."
+
+#: usr/local/www/firewall_aliases_edit.php:453
+#: usr/local/www/firewall_aliases_edit.php:605
+#: usr/local/www/firewall_aliases_edit.php:456
+#: usr/local/www/firewall_aliases_edit.php:610
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:613
+#: usr/local/www/firewall_aliases_edit.php:480
+#: usr/local/www/firewall_aliases_edit.php:644
+#: usr/local/www/firewall_aliases_edit.php:479
+#: usr/local/www/firewall_aliases_edit.php:643
+msgid "Network(s)"
+msgstr "Rede(s)"
+
+#: usr/local/www/firewall_aliases_edit.php:454
+#: usr/local/www/services_igmpproxy_edit.php:224
+#: usr/local/www/services_unbound_acls.php:237
+#: usr/local/www/services_igmpproxy_edit.php:226
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_aliases_edit.php:481
+#: usr/local/www/firewall_aliases_edit.php:480
+msgid "CIDR"
+msgstr "CIDR"
+
+#: usr/local/www/firewall_aliases_edit.php:456
+#: usr/local/www/firewall_aliases_edit.php:604
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:459
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/firewall_aliases_edit.php:619
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:622
+#: usr/local/www/firewall_aliases_edit.php:483
+#: usr/local/www/firewall_aliases_edit.php:643
+#: usr/local/www/firewall_aliases_edit.php:653
+#: usr/local/www/firewall_aliases_edit.php:482
+#: usr/local/www/firewall_aliases_edit.php:642
+#: usr/local/www/firewall_aliases_edit.php:652
+msgid "Host(s)"
+msgstr "Host(s)"
+
+#: usr/local/www/firewall_aliases_edit.php:457
+#: usr/local/www/diag_states_summary.php:150
+#: usr/local/www/services_dnsmasq.php:245
+#: usr/local/www/services_dnsmasq.php:312 usr/local/www/vpn_pppoe_edit.php:538
+#: usr/local/www/services_dnsmasq.php:333
+#: usr/local/www/services_unbound.php:281
+#: usr/local/www/services_unbound.php:348
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/diag_states_summary.php:139
+#: usr/local/www/vpn_pppoe_edit.php:539 usr/local/www/services_dnsmasq.php:246
+#: usr/local/www/services_dnsmasq.php:334
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_aliases.php:176
+#: usr/local/www/diag_states_summary.php:141
+#: usr/local/www/vpn_pppoe_edit.php:542 usr/local/www/services_dnsmasq.php:271
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/firewall_aliases.php:174
+#: usr/local/www/firewall_aliases_edit.php:484
+#: usr/local/www/services_dnsmasq.php:284
+#: usr/local/www/services_dnsmasq.php:372
+#: usr/local/www/services_dnsmasq.php:348
+#: usr/local/www/services_dnsmasq.php:436
+#: usr/local/www/firewall_aliases_edit.php:483
+msgid "IP"
+msgstr "IP"
+
+#: usr/local/www/firewall_aliases_edit.php:458
+#: usr/local/www/firewall_aliases_edit.php:606
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:611
+#: usr/local/www/firewall_aliases_edit.php:463
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:485
+#: usr/local/www/firewall_aliases_edit.php:645
+#: usr/local/www/firewall_aliases_edit.php:484
+#: usr/local/www/firewall_aliases_edit.php:644
+msgid "Port(s)"
+msgstr "Porta(s)"
+
+#: usr/local/www/firewall_aliases_edit.php:460
+#: usr/local/www/firewall_aliases_edit.php:608
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/firewall_aliases_edit.php:463
+#: usr/local/www/firewall_aliases_edit.php:613
+#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828
+#: usr/local/www/firewall_aliases_edit.php:465
+#: usr/local/www/firewall_aliases_edit.php:616
+#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759
+#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dhcp.php:1075
+#: usr/local/www/firewall_aliases_edit.php:487
+#: usr/local/www/firewall_aliases_edit.php:647
+#: usr/local/www/services_dhcp.php:1087
+#: usr/local/www/firewall_aliases_edit.php:486
+#: usr/local/www/firewall_aliases_edit.php:646
+msgid "URL"
+msgstr "URL"
+
+#: usr/local/www/firewall_aliases_edit.php:461
+#: usr/local/www/firewall_aliases_edit.php:609
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_aliases_edit.php:614
+#: usr/local/www/firewall_aliases_edit.php:466
+#: usr/local/www/firewall_aliases_edit.php:617
+#: usr/local/www/firewall_aliases_edit.php:488
+#: usr/local/www/firewall_aliases_edit.php:648
+#: usr/local/www/firewall_aliases_edit.php:487
+#: usr/local/www/firewall_aliases_edit.php:647
+msgid "URL Table"
+msgstr "Tabela URL"
+
+#: usr/local/www/firewall_aliases_edit.php:462
+#: usr/local/www/firewall_aliases_edit.php:465
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:489
+#: usr/local/www/firewall_aliases_edit.php:488
+msgid "Update Freq."
+msgstr "Atualizar Freq."
+
+#: usr/local/www/firewall_aliases_edit.php:464
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:469
+#: usr/local/www/firewall_aliases_edit.php:491
+#: usr/local/www/firewall_aliases_edit.php:490
+msgid "Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range."
+msgstr "Redes são especificadas no formato CIDR. Selecione a máscara CIDR que pertence a cada entrada. /32 especifica um único host IPv4, /128 especifica um único host IPv6, /24 especifica 255.255.255.0, /64 especifica uma rede IPv6 normal, etc. Hostnames (FQDNs) também podem ser especificados, usando uma máscara /32 para IPv4 e /128 para IPv6. Você também pode inserir um intervalo de IPs como 192.168.1.1-192.168.1.254 e uma lista de redes CIDR será liberada para preencher o intervalo."
+
+#: usr/local/www/firewall_aliases_edit.php:465
+msgid "Enter as many hosts as you would like. Hosts must be specified by their IP address."
+msgstr "Insira quantos hosts você desejar. Hosts precisam ser especificados pelo seu endereço IP."
+
+#: usr/local/www/firewall_aliases_edit.php:466
+#: usr/local/www/firewall_aliases_edit.php:469
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:493
+msgid "Enter as many ports as you wish. Port ranges can be expressed by seperating with a colon."
+msgstr "Insira quantas portas você desejar. Intervalos de portas podem ser especificados utilizando dois pontos."
+
+#: usr/local/www/firewall_aliases_edit.php:467
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/firewall_aliases_edit.php:472
+#: usr/local/www/firewall_aliases_edit.php:494
+#: usr/local/www/firewall_aliases_edit.php:493
+#, php-format
+msgid "Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)."
+msgstr "Insira quantas URLs desejar. Depois de salvar %s irá fazer o download da URL e importar os itens para o alias. Use apenas com pequenos conjuntos do IPs (menos de 3000)."
+
+#: usr/local/www/firewall_aliases_edit.php:468
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:473
+#: usr/local/www/firewall_aliases_edit.php:495
+#: usr/local/www/firewall_aliases_edit.php:494
+#, php-format
+msgid "Enter a single URL containing a large number of IPs and/or Subnets. After saving %s will download the URL and create a table file containing these addresses. This will work with large numbers of addresses (30,000+) or small numbers."
+msgstr "Insira uma única URL contendo um grande número de IPs e/ou subredes. Depois de salvar %s vai baixar a URL e criar uma tabela de arquivos contendo estes endereços. Isto irá trabalhar com grandes números de endereços (30.000+) ou pequenos números."
+
+#: usr/local/www/firewall_aliases_edit.php:471
+#: usr/local/www/firewall_aliases_edit.php:607
+#: usr/local/www/firewall_aliases_edit.php:474
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:476
+#: usr/local/www/firewall_aliases_edit.php:615
+#: usr/local/www/firewall_aliases_edit.php:498
+#: usr/local/www/firewall_aliases_edit.php:646
+#: usr/local/www/firewall_aliases_edit.php:497
+#: usr/local/www/firewall_aliases_edit.php:645
+msgid "OpenVPN Users"
+msgstr "Usuários OpenVPN"
+
+#: usr/local/www/firewall_aliases_edit.php:472
+#: usr/local/www/firewall_aliases_edit.php:475
+#: usr/local/www/firewall_aliases_edit.php:477
+#: usr/local/www/firewall_aliases_edit.php:499
+#: usr/local/www/firewall_aliases_edit.php:498
+msgid "Enter as many usernames as you wish."
+msgstr "Insira quantos usuários você desejar."
+
+#: usr/local/www/firewall_aliases_edit.php:573
+#: usr/local/www/firewall_aliases_edit.php:578
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/firewall_aliases_edit.php:612
+#: usr/local/www/firewall_aliases_edit.php:611
+msgid "Alias Edit"
+msgstr "Editar Alias"
+
+#: usr/local/www/firewall_aliases_edit.php:620
+#: usr/local/www/firewall_aliases_edit.php:625
+#: usr/local/www/firewall_aliases_edit.php:628
+#: usr/local/www/firewall_aliases_edit.php:659
+#: usr/local/www/firewall_aliases_edit.php:658
+msgid "Item information"
+msgstr "Informações do Item"
+
+#: usr/local/www/firewall_aliases_edit.php:665
+#: usr/local/www/services_dnsmasq_edit.php:260
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/firewall_aliases_edit.php:670
+#: usr/local/www/services_dnsmasq_edit.php:261
+#: usr/local/www/services_router_advertisements.php:343
+#: usr/local/www/firewall_aliases_edit.php:673
+#: usr/local/www/system_certmanager.php:807
+#: usr/local/www/services_router_advertisements.php:338
+#: usr/local/www/system_certmanager.php:808
+#: usr/local/www/firewall_aliases_edit.php:704
+#: usr/local/www/firewall_aliases_edit.php:703
+msgid "remove this entry"
+msgstr "remova essa entrada"
+
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/diag_backup.php:111 usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_nat.php:160 usr/local/www/fbegin.inc:111
+#: usr/local/www/firewall_nat_npt.php:78
+#: usr/local/www/firewall_nat_npt_edit.php:140 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/diag_backup.php:188 usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/fbegin.inc:137 usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:165 usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_nat_edit.php:439 usr/local/www/fbegin.inc:129
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_virtual_ip.php:299 usr/local/www/diag_backup.php:189
+msgid "NAT"
+msgstr "NAT"
+
+#: usr/local/www/firewall_nat_1to1.php:78
+#: usr/local/www/firewall_nat_1to1.php:93
+#: usr/local/www/firewall_nat_1to1_edit.php:216
+#: usr/local/www/firewall_nat_out.php:300 usr/local/www/firewall_nat.php:182
+#: usr/local/www/firewall_nat_npt.php:93
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_1to1_edit.php:223
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_1to1_edit.php:221
+#: usr/local/www/firewall_nat.php:187 usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat.php:190 usr/local/www/firewall_nat_out.php:317
+msgid "1:1"
+msgstr "1:1"
+
+#: usr/local/www/firewall_nat_1to1.php:87 usr/local/www/firewall_nat.php:175
+#: usr/local/www/firewall_nat_npt.php:87 usr/local/www/firewall_nat.php:180
+#: usr/local/www/firewall_nat.php:183
+msgid "The NAT configuration has been changed"
+msgstr "A configuração NAT foi modificada"
+
+#: usr/local/www/firewall_nat_1to1.php:92
+#: usr/local/www/firewall_nat_edit.php:438
+#: usr/local/www/firewall_nat_out.php:299 usr/local/www/firewall_nat.php:160
+#: usr/local/www/firewall_nat.php:181 usr/local/www/firewall_nat_npt.php:92
+#: usr/local/www/firewall_nat_out.php:309
+#: usr/local/www/firewall_nat_edit.php:445
+#: usr/local/www/firewall_nat_out.php:310 usr/local/www/firewall_nat.php:165
+#: usr/local/www/firewall_nat.php:186 usr/local/www/firewall_nat_edit.php:444
+#: usr/local/www/firewall_nat_edit.php:439
+#: usr/local/www/firewall_nat_edit.php:451
+#: usr/local/www/firewall_nat_out.php:317
+#: usr/local/www/firewall_nat_edit.php:452 usr/local/www/firewall_nat.php:166
+#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:316
+msgid "Port Forward"
+msgstr "Encaminhamento de Portas"
+
+#: usr/local/www/firewall_nat_1to1.php:94
+#: usr/local/www/firewall_nat_out.php:283
+#: usr/local/www/firewall_nat_out.php:301
+#: usr/local/www/firewall_nat_out_edit.php:300
+#: usr/local/www/firewall_nat.php:183 usr/local/www/firewall_nat_npt.php:94
+#: usr/local/www/firewall_nat_out.php:293
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_out_edit.php:313
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_out.php:312 usr/local/www/firewall_nat.php:188
+#: usr/local/www/firewall_nat_out_edit.php:317
+#: usr/local/www/firewall_nat_out.php:319
+#: usr/local/www/firewall_nat_out_edit.php:329
+#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_out.php:318
+msgid "Outbound"
+msgstr "Saída"
+
+#: usr/local/www/firewall_nat_1to1.php:95
+#: usr/local/www/firewall_nat_out.php:302 usr/local/www/firewall_nat.php:184
+#: usr/local/www/firewall_nat_npt.php:78 usr/local/www/firewall_nat_npt.php:95
+#: usr/local/www/firewall_nat_npt_edit.php:140
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_npt_edit.php:145
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_npt_edit.php:144
+#: usr/local/www/firewall_nat.php:189 usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_out.php:319
+msgid "NPt"
+msgstr "NPt"
+
+#: usr/local/www/firewall_nat_1to1.php:105
+msgid "External IP"
+msgstr "IP externo"
+
+#: usr/local/www/firewall_nat_1to1.php:106
+#: usr/local/www/firewall_nat_1to1_edit.php:328
+#: usr/local/www/status_upnp.php:87
+#: usr/local/www/firewall_nat_1to1_edit.php:335
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/status_upnp.php:88
+#: usr/local/www/firewall_nat_1to1_edit.php:334
+msgid "Internal IP"
+msgstr "IP interno"
+
+#: usr/local/www/firewall_nat_1to1.php:107
+msgid "Destination IP"
+msgstr "IP de Destino"
+
+#: usr/local/www/firewall_nat_1to1.php:113
+#: usr/local/www/firewall_nat_1to1.php:172
+#: usr/local/www/firewall_nat_npt.php:112
+#: usr/local/www/firewall_nat_npt.php:170
+msgid "add rule"
+msgstr "adicionar regra"
+
+#: usr/local/www/firewall_nat_1to1.php:159
+#: usr/local/www/firewall_rules.php:436 usr/local/www/firewall_rules.php:465
+#: usr/local/www/firewall_rules.php:493 usr/local/www/firewall_rules.php:776
+#: usr/local/www/firewall_nat.php:310 usr/local/www/firewall_nat_npt.php:157
+#: usr/local/www/firewall_rules.php:430 usr/local/www/firewall_rules.php:459
+#: usr/local/www/firewall_rules.php:487 usr/local/www/firewall_rules.php:773
+#: usr/local/www/firewall_nat.php:323 usr/local/www/firewall_rules.php:423
+#: usr/local/www/firewall_rules.php:452 usr/local/www/firewall_rules.php:480
+#: usr/local/www/firewall_rules.php:766 usr/local/www/firewall_rules.php:422
+#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479
+#: usr/local/www/firewall_nat.php:326
+msgid "edit rule"
+msgstr "editar regra"
+
+#: usr/local/www/firewall_nat_1to1.php:160 usr/local/www/services_dhcp.php:923
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/services_dhcpv6.php:836 usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcpv6.php:931 usr/local/www/services_dhcp.php:1165
+#: usr/local/www/services_dhcpv6.php:862 usr/local/www/services_dhcp.php:1189
+#: usr/local/www/services_dhcpv6.php:883 usr/local/www/services_dhcp.php:1209
+#: usr/local/www/services_dhcp.php:1221
+msgid "Do you really want to delete this mapping?"
+msgstr "Você realmente deseja remover este mapeamento?"
+
+#: usr/local/www/firewall_nat_1to1.php:160
+#: usr/local/www/firewall_rules.php:779 usr/local/www/firewall_nat.php:313
+#: usr/local/www/firewall_nat_npt.php:158
+#: usr/local/www/firewall_nat_out.php:450 usr/local/www/firewall_rules.php:776
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326
+#: usr/local/www/firewall_rules.php:769 usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454
+msgid "delete rule"
+msgstr "excluir regra"
+
+#: usr/local/www/firewall_nat_1to1.php:180
+msgid "Depending on the way your WAN connection is setup, you may also need a"
+msgstr "Dependendo da forma como sua conexão WAN foi configurada, você pode precisar de um"
+
+#: usr/local/www/firewall_nat_1to1.php:180
+msgid "Virtual IP."
+msgstr "IP virtual."
+
+#: usr/local/www/firewall_nat_1to1.php:181
+msgid "If you add a 1:1 NAT entry for any of the interface IPs on this system, it will make this system inaccessible on that IP address. i.e. if you use your WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) using the WAN IP address will no longer function."
+msgstr "Se você adicionar uma entrada NAT 1:1 para qualquer uma das interfaces IP no sistema, isto irá tornar o sistema inacessível naquele endereço IP. Ex.: se você usar seu endereço IP WAN, qualquer serviço neste sistema (IPsec, servidor OpenVPN, etc) utilizando o endereço IP WAN deixará de funcionar."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:109
+#: usr/local/www/firewall_nat_out_edit.php:125
+#: usr/local/www/firewall_nat_out_edit.php:129
+#: usr/local/www/firewall_nat_out_edit.php:135
+#, php-format
+msgid "Invalid characters detected (%s). Please remove invalid characters and save again."
+msgstr "Caracteres inválidos detectados (%s). Por favor, remova os caracteres inválidos e salve novamente."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:114
+msgid "External subnet"
+msgstr "Sub-rede externa"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+#: usr/local/www/firewall_nat_edit.php:190
+#: usr/local/www/firewall_nat_edit.php:195
+#: usr/local/www/firewall_nat_edit.php:200
+msgid "Source address"
+msgstr "Endereço de origem"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:121
+#: usr/local/www/firewall_nat_edit.php:194
+#: usr/local/www/firewall_nat_edit.php:199
+#: usr/local/www/firewall_nat_edit.php:204
+msgid "Destination address"
+msgstr "Endereço de destino"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:145
+#: usr/local/www/firewall_nat_1to1_edit.php:152
+msgid "A valid external subnet must be specified."
+msgstr "Uma sub-rede externa válida deve ser especificada."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:149
+#: usr/local/www/firewall_nat_edit.php:232
+#: usr/local/www/firewall_rules_edit.php:356
+#: usr/local/www/firewall_rules_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:156
+#: usr/local/www/firewall_rules_edit.php:385
+#: usr/local/www/firewall_rules_edit.php:389
+#: usr/local/www/firewall_nat_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:384
+#: usr/local/www/firewall_rules_edit.php:388
+#: usr/local/www/firewall_rules_edit.php:387
+#: usr/local/www/firewall_rules_edit.php:391
+#: usr/local/www/firewall_nat_edit.php:244
+#: usr/local/www/firewall_rules_edit.php:393
+#: usr/local/www/firewall_rules_edit.php:397
+#: usr/local/www/firewall_nat_edit.php:249
+msgid "You must specify single host or alias for alias entries."
+msgstr "Você deve especificar um único host ou alias para entradas de alias."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:154
+#: usr/local/www/firewall_nat_1to1_edit.php:161
+#, php-format
+msgid "%s is not a valid internal IP address."
+msgstr "%s não é um endereço IP válido."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:157
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+msgid "A valid internal bit count must be specified."
+msgstr "Uma sub-rede interna válida deve ser especificada."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+#: usr/local/www/firewall_nat_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:373
+#: usr/local/www/firewall_nat_1to1_edit.php:171
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:252
+#: usr/local/www/firewall_rules_edit.php:401
+#: usr/local/www/firewall_rules_edit.php:404
+#: usr/local/www/firewall_nat_edit.php:257
+#: usr/local/www/firewall_rules_edit.php:410
+#: usr/local/www/firewall_nat_edit.php:262
+#, php-format
+msgid "%s is not a valid destination IP address or alias."
+msgstr "%s não é um endereço IP de destino válido."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:167
+#: usr/local/www/firewall_nat_edit.php:248
+#: usr/local/www/firewall_nat_out_edit.php:159
+#: usr/local/www/firewall_rules_edit.php:376
+#: usr/local/www/firewall_nat_1to1_edit.php:174
+#: usr/local/www/firewall_nat_out_edit.php:172
+#: usr/local/www/firewall_rules_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:255
+#: usr/local/www/firewall_rules_edit.php:404
+#: usr/local/www/firewall_rules_edit.php:407
+#: usr/local/www/firewall_nat_edit.php:260
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:265
+#: usr/local/www/firewall_nat_out_edit.php:182
+msgid "A valid destination bit count must be specified."
+msgstr "Um bit count de destino válido deve ser especificado."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:270
+#: usr/local/www/firewall_nat_1to1_edit.php:277
+#: usr/local/www/firewall_nat_1to1_edit.php:275
+msgid "Edit NAT 1:1 entry"
+msgstr "Editar entrada NAT 1:1"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:273
+#: usr/local/www/firewall_nat_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:679 usr/local/www/interfaces.php:1828
+#: usr/local/www/interfaces_ppps_edit.php:603
+#: usr/local/www/system_usermanager.php:469
+#: usr/local/www/system_usermanager.php:789
+#: usr/local/www/vpn_ipsec_phase1.php:512
+#: usr/local/www/vpn_ipsec_phase2.php:393
+#: usr/local/www/vpn_openvpn_client.php:386
+#: usr/local/www/vpn_openvpn_client.php:860
+#: usr/local/www/vpn_openvpn_csc.php:314 usr/local/www/vpn_openvpn_csc.php:672
+#: usr/local/www/vpn_openvpn_server.php:604
+#: usr/local/www/vpn_openvpn_server.php:1448
+#: usr/local/www/firewall_nat_npt_edit.php:159
+#: usr/local/www/system_routes_edit.php:299
+#: usr/local/www/firewall_nat_1to1_edit.php:280
+#: usr/local/www/firewall_nat_npt_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:712
+#: usr/local/www/system_usermanager.php:467
+#: usr/local/www/system_usermanager.php:787
+#: usr/local/www/vpn_openvpn_server.php:677
+#: usr/local/www/vpn_openvpn_server.php:1590
+#: usr/local/www/vpn_ipsec_phase2.php:419
+#: usr/local/www/firewall_nat_edit.php:467 usr/local/www/interfaces.php:2006
+#: usr/local/www/vpn_openvpn_client.php:391
+#: usr/local/www/vpn_openvpn_client.php:865
+#: usr/local/www/system_routes_edit.php:300
+#: usr/local/www/firewall_nat_1to1_edit.php:278
+#: usr/local/www/firewall_nat_npt_edit.php:163
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/interfaces_ppps_edit.php:604
+#: usr/local/www/vpn_openvpn_csc.php:313 usr/local/www/vpn_openvpn_csc.php:671
+#: usr/local/www/vpn_openvpn_server.php:695
+#: usr/local/www/vpn_openvpn_server.php:1631
+#: usr/local/www/vpn_ipsec_phase2.php:485
+#: usr/local/www/firewall_nat_edit.php:466 usr/local/www/interfaces.php:1994
+#: usr/local/www/vpn_openvpn_client.php:399
+#: usr/local/www/vpn_openvpn_client.php:918
+#: usr/local/www/vpn_ipsec_phase1.php:511
+#: usr/local/www/vpn_openvpn_client.php:417
+#: usr/local/www/vpn_openvpn_client.php:937
+#: usr/local/www/firewall_rules_edit.php:715
+#: usr/local/www/interfaces_ppps_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:461
+#: usr/local/www/vpn_ipsec_phase1.php:532
+#: usr/local/www/vpn_openvpn_server.php:721
+#: usr/local/www/vpn_openvpn_server.php:1683
+#: usr/local/www/vpn_ipsec_phase2.php:507 usr/local/www/interfaces.php:2021
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/firewall_nat_edit.php:473
+#: usr/local/www/system_routes_edit.php:323 usr/local/www/interfaces.php:2067
+#: etc/inc/service-utils.inc:437 usr/local/www/interfaces_ppps_edit.php:608
+#: usr/local/www/firewall_nat_edit.php:474
+#: usr/local/www/system_routes_edit.php:332
+#: usr/local/www/firewall_nat_npt_edit.php:161
+#: usr/local/www/interfaces.php:2056 etc/inc/service-utils.inc:440
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/firewall_rules_edit.php:775 usr/local/www/interfaces.php:2092
+#: etc/inc/service-utils.inc:445
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:276
+#: usr/local/www/firewall_nat_edit.php:463
+#: usr/local/www/firewall_rules_edit.php:682
+#: usr/local/www/firewall_nat_npt_edit.php:162
+#: usr/local/www/firewall_nat_1to1_edit.php:283
+#: usr/local/www/firewall_nat_npt_edit.php:167
+#: usr/local/www/firewall_rules_edit.php:715
+#: usr/local/www/firewall_nat_edit.php:470
+#: usr/local/www/firewall_nat_1to1_edit.php:281
+#: usr/local/www/firewall_nat_npt_edit.php:166
+#: usr/local/www/firewall_nat_edit.php:469
+#: usr/local/www/firewall_rules_edit.php:718
+#: usr/local/www/firewall_nat_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:730
+#: usr/local/www/firewall_nat_edit.php:476
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_npt_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:778
+msgid "Disable this rule"
+msgstr "Desabilita essa regra"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:277
+#: usr/local/www/firewall_nat_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:683
+#: usr/local/www/firewall_nat_npt_edit.php:163
+#: usr/local/www/firewall_nat_1to1_edit.php:284
+#: usr/local/www/firewall_nat_npt_edit.php:168
+#: usr/local/www/firewall_rules_edit.php:716
+#: usr/local/www/firewall_nat_edit.php:471
+#: usr/local/www/firewall_nat_1to1_edit.php:282
+#: usr/local/www/firewall_nat_npt_edit.php:167
+#: usr/local/www/firewall_nat_edit.php:470
+#: usr/local/www/firewall_rules_edit.php:719
+#: usr/local/www/firewall_nat_edit.php:465
+#: usr/local/www/firewall_rules_edit.php:731
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_npt_edit.php:165
+#: usr/local/www/firewall_rules_edit.php:779
+msgid "Set this option to disable this rule without removing it from the list."
+msgstr "Defina esta opção para desativar esta regra sem removê-la da lista."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:315
+#: usr/local/www/firewall_nat_npt_edit.php:202
+#: usr/local/www/firewall_nat_1to1_edit.php:322
+#: usr/local/www/firewall_nat_npt_edit.php:207
+#: usr/local/www/firewall_nat_1to1_edit.php:320
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_npt_edit.php:205
+#: usr/local/www/firewall_nat_1to1_edit.php:321
+msgid "Choose which interface this rule applies to"
+msgstr "Escolha a qual interface esta regra se aplica"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:316
+#: usr/local/www/firewall_nat_npt_edit.php:203
+#: usr/local/www/firewall_nat_1to1_edit.php:323
+#: usr/local/www/firewall_nat_npt_edit.php:208
+#: usr/local/www/firewall_nat_1to1_edit.php:321
+#: usr/local/www/firewall_nat_npt_edit.php:207
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_1to1_edit.php:322
+msgid "Hint: in most cases, you'll want to use WAN here"
+msgstr "Sugestão: na maioria dos casos, você vai querer utilizar WAN aqui"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:319
+#: usr/local/www/firewall_nat_1to1_edit.php:326
+#: usr/local/www/firewall_nat_1to1_edit.php:324
+#: usr/local/www/firewall_nat_1to1_edit.php:325
+msgid "External subnet IP"
+msgstr "IP de subrede externa"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:323
+#: usr/local/www/firewall_nat_1to1_edit.php:330
+#: usr/local/www/firewall_nat_1to1_edit.php:328
+#: usr/local/www/firewall_nat_1to1_edit.php:329
+msgid "Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. The subnet mask from the internal address below will be applied to this IP address."
+msgstr "Informe um endereço de início da subrede externa (normalmente em uma WAN) para o mapeamento 1:1. A máscara de subnet do endereço fonte abaixo será aplicada para esse endereço IP."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:324
+#: usr/local/www/firewall_nat_1to1_edit.php:331
+#: usr/local/www/firewall_nat_1to1_edit.php:329
+#: usr/local/www/firewall_nat_1to1_edit.php:330
+msgid "Hint: this is generally an address owned by the router itself on the selected interface."
+msgstr "Dica: isso é geralmente um endereço propriedade do roteador na interface selecionada."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:331
+#: usr/local/www/firewall_nat_1to1_edit.php:386
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_rules_edit.php:858
+#: usr/local/www/firewall_rules_edit.php:951
+#: usr/local/www/firewall_nat_npt_edit.php:209
+#: usr/local/www/firewall_nat_npt_edit.php:237
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_npt_edit.php:214
+#: usr/local/www/firewall_nat_npt_edit.php:242
+#: usr/local/www/firewall_nat_out_edit.php:514
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_rules_edit.php:986
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_1to1_edit.php:336
+#: usr/local/www/firewall_nat_1to1_edit.php:391
+#: usr/local/www/firewall_nat_npt_edit.php:213
+#: usr/local/www/firewall_nat_npt_edit.php:241
+#: usr/local/www/firewall_nat_edit.php:544
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:896
+#: usr/local/www/firewall_rules_edit.php:995
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:628
+#: usr/local/www/firewall_nat_out_edit.php:518
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:1008
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_nat_out_edit.php:530
+#: usr/local/www/firewall_rules_edit.php:907
+#: usr/local/www/firewall_rules_edit.php:1007
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_nat_npt_edit.php:212
+#: usr/local/www/firewall_nat_npt_edit.php:240
+#: usr/local/www/firewall_nat_1to1_edit.php:337
+#: usr/local/www/firewall_nat_1to1_edit.php:392
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:955
+#: usr/local/www/firewall_rules_edit.php:1055
+msgid "not"
+msgstr "não"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/firewall_nat_1to1_edit.php:388
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/firewall_nat_edit.php:629
+#: usr/local/www/firewall_nat_out_edit.php:502
+#: usr/local/www/firewall_rules_edit.php:860
+#: usr/local/www/firewall_rules_edit.php:953
+#: usr/local/www/firewall_nat_npt_edit.php:211
+#: usr/local/www/firewall_nat_npt_edit.php:239
+#: usr/local/www/firewall_nat_1to1_edit.php:340
+#: usr/local/www/firewall_nat_1to1_edit.php:395
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_out_edit.php:515
+#: usr/local/www/firewall_rules_edit.php:895
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:547
+#: usr/local/www/firewall_nat_edit.php:636
+#: usr/local/www/firewall_nat_1to1_edit.php:338
+#: usr/local/www/firewall_nat_1to1_edit.php:393
+#: usr/local/www/firewall_nat_npt_edit.php:215
+#: usr/local/www/firewall_nat_npt_edit.php:243
+#: usr/local/www/firewall_nat_edit.php:546
+#: usr/local/www/firewall_nat_edit.php:635
+#: usr/local/www/firewall_rules_edit.php:898
+#: usr/local/www/firewall_rules_edit.php:997
+#: usr/local/www/firewall_nat_edit.php:541
+#: usr/local/www/firewall_nat_edit.php:630
+#: usr/local/www/firewall_nat_out_edit.php:519
+#: usr/local/www/firewall_rules_edit.php:910
+#: usr/local/www/firewall_rules_edit.php:1010
+#: usr/local/www/firewall_nat_edit.php:553
+#: usr/local/www/firewall_nat_edit.php:642
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_rules_edit.php:909
+#: usr/local/www/firewall_rules_edit.php:1009
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_nat_npt_edit.php:214
+#: usr/local/www/firewall_nat_npt_edit.php:242
+#: usr/local/www/firewall_nat_1to1_edit.php:339
+#: usr/local/www/firewall_nat_1to1_edit.php:394
+#: usr/local/www/firewall_nat_out_edit.php:532
+#: usr/local/www/firewall_rules_edit.php:957
+#: usr/local/www/firewall_rules_edit.php:1057
+msgid "Use this option to invert the sense of the match."
+msgstr "Use essa opção para inverter o sentido da correspondência."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+#: usr/local/www/firewall_nat_1to1_edit.php:398
+#: usr/local/www/firewall_nat_edit.php:550
+#: usr/local/www/firewall_nat_edit.php:597
+#: usr/local/www/firewall_nat_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_out_edit.php:475
+#: usr/local/www/firewall_nat_out_edit.php:509
+#: usr/local/www/firewall_nat_out_edit.php:569
+#: usr/local/www/firewall_rules.php:128
+#: usr/local/www/firewall_rules_edit.php:827
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules_edit.php:921
+#: usr/local/www/firewall_rules_edit.php:934
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1013
+#: usr/local/www/firewall_rules_edit.php:1026
+#: usr/local/www/firewall_rules_edit.php:1090
+#: usr/local/www/services_captiveportal_ip.php:175
+#: usr/local/www/services_captiveportal_ip.php:182
+#: usr/local/www/services_captiveportal_hostname.php:176
+#: usr/local/www/services_captiveportal_hostname.php:183
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_nat_out_edit.php:488
+#: usr/local/www/firewall_nat_out_edit.php:522
+#: usr/local/www/firewall_nat_out_edit.php:582
+#: usr/local/www/firewall_rules_edit.php:862
+#: usr/local/www/firewall_rules_edit.php:905
+#: usr/local/www/firewall_rules_edit.php:956
+#: usr/local/www/firewall_rules_edit.php:969
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:998
+#: usr/local/www/firewall_rules_edit.php:1048
+#: usr/local/www/firewall_rules_edit.php:1061
+#: usr/local/www/firewall_rules_edit.php:1125
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:604
+#: usr/local/www/firewall_nat_edit.php:617
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_nat_1to1_edit.php:348
+#: usr/local/www/firewall_nat_1to1_edit.php:403
+#: usr/local/www/services_captiveportal_ip.php:173
+#: usr/local/www/services_captiveportal_ip.php:180
+#: usr/local/www/services_captiveportal_hostname.php:174
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/firewall_rules.php:126
+#: usr/local/www/firewall_nat_edit.php:556
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:645
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/firewall_rules_edit.php:978
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1007
+#: usr/local/www/firewall_rules_edit.php:1063
+#: usr/local/www/firewall_rules_edit.php:1076
+#: usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:598
+#: usr/local/www/firewall_nat_edit.php:611
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:526
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:991
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1020
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1153
+#: usr/local/www/firewall_nat_edit.php:563
+#: usr/local/www/firewall_nat_edit.php:623
+#: usr/local/www/firewall_nat_edit.php:652
+#: usr/local/www/firewall_nat_out_edit.php:504
+#: usr/local/www/firewall_nat_out_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:919
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1019
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:624
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_1to1_edit.php:349
+#: usr/local/www/firewall_nat_1to1_edit.php:404
+#: usr/local/www/firewall_nat_out_edit.php:539
+#: usr/local/www/firewall_rules_edit.php:924
+#: usr/local/www/firewall_rules_edit.php:967
+#: usr/local/www/firewall_rules_edit.php:1025
+#: usr/local/www/firewall_rules_edit.php:1038
+#: usr/local/www/firewall_rules_edit.php:1067
+#: usr/local/www/firewall_rules_edit.php:1123
+#: usr/local/www/firewall_rules_edit.php:1136
+#: usr/local/www/firewall_rules_edit.php:1200
+msgid "any"
+msgstr "qualquer"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:344
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:349
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+msgid "Single host"
+msgstr "Host único"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:347
+#: usr/local/www/firewall_nat_1to1_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules_edit.php:967
+#: usr/local/www/firewall_nat_1to1_edit.php:354
+#: usr/local/www/firewall_nat_1to1_edit.php:409
+#: usr/local/www/firewall_rules_edit.php:909
+#: usr/local/www/firewall_rules_edit.php:1002
+#: usr/local/www/firewall_nat_edit.php:561
+#: usr/local/www/firewall_nat_edit.php:650
+#: usr/local/www/firewall_nat_1to1_edit.php:352
+#: usr/local/www/firewall_nat_1to1_edit.php:407
+#: usr/local/www/firewall_nat_edit.php:560
+#: usr/local/www/firewall_nat_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:918
+#: usr/local/www/firewall_rules_edit.php:1017
+#: usr/local/www/firewall_nat_edit.php:555
+#: usr/local/www/firewall_nat_edit.php:644
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1030
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:929
+#: usr/local/www/firewall_rules_edit.php:1029
+#: usr/local/www/firewall_nat_edit.php:568
+#: usr/local/www/firewall_nat_edit.php:657
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:408
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:1077
+msgid "PPTP clients"
+msgstr "Cliente PPTP"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:350
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:970
+#: usr/local/www/firewall_nat_1to1_edit.php:357
+#: usr/local/www/firewall_nat_1to1_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:912
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_1to1_edit.php:355
+#: usr/local/www/firewall_nat_1to1_edit.php:410
+#: usr/local/www/firewall_nat_edit.php:563
+#: usr/local/www/firewall_nat_edit.php:652
+#: usr/local/www/firewall_rules_edit.php:921
+#: usr/local/www/firewall_rules_edit.php:1020
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_rules_edit.php:933
+#: usr/local/www/firewall_rules_edit.php:1033
+#: usr/local/www/firewall_nat_edit.php:570
+#: usr/local/www/firewall_nat_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:932
+#: usr/local/www/firewall_rules_edit.php:1032
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_nat_1to1_edit.php:356
+#: usr/local/www/firewall_nat_1to1_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:980
+#: usr/local/www/firewall_rules_edit.php:1080
+msgid "PPPoE clients"
+msgstr "Cliente PPPoE"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:408
+#: usr/local/www/firewall_nat_edit.php:560
+#: usr/local/www/firewall_nat_edit.php:649
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:973
+#: usr/local/www/firewall_nat_1to1_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:415
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1008
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:924
+#: usr/local/www/firewall_rules_edit.php:1023
+#: usr/local/www/firewall_nat_edit.php:561
+#: usr/local/www/firewall_nat_edit.php:650
+#: usr/local/www/firewall_rules_edit.php:936
+#: usr/local/www/firewall_rules_edit.php:1036
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:662
+#: usr/local/www/firewall_rules_edit.php:935
+#: usr/local/www/firewall_rules_edit.php:1035
+#: usr/local/www/firewall_nat_edit.php:574
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_nat_1to1_edit.php:359
+#: usr/local/www/firewall_nat_1to1_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:983
+#: usr/local/www/firewall_rules_edit.php:1083
+msgid "L2TP clients"
+msgstr "Cliente L2TP"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:413
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_rules_edit.php:978
+#: usr/local/www/firewall_nat_1to1_edit.php:365
+#: usr/local/www/firewall_nat_1to1_edit.php:420
+#: usr/local/www/firewall_rules_edit.php:1013
+#: usr/local/www/firewall_nat_edit.php:572
+#: usr/local/www/firewall_nat_edit.php:661
+#: usr/local/www/firewall_nat_1to1_edit.php:363
+#: usr/local/www/firewall_nat_1to1_edit.php:418
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_rules_edit.php:1028
+#: usr/local/www/firewall_nat_edit.php:566
+#: usr/local/www/firewall_nat_edit.php:655
+#: usr/local/www/firewall_rules_edit.php:1041
+#: usr/local/www/firewall_nat_edit.php:578
+#: usr/local/www/firewall_nat_edit.php:667
+#: usr/local/www/firewall_rules_edit.php:1040
+#: usr/local/www/firewall_nat_edit.php:579
+#: usr/local/www/firewall_nat_edit.php:668
+#: usr/local/www/firewall_nat_1to1_edit.php:364
+#: usr/local/www/firewall_nat_1to1_edit.php:419
+#: usr/local/www/firewall_rules_edit.php:1088
+msgid "subnet"
+msgstr "sub-rede"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:360
+#: usr/local/www/firewall_nat_1to1_edit.php:415
+#: usr/local/www/firewall_nat_edit.php:567
+#: usr/local/www/firewall_nat_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:980
+#: usr/local/www/firewall_nat_1to1_edit.php:367
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_rules_edit.php:922
+#: usr/local/www/firewall_rules_edit.php:1015
+#: usr/local/www/firewall_nat_edit.php:574
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_nat_1to1_edit.php:365
+#: usr/local/www/firewall_nat_1to1_edit.php:420
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:662
+#: usr/local/www/firewall_rules_edit.php:931
+#: usr/local/www/firewall_rules_edit.php:1030
+#: usr/local/www/firewall_nat_edit.php:568
+#: usr/local/www/firewall_nat_edit.php:657
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:1043
+#: usr/local/www/firewall_nat_edit.php:580
+#: usr/local/www/firewall_nat_edit.php:669
+#: usr/local/www/firewall_rules_edit.php:942
+#: usr/local/www/firewall_rules_edit.php:1042
+#: usr/local/www/firewall_nat_edit.php:581
+#: usr/local/www/firewall_nat_edit.php:670
+#: usr/local/www/firewall_nat_1to1_edit.php:366
+#: usr/local/www/firewall_nat_1to1_edit.php:421
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1090
+msgid "address"
+msgstr "endereço"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:379
+#: usr/local/www/firewall_nat_1to1_edit.php:386
+#: usr/local/www/firewall_nat_1to1_edit.php:384
+#: usr/local/www/firewall_nat_1to1_edit.php:385
+msgid "Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size specified for the internal subnet will be applied to the external subnet."
+msgstr "Insira a subrede (LAN) interna para o mapeamento 1:1. O tamanho da subrede especificado para a subrede externa também se aplica para a subrede interna."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:399
+#: usr/local/www/firewall_nat_edit.php:551
+#: usr/local/www/firewall_nat_edit.php:640
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_nat_1to1_edit.php:406
+#: usr/local/www/firewall_rules_edit.php:906
+#: usr/local/www/firewall_rules_edit.php:999
+#: usr/local/www/firewall_nat_edit.php:558
+#: usr/local/www/firewall_nat_edit.php:647
+#: usr/local/www/firewall_nat_1to1_edit.php:404
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_rules_edit.php:915
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_nat_edit.php:552
+#: usr/local/www/firewall_nat_edit.php:641
+#: usr/local/www/firewall_rules_edit.php:927
+#: usr/local/www/firewall_rules_edit.php:1027
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_rules_edit.php:926
+#: usr/local/www/firewall_rules_edit.php:1026
+#: usr/local/www/firewall_nat_edit.php:565
+#: usr/local/www/firewall_nat_edit.php:654
+#: usr/local/www/firewall_nat_1to1_edit.php:405
+#: usr/local/www/firewall_rules_edit.php:974
+#: usr/local/www/firewall_rules_edit.php:1074
+msgid "Single host or alias"
+msgstr "Host único ou alias"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:436
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+#: usr/local/www/firewall_nat_1to1_edit.php:441
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+msgid "The 1:1 mapping will only be used for connections to or from the specified destination."
+msgstr "O mapeamento 1:1 será usado para conexões para ou de um destino específico."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:437
+#: usr/local/www/firewall_nat_1to1_edit.php:444
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+#: usr/local/www/firewall_nat_1to1_edit.php:443
+msgid "Hint: this is usually 'any'."
+msgstr "Dica: isso é normalmente 'qualquer'."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:447
+#: usr/local/www/firewall_nat_edit.php:783
+#: usr/local/www/firewall_nat_1to1_edit.php:454
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/firewall_nat_1to1_edit.php:452
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_edit.php:784
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_edit.php:797
+msgid "NAT reflection"
+msgstr "Reflexão NAT"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:450
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/firewall_nat_1to1_edit.php:457
+#: usr/local/www/firewall_nat_1to1_edit.php:455
+msgid "use system default"
+msgstr "usar padrão do sistema"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:451
+#: usr/local/www/firewall_nat_edit.php:787
+#: usr/local/www/firewall_nat_1to1_edit.php:458
+#: usr/local/www/firewall_nat_1to1_edit.php:456
+msgid "enable"
+msgstr "habilitar"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:452
+#: usr/local/www/firewall_nat_edit.php:788
+#: usr/local/www/firewall_nat_1to1_edit.php:459
+#: usr/local/www/firewall_nat_1to1_edit.php:457
+msgid "disable"
+msgstr "desabilitar"
+
+#: usr/local/www/firewall_nat_edit.php:109
+#: usr/local/www/firewall_nat_edit.php:114
+#: usr/local/www/firewall_nat_edit.php:119
+#, php-format
+msgid "Invalid characters detected %s. Please remove invalid characters and save again."
+msgstr "Caracteres inválidos detectados %s. Por favor, remova os caracteres inválidos e salve novamente."
+
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:192
+msgid "Destination port from"
+msgstr "Porta de destino de"
+
+#: usr/local/www/firewall_nat_edit.php:182
+#: usr/local/www/firewall_nat_edit.php:187
+#: usr/local/www/firewall_nat_edit.php:192
+msgid "Destination port to"
+msgstr "Porta de destino até"
+
+#: usr/local/www/firewall_nat_edit.php:198
+#: usr/local/www/firewall_nat_edit.php:740
+#: usr/local/www/firewall_nat_edit.php:747
+#: usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:203
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:208
+#: usr/local/www/firewall_nat_edit.php:753
+#: usr/local/www/firewall_nat_edit.php:754
+msgid "Redirect target IP"
+msgstr "Redirecionar IP de destino"
+
+#: usr/local/www/firewall_nat_edit.php:213
+#: usr/local/www/firewall_nat_edit.php:220
+#: usr/local/www/firewall_nat_edit.php:225
+#: usr/local/www/firewall_nat_edit.php:230
+#, php-format
+msgid "\"%s\" is not a valid redirect target IP address or host alias."
+msgstr "\"%s\" não é um endereço IP alvo válido ou um alias de host."
+
+#: usr/local/www/firewall_nat_edit.php:217
+#: usr/local/www/firewall_rules_edit.php:325
+#: usr/local/www/firewall_rules_edit.php:349
+#: usr/local/www/firewall_nat_edit.php:224
+#: usr/local/www/firewall_rules_edit.php:348
+#: usr/local/www/firewall_rules_edit.php:351
+#: usr/local/www/firewall_nat_edit.php:229
+#: usr/local/www/firewall_rules_edit.php:357
+#: usr/local/www/firewall_nat_edit.php:234
+#, php-format
+msgid "%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é um inicio de porta de origem válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:219
+#: usr/local/www/firewall_nat_edit.php:226
+#: usr/local/www/firewall_nat_edit.php:231
+#: usr/local/www/firewall_nat_edit.php:236
+#, php-format
+msgid "%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é um fim de porta de origem válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:221
+#: usr/local/www/firewall_rules_edit.php:329
+#: usr/local/www/firewall_rules_edit.php:353
+#: usr/local/www/firewall_nat_edit.php:228
+#: usr/local/www/firewall_rules_edit.php:352
+#: usr/local/www/firewall_rules_edit.php:355
+#: usr/local/www/firewall_nat_edit.php:233
+#: usr/local/www/firewall_rules_edit.php:361
+#: usr/local/www/firewall_nat_edit.php:238
+#, php-format
+msgid "%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é um inicio de porta de destino válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:223
+#: usr/local/www/firewall_rules_edit.php:331
+#: usr/local/www/firewall_rules_edit.php:355
+#: usr/local/www/firewall_nat_edit.php:230
+#: usr/local/www/firewall_rules_edit.php:354
+#: usr/local/www/firewall_rules_edit.php:357
+#: usr/local/www/firewall_nat_edit.php:235
+#: usr/local/www/firewall_rules_edit.php:363
+#: usr/local/www/firewall_nat_edit.php:240
+#, php-format
+msgid "%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é um fim de porta de destino válido. Deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:226
+#, php-format
+msgid "%s is not a valid local port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é uma porta local válida. Deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:237
+#: usr/local/www/firewall_rules_edit.php:365
+#: usr/local/www/firewall_rules_edit.php:394
+#: usr/local/www/firewall_nat_edit.php:244
+#: usr/local/www/firewall_rules_edit.php:393
+#: usr/local/www/firewall_rules_edit.php:396
+#: usr/local/www/firewall_nat_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_nat_edit.php:254
+#, php-format
+msgid "%s is not a valid source IP address or alias."
+msgstr "%s não é um endereço IP válido ou alias."
+
+#: usr/local/www/firewall_nat_edit.php:240
+#: usr/local/www/firewall_nat_out_edit.php:151
+#: usr/local/www/firewall_rules_edit.php:368
+#: usr/local/www/firewall_nat_out_edit.php:164
+#: usr/local/www/firewall_rules_edit.php:397
+#: usr/local/www/firewall_nat_edit.php:247
+#: usr/local/www/firewall_rules_edit.php:396
+#: usr/local/www/firewall_rules_edit.php:399
+#: usr/local/www/firewall_nat_edit.php:252
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_rules_edit.php:405
+#: usr/local/www/firewall_nat_edit.php:257
+#: usr/local/www/firewall_nat_out_edit.php:174
+msgid "A valid source bit count must be specified."
+msgstr "Um bit count de origem válido deve ser especificado."
+
+#: usr/local/www/firewall_nat_edit.php:267
+#: usr/local/www/firewall_nat_edit.php:274
+#: usr/local/www/firewall_nat_edit.php:279
+#: usr/local/www/firewall_nat_edit.php:284
+msgid "The target port range must be an integer between 1 and 65535."
+msgstr "O intervalo de porta de destino deve ser um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_nat_edit.php:288
+#: usr/local/www/firewall_nat_edit.php:295
+#: usr/local/www/firewall_nat_edit.php:300
+#: usr/local/www/firewall_nat_edit.php:305
+msgid "The destination port range overlaps with an existing entry."
+msgstr "O intervalo de porta de destino sobrepõe uma entrada existente."
+
+#: usr/local/www/firewall_nat_edit.php:453
+#: usr/local/www/firewall_nat_edit.php:460
+#: usr/local/www/firewall_nat_edit.php:459
+#: usr/local/www/firewall_nat_edit.php:454
+#: usr/local/www/firewall_nat_edit.php:466
+#: usr/local/www/firewall_nat_edit.php:467
+msgid "Edit Redirect entry"
+msgstr "Editar entrada de redirecionamento"
+
+#: usr/local/www/firewall_nat_edit.php:468
+#: usr/local/www/firewall_nat_edit.php:475
+#: usr/local/www/firewall_nat_edit.php:474
+#: usr/local/www/firewall_nat_edit.php:469
+#: usr/local/www/firewall_nat_edit.php:481
+#: usr/local/www/firewall_nat_edit.php:482
+msgid "No RDR (NOT)"
+msgstr "Sem RDR (NÃO)"
+
+#: usr/local/www/firewall_nat_edit.php:471
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_edit.php:477
+#: usr/local/www/firewall_nat_edit.php:472
+#: usr/local/www/firewall_nat_edit.php:484
+#: usr/local/www/firewall_nat_edit.php:485
+msgid "Enabling this option will disable redirection for traffic matching this rule."
+msgstr "Ativando esta opção irá desativar o redirecionamento do tráfego correspondente a esta regra."
+
+#: usr/local/www/firewall_nat_edit.php:472
+#: usr/local/www/firewall_nat_edit.php:479
+#: usr/local/www/firewall_nat_edit.php:478
+#: usr/local/www/firewall_nat_edit.php:473
+#: usr/local/www/firewall_nat_edit.php:485
+#: usr/local/www/firewall_nat_edit.php:486
+msgid "Hint: this option is rarely needed, don't use this unless you know what you're doing."
+msgstr "Dica: essa opção raramente é necessária, não use-a a menos que você saiba o que está fazendo."
+
+#: usr/local/www/firewall_nat_edit.php:514
+#: usr/local/www/firewall_nat_out_edit.php:452
+#: usr/local/www/firewall_nat_out_edit.php:465
+#: usr/local/www/firewall_nat_edit.php:521
+#: usr/local/www/firewall_nat_edit.php:520
+#: usr/local/www/firewall_nat_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_nat_edit.php:528
+msgid "Choose which interface this rule applies to."
+msgstr "Escolha qual interface esta regra se aplica."
+
+#: usr/local/www/firewall_nat_edit.php:515
+#: usr/local/www/firewall_nat_out_edit.php:453
+#: usr/local/www/firewall_nat_out_edit.php:466
+#: usr/local/www/firewall_nat_edit.php:522
+#: usr/local/www/firewall_nat_edit.php:521
+#: usr/local/www/firewall_nat_edit.php:516
+#: usr/local/www/firewall_nat_out_edit.php:470
+#: usr/local/www/firewall_nat_edit.php:528
+#: usr/local/www/firewall_nat_out_edit.php:482
+#: usr/local/www/firewall_nat_edit.php:529
+msgid "Hint: in most cases, you'll want to use WAN here."
+msgstr "Dica: na maioria dos casos, você vai querer usar WAN aqui."
+
+#: usr/local/www/firewall_nat_edit.php:524
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_nat_edit.php:530
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_nat_edit.php:525
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:915
+msgid "Choose which IP protocol this rule should match."
+msgstr "Escolha qual protocolo IP essa regra deve corresponder."
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:540
+msgid "Hint: in most cases, you should specify"
+msgstr "Dica: na maioria dos casos, você deve especificar"
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_nat_edit.php:540
+msgid "TCP"
+msgstr "TCP"
+
+#: usr/local/www/firewall_nat_edit.php:526
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:144
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/diag_ipsec_sad.php:136
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/diag_ipsec_spd.php:145
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_nat_edit.php:527
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_nat_edit.php:539
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_nat_edit.php:540
+#: usr/local/www/firewall_rules_edit.php:915
+msgid "here."
+msgstr "aqui."
+
+#: usr/local/www/firewall_nat_edit.php:531
+#: usr/local/www/firewall_nat_edit.php:538
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_nat_edit.php:532
+#: usr/local/www/firewall_nat_edit.php:544
+#: usr/local/www/firewall_nat_edit.php:545
+msgid "Show source address and port range"
+msgstr "Mostrar endereço de origem e intervalo de portas"
+
+#: usr/local/www/firewall_nat_edit.php:589
+#: usr/local/www/firewall_rules_edit.php:913
+#: usr/local/www/firewall_rules_edit.php:948
+#: usr/local/www/firewall_nat_edit.php:596
+#: usr/local/www/firewall_nat_edit.php:595
+#: usr/local/www/firewall_rules_edit.php:957
+#: usr/local/www/firewall_nat_edit.php:590
+#: usr/local/www/firewall_rules_edit.php:970
+#: usr/local/www/firewall_nat_edit.php:602
+#: usr/local/www/firewall_rules_edit.php:969
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_rules_edit.php:1017
+msgid "Source port range"
+msgstr "Intervalo da porta de origem"
+
+#: usr/local/www/firewall_nat_edit.php:593
+#: usr/local/www/firewall_nat_edit.php:705
+#: usr/local/www/firewall_rules_edit.php:917
+#: usr/local/www/firewall_rules_edit.php:1009
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_nat_edit.php:600
+#: usr/local/www/firewall_nat_edit.php:712
+#: usr/local/www/firewall_nat_edit.php:599
+#: usr/local/www/firewall_nat_edit.php:711
+#: usr/local/www/firewall_rules_edit.php:961
+#: usr/local/www/firewall_rules_edit.php:1059
+#: usr/local/www/firewall_nat_edit.php:594
+#: usr/local/www/firewall_nat_edit.php:706
+#: usr/local/www/firewall_rules_edit.php:974
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_nat_edit.php:606
+#: usr/local/www/firewall_nat_edit.php:718
+#: usr/local/www/firewall_rules_edit.php:973
+#: usr/local/www/firewall_rules_edit.php:1071
+#: usr/local/www/firewall_nat_edit.php:607
+#: usr/local/www/firewall_nat_edit.php:719
+#: usr/local/www/firewall_rules_edit.php:1021
+#: usr/local/www/firewall_rules_edit.php:1119
+msgid "from:"
+msgstr "a partir de:"
+
+#: usr/local/www/firewall_nat_edit.php:596
+#: usr/local/www/firewall_nat_edit.php:609
+#: usr/local/www/firewall_nat_edit.php:708
+#: usr/local/www/firewall_nat_edit.php:721
+#: usr/local/www/firewall_nat_edit.php:751
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:933
+#: usr/local/www/firewall_rules_edit.php:1012
+#: usr/local/www/firewall_rules_edit.php:1025
+#: usr/local/www/firewall_rules_edit.php:955
+#: usr/local/www/firewall_rules_edit.php:968
+#: usr/local/www/firewall_rules_edit.php:1047
+#: usr/local/www/firewall_rules_edit.php:1060
+#: usr/local/www/firewall_nat_edit.php:603
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:715
+#: usr/local/www/firewall_nat_edit.php:728
+#: usr/local/www/firewall_nat_edit.php:758
+#: usr/local/www/firewall_nat_edit.php:602
+#: usr/local/www/firewall_nat_edit.php:615
+#: usr/local/www/firewall_nat_edit.php:714
+#: usr/local/www/firewall_nat_edit.php:727
+#: usr/local/www/firewall_nat_edit.php:757
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:977
+#: usr/local/www/firewall_rules_edit.php:1062
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_nat_edit.php:597
+#: usr/local/www/firewall_nat_edit.php:610
+#: usr/local/www/firewall_nat_edit.php:709
+#: usr/local/www/firewall_nat_edit.php:722
+#: usr/local/www/firewall_nat_edit.php:752
+#: usr/local/www/firewall_rules_edit.php:990
+#: usr/local/www/firewall_rules_edit.php:1088
+#: usr/local/www/firewall_nat_edit.php:622
+#: usr/local/www/firewall_nat_edit.php:734
+#: usr/local/www/firewall_nat_edit.php:764
+#: usr/local/www/firewall_rules_edit.php:976
+#: usr/local/www/firewall_rules_edit.php:989
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:1087
+#: usr/local/www/firewall_nat_edit.php:623
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_nat_edit.php:765
+#: usr/local/www/firewall_rules_edit.php:1024
+#: usr/local/www/firewall_rules_edit.php:1037
+#: usr/local/www/firewall_rules_edit.php:1122
+#: usr/local/www/firewall_rules_edit.php:1135
+msgid "other"
+msgstr "outros"
+
+#: usr/local/www/firewall_nat_edit.php:606
+#: usr/local/www/firewall_nat_edit.php:718
+#: usr/local/www/firewall_rules_edit.php:930
+#: usr/local/www/firewall_rules_edit.php:1022
+#: usr/local/www/firewall_rules_edit.php:965
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/firewall_nat_edit.php:613
+#: usr/local/www/firewall_nat_edit.php:725
+#: usr/local/www/firewall_nat_edit.php:612
+#: usr/local/www/firewall_nat_edit.php:724
+#: usr/local/www/firewall_rules_edit.php:974
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_nat_edit.php:607
+#: usr/local/www/firewall_nat_edit.php:719
+#: usr/local/www/firewall_rules_edit.php:987
+#: usr/local/www/firewall_rules_edit.php:1085
+#: usr/local/www/firewall_nat_edit.php:619
+#: usr/local/www/firewall_nat_edit.php:731
+#: usr/local/www/firewall_rules_edit.php:986
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:732
+#: usr/local/www/firewall_rules_edit.php:1034
+#: usr/local/www/firewall_rules_edit.php:1132
+msgid "to:"
+msgstr "para:"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "Specify the source port or port range for this rule"
+msgstr "Especifique a porta de origem ou intervalo de portas para esta regra"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1048
+msgid "This is usually"
+msgstr "Isto normalmente é"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1048
+msgid "random"
+msgstr "aleatório"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:634
+msgid "and almost never equal to the destination port range (and should usually be 'any')"
+msgstr "e quase nunca é igual ao intervalo de porta de destino (e geralmente deve ser 'qualquer')"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_nat_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_rules_edit.php:1048
+#: usr/local/www/firewall_rules_edit.php:1149
+msgid "Hint: you can leave the"
+msgstr "Dica: você pode deixar o"
+
+#: usr/local/www/firewall_nat_edit.php:620
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_nat_edit.php:627
+#: usr/local/www/firewall_nat_edit.php:626
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_nat_edit.php:621
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_nat_edit.php:633
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_nat_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1048
+msgid "field empty if you only want to filter a single port."
+msgstr "campo vazio se você apenas deseja filtrar uma única porta."
+
+#: usr/local/www/firewall_nat_edit.php:701
+#: usr/local/www/firewall_nat_edit.php:708
+#: usr/local/www/firewall_nat_edit.php:707
+#: usr/local/www/firewall_nat_edit.php:702
+#: usr/local/www/firewall_nat_edit.php:714
+#: usr/local/www/firewall_nat_edit.php:715
+msgid "Destination port range"
+msgstr "Destino intervalo de portas"
+
+#: usr/local/www/firewall_nat_edit.php:733
+#: usr/local/www/firewall_nat_edit.php:740
+#: usr/local/www/firewall_nat_edit.php:739
+#: usr/local/www/firewall_nat_edit.php:734
+#: usr/local/www/firewall_nat_edit.php:746
+#: usr/local/www/firewall_nat_edit.php:747
+msgid "Specify the port or port range for the destination of the packet for this mapping."
+msgstr "Especifique o intervalo de porta ou porta de destino do pacote para esse mapeamento."
+
+#: usr/local/www/firewall_nat_edit.php:735
+#: usr/local/www/firewall_nat_edit.php:742
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:736
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_nat_edit.php:749
+msgid "field empty if you only want to map a single port"
+msgstr "campo vazio se você apenas deseja mapear uma única porta"
+
+#: usr/local/www/firewall_nat_edit.php:743
+#: usr/local/www/firewall_nat_edit.php:750
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_nat_edit.php:744
+#: usr/local/www/firewall_nat_edit.php:756
+#: usr/local/www/firewall_nat_edit.php:757
+msgid "Enter the internal IP address of the server on which you want to map the ports."
+msgstr "Digite o endereço IP interno do servidor no qual pretende mapear as portas."
+
+#: usr/local/www/firewall_nat_edit.php:748
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/firewall_nat_edit.php:754
+#: usr/local/www/firewall_nat_edit.php:749
+#: usr/local/www/firewall_nat_edit.php:761
+#: usr/local/www/firewall_nat_edit.php:762
+msgid "Redirect target port"
+msgstr "Redirecionar porta de destino"
+
+#: usr/local/www/firewall_nat_edit.php:762
+#: usr/local/www/firewall_nat_edit.php:769
+#: usr/local/www/firewall_nat_edit.php:768
+#: usr/local/www/firewall_nat_edit.php:763
+#: usr/local/www/firewall_nat_edit.php:775
+#: usr/local/www/firewall_nat_edit.php:776
+msgid "Specify the port on the machine with the IP address entered above. In case of a port range, specify the beginning port of the range (the end port will be calculated automatically)."
+msgstr "Especificar a porta da máquina com o endereço IP digitado acima. No caso de uma porta, especifique a porta início do intervalo (a porta final será calculado automaticamente)."
+
+#: usr/local/www/firewall_nat_edit.php:766
+#: usr/local/www/firewall_nat_edit.php:773
+#: usr/local/www/firewall_nat_edit.php:772
+#: usr/local/www/firewall_nat_edit.php:767
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/firewall_nat_edit.php:780
+msgid "Hint: this is usually identical to the 'from' port above"
+msgstr "Dica: isso normalmente é identico à porta 'De' acima"
+
+#: usr/local/www/firewall_nat_edit.php:776
+#: usr/local/www/firewall_nat_out_edit.php:629
+#: usr/local/www/firewall_rules_edit.php:1238
+#: usr/local/www/firewall_nat_out_edit.php:642
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_nat_edit.php:783
+#: usr/local/www/firewall_nat_edit.php:782
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_nat_edit.php:777
+#: usr/local/www/firewall_nat_out_edit.php:644
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_out_edit.php:656
+#: usr/local/www/firewall_rules_edit.php:1294
+#: usr/local/www/firewall_nat_edit.php:790
+#: usr/local/www/firewall_rules_edit.php:1342
+msgid "No XMLRPC Sync"
+msgstr "Sem XMLRPC Sync"
+
+#: usr/local/www/firewall_nat_edit.php:779
+#: usr/local/www/firewall_nat_edit.php:786
+#: usr/local/www/firewall_nat_edit.php:785
+msgid "HINT: This prevents the rule from automatically syncing to other CARP members"
+msgstr "DICA: Isso impede que a regra automaticamente a sincronização com outros membros CARP"
+
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:825
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/firewall_nat_edit.php:833
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/firewall_nat_edit.php:832
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_edit.php:827
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/firewall_nat_edit.php:839
+#: usr/local/www/firewall_nat_edit.php:809
+#: usr/local/www/firewall_nat_edit.php:840
+msgid "Filter rule association"
+msgstr "Associação de regra de filtro"
+
+#: usr/local/www/firewall_nat_edit.php:798
+#: usr/local/www/firewall_nat_edit.php:831
+#: usr/local/www/firewall_nat_edit.php:806
+#: usr/local/www/firewall_nat_edit.php:839
+#: usr/local/www/firewall_nat_edit.php:805
+#: usr/local/www/firewall_nat_edit.php:838
+#: usr/local/www/firewall_nat_edit.php:800
+#: usr/local/www/firewall_nat_edit.php:833
+#: usr/local/www/firewall_nat_edit.php:812
+#: usr/local/www/firewall_nat_edit.php:845
+#: usr/local/www/firewall_nat_edit.php:813
+#: usr/local/www/firewall_nat_edit.php:846
+msgid "Pass"
+msgstr "Liberar"
+
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/firewall_nat_edit.php:816
+#: usr/local/www/firewall_nat_edit.php:815
+#: usr/local/www/firewall_nat_edit.php:810
+#: usr/local/www/firewall_nat_edit.php:822
+#: usr/local/www/firewall_nat_edit.php:823
+msgid "View the filter rule"
+msgstr "Ver regra do filtro"
+
+#: usr/local/www/firewall_nat_edit.php:816
+#: usr/local/www/firewall_nat_edit.php:824
+#: usr/local/www/firewall_nat_edit.php:823
+#: usr/local/www/firewall_nat_edit.php:818
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/firewall_nat_edit.php:831
+msgid "Create new associated filter rule"
+msgstr "Criar nova regra de filtro associada"
+
+#: usr/local/www/firewall_nat_edit.php:829
+#: usr/local/www/firewall_nat_edit.php:837
+#: usr/local/www/firewall_nat_edit.php:836
+#: usr/local/www/firewall_nat_edit.php:831
+#: usr/local/www/firewall_nat_edit.php:843
+#: usr/local/www/firewall_nat_edit.php:844
+msgid "Add associated filter rule"
+msgstr "Adicionar regra de filtro associada"
+
+#: usr/local/www/firewall_nat_edit.php:830
+#: usr/local/www/firewall_nat_edit.php:838
+#: usr/local/www/firewall_nat_edit.php:837
+#: usr/local/www/firewall_nat_edit.php:832
+#: usr/local/www/firewall_nat_edit.php:844
+#: usr/local/www/firewall_nat_edit.php:845
+msgid "Add unassociated filter rule"
+msgstr "Adicionar regra de filtro não associada"
+
+#: usr/local/www/firewall_nat_out.php:111
+#: usr/local/www/firewall_nat_out.php:112
+#, php-format
+msgid "Auto created rule for ISAKMP - %1$s to %2$s"
+msgstr "Regra criada automaticamente para ISAKMP - %1$s para %2$s"
+
+#: usr/local/www/firewall_nat_out.php:121
+#: usr/local/www/firewall_nat_out.php:123
+#, php-format
+msgid "Auto created rule for %1$s to %2$s"
+msgstr "Regra criada automaticamente para %1$s para %2$s"
+
+#: usr/local/www/firewall_nat_out.php:131
+#: usr/local/www/firewall_nat_out.php:135
+#, php-format
+msgid "Auto created rule for localhost to %1$s"
+msgstr "Regra criada automaticamente para %1$s"
+
+#: usr/local/www/firewall_nat_out.php:147
+#: usr/local/www/firewall_nat_out.php:148
+#: usr/local/www/firewall_nat_out.php:152
+msgid "Auto created rule for PPTP server"
+msgstr "Regra criada automaticamente para servidor PPTP"
+
+#: usr/local/www/firewall_nat_out.php:167
+#: usr/local/www/firewall_nat_out.php:168
+#: usr/local/www/firewall_nat_out.php:173
+msgid "Auto created rule for PPPoE server"
+msgstr "Regra criada automaticamente para servidor PPPoE"
+
+#: usr/local/www/firewall_nat_out.php:187
+#: usr/local/www/firewall_nat_out.php:188
+#: usr/local/www/firewall_nat_out.php:194
+msgid "Auto created rule for L2TP server"
+msgstr "Regra criada automaticamente para servidor L2TP"
+
+#: usr/local/www/firewall_nat_out.php:201
+#: usr/local/www/firewall_nat_out.php:202
+#: usr/local/www/firewall_nat_out.php:209
+msgid "Auto created rule for OpenVPN server"
+msgstr "Regra criada automaticamente para servidor OpenVPN"
+
+#: usr/local/www/firewall_nat_out.php:212
+#: usr/local/www/firewall_nat_out.php:213
+#: usr/local/www/firewall_nat_out.php:220
+msgid "Default rules for each interface have been created."
+msgstr "Regras padrão para cada interface foram criadas."
+
+#: usr/local/www/firewall_nat_out.php:294
+#: usr/local/www/firewall_nat_out.php:304
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_out.php:311
+msgid "The NAT configuration has been changed."
+msgstr "Configuração de NAT foi alterado."
+
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out.php:321
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:327
+msgid "Mode:"
+msgstr "Modo:"
+
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:323
+#: usr/local/www/firewall_nat_out.php:324
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/firewall_nat_out.php:330
+msgid "Automatic outbound NAT rule generation"
+msgstr "Geração de regras automáticas de outbound NAT"
+
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:323
+#: usr/local/www/firewall_nat_out.php:324
+#: usr/local/www/firewall_nat_out.php:331
+#: usr/local/www/firewall_nat_out.php:330
+msgid "(IPsec passthrough included)"
+msgstr "(IPsex passthrough incluso)"
+
+#: usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:329
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:335
+msgid "Manual Outbound NAT rule generation"
+msgstr "Geração manual de regra de Outbound NAT"
+
+#: usr/local/www/firewall_nat_out.php:318
+#: usr/local/www/firewall_nat_out.php:328
+#: usr/local/www/firewall_nat_out.php:329
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:335
+msgid "(AON - Advanced Outbound NAT)"
+msgstr "(AON - Outbound NAT Avançado)"
+
+#: usr/local/www/firewall_nat_out.php:336
+#: usr/local/www/firewall_nat_out.php:346
+#: usr/local/www/firewall_nat_out.php:347
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_out.php:353
+msgid "Mappings:"
+msgstr "Mapeamentos:"
+
+#: usr/local/www/firewall_nat_out.php:343
+#: usr/local/www/firewall_nat_out.php:353
+#: usr/local/www/firewall_nat_out.php:354 usr/local/www/diag_testport.php:129
+#: usr/local/www/diag_system_pftop.php:160
+#: usr/local/www/diag_logs_filter.php:167
+#: usr/local/www/firewall_nat_out.php:361
+#: usr/local/www/firewall_nat_out.php:360
+msgid "Source Port"
+msgstr "Porta de Origem"
+
+#: usr/local/www/firewall_nat_out.php:345
+#: usr/local/www/firewall_nat_out.php:355
+#: usr/local/www/firewall_nat_out.php:356
+#: usr/local/www/diag_system_pftop.php:153
+#: usr/local/www/diag_logs_filter.php:189
+#: usr/local/www/firewall_nat_out.php:363
+#: usr/local/www/firewall_nat_out.php:362
+msgid "Destination Port"
+msgstr "Porta de destino"
+
+#: usr/local/www/firewall_nat_out.php:346
+#: usr/local/www/firewall_nat_out.php:356
+#: usr/local/www/firewall_nat_out.php:357
+#: usr/local/www/firewall_nat_out.php:364
+#: usr/local/www/firewall_nat_out.php:363
+msgid "NAT Address"
+msgstr "Endereço NAT"
+
+#: usr/local/www/firewall_nat_out.php:347
+#: usr/local/www/firewall_nat_out.php:357
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_out.php:365
+#: usr/local/www/firewall_nat_out.php:364
+msgid "NAT Port"
+msgstr "Porta NAT"
+
+#: usr/local/www/firewall_nat_out.php:348
+#: usr/local/www/firewall_nat_out.php:358
+#: usr/local/www/firewall_nat_out.php:359
+#: usr/local/www/firewall_nat_out.php:366
+#: usr/local/www/firewall_nat_out.php:365
+msgid "Static Port"
+msgstr "Porta estática"
+
+#: usr/local/www/firewall_nat_out.php:354
+#: usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:364
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:365
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:459
+#: usr/local/www/firewall_nat_out.php:372
+#: usr/local/www/firewall_nat_out.php:466
+#: usr/local/www/firewall_nat_out.php:371
+#: usr/local/www/firewall_nat_out.php:465
+msgid "add new mapping"
+msgstr "adicionar nova mapeamento"
+
+#: usr/local/www/firewall_nat_out.php:425
+#: usr/local/www/firewall_nat_out.php:435
+#: usr/local/www/firewall_nat_out.php:436
+#: usr/local/www/firewall_nat_out.php:433
+#: usr/local/www/firewall_nat_out.php:440
+#: usr/local/www/firewall_nat_out.php:439
+msgid "YES"
+msgstr "SIM"
+
+#: usr/local/www/firewall_nat_out.php:427
+#: usr/local/www/firewall_nat_out.php:437
+#: usr/local/www/firewall_nat_out.php:438
+#: usr/local/www/firewall_nat_out.php:435
+#: usr/local/www/firewall_nat_out.php:442
+#: usr/local/www/firewall_nat_out.php:441
+msgid "NO"
+msgstr "Não"
+
+#: usr/local/www/firewall_nat_out.php:436
+#: usr/local/www/firewall_nat_out.php:447
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:445
+#: usr/local/www/firewall_nat_out.php:452
+#: usr/local/www/firewall_nat_out.php:451
+msgid "edit mapping"
+msgstr "editar mapeamento"
+
+#: usr/local/www/firewall_nat_out.php:439 usr/local/www/firewall_rules.php:435
+#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:492
+#: usr/local/www/firewall_rules.php:775 usr/local/www/firewall_nat.php:309
+#: usr/local/www/firewall_nat_out.php:446 usr/local/www/firewall_rules.php:429
+#: usr/local/www/firewall_rules.php:458 usr/local/www/firewall_rules.php:486
+#: usr/local/www/firewall_rules.php:772 usr/local/www/firewall_nat_out.php:447
+#: usr/local/www/firewall_nat.php:322 usr/local/www/firewall_rules.php:422
+#: usr/local/www/firewall_rules.php:451 usr/local/www/firewall_rules.php:479
+#: usr/local/www/firewall_rules.php:765 usr/local/www/firewall_nat_out.php:444
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_rules.php:421
+#: usr/local/www/firewall_rules.php:450 usr/local/www/firewall_rules.php:478
+#: usr/local/www/firewall_nat.php:325 usr/local/www/firewall_nat_out.php:450
+msgid "move selected rules before this rule"
+msgstr "mover as regras selecionada para antes desta regra"
+
+#: usr/local/www/firewall_nat_out.php:440 usr/local/www/firewall_nat.php:314
+#: usr/local/www/firewall_nat_out.php:451
+#: usr/local/www/firewall_nat_out.php:452 usr/local/www/firewall_nat.php:327
+#: usr/local/www/firewall_nat_out.php:449
+#: usr/local/www/firewall_nat_out.php:456 usr/local/www/firewall_nat.php:330
+#: usr/local/www/firewall_nat_out.php:455
+msgid "add a new NAT based on this one"
+msgstr "adicionar um nova regra de NAT baseada nesta"
+
+#: usr/local/www/firewall_nat_out.php:449
+#: usr/local/www/firewall_nat_out.php:460
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:458
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:464
+msgid "move selected mappings to end"
+msgstr "mover os mapeamentos selecionados para final"
+
+#: usr/local/www/firewall_nat_out.php:453 usr/local/www/firewall_rules.php:391
+#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:823
+#: usr/local/www/firewall_rules.php:824 usr/local/www/firewall_nat.php:209
+#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:332
+#: usr/local/www/firewall_nat.php:334 usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_rules.php:395 usr/local/www/firewall_rules.php:396
+#: usr/local/www/firewall_rules.php:825 usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat.php:214 usr/local/www/firewall_nat.php:216
+#: usr/local/www/firewall_nat.php:345 usr/local/www/firewall_nat.php:347
+#: usr/local/www/firewall_rules.php:388 usr/local/www/firewall_rules.php:389
+#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_rules.php:818
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469 usr/local/www/firewall_rules.php:386
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:819
+#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_nat.php:217
+#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:348
+#: usr/local/www/firewall_nat.php:350 usr/local/www/firewall_nat_out.php:468
+msgid "delete selected rules"
+msgstr "excluir regras selecionadas"
+
+#: usr/local/www/firewall_nat_out.php:453
+#: usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out.php:468
+msgid "delete selected mappings"
+msgstr "excluir mapeamentos selecionados"
+
+#: usr/local/www/firewall_nat_out.php:453
+#: usr/local/www/firewall_nat_out.php:464
+#: usr/local/www/firewall_nat_out.php:465
+#: usr/local/www/firewall_nat_out.php:462
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out.php:468
+msgid "Do you really want to delete the selected mappings?"
+msgstr "Você realmente deseja excluir os mapeamentos selecionados?"
+
+#: usr/local/www/firewall_nat_out.php:461
+#: usr/local/www/firewall_nat_out.php:472
+#: usr/local/www/firewall_nat_out.php:473
+#: usr/local/www/firewall_nat_out.php:470
+#: usr/local/www/firewall_nat_out.php:477
+#: usr/local/www/firewall_nat_out.php:476
+msgid "With automatic outbound NAT enabled, a mapping is automatically created for each interface's subnet (except WAN-type connections) and the rules on this page are ignored.<br/><br/> If manual outbound NAT is enabled, outbound NAT rules will not be automatically generated and only the mappings you specify on this page will be used. <br/><br/> If a target address other than an interface's IP address is used, then depending on the way the WAN connection is setup, a "
+msgstr "Com regras automáticas de saída NAT habilitadas, um mapeamento é automaticamente criado para a subrede de cada interface (exceto conexões WAN) e as regras nesta página são ignoradas.<br/><br/> Se geração manual de regras de saída NAT estiver habilitado, regras de saída NAT não serão geradas automaticamente e apenas os mapeamentos nesta página serão utilizados. <br/><br/> Se um endereço alvo diferente de endereços IP WAN são utilizados. dependendo de como a conexão WAN está configurada, um"
+
+#: usr/local/www/firewall_nat_out.php:469
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/carp_status.php:139
+#: usr/local/www/system_gateway_groups_edit.php:252
+#: usr/local/www/firewall_nat_out.php:480
+#: usr/local/www/firewall_nat_out_edit.php:601
+#: usr/local/www/system_gateway_groups_edit.php:312
+#: usr/local/www/firewall_nat_out.php:481 usr/local/www/carp_status.php:132
+#: usr/local/www/firewall_nat_out.php:478
+#: usr/local/www/firewall_nat_out_edit.php:604
+#: usr/local/www/firewall_nat_out.php:485
+#: usr/local/www/system_gateway_groups_edit.php:316
+#: usr/local/www/firewall_nat_out_edit.php:616
+#: usr/local/www/firewall_nat_out.php:484
+msgid "Virtual IP"
+msgstr "IP Virtual"
+
+#: usr/local/www/firewall_nat_out.php:470
+#: usr/local/www/firewall_nat_out.php:481
+#: usr/local/www/firewall_nat_out.php:482
+#: usr/local/www/firewall_nat_out.php:479
+#: usr/local/www/firewall_nat_out.php:486
+#: usr/local/www/firewall_nat_out.php:485
+msgid " may also be required."
+msgstr "pode ser necessário."
+
+#: usr/local/www/firewall_nat_out.php:472
+#: usr/local/www/firewall_nat_out.php:483
+#: usr/local/www/firewall_nat_out.php:484
+#: usr/local/www/firewall_nat_out.php:481
+#: usr/local/www/firewall_nat_out.php:488
+#: usr/local/www/firewall_nat_out.php:487
+msgid "To completely disable outbound NAT, switch to Manual Outbound NAT then delete any NAT rules that appear in the list."
+msgstr "Para desativar completamente o NAT de saída, mude para NAT de saída Manual e então exclua qualquer regra NAT que apareça na lista."
+
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_nat_out_edit.php:140
+msgid "Source bit count"
+msgstr "Contagem de bits de origem"
+
+#: usr/local/www/firewall_nat_out_edit.php:130
+#: usr/local/www/firewall_rules_edit.php:310
+#: usr/local/www/firewall_rules_edit.php:334
+#: usr/local/www/firewall_rules_edit.php:333
+#: usr/local/www/firewall_rules_edit.php:336
+#: usr/local/www/firewall_nat_out_edit.php:134
+#: usr/local/www/firewall_rules_edit.php:342
+#: usr/local/www/firewall_nat_out_edit.php:140
+msgid "Destination bit count"
+msgstr "Contagem de bits de destino"
+
+#: usr/local/www/firewall_nat_out_edit.php:137
+#: usr/local/www/firewall_nat_out_edit.php:150
+#: usr/local/www/firewall_nat_out_edit.php:154
+#: usr/local/www/firewall_nat_out_edit.php:160
+msgid "You must supply either a valid port or port alias for the source port entry."
+msgstr "Você deve fornecer uma porta válida ou um alias de porta para a entrada da porta de origem."
+
+#: usr/local/www/firewall_nat_out_edit.php:140
+#: usr/local/www/firewall_nat_out_edit.php:153
+#: usr/local/www/firewall_nat_out_edit.php:157
+#: usr/local/www/firewall_nat_out_edit.php:163
+msgid "You must supply either a valid port or port alias for the destination port entry."
+msgstr "Você deve fornecer uma porta válida ou um alias de porta para a entrada porta de destino."
+
+#: usr/local/www/firewall_nat_out_edit.php:143
+#: usr/local/www/firewall_nat_out_edit.php:156
+#: usr/local/www/firewall_nat_out_edit.php:160
+#: usr/local/www/firewall_nat_out_edit.php:166
+msgid "You must supply a valid port for the NAT port entry."
+msgstr "Você deve fornecer uma porta válida para a entrada porta NAT."
+
+#: usr/local/www/firewall_nat_out_edit.php:147
+#: usr/local/www/firewall_nat_out_edit.php:160
+#: usr/local/www/firewall_nat_out_edit.php:164
+#: usr/local/www/firewall_nat_out_edit.php:170
+msgid "A valid source must be specified."
+msgstr "Uma fonte válida deve ser especificada."
+
+#: usr/local/www/firewall_nat_out_edit.php:155
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:172
+#: usr/local/www/firewall_nat_out_edit.php:178
+msgid "A valid destination must be specified."
+msgstr "Um destino válido deve ser especificado."
+
+#: usr/local/www/firewall_nat_out_edit.php:163
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_nat_out_edit.php:180
+#: usr/local/www/firewall_nat_out_edit.php:186
+msgid "Negating destination address of \"any\" is invalid."
+msgstr "Negando o endereço de destino de \"qualquer\" é inválido."
+
+#: usr/local/www/firewall_nat_out_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:181
+#: usr/local/www/firewall_nat_out_edit.php:185
+#: usr/local/www/firewall_nat_out_edit.php:191
+msgid "A valid target IP address must be specified."
+msgstr "Endereço de IP de destino deve ser especificado."
+
+#: usr/local/www/firewall_nat_out_edit.php:173
+#: usr/local/www/firewall_nat_out_edit.php:186
+#: usr/local/www/firewall_nat_out_edit.php:190
+#: usr/local/www/firewall_nat_out_edit.php:196
+msgid "A valid target IP must be specified when using the 'Other Subnet' type."
+msgstr "Um endereço IP válido deve ser especificado quando usado 'Outros tipos de Sub-rede'."
+
+#: usr/local/www/firewall_nat_out_edit.php:176
+#: usr/local/www/firewall_nat_out_edit.php:189
+#: usr/local/www/firewall_nat_out_edit.php:193
+#: usr/local/www/firewall_nat_out_edit.php:199
+msgid "A valid target bit count must be specified when using the 'Other Subnet' type."
+msgstr "Um contador de bit válido de subrede deve ser especificado quando usado 'Outros tipos de Sub-rede'."
+
+#: usr/local/www/firewall_nat_out_edit.php:189
+#: usr/local/www/firewall_nat_out_edit.php:202
+#: usr/local/www/firewall_nat_out_edit.php:206
+#: usr/local/www/firewall_nat_out_edit.php:212
+msgid "Only Round Robin pool options may be chosen when selecting an alias."
+msgstr "Somente opções de pool Round Robin podem ser escolhidos quando selecionado um alias. "
+
+#: usr/local/www/firewall_nat_out_edit.php:403
+#: usr/local/www/firewall_nat_out_edit.php:416
+#: usr/local/www/firewall_nat_out_edit.php:420
+#: usr/local/www/firewall_nat_out_edit.php:432
+msgid "Edit Advanced Outbound NAT entry"
+msgstr "Editar entradas avançadas de Outbound NAT"
+
+#: usr/local/www/firewall_nat_out_edit.php:410
+#: usr/local/www/firewall_nat_out_edit.php:423
+#: usr/local/www/firewall_nat_out_edit.php:427
+#: usr/local/www/firewall_nat_out_edit.php:439
+msgid "Do not NAT"
+msgstr "Não faça NAT"
+
+#: usr/local/www/firewall_nat_out_edit.php:413
+#: usr/local/www/firewall_nat_out_edit.php:426
+#: usr/local/www/firewall_nat_out_edit.php:430
+#: usr/local/www/firewall_nat_out_edit.php:442
+msgid "Enabling this option will disable NAT for traffic matching this rule and stop processing Outbound NAT rules."
+msgstr "Habilitando essa opção, o NAT será desabilitado para tráfego que corresponda a essa regra e irá parar o processamento de regras Outbound NAT."
+
+#: usr/local/www/firewall_nat_out_edit.php:414
+#: usr/local/www/firewall_nat_out_edit.php:427
+#: usr/local/www/firewall_nat_out_edit.php:431
+#: usr/local/www/firewall_nat_out_edit.php:443
+msgid "Hint: in most cases, you won't use this option."
+msgstr "Dica: na maioria dos casos, você não vai usar esta opção."
+
+#: usr/local/www/firewall_nat_out_edit.php:463
+#: usr/local/www/firewall_nat_out_edit.php:476
+#: usr/local/www/firewall_nat_out_edit.php:480
+#: usr/local/www/firewall_nat_out_edit.php:492
+msgid "Choose which protocol this rule should match."
+msgstr "Escolha qual protocolo essa regra deve corresponder."
+
+#: usr/local/www/firewall_nat_out_edit.php:464
+#: usr/local/www/firewall_nat_out_edit.php:477
+#: usr/local/www/firewall_nat_out_edit.php:481
+#: usr/local/www/firewall_nat_out_edit.php:493
+#, php-format
+msgid "Hint: in most cases, you should specify %s any %s here."
+msgstr "Dica: na maioria dos casos, você deve especificar %s qualquer um %s aqui."
+
+#: usr/local/www/firewall_nat_out_edit.php:488
+#: usr/local/www/firewall_nat_out_edit.php:501
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:517
+#: usr/local/www/firewall_nat_out_edit.php:519
+msgid "Enter the source network for the outbound NAT mapping."
+msgstr "Informe a porta de origem para o mapeamento outbound NAT."
+
+#: usr/local/www/firewall_nat_out_edit.php:491
+#: usr/local/www/firewall_nat_out_edit.php:504
+#: usr/local/www/firewall_nat_out_edit.php:508
+#: usr/local/www/firewall_nat_out_edit.php:520
+#: usr/local/www/firewall_nat_out_edit.php:522
+msgid "Source port:"
+msgstr "Porta de origem:"
+
+#: usr/local/www/firewall_nat_out_edit.php:492
+#: usr/local/www/firewall_nat_out_edit.php:505
+#: usr/local/www/firewall_nat_out_edit.php:509
+#: usr/local/www/firewall_nat_out_edit.php:521
+msgid ""
+"(leave \n"
+"blank for any)"
+msgstr ""
+"(deixar \n"
+"em branco para qualquer um)"
+
+#: usr/local/www/firewall_nat_out_edit.php:526
+#: usr/local/www/firewall_nat_out_edit.php:539
+#: usr/local/www/firewall_nat_out_edit.php:543
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_nat_out_edit.php:556
+msgid "Enter the destination network for the outbound NAT mapping."
+msgstr "Digite a rede de destino para o mapeamento NAT de saída."
+
+#: usr/local/www/firewall_nat_out_edit.php:530
+#: usr/local/www/firewall_nat_out_edit.php:543
+#: usr/local/www/firewall_nat_out_edit.php:547
+#: usr/local/www/firewall_nat_out_edit.php:559
+#: usr/local/www/firewall_nat_out_edit.php:560
+msgid "Destination port:"
+msgstr "Porta de destino:"
+
+#: usr/local/www/firewall_nat_out_edit.php:531
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:548
+#: usr/local/www/firewall_nat_out_edit.php:560
+msgid ""
+"(leave blank for \n"
+"any)"
+msgstr ""
+"(deixe em branco \n"
+"para qualquer um)"
+
+#: usr/local/www/firewall_nat_out_edit.php:538
+#: usr/local/www/firewall_nat_out_edit.php:551
+#: usr/local/www/firewall_nat_out_edit.php:555
+#: usr/local/www/firewall_nat_out_edit.php:567
+msgid "Translation"
+msgstr "Tradução"
+
+#: usr/local/www/firewall_nat_out_edit.php:544
+#: usr/local/www/firewall_nat_out_edit.php:557
+#: usr/local/www/firewall_nat_out_edit.php:561
+#: usr/local/www/firewall_nat_out_edit.php:573
+msgid "Interface address"
+msgstr "Endereço da Interface"
+
+#: usr/local/www/firewall_nat_out_edit.php:568
+#: usr/local/www/firewall_nat_out_edit.php:581
+#: usr/local/www/firewall_nat_out_edit.php:585
+#: usr/local/www/firewall_nat_out_edit.php:597
+msgid "Other Subnet (Enter Below)"
+msgstr "Outra Sub-rede (Digite abaixo)"
+
+#: usr/local/www/firewall_nat_out_edit.php:575
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/firewall_nat_out_edit.php:591
+#: usr/local/www/firewall_nat_out_edit.php:603
+msgid "Other Subnet:"
+msgstr "Outra Sub-rede:"
+
+#: usr/local/www/firewall_nat_out_edit.php:586
+#: usr/local/www/firewall_nat_out_edit.php:599
+#: usr/local/www/firewall_nat_out_edit.php:602
+#: usr/local/www/firewall_nat_out_edit.php:614
+msgid "Packets matching this rule will be mapped to the IP address given here."
+msgstr "Pacotes que correspondam a essa regra serão mapeados para o endereço IP dado aqui."
+
+#: usr/local/www/firewall_nat_out_edit.php:587
+#: usr/local/www/firewall_nat_out_edit.php:600
+#: usr/local/www/firewall_nat_out_edit.php:603
+#: usr/local/www/firewall_nat_out_edit.php:615
+msgid "If you want this rule to apply to another IP address rather than the IP address of the interface chosen above, select it here (you will need to define "
+msgstr "Se você deseja que essa regra se aplique a um outro endereço IP ao invés do endereço IP da interface escolhida acima, selecione-o aqui (é necessário definir"
+
+#: usr/local/www/firewall_nat_out_edit.php:588
+#: usr/local/www/firewall_nat_out_edit.php:601
+#: usr/local/www/firewall_nat_out_edit.php:604
+#: usr/local/www/firewall_nat_out_edit.php:616
+msgid "addresses on the interface first)."
+msgstr "endereço na interface primeiro)."
+
+#: usr/local/www/firewall_nat_out_edit.php:589
+#: usr/local/www/firewall_nat_out_edit.php:602
+msgid "Also note that if you are trying to redirect connections on the LAN select the \"any\" option."
+msgstr "Também note que se você está tentando redirecionar as conexões da LAN selecione a opção \"nenhum\"."
+
+#: usr/local/www/firewall_nat_out_edit.php:605
+#: usr/local/www/firewall_nat_out_edit.php:618
+#: usr/local/www/firewall_nat_out_edit.php:620
+#: usr/local/www/firewall_nat_out_edit.php:632
+msgid "Only Round Robin types work with Host Aliases. Any type can be used with a Subnet."
+msgstr "Somente tipos Roun Robin funcionam com Host Aliases. Quanquer tipo pode ser usado com a Sub-rede."
+
+#: usr/local/www/firewall_nat_out_edit.php:606
+#: usr/local/www/firewall_nat_out_edit.php:619
+#: usr/local/www/firewall_nat_out_edit.php:621
+#: usr/local/www/firewall_nat_out_edit.php:633
+msgid "Round Robin: Loops through the translation addresses."
+msgstr "Round Robin: Loops através de tradução de endereços."
+
+#: usr/local/www/firewall_nat_out_edit.php:607
+#: usr/local/www/firewall_nat_out_edit.php:620
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:634
+msgid "Random: Selects an address from the translation address pool at random."
+msgstr "Randômico: Seleciona um endereço para traduzir ao pool."
+
+#: usr/local/www/firewall_nat_out_edit.php:608
+#: usr/local/www/firewall_nat_out_edit.php:621
+#: usr/local/www/firewall_nat_out_edit.php:623
+#: usr/local/www/firewall_nat_out_edit.php:635
+msgid "Source Hash: Uses a hash of the source address to determine the translation address, ensuring that the redirection address is always the same for a given source."
+msgstr "Fonte Hash: Use uma fonte hash para o endereço de origem para determinar a tradução do endereço, certificando que o redirecionamento do mesmo sempre será o mesmo para dada origem."
+
+#: usr/local/www/firewall_nat_out_edit.php:609
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:624
+#: usr/local/www/firewall_nat_out_edit.php:636
+msgid "Bitmask: Applies the subnet mask and keeps the last portion identical; 10.0.1.50 -&gt; x.x.x.50."
+msgstr "BItmask: Aplica a máscara de sub-rede e mantém a última parte idêntica; 10.0.1.50 -&gt; x.x.x.50."
+
+#: usr/local/www/firewall_nat_out_edit.php:610
+#: usr/local/www/firewall_nat_out_edit.php:623
+#: usr/local/www/firewall_nat_out_edit.php:625
+#: usr/local/www/firewall_nat_out_edit.php:637
+msgid "Sticky Address: The Sticky Address option can be used with the Random and Round Robin pool types to ensure that a particular source address is always mapped to the same translation address."
+msgstr "Endereço Stick: A opção de Endereço Stick pode ser usada com o modo Randômico ou Round Robin para garantir que um determinado endereço de origem é sempre mapeado para o endereço mesma tradução."
+
+#: usr/local/www/firewall_nat_out_edit.php:615
+#: usr/local/www/firewall_nat_out_edit.php:628
+#: usr/local/www/firewall_nat_out_edit.php:630
+#: usr/local/www/firewall_nat_out_edit.php:642
+msgid "Port:"
+msgstr "Porta:"
+
+#: usr/local/www/firewall_nat_out_edit.php:619
+#: usr/local/www/firewall_nat_out_edit.php:632
+#: usr/local/www/firewall_nat_out_edit.php:634
+#: usr/local/www/firewall_nat_out_edit.php:646
+msgid "Enter the source port for the outbound NAT mapping."
+msgstr "Informe a porta de origem para o mapeamento outbound NAT."
+
+#: usr/local/www/firewall_nat_out_edit.php:622
+#: usr/local/www/firewall_nat_out_edit.php:635
+#: usr/local/www/firewall_nat_out_edit.php:637
+#: usr/local/www/firewall_nat_out_edit.php:649
+msgid "Static-port:"
+msgstr "Porta-estática:"
+
+#: usr/local/www/firewall_nat_out_edit.php:632
+#: usr/local/www/firewall_nat_out_edit.php:645
+msgid "HINT: This prevents the rule from automatically syncing to other CARP members."
+msgstr "Dica: Isso previne a regra de sincronizar automaticamente com outros membros CARP."
+
+#: usr/local/www/firewall_rules.php:52
+#: usr/local/www/firewall_rules_edit.php:628 usr/local/www/fbegin.inc:112
+#: usr/local/www/fbegin.inc:129 usr/local/www/firewall_rules_edit.php:660
+#: usr/local/www/fbegin.inc:138 usr/local/www/firewall_rules_edit.php:661
+#: usr/local/www/firewall_rules.php:49
+#: usr/local/www/firewall_rules_edit.php:664
+#: usr/local/www/diag_system_pftop.php:139 usr/local/www/fbegin.inc:130
+#: usr/local/www/firewall_rules_edit.php:676
+#: usr/local/www/firewall_rules_edit.php:724
+msgid "Rules"
+msgstr "Regras"
+
+#: usr/local/www/firewall_rules.php:129
+#: usr/local/www/firewall_rules_edit.php:828
+#: usr/local/www/firewall_rules_edit.php:863
+#: usr/local/www/firewall_rules.php:127
+#: usr/local/www/firewall_rules_edit.php:866
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:925
+msgid "Echo request"
+msgstr "Requisição Echo"
+
+#: usr/local/www/firewall_rules.php:130
+#: usr/local/www/firewall_rules_edit.php:829
+#: usr/local/www/firewall_rules_edit.php:864
+#: usr/local/www/firewall_rules.php:128
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:926
+msgid "Echo reply"
+msgstr "Resposta Echo"
+
+#: usr/local/www/firewall_rules.php:131
+#: usr/local/www/firewall_rules_edit.php:830
+#: usr/local/www/firewall_rules_edit.php:865
+#: usr/local/www/firewall_rules.php:129
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:927
+msgid "Destination unreachable"
+msgstr "Destino inalcansável"
+
+#: usr/local/www/firewall_rules.php:132
+#: usr/local/www/firewall_rules_edit.php:831
+#: usr/local/www/firewall_rules_edit.php:866
+#: usr/local/www/firewall_rules.php:130
+#: usr/local/www/firewall_rules_edit.php:869
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:928
+msgid "Source quench"
+msgstr "Source quench"
+
+#: usr/local/www/firewall_rules.php:133
+#: usr/local/www/firewall_rules_edit.php:832
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules.php:131
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules_edit.php:882
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:929
+msgid "Redirect"
+msgstr "Redirecionamento"
+
+#: usr/local/www/firewall_rules.php:134
+#: usr/local/www/firewall_rules_edit.php:833
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules.php:132
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:883
+#: usr/local/www/firewall_rules_edit.php:882
+#: usr/local/www/firewall_rules_edit.php:930
+msgid "Alternate Host"
+msgstr "Host alternativo"
+
+#: usr/local/www/firewall_rules.php:135
+#: usr/local/www/firewall_rules_edit.php:834
+#: usr/local/www/firewall_rules_edit.php:869
+#: usr/local/www/firewall_rules.php:133
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:884
+#: usr/local/www/firewall_rules_edit.php:883
+#: usr/local/www/firewall_rules_edit.php:931
+msgid "Router advertisement"
+msgstr "Router advertisement"
+
+#: usr/local/www/firewall_rules.php:136
+#: usr/local/www/firewall_rules_edit.php:835
+#: usr/local/www/firewall_rules_edit.php:870
+#: usr/local/www/firewall_rules.php:134
+#: usr/local/www/firewall_rules_edit.php:873
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:884
+#: usr/local/www/firewall_rules_edit.php:932
+msgid "Router solicitation"
+msgstr "Solicitação do roteador"
+
+#: usr/local/www/firewall_rules.php:137
+#: usr/local/www/firewall_rules_edit.php:836
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules.php:135
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:933
+msgid "Time exceeded"
+msgstr "Tempo excedido"
+
+#: usr/local/www/firewall_rules.php:138
+#: usr/local/www/firewall_rules_edit.php:837
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules.php:136
+#: usr/local/www/firewall_rules_edit.php:875
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:934
+msgid "Invalid IP header"
+msgstr "Cabeçalho de IP inválido"
+
+#: usr/local/www/firewall_rules.php:139
+#: usr/local/www/firewall_rules_edit.php:838
+#: usr/local/www/firewall_rules_edit.php:873
+#: usr/local/www/firewall_rules.php:137
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:888
+#: usr/local/www/firewall_rules_edit.php:887
+#: usr/local/www/firewall_rules_edit.php:935
+msgid "Timestamp"
+msgstr "Timestamp"
+
+#: usr/local/www/firewall_rules.php:140
+#: usr/local/www/firewall_rules_edit.php:839
+#: usr/local/www/firewall_rules_edit.php:874
+#: usr/local/www/firewall_rules.php:138
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:888
+#: usr/local/www/firewall_rules_edit.php:936
+msgid "Timestamp reply"
+msgstr "Resposta de timestamp"
+
+#: usr/local/www/firewall_rules.php:141
+#: usr/local/www/firewall_rules_edit.php:840
+#: usr/local/www/firewall_rules_edit.php:875
+#: usr/local/www/firewall_rules.php:139
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:937
+msgid "Information request"
+msgstr "Requisição de informação"
+
+#: usr/local/www/firewall_rules.php:142
+#: usr/local/www/firewall_rules_edit.php:841
+#: usr/local/www/firewall_rules_edit.php:876
+#: usr/local/www/firewall_rules.php:140
+#: usr/local/www/firewall_rules_edit.php:879
+#: usr/local/www/firewall_rules_edit.php:891
+#: usr/local/www/firewall_rules_edit.php:890
+#: usr/local/www/firewall_rules_edit.php:938
+msgid "Information reply"
+msgstr "Resposta de informação"
+
+#: usr/local/www/firewall_rules.php:143
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:877
+#: usr/local/www/firewall_rules.php:141
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/firewall_rules_edit.php:892
+#: usr/local/www/firewall_rules_edit.php:891
+#: usr/local/www/firewall_rules_edit.php:939
+msgid "Address mask request"
+msgstr "Requisição de máscara de endereço"
+
+#: usr/local/www/firewall_rules.php:144
+#: usr/local/www/firewall_rules_edit.php:843
+#: usr/local/www/firewall_rules_edit.php:878
+#: usr/local/www/firewall_rules.php:142
+#: usr/local/www/firewall_rules_edit.php:881
+#: usr/local/www/firewall_rules_edit.php:893
+#: usr/local/www/firewall_rules_edit.php:892
+#: usr/local/www/firewall_rules_edit.php:940
+msgid "Address mask reply"
+msgstr "Resposta de máscara de endereço"
+
+#: usr/local/www/firewall_rules.php:201 usr/local/www/firewall_rules.php:205
+#: usr/local/www/firewall_rules.php:203
+#, php-format
+msgid "The settings have been applied. The firewall rules are now reloading in the background.<br/>You can also %s monitor %s the reload progress"
+msgstr "As configurações foram aplicadas. As regras de firewall estão recarregando em background agora. <br/>Você também pode %s monitorar %s o progresso."
+
+#: usr/local/www/firewall_rules.php:315 usr/local/www/firewall_rules.php:317
+#: usr/local/www/firewall_rules.php:319 usr/local/www/firewall_rules.php:321
+#: usr/local/www/firewall_rules.php:312 usr/local/www/firewall_rules.php:314
+msgid "The firewall rule configuration has been changed.<br/>You must apply the changes in order for them to take effect."
+msgstr "A configuração de regra do firewall foi modificada.<br/>Você deve aplicar as modificações para que elas tenham efeito."
+
+#: usr/local/www/firewall_rules.php:338 usr/local/www/firewall_rules.php:342
+#: usr/local/www/firewall_rules.php:335 usr/local/www/firewall_rules.php:334
+msgid "Floating"
+msgstr "Flutuante"
+
+#: usr/local/www/firewall_rules.php:359
+#: usr/local/www/load_balancer_relay_action_edit.php:510
+#: usr/local/www/load_balancer_relay_action_edit.php:509
+#: usr/local/www/firewall_rules.php:363
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/firewall_rules.php:356 usr/local/www/firewall_rules.php:354
+msgid "ID"
+msgstr "ID"
+
+#: usr/local/www/firewall_rules.php:368
+#: usr/local/www/firewall_rules_edit.php:1288 usr/local/www/interfaces.php:420
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1382
+#: usr/local/www/system_routes.php:127 usr/local/www/system_routes_edit.php:91
+#: usr/local/www/system_routes_edit.php:199
+#: usr/local/www/services_dhcp.php:655 usr/local/www/status_gateways.php:73
+#: usr/local/www/system_gateways.php:154
+#: usr/local/www/system_gateways_edit.php:376
+#: usr/local/www/services_dhcpv6.php:599
+#: usr/local/www/system_routes_edit.php:92
+#: usr/local/www/system_routes_edit.php:231
+#: usr/local/www/firewall_rules_edit.php:1355
+#: usr/local/www/firewall_rules.php:372
+#: usr/local/www/system_gateways_edit.php:397
+#: usr/local/www/services_dhcp.php:668 usr/local/www/interfaces.php:456
+#: usr/local/www/interfaces.php:509 usr/local/www/interfaces.php:1486
+#: usr/local/www/system_routes_edit.php:232
+#: usr/local/www/firewall_rules.php:365
+#: usr/local/www/system_gateways_edit.php:503
+#: usr/local/www/status_gateways.php:74 usr/local/www/services_dhcp.php:844
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:1474
+#: usr/local/www/system_gateways_edit.php:506
+#: usr/local/www/firewall_rules_edit.php:1370
+#: usr/local/www/services_dhcp_edit.php:410
+#: usr/local/www/diag_traceroute.php:98 usr/local/www/system_routes.php:131
+#: usr/local/www/services_dhcp.php:858 usr/local/www/interfaces.php:441
+#: usr/local/www/interfaces.php:494 usr/local/www/interfaces.php:1487
+#: usr/local/www/system_gateways_edit.php:508
+#: usr/local/www/firewall_rules_edit.php:1377
+#: usr/local/www/services_dhcp.php:878 usr/local/www/system_routes_edit.php:95
+#: usr/local/www/system_routes_edit.php:259
+#: usr/local/www/firewall_rules.php:363 usr/local/www/interfaces.php:446
+#: usr/local/www/interfaces.php:499 usr/local/www/interfaces.php:1532
+#: usr/local/www/system_gateways_edit.php:538
+#: usr/local/www/firewall_rules_edit.php:1388
+#: usr/local/www/system_routes.php:147
+#: usr/local/www/system_routes_edit.php:261 usr/local/www/interfaces.php:442
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1526
+#: usr/local/www/system_routes_edit.php:97
+#: usr/local/www/system_routes_edit.php:263
+#: usr/local/www/firewall_rules_edit.php:1436
+#: usr/local/www/services_dhcp.php:890 usr/local/www/interfaces.php:445
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:1539
+msgid "Gateway"
+msgstr "Gateway"
+
+#: usr/local/www/firewall_rules.php:369 usr/local/www/status_queues.php:135
+#: usr/local/www/status_queues.php:142 usr/local/www/firewall_rules.php:373
+#: usr/local/www/status_queues.php:143 usr/local/www/firewall_rules.php:366
+#: usr/local/www/diag_system_pftop.php:138 usr/local/www/status_queues.php:148
+#: usr/local/www/firewall_rules.php:364 usr/local/www/status_queues.php:164
+msgid "Queue"
+msgstr "FILA"
+
+#: usr/local/www/firewall_rules.php:370
+#: usr/local/www/firewall_rules_edit.php:1261
+#: usr/local/www/firewall_rules_edit.php:1328
+#: usr/local/www/firewall_rules.php:374 usr/local/www/firewall_rules.php:367
+#: usr/local/www/firewall_rules_edit.php:1343
+#: usr/local/www/firewall_rules_edit.php:1350
+#: usr/local/www/firewall_rules.php:365
+#: usr/local/www/firewall_rules_edit.php:1361
+#: usr/local/www/firewall_rules_edit.php:1409
+msgid "Schedule"
+msgstr "Agenda"
+
+#: usr/local/www/firewall_rules.php:392 usr/local/www/firewall_rules.php:824
+#: usr/local/www/firewall_nat.php:211 usr/local/www/firewall_nat.php:334
+#: usr/local/www/firewall_rules.php:396 usr/local/www/firewall_rules.php:825
+#: usr/local/www/firewall_nat.php:216 usr/local/www/firewall_nat.php:347
+#: usr/local/www/firewall_rules.php:389 usr/local/www/firewall_rules.php:818
+#: usr/local/www/firewall_rules.php:387 usr/local/www/firewall_rules.php:820
+#: usr/local/www/firewall_nat.php:219 usr/local/www/firewall_nat.php:350
+msgid "Do you really want to delete the selected rules?"
+msgstr "Você realmente quer apagar as regras selecionadas?"
+
+#: usr/local/www/firewall_rules.php:394 usr/local/www/firewall_rules.php:794
+#: usr/local/www/firewall_rules.php:826 usr/local/www/firewall_rules.php:398
+#: usr/local/www/firewall_rules.php:795 usr/local/www/firewall_rules.php:827
+#: usr/local/www/firewall_rules.php:391 usr/local/www/firewall_rules.php:788
+#: usr/local/www/firewall_rules.php:820 usr/local/www/firewall_rules.php:390
+#: usr/local/www/firewall_rules.php:789 usr/local/www/firewall_rules.php:823
+msgid "add new rule"
+msgstr "adicionar nova regra"
+
+#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:425
+#: usr/local/www/firewall_rules.php:418 usr/local/www/firewall_rules.php:417
+msgid "Anti-Lockout Rule"
+msgstr "Regra Anti-Lockout"
+
+#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:469
+#: usr/local/www/firewall_rules.php:497 usr/local/www/firewall_rules.php:780
+#: usr/local/www/firewall_rules.php:434 usr/local/www/firewall_rules.php:463
+#: usr/local/www/firewall_rules.php:491 usr/local/www/firewall_rules.php:777
+#: usr/local/www/firewall_rules.php:427 usr/local/www/firewall_rules.php:456
+#: usr/local/www/firewall_rules.php:484 usr/local/www/firewall_rules.php:770
+#: usr/local/www/firewall_rules.php:426 usr/local/www/firewall_rules.php:455
+#: usr/local/www/firewall_rules.php:483
+msgid "add a new rule based on this one"
+msgstr "adicionar uma nova regra baseada nesta"
+
+#: usr/local/www/firewall_rules.php:453 usr/local/www/firewall_rules.php:447
+#: usr/local/www/firewall_rules.php:440 usr/local/www/firewall_rules.php:439
+msgid "RFC 1918 networks"
+msgstr "Redes RFC 1918"
+
+#: usr/local/www/firewall_rules.php:460 usr/local/www/interfaces.php:2414
+#: usr/local/www/firewall_rules.php:454 usr/local/www/interfaces.php:2615
+#: usr/local/www/firewall_rules.php:447 usr/local/www/interfaces.php:2603
+#: usr/local/www/interfaces.php:2633 usr/local/www/firewall_rules.php:446
+#: usr/local/www/interfaces.php:2679 usr/local/www/interfaces.php:2668
+#: usr/local/www/interfaces.php:2704
+msgid "Block private networks"
+msgstr "Bloquear redes privadas"
+
+#: usr/local/www/firewall_rules.php:481 usr/local/www/firewall_rules.php:475
+#: usr/local/www/firewall_rules.php:468 usr/local/www/firewall_rules.php:467
+msgid "Reserved/not assigned by IANA"
+msgstr "Reservado/não atribuído por IANA"
+
+#: usr/local/www/firewall_rules.php:488 usr/local/www/interfaces.php:2426
+#: usr/local/www/firewall_rules.php:482 usr/local/www/interfaces.php:2627
+#: usr/local/www/firewall_rules.php:475 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2645 usr/local/www/firewall_rules.php:474
+#: usr/local/www/interfaces.php:2691 usr/local/www/interfaces.php:2680
+#: usr/local/www/interfaces.php:2716
+msgid "Block bogon networks"
+msgstr "Bloquear redes bogon"
+
+#: usr/local/www/firewall_rules.php:513 usr/local/www/firewall_rules.php:507
+#: usr/local/www/firewall_rules.php:500 usr/local/www/firewall_rules.php:499
+msgid "advanced settings set"
+msgstr "conjunto de configurações avançadas"
+
+#: usr/local/www/firewall_rules.php:537 usr/local/www/firewall_rules.php:531
+#: usr/local/www/firewall_rules.php:524
+msgid "click to toggle enabled/disabled status"
+msgstr "clique para alternar o status entre habilitado/desabilitado"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:846
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:845
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+msgid "Mon"
+msgstr "Seg"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560
+#: usr/local/www/firewall_rules.php:561
+msgid "Tues"
+msgstr "Ter"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:848
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:847
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+msgid "Wed"
+msgstr "Qua"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_rules.php:567 usr/local/www/firewall_rules.php:560
+#: usr/local/www/firewall_rules.php:561
+msgid "Thur"
+msgstr "Qui"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:850
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:849
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+msgid "Fri"
+msgstr "Sex"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:851
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:850
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+msgid "Sat"
+msgstr "Sab"
+
+#: usr/local/www/firewall_rules.php:573 usr/local/www/firewall_schedule.php:43
+#: usr/local/www/firewall_schedule_edit.php:69
+#: usr/local/www/firewall_schedule_edit.php:852
+#: usr/local/www/firewall_rules.php:567
+#: usr/local/www/firewall_schedule_edit.php:851
+#: usr/local/www/firewall_rules.php:560 usr/local/www/firewall_rules.php:561
+msgid "Sun"
+msgstr "Dom"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "January"
+msgstr "Janeiro"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "February"
+msgstr "Fevereiro"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "March"
+msgstr "Março"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "April"
+msgstr "Abril"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "May"
+msgstr "Maio"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "June"
+msgstr "Junho"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "July"
+msgstr "Julho"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "August"
+msgstr "Agosto"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "September"
+msgstr "Setembro"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "October"
+msgstr "Outubro"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "November"
+msgstr "Novembro"
+
+#: usr/local/www/firewall_rules.php:574 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:70
+#: usr/local/www/firewall_rules.php:568 usr/local/www/firewall_rules.php:561
+#: usr/local/www/firewall_rules.php:562
+msgid "December"
+msgstr "Dezembro"
+
+#: usr/local/www/firewall_rules.php:685 usr/local/www/firewall_rules.php:679
+#: usr/local/www/firewall_rules.php:672 usr/local/www/firewall_rules.php:671
+msgid "Traffic matching this rule is currently being denied"
+msgstr "Tráfego correspondente a essa regra está atualmente sendo negado"
+
+#: usr/local/www/firewall_rules.php:690 usr/local/www/firewall_rules.php:684
+#: usr/local/www/firewall_rules.php:677 usr/local/www/firewall_rules.php:674
+msgid "Traffic matching this rule is currently being allowed"
+msgstr "Tráfego correspondente a essa regra está sendo atualmente permitido"
+
+#: usr/local/www/firewall_rules.php:700 usr/local/www/firewall_rules.php:694
+#: usr/local/www/firewall_rules.php:687 usr/local/www/firewall_rules.php:682
+msgid "This rule is not currently active because its period has expired"
+msgstr "Essa regra não está ativa no momento porque seu período expirou"
+
+#: usr/local/www/firewall_rules.php:792 usr/local/www/firewall_rules.php:785
+#: usr/local/www/firewall_rules.php:786
+msgid "No rules are currently defined for this interface"
+msgstr "Nenhuma regra está definida para essa interface atualmente"
+
+#: usr/local/www/firewall_rules.php:793 usr/local/www/firewall_rules.php:786
+#: usr/local/www/firewall_rules.php:787
+msgid "All incoming connections on this interface will be blocked until you add pass rules."
+msgstr "Todas as conexões de entrada nessa interface serão bloqueadas até que você adicione regras de liberação."
+
+#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795
+#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789
+msgid "Click the"
+msgstr "Clique em"
+
+#: usr/local/www/firewall_rules.php:794 usr/local/www/firewall_rules.php:795
+#: usr/local/www/firewall_rules.php:788 usr/local/www/firewall_rules.php:789
+msgid " button to add a new rule."
+msgstr " para adicionar uma nova regra."
+
+#: usr/local/www/firewall_rules.php:817 usr/local/www/firewall_nat.php:327
+#: usr/local/www/firewall_rules.php:818 usr/local/www/firewall_nat.php:340
+#: usr/local/www/firewall_rules.php:811 usr/local/www/firewall_rules.php:813
+#: usr/local/www/firewall_nat.php:343
+msgid "move selected rules to end"
+msgstr "mover regras selecionadas para o fim"
+
+#: usr/local/www/firewall_rules.php:835 usr/local/www/firewall_nat.php:345
+#: usr/local/www/firewall_rules.php:836 usr/local/www/firewall_nat.php:358
+#: usr/local/www/firewall_rules.php:829 usr/local/www/firewall_rules.php:832
+#: usr/local/www/firewall_nat.php:361
+msgid "pass"
+msgstr "liberar"
+
+#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:839
+#: usr/local/www/firewall_rules.php:832 usr/local/www/firewall_rules.php:835
+msgid "block"
+msgstr "bloquear"
+
+#: usr/local/www/firewall_rules.php:841 usr/local/www/license.php:125
+#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:835
+#: usr/local/www/firewall_rules.php:838
+msgid "reject"
+msgstr "rejeitar"
+
+#: usr/local/www/firewall_rules.php:844 usr/local/www/firewall_rules.php:845
+#: usr/local/www/firewall_rules.php:838 usr/local/www/firewall_rules.php:841
+msgid "log"
+msgstr "log"
+
+#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:849
+#: usr/local/www/firewall_rules.php:842 usr/local/www/firewall_rules.php:845
+msgid "pass (disabled)"
+msgstr "liberação (desabilitado)"
+
+#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:852
+#: usr/local/www/firewall_rules.php:845 usr/local/www/firewall_rules.php:848
+msgid "block (disabled)"
+msgstr "bloqueio (desabilitado)"
+
+#: usr/local/www/firewall_rules.php:854 usr/local/www/firewall_rules.php:855
+#: usr/local/www/firewall_rules.php:848 usr/local/www/firewall_rules.php:851
+msgid "reject (disabled)"
+msgstr "rejeitado (desabilitado)"
+
+#: usr/local/www/firewall_rules.php:857 usr/local/www/firewall_rules.php:858
+#: usr/local/www/firewall_rules.php:851 usr/local/www/firewall_rules.php:854
+msgid "log (disabled)"
+msgstr "log (desabilitado)"
+
+#: usr/local/www/firewall_rules.php:863
+#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:354
+#: usr/local/www/vpn_l2tp.php:371 usr/local/www/firewall_rules.php:864
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/firewall_rules.php:857 usr/local/www/vpn_l2tp.php:355
+#: usr/local/www/vpn_l2tp.php:372 usr/local/www/load_balancer_pool.php:147
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:375
+#: usr/local/www/firewall_rules.php:860
+msgid "Hint:"
+msgstr "Dica:"
+
+#: usr/local/www/firewall_rules.php:867 usr/local/www/firewall_rules.php:868
+#: usr/local/www/firewall_rules.php:861 usr/local/www/firewall_rules.php:864
+msgid "Rules are evaluated on a first-match basis (i.e. the action of the first rule to match a packet will be executed). This means that if you use block rules, you'll have to pay attention to the rule order. Everything that isn't explicitly passed is blocked by default. "
+msgstr "Regras são avaliadas na primeira correspondência (i.e. a ação da primeira regra que corresponder a um pacote será executada). Isso significa que se você usar regras de bloquei, você terá que prestar atenção da ordem das regras. Tudo que não estiver explícitamente liberado é bloqueado por padrão."
+
+#: usr/local/www/firewall_rules.php:874 usr/local/www/firewall_rules.php:875
+#: usr/local/www/firewall_rules.php:868 usr/local/www/firewall_rules.php:871
+msgid "Floating rules are evaluated on a first-match basis (i.e. the action of the first rule to match a packet will be executed) only if the 'quick' option is checked on a rule. Otherwise they will only apply if no other rules match. Pay close attention to the rule order and options chosen. If no rule here matches, the per-interface or default rules are used. "
+msgstr "Regras flutuantes são avaliadas com base no first-match (ex.: a ação da primeira regra que corresponder a um pacote será executada) apenas se a opção 'quick' estiver marcada em uma regra. Caso contrário elas serão aplicadas apenas se nenhuma outra regra corresponder. Preste muita atenção na ordem das regras e opções escolhidas. Se nenhuma regra corresponder, as regras por interface ou padrão serão usadas."
+
+#: usr/local/www/firewall_rules_edit.php:201
+#: usr/local/www/firewall_rules_edit.php:210
+msgid "Reject type rules only works when the protocol is set to TCP."
+msgstr "Tipo de regras rejeitadas somente funcionam quando o protocolo é configurado para TCP."
+
+#: usr/local/www/firewall_rules_edit.php:204
+#: usr/local/www/firewall_rules_edit.php:213
+#: usr/local/www/firewall_rules_edit.php:210
+msgid "Queue type rules only work with queues."
+msgstr "Regras do tipo fila só funcionam com filas."
+
+#: usr/local/www/firewall_rules_edit.php:212
+#: usr/local/www/firewall_rules_edit.php:227
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:228
+msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule"
+msgstr "Você não pode associar um grupo de gateways IPv4 a um endereço da família IPv6"
+
+#: usr/local/www/firewall_rules_edit.php:215
+#: usr/local/www/firewall_rules_edit.php:230
+#: usr/local/www/firewall_rules_edit.php:228
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:231
+msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule"
+msgstr "Você não pode associar um grupo de gateways IPv6 a um endereço da família IPv4"
+
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:240
+#: usr/local/www/firewall_rules_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:236
+#: usr/local/www/firewall_rules_edit.php:242
+msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule"
+msgstr "Você não pode associar um gateway IPv4 a uma regra de filtro IPv6"
+
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:243
+#: usr/local/www/firewall_rules_edit.php:242
+#: usr/local/www/firewall_rules_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:245
+msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule"
+msgstr "Você não pode associar um gateway IPv6 a uma regra de filtro IPv4"
+
+#: usr/local/www/firewall_rules_edit.php:297
+#: usr/local/www/firewall_rules_edit.php:321
+#: usr/local/www/firewall_rules_edit.php:320
+#: usr/local/www/firewall_rules_edit.php:323
+#: usr/local/www/firewall_rules_edit.php:329
+#, php-format
+msgid "%s is only valid with protocol TCP."
+msgstr "%s é válido somente com o protocolo TCP."
+
+#: usr/local/www/firewall_rules_edit.php:299
+#: usr/local/www/firewall_rules_edit.php:323
+#: usr/local/www/firewall_rules_edit.php:322
+#: usr/local/www/firewall_rules_edit.php:325
+#: usr/local/www/firewall_rules_edit.php:331
+#, php-format
+msgid "%s is only valid if the gateway is set to 'default'."
+msgstr "%s somente é valido se o gateway estiver configurado para 'padrão'."
+
+#: usr/local/www/firewall_rules_edit.php:327
+#: usr/local/www/firewall_rules_edit.php:351
+#: usr/local/www/firewall_rules_edit.php:350
+#: usr/local/www/firewall_rules_edit.php:353
+#: usr/local/www/firewall_rules_edit.php:359
+#, php-format
+msgid "%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."
+msgstr "%s não é um fim de porta de origem válido. Ele deve ser um alias de porta ou um inteiro entre 1 e 65535."
+
+#: usr/local/www/firewall_rules_edit.php:381
+#: usr/local/www/firewall_rules_edit.php:410
+#: usr/local/www/firewall_rules_edit.php:409
+#: usr/local/www/firewall_rules_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:418
+#, php-format
+msgid "The Source IP address %s Address Family differs from the destination %s."
+msgstr "A família do endereço IP de origem %s defere do destino %s."
+
+#: usr/local/www/firewall_rules_edit.php:383
+#: usr/local/www/firewall_rules_edit.php:412
+#: usr/local/www/firewall_rules_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:420
+msgid "You can not use IPv6 addresses in IPv4 rules."
+msgstr "Você não pode usar endereços IPv6 em regras IPv4."
+
+#: usr/local/www/firewall_rules_edit.php:385
+#: usr/local/www/firewall_rules_edit.php:414
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:422
+msgid "You can not use IPv4 addresses in IPv6 rules."
+msgstr "Você não pode utilizar endereços IPv4 em regras IPv6."
+
+#: usr/local/www/firewall_rules_edit.php:402
+#: usr/local/www/firewall_rules_edit.php:434
+#: usr/local/www/firewall_rules_edit.php:433
+#: usr/local/www/firewall_rules_edit.php:436
+#: usr/local/www/firewall_rules_edit.php:442
+msgid "OS detection is only valid with protocol TCP."
+msgstr "Detecção de OS somente é válida com o protocolo tcp."
+
+#: usr/local/www/firewall_rules_edit.php:406
+#: usr/local/www/firewall_rules_edit.php:438
+#: usr/local/www/firewall_rules_edit.php:437
+#: usr/local/www/firewall_rules_edit.php:440
+#: usr/local/www/firewall_rules_edit.php:446
+msgid "You have to select a queue when you select an acknowledge queue too."
+msgstr "Você selecionou uma fila quando selecionou uma fila de reconhecimento também."
+
+#: usr/local/www/firewall_rules_edit.php:408
+#: usr/local/www/firewall_rules_edit.php:440
+#: usr/local/www/firewall_rules_edit.php:439
+#: usr/local/www/firewall_rules_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:448
+msgid "Acknowledge queue and Queue cannot be the same."
+msgstr "Fila de reconhecimento e a Fila não podem ser a mesma."
+
+#: usr/local/www/firewall_rules_edit.php:411
+#: usr/local/www/firewall_rules_edit.php:443
+#: usr/local/www/firewall_rules_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:445
+#: usr/local/www/firewall_rules_edit.php:451
+msgid "You can not use limiters in Floating rules without choosing a direction."
+msgstr "Você não pode usar limites em regras Flutuantes sem escolher uma direção."
+
+#: usr/local/www/firewall_rules_edit.php:413
+#: usr/local/www/firewall_rules_edit.php:445
+#: usr/local/www/firewall_rules_edit.php:444
+#: usr/local/www/firewall_rules_edit.php:447
+#: usr/local/www/firewall_rules_edit.php:453
+msgid "You can not use gateways in Floating rules without choosing a direction."
+msgstr "Você não pode usar gateways em regras Flutuantes sem escolher uma direção."
+
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:448
+#: usr/local/www/firewall_rules_edit.php:447
+#: usr/local/www/firewall_rules_edit.php:450
+#: usr/local/www/firewall_rules_edit.php:456
+msgid "You must select a queue for the In direction before selecting one for Out too."
+msgstr "Você deve selecionar uma fila para a direção de Dentro antes de selecionar para Fora também."
+
+#: usr/local/www/firewall_rules_edit.php:418
+#: usr/local/www/firewall_rules_edit.php:450
+#: usr/local/www/firewall_rules_edit.php:449
+#: usr/local/www/firewall_rules_edit.php:452
+#: usr/local/www/firewall_rules_edit.php:458
+msgid "In and Out Queue cannot be the same."
+msgstr "Filas para Dentro e Fora não podem ser a mesma."
+
+#: usr/local/www/firewall_rules_edit.php:420
+#: usr/local/www/firewall_rules_edit.php:422
+#: usr/local/www/firewall_rules_edit.php:452
+#: usr/local/www/firewall_rules_edit.php:454
+#: usr/local/www/firewall_rules_edit.php:451
+#: usr/local/www/firewall_rules_edit.php:453
+#: usr/local/www/firewall_rules_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:462
+msgid "You cannot select one queue and one virtual interface for IN and Out. both must be from the same type."
+msgstr "Você não pode selecionar uma fila e uma interface virtual para Entrada e Saída. As duas devem ser do mesmo tipo."
+
+#: usr/local/www/firewall_rules_edit.php:425
+#: usr/local/www/firewall_rules_edit.php:457
+#: usr/local/www/firewall_rules_edit.php:458
+#: usr/local/www/firewall_rules_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:467
+msgid "ID must be an integer"
+msgstr "ID deve ser um inteiro"
+
+#: usr/local/www/firewall_rules_edit.php:428
+#: usr/local/www/firewall_rules_edit.php:460
+#: usr/local/www/firewall_rules_edit.php:461
+#: usr/local/www/firewall_rules_edit.php:464
+#: usr/local/www/firewall_rules_edit.php:470
+msgid "You can only select a layer7 container for TCP and/or UDP protocols"
+msgstr "Você somente pode selecionar um conteiner layer7 para TCP e/ou protocolos UDP"
+
+#: usr/local/www/firewall_rules_edit.php:430
+#: usr/local/www/firewall_rules_edit.php:462
+#: usr/local/www/firewall_rules_edit.php:463
+#: usr/local/www/firewall_rules_edit.php:466
+#: usr/local/www/firewall_rules_edit.php:472
+msgid "You can only select a layer7 container for Pass type rules."
+msgstr "Você somente pode selecionar um conteiner layer7 para regras de tipo Liberação."
+
+#: usr/local/www/firewall_rules_edit.php:443
+#: usr/local/www/firewall_rules_edit.php:475
+#: usr/local/www/firewall_rules_edit.php:476
+#: usr/local/www/firewall_rules_edit.php:479
+#: usr/local/www/firewall_rules_edit.php:485
+#: usr/local/www/firewall_rules_edit.php:533
+msgid "If you specify TCP flags that should be set you should specify out of which flags as well."
+msgstr "Se você especificar flags TCP que devem ser configurados, você deve especificar de quaisflags também."
+
+#: usr/local/www/firewall_rules_edit.php:652
+#: usr/local/www/firewall_rules_edit.php:685
+#: usr/local/www/firewall_rules_edit.php:688
+#: usr/local/www/firewall_rules_edit.php:700
+#: usr/local/www/firewall_rules_edit.php:748
+msgid "Edit Firewall rule"
+msgstr "Editar regras de Firewall"
+
+#: usr/local/www/firewall_rules_edit.php:673
+#: usr/local/www/firewall_rules_edit.php:706
+#: usr/local/www/firewall_rules_edit.php:709
+#: usr/local/www/firewall_rules_edit.php:721
+#: usr/local/www/firewall_rules_edit.php:769
+msgid "Choose what to do with packets that match the criteria specified below."
+msgstr "Escolha o que fazer com os pacotes que correspondem aos critérios especificados abaixo."
+
+#: usr/local/www/firewall_rules_edit.php:674
+#: usr/local/www/firewall_rules_edit.php:707
+#: usr/local/www/firewall_rules_edit.php:710
+#: usr/local/www/firewall_rules_edit.php:722
+#: usr/local/www/firewall_rules_edit.php:770
+msgid "Hint: the difference between block and reject is that with reject, a packet (TCP RST or ICMP port unreachable for UDP) is returned to the sender, whereas with block the packet is dropped silently. In either case, the original packet is discarded."
+msgstr "Dica: a diferença entre bloqueado e rejeitado é que com rejeitado, um pacote (TCP RST ou porta ICMP inalcansável para UDP) é retornada para quem enviou, enquanto que com bloqueado, o pacote é descartado silenciosamente. Em qualquer um dos casos, o pacote original é descartado."
+
+#: usr/local/www/firewall_rules_edit.php:689
+#: usr/local/www/firewall_rules_edit.php:722
+#: usr/local/www/firewall_rules_edit.php:725
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:785
+msgid "Quick"
+msgstr "Rápido"
+
+#: usr/local/www/firewall_rules_edit.php:693
+#: usr/local/www/firewall_rules_edit.php:726
+#: usr/local/www/firewall_rules_edit.php:729
+#: usr/local/www/firewall_rules_edit.php:741
+#: usr/local/www/firewall_rules_edit.php:789
+msgid "Apply the action immediately on match."
+msgstr "Aplicar a ação imediatamente após correspondência."
+
+#: usr/local/www/firewall_rules_edit.php:694
+#: usr/local/www/firewall_rules_edit.php:727
+#: usr/local/www/firewall_rules_edit.php:730
+#: usr/local/www/firewall_rules_edit.php:742
+#: usr/local/www/firewall_rules_edit.php:790
+msgid "Set this option if you need to apply this action to traffic that matches this rule immediately."
+msgstr "Configure essa opção se precisar aplicar essa ação ao tráfego que corresponder imediatamente a essa regra."
+
+#: usr/local/www/firewall_rules_edit.php:701
+#: usr/local/www/firewall_rules_edit.php:734
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:749
+#: usr/local/www/firewall_rules_edit.php:797
+msgid "Associated filter rule"
+msgstr "Regra de filtro associada"
+
+#: usr/local/www/firewall_rules_edit.php:703
+#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:137
+#: usr/local/www/firewall_rules_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:739
+#: usr/local/www/diag_traceroute.php:141
+#: usr/local/www/firewall_rules_edit.php:751
+#: usr/local/www/diag_traceroute.php:161
+#: usr/local/www/firewall_rules_edit.php:799
+msgid "Note: "
+msgstr "Nota:"
+
+#: usr/local/www/firewall_rules_edit.php:703
+#: usr/local/www/firewall_rules_edit.php:736
+#: usr/local/www/firewall_rules_edit.php:739
+#: usr/local/www/firewall_rules_edit.php:751
+#: usr/local/www/firewall_rules_edit.php:799
+msgid "This is associated to a NAT rule."
+msgstr "Isto está associado à regra NAT."
+
+#: usr/local/www/firewall_rules_edit.php:704
+#: usr/local/www/firewall_rules_edit.php:737
+#: usr/local/www/firewall_rules_edit.php:740
+#: usr/local/www/firewall_rules_edit.php:752
+#: usr/local/www/firewall_rules_edit.php:800
+msgid "You cannot edit the interface, protocol, source, or destination of associated filter rules."
+msgstr "Você não pode editar a interface, protocolo, fonte ou destino de regras de filtro associadas."
+
+#: usr/local/www/firewall_rules_edit.php:711
+#: usr/local/www/firewall_rules_edit.php:744
+#: usr/local/www/firewall_rules_edit.php:747
+#: usr/local/www/firewall_rules_edit.php:759
+#: usr/local/www/firewall_rules_edit.php:807
+msgid "View the NAT rule"
+msgstr "Veja a regra NAT"
+
+#: usr/local/www/firewall_rules_edit.php:768
+#: usr/local/www/firewall_rules_edit.php:803
+#: usr/local/www/firewall_rules_edit.php:806
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:817
+#: usr/local/www/firewall_rules_edit.php:865
+msgid "Choose on which interface packets must come in to match this rule."
+msgstr "Escolha quais pacotes de interface devem entrar para corresponder a essa regra."
+
+#: usr/local/www/firewall_rules_edit.php:774
+#: usr/local/www/services_captiveportal_ip_edit.php:178
+#: usr/local/www/diag_ipsec_spd.php:88
+#: usr/local/www/load_balancer_relay_action_edit.php:117
+#: usr/local/www/load_balancer_relay_action_edit.php:443
+#: usr/local/www/services_captiveportal_hostname_edit.php:160
+#: usr/local/www/load_balancer_relay_action_edit.php:442
+#: usr/local/www/firewall_rules_edit.php:809
+#: usr/local/www/services_captiveportal_hostname_edit.php:158
+#: usr/local/www/load_balancer_relay_action_edit.php:440
+#: usr/local/www/services_captiveportal_ip_edit.php:176
+#: usr/local/www/diag_ipsec_spd.php:89
+#: usr/local/www/firewall_rules_edit.php:812
+#: usr/local/www/firewall_rules_edit.php:824
+#: usr/local/www/firewall_rules_edit.php:823
+#: usr/local/www/firewall_rules_edit.php:871
+msgid "Direction"
+msgstr "Direção"
+
+#: usr/local/www/firewall_rules_edit.php:792
+#: usr/local/www/firewall_rules_edit.php:827
+#: usr/local/www/firewall_rules_edit.php:830
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:841
+#: usr/local/www/firewall_rules_edit.php:889
+msgid "TCP/IP Version"
+msgstr "Versão TCP/IP"
+
+#: usr/local/www/firewall_rules_edit.php:804
+#: usr/local/www/firewall_rules_edit.php:839
+#: usr/local/www/firewall_rules_edit.php:842
+#: usr/local/www/firewall_rules_edit.php:854
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_rules_edit.php:901
+msgid "Select the Internet Protocol version this rule applies to"
+msgstr "Selecione a versão do Internet Protocol a qual esta regra se aplica"
+
+#: usr/local/www/firewall_rules_edit.php:818
+#: usr/local/www/firewall_rules_edit.php:853
+#: usr/local/www/firewall_rules_edit.php:856
+#: usr/local/www/firewall_rules_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:867
+#: usr/local/www/firewall_rules_edit.php:915
+msgid "Hint: in most cases, you should specify "
+msgstr "Dica: na maioria dos casos, você deve especificar "
+
+#: usr/local/www/firewall_rules_edit.php:822
+#: usr/local/www/firewall_rules_edit.php:857
+#: usr/local/www/firewall_rules_edit.php:860
+#: usr/local/www/firewall_rules_edit.php:872
+#: usr/local/www/firewall_rules_edit.php:871
+#: usr/local/www/firewall_rules_edit.php:919
+msgid "ICMP type"
+msgstr "Tipo ICMP"
+
+#: usr/local/www/firewall_rules_edit.php:851
+#: usr/local/www/firewall_rules_edit.php:886
+#: usr/local/www/firewall_rules_edit.php:889
+#: usr/local/www/firewall_rules_edit.php:901
+#: usr/local/www/firewall_rules_edit.php:900
+#: usr/local/www/firewall_rules_edit.php:948
+msgid "If you selected ICMP for the protocol above, you may specify an ICMP type here."
+msgstr "Se você selecionar ICMP para o protocolo acima, você deve especificar um tipo ICMP aqui."
+
+#: usr/local/www/firewall_rules_edit.php:885
+#: usr/local/www/firewall_rules_edit.php:920
+#: usr/local/www/firewall_rules_edit.php:929
+#: usr/local/www/firewall_rules_edit.php:941
+#: usr/local/www/firewall_rules_edit.php:940
+#: usr/local/www/firewall_rules_edit.php:988
+msgid " subnet"
+msgstr " subrede"
+
+#: usr/local/www/firewall_rules_edit.php:908
+#: usr/local/www/firewall_rules_edit.php:943
+#: usr/local/www/firewall_rules_edit.php:952
+#: usr/local/www/firewall_rules_edit.php:964
+#: usr/local/www/firewall_rules_edit.php:963
+#: usr/local/www/firewall_rules_edit.php:1011
+msgid "Show source port range"
+msgstr "Mostrar intervalo de porta de origem"
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1048
+msgid "Specify the source port or port range for this rule."
+msgstr "Especificar a porta de origem ou o intervalo de porta para essa regra."
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1048
+msgid "and almost never equal to the destination port range (and should usually be"
+msgstr "e quase nunca igual ao intervalo de porta de destino (e deve normalmente ser"
+
+#: usr/local/www/firewall_rules_edit.php:944
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:979
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1001
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_rules_edit.php:1000
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_rules_edit.php:1048
+#: usr/local/www/firewall_rules_edit.php:1149
+msgid "'to'"
+msgstr "'para'"
+
+#: usr/local/www/firewall_rules_edit.php:1005
+#: usr/local/www/firewall_rules_edit.php:1040
+#: usr/local/www/firewall_rules_edit.php:1055
+#: usr/local/www/firewall_rules_edit.php:1068
+#: usr/local/www/firewall_rules_edit.php:1067
+#: usr/local/www/firewall_rules_edit.php:1115
+msgid "Destination port range "
+msgstr "Intervalo de porta de destino "
+
+#: usr/local/www/firewall_rules_edit.php:1037
+#: usr/local/www/firewall_rules_edit.php:1072
+#: usr/local/www/firewall_rules_edit.php:1087
+#: usr/local/www/firewall_rules_edit.php:1100
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1147
+msgid "Specify the port or port range for the destination of the packet for this rule."
+msgstr "Especifique a porta ou o intervalo de portas para o destino do pacote para essa regra."
+
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:1074
+#: usr/local/www/firewall_rules_edit.php:1089
+#: usr/local/www/firewall_rules_edit.php:1102
+#: usr/local/www/firewall_rules_edit.php:1101
+#: usr/local/www/firewall_rules_edit.php:1149
+msgid "field empty if you only want to filter a single port"
+msgstr "campo vazio se você somente quiser filtrar uma única porta"
+
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_rules_edit.php:1079
+#: usr/local/www/firewall_rules_edit.php:1094
+#: usr/local/www/firewall_rules_edit.php:1107
+#: usr/local/www/firewall_rules_edit.php:1106
+#: usr/local/www/firewall_rules_edit.php:1154
+msgid "Log"
+msgstr "Log"
+
+#: usr/local/www/firewall_rules_edit.php:1047
+#: usr/local/www/firewall_rules_edit.php:1082
+#: usr/local/www/firewall_rules_edit.php:1097
+#: usr/local/www/firewall_rules_edit.php:1110
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1157
+msgid "Log packets that are handled by this rule"
+msgstr "Pacotes de log que são tratados por essa regra"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1159
+msgid "Hint: the firewall has limited local log space. Don't turn on logging for everything. If you want to do a lot of logging, consider using a remote syslog server"
+msgstr "Dica: o firewall tem um espaço limitado para log. Não habilite os logs para tudo. Se você quiser fazer muito log, considere usar um servidor syslog remoto"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1159
+msgid "see the"
+msgstr "veja o"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1159
+msgid "Diagnostics: System logs: Settings"
+msgstr "Diagnóstico: Logs de sistema: Configurações"
+
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/services_captiveportal.php:908
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/firewall_rules_edit.php:1084
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/services_captiveportal.php:953
+#: usr/local/www/services_captiveportal.php:949
+#: usr/local/www/firewall_rules_edit.php:1099
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/services_captiveportal.php:951
+#: usr/local/www/firewall_rules_edit.php:1112
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/services_captiveportal.php:967
+#: usr/local/www/firewall_rules_edit.php:1111
+#: usr/local/www/firewall_rules_edit.php:1159
+#: usr/local/www/system_advanced_firewall.php:344
+msgid "page"
+msgstr "página"
+
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/services_unbound_acls.php:296
+#: usr/local/www/firewall_rules_edit.php:1092
+#: usr/local/www/firewall_rules_edit.php:1107
+#: usr/local/www/firewall_rules_edit.php:1120
+#: usr/local/www/firewall_rules_edit.php:1119
+#: usr/local/www/firewall_rules_edit.php:1167
+msgid "You may enter a description here for your reference."
+msgstr "Você deve informar com uma descrição para sua referência."
+
+#: usr/local/www/firewall_rules_edit.php:1080
+#: usr/local/www/firewall_rules_edit.php:1115
+#: usr/local/www/firewall_rules_edit.php:1130
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1142
+#: usr/local/www/firewall_rules_edit.php:1190
+msgid "Source OS"
+msgstr "Fonte OS"
+
+#: usr/local/www/firewall_rules_edit.php:1086
+#: usr/local/www/firewall_rules_edit.php:1121
+#: usr/local/www/firewall_rules_edit.php:1136
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1148
+#: usr/local/www/firewall_rules_edit.php:1196
+msgid "OS Type:"
+msgstr "Tipo OS:"
+
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1144
+#: usr/local/www/firewall_rules_edit.php:1159
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1171
+#: usr/local/www/firewall_rules_edit.php:1219
+msgid "Note: this only works for TCP rules"
+msgstr "Nota: isso somente funciona para regras TCP"
+
+#: usr/local/www/firewall_rules_edit.php:1114
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1164
+#: usr/local/www/firewall_rules_edit.php:1177
+#: usr/local/www/firewall_rules_edit.php:1176
+#: usr/local/www/firewall_rules_edit.php:1224
+msgid "Diffserv Code Point"
+msgstr "Diff Code Point"
+
+#: usr/local/www/firewall_rules_edit.php:1130
+#: usr/local/www/interfaces_ppps_edit.php:675
+#: usr/local/www/vpn_ipsec_phase1.php:806
+#: usr/local/www/vpn_ipsec_phase2.php:629
+#: usr/local/www/firewall_rules_edit.php:1165
+#: usr/local/www/vpn_ipsec_phase2.php:655
+#: usr/local/www/vpn_ipsec_phase1.php:819
+#: usr/local/www/interfaces_ppps_edit.php:676
+#: usr/local/www/vpn_ipsec_phase2.php:751
+#: usr/local/www/vpn_ipsec_phase1.php:816
+#: usr/local/www/firewall_rules_edit.php:1180
+#: usr/local/www/interfaces_ppps_edit.php:682
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase2.php:772
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1192
+#: usr/local/www/interfaces_ppps_edit.php:680
+#: usr/local/www/firewall_rules_edit.php:1240
+msgid "Advanced Options"
+msgstr "Opções Avançadas"
+
+#: usr/local/www/firewall_rules_edit.php:1137
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1187
+#: usr/local/www/firewall_rules_edit.php:1200
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1247
+msgid "This allows packets with IP options to pass. Otherwise they are blocked by default. This is usually only seen with multicast traffic."
+msgstr "Isso permite que pacotes com opções de IP passem. Do contrário eles são bloqueados por padrão. Isso normalmente somente é visto com tráfego multicast."
+
+#: usr/local/www/firewall_rules_edit.php:1140
+#: usr/local/www/firewall_rules_edit.php:1175
+#: usr/local/www/firewall_rules_edit.php:1190
+#: usr/local/www/firewall_rules_edit.php:1203
+#: usr/local/www/firewall_rules_edit.php:1202
+#: usr/local/www/firewall_rules_edit.php:1250
+msgid "This will disable auto generated reply-to for this rule."
+msgstr "Isso irá desabilitar auto geração de respostas para essa regra."
+
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1178
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1205
+#: usr/local/www/firewall_rules_edit.php:1253
+msgid "You can mark a packet matching this rule and use this mark to match on other NAT/filter rules. It is called"
+msgstr "Você pode marcar um pacote que corresponda a essa regra e use essa marca para corresponder a outras regras NAT/filtros. Chama-se"
+
+#: usr/local/www/firewall_rules_edit.php:1143
+#: usr/local/www/firewall_rules_edit.php:1178
+#: usr/local/www/firewall_rules_edit.php:1193
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1205
+#: usr/local/www/firewall_rules_edit.php:1253
+msgid "Policy filtering"
+msgstr "Política de filtro"
+
+#: usr/local/www/firewall_rules_edit.php:1146
+#: usr/local/www/firewall_rules_edit.php:1181
+#: usr/local/www/firewall_rules_edit.php:1196
+#: usr/local/www/firewall_rules_edit.php:1209
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1256
+msgid "You can match packet on a mark placed before on another rule."
+msgstr "Você pode combinar pacotes com uma marca colocada antes em outra regra."
+
+#: usr/local/www/firewall_rules_edit.php:1148
+#: usr/local/www/firewall_rules_edit.php:1183
+#: usr/local/www/firewall_rules_edit.php:1198
+#: usr/local/www/firewall_rules_edit.php:1211
+#: usr/local/www/firewall_rules_edit.php:1210
+msgid " Maximum state entries this rule can create"
+msgstr " Máximo de entradas de estado que essa regra pode criar"
+
+#: usr/local/www/firewall_rules_edit.php:1149
+#: usr/local/www/firewall_rules_edit.php:1184
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1212
+#: usr/local/www/firewall_rules_edit.php:1211
+msgid " Maximum number of unique source hosts"
+msgstr " Número máximo de hosts fonte únicos"
+
+#: usr/local/www/firewall_rules_edit.php:1150
+#: usr/local/www/firewall_rules_edit.php:1185
+#: usr/local/www/firewall_rules_edit.php:1200
+#: usr/local/www/firewall_rules_edit.php:1213
+#: usr/local/www/firewall_rules_edit.php:1212
+msgid " Maximum number of established connections per host"
+msgstr " Número máximo de conexões estabelecidas por host"
+
+#: usr/local/www/firewall_rules_edit.php:1151
+#: usr/local/www/firewall_rules_edit.php:1186
+#: usr/local/www/firewall_rules_edit.php:1201
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1213
+msgid " Maximum state entries per host"
+msgstr " Máximo de entradas de estado por host"
+
+#: usr/local/www/firewall_rules_edit.php:1160
+#: usr/local/www/firewall_rules_edit.php:1195
+#: usr/local/www/firewall_rules_edit.php:1210
+#: usr/local/www/firewall_rules_edit.php:1223
+#: usr/local/www/firewall_rules_edit.php:1222
+msgid "Maximum new connections / per second(s)"
+msgstr "Máximo de novas conexões / por segundo(s)"
+
+#: usr/local/www/firewall_rules_edit.php:1164
+#: usr/local/www/firewall_rules_edit.php:1199
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1226
+#: usr/local/www/firewall_rules_edit.php:1225
+msgid "State Timeout in seconds"
+msgstr "Tempo de espera de estado em segundos"
+
+#: usr/local/www/firewall_rules_edit.php:1167
+#: usr/local/www/firewall_rules_edit.php:1202
+#: usr/local/www/firewall_rules_edit.php:1217
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1227
+#: usr/local/www/firewall_rules_edit.php:1275
+msgid "Note: Leave fields blank to disable that feature."
+msgstr "Nota: Deixe os campos em branco para desabilitar essa função."
+
+#: usr/local/www/firewall_rules_edit.php:1172
+#: usr/local/www/firewall_rules_edit.php:1207
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/firewall_rules_edit.php:1233
+#: usr/local/www/firewall_rules_edit.php:1232
+#: usr/local/www/firewall_rules_edit.php:1280
+msgid "TCP flags"
+msgstr "TCP flags"
+
+#: usr/local/www/firewall_rules_edit.php:1206
+#: usr/local/www/firewall_rules_edit.php:1241
+#: usr/local/www/firewall_rules_edit.php:1256
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1312
+msgid "Any flags."
+msgstr "Qualquer flag."
+
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1243
+#: usr/local/www/firewall_rules_edit.php:1258
+#: usr/local/www/firewall_rules_edit.php:1267
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules_edit.php:1314
+msgid "Use this to choose TCP flags that must be set or cleared for this rule to match."
+msgstr "Use isto para escolher as flags TCP que precisam estar definidas ou apuradas para esta regra corresponder."
+
+#: usr/local/www/firewall_rules_edit.php:1214
+#: usr/local/www/firewall_rules_edit.php:1249
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_rules_edit.php:1272
+#: usr/local/www/firewall_rules_edit.php:1320
+msgid "State Type"
+msgstr "Tipo de Estado"
+
+#: usr/local/www/firewall_rules_edit.php:1221
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1256
+#: usr/local/www/firewall_rules_edit.php:1263
+#: usr/local/www/firewall_rules_edit.php:1271
+#: usr/local/www/firewall_rules_edit.php:1278
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1327
+#: usr/local/www/firewall_rules_edit.php:1333
+msgid "keep state"
+msgstr "manter estado"
+
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/firewall_rules_edit.php:1229
+#: usr/local/www/firewall_rules_edit.php:1257
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1272
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1328
+#: usr/local/www/firewall_rules_edit.php:1334
+msgid "sloppy state"
+msgstr "estado sloppy"
+
+#: usr/local/www/firewall_rules_edit.php:1223
+#: usr/local/www/firewall_rules_edit.php:1230
+#: usr/local/www/firewall_rules_edit.php:1258
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1273
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1282
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1329
+#: usr/local/www/firewall_rules_edit.php:1335
+msgid "synproxy state"
+msgstr "estado synproxy"
+
+#: usr/local/www/firewall_rules_edit.php:1225
+#: usr/local/www/firewall_rules_edit.php:1260
+#: usr/local/www/firewall_rules_edit.php:1275
+#: usr/local/www/firewall_rules_edit.php:1284
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1331
+msgid "Hint: Select which type of state tracking mechanism you would like to use. If in doubt, use keep state."
+msgstr "Dica: Selecione qual o tipo de mecanismo de rastreamento você gostaria de utilizar. Se estiver em dúvida, use keep state."
+
+#: usr/local/www/firewall_rules_edit.php:1228
+#: usr/local/www/firewall_rules_edit.php:1229
+#: usr/local/www/firewall_rules_edit.php:1263
+#: usr/local/www/firewall_rules_edit.php:1264
+#: usr/local/www/firewall_rules_edit.php:1278
+#: usr/local/www/firewall_rules_edit.php:1279
+#: usr/local/www/firewall_rules_edit.php:1286
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1333
+#: usr/local/www/firewall_rules_edit.php:1334
+msgid "Works with all IP protocols."
+msgstr "Funciona com todos os protocolos IP."
+
+#: usr/local/www/firewall_rules_edit.php:1230
+#: usr/local/www/firewall_rules_edit.php:1265
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1287
+#: usr/local/www/firewall_rules_edit.php:1335
+msgid "Proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. This option includes the functionality of keep state and modulate state combined."
+msgstr "Faz proxy de conexões TCP de entrada para ajudar a proteger servidores de inundações de spoofed TCP SYN. Essa opção inclui a funcionalidade de manter o estado e modular estado combinado."
+
+#: usr/local/www/firewall_rules_edit.php:1231
+#: usr/local/www/firewall_rules_edit.php:1266
+#: usr/local/www/firewall_rules_edit.php:1281
+#: usr/local/www/firewall_rules_edit.php:1289
+#: usr/local/www/firewall_rules_edit.php:1288
+#: usr/local/www/firewall_rules_edit.php:1336
+msgid "Do not use state mechanisms to keep track. This is only useful if you're doing advanced queueing in certain situations. Please check the documentation."
+msgstr "Não use mecanismos de estado para rastrear. Isso somente é útil se você estiver fazendo filas avançadas em determinadas situações. Por favor verifique a documentação."
+
+#: usr/local/www/firewall_rules_edit.php:1245
+#: usr/local/www/firewall_rules_edit.php:1280
+msgid "Hint: This prevents the rule from automatically syncing to other CARP members."
+msgstr "Dica: Isso previne a regra de sincronizar automaticamente com outros membros CARP."
+
+#: usr/local/www/firewall_rules_edit.php:1283
+#: usr/local/www/firewall_rules_edit.php:1350
+#: usr/local/www/firewall_rules_edit.php:1365
+#: usr/local/www/firewall_rules_edit.php:1372
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1431
+msgid "Leave as 'none' to leave the rule enabled all the time."
+msgstr "Deixa como 'nenhum' para deixar a regra habilitada o tempo todo."
+
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/services_captiveportal.php:779
+#: usr/local/www/services_captiveportal.php:799
+#: usr/local/www/firewall_rules_edit.php:1362
+#: usr/local/www/services_captiveportal.php:821
+#: usr/local/www/services_captiveportal.php:841
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/services_captiveportal.php:839
+#: usr/local/www/firewall_rules_edit.php:1377
+#: usr/local/www/services_captiveportal.php:807
+#: usr/local/www/services_captiveportal.php:837
+#: usr/local/www/firewall_rules_edit.php:1384
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/firewall_rules_edit.php:1395
+#: usr/local/www/firewall_rules_edit.php:1443
+msgid "default"
+msgstr "padrão"
+
+#: usr/local/www/firewall_rules_edit.php:1334
+#: usr/local/www/firewall_rules_edit.php:1405
+#: usr/local/www/firewall_rules_edit.php:1420
+#: usr/local/www/firewall_rules_edit.php:1427
+#: usr/local/www/firewall_rules_edit.php:1438
+#: usr/local/www/firewall_rules_edit.php:1486
+msgid "Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing."
+msgstr "Deixe como 'padrão' para usar a tabela de roteamento do sistema ou escolha um gateway para utilizar roteamento baseado em políticas."
+
+#: usr/local/www/firewall_rules_edit.php:1339
+#: usr/local/www/firewall_rules_edit.php:1410
+#: usr/local/www/firewall_rules_edit.php:1425
+#: usr/local/www/firewall_rules_edit.php:1432
+#: usr/local/www/firewall_rules_edit.php:1443
+#: usr/local/www/firewall_rules_edit.php:1491
+msgid "In/Out"
+msgstr "Entrada/Saída"
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1535
+msgid "Choose the Out queue/Virtual interface only if you have also selected In."
+msgstr "Escolha a interface de fila de saída/virtual somente se você selecionou a de Entrada também."
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1535
+msgid "The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface."
+msgstr "A seleção de Saída é aplicada ao tráfego que estiver saindo da interface em que a regra foi criada a Entrada é a aplicada ao tráfego chegando na interface selecionada."
+
+#: usr/local/www/firewall_rules_edit.php:1383
+#: usr/local/www/firewall_rules_edit.php:1454
+#: usr/local/www/firewall_rules_edit.php:1469
+#: usr/local/www/firewall_rules_edit.php:1476
+#: usr/local/www/firewall_rules_edit.php:1487
+#: usr/local/www/firewall_rules_edit.php:1535
+msgid "If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing."
+msgstr "Se você estiver criando uma regra na aba Flotação, se a direção é de Entrada, então as mesmas regras se aplicam. Se a direção foi de Saída, as seleções são revertidas:Saída é para entradas e Entrada é para saídas. E se você não selecionar nenhuma direção, use somente a Entrada, já que a seleção de Saída não faz sentido, de modo a evitar confusões."
+
+#: usr/local/www/firewall_rules_edit.php:1389
+#: usr/local/www/firewall_rules_edit.php:1460
+#: usr/local/www/firewall_rules_edit.php:1475
+#: usr/local/www/firewall_rules_edit.php:1482
+#: usr/local/www/firewall_rules_edit.php:1493
+#: usr/local/www/firewall_rules_edit.php:1541
+msgid "Ackqueue/Queue"
+msgstr "Reconhecimento/Fila"
+
+#: usr/local/www/firewall_rules_edit.php:1439
+#: usr/local/www/firewall_rules_edit.php:1510
+#: usr/local/www/firewall_rules_edit.php:1525
+#: usr/local/www/firewall_rules_edit.php:1532
+#: usr/local/www/firewall_rules_edit.php:1543
+#: usr/local/www/firewall_rules_edit.php:1591
+msgid "Choose the Acknowledge Queue only if you have selected Queue."
+msgstr "Escolha a Fila de Acordo somente se você selecionou Fila."
+
+#: usr/local/www/firewall_rules_edit.php:1466
+#: usr/local/www/firewall_rules_edit.php:1537
+#: usr/local/www/firewall_rules_edit.php:1552
+#: usr/local/www/firewall_rules_edit.php:1560
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1619
+msgid "Choose a Layer7 container to apply application protocol inspection rules. These are valid for TCP and UDP protocols only."
+msgstr "Escolha o contâiner Layer7 para aplicar regras de inspeção de protocolo de aplicação. Essas são válidas somente para protocolos TCP e UDP."
+
+#: usr/local/www/firewall_schedule.php:50
+#: usr/local/www/firewall_schedule_edit.php:61 usr/local/www/fbegin.inc:113
+#: usr/local/www/system_advanced_misc.php:380 usr/local/www/fbegin.inc:130
+#: usr/local/www/system_advanced_misc.php:423 usr/local/www/fbegin.inc:139
+#: usr/local/www/system_advanced_misc.php:472
+#: usr/local/www/system_advanced_misc.php:484 usr/local/www/fbegin.inc:131
+#: usr/local/www/system_advanced_misc.php:531
+#: usr/local/www/system_advanced_misc.php:549
+msgid "Schedules"
+msgstr "Agendas"
+
+#: usr/local/www/firewall_schedule.php:77
+#, php-format
+msgid "Cannot delete Schedule. Currently in use by %s"
+msgstr "Não pode apagar a Agenda. Ela está atualmente em uso por %s"
+
+#: usr/local/www/firewall_schedule.php:97
+msgid "Time Range(s)"
+msgstr "Intervalo(s) de tempo"
+
+#: usr/local/www/firewall_schedule.php:103
+#: usr/local/www/firewall_schedule.php:233
+msgid "add a new schedule"
+msgstr "adicionar uma nova agenda"
+
+#: usr/local/www/firewall_schedule.php:115
+msgid "Schedule is currently active"
+msgstr "Agenda está atualmente ativa"
+
+#: usr/local/www/firewall_schedule.php:221
+msgid "Do you really want to delete this schedule?"
+msgstr "Você realmente quer apagar essa agenda?"
+
+#: usr/local/www/firewall_schedule.php:240
+msgid "Schedules act as placeholders for time ranges to be used in Firewall Rules."
+msgstr "Agendas atuam como placeholders para intervalos de tempo para serem usadas pelas Regras do Firewall."
+
+#: usr/local/www/firewall_schedule_edit.php:93
+msgid "Schedule may not be named LAN."
+msgstr "Agenda não pode ser nomeada LAN."
+
+#: usr/local/www/firewall_schedule_edit.php:95
+msgid "Schedule may not be named WAN."
+msgstr "Agenda não pode ser nomeada WAN."
+
+#: usr/local/www/firewall_schedule_edit.php:97
+msgid "Schedule name cannot be blank."
+msgstr "Nome da agenda não pode ser deixado em branco."
+
+#: usr/local/www/firewall_schedule_edit.php:101
+msgid "Reserved word used for schedule name."
+msgstr "Palavra reservada usada para nome de agenda."
+
+#: usr/local/www/firewall_schedule_edit.php:104
+msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9"
+msgstr "O nome da agenda somente deve consistir dos caracteres de a-z, A-Z, 0-9"
+
+#: usr/local/www/firewall_schedule_edit.php:113
+msgid "A Schedule with this name already exists."
+msgstr "Uma Agenda com esse nome já existe."
+
+#: usr/local/www/firewall_schedule_edit.php:170
+msgid "The schedule must have at least one time range configured."
+msgstr "A agenda deve ter, pelo menos, um intervalo de tempo configurado."
+
+#: usr/local/www/firewall_schedule_edit.php:770
+#: usr/local/www/firewall_schedule_edit.php:769
+msgid "Schedule information"
+msgstr "Informação da agenda"
+
+#: usr/local/www/firewall_schedule_edit.php:776
+#: usr/local/www/firewall_schedule_edit.php:775
+msgid "Schedule Name"
+msgstr "Nome da agenda"
+
+#: usr/local/www/firewall_schedule_edit.php:782
+#: usr/local/www/firewall_schedule_edit.php:781
+msgid "NOTE: This schedule is in use so the name may not be modified!"
+msgstr "NOTA: Essa agenda está em uso e, portanto, o nome não pode ser modificado!"
+
+#: usr/local/www/firewall_schedule_edit.php:787
+#: usr/local/www/firewall_schedule_edit.php:786
+msgid "The name of the alias may only consist of the characters a-z, A-Z and 0-9"
+msgstr "O nome do alias somente deve consistir nos caracteres de a-z, A-Z e 0-9"
+
+#: usr/local/www/firewall_schedule_edit.php:804
+#: usr/local/www/firewall_schedule_edit.php:803
+msgid "Month"
+msgstr "Mês"
+
+#: usr/local/www/firewall_schedule_edit.php:847
+#: usr/local/www/firewall_schedule_edit.php:846
+msgid "Tue"
+msgstr "Ter"
+
+#: usr/local/www/firewall_schedule_edit.php:849
+#: usr/local/www/firewall_schedule_edit.php:848
+msgid "Thu"
+msgstr "Qui"
+
+#: usr/local/www/firewall_schedule_edit.php:906
+#: usr/local/www/firewall_schedule_edit.php:905
+msgid "Click individual date to select that date only. Click the appropriate weekday Header to select all occurences of that weekday."
+msgstr "Clique em data individual para selecionar somente a data. Clique no cabeçalho do dia da semana apropriado para selecionar todas as ocorrências daquele dia da semana."
+
+#: usr/local/www/firewall_schedule_edit.php:914
+#: usr/local/www/firewall_schedule_edit.php:996
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:995
+msgid "Start Time"
+msgstr "Hora de início"
+
+#: usr/local/www/firewall_schedule_edit.php:914
+#: usr/local/www/firewall_schedule_edit.php:997
+#: usr/local/www/firewall_schedule_edit.php:913
+#: usr/local/www/firewall_schedule_edit.php:996
+msgid "Stop Time"
+msgstr "Hora de término"
+
+#: usr/local/www/firewall_schedule_edit.php:927
+#: usr/local/www/firewall_schedule_edit.php:952
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:951
+msgid "Hr"
+msgstr "Hr"
+
+#: usr/local/www/firewall_schedule_edit.php:934
+#: usr/local/www/firewall_schedule_edit.php:959
+#: usr/local/www/firewall_schedule_edit.php:933
+#: usr/local/www/firewall_schedule_edit.php:958
+msgid "Min"
+msgstr "Min"
+
+#: usr/local/www/firewall_schedule_edit.php:963
+#: usr/local/www/firewall_schedule_edit.php:962
+msgid "Select the time range for the day(s) selected on the Month(s) above. A full day is 0:00-23:59."
+msgstr "Selecione o intervalo de tempo para o(s) dia(s) selecionados no(s) Mes(es) acima. Um dia completo é 0:00-23:59."
+
+#: usr/local/www/firewall_schedule_edit.php:967
+#: usr/local/www/firewall_schedule_edit.php:966
+msgid "Time Range Description"
+msgstr "Descrição do Intervalo de Tempo"
+
+#: usr/local/www/firewall_schedule_edit.php:977
+#: usr/local/www/firewall_schedule_edit.php:976
+msgid "Add Time"
+msgstr "Adicionar Tempo"
+
+#: usr/local/www/firewall_schedule_edit.php:978
+#: usr/local/www/firewall_schedule_edit.php:977
+msgid "Clear Selection"
+msgstr "Limpar seleção"
+
+#: usr/local/www/firewall_schedule_edit.php:987
+#: usr/local/www/firewall_schedule_edit.php:986
+msgid "Schedule repeat"
+msgstr "Repetição de agenda"
+
+#: usr/local/www/firewall_schedule_edit.php:990
+#: usr/local/www/firewall_schedule_edit.php:989
+msgid "Configured Ranges"
+msgstr "Intervalos configurados"
+
+#: usr/local/www/firewall_schedule_edit.php:995
+#: usr/local/www/firewall_schedule_edit.php:994
+msgid "Day(s)"
+msgstr "Dia(s)"
+
+#: usr/local/www/firewall_shaper.php:369 usr/local/www/firewall_shaper.php:370
+#: usr/local/www/firewall_shaper.php:371
+msgid "Disable shaper on interface"
+msgstr "Desabilitar modelador na interface"
+
+#: usr/local/www/firewall_shaper.php:424 usr/local/www/firewall_shaper.php:425
+#: usr/local/www/firewall_shaper.php:426
+msgid "Remove Shaper"
+msgstr "Remover Modelador"
+
+#: usr/local/www/diag_backup.php:84 usr/local/www/diag_backup.php:161
+msgid "Restored base_package menus after configuration restore."
+msgstr "Restaurado menu base_package após restauração da configuração."
+
+#: usr/local/www/diag_backup.php:104 usr/local/www/fbegin.inc:120
+#: usr/local/www/fbegin.inc:156 usr/local/www/status_rrd_graph_settings.php:58
+#: usr/local/www/status_rrd_graph_settings.php:155
+#: usr/local/www/status_services.php:275
+#: usr/local/www/widgets/widgets/services_status.widget.php:80
+#: usr/local/www/fbegin.inc:137 usr/local/www/fbegin.inc:173
+#: usr/local/www/status_rrd_graph_settings.php:156
+#: usr/local/www/diag_backup.php:181 etc/inc/service-utils.inc:256
+#: usr/local/www/fbegin.inc:146 usr/local/www/fbegin.inc:181
+#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:172
+#: etc/inc/service-utils.inc:255 etc/inc/service-utils.inc:272
+msgid "Captive Portal"
+msgstr "Portal Captive"
+
+#: usr/local/www/diag_backup.php:105 usr/local/www/diag_backup.php:182
+msgid "Captive Portal Vouchers"
+msgstr "Vouchers do Portal Captive"
+
+#: usr/local/www/diag_backup.php:106 usr/local/www/fbegin.inc:121
+#: usr/local/www/status_services.php:263
+#: usr/local/www/widgets/widgets/services_status.widget.php:68
+#: usr/local/www/fbegin.inc:138 usr/local/www/diag_backup.php:183
+#: etc/inc/service-utils.inc:241 usr/local/www/fbegin.inc:147
+#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:240
+#: etc/inc/service-utils.inc:257
+msgid "DNS Forwarder"
+msgstr "DNS Forwarder"
+
+#: usr/local/www/diag_backup.php:107 usr/local/www/fbegin.inc:125
+#: usr/local/www/fbegin.inc:142 usr/local/www/diag_backup.php:184
+#: usr/local/www/fbegin.inc:151 usr/local/www/fbegin.inc:143
+msgid "DHCP Server"
+msgstr "Servidor DHCP"
+
+#: usr/local/www/diag_backup.php:108 usr/local/www/diag_backup.php:185
+#: usr/local/www/diag_backup.php:186
+msgid "Firewall Rules"
+msgstr "Regras de firewall"
+
+#: usr/local/www/diag_backup.php:110 usr/local/www/diag_backup.php:187
+#: usr/local/www/diag_backup.php:188
+msgid "IPSEC"
+msgstr "IPSEC"
+
+#: usr/local/www/diag_backup.php:114 usr/local/www/diag_backup.php:191
+#: usr/local/www/diag_backup.php:192
+msgid "PPTP Server"
+msgstr "Servidor PPTP"
+
+#: usr/local/www/diag_backup.php:115 usr/local/www/diag_backup.php:193
+#: usr/local/www/diag_backup.php:194
+msgid "Scheduled Tasks"
+msgstr "Tarefas Agendadas"
+
+#: usr/local/www/diag_backup.php:116 usr/local/www/diag_backup.php:194
+#: usr/local/www/diag_backup.php:195
+msgid "Syslog"
+msgstr "Syslog"
+
+#: usr/local/www/diag_backup.php:118 usr/local/www/diag_backup.php:196
+#: usr/local/www/diag_backup.php:197
+msgid "Static routes"
+msgstr "Rotas estáticas"
+
+#: usr/local/www/diag_backup.php:119 usr/local/www/diag_backup.php:197
+#: usr/local/www/diag_backup.php:198
+msgid "System tunables"
+msgstr "Ajustes de sistema"
+
+#: usr/local/www/diag_backup.php:120 usr/local/www/diag_backup.php:198
+#: usr/local/www/diag_backup.php:199
+msgid "SNMP Server"
+msgstr "Servidor SNMP"
+
+#: usr/local/www/diag_backup.php:122 usr/local/www/diag_backup.php:200
+#: usr/local/www/diag_backup.php:201
+msgid "VLANS"
+msgstr "VLANS"
+
+#: usr/local/www/diag_backup.php:130 usr/local/www/diag_backup.php:205
+#: usr/local/www/diag_backup.php:206
+msgid "ALL"
+msgstr "TODOS"
+
+#: usr/local/www/diag_backup.php:157 usr/local/www/diag_backup.php:619
+#: usr/local/www/diag_backup.php:654 usr/local/www/diag_backup.php:244
+#: usr/local/www/diag_backup.php:698 usr/local/www/diag_backup.php:735
+#: usr/local/www/diag_backup.php:703 usr/local/www/diag_backup.php:740
+#: usr/local/www/diag_backup.php:245 usr/local/www/diag_backup.php:704
+#: usr/local/www/diag_backup.php:741
+msgid "Restore configuration"
+msgstr "Restaurar configuração"
+
+#: usr/local/www/diag_backup.php:159 usr/local/www/diag_backup.php:246
+#: usr/local/www/diag_backup.php:247
+msgid "Reinstall"
+msgstr "Reinstalar"
+
+#: usr/local/www/diag_backup.php:161 usr/local/www/diag_backup.php:673
+#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:754
+#: usr/local/www/diag_backup.php:762 usr/local/www/diag_backup.php:249
+#: usr/local/www/diag_backup.php:763
+msgid "Clear Package Lock"
+msgstr "Limpar trava de Pacotes"
+
+#: usr/local/www/diag_backup.php:165 usr/local/www/diag_backup.php:252
+#: usr/local/www/diag_backup.php:253
+msgid "Restore version"
+msgstr "Restaurar versão"
+
+#: usr/local/www/diag_backup.php:180 usr/local/www/diag_backup.php:267
+#: usr/local/www/diag_backup.php:268
+msgid "You must supply and confirm the password for encryption."
+msgstr "Você precisa fornecer e confirmar a senha para criptografia."
+
+#: usr/local/www/diag_backup.php:182 usr/local/www/diag_backup.php:268
+#: usr/local/www/diag_backup.php:269 usr/local/www/diag_backup.php:346
+#: usr/local/www/diag_backup.php:270 usr/local/www/diag_backup.php:347
+msgid "The supplied 'Password' and 'Confirm' field values must match."
+msgstr "Os campos 'Senha' e 'Confirmar' fornecidos devem ser iguais."
+
+#: usr/local/www/diag_backup.php:266 usr/local/www/diag_backup.php:344
+#: usr/local/www/diag_backup.php:345
+msgid "You must supply and confirm the password for decryption."
+msgstr "Você deve fornecer e confirmar a senha para descriptografia."
+
+#: usr/local/www/diag_backup.php:278 usr/local/www/diag_backup.php:356
+#: usr/local/www/diag_backup.php:357
+#, php-format
+msgid "Warning, could not read file %s"
+msgstr "Aviso, não é possível ler o arquivo %s"
+
+#: usr/local/www/diag_backup.php:284 usr/local/www/diag_backup.php:362
+#: usr/local/www/diag_backup.php:363
+msgid "The uploaded file does not appear to contain an encrypted pfsense configuration."
+msgstr "O arquivo enviado não parece conter uma configuração pfSense criptografada."
+
+#: usr/local/www/diag_backup.php:291 usr/local/www/diag_backup.php:369
+#: usr/local/www/diag_backup.php:370
+msgid "Upgrading m0n0wall configuration to pfsense."
+msgstr "Atualizando configuração do m0n0wall para pfSense."
+
+#: usr/local/www/diag_backup.php:299 usr/local/www/diag_backup.php:377
+#: usr/local/www/diag_backup.php:380 usr/local/www/diag_backup.php:378
+#: usr/local/www/diag_backup.php:381
+msgid "You have selected to restore an area but we could not locate the correct xml tag."
+msgstr "Você selecionou uma área para restaurar, mas não conseguimos localizar a tag XML correta."
+
+#: usr/local/www/diag_backup.php:303 usr/local/www/diag_backup.php:392
+#: usr/local/www/diag_backup.php:393
+msgid "The configuration area has been restored. You may need to reboot the firewall."
+msgstr "A área de configuração foi restaurada. Você pode precisar reiniciar o firewall."
+
+#: usr/local/www/diag_backup.php:307 usr/local/www/diag_backup.php:397
+#: usr/local/www/diag_backup.php:398
+#, php-format
+msgid "You have selected to restore the full configuration but we could not locate a %s tag."
+msgstr "Você selecionou restaurar a configuração completa, mas não podemos localizar uma tag %s."
+
+#: usr/local/www/diag_backup.php:438 usr/local/www/diag_backup.php:515
+#: usr/local/www/diag_backup.php:516
+msgid "The m0n0wall configuration has been restored and upgraded to pfSense."
+msgstr "A configuração m0n0wall foi restaurada e atualizada para pfSense."
+
+#: usr/local/www/diag_backup.php:461 usr/local/www/diag_backup.php:485
+#: usr/local/www/diag_backup.php:538 usr/local/www/diag_backup.php:562
+#: usr/local/www/diag_backup.php:543 usr/local/www/diag_backup.php:567
+#: usr/local/www/diag_backup.php:544 usr/local/www/diag_backup.php:568
+msgid "The configuration could not be restored."
+msgstr "A configuração não poderá ser restaurada."
+
+#: usr/local/www/diag_backup.php:466 usr/local/www/diag_backup.php:543
+#: usr/local/www/diag_backup.php:548 usr/local/www/diag_backup.php:549
+msgid "The configuration could not be restored (file upload error)."
+msgstr "A configuração não pode ser restaurada (erro de carregamento de arquivo)."
+
+#: usr/local/www/diag_backup.php:479 usr/local/www/diag_backup.php:556
+#: usr/local/www/diag_backup.php:561 usr/local/www/diag_backup.php:562
+msgid "XXX - this feature may hose your config (do NOT backrev configs!) - billm"
+msgstr "XXX - está funcionalidade pode estragar suas configurações (NÃO retorne a versão de suas configurações!) - billm"
+
+#: usr/local/www/diag_backup.php:488 usr/local/www/diag_backup.php:565
+#: usr/local/www/diag_backup.php:570 usr/local/www/diag_backup.php:571
+msgid "No version selected."
+msgstr "Nenhuma versão selecionada."
+
+#: usr/local/www/diag_backup.php:499 usr/local/www/diag_backup.php:576
+#: usr/local/www/diag_backup.php:581 usr/local/www/diag_backup.php:582
+msgid "Backup/restore"
+msgstr "Backup/restauração"
+
+#: usr/local/www/diag_backup.php:540
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624
+#: usr/local/www/diag_backup.php:625
+msgid "The firewall configuration has been changed."
+msgstr "A configuração do firewall foi alterada."
+
+#: usr/local/www/diag_backup.php:540
+#: usr/local/www/system_firmware_restorefullbackup.php:116
+#: usr/local/www/diag_backup.php:619 usr/local/www/diag_backup.php:624
+#: usr/local/www/diag_backup.php:625
+msgid "The firewall is now rebooting."
+msgstr "O firewall está reiniciando agora."
+
+#: usr/local/www/diag_backup.php:549 usr/local/www/diag_confbak.php:139
+#: usr/local/www/diag_backup.php:628 usr/local/www/diag_backup.php:633
+#: usr/local/www/diag_backup.php:634
+msgid "Config History"
+msgstr "Histórico de configuração"
+
+#: usr/local/www/diag_backup.php:550 usr/local/www/diag_confbak.php:140
+#: usr/local/www/fbegin.inc:190 usr/local/www/fbegin.inc:208
+#: usr/local/www/diag_backup.php:629 usr/local/www/fbegin.inc:216
+#: usr/local/www/diag_backup.php:634 usr/local/www/fbegin.inc:207
+#: usr/local/www/diag_backup.php:635
+msgid "Backup/Restore"
+msgstr "Backup/Restauração"
+
+#: usr/local/www/diag_backup.php:560 usr/local/www/diag_backup.php:639
+#: usr/local/www/diag_backup.php:644 usr/local/www/diag_backup.php:645
+msgid "Backup configuration"
+msgstr "Configuração do backup"
+
+#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644
+#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:650
+msgid "Click this button to download the system configuration in XML format."
+msgstr "Clique neste botão para fazer download da configuração do sistema em formato XML."
+
+#: usr/local/www/diag_backup.php:565 usr/local/www/diag_backup.php:644
+#: usr/local/www/diag_backup.php:649 usr/local/www/diag_backup.php:650
+msgid "Backup area:"
+msgstr "Ãrea de backup:"
+
+#: usr/local/www/diag_backup.php:572 usr/local/www/diag_backup.php:651
+#: usr/local/www/diag_backup.php:656 usr/local/www/diag_backup.php:657
+msgid "Do not backup package information."
+msgstr "Não fazer backup de informações de pacotes."
+
+#: usr/local/www/diag_backup.php:582 usr/local/www/diag_backup.php:661
+#: usr/local/www/diag_backup.php:666 usr/local/www/diag_backup.php:667
+msgid "Encrypt this configuration file."
+msgstr "Criptografar este arquivo de configuração."
+
+#: usr/local/www/diag_backup.php:590 usr/local/www/diag_backup.php:669
+#: usr/local/www/diag_backup.php:674 usr/local/www/diag_backup.php:675
+msgid "Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config.xml space!)"
+msgstr "Não fazer backup dos dados RRD (Nota: dados RRD podem consumir 4+ megabytes de espaço no config.xml!)"
+
+#: usr/local/www/diag_backup.php:605 usr/local/www/diag_backup.php:684
+#: usr/local/www/diag_backup.php:689 usr/local/www/diag_backup.php:690
+msgid "confirm:"
+msgstr "confirmar:"
+
+#: usr/local/www/diag_backup.php:612 usr/local/www/diag_backup.php:691
+#: usr/local/www/diag_backup.php:696 usr/local/www/diag_backup.php:697
+msgid "Download configuration"
+msgstr "Download da configuração"
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703
+#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:709
+msgid "Open a"
+msgstr "Abra um"
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:703
+#: usr/local/www/diag_backup.php:708 usr/local/www/diag_backup.php:709
+msgid "configuration XML file and click the button below to restore the configuration."
+msgstr "arquivo de configuração XML e clique no botão abaixo para restaurar a configuração."
+
+#: usr/local/www/diag_backup.php:624 usr/local/www/diag_backup.php:705
+#: usr/local/www/diag_backup.php:710 usr/local/www/diag_backup.php:711
+msgid "Restore area:"
+msgstr "Ãrea de restauração:"
+
+#: usr/local/www/diag_backup.php:632 usr/local/www/diag_backup.php:713
+#: usr/local/www/diag_backup.php:718 usr/local/www/diag_backup.php:719
+msgid "Configuration file is encrypted."
+msgstr "O arquivo de configuração está criptografado."
+
+#: usr/local/www/diag_backup.php:639 usr/local/www/diag_backup.php:720
+#: usr/local/www/diag_backup.php:725 usr/local/www/diag_backup.php:726
+msgid "Password :"
+msgstr "Senha :"
+
+#: usr/local/www/diag_backup.php:647 usr/local/www/diag_backup.php:728
+#: usr/local/www/diag_backup.php:733 usr/local/www/diag_backup.php:734
+msgid "confirm :"
+msgstr "confirmar:"
+
+#: usr/local/www/diag_backup.php:655 usr/local/www/diag_backup.php:736
+#: usr/local/www/diag_backup.php:741 usr/local/www/diag_backup.php:742
+msgid "The firewall will reboot after restoring the configuration."
+msgstr "O firewall irá reiniciar após restaurar a configuração."
+
+#: usr/local/www/diag_backup.php:663 usr/local/www/diag_backup.php:744
+#: usr/local/www/diag_backup.php:749 usr/local/www/diag_backup.php:750
+msgid "Package Functions"
+msgstr "Funções de Pacotes"
+
+#: usr/local/www/diag_backup.php:668 usr/local/www/diag_backup.php:749
+#: usr/local/www/diag_backup.php:755 usr/local/www/diag_backup.php:756
+msgid "Click this button to reinstall all system packages. This may take a while."
+msgstr "Clique neste botão para reinstalar todos os pacotes de sistema. Isto pode demorar um pouco."
+
+#: usr/local/www/diag_backup.php:669 usr/local/www/diag_backup.php:750
+#: usr/local/www/diag_backup.php:756 usr/local/www/diag_backup.php:757
+msgid "Reinstall packages"
+msgstr "Reinstalar pacotes"
+
+#: usr/local/www/diag_backup.php:672 usr/local/www/diag_backup.php:753
+#: usr/local/www/diag_backup.php:761 usr/local/www/diag_backup.php:762
+msgid "Click this button to clear the package lock if a package fails to reinstall properly after an upgrade."
+msgstr "Clique neste botão para limpar a trava de pacotes se um pacote falhou em reinstalar corretamente depois de uma atualização."
+
+#: usr/local/www/firewall_shaper_queues.php:172
+msgid "Firewall: Shaper: By Queues View"
+msgstr "Firewall: Modelador: Por Visualização de Filas"
+
+#: usr/local/www/diag_confbak.php:49
+#, php-format
+msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"."
+msgstr "Sucesso ao reverter o timestamp %1$s com descrição \"%2$s\"."
+
+#: usr/local/www/diag_confbak.php:49 usr/local/www/diag_confbak.php:59
+#: usr/local/www/diag_confbak.php:111 usr/local/www/diag_confbak.php:161
+#: usr/local/www/diag_confbak.php:169 usr/local/www/diag_confbak.php:162
+#: usr/local/www/diag_confbak.php:171
+#: usr/local/www/firewall_rules_edit.php:1585
+#: usr/local/www/firewall_rules_edit.php:1593
+#: usr/local/www/firewall_nat_edit.php:869
+#: usr/local/www/firewall_nat_edit.php:877
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:1644
+#: usr/local/www/firewall_rules_edit.php:1652
+msgid "n/j/y H:i:s"
+msgstr "j/n/y H:i:s"
+
+#: usr/local/www/diag_confbak.php:51
+msgid "Unable to revert to the selected configuration."
+msgstr "Incapaz de reverter a configuração selecionada."
+
+#: usr/local/www/diag_confbak.php:59
+#, php-format
+msgid "Deleted backup with timestamp %1$s and description \"%2$s\"."
+msgstr "Backup excluído com timestamp %1$s e descrição \"%2$s\"."
+
+#: usr/local/www/diag_confbak.php:98
+msgid "Configuration History"
+msgstr "Histórico de Configuração"
+
+#: usr/local/www/diag_confbak.php:111
+msgid "Configuration diff from"
+msgstr "Diferença de Configuração de"
+
+#: usr/local/www/diag_confbak.php:152 usr/local/www/diag_confbak.php:206
+#: usr/local/www/diag_confbak.php:208
+msgid "Diff"
+msgstr "Diff"
+
+#: usr/local/www/diag_confbak.php:153
+#: usr/local/www/system_firmware_restorefullbackup.php:140
+msgid "Date"
+msgstr "Data"
+
+#: usr/local/www/diag_confbak.php:154 usr/local/www/diag_confbak.php:155
+msgid "Configuration Change"
+msgstr "Alteração na configuração"
+
+#: usr/local/www/diag_confbak.php:163 usr/local/www/diag_confbak.php:165
+msgid "Current"
+msgstr "Atual"
+
+#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_confbak.php:173
+#: usr/local/www/widgets/widgets/gateways.widget.php:105
+#: usr/local/www/widgets/widgets/gateways.widget.php:128
+#: usr/local/www/widgets/widgets/gateways.widget.php:129
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: usr/local/www/diag_confbak.php:189 usr/local/www/diag_confbak.php:191
+msgid "Revert to this configuration?"
+msgstr "Reverter para essa configuração?"
+
+#: usr/local/www/diag_confbak.php:190 usr/local/www/diag_confbak.php:192
+msgid "Revert to this configuration"
+msgstr "Reverter para esta configuração"
+
+#: usr/local/www/diag_confbak.php:194 usr/local/www/diag_confbak.php:196
+msgid "Delete this configuration backup?"
+msgstr "Excluir este backup de configuração?"
+
+#: usr/local/www/diag_confbak.php:195 usr/local/www/diag_confbak.php:197
+msgid "Remove this backup"
+msgstr "Remover este backup"
+
+#: usr/local/www/diag_confbak.php:200 usr/local/www/diag_confbak.php:202
+msgid "Download this backup"
+msgstr "Download deste backup"
+
+#: usr/local/www/diag_confbak.php:212 usr/local/www/diag_confbak.php:214
+msgid "No backups found."
+msgstr "Nenhum backup foi encontrado."
+
+#: usr/local/www/firewall_virtual_ip.php:106
+#: usr/local/www/firewall_virtual_ip.php:103
+msgid "This entry cannot be deleted because it is still referenced by at least one NAT mapping."
+msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um mapeamento NAT."
+
+#: usr/local/www/firewall_virtual_ip.php:118
+msgid "This entry cannot be deleted because it is still referenced by CARP"
+msgstr "Essa entrada não pode ser removida porque ela ainda é referenciada pelo CARP"
+
+#: usr/local/www/firewall_virtual_ip.php:124
+msgid "This entry cannot be deleted because it is still referenced by ip alias entry"
+msgstr "Essa entrada não pode ser removida porque ela ainda é referenciada pelo CARP"
+
+#: usr/local/www/firewall_virtual_ip.php:149
+#: usr/local/www/firewall_virtual_ip.php:152
+#: usr/local/www/firewall_virtual_ip.php:166
+#: usr/local/www/firewall_virtual_ip.php:189
+#: usr/local/www/firewall_virtual_ip.php:196
+msgid "Virtual IP Addresses"
+msgstr "Endereços IP Virtuais"
+
+#: usr/local/www/firewall_virtual_ip.php:164
+#: usr/local/www/firewall_virtual_ip.php:167
+#: usr/local/www/firewall_virtual_ip.php:181
+#: usr/local/www/firewall_virtual_ip.php:204
+#: usr/local/www/firewall_virtual_ip.php:211
+msgid "The VIP configuration has been changed."
+msgstr "A configuração de Endereços IP Virtuais foi modificada."
+
+#: usr/local/www/firewall_virtual_ip.php:172 usr/local/www/fbegin.inc:115
+#: usr/local/www/fbegin.inc:132 usr/local/www/fbegin.inc:141
+#: usr/local/www/firewall_virtual_ip.php:175
+#: usr/local/www/firewall_virtual_ip.php:189 usr/local/www/fbegin.inc:133
+#: usr/local/www/firewall_virtual_ip.php:212
+#: usr/local/www/firewall_virtual_ip.php:219
+msgid "Virtual IPs"
+msgstr "IPs Virtuais"
+
+#: usr/local/www/firewall_virtual_ip.php:173
+#: usr/local/www/firewall_virtual_ip.php:176
+#: usr/local/www/firewall_virtual_ip.php:190
+#: usr/local/www/firewall_virtual_ip.php:213
+#: usr/local/www/firewall_virtual_ip.php:220
+msgid "CARP Settings"
+msgstr "Configurações do CARP"
+
+#: usr/local/www/firewall_virtual_ip.php:185
+#: usr/local/www/firewall_virtual_ip.php:188
+#: usr/local/www/firewall_virtual_ip.php:202
+#: usr/local/www/firewall_virtual_ip.php:225
+#: usr/local/www/firewall_virtual_ip.php:232
+msgid "Virtual IP address"
+msgstr "Endereços IP Virtuais"
+
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_virtual_ip.php:299
+msgid "The virtual IP addresses defined on this page may be used in"
+msgstr "Os endereços IP virtuais definidos nessa página podem ser usados em"
+
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip.php:248
+#: usr/local/www/firewall_virtual_ip.php:268
+#: usr/local/www/firewall_virtual_ip.php:291
+#: usr/local/www/firewall_virtual_ip.php:299
+msgid "mappings."
+msgstr "mapeamentos."
+
+#: usr/local/www/firewall_virtual_ip.php:243
+#: usr/local/www/firewall_virtual_ip.php:249
+#: usr/local/www/firewall_virtual_ip.php:269
+#: usr/local/www/firewall_virtual_ip.php:292
+#: usr/local/www/firewall_virtual_ip.php:300
+msgid "You can check the status of your CARP Virtual IPs and interfaces "
+msgstr "Você pode verificar o status de seus IPs Virtuais CARP e interfaces "
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309
+#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297
+#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:301
+msgid "apply"
+msgstr "aplicar"
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/guiconfig.inc:309
+#: usr/local/www/guiconfig.inc:298 usr/local/www/guiconfig.inc:297
+#: usr/local/www/guiconfig.inc:294 usr/local/www/guiconfig.inc:301
+msgid "save"
+msgstr "salvar"
+
+#: usr/local/www/guiconfig.inc:295 usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/system_certmanager.php:541
+#: usr/local/www/system_certmanager.php:640 usr/local/www/guiconfig.inc:309
+#: usr/local/www/vpn_ipsec_mobile.php:335 usr/local/www/guiconfig.inc:298
+#: usr/local/www/system_certmanager.php:649 usr/local/www/guiconfig.inc:297
+#: usr/local/www/system_certmanager.php:650 usr/local/www/guiconfig.inc:294
+#: usr/local/www/guiconfig.inc:301
+msgid "create"
+msgstr "crie"
+
+#: usr/local/www/halt.php:52 usr/local/www/halt.php:61
+msgid "The system is halting now. This may take one minute."
+msgstr "O sistema está desligando agora. Isso pode levar um minuto."
+
+#: usr/local/www/halt.php:59 usr/local/www/halt.php:54
+msgid "Halt system"
+msgstr "Desligar sistema"
+
+#: usr/local/www/halt.php:67
+msgid "Are you sure you want to halt the system?"
+msgstr "Você tem certeza que deseja desligar o sistema?"
+
+#: usr/local/www/index.php:115 usr/local/www/index.php:126
+#: usr/local/www/index.php:129
+msgid "Widget configuration has been changed."
+msgstr "Configuração de componente foi modificada."
+
+#: usr/local/www/index.php:172 usr/local/www/index.php:183
+#: usr/local/www/index.php:186
+#, php-format
+msgid "Welcome to %s!\n"
+msgstr "Bem-vindo ao %s!\n"
+
+#: usr/local/www/index.php:173 usr/local/www/index.php:184
+#: usr/local/www/index.php:187
+msgid "One moment while we start the initial setup wizard."
+msgstr "Um minuto enquanto iniciamos o wizard de instalação inicial."
+
+#: usr/local/www/index.php:174 usr/local/www/index.php:185
+#: usr/local/www/index.php:188
+msgid "Embedded platform users: Please be patient, the wizard takes a little longer to run than the normal GUI."
+msgstr "Usuários de plataformas embutidas: Por favor, seja paciente, o wizard leva um tempo a maior para executar do que uma GUI normal."
+
+#: usr/local/www/index.php:175 usr/local/www/index.php:186
+#: usr/local/www/index.php:189
+#, php-format
+msgid "To bypass the wizard, click on the %s logo on the initial page."
+msgstr "Para evitar o wizard, clique no logo %s na página inicial."
+
+#: usr/local/www/index.php:454 usr/local/www/index.php:446
+#: usr/local/www/index.php:463 usr/local/www/index.php:468
+#: usr/local/www/index.php:465
+msgid "Status: Dashboard"
+msgstr "Status: Dashboard"
+
+#: usr/local/www/index.php:486 usr/local/www/index.php:478
+#: usr/local/www/index.php:490 usr/local/www/index.php:494
+#: usr/local/www/index.php:491
+msgid "Available Widgets"
+msgstr "Componentes Disponíveis"
+
+#: usr/local/www/index.php:524 usr/local/www/index.php:516
+#: usr/local/www/index.php:528 usr/local/www/index.php:531
+msgid "Welcome to the Dashboard page"
+msgstr "Bem-vindo à página do Painel"
+
+#: usr/local/www/index.php:532 usr/local/www/index.php:524
+#: usr/local/www/index.php:536 usr/local/www/index.php:538
+#: usr/local/www/index.php:535
+msgid "This page allows you to customize the information you want to be displayed!"
+msgstr "Essa página permite que você customize a informação que você quer exibir!"
+
+#: usr/local/www/index.php:533 usr/local/www/index.php:525
+#: usr/local/www/index.php:537 usr/local/www/index.php:539
+#: usr/local/www/index.php:536
+msgid "To get started click the"
+msgstr "Para iniciar, clique no"
+
+#: usr/local/www/index.php:533 usr/local/www/index.php:525
+#: usr/local/www/index.php:537 usr/local/www/index.php:539
+#: usr/local/www/index.php:536
+msgid "icon to add widgets."
+msgstr "para adicionar componentes."
+
+#: usr/local/www/index.php:535 usr/local/www/index.php:527
+#: usr/local/www/index.php:539 usr/local/www/index.php:541
+#: usr/local/www/index.php:538
+msgid "You can move any widget around by clicking and dragging the title."
+msgstr "Você pode mover qualquer componente clicando e arrastando o seu título."
+
+#: usr/local/www/index.php:541 usr/local/www/index.php:534
+#: usr/local/www/index.php:546 usr/local/www/index.php:548
+#: usr/local/www/index.php:545
+msgid "Click here to add widgets"
+msgstr "Clique aqui para adicionar componentes"
+
+#: usr/local/www/index.php:543 usr/local/www/index.php:536
+#: usr/local/www/index.php:548 usr/local/www/index.php:550
+#: usr/local/www/index.php:547
+msgid "Click here for help"
+msgstr "Clique aqui para receber ajuda"
+
+#: usr/local/www/index.php:547 usr/local/www/index.php:540
+#: usr/local/www/index.php:552 usr/local/www/index.php:554
+#: usr/local/www/index.php:551
+msgid "Save Settings"
+msgstr "Salvar Configurações"
+
+#: usr/local/www/index.php:699 usr/local/www/index.php:692
+#: usr/local/www/index.php:704 usr/local/www/index.php:701
+msgid "Loading selected widget"
+msgstr "Carregando componente selecionado"
+
+#: usr/local/www/interfaces.php:186 usr/local/www/interfaces.php:184
+#: usr/local/www/interfaces.php:185
+#, php-format
+msgid "Sorry, an alias with the name %s already exists."
+msgstr "Lamento, um alias com o nome %s já existe."
+
+#: usr/local/www/interfaces.php:327 usr/local/www/interfaces.php:355
+#: usr/local/www/interfaces.php:352 usr/local/www/interfaces.php:350
+#: usr/local/www/interfaces.php:351 usr/local/www/interfaces.php:353
+msgid "You have already applied your settings!"
+msgstr "Você já aplicou suas configurações!"
+
+#: usr/local/www/interfaces.php:407 usr/local/www/interfaces.php:443
+#: usr/local/www/interfaces.php:440 usr/local/www/interfaces.php:428
+#: usr/local/www/interfaces.php:433 usr/local/www/interfaces.php:429
+#: usr/local/www/interfaces.php:432
+msgid "An interface with the specified description already exists."
+msgstr "Uma interface com a descrição especificada já existe."
+
+#: usr/local/www/interfaces.php:413 usr/local/www/interfaces.php:449
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:434
+#: usr/local/www/interfaces.php:439 usr/local/www/interfaces.php:435
+#: usr/local/www/interfaces.php:438
+msgid "The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration."
+msgstr "O Servidor DHCP está ativo nessa interface e pode ser usado somente com uma configuração de IP estática. Por favor, desabilite o serviço do Servidor DHCP nessa interface primeiro, então modifique a configuração de interface."
+
+#: usr/local/www/interfaces.php:415 usr/local/www/interfaces.php:451
+#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:436
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:437
+#: usr/local/www/interfaces.php:440
+msgid "The DHCP6 Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the DHCPv6 Server service on this interface first, then change the interface configuration."
+msgstr "O Servidor DHCP6 está ativo nessa interface e pode ser usado somente com uma configuração de IPv6 estática. Por favor, desabilite o serviço do Servidor DHCPv6 nessa interface primeiro, então modifique a configuração de interface."
+
+#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:1364
+#: usr/local/www/status_interfaces.php:192
+#: usr/local/www/status_interfaces.php:266 usr/local/www/interfaces.php:456
+#: usr/local/www/interfaces.php:1468 usr/local/www/status_interfaces.php:269
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:1456
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:1469
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:1514
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:1508
+#: usr/local/www/interfaces.php:445 usr/local/www/interfaces.php:1521
+msgid "IPv4 address"
+msgstr "Endereço IPv4"
+
+#: usr/local/www/interfaces.php:420 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:456 usr/local/www/interfaces.php:509
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:441 usr/local/www/interfaces.php:494
+#: usr/local/www/interfaces.php:446 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:495
+#: usr/local/www/interfaces.php:445 usr/local/www/interfaces.php:498
+msgid "Subnet bit count"
+msgstr "Contador de bit de subrede"
+
+#: usr/local/www/interfaces.php:427 usr/local/www/interfaces.php:480
+msgid "This interface is referenced by VIPs please delete those before setting the interface to 'none' configuration."
+msgstr "Essa interface é referenciada por VIPs, por favor apague-os antes de configurar a interface para 'nenhuma' configuração."
+
+#: usr/local/www/interfaces.php:432 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:521
+#: usr/local/www/interfaces.php:531 usr/local/www/interfaces.php:541
+#: usr/local/www/interfaces.php:546 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:518 usr/local/www/interfaces.php:528
+#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:453 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:526
+#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:511
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:533
+#: usr/local/www/interfaces.php:454 usr/local/www/interfaces.php:507
+#: usr/local/www/interfaces.php:519 usr/local/www/interfaces.php:529
+#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:457
+#: usr/local/www/interfaces.php:510 usr/local/www/interfaces.php:522
+#: usr/local/www/interfaces.php:532 usr/local/www/interfaces.php:537
+#, php-format
+msgid "You have to reassign the interface to be able to configure as %s."
+msgstr "Você precisa reassociar a interface para ser capaz de configurar como %s."
+
+#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1748
+#: usr/local/www/interfaces.php:472 usr/local/www/interfaces.php:1926
+#: usr/local/www/interfaces.php:469 usr/local/www/interfaces.php:1914
+#: usr/local/www/interfaces.php:457 usr/local/www/interfaces.php:1938
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1984
+#: usr/local/www/interfaces.php:458 usr/local/www/interfaces.php:1972
+#: usr/local/www/interfaces.php:461 usr/local/www/interfaces.php:2008
+msgid "Modem Port"
+msgstr "Porta do Modem"
+
+#: usr/local/www/interfaces.php:436 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces_ppps_edit.php:182
+#: usr/local/www/interfaces_ppps_edit.php:523 usr/local/www/interfaces.php:472
+#: usr/local/www/interfaces.php:1914
+#: usr/local/www/interfaces_ppps_edit.php:524 usr/local/www/interfaces.php:469
+#: usr/local/www/interfaces.php:1902
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:530 usr/local/www/interfaces.php:457
+#: usr/local/www/interfaces.php:1926 usr/local/www/interfaces.php:462
+#: usr/local/www/interfaces.php:1972
+#: usr/local/www/interfaces_ppps_edit.php:528 usr/local/www/interfaces.php:458
+#: usr/local/www/interfaces.php:1960 usr/local/www/interfaces.php:461
+#: usr/local/www/interfaces.php:1996
+msgid "Phone Number"
+msgstr "Número de Telefone"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445
+#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468
+#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:470
+msgid "PPPoE username"
+msgstr "Nome do Usuário PPPoE"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:445
+#: usr/local/www/interfaces.php:478 usr/local/www/interfaces.php:481
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:466 usr/local/www/interfaces.php:468
+#: usr/local/www/interfaces.php:471 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:470
+msgid "PPPoE password"
+msgstr "Senha PPPoE"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:1807
+#: usr/local/www/interfaces.php:1926
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498
+#: usr/local/www/interfaces.php:1985 usr/local/www/interfaces.php:2104
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:1973
+#: usr/local/www/interfaces.php:2092
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:2000 usr/local/www/interfaces.php:2122
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:2046
+#: usr/local/www/interfaces.php:2168 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2157
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:477
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:2071
+#: usr/local/www/interfaces.php:2193
+msgid "Dial on demand"
+msgstr "Discar sob demanda"
+
+#: usr/local/www/interfaces.php:442 usr/local/www/interfaces.php:452
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:199 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:498
+#: usr/local/www/interfaces.php:475 usr/local/www/interfaces.php:485
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:205 usr/local/www/interfaces.php:463
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:468 usr/local/www/interfaces.php:464
+#: usr/local/www/interfaces.php:474 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:467 usr/local/www/interfaces.php:477
+#: usr/local/www/interfaces.php:487
+msgid "Idle timeout value"
+msgstr "Valor de tempo ocioso"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480
+msgid "PPTP username"
+msgstr "Nome do Usuário PPTP"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480
+msgid "PPTP password"
+msgstr "Senha PPTP"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480
+msgid "PPTP local IP address"
+msgstr "Endereço IP local PPTP"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480
+msgid "PPTP subnet"
+msgstr "Subrede PPTP"
+
+#: usr/local/www/interfaces.php:452 usr/local/www/interfaces.php:455
+#: usr/local/www/interfaces.php:488 usr/local/www/interfaces.php:491
+#: usr/local/www/interfaces.php:485 usr/local/www/interfaces.php:473
+#: usr/local/www/interfaces.php:476 usr/local/www/interfaces.php:478
+#: usr/local/www/interfaces.php:481 usr/local/www/interfaces.php:474
+#: usr/local/www/interfaces.php:477 usr/local/www/interfaces.php:480
+msgid "PPTP remote IP address"
+msgstr "Endereço IP remoto PPTP"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490
+msgid "L2TP username"
+msgstr "Nome do Usuário L2TP"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490
+msgid "L2TP password"
+msgstr "Senha L2TP"
+
+#: usr/local/www/interfaces.php:462 usr/local/www/interfaces.php:465
+#: usr/local/www/interfaces.php:498 usr/local/www/interfaces.php:501
+#: usr/local/www/interfaces.php:495 usr/local/www/interfaces.php:483
+#: usr/local/www/interfaces.php:486 usr/local/www/interfaces.php:488
+#: usr/local/www/interfaces.php:491 usr/local/www/interfaces.php:484
+#: usr/local/www/interfaces.php:487 usr/local/www/interfaces.php:490
+msgid "L2TP remote IP address"
+msgstr "Endereço IP remoto L2TP"
+
+#: usr/local/www/interfaces.php:473 usr/local/www/interfaces.php:1470
+#: usr/local/www/status_interfaces.php:216 usr/local/www/diag_ndp.php:129
+#: usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcpv6_edit.php:198
+#: usr/local/www/status_dhcpv6_leases.php:359
+#: usr/local/www/services_dhcpv6_edit.php:201
+#: usr/local/www/status_interfaces.php:297
+#: usr/local/www/status_dhcpv6_leases.php:403 usr/local/www/interfaces.php:509
+#: usr/local/www/interfaces.php:1576 usr/local/www/services_dhcpv6.php:899
+#: usr/local/www/services_dhcpv6_edit.php:200
+#: usr/local/www/status_interfaces.php:300
+#: usr/local/www/status_dhcpv6_leases.php:404 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:1564 usr/local/www/services_dhcpv6.php:830
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/services_dhcpv6_edit.php:203
+#: usr/local/www/services_dhcpv6.php:851 usr/local/www/interfaces.php:494
+#: usr/local/www/interfaces.php:1574 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:1620 usr/local/www/interfaces.php:495
+#: usr/local/www/interfaces.php:1613 usr/local/www/interfaces.php:498
+#: usr/local/www/interfaces.php:1626
+msgid "IPv6 address"
+msgstr "Endereço IPv6"
+
+#: usr/local/www/interfaces.php:493 usr/local/www/interfaces.php:563
+#: usr/local/www/interfaces.php:560 usr/local/www/interfaces.php:550
+#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:553
+#: usr/local/www/interfaces.php:556
+msgid "A valid IPv4 address must be specified."
+msgstr "Um endereço de IPv4 válido de ser especificado."
+
+#: usr/local/www/interfaces.php:495 usr/local/www/services_dhcpv6_edit.php:123
+#: usr/local/www/services_dhcpv6_edit.php:125 usr/local/www/interfaces.php:565
+#: usr/local/www/interfaces.php:562 usr/local/www/services_dhcpv6_edit.php:128
+#: usr/local/www/interfaces.php:574 usr/local/www/interfaces.php:570
+#: usr/local/www/interfaces.php:573
+msgid "A valid IPv6 address must be specified."
+msgstr "Um endereço de IPv6 válido de ser especificado."
+
+#: usr/local/www/interfaces.php:497 usr/local/www/interfaces.php:499
+#: usr/local/www/interfaces.php:567 usr/local/www/interfaces.php:569
+#: usr/local/www/interfaces.php:564 usr/local/www/interfaces.php:566
+#: usr/local/www/interfaces.php:579 usr/local/www/interfaces.php:581
+#: usr/local/www/interfaces.php:590 usr/local/www/interfaces.php:592
+#: usr/local/www/interfaces.php:586 usr/local/www/interfaces.php:588
+#: usr/local/www/interfaces.php:589 usr/local/www/interfaces.php:591
+msgid "A valid subnet bit count must be specified."
+msgstr "Um contador de bit de subrede válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:571
+#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:583
+#: usr/local/www/interfaces.php:594 usr/local/www/interfaces.php:590
+#: usr/local/www/interfaces.php:593
+msgid "A valid alias IP address must be specified."
+msgstr "Um alias de endereço IP válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:503 usr/local/www/interfaces.php:573
+#: usr/local/www/interfaces.php:570 usr/local/www/interfaces.php:585
+#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:592
+#: usr/local/www/interfaces.php:595
+msgid "A valid alias subnet bit count must be specified."
+msgstr "Um alias de contador de bit de subrede válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:517 usr/local/www/system_routes_edit.php:103
+#: usr/local/www/system_routes_edit.php:104 usr/local/www/interfaces.php:587
+#: usr/local/www/interfaces.php:584 usr/local/www/interfaces.php:599
+#: usr/local/www/system_routes_edit.php:107 usr/local/www/interfaces.php:610
+#: usr/local/www/interfaces.php:606 usr/local/www/system_routes_edit.php:109
+#: usr/local/www/interfaces.php:611
+msgid "A valid gateway must be specified."
+msgstr "Um gateway válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:521 usr/local/www/interfaces.php:591
+#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:603
+#: usr/local/www/interfaces.php:614 usr/local/www/interfaces.php:610
+#: usr/local/www/interfaces.php:615
+msgid "The service name contains invalid characters."
+msgstr "O nome do serviço contém caracteres inválidos."
+
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:539
+#: usr/local/www/interfaces_ppps_edit.php:217 usr/local/www/interfaces.php:593
+#: usr/local/www/interfaces.php:609 usr/local/www/interfaces.php:590
+#: usr/local/www/interfaces.php:606 usr/local/www/interfaces_ppps_edit.php:223
+#: usr/local/www/interfaces.php:605 usr/local/www/interfaces.php:621
+#: usr/local/www/interfaces.php:616 usr/local/www/interfaces.php:632
+#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:628
+#: usr/local/www/interfaces.php:617 usr/local/www/interfaces.php:633
+msgid "The idle timeout value must be an integer."
+msgstr "O valor do tempo ocioso deve ser um inteiro."
+
+#: usr/local/www/interfaces.php:526 usr/local/www/interfaces_ppps_edit.php:220
+#: usr/local/www/interfaces.php:596 usr/local/www/interfaces.php:593
+#: usr/local/www/interfaces_ppps_edit.php:226 usr/local/www/interfaces.php:608
+#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces.php:620
+msgid "A valid PPPoE reset hour must be specified (0-23)."
+msgstr "Uma hora de reinicialização do PPPoE válida deve ser especificada (0-23)."
+
+#: usr/local/www/interfaces.php:529 usr/local/www/interfaces_ppps_edit.php:223
+#: usr/local/www/interfaces.php:599 usr/local/www/interfaces.php:596
+#: usr/local/www/interfaces_ppps_edit.php:229 usr/local/www/interfaces.php:611
+#: usr/local/www/interfaces.php:622 usr/local/www/interfaces.php:618
+#: usr/local/www/interfaces.php:623
+msgid "A valid PPPoE reset minute must be specified (0-59)."
+msgstr "Minutos de reinicialização do PPPoE válidos deve ser especificado (0-59)."
+
+#: usr/local/www/interfaces.php:531 usr/local/www/interfaces_ppps_edit.php:225
+#: usr/local/www/interfaces.php:601 usr/local/www/interfaces.php:598
+#: usr/local/www/interfaces_ppps_edit.php:231 usr/local/www/interfaces.php:613
+#: usr/local/www/interfaces.php:624 usr/local/www/interfaces.php:620
+#: usr/local/www/interfaces.php:625
+msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)."
+msgstr "Uma data de reinicialização do PPPoE válida deve ser especificada (mm/dd/yyyy)."
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:603
+#: usr/local/www/interfaces.php:600 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces.php:626 usr/local/www/interfaces.php:622
+#: usr/local/www/interfaces.php:627
+msgid "A valid PPTP local IP address must be specified."
+msgstr "Um endereço de IP local PPTP válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:535 usr/local/www/interfaces.php:605
+#: usr/local/www/interfaces.php:602 usr/local/www/interfaces.php:617
+#: usr/local/www/interfaces.php:628 usr/local/www/interfaces.php:624
+#: usr/local/www/interfaces.php:629
+msgid "A valid PPTP subnet bit count must be specified."
+msgstr "Um contador de bit de subrede PPTP deve ser especificado."
+
+#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:607
+#: usr/local/www/interfaces.php:604 usr/local/www/interfaces.php:619
+#: usr/local/www/interfaces.php:630 usr/local/www/interfaces.php:626
+#: usr/local/www/interfaces.php:631
+msgid "A valid PPTP remote IP address must be specified."
+msgstr "Um endereço IP remoto PPTP válido deve ser especificado."
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:613
+#: usr/local/www/interfaces.php:610 usr/local/www/interfaces.php:625
+#: usr/local/www/interfaces.php:637 usr/local/www/interfaces.php:633
+#: usr/local/www/interfaces.php:638
+msgid "The MTU must be greater than 576 bytes."
+msgstr "O MTU deve ser maior que 576 bytes."
+
+#: usr/local/www/interfaces.php:545 usr/local/www/interfaces.php:615
+#: usr/local/www/interfaces.php:612 usr/local/www/interfaces.php:627
+#: usr/local/www/interfaces.php:668 usr/local/www/interfaces.php:664
+#: usr/local/www/interfaces.php:669
+msgid "The MSS must be greater than 576 bytes."
+msgstr "O MSS deve ser maior que 576 bytes."
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2164
+#: usr/local/www/load_balancer_pool.php:132 usr/local/www/vpn_ipsec.php:283
+#: usr/local/www/vpn_ipsec.php:457 usr/local/www/interfaces_wireless.php:107
+#: usr/local/www/interfaces_wireless_edit.php:84
+#: usr/local/www/interfaces_wireless_edit.php:176
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:187
+#: usr/local/www/load_balancer_virtual_server_edit.php:72
+#: usr/local/www/status_lb_pool.php:131 usr/local/www/vpn_ipsec_phase2.php:404
+#: usr/local/www/vpn_ipsec.php:294 usr/local/www/vpn_ipsec.php:468
+#: usr/local/www/system_advanced_misc.php:334
+#: usr/local/www/vpn_ipsec_phase2.php:430 usr/local/www/interfaces.php:619
+#: usr/local/www/interfaces.php:2342
+#: usr/local/www/load_balancer_pool_edit.php:195
+#: usr/local/www/load_balancer_pool.php:133 usr/local/www/vpn_ipsec.php:293
+#: usr/local/www/vpn_ipsec.php:467 usr/local/www/system_advanced_misc.php:353
+#: usr/local/www/interfaces_wireless.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:496 usr/local/www/interfaces.php:616
+#: usr/local/www/interfaces.php:2330
+#: usr/local/www/load_balancer_pool_edit.php:193
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/interfaces_wireless_edit.php:86
+#: usr/local/www/interfaces_wireless_edit.php:178
+#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:473
+#: usr/local/www/interfaces_wireless.php:110
+#: usr/local/www/vpn_ipsec_phase2.php:518 usr/local/www/interfaces.php:631
+#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:672
+#: usr/local/www/interfaces.php:2406 usr/local/www/interfaces.php:668
+#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:673
+#: usr/local/www/interfaces.php:2431
+msgid "Mode"
+msgstr "Modo"
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:2174
+#: usr/local/www/status_interfaces.php:265
+#: usr/local/www/status_interfaces.php:362 usr/local/www/interfaces.php:622
+#: usr/local/www/interfaces.php:2352 usr/local/www/status_interfaces.php:365
+#: usr/local/www/interfaces.php:619 usr/local/www/interfaces.php:2340
+#: usr/local/www/interfaces.php:634 usr/local/www/interfaces.php:2370
+#: usr/local/www/interfaces.php:675 usr/local/www/interfaces.php:2416
+#: usr/local/www/interfaces.php:671 usr/local/www/interfaces.php:2405
+#: usr/local/www/interfaces.php:676 usr/local/www/interfaces.php:2441
+msgid "SSID"
+msgstr "SSID"
+
+#: usr/local/www/interfaces.php:583 usr/local/www/interfaces.php:657
+#: usr/local/www/interfaces.php:654 usr/local/www/interfaces.php:669
+#: usr/local/www/interfaces.php:710 usr/local/www/interfaces.php:706
+#: usr/local/www/interfaces.php:711
+msgid "Invalid WEP key. Enter a valid 40, 64, 104 or 128 bit WEP key."
+msgstr "Tamanho de chave WEP inválido. Tamanhos devem ser de 40 (64) chaves de bit ou 104 (128) bits."
+
+#: usr/local/www/interfaces.php:591 usr/local/www/interfaces.php:665
+#: usr/local/www/interfaces.php:662 usr/local/www/interfaces.php:677
+#: usr/local/www/interfaces.php:718 usr/local/www/interfaces.php:714
+#: usr/local/www/interfaces.php:719
+msgid "The WPA passphrase must be between 8 and 63 characters long."
+msgstr "O tamanho da frase secreta deve ser entre 8 e 63 caracteres."
+
+#: usr/local/www/interfaces.php:659
+#, php-format
+msgid "Interface %s dynamic gateway"
+msgstr "Interface %s gateway dinâmico"
+
+#: usr/local/www/interfaces.php:1004 usr/local/www/interfaces.php:1090
+#: usr/local/www/interfaces.php:1078 usr/local/www/interfaces.php:1092
+#: usr/local/www/interfaces.php:1134 usr/local/www/interfaces.php:1129
+#: usr/local/www/interfaces.php:1142
+#, php-format
+msgid "Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode."
+msgstr "Incapaz de mudar o modo para %s. Você já deve ter o número máximo de clones sem fio suportados para esse modo."
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/interfaces.php:1118
+#: usr/local/www/interfaces.php:1106 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/interfaces.php:1170
+msgid "Static IPv4"
+msgstr "IPv4 Estático"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/vpn_pppoe.php:86
+#: usr/local/www/status_interfaces.php:109
+#: usr/local/www/status_interfaces.php:127 usr/local/www/interfaces.php:1118
+#: usr/local/www/status_interfaces.php:130 usr/local/www/interfaces.php:1106
+#: usr/local/www/vpn_pppoe.php:87 usr/local/www/interfaces.php:1120
+#: usr/local/www/interfaces.php:1162 usr/local/www/interfaces.php:1157
+#: usr/local/www/interfaces.php:1170
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:124
+#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:166
+#: usr/local/www/status_interfaces.php:142 usr/local/www/interfaces.php:1118
+#: usr/local/www/fbegin.inc:174 usr/local/www/status_interfaces.php:145
+#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:165
+#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1170
+msgid "PPTP"
+msgstr "PPTP"
+
+#: usr/local/www/interfaces.php:1032 usr/local/www/status_interfaces.php:139
+#: usr/local/www/fbegin.inc:150 usr/local/www/vpn_l2tp.php:38
+#: usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users_edit.php:38 usr/local/www/fbegin.inc:167
+#: usr/local/www/status_interfaces.php:157 usr/local/www/interfaces.php:1118
+#: usr/local/www/fbegin.inc:175 usr/local/www/status_interfaces.php:160
+#: usr/local/www/interfaces.php:1106 usr/local/www/fbegin.inc:166
+#: usr/local/www/interfaces.php:1120 usr/local/www/interfaces.php:1162
+#: usr/local/www/interfaces.php:1157 usr/local/www/interfaces.php:1170
+msgid "L2TP"
+msgstr "L2TP"
+
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121
+#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1171
+msgid "Static IPv6"
+msgstr "IPv6 Estático"
+
+#: usr/local/www/interfaces.php:1033 usr/local/www/interfaces.php:1119
+#: usr/local/www/interfaces.php:1107 usr/local/www/interfaces.php:1121
+#: usr/local/www/interfaces.php:1163 usr/local/www/interfaces.php:1158
+#: usr/local/www/interfaces.php:1171
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326
+#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327
+#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364
+#: usr/local/www/interfaces.php:1377
+#, php-format
+msgid "The %s configuration has been changed."
+msgstr "A configuração %s foi modificada."
+
+#: usr/local/www/interfaces.php:1222 usr/local/www/interfaces.php:1326
+#: usr/local/www/interfaces.php:1314 usr/local/www/interfaces.php:1327
+#: usr/local/www/interfaces.php:1369 usr/local/www/interfaces.php:1364
+#: usr/local/www/interfaces.php:1377
+msgid "Don't forget to adjust the DHCP Server range if needed after applying."
+msgstr "Não esqueça de ajustar o intervalo do Servidor DHCP se necessário após aplicação."
+
+#: usr/local/www/interfaces.php:1231 usr/local/www/interfaces.php:1335
+#: usr/local/www/interfaces.php:1323 usr/local/www/interfaces.php:1336
+#: usr/local/www/interfaces.php:1378 usr/local/www/interfaces.php:1373
+#: usr/local/www/interfaces.php:1386
+msgid "General configuration"
+msgstr "Configuração Geral"
+
+#: usr/local/www/interfaces.php:1237 usr/local/www/interfaces.php:1341
+#: usr/local/www/interfaces.php:1329 usr/local/www/interfaces.php:1342
+#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1379
+#: usr/local/www/interfaces.php:1392
+msgid "Enable Interface"
+msgstr "Habilitar Interface"
+
+#: usr/local/www/interfaces.php:1247 usr/local/www/interfaces.php:1351
+#: usr/local/www/interfaces.php:1339 usr/local/www/interfaces.php:1352
+#: usr/local/www/interfaces.php:1394 usr/local/www/interfaces.php:1389
+#: usr/local/www/interfaces.php:1402
+msgid "Enter a description (name) for the interface here."
+msgstr "Informe a descrição (nome) para a interface aqui."
+
+#: usr/local/www/interfaces.php:1251 usr/local/www/interfaces.php:1355
+#: usr/local/www/interfaces.php:1343 usr/local/www/interfaces.php:1356
+#: usr/local/www/interfaces.php:1398 usr/local/www/interfaces.php:1393
+#: usr/local/www/interfaces.php:1406
+msgid "IPv4 Configuration Type"
+msgstr "Tipo de Configuração IPv4"
+
+#: usr/local/www/interfaces.php:1267 usr/local/www/interfaces.php:1371
+#: usr/local/www/interfaces.php:1359 usr/local/www/interfaces.php:1372
+#: usr/local/www/interfaces.php:1414 usr/local/www/interfaces.php:1409
+#: usr/local/www/interfaces.php:1422
+msgid "IPv6 Configuration Type"
+msgstr "Tipo de Configuração IPv6"
+
+#: usr/local/www/interfaces.php:1292 usr/local/www/interfaces.php:1396
+#: usr/local/www/interfaces.php:1384 usr/local/www/interfaces.php:1397
+#: usr/local/www/interfaces.php:1439 usr/local/www/interfaces.php:1434
+#: usr/local/www/interfaces.php:1447
+msgid "Insert my local MAC address"
+msgstr "Insira meu endereço MAC local"
+
+#: usr/local/www/interfaces.php:1295 usr/local/www/interfaces.php:1399
+#: usr/local/www/interfaces.php:1387 usr/local/www/interfaces.php:1400
+#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1437
+#: usr/local/www/interfaces.php:1450
+msgid "This field can be used to modify (\"spoof\") the MAC address of this interface"
+msgstr "Esse campo pode ser usado para modificar (\"spoof\") o endereço MAC da interface WAN"
+
+#: usr/local/www/interfaces.php:1297 usr/local/www/interfaces.php:1401
+#: usr/local/www/interfaces.php:1389 usr/local/www/interfaces.php:1402
+#: usr/local/www/interfaces.php:1444 usr/local/www/interfaces.php:1439
+#: usr/local/www/interfaces.php:1452
+msgid "(may be required with some cable connections)"
+msgstr "(pode ser requerido em algumas conexões a cabo)"
+
+#: usr/local/www/interfaces.php:1298 usr/local/www/interfaces.php:1402
+#: usr/local/www/interfaces.php:1390 usr/local/www/interfaces.php:1403
+#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1440
+#: usr/local/www/interfaces.php:1453
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank"
+msgstr "Informe o endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx ou deixe em branco"
+
+#: usr/local/www/interfaces.php:1303
+#: usr/local/www/interfaces_ppps_edit.php:757
+#: usr/local/www/interfaces.php:1407
+#: usr/local/www/interfaces_ppps_edit.php:758
+#: usr/local/www/interfaces.php:1395
+#: usr/local/www/interfaces_ppps_edit.php:764
+#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1450
+#: usr/local/www/interfaces_ppps_edit.php:761
+#: usr/local/www/interfaces.php:1445 usr/local/www/interfaces.php:1458
+msgid "MTU"
+msgstr "MTU"
+
+#: usr/local/www/interfaces.php:1307
+msgid "If you leave this field blank, the adapter's default MTU will be used. This is typically 1500 bytes but can vary on some hardware."
+msgstr "Se você deixar essa campo em branco, o MTU padrão do adaptador será usado. Isso tem normalmente 1500 bytes, mas pode variar em alguns hardwares."
+
+#: usr/local/www/interfaces.php:1312 usr/local/www/interfaces.php:1416
+#: usr/local/www/interfaces.php:1404 usr/local/www/interfaces.php:1417
+#: usr/local/www/interfaces.php:1461 usr/local/www/interfaces.php:1456
+#: usr/local/www/interfaces.php:1469
+msgid "MSS"
+msgstr "MSS"
+
+#: usr/local/www/interfaces.php:1316 usr/local/www/interfaces.php:1420
+#: usr/local/www/interfaces.php:1408 usr/local/www/interfaces.php:1421
+#: usr/local/www/interfaces.php:1465 usr/local/www/interfaces.php:1460
+#: usr/local/www/interfaces.php:1473
+msgid "If you enter a value in this field, then MSS clamping for TCP connections to the value entered above minus 40 (TCP/IP header size) will be in effect."
+msgstr "Se você informar um valor nesse campo, então o MSS clamping para as conexões TCP para o valor informado acima menos 40 (tamanho do cabeçalho TCP/IP) terá efeito."
+
+#: usr/local/www/interfaces.php:1325 usr/local/www/interfaces.php:1429
+#: usr/local/www/interfaces.php:1417 usr/local/www/interfaces.php:1430
+#: usr/local/www/interfaces.php:1474 usr/local/www/interfaces.php:1469
+#: usr/local/www/interfaces.php:1482
+msgid "Speed and duplex"
+msgstr "Protocolo Speed e Duplex"
+
+#: usr/local/www/interfaces.php:1346 usr/local/www/interfaces.php:1450
+#: usr/local/www/interfaces.php:1438 usr/local/www/interfaces.php:1451
+#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1490
+#: usr/local/www/interfaces.php:1503
+msgid "Here you can explicitly set speed and duplex mode for this interface. WARNING: You MUST leave this set to autoselect (automatically negotiate speed) unless the port this interface connects to has its speed and duplex forced."
+msgstr "Aqui voce pode definir explicitamente o modo que a placa irá trabalhar, Speed ou Duplex. Aviso: Caso deixe a opção autoselect(a negociação será feita automaticamente) ao menos que a porta onde se conecta a interfece tenha o Speed e Duplex forçado."
+
+#: usr/local/www/interfaces.php:1361 usr/local/www/interfaces.php:1465
+#: usr/local/www/interfaces.php:1453 usr/local/www/interfaces.php:1466
+#: usr/local/www/interfaces.php:1511 usr/local/www/interfaces.php:1505
+#: usr/local/www/interfaces.php:1518
+msgid "Static IPv4 configuration"
+msgstr "Configuração IPv4 estático"
+
+#: usr/local/www/interfaces.php:1400 usr/local/www/interfaces.php:1506
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_routes_edit.php:244 usr/local/www/interfaces.php:1504
+#: usr/local/www/interfaces.php:1612 usr/local/www/system_routes_edit.php:245
+#: usr/local/www/interfaces.php:1492 usr/local/www/interfaces.php:1600
+#: usr/local/www/interfaces.php:1505 usr/local/www/interfaces.php:1610
+#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1550
+#: usr/local/www/interfaces.php:1656 usr/local/www/system_routes_edit.php:274
+#: usr/local/www/interfaces.php:1544 usr/local/www/interfaces.php:1649
+#: usr/local/www/system_routes_edit.php:276 usr/local/www/interfaces.php:1557
+#: usr/local/www/interfaces.php:1662
+msgid "add a new one."
+msgstr "adicionar uma nova."
+
+#: usr/local/www/interfaces.php:1403 usr/local/www/interfaces.php:1507
+#: usr/local/www/interfaces.php:1495 usr/local/www/interfaces.php:1508
+#: usr/local/www/interfaces.php:1553 usr/local/www/interfaces.php:1547
+#: usr/local/www/interfaces.php:1560
+msgid "If this interface is an Internet connection, select an existing Gateway from the list or add one using the link above"
+msgstr "Se essa interface é uma conexão com Internet, selecione um Gateway existente da lista ou adicione um link abaixo"
+
+#: usr/local/www/interfaces.php:1417 usr/local/www/system_routes_edit.php:224
+#: usr/local/www/system_routes_edit.php:256 usr/local/www/interfaces.php:1521
+#: usr/local/www/system_routes_edit.php:257 usr/local/www/interfaces.php:1509
+#: usr/local/www/interfaces.php:1522 usr/local/www/system_routes_edit.php:283
+#: usr/local/www/interfaces.php:1567 usr/local/www/system_routes_edit.php:287
+#: usr/local/www/interfaces.php:1561 usr/local/www/system_routes_edit.php:289
+#: usr/local/www/interfaces.php:1574
+msgid "Add new gateway:"
+msgstr "Adicionar novo gateway:"
+
+#: usr/local/www/interfaces.php:1425 usr/local/www/interfaces.php:1529
+#: usr/local/www/interfaces.php:1517 usr/local/www/interfaces.php:1530
+#: usr/local/www/interfaces.php:1575 usr/local/www/interfaces.php:1569
+#: usr/local/www/interfaces.php:1582
+msgid "Default gateway:"
+msgstr "Gateway padrão:"
+
+#: usr/local/www/interfaces.php:1428 usr/local/www/system_routes_edit.php:240
+#: usr/local/www/system_routes_edit.php:272 usr/local/www/interfaces.php:1532
+#: usr/local/www/system_routes_edit.php:273 usr/local/www/interfaces.php:1520
+#: usr/local/www/interfaces.php:1533 usr/local/www/system_routes_edit.php:299
+#: usr/local/www/interfaces.php:1578 usr/local/www/system_routes_edit.php:305
+#: usr/local/www/interfaces.php:1572 usr/local/www/system_routes_edit.php:307
+#: usr/local/www/interfaces.php:1585
+msgid "Gateway Name:"
+msgstr "Nome do Gateway:"
+
+#: usr/local/www/interfaces.php:1431 usr/local/www/interfaces.php:1535
+#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1536
+#: usr/local/www/interfaces.php:1581 usr/local/www/interfaces.php:1575
+#: usr/local/www/interfaces.php:1588
+msgid "Gateway IPv4:"
+msgstr "IPv4 do Gateway:"
+
+#: usr/local/www/interfaces.php:1434 usr/local/www/interfaces.php:1540
+#: usr/local/www/system_routes_edit.php:246
+#: usr/local/www/system_routes_edit.php:278 usr/local/www/interfaces.php:1538
+#: usr/local/www/interfaces.php:1646 usr/local/www/system_routes_edit.php:279
+#: usr/local/www/interfaces.php:1526 usr/local/www/interfaces.php:1634
+#: usr/local/www/interfaces.php:1539 usr/local/www/interfaces.php:1644
+#: usr/local/www/system_routes_edit.php:305 usr/local/www/interfaces.php:1584
+#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:311
+#: usr/local/www/interfaces.php:1578 usr/local/www/interfaces.php:1683
+#: usr/local/www/system_routes_edit.php:313 usr/local/www/interfaces.php:1591
+#: usr/local/www/interfaces.php:1696
+msgid "Description:"
+msgstr "Descrição:"
+
+#: usr/local/www/interfaces.php:1442 usr/local/www/interfaces.php:1548
+#: usr/local/www/system_routes_edit.php:254
+#: usr/local/www/system_routes_edit.php:286 usr/local/www/interfaces.php:1654
+#: usr/local/www/system_routes_edit.php:287 usr/local/www/interfaces.php:1536
+#: usr/local/www/interfaces.php:1642 usr/local/www/interfaces.php:1546
+#: usr/local/www/interfaces.php:1651 usr/local/www/system_routes_edit.php:312
+#: usr/local/www/interfaces.php:1591 usr/local/www/interfaces.php:1697
+#: usr/local/www/system_routes_edit.php:318 usr/local/www/interfaces.php:1585
+#: usr/local/www/interfaces.php:1690 usr/local/www/system_routes_edit.php:320
+#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1703
+msgid "Save Gateway"
+msgstr "Salvar Gateway"
+
+#: usr/local/www/interfaces.php:1467 usr/local/www/interfaces.php:1573
+#: usr/local/www/interfaces.php:1561 usr/local/www/interfaces.php:1571
+#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1610
+#: usr/local/www/interfaces.php:1623
+msgid "Static IPv6 configuration"
+msgstr "Configuração IPv6 estático"
+
+#: usr/local/www/interfaces.php:1488 usr/local/www/status_interfaces.php:231
+#: usr/local/www/status_interfaces.php:312 usr/local/www/interfaces.php:1594
+#: usr/local/www/status_interfaces.php:315 usr/local/www/interfaces.php:1582
+#: usr/local/www/interfaces.php:1592 usr/local/www/interfaces.php:1638
+#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1644
+msgid "Gateway IPv6"
+msgstr "IPv6 do Gateway"
+
+#: usr/local/www/interfaces.php:1509 usr/local/www/interfaces.php:1615
+#: usr/local/www/interfaces.php:1603 usr/local/www/interfaces.php:1613
+#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1652
+#: usr/local/www/interfaces.php:1665
+msgid "If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above"
+msgstr "Se essa interface é uma conexão com Internet, selecione um Gateway existente da lista ou adicione um novo na linha abaixo"
+
+#: usr/local/www/interfaces.php:1523 usr/local/www/interfaces.php:1629
+#: usr/local/www/interfaces.php:1617 usr/local/www/interfaces.php:1627
+#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1666
+#: usr/local/www/interfaces.php:1679
+msgid "Add new v6 gateway:"
+msgstr "Adicionar novo v6 gateway:"
+
+#: usr/local/www/interfaces.php:1531 usr/local/www/interfaces.php:1637
+#: usr/local/www/interfaces.php:1625 usr/local/www/interfaces.php:1635
+#: usr/local/www/interfaces.php:1681 usr/local/www/interfaces.php:1674
+#: usr/local/www/interfaces.php:1687
+msgid "Default v6 gateway:"
+msgstr "Gateway v6 padrão:"
+
+#: usr/local/www/interfaces.php:1534 usr/local/www/interfaces.php:1640
+#: usr/local/www/interfaces.php:1628 usr/local/www/interfaces.php:1638
+#: usr/local/www/interfaces.php:1684 usr/local/www/interfaces.php:1677
+#: usr/local/www/interfaces.php:1690
+msgid "Gateway Name IPv6:"
+msgstr "Nome do Gateway IPv6:"
+
+#: usr/local/www/interfaces.php:1537 usr/local/www/interfaces.php:1643
+#: usr/local/www/interfaces.php:1631 usr/local/www/interfaces.php:1641
+#: usr/local/www/interfaces.php:1687 usr/local/www/interfaces.php:1680
+#: usr/local/www/interfaces.php:1693
+msgid "Gateway IPv6:"
+msgstr "IPv6 do Gateway:"
+
+#: usr/local/www/interfaces.php:1564
+msgid "DHCPv6 Prefix Delegation ID"
+msgstr "ID da Delegação de Prefixo DHCPv6"
+
+#: usr/local/www/interfaces.php:1588
+msgid "This ID sets the delegated DHCP-PD prefix number which will be used to setup the interface."
+msgstr "Este ID define o numero da delegação DHCP-PD que será usada para configurar a interface."
+
+#: usr/local/www/interfaces.php:1598 usr/local/www/interfaces.php:1676
+#: usr/local/www/interfaces.php:1664 usr/local/www/interfaces.php:1722
+#: usr/local/www/interfaces.php:1714 usr/local/www/interfaces.php:1727
+msgid "DHCP client configuration"
+msgstr "Configuração do cliente DHCP"
+
+#: usr/local/www/interfaces.php:1602 usr/local/www/interfaces.php:1680
+#: usr/local/www/interfaces.php:1668 usr/local/www/interfaces.php:1726
+#: usr/local/www/interfaces.php:1718 usr/local/www/interfaces.php:1731
+msgid "Enable DHCP+"
+msgstr "Habilitar DHCP+"
+
+#: usr/local/www/interfaces.php:1605 usr/local/www/interfaces.php:1683
+#: usr/local/www/interfaces.php:1671 usr/local/www/interfaces.php:1729
+#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1734
+msgid "Enable DHCP+L2TP or DHCP+PPTP."
+msgstr "Habilitar DHCP+L2TP ou DHCP+PPTP."
+
+#: usr/local/www/interfaces.php:1607 usr/local/www/interfaces.php:1685
+#: usr/local/www/interfaces.php:1673 usr/local/www/interfaces.php:1731
+#: usr/local/www/interfaces.php:1723 usr/local/www/interfaces.php:1736
+msgid "Status changes on this interface will trigger reconfiguration (if necessary) of the associated PPTP/L2TP link."
+msgstr "Mudanças de status nesta interface irão disparar a reconfiguração (se necessário) do link PPTP/L2TP associado."
+
+#: usr/local/www/interfaces.php:1616 usr/local/www/interfaces.php:1694
+#: usr/local/www/interfaces.php:1682 usr/local/www/interfaces.php:1740
+#: usr/local/www/interfaces.php:1732 usr/local/www/interfaces.php:1745
+msgid "The value in this field is sent as the DHCP client identifier and hostname when requesting a DHCP lease. Some ISPs may require this (for client identification)."
+msgstr "O valor desse campo é enviado como o identificador e nome de host do cliente DHCP quando requisitar uma concessão DHCP. Alguns ISPs podem requerer isso (para identificação do cliente)."
+
+#: usr/local/www/interfaces.php:1622 usr/local/www/interfaces.php:1700
+#: usr/local/www/interfaces.php:1688 usr/local/www/interfaces.php:1746
+#: usr/local/www/interfaces.php:1738 usr/local/www/interfaces.php:1751
+msgid "Alias IPv4 address"
+msgstr "Alias de Endereço IPv4"
+
+#: usr/local/www/interfaces.php:1636 usr/local/www/interfaces.php:1714
+#: usr/local/www/interfaces.php:1702 usr/local/www/interfaces.php:1760
+#: usr/local/www/interfaces.php:1752 usr/local/www/interfaces.php:1765
+msgid "The value in this field is used as a fixed alias IPv4 address by the DHCP client."
+msgstr "O valor desse campo é usado como um alias de endereço IPv4 fixo pelo cliente DHCP."
+
+#: usr/local/www/interfaces.php:1647 usr/local/www/interfaces.php:1725
+#: usr/local/www/interfaces.php:1713 usr/local/www/interfaces.php:1728
+#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1766
+#: usr/local/www/interfaces.php:1788
+msgid "DHCP6 client configuration"
+msgstr "Configuração do cliente DHCPv6"
+
+#: usr/local/www/interfaces.php:1650 usr/local/www/interfaces.php:1729
+#: usr/local/www/interfaces.php:1717 usr/local/www/interfaces.php:1732
+#: usr/local/www/interfaces.php:1778 usr/local/www/interfaces.php:1770
+#: usr/local/www/interfaces.php:1792
+msgid "DHCPv6 Unique Identifier (DUID)"
+msgstr "Identificador Unico do DHCPv6 (DUID)"
+
+#: usr/local/www/interfaces.php:1654 usr/local/www/interfaces.php:1733
+#: usr/local/www/interfaces.php:1721 usr/local/www/interfaces.php:1736
+#: usr/local/www/interfaces.php:1782 usr/local/www/interfaces.php:1774
+#: usr/local/www/interfaces.php:1796
+msgid "The value in this field is sent as the DHCPv6 client identifier when requesting a DHCPv6 lease."
+msgstr "O valor neste campo é enviado como o identificador de cliente DHCPv6 ao solicitar um DHCPv6 lease."
+
+#: usr/local/www/interfaces.php:1659 usr/local/www/interfaces.php:1738
+#: usr/local/www/interfaces.php:1726 usr/local/www/interfaces.php:1741
+#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1779
+#: usr/local/www/interfaces.php:1801
+#, php-format
+msgid "The current DUID is: '%s'"
+msgstr "O DUID atual é: '%s'"
+
+#: usr/local/www/interfaces.php:1665 usr/local/www/interfaces.php:1745
+#: usr/local/www/interfaces.php:1733 usr/local/www/interfaces.php:1748
+#: usr/local/www/interfaces.php:1794 usr/local/www/interfaces.php:1786
+#: usr/local/www/interfaces.php:1822
+msgid "DHCPv6 Prefix Delegation size"
+msgstr "Tamanho do Prefixo DHCPv6 delegado"
+
+#: usr/local/www/interfaces.php:1678 usr/local/www/interfaces.php:1758
+#: usr/local/www/interfaces.php:1746 usr/local/www/interfaces.php:1761
+#: usr/local/www/interfaces.php:1807 usr/local/www/interfaces.php:1799
+#: usr/local/www/interfaces.php:1835
+msgid "The value in this field is the delegated prefix length provided by the DHCPv6 server. Normally specified by the ISP."
+msgstr "O valor neste campo é o comprimento do prefixo delegada fornecidos pelo servidor DHCPv6. Normalmente especificado pelo ISP."
+
+#: usr/local/www/interfaces.php:1689 usr/local/www/interfaces.php:1867
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1879
+#: usr/local/www/interfaces.php:1925 usr/local/www/interfaces.php:1913
+#: usr/local/www/interfaces.php:1949
+msgid "PPP configuration"
+msgstr "Configuração PPP"
+
+#: usr/local/www/interfaces.php:1692
+#: usr/local/www/interfaces_ppps_edit.php:478
+#: usr/local/www/interfaces.php:1870
+#: usr/local/www/interfaces_ppps_edit.php:479
+#: usr/local/www/interfaces.php:1858
+#: usr/local/www/interfaces_ppps_edit.php:485
+#: usr/local/www/interfaces.php:1882 usr/local/www/interfaces.php:1928
+#: usr/local/www/interfaces_ppps_edit.php:483
+#: usr/local/www/interfaces.php:1916 usr/local/www/interfaces.php:1952
+msgid "Service Provider"
+msgstr "Fornecedor de Serviço"
+
+#: usr/local/www/interfaces.php:1696
+#: usr/local/www/interfaces_ppps_edit.php:482
+#: usr/local/www/interfaces.php:1874
+#: usr/local/www/interfaces_ppps_edit.php:483
+#: usr/local/www/interfaces.php:1862
+#: usr/local/www/interfaces_ppps_edit.php:489
+#: usr/local/www/interfaces.php:1886 usr/local/www/interfaces.php:1932
+#: usr/local/www/interfaces_ppps_edit.php:487
+#: usr/local/www/interfaces.php:1920 usr/local/www/interfaces.php:1956
+msgid "Country:"
+msgstr "País:"
+
+#: usr/local/www/interfaces.php:1704
+#: usr/local/www/interfaces_ppps_edit.php:490
+#: usr/local/www/interfaces.php:1882
+#: usr/local/www/interfaces_ppps_edit.php:491
+#: usr/local/www/interfaces.php:1870
+#: usr/local/www/interfaces_ppps_edit.php:497
+#: usr/local/www/interfaces.php:1894 usr/local/www/interfaces.php:1940
+#: usr/local/www/interfaces_ppps_edit.php:495
+#: usr/local/www/interfaces.php:1928 usr/local/www/interfaces.php:1964
+msgid "Provider:"
+msgstr "Fornecedor:"
+
+#: usr/local/www/interfaces.php:1712
+#: usr/local/www/interfaces_ppps_edit.php:498
+#: usr/local/www/interfaces.php:1890
+#: usr/local/www/interfaces_ppps_edit.php:499
+#: usr/local/www/interfaces.php:1878
+#: usr/local/www/interfaces_ppps_edit.php:505
+#: usr/local/www/interfaces.php:1902 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces_ppps_edit.php:503
+#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1972
+msgid "Plan:"
+msgstr "Plano:"
+
+#: usr/local/www/interfaces.php:1720
+#: usr/local/www/interfaces_ppps_edit.php:506
+#: usr/local/www/interfaces.php:1898
+#: usr/local/www/interfaces_ppps_edit.php:507
+#: usr/local/www/interfaces.php:1886
+#: usr/local/www/interfaces_ppps_edit.php:513
+#: usr/local/www/interfaces.php:1910 usr/local/www/interfaces.php:1956
+#: usr/local/www/interfaces_ppps_edit.php:511
+#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:1980
+msgid "Select to fill in data for your service provider."
+msgstr "Selecione para preencher dados para seu fornecedor de serviços."
+
+#: usr/local/www/interfaces.php:1742
+#: usr/local/www/interfaces_ppps_edit.php:530
+#: usr/local/www/interfaces.php:1920
+#: usr/local/www/interfaces_ppps_edit.php:531
+#: usr/local/www/interfaces.php:1908
+#: usr/local/www/interfaces_ppps_edit.php:537
+#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1978
+#: usr/local/www/interfaces_ppps_edit.php:535
+#: usr/local/www/interfaces.php:1966 usr/local/www/interfaces.php:2002
+msgid "Access Point Name (APN)"
+msgstr "Nome do Ponto de Acesso (APN)"
+
+#: usr/local/www/interfaces.php:1766 usr/local/www/interfaces.php:1944
+#: usr/local/www/interfaces.php:1932 usr/local/www/interfaces.php:1956
+#: usr/local/www/interfaces.php:2002 usr/local/www/interfaces.php:1991
+#: usr/local/www/interfaces.php:2027
+msgid "Advanced PPP"
+msgstr "PPP Avançado"
+
+#: usr/local/www/interfaces.php:1769 usr/local/www/interfaces.php:1774
+#: usr/local/www/interfaces.php:1875 usr/local/www/interfaces.php:1880
+#: usr/local/www/interfaces.php:1943 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces.php:1947 usr/local/www/interfaces.php:1952
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2058
+#: usr/local/www/interfaces.php:2121 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:1935 usr/local/www/interfaces.php:1940
+#: usr/local/www/interfaces.php:2041 usr/local/www/interfaces.php:2046
+#: usr/local/www/interfaces.php:2109 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:1959 usr/local/www/interfaces.php:1964
+#: usr/local/www/interfaces.php:2068 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces.php:2139 usr/local/www/interfaces.php:2144
+#: usr/local/www/interfaces.php:2005 usr/local/www/interfaces.php:2010
+#: usr/local/www/interfaces.php:2119 usr/local/www/interfaces.php:2185
+#: usr/local/www/interfaces.php:2190 usr/local/www/interfaces.php:1994
+#: usr/local/www/interfaces.php:1999 usr/local/www/interfaces.php:2103
+#: usr/local/www/interfaces.php:2108 usr/local/www/interfaces.php:2174
+#: usr/local/www/interfaces.php:2179 usr/local/www/interfaces.php:2030
+#: usr/local/www/interfaces.php:2035 usr/local/www/interfaces.php:2210
+#: usr/local/www/interfaces.php:2215
+msgid "Click here"
+msgstr "Clique aqui"
+
+#: usr/local/www/interfaces.php:1770 usr/local/www/interfaces.php:1948
+#: usr/local/www/interfaces.php:1936 usr/local/www/interfaces.php:1960
+#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces.php:2031
+msgid "to edit PPP configuration."
+msgstr "para editar configurações PPP."
+
+#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1953
+#: usr/local/www/interfaces.php:1941 usr/local/www/interfaces.php:1965
+#: usr/local/www/interfaces.php:2011 usr/local/www/interfaces.php:2000
+#: usr/local/www/interfaces.php:2036
+msgid "to create a PPP configuration."
+msgstr "para criar uma configuração PPP."
+
+#: usr/local/www/interfaces.php:1786 usr/local/www/interfaces.php:1964
+#: usr/local/www/interfaces.php:1952 usr/local/www/interfaces.php:1979
+#: usr/local/www/interfaces.php:2025 usr/local/www/interfaces.php:2014
+#: usr/local/www/interfaces.php:2050
+msgid "PPPoE configuration"
+msgstr "Configuração PPPoE"
+
+#: usr/local/www/interfaces.php:1801
+#: usr/local/www/interfaces_ppps_edit.php:589
+#: usr/local/www/interfaces.php:1979
+#: usr/local/www/interfaces_ppps_edit.php:590
+#: usr/local/www/interfaces.php:1967
+#: usr/local/www/interfaces_ppps_edit.php:596
+#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2040
+#: usr/local/www/interfaces_ppps_edit.php:594
+#: usr/local/www/interfaces.php:2029 usr/local/www/interfaces.php:2065
+msgid "Service name"
+msgstr "Nome do serviço"
+
+#: usr/local/www/interfaces.php:1803 usr/local/www/interfaces.php:1981
+#: usr/local/www/interfaces.php:1969 usr/local/www/interfaces.php:1996
+#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2031
+#: usr/local/www/interfaces.php:2067
+msgid "Hint: this field can usually be left empty"
+msgstr "Dica: esse campo é normalmente deixado vazio"
+
+#: usr/local/www/interfaces.php:1810 usr/local/www/interfaces.php:1929
+#: usr/local/www/interfaces.php:1988 usr/local/www/interfaces.php:2107
+#: usr/local/www/interfaces.php:1976 usr/local/www/interfaces.php:2095
+#: usr/local/www/interfaces.php:2003 usr/local/www/interfaces.php:2125
+#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2171
+#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2160
+#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2196
+msgid "Enable Dial-On-Demand mode"
+msgstr "Habilitar modo de Discagem Sob Demanda"
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1989
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2004
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2039
+#: usr/local/www/interfaces.php:2075
+msgid "This option causes the interface to operate in dial-on-demand mode, allowing you to have a "
+msgstr "Essa opção faz com que a interface opere em modo de Discagem Sob Demanda, permitindo que você tenha uma "
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930
+#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2197
+msgid "virtual full time"
+msgstr "tempo virtual completo"
+
+#: usr/local/www/interfaces.php:1811 usr/local/www/interfaces.php:1930
+#: usr/local/www/interfaces.php:1989 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:1977 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces.php:2004 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2197
+msgid "connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."
+msgstr "conexão. A interface é configurada, mas a conexão atual do link é atrasada até que tráfego de saída qualificado seja detectado."
+
+#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1934
+#: usr/local/www/services_captiveportal.php:465
+#: usr/local/www/services_captiveportal.php:470
+#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2112
+#: usr/local/www/services_captiveportal.php:468
+#: usr/local/www/interfaces.php:1981 usr/local/www/interfaces.php:2100
+#: usr/local/www/interfaces.php:2008 usr/local/www/interfaces.php:2130
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/interfaces.php:2054 usr/local/www/interfaces.php:2176
+#: usr/local/www/interfaces.php:2043 usr/local/www/interfaces.php:2165
+#: usr/local/www/interfaces.php:2079 usr/local/www/interfaces.php:2201
+msgid "Idle timeout"
+msgstr "Tempo ocioso"
+
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1936
+#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:1983 usr/local/www/interfaces.php:2102
+#: usr/local/www/interfaces.php:2010 usr/local/www/interfaces.php:2132
+#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2178
+#: usr/local/www/interfaces.php:2045 usr/local/www/interfaces.php:2167
+#: usr/local/www/interfaces.php:2081 usr/local/www/interfaces.php:2203
+msgid "If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature."
+msgstr "Se nenhum pacote de saída qualificado for transmitido no número de segundos especificado, a conexão é cancelada. Um valor de tempo de ocioso igual a zero desabilita essa funcionalidade."
+
+#: usr/local/www/interfaces.php:1821
+#: usr/local/www/interfaces_ppps_edit.php:596
+#: usr/local/www/interfaces.php:1999
+#: usr/local/www/interfaces_ppps_edit.php:597
+#: usr/local/www/interfaces.php:1987
+#: usr/local/www/interfaces_ppps_edit.php:603
+#: usr/local/www/interfaces.php:2014 usr/local/www/interfaces.php:2060
+#: usr/local/www/interfaces_ppps_edit.php:601
+#: usr/local/www/interfaces.php:2049 usr/local/www/interfaces.php:2085
+msgid "Periodic reset"
+msgstr "Reinicialização periódica"
+
+#: usr/local/www/interfaces.php:1829
+#: usr/local/www/interfaces_ppps_edit.php:604
+#: usr/local/www/status_rrd_graph.php:359
+#: usr/local/www/status_rrd_graph_settings.php:158
+#: usr/local/www/status_rrd_graph_settings.php:159
+#: usr/local/www/status_rrd_graph.php:407 usr/local/www/interfaces.php:2007
+#: usr/local/www/interfaces_ppps_edit.php:605
+#: usr/local/www/interfaces.php:1995
+#: usr/local/www/interfaces_ppps_edit.php:611
+#: usr/local/www/status_rrd_graph.php:432 usr/local/www/interfaces.php:2022
+#: usr/local/www/interfaces.php:2068
+#: usr/local/www/interfaces_ppps_edit.php:609
+#: usr/local/www/interfaces.php:2057 usr/local/www/interfaces.php:2093
+msgid "Custom"
+msgstr "Personalizar"
+
+#: usr/local/www/interfaces.php:1830
+#: usr/local/www/interfaces_ppps_edit.php:605
+#: usr/local/www/interfaces.php:2008
+#: usr/local/www/interfaces_ppps_edit.php:606
+#: usr/local/www/interfaces.php:1996
+#: usr/local/www/interfaces_ppps_edit.php:612
+#: usr/local/www/interfaces.php:2023 usr/local/www/interfaces.php:2069
+#: usr/local/www/interfaces_ppps_edit.php:610
+#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2094
+msgid "Pre-Set"
+msgstr "Pre-Config"
+
+#: usr/local/www/interfaces.php:1831
+#: usr/local/www/interfaces_ppps_edit.php:606
+#: usr/local/www/interfaces.php:2009
+#: usr/local/www/interfaces_ppps_edit.php:607
+#: usr/local/www/interfaces.php:1997
+#: usr/local/www/interfaces_ppps_edit.php:613
+#: usr/local/www/interfaces.php:2024 usr/local/www/interfaces.php:2070
+#: usr/local/www/interfaces_ppps_edit.php:611
+#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2095
+msgid "Select a reset timing type"
+msgstr "Selecione o tipo de tempo de reinicialização"
+
+#: usr/local/www/interfaces.php:1839
+#: usr/local/www/interfaces_ppps_edit.php:614
+#: usr/local/www/interfaces.php:2017
+#: usr/local/www/interfaces_ppps_edit.php:615
+#: usr/local/www/interfaces.php:2005
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2032 usr/local/www/interfaces.php:2078
+#: usr/local/www/interfaces_ppps_edit.php:619
+#: usr/local/www/interfaces.php:2067 usr/local/www/interfaces.php:2103
+msgid "hour (0-23)"
+msgstr "hora (0-23)"
+
+#: usr/local/www/interfaces.php:1841
+#: usr/local/www/interfaces_ppps_edit.php:616
+#: usr/local/www/interfaces.php:2019
+#: usr/local/www/interfaces_ppps_edit.php:617
+#: usr/local/www/interfaces.php:2007
+#: usr/local/www/interfaces_ppps_edit.php:623
+#: usr/local/www/interfaces.php:2034 usr/local/www/interfaces.php:2080
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2069 usr/local/www/interfaces.php:2105
+msgid "minute (0-59)"
+msgstr "minutos (0-59)"
+
+#: usr/local/www/interfaces.php:1843
+#: usr/local/www/interfaces_ppps_edit.php:618
+#: usr/local/www/interfaces.php:2021
+#: usr/local/www/interfaces_ppps_edit.php:619
+#: usr/local/www/interfaces.php:2009
+#: usr/local/www/interfaces_ppps_edit.php:625
+#: usr/local/www/interfaces.php:2036 usr/local/www/interfaces.php:2082
+#: usr/local/www/interfaces_ppps_edit.php:623
+#: usr/local/www/interfaces.php:2071 usr/local/www/interfaces.php:2107
+msgid "reset at a specific date (mm/dd/yyyy)"
+msgstr "reinicie em uma data específica (mm/dd/yyyy)"
+
+#: usr/local/www/interfaces.php:1846
+#: usr/local/www/interfaces_ppps_edit.php:621
+#: usr/local/www/interfaces.php:2024
+#: usr/local/www/interfaces_ppps_edit.php:622
+#: usr/local/www/interfaces.php:2012
+#: usr/local/www/interfaces_ppps_edit.php:628
+#: usr/local/www/interfaces.php:2039 usr/local/www/interfaces.php:2085
+#: usr/local/www/interfaces_ppps_edit.php:626
+#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2110
+msgid "If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."
+msgstr "Se você deixar o campo de data vazio, a reinicialização será executada todos os dias no horário que especificou usando os campos de minutos e hora."
+
+#: usr/local/www/interfaces.php:1854
+#: usr/local/www/interfaces_ppps_edit.php:629
+#: usr/local/www/interfaces.php:2032
+#: usr/local/www/interfaces_ppps_edit.php:630
+#: usr/local/www/interfaces.php:2020
+#: usr/local/www/interfaces_ppps_edit.php:636
+#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2093
+#: usr/local/www/interfaces_ppps_edit.php:634
+#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2118
+msgid "reset at each month ('0 0 1 * *')"
+msgstr "reiniciar a cada mês ('0 0 1 * *')"
+
+#: usr/local/www/interfaces.php:1857
+#: usr/local/www/interfaces_ppps_edit.php:632
+#: usr/local/www/interfaces.php:2035
+#: usr/local/www/interfaces_ppps_edit.php:633
+#: usr/local/www/interfaces.php:2023
+#: usr/local/www/interfaces_ppps_edit.php:639
+#: usr/local/www/interfaces.php:2050 usr/local/www/interfaces.php:2096
+#: usr/local/www/interfaces_ppps_edit.php:637
+#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2121
+msgid "reset at each week ('0 0 * * 0')"
+msgstr "reiniciar a cada semana ('0 0 * * 0')"
+
+#: usr/local/www/interfaces.php:1860
+#: usr/local/www/interfaces_ppps_edit.php:635
+#: usr/local/www/interfaces.php:2038
+#: usr/local/www/interfaces_ppps_edit.php:636
+#: usr/local/www/interfaces.php:2026
+#: usr/local/www/interfaces_ppps_edit.php:642
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2099
+#: usr/local/www/interfaces_ppps_edit.php:640
+#: usr/local/www/interfaces.php:2088 usr/local/www/interfaces.php:2124
+msgid "reset at each day ('0 0 * * *')"
+msgstr "reiniciar a cada dia ('0 0 * * *')"
+
+#: usr/local/www/interfaces.php:1863
+#: usr/local/www/interfaces_ppps_edit.php:638
+#: usr/local/www/interfaces.php:2041
+#: usr/local/www/interfaces_ppps_edit.php:639
+#: usr/local/www/interfaces.php:2029
+#: usr/local/www/interfaces_ppps_edit.php:645
+#: usr/local/www/interfaces.php:2056 usr/local/www/interfaces.php:2102
+#: usr/local/www/interfaces_ppps_edit.php:643
+#: usr/local/www/interfaces.php:2091 usr/local/www/interfaces.php:2127
+msgid "reset at each hour ('0 * * * *')"
+msgstr "reiniciar a cada hora ('0 * * * *')"
+
+#: usr/local/www/interfaces.php:1872 usr/local/www/interfaces.php:2050
+#: usr/local/www/interfaces.php:2038 usr/local/www/interfaces.php:2065
+#: usr/local/www/interfaces.php:2111 usr/local/www/interfaces.php:2100
+#: usr/local/www/interfaces.php:2136
+msgid "Advanced and MLPPP"
+msgstr "Avançado e MLPPP"
+
+#: usr/local/www/interfaces.php:1876 usr/local/www/interfaces.php:2054
+#: usr/local/www/interfaces.php:2042 usr/local/www/interfaces.php:2069
+#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2104
+#: usr/local/www/interfaces.php:2140
+msgid "for additional PPPoE configuration options. Save first if you made changes."
+msgstr "para opções de configuração PPPoE adicionais. Salve primeiro se você realizou mudanças."
+
+#: usr/local/www/interfaces.php:1881 usr/local/www/interfaces.php:2059
+#: usr/local/www/interfaces.php:2047 usr/local/www/interfaces.php:2074
+#: usr/local/www/interfaces.php:2120 usr/local/www/interfaces.php:2109
+#: usr/local/www/interfaces.php:2145
+msgid "for advanced PPPoE configuration options and MLPPP configuration."
+msgstr "para opções de configuração PPPoE avançadas e configurações MLPPP."
+
+#: usr/local/www/interfaces.php:1892 usr/local/www/interfaces.php:2070
+#: usr/local/www/interfaces.php:2058 usr/local/www/interfaces.php:2088
+#: usr/local/www/interfaces.php:2134 usr/local/www/interfaces.php:2123
+#: usr/local/www/interfaces.php:2159
+msgid "PPTP/L2TP configuration"
+msgstr "Configuração PPTP/L2TP"
+
+#: usr/local/www/interfaces.php:1907
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2103 usr/local/www/interfaces.php:2149
+#: usr/local/www/interfaces.php:2138 usr/local/www/interfaces.php:2174
+msgid "Local IP address"
+msgstr "Endereço IP Local"
+
+#: usr/local/www/interfaces.php:1920
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces.php:2098 usr/local/www/interfaces.php:2086
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/interfaces.php:2116 usr/local/www/interfaces.php:2162
+#: usr/local/www/interfaces.php:2151 usr/local/www/interfaces.php:2187
+msgid "Remote IP address"
+msgstr "Endereço IP Remoto"
+
+#: usr/local/www/interfaces.php:1930 usr/local/www/interfaces.php:2108
+#: usr/local/www/interfaces.php:2096 usr/local/www/interfaces.php:2126
+#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2161
+#: usr/local/www/interfaces.php:2197
+msgid "This option causes the interface to operate in dial-on-demand mode, allowing you to have a"
+msgstr "Essa opção faz com que a interface opere no modo discagem sob demanda, permitindo que você tenha uma"
+
+#: usr/local/www/interfaces.php:1944 usr/local/www/interfaces.php:2122
+#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2140
+#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2175
+#: usr/local/www/interfaces.php:2211
+msgid "for additional PPTP and L2TP configuration options. Save first if you made changes."
+msgstr "para opções de configuração de PPTP e L2TP adicionais. Salve primeiro se você fez alterações."
+
+#: usr/local/www/interfaces.php:1949 usr/local/www/interfaces.php:2127
+#: usr/local/www/interfaces.php:2115 usr/local/www/interfaces.php:2145
+#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2180
+#: usr/local/www/interfaces.php:2216
+msgid "for advanced PPTP and L2TP configuration options"
+msgstr "para opções de configuração de PPTP e L2TP avançadas"
+
+#: usr/local/www/interfaces.php:1964 usr/local/www/interfaces.php:2142
+#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2160
+#: usr/local/www/interfaces.php:2206 usr/local/www/interfaces.php:2195
+#: usr/local/www/interfaces.php:2231
+msgid "Common wireless configuration - Settings apply to all wireless networks on"
+msgstr "Configurações sem fio comuns - Configurações aplicam-se para todas as redes sem fio em"
+
+#: usr/local/www/interfaces.php:1967 usr/local/www/interfaces.php:2145
+#: usr/local/www/interfaces.php:2133 usr/local/www/interfaces.php:2163
+#: usr/local/www/interfaces.php:2209 usr/local/www/interfaces.php:2198
+#: usr/local/www/interfaces.php:2234
+msgid "Persist common settings"
+msgstr "Persistir configurações comuns"
+
+#: usr/local/www/interfaces.php:1970 usr/local/www/interfaces.php:2148
+#: usr/local/www/interfaces.php:2136 usr/local/www/interfaces.php:2166
+#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2201
+#: usr/local/www/interfaces.php:2237
+msgid "Enabling this preserves the common wireless configuration through interface deletions and reassignments."
+msgstr "Habilitando isso preserva-se as configurações sem fio comuns durante remoções e atribuições de interface."
+
+#: usr/local/www/interfaces.php:1974 usr/local/www/interfaces.php:2152
+#: usr/local/www/interfaces.php:2140 usr/local/www/interfaces.php:2170
+#: usr/local/www/interfaces.php:2216 usr/local/www/interfaces.php:2205
+#: usr/local/www/interfaces.php:2241
+msgid "Standard"
+msgstr "Padrão"
+
+#: usr/local/www/interfaces.php:1990 usr/local/www/interfaces.php:2168
+#: usr/local/www/interfaces.php:2156 usr/local/www/interfaces.php:2186
+#: usr/local/www/interfaces.php:2232 usr/local/www/interfaces.php:2221
+#: usr/local/www/interfaces.php:2257
+msgid "Protection Mode"
+msgstr "Modo de Proteção"
+
+#: usr/local/www/interfaces.php:1993 usr/local/www/interfaces.php:2171
+#: usr/local/www/interfaces.php:2159 usr/local/www/interfaces.php:2189
+#: usr/local/www/interfaces.php:2235 usr/local/www/interfaces.php:2224
+#: usr/local/www/interfaces.php:2260
+msgid "Protection mode off"
+msgstr "Modo de Proteção desligado"
+
+#: usr/local/www/interfaces.php:1994 usr/local/www/interfaces.php:2172
+#: usr/local/www/interfaces.php:2160 usr/local/www/interfaces.php:2190
+#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2225
+#: usr/local/www/interfaces.php:2261
+msgid "Protection mode CTS to self"
+msgstr "Modo de Proteção CTS para si mesmo"
+
+#: usr/local/www/interfaces.php:1995 usr/local/www/interfaces.php:2173
+#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2191
+#: usr/local/www/interfaces.php:2237 usr/local/www/interfaces.php:2226
+#: usr/local/www/interfaces.php:2262
+msgid "Protection mode RTS and CTS"
+msgstr "Modo de Proteção RTS e CTS"
+
+#: usr/local/www/interfaces.php:1998 usr/local/www/interfaces.php:2176
+#: usr/local/www/interfaces.php:2164 usr/local/www/interfaces.php:2194
+#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2229
+#: usr/local/www/interfaces.php:2265
+msgid "For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network."
+msgstr "Para IEEE 802.11g, use a técnica especificada para proteger frames OFDM em uma rede 11b/11g."
+
+#: usr/local/www/interfaces.php:2006 usr/local/www/interfaces.php:2184
+#: usr/local/www/interfaces.php:2172 usr/local/www/interfaces.php:2202
+#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2237
+#: usr/local/www/interfaces.php:2273
+msgid "Transmit power"
+msgstr "Transmitir energia"
+
+#: usr/local/www/interfaces.php:2019 usr/local/www/interfaces.php:2197
+#: usr/local/www/interfaces.php:2185 usr/local/www/interfaces.php:2215
+#: usr/local/www/interfaces.php:2261 usr/local/www/interfaces.php:2250
+#: usr/local/www/interfaces.php:2286
+msgid "Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adapters support changing the transmit power setting."
+msgstr "Nota: Tipicamente somente poucas configurações discretas de energia estão disponíveis e o driver irá usar as configurações mais próximas ao valor especificado. Nem todos os adaptadores suportam mudanças nas configurações de transmissão de energia."
+
+#: usr/local/www/interfaces.php:2023 usr/local/www/status_interfaces.php:258
+#: usr/local/www/status_interfaces.php:355 usr/local/www/interfaces.php:2201
+#: usr/local/www/status_interfaces.php:358 usr/local/www/interfaces.php:2189
+#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2265
+#: usr/local/www/interfaces.php:2254 usr/local/www/interfaces.php:2290
+msgid "Channel"
+msgstr "Canal"
+
+#: usr/local/www/interfaces.php:2026 usr/local/www/interfaces.php:2073
+#: usr/local/www/interfaces.php:2085 usr/local/www/interfaces.php:2204
+#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2263
+#: usr/local/www/interfaces.php:2192 usr/local/www/interfaces.php:2239
+#: usr/local/www/interfaces.php:2222 usr/local/www/interfaces.php:2269
+#: usr/local/www/interfaces.php:2281 usr/local/www/interfaces.php:2268
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2327
+#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2316 usr/local/www/interfaces.php:2293
+#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2352
+msgid "Auto"
+msgstr "Auto"
+
+#: usr/local/www/interfaces.php:2046 usr/local/www/interfaces.php:2224
+#: usr/local/www/interfaces.php:2212 usr/local/www/interfaces.php:2242
+#: usr/local/www/interfaces.php:2288 usr/local/www/interfaces.php:2277
+#: usr/local/www/interfaces.php:2313
+msgid "Legend: wireless standards - channel # (frequency @ max TX power / TX power allowed in reg. domain)"
+msgstr "Legenda: padrões sem fio - canal # (frequência @ max TX power / TX power permitidos no domínio registrado)"
+
+#: usr/local/www/interfaces.php:2048 usr/local/www/interfaces.php:2226
+#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2244
+#: usr/local/www/interfaces.php:2290 usr/local/www/interfaces.php:2279
+#: usr/local/www/interfaces.php:2315
+msgid "Note: Not all channels may be supported by your card. Auto may override the wireless standard selected above."
+msgstr "Nota: Nem todos os canais podem ser suportados pelo seu cartão. Auto pode sobrescrever os padrões sem fio selecionados acima."
+
+#: usr/local/www/interfaces.php:2053 usr/local/www/interfaces.php:2231
+#: usr/local/www/interfaces.php:2219 usr/local/www/interfaces.php:2249
+#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2284
+#: usr/local/www/interfaces.php:2320
+msgid "Antenna settings"
+msgstr "Configurações de Antena"
+
+#: usr/local/www/interfaces.php:2059 usr/local/www/interfaces.php:2237
+#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2255
+#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2326
+msgid "Diversity"
+msgstr "Diversidade"
+
+#: usr/local/www/interfaces.php:2061 usr/local/www/interfaces.php:2072
+#: usr/local/www/interfaces.php:2084 usr/local/www/interfaces.php:2114
+#: usr/local/www/interfaces.php:2130 usr/local/www/interfaces.php:2146
+#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2250
+#: usr/local/www/interfaces.php:2262 usr/local/www/interfaces.php:2292
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2324
+#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2238
+#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2296
+#: usr/local/www/interfaces.php:2312 usr/local/www/diag_system_pftop.php:135
+#: usr/local/www/interfaces.php:2257 usr/local/www/interfaces.php:2268
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2326
+#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2303
+#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2356
+#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2388
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345
+#: usr/local/www/interfaces.php:2361 usr/local/www/interfaces.php:2377
+#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2339
+#: usr/local/www/interfaces.php:2351 usr/local/www/interfaces.php:2381
+#: usr/local/www/interfaces.php:2397 usr/local/www/interfaces.php:2413
+msgid "Default"
+msgstr "Padrão"
+
+#: usr/local/www/interfaces.php:2062 usr/local/www/vpn_pptp.php:314
+#: usr/local/www/vpn_l2tp.php:294 usr/local/www/vpn_pppoe_edit.php:362
+#: usr/local/www/interfaces.php:2240 usr/local/www/vpn_pppoe_edit.php:363
+#: usr/local/www/vpn_pptp.php:316 usr/local/www/interfaces.php:2228
+#: usr/local/www/vpn_l2tp.php:295 usr/local/www/vpn_l2tp.php:298
+#: usr/local/www/vpn_pppoe_edit.php:366 usr/local/www/vpn_pptp.php:319
+#: usr/local/www/interfaces.php:2258 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2293 usr/local/www/interfaces.php:2329
+msgid "Off"
+msgstr "Desligado"
+
+#: usr/local/www/interfaces.php:2063 usr/local/www/interfaces.php:2241
+#: usr/local/www/interfaces.php:2229 usr/local/www/interfaces.php:2259
+#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2294
+#: usr/local/www/interfaces.php:2330
+msgid "On"
+msgstr "Ligado"
+
+#: usr/local/www/interfaces.php:2070 usr/local/www/interfaces.php:2248
+#: usr/local/www/interfaces.php:2236 usr/local/www/interfaces.php:2266
+#: usr/local/www/interfaces.php:2312 usr/local/www/interfaces.php:2301
+#: usr/local/www/interfaces.php:2337
+msgid "Transmit antenna"
+msgstr "Antena de transmissão"
+
+#: usr/local/www/interfaces.php:2074 usr/local/www/interfaces.php:2086
+#: usr/local/www/interfaces.php:2252 usr/local/www/interfaces.php:2264
+#: usr/local/www/interfaces.php:2240 usr/local/www/interfaces.php:2270
+#: usr/local/www/interfaces.php:2282 usr/local/www/interfaces.php:2316
+#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2305
+#: usr/local/www/interfaces.php:2317 usr/local/www/interfaces.php:2341
+#: usr/local/www/interfaces.php:2353
+msgid "#1"
+msgstr "#1"
+
+#: usr/local/www/interfaces.php:2075 usr/local/www/interfaces.php:2087
+#: usr/local/www/interfaces.php:2253 usr/local/www/interfaces.php:2265
+#: usr/local/www/interfaces.php:2241 usr/local/www/interfaces.php:2271
+#: usr/local/www/interfaces.php:2283 usr/local/www/interfaces.php:2317
+#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2342
+#: usr/local/www/interfaces.php:2354
+msgid "#2"
+msgstr "#2"
+
+#: usr/local/www/interfaces.php:2082 usr/local/www/interfaces.php:2260
+#: usr/local/www/interfaces.php:2248 usr/local/www/interfaces.php:2278
+#: usr/local/www/interfaces.php:2324 usr/local/www/interfaces.php:2313
+#: usr/local/www/interfaces.php:2349
+msgid "Receive antenna"
+msgstr "Antena de recepção"
+
+#: usr/local/www/interfaces.php:2094 usr/local/www/interfaces.php:2272
+#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2325
+#: usr/local/www/interfaces.php:2361
+msgid "Note: The antenna numbers do not always match up with the labels on the card."
+msgstr "Nota: O número de antenas nem sempre correspondem com os rótulos no cartão."
+
+#: usr/local/www/interfaces.php:2100 usr/local/www/interfaces.php:2278
+#: usr/local/www/interfaces.php:2266 usr/local/www/interfaces.php:2296
+#: usr/local/www/interfaces.php:2342 usr/local/www/interfaces.php:2331
+#: usr/local/www/interfaces.php:2367
+msgid "Distance setting"
+msgstr "Configuração de distância"
+
+#: usr/local/www/interfaces.php:2104 usr/local/www/interfaces.php:2282
+#: usr/local/www/interfaces.php:2270 usr/local/www/interfaces.php:2300
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2335
+#: usr/local/www/interfaces.php:2371
+msgid "Note: This field can be used to tune ACK/CTS timers to fit the distance between AP and Client"
+msgstr "Nota: Esse campo pode ser usado para afinar os temporizadores ACK/CTS para ajustá-los à distância entre AP e o Cliente"
+
+#: usr/local/www/interfaces.php:2105 usr/local/www/interfaces.php:2283
+#: usr/local/www/interfaces.php:2271 usr/local/www/interfaces.php:2301
+#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2336
+#: usr/local/www/interfaces.php:2372
+msgid "(measured in meters)"
+msgstr "(medido em Metros e funciona somente com cartões baseados em Atheros!)"
+
+#: usr/local/www/interfaces.php:2110 usr/local/www/interfaces.php:2288
+#: usr/local/www/interfaces.php:2276 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2341
+#: usr/local/www/interfaces.php:2377
+msgid "Regulatory settings"
+msgstr "Configurações Regulatórias"
+
+#: usr/local/www/interfaces.php:2112 usr/local/www/interfaces.php:2290
+#: usr/local/www/interfaces.php:2278 usr/local/www/interfaces.php:2308
+#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2343
+#: usr/local/www/interfaces.php:2379
+msgid "Regulatory domain"
+msgstr "Domínio regulatório"
+
+#: usr/local/www/interfaces.php:2126 usr/local/www/interfaces.php:2304
+#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2322
+#: usr/local/www/interfaces.php:2368 usr/local/www/interfaces.php:2357
+#: usr/local/www/interfaces.php:2393
+msgid "Note: Some cards have a default that is not recognized and require changing the regulatory domain to one in this list for the changes to other regulatory settings to work."
+msgstr "Nota: Alguns cartões tem um padrão que não é reconhecido e requerem mudanças no domínio regulatório para um dessa lista de modo que funcione."
+
+#: usr/local/www/interfaces.php:2128 usr/local/www/interfaces.php:2306
+#: usr/local/www/interfaces.php:2294 usr/local/www/interfaces.php:2324
+#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2359
+#: usr/local/www/interfaces.php:2395
+msgid "Country (listed with country code and regulatory domain)"
+msgstr "País (listado com código de país e domínio regulatório)"
+
+#: usr/local/www/interfaces.php:2142 usr/local/www/interfaces.php:2320
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2338
+#: usr/local/www/interfaces.php:2384 usr/local/www/interfaces.php:2373
+#: usr/local/www/interfaces.php:2409
+msgid "Note: Any country setting other than \"Default\" will override the regulatory domain setting"
+msgstr "Nota: Qualquer configuração de país que não seja a \"Padrão\" irá sobrescrever a configuração de domínio regulatório"
+
+#: usr/local/www/interfaces.php:2144 usr/local/www/interfaces.php:2322
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2340
+#: usr/local/www/interfaces.php:2386 usr/local/www/interfaces.php:2375
+#: usr/local/www/interfaces.php:2411
+msgid "Location"
+msgstr "Localização"
+
+#: usr/local/www/interfaces.php:2147 usr/local/www/interfaces.php:2325
+#: usr/local/www/interfaces.php:2313 usr/local/www/interfaces.php:2343
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2378
+#: usr/local/www/interfaces.php:2414
+msgid "Indoor"
+msgstr "Interior"
+
+#: usr/local/www/interfaces.php:2148 usr/local/www/interfaces.php:2326
+#: usr/local/www/interfaces.php:2314 usr/local/www/interfaces.php:2344
+#: usr/local/www/interfaces.php:2390 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2415
+msgid "Outdoor"
+msgstr "Exterior"
+
+#: usr/local/www/interfaces.php:2149 usr/local/www/interfaces.php:2327
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2345
+#: usr/local/www/interfaces.php:2391 usr/local/www/interfaces.php:2380
+#: usr/local/www/interfaces.php:2416
+msgid "Anywhere"
+msgstr "Qualquer lugar"
+
+#: usr/local/www/interfaces.php:2152 usr/local/www/interfaces.php:2330
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2348
+#: usr/local/www/interfaces.php:2394 usr/local/www/interfaces.php:2383
+#: usr/local/www/interfaces.php:2419
+msgid "These settings may affect which channels are available and the maximum transmit power allowed on those channels. Using the correct settings to comply with local regulatory requirements is recommended."
+msgstr "Essas configurações devem afetar os canais que estiverem disponíveis e o máximo de energia de transmissão permitido para tais canais. Usando as configurações corretas para estar de acordo com os requisitos regulatórios locais é recomendado."
+
+#: usr/local/www/interfaces.php:2154 usr/local/www/interfaces.php:2332
+#: usr/local/www/interfaces.php:2320 usr/local/www/interfaces.php:2350
+#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2385
+#: usr/local/www/interfaces.php:2421
+msgid "Note: All wireless networks on this interface will be temporarily brought down when changing regulatory settings. Some of the regulatory domains or country codes may not be allowed by some cards. These settings may not be able to add additional channels that are not already supported."
+msgstr "Nota: Todas as redes sem fio nessa interface serão temporariamente desligadas quando houver mudanças das configurações regulatórias. Alguns domínios regulatórios ou códigos de países podem não ser permitidos em alguns cartões. Essas configuraçõe podem não ser capazes de adicionar canais adicionais que ainda não são suportados."
+
+#: usr/local/www/interfaces.php:2161 usr/local/www/interfaces.php:2339
+#: usr/local/www/interfaces.php:2327 usr/local/www/interfaces.php:2357
+#: usr/local/www/interfaces.php:2403 usr/local/www/interfaces.php:2392
+#: usr/local/www/interfaces.php:2428
+msgid "Network-specific wireless configuration"
+msgstr "Configuração sem fio de rede específica"
+
+#: usr/local/www/interfaces.php:2167
+#: usr/local/www/interfaces_wireless_edit.php:179
+#: usr/local/www/interfaces.php:2345 usr/local/www/interfaces.php:2333
+#: usr/local/www/interfaces_wireless_edit.php:181
+#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2409
+#: usr/local/www/interfaces.php:2398 usr/local/www/interfaces.php:2434
+msgid "Infrastructure (BSS)"
+msgstr "Infraestrutura (BSS)"
+
+#: usr/local/www/interfaces.php:2168
+#: usr/local/www/interfaces_wireless_edit.php:180
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2334
+#: usr/local/www/interfaces_wireless_edit.php:182
+#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2410
+#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2435
+msgid "Ad-hoc (IBSS)"
+msgstr "Ad-hoc (IBSS)"
+
+#: usr/local/www/interfaces.php:2169
+#: usr/local/www/interfaces_wireless_edit.php:181
+#: usr/local/www/interfaces.php:2347 usr/local/www/interfaces.php:2335
+#: usr/local/www/interfaces_wireless_edit.php:183
+#: usr/local/www/interfaces.php:2365 usr/local/www/interfaces.php:2411
+#: usr/local/www/interfaces.php:2400 usr/local/www/interfaces.php:2436
+msgid "Access Point"
+msgstr "Ponto de Acesso"
+
+#: usr/local/www/interfaces.php:2181 usr/local/www/interfaces.php:2361
+#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2425 usr/local/www/interfaces.php:2414
+#: usr/local/www/interfaces.php:2450
+msgid "Minimum wireless standard"
+msgstr "Padrão mínimo sem fio"
+
+#: usr/local/www/interfaces.php:2184 usr/local/www/interfaces.php:2364
+#: usr/local/www/interfaces.php:2352 usr/local/www/interfaces.php:2382
+#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2417
+#: usr/local/www/interfaces.php:2453
+msgid "Any"
+msgstr "Qualquer"
+
+#: usr/local/www/interfaces.php:2186 usr/local/www/interfaces.php:2366
+#: usr/local/www/interfaces.php:2354 usr/local/www/interfaces.php:2384
+#: usr/local/www/interfaces.php:2430 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2455
+msgid "802.11g"
+msgstr "802.11g"
+
+#: usr/local/www/interfaces.php:2188 usr/local/www/interfaces.php:2368
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2386
+#: usr/local/www/interfaces.php:2432 usr/local/www/interfaces.php:2421
+#: usr/local/www/interfaces.php:2457
+msgid "802.11n"
+msgstr "802.11n"
+
+#: usr/local/www/interfaces.php:2191 usr/local/www/interfaces.php:2371
+#: usr/local/www/interfaces.php:2359 usr/local/www/interfaces.php:2389
+#: usr/local/www/interfaces.php:2435 usr/local/www/interfaces.php:2424
+#: usr/local/www/interfaces.php:2460
+msgid "When operating as an access point, allow only stations capable of the selected wireless standard to associate (stations not capable are not permitted to associate)."
+msgstr "Quando operando como um ponto de acesso, permitir somente que estações capazes de operar nos padrões sem fio selecionados se associem (estações não capazes não tem permissão de se associarem)."
+
+#: usr/local/www/interfaces.php:2196 usr/local/www/interfaces.php:2376
+#: usr/local/www/interfaces.php:2364 usr/local/www/interfaces.php:2394
+#: usr/local/www/interfaces.php:2440 usr/local/www/interfaces.php:2429
+#: usr/local/www/interfaces.php:2465
+msgid "802.11g only"
+msgstr "802.11g somente"
+
+#: usr/local/www/interfaces.php:2199 usr/local/www/interfaces.php:2379
+#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2397
+#: usr/local/www/interfaces.php:2443 usr/local/www/interfaces.php:2432
+#: usr/local/www/interfaces.php:2468
+msgid "When operating as an access point in 802.11g mode, allow only 11g-capable stations to associate (11b-only stations are not permitted to associate)."
+msgstr "Quando operando como um ponto de acesso em modo 802.11g, permitir somente que estações que suportam 11g se associem (estações somente 11b não tem permissão de se associarem)."
+
+#: usr/local/www/interfaces.php:2204 usr/local/www/interfaces.php:2384
+#: usr/local/www/interfaces.php:2372 usr/local/www/interfaces.php:2402
+#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2437
+#: usr/local/www/interfaces.php:2473
+msgid "Allow intra-BSS communication"
+msgstr "Permitir comunicação intra-BSS"
+
+#: usr/local/www/interfaces.php:2208 usr/local/www/interfaces.php:2388
+#: usr/local/www/interfaces.php:2376 usr/local/www/interfaces.php:2406
+#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2441
+#: usr/local/www/interfaces.php:2477
+msgid "When operating as an access point, enable this if you want to pass packets between wireless clients directly."
+msgstr "Quando operando como um ponto de acesso, habilitar isso se você desejar liberar pacotes entre clientes sem fio diretamente."
+
+#: usr/local/www/interfaces.php:2210 usr/local/www/interfaces.php:2390
+#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2408
+#: usr/local/www/interfaces.php:2454 usr/local/www/interfaces.php:2443
+#: usr/local/www/interfaces.php:2479
+msgid "Disabling the internal bridging is useful when traffic is to be processed with packet filtering."
+msgstr "Desabilitar a criação de pontes internas é útil quando o tráfego é processado com filtro de pacote."
+
+#: usr/local/www/interfaces.php:2214 usr/local/www/interfaces.php:2394
+#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2412
+#: usr/local/www/interfaces.php:2458 usr/local/www/interfaces.php:2447
+#: usr/local/www/interfaces.php:2483
+msgid "Enable WME"
+msgstr "Habilitar WME"
+
+#: usr/local/www/interfaces.php:2217 usr/local/www/interfaces.php:2397
+#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2415
+#: usr/local/www/interfaces.php:2461 usr/local/www/interfaces.php:2450
+#: usr/local/www/interfaces.php:2486
+msgid "Setting this option will force the card to use WME (wireless QoS)."
+msgstr "Configurar essa opção irá forçar o cartão a usar WME (QoS sem fio)."
+
+#: usr/local/www/interfaces.php:2221 usr/local/www/interfaces.php:2401
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2465 usr/local/www/interfaces.php:2454
+#: usr/local/www/interfaces.php:2490
+msgid "Enable Hide SSID"
+msgstr "Habilitar Hide SSID"
+
+#: usr/local/www/interfaces.php:2225 usr/local/www/interfaces.php:2405
+#: usr/local/www/interfaces.php:2393 usr/local/www/interfaces.php:2423
+#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2458
+#: usr/local/www/interfaces.php:2494
+msgid "Setting this option will force the card to NOT broadcast its SSID"
+msgstr "Configurar essa opção irá forçar o cartão a NÃO enviar seu SSID em broadcast"
+
+#: usr/local/www/interfaces.php:2227 usr/local/www/interfaces.php:2407
+#: usr/local/www/interfaces.php:2395 usr/local/www/interfaces.php:2425
+#: usr/local/www/interfaces.php:2471 usr/local/www/interfaces.php:2460
+#: usr/local/www/interfaces.php:2496
+msgid "(this might create problems for some clients)."
+msgstr "(isso deve criar problemas para alguns clientes)."
+
+#: usr/local/www/interfaces.php:2231 usr/local/www/interfaces.php:2411
+#: usr/local/www/interfaces.php:2399 usr/local/www/interfaces.php:2429
+#: usr/local/www/interfaces.php:2475 usr/local/www/interfaces.php:2464
+#: usr/local/www/interfaces.php:2500
+msgid "WEP"
+msgstr "WEP"
+
+#: usr/local/www/interfaces.php:2234 usr/local/www/interfaces.php:2414
+#: usr/local/www/interfaces.php:2402 usr/local/www/interfaces.php:2432
+#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2503
+msgid "Enable WEP"
+msgstr "Habilitar WEP"
+
+#: usr/local/www/interfaces.php:2239 usr/local/www/interfaces.php:2419
+#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2437
+#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2472
+#: usr/local/www/interfaces.php:2508
+msgid "TX key"
+msgstr "Chave TX"
+
+#: usr/local/www/interfaces.php:2242 usr/local/www/interfaces.php:2422
+#: usr/local/www/interfaces.php:2410 usr/local/www/interfaces.php:2440
+#: usr/local/www/interfaces.php:2486 usr/local/www/interfaces.php:2475
+#: usr/local/www/interfaces.php:2511
+msgid "Key 1:"
+msgstr "Chave 1:"
+
+#: usr/local/www/interfaces.php:2251 usr/local/www/interfaces.php:2431
+#: usr/local/www/interfaces.php:2419 usr/local/www/interfaces.php:2449
+#: usr/local/www/interfaces.php:2495 usr/local/www/interfaces.php:2484
+#: usr/local/www/interfaces.php:2520
+msgid "Key 2:"
+msgstr "Chave 2:"
+
+#: usr/local/www/interfaces.php:2260 usr/local/www/interfaces.php:2440
+#: usr/local/www/interfaces.php:2428 usr/local/www/interfaces.php:2458
+#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2493
+#: usr/local/www/interfaces.php:2529
+msgid "Key 3:"
+msgstr "Chave 3:"
+
+#: usr/local/www/interfaces.php:2269 usr/local/www/interfaces.php:2449
+#: usr/local/www/interfaces.php:2437 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2513 usr/local/www/interfaces.php:2502
+#: usr/local/www/interfaces.php:2538
+msgid "Key 4:"
+msgstr "Chave 4:"
+
+#: usr/local/www/interfaces.php:2279 usr/local/www/interfaces.php:2459
+#: usr/local/www/interfaces.php:2447 usr/local/www/interfaces.php:2477
+#: usr/local/www/interfaces.php:2523 usr/local/www/interfaces.php:2512
+#: usr/local/www/interfaces.php:2548
+msgid "40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits preceded by '0x'."
+msgstr "Chaves de 40 (64) bits devem ser informadas como 5 caracteres ASCII ou 10 dígitos hex precedidos por '0x'."
+
+#: usr/local/www/interfaces.php:2280 usr/local/www/interfaces.php:2460
+#: usr/local/www/interfaces.php:2448 usr/local/www/interfaces.php:2478
+#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2513
+#: usr/local/www/interfaces.php:2549
+msgid "104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits preceded by '0x'."
+msgstr "Chaves de 104 (128) bits devem ser informadas como 13 caracteres ASCII ou 26 dígitos hex precedidos por '0x'."
+
+#: usr/local/www/interfaces.php:2284 usr/local/www/interfaces.php:2308
+#: usr/local/www/interfaces.php:2464 usr/local/www/interfaces.php:2488
+#: usr/local/www/interfaces.php:2452 usr/local/www/interfaces.php:2476
+#: usr/local/www/interfaces.php:2482 usr/local/www/interfaces.php:2506
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2552
+#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2541
+#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2577
+msgid "WPA"
+msgstr "WPA"
+
+#: usr/local/www/interfaces.php:2287 usr/local/www/interfaces.php:2467
+#: usr/local/www/interfaces.php:2455 usr/local/www/interfaces.php:2485
+#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2520
+#: usr/local/www/interfaces.php:2556
+msgid "Enable WPA"
+msgstr "Habilitar WPA"
+
+#: usr/local/www/interfaces.php:2292 usr/local/www/interfaces.php:2472
+msgid "WPA Pre Shared Key"
+msgstr "Chave Pre-Compartilhada WPA"
+
+#: usr/local/www/interfaces.php:2295 usr/local/www/interfaces.php:2475
+#: usr/local/www/interfaces.php:2463 usr/local/www/interfaces.php:2493
+#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2528
+#: usr/local/www/interfaces.php:2564
+msgid "PSK:"
+msgstr "PSK:"
+
+#: usr/local/www/interfaces.php:2301 usr/local/www/interfaces.php:2481
+#: usr/local/www/interfaces.php:2469 usr/local/www/interfaces.php:2499
+#: usr/local/www/interfaces.php:2545 usr/local/www/interfaces.php:2534
+#: usr/local/www/interfaces.php:2570
+msgid "WPA Passphrase must be between 8 and 63 characters long."
+msgstr "Frase secreta deve ter de 8 a 63 caracteres."
+
+#: usr/local/www/interfaces.php:2305 usr/local/www/interfaces.php:2485
+#: usr/local/www/interfaces.php:2473 usr/local/www/interfaces.php:2503
+#: usr/local/www/interfaces.php:2549 usr/local/www/interfaces.php:2538
+#: usr/local/www/interfaces.php:2574
+msgid "WPA Mode"
+msgstr "Modo WPA"
+
+#: usr/local/www/interfaces.php:2309 usr/local/www/interfaces.php:2489
+#: usr/local/www/interfaces.php:2477 usr/local/www/interfaces.php:2507
+#: usr/local/www/interfaces.php:2553 usr/local/www/interfaces.php:2542
+#: usr/local/www/interfaces.php:2578
+msgid "WPA2"
+msgstr "WPA2"
+
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2320
+#: usr/local/www/interfaces.php:2330 usr/local/www/interfaces.php:2339
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/interfaces.php:2490 usr/local/www/interfaces.php:2500
+#: usr/local/www/interfaces.php:2510 usr/local/www/interfaces.php:2519
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/interfaces.php:2478 usr/local/www/interfaces.php:2488
+#: usr/local/www/interfaces.php:2498 usr/local/www/interfaces.php:2507
+#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2518
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2537
+#: usr/local/www/interfaces.php:2554 usr/local/www/interfaces.php:2564
+#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583
+#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2553
+#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2572
+#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2589
+#: usr/local/www/interfaces.php:2599 usr/local/www/interfaces.php:2608
+msgid "Both"
+msgstr "Ambos"
+
+#: usr/local/www/interfaces.php:2315 usr/local/www/interfaces.php:2495
+#: usr/local/www/interfaces.php:2483 usr/local/www/interfaces.php:2513
+#: usr/local/www/interfaces.php:2559 usr/local/www/interfaces.php:2548
+#: usr/local/www/interfaces.php:2584
+msgid "WPA Key Management Mode"
+msgstr "Modo de Gerenciamento de Chave WPA"
+
+#: usr/local/www/interfaces.php:2318 usr/local/www/interfaces.php:2498
+msgid "Pre Shared Key"
+msgstr "Chave Pre-compartilhada"
+
+#: usr/local/www/interfaces.php:2319 usr/local/www/interfaces.php:2499
+#: usr/local/www/interfaces.php:2487 usr/local/www/interfaces.php:2517
+#: usr/local/www/interfaces.php:2563 usr/local/www/interfaces.php:2552
+#: usr/local/www/interfaces.php:2588
+msgid "Extensible Authentication Protocol"
+msgstr "Protocolo de Autenticação Extensível"
+
+#: usr/local/www/interfaces.php:2328 usr/local/www/interfaces.php:2508
+#: usr/local/www/interfaces.php:2496 usr/local/www/interfaces.php:2526
+#: usr/local/www/interfaces.php:2572 usr/local/www/interfaces.php:2561
+#: usr/local/www/interfaces.php:2597
+msgid "Open System Authentication"
+msgstr "Autenticação de Sistema Aberto"
+
+#: usr/local/www/interfaces.php:2329 usr/local/www/interfaces.php:2509
+#: usr/local/www/interfaces.php:2497 usr/local/www/interfaces.php:2527
+#: usr/local/www/interfaces.php:2573 usr/local/www/interfaces.php:2562
+#: usr/local/www/interfaces.php:2598
+msgid "Shared Key Authentication"
+msgstr "Autenticação de Chave Compartilhada"
+
+#: usr/local/www/interfaces.php:2332 usr/local/www/interfaces.php:2512
+#: usr/local/www/interfaces.php:2500 usr/local/www/interfaces.php:2530
+#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2601
+msgid "Note: Shared Key Authentication requires WEP."
+msgstr "Nota: Autenticação de Chave Compartilhada requere WEP."
+
+#: usr/local/www/interfaces.php:2336 usr/local/www/interfaces.php:2516
+#: usr/local/www/interfaces.php:2504 usr/local/www/interfaces.php:2534
+#: usr/local/www/interfaces.php:2580 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2605
+msgid "WPA Pairwise"
+msgstr "WPA Pairwise"
+
+#: usr/local/www/interfaces.php:2340 usr/local/www/interfaces.php:2520
+#: usr/local/www/interfaces.php:2508 usr/local/www/interfaces.php:2538
+#: usr/local/www/interfaces.php:2584 usr/local/www/interfaces.php:2573
+#: usr/local/www/interfaces.php:2609
+msgid "AES (recommended)"
+msgstr "AES (recomendado)"
+
+#: usr/local/www/interfaces.php:2341 usr/local/www/interfaces.php:2521
+#: usr/local/www/interfaces.php:2509 usr/local/www/interfaces.php:2539
+#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2574
+#: usr/local/www/interfaces.php:2610
+msgid "TKIP"
+msgstr "TKIP"
+
+#: usr/local/www/interfaces.php:2346 usr/local/www/interfaces.php:2526
+#: usr/local/www/interfaces.php:2514 usr/local/www/interfaces.php:2544
+#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2579
+#: usr/local/www/interfaces.php:2615
+msgid "Key Rotation"
+msgstr "Rotação de Chave"
+
+#: usr/local/www/interfaces.php:2349 usr/local/www/interfaces.php:2529
+#: usr/local/www/interfaces.php:2517 usr/local/www/interfaces.php:2547
+#: usr/local/www/interfaces.php:2593 usr/local/www/interfaces.php:2582
+#: usr/local/www/interfaces.php:2618
+msgid "Allowed values are 1-9999. Must be longer than Master Key Regeneration time."
+msgstr "Os valores permitidos são 1-9999 mas não devem ser mais longos que o tempo de Regeneração da Chave Master."
+
+#: usr/local/www/interfaces.php:2353 usr/local/www/interfaces.php:2533
+#: usr/local/www/interfaces.php:2521 usr/local/www/interfaces.php:2551
+#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2586
+#: usr/local/www/interfaces.php:2622
+msgid "Master Key Regeneration"
+msgstr "Regeneração da Chave Master"
+
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2536
+#: usr/local/www/interfaces.php:2524 usr/local/www/interfaces.php:2554
+#: usr/local/www/interfaces.php:2600 usr/local/www/interfaces.php:2589
+#: usr/local/www/interfaces.php:2625
+msgid "Allowed values are 1-9999. Must be shorter than Key Rotation time."
+msgstr "Os valores permitidos são 1-9999 mas devem ser menores que o tempo de Rotação da Chave."
+
+#: usr/local/www/interfaces.php:2360 usr/local/www/interfaces.php:2540
+#: usr/local/www/interfaces.php:2528 usr/local/www/interfaces.php:2558
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2593
+#: usr/local/www/interfaces.php:2629
+msgid "Strict Key Regeneration"
+msgstr "Regeneração de Chave Estrita"
+
+#: usr/local/www/interfaces.php:2363 usr/local/www/interfaces.php:2543
+#: usr/local/www/interfaces.php:2531 usr/local/www/interfaces.php:2561
+#: usr/local/www/interfaces.php:2607 usr/local/www/interfaces.php:2596
+#: usr/local/www/interfaces.php:2632
+msgid "Setting this option will force the AP to rekey whenever a client disassociates."
+msgstr "Configurando essa opção forçará o AP a rechavear sempre que um cliente desassociar-se."
+
+#: usr/local/www/interfaces.php:2367 usr/local/www/interfaces.php:2547
+#: usr/local/www/interfaces.php:2535 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2611 usr/local/www/interfaces.php:2600
+#: usr/local/www/interfaces.php:2636
+msgid "Enable IEEE802.1X Authentication"
+msgstr "Habilita Autenticação IEEE802.1X"
+
+#: usr/local/www/interfaces.php:2370 usr/local/www/interfaces.php:2550
+#: usr/local/www/interfaces.php:2538 usr/local/www/interfaces.php:2568
+#: usr/local/www/interfaces.php:2614 usr/local/www/interfaces.php:2603
+#: usr/local/www/interfaces.php:2639
+msgid "Setting this option will enable 802.1X authentication."
+msgstr "Configurando essa opção habilitará a autenticação 802.1x."
+
+#: usr/local/www/interfaces.php:2371
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/status_openvpn.php:304 usr/local/www/interfaces.php:2551
+#: usr/local/www/load_balancer_pool_edit.php:255
+#: usr/local/www/status_openvpn.php:307 usr/local/www/interfaces.php:2539
+#: usr/local/www/load_balancer_pool_edit.php:253
+#: usr/local/www/status_openvpn.php:355 usr/local/www/interfaces.php:2569
+#: usr/local/www/status_openvpn.php:385 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2640
+msgid "NOTE"
+msgstr "NOTA"
+
+#: usr/local/www/interfaces.php:2371 usr/local/www/interfaces.php:2551
+#: usr/local/www/interfaces.php:2539 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2615 usr/local/www/interfaces.php:2604
+#: usr/local/www/interfaces.php:2640
+msgid "this option requires checking the \"Enable WPA box\"."
+msgstr "essa opção requer verificação da \"Caixa de Habilitar WPA\"."
+
+#: usr/local/www/interfaces.php:2375 usr/local/www/interfaces.php:2555
+#: usr/local/www/interfaces.php:2543 usr/local/www/interfaces.php:2573
+#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2608
+#: usr/local/www/interfaces.php:2644
+msgid "802.1X Authentication Server IP Address"
+msgstr "Endereço IP de Servidor de Autenticação 802.1X"
+
+#: usr/local/www/interfaces.php:2378 usr/local/www/interfaces.php:2558
+#: usr/local/www/interfaces.php:2579 usr/local/www/interfaces.php:2546
+#: usr/local/www/interfaces.php:2567 usr/local/www/interfaces.php:2576
+#: usr/local/www/interfaces.php:2597 usr/local/www/interfaces.php:2622
+#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2611
+#: usr/local/www/interfaces.php:2632 usr/local/www/interfaces.php:2647
+#: usr/local/www/interfaces.php:2668
+msgid "Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)"
+msgstr "Informe o endereço IP do Servidor de Autenticação 802.1X. Esse é, comumente, um servidor Radius (FreeRadius, Serviços de Autenticação de Internet, etc.)"
+
+#: usr/local/www/interfaces.php:2382 usr/local/www/interfaces.php:2562
+#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2580
+#: usr/local/www/interfaces.php:2626 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2651
+msgid "802.1X Authentication Server Port"
+msgstr "Porta do Servidor de Autenticação 802.1X"
+
+#: usr/local/www/interfaces.php:2385 usr/local/www/interfaces.php:2565
+#: usr/local/www/interfaces.php:2586 usr/local/www/interfaces.php:2553
+#: usr/local/www/interfaces.php:2574 usr/local/www/interfaces.php:2583
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2629
+#: usr/local/www/interfaces.php:2650 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2639 usr/local/www/interfaces.php:2654
+#: usr/local/www/interfaces.php:2675
+msgid "Leave blank for the default port 1812."
+msgstr "Deixe em branco para usar a porta padrão 1812."
+
+#: usr/local/www/interfaces.php:2389 usr/local/www/interfaces.php:2569
+#: usr/local/www/interfaces.php:2557 usr/local/www/interfaces.php:2587
+#: usr/local/www/interfaces.php:2633 usr/local/www/interfaces.php:2622
+#: usr/local/www/interfaces.php:2658
+msgid "802.1X Authentication Server Shared Secret"
+msgstr "Segredo Compartilhado do Servidor de Autenticação 802.1X"
+
+#: usr/local/www/interfaces.php:2396 usr/local/www/interfaces.php:2597
+#: usr/local/www/interfaces.php:2585 usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces.php:2661 usr/local/www/interfaces.php:2650
+#: usr/local/www/interfaces.php:2686
+msgid "Authentication Roaming Preauth"
+msgstr "Pre-Autenticação de Roaming de Autenticação"
+
+#: usr/local/www/interfaces.php:2407 usr/local/www/interfaces.php:2608
+#: usr/local/www/interfaces.php:2596 usr/local/www/interfaces.php:2626
+#: usr/local/www/interfaces.php:2672 usr/local/www/interfaces.php:2661
+#: usr/local/www/interfaces.php:2697
+msgid "Private networks"
+msgstr "Redes privadas"
+
+#: usr/local/www/interfaces.php:2415 usr/local/www/interfaces.php:2616
+#: usr/local/www/interfaces.php:2604 usr/local/www/interfaces.php:2634
+#: usr/local/www/interfaces.php:2680 usr/local/www/interfaces.php:2669
+#: usr/local/www/interfaces.php:2705
+msgid "When set, this option blocks traffic from IP addresses that are reserved for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"
+msgstr "Quando configurada, essa opção bloqueia o tráfego dos endereços IP que estão reservados para redes privadas como peer RFC 1918 (10/8, 172.16/12, 192.168/16) como"
+
+#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636
+#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671
+#: usr/local/www/interfaces.php:2707
+msgid "well as loopback addresses (127/8)."
+msgstr "endereços de retorno (127/8)."
+
+#: usr/local/www/interfaces.php:2417 usr/local/www/interfaces.php:2618
+#: usr/local/www/interfaces.php:2606 usr/local/www/interfaces.php:2636
+#: usr/local/www/interfaces.php:2682 usr/local/www/interfaces.php:2671
+#: usr/local/www/interfaces.php:2707
+msgid "You should generally leave this option turned on, unless your WAN network lies in such a private address space, too."
+msgstr "Você deve deixar essa opção normalmente ligada, a menos que sua rede WAN também estiver no mesmo espaço do endereço privado."
+
+#: usr/local/www/interfaces.php:2427 usr/local/www/interfaces.php:2628
+#: usr/local/www/interfaces.php:2616 usr/local/www/interfaces.php:2646
+#: usr/local/www/interfaces.php:2692 usr/local/www/interfaces.php:2681
+#: usr/local/www/interfaces.php:2717
+msgid "When set, this option blocks traffic from IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA."
+msgstr "Quando configurada, essa opção bloqueia o tráfego dos endereços IP que está reservados (mas não na RFC1918) ou ainda não foram atribuídas por IANA."
+
+#: usr/local/www/interfaces.php:2429 usr/local/www/interfaces.php:2630
+#: usr/local/www/interfaces.php:2618 usr/local/www/interfaces.php:2648
+#: usr/local/www/interfaces.php:2694 usr/local/www/interfaces.php:2683
+#: usr/local/www/interfaces.php:2719
+msgid "Bogons are prefixes that should never appear in the Internet routing table, and obviously should not appear as the source address in any packets you receive."
+msgstr "Bogons são prefixos que nunca devem aparecer na tabela de roteamento da Internet, e obviamente não devem aparecer como os endereços fonte de nenhum pacote que receber."
+
+#: usr/local/www/interfaces.php:2550 usr/local/www/interfaces.php:2559
+#: usr/local/www/interfaces.php:2752 usr/local/www/interfaces.php:2761
+#: usr/local/www/interfaces.php:2740 usr/local/www/interfaces.php:2749
+#: usr/local/www/interfaces.php:2774 usr/local/www/interfaces.php:2783
+#: usr/local/www/interfaces.php:2820 usr/local/www/interfaces.php:2829
+#: usr/local/www/interfaces.php:2806 usr/local/www/interfaces.php:2815
+#: usr/local/www/interfaces.php:2842 usr/local/www/interfaces.php:2851
+msgid "You can manage Gateways"
+msgstr "Você pode gerenciar Gateways"
+
+#: usr/local/www/interfaces_assign.php:43
+msgid "Assign network ports"
+msgstr "Atribuir portas de rede"
+
+#: usr/local/www/interfaces_assign.php:194
+#, php-format
+msgid "Port %1$s was assigned to %2$s interfaces:"
+msgstr "Porta %1$s foi atribuída para as interfaces %2$s:"
+
+#: usr/local/www/interfaces_assign.php:262
+#: usr/local/www/interfaces_assign.php:274
+msgid "The interface is part of a group. Please remove it from the group to continue"
+msgstr "A interface é parte de um grupo. Por favor, remova-a do grupo para continuar"
+
+#: usr/local/www/interfaces_assign.php:264
+#: usr/local/www/interfaces_assign.php:276
+msgid "The interface is part of a bridge. Please remove it from the bridge to continue"
+msgstr "A interface é parte de uma ponte. Por favor, remova-a da ponte para continuar"
+
+#: usr/local/www/interfaces_assign.php:266
+#: usr/local/www/interfaces_assign.php:278
+msgid "The interface is part of a gre tunnel. Please delete the tunnel to continue"
+msgstr "A interface é parte de um túnel gre. Por favor, remova o túnel para continuar"
+
+#: usr/local/www/interfaces_assign.php:268
+#: usr/local/www/interfaces_assign.php:280
+msgid "The interface is part of a gif tunnel. Please delete the tunnel to continue"
+msgstr "A interface é parte de um túnel gif. Por favor, remova o túnel para continuar"
+
+#: usr/local/www/interfaces_assign.php:318
+#: usr/local/www/interfaces_assign.php:312
+msgid "Interface has been deleted."
+msgstr "A Interface foi apagada."
+
+#: usr/local/www/interfaces_assign.php:325
+#: usr/local/www/interfaces_assign.php:319
+msgid "lan"
+msgstr "lan"
+
+#: usr/local/www/interfaces_assign.php:326
+#: usr/local/www/interfaces_assign.php:320
+msgid "LAN"
+msgstr "LAN"
+
+#: usr/local/www/interfaces_assign.php:366
+#: usr/local/www/interfaces_assign.php:360
+msgid "Interface has been added."
+msgstr "Uma Interface foi adicionada."
+
+#: usr/local/www/interfaces_assign.php:376
+#: usr/local/www/interfaces_assign.php:370
+msgid "The system is now rebooting. Please wait."
+msgstr "O sistema está reiniciando agora. Por favor, aguarde."
+
+#: usr/local/www/interfaces_assign.php:378
+#: usr/local/www/interfaces_assign.php:372
+msgid "Reboot is needed. Please apply the settings in order to reboot."
+msgstr "É necessário reiniciar. Por favor, aplique as configurações para reiniciar."
+
+#: usr/local/www/interfaces_assign.php:380
+#: usr/local/www/interfaces_assign.php:374
+msgid "Interface mismatch detected. Please resolve the mismatch and click Save. The firewall will reboot afterwards."
+msgstr "Detectado não correspondência de Interface. Por favor, resolva o problema e clique em Salvar. O firewall irá reiniciar em seguida."
+
+#: usr/local/www/interfaces_assign.php:390
+#: usr/local/www/interfaces_assign.php:384
+msgid "The interface configuration has been changed.<br>You must apply the changes in order for them to take effect."
+msgstr "A configuração da interface foi modificada.<br>Você deve aplicar as alterações para que elas tenham efeito."
+
+#: usr/local/www/interfaces_assign.php:421
+#: usr/local/www/interfaces_assign.php:415
+msgid "Network port"
+msgstr "Porta de rede"
+
+#: usr/local/www/interfaces_assign.php:437
+#: usr/local/www/interfaces_assign.php:431
+#, php-format
+msgid "VLAN %1$s on %2$s"
+msgstr "VLAN %1$s em %2$s"
+
+#: usr/local/www/interfaces_assign.php:480
+#: usr/local/www/interfaces_assign.php:474
+msgid "Do you really want to delete this interface?"
+msgstr "Você realmente deseja remover essa interface PPP?"
+
+#: usr/local/www/interfaces_assign.php:480
+#: usr/local/www/interfaces_assign.php:474
+msgid "delete interface"
+msgstr "remover interface"
+
+#: usr/local/www/interfaces_assign.php:489
+#: usr/local/www/interfaces_assign.php:483
+msgid "add interface"
+msgstr "adicionar interface"
+
+#: usr/local/www/interfaces_assign.php:506
+#: usr/local/www/interfaces_assign.php:500
+#: usr/local/www/interfaces_assign.php:504
+msgid "Interfaces that are configured as members of a lagg(4) interface will not be shown."
+msgstr "Interfaces que são configuradas como membros de uma interface lagg(4) não serão exibidos."
+
+#: usr/local/www/diag_pf_info.php:46
+msgid "Diagnostics: pfInfo"
+msgstr "Diagnósticos: pfInfo"
+
+#: usr/local/www/diag_pf_info.php:106 usr/local/www/diag_pf_info.php:103
+msgid "Gathering PF information, please wait..."
+msgstr "Coletando informações do PF, por favor aguarde..."
+
+#: usr/local/www/diag_smart.php:14
+msgid "S.M.A.R.T. Monitor Tools"
+msgstr "S.M.A.R.T. Ferramentas do monitor"
+
+#: usr/local/www/diag_smart.php:68 usr/local/www/diag_smart.php:73
+msgid "PASSED"
+msgstr "PERMITIDO"
+
+#: usr/local/www/diag_smart.php:69 usr/local/www/diag_smart.php:74
+msgid "FAILED"
+msgstr "FALHA"
+
+#: usr/local/www/diag_smart.php:70 usr/local/www/diag_smart.php:75
+msgid "Warning"
+msgstr "Atenção"
+
+#: usr/local/www/diag_smart.php:113 usr/local/www/diag_smart.php:413
+#: usr/local/www/diag_smart.php:126 usr/local/www/diag_smart.php:434
+msgid "Abort"
+msgstr "Abortar"
+
+#: usr/local/www/diag_smart.php:154 usr/local/www/diag_smart.php:175
+#, php-format
+msgid "Email sent to %s"
+msgstr "Email enviado para %s"
+
+#: usr/local/www/diag_smart.php:194 usr/local/www/diag_smart.php:266
+#: usr/local/www/diag_smart.php:215 usr/local/www/diag_smart.php:287
+msgid "Information/Tests"
+msgstr "Informação/Teste"
+
+#: usr/local/www/diag_smart.php:195 usr/local/www/diag_smart.php:206
+#: usr/local/www/diag_smart.php:216 usr/local/www/diag_smart.php:227
+msgid "Config"
+msgstr "Config"
+
+#: usr/local/www/diag_smart.php:209 usr/local/www/system_camanager.php:524
+#: usr/local/www/system_certmanager.php:617
+#: usr/local/www/system_certmanager.php:720
+#: usr/local/www/system_certmanager.php:733
+#: usr/local/www/system_certmanager.php:886
+#: usr/local/www/system_camanager.php:525
+#: usr/local/www/system_camanager.php:549 usr/local/www/diag_smart.php:230
+#: usr/local/www/system_certmanager.php:758
+#: usr/local/www/system_certmanager.php:928
+#: usr/local/www/system_certmanager.php:759
+#: usr/local/www/system_certmanager.php:932
+msgid "Email Address"
+msgstr "Endereço de email"
+
+#: usr/local/www/diag_smart.php:231 usr/local/www/diag_smart.php:252
+msgid "Test email"
+msgstr "Email teste"
+
+#: usr/local/www/diag_smart.php:236 usr/local/www/diag_smart.php:257
+#, php-format
+msgid "Send test email to %s"
+msgstr "Enviar email teste para %s"
+
+#: usr/local/www/diag_smart.php:278 usr/local/www/diag_smart.php:283
+#: usr/local/www/diag_smart.php:299 usr/local/www/diag_smart.php:304
+msgid "Info"
+msgstr "Informação"
+
+#: usr/local/www/diag_smart.php:281 usr/local/www/diag_smart.php:302
+msgid "Info type"
+msgstr "Tipo informação"
+
+#: usr/local/www/diag_smart.php:284 usr/local/www/diag_smart.php:305
+msgid "Health"
+msgstr "Saúde"
+
+#: usr/local/www/diag_smart.php:285 usr/local/www/diag_smart.php:306
+msgid "SMART Capabilities"
+msgstr "Capacidades do SMART"
+
+#: usr/local/www/diag_smart.php:286 usr/local/www/diag_smart.php:307
+msgid "Attributes"
+msgstr "Atributos"
+
+#: usr/local/www/diag_smart.php:287 usr/local/www/firewall_aliases.php:179
+#: usr/local/www/diag_smart.php:308 usr/local/www/firewall_aliases.php:177
+msgid "All"
+msgstr "Todos"
+
+#: usr/local/www/diag_smart.php:291 usr/local/www/diag_smart.php:330
+#: usr/local/www/diag_smart.php:367 usr/local/www/diag_smart.php:397
+#: usr/local/www/diag_smart.php:312 usr/local/www/diag_smart.php:351
+#: usr/local/www/diag_smart.php:388 usr/local/www/diag_smart.php:418
+msgid "Device: /dev/"
+msgstr "Serviço: /dev/"
+
+#: usr/local/www/diag_smart.php:307 usr/local/www/diag_smart.php:383
+#: usr/local/www/diag_smart.php:328 usr/local/www/diag_smart.php:404
+msgid "View"
+msgstr "Visualização"
+
+#: usr/local/www/diag_smart.php:318
+msgid "Perform Self Tests"
+msgstr "Realizar auto-testes"
+
+#: usr/local/www/diag_smart.php:321 usr/local/www/diag_smart.php:342
+msgid "Test type"
+msgstr "Tipo de teste"
+
+#: usr/local/www/diag_smart.php:323
+#: usr/local/www/status_gateway_groups.php:123
+#: usr/local/www/status_gateways.php:118
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60
+#: usr/local/www/status_gateways.php:119
+#: usr/local/www/status_gateway_groups.php:124
+#: usr/local/www/diag_smart.php:344
+msgid "Offline"
+msgstr "Desconectado"
+
+#: usr/local/www/diag_smart.php:324 usr/local/www/diag_smart.php:345
+msgid "Short"
+msgstr "Curto"
+
+#: usr/local/www/diag_smart.php:325 usr/local/www/diag_smart.php:346
+#: usr/local/www/diag_system_pftop.php:137
+msgid "Long"
+msgstr "Longo"
+
+#: usr/local/www/diag_smart.php:326 usr/local/www/diag_smart.php:347
+msgid "Conveyance (ATA Disks Only)"
+msgstr "Transporte (Somente Discos ATA)"
+
+#: usr/local/www/diag_smart.php:357 usr/local/www/diag_smart.php:378
+msgid "View Logs"
+msgstr "Visualizar Logs"
+
+#: usr/local/www/diag_smart.php:360 usr/local/www/diag_smart.php:381
+msgid "Log type"
+msgstr "Tipo de Log"
+
+#: usr/local/www/diag_smart.php:362 usr/local/www/diag_smart.php:383
+msgid "Error"
+msgstr "Erro"
+
+#: usr/local/www/diag_smart.php:363
+msgid "Self Test"
+msgstr "Auto-teste"
+
+#: usr/local/www/diag_smart.php:394 usr/local/www/diag_smart.php:415
+msgid "Abort tests"
+msgstr "Abortar testes"
+
+#: usr/local/www/diag_smart.php:413 usr/local/www/diag_smart.php:434
+msgid "Do you really want to abort the test?"
+msgstr "Você realmente deseja abortar o teste?"
+
+#: usr/local/www/diag_smart.php:428 usr/local/www/diag_smart.php:449
+msgid "Back"
+msgstr "Voltar"
+
+#: usr/local/www/diag_states_summary.php:154
+#: usr/local/www/diag_states_summary.php:143
+#: usr/local/www/diag_states_summary.php:145
+msgid "Src Ports"
+msgstr "Portas Src"
+
+#: usr/local/www/diag_states_summary.php:155
+#: usr/local/www/diag_states_summary.php:144
+#: usr/local/www/diag_states_summary.php:146
+msgid "Dst Ports"
+msgstr "Portas Dst"
+
+#: usr/local/www/diag_states_summary.php:185
+#: usr/local/www/diag_states_summary.php:174
+#: usr/local/www/diag_states_summary.php:176
+msgid "State Table Summary"
+msgstr "Resumo da Tabela de Estados"
+
+#: usr/local/www/diag_states_summary.php:191
+#: usr/local/www/diag_states_summary.php:180
+#: usr/local/www/diag_states_summary.php:182
+msgid "By Source IP"
+msgstr "Por IP de Origem"
+
+#: usr/local/www/diag_states_summary.php:192
+#: usr/local/www/diag_states_summary.php:181
+#: usr/local/www/diag_states_summary.php:183
+msgid "By Destination IP"
+msgstr "Por IP de Destino"
+
+#: usr/local/www/diag_states_summary.php:193
+#: usr/local/www/diag_states_summary.php:182
+#: usr/local/www/diag_states_summary.php:184
+msgid "Total per IP"
+msgstr "Total por IP"
+
+#: usr/local/www/diag_states_summary.php:194
+#: usr/local/www/diag_states_summary.php:183
+#: usr/local/www/diag_states_summary.php:185
+msgid "By IP Pair"
+msgstr "Por par de IP"
+
+#: usr/local/www/diag_system_activity.php:46
+msgid "Diagnostics: System Activity"
+msgstr "Diagnósticos: Atividade do Sistema"
+
+#: usr/local/www/diag_system_activity.php:101
+msgid "Gathering CPU activity, please wait..."
+msgstr "Coletando a atividade da CPU, por favor aguarde..."
+
+#: usr/local/www/diag_system_pftop.php:45
+msgid "Diagnostics: pfTop"
+msgstr "Diagnósticos: pfTop"
+
+#: usr/local/www/diag_system_pftop.php:51
+#: usr/local/www/diag_system_pftop.php:62
+#: usr/local/www/diag_system_pftop.php:103
+msgid "bytes"
+msgstr "bytes"
+
+#: usr/local/www/diag_system_pftop.php:99
+#: usr/local/www/diag_system_pftop.php:148
+msgid "Sort type:"
+msgstr "Tipo de classificação:"
+
+#: usr/local/www/diag_system_pftop.php:102
+msgid "age"
+msgstr "idade"
+
+#: usr/local/www/diag_system_pftop.php:104
+msgid "dest"
+msgstr "dest"
+
+#: usr/local/www/diag_system_pftop.php:105
+msgid "dport"
+msgstr "dport"
+
+#: usr/local/www/diag_system_pftop.php:106
+msgid "exp"
+msgstr "exp"
+
+#: usr/local/www/diag_system_pftop.php:108
+msgid "peak"
+msgstr "pico"
+
+#: usr/local/www/diag_system_pftop.php:109
+msgid "pkt"
+msgstr "pct"
+
+#: usr/local/www/diag_system_pftop.php:110
+#: usr/local/www/status_interfaces.php:365
+#: usr/local/www/status_interfaces.php:462
+#: usr/local/www/status_interfaces.php:465
+msgid "rate"
+msgstr "taxa"
+
+#: usr/local/www/diag_system_pftop.php:111
+msgid "size"
+msgstr "tamanho"
+
+#: usr/local/www/diag_system_pftop.php:112
+msgid "sport"
+msgstr "sport"
+
+#: usr/local/www/diag_system_pftop.php:113
+msgid "src"
+msgstr "src"
+
+#: usr/local/www/diag_system_pftop.php:126
+#: usr/local/www/diag_system_pftop.php:187
+msgid "Gathering pfTOP activity, please wait..."
+msgstr "Coletando atividade pfTOP, por favor aguarde..."
+
+#: usr/local/www/license.php:45
+msgid "License"
+msgstr "Licença"
+
+#: usr/local/www/license.php:47
+msgid "is Copyright"
+msgstr "tem Direito de Cópia"
+
+#: usr/local/www/license.php:47 usr/local/www/firewall_rules_edit.php:1585
+#: usr/local/www/firewall_rules_edit.php:1593
+#: usr/local/www/firewall_nat_edit.php:869
+#: usr/local/www/firewall_nat_edit.php:877
+#: usr/local/www/firewall_nat_out_edit.php:684
+#: usr/local/www/firewall_nat_out_edit.php:692
+#: usr/local/www/firewall_rules_edit.php:1596
+#: usr/local/www/firewall_rules_edit.php:1604
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_edit.php:878
+#: usr/local/www/firewall_rules_edit.php:1644
+#: usr/local/www/firewall_rules_edit.php:1652
+msgid "by"
+msgstr "por"
+
+#: usr/local/www/license.php:48 usr/local/www/license.php:52
+msgid "All rights reserved"
+msgstr "Todos os direitos reservados"
+
+#: usr/local/www/license.php:50
+msgid "m0n0wall is Copyright "
+msgstr "m0n0wall is Copyright "
+
+#: usr/local/www/license.php:50
+msgid "2002-2007 by Manuel Kasper"
+msgstr "2002-2007 por Manuel Kasper"
+
+#: usr/local/www/license.php:53
+msgid "Redistribution and use in source and binary forms, with or without"
+msgstr "Redistribuição e uso em forma de fonte e binários, com ou sem "
+
+#: usr/local/www/license.php:54
+msgid "modification, are permitted provided that the following conditions are met"
+msgstr "modificação, são permitidos desde que as seguintes condições sejam encontradas"
+
+#: usr/local/www/license.php:57
+msgid "1. Redistributions of source code must retain the above copyright notice,"
+msgstr "1. Redistribuições de código fonte devem conter a notificação de direitos de cópia acima, "
+
+#: usr/local/www/license.php:59
+msgid "this list of conditions and the following disclaimer"
+msgstr "essa lista de condições e os seguintes avisos legais"
+
+#: usr/local/www/license.php:61
+msgid "2. Redistributions in binary form must reproduce the above copyright"
+msgstr "2. Redistribuições em formato binário devem reproduzir a notificação de direitos"
+
+#: usr/local/www/license.php:62
+msgid "notice, this list of conditions and the following disclaimer in the"
+msgstr "de cópia acima, a lista de condições e os seguintes avisos legais na"
+
+#: usr/local/www/license.php:64
+msgid "documentation and/or other materials provided with the distribution."
+msgstr "documentação e/ou outros materiais fornecidos com a distribuição."
+
+#: usr/local/www/license.php:66
+msgid "THIS SOFTWARE IS PROVIDED "
+msgstr "ESSE SOFTWARE É FORNECIDO "
+
+#: usr/local/www/license.php:66
+msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,"
+msgstr "COMO APRESENTADO'' E QUALQUER GARANTIA EXPRESSA OU IMPLÃCITA,"
+
+#: usr/local/www/license.php:68
+msgid "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY"
+msgstr "INCLUINDO, MAS NÃO LIMITADO A, GARANTIAS IMPLÃCITAS DE COMÉRCIO"
+
+#: usr/local/www/license.php:69
+msgid "AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE"
+msgstr "E ADEQUAÇÃO PARA UM PROPÓSITO PARTICULAR SÃO REJEITADOS. EM NENHUM CASO O AUTOR"
+
+#: usr/local/www/license.php:71
+msgid "AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"
+msgstr "É RESPONSÃVEL POR QUALQUER DANO DIRETO, INDIRETO, INCIDENTAL, ESPECIAL, EXEMPLAR,"
+
+#: usr/local/www/license.php:73
+msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF"
+msgstr "OR POR CONSEQUÊNCIA (INCLUINDO, MAS NÃO LIMITADO A, PROCURAÇÃO PARA "
+
+#: usr/local/www/license.php:75
+msgid "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"
+msgstr "SUBSTITUIÇÃO DE BENS E SERVIÇOS; PERDA DE USO, DADOS, OU LUCROS; OU INTERRUPÇÃO"
+
+#: usr/local/www/license.php:77
+msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN"
+msgstr "DO NEGÓCIO) NO ENTANTO CAUSADO E A NENHUMA TEORIA DE RESPONSABILIDADE, QUER SEJA"
+
+#: usr/local/www/license.php:79
+msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"
+msgstr "EM CONTRATO, RESPONSABILITADE ESTRITA, OU AGRAVO (INCLUINDO NEGLIGÊNCIA OU DE OUTRA MANEIRA)"
+
+#: usr/local/www/license.php:80
+msgid "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE"
+msgstr "DECORRENTE DE QUALQUER USO DESSE SOFTWARE, MESMO SE ACONSELHADO"
+
+#: usr/local/www/license.php:82
+msgid "POSSIBILITY OF SUCH DAMAGE"
+msgstr "SOBRE A POSSIBILIDADE DE TAL DANO"
+
+#: usr/local/www/license.php:84
+msgid "The following persons have contributed code to m0n0wall"
+msgstr "As seguintes pessoas tem código contribuído no m0n0wall"
+
+#: usr/local/www/license.php:86
+msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder"
+msgstr "Diagnóstico: Função Ping; canal WLAN auto-selecionado; DNS forwarder"
+
+#: usr/local/www/license.php:90
+msgid "Timezone and NTP client support"
+msgstr "Fuso horário e suport a cliente NTP"
+
+#: usr/local/www/license.php:94
+msgid "Remote syslog'ing; some code bits for DHCP server on optional interfaces"
+msgstr "Geração de syslog remoto; alguns bits de código para servidor DHCP em interfaces opcionais"
+
+#: usr/local/www/license.php:98
+msgid "Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP agent"
+msgstr "Idéia/bits de código para senhas criptografadas do webConfigurator; agente SNMP minimizado"
+
+#: usr/local/www/license.php:102
+msgid "Advanced outbound NAT: destination selection"
+msgstr "Outbound NAT avançado: seleção de destino"
+
+#: usr/local/www/license.php:106
+msgid "Filtering bridge patches "
+msgstr "Patch de ponte de filtro"
+
+#: usr/local/www/license.php:110
+msgid "Filter rule patches (ordering, block/pass, disabled); better status page;"
+msgstr "Patches de regras de filtro (ordenação, bloqueio/liberação, desabilitado); melhor página de status;"
+
+#: usr/local/www/license.php:112
+msgid "webConfigurator assign network ports page "
+msgstr "webConfigurator atribui página de portas de rede "
+
+#: usr/local/www/license.php:115
+msgid "enhanced "
+msgstr "melhorado"
+
+#: usr/local/www/license.php:115
+msgid "execute command"
+msgstr "executar comando"
+
+#: usr/local/www/license.php:116
+msgid " page"
+msgstr " página"
+
+#: usr/local/www/license.php:119
+msgid "DHCP client: send hostname patch"
+msgstr "Cliente DHCP: envia patch de nome de host"
+
+#: usr/local/www/license.php:122
+msgid "DHCP lease list page"
+msgstr "Página de lista de concessões do DHCP"
+
+#: usr/local/www/license.php:125
+msgid "type filter rules; dial-on-demand"
+msgstr "digite regras de filtro; disque sob demanda"
+
+#: usr/local/www/license.php:128
+msgid "SVG-based traffic grapher"
+msgstr "Grafo de tráfego baseado em SVG"
+
+#: usr/local/www/license.php:131
+msgid "per-user IP address assignments for PPTP VPN"
+msgstr "endereços IP por usuário atribuídos para a VPN PPTP"
+
+#: usr/local/www/license.php:134
+msgid "NAT on optional interfaces"
+msgstr "NAT em interfaces opcionais"
+
+#: usr/local/www/license.php:137
+msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication"
+msgstr "portal captive: endereços MAC/IP pass-through, autenticação RADIUS"
+
+#: usr/local/www/license.php:137
+msgid "accounting;"
+msgstr "contabilitade;"
+
+#: usr/local/www/license.php:138
+msgid "HTTP server concurrency limit"
+msgstr "Limite de concorrência de servidor HTTP"
+
+#: usr/local/www/license.php:141
+msgid "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;"
+msgstr "correspondência do Traffic Shaper TOS; magic shaper; DHCP nega clientes desconhecidos;"
+
+#: usr/local/www/license.php:142
+msgid "IPsec user FQDNs; DHCP relay"
+msgstr "IPsec usuário FQDNs; DHCP relay"
+
+#: usr/local/www/license.php:145
+msgid "IDE hard disk standby"
+msgstr "Espera de disco rígido IDE"
+
+#: usr/local/www/license.php:148
+msgid "CPU/memory usage display"
+msgstr "Exibição de uso de CPU/memória"
+
+#: usr/local/www/license.php:151
+msgid "OpenVPN support"
+msgstr "Suporte a OpenVPN"
+
+#: usr/local/www/license.php:153
+msgid "is based upon/includes various free software packages, listed below."
+msgstr "é baseado em/inclui vários pacotes de software livres, listados abaixo."
+
+#: usr/local/www/license.php:155
+#, php-format
+msgid "The author of %s would like to thank the authors of these software packages for their efforts"
+msgstr "O autor de %s gostaria de agradecer aos autores desses pacotes de software pelo seu esforço"
+
+#: usr/local/www/license.php:158 usr/local/www/license.php:161
+#: usr/local/www/license.php:164 usr/local/www/license.php:168
+#: usr/local/www/license.php:174 usr/local/www/license.php:178
+#: usr/local/www/license.php:181 usr/local/www/license.php:184
+#: usr/local/www/license.php:187 usr/local/www/license.php:191
+#: usr/local/www/license.php:192 usr/local/www/license.php:194
+#: usr/local/www/license.php:200 usr/local/www/license.php:201
+#: usr/local/www/license.php:204 usr/local/www/license.php:211
+#: usr/local/www/license.php:169
+msgid "Copyright"
+msgstr "Direito de cópia"
+
+#: usr/local/www/license.php:158
+msgid " 1994-2003 FreeBSD, Inc. All rights reserved"
+msgstr " 1994-2003 FreeBSD, Inc. Todos os direitos reservados"
+
+#: usr/local/www/license.php:160
+msgid "This product includes PHP, freely available from"
+msgstr "Esse produto inclui PHP, disponível de graça por"
+
+#: usr/local/www/license.php:161
+msgid "1999 - 2003 The PHP Group. All rights reserved"
+msgstr "1999 - 2003 The PHP Group. Todos os direitos reservados"
+
+#: usr/local/www/license.php:163
+msgid "LightTPD"
+msgstr "LightTPD"
+
+#: usr/local/www/license.php:164
+msgid " 2004 by Jan Kneschke "
+msgstr " 2004 por Jan Kneschke "
+
+#: usr/local/www/license.php:165 usr/local/www/license.php:175
+msgid "All rights reserved."
+msgstr "Todos os direitos reservados."
+
+#: usr/local/www/license.php:167
+msgid "ISC DHCP server "
+msgstr "Servidor ISC DHCP "
+
+#: usr/local/www/license.php:168
+msgid "1996-2003 Internet Software Consortium. All rights reserved."
+msgstr "1996-2003 Internet Software Consortium. Todos os direitos reservados."
+
+#: usr/local/www/license.php:173
+msgid "MPD - Multi-link PPP daemon for FreeBSD"
+msgstr "MDP - daemon PPP Multi-link para FreeBSSD"
+
+#: usr/local/www/license.php:177
+msgid "Circular log support for FreeBSD syslogd "
+msgstr "Suporte de log circular para syslodg do FreeBSD"
+
+#: usr/local/www/license.php:180
+msgid "Dnsmasq - a DNS forwarder for NAT firewalls"
+msgstr "Dnsmasq - um DNS forwarder para firewalls NAT"
+
+#: usr/local/www/license.php:183
+msgid "Racoon"
+msgstr "Racoon"
+
+#: usr/local/www/license.php:184
+msgid "1995-2002 WIDE Project. All rights reserved."
+msgstr "1995-2002 WIDE Project. Todos os direitos reservados."
+
+#: usr/local/www/license.php:186
+msgid "msntp"
+msgstr "msntp"
+
+#: usr/local/www/license.php:187
+msgid " 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights reserved."
+msgstr " 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. Todos os direitos reservados."
+
+#: usr/local/www/license.php:190
+msgid "UCD-SNMP"
+msgstr "UCD-SNMP"
+
+#: usr/local/www/license.php:191
+msgid "1989, 1991, 1992 by Carnegie Mellon University."
+msgstr "1989, 1991, 1992 by Carnegie Mellon University."
+
+#: usr/local/www/license.php:192
+msgid "1996, 1998-2000 The Regents of the University of California. All rights reserved"
+msgstr "1996, 1998-2000 The Regents of the University of California. Todos os direitos reservados"
+
+#: usr/local/www/license.php:194
+msgid "2001-2002, Network Associates Technology, Inc. All rights reserved."
+msgstr "2001-2002, Network Associates Technology, Inc. Todos os direitos reservados."
+
+#: usr/local/www/license.php:196
+msgid "Portions of this code are copyright"
+msgstr "Porções desse código tem direitos de cópia"
+
+#: usr/local/www/license.php:196
+msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved."
+msgstr "2001-2002, Cambridge Broadband Ltd. Todos os direitos reservados."
+
+#: usr/local/www/license.php:199
+msgid "choparp"
+msgstr "choparp"
+
+#: usr/local/www/license.php:203
+msgid "BPALogin"
+msgstr "BPALogin"
+
+#: usr/local/www/license.php:203
+msgid "lightweight portable BIDS2 login client"
+msgstr "cliente de login BIDS2 leve e portável"
+
+#: usr/local/www/license.php:204
+msgid " 2001-3 Shane Hyde, and others."
+msgstr " 2001-3 Shane Hyde, e outros."
+
+#: usr/local/www/license.php:206
+msgid "php-radius"
+msgstr "php-radius"
+
+#: usr/local/www/license.php:207
+msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved."
+msgstr "Direito de cópia 2000, 2001, 2002 por Edwin Groothuis. Todos os direitos reservados."
+
+#: usr/local/www/license.php:208
+msgid "This product includes software developed by Edwin Groothuis."
+msgstr "Esse produto inclui software desenvolvido por Edwin Groothuis."
+
+#: usr/local/www/license.php:210
+msgid "wol"
+msgstr "wol"
+
+#: usr/local/www/license.php:214
+msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC "
+msgstr "Direito de cópia (C) 2002-2005 OpenVPN Solutions LLC "
+
+#: usr/local/www/load_balancer_pool.php:72
+#: usr/local/www/load_balancer_relay_protocol.php:71
+msgid "This entry cannot be deleted because it is still referenced by at least one virtual server."
+msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um servidor virtual."
+
+#: usr/local/www/load_balancer_pool.php:111
+#: usr/local/www/status_lb_pool.php:113
+#: usr/local/www/load_balancer_pool.php:109
+#, php-format
+msgid "The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect."
+msgstr "A configuração do balanceador de carga foi modificada%sVocê deve aplicar as mudanças para que elas tenham efeito."
+
+#: usr/local/www/load_balancer_pool.php:133
+#: usr/local/www/status_lb_pool.php:132 usr/local/www/status_lb_vs.php:79
+#: usr/local/www/system_authservers.php:424
+#: usr/local/www/system_groupmanager.php:243
+#: usr/local/www/system_groupmanager_addprivs.php:171
+#: usr/local/www/system_usermanager.php:443
+#: usr/local/www/system_usermanager_addprivs.php:170
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/system_usermanager.php:441
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool.php:132
+#: usr/local/www/system_authservers.php:429
+#: usr/local/www/system_authservers.php:436
+#: usr/local/www/system_usermanager_settings.php:118
+#: usr/local/www/system_groupmanager.php:246
+#: usr/local/www/system_authservers.php:447
+msgid "Servers"
+msgstr "Servidores"
+
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/load_balancer_monitor.php:88
+#: usr/local/www/load_balancer_monitor_edit.php:193
+#: usr/local/www/load_balancer_pool_edit.php:76
+#: usr/local/www/load_balancer_pool_edit.php:223
+#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:133
+#: usr/local/www/load_balancer_pool_edit.php:240
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/status_gateways.php:75
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/load_balancer_pool.php:134
+msgid "Monitor"
+msgstr "Monitor"
+
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/load_balancer_pool.php:148
+#, php-format
+msgid "The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For load balancing or failover for multiple WANs, use "
+msgstr "O Load Balancer em %s 2.0 é para balanceamento de carga do servidor, não Multi-WAN. Para balanceamento de carga ou failover para WANs múltiplas, use"
+
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/status_gateway_groups.php:48
+#: usr/local/www/status_gateway_groups.php:52
+#: usr/local/www/status_gateways.php:63
+#: usr/local/www/system_gateway_groups.php:52
+#: usr/local/www/system_gateway_groups.php:88
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/load_balancer_pool.php:151
+#: usr/local/www/system_gateway_groups.php:89
+#: usr/local/www/status_gateways.php:64
+#: usr/local/www/status_gateway_groups.php:66
+#: usr/local/www/load_balancer_pool.php:149
+#: usr/local/www/system_gateway_groups.php:53
+#: usr/local/www/system_gateway_groups.php:98
+msgid "Gateway Groups"
+msgstr "Grupos de Gateway"
+
+#: usr/local/www/pkg.php:358 usr/local/www/pkg.php:456
+msgid "Do you really want to delete this item?"
+msgstr "Você realmente deseja apagar esse item?"
+
+#: usr/local/www/status_wireless.php:83 usr/local/www/status_wireless.php:84
+msgid "Rescan has been initiated in the background. Refresh this page in 10 seconds to see the results."
+msgstr "Rescan foi iniciado em background. Atualize essa página em 10 segundos para ver os resultados."
+
+#: usr/local/www/status_wireless.php:97 usr/local/www/status_wireless.php:93
+#: usr/local/www/status_wireless.php:94
+msgid "Nearby access points or ad-hoc peers"
+msgstr "Pontos de acesso próximos ou peers ad-hoc"
+
+#: usr/local/www/status_wireless.php:143 usr/local/www/status_wireless.php:140
+#: usr/local/www/status_wireless.php:141
+msgid "Associated or ad-hoc peers"
+msgstr "Associados ou peers ad-hoc"
+
+#: usr/local/www/system.php:118 usr/local/www/system.php:119
+#: usr/local/www/system.php:112
+msgid "The hostname may only contain the characters a-z, 0-9 and '-'."
+msgstr "O nome do host somente pode conter os caracteres de a-z, 0-9 e '-'."
+
+#: usr/local/www/system.php:121 usr/local/www/system.php:122
+#: usr/local/www/system.php:115
+msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr "O domínio somente pode conter os caracteres de a-z, 0-9, '-' e '.'."
+
+#: usr/local/www/system.php:131
+msgid "'."
+msgstr "'."
+
+#: usr/local/www/system.php:137 usr/local/www/system.php:143
+#: usr/local/www/system.php:136
+msgid "A valid TCP/IP port must be specified for the webConfigurator port."
+msgstr "Uma porta TCP/IP válida deve ser especificada com a porta do webConfigurator."
+
+#: usr/local/www/system.php:148 usr/local/www/system.php:154
+#: usr/local/www/system.php:147
+#, php-format
+msgid "You can not assign a gateway to DNS '%s' server which is on a directly connected network."
+msgstr "Você não pode atribuir um gateway para o servidor DNS '%s' que está em uma rede diretamente conectada."
+
+#: usr/local/www/system.php:157 usr/local/www/system.php:163
+#: usr/local/www/system.php:156
+msgid "The time update interval must be either 0 (disabled) or between 6 and 1440."
+msgstr "O intervalo de atualização deve ser 0 (desabilitado) ou entre 6 e 1440."
+
+#: usr/local/www/system.php:161 usr/local/www/system.php:167
+#: usr/local/www/system.php:160
+msgid "A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr "O nome do Servidor de Tempo NTP somente pode conter caracteres de a-z, 0-9, '-' e '.'."
+
+#: usr/local/www/system.php:231 usr/local/www/fbegin.inc:85
+#: usr/local/www/fbegin.inc:101 usr/local/www/system.php:242
+#: usr/local/www/fbegin.inc:110 usr/local/www/system.php:235
+#: usr/local/www/fbegin.inc:102
+msgid "General Setup"
+msgstr "Configuração Geral"
+
+#: usr/local/www/system.php:258 usr/local/www/system.php:269
+#: usr/local/www/system.php:262
+msgid "Name of the firewall host, without domain part"
+msgstr "Nome do host do firewall, sem a parte de domínio"
+
+#: usr/local/www/system.php:269 usr/local/www/system.php:280
+#: usr/local/www/system.php:273
+msgid "Do not use 'local' as a domain name. It will cause local hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."
+msgstr "Não use 'local' como um nome de domínio. Isso fará com que host locais que executam mDNS (avahi, bonjour, etc.) fiquem impossibilitados de resolver hosts locais que não executam mDNS."
+
+#: usr/local/www/system.php:271 usr/local/www/system.php:282
+#: usr/local/www/system.php:275
+msgid "mycorp.com, home, office, private, etc."
+msgstr "mycorp.com, casa, escritório, casa, etc."
+
+#: usr/local/www/system.php:276 usr/local/www/services_dhcp.php:647
+#: usr/local/www/vpn_pppoe_edit.php:451 usr/local/www/services_dhcpv6.php:590
+#: usr/local/www/services_dhcp.php:660 usr/local/www/system.php:287
+#: usr/local/www/services_dhcpv6.php:667 usr/local/www/vpn_pppoe_edit.php:452
+#: usr/local/www/services_router_advertisements.php:372
+#: usr/local/www/services_dhcp.php:836 usr/local/www/system.php:280
+#: usr/local/www/services_dhcpv6.php:598
+#: usr/local/www/services_dhcp_edit.php:402
+#: usr/local/www/vpn_pppoe_edit.php:455 usr/local/www/services_dhcp.php:850
+#: usr/local/www/services_dhcpv6.php:615
+#: usr/local/www/services_router_advertisements.php:367
+#: usr/local/www/services_dhcp.php:870 usr/local/www/services_dhcp.php:882
+msgid "DNS servers"
+msgstr "Servidores DNS"
+
+#: usr/local/www/system.php:281 usr/local/www/system.php:292
+#: usr/local/www/system.php:285
+msgid "DNS Server"
+msgstr "Servidor DNS"
+
+#: usr/local/www/system.php:283 usr/local/www/system.php:294
+#: usr/local/www/system.php:287
+msgid "Use gateway"
+msgstr "Usar gateway"
+
+#: usr/local/www/system.php:331 usr/local/www/system.php:342
+#: usr/local/www/system.php:335 usr/local/www/system.php:334
+msgid "Enter IP addresses to by used by the system for DNS resolution.These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+msgstr "Digite os endereços IP usados pelo sistema para resolução de DNS. Eles também são usados para o serviço de DHCP, DNS Forwarder e para clientes VPN PPTP."
+
+#: usr/local/www/system.php:336 usr/local/www/system.php:347
+#: usr/local/www/system.php:340 usr/local/www/system.php:339
+msgid "In addition, optionally select the gateway for each DNS server. When using multiple WAN connections there should be at least one unique DNS server per gateway."
+msgstr "Além disso, opcionalmente selecione o gateway para cada servidor DNS. Quando usando múltiplas conexões WAN deverá haver pelo menos um único servidor DNS por gateway."
+
+#: usr/local/www/system.php:343 usr/local/www/system.php:354
+#: usr/local/www/system.php:347 usr/local/www/system.php:346
+msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN"
+msgstr "Permite que a lista de servidores DNS seja substituída pelo DHCP/PPP na WAN"
+
+#: usr/local/www/system.php:346 usr/local/www/system.php:357
+#: usr/local/www/system.php:350 usr/local/www/system.php:349
+#, php-format
+msgid "If this option is set, %s will use DNS servers assigned by a DHCP/PPP server on WAN for its own purposes (including the DNS forwarder). However, they will not be assigned to DHCP and PPTP VPN clients."
+msgstr "Se essa opção estiver configurada, %s irá usar servidores DNS atribuídos para um servidor DHCP/PPP na WAN para seus próprios propósitos (incluindo o DNS forwarder). No entanto, eles serão atribuídos a clientes DHCP e PPTP VPN."
+
+#: usr/local/www/system.php:355 usr/local/www/system.php:366
+#: usr/local/www/system.php:359 usr/local/www/system.php:358
+msgid "Do not use the DNS Forwarder as a DNS server for the firewall"
+msgstr "Não utilize o DNS Forwarder como um servidor DNS para o firewall"
+
+#: usr/local/www/system.php:358 usr/local/www/system.php:369
+#: usr/local/www/system.php:362 usr/local/www/system.php:361
+msgid "By default localhost (127.0.0.1) will be used as the first DNS server where the DNS forwarder is enabled, so system can use the DNS forwarder to perform lookups. Checking this box omits localhost from the list of DNS servers."
+msgstr "Por padrão localhost (127.0.0.1) será usado como o primeiro servidor DNS onde o encaminhador DNS está habilitado, então o sistema pode usar o encaminhador DNS para fazer buscas. Marcar essa opção omite o localhost da lista de servidores DNS."
+
+#: usr/local/www/system.php:365 usr/local/www/system.php:376
+#: usr/local/www/system.php:369 usr/local/www/system.php:367
+msgid "Time zone"
+msgstr "Fuso horário"
+
+#: usr/local/www/system.php:377 usr/local/www/system.php:388
+#: usr/local/www/system.php:381 usr/local/www/system.php:379
+msgid "Select the location closest to you"
+msgstr "Selecione a localização mais próxima de você"
+
+#: usr/local/www/system.php:395 usr/local/www/system.php:406
+#: usr/local/www/system.php:399 usr/local/www/system.php:397
+msgid "NTP time server"
+msgstr "Servidor NTP"
+
+#: usr/local/www/system.php:400 usr/local/www/system.php:411
+#: usr/local/www/system.php:404 usr/local/www/system.php:402
+msgid "Use a space to separate multiple hosts (only one required). Remember to set up at least one DNS server if you enter a host name here!"
+msgstr "Use um espaço para separar múltiplos hosts (somente um é necessário). Lembre-se de configurar pelo menos um servidor DNS se você informar um nome de host aqui!"
+
+#: usr/local/www/system.php:411 usr/local/www/system.php:440
+#: usr/local/www/system.php:433 usr/local/www/system.php:431
+msgid "Theme"
+msgstr "Tema"
+
+#: usr/local/www/system.php:435 usr/local/www/system.php:464
+#: usr/local/www/system.php:457 usr/local/www/system.php:455
+msgid "This will change the look and feel of"
+msgstr "Isso irá modificar a aparência de "
+
+#: usr/local/www/interfaces_vlan.php:65 usr/local/www/interfaces_vlan.php:69
+msgid "This VLAN cannot be deleted because it is still being used as an interface."
+msgstr "Essa VLAN não pode ser apagada porque ela ainda está sendo usada como uma interface."
+
+#: usr/local/www/interfaces_vlan.php:78
+#: usr/local/www/interfaces_vlan_edit.php:139
+#: usr/local/www/interfaces_vlan_edit.php:142
+#: usr/local/www/interfaces_vlan.php:84
+msgid "VLAN"
+msgstr "VLAN"
+
+#: usr/local/www/interfaces_vlan.php:109
+#: usr/local/www/interfaces_vlan_edit.php:75
+#: usr/local/www/interfaces_vlan.php:110 usr/local/www/interfaces_vlan.php:116
+msgid "VLAN tag"
+msgstr "Tag VLAN"
+
+#: usr/local/www/interfaces_vlan.php:125 usr/local/www/interfaces_vlan.php:126
+#: usr/local/www/interfaces_vlan.php:132
+msgid "Do you really want to delete this VLAN?"
+msgstr "Você realmente deseja apagar essa VLAN?"
+
+#: usr/local/www/interfaces_vlan.php:136 usr/local/www/interfaces_vlan.php:137
+#: usr/local/www/interfaces_vlan.php:143
+#, php-format
+msgid "Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do not explicitly support it, VLAN tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."
+msgstr "Nem todos os drivers/NICs suportam tags 802.1Q apropriadamente. Em cartões que não explicitam que a suportam, tags VLAN ainda funcionarão, mas um MTU reduzido pode causar problemas. Veja o livro %s para informações sobre cartões que oferecem este tipo de suporte."
+
+#: usr/local/www/interfaces_vlan_edit.php:80
+msgid "The VLAN tag must be an integer between 1 and 4094."
+msgstr "A tag VLAN deve ser um inteiro entre 1 e 4094."
+
+#: usr/local/www/interfaces_vlan_edit.php:88
+#: usr/local/www/interfaces_vlan_edit.php:91
+#, php-format
+msgid "A VLAN with the tag %s is already defined on this interface."
+msgstr "A VLAN com a tag %s já foi definida nessa interface."
+
+#: usr/local/www/interfaces_vlan_edit.php:95
+#: usr/local/www/interfaces_vlan_edit.php:98
+msgid "A QinQ VLAN exists with this tag please remove it to use this tag with."
+msgstr "Uma VLAN QinQ existe com essa tag, por favor, remova-a para usar essa tag."
+
+#: usr/local/www/interfaces_vlan_edit.php:150
+#: usr/local/www/interfaces_vlan_edit.php:151
+#: usr/local/www/interfaces_vlan_edit.php:154
+msgid "VLAN configuration"
+msgstr "Configuração VLAN"
+
+#: usr/local/www/interfaces_vlan_edit.php:169
+#: usr/local/www/interfaces_vlan_edit.php:170
+#: usr/local/www/interfaces_vlan_edit.php:173
+msgid "Only VLAN capable interfaces will be shown."
+msgstr "Somente interfaces que suportam VLAN serão exibidas."
+
+#: usr/local/www/interfaces_vlan_edit.php:172
+#: usr/local/www/interfaces_vlan_edit.php:173
+#: usr/local/www/interfaces_vlan_edit.php:176
+msgid "VLAN tag "
+msgstr "Tag VLAN"
+
+#: usr/local/www/interfaces_vlan_edit.php:176
+#: usr/local/www/interfaces_vlan_edit.php:177
+#: usr/local/www/interfaces_vlan_edit.php:180
+msgid "802.1Q VLAN tag (between 1 and 4094) "
+msgstr "Tag VLAN 802.1Q (entre 1 e 4094)"
+
+#: usr/local/www/system_firmware.php:82 usr/local/www/system_firmware.php:89
+#: usr/local/www/system_firmware.php:88
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "O arquivo carregado excede a diretiva upload_max_filesize em php.ini"
+
+#: usr/local/www/system_firmware.php:84 usr/local/www/system_firmware.php:91
+#: usr/local/www/system_firmware.php:90
+msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
+msgstr "O arquivo carregado excede a diretiva MAX_FILE_SIZE que foi especificado no formulário HTML"
+
+#: usr/local/www/system_firmware.php:86 usr/local/www/system_firmware.php:93
+#: usr/local/www/system_firmware.php:92
+msgid "The uploaded file was only partially uploaded"
+msgstr "O arquivo carregado foi somente carregado parcialmente"
+
+#: usr/local/www/system_firmware.php:88 usr/local/www/system_firmware.php:95
+#: usr/local/www/system_firmware.php:94
+msgid "No file was uploaded"
+msgstr "Nenhum arquivo foi carregado"
+
+#: usr/local/www/system_firmware.php:90 usr/local/www/system_firmware.php:97
+#: usr/local/www/system_firmware.php:96
+msgid "Missing a temporary folder"
+msgstr "Uma pasta temporária está faltando"
+
+#: usr/local/www/system_firmware.php:92 usr/local/www/system_firmware.php:99
+#: usr/local/www/system_firmware.php:98
+msgid "Failed to write file to disk"
+msgstr "Falhou ao escrever um arquivo no disco"
+
+#: usr/local/www/system_firmware.php:94 usr/local/www/system_firmware.php:101
+#: usr/local/www/system_firmware.php:100
+msgid "File upload stopped by extension"
+msgstr "Carregamento de arquivo interrompido pela extensão"
+
+#: usr/local/www/system_firmware.php:96 usr/local/www/system_firmware.php:103
+#: usr/local/www/system_firmware.php:102
+msgid "Unknown upload error"
+msgstr "Erro de carregamento desconhecido"
+
+#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_settings.php:74 usr/local/www/fbegin.inc:84
+#: usr/local/www/fbegin.inc:100 usr/local/www/fbegin.inc:109
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:210
+#: usr/local/www/system_firmware_settings.php:79
+#: usr/local/www/system_firmware.php:108 usr/local/www/fbegin.inc:101
+#: usr/local/www/system_firmware_auto.php:61
+msgid "Firmware"
+msgstr "Firmware"
+
+#: usr/local/www/system_firmware.php:102 usr/local/www/system_firmware.php:238
+#: usr/local/www/system_firmware_auto.php:79
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_settings.php:110
+#: usr/local/www/system_firmware_restorefullbackup.php:125
+#: usr/local/www/system_firmware.php:109 usr/local/www/system_firmware.php:245
+#: usr/local/www/system_firmware_settings.php:115
+#: usr/local/www/system_firmware.php:108 usr/local/www/system_firmware.php:248
+#: usr/local/www/system_firmware_check.php:64
+#: usr/local/www/system_firmware_settings.php:117
+#: usr/local/www/system_firmware_auto.php:80
+msgid "Manual Update"
+msgstr "Atualização Manual"
+
+#: usr/local/www/system_firmware.php:107 usr/local/www/system_firmware.php:114
+#: usr/local/www/system_firmware.php:113
+msgid "An upgrade is currently in progress.<p>The firewall will reboot when the operation is complete."
+msgstr "Uma atualização está atualmente em progresso.<p>O firewall irá reiniciar quando a operação for completada."
+
+#: usr/local/www/system_firmware.php:135 usr/local/www/system_firmware.php:142
+#: usr/local/www/system_firmware.php:137
+msgid "Upgrade"
+msgstr "Atualização"
+
+#: usr/local/www/system_firmware.php:154 usr/local/www/system_firmware.php:161
+#: usr/local/www/system_firmware.php:156
+msgid "The uploaded image file is not for this platform."
+msgstr "O arquivo de imagem carregado não é dessa plataforma."
+
+#: usr/local/www/system_firmware.php:157 usr/local/www/system_firmware.php:164
+#: usr/local/www/system_firmware.php:159
+msgid "Image upload failed (out of memory?)"
+msgstr "Carregamento de imagem falhou (falta de memória?)"
+
+#: usr/local/www/system_firmware.php:168
+#: usr/local/www/system_firmware_auto.php:201
+#: usr/local/www/system_firmware.php:175 usr/local/www/system_firmware.php:170
+#: usr/local/www/system_firmware_auto.php:203
+#: usr/local/www/system_firmware_auto.php:199
+msgid "The digital signature on this image is invalid."
+msgstr "A assinatura digital nessa imagem é inválida."
+
+#: usr/local/www/system_firmware.php:170
+#: usr/local/www/system_firmware_auto.php:204
+#: usr/local/www/system_firmware.php:177 usr/local/www/system_firmware.php:172
+#: usr/local/www/system_firmware_auto.php:206
+#: usr/local/www/system_firmware_auto.php:202
+msgid "This image is not digitally signed."
+msgstr "Essa imagem não está assinada digitalmente."
+
+#: usr/local/www/system_firmware.php:172
+#: usr/local/www/system_firmware_auto.php:208
+#: usr/local/www/system_firmware.php:179 usr/local/www/system_firmware.php:174
+#: usr/local/www/system_firmware_auto.php:210
+#: usr/local/www/system_firmware_auto.php:206
+msgid "There has been an error verifying the signature on this image."
+msgstr "Ocorreu um erro verificando a assinatura nessa imagem."
+
+#: usr/local/www/system_firmware.php:175
+#: usr/local/www/system_firmware_auto.php:223
+#: usr/local/www/system_firmware.php:182 usr/local/www/system_firmware.php:177
+#: usr/local/www/system_firmware_auto.php:225
+#: usr/local/www/system_firmware_auto.php:221
+msgid "The image file is corrupt."
+msgstr "O arquivo de imagem está corrompido."
+
+#: usr/local/www/system_firmware.php:188 usr/local/www/system_firmware.php:195
+#: usr/local/www/system_firmware.php:190
+msgid "The firmware is now being updated. The firewall will reboot automatically."
+msgstr "O firmware está sendo atualizado. O firewall irá reiniciar automaticamente."
+
+#: usr/local/www/system_firmware.php:196 usr/local/www/system_firmware.php:203
+#: usr/local/www/system_firmware.php:204
+#, php-format
+msgid "Firmware image missing or other error, please try again %s."
+msgstr "A imagem de firmware não foi encontrada ou trata-se de outro erro; por favor, tente novamente %s."
+
+#: usr/local/www/system_firmware.php:220 usr/local/www/system_firmware.php:227
+#: usr/local/www/system_firmware.php:230
+msgid "This means that the image you uploaded is not an official/supported image and may lead to unexpected behavior or security compromises. Only install images that come from sources that you trust, and make sure that the image has not been tampered with."
+msgstr "Isso significa que a imagem que você carregou não é uma imagem oficial/suportada e mode levar a um comportamento inesperado ou comprometimento de segurança. Somente instale imagens que vem de fontes que você confia, e tenha certeza de que a imagem não foi adulterada."
+
+#: usr/local/www/system_firmware.php:224 usr/local/www/system_firmware.php:231
+#: usr/local/www/system_firmware.php:234
+msgid "Do you want to install this image anyway (on your own risk)?"
+msgstr "Você deseja instalar essa imagem mesmo assim (por sua conta e risco)?"
+
+#: usr/local/www/system_firmware.php:239
+#: usr/local/www/system_firmware_auto.php:60
+#: usr/local/www/system_firmware_auto.php:80
+#: usr/local/www/system_firmware_check.php:49
+#: usr/local/www/system_firmware_check.php:67
+#: usr/local/www/system_firmware_settings.php:111
+#: usr/local/www/system_firmware_restorefullbackup.php:126
+#: usr/local/www/system_firmware.php:246
+#: usr/local/www/system_firmware_settings.php:116
+#: usr/local/www/system_firmware.php:249
+#: usr/local/www/system_firmware_check.php:65
+#: usr/local/www/system_firmware_settings.php:118
+#: usr/local/www/system_firmware_auto.php:61
+#: usr/local/www/system_firmware_auto.php:81
+msgid "Auto Update"
+msgstr "Auto-Atualização"
+
+#: usr/local/www/system_firmware.php:240
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware_check.php:68
+#: usr/local/www/system_firmware_settings.php:112
+#: usr/local/www/system_firmware_restorefullbackup.php:127
+#: usr/local/www/system_firmware.php:247
+#: usr/local/www/system_firmware_settings.php:117
+#: usr/local/www/system_firmware.php:250
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_settings.php:119
+#: usr/local/www/system_firmware_auto.php:82
+msgid "Updater Settings"
+msgstr "Configurações de Atualizador"
+
+#: usr/local/www/system_firmware.php:242
+#: usr/local/www/system_firmware_auto.php:83
+#: usr/local/www/system_firmware_check.php:70
+#: usr/local/www/system_firmware_settings.php:114
+#: usr/local/www/system_firmware_restorefullbackup.php:129
+#: usr/local/www/system_firmware.php:249
+#: usr/local/www/system_firmware_settings.php:119
+#: usr/local/www/system_firmware.php:252
+#: usr/local/www/system_firmware_check.php:68
+#: usr/local/www/system_firmware_settings.php:121
+#: usr/local/www/system_firmware_auto.php:84
+msgid "Restore Full Backup"
+msgstr "Restaura o backup compelto"
+
+#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259
+#: usr/local/www/system_firmware.php:262
+msgid "Invoke"
+msgstr "Invocar"
+
+#: usr/local/www/system_firmware.php:252 usr/local/www/system_firmware.php:259
+#: usr/local/www/system_firmware.php:262
+msgid "Manual Upgrade"
+msgstr "Atualização Manual"
+
+#: usr/local/www/system_firmware.php:259 usr/local/www/system_firmware.php:266
+#: usr/local/www/system_firmware.php:269
+msgid "Enable firmware upload"
+msgstr "Habilitar carregamento de firmware"
+
+#: usr/local/www/system_firmware.php:261 usr/local/www/system_firmware.php:268
+#: usr/local/www/system_firmware.php:271
+#, php-format
+msgid "Click \"Enable firmware upload\" to begin."
+msgstr "Clique em \"Habilitar atualização de firmware\" para começar."
+
+#: usr/local/www/system_firmware.php:264 usr/local/www/system_firmware.php:271
+#: usr/local/www/system_firmware.php:274
+msgid "Disable firmware upload"
+msgstr "Desabilitar carregamento de firmware"
+
+#: usr/local/www/system_firmware.php:282 usr/local/www/system_firmware.php:289
+#: usr/local/www/system_firmware.php:292
+msgid "Please select kernel type"
+msgstr "Por favor, selecione o tipo de kernel"
+
+#: usr/local/www/system_firmware.php:284 usr/local/www/system_firmware.php:55
+msgid "Multiprocessor kernel"
+msgstr "Kernel Multiprocessador"
+
+#: usr/local/www/system_firmware.php:285 usr/local/www/system_firmware.php:56
+msgid "Uniprocessor kernel"
+msgstr "Kernel Uniprocessador"
+
+#: usr/local/www/system_firmware.php:286 usr/local/www/system_firmware.php:57
+msgid "Embedded kernel"
+msgstr "Kernel embutido"
+
+#: usr/local/www/system_firmware.php:287 usr/local/www/system_firmware.php:58
+msgid "Developers kernel"
+msgstr "Kernel de desenvolvedores"
+
+#: usr/local/www/system_firmware.php:298
+#: usr/local/www/system_firmware_check.php:103
+#: usr/local/www/system_firmware.php:304 usr/local/www/system_firmware.php:303
+#: usr/local/www/system_firmware_check.php:104
+#: usr/local/www/system_firmware_check.php:98
+msgid "Perform full backup prior to upgrade"
+msgstr "Realizar backup completo antes da atualização"
+
+#: usr/local/www/system_firmware.php:300 usr/local/www/system_firmware.php:306
+msgid "Upgrade firmware"
+msgstr "Atualizar firmware"
+
+#: usr/local/www/system_firmware.php:301 usr/local/www/system_firmware.php:307
+msgid "Click \"Upgrade firmware\" to start the upgrade process."
+msgstr "Clique em \"Atualizar firmware\" para iniciar o processo de atualização."
+
+#: usr/local/www/system_firmware.php:303 usr/local/www/system_firmware.php:309
+msgid "You must reboot the system before you can upgrade the firmware."
+msgstr "Você deve reiniciar o sistema antes que possa atualizar o firmware."
+
+#: usr/local/www/system_firmware.php:316 usr/local/www/system_firmware.php:322
+#: usr/local/www/system_firmware.php:320
+msgid "Warning:"
+msgstr "Advertência:"
+
+#: usr/local/www/system_firmware.php:319 usr/local/www/system_firmware.php:325
+#: usr/local/www/system_firmware.php:323
+msgid "DO NOT abort the firmware upgrade once it has started. The firewall will reboot automatically after storing the new firmware. The configuration will be maintained."
+msgstr "NÃO aborde a atualização do firmware uma vez que a iniciou. O firewall irá reiniciar automaticamente após armazenar um novo firmware. A configuração será mantida."
+
+#: usr/local/www/system_firmware_auto.php:115
+#: usr/local/www/system_firmware_auto.php:113
+msgid "Beginning firmware upgrade"
+msgstr "Iniciando atualização de firmware"
+
+#: usr/local/www/system_firmware_auto.php:133
+#: usr/local/www/system_firmware_auto.php:135
+#: usr/local/www/system_firmware_auto.php:131
+msgid "Downloading current version information"
+msgstr "Fazendo download de informações da versão atual"
+
+#: usr/local/www/system_firmware_auto.php:148
+#: usr/local/www/system_firmware_auto.php:157
+#: usr/local/www/system_firmware_check.php:141
+#: usr/local/www/system_firmware_check.php:143
+#: usr/local/www/system_firmware_auto.php:150
+#: usr/local/www/system_firmware_auto.php:159
+#: usr/local/www/system_firmware_check.php:135
+#: usr/local/www/system_firmware_auto.php:146
+#: usr/local/www/system_firmware_auto.php:155
+msgid "Unable to check for updates."
+msgstr "Desabilitar verificações por atualizações."
+
+#: usr/local/www/system_firmware_auto.php:162
+#: usr/local/www/system_firmware_auto.php:164
+#: usr/local/www/system_firmware_auto.php:160
+msgid "Downloading updates"
+msgstr "Baixando atualizações"
+
+#: usr/local/www/system_firmware_auto.php:172
+#: usr/local/www/system_firmware_auto.php:174
+#: usr/local/www/system_firmware_auto.php:170
+msgid "download complete."
+msgstr "download completo."
+
+#: usr/local/www/system_firmware_auto.php:174
+#: usr/local/www/system_firmware_check.php:159
+#: usr/local/www/system_firmware_check.php:161
+#: usr/local/www/system_firmware_auto.php:176
+#: usr/local/www/system_firmware_check.php:153
+#: usr/local/www/system_firmware_auto.php:172
+msgid "You are on the latest version."
+msgstr "Você possui a última versão."
+
+#: usr/local/www/system_firmware_auto.php:214
+#: usr/local/www/system_firmware_auto.php:216
+#: usr/local/www/system_firmware_auto.php:212
+msgid "Update cannot continue. You can disable this check on the Updater Settings tab."
+msgstr "A atualização não pode continuar. Você pode desabilitar esta verificação na aba Configurações de Atualização. "
+
+#: usr/local/www/system_firmware_auto.php:219
+#: usr/local/www/system_firmware_auto.php:221
+#: usr/local/www/system_firmware_auto.php:217
+msgid "Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please..."
+msgstr "A imagem de atualização não possui uma assinatura, porém o sistema pode ser configurado para permiti-las. Um momento por favor..."
+
+#: usr/local/www/system_firmware_auto.php:224
+#: usr/local/www/system_firmware_auto.php:226
+#: usr/local/www/system_firmware_auto.php:222
+msgid "Update cannot continue"
+msgstr "Atualização não pode continuar"
+
+#: usr/local/www/system_firmware_auto.php:235
+#: usr/local/www/system_firmware_auto.php:237
+#: usr/local/www/system_firmware_auto.php:233
+msgid "Downloading complete but sha256 does not match."
+msgstr "Download completo mas sha256 não corresponde."
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Auto upgrade aborted."
+msgstr "Auto-atualização abortada."
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Downloaded SHA256"
+msgstr "Download de SHA256 feito"
+
+#: usr/local/www/system_firmware_auto.php:236
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:234
+msgid "Needed SHA256"
+msgstr "SHA256 necessário"
+
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:240
+#: usr/local/www/system_firmware_auto.php:236
+msgid "is now upgrading."
+msgstr "está agora atualizando."
+
+#: usr/local/www/system_firmware_auto.php:238
+#: usr/local/www/system_firmware_auto.php:240
+#: usr/local/www/system_firmware_auto.php:236
+msgid "The firewall will reboot once the operation is completed."
+msgstr "O firewall irá reiniciar uma vez que a operação estiver completa."
+
+#: usr/local/www/system_firmware_auto.php:256
+#: usr/local/www/system_firmware_auto.php:258
+msgid "Auto Update Download Status"
+msgstr "Status de Download de Auto-Atualização"
+
+#: usr/local/www/system_firmware_auto.php:258
+#: usr/local/www/system_firmware_auto.php:260
+msgid "Current Version"
+msgstr "Versão Atual"
+
+#: usr/local/www/system_firmware_auto.php:259
+#: usr/local/www/system_firmware_auto.php:261
+msgid "Latest Version"
+msgstr "Última Versão"
+
+#: usr/local/www/system_firmware_auto.php:260
+#: usr/local/www/system_firmware_auto.php:262
+msgid "File size"
+msgstr "Tamanho do arquivo"
+
+#: usr/local/www/system_firmware_auto.php:261
+#: usr/local/www/system_firmware_auto.php:263
+msgid "Downloaded"
+msgstr "Baixado"
+
+#: usr/local/www/system_firmware_auto.php:262
+#: usr/local/www/system_firmware_auto.php:264
+msgid "Percent"
+msgstr "Por cento"
+
+#: usr/local/www/system_firmware_check.php:107
+#: usr/local/www/system_firmware_check.php:109
+#: usr/local/www/system_firmware_check.php:101
+msgid "Invoke Auto Upgrade"
+msgstr "Invocar Auto-Atualização"
+
+#: usr/local/www/system_firmware_check.php:125
+#: usr/local/www/system_firmware_check.php:127
+#: usr/local/www/system_firmware_check.php:119
+msgid "Downloading new version information..."
+msgstr "Fazendo download de informações de nova versão..."
+
+#: usr/local/www/system_firmware_check.php:143
+#: usr/local/www/system_firmware_check.php:145
+#: usr/local/www/system_firmware_check.php:137
+msgid "Could not contact custom update server."
+msgstr "Não pode contactar servidor de atualização personalizado."
+
+#: usr/local/www/system_firmware_check.php:145
+#: usr/local/www/system_firmware_check.php:147
+#: usr/local/www/system_firmware_check.php:139
+#, php-format
+msgid "Could not contact %1$s update server %2$s%3$s"
+msgstr "Não pode contactar o servidor de atualização %1$s %2$s%3$s"
+
+#: usr/local/www/system_firmware_check.php:147
+#: usr/local/www/system_firmware_check.php:149
+#: usr/local/www/system_firmware_check.php:141
+msgid "Obtaining current version information..."
+msgstr "Obtendo informações da versão atual..."
+
+#: usr/local/www/system_firmware_check.php:172
+#: usr/local/www/system_firmware_check.php:174
+#: usr/local/www/system_firmware_check.php:178
+msgid "A new version is now available"
+msgstr "Uma nova versão está disponível agora"
+
+#: usr/local/www/system_firmware_check.php:173
+#: usr/local/www/system_firmware_check.php:175
+#: usr/local/www/system_firmware_check.php:179
+msgid "Current version"
+msgstr "Versão atual"
+
+#: usr/local/www/system_firmware_check.php:175
+#: usr/local/www/system_firmware_check.php:177
+#: usr/local/www/system_firmware_check.php:181
+msgid "NanoBSD Size"
+msgstr "Tamanho do NanoBSD"
+
+#: usr/local/www/system_firmware_check.php:177
+#: usr/local/www/system_firmware_check.php:179
+#: usr/local/www/system_firmware_check.php:183
+msgid "Built On"
+msgstr "Construído em"
+
+#: usr/local/www/system_firmware_check.php:178
+#: usr/local/www/system_firmware_check.php:180
+#: usr/local/www/system_firmware_check.php:184
+msgid "New version"
+msgstr "Nova versão"
+
+#: usr/local/www/system_firmware_check.php:179
+#: usr/local/www/system_firmware_check.php:181
+#: usr/local/www/system_firmware_check.php:185
+msgid "Update source"
+msgstr "Fonte de atualização"
+
+#: usr/local/www/system_firmware_settings.php:122
+#: usr/local/www/system_firmware_settings.php:127
+#: usr/local/www/system_firmware_settings.php:129
+msgid "Firmware Branch"
+msgstr "Firmware Branch"
+
+#: usr/local/www/system_firmware_settings.php:126
+#: usr/local/www/system_firmware_settings.php:131
+#: usr/local/www/system_firmware_settings.php:133
+msgid "Default Auto Update URLs"
+msgstr "URLs de Auto Atualização Padrão"
+
+#: usr/local/www/system_firmware_settings.php:142
+#: usr/local/www/system_firmware_settings.php:147
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/system_firmware_settings.php:158
+msgid "Firmware Auto Update URL"
+msgstr "URL de Auto Atualização de Firmware"
+
+#: usr/local/www/system_firmware_settings.php:144
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:158
+#: usr/local/www/system_firmware_settings.php:160
+msgid "Use a URL server for firmware upgrades other than"
+msgstr "Use um servidor de URL para atualização de firmware que não "
+
+#: usr/local/www/system_firmware_settings.php:146
+#: usr/local/www/pkg_mgr_settings.php:109
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:160
+#: usr/local/www/system_firmware_settings.php:162
+#: usr/local/www/pkg_mgr_settings.php:108
+msgid "Base URL:"
+msgstr "URL Base:"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+msgid "This is where"
+msgstr "Isso é onde"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+msgid "will check for newer firmware versions when the"
+msgstr "irá verificar versões mais novas de firmware quando o "
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+msgid "System: Firmware: Auto Update"
+msgstr "Sistema: Firmware: Auto-Atualização"
+
+#: usr/local/www/system_firmware_settings.php:149
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/system_firmware_settings.php:154
+#: usr/local/www/system_firmware_settings.php:163
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/pkg_mgr_settings.php:111
+msgid "page is viewed."
+msgstr "página é visualizada."
+
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:156
+#: usr/local/www/system_firmware_settings.php:165
+#: usr/local/www/system_firmware_settings.php:167
+#, php-format
+msgid "When a custom URL is enabled, the system will not verify the digital signature from %s."
+msgstr "Quando uma URL personalizada estiver habilitada, o sistema não verificará a assinatura digital de %s."
+
+#: usr/local/www/system_firmware_settings.php:159
+#: usr/local/www/system_firmware_settings.php:164
+#: usr/local/www/system_firmware_settings.php:173
+#: usr/local/www/system_firmware_settings.php:175
+msgid "Updates"
+msgstr "Atualizações"
+
+#: usr/local/www/system_firmware_settings.php:162
+#: usr/local/www/system_firmware_settings.php:167
+#: usr/local/www/system_firmware_settings.php:176
+#: usr/local/www/system_firmware_settings.php:178
+msgid "Unsigned images"
+msgstr "Imagens não assinadas"
+
+#: usr/local/www/system_firmware_settings.php:166
+#: usr/local/www/system_firmware_settings.php:171
+#: usr/local/www/system_firmware_settings.php:180
+#: usr/local/www/system_firmware_settings.php:182
+msgid "Allow auto-update firmware images with a missing or invalid digital signature to be used."
+msgstr "Permitir atualizar automaticamente imagens de firmware sem assinatura digital ou com assinatura inválida."
+
+#: usr/local/www/system_firmware_settings.php:174
+#: usr/local/www/system_firmware_settings.php:187
+#: usr/local/www/system_firmware_settings.php:196
+#: usr/local/www/system_firmware_settings.php:198
+msgid "Gitsync"
+msgstr "Gitsync"
+
+#: usr/local/www/system_firmware_settings.php:177
+#: usr/local/www/system_firmware_settings.php:190
+#: usr/local/www/system_firmware_settings.php:199
+#: usr/local/www/system_firmware_settings.php:201
+msgid "Auto sync on update"
+msgstr "Auto sincronização na atualização"
+
+#: usr/local/www/system_firmware_settings.php:181
+#: usr/local/www/system_firmware_settings.php:194
+#: usr/local/www/system_firmware_settings.php:203
+#: usr/local/www/system_firmware_settings.php:205
+msgid "After updating, sync with the following repository/branch before reboot."
+msgstr "Após atualizar, sincronize com o seguinte repositório/ramo antes de reiniciar."
+
+#: usr/local/www/system_firmware_settings.php:193
+#: usr/local/www/system_firmware_settings.php:206
+#: usr/local/www/system_firmware_settings.php:215
+#: usr/local/www/system_firmware_settings.php:217
+msgid "Repository URL"
+msgstr "URL do repositório"
+
+#: usr/local/www/system_firmware_settings.php:198
+#: usr/local/www/system_firmware_settings.php:211
+#: usr/local/www/system_firmware_settings.php:220
+#: usr/local/www/system_firmware_settings.php:222
+#, php-format
+msgid "The most recently used repository was %s"
+msgstr "O repositório mais recentemente utilizado foi %s"
+
+#: usr/local/www/system_firmware_settings.php:200
+#: usr/local/www/system_firmware_settings.php:213
+#: usr/local/www/system_firmware_settings.php:222
+#: usr/local/www/system_firmware_settings.php:224
+msgid "This will be used if the field is left blank."
+msgstr "Isto será usado se o campo for deixado em branco."
+
+#: usr/local/www/system_firmware_settings.php:219
+#: usr/local/www/system_firmware_settings.php:232
+#: usr/local/www/system_firmware_settings.php:241
+#: usr/local/www/system_firmware_settings.php:243
+msgid "Branch name"
+msgstr "Nome do ramo"
+
+#: usr/local/www/system_firmware_settings.php:224
+#: usr/local/www/system_firmware_settings.php:237
+#: usr/local/www/system_firmware_settings.php:246
+#: usr/local/www/system_firmware_settings.php:248
+#, php-format
+msgid "The most recently used branch was %s"
+msgstr "O branch mais recentemente utilizado foi %s"
+
+#: usr/local/www/system_firmware_settings.php:227
+#: usr/local/www/system_firmware_settings.php:240
+#: usr/local/www/system_firmware_settings.php:249
+#: usr/local/www/system_firmware_settings.php:251
+msgid "Usually the branch name is master"
+msgstr "Normalmente o nome do branch é master"
+
+#: usr/local/www/system_firmware_settings.php:230
+#: usr/local/www/system_firmware_settings.php:243
+#: usr/local/www/system_firmware_settings.php:252
+#: usr/local/www/system_firmware_settings.php:254
+msgid "Note: Sync will not be performed if a branch is not specified."
+msgstr "Nota: A sincronização não será realizada se um branch não for especificado."
+
+#: usr/local/www/system_routes.php:52 usr/local/www/system_routes.php:94
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:198 usr/local/www/system_routes.php:98
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_routes.php:113
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:231
+msgid "Static Routes"
+msgstr "Rotas Estáticas"
+
+#: usr/local/www/system_routes.php:83
+msgid "removed route to"
+msgstr "removida a rota para"
+
+#: usr/local/www/system_routes.php:107 usr/local/www/system_routes.php:111
+#: usr/local/www/system_routes.php:126
+#, php-format
+msgid "The static route configuration has been changed.%sYou must apply the changes in order for them to take effect."
+msgstr "A configuração da rota estática foi modificada.%sVocê deve aplicar as mudanças para que tenham efeito."
+
+#: usr/local/www/system_routes.php:115 usr/local/www/fbegin.inc:159
+#: usr/local/www/status_gateway_groups.php:64
+#: usr/local/www/status_gateway_groups.php:75
+#: usr/local/www/status_gateways.php:51 usr/local/www/status_gateways.php:62
+#: usr/local/www/system_gateway_groups.php:108
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways.php:120 usr/local/www/system_gateways.php:141
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/diag_logs_routing.php:83
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/fbegin.inc:176 usr/local/www/diag_logs_resolver.php:97
+#: usr/local/www/diag_logs.php:96 usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/diag_logs_wireless.php:85
+#: usr/local/www/diag_logs_gateways.php:66
+#: usr/local/www/diag_logs_gateways.php:97
+#: usr/local/www/diag_logs_routing.php:84
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/fbegin.inc:184 usr/local/www/diag_logs_resolver.php:98
+#: usr/local/www/system_gateway_groups.php:109
+#: usr/local/www/system_gateway_groups.php:122
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/status_gateways.php:63
+#: usr/local/www/diag_logs_wireless.php:86
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/status_gateway_groups.php:65
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/system_routes.php:119 usr/local/www/fbegin.inc:175
+#: usr/local/www/system_gateway_groups_edit.php:150
+#: usr/local/www/system_gateway_groups.php:118
+#: usr/local/www/system_gateway_groups.php:131
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_routes.php:134
+msgid "Gateways"
+msgstr "Gateways"
+
+#: usr/local/www/system_routes.php:116 usr/local/www/fbegin.inc:204
+#: usr/local/www/system_gateway_groups.php:109
+#: usr/local/www/system_gateways.php:142 usr/local/www/fbegin.inc:222
+#: usr/local/www/fbegin.inc:230 usr/local/www/system_gateway_groups.php:110
+#: usr/local/www/system_routes.php:120
+#: usr/local/www/system_gateway_groups.php:119
+#: usr/local/www/system_routes.php:135
+msgid "Routes"
+msgstr "Rotas"
+
+#: usr/local/www/system_routes.php:161 usr/local/www/system_routes.php:172
+#: usr/local/www/system_routes.php:176 usr/local/www/system_routes.php:192
+msgid "Do you really want to delete this route?"
+msgstr "Você realmente deseja apagar essa rota?"
+
+#: usr/local/www/system_routes.php:188 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes.php:203 usr/local/www/system_routes.php:219
+msgid "Do not enter static routes for networks assigned on any interface of this firewall. Static routes are only used for networks reachable via a different router, and not reachable via your default gateway."
+msgstr "Não informe rotas estáticas para redes atribuídas a qualquer interface desse firewall. Rotas estáticas são somente usadas em redes alcançáveis através de um roteador diferente, e não alcançáveis através de seu gateway padrão."
+
+#: usr/local/www/system_routes_edit.php:89
+#: usr/local/www/system_routes_edit.php:179
+#: usr/local/www/system_routes_edit.php:90
+#: usr/local/www/system_routes_edit.php:216
+#: usr/local/www/system_routes_edit.php:217
+#: usr/local/www/system_routes_edit.php:93
+#: usr/local/www/system_routes_edit.php:244
+#: usr/local/www/system_routes_edit.php:246
+#: usr/local/www/system_routes_edit.php:95
+#: usr/local/www/system_routes_edit.php:248
+msgid "Destination network"
+msgstr "Rede de destino"
+
+#: usr/local/www/system_routes_edit.php:90
+#: usr/local/www/system_routes_edit.php:91
+#: usr/local/www/system_routes_edit.php:94
+#: usr/local/www/system_routes_edit.php:96
+msgid "Destination network bit count"
+msgstr "Contagem de bits de rede de destino"
+
+#: usr/local/www/system_routes_edit.php:96
+#: usr/local/www/system_routes_edit.php:97
+#: usr/local/www/system_routes_edit.php:100
+#: usr/local/www/system_routes_edit.php:102
+msgid "A valid IPv4 or IPv6 destination network must be specified."
+msgstr "Uma rede de destino IPV4 ou IPV6 válida deve ser especificada."
+
+#: usr/local/www/system_routes_edit.php:99
+#: usr/local/www/system_routes_edit.php:100
+#: usr/local/www/system_routes_edit.php:103
+#: usr/local/www/system_routes_edit.php:105
+msgid "A valid destination network bit count must be specified."
+msgstr "Um contador de bits de rede de destino deve ser especificado."
+
+#: usr/local/www/system_routes_edit.php:114
+#: usr/local/www/system_routes_edit.php:118
+#: usr/local/www/system_routes_edit.php:121
+#: usr/local/www/system_routes_edit.php:123
+msgid "A IPv4 subnet can not be over 32 bits."
+msgstr "Uma subrede IPv4 não pode ser superior a 32bits."
+
+#: usr/local/www/system_routes_edit.php:123
+msgid "A route to this destination network already exists."
+msgstr "Uma rota para essa rede de destino já existe."
+
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:198
+#: usr/local/www/system_routes_edit.php:227
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:231
+msgid "Edit route"
+msgstr "Editar rota"
+
+#: usr/local/www/system_routes_edit.php:176
+#: usr/local/www/system_routes_edit.php:213
+#: usr/local/www/system_routes_edit.php:214
+#: usr/local/www/system_routes_edit.php:241
+#: usr/local/www/system_routes_edit.php:243
+#: usr/local/www/system_routes_edit.php:245
+msgid "Edit route entry"
+msgstr "Editar entrada de rota"
+
+#: usr/local/www/system_routes_edit.php:196
+#: usr/local/www/system_routes_edit.php:228
+#: usr/local/www/system_routes_edit.php:229
+#: usr/local/www/system_routes_edit.php:256
+#: usr/local/www/system_routes_edit.php:257
+#: usr/local/www/system_routes_edit.php:259
+msgid "Destination network for this static route"
+msgstr "Rede de destino para essa rota estática"
+
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_routes_edit.php:244
+#: usr/local/www/system_routes_edit.php:245
+#: usr/local/www/system_routes_edit.php:272
+#: usr/local/www/system_routes_edit.php:274
+#: usr/local/www/system_routes_edit.php:276
+msgid "Choose which gateway this route applies to or"
+msgstr "Escolha em qual gateway essa rota se aplica ou "
+
+#: usr/local/www/system_routes_edit.php:228
+#: usr/local/www/system_routes_edit.php:260
+#: usr/local/www/system_routes_edit.php:261
+#: usr/local/www/system_routes_edit.php:287
+#: usr/local/www/system_routes_edit.php:291
+#: usr/local/www/system_routes_edit.php:293
+msgid "Default gateway:"
+msgstr "Gateway padrão:"
+
+#: usr/local/www/system_routes_edit.php:231
+#: usr/local/www/system_routes_edit.php:263
+#: usr/local/www/system_routes_edit.php:264
+#: usr/local/www/system_routes_edit.php:290
+#: usr/local/www/system_routes_edit.php:294
+#: usr/local/www/system_routes_edit.php:296
+msgid "Interface:"
+msgstr "Interface:"
+
+#: usr/local/www/system_routes_edit.php:243
+#: usr/local/www/system_routes_edit.php:275
+#: usr/local/www/system_routes_edit.php:276
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:308
+#: usr/local/www/system_routes_edit.php:310
+msgid "Gateway IP:"
+msgstr "IP do Gateway:"
+
+#: usr/local/www/system_routes_edit.php:334
+#: usr/local/www/system_routes_edit.php:374
+#: usr/local/www/system_routes_edit.php:375
+#: usr/local/www/system_routes_edit.php:399
+#: usr/local/www/system_routes_edit.php:409
+#: usr/local/www/system_routes_edit.php:411
+#, php-format
+msgid "You can manage Gateways %shere%s."
+msgstr "Você pode gerenciar Gateways %saqui%s."
+
+#: usr/local/www/system_routes_edit.php:337
+#: usr/local/www/system_routes_edit.php:377
+#: usr/local/www/system_routes_edit.php:378
+#: usr/local/www/system_routes_edit.php:402
+#: usr/local/www/system_routes_edit.php:412
+#: usr/local/www/system_routes_edit.php:414
+msgid "Sorry, we could not create your gateway at this time."
+msgstr "Lamento, não pudemos criar seu gateway dessa vez."
+
+#: usr/local/www/diag_logs_filter_summary.php:34
+msgid "Firewall Log Summary"
+msgstr "Resumo de Log do Firewall"
+
+#: usr/local/www/diag_logs_filter_summary.php:45
+#: usr/local/www/load_balancer_relay_protocol_edit.php:230
+#: usr/local/www/load_balancer_relay_protocol_edit.php:228
+#: usr/local/www/diag_logs_filter_summary.php:46
+msgid "Actions"
+msgstr "Ações"
+
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/diag_logs_filter_summary.php:48
+msgid "Protocols"
+msgstr "Protocolos"
+
+#: usr/local/www/diag_logs_filter_summary.php:48
+#: usr/local/www/diag_logs_filter_summary.php:49
+msgid "Source IPs"
+msgstr "IPs de Origem"
+
+#: usr/local/www/diag_logs_filter_summary.php:49
+#: usr/local/www/diag_logs_filter_summary.php:50
+msgid "Destination IPs"
+msgstr "IPs de Destino"
+
+#: usr/local/www/diag_logs_filter_summary.php:50
+#: usr/local/www/diag_logs_filter_summary.php:51
+msgid "Source Ports"
+msgstr "Portas de Origem"
+
+#: usr/local/www/diag_logs_filter_summary.php:51
+#: usr/local/www/diag_logs_filter_summary.php:52
+msgid "Destination Ports"
+msgstr "Portas de Destino"
+
+#: usr/local/www/diag_logs_filter_summary.php:71
+#: usr/local/www/diag_logs_filter_summary.php:72
+msgid "data"
+msgstr "dados"
+
+#: usr/local/www/diag_logs_filter_summary.php:208
+#: usr/local/www/diag_logs_filter_summary.php:207
+#, php-format
+msgid "This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s)."
+msgstr "Esse é um sumário do log do firewall, das últimas %1$s linhas do log do firewall (Max %2$s)."
+
+#: usr/local/www/diag_logs_filter_summary.php:209
+#: usr/local/www/diag_logs_filter_summary.php:208
+msgid "NOTE: IE8 users must enable compatibility view."
+msgstr "Nota: Usuários do IE8 precisam habilitar o modo de compatibilidade."
+
+#: usr/local/www/uploadconfig.php:48
+msgid "ERR Could not save configuration."
+msgstr "ERRO Não pôde salvar configuração."
+
+#: usr/local/www/uploadconfig.php:54
+msgid "OK"
+msgstr "OK"
+
+#: usr/local/www/uploadconfig.php:57
+msgid "ERR Could not install configuration."
+msgstr "ERRO: Não pôde instalar configuração."
+
+#: usr/local/www/uploadconfig.php:60
+msgid "ERR Invalid configuration received."
+msgstr "ERRO Configuração inválida recebida."
+
+#: usr/local/www/vpn_ipsec.php:134 usr/local/www/vpn_ipsec_keys.php:86
+#: usr/local/www/vpn_ipsec_mobile.php:303 usr/local/www/vpn_ipsec.php:133
+#: usr/local/www/vpn_ipsec_mobile.php:330 usr/local/www/vpn_ipsec_keys.php:85
+#: usr/local/www/vpn_ipsec.php:139
+msgid "The IPsec tunnel configuration has been changed"
+msgstr "A configuração de túnvel IPsec foi modificada"
+
+#: usr/local/www/vpn_ipsec.php:141 usr/local/www/vpn_ipsec_keys.php:93
+#: usr/local/www/vpn_ipsec_mobile.php:318
+#: usr/local/www/vpn_ipsec_phase1.php:497
+#: usr/local/www/vpn_ipsec_phase2.php:381
+#: usr/local/www/vpn_ipsec_phase2.php:407 usr/local/www/vpn_ipsec.php:140
+#: usr/local/www/vpn_ipsec_mobile.php:345 usr/local/www/vpn_ipsec_keys.php:92
+#: usr/local/www/vpn_ipsec_phase2.php:473
+#: usr/local/www/vpn_ipsec_phase1.php:496 usr/local/www/vpn_ipsec.php:146
+#: usr/local/www/vpn_ipsec_phase1.php:517
+#: usr/local/www/vpn_ipsec_phase2.php:495
+msgid "Tunnels"
+msgstr "Túneis"
+
+#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94
+#: usr/local/www/vpn_ipsec_mobile.php:319
+#: usr/local/www/vpn_ipsec_phase1.php:498
+#: usr/local/www/vpn_ipsec_phase2.php:382
+#: usr/local/www/vpn_ipsec_phase2.php:408 usr/local/www/vpn_ipsec.php:141
+#: usr/local/www/vpn_ipsec_mobile.php:346 usr/local/www/vpn_ipsec_keys.php:93
+#: usr/local/www/vpn_ipsec_phase2.php:474
+#: usr/local/www/vpn_ipsec_phase1.php:497 usr/local/www/vpn_ipsec.php:147
+#: usr/local/www/vpn_ipsec_phase1.php:518
+#: usr/local/www/vpn_ipsec_phase2.php:496
+msgid "Mobile clients"
+msgstr "Clientes móveis"
+
+#: usr/local/www/vpn_ipsec.php:143 usr/local/www/vpn_ipsec_keys.php:95
+#: usr/local/www/vpn_ipsec_mobile.php:320
+#: usr/local/www/vpn_ipsec_phase1.php:499
+#: usr/local/www/vpn_ipsec_phase2.php:383
+#: usr/local/www/vpn_ipsec_phase2.php:409
+msgid "Pre-shared keys"
+msgstr "Chaves pre-compartilhadas"
+
+#: usr/local/www/vpn_ipsec.php:160 usr/local/www/vpn_ipsec.php:159
+#: usr/local/www/vpn_ipsec.php:165
+msgid "Enable IPsec"
+msgstr "Habilitar IPsec"
+
+#: usr/local/www/vpn_ipsec.php:221 usr/local/www/vpn_ipsec.php:351
+#: usr/local/www/vpn_ipsec_phase2.php:552 usr/local/www/vpn_ipsec.php:232
+#: usr/local/www/vpn_ipsec.php:362 usr/local/www/vpn_ipsec_phase2.php:578
+#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec.php:361
+#: usr/local/www/vpn_ipsec_phase2.php:680 usr/local/www/vpn_ipsec.php:237
+#: usr/local/www/vpn_ipsec.php:367 usr/local/www/vpn_ipsec_phase2.php:701
+msgid "auto"
+msgstr "auto"
+
+#: usr/local/www/vpn_ipsec.php:223 usr/local/www/vpn_ipsec.php:353
+#: usr/local/www/system_camanager.php:465
+#: usr/local/www/system_certmanager.php:578
+#: usr/local/www/vpn_ipsec_phase2.php:563
+#: usr/local/www/vpn_openvpn_server.php:864 usr/local/www/vpn_ipsec.php:234
+#: usr/local/www/vpn_ipsec.php:364 usr/local/www/system_certmanager.php:677
+#: usr/local/www/vpn_openvpn_server.php:937
+#: usr/local/www/system_camanager.php:466
+#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/vpn_ipsec.php:233
+#: usr/local/www/vpn_ipsec.php:363 usr/local/www/vpn_openvpn_server.php:965
+#: usr/local/www/vpn_ipsec_phase2.php:691
+#: usr/local/www/system_camanager.php:473 usr/local/www/vpn_ipsec.php:239
+#: usr/local/www/vpn_ipsec.php:369 usr/local/www/system_certmanager.php:686
+#: usr/local/www/vpn_openvpn_server.php:992
+#: usr/local/www/vpn_ipsec_phase2.php:712
+#: usr/local/www/system_certmanager.php:687
+msgid "bits"
+msgstr "bits"
+
+#: usr/local/www/vpn_ipsec.php:243 usr/local/www/vpn_ipsec.php:254
+#: usr/local/www/vpn_ipsec.php:253 usr/local/www/vpn_ipsec.php:259
+msgid "edit phase1 entry"
+msgstr "editar entrada de fase 1"
+
+#: usr/local/www/vpn_ipsec.php:247 usr/local/www/vpn_ipsec.php:258
+#: usr/local/www/vpn_ipsec.php:257 usr/local/www/vpn_ipsec.php:263
+msgid "Do you really want to delete this phase1 and all associated phase2 entries?"
+msgstr "Você realmente deseja apagar essa fase 1 e todas as entradas de fase 2 associadas?"
+
+#: usr/local/www/vpn_ipsec.php:248 usr/local/www/vpn_ipsec.php:259
+#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:264
+msgid "delete phase1 entry"
+msgstr "apagar entrada de fase 1"
+
+#: usr/local/www/vpn_ipsec.php:258 usr/local/www/vpn_ipsec.php:269
+#: usr/local/www/vpn_ipsec.php:268 usr/local/www/vpn_ipsec.php:274
+msgid "copy phase1 entry"
+msgstr "copiar entrada de fase 1"
+
+#: usr/local/www/vpn_ipsec.php:279 usr/local/www/vpn_ipsec.php:290
+#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:295
+#, php-format
+msgid "Show %s Phase-2 entries"
+msgstr "Exibir entradas de fase 2 %s"
+
+#: usr/local/www/vpn_ipsec.php:285 usr/local/www/vpn_ipsec.php:296
+#: usr/local/www/vpn_ipsec.php:295 usr/local/www/vpn_ipsec.php:301
+msgid "Local Subnet"
+msgstr "Subrede Local"
+
+#: usr/local/www/vpn_ipsec.php:286 usr/local/www/vpn_ipsec.php:297
+#: usr/local/www/vpn_ipsec.php:296 usr/local/www/vpn_ipsec.php:302
+msgid "Remote Subnet"
+msgstr "Subrede Remota"
+
+#: usr/local/www/vpn_ipsec.php:288 usr/local/www/vpn_ipsec.php:299
+#: usr/local/www/vpn_ipsec.php:298 usr/local/www/vpn_ipsec.php:304
+msgid "P2 Protocol"
+msgstr "Protocolo da F2"
+
+#: usr/local/www/vpn_ipsec.php:289 usr/local/www/vpn_ipsec.php:300
+#: usr/local/www/vpn_ipsec.php:299 usr/local/www/vpn_ipsec.php:305
+msgid "P2 Transforms"
+msgstr "Transformações da F2"
+
+#: usr/local/www/vpn_ipsec.php:290 usr/local/www/vpn_ipsec.php:301
+#: usr/local/www/vpn_ipsec.php:300 usr/local/www/vpn_ipsec.php:306
+msgid "P2 Auth Methods"
+msgstr "Métodos de Autenticação da F2"
+
+#: usr/local/www/vpn_ipsec.php:293 usr/local/www/vpn_ipsec.php:304
+#: usr/local/www/vpn_ipsec.php:303 usr/local/www/vpn_ipsec.php:309
+msgid "add phase2 entry"
+msgstr "adicionar entrada de fase 2"
+
+#: usr/local/www/vpn_ipsec.php:373 usr/local/www/vpn_ipsec.php:384
+#: usr/local/www/vpn_ipsec.php:383 usr/local/www/vpn_ipsec.php:389
+msgid "edit phase2 entry"
+msgstr "editar entradas de fase 2"
+
+#: usr/local/www/vpn_ipsec.php:375 usr/local/www/vpn_ipsec.php:386
+#: usr/local/www/vpn_ipsec.php:385 usr/local/www/vpn_ipsec.php:391
+msgid "Do you really want to delete this phase2 entry?"
+msgstr "Você realmente deseja apagar essa entrada de fase 2?"
+
+#: usr/local/www/vpn_ipsec.php:376 usr/local/www/vpn_ipsec.php:387
+#: usr/local/www/vpn_ipsec.php:386 usr/local/www/vpn_ipsec.php:392
+msgid "delete phase2 entry"
+msgstr "apagar entrada de fase 2"
+
+#: usr/local/www/vpn_ipsec.php:379 usr/local/www/vpn_ipsec.php:390
+#: usr/local/www/vpn_ipsec.php:389 usr/local/www/vpn_ipsec.php:395
+msgid "add a new Phase 2 based on this one"
+msgstr "adicionar um nova Fase 2 baseada na atual"
+
+#: usr/local/www/vpn_ipsec.php:410 usr/local/www/vpn_ipsec.php:421
+#: usr/local/www/vpn_ipsec.php:420 usr/local/www/vpn_ipsec.php:426
+msgid "add phase1 entry"
+msgstr "adicionar entrada de fase 1"
+
+#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435
+#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440
+msgid "You can check your IPsec status at"
+msgstr "Você pode verificar seu status do IPsec em"
+
+#: usr/local/www/vpn_ipsec.php:424 usr/local/www/vpn_ipsec.php:435
+#: usr/local/www/vpn_ipsec.php:434 usr/local/www/vpn_ipsec.php:440
+msgid "Status:IPsec"
+msgstr "Status:IPsec"
+
+#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:436
+#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441
+msgid "IPsec Debug Mode can be enabled at"
+msgstr "Modo de Debug do IPsec pode ser habilitado em"
+
+#: usr/local/www/vpn_ipsec.php:425 usr/local/www/vpn_ipsec.php:426
+#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:437
+#: usr/local/www/vpn_ipsec.php:435 usr/local/www/vpn_ipsec.php:441
+#: usr/local/www/vpn_ipsec.php:442
+msgid "System:Advanced:Miscellaneous"
+msgstr "Sistema:Avançado: Diversos"
+
+#: usr/local/www/vpn_ipsec.php:426 usr/local/www/vpn_ipsec.php:437
+#: usr/local/www/vpn_ipsec.php:436 usr/local/www/vpn_ipsec.php:442
+msgid "IPsec can be set to prefer older SAs at"
+msgstr "IPsec pode ser configurado utilizar os antigos SAs"
+
+#: usr/local/www/vpn_ipsec.php:456 usr/local/www/vpn_ipsec.php:467
+#: usr/local/www/vpn_ipsec.php:466 usr/local/www/vpn_ipsec.php:472
+msgid "Remote Gateway"
+msgstr "Gateway remoto"
+
+#: usr/local/www/vpn_ipsec.php:458 usr/local/www/vpn_ipsec.php:469
+#: usr/local/www/vpn_ipsec.php:468 usr/local/www/vpn_ipsec.php:474
+msgid "P1 Protocol"
+msgstr "Protocolo P1"
+
+#: usr/local/www/vpn_ipsec.php:459 usr/local/www/vpn_ipsec.php:470
+#: usr/local/www/vpn_ipsec.php:469 usr/local/www/vpn_ipsec.php:475
+msgid "P1 Transforms"
+msgstr "Transformações P1"
+
+#: usr/local/www/vpn_ipsec.php:460 usr/local/www/vpn_ipsec.php:471
+#: usr/local/www/vpn_ipsec.php:470 usr/local/www/vpn_ipsec.php:476
+msgid "P1 Description"
+msgstr "Descrição P1"
+
+#: usr/local/www/diag_logs_ppp.php:91 usr/local/www/diag_logs_ppp.php:90
+#: usr/local/www/diag_logs_ppp.php:88
+#, php-format
+msgid "Last %s PPP log entries"
+msgstr "Últimas %s entradas de log PPP"
+
+#: usr/local/www/diag_logs_relayd.php:87 usr/local/www/diag_logs_relayd.php:86
+#, php-format
+msgid "Last %s Load Balancer log entries"
+msgstr "Últimas %s entradas de log no Balanceador de Carga"
+
+#: usr/local/www/graph.php:112
+msgid "In"
+msgstr "Entrada"
+
+#: usr/local/www/graph.php:113
+msgid "Out"
+msgstr "Saída"
+
+#: usr/local/www/graph.php:117
+msgid "Switch to bytes/s"
+msgstr "Alterar para bytes/s"
+
+#: usr/local/www/graph.php:118
+msgid "AutoScale"
+msgstr "Auto Dimensionamento"
+
+#: usr/local/www/graph.php:120
+msgid "Graph shows last"
+msgstr "Gráfico mostra últimos"
+
+#: usr/local/www/graph.php:195
+msgid "Switch to"
+msgstr "Alternar para"
+
+#: usr/local/www/graph.php:201
+msgid "follow"
+msgstr "seguir"
+
+#: usr/local/www/graph.php:361
+msgid "Kbps"
+msgstr "Kbps"
+
+#: usr/local/www/graph.php:363
+msgid "Mbps"
+msgstr "Mbps"
+
+#: usr/local/www/graph.php:365
+msgid "Gbps"
+msgstr "Gbps"
+
+#: usr/local/www/graph.php:371
+msgid "KB/s"
+msgstr "KB/s"
+
+#: usr/local/www/graph.php:373
+msgid "MB/s"
+msgstr "MB/s"
+
+#: usr/local/www/graph.php:375
+msgid "GB/s"
+msgstr "BG/s"
+
+#: usr/local/www/diag_patterns.php:43
+#: usr/local/www/services_captiveportal_filemanager.php:195
+#: usr/local/www/exec.php:290 usr/local/www/exec.php:300
+#: usr/local/www/exec.php:292 usr/local/www/exec.php:302
+#: usr/local/www/services_captiveportal_filemanager.php:192
+msgid "Upload"
+msgstr "Carregar"
+
+#: usr/local/www/diag_patterns.php:46
+msgid "Uploaded file to"
+msgstr "Arquivo carregado em"
+
+#: usr/local/www/diag_patterns.php:49
+msgid "Warning: You must upload a file with .pat extension."
+msgstr "Atenção: Você deve fazer o carregamento de um arquivo com extensão .pat."
+
+#: usr/local/www/diag_patterns.php:58
+msgid "Add layer7 pattern"
+msgstr "Adicionar amostra de camada 7"
+
+#: usr/local/www/diag_patterns.php:69
+msgid "Upload layer7 pattern file"
+msgstr "Upload de arquivo padrão Layer7"
+
+#: usr/local/www/diag_patterns.php:72
+msgid "File to upload:"
+msgstr "Arquivo para carregar:"
+
+#: usr/local/www/diag_patterns.php:80 usr/local/www/diag_patterns.php:43
+msgid "Upload Pattern file"
+msgstr "Enviar arquivo de padrões"
+
+#: usr/local/www/vpn_ipsec_keys.php:64
+msgid "Deleted IPsec Pre-Shared Key"
+msgstr "Chave pré-compartilhada IPsec apagada"
+
+#: usr/local/www/vpn_ipsec_keys.php:71
+msgid "VPN: IPsec: Keys"
+msgstr "VPN: IPsec: Chaves"
+
+#: usr/local/www/vpn_ipsec_keys.php:104
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:128
+#: usr/local/www/vpn_ipsec_keys.php:103
+#: usr/local/www/vpn_ipsec_keys_edit.php:127
+msgid "Identifier"
+msgstr "Identificador"
+
+#: usr/local/www/vpn_ipsec_keys.php:105
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:136
+msgid "Pre-shared key"
+msgstr "Chave pre-compartilhada"
+
+#: usr/local/www/vpn_ipsec_keys.php:110 usr/local/www/vpn_ipsec_keys.php:146
+#: usr/local/www/vpn_ipsec_keys.php:109 usr/local/www/vpn_ipsec_keys.php:145
+msgid "add key"
+msgstr "adicionar chave"
+
+#: usr/local/www/vpn_ipsec_keys.php:123 usr/local/www/vpn_ipsec_keys.php:136
+#: usr/local/www/vpn_ipsec_keys.php:122 usr/local/www/vpn_ipsec_keys.php:135
+msgid "edit key"
+msgstr "editar chave"
+
+#: usr/local/www/vpn_ipsec_keys.php:137
+msgid "Do you really want to delete this pre-shared key?"
+msgstr "Você realmente deseja apagar essa chave pre-compartilhada?"
+
+#: usr/local/www/vpn_ipsec_keys.php:137 usr/local/www/vpn_ipsec_keys.php:136
+msgid "delete key"
+msgstr "apagar chave"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:74
+msgid "The identifier contains invalid characters."
+msgstr "O identificados contém caracteres inválidos."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:77
+msgid "A user with this name already exists. Add the key to the user instead."
+msgstr "Um usuário com esse nome já existe. Ao invés disso, adicione a chave ao usuário."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:83
+msgid "Another entry with the same identifier already exists."
+msgstr "Outra entrada com o mesmo identificador já existe."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:100
+msgid "Edited"
+msgstr "Editado"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:103
+msgid "Added"
+msgstr "Adicionado"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:114
+msgid "VPN: IPsec: Edit pre-shared key"
+msgstr "VPN: IPsec: Editar chave pré-compartilhada"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:132
+#: usr/local/www/vpn_ipsec_keys_edit.php:131
+msgid "This can be either an IP address, fully qualified domain name or an e-mail address"
+msgstr "Isso pode ser tanto um endereço IP, um nome de domínio completamente qualificado quanto um endereço de e-mail"
+
+#: usr/local/www/vpn_ipsec_mobile.php:128
+#: usr/local/www/vpn_ipsec_mobile.php:132
+msgid "User Authentication Source"
+msgstr "Fonte de Autenticação de Usuário"
+
+#: usr/local/www/vpn_ipsec_mobile.php:128
+#: usr/local/www/vpn_ipsec_mobile.php:132
+msgid "Group Authentication Source"
+msgstr "Fonte de Autenticação de Grupo"
+
+#: usr/local/www/vpn_ipsec_mobile.php:134
+#: usr/local/www/vpn_ipsec_mobile.php:138
+msgid "A valid IP address for 'Virtual Address Pool Network' must be specified."
+msgstr "Um endereço IP válido para 'Rede de Pool de Endereços Virtuais' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:138
+#: usr/local/www/vpn_ipsec_mobile.php:142
+msgid "A valid value for 'DNS Default Domain' must be specified."
+msgstr "Um valor válido para 'Domínio Padrão de DNS' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:143
+#: usr/local/www/vpn_ipsec_mobile.php:159
+msgid "At least one DNS server must be specified to enable the DNS Server option."
+msgstr "Pelo menos um servidor DNS deve ser especificado para habilitar a opção de Servidor DNS."
+
+#: usr/local/www/vpn_ipsec_mobile.php:145
+#: usr/local/www/vpn_ipsec_mobile.php:161
+msgid "A valid IP address for 'DNS Server #1' must be specified."
+msgstr "Um endereço IP válido para 'Servidor DNS #1' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:147
+#: usr/local/www/vpn_ipsec_mobile.php:163
+msgid "A valid IP address for 'DNS Server #2' must be specified."
+msgstr "Um endereço IP válido para 'Servidor DNS #2' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:149
+#: usr/local/www/vpn_ipsec_mobile.php:165
+msgid "A valid IP address for 'DNS Server #3' must be specified."
+msgstr "Um endereço IP válido para 'Servidor DNS #3' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:151
+#: usr/local/www/vpn_ipsec_mobile.php:167
+msgid "A valid IP address for 'DNS Server #4' must be specified."
+msgstr "Um endereço IP válido para 'Servidor DNS #4' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:156
+#: usr/local/www/vpn_ipsec_mobile.php:172
+msgid "At least one WINS server must be specified to enable the DNS Server option."
+msgstr "Pelo menos um servidor WInS deve ser especificado para habilitar a opção de Servidor DNS."
+
+#: usr/local/www/vpn_ipsec_mobile.php:158
+#: usr/local/www/vpn_ipsec_mobile.php:174
+msgid "A valid IP address for 'WINS Server #1' must be specified."
+msgstr "Um endereço IP válido para 'Servidor WINS #1' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:160
+#: usr/local/www/vpn_ipsec_mobile.php:176
+msgid "A valid IP address for 'WINS Server #2' must be specified."
+msgstr "Um endereço IP válido para 'Servidor WINS #2' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:165
+#: usr/local/www/vpn_ipsec_mobile.php:181
+msgid "A valid value for 'Login Banner' must be specified."
+msgstr "Um valor válido para 'Banner de Login' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_mobile.php:220
+#: usr/local/www/vpn_ipsec_mobile.php:240
+msgid "Mobile"
+msgstr "Móvel"
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid "Support for IPsec Mobile clients is enabled but a Phase1 definition was not found"
+msgstr "Suporte a clientes Móveis IPsec está habilitado mas a definição da Fase 1 não foi encontrada"
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid "Please click Create to define one."
+msgstr "Por favor, clique em Criar para definir uma."
+
+#: usr/local/www/vpn_ipsec_mobile.php:308
+#: usr/local/www/vpn_ipsec_mobile.php:335
+msgid "Create Phase1"
+msgstr "Criar Fase 1"
+
+#: usr/local/www/vpn_ipsec_mobile.php:330
+#: usr/local/www/vpn_ipsec_mobile.php:357
+msgid "IKE Extensions"
+msgstr "Extensões IKE"
+
+#: usr/local/www/vpn_ipsec_mobile.php:339
+#: usr/local/www/vpn_ipsec_mobile.php:366
+msgid "Enable IPsec Mobile Client Support"
+msgstr "Habilitar Suporte de Clientes Móveis IPsec"
+
+#: usr/local/www/vpn_ipsec_mobile.php:350
+#: usr/local/www/vpn_ipsec_mobile.php:377
+msgid "Extended Authentication (Xauth)"
+msgstr "Autenticação Extendida (Xauth)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:354
+#: usr/local/www/vpn_ipsec_mobile.php:381
+msgid "User Authentication"
+msgstr "Autenticação de Usuário"
+
+#: usr/local/www/vpn_ipsec_mobile.php:358
+#: usr/local/www/vpn_ipsec_mobile.php:379
+#: usr/local/www/vpn_ipsec_mobile.php:404
+msgid "system"
+msgstr "sistema"
+
+#: usr/local/www/vpn_ipsec_mobile.php:375
+#: usr/local/www/vpn_ipsec_mobile.php:399
+msgid "Group Authentication"
+msgstr "Autenticação de Grupo"
+
+#: usr/local/www/vpn_ipsec_mobile.php:388
+#: usr/local/www/vpn_ipsec_mobile.php:413
+msgid "Client Configuration (mode-cfg)"
+msgstr "Configuração de Cliente (mode-cfg)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:392
+#: usr/local/www/vpn_ipsec_mobile.php:417
+msgid "Virtual Address Pool"
+msgstr "Pool de Endereços Virtuais"
+
+#: usr/local/www/vpn_ipsec_mobile.php:401
+#: usr/local/www/vpn_ipsec_mobile.php:426
+msgid "Provide a virtual IP address to clients"
+msgstr "Fornece um endereço IP virtual para clientes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:424
+#: usr/local/www/vpn_ipsec_mobile.php:449
+msgid "Network List"
+msgstr "Lista de Redes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:433
+#: usr/local/www/vpn_ipsec_mobile.php:458
+msgid "Provide a list of accessible networks to clients"
+msgstr "Fornece uma lista de redes acessíveis para clientes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:440
+#: usr/local/www/vpn_ipsec_mobile.php:465
+msgid "Save Xauth Password"
+msgstr "Salvar Senha Xauth"
+
+#: usr/local/www/vpn_ipsec_mobile.php:449
+#: usr/local/www/vpn_ipsec_mobile.php:474
+msgid "Allow clients to save Xauth passwords (Cisco VPN client only)."
+msgstr "Permite clientes para salvar senhas Xauth (somente cliente VPN da Cisco)."
+
+#: usr/local/www/vpn_ipsec_mobile.php:450
+#: usr/local/www/vpn_ipsec_mobile.php:475
+msgid "NOTE: With iPhone clients, this does not work when deployed via the iPhone configuration utility, only by manual entry."
+msgstr "NOTA: Com clientes de iPhone, isso não funciona quando instalado via a ferramentas de configuração do iPhone, somente por entrada manual."
+
+#: usr/local/www/vpn_ipsec_mobile.php:457
+#: usr/local/www/vpn_openvpn_csc.php:433
+#: usr/local/www/vpn_openvpn_server.php:1194
+#: usr/local/www/vpn_openvpn_server.php:1336
+#: usr/local/www/vpn_ipsec_mobile.php:482
+#: usr/local/www/vpn_openvpn_csc.php:432
+#: usr/local/www/vpn_openvpn_server.php:1378
+#: usr/local/www/vpn_openvpn_server.php:1430
+msgid "DNS Default Domain"
+msgstr "Domínio Padrão do DNS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:466
+#: usr/local/www/vpn_openvpn_csc.php:443
+#: usr/local/www/vpn_openvpn_server.php:1204
+#: usr/local/www/vpn_openvpn_server.php:1346
+#: usr/local/www/vpn_ipsec_mobile.php:491
+#: usr/local/www/vpn_openvpn_csc.php:442
+#: usr/local/www/vpn_openvpn_server.php:1388
+#: usr/local/www/vpn_openvpn_server.php:1440
+msgid "Provide a default domain name to clients"
+msgstr "Fornece um nome de domínio padrão para clientes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:480
+#: usr/local/www/vpn_openvpn_csc.php:458
+#: usr/local/www/vpn_openvpn_server.php:1219
+#: usr/local/www/vpn_openvpn_server.php:1361
+#: usr/local/www/vpn_ipsec_mobile.php:529
+#: usr/local/www/vpn_openvpn_csc.php:457
+#: usr/local/www/vpn_openvpn_server.php:1403
+#: usr/local/www/vpn_openvpn_server.php:1455
+msgid "DNS Servers"
+msgstr "Servidores DNS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:489
+#: usr/local/www/vpn_openvpn_csc.php:468
+#: usr/local/www/vpn_openvpn_server.php:1229
+#: usr/local/www/vpn_openvpn_server.php:1371
+#: usr/local/www/vpn_ipsec_mobile.php:538
+#: usr/local/www/vpn_openvpn_csc.php:467
+#: usr/local/www/vpn_openvpn_server.php:1413
+#: usr/local/www/vpn_openvpn_server.php:1465
+msgid "Provide a DNS server list to clients"
+msgstr "Fornece uma lista de servidores DNS para clientes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:522
+#: usr/local/www/vpn_openvpn_csc.php:606
+#: usr/local/www/vpn_openvpn_server.php:1367
+#: usr/local/www/vpn_openvpn_server.php:1509
+#: usr/local/www/vpn_ipsec_mobile.php:571
+#: usr/local/www/vpn_openvpn_csc.php:605
+#: usr/local/www/vpn_openvpn_server.php:1551
+#: usr/local/www/vpn_openvpn_server.php:1603
+msgid "WINS Servers"
+msgstr "Servidores WINS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:531
+#: usr/local/www/vpn_openvpn_csc.php:616
+#: usr/local/www/vpn_openvpn_server.php:1377
+#: usr/local/www/vpn_openvpn_server.php:1519
+#: usr/local/www/vpn_ipsec_mobile.php:580
+#: usr/local/www/vpn_openvpn_csc.php:615
+#: usr/local/www/vpn_openvpn_server.php:1561
+#: usr/local/www/vpn_openvpn_server.php:1613
+msgid "Provide a WINS server list to clients"
+msgstr "Fornece uma lista de servidores WINS para clientes"
+
+#: usr/local/www/vpn_ipsec_mobile.php:552
+#: usr/local/www/vpn_ipsec_mobile.php:601
+msgid "Phase2 PFS Group"
+msgstr "Grupo Phase2 PFS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:561
+#: usr/local/www/vpn_ipsec_mobile.php:610
+msgid "Provide the Phase2 PFS group to clients ( overrides all mobile phase2 settings )"
+msgstr "Fornece o grupo PFS da Fase 2 para clientes (substitui todas as configurações de dispositivos móveis da fase 2)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:568
+#: usr/local/www/system_groupmanager.php:71
+#: usr/local/www/vpn_ipsec_mobile.php:617
+msgid "Group"
+msgstr "Grupo"
+
+#: usr/local/www/vpn_ipsec_mobile.php:582
+#: usr/local/www/vpn_ipsec_mobile.php:631
+msgid "Login Banner"
+msgstr "Banner de Login"
+
+#: usr/local/www/vpn_ipsec_mobile.php:591
+#: usr/local/www/vpn_ipsec_mobile.php:640
+msgid "Provide a login banner to clients"
+msgstr "Fornece um banner de login para clientes"
+
+#: usr/local/www/interfaces_lagg.php:70 usr/local/www/interfaces_lagg.php:74
+msgid "This LAGG interface cannot be deleted because it is still being used."
+msgstr "Essa interface LAGG não pode ser apagada porque ainda está sendo usada."
+
+#: usr/local/www/interfaces_lagg.php:140 usr/local/www/interfaces_lagg.php:141
+#: usr/local/www/interfaces_lagg.php:145
+msgid "LAGG allows for link aggregation, bonding and fault tolerance. Only unassigned interfaces can be added to LAGG."
+msgstr "LAGG permite a agregação de link, tolerância de laços e falhas. Somente interfaces não atribuídas podem ser adicionadas a LAGG."
+
+#: usr/local/www/interfaces_lagg_edit.php:86
+#: usr/local/www/interfaces_lagg_edit.php:88
+msgid "Lagg protocol"
+msgstr "Protocolo Lagg"
+
+#: usr/local/www/interfaces_lagg_edit.php:131
+#: usr/local/www/interfaces_lagg_edit.php:132
+#: usr/local/www/interfaces_lagg_edit.php:145
+msgid "LAGG configuration"
+msgstr "Configuração LAGG"
+
+#: usr/local/www/interfaces_lagg_edit.php:149
+#: usr/local/www/interfaces_lagg_edit.php:150
+#: usr/local/www/interfaces_lagg_edit.php:163
+msgid "Choose the members that will be used for the link aggregation"
+msgstr "Escolha os membros que serão usados para a agregação de link"
+
+#: usr/local/www/interfaces_lagg_edit.php:152
+#: usr/local/www/interfaces_lagg_edit.php:153
+#: usr/local/www/interfaces_lagg_edit.php:166
+msgid "Lag proto"
+msgstr "Lag proto"
+
+#: usr/local/www/interfaces_lagg_edit.php:168
+#: usr/local/www/interfaces_lagg_edit.php:169
+#: usr/local/www/interfaces_lagg_edit.php:182
+#: usr/local/www/interfaces_lagg_edit.php:181
+msgid "failover"
+msgstr "failover"
+
+#: usr/local/www/interfaces_lagg_edit.php:169
+#: usr/local/www/interfaces_lagg_edit.php:170
+#: usr/local/www/interfaces_lagg_edit.php:183
+#: usr/local/www/interfaces_lagg_edit.php:182
+msgid "Sends and receives traffic only through the master port. If the master port becomes unavailable, the next active port is used. The first interface added is the master port; any interfaces added after that are used as failover devices."
+msgstr "Envia e recebe tráfego somente através da porta master. Se a porta master de tornar indisponível, a próxima porta ativa é usada. A primeira interface adicionada é a porta master; qualquer interface adicionada depois disso serão usadas como dispositivos failover."
+
+#: usr/local/www/interfaces_lagg_edit.php:174
+#: usr/local/www/interfaces_lagg_edit.php:175
+#: usr/local/www/interfaces_lagg_edit.php:188
+#: usr/local/www/interfaces_lagg_edit.php:187
+msgid "fec"
+msgstr "fec"
+
+#: usr/local/www/interfaces_lagg_edit.php:174
+#: usr/local/www/interfaces_lagg_edit.php:175
+#: usr/local/www/interfaces_lagg_edit.php:188
+#: usr/local/www/interfaces_lagg_edit.php:187
+msgid "Supports Cisco EtherChannel. This is a static setup and does not negotiate aggregation with the peer or exchange frames to monitor the link."
+msgstr "Suporta Cisco EtherChannel. Esta é uma instalação estática e não negocia agregações com o peer ou troca frames para monitorar o link."
+
+#: usr/local/www/interfaces_lagg_edit.php:178
+#: usr/local/www/interfaces_lagg_edit.php:179
+#: usr/local/www/interfaces_lagg_edit.php:192
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid "lacp"
+msgstr "lacp"
+
+#: usr/local/www/interfaces_lagg_edit.php:178
+#: usr/local/www/interfaces_lagg_edit.php:179
+#: usr/local/www/interfaces_lagg_edit.php:192
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid "Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the Marker Protocol. LACP will negotiate a set of aggregable links with the peer in to one or more Link Aggregated Groups. Each LAG is composed of ports of the same speed, set to full-duplex operation. The traffic will be balanced across the ports in the LAG with the greatest total speed, in most cases there will only be one LAG which contains all ports. In the event of changes in physical connectivity, Link Aggregation will quickly converge to a new configuration."
+msgstr "Suporta o Protocolo de Controle de Agregação de Link (LACP) da IEEE 802.3ad e o Protocolo Marker. LACP negociará um conjunto de links agregáveis com o peer em um ou mais Grupos de Links Agregados. Cada LAG é composto de portas da mesma velocidade, configurado para uma operação full-duplex. O tráfego será balanceado através das portas no LAG com a velocidade total maior, na maioria dos casos haverá somente um LAG que contém todas as portas. No momento em que houver mudanças na conexão física, a Agregação do Link será rapidamente convergida para uma nova configuração."
+
+#: usr/local/www/interfaces_lagg_edit.php:189
+#: usr/local/www/interfaces_lagg_edit.php:190
+#: usr/local/www/interfaces_lagg_edit.php:203
+#: usr/local/www/interfaces_lagg_edit.php:202
+msgid "loadbalance"
+msgstr "loadbalance"
+
+#: usr/local/www/interfaces_lagg_edit.php:189
+#: usr/local/www/interfaces_lagg_edit.php:190
+#: usr/local/www/interfaces_lagg_edit.php:203
+#: usr/local/www/interfaces_lagg_edit.php:202
+msgid "Balances outgoing traffic across the active ports based on hashed protocol header information and accepts incoming traffic from any active port. This is a static setup and does not negotiate aggregation with the peer or exchange frames to monitor the link. The hash includes the Ethernet source and destination address, and, if available, the VLAN tag, and the IP source and destination address"
+msgstr "Balanceia o tráfego de saída através das portas ativas baseado em informações do cabeçalho de protocolo em hash e aceita tráfego de entrada de qualquer porta ativa. Essa é uma instalação estática e não negocia agregação com o peer ou troca frames para monitorar o link. A hash inclui a fonte Ethernet e endereço de destino e, se disponível, a tag VLAN, e a fonte IP e endereço de destino"
+
+#: usr/local/www/interfaces_lagg_edit.php:197
+#: usr/local/www/interfaces_lagg_edit.php:198
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/interfaces_lagg_edit.php:210
+msgid "roundrobin"
+msgstr "roundrobin"
+
+#: usr/local/www/interfaces_lagg_edit.php:197
+#: usr/local/www/interfaces_lagg_edit.php:198
+#: usr/local/www/interfaces_lagg_edit.php:211
+#: usr/local/www/interfaces_lagg_edit.php:210
+msgid "Distributes outgoing traffic using a round-robin scheduler through all active ports and accepts incoming traffic from any active port"
+msgstr "Distribui tráfego de saída usando um agendamento round-robin através de todas as portas ativas e aceita tráfego de entrada de qualquer porta ativa"
+
+#: usr/local/www/interfaces_lagg_edit.php:201
+#: usr/local/www/interfaces_lagg_edit.php:202
+#: usr/local/www/interfaces_lagg_edit.php:215
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid "This protocol is intended to do nothing: it disables any traffic without disabling the lagg interface itself"
+msgstr "Esse protocolo não tem intenção de fazer nada: ele desabilita qualquer tráfego sem desabilitar a interface lagg"
+
+#: usr/local/www/interfaces_ppps.php:62
+msgid "This point-to-point link cannot be deleted because it is still being used as an interface."
+msgstr "Esse link ponto-a-ponto não pode ser apagado porque ele ainda está sendo usado como uma interface."
+
+#: usr/local/www/interfaces_ppps.php:78
+msgid "Interfaces: PPPs"
+msgstr "Interfaces: PPPs"
+
+#: usr/local/www/interfaces_ppps.php:109 usr/local/www/interfaces_ppps.php:110
+msgid "Interface(s)/Port(s)"
+msgstr "Interface(s)/Porta(s)"
+
+#: usr/local/www/interfaces_ppps.php:132 usr/local/www/interfaces_ppps.php:133
+msgid "Do you really want to delete this PPP interface?"
+msgstr "Você realmente deseja apagar essa interface PPP?"
+
+#: usr/local/www/interfaces_ppps_edit.php:182
+#: usr/local/www/interfaces_ppps_edit.php:188
+#: usr/local/www/interfaces_ppps_edit.php:191
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:194
+#: usr/local/www/interfaces_ppps_edit.php:197
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+msgid "Link Interface(s)"
+msgstr "Interface(s) de Link"
+
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/services_dhcp.php:587 usr/local/www/services_dhcpv6.php:522
+#: usr/local/www/services_dhcp.php:600 usr/local/www/services_dhcpv6.php:596
+#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcpv6.php:527
+#: usr/local/www/interfaces_ppps_edit.php:205
+#: usr/local/www/interfaces_ppps_edit.php:208
+#: usr/local/www/services_dhcp.php:720 usr/local/www/services_dhcpv6.php:542
+#: usr/local/www/services_dhcp.php:740 usr/local/www/services_dhcp.php:752
+msgid "Subnet"
+msgstr "Subrede"
+
+#: usr/local/www/interfaces_ppps_edit.php:207
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Please choose a Link Type."
+msgstr "Por favor escolha o Tipo de Link."
+
+#: usr/local/www/interfaces_ppps_edit.php:211
+#: usr/local/www/interfaces_ppps_edit.php:217
+msgid "Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface."
+msgstr "Conexões multilink (MLPPP) usando o tipo de link PPP não é suportado atualmente. Por favor, selecione somente uma Interface de Link."
+
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:219
+msgid "The Service name contains invalid characters."
+msgstr "O nome do Serviço contém caracteres inválidos."
+
+#: usr/local/www/interfaces_ppps_edit.php:215
+#: usr/local/www/interfaces_ppps_edit.php:221
+msgid "Do not specify both a Service name and a NULL Service name."
+msgstr "Não especifique um nome de Serviço e um nome de Serviço Nulo."
+
+#: usr/local/www/interfaces_ppps_edit.php:229
+#: usr/local/www/interfaces_ppps_edit.php:235
+msgid "A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields."
+msgstr "Um mês de reinício PPPoE válido deve ser especificado (1-12) nos campos de reinício periódico do PPPoE personalizados."
+
+#: usr/local/www/interfaces_ppps_edit.php:231
+#: usr/local/www/interfaces_ppps_edit.php:237
+msgid "A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month"
+msgstr "Um dia do mês de reinício do PPPoE válido deve ser especificado (1-31) nos campos de reinício periódico do PPPoE personalizados. Nenhuma verificação é feita em um # de dias válido por mês"
+
+#: usr/local/www/interfaces_ppps_edit.php:233
+#: usr/local/www/interfaces_ppps_edit.php:239
+msgid "A valid PPPoE reset year must be specified. Don't select a year in the past!"
+msgstr "Um ano de reinício do PPPoE válido deve ser especificado. Não selecione um ano do passado!"
+
+#: usr/local/www/interfaces_ppps_edit.php:238
+#: usr/local/www/interfaces_ppps_edit.php:244
+#, php-format
+msgid "A valid local IP address must be specified for %s."
+msgstr "Um endereço IP local válido deve ser especificado para %s."
+
+#: usr/local/www/interfaces_ppps_edit.php:240
+#: usr/local/www/interfaces_ppps_edit.php:246
+#, php-format
+msgid "A valid gateway IP address OR hostname must be specified for %s."
+msgstr "Um endereço IP de gateway ou nome de host válido deve ser especificado para %s."
+
+#: usr/local/www/interfaces_ppps_edit.php:242
+#: usr/local/www/interfaces_ppps_edit.php:248
+#, php-format
+msgid "The bandwidth value for %s must be an integer."
+msgstr "O valor de tamanho de banda para %s deve ser um inteiro."
+
+#: usr/local/www/interfaces_ppps_edit.php:244
+#: usr/local/www/interfaces_ppps_edit.php:250
+#, php-format
+msgid "The MTU for %s must be greater than 576 bytes."
+msgstr "O MTU para %s deve ser maior que 576 bytes."
+
+#: usr/local/www/interfaces_ppps_edit.php:246
+#: usr/local/www/interfaces_ppps_edit.php:252
+#, php-format
+msgid "The MRU for %s must be greater than 576 bytes."
+msgstr "O MRU para %s deve ser maior que 576 bytes."
+
+#: usr/local/www/interfaces_ppps_edit.php:381
+#: usr/local/www/system_authservers.php:577
+#: usr/local/www/interfaces_ppps_edit.php:382
+#: usr/local/www/system_authservers.php:582
+#: usr/local/www/interfaces_ppps_edit.php:388
+#: usr/local/www/system_authservers.php:589
+#: usr/local/www/system_authservers.php:601
+msgid "Select"
+msgstr "Selecione"
+
+#: usr/local/www/interfaces_ppps_edit.php:398
+#: usr/local/www/interfaces_ppps_edit.php:399
+#: usr/local/www/interfaces_ppps_edit.php:405
+msgid "PPPs configuration"
+msgstr "Configuração PPPs"
+
+#: usr/local/www/interfaces_ppps_edit.php:401
+#: usr/local/www/interfaces_ppps_edit.php:402
+#: usr/local/www/interfaces_ppps_edit.php:408
+msgid "Link Type"
+msgstr "Tipo de Link"
+
+#: usr/local/www/interfaces_ppps_edit.php:416
+#: usr/local/www/interfaces_ppps_edit.php:417
+#: usr/local/www/interfaces_ppps_edit.php:423
+msgid "Link interface(s)"
+msgstr "Interface(s) de Link"
+
+#: usr/local/www/interfaces_ppps_edit.php:422
+#: usr/local/www/interfaces_ppps_edit.php:423
+#: usr/local/www/interfaces_ppps_edit.php:429
+msgid "Select at least two interfaces for Multilink (MLPPP) connections."
+msgstr "Selecione pelo menos duas interfaces para conexões Multilink (MLPPP)."
+
+#: usr/local/www/interfaces_ppps_edit.php:470
+#: usr/local/www/interfaces_ppps_edit.php:471
+#: usr/local/www/interfaces_ppps_edit.php:477
+msgid "You may enter a description here for your reference. Description will appear in the \"Interfaces Assign\" select lists."
+msgstr "Você deve informar a descrição aqui para sua referência. A descrição irá aparecer na lista de seleção \"Atribuição de Interfaces\"."
+
+#: usr/local/www/interfaces_ppps_edit.php:526
+#: usr/local/www/interfaces_ppps_edit.php:527
+#: usr/local/www/interfaces_ppps_edit.php:533
+#: usr/local/www/interfaces_ppps_edit.php:531
+msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks"
+msgstr "Nota: Tipicamente *99# para redes GSM e #777 para redes CDMA"
+
+#: usr/local/www/interfaces_ppps_edit.php:540
+#: usr/local/www/interfaces_ppps_edit.php:541
+#: usr/local/www/interfaces_ppps_edit.php:547
+#: usr/local/www/interfaces_ppps_edit.php:545
+msgid "APN number (optional)"
+msgstr "Número APN (opcional)"
+
+#: usr/local/www/interfaces_ppps_edit.php:543
+#: usr/local/www/interfaces_ppps_edit.php:544
+#: usr/local/www/interfaces_ppps_edit.php:550
+#: usr/local/www/interfaces_ppps_edit.php:548
+msgid "Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."
+msgstr "Nota: o valor padrão é 1 caso você configurar o APN acima. Ignora-se caso você não configurar o APN acima."
+
+#: usr/local/www/interfaces_ppps_edit.php:547
+#: usr/local/www/interfaces_ppps_edit.php:548
+#: usr/local/www/interfaces_ppps_edit.php:554
+#: usr/local/www/interfaces_ppps_edit.php:552
+msgid "SIM PIN"
+msgstr "SIM PIN"
+
+#: usr/local/www/interfaces_ppps_edit.php:554
+#: usr/local/www/interfaces_ppps_edit.php:555
+#: usr/local/www/interfaces_ppps_edit.php:561
+#: usr/local/www/interfaces_ppps_edit.php:559
+msgid "SIM PIN wait"
+msgstr "SIM PIN espera"
+
+#: usr/local/www/interfaces_ppps_edit.php:557
+#: usr/local/www/interfaces_ppps_edit.php:558
+#: usr/local/www/interfaces_ppps_edit.php:564
+#: usr/local/www/interfaces_ppps_edit.php:562
+msgid "Note: Time to wait for SIM to discover network after PIN is sent to SIM (seconds)."
+msgstr "Nota: Tempo para esperar que o SIM descubra a rede depois que o PIN é enviado ao SIM (segundos)."
+
+#: usr/local/www/interfaces_ppps_edit.php:561
+#: usr/local/www/interfaces_ppps_edit.php:562
+#: usr/local/www/interfaces_ppps_edit.php:568
+#: usr/local/www/interfaces_ppps_edit.php:566
+msgid "Init String"
+msgstr "String de inicialização"
+
+#: usr/local/www/interfaces_ppps_edit.php:564
+#: usr/local/www/interfaces_ppps_edit.php:565
+#: usr/local/www/interfaces_ppps_edit.php:571
+#: usr/local/www/interfaces_ppps_edit.php:569
+msgid "Note: Enter the modem initialization string here. Do NOT include the \"AT\" string at the beginning of the command. Many modern USB 3G modems don't need an initialization string."
+msgstr "Nota: Informe a string de inicialização do modem aqui. NÃO inclua a string \"AT\" no início do comando. Muitos modems USB 3G modernos não precisam de uma string de inicialização."
+
+#: usr/local/www/interfaces_ppps_edit.php:569
+#: usr/local/www/interfaces_ppps_edit.php:570
+#: usr/local/www/interfaces_ppps_edit.php:576
+#: usr/local/www/interfaces_ppps_edit.php:574
+msgid "Connection Timeout"
+msgstr "Conexão expirou"
+
+#: usr/local/www/interfaces_ppps_edit.php:572
+#: usr/local/www/interfaces_ppps_edit.php:573
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:577
+msgid "Note: Enter timeout in seconds for connection to be established (sec.) Default is 45 sec."
+msgstr "Nota: Informe o tempo de expiração em segundos para que a conexão seja estabelecida (segundos). O padrão é 45 segundos."
+
+#: usr/local/www/interfaces_ppps_edit.php:576
+#: usr/local/www/interfaces_ppps_edit.php:577
+#: usr/local/www/interfaces_ppps_edit.php:583
+#: usr/local/www/interfaces_ppps_edit.php:581
+msgid "Uptime Logging"
+msgstr "Geração de log de tempo de execução"
+
+#: usr/local/www/interfaces_ppps_edit.php:578
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:585
+#: usr/local/www/interfaces_ppps_edit.php:583
+msgid "Enable persistent logging of connection uptime."
+msgstr "Habilitar log de persistência da conexão em tempo de execução."
+
+#: usr/local/www/interfaces_ppps_edit.php:579
+#: usr/local/www/interfaces_ppps_edit.php:580
+#: usr/local/www/interfaces_ppps_edit.php:586
+#: usr/local/www/interfaces_ppps_edit.php:584
+msgid "This option causes cumulative uptime to be recorded and displayed on the Status Interfaces page."
+msgstr "Essa opção faz com que o acúmulo de tempo de execução seja gravado e exibido na página de Interfaces de Status."
+
+#: usr/local/www/interfaces_ppps_edit.php:591
+#: usr/local/www/interfaces_ppps_edit.php:592
+#: usr/local/www/interfaces_ppps_edit.php:598
+#: usr/local/www/interfaces_ppps_edit.php:596
+msgid "Configure a NULL Service name"
+msgstr "Configure um Nome do Serviço Nulo"
+
+#: usr/local/www/interfaces_ppps_edit.php:592
+#: usr/local/www/interfaces_ppps_edit.php:593
+#: usr/local/www/interfaces_ppps_edit.php:599
+#: usr/local/www/interfaces_ppps_edit.php:597
+msgid "Hint: this field can usually be left empty. Service name will not be configured if this field is empty. Check the \"Configure NULL\" box to configure a blank Service name."
+msgstr "Dica: esse campo pode ser deixado em branco. O nome de Serviço não será configurado se esse campo estiver vazio. Verifique a caixa \"Configure Nulo\" para configurar um nome de serviço em branco."
+
+#: usr/local/www/interfaces_ppps_edit.php:652 usr/local/www/vpn_pppoe.php:102
+#: usr/local/www/diag_ipsec.php:91 usr/local/www/diag_ipsec.php:102
+#: usr/local/www/vpn_pppoe.php:103 usr/local/www/diag_ipsec.php:103
+#: usr/local/www/interfaces_ppps_edit.php:653 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/interfaces_ppps_edit.php:659 usr/local/www/diag_ipsec.php:105
+#: usr/local/www/interfaces_ppps_edit.php:657
+msgid "Local IP"
+msgstr "IP local"
+
+#: usr/local/www/interfaces_ppps_edit.php:667
+#: usr/local/www/interfaces_ppps_edit.php:668
+#: usr/local/www/interfaces_ppps_edit.php:674
+#: usr/local/www/interfaces_ppps_edit.php:672
+msgid "IP Address OR Hostname"
+msgstr "Endereço IP OU Nome de Host"
+
+#: usr/local/www/interfaces_ppps_edit.php:678
+#: usr/local/www/interfaces_ppps_edit.php:679
+#: usr/local/www/interfaces_ppps_edit.php:685
+#: usr/local/www/interfaces_ppps_edit.php:683
+msgid "Dial On Demand"
+msgstr "Discagem sob Demanda"
+
+#: usr/local/www/interfaces_ppps_edit.php:680
+#: usr/local/www/interfaces_ppps_edit.php:681
+#: usr/local/www/interfaces_ppps_edit.php:687
+#: usr/local/www/interfaces_ppps_edit.php:685
+msgid "Enable Dial-on-Demand mode"
+msgstr "Habilitar modo de Discagem sob Demanda"
+
+#: usr/local/www/interfaces_ppps_edit.php:681
+#: usr/local/www/interfaces_ppps_edit.php:682
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/interfaces_ppps_edit.php:686
+msgid "This option causes the interface to operate in dial-on-demand mode. Do NOT enable if you want your link to be always up. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."
+msgstr "Essa opção faz com que a inteface opere no modo de discagem sob demanda. NÃO habilite se você deseja que seu link esteja sempre funcionando. A interface é configurada, mas a conexão real é adiada até qualificar o tráfego de saída."
+
+#: usr/local/www/interfaces_ppps_edit.php:686
+#: usr/local/www/interfaces_ppps_edit.php:687
+#: usr/local/www/interfaces_ppps_edit.php:693
+#: usr/local/www/interfaces_ppps_edit.php:691
+msgid "Idle Timeout"
+msgstr "Tempo ocioso"
+
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/interfaces_ppps_edit.php:689
+#: usr/local/www/interfaces_ppps_edit.php:695
+#: usr/local/www/interfaces_ppps_edit.php:693
+msgid "(seconds) Default is 0, which disables the timeout feature."
+msgstr "(segundos). O padrão é 0, o que desabilita a funcionalidade de tempo de expiração."
+
+#: usr/local/www/interfaces_ppps_edit.php:689
+#: usr/local/www/interfaces_ppps_edit.php:690
+#: usr/local/www/interfaces_ppps_edit.php:696
+#: usr/local/www/interfaces_ppps_edit.php:694
+msgid "If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down."
+msgstr "Se nenhum pacote de entrada ou de saída forem transmitidos para o número de segundos informados, a conexão é desfeita."
+
+#: usr/local/www/interfaces_ppps_edit.php:690
+#: usr/local/www/interfaces_ppps_edit.php:691
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:695
+msgid "When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. Otherwise, the interface is brought down and all associated routes removed."
+msgstr "Quando o tempo ocioso, se a opção de discagem sob demanda estiver habilitada, mpd retorna ao modo discagem sob demanda. Do contrário, a interface é desconectada e todas as rotas associadas a ela removidas."
+
+#: usr/local/www/interfaces_ppps_edit.php:694
+#: usr/local/www/vpn_openvpn_client.php:787
+#: usr/local/www/vpn_openvpn_server.php:1077
+#: usr/local/www/vpn_openvpn_server.php:1219
+#: usr/local/www/vpn_openvpn_client.php:792
+#: usr/local/www/interfaces_ppps_edit.php:695
+#: usr/local/www/vpn_openvpn_server.php:1261
+#: usr/local/www/vpn_openvpn_client.php:838
+#: usr/local/www/vpn_openvpn_client.php:857
+#: usr/local/www/interfaces_ppps_edit.php:701
+#: usr/local/www/vpn_openvpn_server.php:1288
+#: usr/local/www/interfaces_ppps_edit.php:699
+msgid "Compression"
+msgstr "Compressão"
+
+#: usr/local/www/interfaces_ppps_edit.php:696
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:703
+#: usr/local/www/interfaces_ppps_edit.php:701
+msgid "Disable vjcomp(compression) (auto-negotiated by default)."
+msgstr "Desabilitar vjcomp (compressão) (auto-negociada por padrão)."
+
+#: usr/local/www/interfaces_ppps_edit.php:697
+#: usr/local/www/interfaces_ppps_edit.php:698
+#: usr/local/www/interfaces_ppps_edit.php:704
+#: usr/local/www/interfaces_ppps_edit.php:702
+msgid "This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet. You almost always want this option. This compression ineffective for TCP connections with enabled modern extensions like time stamping or SACK, which modify TCP options between sequential packets."
+msgstr "Essa opção habilita a compressão de cabeçalho TCP de Van Jacobson, que salva muitos bytes por pacote TCP. Você deve sempre querer configurar essa opção. Essa compressão não tem efeito para conexões TCP com extensões modernas habilitadas como time stamping ou SACK, que modifica as opções TCP entre pacotes sequenciais."
+
+#: usr/local/www/interfaces_ppps_edit.php:703
+#: usr/local/www/interfaces_ppps_edit.php:704
+#: usr/local/www/interfaces_ppps_edit.php:710
+#: usr/local/www/interfaces_ppps_edit.php:708
+msgid "TCPmssFix"
+msgstr "TCPmssFix"
+
+#: usr/local/www/interfaces_ppps_edit.php:705
+#: usr/local/www/interfaces_ppps_edit.php:706
+#: usr/local/www/interfaces_ppps_edit.php:712
+#: usr/local/www/interfaces_ppps_edit.php:710
+msgid "Disable tcpmssfix (enabled by default)."
+msgstr "Desabilita tcpmssfix (habilita por padrão)."
+
+#: usr/local/www/interfaces_ppps_edit.php:706
+#: usr/local/www/interfaces_ppps_edit.php:707
+#: usr/local/www/interfaces_ppps_edit.php:713
+#: usr/local/www/interfaces_ppps_edit.php:711
+msgid "This option causes mpd to adjust incoming and outgoing TCP SYN segments so that the requested maximum segment size is not greater than the amount allowed by the interface MTU. This is necessary in many setups to avoid problems caused by routers that drop ICMP Datagram Too Big messages. Without these messages, the originating machine sends data, it passes the rogue router then hits a machine that has an MTU that is not big enough for the data. Because the IP Don't Fragment option is set, this machine sends an ICMP Datagram Too Big message back to the originator and drops the packet. The rogue router drops the ICMP message and the originator never gets to discover that it must reduce the fragment size or drop the IP Don't Fragment option from its outgoing data."
+msgstr "Essa opção faz com que o mpd ajuste segmentos TCP SYN de entrada e saída de modo que o tamanho máximo de segmento requerido não é maior que o total permitido pelo MTU da interface. Isso é necessário em muitas configurações para evitar problemas causados por roteadores que descartam mensagens ICMP Datagram Too Big. Sem essas mensagens, a máquina de origem envia dados, passa pelo roteador trapaceiro e então alcança a máquina que em um MTU que não é grande o bastante para o dado. Em função da opção Não Fragmentar IP estar configurada, a máquina envia uma mensagem de retorno ICMP Datagram Too Big para quem a originou e descarta o pacote. O roteador trapaceiro descarta a mensagem ICMP e quem a originou nunca descobre que deve reduzir o tamanho do fragmento ou descartar a opção de Não Fragmentar para seus dados de saída."
+
+#: usr/local/www/interfaces_ppps_edit.php:714
+#: usr/local/www/interfaces_ppps_edit.php:715
+#: usr/local/www/interfaces_ppps_edit.php:721
+#: usr/local/www/interfaces_ppps_edit.php:719
+msgid "ShortSeq"
+msgstr "ShortSeq"
+
+#: usr/local/www/interfaces_ppps_edit.php:716
+#: usr/local/www/interfaces_ppps_edit.php:717
+#: usr/local/www/interfaces_ppps_edit.php:723
+#: usr/local/www/interfaces_ppps_edit.php:721
+msgid "Disable shortseq (auto-negotiated by default)."
+msgstr "Desabilitar shortseq (auto-negociada por padrão)."
+
+#: usr/local/www/interfaces_ppps_edit.php:717
+#: usr/local/www/interfaces_ppps_edit.php:718
+#: usr/local/www/interfaces_ppps_edit.php:724
+#: usr/local/www/interfaces_ppps_edit.php:722
+msgid "This option is only meaningful if multi-link PPP is negotiated. It proscribes shorter multi-link fragment headers, saving two bytes on every frame. It is not necessary to disable this for connections that are not multi-link."
+msgstr "Essa opção somente faz sentido se o multi-link PPP é negociado. Ele proscreve cabeçalhos de fragmentos de multi-link mais curtos, salvando 2 bytes a cada frame. Não é necessário desabilitar isso para conexões que não são multi-link."
+
+#: usr/local/www/interfaces_ppps_edit.php:722
+#: usr/local/www/interfaces_ppps_edit.php:723
+#: usr/local/www/interfaces_ppps_edit.php:729
+#: usr/local/www/interfaces_ppps_edit.php:727
+msgid "ACFComp"
+msgstr "ACFComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:724
+#: usr/local/www/interfaces_ppps_edit.php:725
+#: usr/local/www/interfaces_ppps_edit.php:731
+#: usr/local/www/interfaces_ppps_edit.php:729
+msgid "Disable acfcomp (compression) (auto-negotiated by default)."
+msgstr "Desabilitar acfcomp (compressão) (auto-negociada por padrão)."
+
+#: usr/local/www/interfaces_ppps_edit.php:725
+#: usr/local/www/interfaces_ppps_edit.php:726
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:730
+msgid "Address and control field compression. This option only applies to asynchronous link types. It saves two bytes per frame."
+msgstr "Endereça e controla compressão de campo. Essa opção somente se aplica a tipos de link assíncronos. Ela salva 2 bytes por frame."
+
+#: usr/local/www/interfaces_ppps_edit.php:729
+#: usr/local/www/interfaces_ppps_edit.php:730
+#: usr/local/www/interfaces_ppps_edit.php:736
+#: usr/local/www/interfaces_ppps_edit.php:734
+msgid "ProtoComp"
+msgstr "ProtoComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:731
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:738
+#: usr/local/www/interfaces_ppps_edit.php:736
+msgid "Disable protocomp (compression) (auto-negotiated by default)."
+msgstr "Desabilitar protocomp (compressão) (auto-negociada por padrão)."
+
+#: usr/local/www/interfaces_ppps_edit.php:732
+#: usr/local/www/interfaces_ppps_edit.php:733
+#: usr/local/www/interfaces_ppps_edit.php:739
+#: usr/local/www/interfaces_ppps_edit.php:737
+msgid "Protocol field compression. This option saves one byte per frame for most frames."
+msgstr "Compressão de campo de protocolo. Essa opção salva 1 byte por frame para a maioria deles."
+
+#: usr/local/www/interfaces_ppps_edit.php:746
+#: usr/local/www/interfaces_ppps_edit.php:747
+#: usr/local/www/interfaces_ppps_edit.php:753
+#: usr/local/www/interfaces_ppps_edit.php:750
+msgid "Link Parameters"
+msgstr "Parâmetros de link"
+
+#: usr/local/www/interfaces_ppps_edit.php:753
+#: usr/local/www/interfaces_ppps_edit.php:754
+#: usr/local/www/interfaces_ppps_edit.php:760
+#: usr/local/www/interfaces_ppps_edit.php:757
+msgid "Set ONLY for MLPPP connections and ONLY when links have different bandwidths."
+msgstr "Configure SOMENTE para conexões MLPPP e SOMENTE quando links tiverem diferentes tamanhos de banda."
+
+#: usr/local/www/interfaces_ppps_edit.php:760
+#: usr/local/www/interfaces_ppps_edit.php:761
+#: usr/local/www/interfaces_ppps_edit.php:767
+#: usr/local/www/interfaces_ppps_edit.php:764
+msgid "MTU will default to 1492."
+msgstr "MTU será 1492 como padrão."
+
+#: usr/local/www/interfaces_ppps_edit.php:764
+#: usr/local/www/interfaces_ppps_edit.php:765
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:768
+msgid "MRU"
+msgstr "MRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:767
+#: usr/local/www/interfaces_ppps_edit.php:774
+#: usr/local/www/interfaces_ppps_edit.php:768
+#: usr/local/www/interfaces_ppps_edit.php:775
+#: usr/local/www/interfaces_ppps_edit.php:781
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:778
+msgid "will be auto-negotiated by default."
+msgstr "será auto-negociado por padrão."
+
+#: usr/local/www/interfaces_ppps_edit.php:771
+#: usr/local/www/interfaces_ppps_edit.php:772
+#: usr/local/www/interfaces_ppps_edit.php:778
+#: usr/local/www/interfaces_ppps_edit.php:775
+msgid "MRRU"
+msgstr "MRRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:774
+#: usr/local/www/interfaces_ppps_edit.php:775
+#: usr/local/www/interfaces_ppps_edit.php:781
+#: usr/local/www/interfaces_ppps_edit.php:778
+msgid "Set ONLY for MLPPP connections."
+msgstr "Configure SOMENTE conexões MLPP."
+
+#: usr/local/www/interfaces_qinq.php:64 usr/local/www/interfaces_qinq.php:66
+msgid "This QinQ cannot be deleted because it is still being used as an interface."
+msgstr "Esse QinQ não pode ser apagado porque ele ainda está sendo usado como uma interface."
+
+#: usr/local/www/interfaces_qinq.php:86
+#: usr/local/www/interfaces_qinq_edit.php:39
+#: usr/local/www/interfaces_qinq.php:89
+msgid "QinQ"
+msgstr "QinQ"
+
+#: usr/local/www/interfaces_qinq.php:117
+#: usr/local/www/interfaces_qinq_edit.php:356
+#: usr/local/www/interfaces_qinq_edit.php:357
+#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:121
+#: usr/local/www/interfaces_qinq_edit.php:360
+msgid "Tag"
+msgstr "Tag"
+
+#: usr/local/www/interfaces_qinq.php:118 usr/local/www/interfaces_qinq.php:119
+#: usr/local/www/interfaces_qinq.php:122
+msgid "QinQ members"
+msgstr "Membros QinQ"
+
+#: usr/local/www/interfaces_qinq.php:142 usr/local/www/interfaces_qinq.php:143
+#: usr/local/www/interfaces_qinq.php:146
+msgid "Do you really want to delete this QinQ?"
+msgstr "Você realmente quer apagar esse QinQ?"
+
+#: usr/local/www/interfaces_qinq.php:153 usr/local/www/interfaces_qinq.php:154
+#: usr/local/www/interfaces_qinq.php:157
+#, php-format
+msgid "Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do not explicitly support it, QinQ tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."
+msgstr "Nem todos os drivers/NICs suportam tags QinQ 802.1Q apropriadamente. Em cartões que não explicitam que a suportam, tags QinQ ainda funcionarão, mas um MTU reduzido pode causar problemas. Veja o livro %s para informações sobre cartões que suportam."
+
+#: usr/local/www/interfaces_qinq_edit.php:84
+#: usr/local/www/interfaces_qinq_edit.php:85
+msgid "First level tag cannot be empty."
+msgstr "Tag de primeiro nível não pode ser vazia."
+
+#: usr/local/www/interfaces_qinq_edit.php:86
+#: usr/local/www/interfaces_qinq_edit.php:87
+msgid "You are editing an existing entry and modifying the first level tag is not allowed."
+msgstr "Você está editando uma entrada existente e modificar a tag de primeiro nível não é permitido."
+
+#: usr/local/www/interfaces_qinq_edit.php:88
+#: usr/local/www/interfaces_qinq_edit.php:89
+msgid "You are editing an existing entry and modifying the interface is not allowed."
+msgstr "Você está editando uma entrada existente e modificar a interface não é permitido."
+
+#: usr/local/www/interfaces_qinq_edit.php:92
+#: usr/local/www/interfaces_qinq_edit.php:93
+msgid "QinQ level already exists for this interface, edit it!"
+msgstr "Um nível QinQ já existe para essa interface, edite-o!"
+
+#: usr/local/www/interfaces_qinq_edit.php:96
+#: usr/local/www/interfaces_qinq_edit.php:97
+msgid "A normal VLAN exists with this tag please remove it to use this tag for QinQ first level."
+msgstr "Uma VLAN normal existe com essa tag, por favor, apague-a para usar essa tag para o primeiro nível de QinQ."
+
+#: usr/local/www/interfaces_qinq_edit.php:123
+#: usr/local/www/interfaces_qinq_edit.php:133
+#: usr/local/www/interfaces_qinq_edit.php:124
+#: usr/local/www/interfaces_qinq_edit.php:134
+msgid "Tags can contain only numbers or a range in format #-#."
+msgstr "Tags podem conter somente números ou um intervalo no formato #-#."
+
+#: usr/local/www/interfaces_qinq_edit.php:193
+#: usr/local/www/interfaces_qinq_edit.php:194
+#: usr/local/www/interfaces_qinq_edit.php:197
+msgid "QinQ VLANs group"
+msgstr "Grupo VLAN de QinQ"
+
+#: usr/local/www/interfaces_qinq_edit.php:269
+#: usr/local/www/interfaces_qinq_edit.php:270
+#: usr/local/www/interfaces_qinq_edit.php:273
+#: usr/local/www/interfaces_qinq_edit.php:272
+msgid "members"
+msgstr "membros"
+
+#: usr/local/www/interfaces_qinq_edit.php:273
+#: usr/local/www/interfaces_qinq_edit.php:274
+#: usr/local/www/interfaces_qinq_edit.php:277
+#: usr/local/www/interfaces_qinq_edit.php:276
+msgid "detail"
+msgstr "detalhe"
+
+#: usr/local/www/interfaces_qinq_edit.php:285
+#: usr/local/www/interfaces_qinq_edit.php:286
+#: usr/local/www/interfaces_qinq_edit.php:289
+msgid "Interface QinQ Edit"
+msgstr "Editar Interface QinQ"
+
+#: usr/local/www/interfaces_qinq_edit.php:305
+#: usr/local/www/interfaces_qinq_edit.php:306
+#: usr/local/www/interfaces_qinq_edit.php:309
+msgid "Only QinQ capable interfaces will be shown."
+msgstr "Somente interfaces que suportam QinQ serão exibidas."
+
+#: usr/local/www/interfaces_qinq_edit.php:308
+#: usr/local/www/interfaces_qinq_edit.php:309
+#: usr/local/www/interfaces_qinq_edit.php:312
+msgid "First level tag"
+msgstr "Tag de primeiro nível"
+
+#: usr/local/www/interfaces_qinq_edit.php:313
+#: usr/local/www/interfaces_qinq_edit.php:314
+#: usr/local/www/interfaces_qinq_edit.php:317
+msgid "This is the first level VLAN tag. On top of this are stacked the member VLANs defined below."
+msgstr "Essa é a tag VLAN de primeiro nível. No topo dela estão empilhados os membros VLAN definidos abaixo."
+
+#: usr/local/www/interfaces_qinq_edit.php:333
+#: usr/local/www/interfaces_qinq_edit.php:334
+#: usr/local/www/interfaces_qinq_edit.php:337
+msgid "Adds interface to QinQ interface groups so you can write filter rules easily."
+msgstr "Adiciona interface ao grupo de interfaces QinQ para que você possa escrever regras de filtro facilmente."
+
+#: usr/local/www/interfaces_qinq_edit.php:350
+#: usr/local/www/interfaces_qinq_edit.php:351
+#: usr/local/www/interfaces_qinq_edit.php:354
+msgid "You can specify ranges in the input below. The format is pretty simple i.e 9-100 or 10.20..."
+msgstr "Você pode especificar intervalos no campo abaixo. O formato é muito simples, i.e. 9-100 ou 10.20..."
+
+#: usr/local/www/interfaces_wireless.php:63
+#: usr/local/www/interfaces_wireless.php:65
+msgid "This wireless clone cannot be deleted because it is assigned as an interface."
+msgstr "O clone sem fio não pode ser apagado porque ele está atribuído como uma interface."
+
+#: usr/local/www/interfaces_wireless.php:124
+#: usr/local/www/interfaces_wireless.php:125
+#: usr/local/www/interfaces_wireless.php:127
+msgid "Do you really want to delete this wireless clone?"
+msgstr "Você realmente deseja apagar esse clone sem fio?"
+
+#: usr/local/www/interfaces_wireless.php:135
+#: usr/local/www/interfaces_wireless.php:136
+#: usr/local/www/interfaces_wireless.php:138
+msgid "Here you can configure clones of wireless interfaces, which can be assigned as separate independent interfaces. Only available on wireless chipsets that support this, with limitations on the number that can be created in each mode."
+msgstr "Aqui você pode configurar clones para interfaces sem fio, os quais podem ser atribuídos como interfaces separadas independentes. Somente disponível em conjunto de chips sem fio que os suportam, com limitação do número que podem ser criadas em cada modo."
+
+#: usr/local/www/interfaces_wireless_edit.php:116
+#: usr/local/www/interfaces_wireless_edit.php:118
+msgid "This wireless clone cannot be modified because it is still assigned as an interface."
+msgstr "Esse clone sem fio não pode ser modificado porque ainda está atribuído a uma interface."
+
+#: usr/local/www/interfaces_wireless_edit.php:118
+#: usr/local/www/interfaces_wireless_edit.php:120
+msgid "Use the configuration page for the assigned interface to change the mode."
+msgstr "Use a página de configuração para a interface atribuída modificar o modo."
+
+#: usr/local/www/interfaces_wireless_edit.php:123
+#: usr/local/www/interfaces_wireless_edit.php:125
+#, php-format
+msgid "Error creating interface with mode %1$s. The %2$s interface may not support creating more clones with the selected mode."
+msgstr "Erro ao criar interface com o modo %1$s. A interface %2$s pode não suportar a criação de mais clones com o modo selecionado."
+
+#: usr/local/www/interfaces_wireless_edit.php:128
+#: usr/local/www/interfaces_wireless_edit.php:130
+#, php-format
+msgid "Created with id %s"
+msgstr "Criado com o código %s"
+
+#: usr/local/www/interfaces_wireless_edit.php:131
+#: usr/local/www/interfaces_wireless_edit.php:133
+msgid "Created without id"
+msgstr "Criado sem código"
+
+#: usr/local/www/interfaces_wireless_edit.php:156
+#: usr/local/www/interfaces_wireless_edit.php:158
+msgid "Wireless clone configuration"
+msgstr "Configuração clone sem fio"
+
+#: usr/local/www/load_balancer_monitor.php:72
+msgid "This entry cannot be deleted because it is still referenced by at least one pool."
+msgstr "Essa entrada não pode ser apagada porque ainda está sendo referenciada por pelo menos um pool."
+
+#: usr/local/www/load_balancer_monitor.php:102
+#: usr/local/www/load_balancer_relay_protocol.php:114
+#: usr/local/www/load_balancer_setting.php:111
+#: usr/local/www/load_balancer_setting.php:110
+#: usr/local/www/load_balancer_monitor.php:100
+#: usr/local/www/load_balancer_relay_protocol.php:112
+msgid "The load balancer configuration has been changed"
+msgstr "A configuração do balanceador de carga foi modificada"
+
+#: usr/local/www/vpn_pppoe.php:96 usr/local/www/vpn_pppoe.php:97
+#: usr/local/www/vpn_pppoe.php:98
+msgid "The PPPoE entry list has been changed"
+msgstr "A lista de entrada PPPoE foi modificada"
+
+#: usr/local/www/vpn_pppoe.php:103
+#: usr/local/www/services_captiveportal_zones.php:54
+#: usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/services_captiveportal_zones.php:55
+#: usr/local/www/vpn_pppoe.php:105
+msgid "Number of users"
+msgstr "Número de usuários"
+
+#: usr/local/www/vpn_pppoe.php:109 usr/local/www/vpn_pppoe.php:144
+#: usr/local/www/vpn_pppoe.php:110 usr/local/www/vpn_pppoe.php:145
+#: usr/local/www/vpn_pppoe.php:111 usr/local/www/vpn_pppoe.php:146
+msgid "add a new pppoe instance"
+msgstr "adicione uma nova instância pppoe"
+
+#: usr/local/www/vpn_pppoe.php:131 usr/local/www/vpn_pppoe.php:132
+#: usr/local/www/vpn_pppoe.php:133
+msgid "edit PPPoE instance"
+msgstr "editar instância pppoe"
+
+#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133
+#: usr/local/www/vpn_pppoe.php:134
+msgid "Do you really want to delete this entry? All elements that still use it will become invalid (e.g. filter rules)!"
+msgstr "Você realmente deseja apagar essa entrada? Todos os elementos que ainda a usam serão invalidados (e.g. regras de filtro)!"
+
+#: usr/local/www/vpn_pppoe.php:132 usr/local/www/vpn_pppoe.php:133
+#: usr/local/www/vpn_pppoe.php:134
+msgid "delete pppoe instance"
+msgstr "apagar instância pppoe"
+
+#: usr/local/www/load_balancer_monitor_edit.php:66
+msgid "Load Balancer: Monitor:"
+msgstr "Balanceados de Carga: Monitor:"
+
+#: usr/local/www/load_balancer_monitor_edit.php:95
+msgid "This monitor name has already been used. Monitor names must be unique."
+msgstr "Esse nome de monitor já foi usado. Nomes de monitores devem ser únicos."
+
+#: usr/local/www/load_balancer_monitor_edit.php:98
+#: usr/local/www/load_balancer_pool_edit.php:86
+#: usr/local/www/load_balancer_virtual_server_edit.php:89
+#: usr/local/www/load_balancer_relay_action_edit.php:127
+#: usr/local/www/load_balancer_relay_protocol_edit.php:89
+msgid "You cannot use spaces in the 'name' field."
+msgstr "Você não pode usar espaços no campo 'nome'."
+
+#: usr/local/www/load_balancer_monitor_edit.php:112
+#: usr/local/www/services_dhcp_edit.php:118
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dnsmasq_edit.php:86
+#: usr/local/www/services_dhcpv6_edit.php:117
+#: usr/local/www/services_dhcp_edit.php:120
+#: usr/local/www/services_dhcpv6_edit.php:120
+#: usr/local/www/services_dhcp_edit.php:154
+msgid "The hostname can only contain the characters A-Z, 0-9 and '-'."
+msgstr "O nome do host somente pode conter os caracteres de A-Z, 0-9 e '-'."
+
+#: usr/local/www/load_balancer_monitor_edit.php:118
+msgid "HTTP(s) codes must be from RFC2616."
+msgstr "Código(s) HTTP devem ser da RFC2616."
+
+#: usr/local/www/load_balancer_monitor_edit.php:122
+msgid "The path to monitor must be set."
+msgstr "O caminho para o monitor deve ser configurado."
+
+#: usr/local/www/load_balancer_monitor_edit.php:145
+#, php-format
+msgid "modified '%s' monitor:"
+msgstr "monitor '%s' modificado:"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:197
+msgid "ICMP"
+msgstr "ICMP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:268
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/system_advanced_admin.php:311
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:266
+#: usr/local/www/system_advanced_admin.php:332
+msgid "HTTP"
+msgstr "HTTP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:301
+#: usr/local/www/system_advanced_admin.php:314
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:299
+#: usr/local/www/system_advanced_admin.php:335
+msgid "HTTPS"
+msgstr "HTTPS"
+
+#: usr/local/www/load_balancer_monitor_edit.php:199
+#: usr/local/www/load_balancer_monitor_edit.php:335
+#: usr/local/www/load_balancer_monitor_edit.php:197
+#: usr/local/www/load_balancer_monitor_edit.php:333
+msgid "Send/Expect"
+msgstr "Enviar/Esperar"
+
+#: usr/local/www/load_balancer_monitor_edit.php:232
+#: usr/local/www/load_balancer_monitor_edit.php:230
+msgid "Edit Load Balancer - Monitor entry"
+msgstr "Editar Balanceador de Carga - entrada de Monitor"
+
+#: usr/local/www/load_balancer_monitor_edit.php:272
+#: usr/local/www/load_balancer_monitor_edit.php:305
+#: usr/local/www/load_balancer_monitor_edit.php:270
+#: usr/local/www/load_balancer_monitor_edit.php:303
+msgid "Path"
+msgstr "Caminho"
+
+#: usr/local/www/load_balancer_monitor_edit.php:278
+#: usr/local/www/load_balancer_monitor_edit.php:311
+#: usr/local/www/diag_ping.php:55 usr/local/www/diag_ping.php:90
+#: usr/local/www/services_dnsmasq.php:243
+#: usr/local/www/services_dnsmasq_edit.php:141
+#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:89
+#: usr/local/www/services_rfc2136_edit.php:169
+#: usr/local/www/services_dnsmasq_edit.php:196
+#: usr/local/www/services_dnsmasq_edit.php:237
+#: usr/local/www/services_unbound.php:279
+#: usr/local/www/services_dnsmasq.php:244
+#: usr/local/www/services_dnsmasq_edit.php:197
+#: usr/local/www/services_dnsmasq_edit.php:238
+#: usr/local/www/load_balancer_monitor_edit.php:276
+#: usr/local/www/load_balancer_monitor_edit.php:309
+#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:117
+#: usr/local/www/diag_traceroute.php:93 usr/local/www/services_dnsmasq.php:269
+#: usr/local/www/diag_traceroute.php:63 usr/local/www/diag_traceroute.php:99
+#: usr/local/www/diag_ping.php:57 usr/local/www/diag_ping.php:97
+#: usr/local/www/services_dnsmasq.php:282
+#: usr/local/www/services_dnsmasq.php:346
+#: usr/local/www/services_rfc2136_edit.php:174
+msgid "Host"
+msgstr "Host"
+
+#: usr/local/www/load_balancer_monitor_edit.php:280
+#: usr/local/www/load_balancer_monitor_edit.php:313
+#: usr/local/www/load_balancer_monitor_edit.php:278
+#: usr/local/www/load_balancer_monitor_edit.php:311
+msgid "Hostname for Host: header if needed."
+msgstr "Nome de host para Host: adicionar cabeçalho se necessário."
+
+#: usr/local/www/load_balancer_monitor_edit.php:284
+#: usr/local/www/load_balancer_monitor_edit.php:317
+#: usr/local/www/load_balancer_monitor_edit.php:282
+#: usr/local/www/load_balancer_monitor_edit.php:315
+msgid "HTTP Code"
+msgstr "Código HTTP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:339
+#: usr/local/www/load_balancer_monitor_edit.php:337
+msgid "Send string"
+msgstr "Enviar string"
+
+#: usr/local/www/load_balancer_monitor_edit.php:345
+#: usr/local/www/load_balancer_monitor_edit.php:343
+msgid "Expect string"
+msgstr "Esperar por string"
+
+#: usr/local/www/load_balancer_pool_edit.php:65
+msgid "Load Balancer: Pool:"
+msgstr "Balanceador de Carga: Pool:"
+
+#: usr/local/www/load_balancer_pool_edit.php:76
+msgid "Server List"
+msgstr "Lista de Servidor"
+
+#: usr/local/www/load_balancer_pool_edit.php:83
+msgid "This pool name has already been used. Pool names must be unique."
+msgstr "Esse nome de pool já foi usado. Nomes de pool devem ser únicos."
+
+#: usr/local/www/load_balancer_pool_edit.php:89
+#: usr/local/www/load_balancer_virtual_server_edit.php:92
+msgid "The port must be an integer between 1 and 65535."
+msgstr "A porta deve ser um inteiro entre 1 e 65535."
+
+#: usr/local/www/load_balancer_pool_edit.php:93
+msgid "The retry value must be an integer between 1 and 65535."
+msgstr "O valor de retorno deve ser um inteiro entre 1 e 65535."
+
+#: usr/local/www/load_balancer_pool_edit.php:98
+#, php-format
+msgid "%s is not a valid IP address (in \"enabled\" list)."
+msgstr "%s não é um endereço IP válido (na lista de \"habilitados\")."
+
+#: usr/local/www/load_balancer_pool_edit.php:105
+#, php-format
+msgid "%s is not a valid IP address (in \"disabled\" list)."
+msgstr "%s não é um endereço IP válido (na lista de \"desabilitados\")."
+
+#: usr/local/www/load_balancer_pool_edit.php:114
+#: usr/local/www/load_balancer_pool_edit.php:120
+msgid "Invalid monitor chosen."
+msgstr "Monitor escolhido inválido."
+
+#: usr/local/www/load_balancer_pool_edit.php:121
+#: usr/local/www/load_balancer_pool_edit.php:127
+#, php-format
+msgid " modified '%s' pool:"
+msgstr " pool '%s' modificado:"
+
+#: usr/local/www/load_balancer_pool_edit.php:178
+#: usr/local/www/load_balancer_pool_edit.php:186
+#: usr/local/www/load_balancer_pool_edit.php:184
+msgid "Add/edit Load Balancer - Pool entry"
+msgstr "Adicionar/editar Balanceador de Carga - entrada do Pool"
+
+#: usr/local/www/load_balancer_pool_edit.php:190
+#: usr/local/www/load_balancer_pool_edit.php:198
+#: usr/local/www/load_balancer_pool_edit.php:196
+msgid "Load Balance"
+msgstr "Balancear Carga"
+
+#: usr/local/www/load_balancer_pool_edit.php:191
+#: usr/local/www/load_balancer_pool_edit.php:199
+#: usr/local/www/load_balancer_pool_edit.php:197
+msgid "Manual Failover"
+msgstr "Failover manual"
+
+#: usr/local/www/load_balancer_pool_edit.php:206
+#: usr/local/www/load_balancer_pool_edit.php:215
+#: usr/local/www/load_balancer_pool_edit.php:213
+msgid "This is the port your servers are listening on."
+msgstr "Essa é a porta em que seus servidores estão lendo."
+
+#: usr/local/www/load_balancer_pool_edit.php:210
+#: usr/local/www/load_balancer_pool_edit.php:227
+#: usr/local/www/load_balancer_pool_edit.php:225
+msgid "Retry"
+msgstr "Retorno"
+
+#: usr/local/www/load_balancer_pool_edit.php:213
+#: usr/local/www/load_balancer_pool_edit.php:230
+#: usr/local/www/load_balancer_pool_edit.php:228
+msgid "Optionally specify how many times to retry checking a server before declaring it down."
+msgstr "Opcionalmente, especifique quantas vezes verificar o servidor antes de declará-lo inoperante."
+
+#: usr/local/www/load_balancer_pool_edit.php:220
+#: usr/local/www/load_balancer_pool_edit.php:237
+#: usr/local/www/load_balancer_pool_edit.php:235
+msgid "Add item to pool"
+msgstr "Adicione item no pool"
+
+#: usr/local/www/load_balancer_pool_edit.php:238
+#: usr/local/www/load_balancer_pool_edit.php:255
+#: usr/local/www/load_balancer_pool_edit.php:253
+msgid "Please add a monitor IP address on the monitors tab if you wish to use this feature."
+msgstr "Por favor, adicione um endereço IP monitor na aba de monitores se desejar usar essa funcionalidade."
+
+#: usr/local/www/load_balancer_pool_edit.php:244
+#: usr/local/www/load_balancer_pool_edit.php:261
+#: usr/local/www/load_balancer_pool_edit.php:259
+msgid "Server IP Address"
+msgstr "Endereço IP do Servidor"
+
+#: usr/local/www/load_balancer_pool_edit.php:247
+#: usr/local/www/load_balancer_pool_edit.php:264
+#: usr/local/www/load_balancer_pool_edit.php:262
+msgid "Add to pool"
+msgstr "Adicionar ao pool"
+
+#: usr/local/www/load_balancer_pool_edit.php:254
+#: usr/local/www/load_balancer_pool_edit.php:271
+#: usr/local/www/load_balancer_pool_edit.php:269
+msgid "Current Pool Members"
+msgstr "Membros atuais do Pool"
+
+#: usr/local/www/load_balancer_pool_edit.php:264
+#: usr/local/www/load_balancer_pool_edit.php:281
+#: usr/local/www/load_balancer_pool_edit.php:279
+msgid "Pool Disabled"
+msgstr "Pool Desabilitada"
+
+#: usr/local/www/load_balancer_pool_edit.php:277
+#: usr/local/www/load_balancer_pool_edit.php:300
+#: usr/local/www/load_balancer_relay_protocol_edit.php:253
+#: usr/local/www/load_balancer_pool_edit.php:294
+#: usr/local/www/load_balancer_pool_edit.php:317
+#: usr/local/www/load_balancer_relay_protocol_edit.php:251
+#: usr/local/www/load_balancer_pool_edit.php:292
+#: usr/local/www/load_balancer_pool_edit.php:315
+msgid "Remove"
+msgstr "Remover"
+
+#: usr/local/www/load_balancer_pool_edit.php:287
+#: usr/local/www/load_balancer_pool_edit.php:304
+#: usr/local/www/load_balancer_pool_edit.php:302
+msgid "Enabled (default)"
+msgstr "Habilitar (padrão)"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:61
+msgid "Load Balancer: Virtual Server:"
+msgstr "Balanceador de Carga: Servidor Virtual:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:77
+#: usr/local/www/load_balancer_virtual_server_edit.php:261
+#: usr/local/www/load_balancer_relay_protocol.php:100
+#: usr/local/www/load_balancer_relay_protocol_edit.php:137
+#: usr/local/www/load_balancer_virtual_server_edit.php:250
+#: usr/local/www/load_balancer_virtual_server_edit.php:248
+msgid "Relay Protocol"
+msgstr "Protocolo Relay"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:86
+msgid "This virtual server name has already been used. Virtual server names must be unique."
+msgstr "O nome do servidor virtual já está sendo usado. Nomes de servidores virtuais devem ser únicos."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:95
+#, php-format
+msgid "%s is not a valid IP address."
+msgstr "%s não é um endereço IP válido."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:102
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+#, php-format
+msgid "modified '%s' vs:"
+msgstr "servidor virtual '%s' modificado:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+#: usr/local/www/load_balancer_virtual_server_edit.php:106
+#, php-format
+msgid "created '%s' vs:"
+msgstr "servidor virtual '%s' criado:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:134
+#: usr/local/www/status_lb_vs.php:56
+#: usr/local/www/load_balancer_virtual_server_edit.php:136
+msgid "Virtual Server"
+msgstr "Servidor Virtual"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:180
+#: usr/local/www/load_balancer_virtual_server_edit.php:154
+#: usr/local/www/load_balancer_virtual_server_edit.php:152
+msgid "Edit Load Balancer - Virtual Server entry"
+msgstr "Editar Balanceador de Carga - entrada de Servidor Virtual"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:198
+#: usr/local/www/load_balancer_virtual_server_edit.php:172
+#: usr/local/www/load_balancer_virtual_server_edit.php:170
+msgid "This is normally the WAN IP address that you would like the server to listen on. All connections to this IP and port will be forwarded to the pool cluster."
+msgstr "Isso é, normalmente, o endereço IP WAN em que você gostaria que o servidor lesse. Toas as conexões para esse IP e porta serão encaminhadas para o cluster de pool."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:205
+#: usr/local/www/load_balancer_virtual_server_edit.php:186
+#: usr/local/www/load_balancer_virtual_server_edit.php:184
+msgid "This is the port that the clients will connect to. All connections to this port will be forwarded to the pool cluster."
+msgstr "Essa é a porta na qual os clientes irão conectar. Todas as conexões nessa porta serão encaminhadas para o cluster de pool."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:209
+#: usr/local/www/load_balancer_virtual_server_edit.php:198
+#: usr/local/www/load_balancer_virtual_server_edit.php:196
+msgid "Virtual Server Pool"
+msgstr "Pool de Servidor Virtual"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:212
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+#: usr/local/www/load_balancer_virtual_server_edit.php:201
+#: usr/local/www/load_balancer_virtual_server_edit.php:220
+#: usr/local/www/load_balancer_virtual_server_edit.php:199
+#: usr/local/www/load_balancer_virtual_server_edit.php:218
+msgid "Please add a pool on the Pools tab to use this feature."
+msgstr "Por favor, adicione um pool na aba de Pools para usar essa funcionalidade."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:244
+#: usr/local/www/load_balancer_virtual_server_edit.php:233
+#: usr/local/www/load_balancer_virtual_server_edit.php:231
+msgid "This is the server that clients will be redirected to if *ALL* servers in the pool are offline."
+msgstr "Esse é o servidor para o qual os clientes serão redirecionados de *TODOS* os servidores no pool estiverem desligados."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:279
+#: usr/local/www/status_captiveportal_test.php:92
+#: usr/local/www/load_balancer_virtual_server_edit.php:268
+#: usr/local/www/status_captiveportal_test.php:93
+#: usr/local/www/load_balancer_virtual_server_edit.php:266
+#: usr/local/www/status_captiveportal_expire.php:92
+#: usr/local/www/status_captiveportal_test.php:94
+msgid "Submit"
+msgstr "Submeter"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/load_balancer_virtual_server_edit.php:278
+#: usr/local/www/load_balancer_virtual_server_edit.php:276
+msgid "Don't forget to add a firewall rule for the virtual server/pool after you're finished setting it up."
+msgstr "Não esqueça de adicionar uma regra de firewall para o servidor/pool virtual depois que finalizar as configurações."
+
+#: usr/local/www/pkg_mgr.php:70 usr/local/www/pkg_mgr.php:82
+#, php-format
+msgid "Unable to retrieve package info from %s. Cached data will be used."
+msgstr "Incapaz de obter info de pacote de %s. Dados em cache serão usados."
+
+#: usr/local/www/pkg_mgr.php:73 usr/local/www/pkg_mgr.php:85
+#, php-format
+msgid "Unable to communicate with %1$s. Please verify DNS and interface configuration, and that %2$s has functional Internet connectivity."
+msgstr "Incapaz de comunicar-se com %1$s. Por favor, verifique a configuração de DNS e interface, e que %2$s tem conectividade com Internet em funcionamento."
+
+#: usr/local/www/pkg_mgr.php:122 usr/local/www/pkg_mgr.php:216
+#: usr/local/www/pkg_mgr.php:137 usr/local/www/pkg_mgr.php:243
+#: usr/local/www/pkg_mgr.php:246 usr/local/www/pkg_mgr.php:140
+#: usr/local/www/pkg_mgr.php:249
+msgid "There are currently no packages available for installation."
+msgstr "Atualmente não há pacotes disponíveis para instalação."
+
+#: usr/local/www/pkg_mgr.php:192 usr/local/www/pkg_mgr.php:228
+#: usr/local/www/pkg_mgr.php:231
+msgid "platform"
+msgstr "plataforma"
+
+#: usr/local/www/pkg_mgr.php:210
+msgid "Do you really want to install this package?"
+msgstr "Você realmente deseja instalar esse pacote?"
+
+#: usr/local/www/pkg_mgr_install.php:57 usr/local/www/pkg_mgr_install.php:55
+msgid "Install Package"
+msgstr "Instalar Pacote"
+
+#: usr/local/www/pkg_mgr_install.php:72 usr/local/www/pkg_mgr_install.php:70
+msgid "Available packages"
+msgstr "Pacotes disponíveis"
+
+#: usr/local/www/pkg_mgr_install.php:75 usr/local/www/pkg_mgr_install.php:73
+msgid "Installed packages"
+msgstr "Pacotes instalados"
+
+#: usr/local/www/pkg_mgr_install.php:76 usr/local/www/pkg_mgr_install.php:74
+msgid "Package Installer"
+msgstr "Instalador de Pacote"
+
+#: usr/local/www/pkg_mgr_install.php:124 usr/local/www/pkg_mgr_install.php:134
+#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:128
+msgid "Creating restore point before package installation."
+msgstr "Criando ponto de restauração antes da instalação do pacote."
+
+#: usr/local/www/pkg_mgr_install.php:132 usr/local/www/pkg_mgr_install.php:133
+#: usr/local/www/pkg_mgr_install.php:141 usr/local/www/pkg_mgr_install.php:142
+#: usr/local/www/pkg_mgr_install.php:139 usr/local/www/pkg_mgr_install.php:140
+#: usr/local/www/pkg_mgr_install.php:135 usr/local/www/pkg_mgr_install.php:136
+msgid "Package deleted."
+msgstr "Pacote apagado."
+
+#: usr/local/www/pkg_mgr_install.php:147 usr/local/www/pkg_mgr_install.php:148
+#: usr/local/www/pkg_mgr_install.php:156 usr/local/www/pkg_mgr_install.php:157
+#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155
+#: usr/local/www/pkg_mgr_install.php:150 usr/local/www/pkg_mgr_install.php:151
+msgid "Package reinstallation failed."
+msgstr "Reinstalação do pacote falhou."
+
+#: usr/local/www/pkg_mgr_install.php:151 usr/local/www/pkg_mgr_install.php:152
+#: usr/local/www/pkg_mgr_install.php:160 usr/local/www/pkg_mgr_install.php:161
+#: usr/local/www/pkg_mgr_install.php:158 usr/local/www/pkg_mgr_install.php:159
+#: usr/local/www/pkg_mgr_install.php:154 usr/local/www/pkg_mgr_install.php:155
+msgid "Package reinstalled."
+msgstr "Pacote reinstalado."
+
+#: usr/local/www/pkg_mgr_install.php:163 usr/local/www/pkg_mgr_install.php:172
+#: usr/local/www/pkg_mgr_install.php:170 usr/local/www/pkg_mgr_install.php:166
+msgid "installation completed."
+msgstr "instalação completa."
+
+#: usr/local/www/pkg_mgr_install.php:166 usr/local/www/pkg_mgr_install.php:175
+#: usr/local/www/pkg_mgr_install.php:173 usr/local/www/pkg_mgr_install.php:169
+#, php-format
+msgid "Could not find %s."
+msgstr "Não pôde encontrar %s."
+
+#: usr/local/www/pkg_mgr_install.php:182 usr/local/www/pkg_mgr_install.php:183
+#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:192
+#: usr/local/www/pkg_mgr_install.php:188 usr/local/www/pkg_mgr_install.php:189
+#: usr/local/www/pkg_mgr_install.php:184 usr/local/www/pkg_mgr_install.php:185
+msgid "All packages reinstalled."
+msgstr "Todos os pacotes reinstalados."
+
+#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:194
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:204
+#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:203
+#: usr/local/www/pkg_mgr_install.php:195
+msgid "Installation of"
+msgstr "Instalação de"
+
+#: usr/local/www/pkg_mgr_install.php:190 usr/local/www/pkg_mgr_install.php:200
+#: usr/local/www/pkg_mgr_install.php:199 usr/local/www/pkg_mgr_install.php:195
+msgid "FAILED!"
+msgstr "FALHOU!"
+
+#: usr/local/www/pkg_mgr_install.php:191 usr/local/www/pkg_mgr_install.php:201
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:196
+msgid "Installation halted."
+msgstr "Instalação interrompida."
+
+#: usr/local/www/pkg_mgr_install.php:194 usr/local/www/pkg_mgr_install.php:204
+#: usr/local/www/pkg_mgr_install.php:203 usr/local/www/pkg_mgr_install.php:199
+msgid "completed."
+msgstr "completa."
+
+#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208
+#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203
+msgid "Installation completed."
+msgstr "Instalação completa."
+
+#: usr/local/www/pkg_mgr_install.php:198 usr/local/www/pkg_mgr_install.php:208
+#: usr/local/www/pkg_mgr_install.php:207 usr/local/www/pkg_mgr_install.php:203
+msgid "setup instructions"
+msgstr "instruções de instalação"
+
+#: usr/local/www/pkg_mgr_install.php:200 usr/local/www/pkg_mgr_install.php:210
+#: usr/local/www/pkg_mgr_install.php:209 usr/local/www/pkg_mgr_install.php:205
+msgid "Installation completed. Please check to make sure that the package is configured from the respective menu then start the package."
+msgstr "Instalação completa. Por favor, verifique para ter certeza de que o pacote está configurado no respectivo menu e então inicie o pacote."
+
+#: usr/local/www/preload.php:6
+msgid "You are not allowed to access this page."
+msgstr "Você não tem permissão de acessar essa página."
+
+#: usr/local/www/progress.php:25 usr/local/www/progress.php:22
+msgid "Invalid Meter ID"
+msgstr "ID de Medida inválido"
+
+#: usr/local/www/progress.php:46 usr/local/www/progress.php:43
+msgid "UPLOAD completed"
+msgstr "UPLOAD completo"
+
+#: usr/local/www/progress.php:58 usr/local/www/progress.php:55
+msgid "Uploading Files... Please wait..."
+msgstr "Carregando arquivos... por favor aguarde..."
+
+#: usr/local/www/progress.php:68 usr/local/www/progress.php:65
+msgid "Uploading files..."
+msgstr "Carregando arquivos..."
+
+#: usr/local/www/progress.php:87 usr/local/www/progress.php:84
+msgid "Time Remaining:"
+msgstr "Tempo restante:"
+
+#: usr/local/www/progress.php:88 usr/local/www/progress.php:85
+msgid "Speed:"
+msgstr "Velocidade:"
+
+#: usr/local/www/progress.php:88 usr/local/www/progress.php:85
+msgid "KB/sec"
+msgstr "KB/sec"
+
+#: usr/local/www/progress.php:92 usr/local/www/progress.php:89
+msgid "Uploaded:"
+msgstr "Carregado:"
+
+#: usr/local/www/progress.php:93 usr/local/www/progress.php:90
+msgid "File Size:"
+msgstr "Tamanho do Arquivo:"
+
+#: usr/local/www/progress.php:97 usr/local/www/progress.php:94
+msgid "Completed:"
+msgstr "Completo:"
+
+#: usr/local/www/diag_dns.php:34 usr/local/www/diag_dns.php:250
+#: usr/local/www/fbegin.inc:192 usr/local/www/fbegin.inc:210
+#: usr/local/www/diag_dns.php:249 usr/local/www/fbegin.inc:218
+#: usr/local/www/fbegin.inc:209 usr/local/www/diag_dns.php:266
+msgid "DNS Lookup"
+msgstr "DNS Lookup"
+
+#: usr/local/www/diag_dns.php:100
+msgid "Host must be a valid hostname or IP address."
+msgstr "Host deve ser um hostname ou endereço IP válido."
+
+#: usr/local/www/diag_dns.php:110 usr/local/www/diag_dns.php:109
+msgid "No response"
+msgstr "Sem resposta"
+
+#: usr/local/www/diag_dns.php:143 usr/local/www/diag_dns.php:142
+msgid "No record found"
+msgstr "Nenhum registro encontrado"
+
+#: usr/local/www/diag_dns.php:158 usr/local/www/diag_dns.php:157
+#: usr/local/www/diag_dns.php:174
+msgid "Resolve DNS hostname or IP"
+msgstr "Resolva nome de host de DNS ou IP"
+
+#: usr/local/www/diag_dns.php:161 usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185 usr/local/www/diag_dns.php:160
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:186
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:187 usr/local/www/diag_dns.php:177
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:189
+msgid "Hostname or IP"
+msgstr "Hostname ou IP"
+
+#: usr/local/www/diag_dns.php:203 usr/local/www/diag_dns.php:202
+#: usr/local/www/diag_dns.php:219
+msgid "Resolution time per server"
+msgstr "Tempo de resolução por servidor"
+
+#: usr/local/www/diag_dns.php:211 usr/local/www/diag_dns.php:210
+#: usr/local/www/diag_dns.php:227
+msgid "Query time"
+msgstr "Tempo de consulta"
+
+#: usr/local/www/diag_dns.php:235 usr/local/www/diag_dns.php:234
+#: usr/local/www/diag_dns.php:251
+msgid "More Information:"
+msgstr "Mais informação:"
+
+#: usr/local/www/diag_dns.php:237 usr/local/www/diag_ping.php:43
+#: usr/local/www/diag_ping.php:87 usr/local/www/diag_ping.php:119
+#: usr/local/www/fbegin.inc:200 usr/local/www/fbegin.inc:218
+#: usr/local/www/diag_dns.php:236 usr/local/www/fbegin.inc:226
+#: usr/local/www/fbegin.inc:217 usr/local/www/diag_ping.php:44
+#: usr/local/www/diag_ping.php:94 usr/local/www/diag_ping.php:141
+#: usr/local/www/diag_dns.php:253
+msgid "Ping"
+msgstr "Ping"
+
+#: usr/local/www/diag_dns.php:238 usr/local/www/diag_traceroute.php:45
+#: usr/local/www/diag_traceroute.php:86 usr/local/www/diag_traceroute.php:112
+#: usr/local/www/fbegin.inc:209 usr/local/www/fbegin.inc:227
+#: usr/local/www/diag_dns.php:237 usr/local/www/fbegin.inc:236
+#: usr/local/www/diag_traceroute.php:90 usr/local/www/diag_traceroute.php:136
+#: usr/local/www/fbegin.inc:228 usr/local/www/diag_traceroute.php:46
+#: usr/local/www/diag_traceroute.php:96 usr/local/www/diag_traceroute.php:155
+#: usr/local/www/diag_dns.php:254
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: usr/local/www/diag_dns.php:240 usr/local/www/diag_dns.php:239
+#: usr/local/www/diag_dns.php:256
+msgid "NOTE: The following links are to external services, so their reliability cannot be guaranteed."
+msgstr "NOTA: Os seguintes links são para serviços externos, assim a sua confiabilidade não pode ser garantida."
+
+#: usr/local/www/diag_dns.php:241 usr/local/www/diag_dns.php:240
+#: usr/local/www/diag_dns.php:257
+msgid "IP WHOIS @ DNS Stuff"
+msgstr "IP WHOIS @ DNS Stuff"
+
+#: usr/local/www/diag_dns.php:242 usr/local/www/diag_dns.php:241
+#: usr/local/www/diag_dns.php:258
+msgid "IP Info @ DNS Stuff"
+msgstr "IP Info @ DNS Stuff"
+
+#: usr/local/www/reboot.php:44
+msgid " Yes "
+msgstr " Sim"
+
+#: usr/local/www/reboot.php:45 usr/local/www/reboot.php:76
+#: usr/local/www/reboot.php:56
+msgid "The system is rebooting now. This may take one minute."
+msgstr "O sistema está reiniciando agora. Isso pode levar alguns minutos."
+
+#: usr/local/www/reboot.php:51 usr/local/www/reboot.php:48
+msgid "Reboot System"
+msgstr "Reiniciar Sistema"
+
+#: usr/local/www/reboot.php:59 usr/local/www/reboot.php:62
+msgid "Are you sure you want to reboot the system?"
+msgstr "Você tem certeza que deseja reiniciar o sistema?"
+
+#: usr/local/www/restart_httpd.php:42
+msgid "Restarting httpd"
+msgstr "Reiniciando httpd"
+
+#: usr/local/www/restart_httpd.php:50
+msgid "Mounting file systems read/write"
+msgstr "Montando sistema de arquivos leitura/escrita"
+
+#: usr/local/www/restart_httpd.php:53
+msgid "Forcing all PHP file permissions to 0755"
+msgstr "Forçando todas as permissões de arquivos PHP para 0755"
+
+#: usr/local/www/restart_httpd.php:56
+msgid "Mounting file systems read only"
+msgstr "Montando sistema de arquivo de somente leitura"
+
+#: usr/local/www/restart_httpd.php:59
+msgid "Restarting mini_httpd"
+msgstr "Reiniciando mimi-httpd"
+
+#: usr/local/www/edit.php:39 usr/local/www/edit.php:42
+#: usr/local/www/edit.php:41
+msgid "Edit file"
+msgstr "Editar arquivo"
+
+#: usr/local/www/edit.php:46 usr/local/www/edit.php:62
+#: usr/local/www/edit.php:49 usr/local/www/edit.php:65
+#: usr/local/www/edit.php:48
+msgid "No file name specified"
+msgstr "Nenhum nome de arquivo foi especificado"
+
+#: usr/local/www/edit.php:48 usr/local/www/edit.php:51
+#: usr/local/www/edit.php:50
+msgid "Loading a directory is not supported"
+msgstr "Carregar um diretório não é suportado"
+
+#: usr/local/www/edit.php:50 usr/local/www/edit.php:53
+#: usr/local/www/edit.php:52
+msgid "File does not exist or is not a regular file"
+msgstr "O arquivo não existe ou não é um arquivo regular"
+
+#: usr/local/www/edit.php:54 usr/local/www/edit.php:57
+#: usr/local/www/edit.php:56
+msgid "Failed to read file"
+msgstr "Falha ao ler o arquivo"
+
+#: usr/local/www/edit.php:74 usr/local/www/edit.php:77
+msgid "Failed to write file"
+msgstr "Falha ao escrever o arquivo"
+
+#: usr/local/www/edit.php:76 usr/local/www/edit.php:79
+msgid "Error while writing file"
+msgstr "Erro durante a gravação do arquivo"
+
+#: usr/local/www/edit.php:78 usr/local/www/edit.php:81
+msgid "File successfully saved"
+msgstr "Arquivo salvo com sucesso"
+
+#: usr/local/www/edit.php:98 usr/local/www/edit.php:101
+msgid "Loading file"
+msgstr "Carregando arquivo"
+
+#: usr/local/www/edit.php:117 usr/local/www/edit.php:120
+#: usr/local/www/edit.php:121
+msgid "File successfully loaded"
+msgstr "Arquivo carregado com sucesso"
+
+#: usr/local/www/edit.php:140 usr/local/www/edit.php:143
+#: usr/local/www/edit.php:144
+msgid "Saving file"
+msgstr "Salvando arquivo"
+
+#: usr/local/www/edit.php:177 usr/local/www/edit.php:180
+#: usr/local/www/edit.php:181
+msgid "Save / Load from path"
+msgstr "Salvar / Carregar do caminho"
+
+#: usr/local/www/edit.php:179 usr/local/www/edit.php:182
+#: usr/local/www/edit.php:183
+msgid "Load"
+msgstr "Carregar"
+
+#: usr/local/www/edit.php:180 usr/local/www/edit.php:183
+#: usr/local/www/edit.php:184
+msgid "Browse"
+msgstr "Navegar"
+
+#: usr/local/www/services_captiveportal.php:63
+#: usr/local/www/services_captiveportal_filemanager.php:75
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_ip.php:64
+#: usr/local/www/services_captiveportal_ip.php:104
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_mac.php:63
+#: usr/local/www/services_captiveportal_mac.php:154
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_captiveportal_hostname.php:66
+#: usr/local/www/services_captiveportal_hostname.php:109
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers.php:403
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/status_captiveportal_test.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:57
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_captiveportal_vouchers.php:410
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/services_captiveportal_vouchers.php:423
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+#: usr/local/www/services_captiveportal_ip.php:61
+#: usr/local/www/services_captiveportal_ip.php:102
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+#: usr/local/www/services_captiveportal_mac.php:60
+#: usr/local/www/services_captiveportal_mac.php:152
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+#: usr/local/www/services_captiveportal_hostname.php:63
+#: usr/local/www/services_captiveportal_hostname.php:107
+#: usr/local/www/services_captiveportal.php:60
+#: usr/local/www/services_captiveportal_filemanager.php:71
+#: usr/local/www/services_captiveportal_filemanager.php:147
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:432
+#: usr/local/www/services_captiveportal_mac.php:162
+#: usr/local/www/services_captiveportal_vouchers.php:437
+msgid "Captive portal"
+msgstr "Portal Captive"
+
+#: usr/local/www/services_captiveportal.php:146
+#: usr/local/www/services_captiveportal_zones_edit.php:61
+#: usr/local/www/services_captiveportal_zones_edit.php:99
+#: usr/local/www/services_captiveportal.php:147
+#: usr/local/www/services_captiveportal.php:153
+#: usr/local/www/services_captiveportal_zones_edit.php:59
+#: usr/local/www/services_captiveportal_zones_edit.php:101
+#: usr/local/www/services_captiveportal_zones_edit.php:97
+#: usr/local/www/services_captiveportal.php:155
+msgid "Zone name"
+msgstr "Nome da Zona"
+
+#: usr/local/www/services_captiveportal.php:154
+#: usr/local/www/services_captiveportal.php:155
+#: usr/local/www/services_captiveportal.php:161
+#: usr/local/www/services_captiveportal.php:163
+#, php-format
+msgid "The captive portal cannot be used on interface %s since it is part of a bridge."
+msgstr "O portal captive não pode ser usado na interface %s já que ela faz parte de uma ponte."
+
+#: usr/local/www/services_captiveportal.php:158
+#: usr/local/www/services_captiveportal.php:159
+#: usr/local/www/services_captiveportal.php:165
+#: usr/local/www/services_captiveportal.php:167
+#, php-format
+msgid "The captive portal cannot be used on interface %s since it is used already on %s instance."
+msgstr "O Captive Portal não pode ser usado na interface %s já que ele está sendo usado na instância %s."
+
+#: usr/local/www/services_captiveportal.php:166
+#: usr/local/www/services_captiveportal.php:167
+msgid "Certificate and key must be specified for HTTPS login."
+msgstr "Certificado e chave devem ser especificados para o login HTTPS."
+
+#: usr/local/www/services_captiveportal.php:169
+#: usr/local/www/system_camanager.php:168
+#: usr/local/www/system_certmanager.php:168
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/services_captiveportal.php:170
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_certmanager.php:199
+msgid "This certificate does not appear to be valid."
+msgstr "Esse certificado não parece ser válido."
+
+#: usr/local/www/services_captiveportal.php:171
+#: usr/local/www/services_captiveportal.php:172
+msgid "This intermmediate certificate does not appear to be valid."
+msgstr "Esse certificado intermediário não parece ser válido."
+
+#: usr/local/www/services_captiveportal.php:173
+#: usr/local/www/services_captiveportal.php:174
+msgid "This key does not appear to be valid."
+msgstr "Essa chave não parece ser válida."
+
+#: usr/local/www/services_captiveportal.php:177
+#: usr/local/www/services_captiveportal.php:178
+#: usr/local/www/services_captiveportal.php:176
+msgid "The HTTPS server name must be specified for HTTPS login."
+msgstr "O nome do servidor HTTPS deve ser especificado pelo login HTTPS."
+
+#: usr/local/www/services_captiveportal.php:183
+#: usr/local/www/services_captiveportal.php:184
+#: usr/local/www/services_captiveportal.php:182
+#: usr/local/www/services_captiveportal.php:185
+msgid "The timeout must be at least 1 minute."
+msgstr "O tempo de expiração deve ser pelo menos de 1 minuto."
+
+#: usr/local/www/services_captiveportal.php:186
+#: usr/local/www/services_captiveportal.php:187
+#: usr/local/www/services_captiveportal.php:185
+#: usr/local/www/services_captiveportal.php:203
+msgid "The idle timeout must be at least 1 minute."
+msgstr "O tempo ocioso deve ser no mínimo de 1 minuto."
+
+#: usr/local/www/services_captiveportal.php:189
+#: usr/local/www/services_captiveportal.php:190
+#: usr/local/www/services_captiveportal.php:188
+#: usr/local/www/services_captiveportal.php:206
+msgid "The pass-through credit count must be a number or left blank."
+msgstr "A contagem de crédito de passagem deve ser um número ou deixado em branco."
+
+#: usr/local/www/services_captiveportal.php:192
+#: usr/local/www/services_captiveportal.php:193
+#: usr/local/www/services_captiveportal.php:191
+#: usr/local/www/services_captiveportal.php:209
+msgid "The waiting period to restore pass-through credits must be above 0 hours."
+msgstr "O período de espera para restaurar os créditos de passagem deve ser acima de 0 horas."
+
+#: usr/local/www/services_captiveportal.php:196
+#: usr/local/www/services_captiveportal.php:199
+#: usr/local/www/services_captiveportal.php:202
+#: usr/local/www/services_captiveportal.php:205
+#: usr/local/www/services_captiveportal_ip_edit.php:107
+#: usr/local/www/services_captiveportal.php:197
+#: usr/local/www/services_captiveportal.php:200
+#: usr/local/www/services_captiveportal.php:203
+#: usr/local/www/services_captiveportal.php:206
+#: usr/local/www/services_captiveportal.php:195
+#: usr/local/www/services_captiveportal.php:198
+#: usr/local/www/services_captiveportal.php:201
+#: usr/local/www/services_captiveportal.php:204
+#: usr/local/www/services_captiveportal_ip_edit.php:105
+#: usr/local/www/services_captiveportal_ip_edit.php:104
+#: usr/local/www/services_captiveportal.php:213
+#: usr/local/www/services_captiveportal.php:216
+#: usr/local/www/services_captiveportal.php:219
+#: usr/local/www/services_captiveportal.php:222
+#, php-format
+msgid "A valid IP address must be specified. [%s]"
+msgstr "Um endereço IP válido deve ser especificado. [%s]"
+
+#: usr/local/www/services_captiveportal.php:208
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_captiveportal.php:214
+#: usr/local/www/services_captiveportal.php:217
+#: usr/local/www/services_captiveportal.php:220
+#: usr/local/www/services_captiveportal.php:209
+#: usr/local/www/services_captiveportal.php:212
+#: usr/local/www/services_captiveportal.php:215
+#: usr/local/www/services_captiveportal.php:218
+#: usr/local/www/services_captiveportal.php:221
+#: usr/local/www/services_captiveportal.php:207
+#: usr/local/www/services_captiveportal.php:210
+#: usr/local/www/services_captiveportal.php:213
+#: usr/local/www/services_captiveportal.php:216
+#: usr/local/www/services_captiveportal.php:219
+#: usr/local/www/services_captiveportal.php:225
+#: usr/local/www/services_captiveportal.php:228
+#: usr/local/www/services_captiveportal.php:231
+#: usr/local/www/services_captiveportal.php:234
+#: usr/local/www/services_captiveportal.php:237
+#, php-format
+msgid "A valid port number must be specified. [%s]"
+msgstr "Um número de porta válido deve ser especificado. [%s]"
+
+#: usr/local/www/services_captiveportal.php:223
+#: usr/local/www/services_captiveportal.php:224
+#: usr/local/www/services_captiveportal.php:222
+#: usr/local/www/services_captiveportal.php:240
+msgid "The maximum number of concurrent connections per client IP address may not be larger than the global maximum."
+msgstr "O número máximo de conexões concorrentes por endereço IP de cliente não pode ser maior que o máximo global."
+
+#: usr/local/www/services_captiveportal.php:421
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal.php:423
+#: usr/local/www/services_captiveportal.php:441
+msgid "Captive portal(s)"
+msgstr "Captive portal(s)"
+
+#: usr/local/www/services_captiveportal.php:422
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_ip.php:105
+#: usr/local/www/services_captiveportal_mac.php:155
+#: usr/local/www/services_captiveportal_hostname.php:110
+#: usr/local/www/services_captiveportal_vouchers.php:404
+#: usr/local/www/services_captiveportal_vouchers.php:411
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_vouchers.php:424
+#: usr/local/www/services_captiveportal_ip.php:103
+#: usr/local/www/services_captiveportal_mac.php:153
+#: usr/local/www/services_captiveportal_hostname.php:108
+#: usr/local/www/services_captiveportal.php:424
+#: usr/local/www/services_captiveportal_filemanager.php:148
+#: usr/local/www/services_captiveportal_vouchers.php:433
+#: usr/local/www/services_captiveportal_mac.php:163
+#: usr/local/www/services_captiveportal.php:442
+#: usr/local/www/services_captiveportal_vouchers.php:438
+msgid "Pass-through MAC"
+msgstr "Pass-through MAC"
+
+#: usr/local/www/services_captiveportal.php:423
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_vouchers.php:405
+#: usr/local/www/services_captiveportal_vouchers.php:412
+#: usr/local/www/services_captiveportal.php:427
+#: usr/local/www/services_captiveportal_vouchers.php:425
+#: usr/local/www/services_captiveportal_ip.php:104
+#: usr/local/www/services_captiveportal_mac.php:154
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal_filemanager.php:149
+#: usr/local/www/services_captiveportal_vouchers.php:434
+#: usr/local/www/services_captiveportal_mac.php:164
+#: usr/local/www/services_captiveportal.php:443
+#: usr/local/www/services_captiveportal_vouchers.php:439
+msgid "Allowed IP addresses"
+msgstr "Endereços IP permitidos"
+
+#: usr/local/www/services_captiveportal.php:424
+#: usr/local/www/services_captiveportal_filemanager.php:153
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_hostname.php:112
+#: usr/local/www/services_captiveportal_vouchers.php:406
+#: usr/local/www/services_captiveportal_vouchers.php:413
+#: usr/local/www/services_captiveportal.php:428
+#: usr/local/www/services_captiveportal_vouchers.php:426
+#: usr/local/www/services_captiveportal_ip.php:105
+#: usr/local/www/services_captiveportal_mac.php:155
+#: usr/local/www/services_captiveportal_hostname.php:110
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_vouchers.php:435
+#: usr/local/www/services_captiveportal_mac.php:165
+#: usr/local/www/services_captiveportal.php:444
+#: usr/local/www/services_captiveportal_vouchers.php:440
+msgid "Allowed Hostnames"
+msgstr "Hostnames permitidos"
+
+#: usr/local/www/services_captiveportal.php:425
+#: usr/local/www/services_captiveportal.php:587
+#: usr/local/www/services_captiveportal_filemanager.php:154
+#: usr/local/www/services_captiveportal_ip.php:108
+#: usr/local/www/services_captiveportal_mac.php:158
+#: usr/local/www/services_captiveportal_hostname.php:113
+#: usr/local/www/services_captiveportal_vouchers.php:85
+#: usr/local/www/services_captiveportal_vouchers.php:407
+#: usr/local/www/status_captiveportal_vouchers.php:57
+#: usr/local/www/services_captiveportal_vouchers.php:414
+#: usr/local/www/services_captiveportal.php:429
+#: usr/local/www/services_captiveportal.php:592
+#: usr/local/www/services_captiveportal_vouchers.php:82
+#: usr/local/www/services_captiveportal_vouchers.php:427
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_hostname.php:111
+#: usr/local/www/services_captiveportal.php:427
+#: usr/local/www/services_captiveportal.php:590
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_vouchers.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:436
+#: usr/local/www/services_captiveportal.php:584
+#: usr/local/www/services_captiveportal_mac.php:166
+#: usr/local/www/services_captiveportal.php:445
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal_vouchers.php:441
+msgid "Vouchers"
+msgstr "Vouchers"
+
+#: usr/local/www/services_captiveportal.php:426
+#: usr/local/www/services_captiveportal_filemanager.php:155
+#: usr/local/www/services_captiveportal_ip.php:109
+#: usr/local/www/services_captiveportal_mac.php:159
+#: usr/local/www/services_captiveportal_hostname.php:114
+#: usr/local/www/services_captiveportal_vouchers.php:408
+#: usr/local/www/services_captiveportal_vouchers.php:415
+#: usr/local/www/services_captiveportal.php:430
+#: usr/local/www/services_captiveportal_vouchers.php:428
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_hostname.php:112
+#: usr/local/www/services_captiveportal.php:428
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_vouchers.php:437
+#: usr/local/www/services_captiveportal_mac.php:167
+#: usr/local/www/services_captiveportal.php:446
+#: usr/local/www/services_captiveportal_vouchers.php:442
+msgid "File Manager"
+msgstr "Gerenciados de arquivo"
+
+#: usr/local/www/services_captiveportal.php:436
+#: usr/local/www/services_captiveportal.php:440
+#: usr/local/www/services_captiveportal.php:438
+#: usr/local/www/services_captiveportal.php:456
+msgid "Enable captive portal"
+msgstr "Habilitar portal captive"
+
+#: usr/local/www/services_captiveportal.php:450
+#: usr/local/www/services_captiveportal.php:455
+#: usr/local/www/services_captiveportal.php:453
+#: usr/local/www/services_captiveportal.php:471
+msgid "Select the interface(s) to enable for captive portal."
+msgstr "Selecione a(s) interface(s) a habilitar para o captive portal."
+
+#: usr/local/www/services_captiveportal.php:453
+#: usr/local/www/services_captiveportal.php:458
+#: usr/local/www/services_captiveportal.php:456
+#: usr/local/www/services_captiveportal.php:474
+msgid "Maximum concurrent connections"
+msgstr "Máximo de conexões concorrentes"
+
+#: usr/local/www/services_captiveportal.php:457
+#: usr/local/www/services_captiveportal.php:462
+#: usr/local/www/services_captiveportal.php:460
+#: usr/local/www/services_captiveportal.php:478
+msgid "per client IP address (0 = no limit)"
+msgstr "por endereço IP de cliente (0 = sem limite)"
+
+#: usr/local/www/services_captiveportal.php:460
+msgid "This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in to the captive portal, but rather how many users can load the portal page or authenticate at the same time! Default is 4 connections per client IP address, with a total maximum of 16 connections."
+msgstr "Essa configuração limita o número de conexões concorrentes para o servidor HTTP(S) do portal captive. Ela não configura quantos usuários podem estar logados no portal captive, mas sim quantos usuários podem carregar a página do portal ou autenticar ao mesmo tempo! O padrão é 4 conexões por endereço IP de cliente, com o total máximo de 16 conexões."
+
+#: usr/local/www/services_captiveportal.php:468
+#: usr/local/www/services_captiveportal.php:475
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:469
+#: usr/local/www/services_captiveportal.php:473
+#: usr/local/www/services_captiveportal.php:480
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/system_advanced_misc.php:518
+#: usr/local/www/services_captiveportal.php:471
+#: usr/local/www/services_captiveportal.php:478
+#: usr/local/www/system_advanced_misc.php:530
+#: usr/local/www/system_advanced_misc.php:651
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/system_advanced_misc.php:669
+msgid "minutes"
+msgstr "minutos"
+
+#: usr/local/www/services_captiveportal.php:469
+#: usr/local/www/services_captiveportal.php:474
+#: usr/local/www/services_captiveportal.php:472
+#: usr/local/www/services_captiveportal.php:490
+msgid "Clients will be disconnected after this amount of inactivity. They may log in again immediately, though. Leave this field blank for no idle timeout."
+msgstr "Clientes serão desconectados depois desse total de inatividade. Eles podem fazer login novamente imediatamente, no entando. Deixe esse campo em branco para nenhum tempo ocioso."
+
+#: usr/local/www/services_captiveportal.php:472
+#: usr/local/www/services_captiveportal.php:477
+#: usr/local/www/services_captiveportal.php:475
+#: usr/local/www/services_captiveportal.php:493
+msgid "Hard timeout"
+msgstr "Hard timeout"
+
+#: usr/local/www/services_captiveportal.php:476
+#: usr/local/www/services_captiveportal.php:481
+#: usr/local/www/services_captiveportal.php:479
+#: usr/local/www/services_captiveportal.php:497
+msgid "Clients will be disconnected after this amount of time, regardless of activity. They may log in again immediately, though. Leave this field blank for no hard timeout (not recommended unless an idle timeout is set)."
+msgstr "Clientes serão desconectados depois desse tempo, independentemente de ter atividade ou não. Eles podem realizar login novamente imediatamente, no entanto. Deixe esse campo em branco para não ter tempo de expiração rígido (não recomendado a menos que um tempo ocioso estiver configurado)."
+
+#: usr/local/www/services_captiveportal.php:479
+#: usr/local/www/services_captiveportal.php:484
+#: usr/local/www/services_captiveportal.php:482
+#: usr/local/www/services_captiveportal.php:500
+msgid "Pass-through credits allowed per MAC address"
+msgstr "Créditos de passagem permitidos por endereço MAC"
+
+#: usr/local/www/services_captiveportal.php:482
+#: usr/local/www/services_captiveportal.php:487
+#: usr/local/www/services_captiveportal.php:485
+#: usr/local/www/services_captiveportal.php:503
+msgid "per client MAC address (0 or blank = none)"
+msgstr "por endereço MAC de cliente (0 ou branco = nenhum)"
+
+#: usr/local/www/services_captiveportal.php:483
+#: usr/local/www/services_captiveportal.php:488
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/services_captiveportal.php:504
+msgid "This setting allows passing through the captive portal without authentication a limited number of times per MAC address. Once used up, the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set a hard timeout and/or idle timeout when using this for it to be effective."
+msgstr "Essa configuração permite passagem pelo portal captive sem autenticação para um número limitado de vezes por endereço MAC. Uma vez utilizado, o cliente somente pode realizar login com credenciais válidas até que o período de espera especificado abaixo tenha expirado. Recomenda-se configurar um tempo de expiração e/ou tempo de espera ao utilizar essa função para que ela seja mais efetiva."
+
+#: usr/local/www/services_captiveportal.php:486
+#: usr/local/www/services_captiveportal.php:491
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:507
+msgid "Waiting period to restore pass-through credits"
+msgstr "Período de espera para restaurar créditos de passagem"
+
+#: usr/local/www/services_captiveportal.php:489
+#: usr/local/www/services_captiveportal.php:494
+#: usr/local/www/services_captiveportal.php:492
+#: usr/local/www/services_captiveportal.php:510
+msgid "hours"
+msgstr "horas"
+
+#: usr/local/www/services_captiveportal.php:490
+#: usr/local/www/services_captiveportal.php:495
+#: usr/local/www/services_captiveportal.php:493
+#: usr/local/www/services_captiveportal.php:511
+msgid "Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. This must be above 0 hours if pass-through credits are enabled."
+msgstr "Clientes terão seus créditos de passagem restaurados para a contagem original após esse total de tempo desde que usando o primeiro. Esse deve ser acima de 0 horas se os créditos de passagem estão habilitados."
+
+#: usr/local/www/services_captiveportal.php:493
+#: usr/local/www/services_captiveportal.php:498
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/services_captiveportal.php:514
+msgid "Reset waiting period on attempted access"
+msgstr "Período de espera para reinício na tentativa de acesso"
+
+#: usr/local/www/services_captiveportal.php:496
+#: usr/local/www/services_captiveportal.php:501
+#: usr/local/www/services_captiveportal.php:499
+#: usr/local/www/services_captiveportal.php:517
+msgid "Enable waiting period reset on attempted access"
+msgstr "Habilitar período de espera de reinício na tentativa de acesso"
+
+#: usr/local/www/services_captiveportal.php:497
+#: usr/local/www/services_captiveportal.php:502
+#: usr/local/www/services_captiveportal.php:500
+#: usr/local/www/services_captiveportal.php:518
+msgid "If enabled, the waiting period is reset to the original duration if access is attempted when all pass-through credits have already been exhausted."
+msgstr "Se habilitado, o período de espera é reiniciado para a duração original se houver tentaviva de acesso quando todos os créditos de passagem tiverem exaurido."
+
+#: usr/local/www/services_captiveportal.php:500
+#: usr/local/www/services_captiveportal.php:505
+#: usr/local/www/services_captiveportal.php:503
+#: usr/local/www/services_captiveportal.php:521
+msgid "Logout popup window"
+msgstr "Janela popup de logout"
+
+#: usr/local/www/services_captiveportal.php:503
+#: usr/local/www/services_captiveportal.php:508
+#: usr/local/www/services_captiveportal.php:506
+#: usr/local/www/services_captiveportal.php:524
+msgid "Enable logout popup window"
+msgstr "Habilitar janela popup de logout"
+
+#: usr/local/www/services_captiveportal.php:504
+#: usr/local/www/services_captiveportal.php:509
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal.php:525
+msgid "If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs."
+msgstr "Se habilitada, uma janela popup irá aparecer quando os clientes tiverem acesso através do portal captive. Isso permite que clientes desconectem-se explicitamente antes que o tempo ocioso ou tempo de expiração rídigo ocorra."
+
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal.php:512
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal.php:528
+msgid "Pre-authentication redirect URL"
+msgstr "URL de redirecionamento de preautenticação"
+
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal.php:515
+#: usr/local/www/services_captiveportal.php:513
+#: usr/local/www/services_captiveportal.php:531
+#, php-format
+msgid "Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using your custom captive portal index.php page or error pages."
+msgstr "Use este campo para definir a variável $PORTAL_REDIRURL$, que pode ser acessada usando sua página personalizada do captive portal index.php ou páginas de erro."
+
+#: usr/local/www/services_captiveportal.php:514
+#: usr/local/www/services_captiveportal.php:519
+#: usr/local/www/services_captiveportal.php:517
+#: usr/local/www/services_captiveportal.php:535
+msgid "After authentication Redirection URL"
+msgstr "URL de redirecionamento após autenticação"
+
+#: usr/local/www/services_captiveportal.php:518
+#: usr/local/www/services_captiveportal.php:523
+#: usr/local/www/services_captiveportal.php:521
+#: usr/local/www/services_captiveportal.php:539
+msgid "If you provide a URL here, clients will be redirected to that URL instead of the one they initially tried to access after they've authenticated."
+msgstr "Se você fornecer uma URL aqui, clientes serão redirecionados para essa URL ao invés daquela que inicialmente eles tentaram acessar após terem se autenticado."
+
+#: usr/local/www/services_captiveportal.php:522
+#: usr/local/www/services_captiveportal.php:527
+#: usr/local/www/services_captiveportal.php:525
+#: usr/local/www/services_captiveportal.php:543
+msgid "Concurrent user logins"
+msgstr "Logins de usuário concorrentes"
+
+#: usr/local/www/services_captiveportal.php:525
+#: usr/local/www/services_captiveportal.php:530
+#: usr/local/www/services_captiveportal.php:528
+#: usr/local/www/services_captiveportal.php:546
+msgid "Disable concurrent logins"
+msgstr "Desabilitar logins concorrentes"
+
+#: usr/local/www/services_captiveportal.php:526
+#: usr/local/www/services_captiveportal.php:531
+#: usr/local/www/services_captiveportal.php:529
+#: usr/local/www/services_captiveportal.php:547
+msgid "If this option is set, only the most recent login per username will be active. Subsequent logins will cause machines previously logged in with the same username to be disconnected."
+msgstr "Se essa opção for configurada, somente o login por nome de usuário mais recente será ativado. Logins subsequentes provocarão a desconexão de máquinas anteriormente logadas com o mesmo nome de usuário."
+
+#: usr/local/www/services_captiveportal.php:529
+#: usr/local/www/services_captiveportal.php:534
+#: usr/local/www/services_captiveportal.php:532
+#: usr/local/www/services_captiveportal.php:550
+msgid "MAC filtering"
+msgstr "Filtragem de MAC"
+
+#: usr/local/www/services_captiveportal.php:532
+#: usr/local/www/services_captiveportal.php:537
+#: usr/local/www/services_captiveportal.php:535
+#: usr/local/www/services_captiveportal.php:553
+msgid "Disable MAC filtering"
+msgstr "Desabilitar filtragem de MAC"
+
+#: usr/local/www/services_captiveportal.php:533
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:536
+#: usr/local/www/services_captiveportal.php:554
+msgid "If this option is set, no attempts will be made to ensure that the MAC address of clients stays the same while they're logged in.This is required when the MAC address of the client cannot be determined (usually because there are routers between"
+msgstr "Se essa opção for configurada, nenhuma tentativa será feita para garantir que o endereço MAC de clientes se mantenha o mesmo enquanto eles estão logados. Esse é um requisito quando o endereço MAC do cliente não pode ser determinado (normalmente porque não há rotas entre"
+
+#: usr/local/www/services_captiveportal.php:534
+#: usr/local/www/services_captiveportal.php:539
+#: usr/local/www/services_captiveportal.php:537
+#: usr/local/www/services_captiveportal.php:555
+msgid "and the clients)."
+msgstr "e os clientes)."
+
+#: usr/local/www/services_captiveportal.php:535
+#: usr/local/www/services_captiveportal.php:540
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:556
+msgid "If this is enabled, RADIUS MAC authentication cannot be used."
+msgstr "Se isto estiver habilitado, autenticação de MAC RADIUS não pode ser usada."
+
+#: usr/local/www/services_captiveportal.php:538
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:541
+#: usr/local/www/services_captiveportal.php:559
+msgid "Pass-through MAC Auto Entry"
+msgstr "Entrada Auto de MAC Pass-through"
+
+#: usr/local/www/services_captiveportal.php:541
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:544
+#: usr/local/www/services_captiveportal.php:562
+msgid "Enable Pass-through MAC automatic additions"
+msgstr "Habilitar adições automáticas de MAC Pass-through"
+
+#: usr/local/www/services_captiveportal.php:542
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:545
+#: usr/local/www/services_captiveportal.php:563
+msgid "If this option is set, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will never have to authenticate again."
+msgstr "Se essa opção estiver configurada, a entrada MAC passthrough é automaticamente adicionada após o usuário ter autenticado com sucesso. Usuários de tal endereço MAC nunca terão que autenticar novamente."
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid "To remove the passthrough MAC entry you either have to log in and remove it manually from the"
+msgstr "Para remover a entrada MAC pass-through você deve realizar login e removê-la"
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid "Pass-through MAC tab"
+msgstr "Aba de MAC Pass-through"
+
+#: usr/local/www/services_captiveportal.php:543
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:554
+#: usr/local/www/services_captiveportal.php:546
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:570
+msgid "or send a POST from another system to remove it."
+msgstr "ou envie um POST de outro sistema para removê-la."
+
+#: usr/local/www/services_captiveportal.php:544
+#: usr/local/www/services_captiveportal.php:549
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:565
+msgid "If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown."
+msgstr "Se isto estiver habilitado, a autenticação MAC RADIUS não pode ser usada. Além disso, a janela de logout não será exibida."
+
+#: usr/local/www/services_captiveportal.php:547
+#: usr/local/www/services_captiveportal.php:552
+#: usr/local/www/services_captiveportal.php:550
+#: usr/local/www/services_captiveportal.php:568
+msgid "Enable Pass-through MAC automatic addition with username"
+msgstr "Habilitar adição automática de MAC Pass-through com nome de usuário"
+
+#: usr/local/www/services_captiveportal.php:548
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:551
+#: usr/local/www/services_captiveportal.php:569
+msgid "If this option is set, with the automatically MAC passthrough entry created the username, used during authentication, will be saved."
+msgstr "Se essa opção estiver configurada, com a entrada automática de MAC passthrough criada, o nome de usuário, usado durante a autenticação, será salvo."
+
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:558
+#: usr/local/www/services_captiveportal.php:556
+#: usr/local/www/services_captiveportal.php:574
+msgid "Per-user bandwidth restriction"
+msgstr "Restrição de banda por usuário"
+
+#: usr/local/www/services_captiveportal.php:556
+#: usr/local/www/services_captiveportal.php:561
+#: usr/local/www/services_captiveportal.php:559
+#: usr/local/www/services_captiveportal.php:577
+msgid "Enable per-user bandwidth restriction"
+msgstr "Habilitar restrição de banda por usuário"
+
+#: usr/local/www/services_captiveportal.php:559
+#: usr/local/www/services_captiveportal.php:564
+#: usr/local/www/services_captiveportal.php:562
+#: usr/local/www/services_captiveportal.php:580
+msgid "Default download"
+msgstr "Download padrão"
+
+#: usr/local/www/services_captiveportal.php:563
+#: usr/local/www/services_captiveportal.php:568
+#: usr/local/www/services_captiveportal.php:566
+#: usr/local/www/services_captiveportal.php:584
+msgid "Default upload"
+msgstr "Carregamento padrão"
+
+#: usr/local/www/services_captiveportal.php:567
+#: usr/local/www/services_captiveportal.php:572
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:588
+msgid "If this option is set, the captive portal will restrict each user who logs in to the specified default bandwidth. RADIUS can override the default settings. Leave empty or set to 0 for no limit."
+msgstr "Se essa opção estiver configurada, o portal captive restringirá cada usuário que realizar login na largura de banda especificada. RADIUS pode sobrescrever a configuração padrão. Deixe vazio ou configure 0 para não impor limite."
+
+#: usr/local/www/services_captiveportal.php:570
+#: usr/local/www/services_captiveportal.php:575
+#: usr/local/www/services_captiveportal.php:573
+msgid "PMS authentication"
+msgstr "Autenticação PMS"
+
+#: usr/local/www/services_captiveportal.php:573
+#: usr/local/www/services_captiveportal.php:578
+#: usr/local/www/services_captiveportal.php:576
+msgid "Enable PMS authentication"
+msgstr "Habilitar autenticação PSM"
+
+#: usr/local/www/services_captiveportal.php:574
+#: usr/local/www/services_captiveportal.php:579
+#: usr/local/www/services_captiveportal.php:577
+msgid "If this option is set, users will be authenticated through the PMS backend if they fill the necessary information in the login page."
+msgstr "Se habilitada, usuários poderão se autenticar através do painel PMS, se eles preencherem os campos necessários na pagina de login."
+
+#: usr/local/www/services_captiveportal.php:583
+#: usr/local/www/services_captiveportal.php:588
+#: usr/local/www/services_captiveportal.php:586
+#: usr/local/www/services_captiveportal.php:580
+#: usr/local/www/services_captiveportal.php:596
+msgid "No Authentication"
+msgstr "Sem Autenticação"
+
+#: usr/local/www/services_captiveportal.php:587
+#: usr/local/www/diag_ipsec.php:194
+#: usr/local/www/services_captiveportal.php:592
+#: usr/local/www/diag_ipsec.php:195
+#: usr/local/www/services_captiveportal.php:590
+#: usr/local/www/diag_ipsec.php:196
+#: usr/local/www/services_captiveportal.php:584
+#: usr/local/www/services_captiveportal.php:600
+msgid "Local"
+msgstr "Local"
+
+#: usr/local/www/services_captiveportal.php:587 usr/local/www/fbegin.inc:93
+#: usr/local/www/fbegin.inc:95 usr/local/www/system_usermanager.php:54
+#: usr/local/www/fbegin.inc:110 usr/local/www/fbegin.inc:112
+#: usr/local/www/services_captiveportal.php:592 usr/local/www/fbegin.inc:119
+#: usr/local/www/fbegin.inc:121 usr/local/www/services_captiveportal.php:590
+#: usr/local/www/services_captiveportal.php:584 usr/local/www/fbegin.inc:111
+#: usr/local/www/fbegin.inc:113 usr/local/www/services_captiveportal.php:600
+msgid "User Manager"
+msgstr "Ger. de usuário"
+
+#: usr/local/www/services_captiveportal.php:591
+#: usr/local/www/services_captiveportal.php:596
+#: usr/local/www/services_captiveportal.php:594
+#: usr/local/www/services_captiveportal.php:612
+msgid "RADIUS Authentication"
+msgstr "Autenticação RADIUS"
+
+#: usr/local/www/services_captiveportal.php:599
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:678
+#: usr/local/www/services_captiveportal.php:633
+#: usr/local/www/services_captiveportal.php:676
+#: usr/local/www/services_captiveportal.php:634
+#: usr/local/www/services_captiveportal.php:677
+#: usr/local/www/services_captiveportal.php:650
+#: usr/local/www/services_captiveportal.php:693
+msgid "Primary RADIUS server"
+msgstr "Servidor RADIUS primário"
+
+#: usr/local/www/services_captiveportal.php:604
+#: usr/local/www/services_captiveportal.php:640
+#: usr/local/www/services_captiveportal.php:638
+#: usr/local/www/services_captiveportal.php:639
+#: usr/local/www/services_captiveportal.php:655
+msgid "Enter the IP address of the RADIUS server which users of the captive portal have to authenticate against."
+msgstr "Informe o endereço IP do servidor RADIUS no qual usuários do portal captive tem que autenticar."
+
+#: usr/local/www/services_captiveportal.php:609
+#: usr/local/www/services_captiveportal.php:645
+#: usr/local/www/services_captiveportal.php:643
+#: usr/local/www/services_captiveportal.php:644
+#: usr/local/www/services_captiveportal.php:660
+msgid "Leave this field blank to use the default port (1812)."
+msgstr "Deixe esse campo em branco para usar a porta padrão (1812)."
+
+#: usr/local/www/services_captiveportal.php:612
+#: usr/local/www/services_captiveportal.php:632
+#: usr/local/www/services_captiveportal.php:651
+#: usr/local/www/services_captiveportal.php:670
+#: usr/local/www/services_captiveportal.php:725
+#: usr/local/www/services_captiveportal.php:648
+#: usr/local/www/services_captiveportal.php:668
+#: usr/local/www/services_captiveportal.php:690
+#: usr/local/www/services_captiveportal.php:709
+#: usr/local/www/services_captiveportal.php:767
+#: usr/local/www/services_captiveportal.php:646
+#: usr/local/www/services_captiveportal.php:666
+#: usr/local/www/services_captiveportal.php:688
+#: usr/local/www/services_captiveportal.php:707
+#: usr/local/www/services_captiveportal.php:765
+#: usr/local/www/services_captiveportal.php:647
+#: usr/local/www/services_captiveportal.php:667
+#: usr/local/www/services_captiveportal.php:689
+#: usr/local/www/services_captiveportal.php:708
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:705
+#: usr/local/www/services_captiveportal.php:724
+msgid "Shared secret"
+msgstr "Segredo compartilhado"
+
+#: usr/local/www/services_captiveportal.php:614
+#: usr/local/www/services_captiveportal.php:650
+#: usr/local/www/services_captiveportal.php:648
+#: usr/local/www/services_captiveportal.php:649
+#: usr/local/www/services_captiveportal.php:665
+msgid "Leave this field blank to not use a RADIUS shared secret (not recommended)."
+msgstr "Deixe o campo em brando para não usar o segredo compartilhado do RADIUS (não recomendado)."
+
+#: usr/local/www/services_captiveportal.php:620 usr/local/www/vpn_pptp.php:440
+#: usr/local/www/services_captiveportal.php:656
+#: usr/local/www/services_captiveportal.php:697 usr/local/www/vpn_pptp.php:442
+#: usr/local/www/services_captiveportal.php:654
+#: usr/local/www/services_captiveportal.php:695
+#: usr/local/www/services_captiveportal.php:655
+#: usr/local/www/services_captiveportal.php:696 usr/local/www/vpn_pptp.php:445
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/services_captiveportal.php:712
+msgid "Secondary RADIUS server"
+msgstr "Servidor RADIUS secundário"
+
+#: usr/local/www/services_captiveportal.php:625
+#: usr/local/www/services_captiveportal.php:661
+#: usr/local/www/services_captiveportal.php:659
+#: usr/local/www/services_captiveportal.php:660
+#: usr/local/www/services_captiveportal.php:676
+msgid "If you have a second RADIUS server, you can activate it by entering its IP address here."
+msgstr "Se você possui um servidor RADIUS secundário, você pode ativa-lo informando seu endereço IP aqui."
+
+#: usr/local/www/services_captiveportal.php:639
+msgid "Tertiary RADIUS server"
+msgstr "Servidor RADIUS terciário"
+
+#: usr/local/www/services_captiveportal.php:644
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:681
+#: usr/local/www/services_captiveportal.php:682
+#: usr/local/www/services_captiveportal.php:698
+msgid "If you have a third RADIUS server, you can activate it by entering its IP address here."
+msgstr "Se você possui um terceiro servidor RADIUS, você pode ativa-lo informando seu endereço IP aqui."
+
+#: usr/local/www/services_captiveportal.php:658
+msgid "Quaternary RADIUS server"
+msgstr "Servidor RADIUS quartenário"
+
+#: usr/local/www/services_captiveportal.php:663
+#: usr/local/www/services_captiveportal.php:702
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/services_captiveportal.php:701
+#: usr/local/www/services_captiveportal.php:717
+msgid "If you have a fourth RADIUS server, you can activate it by entering its IP address here."
+msgstr "Se você possui um quarto servidor RADIUS, você pode ativa-lo informando seu endereço IP aqui."
+
+#: usr/local/www/services_captiveportal.php:677
+#: usr/local/www/services_captiveportal.php:719
+#: usr/local/www/services_captiveportal.php:717
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/services_captiveportal.php:731
+msgid "Accounting"
+msgstr "Contabilidade"
+
+#: usr/local/www/services_captiveportal.php:682
+#: usr/local/www/services_captiveportal.php:724
+#: usr/local/www/services_captiveportal.php:722
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/services_captiveportal.php:736
+msgid "send RADIUS accounting packets"
+msgstr "enviar pacotes de accounting RADIUS"
+
+#: usr/local/www/services_captiveportal.php:683
+#: usr/local/www/services_captiveportal.php:725
+#: usr/local/www/services_captiveportal.php:723
+#: usr/local/www/services_captiveportal.php:721
+#: usr/local/www/services_captiveportal.php:737
+msgid "If this is enabled, RADIUS accounting packets will be sent to the primary RADIUS server."
+msgstr "Se isso estiver habilitado, pacotes de accounting RADIUS serão enviados para o servidor RADIUS primário."
+
+#: usr/local/www/services_captiveportal.php:686
+#: usr/local/www/services_captiveportal.php:728
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:724
+#: usr/local/www/services_captiveportal.php:740
+msgid "Accounting port"
+msgstr "Porta de Accounting"
+
+#: usr/local/www/services_captiveportal.php:688
+#: usr/local/www/services_captiveportal.php:730
+#: usr/local/www/services_captiveportal.php:728
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:742
+msgid "Leave blank to use the default port (1813)."
+msgstr "Deixe em branco para usar a porta padrão (1813)."
+
+#: usr/local/www/services_captiveportal.php:694
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:734
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:762
+msgid "Reauthentication"
+msgstr "Reautenticação"
+
+#: usr/local/www/services_captiveportal.php:699
+#: usr/local/www/services_captiveportal.php:741
+#: usr/local/www/services_captiveportal.php:739
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:764
+msgid "Reauthenticate connected users every minute"
+msgstr "Reautentique usuários conectados a cada minuto"
+
+#: usr/local/www/services_captiveportal.php:700
+#: usr/local/www/services_captiveportal.php:742
+#: usr/local/www/services_captiveportal.php:740
+#: usr/local/www/services_captiveportal.php:749
+#: usr/local/www/services_captiveportal.php:765
+msgid "If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is logged in every minute. If an Access-Reject is received for a user, that user is disconnected from the captive portal immediately."
+msgstr "Se a reautenticação estiver habilitada, Access-Requests serão enviados para o servidor RADIUS para cada usuário logado a cada minuto. Se um Access-Reject é recebido por um usuário, aquele usuário é desconectado do portal captive imediatamente."
+
+#: usr/local/www/services_captiveportal.php:704
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:744
+#: usr/local/www/services_captiveportal.php:732
+#: usr/local/www/services_captiveportal.php:748
+msgid "Accounting updates"
+msgstr "Atualizações de accounting"
+
+#: usr/local/www/services_captiveportal.php:706
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:746
+#: usr/local/www/services_captiveportal.php:734
+#: usr/local/www/services_captiveportal.php:750
+msgid "no accounting updates"
+msgstr "nenhuma atualização de accounting"
+
+#: usr/local/www/services_captiveportal.php:707
+#: usr/local/www/services_captiveportal.php:749
+#: usr/local/www/services_captiveportal.php:747
+#: usr/local/www/services_captiveportal.php:735
+#: usr/local/www/services_captiveportal.php:751
+msgid "stop/start accounting"
+msgstr "parar/iniciar accounting"
+
+#: usr/local/www/services_captiveportal.php:708
+#: usr/local/www/services_captiveportal.php:750
+#: usr/local/www/services_captiveportal.php:748
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:752
+msgid "interim update"
+msgstr "atualização de interim"
+
+#: usr/local/www/services_captiveportal.php:715
+#: usr/local/www/services_captiveportal.php:757
+#: usr/local/www/services_captiveportal.php:755
+#: usr/local/www/services_captiveportal.php:753
+#: usr/local/www/services_captiveportal.php:769
+msgid "RADIUS MAC authentication"
+msgstr "Autenticação de MAC do RADIUS"
+
+#: usr/local/www/services_captiveportal.php:720
+#: usr/local/www/services_captiveportal.php:762
+#: usr/local/www/services_captiveportal.php:760
+#: usr/local/www/services_captiveportal.php:755
+#: usr/local/www/services_captiveportal.php:771
+msgid "Enable RADIUS MAC authentication"
+msgstr "Habilitar autenticação de MAC do RADIUS"
+
+#: usr/local/www/services_captiveportal.php:721
+#: usr/local/www/services_captiveportal.php:763
+#: usr/local/www/services_captiveportal.php:761
+#: usr/local/www/services_captiveportal.php:756
+#: usr/local/www/services_captiveportal.php:772
+msgid "If this option is enabled, the captive portal will try to authenticate users by sending their MAC address as the username and the password entered below to the RADIUS server."
+msgstr "Se essa opção estiver habilitada, o portal captive tentará autenticar usuários enviando seus endereços MAC como o nome de usuário e senha informados abaixo para o servidor RADIUS."
+
+#: usr/local/www/services_captiveportal.php:732
+#: usr/local/www/services_captiveportal.php:774
+#: usr/local/www/services_captiveportal.php:772
+#: usr/local/www/services_captiveportal.php:743
+#: usr/local/www/services_captiveportal.php:759
+msgid "RADIUS options"
+msgstr "Opções RADIUS"
+
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:778
+#: usr/local/www/services_captiveportal.php:776
+#: usr/local/www/services_captiveportal.php:764
+#: usr/local/www/services_captiveportal.php:780
+msgid "RADIUS NAS IP attribute"
+msgstr "Atributo RADIUS NAS IP"
+
+#: usr/local/www/services_captiveportal.php:766
+#: usr/local/www/services_captiveportal.php:808
+#: usr/local/www/services_captiveportal.php:806
+#: usr/local/www/services_captiveportal.php:794
+#: usr/local/www/services_captiveportal.php:810
+msgid "Choose the IP to use for calling station attribute."
+msgstr "Escolha o IP para usar para chamar atributo estação."
+
+#: usr/local/www/services_captiveportal.php:771
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:811
+#: usr/local/www/services_captiveportal.php:799
+#: usr/local/www/services_captiveportal.php:815
+msgid "Session-Timeout"
+msgstr "Session-Timeout"
+
+#: usr/local/www/services_captiveportal.php:772
+#: usr/local/www/services_captiveportal.php:814
+#: usr/local/www/services_captiveportal.php:812
+#: usr/local/www/services_captiveportal.php:800
+#: usr/local/www/services_captiveportal.php:816
+msgid "Use RADIUS Session-Timeout attributes"
+msgstr "Use atributos de Session-Timeout do RADIUS"
+
+#: usr/local/www/services_captiveportal.php:773
+#: usr/local/www/services_captiveportal.php:815
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:817
+msgid "When this is enabled, clients will be disconnected after the amount of time retrieved from the RADIUS Session-Timeout attribute."
+msgstr "Quando isso estiver habilitado, clientes serão desconectados após o total de tempo obtido do atributo Session-Timeout do RADIUS."
+
+#: usr/local/www/services_captiveportal.php:789
+#: usr/local/www/services_captiveportal.php:831
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:817
+#: usr/local/www/services_captiveportal.php:833
+#, php-format
+msgid "If RADIUS type is set to Cisco, in Access-Requests the value of Calling-Station-Id will be set to the client's IP address and the Called-Station-Id to the client's MAC address. Default behavior is Calling-Station-Id = client's MAC address and Called-Station-Id = %s's WAN IP address."
+msgstr "Se o tipo RADIUS estiver configurado para Cisco, em Access-Requests o valor do Calling-Station-Id será configurado com o endereço IP do cliente e o Called-Station-Id para o endereço MAC do cliente. O comportamento padrão é Calling-Station-Id = endereço MAC de cliente e Called-Station-Id = endereço IP da WAN %s."
+
+#: usr/local/www/services_captiveportal.php:796
+#: usr/local/www/services_captiveportal.php:838
+#: usr/local/www/services_captiveportal.php:836
+#: usr/local/www/services_captiveportal.php:834
+#: usr/local/www/services_captiveportal.php:850
+msgid "MAC address format"
+msgstr "Formato do endereço MAC"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "singledash"
+msgstr "singledash"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "ietf"
+msgstr "ietf"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "cisco"
+msgstr "cisco"
+
+#: usr/local/www/services_captiveportal.php:801
+#: usr/local/www/services_captiveportal.php:843
+msgid "unformatted"
+msgstr "não formatado"
+
+#: usr/local/www/services_captiveportal.php:810
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/services_captiveportal.php:849
+#: usr/local/www/services_captiveportal.php:865
+msgid "This option changes the MAC address format used in the whole RADIUS system. Change this if you also"
+msgstr "Essa opção modifica o formato do endereço MAC usado em todo o sistema RADIUS. Modifique isso se você também"
+
+#: usr/local/www/services_captiveportal.php:811
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:851
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/services_captiveportal.php:866
+msgid "need to change the username format for RADIUS MAC authentication."
+msgstr "precisa modificar o formato do nome de usuário para a autenticação MAC do RADIUS."
+
+#: usr/local/www/services_captiveportal.php:812
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:851
+#: usr/local/www/services_captiveportal.php:867
+msgid "default:"
+msgstr "padrão:"
+
+#: usr/local/www/services_captiveportal.php:813
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:852
+#: usr/local/www/services_captiveportal.php:868
+msgid "singledash:"
+msgstr "singledash:"
+
+#: usr/local/www/services_captiveportal.php:814
+#: usr/local/www/services_captiveportal.php:856
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:869
+msgid "ietf:"
+msgstr "ietf:"
+
+#: usr/local/www/services_captiveportal.php:815
+#: usr/local/www/services_captiveportal.php:857
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:854
+#: usr/local/www/services_captiveportal.php:870
+msgid "cisco:"
+msgstr "cisco:"
+
+#: usr/local/www/services_captiveportal.php:816
+#: usr/local/www/services_captiveportal.php:858
+#: usr/local/www/services_captiveportal.php:856
+#: usr/local/www/services_captiveportal.php:855
+#: usr/local/www/services_captiveportal.php:871
+msgid "unformatted:"
+msgstr "não formatado:"
+
+#: usr/local/www/services_captiveportal.php:819
+#: usr/local/www/services_captiveportal.php:861
+#: usr/local/www/services_captiveportal.php:859
+#: usr/local/www/services_captiveportal.php:877
+msgid "HTTPS login"
+msgstr "Login HTTPS"
+
+#: usr/local/www/services_captiveportal.php:822
+#: usr/local/www/services_captiveportal.php:864
+#: usr/local/www/services_captiveportal.php:862
+#: usr/local/www/services_captiveportal.php:880
+msgid "Enable HTTPS login"
+msgstr "Habilitar login HTTPS"
+
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:865
+msgid "If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name, certificate and matching private key must also be specified below."
+msgstr "Se habilitado, o nome de usuário e senha será transmitido sobre uma conexão HTTPS para protegê-los de eavesdroppers. Um nome de servidor, certificado e chave privada correspondente também devem ser especificados abaixo."
+
+#: usr/local/www/services_captiveportal.php:826
+#: usr/local/www/services_captiveportal.php:868
+#: usr/local/www/services_captiveportal.php:866
+#: usr/local/www/services_captiveportal.php:884
+msgid "HTTPS server name"
+msgstr "Nome do servidor HTTPS"
+
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:871
+#: usr/local/www/services_captiveportal.php:869
+#: usr/local/www/services_captiveportal.php:887
+#, php-format
+msgid "This name will be used in the form action for the HTTPS POST and should match the Common Name (CN) in your certificate (otherwise, the client browser will most likely display a security warning). Make sure captive portal clients can resolve this name in DNS and verify on the client that the IP resolves to the correct interface IP on %s."
+msgstr "Esse nome será usado na ação do formulário para o POST HTTPS e deve corresponder ao Common Name (CN) no seu certificado (do contrário, o browser do cliente irá provavelmente mostrar um aviso de segurança). Tenha certeza que os clientes do portal captive podem resolver esse nome em DNS e verificar no cliente que o IP resulta no IP de interface correto em %s."
+
+#: usr/local/www/services_captiveportal.php:832
+#: usr/local/www/services_captiveportal.php:874
+msgid "HTTPS certificate"
+msgstr "Certificado HTTPS"
+
+#: usr/local/www/services_captiveportal.php:836
+#: usr/local/www/services_captiveportal.php:878
+msgid "Paste a signed certificate in X.509 PEM format here."
+msgstr "Cole um certificado assinado no formato X.509 PEM aqui."
+
+#: usr/local/www/services_captiveportal.php:839
+#: usr/local/www/services_captiveportal.php:881
+msgid "HTTPS private key"
+msgstr "Chave privada HTTPS"
+
+#: usr/local/www/services_captiveportal.php:843
+#: usr/local/www/services_captiveportal.php:885
+msgid "Paste an RSA private key in PEM format here."
+msgstr "Cole uma chave privada RSA no formato PEM aqui."
+
+#: usr/local/www/services_captiveportal.php:846
+#: usr/local/www/services_captiveportal.php:888
+msgid "HTTPS intermediate certificate"
+msgstr "Certificado intermediário HTTPS"
+
+#: usr/local/www/services_captiveportal.php:850
+#: usr/local/www/system_camanager.php:406
+#: usr/local/www/system_certmanager.php:515
+#: usr/local/www/system_certmanager.php:614
+#: usr/local/www/services_captiveportal.php:892
+#: usr/local/www/system_camanager.php:413
+#: usr/local/www/system_certmanager.php:623
+#: usr/local/www/system_certmanager.php:624
+msgid "Paste a certificate in X.509 PEM format here."
+msgstr "Cole um certificado em formato X.509 PEM aqui."
+
+#: usr/local/www/services_captiveportal.php:853
+#: usr/local/www/services_captiveportal.php:895
+#: usr/local/www/services_captiveportal.php:891
+#: usr/local/www/services_captiveportal.php:893
+#: usr/local/www/services_captiveportal.php:909
+msgid "Portal page contents"
+msgstr "Conteúdo da página do portal"
+
+#: usr/local/www/services_captiveportal.php:865
+#: usr/local/www/services_captiveportal.php:899
+#: usr/local/www/services_captiveportal.php:913
+#: usr/local/www/services_captiveportal.php:910
+#: usr/local/www/services_captiveportal.php:944
+#: usr/local/www/services_captiveportal.php:958
+#: usr/local/www/services_captiveportal.php:906
+#: usr/local/www/services_captiveportal.php:940
+#: usr/local/www/services_captiveportal.php:954
+#: usr/local/www/services_captiveportal.php:908
+#: usr/local/www/services_captiveportal.php:942
+#: usr/local/www/services_captiveportal.php:956
+#: usr/local/www/services_captiveportal.php:924
+#: usr/local/www/services_captiveportal.php:972
+msgid "View current page"
+msgstr "Veja página atual"
+
+#: usr/local/www/services_captiveportal.php:871
+#: usr/local/www/services_captiveportal.php:916
+#: usr/local/www/services_captiveportal.php:912
+#: usr/local/www/services_captiveportal.php:914
+#: usr/local/www/services_captiveportal.php:930
+#, php-format
+msgid "Upload an HTML/PHP file for the portal page here (leave blank to keep the current one). Make sure to include a form (POST to %1$s) with a submit button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and %6$s and/or %7$s input fields if authentication is enabled, otherwise it will always fail."
+msgstr "Carregar um arquivo HTML/PHP para a página do portal aqui (deixe em branco para manter o atual). Tenha certeza que incluiu um formulário (com POST para %1$s) com um botão de submissão (%2$s) e campo escondido com %3$s e %4$s. Inclua os campos %5$s e %6$s e/ou %7$s se a autenticação estiver habilitada, do contrário ele sempre irá falhar."
+
+#: usr/local/www/services_captiveportal.php:882
+#: usr/local/www/services_captiveportal.php:927
+#: usr/local/www/services_captiveportal.php:923
+#: usr/local/www/services_captiveportal.php:925
+#: usr/local/www/services_captiveportal.php:941
+msgid "Example code for the form:"
+msgstr "Exemplo de código para o formulário:"
+
+#: usr/local/www/services_captiveportal.php:894
+#: usr/local/www/services_captiveportal.php:939
+#: usr/local/www/services_captiveportal.php:935
+#: usr/local/www/services_captiveportal.php:937
+#: usr/local/www/services_captiveportal.php:953
+msgid "error page"
+msgstr "página de erro"
+
+#: usr/local/www/services_captiveportal.php:895
+#: usr/local/www/services_captiveportal.php:909
+#: usr/local/www/services_captiveportal.php:940
+#: usr/local/www/services_captiveportal.php:954
+#: usr/local/www/services_captiveportal.php:936
+#: usr/local/www/services_captiveportal.php:950
+#: usr/local/www/services_captiveportal.php:938
+#: usr/local/www/services_captiveportal.php:952
+#: usr/local/www/services_captiveportal.php:968
+msgid "contents"
+msgstr "conteúdo"
+
+#: usr/local/www/services_captiveportal.php:903
+#: usr/local/www/services_captiveportal.php:948
+#: usr/local/www/services_captiveportal.php:944
+#: usr/local/www/services_captiveportal.php:946
+#: usr/local/www/services_captiveportal.php:962
+msgid "The contents of the HTML/PHP file that you upload here are displayed when an authentication error occurs. You may include"
+msgstr "O conteúdo do arquivo HTML/PHP que você carregar aqui é exibido quando um erro de autenticação ocorrer. Você deve incluir"
+
+#: usr/local/www/services_captiveportal.php:904
+#: usr/local/www/services_captiveportal.php:949
+#: usr/local/www/services_captiveportal.php:945
+#: usr/local/www/services_captiveportal.php:947
+#: usr/local/www/services_captiveportal.php:963
+msgid "which will be replaced by the error or reply messages from the RADIUS server, if any."
+msgstr "que será substituído pela mensagem de erro ou de resposta do servidor RADIUS, se houver."
+
+#: usr/local/www/services_captiveportal.php:907 usr/local/www/fbegin.inc:86
+#: usr/local/www/fbegin.inc:103 usr/local/www/services_captiveportal.php:952
+#: usr/local/www/fbegin.inc:112 usr/local/www/services_captiveportal.php:948
+#: usr/local/www/services_captiveportal.php:950 usr/local/www/fbegin.inc:104
+#: usr/local/www/services_captiveportal.php:966
+msgid "Logout"
+msgstr "Logout"
+
+#: usr/local/www/services_captiveportal.php:917
+#: usr/local/www/services_captiveportal.php:962
+#: usr/local/www/services_captiveportal.php:958
+#: usr/local/www/services_captiveportal.php:960
+#: usr/local/www/services_captiveportal.php:976
+msgid "The contents of the HTML/PHP file that you upload here are displayed on authentication success when the logout popup is enabled."
+msgstr "O conteúdo do arquivo HTML/PHP que você carregou aqui são exibidos no sucesso de autenticação quando a popup de logout estiver habilitada."
+
+#: usr/local/www/services_captiveportal.php:930
+#: usr/local/www/services_captiveportal.php:975
+#: usr/local/www/services_captiveportal.php:971
+#: usr/local/www/services_captiveportal.php:973
+#: usr/local/www/services_captiveportal.php:989
+msgid "Changing any settings on this page will disconnect all clients! Don't forget to enable the DHCP server on your captive portal interface! Make sure that the default/maximum DHCP lease time is higher than the timeout entered on this page. Also, the DNS forwarder needs to be enabled for DNS lookups by unauthenticated clients to work."
+msgstr "Mudando qualquer configuração nessa página irá desconectar todos os clientes! Não esqueça de habilitar o servidor DHCP na interface de seu portal captive! Tenha certeza de que o tempo de concessão padrão/máximo é maior que o tempo de expiração informado nessa página. Além disso, o DNS forwarder precisa estar habilitado para receber DNS lookups de clientes não autenticados para funcionar."
+
+#: usr/local/www/services_captiveportal_filemanager.php:101
+#: usr/local/www/services_captiveportal_filemanager.php:98
+#, php-format
+msgid "A file with the name '%s' already exists."
+msgstr "Um arquivo com o nome '%s' já existe."
+
+#: usr/local/www/services_captiveportal_filemanager.php:108
+#: usr/local/www/services_captiveportal_filemanager.php:105
+msgid "The total size of all files uploaded may not exceed "
+msgstr "O tamanho total de todos os arquivos carregados não pode exceder "
+
+#: usr/local/www/services_captiveportal_filemanager.php:163
+#: usr/local/www/system_firmware_restorefullbackup.php:141
+#: usr/local/www/services_captiveportal_filemanager.php:160
+#: usr/local/www/diag_system_pftop.php:140
+#: usr/local/www/diag_system_pftop.php:159
+msgid "Size"
+msgstr "Tamanho"
+
+#: usr/local/www/services_captiveportal_filemanager.php:168
+#: usr/local/www/services_captiveportal_filemanager.php:207
+#: usr/local/www/services_captiveportal_filemanager.php:165
+#: usr/local/www/services_captiveportal_filemanager.php:204
+msgid "add file"
+msgstr "adicionar arquivo"
+
+#: usr/local/www/services_captiveportal_filemanager.php:179
+#: usr/local/www/services_captiveportal_filemanager.php:176
+msgid "Do you really want to delete this file?"
+msgstr "Você realmente deseja apagar esse arquivo?"
+
+#: usr/local/www/services_captiveportal_filemanager.php:179
+#: usr/local/www/services_captiveportal_filemanager.php:176
+msgid "delete file"
+msgstr "apagar arquivo"
+
+#: usr/local/www/services_captiveportal_filemanager.php:186
+#: usr/local/www/services_captiveportal_filemanager.php:183
+msgid "TOTAL"
+msgstr "TOTAL"
+
+#: usr/local/www/services_captiveportal_filemanager.php:197
+#: usr/local/www/services_captiveportal_filemanager.php:194
+msgid "cancel"
+msgstr "cancelar"
+
+#: usr/local/www/services_captiveportal_filemanager.php:217
+#: usr/local/www/services_captiveportal_filemanager.php:214
+msgid "Any files that you upload here with the filename prefix of captiveportal- will be made available in the root directory of the captive portal HTTP(S) server. You may reference them directly from your portal page HTML code using relative paths. Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the file manager. Then you can include it in your portal page like this:"
+msgstr "Qualquer arquivo que você carregar aqui com o prefixo de seu nome como captiveportal- será colocado a disposição no diretório root do servidor HTTP(S) do portal captive. Você deve referencia-los diretamente de seu código HTML da página do seu portal usando caminhos relativos. Exemplo: você carregou uma imagem com o nome 'captiveportal-test.jpg' usando o gerenciador de arquivo. Então você pode inclui-lo na sua página de portal assim:"
+
+#: usr/local/www/services_captiveportal_filemanager.php:224
+#: usr/local/www/services_captiveportal_filemanager.php:221
+msgid "In addition, you can also upload .php files for execution. You can pass the filename to your custom page from the initial page by using text similar to:"
+msgstr "Adicionalmente você também pode carregar os arquivos .php para execução. Você pode passar o nome do arquivo para sua página personalizada pela página inicial usando um texto similar a:"
+
+#: usr/local/www/services_captiveportal_filemanager.php:227
+#: usr/local/www/services_captiveportal_filemanager.php:224
+msgid "Acceptable usage policy"
+msgstr "Política de uso aceitável"
+
+#: usr/local/www/services_captiveportal_filemanager.php:229
+#: usr/local/www/services_captiveportal_filemanager.php:226
+#, php-format
+msgid "The total size limit for all files is %s."
+msgstr "O limite total de tamanho para todos os arquivos é %s."
+
+#: usr/local/www/diag_limiter_info.php:46
+msgid "Diagnostics: Limiter Info"
+msgstr "Diagnósticos: Limiter Info"
+
+#: usr/local/www/diag_limiter_info.php:108
+#: usr/local/www/diag_limiter_info.php:109
+msgid "Gathering Limiter information, please wait..."
+msgstr "Definindo informações da fatia, por favor aguarde..."
+
+#: usr/local/www/firewall_nat.php:197 usr/local/www/firewall_nat.php:202
+#: usr/local/www/firewall_nat.php:205
+msgid "Src. addr"
+msgstr "End. fonte"
+
+#: usr/local/www/firewall_nat.php:198 usr/local/www/firewall_nat.php:203
+#: usr/local/www/firewall_nat.php:206
+msgid "Src. ports"
+msgstr "Portas fonte"
+
+#: usr/local/www/firewall_nat.php:199 usr/local/www/firewall_nat.php:204
+#: usr/local/www/firewall_nat.php:207
+msgid "Dest. addr"
+msgstr "End. destino"
+
+#: usr/local/www/firewall_nat.php:200 usr/local/www/firewall_nat.php:205
+#: usr/local/www/firewall_nat.php:208
+msgid "Dest. ports"
+msgstr "Portas destino"
+
+#: usr/local/www/firewall_nat.php:201 usr/local/www/firewall_nat.php:206
+#: usr/local/www/firewall_nat.php:209
+msgid "NAT IP"
+msgstr "IP NAT"
+
+#: usr/local/www/firewall_nat.php:202 usr/local/www/firewall_nat.php:207
+#: usr/local/www/firewall_nat.php:210
+msgid "NAT Ports"
+msgstr "Portas NAT"
+
+#: usr/local/www/firewall_nat.php:252 usr/local/www/firewall_nat.php:265
+#: usr/local/www/firewall_nat.php:268
+msgid "All traffic matching this NAT entry is passed"
+msgstr "Todo o tráfego correspondente a essa entrada NAT é liberado"
+
+#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267
+#: usr/local/www/firewall_nat.php:270
+msgid "Firewall rule ID"
+msgstr "ID da regra de firewall"
+
+#: usr/local/www/firewall_nat.php:254 usr/local/www/firewall_nat.php:267
+#: usr/local/www/firewall_nat.php:270
+msgid "is managed with this rule"
+msgstr "é gerenciado por essa regra"
+
+#: usr/local/www/firewall_nat.php:313 usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:451 usr/local/www/firewall_nat.php:326
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:455 usr/local/www/firewall_nat.php:329
+#: usr/local/www/firewall_nat_out.php:454
+msgid "Do you really want to delete this rule?"
+msgstr "Você realmente quer apagar esta regra?"
+
+#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:362
+#: usr/local/www/firewall_nat.php:365
+msgid "linked rule"
+msgstr "regra associada"
+
+#: usr/local/www/diag_ipsec.php:78 usr/local/www/diag_ipsec_sad.php:73
+#: usr/local/www/diag_ipsec_spd.php:72 usr/local/www/diag_ipsec.php:88
+#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec_sad.php:74
+#: usr/local/www/diag_ipsec_spd.php:73 usr/local/www/diag_ipsec.php:91
+msgid "Overview"
+msgstr "Visão geral"
+
+#: usr/local/www/diag_ipsec.php:79 usr/local/www/diag_ipsec_sad.php:49
+#: usr/local/www/diag_ipsec_sad.php:74 usr/local/www/diag_ipsec_spd.php:73
+#: usr/local/www/diag_ipsec.php:89 usr/local/www/diag_ipsec.php:90
+#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:74
+#: usr/local/www/diag_ipsec.php:92
+msgid "SAD"
+msgstr "SAD"
+
+#: usr/local/www/diag_ipsec.php:80 usr/local/www/diag_ipsec_sad.php:75
+#: usr/local/www/diag_ipsec_spd.php:49 usr/local/www/diag_ipsec_spd.php:74
+#: usr/local/www/diag_ipsec.php:90 usr/local/www/diag_ipsec.php:91
+#: usr/local/www/diag_ipsec_sad.php:76 usr/local/www/diag_ipsec_spd.php:75
+#: usr/local/www/diag_ipsec.php:93
+msgid "SPD"
+msgstr "SPD"
+
+#: usr/local/www/diag_ipsec.php:81 usr/local/www/diag_ipsec_sad.php:76
+#: usr/local/www/diag_ipsec_spd.php:75 usr/local/www/diag_ipsec.php:91
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_sad.php:77
+#: usr/local/www/diag_ipsec_spd.php:76 usr/local/www/diag_ipsec.php:94
+msgid "Logs"
+msgstr "Logs"
+
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec.php:103
+#: usr/local/www/diag_ipsec.php:104 usr/local/www/diag_ipsec.php:106
+msgid "Remote IP"
+msgstr "IP remoto"
+
+#: usr/local/www/diag_ipsec.php:93 usr/local/www/vpn_ipsec_phase2.php:419
+#: usr/local/www/diag_ipsec.php:104 usr/local/www/vpn_ipsec_phase2.php:445
+#: usr/local/www/diag_ipsec.php:105 usr/local/www/vpn_ipsec_phase2.php:511
+#: usr/local/www/diag_ipsec.php:107 usr/local/www/vpn_ipsec_phase2.php:533
+msgid "Local Network"
+msgstr "Rede Local"
+
+#: usr/local/www/diag_ipsec.php:94 usr/local/www/vpn_ipsec_phase2.php:461
+#: usr/local/www/vpn_openvpn_client.php:762
+#: usr/local/www/vpn_openvpn_server.php:1055 usr/local/www/diag_ipsec.php:105
+#: usr/local/www/vpn_openvpn_server.php:1197
+#: usr/local/www/vpn_ipsec_phase2.php:487
+#: usr/local/www/vpn_openvpn_client.php:767 usr/local/www/diag_ipsec.php:106
+#: usr/local/www/vpn_ipsec_phase2.php:589 usr/local/www/diag_ipsec.php:108
+#: usr/local/www/vpn_ipsec_phase2.php:610
+msgid "Remote Network"
+msgstr "Rede Remota"
+
+#: usr/local/www/diag_ipsec.php:165 usr/local/www/diag_ipsec_sad.php:135
+#: usr/local/www/diag_ipsec_spd.php:144 usr/local/www/diag_ipsec_sad.php:136
+#: usr/local/www/diag_ipsec_spd.php:145
+msgid "You can configure your IPsec"
+msgstr "Você pode configurar seu IPsec"
+
+#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_sad.php:91
+msgid "SPI"
+msgstr "SPI"
+
+#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_sad.php:92
+msgid "Enc. alg."
+msgstr "Enc. alg."
+
+#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_sad.php:93
+msgid "Auth. alg."
+msgstr "Log de Autenticação."
+
+#: usr/local/www/diag_ipsec_sad.php:93 usr/local/www/diag_ipsec_sad.php:94
+msgid "Data"
+msgstr "Data"
+
+#: usr/local/www/diag_ipsec_sad.php:112 usr/local/www/diag_ipsec_sad.php:113
+msgid "Do you really want to delete this security association?"
+msgstr "Você realmente deseja apagar esta associação de segurança?"
+
+#: usr/local/www/diag_ipsec_sad.php:121 usr/local/www/diag_ipsec_sad.php:122
+msgid "No IPsec security associations."
+msgstr "Nenhuma associação de segurança IPsec."
+
+#: usr/local/www/services_captiveportal_ip.php:123
+#: usr/local/www/services_captiveportal_ip.php:163
+#: usr/local/www/services_captiveportal_hostname.php:128
+#: usr/local/www/services_captiveportal_hostname.php:164
+#: usr/local/www/services_captiveportal_ip.php:121
+#: usr/local/www/services_captiveportal_ip.php:161
+#: usr/local/www/services_captiveportal_hostname.php:126
+#: usr/local/www/services_captiveportal_hostname.php:162
+msgid "add address"
+msgstr "adicionar endereço"
+
+#: usr/local/www/services_captiveportal_ip.php:153
+#: usr/local/www/services_captiveportal_hostname.php:154
+#: usr/local/www/services_captiveportal_ip.php:151
+#: usr/local/www/services_captiveportal_hostname.php:152
+msgid "edit address"
+msgstr "editar endereço"
+
+#: usr/local/www/services_captiveportal_ip.php:154
+#: usr/local/www/services_captiveportal_hostname.php:155
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+msgid "Do you really want to delete this address?"
+msgstr "Você realmente deseja apagar esse endereço?"
+
+#: usr/local/www/services_captiveportal_ip.php:154
+#: usr/local/www/services_captiveportal_hostname.php:155
+#: usr/local/www/services_captiveportal_ip.php:152
+#: usr/local/www/services_captiveportal_hostname.php:153
+msgid "delete address"
+msgstr "apagar endereço"
+
+#: usr/local/www/services_captiveportal_ip.php:172
+#: usr/local/www/services_captiveportal_ip.php:170
+msgid "Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal."
+msgstr "Adicionando endereços IP permitidos irá permitir acesso dos IPs de destino/origem esses endereços através do portal captive sem que sejam direcionados à página do portal. Isso pode ser usado para um servidor web que serve imagens para a página do portal ou um servidor DNS em outra rede, por exemplo. Especificando endereços <em>de origem</em>, isso pode ser usado para sempre permitir acesso pass-through de um cliente por trás do portal captive."
+
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "All connections"
+msgstr "Todas as conexões"
+
+#: usr/local/www/services_captiveportal_ip.php:176
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_ip.php:174
+#: usr/local/www/services_captiveportal_ip.php:181
+msgid "the IP address are allowed"
+msgstr "o endereço IP permitido"
+
+#: usr/local/www/services_captiveportal_ip.php:183
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_ip.php:181
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "from"
+msgstr "de"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:63
+#: usr/local/www/services_captiveportal_ip_edit.php:60
+msgid "Edit allowed IP address"
+msgstr "Editar endereços IP permitidos"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:102
+#: usr/local/www/services_captiveportal_ip_edit.php:100
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+msgid "Allowed IP address"
+msgstr "Endereços IP permitidos"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:110
+#: usr/local/www/services_captiveportal_mac_edit.php:108
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_hostname_edit.php:108
+#: usr/local/www/services_captiveportal_mac_edit.php:106
+#: usr/local/www/services_captiveportal_ip_edit.php:108
+msgid "Upload speed needs to be an integer"
+msgstr "Velocidade de carregamento necessário deve ser um inteiro"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:113
+#: usr/local/www/services_captiveportal_mac_edit.php:110
+#: usr/local/www/services_captiveportal_hostname_edit.php:112
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_mac_edit.php:108
+#: usr/local/www/services_captiveportal_ip_edit.php:111
+msgid "Download speed needs to be an integer"
+msgstr "Velocidade de download necessária deve ser um inteiro"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:120
+#: usr/local/www/services_captiveportal_mac_edit.php:117
+#: usr/local/www/services_captiveportal_hostname_edit.php:119
+#: usr/local/www/services_captiveportal_hostname_edit.php:117
+#: usr/local/www/services_captiveportal_mac_edit.php:115
+#: usr/local/www/services_captiveportal_ip_edit.php:118
+msgid "already allowed"
+msgstr "já permitido"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:175
+#: usr/local/www/services_captiveportal_ip_edit.php:173
+#: usr/local/www/services_captiveportal_ip_edit.php:184
+msgid "Edit allowed ip rule"
+msgstr "Edita regras de IP permitidas"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/system_gateways_edit.php:442
+#: usr/local/www/system_gateways_edit.php:454
+#: usr/local/www/system_gateways_edit.php:463
+#: usr/local/www/system_gateways_edit.php:475
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+#: usr/local/www/system_gateways_edit.php:569
+#: usr/local/www/system_gateways_edit.php:581
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+#: usr/local/www/system_gateways_edit.php:573
+#: usr/local/www/system_gateways_edit.php:585
+#: usr/local/www/system_gateways_edit.php:575
+#: usr/local/www/system_gateways_edit.php:587
+#: usr/local/www/system_gateways_edit.php:605
+#: usr/local/www/system_gateways_edit.php:617
+msgid "From"
+msgstr "De"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:182
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:164
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/system_gateways_edit.php:445
+#: usr/local/www/system_gateways_edit.php:457
+#: usr/local/www/system_gateways_edit.php:466
+#: usr/local/www/system_gateways_edit.php:478
+#: usr/local/www/services_captiveportal_hostname_edit.php:162
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+#: usr/local/www/system_gateways_edit.php:572
+#: usr/local/www/system_gateways_edit.php:584
+#: usr/local/www/services_captiveportal_ip_edit.php:180
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+#: usr/local/www/system_gateways_edit.php:576
+#: usr/local/www/system_gateways_edit.php:588
+#: usr/local/www/system_gateways_edit.php:578
+#: usr/local/www/system_gateways_edit.php:590
+#: usr/local/www/system_gateways_edit.php:608
+#: usr/local/www/system_gateways_edit.php:620
+msgid "To"
+msgstr "Para"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+msgid "Use"
+msgstr "Use"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:191
+#: usr/local/www/services_captiveportal_ip_edit.php:189
+msgid "to always allow an IP address through the captive portal (without authentication)"
+msgstr "para sempre permitir um endereço de IP através do portal captive (sem autenticação)"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:192
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+msgid "to allow access from all clients (even non-authenticated ones) behind the portal to this IP address"
+msgstr "para permitir acesso de todos os clientes (mesmo aqueles não autenticados) atrás do portal para esse endereço de IP"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:204
+#: usr/local/www/services_captiveportal_ip_edit.php:202
+#: usr/local/www/services_captiveportal_ip_edit.php:196
+msgid "IP address and subnet mask. Use /32 for a single IP"
+msgstr "Endereço IP e máscara de subrede. Use /32 para um IP sozinho"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:215
+#: usr/local/www/services_captiveportal_mac_edit.php:189
+#: usr/local/www/services_captiveportal_hostname_edit.php:189
+#: usr/local/www/services_captiveportal_hostname_edit.php:187
+#: usr/local/www/services_captiveportal_mac_edit.php:187
+#: usr/local/www/services_captiveportal_ip_edit.php:213
+#: usr/local/www/services_captiveportal_ip_edit.php:207
+#: usr/local/www/services_captiveportal_mac_edit.php:200
+msgid "Bandwidth up"
+msgstr "Tamanho de banda de carregamento"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:218
+#: usr/local/www/services_captiveportal_ip_edit.php:216
+#: usr/local/www/services_captiveportal_ip_edit.php:210
+msgid "Enter a upload limit to be enforced on this IP address in Kbit/s"
+msgstr "Informe um limite de carregamento para ser utilizado nesse endereço IP em Kbit/s"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:222
+#: usr/local/www/services_captiveportal_mac_edit.php:195
+#: usr/local/www/services_captiveportal_hostname_edit.php:195
+#: usr/local/www/services_captiveportal_hostname_edit.php:193
+#: usr/local/www/services_captiveportal_mac_edit.php:193
+#: usr/local/www/services_captiveportal_ip_edit.php:220
+#: usr/local/www/services_captiveportal_ip_edit.php:214
+#: usr/local/www/services_captiveportal_mac_edit.php:206
+msgid "Bandwidth down"
+msgstr "Tamanho de banda de download"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:225
+#: usr/local/www/services_captiveportal_ip_edit.php:223
+#: usr/local/www/services_captiveportal_ip_edit.php:217
+msgid "Enter a download limit to be enforced on this IP address in Kbit/s"
+msgstr "Informe o limite de download para ser utilizado nesse endereço IP em Kbit/s"
+
+#: usr/local/www/services_captiveportal_mac.php:80
+#: usr/local/www/services_captiveportal_mac.php:78
+msgid "No entry exists yet!"
+msgstr "Nenhuma entrada existente ainda!"
+
+#: usr/local/www/services_captiveportal_mac.php:84
+#: usr/local/www/services_captiveportal_mac.php:82
+msgid "Please set the zone on which the operation should be allowed"
+msgstr "Por favor, defina a zona na qual a operação deve ser permitida"
+
+#: usr/local/www/services_captiveportal_mac.php:96
+#: usr/local/www/services_captiveportal_mac.php:94
+msgid "No entry exists for this username:"
+msgstr "Nenhuma entrada existente para esse nome de usuário:"
+
+#: usr/local/www/services_captiveportal_mac.php:115
+#: usr/local/www/services_captiveportal_mac.php:113
+#: usr/local/www/services_captiveportal_mac.php:118
+msgid "The entry was sucessfully deleted"
+msgstr "A entrada foi apagada com sucesso"
+
+#: usr/local/www/services_captiveportal_mac.php:117
+#: usr/local/www/services_captiveportal_mac.php:115
+#: usr/local/www/services_captiveportal_mac.php:120
+msgid "No entry exists for this mac address:"
+msgstr "Nenhuma entrada existente para esse endereço mac:"
+
+#: usr/local/www/services_captiveportal_mac.php:148
+#: usr/local/www/services_captiveportal_mac.php:146
+#: usr/local/www/services_captiveportal_mac.php:156
+msgid "The captive portal MAC address configuration has been changed.<br>You must apply the changes in order for them to take effect."
+msgstr "A configuração de endereço MAC do portal captive foi modificada.<br>Você deve aplicar as modificações para que elas tenham efeito."
+
+#: usr/local/www/services_captiveportal_mac.php:180
+#: usr/local/www/services_captiveportal_mac.php:178
+#: usr/local/www/services_captiveportal_mac.php:188
+msgid "edit host"
+msgstr "editar host"
+
+#: usr/local/www/services_captiveportal_mac.php:181
+#: usr/local/www/services_dnsmasq.php:276
+#: usr/local/www/services_unbound.php:312
+#: usr/local/www/services_dnsmasq.php:277
+#: usr/local/www/services_captiveportal_mac.php:179
+#: usr/local/www/services_dnsmasq.php:302
+#: usr/local/www/services_captiveportal_mac.php:189
+#: usr/local/www/services_dnsmasq.php:315
+#: usr/local/www/services_dnsmasq.php:379
+msgid "Do you really want to delete this host?"
+msgstr "Você realmente deseja apagar esse host?"
+
+#: usr/local/www/services_captiveportal_mac.php:181
+#: usr/local/www/services_captiveportal_mac.php:179
+#: usr/local/www/services_captiveportal_mac.php:189
+msgid "delete host"
+msgstr "remover host"
+
+#: usr/local/www/services_captiveportal_mac.php:186
+#: usr/local/www/services_captiveportal_mac.php:184
+#: usr/local/www/services_captiveportal_mac.php:194
+msgid "add host"
+msgstr "adicionar host"
+
+#: usr/local/www/services_captiveportal_mac.php:192
+#: usr/local/www/services_captiveportal_mac.php:190
+#: usr/local/www/services_captiveportal_mac.php:200
+msgid "Adding MAC addresses as pass-through MACs allows them access through the captive portal automatically without being taken to the portal page."
+msgstr "Adicionar endereços MAC como MACs pass-throughs permite que eles tenham acesso através do portal captive automaticamente sem que sejam direcionados à página do portal."
+
+#: usr/local/www/services_captiveportal_mac_edit.php:60
+#: usr/local/www/services_captiveportal_mac_edit.php:57
+msgid "Edit pass-through MAC address"
+msgstr "Editar endereço MAC pass-through"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:105
+#: usr/local/www/services_captiveportal_mac_edit.php:103
+msgid "A valid MAC address must be specified"
+msgstr "Um endereço MAC válido deve ser especificado"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:172
+#: usr/local/www/services_captiveportal_mac_edit.php:170
+#: usr/local/www/services_captiveportal_mac_edit.php:177
+msgid "Edit Pass-through MAC address"
+msgstr "Editar liberação de tráfego (Pass-through) do endereço MAC"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:179
+#: usr/local/www/services_captiveportal_mac_edit.php:177
+#: usr/local/www/services_captiveportal_mac_edit.php:190
+msgid "MAC address (6 hex octets separated by colons)"
+msgstr "Endereço MAC (6 octetos hexadecimais separados por vírgulas)"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:192
+#: usr/local/www/services_captiveportal_mac_edit.php:190
+#: usr/local/www/services_captiveportal_mac_edit.php:203
+msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s"
+msgstr "Informe um limite de carregamento para ser utilizado nesse endereço MAC em Kbit/s"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:198
+#: usr/local/www/services_captiveportal_mac_edit.php:196
+#: usr/local/www/services_captiveportal_mac_edit.php:209
+msgid "Enter a download limit to be enforced on this MAC address in Kbit/s"
+msgstr "Informe um limite de download para ser utilizado nesse endereço MAC em Kbit/s"
+
+#: usr/local/www/diag_ipsec_spd.php:90 usr/local/www/diag_ipsec_spd.php:91
+msgid "Tunnel endpoints"
+msgstr "Extremidades do túnel"
+
+#: usr/local/www/diag_ipsec_spd.php:108 usr/local/www/diag_ipsec_spd.php:109
+msgid "Do you really want to delete this security policy?"
+msgstr "Você realmente deseja excluir essa politica de segurança?"
+
+#: usr/local/www/diag_ipsec_spd.php:119 usr/local/www/diag_ipsec_spd.php:120
+msgid "incoming (as seen by firewall)"
+msgstr "entrada (como visto pelo firewall)"
+
+#: usr/local/www/diag_ipsec_spd.php:126 usr/local/www/diag_ipsec_spd.php:127
+msgid "outgoing (as seen by firewall)"
+msgstr "saída (como visto pelo firewall)"
+
+#: usr/local/www/diag_ipsec_spd.php:131 usr/local/www/diag_ipsec_spd.php:132
+msgid "No IPsec security policies."
+msgstr "Nenhuma politica de segurança IPsec."
+
+#: usr/local/www/diag_ping.php:59 usr/local/www/diag_ping.php:61
+#, php-format
+msgid "Count must be between 1 and %s"
+msgstr "Contagem deve estar entre 1 e %s"
+
+#: usr/local/www/diag_ping.php:126 usr/local/www/diag_ping.php:148
+msgid "Ping output"
+msgstr "Ping output"
+
+#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcp.php:112
+msgid "The DHCP Server can only be enabled on interfaces configured with static IP addresses"
+msgstr "O servidor DHCP pode somente ser habilitado em interfaces configuradas com endereços IP estáticos"
+
+#: usr/local/www/services_dhcp.php:111 usr/local/www/services_dhcpv6.php:74
+#: usr/local/www/services_router_advertisements.php:75
+#: usr/local/www/services_dhcpv6.php:75 usr/local/www/services_dhcp.php:112
+msgid "Only interfaces configured with a static IP will be shown"
+msgstr "Somente interfaces configuradas com um IP estático serão exibidas"
+
+#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177
+#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+#: usr/local/www/services_dhcp.php:236
+msgid "Range begin"
+msgstr "Início do intervalo"
+
+#: usr/local/www/services_dhcp.php:207 usr/local/www/services_dhcpv6.php:177
+#: usr/local/www/services_dhcp.php:208 usr/local/www/services_dhcpv6.php:189
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcpv6.php:174
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcpv6.php:168
+#: usr/local/www/services_dhcp.php:236
+msgid "Range end"
+msgstr "Fim do intervalo"
+
+#: usr/local/www/services_dhcp.php:212 usr/local/www/services_dhcp.php:214
+#: usr/local/www/services_dhcpv6.php:182 usr/local/www/services_dhcpv6.php:186
+#: usr/local/www/services_dhcpv6.php:188 usr/local/www/services_dhcp.php:213
+#: usr/local/www/services_dhcp.php:215 usr/local/www/services_dhcpv6.php:194
+#: usr/local/www/services_dhcpv6.php:198 usr/local/www/services_dhcpv6.php:200
+#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcp.php:261
+#: usr/local/www/services_dhcpv6.php:179 usr/local/www/services_dhcpv6.php:183
+#: usr/local/www/services_dhcpv6.php:185 usr/local/www/services_dhcp.php:240
+#: usr/local/www/services_dhcp.php:242 usr/local/www/services_dhcpv6.php:173
+#: usr/local/www/services_dhcpv6.php:177 usr/local/www/services_dhcp.php:241
+#: usr/local/www/services_dhcp.php:243
+msgid "A valid range must be specified."
+msgstr "Um intervalo válido deve ser especificado."
+
+#: usr/local/www/services_dhcp.php:216 usr/local/www/services_dhcp.php:217
+#: usr/local/www/services_dhcp.php:263
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:245
+msgid "A valid IP address must be specified for the gateway."
+msgstr "Um endereço IP válido deve ser especificado para o gateway."
+
+#: usr/local/www/services_dhcp.php:218 usr/local/www/services_dhcp.php:219
+#: usr/local/www/services_dhcp.php:265
+#: usr/local/www/services_dhcp_edit.php:209
+#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:247
+msgid "A valid IP address must be specified for the primary/secondary WINS servers."
+msgstr "Um endereço IP válido deve ser especificado para os servidores WINS primário/secundário."
+
+#: usr/local/www/services_dhcp.php:223 usr/local/www/services_dhcp.php:224
+#: usr/local/www/services_dhcp.php:270
+#: usr/local/www/services_dhcp_edit.php:215
+#: usr/local/www/services_dhcp.php:251 usr/local/www/services_dhcp.php:252
+#, php-format
+msgid "The gateway address %s does not lie within the chosen interface's subnet."
+msgstr "O endereço gateway %s não está dentro da subrede da interface escolhida."
+
+#: usr/local/www/services_dhcp.php:226 usr/local/www/services_dhcp.php:227
+#: usr/local/www/services_dhcp.php:273
+#: usr/local/www/services_dhcp_edit.php:218
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcp.php:255
+msgid "A valid IP address must be specified for the primary/secondary DNS servers."
+msgstr "Um endereço IP válido deve ser especificado para os servidores DNS primário/secundário."
+
+#: usr/local/www/services_dhcp.php:229 usr/local/www/services_dhcpv6.php:195
+#: usr/local/www/services_dhcp.php:230 usr/local/www/services_dhcpv6.php:207
+#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcpv6.php:192
+#: usr/local/www/services_dhcp_edit.php:221
+#: usr/local/www/services_dhcp.php:257 usr/local/www/services_dhcpv6.php:186
+#: usr/local/www/services_dhcp.php:258
+msgid "The default lease time must be at least 60 seconds."
+msgstr "O tempo de concessão padrão deve ser de no mínimo 60 segundos."
+
+#: usr/local/www/services_dhcp.php:231 usr/local/www/services_dhcpv6.php:197
+#: usr/local/www/services_dhcp.php:232 usr/local/www/services_dhcpv6.php:209
+#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcpv6.php:194
+#: usr/local/www/services_dhcp_edit.php:223
+#: usr/local/www/services_dhcp.php:259 usr/local/www/services_dhcpv6.php:188
+#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:280
+msgid "The maximum lease time must be at least 60 seconds and higher than the default lease time."
+msgstr "O tempo de concessão máximo deve ser no mínimo de 60 segundos e maior que o tempo de concessão padrão."
+
+#: usr/local/www/services_dhcp.php:233 usr/local/www/services_dhcpv6.php:199
+#: usr/local/www/services_dhcp.php:234 usr/local/www/services_dhcpv6.php:211
+#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcpv6.php:196
+#: usr/local/www/services_dhcp_edit.php:225
+#: usr/local/www/services_dhcp.php:261 usr/local/www/services_dhcpv6.php:190
+#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcp.php:282
+msgid "A valid domain name must be specified for the dynamic DNS registration."
+msgstr "Um nome de domínio válido deve ser especificado para o registro de DNS dinâmico."
+
+#: usr/local/www/services_dhcp.php:235 usr/local/www/services_dhcp.php:246
+#: usr/local/www/services_dhcp.php:298
+#: usr/local/www/services_dhcp_edit.php:237
+#: usr/local/www/services_dhcp.php:279 usr/local/www/services_dhcp.php:299
+#: usr/local/www/services_dhcp.php:300
+msgid "A valid IP address must be specified for the primary/secondary NTP servers."
+msgstr "Um endereço IP válido deve ser especificado pelos servidores NTP primário/secundário."
+
+#: usr/local/www/services_dhcp.php:237 usr/local/www/services_dhcpv6.php:203
+#: usr/local/www/services_dhcp.php:248 usr/local/www/services_dhcpv6.php:225
+#: usr/local/www/services_dhcp.php:300 usr/local/www/services_dhcpv6.php:210
+#: usr/local/www/services_dhcp.php:281 usr/local/www/services_dhcpv6.php:204
+#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:302
+msgid "A valid domain name must be specified for the DNS domain."
+msgstr "Um nome de domínio válido deve ser especificado para o domínio DNS."
+
+#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcp.php:250
+#: usr/local/www/services_dhcp.php:302
+#: usr/local/www/services_dhcp_edit.php:239
+#: usr/local/www/services_dhcp.php:283 usr/local/www/services_dhcp.php:303
+#: usr/local/www/services_dhcp.php:304
+msgid "A valid IP address or hostname must be specified for the TFTP server."
+msgstr "Um endereço IP válido ou nome de host deve ser especificado para o servidor TFTP."
+
+#: usr/local/www/services_dhcp.php:241 usr/local/www/services_dhcp.php:252
+#: usr/local/www/services_dhcp.php:304
+#: usr/local/www/services_dhcp_edit.php:241
+#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcp.php:305
+#: usr/local/www/services_dhcp.php:306
+msgid "A valid IP address must be specified for the network boot server."
+msgstr "Um endereço IP válido deve ser especificado para o servidor de boot da rede."
+
+#: usr/local/www/services_dhcp.php:244 usr/local/www/services_dhcp.php:255
+#: usr/local/www/services_dhcp.php:307 usr/local/www/services_dhcp.php:288
+#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcp.php:309
+msgid "You cannot use the network address in the starting subnet range."
+msgstr "Você não pode usar o endereço da rede no início do intervalo da subrede."
+
+#: usr/local/www/services_dhcp.php:246 usr/local/www/services_dhcp.php:257
+#: usr/local/www/services_dhcp.php:309 usr/local/www/services_dhcp.php:290
+#: usr/local/www/services_dhcp.php:310 usr/local/www/services_dhcp.php:311
+msgid "You cannot use the broadcast address in the ending subnet range."
+msgstr "Você não pode usar o endereço de broadcast no final do intervalo de subrede."
+
+#: usr/local/www/services_dhcp.php:253 usr/local/www/services_dhcp.php:264
+#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp.php:317 usr/local/www/services_dhcp.php:318
+#, php-format
+msgid "The subnet range cannot overlap with virtual IP address %s."
+msgstr "O intervalo de subrede não pode sobrepor o endereço IP virtual %s."
+
+#: usr/local/www/services_dhcp.php:268 usr/local/www/services_dhcp.php:279
+#: usr/local/www/services_dhcp.php:331 usr/local/www/services_dhcp.php:312
+#: usr/local/www/services_dhcp.php:332 usr/local/www/services_dhcp.php:333
+msgid "Text type cannot include quotation marks."
+msgstr "Tipo texto não pode ter aspas."
+
+#: usr/local/www/services_dhcp.php:270 usr/local/www/services_dhcp.php:281
+#: usr/local/www/services_dhcp.php:333 usr/local/www/services_dhcp.php:314
+#: usr/local/www/services_dhcp.php:334 usr/local/www/services_dhcp.php:335
+msgid "String type must be enclosed in quotes like \"this\" or must be a series of octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:cd:ef"
+msgstr "Tipo String deve estar entre aspas \"assim\" ou deve ter uma série de octetos especificados em hexadecimal, separados por dois pontos, como 01:23:45:67:89:ab:cd:ef"
+
+#: usr/local/www/services_dhcp.php:272 usr/local/www/services_dhcp.php:283
+#: usr/local/www/services_dhcp.php:335 usr/local/www/services_dhcp.php:316
+#: usr/local/www/services_dhcp.php:336 usr/local/www/services_dhcp.php:337
+msgid "Boolean type must be true, false, on, or off."
+msgstr "Tipo booleano deve ser true, false, on ou off."
+
+#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:285
+#: usr/local/www/services_dhcp.php:337 usr/local/www/services_dhcp.php:318
+#: usr/local/www/services_dhcp.php:338 usr/local/www/services_dhcp.php:339
+msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255."
+msgstr "Inteiro de 8-bits sem sinal deve ser um número no intervalo de 0 a 255."
+
+#: usr/local/www/services_dhcp.php:276 usr/local/www/services_dhcp.php:287
+#: usr/local/www/services_dhcp.php:339 usr/local/www/services_dhcp.php:320
+#: usr/local/www/services_dhcp.php:340 usr/local/www/services_dhcp.php:341
+msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535."
+msgstr "Inteiro de 16-bits sem sinal deve ser um número no intervalo de 0 a 65535."
+
+#: usr/local/www/services_dhcp.php:278 usr/local/www/services_dhcp.php:289
+#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcp.php:322
+#: usr/local/www/services_dhcp.php:342 usr/local/www/services_dhcp.php:343
+msgid "Unsigned 32-bit integer type must be a number in the range 0 to 4294967295."
+msgstr "Inteiro de 32-bits sem sinal deve ser um número no intervalo de 0 a 4294967295."
+
+#: usr/local/www/services_dhcp.php:280 usr/local/www/services_dhcp.php:291
+#: usr/local/www/services_dhcp.php:343 usr/local/www/services_dhcp.php:324
+#: usr/local/www/services_dhcp.php:344 usr/local/www/services_dhcp.php:345
+msgid "Signed 8-bit integer type must be a number in the range -128 to 127."
+msgstr "Inteiro de 8-bits com sinal deve ser um número no intervalo de -128 a 127."
+
+#: usr/local/www/services_dhcp.php:282 usr/local/www/services_dhcp.php:293
+#: usr/local/www/services_dhcp.php:345 usr/local/www/services_dhcp.php:326
+#: usr/local/www/services_dhcp.php:346 usr/local/www/services_dhcp.php:347
+msgid "Signed 16-bit integer type must be a number in the range -32768 to 32767."
+msgstr "Inteiro de 16-bits com sinal deve ser um número no intervalo de -32768 a 32767."
+
+#: usr/local/www/services_dhcp.php:284 usr/local/www/services_dhcp.php:295
+#: usr/local/www/services_dhcp.php:347 usr/local/www/services_dhcp.php:328
+#: usr/local/www/services_dhcp.php:348 usr/local/www/services_dhcp.php:349
+msgid "Signed 32-bit integer type must be a number in the range -2147483648 to 2147483647."
+msgstr "Inteiro de 32-bits com sinal deve ser um número no intervalo de -2147483648 a 2147483647."
+
+#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp.php:349 usr/local/www/services_dhcp.php:330
+#: usr/local/www/services_dhcp.php:350 usr/local/www/services_dhcp.php:351
+msgid "IP address or host type must be an IP address or host name."
+msgstr "Endereço IP ou tipo de host deve ser um endereço IP ou nome de host."
+
+#: usr/local/www/services_dhcp.php:297 usr/local/www/services_dhcpv6.php:230
+#: usr/local/www/services_dhcp.php:308 usr/local/www/services_dhcpv6.php:252
+#: usr/local/www/services_dhcp.php:360 usr/local/www/services_dhcpv6.php:237
+#: usr/local/www/services_dhcp.php:341 usr/local/www/services_dhcpv6.php:232
+#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:362
+msgid "The specified range lies outside of the current subnet."
+msgstr "O intervalo especificado está fora da subrede atual."
+
+#: usr/local/www/services_dhcp.php:301 usr/local/www/services_dhcp.php:312
+#: usr/local/www/services_dhcpv6.php:257 usr/local/www/services_dhcp.php:364
+#: usr/local/www/services_dhcpv6.php:242 usr/local/www/services_dhcp.php:345
+#: usr/local/www/services_dhcpv6.php:237 usr/local/www/services_dhcp.php:365
+#: usr/local/www/services_dhcp.php:366
+msgid "The range is invalid (first element higher than second element)."
+msgstr "O intervalo é inválido (primeiro elemento maior que o segunto elemento)."
+
+#: usr/local/www/services_dhcp.php:305 usr/local/www/services_dhcpv6.php:240
+#: usr/local/www/services_dhcp.php:316 usr/local/www/services_dhcpv6.php:261
+#: usr/local/www/services_dhcp.php:372 usr/local/www/services_dhcpv6.php:246
+#: usr/local/www/services_dhcp.php:368 usr/local/www/services_dhcpv6.php:241
+#: usr/local/www/services_dhcp.php:388 usr/local/www/services_dhcp.php:389
+#, php-format
+msgid "You must disable the DHCP relay on the %s interface before enabling the DHCP server."
+msgstr "Você deve desabilitar o DHCP relay na interface %s antes de habilitar o servidor DHCP."
+
+#: usr/local/www/services_dhcp.php:315 usr/local/www/services_dhcp.php:326
+#: usr/local/www/services_dhcpv6.php:276 usr/local/www/services_dhcp.php:382
+#: usr/local/www/services_dhcpv6.php:261 usr/local/www/services_dhcp.php:378
+#: usr/local/www/services_dhcpv6.php:256 usr/local/www/services_dhcp.php:398
+#: usr/local/www/services_dhcp.php:399
+#, php-format
+msgid "The DHCP range cannot overlap any static DHCP mappings."
+msgstr "O intervalo DHCP não pode sobrepor nenhum mapeamento DHCP estático."
+
+#: usr/local/www/services_dhcp.php:421 usr/local/www/services_dhcp.php:433
+#: usr/local/www/services_dhcp.php:527 usr/local/www/services_dhcp.php:526
+#: usr/local/www/services_dhcp.php:546 usr/local/www/services_dhcp.php:558
+msgid "DHCP server"
+msgstr "Servidor DHCP"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571
+msgid "Text"
+msgstr "Texto"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571
+msgid "String"
+msgstr "String"
+
+#: usr/local/www/services_dhcp.php:435 usr/local/www/services_dhcp.php:447
+#: usr/local/www/services_dhcp.php:540 usr/local/www/services_dhcp.php:539
+#: usr/local/www/services_dhcp.php:559 usr/local/www/services_dhcp.php:571
+msgid "Boolean"
+msgstr "Booleano"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572
+msgid "Unsigned 8-bit integer"
+msgstr "Inteiro de 8-bits sem sinal"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572
+msgid "Unsigned 16-bit integer"
+msgstr "Inteiro de 16-bits sem sinal"
+
+#: usr/local/www/services_dhcp.php:436 usr/local/www/services_dhcp.php:448
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcp.php:540
+#: usr/local/www/services_dhcp.php:560 usr/local/www/services_dhcp.php:572
+msgid "Unsigned 32-bit integer"
+msgstr "Inteiro de 32-bits sem sinal"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573
+msgid "Signed 8-bit integer"
+msgstr "Inteiro de 8-bits com sinal"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573
+msgid "Signed 16-bit integer"
+msgstr "Inteiro de 16-bits com sinal"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573
+msgid "Signed 32-bit integer"
+msgstr "Inteiro de 32-bits com sinal"
+
+#: usr/local/www/services_dhcp.php:437 usr/local/www/services_dhcp.php:449
+#: usr/local/www/services_dhcp.php:542 usr/local/www/services_dhcp.php:541
+#: usr/local/www/services_dhcp.php:561 usr/local/www/services_dhcp.php:573
+msgid "IP address or host"
+msgstr "Endereço IP ou host"
+
+#: usr/local/www/services_dhcp.php:528 usr/local/www/services_dhcpv6.php:453
+#: usr/local/www/services_dhcp.php:541 usr/local/www/services_dhcpv6.php:480
+#: usr/local/www/services_dhcp.php:645 usr/local/www/services_dhcpv6.php:460
+#: usr/local/www/services_dhcp.php:647 usr/local/www/services_dhcpv6.php:455
+#: usr/local/www/services_dhcp.php:667 usr/local/www/services_dhcp.php:679
+msgid "DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface."
+msgstr "DHCP Relay está atualmente habilitado. Não é possível habilitar do serviço do Servidor DHCP enquanto o DHCP Relay estiver habilitado em qualquer interface."
+
+#: usr/local/www/services_dhcp.php:536 usr/local/www/services_dhcpv6.php:461
+#: usr/local/www/services_dhcp.php:549 usr/local/www/services_dhcpv6.php:488
+#: usr/local/www/services_dhcp.php:653 usr/local/www/services_dhcpv6.php:468
+#: usr/local/www/services_dhcp.php:655 usr/local/www/services_dhcpv6.php:463
+#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcp.php:687
+msgid "The static mapping configuration has been changed"
+msgstr "A configuração de mapeamento estático foi modificada"
+
+#: usr/local/www/services_dhcp.php:575 usr/local/www/services_dhcp.php:588
+#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcp.php:695
+#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:727
+#, php-format
+msgid "Enable DHCP server on %s interface"
+msgstr "Habilitar servidor DHCP na interface %s"
+
+#: usr/local/www/services_dhcp.php:583 usr/local/www/services_dhcpv6.php:518
+#: usr/local/www/services_dhcp.php:596 usr/local/www/services_dhcpv6.php:592
+#: usr/local/www/services_dhcp.php:706 usr/local/www/services_dhcpv6.php:523
+#: usr/local/www/services_dhcp.php:708 usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_dhcp.php:728 usr/local/www/services_dhcp.php:740
+msgid "Deny unknown clients"
+msgstr "Negar clientes desconhecidos"
+
+#: usr/local/www/services_dhcp.php:584 usr/local/www/services_dhcpv6.php:519
+#: usr/local/www/services_dhcp.php:597 usr/local/www/services_dhcpv6.php:593
+#: usr/local/www/services_dhcp.php:707 usr/local/www/services_dhcpv6.php:524
+#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:535
+#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcp.php:741
+msgid "If this is checked, only the clients defined below will get DHCP leases from this server. "
+msgstr "Se isso estiver marcado, somente os clientes abaixo obterão concessões DHCP desse servidor."
+
+#: usr/local/www/services_dhcp.php:593 usr/local/www/services_dhcpv6.php:528
+#: usr/local/www/services_dhcp.php:606 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp.php:716 usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_captiveportal_ip_edit.php:99
+#: usr/local/www/services_dhcp.php:726 usr/local/www/services_dhcpv6.php:548
+#: usr/local/www/services_dhcp.php:746 usr/local/www/services_dhcp.php:758
+msgid "Subnet mask"
+msgstr "Máscara de subrede"
+
+#: usr/local/www/services_dhcp.php:599 usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_dhcp.php:612 usr/local/www/services_dhcpv6.php:608
+#: usr/local/www/services_dhcp.php:722 usr/local/www/services_dhcpv6.php:539
+#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:554
+#: usr/local/www/services_dhcp.php:752 usr/local/www/services_dhcp.php:764
+msgid "Available range"
+msgstr "Intervalo disponível"
+
+#: usr/local/www/services_dhcp.php:616 usr/local/www/services_dhcpv6.php:552
+#: usr/local/www/services_dhcp.php:629 usr/local/www/services_dhcpv6.php:625
+#: usr/local/www/services_dhcp.php:750 usr/local/www/vpn_l2tp.php:342
+#: usr/local/www/services_dhcpv6.php:556 usr/local/www/vpn_l2tp.php:345
+#: usr/local/www/services_dhcp.php:760 usr/local/www/services_dhcpv6.php:573
+#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:792
+msgid "Subnet Mask"
+msgstr "Máscara de subrede"
+
+#: usr/local/www/services_dhcp.php:633 usr/local/www/services_dhcpv6.php:569
+#: usr/local/www/services_dhcp.php:646 usr/local/www/services_dhcpv6.php:642
+#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:573
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:590
+#: usr/local/www/services_dhcp.php:797 usr/local/www/services_dhcp.php:809
+msgid "Range"
+msgstr "Intervalo"
+
+#: usr/local/www/services_dhcp.php:640 usr/local/www/services_dhcp.php:653
+#: usr/local/www/services_dhcp.php:829
+#: usr/local/www/services_dhcp_edit.php:395
+#: usr/local/www/services_dhcp.php:843 usr/local/www/services_dhcp.php:863
+#: usr/local/www/services_dhcp.php:875
+msgid "WINS servers"
+msgstr "Servidores WINS"
+
+#: usr/local/www/services_dhcp.php:651 usr/local/www/services_dhcpv6.php:594
+#: usr/local/www/services_dhcp.php:664 usr/local/www/services_dhcpv6.php:671
+#: usr/local/www/services_router_advertisements.php:376
+#: usr/local/www/services_dhcp.php:840 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp_edit.php:406
+#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:619
+#: usr/local/www/services_router_advertisements.php:371
+#: usr/local/www/services_dhcp.php:874 usr/local/www/services_dhcp.php:886
+msgid "NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page."
+msgstr "NOTA: deixe em branco para usar os servidores DNS padrão do sistema - esse IP de interface se o DNS forwarder estiver habilitado, do contrário os servidores configurados na página Principal."
+
+#: usr/local/www/services_dhcp.php:658 usr/local/www/services_dhcpv6.php:602
+#: usr/local/www/services_dhcp.php:671 usr/local/www/services_dhcp.php:847
+#: usr/local/www/services_dhcp_edit.php:413
+#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcp.php:881
+#: usr/local/www/services_dhcp.php:893
+msgid "The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network."
+msgstr "O padrão é usar o IP nessa interface do firewall como o gateway. Especifique um gateway alternativo aqui se esse não for o gateway correto para sua rede."
+
+#: usr/local/www/services_dhcp.php:662 usr/local/www/services_dhcpv6.php:607
+#: usr/local/www/services_dhcp.php:675 usr/local/www/services_dhcpv6.php:675
+#: usr/local/www/services_dhcp.php:851 usr/local/www/services_dhcpv6.php:606
+#: usr/local/www/services_dhcp_edit.php:417
+#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:623
+#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcp.php:897
+msgid "Domain name"
+msgstr "Nome de domínio"
+
+#: usr/local/www/services_dhcp.php:665 usr/local/www/services_dhcpv6.php:610
+#: usr/local/www/services_dhcp.php:678 usr/local/www/services_dhcpv6.php:678
+#: usr/local/www/services_dhcp.php:854 usr/local/www/services_dhcpv6.php:609
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcp.php:868 usr/local/www/services_dhcpv6.php:626
+#: usr/local/www/services_dhcp.php:888 usr/local/www/services_dhcp.php:900
+msgid "The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here."
+msgstr "O padrão é usar o nome de domínio desse sistema como o nome de domínio padrão fornecido pelo DHCP. Você pode especificar um nome de domínio alternativo aqui."
+
+#: usr/local/www/services_dhcp.php:669 usr/local/www/services_dhcpv6.php:614
+#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:682
+#: usr/local/www/services_router_advertisements.php:381
+#: usr/local/www/services_dhcp.php:858 usr/local/www/services_dhcpv6.php:613
+#: usr/local/www/services_dhcp_edit.php:424
+#: usr/local/www/services_dhcp.php:872 usr/local/www/services_dhcpv6.php:630
+#: usr/local/www/services_router_advertisements.php:376
+#: usr/local/www/services_dhcp.php:892 usr/local/www/services_dhcp.php:904
+msgid "Domain search list"
+msgstr "Lista de busca de domínio"
+
+#: usr/local/www/services_dhcp.php:672 usr/local/www/services_dhcpv6.php:617
+msgid "The DHCP server can optionally provide a domain search list."
+msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de busca de domínio."
+
+#: usr/local/www/services_dhcp.php:676 usr/local/www/services_dhcpv6.php:621
+#: usr/local/www/services_dhcp.php:689 usr/local/www/services_dhcpv6.php:689
+#: usr/local/www/services_dhcp.php:865 usr/local/www/services_dhcpv6.php:620
+#: usr/local/www/services_dhcp_edit.php:431
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:637
+#: usr/local/www/services_dhcp.php:899 usr/local/www/services_dhcp.php:911
+msgid "Default lease time"
+msgstr "Tempo de concessão padrão"
+
+#: usr/local/www/services_dhcp.php:680 usr/local/www/services_dhcpv6.php:625
+#: usr/local/www/services_dhcp.php:693 usr/local/www/services_dhcpv6.php:693
+#: usr/local/www/services_dhcp.php:869 usr/local/www/services_dhcpv6.php:624
+#: usr/local/www/services_dhcp_edit.php:435
+#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:641
+#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:915
+msgid "This is used for clients that do not ask for a specific expiration time."
+msgstr "Isso é usado para clientes que não requisitam um tempo de expiração específico."
+
+#: usr/local/www/services_dhcp.php:682 usr/local/www/services_dhcpv6.php:627
+#: usr/local/www/services_dhcp.php:695 usr/local/www/services_dhcpv6.php:695
+#: usr/local/www/services_dhcp.php:871 usr/local/www/services_dhcpv6.php:626
+#: usr/local/www/services_dhcp_edit.php:437
+#: usr/local/www/services_dhcp.php:885 usr/local/www/services_dhcpv6.php:643
+#: usr/local/www/services_dhcp.php:905 usr/local/www/services_dhcp.php:917
+msgid "The default is 7200 seconds."
+msgstr "O padrão é 7200 segundos."
+
+#: usr/local/www/services_dhcp.php:686 usr/local/www/services_dhcpv6.php:631
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:699
+#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcpv6.php:630
+#: usr/local/www/services_dhcp_edit.php:441
+#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:647
+#: usr/local/www/services_dhcp.php:909 usr/local/www/services_dhcp.php:921
+msgid "Maximum lease time"
+msgstr "Tempo máximo de concessão"
+
+#: usr/local/www/services_dhcp.php:690 usr/local/www/services_dhcpv6.php:635
+#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcpv6.php:703
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_dhcp_edit.php:445
+#: usr/local/www/services_dhcp.php:893 usr/local/www/services_dhcpv6.php:651
+#: usr/local/www/services_dhcp.php:913 usr/local/www/services_dhcp.php:925
+msgid "This is the maximum lease time for clients that ask for a specific expiration time."
+msgstr "Esse é o máximo tempo de concessão para clientes que requisitama por um tempo de expiração específico."
+
+#: usr/local/www/services_dhcp.php:692 usr/local/www/services_dhcpv6.php:637
+#: usr/local/www/services_dhcp.php:705 usr/local/www/services_dhcpv6.php:705
+#: usr/local/www/services_dhcp.php:881 usr/local/www/services_dhcpv6.php:636
+#: usr/local/www/services_dhcp_edit.php:447
+#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcpv6.php:653
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcp.php:927
+msgid "The default is 86400 seconds."
+msgstr "O padrão é 86400 segundos."
+
+#: usr/local/www/services_dhcp.php:696 usr/local/www/services_dhcpv6.php:641
+#: usr/local/www/services_dhcp.php:709 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:886 usr/local/www/services_dhcpv6.php:640
+#: usr/local/www/services_dhcp.php:900 usr/local/www/services_dhcpv6.php:657
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcp.php:932
+msgid "Failover peer IP:"
+msgstr "Failover peer IP:"
+
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcpv6.php:644
+#: usr/local/www/services_dhcp.php:712 usr/local/www/services_dhcpv6.php:712
+#: usr/local/www/services_dhcp.php:889 usr/local/www/services_dhcpv6.php:643
+#: usr/local/www/services_dhcpv6.php:660
+msgid "Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP."
+msgstr "Deixe em branco para desabilitar. Informar o endereço IP da interface da outra máquina. Máquinas devem ser CARP."
+
+#: usr/local/www/services_dhcp.php:703 usr/local/www/services_dhcp.php:716
+#: usr/local/www/services_dhcp.php:895 usr/local/www/services_dhcp.php:909
+#: usr/local/www/services_dhcp.php:1150 usr/local/www/services_dhcp.php:929
+#: usr/local/www/services_dhcp.php:1170 usr/local/www/services_dhcp.php:941
+#: usr/local/www/services_dhcp.php:1182
+msgid "Static ARP"
+msgstr "ARP Estático"
+
+#: usr/local/www/services_dhcp.php:710 usr/local/www/services_dhcp.php:723
+#: usr/local/www/services_dhcp.php:902 usr/local/www/services_dhcp.php:916
+#: usr/local/www/services_dhcp.php:936 usr/local/www/services_dhcp.php:948
+msgid "Enable Static ARP entries"
+msgstr "Habilitar entradas ARP estáticas"
+
+#: usr/local/www/services_dhcp.php:715 usr/local/www/services_dhcp.php:728
+#: usr/local/www/services_dhcp.php:907 usr/local/www/services_dhcp.php:921
+#: usr/local/www/services_dhcp.php:941
+msgid "Only the machines listed below will be able to communicate with the firewall on this NIC."
+msgstr "Somente as máquinas listadas abaixo serão capazes de comunicar-se com o firewall nesse NIC."
+
+#: usr/local/www/services_dhcp.php:725 usr/local/www/services_dhcpv6.php:651
+#: usr/local/www/services_dhcp.php:763 usr/local/www/services_dhcpv6.php:744
+#: usr/local/www/services_dhcp.php:945 usr/local/www/services_dhcpv6.php:675
+#: usr/local/www/services_dhcp_edit.php:454
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcpv6.php:692
+#: usr/local/www/services_dhcp.php:978 usr/local/www/services_dhcp.php:990
+msgid "Show Dynamic DNS"
+msgstr "Mostrar DNS Dinâmico"
+
+#: usr/local/www/services_dhcp.php:729 usr/local/www/services_dhcpv6.php:655
+#: usr/local/www/services_dhcp.php:767 usr/local/www/services_dhcpv6.php:748
+#: usr/local/www/services_dhcp.php:949 usr/local/www/services_dhcpv6.php:679
+#: usr/local/www/services_dhcp_edit.php:458
+#: usr/local/www/services_dhcp.php:962 usr/local/www/services_dhcpv6.php:696
+#: usr/local/www/services_dhcp.php:982 usr/local/www/services_dhcp.php:994
+msgid "Enable registration of DHCP client names in DNS."
+msgstr "Habilitar registro de nomes de clientes DHCP no DNS."
+
+#: usr/local/www/services_dhcp.php:732 usr/local/www/services_dhcpv6.php:658
+#: usr/local/www/services_dhcp.php:770 usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/services_dhcp.php:952 usr/local/www/services_dhcpv6.php:682
+#: usr/local/www/services_dhcp_edit.php:461
+#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcpv6.php:699
+#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcp.php:997
+msgid "Note: Leave blank to disable dynamic DNS registration."
+msgstr "Nota: Deixe em branco para desabilitar registro de DNS dinâmico."
+
+#: usr/local/www/services_dhcp.php:733 usr/local/www/services_dhcpv6.php:659
+#: usr/local/www/services_dhcp.php:771 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:953 usr/local/www/services_dhcpv6.php:683
+#: usr/local/www/services_dhcp_edit.php:462
+#: usr/local/www/services_dhcp.php:966 usr/local/www/services_dhcpv6.php:700
+#: usr/local/www/services_dhcp.php:986 usr/local/www/services_dhcp.php:998
+msgid "Enter the dynamic DNS domain which will be used to register client names in the DNS server."
+msgstr "Informe o domínio DNS dinâmico que será usado para registrar nomes de clientes no servidor DNS."
+
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:664
+#: usr/local/www/services_dhcp.php:776 usr/local/www/services_dhcpv6.php:757
+#: usr/local/www/services_dhcp.php:972 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcp_edit.php:467
+#: usr/local/www/services_dhcp.php:985 usr/local/www/services_dhcpv6.php:705
+#: usr/local/www/services_dhcp.php:1005 usr/local/www/services_dhcp.php:1017
+msgid "NTP servers"
+msgstr "Servidores NTP"
+
+#: usr/local/www/services_dhcp.php:741 usr/local/www/services_dhcpv6.php:667
+#: usr/local/www/services_dhcp.php:779 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcp.php:975 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcp_edit.php:470
+#: usr/local/www/services_dhcp.php:988 usr/local/www/services_dhcpv6.php:708
+#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcp.php:1020
+msgid "Show NTP configuration"
+msgstr "Exibir configuração NTP"
+
+#: usr/local/www/services_dhcp.php:750 usr/local/www/services_dhcpv6.php:676
+#: usr/local/www/services_dhcp.php:788 usr/local/www/services_dhcpv6.php:770
+#: usr/local/www/services_dhcp.php:984 usr/local/www/services_dhcpv6.php:701
+#: usr/local/www/services_dhcp_edit.php:479
+#: usr/local/www/services_dhcp.php:997 usr/local/www/services_dhcpv6.php:718
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcp.php:1029
+msgid "TFTP server"
+msgstr "Servidor TFTP"
+
+#: usr/local/www/services_dhcp.php:753 usr/local/www/services_dhcpv6.php:679
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:773
+#: usr/local/www/services_dhcp.php:987 usr/local/www/services_dhcpv6.php:704
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcp.php:1020 usr/local/www/services_dhcp.php:1032
+msgid "Show TFTP configuration"
+msgstr "Exibir configuração TFTP"
+
+#: usr/local/www/services_dhcp.php:757 usr/local/www/services_dhcpv6.php:683
+#: usr/local/www/services_dhcp.php:795 usr/local/www/services_dhcpv6.php:777
+#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcpv6.php:708
+#: usr/local/www/services_dhcp_edit.php:486
+#: usr/local/www/services_dhcp.php:1004 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcp.php:1036
+msgid "Leave blank to disable. Enter a full hostname or IP for the TFTP server."
+msgstr "Deixe em branco para desabilitar. Informe um nome de host completo ou IP para o servidor TFTP."
+
+#: usr/local/www/services_dhcp.php:762 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcp.php:800 usr/local/www/services_dhcpv6.php:783
+#: usr/local/www/services_dhcp.php:996 usr/local/www/services_dhcpv6.php:714
+#: usr/local/www/services_dhcp.php:1009 usr/local/www/services_dhcpv6.php:731
+#: usr/local/www/services_dhcp.php:1029 usr/local/www/services_dhcp.php:1041
+msgid "LDAP URI"
+msgstr "URI LDAP"
+
+#: usr/local/www/services_dhcp.php:765 usr/local/www/services_dhcpv6.php:691
+#: usr/local/www/services_dhcp.php:803 usr/local/www/services_dhcpv6.php:786
+#: usr/local/www/services_dhcp.php:999 usr/local/www/services_dhcpv6.php:717
+#: usr/local/www/services_dhcp.php:1012 usr/local/www/services_dhcpv6.php:734
+#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcp.php:1044
+msgid "Show LDAP configuration"
+msgstr "Exibir configuração LDAP"
+
+#: usr/local/www/services_dhcp.php:769 usr/local/www/services_dhcpv6.php:695
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:1003 usr/local/www/services_dhcpv6.php:721
+#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:738
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcp.php:1048
+msgid "Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com"
+msgstr "Deixa em branco para desabilitar. Informe um URI complleto para o servidor LDAP na forma ldap://ldap.example.com/dc=example,dc=com"
+
+#: usr/local/www/services_dhcp.php:774 usr/local/www/services_dhcpv6.php:700
+#: usr/local/www/services_dhcp.php:812 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:1008 usr/local/www/services_dhcpv6.php:726
+#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:743
+#: usr/local/www/services_dhcp.php:1041 usr/local/www/services_dhcp.php:1053
+msgid "Enable network booting"
+msgstr "Habilitar boot da rede"
+
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcpv6.php:703
+#: usr/local/www/services_dhcp.php:815 usr/local/www/services_dhcpv6.php:798
+#: usr/local/www/services_dhcp.php:1011 usr/local/www/services_dhcpv6.php:729
+#: usr/local/www/services_dhcp.php:1024 usr/local/www/services_dhcpv6.php:746
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcp.php:1056
+msgid "Show Network booting"
+msgstr "Exibir boot da Rede"
+
+#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcpv6.php:707
+#: usr/local/www/services_dhcp.php:819 usr/local/www/services_dhcpv6.php:802
+#: usr/local/www/services_dhcp.php:1015 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/services_dhcp.php:1028 usr/local/www/services_dhcpv6.php:750
+#: usr/local/www/services_dhcp.php:1048 usr/local/www/services_dhcp.php:1060
+msgid "Enables network booting."
+msgstr "Habilita boot da rede."
+
+#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735
+#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1062
+msgid "Enter the IP of the"
+msgstr "Informe o IP do"
+
+#: usr/local/www/services_dhcp.php:783 usr/local/www/services_dhcpv6.php:709
+#: usr/local/www/services_dhcp.php:821 usr/local/www/services_dhcpv6.php:804
+#: usr/local/www/services_dhcp.php:1017 usr/local/www/services_dhcpv6.php:735
+#: usr/local/www/services_dhcp.php:1030 usr/local/www/services_dhcpv6.php:752
+#: usr/local/www/services_dhcp.php:1050 usr/local/www/services_dhcp.php:1062
+msgid "next-server"
+msgstr "next-server"
+
+#: usr/local/www/services_dhcp.php:785 usr/local/www/services_dhcpv6.php:711
+#: usr/local/www/services_dhcp.php:823 usr/local/www/services_dhcpv6.php:806
+#: usr/local/www/services_dhcp.php:1019 usr/local/www/services_dhcpv6.php:737
+#: usr/local/www/services_dhcp.php:1032 usr/local/www/services_dhcpv6.php:754
+#: usr/local/www/services_dhcp.php:1052 usr/local/www/services_dhcp.php:1064
+msgid "and the filename"
+msgstr "e o nome do arquivo"
+
+#: usr/local/www/services_dhcp.php:787 usr/local/www/services_dhcpv6.php:713
+#: usr/local/www/services_dhcp.php:825 usr/local/www/services_dhcpv6.php:808
+#: usr/local/www/services_dhcp.php:1021 usr/local/www/services_dhcpv6.php:739
+#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:756
+#: usr/local/www/services_dhcp.php:1054 usr/local/www/services_dhcp.php:1066
+msgid "Note: You need both a filename and a boot server configured for this to work!"
+msgstr "Nota: Você precisa um nome de arquivo e um servidor de boot configurado para isso funcionar!"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068
+msgid "Enter the"
+msgstr "Informe o"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068
+msgid "root-path"
+msgstr "root-path"
+
+#: usr/local/www/services_dhcp.php:789 usr/local/www/services_dhcpv6.php:715
+#: usr/local/www/services_dhcpv6_edit.php:224
+#: usr/local/www/services_dhcp.php:827
+#: usr/local/www/services_dhcp_edit.php:247
+#: usr/local/www/services_dhcpv6.php:810
+#: usr/local/www/services_dhcpv6_edit.php:226
+#: usr/local/www/services_dhcp.php:1023
+#: usr/local/www/services_dhcp_edit.php:249
+#: usr/local/www/services_dhcpv6.php:741
+#: usr/local/www/services_dhcpv6_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:377
+#: usr/local/www/services_dhcp.php:1036 usr/local/www/services_dhcpv6.php:758
+#: usr/local/www/services_dhcp.php:1056 usr/local/www/services_dhcp.php:1068
+msgid "string"
+msgstr "string"
+
+#: usr/local/www/services_dhcp.php:791 usr/local/www/services_dhcpv6.php:717
+#: usr/local/www/services_dhcp.php:829 usr/local/www/services_dhcpv6.php:812
+#: usr/local/www/services_dhcp.php:1025 usr/local/www/services_dhcpv6.php:743
+#: usr/local/www/services_dhcp.php:1038 usr/local/www/services_dhcpv6.php:760
+#: usr/local/www/services_dhcp.php:1058 usr/local/www/services_dhcp.php:1070
+msgid "Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname"
+msgstr "Nota: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname"
+
+#: usr/local/www/services_dhcp.php:796 usr/local/www/services_dhcpv6.php:722
+#: usr/local/www/services_dhcp.php:834 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1031 usr/local/www/services_dhcpv6.php:748
+#: usr/local/www/services_dhcp.php:1044 usr/local/www/services_dhcpv6.php:765
+#: usr/local/www/services_dhcp.php:1064 usr/local/www/services_dhcp.php:1076
+msgid "Additional BOOTP/DHCP Options"
+msgstr "Opções BOOTP/DHCP Adicionais"
+
+#: usr/local/www/services_dhcp.php:799 usr/local/www/services_dhcpv6.php:725
+#: usr/local/www/services_dhcp.php:837 usr/local/www/services_dhcpv6.php:820
+#: usr/local/www/services_dhcp.php:1034 usr/local/www/services_dhcpv6.php:751
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:768
+#: usr/local/www/services_dhcp.php:1067 usr/local/www/services_dhcp.php:1079
+msgid "Show Additional BOOTP/DHCP Options"
+msgstr "Exibir Opções BOOTP/DHCP Adicionais"
+
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcpv6.php:733
+#: usr/local/www/services_dhcp.php:845 usr/local/www/services_dhcpv6.php:828
+#: usr/local/www/services_dhcp.php:1042 usr/local/www/services_dhcpv6.php:759
+#: usr/local/www/services_dhcp.php:1055 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dhcp.php:1075 usr/local/www/services_dhcp.php:1087
+msgid "Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"
+msgstr "Informe o número de opção DHCP e o valor de cada item que você gostaria de incluir nas informações de concessão DHCP. Para uma lista de opções disponíveis, por favor, visite "
+
+#: usr/local/www/services_dhcp.php:812
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_dhcpv6.php:738 usr/local/www/services_dhcp.php:850
+#: usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_captiveportal_vouchers_edit.php:92
+#: usr/local/www/services_dhcp.php:1047 usr/local/www/services_dhcpv6.php:764
+#: usr/local/www/services_dhcp.php:1060 usr/local/www/services_dhcpv6.php:781
+#: usr/local/www/services_dhcp.php:1080 usr/local/www/services_dhcp.php:1092
+msgid "Number"
+msgstr "Número"
+
+#: usr/local/www/services_dhcp.php:814
+#: usr/local/www/load_balancer_relay_action_edit.php:506
+#: usr/local/www/system_advanced_sysctl.php:173
+#: usr/local/www/system_advanced_sysctl.php:249
+#: usr/local/www/services_dhcpv6.php:739
+#: usr/local/www/system_certmanager.php:763
+#: usr/local/www/load_balancer_relay_action_edit.php:505
+#: usr/local/www/services_dhcp.php:852 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/load_balancer_relay_action_edit.php:503
+#: usr/local/www/services_dhcp.php:1049 usr/local/www/services_dhcpv6.php:765
+#: usr/local/www/services_dhcp.php:1062
+#: usr/local/www/system_certmanager.php:788
+#: usr/local/www/services_dhcpv6.php:782 usr/local/www/services_dhcp.php:1082
+#: usr/local/www/system_certmanager.php:789
+#: usr/local/www/services_dhcp.php:1094
+msgid "Value"
+msgstr "Valor"
+
+#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885
+#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816
+#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1164
+msgid "The DNS servers entered in"
+msgstr "Os servidores DNS informados em"
+
+#: usr/local/www/services_dhcp.php:877 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/services_dhcp.php:915 usr/local/www/services_dhcpv6.php:885
+#: usr/local/www/services_dhcp.php:1119 usr/local/www/services_dhcpv6.php:816
+#: usr/local/www/services_dhcp.php:1132 usr/local/www/services_dhcpv6.php:833
+#: usr/local/www/services_dhcp.php:1152 usr/local/www/services_dhcp.php:1164
+msgid "System: General setup"
+msgstr "Sistema: Configurações Gerais"
+
+#: usr/local/www/services_dhcp.php:878 usr/local/www/services_dhcpv6.php:791
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:886
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dhcp.php:1133 usr/local/www/services_dhcpv6.php:834
+#: usr/local/www/services_dhcp.php:1153 usr/local/www/services_dhcp.php:1165
+msgid "(or the"
+msgstr "(ou o"
+
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792
+#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887
+#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818
+#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1166
+msgid "if enabled)"
+msgstr "se habilitado)"
+
+#: usr/local/www/services_dhcp.php:879 usr/local/www/services_dhcpv6.php:792
+#: usr/local/www/services_dhcp.php:917 usr/local/www/services_dhcpv6.php:887
+#: usr/local/www/services_dhcp.php:1121 usr/local/www/services_dhcpv6.php:818
+#: usr/local/www/services_dhcp.php:1134 usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcp.php:1154 usr/local/www/services_dhcp.php:1166
+msgid "will be assigned to clients by the DHCP server."
+msgstr "será atribuído a clientes pelo servidor DHCP."
+
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890
+#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcpv6.php:821
+#: usr/local/www/services_dhcp.php:1137 usr/local/www/services_dhcpv6.php:838
+#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1169
+msgid "The DHCP lease table can be viewed on the"
+msgstr "A tabela de concessão DHCP pode ser visualizada no"
+
+#: usr/local/www/services_dhcp.php:882 usr/local/www/services_dhcpv6.php:795
+#: usr/local/www/services_dhcp.php:920 usr/local/www/services_dhcpv6.php:890
+#: usr/local/www/services_dhcp.php:1124 usr/local/www/services_dhcp.php:1137
+#: usr/local/www/services_dhcp.php:1157 usr/local/www/services_dhcp.php:1169
+msgid "Status: DHCP leases"
+msgstr "Status: concessões DHCP"
+
+#: usr/local/www/services_dhcp.php:883 usr/local/www/services_dhcpv6.php:796
+#: usr/local/www/services_dhcp.php:921 usr/local/www/services_dhcpv6.php:891
+#: usr/local/www/services_dhcp.php:1125 usr/local/www/services_dhcpv6.php:822
+#: usr/local/www/services_dhcp.php:1138 usr/local/www/services_dhcpv6.php:839
+#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcp.php:1170
+msgid "page."
+msgstr "página."
+
+#: usr/local/www/services_dhcp_edit.php:116
+#: usr/local/www/services_dhcpv6_edit.php:113
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dhcp_edit.php:118
+#: usr/local/www/services_dhcpv6_edit.php:118
+#: usr/local/www/services_dhcp_edit.php:152
+msgid "The hostname cannot end with a hyphen according to RFC952"
+msgstr "O nome de host não pode terminar com um hífen de acordo com a RFC952"
+
+#: usr/local/www/services_dhcp_edit.php:121
+#: usr/local/www/services_dhcpv6_edit.php:118
+#: usr/local/www/services_dhcpv6_edit.php:120
+#: usr/local/www/services_dhcp_edit.php:123
+#: usr/local/www/services_dhcpv6_edit.php:123
+#: usr/local/www/services_dhcp_edit.php:157
+msgid "A valid hostname is specified, but the domain name part should be omitted"
+msgstr "Um nome de host válido é especificado, mas a parte do nome de domínio deve ser omitida"
+
+#: usr/local/www/services_dhcp_edit.php:132
+#: usr/local/www/services_dhcp_edit.php:134
+#: usr/local/www/services_dhcp_edit.php:168
+msgid "Static ARP is enabled. You must specify an IP address."
+msgstr "ARP estático está habilitado. Você deve especificar um endereço IP."
+
+#: usr/local/www/services_dhcp_edit.php:141
+#: usr/local/www/services_dhcp_edit.php:143
+#: usr/local/www/services_dhcp_edit.php:177
+msgid "This Hostname, IP or MAC address already exists."
+msgstr "Esse nome de host, endereço IP ou MAC já existe."
+
+#: usr/local/www/services_dhcp_edit.php:152
+#: usr/local/www/services_dhcp_edit.php:154
+#: usr/local/www/services_dhcp_edit.php:188
+#, php-format
+msgid "The IP address must not be within the DHCP range for this interface."
+msgstr "O endereço IP não deve estar dentro do intervalo DHCP para essa interface."
+
+#: usr/local/www/services_dhcp_edit.php:159
+#: usr/local/www/services_dhcp_edit.php:161
+#: usr/local/www/services_dhcp_edit.php:202
+#, php-format
+msgid "The IP address must lie in the %s subnet."
+msgstr "O endereço IP deve estar na subrede %s."
+
+#: usr/local/www/services_dhcp_edit.php:190
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/services_dhcp_edit.php:193
+#: usr/local/www/services_dhcpv6_edit.php:178
+#: usr/local/www/services_dhcp_edit.php:301
+msgid "Edit static mapping"
+msgstr "Editar mapeamento estático"
+
+#: usr/local/www/services_dhcp_edit.php:204
+#: usr/local/www/services_dhcp_edit.php:207
+#: usr/local/www/services_dhcp_edit.php:206
+#: usr/local/www/services_dhcp_edit.php:334
+msgid "Static DHCP Mapping"
+msgstr "Mapeamento DHCP estático"
+
+#: usr/local/www/services_dhcp_edit.php:215
+#: usr/local/www/services_dhcp_edit.php:218
+#: usr/local/www/services_dhcp_edit.php:217
+#: usr/local/www/services_dhcp_edit.php:345
+#: usr/local/www/services_captiveportal_mac_edit.php:188
+msgid "Copy my MAC address"
+msgstr "Copie meu endereço MAC"
+
+#: usr/local/www/services_dhcp_edit.php:217
+#: usr/local/www/services_dhcp_edit.php:220
+#: usr/local/www/services_dhcp_edit.php:219
+#: usr/local/www/services_dhcp_edit.php:347
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "Informe um endereço MAC no seguinte formato: xx:xx:xx:xx:xx:xx"
+
+#: usr/local/www/services_dhcp_edit.php:225
+#: usr/local/www/services_dhcp_edit.php:228
+msgid "If no IP address is given, one will be dynamically allocated from the pool."
+msgstr "Se nenhum endereço IP for dado, um será dinamicamente alocado do pool."
+
+#: usr/local/www/services_dhcp_edit.php:231
+#: usr/local/www/services_dhcpv6_edit.php:208
+#: usr/local/www/services_dhcpv6_edit.php:211
+#: usr/local/www/services_dhcp_edit.php:234
+#: usr/local/www/services_dhcpv6_edit.php:213
+#: usr/local/www/services_dhcp_edit.php:236
+#: usr/local/www/services_dhcpv6_edit.php:216
+#: usr/local/www/services_dhcp_edit.php:364
+msgid "Name of the host, without domain part."
+msgstr "Nome do host, sem a parte do domínio."
+
+#: usr/local/www/services_dhcp_relay.php:72
+#: usr/local/www/services_dhcpv6_relay.php:73
+msgid "Destination Server"
+msgstr "Servidor de Destino"
+
+#: usr/local/www/services_dhcp_relay.php:80
+msgid "A valid Destination Server IP address must be specified."
+msgstr "Um endereço IP do Servidor de Destino válido deve ser especificado."
+
+#: usr/local/www/services_dhcp_relay.php:100 usr/local/www/fbegin.inc:122
+#: usr/local/www/status_services.php:295
+#: usr/local/www/widgets/widgets/services_status.widget.php:100
+#: usr/local/www/fbegin.inc:139 etc/inc/service-utils.inc:278
+#: usr/local/www/fbegin.inc:148 usr/local/www/fbegin.inc:140
+#: etc/inc/service-utils.inc:277 etc/inc/service-utils.inc:294
+#: etc/inc/service-utils.inc:289
+msgid "DHCP Relay"
+msgstr "DHCP Relay"
+
+#: usr/local/www/services_dhcp_relay.php:144
+#: usr/local/www/services_dhcp_relay.php:145
+msgid "DHCP Relay configuration"
+msgstr "Configuração do DHCP Relay"
+
+#: usr/local/www/services_dhcp_relay.php:150
+#: usr/local/www/services_dhcp_relay.php:151
+#, php-format
+msgid "Enable DHCP relay on interface"
+msgstr "Habilitar DHCP Relay na interface"
+
+#: usr/local/www/services_dhcp_relay.php:175
+#: usr/local/www/services_dhcpv6_relay.php:176
+#: usr/local/www/services_dhcp_relay.php:176
+#: usr/local/www/services_dhcpv6_relay.php:177
+msgid "Append circuit ID and agent ID to requests"
+msgstr "Anexe o circuit ID e o agent ID às requisições"
+
+#: usr/local/www/services_dhcp_relay.php:176
+#: usr/local/www/services_dhcp_relay.php:177
+#, php-format
+msgid "If this is checked, the DHCP relay will append the circuit ID (%s interface number) and the agent ID to the DHCP request."
+msgstr "Se isso estiver marcado, o DHCP relay anexará o circuit ID (número de interface %s) e o agent ID à requisição DHCP."
+
+#: usr/local/www/services_dhcp_relay.php:179
+#: usr/local/www/services_dhcpv6_relay.php:180
+#: usr/local/www/services_dhcp_relay.php:180
+#: usr/local/www/services_dhcpv6_relay.php:181
+msgid "Destination server"
+msgstr "Servidor de Destino"
+
+#: usr/local/www/services_dhcp_relay.php:183
+#: usr/local/www/services_dhcp_relay.php:184
+msgid "This is the IP address of the server to which DHCP requests are relayed. You can enter multiple server IP addresses, separated by commas. Select \"Proxy requests to DHCP server on WAN subnet\" to relay DHCP packets to the server that was used on the WAN interface."
+msgstr "Esse é o endereço IP do servidor para o qual as requisições DHCP são retransmitidas. Você pode inserir múltiplos servidores de endereços de IP, separados por vírgulas. Selecione \"Requisições de Proxy para o servidor DHCP na subrede WAN\" para retransmitir pacotes DHCP para o servidor que foi usado na interface WAN."
+
+#: usr/local/www/services_dnsmasq.php:80 usr/local/www/services_dnsmasq.php:84
+#: usr/local/www/services_dnsmasq.php:86
+#: usr/local/www/services_dnsmasq.php:107
+msgid "Invalid custom options"
+msgstr "Opções personalizadas inválidas"
+
+#: usr/local/www/services_dnsmasq.php:147
+#: usr/local/www/services_dnsmasq.php:148
+#: usr/local/www/services_dnsmasq.php:152
+#: usr/local/www/services_dnsmasq.php:154
+#: usr/local/www/services_dnsmasq.php:175
+msgid "The DNS forwarder configuration has been changed"
+msgstr "A configuração do DNS forwarder foi modificada"
+
+#: usr/local/www/services_dnsmasq.php:151
+#: usr/local/www/services_dnsmasq.php:152
+#: usr/local/www/services_dnsmasq.php:156
+#: usr/local/www/services_dnsmasq.php:158
+#: usr/local/www/services_dnsmasq.php:179
+msgid "General DNS Forwarder Options"
+msgstr "Opções gerais do DNS Forwarder"
+
+#: usr/local/www/services_dnsmasq.php:157
+#: usr/local/www/services_dnsmasq.php:158
+#: usr/local/www/services_dnsmasq.php:162
+#: usr/local/www/services_dnsmasq.php:164
+#: usr/local/www/services_dnsmasq.php:185
+msgid "Enable DNS forwarder"
+msgstr "Habilitar DNS forwarder"
+
+#: usr/local/www/services_dnsmasq.php:161
+#: usr/local/www/services_unbound.php:211
+#: usr/local/www/services_dnsmasq.php:162
+#: usr/local/www/services_dnsmasq.php:166
+#: usr/local/www/services_dnsmasq.php:168
+#: usr/local/www/services_dnsmasq.php:189
+msgid "DHCP Registration"
+msgstr "Registro DHCP"
+
+#: usr/local/www/services_dnsmasq.php:164
+#: usr/local/www/services_dnsmasq.php:165
+#: usr/local/www/services_dnsmasq.php:169
+#: usr/local/www/services_dnsmasq.php:171
+#: usr/local/www/services_dnsmasq.php:192
+msgid "Register DHCP leases in DNS forwarder"
+msgstr "Registrar concessões DHCP no DNS forwarder"
+
+#: usr/local/www/services_dnsmasq.php:165
+#: usr/local/www/services_dnsmasq.php:166
+#: usr/local/www/services_dnsmasq.php:170
+#: usr/local/www/services_dnsmasq.php:172
+#: usr/local/www/services_dnsmasq.php:193
+#, php-format
+msgid "If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered in the DNS forwarder, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value."
+msgstr "Se essa opção estiver configurada, então máquinas que especificam seus nomes de host quando requisitam uma concessão DHCP serão registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Você deve também configurar em %sSistema: Configurações Gerais %s para o valor apropriado."
+
+#: usr/local/www/services_dnsmasq.php:173
+#: usr/local/www/services_unbound.php:223
+#: usr/local/www/services_dnsmasq.php:174
+#: usr/local/www/services_dnsmasq.php:178
+#: usr/local/www/services_dnsmasq.php:180
+#: usr/local/www/services_dnsmasq.php:201
+msgid "Static DHCP"
+msgstr "DHCP estático"
+
+#: usr/local/www/services_dnsmasq.php:176
+#: usr/local/www/services_dnsmasq.php:177
+#: usr/local/www/services_dnsmasq.php:181
+#: usr/local/www/services_dnsmasq.php:183
+#: usr/local/www/services_dnsmasq.php:204
+msgid "Register DHCP static mappings in DNS forwarder"
+msgstr "Registrar mapeamentos estáticos DHCP no DNS forwarder"
+
+#: usr/local/www/services_dnsmasq.php:177
+#: usr/local/www/services_dnsmasq.php:178
+#: usr/local/www/services_dnsmasq.php:182
+#: usr/local/www/services_dnsmasq.php:184
+#: usr/local/www/services_dnsmasq.php:205
+#, php-format
+msgid "If this option is set, then DHCP static mappings will be registered in the DNS forwarder, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value."
+msgstr "Se essa opção estiver configurada, então os mapeamentos estáticos DHCP serão registrados no DNS forwarder, de modo que seus nomes possam ser resolvidos. Você deve também configurar o domínio em %sSistema: Configurações Gerais%s para um valor apropriado."
+
+#: usr/local/www/services_dnsmasq.php:184
+#: usr/local/www/services_unbound.php:234
+#: usr/local/www/services_dnsmasq.php:185
+#: usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_dnsmasq.php:191
+#: usr/local/www/services_dnsmasq.php:212
+msgid "Prefer DHCP"
+msgstr "DHCP preferido"
+
+#: usr/local/www/services_dnsmasq.php:187
+#: usr/local/www/services_unbound.php:237
+#: usr/local/www/services_dnsmasq.php:188
+#: usr/local/www/services_dnsmasq.php:192
+#: usr/local/www/services_dnsmasq.php:194
+#: usr/local/www/services_dnsmasq.php:215
+msgid "Resolve DHCP mappings first"
+msgstr "Resolver mapeamentos de DHCP primeiro"
+
+#: usr/local/www/services_dnsmasq.php:188
+#: usr/local/www/services_unbound.php:238
+#: usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_dnsmasq.php:193
+#: usr/local/www/services_dnsmasq.php:195
+#: usr/local/www/services_dnsmasq.php:216
+#, php-format
+msgid "If this option is set, then DHCP mappings will be resolved before the manual list of names below. This only affects the name given for a reverse lookup (PTR)."
+msgstr "Se esta opção estiver definida, os mapeamentos DHCP serão resolvidos antes da lista manual de nomes abaixo. Isso afeta apenas o nome dado para uma consulta reversa (PTR)."
+
+#: usr/local/www/services_dnsmasq.php:202
+#: usr/local/www/services_dnsmasq.php:203
+#: usr/local/www/services_dnsmasq.php:228
+#: usr/local/www/services_dnsmasq.php:241
+#: usr/local/www/services_dnsmasq.php:305
+msgid "Enter any additional options you would like to add to the dnsmasq configuration here, separated by a space or newline"
+msgstr "Informe quaisquer opções adicionais que desejar às configurações do servidor OpenVPN aqui, separados por ponto-e-vírgula ou uma nova linha"
+
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_dnsmasq.php:216
+#: usr/local/www/services_dnsmasq.php:241
+#: usr/local/www/services_dnsmasq.php:254
+#: usr/local/www/services_dnsmasq.php:318
+#, php-format
+msgid "If the DNS forwarder is enabled, the DHCP service (if enabled) will automatically serve the LAN IP address as a DNS server to DHCP clients so they will use the forwarder. The DNS forwarder will use the DNS servers entered in %sSystem: General setup%s or those obtained via DHCP or PPP on WAN if the &quot;Allow DNS server list to be overridden by DHCP/PPP on WAN&quot; is checked. If you don't use that option (or if you use a static IP address on WAN), you must manually specify at least one DNS server on the %sSystem:General setup%s page."
+msgstr "Se o DNS forwarder estiver habilitado, o serviço DHCP (se habilitado) servirá automaticamente o endereço IP da LAN como um servidor DNS para clientes DHCP de modo a usar o forwarder. O DNS forwarder usará os servidores DNS informados em %sSistema: Instalação Geral%s ou aqueles obtidos via DHCP ou PPP na WAN se a opção &quot;Permitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN&quot; estiver marcada. Se você não usar essa opção (ou se você usar o endereço IP estático na WAN), você deve especificar manualmente pelo menos um servidor DNS na página %sSistema: Configurações Gerais%s."
+
+#: usr/local/www/services_dnsmasq.php:231
+#: usr/local/www/services_unbound.php:267
+#: usr/local/www/services_dnsmasq.php:232
+#: usr/local/www/services_dnsmasq.php:257
+#: usr/local/www/services_dnsmasq.php:270
+#: usr/local/www/services_dnsmasq.php:334
+msgid "Host Overrides"
+msgstr "Sobreescrever Host"
+
+#: usr/local/www/services_dnsmasq.php:235
+#: usr/local/www/services_unbound.php:271
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_dnsmasq.php:261
+#: usr/local/www/services_dnsmasq.php:274
+#: usr/local/www/services_dnsmasq.php:338
+msgid "Entries in this section override individual results from the forwarders."
+msgstr "Entradas nesta seção substituir os resultados individuais dos forwarders."
+
+#: usr/local/www/services_dnsmasq.php:236
+#: usr/local/www/services_unbound.php:272
+#: usr/local/www/services_dnsmasq.php:237
+#: usr/local/www/services_dnsmasq.php:262
+#: usr/local/www/services_dnsmasq.php:275
+#: usr/local/www/services_dnsmasq.php:339
+msgid "Use these for changing DNS results or for adding custom DNS records."
+msgstr "Use estas opções para alterar resultados de DNS ou adicionar registros de DNS personalizados."
+
+#: usr/local/www/services_dnsmasq.php:299
+#: usr/local/www/services_dnsmasq.php:320
+#: usr/local/www/services_unbound.php:335
+#: usr/local/www/services_dnsmasq.php:321
+#: usr/local/www/services_dnsmasq.php:346
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/services_dnsmasq.php:423
+msgid "Domain Overrides"
+msgstr "Sobreescrever domínio"
+
+#: usr/local/www/services_dnsmasq.php:303
+#: usr/local/www/services_dnsmasq.php:324
+#: usr/local/www/services_unbound.php:339
+#: usr/local/www/services_dnsmasq.php:325
+#: usr/local/www/services_dnsmasq.php:350
+#: usr/local/www/services_dnsmasq.php:363
+#: usr/local/www/services_dnsmasq.php:427
+msgid "Entries in this area override an entire domain by specifying an authoritative DNS server to be queried for that domain."
+msgstr "Entradas nesta área sobreescrevem um domínio inteiro especificando um servidor DNS autoritativo para ser consultado para tal domínio."
+
+#: usr/local/www/services_dnsmasq.php:337
+#: usr/local/www/services_dnsmasq.php:358
+#: usr/local/www/services_unbound.php:373
+#: usr/local/www/services_dnsmasq.php:359
+#: usr/local/www/services_dnsmasq.php:384
+#: usr/local/www/services_dnsmasq.php:397
+#: usr/local/www/services_dnsmasq.php:461
+msgid "Do you really want to delete this domain override?"
+msgstr "Você realmente deseja apagar essa sobrescrita de domínio?"
+
+#: usr/local/www/services_dnsmasq_edit.php:100
+#: usr/local/www/services_dnsmasq_edit.php:138
+msgid "This host/domain already exists."
+msgstr "Esse host/domínio já existe."
+
+#: usr/local/www/services_dnsmasq_edit.php:127
+#: usr/local/www/services_dnsmasq_edit.php:166
+msgid "Edit host"
+msgstr "Editar host"
+
+#: usr/local/www/services_dnsmasq_edit.php:138
+#: usr/local/www/services_dnsmasq_edit.php:193
+#: usr/local/www/services_dnsmasq_edit.php:194
+msgid "Edit DNS Forwarder entry"
+msgstr "Editar entrada de DNS Forwarder"
+
+#: usr/local/www/services_dnsmasq_edit.php:144
+#: usr/local/www/services_dnsmasq_edit.php:199
+#: usr/local/www/services_dnsmasq_edit.php:200
+msgid "Name of the host, without domain part"
+msgstr "Nome do host, sem a parte de domínio"
+
+#: usr/local/www/services_dnsmasq_edit.php:146
+#: usr/local/www/services_dnsmasq_edit.php:201
+#: usr/local/www/services_dnsmasq_edit.php:202
+msgid "myhost"
+msgstr "myhost"
+
+#: usr/local/www/services_dnsmasq_edit.php:152
+#: usr/local/www/services_dnsmasq_edit.php:207
+#: usr/local/www/services_dnsmasq_edit.php:208
+msgid "Domain of the host"
+msgstr "Domínio de host"
+
+#: usr/local/www/services_dnsmasq_edit.php:153
+#: usr/local/www/services_dnsmasq_edit.php:208
+#: usr/local/www/services_dnsmasq_edit.php:209
+msgid "example.com"
+msgstr "examplo.com"
+
+#: usr/local/www/services_dnsmasq_edit.php:159
+#: usr/local/www/services_dnsmasq_edit.php:214
+#: usr/local/www/services_dnsmasq_edit.php:215
+msgid "IP address of the host"
+msgstr "Endereço IP do host"
+
+#: usr/local/www/diag_pkglogs.php:81
+msgid "Package logs"
+msgstr "Logs de pacotes"
+
+#: usr/local/www/diag_pkglogs.php:92
+msgid "No packages with logging facilities are currently installed."
+msgstr "Não há pacotes com instalações de log atualmente."
+
+#: usr/local/www/diag_pkglogs.php:103 usr/local/www/diag_pkglogs.php:105
+#, php-format
+msgid "%s"
+msgstr "%s"
+
+#: usr/local/www/diag_pkglogs.php:118
+#, php-format
+msgid "Last %1$s %2$s log entries"
+msgstr "Últimos %1$s %2$s logs de entrada"
+
+#: usr/local/www/status.php:110 usr/local/www/status.php:111
+msgid "This status page includes the following information"
+msgstr "Essa página de status inclui as seguintes informações"
+
+#: usr/local/www/status.php:225 usr/local/www/status.php:226
+#: usr/local/www/status.php:230
+msgid "Note: make sure to remove any sensitive information (passwords, maybe also IP addresses) before posting information from this page in public places (like mailing lists)"
+msgstr "Nota: tenha certeza que removeu todas as informações sensíveis (senhas, talvés endereços IP também) antes de publicar informações dessa página para espaços públicos (como listas de e-mail)"
+
+#: usr/local/www/status.php:228 usr/local/www/status.php:229
+#: usr/local/www/status.php:233
+msgid "Passwords in config.xml have been automatically removed"
+msgstr "Senhas no config.xml foram automaticamente removidas"
+
+#: usr/local/www/bandwidth_by_ip.php:54 usr/local/www/bandwidth_by_ip.php:67
+#: usr/local/www/bandwidth_by_ip.php:61 usr/local/www/bandwidth_by_ip.php:103
+msgid "no info"
+msgstr "sem informações"
+
+#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_pptp.php:353
+#: usr/local/www/vpn_l2tp.php:73 usr/local/www/vpn_l2tp.php:321
+#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_pppoe_edit.php:424
+#: usr/local/www/vpn_pppoe_edit.php:425 usr/local/www/vpn_pptp.php:355
+#: usr/local/www/vpn_l2tp.php:74 usr/local/www/vpn_pppoe_edit.php:428
+#: usr/local/www/vpn_pptp.php:358
+msgid "Server address"
+msgstr "Endereço do servidor"
+
+#: usr/local/www/vpn_pptp.php:82 usr/local/www/vpn_l2tp.php:73
+#: usr/local/www/vpn_pppoe_edit.php:112 usr/local/www/vpn_l2tp.php:74
+msgid "Remote start address"
+msgstr "Endereço inicial remoto"
+
+#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_l2tp.php:78
+#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_l2tp.php:79
+msgid "RADIUS server address"
+msgstr "Endereço do servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:87 usr/local/www/vpn_pptp.php:432
+#: usr/local/www/vpn_l2tp.php:78 usr/local/www/vpn_l2tp.php:428
+#: usr/local/www/vpn_pppoe_edit.php:117 usr/local/www/vpn_pptp.php:434
+#: usr/local/www/vpn_l2tp.php:79 usr/local/www/vpn_pptp.php:437
+msgid "RADIUS shared secret"
+msgstr "Segredo Compartilhado RADIUS"
+
+#: usr/local/www/vpn_pptp.php:93 usr/local/www/vpn_l2tp.php:84
+#: usr/local/www/vpn_pppoe_edit.php:123 usr/local/www/vpn_l2tp.php:85
+msgid "A valid server address must be specified."
+msgstr "Um endereço de servidor válido deve ser especificado."
+
+#: usr/local/www/vpn_pptp.php:96 usr/local/www/vpn_l2tp.php:87
+#: usr/local/www/vpn_pppoe_edit.php:125 usr/local/www/vpn_l2tp.php:88
+#: usr/local/www/vpn_l2tp.php:91 usr/local/www/vpn_pptp.php:99
+msgid "A valid remote start address must be specified."
+msgstr "Um endereço inicial remoto válido deve ser especificado."
+
+#: usr/local/www/vpn_pptp.php:99 usr/local/www/vpn_l2tp.php:90
+#: usr/local/www/vpn_pppoe_edit.php:127 usr/local/www/vpn_l2tp.php:91
+#: usr/local/www/vpn_l2tp.php:94 usr/local/www/vpn_pptp.php:102
+msgid "A valid RADIUS server address must be specified."
+msgstr "Um endereço de servidor RADIUS válido deve ser especificado."
+
+#: usr/local/www/vpn_pptp.php:108 usr/local/www/vpn_l2tp.php:106
+#: usr/local/www/vpn_pppoe_edit.php:134 usr/local/www/vpn_l2tp.php:107
+#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_pptp.php:111
+msgid "The specified server address lies in the remote subnet."
+msgstr "O endereço do servidor especificado está na subrede remota."
+
+#: usr/local/www/vpn_pptp.php:112 usr/local/www/vpn_l2tp.php:109
+#: usr/local/www/vpn_l2tp.php:110 usr/local/www/vpn_l2tp.php:113
+#: usr/local/www/vpn_pptp.php:115
+msgid "The specified server address is equal to the LAN interface address."
+msgstr "O endereço do servidor especificado é igual ao endereço da interface LAN."
+
+#: usr/local/www/vpn_pptp.php:117 usr/local/www/vpn_pptp.php:120
+msgid "PPTP redirection target address"
+msgstr "Endereço alvo de redirecionamento PPTP"
+
+#: usr/local/www/vpn_pptp.php:122 usr/local/www/vpn_pptp.php:125
+msgid "A valid target address must be specified."
+msgstr "Um endereço de alvo válido deve ser especificado."
+
+#: usr/local/www/vpn_pptp.php:193 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users_edit.php:135 usr/local/www/vpn_pptp.php:196
+msgid "VPN PPTP"
+msgstr "PPPTP da VPN"
+
+#: usr/local/www/vpn_pptp.php:300 usr/local/www/vpn_pptp_users.php:89
+#: usr/local/www/vpn_l2tp.php:280 usr/local/www/vpn_l2tp_users.php:92
+#: usr/local/www/vpn_pptp.php:302 usr/local/www/vpn_l2tp_users.php:93
+#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_pptp_users.php:90
+#: usr/local/www/vpn_l2tp.php:284 usr/local/www/vpn_pptp.php:305
+msgid "Configuration"
+msgstr "Configuração"
+
+#: usr/local/www/vpn_pptp.php:301 usr/local/www/vpn_pptp_users.php:71
+#: usr/local/www/vpn_pptp_users.php:90
+#: usr/local/www/system_authservers.php:421
+#: usr/local/www/system_groupmanager.php:240
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/system_usermanager.php:440
+#: usr/local/www/system_usermanager_addprivs.php:167
+#: usr/local/www/system_usermanager_settings.php:113
+#: usr/local/www/vpn_l2tp.php:281 usr/local/www/vpn_l2tp_users.php:38
+#: usr/local/www/vpn_l2tp_users.php:93
+#: usr/local/www/system_usermanager.php:438
+#: usr/local/www/system_groupmanager_addprivs.php:166
+#: usr/local/www/vpn_pptp.php:303 usr/local/www/vpn_l2tp_users.php:94
+#: usr/local/www/vpn_l2tp.php:282 usr/local/www/vpn_pptp_users.php:91
+#: usr/local/www/system_authservers.php:426 usr/local/www/vpn_l2tp.php:285
+#: usr/local/www/system_authservers.php:433 usr/local/www/vpn_pptp.php:306
+#: usr/local/www/system_usermanager_settings.php:115
+#: usr/local/www/system_groupmanager.php:243
+#: usr/local/www/system_authservers.php:444
+msgid "Users"
+msgstr "Usuários"
+
+#: usr/local/www/vpn_pptp.php:320 usr/local/www/vpn_pptp.php:322
+#: usr/local/www/vpn_pptp.php:325
+msgid "Redirect incoming PPTP connections to"
+msgstr "Redirecionar conexões PPTP de entrada para"
+
+#: usr/local/www/vpn_pptp.php:322 usr/local/www/vpn_pptp.php:324
+#: usr/local/www/vpn_pptp.php:327
+msgid "PPTP redirection"
+msgstr "Redirecionamento PPTP"
+
+#: usr/local/www/vpn_pptp.php:326 usr/local/www/vpn_pptp.php:328
+#: usr/local/www/vpn_pptp.php:331
+msgid "Enter the IP address of a host which will accept incoming PPTP connections"
+msgstr "Informe o endereço IP do host que aceitará conexões PPTP de entrada"
+
+#: usr/local/www/vpn_pptp.php:332 usr/local/www/vpn_pptp.php:334
+#: usr/local/www/vpn_pptp.php:337
+msgid "Enable PPTP server"
+msgstr "Habilitar servidor PPTP"
+
+#: usr/local/www/vpn_pptp.php:335 usr/local/www/vpn_pptp.php:337
+#: usr/local/www/vpn_pptp.php:340
+msgid "No. PPTP users"
+msgstr "No. usuários PPTP"
+
+#: usr/local/www/vpn_pptp.php:349 usr/local/www/vpn_pptp.php:351
+#: usr/local/www/vpn_pptp.php:354
+msgid "Hint: 10 is ten PPTP clients"
+msgstr "Dica: 10 são dez clientes PPTP"
+
+#: usr/local/www/vpn_pptp.php:357 usr/local/www/vpn_pptp.php:359
+#: usr/local/www/vpn_pptp.php:362
+msgid "Enter the IP address the PPTP server should give to clients for use as their \"gateway\""
+msgstr "Informe o endereço IP do servidor PPTP que deverá ser utilizado pelos clientes em seu \"gateway\""
+
+#: usr/local/www/vpn_pptp.php:359 usr/local/www/vpn_l2tp.php:327
+#: usr/local/www/vpn_pppoe_edit.php:430 usr/local/www/vpn_pppoe_edit.php:431
+#: usr/local/www/vpn_pptp.php:361 usr/local/www/vpn_l2tp.php:328
+#: usr/local/www/vpn_l2tp.php:331 usr/local/www/vpn_pppoe_edit.php:434
+#: usr/local/www/vpn_pptp.php:364
+msgid "Typically this is set to an unused IP just outside of the client range"
+msgstr "Normalmente, isto é definido como um IP não utilizado fora do range do cliente"
+
+#: usr/local/www/vpn_pptp.php:362 usr/local/www/vpn_l2tp.php:330
+#: usr/local/www/vpn_pppoe_edit.php:433 usr/local/www/vpn_pppoe_edit.php:434
+#: usr/local/www/vpn_pptp.php:364 usr/local/www/vpn_l2tp.php:331
+#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_pppoe_edit.php:437
+#: usr/local/www/vpn_pptp.php:367
+msgid "NOTE: This should NOT be set to any IP address currently in use on this firewall"
+msgstr "NOTA: Este não deve ser definido para nenhum endereço IP atualmente em uso neste firewall "
+
+#: usr/local/www/vpn_pptp.php:365 usr/local/www/vpn_l2tp.php:333
+#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pppoe_edit.php:437
+#: usr/local/www/vpn_pptp.php:367 usr/local/www/vpn_pppoe_edit.php:440
+#: usr/local/www/vpn_pptp.php:370
+msgid "Remote address range"
+msgstr "Intervalo de endereço remoto"
+
+#: usr/local/www/vpn_pptp.php:370 usr/local/www/vpn_pptp.php:372
+#: usr/local/www/vpn_pptp.php:375
+msgid "Specify the starting address for the client IP subnet"
+msgstr "Especifique o endereço de início para a subrede do IP do cliente"
+
+#: usr/local/www/vpn_pptp.php:373 usr/local/www/vpn_pptp.php:375
+#: usr/local/www/vpn_pptp.php:378
+msgid "PPTP DNS Servers"
+msgstr "Servidores DNS PPTP"
+
+#: usr/local/www/vpn_pptp.php:379 usr/local/www/vpn_pptp.php:381
+#: usr/local/www/vpn_pptp.php:384
+msgid "primary and secondary DNS servers assigned to PPTP clients"
+msgstr "servidores DNS primário e secundário atribuídos a clientes PPTP"
+
+#: usr/local/www/vpn_pptp.php:382 usr/local/www/vpn_l2tp.php:404
+#: usr/local/www/vpn_pptp.php:384 usr/local/www/vpn_l2tp.php:405
+#: usr/local/www/vpn_l2tp.php:408 usr/local/www/vpn_pptp.php:387
+msgid "WINS Server"
+msgstr "Servidor WINS"
+
+#: usr/local/www/vpn_pptp.php:388 usr/local/www/vpn_l2tp.php:410
+#: usr/local/www/vpn_pppoe_edit.php:461 usr/local/www/vpn_pppoe_edit.php:462
+#: usr/local/www/vpn_pptp.php:390 usr/local/www/vpn_l2tp.php:411
+#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pptp.php:393
+msgid "RADIUS"
+msgstr "RADIUS"
+
+#: usr/local/www/vpn_pptp.php:391 usr/local/www/vpn_l2tp.php:413
+#: usr/local/www/vpn_pppoe_edit.php:464 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pptp.php:393 usr/local/www/vpn_l2tp.php:414
+#: usr/local/www/vpn_l2tp.php:417 usr/local/www/vpn_pppoe_edit.php:468
+#: usr/local/www/vpn_pptp.php:396
+msgid "Use a RADIUS server for authentication"
+msgstr "Usar um servidor RADIUS para autenticação"
+
+#: usr/local/www/vpn_pptp.php:392 usr/local/www/vpn_pppoe_edit.php:465
+#: usr/local/www/vpn_pppoe_edit.php:466 usr/local/www/vpn_pptp.php:394
+#: usr/local/www/vpn_pppoe_edit.php:469 usr/local/www/vpn_pptp.php:397
+msgid "When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used"
+msgstr "Quando configurado, todos os usuários serão autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usuários local não será usada"
+
+#: usr/local/www/vpn_pptp.php:397 usr/local/www/vpn_l2tp.php:417
+#: usr/local/www/vpn_pppoe_edit.php:470 usr/local/www/vpn_pppoe_edit.php:471
+#: usr/local/www/vpn_pptp.php:399 usr/local/www/vpn_l2tp.php:418
+#: usr/local/www/vpn_l2tp.php:421 usr/local/www/vpn_pppoe_edit.php:474
+#: usr/local/www/vpn_pptp.php:402
+msgid "Enable RADIUS accounting"
+msgstr "Habilitar RADIUS accounting"
+
+#: usr/local/www/vpn_pptp.php:398 usr/local/www/vpn_pppoe_edit.php:472
+#: usr/local/www/vpn_pppoe_edit.php:473 usr/local/www/vpn_pptp.php:400
+#: usr/local/www/vpn_pppoe_edit.php:476 usr/local/www/vpn_pptp.php:403
+msgid "Sends accounting packets to the RADIUS server"
+msgstr "Envia pacotes de accounting para o servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:401 usr/local/www/vpn_pptp.php:403
+#: usr/local/www/vpn_pptp.php:406
+msgid "Secondary RADIUS server for failover authentication"
+msgstr "Servidor RADIUS secundário para autenticação failover"
+
+#: usr/local/www/vpn_pptp.php:402 usr/local/www/vpn_pptp.php:404
+#: usr/local/www/vpn_pptp.php:407
+msgid "When set, all requests will go to the secondary server when primary fails"
+msgstr "Quando configurado, todas as requisições irão para o servidor secundário quando o primário falhar"
+
+#: usr/local/www/vpn_pptp.php:405 usr/local/www/vpn_pppoe_edit.php:492
+#: usr/local/www/vpn_pppoe_edit.php:493 usr/local/www/vpn_pptp.php:407
+#: usr/local/www/vpn_pppoe_edit.php:496 usr/local/www/vpn_pptp.php:410
+msgid "RADIUS issued IPs"
+msgstr "IPs emitidos pelo RADIUS"
+
+#: usr/local/www/vpn_pptp.php:406 usr/local/www/vpn_pptp.php:408
+#: usr/local/www/vpn_pptp.php:411
+msgid "Issue IP addresses via RADIUS server"
+msgstr "Emite endereços IP via servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:411 usr/local/www/vpn_pptp.php:413
+#: usr/local/www/vpn_pptp.php:416
+msgid "RADIUS NAS IP"
+msgstr "IP NAS do RADIUS"
+
+#: usr/local/www/vpn_pptp.php:417 usr/local/www/vpn_pppoe_edit.php:485
+#: usr/local/www/vpn_pppoe_edit.php:486 usr/local/www/vpn_pptp.php:419
+#: usr/local/www/vpn_pppoe_edit.php:489 usr/local/www/vpn_pptp.php:422
+msgid "RADIUS Accounting Update"
+msgstr "Atualização de accounting do RADIUS"
+
+#: usr/local/www/vpn_pptp.php:423 usr/local/www/vpn_pptp.php:425
+#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_l2tp.php:425
+#: usr/local/www/vpn_pptp.php:428
+msgid "RADIUS Server"
+msgstr "Servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:429 usr/local/www/vpn_pptp.php:446
+#: usr/local/www/vpn_pptp.php:431 usr/local/www/vpn_pptp.php:448
+#: usr/local/www/vpn_pptp.php:434 usr/local/www/vpn_pptp.php:451
+msgid "Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server"
+msgstr "Informe o endereço IP, porta do RADIUS, e porta de accounting do servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:436 usr/local/www/vpn_pppoe_edit.php:510
+#: usr/local/www/vpn_pppoe_edit.php:527 usr/local/www/vpn_pppoe_edit.php:511
+#: usr/local/www/vpn_pppoe_edit.php:528 usr/local/www/vpn_pptp.php:438
+#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:531
+#: usr/local/www/vpn_pptp.php:441
+msgid "Enter the shared secret that will be used to authenticate to the RADIUS server"
+msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS"
+
+#: usr/local/www/vpn_pptp.php:449 usr/local/www/vpn_pptp.php:451
+#: usr/local/www/vpn_pptp.php:454
+msgid "Secondary RADIUS shared secret"
+msgstr "Segredo compartilhado secundário do RADIUS"
+
+#: usr/local/www/vpn_pptp.php:453 usr/local/www/vpn_pptp.php:455
+#: usr/local/www/vpn_pptp.php:458
+msgid "Enter the shared secret that will be used to authenticate to the secondary RADIUS server"
+msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS secundário"
+
+#: usr/local/www/vpn_pptp.php:463 usr/local/www/vpn_pptp.php:465
+#: usr/local/www/vpn_pptp.php:468
+msgid "Require 128-bit encryption"
+msgstr "Requere criptografia 128-bits"
+
+#: usr/local/www/vpn_pptp.php:464 usr/local/www/vpn_pptp.php:466
+#: usr/local/www/vpn_pptp.php:469
+msgid "When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-bit encryption will be accepted as well. Note that encryption will always be forced on PPTP connections (i.e. unencrypted connections will not be accepted)"
+msgstr "Quando configurado, somente criptografias de 128-bits serão aceitas. Do contrário criptografias de 40 e 56 bits serão aceitas também. Note que a criptografia será sempre forçada nas conexões PPTP (i.e. conexões não criptografadas não serão aceitas)"
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483
+msgid "don't forget to "
+msgstr "não esqueça de "
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483
+msgid "add a firewall rule"
+msgstr "adicionar uma regra de firewall"
+
+#: usr/local/www/vpn_pptp.php:478 usr/local/www/vpn_pptp.php:480
+#: usr/local/www/vpn_pptp.php:483
+msgid "to permit traffic from PPTP clients"
+msgstr "para permitir tráfego de clientes PPTP"
+
+#: usr/local/www/vpn_pptp_users.php:81 usr/local/www/vpn_l2tp_users.php:84
+#: usr/local/www/vpn_l2tp_users.php:85 usr/local/www/vpn_pptp_users.php:82
+msgid "Warning: RADIUS is enabled. The local user database will not be used."
+msgstr "Advertência: RADIUS está habilitado. A base de dados de usuários local não será usada."
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84
+msgid "The PPTP user list has been modified"
+msgstr "A lista de usuários PPTP foi modificada;"
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_l2tp_users.php:86
+#: usr/local/www/vpn_l2tp_users.php:87 usr/local/www/vpn_pptp_users.php:84
+msgid "You must apply the changes in order for them to take effect"
+msgstr "Você deve aplicar as mudanças para que elas tenham efeito"
+
+#: usr/local/www/vpn_pptp_users.php:83 usr/local/www/vpn_pptp_users.php:84
+msgid "Warning: this will terminate all current PPTP sessions"
+msgstr "Advertência: isso irá finaliar todas as sessões PPTP atuais"
+
+#: usr/local/www/vpn_pptp_users.php:104 usr/local/www/vpn_pptp_users.php:127
+#: usr/local/www/system_usermanager.php:842
+#: usr/local/www/vpn_l2tp_users.php:120
+#: usr/local/www/system_usermanager.php:840
+#: usr/local/www/system_usermanager.php:845
+#: usr/local/www/vpn_l2tp_users.php:121 usr/local/www/vpn_pptp_users.php:105
+#: usr/local/www/vpn_pptp_users.php:128
+#: usr/local/www/system_usermanager.php:798
+msgid "add user"
+msgstr "adicionar usuário"
+
+#: usr/local/www/vpn_pptp_users.php:117
+#: usr/local/www/system_usermanager.php:824
+#: usr/local/www/system_usermanager.php:822
+#: usr/local/www/system_usermanager.php:825
+#: usr/local/www/vpn_pptp_users.php:118
+#: usr/local/www/system_usermanager.php:848
+msgid "edit user"
+msgstr "editar usuário"
+
+#: usr/local/www/vpn_pptp_users.php:118 usr/local/www/vpn_l2tp_users.php:115
+#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119
+msgid "Do you really want to delete this user?"
+msgstr "Você realmente deseja apagar esse usuário?"
+
+#: usr/local/www/vpn_pptp_users.php:118
+#: usr/local/www/system_usermanager.php:829
+#: usr/local/www/vpn_l2tp_users.php:115
+#: usr/local/www/system_usermanager.php:827
+#: usr/local/www/system_usermanager.php:830
+#: usr/local/www/vpn_l2tp_users.php:116 usr/local/www/vpn_pptp_users.php:119
+#: usr/local/www/system_usermanager.php:853
+msgid "delete user"
+msgstr "apagar usuário"
+
+#: usr/local/www/vpn_pptp_users_edit.php:85
+#: usr/local/www/services_dyndns_edit.php:94
+#: usr/local/www/system_usermanager.php:199
+#: usr/local/www/vpn_l2tp_users_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:110
+#: usr/local/www/vpn_l2tp_users_edit.php:88
+#: usr/local/www/services_dyndns_edit.php:111
+msgid "The username contains invalid characters."
+msgstr "O nome de usuário contém caracteres inválidos."
+
+#: usr/local/www/vpn_pptp_users_edit.php:88
+msgid "The password cannot start with '!'."
+msgstr "A senha não pode iniciar com '!'."
+
+#: usr/local/www/vpn_pptp_users_edit.php:91
+#: usr/local/www/vpn_l2tp_users_edit.php:90
+#: usr/local/www/vpn_l2tp_users_edit.php:91
+msgid "The password contains invalid characters."
+msgstr "A senha contém caracteres inválidos."
+
+#: usr/local/www/vpn_pptp_users_edit.php:94
+#: usr/local/www/system_usermanager.php:205
+#: usr/local/www/system_usermanager_passwordmg.php:54
+#: usr/local/www/vpn_l2tp_users_edit.php:93
+#: usr/local/www/vpn_l2tp_users_edit.php:94
+msgid "The passwords do not match."
+msgstr "As senhas não correspondem."
+
+#: usr/local/www/vpn_pptp_users_edit.php:97
+#: usr/local/www/vpn_l2tp_users_edit.php:96
+#: usr/local/www/vpn_l2tp_users_edit.php:97
+msgid "The IP address entered is not valid."
+msgstr "O endereço IP informado não é válido."
+
+#: usr/local/www/vpn_pptp_users_edit.php:104
+#: usr/local/www/system_usermanager.php:215
+#: usr/local/www/vpn_l2tp_users_edit.php:103
+#: usr/local/www/vpn_l2tp_users_edit.php:104
+msgid "Another entry with the same username already exists."
+msgstr "Outra entrada com o mesmo nome de usuário já existe."
+
+#: usr/local/www/vpn_pptp_users_edit.php:155
+#: usr/local/www/vpn_l2tp_users_edit.php:163
+#: usr/local/www/vpn_pptp_users_edit.php:156
+#: usr/local/www/vpn_l2tp_users_edit.php:164
+msgid "confirmation"
+msgstr "confirmação"
+
+#: usr/local/www/vpn_pptp_users_edit.php:156
+#: usr/local/www/vpn_pptp_users_edit.php:157
+msgid "If you want to change the users' password, enter it here twice."
+msgstr "Se você desejar mudar a senha do usuário, informe-a duas vezes aqui."
+
+#: usr/local/www/vpn_pptp_users_edit.php:163
+#: usr/local/www/vpn_l2tp_users_edit.php:171
+#: usr/local/www/vpn_pptp_users_edit.php:164
+#: usr/local/www/vpn_l2tp_users_edit.php:172
+msgid "If you want the user to be assigned a specific IP address, enter it here."
+msgstr "Se você desejar que o usuário seja designado a um endereço IP específico, informe-o aqui."
+
+#: usr/local/www/wizard.php:65 usr/local/www/wizard.php:71
+#, php-format
+msgid "ERROR: Could not open %s."
+msgstr "ERRO: Não pôde abrir %s."
+
+#: usr/local/www/wizard.php:77
+#, php-format
+msgid "ERROR: Could not parse %s/wizards/%s file."
+msgstr "ERRO: Não pôde fazer parse do arquivo %s/wizards/%s."
+
+#: usr/local/www/load_balancer_relay_action_edit.php:65
+msgid "Load Balancer: Relay Action:"
+msgstr "Balanceador de Carga: Ação de Relay:"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:124
+msgid "This action name has already been used. Action names must be unique."
+msgstr "Esse nome de ação já está sendo usado. Nomes de ação devem ser únicos."
+
+#: usr/local/www/load_balancer_relay_action_edit.php:134
+#, php-format
+msgid "modified '%s' action:"
+msgstr "ação '%s' modificada:"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:186
+#: usr/local/www/load_balancer_relay_protocol_edit.php:144
+#: usr/local/www/load_balancer_relay_protocol_edit.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+msgid "DNS"
+msgstr "DNS"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:408
+#: usr/local/www/load_balancer_relay_action_edit.php:407
+#: usr/local/www/load_balancer_relay_action_edit.php:405
+msgid "Edit Load Balancer - Relay Action entry"
+msgstr "Editar Balanceador de Carga - Entrada de Ação Relay"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:508
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:173
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/load_balancer_relay_action_edit.php:505
+#: usr/local/www/services_rfc2136_edit.php:72
+#: usr/local/www/services_rfc2136_edit.php:178
+msgid "Key"
+msgstr "Chave"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:517
+#: usr/local/www/load_balancer_relay_action_edit.php:537
+#: usr/local/www/load_balancer_relay_action_edit.php:516
+#: usr/local/www/load_balancer_relay_action_edit.php:536
+#: usr/local/www/load_balancer_relay_action_edit.php:514
+#: usr/local/www/load_balancer_relay_action_edit.php:534
+msgid "TODO"
+msgstr "TODO"
+
+#: usr/local/www/xmlrpc.php:58 usr/local/www/xmlrpc.php:54
+msgid "Disallowing CARP sync loop."
+msgstr "Desabilitando loop de sincronização CARP."
+
+#: usr/local/www/xmlrpc.php:67 usr/local/www/xmlrpc.php:63
+msgid "Authentication failed"
+msgstr "Autenticação falhou"
+
+#: usr/local/www/xmlrpc.php:78 usr/local/www/xmlrpc.php:74
+msgid "XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\\'s password followed by the PHP code to evaluate."
+msgstr "Wrapper de XMLRPC para eval(). Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida pelo código PHP para avaliar."
+
+#: usr/local/www/xmlrpc.php:109 usr/local/www/xmlrpc.php:105
+msgid "XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\\'s password followed by an shell command to execute."
+msgstr "Wrapper de XMLRPC para mexec(). Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por um comando shell para ser executado."
+
+#: usr/local/www/xmlrpc.php:133 usr/local/www/xmlrpc.php:129
+msgid "XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\\'s password followed by an array containing the keys to be backed up."
+msgstr "Wrapper de XMLRPC para backup_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista com as chaves para serem armazenadas."
+
+#: usr/local/www/xmlrpc.php:156 usr/local/www/xmlrpc.php:152
+#: usr/local/www/xmlrpc.php:159 usr/local/www/xmlrpc.php:161
+msgid "XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion."
+msgstr "Wrapper de XMLRPC para restore_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local e uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar."
+
+#: usr/local/www/xmlrpc.php:203 usr/local/www/xmlrpc.php:282
+#: usr/local/www/xmlrpc.php:307 usr/local/www/xmlrpc.php:212
+#: usr/local/www/xmlrpc.php:291 usr/local/www/xmlrpc.php:316
+#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:313
+#: usr/local/www/xmlrpc.php:224 usr/local/www/xmlrpc.php:308
+#: usr/local/www/xmlrpc.php:337 usr/local/www/xmlrpc.php:228
+#: usr/local/www/xmlrpc.php:314 usr/local/www/xmlrpc.php:345
+#, php-format
+msgid "Merged in config (%s sections) from XMLRPC client."
+msgstr "Mescaldo em config (seções %s) do cliente XMLRPC."
+
+#: usr/local/www/xmlrpc.php:263 usr/local/www/xmlrpc.php:272
+#: usr/local/www/xmlrpc.php:269 usr/local/www/xmlrpc.php:286
+#: usr/local/www/xmlrpc.php:290
+msgid "XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion."
+msgstr "Wrapper de XMLRPC para mesclar seções de pacotes. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar."
+
+#: usr/local/www/xmlrpc.php:288 usr/local/www/xmlrpc.php:297
+#: usr/local/www/xmlrpc.php:294 usr/local/www/xmlrpc.php:314
+#: usr/local/www/xmlrpc.php:320
+msgid "XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\\'s password and an array to merge into the system\\'s config. This function returns true upon completion."
+msgstr "Wrapper de XMLRPC para merge_config_section. Esse método deve ser chamado com 2 parâmetros: uma string contendo a senha do sistema local seguida por uma lista para mesclar com a configuração do sistema. Essa função retorna verdadeiro ao finalizar."
+
+#: usr/local/www/xmlrpc.php:312 usr/local/www/xmlrpc.php:321
+#: usr/local/www/xmlrpc.php:318 usr/local/www/xmlrpc.php:342
+#: usr/local/www/xmlrpc.php:350
+msgid "Basic XMLRPC wrapper for filter_configure. This method must be called with one paramater: a string containing the local system\\'s password. This function returns true upon completion."
+msgstr "Wrapper de XMLRPC para filter_configure. Esse método deve ser chamado com 1 parâmetro: uma string contendo a senha do sistema local. Essa função retorna verdadeiro ao finalizar."
+
+#: usr/local/www/xmlrpc.php:342 usr/local/www/xmlrpc.php:351
+#: usr/local/www/xmlrpc.php:348 usr/local/www/xmlrpc.php:372
+#: usr/local/www/xmlrpc.php:380
+msgid "Basic XMLRPC wrapper for configuring CARP interfaces."
+msgstr "Wrapper básico de XMLRPC para configurar interfaces CARP."
+
+#: usr/local/www/xmlrpc.php:364 usr/local/www/xmlrpc.php:385
+#: usr/local/www/xmlrpc.php:373 usr/local/www/xmlrpc.php:394
+#: usr/local/www/xmlrpc.php:370 usr/local/www/xmlrpc.php:391
+#: usr/local/www/xmlrpc.php:397 usr/local/www/xmlrpc.php:418
+#: usr/local/www/xmlrpc.php:407 usr/local/www/xmlrpc.php:428
+msgid "Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion."
+msgstr "Wrapper básico de XMLRPC para check_firmware_version. Essa função retornará o resultado de check_firmware_version após finalizar."
+
+#: usr/local/www/xmlrpc.php:406 usr/local/www/xmlrpc.php:415
+#: usr/local/www/xmlrpc.php:412 usr/local/www/xmlrpc.php:439
+#: usr/local/www/xmlrpc.php:449
+msgid "Basic XMLRPC wrapper for rc.reboot."
+msgstr "Wrapper básico de XMLRPC para rc.reboot."
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:65
+msgid "Load Balancer: Relay Protocol:"
+msgstr "Balanceador de Carga: Protocolo Relay:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:86
+msgid "This protocol name has already been used. Protocol names must be unique."
+msgstr "Esse nome de protocolo já existe. Nomes de protocolos devem ser únicos."
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:105
+#, php-format
+msgid "modified '%s' load balancing protocol:"
+msgstr "protocolo de balanceamento de carga '%s' modificado:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:107
+msgid "name"
+msgstr "nome"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:108
+#: usr/local/www/load_balancer_relay_protocol_edit.php:110
+msgid "type"
+msgstr "tipo"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:109
+msgid "description"
+msgstr "descrição"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:111
+msgid "action"
+msgstr "ação"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:192
+#: usr/local/www/load_balancer_relay_protocol_edit.php:190
+msgid "Edit Load Balancer - Relay Protocol entry"
+msgstr "Editar Balanceador de Carga - Entrada de Protocolo Relay"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:227
+#: usr/local/www/load_balancer_relay_protocol_edit.php:225
+msgid "Add / remove available actions"
+msgstr "Adicionar / Remover ações disponíveis"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:237
+#: usr/local/www/load_balancer_relay_protocol_edit.php:235
+msgid "Available Actions"
+msgstr "Ações Disponíveis"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:252
+#: usr/local/www/system_crlmanager.php:474
+#: usr/local/www/load_balancer_relay_protocol_edit.php:250
+#: usr/local/www/system_crlmanager.php:507
+msgid "Add"
+msgstr "Adicionar"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:259
+#: usr/local/www/load_balancer_relay_protocol_edit.php:257
+msgid "Enabled Actions"
+msgstr "Habilitar Ações"
+
+#: usr/local/www/pkg_mgr_settings.php:62 usr/local/www/pkg_mgr_settings.php:94
+#: usr/local/www/pkg_mgr_settings.php:93
+msgid "Package Settings"
+msgstr "Configurações de Pacote"
+
+#: usr/local/www/pkg_mgr_settings.php:92 usr/local/www/pkg_mgr_settings.php:91
+#, php-format
+msgid "%s packages"
+msgstr "%s pacotes"
+
+#: usr/local/www/pkg_mgr_settings.php:102
+#: usr/local/www/pkg_mgr_settings.php:105
+#: usr/local/www/pkg_mgr_settings.php:101
+#: usr/local/www/pkg_mgr_settings.php:104
+msgid "Package Repository URL"
+msgstr "URL de Repositório de Pacotes"
+
+#: usr/local/www/pkg_mgr_settings.php:107
+#: usr/local/www/pkg_mgr_settings.php:106
+msgid "Use a different URL server for packages other than"
+msgstr "Use um servidor URL diferente para pacotes ao invés de"
+
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/pkg_mgr_settings.php:111
+#, php-format
+msgid "This is where %s will check for packages when the"
+msgstr "Isso é onde %s verificará por pacotes quando o"
+
+#: usr/local/www/pkg_mgr_settings.php:112
+#: usr/local/www/pkg_mgr_settings.php:111
+msgid "System: Packages"
+msgstr "Sistema: Pacotes"
+
+#: usr/local/www/services_captiveportal_hostname.php:111
+#: usr/local/www/services_captiveportal_hostname.php:109
+msgid "Allowed IP Addresses"
+msgstr "Endereços IP permitidos"
+
+#: usr/local/www/services_captiveportal_hostname.php:173
+#: usr/local/www/services_captiveportal_hostname.php:171
+msgid "Adding allowed Hostnames will allow a DNS hostname access to/from access through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal."
+msgstr "Adicionando hostnames permitidos irá permitir acesso de/para através do captive portal sem levá-los a página do portal. Isto pode ser usado para um servidor web servindo imagens para a página do captive portal ou um servidor DNS em outra rede, por exemplo. Especificando endereços <em>de</em> origem, pode ser usado para sempre permitir acesso de um cliente atrás do captive portal."
+
+#: usr/local/www/services_captiveportal_hostname.php:177
+#: usr/local/www/services_captiveportal_hostname.php:184
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_hostname.php:182
+msgid "the Hostname are allowed"
+msgstr "o hostname está permitido"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:62
+#: usr/local/www/services_captiveportal_hostname_edit.php:59
+msgid "Edit allowed Hostname"
+msgstr "Editar hostname permitido"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:102
+#: usr/local/www/services_captiveportal_hostname_edit.php:100
+msgid "Allowed Hostname"
+msgstr "Hostname permitido"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:107
+#: usr/local/www/services_captiveportal_hostname_edit.php:105
+#, php-format
+msgid "A valid Hostname must be specified. [%s]"
+msgstr "Um hostname válido deve ser especificado. [%s]"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:172
+#: usr/local/www/services_captiveportal_hostname_edit.php:170
+msgid "to always allow an Hostname through the captive portal (without authentication)"
+msgstr "para sempre permitir um hostname através do portal captive (sem autenticação)"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:173
+#: usr/local/www/services_captiveportal_hostname_edit.php:171
+msgid "to allow access from all clients (even non-authenticated ones) behind the portal to this Hostname"
+msgstr "para permitir acesso de todos os clientes (mesmo aqueles não autenticados) atrás do portal para esse Hostname"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:192
+#: usr/local/www/services_captiveportal_hostname_edit.php:190
+msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s"
+msgstr "Informe um limite de upload para ser utilizado nesse Hostname em Kbit/s"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:198
+#: usr/local/www/services_captiveportal_hostname_edit.php:196
+msgid "Enter a download limit to be enforced on this Hostname in Kbit/s"
+msgstr "Informe o limite de download para ser utilizado nesse Hostname em Kbit/s"
+
+#: usr/local/www/services_captiveportal_vouchers.php:67
+#: usr/local/www/services_captiveportal_vouchers.php:64
+msgid "You will need to recreate any existing Voucher Rolls due to the public and private key changes. Click cancel if you do not wish to recreate the vouchers."
+msgstr "Você precisará recriar qualquer Lista de Voucher existente devido a mudanças em chaves públicas e privadas. Clique em cancelar se não desejar recriar os vouchers."
+
+#: usr/local/www/services_captiveportal_vouchers.php:114
+#: usr/local/www/services_captiveportal_vouchers.php:123
+#: usr/local/www/services_captiveportal_vouchers.php:130
+msgid "Voucher invalid"
+msgstr "Voucher inválido"
+
+#: usr/local/www/services_captiveportal_vouchers.php:116
+#: usr/local/www/services_captiveportal_vouchers.php:125
+#: usr/local/www/services_captiveportal_vouchers.php:132
+msgid "Voucher expired"
+msgstr "Voucher expirado"
+
+#: usr/local/www/services_captiveportal_vouchers.php:139
+#: usr/local/www/services_captiveportal_vouchers.php:148
+#: usr/local/www/services_captiveportal_vouchers.php:155
+msgid "Cannot write private key file"
+msgstr "Não pode escrever no arquivo de chave privada"
+
+#: usr/local/www/services_captiveportal_vouchers.php:157
+#: usr/local/www/services_captiveportal_vouchers.php:166
+#: usr/local/www/services_captiveportal_vouchers.php:175
+msgid "Need private RSA key to print vouchers"
+msgstr "É necessária uma chave RSA privada para imprimir vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "charset"
+msgstr "charset"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "rollbits"
+msgstr "rollbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "ticketbits"
+msgstr "ticketbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "checksumbits"
+msgstr "checksumbits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "publickey"
+msgstr "publickey"
+
+#: usr/local/www/services_captiveportal_vouchers.php:191
+#: usr/local/www/services_captiveportal_vouchers.php:201
+#: usr/local/www/services_captiveportal_vouchers.php:210
+msgid "magic"
+msgstr "magic"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:565
+#: usr/local/www/services_captiveportal_vouchers.php:572
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:585
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:594
+#: usr/local/www/services_captiveportal_vouchers.php:599
+msgid "Synchronize Voucher Database IP"
+msgstr "Sincronizar IP de base de dados de Vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync port"
+msgstr "Porta de sincronização"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync password"
+msgstr "Senha de sincronização"
+
+#: usr/local/www/services_captiveportal_vouchers.php:194
+#: usr/local/www/services_captiveportal_vouchers.php:204
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "Sync username"
+msgstr "Sincronização de usuário"
+
+#: usr/local/www/services_captiveportal_vouchers.php:203
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:222
+msgid "Need at least 2 characters to create vouchers."
+msgstr "São necessários pelo menos 2 caracteres para criar vouchers."
+
+#: usr/local/www/services_captiveportal_vouchers.php:205
+#: usr/local/www/services_captiveportal_vouchers.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:224
+msgid "Double quotes aren't allowed."
+msgstr "Aspas não são permitidas."
+
+#: usr/local/www/services_captiveportal_vouchers.php:207
+#: usr/local/www/services_captiveportal_vouchers.php:217
+#: usr/local/www/services_captiveportal_vouchers.php:226
+msgid "aren't allowed."
+msgstr "não são permitidas."
+
+#: usr/local/www/services_captiveportal_vouchers.php:209
+#: usr/local/www/services_captiveportal_vouchers.php:219
+#: usr/local/www/services_captiveportal_vouchers.php:228
+msgid "# of Bits to store Roll Id needs to be between 1..31."
+msgstr "# de Bits para armazenar Id da Lista precisa estar entre 1..31."
+
+#: usr/local/www/services_captiveportal_vouchers.php:211
+#: usr/local/www/services_captiveportal_vouchers.php:221
+#: usr/local/www/services_captiveportal_vouchers.php:230
+msgid "# of Bits to store Ticket Id needs to be between 1..16."
+msgstr "# de Bits para armazenar Ticket Id precisa estar entre 1..16."
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+#: usr/local/www/services_captiveportal_vouchers.php:223
+#: usr/local/www/services_captiveportal_vouchers.php:232
+msgid "# of Bits to store checksum needs to be between 1..31."
+msgstr "# de Bits para armazenar checksum precisa estar entre 1..31."
+
+#: usr/local/www/services_captiveportal_vouchers.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:225
+#: usr/local/www/services_captiveportal_vouchers.php:234
+msgid "This doesn't look like an RSA Public key."
+msgstr "Isso não parece uma chave RSA pública."
+
+#: usr/local/www/services_captiveportal_vouchers.php:217
+#: usr/local/www/services_captiveportal_vouchers.php:227
+#: usr/local/www/services_captiveportal_vouchers.php:236
+msgid "This doesn't look like an RSA Private key."
+msgstr "Isso não parece uma chave RSA privada."
+
+#: usr/local/www/services_captiveportal_vouchers.php:219
+#: usr/local/www/services_captiveportal_vouchers.php:229
+#: usr/local/www/services_captiveportal_vouchers.php:238
+msgid "You cannot sync the voucher database to this host (itself)."
+msgstr "Você não pode sincronizar o banco de dados do vouche para este host (em si)."
+
+#: usr/local/www/services_captiveportal_vouchers.php:421
+#: usr/local/www/services_captiveportal_vouchers.php:428
+#: usr/local/www/services_captiveportal_vouchers.php:441
+#: usr/local/www/services_captiveportal_vouchers.php:450
+#: usr/local/www/services_captiveportal_vouchers.php:455
+msgid "Enable Vouchers"
+msgstr "Habilitar Vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers.php:435
+#: usr/local/www/services_captiveportal_vouchers_edit.php:173
+#: usr/local/www/status_captiveportal_vouchers.php:116
+#: usr/local/www/services_captiveportal_vouchers.php:442
+#: usr/local/www/status_captiveportal_vouchers.php:117
+#: usr/local/www/services_captiveportal_vouchers.php:455
+#: usr/local/www/services_captiveportal_vouchers_edit.php:171
+#: usr/local/www/services_captiveportal_vouchers.php:464
+#: usr/local/www/status_captiveportal_vouchers.php:122
+#: usr/local/www/services_captiveportal_vouchers.php:469
+msgid "Roll"
+msgstr "Lista"
+
+#: usr/local/www/services_captiveportal_vouchers.php:436
+#: usr/local/www/status_captiveportal_voucher_rolls.php:86
+#: usr/local/www/services_captiveportal_vouchers.php:443
+#: usr/local/www/services_captiveportal_vouchers.php:456
+#: usr/local/www/status_captiveportal_voucher_rolls.php:87
+#: usr/local/www/services_captiveportal_vouchers.php:465
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:470
+msgid "Minutes/Ticket"
+msgstr "Minutos/Ticket"
+
+#: usr/local/www/services_captiveportal_vouchers.php:437
+#: usr/local/www/services_captiveportal_vouchers.php:444
+#: usr/local/www/services_captiveportal_vouchers.php:457
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:471
+msgid "of Tickets"
+msgstr "de Tickets"
+
+#: usr/local/www/services_captiveportal_vouchers.php:438
+#: usr/local/www/services_captiveportal_vouchers_edit.php:197
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+#: usr/local/www/services_captiveportal_vouchers.php:445
+#: usr/local/www/services_captiveportal_vouchers.php:458
+#: usr/local/www/services_captiveportal_vouchers_edit.php:195
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/services_captiveportal_vouchers.php:467
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/services_captiveportal_vouchers.php:472
+msgid "Comment"
+msgstr "Comentar"
+
+#: usr/local/www/services_captiveportal_vouchers.php:458
+#: usr/local/www/services_captiveportal_vouchers.php:465
+#: usr/local/www/services_captiveportal_vouchers.php:478
+#: usr/local/www/services_captiveportal_vouchers.php:487
+#: usr/local/www/services_captiveportal_vouchers.php:492
+msgid "edit voucher"
+msgstr "editar voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:479
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:493
+msgid "Do you really want to delete this voucher? This makes all vouchers from this roll invalid"
+msgstr "Você realmente deseja apagar esse voucher? Isso torna todos os vouchers dessa lista inválidos"
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+#: usr/local/www/services_captiveportal_vouchers.php:466
+#: usr/local/www/services_captiveportal_vouchers.php:479
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:493
+msgid "delete vouchers"
+msgstr "remover vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers.php:460
+#: usr/local/www/services_captiveportal_vouchers.php:467
+#: usr/local/www/services_captiveportal_vouchers.php:480
+#: usr/local/www/services_captiveportal_vouchers.php:489
+#: usr/local/www/services_captiveportal_vouchers.php:494
+msgid "generate vouchers for this roll to CSV file"
+msgstr "gerar vouchers para essa lista em arquivo CSV"
+
+#: usr/local/www/services_captiveportal_vouchers.php:470
+#: usr/local/www/services_captiveportal_vouchers.php:477
+#: usr/local/www/services_captiveportal_vouchers.php:490
+#: usr/local/www/services_captiveportal_vouchers.php:499
+#: usr/local/www/services_captiveportal_vouchers.php:504
+msgid "add voucher"
+msgstr "adicionar voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:475
+#: usr/local/www/services_captiveportal_vouchers.php:482
+#: usr/local/www/services_captiveportal_vouchers.php:495
+#: usr/local/www/services_captiveportal_vouchers.php:504
+#: usr/local/www/services_captiveportal_vouchers.php:509
+msgid "Create, generate and activate Rolls with Vouchers that allow access through the captive portal for the configured time. Once a voucher is activated, its clock is started and runs uninterrupted until it expires. During that time, the voucher can be re-used from the same or a different computer. If the voucher is used again from another computer, the previous session is stopped."
+msgstr "Crie, gere e ative Listas com Vouchers que dão permissão de acesso através do portal captive para o tempo configurado. Uma vez que um voucher for ativado, seu relório é iniciado e executa ininterruptamente até que expire. Durante esse tempo, o voucher pode ser reusado do mesmo computador ou de um diferente. Se o voucher é usado novamente por outro computador, a sessão anterior é interrompida."
+
+#: usr/local/www/services_captiveportal_vouchers.php:481
+#: usr/local/www/services_captiveportal_vouchers.php:488
+#: usr/local/www/services_captiveportal_vouchers.php:501
+#: usr/local/www/services_captiveportal_vouchers.php:510
+#: usr/local/www/services_captiveportal_vouchers.php:515
+msgid "Enable Voucher support first using the checkbox above and hit Save at the bottom."
+msgstr "Habilite suporte a Voucher usando a checkbox acima primeiro e pressione Salvar no rodapé."
+
+#: usr/local/www/services_captiveportal_vouchers.php:486
+#: usr/local/www/services_captiveportal_vouchers.php:493
+#: usr/local/www/services_captiveportal_vouchers.php:506
+#: usr/local/www/services_captiveportal_vouchers.php:515
+#: usr/local/www/services_captiveportal_vouchers.php:520
+msgid "Voucher public key"
+msgstr "Chave pública de Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:525
+msgid "Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers."
+msgstr "Cole uma chave RSA pública (64 Bit ou menor) em formato PEM aqui. Essa é a chave usada para descriptografar vouchers."
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid "Generate"
+msgstr "Gerar"
+
+#: usr/local/www/services_captiveportal_vouchers.php:491
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:511
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:520
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid "new key"
+msgstr "nova chave"
+
+#: usr/local/www/services_captiveportal_vouchers.php:494
+#: usr/local/www/services_captiveportal_vouchers.php:501
+#: usr/local/www/services_captiveportal_vouchers.php:514
+#: usr/local/www/services_captiveportal_vouchers.php:523
+#: usr/local/www/services_captiveportal_vouchers.php:528
+msgid "Voucher private key"
+msgstr "Chave privada de Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:498
+#: usr/local/www/services_captiveportal_vouchers.php:505
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:527
+#: usr/local/www/services_captiveportal_vouchers.php:532
+msgid "Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline."
+msgstr "Cole uma chave RSA privada (64 Bit ou menor) no formato PEM aqui. Essa chave somente é usada para gerar vouchers criptografados e não precisa estar disponível se os vouchers foram gerados fora do ar."
+
+#: usr/local/www/services_captiveportal_vouchers.php:502
+#: usr/local/www/services_captiveportal_vouchers.php:509
+#: usr/local/www/services_captiveportal_vouchers.php:522
+#: usr/local/www/services_captiveportal_vouchers.php:531
+#: usr/local/www/services_captiveportal_vouchers.php:536
+msgid "Character set"
+msgstr "Conjunto de caracteres"
+
+#: usr/local/www/services_captiveportal_vouchers.php:506
+#: usr/local/www/services_captiveportal_vouchers.php:513
+#: usr/local/www/services_captiveportal_vouchers.php:526
+#: usr/local/www/services_captiveportal_vouchers.php:535
+#: usr/local/www/services_captiveportal_vouchers.php:540
+msgid "Tickets are generated with the specified character set. It should contain printable characters (numbers, lower case and upper case letters) that are hard to confuse with others. Avoid e.g. 0/O and l/1."
+msgstr "Tickets são gerados com um específico conjunto de caracteres. Ele deve conter caracteres passíveis de impressão (números, letras maiúsculas e minúsculas) que são difíceis de serem confundidas com outras. Evite e.g. 0/O e l/1."
+
+#: usr/local/www/services_captiveportal_vouchers.php:510
+#: usr/local/www/services_captiveportal_vouchers.php:517
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:539
+#: usr/local/www/services_captiveportal_vouchers.php:544
+msgid "of Roll Bits"
+msgstr "de Bits de Lista"
+
+#: usr/local/www/services_captiveportal_vouchers.php:514
+#: usr/local/www/services_captiveportal_vouchers.php:521
+#: usr/local/www/services_captiveportal_vouchers.php:534
+#: usr/local/www/services_captiveportal_vouchers.php:543
+#: usr/local/www/services_captiveportal_vouchers.php:548
+msgid "Reserves a range in each voucher to store the Roll # it belongs to. Allowed range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the RSA key size."
+msgstr "Reserva um intervalo em cada voucher para armazenar o # da Lista que ele pertence. O intervalo permitido: 1..31. Soma dos bits de Lista+Ticket+Checksum deve ser um Bit menor que o tamanho da chave RSA."
+
+#: usr/local/www/services_captiveportal_vouchers.php:518
+#: usr/local/www/services_captiveportal_vouchers.php:525
+#: usr/local/www/services_captiveportal_vouchers.php:538
+#: usr/local/www/services_captiveportal_vouchers.php:547
+#: usr/local/www/services_captiveportal_vouchers.php:552
+msgid "of Ticket Bits"
+msgstr "de Ticket Bits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:522
+#: usr/local/www/services_captiveportal_vouchers.php:529
+#: usr/local/www/services_captiveportal_vouchers.php:542
+#: usr/local/www/services_captiveportal_vouchers.php:551
+#: usr/local/www/services_captiveportal_vouchers.php:556
+msgid "Reserves a range in each voucher to store the Ticket# it belongs to. Allowed range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A bit array, stored in RAM and in the config, is used to mark if a voucher has been used. A bit array for 65535 vouchers requires 8 KB of storage."
+msgstr "Reserva um intervalo em cada voucher para armazenar o # de Ticket ao qual pertence. O intervalo permitido: 1..16. Usando 16 bits permite que uma lista tenha até 65535 vouchers. uma cadeia de bits, armazenada na RAM e na configuração, é usado para marcar se um voucher foi usado. A cadeia de bits para 65535 vouchers requer 8 KB de espaço de armazenamento."
+
+#: usr/local/www/services_captiveportal_vouchers.php:526
+#: usr/local/www/services_captiveportal_vouchers.php:533
+#: usr/local/www/services_captiveportal_vouchers.php:546
+#: usr/local/www/services_captiveportal_vouchers.php:555
+#: usr/local/www/services_captiveportal_vouchers.php:560
+msgid "of Checksum Bits"
+msgstr "de Checksum Bits"
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+#: usr/local/www/services_captiveportal_vouchers.php:550
+#: usr/local/www/services_captiveportal_vouchers.php:559
+#: usr/local/www/services_captiveportal_vouchers.php:564
+msgid "Reserves a range in each voucher to store a simple checksum over Roll # and Ticket#. Allowed range is 0..31."
+msgstr "Reserva um intervalo em cada voucher para armazenar um checksum simples sobre o # da Lista e # de Ticket. O intervalo válido é 0..31."
+
+#: usr/local/www/services_captiveportal_vouchers.php:534
+#: usr/local/www/services_captiveportal_vouchers.php:541
+#: usr/local/www/services_captiveportal_vouchers.php:554
+#: usr/local/www/services_captiveportal_vouchers.php:563
+#: usr/local/www/services_captiveportal_vouchers.php:568
+msgid "Magic Number"
+msgstr "Número mágico"
+
+#: usr/local/www/services_captiveportal_vouchers.php:538
+#: usr/local/www/services_captiveportal_vouchers.php:545
+#: usr/local/www/services_captiveportal_vouchers.php:558
+#: usr/local/www/services_captiveportal_vouchers.php:567
+#: usr/local/www/services_captiveportal_vouchers.php:572
+msgid "Magic number stored in every voucher. Verified during voucher check. Size depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits are used, no magic number will be used and checked."
+msgstr "Número mágico armazenado em cada voucher. Verificado durante a verificação do voucher. O tamanho depende de quantos bits são deixados pelos bits Lista+Ticket+Checksum. Se todos os bits são usados, nenhum número mágico será usado e verificado."
+
+#: usr/local/www/services_captiveportal_vouchers.php:542
+#: usr/local/www/services_captiveportal_vouchers.php:549
+#: usr/local/www/services_captiveportal_vouchers.php:562
+#: usr/local/www/services_captiveportal_vouchers.php:571
+#: usr/local/www/services_captiveportal_vouchers.php:576
+msgid "Invalid Voucher Message"
+msgstr "Mensagem de Voucher Inválido"
+
+#: usr/local/www/services_captiveportal_vouchers.php:545
+#: usr/local/www/services_captiveportal_vouchers.php:552
+#: usr/local/www/services_captiveportal_vouchers.php:565
+#: usr/local/www/services_captiveportal_vouchers.php:574
+#: usr/local/www/services_captiveportal_vouchers.php:579
+msgid "Error message displayed for invalid vouchers on captive portal error page"
+msgstr "Mensagem de erro exibida para vouchers inválidos na página de erro do portal captive"
+
+#: usr/local/www/services_captiveportal_vouchers.php:549
+#: usr/local/www/services_captiveportal_vouchers.php:556
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:578
+#: usr/local/www/services_captiveportal_vouchers.php:583
+msgid "Expired Voucher Message"
+msgstr "Mensagem de Voucher Expirado"
+
+#: usr/local/www/services_captiveportal_vouchers.php:552
+#: usr/local/www/services_captiveportal_vouchers.php:559
+#: usr/local/www/services_captiveportal_vouchers.php:572
+#: usr/local/www/services_captiveportal_vouchers.php:581
+#: usr/local/www/services_captiveportal_vouchers.php:586
+msgid "Error message displayed for expired vouchers on captive portal error page"
+msgstr "Mensagem de erro exibida para vouchers expirados na página de erro do portal captive"
+
+#: usr/local/www/services_captiveportal_vouchers.php:562
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:582
+#: usr/local/www/services_captiveportal_vouchers.php:591
+#: usr/local/www/services_captiveportal_vouchers.php:596
+msgid "Voucher database synchronization"
+msgstr "Sincronização de base de dados de Vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers.php:568
+#: usr/local/www/services_captiveportal_vouchers.php:575
+#: usr/local/www/services_captiveportal_vouchers.php:588
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers.php:602
+msgid "IP address of master nodes webConfigurator to synchronize voucher database and used vouchers from."
+msgstr "Endereço IP do master nodes webConfigurator para sincronizar base de dados de voucher e vouchers usados."
+
+#: usr/local/www/services_captiveportal_vouchers.php:569
+#: usr/local/www/services_captiveportal_vouchers.php:576
+#: usr/local/www/services_captiveportal_vouchers.php:589
+#: usr/local/www/services_captiveportal_vouchers.php:598
+#: usr/local/www/services_captiveportal_vouchers.php:603
+msgid "NOTE: this should be setup on the slave nodes and not the primary node!"
+msgstr "NOTA: Isso deve ser configurado nos nodes secundarios e não nos primarios!"
+
+#: usr/local/www/services_captiveportal_vouchers.php:573
+#: usr/local/www/services_captiveportal_vouchers.php:580
+#: usr/local/www/services_captiveportal_vouchers.php:593
+#: usr/local/www/services_captiveportal_vouchers.php:602
+#: usr/local/www/services_captiveportal_vouchers.php:607
+msgid "Voucher sync port"
+msgstr "Porta de sincronização do Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:576
+#: usr/local/www/services_captiveportal_vouchers.php:583
+#: usr/local/www/services_captiveportal_vouchers.php:596
+#: usr/local/www/services_captiveportal_vouchers.php:605
+#: usr/local/www/services_captiveportal_vouchers.php:610
+msgid "This is the port of the master voucher nodes webConfigurator. Example: 443"
+msgstr "Essa é a porta do master voucher nodes webConfigurator. Exemplo: 443"
+
+#: usr/local/www/services_captiveportal_vouchers.php:580
+#: usr/local/www/services_captiveportal_vouchers.php:587
+#: usr/local/www/services_captiveportal_vouchers.php:600
+#: usr/local/www/services_captiveportal_vouchers.php:609
+#: usr/local/www/services_captiveportal_vouchers.php:614
+msgid "Voucher sync username"
+msgstr "Nome de usuário de sincronização do Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:583
+#: usr/local/www/services_captiveportal_vouchers.php:590
+#: usr/local/www/services_captiveportal_vouchers.php:603
+#: usr/local/www/services_captiveportal_vouchers.php:612
+#: usr/local/www/services_captiveportal_vouchers.php:617
+msgid "This is the username of the master voucher nodes webConfigurator."
+msgstr "Esse é o nome de usuário do master voucher nodes webConfigurator."
+
+#: usr/local/www/services_captiveportal_vouchers.php:587
+#: usr/local/www/services_captiveportal_vouchers.php:594
+#: usr/local/www/services_captiveportal_vouchers.php:607
+#: usr/local/www/services_captiveportal_vouchers.php:616
+#: usr/local/www/services_captiveportal_vouchers.php:621
+msgid "Voucher sync password"
+msgstr "Senha de sincronização do Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers.php:590
+#: usr/local/www/services_captiveportal_vouchers.php:597
+#: usr/local/www/services_captiveportal_vouchers.php:610
+#: usr/local/www/services_captiveportal_vouchers.php:619
+#: usr/local/www/services_captiveportal_vouchers.php:624
+msgid "This is the password of the master voucher nodes webConfigurator."
+msgstr "Esse é a senha do master voucher nodes webConfigurator."
+
+#: usr/local/www/services_captiveportal_vouchers.php:604
+#: usr/local/www/services_captiveportal_vouchers.php:611
+#: usr/local/www/services_captiveportal_vouchers.php:625
+#: usr/local/www/services_captiveportal_vouchers.php:634
+#: usr/local/www/services_captiveportal_vouchers.php:639
+msgid "Changing any Voucher parameter (apart from managing the list of Rolls) on this page will render existing vouchers useless if they were generated with different settings."
+msgstr "Ao mudar qualquer parâmetro de Voucher (além de gerenciar a lista de Listas) nessa página irá tornar inúteis os vouchers existentes se eles foram gerados com configurações diferentes."
+
+#: usr/local/www/services_captiveportal_vouchers.php:606
+#: usr/local/www/services_captiveportal_vouchers.php:613
+#: usr/local/www/services_captiveportal_vouchers.php:627
+#: usr/local/www/services_captiveportal_vouchers.php:636
+#: usr/local/www/services_captiveportal_vouchers.php:641
+msgid "Specifying the Voucher Database Synchronization options will not record any other value from the other options. They will be retrieved/synced from the master."
+msgstr "Especificando a opção Voucher Database Synchronization não grava qualquer outro valor das demais opções. Eles serão recuperados / sincronizados a partir do master."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:48
+#: usr/local/www/services_captiveportal_vouchers_edit.php:45
+msgid "Edit Voucher Rolls"
+msgstr "Editar Listad de Voucher"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:101
+#: usr/local/www/services_captiveportal_vouchers_edit.php:99
+#, php-format
+msgid "Roll number %s already exists."
+msgstr "Número de lista %s já existe."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:107
+#: usr/local/www/services_captiveportal_vouchers_edit.php:105
+#, php-format
+msgid "Roll number must be numeric and less than %s"
+msgstr "Número de lista deve ser numérico e menor que %s"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:110
+#: usr/local/www/services_captiveportal_vouchers_edit.php:108
+#, php-format
+msgid "A roll has at least one voucher and less than %s."
+msgstr "Uma lista tem no mínimo um voucher e menos que %s."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:113
+#: usr/local/www/services_captiveportal_vouchers_edit.php:111
+msgid "Each voucher must be good for at least 1 minute."
+msgstr "Cada voucher deve ser bom por pelo menos 1 minuto."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:134
+#: usr/local/www/services_captiveportal_vouchers_edit.php:132
+#, php-format
+msgid "All %1$s vouchers from Roll %2$s marked unused"
+msgstr "Todos %1$s vouchers da Lista %2$s são marcados como não usados"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:177
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+msgid "Enter the Roll"
+msgstr "Informe a Lista"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:177
+#: usr/local/www/services_captiveportal_vouchers_edit.php:175
+msgid "found on top of the generated/printed vouchers"
+msgstr "encontrado no topo dos vouchers gerados/impressos"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:181
+#: usr/local/www/services_captiveportal_vouchers_edit.php:179
+msgid "Minutes per Ticket"
+msgstr "Minutos por Ticket"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:185
+#: usr/local/www/services_captiveportal_vouchers_edit.php:183
+msgid "Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication"
+msgstr "Define o tempo em minutos que um usuário tem permissão de acesso. O relógio inicia a contagem a primeira vez que um voucher é usado para autenticação"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:193
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+msgid "Enter the number of vouchers"
+msgstr "Informe o número de vouchers"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:193
+#: usr/local/www/services_captiveportal_vouchers_edit.php:191
+msgid "found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again"
+msgstr "encontrado no topo de vouchers gerados/impressos. AVISO: Mudando esse número para uma Lista existente irá marcar todos os vouchers como não usados novamente"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:201
+#: usr/local/www/services_captiveportal_vouchers_edit.php:199
+msgid "Can be used to further identify this roll. Ignored by the system"
+msgstr "Pode ser usado para identificação adicional dessa lista. Ignorado pelo sistema"
+
+#: usr/local/www/diag_resetstate.php:54
+msgid "The state table has been flushed successfully."
+msgstr "A tabela de estado foi limpa com sucesso."
+
+#: usr/local/www/diag_resetstate.php:60
+msgid "The source tracking table has been flushed successfully."
+msgstr "A tabela de rastreamento de origem foi limpa com sucesso."
+
+#: usr/local/www/diag_resetstate.php:64
+msgid "Reset state"
+msgstr "Reiniviar estado"
+
+#: usr/local/www/diag_resetstate.php:91
+msgid "Firewall state table"
+msgstr "Tabela de conexões do firewall"
+
+#: usr/local/www/diag_resetstate.php:93
+msgid "Resetting the state tables will remove all entries from the corresponding tables. This means that all open connections will be broken and will have to be re-established. This may be necessary after making substantial changes to the firewall and/or NAT rules, especially if there are IP protocol mappings (e.g. for PPTP or IPv6) with open connections."
+msgstr "Reiniciando as conexões da tabela irá remover todas as entradas correspondentes das tabelas. Isto significa que todas as conexões em aberto serão fechadas e serão reestabelecidas. Isto pode ser necessário após mudanças consideráveis ao firewall e/ou regras de NAT, especialmente se há mapeamentos do protocolo IP (e.g. PPTP ou IPv6) com conexões abertas."
+
+#: usr/local/www/diag_resetstate.php:100
+msgid "The firewall will normally leave the state tables intact when changing rules."
+msgstr "O firewall normalmente deixará a tabela de conexões intacta quando as regras mudarem."
+
+#: usr/local/www/diag_resetstate.php:103
+msgid "NOTE: If you reset the firewall state table, the browser session may appear to be hung after clicking &quot;Reset&quot;. Simply refresh the page to continue."
+msgstr "NOTA: Se você reiniciar a tabela de estado do firewall, a sessão do browser pode parecer expirada após clicar em &quot;Reiniciar&quot;. Simplemente atualize a página para continuar."
+
+#: usr/local/www/diag_resetstate.php:113
+msgid "Firewall Source Tracking"
+msgstr "Rastreamento de origem do Firewall"
+
+#: usr/local/www/diag_resetstate.php:115
+msgid "Resetting the source tracking table will remove all source/destination associations. This means that the \"sticky\" source/destination association will be cleared for all clients."
+msgstr "Reiniciar a tabela de rastreamento de origem irá remover todas as associações de origem/destino. Isto significa que as associações persistentes serão limpas para todos os clientes."
+
+#: usr/local/www/diag_resetstate.php:119
+msgid "This does not clear active connection states, only source tracking."
+msgstr "Isto não limpa estados de conexões ativas, apenas o rastreamento de origem."
+
+#: usr/local/www/diag_resetstate.php:127 usr/local/www/status_lb_pool.php:218
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: usr/local/www/status_filter_reload.php:44
+msgid "Filter Reload Status"
+msgstr "Status do Filtro"
+
+#: usr/local/www/status_filter_reload.php:88
+#: usr/local/www/status_filter_reload.php:89
+msgid "This page will automatically refresh every 3 seconds until the filter is done reloading"
+msgstr "Essa página irá atualizar-se automaticamente a cada 3 segundos até que o filtro tenha recarregado"
+
+#: usr/local/www/diag_routes.php:45
+msgid "Routing tables"
+msgstr "Tabela de roteamento"
+
+#: usr/local/www/diag_routes.php:58 usr/local/www/diag_routes.php:59
+msgid "Name resolution"
+msgstr "Resolução de nomes"
+
+#: usr/local/www/diag_routes.php:62 usr/local/www/diag_routes.php:63
+msgid "Enable this to attempt to resolve names when displaying the tables."
+msgstr "Habilitar isto para tentar resolver nomes quando visualizar a tabela de estados."
+
+#: usr/local/www/diag_routes.php:69 usr/local/www/diag_routes.php:70
+msgid "Show"
+msgstr "Mostrar"
+
+#: usr/local/www/diag_routes.php:72
+msgid "By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser"
+msgstr "Ao permitir a resolução de nomes, a consulta deve demorar um pouco. Você pode parar a qualquer momento, clicando no botão Pare no seu navegador"
+
+#: usr/local/www/diag_traceroute.php:62 usr/local/www/diag_traceroute.php:63
+msgid "ttl"
+msgstr "ttl"
+
+#: usr/local/www/diag_traceroute.php:66 usr/local/www/diag_traceroute.php:67
+#, php-format
+msgid "Maximum number of hops must be between 1 and %s"
+msgstr "Número máximo de saltos deve estar entre 1 e %s"
+
+#: usr/local/www/diag_traceroute.php:94 usr/local/www/diag_traceroute.php:112
+#: usr/local/www/diag_traceroute.php:131
+msgid "Maximum number of hops"
+msgstr "Número máximo de saltos"
+
+#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_traceroute.php:128
+#: usr/local/www/diag_traceroute.php:147
+msgid "Use ICMP"
+msgstr "Usar ICMP"
+
+#: usr/local/www/diag_traceroute.php:117 usr/local/www/diag_traceroute.php:141
+#: usr/local/www/diag_traceroute.php:162
+msgid "Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes."
+msgstr "Traceroute pode demorar um pouco para ser concluído. Você pode pressionar o botão de parada em seu navegador a qualquer hora para ver o andamento das falhas dos traceroutes."
+
+#: usr/local/www/diag_traceroute.php:120 usr/local/www/diag_traceroute.php:144
+#: usr/local/www/diag_traceroute.php:173
+msgid "Traceroute output:"
+msgstr "Saída de traceroute:"
+
+#: usr/local/www/diag_traceroute.php:137
+msgid "Multi-wan is not supported from this utility currently."
+msgstr "Este utilitário não suporta Multi-wan atualmente."
+
+#: usr/local/www/status_graph.php:85 usr/local/www/fbegin.inc:173
+#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:199
+#: usr/local/www/status_graph.php:90 usr/local/www/status_graph.php:101
+#: usr/local/www/fbegin.inc:190 usr/local/www/status_graph.php:111
+msgid "Traffic Graph"
+msgstr "Gráfico de tráfego"
+
+#: usr/local/www/status_graph.php:197
+msgid "Your browser does not support the type SVG! You need to either use Firefox or download the Adobe SVG plugin"
+msgstr "Seu browser não suporta o tipo SVG! Você precisa usar o Firefox ou fazer download do plugin do Adobe SVG"
+
+#: usr/local/www/status_graph.php:203 usr/local/www/status_graph.php:198
+#: usr/local/www/status_graph.php:209 usr/local/www/status_graph.php:220
+#: usr/local/www/status_graph.php:242
+msgid "Host IP"
+msgstr "IP do Host"
+
+#: usr/local/www/status_graph.php:204 usr/local/www/status_graph.php:199
+#: usr/local/www/status_graph.php:210 usr/local/www/status_graph.php:221
+#: usr/local/www/status_graph.php:243
+msgid "Bandwidth In"
+msgstr "Tamanho de banda de entrada"
+
+#: usr/local/www/status_graph.php:205 usr/local/www/status_graph.php:200
+#: usr/local/www/status_graph.php:211 usr/local/www/status_graph.php:222
+#: usr/local/www/status_graph.php:244
+msgid "Bandwidth Out"
+msgstr "Tamanho de banda de saída"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330
+msgid "the"
+msgstr "o"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330
+msgid "Adobe SVG Viewer"
+msgstr "Visualizador Adobe SVG"
+
+#: usr/local/www/status_graph.php:291 usr/local/www/status_graph.php:286
+#: usr/local/www/status_graph.php:297 usr/local/www/status_graph.php:308
+#: usr/local/www/status_graph.php:330
+msgid "Firefox 1.5 or later or other browser supporting SVG is required to view the graph"
+msgstr "Firefox 1.5 ou versão mais recente ou outro browser que suporte SVG é requerido para visualizar o gráfico"
+
+#: usr/local/www/carp_status.php:71 usr/local/www/carp_status.php:67
+#, php-format
+msgid "%s IPs have been disabled. Please note that disabling does not survive a reboot and some configuration changes will re-enable."
+msgstr "%s IPs foram desabilitados. Por favor, estas alterações não estarão disponíveis no próximo boot."
+
+#: usr/local/www/carp_status.php:73 usr/local/www/carp_status.php:69
+msgid "CARP has been enabled."
+msgstr "CARP foi habilitado."
+
+#: usr/local/www/carp_status.php:127 usr/local/www/carp_status.php:120
+msgid "Enable Carp"
+msgstr "Habilitar CARP"
+
+#: usr/local/www/carp_status.php:130 usr/local/www/carp_status.php:123
+msgid "Disable Carp"
+msgstr "Desabilitar CARP"
+
+#: usr/local/www/carp_status.php:138 usr/local/www/carp_status.php:131
+msgid "CARP Interface"
+msgstr "Interface CARP"
+
+#: usr/local/www/carp_status.php:144 usr/local/www/carp_status.php:137
+msgid "Could not locate any defined CARP interfaces."
+msgstr "Não foi possível localizar interfaces CARP definidas."
+
+#: usr/local/www/carp_status.php:196
+msgid "You can configure CARP settings"
+msgstr "Você pode definir as configurações CARP"
+
+#: usr/local/www/carp_status.php:202 usr/local/www/carp_status.php:195
+msgid "pfSync nodes"
+msgstr "Nós pfSync"
+
+#: usr/local/www/status_interfaces.php:81
+#: usr/local/www/status_interfaces.php:84
+msgid "interface"
+msgstr "interface"
+
+#: usr/local/www/status_interfaces.php:99
+#: usr/local/www/status_interfaces.php:117
+#: usr/local/www/status_interfaces.php:102
+#: usr/local/www/status_interfaces.php:120
+msgid "Release"
+msgstr "Lançamento"
+
+#: usr/local/www/status_interfaces.php:102
+#: usr/local/www/status_interfaces.php:120
+#: usr/local/www/status_interfaces.php:105
+#: usr/local/www/status_interfaces.php:123
+msgid "Renew"
+msgstr "Renovar"
+
+#: usr/local/www/status_interfaces.php:117
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:147
+#: usr/local/www/status_interfaces.php:163
+#: usr/local/www/status_interfaces.php:135
+#: usr/local/www/status_interfaces.php:150
+#: usr/local/www/status_interfaces.php:165
+#: usr/local/www/status_interfaces.php:181
+#: usr/local/www/status_interfaces.php:138
+#: usr/local/www/status_interfaces.php:153
+#: usr/local/www/status_interfaces.php:168
+#: usr/local/www/status_interfaces.php:184
+msgid "Connect"
+msgstr "Conectar"
+
+#: usr/local/www/status_interfaces.php:171
+#: usr/local/www/status_interfaces.php:189
+#: usr/local/www/status_interfaces.php:192
+msgid "Uptime "
+msgstr "Uptime"
+
+#: usr/local/www/status_interfaces.php:200
+#: usr/local/www/status_interfaces.php:274
+#: usr/local/www/status_interfaces.php:277
+msgid "Subnet mask IPv4"
+msgstr "Máscara de Subrede IPv4"
+
+#: usr/local/www/status_interfaces.php:207
+#: usr/local/www/status_interfaces.php:281
+#: usr/local/www/status_interfaces.php:284
+msgid "Gateway IPv4"
+msgstr "Gateway IPv4"
+
+#: usr/local/www/status_interfaces.php:224
+#: usr/local/www/status_interfaces.php:305
+#: usr/local/www/status_interfaces.php:308
+msgid "Subnet mask IPv6"
+msgstr "Máscara de Subrede IPv6"
+
+#: usr/local/www/status_interfaces.php:239
+#: usr/local/www/status_interfaces.php:320
+#: usr/local/www/status_interfaces.php:323
+msgid "ISP DNS servers"
+msgstr "Servidores DNS ISP"
+
+#: usr/local/www/status_interfaces.php:251
+#: usr/local/www/status_interfaces.php:332
+#: usr/local/www/status_interfaces.php:335
+msgid "Media"
+msgstr "Media"
+
+#: usr/local/www/status_interfaces.php:272
+#: usr/local/www/status_interfaces.php:369
+#: usr/local/www/status_interfaces.php:372
+msgid "BSSID"
+msgstr "BSSID"
+
+#: usr/local/www/status_interfaces.php:279
+#: usr/local/www/diag_dump_states_sources.php:148
+#: usr/local/www/status_interfaces.php:376
+#: usr/local/www/status_interfaces.php:379
+#: usr/local/www/diag_dump_states_sources.php:147
+#: usr/local/www/diag_system_pftop.php:158
+msgid "Rate"
+msgstr "Taxa"
+
+#: usr/local/www/status_interfaces.php:286
+#: usr/local/www/status_interfaces.php:383
+#: usr/local/www/status_interfaces.php:386
+msgid "RSSI"
+msgstr "RSSI"
+
+#: usr/local/www/status_interfaces.php:293
+#: usr/local/www/status_interfaces.php:390
+#: usr/local/www/status_interfaces.php:393
+msgid "In/out packets"
+msgstr "Pacotes de entrada/saída"
+
+#: usr/local/www/status_interfaces.php:302
+#: usr/local/www/status_interfaces.php:399
+#: usr/local/www/status_interfaces.php:402
+msgid "In/out packets (pass)"
+msgstr "Pacotes de entrada/saída (liberados)"
+
+#: usr/local/www/status_interfaces.php:311
+#: usr/local/www/status_interfaces.php:408
+#: usr/local/www/status_interfaces.php:411
+msgid "In/out packets (block)"
+msgstr "Pacotes de entrada/saída (bloqueados)"
+
+#: usr/local/www/status_interfaces.php:321
+#: usr/local/www/status_interfaces.php:418
+#: usr/local/www/status_interfaces.php:421
+msgid "In/out errors"
+msgstr "Erros de entrada/saída "
+
+#: usr/local/www/status_interfaces.php:329
+#: usr/local/www/status_interfaces.php:426
+#: usr/local/www/status_interfaces.php:429
+msgid "Collisions"
+msgstr "Colisões"
+
+#: usr/local/www/status_interfaces.php:338
+#: usr/local/www/status_interfaces.php:435
+#: usr/local/www/status_interfaces.php:438
+#, php-format
+msgid "Bridge (%s)"
+msgstr "Ponte (%s)"
+
+#: usr/local/www/status_interfaces.php:360
+#: usr/local/www/status_interfaces.php:457
+#: usr/local/www/status_interfaces.php:460
+msgid "Interrupts/Second"
+msgstr "Interrupções/Segundo"
+
+#: usr/local/www/status_interfaces.php:363
+#: usr/local/www/status_interfaces.php:460
+#: usr/local/www/status_interfaces.php:463
+msgid "total"
+msgstr "total"
+
+#: usr/local/www/status_interfaces.php:376
+#: usr/local/www/status_interfaces.php:473
+#: usr/local/www/status_interfaces.php:476
+#, php-format
+msgid "Using dial-on-demand will bring the connection up again if any packet triggers it. To substantiate this point: disconnecting manually will %snot%s prevent dial-on-demand from making connections to the outside! Don't use dial-on-demand if you want to make sure that the line is kept disconnected."
+msgstr "Usar a discagem sob demanda irá levantar a conexão novamente se algum pacote a engatilhar. Para fundamentar esse ponto: desconectar manualmente %snão%s irá prevenir discagem sob demanda de fazer conexões externas! Não use discagem sob demanda se quiser ter certeza de que a linha se manterá desconectada."
+
+#: usr/local/www/exec.php:91 usr/local/www/exec.php:93
+msgid "Execute command"
+msgstr "Executar comando"
+
+#: usr/local/www/exec.php:153 usr/local/www/exec.php:155
+msgid "Nothing to recall"
+msgstr "Nada para lembrar"
+
+#: usr/local/www/exec.php:222 usr/local/www/exec.php:224
+msgid "Note: this function is unsupported. Use it on your own risk"
+msgstr "Nota: Esta função não é suportada. Use-a sob seu próprio risco"
+
+#: usr/local/www/exec.php:253 usr/local/www/exec.php:255
+msgid "Execute Shell command"
+msgstr "Executar comando Shell"
+
+#: usr/local/www/exec.php:256 usr/local/www/exec.php:309
+#: usr/local/www/exec.php:258 usr/local/www/exec.php:311
+msgid "Command"
+msgstr "Comando"
+
+#: usr/local/www/exec.php:264 usr/local/www/exec.php:315
+#: usr/local/www/exec.php:266 usr/local/www/exec.php:317
+msgid "Execute"
+msgstr "Executar"
+
+#: usr/local/www/exec.php:266 usr/local/www/status_upnp.php:77
+#: usr/local/www/exec.php:268 usr/local/www/status_upnp.php:78
+msgid "Clear"
+msgstr "Limpar"
+
+#: usr/local/www/exec.php:276 usr/local/www/exec.php:278
+msgid "File to download"
+msgstr "Arquivo para download"
+
+#: usr/local/www/exec.php:293 usr/local/www/exec.php:295
+msgid "File to upload"
+msgstr "Arquivo para carregar"
+
+#: usr/local/www/exec.php:306 usr/local/www/exec.php:308
+msgid "PHP Execute"
+msgstr "Executar PHP"
+
+#: usr/local/www/exec.php:317 usr/local/www/exec.php:319
+msgid "Example"
+msgstr "Exemplo"
+
+#: usr/local/www/exec_raw.php:47
+msgid "Nothing specified. Cannot continue."
+msgstr "Nada especificado. Não pode continuar."
+
+#: usr/local/www/fbegin.inc:88 usr/local/www/fbegin.inc:105
+#: usr/local/www/fbegin.inc:114 usr/local/www/fbegin.inc:106
+msgid "Packages"
+msgstr "Pacotes"
+
+#: usr/local/www/fbegin.inc:89 usr/local/www/fbegin.inc:106
+#: usr/local/www/fbegin.inc:115 usr/local/www/fbegin.inc:107
+msgid "Setup Wizard"
+msgstr "Wizard Config"
+
+#: usr/local/www/fbegin.inc:90 usr/local/www/diag_logs_routing.php:54
+#: usr/local/www/diag_logs_routing.php:84 usr/local/www/fbegin.inc:107
+#: usr/local/www/diag_logs_resolver.php:98 usr/local/www/diag_logs.php:97
+#: usr/local/www/diag_logs_wireless.php:86
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/diag_logs_routing.php:85 usr/local/www/fbegin.inc:116
+#: usr/local/www/diag_logs_resolver.php:99
+#: usr/local/www/diag_logs_wireless.php:87
+#: usr/local/www/diag_logs_gateways.php:99 usr/local/www/fbegin.inc:108
+msgid "Routing"
+msgstr "Roteamento"
+
+#: usr/local/www/fbegin.inc:91 usr/local/www/fbegin.inc:108
+#: usr/local/www/fbegin.inc:117 usr/local/www/fbegin.inc:109
+msgid "Cert Manager"
+msgstr "Ger. de certificados"
+
+#: usr/local/www/fbegin.inc:123 usr/local/www/services_dhcpv6_relay.php:101
+#: usr/local/www/fbegin.inc:140 usr/local/www/fbegin.inc:149
+#: usr/local/www/fbegin.inc:141 etc/inc/service-utils.inc:296
+msgid "DHCPv6 Relay"
+msgstr "DHCPv6 Relay"
+
+#: usr/local/www/fbegin.inc:126 usr/local/www/fbegin.inc:143
+#: usr/local/www/services_dhcpv6.php:581
+#: usr/local/www/services_router_advertisements.php:260
+#: usr/local/www/services_dhcpv6.php:502 usr/local/www/services_dhcpv6.php:512
+#: usr/local/www/services_dhcpv6.php:513 usr/local/www/services_dhcpv6.php:523
+#: usr/local/www/services_router_advertisements.php:255
+#: usr/local/www/diag_backup.php:185
+msgid "DHCPv6 Server"
+msgstr "Servidor DHCPv6"
+
+#: usr/local/www/fbegin.inc:129 usr/local/www/status_services.php:316
+#: usr/local/www/widgets/widgets/services_status.widget.php:121
+#: usr/local/www/fbegin.inc:146 etc/inc/service-utils.inc:299
+#: usr/local/www/fbegin.inc:155 usr/local/www/fbegin.inc:147
+#: etc/inc/service-utils.inc:298 etc/inc/service-utils.inc:315
+#: etc/inc/service-utils.inc:317
+msgid "IGMP proxy"
+msgstr "Proxy IGMP"
+
+#: usr/local/www/fbegin.inc:131 usr/local/www/fbegin.inc:149
+msgid "OLSR"
+msgstr "OLSR"
+
+#: usr/local/www/fbegin.inc:132 usr/local/www/vpn_pppoe_edit.php:234
+#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:158
+#: usr/local/www/vpn_pppoe_edit.php:237
+msgid "PPPoE Server"
+msgstr "Servidor PPPoE"
+
+#: usr/local/www/fbegin.inc:133 usr/local/www/fbegin.inc:151
+#: usr/local/www/fbegin.inc:159
+msgid "RIP"
+msgstr "RIP"
+
+#: usr/local/www/fbegin.inc:139 usr/local/www/fbegin.inc:175
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193
+#: usr/local/www/fbegin.inc:165 usr/local/www/fbegin.inc:201
+#: usr/local/www/fbegin.inc:156 usr/local/www/fbegin.inc:192
+msgid "UPnP &amp; NAT-PMP"
+msgstr "UPnP &amp; NAT-PMP"
+
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:174
+#: usr/local/www/fbegin.inc:182 usr/local/www/fbegin.inc:173
+msgid "CARP (failover)"
+msgstr "CARP (failover)"
+
+#: usr/local/www/fbegin.inc:158 usr/local/www/fbegin.inc:175
+#: usr/local/www/fbegin.inc:183 usr/local/www/fbegin.inc:174
+msgid "Dashboard"
+msgstr "Dashboard"
+
+#: usr/local/www/fbegin.inc:160 usr/local/www/fbegin.inc:177
+#: usr/local/www/fbegin.inc:185 usr/local/www/fbegin.inc:176
+msgid "DHCP Leases"
+msgstr "Concessões DHCP"
+
+#: usr/local/www/fbegin.inc:161 usr/local/www/fbegin.inc:178
+#: usr/local/www/fbegin.inc:186 usr/local/www/fbegin.inc:177
+msgid "DHCPv6 Leases"
+msgstr "Concessões DHCPv6"
+
+#: usr/local/www/fbegin.inc:162 usr/local/www/fbegin.inc:179
+#: usr/local/www/fbegin.inc:187 usr/local/www/fbegin.inc:178
+msgid "Filter Reload"
+msgstr "Recarregar Filtro"
+
+#: usr/local/www/fbegin.inc:168 usr/local/www/fbegin.inc:186
+#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:185
+msgid "Package Logs"
+msgstr "Logs de pacotes"
+
+#: usr/local/www/fbegin.inc:169 usr/local/www/status_queues.php:98
+#: usr/local/www/status_rrd_graph.php:338
+#: usr/local/www/status_rrd_graph_settings.php:57
+#: usr/local/www/status_rrd_graph_settings.php:137
+#: usr/local/www/fbegin.inc:187
+#: usr/local/www/status_rrd_graph_settings.php:138
+#: usr/local/www/status_queues.php:101 usr/local/www/status_rrd_graph.php:386
+#: usr/local/www/fbegin.inc:195 usr/local/www/status_rrd_graph.php:411
+#: usr/local/www/status_queues.php:109 usr/local/www/fbegin.inc:186
+#: usr/local/www/status_queues.php:123
+msgid "Queues"
+msgstr "Filas"
+
+#: usr/local/www/fbegin.inc:170 usr/local/www/status_rrd_graph.php:224
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_settings.php:113
+#: usr/local/www/status_rrd_graph_settings.php:171
+#: usr/local/www/fbegin.inc:188
+#: usr/local/www/status_rrd_graph_settings.php:114
+#: usr/local/www/status_rrd_graph_settings.php:172
+#: usr/local/www/status_rrd_graph.php:244 usr/local/www/fbegin.inc:196
+#: usr/local/www/status_rrd_graph_img.php:43
+#: usr/local/www/status_rrd_graph.php:248 usr/local/www/fbegin.inc:187
+msgid "RRD Graphs"
+msgstr "Gráficos RRD"
+
+#: usr/local/www/fbegin.inc:172 usr/local/www/fbegin.inc:190
+#: usr/local/www/fbegin.inc:198 usr/local/www/fbegin.inc:189
+msgid "System Logs"
+msgstr "Logs do sistema"
+
+#: usr/local/www/fbegin.inc:188
+msgid "ARP Tables"
+msgstr "Tabela ARP"
+
+#: usr/local/www/fbegin.inc:191 usr/local/www/fbegin.inc:209
+#: usr/local/www/fbegin.inc:217 usr/local/www/fbegin.inc:208
+msgid "Command Prompt"
+msgstr "Prompt de Comando"
+
+#: usr/local/www/fbegin.inc:193 usr/local/www/fbegin.inc:211
+#: usr/local/www/fbegin.inc:219 usr/local/www/fbegin.inc:210
+msgid "Edit File"
+msgstr "Editar arquivo"
+
+#: usr/local/www/fbegin.inc:194 usr/local/www/fbegin.inc:212
+#: usr/local/www/fbegin.inc:220 usr/local/www/fbegin.inc:211
+msgid "Factory Defaults"
+msgstr "Padrão de fábrica"
+
+#: usr/local/www/fbegin.inc:195 usr/local/www/fbegin.inc:213
+#: usr/local/www/fbegin.inc:221 usr/local/www/fbegin.inc:212
+msgid "Halt System"
+msgstr "Desligar sistema"
+
+#: usr/local/www/fbegin.inc:196 usr/local/www/fbegin.inc:214
+#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:213
+msgid "Limiter Info"
+msgstr "Limitador"
+
+#: usr/local/www/fbegin.inc:197 usr/local/www/diag_ndp.php:103
+#: usr/local/www/fbegin.inc:215 usr/local/www/fbegin.inc:223
+#: usr/local/www/fbegin.inc:214
+msgid "NDP Table"
+msgstr "Tabela NDP"
+
+#: usr/local/www/fbegin.inc:201 usr/local/www/fbegin.inc:219
+#: usr/local/www/fbegin.inc:227
+msgid "pfInfo"
+msgstr "pfInfo"
+
+#: usr/local/www/fbegin.inc:202 usr/local/www/fbegin.inc:220
+#: usr/local/www/fbegin.inc:228
+msgid "pfTop"
+msgstr "pfTop"
+
+#: usr/local/www/fbegin.inc:203 usr/local/www/fbegin.inc:221
+#: usr/local/www/fbegin.inc:229
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#: usr/local/www/fbegin.inc:205 usr/local/www/fbegin.inc:223
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+#: usr/local/www/fbegin.inc:231
+#: usr/local/www/widgets/widgets/smart_status.widget.php:39
+msgid "SMART Status"
+msgstr "Status SMART"
+
+#: usr/local/www/fbegin.inc:207 usr/local/www/fbegin.inc:225
+#: usr/local/www/fbegin.inc:234 usr/local/www/fbegin.inc:226
+msgid "States Summary"
+msgstr "Resumo da Tabela de Estados"
+
+#: usr/local/www/fbegin.inc:208 usr/local/www/fbegin.inc:226
+#: usr/local/www/fbegin.inc:235 usr/local/www/fbegin.inc:227
+msgid "System Activity"
+msgstr "Atividades do Sistema"
+
+#: usr/local/www/fbegin.inc:216 usr/local/www/fbegin.inc:233
+#: usr/local/www/fbegin.inc:242 usr/local/www/fbegin.inc:234
+msgid "Restart HTTPD"
+msgstr "Reiniciar HTTPD"
+
+#: usr/local/www/fbegin.inc:222 usr/local/www/fbegin.inc:240
+#: usr/local/www/fbegin.inc:249 usr/local/www/fbegin.inc:241
+msgid "About this Page"
+msgstr "Sobre esta página"
+
+#: usr/local/www/fbegin.inc:224 usr/local/www/fbegin.inc:242
+#: usr/local/www/fbegin.inc:251 usr/local/www/fbegin.inc:243
+msgid "Bug Database"
+msgstr "Banco de Dados de Bugs"
+
+#: usr/local/www/fbegin.inc:225 usr/local/www/fbegin.inc:243
+#: usr/local/www/fbegin.inc:252 usr/local/www/fbegin.inc:244
+msgid "User Forum"
+msgstr "Fórum Usuário"
+
+#: usr/local/www/fbegin.inc:226 usr/local/www/fbegin.inc:244
+#: usr/local/www/fbegin.inc:253 usr/local/www/fbegin.inc:245
+msgid "Documentation"
+msgstr "Documentação"
+
+#: usr/local/www/fbegin.inc:227 usr/local/www/fbegin.inc:245
+#: usr/local/www/fbegin.inc:254 usr/local/www/fbegin.inc:246
+msgid "Developers Wiki"
+msgstr "Wiki de desenvolvedores"
+
+#: usr/local/www/fbegin.inc:228 usr/local/www/fbegin.inc:246
+#: usr/local/www/fbegin.inc:255 usr/local/www/fbegin.inc:247
+msgid "Paid Support"
+msgstr "Suporte à pagamentos"
+
+#: usr/local/www/fbegin.inc:229 usr/local/www/fbegin.inc:247
+#: usr/local/www/fbegin.inc:256 usr/local/www/fbegin.inc:248
+msgid "pfSense Book"
+msgstr "Livro pfSense"
+
+#: usr/local/www/fbegin.inc:230 usr/local/www/fbegin.inc:248
+#: usr/local/www/fbegin.inc:257 usr/local/www/fbegin.inc:249
+msgid "Search portal"
+msgstr "Portal fonte"
+
+#: usr/local/www/fbegin.inc:231 usr/local/www/fbegin.inc:249
+#: usr/local/www/fbegin.inc:258 usr/local/www/fbegin.inc:250
+msgid "FreeBSD Handbook"
+msgstr "FreeBSD Handbook"
+
+#: usr/local/www/fbegin.inc:376 usr/local/www/fbegin.inc:394
+#: usr/local/www/fbegin.inc:340 usr/local/www/fbegin.inc:332
+msgid "Help"
+msgstr "Ajuda"
+
+#: usr/local/www/fbegin.inc:425 usr/local/www/fbegin.inc:443
+msgid "Status of items on this page."
+msgstr "Status dos itens nesta página."
+
+#: usr/local/www/fbegin.inc:428 usr/local/www/fbegin.inc:446
+msgid "Log entries for items on this page."
+msgstr "Entradas de log para itens nesta página."
+
+#: usr/local/www/fbegin.inc:431 usr/local/www/fbegin.inc:449
+msgid "Help for items on this page."
+msgstr "Ajuda para os itens nesta página."
+
+#: usr/local/www/fbegin.inc:441 usr/local/www/fbegin.inc:459
+#: usr/local/www/fbegin.inc:429 usr/local/www/fbegin.inc:421
+msgid "Packages are currently being reinstalled in the background.<p>Do not make changes in the GUI until this is complete."
+msgstr "Pacotes estão sendo reinstalados em background atualmente.<p>Não faça alterações na interface Web até que isto esteja completo."
+
+#: usr/local/www/status_queues.php:98 usr/local/www/status_queues.php:101
+#: usr/local/www/status_queues.php:109 usr/local/www/status_queues.php:123
+msgid "Traffic shaper"
+msgstr "Traffic shaper"
+
+#: usr/local/www/status_queues.php:107 usr/local/www/status_queues.php:110
+#: usr/local/www/status_queues.php:111 usr/local/www/status_queues.php:117
+#: usr/local/www/status_queues.php:131
+msgid "Traffic shaping is not configured."
+msgstr "Modelagem de tráfego não está configurado."
+
+#: usr/local/www/status_queues.php:136 usr/local/www/status_queues.php:143
+#: usr/local/www/status_queues.php:144 usr/local/www/status_queues.php:149
+#: usr/local/www/status_queues.php:166
+msgid "Statistics"
+msgstr "Estatísticas"
+
+#: usr/local/www/status_queues.php:158 usr/local/www/status_queues.php:165
+#: usr/local/www/status_queues.php:166 usr/local/www/status_queues.php:223
+#: usr/local/www/status_queues.php:224 usr/local/www/status_queues.php:246
+msgid "Loading"
+msgstr "Carregando"
+
+#: usr/local/www/status_queues.php:173 usr/local/www/status_queues.php:181
+#: usr/local/www/status_queues.php:182 usr/local/www/status_queues.php:164
+#: usr/local/www/status_queues.php:186
+msgid "Queue graphs take 5 seconds to sample data"
+msgstr "Gráficos de filas levam 5 segundos para gerar dados de amostra"
+
+#: usr/local/www/status_queues.php:174 usr/local/www/status_queues.php:182
+#: usr/local/www/status_queues.php:183 usr/local/www/status_queues.php:165
+#: usr/local/www/status_queues.php:187
+msgid "You can configure the Traffic Shaper"
+msgstr "Você pode configurar o Traffic Shaper"
+
+#: usr/local/www/status_rrd_graph.php:211
+#: usr/local/www/status_rrd_graph_settings.php:59
+#: usr/local/www/status_rrd_graph.php:174
+#: usr/local/www/status_rrd_graph.php:179
+msgid "Inverse"
+msgstr "Inverso"
+
+#: usr/local/www/status_rrd_graph.php:212
+#: usr/local/www/status_rrd_graph_settings.php:60
+#: usr/local/www/status_rrd_graph.php:175
+#: usr/local/www/status_rrd_graph.php:180
+msgid "Absolute"
+msgstr "Absoluto"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:61
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+msgid "Absolute Timespans"
+msgstr "Timespans absolutos"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:62
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+msgid "Current Period"
+msgstr "Período atual"
+
+#: usr/local/www/status_rrd_graph.php:214
+#: usr/local/www/status_rrd_graph_settings.php:63
+#: usr/local/www/status_rrd_graph.php:234
+#: usr/local/www/status_rrd_graph.php:238
+msgid "Previous Period"
+msgstr "Período anterior"
+
+#: usr/local/www/status_rrd_graph.php:331
+#: usr/local/www/status_rrd_graph_settings.php:54
+#: usr/local/www/status_rrd_graph_settings.php:130
+#: usr/local/www/status_rrd_graph_settings.php:131
+#: usr/local/www/status_rrd_graph.php:379
+#: usr/local/www/status_rrd_graph.php:404
+msgid "Traffic"
+msgstr "Tráfego"
+
+#: usr/local/www/status_rrd_graph.php:333
+#: usr/local/www/status_rrd_graph_settings.php:55
+#: usr/local/www/status_rrd_graph_settings.php:132
+#: usr/local/www/status_rrd_graph_settings.php:133
+#: usr/local/www/status_rrd_graph.php:381
+#: usr/local/www/status_rrd_graph.php:406
+msgid "Packets"
+msgstr "Pacotes"
+
+#: usr/local/www/status_rrd_graph.php:335
+#: usr/local/www/status_rrd_graph_settings.php:56
+#: usr/local/www/status_rrd_graph_settings.php:134
+#: usr/local/www/status_rrd_graph_settings.php:135
+#: usr/local/www/status_rrd_graph.php:383
+#: usr/local/www/status_rrd_graph.php:408
+msgid "Quality"
+msgstr "Qualidade"
+
+#: usr/local/www/status_rrd_graph.php:340
+#: usr/local/www/status_rrd_graph_settings.php:139
+#: usr/local/www/status_rrd_graph_settings.php:140
+#: usr/local/www/status_rrd_graph.php:388
+#: usr/local/www/status_rrd_graph.php:413
+msgid "QueueDrops"
+msgstr "Quedas de fila"
+
+#: usr/local/www/status_rrd_graph.php:348
+#: usr/local/www/status_rrd_graph_settings.php:147
+#: usr/local/www/status_rrd_graph_settings.php:148
+#: usr/local/www/status_rrd_graph.php:396
+#: usr/local/www/status_rrd_graph.php:421
+msgid "Cellular"
+msgstr "Celular"
+
+#: usr/local/www/status_rrd_graph.php:371
+#: usr/local/www/status_rrd_graph.php:419
+#: usr/local/www/status_rrd_graph.php:451
+msgid "Note: Change of color and/or style may not take effect until the next refresh"
+msgstr "Nota: Mudança de cor e/ou estilo podem não ter efeito até a próxima atualização"
+
+#: usr/local/www/status_rrd_graph.php:375
+#: usr/local/www/status_rrd_graph.php:423
+#: usr/local/www/status_rrd_graph.php:455
+msgid "Graphs:"
+msgstr "Gráficos:"
+
+#: usr/local/www/status_rrd_graph.php:432
+#: usr/local/www/status_rrd_graph.php:480
+#: usr/local/www/status_rrd_graph.php:515
+msgid "Style:"
+msgstr "Estilo:"
+
+#: usr/local/www/status_rrd_graph.php:446
+#: usr/local/www/status_rrd_graph.php:494
+#: usr/local/www/status_rrd_graph.php:529
+msgid "Period:"
+msgstr "Período:"
+
+#: usr/local/www/status_rrd_graph.php:461
+#: usr/local/www/status_rrd_graph.php:513
+#: usr/local/www/status_rrd_graph.php:548
+msgid "Start:"
+msgstr "Início:"
+
+#: usr/local/www/status_rrd_graph.php:463
+#: usr/local/www/status_rrd_graph.php:515
+#: usr/local/www/status_rrd_graph.php:550
+msgid "End:"
+msgstr "Fim:"
+
+#: usr/local/www/status_rrd_graph.php:465
+#: usr/local/www/status_rrd_graph.php:517
+#: usr/local/www/status_rrd_graph.php:552
+msgid "Go"
+msgstr "Ir"
+
+#: usr/local/www/status_rrd_graph_img.php:41
+#: usr/local/www/status_rrd_graph_img.php:43
+msgid "Image viewer"
+msgstr "Visualizador de imagem"
+
+#: usr/local/www/status_rrd_graph_img.php:216
+#: usr/local/www/status_rrd_graph_img.php:221
+#: usr/local/www/status_rrd_graph_img.php:266
+#, php-format
+msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!"
+msgstr "rrdcolors.inc.php para tema %s não existe, usando padrões!"
+
+#: usr/local/www/status_rrd_graph_img.php:1095
+#: usr/local/www/status_rrd_graph_img.php:1088
+#: usr/local/www/status_rrd_graph_img.php:1093
+#: usr/local/www/status_rrd_graph_img.php:1182
+#, php-format
+msgid "Sorry we do not have data to graph for %s"
+msgstr "Lamento, não temos dados para gerar gráfico para %s"
+
+#: usr/local/www/status_rrd_graph_img.php:1115
+#: usr/local/www/status_rrd_graph_img.php:1108
+#: usr/local/www/status_rrd_graph_img.php:1113
+#: usr/local/www/status_rrd_graph_img.php:1202
+#, php-format
+msgid "Failed to create graph with error code %1$s, the error is: %2$s"
+msgstr "Falhou ao criar gráfico com o código de erro %1$s, o erro é: %2$s"
+
+#: usr/local/www/status_rrd_graph_img.php:1117
+#: usr/local/www/status_rrd_graph_img.php:1124
+#: usr/local/www/status_rrd_graph_img.php:1110
+#: usr/local/www/status_rrd_graph_img.php:1115
+#: usr/local/www/status_rrd_graph_img.php:1122
+#: usr/local/www/status_rrd_graph_img.php:1204
+#: usr/local/www/status_rrd_graph_img.php:1211
+#, php-format
+msgid "failed to create graph from %s%s, removing database"
+msgstr "falhou ao criar gráfico de %s%s, removendo da base de dados"
+
+#: usr/local/www/status_rrd_graph_settings.php:174
+#: usr/local/www/status_rrd_graph_settings.php:175
+msgid "Enables the RRD graphing backend."
+msgstr "Habilitar o backend de geração de gráfico RRD."
+
+#: usr/local/www/status_rrd_graph_settings.php:178
+#: usr/local/www/status_rrd_graph_settings.php:179
+msgid "Default category"
+msgstr "Categoria padrão"
+
+#: usr/local/www/status_rrd_graph_settings.php:189
+#: usr/local/www/status_rrd_graph_settings.php:190
+msgid "This selects default category."
+msgstr "Isso seleciona a categoria padrão."
+
+#: usr/local/www/status_rrd_graph_settings.php:193
+#: usr/local/www/status_rrd_graph_settings.php:194
+msgid "Default style"
+msgstr "Estilo padrão"
+
+#: usr/local/www/status_rrd_graph_settings.php:204
+#: usr/local/www/status_rrd_graph_settings.php:205
+msgid "This selects the default style."
+msgstr "Isso selecona o estilo padrão."
+
+#: usr/local/www/status_rrd_graph_settings.php:208
+#: usr/local/www/status_rrd_graph_settings.php:209
+msgid "Default period"
+msgstr "Período padrão"
+
+#: usr/local/www/status_rrd_graph_settings.php:219
+#: usr/local/www/status_rrd_graph_settings.php:220
+msgid "This selects the default period."
+msgstr "Isso selecona o período padrão."
+
+#: usr/local/www/status_rrd_graph_settings.php:231
+#: usr/local/www/status_rrd_graph_settings.php:232
+msgid "Reset RRD Data"
+msgstr "Reiniciar dados RRD"
+
+#: usr/local/www/status_rrd_graph_settings.php:231
+#: usr/local/www/status_rrd_graph_settings.php:232
+msgid "Do you really want to reset the RRD graphs? This will erase all graph data."
+msgstr "Você realmente deseja reiniciar os gráficos RRD? Isto irá apagar todos os dados do gráfico."
+
+#: usr/local/www/status_rrd_graph_settings.php:237
+#: usr/local/www/status_rrd_graph_settings.php:238
+msgid "Graphs will not be allowed to be recreated within a 1 minute interval, please take this into account after changing the style."
+msgstr "Gráficos não terão permissão de serem criados dentro de um intervalo de 1 minuto, por favor, leve isso em conta após modificar o estilo."
+
+#: usr/local/www/status_services.php:60
+#: usr/local/www/widgets/widgets/services_status.widget.php:54
+#: etc/inc/service-utils.inc:387 etc/inc/service-utils.inc:386
+#: etc/inc/service-utils.inc:403 etc/inc/service-utils.inc:405
+msgid "Not available."
+msgstr "Não disponível."
+
+#: usr/local/www/status_services.php:112 usr/local/www/status_services.php:100
+#: usr/local/www/status_services.php:98 etc/inc/service-utils.inc:657
+#: etc/inc/service-utils.inc:660 etc/inc/service-utils.inc:680
+#, php-format
+msgid "%s has been restarted."
+msgstr "%s foi reiniciado."
+
+#: usr/local/www/status_services.php:159 usr/local/www/status_services.php:151
+#: usr/local/www/status_services.php:149 etc/inc/service-utils.inc:544
+#: etc/inc/service-utils.inc:547 etc/inc/service-utils.inc:558
+#, php-format
+msgid "%s has been started."
+msgstr "%s foi iniciado."
+
+#: usr/local/www/status_services.php:218 usr/local/www/status_services.php:214
+#: usr/local/www/status_services.php:212 etc/inc/service-utils.inc:605
+#: etc/inc/service-utils.inc:608 etc/inc/service-utils.inc:622
+#, php-format
+msgid "%s has been stopped."
+msgstr "%s foi interrompido."
+
+#: usr/local/www/status_services.php:269
+#: usr/local/www/widgets/widgets/services_status.widget.php:74
+#: etc/inc/service-utils.inc:247 etc/inc/service-utils.inc:246
+#: etc/inc/service-utils.inc:263
+msgid "NTP clock sync"
+msgstr "Sincronização de relógio NTP"
+
+#: usr/local/www/status_services.php:302
+#: usr/local/www/widgets/widgets/services_status.widget.php:107
+#: etc/inc/service-utils.inc:285 etc/inc/service-utils.inc:284
+#: etc/inc/service-utils.inc:301 etc/inc/service-utils.inc:303
+msgid "DHCP Service"
+msgstr "Serviço DHCP"
+
+#: usr/local/www/status_services.php:309
+#: usr/local/www/widgets/widgets/services_status.widget.php:114
+#: etc/inc/service-utils.inc:292 etc/inc/service-utils.inc:291
+#: etc/inc/service-utils.inc:308 etc/inc/service-utils.inc:310
+msgid "SNMP Service"
+msgstr "Serviço SNMP"
+
+#: usr/local/www/status_services.php:323
+#: usr/local/www/widgets/widgets/services_status.widget.php:128
+#: etc/inc/service-utils.inc:306 etc/inc/service-utils.inc:305
+#: etc/inc/service-utils.inc:322 etc/inc/service-utils.inc:324
+msgid "UPnP Service"
+msgstr "Serviço UPnP"
+
+#: usr/local/www/status_services.php:353
+#: usr/local/www/widgets/widgets/services_status.widget.php:158
+#: etc/inc/service-utils.inc:343 etc/inc/service-utils.inc:342
+#: etc/inc/service-utils.inc:359 etc/inc/service-utils.inc:361
+msgid "Server load balancing daemon"
+msgstr "Daemon do balanceamento de carga do servidor"
+
+#: usr/local/www/status_services.php:380
+#: usr/local/www/widgets/widgets/services_status.widget.php:210
+#: etc/inc/service-utils.inc:411 etc/inc/service-utils.inc:410
+#: etc/inc/service-utils.inc:427 etc/inc/service-utils.inc:430
+#: etc/inc/service-utils.inc:435
+msgid "Running"
+msgstr "Executando"
+
+#: usr/local/www/status_services.php:383
+#: usr/local/www/widgets/widgets/services_status.widget.php:213
+#: etc/inc/service-utils.inc:420 etc/inc/service-utils.inc:419
+#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:440
+#: etc/inc/service-utils.inc:445
+msgid "Stopped"
+msgstr "Interrompido"
+
+#: usr/local/www/status_services.php:392
+#: usr/local/www/widgets/widgets/services_status.widget.php:222
+msgid "Restart Service"
+msgstr "Reiniciar Serviço"
+
+#: usr/local/www/status_services.php:398
+#: usr/local/www/widgets/widgets/services_status.widget.php:228
+msgid "Stop Service"
+msgstr "Interromper Serviço"
+
+#: usr/local/www/status_services.php:407
+#: usr/local/www/widgets/widgets/services_status.widget.php:237
+msgid "Start Service"
+msgstr "Iniciar Serviço"
+
+#: usr/local/www/status_services.php:412
+#: usr/local/www/widgets/widgets/services_status.widget.php:242
+#: usr/local/www/status_services.php:271
+#: usr/local/www/widgets/widgets/services_status.widget.php:83
+#: usr/local/www/status_services.php:269 usr/local/www/status_services.php:110
+#: usr/local/www/widgets/widgets/services_status.widget.php:84
+msgid "No services found"
+msgstr "Nenhum serviço encontrado"
+
+#: usr/local/www/status_upnp.php:48
+msgid "Rules have been cleared and the daemon restarted"
+msgstr "Regras foram limpas e o daemon reiniciado"
+
+#: usr/local/www/status_upnp.php:58
+msgid "UPnP &amp; NAT-PMP Status"
+msgstr "UPnP &amp; Status NAT-PMP"
+
+#: usr/local/www/status_upnp.php:67 usr/local/www/status_upnp.php:68
+msgid "UPnP is currently disabled."
+msgstr "UPnP está atualmente desabilitado."
+
+#: usr/local/www/status_upnp.php:77 usr/local/www/status_upnp.php:78
+msgid "all currently connected sessions"
+msgstr "todas as sessões atualmente conectadas"
+
+#: usr/local/www/diag_arp.php:261 usr/local/www/fbegin.inc:206
+#: usr/local/www/fbegin.inc:214 usr/local/www/fbegin.inc:205
+msgid "ARP Table"
+msgstr "Tabela ARP"
+
+#: /usr/local/www/firewall_rules.php:320
+#: usr/local/www/diag_arp.php:271 usr/local/www/diag_ndp.php:113
+msgid "Loading, please wait..."
+msgstr "Carregando, por favor aguarde..."
+
+#: usr/local/www/services_dyndns_edit.php:87
+#: usr/local/www/services_dyndns_edit.php:158
+#: usr/local/www/services_dyndns_edit.php:92
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/services_dyndns_edit.php:220
+#: usr/local/www/services_dyndns_edit.php:93
+#: usr/local/www/services_dyndns_edit.php:222
+#: usr/local/www/services_dyndns_edit.php:223
+msgid "Service type"
+msgstr "Tipo de Serviço"
+
+#: usr/local/www/services_dyndns_edit.php:92
+#: usr/local/www/services_dyndns_edit.php:108
+#: usr/local/www/services_dyndns_edit.php:109
+msgid "The MX contains invalid characters."
+msgstr "O MX contém caracteres inválidos."
+
+#: usr/local/www/services_dyndns_edit.php:133
+#: usr/local/www/services_dyndns_edit.php:147
+#: usr/local/www/services_dyndns_edit.php:156
+#: usr/local/www/services_dyndns_edit.php:205
+#: usr/local/www/services_dyndns_edit.php:160
+#: usr/local/www/services_dyndns_edit.php:209
+#: usr/local/www/services_dyndns_edit.php:162
+#: usr/local/www/services_dyndns_edit.php:211
+#: usr/local/www/services_dyndns_edit.php:212
+msgid "Dynamic DNS client"
+msgstr "Cliente DNS dinâmico"
+
+#: usr/local/www/services_dyndns_edit.php:154
+#: usr/local/www/services_rfc2136_edit.php:188
+#: usr/local/www/services_dyndns_edit.php:212
+#: usr/local/www/services_dyndns_edit.php:216
+#: usr/local/www/services_dyndns_edit.php:218
+#: usr/local/www/services_dyndns_edit.php:219
+#: usr/local/www/services_rfc2136_edit.php:193
+#: usr/local/www/services_rfc2136_edit.php:199
+msgid "yes"
+msgstr "sim"
+
+#: usr/local/www/services_dyndns_edit.php:172
+#: usr/local/www/services_rfc2136_edit.php:134
+#: usr/local/www/services_dyndns_edit.php:230
+#: usr/local/www/services_dyndns_edit.php:234
+#: usr/local/www/services_dyndns_edit.php:236
+#: usr/local/www/services_dyndns_edit.php:237
+#: usr/local/www/services_rfc2136_edit.php:139
+msgid "Interface to monitor"
+msgstr "Interface para monitorar"
+
+#: usr/local/www/services_dyndns_edit.php:191
+#: usr/local/www/services_dyndns_edit.php:274
+#: usr/local/www/services_dyndns_edit.php:278
+#: usr/local/www/services_dyndns_edit.php:280
+#: usr/local/www/services_dyndns_edit.php:281
+msgid "Enter the complete host/domain name. example: myhost.dyndns.org"
+msgstr "Informe um nome de host/domínio completo. Exemplo: myhost.dyndns.org"
+
+#: usr/local/www/services_dyndns_edit.php:192
+#: usr/local/www/services_dyndns_edit.php:275
+#: usr/local/www/services_dyndns_edit.php:279
+#: usr/local/www/services_dyndns_edit.php:281
+#: usr/local/www/services_dyndns_edit.php:282
+msgid "For he.net tunnelbroker, enter your tunnel ID"
+msgstr "Para tunnelbroker he.net, digite o ID do túnel"
+
+#: usr/local/www/services_dyndns_edit.php:197
+#: usr/local/www/services_dyndns_edit.php:280
+#: usr/local/www/services_dyndns_edit.php:284
+#: usr/local/www/services_dyndns_edit.php:286
+#: usr/local/www/services_dyndns_edit.php:287
+msgid "MX"
+msgstr "MX"
+
+#: usr/local/www/services_dyndns_edit.php:201
+#: usr/local/www/services_dyndns_edit.php:284
+#: usr/local/www/services_dyndns_edit.php:288
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:291
+msgid "Note: With DynDNS service you can only use a hostname, not an IP address."
+msgstr "Nota: Com o serviço DNS Dinâmico você pode somente usar um nome de host, não um endereço IP."
+
+#: usr/local/www/services_dyndns_edit.php:203
+#: usr/local/www/services_dyndns_edit.php:286
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:292
+#: usr/local/www/services_dyndns_edit.php:293
+msgid "Set this option only if you need a special MX record. Not all services support this."
+msgstr "Configure essa opção somente se você precisar de um registro MX especial. Nem todos os serviços suportam isso."
+
+#: usr/local/www/services_dyndns_edit.php:207
+#: usr/local/www/services_dyndns_edit.php:290
+#: usr/local/www/services_dyndns_edit.php:294
+#: usr/local/www/services_dyndns_edit.php:296
+#: usr/local/www/services_dyndns_edit.php:297
+msgid "Wildcards"
+msgstr "Wildcards"
+
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/services_dyndns_edit.php:293
+#: usr/local/www/services_dyndns_edit.php:297
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:300
+#: usr/local/www/services_dyndns_edit.php:306
+msgid "Enable "
+msgstr "Habilitar"
+
+#: usr/local/www/services_dyndns_edit.php:210
+#: usr/local/www/services_dyndns_edit.php:293
+#: usr/local/www/services_dyndns_edit.php:297
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:300
+msgid "Wildcard"
+msgstr "Wildcard"
+
+#: usr/local/www/services_dyndns_edit.php:216
+msgid "Username is required for all types except Namecheap and FreeDNS."
+msgstr "Nome de usuário é necessário para todos os tipos exceto Namecheap e FreeDNS."
+
+#: usr/local/www/services_dyndns_edit.php:224
+#: usr/local/www/services_dyndns_edit.php:309
+#: usr/local/www/services_dyndns_edit.php:313
+#: usr/local/www/services_dyndns_edit.php:321
+#: usr/local/www/services_dyndns_edit.php:322
+msgid "FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS."
+msgstr "FreeDNS (freedns.afraid.org): Informe seu \"Authentication Token\" fornecido pelo FreeDNS."
+
+#: usr/local/www/services_dyndns_edit.php:246
+#: usr/local/www/services_dyndns_edit.php:377
+#: usr/local/www/services_dyndns_edit.php:381
+#: usr/local/www/services_dyndns_edit.php:389
+#: usr/local/www/services_dyndns_edit.php:390
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem:\n"
+" General setup%s or allow the DNS server list to be overridden\n"
+" by DHCP/PPP on WAN for dynamic DNS updates to work."
+msgstr ""
+"Você deve configurar um servidor DNS em %sSistema:\n"
+" Configurações Gerais%s ou permitir que a lista de servidor DNS seja sobrescrita\n"
+" pelo DHCP/PPP na WAN para atualizações DNS dinâmicas funcionarem."
+
+#: usr/local/www/services_igmpproxy.php:80
+#: usr/local/www/services_igmpproxy_edit.php:46
+msgid "IGMP Proxy"
+msgstr "Proxy IGMP"
+
+#: usr/local/www/services_igmpproxy.php:90
+msgid "The IGMP entry list has been changed"
+msgstr "A lista de entrada IGMP foi modificada"
+
+#: usr/local/www/services_igmpproxy.php:103
+#: usr/local/www/services_igmpproxy.php:146
+msgid "add a new igmpentry"
+msgstr "adicionar um nova entrada igmp"
+
+#: usr/local/www/services_igmpproxy.php:133
+msgid "edit igmpentry"
+msgstr "editar entrada igmp"
+
+#: usr/local/www/services_igmpproxy.php:134
+msgid "Do you really want to delete this igmpentry? All elements that still use it will become invalid (e.g. filter rules)!"
+msgstr "Você realmente deseja apagar essa entrada igmp? Todos os elementos que ainda a usam serão invalidados (e.g. regras de filtro)!"
+
+#: usr/local/www/services_igmpproxy.php:134
+msgid "delete igmpentry"
+msgstr "apagar entrada igmp"
+
+#: usr/local/www/services_igmpproxy.php:161
+msgid "Please add the interface for upstream, the allowed subnets, and the downstream interfaces you would like the proxy to allow. Only one 'upstream' interface can be configured."
+msgstr "Por favor adicionar a interface para upstream, as subredes permitidas, e as interfaces downstream que você gostaria que o proxy desse permissão. Somente uma interface 'upstream' pode ser configurada."
+
+#: usr/local/www/services_igmpproxy_edit.php:79
+msgid "Only one 'upstream' interface can be configured."
+msgstr "Somente uma interface 'upstream' pode ser configurada."
+
+#: usr/local/www/services_igmpproxy_edit.php:158
+#: usr/local/www/services_igmpproxy_edit.php:160
+msgid "IGMP Proxy Edit"
+msgstr "Editar Proxy IGMP"
+
+#: usr/local/www/services_igmpproxy_edit.php:188
+#: usr/local/www/services_igmpproxy_edit.php:190
+msgid "Upstream Interface"
+msgstr "Interface Upstream"
+
+#: usr/local/www/services_igmpproxy_edit.php:189
+#: usr/local/www/services_igmpproxy_edit.php:191
+msgid "Downstream Interface"
+msgstr "Interface Downstream"
+
+#: usr/local/www/services_igmpproxy_edit.php:193
+#: usr/local/www/services_igmpproxy_edit.php:195
+msgid "The <b>upstream</b> network interface is the outgoing interface which is responsible for communicating to available multicast data sources. There can only be one upstream interface."
+msgstr "A interface de rede <b>upstream</b> é uma interface de saída que é responsável por comunicar-se com fontes de dado multicast disponíveis. Somente pode existir uma interface upstream."
+
+#: usr/local/www/services_igmpproxy_edit.php:199
+#: usr/local/www/services_igmpproxy_edit.php:201
+msgid "Downstream"
+msgstr "Downstream"
+
+#: usr/local/www/services_igmpproxy_edit.php:199
+#: usr/local/www/services_igmpproxy_edit.php:201
+msgid "network interfaces are the distribution interfaces to the destination networks, where multicast clients can join groups and receive multicast data. One or more downstream interfaces must be configured."
+msgstr "(interfaces de rede) são interfaces de distribuição para redes de destino onde clientes multicast podem unir-se a grupos e receber dados de multicast. Uma ou mais interfaces downstream deve ser configurados."
+
+#: usr/local/www/services_igmpproxy_edit.php:206
+#: usr/local/www/services_igmpproxy_edit.php:208
+msgid "Threshold"
+msgstr "Threshold"
+
+#: usr/local/www/services_igmpproxy_edit.php:211
+#: usr/local/www/services_igmpproxy_edit.php:213
+msgid "Defines the TTL threshold for the network interface. Packets with a lower TTL than the threshold value will be ignored. This setting is optional, and by default the threshold is 1."
+msgstr "Define o threshold TTL para a interface de rede. Pacotes com um TTL mais baixo que os valores de thresholds serão ignorados. Essa configuração é opcional e, por padrão, o threshold é 1."
+
+#: usr/local/www/services_igmpproxy_edit.php:218
+#: usr/local/www/services_igmpproxy_edit.php:220
+msgid "Network (s)"
+msgstr "Rede(s)"
+
+#: usr/local/www/services_rfc2136.php:55
+msgid "RFC 2136 clients"
+msgstr "Clientes RFC 2136"
+
+#: usr/local/www/services_rfc2136.php:99
+#: usr/local/www/vpn_openvpn_client.php:894
+#: usr/local/www/vpn_openvpn_client.php:899
+#: usr/local/www/vpn_openvpn_client.php:952
+#: usr/local/www/services_rfc2136.php:118
+#: usr/local/www/vpn_openvpn_client.php:971
+#: usr/local/www/services_rfc2136.php:165
+msgid "Do you really want to delete this client?"
+msgstr "Você realmente deseja apagar esse cliente?"
+
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:153
+#: usr/local/www/services_dyndns_edit.php:348
+#: usr/local/www/services_dyndns_edit.php:352
+#: usr/local/www/services_dyndns_edit.php:360
+#: usr/local/www/services_dyndns_edit.php:361
+#: usr/local/www/services_rfc2136_edit.php:72
+#: usr/local/www/services_rfc2136_edit.php:158
+msgid "TTL"
+msgstr "TTL"
+
+#: usr/local/www/services_rfc2136_edit.php:71
+#: usr/local/www/services_rfc2136_edit.php:159
+#: usr/local/www/services_rfc2136_edit.php:72
+#: usr/local/www/services_rfc2136_edit.php:164
+msgid "Key name"
+msgstr "Nome da chave"
+
+#: usr/local/www/services_rfc2136_edit.php:76
+#: usr/local/www/services_rfc2136_edit.php:77
+msgid "The DNS update host name contains invalid characters."
+msgstr "O nome de host da atualização do DNS contém caracteres inválidos."
+
+#: usr/local/www/services_rfc2136_edit.php:78
+#: usr/local/www/services_rfc2136_edit.php:79
+msgid "The DNS update TTL must be an integer."
+msgstr "O TTL da atualização do DNS deve ser um inteiro."
+
+#: usr/local/www/services_rfc2136_edit.php:80
+#: usr/local/www/services_rfc2136_edit.php:81
+msgid "The DNS update key name contains invalid characters."
+msgstr "O nome da chave da atualização do DNS contém caracteres inválidos."
+
+#: usr/local/www/services_rfc2136_edit.php:100
+#: usr/local/www/services_rfc2136_edit.php:102
+msgid "New/Edited RFC2136 dnsupdate entry was posted."
+msgstr "Nova/Editada entrada de atualização do DNS pela RFC 2136 foi publicado."
+
+#: usr/local/www/services_rfc2136_edit.php:109
+#: usr/local/www/services_rfc2136_edit.php:123
+#: usr/local/www/services_rfc2136_edit.php:114
+#: usr/local/www/services_rfc2136_edit.php:128
+msgid "RFC 2136 client"
+msgstr "Cliente RFC 2136"
+
+#: usr/local/www/services_rfc2136_edit.php:163
+#: usr/local/www/services_rfc2136_edit.php:168
+msgid "This must match the setting on the DNS server."
+msgstr "Isso deve corresponder à configuração no servidor DNS."
+
+#: usr/local/www/services_rfc2136_edit.php:166
+#: usr/local/www/services_rfc2136_edit.php:171
+msgid "Key type"
+msgstr "Tipo de chave"
+
+#: usr/local/www/services_rfc2136_edit.php:168
+#: usr/local/www/services_captiveportal_zones.php:52
+#: usr/local/www/services_captiveportal_zones.php:53
+#: usr/local/www/services_rfc2136_edit.php:173
+msgid "Zone"
+msgstr "Zona"
+
+#: usr/local/www/services_rfc2136_edit.php:170
+#: usr/local/www/services_rfc2136_edit.php:175
+msgid " User"
+msgstr " Usuário"
+
+#: usr/local/www/services_rfc2136_edit.php:177
+#: usr/local/www/services_rfc2136_edit.php:182
+msgid "Paste an HMAC-MD5 key here."
+msgstr "Cole uma chave HMAC-MD5 aqui."
+
+#: usr/local/www/services_rfc2136_edit.php:189
+#: usr/local/www/services_rfc2136_edit.php:194
+msgid "Use TCP instead of UDP"
+msgstr "Use TCP ao invés de UDP"
+
+#: usr/local/www/services_rfc2136_edit.php:210
+#: usr/local/www/services_rfc2136_edit.php:223
+#, php-format
+msgid "You must configure a DNS server in %sSystem: General setup %sor allow the DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates to work."
+msgstr "Você deve configurar um servidor DNS em %sSistema: Configurações Gerais%s ou pemitir que a lista de servidores DNS seja sobrescrita pelo DHCP/PPP na WAN para atualizações DNS dinâmicas funcionarem."
+
+#: usr/local/www/status_captiveportal_test.php:82
+#: usr/local/www/status_captiveportal_test.php:83
+#: usr/local/www/status_captiveportal_expire.php:82
+#: usr/local/www/status_captiveportal_test.php:84
+msgid "Voucher(s)"
+msgstr "Voucher(s)"
+
+#: usr/local/www/status_captiveportal_test.php:86
+#: usr/local/www/status_captiveportal_test.php:87
+#: usr/local/www/status_captiveportal_test.php:88
+msgid "Enter multiple vouchers separated by space or newline. The remaining time, if valid, will be shown for each voucher"
+msgstr "Informe múltiplos vouchers separados por espaço ou uma nova linha. O tempo remanescente, se válido, será exibido para cada voucher"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:85
+#: usr/local/www/status_captiveportal_voucher_rolls.php:86
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+msgid "Roll#"
+msgstr "Lista#"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:87
+#: usr/local/www/status_captiveportal_voucher_rolls.php:88
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+msgid "# of Tickets"
+msgstr "# de Tickets"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:89
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+msgid "used"
+msgstr "usado"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/status_captiveportal_voucher_rolls.php:93
+msgid "active"
+msgstr "ativo"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+#: usr/local/www/status_captiveportal_voucher_rolls.php:94
+msgid "ready"
+msgstr "pronto"
+
+#: usr/local/www/status_captiveportal_vouchers.php:115
+#: usr/local/www/status_captiveportal_vouchers.php:116
+#: usr/local/www/status_captiveportal_vouchers.php:121
+msgid "Voucher"
+msgstr "Voucher"
+
+#: usr/local/www/status_captiveportal_vouchers.php:117
+#: usr/local/www/status_captiveportal_vouchers.php:118
+#: usr/local/www/status_captiveportal_vouchers.php:123
+msgid "Activated at"
+msgstr "Ativado em"
+
+#: usr/local/www/status_captiveportal_vouchers.php:118
+#: usr/local/www/status_captiveportal_vouchers.php:119
+#: usr/local/www/status_captiveportal_vouchers.php:124
+msgid "Expires in"
+msgstr "Expira em"
+
+#: usr/local/www/status_captiveportal_vouchers.php:119
+#: usr/local/www/status_captiveportal_vouchers.php:120
+#: usr/local/www/status_captiveportal_vouchers.php:125
+msgid "Expires at"
+msgstr "Expira em"
+
+#: usr/local/www/status_captiveportal_vouchers.php:127
+#: usr/local/www/status_captiveportal_vouchers.php:128
+#: usr/local/www/status_captiveportal_vouchers.php:133
+msgid "min"
+msgstr "min"
+
+#: usr/local/www/status_dhcp_leases.php:48
+#: usr/local/www/status_dhcp_leases.php:49
+msgid "DHCP leases"
+msgstr "Concessões DHCP"
+
+#: usr/local/www/status_dhcp_leases.php:287
+#: usr/local/www/status_dhcpv6_leases.php:328
+#: usr/local/www/status_dhcpv6_leases.php:372
+#: usr/local/www/status_dhcp_leases.php:308
+#: usr/local/www/status_dhcpv6_leases.php:373
+#: usr/local/www/status_dhcp_leases.php:310
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:311
+msgid "Failover Group"
+msgstr "Grupo de Failover"
+
+#: usr/local/www/status_dhcp_leases.php:288
+#: usr/local/www/status_dhcpv6_leases.php:329
+#: usr/local/www/status_dhcpv6_leases.php:373
+#: usr/local/www/status_dhcp_leases.php:309
+#: usr/local/www/status_dhcpv6_leases.php:374
+#: usr/local/www/status_dhcp_leases.php:311
+#: usr/local/www/status_dhcpv6_leases.php:377
+#: usr/local/www/status_dhcp_leases.php:312
+msgid "My State"
+msgstr "Meu estado"
+
+#: usr/local/www/status_dhcp_leases.php:289
+#: usr/local/www/status_dhcp_leases.php:291
+#: usr/local/www/status_dhcpv6_leases.php:330
+#: usr/local/www/status_dhcpv6_leases.php:332
+#: usr/local/www/status_dhcpv6_leases.php:374
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:310
+#: usr/local/www/status_dhcp_leases.php:312
+#: usr/local/www/status_dhcpv6_leases.php:375
+#: usr/local/www/status_dhcpv6_leases.php:377
+#: usr/local/www/status_dhcp_leases.php:314
+#: usr/local/www/status_dhcpv6_leases.php:378
+#: usr/local/www/status_dhcpv6_leases.php:380
+#: usr/local/www/status_dhcp_leases.php:313
+#: usr/local/www/status_dhcp_leases.php:315
+msgid "Since"
+msgstr "Desde"
+
+#: usr/local/www/status_dhcp_leases.php:290
+#: usr/local/www/status_dhcpv6_leases.php:331
+#: usr/local/www/status_dhcpv6_leases.php:375
+#: usr/local/www/status_dhcp_leases.php:311
+#: usr/local/www/status_dhcpv6_leases.php:376
+#: usr/local/www/status_dhcp_leases.php:313
+#: usr/local/www/status_dhcpv6_leases.php:379
+#: usr/local/www/status_dhcp_leases.php:314
+msgid "Peer State"
+msgstr "Estado do peer"
+
+#: usr/local/www/status_dhcp_leases.php:322
+#: usr/local/www/status_dhcpv6_leases.php:364
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:485
+#: usr/local/www/status_dhcp_leases.php:343
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcpv6_leases.php:486
+#: usr/local/www/status_dhcp_leases.php:345
+#: usr/local/www/status_dhcpv6_leases.php:412
+#: usr/local/www/status_dhcpv6_leases.php:489
+#: usr/local/www/status_dhcp_leases.php:346
+msgid "End"
+msgstr "Fim"
+
+#: usr/local/www/status_dhcp_leases.php:323
+#: usr/local/www/status_gateway_groups.php:132
+#: usr/local/www/status_gateways.php:127 usr/local/www/status_gateways.php:131
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:57
+#: usr/local/www/status_dhcpv6_leases.php:365
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcp_leases.php:344
+#: usr/local/www/status_dhcpv6_leases.php:410
+#: usr/local/www/status_gateways.php:128 usr/local/www/status_gateways.php:132
+#: usr/local/www/status_dhcp_leases.php:346
+#: usr/local/www/status_gateway_groups.php:133
+#: usr/local/www/status_dhcpv6_leases.php:413
+#: usr/local/www/status_dhcp_leases.php:347
+msgid "Online"
+msgstr "No ar"
+
+#: usr/local/www/status_dhcp_leases.php:324
+#: usr/local/www/status_dhcpv6_leases.php:366
+#: usr/local/www/status_dhcpv6_leases.php:410
+#: usr/local/www/status_dhcp_leases.php:345
+#: usr/local/www/status_dhcpv6_leases.php:411
+#: usr/local/www/status_dhcp_leases.php:347
+#: usr/local/www/status_dhcpv6_leases.php:414
+#: usr/local/www/status_dhcp_leases.php:348
+msgid "Lease Type"
+msgstr "Tipo de concessão"
+
+#: usr/local/www/status_dhcp_leases.php:368
+#: usr/local/www/status_dhcp_leases.php:389
+#: usr/local/www/status_dhcp_leases.php:393
+#: usr/local/www/status_dhcp_leases.php:394
+msgid "send Wake on LAN packet to this MAC address"
+msgstr "enviar pacote Wake on LAN para esse endereço MAC"
+
+#: usr/local/www/status_dhcp_leases.php:390
+#: usr/local/www/status_dhcpv6_leases.php:417
+#: usr/local/www/status_dhcpv6_leases.php:461
+#: usr/local/www/status_dhcp_leases.php:411
+#: usr/local/www/status_dhcpv6_leases.php:462
+#: usr/local/www/status_dhcp_leases.php:415
+#: usr/local/www/status_dhcpv6_leases.php:465
+#: usr/local/www/status_dhcp_leases.php:416
+msgid "add a static mapping for this MAC address"
+msgstr "adicionar um mapeamento estático para esse endereço MAC"
+
+#: usr/local/www/status_dhcp_leases.php:397
+#: usr/local/www/status_dhcp_leases.php:418
+#: usr/local/www/status_dhcp_leases.php:422
+#: usr/local/www/status_dhcp_leases.php:423
+msgid "add a Wake on LAN mapping for this MAC address"
+msgstr "adicionar um mapeamento Wake on LAN para esse endereço MAC"
+
+#: usr/local/www/status_dhcp_leases.php:402
+#: usr/local/www/status_dhcpv6_leases.php:426
+#: usr/local/www/status_dhcpv6_leases.php:470
+#: usr/local/www/status_dhcp_leases.php:423
+#: usr/local/www/status_dhcpv6_leases.php:471
+#: usr/local/www/status_dhcp_leases.php:427
+#: usr/local/www/status_dhcpv6_leases.php:474
+#: usr/local/www/status_dhcp_leases.php:428
+msgid "delete this DHCP lease"
+msgstr "apague essa concessão DHCP"
+
+#: usr/local/www/status_dhcp_leases.php:415
+#: usr/local/www/status_dhcpv6_leases.php:439
+#: usr/local/www/status_dhcpv6_leases.php:540
+#: usr/local/www/status_dhcp_leases.php:436
+#: usr/local/www/status_dhcpv6_leases.php:541
+#: usr/local/www/status_dhcp_leases.php:440
+#: usr/local/www/status_dhcpv6_leases.php:544
+#: usr/local/www/status_dhcp_leases.php:441
+msgid "Show active and static leases only"
+msgstr "Exibir concessões ativas e estáticas somente"
+
+#: usr/local/www/status_dhcp_leases.php:418
+#: usr/local/www/status_dhcpv6_leases.php:442
+#: usr/local/www/status_dhcpv6_leases.php:543
+#: usr/local/www/status_dhcp_leases.php:439
+#: usr/local/www/status_dhcpv6_leases.php:544
+#: usr/local/www/status_dhcp_leases.php:443
+#: usr/local/www/status_dhcpv6_leases.php:547
+#: usr/local/www/status_dhcp_leases.php:444
+msgid "Show all configured leases"
+msgstr "Exibir todas as concessões configuradas"
+
+#: usr/local/www/status_dhcp_leases.php:422
+#: usr/local/www/status_dhcpv6_leases.php:446
+#: usr/local/www/status_dhcpv6_leases.php:547
+#: usr/local/www/status_dhcp_leases.php:443
+#: usr/local/www/status_dhcpv6_leases.php:548
+#: usr/local/www/status_dhcp_leases.php:447
+#: usr/local/www/status_dhcpv6_leases.php:551
+#: usr/local/www/status_dhcp_leases.php:448
+msgid "No leases file found. Is the DHCP server active"
+msgstr "Nenhum arquivo de concessões encontrado. O servidor DHCP está ativo?"
+
+#: usr/local/www/status_gateway_groups.php:100
+#: usr/local/www/status_gateway_groups.php:101
+#, php-format
+msgid "Tier %s"
+msgstr "Camada %s"
+
+#: usr/local/www/status_gateway_groups.php:126
+#: usr/local/www/status_gateways.php:121 usr/local/www/status_gateways.php:122
+#: usr/local/www/status_gateway_groups.php:127
+msgid "Warning, Packetloss"
+msgstr "Aviso, perda de pacote"
+
+#: usr/local/www/status_gateway_groups.php:129
+#: usr/local/www/status_gateways.php:124 usr/local/www/status_gateways.php:125
+#: usr/local/www/status_gateway_groups.php:130
+msgid "Warning, Latency"
+msgstr "Advertência, latência"
+
+#: usr/local/www/status_gateway_groups.php:135
+#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108
+#: usr/local/www/status_gateways.php:134
+#: usr/local/www/widgets/widgets/gateways.widget.php:69
+#: usr/local/www/widgets/widgets/gateways.widget.php:77
+#: usr/local/www/widgets/widgets/gateways.widget.php:98
+#: usr/local/www/status_gateway_groups.php:136
+msgid "Gathering data"
+msgstr "Coletando dados"
+
+#: usr/local/www/status_gateways.php:75 usr/local/www/status_gateways.php:76
+msgid "RTT"
+msgstr "RTT"
+
+#: usr/local/www/status_gateways.php:76 usr/local/www/status_gateways.php:77
+msgid "Loss"
+msgstr "Perda"
+
+#: usr/local/www/status_gateways.php:144
+#, php-format
+msgid "Last check %s"
+msgstr "Última verificação %s"
+
+#: usr/local/www/status_graph_cpu.php:41
+msgid "CPU load"
+msgstr "Carregamento de CPU"
+
+#: usr/local/www/status_graph_cpu.php:46
+msgid "Status: CPU Graph"
+msgstr "Status: Gráfico de CPU"
+
+#: usr/local/www/status_graph_cpu.php:53
+msgid "if you can't see the graph, you may have to install the"
+msgstr "se você não pode ver o gráfico, você deve ter que instalar o"
+
+#: usr/local/www/status_graph_cpu.php:53
+msgid "Adobe SVG viewer"
+msgstr "Visualizador Adobe SVG"
+
+#: usr/local/www/status_lb_vs.php:78 usr/local/www/vpn_ipsec_phase2.php:427
+#: usr/local/www/vpn_ipsec_phase2.php:469
+#: usr/local/www/vpn_ipsec_phase2.php:475
+#: usr/local/www/vpn_ipsec_phase2.php:453
+#: usr/local/www/vpn_ipsec_phase2.php:495
+#: usr/local/www/vpn_ipsec_phase2.php:501
+#: usr/local/www/vpn_ipsec_phase2.php:519
+#: usr/local/www/vpn_ipsec_phase2.php:555
+#: usr/local/www/vpn_ipsec_phase2.php:597
+#: usr/local/www/vpn_ipsec_phase2.php:603
+#: usr/local/www/vpn_ipsec_phase2.php:541
+#: usr/local/www/vpn_ipsec_phase2.php:576
+#: usr/local/www/vpn_ipsec_phase2.php:618
+#: usr/local/www/vpn_ipsec_phase2.php:624
+msgid "Address"
+msgstr "Endereço"
+
+#: usr/local/www/status_openvpn.php:145 usr/local/www/status_openvpn.php:146
+#: usr/local/www/status_openvpn.php:147
+msgid "Client connections"
+msgstr "Conexões de clientes"
+
+#: usr/local/www/status_openvpn.php:152 usr/local/www/system_camanager.php:534
+#: usr/local/www/system_certmanager.php:627
+#: usr/local/www/system_certmanager.php:730
+#: usr/local/www/vpn_openvpn_csc.php:673
+#: usr/local/www/system_certmanager.php:743
+#: usr/local/www/system_certmanager.php:896
+#: usr/local/www/system_camanager.php:535 usr/local/www/status_openvpn.php:153
+#: usr/local/www/vpn_openvpn_csc.php:672
+#: usr/local/www/system_camanager.php:559 usr/local/www/status_openvpn.php:214
+#: usr/local/www/system_certmanager.php:768
+#: usr/local/www/system_certmanager.php:938
+#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:224
+#: usr/local/www/system_certmanager.php:769
+#: usr/local/www/system_certmanager.php:942
+msgid "Common Name"
+msgstr "Nome Comum"
+
+#: usr/local/www/status_openvpn.php:153 usr/local/www/status_openvpn.php:154
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:155
+#: usr/local/www/status_openvpn.php:225
+msgid "Real Address"
+msgstr "Endereço Real"
+
+#: usr/local/www/status_openvpn.php:154 usr/local/www/status_openvpn.php:155
+#: usr/local/www/status_openvpn.php:156
+msgid "Virtual Address"
+msgstr "Endereço Virtual"
+
+#: usr/local/www/status_openvpn.php:155 usr/local/www/status_openvpn.php:213
+#: usr/local/www/status_openvpn.php:264 usr/local/www/status_openvpn.php:156
+#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:267
+#: usr/local/www/status_openvpn.php:315 usr/local/www/status_openvpn.php:157
+#: usr/local/www/status_openvpn.php:274 usr/local/www/status_openvpn.php:335
+msgid "Connected Since"
+msgstr "Conectado desde"
+
+#: usr/local/www/status_openvpn.php:156 usr/local/www/status_openvpn.php:216
+#: usr/local/www/status_openvpn.php:267 usr/local/www/status_openvpn.php:157
+#: usr/local/www/status_openvpn.php:219 usr/local/www/status_openvpn.php:270
+#: usr/local/www/status_openvpn.php:318 usr/local/www/status_openvpn.php:158
+#: usr/local/www/status_openvpn.php:277 usr/local/www/status_openvpn.php:338
+msgid "Bytes Sent"
+msgstr "Bytes Enviados"
+
+#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:217
+#: usr/local/www/status_openvpn.php:268 usr/local/www/status_openvpn.php:158
+#: usr/local/www/status_openvpn.php:220 usr/local/www/status_openvpn.php:271
+#: usr/local/www/status_openvpn.php:319 usr/local/www/status_openvpn.php:159
+msgid "Bytes Received"
+msgstr "Bytes Recebidos"
+
+#: usr/local/www/status_openvpn.php:184 usr/local/www/status_openvpn.php:185
+#: usr/local/www/status_openvpn.php:186
+msgid "Kill client connection from"
+msgstr "Matar conexão de cliente de"
+
+#: usr/local/www/status_openvpn.php:205 usr/local/www/status_openvpn.php:208
+#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:266
+msgid "Peer to Peer Server Instance Statistics"
+msgstr "Estatísticas da instância do servidor Peer to Peer"
+
+#: usr/local/www/status_openvpn.php:214 usr/local/www/status_openvpn.php:265
+#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:268
+#: usr/local/www/status_openvpn.php:316 usr/local/www/status_openvpn.php:275
+#: usr/local/www/status_openvpn.php:336
+msgid "Virtual Addr"
+msgstr "Endereço Virtual"
+
+#: usr/local/www/status_openvpn.php:215 usr/local/www/status_openvpn.php:266
+#: usr/local/www/status_openvpn.php:218 usr/local/www/status_openvpn.php:269
+#: usr/local/www/status_openvpn.php:317 usr/local/www/status_openvpn.php:276
+#: usr/local/www/status_openvpn.php:337
+msgid "Remote Host"
+msgstr "Host Remoto"
+
+#: usr/local/www/status_openvpn.php:256 usr/local/www/status_openvpn.php:259
+#: usr/local/www/status_openvpn.php:307 usr/local/www/status_openvpn.php:327
+msgid "Client Instance Statistics"
+msgstr "Estatísticas de instâncias de clientes"
+
+#: usr/local/www/status_openvpn.php:304 usr/local/www/status_openvpn.php:307
+#: usr/local/www/status_openvpn.php:355
+msgid "You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen"
+msgstr "Você precisa vincular cada cliente OpenVPN para habilitar seu daemon de gerenciamento: use configuração de 'Porta Local' na tela do cliente OpenVPN"
+
+#: usr/local/www/status_openvpn.php:308 usr/local/www/status_openvpn.php:311
+#: usr/local/www/status_openvpn.php:359 usr/local/www/status_openvpn.php:389
+msgid "No OpenVPN instances defined"
+msgstr "Nenhuma instância do OpenVPN definida"
+
+#: usr/local/www/system_advanced_admin.php:87
+#: usr/local/www/system_advanced_admin.php:88
+msgid "You must specify a valid webConfigurator port number"
+msgstr "Você deve especificar um número de porta do webConfigurator válido"
+
+#: usr/local/www/system_advanced_admin.php:91
+#: usr/local/www/system_advanced_admin.php:92
+msgid "Max Processes must be a number 1 or greater"
+msgstr "Número máximo de processos deve ser maior que 1"
+
+#: usr/local/www/system_advanced_admin.php:97
+#: usr/local/www/system_advanced_admin.php:98
+#, php-format
+msgid "Alternate hostname %s is not a valid hostname."
+msgstr "Hostnane alternativo %s não é um hostname valido."
+
+#: usr/local/www/system_advanced_admin.php:102
+#: usr/local/www/services_dnsmasq.php:92
+#: usr/local/www/system_advanced_admin.php:103
+msgid "You must specify a valid port number"
+msgstr "Você deve especificar um número de porta válido"
+
+#: usr/local/www/system_advanced_admin.php:232
+#: usr/local/www/system_advanced_admin.php:238
+#, php-format
+msgid "One moment...redirecting to %s in 20 seconds."
+msgstr "Um momento... redirecionando para %s em 20 segundos."
+
+#: usr/local/www/system_advanced_admin.php:242
+#: usr/local/www/system_advanced_admin.php:263
+msgid "Advanced: Admin Access"
+msgstr "Avançado: Acesso de Administrador"
+
+#: usr/local/www/system_advanced_admin.php:274
+#: usr/local/www/system_advanced_firewall.php:215
+#: usr/local/www/system_advanced_misc.php:206
+#: usr/local/www/system_advanced_network.php:182
+#: usr/local/www/system_advanced_notifications.php:151
+#: usr/local/www/system_advanced_sysctl.php:147
+#: usr/local/www/system_advanced_firewall.php:229
+#: usr/local/www/system_advanced_notifications.php:160
+#: usr/local/www/system_advanced_misc.php:232
+#: usr/local/www/system_advanced_misc.php:251
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_firewall.php:258
+#: usr/local/www/system_advanced_misc.php:302
+#: usr/local/www/system_advanced_admin.php:295
+#: usr/local/www/system_advanced_misc.php:308
+#: usr/local/www/system_advanced_firewall.php:269
+#: usr/local/www/system_advanced_notifications.php:175
+#: usr/local/www/system_advanced_network.php:181
+msgid "Admin Access"
+msgstr "Acesso de Administrador"
+
+#: usr/local/www/system_advanced_admin.php:275
+#: usr/local/www/system_advanced_firewall.php:216
+#: usr/local/www/system_advanced_misc.php:207
+#: usr/local/www/system_advanced_network.php:183
+#: usr/local/www/system_advanced_notifications.php:152
+#: usr/local/www/system_advanced_sysctl.php:148
+#: usr/local/www/system_advanced_firewall.php:230
+#: usr/local/www/system_advanced_notifications.php:161
+#: usr/local/www/system_advanced_misc.php:233
+#: usr/local/www/system_advanced_misc.php:252
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_firewall.php:259
+#: usr/local/www/system_advanced_misc.php:303
+#: usr/local/www/system_advanced_admin.php:296
+#: usr/local/www/system_advanced_misc.php:309
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_notifications.php:176
+#: usr/local/www/system_advanced_network.php:182
+msgid "Firewall / NAT"
+msgstr "Firewall / NAT"
+
+#: usr/local/www/system_advanced_admin.php:276
+#: usr/local/www/system_advanced_firewall.php:217
+#: usr/local/www/system_advanced_misc.php:208
+#: usr/local/www/system_advanced_network.php:184
+#: usr/local/www/system_advanced_notifications.php:153
+#: usr/local/www/system_advanced_sysctl.php:149
+#: usr/local/www/system_advanced_firewall.php:231
+#: usr/local/www/system_advanced_notifications.php:162
+#: usr/local/www/system_advanced_misc.php:234
+#: usr/local/www/system_advanced_misc.php:253
+#: usr/local/www/system_advanced_misc.php:257
+#: usr/local/www/system_advanced_firewall.php:260
+#: usr/local/www/system_advanced_misc.php:304
+#: usr/local/www/system_advanced_admin.php:297
+#: usr/local/www/system_advanced_misc.php:310
+#: usr/local/www/system_advanced_firewall.php:271
+#: usr/local/www/system_advanced_notifications.php:177
+#: usr/local/www/system_advanced_network.php:183
+msgid "Networking"
+msgstr "Rede"
+
+#: usr/local/www/system_advanced_admin.php:277
+#: usr/local/www/system_advanced_firewall.php:218
+#: usr/local/www/system_advanced_misc.php:209
+#: usr/local/www/system_advanced_network.php:185
+#: usr/local/www/system_advanced_notifications.php:154
+#: usr/local/www/system_advanced_sysctl.php:150
+#: usr/local/www/system_advanced_firewall.php:232
+#: usr/local/www/system_advanced_notifications.php:163
+#: usr/local/www/system_advanced_misc.php:235
+#: usr/local/www/system_advanced_misc.php:254
+#: usr/local/www/system_advanced_misc.php:258
+#: usr/local/www/system_advanced_firewall.php:261
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_admin.php:298
+#: usr/local/www/system_advanced_misc.php:311
+#: usr/local/www/system_advanced_firewall.php:272
+#: usr/local/www/system_advanced_notifications.php:178
+#: usr/local/www/system_advanced_network.php:184
+msgid "Miscellaneous"
+msgstr "Diversos"
+
+#: usr/local/www/system_advanced_admin.php:278
+#: usr/local/www/system_advanced_firewall.php:219
+#: usr/local/www/system_advanced_misc.php:210
+#: usr/local/www/system_advanced_network.php:186
+#: usr/local/www/system_advanced_notifications.php:155
+#: usr/local/www/system_advanced_sysctl.php:151
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_notifications.php:164
+#: usr/local/www/system_advanced_misc.php:236
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_misc.php:259
+#: usr/local/www/system_advanced_firewall.php:262
+#: usr/local/www/system_advanced_misc.php:306
+#: usr/local/www/system_advanced_admin.php:299
+#: usr/local/www/system_advanced_misc.php:312
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/system_advanced_notifications.php:179
+#: usr/local/www/system_advanced_network.php:185
+msgid "System Tunables"
+msgstr "Ajustes do sistema"
+
+#: usr/local/www/system_advanced_admin.php:279
+#: usr/local/www/system_advanced_firewall.php:220
+#: usr/local/www/system_advanced_misc.php:211
+#: usr/local/www/system_advanced_network.php:187
+#: usr/local/www/system_advanced_notifications.php:156
+#: usr/local/www/system_advanced_sysctl.php:152
+#: usr/local/www/system_advanced_firewall.php:234
+#: usr/local/www/system_advanced_notifications.php:165
+#: usr/local/www/system_advanced_misc.php:237
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_misc.php:260
+#: usr/local/www/system_advanced_firewall.php:263
+#: usr/local/www/system_advanced_misc.php:307
+#: usr/local/www/system_advanced_admin.php:300
+#: usr/local/www/system_advanced_misc.php:313
+#: usr/local/www/system_advanced_firewall.php:274
+#: usr/local/www/system_advanced_notifications.php:180
+#: usr/local/www/system_advanced_network.php:186
+msgid "Notifications"
+msgstr "Notificações"
+
+#: usr/local/www/system_advanced_admin.php:297
+#: usr/local/www/system_advanced_admin.php:318
+msgid "webConfigurator"
+msgstr "webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:317
+#: usr/local/www/system_advanced_admin.php:338
+msgid "No Certificates have been defined. You must"
+msgstr "Nenhum Certificado foi definido. Você deve"
+
+#: usr/local/www/system_advanced_admin.php:318
+#: usr/local/www/system_advanced_admin.php:339
+msgid "Create or Import"
+msgstr "Criar ou Importar"
+
+#: usr/local/www/system_advanced_admin.php:319
+#: usr/local/www/system_advanced_admin.php:340
+msgid "a Certificate before SSL can be enabled."
+msgstr "um Certificado antes de habilitar o SSL."
+
+#: usr/local/www/system_advanced_admin.php:324
+#: usr/local/www/services_captiveportal.php:872
+#: usr/local/www/services_captiveportal.php:874
+#: usr/local/www/services_captiveportal.php:890
+#: usr/local/www/system_advanced_admin.php:345
+msgid "SSL Certificate"
+msgstr "Certificado SSL"
+
+#: usr/local/www/system_advanced_admin.php:339
+#: usr/local/www/system_advanced_admin.php:360
+msgid "TCP port"
+msgstr "Porta TCP"
+
+#: usr/local/www/system_advanced_admin.php:344
+#: usr/local/www/system_advanced_admin.php:365
+msgid "Enter a custom port number for the webConfigurator above if you want to override the default (80 for HTTP, 443 for HTTPS). Changes will take effect immediately after save."
+msgstr "Informe um número de porta personalizado para o webConfigurator acima se desejar sobrescrever o padrão (80 para HTTP, 433 para HTTPS). Mudança terão efeito imediatamente após salvar."
+
+#: usr/local/www/system_advanced_admin.php:351
+#: usr/local/www/system_advanced_admin.php:372
+msgid "Max Processes"
+msgstr "Número máximo de processos"
+
+#: usr/local/www/system_advanced_admin.php:356
+#: usr/local/www/system_advanced_admin.php:377
+msgid "Enter the number of webConfigurator processes you want to run. This defaults to 2. Increasing this will allow more users/browsers to access the GUI concurrently."
+msgstr "Número máximo de processos para o WebConfigurator. O padrão é 2. Aumentando o número, você aumentara o número de usuários simultâneos que poderão logar no WebConfigurator."
+
+#: usr/local/www/system_advanced_admin.php:363
+#: usr/local/www/system_advanced_admin.php:384
+msgid "WebGUI redirect"
+msgstr "Redirecionamento WebGUI"
+
+#: usr/local/www/system_advanced_admin.php:366
+#: usr/local/www/system_advanced_admin.php:387
+msgid "Disable webConfigurator redirect rule"
+msgstr "Desabiliar regra de redirecionamento do webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:368
+#: usr/local/www/system_advanced_admin.php:389
+msgid "When this is unchecked, access to the webConfigurator is always permitted even on port 80, regardless of the listening port configured. Check this box to disable this automatically added redirect rule. "
+msgstr "Quando isso estiver desmarcado, o acesso ao webConfigurator será sempre permitido mesmo na porta 80, independentemente de qual porta de leitura que estiver configurada. Marque essa caixa para desabilitar essa regra de redirecionamento automaticamente adicionada."
+
+#: usr/local/www/system_advanced_admin.php:375
+#: usr/local/www/system_advanced_admin.php:396
+msgid "WebGUI Login Autocomplete"
+msgstr "Autocompletar Login do WebGUI"
+
+#: usr/local/www/system_advanced_admin.php:378
+#: usr/local/www/system_advanced_admin.php:399
+msgid "Disable webConfigurator login autocomplete"
+msgstr "Desabilitar autocompletar do Login do webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:380
+#: usr/local/www/system_advanced_admin.php:401
+msgid "When this is unchecked, login credentials for the webConfigurator may be saved by the browser. While convenient, some security standards require this to be disabled. Check this box to disable autocomplete on the login form so that browsers will not prompt to save credentials (NOTE: Some browsers do not respect this option). "
+msgstr "Quando esta estiver desmarcada, credenciais de login para o webConfigurator podem ser salvas pelo navegador. Enquanto conveniente, algumas normas de segurança exigem que este seja desativado. Marque esta caixa para desativar autocomplete no formulário de login para que os navegadores não solicitará para salvar as credenciais (NOTA: Alguns navegadores não respeitam essa opção)"
+
+#: usr/local/www/system_advanced_admin.php:387
+#: usr/local/www/system_advanced_admin.php:408
+msgid "WebGUI login messages"
+msgstr "WebGUI mensagens de login"
+
+#: usr/local/www/system_advanced_admin.php:390
+#: usr/local/www/system_advanced_admin.php:411
+msgid "Disable logging of webConfigurator successful logins"
+msgstr "Desabiliar log de logins efetuados com sucesso no webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:392
+#: usr/local/www/system_advanced_admin.php:413
+msgid "When this is checked, successful logins to the webConfigurator will not be logged."
+msgstr "Quando esta opção estiver marcada, não haverá log de login com sucesso na interface Web."
+
+#: usr/local/www/system_advanced_admin.php:398
+#: usr/local/www/system_advanced_admin.php:419
+msgid "Anti-lockout"
+msgstr "Anti-lockout"
+
+#: usr/local/www/system_advanced_admin.php:407
+#: usr/local/www/system_advanced_admin.php:428
+msgid "Disable webConfigurator anti-lockout rule"
+msgstr "Desabilitar regra anti-lockout do webConfigurator"
+
+#: usr/local/www/system_advanced_admin.php:409
+#: usr/local/www/system_advanced_admin.php:430
+#, php-format
+msgid "When this is unchecked, access to the webConfigurator on the %s interface is always permitted, regardless of the user-defined firewall rule set. Check this box to disable this automatically added rule, so access to the webConfigurator is controlled by the user-defined firewall rules (ensure you have a firewall rule in place that allows you in, or you will lock yourself out!)"
+msgstr "Quando isso estiver desmarcado, acesso ao webConfigurator na interface %s é sempre permitido, independentemente do conjunto de regras de firewall definido pelo usuário. Maque essa opção para desabilitar essa regra automaticamente adicionada, para que o acesso ao webConfigurator seja controlado pelas regras de firewall definidas pelo usuário (tenha certeza de que possui uma regra de firewall que lhe dá permissão de acesso, ou você não conseguirá mais o acesso!)"
+
+#: usr/local/www/system_advanced_admin.php:415
+#: usr/local/www/system_advanced_admin.php:436
+msgid "Hint: the &quot;Set interface(s) IP address&quot; option in the console menu resets this setting as well."
+msgstr "Dica: a opção &quot;Configure o endereço IP de interface(s)&quot; no menu do console reinicia essa configuração da mesma forma."
+
+#: usr/local/www/system_advanced_admin.php:419
+#: usr/local/www/system_advanced_admin.php:440
+msgid "DNS Rebind Check"
+msgstr "Verificação de DNS Rebind"
+
+#: usr/local/www/system_advanced_admin.php:422
+#: usr/local/www/system_advanced_admin.php:443
+msgid "Disable DNS Rebinding Checks"
+msgstr "Desabilitar Verificação DNS Rebinding"
+
+#: usr/local/www/system_advanced_admin.php:424
+#: usr/local/www/system_advanced_admin.php:445
+msgid "When this is unchecked, your system is protected against <a href=\"http://en.wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with webConfigurator access or name resolution in your environment. "
+msgstr "Quando isso estiver desmarcado, acesso ao webConfigurator é protegido contra <a href=\"http://en.wikipedia.org/wiki/DNS_rebinding\">Ataques de DNS Rebinding</a>. Isto bloqueia respostas de IPs privados de seu servidor DNS. Marque essa opção para desabilitar essa proteção se você achar que ela interfere no acesso do webConfigurator em alguns casos."
+
+#: usr/local/www/system_advanced_admin.php:431
+#: usr/local/www/system_advanced_admin.php:452
+msgid "Alternate Hostnames"
+msgstr "Nomes de host alternativo"
+
+#: usr/local/www/system_advanced_admin.php:435
+#: usr/local/www/system_advanced_admin.php:456
+msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"
+msgstr "Alternar Nomes de host por DNS Rebinding e checagem de HTTP_REFERER"
+
+#: usr/local/www/system_advanced_admin.php:437
+#: usr/local/www/system_advanced_admin.php:458
+msgid "Here you can specify alternate hostnames by which the router may be queried, to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."
+msgstr "Aqui você especifica nomes de hosts alternativos pelos quais o roteador pode ser colocado em fila, para evitar verificações de ataques de DNS Bindings. Separe os nomes dos hosts com espaços."
+
+#: usr/local/www/system_advanced_admin.php:442
+#: usr/local/www/system_advanced_admin.php:463
+msgid "Browser HTTP_REFERER enforcement"
+msgstr "Execução de HTTP_REFERER de navegação"
+
+#: usr/local/www/system_advanced_admin.php:445
+#: usr/local/www/system_advanced_admin.php:466
+msgid "Disable HTTP_REFERER enforcement check"
+msgstr "Desabilitar verificação de execução de HTTP_REFERER"
+
+#: usr/local/www/system_advanced_admin.php:447
+msgid "When this is unchecked, access to the webConfigurator is protected against HTTP_REFERER redirection attempts. Check this box to disable this protection if you find that it interferes with webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from <a target='_new' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr "Quando isso não estiver marcado, acesso ao webConfigurator está protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteção se achar que isso interfere com o acesso ao webConfigurator em alguns casos específicos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informações sobre HTTP_REFERER estão disponíveis em <a target='_new' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+
+#: usr/local/www/system_advanced_admin.php:457
+#: usr/local/www/system_advanced_admin.php:494
+msgid "Secure Shell"
+msgstr "Secure Shell"
+
+#: usr/local/www/system_advanced_admin.php:460
+#: usr/local/www/system_advanced_admin.php:497
+msgid "Secure Shell Server"
+msgstr "Servidor de Secure Shell"
+
+#: usr/local/www/system_advanced_admin.php:463
+#: usr/local/www/system_advanced_admin.php:500
+msgid "Enable Secure Shell"
+msgstr "Habilitar Secure Shell"
+
+#: usr/local/www/system_advanced_admin.php:467
+#: usr/local/www/system_advanced_admin.php:504
+msgid "Authentication Method"
+msgstr "Método de Autenticação"
+
+#: usr/local/www/system_advanced_admin.php:470
+msgid "Disable password login for Secure Shell (RSA key only)"
+msgstr "Desabilitar login com senha para Secure Shell (somente chave RSA)"
+
+#: usr/local/www/system_advanced_admin.php:472
+#: usr/local/www/system_advanced_admin.php:509
+msgid "When enabled, authorized keys need to be configured for each"
+msgstr "Quando desabilitado, chaves autorizadas precisam ser configuradas para cada"
+
+#: usr/local/www/system_advanced_admin.php:473
+#: usr/local/www/system_advanced_admin.php:510
+msgid "user"
+msgstr "usuário"
+
+#: usr/local/www/system_advanced_admin.php:474
+#: usr/local/www/system_advanced_admin.php:511
+msgid "that has been granted secure shell access."
+msgstr "foi concedido acesso ao secure shell."
+
+#: usr/local/www/system_advanced_admin.php:478
+#: usr/local/www/system_advanced_admin.php:515
+msgid "SSH port"
+msgstr "Porta SSH"
+
+#: usr/local/www/system_advanced_admin.php:482
+#: usr/local/www/system_advanced_admin.php:519
+msgid "Note: Leave this blank for the default of 22."
+msgstr "Nota: Deixe isso em branco para usar o padrão de 22."
+
+#: usr/local/www/system_advanced_admin.php:489
+#: usr/local/www/system_advanced_admin.php:526
+msgid "Serial Communcations"
+msgstr "Comunicações Seriais"
+
+#: usr/local/www/system_advanced_admin.php:493
+#: usr/local/www/system_advanced_admin.php:530
+msgid "Serial Terminal"
+msgstr "Terminal Serial"
+
+#: usr/local/www/system_advanced_admin.php:496
+#: usr/local/www/system_advanced_admin.php:533
+msgid "Enables the first serial port with 9600/8/N/1 by default, or another speed selectable below."
+msgstr "Habilita a primeira porta serial para 9600/8/N/1 por padrão, o outra velocidade selecionável abaixo."
+
+#: usr/local/www/system_advanced_admin.php:497
+#: usr/local/www/system_advanced_admin.php:534
+msgid "Note: This will redirect the console output and messages to the serial port. You can still access the console menu from the internal video card/keyboard. A <b>null modem</b> serial cable or adapter is required to use the serial console."
+msgstr "Nota: Isto irá redirecionar a saída do console e mensagens para a porta serial. VOcê pode permanecer acessando o menu console de um monitor cartão/teclado. Um cabo serial <b>null modem</b> ou adaptador são requeridos para uso do console serial."
+
+#: usr/local/www/system_advanced_admin.php:502
+#: usr/local/www/system_advanced_admin.php:539
+msgid "Serial Speed"
+msgstr "Velocidade da porta serial"
+
+#: usr/local/www/system_advanced_admin.php:512
+#: usr/local/www/system_advanced_admin.php:549
+msgid "Allows selection of different speeds for the serial console port."
+msgstr "Possibilita selecionar diferentes velocidades para a porta serial do console."
+
+#: usr/local/www/system_advanced_admin.php:519
+#: usr/local/www/system_advanced_admin.php:556
+msgid "Console Options"
+msgstr "Opções de Console"
+
+#: usr/local/www/system_advanced_admin.php:522
+#: usr/local/www/system_advanced_admin.php:559
+msgid "Console menu"
+msgstr "Menu do Console"
+
+#: usr/local/www/system_advanced_admin.php:525
+#: usr/local/www/system_advanced_admin.php:562
+msgid "Password protect the console menu"
+msgstr "Proteger menu do console com senha"
+
+#: usr/local/www/system_advanced_admin.php:527
+#: usr/local/www/system_advanced_admin.php:564
+msgid "Changes to this option will take effect after a reboot."
+msgstr "Alterações nesta opção terão efeito após reboot."
+
+#: usr/local/www/system_advanced_admin.php:564
+#: usr/local/www/system_advanced_admin.php:601
+msgid "secure shell configuration has changed. Stopping sshd."
+msgstr "configuração de secure shell foi modificada. Interrompendo sshd."
+
+#: usr/local/www/system_advanced_admin.php:567
+#: usr/local/www/system_advanced_admin.php:604
+msgid "secure shell configuration has changed. Restarting sshd."
+msgstr "configuração de secure shell foi modificada. Reiniciando sshd."
+
+#: usr/local/www/system_advanced_admin.php:574
+#: usr/local/www/diag_logs_settings.php:153
+#: usr/local/www/system_advanced_admin.php:611
+msgid "webConfigurator configuration has changed. Restarting webConfigurator."
+msgstr "configuração do webConfigurator foi modificada. Reiniciando webConfigurator."
+
+#: usr/local/www/system_advanced_firewall.php:78
+#: usr/local/www/system_advanced_firewall.php:77
+#: usr/local/www/system_advanced_firewall.php:88
+#: usr/local/www/system_advanced_firewall.php:90
+msgid "The Firewall Maximum States value must be an integer."
+msgstr "O valor de estado máximo do Firewall deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:81
+#: usr/local/www/system_advanced_firewall.php:83
+#: usr/local/www/system_advanced_firewall.php:94
+#: usr/local/www/system_advanced_firewall.php:99
+msgid "The Firewall Maximum Table Entries value must be an integer."
+msgstr "O valor máximo das entradas da tabela do Firewall deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:84
+#: usr/local/www/system_advanced_firewall.php:86
+#: usr/local/www/system_advanced_firewall.php:97
+#: usr/local/www/system_advanced_firewall.php:102
+msgid "The TCP idle timeout must be an integer."
+msgstr "O tempo ocioso TCP deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:87
+#: usr/local/www/system_advanced_firewall.php:89
+#: usr/local/www/system_advanced_firewall.php:100
+#: usr/local/www/system_advanced_firewall.php:105
+msgid "The Reflection timeout must be an integer."
+msgstr "O tempo de expiração de Reflection deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:178
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/system_advanced_firewall.php:221
+#: usr/local/www/system_advanced_firewall.php:232
+msgid "Advanced: Firewall and NAT"
+msgstr "Avançado: Firewall e NAT"
+
+#: usr/local/www/system_advanced_firewall.php:190
+#: usr/local/www/system_advanced_firewall.php:204
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_firewall.php:244
+msgid "as the name says, it's the normal optimization algorithm"
+msgstr "como o nome diz, é o algoritmo de otimização normal"
+
+#: usr/local/www/system_advanced_firewall.php:191
+#: usr/local/www/system_advanced_firewall.php:205
+#: usr/local/www/system_advanced_firewall.php:234
+#: usr/local/www/system_advanced_firewall.php:245
+msgid "used for high latency links, such as satellite links. Expires idle connections later than default"
+msgstr "usado para links de latência alta, como os links satélites. Expira conexões ociosas mais tarde que o padrão"
+
+#: usr/local/www/system_advanced_firewall.php:192
+#: usr/local/www/system_advanced_firewall.php:206
+msgid "expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate connections"
+msgstr "expira conexões ociosas mais rápido. Faz uso mais eficiente da CPU e da memória mas pode derrubar conexões legítimas"
+
+#: usr/local/www/system_advanced_firewall.php:193
+#: usr/local/www/system_advanced_firewall.php:207
+msgid "tries to avoid dropping any legitimate connections at the expense of increased memory usage and CPU utilization."
+msgstr "tenta evitar queda de qualquer conexão legítima às custas do uso de memória e utilização de CPU."
+
+#: usr/local/www/system_advanced_firewall.php:239
+#: usr/local/www/system_advanced_firewall.php:253
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:281
+#: usr/local/www/system_advanced_firewall.php:292
+msgid "Firewall Advanced"
+msgstr "Firewall Avançado"
+
+#: usr/local/www/system_advanced_firewall.php:242
+#: usr/local/www/system_advanced_firewall.php:256
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_firewall.php:284
+#: usr/local/www/system_advanced_firewall.php:295
+msgid "IP Do-Not-Fragment compatibility"
+msgstr "Compatibilidade com IP Do-Not-Fragment"
+
+#: usr/local/www/system_advanced_firewall.php:245
+#: usr/local/www/system_advanced_firewall.php:259
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_firewall.php:298
+msgid "Clear invalid DF bits instead of dropping the packets"
+msgstr "Limpar bits DF inválidos ao invés de descartar os pacotes"
+
+#: usr/local/www/system_advanced_firewall.php:246
+#: usr/local/www/system_advanced_firewall.php:260
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:299
+msgid "This allows for communications with hosts that generate fragmented packets with the don't fragment (DF) bit set. Linux NFS is known to do this. This will cause the filter to not drop such packets but instead clear the don't fragment bit."
+msgstr "Isso dá permissão para comunicações com hosts que geram pacotes fragmentados com o conjunto de bits don't fragment (DF). Linux NFS é conhecido por isso. Isso irá fazer com que o filtro não descarte tais pacotes mas, ao invés disso, limpará o bit don't fragment."
+
+#: usr/local/www/system_advanced_firewall.php:253
+#: usr/local/www/system_advanced_firewall.php:267
+#: usr/local/www/system_advanced_firewall.php:296
+#: usr/local/www/system_advanced_firewall.php:295
+#: usr/local/www/system_advanced_firewall.php:306
+msgid "IP Random id generation"
+msgstr "Geração de id Randômico de IP"
+
+#: usr/local/www/system_advanced_firewall.php:256
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:298
+#: usr/local/www/system_advanced_firewall.php:309
+msgid "Insert a stronger id into IP header of packets passing through the filter."
+msgstr "Inserir o id mais forte no cabeçalho IP dos pacotes que passam no filtro."
+
+#: usr/local/www/system_advanced_firewall.php:257
+#: usr/local/www/system_advanced_firewall.php:271
+#: usr/local/www/system_advanced_firewall.php:300
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:310
+msgid "Replaces the IP identification field of packets with random values to compensate for operating systems that use predictable values. This option only applies to packets that are not fragmented after the optional packet reassembly."
+msgstr "Substitui o campo de identificação do IP de pacotes com valores randômicos para compensar por sistemas operacionais que usam valores previsíveis. Essa opção somente se aplica a pacotes que não estão fragmentados após a remontagem opcional de pacote."
+
+#: usr/local/www/system_advanced_firewall.php:264
+#: usr/local/www/system_advanced_firewall.php:278
+#: usr/local/www/system_advanced_firewall.php:307
+#: usr/local/www/system_advanced_firewall.php:306
+#: usr/local/www/system_advanced_firewall.php:317
+msgid "Firewall Optimization Options"
+msgstr "Opções de Otimização do Firewall"
+
+#: usr/local/www/system_advanced_firewall.php:267
+#: usr/local/www/system_advanced_firewall.php:281
+#: usr/local/www/system_advanced_firewall.php:310
+#: usr/local/www/system_advanced_firewall.php:309
+#: usr/local/www/system_advanced_firewall.php:320
+msgid "normal"
+msgstr "normal"
+
+#: usr/local/www/system_advanced_firewall.php:268
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:310
+#: usr/local/www/system_advanced_firewall.php:321
+msgid "high-latency"
+msgstr "alta-latência"
+
+#: usr/local/www/system_advanced_firewall.php:269
+#: usr/local/www/system_advanced_firewall.php:283
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:322
+msgid "aggressive"
+msgstr "agressivo"
+
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_firewall.php:284
+#: usr/local/www/system_advanced_firewall.php:313
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:323
+msgid "conservative"
+msgstr "conservador"
+
+#: usr/local/www/system_advanced_firewall.php:278
+#: usr/local/www/system_advanced_firewall.php:292
+#: usr/local/www/system_advanced_firewall.php:321
+#: usr/local/www/system_advanced_firewall.php:322
+#: usr/local/www/system_advanced_firewall.php:333
+msgid "Select the type of state table optimization to use"
+msgstr "Selecione o tipo de otimização de tabela de estado a ser usado"
+
+#: usr/local/www/system_advanced_firewall.php:282
+#: usr/local/www/system_advanced_firewall.php:296
+#: usr/local/www/system_advanced_firewall.php:325
+#: usr/local/www/system_advanced_firewall.php:326
+#: usr/local/www/system_advanced_firewall.php:337
+msgid "Disable Firewall"
+msgstr "Desabilitar Firewall"
+
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_firewall.php:299
+#: usr/local/www/system_advanced_firewall.php:328
+#: usr/local/www/system_advanced_firewall.php:329
+#: usr/local/www/system_advanced_firewall.php:340
+msgid "Disable all packet filtering."
+msgstr "Desabilitar todos os filtros de pacotes."
+
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_firewall.php:301
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:342
+#, php-format
+msgid "Note: This converts %s into a routing only platform!"
+msgstr "Nota: Isso converte %s em uma plataforma de roteamento somente!"
+
+#: usr/local/www/system_advanced_firewall.php:288
+#: usr/local/www/system_advanced_firewall.php:302
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:343
+msgid "Note: This will also turn off NAT!"
+msgstr "Nota: Isso também irá desligar o NAT!"
+
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/system_advanced_firewall.php:344
+msgid "If you only want to disable NAT, and not firewall rules, visit the"
+msgstr "Se você quer desabilitar o NAT, e não regras de firewall, visite o"
+
+#: usr/local/www/system_advanced_firewall.php:289
+#: usr/local/www/system_advanced_firewall.php:303
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:333
+#: usr/local/www/system_advanced_firewall.php:344
+msgid "Outbound NAT"
+msgstr "NAT de saída"
+
+#: usr/local/www/system_advanced_firewall.php:294
+#: usr/local/www/system_advanced_firewall.php:308
+#: usr/local/www/system_advanced_firewall.php:337
+#: usr/local/www/system_advanced_firewall.php:338
+#: usr/local/www/system_advanced_firewall.php:349
+msgid "Disable Firewall Scrub"
+msgstr "Desabilitar Firewall Scrub"
+
+#: usr/local/www/system_advanced_firewall.php:297
+#: usr/local/www/system_advanced_firewall.php:311
+#: usr/local/www/system_advanced_firewall.php:340
+#: usr/local/www/system_advanced_firewall.php:341
+#: usr/local/www/system_advanced_firewall.php:352
+msgid "Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic."
+msgstr "Desabilita a opção de PF scrubbing que pode, às vezes, interferir com o NFS e tráfego PPTP."
+
+#: usr/local/www/system_advanced_firewall.php:302
+#: usr/local/www/system_advanced_firewall.php:316
+#: usr/local/www/system_advanced_firewall.php:360
+#: usr/local/www/system_advanced_firewall.php:361
+#: usr/local/www/system_advanced_firewall.php:372
+msgid "Firewall Maximum States"
+msgstr "Estados Máximos do Firewall"
+
+#: usr/local/www/system_advanced_firewall.php:306
+#: usr/local/www/system_advanced_firewall.php:320
+#: usr/local/www/system_advanced_firewall.php:364
+#: usr/local/www/system_advanced_firewall.php:365
+#: usr/local/www/system_advanced_firewall.php:376
+msgid "Maximum number of connections to hold in the firewall state table."
+msgstr "Número máximo de conexões para manter na table de estado do firewall."
+
+#: usr/local/www/system_advanced_firewall.php:308
+#: usr/local/www/system_advanced_firewall.php:322
+#: usr/local/www/system_advanced_firewall.php:366
+#: usr/local/www/system_advanced_firewall.php:367
+#: usr/local/www/system_advanced_firewall.php:378
+msgid "Note: Leave this blank for the default. On your system the default size is:"
+msgstr "Nota: Deixe em branco para o padrão. No seu sistema o tamanho padrão é:"
+
+#: usr/local/www/system_advanced_firewall.php:312
+#: usr/local/www/system_advanced_firewall.php:342
+#: usr/local/www/system_advanced_firewall.php:386
+#: usr/local/www/system_advanced_firewall.php:387
+#: usr/local/www/system_advanced_firewall.php:398
+msgid "Firewall Maximum Table Entries"
+msgstr "Máximo de Entradas da Tabela do Firewall"
+
+#: usr/local/www/system_advanced_firewall.php:316
+#: usr/local/www/system_advanced_firewall.php:346
+#: usr/local/www/system_advanced_firewall.php:390
+#: usr/local/www/system_advanced_firewall.php:391
+#: usr/local/www/system_advanced_firewall.php:402
+msgid "Maximum number of table entries for systems such as aliases, sshlockout, snort, etc, combined."
+msgstr "Número máximo de entradas da tabela para sistema tais como aliases, sshlockout, snort, etc, combinados."
+
+#: usr/local/www/system_advanced_firewall.php:319
+#: usr/local/www/system_advanced_firewall.php:334
+#: usr/local/www/system_advanced_firewall.php:349
+#: usr/local/www/system_advanced_firewall.php:378
+#: usr/local/www/system_advanced_firewall.php:393
+#: usr/local/www/system_advanced_firewall.php:379
+#: usr/local/www/system_advanced_firewall.php:394
+#: usr/local/www/system_advanced_firewall.php:390
+#: usr/local/www/system_advanced_firewall.php:405
+msgid "Note: Leave this blank for the default."
+msgstr "Nota: Deixe isso em branco para o padrão."
+
+#: usr/local/www/system_advanced_firewall.php:321
+#: usr/local/www/system_advanced_firewall.php:336
+#: usr/local/www/system_advanced_firewall.php:351
+#: usr/local/www/system_advanced_firewall.php:380
+#: usr/local/www/system_advanced_firewall.php:395
+#: usr/local/www/system_advanced_firewall.php:381
+#: usr/local/www/system_advanced_firewall.php:396
+#: usr/local/www/system_advanced_firewall.php:392
+#: usr/local/www/system_advanced_firewall.php:407
+msgid "On your system the default size is:"
+msgstr "Em seu sistema o tamanho padrão é:"
+
+#: usr/local/www/system_advanced_firewall.php:327
+#: usr/local/www/system_advanced_firewall.php:357
+#: usr/local/www/system_advanced_firewall.php:401
+#: usr/local/www/system_advanced_firewall.php:402
+#: usr/local/www/system_advanced_firewall.php:413
+msgid "Static route filtering"
+msgstr "Filtragem de rota estática"
+
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:360
+#: usr/local/www/system_advanced_firewall.php:404
+#: usr/local/www/system_advanced_firewall.php:405
+#: usr/local/www/system_advanced_firewall.php:416
+msgid "Bypass firewall rules for traffic on the same interface"
+msgstr "Evitar regras de firewall para tráfego na mesma interface"
+
+#: usr/local/www/system_advanced_firewall.php:332
+#: usr/local/www/system_advanced_firewall.php:362
+#: usr/local/www/system_advanced_firewall.php:406
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:418
+msgid "This option only applies if you have defined one or more static routes. If it is enabled, traffic that enters and leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where multiple subnets are connected to the same interface."
+msgstr "Essa opção somente se aplica se você definiu uma ou mais rotas estáticas. Se estiver habilitada, o tráfego que entra e sai da mesma interface não será verificado pelo firewall. Isso pode ser desejável em algumas situações onde múltiplas redes estão conectadas na mesma interface."
+
+#: usr/local/www/system_advanced_firewall.php:342
+#: usr/local/www/system_advanced_firewall.php:372
+#: usr/local/www/system_advanced_firewall.php:416
+#: usr/local/www/system_advanced_firewall.php:417
+#: usr/local/www/system_advanced_firewall.php:428
+msgid "Disable all auto-added VPN rules."
+msgstr "Desabilita as regras VPN auto-adicionadas."
+
+#: usr/local/www/system_advanced_firewall.php:344
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:418
+#: usr/local/www/system_advanced_firewall.php:419
+#: usr/local/www/system_advanced_firewall.php:430
+msgid "Note: This disables automatically added rules for IPsec, PPTP."
+msgstr "Nota: Isso desativa automaticamente as regras adicionadas de IPsec, PPTP."
+
+#: usr/local/www/system_advanced_firewall.php:352
+#: usr/local/www/system_advanced_firewall.php:382
+#: usr/local/www/system_advanced_firewall.php:426
+#: usr/local/www/system_advanced_firewall.php:427
+#: usr/local/www/system_advanced_firewall.php:438
+msgid "Disable reply-to on WAN rules"
+msgstr "Desabilitar reply-to nas regras WAN"
+
+#: usr/local/www/system_advanced_firewall.php:354
+#: usr/local/www/system_advanced_firewall.php:384
+#: usr/local/www/system_advanced_firewall.php:428
+#: usr/local/www/system_advanced_firewall.php:429
+#: usr/local/www/system_advanced_firewall.php:440
+msgid "With Multi-WAN you generally want to ensure traffic leaves the same interface it arrives on, hence reply-to is added automatically by default. When using bridging, you must disable this behavior if the WAN gateway IP is different from the gateway IP of the hosts behind the bridged interface."
+msgstr "Com Multi-WAN você geralmente quer garantir que o tráfego saia pela mesmas interface pode onde ele chegou, portanto, reply-to é automaticamente adicionado por padrão. Quando utilizando bridge, você precisa desabilitar este comportamento se o IP do gateway da WAN é diferente do IP do gateway dos hosts atrás da inteface bridge."
+
+#: usr/local/www/system_advanced_firewall.php:364
+#: usr/local/www/system_advanced_firewall.php:404
+#: usr/local/www/system_advanced_firewall.php:466
+#: usr/local/www/system_advanced_firewall.php:467
+#: usr/local/www/system_advanced_firewall.php:488
+msgid "Network Address Translation"
+msgstr "Tradução de Endereço de Rede"
+
+#: usr/local/www/system_advanced_firewall.php:367
+msgid "Disable NAT Reflection for port forwards"
+msgstr "Desabilitar NAT Reflection para encaminhamentos de portas"
+
+#: usr/local/www/system_advanced_firewall.php:370
+msgid "Disables the automatic creation of additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks. Note: Reflection for port forward entries is skipped for ranges larger than 500 ports."
+msgstr "Desabilita a criação automática de regras de redirecionamento NAT adicionais para acesso a encaminhamento de portas para seu endereço IP externo de dentro de suas redes internas. Nota: Reflection para entradas de encaminhamento de porta não é feito para intervalos maiores que 500 portas."
+
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:425
+#: usr/local/www/system_advanced_firewall.php:487
+#: usr/local/www/system_advanced_firewall.php:488
+#: usr/local/www/system_advanced_firewall.php:509
+msgid "Reflection Timeout"
+msgstr "Tempo de expiração de Reflection"
+
+#: usr/local/www/system_advanced_firewall.php:377
+msgid "Enter value for Reflection timeout in seconds. Note: Only applies to Reflection on port forwards."
+msgstr "Informe o valor para tempo de expiração de Reflection em segundos. Nota: Somente se aplica a Reflection em encaminhamentos de porta."
+
+#: usr/local/www/system_advanced_firewall.php:381
+msgid "Disable NAT Reflection for 1:1 NAT"
+msgstr "Desabilitar NAT Reflection para 1:1 NAT"
+
+#: usr/local/www/system_advanced_firewall.php:384
+msgid "Disables the automatic creation of additional NAT 1:1 mappings for access to 1:1 mappings of your external IP addresses from within your internal networks. Note: Reflection for 1:1 NAT might not fully work in certain complex routing scenarios."
+msgstr "Desabilita a criação automática de mapeamentos NAT 1:1 adicionais para acessar os mapeamentos 1:1 de seus endereços IP externos de dentro de sua rede interna. Nota: Reflection para 1:1 NAT pode não funcionar totalmente em certos cenários de roteamento complexos."
+
+#: usr/local/www/system_advanced_firewall.php:391
+#: usr/local/www/system_advanced_firewall.php:448
+#: usr/local/www/system_advanced_firewall.php:510
+#: usr/local/www/system_advanced_firewall.php:511
+#: usr/local/www/system_advanced_firewall.php:532
+msgid "Automatically create outbound NAT rules which assist inbound NAT rules that direct traffic back out to the same subnet it originated from."
+msgstr "Regra de saída NAT criada automaticamente que assistem regras de entrada para direcionar o trágefo de volta à mesma sub-rede que a originou."
+
+#: usr/local/www/system_advanced_firewall.php:393
+msgid "Currently only applies to 1:1 NAT rules. Required for full functionality of NAT Reflection for 1:1 NAT."
+msgstr "Atualmente só aplicado a regras NAT 1:1. Requerido para funcionalidade total da Reflexão de NAT para NAT 1:1."
+
+#: usr/local/www/system_advanced_firewall.php:397
+#: usr/local/www/system_advanced_firewall.php:456
+#: usr/local/www/system_advanced_firewall.php:518
+#: usr/local/www/system_advanced_firewall.php:519
+#: usr/local/www/system_advanced_firewall.php:540
+msgid "TFTP Proxy"
+msgstr "TFTP Proxy"
+
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:466
+#: usr/local/www/system_advanced_firewall.php:528
+#: usr/local/www/system_advanced_firewall.php:529
+#: usr/local/www/system_advanced_firewall.php:550
+msgid "Choose the interfaces where you want TFTP proxy helper to be enabled."
+msgstr "Escolha as interfaces onde deseja habilitar o TFTP proxy helper."
+
+#: usr/local/www/system_advanced_misc.php:179
+#: usr/local/www/system_advanced_misc.php:199
+#: usr/local/www/system_advanced_misc.php:218
+#: usr/local/www/system_advanced_misc.php:222
+#: usr/local/www/system_advanced_misc.php:254
+#: usr/local/www/system_advanced_misc.php:260
+msgid "Advanced: Miscellaneous"
+msgstr "Avançado: Diversos"
+
+#: usr/local/www/system_advanced_misc.php:229
+#: usr/local/www/system_advanced_misc.php:255
+#: usr/local/www/system_advanced_misc.php:274
+#: usr/local/www/system_advanced_misc.php:278
+#: usr/local/www/system_advanced_misc.php:325
+#: usr/local/www/system_advanced_misc.php:331
+msgid "Proxy support"
+msgstr "Suporte a Proxy"
+
+#: usr/local/www/system_advanced_misc.php:232
+#: usr/local/www/system_advanced_misc.php:258
+#: usr/local/www/system_advanced_misc.php:277
+#: usr/local/www/system_advanced_misc.php:281
+#: usr/local/www/system_advanced_misc.php:328
+#: usr/local/www/system_advanced_misc.php:334
+msgid "Proxy URL"
+msgstr "URL do Proxy"
+
+#: usr/local/www/system_advanced_misc.php:236
+#: usr/local/www/system_advanced_misc.php:262
+#: usr/local/www/system_advanced_misc.php:281
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:338
+#, php-format
+msgid "Proxy url for allowing %s to use this proxy to connect outside."
+msgstr "Url de proxy para permitir %s para usar este proxy para se conectar de fora."
+
+#: usr/local/www/system_advanced_misc.php:240
+#: usr/local/www/system_advanced_misc.php:266
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:342
+msgid "Proxy Port"
+msgstr "Porta do Proxy"
+
+#: usr/local/www/system_advanced_misc.php:244
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:346
+#, php-format
+msgid "Proxy port to use when %s connects to the proxy URL configured above. Default is 8080 for http protocol or 443 for ssl."
+msgstr "Porta de proxy para usar quando %s se conecta à URL do proxy configurado acima. Padrão é 8080 para o protocolo HTTP ou 443 para SSL."
+
+#: usr/local/www/system_advanced_misc.php:248
+#: usr/local/www/system_advanced_misc.php:274
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:344
+#: usr/local/www/system_advanced_misc.php:350
+msgid "Proxy Username"
+msgstr "Usuário Proxy"
+
+#: usr/local/www/system_advanced_misc.php:252
+#: usr/local/www/system_advanced_misc.php:278
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:301
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:354
+#, php-format
+msgid "Proxy username for allowing %s to use this proxy to connect outside"
+msgstr "Nome de usuário de Proxy para permitir %s para usar este proxy para se conectar fora"
+
+#: usr/local/www/system_advanced_misc.php:256
+#: usr/local/www/system_advanced_misc.php:282
+#: usr/local/www/system_advanced_misc.php:301
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_misc.php:352
+#: usr/local/www/system_advanced_misc.php:358
+msgid "Proxy Pass"
+msgstr "Proxy Pass"
+
+#: usr/local/www/system_advanced_misc.php:260
+#: usr/local/www/system_advanced_misc.php:286
+#: usr/local/www/system_advanced_misc.php:305
+#: usr/local/www/system_advanced_misc.php:309
+#: usr/local/www/system_advanced_misc.php:356
+#: usr/local/www/system_advanced_misc.php:362
+#, php-format
+msgid "Proxy password for allowing %s to use this proxy to connect outside"
+msgstr "Senha do proxy para permitir %s para usar esse proxy para se conectar fora"
+
+#: usr/local/www/system_advanced_misc.php:264
+#: usr/local/www/system_advanced_misc.php:267
+#: usr/local/www/system_advanced_misc.php:282
+#: usr/local/www/system_advanced_misc.php:290
+#: usr/local/www/system_advanced_misc.php:293
+#: usr/local/www/system_advanced_misc.php:314
+#: usr/local/www/system_advanced_misc.php:309
+#: usr/local/www/system_advanced_misc.php:312
+#: usr/local/www/system_advanced_misc.php:333
+#: usr/local/www/system_advanced_misc.php:313
+#: usr/local/www/system_advanced_misc.php:316
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:360
+#: usr/local/www/system_advanced_misc.php:363
+#: usr/local/www/system_advanced_misc.php:384
+#: usr/local/www/system_advanced_misc.php:366
+#: usr/local/www/system_advanced_misc.php:369
+#: usr/local/www/system_advanced_misc.php:390
+msgid "Load Balancing"
+msgstr "Balanceando de Carga"
+
+#: usr/local/www/system_advanced_misc.php:270
+#: usr/local/www/system_advanced_misc.php:296
+#: usr/local/www/system_advanced_misc.php:315
+#: usr/local/www/system_advanced_misc.php:319
+#: usr/local/www/system_advanced_misc.php:366
+#: usr/local/www/system_advanced_misc.php:372
+msgid "Use sticky connections"
+msgstr "Use conexões sticky"
+
+#: usr/local/www/system_advanced_misc.php:271
+msgid "Successive connections will be redirected to the servers in a round-robin manner with connections from the same source being sent to the same web server. This 'sticky connection' will exist as long as there are states that refer to this connection. Once the states expire, so will the sticky connection. Further connections from that host will be redirected to the next web server in the round robin."
+msgstr "Conexões sucessivas serão redirecionadas para servidores usando round-robin com as conexões da mesma fonte sendo enviada para o mesmo servidor web. Essa 'conexão sticky' existirá contanto que existam estados que se referenciam a ela. Uma vez que os estados expirarem, o mesmo ocorrerá com a conexão sticky. Mais conexões desse host serão redirecionadas para o próximo servidor web do round robin."
+
+#: usr/local/www/system_advanced_misc.php:285
+#: usr/local/www/system_advanced_misc.php:317
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:387
+#: usr/local/www/system_advanced_misc.php:393
+msgid "Allow default gateway switching"
+msgstr "Permitir a alteração de rota padrão"
+
+#: usr/local/www/system_advanced_misc.php:286
+#: usr/local/www/system_advanced_misc.php:318
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:341
+#: usr/local/www/system_advanced_misc.php:388
+#: usr/local/www/system_advanced_misc.php:394
+msgid "If the link where the default gateway resides fails switch the default gateway to another available one."
+msgstr "Se o link onde o gateway padrão reside falhar, troca o default gateway para outro disponível."
+
+#: usr/local/www/system_advanced_misc.php:294
+#: usr/local/www/system_advanced_misc.php:326
+#: usr/local/www/system_advanced_misc.php:345
+#: usr/local/www/system_advanced_misc.php:349
+#: usr/local/www/system_advanced_misc.php:396
+#: usr/local/www/system_advanced_misc.php:402
+msgid "Power savings"
+msgstr "Economia de energia"
+
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:329
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:352
+#: usr/local/www/system_advanced_misc.php:399
+#: usr/local/www/system_advanced_misc.php:405
+msgid "PowerD"
+msgstr "PowerD"
+
+#: usr/local/www/system_advanced_misc.php:300
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:351
+#: usr/local/www/system_advanced_misc.php:355
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:408
+msgid "Use PowerD"
+msgstr "Use PowerD"
+
+#: usr/local/www/system_advanced_misc.php:302
+msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers three modes (maximum, minimum, and adaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, and adaptive may be abbreviated max, min, adp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly "
+msgstr "O utilitário powerd monitora o estado do sistema e configura várias opções de controle de energia de acordo. Ele oferece 3 modos (máximo, mínimo e adaptável) que podem ser selecionados individualmente quando estiver usando energia AC ou baterias. Os modos máximo, mínimo e adaptável podem vir abreviados como max, min, adp. O modo Máximo escolhe os valores de performance mais altos. O modo Mínimo seleciona os valores de performance mais baixos para obter o máximo de economia de energia. O modo Adaptável tenta balancear por meio de degradação da performance quando o sistema parece estar ocioso e aumenta a performance quando o sistema está ocupado. Ele oferece um bom balanço entre perdas de performance pequenas para grandes aumentos em economia de energia."
+
+#: usr/local/www/system_advanced_misc.php:318
+#: usr/local/www/system_advanced_misc.php:361
+msgid "glxsb Crypto Acceleration"
+msgstr "Aceleração de Criptografia glxsb"
+
+#: usr/local/www/system_advanced_misc.php:321
+#: usr/local/www/system_advanced_misc.php:364
+msgid "glxsb"
+msgstr "glxsb"
+
+#: usr/local/www/system_advanced_misc.php:324
+#: usr/local/www/system_advanced_misc.php:367
+msgid "Use glxsb"
+msgstr "Use glxsb"
+
+#: usr/local/www/system_advanced_misc.php:326
+#: usr/local/www/system_advanced_misc.php:369
+msgid "The AMD Geode LX Security Block will accelerate some cryptographic functions on systems which have the chip. Do not enable this option if you have a Hifn cryptographic acceleration card, as this will take precedence and the Hifn card will not be used. Acceleration should be automatic for IPsec when using Rijndael (AES). OpenVPN should be set for AES-128-CBC."
+msgstr "O AMD Geode LX Security Block irá acelerar algumas funções de criptografia em sistemas que possuem o chip. Não habilite essa opção se você tem um cartão de aceleração de criptografia Hifn, já que ele terá prioridade e o cartão Hifn não será usado. Aceleração pode ser automática para IPsec quando estiver usando Rijndael (AES). OpenVPN deve ser configurado para AES-128-CBC."
+
+#: usr/local/www/system_advanced_misc.php:332
+#: usr/local/www/system_advanced_misc.php:375
+msgid "If you do not have a glxsb chip in your system, this option will have no effect. To unload the module, uncheck this option and then reboot."
+msgstr "Se você não tiver um chip glxsb no seu sistema, essa opção não terá efeito. Para descarregar o módulo, desmarque essa opção e então reinicie o sistema."
+
+#: usr/local/www/system_advanced_misc.php:340
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:432
+#: usr/local/www/system_advanced_misc.php:444
+#: usr/local/www/system_advanced_misc.php:491
+#: usr/local/www/system_advanced_misc.php:497
+msgid "IP Security"
+msgstr "Segurança IP"
+
+#: usr/local/www/system_advanced_misc.php:343
+#: usr/local/www/system_advanced_misc.php:386
+#: usr/local/www/system_advanced_misc.php:435
+#: usr/local/www/system_advanced_misc.php:447
+#: usr/local/www/system_advanced_misc.php:494
+#: usr/local/www/system_advanced_misc.php:500
+msgid "Security Associations"
+msgstr "Associações de Segurança"
+
+#: usr/local/www/system_advanced_misc.php:346
+#: usr/local/www/system_advanced_misc.php:389
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/system_advanced_misc.php:450
+#: usr/local/www/system_advanced_misc.php:497
+#: usr/local/www/system_advanced_misc.php:503
+msgid "Prefer older IPsec SAs"
+msgstr "Prefira IPsec SAs mais velhos"
+
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:391
+#: usr/local/www/system_advanced_misc.php:440
+#: usr/local/www/system_advanced_misc.php:452
+#: usr/local/www/system_advanced_misc.php:499
+#: usr/local/www/system_advanced_misc.php:505
+msgid "By default, if several SAs match, the newest one is preferred if it's at least 30 seconds old. Select this option to always prefer old SAs over new ones."
+msgstr "Por padrão, se várias SAs correspondem, o mais nova é preferida se ela for pelo menos 30 segundos velha. Selecione essa opção para sempre preferir SAs velhas ao invés das novas."
+
+#: usr/local/www/system_advanced_misc.php:354
+#: usr/local/www/system_advanced_misc.php:397
+#: usr/local/www/system_advanced_misc.php:446
+#: usr/local/www/system_advanced_misc.php:458
+#: usr/local/www/system_advanced_misc.php:505
+#: usr/local/www/system_advanced_misc.php:511
+msgid "IPsec Debug"
+msgstr "Depuração de IPsec"
+
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:449
+#: usr/local/www/system_advanced_misc.php:461
+#: usr/local/www/system_advanced_misc.php:508
+#: usr/local/www/system_advanced_misc.php:514
+msgid "Start racoon in debug mode"
+msgstr "Iniciar racoon no modo de depuração"
+
+#: usr/local/www/system_advanced_misc.php:359
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:451
+#: usr/local/www/system_advanced_misc.php:463
+#: usr/local/www/system_advanced_misc.php:510
+#: usr/local/www/system_advanced_misc.php:516
+msgid "Launches racoon in debug mode so that more verbose logs will be generated to aid in troubleshooting."
+msgstr "Lançamentos de racoon no modo de depuração para geração de logs mais detalhado para auxiliar na solução de problemas."
+
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:453
+#: usr/local/www/system_advanced_misc.php:465
+#: usr/local/www/system_advanced_misc.php:512
+#: usr/local/www/system_advanced_misc.php:518
+msgid "NOTE: Changing this setting will restart racoon."
+msgstr "NOTA: Alterar essa configuração irá reiniciar racoon."
+
+#: usr/local/www/system_advanced_misc.php:365
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:457
+#: usr/local/www/system_advanced_misc.php:469
+#: usr/local/www/system_advanced_misc.php:516
+#: usr/local/www/system_advanced_misc.php:534
+msgid "Maximum MSS"
+msgstr "Máximo MSS"
+
+#: usr/local/www/system_advanced_misc.php:368
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:460
+#: usr/local/www/system_advanced_misc.php:472
+#: usr/local/www/system_advanced_misc.php:519
+#: usr/local/www/system_advanced_misc.php:537
+msgid "Enable MSS clamping on VPN traffic"
+msgstr "Habilitar MSS clamping no tráfego da VPN"
+
+#: usr/local/www/system_advanced_misc.php:372
+#: usr/local/www/system_advanced_misc.php:415
+#: usr/local/www/system_advanced_misc.php:464
+#: usr/local/www/system_advanced_misc.php:476
+#: usr/local/www/system_advanced_misc.php:523
+#: usr/local/www/system_advanced_misc.php:541
+msgid "Enable MSS clamping on TCP flows over VPN. This helps overcome problems with PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "
+msgstr "Habilitar MSS clamping em fluxos TCP sobre a VPN. Isso ajuda a superar problemas com PMTUD em links IPsec da VPN. Se deixado em branco o valor padrão é 1400 bytes."
+
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:475
+#: usr/local/www/system_advanced_misc.php:487
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/system_advanced_misc.php:552
+msgid "Schedule States"
+msgstr "Estados de agendamento"
+
+#: usr/local/www/system_advanced_misc.php:387
+#: usr/local/www/system_advanced_misc.php:430
+#: usr/local/www/system_advanced_misc.php:479
+#: usr/local/www/system_advanced_misc.php:491
+#: usr/local/www/system_advanced_misc.php:538
+#: usr/local/www/system_advanced_misc.php:556
+msgid "By default schedules clear the states of existing connections when the expiration time has come. This option overrides that behavior by not clearing states for existing connections."
+msgstr "Por padrão, agendadores limpam os estados de conexões quando atingirem o tempo de expiração. Esta opção sobrescreve o comportamento anterior, não limpando as tabelas."
+
+#: usr/local/www/system_advanced_misc.php:395
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/system_advanced_misc.php:487
+#: usr/local/www/system_advanced_misc.php:499
+#: usr/local/www/system_advanced_misc.php:546
+#: usr/local/www/system_advanced_misc.php:564
+msgid "Gateway Monitoring"
+msgstr "Monitoramento do Gateway"
+
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:445
+#: usr/local/www/system_advanced_misc.php:494
+#: usr/local/www/system_advanced_misc.php:506
+#: usr/local/www/system_advanced_misc.php:553
+#: usr/local/www/system_advanced_misc.php:571
+msgid "By default the monitoring process will flush states for a gateway that goes down. This option overrides that behavior by not clearing states for existing connections."
+msgstr "Por padrão o monitoramento de processos irá limpar a tabela de estados quando um gateway cair. Esta opções sobrescreve o comportamento anterior para conexões existentes."
+
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:454
+#: usr/local/www/system_advanced_misc.php:503
+#: usr/local/www/system_advanced_misc.php:515
+#: usr/local/www/system_advanced_misc.php:636
+#: usr/local/www/system_advanced_misc.php:654
+msgid "Hardware Settings"
+msgstr "Configurações de Hardware"
+
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:457
+#: usr/local/www/system_advanced_misc.php:506
+#: usr/local/www/system_advanced_misc.php:518
+#: usr/local/www/system_advanced_misc.php:639
+#: usr/local/www/system_advanced_misc.php:657
+msgid "Hard disk standby time "
+msgstr "Tempo de espera do disco rígido"
+
+#: usr/local/www/system_advanced_misc.php:421
+#: usr/local/www/system_advanced_misc.php:464
+#: usr/local/www/system_advanced_misc.php:513
+#: usr/local/www/system_advanced_misc.php:525
+#: usr/local/www/system_advanced_misc.php:646
+#: usr/local/www/system_advanced_misc.php:664
+msgid "Always on"
+msgstr "Sempre ligado"
+
+#: usr/local/www/system_advanced_misc.php:430
+#: usr/local/www/system_advanced_misc.php:473
+#: usr/local/www/system_advanced_misc.php:522
+#: usr/local/www/system_advanced_misc.php:534
+#: usr/local/www/system_advanced_misc.php:655
+#: usr/local/www/system_advanced_misc.php:673
+msgid "Puts the hard disk into standby mode when the selected amount of time after the last access has elapsed."
+msgstr "Coloque o disco rígido em modo de espera quando o total de tempo selecionado após o último acesso ter decorrido."
+
+#: usr/local/www/system_advanced_misc.php:431
+#: usr/local/www/system_advanced_misc.php:474
+#: usr/local/www/system_advanced_misc.php:523
+#: usr/local/www/system_advanced_misc.php:535
+#: usr/local/www/system_advanced_misc.php:656
+#: usr/local/www/system_advanced_misc.php:674
+msgid "Do not set this for CF cards."
+msgstr "Não configure isso para cartões CF."
+
+#: usr/local/www/system_advanced_network.php:68
+#: usr/local/www/system_advanced_network.php:67
+msgid "You must specify an IP address to NAT IPv6 packets."
+msgstr "Você deve especificar um endereço IP para os pacotes IPv6 do NAT."
+
+#: usr/local/www/system_advanced_network.php:148
+#: usr/local/www/system_advanced_network.php:147
+msgid "Advanced: Networking"
+msgstr "Avançado: Rede"
+
+#: usr/local/www/system_advanced_network.php:205
+#: usr/local/www/system_advanced_network.php:204
+msgid "IPv6 Options"
+msgstr "Opções IPv6"
+
+#: usr/local/www/system_advanced_network.php:208
+#: usr/local/www/system_advanced_network.php:211
+#: usr/local/www/system_advanced_network.php:207
+#: usr/local/www/system_advanced_network.php:210
+msgid "Allow IPv6"
+msgstr "Permitir IPv6"
+
+#: usr/local/www/system_advanced_network.php:212
+msgid "All IPv6 will be blocked unless this box is checked."
+msgstr "Todos os IPv6 serão bloqueados a menos que essa opção esteja marcada."
+
+#: usr/local/www/system_advanced_network.php:217
+#: usr/local/www/system_advanced_network.php:218
+msgid "IPv6 over IPv4 Tunneling"
+msgstr "IPv6 sobre tunelamento IPv4"
+
+#: usr/local/www/system_advanced_network.php:220
+#: usr/local/www/system_advanced_network.php:221
+msgid "Enable IPv4 NAT encapsulation of IPv6 packets"
+msgstr "Habilitar encapsulamento NAT de IPv4 para pacotes IPv6"
+
+#: usr/local/www/system_advanced_network.php:221
+#: usr/local/www/system_advanced_network.php:222
+msgid "This provides an RFC 2893 compatibility mechanism that can be used to tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't forget to add a firewall rule to permit IPv6 packets."
+msgstr "Isso provê um mecanismo de compatibilidade com RFC 2893 que pode ser usado para tunelamento de pacotes IPv6 sobre infraestrutura de roteamento IPv4. Se habilitada, não esqueça de adicionar uma regra de firewall para permitir pacotes IPv6."
+
+#: usr/local/www/system_advanced_network.php:234
+#: usr/local/www/system_advanced_network.php:235
+msgid "Network Interfaces"
+msgstr "Interfaces de Rede"
+
+#: usr/local/www/system_advanced_network.php:237
+#: usr/local/www/system_advanced_network.php:238
+msgid "Device polling"
+msgstr "Polling de dispositivo"
+
+#: usr/local/www/system_advanced_network.php:240
+#: usr/local/www/system_advanced_network.php:241
+msgid "Enable device polling"
+msgstr "Habilitar polling de dispositivo"
+
+#: usr/local/www/system_advanced_network.php:241
+#: usr/local/www/system_advanced_network.php:242
+#, php-format
+msgid "Device polling is a technique that lets the system periodically poll network devices for new data instead of relying on interrupts. This prevents your webConfigurator, SSH, etc. from being inaccessible due to interrupt floods when under extreme load. Generally this is not recommended. Not all NICs support polling; see the %s homepage for a list of supported cards."
+msgstr "Polling de dispositivo é uma técnica que permite que o sistema periodicamente eleja dispositivos de rede para novos dados ao invés de confiar em interrupções. Isso previne que seu webConfigurator, SSH, etc, de serem inacessíveis devido a transbordo de interrupções quando extremamente carregados. Geralmente isso não é recomendado. Nem todas as NICs suportam polling; veja a página %s para uma lista de cartões com suporte."
+
+#: usr/local/www/system_advanced_network.php:245
+#: usr/local/www/system_advanced_network.php:246
+msgid "Hardware Checksum Offloading"
+msgstr "Hardware Checksum Offloading"
+
+#: usr/local/www/system_advanced_network.php:248
+#: usr/local/www/system_advanced_network.php:249
+msgid "Disable hardware checksum offload"
+msgstr "Desabilitar Hardware Checksum Offload"
+
+#: usr/local/www/system_advanced_network.php:249
+#: usr/local/www/system_advanced_network.php:250
+msgid "Checking this option will disable hardware checksum offloading. Checksum offloading is broken in some hardware, particularly some Realtek cards. Rarely, drivers may have problems with checksum offloading and some specific NICs."
+msgstr "Marcando essa opção o hardware checksum offloading será desabilitado. Checksum offloading está quebrado em algum hardware, particularmente alguns cartões Realtek. Raramente, drivers podem ter problemas com checksum offloading e alguns NICs específicos."
+
+#: usr/local/www/system_advanced_network.php:253
+#: usr/local/www/system_advanced_network.php:254
+msgid "Hardware TCP Segmentation Offloading"
+msgstr "Hardware TCP Segmentation Offloading"
+
+#: usr/local/www/system_advanced_network.php:256
+#: usr/local/www/system_advanced_network.php:257
+msgid "Disable hardware TCP segmentation offload"
+msgstr "Desabilitar Hardware TCP Segmentation Offloading"
+
+#: usr/local/www/system_advanced_network.php:257
+#: usr/local/www/system_advanced_network.php:258
+msgid "Checking this option will disable hardware TCP segmentation offloading (TSO, TSO4, TSO6). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."
+msgstr "Marcando essa opção, o Hardware TCP Segmentation Offloading será desabilitado (TSO, TSO4, TS06). Esse offloading está quebrado em alguns drivers de hardware, e pode impactar a performance com alguns NICs específicos."
+
+#: usr/local/www/system_advanced_network.php:261
+#: usr/local/www/system_advanced_network.php:262
+msgid "Hardware Large Receive Offloading"
+msgstr "Hardware Large Receive Offloading"
+
+#: usr/local/www/system_advanced_network.php:264
+#: usr/local/www/system_advanced_network.php:265
+msgid "Disable hardware large receive offload"
+msgstr "Desabilitar Hardware Large Receive Offloading"
+
+#: usr/local/www/system_advanced_network.php:265
+#: usr/local/www/system_advanced_network.php:266
+msgid "Checking this option will disable hardware large receive offloading (LRO). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."
+msgstr "Marcar esta opção irá desabilitar o Hardware Large Receive Offloading (LRO). Esse offloading está quebrado em alguns drivers de hardware, e pode impactar a performance com alguns NICs específicos."
+
+#: usr/local/www/system_advanced_network.php:269
+#: usr/local/www/system_advanced_network.php:270
+msgid "ARP Handling"
+msgstr "Manuseio de ARP"
+
+#: usr/local/www/system_advanced_network.php:272
+#: usr/local/www/system_advanced_network.php:273
+msgid "Suppress ARP messages"
+msgstr "Suprimir mensagens ARP"
+
+#: usr/local/www/system_advanced_network.php:273
+#: usr/local/www/system_advanced_network.php:274
+msgid "This option will suppress ARP log messages when multiple interfaces reside on the same broadcast domain"
+msgstr "Essa opção irá suprimir mensagens de log ARP quando múltiplas interfaces residirem no mesmo domínio de broadcast"
+
+#: usr/local/www/system_advanced_notifications.php:118
+#: usr/local/www/system_advanced_notifications.php:124
+#: usr/local/www/system_advanced_notifications.php:127
+#: usr/local/www/system_advanced_notifications.php:133
+#: usr/local/www/system_advanced_notifications.php:144
+#: usr/local/www/system_advanced_notifications.php:151
+#, php-format
+msgid "This is a test message from %s. It is safe to ignore this message."
+msgstr "Essa é uma mensagem de teste de %s. É seguro ignorar essa mensagem."
+
+#: usr/local/www/system_advanced_notifications.php:131
+#: usr/local/www/system_advanced_notifications.php:140
+#: usr/local/www/system_advanced_notifications.php:155
+msgid "Advanced: Notifications"
+msgstr "Avançado: Notificações"
+
+#: usr/local/www/system_advanced_notifications.php:168
+#: usr/local/www/system_advanced_notifications.php:177
+#: usr/local/www/system_advanced_notifications.php:192
+msgid "Growl"
+msgstr "Growl"
+
+#: usr/local/www/system_advanced_notifications.php:171
+#: usr/local/www/system_advanced_notifications.php:180
+#: usr/local/www/system_advanced_notifications.php:202
+msgid "Registration Name"
+msgstr "Nome de Registro"
+
+#: usr/local/www/system_advanced_notifications.php:174
+#: usr/local/www/system_advanced_notifications.php:183
+#: usr/local/www/system_advanced_notifications.php:205
+msgid "Enter the name to register with the Growl server (default: PHP-Growl)."
+msgstr "Informe o nome para registrar o servidor Growl (padrão PHP-Growl)."
+
+#: usr/local/www/system_advanced_notifications.php:178
+#: usr/local/www/system_advanced_notifications.php:187
+#: usr/local/www/system_advanced_notifications.php:209
+msgid "Notification Name"
+msgstr "Nome da Notificação"
+
+#: usr/local/www/system_advanced_notifications.php:181
+#: usr/local/www/system_advanced_notifications.php:190
+#: usr/local/www/system_advanced_notifications.php:212
+#, php-format
+msgid "Enter a name for the Growl notifications (default: %s growl alert)."
+msgstr "Informe um nome para as notificações do Growl (padrão: %s growl alert)."
+
+#: usr/local/www/system_advanced_notifications.php:188
+#: usr/local/www/system_advanced_notifications.php:197
+#: usr/local/www/system_advanced_notifications.php:219
+msgid "This is the IP address that you would like to send growl notifications to."
+msgstr "Esse é o endereço IP para o qual você gostaria de enviar notificações growl."
+
+#: usr/local/www/system_advanced_notifications.php:195
+#: usr/local/www/system_advanced_notifications.php:204
+#: usr/local/www/system_advanced_notifications.php:226
+msgid "Enter the password of the remote growl notification device."
+msgstr "Informe a senha do dispositivo de notificação growl remoto."
+
+#: usr/local/www/system_advanced_notifications.php:203
+#: usr/local/www/system_advanced_notifications.php:212
+#: usr/local/www/system_advanced_notifications.php:243
+msgid "SMTP E-Mail"
+msgstr "E-Mail SMTP"
+
+#: usr/local/www/system_advanced_notifications.php:206
+#: usr/local/www/system_advanced_notifications.php:215
+#: usr/local/www/system_advanced_notifications.php:253
+msgid "E-Mail server"
+msgstr "Servidor de E-Mail"
+
+#: usr/local/www/system_advanced_notifications.php:209
+#: usr/local/www/system_advanced_notifications.php:218
+#: usr/local/www/system_advanced_notifications.php:256
+msgid "This is the FQDN or IP address of the SMTP E-Mail server to which notifications will be sent."
+msgstr "Esse é o endereço FQDN ou IP do servidor de E-Mail SMTP para o qual as notificações serão enviadas."
+
+#: usr/local/www/system_advanced_notifications.php:213
+#: usr/local/www/system_advanced_notifications.php:222
+#: usr/local/www/system_advanced_notifications.php:260
+msgid "SMTP Port of E-Mail server"
+msgstr "Porta SMTP do Servidor de E-Mail"
+
+#: usr/local/www/system_advanced_notifications.php:217
+#: usr/local/www/system_advanced_notifications.php:226
+#: usr/local/www/system_advanced_notifications.php:264
+msgid "This is the port of the SMTP E-Mail server, typically 25, 587 (submission) or 465 (smtps, tick ssl/tls checkbox)"
+msgstr "Essa é a porta do servidor de E-Mail SMTP, normalmente 25 ou 587 (submissão) ou 465 (smtps, tick ssl/tls checkbox)"
+
+#: usr/local/www/system_advanced_notifications.php:221
+#: usr/local/www/system_advanced_notifications.php:230
+#: usr/local/www/system_advanced_notifications.php:268
+msgid "From e-mail address"
+msgstr "Endereço de e-mail de origem"
+
+#: usr/local/www/system_advanced_notifications.php:224
+#: usr/local/www/system_advanced_notifications.php:233
+#: usr/local/www/system_advanced_notifications.php:271
+msgid "This is the e-mail address that will appear in the from field."
+msgstr "Esse é o endereço de e-mail que irá aparecer no campo De."
+
+#: usr/local/www/system_advanced_notifications.php:228
+#: usr/local/www/system_advanced_notifications.php:237
+#: usr/local/www/system_advanced_notifications.php:275
+msgid "Notification E-Mail address"
+msgstr "Endereço de E-mail de Notificação"
+
+#: usr/local/www/system_advanced_notifications.php:231
+#: usr/local/www/system_advanced_notifications.php:240
+#: usr/local/www/system_advanced_notifications.php:278
+msgid "Enter the e-mail address that you would like email notifications sent to."
+msgstr "Informe o endereço de e-mail para o qual você gostaria que notificações por e-mail sejam enviadas."
+
+#: usr/local/www/system_advanced_notifications.php:235
+#: usr/local/www/system_advanced_notifications.php:244
+#: usr/local/www/system_advanced_notifications.php:282
+msgid "Notification E-Mail auth username (optional)"
+msgstr "Nome de usuário de autenticação de E-Mail de Notificação (opcional)"
+
+#: usr/local/www/system_advanced_notifications.php:238
+#: usr/local/www/system_advanced_notifications.php:247
+#: usr/local/www/system_advanced_notifications.php:285
+msgid "Enter the e-mail address username for SMTP authentication."
+msgstr "Informe o nome de usuário do endereço de e-mail para autenticação SMTP."
+
+#: usr/local/www/system_advanced_notifications.php:242
+#: usr/local/www/system_advanced_notifications.php:251
+#: usr/local/www/system_advanced_notifications.php:289
+msgid "Notification E-Mail auth password"
+msgstr "Senha de autorização de E-Mail de Notificação"
+
+#: usr/local/www/system_advanced_notifications.php:245
+#: usr/local/www/system_advanced_notifications.php:254
+#: usr/local/www/system_advanced_notifications.php:292
+msgid "Enter the e-mail address password for SMTP authentication."
+msgstr "Informe a senha do endereço de e-mail para autenticação SMTP."
+
+#: usr/local/www/system_advanced_sysctl.php:125
+msgid "Advanced: System Tunables"
+msgstr "Avançado: Ajustes do sistema"
+
+#: usr/local/www/system_advanced_sysctl.php:139
+msgid "The firewall tunables have changed. You must apply the configuration to take affect."
+msgstr "Os ajustes do firewall mudaram. Você deve aplicar as configurações para que elas tenham efeito."
+
+#: usr/local/www/system_advanced_sysctl.php:171
+msgid "Tunable Name"
+msgstr "Nome do Ajuste"
+
+#: usr/local/www/system_advanced_sysctl.php:234
+msgid "Edit system tunable"
+msgstr "Editar ajuste do sistema"
+
+#: usr/local/www/system_advanced_sysctl.php:237
+msgid "Tunable"
+msgstr "Juste"
+
+#: usr/local/www/system_authservers.php:44
+msgid "Authentication Servers"
+msgstr "Servidores de Autenticação"
+
+#: usr/local/www/system_authservers.php:83
+#: usr/local/www/system_authservers.php:84
+msgid "deleted"
+msgstr "apagado"
+
+#: usr/local/www/system_authservers.php:160
+#: usr/local/www/system_authservers.php:183
+#: usr/local/www/system_authservers.php:438
+#: usr/local/www/system_camanager.php:165
+#: usr/local/www/system_camanager.php:177
+#: usr/local/www/system_camanager.php:192
+#: usr/local/www/system_camanager.php:369
+#: usr/local/www/system_certmanager.php:164
+#: usr/local/www/system_certmanager.php:176
+#: usr/local/www/system_certmanager.php:193
+#: usr/local/www/system_certmanager.php:307
+#: usr/local/www/system_certmanager.php:495
+#: usr/local/www/system_certmanager.php:801
+#: usr/local/www/system_crlmanager.php:193
+#: usr/local/www/system_crlmanager.php:200
+#: usr/local/www/system_crlmanager.php:318
+#: usr/local/www/system_usermanager.php:189
+#: usr/local/www/system_usermanager.php:705
+#: usr/local/www/system_certmanager.php:192
+#: usr/local/www/system_certmanager.php:204
+#: usr/local/www/system_certmanager.php:222
+#: usr/local/www/system_certmanager.php:394
+#: usr/local/www/system_certmanager.php:594
+#: usr/local/www/system_certmanager.php:967
+#: usr/local/www/system_usermanager.php:703
+#: usr/local/www/system_crlmanager.php:192
+#: usr/local/www/system_crlmanager.php:199
+#: usr/local/www/system_crlmanager.php:319
+#: usr/local/www/system_crlmanager.php:404
+#: usr/local/www/system_authservers.php:161
+#: usr/local/www/system_authservers.php:184
+#: usr/local/www/system_authservers.php:443
+#: usr/local/www/system_camanager.php:167
+#: usr/local/www/system_camanager.php:179
+#: usr/local/www/system_camanager.php:194
+#: usr/local/www/system_camanager.php:376
+#: usr/local/www/system_certmanager.php:195
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_certmanager.php:403
+#: usr/local/www/system_certmanager.php:603
+#: usr/local/www/system_certmanager.php:1009
+#: usr/local/www/system_authservers.php:162
+#: usr/local/www/system_authservers.php:185
+#: usr/local/www/system_authservers.php:450
+#: usr/local/www/system_certmanager.php:604
+#: usr/local/www/system_certmanager.php:1013
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:187
+#: usr/local/www/system_authservers.php:461
+msgid "Descriptive name"
+msgstr "Nome descritivo"
+
+#: usr/local/www/system_authservers.php:163
+#: usr/local/www/system_authservers.php:484
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:489
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:496
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:508
+msgid "Port value"
+msgstr "Valor da porta"
+
+#: usr/local/www/system_authservers.php:164
+#: usr/local/www/system_authservers.php:490
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:495
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:502
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:514
+msgid "Transport"
+msgstr "Transporte"
+
+#: usr/local/www/system_authservers.php:165
+#: usr/local/www/system_authservers.php:526
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:531
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:538
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:550
+msgid "Protocol version"
+msgstr "Versão do protocolo"
+
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:170
+msgid "Search level"
+msgstr "Nível de busca"
+
+#: usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:171
+msgid "User naming Attribute"
+msgstr "Atributo de nomeação de usuário"
+
+#: usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:172
+msgid "Group naming Attribute"
+msgstr "Atributo de nomeação de grupo"
+
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:665
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:670
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:677
+#: usr/local/www/system_authservers.php:173
+#: usr/local/www/system_authservers.php:689
+msgid "Group member attribute"
+msgstr "Atributo de membro de grupo"
+
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:172
+#: usr/local/www/system_authservers.php:174
+msgid "Authentication container"
+msgstr "Contêiner de autenticação"
+
+#: usr/local/www/system_authservers.php:175
+#: usr/local/www/system_authservers.php:176
+#: usr/local/www/system_authservers.php:177
+#: usr/local/www/system_authservers.php:179
+msgid "Bind user DN"
+msgstr "DN de usuário de Bind"
+
+#: usr/local/www/system_authservers.php:176
+#: usr/local/www/system_authservers.php:177
+#: usr/local/www/system_authservers.php:178
+#: usr/local/www/system_authservers.php:180
+msgid "Bind Password"
+msgstr "Senha de bind"
+
+#: usr/local/www/system_authservers.php:191
+#: usr/local/www/system_authservers.php:707
+#: usr/local/www/system_authservers.php:192
+#: usr/local/www/system_authservers.php:712
+#: usr/local/www/system_authservers.php:193
+#: usr/local/www/system_authservers.php:719
+#: usr/local/www/system_authservers.php:195
+#: usr/local/www/system_authservers.php:761
+msgid "Authentication port value"
+msgstr "Valor da porta de autenticação"
+
+#: usr/local/www/system_authservers.php:197
+#: usr/local/www/system_authservers.php:713
+#: usr/local/www/system_authservers.php:198
+#: usr/local/www/system_authservers.php:718
+#: usr/local/www/system_authservers.php:199
+#: usr/local/www/system_authservers.php:725
+#: usr/local/www/system_authservers.php:201
+#: usr/local/www/system_authservers.php:767
+msgid "Accounting port value"
+msgstr "Valor da porta de Accounting"
+
+#: usr/local/www/system_authservers.php:202
+#: usr/local/www/system_authservers.php:686
+#: usr/local/www/system_authservers.php:203
+#: usr/local/www/system_authservers.php:691
+#: usr/local/www/system_authservers.php:204
+#: usr/local/www/system_authservers.php:698
+#: usr/local/www/system_authservers.php:206
+#: usr/local/www/system_authservers.php:740
+msgid "Shared Secret"
+msgstr "Segredo compartilhado"
+
+#: usr/local/www/system_authservers.php:209
+#: usr/local/www/system_authservers.php:210
+#: usr/local/www/system_authservers.php:211
+#: usr/local/www/system_authservers.php:213
+msgid "The host name contains invalid characters."
+msgstr "O nome do host contém caracteres inválidos."
+
+#: usr/local/www/system_authservers.php:212
+#: usr/local/www/system_authservers.php:213
+#: usr/local/www/system_authservers.php:214
+#: usr/local/www/system_authservers.php:216
+msgid "An authentication server with the same name already exists."
+msgstr "Um servidor de autenticação com o mesmo nome já existe."
+
+#: usr/local/www/system_authservers.php:382
+#: usr/local/www/system_authservers.php:383
+#: usr/local/www/system_authservers.php:390
+#: usr/local/www/system_authservers.php:401
+msgid "Please fill the required values."
+msgstr "Por favor, preencha os valores requeridos."
+
+#: usr/local/www/system_authservers.php:388
+#: usr/local/www/system_authservers.php:389
+#: usr/local/www/system_authservers.php:396
+#: usr/local/www/system_authservers.php:407
+msgid "Please fill the bind username/password."
+msgstr "Por favor, preencha o usuário/senha de bind."
+
+#: usr/local/www/system_authservers.php:406
+#: usr/local/www/system_usermanager_settings.php:103
+#: usr/local/www/system_authservers.php:411
+#: usr/local/www/system_authservers.php:418
+#: usr/local/www/system_usermanager_settings.php:104
+#: usr/local/www/system_authservers.php:429
+msgid "Popup blocker detected. Action aborted."
+msgstr "Detectado bloqueio de popup. Ação abortada."
+
+#: usr/local/www/system_authservers.php:475
+#: usr/local/www/system_authservers.php:480
+#: usr/local/www/system_authservers.php:487
+#: usr/local/www/system_authservers.php:498
+msgid "LDAP Server Settings"
+msgstr "Configurações do Servidor LDAP"
+
+#: usr/local/www/system_authservers.php:478
+#: usr/local/www/system_authservers.php:680
+#: usr/local/www/system_authservers.php:483
+#: usr/local/www/system_authservers.php:685
+#: usr/local/www/system_authservers.php:490
+#: usr/local/www/system_authservers.php:692
+#: usr/local/www/system_authservers.php:501
+#: usr/local/www/system_authservers.php:734
+msgid "Hostname or IP address"
+msgstr "Nome de host ou endereço IP"
+
+#: usr/local/www/system_authservers.php:505
+#: usr/local/www/vpn_openvpn_client.php:629
+#: usr/local/www/vpn_openvpn_server.php:778
+#: usr/local/www/vpn_openvpn_server.php:851
+#: usr/local/www/vpn_openvpn_client.php:634
+#: usr/local/www/vpn_openvpn_server.php:879
+#: usr/local/www/vpn_openvpn_client.php:652
+#: usr/local/www/system_authservers.php:510
+#: usr/local/www/vpn_openvpn_client.php:671
+#: usr/local/www/system_authservers.php:517
+#: usr/local/www/vpn_openvpn_server.php:906
+#: usr/local/www/system_authservers.php:529
+msgid "Peer Certificate Authority"
+msgstr "Peer com Fonte Certificadora"
+
+#: usr/local/www/system_authservers.php:518
+#: usr/local/www/system_authservers.php:523
+#: usr/local/www/system_authservers.php:530
+#: usr/local/www/system_authservers.php:542
+msgid "This option is used if 'SSL Encrypted' option is choosen."
+msgstr "Esta opções é utilizada se a opções 'Criptografado por SSL' estiver selecionada."
+
+#: usr/local/www/system_authservers.php:519
+#: usr/local/www/system_authservers.php:524
+#: usr/local/www/system_authservers.php:531
+#: usr/local/www/system_authservers.php:543
+msgid "It must match with the CA in the AD otherwise problems will arise."
+msgstr "Ele deve corresponder com o CA na AD caso contrário irá haver problemas."
+
+#: usr/local/www/system_authservers.php:541
+#: usr/local/www/system_authservers.php:546
+#: usr/local/www/system_authservers.php:553
+#: usr/local/www/system_authservers.php:565
+msgid "Search scope"
+msgstr "Escopo de busca"
+
+#: usr/local/www/system_authservers.php:545
+#: usr/local/www/system_authservers.php:550
+#: usr/local/www/system_authservers.php:557
+#: usr/local/www/system_authservers.php:569
+msgid "Level:"
+msgstr "Nível:"
+
+#: usr/local/www/system_authservers.php:560
+#: usr/local/www/system_authservers.php:565
+#: usr/local/www/system_authservers.php:572
+#: usr/local/www/system_authservers.php:584
+msgid "Base DN:"
+msgstr "DN Base:"
+
+#: usr/local/www/system_authservers.php:570
+#: usr/local/www/system_authservers.php:575
+#: usr/local/www/system_authservers.php:582
+#: usr/local/www/system_authservers.php:594
+msgid "Authentication containers"
+msgstr "Contêineres de autenticação"
+
+#: usr/local/www/system_authservers.php:574
+#: usr/local/www/system_authservers.php:579
+#: usr/local/www/system_authservers.php:586
+#: usr/local/www/system_authservers.php:598
+msgid "Containers:"
+msgstr "Contêineres:"
+
+#: usr/local/www/system_authservers.php:578
+#: usr/local/www/system_authservers.php:583
+#: usr/local/www/system_authservers.php:590
+#: usr/local/www/system_authservers.php:602
+msgid "Note: Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path."
+msgstr "NOTA: Separado por ponto e vírgula. Isso será anexado à base de busca dn acima ou você pode especificar o caminho completo do contêiner."
+
+#: usr/local/www/system_authservers.php:579
+#: usr/local/www/system_authservers.php:584
+#: usr/local/www/system_authservers.php:591
+#: usr/local/www/system_authservers.php:603
+msgid "Example: CN=Users;DC=example"
+msgstr "EXEMPLO: CN=Users;DC=example"
+
+#: usr/local/www/system_authservers.php:580
+#: usr/local/www/system_authservers.php:585
+#: usr/local/www/system_authservers.php:592
+#: usr/local/www/system_authservers.php:604
+msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+msgstr "EXEMPLO: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+
+#: usr/local/www/system_authservers.php:587
+#: usr/local/www/system_authservers.php:592
+#: usr/local/www/system_authservers.php:599
+#: usr/local/www/system_authservers.php:611
+msgid "Extended Query"
+msgstr "Consulta estendida"
+
+#: usr/local/www/system_authservers.php:597
+#: usr/local/www/system_authservers.php:602
+#: usr/local/www/system_authservers.php:609
+#: usr/local/www/system_authservers.php:621
+msgid "Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+msgstr "EXEMPLO: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com"
+
+#: usr/local/www/system_authservers.php:604
+#: usr/local/www/system_authservers.php:609
+#: usr/local/www/system_authservers.php:616
+#: usr/local/www/system_authservers.php:628
+msgid "Bind credentials"
+msgstr "Credenciais de Vínculo"
+
+#: usr/local/www/system_authservers.php:612
+#: usr/local/www/system_authservers.php:617
+#: usr/local/www/system_authservers.php:624
+#: usr/local/www/system_authservers.php:636
+msgid "Use anonymous binds to resolve distinguished names"
+msgstr "Use vínculos anônimos para resolver nomes distintos"
+
+#: usr/local/www/system_authservers.php:621
+#: usr/local/www/system_authservers.php:626
+#: usr/local/www/system_authservers.php:633
+#: usr/local/www/system_authservers.php:645
+msgid "User DN:"
+msgstr "DN do usuário:"
+
+#: usr/local/www/system_authservers.php:637
+#: usr/local/www/system_authservers.php:642
+#: usr/local/www/system_authservers.php:649
+#: usr/local/www/system_authservers.php:661
+msgid "Initial Template"
+msgstr "Modelo inicial"
+
+#: usr/local/www/system_authservers.php:653
+#: usr/local/www/system_authservers.php:658
+#: usr/local/www/system_authservers.php:665
+#: usr/local/www/system_authservers.php:677
+msgid "User naming attribute"
+msgstr "Atributo de nomeação de usuário"
+
+#: usr/local/www/system_authservers.php:659
+#: usr/local/www/system_authservers.php:664
+#: usr/local/www/system_authservers.php:671
+#: usr/local/www/system_authservers.php:683
+msgid "Group naming attribute"
+msgstr "Atributo de nomeação de grupo"
+
+#: usr/local/www/system_authservers.php:677
+#: usr/local/www/system_authservers.php:682
+#: usr/local/www/system_authservers.php:689
+#: usr/local/www/system_authservers.php:731
+msgid "Radius Server Settings"
+msgstr "Configurações do Servidor Radius"
+
+#: usr/local/www/system_authservers.php:692
+#: usr/local/www/system_authservers.php:697
+#: usr/local/www/system_authservers.php:704
+#: usr/local/www/system_authservers.php:746
+msgid "Services offered"
+msgstr "Serviços oferecidos"
+
+#: usr/local/www/system_authservers.php:737
+#: usr/local/www/system_authservers.php:743
+#: usr/local/www/system_authservers.php:759
+#: usr/local/www/system_authservers.php:801
+msgid "Server Name"
+msgstr "Nome do Servidor"
+
+#: usr/local/www/system_authservers.php:739
+#: usr/local/www/system_authservers.php:745
+#: usr/local/www/system_authservers.php:761 usr/local/www/diag_dns.php:154
+#: usr/local/www/system_authservers.php:803
+msgid "Host Name"
+msgstr "Nome do Host"
+
+#: usr/local/www/system_authservers.php:756
+#: usr/local/www/vpn_openvpn_server.php:1479
+#: usr/local/www/vpn_openvpn_server.php:1621
+#: usr/local/www/vpn_openvpn_server.php:1662
+#: usr/local/www/system_authservers.php:764
+#: usr/local/www/system_authservers.php:780
+#: usr/local/www/vpn_openvpn_server.php:1714
+#: usr/local/www/system_authservers.php:797
+#: usr/local/www/system_authservers.php:839
+msgid "edit server"
+msgstr "editar servidor"
+
+#: usr/local/www/system_authservers.php:759
+#: usr/local/www/system_authservers.php:767
+#: usr/local/www/system_authservers.php:783
+#: usr/local/www/system_authservers.php:800
+#: usr/local/www/system_authservers.php:842
+msgid "Do you really want to delete this Server?"
+msgstr "Você realmente deseja apagar esse Servidor?"
+
+#: usr/local/www/system_authservers.php:760
+#: usr/local/www/vpn_openvpn_server.php:1483
+#: usr/local/www/vpn_openvpn_server.php:1625
+#: usr/local/www/vpn_openvpn_server.php:1666
+#: usr/local/www/system_authservers.php:768
+#: usr/local/www/system_authservers.php:784
+#: usr/local/www/vpn_openvpn_server.php:1718
+#: usr/local/www/system_authservers.php:801
+#: usr/local/www/system_authservers.php:843
+msgid "delete server"
+msgstr "apagar servidor"
+
+#: usr/local/www/system_authservers.php:772
+#: usr/local/www/vpn_openvpn_server.php:1496
+#: usr/local/www/vpn_openvpn_server.php:1638
+#: usr/local/www/vpn_openvpn_server.php:1679
+#: usr/local/www/system_authservers.php:782
+#: usr/local/www/system_authservers.php:798
+#: usr/local/www/vpn_openvpn_server.php:1731
+#: usr/local/www/system_authservers.php:770
+#: usr/local/www/system_authservers.php:812
+msgid "add server"
+msgstr "adicionar servidor"
+
+#: usr/local/www/system_authservers.php:779
+#: usr/local/www/system_authservers.php:789
+#: usr/local/www/system_authservers.php:805
+#: usr/local/www/system_authservers.php:777
+#: usr/local/www/system_authservers.php:819
+msgid "Additional authentication servers can be added here."
+msgstr "Servidores de autenticação adicionais podem ser adicionados aqui."
+
+#: usr/local/www/system_camanager.php:44
+msgid "Import an existing Certificate Authority"
+msgstr "Importar uma Autoridade Certificadora existente"
+
+#: usr/local/www/system_camanager.php:45
+msgid "Create an internal Certificate Authority"
+msgstr "Criar uma Autoridade de Certificadora interna"
+
+#: usr/local/www/system_camanager.php:46
+msgid "Create an intermediate Certificate Authority"
+msgstr "Cria uma Autoridade Certificadora intermediária"
+
+#: usr/local/www/system_camanager.php:50 usr/local/www/system_camanager.php:51
+msgid "Certificate Authority Manager"
+msgstr "Gerenciador de Autoridade de Certificadora"
+
+#: usr/local/www/system_camanager.php:95 usr/local/www/system_camanager.php:96
+#, php-format
+msgid "Certificate Authority %s and its CRLs (if any) successfully deleted"
+msgstr "Autorizadora de Certificado %s e suas CRLs (se existir) excluídas com sucesso"
+
+#: usr/local/www/system_camanager.php:166
+#: usr/local/www/system_camanager.php:402
+#: usr/local/www/system_certmanager.php:165
+#: usr/local/www/system_certmanager.php:511
+#: usr/local/www/system_certmanager.php:193
+#: usr/local/www/system_certmanager.php:610
+#: usr/local/www/system_camanager.php:168
+#: usr/local/www/system_camanager.php:409
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/system_certmanager.php:619
+#: usr/local/www/system_certmanager.php:620
+msgid "Certificate data"
+msgstr "Dados do Certificado"
+
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_camanager.php:172
+msgid "Encrypted private keys are not yet supported."
+msgstr "Chaves privadas criptografadas não são suportadas ainda."
+
+#: usr/local/www/system_camanager.php:178
+#: usr/local/www/system_camanager.php:194
+#: usr/local/www/system_camanager.php:453
+#: usr/local/www/system_certmanager.php:178
+#: usr/local/www/system_certmanager.php:194
+#: usr/local/www/system_certmanager.php:566
+#: usr/local/www/system_certmanager.php:656
+#: usr/local/www/system_usermanager.php:191
+#: usr/local/www/system_usermanager.php:725
+#: usr/local/www/system_certmanager.php:206
+#: usr/local/www/system_certmanager.php:223
+#: usr/local/www/system_certmanager.php:665
+#: usr/local/www/system_certmanager.php:820
+#: usr/local/www/system_usermanager.php:723
+#: usr/local/www/system_camanager.php:454
+#: usr/local/www/system_camanager.php:180
+#: usr/local/www/system_camanager.php:196
+#: usr/local/www/system_camanager.php:461
+#: usr/local/www/system_certmanager.php:209
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_certmanager.php:674
+#: usr/local/www/system_certmanager.php:845
+#: usr/local/www/system_certmanager.php:675
+#: usr/local/www/system_certmanager.php:849
+msgid "Key length"
+msgstr "Tamanho da chave"
+
+#: usr/local/www/system_camanager.php:179
+#: usr/local/www/system_camanager.php:195
+#: usr/local/www/system_camanager.php:469
+#: usr/local/www/system_certmanager.php:179
+#: usr/local/www/system_certmanager.php:582
+#: usr/local/www/system_crlmanager.php:366
+#: usr/local/www/system_usermanager.php:192
+#: usr/local/www/system_usermanager.php:739
+#: usr/local/www/vpn_ipsec_phase1.php:758
+#: usr/local/www/vpn_ipsec_phase2.php:619
+#: usr/local/www/system_certmanager.php:208
+#: usr/local/www/system_certmanager.php:698
+#: usr/local/www/system_usermanager.php:737
+#: usr/local/www/system_camanager.php:470
+#: usr/local/www/vpn_ipsec_phase2.php:645
+#: usr/local/www/vpn_ipsec_phase1.php:771
+#: usr/local/www/system_crlmanager.php:367
+#: usr/local/www/vpn_ipsec_phase2.php:741
+#: usr/local/www/vpn_ipsec_phase1.php:768
+#: usr/local/www/system_camanager.php:181
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_camanager.php:493
+#: usr/local/www/system_certmanager.php:211
+#: usr/local/www/system_certmanager.php:723
+#: usr/local/www/vpn_ipsec_phase1.php:789
+#: usr/local/www/vpn_ipsec_phase2.php:762
+#: usr/local/www/system_certmanager.php:724
+msgid "Lifetime"
+msgstr "Tempo de vida"
+
+#: usr/local/www/system_camanager.php:180
+#: usr/local/www/system_camanager.php:196
+#: usr/local/www/system_certmanager.php:180
+#: usr/local/www/system_certmanager.php:195
+#: usr/local/www/system_certmanager.php:209
+#: usr/local/www/system_certmanager.php:224
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_certmanager.php:212
+#: usr/local/www/system_certmanager.php:227
+msgid "Distinguished name Country Code"
+msgstr "Código de País de nome distinto"
+
+#: usr/local/www/system_camanager.php:181
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_certmanager.php:181
+#: usr/local/www/system_certmanager.php:196
+#: usr/local/www/system_certmanager.php:210
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_certmanager.php:213
+#: usr/local/www/system_certmanager.php:228
+msgid "Distinguished name State or Province"
+msgstr "Estado ou Província de nome distinto"
+
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_certmanager.php:182
+#: usr/local/www/system_certmanager.php:197
+#: usr/local/www/system_certmanager.php:211
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_certmanager.php:214
+#: usr/local/www/system_certmanager.php:229
+msgid "Distinguished name City"
+msgstr "Cidade de nome distinto"
+
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_certmanager.php:183
+#: usr/local/www/system_certmanager.php:198
+#: usr/local/www/system_certmanager.php:212
+#: usr/local/www/system_certmanager.php:227
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:215
+#: usr/local/www/system_certmanager.php:230
+msgid "Distinguished name Organization"
+msgstr "Organização de nome distinto"
+
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_certmanager.php:184
+#: usr/local/www/system_certmanager.php:199
+#: usr/local/www/system_certmanager.php:213
+#: usr/local/www/system_certmanager.php:228
+#: usr/local/www/system_camanager.php:186
+#: usr/local/www/system_camanager.php:202
+#: usr/local/www/system_certmanager.php:216
+#: usr/local/www/system_certmanager.php:231
+msgid "Distinguished name Email Address"
+msgstr "Endereço de E-mail de nome distinto"
+
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:185
+#: usr/local/www/system_certmanager.php:200
+#: usr/local/www/system_certmanager.php:214
+#: usr/local/www/system_certmanager.php:229
+#: usr/local/www/system_camanager.php:187
+#: usr/local/www/system_camanager.php:203
+#: usr/local/www/system_certmanager.php:217
+#: usr/local/www/system_certmanager.php:232
+msgid "Distinguished name Common Name"
+msgstr "Nome Comum de nome distinto"
+
+#: usr/local/www/system_camanager.php:193
+#: usr/local/www/system_camanager.php:436
+#: usr/local/www/system_camanager.php:437
+#: usr/local/www/system_camanager.php:195
+#: usr/local/www/system_camanager.php:444
+msgid "Signing Certificate Authority"
+msgstr "Assinatura da Autoridade Certificadora"
+
+#: usr/local/www/system_camanager.php:348
+#: usr/local/www/system_certmanager.php:458
+#: usr/local/www/system_crlmanager.php:283
+#: usr/local/www/system_certmanager.php:557
+#: usr/local/www/system_crlmanager.php:284
+#: usr/local/www/system_camanager.php:355
+#: usr/local/www/system_certmanager.php:566
+#: usr/local/www/system_certmanager.php:567
+msgid "CAs"
+msgstr "CAs"
+
+#: usr/local/www/system_camanager.php:349
+#: usr/local/www/system_camanager.php:568
+#: usr/local/www/system_certmanager.php:459
+#: usr/local/www/system_crlmanager.php:284
+#: usr/local/www/system_crlmanager.php:489
+#: usr/local/www/system_certmanager.php:558
+#: usr/local/www/system_camanager.php:569
+#: usr/local/www/system_crlmanager.php:285
+#: usr/local/www/system_crlmanager.php:522
+#: usr/local/www/system_camanager.php:356
+#: usr/local/www/system_camanager.php:593
+#: usr/local/www/system_certmanager.php:567
+#: usr/local/www/system_certmanager.php:568
+msgid "Certificates"
+msgstr "Certificados"
+
+#: usr/local/www/system_camanager.php:350
+#: usr/local/www/system_certmanager.php:460
+#: usr/local/www/system_crlmanager.php:285
+#: usr/local/www/system_certmanager.php:559
+#: usr/local/www/system_crlmanager.php:286
+#: usr/local/www/system_camanager.php:357
+#: usr/local/www/system_certmanager.php:568
+#: usr/local/www/system_certmanager.php:569
+msgid "Certificate Revocation"
+msgstr "Revogação de Certificado"
+
+#: usr/local/www/system_camanager.php:376
+#: usr/local/www/system_certmanager.php:475
+#: usr/local/www/system_crlmanager.php:300
+#: usr/local/www/system_certmanager.php:574
+#: usr/local/www/system_crlmanager.php:301
+#: usr/local/www/system_camanager.php:383
+#: usr/local/www/system_certmanager.php:583
+#: usr/local/www/system_certmanager.php:584
+msgid "Method"
+msgstr "Método"
+
+#: usr/local/www/system_camanager.php:398
+#: usr/local/www/system_camanager.php:405
+msgid "Existing Certificate Authority"
+msgstr "Fonte Autorizadora Existente"
+
+#: usr/local/www/system_camanager.php:410
+#: usr/local/www/system_camanager.php:417
+msgid "Certificate Private Key"
+msgstr "Chave Privada do Certificado"
+
+#: usr/local/www/system_camanager.php:410
+#: usr/local/www/system_camanager.php:417
+msgid "(optional)"
+msgstr "(opcional)"
+
+#: usr/local/www/system_camanager.php:414
+#: usr/local/www/system_camanager.php:421
+msgid "Paste the private key for the above certificate here. This is optional in most cases, but required if you need to generate a Certificate Revocation List (CRL)."
+msgstr "Cole a chave privada para o certificado acima aqui. Isso é opcional na maioria dos casos, mas requerido se você precisa gerar uma Lista de Revogação de Certificado (CRL)."
+
+#: usr/local/www/system_camanager.php:420
+#: usr/local/www/system_crlmanager.php:374
+#: usr/local/www/system_crlmanager.php:375
+msgid "Serial"
+msgstr "Serial"
+
+#: usr/local/www/system_camanager.php:433
+#: usr/local/www/system_camanager.php:434
+#: usr/local/www/system_camanager.php:441
+msgid "Internal Certificate Authority"
+msgstr "Fonte Autorizadora de Certificado Interno"
+
+#: usr/local/www/system_camanager.php:472
+#: usr/local/www/system_certmanager.php:585
+#: usr/local/www/system_crlmanager.php:369
+#: usr/local/www/system_certmanager.php:701
+#: usr/local/www/system_camanager.php:473
+#: usr/local/www/system_crlmanager.php:370
+#: usr/local/www/system_camanager.php:496
+#: usr/local/www/system_certmanager.php:726
+#: usr/local/www/system_certmanager.php:727
+msgid "days"
+msgstr "dias"
+
+#: usr/local/www/system_camanager.php:480
+#: usr/local/www/system_certmanager.php:593
+#: usr/local/www/system_certmanager.php:676
+#: usr/local/www/system_certmanager.php:709
+#: usr/local/www/system_certmanager.php:842
+#: usr/local/www/system_camanager.php:481
+#: usr/local/www/system_camanager.php:504
+#: usr/local/www/system_certmanager.php:734
+#: usr/local/www/system_certmanager.php:883
+#: usr/local/www/system_certmanager.php:735
+#: usr/local/www/system_certmanager.php:887
+msgid "Country Code"
+msgstr "Código do país"
+
+#: usr/local/www/system_camanager.php:494
+#: usr/local/www/system_certmanager.php:599
+#: usr/local/www/system_certmanager.php:690
+#: usr/local/www/system_certmanager.php:715
+#: usr/local/www/system_certmanager.php:856
+#: usr/local/www/system_camanager.php:495
+#: usr/local/www/system_camanager.php:519
+#: usr/local/www/system_certmanager.php:740
+#: usr/local/www/system_certmanager.php:898
+#: usr/local/www/system_certmanager.php:741
+#: usr/local/www/system_certmanager.php:902
+msgid "State or Province"
+msgstr "Estado ou Província"
+
+#: usr/local/www/system_camanager.php:498
+#: usr/local/www/system_camanager.php:508
+#: usr/local/www/system_camanager.php:518
+#: usr/local/www/system_camanager.php:528
+#: usr/local/www/system_camanager.php:538
+#: usr/local/www/system_camanager.php:499
+#: usr/local/www/system_camanager.php:509
+#: usr/local/www/system_camanager.php:519
+#: usr/local/www/system_camanager.php:529
+#: usr/local/www/system_camanager.php:539
+#: usr/local/www/system_camanager.php:523
+#: usr/local/www/system_camanager.php:533
+#: usr/local/www/system_camanager.php:543
+#: usr/local/www/system_camanager.php:553
+#: usr/local/www/system_camanager.php:563
+msgid "ex:"
+msgstr "ex:"
+
+#: usr/local/www/system_camanager.php:500
+#: usr/local/www/system_certmanager.php:696
+#: usr/local/www/system_certmanager.php:862
+#: usr/local/www/system_camanager.php:501
+#: usr/local/www/system_camanager.php:525
+#: usr/local/www/system_certmanager.php:904
+#: usr/local/www/system_certmanager.php:908
+msgid "Texas"
+msgstr "Texas"
+
+#: usr/local/www/system_camanager.php:504
+#: usr/local/www/system_certmanager.php:605
+#: usr/local/www/system_certmanager.php:700
+#: usr/local/www/system_certmanager.php:721
+#: usr/local/www/system_certmanager.php:866
+#: usr/local/www/system_camanager.php:505
+#: usr/local/www/system_camanager.php:529
+#: usr/local/www/system_certmanager.php:746
+#: usr/local/www/system_certmanager.php:908
+#: usr/local/www/system_certmanager.php:747
+#: usr/local/www/system_certmanager.php:912
+msgid "City"
+msgstr "Cidade"
+
+#: usr/local/www/system_camanager.php:510
+#: usr/local/www/system_certmanager.php:706
+#: usr/local/www/system_certmanager.php:872
+#: usr/local/www/system_camanager.php:511
+#: usr/local/www/system_camanager.php:535
+#: usr/local/www/system_certmanager.php:914
+#: usr/local/www/system_certmanager.php:918
+msgid "Austin"
+msgstr "Austin"
+
+#: usr/local/www/system_camanager.php:514
+#: usr/local/www/system_certmanager.php:611
+#: usr/local/www/system_certmanager.php:710
+#: usr/local/www/system_certmanager.php:727
+#: usr/local/www/system_certmanager.php:876
+#: usr/local/www/system_camanager.php:515
+#: usr/local/www/system_camanager.php:539
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:918
+#: usr/local/www/system_certmanager.php:753
+#: usr/local/www/system_certmanager.php:922
+msgid "Organization"
+msgstr "Organização"
+
+#: usr/local/www/system_camanager.php:520
+#: usr/local/www/system_certmanager.php:716
+#: usr/local/www/system_certmanager.php:882
+#: usr/local/www/system_camanager.php:521
+#: usr/local/www/system_camanager.php:545
+#: usr/local/www/system_certmanager.php:924
+#: usr/local/www/system_certmanager.php:928
+msgid "My Company Inc."
+msgstr "Minha Companhia Ltda."
+
+#: usr/local/www/system_camanager.php:530
+#: usr/local/www/system_camanager.php:531
+#: usr/local/www/system_camanager.php:555
+msgid "admin@mycompany.com"
+msgstr "admin@empresa.com"
+
+#: usr/local/www/system_camanager.php:540
+#: usr/local/www/system_camanager.php:541
+#: usr/local/www/system_camanager.php:565
+msgid "internal-ca"
+msgstr "CA interno"
+
+#: usr/local/www/system_camanager.php:566
+#: usr/local/www/system_crlmanager.php:488
+#: usr/local/www/system_camanager.php:567
+#: usr/local/www/system_crlmanager.php:521
+#: usr/local/www/system_camanager.php:591
+msgid "Internal"
+msgstr "Interno"
+
+#: usr/local/www/system_camanager.php:567
+#: usr/local/www/system_certmanager.php:855
+#: usr/local/www/system_certmanager.php:1021
+#: usr/local/www/system_camanager.php:568
+#: usr/local/www/system_camanager.php:592
+#: usr/local/www/system_certmanager.php:1063
+#: usr/local/www/system_certmanager.php:1067
+msgid "Issuer"
+msgstr "Emissor"
+
+#: usr/local/www/system_camanager.php:569
+#: usr/local/www/system_certmanager.php:856
+#: usr/local/www/system_certmanager.php:1022
+#: usr/local/www/system_camanager.php:570
+#: usr/local/www/system_camanager.php:594
+#: usr/local/www/system_certmanager.php:1064
+#: usr/local/www/system_certmanager.php:1068
+msgid "Distinguished Name"
+msgstr "Nome distinto"
+
+#: usr/local/www/system_camanager.php:579
+#: usr/local/www/system_certmanager.php:869
+#: usr/local/www/system_certmanager.php:1036
+#: usr/local/www/system_camanager.php:580
+#: usr/local/www/system_camanager.php:605
+#: usr/local/www/system_certmanager.php:1079
+#: usr/local/www/system_certmanager.php:1083
+msgid "self-signed"
+msgstr "auto-assinada"
+
+#: usr/local/www/system_camanager.php:581
+#: usr/local/www/system_certmanager.php:871
+#: usr/local/www/system_certmanager.php:1038
+#: usr/local/www/system_camanager.php:582
+#: usr/local/www/system_camanager.php:607
+#: usr/local/www/system_certmanager.php:1081
+#: usr/local/www/system_certmanager.php:1085
+msgid "external"
+msgstr "externa"
+
+#: usr/local/www/system_camanager.php:626
+#: usr/local/www/system_camanager.php:627
+#: usr/local/www/system_camanager.php:665
+msgid "edit CA"
+msgstr "Editar CA"
+
+#: usr/local/www/system_camanager.php:629
+#: usr/local/www/system_camanager.php:630
+#: usr/local/www/system_camanager.php:668
+msgid "export CA cert"
+msgstr "exportar certificado CA"
+
+#: usr/local/www/system_camanager.php:633
+#: usr/local/www/system_camanager.php:634
+#: usr/local/www/system_camanager.php:672
+msgid "export CA private key"
+msgstr "exportar chave privada da CA"
+
+#: usr/local/www/system_camanager.php:636
+#: usr/local/www/system_camanager.php:637
+#: usr/local/www/system_camanager.php:675
+msgid "Do you really want to delete this Certificate Authority and its CRLs, and unreference any associated certificates?"
+msgstr "Você realmente deseja apagar essa Autoridade Certificadora (CA), todos os seus CRLs e remover a referência de qualquer certificado associado?"
+
+#: usr/local/www/system_camanager.php:637
+#: usr/local/www/system_camanager.php:638
+#: usr/local/www/system_camanager.php:676
+msgid "delete ca"
+msgstr "apagar CA"
+
+#: usr/local/www/system_camanager.php:649
+#: usr/local/www/system_certmanager.php:952
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_camanager.php:650
+#: usr/local/www/system_certmanager.php:1135
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1191
+#: usr/local/www/system_certmanager.php:1195
+msgid "add or import ca"
+msgstr "adicionar ou importar CA"
+
+#: usr/local/www/system_camanager.php:649
+#: usr/local/www/system_certmanager.php:952
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_camanager.php:650
+#: usr/local/www/system_certmanager.php:1135
+#: usr/local/www/system_camanager.php:688
+#: usr/local/www/system_certmanager.php:1191
+#: usr/local/www/system_certmanager.php:1195
+msgid "add ca"
+msgstr "adicionar CA"
+
+#: usr/local/www/system_camanager.php:656
+#: usr/local/www/system_camanager.php:657
+#: usr/local/www/system_camanager.php:695
+msgid "Additional trusted Certificate Authorities can be added here."
+msgstr "Fontes Certificadoras confiáveis adicionais podem ser adicionadas aqui."
+
+#: usr/local/www/system_certmanager.php:44
+msgid "Import an existing Certificate"
+msgstr "Importar um Certificado existente"
+
+#: usr/local/www/system_certmanager.php:45
+msgid "Create an internal Certificate"
+msgstr "Criar um certificado interno"
+
+#: usr/local/www/system_certmanager.php:46
+msgid "Create a Certificate Signing Request"
+msgstr "Criar uma Requisição de Assinatura de Certificado"
+
+#: usr/local/www/system_certmanager.php:51
+#: usr/local/www/system_certmanager.php:56
+#: usr/local/www/system_certmanager.php:57
+msgid "Certificate Manager"
+msgstr "Gerenciador de Certificado"
+
+#: usr/local/www/system_certmanager.php:57
+#: usr/local/www/system_certmanager.php:62
+#: usr/local/www/system_certmanager.php:63
+msgid "Choose an existing certificate"
+msgstr "Escolha um certificado existente"
+
+#: usr/local/www/system_certmanager.php:96
+#: usr/local/www/system_certmanager.php:101
+#: usr/local/www/system_certmanager.php:102
+#, php-format
+msgid "Certificate %s successfully deleted"
+msgstr "Certificado %s foi apagado com sucesso"
+
+#: usr/local/www/system_certmanager.php:166
+#: usr/local/www/system_certmanager.php:194
+#: usr/local/www/system_certmanager.php:197
+msgid "Key data"
+msgstr "Dado chave"
+
+#: usr/local/www/system_certmanager.php:177
+#: usr/local/www/system_certmanager.php:549
+#: usr/local/www/system_usermanager.php:190
+#: usr/local/www/system_usermanager.php:711
+#: usr/local/www/system_certmanager.php:205
+#: usr/local/www/system_certmanager.php:648
+#: usr/local/www/system_usermanager.php:709
+#: usr/local/www/system_certmanager.php:208
+#: usr/local/www/system_certmanager.php:657
+#: usr/local/www/system_certmanager.php:658
+msgid "Certificate authority"
+msgstr "Fonte Autorizadora"
+
+#: usr/local/www/system_certmanager.php:205
+#: usr/local/www/system_certmanager.php:234
+#: usr/local/www/system_certmanager.php:237
+msgid "Existing Certificate Choice"
+msgstr "Escolha de Certificado Existente"
+
+#: usr/local/www/system_certmanager.php:300
+#: usr/local/www/system_certmanager.php:796
+#: usr/local/www/system_certmanager.php:840
+#: usr/local/www/system_certmanager.php:387
+#: usr/local/www/system_certmanager.php:962
+#: usr/local/www/system_certmanager.php:1006
+#: usr/local/www/system_certmanager.php:396
+#: usr/local/www/system_certmanager.php:1004
+#: usr/local/www/system_certmanager.php:1048
+#: usr/local/www/system_certmanager.php:1008
+#: usr/local/www/system_certmanager.php:1052
+msgid "Update"
+msgstr "Atualizar"
+
+#: usr/local/www/system_certmanager.php:308
+#: usr/local/www/system_certmanager.php:822
+#: usr/local/www/system_certmanager.php:395
+#: usr/local/www/system_certmanager.php:988
+#: usr/local/www/system_certmanager.php:404
+#: usr/local/www/system_certmanager.php:1030
+msgid "Final Certificate data"
+msgstr "Dado de Certificado Final"
+
+#: usr/local/www/system_certmanager.php:328
+#: usr/local/www/system_certmanager.php:415
+#: usr/local/www/system_certmanager.php:424
+#, php-format
+msgid "The certificate modulus does not match the signing request modulus."
+msgstr "O módulo de certificado não coincide com o módulo de solicitação de assinatura."
+
+#: usr/local/www/system_certmanager.php:507
+#: usr/local/www/system_certmanager.php:606
+#: usr/local/www/system_certmanager.php:615
+#: usr/local/www/system_certmanager.php:616
+msgid "Import Certificate"
+msgstr "Importar Certificado"
+
+#: usr/local/www/system_certmanager.php:519
+#: usr/local/www/system_certmanager.php:618
+#: usr/local/www/system_certmanager.php:627
+#: usr/local/www/system_certmanager.php:628
+msgid "Private key data"
+msgstr "Dado de chave privada"
+
+#: usr/local/www/system_certmanager.php:523
+#: usr/local/www/system_certmanager.php:622
+#: usr/local/www/system_certmanager.php:631
+#: usr/local/www/system_certmanager.php:632
+msgid "Paste a private key in X.509 PEM format here."
+msgstr "Cole uma chave privada no formato X.509 PEM aqui."
+
+#: usr/local/www/system_certmanager.php:533
+#: usr/local/www/system_certmanager.php:632
+#: usr/local/www/system_certmanager.php:641
+#: usr/local/www/system_certmanager.php:642
+msgid "Internal Certificate"
+msgstr "Certificação Interna"
+
+#: usr/local/www/system_certmanager.php:540
+#: usr/local/www/system_certmanager.php:639
+#: usr/local/www/system_certmanager.php:648
+#: usr/local/www/system_certmanager.php:649
+msgid "No internal Certificate Authorities have been defined. You must"
+msgstr "Nenhuma Fonte Autorizadora de Certificado (CA) interna foi definida. Você deve"
+
+#: usr/local/www/system_certmanager.php:542
+#: usr/local/www/system_certmanager.php:641
+#: usr/local/www/system_certmanager.php:650
+#: usr/local/www/system_certmanager.php:651
+msgid "an internal CA before creating an internal certificate."
+msgstr "um CA interno antes de criar um certificado interno."
+
+#: usr/local/www/system_certmanager.php:623
+#: usr/local/www/system_certmanager.php:726
+#: usr/local/www/system_certmanager.php:739
+#: usr/local/www/system_certmanager.php:892
+#: usr/local/www/system_certmanager.php:764
+#: usr/local/www/system_certmanager.php:934
+#: usr/local/www/system_certmanager.php:765
+#: usr/local/www/system_certmanager.php:938
+msgid "webadmin@mycompany.com"
+msgstr "webadmin@empresa.com"
+
+#: usr/local/www/system_certmanager.php:637
+#: usr/local/www/system_certmanager.php:736
+#: usr/local/www/system_certmanager.php:753
+#: usr/local/www/system_certmanager.php:902
+#: usr/local/www/system_certmanager.php:778
+#: usr/local/www/system_certmanager.php:944
+#: usr/local/www/system_certmanager.php:779
+#: usr/local/www/system_certmanager.php:948
+msgid "www.example.com"
+msgstr "www.examplo.com"
+
+#: usr/local/www/system_certmanager.php:653
+#: usr/local/www/system_certmanager.php:817
+#: usr/local/www/system_certmanager.php:842
+#: usr/local/www/system_certmanager.php:846
+msgid "External Signing Request"
+msgstr "Requisição de Assinatura Externa"
+
+#: usr/local/www/system_certmanager.php:749
+#: usr/local/www/system_certmanager.php:915
+#: usr/local/www/system_certmanager.php:957
+#: usr/local/www/system_certmanager.php:961
+msgid "Choose an Existing Certificate"
+msgstr "Escolher um Certificado Existente"
+
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:918
+#: usr/local/www/system_certmanager.php:960
+#: usr/local/www/system_certmanager.php:964
+msgid "Existing Certificates"
+msgstr "Certificados Existentes"
+
+#: usr/local/www/system_certmanager.php:810
+#: usr/local/www/system_certmanager.php:976
+#: usr/local/www/system_certmanager.php:1018
+#: usr/local/www/system_certmanager.php:1022
+msgid "Complete Signing Request"
+msgstr "Requisição de assinatura completa"
+
+#: usr/local/www/system_certmanager.php:814
+#: usr/local/www/system_certmanager.php:980
+#: usr/local/www/system_certmanager.php:1022
+msgid "Signing Request data"
+msgstr "Assinando dado Requisitado"
+
+#: usr/local/www/system_certmanager.php:818
+#: usr/local/www/system_certmanager.php:984
+#: usr/local/www/system_certmanager.php:1026
+#: usr/local/www/system_certmanager.php:1030
+msgid "Copy the certificate signing data from here and forward it to your certificate authority for signing."
+msgstr "Copie o dado da assinatura do certificado daqui e encaminhe-o para sua fonte autorizadora de certificado para ser assinado."
+
+#: usr/local/www/system_certmanager.php:826
+#: usr/local/www/system_certmanager.php:992
+#: usr/local/www/system_certmanager.php:1034
+#: usr/local/www/system_certmanager.php:1038
+msgid "Paste the certificate received from your certificate authority here."
+msgstr "Cole o certificado recebido de sua autoridade certificadora aqui."
+
+#: usr/local/www/system_certmanager.php:857
+#: usr/local/www/system_crlmanager.php:490
+#: usr/local/www/system_certmanager.php:1023
+#: usr/local/www/system_crlmanager.php:523
+#: usr/local/www/system_certmanager.php:1065
+#: usr/local/www/system_certmanager.php:1069
+msgid "In Use"
+msgstr "Em Uso"
+
+#: usr/local/www/system_certmanager.php:877
+#: usr/local/www/system_certmanager.php:1044
+#: usr/local/www/system_certmanager.php:1087
+#: usr/local/www/system_certmanager.php:1091
+msgid "external - signature pending"
+msgstr "externa - assinatura pendente"
+
+#: usr/local/www/system_certmanager.php:926
+#: usr/local/www/system_usermanager.php:658
+#: usr/local/www/system_certmanager.php:1103
+#: usr/local/www/system_usermanager.php:656
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1162
+#: usr/local/www/system_certmanager.php:1166
+msgid "export cert"
+msgstr "exportar cert"
+
+#: usr/local/www/system_certmanager.php:926
+#: usr/local/www/system_certmanager.php:929
+#: usr/local/www/system_certmanager.php:1103
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1162
+#: usr/local/www/system_certmanager.php:1165
+#: usr/local/www/system_certmanager.php:1166
+#: usr/local/www/system_certmanager.php:1169
+msgid "export ca"
+msgstr "exportar CA"
+
+#: usr/local/www/system_certmanager.php:929
+#: usr/local/www/system_certmanager.php:1106
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1165
+#: usr/local/www/system_certmanager.php:1169
+msgid "export key"
+msgstr "exportar chave"
+
+#: usr/local/www/system_certmanager.php:932
+#: usr/local/www/system_certmanager.php:1112
+#: usr/local/www/system_certmanager.php:1115
+#: usr/local/www/system_certmanager.php:1171
+#: usr/local/www/system_certmanager.php:1175
+msgid "Do you really want to delete this Certificate?"
+msgstr "Você realmente deseja apagar esse Certificado?"
+
+#: usr/local/www/system_certmanager.php:933
+#: usr/local/www/system_usermanager.php:661
+#: usr/local/www/system_certmanager.php:1113
+#: usr/local/www/system_usermanager.php:659
+#: usr/local/www/system_certmanager.php:1116
+#: usr/local/www/system_certmanager.php:1172
+#: usr/local/www/system_certmanager.php:1176
+msgid "delete cert"
+msgstr "apagar cert"
+
+#: usr/local/www/system_certmanager.php:939
+#: usr/local/www/system_certmanager.php:1119
+#: usr/local/www/system_certmanager.php:1122
+#: usr/local/www/system_certmanager.php:1178
+#: usr/local/www/system_certmanager.php:1182
+msgid "update csr"
+msgstr "atualizar csr"
+
+#: usr/local/www/system_certmanager.php:958
+#: usr/local/www/system_certmanager.php:1138
+#: usr/local/www/system_certmanager.php:1141
+#: usr/local/www/system_certmanager.php:1197
+#: usr/local/www/system_certmanager.php:1201
+msgid "Note: You can only delete a certificate if it is not currently in use."
+msgstr "NOTA: Você só pode excluir um certificado se o mesmo não estiver em uso."
+
+#: usr/local/www/system_crlmanager.php:46
+msgid "Certificate Revocation List Manager"
+msgstr "Gerenciador de Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:49
+msgid "Create an internal Certificate Revocation List"
+msgstr "Crie uma Lista de Revogação de Certificado interna"
+
+#: usr/local/www/system_crlmanager.php:50
+msgid "Import an existing Certificate Revocation List"
+msgstr "Importe uma Lista de Revogação de Certificado existente"
+
+#: usr/local/www/system_crlmanager.php:86
+msgid "Invalid CRL reference."
+msgstr "Referência a Lista de Revogação de Certificado inválida."
+
+#: usr/local/www/system_crlmanager.php:92
+#, php-format
+msgid "Certificate Revocation List %s is in use and cannot be deleted"
+msgstr "Lista de Revogação de Certificado %s esta sendo usada e não pode ser apagada"
+
+#: usr/local/www/system_crlmanager.php:98
+#, php-format
+msgid "Certificate Revocation List %s successfully deleted"
+msgstr "Lista de Revogação de Certificado %s apagada com sucesso"
+
+#: usr/local/www/system_crlmanager.php:136
+msgid "Both the Certificate and CRL must be specified."
+msgstr "O Certificado e Lista de Revogação de Certificado devem ser especificados."
+
+#: usr/local/www/system_crlmanager.php:140
+msgid "CA mismatch between the Certificate and CRL. Unable to Revoke."
+msgstr "Fonte Certificadora incompatível entre o Certificado e Lista de Revogação de Certificado. Impossível revogar."
+
+#: usr/local/www/system_crlmanager.php:143
+msgid "Cannot revoke certificates for an imported/external CRL."
+msgstr "Não é possível revogar certificados para uma Lista de Revogação de Certificado importada/externa."
+
+#: usr/local/www/system_crlmanager.php:175
+#: usr/local/www/system_crlmanager.php:177
+#, php-format
+msgid "Deleted Certificate %s from CRL %s"
+msgstr "Remover Certificado %s da Lista de Revogação de Certificado %s"
+
+#: usr/local/www/system_crlmanager.php:179
+#, php-format
+msgid "Failed to delete Certificate %s from CRL %s"
+msgstr "Falhou ao apagar o Cerficiado %s da Lista de Revogação de Certificado %s"
+
+#: usr/local/www/system_crlmanager.php:194
+#: usr/local/www/system_crlmanager.php:193
+msgid "Certificate Revocation List data"
+msgstr "Dados de Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:201
+#: usr/local/www/system_crlmanager.php:324
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/vpn_openvpn_server.php:287
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/system_crlmanager.php:200
+#: usr/local/www/system_crlmanager.php:325
+#: usr/local/www/vpn_openvpn_server.php:288
+#: usr/local/www/vpn_openvpn_client.php:220
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/vpn_openvpn_server.php:309
+msgid "Certificate Authority"
+msgstr "Fonte Certificadora"
+
+#: usr/local/www/system_crlmanager.php:345
+#: usr/local/www/system_crlmanager.php:346
+msgid "Existing Certificate Revocation List"
+msgstr "Lista de Revogação de Certificado existente"
+
+#: usr/local/www/system_crlmanager.php:349
+#: usr/local/www/system_crlmanager.php:350
+#: usr/local/www/system_crlmanager.php:410
+msgid "CRL data"
+msgstr "Dado de Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:353
+#: usr/local/www/system_crlmanager.php:354
+#: usr/local/www/system_crlmanager.php:414
+msgid "Paste a Certificate Revocation List in X.509 CRL format here."
+msgstr "Copie uma Lista de Revogação de Certificado no formato X.509 CRL aqui."
+
+#: usr/local/www/system_crlmanager.php:363
+#: usr/local/www/system_crlmanager.php:364
+msgid "Internal Certificate Revocation List"
+msgstr "Lista de Revogação de Certificado Interna"
+
+#: usr/local/www/system_crlmanager.php:370
+#: usr/local/www/system_crlmanager.php:371
+msgid "Default: 9999"
+msgstr "Padrão: 9999"
+
+#: usr/local/www/system_crlmanager.php:378
+#: usr/local/www/system_crlmanager.php:379
+msgid "Default: 0"
+msgstr "Padrão: 0"
+
+#: usr/local/www/system_crlmanager.php:401
+#: usr/local/www/system_crlmanager.php:434
+msgid "Currently Revoked Certificates for CRL"
+msgstr "Certificados Revogados atualmente para Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:405
+#: usr/local/www/system_crlmanager.php:438
+msgid "Certificate Name"
+msgstr "Nome do Certificado"
+
+#: usr/local/www/system_crlmanager.php:406
+#: usr/local/www/system_crlmanager.php:439
+msgid "Revocation Reason"
+msgstr "Razão de Revogação"
+
+#: usr/local/www/system_crlmanager.php:407
+#: usr/local/www/system_crlmanager.php:440
+msgid "Revoked At"
+msgstr "Revogado Em"
+
+#: usr/local/www/system_crlmanager.php:416
+#: usr/local/www/system_crlmanager.php:449
+msgid "No Certificates Found for this CRL."
+msgstr "Nenhum Certificado Encontrado para essa Lista de Revogação de Certificado."
+
+#: usr/local/www/system_crlmanager.php:435
+#: usr/local/www/system_crlmanager.php:468
+msgid "Do you really want to delete this Certificate from the CRL?"
+msgstr "Você realmente deseja apagar esse Certificado da CRL?"
+
+#: usr/local/www/system_crlmanager.php:436
+#: usr/local/www/system_crlmanager.php:469
+msgid "Delete this certificate from the CRL "
+msgstr "Remover esse certificado para a Lista de Revogação de Certificado "
+
+#: usr/local/www/system_crlmanager.php:453
+#: usr/local/www/system_crlmanager.php:486
+msgid "No Certificates Found for this CA."
+msgstr "Nenhum Certificado Encontrado para essa Fonte Certificadora."
+
+#: usr/local/www/system_crlmanager.php:460
+#: usr/local/www/system_crlmanager.php:493
+msgid "Choose a Certificate to Revoke"
+msgstr "Escolha um Certificado para Revogar"
+
+#: usr/local/www/system_crlmanager.php:465
+#: usr/local/www/system_crlmanager.php:498
+msgid "Reason"
+msgstr "Razão"
+
+#: usr/local/www/system_crlmanager.php:527
+#: usr/local/www/system_crlmanager.php:560
+#: usr/local/www/system_crlmanager.php:568
+#, php-format
+msgid "Add or Import CRL for %s"
+msgstr "Adicionar ou importar Lista de Revogação de Certificado para %s"
+
+#: usr/local/www/system_crlmanager.php:527
+#: usr/local/www/system_crlmanager.php:531
+#: usr/local/www/system_crlmanager.php:560
+#: usr/local/www/system_crlmanager.php:564
+#: usr/local/www/system_crlmanager.php:568
+#: usr/local/www/system_crlmanager.php:572
+msgid "add crl"
+msgstr "adicionar lista de revogação de certificado"
+
+#: usr/local/www/system_crlmanager.php:531
+#: usr/local/www/system_crlmanager.php:564
+#: usr/local/www/system_crlmanager.php:572
+#, php-format
+msgid "Import CRL for %s"
+msgstr "Importar CRL para %s"
+
+#: usr/local/www/system_crlmanager.php:552
+#: usr/local/www/system_crlmanager.php:585
+#: usr/local/www/system_crlmanager.php:593
+msgid "Export CRL"
+msgstr "Exportar Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:557
+#: usr/local/www/system_crlmanager.php:590
+#: usr/local/www/system_crlmanager.php:594
+#: usr/local/www/system_crlmanager.php:598
+#: usr/local/www/system_crlmanager.php:602
+msgid "Edit CRL"
+msgstr "Editar Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:561
+#: usr/local/www/system_crlmanager.php:598
+#: usr/local/www/system_crlmanager.php:606
+msgid "Do you really want to delete this Certificate Revocation List?"
+msgstr "Você realmente deseja apagar esta Lista de Revogação de Certificado?"
+
+#: usr/local/www/system_crlmanager.php:562
+#: usr/local/www/system_crlmanager.php:599
+#: usr/local/www/system_crlmanager.php:607
+msgid "Delete CRL"
+msgstr "Remover Lista de Revogação de Certificado"
+
+#: usr/local/www/system_crlmanager.php:582
+#: usr/local/www/system_crlmanager.php:619
+#: usr/local/www/system_crlmanager.php:531
+msgid "Additional Certificate Revocation Lists can be added here."
+msgstr "Listas de Certificado de Revogação adicionais podem ser adicionadas aqui."
+
+#: usr/local/www/system_gateway_groups.php:75
+#: usr/local/www/system_gateway_groups.php:76
+#: usr/local/www/system_gateway_groups.php:85
+msgid "removed gateway group"
+msgstr "grupo de gateway removido"
+
+#: usr/local/www/system_gateway_groups.php:101
+#: usr/local/www/system_gateway_groups.php:102
+#: usr/local/www/system_gateway_groups.php:111
+#, php-format
+msgid "The gateway configuration has been changed.%sYou must apply the changes in order for them to take effect."
+msgstr "A configuração de gateway foi modificada.%sVocê deve aplicar as mudanças para que elas tenham efeito."
+
+#: usr/local/www/system_gateway_groups.php:165
+#: usr/local/www/system_gateway_groups.php:166
+#: usr/local/www/system_gateway_groups.php:187
+msgid "Do you really want to delete this gateway group?"
+msgstr "Você realmente deseja apagar esse grupo de gateway?"
+
+#: usr/local/www/system_gateway_groups.php:195
+#: usr/local/www/system_gateway_groups.php:196
+#: usr/local/www/system_gateway_groups.php:205
+msgid "Remember to use these Gateway Groups in firewall rules in order to enable load balancing, failover, or policy-based routing. Without rules directing traffic into the Gateway Groups, they will not be used."
+msgstr "Lembre-se de usar esses Grupos de Gateway em regras de firewall para habilitar balanceameno de carga, failover, ou roteamento baseado em políticas. Sem regras direcionando o tráfego para os Grupos de Gateway, eles não serão usados."
+
+#: usr/local/www/system_gateway_groups_edit.php:50
+#: usr/local/www/system_gateway_groups_edit.php:53
+msgid "Member Down"
+msgstr "Membro fora do ar"
+
+#: usr/local/www/system_gateway_groups_edit.php:51
+#: usr/local/www/system_gateway_groups_edit.php:54
+msgid "Packet Loss"
+msgstr "Perda de Pacote"
+
+#: usr/local/www/system_gateway_groups_edit.php:52
+#: usr/local/www/system_gateway_groups_edit.php:55
+msgid "High Latency"
+msgstr "Latência Alta"
+
+#: usr/local/www/system_gateway_groups_edit.php:53
+#: usr/local/www/system_gateway_groups_edit.php:56
+msgid "Packet Loss or High Latency"
+msgstr "Perda de Pacote ou Latência Alta"
+
+#: usr/local/www/system_gateway_groups_edit.php:85
+#: usr/local/www/system_gateway_groups_edit.php:88
+msgid "A valid gateway group name must be specified."
+msgstr "Um grupo de gateway válido deve ser especificado."
+
+#: usr/local/www/system_gateway_groups_edit.php:88
+#: usr/local/www/system_gateways_edit.php:106
+#: usr/local/www/system_gateway_groups_edit.php:91
+#: usr/local/www/system_gateways_edit.php:107
+#: usr/local/www/system_gateways_edit.php:108
+msgid "The gateway name must not contain invalid characters."
+msgstr "O nome do gateway não deve conter caracteres inválidos."
+
+#: usr/local/www/system_gateway_groups_edit.php:99
+#: usr/local/www/system_gateway_groups_edit.php:102
+#: usr/local/www/system_gateway_groups_edit.php:105
+#, php-format
+msgid "A gateway group with this name \"%s\" already exists."
+msgstr "Um grupo de gateway com esse nome \"%s\" já existe."
+
+#: usr/local/www/system_gateway_groups_edit.php:115
+#: usr/local/www/system_gateway_groups_edit.php:119
+#: usr/local/www/system_gateway_groups_edit.php:122
+#, php-format
+msgid "A gateway group cannot have the same name with a gateway \"%s\" please choose another name."
+msgstr "Um grupo de gateway não pode ter o mesmo nome que um gateway \"%s\". Por favor, escolha outro nome."
+
+#: usr/local/www/system_gateway_groups_edit.php:119
+#: usr/local/www/system_gateway_groups_edit.php:123
+#: usr/local/www/system_gateway_groups_edit.php:126
+msgid "No gateway(s) have been selected to be used in this group"
+msgstr "Nenhum gateway foi selecionado para ser usado nesse grupo"
+
+#: usr/local/www/system_gateway_groups_edit.php:142
+#: usr/local/www/system_gateways_edit.php:313
+#: usr/local/www/system_gateways_edit.php:344
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways_edit.php:319
+#: usr/local/www/system_gateways_edit.php:350
+#: usr/local/www/system_gateway_groups_edit.php:146
+#: usr/local/www/system_gateways_edit.php:425
+#: usr/local/www/system_gateways_edit.php:456
+#: usr/local/www/system_gateways_edit.php:458
+#: usr/local/www/system_gateways_edit.php:455
+#: usr/local/www/system_gateways_edit.php:488
+msgid "Edit gateway"
+msgstr "Editar gateway"
+
+#: usr/local/www/system_gateway_groups_edit.php:155
+#: usr/local/www/system_gateway_groups_edit.php:166
+#: usr/local/www/system_gateway_groups_edit.php:225
+msgid "Edit gateway entry"
+msgstr "Editar entrada do gateway"
+
+#: usr/local/www/system_gateway_groups_edit.php:164
+#: usr/local/www/system_gateway_groups_edit.php:175
+#: usr/local/www/system_gateway_groups_edit.php:234
+#: usr/local/www/system_gateway_groups_edit.php:238
+msgid "Gateway Priority"
+msgstr "Prioridade do Gateway"
+
+#: usr/local/www/system_gateway_groups_edit.php:185
+#: usr/local/www/system_gateway_groups_edit.php:208
+#: usr/local/www/system_gateway_groups_edit.php:268
+#: usr/local/www/system_gateway_groups_edit.php:272
+msgid "Never"
+msgstr "Nunca"
+
+#: usr/local/www/system_gateway_groups_edit.php:186
+#: usr/local/www/system_gateway_groups_edit.php:209
+#: usr/local/www/system_gateway_groups_edit.php:269
+#: usr/local/www/system_gateway_groups_edit.php:273
+msgid "Tier 1"
+msgstr "Camada 1"
+
+#: usr/local/www/system_gateway_groups_edit.php:187
+#: usr/local/www/system_gateway_groups_edit.php:210
+#: usr/local/www/system_gateway_groups_edit.php:270
+#: usr/local/www/system_gateway_groups_edit.php:274
+msgid "Tier 2"
+msgstr "Camada 2"
+
+#: usr/local/www/system_gateway_groups_edit.php:188
+#: usr/local/www/system_gateway_groups_edit.php:211
+#: usr/local/www/system_gateway_groups_edit.php:271
+#: usr/local/www/system_gateway_groups_edit.php:275
+msgid "Tier 3"
+msgstr "Camada 3"
+
+#: usr/local/www/system_gateway_groups_edit.php:189
+#: usr/local/www/system_gateway_groups_edit.php:212
+#: usr/local/www/system_gateway_groups_edit.php:272
+#: usr/local/www/system_gateway_groups_edit.php:276
+msgid "Tier 4"
+msgstr "Camada 4"
+
+#: usr/local/www/system_gateway_groups_edit.php:190
+#: usr/local/www/system_gateway_groups_edit.php:213
+#: usr/local/www/system_gateway_groups_edit.php:273
+#: usr/local/www/system_gateway_groups_edit.php:277
+msgid "Tier 5"
+msgstr "Camada 5"
+
+#: usr/local/www/system_gateway_groups_edit.php:195
+#: usr/local/www/system_gateway_groups_edit.php:247
+#: usr/local/www/system_gateway_groups_edit.php:307
+#: usr/local/www/system_gateway_groups_edit.php:311
+msgid "Link Priority"
+msgstr "Prioridade do Link"
+
+#: usr/local/www/system_gateway_groups_edit.php:196
+#: usr/local/www/system_gateway_groups_edit.php:248
+#: usr/local/www/system_gateway_groups_edit.php:308
+#: usr/local/www/system_gateway_groups_edit.php:312
+msgid "The priority selected here defines in what order failover and balancing of links will be done. Multiple links of the same priority will balance connections until all links in the priority will be exhausted. If all links in a priority level are exhausted we will use the next available link(s) in the next priority level."
+msgstr "A prioridade selecionada aqui define em qual ordem o failover e balanceamento de links serão feitos. Múltiplos links de mesma prioridade irão balancear conexões até que todos os links da prioridade tiverem exaurido. Se todos os links em um nível de prioridade estiverem exaurido, usaremos o(s) próximo(s) link(s) disponíveis no próximo nível de prioridade."
+
+#: usr/local/www/system_gateway_groups_edit.php:205
+#: usr/local/www/system_gateway_groups_edit.php:260
+#: usr/local/www/system_gateway_groups_edit.php:320
+#: usr/local/www/system_gateway_groups_edit.php:322
+msgid "Trigger Level"
+msgstr "Nível de Gatilho"
+
+#: usr/local/www/system_gateway_groups_edit.php:216
+#: usr/local/www/system_gateway_groups_edit.php:271
+#: usr/local/www/system_gateway_groups_edit.php:331
+#: usr/local/www/system_gateway_groups_edit.php:333
+msgid "When to trigger exclusion of a member"
+msgstr "Quando engatilhar exclusão de um membro"
+
+#: usr/local/www/system_gateways.php:134
+msgid "The gateway configuration has been changed."
+msgstr "A configuração do gateway foi modificada."
+
+#: usr/local/www/system_gateways.php:155
+#: usr/local/www/system_gateways_edit.php:398
+#: usr/local/www/system_gateways_edit.php:419
+#: usr/local/www/system_gateways_edit.php:525
+#: usr/local/www/system_gateways_edit.php:529
+#: usr/local/www/system_gateways_edit.php:531
+#: usr/local/www/system_gateways_edit.php:561
+msgid "Monitor IP"
+msgstr "IP Monitor"
+
+#: usr/local/www/system_gateways.php:205
+msgid "Do you really want to delete this gateway?"
+msgstr "Você realmente deseja apagar esse gateway?"
+
+#: usr/local/www/system_gateways_edit.php:110
+#: usr/local/www/system_gateways_edit.php:111
+#: usr/local/www/system_gateways_edit.php:112
+msgid "A valid gateway IP address must be specified."
+msgstr "Um endereço IP de gateway válido deve ser especificado."
+
+#: usr/local/www/system_gateways_edit.php:118
+#: usr/local/www/system_gateways_edit.php:119
+#: usr/local/www/system_gateways_edit.php:120
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:148
+msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface."
+msgstr "Você não pode usar um endereço IPv6 de gateway somente IPv4 em uma interface."
+
+#: usr/local/www/system_gateways_edit.php:122
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:123
+#: usr/local/www/system_gateways_edit.php:136
+#: usr/local/www/system_gateways_edit.php:124
+#: usr/local/www/system_gateways_edit.php:137
+#, php-format
+msgid "The gateway address %1$s does not lie within the chosen interface's subnet '%2$s'."
+msgstr "O gateway endereço %1$ s não se encontram dentro da subrede da interface escolhida '%2$ s'."
+
+#: usr/local/www/system_gateways_edit.php:129
+#: usr/local/www/system_gateways_edit.php:132
+#: usr/local/www/system_gateways_edit.php:133
+#: usr/local/www/system_gateways_edit.php:120
+msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface."
+msgstr "Você não pode usar um endereço IPv4 de gateway somente IPv6 em uma interface."
+
+#: usr/local/www/system_gateways_edit.php:139
+#: usr/local/www/system_gateways_edit.php:143
+#: usr/local/www/system_gateways_edit.php:144
+#: usr/local/www/system_gateways_edit.php:174
+msgid "Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration."
+msgstr "Valores de gateway dinâmico não pode ser especificado para as interfaces com uma configuração IPv4 estático."
+
+#: usr/local/www/system_gateways_edit.php:143
+#: usr/local/www/system_gateways_edit.php:147
+#: usr/local/www/system_gateways_edit.php:148
+#: usr/local/www/system_gateways_edit.php:178
+msgid "Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration."
+msgstr "Valores de gateway dinâmico não pode ser especificado para as interfaces com uma configuração IPv6 estático."
+
+#: usr/local/www/system_gateways_edit.php:147
+#: usr/local/www/system_gateways_edit.php:151
+#: usr/local/www/system_gateways_edit.php:152
+#: usr/local/www/system_gateways_edit.php:182
+msgid "A valid monitor IP address must be specified."
+msgstr "Um endereço IP monitor válido deve ser especificado."
+
+#: usr/local/www/system_gateways_edit.php:160
+#: usr/local/www/system_gateways_edit.php:168
+#: usr/local/www/system_gateways_edit.php:178
+#: usr/local/www/system_gateways_edit.php:208
+msgid "Changing name on a gateway is not allowed."
+msgstr "Mudança de nome de gateway não é permitido."
+
+#: usr/local/www/system_gateways_edit.php:165
+#: usr/local/www/system_gateways_edit.php:173
+#: usr/local/www/system_gateways_edit.php:183
+#: usr/local/www/system_gateways_edit.php:213
+#, php-format
+msgid "The gateway name \"%s\" already exists."
+msgstr "O nome do gateway \"%s\" já existe."
+
+#: usr/local/www/system_gateways_edit.php:171
+#: usr/local/www/system_gateways_edit.php:179
+#: usr/local/www/system_gateways_edit.php:189
+#: usr/local/www/system_gateways_edit.php:219
+#, php-format
+msgid "The gateway IP address \"%s\" already exists."
+msgstr "O endereço IP do gateway \"%s\" já existe."
+
+#: usr/local/www/system_gateways_edit.php:177
+#: usr/local/www/system_gateways_edit.php:185
+#: usr/local/www/system_gateways_edit.php:195
+#: usr/local/www/system_gateways_edit.php:225
+#, php-format
+msgid "The monitor IP address \"%s\" is already in use. You must choose a different monitor IP."
+msgstr "O endereço IP monitor \"%s\" já está em uso. Você deve escolher um IP monitor diferente."
+
+#: usr/local/www/system_gateways_edit.php:187
+#: usr/local/www/system_gateways_edit.php:220
+#: usr/local/www/system_gateways_edit.php:195
+#: usr/local/www/system_gateways_edit.php:228
+msgid "The low latency watermark needs to be a numeric value."
+msgstr "A marca d'água de latência inferior precisa ser um valor numérico."
+
+#: usr/local/www/system_gateways_edit.php:193
+#: usr/local/www/system_gateways_edit.php:201
+msgid "The high latency watermark needs to be a numeric value."
+msgstr "A marca d'água de latência superior precisa ser um valor numérico."
+
+#: usr/local/www/system_gateways_edit.php:198
+#: usr/local/www/system_gateways_edit.php:206
+msgid "The low loss watermark needs to be a numeric value."
+msgstr "A marca d'água de perda inferior precisa ser um valor numérico."
+
+#: usr/local/www/system_gateways_edit.php:203
+#: usr/local/www/system_gateways_edit.php:211
+msgid "The high loss watermark needs to be a numeric value."
+msgstr "A marca d'água de perda superior precisa ser um valor numérico."
+
+#: usr/local/www/system_gateways_edit.php:209
+#: usr/local/www/system_gateways_edit.php:217
+msgid "The High latency watermark needs to be higher then the low latency watermark"
+msgstr "A marca d'água superior de latência precisa ser mais acima que a marca d'água inferior"
+
+#: usr/local/www/system_gateways_edit.php:215
+#: usr/local/www/system_gateways_edit.php:223
+msgid "The High packet loss watermark needs to be higher then the low packet loss watermark"
+msgstr "A marca d'água superior de perda de pacote precisa ser mais acima que a marca d'água inferior"
+
+#: usr/local/www/system_gateways_edit.php:363
+#: usr/local/www/system_gateways_edit.php:369
+#: usr/local/www/system_gateways_edit.php:475
+#: usr/local/www/system_gateways_edit.php:474
+#: usr/local/www/system_gateways_edit.php:476
+#: usr/local/www/system_gateways_edit.php:506
+msgid "Use BGPD"
+msgstr "Use BGPD"
+
+#: usr/local/www/system_gateways_edit.php:367
+#: usr/local/www/system_gateways_edit.php:373
+#: usr/local/www/system_gateways_edit.php:479
+#: usr/local/www/system_gateways_edit.php:478
+#: usr/local/www/system_gateways_edit.php:480
+#: usr/local/www/system_gateways_edit.php:510
+msgid "Choose which interface this gateway applies to."
+msgstr "Escolha em qual interface esse gateway se aplica."
+
+#: usr/local/www/system_gateways_edit.php:373
+#: usr/local/www/system_gateways_edit.php:394
+#: usr/local/www/system_gateways_edit.php:500
+#: usr/local/www/system_gateways_edit.php:502
+#: usr/local/www/system_gateways_edit.php:504
+#: usr/local/www/system_gateways_edit.php:534
+msgid "Gateway name"
+msgstr "Nome do Gateway"
+
+#: usr/local/www/system_gateways_edit.php:379
+#: usr/local/www/system_gateways_edit.php:400
+#: usr/local/www/system_gateways_edit.php:506
+#: usr/local/www/system_gateways_edit.php:509
+#: usr/local/www/system_gateways_edit.php:511
+#: usr/local/www/system_gateways_edit.php:541
+msgid "Gateway IP address"
+msgstr "Endereço IP do Gateway"
+
+#: usr/local/www/system_gateways_edit.php:382
+#: usr/local/www/system_gateways_edit.php:385
+#: usr/local/www/system_gateways_edit.php:403
+#: usr/local/www/system_gateways_edit.php:406
+#: usr/local/www/system_gateways_edit.php:509
+#: usr/local/www/system_gateways_edit.php:512
+#: usr/local/www/system_gateways_edit.php:513
+#: usr/local/www/system_gateways_edit.php:516
+#: usr/local/www/system_gateways_edit.php:515
+#: usr/local/www/system_gateways_edit.php:518
+#: usr/local/www/system_gateways_edit.php:545
+#: usr/local/www/system_gateways_edit.php:548
+msgid "Default Gateway"
+msgstr "Gateway Padrão"
+
+#: usr/local/www/system_gateways_edit.php:386
+#: usr/local/www/system_gateways_edit.php:407
+#: usr/local/www/system_gateways_edit.php:513
+#: usr/local/www/system_gateways_edit.php:517
+#: usr/local/www/system_gateways_edit.php:519
+#: usr/local/www/system_gateways_edit.php:549
+msgid "This will select the above gateway as the default gateway"
+msgstr "Isso irá selecionar o gateway acima como o gateway padrão"
+
+#: usr/local/www/system_gateways_edit.php:390
+#: usr/local/www/system_gateways_edit.php:393
+#: usr/local/www/system_gateways_edit.php:411
+#: usr/local/www/system_gateways_edit.php:414
+#: usr/local/www/system_gateways_edit.php:517
+#: usr/local/www/system_gateways_edit.php:520
+#: usr/local/www/system_gateways_edit.php:521
+#: usr/local/www/system_gateways_edit.php:524
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_gateways_edit.php:526
+#: usr/local/www/system_gateways_edit.php:553
+#: usr/local/www/system_gateways_edit.php:556
+msgid "Disable Gateway Monitoring"
+msgstr "Desativar Monitoramento do Gateway"
+
+#: usr/local/www/system_gateways_edit.php:394
+#: usr/local/www/system_gateways_edit.php:415
+#: usr/local/www/system_gateways_edit.php:521
+#: usr/local/www/system_gateways_edit.php:525
+#: usr/local/www/system_gateways_edit.php:527
+#: usr/local/www/system_gateways_edit.php:557
+msgid "This will consider this gateway as always being up"
+msgstr "Isto irá considerar este gateway como sendo sempre up"
+
+#: usr/local/www/system_gateways_edit.php:407
+#: usr/local/www/system_gateways_edit.php:428
+#: usr/local/www/system_gateways_edit.php:534
+#: usr/local/www/system_gateways_edit.php:538
+#: usr/local/www/system_gateways_edit.php:540
+#: usr/local/www/system_gateways_edit.php:570
+msgid "Alternative monitor IP"
+msgstr "IP monitor alternativo"
+
+#: usr/local/www/system_gateways_edit.php:408
+#: usr/local/www/system_gateways_edit.php:429
+#: usr/local/www/system_gateways_edit.php:535
+#: usr/local/www/system_gateways_edit.php:539
+#: usr/local/www/system_gateways_edit.php:541
+#: usr/local/www/system_gateways_edit.php:571
+msgid "Enter an alternative address here to be used to monitor the link. This is used for the quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond to ICMP echo requests (pings)"
+msgstr "Informe um endereço alternativo aqui para ser usado para monitorar o link. Esse é usado para os gráficos RRD de qualidade assim como as entradas do balanceador de carga. Use isso se o gateway não responder à requisições echo ICMP (pings)"
+
+#: usr/local/www/system_gateways_edit.php:436
+#: usr/local/www/system_gateways_edit.php:457
+#: usr/local/www/system_gateways_edit.php:563
+#: usr/local/www/system_gateways_edit.php:567
+#: usr/local/www/system_gateways_edit.php:569
+#: usr/local/www/system_gateways_edit.php:599
+msgid "Weight for this gateway when used in a Gateway Group."
+msgstr "Peso para esse gateway quando usado em um Grupo de Gateway."
+
+#: usr/local/www/system_gateways_edit.php:440
+#: usr/local/www/system_gateways_edit.php:461
+#: usr/local/www/system_gateways_edit.php:567
+#: usr/local/www/system_gateways_edit.php:571
+#: usr/local/www/system_gateways_edit.php:573
+#: usr/local/www/system_gateways_edit.php:603
+msgid "Latency thresholds"
+msgstr "Thresholds de latência"
+
+#: usr/local/www/system_gateways_edit.php:448
+#: usr/local/www/system_gateways_edit.php:469
+msgid "These define the low and high water marks for latency in milliseconds. Default is 100/200."
+msgstr "Definem os limites inferiores e superiores para a latência em milisegundos. O padrão é 100/200."
+
+#: usr/local/www/system_gateways_edit.php:452
+#: usr/local/www/system_gateways_edit.php:473
+#: usr/local/www/system_gateways_edit.php:579
+#: usr/local/www/system_gateways_edit.php:583
+#: usr/local/www/system_gateways_edit.php:585
+#: usr/local/www/system_gateways_edit.php:615
+msgid "Packet Loss thresholds"
+msgstr "Thresholds de perda de pacote"
+
+#: usr/local/www/system_gateways_edit.php:460
+#: usr/local/www/system_gateways_edit.php:481
+msgid "These define the low and high water marks for packet loss in %. Default is 10/20."
+msgstr "Definem os limites inferiores e superiores para a perda de pacote em %. Padrão é 10/20."
+
+#: usr/local/www/system_gateways_edit.php:464
+#: usr/local/www/system_gateways_edit.php:496
+#: usr/local/www/system_gateways_edit.php:602
+#: usr/local/www/system_gateways_edit.php:606
+#: usr/local/www/system_gateways_edit.php:608
+#: usr/local/www/system_gateways_edit.php:638
+msgid "Down"
+msgstr "Contagem regressiva"
+
+#: usr/local/www/system_gateways_edit.php:468
+msgid "This defines the down time for the alarm to fire in seconds. Default is 10."
+msgstr "Isto define o tempo da contagem regressiva para o alarme disparar, em segundos. Padrão é 10."
+
+#: usr/local/www/system_gateways_edit.php:472
+#: usr/local/www/system_gateways_edit.php:485
+#: usr/local/www/system_gateways_edit.php:591
+#: usr/local/www/system_gateways_edit.php:595
+#: usr/local/www/system_gateways_edit.php:597
+#: usr/local/www/system_gateways_edit.php:627
+msgid "Frequency Probe"
+msgstr "Frequência da sonda"
+
+#: usr/local/www/system_gateways_edit.php:476
+msgid "This defines the frequency that an icmp probe will be sent in seconds. Default is 1."
+msgstr "Isto define a freqüência com que uma sonda de icmp serão enviadas em segundos. Padrão é 1."
+
+#: usr/local/www/system_groupmanager.php:49
+#: usr/local/www/system_groupmanager_addprivs.php:56
+msgid "Group manager"
+msgstr "Gerenciador de grupo"
+
+#: usr/local/www/system_groupmanager.php:72
+#: usr/local/www/system_groupmanager.php:96
+#: usr/local/www/system_usermanager.php:90
+#: usr/local/www/system_usermanager.php:105
+msgid "successfully deleted"
+msgstr "apagado com sucesso"
+
+#: usr/local/www/system_groupmanager.php:95
+#: usr/local/www/system_usermanager.php:104
+msgid "Privilege"
+msgstr "Privilégio"
+
+#: usr/local/www/system_groupmanager.php:122
+msgid "The group name contains invalid characters."
+msgstr "O nome do grupo contém caracteres inválidos."
+
+#: usr/local/www/system_groupmanager.php:128
+#: usr/local/www/system_groupmanager.php:131
+msgid "Another entry with the same group name already exists."
+msgstr "Outra entrada com o mesmo nome de grupo já existe."
+
+#: usr/local/www/system_groupmanager.php:262
+#: usr/local/www/system_usermanager.php:462
+#: usr/local/www/system_usermanager.php:460
+#: usr/local/www/system_groupmanager.php:265
+msgid "Defined by"
+msgstr "Definido por"
+
+#: usr/local/www/system_groupmanager.php:269
+#: usr/local/www/system_groupmanager.php:404
+#: usr/local/www/system_groupmanager.php:405
+#: usr/local/www/system_groupmanager.php:272
+#: usr/local/www/system_groupmanager.php:408
+msgid "Group name"
+msgstr "Nome do grupo"
+
+#: usr/local/www/system_groupmanager.php:279
+#: usr/local/www/system_groupmanager.php:282
+msgid "Group description, for your own information only"
+msgstr "Descrição do Grupo, para sua própria referência somente"
+
+#: usr/local/www/system_groupmanager.php:286
+#: usr/local/www/system_usermanager.php:511
+#: usr/local/www/system_usermanager.php:509
+#: usr/local/www/system_groupmanager.php:289
+msgid "Group Memberships"
+msgstr "Adesões de Grupos"
+
+#: usr/local/www/system_groupmanager.php:291
+#: usr/local/www/system_groupmanager.php:294
+msgid "Not Members"
+msgstr "Não membros"
+
+#: usr/local/www/system_groupmanager.php:309
+#: usr/local/www/system_groupmanager.php:312
+msgid "Add Members"
+msgstr "Adicionar Membros"
+
+#: usr/local/www/system_groupmanager.php:313
+#: usr/local/www/system_groupmanager.php:316
+msgid "Remove Members"
+msgstr "Remover membros"
+
+#: usr/local/www/system_groupmanager.php:334
+#: usr/local/www/system_groupmanager_addprivs.php:196
+#: usr/local/www/system_usermanager.php:565
+#: usr/local/www/system_usermanager_addprivs.php:193
+#: usr/local/www/system_usermanager.php:563
+#: usr/local/www/system_groupmanager_addprivs.php:194
+#: usr/local/www/system_groupmanager.php:337
+msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items"
+msgstr "Segure a tecla CTRL (pc)/ COMMAND (mac) para selecionar múltiplos items"
+
+#: usr/local/www/system_groupmanager.php:342
+#: usr/local/www/system_groupmanager.php:345
+msgid "Assigned Privileges"
+msgstr "Privilégios atribuídos"
+
+#: usr/local/www/system_groupmanager.php:363
+#: usr/local/www/system_usermanager.php:601
+#: usr/local/www/system_usermanager.php:599
+#: usr/local/www/system_groupmanager.php:366
+msgid "Do you really want to delete this privilege?"
+msgstr "Você realmente deseja apagar esse privilégio?"
+
+#: usr/local/www/system_groupmanager.php:406
+#: usr/local/www/system_groupmanager.php:407
+#: usr/local/www/system_groupmanager.php:410
+msgid "Member Count"
+msgstr "Contagem de membros"
+
+#: usr/local/www/system_groupmanager.php:447
+#: usr/local/www/system_groupmanager.php:450
+#: usr/local/www/system_groupmanager.php:468
+#: usr/local/www/system_groupmanager.php:471
+msgid "Do you really want to delete this group?"
+msgstr "Você realmente deseja apagar esse grupo?"
+
+#: usr/local/www/system_groupmanager.php:448
+#: usr/local/www/system_groupmanager.php:451
+#: usr/local/www/system_groupmanager.php:469
+#: usr/local/www/system_groupmanager.php:472
+msgid "delete group"
+msgstr "remover grupo"
+
+#: usr/local/www/system_groupmanager.php:460
+#: usr/local/www/system_groupmanager.php:465
+#: usr/local/www/system_groupmanager.php:415
+#: usr/local/www/system_groupmanager.php:418
+msgid "add group"
+msgstr "adicionar grupo"
+
+#: usr/local/www/system_groupmanager.php:467
+msgid ""
+"Additional webConfigurator groups can be added here. \n"
+"\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n"
+"\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n"
+"\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted."
+msgstr ""
+"Grupos webConfigurator adicionais podem ser adicionados aqui. \n"
+"\t\t\t\t\t\t\t\tPermissões de grupo podem ser designadas, as quais são herdadas de usuários que são membros do grupo.\n"
+"\t\t\t\t\t\t\t\tUm ícone que aparece cinza indica que é um objetos definido pelo sistema.\n"
+"\t\t\t\t\t\t\t\tAlgumas propriedades de objetos de sistema podem ser modificadas, mas não podem ser apagadas."
+
+#: usr/local/www/system_groupmanager_addprivs.php:56
+msgid "Add privileges"
+msgstr "Adicionar privilégios"
+
+#: usr/local/www/system_groupmanager_addprivs.php:79
+#: usr/local/www/system_usermanager_addprivs.php:84
+msgid "Selected priveleges"
+msgstr "Privilégios selecionados"
+
+#: usr/local/www/system_groupmanager_addprivs.php:182
+#: usr/local/www/system_usermanager_addprivs.php:181
+#: usr/local/www/system_groupmanager_addprivs.php:180
+msgid "System Privileges"
+msgstr "Privilégios de Sistema"
+
+#: usr/local/www/system_groupmanager_addprivs.php:218
+#: usr/local/www/system_usermanager_addprivs.php:199
+#: usr/local/www/system_groupmanager_addprivs.php:216
+msgid "Select a privilege from the list above for a description"
+msgstr "Selecione um privilégio da lista acima para uma descrição"
+
+#: usr/local/www/system_usermanager.php:157
+#: usr/local/www/system_usermanager.php:692
+#: usr/local/www/system_usermanager.php:701
+#: usr/local/www/vpn_ipsec_phase1.php:166
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/system_usermanager.php:690
+#: usr/local/www/system_usermanager.php:699
+#: usr/local/www/vpn_openvpn_server.php:287
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/vpn_openvpn_server.php:288
+#: usr/local/www/vpn_openvpn_client.php:220
+#: usr/local/www/vpn_openvpn_client.php:238
+#: usr/local/www/vpn_openvpn_server.php:309
+msgid "Certificate"
+msgstr "Certificado"
+
+#: usr/local/www/system_usermanager.php:158
+msgid "association removed."
+msgstr "associação removida."
+
+#: usr/local/www/system_usermanager.php:202
+msgid "The username is longer than 16 characters."
+msgstr "O nome de usuário contém mais de 16 caractéres."
+
+#: usr/local/www/system_usermanager.php:226
+msgid "That username is reserved by the system."
+msgstr "Esse nome de usuário está reservado pelo sistema."
+
+#: usr/local/www/system_usermanager.php:250
+#: usr/local/www/system_usermanager.php:246
+msgid "Invalid expiration date format; use MM/DD/YYYY instead."
+msgstr "Formato de data de expiração inválido; use MM/DD/AAAA."
+
+#: usr/local/www/system_usermanager.php:257
+#: usr/local/www/system_usermanager.php:253
+msgid "Invalid internal Certificate Authority"
+msgstr "Fonte Certificadora interna inválida"
+
+#: usr/local/www/system_usermanager.php:489
+#: usr/local/www/system_usermanager_passwordmg.php:109
+#: usr/local/www/system_usermanager.php:487
+#: usr/local/www/system_usermanager_passwordmg.php:110
+#: usr/local/www/system_usermanager_passwordmg.php:115
+msgid "(confirmation)"
+msgstr "(confirmação)"
+
+#: usr/local/www/system_usermanager.php:493
+#: usr/local/www/system_usermanager.php:788
+#: usr/local/www/system_usermanager.php:491
+#: usr/local/www/system_usermanager.php:786
+#: usr/local/www/system_usermanager.php:787
+msgid "Full name"
+msgstr "Nome completo"
+
+#: usr/local/www/system_usermanager.php:497
+#: usr/local/www/system_usermanager.php:495
+msgid "User's full name, for your own information only"
+msgstr "Nome completo do usuário, para sua própria referência somente"
+
+#: usr/local/www/system_usermanager.php:501
+#: usr/local/www/system_usermanager.php:499
+msgid "Expiration date"
+msgstr "Data de expiração"
+
+#: usr/local/www/system_usermanager.php:505
+#: usr/local/www/system_usermanager.php:503
+msgid "Pick a date"
+msgstr "Selecione uma data"
+
+#: usr/local/www/system_usermanager.php:508
+#: usr/local/www/system_usermanager.php:506
+msgid "Leave blank if the account shouldn't expire, otherwise enter the expiration date in the following format: mm/dd/yyyy"
+msgstr "Deixe em branco se a conta não deve expirar, do contrário, informe a data de expiração no seguinte formato: mm/dd/aaaa"
+
+#: usr/local/www/system_usermanager.php:516
+#: usr/local/www/system_usermanager.php:514
+msgid "Not Member Of"
+msgstr "Não é Membro De"
+
+#: usr/local/www/system_usermanager.php:536
+#: usr/local/www/system_usermanager.php:534
+msgid "Add Groups"
+msgstr "Adicionar Grupos"
+
+#: usr/local/www/system_usermanager.php:540
+#: usr/local/www/system_usermanager.php:538
+msgid "Remove Groups"
+msgstr "Remover Grupos"
+
+#: usr/local/www/system_usermanager.php:544
+#: usr/local/www/system_usermanager.php:542
+msgid "Member Of"
+msgstr "Membro De"
+
+#: usr/local/www/system_usermanager.php:572
+#: usr/local/www/system_usermanager.php:570
+msgid "Effective Privileges"
+msgstr "Privilégios efetivos"
+
+#: usr/local/www/system_usermanager.php:576
+#: usr/local/www/system_usermanager.php:574
+msgid "Inherited From"
+msgstr "Herdado de"
+
+#: usr/local/www/system_usermanager.php:626
+#: usr/local/www/system_usermanager.php:624
+msgid "User Certificates"
+msgstr "Certificados de usuário"
+
+#: usr/local/www/system_usermanager.php:631
+#: usr/local/www/system_usermanager.php:629
+msgid "CA"
+msgstr "CA"
+
+#: usr/local/www/system_usermanager.php:655
+#: usr/local/www/system_usermanager.php:653
+msgid "export private key"
+msgstr "exportar chave privada"
+
+#: usr/local/www/system_usermanager.php:660
+#: usr/local/www/system_usermanager.php:658
+msgid "Do you really want to remove this certificate association?"
+msgstr "Você realmente deseja apagar esta associação de certificado?"
+
+#: usr/local/www/system_usermanager.php:660
+#: usr/local/www/system_usermanager.php:658
+msgid "(Certificate will not be deleted)"
+msgstr "(Certificado não será apagado)"
+
+#: usr/local/www/system_usermanager.php:694
+#: usr/local/www/system_usermanager.php:692
+msgid "Click to create a user certificate."
+msgstr "Clique para criar um certificado de usuário."
+
+#: usr/local/www/system_usermanager.php:752
+#: usr/local/www/system_usermanager.php:758
+#: usr/local/www/system_usermanager.php:750
+#: usr/local/www/system_usermanager.php:756
+msgid "Authorized keys"
+msgstr "Chaves autorizadas"
+
+#: usr/local/www/system_usermanager.php:754
+#: usr/local/www/system_usermanager.php:752
+msgid "Click to paste an authorized key."
+msgstr "Clique para colar uma chave autorizada."
+
+#: usr/local/www/system_usermanager.php:762
+#: usr/local/www/system_usermanager.php:760
+msgid "Paste an authorized keys file here."
+msgstr "Cole um arquivo de chaves autorizadas aqui."
+
+#: usr/local/www/system_usermanager.php:766
+#: usr/local/www/system_usermanager.php:764
+msgid "IPsec Pre-Shared Key"
+msgstr "Chave Pre-Compartilhada IPsec"
+
+#: usr/local/www/system_usermanager.php:828
+#: usr/local/www/system_usermanager.php:826
+#: usr/local/www/system_usermanager.php:829
+#: usr/local/www/system_usermanager.php:852
+msgid "Do you really want to delete this User?"
+msgstr "Você realmente deseja apagar esse Usuário?"
+
+#: usr/local/www/system_usermanager.php:849
+#: usr/local/www/system_usermanager.php:847
+#: usr/local/www/system_usermanager.php:852
+#: usr/local/www/system_usermanager.php:805
+msgid "Additional users can be added here. User permissions for accessing the webConfigurator can be assigned directly or inherited from group memberships. An icon that appears grey indicates that it is a system defined object. Some system object properties can be modified but they cannot be deleted."
+msgstr "Usuários adicionais podem ser adicionados aqui. Permissões de usuário para acessar o webConfigurator podem ser atribuídos diretamente ou herdados de membros do grupo. Um ícone que aparece cinza indica que é um sistema de objeto definido. Algumas propriedades objeto do sistema pode ser modificado, mas eles não podem ser excluídas."
+
+#: usr/local/www/system_usermanager.php:854
+#: usr/local/www/system_usermanager.php:852
+#: usr/local/www/system_usermanager.php:857
+#: usr/local/www/system_usermanager.php:810
+msgid "Accounts created here are also used for other parts of the system such as OpenVPN, IPsec, and Captive Portal."
+msgstr "Contas criadas aqui são usadas também para outras partes do sistema, tais como OpenVPN, IPsec e Captive Portal."
+
+#: usr/local/www/system_usermanager_passwordmg.php:43
+msgid "User Password"
+msgstr "Senha de Usuário"
+
+#: usr/local/www/system_usermanager_passwordmg.php:63
+msgid "Password successfully changed"
+msgstr "Senha modificada com sucesso"
+
+#: usr/local/www/system_usermanager_passwordmg.php:86
+#: usr/local/www/system_usermanager_passwordmg.php:87
+#: usr/local/www/system_usermanager_passwordmg.php:92
+msgid "Sorry, you cannot change the password for a non-local user."
+msgstr "Lamento, você não pode mudar a senha para um usuário que não seja local."
+
+#: usr/local/www/system_usermanager_passwordmg.php:112
+#: usr/local/www/system_usermanager_passwordmg.php:113
+#: usr/local/www/system_usermanager_passwordmg.php:118
+msgid "Select a new password"
+msgstr "Selecione uma nova senha"
+
+#: usr/local/www/system_usermanager_settings.php:51
+msgid "User manager settings"
+msgstr "Configurações de gerenciamento de usuário"
+
+#: usr/local/www/system_usermanager_settings.php:61
+msgid "Session timeout must be an integer value."
+msgstr "Expiração de Sessão deve ser um valor inteiro."
+
+#: usr/local/www/system_usermanager_settings.php:71
+msgid "The test was not performed because it is supported only for ldap based backends."
+msgstr "O teste não foi realizado porque ele somente é suportado por backends baseados em ldap."
+
+#: usr/local/www/system_usermanager_settings.php:131
+#: usr/local/www/system_usermanager_settings.php:134
+msgid "Session Timeout"
+msgstr "Expiração de Sessão"
+
+#: usr/local/www/system_usermanager_settings.php:135
+#: usr/local/www/system_usermanager_settings.php:138
+msgid "Time in minutes to expire idle management sessions. The default is 4 hours (240 minutes)."
+msgstr "Tempo em minutos para expirar sessões de gerenciamento ociosas. O padrão é 4 horas (240 minutos)."
+
+#: usr/local/www/system_usermanager_settings.php:136
+#: usr/local/www/system_usermanager_settings.php:139
+msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!"
+msgstr "Informe 0 para nunca expirar sessões. NOTA: Isso é um risco de segurança!"
+
+#: usr/local/www/system_usermanager_settings.php:162
+#: usr/local/www/system_usermanager_settings.php:165
+msgid "Save and Test"
+msgstr "Salvar e Testar"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97
+msgid "Could not connect to the LDAP server. Please check your LDAP configuration."
+msgstr "Não pôde conectar ao servidor LDAP. Por favor, verifique sua configuração do LDAP."
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98
+#: usr/local/www/system_usermanager_settings_test.php:119
+msgid "Close"
+msgstr "Fechar"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100
+msgid "Please select which containers to Authenticate against:"
+msgstr "Por favor selecione quais contêiners pelos quais Autenticar:"
+
+#: usr/local/www/system_usermanager_settings_test.php:76
+#, php-format
+msgid "Could not find settings for %s%s"
+msgstr "Não pôde encontrar configurações para %s%s"
+
+#: usr/local/www/system_usermanager_settings_test.php:78
+msgid "Testing pfSense LDAP settings... One moment please..."
+msgstr "Testanto configurações LDAP do pfSense... Um momento por favor..."
+
+#: usr/local/www/system_usermanager_settings_test.php:82
+msgid "Attempting connection to"
+msgstr "Tentando conectar em"
+
+#: usr/local/www/system_usermanager_settings_test.php:86
+msgid "Attempting bind to"
+msgstr "Tentando vincular a"
+
+#: usr/local/www/system_usermanager_settings_test.php:90
+msgid "Attempting to fetch Organizational Units from"
+msgstr "Tentando obter Unidades Organizacionais de"
+
+#: usr/local/www/system_usermanager_settings_test.php:96
+msgid "Organization units found"
+msgstr "Encontradas unidades organizacionais"
+
+#: usr/local/www/system_usermanager_settings_test.php:103
+#: usr/local/www/system_usermanager_settings_test.php:108
+#: usr/local/www/system_usermanager_settings_test.php:112
+msgid "failed"
+msgstr "falhou"
+
+#: usr/local/www/upload_progress.php:44
+msgid "Sorry, we could not find an uploadid code."
+msgstr "Lamento, não pudemos encontrar um código de carregamento."
+
+#: usr/local/www/upload_progress.php:86
+msgid "Uploading Files"
+msgstr "Carregando Arquivos"
+
+#: usr/local/www/upload_progress.php:86
+msgid "Please wait"
+msgstr "Por favor, aguarde"
+
+#: usr/local/www/upload_progress.php:95
+msgid "Uploading file"
+msgstr "Carregando arquivo"
+
+#: usr/local/www/upload_progress.php:123
+msgid "Uploaded"
+msgstr "Carregado"
+
+#: usr/local/www/upload_progress.php:133
+msgid "File Size"
+msgstr "Tamanho do Arquivo"
+
+#: usr/local/www/upload_progress.php:145
+msgid "Completed"
+msgstr "Completo"
+
+#: usr/local/www/upload_progress.php:155
+msgid "Estimated"
+msgstr "Estimado"
+
+#: usr/local/www/vpn_ipsec_phase1.php:160
+#: usr/local/www/vpn_ipsec_phase1.php:662
+#: usr/local/www/vpn_ipsec_phase1.php:675
+#: usr/local/www/vpn_ipsec_mobile.php:347 usr/local/www/vpn_ipsec_keys.php:104
+#: usr/local/www/vpn_ipsec_keys_edit.php:69
+#: usr/local/www/vpn_ipsec_keys_edit.php:135 usr/local/www/interfaces.php:2486
+#: usr/local/www/vpn_ipsec_phase1.php:674
+#: usr/local/www/vpn_ipsec_phase1.php:695 usr/local/www/interfaces.php:2516
+#: usr/local/www/interfaces.php:2562 usr/local/www/interfaces.php:2551
+#: usr/local/www/interfaces.php:2587
+msgid "Pre-Shared Key"
+msgstr "Chave Pré-Compartilhada"
+
+#: usr/local/www/vpn_ipsec_phase1.php:171
+#: usr/local/www/vpn_ipsec_phase1.php:564
+#: usr/local/www/vpn_ipsec_phase1.php:577
+#: usr/local/www/vpn_ipsec_phase1.php:576
+#: usr/local/www/vpn_ipsec_phase1.php:597
+msgid "Remote gateway"
+msgstr "Gateway remota"
+
+#: usr/local/www/vpn_ipsec_phase1.php:177
+msgid "The P1 lifetime must be an integer."
+msgstr "O tempo de vida da F1 deve ser um inteiro."
+
+#: usr/local/www/vpn_ipsec_phase1.php:180
+#: usr/local/www/vpn_ipsec_phase1.php:181
+msgid "A valid remote gateway address or host name must be specified."
+msgstr "Um endereço de gateway remoto válido ou nome de host deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:188
+#: usr/local/www/vpn_ipsec_phase1.php:194
+#, php-format
+msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"."
+msgstr "O gateway remoto \"%1$s\" já está sendo usado pela fase 1 \"%2$s\"."
+
+#: usr/local/www/vpn_ipsec_phase1.php:201
+#: usr/local/www/vpn_ipsec_phase1.php:222
+msgid "Please enter an address for 'My Identifier'"
+msgstr "Por favor informe um endereço para 'Meu identificador'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:204
+#: usr/local/www/vpn_ipsec_phase1.php:225
+msgid "Please enter a keyid tag for 'My Identifier'"
+msgstr "Por favor, informe uma tag keyid para 'Meu Identificador'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:207
+#: usr/local/www/vpn_ipsec_phase1.php:228
+msgid "Please enter a fully qualified domain name for 'My Identifier'"
+msgstr "Por favor, informe um nome de domínio completamente qualificado para 'Meu Identificador'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:210
+#: usr/local/www/vpn_ipsec_phase1.php:231
+msgid "Please enter a user and fully qualified domain name for 'My Identifier'"
+msgstr "Por favor, informe um usuário e um nome de domínio completamente qualificado para 'Meu Identificador'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:213
+#: usr/local/www/vpn_ipsec_phase1.php:234
+msgid "Please enter a dynamic domain name for 'My Identifier'"
+msgstr "Por favor, informe um nome de domínio dinâmico para 'Meu Identificado'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:216
+#: usr/local/www/vpn_ipsec_phase1.php:237
+msgid "A valid IP address for 'My identifier' must be specified."
+msgstr "Um endereço IP válido para 'Meu Identificador' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:219
+#: usr/local/www/vpn_ipsec_phase1.php:240
+msgid "A valid domain name for 'My identifier' must be specified."
+msgstr "Um nome de domínio válidos para 'Meu Identificador' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:223
+#: usr/local/www/vpn_ipsec_phase1.php:244
+msgid "A valid FQDN for 'My identifier' must be specified."
+msgstr "Um FQDN válido para 'Meu identificador' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:228
+#: usr/local/www/vpn_ipsec_phase1.php:249
+msgid "A valid User FQDN in the form of user@my.domain.com for 'My identifier' must be specified."
+msgstr "Um usuário FQDN válido na forma usuario@meu.dominio.com para 'Meu Identificador' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:233
+#: usr/local/www/vpn_ipsec_phase1.php:254
+msgid "A valid Dynamic DNS address for 'My identifier' must be specified."
+msgstr "Um endereço de DNS Dinâmico válido para 'Meu Identificador' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:243
+#: usr/local/www/vpn_ipsec_phase1.php:264
+msgid "Please enter an address for 'Peer Identifier'"
+msgstr "Por favor, informe um endereço para 'Identificador do Peer'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:246
+#: usr/local/www/vpn_ipsec_phase1.php:267
+msgid "Please enter a keyid tag for 'Peer Identifier'"
+msgstr "Por favor, informe uma tag keyid para 'Identificador do Peer'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:249
+#: usr/local/www/vpn_ipsec_phase1.php:270
+msgid "Please enter a fully qualified domain name for 'Peer Identifier'"
+msgstr "Por favor, informe um nome de domínio completamente qualificado para 'Identificador do Peer'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:252
+#: usr/local/www/vpn_ipsec_phase1.php:273
+msgid "Please enter a user and fully qualified domain name for 'Peer Identifier'"
+msgstr "Por favor, informe um usuário e um nome de domínio completamente qualificado para 'Identificador do Peer'"
+
+#: usr/local/www/vpn_ipsec_phase1.php:255
+#: usr/local/www/vpn_ipsec_phase1.php:276
+msgid "A valid IP address for 'Peer identifier' must be specified."
+msgstr "Um endereço de IP válido para 'Identificador do Peer' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:258
+#: usr/local/www/vpn_ipsec_phase1.php:279
+msgid "A valid domain name for 'Peer identifier' must be specified."
+msgstr "Um nomde de domínio válido para 'Identificador do Peer' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:262
+#: usr/local/www/vpn_ipsec_phase1.php:283
+msgid "A valid FQDN for 'Peer identifier' must be specified."
+msgstr "Um FQDN válido para 'Identificador de peer' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:267
+#: usr/local/www/vpn_ipsec_phase1.php:288
+msgid "A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' must be specified."
+msgstr "Um usuário FQDN válido na forma de usuario@meu.dominio.com para 'Identificador de peer' deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase1.php:273
+#: usr/local/www/vpn_ipsec_phase1.php:294
+msgid "A numeric value must be specified for DPD delay."
+msgstr "Um valor numérico deve ser especificado para atraso de DPD."
+
+#: usr/local/www/vpn_ipsec_phase1.php:276
+#: usr/local/www/vpn_ipsec_phase1.php:297
+msgid "A numeric value must be specified for DPD retries."
+msgstr "Um valor numérico deve ser especificado para tentativas de DPD."
+
+#: usr/local/www/vpn_ipsec_phase1.php:358
+#: usr/local/www/vpn_ipsec_phase1.php:360
+#: usr/local/www/vpn_ipsec_phase1.php:379
+#: usr/local/www/vpn_ipsec_phase1.php:381
+msgid "Edit Phase 1"
+msgstr "Editar Fase 1"
+
+#: usr/local/www/vpn_ipsec_phase1.php:509
+#: usr/local/www/vpn_openvpn_client.php:383
+#: usr/local/www/vpn_openvpn_csc.php:311
+#: usr/local/www/vpn_openvpn_server.php:601
+#: usr/local/www/vpn_openvpn_server.php:674
+#: usr/local/www/vpn_openvpn_client.php:388
+#: usr/local/www/vpn_openvpn_csc.php:310
+#: usr/local/www/vpn_openvpn_server.php:692
+#: usr/local/www/vpn_openvpn_client.php:396
+#: usr/local/www/vpn_ipsec_phase1.php:508
+#: usr/local/www/vpn_openvpn_client.php:414
+#: usr/local/www/vpn_ipsec_phase1.php:529
+#: usr/local/www/vpn_openvpn_server.php:718
+msgid "General information"
+msgstr "Informação geral"
+
+#: usr/local/www/vpn_ipsec_phase1.php:515
+#: usr/local/www/vpn_ipsec_phase1.php:514
+#: usr/local/www/vpn_ipsec_phase1.php:535
+msgid "Disable this phase1 entry"
+msgstr "Desabilitar essa entrada de fase 1"
+
+#: usr/local/www/vpn_ipsec_phase1.php:517
+#: usr/local/www/vpn_ipsec_phase1.php:516
+#: usr/local/www/vpn_ipsec_phase1.php:537
+msgid "Set this option to disable this phase1 without removing it from the list"
+msgstr "Configure essa opção para desabilitar essa fase1 sem removê-la da lista"
+
+#: usr/local/www/vpn_ipsec_phase1.php:523
+#: usr/local/www/vpn_ipsec_phase1.php:522
+#: usr/local/www/vpn_ipsec_phase1.php:543
+msgid "Internet Protocol"
+msgstr "Protocolo de internet"
+
+#: usr/local/www/vpn_ipsec_phase1.php:534
+#: usr/local/www/vpn_ipsec_phase1.php:533
+#: usr/local/www/vpn_ipsec_phase1.php:554
+msgid "Select the Internet Protocol family from this dropdown"
+msgstr "Selecione a família Protocolo de Internet a partir desta lista"
+
+#: usr/local/www/vpn_ipsec_phase1.php:557
+#: usr/local/www/vpn_ipsec_phase1.php:570
+#: usr/local/www/vpn_ipsec_phase1.php:569
+#: usr/local/www/vpn_ipsec_phase1.php:590
+msgid "Select the interface for the local endpoint of this phase1 entry"
+msgstr "Selecione a interface para o endpoint local dessa entrada da fase 1"
+
+#: usr/local/www/vpn_ipsec_phase1.php:568
+#: usr/local/www/vpn_ipsec_phase1.php:581
+#: usr/local/www/vpn_ipsec_phase1.php:580
+#: usr/local/www/vpn_ipsec_phase1.php:601
+msgid "Enter the public IP address or host name of the remote gateway"
+msgstr "Informe o endereço IP público ou nome de host do gateway remoto"
+
+#: usr/local/www/vpn_ipsec_phase1.php:590
+#: usr/local/www/vpn_ipsec_phase1.php:603
+#: usr/local/www/vpn_ipsec_phase1.php:602
+#: usr/local/www/vpn_ipsec_phase1.php:623
+msgid "Phase 1 proposal (Authentication)"
+msgstr "Proposta da Fase 1 (Autenticação)"
+
+#: usr/local/www/vpn_ipsec_phase1.php:594
+#: usr/local/www/vpn_openvpn_client.php:514
+#: usr/local/www/vpn_openvpn_client.php:519
+#: usr/local/www/vpn_ipsec_phase1.php:607
+#: usr/local/www/vpn_openvpn_client.php:537
+#: usr/local/www/vpn_ipsec_phase1.php:606
+#: usr/local/www/vpn_openvpn_client.php:556
+#: usr/local/www/vpn_ipsec_phase1.php:627
+msgid "Authentication method"
+msgstr "Método de Autenticação"
+
+#: usr/local/www/vpn_ipsec_phase1.php:609
+#: usr/local/www/vpn_ipsec_phase1.php:735
+#: usr/local/www/vpn_ipsec_phase1.php:753
+#: usr/local/www/vpn_ipsec_phase1.php:622
+#: usr/local/www/vpn_ipsec_phase1.php:748
+#: usr/local/www/vpn_ipsec_phase1.php:766
+#: usr/local/www/vpn_ipsec_phase1.php:621
+#: usr/local/www/vpn_ipsec_phase1.php:747
+#: usr/local/www/vpn_ipsec_phase1.php:763
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:768
+#: usr/local/www/vpn_ipsec_phase1.php:784
+msgid "Must match the setting chosen on the remote side"
+msgstr "Deve corresponder à configuração escolhida no lado remoto"
+
+#: usr/local/www/vpn_ipsec_phase1.php:614
+#: usr/local/www/vpn_ipsec_phase1.php:627
+#: usr/local/www/vpn_ipsec_phase1.php:626
+#: usr/local/www/vpn_ipsec_phase1.php:647
+msgid "Negotiation mode"
+msgstr "Modo de Negociação"
+
+#: usr/local/www/vpn_ipsec_phase1.php:625
+#: usr/local/www/vpn_ipsec_phase1.php:638
+#: usr/local/www/vpn_ipsec_phase1.php:637
+#: usr/local/www/vpn_ipsec_phase1.php:658
+msgid "Aggressive is more flexible, but less secure"
+msgstr "Agressivo é mais flexível, mas não menos seguro"
+
+#: usr/local/www/vpn_ipsec_phase1.php:629
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:641
+#: usr/local/www/vpn_ipsec_phase1.php:662
+msgid "My identifier"
+msgstr "Meu Identificador"
+
+#: usr/local/www/vpn_ipsec_phase1.php:642
+#: usr/local/www/vpn_ipsec_phase1.php:655
+#: usr/local/www/vpn_ipsec_phase1.php:654
+#: usr/local/www/vpn_ipsec_phase1.php:675
+msgid "Peer identifier"
+msgstr "Identificador do peer"
+
+#: usr/local/www/vpn_ipsec_phase1.php:657
+#: usr/local/www/vpn_ipsec_phase1.php:670
+#: usr/local/www/vpn_ipsec_phase1.php:669
+#: usr/local/www/vpn_ipsec_phase1.php:690
+msgid "NOTE: This is known as the \"group\" setting on some VPN client implementations"
+msgstr "NOTA: Isso é conhecido como a configuração de \"grupo\" em algumas implementações de cliente VPN"
+
+#: usr/local/www/vpn_ipsec_phase1.php:668
+#: usr/local/www/vpn_ipsec_phase1.php:681
+msgid "Input your pre-shared key string"
+msgstr "Insira sua string de chave pré-configurada"
+
+#: usr/local/www/vpn_ipsec_phase1.php:673
+#: usr/local/www/vpn_ipsec_phase1.php:686
+#: usr/local/www/vpn_ipsec_phase1.php:685
+#: usr/local/www/vpn_ipsec_phase1.php:706
+msgid "Policy Generation"
+msgstr "Geração de política"
+
+#: usr/local/www/vpn_ipsec_phase1.php:684
+#: usr/local/www/vpn_ipsec_phase1.php:697
+#: usr/local/www/vpn_ipsec_phase1.php:696
+#: usr/local/www/vpn_ipsec_phase1.php:717
+msgid "When working as a responder (as with mobile clients), this controls how policies are generated based on SA proposals."
+msgstr "Ao trabalhar com um responder (como em clientes móveis), isto controla como as políticas são geradas com base nas propostas SA."
+
+#: usr/local/www/vpn_ipsec_phase1.php:689
+#: usr/local/www/vpn_ipsec_phase1.php:702
+#: usr/local/www/vpn_ipsec_phase1.php:701
+#: usr/local/www/vpn_ipsec_phase1.php:722
+msgid "Proposal Checking"
+msgstr "Verificação de Proposta"
+
+#: usr/local/www/vpn_ipsec_phase1.php:700
+#: usr/local/www/vpn_ipsec_phase1.php:713
+#: usr/local/www/vpn_ipsec_phase1.php:712
+#: usr/local/www/vpn_ipsec_phase1.php:733
+msgid "Specifies the action of lifetime length, key length, and PFS of the phase 2 selection on the responder side, and the action of lifetime check in phase 1."
+msgstr "Especifica a ação de tamanho da tempo de vida, tamanho da chave, e PFS da seleção da fase 2 no lado que responde, e a ação de verificação de tempo de vida na fase 1."
+
+#: usr/local/www/vpn_ipsec_phase1.php:705
+#: usr/local/www/vpn_openvpn_client.php:706
+#: usr/local/www/vpn_openvpn_server.php:898
+#: usr/local/www/vpn_openvpn_server.php:971
+#: usr/local/www/vpn_openvpn_client.php:711
+#: usr/local/www/vpn_ipsec_phase1.php:718
+#: usr/local/www/vpn_openvpn_server.php:999
+#: usr/local/www/vpn_openvpn_client.php:729
+#: usr/local/www/vpn_ipsec_phase1.php:717
+#: usr/local/www/vpn_openvpn_client.php:748
+#: usr/local/www/vpn_ipsec_phase1.php:738
+#: usr/local/www/vpn_openvpn_server.php:1026
+msgid "Encryption algorithm"
+msgstr "Algoritmo de Criptografia"
+
+#: usr/local/www/vpn_ipsec_phase1.php:724
+#: usr/local/www/vpn_ipsec_phase1.php:737
+#: usr/local/www/vpn_ipsec_phase1.php:736
+#: usr/local/www/vpn_ipsec_phase1.php:757
+msgid "Hash algorithm"
+msgstr "Algorítmo de Hash"
+
+#: usr/local/www/vpn_ipsec_phase1.php:740
+#: usr/local/www/vpn_ipsec_phase1.php:753
+#: usr/local/www/vpn_ipsec_phase1.php:752
+#: usr/local/www/vpn_ipsec_phase1.php:773
+msgid "DH key group"
+msgstr "Grupo de chave DH"
+
+#: usr/local/www/vpn_ipsec_phase1.php:751
+#: usr/local/www/vpn_ipsec_phase2.php:603
+#: usr/local/www/vpn_ipsec_phase2.php:629
+#: usr/local/www/vpn_ipsec_phase1.php:764
+msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit"
+msgstr "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit"
+
+#: usr/local/www/vpn_ipsec_phase1.php:765
+#: usr/local/www/vpn_ipsec_phase1.php:778
+#: usr/local/www/vpn_ipsec_phase1.php:775
+#: usr/local/www/vpn_ipsec_phase1.php:796
+msgid "My Certificate"
+msgstr "Meu Certificado"
+
+#: usr/local/www/vpn_ipsec_phase1.php:779
+#: usr/local/www/vpn_ipsec_phase1.php:792
+#: usr/local/www/vpn_ipsec_phase1.php:789
+#: usr/local/www/vpn_ipsec_phase1.php:810
+msgid "Select a certificate previously configured in the Certificate Manager"
+msgstr "Selecione um certificado previamente configurado no Gerenciador de Certificado"
+
+#: usr/local/www/vpn_ipsec_phase1.php:784
+#: usr/local/www/vpn_ipsec_phase1.php:797
+#: usr/local/www/vpn_ipsec_phase1.php:794
+#: usr/local/www/vpn_ipsec_phase1.php:815
+msgid "My Certificate Authority"
+msgstr "Minha Fonte Certificadora"
+
+#: usr/local/www/vpn_ipsec_phase1.php:798
+#: usr/local/www/vpn_ipsec_phase1.php:811
+#: usr/local/www/vpn_ipsec_phase1.php:808
+#: usr/local/www/vpn_ipsec_phase1.php:829
+msgid "Select a certificate authority previously configured in the Certificate Manager"
+msgstr "Selecione uma fonte certificadora previamente configurada no Gerenciador de Certificados"
+
+#: usr/local/www/vpn_ipsec_phase1.php:809
+#: usr/local/www/vpn_ipsec_phase1.php:822
+#: usr/local/www/vpn_ipsec_phase1.php:819
+#: usr/local/www/vpn_ipsec_phase1.php:840
+msgid "NAT Traversal"
+msgstr "NAT Traversal"
+
+#: usr/local/www/vpn_ipsec_phase1.php:814
+#: usr/local/www/vpn_ipsec_phase1.php:827
+#: usr/local/www/vpn_ipsec_phase1.php:824
+#: usr/local/www/vpn_ipsec_phase1.php:845
+msgid "Force"
+msgstr "Forçar"
+
+#: usr/local/www/vpn_ipsec_phase1.php:818
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase1.php:828
+#: usr/local/www/vpn_ipsec_phase1.php:849
+msgid "Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in UDP packets) if needed, which can help with clients that are behind restrictive firewalls"
+msgstr "Configure essa opção para habilitar o uso de NAT-T (i.e. o encapsulamento de ESP em pacotes UDP) se necessário, o que pode ajudar com clientes que estão atrás de firewalls restritivos"
+
+#: usr/local/www/vpn_ipsec_phase1.php:824
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:834
+#: usr/local/www/vpn_ipsec_phase1.php:855
+msgid "Dead Peer Detection"
+msgstr "Detecção de Dead Peer"
+
+#: usr/local/www/vpn_ipsec_phase1.php:827
+#: usr/local/www/vpn_ipsec_phase1.php:840
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:858
+msgid "Enable DPD"
+msgstr "Habilitar DPD"
+
+#: usr/local/www/vpn_ipsec_phase1.php:833
+#: usr/local/www/vpn_ipsec_phase1.php:846
+#: usr/local/www/vpn_ipsec_phase1.php:843
+#: usr/local/www/vpn_ipsec_phase1.php:864
+msgid "Delay between requesting peer acknowledgement"
+msgstr "Atraso entre requisições de reconhecimento de peer"
+
+#: usr/local/www/vpn_ipsec_phase1.php:837
+#: usr/local/www/vpn_ipsec_phase1.php:850
+#: usr/local/www/vpn_ipsec_phase1.php:847
+#: usr/local/www/vpn_ipsec_phase1.php:868
+msgid "retries"
+msgstr "tentativas"
+
+#: usr/local/www/vpn_ipsec_phase1.php:839
+#: usr/local/www/vpn_ipsec_phase1.php:852
+#: usr/local/www/vpn_ipsec_phase1.php:849
+#: usr/local/www/vpn_ipsec_phase1.php:870
+msgid "Number of consecutive failures allowed before disconnect"
+msgstr "Número de falhas consecutivas permitidas antes de desconectar"
+
+#: usr/local/www/vpn_ipsec_phase2.php:109
+#: usr/local/www/vpn_ipsec_phase2.php:111
+msgid "A valid ikeid must be specified."
+msgstr "Um ikeid válido deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:113
+#: usr/local/www/vpn_ipsec_phase2.php:115
+msgid "Local network type"
+msgstr "Tipo de rede local"
+
+#: usr/local/www/vpn_ipsec_phase2.php:113
+#: usr/local/www/vpn_ipsec_phase2.php:115
+msgid "P2 Hash Algorithms"
+msgstr "Algorpítimos de Hash da F2"
+
+#: usr/local/www/vpn_ipsec_phase2.php:116
+#: usr/local/www/vpn_ipsec_phase2.php:118
+msgid "Remote network type"
+msgstr "Tipo de rede remota"
+
+#: usr/local/www/vpn_ipsec_phase2.php:126
+#: usr/local/www/vpn_ipsec_phase2.php:128
+msgid "A valid local network bit count must be specified."
+msgstr "Um contador de bits de rede local válido deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:129
+#: usr/local/www/vpn_ipsec_phase2.php:131
+msgid "A valid local network IP address must be specified."
+msgstr "Um endereço IP válido da rede local deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+#: usr/local/www/vpn_ipsec_phase2.php:146
+#: usr/local/www/vpn_ipsec_phase2.php:170
+#: usr/local/www/vpn_ipsec_phase2.php:178
+msgid "A valid remote network bit count must be specified."
+msgstr "Um contador de bits de rede remota válido deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:139
+#: usr/local/www/vpn_ipsec_phase2.php:149
+#: usr/local/www/vpn_ipsec_phase2.php:173
+#: usr/local/www/vpn_ipsec_phase2.php:181
+msgid "A valid remote network IP address must be specified."
+msgstr "Um endereço IP válido da rede remota deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:158
+#: usr/local/www/vpn_ipsec_phase2.php:162
+#: usr/local/www/vpn_ipsec_phase2.php:168
+#: usr/local/www/vpn_ipsec_phase2.php:172
+#: usr/local/www/vpn_ipsec_phase2.php:192
+#: usr/local/www/vpn_ipsec_phase2.php:196
+#: usr/local/www/vpn_ipsec_phase2.php:206
+#: usr/local/www/vpn_ipsec_phase2.php:210
+msgid "Phase2 with this Local Network is already defined for mobile clients."
+msgstr "Phase2 com esta rede local já está definido para clientes móveis."
+
+#: usr/local/www/vpn_ipsec_phase2.php:189
+#: usr/local/www/vpn_ipsec_phase2.php:193
+#: usr/local/www/vpn_ipsec_phase2.php:199
+#: usr/local/www/vpn_ipsec_phase2.php:203
+#: usr/local/www/vpn_ipsec_phase2.php:223
+#: usr/local/www/vpn_ipsec_phase2.php:227
+#: usr/local/www/vpn_ipsec_phase2.php:237
+#: usr/local/www/vpn_ipsec_phase2.php:241
+msgid "Phase2 with this Local/Remote networks combination is already defined for this Phase1."
+msgstr "Phase2 com esta combinação de redes local/remota já está definido para esta Phase1."
+
+#: usr/local/www/vpn_ipsec_phase2.php:204
+#: usr/local/www/vpn_ipsec_phase2.php:216
+#: usr/local/www/vpn_ipsec_phase2.php:240
+#: usr/local/www/vpn_ipsec_phase2.php:254
+msgid "At least one encryption algorithm must be selected."
+msgstr "Pelo menos um algorítimo de criptografica deve ser selecionado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:207
+#: usr/local/www/vpn_ipsec_phase2.php:220
+#: usr/local/www/vpn_ipsec_phase2.php:244
+#: usr/local/www/vpn_ipsec_phase2.php:258
+msgid "The P2 lifetime must be an integer."
+msgstr "O tempo de vida da F2 deve ser um inteiro."
+
+#: usr/local/www/vpn_ipsec_phase2.php:255
+#: usr/local/www/vpn_ipsec_phase2.php:257
+#: usr/local/www/vpn_ipsec_phase2.php:268
+#: usr/local/www/vpn_ipsec_phase2.php:270
+#: usr/local/www/vpn_ipsec_phase2.php:294
+#: usr/local/www/vpn_ipsec_phase2.php:296
+#: usr/local/www/vpn_ipsec_phase2.php:316
+#: usr/local/www/vpn_ipsec_phase2.php:318
+msgid "Edit Phase 2"
+msgstr "Editar Fase 2"
+
+#: usr/local/www/vpn_ipsec_phase2.php:396
+#: usr/local/www/vpn_ipsec_phase2.php:422
+#: usr/local/www/vpn_ipsec_phase2.php:488
+#: usr/local/www/vpn_ipsec_phase2.php:510
+msgid "Disable this phase2 entry"
+msgstr "Desabilitar essa entrada da fase 2"
+
+#: usr/local/www/vpn_ipsec_phase2.php:398
+#: usr/local/www/vpn_ipsec_phase2.php:424
+#: usr/local/www/vpn_ipsec_phase2.php:490
+#: usr/local/www/vpn_ipsec_phase2.php:512
+msgid "Set this option to disable this phase2 entry without removing it from the list"
+msgstr "Configurar essa opção para desabilitar essa entrada da fase 2 sem removê-la da lista"
+
+#: usr/local/www/vpn_ipsec_phase2.php:433
+#: usr/local/www/vpn_ipsec_phase2.php:459
+#: usr/local/www/vpn_ipsec_phase2.php:525
+#: usr/local/www/vpn_ipsec_phase2.php:561
+#: usr/local/www/vpn_ipsec_phase2.php:547
+#: usr/local/www/vpn_ipsec_phase2.php:582
+#, php-format
+msgid "%s subnet"
+msgstr " subrede %s"
+
+#: usr/local/www/vpn_ipsec_phase2.php:512
+#: usr/local/www/vpn_ipsec_phase2.php:538
+#: usr/local/www/vpn_ipsec_phase2.php:640
+#: usr/local/www/vpn_ipsec_phase2.php:661
+msgid "Phase 2 proposal (SA/Key Exchange)"
+msgstr "Proposta da Fase 2 (Troca de Chave/SA)"
+
+#: usr/local/www/vpn_ipsec_phase2.php:527
+#: usr/local/www/vpn_ipsec_phase2.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:655
+#: usr/local/www/vpn_ipsec_phase2.php:676
+msgid "ESP is encryption, AH is authentication only"
+msgstr "ESP é criptografia, AH é somente autenticação"
+
+#: usr/local/www/vpn_ipsec_phase2.php:532
+#: usr/local/www/vpn_ipsec_phase2.php:558
+#: usr/local/www/vpn_ipsec_phase2.php:660
+#: usr/local/www/vpn_ipsec_phase2.php:681
+msgid "Encryption algorithms"
+msgstr "Algorítmos de criptografia"
+
+#: usr/local/www/vpn_ipsec_phase2.php:574
+#: usr/local/www/vpn_ipsec_phase2.php:600
+#: usr/local/www/vpn_ipsec_phase2.php:702
+#: usr/local/www/vpn_ipsec_phase2.php:723
+msgid "Hint: use 3DES for best compatibility or if you have a hardware crypto accelerator card. Blowfish is usually the fastest in software encryption"
+msgstr "Dica: use 3DES para melhor compatibilidade ou se você tem um cartão de aceleração de criptografia de hardware. Blowfish é normalmente o mais rápido em criptografia de software"
+
+#: usr/local/www/vpn_ipsec_phase2.php:580
+#: usr/local/www/vpn_ipsec_phase2.php:606
+#: usr/local/www/vpn_ipsec_phase2.php:708
+#: usr/local/www/vpn_ipsec_phase2.php:729
+msgid "Hash algorithms"
+msgstr "Algorítmos de hash"
+
+#: usr/local/www/vpn_ipsec_phase2.php:590
+#: usr/local/www/vpn_ipsec_phase2.php:616
+#: usr/local/www/vpn_ipsec_phase2.php:718
+#: usr/local/www/vpn_ipsec_phase2.php:739
+msgid "PFS key group"
+msgstr "Grupo de chave PFS"
+
+#: usr/local/www/vpn_ipsec_phase2.php:614
+#: usr/local/www/vpn_ipsec_phase2.php:640
+#: usr/local/www/vpn_ipsec_phase2.php:736
+#: usr/local/www/vpn_ipsec_phase2.php:757
+msgid "Set globally in mobile client options"
+msgstr "Configure globalmente em opções de clientes móveis"
+
+#: usr/local/www/vpn_ipsec_phase2.php:632
+#: usr/local/www/vpn_ipsec_phase2.php:658
+#: usr/local/www/vpn_ipsec_phase2.php:754
+#: usr/local/www/vpn_ipsec_phase2.php:775
+msgid "Automatically ping host"
+msgstr "Fazer ping em host automaticamente"
+
+#: usr/local/www/vpn_l2tp.php:300
+msgid "Enable l2tp server"
+msgstr "Habilitar servidor l2tp"
+
+#: usr/local/www/vpn_l2tp.php:325 usr/local/www/vpn_l2tp.php:326
+#: usr/local/www/vpn_l2tp.php:329
+msgid "Enter the IP address the L2TP server should give to clients for use as their \"gateway\""
+msgstr "Digite o endereço IP que o servidor L2TP deve dar aos clientes para utilizar como seus \"gateway\""
+
+#: usr/local/www/vpn_l2tp.php:337 usr/local/www/vpn_l2tp.php:338
+#: usr/local/www/vpn_l2tp.php:341
+msgid "Specify the starting address for the client IP address subnet."
+msgstr "Especifique o endereço de início para a subrede de endereços IP do cliente."
+
+#: usr/local/www/vpn_l2tp.php:341 usr/local/www/vpn_pppoe_edit.php:390
+#: usr/local/www/vpn_pppoe_edit.php:391 usr/local/www/vpn_pppoe_edit.php:394
+msgid "Subnet netmask"
+msgstr "Máscara de subrede"
+
+#: usr/local/www/vpn_l2tp.php:354 usr/local/www/vpn_pppoe_edit.php:403
+#: usr/local/www/vpn_pppoe_edit.php:404 usr/local/www/vpn_l2tp.php:355
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_pppoe_edit.php:407
+msgid "is"
+msgstr "é"
+
+#: usr/local/www/vpn_l2tp.php:358 usr/local/www/vpn_l2tp.php:359
+#: usr/local/www/vpn_l2tp.php:362
+msgid "Number of L2TP users"
+msgstr "Número de usuários L2TP"
+
+#: usr/local/www/vpn_l2tp.php:371 usr/local/www/vpn_l2tp.php:372
+#: usr/local/www/vpn_l2tp.php:375
+msgid "is ten L2TP clients"
+msgstr "tem dez clientes L2TP"
+
+#: usr/local/www/vpn_l2tp.php:375 usr/local/www/vpn_l2tp.php:376
+#: usr/local/www/vpn_l2tp.php:379
+msgid "Secret"
+msgstr "Segredo"
+
+#: usr/local/www/vpn_l2tp.php:379 usr/local/www/vpn_l2tp.php:380
+#: usr/local/www/vpn_l2tp.php:383
+msgid "Specify optional secret shared between peers. Required on some devices/setups."
+msgstr "Especificar segredos opcionais compartilhados entre peers. Requerido em alguns dispositivos/instalações."
+
+#: usr/local/www/vpn_l2tp.php:383
+msgid "Encryption type"
+msgstr "Tipo de criptografia"
+
+#: usr/local/www/vpn_l2tp.php:386 usr/local/www/vpn_l2tp.php:387
+#: usr/local/www/vpn_l2tp.php:390
+msgid "CHAP"
+msgstr "CHAP"
+
+#: usr/local/www/vpn_l2tp.php:387 usr/local/www/services_captiveportal.php:607
+#: usr/local/www/services_captiveportal.php:605 usr/local/www/vpn_l2tp.php:388
+#: usr/local/www/vpn_l2tp.php:391 usr/local/www/services_captiveportal.php:606
+#: usr/local/www/services_captiveportal.php:622
+msgid "PAP"
+msgstr "PAP"
+
+#: usr/local/www/vpn_l2tp.php:390 usr/local/www/vpn_l2tp.php:391
+#: usr/local/www/vpn_l2tp.php:394
+msgid "Specifies which protocol to use for authentication."
+msgstr "Especifica qual protocolo usar para autenticação."
+
+#: usr/local/www/vpn_l2tp.php:394 usr/local/www/vpn_l2tp.php:395
+#: usr/local/www/vpn_l2tp.php:398
+msgid "L2TP DNS Servers"
+msgstr "Servidores DNS L2TP"
+
+#: usr/local/www/vpn_l2tp.php:400 usr/local/www/vpn_l2tp.php:401
+#: usr/local/www/vpn_l2tp.php:404
+msgid "primary and secondary DNS servers assigned to L2TP clients"
+msgstr "servidores DNS primário e secundário atribuídos a clientes L2TP"
+
+#: usr/local/www/vpn_l2tp.php:414 usr/local/www/vpn_l2tp.php:415
+#: usr/local/www/vpn_l2tp.php:418
+msgid "When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used."
+msgstr "Quando configurado, todos os usuários serão autenticados usando o servidor RADIUS especificado abaixo. A base de dados de usuários local não será usada."
+
+#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_l2tp.php:419
+#: usr/local/www/vpn_l2tp.php:422
+msgid "Sends accounting packets to the RADIUS server."
+msgstr "Envia pacotes de accounting para o servidor RADIUS."
+
+#: usr/local/www/vpn_l2tp.php:421
+msgid "RADIUS server"
+msgstr "Servidor RADIUS"
+
+#: usr/local/www/vpn_l2tp.php:425 usr/local/www/vpn_l2tp.php:426
+#: usr/local/www/vpn_l2tp.php:429
+msgid "Enter the IP address of the RADIUS server."
+msgstr "Informe o endereço IP do servidor RADIUS."
+
+#: usr/local/www/vpn_l2tp.php:432 usr/local/www/vpn_l2tp.php:433
+#: usr/local/www/vpn_l2tp.php:436
+msgid "Enter the shared secret that will be used to authenticate to the RADIUS server."
+msgstr "Informe o segredo compartilhado que será usado para autenticar no servidor RADIUS."
+
+#: usr/local/www/vpn_l2tp.php:435
+msgid "RADIUS issued IP's"
+msgstr "IP emitidos pelo RADIUS"
+
+#: usr/local/www/vpn_l2tp.php:439 usr/local/www/vpn_l2tp.php:440
+#: usr/local/www/vpn_l2tp.php:443
+msgid "Issue IP Addresses via RADIUS server."
+msgstr "Endereços IP emitidos via servidor RADIUS."
+
+#: usr/local/www/vpn_l2tp.php:452 usr/local/www/vpn_l2tp.php:453
+#: usr/local/www/vpn_l2tp.php:456
+msgid "Don't forget to add a firewall rule to permit traffic from L2TP clients!"
+msgstr "Não se esqueça de adicionar uma regra de firewall para permitir tráfego de clientes L2TP!"
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87
+msgid "The l2tp user list has been modified"
+msgstr "A lista de usuários l2tp foi modificada"
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_l2tp_users.php:87
+msgid "Warning: this will terminate all current l2tp sessions!"
+msgstr "Advertência: isso finalizará todas as sessões l2tp atuais!"
+
+#: usr/local/www/vpn_l2tp_users_edit.php:164
+#: usr/local/www/vpn_l2tp_users_edit.php:165
+msgid "If you want to change the users password, enter it here twice."
+msgstr "Se você desejar mudar a senha do usuário, informe-a aqui duas vezes."
+
+#: usr/local/www/vpn_openvpn_client.php:40
+#: usr/local/www/vpn_openvpn_client.php:366
+#: usr/local/www/vpn_openvpn_csc.php:294
+#: usr/local/www/vpn_openvpn_server.php:584
+#: usr/local/www/vpn_openvpn_server.php:657
+#: usr/local/www/vpn_openvpn_client.php:371
+#: usr/local/www/vpn_openvpn_csc.php:293
+#: usr/local/www/vpn_openvpn_server.php:675
+#: usr/local/www/vpn_openvpn_client.php:379
+#: usr/local/www/vpn_openvpn_client.php:397
+#: usr/local/www/vpn_openvpn_server.php:701
+msgid "Client"
+msgstr "Cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:82
+#: usr/local/www/vpn_openvpn_client.php:86
+msgid "Client successfully deleted"
+msgstr "Cliente apagado com sucesso"
+
+#: usr/local/www/vpn_openvpn_client.php:164
+#: usr/local/www/vpn_openvpn_server.php:227
+#: usr/local/www/vpn_openvpn_server.php:232
+#: usr/local/www/vpn_openvpn_client.php:165
+#: usr/local/www/vpn_openvpn_server.php:233
+#: usr/local/www/vpn_openvpn_client.php:171
+#: usr/local/www/vpn_openvpn_client.php:182
+#: usr/local/www/vpn_openvpn_server.php:254
+msgid "The specified 'Local port' is in use. Please select another value"
+msgstr "A 'porta local' especificada está em uso. Por favor, selecione outro valor"
+
+#: usr/local/www/vpn_openvpn_client.php:183
+#: usr/local/www/vpn_openvpn_client.php:184
+#: usr/local/www/vpn_openvpn_client.php:190
+#: usr/local/www/vpn_openvpn_client.php:201
+msgid "User name and password are required for proxy with authentication."
+msgstr "Nome de usuário e senha são requeridos para o proxy com autenticação."
+
+#: usr/local/www/vpn_openvpn_client.php:200
+#: usr/local/www/vpn_openvpn_server.php:235
+#: usr/local/www/vpn_openvpn_server.php:240
+#: usr/local/www/vpn_openvpn_client.php:204
+#: usr/local/www/vpn_openvpn_server.php:241
+#: usr/local/www/vpn_openvpn_client.php:210
+#: usr/local/www/vpn_openvpn_client.php:228
+#: usr/local/www/vpn_openvpn_server.php:262
+msgid "The field 'Shared Key' does not appear to be valid"
+msgstr "O campo 'Chave compartilhada' não parece ser válido"
+
+#: usr/local/www/vpn_openvpn_client.php:205
+#: usr/local/www/vpn_openvpn_server.php:240
+#: usr/local/www/vpn_openvpn_server.php:245
+#: usr/local/www/vpn_openvpn_client.php:209
+#: usr/local/www/vpn_openvpn_server.php:246
+#: usr/local/www/vpn_openvpn_client.php:215
+#: usr/local/www/vpn_openvpn_client.php:233
+#: usr/local/www/vpn_openvpn_server.php:267
+msgid "The field 'TLS Authentication Key' does not appear to be valid"
+msgstr "O campo 'Chave de Autenticação TLS' não parece ser válido"
+
+#: usr/local/www/vpn_openvpn_client.php:214
+#: usr/local/www/vpn_openvpn_server.php:286
+#: usr/local/www/vpn_openvpn_server.php:291
+#: usr/local/www/vpn_openvpn_client.php:218
+#: usr/local/www/vpn_openvpn_server.php:292
+#: usr/local/www/vpn_openvpn_client.php:224
+#: usr/local/www/vpn_openvpn_client.php:242
+#: usr/local/www/vpn_openvpn_server.php:313
+msgid "Shared key"
+msgstr "Chave compartilhada"
+
+#: usr/local/www/vpn_openvpn_client.php:367
+#: usr/local/www/vpn_openvpn_csc.php:295
+#: usr/local/www/vpn_openvpn_server.php:585
+#: usr/local/www/vpn_openvpn_server.php:658
+#: usr/local/www/vpn_openvpn_client.php:372
+#: usr/local/www/vpn_openvpn_csc.php:294
+#: usr/local/www/vpn_openvpn_server.php:676
+#: usr/local/www/vpn_openvpn_client.php:380
+#: usr/local/www/vpn_openvpn_client.php:398
+#: usr/local/www/vpn_openvpn_server.php:702
+msgid "Client Specific Overrides"
+msgstr "Substituição Específica de Cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:397
+#: usr/local/www/vpn_openvpn_client.php:402
+#: usr/local/www/vpn_openvpn_client.php:410
+#: usr/local/www/vpn_openvpn_client.php:428
+msgid "Disable this client"
+msgstr "Desabilitar esse cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:402
+#: usr/local/www/vpn_openvpn_client.php:407
+#: usr/local/www/vpn_openvpn_client.php:415
+#: usr/local/www/vpn_openvpn_client.php:433
+msgid "Set this option to disable this client without removing it from the list"
+msgstr "Configure essa opção para desabilitar esse cliente sem removê-lo da lista"
+
+#: usr/local/www/vpn_openvpn_client.php:406
+#: usr/local/www/vpn_openvpn_server.php:624
+#: usr/local/www/vpn_openvpn_server.php:697
+#: usr/local/www/vpn_openvpn_client.php:411
+#: usr/local/www/vpn_openvpn_server.php:715
+#: usr/local/www/vpn_openvpn_client.php:419
+#: usr/local/www/vpn_openvpn_client.php:437
+#: usr/local/www/vpn_openvpn_server.php:741
+msgid "Server Mode"
+msgstr "Modo do Servidor"
+
+#: usr/local/www/vpn_openvpn_client.php:436
+#: usr/local/www/vpn_openvpn_client.php:441
+#: usr/local/www/vpn_openvpn_client.php:449
+#: usr/local/www/vpn_openvpn_client.php:467
+msgid "Device mode"
+msgstr "Modo do Dispositivo"
+
+#: usr/local/www/vpn_openvpn_client.php:476
+#: usr/local/www/vpn_openvpn_server.php:716
+#: usr/local/www/vpn_openvpn_server.php:789
+#: usr/local/www/vpn_openvpn_client.php:481
+#: usr/local/www/vpn_openvpn_server.php:817
+#: usr/local/www/vpn_openvpn_client.php:499
+#: usr/local/www/vpn_openvpn_client.php:518
+#: usr/local/www/vpn_openvpn_server.php:844
+msgid "Local port"
+msgstr "Porta local"
+
+#: usr/local/www/vpn_openvpn_client.php:480
+#: usr/local/www/vpn_openvpn_client.php:485
+#: usr/local/www/vpn_openvpn_client.php:503
+#: usr/local/www/vpn_openvpn_client.php:522
+msgid "Set this option if you would like to bind to a specific port. Leave this blank or enter 0 for a random dynamic port."
+msgstr "Configure esta opção se você desejar especificar uma porta específica para bind. Deixe em branco ou 0 para obter um valor randômico de porta."
+
+#: usr/local/www/vpn_openvpn_client.php:484
+#: usr/local/www/vpn_openvpn_client.php:489
+#: usr/local/www/vpn_openvpn_client.php:507
+#: usr/local/www/vpn_openvpn_client.php:526
+msgid "Server host or address"
+msgstr "Host de servidor ou endereço"
+
+#: usr/local/www/vpn_openvpn_client.php:490
+#: usr/local/www/vpn_openvpn_client.php:495
+#: usr/local/www/vpn_openvpn_client.php:513
+#: usr/local/www/vpn_openvpn_client.php:532
+msgid "Server port"
+msgstr "Porta de servidor"
+
+#: usr/local/www/vpn_openvpn_client.php:496
+#: usr/local/www/vpn_openvpn_client.php:501
+#: usr/local/www/vpn_openvpn_client.php:519
+#: usr/local/www/vpn_openvpn_client.php:538
+msgid "Proxy host or address"
+msgstr "Host de Proxy ou endereço"
+
+#: usr/local/www/vpn_openvpn_client.php:502
+#: usr/local/www/vpn_openvpn_client.php:507
+#: usr/local/www/vpn_openvpn_client.php:525
+#: usr/local/www/vpn_openvpn_client.php:544
+msgid "Proxy port"
+msgstr "Porta do Proxy"
+
+#: usr/local/www/vpn_openvpn_client.php:508
+#: usr/local/www/vpn_openvpn_client.php:513
+#: usr/local/www/vpn_openvpn_client.php:531
+#: usr/local/www/vpn_openvpn_client.php:550
+msgid "Proxy authentication extra options"
+msgstr "Opções extras de autenticação de proxy"
+
+#: usr/local/www/vpn_openvpn_client.php:520
+#: usr/local/www/vpn_openvpn_client.php:525
+#: usr/local/www/vpn_openvpn_client.php:543
+#: usr/local/www/vpn_openvpn_client.php:562
+msgid "basic"
+msgstr "básico"
+
+#: usr/local/www/vpn_openvpn_client.php:521
+#: usr/local/www/vpn_openvpn_client.php:526
+#: usr/local/www/vpn_openvpn_client.php:544
+#: usr/local/www/vpn_openvpn_client.php:563
+msgid "ntlm"
+msgstr "ntlm"
+
+#: usr/local/www/vpn_openvpn_client.php:552
+#: usr/local/www/vpn_openvpn_client.php:557
+#: usr/local/www/vpn_openvpn_client.php:575
+#: usr/local/www/vpn_openvpn_client.php:594
+msgid "Server host name resolution"
+msgstr "Resolução de nome de host de servidor"
+
+#: usr/local/www/vpn_openvpn_client.php:562
+#: usr/local/www/vpn_openvpn_client.php:567
+#: usr/local/www/vpn_openvpn_client.php:585
+#: usr/local/www/vpn_openvpn_client.php:604
+msgid "Infinitely resolve server"
+msgstr "Resolver servidor infinitamente"
+
+#: usr/local/www/vpn_openvpn_client.php:567
+#: usr/local/www/vpn_openvpn_client.php:572
+#: usr/local/www/vpn_openvpn_client.php:590
+#: usr/local/www/vpn_openvpn_client.php:609
+msgid "Continuously attempt to resolve the server host name. Useful when communicating with a server that is not permanently connected to the Internet"
+msgstr "Continuamente tenta resolver o nome de host do servidor. Útil quando estiver comunicando-se com um servidor que não está permanentemente conectado à Internet"
+
+#: usr/local/www/vpn_openvpn_client.php:584
+#: usr/local/www/vpn_openvpn_server.php:733
+#: usr/local/www/vpn_openvpn_server.php:806
+#: usr/local/www/vpn_openvpn_client.php:589
+#: usr/local/www/vpn_openvpn_server.php:834
+#: usr/local/www/vpn_openvpn_client.php:607
+#: usr/local/www/vpn_openvpn_client.php:626
+#: usr/local/www/vpn_openvpn_server.php:861
+msgid "Cryptographic Settings"
+msgstr "Configurações de Criptografia"
+
+#: usr/local/www/vpn_openvpn_client.php:587
+#: usr/local/www/vpn_openvpn_server.php:736
+#: usr/local/www/vpn_openvpn_server.php:809
+#: usr/local/www/vpn_openvpn_client.php:592
+#: usr/local/www/vpn_openvpn_server.php:837
+#: usr/local/www/vpn_openvpn_client.php:610
+#: usr/local/www/vpn_openvpn_client.php:629
+#: usr/local/www/vpn_openvpn_server.php:864
+msgid "TLS Authentication"
+msgstr "Autenticação de TLS"
+
+#: usr/local/www/vpn_openvpn_client.php:597
+#: usr/local/www/vpn_openvpn_server.php:746
+#: usr/local/www/vpn_openvpn_server.php:819
+#: usr/local/www/vpn_openvpn_client.php:602
+#: usr/local/www/vpn_openvpn_server.php:847
+#: usr/local/www/vpn_openvpn_client.php:620
+#: usr/local/www/vpn_openvpn_client.php:639
+#: usr/local/www/vpn_openvpn_server.php:874
+msgid "Enable authentication of TLS packets"
+msgstr "Habilitar autenticação de pacotes TLS"
+
+#: usr/local/www/vpn_openvpn_client.php:611
+#: usr/local/www/vpn_openvpn_server.php:760
+#: usr/local/www/vpn_openvpn_server.php:833
+#: usr/local/www/vpn_openvpn_client.php:616
+#: usr/local/www/vpn_openvpn_server.php:861
+#: usr/local/www/vpn_openvpn_client.php:634
+#: usr/local/www/vpn_openvpn_client.php:653
+#: usr/local/www/vpn_openvpn_server.php:888
+msgid "Automatically generate a shared TLS authentication key"
+msgstr "Gerar automaticamente uma chave de autenticação TLS compartilhada"
+
+#: usr/local/www/vpn_openvpn_client.php:622
+#: usr/local/www/vpn_openvpn_client.php:699
+#: usr/local/www/vpn_openvpn_server.php:771
+#: usr/local/www/vpn_openvpn_server.php:891
+#: usr/local/www/vpn_openvpn_server.php:844
+#: usr/local/www/vpn_openvpn_server.php:964
+#: usr/local/www/vpn_openvpn_client.php:627
+#: usr/local/www/vpn_openvpn_client.php:704
+#: usr/local/www/vpn_openvpn_server.php:872
+#: usr/local/www/vpn_openvpn_server.php:992
+#: usr/local/www/vpn_openvpn_client.php:645
+#: usr/local/www/vpn_openvpn_client.php:722
+#: usr/local/www/vpn_openvpn_client.php:664
+#: usr/local/www/vpn_openvpn_client.php:741
+#: usr/local/www/vpn_openvpn_server.php:899
+#: usr/local/www/vpn_openvpn_server.php:1019
+msgid "Paste your shared key here"
+msgstr "Cole sua chave compartilhada aqui"
+
+#: usr/local/www/vpn_openvpn_client.php:648
+#: usr/local/www/vpn_openvpn_client.php:653
+#: usr/local/www/vpn_openvpn_client.php:671
+#: usr/local/www/vpn_openvpn_client.php:690
+msgid "Client Certificate"
+msgstr "Certificado de Cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:677
+#: usr/local/www/vpn_openvpn_server.php:869
+#: usr/local/www/vpn_openvpn_server.php:942
+#: usr/local/www/vpn_openvpn_client.php:682
+#: usr/local/www/vpn_openvpn_server.php:970
+#: usr/local/www/vpn_openvpn_client.php:700
+#: usr/local/www/vpn_openvpn_client.php:719
+#: usr/local/www/vpn_openvpn_server.php:997
+msgid "Shared Key"
+msgstr "Chave Compartilhada"
+
+#: usr/local/www/vpn_openvpn_client.php:688
+#: usr/local/www/vpn_openvpn_server.php:880
+#: usr/local/www/vpn_openvpn_server.php:953
+#: usr/local/www/vpn_openvpn_client.php:693
+#: usr/local/www/vpn_openvpn_server.php:981
+#: usr/local/www/vpn_openvpn_client.php:711
+#: usr/local/www/vpn_openvpn_client.php:730
+#: usr/local/www/vpn_openvpn_server.php:1008
+msgid "Automatically generate a shared key"
+msgstr "Gerar automaticamente uma chave compartilhada"
+
+#: usr/local/www/vpn_openvpn_client.php:724
+#: usr/local/www/vpn_openvpn_server.php:916
+#: usr/local/www/vpn_openvpn_server.php:989
+#: usr/local/www/vpn_openvpn_client.php:729
+#: usr/local/www/vpn_openvpn_server.php:1017
+#: usr/local/www/vpn_openvpn_client.php:747
+#: usr/local/www/vpn_openvpn_client.php:766
+#: usr/local/www/vpn_openvpn_server.php:1044
+msgid "Hardware Crypto"
+msgstr "Hardware Crypto"
+
+#: usr/local/www/vpn_openvpn_client.php:745
+#: usr/local/www/vpn_openvpn_csc.php:374
+#: usr/local/www/vpn_openvpn_server.php:980
+#: usr/local/www/vpn_openvpn_server.php:1053
+#: usr/local/www/vpn_openvpn_client.php:750
+#: usr/local/www/vpn_openvpn_csc.php:373
+#: usr/local/www/vpn_openvpn_server.php:1081
+#: usr/local/www/vpn_openvpn_client.php:768
+#: usr/local/www/vpn_openvpn_client.php:787
+#: usr/local/www/vpn_openvpn_server.php:1108
+msgid "Tunnel Settings"
+msgstr "Configurações de túnel"
+
+#: usr/local/www/vpn_openvpn_client.php:748
+#: usr/local/www/vpn_openvpn_csc.php:377
+#: usr/local/www/vpn_openvpn_server.php:1450
+#: usr/local/www/vpn_openvpn_server.php:1592
+#: usr/local/www/vpn_openvpn_client.php:753
+#: usr/local/www/vpn_openvpn_csc.php:376
+#: usr/local/www/vpn_openvpn_server.php:1633
+#: usr/local/www/vpn_openvpn_server.php:1685
+msgid "Tunnel Network"
+msgstr "Rede de túneis"
+
+#: usr/local/www/vpn_openvpn_client.php:752
+#: usr/local/www/vpn_openvpn_csc.php:381
+#: usr/local/www/vpn_openvpn_client.php:757
+#: usr/local/www/vpn_openvpn_csc.php:380
+#: usr/local/www/vpn_openvpn_client.php:775
+#: usr/local/www/vpn_openvpn_client.php:794
+msgid "This is the virtual network used for private communications between this client and the server expressed using CIDR (eg. 10.0.8.0/24). The first network address is assumed to be the server address and the second network address will be assigned to the client virtual interface"
+msgstr "Essa é uma rede virtual usada para comunicações privadas entre esse cliente e o servidor expresso usando CIDR (e.g. 10.0.8.0/24). O primeiro endereço é assumido como o do endereço do servidor e, o segundo, o endereço de rede que será atribuído à interface virtual do cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:766
+#: usr/local/www/vpn_openvpn_client.php:771
+msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter here the remote LAN here. You may leave this blank to only communicate with other clients"
+msgstr "Essa é uma rede que será roteada através do túnel para que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressa como um intervalor CIDR. Se essa é uma VPN site-to-site, informe que a LAN remote. Você deve deixar isso em branco para somente comunicar-se com outros clientes"
+
+#: usr/local/www/vpn_openvpn_client.php:776
+#: usr/local/www/vpn_openvpn_client.php:781
+#: usr/local/www/vpn_openvpn_client.php:827
+#: usr/local/www/vpn_openvpn_client.php:846
+msgid "Limit outgoing bandwidth"
+msgstr "Limitar tamanho de banda de saída"
+
+#: usr/local/www/vpn_openvpn_client.php:780
+#: usr/local/www/vpn_openvpn_client.php:785
+#: usr/local/www/vpn_openvpn_client.php:831
+#: usr/local/www/vpn_openvpn_client.php:850
+msgid "Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The input value has to be something between 100 bytes/sec and 100 Mbytes/sec (entered as bytes per second)"
+msgstr "Tamanho de banda de saída máximo para esse túnel. Deixe vazio para não ter limite. O valor inserido tem que ser algo entre 100 bytes/seg e 100 Mbytes/seg (informado como bytes por segundo)"
+
+#: usr/local/www/vpn_openvpn_client.php:797
+#: usr/local/www/vpn_openvpn_server.php:1087
+#: usr/local/www/vpn_openvpn_server.php:1229
+#: usr/local/www/vpn_openvpn_client.php:802
+#: usr/local/www/vpn_openvpn_server.php:1271
+#: usr/local/www/vpn_openvpn_client.php:848
+#: usr/local/www/vpn_openvpn_client.php:867
+#: usr/local/www/vpn_openvpn_server.php:1298
+msgid "Compress tunnel packets using the LZO algorithm"
+msgstr "Comprimir pacotes do túnel usando o algorítmo LZO"
+
+#: usr/local/www/vpn_openvpn_client.php:805
+#: usr/local/www/vpn_openvpn_server.php:1095
+#: usr/local/www/vpn_openvpn_server.php:1237
+#: usr/local/www/vpn_openvpn_client.php:810
+#: usr/local/www/vpn_openvpn_server.php:1279
+#: usr/local/www/vpn_openvpn_client.php:856
+#: usr/local/www/vpn_openvpn_client.php:875
+#: usr/local/www/vpn_openvpn_server.php:1306
+msgid "Type-of-Service"
+msgstr "Tipo de Serviço"
+
+#: usr/local/www/vpn_openvpn_client.php:815
+#: usr/local/www/vpn_openvpn_server.php:1105
+#: usr/local/www/vpn_openvpn_server.php:1247
+#: usr/local/www/vpn_openvpn_client.php:820
+#: usr/local/www/vpn_openvpn_server.php:1289
+#: usr/local/www/vpn_openvpn_client.php:866
+#: usr/local/www/vpn_openvpn_client.php:885
+#: usr/local/www/vpn_openvpn_server.php:1316
+msgid "Set the TOS IP header value of tunnel packets to match the encapsulated packet value"
+msgstr "Configurar o valor do cabeçalho IP TOS para que os pacotes do túnel correspondam ao valor do pacote encapsulado"
+
+#: usr/local/www/vpn_openvpn_client.php:826
+#: usr/local/www/vpn_openvpn_server.php:1409
+#: usr/local/www/vpn_openvpn_server.php:1551
+#: usr/local/www/vpn_openvpn_client.php:831
+#: usr/local/www/vpn_openvpn_server.php:1593
+#: usr/local/www/vpn_openvpn_client.php:880
+#: usr/local/www/vpn_openvpn_client.php:899
+#: usr/local/www/vpn_openvpn_server.php:1645
+msgid "Advanced configuration"
+msgstr "Configuração Avançada"
+
+#: usr/local/www/vpn_openvpn_client.php:835
+#: usr/local/www/vpn_openvpn_client.php:840
+#: usr/local/www/vpn_openvpn_client.php:889
+#: usr/local/www/vpn_openvpn_client.php:908
+msgid "Enter any additional options you would like to add to the OpenVPN client configuration here, separated by a semicolon"
+msgstr "Informe quaisquer opções adicionais que você deseja adicionar à configuração do cliente OpenVPN aqui, separado por ponto-e-vírgula"
+
+#: usr/local/www/vpn_openvpn_client.php:836
+#: usr/local/www/vpn_openvpn_client.php:841
+#: usr/local/www/vpn_openvpn_client.php:890
+msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;"
+msgstr "EXEMPLO: route 10.0.0.0 255.255.255.0;"
+
+#: usr/local/www/vpn_openvpn_client.php:891
+#: usr/local/www/vpn_openvpn_client.php:896
+#: usr/local/www/vpn_openvpn_client.php:949
+#: usr/local/www/vpn_openvpn_client.php:968
+msgid "edit client"
+msgstr "editar cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:895
+#: usr/local/www/vpn_openvpn_client.php:900
+#: usr/local/www/vpn_openvpn_client.php:953
+#: usr/local/www/vpn_openvpn_client.php:972
+msgid "delete client"
+msgstr "apagar cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:908
+#: usr/local/www/vpn_openvpn_client.php:913
+#: usr/local/www/vpn_openvpn_client.php:966
+#: usr/local/www/vpn_openvpn_client.php:985
+msgid "add client"
+msgstr "adicionar cliente"
+
+#: usr/local/www/vpn_openvpn_client.php:915
+#: usr/local/www/vpn_openvpn_client.php:920
+#: usr/local/www/vpn_openvpn_client.php:973
+#: usr/local/www/vpn_openvpn_client.php:992
+msgid "Additional OpenVPN clients can be added here."
+msgstr "Clientes OpenVPN adicionais podem ser adicionados aqui."
+
+#: usr/local/www/vpn_openvpn_csc.php:40
+msgid "Client Specific Override"
+msgstr "Substituição Específica de Cliente"
+
+#: usr/local/www/vpn_openvpn_csc.php:67 usr/local/www/vpn_openvpn_csc.php:66
+msgid "Client Specific Override successfully deleted"
+msgstr "Substituição Específica de Cliente apagada com sucesso"
+
+#: usr/local/www/vpn_openvpn_csc.php:131
+#: usr/local/www/vpn_openvpn_server.php:244
+#: usr/local/www/vpn_openvpn_server.php:249
+#: usr/local/www/vpn_openvpn_csc.php:130
+#: usr/local/www/vpn_openvpn_server.php:250
+#: usr/local/www/vpn_openvpn_server.php:271
+msgid "The field 'DNS Server #1' must contain a valid IP address"
+msgstr "O campo 'Servidor DNS #1' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:133
+#: usr/local/www/vpn_openvpn_server.php:246
+#: usr/local/www/vpn_openvpn_server.php:251
+#: usr/local/www/vpn_openvpn_csc.php:132
+#: usr/local/www/vpn_openvpn_server.php:252
+#: usr/local/www/vpn_openvpn_server.php:273
+msgid "The field 'DNS Server #2' must contain a valid IP address"
+msgstr "O campo 'Servidor DNS #2' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:135
+#: usr/local/www/vpn_openvpn_server.php:248
+#: usr/local/www/vpn_openvpn_server.php:253
+#: usr/local/www/vpn_openvpn_csc.php:134
+#: usr/local/www/vpn_openvpn_server.php:254
+#: usr/local/www/vpn_openvpn_server.php:275
+msgid "The field 'DNS Server #3' must contain a valid IP address"
+msgstr "O campo 'Servidor DNS #3' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:137
+#: usr/local/www/vpn_openvpn_server.php:250
+#: usr/local/www/vpn_openvpn_server.php:255
+#: usr/local/www/vpn_openvpn_csc.php:136
+#: usr/local/www/vpn_openvpn_server.php:256
+#: usr/local/www/vpn_openvpn_server.php:277
+msgid "The field 'DNS Server #4' must contain a valid IP address"
+msgstr "O campo 'Servidor DNS #4' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:142
+#: usr/local/www/vpn_openvpn_server.php:255
+#: usr/local/www/vpn_openvpn_server.php:260
+#: usr/local/www/vpn_openvpn_csc.php:141
+#: usr/local/www/vpn_openvpn_server.php:261
+#: usr/local/www/vpn_openvpn_server.php:282
+msgid "The field 'NTP Server #1' must contain a valid IP address"
+msgstr "O campo 'Servidor NTP #1' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:144
+#: usr/local/www/vpn_openvpn_server.php:257
+#: usr/local/www/vpn_openvpn_server.php:262
+#: usr/local/www/vpn_openvpn_csc.php:143
+#: usr/local/www/vpn_openvpn_server.php:263
+#: usr/local/www/vpn_openvpn_server.php:284
+msgid "The field 'NTP Server #2' must contain a valid IP address"
+msgstr "O campo 'Servidor NTP #2' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:146
+#: usr/local/www/vpn_openvpn_server.php:259
+#: usr/local/www/vpn_openvpn_server.php:264
+#: usr/local/www/vpn_openvpn_csc.php:145
+#: usr/local/www/vpn_openvpn_server.php:265
+#: usr/local/www/vpn_openvpn_server.php:286
+msgid "The field 'NTP Server #3' must contain a valid IP address"
+msgstr "O campo 'Servidor NTP #3' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:148
+#: usr/local/www/vpn_openvpn_server.php:261
+#: usr/local/www/vpn_openvpn_server.php:266
+#: usr/local/www/vpn_openvpn_csc.php:147
+#: usr/local/www/vpn_openvpn_server.php:267
+#: usr/local/www/vpn_openvpn_server.php:288
+msgid "The field 'NTP Server #4' must contain a valid IP address"
+msgstr "O campo 'Servidor NTP #4' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:154
+#: usr/local/www/vpn_openvpn_server.php:267
+#: usr/local/www/vpn_openvpn_server.php:272
+#: usr/local/www/vpn_openvpn_csc.php:153
+#: usr/local/www/vpn_openvpn_server.php:273
+#: usr/local/www/vpn_openvpn_server.php:294
+msgid "The field 'WINS Server #1' must contain a valid IP address"
+msgstr "O campo 'Servidor WINS #1' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:156
+#: usr/local/www/vpn_openvpn_server.php:269
+#: usr/local/www/vpn_openvpn_server.php:274
+#: usr/local/www/vpn_openvpn_csc.php:155
+#: usr/local/www/vpn_openvpn_server.php:275
+#: usr/local/www/vpn_openvpn_server.php:296
+msgid "The field 'WINS Server #2' must contain a valid IP address"
+msgstr "O campo 'Servidor WINS #2' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:160
+#: usr/local/www/vpn_openvpn_server.php:273
+#: usr/local/www/vpn_openvpn_server.php:278
+#: usr/local/www/vpn_openvpn_csc.php:159
+#: usr/local/www/vpn_openvpn_server.php:279
+#: usr/local/www/vpn_openvpn_server.php:300
+msgid "The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address"
+msgstr "O campo 'Servidor de Distribuição de Dados do NetBIOS WINS #1' deve conter um endereço IP válido"
+
+#: usr/local/www/vpn_openvpn_csc.php:325 usr/local/www/vpn_openvpn_csc.php:324
+msgid "Disable this override"
+msgstr "Desabilitar essa substituição"
+
+#: usr/local/www/vpn_openvpn_csc.php:330 usr/local/www/vpn_openvpn_csc.php:329
+msgid "Set this option to disable this client-specific override without removing it from the list"
+msgstr "Configure essa opção para desabilitar uma substituição específica de cliente sem removê-la da lista"
+
+#: usr/local/www/vpn_openvpn_csc.php:334 usr/local/www/vpn_openvpn_csc.php:333
+msgid "Common name"
+msgstr "Nome Comum"
+
+#: usr/local/www/vpn_openvpn_csc.php:338 usr/local/www/vpn_openvpn_csc.php:337
+msgid "Enter the client's X.509 common name here"
+msgstr "Informe o nome comum dos X.509 do cliente aqui"
+
+#: usr/local/www/vpn_openvpn_csc.php:350 usr/local/www/vpn_openvpn_csc.php:349
+msgid "Connection blocking"
+msgstr "Bloquei de conexão"
+
+#: usr/local/www/vpn_openvpn_csc.php:360 usr/local/www/vpn_openvpn_csc.php:359
+msgid "Block this client connection based on its common name"
+msgstr "Bloqueie a conexão desse cliente baseado nesse nome comum"
+
+#: usr/local/www/vpn_openvpn_csc.php:365 usr/local/www/vpn_openvpn_csc.php:364
+msgid "Don't use this option to permanently disable a client due to a compromised key or password. Use a CRL (certificate revocation list) instead"
+msgstr "Não use essa opção para desabilitar permanentemente um cliente devido a uma chave ou senha comprometida. An invés disso, use uma CRL (lista de revogação de certificado )"
+
+#: usr/local/www/vpn_openvpn_csc.php:391
+#: usr/local/www/vpn_openvpn_server.php:1011
+#: usr/local/www/vpn_openvpn_server.php:1153
+#: usr/local/www/vpn_openvpn_csc.php:390
+#: usr/local/www/vpn_openvpn_server.php:1181
+#: usr/local/www/vpn_openvpn_server.php:1208
+msgid "Redirect Gateway"
+msgstr "Gateway de redirecionamento"
+
+#: usr/local/www/vpn_openvpn_csc.php:401
+#: usr/local/www/vpn_openvpn_server.php:1021
+#: usr/local/www/vpn_openvpn_server.php:1163
+#: usr/local/www/vpn_openvpn_csc.php:400
+#: usr/local/www/vpn_openvpn_server.php:1191
+#: usr/local/www/vpn_openvpn_server.php:1218
+msgid "Force all client generated traffic through the tunnel"
+msgstr "Force todo o tráfego gerado por clientes através desse túnel"
+
+#: usr/local/www/vpn_openvpn_csc.php:412
+#: usr/local/www/vpn_openvpn_server.php:1155
+#: usr/local/www/vpn_openvpn_server.php:1297
+#: usr/local/www/vpn_openvpn_csc.php:411
+#: usr/local/www/vpn_openvpn_server.php:1339
+#: usr/local/www/vpn_openvpn_server.php:1366
+msgid "Client Settings"
+msgstr "Configurações de Cliente"
+
+#: usr/local/www/vpn_openvpn_csc.php:415 usr/local/www/vpn_openvpn_csc.php:414
+msgid "Server Definitions"
+msgstr "Definições de Servidor"
+
+#: usr/local/www/vpn_openvpn_csc.php:425 usr/local/www/vpn_openvpn_csc.php:424
+msgid "Prevent this client from receiving any server-defined client settings"
+msgstr "Previna que esse cliente receba quaisquer configurações de cliente definidas no servidor"
+
+#: usr/local/www/vpn_openvpn_csc.php:510
+#: usr/local/www/vpn_openvpn_server.php:1271
+#: usr/local/www/vpn_openvpn_server.php:1413
+#: usr/local/www/vpn_openvpn_csc.php:509
+#: usr/local/www/vpn_openvpn_server.php:1455
+#: usr/local/www/vpn_openvpn_server.php:1507
+msgid "NTP Servers"
+msgstr "Servidores NTP"
+
+#: usr/local/www/vpn_openvpn_csc.php:520
+#: usr/local/www/vpn_openvpn_server.php:1281
+#: usr/local/www/vpn_openvpn_server.php:1423
+#: usr/local/www/vpn_openvpn_csc.php:519
+#: usr/local/www/vpn_openvpn_server.php:1465
+#: usr/local/www/vpn_openvpn_server.php:1517
+msgid "Provide a NTP server list to clients"
+msgstr "Fornece uma lista de servidores NTP para clientes"
+
+#: usr/local/www/vpn_openvpn_csc.php:546
+#: usr/local/www/vpn_openvpn_server.php:1307
+#: usr/local/www/vpn_openvpn_server.php:1449
+#: usr/local/www/vpn_openvpn_csc.php:545
+#: usr/local/www/vpn_openvpn_server.php:1491
+#: usr/local/www/vpn_openvpn_server.php:1543
+msgid "NetBIOS Options"
+msgstr "Opções de NetBIOS"
+
+#: usr/local/www/vpn_openvpn_csc.php:556
+#: usr/local/www/vpn_openvpn_server.php:1317
+#: usr/local/www/vpn_openvpn_server.php:1459
+#: usr/local/www/vpn_openvpn_csc.php:555
+#: usr/local/www/vpn_openvpn_server.php:1501
+#: usr/local/www/vpn_openvpn_server.php:1553
+msgid "Enable NetBIOS over TCP/IP"
+msgstr "Habilitar NetBIOS sobre TCP/IP"
+
+#: usr/local/www/vpn_openvpn_csc.php:561
+msgid "If this option is not set, all NetBIOS-over-TCP/IP options (includeing WINS) will be disabled"
+msgstr "Se essa opção não estiver configurada, todas as opções de NetBIOS sobre TCP/IP (incluindo WINS) serão desabilitadas"
+
+#: usr/local/www/vpn_openvpn_csc.php:568
+#: usr/local/www/vpn_openvpn_server.php:1329
+#: usr/local/www/vpn_openvpn_server.php:1471
+#: usr/local/www/vpn_openvpn_csc.php:567
+#: usr/local/www/vpn_openvpn_server.php:1513
+#: usr/local/www/vpn_openvpn_server.php:1565
+msgid "Node Type"
+msgstr "Tipo de Nó"
+
+#: usr/local/www/vpn_openvpn_csc.php:581
+#: usr/local/www/vpn_openvpn_server.php:1342
+#: usr/local/www/vpn_openvpn_server.php:1484
+#: usr/local/www/vpn_openvpn_csc.php:580
+#: usr/local/www/vpn_openvpn_server.php:1526
+#: usr/local/www/vpn_openvpn_server.php:1578
+msgid "Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast)"
+msgstr "Opções possíveis: b-node (faz broadcasts), p-node (consulta nomes ponto-a-ponto para um servidor WINS), m-node (faz broadcast e então consulta servidor de nome), e h-node (consulta servidor de nome, então faz broadcast)"
+
+#: usr/local/www/vpn_openvpn_csc.php:595
+#: usr/local/www/vpn_openvpn_server.php:1356
+#: usr/local/www/vpn_openvpn_server.php:1498
+#: usr/local/www/vpn_openvpn_csc.php:594
+#: usr/local/www/vpn_openvpn_server.php:1540
+#: usr/local/www/vpn_openvpn_server.php:1592
+msgid "A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID"
+msgstr "Um \tID do escopo do NetBIOS fornece um serviço de nome extendido para \tNetBIOS sobre TCP/IP. O ID do escopo do NetBIOS isola o tráfego de NetBIOS em uma única rede para somente aqueles nós com o mesmo ID do escopo do NetBIOS"
+
+#: usr/local/www/vpn_openvpn_csc.php:648 usr/local/www/vpn_openvpn_csc.php:647
+msgid "Enter any additional options you would like to add for this client specific override, separated by a semicolon"
+msgstr "Informe qualquer opção adicional que desejar para essa substituição específica de cliente, separado (csc) por um ponto-e-vírgula"
+
+#: usr/local/www/vpn_openvpn_csc.php:649
+#: usr/local/www/vpn_openvpn_server.php:1419
+#: usr/local/www/vpn_openvpn_server.php:1561
+#: usr/local/www/vpn_openvpn_csc.php:648
+#: usr/local/www/vpn_openvpn_server.php:1603
+#: usr/local/www/vpn_openvpn_server.php:1655
+msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""
+msgstr "EXEMPLO: push \"route 10.0.0.0 255.255.255.0\""
+
+#: usr/local/www/vpn_openvpn_csc.php:696 usr/local/www/vpn_openvpn_csc.php:695
+msgid "edit csc"
+msgstr "editar csc"
+
+#: usr/local/www/vpn_openvpn_csc.php:699 usr/local/www/vpn_openvpn_csc.php:698
+msgid "Do you really want to delete this csc?"
+msgstr "Você realmente deseja apagar essa csc?"
+
+#: usr/local/www/vpn_openvpn_csc.php:700 usr/local/www/vpn_openvpn_csc.php:699
+msgid "delete csc"
+msgstr "apagar csc"
+
+#: usr/local/www/vpn_openvpn_csc.php:711 usr/local/www/vpn_openvpn_csc.php:710
+msgid "add csc"
+msgstr "adicionar csc"
+
+#: usr/local/www/vpn_openvpn_csc.php:718 usr/local/www/vpn_openvpn_csc.php:717
+msgid "Additional OpenVPN client specific overrides can be added here."
+msgstr "Substituições específicas de cliente OpenVPN adicionais podem ser adicionadas aqui."
+
+#: usr/local/www/vpn_openvpn_server.php:86
+#: usr/local/www/vpn_openvpn_server.php:87
+msgid "Server successfully deleted"
+msgstr "Servidor apagado com sucesso"
+
+#: usr/local/www/vpn_openvpn_server.php:210
+#: usr/local/www/vpn_openvpn_server.php:215
+#: usr/local/www/vpn_openvpn_server.php:216
+#: usr/local/www/vpn_openvpn_server.php:228
+msgid "You must select a Backend for Authentication if the server mode requires User Auth."
+msgstr "Você deve selecionar um Backend para Autenticação se o modo do servidor requerer Autenticação de Usuário."
+
+#: usr/local/www/vpn_openvpn_server.php:277
+#: usr/local/www/vpn_openvpn_server.php:282
+#: usr/local/www/vpn_openvpn_server.php:283
+#: usr/local/www/vpn_openvpn_server.php:304
+msgid "The field 'Concurrent connections' must be numeric."
+msgstr "O campo 'Conexões concorrentes' deve ser numérico."
+
+#: usr/local/www/vpn_openvpn_server.php:290
+#: usr/local/www/vpn_openvpn_server.php:296
+#: usr/local/www/vpn_openvpn_server.php:297
+#: usr/local/www/vpn_openvpn_server.php:318
+msgid "Tunnel network"
+msgstr "Rede de túneis"
+
+#: usr/local/www/vpn_openvpn_server.php:615
+#: usr/local/www/vpn_openvpn_server.php:688
+#: usr/local/www/vpn_openvpn_server.php:706
+#: usr/local/www/vpn_openvpn_server.php:732
+msgid "Disable this server"
+msgstr "Desabilitar esse servidor"
+
+#: usr/local/www/vpn_openvpn_server.php:620
+#: usr/local/www/vpn_openvpn_server.php:693
+#: usr/local/www/vpn_openvpn_server.php:711
+#: usr/local/www/vpn_openvpn_server.php:737
+msgid "Set this option to disable this server without removing it from the list"
+msgstr "Configure essa opção to desabilitar o servidor sem removê-lo dessa lista"
+
+#: usr/local/www/vpn_openvpn_server.php:639
+#: usr/local/www/vpn_openvpn_server.php:712
+#: usr/local/www/vpn_openvpn_server.php:730
+#: usr/local/www/vpn_openvpn_server.php:756
+msgid "Backend for authentication"
+msgstr "Backend para autenticação"
+
+#: usr/local/www/vpn_openvpn_server.php:671
+#: usr/local/www/vpn_openvpn_server.php:744
+#: usr/local/www/vpn_openvpn_server.php:762
+#: usr/local/www/vpn_openvpn_server.php:788
+msgid "Device Mode"
+msgstr "Modo do Dispositivo"
+
+#: usr/local/www/vpn_openvpn_server.php:797
+#: usr/local/www/vpn_openvpn_server.php:870
+#: usr/local/www/vpn_openvpn_server.php:898
+#: usr/local/www/vpn_openvpn_server.php:925
+msgid "Peer Certificate Revocation List"
+msgstr "Lista de Certificados de Revogação de Peer"
+
+#: usr/local/www/vpn_openvpn_server.php:822
+#: usr/local/www/vpn_openvpn_server.php:895
+#: usr/local/www/vpn_openvpn_server.php:923
+#: usr/local/www/vpn_openvpn_server.php:950
+msgid "Server Certificate"
+msgstr "Certificado de Servidor"
+
+#: usr/local/www/vpn_openvpn_server.php:851
+#: usr/local/www/vpn_openvpn_server.php:924
+#: usr/local/www/vpn_openvpn_server.php:952
+#: usr/local/www/vpn_openvpn_server.php:979
+msgid "DH Parameters Length"
+msgstr "Tamanho de Parâmetros de DH"
+
+#: usr/local/www/vpn_openvpn_server.php:934
+#: usr/local/www/vpn_openvpn_server.php:1007
+#: usr/local/www/vpn_openvpn_server.php:1035
+#: usr/local/www/vpn_openvpn_server.php:1062
+msgid "Certificate Depth"
+msgstr "Profundidade do Certificado"
+
+#: usr/local/www/vpn_openvpn_server.php:952
+#: usr/local/www/vpn_openvpn_server.php:1025
+#: usr/local/www/vpn_openvpn_server.php:1053
+#: usr/local/www/vpn_openvpn_server.php:1080
+msgid "When a certificate-based client logs in, do not accept certificates below this depth. Useful for denying certificates made with intermediate CAs generated from the same CA as the server."
+msgstr "Quando um cliente faz login com base em certificados, não aceitar certificados com profundidade abaixo desta. Útil para negar certificados emitidos por CAs intermadiários gerados a partir do mesmo CA que o servidor."
+
+#: usr/local/www/vpn_openvpn_server.php:959
+#: usr/local/www/vpn_openvpn_server.php:1032
+#: usr/local/www/vpn_openvpn_server.php:1060
+#: usr/local/www/vpn_openvpn_server.php:1087
+msgid "Strict User/CN Matching"
+msgstr "Correspondência de Usuário estrito/CN"
+
+#: usr/local/www/vpn_openvpn_server.php:969
+#: usr/local/www/vpn_openvpn_server.php:1042
+#: usr/local/www/vpn_openvpn_server.php:1070
+#: usr/local/www/vpn_openvpn_server.php:1097
+msgid "When authenticating users, enforce a match between the common name of the client certificate and the username given at login."
+msgstr "Durante a autenticação de usuários, reforce uma correspondência entre um nome comum do certificado do cliente e um dado nome de usuário no login."
+
+#: usr/local/www/vpn_openvpn_server.php:983
+#: usr/local/www/vpn_openvpn_server.php:1056
+#: usr/local/www/vpn_openvpn_server.php:1084
+#: usr/local/www/vpn_openvpn_client.php:771
+#: usr/local/www/vpn_openvpn_client.php:790
+#: usr/local/www/vpn_openvpn_server.php:1111
+msgid "IPv4 Tunnel Network"
+msgstr "Tunel da Rede IPv4"
+
+#: usr/local/www/vpn_openvpn_server.php:987
+#: usr/local/www/vpn_openvpn_server.php:1060
+#: usr/local/www/vpn_openvpn_server.php:1088
+#: usr/local/www/vpn_openvpn_server.php:1115
+msgid "This is the IPv4 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The first network address will be assigned to the\tserver virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)"
+msgstr "Essa é a rede virtual IPv4 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. 10.0.8.0/24). O primeiro endereço de rede será atribuído à \t interface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)"
+
+#: usr/local/www/vpn_openvpn_server.php:997
+#: usr/local/www/vpn_openvpn_server.php:1070
+#: usr/local/www/vpn_openvpn_server.php:1098
+#: usr/local/www/vpn_openvpn_client.php:785
+#: usr/local/www/vpn_openvpn_client.php:804
+#: usr/local/www/vpn_openvpn_server.php:1125
+msgid "IPv6 Tunnel Network"
+msgstr "Tunel da Rede IPv6"
+
+#: usr/local/www/vpn_openvpn_server.php:1001
+#: usr/local/www/vpn_openvpn_server.php:1074
+msgid "This is the IPv6 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. fe80::/64). The first network address will be assigned to the\tserver virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)"
+msgstr "Essa é a rede virtual IPv6 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereço de rede será atribuído à \tinterface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)"
+
+#: usr/local/www/vpn_openvpn_server.php:1029
+#: usr/local/www/vpn_openvpn_server.php:1171
+#: usr/local/www/vpn_openvpn_server.php:1199
+msgid "IPv4 Local Network"
+msgstr "Rede Local IPv4"
+
+#: usr/local/www/vpn_openvpn_server.php:1033
+#: usr/local/www/vpn_openvpn_server.php:1175
+#: usr/local/www/vpn_openvpn_server.php:1203
+msgid "This is the network that will be accessible from the remote endpoint. Expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network"
+msgstr "Essa é a rede que será acessível do endpoint remoto. Expressado como um intervalo CIDR. Você deve deixar isso em branco se não desejar adicionar uma rota à rede local através desse túnel na máquina remota. Isso é geralmente configurado na sua rede LAN"
+
+#: usr/local/www/vpn_openvpn_server.php:1042
+#: usr/local/www/vpn_openvpn_server.php:1184
+#: usr/local/www/vpn_openvpn_server.php:1212
+msgid "IPv6 Local Network"
+msgstr "Rede local IPv6"
+
+#: usr/local/www/vpn_openvpn_server.php:1046
+#: usr/local/www/vpn_openvpn_server.php:1188
+#: usr/local/www/vpn_openvpn_server.php:1216
+msgid "This is the IPv6 network that will be accessible from the remote endpoint. Expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network"
+msgstr "Essa é a rede IPv6 que será acessível do endpoint remoto. Expressado como um intervalo CIDR. Você deve deixar isso em branco se não desejar adicionar uma rota à rede local através desse túnel na máquina remota. Isso é geralmente configurado na sua rede LAN"
+
+#: usr/local/www/vpn_openvpn_server.php:1059
+#: usr/local/www/vpn_openvpn_server.php:1201
+msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter here the remote LAN here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr "Essa é uma rede que será roteada através do túnel, de forma que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressado como um intervalo CIDR. Se essa é uma VPN site-to-site, informe aqui a LAN remota. Você pode deixar isso em branco se não desejar uma VPN site-to-site"
+
+#: usr/local/www/vpn_openvpn_server.php:1069
+#: usr/local/www/vpn_openvpn_server.php:1211
+#: usr/local/www/vpn_openvpn_server.php:1253
+#: usr/local/www/vpn_openvpn_server.php:1280
+msgid "Concurrent connections"
+msgstr "Conexões concorrentes"
+
+#: usr/local/www/vpn_openvpn_server.php:1073
+#: usr/local/www/vpn_openvpn_server.php:1215
+#: usr/local/www/vpn_openvpn_server.php:1257
+#: usr/local/www/vpn_openvpn_server.php:1284
+msgid "Specify the maximum number of clients allowed to concurrently connect to this server"
+msgstr "Especifique o número máximo de clientes que tem permissão de conectar-se ao mesmo tempo nesse servidor"
+
+#: usr/local/www/vpn_openvpn_server.php:1113
+#: usr/local/www/vpn_openvpn_server.php:1255
+#: usr/local/www/vpn_openvpn_server.php:1297
+#: usr/local/www/vpn_openvpn_server.php:1324
+msgid "Inter-client communication"
+msgstr "Comunicação inter-clientes"
+
+#: usr/local/www/vpn_openvpn_server.php:1123
+#: usr/local/www/vpn_openvpn_server.php:1265
+#: usr/local/www/vpn_openvpn_server.php:1307
+#: usr/local/www/vpn_openvpn_server.php:1334
+msgid "Allow communication between clients connected to this server"
+msgstr "Permite comunicação entre clientes conectaados a esse servidor"
+
+#: usr/local/www/vpn_openvpn_server.php:1131
+#: usr/local/www/vpn_openvpn_server.php:1273
+#: usr/local/www/vpn_openvpn_server.php:1315
+#: usr/local/www/vpn_openvpn_server.php:1342
+msgid "Duplicate Connections"
+msgstr "Conexões duplicadas"
+
+#: usr/local/www/vpn_openvpn_server.php:1141
+#: usr/local/www/vpn_openvpn_server.php:1283
+#: usr/local/www/vpn_openvpn_server.php:1325
+#: usr/local/www/vpn_openvpn_server.php:1352
+msgid "Allow multiple concurrent connections from clients using the same Common Name.<br/>NOTE: This is not generally recommended, but may be needed for some scenarios."
+msgstr "Habilite múltiplas conexões concorrentes para clientes usando um Nome Comum.<br/>NOTA: Isto geralmente não é recomendado, mas pode ser necessário em alguns cenários."
+
+#: usr/local/www/vpn_openvpn_server.php:1158
+#: usr/local/www/vpn_openvpn_server.php:1300
+#: usr/local/www/vpn_openvpn_server.php:1342
+#: usr/local/www/vpn_openvpn_server.php:1369
+msgid "Dynamic IP"
+msgstr "IP Dinâmico"
+
+#: usr/local/www/vpn_openvpn_server.php:1168
+#: usr/local/www/vpn_openvpn_server.php:1310
+#: usr/local/www/vpn_openvpn_server.php:1352
+#: usr/local/www/vpn_openvpn_server.php:1379
+msgid "Allow connected clients to retain their connections if their IP address changes"
+msgstr "Permite clientes conectados a reter suas conexões se seus endereços IP mudarem"
+
+#: usr/local/www/vpn_openvpn_server.php:1176
+#: usr/local/www/vpn_openvpn_server.php:1318
+#: usr/local/www/vpn_openvpn_server.php:1360
+#: usr/local/www/vpn_openvpn_server.php:1387
+msgid "Address Pool"
+msgstr "Pool de endereços"
+
+#: usr/local/www/vpn_openvpn_server.php:1186
+#: usr/local/www/vpn_openvpn_server.php:1328
+#: usr/local/www/vpn_openvpn_server.php:1370
+#: usr/local/www/vpn_openvpn_server.php:1397
+msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)"
+msgstr "Fornece um endereço IP adaptador virtual para clientes (veja Rede de Túneis)"
+
+#: usr/local/www/vpn_openvpn_server.php:1322
+#: usr/local/www/vpn_openvpn_server.php:1464
+#: usr/local/www/vpn_openvpn_csc.php:560
+#: usr/local/www/vpn_openvpn_server.php:1506
+#: usr/local/www/vpn_openvpn_server.php:1558
+msgid "If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled"
+msgstr "Se essa opção não estiver configurada, todas as opções de NetBIOS sobre TCP/IP (incluindo WINS) serão desabilitadas"
+
+#: usr/local/www/vpn_openvpn_server.php:1352
+#: usr/local/www/vpn_openvpn_server.php:1494
+#: usr/local/www/vpn_openvpn_server.php:1536
+#: usr/local/www/vpn_openvpn_server.php:1588
+msgid "Scope ID"
+msgstr "ID de Escopo"
+
+#: usr/local/www/vpn_openvpn_server.php:1418
+#: usr/local/www/vpn_openvpn_server.php:1560
+#: usr/local/www/vpn_openvpn_server.php:1602
+#: usr/local/www/vpn_openvpn_server.php:1654
+msgid "Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon"
+msgstr "Informe quaisquer opções adicionais que desejar às configurações do servidor OpenVPN aqui, separados por ponto-e-vírgula"
+
+#: usr/local/www/vpn_openvpn_server.php:1449
+#: usr/local/www/vpn_openvpn_server.php:1591
+#: usr/local/www/vpn_openvpn_server.php:1632
+#: usr/local/www/vpn_openvpn_server.php:1684
+msgid "Protocol / Port"
+msgstr "Protocolo / Porta"
+
+#: usr/local/www/vpn_openvpn_server.php:1482
+#: usr/local/www/vpn_openvpn_server.php:1624
+#: usr/local/www/vpn_openvpn_server.php:1665
+#: usr/local/www/vpn_openvpn_server.php:1717
+msgid "Do you really want to delete this server?"
+msgstr "Você realmente deseja apagar esse servidor?"
+
+#: usr/local/www/vpn_openvpn_server.php:1503
+#: usr/local/www/vpn_openvpn_server.php:1645
+#: usr/local/www/vpn_openvpn_server.php:1686
+#: usr/local/www/vpn_openvpn_server.php:1738
+msgid "Additional OpenVPN servers can be added here."
+msgstr "Servidores OpenVPN adicionais podem ser adicionados aqui."
+
+#: usr/local/www/vpn_pppoe_edit.php:136
+msgid "The specified server address is equal to an interface ip address."
+msgstr "O endereço do servidor especificado é igual a um endereço ip de interface."
+
+#: usr/local/www/vpn_pppoe_edit.php:141
+#, php-format
+msgid "No password specified for username %s"
+msgstr "Nenhuma senha especificada para o usuário %s"
+
+#: usr/local/www/vpn_pppoe_edit.php:143
+#, php-format
+msgid "Incorrect ip address specified for username %s"
+msgstr "Endereço IP especificado incorreto para o usuário %s"
+
+#: usr/local/www/vpn_pppoe_edit.php:355 usr/local/www/vpn_pppoe_edit.php:356
+#: usr/local/www/vpn_pppoe_edit.php:359
+msgid "PPPoE server configuration"
+msgstr "Configuração do servidor PPPoE"
+
+#: usr/local/www/vpn_pppoe_edit.php:368 usr/local/www/vpn_pppoe_edit.php:369
+#: usr/local/www/vpn_pppoe_edit.php:372
+msgid "Enable PPPoE server"
+msgstr "Habilitar servidor PPPoE"
+
+#: usr/local/www/vpn_pppoe_edit.php:403 usr/local/www/vpn_pppoe_edit.php:404
+#: usr/local/www/vpn_pppoe_edit.php:407
+msgid "Hint"
+msgstr "Dica"
+
+#: usr/local/www/vpn_pppoe_edit.php:407 usr/local/www/vpn_pppoe_edit.php:408
+#: usr/local/www/vpn_pppoe_edit.php:411
+msgid "No. PPPoE users"
+msgstr "No. usuários PPPoE"
+
+#: usr/local/www/vpn_pppoe_edit.php:420 usr/local/www/vpn_pppoe_edit.php:421
+#: usr/local/www/vpn_pppoe_edit.php:424
+msgid "Hint: 10 is ten PPPoE clients"
+msgstr "Dica: 10 são dez clientes PPPoE"
+
+#: usr/local/www/vpn_pppoe_edit.php:428 usr/local/www/vpn_pppoe_edit.php:429
+#: usr/local/www/vpn_pppoe_edit.php:432
+msgid "Enter the IP address the PPPoE server should give to clients for use as their \"gateway\""
+msgstr "Digite o endereço IP do servidor PPPoE deve dar aos clientes para usarem como \"gateway\""
+
+#: usr/local/www/vpn_pppoe_edit.php:440 usr/local/www/vpn_pppoe_edit.php:441
+#: usr/local/www/vpn_pppoe_edit.php:444
+msgid "Specify the starting address for the client IP address subnet"
+msgstr "Especifique os endereços de início para a subrede do endereço IP do cliente"
+
+#: usr/local/www/vpn_pppoe_edit.php:457 usr/local/www/vpn_pppoe_edit.php:458
+#: usr/local/www/vpn_pppoe_edit.php:461
+msgid "If entered they will be given to all PPPoE clients, else LAN DNS and one WAN DNS will go to all clients"
+msgstr "Se informados, eles serão dados a todos os clientes PPPoE, senão, DNS de LAN e um DNS de WAN irão para todos os clientes"
+
+#: usr/local/www/vpn_pppoe_edit.php:474 usr/local/www/vpn_pppoe_edit.php:475
+#: usr/local/www/vpn_pppoe_edit.php:478
+msgid "Use Backup RADIUS Server"
+msgstr "Usar servidor RADIUS de Backup"
+
+#: usr/local/www/vpn_pppoe_edit.php:475 usr/local/www/vpn_pppoe_edit.php:476
+#: usr/local/www/vpn_pppoe_edit.php:479
+msgid "When set, if primary server fails all requests will be sent via backup server"
+msgstr "Quando configurado, se o servidor primário falhar, todas as requisições serão enviadas através do servidor de backup"
+
+#: usr/local/www/vpn_pppoe_edit.php:478 usr/local/www/vpn_pppoe_edit.php:479
+#: usr/local/www/vpn_pppoe_edit.php:482
+msgid "NAS IP Address"
+msgstr "Endereço IP do NAS"
+
+#: usr/local/www/vpn_pppoe_edit.php:481 usr/local/www/vpn_pppoe_edit.php:482
+#: usr/local/www/vpn_pppoe_edit.php:485
+msgid "RADIUS server NAS IP Address"
+msgstr "Endereço IP NAS do servidor RADIUS"
+
+#: usr/local/www/vpn_pppoe_edit.php:488 usr/local/www/vpn_pppoe_edit.php:489
+#: usr/local/www/vpn_pppoe_edit.php:492
+msgid "RADIUS accounting update period in seconds"
+msgstr "Período de atualização de accounting do RADIUS em segundos"
+
+#: usr/local/www/vpn_pppoe_edit.php:495 usr/local/www/vpn_pppoe_edit.php:496
+#: usr/local/www/vpn_pppoe_edit.php:499
+msgid "Issue IP Addresses via RADIUS server"
+msgstr "Emitir Endereços IP através do servidor RADIUS"
+
+#: usr/local/www/vpn_pppoe_edit.php:498 usr/local/www/vpn_pppoe_edit.php:499
+#: usr/local/www/vpn_pppoe_edit.php:502
+msgid "RADIUS server Primary"
+msgstr "Servidor RADIUS Primário"
+
+#: usr/local/www/vpn_pppoe_edit.php:503 usr/local/www/vpn_pppoe_edit.php:504
+#: usr/local/www/vpn_pppoe_edit.php:507
+msgid "Enter the IP address, authentication port and accounting port (optional) of the RADIUS server."
+msgstr "Informe o endereço IP, porta de autenticação e porta de accounting (opcional) do servidor RADIUS."
+
+#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pppoe_edit.php:520
+#: usr/local/www/vpn_pppoe_edit.php:505 usr/local/www/vpn_pppoe_edit.php:521
+#: usr/local/www/vpn_pppoe_edit.php:508 usr/local/www/vpn_pppoe_edit.php:524
+msgid "standard port 1812 and 1813 accounting"
+msgstr "portas padrão 1812 e 1813 de accounting"
+
+#: usr/local/www/vpn_pppoe_edit.php:507 usr/local/www/vpn_pppoe_edit.php:508
+#: usr/local/www/vpn_pppoe_edit.php:511
+msgid "RADIUS primary shared secret"
+msgstr "Shared secred primário do RADIUS"
+
+#: usr/local/www/vpn_pppoe_edit.php:514 usr/local/www/vpn_pppoe_edit.php:515
+#: usr/local/www/vpn_pppoe_edit.php:518
+msgid "RADIUS server Secondary"
+msgstr "Servidor RADIUS Secundário"
+
+#: usr/local/www/vpn_pppoe_edit.php:519 usr/local/www/vpn_pppoe_edit.php:520
+#: usr/local/www/vpn_pppoe_edit.php:523
+msgid "Enter the IP address, authentication port and accounting port (optional) of the backup RADIUS server."
+msgstr "Informe o endereço IP, porta de autenticação e porta de accounting (opcional) do servidor RADIUS de backup."
+
+#: usr/local/www/vpn_pppoe_edit.php:523 usr/local/www/vpn_pppoe_edit.php:524
+#: usr/local/www/vpn_pppoe_edit.php:527
+msgid "RADIUS secondary shared secret"
+msgstr "Segreado compartilhado secundário do RADIUS"
+
+#: usr/local/www/vpn_pppoe_edit.php:531 usr/local/www/vpn_pppoe_edit.php:532
+#: usr/local/www/vpn_pppoe_edit.php:535
+msgid "User (s)"
+msgstr "Usuário (s)"
+
+#: usr/local/www/vpn_pppoe_edit.php:596 usr/local/www/vpn_pppoe_edit.php:597
+#: usr/local/www/vpn_pppoe_edit.php:600
+msgid "don't forget to add a firewall rule to permit traffic from PPPoE clients"
+msgstr "não esqueça de adicionar uma regra de firewall para permitir tráfego de clientes PPPoE"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:37
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:37
+msgid "You need to specify the number of connections."
+msgstr "Você precisa especificar o número de conexões."
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:42
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:42
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:43
+msgid "The number of connections should be greater than 1."
+msgstr "O número de conexões deve ser maior que 1."
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:65
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:63
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:64
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:71
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:63
+msgid "You have less interfaces than number of connections!"
+msgstr "Você não tem interfaces suficientes para o número de conexões desejado!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:445
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:518
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:459
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:551
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:489
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:586
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:293
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:372
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:588
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:443
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:516
+msgid "Address must be a valid IP address or Firewall Alias. Please correct this value to continue."
+msgstr "Endereço deve ser um IP válido ou alias do Firewall. Por favor defina o valor correto para continuar."
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:505
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:536
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:539
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:568
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:574
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:601
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:358
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:392
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:576
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:603
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:503
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:534
+msgid "Only percentage bandwidth specification is allowed."
+msgstr "Somente a especificação percentual de largura de banda é permitido."
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:695
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1044
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:722
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1106
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:756
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1154
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:930
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:758
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1156
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:693
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1042
+msgid "Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue."
+msgstr "Largura da banda customizáveis são maiores que 30%. Favor reduzi-la para continuar com o assistente."
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1346
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1408
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1462
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1205
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1464
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1344
+msgid "Penalty Box"
+msgstr "Penalty Box"
+
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1366
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1482
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364
+msgid "VOIP Adapter"
+msgstr "Adaptador VOIP"
+
+#: usr/local/www/wizards/openvpn_wizard.inc:602
+#: usr/local/www/wizards/openvpn_wizard.inc:618
+#: usr/local/www/wizards/openvpn_wizard.inc:619
+#, php-format
+msgid "OpenVPN %s wizard"
+msgstr "OpenVPN %s Assistente"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:268
+msgid "You cannot specify bandwidth smaller than 1!"
+msgstr "Você não pode especificar uma largura de banda menor que 1!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:278
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:288
+msgid "You cannot select the same interface for local and outside."
+msgstr "Você não pode selecionar a mesma interface para local e remoto."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:276
+msgid "You cannot specify 0 bandwidth!"
+msgstr "Você não pode especificar largura de banda 0!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:297
+msgid "You cannot select the same interface twice on local interfaces."
+msgstr "Você não pode selecionar a mesma interface duas vezes em interfaces locais."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:37
+msgid "You need to specify the number of local interfaces connected."
+msgstr "Você precisa especificar um número de interfaces locais conectadas."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:41
+msgid "The number of local connection needs to be greater than 1."
+msgstr "O número de conexões locais deve ser maior que 1."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:240
+msgid "Upload bandwidth of connection is not valid."
+msgstr "A largura de banda da conexão para upload não é válida."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:245
+msgid "Download bandwidth of connection is not valid."
+msgstr "A largura de banda da conexão para download não é válida."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:252
+msgid "You cannot specify bandwidth less than 1!"
+msgstr "Você não pode especificar largura de banda menor que 1!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:257
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:262
+msgid "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."
+msgstr "Não são recomendadas larguras de banda menores que 128Kbit/s para o organizador CBQ."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:300
+msgid "Upload or download bandwidth is not valid."
+msgstr "A largura de banda para download ou upload não é válida."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:317
+#, php-format
+msgid "You cannot set the VoIP upload bandwidth on WAN connection higher than 80% of the connection."
+msgstr "Você não pode definir a largura de banda para upload VoIP numa conexão WAN maior que 80% da conexão."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:324
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:334
+#, php-format
+msgid "You cannot set the VoIP download bandwidth on connection higher than 80% of the connection."
+msgstr "Você não pode definir a largura de banda do download VoIP numa conexão maior que 80% da conexão"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:162
+#: usr/local/www/widgets/widgets/system_information.widget.php:153
+#: usr/local/www/widgets/widgets/system_information.widget.php:159
+#: usr/local/www/widgets/widgets/system_information.widget.php:160
+#: usr/local/www/widgets/widgets/system_information.widget.php:158
+#: usr/local/www/widgets/widgets/system_information.widget.php:164
+msgid "Current date/time"
+msgstr "Data/hora atuais"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:41
+msgid "Computer / Device"
+msgstr "Computador / Dispositivo"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:67
+msgid "Wake Up"
+msgstr "Acordar"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:72
+msgid "No saved WoL addresses"
+msgstr "Endereços WoL não salvos"
+
+#: usr/local/www/firewall_nat_npt.php:105
+msgid "External Prefix"
+msgstr "Prefixo Externo"
+
+#: usr/local/www/firewall_nat_npt.php:106
+msgid "Internal prefix"
+msgstr "Prefixo interno"
+
+#: usr/local/www/firewall_nat_npt_edit.php:106
+msgid "Source prefix"
+msgstr "Prefixo de origem"
+
+#: usr/local/www/firewall_nat_npt_edit.php:108
+msgid "Destination prefix"
+msgstr "Prefixo de destino"
+
+#: usr/local/www/firewall_nat_npt_edit.php:156
+#: usr/local/www/firewall_nat_npt_edit.php:161
+#: usr/local/www/firewall_nat_npt_edit.php:160
+#: usr/local/www/firewall_nat_npt_edit.php:158
+msgid "Edit NAT NPt entry"
+msgstr "Editar entrada NAT NPt"
+
+#: usr/local/www/firewall_nat_npt_edit.php:206
+#: usr/local/www/firewall_nat_npt_edit.php:211
+#: usr/local/www/firewall_nat_npt_edit.php:210
+#: usr/local/www/firewall_nat_npt_edit.php:209
+msgid "Internal IPv6 Prefix"
+msgstr "Prefixo IPv6 interno"
+
+#: usr/local/www/firewall_nat_npt_edit.php:228
+#: usr/local/www/firewall_nat_npt_edit.php:233
+#: usr/local/www/firewall_nat_npt_edit.php:232
+#: usr/local/www/firewall_nat_npt_edit.php:231
+msgid ""
+"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The prefix size specified for the internal IPv6 prefix will be applied to the \n"
+"external prefix."
+msgstr "Digite o prefixo interno (LAN) ULA IPv6 para a tradução prefixo de rede. O tamanho do prefixo especificado para o prefixo IPv6 interno será aplicado ao prefixo externo."
+
+#: usr/local/www/firewall_nat_npt_edit.php:234
+#: usr/local/www/firewall_nat_npt_edit.php:239
+#: usr/local/www/firewall_nat_npt_edit.php:238
+#: usr/local/www/firewall_nat_npt_edit.php:237
+msgid "Destination IPv6 Prefix"
+msgstr "Prefixo IPv6 de destino"
+
+#: usr/local/www/firewall_nat_npt_edit.php:258
+#: usr/local/www/firewall_nat_npt_edit.php:263
+#: usr/local/www/firewall_nat_npt_edit.php:262
+#: usr/local/www/firewall_nat_npt_edit.php:261
+msgid "Enter the Global Unicast routable IPv6 prefix here"
+msgstr "Digite o prefixo roteável IPv6 Global Unicast aqui"
+
+#: usr/local/www/services_dhcpv6.php:74
+#: usr/local/www/services_router_advertisements.php:74
+msgid "The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses"
+msgstr "O servidor DHCPv6 pode somente ser habilitado em interfaces configuradas com endereços IP estáticos"
+
+#: usr/local/www/services_dhcpv6.php:184 usr/local/www/services_dhcpv6.php:196
+#: usr/local/www/services_dhcpv6.php:181 usr/local/www/services_dhcpv6.php:175
+msgid "A valid prefix range must be specified."
+msgstr "Um intervalo válido deve ser especificado."
+
+#: usr/local/www/services_dhcpv6.php:190 usr/local/www/services_dhcpv6.php:202
+#: usr/local/www/services_dhcpv6.php:187 usr/local/www/services_dhcpv6.php:181
+msgid "A valid IPv6 address must be specified for the gateway."
+msgstr "Um endereço IPv6 válido deve ser especificado para o gateway."
+
+#: usr/local/www/services_dhcpv6.php:192 usr/local/www/services_dhcpv6.php:204
+#: usr/local/www/services_router_advertisements.php:154
+#: usr/local/www/services_dhcpv6.php:189 usr/local/www/services_dhcpv6.php:183
+#: usr/local/www/services_router_advertisements.php:149
+msgid "A valid IPv6 address must be specified for the primary/secondary DNS servers."
+msgstr "Um endereço IPv6 válido deve ser especificado para os servidores DNS primário/secundário."
+
+#: usr/local/www/services_dhcpv6.php:201 usr/local/www/services_dhcpv6.php:223
+#: usr/local/www/services_dhcpv6.php:208 usr/local/www/services_dhcpv6.php:202
+msgid "A valid IPv6 address must be specified for the primary/secondary NTP servers."
+msgstr "Um endereço IPv6 válido deve ser especificado pelos servidores NTP primário/secundário."
+
+#: usr/local/www/services_dhcpv6.php:205 usr/local/www/services_dhcpv6.php:227
+#: usr/local/www/services_dhcpv6.php:212 usr/local/www/services_dhcpv6.php:206
+msgid "A valid IPv6 address or hostname must be specified for the TFTP server."
+msgstr "Um endereço IPv6 válido ou nome de host deve ser especificado para o servidor TFTP."
+
+#: usr/local/www/services_dhcpv6.php:207 usr/local/www/services_dhcpv6.php:229
+#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:208
+msgid "A valid IPv6 address must be specified for the network boot server."
+msgstr "Um endereço IPv6 válido deve ser especificado para o servidor de boot da rede."
+
+#: usr/local/www/services_dhcpv6.php:214 usr/local/www/services_dhcpv6.php:236
+#: usr/local/www/services_dhcpv6.php:221 usr/local/www/services_dhcpv6.php:215
+#, php-format
+msgid "The subnet range cannot overlap with virtual IPv6 address %s."
+msgstr "O intervalo de subrede não pode sobrepor o endereço IPv6 virtual %s."
+
+#: usr/local/www/services_dhcpv6.php:359 usr/local/www/services_dhcpv6.php:386
+#: usr/local/www/services_dhcpv6.php:367 usr/local/www/services_dhcpv6.php:362
+msgid "DHCPv6 server"
+msgstr "Servidor DHCPv6"
+
+#: usr/local/www/services_dhcpv6.php:497 usr/local/www/services_dhcpv6.php:524
+#: usr/local/www/services_router_advertisements.php:261
+#: usr/local/www/services_router_advertisements.php:270
+#: usr/local/www/services_dhcpv6.php:503 usr/local/www/services_dhcpv6.php:514
+#: usr/local/www/services_router_advertisements.php:256
+#: usr/local/www/services_router_advertisements.php:265
+msgid "Router Advertisements"
+msgstr "Router advertisements"
+
+#: usr/local/www/services_dhcpv6.php:504
+#, php-format
+msgid "Select the Operating Mode for the router advertisement Daemon. Use \"Router Only\" to only advertise the router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for DHCPv6 only with router advertisements, \"Assisted\" for DHCPv6 Combined with Stateless Autoconfig"
+msgstr "Selecione o modo de operação para o Daemon anúncio de roteador. Use \"Somente Roteador\" apenas para anunciar o router, \"não gerenciados\" para Advertising Router com Autoconfig Stateless, \"Managed\" para DHCPv6 somente com anúncios de roteador, \"Assistida\" para DHCPv6 Stateless Combinado com Autoconfig"
+
+#: usr/local/www/services_dhcpv6.php:510 usr/local/www/services_dhcpv6.php:584
+#: usr/local/www/services_dhcpv6.php:515 usr/local/www/services_dhcpv6.php:526
+#, php-format
+msgid "Enable DHCPv6 server on %s interface"
+msgstr "Habilitar servidor DHCPv6 na interface %s"
+
+#: usr/local/www/services_dhcpv6.php:576 usr/local/www/services_dhcpv6.php:649
+#: usr/local/www/services_dhcpv6.php:580 usr/local/www/services_dhcpv6.php:597
+msgid "Prefix Delegation Range"
+msgstr "Faixa de Delegação de Prefixo"
+
+#: usr/local/www/services_dhcpv6.php:580
+msgid "prefix length"
+msgstr "comprimento do prefixo"
+
+#: usr/local/www/services_dhcpv6.php:585
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows for \n"
+"\t\t\t\t\tassigning networks to subrouters"
+msgstr ""
+"Você pode definir aqui uma faixa prefixo para a Delegação de Prefixo DHCP. Isto permite que \n"
+" \t \t \t \t \t atribua redes para subroteadores"
+
+#: usr/local/www/services_dhcpv6.php:803
+#: usr/local/www/status_dhcpv6_leases.php:361
+#: usr/local/www/status_dhcpv6_leases.php:405
+#: usr/local/www/status_dhcpv6_leases.php:483
+#: usr/local/www/services_dhcpv6.php:898
+#: usr/local/www/status_dhcpv6_leases.php:406
+#: usr/local/www/status_dhcpv6_leases.php:484
+#: usr/local/www/services_dhcpv6.php:829
+#: usr/local/www/status_dhcpv6_leases.php:409
+#: usr/local/www/status_dhcpv6_leases.php:487
+#: usr/local/www/services_dhcpv6.php:850
+msgid "DUID"
+msgstr "DUID"
+
+#: usr/local/www/services_dhcpv6_edit.php:106
+#: usr/local/www/services_dhcpv6_edit.php:189
+#: usr/local/www/services_dhcpv6_edit.php:108
+#: usr/local/www/services_dhcpv6_edit.php:192
+#: usr/local/www/services_dhcpv6_edit.php:191
+#: usr/local/www/services_dhcpv6_edit.php:111
+#: usr/local/www/services_dhcpv6_edit.php:194
+msgid "DUID Identifier"
+msgstr "Identificador DUID"
+
+#: usr/local/www/services_dhcpv6_edit.php:126
+#: usr/local/www/services_dhcpv6_edit.php:128
+#: usr/local/www/services_dhcpv6_edit.php:131
+msgid "A valid DUID Identifier must be specified."
+msgstr "Um identificador DUID válido deve ser especificado."
+
+#: usr/local/www/services_dhcpv6_edit.php:135
+#: usr/local/www/services_dhcpv6_edit.php:137
+#: usr/local/www/services_dhcpv6_edit.php:140
+msgid "This Hostname, IP or DUID Identifier already exists."
+msgstr "Esse Hostname, endereço de IP ou DUID já existe."
+
+#: usr/local/www/services_dhcpv6_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:175
+#: usr/local/www/services_dhcpv6_edit.php:178
+msgid "DHCPv6"
+msgstr "DHCPv6"
+
+#: usr/local/www/services_dhcpv6_edit.php:186
+#: usr/local/www/services_dhcpv6_edit.php:189
+#: usr/local/www/services_dhcpv6_edit.php:188
+#: usr/local/www/services_dhcpv6_edit.php:191
+msgid "Static DHCPv6 Mapping"
+msgstr "Mapeamento DHCPv6 estático"
+
+#: usr/local/www/services_dhcpv6_edit.php:193
+#: usr/local/www/services_dhcpv6_edit.php:196
+#: usr/local/www/services_dhcpv6_edit.php:195
+#: usr/local/www/services_dhcpv6_edit.php:198
+msgid "Enter a DUID Identifier in the following format: "
+msgstr "Digite um Identificador DUID no seguinte formato:"
+
+#: usr/local/www/services_dhcpv6_edit.php:202
+#: usr/local/www/services_dhcpv6_edit.php:205
+msgid "If no IPv6 address is given, one will be dynamically allocated from the pool."
+msgstr "Se nenhum endereço IPv6 for fornecido, um será dinamicamente alocado da fila."
+
+#: usr/local/www/services_dhcpv6_relay.php:81
+msgid "A valid Destination Server IPv6 address must be specified."
+msgstr "Um endereço de IPv6 válido do Servidor de Destino deve ser especificado."
+
+#: usr/local/www/services_dhcpv6_relay.php:145
+#: usr/local/www/services_dhcpv6_relay.php:146
+msgid "DHCPv6 Relay configuration"
+msgstr "Configuração do DHCPv6 Relay"
+
+#: usr/local/www/services_dhcpv6_relay.php:151
+#: usr/local/www/services_dhcpv6_relay.php:152
+#, php-format
+msgid "Enable DHCPv6 relay on interface"
+msgstr "Habilitar DHCPv6 relay na interface"
+
+#: usr/local/www/services_dhcpv6_relay.php:169
+#: usr/local/www/services_dhcpv6_relay.php:170
+msgid "Interfaces without an IPv6 address will not be shown."
+msgstr "Interfaces sem um endereço de IPv6 não serão exibidas."
+
+#: usr/local/www/services_dhcpv6_relay.php:177
+#: usr/local/www/services_dhcpv6_relay.php:178
+#, php-format
+msgid "If this is checked, the DHCPv6 relay will append the circuit ID (%s interface number) and the agent ID to the DHCPv6 request."
+msgstr "Se esta opção estiver marcada, o DHCPv6 relay anexará o circuit ID (número de interface %s) e o agent ID à requisição DHCPv6."
+
+#: usr/local/www/services_dhcpv6_relay.php:184
+#: usr/local/www/services_dhcpv6_relay.php:185
+msgid "This is the IPv6 address of the server to which DHCPv6 requests are relayed. You can enter multiple server IPv6 addresses, separated by commas. Select \"Proxy requests to DHCPv6 server on WAN subnet\" to relay DHCPv6 packets to the server that was used on the WAN interface."
+msgstr "Esse é o endereço IPv6 do servidor para o qual as requisições DHCPv6 são retransmitidas. Você pode informar múltiplos endereços de servidores IPv6 separados por vírgulas. Selecione \"Requisições de Proxy para servidor DHCPv6 na subrede WAN\" para retransmitir pacotes DHCPv6 para o servidor que foi usado na interface WAN."
+
+#: usr/local/www/status_dhcpv6_leases.php:49
+#: usr/local/www/status_dhcpv6_leases.php:50
+msgid "DHCPv6 leases"
+msgstr "Concessões DHCPv6"
+
+#: usr/local/www/status_dhcpv6_leases.php:360
+#: usr/local/www/status_dhcpv6_leases.php:404
+#: usr/local/www/status_dhcpv6_leases.php:482
+#: usr/local/www/status_dhcpv6_leases.php:405
+#: usr/local/www/status_dhcpv6_leases.php:483
+#: usr/local/www/status_dhcpv6_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:486
+msgid "IAID"
+msgstr "IAID"
+
+#: usr/local/www/status_dhcpv6_leases.php:362
+#: usr/local/www/status_dhcpv6_leases.php:406
+#: usr/local/www/status_dhcpv6_leases.php:407
+#: usr/local/www/status_dhcpv6_leases.php:410
+msgid "Hostname/MAC"
+msgstr "Hostname/MAC"
+
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_wireless.php:99
+#: usr/local/www/diag_logs_wireless.php:100
+#, php-format
+msgid "Wireless (hostapd) log entries"
+msgstr "Wireless (hostapd) registro de logs"
+
+#: usr/local/www/services_captiveportal_zones.php:37
+msgid "Zones"
+msgstr "Zonas"
+
+#: usr/local/www/services_captiveportal_zones.php:47
+#: usr/local/www/services_captiveportal_zones.php:48
+msgid "The CaptivePortal entry list has been changed"
+msgstr "A lista de entrada do CaptivePortal foi modificada"
+
+#: usr/local/www/services_captiveportal_zones.php:60
+#: usr/local/www/services_captiveportal_zones.php:101
+#: usr/local/www/services_captiveportal_zones.php:61
+#: usr/local/www/services_captiveportal_zones.php:102
+msgid "add a new captiveportal instance"
+msgstr "adicionar uma nova instância do Captive Portal"
+
+#: usr/local/www/services_captiveportal_zones.php:88
+#: usr/local/www/services_captiveportal_zones.php:89
+msgid "edit captiveportal instance"
+msgstr "editar instância do captiveportal"
+
+#: usr/local/www/services_captiveportal_zones.php:89
+#: usr/local/www/services_captiveportal_zones.php:90
+msgid "delete captiveportal instance"
+msgstr "apagar a instância do captiveportal"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:48
+#: usr/local/www/services_captiveportal_zones_edit.php:45
+msgid "Edit Zones"
+msgstr "Editar Zonas"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:67
+#: usr/local/www/services_captiveportal_zones_edit.php:69
+msgid "already exists"
+msgstr "Já existe"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:96
+#: usr/local/www/services_captiveportal_zones_edit.php:98
+#: usr/local/www/services_captiveportal_zones_edit.php:94
+msgid "Edit Captive Portal Zones"
+msgstr "Editar Zonas do Captive Portal"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:103
+msgid "Zone name. Cannot contain spaces."
+msgstr "Nome da Zona. Não pode conter espaços."
+
+#: usr/local/www/system_firmware_restorefullbackup.php:104
+msgid "Restore full backup"
+msgstr "Restaurar backup completo"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:139
+msgid "Filename"
+msgstr "Nome do arquivo"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:162
+msgid "Do you really want to delete this backup?"
+msgstr "Você realmente deseja apagar esse backup?"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:174
+msgid "<center>Could not locate any previous backups.</center>"
+msgstr "<center>Não foi possível localizar nenhum dos backups anteriores.</center>"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:184
+msgid "Restore"
+msgstr "Restaurar"
+
+#: usr/local/www/diag_dump_states_sources.php:65
+msgid "Show Source Tracking"
+msgstr "Mostrar Rastreamento de Origem"
+
+#: usr/local/www/diag_dump_states_sources.php:145
+#: usr/local/www/diag_dump_states_sources.php:144
+msgid "Source -> Destination"
+msgstr "Origem -> Destino"
+
+#: usr/local/www/diag_dump_states_sources.php:146
+#: usr/local/www/diag_dump_states_sources.php:145
+msgid "# States"
+msgstr "# Estados"
+
+#: usr/local/www/diag_dump_states_sources.php:147
+#: usr/local/www/diag_dump_states_sources.php:146
+msgid "# Connections"
+msgstr "# Conexões"
+
+#: usr/local/www/diag_dump_states_sources.php:180
+#: usr/local/www/diag_dump_states_sources.php:179
+msgid "Remove all source tracking entries from"
+msgstr "Remover todos as entradas de rastreamentos de origem de"
+
+#: usr/local/www/diag_dump_states_sources.php:190
+#: usr/local/www/diag_dump_states_sources.php:189
+msgid "No source tracking entries were found."
+msgstr "Nenhuma entrada de rastreamento por origem encontrada."
+
+#: etc/inc/system.inc:418 etc/inc/system.inc:425
+#, php-format
+msgid "Not adding default route because OLSR dynamic gateway is enabled."
+msgstr "Rota padrão não adicionada porque o gateway dinâmico OLSR está habilitado."
+
+# 87%
+#: etc/inc/priv.defs.inc:118 etc/inc/priv.defs.inc:124
+msgid "WebCfg - Diagnostics: Logs: Gateways page"
+msgstr "WebCfg - Página Diagnóstico: Logs: Gateways"
+
+# 84%
+#: etc/inc/priv.defs.inc:119 etc/inc/priv.defs.inc:125
+msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Gateway'."
+
+# 85%
+#: etc/inc/priv.defs.inc:124 etc/inc/priv.defs.inc:130
+msgid "WebCfg - Diagnostics: Logs: Resolver page"
+msgstr "WebCfg - Página Diagnóstico: Logs: Resolver"
+
+# 84%
+#: etc/inc/priv.defs.inc:125 etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema: Resolver'."
+
+# 87%
+#: etc/inc/priv.defs.inc:130 etc/inc/priv.defs.inc:136
+msgid "WebCfg - Diagnostics: Logs: Wireless page"
+msgstr "WebCfg - Página Diagnóstico: Logs: Wireless"
+
+# 84%
+#: etc/inc/priv.defs.inc:131 etc/inc/priv.defs.inc:137
+msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page."
+msgstr "Permitir acesso à  página 'Diagnóstico: Logs: Sistema: Wireless'."
+
+# 88%
+#: etc/inc/priv.defs.inc:148 etc/inc/priv.defs.inc:154
+msgid "WebCfg - Status: System logs: NTP page"
+msgstr "WebCfg - Página Status: Logs do Sistema: NTP"
+
+# 91%
+#: etc/inc/priv.defs.inc:149 etc/inc/priv.defs.inc:155
+msgid "Allow access to the 'Status: System logs: NTP' page."
+msgstr "Permitir acesso à  página 'Status: Logs do Sistema: NTP'."
+
+#: etc/inc/pfsense-utils.inc:2377 etc/inc/pfsense-utils.inc:2468
+#: etc/inc/pfsense-utils.inc:2521 etc/inc/pfsense-utils.inc:2528
+#: etc/inc/pfsense-utils.inc:2535 etc/inc/pfsense-utils.inc:2532
+msgid "English"
+msgstr "Inglês"
+
+#: etc/inc/pfsense-utils.inc:2378 etc/inc/pfsense-utils.inc:2469
+#: etc/inc/pfsense-utils.inc:2522 etc/inc/pfsense-utils.inc:2529
+#: etc/inc/pfsense-utils.inc:2536 etc/inc/pfsense-utils.inc:2533
+msgid "Portuguese (Brazil)"
+msgstr "Português (Brasil)"
+
+# 98%
+#: etc/inc/interfaces.inc:251 etc/inc/interfaces.inc:250
+#: etc/inc/interfaces.inc:248
+msgid "interface_vlan_configure called with if undefined."
+msgstr "interface_vlan_configure called with if undefined."
+
+# 98%
+#: etc/inc/interfaces.inc:292 etc/inc/interfaces.inc:291
+#: etc/inc/interfaces.inc:289
+#, php-format
+msgid "interface_qinq_configure called with if undefined.%s"
+msgstr "interface_qinq_configure called with if undefined.%s"
+
+# 96%
+#: etc/inc/interfaces.inc:377 etc/inc/interfaces.inc:376
+#: etc/inc/interfaces.inc:380
+#, php-format
+msgid "interface_qinq2_configure called with if undefined.%s"
+msgstr "interface_qinq2_configure called with if undefined.%s"
+
+# 75%
+#: etc/inc/interfaces.inc:2152
+#, php-format
+msgid "Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for writing.%s"
+msgstr "Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for writing.%s"
+
+# 96%
+#: etc/inc/interfaces.inc:2995
+msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()"
+msgstr "Could not bring wanif up in interface_carpdev_dhcp_configure()"
+
+# 75%
+#: etc/inc/interfaces.inc:3500 etc/inc/interfaces.inc:3360
+#: etc/inc/interfaces.inc:3453 etc/inc/interfaces.inc:3580
+#: etc/inc/interfaces.inc:3525 etc/inc/interfaces.inc:3547
+#, php-format
+msgid "Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s"
+msgstr "Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for writing.%s"
+
+#: etc/inc/services.inc:1085 etc/inc/services.inc:1217
+#: etc/inc/services.inc:1211 etc/inc/services.inc:1218
+#: etc/inc/services.inc:1270 etc/inc/services.inc:1268
+msgid "Started IGMP proxy service."
+msgstr "Serviço IGMP proxy iniciado."
+
+#: usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:224 usr/local/www/fbegin.inc:148
+#: usr/local/www/fbegin.inc:183 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_auth.php:74 usr/local/www/diag_logs_ipsec.php:111
+#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_ppp.php:79
+#: usr/local/www/diag_logs_resolver.php:87 usr/local/www/diag_logs_ntpd.php:54
+#: usr/local/www/diag_logs_ntpd.php:74 usr/local/www/diag_logs.php:86
+#: usr/local/www/status_ntpd.php:94 usr/local/www/diag_logs_dhcp.php:79
+#: usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/services_ntpd.php:71 usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_openvpn.php:78
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter.php:110
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:231 usr/local/www/fbegin.inc:157
+#: usr/local/www/fbegin.inc:191 usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/diag_logs_auth.php:75 usr/local/www/diag_logs_ipsec.php:112
+#: usr/local/www/diag_logs_resolver.php:88 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/status_ntpd.php:109 usr/local/www/diag_logs_dhcp.php:80
+#: usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/services_ntpd.php:76 usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_openvpn.php:79
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_filter.php:100
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_ppp.php:77 usr/local/www/fbegin.inc:149
+#: usr/local/www/fbegin.inc:182 usr/local/www/diag_logs_filter.php:130
+#: usr/local/www/status_ntpd.php:115 usr/local/www/diag_logs_settings.php:250
+msgid "NTP"
+msgstr "NTP"
+
+# 75%
+#: usr/local/www/diag_logs_routing.php:82
+#: usr/local/www/diag_logs_resolver.php:96 usr/local/www/diag_logs.php:65
+#: usr/local/www/diag_logs.php:95 usr/local/www/diag_logs_wireless.php:84
+#: usr/local/www/diag_logs_gateways.php:96
+#: usr/local/www/diag_logs_routing.php:83
+#: usr/local/www/diag_logs_resolver.php:97
+#: usr/local/www/diag_logs_wireless.php:85
+#: usr/local/www/diag_logs_gateways.php:97
+msgid "General"
+msgstr "Geral"
+
+#: usr/local/www/diag_logs_routing.php:85
+#: usr/local/www/diag_logs_resolver.php:66
+#: usr/local/www/diag_logs_resolver.php:99 usr/local/www/diag_logs.php:98
+#: usr/local/www/diag_logs_wireless.php:87
+#: usr/local/www/diag_logs_gateways.php:99
+#: usr/local/www/diag_logs_routing.php:86
+#: usr/local/www/diag_logs_resolver.php:100
+#: usr/local/www/diag_logs_wireless.php:88
+#: usr/local/www/diag_logs_gateways.php:100
+msgid "Resolver"
+msgstr "Resolver"
+
+#: usr/local/www/diag_logs_routing.php:97
+#: usr/local/www/diag_logs_routing.php:98
+#, php-format
+msgid "Routing daemon log entries"
+msgstr "Logs do daemon de roteamento"
+
+# 92%
+#: usr/local/www/system_routes_edit.php:158
+#: usr/local/www/system_routes_edit.php:169
+#: usr/local/www/system_routes_edit.php:171
+#: usr/local/www/system_routes_edit.php:173
+msgid "A route to these destination networks already exists"
+msgstr "Já existe uma rota para estas redes de destino"
+
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:303
+#: usr/local/www/system_routes_edit.php:326
+#: usr/local/www/system_routes_edit.php:335
+#: usr/local/www/system_routes_edit.php:337
+msgid "Disable this static route"
+msgstr "Desabilitar esta rota estática"
+
+#: usr/local/www/system_routes_edit.php:303
+#: usr/local/www/system_routes_edit.php:304
+#: usr/local/www/system_routes_edit.php:327
+#: usr/local/www/system_routes_edit.php:336
+#: usr/local/www/system_routes_edit.php:338
+msgid "Set this option to disable this static route without removing it from the list."
+msgstr "Marque esta opção para desabilitar esta rota estática sem removê-la da lista."
+
+# 91%
+#: usr/local/www/pkg_mgr.php:185 usr/local/www/pkg_mgr_installed.php:178
+#: usr/local/www/pkg_mgr_installed.php:180 usr/local/www/pkg_mgr.php:188
+msgid "Package info"
+msgstr "Info do pacote"
+
+#: usr/local/www/pkg_mgr.php:189 usr/local/www/pkg_mgr_installed.php:182
+#: usr/local/www/pkg_mgr_installed.php:184 usr/local/www/pkg_mgr.php:192
+msgid "No package info, check the forum"
+msgstr "Sem informações do pacote, verifique o fórum"
+
+#: usr/local/www/pkg_mgr.php:193
+msgid "Click on package name to access it's website."
+msgstr "Clique no nome do pacote para acessar seu website."
+
+#: usr/local/www/pkg_mgr.php:217 usr/local/www/pkg_mgr.php:220
+msgid "Click "
+msgstr "Clique"
+
+#: usr/local/www/pkg_mgr.php:232 usr/local/www/pkg_mgr_installed.php:199
+#: usr/local/www/pkg_mgr_installed.php:201 usr/local/www/pkg_mgr.php:235
+msgid "Click package info for more details about "
+msgstr "Clique nas informações do pacote para mais detalhes sobre"
+
+#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240
+#: usr/local/www/pkg_mgr.php:243
+msgid "Do you really want to install "
+msgstr "Você realmente deseja instalar"
+
+# 77%
+#: usr/local/www/pkg_mgr.php:237 usr/local/www/pkg_mgr.php:240
+#: usr/local/www/pkg_mgr.php:243
+msgid "Install "
+msgstr "Instalado"
+
+#: usr/local/www/services_unbound_acls.php:57
+msgid "Access List successfully deleted"
+msgstr "Lista de acesso excluída com sucesso"
+
+#: usr/local/www/services_unbound_acls.php:173
+msgid "The settings for the DNS Resolver have changed. You must apply the configuration to take affect."
+msgstr "As configurações do DNS Resolver foram alteradas. Você precisa aplicar as configurações para que elas tenham efeito."
+
+#: usr/local/www/services_unbound_acls.php:181
+msgid "General Settings"
+msgstr "ConfiguraçÃo Geral"
+
+# 76%
+#: usr/local/www/services_unbound_acls.php:182
+#: usr/local/www/services_unbound.php:137
+#: usr/local/www/services_unbound_advanced.php:124
+msgid "Advanced settings"
+msgstr "Configurações avançadas"
+
+#: usr/local/www/services_unbound_acls.php:183
+#: usr/local/www/services_unbound.php:138
+#: usr/local/www/services_unbound_advanced.php:125
+msgid "Access Lists"
+msgstr "Listas de acesso"
+
+#: usr/local/www/services_unbound_acls.php:200
+#, php-format
+msgid "%s Access List"
+msgstr "Lista de acesso %s"
+
+#: usr/local/www/services_unbound_acls.php:203
+msgid "Access List name"
+msgstr "Nome da lista de acesso"
+
+#: usr/local/www/services_unbound_acls.php:207
+msgid "Provide an Access List name."
+msgstr "Forneça um nome para a Lista de Acesso."
+
+#: usr/local/www/services_unbound_acls.php:222
+msgid "Choose what to do with DNS requests that match the criteria specified below."
+msgstr "Escolha o que fazer com requisições DNS que correspondem aos critérios especificados abaixo."
+
+#: usr/local/www/services_unbound_acls.php:223
+msgid "<b>Deny:</b> This action stops queries from hosts within the netblock defined below."
+msgstr "<b>Negar:</b> Esta ação interrompe consultas de hosts dentro da rede definida abaixo."
+
+#: usr/local/www/services_unbound_acls.php:224
+msgid "<b>Refuse:</b> This action also stops queries from hosts within the netblock defined below, but sends a DNS rcode REFUSED error message back to the client."
+msgstr "<b>Recusar:</b> Esta ação também interrompe consultas de hosts dentro da rede definida abaixo, mas envia uma mensagem de erro DNS rcode REFUSED para o cliente."
+
+#: usr/local/www/services_unbound_acls.php:225
+msgid "<b>Allow:</b> This action allows queries from hosts within the netblock defined below."
+msgstr "<b>Permitir:</b> Esta ação permite consultas de hosts dentro da rede definida abaixo."
+
+#: usr/local/www/services_unbound_acls.php:226
+msgid "<b>Allow Snoop:</b> This action allows recursive and nonrecursive access from hosts within the netblock defined below. Used for cache snooping and ideally should only be configured for your administrative host."
+msgstr "<b>Permitir Snoop:</b> Esta ação permite acesso recursivo e não recursivo de hosts dentro da rede definida abaixo. Usado para cache snooping e o ideal é que seja configurado apenas para seu host administrativo."
+
+# 87%
+#: usr/local/www/services_unbound_acls.php:231
+msgid "Networks"
+msgstr "Redes"
+
+#: usr/local/www/services_unbound_acls.php:317
+msgid "Access List Name"
+msgstr "Nome da Lista de Acesso"
+
+#: usr/local/www/services_unbound_acls.php:340
+msgid "edit access list"
+msgstr "editar lista de acesso"
+
+# 82%
+#: usr/local/www/services_unbound_acls.php:343
+msgid "Do you really want to delete this access list?"
+msgstr "Você deseja realmente apagar esta lista de acesso?"
+
+#: usr/local/www/services_unbound_acls.php:344
+msgid "delete access list"
+msgstr "excluir lista de acesso"
+
+#: usr/local/www/services_unbound_acls.php:357
+msgid "Add new Access List"
+msgstr "Adicionar nova Lista de Acesso"
+
+#: usr/local/www/services_unbound_acls.php:364
+msgid "Access Lists to control access to the DNS Resolver can be defined here."
+msgstr "Listas de Acesso para controlar o acesso ao DNS Resolver podem ser definidas aqui."
+
+#: usr/local/www/diag_logs_settings.php:86
+#: usr/local/www/diag_logs_settings.php:87
+#: usr/local/www/diag_logs_settings.php:90
+msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #1."
+msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #1."
+
+#: usr/local/www/diag_logs_settings.php:89
+#: usr/local/www/diag_logs_settings.php:90
+#: usr/local/www/diag_logs_settings.php:93
+msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #2."
+msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #2."
+
+#: usr/local/www/diag_logs_settings.php:92
+#: usr/local/www/diag_logs_settings.php:93
+#: usr/local/www/diag_logs_settings.php:96
+msgid "A valid IP address/hosname or IP/hostname:port must be specified for remote syslog server #3."
+msgstr "Um IP/hostname ou IP/hostname:porta deve ser expecificado para o servidor syslog remoto #3."
+
+#: usr/local/www/diag_logs_settings.php:234
+#: usr/local/www/diag_logs_settings.php:241
+#: usr/local/www/diag_logs_settings.php:260
+msgid "General Logging Options"
+msgstr "Opções Gerais de Log"
+
+#: usr/local/www/diag_logs_settings.php:245
+#: usr/local/www/diag_logs_settings.php:252
+#: usr/local/www/diag_logs_settings.php:271
+msgid "Hint: This is only the number of log entries displayed in the GUI. It does not affect how many entries are contained in the actual log files."
+msgstr "Dica: Este é apenas o número de entradas do log exibidas na interface. Isto não afeta a quantidade de entradas existente nos arquivos de log reais."
+
+#: usr/local/www/diag_logs_settings.php:251
+#: usr/local/www/diag_logs_settings.php:258
+#: usr/local/www/diag_logs_settings.php:278
+msgid "Hint: packets that are blocked by the implicit default block rule will not be logged if you uncheck this option. Per-rule logging options are still respected."
+msgstr "Dica: pacotes que são bloqueados pela regra de bloqueio padrão não são \"logadas\" se você desmarcar esta opção. Opções de log por regras ainda são respeitadas."
+
+#: usr/local/www/diag_logs_settings.php:259
+#: usr/local/www/diag_logs_settings.php:266
+#: usr/local/www/diag_logs_settings.php:297
+msgid "Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read."
+msgstr "Dica: Se isto estiver ativado, regras de filtros são exibidas da forma como são geradas pelo filtro de pacotes, sem formatação alguma. Isto irá revelar mais informações detalhadas, mas é mais difícil de ler."
+
+# 91%
+#: usr/local/www/diag_logs_settings.php:265
+#: usr/local/www/diag_logs_settings.php:285
+#: usr/local/www/diag_logs_settings.php:316
+msgid "Disable writing log files to the local disk"
+msgstr "Desabilitar gravação de arquivos de log no disco local"
+
+#: usr/local/www/diag_logs_settings.php:274
+#: usr/local/www/diag_logs_settings.php:294
+#: usr/local/www/diag_logs_settings.php:325
+msgid "Remote Logging Options"
+msgstr "Opções de Log Remoto"
+
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_settings.php:297
+#: usr/local/www/diag_logs_settings.php:328
+msgid "Enable Remote Logging"
+msgstr "Habilitar Log Remoto"
+
+#: usr/local/www/diag_logs_settings.php:279
+#: usr/local/www/diag_logs_settings.php:299
+#: usr/local/www/diag_logs_settings.php:330
+msgid "Send log messages to remote syslog server"
+msgstr "Enviar mensagens de log para o servidor syslog remoto"
+
+# 90%
+#: usr/local/www/diag_logs_settings.php:282
+#: usr/local/www/diag_logs_settings.php:302
+#: usr/local/www/diag_logs_settings.php:333
+msgid "Remote Syslog Servers"
+msgstr "Servidores Syslog Remotos"
+
+#: usr/local/www/diag_logs_settings.php:299
+#: usr/local/www/diag_logs_settings.php:319
+#: usr/local/www/diag_logs_settings.php:350
+msgid "IP addresses of remote syslog servers, or an IP:port."
+msgstr "Endereços IP dos servidores syslog remotos, ou IP:porta."
+
+#: usr/local/www/diag_logs_settings.php:304
+#: usr/local/www/diag_logs_settings.php:324
+#: usr/local/www/diag_logs_settings.php:355
+msgid "Remote Syslog Contents"
+msgstr "Conteúdo Syslog Remoto"
+
+#: usr/local/www/diag_logs_settings.php:334
+#: usr/local/www/diag_logs_settings.php:354
+#: usr/local/www/diag_logs_settings.php:385
+msgid "syslog sends UDP datagrams to port 514 on the specified remote syslog server, unless another port is specified. Be sure to set syslogd on the remote server to accept syslog messages from"
+msgstr "syslog envia um datagrama UDP para a porta 514 do servidor remoto especificado, a não ser que outra porta seja especificada. Esteja certo de configurar o syslogd no servidor remoto para aceitar mensagens de"
+
+# 94%
+#: usr/local/www/system_gateway_groups_edit.php:229
+#: usr/local/www/system_gateway_groups_edit.php:289
+#: usr/local/www/system_gateway_groups_edit.php:293
+msgid "Interface Address"
+msgstr "Endereço da Interface"
+
+#: usr/local/www/system_gateway_groups_edit.php:253
+#: usr/local/www/system_gateway_groups_edit.php:313
+msgid "The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dyndns, IPsec or openvpn endpoint"
+msgstr "O campo IP virtual seleciona qual IP (virtual) deve ser usado quando este grupo se aplica a um Dyndns, IPsec ou OpenVPN local"
+
+#: usr/local/www/services_dyndns_edit.php:102
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:326
+#: usr/local/www/services_dyndns_edit.php:103
+#: usr/local/www/services_dyndns_edit.php:334
+#: usr/local/www/services_dyndns_edit.php:335
+msgid "Update URL"
+msgstr "Atualizar URL"
+
+#: usr/local/www/services_dyndns_edit.php:254
+#: usr/local/www/services_dyndns_edit.php:258
+#: usr/local/www/services_dyndns_edit.php:260
+#: usr/local/www/services_dyndns_edit.php:261
+msgid "Interface to send update from"
+msgstr "Interface de onde enviar atualizações"
+
+#: usr/local/www/services_dyndns_edit.php:262
+#: usr/local/www/services_dyndns_edit.php:266
+#: usr/local/www/services_dyndns_edit.php:268
+#: usr/local/www/services_dyndns_edit.php:269
+msgid "Note: This is almost always the same as the Interface to Monitor."
+msgstr "Nota: Esta é quase sempre a mesma interface de Interface a Monitorar."
+
+# 80%
+#: usr/local/www/services_dyndns_edit.php:299
+#: usr/local/www/services_dyndns_edit.php:303
+#: usr/local/www/services_dyndns_edit.php:311
+#: usr/local/www/services_dyndns_edit.php:312
+msgid "Username is required for all types except Namecheap, FreeDNS and Custom Entries."
+msgstr "Nome de usuário é necessário para todos os tipos exceto Namecheap e FreeDNS e entradas customizadas."
+
+#: usr/local/www/services_dyndns_edit.php:300
+#: usr/local/www/services_dyndns_edit.php:304
+#: usr/local/www/services_dyndns_edit.php:312
+#: usr/local/www/services_dyndns_edit.php:313
+msgid "Route 53: Enter your Access Key ID."
+msgstr "Route 53: Entre com seu Access Key ID."
+
+#: usr/local/www/services_dyndns_edit.php:301
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:313
+#: usr/local/www/services_dyndns_edit.php:314
+msgid "For Custom Entries, Username and Password represent HTTP Authentication username and passwords."
+msgstr "Para entradas customizadas, nome de usuário e senha, apresente usuário e senha autenticação HTTP."
+
+#: usr/local/www/services_dyndns_edit.php:310
+#: usr/local/www/services_dyndns_edit.php:314
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:323
+msgid "Route 53: Enter your Secret Access Key."
+msgstr "Route 53: Entre com seu Secret Access Key."
+
+#: usr/local/www/services_dyndns_edit.php:315
+#: usr/local/www/services_dyndns_edit.php:319
+#: usr/local/www/services_dyndns_edit.php:327
+#: usr/local/www/services_dyndns_edit.php:328
+msgid "Zone ID"
+msgstr "Zone ID"
+
+#: usr/local/www/services_dyndns_edit.php:318
+#: usr/local/www/services_dyndns_edit.php:322
+#: usr/local/www/services_dyndns_edit.php:330
+#: usr/local/www/services_dyndns_edit.php:331
+msgid "Enter Zone ID that you received when you created your domain in Route 53."
+msgstr "Informe o Zone ID que você recebeu quando criou seu domínio no Route 53."
+
+#: usr/local/www/services_dyndns_edit.php:325
+#: usr/local/www/services_dyndns_edit.php:329
+#: usr/local/www/services_dyndns_edit.php:337
+#: usr/local/www/services_dyndns_edit.php:338
+msgid "This is the only field required by for Custom Dynamic DNS, and is only used by Custom Entries."
+msgstr "Este é o único campo exigido pelo Custom Dynamic DNS e usado apenas pelas entradas customizadas."
+
+#: usr/local/www/services_dyndns_edit.php:327
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:331
+#: usr/local/www/services_dyndns_edit.php:342
+#: usr/local/www/services_dyndns_edit.php:339
+#: usr/local/www/services_dyndns_edit.php:350
+#: usr/local/www/services_dyndns_edit.php:340
+#: usr/local/www/services_dyndns_edit.php:351
+msgid "If you need the new IP to be included in the request, put %IP% in its place."
+msgstr "Se precisa que o novo IP seja incluído na requisição, coloque %IP% em seu lugar."
+
+#: usr/local/www/services_dyndns_edit.php:331
+#: usr/local/www/services_dyndns_edit.php:335
+#: usr/local/www/services_dyndns_edit.php:343
+#: usr/local/www/services_dyndns_edit.php:344
+msgid "Result Match"
+msgstr "Result Match"
+
+#: usr/local/www/services_dyndns_edit.php:334
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:346
+#: usr/local/www/services_dyndns_edit.php:347
+msgid "This field is only used by Custom Dynamic DNS Entries."
+msgstr "Este campo é usado apenas pelo Custom Dynamic DNS Entries."
+
+#: usr/local/www/services_dyndns_edit.php:336
+#: usr/local/www/services_dyndns_edit.php:340
+#: usr/local/www/services_dyndns_edit.php:348
+#: usr/local/www/services_dyndns_edit.php:349
+msgid "This field should be identical to what your DDNS Provider will return if the update succeeds, leave it blank to disable checking of returned results."
+msgstr "Este campo deve ser identico ao o que seu provedor DDNS irá retornar se a atualização for bem sucedida, deixe em branco para desabilitar a verificação de resultados retornados."
+
+#: usr/local/www/services_dyndns_edit.php:340
+#: usr/local/www/services_dyndns_edit.php:344
+#: usr/local/www/services_dyndns_edit.php:352
+#: usr/local/www/services_dyndns_edit.php:353
+msgid "If you need to include multiple possible values, sperate them with a |. If your provider includes a |, escape it with \\|"
+msgstr "Se você precisar incluir multiplos valores possíveis, separe-os com um |. Se o seu provedor incluir um |, escape-o com \\|"
+
+#: usr/local/www/services_dyndns_edit.php:342
+#: usr/local/www/services_dyndns_edit.php:346
+#: usr/local/www/services_dyndns_edit.php:354
+#: usr/local/www/services_dyndns_edit.php:355
+msgid ""
+"Tabs (\\t), newlines (\\n"
+") and carriage returns (\\r) at the beginning or end of the returned results are removed before comparison."
+msgstr ""
+"Tabs (\\t), quebra de linha (\\n"
+") e retornos de carro (\\r) no inicio ou no fim dos resultados retornados são removidos antes da comparação."
+
+#: usr/local/www/services_dyndns_edit.php:351
+#: usr/local/www/services_dyndns_edit.php:355
+#: usr/local/www/services_dyndns_edit.php:363
+#: usr/local/www/services_dyndns_edit.php:364
+msgid "Choose TTL for your dns record."
+msgstr "Escolha o TTL para seus registros DNS."
+
+#: usr/local/www/services_dyndns_edit.php:370
+#: usr/local/www/services_dyndns_edit.php:374
+#: usr/local/www/services_dyndns_edit.php:382
+#: usr/local/www/services_dyndns_edit.php:383
+#: usr/local/www/services_rfc2136_edit.php:104
+#: usr/local/www/services_rfc2136_edit.php:214
+msgid "Save & Force Update"
+msgstr "Salvar e Forçar Atualização"
+
+#: usr/local/www/fbegin.inc:102 usr/local/www/fbegin.inc:111
+#: usr/local/www/fbegin.inc:103
+msgid "High Avail. Sync"
+msgstr "Sincronização Alta Disp."
+
+#: usr/local/www/services_dnsmasq_edit.php:119
+msgid "Alias Domain"
+msgstr "Alias de Dominio"
+
+#: usr/local/www/services_dnsmasq_edit.php:124
+msgid "Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'."
+msgstr "Hostnames na lista de alias podem conter apenas caracteres A-Z, 0-9 e '-'."
+
+#: usr/local/www/services_dnsmasq_edit.php:127
+msgid "A valid domain must be specified in alias list."
+msgstr "Um dominio válido deve ser especificado na lista de alias."
+
+#: usr/local/www/services_dnsmasq_edit.php:232
+#: usr/local/www/services_dnsmasq_edit.php:233
+msgid "Enter additional names for this host."
+msgstr "Informe nomes adicionais para este host."
+
+#: usr/local/www/pkg.php:238 usr/local/www/pkg.php:186
+msgid "Saving changes..."
+msgstr "Salvando alterações..."
+
+#: usr/local/www/pkg.php:239 usr/local/www/pkg.php:187
+msgid "Do you really want to save changes?"
+msgstr "Você deseja realmente salvar as alterações?"
+
+#: usr/local/www/status_interfaces.php:196
+#: usr/local/www/status_interfaces.php:199
+msgid "Cell Signal (RSSI)"
+msgstr "Cell Signal (RSSI)"
+
+#: usr/local/www/status_interfaces.php:203
+#: usr/local/www/status_interfaces.php:206
+msgid "Cell Mode"
+msgstr "Cell Mode"
+
+#: usr/local/www/status_interfaces.php:210
+#: usr/local/www/status_interfaces.php:213
+msgid "Cell SIM State"
+msgstr "Cell SIM State"
+
+#: usr/local/www/status_interfaces.php:217
+#: usr/local/www/status_interfaces.php:220
+msgid "Cell Service"
+msgstr "Cell Service"
+
+#: usr/local/www/status_interfaces.php:224
+#: usr/local/www/status_interfaces.php:227
+msgid "Cell Upstream"
+msgstr "Cell Upstream"
+
+#: usr/local/www/status_interfaces.php:231
+#: usr/local/www/status_interfaces.php:234
+msgid "Cell Downstream"
+msgstr "Cell Downstream"
+
+#: usr/local/www/status_interfaces.php:238
+#: usr/local/www/status_interfaces.php:241
+msgid "Cell Current Up"
+msgstr "Cell Current Up"
+
+#: usr/local/www/status_interfaces.php:245
+#: usr/local/www/status_interfaces.php:248
+msgid "Cell Current Down"
+msgstr "Cell Current Down"
+
+#: usr/local/www/status_interfaces.php:289
+#: usr/local/www/status_interfaces.php:292
+msgid "IPv6 Link Local"
+msgstr "IPv6 Link Local"
+
+#: usr/local/www/status_interfaces.php:339
+#: usr/local/www/status_interfaces.php:342
+msgid "LAGG Protocol"
+msgstr "Protocolo LAGG"
+
+#: usr/local/www/status_interfaces.php:346
+#: usr/local/www/status_interfaces.php:349
+msgid "LAGG Ports"
+msgstr "Portas LAGG"
+
+#: usr/local/www/diag_defaults.php:51 usr/local/www/diag_defaults.php:61
+msgid "The system has been reset to factory defaults and is now rebooting. This may take a few minutes, depending on your hardware."
+msgstr "O systema foi restaurado para o padrão de fábrica e está reiniciando. Isto pode levar alguns minutos, dependendo do seu hardware."
+
+#: usr/local/www/carp_status.php:196 usr/local/www/carp_status.php:189
+msgid "You can configure high availability sync settings"
+msgstr "Você pode definir as configurações de sincronização de alta disponibilidade "
+
+#: usr/local/www/load_balancer_setting.php:69
+msgid "Timeout must be a numeric value"
+msgstr "Timeout deve ser um valor numérico"
+
+#: usr/local/www/load_balancer_setting.php:73
+msgid "Interval must be a numeric value"
+msgstr "Intervalo deve ser um valor numérico"
+
+#: usr/local/www/load_balancer_setting.php:78
+msgid "Prefork must be a numeric value"
+msgstr "Prefork deve ser um valor numérico"
+
+#: usr/local/www/load_balancer_setting.php:81
+msgid "Prefork value must be between 1 and 32"
+msgstr "O valor de prefork deve estar entre 1 e 32"
+
+#: usr/local/www/load_balancer_setting.php:132
+#: usr/local/www/load_balancer_setting.php:131
+msgid "Relayd global settings"
+msgstr "Configurações gerais do Relayd"
+
+#: usr/local/www/load_balancer_setting.php:135
+#: usr/local/www/load_balancer_setting.php:134
+msgid "timeout"
+msgstr "timeout"
+
+#: usr/local/www/load_balancer_setting.php:139
+#: usr/local/www/load_balancer_setting.php:138
+msgid "Set the global timeout in milliseconds for checks. Leave blank to use the default value of 1000 ms "
+msgstr "Define o timeout global em milisegundos para verificações. Deixe em branco para usar o valor padrão de 1000 ms"
+
+# 75%
+#: usr/local/www/load_balancer_setting.php:143
+#: usr/local/www/load_balancer_setting.php:142
+msgid "interval"
+msgstr "intervalo"
+
+#: usr/local/www/load_balancer_setting.php:147
+#: usr/local/www/load_balancer_setting.php:146
+msgid "Set the interval in seconds at which the member of a pool will be checked. Leave blank to use the default interval of 10 seconds"
+msgstr "Define o intervalo em segundos no qual o membro de um pool será verificado. Deixe em branco para usar o valor padão de 10 segundos"
+
+#: usr/local/www/load_balancer_setting.php:151
+#: usr/local/www/load_balancer_setting.php:150
+msgid "prefork"
+msgstr "prefork"
+
+#: usr/local/www/load_balancer_setting.php:155
+#: usr/local/www/load_balancer_setting.php:154
+msgid "Number of processes used by relayd. Leave blank to use the default value of 5 processes"
+msgstr "Número de processos usados pelo relayd. Deixe em branco para usar o valor padrão de 5 processos"
+
+# 98%
+#: usr/local/www/services_dhcp_relay.php:80
+msgid "A valid Destination Server IP address must be specified."
+msgstr "Um endereço IP do Servidor de Destino válido deve ser especificado."
+
+#: usr/local/www/diag_ipsec.php:65 usr/local/www/diag_ipsec.php:66
+#: usr/local/www/diag_ipsec.php:68
+msgid "Disconnected user"
+msgstr "Usuário desconectado"
+
+#: usr/local/www/diag_ipsec.php:192 usr/local/www/diag_ipsec.php:193
+#: usr/local/www/diag_ipsec.php:194
+msgid "Mobile User"
+msgstr "Usuário Móvel"
+
+#: usr/local/www/diag_ipsec.php:193 usr/local/www/diag_ipsec.php:194
+#: usr/local/www/diag_ipsec.php:195
+msgid "Login Time"
+msgstr "Hora do Login"
+
+# 83%
+#: usr/local/www/diag_ipsec.php:195 usr/local/www/diag_ipsec.php:196
+#: usr/local/www/diag_ipsec.php:197
+msgid "Remote"
+msgstr "Remoto"
+
+# 82%
+#: usr/local/www/diag_ipsec.php:223 usr/local/www/diag_ipsec.php:224
+#: usr/local/www/diag_ipsec.php:225
+msgid "You can configure IPsec"
+msgstr "Você pode configurar seu IPsec"
+
+# 81%
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:681
+#: usr/local/www/system_certmanager.php:210
+#: usr/local/www/system_certmanager.php:706
+#: usr/local/www/system_certmanager.php:707
+msgid "Certificate Type"
+msgstr "Tipo do Certificado"
+
+#: usr/local/www/system_certmanager.php:694
+#: usr/local/www/system_certmanager.php:719
+#: usr/local/www/system_certmanager.php:720
+msgid "Type of certificate to generate. Used for placing restrictions on the usage of the generated certificate."
+msgstr "Tipo do certificado a gerar. Usado para colocar restrições sobre o uso do certificado gerado."
+
+#: usr/local/www/system_certmanager.php:757
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/system_certmanager.php:783
+msgid "Alternative Names"
+msgstr "Nomes Alternativos"
+
+#: usr/local/www/system_certmanager.php:1109
+#: usr/local/www/system_certmanager.php:1112
+#: usr/local/www/system_certmanager.php:1168
+#: usr/local/www/system_certmanager.php:1172
+msgid "export cert+key in .p12"
+msgstr "export cert+key in .p12"
+
+#: usr/local/www/diag_backup.php:192 usr/local/www/diag_backup.php:193
+msgid "RRD Data"
+msgstr "Dados RRD"
+
+#: usr/local/www/firewall_rules_edit.php:224
+#: usr/local/www/firewall_rules_edit.php:237
+#: usr/local/www/firewall_rules_edit.php:222
+#: usr/local/www/firewall_rules_edit.php:236
+#: usr/local/www/firewall_rules_edit.php:219
+#: usr/local/www/firewall_rules_edit.php:233
+#: usr/local/www/firewall_rules_edit.php:225
+#: usr/local/www/firewall_rules_edit.php:239
+msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6"
+msgstr "Você pode atribuir um gateway a regra que aplicar para IPv4 e IPv6"
+
+#: usr/local/www/firewall_rules_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:248
+#: usr/local/www/firewall_rules_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:251
+msgid "You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a rule that applies to IPv4 and IPv6"
+msgstr "Você não pode atribuir um protocolo diferente de ICMP, TCP, UDP ou TCP/UDP para uma regra que se aplica a IPv4 e IPv6"
+
+#: usr/local/www/firewall_rules_edit.php:253
+#: usr/local/www/firewall_rules_edit.php:252
+#: usr/local/www/firewall_rules_edit.php:249
+#: usr/local/www/firewall_rules_edit.php:255
+msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6"
+msgstr "Você não pode atribuir um tipo ICMP para uma regra que se aplica a IPv4 e IPV6"
+
+#: usr/local/www/firewall_rules_edit.php:416
+#: usr/local/www/firewall_rules_edit.php:415
+#: usr/local/www/firewall_rules_edit.php:418
+#: usr/local/www/firewall_rules_edit.php:424
+msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules."
+msgstr "Você não pode usar um endereço IPv4 ou IPv6 in regras combinando IPv4 + IPv6."
+
+#: usr/local/www/firewall_rules_edit.php:1285
+#: usr/local/www/firewall_rules_edit.php:1300
+#: usr/local/www/firewall_rules_edit.php:1307
+#: usr/local/www/firewall_rules_edit.php:1306
+#: usr/local/www/firewall_rules_edit.php:1354
+msgid "802.1p"
+msgstr "802.1p"
+
+#: usr/local/www/firewall_rules_edit.php:1308
+#: usr/local/www/firewall_rules_edit.php:1323
+#: usr/local/www/firewall_rules_edit.php:1330
+#: usr/local/www/firewall_rules_edit.php:1341
+#: usr/local/www/firewall_rules_edit.php:1389
+msgid "Choose 802.1p priority to match on"
+msgstr "Escolha a prioridade 802.1p para correspoder "
+
+#: usr/local/www/firewall_rules_edit.php:1312
+#: usr/local/www/firewall_rules_edit.php:1327
+#: usr/local/www/firewall_rules_edit.php:1334
+#: usr/local/www/firewall_rules_edit.php:1345
+#: usr/local/www/firewall_rules_edit.php:1393
+msgid "Choose 802.1p priority to apply"
+msgstr "Escolha a prioridade 802.1p para aplicar"
+
+#: usr/local/www/services_unbound.php:102
+#: usr/local/www/services_unbound_advanced.php:88
+msgid "DNS Resolver"
+msgstr "DNS Resolver"
+
+#: usr/local/www/services_unbound.php:129
+msgid "The configuration for the DNS Resolver, has been changed"
+msgstr "A configuração do DNS Rescolver foi modificada"
+
+#: usr/local/www/services_unbound.php:136
+#: usr/local/www/services_unbound_advanced.php:123
+msgid "General settings"
+msgstr "Configurações Gerais"
+
+# 75%
+#: usr/local/www/services_unbound.php:147
+msgid "General DNS Resolver Options"
+msgstr "Opções gerais do DNS Resolver"
+
+#: usr/local/www/services_unbound.php:153
+msgid "Enable DNS Resolver"
+msgstr "Habilitsar DNS Resolver"
+
+# 94%
+#: usr/local/www/services_unbound.php:157
+msgid "Network interfaces"
+msgstr "Interfaces de rede"
+
+#: usr/local/www/services_unbound.php:172
+msgid "The DNS Resolver Server will listen on the selected interfaces. To add an interface click inside the interface box and select the interface from the drop down."
+msgstr "O servidor DNS Resolver irá ouvir as interfaces selecionadas. Para adicionar uma interface, clique dentro da caixa de interface e selecione uma das opções."
+
+#: usr/local/www/services_unbound.php:177
+msgid "Outgoing interfaces"
+msgstr "Interfaces de saída"
+
+#: usr/local/www/services_unbound.php:192
+msgid "Utilize different network interface(s) that the DNS Resolver will use to send queries to authoritative servers and receive their replies. By default all interfaces are used."
+msgstr "Utilize interfaces de rede diferentes das que o DNS Resolver irá usar para enviar consultas a servidores autoritativos e receber respostas. Por padrão todas as interfaces são usadas."
+
+#: usr/local/www/services_unbound.php:197
+msgid "DNSSEC"
+msgstr "DNSSEC"
+
+#: usr/local/www/services_unbound.php:200
+msgid "Enable DNSSEC Support"
+msgstr "Habilitar suporte a DNSSEC"
+
+# 90%
+#: usr/local/www/services_unbound.php:204
+msgid "Forwarding"
+msgstr "Forwarding"
+
+#: usr/local/www/services_unbound.php:207
+msgid "Enable Forwarding Mode"
+msgstr "Habilitr modo Forwarding"
+
+#: usr/local/www/services_unbound.php:214
+msgid "Register DHCP leases in the DNS Resolver"
+msgstr "Registar DHCP leases no DNS Resolver"
+
+#: usr/local/www/services_unbound.php:215
+#, php-format
+msgid "If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered in the DNS Resolver, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value."
+msgstr "Se esta opções estiver definida, então máquinas que especificarem seu hostname quando requisitando um DHCP lease serão registradas no DNS Resolver, assim seus nomes podem ser resolvidos. Você deve também definir o domínio em %sSistema: Configurações Gerais%s para o valor adequado."
+
+# 77%
+#: usr/local/www/services_unbound.php:226
+msgid "Register DHCP static mappings in the DNS Resolver"
+msgstr "Registrar mapeamentos estáticos DHCP no DNS Resolver"
+
+#: usr/local/www/services_unbound.php:227
+#, php-format
+msgid "If this option is set, then DHCP static mappings will be registered in the DNS Resolver, so that their name can be resolved. You should also set the domain in %sSystem: General setup%s to the proper value."
+msgstr "Se esta opção estiver definida, então mapeamentos estáticos DHCP serão registrados no DNS Resolver, assim seus nomes pode ser resolvidos. Você deve também definir o domínio em %sSistema: Configurações Gerais%s para o valor próprio."
+
+#: usr/local/www/services_unbound.php:254
+#, php-format
+msgid "If the DNS Resolver is enabled, the DHCP service (if enabled) will automatically serve the LAN IP address as a DNS server to DHCP clients so they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver will use the DNS servers entered in %sSystem: General setup%s or those obtained via DHCP or PPP on WAN if the &quot;Allow DNS server list to be overridden by DHCP/PPP on WAN&quot; is checked."
+msgstr "Se o DNS Resolver estiver habilitado, o serviço DHCP (se habilitado) irá automaticamente forneceser o endereço IP da LAN como um servidor DNS para clientes DHCP, assim eles irão usar o DNS Resolver. Se o Forwarding estiver habilitado, o DNS Resolver irá usar o servidor DNS informado em %sSistema: Configurações Gerais%s ou aqueles obtidos bia DHCP ou PPP on WAN se a opção &quot;Permitir lista de servidores DNS ser sobrescrita pelo DHCP/PPP na WAN&quot; estiver habilitada."
+
+#: usr/local/www/services_unbound_advanced.php:116
+msgid "The configuration of the DNS Resolver, has been changed"
+msgstr "A configuração do DNS Resolver foi alterada"
+
+#: usr/local/www/services_unbound_advanced.php:134
+msgid "Advanced Resolver Options"
+msgstr "Opções Avançadas do Resolver"
+
+#: usr/local/www/services_unbound_advanced.php:137
+msgid "Hide Identity"
+msgstr "Esconder Identidade"
+
+#: usr/local/www/services_unbound_advanced.php:140
+msgid "If enabled, id.server and hostname.bind queries are refused."
+msgstr "Se habilitado, consultas id.server e hostname.bind são recusadas."
+
+#: usr/local/www/services_unbound_advanced.php:144
+msgid "Hide Version"
+msgstr "Esconder Versão"
+
+#: usr/local/www/services_unbound_advanced.php:147
+msgid "If enabled, version.server and version.bind queries are refused."
+msgstr "Se habilitada, consultas version.server e version.bind são recusadas."
+
+#: usr/local/www/services_unbound_advanced.php:151
+msgid "Prefetch Support"
+msgstr "Prefetch Support"
+
+#: usr/local/www/services_unbound_advanced.php:154
+msgid "Message cache elements are prefetched before they expire to help keep the cache up to date. When enabled, this option can cause an increase of around 10% more DNS traffic and load on the server, but frequently requested items will not expire from the cache."
+msgstr "Elementos de cache de mensagem são pré-carregados antes de expirarem para ajudar a manter o cache atualizado. Quando habilitada, esta opção pode causar um aumento em torno de 10% no tráfego DNS e carga do servidor, itens requisitados frequentemente não irão expirar a partir do cache."
+
+#: usr/local/www/services_unbound_advanced.php:158
+msgid "Prefetch DNS Key Support"
+msgstr "Suporte a Prefetch DNS Key"
+
+#: usr/local/www/services_unbound_advanced.php:161
+#, php-format
+msgid "DNSKEY's are fetched earlier in the validation process when a %sDelegation signer%s is encountered. This helps lower the latency of requests but does utilize a little more CPU."
+msgstr "DNS KEYs são obtidas anteriormente no processo de validação quando uma %sDelegation signer%s é encontrada. Isto ajuda a reduzir a latência das requisições, mas utiliza um pouco mais de CPU."
+
+#: usr/local/www/services_unbound_advanced.php:165
+msgid "Harden Glue"
+msgstr "Harden Glue"
+
+#: usr/local/www/services_unbound_advanced.php:168
+msgid "Only trust glue if it is within the servers authority."
+msgstr "Somente confiar \"glue\" se estiver dentro dos servidores autoritarios"
+
+#: usr/local/www/services_unbound_advanced.php:172
+msgid "Harden DNSSEC data"
+msgstr "Endurecer dados DNSSEC"
+
+#: usr/local/www/services_unbound_advanced.php:175
+msgid "DNSSEC data is required for trust-anchored zones. If such data is absent, the zone becomes bogus. If this is disabled and no DNSSEC data is received, then the zone is made insecure."
+msgstr "Dados de DNSSEC são requeridos para zonas \"trust-anchored\", Se algum dado estiver ausente, a zona se tornará falsa. Se isto estiver desabilitados ou nenhum dado DNSSEC é recebido, a zona ficará insegura."
+
+#: usr/local/www/services_unbound_advanced.php:179
+msgid "Message Cache Size"
+msgstr "Tamanho do Cache de Mensagem"
+
+#: usr/local/www/services_unbound_advanced.php:190
+msgid "Size of the message cache. The message cache stores DNS rcodes and validation statuses. The RRSet cache will automatically be set to twice this amount. The RRSet cache contains the actual RR data. The default is 4 megabytes."
+msgstr "Tamanho do cache de mensagem. O cache de mensagem armazena DNS rcodes e status de validação. O cache RRSet será automaticamente definido para duas vezes este montante. O cahce RRSet contém os dados RR reais. O padrão é 4 megabytes."
+
+#: usr/local/www/services_unbound_advanced.php:194
+msgid "Outgoing TCP Buffers"
+msgstr "Buffers TCP de Saída"
+
+#: usr/local/www/services_unbound_advanced.php:204
+msgid "The number of outgoing TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, to authoritative servers, are done."
+msgstr "O número de buffers TCP de saída a alocar por thread. O valor padrão é 10. Se 0 é selecionado, então nenhuma consulta TCP, para servidores autoritativos, é feita."
+
+#: usr/local/www/services_unbound_advanced.php:208
+msgid "Incoming TCP Buffers"
+msgstr "Buffers TCP de Entrada"
+
+#: usr/local/www/services_unbound_advanced.php:218
+msgid "The number of incoming TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, from clients, are accepted."
+msgstr "O número de buffers TCP de entrada a ser alocados por thread. O valor padrão é 10. Se 0 é selecionado, então nenhuma consulta TCP de clientes é aceita."
+
+#: usr/local/www/services_unbound_advanced.php:222
+msgid "EDNS Buffer Size"
+msgstr "Tamanho do Buffer EDNS"
+
+#: usr/local/www/services_unbound_advanced.php:229
+msgid "Number of bytes size to advertise as the EDNS reassembly buffer size. This is the value that is used in UDP datagrams sent to peers. RFC recommendation is 4096 (which is the default). If you have fragmentation reassemble problems, usually seen as timeouts, then a value of 1480 should help. The 512 value bypasses most MTU path problems, but it can generate an excessive amount of TCP fallback."
+msgstr "Número de bytes de tamanho para anunciar como o tamanho do buffer de remontagem do EDNS. Este é o valor usado em datagramas UDP enviados a outros pares. A recomendação da RFC é 4096 (que é o padrão), o qual é o valor padrão. Se você tem problemas com remontagem de fragmentos, normalmente visto como timeouts, então um valor de 1480 deve ajudar. O valor 512 contorna a maioria dos problemas de caminho com MTU, mas pode gerar um montante excessivo de TCP fallback."
+
+#: usr/local/www/services_unbound_advanced.php:233
+msgid "Number of queries per thread"
+msgstr "Número de consultas por thread"
+
+#: usr/local/www/services_unbound_advanced.php:240
+msgid "The number of queries that every thread will service simultaneously. If more queries arrive that need to be serviced, and no queries can be jostled, then these queries are dropped."
+msgstr "O número de consultas que toda thread irá fornecer simultaneamente. Se mais consultas chegarem, e mais nenhuma puder ser atendida, então elas serão excluídas."
+
+#: usr/local/www/services_unbound_advanced.php:244
+msgid "Jostle Timeout"
+msgstr "Jostle Timeout"
+
+#: usr/local/www/services_unbound_advanced.php:252
+msgid "This timeout is used for when the server is very busy. This protects against denial of service by slow queries or high query rates. The default value is 200 milliseconds."
+msgstr "Este timeout é usado quando o servidor está sobrecarregado. Isto protege contra negação de serviço por consultas lentas ou altas taxas de consultas. O padrão é 200 milisegundos."
+
+#: usr/local/www/services_unbound_advanced.php:256
+msgid "Maximum TTL for RRsets and messages"
+msgstr "TTL Máximo para RRsets e mensagens"
+
+#: usr/local/www/services_unbound_advanced.php:259
+msgid "Configure a maximum Time to live for RRsets and messages in the cache. The default is 86400 seconds (1 day). When the internal TTL expires the cache item is expired. This can be configured to force the resolver to query for data more often and not trust (very large) TTL values."
+msgstr "Configura um Time To Live máximo para RRsets e mensagens em cache. O padrão é 86400 segundos (1 dia). Quando o TTL interno expira, o item de cache é expirado. Isto pode ser configurado para forçar o resolver a consultar dados mais frequentemente e não confiar em valores TTL (muito grandes)."
+
+#: usr/local/www/services_unbound_advanced.php:263
+msgid "Minimum TTL for RRsets and messages"
+msgstr "TTL Mínimo para RRsets e mensagens"
+
+#: usr/local/www/services_unbound_advanced.php:266
+msgid "Configure a minimum Time to live for RRsets and messages in the cache. The default is 0 seconds. If the minimum value kicks in, the data is cached for longer than the domain owner intended, and thus less queries are made to look up the data. The 0 value ensures the data in the cache is as the domain owner intended. High values can lead to trouble as the data in the cache might not match up with the actual data anymore."
+msgstr "Configura um TTL mínimo para RRsets e mensagens no cache. O padrão é 0 segundos. Se o valor mínimo entra em ação, os dados são cacheados por mais tempo que o dono do domínio pretendia e, assim, menos consultas são feitas para buscar dados. O valor 0 garante que os dados em cache está como o dono do domínio pretendia. Valores altos podem levar a problemas já que os dados no cache podem nao mais corresponder com os dados reais."
+
+#: usr/local/www/services_unbound_advanced.php:270
+msgid "TTL for Host cache entries"
+msgstr "TTL para entradas de Hosts no cache"
+
+#: usr/local/www/services_unbound_advanced.php:279
+msgid "Time to live for entries in the host cache. The host cache contains roundtrip timing and EDNS support information. The default is 15 minutes."
+msgstr "Tempo de vida para entradas no cache de host. O cache de host contém o tempo de viagem e informação de suporte EDNS. O padrão é 15 minutos."
+
+#: usr/local/www/services_unbound_advanced.php:283
+msgid "TTL for lame delegation"
+msgstr "TTL para lame delegation"
+
+#: usr/local/www/services_unbound_advanced.php:292
+msgid "Time to live for when a delegation is considered to be lame. The default is 15 minutes."
+msgstr "Tempo de vida para quando a delegação for considerada imperfeita. O padrão é 15 minutos."
+
+#: usr/local/www/services_unbound_advanced.php:296
+msgid "Number of Hosts to cache"
+msgstr "Número de hosts no cache"
+
+#: usr/local/www/services_unbound_advanced.php:305
+msgid "Number of hosts for which information is cached. The default is 10,000."
+msgstr "Número de hosts para os quais as informacões são cacheadas. O padrão é 10.000."
+
+#: usr/local/www/services_unbound_advanced.php:309
+msgid "Unwanted Reply Threshold"
+msgstr "Limite de respostas indesejadas"
+
+#: usr/local/www/services_unbound_advanced.php:319
+msgid "If enabled, a total number of unwanted replies is kept track of in every thread. When it reaches the threshold, a defensive action is taken and a warning is printed to the log file. This defensive action is to clear the RRSet and message caches, hopefully flushing away any poison. The default is disabled, but if enabled a a value of 10 million is suggested."
+msgstr "Se habilitado, um número total de respostas indesejadas são rastreadas em toda thread. Quando o limite é alcançado, uma ação defensiva é tomada en um aviso é impresso no arquivo de log. Esta ação defensiva é para limpar os caches de mensagem e RRset, esperando limpar qualquer envenenamento."
+
+#: usr/local/www/services_unbound_advanced.php:323
+msgid "Log level verbosity"
+msgstr "Log level verbosity"
+
+#: usr/local/www/services_unbound_advanced.php:333
+msgid "Select the log verbosity."
+msgstr "Select the log verbosity."
+
+# 92%
+#: usr/local/www/system_advanced_firewall.php:80
+#: usr/local/www/system_advanced_firewall.php:91
+#: usr/local/www/system_advanced_firewall.php:96
+msgid "The Firewall Maximum Tables value must be an integer."
+msgstr "O valor de Máximo de Tabelas de Firewall deve ser um inteiro."
+
+# 82%
+#: usr/local/www/system_advanced_firewall.php:326
+#: usr/local/www/system_advanced_firewall.php:370
+#: usr/local/www/system_advanced_firewall.php:371
+#: usr/local/www/system_advanced_firewall.php:382
+msgid "Firewall Maximum Tables"
+msgstr "Máximo de Tabelas de Firewall"
+
+#: usr/local/www/system_advanced_firewall.php:330
+#: usr/local/www/system_advanced_firewall.php:374
+#: usr/local/www/system_advanced_firewall.php:375
+#: usr/local/www/system_advanced_firewall.php:386
+msgid "Maximum number of tables for systems such as aliases, sshlockout, snort, etc, combined."
+msgstr "Número máximo de tables para sistemas como aliases, sshlockout, snort, etc, combinados."
+
+#: usr/local/www/system_advanced_firewall.php:331
+#: usr/local/www/system_advanced_firewall.php:375
+#: usr/local/www/system_advanced_firewall.php:376
+#: usr/local/www/system_advanced_firewall.php:387
+msgid "This is the actual number of tables, not the number of entries inside the tables (see below)"
+msgstr "Este é o número real de tabelas, não o número de entradas dentro das tabelas (veja abaixo)"
+
+#: usr/local/www/system_advanced_firewall.php:393
+#: usr/local/www/system_advanced_firewall.php:437
+#: usr/local/www/system_advanced_firewall.php:438
+#: usr/local/www/system_advanced_firewall.php:449
+msgid "Disable Negate rule on policy routing rules"
+msgstr "Desabilitar regra de negação nas regras de política de roteamento"
+
+#: usr/local/www/system_advanced_firewall.php:395
+#: usr/local/www/system_advanced_firewall.php:439
+#: usr/local/www/system_advanced_firewall.php:440
+#: usr/local/www/system_advanced_firewall.php:451
+msgid "With Multi-WAN you generally want to ensure traffic reaches directly connected networks and VPN networks when using policy routing. You can disable this for special purposes but it requires manually creating rules for these networks"
+msgstr "Com Multi-WAN você geralmente quer garantir que o tráfego chegue as redes conectadas e redes VPN quando usando política de roteamento. Você pode desabilitar isto para propósitos especiais, mas isto requeter criar regras manualmente para estas redes"
+
+#: usr/local/www/system_advanced_firewall.php:407
+#: usr/local/www/system_advanced_firewall.php:469
+#: usr/local/www/system_advanced_firewall.php:470
+#: usr/local/www/system_advanced_firewall.php:491
+msgid "NAT Reflection mode for port forwards"
+msgstr "Modo NAT Reflection para redirecionamento de portas"
+
+#: usr/local/www/system_advanced_firewall.php:411
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_nat_edit.php:788
+#: usr/local/www/system_advanced_firewall.php:473
+#: usr/local/www/firewall_nat_edit.php:800
+#: usr/local/www/system_advanced_firewall.php:474
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/system_advanced_firewall.php:495
+msgid "Enable (NAT + Proxy)"
+msgstr "Habilitar (NAT + Proxy)"
+
+#: usr/local/www/system_advanced_firewall.php:412
+#: usr/local/www/firewall_nat_edit.php:795
+#: usr/local/www/firewall_nat_edit.php:794
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/system_advanced_firewall.php:474
+#: usr/local/www/firewall_nat_edit.php:801
+#: usr/local/www/system_advanced_firewall.php:475
+#: usr/local/www/firewall_nat_edit.php:802
+#: usr/local/www/system_advanced_firewall.php:496
+msgid "Enable (Pure NAT)"
+msgstr "Habilitar (NAT Puro)"
+
+#: usr/local/www/system_advanced_firewall.php:415
+#: usr/local/www/system_advanced_firewall.php:477
+#: usr/local/www/system_advanced_firewall.php:478
+#: usr/local/www/system_advanced_firewall.php:499
+msgid "When enabled, this automatically creates additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks."
+msgstr "Quando habilitado, isto automaticamente cria regras NAT de redirecionamento adicionais para acessar redirecionamento de portas no seu endereço IP externo de dentro de sua rede interna."
+
+#: usr/local/www/system_advanced_firewall.php:417
+#: usr/local/www/system_advanced_firewall.php:479
+#: usr/local/www/system_advanced_firewall.php:480
+#: usr/local/www/system_advanced_firewall.php:501
+msgid "The NAT + proxy mode uses a helper program to send packets to the target of the port forward. It is useful in setups where the interface and/or gateway IP used for communication with the target cannot be accurately determined at the time the rules are loaded. Reflection rules are not created for ranges larger than 500 ports and will not be used for more than 1000 ports total between all port forwards. Only TCP and UDP protocols are supported."
+msgstr "O modo NAT + Proxy usa um programa auxiliar para enviar pacotes para o alvo do redirecionamento de porta. Isto é útil em setups onde a interface e/ou IP do gateway usados para comunicação com o alvo não podem ser precisamente determinados no momento que as regras são carregadas. Regras de Reflexão não são criadas para ranges maiores que 500 portas e não serão usados por mais que o total de 1000 portas entre todos os redirecionamentos de portas. Apenas protocolos TCP e UDP são suportados."
+
+#: usr/local/www/system_advanced_firewall.php:419
+#: usr/local/www/system_advanced_firewall.php:481
+#: usr/local/www/system_advanced_firewall.php:482
+#: usr/local/www/system_advanced_firewall.php:503
+msgid "The pure NAT mode uses a set of NAT rules to direct packets to the target of the port forward. It has better scalability, but it must be possible to accurately determine the interface and gateway IP used for communication with the target at the time the rules are loaded. There are no inherent limits to the number of ports other than the limits of the protocols. All protocols available for port forwards are supported."
+msgstr "O modo NAT puro usa um conjunto de regras NAT para direcionar pacotes para o alvo do redirecionamento de porta. Ele tem melhor escalabilidade, masdeve ser possível determinar com precisão a interface e IP do gateway usado para comunicação com o alvo quando as regras são carregadas. Não há limites inerente ao número de portas que não sejam os limites dos protocolos. Todos os disponíveis para redirecionamento de portas são suportados."
+
+#: usr/local/www/system_advanced_firewall.php:421
+#: usr/local/www/system_advanced_firewall.php:441
+#: usr/local/www/system_advanced_firewall.php:483
+#: usr/local/www/system_advanced_firewall.php:503
+#: usr/local/www/system_advanced_firewall.php:484
+#: usr/local/www/system_advanced_firewall.php:504
+#: usr/local/www/system_advanced_firewall.php:505
+#: usr/local/www/system_advanced_firewall.php:525
+msgid "Individual rules may be configured to override this system setting on a per-rule basis."
+msgstr "Regras individuais devem ser configuradas para "
+
+#: usr/local/www/system_advanced_firewall.php:428
+#: usr/local/www/system_advanced_firewall.php:490
+#: usr/local/www/system_advanced_firewall.php:491
+#: usr/local/www/system_advanced_firewall.php:512
+msgid "Enter value for Reflection timeout in seconds."
+msgstr "Entre com um valor de tempo de vida de Reflexão em segundos"
+
+#: usr/local/www/system_advanced_firewall.php:430
+#: usr/local/www/system_advanced_firewall.php:492
+#: usr/local/www/system_advanced_firewall.php:493
+#: usr/local/www/system_advanced_firewall.php:514
+msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode."
+msgstr "Nota: Somente é aplicado a Reflexão em portas redirecionadas em NAT + modo proxy."
+
+# 91%
+#: usr/local/www/system_advanced_firewall.php:434
+#: usr/local/www/system_advanced_firewall.php:496
+#: usr/local/www/system_advanced_firewall.php:497
+#: usr/local/www/system_advanced_firewall.php:518
+msgid "Enable NAT Reflection for 1:1 NAT"
+msgstr "Habilitar NAT Reflection para 1:1 NAT"
+
+#: usr/local/www/system_advanced_firewall.php:437
+#: usr/local/www/system_advanced_firewall.php:499
+#: usr/local/www/system_advanced_firewall.php:500
+#: usr/local/www/system_advanced_firewall.php:521
+msgid "Enables the automatic creation of additional NAT redirect rules for access to 1:1 mappings of your external IP addresses from within your internal networks."
+msgstr "Habilita a criação automatica de regras adcionais de redirecionamento do NAT para acesso a mapeamento 1:1 do seu endereço de IP externo de dentro de suas redes internas."
+
+#: usr/local/www/system_advanced_firewall.php:439
+#: usr/local/www/system_advanced_firewall.php:501
+#: usr/local/www/system_advanced_firewall.php:502
+#: usr/local/www/system_advanced_firewall.php:523
+msgid "Note: Reflection on 1:1 mappings is only for the inbound component of the 1:1 mappings. This functions the same as the pure NAT mode for port forwards. For more details, refer to the pure NAT mode description above."
+msgstr "Nota: Reflexão em mapeamento 1:1 é somente para componentes de entrada de mapeamentos 1:1. Estas funções são as mesmas de um modo puro NAT de redirecionamento de porta. Para mais detalhes, veja a descrição acima sobre modo puro NAT."
+
+#: usr/local/www/system_advanced_firewall.php:445
+#: usr/local/www/system_advanced_firewall.php:507
+#: usr/local/www/system_advanced_firewall.php:508
+#: usr/local/www/system_advanced_firewall.php:529
+msgid "Enable automatic outbound NAT for Reflection"
+msgstr "Habilita a saída de NAT automatica para Reflexão"
+
+#: usr/local/www/system_advanced_firewall.php:450
+#: usr/local/www/system_advanced_firewall.php:512
+#: usr/local/www/system_advanced_firewall.php:513
+#: usr/local/www/system_advanced_firewall.php:534
+msgid "Required for full functionality of the pure NAT mode of NAT Reflection for port forwards or NAT Reflection for 1:1 NAT."
+msgstr "Requerido para funcionalidade completa do modo puro NAT de uma Reflexão de NAT para portas redirecionadas ou Reflexão de NAT para NAT 1:1."
+
+#: usr/local/www/system_advanced_firewall.php:452
+#: usr/local/www/system_advanced_firewall.php:514
+#: usr/local/www/system_advanced_firewall.php:515
+#: usr/local/www/system_advanced_firewall.php:536
+msgid "Note: This only works for assigned interfaces. Other interfaces require manually creating the outbound NAT rules that direct the reply packets back through the router."
+msgstr "Nota: Isto somente trabalha para interfaces atribuidas. Outras interfaces requerem a criação manual de regras de NAT de saída para regras que direcionam a respostas de pacotes através do roteador."
+
+# 91%
+#: usr/local/www/diag_logs_ntpd.php:85 usr/local/www/diag_logs_ntpd.php:86
+#, php-format
+msgid "Last %s NTP log entries"
+msgstr "Últimas %s entradas de log NTP"
+
+#: usr/local/www/firewall_aliases_edit.php:468
+#: usr/local/www/firewall_aliases_edit.php:470
+#: usr/local/www/firewall_aliases_edit.php:492
+#: usr/local/www/firewall_aliases_edit.php:491
+msgid "Enter as many hosts as you would like. Hosts must be specified by their IP address or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used."
+msgstr "Entre com tantos hosts como você gostaria. Hosts deve ser especificado pelo seu endereço IP ou nome de domínio totalmente qualificado FQDN. Nomes de host FQDN são periodicamente re-resolvido e atualizado. Se vários IPs são retornados por uma consulta DNS, todos são usados."
+
+# 77%
+#: usr/local/www/firewall_aliases_edit.php:590
+#: usr/local/www/firewall_aliases_edit.php:593
+#: usr/local/www/firewall_aliases_edit.php:624
+#: usr/local/www/firewall_aliases_edit.php:623
+msgid "The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"."
+msgstr "O nome do alias somente deve consistir dos caracteres de \"a-z, A-Z, 0-9 e _\""
+
+# 93%
+#: usr/local/www/system_advanced_admin.php:470
+#: usr/local/www/system_advanced_admin.php:507
+msgid "Disable password login for Secure Shell (RSA/DSA key only)"
+msgstr "Desabilitar login com senha para Secure Shell (somente chave RSA/DSA)"
+
+#: usr/local/www/pkg_mgr_installed.php:113 usr/local/www/diag_confbak.php:154
+#: usr/local/www/pkg_mgr_installed.php:115
+msgid "Version"
+msgstr "Versão"
+
+#: usr/local/www/pkg_mgr_installed.php:197
+#: usr/local/www/pkg_mgr_installed.php:199
+msgid "Click on "
+msgstr "Clique em"
+
+# 85%
+#: usr/local/www/pkg_mgr_installed.php:205
+#: usr/local/www/pkg_mgr_installed.php:208
+#: usr/local/www/pkg_mgr_installed.php:210
+msgid "Remove "
+msgstr "Remove"
+
+# 90%
+#: usr/local/www/pkg_mgr_installed.php:209
+#: usr/local/www/pkg_mgr_installed.php:212
+#: usr/local/www/pkg_mgr_installed.php:215
+#: usr/local/www/pkg_mgr_installed.php:214
+#: usr/local/www/pkg_mgr_installed.php:217
+msgid "Reinstall "
+msgstr "Reinstalar"
+
+#: usr/local/www/system_advanced_notifications.php:262
+#: usr/local/www/system_advanced_notifications.php:309
+msgid "System Sounds"
+msgstr "Sons do Sistema"
+
+#: usr/local/www/system_advanced_notifications.php:265
+#: usr/local/www/system_advanced_notifications.php:312
+msgid "Startup/Shutdown Sound"
+msgstr "Som de Inicio/Desligamento"
+
+#: usr/local/www/system_advanced_notifications.php:268
+#: usr/local/www/system_advanced_notifications.php:315
+msgid "Disable the startup/shutdown beep"
+msgstr "Desabilita o beep de inicialização/desligamento"
+
+#: usr/local/www/system_advanced_notifications.php:270
+#: usr/local/www/system_advanced_notifications.php:317
+msgid "When this is checked, startup and shutdown sounds will no longer play."
+msgstr "Quando isto esta marcado, os sons de inicialização e desligamento não vão mais tocar."
+
+#: usr/local/www/status_rrd_graph.php:146
+#: usr/local/www/status_rrd_graph.php:151
+msgid "Invalid start date/time:"
+msgstr "Data/hora inicial inválida:"
+
+#: usr/local/www/status_rrd_graph.php:159
+#: usr/local/www/status_rrd_graph.php:164
+msgid "Invalid end date/time:"
+msgstr "Data/hora final inválida:"
+
+#: usr/local/www/status_rrd_graph.php:509
+#: usr/local/www/status_rrd_graph.php:544
+msgid "Enter date and/or time. Current timezone:"
+msgstr "Entre com data e/ou hora. Fuso horario atual:"
+
+#: usr/local/www/status_ntpd.php:109 usr/local/www/status_ntpd.php:125
+#: usr/local/www/status_ntpd.php:131
+msgid "Ref ID"
+msgstr "ID de Ref."
+
+#: usr/local/www/status_ntpd.php:110 usr/local/www/status_ntpd.php:126
+#: usr/local/www/status_ntpd.php:132
+msgid "Stratum"
+msgstr "Stratum"
+
+#: usr/local/www/status_ntpd.php:112 usr/local/www/status_ntpd.php:128
+#: usr/local/www/status_ntpd.php:134
+msgid "When"
+msgstr "Quando"
+
+# 75%
+#: usr/local/www/status_ntpd.php:113 usr/local/www/status_ntpd.php:129
+#: usr/local/www/status_ntpd.php:135
+msgid "Poll"
+msgstr "Votação"
+
+#: usr/local/www/status_ntpd.php:114 usr/local/www/status_ntpd.php:130
+#: usr/local/www/status_ntpd.php:136
+msgid "Reach"
+msgstr "Alcance"
+
+#: usr/local/www/status_ntpd.php:116 usr/local/www/status_ntpd.php:132
+#: usr/local/www/status_ntpd.php:138
+msgid "Offset"
+msgstr "Compensação"
+
+#: usr/local/www/status_ntpd.php:117 usr/local/www/status_ntpd.php:133
+#: usr/local/www/status_ntpd.php:139
+msgid "Jitter"
+msgstr "Jitter"
+
+#: usr/local/www/firewall_rules.php:790 usr/local/www/firewall_rules.php:783
+#: usr/local/www/firewall_rules.php:784
+msgid "No floating rules are currently defined."
+msgstr "Nenhuma regra flutuante foi definida."
+
+#: usr/local/www/system_advanced_misc.php:297
+#: usr/local/www/system_advanced_misc.php:316
+#: usr/local/www/system_advanced_misc.php:320
+#: usr/local/www/system_advanced_misc.php:367
+#: usr/local/www/system_advanced_misc.php:373
+msgid "Successive connections will be redirected to the servers in a round-robin manner with connections from the same source being sent to the same web server. This 'sticky connection' will exist as long as there are states that refer to this connection. Once the states expire, so will the sticky connection. Further connections from that host will be redirected to the next web server in the round robin. Changing this option will restart the Load Balancing service."
+msgstr "Conexões sucessivas serão redirecionadas para os servidores de um modo round-robin com conexões a partir da mesma fonte que está sendo enviado para o mesmo servidor web. Esta \"sticky connection\" vai existir enquanto há estados que se referem a esta conexão. Uma vez que os estados expirar, assim que a conexão pegajosa. Outras conexões do que o anfitrião será redirecionado para o próximo servidor web no round robin. Mudando esta opção irá reiniciar o serviço de balanceamento de carga."
+
+#: usr/local/www/system_advanced_misc.php:308
+#: usr/local/www/system_advanced_misc.php:327
+#: usr/local/www/system_advanced_misc.php:331
+#: usr/local/www/system_advanced_misc.php:378
+#: usr/local/www/system_advanced_misc.php:384
+msgid "Set the source tracking timeout for sticky connections. By default this is 0, so source tracking is removed as soon as the state expires. Setting this timeout higher will cause the source/destination relationship to persist for longer periods of time."
+msgstr "Defina o tempo limite de rastreamento de origem para conexões pegajosos. Por padrão é 0, portanto, rastreamento de origem é removida assim que o estado expira. Definir o tempo limite superior fará com que o relacionamento origem/destino de persistir por longos períodos de tempo."
+
+#: usr/local/www/system_advanced_misc.php:336
+#: usr/local/www/system_advanced_misc.php:355
+#: usr/local/www/system_advanced_misc.php:359
+#: usr/local/www/system_advanced_misc.php:367
+#: usr/local/www/system_advanced_misc.php:406
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:412
+#: usr/local/www/system_advanced_misc.php:420
+msgid "Hiadaptive"
+msgstr "Hiadaptive"
+
+#: usr/local/www/system_advanced_misc.php:337
+#: usr/local/www/system_advanced_misc.php:356
+#: usr/local/www/system_advanced_misc.php:360
+#: usr/local/www/system_advanced_misc.php:368
+#: usr/local/www/system_advanced_misc.php:407
+#: usr/local/www/system_advanced_misc.php:415
+#: usr/local/www/system_advanced_misc.php:413
+#: usr/local/www/system_advanced_misc.php:421
+msgid "Adaptive"
+msgstr "Adaptável"
+
+#: usr/local/www/system_advanced_misc.php:338
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:369
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:416
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:422
+msgid "Minimum"
+msgstr "Mínimo"
+
+#: usr/local/www/system_advanced_misc.php:339
+#: usr/local/www/system_advanced_misc.php:358
+#: usr/local/www/system_advanced_misc.php:362
+#: usr/local/www/system_advanced_misc.php:370
+#: usr/local/www/system_advanced_misc.php:409
+#: usr/local/www/system_advanced_misc.php:417
+#: usr/local/www/system_advanced_misc.php:415
+#: usr/local/www/system_advanced_misc.php:423
+msgid "Maximum"
+msgstr "Máximo"
+
+#: usr/local/www/system_advanced_misc.php:342
+#: usr/local/www/system_advanced_misc.php:361
+#: usr/local/www/system_advanced_misc.php:373
+#: usr/local/www/system_advanced_misc.php:420
+msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers four modes (maximum, minimum, adaptive and hiadaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, min, adp, hadp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly increased power savings. Hiadaptive mode is alike adaptive mode, but tuned for systems where performance and interactivity are more importantthan power consumption. It rises frequency faster, drops slower andkeeps twice lower CPU load."
+msgstr "O utilitário powerd monitora o estado do sistema e define várias opções de controle de energia em conformidade. Ele oferece quatro modos (máximo, mínimo, adaptativas e hiadaptive) que podem ser selecionados individualmente durante a alimentação por AC ou baterias. Os modos de máximo, mínimo, adaptativos e hiadaptive pode ser abreviado max, min, adp, hadp. Modo máxima escolhe os mais altos valores de desempenho. Modo mínima seleciona os valores mais baixos de desempenho para obter o máximo de poupança de energia. O modo adaptativo tenta encontrar um equilíbrio, degradando o desempenho quando o sistema parece ocioso e aumentando-a quando o sistema está ocupado. Ele oferece um bom equilíbrio entre uma pequena perda de desempenho para um grande aumento de economia de energia. Hiadaptive modo é o modo adaptativo iguais, mas atento para sistemas onde o desempenho ea interatividade são o consumo de energia mais importantthan. Levanta-se freqüência mais rápido, cai andkeeps mais lentas de carga duas vezes menor CPU."
+
+#: usr/local/www/firewall_shaper_vinterface.php:204
+#: usr/local/www/firewall_shaper_vinterface.php:228
+#: usr/local/www/firewall_shaper_vinterface.php:205
+#: usr/local/www/firewall_shaper_vinterface.php:230
+msgid "You cannot name a child queue with the same name as a parent limiter"
+msgstr "Você não pode nomear uma fila filho com o mesmo nome do limitador parente."
+
+#: usr/local/www/diag_routes.php:72 usr/local/www/diag_routes.php:73
+msgid "By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser."
+msgstr "Habilitando a resolução de nome, a requisição deve demorar um pouco mais. Você pode parar isso a qualquer momento clicando no botão \"Parar\" no seu navegador."
+
+#: usr/local/www/status_dhcpv6_leases.php:481
+#: usr/local/www/status_dhcpv6_leases.php:482
+#: usr/local/www/status_dhcpv6_leases.php:485
+msgid "IPv6 Prefix"
+msgstr "Prefixo IPv6"
+
+#: usr/local/www/services_captiveportal.php:465
+#: usr/local/www/services_captiveportal.php:463
+#: usr/local/www/services_captiveportal.php:481
+msgid "This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in to the captive portal, but rather how many users can load the portal page or authenticate at the same time! Possible setting allowed is: minimum 4 connections per client IP address, with a total maximum of 100 connections."
+msgstr "Esta configuração limita o número de conexões simultâneas ao HTTP portal cativo (S) do servidor. Isso não define quantos usuários podem ser registradas no portal cativo, mas sim quantos usuários podem carregar a página do portal ou autenticar ao mesmo tempo! Regulação possível permitido é: 4 conexões mínimos por endereço IP do cliente, com um total máximo de 100 conexões."
+
+#: usr/local/www/services_captiveportal.php:602
+#: usr/local/www/services_captiveportal.php:600
+#: usr/local/www/services_captiveportal.php:601
+#: usr/local/www/services_captiveportal.php:617
+msgid "RADIUS Protocol"
+msgstr "Protocolo Radius"
+
+#: usr/local/www/services_captiveportal.php:611
+#: usr/local/www/services_captiveportal.php:609
+#: usr/local/www/services_captiveportal.php:610
+#: usr/local/www/services_captiveportal.php:626
+msgid "CHAP_MD5"
+msgstr "CHAP_MD5"
+
+#: usr/local/www/services_captiveportal.php:615
+#: usr/local/www/services_captiveportal.php:613
+#: usr/local/www/services_captiveportal.php:614
+#: usr/local/www/services_captiveportal.php:630
+msgid "MSCHAPv1"
+msgstr "MSCHAPv1"
+
+#: usr/local/www/services_captiveportal.php:619
+#: usr/local/www/services_captiveportal.php:617
+#: usr/local/www/services_captiveportal.php:618
+#: usr/local/www/services_captiveportal.php:634
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: usr/local/www/system_gateways_edit.php:389
+#: usr/local/www/system_gateways_edit.php:495
+#: usr/local/www/system_gateways_edit.php:497
+#: usr/local/www/system_gateways_edit.php:527
+msgid "Choose the Internet Protocol this gateway uses."
+msgstr "Escolha o protocolo de Internet que o gateway usa."
+
+#: usr/local/www/system_gateways_edit.php:490
+msgid "This defines how often that an icmp probe will be sent in seconds. Default is 1."
+msgstr "Isto define quantas vezes a consulta icmp vai ser enviada em segundos. O padrão é 1."
+
+#: usr/local/www/system_gateways_edit.php:491
+#: usr/local/www/system_gateways_edit.php:597
+#: usr/local/www/system_gateways_edit.php:601
+#: usr/local/www/system_gateways_edit.php:603
+#: usr/local/www/system_gateways_edit.php:633
+msgid "NOTE: The quality graph is averaged over seconds, not intervals, so as the frequency probe is increased the accuracy of the quality graph is decreased."
+msgstr "NOTA: A gráfico de qualidade é uma média sobre segundos, não intervalos. assim como a consulta de frequencia é aumentada o gráfico de qualidade é diminuida."
+
+#: usr/local/www/system_gateways_edit.php:500
+msgid "This defines the number of bad probes before the alarm will fire. Default is 10."
+msgstr "Isto define o número de consultas ruins para o alarme ser acionado. O padrão é 10."
+
+#: usr/local/www/system_gateways_edit.php:505
+msgid "NOTE: The total time before a gateway is down is the product of the Frequency Probe and the Down fields. By default this is 1*10=10 seconds."
+msgstr "NOTA: O total de tempo antes de um gateway cair é o produto da frequencia de consultas e de quedas. Por padrão isso é 1*10=10 segundos."
+
+#: usr/local/www/status_gateways.php:100 usr/local/www/status_gateways.php:108
+#: usr/local/www/status_gateways.php:134
+#: usr/local/www/widgets/widgets/gateways.widget.php:73
+#: usr/local/www/widgets/widgets/gateways.widget.php:81
+#: usr/local/www/status_gateways.php:101 usr/local/www/status_gateways.php:109
+#: usr/local/www/status_gateways.php:135
+#: usr/local/www/widgets/widgets/gateways.widget.php:94
+#: usr/local/www/widgets/widgets/gateways.widget.php:103
+#: usr/local/www/widgets/widgets/gateways.widget.php:95
+#: usr/local/www/widgets/widgets/gateways.widget.php:104
+msgid "Pending"
+msgstr "Pendente"
+
+# 76%
+#: usr/local/www/status_gateways.php:140 usr/local/www/status_gateways.php:141
+msgid "Last check:"
+msgstr "Última checagem:"
+
+# 95%
+#: usr/local/www/diag_dump_states.php:145
+#: usr/local/www/diag_dump_states.php:144
+msgid "Current state count"
+msgstr "Contagem de estado atual:"
+
+#: usr/local/www/diag_dump_states.php:147
+#: usr/local/www/diag_dump_states.php:146
+msgid "Matching filter"
+msgstr "Correspondência de filtro"
+
+#: usr/local/www/diag_dump_states.php:155
+#: usr/local/www/diag_dump_states.php:154
+#: usr/local/www/diag_dump_states.php:143
+msgid "Kill"
+msgstr "Matar"
+
+#: usr/local/www/services_dyndns.php:184 usr/local/www/services_dyndns.php:180
+#: usr/local/www/services_dyndns.php:191
+msgid "You can force an update for an IP address on the edit page for that service."
+msgstr "Você pode forçar uma atualização do endereço de IP editando na página para este serviço."
+
+#: usr/local/www/vpn_openvpn_server.php:299
+#: usr/local/www/vpn_openvpn_server.php:300
+#: usr/local/www/vpn_openvpn_server.php:321
+msgid "Using a tunnel network and server bridge settings together is not allowed."
+msgstr "Usando uma rede de túnel e as configurações do servidor bridge juntos não é permitido."
+
+#: usr/local/www/vpn_openvpn_server.php:302
+#: usr/local/www/vpn_openvpn_server.php:303
+#: usr/local/www/vpn_openvpn_server.php:324
+msgid "Server Bridge DHCP Start and End must both be empty, or defined."
+msgstr "Inicio e fim do servidor DHCP bridge devem estar vazios ou definidos."
+
+#: usr/local/www/vpn_openvpn_server.php:304
+#: usr/local/www/vpn_openvpn_server.php:305
+#: usr/local/www/vpn_openvpn_server.php:326
+msgid "Server Bridge DHCP Start must be an IPv4 address."
+msgstr "Inicio do servidor bridge DHCP deve ser um endereço IPv4."
+
+#: usr/local/www/vpn_openvpn_server.php:306
+#: usr/local/www/vpn_openvpn_server.php:307
+#: usr/local/www/vpn_openvpn_server.php:328
+msgid "Server Bridge DHCP End must be an IPv4 address."
+msgstr "Final do servidor bridge DHCP deve ser um endereço IPv4."
+
+#: usr/local/www/vpn_openvpn_server.php:308
+#: usr/local/www/vpn_openvpn_server.php:309
+#: usr/local/www/vpn_openvpn_server.php:330
+msgid "The Server Bridge DHCP range is invalid (start higher than end)."
+msgstr "A faixa do Servidor Bridge DHCP é inválida (inicio é maior que o final)"
+
+#: usr/local/www/vpn_openvpn_server.php:1084
+#: usr/local/www/vpn_openvpn_server.php:1112
+#: usr/local/www/vpn_openvpn_server.php:1139
+msgid "Bridge DHCP"
+msgstr "Bridge DHCP"
+
+#: usr/local/www/vpn_openvpn_server.php:1094
+#: usr/local/www/vpn_openvpn_server.php:1122
+#: usr/local/www/vpn_openvpn_server.php:1149
+msgid "Allow clients on the bridge to obtain DHCP."
+msgstr "Permite ao clientes da bridge obterem DHCP."
+
+#: usr/local/www/vpn_openvpn_server.php:1102
+#: usr/local/www/vpn_openvpn_server.php:1130
+#: usr/local/www/vpn_openvpn_server.php:1157
+msgid "Bridge Interface"
+msgstr "Interface Bridge"
+
+#: usr/local/www/vpn_openvpn_server.php:1124
+msgid "The interface to which this tap instance will be, bridged. This is not done automatically. You must assign this interface and create the bridge separately. This setting controls which existing IP address and subnet mask are used by OpenVPN for the bridge. Setting this to 'none' will cause the Server Bridge DHCP settings below to be ignored."
+msgstr "A interface para que esta instância torneira será, em ponte. Isto não é feito automaticamente. Você deve atribuir essa interface e criar a ponte separadamente. Esta definição controla qual o endereço IP existente e máscara de subrede são usados ¿¿por OpenVPN para a ponte. A definição como 'none' fará com que as configurações do servidor DHCP Ponte abaixo para ser ignorado."
+
+#: usr/local/www/vpn_openvpn_server.php:1133
+#: usr/local/www/vpn_openvpn_server.php:1161
+#: usr/local/www/vpn_openvpn_server.php:1188
+msgid "Server Bridge DHCP Start"
+msgstr "Servidor Bridge DHCP Inicial"
+
+#: usr/local/www/vpn_openvpn_server.php:1137
+msgid "When using tap mode as multi-point server, you may optionally supply a DHCP range to use on the interface to which this tap instance is bridged. If these settings are left blank, DHCP will be passed through to the LAN, and the interface setting above will be ignored."
+msgstr "Ao usar o modo tap como servidor multi-ponto, você pode, opcionalmente, fornecer uma gama DHCP para usar na interface para que esta instância torneira está superado. Se essas configurações são deixadas em branco, DHCP será repassado para a LAN, ea interface de configuração acima serão ignorados."
+
+#: usr/local/www/vpn_openvpn_server.php:1146
+#: usr/local/www/vpn_openvpn_server.php:1174
+#: usr/local/www/vpn_openvpn_server.php:1201
+msgid "Server Bridge DHCP End"
+msgstr "Servidor Bridge DHCP Final"
+
+#: usr/local/www/services_dhcp.php:239 usr/local/www/services_dhcpv6.php:216
+#: usr/local/www/services_router_advertisements.php:159
+#: usr/local/www/services_dhcp.php:285 usr/local/www/services_dhcpv6.php:201
+#: usr/local/www/services_dhcp_edit.php:230
+#: usr/local/www/services_dhcp.php:266 usr/local/www/services_dhcpv6.php:195
+#: usr/local/www/services_router_advertisements.php:154
+#: usr/local/www/services_dhcp.php:286 usr/local/www/services_dhcp.php:287
+msgid "A valid domain search list must be specified."
+msgstr "Uma lista de pesquisa de domínio válido deve ser especificado."
+
+#: usr/local/www/services_dhcp.php:685 usr/local/www/services_dhcp.php:861
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcp.php:875 usr/local/www/services_dhcp.php:895
+msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as seperator "
+msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador"
+
+#: usr/local/www/services_dhcp.php:735 usr/local/www/services_dhcpv6.php:716
+#: usr/local/www/services_dhcp.php:916 usr/local/www/services_dhcpv6.php:647
+#: usr/local/www/services_dhcp.php:930 usr/local/www/services_dhcpv6.php:664
+#: usr/local/www/services_dhcp.php:950 usr/local/www/services_dhcp.php:962
+msgid "Time format change"
+msgstr "Alteração de formato de hora"
+
+#: usr/local/www/services_dhcp.php:744 usr/local/www/services_dhcp.php:925
+#: usr/local/www/services_dhcp.php:939 usr/local/www/services_dhcp.php:959
+#: usr/local/www/services_dhcp.php:971
+msgid "Change DHCP display lease time from UTC to local time."
+msgstr "Alterar tempo de concessão DHCP exibição de UTC para a hora local."
+
+#: usr/local/www/services_dhcp.php:751 usr/local/www/services_dhcp.php:932
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this \n"
+"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr ""
+"Por DHCP padrão arrendamentos são exibidas em tempo UTC. Ao marcar esta \n"
+"\t\t\t\t\t\tcaixa tempo de concessão DHCP será exibida no horário local e definir a zona de tempo selecionado. Isso será usado para todos os tempos interfaces de DHCP locação."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:92
+msgid "The port must be an integer between 1 and 65535, a port alias, or left blank."
+msgstr "A porta deve ser um inteiro entre 1 e 65535, um alias de porta ou deve estar em branco."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:95
+#, php-format
+msgid "%s is not a valid IP address, IPv4 subnet, or alias."
+msgstr "%s não é um endereço de IP válido, subrede IPv4 ou alias."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:97
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses."
+msgstr "%s é uma subrede contendo mais de 64 endereços IP"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:173
+#: usr/local/www/load_balancer_virtual_server_edit.php:171
+msgid "You may also specify a host alias listed in Firewall -&gt; Aliases here."
+msgstr "Você deve também especificar um alias de host listado no Firewall -&gt; Aliases aqui."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:187
+#: usr/local/www/load_balancer_virtual_server_edit.php:185
+msgid "If left blank, listening ports from the pool will be used."
+msgstr "Se deixar em branco, as portas escutadas do pool serão usadas."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:188
+#: usr/local/www/load_balancer_pool_edit.php:216
+#: usr/local/www/load_balancer_virtual_server_edit.php:186
+#: usr/local/www/load_balancer_pool_edit.php:214
+msgid "You may also specify a port alias listed in Firewall -&gt; Aliases here."
+msgstr "Você deve especificar um alias de porta listada no Firewall -&gt; Aliases aqui."
+
+#: usr/local/www/system_hasync.php:96 usr/local/www/system_hasync.php:97
+#: usr/local/www/system_hasync.php:98
+msgid "High Availability Sync"
+msgstr "Sincronização de Alta Disponibilidade"
+
+# 76%
+#: usr/local/www/services_ntpd.php:86 usr/local/www/services_ntpd.php:92
+msgid "NTP Server Configuration"
+msgstr "Configuração do servidor NTP"
+
+#: usr/local/www/interfaces_bridge_edit.php:391
+#: usr/local/www/interfaces_bridge_edit.php:392
+#: usr/local/www/interfaces_bridge_edit.php:393
+#: usr/local/www/interfaces_bridge_edit.php:396
+msgid "Set the Spanning Tree priority of interface to value. The default is 128. The minimum is 0 and the maximum is 240. Increments of 16."
+msgstr "Defina a prioridade Spanning Tree de interface para valor. O padrão é 128. O mínimo é 0 e o máximo é 240. Incrementos de 16."
+
+#: usr/local/www/diag_packet_capture.php:172
+#: usr/local/www/diag_packet_capture.php:219
+#: usr/local/www/diag_packet_capture.php:235
+msgid "Select the protocol to capture, or Any."
+msgstr "Selecione o protocolo para capturar, ou Qualquer."
+
+#: usr/local/www/diag_packet_capture.php:245
+#: usr/local/www/diag_packet_capture.php:292
+#: usr/local/www/diag_packet_capture.php:310
+msgid "View Capture"
+msgstr "Visualizar Captura"
+
+#: usr/local/www/system_camanager.php:420
+#: usr/local/www/system_camanager.php:427
+msgid "Serial for next certificate"
+msgstr "Serial para o próximo certificado"
+
+#: usr/local/www/system_camanager.php:423
+#: usr/local/www/system_camanager.php:430
+msgid "Enter a decimal number to be used as the serial number for the next certificate to be created using this CA."
+msgstr "Digite um número decimal a ser usado como o número de série para o próximo certificado a ser criado usando essa CA."
+
+#: usr/local/www/vpn_ipsec_phase2.php:140
+#: usr/local/www/vpn_ipsec_phase2.php:141
+#: usr/local/www/vpn_ipsec_phase2.php:163
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+msgid "Invalid Local Network."
+msgstr "Rede Local Inválida"
+
+#: usr/local/www/vpn_ipsec_phase2.php:140
+#: usr/local/www/vpn_ipsec_phase2.php:141
+#: usr/local/www/vpn_ipsec_phase2.php:163
+#: usr/local/www/vpn_ipsec_phase2.php:145
+#: usr/local/www/vpn_ipsec_phase2.php:171
+msgid "has no subnet."
+msgstr "não tem nenhuma sub-rede."
+
+#: usr/local/www/firewall_nat_edit.php:233
+#: usr/local/www/firewall_nat_edit.php:238
+#: usr/local/www/firewall_nat_edit.php:243
+#, php-format
+msgid "A valid local port must be specified. It must be a port alias or integer between 1 and 65535."
+msgstr "A porta local válido deve ser especificado. Ele deve ser um alias de porto ou inteiro entre 1 e 65535."
+
+# 94%
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_edit.php:787
+#: usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_edit.php:800
+msgid "Use system default"
+msgstr "Use padrão do sistema"
+
+#: usr/local/www/interfaces.php:463 usr/local/www/interfaces.php:460
+#: usr/local/www/interfaces.php:448 usr/local/www/interfaces.php:453
+#: usr/local/www/interfaces.php:449 usr/local/www/interfaces.php:452
+msgid "This interface is referenced by IPv4 VIPs. Please delete those before setting the interface to 'none' configuration."
+msgstr "Essa interface é referenciada por VIPs IPv4. Por favor, apague aqueles antes de definir a interface para configuração de nenhum."
+
+#: usr/local/www/interfaces.php:516 usr/local/www/interfaces.php:513
+#: usr/local/www/interfaces.php:501 usr/local/www/interfaces.php:506
+#: usr/local/www/interfaces.php:502 usr/local/www/interfaces.php:505
+msgid "This interface is referenced by IPv6 VIPs. Please delete those before setting the interface to 'none' configuration."
+msgstr "Essa interface é referenciada por VIPs IPv6. Por favor, apague aqueles antes de definir a interface para configuração de nenhum."
+
+#: usr/local/www/interfaces.php:526 usr/local/www/interfaces.php:523
+#: usr/local/www/interfaces.php:511
+#, php-format
+msgid "You can only have one interface configured as %s or 6to4."
+msgstr "Você somente pode ter uma interface configurada como %s ou 6to4."
+
+#: usr/local/www/interfaces.php:536 usr/local/www/interfaces.php:533
+#: usr/local/www/interfaces.php:521
+#, php-format
+msgid "You can only have one interface configured as %s or 6rd."
+msgstr "Você somente pode ter uma interface configurada como %s ou 6rd."
+
+#: usr/local/www/interfaces.php:549 usr/local/www/interfaces.php:546
+#: usr/local/www/interfaces.php:534 usr/local/www/interfaces.php:541
+#: usr/local/www/interfaces.php:537 usr/local/www/interfaces.php:540
+msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID."
+msgstr "Você deve digitar um número hexadecimal válidor para o prefixo IP do IPv6."
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:550
+#: usr/local/www/interfaces.php:538 usr/local/www/interfaces.php:545
+#: usr/local/www/interfaces.php:541 usr/local/www/interfaces.php:544
+msgid "You specified an IPv6 prefix ID that is out of range."
+msgstr "Você especificou um prefixo ID IPv6 fora da faixa."
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171
+msgid "SLAAC"
+msgstr "SLAAC"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171
+msgid "6rd Tunnel"
+msgstr "Túnel 6rd"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171
+msgid "6to4 Tunnel"
+msgstr "Túnel 6to4"
+
+#: usr/local/www/interfaces.php:1119 usr/local/www/interfaces.php:1107
+#: usr/local/www/interfaces.php:1121 usr/local/www/interfaces.php:1163
+#: usr/local/www/interfaces.php:1158 usr/local/www/interfaces.php:1171
+msgid "Track Interface"
+msgstr "Caminho da Interface"
+
+#: usr/local/www/interfaces.php:1411 usr/local/www/interfaces.php:1399
+#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1455
+#: usr/local/www/interfaces.php:1450 usr/local/www/interfaces.php:1463
+msgid "If you leave this field blank, the adapter's default MTU will be used. This is typically 1500 bytes but can vary in some circumstances."
+msgstr "Se você deixar este campo em branco, o adaptadores de MTU padrão será usado. Este é tipicamente 1500 bytes, mas pode variar em algumas circunstâncias."
+
+#: usr/local/www/interfaces.php:1768 usr/local/www/interfaces.php:1756
+#: usr/local/www/interfaces.php:1774 usr/local/www/interfaces.php:1820
+#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1848
+msgid "6RD Configuration"
+msgstr "Desenvolvimento rápido 6RD"
+
+#: usr/local/www/interfaces.php:1771 usr/local/www/interfaces.php:1759
+#: usr/local/www/interfaces.php:1777 usr/local/www/interfaces.php:1823
+#: usr/local/www/interfaces.php:1815 usr/local/www/interfaces.php:1851
+msgid "6RD prefix"
+msgstr "Prefixo 6RD"
+
+#: usr/local/www/interfaces.php:1775 usr/local/www/interfaces.php:1763
+#: usr/local/www/interfaces.php:1781 usr/local/www/interfaces.php:1827
+#: usr/local/www/interfaces.php:1819 usr/local/www/interfaces.php:1855
+msgid "The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. '2001:db8::/32'"
+msgstr "O valor neste campo é o prefixo 6RD IPv6 atribuído pelo seu Provedor. por exemplo: '2001:db8::/32'"
+
+#: usr/local/www/interfaces.php:1779 usr/local/www/interfaces.php:1767
+#: usr/local/www/interfaces.php:1785 usr/local/www/interfaces.php:1831
+#: usr/local/www/interfaces.php:1823 usr/local/www/interfaces.php:1859
+msgid "6RD Border Relay"
+msgstr "Borda de Relay 6RD"
+
+#: usr/local/www/interfaces.php:1783 usr/local/www/interfaces.php:1771
+#: usr/local/www/interfaces.php:1789 usr/local/www/interfaces.php:1835
+#: usr/local/www/interfaces.php:1827 usr/local/www/interfaces.php:1863
+msgid "The value in this field is 6RD IPv4 gateway address assigned by your ISP"
+msgstr "O valor neste campo é um endereço de gateway 6RD IPv4 atribuido por seu Provedor."
+
+#: usr/local/www/interfaces.php:1787 usr/local/www/interfaces.php:1775
+#: usr/local/www/interfaces.php:1793 usr/local/www/interfaces.php:1839
+#: usr/local/www/interfaces.php:1831 usr/local/www/interfaces.php:1867
+msgid "6RD IPv4 Prefix length"
+msgstr "Tamanho do Prefixo IPv4 6RD"
+
+#: usr/local/www/interfaces.php:1799 usr/local/www/interfaces.php:1787
+#: usr/local/www/interfaces.php:1805 usr/local/www/interfaces.php:1851
+#: usr/local/www/interfaces.php:1843 usr/local/www/interfaces.php:1879
+msgid "The value in this field is the 6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD prefix."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1809 usr/local/www/interfaces.php:1797
+#: usr/local/www/interfaces.php:1818 usr/local/www/interfaces.php:1864
+#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1892
+msgid "Track IPv6 Interface"
+msgstr "Caminho da Interface IPv6"
+
+#: usr/local/www/interfaces.php:1812 usr/local/www/interfaces.php:1800
+#: usr/local/www/interfaces.php:1821 usr/local/www/interfaces.php:1867
+#: usr/local/www/interfaces.php:1859 usr/local/www/interfaces.php:1895
+msgid "IPv6 Interface"
+msgstr "Interface IPv6"
+
+#: usr/local/www/interfaces.php:1838 usr/local/www/interfaces.php:1826
+#: usr/local/www/interfaces.php:1847 usr/local/www/interfaces.php:1893
+#: usr/local/www/interfaces.php:1885 usr/local/www/interfaces.php:1921
+msgid "This selects the dynamic IPv6 WAN interface to track for configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1842 usr/local/www/interfaces.php:1830
+#: usr/local/www/interfaces.php:1851 usr/local/www/interfaces.php:1897
+#: usr/local/www/interfaces.php:1889 usr/local/www/interfaces.php:1925
+msgid "IPv6 Prefix ID"
+msgstr "Prefixo ID IPv6"
+
+#: usr/local/www/interfaces.php:1853 usr/local/www/interfaces.php:1841
+#: usr/local/www/interfaces.php:1862 usr/local/www/interfaces.php:1908
+#: usr/local/www/interfaces.php:1898 usr/local/www/interfaces.php:1934
+msgid "The value in this field is the (Delegated) IPv6 prefix ID. This determines the configurable network ID based on the dynamic IPv6 connection"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1843
+#: usr/local/www/interfaces.php:1864 usr/local/www/interfaces.php:1910
+#, php-format
+msgid "Enter a <b>hexadecimal</b> value between %x and %x here, or leave blank."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2356 usr/local/www/interfaces.php:2344
+#: usr/local/www/interfaces.php:2374 usr/local/www/interfaces.php:2420
+#: usr/local/www/interfaces.php:2409 usr/local/www/interfaces.php:2445
+msgid "Note: Only required in Access Point mode. If left blank in Ad-hoc or Infrastructure mode, this interface will connect to any available SSID"
+msgstr "Nota: Somente é requerido o modo Ponto de Acesso. Se deixar em branco no modo Ad-hoc ou modo Infraestrutura, esta interface irá conectar se houver um SSID."
+
+# 79%
+#: usr/local/www/interfaces.php:2576 usr/local/www/interfaces.php:2564
+#: usr/local/www/interfaces.php:2594 usr/local/www/interfaces.php:2640
+#: usr/local/www/interfaces.php:2629 usr/local/www/interfaces.php:2665
+msgid "Secondary 802.1X Authentication Server IP Address"
+msgstr "Endereço IP secundario de Servidor de Autenticação 802.1X"
+
+# 76%
+#: usr/local/www/interfaces.php:2583 usr/local/www/interfaces.php:2571
+#: usr/local/www/interfaces.php:2601 usr/local/www/interfaces.php:2647
+#: usr/local/www/interfaces.php:2636 usr/local/www/interfaces.php:2672
+msgid "Secondary 802.1X Authentication Server Port"
+msgstr "Porta secundaria do Servidor de Autenticação 802.1X"
+
+# 80%
+#: usr/local/www/interfaces.php:2590 usr/local/www/interfaces.php:2578
+#: usr/local/www/interfaces.php:2608 usr/local/www/interfaces.php:2654
+#: usr/local/www/interfaces.php:2643 usr/local/www/interfaces.php:2679
+msgid "Secondary 802.1X Authentication Server Shared Secret"
+msgstr "Segredo Compartilhado secundario do Servidor de Autenticação 802.1X"
+
+#: usr/local/www/vpn_openvpn_client.php:196
+#: usr/local/www/vpn_openvpn_client.php:202
+#: usr/local/www/vpn_openvpn_client.php:220
+msgid "The bandwidth limit must be a positive numeric value."
+msgstr "O limite de banda deve ser um valor número positivo."
+
+#: usr/local/www/load_balancer_pool_edit.php:89
+msgid "The port must be an integer between 1 and 65535, or a port alias."
+msgstr "O número da porta deve ser um número inteiro entre 1 e 65535, ou um apelido para a porta."
+
+# 76%
+#: usr/local/www/load_balancer_pool_edit.php:98
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."
+msgstr "%s não é um endereço IPv4 válido (na lista de \"habilitados\")."
+
+#: usr/local/www/load_balancer_pool_edit.php:101
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."
+msgstr "%s é uma subrede contendo mais de 64 endereços IP (em lista \"habilitada\")"
+
+# 76%
+#: usr/local/www/load_balancer_pool_edit.php:108
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."
+msgstr "%s não é um endereço IP válido ou subrede IPv4 (na lista de \"desabilitados\")."
+
+#: usr/local/www/load_balancer_pool_edit.php:111
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."
+msgstr "%s é uma subrede contendo mais de 64 endereços IP (em lista \"desabilitada\")"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:153
+#: usr/local/www/firewall_virtual_ip_edit.php:152
+#: usr/local/www/firewall_virtual_ip_edit.php:144
+#: usr/local/www/firewall_virtual_ip_edit.php:160
+#, php-format
+msgid "VHID %s is already in use on interface %s. Pick a unique number on this interface."
+msgstr ""
+
+#: usr/local/www/services_snmp.php:391 usr/local/www/services_snmp.php:392
+#: usr/local/www/services_snmp.php:407
+msgid "Interface Binding"
+msgstr "Interface Associada"
+
+# 78%
+#: usr/local/www/services_snmp.php:396 usr/local/www/services_snmp.php:397
+#: usr/local/www/services_snmp.php:412
+msgid "Bind Interface"
+msgstr "Interface de escuta"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:36
+#: usr/local/www/widgets/widgets/smart_status.widget.php:37
+msgid "Drive"
+msgstr "Drive"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:37
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+msgid "Ident"
+msgstr "Ident"
+
+#: usr/local/www/system.php:418 usr/local/www/system.php:411
+#: usr/local/www/system.php:409
+msgid "Language"
+msgstr "Línguagem"
+
+#: usr/local/www/system.php:431 usr/local/www/system.php:424
+#: usr/local/www/system.php:422
+msgid "Choose a language for the webConfigurator"
+msgstr "Escolha o idioma para o configurador web (webConfigurator)"
+
+#: usr/local/www/firewall_virtual_ip.php:118
+#: usr/local/www/firewall_virtual_ip.php:115
+#: usr/local/www/firewall_virtual_ip.php:127
+#: usr/local/www/firewall_virtual_ip.php:150
+#: usr/local/www/firewall_virtual_ip.php:157
+msgid "This entry cannot be deleted because it is still referenced by a CARP IP with the description"
+msgstr "Esta entrada não pode ser removida porque ela esta referenciada por um IP de CARP com a descrição"
+
+#: usr/local/www/firewall_virtual_ip.php:124
+#: usr/local/www/firewall_virtual_ip.php:121
+#: usr/local/www/firewall_virtual_ip.php:132
+#: usr/local/www/firewall_virtual_ip.php:155
+#: usr/local/www/firewall_virtual_ip.php:162
+msgid "This entry cannot be deleted because it is still referenced by an IP alias entry with the description"
+msgstr "Esta entrada não pode ser removida porque ela esta referenciada por um IP Alias com a descrição"
+
+#: usr/local/www/services_dhcpv6.php:531
+#: usr/local/www/services_router_advertisements.php:277
+#: usr/local/www/services_router_advertisements.php:272
+#, php-format
+msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon."
+msgstr "Selecione o modo de Operação do Serviço Anuncio de Roteamento (Router Advertisement - RA)"
+
+#: usr/local/www/services_dhcpv6.php:532
+#: usr/local/www/services_router_advertisements.php:278
+#: usr/local/www/services_router_advertisements.php:273
+#, php-format
+msgid "Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for assignment through (a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with Stateless Autoconfig"
+msgstr "Use \"Router Only\" para somente anunciar este roteador, \"Unmanaged\" para Router Advertising com Stateless Autoconfig, \"Managed\" para atribuir sobre um Servidor DHCPv6, \"Assisted\" para Servidor DHCPv6 atribuido combinando com Stateless Autoconfig"
+
+#: usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_router_advertisements.php:279
+#: usr/local/www/services_router_advertisements.php:274
+#, php-format
+msgid "It is not required to activate this DHCPv6 server when set to \"Managed\", this can be another host on the network"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:537
+#: usr/local/www/services_router_advertisements.php:283
+#: usr/local/www/services_router_advertisements.php:278
+msgid "Router Priority"
+msgstr "Prioridade de Roteador"
+
+#: usr/local/www/services_dhcpv6.php:544
+#: usr/local/www/services_router_advertisements.php:290
+#: usr/local/www/services_router_advertisements.php:285
+#, php-format
+msgid "Select the Priority for the Router Advertisement (RA) Daemon."
+msgstr "Selecione a prioridade para o serviço Router Advertisement (RA) "
+
+# 83%
+#: usr/local/www/services_dhcpv6.php:558
+#: usr/local/www/services_router_advertisements.php:304
+#: usr/local/www/services_router_advertisements.php:299
+msgid "RA Interface"
+msgstr "Interface RA"
+
+#: usr/local/www/services_dhcpv6.php:566
+#: usr/local/www/services_router_advertisements.php:312
+#: usr/local/www/services_router_advertisements.php:307
+#, php-format
+msgid "Select the Interface for the Router Advertisement (RA) Daemon."
+msgstr "Selecione a interface para o serviço Router Advertisement (RA) "
+
+#: usr/local/www/services_dhcpv6.php:653 usr/local/www/services_dhcpv6.php:584
+msgid "prefix delegation size"
+msgstr "tamanho da delegação de prefixo"
+
+#: usr/local/www/services_dhcpv6.php:662 usr/local/www/services_dhcpv6.php:593
+#: usr/local/www/services_dhcpv6.php:610
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows for \n"
+"\t\t\t\t\tassigning networks to subrouters. The start and end of the range must end on boundaries of the prefix delegation size."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:685 usr/local/www/services_dhcpv6.php:616
+#: usr/local/www/services_dhcpv6.php:633
+msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as seperator"
+msgstr "O Servidor DHCP pode opcionalmente prover uma lista de pesquisa de dominio. Use o caracter ponto-e-virgula como separador."
+
+#: usr/local/www/services_dhcpv6.php:725 usr/local/www/services_dhcpv6.php:656
+#: usr/local/www/services_dhcpv6.php:673
+#, fuzzy
+msgid "Change DHCPv6 display lease time from UTC to local time."
+msgstr "Alterar tempo de concessão DHCP exibição de UTC para a hora local."
+
+#: usr/local/www/services_dhcpv6.php:732 usr/local/www/services_dhcpv6.php:663
+#: usr/local/www/services_dhcpv6.php:680
+msgid ""
+"By default DHCPv6 leases are displayed in UTC time. By checking this \n"
+"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to time zone selected. This will be used for all DHCPv6 interfaces lease time."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:64
+msgid "WebCfg - Diagnostics: Sockets page"
+msgstr "WebCfg - Diagnosticos: Página de Sockets"
+
+#: etc/inc/priv.defs.inc:65
+msgid "Allow access to the 'Diagnostics: Sockets' page."
+msgstr "Permite acesso a página 'Diagnosticos: Sockets'"
+
+#: etc/inc/config.console.inc:263
+#, php-format
+msgid "%sEnter the Optional %s interface name or 'a' for auto-detection%s(or nothing if finished):%s"
+msgstr "%sEntre com nome opcional para interface %s ou 'a' para auto-detecção %s(ou nada se quiser finalizar):%s"
+
+#: etc/inc/shaper.inc:2909 etc/inc/shaper.inc:2910 etc/inc/shaper.inc:2915
+#: etc/inc/shaper.inc:2983 etc/inc/shaper.inc:3041 etc/inc/shaper.inc:3049
+#, fuzzy, php-format
+msgid "Bandwidth for schedule %s must be an integer."
+msgstr "O valor de tamanho de banda para %s deve ser um inteiro."
+
+#: etc/inc/shaper.inc:2915 etc/inc/shaper.inc:2916 etc/inc/shaper.inc:2921
+#: etc/inc/shaper.inc:2989 etc/inc/shaper.inc:3047 etc/inc/shaper.inc:3057
+msgid "You need to specify a schedule for every additional entry"
+msgstr ""
+
+#: etc/inc/shaper.inc:2917 etc/inc/shaper.inc:2918 etc/inc/shaper.inc:2923
+#: etc/inc/shaper.inc:2991 etc/inc/shaper.inc:3049 etc/inc/shaper.inc:3059
+msgid "If more than one bandwidth configured all schedules need to be selected"
+msgstr "If mais de um controle de banda é configurado, todos os agendamentos precisam ser selecionados."
+
+#: etc/inc/shaper.inc:2919 etc/inc/shaper.inc:2920 etc/inc/shaper.inc:2925
+#: etc/inc/shaper.inc:2993 etc/inc/shaper.inc:3051 etc/inc/shaper.inc:3061
+msgid "At least one bw specification is necessary"
+msgstr ""
+
+#: etc/inc/shaper.inc:3200 etc/inc/shaper.inc:3201 etc/inc/shaper.inc:3208
+#: etc/inc/shaper.inc:3276 etc/inc/shaper.inc:3332 etc/inc/shaper.inc:3357
+msgid "add another schedule"
+msgstr "adicionar outro agendamento"
+
+#: etc/inc/functions.inc:94
+msgid "Acknowledge All Notices"
+msgstr "Reconhecer todos os avisos"
+
+#: etc/inc/functions.inc:95
+msgid "Click to Acknowledge"
+msgstr "Clique para Reconhecer"
+
+#: etc/inc/functions.inc:113
+msgid "unread notice"
+msgstr "aviso não lido"
+
+#: etc/inc/functions.inc:115
+msgid "unread notices"
+msgstr "avisos não lido"
+
+#: etc/inc/service-utils.inc:234 etc/inc/service-utils.inc:233
+#: etc/inc/service-utils.inc:250
+msgid "Router Advertisement Daemon"
+msgstr "Serviço de Anúncio de Roteador"
+
+#: etc/inc/service-utils.inc:313 etc/inc/service-utils.inc:312
+#: etc/inc/service-utils.inc:329 etc/inc/service-utils.inc:331
+msgid "RIP Daemon"
+msgstr "Serviço RIP"
+
+#: etc/inc/service-utils.inc:413 etc/inc/service-utils.inc:422
+#: etc/inc/service-utils.inc:412 etc/inc/service-utils.inc:421
+#: etc/inc/service-utils.inc:429 etc/inc/service-utils.inc:439
+#: etc/inc/service-utils.inc:432 etc/inc/service-utils.inc:442
+#: etc/inc/service-utils.inc:437 etc/inc/service-utils.inc:447
+#, php-format
+msgid "%s Service is"
+msgstr "%s Serviço é"
+
+#: etc/inc/service-utils.inc:447 etc/inc/service-utils.inc:446
+#: etc/inc/service-utils.inc:464 etc/inc/service-utils.inc:467
+#: etc/inc/service-utils.inc:472
+#, php-format
+msgid "Restart %sService"
+msgstr "Reiniciar Serviço %s"
+
+#: etc/inc/service-utils.inc:458 etc/inc/service-utils.inc:457
+#: etc/inc/service-utils.inc:475 etc/inc/service-utils.inc:478
+#: etc/inc/service-utils.inc:483
+#, php-format
+msgid "Stop %sService"
+msgstr "Parar Serviço %s"
+
+#: etc/inc/service-utils.inc:471 etc/inc/service-utils.inc:470
+#: etc/inc/service-utils.inc:491 etc/inc/service-utils.inc:494
+#: etc/inc/service-utils.inc:499
+#, php-format
+msgid "Start %sService"
+msgstr "Iniciar Serviço %s"
+
+#: etc/inc/filter.inc:2993 etc/inc/filter.inc:3079 etc/inc/filter.inc:3103
+#: etc/inc/filter.inc:3108 etc/inc/filter.inc:3131
+msgid "Removed 15 minute filter reload for Time Based Rules"
+msgstr "Removido 15 minutos de releitura de filtros para regras baseada em Tempo."
+
+#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr.php:196
+msgid "Click on package name to access its website."
+msgstr "Clique no nome do pacote para ter acesso ao website."
+
+#: usr/local/www/diag_logs_settings.php:276
+#: usr/local/www/diag_logs_settings.php:307
+msgid "Show the applied rule description below or in the firewall log rows."
+msgstr "Mostra as descrições de regras aplicadas abaixo ou nas linhas do firewall."
+
+#: usr/local/www/diag_logs_settings.php:278
+#: usr/local/www/diag_logs_settings.php:309
+msgid "Displaying rule descriptions for all lines in the log might affect performance with large rulessets."
+msgstr ""
+
+#: usr/local/www/fbegin.inc:152 usr/local/www/fbegin.inc:144
+msgid "DHCPv6 Server/RA"
+msgstr "Servidor/RA DHCPv6"
+
+#: usr/local/www/fbegin.inc:232 usr/local/www/diag_sockets.php:44
+#: usr/local/www/fbegin.inc:224
+msgid "Sockets"
+msgstr "Sockets"
+
+#: usr/local/www/fbegin.inc:419 usr/local/www/fbegin.inc:411
+msgid "Help for items on this page"
+msgstr "Ajuda para os itens nessa página"
+
+#: usr/local/www/system_groupmanager.php:472
+#: usr/local/www/system_groupmanager.php:422
+#: usr/local/www/system_groupmanager.php:425
+msgid ""
+"Additional webConfigurator groups can be added here. \n"
+"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n"
+"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n"
+"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted."
+msgstr ""
+"Additional webConfigurator groups can be added here. \n"
+"\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by users who are members of the group.\n"
+"\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system defined object.\n"
+"\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they cannot be deleted."
+
+#: usr/local/www/services_dnsmasq_edit.php:216
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+msgid "or"
+msgstr "ou"
+
+#: usr/local/www/services_dhcpv6_edit.php:204
+#: usr/local/www/services_dhcpv6_edit.php:207
+msgid "If an IPv6 address is entered, the address must be outside of the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6_edit.php:206
+#: usr/local/www/services_dhcpv6_edit.php:209
+#, fuzzy
+msgid "If no IPv6 address is given, one will be dynamically allocated from the pool."
+msgstr "Se nenhum endereço IPv6 for fornecido, um será dinamicamente alocado da fila."
+
+#: usr/local/www/services_router_advertisements.php:118
+#: usr/local/www/services_router_advertisements.php:117
+msgid "Subnets are specified in CIDR format. Select the CIDR mask that pertains to each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 network; etc. If no subnets are specified here, the Router Advertisement (RA) Daemon will advertise to the subnet to which the router's interface is assigned."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:149
+#: usr/local/www/services_router_advertisements.php:144
+#, fuzzy, php-format
+msgid "An invalid subnet or alias was specified. [%s/%s]"
+msgstr "%s não é um endereço de IP válido, subrede IPv4 ou alias."
+
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_router_advertisements.php:189
+msgid "Router advertisements"
+msgstr "Anúncios de Roteador"
+
+#: usr/local/www/services_router_advertisements.php:318
+#: usr/local/www/services_router_advertisements.php:313
+msgid "RA Subnet(s)"
+msgstr "Subrede(s) RA"
+
+#: usr/local/www/services_router_advertisements.php:384
+#: usr/local/www/services_router_advertisements.php:379
+#, fuzzy
+msgid "The RA server can optionally provide a domain search list. Use the semicolon character as seperator"
+msgstr "O Servidor DHCP pode opcionalmente prover uma lista de pesquisa de dominio. Use o caracter ponto-e-virgula como separador."
+
+#: usr/local/www/services_router_advertisements.php:392
+#: usr/local/www/services_router_advertisements.php:387
+msgid "Use same settings as DHCPv6 server"
+msgstr "Usa as mesmas configurações do servidor DHCPv6"
+
+#: usr/local/www/vpn_ipsec.php:142 usr/local/www/vpn_ipsec_keys.php:94
+#: usr/local/www/vpn_ipsec_phase2.php:475
+#: usr/local/www/vpn_ipsec_phase1.php:498 usr/local/www/vpn_ipsec.php:148
+#: usr/local/www/vpn_ipsec_phase1.php:519
+#: usr/local/www/vpn_ipsec_phase2.php:497
+msgid "Pre-Shared Keys"
+msgstr "Chaves pré-compartilhada"
+
+#: usr/local/www/system_usermanager_settings_test.php:78
+#, php-format
+msgid "Testing %s LDAP settings... One moment please..."
+msgstr "Testando configurações LDAP %s... Um momento por favor..."
+
+#: usr/local/www/vpn_ipsec_mobile.php:149
+#, fuzzy
+msgid "A valid split DNS domain list must be specified."
+msgstr "Um nome de domínio válido deve ser especificado para o domínio DNS."
+
+#: usr/local/www/vpn_ipsec_mobile.php:505
+msgid "Split DNS"
+msgstr "Divisão do DNS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:514
+msgid "Provide a list of split DNS domain names to clients. Enter a comma separated list."
+msgstr "Forneça uma lista de nomes de dominio DNS para os clientes. Entre com os valores separados por virgula na lista."
+
+#: usr/local/www/vpn_ipsec_mobile.php:515
+msgid "NOTE: If left blank, and a default domain is set, it will be used for this value."
+msgstr "NOTA: Se deixar em branco e um dominio padrão é definido, ele irá ser usado para esse valor."
+
+#: usr/local/www/firewall_shaper.php:131
+#: usr/local/www/firewall_shaper_vinterface.php:146
+msgid "Unable to write config.xml (Access Denied?)"
+msgstr "Incapaz de escrever config.xml (Acesso Negado?)"
+
+#: usr/local/www/firewall_rules_edit.php:455
+#: usr/local/www/firewall_rules_edit.php:458
+#: usr/local/www/firewall_rules_edit.php:464
+msgid "Please select a gateway, normaly the interface selected gateway, so the limiters work correctly"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:136
+#, fuzzy
+msgid "Do you really want to delete this Pre-Shared Key?"
+msgstr "Você realmente deseja apagar essa chave pre-compartilhada?"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:83
+msgid "A valid domain must be specified after _msdcs."
+msgstr "Um dominio válido devve ser especificado após _msdcs."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:93
+msgid "An interface IP address must be specified for the DNS query source."
+msgstr "Um endereço de IP da interface deve ser especificado para consultas de DNS de origem."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144
+msgid "Source IP"
+msgstr "IP de Origem"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:147
+msgid "Source IP address for queries to the DNS server for the override domain."
+msgstr "Endereço de IP de origem para consultas ao servidor DNS para sobrepor o dominio."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148
+msgid "Leave blank unless your DNS server is accessed through a VPN tunnel."
+msgstr ""
+
+#: usr/local/www/system_crlmanager.php:401
+msgid "Edit Imported Certificate Revocation List"
+msgstr "Edita a lista de Revogação de Certificado importado."
+
+#: usr/local/www/system_advanced_firewall.php:206
+#: usr/local/www/system_advanced_firewall.php:235
+#: usr/local/www/system_advanced_firewall.php:246
+#, fuzzy
+msgid "expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate idle connections"
+msgstr "expira conexões ociosas mais rápido. Faz uso mais eficiente da CPU e da memória mas pode derrubar conexões legítimas"
+
+#: usr/local/www/system_advanced_firewall.php:207
+#: usr/local/www/system_advanced_firewall.php:236
+#: usr/local/www/system_advanced_firewall.php:247
+#, fuzzy
+msgid "tries to avoid dropping any legitimate idle connections at the expense of increased memory usage and CPU utilization."
+msgstr "tenta evitar queda de qualquer conexão legítima às custas do uso de memória e utilização de CPU."
+
+#: usr/local/www/vpn_pptp.php:297 usr/local/www/vpn_pptp.php:300
+msgid "PPTP is no longer considered a secure VPN technology because it relies upon MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware that intercepted traffic can be decrypted by a third party, so it should be considered unencrypted. We advise migrating to another VPN type such as OpenVPN or IPsec.<br/><br/><a href=\"https://isc.sans.edu/diary/End+of+Days+for+MS-CHAPv2/13807\">Read More</a>"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:185 usr/local/www/status_ntpd.php:191
+msgid "Clock Latitude"
+msgstr "Latitude"
+
+#: usr/local/www/status_ntpd.php:186 usr/local/www/status_ntpd.php:192
+msgid "Clock Longitude"
+msgstr "Longitude"
+
+#: usr/local/www/system_advanced_misc.php:77
+#: usr/local/www/system_advanced_misc.php:80
+#: usr/local/www/system_advanced_misc.php:84
+#: usr/local/www/system_advanced_misc.php:85
+#, fuzzy
+msgid "AMD Geode LX Security Block"
+msgstr "O AMD Geode LX Security Block irá acelerar algumas funções de criptografia em sistemas que possuem o chip. Não habilite essa opção se você tem um cartão de aceleração de criptografia Hifn, já que ele terá prioridade e o cartão Hifn não será usado. Aceleração pode ser automática para IPsec quando estiver usando Rijndael (AES). OpenVPN deve ser configurado para AES-128-CBC."
+
+#: usr/local/www/system_advanced_misc.php:78
+#: usr/local/www/system_advanced_misc.php:81
+#: usr/local/www/system_advanced_misc.php:85
+#: usr/local/www/system_advanced_misc.php:86
+msgid "AES-NI CPU-based Acceleration"
+msgstr "Aceleração baseada em CPU AES-NI"
+
+#: usr/local/www/system_advanced_misc.php:80
+#: usr/local/www/system_advanced_misc.php:83
+#: usr/local/www/system_advanced_misc.php:87
+#: usr/local/www/system_advanced_misc.php:88
+#, fuzzy
+msgid "Intel Core* CPU on-die thermal sensor"
+msgstr "Sensor termal on-die CPU AMD K8, K10 e K11"
+
+#: usr/local/www/system_advanced_misc.php:81
+#: usr/local/www/system_advanced_misc.php:84
+#: usr/local/www/system_advanced_misc.php:88
+#: usr/local/www/system_advanced_misc.php:89
+msgid "AMD K8, K10 and K11 CPU on-die thermal sensor"
+msgstr "Sensor termal on-die CPU AMD K8, K10 e K11"
+
+#: usr/local/www/system_advanced_misc.php:92
+#: usr/local/www/system_advanced_misc.php:95
+#: usr/local/www/system_advanced_misc.php:99
+#: usr/local/www/system_advanced_misc.php:100
+msgid "Please select a valid Cryptographic Accelerator."
+msgstr "Por favor, selecione um acelerador de Criptografia válido."
+
+#: usr/local/www/system_advanced_misc.php:95
+#: usr/local/www/system_advanced_misc.php:98
+#: usr/local/www/system_advanced_misc.php:102
+#: usr/local/www/system_advanced_misc.php:103
+msgid "Please select a valid Thermal Hardware Sensor."
+msgstr "Por favor, selecione um hardware de sensor termal válido"
+
+#: usr/local/www/system_advanced_misc.php:380
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:439
+#: usr/local/www/system_advanced_misc.php:445
+#, fuzzy
+msgid "Cryptographic Hardware Acceleration"
+msgstr "Hardware de Criptografia"
+
+#: usr/local/www/system_advanced_misc.php:383
+#: usr/local/www/system_advanced_misc.php:395
+#: usr/local/www/system_advanced_misc.php:442
+#: usr/local/www/system_advanced_misc.php:448
+msgid "Cryptographic Hardware"
+msgstr "Hardware de Criptografia"
+
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:451
+#: usr/local/www/system_advanced_misc.php:457
+msgid "A cryptographic accelerator module will use hardware support to speed up some cryptographic functions on systems which have the chip. Do not enable this option if you have a Hifn cryptographic acceleration card, as this will take precedence and the Hifn card will not be used. Acceleration should be automatic for IPsec when using a cipher supported by your chip, such as AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled for hardware acceleration."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:412
+#: usr/local/www/system_advanced_misc.php:459
+#: usr/local/www/system_advanced_misc.php:465
+msgid "If you do not have a crypto chip in your system, this option will have no effect. To unload the selected module, set this option to 'none' and then reboot."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:408
+#: usr/local/www/system_advanced_misc.php:411
+#: usr/local/www/system_advanced_misc.php:420
+#: usr/local/www/system_advanced_misc.php:423
+#: usr/local/www/system_advanced_misc.php:467
+#: usr/local/www/system_advanced_misc.php:470
+#: usr/local/www/system_advanced_misc.php:473
+#: usr/local/www/system_advanced_misc.php:476
+msgid "Thermal Sensors"
+msgstr "Sensores Termais"
+
+#: usr/local/www/system_advanced_misc.php:414
+#: usr/local/www/system_advanced_misc.php:426
+#: usr/local/www/system_advanced_misc.php:473
+#: usr/local/www/system_advanced_misc.php:479
+msgid "None/ACPI"
+msgstr "Nenhum/ACPI"
+
+#: usr/local/www/system_advanced_misc.php:420
+#: usr/local/www/system_advanced_misc.php:432
+#: usr/local/www/system_advanced_misc.php:479
+#: usr/local/www/system_advanced_misc.php:485
+msgid "If you have a supported CPU, selecting a themal sensor will load the appropriate driver to read its temperature. Setting this to 'None' will attempt to read the temperature from an ACPI-compliant motherboard sensor instead, if one is present."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:424
+#: usr/local/www/system_advanced_misc.php:436
+#: usr/local/www/system_advanced_misc.php:483
+#: usr/local/www/system_advanced_misc.php:489
+msgid "If you do not have a supported thermal sensor chip in your system, this option will have no effect. To unload the selected module, set this option to 'none' and then reboot."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:173
+#: usr/local/www/services_captiveportal.php:175
+msgid "Certificate must be specified for HTTPS login."
+msgstr "Certificado deve ser especificado para login de HTTPS."
+
+#: usr/local/www/services_captiveportal.php:863
+#: usr/local/www/services_captiveportal.php:865
+#: usr/local/www/services_captiveportal.php:881
+msgid "If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name and certificate must also be specified below."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:886
+#: usr/local/www/services_captiveportal.php:888
+#: usr/local/www/services_captiveportal.php:904
+msgid "No Certificates defined."
+msgstr "Nenhum certificado definido."
+
+#: usr/local/www/system_gateways_edit.php:205
+#: usr/local/www/system_gateways_edit.php:235
+msgid "The low latency threshold needs to be a numeric value."
+msgstr "O limiar de latencia baixa deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:208
+#: usr/local/www/system_gateways_edit.php:238
+msgid "The low latency threshold needs to be positive."
+msgstr "O limiar de latencia baixa deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:215
+#: usr/local/www/system_gateways_edit.php:245
+msgid "The high latency threshold needs to be a numeric value."
+msgstr "O limiar de latencia alta deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:218
+#: usr/local/www/system_gateways_edit.php:248
+msgid "The high latency threshold needs to be positive."
+msgstr "O limiar de latencia alta deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:225
+#: usr/local/www/system_gateways_edit.php:255
+msgid "The low Packet Loss threshold needs to be a numeric value."
+msgstr "O limiar de perda de pacote baixo deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:228
+#: usr/local/www/system_gateways_edit.php:258
+msgid "The low Packet Loss threshold needs to be positive."
+msgstr "O limiar de perda de pacotes baixo deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:231
+#: usr/local/www/system_gateways_edit.php:261
+msgid "The low Packet Loss threshold needs to be less than 100."
+msgstr "O limiar de perda de pacotes deve ser um valor menor que 100."
+
+#: usr/local/www/system_gateways_edit.php:238
+#: usr/local/www/system_gateways_edit.php:268
+msgid "The high Packet Loss threshold needs to be a numeric value."
+msgstr "O limiar de perda de pacotes alto deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:241
+#: usr/local/www/system_gateways_edit.php:271
+msgid "The high Packet Loss threshold needs to be positive."
+msgstr "O limiar de perda de pacotes alto deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:244
+#: usr/local/www/system_gateways_edit.php:274
+msgid "The high Packet Loss threshold needs to be 100 or less."
+msgstr "O limiar de perda de pacotes alto deve ser um valor menor que 100."
+
+#: usr/local/www/system_gateways_edit.php:252
+#: usr/local/www/system_gateways_edit.php:282
+msgid "The high latency threshold needs to be higher than the low latency threshold"
+msgstr "O limiar de latencia alta precisa ser maior que o valor limiar de latencia baixa."
+
+#: usr/local/www/system_gateways_edit.php:275
+#: usr/local/www/system_gateways_edit.php:305
+msgid "The high Packet Loss threshold needs to be higher than the low Packet Loss threshold"
+msgstr "O limiar de perda de pacotes alto deve ser maior que o valor limiar de perda de pacotes baixo."
+
+#: usr/local/www/system_gateways_edit.php:297
+#: usr/local/www/system_gateways_edit.php:327
+msgid "The frequency probe interval needs to be a numeric value."
+msgstr "O intervalo de frequencia de consulta deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:300
+#: usr/local/www/system_gateways_edit.php:330
+msgid "The frequency probe interval needs to be positive."
+msgstr "O intervalo de frequencia de consulta deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:307
+#: usr/local/www/system_gateways_edit.php:337
+msgid "The down time setting needs to be a numeric value."
+msgstr "A configuração de tempo de queda deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:310
+#: usr/local/www/system_gateways_edit.php:340
+msgid "The down time setting needs to be positive."
+msgstr "A configuração de tempo de queda deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:318
+#: usr/local/www/system_gateways_edit.php:348
+msgid "The Frequency Probe interval needs to be less than the down time setting."
+msgstr "O intervalo de frequencia de consulta deve ser menor que a configuraçõa de tempo de queda."
+
+#: usr/local/www/system_gateways_edit.php:611
+#: usr/local/www/system_gateways_edit.php:615
+#: usr/local/www/system_gateways_edit.php:617
+#: usr/local/www/system_gateways_edit.php:647
+msgid "NOTE: The Frequency Probe interval must be less than the Down time, otherwise the gateway will seem to go down then come up again at the next probe."
+msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta."
+
+#: usr/local/www/shortcuts.inc:96
+msgid "Main page for this section"
+msgstr "Página principal para esta sessão"
+
+#: usr/local/www/shortcuts.inc:120
+msgid "Status of items on this page"
+msgstr "Status dos itens nesta página"
+
+#: usr/local/www/shortcuts.inc:127
+msgid "Log entries for items on this page"
+msgstr "Entrada de log para os itens nesta página"
+
+#: usr/local/www/vpn_openvpn_server.php:1102
+#: usr/local/www/vpn_openvpn_server.php:1129
+#, fuzzy
+msgid "This is the IPv6 virtual network used for private communications between this server and client hosts expressed using CIDR (eg. fe80::/64). The first network address will be assigned to the server virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)"
+msgstr "Essa é a rede virtual IPv6 usada para comunicações privadas entre esse servidor e os hosts clientes expressados usando CIDR (e.g. fe80::/64). O primeiro endereço de rede será atribuído à \tinterface virtual do servidor. Os endereços de rede remanescentes podem opcionalmente ser atribuídos a clientes em conexão. (veja Pool de Endereço)"
+
+#: usr/local/www/vpn_openvpn_server.php:1152
+#: usr/local/www/vpn_openvpn_server.php:1179
+#, fuzzy
+msgid "The interface to which this tap instance will be bridged. This is not done automatically. You must assign this interface and create the bridge separately. This setting controls which existing IP address and subnet mask are used by OpenVPN for the bridge. Setting this to 'none' will cause the Server Bridge DHCP settings below to be ignored."
+msgstr "A interface para que esta instância torneira será, em ponte. Isto não é feito automaticamente. Você deve atribuir essa interface e criar a ponte separadamente. Esta definição controla qual o endereço IP existente e máscara de subrede são usados ¿¿por OpenVPN para a ponte. A definição como 'none' fará com que as configurações do servidor DHCP Ponte abaixo para ser ignorado."
+
+#: usr/local/www/vpn_openvpn_server.php:1165
+#: usr/local/www/vpn_openvpn_server.php:1192
+#, fuzzy
+msgid "When using tap mode as a multi-point server, you may optionally supply a DHCP range to use on the interface to which this tap instance is bridged. If these settings are left blank, DHCP will be passed through to the LAN, and the interface setting above will be ignored."
+msgstr "Ao usar o modo tap como servidor multi-ponto, você pode, opcionalmente, fornecer uma gama DHCP para usar na interface para que esta instância torneira está superado. Se essas configurações são deixadas em branco, DHCP será repassado para a LAN, ea interface de configuração acima serão ignorados."
+
+#: usr/local/www/vpn_openvpn_server.php:1225
+#: usr/local/www/vpn_openvpn_client.php:799
+msgid "IPv4 Remote Network"
+msgstr "Rede remota IPv4"
+
+#: usr/local/www/vpn_openvpn_server.php:1229
+#, fuzzy
+msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr "Essa é uma rede que será roteada através do túnel, de forma que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressado como um intervalo CIDR. Se essa é uma VPN site-to-site, informe aqui a LAN remota. Você pode deixar isso em branco se não desejar uma VPN site-to-site"
+
+#: usr/local/www/vpn_openvpn_server.php:1239
+#: usr/local/www/vpn_openvpn_client.php:813
+msgid "IPv6 Remote Network"
+msgstr "Rede remota IPv6"
+
+#: usr/local/www/vpn_openvpn_server.php:1243
+msgid "This is an IPv6 network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr "Esta é uma rede IPv6 que será encaminhado através do túnel, de modo que uma VPN site-to-site pode ser estabelecida sem alterar manualmente as tabelas de roteamento. Expresso como um prefixo IP. Se esta é uma VPN site-to-site, digite a LAN remota aqui. Você pode deixar este campo em branco se você não quiser uma VPN site-to-site"
+
+#: usr/local/www/services_dhcp.php:293 usr/local/www/services_dhcp.php:274
+#: usr/local/www/services_dhcp.php:294 usr/local/www/services_dhcp.php:295
+msgid "If you specify a mac allow list, it must contain only valid partial MAC addresses."
+msgstr "Se você especificar uma lista de mac permitido. isto deve conter somente endereços parciais de MAC."
+
+#: usr/local/www/services_dhcp.php:295 usr/local/www/services_dhcp.php:276
+#: usr/local/www/services_dhcp.php:296 usr/local/www/services_dhcp.php:297
+msgid "If you specify a mac deny list, it must contain only valid partial MAC addresses."
+msgstr "Se você especificar uma lista de mac bloqueados. isto deve conter somente endereços parciais de MAC."
+
+#: usr/local/www/services_dhcp.php:699 usr/local/www/services_dhcp.php:701
+#: usr/local/www/services_dhcp.php:721 usr/local/www/services_dhcp.php:733
+msgid "Editing Pool-Specific Options. To return to the Interface, click its tab above."
+msgstr "Editar Opções de pool específico. Para retornar para a interface, clique na guia acima."
+
+#: usr/local/www/services_dhcp.php:775 usr/local/www/services_dhcp.php:785
+#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:817
+msgid "Additional Pools"
+msgstr "Pools adicionais"
+
+#: usr/local/www/services_dhcp.php:777 usr/local/www/services_dhcp.php:787
+#: usr/local/www/services_dhcp.php:807 usr/local/www/services_dhcp.php:819
+msgid "If you need additional pools of addresses inside of this subnet outside the above Range, they may be specified here."
+msgstr "Se você precisar de pools de endereços adicionais dentro desta subrede externa na faixa acima, então você deve especificar aqui."
+
+#: usr/local/www/services_dhcp.php:780 usr/local/www/services_dhcp.php:790
+#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcp.php:822
+msgid "Pool Start"
+msgstr "Pool Inicial"
+
+#: usr/local/www/services_dhcp.php:781 usr/local/www/services_dhcp.php:791
+#: usr/local/www/services_dhcp.php:811 usr/local/www/services_dhcp.php:823
+msgid "Pool End"
+msgstr "Pool Final"
+
+#: usr/local/www/services_dhcp.php:805 usr/local/www/services_dhcp.php:819
+#: usr/local/www/services_dhcp.php:839 usr/local/www/services_dhcp.php:851
+msgid "Do you really want to delete this pool?"
+msgstr "Você realmente quer remover este pool?"
+
+#: usr/local/www/services_dhcp.php:958 usr/local/www/services_dhcp.php:971
+#: usr/local/www/services_dhcp.php:991 usr/local/www/services_dhcp.php:1003
+msgid "MAC Address Control"
+msgstr "Controle de endereço MAC"
+
+#: usr/local/www/services_dhcp.php:961 usr/local/www/services_dhcp.php:974
+#: usr/local/www/services_dhcp.php:994 usr/local/www/services_dhcp.php:1006
+msgid "Show MAC Address Control"
+msgstr "Visualizar Controle de endereço MAC"
+
+#: usr/local/www/services_dhcp.php:965 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp.php:998 usr/local/www/services_dhcp.php:1010
+msgid "Enter a list of partial MAC addresses to allow, comma separated, no spaces, such as "
+msgstr "Entre com uma lista parcial de endereços MAC permitidos, separados por virgula, sem espaço, como "
+
+#: usr/local/www/services_dhcp.php:967 usr/local/www/services_dhcp.php:980
+#: usr/local/www/services_dhcp.php:1000 usr/local/www/services_dhcp.php:1012
+msgid "Enter a list of partial MAC addresses to deny access, comma separated, no spaces, such as "
+msgstr "Entre com uma lista parcial de endereços MAC bloqueados, separados por virgula, sem espaço, como "
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:89
+msgid "You cannot use spaces or slashes in the 'name' field."
+msgstr "Você não pode usar espaços ou barras no campo 'nome'."
+
+#: usr/local/www/guiconfig.inc:1009 usr/local/www/guiconfig.inc:1024
+#: usr/local/www/guiconfig.inc:1021 usr/local/www/guiconfig.inc:1028
+msgid "move mouse out this alias to hide"
+msgstr "mova o mouse para fora para esconder este alias"
+
+#: usr/local/www/guiconfig.inc:1066 usr/local/www/guiconfig.inc:1081
+#: usr/local/www/guiconfig.inc:1078 usr/local/www/guiconfig.inc:1085
+msgid "edit this alias"
+msgstr "edita o alias"
+
+#: usr/local/www/guiconfig.inc:1077 usr/local/www/guiconfig.inc:1089
+#: usr/local/www/guiconfig.inc:1092 usr/local/www/guiconfig.inc:1104
+#: usr/local/www/guiconfig.inc:1101 usr/local/www/guiconfig.inc:1096
+#: usr/local/www/guiconfig.inc:1108
+msgid "loading..."
+msgstr "carregando..."
+
+#: usr/local/www/system_firmware_settings.php:175
+#: usr/local/www/system_firmware_settings.php:184
+#: usr/local/www/system_firmware_settings.php:186
+msgid "Dashboard check"
+msgstr "Checagem do Dashboard"
+
+#: usr/local/www/system_firmware_settings.php:179
+#: usr/local/www/system_firmware_settings.php:188
+#: usr/local/www/system_firmware_settings.php:190
+msgid "Disable the automatic dashboard auto-update check."
+msgstr "Desabilita a checagem de auto atualização do dashboard."
+
+#: usr/local/www/services_ntpd.php:119
+msgid "Interfaces without an IP address will not be shown."
+msgstr "Interfaces sem um endereço de IP não serão visualizados."
+
+#: usr/local/www/services_ntpd.php:121
+msgid "Selecting no interfaces will listen on all interfaces with a wildcard."
+msgstr "Senão selecionar uma interface, todas elas serão atribuidas a escutar em um curiga (*)."
+
+#: usr/local/www/services_ntpd.php:122
+msgid "Selecting all interfaces will explicitly listen on only the interfaces/IPs specified."
+msgstr "Selecionando todas as interfaces, será explicito que somente o endereço IP especifico da interface será usado."
+
+#: usr/local/www/services_ntpd.php:140
+msgid "The GPS must provide NMEA format output!"
+msgstr "O GPS deve prover uma saida no formato NMEA!"
+
+#: usr/local/www/services_ntpd.php:142
+msgid "All serial ports are listed, be sure to pick only the port with the GPS attached."
+msgstr "Todas as portas seriais são listadas, mas somente uma porta pode ser selecionada para atribuir ao GPS."
+
+#: usr/local/www/services_ntpd.php:144
+msgid "It is best to configure at least 2 servers under"
+msgstr "É melhor configurar pelo menos 2 servidores sob"
+
+#: usr/local/www/services_ntpd.php:144
+msgid "System > General"
+msgstr "Sistema > Geral"
+
+#: usr/local/www/services_ntpd.php:144
+msgid "to avoid loss of sync if the GPS data is not valid over time. Otherwise ntpd may only use values from the unsynchronized local clock when providing time to clients."
+msgstr "para evitar a perda de sincronia, se os dados de GPS não é válida ao longo do tempo. Caso contrário ntpd só podem utilizar os valores do relógio local não sincronizado ao fornecer tempo para os clientes."
+
+#: usr/local/www/firewall_aliases.php:177
+#: usr/local/www/firewall_aliases.php:175
+msgid "Ports"
+msgstr "Portas"
+
+#: usr/local/www/firewall_aliases.php:178
+#: usr/local/www/firewall_aliases.php:176
+msgid "Urls"
+msgstr "Urls"
+
+#: usr/local/www/firewall_aliases.php:195
+#: usr/local/www/firewall_aliases.php:272
+#: usr/local/www/firewall_aliases.php:274
+#: usr/local/www/firewall_aliases.php:275
+msgid "Add a new alias"
+msgstr "Adiciona um novo alias"
+
+#: usr/local/www/firewall_aliases.php:255
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+msgid "Edit alias"
+msgstr "Edita alias"
+
+#: usr/local/www/firewall_aliases.php:256
+#: usr/local/www/firewall_aliases.php:257
+#: usr/local/www/firewall_aliases.php:258
+msgid "Delete alias"
+msgstr "Remove alias"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:64
+msgid "The zone name can only contain letters, digits, and underscores (_)."
+msgstr "O nome da zone somente pode conter letras, números e sobre-linha (_)."
+
+#: usr/local/www/services_captiveportal_zones_edit.php:105
+#: usr/local/www/services_captiveportal_zones_edit.php:101
+msgid "Zone name. Can only contain letters, digits, and underscores (_)."
+msgstr "Nome da Zona. Somente pode conter letras, números e sobrelinhas (_)."
+
+#: usr/local/www/diag_packet_capture.php:81
+msgid "Invalid interface."
+msgstr "Interface inválida"
+
+#: usr/local/www/diag_packet_capture.php:84
+msgid "Invalid address family."
+msgstr "Família de Endereço inválido."
+
+#: usr/local/www/diag_packet_capture.php:87
+msgid "Invalid protocol."
+msgstr "procolo inválido."
+
+#: usr/local/www/diag_packet_capture.php:92
+#, fuzzy, php-format
+msgid "A valid IP address or CIDR block must be specified. [%s]"
+msgstr "Um endereço IP local válido deve ser especificado para %s."
+
+#: usr/local/www/diag_packet_capture.php:97
+msgid "Invalid value specified for port."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:104
+msgid "Invalid value specified for packet length."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:111
+msgid "Invalid value specified for packet count."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:148
+#: usr/local/www/vpn_ipsec_phase2.php:152
+#, fuzzy
+msgid "A valid NAT local network bit count must be specified."
+msgstr "Um contador de bits de rede local válido deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:150
+#: usr/local/www/vpn_ipsec_phase2.php:154
+msgid "You cannot configure a network type address for NAT while only an address type is selected for local source."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:153
+#: usr/local/www/vpn_ipsec_phase2.php:157
+#, fuzzy
+msgid "A valid NAT local network IP address must be specified."
+msgstr "Um endereço IP válido da rede local deve ser especificado."
+
+#: usr/local/www/vpn_ipsec_phase2.php:548
+#: usr/local/www/vpn_ipsec_phase2.php:569
+msgid "In case you need NAT/BINAT on this network specify the address to be translated"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:114
+msgid "VPN: IPsec: Edit Pre-Shared Key"
+msgstr "VPN: IPsec: Edite Chave Pré-Compartilhada"
+
+#: usr/local/www/services_dhcp_edit.php:227
+#: usr/local/www/services_dhcp_edit.php:355
+msgid "If an IPv4 address is entered, the address must be outside of the pool."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:229
+#: usr/local/www/services_dhcp_edit.php:357
+#, fuzzy
+msgid "If no IPv4 address is given, one will be dynamically allocated from the pool."
+msgstr "Se nenhum endereço IP for dado, um será dinamicamente alocado do pool."
+
+#: usr/local/www/interfaces.php:2460 usr/local/www/interfaces.php:2490
+#: usr/local/www/interfaces.php:2536 usr/local/www/interfaces.php:2525
+#: usr/local/www/interfaces.php:2561
+msgid "WPA Pre-Shared Key"
+msgstr "Chave Pré-Compartilhada WPA"
+
+#: usr/local/www/vpn_openvpn_client.php:789
+#: usr/local/www/vpn_openvpn_client.php:808
+msgid "This is the IPv6 virtual network used for private communications between this client and the server expressed using CIDR (eg. fe80::/64). The first network address is assumed to be the server address and the second network address will be assigned to the client virtual interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:803
+#, fuzzy
+msgid "This is a network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank to only communicate with other clients"
+msgstr "Essa é uma rede que será roteada através do túnel para que uma VPN site-to-site possa ser estabelecida sem modificar manualmente as tabelas de roteamento. Expressa como um intervalor CIDR. Se essa é uma VPN site-to-site, informe que a LAN remote. Você deve deixar isso em branco para somente comunicar-se com outros clientes"
+
+#: usr/local/www/vpn_openvpn_client.php:817
+msgid "This is an IPv6 network that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN here. You may leave this blank to only communicate with other clients"
+msgstr ""
+
+#: usr/local/www/vpn_l2tp.php:301 usr/local/www/vpn_l2tp.php:304
+msgid "Enable L2TP server"
+msgstr "Habilita servidor L2TP"
+
+#: usr/local/www/vpn_l2tp.php:322 usr/local/www/vpn_l2tp.php:325
+msgid "Server Address"
+msgstr "Endereço do Servidor"
+
+#: usr/local/www/vpn_l2tp.php:334 usr/local/www/vpn_l2tp.php:337
+msgid "Remote Address Range"
+msgstr "Faixa de endereço remoto"
+
+#: usr/local/www/vpn_l2tp.php:384 usr/local/www/vpn_l2tp.php:387
+msgid "Authentication Type"
+msgstr "Tipo de Autenticação"
+
+#: usr/local/www/vpn_l2tp.php:429 usr/local/www/vpn_l2tp.php:432
+msgid "RADIUS Shared Secret"
+msgstr "Chave compartilhada do RADIUS"
+
+#: usr/local/www/vpn_l2tp.php:436 usr/local/www/vpn_l2tp.php:439
+msgid "RADIUS Issued IP's"
+msgstr "IP's emitidos do RADIUS"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:126
+#: usr/local/www/firewall_virtual_ip_edit.php:128
+#, fuzzy
+msgid "The /31 and /32 subnet mask are invalid for CARP IPs."
+msgstr "A máscara de subrede /32 é inválida para IPs CARP."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:130
+#: usr/local/www/firewall_virtual_ip_edit.php:132
+#, fuzzy
+msgid "The /127 and /128 subnet mask are invalid for CARP IPs."
+msgstr "A máscara de rede /128 é inválida para IPs CARP."
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+msgid "If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) Tunnel Broker on a WAN with a dynamic IP, you may want to add a"
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+msgid "HE.net Tunnelbroker type DynDNS Entry"
+msgstr ""
+
+#: usr/local/www/interfaces_gif.php:137 usr/local/www/interfaces_gif.php:141
+msgid "to keep your tunnel functional when your IP changes."
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:102
+#: usr/local/www/widgets/widgets/system_information.widget.php:103
+#: usr/local/www/widgets/widgets/system_information.widget.php:101
+#: usr/local/www/widgets/widgets/system_information.widget.php:107
+#, fuzzy
+msgid "Obtaining update status"
+msgstr "Status de Download de Auto-Atualização"
+
+#: usr/local/www/vpn_ipsec_phase1.php:680
+#: usr/local/www/vpn_ipsec_phase1.php:701
+#, fuzzy
+msgid "Input your Pre-Shared Key string"
+msgstr "Insira sua string de chave pré-configurada"
+
+#: usr/local/www/diag_nanobsd.php:179 usr/local/www/diag_nanobsd.php:170
+msgid "Media Read/Write Status"
+msgstr "Status da Media de Leitura/Escrita"
+
+#: usr/local/www/diag_nanobsd.php:192 usr/local/www/diag_nanobsd.php:183
+msgid "Read/Write"
+msgstr "Leitura/Escrita"
+
+#: usr/local/www/diag_nanobsd.php:194 usr/local/www/diag_nanobsd.php:185
+msgid "Switch to Read-Only"
+msgstr "Alterar para somente-leitura"
+
+#: usr/local/www/diag_nanobsd.php:196 usr/local/www/diag_nanobsd.php:187
+msgid "Read-Only"
+msgstr "Somente-Leitura"
+
+#: usr/local/www/diag_nanobsd.php:198 usr/local/www/diag_nanobsd.php:189
+msgid "Switch to Read/Write"
+msgstr "Alterar para Leitura/Escrita"
+
+#: usr/local/www/diag_nanobsd.php:201 usr/local/www/diag_nanobsd.php:192
+msgid "NOTE: This setting is only temporary, and can be switched dynamically in the background."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:208 usr/local/www/diag_nanobsd.php:199
+msgid "Keep media mounted read/write at all times."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:821 usr/local/www/services_dhcpv6.php:838
+#, fuzzy
+msgid "Status: DHCPv6 leases"
+msgstr "Concessões DHCPv6"
+
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:307
+msgid "Rule"
+msgstr "Regra"
+
+#: usr/local/www/system_firmware.php:55
+msgid "Standard Kernel"
+msgstr "Kernel Padrão"
+
+#: usr/local/www/system_firmware.php:56
+msgid "Embedded Kernel"
+msgstr "Kernel Embarcado"
+
+#: usr/local/www/vpn_l2tp.php:88 usr/local/www/vpn_pptp.php:96
+#, fuzzy
+msgid "'Server address' parameter should NOT be set to any IP address currently in use on this firewall."
+msgstr "NOTA: Este não deve ser definido para nenhum endereço IP atualmente em uso neste firewall "
+
+#: usr/local/www/system_camanager.php:220
+#: usr/local/www/system_certmanager.php:299
+#: usr/local/www/system_certmanager.php:301
+#, fuzzy
+msgid "Please select a valid Key Length."
+msgstr "Por favor, selecione um acelerador de Criptografia válido."
+
+#: usr/local/www/system_camanager.php:222
+#: usr/local/www/system_certmanager.php:303
+#, fuzzy
+msgid "Please select a valid Digest Algorithm."
+msgstr "Por favor, selecione um acelerador de Criptografia válido."
+
+#: usr/local/www/system_camanager.php:477
+#: usr/local/www/system_certmanager.php:690
+#: usr/local/www/system_certmanager.php:863
+#: usr/local/www/system_certmanager.php:691
+#: usr/local/www/system_certmanager.php:867
+msgid "Digest Algorithm"
+msgstr "Algoritmo Digest"
+
+#: usr/local/www/system_camanager.php:489
+#: usr/local/www/system_certmanager.php:702
+#: usr/local/www/system_certmanager.php:875
+#: usr/local/www/system_certmanager.php:703
+#: usr/local/www/system_certmanager.php:879
+msgid "NOTE: It is recommended to use an algorithm stronger than SHA1 when possible."
+msgstr ""
+
+#: usr/local/www/system_camanager.php:653
+#: usr/local/www/system_certmanager.php:1127
+#: usr/local/www/system_certmanager.php:1131
+msgid "Valid From"
+msgstr "Válido de"
+
+#: usr/local/www/system_camanager.php:658
+#: usr/local/www/system_certmanager.php:1132
+#: usr/local/www/system_certmanager.php:1136
+msgid "Valid Until"
+msgstr "Válido até"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:107
+#, fuzzy
+msgid "A valid subnet mask must be specified"
+msgstr "Uma sub-rede externa válida deve ser especificada."
+
+#: usr/local/www/vpn_openvpn_client.php:160
+#: usr/local/www/vpn_openvpn_server.php:213
+msgid "Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:162
+#: usr/local/www/vpn_openvpn_server.php:215
+msgid "Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:164
+#: usr/local/www/vpn_openvpn_server.php:217
+msgid "An IPv4 protocol was selected, but the selected interface has no IPv4 address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:166
+#: usr/local/www/vpn_openvpn_server.php:219
+msgid "An IPv6 protocol was selected, but the selected interface has no IPv6 address."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:818
+#: usr/local/www/vpn_openvpn_server.php:1252
+#, fuzzy
+msgid "IPv4 Remote Network/s"
+msgstr "Rede remota IPv4"
+
+#: usr/local/www/vpn_openvpn_client.php:822
+msgid "These are the IPv4 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more CIDR ranges. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank to only communicate with other clients"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:832
+#: usr/local/www/vpn_openvpn_server.php:1266
+#, fuzzy
+msgid "IPv6 Remote Network/s"
+msgstr "Rede remota IPv6"
+
+#: usr/local/www/vpn_openvpn_client.php:836
+msgid "These are the IPv6 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank to only communicate with other clients"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:909
+msgid "EXAMPLE:"
+msgstr "EXEMPLO:"
+
+#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211
+msgid "Show Routing Table"
+msgstr "Mostra tabela de roteamento"
+
+#: usr/local/www/status_openvpn.php:201 usr/local/www/status_openvpn.php:211
+msgid "Display OpenVPN's internal routing table for this server."
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:207 usr/local/www/status_openvpn.php:217
+msgid "Routing Table"
+msgstr "Tabela de roteamento"
+
+#: usr/local/www/status_openvpn.php:216 usr/local/www/status_openvpn.php:226
+msgid "Target Network"
+msgstr "Rede Alvo"
+
+#: usr/local/www/status_openvpn.php:217 usr/local/www/status_openvpn.php:227
+msgid "Last Used"
+msgstr "Último Usado"
+
+#: usr/local/www/status_openvpn.php:239 usr/local/www/status_openvpn.php:249
+msgid "An IP address followed by C indicates a host currently connected through the VPN."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114
+#: usr/local/www/fbegin.inc:218
+msgid "Test Port"
+msgstr "Teste de Porta"
+
+#: usr/local/www/diag_testport.php:64
+#, fuzzy
+msgid "Please enter a valid IP or hostname."
+msgstr "Host deve ser um hostname ou endereço IP válido."
+
+#: usr/local/www/diag_testport.php:68
+#, fuzzy
+msgid "Please enter a valid port number."
+msgstr "Um número de porta válido deve ser especificado. [%s]"
+
+#: usr/local/www/diag_testport.php:72
+msgid "Please enter a valid source port number, or leave the field blank."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:76
+msgid "You cannot connect to an IPv4 address using IPv6."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:79
+msgid "You cannot connect to an IPv6 address using IPv4."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:106
+msgid "This page allows you to perform a simple TCP connection test to determine if a host is up and accepting connections on a given port. This test does not function for UDP since there is no way to reliably determine if a UDP port accepts connections in this manner."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:108
+msgid "No data is transmitted to the remote host during this test, it will only attempt to open a connection and optionally display the data sent back from the server."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:132
+#, fuzzy
+msgid "This should typically be left blank."
+msgstr "Isto será usado se o campo for deixado em branco."
+
+#: usr/local/www/diag_testport.php:136
+msgid "Show Remote Text"
+msgstr "Mostra texto remoto"
+
+#: usr/local/www/diag_testport.php:139
+msgid "Shows the text given by the server when connecting to the port. Will take 10+ seconds to display if checked."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:159 usr/local/www/diag_testport.php:161
+#: usr/local/www/diag_traceroute.php:104 usr/local/www/diag_ping.php:102
+msgid "IP Protocol"
+msgstr "Protocolo IP"
+
+#: usr/local/www/diag_testport.php:166 usr/local/www/diag_testport.php:168
+msgid "IPv4"
+msgstr "IPv4"
+
+#: usr/local/www/diag_testport.php:169 usr/local/www/diag_testport.php:171
+msgid "IPv6"
+msgstr "IPv6"
+
+#: usr/local/www/diag_testport.php:173 usr/local/www/diag_testport.php:175
+msgid "If you force IPv4 or IPv6 and use a hostname that does not contain a result using that protocol, it will result in an error. For example if you force IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will not work."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:186 usr/local/www/diag_testport.php:188
+msgid "Port Test Results"
+msgstr "Resultados do teste de Porta"
+
+#: usr/local/www/diag_testport.php:246 usr/local/www/diag_testport.php:248
+msgid "No output received, or connection failed. Try with \"Show Remote Text\" unchecked first."
+msgstr ""
+
+#: usr/local/www/diag_testport.php:248 usr/local/www/diag_testport.php:250
+msgid "Connection failed (Refused/Timeout)"
+msgstr "Conexão falhou (Recusada/Timeout)"
+
+#: usr/local/www/firewall_rules_edit.php:1295
+#: usr/local/www/firewall_nat_edit.php:780
+#: usr/local/www/firewall_nat_out_edit.php:647
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_out_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:1301
+#: usr/local/www/firewall_nat_edit.php:793
+#: usr/local/www/firewall_rules_edit.php:1349
+msgid "Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave."
+msgstr ""
+
+#: usr/local/www/interfaces_qinq.php:68
+msgid "QinQ interface does not exist"
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:84
+#, fuzzy
+msgid "Interface supplied as parent is invalid"
+msgstr "Protocolo fornecido inválido"
+
+#: usr/local/www/system_firmware_settings.php:151
+#: usr/local/www/system_firmware_settings.php:153
+#, php-format
+msgid "Entries denoted by \"Current architecture\" match the architecture of your current installation, such as %s. Changing architectures during an upgrade is not recommended, and may require a manual reboot after the update completes."
+msgstr ""
+
+#: usr/local/www/interfaces_lagg_edit.php:95
+#: usr/local/www/interfaces_lagg_edit.php:98
+#, fuzzy
+msgid "Interface supplied as member is invalid"
+msgstr "Protocolo fornecido inválido"
+
+#: usr/local/www/interfaces_lagg_edit.php:101
+msgid "Protocol supplied is invalid"
+msgstr "Protocolo fornecido inválido"
+
+#: usr/local/www/status_captiveportal_expire.php:58
+#: usr/local/www/status_captiveportal_expire.php:73
+#: usr/local/www/status_captiveportal_vouchers.php:112
+#: usr/local/www/status_captiveportal.php:110
+#: usr/local/www/status_captiveportal_test.php:75
+#: usr/local/www/status_captiveportal_voucher_rolls.php:79
+msgid "Expire Vouchers"
+msgstr "Vouchers expirados"
+
+#: usr/local/www/status_captiveportal_expire.php:86
+msgid "Enter multiple vouchers separated by space or newline. All valid vouchers will be marked as expired"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:835
+#: usr/local/www/firewall_nat_edit.php:847
+#: usr/local/www/firewall_nat_edit.php:848
+msgid "NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will only work on an interface containing the default gateway."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan.php:71
+msgid "Invalid VLAN interface."
+msgstr "Interface VLAN inválida"
+
+#: usr/local/www/interfaces_gif_edit.php:87
+msgid "The alias IP address family has to match the family of the remote peer address."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:193
+msgid "The IP address must not be within the range configured on a DHCP pool for this interface."
+msgstr "O endereço IP não deve estar dentro do intervalo DHCP para essa interface."
+
+#: usr/local/www/services_dhcp_edit.php:388
+msgid "ARP Table Static Entry"
+msgstr "Tabela de entradas estaticas ARP"
+
+#: usr/local/www/services_dhcp_edit.php:391
+msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. "
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:117
+msgid "This IP address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:122 usr/local/www/diag_traceroute.php:141
+msgid "Reverse Address Lookup"
+msgstr "DNS Lookup Reverso"
+
+#: usr/local/www/interfaces_bridge.php:70
+#, fuzzy
+msgid "Invalid bridge interface."
+msgstr "Interface Bridge"
+
+#: usr/local/www/diag_smart.php:339
+msgid "Perform Self-tests"
+msgstr "Performance dos auto-testes"
+
+#: usr/local/www/diag_smart.php:384
+msgid "Self-test"
+msgstr "Auto-teste"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1484
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1427
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1364
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1225
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1485
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1428
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1365
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1226
+msgid "Connections From Upstream SIP Server"
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1497
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1440
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1377
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1238
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1499
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1442
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1379
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1240
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1498
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1441
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1378
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1239
+msgid "Connections To Upstream SIP Server"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe_edit.php:149
+msgid "Wrong data submitted"
+msgstr "Dados errados submetidos"
+
+#: usr/local/www/license.php:158
+msgid "1992-2012 The FreeBSD Project. All rights reserved"
+msgstr "1992-2013 Projeto FreeBSD. Todos os direitos reservados"
+
+#: usr/local/www/license.php:161
+msgid "1999-2010 The PHP Group. All rights reserved."
+msgstr "1999-2010 Grupo PHP. Todos os direitos reservados."
+
+#: usr/local/www/license.php:164
+msgid "2004, Jan Knescke, incremental"
+msgstr "2004, Jan Knescke. incremental"
+
+#: usr/local/www/license.php:168
+msgid "2004-2012 Internet Software Consortium, Inc."
+msgstr "2004-2012 Internet Software Consortium, Inc."
+
+#: usr/local/www/license.php:169
+msgid "1995-2003 Internet Software Consortium"
+msgstr "1995-2003 Internet Software Consortium"
+
+#: usr/local/www/services_dhcp.php:352 usr/local/www/services_dhcp.php:372
+#: usr/local/www/services_dhcp.php:373
+msgid "The specified range must not be within the DHCP range for this interface."
+msgstr "Especifique uma faixa que não deve estar na faixa de DHCP nesta interface."
+
+#: usr/local/www/services_dhcp.php:361 usr/local/www/services_dhcp.php:381
+#: usr/local/www/services_dhcp.php:382
+#, fuzzy
+msgid "The specified range must not be within the range configured on a DHCP pool for this interface."
+msgstr "Especifique uma faixa que não deve estar na faixa de DHCP nesta interface."
+
+#: usr/local/www/services_dhcp.php:713 usr/local/www/services_dhcp.php:733
+#: usr/local/www/services_dhcp.php:745
+msgid "Pool Description"
+msgstr "Descrição do Pool"
+
+#: usr/local/www/services_dhcp.php:903 usr/local/www/services_dhcp.php:923
+#: usr/local/www/services_dhcp.php:935
+msgid "Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP. Interface's advskew determines whether the DHCPd process is Primary or Secondary. Ensure one machine's advskew<20 (and the other is >20)."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:946 usr/local/www/services_dhcp.php:966
+#: usr/local/www/services_dhcp.php:978
+#, fuzzy
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this\n"
+"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr ""
+"Por DHCP padrão arrendamentos são exibidas em tempo UTC. Ao marcar esta \n"
+"\t\t\t\t\t\tcaixa tempo de concessão DHCP será exibida no horário local e definir a zona de tempo selecionado. Isso será usado para todos os tempos interfaces de DHCP locação."
+
+#: usr/local/www/services_dhcp.php:1146 usr/local/www/services_dhcp.php:1166
+#: usr/local/www/services_dhcp.php:1178
+#, fuzzy
+msgid "DHCP Static Mappings for this interface."
+msgstr "Registrar mapeamentos estáticos DHCP no DNS forwarder"
+
+#: usr/local/www/diag_system_pftop.php:133
+msgid "View type:"
+msgstr "Tipo de Visualização:"
+
+#: usr/local/www/diag_system_pftop.php:136
+msgid "Label"
+msgstr "Etiqueta"
+
+#: usr/local/www/diag_system_pftop.php:141
+msgid "Speed"
+msgstr "Velocidade"
+
+#: usr/local/www/diag_system_pftop.php:150
+msgid "Age"
+msgstr "Idade"
+
+#: usr/local/www/diag_system_pftop.php:151
+msgid "Bytes"
+msgstr "Bytes"
+
+#: usr/local/www/diag_system_pftop.php:152
+msgid "Destination Address"
+msgstr "Endereço de Destino"
+
+#: usr/local/www/diag_system_pftop.php:154
+msgid "Expiry"
+msgstr "Expirado"
+
+#: usr/local/www/diag_system_pftop.php:156
+msgid "Peak"
+msgstr "Pico"
+
+#: usr/local/www/diag_system_pftop.php:157
+msgid "Packet"
+msgstr "Pacote"
+
+#: usr/local/www/diag_system_pftop.php:161 usr/local/www/diag_testport.php:143
+#: usr/local/www/diag_traceroute.php:113 usr/local/www/diag_ping.php:111
+msgid "Source Address"
+msgstr "Endereço de Origem"
+
+#: usr/local/www/diag_system_pftop.php:166
+msgid "Number of States:"
+msgstr "Número de Estados:"
+
+#: usr/local/www/system_advanced_misc.php:357
+#: usr/local/www/system_advanced_misc.php:404
+#: usr/local/www/system_advanced_misc.php:410
+msgid "On AC Power Mode"
+msgstr "Em modo Ligado"
+
+#: usr/local/www/system_advanced_misc.php:365
+#: usr/local/www/system_advanced_misc.php:412
+#: usr/local/www/system_advanced_misc.php:418
+msgid "On Battery Power Mode"
+msgstr "Em modo bateria"
+
+#: usr/local/www/bandwidth_by_ip.php:24
+msgid "Wrong Interface"
+msgstr "Interface errada"
+
+#: usr/local/www/services_dhcpv6.php:601
+msgid "Prefix Delegation Size"
+msgstr "Tamanho do prefixo de Delegação"
+
+#: usr/local/www/services_dhcpv6.php:846
+#, fuzzy
+msgid "DHCPv6 Static Mappings for this interface."
+msgstr "Mapeamento DHCPv6 estático"
+
+#: usr/local/www/system_authservers.php:217
+#: usr/local/www/system_authservers.php:219
+#, fuzzy
+msgid "RADIUS Timeout value must be numeric and positive."
+msgstr "Timeout deve ser um valor numérico"
+
+#: usr/local/www/system_authservers.php:731
+#: usr/local/www/system_authservers.php:773
+msgid "Authentication Timeout"
+msgstr "Limite de tempo de Autenticação"
+
+#: usr/local/www/system_authservers.php:734
+#: usr/local/www/system_authservers.php:776
+msgid "This value controls how long, in seconds, that the RADIUS server may take to respond to an authentication request."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:735
+#: usr/local/www/system_authservers.php:777
+#, fuzzy
+msgid "If left blank, the default value is 5 seconds."
+msgstr "NOTA: Se deixar em branco e um dominio padrão é definido, ele irá ser usado para esse valor."
+
+#: usr/local/www/system_authservers.php:736
+#: usr/local/www/system_authservers.php:778
+msgid "NOTE: If you are using an interactive two-factor authentication system, increase this timeout to account for how long it will take the user to receive and enter a token."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:80
+#: usr/local/www/system_advanced_firewall.php:82
+msgid "The Firewall Adaptive values must be set together."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:82
+#: usr/local/www/system_advanced_firewall.php:84
+#, fuzzy
+msgid "The Firewall Adaptive Start value must be an integer."
+msgstr "O valor de estado máximo do Firewall deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:85
+#: usr/local/www/system_advanced_firewall.php:87
+#, fuzzy
+msgid "The Firewall Adaptive End value must be an integer."
+msgstr "O valor de Máximo de Tabelas de Firewall deve ser um inteiro."
+
+#: usr/local/www/system_advanced_firewall.php:345
+#: usr/local/www/system_advanced_firewall.php:346
+#: usr/local/www/system_advanced_firewall.php:357
+#, fuzzy
+msgid "Firewall Adaptive Timeouts"
+msgstr "Adaptável"
+
+#: usr/local/www/system_advanced_firewall.php:347
+#: usr/local/www/system_advanced_firewall.php:348
+#: usr/local/www/system_advanced_firewall.php:359
+msgid "Timeouts for states can be scaled adaptively as the number of state table entries grows."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:350
+#: usr/local/www/system_advanced_firewall.php:351
+#: usr/local/www/system_advanced_firewall.php:362
+msgid "When the number of state entries exceeds this value, adaptive scaling begins. All timeout values are scaled linearly with factor (adaptive.end - number of states) / (adaptive.end - adaptive.start)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:354
+#: usr/local/www/system_advanced_firewall.php:355
+#: usr/local/www/system_advanced_firewall.php:366
+msgid "When reaching this number of state entries, all timeout values become zero, effectively purging all state entries immediately. This value is used to define the scale factor, it should not actually be reached (set a lower state limit, see below)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:356
+#: usr/local/www/system_advanced_firewall.php:357
+#: usr/local/www/system_advanced_firewall.php:368
+#, fuzzy
+msgid "Note: Leave this blank for the default(0)."
+msgstr "Nota: Deixe isso em branco para o padrão."
+
+#: usr/local/www/system_advanced_firewall.php:447
+#: usr/local/www/system_advanced_firewall.php:448
+#: usr/local/www/system_advanced_firewall.php:469
+#, fuzzy
+msgid "Bogon Networks"
+msgstr "Bloquear redes bogon"
+
+#: usr/local/www/system_advanced_firewall.php:450
+#: usr/local/www/system_advanced_firewall.php:451
+#: usr/local/www/system_advanced_firewall.php:472
+msgid "Update Frequency"
+msgstr "Frequencia de atualização"
+
+#: usr/local/www/system_advanced_firewall.php:453
+#: usr/local/www/system_advanced_firewall.php:454
+#: usr/local/www/system_advanced_firewall.php:475
+msgid "Monthly"
+msgstr "Mensalmente"
+
+#: usr/local/www/system_advanced_firewall.php:454
+#: usr/local/www/system_advanced_firewall.php:455
+#: usr/local/www/system_advanced_firewall.php:476
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: usr/local/www/system_advanced_firewall.php:455
+#: usr/local/www/system_advanced_firewall.php:456
+#: usr/local/www/system_advanced_firewall.php:477
+msgid "Daily"
+msgstr "Diariamente"
+
+#: usr/local/www/system_advanced_firewall.php:458
+#: usr/local/www/system_advanced_firewall.php:459
+#: usr/local/www/system_advanced_firewall.php:480
+msgid "The frequency of updating the lists of IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:227
+#: usr/local/www/services_captiveportal.php:243
+msgid "The NAS-Identifier must be 3-253 characters long and should only contain ASCII characters."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:593
+#: usr/local/www/services_captiveportal.php:609
+msgid "Allow only users/groups with 'Captive portal login' privilege set"
+msgstr "Permite somente usuários/grupos com previlegios de \"Login de Captive Portal\""
+
+#: usr/local/www/services_captiveportal.php:760
+#: usr/local/www/services_captiveportal.php:776
+#, fuzzy
+msgid "MAC authentication secret"
+msgstr "Segredo Compartilhado do Servidor de Autenticação 802.1X"
+
+#: usr/local/www/services_captiveportal.php:823
+#: usr/local/www/services_captiveportal.php:839
+msgid "Accounting Style"
+msgstr "Estilo de contabilidade"
+
+#: usr/local/www/services_captiveportal.php:824
+#: usr/local/www/services_captiveportal.php:840
+msgid "Invert Acct-Input-Octets and Acct-Output-Octets"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:825
+#: usr/local/www/services_captiveportal.php:841
+msgid "When this is enabled, data counts for RADIUS accounting packets will be taken from the client perspective, not the NAS. Acct-Input-Octets will represent download, and Acct-Output-Octets will represent upload."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:829
+#: usr/local/www/services_captiveportal.php:845
+msgid "NAS Identifier"
+msgstr "Identificador NAS"
+
+#: usr/local/www/services_captiveportal.php:831
+#: usr/local/www/services_captiveportal.php:847
+msgid "Specify a NAS identifier to override the default value"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:193 usr/local/www/pkg_mgr_install.php:189
+msgid "No packages are installed."
+msgstr "Nenhum pacote instalado."
+
+#: usr/local/www/interfaces_bridge_edit.php:154
+msgid "A member interface passed does not exist in configuration"
+msgstr ""
+
+#: usr/local/www/status_queues.php:150 usr/local/www/status_queues.php:172
+msgid "PPS"
+msgstr "PPS"
+
+#: usr/local/www/status_queues.php:152 usr/local/www/status_queues.php:174
+msgid "Borrows"
+msgstr "Emprestimos"
+
+#: usr/local/www/status_queues.php:153 usr/local/www/status_queues.php:175
+msgid "Suspends"
+msgstr "Suspensos"
+
+#: usr/local/www/status_queues.php:154 usr/local/www/status_queues.php:176
+msgid "Drops"
+msgstr "Descartados"
+
+#: usr/local/www/status_queues.php:155 usr/local/www/status_queues.php:177
+msgid "Length"
+msgstr "Tamanho"
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:51
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:78
+msgid "Int."
+msgstr "int."
+
+#: usr/local/www/widgets/widgets/log.widget.php:164
+#: usr/local/www/widgets/widgets/log.widget.php:168
+#: usr/local/www/widgets/widgets/log.widget.php:169
+msgid "IF"
+msgstr "SE"
+
+#: usr/local/www/widgets/widgets/log.widget.php:167
+#: usr/local/www/widgets/widgets/log.widget.php:171
+msgid "Prot"
+msgstr "Prot."
+
+#: usr/local/www/services_dnsmasq.php:199
+#: usr/local/www/services_dnsmasq.php:201
+#: usr/local/www/services_dnsmasq.php:222
+#, fuzzy
+msgid "DNS Query Forwarding"
+msgstr "encaminhando"
+
+#: usr/local/www/services_dnsmasq.php:202
+#: usr/local/www/services_dnsmasq.php:204
+#: usr/local/www/services_dnsmasq.php:225
+#, fuzzy
+msgid "Query DNS servers sequentially"
+msgstr "Servidores DNS"
+
+#: usr/local/www/services_dnsmasq.php:203
+#: usr/local/www/services_dnsmasq.php:205
+#: usr/local/www/services_dnsmasq.php:226
+#, php-format
+msgid "If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers sequentially in the order specified (<i>System - General Setup - DNS Servers</i>), rather than all at once in parallel. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:212
+#: usr/local/www/services_dnsmasq.php:214
+#: usr/local/www/services_dnsmasq.php:235
+msgid "Require domain"
+msgstr "Requer dominio"
+
+#: usr/local/www/services_dnsmasq.php:213
+#: usr/local/www/services_dnsmasq.php:215
+#: usr/local/www/services_dnsmasq.php:236
+#, php-format
+msgid "If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA queries for plain names, without dots or domain parts, to upstream name servers. If the name is not known from /etc/hosts or DHCP then a \"not found\" answer is returned. "
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:183
+msgid "A valid remote gateway IPv4 address must be specified or you need to change protocol to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:185
+msgid "A valid remote gateway IPv6 address must be specified or you need to change protocol to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:205
+msgid "There is a Phase 2 using IPv6, you cannot use IPv4."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:209
+msgid "There is a Phase 2 using IPv4, you cannot use IPv6."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1226
+msgid "IPv4 Local Network/s"
+msgstr "Rede(s) local(is) IPv4"
+
+#: usr/local/www/vpn_openvpn_server.php:1230
+msgid "These are the IPv4 networks that will be accessible from the remote endpoint. Expressed as a comma-separated list of one or more CIDR ranges. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1239
+msgid "IPv6 Local Network/s"
+msgstr "Rede(s) local(is) IPv6"
+
+#: usr/local/www/vpn_openvpn_server.php:1243
+msgid "These are the IPv6 networks that will be accessible from the remote endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1256
+msgid "These are the IPv4 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more CIDR ranges. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1270
+msgid "These are the IPv6 networks that will be routed through the tunnel, so that a site-to-site VPN can be established without manually changing the routing tables. Expressed as a comma-separated list of one or more IP/PREFIX. If this is a site-to-site VPN, enter the remote LAN/s here. You may leave this blank if you don't want a site-to-site VPN"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1405
+msgid "Topology"
+msgstr "Topologia"
+
+#: usr/local/www/vpn_openvpn_server.php:1415
+msgid "Allocate only one IP per client (topology subnet), rather than an isolated subnet per client (topology net30)."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1422
+msgid "Relevant when supplying a virtual adapter IP address to clients when using tun mode on IPv4."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1423
+msgid "Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/Android). Others may break if it is present, such as older versions of OpenVPN or clients such as Yealink phones."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:133
+msgid "A valid local network IPv4 address must be specified or you need to change Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:135
+msgid "A valid local network IPv6 address must be specified or you need to change Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:159
+msgid "A valid NAT local network IPv4 address must be specified or you need to change Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:161
+msgid "A valid NAT local network IPv6 address must be specified or you need to change Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:183
+msgid "A valid remote network IPv4 address must be specified or you need to change Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:185
+msgid "A valid remote network IPv6 address must be specified or you need to change Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "Mobile IPsec only supports Tunnel mode."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:287
+msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:289
+msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:210
+#, php-format
+msgid "You cannot set port %s to interface %s because this interface is a member of %s."
+msgstr ""
+
+#: usr/local/www/services_snmp.php:395
+msgid "UCD"
+msgstr "UCD"
+
+#: usr/local/www/services_snmp.php:397
+msgid "Regex"
+msgstr "Regex"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:560
+#: usr/local/www/interfaces.php:556 usr/local/www/interfaces.php:559
+msgid "This IPv4 address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:557 usr/local/www/interfaces.php:565
+#: usr/local/www/interfaces.php:561 usr/local/www/interfaces.php:564
+msgid "This IPv4 address conflicts with a Static Route."
+msgstr ""
+
+#: usr/local/www/interfaces.php:568 usr/local/www/interfaces.php:577
+#: usr/local/www/interfaces.php:573 usr/local/www/interfaces.php:576
+msgid "This IPv6 address is being used by another interface or VIP."
+msgstr ""
+
+#: usr/local/www/interfaces.php:572 usr/local/www/interfaces.php:582
+#: usr/local/www/interfaces.php:578 usr/local/www/interfaces.php:581
+msgid "This IPv6 address conflicts with a Static Route."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2651 usr/local/www/interfaces.php:2697
+#: usr/local/www/interfaces.php:2686 usr/local/www/interfaces.php:2722
+msgid "Note: The update frequency can be changed under System->Advanced Firewall/NAT settings."
+msgstr ""
+
+#: etc/inc/priv/user.priv.inc:6
+msgid "User - Services - Captive portal login"
+msgstr "Usuários - Serviços - Login Captive Portal"
+
+#: etc/inc/priv/user.priv.inc:7
+#, fuzzy
+msgid "Indicates whether the user is able to login on the captive portal."
+msgstr "Indica se esse usuário pode fazer login, por exemplo, via SSH."
+
+#: etc/inc/pkg-utils.inc:617 etc/inc/pkg-utils.inc:618
+#, fuzzy, php-format
+msgid "Package %s is not supported on this version."
+msgstr "Versão do Pacote"
+
+#: etc/inc/priv.defs.inc:732
+msgid "WebCfg - Services: Captive portal: Allowed Hostnames page"
+msgstr "WebCfg - Serviços: Captive portal: Hostnames Permitidos"
+
+#: etc/inc/priv.defs.inc:733 etc/inc/priv.defs.inc:739
+msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page."
+msgstr "Permite acesso a página 'Serviços: Captive porta: Hostnames Permitidos'"
+
+#: etc/inc/priv.defs.inc:738
+msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page"
+msgstr "WebCfg - Serviços: Captive portal: Edita Hostnames permitidos"
+
+#: etc/inc/priv.defs.inc:1136
+#, fuzzy
+msgid "WebCfg - System: User Manager: settings page"
+msgstr "WebCfg - Sistema: Gerenciador de Usuários: Página de Configurações"
+
+#: etc/inc/priv.defs.inc:1137
+#, fuzzy
+msgid "Allow access to the 'System: User Manager: settings' page."
+msgstr "Permitir acesso à página 'Sistema: Gerenciador de usuários: Página deConfigurações'."
+
+#: etc/inc/interfaces.inc:294
+#, fuzzy, php-format
+msgid "interface_qinq_configure called with invalid if.%s"
+msgstr "interface_qinq_configure called with if undefined.%s"
+
+#: etc/inc/interfaces.inc:401
+#, fuzzy
+msgid "Creating wireless clone interfaces..."
+msgstr "Criando outras interfaces clones sem fio..."
+
+#: etc/inc/interfaces.inc:1139 etc/inc/interfaces.inc:1141
+msgid "Wrong parameters used during interface_bring_down"
+msgstr ""
+
+#: etc/inc/services.inc:2013 etc/inc/services.inc:2053
+#: etc/inc/services.inc:2084 etc/inc/services.inc:2148
+#: etc/inc/services.inc:2198
+#, php-format
+msgid "Removed cron job for %s"
+msgstr "Removido entrada cron para %s"
+
+#: etc/inc/openvpn.inc:257
+#, fuzzy, php-format
+msgid "The field '%s' must contain a single valid %s CIDR range."
+msgstr "O campo '%s' deve conter um intervalo CIDR válido."
+
+#: etc/inc/openvpn.inc:269
+#, php-format
+msgid "The field '%s' must contain only valid %s CIDR range(s) separated by commas."
+msgstr ""
+
+#: etc/inc/vpn.inc:1780 etc/inc/vpn.inc:1793 etc/inc/vpn.inc:1790
+#: etc/inc/vpn.inc:1792
+#, php-format
+msgid "Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote Subnet '%3$s'. Reloading policy"
+msgstr "Removendo SPDs do túnel gw '%1$s'. Subrede local '%2$s' e Subrede remota '%3$s'. Recarregando politica"
+
+#: etc/inc/pfsense-utils.inc:938
+msgid "Disabling auto login was not possible."
+msgstr "Desabilitar auto-login não é possivel."
+
+#: etc/inc/pfsense-utils.inc:956
+msgid "Enabled console auto login, console menu is NOT password protected."
+msgstr "Habilita auto login do console, menu de console NÃO é protegido por senha."
+
+#: etc/inc/pfsense-utils.inc:958
+msgid "Disabled console auto login, console menu is password protected."
+msgstr "Desabilita auto login do console, o menu de console é protegido por senha."
+
+#: usr/local/www/system_gateways_edit.php:552
+#: usr/local/www/system_gateways_edit.php:582
+msgid " - Show advanced option"
+msgstr " - Mostra opções avançada"
+
+#: usr/local/www/services_dyndns_edit.php:302
+#: usr/local/www/services_dyndns_edit.php:303
+msgid "Verbose logging"
+msgstr "Log verboso"
+
+#: usr/local/www/services_dyndns_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:306
+msgid "verbose logging"
+msgstr "log verboso"
+
+#: usr/local/www/status_openvpn.php:278 usr/local/www/status_openvpn.php:339
+msgid "Bytes Rcvd"
+msgstr "Bytes Receb."
+
+#: usr/local/www/status_openvpn.php:385
+msgid "If you have custom options that override the management features of OpenVPN on a client or server, they will cause that OpenVPN instance to not work correctly with this status page."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1579
+#: usr/local/www/firewall_nat_edit.php:863
+#: usr/local/www/firewall_nat_out_edit.php:678
+#: usr/local/www/firewall_rules_edit.php:1590
+#: usr/local/www/firewall_nat_edit.php:864
+#: usr/local/www/firewall_rules_edit.php:1638
+msgid "Rule Information"
+msgstr "Informação de Regra"
+
+#: usr/local/www/firewall_rules_edit.php:1583
+#: usr/local/www/firewall_nat_edit.php:867
+#: usr/local/www/firewall_nat_out_edit.php:682
+#: usr/local/www/firewall_rules_edit.php:1594
+#: usr/local/www/firewall_nat_edit.php:868
+#: usr/local/www/firewall_rules_edit.php:1642
+msgid "Created"
+msgstr "Criado"
+
+#: usr/local/www/firewall_rules_edit.php:1591
+#: usr/local/www/firewall_nat_edit.php:875
+#: usr/local/www/firewall_nat_out_edit.php:690
+#: usr/local/www/firewall_rules_edit.php:1602
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_rules_edit.php:1650
+msgid "Updated"
+msgstr "Atualizado"
+
+#: usr/local/www/diag_logs_filter.php:163
+msgid "Source IP Address"
+msgstr "Endereço IP de origem"
+
+#: usr/local/www/diag_logs_filter.php:175
+#: usr/local/www/diag_logs_filter.php:255
+msgid "Quantity"
+msgstr "Quantidade"
+
+#: usr/local/www/diag_logs_filter.php:185
+msgid "Destination IP Address"
+msgstr "Endereço IP de Destino"
+
+#: usr/local/www/diag_logs_filter.php:193
+msgid "Protocol Flags"
+msgstr "Protocolos Marcados"
+
+#: usr/local/www/diag_logs_filter.php:203
+#: usr/local/www/diag_logs_filter.php:266
+#, php-format
+msgid "Matches %1$s regular expression%2$s."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:204
+msgid "Precede with exclamation (!) as first character to exclude match."
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:251
+msgid "Filter expresion"
+msgstr "Expressão de Filtro"
+
+#: usr/local/www/diag_dump_states.php:136
+msgid "Current total state count"
+msgstr "Contagem atual total do estado"
+
+#: usr/local/www/diag_dump_states.php:218
+msgid "States matching current filter"
+msgstr "Atual estados correspondentes ao filtro"
+
+#: usr/local/www/firewall_nat_edit.php:417
+msgid "NAT Port Forward"
+msgstr "Redirecionamento de Porta NAT"
+
+#: usr/local/www/status_graph.php:242
+msgid "Host Name or IP"
+msgstr "Nome de host ou IP"
+
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid "ECN friendly behavior"
+msgstr "comportamento amigável ECN"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:146
+#, fuzzy
+msgid "You cannot use the network address for this VIP"
+msgstr "Você não pode usar o endereço da rede no início do intervalo da subrede."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:148
+#, fuzzy
+msgid "You cannot use the broadcast address for this VIP"
+msgstr "Você não pode usar o endereço de broadcast no final do intervalo de subrede."
+
+#: usr/local/www/diag_packet_capture.php:204
+msgid "Promiscuous"
+msgstr "Promiscuo"
+
+#: usr/local/www/diag_packet_capture.php:207
+msgid "If checked, the"
+msgstr "se checado, o"
+
+#: usr/local/www/diag_packet_capture.php:207
+msgid "packet capture"
+msgstr "captura de pacote"
+
+#: usr/local/www/diag_packet_capture.php:207
+msgid "will be performed using promiscuous mode."
+msgstr "serão realizadas usando modo promiscuo."
+
+#: usr/local/www/diag_packet_capture.php:208
+msgid "Some network adapters do not support or work well in promiscuous mode."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:72 usr/local/www/diag_ping.php:67
+msgid "When using IPv4, the target host must be an IPv4 address or hostname."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:74 usr/local/www/diag_ping.php:69
+msgid "When using IPv6, the target host must be an IPv6 address or hostname."
+msgstr ""
+
+#: usr/local/www/diag_traceroute.php:164
+msgid "Using a source interface/IP address that does not match selected type (IPv4, IPv6) will result in an error or empty output."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1472
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1493
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1507
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1543
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1567
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1647
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1416
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1436
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1450
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1510
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1589
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1352
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1373
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1387
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1403
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1422
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1446
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1473
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1526
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1213
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1234
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1248
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1265
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1284
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1308
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1335
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1388
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1471
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1492
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1506
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1523
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1542
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1593
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1415
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1435
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1449
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1466
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1485
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1588
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1351
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1372
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1386
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1402
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1421
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1445
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1472
+#: usr/local/www/wizards/traffic_shaper_wizard.inc:1525
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1212
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1233
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1247
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1264
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1283
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1307
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1334
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc:1387
+msgid "Traffic Shaper Wizard"
+msgstr "Traffic Shaper Wizard"
+
+#: usr/local/www/wizards/openvpn_wizard.inc:614
+#: usr/local/www/wizards/openvpn_wizard.inc:629
+msgid "OpenVPN Wizard"
+msgstr "OpenVPN Wizard"
+
+#: usr/local/www/services_dhcp.php:274 usr/local/www/services_dhcp.php:275
+#, php-format
+msgid "The Captive Portal zone '%s' has Hard Timeout parameter set to a value bigger than Default lease time (%s)."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1026
+msgid "Signing request data"
+msgstr "Assinatura de dados pedido"
+
+#: usr/local/www/system_certmanager.php:1034
+msgid "Final certificate data"
+msgstr "Dados do certificado final"
+
+#: usr/local/www/system_advanced_admin.php:447
+#: usr/local/www/system_advanced_admin.php:468
+#, fuzzy
+msgid "When this is unchecked, access to the webConfigurator is protected against HTTP_REFERER redirection attempts. Check this box to disable this protection if you find that it interferes with webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from <a target='_blank' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr "Quando isso não estiver marcado, acesso ao webConfigurator está protegido contra tentativas de redirecionamento HTTP_REFERER. Marque essa caixa para desabilitar essa proteção se achar que isso interfere com o acesso ao webConfigurator em alguns casos específicos tais como quando usando scripts de terceiros para interagir com o pfSense. Mais informações sobre HTTP_REFERER estão disponíveis em <a target='_new' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+
+#: usr/local/www/system_advanced_misc.php:105
+#: usr/local/www/system_advanced_misc.php:106
+msgid "/tmp Size must be numeric and should not be less than 40MB."
+msgstr "Tamanho do /tmp deve ser número e não deve ser menor que 40Mb"
+
+#: usr/local/www/system_advanced_misc.php:108
+#: usr/local/www/system_advanced_misc.php:109
+msgid "/var Size must be numeric and should not be less than 60MB."
+msgstr "Tamanho do /var deve ser número e não deve ser menor que 60Mb"
+
+#: usr/local/www/system_advanced_misc.php:558
+#: usr/local/www/system_advanced_misc.php:576
+msgid "Skip rules when gateway is down"
+msgstr "Pule regras quando o gateway estiver caído"
+
+#: usr/local/www/system_advanced_misc.php:562
+#: usr/local/www/system_advanced_misc.php:580
+msgid "By default, when a rule has a specific gateway set, and this gateway is down, rule is created and traffic is sent to default gateway.This option overrides that behavior and the rule is not created when gateway is down"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:568
+#: usr/local/www/system_advanced_misc.php:586
+msgid "RAM Disk Settings (Reboot to Apply Changes)"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:572
+#: usr/local/www/system_advanced_misc.php:590
+msgid "Use RAM Disks"
+msgstr "Use discos RAM"
+
+#: usr/local/www/system_advanced_misc.php:575
+#: usr/local/www/system_advanced_misc.php:593
+msgid "Use memory file system for /tmp and /var"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:576
+#: usr/local/www/system_advanced_misc.php:594
+msgid "Set this if you wish to use /tmp and /var as RAM disks (memory file system disks) on a full install rather than use the hard disk. Setting this will cause the data in /tmp and /var to be lost at reboot, including log data. RRD and DHCP Leases will be retained."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:582
+#: usr/local/www/system_advanced_misc.php:600
+msgid "/tmp RAM Disk Size"
+msgstr "Tamanho do disco RAM /tmp"
+
+#: usr/local/www/system_advanced_misc.php:586
+#: usr/local/www/system_advanced_misc.php:604
+msgid "Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set lower than 40."
+msgstr "Configure o tamanho, em MB, para o disco RAM /tmp. Deixe em branco para 40Mb. Não configure valor melhor que 40."
+
+#: usr/local/www/system_advanced_misc.php:591
+#: usr/local/www/system_advanced_misc.php:609
+msgid "/var RAM Disk Size"
+msgstr "Tamanho do disco RAM /var"
+
+#: usr/local/www/system_advanced_misc.php:595
+#: usr/local/www/system_advanced_misc.php:613
+msgid "Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set lower than 60."
+msgstr "Configure o tamanho, em MB, para o disco RAM /var. Deixe em branco para 60Mb. Não configure valor melhor que 60."
+
+#: usr/local/www/system_advanced_misc.php:600
+#: usr/local/www/system_advanced_misc.php:618
+msgid "Periodic RRD Backup"
+msgstr "Backup periodico do RRD"
+
+#: usr/local/www/system_advanced_misc.php:616
+#: usr/local/www/system_advanced_misc.php:634
+msgid "Periodic DHCP Leases Backup"
+msgstr "Backup periodico das listas DHCP"
+
+#: usr/local/www/system_routes_edit.php:132
+#: usr/local/www/system_routes_edit.php:134
+#, php-format
+msgid "The alias (%s) has one or more FQDNs configured and cannot be used to configure a static route."
+msgstr ""
+
+#: usr/local/www/system_routes_edit.php:179
+#: usr/local/www/system_routes_edit.php:186
+#: usr/local/www/system_routes_edit.php:181
+#: usr/local/www/system_routes_edit.php:188
+#: usr/local/www/system_routes_edit.php:183
+#: usr/local/www/system_routes_edit.php:190
+#, php-format
+msgid "This network conflicts with address configured on interface %s."
+msgstr "Esta rede conflita com o endereço configurado na interface %s."
+
+#: usr/local/www/firewall_nat_out.php:117
+#: usr/local/www/firewall_nat_out.php:128
+#: usr/local/www/firewall_nat_out.php:141
+#: usr/local/www/firewall_nat_out.php:157
+#: usr/local/www/firewall_nat_out.php:178
+#: usr/local/www/firewall_nat_out.php:199
+#: usr/local/www/firewall_nat_out.php:214
+msgid "Manual Outbound NAT Switch"
+msgstr "Alteração Manual de Saída de NAT"
+
+#: usr/local/www/system_gateway_groups_edit.php:100
+#, fuzzy
+msgid "Changing name on a gateway group is not allowed."
+msgstr "Mudança de nome de gateway não é permitido."
+
+#: usr/local/www/system_gateway_groups_edit.php:150
+msgid "Edit gateway group"
+msgstr "Edita grupo de gateway"
+
+#: usr/local/www/system_gateway_groups_edit.php:229
+#, fuzzy
+msgid "Edit gateway group entry"
+msgstr "Edita grupo de gateway"
+
+#: usr/local/www/system_gateway_groups_edit.php:317
+#, fuzzy
+msgid "The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint"
+msgstr "O campo IP virtual seleciona qual IP (virtual) deve ser usado quando este grupo se aplica a um Dyndns, IPsec ou OpenVPN local"
+
+#: usr/local/www/services_captiveportal.php:198
+msgid "Hard timeout must be less or equal Default lease time set on DHCP Server"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:245
+#: usr/local/www/firewall_aliases_edit.php:244
+#, fuzzy, php-format
+msgid "You must provide a valid URL. Could not fetch usable data from '%s'."
+msgstr "Você deve fornecer uma URL válida. Não foi possível obter dados úteis."
+
+#: usr/local/www/firewall_aliases_edit.php:250
+#: usr/local/www/firewall_aliases_edit.php:249
+#, php-format
+msgid "URL '%s' is not valid."
+msgstr "URL '%s' não é válida."
+
+#: usr/local/www/firewall_aliases_edit.php:288
+#: usr/local/www/firewall_aliases_edit.php:287
+msgid "This alias is used on a static route and cannot contain FQDNs."
+msgstr ""
+
+#: usr/local/www/system_firmware_restorefullbackup.php:174
+#, fuzzy
+msgid "Could not locate any previous backups."
+msgstr "Não foi possível localizar nenhum dos backups anteriores."
+
+#: usr/local/www/system_firmware_restorefullbackup.php:182
+msgid "do not restore config.xml."
+msgstr "não restaure config.xml."
+
+#: usr/local/www/diag_dns.php:156
+msgid "Query Time"
+msgstr "Tempo de Consulta"
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:131
+msgid "Checking ..."
+msgstr "Checando ..."
+
+#: usr/local/www/services_dnsmasq.php:224
+#: usr/local/www/services_dnsmasq.php:245
+msgid "Do not forward private reverse lookups"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:225
+#: usr/local/www/services_dnsmasq.php:246
+#, php-format
+msgid "If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse DNS lookups (PTR) for private addresses (RFC 1918) to upstream name servers. Any entries in the Domain Overrides section forwarding private \"n.n.n.in-addr.arpa\" names to a specific server are still forwarded. If the IP to name is not known from /etc/hosts, DHCP or a specific domain override then a \"not found\" answer is immediately returned. "
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:212
+#: usr/local/www/system_advanced_network.php:211
+#, fuzzy
+msgid "All IPv6 traffic will be blocked by the firewall unless this box is checked."
+msgstr "Todos os IPv6 serão bloqueados a menos que essa opção esteja marcada."
+
+#: usr/local/www/system_advanced_network.php:213
+#: usr/local/www/system_advanced_network.php:212
+msgid "NOTE: This does not disable any IPv6 features on the firewall, it only blocks traffic."
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:234
+msgid "RRD/DHCP Backup"
+msgstr "Backup RRD/DHCP"
+
+#: usr/local/www/diag_nanobsd.php:236
+msgid "These options have been relocated to"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:236
+msgid "System > Advanced, Miscellaneous tab"
+msgstr "Sistema > Avançado, Aba Diversos"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:90
+#, fuzzy
+msgid "A valid IP address must be specified, or # for an exclusion or ! to not forward at all."
+msgstr "Um endereço IP válido deve ser especificado, ou # para uma exclusão."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+msgid "Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."
+msgstr ""
+
+#: usr/local/www/interfaces.php:517 usr/local/www/interfaces.php:513
+#: usr/local/www/interfaces.php:516
+#, fuzzy
+msgid "You can only have one interface configured in 6rd with same prefix."
+msgstr "Você somente pode ter uma interface configurada como %s ou 6rd."
+
+#: usr/local/www/interfaces.php:528 usr/local/www/interfaces.php:524
+#: usr/local/www/interfaces.php:527
+#, fuzzy, php-format
+msgid "You can only have one interface configured as 6to4."
+msgstr "Você somente pode ter uma interface configurada como %s ou 6to4."
+
+#: usr/local/www/interfaces.php:648 usr/local/www/interfaces.php:644
+#: usr/local/www/interfaces.php:649
+msgid "The MTU of a VLAN cannot be greater than that of its parent interface."
+msgstr ""
+
+#: usr/local/www/interfaces.php:663 usr/local/www/interfaces.php:659
+#: usr/local/www/interfaces.php:664
+#, php-format
+msgid "Interface %s (VLAN) has MTU set to a bigger value"
+msgstr ""
+
+#: etc/inc/easyrule.inc:118 etc/inc/easyrule.inc:301
+msgid "Easy Rule"
+msgstr "Regra Fácil"
+
+#: etc/inc/vpn.inc:1015 etc/inc/vpn.inc:1014 etc/inc/vpn.inc:1016
+#, php-format
+msgid "Ignoring IPsec racoon daemon reload since there are no tunnels on interface %s"
+msgstr ""
+
+#: etc/inc/auth.inc:1127 etc/inc/auth.inc:1162
+#, fuzzy, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s"
+msgstr "ERRO! Não foi possível logar no servidor %1$s como usuário %2$s."
+
+#: usr/local/www/system_gateways_edit.php:139
+#: usr/local/www/system_gateways_edit.php:167
+#, fuzzy, php-format
+msgid "The gateway address %1$s does not lie within one of the chosen interface's subnets."
+msgstr "O gateway endereço %1$ s não se encontram dentro da subrede da interface escolhida '%2$ s'."
+
+#: usr/local/www/diag_arp.php:342
+msgid "NOTE: Local IPv6 peers use"
+msgstr ""
+
+#: usr/local/www/diag_arp.php:342
+msgid "NDP"
+msgstr "NDP"
+
+#: usr/local/www/diag_arp.php:342
+msgid "instead of ARP"
+msgstr "em vez de ARP"
+
+#: usr/local/www/firewall_virtual_ip.php:128
+#: usr/local/www/firewall_virtual_ip.php:135
+#, fuzzy
+msgid "This entry cannot be deleted because it is still referenced by at least one Gateway."
+msgstr "Essa entrada não pode ser apagada porque ela ainda é referenciada por pelo menos um protocolo relay."
+
+#: usr/local/www/interfaces_gif_edit.php:169
+#, fuzzy
+msgid "The interface here serves as the local address to be used for the gif tunnel."
+msgstr "A interface aqui serve como o endereço local para ser usado para o túnel GRE."
+
+#: usr/local/www/services_dhcp.php:941 usr/local/www/services_dhcp.php:953
+msgid "This option persists even if DHCP server is disabled. Only the machines listed below will be able to communicate with the firewall on this NIC."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:381
+#, fuzzy
+msgid "Set the transmit hold count for Spanning Tree. This is the number of packets transmitted before being rate limited. The default is 6. The minimum is 1 and the maximum is 10."
+msgstr "Configure a contagem de espera de transmissão para a Ãrvore Expansível. Esse é o número de pacotes transmitidos antes que seja limitado a uma taxa. O padrão é 6. O mínimo é 1 e o máximo é 10."
+
+#: usr/local/www/services_dnsmasq.php:254
+msgid "Listen Port"
+msgstr "Porta de escuta"
+
+#: usr/local/www/services_dnsmasq.php:258
+msgid "The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:268
+msgid "Interface IPs used by the DNS Forwarder for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:288
+msgid "Strict Interface Binding"
+msgstr "Interface Associada"
+
+#: usr/local/www/services_dnsmasq.php:290
+msgid "If this option is set, the DNS forwarder will only bind to the interfaces containing the IP addresses selected above, rather than binding to all interfaces and discarding queries to other addresses."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:292
+msgid "NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to IPv6 addresses."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:523
+#: usr/local/www/firewall_nat_out_edit.php:561
+msgid "(leave blank for any)"
+msgstr "(deixe em branco para qualquer valor)"
+
+#: usr/local/www/interfaces.php:1900 usr/local/www/interfaces.php:1936
+#, php-format
+msgid "Enter a <b>hexadecimal</b> value between %x and %x here, default value is 0."
+msgstr ""
+
+#: etc/inc/shaper.inc:1232
+msgid "Codel Active Queue"
+msgstr "Fila ativa de Codel"
+
+#: etc/inc/pfsense-utils.inc:2537
+msgid "Turkish"
+msgstr "Turco"
+
+#: usr/local/www/system_gateways_edit.php:647
+msgid "The Frequency Probe interval must be less than the Down time, otherwise the gateway will seem to go down then come up again at the next probe."
+msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta."
+
+#: usr/local/www/system_gateways_edit.php:648
+msgid "The total time before a gateway is down is the product of the Frequency Probe and the Down fields. By default this is 1*10=10 seconds."
+msgstr "NOTA: O total de tempo antes de um gateway cair é o produto da frequencia de consultas e de quedas. Por padrão isso é 1*10=10 segundos."
+
+#: etc/inc/shaper.inc:2904 etc/inc/shaper.inc:2906
+msgid "IPV4 bit mask must be blank or numeric value between 1 and 32."
+msgstr ""
+
+#: etc/inc/shaper.inc:2907 etc/inc/shaper.inc:2909
+msgid "IPV6 bit mask must be blank or numeric value between 1 and 128."
+msgstr ""
+
+#: etc/inc/shaper.inc:3352 etc/inc/shaper.inc:3625 etc/inc/shaper.inc:3378
+#: etc/inc/shaper.inc:3651
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr ""
+"Se 'origem' ou 'destino' é escolhido, \n"
+"um pipe dinâmico com o tamanho de banda, atraso, perda de pacote e tamanho de fila dado acima serão \n"
+"criados para cada endereço IP de origem/destino encontrado, \n"
+"respectivamente. Isso faz com que seja possível especificar facilmente os limites de \n"
+"tamanho de banda por host."
+
+#: etc/inc/shaper.inc:3373 etc/inc/shaper.inc:3399
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per pipe."
+msgstr ""
+
+#: etc/inc/shaper.inc:3646 etc/inc/shaper.inc:3672
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per queue."
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:379
+#, fuzzy
+msgid "The RA server can optionally provide a domain search list. Use the semicolon character as separator"
+msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador"
+
+#: usr/local/www/system_gateways_edit.php:327
+#, fuzzy
+msgid "The probe interval needs to be a numeric value."
+msgstr "O intervalo de frequencia de consulta deve ser um valor númerico."
+
+#: usr/local/www/system_gateways_edit.php:330
+#, fuzzy
+msgid "The probe interval needs to be positive."
+msgstr "O intervalo de frequencia de consulta deve ser um valor positivo."
+
+#: usr/local/www/system_gateways_edit.php:348
+#, fuzzy
+msgid "The probe interval needs to be less than the down time setting."
+msgstr "O intervalo de frequencia de consulta deve ser menor que a configuraçõa de tempo de queda."
+
+#: usr/local/www/system_gateways_edit.php:627
+msgid "Probe Interval"
+msgstr "Intervalo de sonda"
+
+#: usr/local/www/system_gateways_edit.php:633
+#, fuzzy
+msgid "NOTE: The quality graph is averaged over seconds, not intervals, so as the probe interval is increased the accuracy of the quality graph is decreased."
+msgstr "NOTA: A gráfico de qualidade é uma média sobre segundos, não intervalos. assim como a consulta de frequencia é aumentada o gráfico de qualidade é diminuida."
+
+#: usr/local/www/system_gateways_edit.php:647
+#, fuzzy
+msgid "The probe interval must be less than the down time, otherwise the gateway will seem to go down then come up again at the next probe."
+msgstr "NOTA: O intervalo de frequencia de consulta deve ser menor que o tempo de queda, caso contrário vai parecer que o gateway caiu antes da próxima consulta."
+
+#: usr/local/www/system_gateways_edit.php:648
+msgid "The down time defines the length of time before the gateway is marked as down, but the accuracy is controlled by the probe interval. For example, if your down time is 40 seconds but on a 30 second probe interval, only one probe would have to fail before the gateway is marked down at the 40 second mark. By default, the gateway is considered down after 10 seconds, and the probe interval is 1 second, so 10 probes would have to fail before the gateway is marked down."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:125
+#, fuzzy
+msgid "The group name is longer than 16 characters."
+msgstr "O nome de usuário contém mais de 16 caractéres."
+
+#: usr/local/www/diag_logs_settings.php:155
+#, fuzzy
+msgid "WebGUI process is restarting."
+msgstr "Reiniciando httpd"
+
+#: usr/local/www/diag_logs_settings.php:281
+msgid "Log packets blocked by 'Block Bogon Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:284
+msgid "Log packets blocked by 'Block Private Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:290
+msgid "Log errors from the web server process."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:291
+msgid "Hint: If this is checked, errors from the lighttpd web server process for the GUI or Captive Portal will appear in the main system log."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:216
+msgid "Check this box for WCCP encapsulation version 2, or leave unchecked for version 1."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:477
+msgid "You can only specify the maximum number of established connections per host (advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:479
+msgid "You can only specify the maximum new connections / per second(s) (advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:481
+msgid "You can only specify the state timeout (advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:486
+msgid "You can only specify the maximum state entries (advanced option) for ICMP/TCP/UDP protocols."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:488
+msgid "You can only specify the maximum number of unique source hosts (advanced option) for ICMP/TCP/UDP protocols."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:490
+msgid "You can only specify the maximum state entries per host (advanced option) for ICMP/TCP/UDP protocols."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:495
+msgid "You can only specify the maximum state entries (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:497
+msgid "You can only specify the maximum number of unique source hosts (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:499
+msgid "You can only specify the maximum number of established connections per host (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:501
+msgid "You can only specify the maximum state entries per host (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:503
+msgid "You can only specify the maximum new connections / per second(s) (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:505
+msgid "You can only specify the state timeout (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:510
+msgid "You cannot specify the maximum state entries (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:512
+msgid "You cannot specify the maximum number of unique source hosts (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:514
+msgid "You cannot specify the maximum number of established connections per host (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:516
+msgid "You cannot specify the maximum state entries per host (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:518
+msgid "You cannot specify the maximum new connections / per second(s) (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:520
+msgid "You cannot specify the state timeout (advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1258
+msgid " Maximum state entries this rule can create (TCP/UDP/ICMP)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1259
+msgid " Maximum number of unique source hosts (TCP/UDP/ICMP)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1260
+#, fuzzy
+msgid " Maximum number of established connections per host (TCP only)"
+msgstr " Número máximo de conexões estabelecidas por host"
+
+#: usr/local/www/firewall_rules_edit.php:1261
+msgid " Maximum state entries per host (TCP/UDP/ICMP)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1270
+#, fuzzy
+msgid "Maximum new connections / per second(s) (TCP only)"
+msgstr "Máximo de novas conexões / por segundo(s)"
+
+#: usr/local/www/firewall_rules_edit.php:1273
+#, fuzzy
+msgid "State Timeout in seconds (TCP only)"
+msgstr "Tempo de espera de estado em segundos"
+
+#: usr/local/www/firewall_aliases.php:176
+msgid "URLs"
+msgstr "URLs"
+
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcp.php:907
+#, fuzzy
+msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as separator "
+msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:182
+#: usr/local/www/firewall_virtual_ip_edit.php:205
+#, fuzzy
+msgid "For this type of vip localhost is not allowed."
+msgstr "Para este tipo de VIP, um carp pai não é permitido."
+
+#: usr/local/www/system_certmanager.php:1195
+msgid "add or import certificate"
+msgstr "adicionar ou importar certificado"
+
+#: usr/local/www/system_certmanager.php:1195
+msgid "add certificate"
+msgstr "adicionar certificado"
+
+#: usr/local/www/system_advanced_admin.php:475
+msgid "BEAST Attack Protection"
+msgstr "Proteção de ataque BEAST"
+
+#: usr/local/www/system_advanced_admin.php:478
+msgid "Mitigate the BEAST SSL Attack"
+msgstr "Mitigando o ataque BEAST SSL"
+
+#: usr/local/www/system_advanced_admin.php:480
+msgid "When this is checked, the webConfigurator can mitigate BEAST SSL attacks. "
+msgstr "Quando isto está checado, o Webconfigurator pode mitigar ataques BEAST SSL."
+
+#: usr/local/www/system_advanced_admin.php:483
+#, php-format
+msgid "This option has been automatically disabled because a conflicting cryptographic accelerator card has been detected (%s)."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:485
+msgid "This option is off by default because Hifn accelerators do NOT work with this option, and the GUI will not function. It is possible that other accelerators have a similar problem that is not yet known/documented. More information on BEAST is available from <a target='_blank' href='https://en.wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack'>Wikipedia</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:426
+msgid "The powerd utility monitors the system state and sets various power control options accordingly. It offers four modes (maximum, minimum, adaptive and hiadaptive) that can be individually selected while on AC power or batteries. The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, min, adp, hadp. Maximum mode chooses the highest performance values. Minimum mode selects the lowest performance values to get the most power savings. Adaptive mode attempts to strike a balance by degrading performance when the system appears idle and increasing it when the system is busy. It offers a good balance between a small performance loss for greatly increased power savings. Hiadaptive mode is alike adaptive mode, but tuned for systems where performance and interactivity are more important than power consumption. It raises frequency faster, drops slower and keeps twice lower CPU load."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:522
+msgid "IPsec Reload on Failover"
+msgstr "Recarregue IPsec em Failover"
+
+#: usr/local/www/system_advanced_misc.php:525
+msgid "Force IPsec Reload on Failover"
+msgstr "Força releitura do IPsec em Failover"
+
+#: usr/local/www/system_advanced_misc.php:527
+msgid "In some circumstances using a gateway group as the interface for an IPsec tunnel does not function properly, and IPsec must be forcefully reloaded when a failover occurs. Because this will disrupt all IPsec tunnels, this behavior is disabled by default. Check this box to force IPsec to fully reload on failover."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:633
+#, fuzzy
+msgid "The DHCP server can optionally provide a domain search list. Use the semicolon character as separator"
+msgstr "O servidor DHCP pode, opcionalmente, fornecer uma lista de pesquisa de domínios. Use o caractere ponto e vírgula como separador"
+
+#: usr/local/www/system_authservers.php:504
+msgid "NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the LDAP server's SSL Certificate."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:695
+msgid "UTF8 Encode"
+msgstr "UTF8 Codificado"
+
+#: usr/local/www/system_authservers.php:703
+msgid "UTF8 encode LDAP parameters before sending them to the server. Required to support international characters, but may not be supported by every LDAP server."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:710
+msgid "Username Alterations"
+msgstr "Alteração de Nome de Usuário"
+
+#: usr/local/www/system_authservers.php:718
+msgid "Do not strip away parts of the username after the @ symbol, e.g. user@host becomes user when unchecked."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:93
+msgid "The Aliases Hostname Resolve Interval value must be an integer."
+msgstr "O valor do intervalo de resolução de hostname de Alias deve ser inteiro"
+
+#: usr/local/www/system_advanced_firewall.php:456
+msgid "Aliases Hostnames Resolve Interval"
+msgstr "Intervalo de resolução de Hostname de Aliases"
+
+#: usr/local/www/system_advanced_firewall.php:460
+msgid "Interval, in seconds, that will be used to resolve hostnames configured on aliases."
+msgstr "Intervalo, em segundos, deve ser usado para resolver hostnames configurados nos aliases"
+
+#: usr/local/www/system_advanced_firewall.php:462
+#, fuzzy
+msgid "Note: Leave this blank for the default (300s)."
+msgstr "Nota: Deixe isso em branco para o padrão."
+
+#: usr/local/www/firewall_aliases_edit.php:492
+#, fuzzy
+msgid "Enter as many ports as you wish. Port ranges can be expressed by separating with a colon."
+msgstr "Insira quantas portas você desejar. Intervalos de portas podem ser especificados utilizando dois pontos."
+
+#: usr/local/www/system_advanced_notifications.php:137
+#: usr/local/www/system_advanced_notifications.php:234
+msgid "Test Growl"
+msgstr "Teste Growl"
+
+#: usr/local/www/system_advanced_notifications.php:147
+#: usr/local/www/system_advanced_notifications.php:300
+msgid "Test SMTP"
+msgstr "Teste SMTP"
+
+#: usr/local/www/system_advanced_notifications.php:195
+msgid "Disable Growl Notifications"
+msgstr "Desabilita notificações Growl"
+
+#: usr/local/www/system_advanced_notifications.php:198
+msgid "Check this option to disable growl notifications but preserve the settings below."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:235
+#, fuzzy
+msgid "NOTE: A test notification will be sent even if the service is marked as disabled."
+msgstr "NOTA: Uma mensagem de teste será enviada se o serviço estiver marcado como desabilitado."
+
+#: usr/local/www/system_advanced_notifications.php:246
+msgid "Disable SMTP Notifications"
+msgstr "Desabilitar notificações SMTP"
+
+#: usr/local/www/system_advanced_notifications.php:249
+msgid "Check this option to disable SMTP notifications but preserve the settings below. Some other mechanisms, such as packages, may need these settings in place to function."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:301
+msgid "NOTE: A test message will be sent even if the service is marked as disabled."
+msgstr "NOTA: Uma mensagem de teste será enviada se o serviço estiver marcado como desabilitado."
+
+#: usr/local/www/services_rfc2136_edit.php:197
+msgid "Use Public IP"
+msgstr "Usa IP Público"
+
+#: usr/local/www/services_rfc2136_edit.php:200
+msgid "If the interface IP is private, attempt to fetch and use the public IP instead."
+msgstr ""
+
+#: usr/local/www/interfaces.php:597
+msgid "A valid alias IP address must be specified to reject DHCP Leases from."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1770
+msgid "Reject Leases From"
+msgstr "Rejeita listas de"
+
+#: usr/local/www/interfaces.php:1774
+msgid "If there is a certain upstream DHCP server that should be ignored, place the IP address or subnet of the DHCP server to be ignored here."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1775
+msgid "this is useful for rejecting leases from cable modems that offer private IPs when they lose upstream sync."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1808
+msgid "Use IPv4 connectivity as parent interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1811
+msgid "Request a IPv6 prefix/information through the IPv4 connectivity link"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1815
+msgid "Request only an IPv6 prefix"
+msgstr "Requesita somente um prefixo IPv6"
+
+#: usr/local/www/interfaces.php:1818
+msgid "Only request an IPv6 prefix, do not request an IPv6 address"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1267
+msgid "One moment please, reinstalling packages...\n"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1268
+msgid " >>> Trying to fetch package info..."
+msgstr ">>> Tentando buscar informações sobre o pacote..."
+
+#: etc/inc/pkg-utils.inc:1269
+msgid "Attempting to reinstall all packages"
+msgstr "Preparando para reinstalar todos os pacotes"
+
+#: etc/inc/pkg-utils.inc:1277
+msgid "Cannot reinstall packages: "
+msgstr "Não pode reinstalar pacotes:"
+
+#: etc/inc/pkg-utils.inc:1286
+msgid "List of packages to reinstall: "
+msgstr "Lista de pacotes para reinstalar:"
+
+#: etc/inc/pkg-utils.inc:1293
+msgid "Uninstalling package"
+msgstr "Desinstalando pacote"
+
+#: etc/inc/pkg-utils.inc:1295
+msgid "Finished uninstalling package"
+msgstr "Terminada desistalação de pacote"
+
+#: etc/inc/pkg-utils.inc:1296
+msgid "Reinstalling package"
+msgstr "Reinstalando pacote"
+
+#: etc/inc/pkg-utils.inc:1298
+msgid "Finished installing package"
+msgstr "Terminada a instalação do pacote"
+
+#: etc/inc/pkg-utils.inc:1301
+msgid "Finished reinstalling all packages."
+msgstr "Terminada a reinstalação de todos os pacotes."
+
+#: etc/inc/shaper.inc:2884
+msgid "Burst"
+msgstr "Explosão"
+
+#: etc/inc/shaper.inc:2894
+#, fuzzy
+msgid "Plr must be a value between 0 and 1."
+msgstr "Plr deve ser um inteiro entre 1 e 100."
+
+#: etc/inc/shaper.inc:3051
+#, fuzzy, php-format
+msgid "Burst for schedule %s must be an integer."
+msgstr "O valor de tamanho de banda para %s deve ser um inteiro."
+
+#: etc/inc/shaper.inc:3358
+msgid "Bandwidth is a rate (e.g. Mbit/s), burst is a total amount of data that will be transferred at full speed after an idle period."
+msgstr "Controle de banda é uma média (ex: Mbit/s), burst é o total de dados que será transferido na velocidade total apos um periodo de espera."
+
+#: /usr/local/www/system.php:334
+msgid ""
+"Enter IP addresses to be used by the system for DNS resolution. These are "
+"also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+msgstr ""
+"Digite o endereço de IP que deve ser usado para resolução de DNS do sistema."
+"Ele também será usado para o serviço de DHCP, Encaminhamento de DNS e para os clientes da VPN PPTP."
+
+#: /usr/local/www/guiconfig.inc:257
+msgid "The field %s contains invalid characters."
+msgstr "O campo %s contém caracteres inválidos."
+
+#: /usr/local/www/guiconfig.inc:263
+msgid "The field %s is required."
+msgstr "O campo %s é requerido."
+
+#: /usr/local/www/guiconfig.inc:881
+msgid "The provided variable is not an array."
+msgstr "A variável fornecida não é um array."
+
+#: /usr/local/www/guiconfig.inc:1061
+msgid "listing only first 10k items"
+msgstr "listando somente os primeiros 10k items"
+
+#: /usr/local/www/guiconfig.inc:435
+msgid "The changes have been applied successfully."
+msgstr "As alterações foram aplicadas com sucesso"
+
+#: /usr/local/www/fbegin.inc:119
+msgid "(assign)"
+msgstr "(associar)"
diff --git a/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo b/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo
new file mode 100644
index 0000000..bf252ab
--- /dev/null
+++ b/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.mo
Binary files differ
diff --git a/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po b/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po
new file mode 100644
index 0000000..3e9674a
--- /dev/null
+++ b/src/usr/local/share/locale/tr/LC_MESSAGES/pfSense.po
@@ -0,0 +1,34350 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-12-12 12:10-0200\n"
+"PO-Revision-Date: 2014-07-02 09:45+0200\n"
+"Last-Translator: technical <selim_guner2000@hotmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.1.6\n"
+
+#: etc/inc/array_intersect_key.inc:37
+msgid "Wrong parameter count for array_intersect_key()"
+msgstr ""
+"The DHCP Server can only be enabled on interfaces configured with static IP "
+"addresses"
+
+#: etc/inc/array_intersect_key.inc:45
+msgid "array_intersect_key() Argument #"
+msgstr "array_intersect_key() DeÄŸiÅŸken #"
+
+#: etc/inc/array_intersect_key.inc:46
+msgid " is not an array"
+msgstr " geçerli bir aralık değil"
+
+#: etc/inc/auth.inc:106
+msgid ""
+"Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/"
+"DNS_rebinding<br />Try accessing the router by IP address instead of by "
+"hostname."
+msgstr ""
+
+#: etc/inc/auth.inc:121
+msgid "Redirecting..."
+msgstr "Yönlendiriliyor..."
+
+#: etc/inc/auth.inc:121
+msgid "Redirecting to the dashboard..."
+msgstr "Anasayfa'ya yönlendiriliyor..."
+
+#: etc/inc/auth.inc:338 etc/inc/auth.inc:358 etc/inc/auth.inc:429
+#: etc/inc/auth.inc:458 etc/inc/auth.inc:514 etc/inc/auth.inc:648
+#: etc/inc/auth.inc:660
+#, php-format
+msgid "Running: %s"
+msgstr "Çalışan: %s "
+
+#: etc/inc/auth.inc:695 etc/inc/auth.inc:767 etc/inc/auth.inc:838
+#: etc/inc/auth.inc:1093
+#, php-format
+msgid "ERROR! Could not connect to server %s."
+msgstr "HATA! Sunucuya bağlantı kurulamadı %s."
+
+#: etc/inc/auth.inc:713
+#, php-format
+msgid "LDAP: Could not lookup CA by reference for host %s."
+msgstr "LDAP: %s hostu için sertifika otoritelerine referansla bakılamaz."
+
+#: etc/inc/auth.inc:825
+msgid ""
+"ERROR! ldap_get_user_ous() backed selected with no LDAP authentication "
+"server defined."
+msgstr ""
+"HATA! ldap_get_user_ous() desteklenen LDAP kimlik doÄŸrulama sunucusu "
+"seçilmedi."
+
+#: etc/inc/auth.inc:852
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s."
+msgstr "HATA! ldap_get_user_ous() %s sunucusuna anonim bağlanamadı."
+
+#: etc/inc/auth.inc:857
+#, php-format
+msgid "ERROR! ldap_get_user_ous() could not bind to server %s."
+msgstr "HATA! ldap_get_user_ous() %s sunucusuna bağlanamadı."
+
+#: etc/inc/auth.inc:953
+#, php-format
+msgid "ERROR! ldap_get_groups() Could not connect to server %s."
+msgstr "HATA! ldap_get_groups() %s sunucusuna bağlantı kuramadı."
+
+#: etc/inc/auth.inc:966
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s."
+msgstr "HATA! ldap_get_groups() %s sunucusuna anonim bağlanamadı."
+
+#: etc/inc/auth.inc:971
+#, php-format
+msgid "ERROR! ldap_get_groups() could not bind to server %s."
+msgstr "HATA! ldap_get_groups() %s sunucusuna bağlanamadı."
+
+#: etc/inc/auth.inc:1072
+msgid ""
+"ERROR! ldap_backed() called with no LDAP authentication server defined. "
+"Defaulting to local user database. Visit System -> User Manager."
+msgstr ""
+"HATA! ldap_backed() tanımlanmış bir LDAP kimlik doğrulama sunucusu ile "
+"çağrılamadı. Yerel kullanıcı veritabanı varsayılan olarak alınacak. Sistem -"
+"> Kullanıcı Yönetmi'ni ziyaret edin."
+
+#: etc/inc/auth.inc:1075
+msgid "ERROR! ldap_backed() called with no LDAP authentication server defined."
+msgstr ""
+"HATA! ldap_backed() tanımlanan hiçbir LDAP kimlik doğrulama sunucusuyla "
+"çağrılamadı."
+
+#: etc/inc/auth.inc:1109
+#, php-format
+msgid "ERROR! Could not bind to server %s."
+msgstr "HATA! %s Sunucuya bağlanamıyor."
+
+#: etc/inc/auth.inc:1127
+#, php-format
+msgid "Now Searching for %s in directory."
+msgstr "%s Dizini içerisinde aranıyor."
+
+#: etc/inc/auth.inc:1135
+#, php-format
+msgid "Now Searching in server %1$s, container %2$s with filter %3$s."
+msgstr "%1$s Sunucusunda, %3$s. filitresi ile %2$s barındırıcıda aranıyor."
+
+#: etc/inc/auth.inc:1146
+#, php-format
+msgid "Search resulted in error: %s"
+msgstr "Arama hatalı sonuçlandı: %s"
+
+#: etc/inc/auth.inc:1162
+msgid "ERROR! Either LDAP search failed, or multiple users were found."
+msgstr "HATA! LDAP arama başarısız yada birden fazla kullanıcı bulundu."
+
+# 89%
+#: etc/inc/auth.inc:1169
+#, php-format
+msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s"
+msgstr "HATA ! Sunucu'ya %1$s kullanıcı olarak %2$s giriş yapılamadı: %3$s"
+
+#: etc/inc/auth.inc:1176
+#, php-format
+msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s."
+msgstr ""
+"DN = %3$s ile LDAP %2$s sunucusu üzerinden başarıyla giriş yapıldı %1$s."
+
+#: etc/inc/auth.inc:1211
+#, php-format
+msgid "Radius start: %s<br />\n"
+msgstr ""
+
+#: etc/inc/auth.inc:1222
+#, php-format
+msgid "Radius send failed: %s<br />\n"
+msgstr ""
+
+#: etc/inc/auth.inc:1228
+#, php-format
+msgid "Radius Auth succeeded"
+msgstr "Radius kimlik doğrulaması başarılı"
+
+#: etc/inc/auth.inc:1233
+#, php-format
+msgid "Radius Auth rejected"
+msgstr "Raidus Kimlik Doğrulaması reddedildi"
+
+#: etc/inc/auth.inc:1276 etc/inc/auth.inc:1291
+msgid "Local Database"
+msgstr "Yerel Veritabanı"
+
+#: etc/inc/auth.inc:1380
+#, php-format
+msgid "Successful login for user '%1$s' from: %2$s"
+msgstr "'%1$s' dan: %2$s Kullanıcısının oturum açması başarılı"
+
+#: etc/inc/auth.inc:1433
+#, php-format
+msgid "Session timed out for user '%1$s' from: %2$s"
+msgstr "'%1$s' dan: %2$s kullanıcısı için oturum zamanı aşıldı"
+
+#: etc/inc/auth.inc:1435
+#, php-format
+msgid "User logged out for user '%1$s' from: %2$s"
+msgstr "Kullanıcı '%1$s' dan: %2$s oturum kapattı"
+
+#: etc/inc/authgui.inc:75
+msgid "No page assigned to this user! Click here to logout."
+msgstr ""
+"Bu kullanıcıya sayfa atanamadı! Oturumu kapatmak için buraya tıklayınız."
+
+#: etc/inc/authgui.inc:105
+#, php-format
+msgid "Error: %1$s Description: %2$s"
+msgstr "Hata: %1$s Açıklama: %2$s"
+
+#: etc/inc/authgui.inc:168
+msgid "unknown reason"
+msgstr "bilinmeyen sebep"
+
+#: etc/inc/authgui.inc:169
+#, php-format
+msgid "Invalid login (%s)."
+msgstr "(%s) geçersiz oturum açma."
+
+#: etc/inc/authgui.inc:174
+#, php-format
+msgid "This device is currently being maintained by: %s."
+msgstr "Bu cihaz şu anda %s tarafından bakıma alındı."
+
+#: etc/inc/authgui.inc:245 etc/inc/authgui.inc:308
+msgid "Login"
+msgstr "GiriÅŸ"
+
+#: etc/inc/authgui.inc:273
+msgid ""
+"You are accessing this router by an IP address not configured locally, which "
+"may be forwarded by NAT or other means. <br /><br />If you did not setup "
+"this forwarding, you may be the target of a man-in-the-middle attack."
+msgstr ""
+
+#: etc/inc/authgui.inc:282
+msgid "Username:"
+msgstr "Kullanıcı adı:"
+
+#: etc/inc/authgui.inc:289 usr/local/www/diag_backup.php:693
+#: usr/local/www/system_authservers.php:655
+msgid "Password:"
+msgstr "Parola:"
+
+#: etc/inc/authgui.inc:296
+msgid "Enter username and password to login."
+msgstr "Giriş yapmak için kullanıcı adı ve parola girin."
+
+#: etc/inc/authgui.inc:302
+msgid "Your browser must support cookies to login."
+msgstr "Tarayıcınız oturum açmak için çerezleri kabul etmeli."
+
+#: etc/inc/captiveportal.inc:1388
+#, php-format
+msgid "Error: cannot open '%s' in captiveportal_write_elements()%s"
+msgstr "Hata: captiveportal_write_elements()%s içindeki '%s' açılamadı"
+
+#: etc/inc/config.console.inc:59
+msgid "DANGER! WARNING! ACHTUNG!"
+msgstr "TEHLIKE! UYARI! DÄ°KKAT!"
+
+#: etc/inc/config.console.inc:60
+#, php-format
+msgid "%s requires *AT LEAST* %s RAM to function correctly.%s"
+msgstr "%s ihtiyaç duyar *EN AZ* %s RAM %s 'in düzgün işlev görmesi için"
+
+#: etc/inc/config.console.inc:61
+#, php-format
+msgid "Only (%s) MB RAM has been detected, with (%s) available to %s.%s"
+msgstr ""
+
+#: etc/inc/config.console.inc:62
+msgid "Press ENTER to continue."
+msgstr "Devam etmek için ENTER'a basın."
+
+#: etc/inc/config.console.inc:84 etc/inc/config.console.inc:484
+msgid "No interfaces found!"
+msgstr "Arabirimler bulunamadı!"
+
+#: etc/inc/config.console.inc:182
+msgid "VLAN interfaces:"
+msgstr "VLAN Arabirimleri:"
+
+#: etc/inc/config.console.inc:201
+msgid "Enter the WAN interface name or 'a' for auto-detection:"
+msgstr ""
+"WAN arabiriminin adını giriniz ya da otomatik algılaması için 'a' harfine "
+"basınız:"
+
+#: etc/inc/config.console.inc:209 etc/inc/config.console.inc:234
+#: etc/inc/config.console.inc:266 etc/inc/config.console.inc:507
+#, php-format
+msgid "%sInvalid interface name '%s'%s"
+msgstr "%s Geçersiz arabirim adı '%s'%s"
+
+#: etc/inc/config.console.inc:216
+#, php-format
+msgid ""
+"%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this "
+"enables full Firewalling/NAT mode.%s(or nothing if finished):%s"
+msgstr ""
+"%sLAN arabiriminin adını giriniz ya da otomatik algılanması için 'a' harfine "
+"basınız %sNOT: Bu %sGüvenlik Duvarı/NAT kipini etkinleştirir(yada hiçbir şey "
+"bitmemiÅŸ ise):%s"
+
+#: etc/inc/config.console.inc:251
+#, php-format
+msgid "%sOptional interface %s description found: %s"
+msgstr "%sOpsiyonel arabirim %s Açıklaması bulundu: %s"
+
+#: etc/inc/config.console.inc:253
+#, php-format
+msgid ""
+"%sEnter the Optional %s interface name or 'a' for auto-detection%s(or "
+"nothing if finished):%s"
+msgstr ""
+"%sİsteğe bağlı%s arabirim adını girin yada otomatik algılama için 'a' ya "
+"basın%s(yada tamamlandıysa hiçbirşey yapmayın):%s"
+
+#: etc/inc/config.console.inc:260
+msgid "Optional"
+msgstr "Seçimsel"
+
+#: etc/inc/config.console.inc:294
+msgid "The interfaces will be assigned as follows:"
+msgstr "Arabirimler aşağıdaki gibi atanacaklar:"
+
+#: etc/inc/config.console.inc:408
+#, php-format
+msgid "%sWriting configuration..."
+msgstr "%s Yapılandırma uygulanıyor..."
+
+#: etc/inc/config.console.inc:410
+#, php-format
+msgid "done.%s"
+msgstr "tamam.%s"
+
+#: etc/inc/config.console.inc:417
+msgid "One moment while we reload the settings..."
+msgstr "Ayarlar yüklenirken biraz bekleyiniz..."
+
+#: etc/inc/config.console.inc:418
+msgid " done!"
+msgstr " tamam!"
+
+#: etc/inc/config.console.inc:438
+#, php-format
+msgid "Detected link-up on interface %s.%s"
+msgstr "%s.%s arabirimindeki bağlantı algılandı"
+
+#: etc/inc/config.console.inc:443
+#, php-format
+msgid "No link-up detected.%s"
+msgstr "%s için bağlantı algılanmadı"
+
+#: etc/inc/config.console.inc:482
+msgid "VLAN Capable interfaces:"
+msgstr "VLAN beceri arabirimleri:"
+
+#: etc/inc/config.console.inc:497
+msgid "No VLAN capable interfaces detected."
+msgstr "VLAN destekli arabirim algılanmadı."
+
+#: etc/inc/config.console.inc:501
+msgid ""
+"Enter the parent interface name for the new VLAN (or nothing if finished):"
+msgstr ""
+"Yeni VLAN için Üst arabirim adını giriniz (veya bittiyse herhangi birşey "
+"yapmayınız):"
+
+#: etc/inc/config.console.inc:514
+msgid "Enter the VLAN tag (1-4094):"
+msgstr "VLAN etiketi giriniz(1-4094):"
+
+#: etc/inc/config.console.inc:518
+#, php-format
+msgid "%sInvalid VLAN tag '%s'%s"
+msgstr "%sGeçersiz VLAN etiketi '%s'%s"
+
+#: etc/inc/config.inc:96
+msgid "Upgrading m0n0wall configuration to pfSense... "
+msgstr "m0n0wall yapılandırması, pfsense yapılandırmasına yükseltiliyor..."
+
+#: etc/inc/config.inc:99
+msgid "ERROR! Could not convert m0n0wall -> pfsense in config.xml"
+msgstr "HATA! m0n0wall -> pfsense config.xml çevirisi yapılamadı"
+
+#: etc/inc/config.inc:128
+msgid "CDROM build"
+msgstr "CDROM oluÅŸtur"
+
+#: etc/inc/config.inc:129 etc/inc/config.inc:130
+msgid "CFG:"
+msgstr "CFG:"
+
+#: etc/inc/config.inc:131
+msgid "TYPE:"
+msgstr "TÃœR:"
+
+#: etc/inc/config.inc:146 etc/inc/config.inc:161
+#, php-format
+msgid "Found configuration on %s.%s"
+msgstr "%s.%s üzerinde yapılandırma bulundu"
+
+#: etc/inc/config.inc:175 etc/inc/config.inc:176 etc/inc/config.lib.inc:105
+#: etc/inc/config.lib.inc:106 etc/inc/config.lib.inc:249
+#: etc/inc/config.lib.inc:271 etc/inc/config.lib.inc:272
+msgid "No config.xml found, attempting last known config restore."
+msgstr "config.xml bulunamadı, bilinen son yapılandırma geri yükleniyor."
+
+#: etc/inc/config.inc:179
+msgid "No config.xml or config backups found, resetting to factory defaults."
+msgstr ""
+"config.xml veya yapılandırma yedeği bulunamadı, fabrika ayarlarına "
+"sıfırlanıyor."
+
+#: etc/inc/config.lib.inc:79
+msgid "Config.xml unlocked."
+msgstr "Config.xml kilitli deÄŸil."
+
+#: etc/inc/config.lib.inc:82
+msgid "Invalid password entered. Please try again."
+msgstr "Geçersiz parola girişi yaptınız. Lütfen tekrar deneyiniz."
+
+#: etc/inc/config.lib.inc:110 etc/inc/config.lib.inc:140
+#: etc/inc/config.lib.inc:276
+msgid ""
+"Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."
+msgstr ""
+"Config.xml bozulmuş ve boyutu 0 bayt. Bir önceki yedekleme geri yüklenemedi."
+
+#: etc/inc/config.lib.inc:138 etc/inc/config.lib.inc:149
+#: etc/inc/config.lib.inc:548
+msgid "Could not restore config.xml."
+msgstr "config.xml dosyası onarılamadı."
+
+#: etc/inc/config.lib.inc:214 etc/inc/config.lib.inc:215
+#, php-format
+msgid "%1$s is restoring the configuration %2$s"
+msgstr "%2$s yapılandırmasına %1$s geri yükleniyor"
+
+#: etc/inc/config.lib.inc:237
+msgid "Resetting factory defaults..."
+msgstr "Fabrika ayarlarına sıfırlanıyor..."
+
+#: etc/inc/config.lib.inc:240
+msgid ""
+"No XML configuration file found - using factory defaults.\n"
+"Make sure that the configuration floppy disk with the conf/config.xml\n"
+"file is inserted. If it isn't, your configuration changes will be lost\n"
+"on reboot.\n"
+msgstr ""
+"XML yapılandırma dosyası bulunamadı - fabrika ayarları kullanılıyor.\n"
+"floppy disketin içinde conf/config.xml bulunduğundan emin olun.\n"
+"Aksi taktirde yaptğınız yapılandırma değişiklikleri sistem yeniden\n"
+"başladığında kaybolacak.\n"
+
+#: etc/inc/config.lib.inc:253
+#, php-format
+msgid "XML configuration file not found. %s cannot continue booting."
+msgstr "XML yapılandırma dosyası bulunmadı. %s ön yüklemeye devam edilemiyor."
+
+#: etc/inc/config.lib.inc:259
+msgid ""
+"Last known config found and restored. Please double check your "
+"configuration file for accuracy."
+msgstr ""
+"Son bilinen yapılandırma dosyası bulundu ve geri yüklendi. Çift tıklayarak "
+"yapılandırmanın doğruluğunu kontrol ediniz."
+
+#: etc/inc/config.lib.inc:263
+msgid "Could not find a usable configuration file! Exiting...."
+msgstr ""
+
+# elektrik gitmelerinde karşımıza gelen konsol yazısı. bildiğiniz checkdisk ile aynı mantıkta bir komut çalıştırıyor dirty yerine başka birşey kullanılabilinir.
+#: etc/inc/config.lib.inc:323
+msgid "Disk is dirty. Running fsck -y"
+msgstr "Disk kirli. fsck -y Çalıştırılıyor"
+
+#: etc/inc/config.lib.inc:334
+msgid "File system is dirty. Launching FSCK for /"
+msgstr "Dosya sistemi kirli. FSCK başlatılıyor /"
+
+#: etc/inc/config.lib.inc:388
+#, php-format
+msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes"
+msgstr ""
+"Yapılandırma yükseltmesine %s başla, 15 dakika zaman aşımı süresi ayarla"
+
+#: etc/inc/config.lib.inc:399 etc/inc/config.lib.inc:400
+msgid "Updated bogon update frequency to 3am"
+msgstr "Sahte IP/Ağ güncellenecek, güncelleme sıklığı saati 03:00"
+
+#: etc/inc/config.lib.inc:431
+#, php-format
+msgid "Ended Configuration upgrade at %s"
+msgstr "Yapılandırma yükseltmesi %s de bitti"
+
+#: etc/inc/config.lib.inc:434
+#, php-format
+msgid "Upgraded config version level from %1$s to %2$s"
+msgstr "Yapılandırma sürümü %1$s dan %2$s yükseltildi"
+
+#: etc/inc/config.lib.inc:525
+msgid "WARNING: Config contents could not be save. Could not open file!"
+msgstr "UYARI: Yapılandırma içeriği kaydedilemedi. Dosya açılamadı!"
+
+#: etc/inc/config.lib.inc:527
+#, php-format
+msgid "Unable to open %s/config.xml for writing in write_config()%s"
+msgstr "write_config()%s yazmak için %s/config.xml açılamadı"
+
+#: etc/inc/config.lib.inc:633
+msgid "Reverted to"
+msgstr "Ters çevirilen"
+
+#: etc/inc/config.lib.inc:648
+msgid "Installing configuration..."
+msgstr "Yapılandırma kuruluyor..."
+
+#: etc/inc/config.lib.inc:650
+msgid "Installing configuration ...."
+msgstr "Yapılandırma kuruluyor ...."
+
+#: etc/inc/config.lib.inc:701
+msgid "XML error: unable to open file"
+msgstr "XML hata: dosya açılamadı"
+
+#: etc/inc/config.lib.inc:707
+#, php-format
+msgid "%1$s at line %2$d"
+msgstr "%1$s satırı %2$d"
+
+#: etc/inc/config.lib.inc:759 etc/inc/config.lib.inc:761
+#, php-format
+msgid "The backup cache file %s is corrupted. Unlinking."
+msgstr "Yedek ön bellek dosyası %s bozuk. bağlantı bırıkılıyor."
+
+# bu çeviride türkçe karakter kullanmayınız (yaptı) kelimesi hariç herhangi bir yere türkçe karakter girince tüm pfSense nin sorun vermesine sebep oluyor (TechnicaL)
+#
+# - AydinY: "yaptı" kelimesi türkçe olduğu zaman da config.xml de işlemi geri alıyor.
+#: etc/inc/config.lib.inc:901
+#, php-format
+msgid "%s made unknown change"
+msgstr "%s bilinmeyen degisiklik yapti"
+
+#: etc/inc/easyrule.inc:118
+msgid "Easy Rule: Blocked from Firewall Log View"
+msgstr "Kolay Kural: Engellenen Firewall Günlüklerini Görüntüle"
+
+#: etc/inc/easyrule.inc:119 etc/inc/easyrule.inc:302
+msgid "Easy Rule"
+msgstr "Kolay Kural"
+
+#: etc/inc/easyrule.inc:179 etc/inc/easyrule.inc:187
+msgid "Entry added"
+msgstr "GiriÅŸ eklendi"
+
+#: etc/inc/easyrule.inc:184
+msgid "Hosts blocked from Firewall Log view"
+msgstr "Firewall günlük görüntüleyicideki bloke edilen ana bağlantılar"
+
+#: etc/inc/easyrule.inc:264
+msgid "Easy Rule: Passed from Firewall Log View"
+msgstr "Kolay Kural: Geçiş yapan Güvenlik Duvarı Günlüklerini Görüntüle"
+
+#: etc/inc/easyrule.inc:319
+msgid "Tried to block invalid IP:"
+msgstr "Engellenmeye çalışılan IP geçersiz:"
+
+#: etc/inc/easyrule.inc:323
+msgid "Invalid interface for block rule:"
+msgstr "Engeleme kuralı için gerçersiz arabirim:"
+
+#: etc/inc/easyrule.inc:326
+msgid "Host added successfully"
+msgstr "Host başarıyla eklendi"
+
+#: etc/inc/easyrule.inc:328
+msgid "Failed to create block rule, alias, or add host."
+msgstr ""
+"Grup ya da Ana bilgisayar engelleme kuralı oluşturma işlemi başarısız oldu."
+
+#: etc/inc/easyrule.inc:331
+msgid "Tried to block but had no host IP or interface"
+msgstr "Engellenmeye çalışıldı fakat host ip adresi ya da arabirim bulunamadı"
+
+#: etc/inc/easyrule.inc:333
+msgid "Unknown block error."
+msgstr "Bilinmeyen engelleme hatası."
+
+#: etc/inc/easyrule.inc:344
+msgid "Invalid interface for pass rule:"
+msgstr "Geçiş kuralı için geçersiz arabirim:"
+
+#: etc/inc/easyrule.inc:347
+msgid "Invalid protocol for pass rule:"
+msgstr "Geçiş kuralı için geçersiz protokol:"
+
+#: etc/inc/easyrule.inc:350
+msgid "Tried to pass invalid source IP:"
+msgstr "Geçiş için geçersiz kaynak IP adresi denendi:"
+
+#: etc/inc/easyrule.inc:353
+msgid "Tried to pass invalid destination IP:"
+msgstr "Geçiş için geçersiz hedef IP adresi denendi:"
+
+#: etc/inc/easyrule.inc:357
+msgid "Missing destination port:"
+msgstr "Hedef port eksik:"
+
+#: etc/inc/easyrule.inc:360
+msgid "Tried to pass invalid destination port:"
+msgstr "Geçiş için geçersiz hedef port adresi denendi:"
+
+#: etc/inc/easyrule.inc:367
+msgid "Successfully added pass rule!"
+msgstr "Geçiş kuralı başarılı bir şekilde eklendi!"
+
+#: etc/inc/easyrule.inc:369
+msgid "Failed to add pass rule."
+msgstr "Geçiş kuralı ekleme işlemi başarısız oldu."
+
+#: etc/inc/easyrule.inc:372
+msgid "Missing parameters for pass rule."
+msgstr "Geçiş kuralı için parametre(ler) eksik."
+
+#: etc/inc/easyrule.inc:374
+msgid "Unknown pass error."
+msgstr "Bilinmeyen geçiş hatası."
+
+#: etc/inc/filter.inc:62 etc/inc/filter.inc:92
+#: usr/local/www/firewall_nat_1to1_edit.php:364
+#: usr/local/www/firewall_nat_1to1_edit.php:437
+#: usr/local/www/firewall_nat_edit.php:569
+#: usr/local/www/firewall_nat_edit.php:616
+#: usr/local/www/firewall_nat_edit.php:629
+#: usr/local/www/firewall_nat_edit.php:658
+#: usr/local/www/firewall_nat_out_edit.php:540
+#: usr/local/www/firewall_nat_out_edit.php:590
+#: usr/local/www/firewall_rules_edit.php:1049
+#: usr/local/www/firewall_rules_edit.php:1110
+#: usr/local/www/firewall_rules_edit.php:1123
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1152
+#: usr/local/www/firewall_rules_edit.php:1209
+#: usr/local/www/firewall_rules_edit.php:1222
+#: usr/local/www/services_captiveportal_hostname.php:180
+#: usr/local/www/services_captiveportal_hostname.php:187
+msgid "any"
+msgstr "herhangi biri"
+
+#: etc/inc/filter.inc:63 etc/inc/filter.inc:97
+msgid "Echo request"
+msgstr "Yankı isteği"
+
+#: etc/inc/filter.inc:64 etc/inc/filter.inc:98
+msgid "Echo reply"
+msgstr "Yankı yanıtı"
+
+#: etc/inc/filter.inc:65 etc/inc/filter.inc:93
+msgid "Destination unreachable"
+msgstr "Hedef ulaşılabilir değil"
+
+#: etc/inc/filter.inc:66
+msgid "Source quench"
+msgstr "Kaynak söndürme"
+
+#: etc/inc/filter.inc:67 etc/inc/filter.inc:109
+msgid "Redirect"
+msgstr "Yönlendirme"
+
+#: etc/inc/filter.inc:68
+msgid "Alternate Host"
+msgstr "Alternatif Host"
+
+#: etc/inc/filter.inc:69 etc/inc/filter.inc:106
+msgid "Router advertisement"
+msgstr "Yönlendirici ilanı"
+
+#: etc/inc/filter.inc:70 etc/inc/filter.inc:105
+msgid "Router solicitation"
+msgstr "Yönlendirici talebi"
+
+#: etc/inc/filter.inc:71 etc/inc/filter.inc:95
+msgid "Time exceeded"
+msgstr "Zaman doldu"
+
+#: etc/inc/filter.inc:72
+msgid "Invalid IP header"
+msgstr "Geçersiz IP başlığı"
+
+#: etc/inc/filter.inc:73
+msgid "Timestamp"
+msgstr "Zaman damgası"
+
+#: etc/inc/filter.inc:74
+msgid "Timestamp reply"
+msgstr "Zaman damgası yanıtı"
+
+#: etc/inc/filter.inc:75
+msgid "Information request"
+msgstr "Bilgi talebi"
+
+#: etc/inc/filter.inc:76
+msgid "Information reply"
+msgstr "Bilgi yanıtı"
+
+#: etc/inc/filter.inc:77
+msgid "Address mask request"
+msgstr "Adres maskesi talebi"
+
+#: etc/inc/filter.inc:78
+msgid "Address mask reply"
+msgstr "Adres maskesi yanıtı"
+
+#: etc/inc/filter.inc:79 usr/local/www/diag_dns.php:264
+#: usr/local/www/diag_traceroute.php:47 usr/local/www/diag_traceroute.php:97
+#: usr/local/www/diag_traceroute.php:156 usr/local/www/fbegin.inc:233
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: etc/inc/filter.inc:80
+msgid "Datagram conversion error"
+msgstr ""
+
+#: etc/inc/filter.inc:81
+msgid "Mobile host redirect"
+msgstr ""
+
+#: etc/inc/filter.inc:82
+msgid "IPv6 where-are-you"
+msgstr ""
+
+#: etc/inc/filter.inc:83
+msgid "IPv6 I-am-here"
+msgstr ""
+
+#: etc/inc/filter.inc:84
+msgid "Mobile registration request"
+msgstr ""
+
+#: etc/inc/filter.inc:85
+msgid "Mobile registration reply"
+msgstr ""
+
+#: etc/inc/filter.inc:86
+msgid "SKIP"
+msgstr ""
+
+#: etc/inc/filter.inc:87
+msgid "Photuris"
+msgstr ""
+
+#: etc/inc/filter.inc:94
+msgid "Packet too big"
+msgstr ""
+
+#: etc/inc/filter.inc:96
+msgid "Parameter problem"
+msgstr ""
+
+#: etc/inc/filter.inc:99
+msgid "Group membership query"
+msgstr ""
+
+#: etc/inc/filter.inc:100
+msgid "Multicast listener query"
+msgstr ""
+
+#: etc/inc/filter.inc:101
+msgid "Group membership report"
+msgstr ""
+
+#: etc/inc/filter.inc:102
+msgid "Multicast listener report"
+msgstr ""
+
+#: etc/inc/filter.inc:103
+msgid "Group membership termination"
+msgstr ""
+
+#: etc/inc/filter.inc:104
+msgid "Multicast listener done"
+msgstr ""
+
+#: etc/inc/filter.inc:107
+msgid "Neighbor solicitation"
+msgstr ""
+
+#: etc/inc/filter.inc:108
+msgid "Neighbor advertisement"
+msgstr ""
+
+#: etc/inc/filter.inc:110
+msgid "Router renumbering"
+msgstr ""
+
+#: etc/inc/filter.inc:111
+msgid "Who are you request"
+msgstr ""
+
+#: etc/inc/filter.inc:112
+msgid "Who are you reply"
+msgstr ""
+
+#: etc/inc/filter.inc:113
+msgid "FQDN query"
+msgstr ""
+
+#: etc/inc/filter.inc:114
+msgid "FQDN reply"
+msgstr ""
+
+#: etc/inc/filter.inc:115
+msgid "Node information request"
+msgstr ""
+
+#: etc/inc/filter.inc:116
+msgid "Node information reply"
+msgstr ""
+
+#: etc/inc/filter.inc:117
+msgid "mtrace resp"
+msgstr ""
+
+#: etc/inc/filter.inc:118
+msgid "mtrace messages"
+msgstr ""
+
+#: etc/inc/filter.inc:223
+msgid "Initializing"
+msgstr "Başlatılıyor"
+
+#: etc/inc/filter.inc:235
+msgid "Configuring firewall"
+msgstr "Firewall yapılandırılıyor"
+
+#: etc/inc/filter.inc:240
+msgid "Creating aliases"
+msgstr "Gruplar oluÅŸturuluyor"
+
+#: etc/inc/filter.inc:245
+msgid "Generating Limiter rules"
+msgstr "Limitleyici kuralları oluşturuluyor"
+
+#: etc/inc/filter.inc:248
+msgid "Generating NAT rules"
+msgstr "NAT kuralları oluşturuluyor"
+
+#: etc/inc/filter.inc:253
+msgid "Generating filter rules"
+msgstr "Fiitre kuralları oluşturuluyor"
+
+#: etc/inc/filter.inc:259
+msgid "Generating ALTQ queues"
+msgstr "ALTQ kuyrukları oluşturuluyor"
+
+#: etc/inc/filter.inc:261
+msgid "Generating Layer7 rules"
+msgstr "Layer7 kuralları oluşturuluyor"
+
+#: etc/inc/filter.inc:265
+msgid "Loading filter rules"
+msgstr "Filtreleme kuralları yükleniyor"
+
+#: etc/inc/filter.inc:272
+msgid "Filter is disabled. Not loading rules."
+msgstr "Filtreleme devre dışı. Kurallar yüklenmiyor."
+
+#: etc/inc/filter.inc:274 etc/inc/filter.inc:462 etc/inc/interfaces.inc:190
+#: etc/inc/interfaces.inc:210 etc/inc/interfaces.inc:342
+#: etc/inc/interfaces.inc:399 etc/inc/interfaces.inc:653
+#: etc/inc/interfaces.inc:959 etc/inc/interfaces.inc:987
+#: etc/inc/interfaces.inc:1008 etc/inc/interfaces.inc:1023
+#: etc/inc/interfaces.inc:1922 etc/inc/pkg-utils.inc:365
+#: etc/inc/pkg-utils.inc:651 etc/inc/pkg-utils.inc:676
+#: etc/inc/pkg-utils.inc:754 etc/inc/pkg-utils.inc:769
+#: etc/inc/pkg-utils.inc:803 etc/inc/pkg-utils.inc:832
+#: etc/inc/pkg-utils.inc:839 etc/inc/pkg-utils.inc:856
+#: etc/inc/pkg-utils.inc:872 etc/inc/pkg-utils.inc:888
+#: etc/inc/pkg-utils.inc:995 etc/inc/pkg-utils.inc:1012
+#: etc/inc/pkg-utils.inc:1037 etc/inc/pkg-utils.inc:1082
+#: etc/inc/pkg-utils.inc:1091 etc/inc/pkg-utils.inc:1101
+#: etc/inc/pkg-utils.inc:1116 etc/inc/pkg-utils.inc:1123
+#: etc/inc/pkg-utils.inc:1142 etc/inc/pkg-utils.inc:1468
+#: etc/inc/pkg-utils.inc:1494 etc/inc/pkg-utils.inc:1537 etc/inc/rrd.inc:938
+#: etc/inc/services.inc:1328 etc/inc/services.inc:1686
+#: etc/inc/services.inc:1870 etc/inc/services.inc:1907
+#: etc/inc/services.inc:2118 etc/inc/system.inc:895 etc/inc/system.inc:986
+#: etc/inc/system.inc:1406 etc/inc/system.inc:1769 etc/inc/system.inc:1909
+msgid "done."
+msgstr "tamamlandı."
+
+#: etc/inc/filter.inc:314
+msgid "Setting up logging information"
+msgstr "Kayıt bilgilerini ayarlama"
+
+#: etc/inc/filter.inc:319
+msgid "Setting up SCRUB information"
+msgstr "SCRUB bilgilerini ayarlama"
+
+#: etc/inc/filter.inc:363
+#, php-format
+msgid "The line in question reads [%1$d]: %2$s"
+msgstr "Söz konusu olan sıranın okuduğu [%1$d]: %2$s"
+
+#: etc/inc/filter.inc:369
+msgid "PF was wedged/busy and has been reset."
+msgstr "PF sıkışmış/meşgul oldu ve tekrar başlatılıyor."
+
+#: etc/inc/filter.inc:377 etc/inc/filter.inc:378
+#, php-format
+msgid "There were error(s) loading the rules: %1$s - %2$s"
+msgstr "Kurallar yüklenirken hata(lar) vardı: %1$s - %2$s"
+
+#: etc/inc/filter.inc:388
+msgid "Starting up layer7 daemon"
+msgstr "layer7 servisi başlatılıyor"
+
+#: etc/inc/filter.inc:447
+msgid "Processing down interface states"
+msgstr "Kapalı arabirim durumları işleniyor"
+
+#: etc/inc/filter.inc:451
+msgid "Running plugins"
+msgstr "Çalışan eklentiler"
+
+#: etc/inc/filter.inc:455
+msgid "Running plugins (pf)"
+msgstr "Çalışan eklentiler (pf)"
+
+#: etc/inc/filter.inc:457
+msgid "Plugins completed."
+msgstr "Eklentiler tamamlandı."
+
+#: etc/inc/filter.inc:460 usr/local/www/restart_httpd.php:53
+#: usr/local/www/restart_httpd.php:56 usr/local/www/restart_httpd.php:59
+#: usr/local/www/restart_httpd.php:62
+msgid "Done"
+msgstr "Tamam"
+
+#: etc/inc/filter.inc:738
+msgid "Creating gateway group item..."
+msgstr "Ağ geçidi grup maddesi oluşturuluyor..."
+
+#: etc/inc/filter.inc:773
+#, php-format
+msgid "Setting up route with %1$s on %2$s"
+msgstr "Yönlendirme ayarlanıyor %1$s ile %2$s"
+
+#: etc/inc/filter.inc:780
+#, php-format
+msgid ""
+"An error occurred while trying to find the interface got %s . The rule has "
+"not been added."
+msgstr "%s arabirim bulma sırasında sorun ile karşılaşıldı. Kural eklenemedi."
+
+#: etc/inc/filter.inc:1118
+#, php-format
+msgid "Creating reflection NAT rule for %s..."
+msgstr "%s NAT kuralı için yansıma oluşturuluyor..."
+
+#: etc/inc/filter.inc:1207
+#, php-format
+msgid "Creating reflection rule for %s..."
+msgstr "%s için yansıma kuralı oluşturuluyor..."
+
+#: etc/inc/filter.inc:1390
+msgid "localhost"
+msgstr ""
+
+#: etc/inc/filter.inc:1398
+msgid "static route"
+msgstr ""
+
+#: etc/inc/filter.inc:1409
+msgid "DHCP alias address"
+msgstr ""
+
+#: etc/inc/filter.inc:1446
+msgid "PPTP server"
+msgstr ""
+
+#: etc/inc/filter.inc:1455
+msgid "PPPoE server"
+msgstr ""
+
+#: etc/inc/filter.inc:1464
+msgid "L2TP server"
+msgstr ""
+
+#: etc/inc/filter.inc:1473
+msgid "OpenVPN server"
+msgstr ""
+
+#: etc/inc/filter.inc:1480
+msgid "OpenVPN client"
+msgstr ""
+
+#: etc/inc/filter.inc:1488
+msgid "IPsec client"
+msgstr ""
+
+#: etc/inc/filter.inc:1521
+msgid "Auto created rule for ISAKMP"
+msgstr ""
+
+#: etc/inc/filter.inc:1531
+msgid "Auto created rule"
+msgstr ""
+
+#: etc/inc/filter.inc:1630
+msgid "Creating 1:1 rules..."
+msgstr "1:1 kuralları oluşturuluyor..."
+
+#: etc/inc/filter.inc:1786
+#, php-format
+msgid "Creating advanced outbound rule %s"
+msgstr "%s Gelişmiş dışarı giden kuralı oluşturuluyor"
+
+#: etc/inc/filter.inc:1824
+msgid "Creating outbound NAT rules"
+msgstr "Dışarı giden NAT kuralı oluşturuluyor"
+
+#: etc/inc/filter.inc:1831
+msgid "Creating automatic outbound rules"
+msgstr ""
+
+#: etc/inc/filter.inc:1861
+msgid "Setting up TFTP helper"
+msgstr "TFTP yardımcısı ayarlanıyor"
+
+#: etc/inc/filter.inc:1893
+#, php-format
+msgid "Creating NAT rule %s"
+msgstr "NAT kuralı %s oluşturuluyor"
+
+#: etc/inc/filter.inc:2100
+#, php-format
+msgid "Creating filter rule %s ..."
+msgstr "Filtre kuralı %s oluşturuluyor ..."
+
+#: etc/inc/filter.inc:2432
+#, php-format
+msgid "Setting up pass/block rules %s"
+msgstr "%s İzin/Engel kuralı ayarlanıyor"
+
+#: etc/inc/filter.inc:2441
+#, php-format
+msgid "Could not find IPv6 gateway for interface (%s)."
+msgstr ""
+
+#: etc/inc/filter.inc:2447
+#, php-format
+msgid "Could not find IPv4 gateway for interface (%s)."
+msgstr "Arabirim (%s) için IPv4 ağ geçidi bulunamadı."
+
+#: etc/inc/filter.inc:2474
+#, php-format
+msgid "Creating rule %s"
+msgstr "%s kuralı oluşturuluyor"
+
+#: etc/inc/filter.inc:2725
+msgid "Creating default rules"
+msgstr "Varsayılan kurallar oluşturuluyor"
+
+#: etc/inc/filter.inc:3344
+msgid "Creating IPsec rules..."
+msgstr "IPsec kuralları oluşturuluyor..."
+
+#: etc/inc/filter.inc:3397
+msgid ""
+"Please use filter_tdr_install_cron() function tdr_install_cron will be "
+"deprecated!"
+msgstr ""
+"tdr_install_cron fonksiyonu önerilmiyor!, Lütfen filter_tdr_install_cron() "
+"fonksiyonunu kullanın. "
+
+#: etc/inc/filter.inc:3443
+msgid "Installed 15 minute filter reload for Time Based Rules"
+msgstr "Zaman tabanlı kuralların tekrar yüklenmesi 15 dakikaya kuruldu"
+
+#: etc/inc/filter.inc:3450
+msgid "Removed 15 minute filter reload for Time Based Rules"
+msgstr ""
+"Zaman Tabanlı Kurallar için kaldırılan filitre yeniden yüklemesi 15 dakıkadır"
+
+#: etc/inc/filter.inc:3766
+#, php-format
+msgid "Checking for %1$s PF hooks in package %2$s"
+msgstr "%2$s Paketinin içinde PF kancaları %1$s kontrol ediliyor"
+
+#: etc/inc/filter.inc:3772
+#, php-format
+msgid "Processing early %1$s rules for package %2$s"
+msgstr "%2$s paketi için %1$s kuralı erken işleniyor"
+
+#: etc/inc/filter.inc:3777
+#, php-format
+msgid "There was an error while parsing the package filter rules for %s."
+msgstr "%s paket kuralı ayrıştırılırken bir hata oluştu."
+
+#: etc/inc/filter_log.inc:251
+#, php-format
+msgid ""
+"There was a error parsing rule number: %s. Please report to mailing list "
+"or forum."
+msgstr ""
+
+#: etc/inc/filter_log.inc:260
+#, php-format
+msgid ""
+"There was a error parsing rule: %s. Please report to mailing list or forum."
+msgstr ""
+"Kural ayrıştırılırken bir hata oluştu:%s Lütfen eposta listesine ya da "
+"foruma rapor ediniz."
+
+#: etc/inc/filter_log.inc:273
+#, php-format
+msgid "Service %1$s/%2$s: %3$s"
+msgstr "Hizmet %1$s/%2$s: %3$s"
+
+#: etc/inc/functions.inc:94
+msgid "Acknowledge All Notices"
+msgstr "Tüm Bildirimleri Onaylayın"
+
+#: etc/inc/functions.inc:95
+msgid "Click to Acknowledge"
+msgstr "Onaylamak için tıklayın"
+
+#: etc/inc/functions.inc:113
+msgid "unread notice"
+msgstr "okunmamış bildirim"
+
+#: etc/inc/functions.inc:115
+msgid "unread notices"
+msgstr "okunmamış bildirimler"
+
+#: etc/inc/gwlb.inc:939
+#, php-format
+msgid "Updating gateway group gateway for %1$s - new gateway is %2$s"
+msgstr ""
+"%1$s için Grup geçidi geçit adresi güncelleniyor, yeni geçit adresi %2$s"
+
+#: etc/inc/interfaces.inc:51
+msgid "interfaces_bring_up() was called but no variable defined."
+msgstr "interfaces_bring_up() denilen hiçbir değişken tanımlı değil."
+
+#: etc/inc/interfaces.inc:186
+msgid "Configuring loopback interface..."
+msgstr "Loopback arabirimi yapılandırılıyor..."
+
+#: etc/inc/interfaces.inc:197
+msgid "Configuring VLAN interfaces..."
+msgstr "VLAN arabirimi yapılandırılıyor..."
+
+#: etc/inc/interfaces.inc:217
+msgid "VLAN: called with wrong options. Problems with config!"
+msgstr "VLAN: Hatalı seçenekler. Yapılandırma hatalı!"
+
+# 98%
+#: etc/inc/interfaces.inc:225
+msgid "interface_vlan_configure called with if undefined."
+msgstr "interface_vlan_confgure denilen eğer tanımsızsa."
+
+#: etc/inc/interfaces.inc:259 etc/inc/interfaces.inc:349
+#, php-format
+msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s"
+msgstr "QinQ compat VLAN: denilen yanlış ayarlar. Sorunlar yapılandırma!%s"
+
+# 98%
+#: etc/inc/interfaces.inc:266
+#, php-format
+msgid "interface_qinq_configure called with if undefined.%s"
+msgstr "interface_qinq_confgure denilen eğer tanımsızsa.%s"
+
+#: etc/inc/interfaces.inc:271
+#, php-format
+msgid "interface_qinq_configure called with invalid if.%s"
+msgstr "interface_qinq_configure adlandırılan geçersiz %s"
+
+#: etc/inc/interfaces.inc:334
+msgid "Configuring QinQ interfaces..."
+msgstr "QinQ arabirimi yapılandırılıyor..."
+
+# 96%
+#: etc/inc/interfaces.inc:357
+#, php-format
+msgid "interface_qinq2_configure called with if undefined.%s"
+msgstr "interface_qinq2_confgure denilen eğer tanımsızsa.%s"
+
+#: etc/inc/interfaces.inc:378
+msgid "Creating wireless clone interfaces..."
+msgstr "Kablosuz klon arabirimleri oluÅŸturuluyor..."
+
+#: etc/inc/interfaces.inc:446
+#, php-format
+msgid "No members found on %s"
+msgstr "%s da kullanıcı bulunamadı"
+
+#: etc/inc/interfaces.inc:502
+msgid "realif not defined in interfaces bridge - up"
+msgstr "açık - arabirimler köprüsü içinde realif tanımlı değil"
+
+#: etc/inc/interfaces.inc:615
+msgid "bridgeif not defined -- could not bring interface up"
+msgstr "köprü tanımlı değilse -- arabirim açık hale gelemez"
+
+#: etc/inc/interfaces.inc:639
+msgid "Configuring LAGG interfaces..."
+msgstr "LAGG arabirimleri yapılandırılıyor..."
+
+#: etc/inc/interfaces.inc:778
+msgid "Could not bring greif up -- variable not defined."
+msgstr "Değişken tanımlı değilse -- greif açık hale gelemez."
+
+#: etc/inc/interfaces.inc:847
+msgid ""
+"could not bring realif up -- variable not defined -- "
+"interface_gif_configure()"
+msgstr ""
+"interface_gif_configure() -- değişken tanımlı değilse -- realif açık hale "
+"gelemez"
+
+#: etc/inc/interfaces.inc:872
+msgid "could not bring gifif up -- variable not defined"
+msgstr "değişken tanımlı değilse -- gifif açık hale gelemez"
+
+#: etc/inc/interfaces.inc:953 etc/inc/interfaces.inc:980
+#: etc/inc/interfaces.inc:1001 etc/inc/interfaces.inc:1016
+#, php-format
+msgid "Configuring %s interface..."
+msgstr "%s arabirimleri yapılandırılıyor..."
+
+#: etc/inc/interfaces.inc:956 etc/inc/interfaces.inc:982
+#: etc/inc/interfaces.inc:1003 etc/inc/interfaces.inc:1018
+#, php-format
+msgid "Configuring %s"
+msgstr "%s yapılandırılıyor"
+
+#: etc/inc/interfaces.inc:1103
+msgid "Wrong parameters used during interface_bring_down"
+msgstr "interface_bring_down sırasında kullanılan parametreler yanlış"
+
+#: etc/inc/interfaces.inc:1440
+#, php-format
+msgid "Can't find PPP config for %s in interface_ppps_configure()."
+msgstr ""
+"interface_ppps_configure() içerisinde %s için PPP yapılandırması bulunamıyor."
+
+#: etc/inc/interfaces.inc:1499
+#, php-format
+msgid ""
+"Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in "
+"interfaces_ppps_configure."
+msgstr ""
+"%2$s interfaces_ppps_configure içinde Uzak PPTP/L2TP IP adresi %1$s dan %2$s "
+"alınamadı."
+
+#: etc/inc/interfaces.inc:1506
+#, php-format
+msgid ""
+"Device %s does not exist. PPP link cannot start without the modem device."
+msgstr "%s Aygıtı yok. PPP bağlantısı, modem cihazı olmadan başlatılamaz."
+
+#: etc/inc/interfaces.inc:1511
+#, php-format
+msgid "Unkown %s configured as ppp interface."
+msgstr "%s Bilinmeyen ppp arabirimi yapılandırması."
+
+#: etc/inc/interfaces.inc:1783
+#, php-format
+msgid "Error: cannot open mpd_%s.conf in interface_ppps_configure().%s"
+msgstr "Hata: %s interface_ppps_configure() içinde mpd_%s.conf açılamadı"
+
+#: etc/inc/interfaces.inc:1865
+msgid "Configuring CARP settings..."
+msgstr "CARP ayarları yapılandırılıyor..."
+
+#: etc/inc/interfaces.inc:2120
+#, php-format
+msgid ""
+"Interface specified for the virtual IP address %s does not exist. Skipping "
+"this VIP."
+msgstr ""
+"Belirtilen arabirim için sanal IP adresi %s bulunmadı. Bu Vip atlanıyor."
+
+#: etc/inc/interfaces.inc:2128
+#, php-format
+msgid ""
+"Interface does not have required IP address in the subnet of virtual IP "
+"address %s. Skipping this VIP."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2135
+#, php-format
+msgid ""
+"Interface does not have required IPv6 address in the subnet of virtual IPv6 "
+"address %s. Skipping this VIP."
+msgstr ""
+
+#: etc/inc/interfaces.inc:2191
+#, php-format
+msgid "Interface %s changed to hostap mode"
+msgstr "Arabirim %s erişim noktası (hostap) kipine değiştirildi"
+
+#: etc/inc/interfaces.inc:2195
+#, php-format
+msgid "Interface %s changed to adhoc mode"
+msgstr "Arabirim %s eşler arası (ad-hoc) kipine değiştirildi"
+
+#: etc/inc/interfaces.inc:2199
+#, php-format
+msgid "Interface %s changed to infrastructure mode"
+msgstr "Arabirim %s altyapı (infrastructure) kipine değiştirildi"
+
+#: etc/inc/interfaces.inc:2211
+#, php-format
+msgid "Cloning new wireless interface %s"
+msgstr "Yeni kablosuz arabirim %s çoğaltılıyor"
+
+#: etc/inc/interfaces.inc:2216
+#, php-format
+msgid "Failed to clone interface %1$s with error code %2$s, output %3$s"
+msgstr "%1$s Klon arabirim başarısız %2$s hata kodu, %3$s çıkışı"
+
+#: etc/inc/interfaces.inc:2914
+msgid "Generating new MAC address."
+msgstr "Yeni MAC adresi oluÅŸturuluyor."
+
+#: etc/inc/interfaces.inc:2920
+#, php-format
+msgid ""
+"The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been "
+"automatically replaced with %2$s"
+msgstr ""
+"Arabirimdeki GEÇERSİZ MAC adresi (ff:ff:ff:ff:ff:ff) %1$s otomatik olarak "
+"yerine %2$s koyuldu"
+
+# 75%
+#: etc/inc/interfaces.inc:3741
+#, php-format
+msgid ""
+"Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for "
+"writing.%s"
+msgstr "Hata: %s dhclient_%s.conf içinde interface_dhcp_configure() açılamadı"
+
+#: etc/inc/interfaces.inc:3754
+#, php-format
+msgid "Invalid interface \"%s\" in interface_dhcp_configure()"
+msgstr "Geçersiz arabirim \"%s\" içinde interface_dhcp_configure()"
+
+#: etc/inc/interfaces.inc:3806
+#, php-format
+msgid "Could not bring up %s interface in interface_dhcp_configure()"
+msgstr "interface_dhcp_configure() içindeki %s arabirim açılamıyor"
+
+#: etc/inc/ipsec.inc:45
+msgid "My IP address"
+msgstr "IP adresim"
+
+#: etc/inc/ipsec.inc:46 etc/inc/ipsec.inc:55 usr/local/www/diag_arp.php:314
+#: usr/local/www/diag_logs_vpn.php:178
+#: usr/local/www/services_captiveportal.php:726
+#: usr/local/www/services_captiveportal.php:747
+#: usr/local/www/services_captiveportal.php:769
+#: usr/local/www/services_captiveportal.php:788
+#: usr/local/www/services_captiveportal_ip.php:119
+#: usr/local/www/services_captiveportal_ip_edit.php:190
+#: usr/local/www/services_dhcp.php:1248
+#: usr/local/www/services_dhcp_edit.php:394
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:76
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:141
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dnsmasq_edit.php:230
+#: usr/local/www/services_unbound_domainoverride_edit.php:71
+#: usr/local/www/services_unbound_domainoverride_edit.php:137
+#: usr/local/www/services_unbound_host_edit.php:87
+#: usr/local/www/services_unbound_host_edit.php:232
+#: usr/local/www/status_captiveportal.php:157
+#: usr/local/www/status_dhcp_leases.php:331
+#: usr/local/www/system_advanced_network.php:233
+#: usr/local/www/vpn_ipsec_phase2.php:823 usr/local/www/vpn_l2tp_users.php:104
+#: usr/local/www/vpn_l2tp_users_edit.php:174
+#: usr/local/www/vpn_pptp_users.php:101
+#: usr/local/www/vpn_pptp_users_edit.php:165
+msgid "IP address"
+msgstr "IP adresi"
+
+#: etc/inc/ipsec.inc:47 etc/inc/ipsec.inc:56
+#: usr/local/www/system_camanager.php:503
+#: usr/local/www/system_certmanager.php:748
+#: usr/local/www/system_certmanager.php:900
+msgid "Distinguished name"
+msgstr "Ayrılmış isim"
+
+#: etc/inc/ipsec.inc:48 etc/inc/ipsec.inc:57
+msgid "User distinguished name"
+msgstr "Kullanıcı ayrılmış isim"
+
+#: etc/inc/ipsec.inc:49 etc/inc/ipsec.inc:58
+msgid "ASN.1 distinguished Name"
+msgstr "ASN.1 ayrılmış isim"
+
+#: etc/inc/ipsec.inc:50 etc/inc/ipsec.inc:59
+msgid "KeyID tag"
+msgstr "AnahtarID etiketi"
+
+#: etc/inc/ipsec.inc:51 usr/local/www/fbegin.inc:147
+#: usr/local/www/services_dhcp.php:1041
+#: usr/local/www/services_dhcp_edit.php:496
+#: usr/local/www/services_dhcpv6.php:697
+msgid "Dynamic DNS"
+msgstr "Dinamik DNS"
+
+#: etc/inc/ipsec.inc:54
+msgid "Peer IP address"
+msgstr "EÅŸ Ip adresi"
+
+#: etc/inc/ipsec.inc:302 usr/local/www/vpn_ipsec.php:343
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase2.php:360
+msgid "Mobile Client"
+msgstr "Mobil Ä°stemci"
+
+#: etc/inc/ipsec.inc:305 usr/local/www/diag_system_pftop.php:153
+#: usr/local/www/firewall_nat_edit.php:818
+#: usr/local/www/firewall_nat_edit.php:849 usr/local/www/interfaces.php:1411
+#: usr/local/www/interfaces.php:1412 usr/local/www/interfaces.php:1798
+#: usr/local/www/interfaces.php:1904
+#: usr/local/www/interfaces_bridge_edit.php:449
+#: usr/local/www/system_advanced_misc.php:438
+#: usr/local/www/vpn_ipsec_phase2.php:629
+msgid "None"
+msgstr "Hiçbiri"
+
+#: etc/inc/ipsec.inc:598
+msgid ""
+"Unable to find IPsec daemon leases file. Could not display mobile user stats!"
+msgstr ""
+
+#: etc/inc/meta.inc:68
+#, php-format
+msgid "list_phpfiles: unable to examine path %s\n"
+msgstr "liste_phpdosyaları: %s yolu denetlenemedi\n"
+
+#: etc/inc/meta.inc:99
+#, php-format
+msgid "unable to read %s\n"
+msgstr "%s okumak mümkün değil\n"
+
+#: etc/inc/meta.inc:132
+#, php-format
+msgid "error: tag mismatch ( %1$s != %2$s ) in '%3$s'%4$s"
+msgstr "Hata: Etiket uyumsuzluğu ( %1$s != %2$s ) içinde '%3$s'%4$s"
+
+#: etc/inc/meta.inc:143
+#, php-format
+msgid "warning: tag %1$s has no data in '%2$s'%3$s"
+msgstr "Uyarı: '%2$s'%3$s içerisinde etiket %1$s bilgisi yok"
+
+#: etc/inc/meta.inc:163
+#, php-format
+msgid "warning: tag %1$s has malformed data in '%2$s'%3$s"
+msgstr "Uyarı: '%2$s'%3$s içerisinde %1$s etiketi kusur içeriyor"
+
+#: etc/inc/meta.inc:185
+#, php-format
+msgid "warning: tag %1$s has invalid data in '%2$s'%3$s"
+msgstr "Uyarı: '%2$s'%3$s içerisinde %1$s etiketi geçersiz veri içeriyor"
+
+#: etc/inc/notices.inc:76
+#, php-format
+msgid "Could not open %s for writing"
+msgstr "Yazmak için %s açılamadı"
+
+#: etc/inc/notices.inc:337
+#, php-format
+msgid "Message sent to %s OK"
+msgstr "Mesaj %s 'a düzgün olarak gönderildi"
+
+#: etc/inc/notices.inc:340 etc/inc/notices.inc:341
+#, php-format
+msgid "Could not send the message to %1$s -- Error: %2$s"
+msgstr "Mesaj %1$s gönderilemedi. -- Hata: %2$s"
+
+#: etc/inc/openvpn.inc:101 etc/inc/openvpn.inc:109
+msgid "Peer to Peer ( SSL/TLS )"
+msgstr "Eşler arası (SSL/TLS)"
+
+#: etc/inc/openvpn.inc:102 etc/inc/openvpn.inc:110
+msgid "Peer to Peer ( Shared Key )"
+msgstr "Eşler arası (Paylaşılmış Anahtar)"
+
+#: etc/inc/openvpn.inc:103
+msgid "Remote Access ( SSL/TLS )"
+msgstr "Uzaktan EriÅŸim (SSL/TLS)"
+
+#: etc/inc/openvpn.inc:104
+msgid "Remote Access ( User Auth )"
+msgstr "Uzaktan Erişim (Kullanıcı Kimlik Doğrulaması)"
+
+#: etc/inc/openvpn.inc:105
+msgid "Remote Access ( SSL/TLS + User Auth )"
+msgstr "Uzaktan Erişim (SSL/TLS + Kullanıcı Kimlik Doğrulaması)"
+
+#: etc/inc/openvpn.inc:114
+msgid "No Preference"
+msgstr ""
+
+#: etc/inc/openvpn.inc:115
+msgid "Disabled - No Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:116
+msgid "Enabled with Adaptive Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:117
+msgid "Enabled without Adaptive Compression"
+msgstr ""
+
+#: etc/inc/openvpn.inc:223
+msgid "None (No Encryption)"
+msgstr "Hiçbiri (Şifreleme Yok)"
+
+#: etc/inc/openvpn.inc:237
+msgid "None (No Authentication)"
+msgstr ""
+
+#: etc/inc/openvpn.inc:280
+#, php-format
+msgid "The field '%s' must contain a valid IP address or domain name."
+msgstr "'%s' Alanı geçerli bir IP adresi ya da etkialanı adı içermeli."
+
+#: etc/inc/openvpn.inc:287
+#, php-format
+msgid "The field '%s' must contain a valid port, ranging from 0 to 65535."
+msgstr "'%s' Alanı geçerli bir port ya da 0-65535 arasında bir değer içermeli."
+
+#: etc/inc/openvpn.inc:299
+#, php-format
+msgid "The field '%s' must contain a single valid %s CIDR range."
+msgstr "%s alanı geçerli bir %s CIDR aralığı içermelidir."
+
+#: etc/inc/openvpn.inc:311
+#, php-format
+msgid ""
+"The field '%s' must contain only valid %s CIDR range(s) separated by commas."
+msgstr ""
+"%s alanı geçerli bir %s virgül ile ayrılmış CIDR aralık(ları) içermelidir."
+
+#: etc/inc/pfsense-utils.inc:380
+msgid "MASTER"
+msgstr "ASIL"
+
+#: etc/inc/pfsense-utils.inc:382
+msgid "BACKUP"
+msgstr "YEDEK"
+
+#: etc/inc/pfsense-utils.inc:384
+msgid "INIT"
+msgstr "INIT"
+
+# yapılan çeviriden emin değilim (technical) öneri varsa gönderiniz.
+#: etc/inc/pfsense-utils.inc:452
+msgid "After synch increase advertising skew"
+msgstr "Senkronize sonrası reklam çarpıklığını artır"
+
+#: etc/inc/pfsense-utils.inc:497
+msgid "Error creating socket!"
+msgstr "Socket oluÅŸturuken hata oluÅŸtu!"
+
+#: etc/inc/pfsense-utils.inc:498
+#, php-format
+msgid "Error code is '%1$s' - %2$s"
+msgstr "Hata kodu '%1$s' - %2$s"
+
+#: etc/inc/pfsense-utils.inc:503
+#, php-format
+msgid "setsockopt() failed, error: %s"
+msgstr "setsockopt() başarısız, hata: %s"
+
+#: etc/inc/pfsense-utils.inc:506
+#, php-format
+msgid "Magic Packet sent (%1$s) to {%2$s} MAC=%3$s"
+msgstr "Özel paket gönder (%1$s) den {%2$s} MAC=%3$s"
+
+#: etc/inc/pfsense-utils.inc:568 etc/inc/pfsense-utils.inc:590
+#, php-format
+msgid "Restored %s of config file (maybe from CARP partner)"
+msgstr "Yapılandırma dosyası %s geri yüklendi (belki CARP ile ilişkili)"
+
+#: etc/inc/pfsense-utils.inc:751
+#, php-format
+msgid "XMLRPC communication error: %s"
+msgstr "XMLRPC haberleşme hatası: %s"
+
+#: etc/inc/pfsense-utils.inc:754
+#, php-format
+msgid "XMLRPC request failed with error %1$s: %2$s"
+msgstr "XMLRPC isteği %1$s: %2$s hatası ile başarısız oldu"
+
+#: etc/inc/pfsense-utils.inc:854
+msgid "reload_interfaces_sync() is starting."
+msgstr "reload_interfaces_sync() başlatılıyor."
+
+#: etc/inc/pfsense-utils.inc:862
+msgid "Enabling system routing"
+msgstr "Sistem yönlendirmesi etkinleştiriliyor"
+
+#: etc/inc/pfsense-utils.inc:865
+msgid "Cleaning up Interfaces"
+msgstr "Arabirimler temizleniyor"
+
+#: etc/inc/pfsense-utils.inc:1213
+msgid "No history data found!"
+msgstr "Geçmiş veri bulunamadı!"
+
+#: etc/inc/pfsense-utils.inc:1336
+msgid "device not present! Is the modem attached to the system?"
+msgstr "Aygıt tanınmadı! Modem sisteme takıldı mı?"
+
+#: etc/inc/pfsense-utils.inc:1403
+msgid "running"
+msgstr "çalışıyor"
+
+#: etc/inc/pfsense-utils.inc:1404 usr/local/www/graph.php:207
+msgid "up"
+msgstr "yukarı"
+
+#: etc/inc/pfsense-utils.inc:1447
+msgid "blocking"
+msgstr "bloke ediliyor"
+
+#: etc/inc/pfsense-utils.inc:1447
+msgid "check for ethernet loops"
+msgstr "ethernet döngülerini kontrol et"
+
+#: etc/inc/pfsense-utils.inc:1450
+msgid "learning"
+msgstr "öğreniyor"
+
+#: etc/inc/pfsense-utils.inc:1453
+msgid "forwarding"
+msgstr "yönlendiriliyor"
+
+#: etc/inc/pfsense-utils.inc:1586
+#, php-format
+msgid "DNSCACHE: Found old IP %1$s and new IP %2$s"
+msgstr "DNS ARABELLEĞİ: Eski IP %1$s ve yeni IP %2$s buldu"
+
+#: etc/inc/pfsense-utils.inc:1960
+msgid ""
+"Alias archive is a .zip file which cannot be decompressed because utility is "
+"missing!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:1992
+msgid ""
+"Alias archive is a .tar/tgz file which cannot be decompressed because "
+"utility is missing!"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2659 etc/inc/pfsense-utils.inc:2701
+msgid "English"
+msgstr "Ä°ngilizce"
+
+#: etc/inc/pfsense-utils.inc:2660 etc/inc/pfsense-utils.inc:2713
+msgid "Portuguese (Brazil)"
+msgstr "Portekizce (Brezilya)"
+
+#: etc/inc/pfsense-utils.inc:2661 etc/inc/pfsense-utils.inc:2718
+msgid "Turkish"
+msgstr "Türkçe"
+
+#: etc/inc/pfsense-utils.inc:2695
+msgid "Albanian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2696
+msgid "Bulgarian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2697
+msgid "Chinese (Simplified)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2698
+msgid "Chinese (Traditional)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2699
+msgid "Dutch"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2700
+msgid "Danish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2702
+msgid "Finnish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2703
+msgid "French"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2704
+msgid "German"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2705
+msgid "Greek"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2706
+msgid "Hungarian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2707
+msgid "Italian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2708
+msgid "Japanese"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2709
+msgid "Korean"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2710
+msgid "Latvian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2711
+msgid "Norwegian (Bokmal)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2712
+msgid "Polish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2714
+msgid "Portuguese (Portugal)"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2715
+msgid "Romanian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2716
+msgid "Russian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2717
+msgid "Slovenian"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2719
+msgid "Spanish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2720
+msgid "Swedish"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2721
+msgid "Slovak"
+msgstr ""
+
+#: etc/inc/pfsense-utils.inc:2722
+msgid "Czech"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:219
+msgid "Resyncing configuration for all packages."
+msgstr "Tüm paketlerin yapılandırmaları yeniden senkronize ediliyor."
+
+#: etc/inc/pkg-utils.inc:239
+msgid "Syncing packages:"
+msgstr "Paketler senkronize ediliyor:"
+
+#: etc/inc/pkg-utils.inc:281
+#, php-format
+msgid ""
+"The %1$s package is missing required dependencies and must be reinstalled. "
+"%2$s"
+msgstr "%1$s Paketi kayıp, gereken bağımlılıklar %2$s yeniden yüklenmeli"
+
+#: etc/inc/pkg-utils.inc:306 etc/inc/pkg-utils.inc:432
+#, php-format
+msgid ""
+"The %s package is missing required dependencies and must be reinstalled."
+msgstr "%s Paketi kayıp, gereken bağımlılıklar yeniden yüklenmeli."
+
+#: etc/inc/pkg-utils.inc:399
+#, php-format
+msgid ""
+"The %s package is missing its configuration file and must be reinstalled."
+msgstr "%s Paketi kayıp, yapılandırma dosyası yeniden yüklenmeli."
+
+#: etc/inc/pkg-utils.inc:628 etc/inc/pkg-utils.inc:629
+#, php-format
+msgid "Package %s is not supported on this version."
+msgstr "%s paketi, bu versiyonda desteklenmiyor."
+
+#: etc/inc/pkg-utils.inc:636 usr/local/www/pkg_mgr_install.php:170
+msgid "Beginning package installation."
+msgstr "Paket yüklenmesine başlanıyor."
+
+#: etc/inc/pkg-utils.inc:637 etc/inc/pkg-utils.inc:638
+#, php-format
+msgid "Beginning package installation for %s ."
+msgstr "%s paketinin yuklenmesine baslaniyor."
+
+#: etc/inc/pkg-utils.inc:646
+msgid "Saving updated package information..."
+msgstr "Güncellenen paket bilgisi kaydediliyor..."
+
+# Paket mesajı config.xml yazıldığından dolayı hataya neden oluyor. Bu sebeple türkçe kullanılmamalı.
+#: etc/inc/pkg-utils.inc:650
+#, php-format
+msgid "Installed %s package."
+msgstr "%s paketi yuklendi."
+
+#: etc/inc/pkg-utils.inc:654
+#, php-format
+msgid "Overwrote previous installation of %s."
+msgstr "Yazılan önceki kurulumu %s."
+
+#: etc/inc/pkg-utils.inc:655
+msgid "overwrite!"
+msgstr "üzerine yaz!"
+
+#: etc/inc/pkg-utils.inc:667
+#, php-format
+msgid "Failed to install package: %s."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:668
+msgid "Failed to install package."
+msgstr "Paket yüklemesi başarısız oldu."
+
+#: etc/inc/pkg-utils.inc:672
+msgid "Writing configuration... "
+msgstr "Yapılandırma kaydediliyor... "
+
+#: etc/inc/pkg-utils.inc:675
+#, php-format
+msgid "Successfully installed package: %s."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:709
+#, php-format
+msgid "The %s package is not installed.%sInstallation aborted."
+msgstr "%s Paketi kurulu deÄŸil.%sKurulumu iptal edildi."
+
+#: etc/inc/pkg-utils.inc:724
+msgid "Installing"
+msgstr "Yükleniyor"
+
+#: etc/inc/pkg-utils.inc:724
+msgid "and its dependencies."
+msgstr "ve ona bağımlılarıda."
+
+#: etc/inc/pkg-utils.inc:725
+msgid "Downloading"
+msgstr "Ä°ndiriliyor"
+
+#: etc/inc/pkg-utils.inc:725
+msgid "and its dependencies... "
+msgstr "ve ona bağımlılarıda."
+
+#: etc/inc/pkg-utils.inc:737
+msgid "Package WAS NOT installed properly."
+msgstr "Paket düzgün olarak YÜKLENMEDİ."
+
+#: etc/inc/pkg-utils.inc:751 etc/inc/pkg-utils.inc:1491
+msgid "Loading package configuration... "
+msgstr "Paket yapılandırması yükleniyor..."
+
+#: etc/inc/pkg-utils.inc:756
+msgid "Configuring package components...\n"
+msgstr "Paket bileşenleri yapılandırılıyor...\n"
+
+#: etc/inc/pkg-utils.inc:762 etc/inc/pkg-utils.inc:1077
+msgid "System files... "
+msgstr "Sistem dosyaları... "
+
+#: etc/inc/pkg-utils.inc:781 etc/inc/pkg-utils.inc:1053
+msgid "Loading package instructions..."
+msgstr "Paket kullanma talimatları yükleniyor..."
+
+#: etc/inc/pkg-utils.inc:796
+msgid "Custom commands..."
+msgstr "Özel komutlar..."
+
+#: etc/inc/pkg-utils.inc:800
+msgid "Executing custom_php_global_functions()..."
+msgstr "custom_php_global_functions() çalıştırılıyor..."
+
+#: etc/inc/pkg-utils.inc:807
+msgid "Executing custom_php_install_command()..."
+msgstr "custom_php_install_command() çalıştırılıyor..."
+
+#: etc/inc/pkg-utils.inc:836
+msgid "Executing custom_php_resync_config_command()..."
+msgstr "custom_php_resync_config_command() çalıştırılıyor..."
+
+#: etc/inc/pkg-utils.inc:845 etc/inc/pkg-utils.inc:1000
+msgid "Menu items... "
+msgstr "Menü öğeleri... "
+
+#: etc/inc/pkg-utils.inc:861
+msgid "Integrated Tab items... "
+msgstr "Birleşmiş Tab öğeleri... "
+
+#: etc/inc/pkg-utils.inc:877 etc/inc/pkg-utils.inc:1017
+msgid "Services... "
+msgstr "Servisler... "
+
+#: etc/inc/pkg-utils.inc:892
+msgid "Loading package configuration... failed!"
+msgstr "Paket yapılandırması yükleniyor... Başarısız oldu!"
+
+#: etc/inc/pkg-utils.inc:892
+msgid "Installation aborted."
+msgstr "Kurulum durduruldu."
+
+#: etc/inc/pkg-utils.inc:894
+msgid "Unable to load package configuration. Installation aborted."
+msgstr "Paket yapılandırması yüklenemedi. Kurulum durduruldu."
+
+#: etc/inc/pkg-utils.inc:939
+#, php-format
+msgid "Starting package deletion for %s..."
+msgstr "%s Paketinin silinmesi başlatılıyor..."
+
+#: etc/inc/pkg-utils.inc:959
+#, php-format
+msgid "The %s package is not installed.%sDeletion aborted."
+msgstr "%s paketi kurulu deÄŸil.%s Silme iÅŸlemi duruduruldu."
+
+#: etc/inc/pkg-utils.inc:970
+#, php-format
+msgid "Removing %s package... "
+msgstr "%s paketi kaldırılıyor..."
+
+#: etc/inc/pkg-utils.inc:971
+#, php-format
+msgid "Removing %s components..."
+msgstr "%s bileşenleri kaldırılıyor..."
+
+#: etc/inc/pkg-utils.inc:983
+msgid "Tabs items... "
+msgstr "Sekmeler öğeler"
+
+#: etc/inc/pkg-utils.inc:1087
+msgid "Deinstall commands... "
+msgstr "Kaldırma komutları... "
+
+#: etc/inc/pkg-utils.inc:1097
+msgid "Removing package instructions..."
+msgstr "Paket yönergeleri kaldırılıyor..."
+
+#: etc/inc/pkg-utils.inc:1099
+#, php-format
+msgid "Remove '%s'"
+msgstr "'%s' Kaldır"
+
+#: etc/inc/pkg-utils.inc:1106
+msgid "Auxiliary files... "
+msgstr "Yardımcı dosyalar..."
+
+#: etc/inc/pkg-utils.inc:1120
+msgid "Package XML... "
+msgstr "XML Paketleri"
+
+#: etc/inc/pkg-utils.inc:1139
+msgid "Configuration... "
+msgstr "Yapılandırma..."
+
+#: etc/inc/pkg-utils.inc:1222
+msgid "One moment please, reinstalling packages...\n"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1223
+msgid " >>> Trying to fetch package info..."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1224
+msgid "Attempting to reinstall all packages"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1230
+#, php-format
+msgid ""
+" >>> Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr ""
+" >>> %1$s ile iletişim kurulamıyor. Lütfen DNS ve arabirim yapılandırmanızı, "
+"ayrıca %2$s in işlevsel internet bağlantısı olduğunu doğrulayın."
+
+#: etc/inc/pkg-utils.inc:1232
+msgid "Cannot reinstall packages: "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1241
+msgid "List of packages to reinstall: "
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1248
+msgid "Uninstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1250
+msgid "Finished uninstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1251
+msgid "Reinstalling package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1253
+msgid "Finished installing package"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1256
+msgid "Finished reinstalling all packages."
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1432
+msgid "Package Manager Settings"
+msgstr ""
+
+#: etc/inc/pkg-utils.inc:1451
+msgid "Downloading package configuration file... "
+msgstr "Paket yapılandırma dosyası indiriliyor... "
+
+#: etc/inc/pkg-utils.inc:1453
+msgid "Downloading package configuration file..."
+msgstr "Paket yapılandırma dosyası indiriliyor..."
+
+#: etc/inc/pkg-utils.inc:1457
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting installation."
+msgstr "Hata! Yapılandırma dosyası alınamıyor. Kurulum iptal ediliyor."
+
+#: etc/inc/pkg-utils.inc:1459
+msgid ""
+"ERROR! Unable to fetch package configuration file. Aborting package "
+"installation."
+msgstr "Hata! Yapılandırma dosyası alınamıyor. Paket kurulumu iptal ediliyor."
+
+#: etc/inc/pkg-utils.inc:1461
+msgid ""
+"failed!\n"
+"\n"
+"Installation aborted.\n"
+msgstr ""
+"başarısız!\n"
+"\n"
+"Kurulum iptal edildi.\n"
+
+#: etc/inc/pkg-utils.inc:1498
+msgid "Additional files... "
+msgstr "Ek dosyalar... "
+
+#: etc/inc/pkg-utils.inc:1524
+msgid "Extracting tarball to -C for "
+msgstr "tar.gz *tarball* -C ile çıkartılıyor "
+
+#: etc/inc/pkg-utils.inc:1530
+#, php-format
+msgid "Changing file mode to %1$s for %2$s%3$s%4$s"
+msgstr "Dosya modu %1$s olan %2$s%3$s%4$s a deÄŸiÅŸtiriliyor"
+
+#: etc/inc/priv/user.priv.inc:6
+msgid "User - Services - Captive portal login"
+msgstr "Kullanıcı - Servisler - Captive Portal girişi"
+
+#: etc/inc/priv/user.priv.inc:7
+msgid "Indicates whether the user is able to login on the captive portal."
+msgstr ""
+"Kullanıcının Captive portal'a girişinin mümkün olup olmadığını gösterir."
+
+#: etc/inc/priv.defs.inc:10
+msgid "WebCfg - All pages"
+msgstr "WebCfg - Tüm Sayfalar"
+
+#: etc/inc/priv.defs.inc:11
+msgid "Allow access to all pages"
+msgstr "Tüm sayfalara erişimi açar"
+
+#: etc/inc/priv.defs.inc:16
+msgid "WebCfg - Status: CARP page"
+msgstr "WebCfg - Durum: CARP (yük aktarma) sayfası"
+
+#: etc/inc/priv.defs.inc:17
+msgid "Allow access to the 'Status: CARP' page."
+msgstr "'Durum: CARP (Yük aktarma)' sayfasına erişime izin verir."
+
+#: etc/inc/priv.defs.inc:22
+msgid "WebCfg - Crash reporter"
+msgstr "Hata raporlayıcısı"
+
+#: etc/inc/priv.defs.inc:23
+msgid "Uploads crash reports to pfSense and or deletes crash reports."
+msgstr "Çakılma raporlarını PfSense' ye raporlar veya siler."
+
+#: etc/inc/priv.defs.inc:28
+msgid "WebCfg - Diagnostics: ARP Table page"
+msgstr "WebCfg - Araçlar: ARP Tablosu sayfası"
+
+#: etc/inc/priv.defs.inc:29
+msgid "Allow access to the 'Diagnostics: ARP Table' page."
+msgstr "'Araçlar: ARP Tablosu' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:34
+msgid "WebCfg - Diagnostics: Authentication page"
+msgstr "Webcfg - Araçlar: Kimlik Doğrulama sayfası"
+
+#: etc/inc/priv.defs.inc:35
+msgid "Allow access to the 'Diagnostics: Authentication' page."
+msgstr "'Araçlar: Kimlik Doğrulama' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:40
+msgid "WebCfg - Diagnostics: Backup/restore page"
+msgstr "Webcfg - Araçlar: Sistem Yedekle/ Geri Dön sayfası"
+
+#: etc/inc/priv.defs.inc:41
+msgid "Allow access to the 'Diagnostics: Backup/restore' page."
+msgstr "'Araçlar: Sistem Yedekle/ Geri Dön' sayfasına erişimi mümkün kılar."
+
+#: etc/inc/priv.defs.inc:46
+msgid "WebCfg - Diagnostics: Configuration History page"
+msgstr "Webcfg - Araçlar: Yapılandırma Geçmişi sayfası"
+
+#: etc/inc/priv.defs.inc:47
+msgid "Allow access to the 'Diagnostics: Configuration History' page."
+msgstr "'Araçlar: Yapılandırma Geçmişi' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:52
+msgid "WebCfg - Diagnostics: Factory defaults page"
+msgstr "Webcfg - Araçlar: Fabrika ayarları sayfası"
+
+#: etc/inc/priv.defs.inc:53
+msgid "Allow access to the 'Diagnostics: Factory defaults' page."
+msgstr "'Araçlar: Fabrika ayarları' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:58
+msgid "Webcfg - Diagnostics: NDP Table page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:59
+msgid "Allow access to the 'Diagnostics: NDP Table' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:64
+msgid "Webcfg - Diagnostics: Restore full backup"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:65
+msgid "Allow access to the 'Diagnostics: Restore Full Backup' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:70
+msgid "WebCfg - Diagnostics: Show States page"
+msgstr "Webcfg - Araçlar: Durumları görüntüleme sayfası"
+
+#: etc/inc/priv.defs.inc:71
+msgid "Allow access to the 'Diagnostics: Show States' page."
+msgstr "'Araçlar: Durumları görüntüleme' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:76
+msgid "WebCfg - Diagnostics: Sockets page"
+msgstr "WebCfg - Araçlar: Soketler sayfası"
+
+#: etc/inc/priv.defs.inc:77
+msgid "Allow access to the 'Diagnostics: Sockets' page."
+msgstr "'Araçlar: Soketler' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:82
+msgid "Webcfg - Diagnostics: Test Port"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:83
+msgid "Allow access to the 'Diagnostics: Test Port' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:88
+msgid "WebCfg - Status: IPsec page"
+msgstr "Webcfg - Durum: IPsec sayfası"
+
+#: etc/inc/priv.defs.inc:89
+msgid "Allow access to the 'Status: IPsec' page."
+msgstr "'Durum: IPsec' sayfasına erişmeye izin ver."
+
+#: etc/inc/priv.defs.inc:94
+msgid "WebCfg - Status: IPsec: Leasespage"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:95
+msgid "Allow access to the 'Status: IPsec: Leases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:100
+msgid "WebCfg - Status: IPsec: SAD page"
+msgstr "WebCfg - Durum: IPsec: SAD sayfası"
+
+#: etc/inc/priv.defs.inc:101
+msgid "Allow access to the 'Status: IPsec: SAD' page."
+msgstr "'Durum: IPsec: SAD' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:106
+msgid "WebCfg - Status: IPsec: SPD page"
+msgstr "WebCfg - Durum: IPsec: SPD sayfası"
+
+#: etc/inc/priv.defs.inc:107
+msgid "Allow access to the 'Status: IPsec: SPD' page."
+msgstr "'Durum: IPsec: SPD' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:112
+msgid "Webcfg - Status: NTP page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:113
+msgid "Allow access to the 'Status: NTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:118
+msgid "WebCfg - Diag IPsec XML page"
+msgstr "Webcfg - IPsec: XML incele sayfası"
+
+#: etc/inc/priv.defs.inc:119
+msgid "Allow access to the 'Diag IPsec XML' page."
+msgstr "'IPsec: XML incele' sayfasına erişimi mümkün kılar."
+
+#: etc/inc/priv.defs.inc:124
+msgid "WebCfg - Diagnostics: Logs: System page"
+msgstr "Webcfg - Araçlar: Sistem Kayıtları: Sistem sayfası"
+
+#: etc/inc/priv.defs.inc:125
+msgid "Allow access to the 'Diagnostics: Logs: System' page."
+msgstr "'Araçlar: Sistem Kayıtları: Sistem' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:130
+msgid "WebCfg - Status: System logs: Portal Auth page"
+msgstr "Webcfg - Durum: Sistem kayıtları: Portal Kimlik Doğrulama sayfası"
+
+#: etc/inc/priv.defs.inc:131
+msgid "Allow access to the 'Status: System logs: Portal Auth' page."
+msgstr ""
+"'Durum: Sistem kayıtları: Portal Kimlik Doğrulama' sayfasına erişim izni "
+"verir."
+
+#: etc/inc/priv.defs.inc:136
+msgid "WebCfg - Diagnostics: Logs: DHCP page"
+msgstr "Webcfg - Araçlar: Sistem Kayıtları: DHCP sayfası"
+
+#: etc/inc/priv.defs.inc:137
+msgid "Allow access to the 'Diagnostics: Logs: DHCP' page."
+msgstr "'Araçlar: Sistem Kayıtları: DHCP' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:142
+msgid "WebCfg - Diagnostics: Logs: Firewall page"
+msgstr "WebCfg - Araçlar: Sistem Kayıtları: Güvenlik duvarı sayfası"
+
+#: etc/inc/priv.defs.inc:143
+msgid "Allow access to the 'Diagnostics: Logs: Firewall' page."
+msgstr ""
+"'Araçlar: Sistem Kayıtları: Güvenlik duvarı' sayfasını kullanıcının "
+"erişimine açar."
+
+# 87%
+#: etc/inc/priv.defs.inc:148
+msgid "WebCfg - Diagnostics: Logs: Gateways page"
+msgstr "WebCfg - Araçlar: Sistem Kayıtları: Ağ Geçidi sayfası"
+
+# 84%
+#: etc/inc/priv.defs.inc:149
+msgid "Allow access to the 'Diagnostics: Logs: System: Gateways' page."
+msgstr "'Araçlar: Sistem Kayıtları: Sistem: Ağ Geçidi' sayfasını erişime açar."
+
+# 85%
+#: etc/inc/priv.defs.inc:154
+msgid "WebCfg - Diagnostics: Logs: Resolver page"
+msgstr "Webcfg - Araçlar: Sistem Kayıtları: Çözücü sayfası"
+
+# 84%
+#: etc/inc/priv.defs.inc:155
+msgid "Allow access to the 'Diagnostics: Logs: System: Resolver' page."
+msgstr "'Araçlar: Sistem Kayıtları: Sistem: Çözücü' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:160
+msgid "WebCfg - Hidden: No longer included page"
+msgstr "WebCfg - Gizli: Artık dahil edilmiyor sayfası"
+
+#: etc/inc/priv.defs.inc:161
+msgid "Allow access to the 'Hidden: No longer included' page."
+msgstr "'Gizli: Artık dahil edilmiyor' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:166 etc/inc/priv.defs.inc:184
+msgid "WebCfg - Status: System logs: IPsec VPN page"
+msgstr "WebCfg - Durum: Sistem Kayıtları: IPsec VPN sayfası"
+
+#: etc/inc/priv.defs.inc:167 etc/inc/priv.defs.inc:185
+msgid "Allow access to the 'Status: System logs: IPsec VPN' page."
+msgstr "'Durum: Sistem Kayıtları: Ipsec VPN' sayfasını erişime açar."
+
+# 88%
+#: etc/inc/priv.defs.inc:172
+msgid "WebCfg - Status: System logs: NTP page"
+msgstr "WebCfg - Durum: Sistem Kayıtları: NTP sayfası"
+
+# 91%
+#: etc/inc/priv.defs.inc:173
+msgid "Allow access to the 'Status: System logs: NTP' page."
+msgstr "'Durum: Sistem Kayıtları: NTP' sayfasını kullanıcının erişime açar."
+
+#: etc/inc/priv.defs.inc:178
+msgid "WebCfg - Status: System logs: OpenVPN page"
+msgstr "WebCfg - Durum: Sistem Kayıtları: OpenVPN sayfası"
+
+#: etc/inc/priv.defs.inc:179
+msgid "Allow access to the 'Status: System logs: OpenVPN' page."
+msgstr "'Durum: Sistem Kayıtları: OpenVPN' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:190
+msgid "WebCfg - Status: System logs: Load Balancer page"
+msgstr "WebCfg - Durum: Sistem Kayıtları: Yük Dengeleyici sayfası"
+
+#: etc/inc/priv.defs.inc:191
+msgid "Allow access to the 'Status: System logs: Load Balancer' page."
+msgstr ""
+"'Durum: Sistem Kayıtları: Yük Dengeleyici' sayfasını kullanıcının erişimine "
+"açar."
+
+#: etc/inc/priv.defs.inc:196
+msgid "Webcfg - Status: System logs: Routing page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:197
+msgid "Allow access to the 'Status: System logs: System: Routing' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:202
+msgid "Webcfg - Status: System logs: Wireless page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:203
+msgid "Allow access to the 'Status: System logs: System: Wireless' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:208
+msgid "WebCfg - Diagnostics: Logs: Settings page"
+msgstr "WebCfg - Araçlar: Sistem Kayıtları: Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:209
+msgid "Allow access to the 'Diagnostics: Logs: Settings' page."
+msgstr "'Araçlar: Sistem Kayıtları: Ayarlar' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:214
+msgid "WebCfg - Diagnostics: Logs: VPN page"
+msgstr "WebCfg - Araçlar: Sistem Kayıtları: VPN sayfası"
+
+#: etc/inc/priv.defs.inc:215
+msgid "Allow access to the 'Diagnostics: Logs: VPN' page."
+msgstr ""
+"'Araçlar: Sistem Kayıtları: VPN' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:220
+msgid "WebCfg - Diagnostics: NanoBSD"
+msgstr "WebCfg - Araçlar: NanoBSD"
+
+#: etc/inc/priv.defs.inc:221
+msgid "Allow access to the 'Diagnostics: NanoBSD' page."
+msgstr "'Araçlar: NanoBSD' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:226
+msgid "WebCfg - Diagnostics: Packet Capture page"
+msgstr "WebCfg - Araçlar Paket Yakalama sayfası"
+
+#: etc/inc/priv.defs.inc:227
+msgid "Allow access to the 'Diagnostics: Packet Capture' page."
+msgstr "'Araçlar Paket Yakalama' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:232
+msgid "WebCfg - Diagnostics: Patterns page"
+msgstr "WebCfg - Araçlar: Örüntüler sayfası"
+
+#: etc/inc/priv.defs.inc:233
+msgid "Allow access to the 'Diagnostics: Patterns' page."
+msgstr "'Araçlar: Örüntüler' sayfasına erişime izin verir."
+
+#: etc/inc/priv.defs.inc:238 usr/local/www/diag_limiter_info.php:45
+msgid "Diagnostics: Limiter Info"
+msgstr "Araçlar: Limitleyici Bilgisi"
+
+#: etc/inc/priv.defs.inc:239
+msgid "Allows access to the 'Diagnostics: Limiter Info' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:244 usr/local/www/diag_pf_info.php:45
+msgid "Diagnostics: pfInfo"
+msgstr "Araçlar: pfBilgi"
+
+#: etc/inc/priv.defs.inc:245
+msgid "Allows access to the 'Diagnostics: pfInfo' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:250
+msgid "WebCfg - Diagnostics: System Activity"
+msgstr "Webcfg - Araçlar: Sistem Kayıtları sayfası"
+
+#: etc/inc/priv.defs.inc:251
+msgid "Allows access to the 'Diagnostics: System Activity' page"
+msgstr "'''Araçlar: Sistem Kayıtları' sayfasına erişim izni verir"
+
+#: etc/inc/priv.defs.inc:256 usr/local/www/diag_system_pftop.php:44
+msgid "Diagnostics: pfTop"
+msgstr "Araçlar: pfTop"
+
+#: etc/inc/priv.defs.inc:257
+msgid "Allows access to the 'Diagnostics: pfTop' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:262
+msgid "WebCfg - Diagnostics: Ping page"
+msgstr "WebCfg - Araçlar: Ping sayfası"
+
+#: etc/inc/priv.defs.inc:263
+msgid "Allow access to the 'Diagnostics: Ping' page."
+msgstr "'Araçlar: Ping' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:268
+msgid "WebCfg - Status: Package logs page"
+msgstr "WebCfg - Durum: Paket Kayıtları sayfası"
+
+#: etc/inc/priv.defs.inc:269
+msgid "Allow access to the 'Status: Package logs' page."
+msgstr "'Durum: Paket Kayıtları' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:274
+msgid "WebCfg - Diagnostics: Reset state page"
+msgstr "WebCfg - Araçlar: Durum sıfırla sayfası"
+
+#: etc/inc/priv.defs.inc:275
+msgid "Allow access to the 'Diagnostics: Reset state' page."
+msgstr "'Araçlar: Durum sıfırla' sayfasının erişimine izin ver."
+
+#: etc/inc/priv.defs.inc:280
+msgid "WebCfg - Diagnostics: Routing tables page"
+msgstr "WebCfg - Araçlar: Yönlendirme tablosu sayfası"
+
+#: etc/inc/priv.defs.inc:281
+msgid "Allow access to the 'Diagnostics: Routing tables' page."
+msgstr "'Araçlar: Yönlendirme tablosu' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:286
+msgid "WebCfg - Diagnostics: States Summary page"
+msgstr "WebCfg - Araçlar: Durum Özetleri sayfası"
+
+#: etc/inc/priv.defs.inc:287
+msgid "Allow access to the 'Diagnostics: States Summary' page."
+msgstr "'Araçlar: Durum Özetleri' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:292
+msgid "WebCfg - Diagnostics: PF Table IP addresses"
+msgstr "WebCfg - Araçlar: PF Tablosu IP adresleri"
+
+#: etc/inc/priv.defs.inc:293
+msgid "Allow access to the 'Diagnostics: Tables' page."
+msgstr "'Araçlar: Tablolar' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:298
+msgid "WebCfg - Diagnostics: Traceroute page"
+msgstr "WebCfg - Araçlar: Tracerouter sayfası"
+
+#: etc/inc/priv.defs.inc:299
+msgid "Allow access to the 'Diagnostics: Traceroute' page."
+msgstr "'Araçlar: Traceroute' sayfasını erişilebilir yapar."
+
+#: etc/inc/priv.defs.inc:304
+msgid "WebCfg - Diagnostics: Edit FIle"
+msgstr "WebCfg - Araçlar: Dosya Düzenle"
+
+#: etc/inc/priv.defs.inc:305
+msgid "Allow access to the 'Diagnostics: Edit File' page."
+msgstr "'Araçlar: Dosya Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:312
+msgid "WebCfg - Diagnostics: Command page"
+msgstr "WebCfg - Araçlar: Komut sayfası"
+
+#: etc/inc/priv.defs.inc:313
+msgid "Allow access to the 'Diagnostics: Command' page."
+msgstr "'Araçlar: Komut' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:318
+msgid "WebCfg - Firewall: Aliases page"
+msgstr "WebCfg - Güvenlik duvarı: Gruplar sayfası"
+
+#: etc/inc/priv.defs.inc:319
+msgid "Allow access to the 'Firewall: Aliases' page."
+msgstr "'Güvenlik duvarı: Gruplar' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:324
+msgid "WebCfg - Firewall: Alias: Edit page"
+msgstr "WebCfg - Güvenlik duvarı: Grup: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:325
+msgid "Allow access to the 'Firewall: Alias: Edit' page."
+msgstr "'Güvenlik duvarı: Grup: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:330
+msgid "WebCfg - Firewall: Alias: Import page"
+msgstr "WebCfg - Güvenlik duvarı: Grup: Toplu içe aktarım sayfası"
+
+#: etc/inc/priv.defs.inc:331
+msgid "Allow access to the 'Firewall: Alias: Import' page."
+msgstr "'Güvenlik duvarı: Grup: Toplu içe aktarım' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:336
+msgid "Webcfg - Firewall: NAT: NPT page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:337
+msgid "Allow access to the 'Firewall: NAT: NPT' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:342
+msgid "Webcfg - Firewall: NAT: NPt: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:343
+msgid "Allow access to the 'Firewall: NAT: NPt: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:348
+msgid "WebCfg - Firewall: NAT: Port Forward page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: Port Yönlendirme sayfası"
+
+#: etc/inc/priv.defs.inc:349
+msgid "Allow access to the 'Firewall: NAT: Port Forward' page."
+msgstr "'Güvenlik duvarı: NAT: Port Yönlendirme' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:354
+msgid "WebCfg - Firewall: NAT: 1:1 page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: 1:1 sayfası"
+
+#: etc/inc/priv.defs.inc:355
+msgid "Allow access to the 'Firewall: NAT: 1:1' page."
+msgstr "'Güvenlik duvarı: NAT: 1:1' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:360
+msgid "WebCfg - Firewall: NAT: 1:1: Edit page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: 1:1: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:361
+msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page."
+msgstr "'Güvenlik duvarı: NAT: 1:1: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:366
+msgid "WebCfg - Firewall: NAT: Port Forward: Edit page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: Port Yönlendirme: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:367
+msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page."
+msgstr ""
+"'Güvenlik duvarı: NAT: Port Yönlendirme: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:372
+msgid "WebCfg - Firewall: NAT: Outbound page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: Dışarı giden sayfası"
+
+#: etc/inc/priv.defs.inc:373
+msgid "Allow access to the 'Firewall: NAT: Outbound' page."
+msgstr "'Güvenlik duvarı: NAT: Dışarı giden' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:378
+msgid "WebCfg - Firewall: NAT: Outbound: Edit page"
+msgstr "WebCfg - Güvenlik duvarı: NAT: Dışarı giden: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:379
+msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page."
+msgstr ""
+"'Güvenlik duvarı: NAT: Dışarı giden: Düzenle' sayfasını erişilebilir yapar."
+
+#: etc/inc/priv.defs.inc:384
+msgid "WebCfg - Firewall: Rules page"
+msgstr "WebCfg - Güvenlik Duvarı: Kurallar sayfası"
+
+#: etc/inc/priv.defs.inc:385
+msgid "Allow access to the 'Firewall: Rules' page."
+msgstr "'Güvenlik Duvarı: Kurallar' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:390
+msgid "WebCfg - Firewall: Rules: Edit page"
+msgstr "WebCfg - Güvenlik Duvarı: Kurallar: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:391
+msgid "Allow access to the 'Firewall: Rules: Edit' page."
+msgstr "'Güvenlik Duvarı: Kurallar: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:396
+msgid "WebCfg - Firewall: Schedules page"
+msgstr "WebCfg - Güvenlik Duvarı: Zamanlamalar sayfası"
+
+#: etc/inc/priv.defs.inc:397
+msgid "Allow access to the 'Firewall: Schedules' page."
+msgstr "'Güvenlik Duvarı: Zamanlamalar' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:402
+msgid "WebCfg - Firewall: Schedules: Edit page"
+msgstr "WebCfg - Güvenlik Duvarı: Zamanlamalar: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:403
+msgid "Allow access to the 'Firewall: Schedules: Edit' page."
+msgstr "'Güvenlik Duvarı: Zamanlamalar: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:408
+msgid "WebCfg - Firewall: Traffic Shaper page"
+msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici sayfası"
+
+#: etc/inc/priv.defs.inc:409
+msgid "Allow access to the 'Firewall: Traffic Shaper' page."
+msgstr "'Güvenlik Duvarı: Trafik Şekillendirici' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:414
+msgid "WebCfg - Firewall: Traffic Shaper: Layer7 page"
+msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Layer7 sayfası"
+
+#: etc/inc/priv.defs.inc:415
+msgid "Allow access to the 'Firewall: Traffic Shaper: Layer7' page."
+msgstr ""
+"'Güvenlik Duvarı: Trafik Şekillendirici: Layer7' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:420
+msgid "WebCfg - Firewall: Traffic Shaper: Queues page"
+msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Kuyruklar sayfası"
+
+#: etc/inc/priv.defs.inc:421
+msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page."
+msgstr ""
+"'Güvenlik Duvarı: Trafik Şekillendirici: Kuyruklar' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:426
+msgid "WebCfg - Firewall: Traffic Shaper: Limiter page"
+msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Limitleyici sayfası"
+
+#: etc/inc/priv.defs.inc:427
+msgid "Allow access to the 'Firewall: Traffic Shaper: Limiter' page."
+msgstr ""
+"'Güvenlik Duvarı: Trafik Şekillendirici: Limitleyici' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:432
+msgid "WebCfg - Firewall: Traffic Shaper: Wizard page"
+msgstr "WebCfg - Güvenlik Duvarı: Trafik Şekillendirici: Sihirbaz sayfası"
+
+#: etc/inc/priv.defs.inc:433
+msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page."
+msgstr ""
+"'Güvenlik duvarı: Trafik Şekillendirici: Sihirbaz' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:438
+msgid "WebCfg - Firewall: Virtual IP Addresses page"
+msgstr "WebCfg - Güvenlik Duvarı: Sanal IP Adresleri sayfası"
+
+#: etc/inc/priv.defs.inc:439
+msgid "Allow access to the 'Firewall: Virtual IP Addresses' page."
+msgstr ""
+"'Güvenlik Duvarı: Sanal IP Adresleri' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:444
+msgid "WebCfg - Firewall: Virtual IP Address: Edit page"
+msgstr "WebCfg - Güvenlik Duvarı: Sanal IP Adresi: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:445
+msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page."
+msgstr ""
+"Güvenlik Duvarı: Sanal IP Adresi: Düzenle' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:450
+msgid "WebCfg - AJAX: Get Service Providers"
+msgstr "WebCfg - AJAX: Servis Sağlayıcıları Al"
+
+#: etc/inc/priv.defs.inc:451
+msgid "Allow access to the 'AJAX: Service Providers' page."
+msgstr "'AJAX: Servis Sağlayıcıları Al' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:456
+msgid "WebCfg - AJAX: Get Stats"
+msgstr "WebCfg - AJAX: Ä°statistikler"
+
+#: etc/inc/priv.defs.inc:457
+msgid "Allow access to the 'AJAX: Get Stats' page."
+msgstr "'AJAX: İstatistikleri Al' sayfasının erişimine izin ver."
+
+#: etc/inc/priv.defs.inc:462
+msgid "WebCfg - Diagnostics: Interface Traffic page"
+msgstr "WebCfg - Araçlar: Arabirim Trafiği sayfası"
+
+#: etc/inc/priv.defs.inc:463
+msgid "Allow access to the 'Diagnostics: Interface Traffic' page."
+msgstr "'Araçlar: Arabirim Trafiği' sayfasını erişilebilir yapar."
+
+#: etc/inc/priv.defs.inc:468 etc/inc/priv.defs.inc:972
+msgid "WebCfg - Diagnostics: CPU Utilization page"
+msgstr "WebCfg - Araçlar: İşlemci Kaynak Kullanımı sayfası"
+
+#: etc/inc/priv.defs.inc:469 etc/inc/priv.defs.inc:973
+msgid "Allow access to the 'Diagnostics: CPU Utilization' page."
+msgstr ""
+"'Araçlar: İşlemci Kaynak Kullanımı' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:474
+msgid "WebCfg - Diagnostics: Halt system page"
+msgstr "WebCfg - Araçlar: Sistemi kapat sayfası"
+
+#: etc/inc/priv.defs.inc:475
+msgid "Allow access to the 'Diagnostics: Halt system' page."
+msgstr "'Araçlar: Sistemi Kapat' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:480
+msgid "WebCfg - Required for javascript page"
+msgstr "WebCfg - Javascript sayfası için gerekli"
+
+#: etc/inc/priv.defs.inc:481
+msgid "Allow access to the 'Required for javascript' page."
+msgstr "'Javascript için gerekli' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:486
+msgid "WebCfg - XMLRPC Interface Stats page"
+msgstr "WebCfg - XMLRPC Arabirim İstatistikleri sayfası"
+
+#: etc/inc/priv.defs.inc:487
+msgid "Allow access to the 'XMLRPC Interface Stats' page."
+msgstr "'XMLRPC Arabirim İstatistikleri' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:492
+msgid "WebCfg - System: Login / Logout page / Dashboard"
+msgstr "WebCfg - Sistem: Anasayfa / Oturum açma / Oturum kapatma"
+
+#: etc/inc/priv.defs.inc:493
+msgid "Allow access to the 'System: Login / Logout' page and Dashboard."
+msgstr ""
+"'Sistem: Oturum açma / Oturum kapatma' sayfalarına ve anasayfaya erişimi "
+"açar."
+
+#: etc/inc/priv.defs.inc:498
+msgid "WebCfg - Interfaces: WAN page"
+msgstr "WebCfg - Arabirimler: WAN sayfası"
+
+#: etc/inc/priv.defs.inc:499
+msgid "Allow access to the 'Interfaces' page."
+msgstr "'Arabirimler' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:504
+msgid "WebCfg - Interfaces: Assign network ports page"
+msgstr "WebCfg - Arabirimler: Network portlarını ata sayfası"
+
+#: etc/inc/priv.defs.inc:505
+msgid "Allow access to the 'Interfaces: Assign network ports' page."
+msgstr "'Arabirimler: Network portlarını ata' sayfasına erişme izni ver."
+
+#: etc/inc/priv.defs.inc:510
+msgid "WebCfg - Interfaces: Bridge page"
+msgstr "WebCfg - Arabirimler: Köprü sayfası"
+
+#: etc/inc/priv.defs.inc:511
+msgid "Allow access to the 'Interfaces: Bridge' page."
+msgstr "'Arabirimler: Köprü' sayfasına erişimi mümkün kılar."
+
+#: etc/inc/priv.defs.inc:516
+msgid "WebCfg - Interfaces: Bridge edit page"
+msgstr "WebCfg - Arabirimler: Köprü: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:517
+msgid "Allow access to the 'Interfaces: Bridge : Edit' page."
+msgstr "'Arabirimler: Köprü: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:522
+msgid "WebCfg - Interfaces: GIF page"
+msgstr "WebCfg - Arabirimler: GIF sayfası"
+
+#: etc/inc/priv.defs.inc:523
+msgid "Allow access to the 'Interfaces: GIF' page."
+msgstr "'Arabirimler: GIF' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:528
+msgid "WebCfg - Interfaces: GIF: Edit page"
+msgstr "WebCfg - Arabirimler: GIF: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:529
+msgid "Allow access to the 'Interfaces: GIF: Edit' page."
+msgstr "'Arabirimler: GIF: Düzenle' sayfasına erişim verir."
+
+#: etc/inc/priv.defs.inc:534
+msgid "WebCfg - Interfaces: GRE page"
+msgstr "WebCfg - Arabirimler: GRE sayfası"
+
+#: etc/inc/priv.defs.inc:535
+msgid "Allow access to the 'Interfaces: GRE' page."
+msgstr "'Arabirimler: GRE' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:540
+msgid "WebCfg - Interfaces: GRE: Edit page"
+msgstr "WebCfg - Arabirimler: GRE: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:541
+msgid "Allow access to the 'Interfaces: GRE: Edit' page."
+msgstr "'Arabirimler: GRE: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:546
+msgid "WebCfg - Interfaces: Groups page"
+msgstr "WebCfg - Arabirimler: Gruplar sayfası"
+
+#: etc/inc/priv.defs.inc:547
+msgid "Create interface groups"
+msgstr "Arabirim grupları oluştur"
+
+#: etc/inc/priv.defs.inc:552
+msgid "Interfaces: Groups: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:553
+msgid "Allow access to the 'Interfaces: Groups: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:558
+msgid "WebCfg - Interfaces: LAGG: page"
+msgstr "WebCfg - Arabirimler: LAGG sayfası"
+
+#: etc/inc/priv.defs.inc:559
+msgid "Edit Interface LAGG"
+msgstr "Arabirim LAGG düzenle"
+
+#: etc/inc/priv.defs.inc:564
+msgid "Interfaces: LAGG: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:565
+msgid "Allow access to the 'Interfaces: LAGG: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:570
+msgid "WebCfg - Interfaces: ppps page"
+msgstr "WebCfg - Arabirimler: PPPler sayfası"
+
+#: etc/inc/priv.defs.inc:571
+msgid "Allow access to the 'Interfaces: ppps' page."
+msgstr "'Arabirimler: PPPler' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:576
+msgid "WebCfg - Interfaces: PPPs: Edit page"
+msgstr "WebCfg - Arabirimler: PPPler: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:577
+msgid "Allow access to the 'Interfaces: PPPs: Edit' page."
+msgstr "'Arabirimler: PPPler: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:582
+msgid "WebCfg - Interfaces: QinQ page"
+msgstr "WebCfg - Arabirimler: QinQ sayfası"
+
+#: etc/inc/priv.defs.inc:583
+msgid "Allow access to the 'Interfaces: QinQ' page."
+msgstr "'Arabirimler: QinQ' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:588
+msgid "Interfaces: QinQ: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:589
+msgid "Allow access to 'Interfaces: QinQ: Edit' page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:594
+msgid "WebCfg - Interfaces: VLAN page"
+msgstr "WebCfg - Arabirimler: VLAN sayfası"
+
+#: etc/inc/priv.defs.inc:595
+msgid "Allow access to the 'Interfaces: VLAN' page."
+msgstr "'Arabirimler: VLAN' sayfasına erişim açar."
+
+#: etc/inc/priv.defs.inc:600
+msgid "WebCfg - Interfaces: VLAN: Edit page"
+msgstr "WebCfg - Arabirimler: VLAN: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:601
+msgid "Allow access to the 'Interfaces: VLAN: Edit' page."
+msgstr "'Arabirimler: VLAN: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:606
+msgid "WebCfg - Interfaces: Wireless page"
+msgstr "WebCfg - Arabirimler: Kablosuz sayfası"
+
+#: etc/inc/priv.defs.inc:607
+msgid "Allow access to the 'Interfaces: Wireless' page."
+msgstr "'Arabirimler: Kablosuz' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:612
+msgid "WebCfg - Interfaces: Wireless edit page"
+msgstr "WebCfg - Arabirimler: Kablosuz: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:613
+msgid "Allow access to the 'Interfaces: Wireless : Edit' page."
+msgstr "'Arabirimler: Kablosuz: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:618
+msgid "WebCfg - System: License page"
+msgstr "WebCfg - Sistem: Lisans sayfası"
+
+#: etc/inc/priv.defs.inc:619
+msgid "Allow access to the 'System: License' page."
+msgstr "'Sistem: Lisans' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:624
+msgid "WebCfg - Services: Load Balancer: Monitors page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: İzlemeler sayfası"
+
+#: etc/inc/priv.defs.inc:625
+msgid "Allow access to the 'Services: Load Balancer: Monitors' page."
+msgstr "'Servisler: Yük Dengeleyici: İzlemeler' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:630
+msgid "WebCfg - Services: Load Balancer: Monitor: Edit page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: İzlemeler: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:631
+msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: İzlemeler: Düzenle' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:636
+msgid "WebCfg - Load Balancer: Pool page"
+msgstr "WebCfg - Yük Dengeleyici: Havuzlar sayfası"
+
+#: etc/inc/priv.defs.inc:637
+msgid "Allow access to the 'Load Balancer: Pool' page."
+msgstr "'Yük Dengeleyici: Havuzlar' sayfasına erişim açar."
+
+#: etc/inc/priv.defs.inc:642
+msgid "WebCfg - Load Balancer: Pool: Edit page"
+msgstr "WebCfg - Yük Dengeleyici: Havuz: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:643
+msgid "Allow access to the 'Load Balancer: Pool: Edit' page."
+msgstr "'Yük Dengeleyici: Havuz: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:648
+msgid "WebCfg - Services: Load Balancer: Relay Actions page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarma Eylemi sayfası"
+
+#: etc/inc/priv.defs.inc:649
+msgid "Allow access to the 'Services: Load Balancer: Relay Actions' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Aktarma Eylemleri' sayfasına erişmeye izin "
+"verir."
+
+#: etc/inc/priv.defs.inc:654
+msgid "WebCfg - Services: Load Balancer: Relay Action: Edit page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarma Eylemi: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:655
+msgid "Allow access to the 'Services: Load Balancer: Relay Action: Edit' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Aktarım Eylemi: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:660
+msgid "WebCfg - Services: Load Balancer: Relay Protocols page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: Aktarım Protokolleri sayfası"
+
+#: etc/inc/priv.defs.inc:661
+msgid "Allow access to the 'Services: Load Balancer: Relay Protocols' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Aktarım Protokolleri' sayfasına erişme izni "
+"verir."
+
+#: etc/inc/priv.defs.inc:666
+msgid "WebCfg - Services: Load Balancer: Relay Protocol: Edit page"
+msgstr ""
+"WebCfg - Servisler: Yük Dengeleyici: Aktarım Protokolü: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:667
+msgid ""
+"Allow access to the 'Services: Load Balancer: Relay Protocol: Edit' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Aktarım Protokolü: Düzenle' sayfasını erişime "
+"açar."
+
+#: etc/inc/priv.defs.inc:672
+msgid "Webcfg - Services: Load Balancer: setting page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:673
+msgid "Allow access to the 'Settings: Load Balancer: Settings' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:678
+msgid "WebCfg - Services: Load Balancer: Virtual Servers page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: Sanal Sunucular sayfası"
+
+#: etc/inc/priv.defs.inc:679
+msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Sanal Sunucular' sayfasını kullanıcının "
+"erişimine açar."
+
+#: etc/inc/priv.defs.inc:684
+msgid "Webcfg - Services: NTP"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:685
+msgid "Allow access to the 'Services: NTP' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:690
+msgid "Webcfg - Status: NTP GPS page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:691
+msgid "Allow access to the 'Status: NTP Serial GPS' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:696
+msgid "Webcfg - Status: NTP PPS page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:697
+msgid "Allow access to the 'Status: NTP PPS' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:702
+msgid "WebCfg - Load Balancer: Virtual Server: Edit page"
+msgstr "WebCfg - Servisler: Yük Dengeleyici: Sanal Sunucu: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:703
+msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page."
+msgstr ""
+"'Servisler: Yük Dengeleyici: Sanal Sunucular: Düzenleme' sayfasının "
+"eriÅŸimine izin ver."
+
+#: etc/inc/priv.defs.inc:708
+msgid "WebCfg - Package: Settings page"
+msgstr "WebCfg - Paket: Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:709
+msgid "Allow access to the 'Package: Settings' page."
+msgstr "'Paket: Ayarlar' sayfasını erişilebilir hale getirir."
+
+#: etc/inc/priv.defs.inc:714
+msgid "WebCfg - Package: Edit page"
+msgstr "WebCfg - Paket: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:715
+msgid "Allow access to the 'Package: Edit' page."
+msgstr "'Paket: Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:720
+msgid "WebCfg - System: Package Manager page"
+msgstr "WebCfg - Sistem: Paket Yöneticisi sayfası"
+
+#: etc/inc/priv.defs.inc:721
+msgid "Allow access to the 'System: Package Manager' page."
+msgstr "'Sistem: Paket Yöneticisi' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:726
+msgid "WebCfg - System: Package Manager: Install Package page"
+msgstr "WebCfg - Sistem: Paket Yönetici: Paket Kur sayfası"
+
+#: etc/inc/priv.defs.inc:727
+msgid "Allow access to the 'System: Package Manager: Install Package' page."
+msgstr "'Sistem: Paket Yöneticisi: Paket Kur' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:732
+msgid "WebCfg - System: Package Manager: Installed page"
+msgstr "WebCfg - Sistem: Paket Yöneticisi: Kurulu Paketler sayfası"
+
+#: etc/inc/priv.defs.inc:733
+msgid "Allow access to the 'System: Package Manager: Installed' page."
+msgstr "'Sistem: Paket Yöneticisi: Kurulu Paketler sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:738
+msgid "WebCfg - Packages: Settings page"
+msgstr "WebCfg - Paketler: Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:739
+msgid "Allow access to the 'Packages: Settings' page."
+msgstr "'Paketler: Ayarlar' sayfasına erişim açar."
+
+#: etc/inc/priv.defs.inc:744
+msgid "WebCfg - Diagnostics: Reboot System page"
+msgstr "WebCfg - Araçlar: Yeniden Başlat sayfası"
+
+#: etc/inc/priv.defs.inc:745
+msgid "Allow access to the 'Diagnostics: Reboot System' page."
+msgstr "'Araçlar: Yeniden Başlat' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:750
+msgid "WebCfg - Diagnostics: Restart HTTPD : System page"
+msgstr "WebCfg - Araçlar: (HTTPD) Web sunucuyu yeniden başlat: Sistem sayfası"
+
+#: etc/inc/priv.defs.inc:751
+msgid "Allow access to the 'Diagnostics: Restart HTTPD: System' page."
+msgstr ""
+"'Araçlar: (HTTPD) Web sunucuyu yeniden başlat: Sistem' sayfasına erişimi "
+"açar."
+
+#: etc/inc/priv.defs.inc:756
+msgid "WebCfg - Services: Captive portal page"
+msgstr "WebCfg - Servisler: Hizmet Portalı sayfası"
+
+#: etc/inc/priv.defs.inc:757
+msgid "Allow access to the 'Services: Captive portal' page."
+msgstr "'Servisler: Hizmet portalı' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:762
+msgid "WebCfg - Services: Captive portal: File Manager page"
+msgstr "WebCfg - Servisler: Hizmet portalı: Dosya Yöneticisi sayfası"
+
+#: etc/inc/priv.defs.inc:763
+msgid "Allow access to the 'Services: Captive portal: File Manager' page."
+msgstr "'Servisler: Hizmet portalı: Dosya yöneticisi' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:768
+msgid "WebCfg - Services: Captive portal: Allowed IPs page"
+msgstr "WebCfg - Servisler: Hizmet portalı: İzinli IPler sayfası"
+
+#: etc/inc/priv.defs.inc:769
+msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page."
+msgstr "'Servisler: Hizmet portalı: İzinli IPler' sayfasına erişim verir."
+
+#: etc/inc/priv.defs.inc:774
+msgid "WebCfg - Services: Captive portal: Edit Allowed IPs page"
+msgstr "WebCfg - Servisler: Hizmet portalı: İznli IPler düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:775
+msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page."
+msgstr ""
+"'Servisler: Hizmet portalı: İznli IPler düzenle' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:780
+msgid "WebCfg - Services: Captive portal: Mac Addresses page"
+msgstr "WebCfg - Servisler: Hizmet portalı: MAC Adresleri sayfası"
+
+#: etc/inc/priv.defs.inc:781
+msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page."
+msgstr ""
+"'Servisler: Hizmet portalı: MAC Adresleri' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:786
+msgid "WebCfg - Services: Captive portal: Edit MAC Addresses page"
+msgstr "WebCfg - Servisler: Hizmet portalı: MAC Adresi Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:787
+msgid ""
+"Allow access to the 'Services: Captive portal: Edit MAC Addresses' page."
+msgstr ""
+"'Servisler: Hizmet portalı: MAC Adresi Düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:792
+msgid "WebCfg - Services: Captive portal: Allowed Hostnames page"
+msgstr ""
+"WebCfg - Servisler: Capitve portal: İzin verilen Ana Bilgisayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:793 etc/inc/priv.defs.inc:799
+msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page."
+msgstr ""
+"'Servisler: Hizmet Portalı: İzin verilen Ana Bilgisayar adları' sayfasına "
+"eriÅŸime izin ver."
+
+#: etc/inc/priv.defs.inc:798
+msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames page"
+msgstr ""
+"WebCfg - Servisler: Hizmet Portalı: İzin verilen Ana Bilgisayar sayfasını "
+"düzenle"
+
+#: etc/inc/priv.defs.inc:804
+msgid "Webcfg - Services: Captive portal: Edit Zones page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:805
+msgid "Allow access to the 'Services: Captive portal: Edit Zones' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:810
+msgid "WebCfg - Services: Captive portal Vouchers page"
+msgstr "WebCfg - Servisler: Hizmet Portalı: Biletler sayfası"
+
+#: etc/inc/priv.defs.inc:811
+msgid "Allow access to the 'Services: Captive portal Vouchers' page."
+msgstr "'Servisler: Hizmet portalı: Biletler' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:822
+msgid "WebCfg - Services: Captiveprotal Zones page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:823
+msgid "Allow access to the 'Services: CaptivePortal Zones' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:828
+msgid "WebCfg - Services: DHCP server page"
+msgstr "WebCfg - Servisler: DHCP sunucu sayfası"
+
+#: etc/inc/priv.defs.inc:829
+msgid "Allow access to the 'Services: DHCP server' page."
+msgstr "'Servisler: DHCP Sunucu' sayfasını kullanıcının erişimine açar."
+
+#: etc/inc/priv.defs.inc:834
+msgid "WebCfg - Services: DHCP Server : Edit static mapping page"
+msgstr "WebCfg - Servisler: DHCP Sunucu: Rezervasyon düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:835
+msgid "Allow access to the 'Services: DHCP Server : Edit static mapping' page."
+msgstr ""
+"'Servisler: DHCP Sunucu: Rezervasyon düzenle' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:840
+msgid "WebCfg - Services: DHCP Relay page"
+msgstr "WevCfg - Servisler: DHCP Aracısı sayfası"
+
+#: etc/inc/priv.defs.inc:841
+msgid "Allow access to the 'Services: DHCP Relay' page."
+msgstr "'Servisler: DHCP Aracısı' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:846
+msgid "Webcfg - Services: DHCPv6 server page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:847
+msgid "Allow access to the 'Services: DHCPv6 server' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:852
+msgid "Webcfg - Services: DHCPv6 Server : Edit static mapping page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:853
+msgid ""
+"Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:858
+msgid "Webcfg - Services: DHCPv6 Relay page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:859
+msgid "Allow access to the 'Services: DHCPv6 Relay' page."
+msgstr "'Servisler: DHCPv6 Aracısı' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:864
+msgid "WebCfg - Services: DNS Forwarder page"
+msgstr "WebCfg - Servisler: DNS Yönlendirici sayfası"
+
+#: etc/inc/priv.defs.inc:865
+msgid "Allow access to the 'Services: DNS Forwarder' page."
+msgstr "'Servisler: DNS Yönlendirici' sayfasına erişime olanak verir."
+
+#: etc/inc/priv.defs.inc:870
+msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override page"
+msgstr ""
+"WebCfg - Servisler: DNS Yönlendirici: Etki alanı Üzerine yazmayı Düzenleme "
+"sayfası "
+
+#: etc/inc/priv.defs.inc:871
+msgid ""
+"Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page."
+msgstr ""
+"'Servisler: DNS Yönlendirici: Etki alanı Üzerine yazmayı Düzenleme' "
+"sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:876
+msgid "WebCfg - Services: DNS Forwarder: Edit host page"
+msgstr "WebCfg - Servisler: DNS Yönlendirici: Host düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:877
+msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page."
+msgstr "'Servisler: DNS Yönlendirici: Host düzenle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:882
+msgid "WebCfg - Services: DNS Resolver page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:883
+msgid "Allow access to the 'Services: DNS Resolver' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:888
+msgid "WebCfg - Services: DNS Resolver: Advanced page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:889
+msgid "Allow access to the 'Services: DNS Resolver: Advanced' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:894
+msgid "WebCfg - Services: DNS Resolver: Access Lists page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:895
+msgid "Allow access to the 'Services: DNS Resolver: Access Lists' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:900
+msgid "WebCfg - Services: DNS Resolver: Access Lists: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:901
+msgid "Allow access to the 'Services: DNS Resolver: Access Lists: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:906
+msgid "WebCfg - Services: DNS Resolver: Edit Domain Override page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:907
+msgid ""
+"Allow access to the 'Services: DNS Resolver: Edit Domain Override' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:912
+msgid "WebCfg - Services: DNS Resolver: Edit host page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:913
+msgid "Allow access to the 'Services: DNS Resolver: Edit host' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:918
+msgid "WebCfg - Services: Dynamic DNS clients page"
+msgstr "WebCfg - Servisler: Dinamik DNS istemcisi sayfası"
+
+#: etc/inc/priv.defs.inc:919
+msgid "Allow access to the 'Services: Dynamic DNS clients' page."
+msgstr "'Servisler: Dinamik DNS istemcileri' sayfasına erişim verir."
+
+#: etc/inc/priv.defs.inc:924
+msgid "WebCfg - Services: Dynamic DNS client page"
+msgstr "WebCfg - Servisler: Dinamik DNS istemci sayfası"
+
+#: etc/inc/priv.defs.inc:925
+msgid "Allow access to the 'Services: Dynamic DNS client' page."
+msgstr "'Servisler: Dinamik DNS istemcileri' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:930
+msgid "WebCfg - Services: Igmpproxy page"
+msgstr "WebCfg - Servisler: IGMP Vekil sayfası"
+
+#: etc/inc/priv.defs.inc:931
+msgid "Allow access to the 'Services: Igmpproxy' page."
+msgstr "'Servisler: IGMP Vekil' sayfasına erişim açar."
+
+#: etc/inc/priv.defs.inc:936
+msgid "Firewall: Igmpproxy: Edit page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:937
+msgid "Allow access to the 'Services: Igmpproxy: Edit' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:942
+msgid "WebCfg - Services: RFC 2136 clients page"
+msgstr "WebCfg - Servisler: RFC 2136 istemcileri sayfası"
+
+#: etc/inc/priv.defs.inc:943
+msgid "Allow access to the 'Services: RFC 2136 clients' page."
+msgstr "'Servisler: RFC 2136 istemcileri' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:948
+msgid "Webcfg - Services: Router advertisementspage"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:949
+msgid "Allow access to the 'Services: Router Advertisements' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:954
+msgid "WebCfg - Services: SNMP page"
+msgstr "WebCfg - Servisler: SNMP sayfası"
+
+#: etc/inc/priv.defs.inc:955
+msgid "Allow access to the 'Services: SNMP' page."
+msgstr "'Servisler: SNMP' sayfasını erişilebilir kılar."
+
+#: etc/inc/priv.defs.inc:960
+msgid "WebCfg - Services: Wake on LAN page"
+msgstr "WebCfg - Servisler: LAN ile Uyan sayfası"
+
+#: etc/inc/priv.defs.inc:961
+msgid "Allow access to the 'Services: Wake on LAN' page."
+msgstr "'Servisler: LAN ile Uyan' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:966
+msgid "WebCfg - Services: Wake on LAN: Edit page"
+msgstr "WebCfg - Servisler: LAN ile Uyan: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:967
+msgid "Allow access to the 'Services: Wake on LAN: Edit' page."
+msgstr "'Servisler: LAN ile Uyan: Düzenle' sayfasını erişilebilir yapar."
+
+#: etc/inc/priv.defs.inc:978
+msgid "WebCfg - Hidden: Detailed Status page"
+msgstr "WebCfg - Gizli: Detaylı Durum sayfası"
+
+#: etc/inc/priv.defs.inc:979
+msgid "Allow access to the 'Hidden: Detailed Status' page."
+msgstr "'Gizli: Detaylı Durum' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:984
+msgid "WebCfg - Status: Captive portal page"
+msgstr "WebCfg - Durum: Hizmet Portalı sayfası"
+
+#: etc/inc/priv.defs.inc:985
+msgid "Allow access to the 'Status: Captive portal' page."
+msgstr "'Durum: Hizmet Portalı sayfası' sayfasına erişim izni sağlar."
+
+#: etc/inc/priv.defs.inc:990
+msgid "Webcfg - Status: Captive portal Expire Vouchers page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:991
+msgid "Allow access to the 'Status: Captive portal Expire Vouchers' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:996
+msgid "WebCfg - Status: Captive portal test Vouchers page"
+msgstr "WebCfg - Durum: Hizmet Portalı Test Biletleri sayfası"
+
+#: etc/inc/priv.defs.inc:997
+msgid "Allow access to the 'Status: Captive portal Test Vouchers' page."
+msgstr ""
+"'Durum: Hizmet portalı: Test Biletleri' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1002
+msgid "WebCfg - Status: Captive portal Voucher Rolls page"
+msgstr "WebCfg - Durum: Hizmet Portalı Bilet Dağıtımı sayfası"
+
+#: etc/inc/priv.defs.inc:1003
+msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page."
+msgstr "'Durum: Hizmet portalı Bilet Dağıtımı' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1008
+msgid "WebCfg - Status: Captive portal Vouchers page"
+msgstr "WebCfg - Durum: Hizmet Portalı Biletler sayfası"
+
+#: etc/inc/priv.defs.inc:1009
+msgid "Allow access to the 'Status: Captive portal Vouchers' page."
+msgstr "'Durum: Hizmet Portalı: Biletler' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1014
+msgid "WebCfg - Status: DHCP leases page"
+msgstr "WebCfg - Durum: DHCP kiraları sayfası"
+
+#: etc/inc/priv.defs.inc:1015
+msgid "Allow access to the 'Status: DHCP leases' page."
+msgstr "'Durum DHCP Kiraları' sayfasına erişim verir."
+
+#: etc/inc/priv.defs.inc:1020
+msgid "Webcfg - Status: DHCPv6 leases page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1021
+msgid "Allow access to the 'Status: DHCPv6 leases' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1026
+msgid "WebCfg - Status: Filter Reload Status page"
+msgstr "WebCfg - Durum: Filtre Yeniden Yükleme Durumu sayfası"
+
+#: etc/inc/priv.defs.inc:1027
+msgid "Allow access to the 'Status: Filter Reload Status' page."
+msgstr ""
+"'Durum: Filtre Yeniden Yükleme Durumu' sayfasına erişim yetkisini açar."
+
+#: etc/inc/priv.defs.inc:1032
+msgid "WebCfg - Status: Gateway Groups page"
+msgstr "WebCfg - Durum: Ağ Geçidi Grupları sayfası"
+
+#: etc/inc/priv.defs.inc:1033
+msgid "Allow access to the 'Status: Gateway Groups' page."
+msgstr "'Durum: Ağ Geçidi Grupları' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1038
+msgid "WebCfg - Status: Gateways page"
+msgstr "WebCfg - Durum: Ağ Geçitleri sayfası"
+
+#: etc/inc/priv.defs.inc:1039
+msgid "Allow access to the 'Status: Gateways' page."
+msgstr "'Durum: Ağ Geçitleri' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1044
+msgid "WebCfg - Status: Traffic Graph page"
+msgstr "WebCfg - Durum: Trafik Grafikleri sayfası"
+
+#: etc/inc/priv.defs.inc:1045
+msgid "Allow access to the 'Status: Traffic Graph' page."
+msgstr "'Durum: Trafik Grafikleri' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1053
+msgid "WebCfg - Status: CPU load page"
+msgstr "WebCfg - Durum: İşlemci Yükü sayfası"
+
+#: etc/inc/priv.defs.inc:1054
+msgid "Allow access to the 'Status: CPU load' page."
+msgstr "'Durum: İşlemci Yükü' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1059
+msgid "WebCfg - Status: Interfaces page"
+msgstr "WebCfg - Durum: Arabirimler sayfası"
+
+#: etc/inc/priv.defs.inc:1060
+msgid "Allow access to the 'Status: Interfaces' page."
+msgstr "'Durum: Arabirimler' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1065
+msgid "WebCfg - Status: Load Balancer: Pool page"
+msgstr "WebCfg - Durum: Yük Dengeleyici: Havuz sayfası"
+
+#: etc/inc/priv.defs.inc:1066
+msgid "Allow access to the 'Status: Load Balancer: Pool' page."
+msgstr "'Durum: Yük Dengeleyici: Havuz' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1071
+msgid "WebCfg - Status: Load Balancer: Virtual Server page"
+msgstr "WebCfg - Durum: Yük Dengeleyici: Sanal Sunucu sayfası"
+
+#: etc/inc/priv.defs.inc:1072
+msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page."
+msgstr "'Durum: Yük Dengeleyici: Sanal Sunucu' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1077
+msgid "WebCfg - Status: OpenVPN page"
+msgstr "WebCfg - Durum: OpenVPN sayfası"
+
+#: etc/inc/priv.defs.inc:1078
+msgid "Allow access to the 'Status: OpenVPN' page."
+msgstr "'Durum: OpenVPN' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1083
+msgid "WebCfg - Status: Traffic shaper: Queues page"
+msgstr "WebCfg - Durum: Trafik Şekillendirici: Kuyruklar sayfası"
+
+#: etc/inc/priv.defs.inc:1084
+msgid "Allow access to the 'Status: Traffic shaper: Queues' page."
+msgstr "'Durum: Trafik Şekillendirici: Kuyruklar' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1089
+msgid "WebCfg - Status: RRD Graphs page"
+msgstr "WebCfg - Durum: RRD Grafikleri sayfası"
+
+#: etc/inc/priv.defs.inc:1090
+msgid "Allow access to the 'Status: RRD Graphs' page."
+msgstr "'Durum: RRD Grafikleri' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1096
+msgid "WebCfg - Status: RRD Graphs settings page"
+msgstr "WebCfg - Durum: RRD Grafikleri: Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:1097
+msgid "Allow access to the 'Status: RRD Graphs: settings' page."
+msgstr "'Durum: RRD Grafikleri: Ayarlar' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1102
+msgid "WebCfg - Status: Services page"
+msgstr "WebCfg - Durum: Servisler sayfası"
+
+#: etc/inc/priv.defs.inc:1103
+msgid "Allow access to the 'Status: Services' page."
+msgstr "'Durum: Servisler' sayfasına erişim yetkisini açar."
+
+#: etc/inc/priv.defs.inc:1108
+msgid "WebCfg - Status: UPnP Status page"
+msgstr "WebCfg - Durum: UPnP Durumu sayfası"
+
+#: etc/inc/priv.defs.inc:1109
+msgid "Allow access to the 'Status: UPnP Status' page."
+msgstr "'Durum: UPnP Durumu' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1114
+msgid "WebCfg - Status: Wireless page"
+msgstr "WebCfg - Durum: Kablosuz sayfası"
+
+#: etc/inc/priv.defs.inc:1115
+msgid "Allow access to the 'Status: Wireless' page."
+msgstr "'Durum: Kablosuz' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1120
+msgid "WebCfg - System: General Setup page"
+msgstr "WebCfg - Sistem: Genel Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:1121
+msgid "Allow access to the 'System: General Setup' page."
+msgstr "'Sistem: Genel Ayarlar' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1126
+msgid "WebCfg - System: Advanced: Admin Access Page"
+msgstr "WebCfg - Sistem: Gelişmiş: Yönetici Erişimi sayfası"
+
+#: etc/inc/priv.defs.inc:1127
+msgid "Allow access to the 'System: Advanced: Admin Access' page."
+msgstr "'Sistem: Gelişmiş: Yönetici Erişimi' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1132
+msgid "WebCfg - System: Advanced: Firewall and NAT page"
+msgstr "WebCfg - Sistem: Gelişmiş: Güvenlik Duvarı ve NAT sayfası"
+
+#: etc/inc/priv.defs.inc:1133
+msgid "Allow access to the 'System: Advanced: Firewall and NAT' page."
+msgstr "'Sistem: Gelişmiş: Güvenlik Duvarı ve NAT' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1138
+msgid "WebCfg - System: Advanced: Miscellaneous page"
+msgstr "WebCfg - Sistem: Gelişmiş: Diğer sayfası"
+
+#: etc/inc/priv.defs.inc:1139
+msgid "Allow access to the 'System: Advanced: Miscellaneous' page."
+msgstr "'Sistem: Gelişmiş: Diğer' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1144
+msgid "WebCfg - System: Advanced: Network page"
+msgstr "WebCfg - Sistem: Gelişmiş: Ağ sayfası"
+
+#: etc/inc/priv.defs.inc:1145
+msgid "Allow access to the 'System: Advanced: Networking' page."
+msgstr "'Sistem: Gelişmiş: Ağ' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1150
+msgid "WebCfg - System: Advanced: Notifications page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1151
+msgid "Allow access to the 'System: Advanced: Notifications' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1156
+msgid "WebCfg - System: Advanced: Tunables page"
+msgstr "WebCfg - Sistem: Gelişmiş: Değişkenler sayfası"
+
+#: etc/inc/priv.defs.inc:1157
+msgid "Allow access to the 'System: Advanced: Tunables' page."
+msgstr "'Sistem: Gelişmiş: Değişkenlerr' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1162
+msgid "WebCfg - System: Authentication Servers"
+msgstr "WebCfg - Sistem: Kimlik Doğrulama Sunucuları"
+
+#: etc/inc/priv.defs.inc:1163
+msgid "Allow access to the 'System: Authentication Servers' page."
+msgstr "'Sistem: Kimlik Doğrulama Sunucuları' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1168
+msgid "WebCfg - System: CA Manager"
+msgstr "WebCfg - Sistem: (CA) Sertifika Yöneticisi"
+
+#: etc/inc/priv.defs.inc:1169
+msgid "Allow access to the 'System: CA Manager' page."
+msgstr "'Sistem: (CA) Sertifika Yöneticisi' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1174
+msgid "WebCfg - System: Certificate Manager"
+msgstr "WebCfg - Sistem: Sertifika Yöneticisi"
+
+#: etc/inc/priv.defs.inc:1175
+msgid "Allow access to the 'System: Certificate Manager' page."
+msgstr "'Sistem: Sertifika Yöneticisi' sayfasına erişime izin verir."
+
+#: etc/inc/priv.defs.inc:1180
+msgid "WebCfg - System: CRL Manager"
+msgstr "WebCfg - Sistem: CRL Yönetici"
+
+#: etc/inc/priv.defs.inc:1181
+msgid "Allow access to the 'System: CRL Manager' page."
+msgstr "'Sistem: CRL Yönetici' sayfasının erişimine izin ver."
+
+#: etc/inc/priv.defs.inc:1186
+msgid "WebCfg - System: Firmware: Manual Update page"
+msgstr "WebCfg - Sistem: Üretici yazılımı: Elle Güncelle sayfası"
+
+#: etc/inc/priv.defs.inc:1187
+msgid "Allow access to the 'System: Firmware: Manual Update' page."
+msgstr ""
+"'Sistem: Üretici yazılımı: Elle Güncelleme' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1192
+msgid "WebCfg - System: Firmware: Check For Update page"
+msgstr "WebCfg - Sistem: Üretici yazılımı: Güncelleme Kontrolü sayfası"
+
+#: etc/inc/priv.defs.inc:1193
+msgid "Allow access to the 'System: Firmware: Check For Update' page."
+msgstr ""
+"'Sistem: Üretici yazılımı: Güncelleme Kontrolü' sayfasına erişim yetkisi "
+"verir."
+
+#: etc/inc/priv.defs.inc:1198
+msgid "WebCfg - System: Firmware: Auto Update page"
+msgstr "WebCfg - Sistem: Üretici yazılımı: Otomatik Güncelle sayfası"
+
+#: etc/inc/priv.defs.inc:1199
+msgid "Allow access to the 'System: Firmware: Auto Update' page."
+msgstr ""
+"'Sistem: Üretici yazılımı: Otomatik Güncelle' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1204
+msgid "WebCfg - System: Firmware: Settings page"
+msgstr "WebCfg - Sistem: Üretici yazılımı: Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:1205
+msgid "Allow access to the 'System: Firmware: Settings' page."
+msgstr "'Sistem: Üretici yazılımı: Ayarlar' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1210
+msgid "WebCfg - System: Gateway Groups page"
+msgstr "WebCfg - Sistem: Ağ Geçit Grupları sayfası"
+
+#: etc/inc/priv.defs.inc:1211
+msgid "Allow access to the 'System: Gateway Groups' page."
+msgstr "'Sistem: Ağ Geçidi Grupları' sayfasına erişim yetkisini açar."
+
+#: etc/inc/priv.defs.inc:1216
+msgid "WebCfg - System: Gateways: Edit Gateway Groups page"
+msgstr "WebCfg - Sistem: Ağ Geçitleri: Ağ Geçidi Grupları Düzenleme sayfası"
+
+#: etc/inc/priv.defs.inc:1217
+msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page."
+msgstr ""
+"'Sistem: Ağ Geçitleri: Ağ Geçidi Grupları Düzenleme' sayfasına erişim "
+"yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1222
+msgid "WebCfg - System: Gateways page"
+msgstr "WebCfg - Sistem: Ağ Geçitleri sayfası"
+
+#: etc/inc/priv.defs.inc:1223
+msgid "Allow access to the 'System: Gateways' page."
+msgstr "'Sistem: Ağ Geçitleri' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1228
+msgid "WebCfg - System: Gateways: Edit Gateway page"
+msgstr "WebCfg - Sistem: Ağ Geçitlerini Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1229
+msgid "Allow access to the 'System: Gateways: Edit Gateway' page."
+msgstr ""
+"'Sistem: Ağ Geçitleri: Ağ Geçitlerini Düzenle' sayfasına erişim yetkisini "
+"açar."
+
+#: etc/inc/priv.defs.inc:1234
+msgid "WebCfg - System: Group manager page"
+msgstr "WebCfg - Sistem: Grup Yöneticisi sayfası"
+
+#: etc/inc/priv.defs.inc:1235
+msgid "Allow access to the 'System: Group manager' page."
+msgstr "'Sistem: Grup Yöneticisi' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1240
+msgid "WebCfg - System: Group Manager: Add Privileges page"
+msgstr "WebCfg - Sistem: Grup Yöneticisi: Yetki Ekle sayfası"
+
+#: etc/inc/priv.defs.inc:1241
+msgid "Allow access to the 'System: Group Manager: Add Privileges' page."
+msgstr "'Sistem: Grup Yöneticisi: Yeki Ekle' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1246
+msgid "Webcfg - System: High Availability Sync"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1247
+msgid "Allow access to the 'System: High Availability Sync' page."
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1252
+msgid "WebCfg - System: Static Routes page"
+msgstr "WebCfg - Sistem: Sabit Yönlendirmeler sayfası"
+
+#: etc/inc/priv.defs.inc:1253
+msgid "Allow access to the 'System: Static Routes' page."
+msgstr "'Sistem: Sabit Yönlendirmeler sayfası' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1258
+msgid "WebCfg - System: Static Routes: Edit route page"
+msgstr "WebCfg - Sistem: Sabit Yönlendirmeler: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1259
+msgid "Allow access to the 'System: Static Routes: Edit route' page."
+msgstr ""
+"'Sistem: Sabit Yönlendirmeler: Düzenle' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1264
+msgid "WebCfg - System: User Manager page"
+msgstr "WebCfg - Sistem: Kullanıcı Yönetici sayfası"
+
+#: etc/inc/priv.defs.inc:1265
+msgid "Allow access to the 'System: User Manager' page."
+msgstr "'Sistem: Kullanıcı Yönetici' sayfasına erişim olanağı verir."
+
+#: etc/inc/priv.defs.inc:1270
+msgid "WebCfg - System: User Manager: Add Privileges page"
+msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Yetki Ekle sayfası"
+
+#: etc/inc/priv.defs.inc:1271
+msgid "Allow access to the 'System: User Manager: Add Privileges' page."
+msgstr "'Sistem: Kullanıcı Yöneticisi: Yetki Ekle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1276
+msgid "WebCfg - System: User Password Manager page"
+msgstr "WebCfg - Sistem: Kullanıcı Parola Yönetici sayfası"
+
+#: etc/inc/priv.defs.inc:1277
+msgid "Allow access to the 'System: User Password Manager' page."
+msgstr "'Sistem: Kullanıcı Parola Yönetici' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1282
+msgid "WebCfg - System: User Manager: settings page"
+msgstr "WebCfg - Sistem: Kullanıcı Yönetimi: ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:1283
+msgid "Allow access to the 'System: User Manager: settings' page."
+msgstr "'Sistem: Kullanıcı Yönetimi: ayarlar' sayfasına erişime izin ver."
+
+#: etc/inc/priv.defs.inc:1288
+msgid "WebCfg - System: User Manager: Settings: Test LDAP page"
+msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Ayarlar: LDAP Test sayfası"
+
+#: etc/inc/priv.defs.inc:1289
+msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page."
+msgstr ""
+"'Sistem: Kullanıcı Yöneticisi: Ayarlar: LDAP Test' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1294
+msgid "WebCfg - System: Firmware: Manual Update page (progress bar)"
+msgstr ""
+"WebCfg - Sistem: Üretici yazılımı: Elle Güncelleme sayfası (ilerleme durumu)"
+
+#: etc/inc/priv.defs.inc:1295
+msgid ""
+"Allow access to the 'System: Firmware: Manual Update: Progress bar' page."
+msgstr ""
+"'Sistem: Üretici yazılımı: Elle Güncelleme sayfası (ilerleme durumu)'nu "
+"erişime açar."
+
+#: etc/inc/priv.defs.inc:1300
+msgid "WebCfg - Hidden: Upload Configuration page"
+msgstr "WebCfg - Gizli: Yapılandırma Yükle sayfası"
+
+#: etc/inc/priv.defs.inc:1301
+msgid "Allow access to the 'Hidden: Upload Configuration' page."
+msgstr "'Gizli: Yapılandırma Yükle' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1306
+msgid "WebCfg - VPN: IPsec page"
+msgstr "WebCfg - VPN: IPsec sayfası"
+
+#: etc/inc/priv.defs.inc:1307
+msgid "Allow access to the 'VPN: IPsec' page."
+msgstr "'VPN: IPsec' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1312
+msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List"
+msgstr "WebCfg - VPN: IPsec: Ön Paylaşımlı Anahtarlar Listesi"
+
+#: etc/inc/priv.defs.inc:1313
+msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page."
+msgstr ""
+"'VPN: IPsec: Ön Paylaşımlı Anahtarlar Listesi' sayfasına erişim yetkisi "
+"verir."
+
+#: etc/inc/priv.defs.inc:1318
+msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys"
+msgstr "WebCfg - VPN: IPsec: Ön paylaşımlı Anahtarları Düzenle"
+
+#: etc/inc/priv.defs.inc:1319
+msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page."
+msgstr "'VPN: IPsec: Ön Paylaşımlı Anahtarı Düzenle' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1324
+msgid "WebCfg - VPN: IPsec: Mobile page"
+msgstr "WebCfg - VPN: IPsec: Mobil istemciler sayfası"
+
+#: etc/inc/priv.defs.inc:1325
+msgid "Allow access to the 'VPN: IPsec: Mobile' page."
+msgstr "'VPN: IPsec: Mobil istemciler' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1330
+msgid "WebCfg - VPN: IPsec: Edit Phase 1 page"
+msgstr "WebCfg - VPN: IPsec: Aşama 1 düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1331
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page."
+msgstr "'VPN: IPsec: Aşama 1 Düzenle' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1336
+msgid "WebCfg - VPN: IPsec: Edit Phase 2 page"
+msgstr "WebCfg - VPN: IPsec: Aşama 2 düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1337
+msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page."
+msgstr "'VPN: IPsec: Aşama 2 Düzenle' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1342
+msgid "WebCfg - VPN: VPN L2TP page"
+msgstr "WebCfg - VPN: VPN L2TP sayfası"
+
+#: etc/inc/priv.defs.inc:1343
+msgid "Allow access to the 'VPN: VPN L2TP' page."
+msgstr "'VPN: VPN L2TP' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1348
+msgid "WebCfg - VPN: VPN L2TP : Users page"
+msgstr "WebCfg - VPN: VPN L2TP: Kullanıcılar sayfası"
+
+#: etc/inc/priv.defs.inc:1349
+msgid "Allow access to the 'VPN: VPN L2TP : Users' page."
+msgstr "'VPN: VPN L2TP: Kullanıcılar' sayfasını erişime açar."
+
+#: etc/inc/priv.defs.inc:1354
+msgid "WebCfg - VPN: VPN L2TP : Users : Edit page"
+msgstr "WebCfg - VPN: VPN L2TP: Kullanıcılar: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1355
+msgid "Allow access to the 'VPN: VPN L2TP : Users : Edit' page."
+msgstr "'VPN: VPN L2TP: Kullanıcılar: Düzenle' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1360
+msgid "WebCfg - OpenVPN: Client page"
+msgstr "WebCfg - OpenVPN: İstemci sayfası"
+
+#: etc/inc/priv.defs.inc:1361
+msgid "Allow access to the 'OpenVPN: Client' page."
+msgstr "'OpenVPN: İstemci' sayfasına erişim olanağı verir."
+
+#: etc/inc/priv.defs.inc:1366
+msgid "WebCfg - OpenVPN: Client Specific Override page"
+msgstr "WebCfg - OpenVPN: İstemciye Özel Ayarlar sayfası"
+
+#: etc/inc/priv.defs.inc:1367
+msgid "Allow access to the 'OpenVPN: Client Specific Override' page."
+msgstr "'OpenVPN: İstemciye Özel Ayarlar' sayfasına erişim yetkisini açar."
+
+#: etc/inc/priv.defs.inc:1372
+msgid "WebCfg - OpenVPN: Server page"
+msgstr "WebCfg - OpenVPN: Sunucu sayfası"
+
+#: etc/inc/priv.defs.inc:1373
+msgid "Allow access to the 'OpenVPN: Server' page."
+msgstr "'OpenVPN: Sunucu' sayfasına erişim izni verir."
+
+#: etc/inc/priv.defs.inc:1378
+msgid "WebCfg - Services: PPPoE Server page"
+msgstr "WebCfg - Servisler: PPPoE Sunucu sayfası"
+
+#: etc/inc/priv.defs.inc:1379
+msgid "Allow access to the 'Services: PPPoE Server' page."
+msgstr "'Servisler: PPPoE Sunucu' sayfasına erişim yetkisi verir."
+
+#: etc/inc/priv.defs.inc:1384
+msgid "WebCfg - Services: PPPoE Server: Edit page"
+msgstr "WebCfg - Servisler: PPPoE Sunucu: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1385
+msgid "Allow access to the 'Services: PPPoE Server: Edit' page."
+msgstr "'Servisler: PPPoE Sunucu: Düzenle' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1390
+msgid "WebCfg - VPN: VPN PPTP page"
+msgstr "WebCfg - VPN: VPN PPTP sayfası"
+
+#: etc/inc/priv.defs.inc:1391
+msgid "Allow access to the 'VPN: VPN PPTP' page."
+msgstr "'VPN: VPN PPTP' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1396
+msgid "WebCfg - VPN: VPN PPTP: Users page"
+msgstr "WebCfg - VPN: VPN PPTP: Kullanıcılar sayfası"
+
+#: etc/inc/priv.defs.inc:1397
+msgid "Allow access to the 'VPN: VPN PPTP: Users' page."
+msgstr "'VPN: VPN PPTP: Kullanıcılar' sayfasına erişme olanağı verir."
+
+#: etc/inc/priv.defs.inc:1402
+msgid "WebCfg - VPN: VPN PPTP: User: Edit page"
+msgstr "WebCfg - VPN: VPN PPTP: Kullanıcı: Düzenle sayfası"
+
+#: etc/inc/priv.defs.inc:1403
+msgid "Allow access to the 'VPN: VPN PPTP: User: Edit' page."
+msgstr "'VPN: VPN PPTP: Kullanıcı: Düzenle' sayfasına erişme olanağı verir."
+
+#: etc/inc/priv.defs.inc:1408
+msgid "WebCfg - pfSense wizard subsystem page"
+msgstr "WebCfg - pfSense sihirbaz altsistemi sayfası"
+
+#: etc/inc/priv.defs.inc:1409
+msgid "Allow access to the 'pfSense wizard subsystem' page."
+msgstr "'pfSense sihirbaz altsistemi' sayfasına erişime izin verir."
+
+#: etc/inc/priv.defs.inc:1414
+msgid "WebCfg - XMLRPC Library page"
+msgstr "WebCfg - XMLRPC Kütüphane sayfası"
+
+#: etc/inc/priv.defs.inc:1415
+msgid "Allow access to the 'XMLRPC Library' page."
+msgstr "'XMLRPC Kütüphane' sayfasına erişimi açar."
+
+#: etc/inc/priv.defs.inc:1420
+msgid "WebCfg - Firewall: Easy Rule add/status page"
+msgstr ""
+
+#: etc/inc/priv.defs.inc:1421
+msgid "Allow access to the 'Firewall: Easy Rule' add/status page."
+msgstr ""
+
+#: etc/inc/radius.inc:406
+msgid "Error sending request:"
+msgstr "İstek gönderilmesinde hata:"
+
+#: etc/inc/radius.inc:412
+msgid "RADIUS_ACCESS_ACCEPT is unexpected for accounting"
+msgstr "RADIUS_ACCESS_ACCEPT hesap için beklenmeyen durum"
+
+#: etc/inc/radius.inc:421
+msgid "RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication"
+msgstr "RADIUS_ACCOUNTING_RESPONSE beklenmeyen kimlik doğrulaması"
+
+#: etc/inc/radius.inc:426
+#, php-format
+msgid "Unexpected return value: %s"
+msgstr "Beklenmeyen değer dögüsü: %s"
+
+#: etc/inc/rrd.inc:44
+#, php-format
+msgid "RRD dump failed exited with %1$s, the error is: %2$s"
+msgstr "Hata: %2$s . RRD dökümü %1$s ile çıkıldı başarısız oldu"
+
+#: etc/inc/rrd.inc:102
+#, php-format
+msgid "RRD create failed exited with %1$s, the error is: %2$s"
+msgstr "RRD oluşturma %1$s ile sonlandı başarısız oldu, hata: %2$s"
+
+#: etc/inc/rrd.inc:117
+#, php-format
+msgid ""
+"Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has "
+"%3$s DS values and %4$s RRA databases"
+msgstr ""
+"RRD yi içeri aktar %1$s DS değerleri ve %2$s RRA veritabanı, RRD nin yeni "
+"formatı %3$s DS değerleri ve %4$s RRA veritabanı"
+
+#: etc/inc/rrd.inc:201
+#, php-format
+msgid "The new RRD now has %1$s DS values and %2$s RRA databases"
+msgstr "Yeni RRD şimdi %1$s DS değeri ve %2$s RRA veritabanı"
+
+#: etc/inc/rrd.inc:209
+msgid "Generating RRD graphs..."
+msgstr "RRD grafikleri oluÅŸturuluyor..."
+
+# Loglar da sorun yaratiyor. Bu nedenle ş, ı, ğ karakterlerini s,i,g olarak kullanmakta fayda var..
+#: etc/inc/rrd.inc:912
+msgid "Creating rrd update script"
+msgstr "Rrd güncellestirme komut dosyasi olusturuluyor"
+
+#: etc/inc/service-utils.inc:239
+msgid "Router Advertisement Daemon"
+msgstr "Yönlendirici İlan Servisi"
+
+#: etc/inc/service-utils.inc:246 usr/local/www/diag_backup.php:184
+#: usr/local/www/fbegin.inc:139
+msgid "DNS Forwarder"
+msgstr "DNS Yönlendirici"
+
+#: etc/inc/service-utils.inc:253
+msgid "Unbound DNS Resolver"
+msgstr ""
+
+#: etc/inc/service-utils.inc:259
+msgid "NTP clock sync"
+msgstr "NTP saat senkronizasyonu"
+
+#: etc/inc/service-utils.inc:268 usr/local/www/diag_backup.php:182
+#: usr/local/www/fbegin.inc:138 usr/local/www/fbegin.inc:173
+#: usr/local/www/services_captiveportal_zones.php:64
+#: usr/local/www/status_rrd_graph_settings.php:59
+#: usr/local/www/status_rrd_graph_settings.php:162
+msgid "Captive Portal"
+msgstr "Hizmet Portalı"
+
+#: etc/inc/service-utils.inc:285 usr/local/www/fbegin.inc:141
+#: usr/local/www/services_dhcp_relay.php:102
+msgid "DHCP Relay"
+msgstr "DHCP Aracısı (Relay)"
+
+#: etc/inc/service-utils.inc:292 usr/local/www/fbegin.inc:142
+#: usr/local/www/services_dhcpv6_relay.php:103
+msgid "DHCPv6 Relay"
+msgstr "DHCPv6 Aktarma"
+
+#: etc/inc/service-utils.inc:299
+msgid "DHCP Service"
+msgstr "DHCP Servisi"
+
+#: etc/inc/service-utils.inc:307
+msgid "Gateway Monitoring Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:314
+msgid "SNMP Service"
+msgstr "SNMP Servisi"
+
+#: etc/inc/service-utils.inc:321 usr/local/www/fbegin.inc:148
+msgid "IGMP proxy"
+msgstr "IGMP vekil"
+
+#: etc/inc/service-utils.inc:328
+msgid "UPnP Service"
+msgstr "UPnP Servisi"
+
+#: etc/inc/service-utils.inc:335
+msgid "RIP Daemon"
+msgstr "RIP Servisi"
+
+#: etc/inc/service-utils.inc:342 usr/local/www/diag_logs_ipsec.php:61
+msgid "IPsec VPN"
+msgstr "IPsec VPN"
+
+#: etc/inc/service-utils.inc:349
+msgid "Secure Shell Daemon"
+msgstr ""
+
+#: etc/inc/service-utils.inc:362 etc/inc/system.inc:2091
+#: usr/local/www/diag_backup.php:191 usr/local/www/diag_logs.php:86
+#: usr/local/www/diag_logs_auth.php:77 usr/local/www/diag_logs_dhcp.php:80
+#: usr/local/www/diag_logs_filter.php:143
+#: usr/local/www/diag_logs_filter_dynamic.php:108
+#: usr/local/www/diag_logs_filter_summary.php:197
+#: usr/local/www/diag_logs_gateways.php:88
+#: usr/local/www/diag_logs_ipsec.php:81 usr/local/www/diag_logs_ntpd.php:75
+#: usr/local/www/diag_logs_openvpn.php:46
+#: usr/local/www/diag_logs_openvpn.php:79 usr/local/www/diag_logs_ppp.php:77
+#: usr/local/www/diag_logs_relayd.php:76
+#: usr/local/www/diag_logs_resolver.php:88
+#: usr/local/www/diag_logs_routing.php:75
+#: usr/local/www/diag_logs_settings.php:275
+#: usr/local/www/diag_logs_vpn.php:135 usr/local/www/diag_logs_wireless.php:77
+#: usr/local/www/diag_packet_capture.php:110 usr/local/www/fbegin.inc:165
+#: usr/local/www/fbegin.inc:184 usr/local/www/license.php:143
+#: usr/local/www/status_graph.php:69 usr/local/www/status_openvpn.php:46
+#: usr/local/www/vpn_openvpn_client.php:41
+#: usr/local/www/vpn_openvpn_csc.php:41
+#: usr/local/www/vpn_openvpn_server.php:479
+msgid "OpenVPN"
+msgstr "OpenVPN"
+
+#: etc/inc/service-utils.inc:372
+msgid "Server load balancing daemon"
+msgstr "Sunucu yük dengeleyici servisi"
+
+#: etc/inc/service-utils.inc:416
+msgid "Not available."
+msgstr "Kullanılamaz."
+
+#: etc/inc/service-utils.inc:449
+msgid "Running"
+msgstr "Çalışıyor"
+
+#: etc/inc/service-utils.inc:450 etc/inc/service-utils.inc:458
+#, php-format
+msgid "%s Service is"
+msgstr "%s Servisi"
+
+#: etc/inc/service-utils.inc:457
+msgid "Stopped"
+msgstr "Durdu"
+
+#: etc/inc/service-utils.inc:457 usr/local/www/firewall_nat_1to1_edit.php:287
+#: usr/local/www/firewall_nat_edit.php:479
+#: usr/local/www/firewall_nat_npt_edit.php:165
+#: usr/local/www/firewall_nat_out_edit.php:453
+#: usr/local/www/firewall_rules_edit.php:856 usr/local/www/interfaces.php:2732
+#: usr/local/www/interfaces_ppps_edit.php:616
+#: usr/local/www/system_gateways_edit.php:647
+#: usr/local/www/system_routes_edit.php:315
+#: usr/local/www/system_usermanager.php:527
+#: usr/local/www/system_usermanager.php:906
+#: usr/local/www/vpn_ipsec_phase1.php:569
+#: usr/local/www/vpn_ipsec_phase2.php:552
+#: usr/local/www/vpn_openvpn_client.php:465
+#: usr/local/www/vpn_openvpn_client.php:1115
+#: usr/local/www/vpn_openvpn_csc.php:336 usr/local/www/vpn_openvpn_csc.php:746
+#: usr/local/www/vpn_openvpn_server.php:763
+#: usr/local/www/vpn_openvpn_server.php:1831
+msgid "Disabled"
+msgstr "Devredışı"
+
+#: etc/inc/service-utils.inc:482
+#, php-format
+msgid "Restart %sService"
+msgstr "%s Servisini Yeniden BaÅŸlat"
+
+#: etc/inc/service-utils.inc:493
+#, php-format
+msgid "Stop %sService"
+msgstr "%s Servisini Durdur"
+
+#: etc/inc/service-utils.inc:509
+#, php-format
+msgid "Start %sService"
+msgstr "%s Servisini BaÅŸlat"
+
+#: etc/inc/service-utils.inc:577
+#, php-format
+msgid "%s has been started."
+msgstr "%s başlatıldı."
+
+#: etc/inc/service-utils.inc:647
+#, php-format
+msgid "%s has been stopped."
+msgstr "%s durduruldu."
+
+#: etc/inc/service-utils.inc:716
+#, php-format
+msgid "%s has been restarted."
+msgstr "%s tekrar başlatıldı."
+
+#: etc/inc/services.inc:378
+#, php-format
+msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s"
+msgstr "DHCP kiraları geri yükleme başarısız %1$s, hata : %2$s%3$s"
+
+#: etc/inc/services.inc:404
+msgid "Starting DHCP service..."
+msgstr "DHCP servisi başlatılıyor..."
+
+#: etc/inc/services.inc:487
+msgid "Warning! DHCP Failover setup and no CARP virtual IPs defined!"
+msgstr ""
+
+#: etc/inc/services.inc:896
+#, php-format
+msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"
+msgstr ""
+"Hata: services_dhcpdv4_configure().%s içerisindeki dhcpd.conf açılamıyor"
+
+#: etc/inc/services.inc:1377
+msgid "Could not write Igmpproxy configuration file!"
+msgstr "Igmpproxy yapılandırma dosyasına yazılamıyor!"
+
+#: etc/inc/services.inc:1386
+msgid "Started IGMP proxy service."
+msgstr "IGMP vekil servisi başlatıldı."
+
+#: etc/inc/services.inc:1410
+msgid "Starting DHCP relay service..."
+msgstr "DHCP relay servisi başlatılıyor..."
+
+#: etc/inc/services.inc:1532
+msgid "Starting DHCPv6 relay service..."
+msgstr "DHCPv6 relay servisi başlatılıyor..."
+
+#: etc/inc/services.inc:1673
+msgid "Starting DynDNS clients..."
+msgstr "DynDNS istemcisi başlatılıyor..."
+
+#: etc/inc/services.inc:1742
+msgid "Starting DNS forwarder..."
+msgstr "DNS yönlendiricisi başlatılıyor..."
+
+#: etc/inc/services.inc:1896
+msgid "Starting DNS Resolver..."
+msgstr ""
+
+#: etc/inc/services.inc:1936
+msgid "Starting SNMP daemon... "
+msgstr "SNMP servisi başlatılıyor..."
+
+#: etc/inc/services.inc:1941
+#, php-format
+msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s"
+msgstr "Hata: %s services_snmpd_configure() içinde snmpd.conf açılamıyor"
+
+# Çeviri yapılmamalı, cron oluşturmada sorun oluyor. A.Y.
+#: etc/inc/services.inc:2285
+msgid "pfSense specific crontab entries"
+msgstr "pfSense specific crontab entries"
+
+# Çeviri yapılmamalı. Cron oluştururken hatalara neden oluyor. A.Y.
+#: etc/inc/services.inc:2286
+msgid "Created:"
+msgstr "Created:"
+
+# eğer mümkünse gibi bişey ekelemek yanlış zaten burda dosyaya müdahele edilmesi istenmiyor ! çeviriyi direk kelime bazlı işlemeyelim !!!!!!!!!
+#
+# Bu tarz dosyalar da Türkçe karakter kullanmak da tehlikeli! A.Y.
+#
+# Cron oluştururken sorunlara neden oluyor. Lütfen çevirmeyin. A.Y.
+#: etc/inc/services.inc:2307
+msgid "If possible do not add items to this file manually."
+msgstr "If possible do not add items to this file manually."
+
+# Çeviri yapılmamalıdır, cron oluştururken sorunlara neden oluyor.
+#: etc/inc/services.inc:2308
+msgid ""
+"If you do so, this file must be terminated with a blank line (e.g. new line)"
+msgstr ""
+"If you do so, this file must be terminated with a blank line (e.g. new line)"
+
+#: etc/inc/services.inc:2352
+msgid "Starting UPnP service... "
+msgstr "UPnP servisi başlatılıyor..."
+
+#: etc/inc/services.inc:2389
+#, php-format
+msgid "Installed cron job for %s"
+msgstr "%s için zamanlandırılmış görev kuruldu"
+
+#: etc/inc/services.inc:2392
+#, php-format
+msgid "Updated cron job for %s"
+msgstr "%s için zamanlandırılmış görev güncellendi"
+
+#: etc/inc/services.inc:2397
+#, php-format
+msgid "Removed cron job for %s"
+msgstr "%s zamanlanmış görevlerden kaldırıldı"
+
+#: etc/inc/shaper.inc:190
+#, php-format
+msgid "The field '%s' contains invalid characters."
+msgstr "'%s' alanı geçersiz karakterler içeriyor."
+
+#: etc/inc/shaper.inc:196
+#, php-format
+msgid "The field '%s' is required."
+msgstr "'%s' alanı gerekli."
+
+#: etc/inc/shaper.inc:321 etc/inc/shaper.inc:680 etc/inc/shaper.inc:1599
+#: etc/inc/shaper.inc:1914 etc/inc/shaper.inc:2259 etc/inc/shaper.inc:2399
+#: etc/inc/shaper.inc:2542 etc/inc/shaper.inc:2673 etc/inc/shaper.inc:2889
+#: etc/inc/shaper.inc:3323 usr/local/www/interfaces_ppps_edit.php:762
+#: usr/local/www/status_queues.php:175
+msgid "Bandwidth"
+msgstr "BantgeniÅŸliÄŸi"
+
+#: etc/inc/shaper.inc:323 etc/inc/shaper.inc:1601 etc/inc/shaper.inc:2261
+#: etc/inc/shaper.inc:2544 etc/inc/shaper.inc:2893
+msgid "Bandwidthtype"
+msgstr "Bant genişliği türü"
+
+#: etc/inc/shaper.inc:328 etc/inc/shaper.inc:1607 etc/inc/shaper.inc:2266
+#: etc/inc/shaper.inc:2549
+msgid "Bandwidth must be an integer."
+msgstr "Bant genişliği tam sayı olmalıdır."
+
+#: etc/inc/shaper.inc:330 etc/inc/shaper.inc:1610 etc/inc/shaper.inc:2270
+#: etc/inc/shaper.inc:2553
+msgid "Bandwidth cannot be negative."
+msgstr "Bant geniÅŸliÄŸi negatif olamaz."
+
+#: etc/inc/shaper.inc:332
+msgid "Qlimit must be an integer."
+msgstr "Qlimit tam sayı olmalıdır."
+
+#: etc/inc/shaper.inc:334
+msgid "Qlimit must be positive."
+msgstr ""
+
+#: etc/inc/shaper.inc:336
+msgid "Tbrsize must be an integer."
+msgstr "Tbrsize tam sayı olmalıdır."
+
+#: etc/inc/shaper.inc:338
+msgid "Tbrsize must be positive."
+msgstr ""
+
+#: etc/inc/shaper.inc:639 etc/inc/shaper.inc:1167 etc/inc/shaper.inc:3632
+#: etc/inc/shaper.inc:3879
+msgid "Enable/Disable"
+msgstr "Aktif/Pasif"
+
+#: etc/inc/shaper.inc:644
+msgid "Enable/disable discipline and its children"
+msgstr "Kuyruk Disiplini ve alt öğeleri Aktif/Pasif"
+
+#: etc/inc/shaper.inc:646 etc/inc/shaper.inc:1004 etc/inc/shaper.inc:2895
+#: etc/inc/shaper.inc:3312 etc/inc/shaper.inc:3639 etc/inc/shaper.inc:3887
+#: etc/inc/shaper.inc:3959 usr/local/www/diag_gmirror.php:220
+#: usr/local/www/diag_gmirror.php:287 usr/local/www/firewall_aliases.php:191
+#: usr/local/www/firewall_aliases_edit.php:131
+#: usr/local/www/firewall_aliases_edit.php:746
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/firewall_schedule.php:97
+#: usr/local/www/interfaces_groups.php:96
+#: usr/local/www/load_balancer_monitor.php:122
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:237
+#: usr/local/www/load_balancer_pool.php:131
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:201
+#: usr/local/www/load_balancer_relay_action.php:139
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:412
+#: usr/local/www/load_balancer_relay_protocol.php:133
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:196
+#: usr/local/www/load_balancer_virtual_server.php:132
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:166
+#: usr/local/www/pkg_mgr.php:193 usr/local/www/pkg_mgr_installed.php:123
+#: usr/local/www/services_captiveportal_filemanager.php:160
+#: usr/local/www/services_igmpproxy.php:96
+#: usr/local/www/status_gateways.php:74 usr/local/www/status_lb_pool.php:131
+#: usr/local/www/status_lb_vs.php:78 usr/local/www/status_openvpn.php:276
+#: usr/local/www/status_openvpn.php:339 usr/local/www/system_camanager.php:593
+#: usr/local/www/system_certmanager.php:1083
+#: usr/local/www/system_crlmanager.php:541
+#: usr/local/www/system_gateways.php:217
+#: usr/local/www/system_gateways_edit.php:114
+#: usr/local/www/system_gateways_edit.php:689
+#: usr/local/www/system_groupmanager.php:410
+#: usr/local/www/system_usermanager.php:644
+#: usr/local/www/system_usermanager.php:704
+#: usr/local/www/widgets/widgets/system_information.widget.php:118
+msgid "Name"
+msgstr "Ad"
+
+#: etc/inc/shaper.inc:650
+msgid "Scheduler Type "
+msgstr "Zamanlandırma Tipi "
+
+#: etc/inc/shaper.inc:676
+msgid "NOTE: Changing this changes all child queues!"
+msgstr "Uyarı: Bunu değiştirmen bütün alt kuyrukları değiştirir!"
+
+#: etc/inc/shaper.inc:677
+msgid " Beware you can lose information."
+msgstr " Dikkatli olun, bilgilendirmeleri kaybedebilirsiniz."
+
+#: etc/inc/shaper.inc:715
+msgid ""
+"Adjusts the size, in bytes, of the token bucket regulator. If not specified, "
+"heuristics based on the interface bandwidth are used to determine the size."
+msgstr ""
+"Regülatör algoritması bayt cinsinden boyutu ayarlar. Özellikle belirtilen "
+"bir şey yok ise arayüz bant genişliğine bağlı olarak sezgisel tarama "
+"boyutunu belirlemek için kullanır."
+
+#: etc/inc/shaper.inc:1013
+msgid "The priority must be an integer between 1 and 15."
+msgstr "Öncelik 1-15 arasında tam bir değer olmalı."
+
+#: etc/inc/shaper.inc:1016 etc/inc/shaper.inc:2906
+msgid "Queue limit must be an integer"
+msgstr "Kuyruk limiti tamsayı olmalıdır"
+
+#: etc/inc/shaper.inc:1018
+msgid "Queue limit must be positive"
+msgstr "Kuyruk limiti pozitif olmalı"
+
+#: etc/inc/shaper.inc:1020 etc/inc/shaper.inc:1022 etc/inc/shaper.inc:2908
+#: etc/inc/shaper.inc:2910 etc/inc/shaper.inc:3964
+msgid "Queue names must be alphanumeric and _ or - only."
+msgstr "Kuyruk adı harf,rakam, _ ve - karakterlerinden oluşmalıdır."
+
+#: etc/inc/shaper.inc:1025
+msgid "Only one default queue per interface is allowed."
+msgstr "Arabirim başına varsayılan olarak sadece bir kuyruğa izin verilir."
+
+#: etc/inc/shaper.inc:1172
+msgid "Enable/Disable queue and its children"
+msgstr "Kuyruk ve altkuyrukları Aktif/Pasif"
+
+#: etc/inc/shaper.inc:1176
+msgid "Queue Name"
+msgstr "Kuyruk adı"
+
+#: etc/inc/shaper.inc:1183
+msgid ""
+"Enter the name of the queue here. Do not use spaces and limit the size to "
+"15 characters."
+msgstr ""
+"Kuyruk adını buraya girin. Alan adı 15 karakter ile sınırlıdır ve alan "
+"adında boşluk kullanmayın."
+
+#: etc/inc/shaper.inc:1186 usr/local/www/interfaces_bridge_edit.php:373
+#: usr/local/www/interfaces_bridge_edit.php:392
+#: usr/local/www/system_gateway_groups.php:133
+msgid "Priority"
+msgstr "Öncelik"
+
+#: etc/inc/shaper.inc:1190
+msgid ""
+"For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher "
+"priority are preferred in the case of overload."
+msgstr ""
+"hfsc için değer 0 ile 7 arasındadır. Varsayılan değer 1'dir. Hfsc "
+"kuyruğunda daha yüksek bir öncelik istenmesi durumunda bu değer "
+"yükseltilebilir."
+
+#: etc/inc/shaper.inc:1193
+msgid "Queue limit"
+msgstr "Kuyruk limiti"
+
+#: etc/inc/shaper.inc:1197
+msgid "Queue limit in packets."
+msgstr ""
+
+#: etc/inc/shaper.inc:1200
+msgid "Scheduler options"
+msgstr "Zamanlayıcı seçenekleri"
+
+#: etc/inc/shaper.inc:1205 etc/inc/shaper.inc:1208
+msgid "Default queue"
+msgstr "Öntanımlı kuyruk"
+
+#: etc/inc/shaper.inc:1215
+msgid "Random Early Detection"
+msgstr "Rasgele Erken Algılanan"
+
+#: etc/inc/shaper.inc:1220
+msgid "Random Early Detection In and Out"
+msgstr "Rasgele Erken Algılanan Giriş ve Çıkış"
+
+#: etc/inc/shaper.inc:1225
+msgid "Explicit Congestion Notification"
+msgstr "Dönüş tıkanıklığının bildirilmesi"
+
+#: etc/inc/shaper.inc:1230
+msgid "Codel Active Queue"
+msgstr "Kodsal Aktif Kuyruk"
+
+#: etc/inc/shaper.inc:1231
+msgid "Select options for this queue"
+msgstr "Bu kuyruk için seçeneği işaretleyin"
+
+#: etc/inc/shaper.inc:1233 etc/inc/shaper.inc:3413 etc/inc/shaper.inc:3694
+#: etc/inc/shaper.inc:3892 usr/local/www/diag_ipsec.php:107
+#: usr/local/www/firewall_aliases.php:193
+#: usr/local/www/firewall_aliases_edit.php:583
+#: usr/local/www/firewall_aliases_edit.php:761
+#: usr/local/www/firewall_aliases_edit.php:798
+#: usr/local/www/firewall_aliases_import.php:185
+#: usr/local/www/firewall_nat.php:212 usr/local/www/firewall_nat_1to1.php:186
+#: usr/local/www/firewall_nat_1to1_edit.php:508
+#: usr/local/www/firewall_nat_edit.php:789
+#: usr/local/www/firewall_nat_npt.php:110
+#: usr/local/www/firewall_nat_npt_edit.php:269
+#: usr/local/www/firewall_nat_out.php:313
+#: usr/local/www/firewall_nat_out.php:550
+#: usr/local/www/firewall_nat_out_edit.php:781
+#: usr/local/www/firewall_rules.php:350
+#: usr/local/www/firewall_rules_edit.php:1249
+#: usr/local/www/firewall_schedule.php:99
+#: usr/local/www/firewall_schedule_edit.php:805
+#: usr/local/www/firewall_schedule_edit.php:1010
+#: usr/local/www/firewall_virtual_ip.php:242
+#: usr/local/www/firewall_virtual_ip_edit.php:501
+#: usr/local/www/interfaces.php:1655 usr/local/www/interfaces_bridge.php:120
+#: usr/local/www/interfaces_bridge_edit.php:292
+#: usr/local/www/interfaces_gif.php:114
+#: usr/local/www/interfaces_gif_edit.php:223
+#: usr/local/www/interfaces_gre.php:115
+#: usr/local/www/interfaces_gre_edit.php:226
+#: usr/local/www/interfaces_groups.php:98
+#: usr/local/www/interfaces_groups_edit.php:261
+#: usr/local/www/interfaces_lagg.php:120
+#: usr/local/www/interfaces_lagg_edit.php:225
+#: usr/local/www/interfaces_ppps.php:112
+#: usr/local/www/interfaces_ppps_edit.php:482
+#: usr/local/www/interfaces_qinq.php:124
+#: usr/local/www/interfaces_qinq_edit.php:343
+#: usr/local/www/interfaces_vlan.php:117
+#: usr/local/www/interfaces_vlan_edit.php:193
+#: usr/local/www/interfaces_wireless.php:112
+#: usr/local/www/interfaces_wireless_edit.php:191
+#: usr/local/www/load_balancer_monitor.php:124
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:243
+#: usr/local/www/load_balancer_pool.php:136
+#: usr/local/www/load_balancer_pool_edit.php:216
+#: usr/local/www/load_balancer_relay_action.php:142
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:418
+#: usr/local/www/load_balancer_relay_protocol.php:136
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:219
+#: usr/local/www/load_balancer_virtual_server.php:138
+#: usr/local/www/load_balancer_virtual_server_edit.php:172
+#: usr/local/www/pkg_mgr.php:199 usr/local/www/pkg_mgr_installed.php:126
+#: usr/local/www/services_captiveportal_hostname.php:127
+#: usr/local/www/services_captiveportal_hostname_edit.php:186
+#: usr/local/www/services_captiveportal_ip.php:120
+#: usr/local/www/services_captiveportal_ip_edit.php:203
+#: usr/local/www/services_captiveportal_mac.php:171
+#: usr/local/www/services_captiveportal_mac_edit.php:218
+#: usr/local/www/services_captiveportal_zones.php:83
+#: usr/local/www/services_captiveportal_zones_edit.php:106
+#: usr/local/www/services_dhcp.php:876 usr/local/www/services_dhcp.php:1250
+#: usr/local/www/services_dhcp_edit.php:424
+#: usr/local/www/services_dhcpv6.php:861
+#: usr/local/www/services_dhcpv6_edit.php:240
+#: usr/local/www/services_dnsmasq.php:355
+#: usr/local/www/services_dnsmasq.php:442
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:155
+#: usr/local/www/services_dnsmasq_edit.php:237
+#: usr/local/www/services_dnsmasq_edit.php:258
+#: usr/local/www/services_dyndns.php:90
+#: usr/local/www/services_dyndns_edit.php:416
+#: usr/local/www/services_igmpproxy.php:99
+#: usr/local/www/services_igmpproxy_edit.php:180
+#: usr/local/www/services_rfc2136.php:84
+#: usr/local/www/services_rfc2136_edit.php:206
+#: usr/local/www/services_unbound.php:423
+#: usr/local/www/services_unbound.php:510
+#: usr/local/www/services_unbound_acls.php:242
+#: usr/local/www/services_unbound_acls.php:296
+#: usr/local/www/services_unbound_acls.php:323
+#: usr/local/www/services_unbound_domainoverride_edit.php:148
+#: usr/local/www/services_unbound_host_edit.php:240
+#: usr/local/www/services_unbound_host_edit.php:261
+#: usr/local/www/services_wol.php:164 usr/local/www/services_wol_edit.php:152
+#: usr/local/www/status_gateway_groups.php:78
+#: usr/local/www/status_gateways.php:80 usr/local/www/status_lb_pool.php:135
+#: usr/local/www/status_lb_vs.php:82 usr/local/www/status_services.php:85
+#: usr/local/www/status_upnp.php:91
+#: usr/local/www/system_advanced_sysctl.php:182
+#: usr/local/www/system_advanced_sysctl.php:255
+#: usr/local/www/system_gateway_groups.php:134
+#: usr/local/www/system_gateway_groups_edit.php:339
+#: usr/local/www/system_gateways.php:221
+#: usr/local/www/system_gateways_edit.php:852
+#: usr/local/www/system_groupmanager.php:327
+#: usr/local/www/system_groupmanager.php:411
+#: usr/local/www/system_groupmanager.php:482
+#: usr/local/www/system_groupmanager_addprivs.php:218
+#: usr/local/www/system_routes.php:237
+#: usr/local/www/system_routes_edit.php:323
+#: usr/local/www/system_usermanager.php:645
+#: usr/local/www/system_usermanager_addprivs.php:187
+#: usr/local/www/vpn_ipsec_phase1.php:660
+#: usr/local/www/vpn_ipsec_phase2.php:691
+#: usr/local/www/vpn_openvpn_client.php:663
+#: usr/local/www/vpn_openvpn_client.php:1118
+#: usr/local/www/vpn_openvpn_csc.php:364 usr/local/www/vpn_openvpn_csc.php:748
+#: usr/local/www/vpn_openvpn_server.php:892
+#: usr/local/www/vpn_openvpn_server.php:1834 usr/local/www/vpn_pppoe.php:107
+#: usr/local/www/vpn_pppoe_edit.php:456
+msgid "Description"
+msgstr "Açıklama"
+
+#: etc/inc/shaper.inc:1260
+msgid "Bandwidth:"
+msgstr "Bant GeniÅŸliÄŸi:"
+
+#: etc/inc/shaper.inc:1264
+msgid "Priority: on"
+msgstr "Öncelik: Açık"
+
+#: etc/inc/shaper.inc:1267
+msgid "Default: on"
+msgstr "Varsayılan: Açık"
+
+#: etc/inc/shaper.inc:1274 etc/inc/shaper.inc:1275
+msgid "Delete queue from interface"
+msgstr "Arabirimden kuyruÄŸu silin"
+
+#: etc/inc/shaper.inc:1614 etc/inc/shaper.inc:2274 etc/inc/shaper.inc:2558
+msgid "Bandwidth in percentage should be between 1 and 100 bounds."
+msgstr "Bantgenişliği yüzdesi 1 ile 100 arasında olmalıdır."
+
+#: etc/inc/shaper.inc:1631
+msgid "upperlimit service curve defined but missing (d) value"
+msgstr "Üstlimit servis eğrisi tanımlı ama (d) değeri eksik"
+
+#: etc/inc/shaper.inc:1633
+msgid ""
+"upperlimit service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+"Üstlimit servis eğrisi tanımlı ama başlangıç bant genişliği (m1) değeri eksik"
+
+#: etc/inc/shaper.inc:1635
+msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "Üstlimit m1 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1637
+msgid "upperlimit d value needs to be numeric"
+msgstr "Üstlimit d değeri rakam olmalı"
+
+#: etc/inc/shaper.inc:1639
+msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "Üstlimit m2 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1653
+msgid "linkshare service curve defined but missing (d) value"
+msgstr "Bağlantı paylaşımı servis eğrisi tanımlı ama (d) değeri eksik"
+
+#: etc/inc/shaper.inc:1655
+msgid ""
+"linkshare service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+"Bağlantı paylaşımı servis eğrisi tanımlı ama başlangıç bant genişliği (m1) "
+"deÄŸeri eksik"
+
+#: etc/inc/shaper.inc:1657
+msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "Bağlantı paylaşımı m1 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1659
+msgid "linkshare d value needs to be numeric"
+msgstr "Bağlantı paylaşımı d değeri numara olmalı"
+
+#: etc/inc/shaper.inc:1661
+msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "Bağlantı paylaşımı m2 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1663
+msgid "realtime service curve defined but missing (d) value"
+msgstr "Gerçek zamanlı servis eğrisi tanımlı ama (d) değeri eksik"
+
+#: etc/inc/shaper.inc:1665
+msgid "realtime service curve defined but missing initial bandwidth (m1) value"
+msgstr ""
+"Gerçek zamanlı servis eğrisi tanımlı ama başlangıç bant genişliği (m1) "
+"deÄŸeri eksik"
+
+#: etc/inc/shaper.inc:1680
+msgid "realtime m1 value needs to be Kb, Mb, Gb, or %"
+msgstr "Gerçek zaman m1 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1682
+msgid "realtime d value needs to be numeric"
+msgstr "Gerçek zaman d değeri rakam olmalı"
+
+#: etc/inc/shaper.inc:1684
+msgid "realtime m2 value needs to be Kb, Mb, Gb, or %"
+msgstr "Gerçek zaman m2 değeri Kb, Mb, Gb, veya % olmalı"
+
+#: etc/inc/shaper.inc:1922 etc/inc/shaper.inc:2408 etc/inc/shaper.inc:2682
+msgid "Gbit/s"
+msgstr "Gbit/sn"
+
+#: etc/inc/shaper.inc:1926 etc/inc/shaper.inc:2412 etc/inc/shaper.inc:2686
+msgid "Mbit/s"
+msgstr "Mbit/sn"
+
+#: etc/inc/shaper.inc:1930 etc/inc/shaper.inc:2416 etc/inc/shaper.inc:2690
+#: usr/local/www/services_captiveportal.php:652
+#: usr/local/www/services_captiveportal.php:656
+msgid "Kbit/s"
+msgstr "Kbit/sn"
+
+#: etc/inc/shaper.inc:1934 etc/inc/shaper.inc:2420 etc/inc/shaper.inc:2694
+msgid "Bit/s"
+msgstr "Bit/sn"
+
+#: etc/inc/shaper.inc:1940 etc/inc/shaper.inc:2426 etc/inc/shaper.inc:2700
+msgid "Choose the amount of bandwidth for this queue"
+msgstr "Bu kuyruğa bant genişliği için miktar seçiniz"
+
+#: etc/inc/shaper.inc:1943
+msgid "Service Curve (sc)"
+msgstr "Hizmet eÄŸrisi (he)"
+
+#: etc/inc/shaper.inc:1950
+msgid "Upperlimit:"
+msgstr "Ãœstlimit:"
+
+#: etc/inc/shaper.inc:1965
+msgid "The maximum allowed bandwidth for the queue."
+msgstr "Kuyruk için en fazla bant genişliğine izin verildi."
+
+#: etc/inc/shaper.inc:1969
+msgid "Real time:"
+msgstr "Gerçek zaman:"
+
+#: etc/inc/shaper.inc:1984
+msgid "The minimum required bandwidth for the queue."
+msgstr "Kuyruk için en az bant genişliği gerekiyor."
+
+#: etc/inc/shaper.inc:1988
+msgid "Link share:"
+msgstr "Bağlantı paylaş:"
+
+#: etc/inc/shaper.inc:2003
+msgid "The bandwidth share of a backlogged queue - this overrides priority."
+msgstr ""
+"Arka giriş kuyruğundaki bantgenişliği paylaşımı - önceliği geçersiz kılar."
+
+#: etc/inc/shaper.inc:2005
+msgid ""
+"The format for service curve specifications is (m1, d, m2). m2 controls the "
+"bandwidth assigned to the queue. m1 and d are optional and can be used to "
+"control the initial bandwidth assignment. For the first d milliseconds the "
+"queue gets the bandwidth given as m1, afterwards the value given in m2."
+msgstr ""
+"Servis eğrisi özelliklerinin formatı (m1, d, m2) m2 kuyruğa atanan (sıraya "
+"atanan) bant genişliğini kontrol eder. m1 ve d isteğe bağlı ve bant "
+"genişliği atanmasının kontrolünde kullanılır. d ilk milisaniye de "
+"kuyruktaki bant geniÅŸliÄŸine m1, sonra ki deÄŸere m2 verir."
+
+#: etc/inc/shaper.inc:2257
+msgid "Priority must be an integer between 1 and 7."
+msgstr "Öncelik değeri 1 ile 7 arasında tamsayı bir değer olmalıdır."
+
+#: etc/inc/shaper.inc:2428 etc/inc/shaper.inc:2702
+msgid "Scheduler specific options"
+msgstr "Belirli seçenek(ler) zamanlayıcı"
+
+#: etc/inc/shaper.inc:2432
+msgid "Borrow from other queues when available"
+msgstr "Kullanılabilir olduğunda diğer kuyruklardan yararlan/ödünç al"
+
+#: etc/inc/shaper.inc:2540
+msgid "Priority must be an integer between 1 and 255."
+msgstr "Öncelik değer 1 ile 255 arasında bir tamsayı olmalıdır."
+
+#: etc/inc/shaper.inc:2708
+msgid "Number of buckets available."
+msgstr "Kalan bucket(ler) sayısı."
+
+#: etc/inc/shaper.inc:2713
+msgid "Bandwidth limit for hosts to not saturate link."
+msgstr "Bant genişliği sınırı, ana bağlantının limitini etkilemez."
+
+#: etc/inc/shaper.inc:2901
+msgid "Plr must be a value between 0 and 1."
+msgstr ""
+
+#: etc/inc/shaper.inc:2904
+msgid "Buckets must be an integer between 16 and 65535."
+msgstr "Bucket(ler) 16 ile 65535 tamsayısı arasında olmalıdır."
+
+#: etc/inc/shaper.inc:2913
+msgid "IPV4 bit mask must be blank or numeric value between 1 and 32."
+msgstr ""
+
+#: etc/inc/shaper.inc:2916
+msgid "IPV6 bit mask must be blank or numeric value between 1 and 128."
+msgstr ""
+
+#: etc/inc/shaper.inc:3057
+#, php-format
+msgid "Bandwidth for schedule %s must be an integer."
+msgstr "Zamanlama için bant genişliği %s tam sayı olmalıdır."
+
+#: etc/inc/shaper.inc:3059
+#, php-format
+msgid "Burst for schedule %s must be an integer."
+msgstr ""
+
+#: etc/inc/shaper.inc:3065
+msgid "You need to specify a schedule for every additional entry"
+msgstr "Her ek giriş için zamanlama belirtmeniz gerekir"
+
+#: etc/inc/shaper.inc:3067
+msgid "If more than one bandwidth configured all schedules need to be selected"
+msgstr ""
+"Eğer birden fazla bant genişliği yapılandırıldıysa tüm zamanlamaların "
+"seçilmesi gerekir"
+
+#: etc/inc/shaper.inc:3069
+msgid "At least one bw specification is necessary"
+msgstr "En az bir bw ÅŸartnamesi gereklidir"
+
+#: etc/inc/shaper.inc:3071
+msgid "Delay must be an integer."
+msgstr "Gecikme tamsayı olmalıdır."
+
+#: etc/inc/shaper.inc:3305 usr/local/www/diag_routes.php:171
+#: usr/local/www/interfaces.php:1645 usr/local/www/services_dnsmasq.php:189
+#: usr/local/www/services_rfc2136_edit.php:135
+#: usr/local/www/services_snmp.php:291 usr/local/www/services_snmp.php:351
+#: usr/local/www/services_unbound.php:254
+#: usr/local/www/system_firmware.php:125
+msgid "Enable"
+msgstr "EtkinleÅŸtir"
+
+#: etc/inc/shaper.inc:3310
+msgid "Enable limiter and its children"
+msgstr "Limitleyici ve Alt Öğeleri Aktif"
+
+#: etc/inc/shaper.inc:3365
+msgid "add another schedule"
+msgstr "baÅŸka bir zamanlama ekle"
+
+#: etc/inc/shaper.inc:3367
+msgid ""
+"Bandwidth is the rate (e.g. Mbit/s) to which traffic in this limiter will be "
+"restricted."
+msgstr ""
+
+#: etc/inc/shaper.inc:3369 etc/inc/shaper.inc:3650
+msgid "Mask"
+msgstr "Maske"
+
+#: etc/inc/shaper.inc:3380 etc/inc/shaper.inc:3661
+msgid "Source addresses"
+msgstr "Kaynak adres"
+
+#: etc/inc/shaper.inc:3384 etc/inc/shaper.inc:3665
+msgid "Destination addresses"
+msgstr "Hedef adres"
+
+#: etc/inc/shaper.inc:3387 etc/inc/shaper.inc:3668
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"a dynamic pipe with the bandwidth, delay, packet loss and queue size given "
+"above will \n"
+"be created for each source/destination IP address encountered, \n"
+"respectively. This makes it possible to easily specify bandwidth \n"
+"limits per host."
+msgstr ""
+
+#: etc/inc/shaper.inc:3408
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per pipe."
+msgstr ""
+
+#: etc/inc/shaper.inc:3419 etc/inc/shaper.inc:3700 etc/inc/shaper.inc:3898
+#: usr/local/www/firewall_aliases_edit.php:766
+#: usr/local/www/firewall_nat_1to1_edit.php:513
+#: usr/local/www/firewall_nat_edit.php:792
+#: usr/local/www/firewall_nat_npt_edit.php:272
+#: usr/local/www/firewall_nat_out_edit.php:785
+#: usr/local/www/firewall_schedule_edit.php:808
+#: usr/local/www/firewall_schedule_edit.php:982
+#: usr/local/www/firewall_virtual_ip_edit.php:504
+#: usr/local/www/interfaces_gif_edit.php:226
+#: usr/local/www/interfaces_gre_edit.php:229
+#: usr/local/www/interfaces_groups_edit.php:266
+#: usr/local/www/interfaces_qinq_edit.php:348
+#: usr/local/www/interfaces_vlan_edit.php:196
+#: usr/local/www/interfaces_wireless_edit.php:194
+#: usr/local/www/services_dhcp_edit.php:427
+#: usr/local/www/services_dhcpv6_edit.php:243
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:158
+#: usr/local/www/services_dnsmasq_edit.php:240
+#: usr/local/www/services_igmpproxy_edit.php:185
+#: usr/local/www/services_unbound_domainoverride_edit.php:152
+#: usr/local/www/services_unbound_host_edit.php:243
+#: usr/local/www/services_wol_edit.php:155
+#: usr/local/www/system_gateway_groups_edit.php:342
+#: usr/local/www/system_routes_edit.php:326
+msgid "You may enter a description here for your reference (not parsed)."
+msgstr ""
+"Bu alana kendiniz için herhangi bir açıklama girebilirsiniz, (sistem dikkate "
+"almayacaktır)."
+
+#: etc/inc/shaper.inc:3425 etc/inc/shaper.inc:3706
+#: usr/local/www/interfaces_bridge_edit.php:300
+#: usr/local/www/interfaces_ppps_edit.php:751
+msgid "Show advanced options"
+msgstr "Gelişmiş seçenekleri göster"
+
+#: etc/inc/shaper.inc:3429 usr/local/www/status_ntpd.php:186
+msgid "Delay"
+msgstr "Gecikme"
+
+#: etc/inc/shaper.inc:3433
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty)"
+msgstr "İpucu: birçok durumda buraya 0 atayın (ya da boş bırakın)"
+
+#: etc/inc/shaper.inc:3437 etc/inc/shaper.inc:3717
+msgid "Packet loss rate"
+msgstr "Paket kayıp oranı"
+
+#: etc/inc/shaper.inc:3441 etc/inc/shaper.inc:3721
+msgid ""
+"Hint: in most cases, you should specify 0 here (or leave the field empty). A "
+"value of 0.001 means one packet in 1000 gets dropped"
+msgstr ""
+"İpucu: birçok durumda buraya 0 atayın (ya da boş bırakın). 0.0001 gibi bir "
+"değerin anlamı 1000 düşürülecek"
+
+#: etc/inc/shaper.inc:3446 etc/inc/shaper.inc:3726
+msgid "Queue Size"
+msgstr "Kuyruk boyutu"
+
+#: etc/inc/shaper.inc:3451 etc/inc/shaper.inc:3731
+msgid ""
+"Hint: in most cases, you should leave the field empty. All packets in this "
+"pipe are placed into a fixed-size queue first, then they are delayed by "
+"value specified in the Delay field, and then they are delivered to their "
+"destination."
+msgstr ""
+"İpucu: Çoğu zaman bu alanı boş bırakmanız gerekir. Bu geçiş hattındaki tüm "
+"paketler ilk olarak sabit boyutlu olarak sıraya yerleştirilir, geriye kalan "
+"paketler ise gecikme alanında belirtilen değere göre bekletilir ve hedef "
+"adrese teslim edilir."
+
+#: etc/inc/shaper.inc:3457 etc/inc/shaper.inc:3737
+msgid "Bucket Size"
+msgstr "Bucket Boyutu"
+
+#: etc/inc/shaper.inc:3462 etc/inc/shaper.inc:3742
+msgid ""
+"Hint: in most cases, you should leave the field empty. It increases the hash "
+"size set."
+msgstr ""
+"İpucu: çoğu durumda bu alan boş bırakılabilinir. Hash ayar boyutunu artırır."
+
+#: etc/inc/shaper.inc:3530
+msgid "Weight must be an integer between 1 and 100."
+msgstr "Ağırlık 1 ile 100 tamsayı aralığında olmalıdır."
+
+#: etc/inc/shaper.inc:3637
+msgid "Enable/Disable queue"
+msgstr "KuyruÄŸu EtkinleÅŸtir/Kapat"
+
+#: etc/inc/shaper.inc:3657 usr/local/www/firewall_rules.php:734
+#: usr/local/www/firewall_rules_edit.php:1410
+#: usr/local/www/firewall_rules_edit.php:1419
+#: usr/local/www/interfaces_lagg_edit.php:218
+#: usr/local/www/load_balancer_virtual_server_edit.php:232
+#: usr/local/www/vpn_ipsec_mobile.php:405
+#: usr/local/www/vpn_openvpn_client.php:609
+msgid "none"
+msgstr "Hiçbiri"
+
+#: etc/inc/shaper.inc:3689
+msgid ""
+"If 'source' or 'destination' slots is chosen, \n"
+"leaving the mask bits blank will create one pipe per host. Otherwise "
+"specify \n"
+"the number of 'one' bits in the subnet mask used to group multiple hosts \n"
+"per queue."
+msgstr ""
+
+#: etc/inc/shaper.inc:3709 usr/local/www/system_gateways_edit.php:753
+msgid "Weight"
+msgstr "Ağırlık"
+
+#: etc/inc/shaper.inc:3713
+msgid ""
+"Hint: For queues under the same parent this specifies the share that a queue "
+"gets(values range from 1 to 100, you can leave it blank otherwise)"
+msgstr ""
+"İpucu: Kuyruklar için aynı üst (parent) grubun altında kuyruğun paylaşacağı "
+"değeri belirtir (değer aralığı 1 ile 100 arasındadır, aksi halde boş "
+"bırakınız)"
+
+#: etc/inc/shaper.inc:3741
+msgid "slots"
+msgstr "yuvalar"
+
+#: etc/inc/shaper.inc:3885
+msgid "Enable/Disable layer7 Container"
+msgstr "Layer7 Barındırıcı Etkinleştir/Kapat"
+
+#: etc/inc/shaper.inc:4150
+#, php-format
+msgid "Sending HUP signal to %s"
+msgstr "HUP sinyali %s e gönderiliyor"
+
+#: etc/inc/shaper.inc:4511
+msgid " Clone shaper/queue on this interface"
+msgstr " Bu arabirimdeki klon ÅŸekillendirici / kuyruÄŸu"
+
+#: etc/inc/shaper.inc:4519 etc/inc/shaper.inc:4526
+#, php-format
+msgid "Welcome to the %s Traffic Shaper."
+msgstr "%s Trafik Åžekillendiricisine hoÅŸgeldiniz."
+
+#: etc/inc/shaper.inc:4520 etc/inc/shaper.inc:4527
+msgid ""
+"The tree on the left helps you navigate through the queues <br />buttons at "
+"the bottom represent queue actions and are activated accordingly."
+msgstr ""
+"Sol tarafta bulunan ağaç kuyrukta gezinmenize yardımcı olur <br />altındaki "
+"düğmeler kuyruk eylemlerini gösterir ve buna uygun olarak aktif hale "
+"getirilir."
+
+#: etc/inc/smtp.inc:93
+msgid ": data access time out"
+msgstr "veri erişim zaman aşımı"
+
+#: etc/inc/smtp.inc:96
+msgid ": the server disconnected"
+msgstr "sunucu bağlantısı kesildi"
+
+#: etc/inc/smtp.inc:108
+msgid "reached the end of data while reading from the SMTP server conection"
+msgstr "SMTP sunucusu bağlantısı okurken veri sonuna erişildi"
+
+#: etc/inc/smtp.inc:114
+msgid "it was not possible to read line from the SMTP server"
+msgstr "bu SMTP sunucusundaki satırlar okunamıyor"
+
+#: etc/inc/smtp.inc:136
+msgid "it was not possible to send a line to the SMTP server"
+msgstr "Bu SMTP sunucusuna satır gönderilemiyor"
+
+#: etc/inc/smtp.inc:150
+msgid "it was not possible to send data to the SMTP server"
+msgstr "bu SMTP sunucusuna veri gönderilemiyor"
+
+#: etc/inc/smtp.inc:222
+msgid "establishing SSL connections requires at least PHP version 4.3.0"
+msgstr ""
+"SSL bağlantısının sağlanabilmesi için PHP versiyonunun 4.3.0 ve üstü olması "
+"gerekmektedir"
+
+#: etc/inc/smtp.inc:225
+msgid "establishing SSL connections requires the OpenSSL extension enabled"
+msgstr "SSL bağlantıları için OpenSSL eklentisi aktif olmalıdır"
+
+#: etc/inc/smtp.inc:234
+#, php-format
+msgid "could not resolve host \"%s\""
+msgstr "\"%s\" ana bilgisayarı çözülemedi"
+
+#: etc/inc/smtp.inc:238
+#, php-format
+msgid "domain \"%s\" resolved to an address excluded to be valid"
+msgstr "etki alanı \"%s\" geçerli olması dışında bir adres çözümlenir"
+
+#: etc/inc/smtp.inc:240
+#, php-format
+msgid "Connecting to host address \"%1$s\" port %2$s..."
+msgstr ""
+"Ana bilgisayara \"%1$s\" adresinden %2$s bağlantı noktasndan bağlanıyor..."
+
+#: etc/inc/smtp.inc:247
+msgid "-3 socket could not be created"
+msgstr "-3 yuva oluşturulamadı"
+
+#: etc/inc/smtp.inc:249
+#, php-format
+msgid "-4 dns lookup on hostname \"%s\" failed"
+msgstr "-4 \"%s\" host adı dns araması yapılamadı"
+
+#: etc/inc/smtp.inc:251
+msgid "-5 connection refused or timed out"
+msgstr "-5 bağlantı reddedildi veya zaman aşımına uğradı"
+
+#: etc/inc/smtp.inc:253
+msgid "-6 fdopen() call failed"
+msgstr "-6 fdopen() çağrısı başarısız "
+
+#: etc/inc/smtp.inc:255
+msgid "-7 setvbuf() call failed"
+msgstr "-7 setvbuf() çağrısı başarısız"
+
+#: etc/inc/smtp.inc:257
+#, php-format
+msgid "could not connect to the host \"%1$s\": %2$s"
+msgstr "Ana bilgisayara bağlanılamadı \"%1$s\": %2$s"
+
+#: etc/inc/smtp.inc:266
+msgid ""
+"it is not possible to authenticate using the specified mechanism because the "
+"SASL library class is not loaded"
+msgstr ""
+"Belirtilen mekaznizma kullanılarak doğrulama mümkün değil çünkü SASL "
+"kitaplık sınıfı yüklü değil"
+
+#: etc/inc/smtp.inc:290
+#, php-format
+msgid "authenticated mechanism %1$s may not be used: %2$s"
+msgstr "Doğrulama mekanizması %1$s kullanılamadı: %2$s"
+
+#: etc/inc/smtp.inc:295
+msgid "Could not start the SASL authentication client:"
+msgstr "SASL kimlik doğrulama istemcisi başlatılamadı:"
+
+#: etc/inc/smtp.inc:302
+msgid "Could not send the AUTH command"
+msgstr "AUTH komutu gönderilemedi"
+
+#: etc/inc/smtp.inc:317 etc/inc/smtp.inc:347
+msgid "Authentication error:"
+msgstr "Kimlik doÄŸrulama hata:"
+
+#: etc/inc/smtp.inc:332
+msgid "Could not send the authentication step message"
+msgstr "Kimlik doğrulama adımı mesajı gönderilemedi"
+
+#: etc/inc/smtp.inc:352
+msgid "Could not process the SASL authentication step:"
+msgstr "SASL kimlik doğrulama işlemi adımı gönderilemedi:"
+
+#: etc/inc/smtp.inc:366
+msgid "connection is already established"
+msgstr "Bağlantı zaten kuruldu"
+
+#: etc/inc/smtp.inc:404
+msgid "it was not specified the POP3 authentication user"
+msgstr "belirtilen POP3 kimlik doğrulama kullanıcısı değil"
+
+#: etc/inc/smtp.inc:410
+msgid "it was not specified the POP3 authentication password"
+msgstr "belirtilen POP3 kimlik doÄŸrulama ÅŸifresi deÄŸil"
+
+#: etc/inc/smtp.inc:414
+#, php-format
+msgid "Resolving POP3 authentication host \"%s\"..."
+msgstr "POP3 kimlik doğrulama sunucusu \"%s\" çözümleniyor..."
+
+#: etc/inc/smtp.inc:421
+msgid "POP3 authentication server greeting was not found"
+msgstr "POP3 kimlik doğrulama sunucusu karşılama bulamadı"
+
+#: etc/inc/smtp.inc:429
+msgid "POP3 authentication user was not accepted:"
+msgstr "POP3 kimlik doğrulama kullanıcısı kabul edilmedi:"
+
+#: etc/inc/smtp.inc:437
+msgid "POP3 authentication password was not accepted:"
+msgstr "POP3 kimlik doÄŸrulama ÅŸifresi kabul edilmedi:"
+
+#: etc/inc/smtp.inc:446
+msgid "could not determine the SMTP to connect"
+msgstr "bağlanılacak SMTP belirlenemedi"
+
+#: etc/inc/smtp.inc:452
+#, php-format
+msgid "Resolving SMTP server domain \"%s\"..."
+msgstr "SMTP sunucu alan adı \"%s\" çözümleniyor..."
+
+#: etc/inc/smtp.inc:464
+#, php-format
+msgid "Connected to SMTP server \"%s\"."
+msgstr "\"%s\" sunucusuna bağlantı kuruldu."
+
+#: etc/inc/smtp.inc:478
+msgid "server does not require authentication"
+msgstr "sunucu kimlik doğrulaması gerektirmez"
+
+#: etc/inc/smtp.inc:542
+msgid ""
+"it is not supported any of the authentication mechanisms required by the "
+"server"
+msgstr ""
+"sunucu tarafından istenen herhangi bir kimlik doğrulama mekanizması "
+"desteklenmiyor"
+
+#: etc/inc/smtp.inc:632
+msgid ""
+"direct delivery connection is already established and sender is already set"
+msgstr ""
+"doğrudan dağıtım bağlantısı zaten kurulmuş ve gönderen zaten ayarlanmış"
+
+#: etc/inc/smtp.inc:640
+msgid "connection is not in the initial state"
+msgstr "bağlantı başlangıç durumunda değil"
+
+#: etc/inc/smtp.inc:662
+msgid "it was not specified a valid direct recipient"
+msgstr "geçerli bir doğrudan alıcı belirtilmedi"
+
+#: etc/inc/smtp.inc:681
+msgid ""
+"it is not possible to deliver directly to recipients of different domains"
+msgstr "farklı etki alanlarının alıcılara doğrudan erişimi mümkün değil"
+
+#: etc/inc/smtp.inc:686
+msgid "connection is already established and the recipient is already set"
+msgstr "bağlantı zaten kurulmuş ve alıcı zaten ayarlanmış"
+
+#: etc/inc/smtp.inc:698
+msgid "connection is not in the recipient setting state"
+msgstr "bağlantı alıcı ayar durumunda değil"
+
+#: etc/inc/smtp.inc:727
+msgid "connection is not in the start sending data state"
+msgstr "veri durumunu göndermeyi başlatacak bağlantı yok"
+
+#: etc/inc/smtp.inc:757 etc/inc/smtp.inc:768
+msgid "connection is not in the sending data state"
+msgstr "veri durumunu gönderecek bağlantı yok"
+
+#: etc/inc/smtp.inc:804
+msgid "it was not previously established a SMTP connection"
+msgstr "daha önce sağlanmış bir SMTP bağlantısı değil"
+
+#: etc/inc/system.inc:515
+#, php-format
+msgid "Not adding default route because OLSR dynamic gateway is enabled."
+msgstr "Varsayılan rota eklenemedi çünki OLSR dinamik ağ geçidi etkin."
+
+#: etc/inc/system.inc:556
+#, php-format
+msgid "Static Routes: Gateway IP could not be found for %s"
+msgstr "Statik yönlendirici: Ağ geçidi IP si %s bulunamadı"
+
+#: etc/inc/system.inc:715
+msgid "Starting syslog..."
+msgstr "Syslog başlıyor..."
+
+#: etc/inc/system.inc:860
+#, php-format
+msgid "Error: cannot open syslog.conf in system_syslogd_start().%s"
+msgstr "Hata: system_syslogd_start().%s içindeki syslog.conf açılamadı"
+
+#: etc/inc/system.inc:942
+msgid "Starting webConfigurator..."
+msgstr "webArayüzü başlatılıyor..."
+
+#: etc/inc/system.inc:988 etc/inc/system.inc:1912 etc/inc/system.inc:1915
+msgid "failed!"
+msgstr "başarısız oldu!"
+
+#: etc/inc/system.inc:1288
+#, php-format
+msgid "Error: cannot open cert.pem in system_webgui_start().%s"
+msgstr "Hata: system_webgui_start().%s içindeki cert.pem açılamadı"
+
+#: etc/inc/system.inc:1299
+#, php-format
+msgid "Error: cannot open ca.pem in system_webgui_start().%s"
+msgstr "Hata: system_webgui_start().%s içindeki ca.pem açılamadı"
+
+#: etc/inc/system.inc:1307
+msgid "ssl configuration"
+msgstr "ssl yapılandırması"
+
+#: etc/inc/system.inc:1360
+#, php-format
+msgid "Error: cannot open %s in system_generate_lighty_config().%s"
+msgstr "Hata: system_generate_lighty_config().%s içindeki %s açılamadı"
+
+#: etc/inc/system.inc:1380
+msgid "Setting timezone..."
+msgstr "Saat dilimi ayarlanıyor..."
+
+#: etc/inc/system.inc:1761
+msgid "Syncing system time before startup..."
+msgstr "Başlangıçtan önce sistem saati senkronize ediliyor..."
+
+#: etc/inc/system.inc:1875
+#, php-format
+msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s"
+msgstr "Hata: system_dmesg_save().%s içindeki dmesg.boot açılamıyor"
+
+#: etc/inc/system.inc:1897
+msgid "Setting hard disk standby... "
+msgstr "Sabit disk hazırda beklemeye ayarlanıyor..."
+
+#: etc/inc/system.inc:2018
+msgid "Generic PC"
+msgstr "Genel PC"
+
+#: etc/inc/system.inc:2021
+msgid "Generic PC (CD-ROM)"
+msgstr "Genel PC (CD-ROM)"
+
+#: etc/inc/system.inc:2030
+msgid "PC Engines WRAP"
+msgstr "PC Engines WRAP"
+
+#: etc/inc/system.inc:2033
+msgid "PC Engines ALIX"
+msgstr "PC Engines ALIX"
+
+#: etc/inc/system.inc:2045
+msgid "embedded (unknown)"
+msgstr "gömülü (bilinmeyen)"
+
+#: etc/inc/upgrade_config.inc:113
+#, php-format
+msgid "%sWarning: filter rule removed (interface '%s' does not exist anymore)."
+msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' arabirimi artık yok)."
+
+#: etc/inc/upgrade_config.inc:125
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (source network '%s' does not exist anymore)."
+msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' kaynak ağı artık yok)."
+
+#: etc/inc/upgrade_config.inc:138
+#, php-format
+msgid ""
+"%sWarning: filter rule removed (destination network '%s' does not exist "
+"anymore)."
+msgstr "%sUyarı: filtre kuralı kaldırıldı ('%s' hedef ağı artık yok)."
+
+#: etc/inc/upgrade_config.inc:158
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (interface '%s' does not exist "
+"anymore)."
+msgstr ""
+"%sUyarı: trafik şekillendirici kuralı kaldırıldı ('%s' arabirimi artık yok)."
+
+#: etc/inc/upgrade_config.inc:170
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (source network '%s' does not exist "
+"anymore)."
+msgstr ""
+"%sUyarı: trafik şekillendirici kuralı kaldırıldı ('%s' kaynak ağı artık yok)."
+
+#: etc/inc/upgrade_config.inc:183
+#, php-format
+msgid ""
+"%sWarning: traffic shaper rule removed (destination network '%s' does not "
+"exist anymore)."
+msgstr ""
+"%sUyarı: trafik Kameralari kuralı kaldırıldı ('%s' hedef ağı artık yok)."
+
+#: etc/inc/upgrade_config.inc:333
+#, php-format
+msgid "CARP vhid %s"
+msgstr "CARP vhid %s"
+
+#: etc/inc/upgrade_config.inc:510
+msgid "Permit IPsec traffic."
+msgstr "IPsec trafiÄŸine izin ver."
+
+#: etc/inc/upgrade_config.inc:585
+msgid "System Administrators"
+msgstr "Sistem Yöneticileri"
+
+#: etc/inc/upgrade_config.inc:604
+msgid ""
+"Indicates whether this user will lock access to the webConfigurator for "
+"other users."
+msgstr ""
+"Bu kullanıcı için diğer kullanıcıların webArayüzü erişimlerini kilitleyip "
+"kilitleyemediğini gösterir."
+
+#: etc/inc/upgrade_config.inc:607
+msgid ""
+"Indicates whether this user will lock individual HTML pages after having "
+"accessed a particular page (the lock will be freed if the user leaves or "
+"saves the page form)."
+msgstr ""
+"Kullanıcının erişilen her html sayfaları için kilidi olup olmadığını "
+"gösterir (kullanıcı sayfayı kaydeder ya da kapatırsa kilit serbest "
+"kalacaktır)."
+
+#: etc/inc/upgrade_config.inc:610
+msgid "Indicates whether this user is able to login for example via SSH."
+msgstr "Kullanıcının SSH örneği ile girişinin mümkün olup olmadığını gösterir."
+
+#: etc/inc/upgrade_config.inc:613
+#, php-format
+msgid ""
+"Indicates whether this user is allowed to copy files onto the %s appliance "
+"via SCP/SFTP. If you are going to use this privilege, you must install "
+"scponly on the appliance (Hint: pkg_add -r scponly)."
+msgstr ""
+"Bu kullanıcının SCP/SFTP aracılığı ile %s cihazına dosyaları kopyalamak için "
+"izin olup olmadığını gösterir. Bu ayrıcalığı kullanmak için scponly "
+"uygulamasını yüklemelisiniz. (İpucu: pkg_add -r scponly)."
+
+#: etc/inc/upgrade_config.inc:616
+msgid ""
+"This user is associated with the UNIX root user (you should associate this "
+"privilege only with one single user)."
+msgstr ""
+"Bu kullanıcı UNIX root ile ilişkilidir (bu ayrıcalıkları sadece bir "
+"kullanıcı ile ilişkilendirmelisiniz)."
+
+#: etc/inc/upgrade_config.inc:633
+msgid "Drop packets to closed TCP ports without returning a RST"
+msgstr ""
+"RST'den cevap gelmesini beklemeden TCP bağlantı noktalarına paketleri bırak"
+
+#: etc/inc/upgrade_config.inc:637
+msgid "Do not send ICMP port unreachable messages for closed UDP ports"
+msgstr ""
+"Kapalı UDP bağlantı noktaları için ICMP port ulaşılamaz mesajları gönderme"
+
+#: etc/inc/upgrade_config.inc:641
+msgid "Randomize the ID field in IP packets (default is 0: sequential IP IDs)"
+msgstr ""
+"IP paketlerinde ID alanını rastgele sırala (IP ID'lerinin sırası varsayılan "
+"0'dır.)"
+
+#: etc/inc/upgrade_config.inc:645
+msgid "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)"
+msgstr ""
+"SYN-FIN paketlerini Düşür (RFC1379 u sonlandırır, zaten kimse kullanmaz)"
+
+#: etc/inc/upgrade_config.inc:649
+msgid "Sending of IPv4 ICMP redirects"
+msgstr "IPv4 ICMP yeniden yönlendirmeleri gönderiliyor"
+
+#: etc/inc/upgrade_config.inc:653
+msgid "Sending of IPv6 ICMP redirects"
+msgstr "IPv6 ICMP yeniden yönlendirmeleri gönderiliyor"
+
+#: etc/inc/upgrade_config.inc:657
+msgid "Generate SYN cookies for outbound SYN-ACK packets"
+msgstr "Giden SYN-ACK paketleri için SYN çerezleri oluştur"
+
+#: etc/inc/upgrade_config.inc:661
+msgid "Maximum incoming TCP datagram size"
+msgstr "Maksimum gelen TCP veri birimi boyutu"
+
+#: etc/inc/upgrade_config.inc:665
+msgid "Maximum outgoing TCP datagram size"
+msgstr "Maksimum giden TCP veri birimi boyutu"
+
+#: etc/inc/upgrade_config.inc:669
+msgid ""
+"Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-"
+"January/002534.html)"
+msgstr ""
+"Hızlıyönlendiriliyor (bakınız http://lists.freebsd.org/pipermail/freebsd-"
+"net/2004-January/002534.html)"
+
+#: etc/inc/upgrade_config.inc:673
+msgid "Do not delay ACK to try and piggyback it onto a data packet"
+msgstr ""
+"Bir veri paketi üzerinde deneyip ve piggyback (omuzlama) da ACK gecikmesi "
+"yoktur."
+
+#: etc/inc/upgrade_config.inc:677
+msgid "Maximum outgoing UDP datagram size"
+msgstr "Maksimum giden UDP veri birimi boyutu"
+
+#: etc/inc/upgrade_config.inc:681
+msgid ""
+"Handling of non-IP packets which are not passed to pfil (see if_bridge(4))"
+msgstr ""
+"Pfil den geçmeyip IP-Paketi olmayanların taşunması (bakınız if_bridge(4))"
+
+#: etc/inc/upgrade_config.inc:685
+msgid "Allow unprivileged access to tap(4) device nodes"
+msgstr "Ayrıcalıksız erişim (4) aygıt düğümü öğesine izin ver."
+
+#: etc/inc/upgrade_config.inc:689
+msgid "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+msgstr "Rastgele PID's (Bak src/sys/kern/kern_fork.c: sysctl_kern_randompid())"
+
+#: etc/inc/upgrade_config.inc:693
+msgid ""
+"The system will attempt to calculate the bandwidth delay product for each "
+"connection and limit the amount of data queued to the network to just the "
+"amount required to maintain optimum throughput. "
+msgstr ""
+"Sistem Her Onaylı Bağlantı için Bantgenişliği Hesaplaması Yaparak Ağda ki "
+"Veri Kaynaklarının Kullanımını Optimum Seviyede Tutmaya Çalışır."
+
+#: etc/inc/upgrade_config.inc:697
+msgid "Set ICMP Limits"
+msgstr "ICMP Sınırlarını Ayarla"
+
+#: etc/inc/upgrade_config.inc:701
+msgid "TCP Offload engine"
+msgstr "TCP bırakma (Offload) moturu"
+
+#: etc/inc/upgrade_config.inc:742
+#, php-format
+msgid "Interface %s Static Gateway"
+msgstr "%s Arabiriminin Sabit Ağ Geçidi"
+
+#: etc/inc/upgrade_config.inc:745
+#, php-format
+msgid "Interface %s Dynamic Gateway"
+msgstr "%s Arabiriminin Değişken Ağ Geçidi"
+
+#: etc/inc/upgrade_config.inc:811
+#, php-format
+msgid "Upgraded static route for %s"
+msgstr "Güncellenen statik yönlendirici %s"
+
+#: etc/inc/upgrade_config.inc:908
+#, php-format
+msgid "Sitedown pool for VS: %s"
+msgstr "Site kapalı havuzu VS için: %s"
+
+#: etc/inc/upgrade_config.inc:1063
+#, php-format
+msgid "phase2 for %s"
+msgstr "aşama 2 için %s"
+
+#: etc/inc/upgrade_config.inc:1290
+#, php-format
+msgid "Upgraded Dyndns %s"
+msgstr "Güncellenmiş Dyndns %s"
+
+#: etc/inc/upgrade_config.inc:1342
+msgid "All Users"
+msgstr "Tüm Kullanıcılar"
+
+#: etc/inc/upgrade_config.inc:1474
+#, php-format
+msgid "Converted bridged %s"
+msgstr "Dönüştürülmüş köprülenmiş %s"
+
+#: etc/inc/upgrade_config.inc:1848
+msgid "Auto added OpenVPN rule from config upgrade."
+msgstr "Yapılandırma yükseltmesinde otomatik eklenen OpenVPN kuralı."
+
+#: etc/inc/util.inc:101
+#, php-format
+msgid "WARNING: Could not mark subsystem: %s dirty"
+msgstr "UYARI: Alt sistem işareti alınamadı %s kirli "
+
+#: etc/inc/util.inc:121
+msgid "WARNING: You must give a name as parameter to lock() function."
+msgstr "UYARI: Parametreye isim vermelisiniz iÅŸlev() kilidi."
+
+#: etc/inc/util.inc:138
+msgid "WARNING: You must give a name as parameter to try_lock() function."
+msgstr ""
+
+#: etc/inc/util.inc:273
+#, php-format
+msgid "Reference %s is going negative, not doing unreference."
+msgstr "Kaynak %s eksiye gidiyor, kaynak yapmıyor."
+
+#: etc/inc/util.inc:1254
+#, php-format
+msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' "
+msgstr "Komut '%1$s' geriye '%2$d' dondurdu, '%3$s' olarak cikti verdi."
+
+#: etc/inc/voucher.inc:391
+#, php-format
+msgid "%1$s (%2$s/%3$s) active and good for %4$d Minutes"
+msgstr "%1$s (%2$s/%3$s) aktif ve iyi %4$d Dakika"
+
+#: etc/inc/voucher.inc:428
+msgid "Access denied!"
+msgstr "EriÅŸim Engellendi!"
+
+#: etc/inc/voucher.inc:430
+#, php-format
+msgid "Access granted for %d Minutes in total."
+msgstr "Toplam %d dakikalığına erişim verildi."
+
+#: etc/inc/voucher.inc:496
+msgid "Enabling voucher support... "
+msgstr "Bilet desteÄŸi aktifleÅŸtiriliyor... "
+
+#: etc/inc/voucher.inc:535
+#, php-format
+msgid "Error: cannot write voucher.cfg"
+msgstr "Hata: voucher.cfg yazılamıyor"
+
+#: etc/inc/voucher.inc:586
+#, php-format
+msgid "cant write %1$s/voucher_%s_used_%2$s.db"
+msgstr "%1$s/voucher_%s_used_%2$s.db yazılamıyor"
+
+#: etc/inc/voucher.inc:667
+#, php-format
+msgid "cant read %1$s/voucher_%s_used_%2$s.db"
+msgstr "%1$s/voucher_%s_used_%2$s.db okunamıyor"
+
+#: etc/inc/voucher.inc:684
+#, php-format
+msgid "Voucher: %s"
+msgstr "Bilet: %s"
+
+#: etc/inc/vpn.inc:161
+msgid "Configuring IPsec VPN... "
+msgstr "IPsec VPN Yapılandırılıyor..."
+
+#: etc/inc/vpn.inc:423
+#, php-format
+msgid "Error: Invalid certificate info for %s"
+msgstr "Hata: %s Geçersiz sertifika bilgisi"
+
+#: etc/inc/vpn.inc:429
+#, php-format
+msgid "Error: Invalid certificate hash info for %s"
+msgstr "Hata: %s Geçersiz sertifika hash bilgisi"
+
+#: etc/inc/vpn.inc:434
+#, php-format
+msgid "Error: Cannot write IPsec CA file for %s"
+msgstr "Hata: IPsec CA dosyası %s e yazılamıyor"
+
+#: etc/inc/vpn.inc:456
+#, php-format
+msgid "Error: Invalid phase1 certificate reference for %s"
+msgstr "Hata: %s geçersiz aşama 1 sertifika kaynağı"
+
+#: etc/inc/vpn.inc:464
+#, php-format
+msgid "Error: Cannot write phase1 key file for %s"
+msgstr "Hata: %s Anahtar aşama 1 dosyasına yazılamadı"
+
+#: etc/inc/vpn.inc:471
+#, php-format
+msgid "Error: Cannot write phase1 certificate file for %s"
+msgstr "Hata: %s Sertifika aşama 1 dosyasına yazılamadı"
+
+#: etc/inc/vpn.inc:916
+#, php-format
+msgid "Ignoring IPsec reload since there are no tunnels on interface %s"
+msgstr ""
+
+#: etc/inc/vpn.inc:923
+msgid "Forcefully reloading IPsec"
+msgstr ""
+
+#: etc/inc/vpn.inc:967
+msgid "Configuring PPTP VPN service... "
+msgstr "PPTP VPN servisi yapılandırılıyor..."
+
+#: etc/inc/vpn.inc:977
+msgid "Could not kill mpd within 3 seconds. Trying again."
+msgstr "3 Saniye içinde mpd durdurulamadı. Tekrar deneniyor."
+
+#: etc/inc/vpn.inc:1000
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pptpd_configure()."
+msgstr "Hata: vpn_pptpd_configure(). içinde mpd.conf açılamadı."
+
+#: etc/inc/vpn.inc:1119
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pptpd_configure()."
+msgstr "Hata: vpn_pptpd_configure(). içinde mpd.links açılamadı."
+
+#: etc/inc/vpn.inc:1144
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pptpd_configure()."
+msgstr "Hata: vpn_pptpd_configure(). içinde mpd.secret açılamadı."
+
+#: etc/inc/vpn.inc:1202
+msgid "Configuring PPPoE Server service... "
+msgstr ""
+
+#: etc/inc/vpn.inc:1226
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()."
+msgstr "Hata: vpn_pppoe_configure(). içinde mpd.conf açılmadı."
+
+#: etc/inc/vpn.inc:1335
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_pppoe_configure()."
+msgstr "Hata: vpn_pppoe_configure(). içinde mpd.links açılamadı."
+
+#: etc/inc/vpn.inc:1362
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()."
+msgstr "Hata: vpn_pppoe_configure(). içinde mpd.secret açılamadı."
+
+#: etc/inc/vpn.inc:1395 usr/local/www/system_firmware_check.php:141
+msgid "done"
+msgstr "tamamlandı"
+
+#: etc/inc/vpn.inc:1414
+msgid "Configuring l2tp VPN service... "
+msgstr "l2tp VPN servisi yapılandırılıyor..."
+
+#: etc/inc/vpn.inc:1439
+#, php-format
+msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()."
+msgstr "Hata: vpn_l2tp_configure(). içinde mpd.conf açılamadı."
+
+#: etc/inc/vpn.inc:1538
+#, php-format
+msgid "Error: cannot open mpd.links in vpn_l2tp_configure()."
+msgstr "Hata: vpn_l2tp_configure(). içinde mpd.links açılamadı."
+
+#: etc/inc/vpn.inc:1564
+#, php-format
+msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()."
+msgstr "Hata: vpn_l2tp_configure(). içinde mpd.secret açılamadı."
+
+#: etc/inc/xmlparse.inc:93 etc/inc/xmlparse_attr.inc:78
+#, php-format
+msgid "XML error: %1$s at line %2$d cannot occur more than once"
+msgstr "XML hatası: %1$s satırında %2$d bir kereden fazla olamaz"
+
+#: etc/inc/xmlparse.inc:184 etc/inc/xmlparse_attr.inc:187
+msgid "Error: could not open XML input"
+msgstr "Hata: XML girdisi açılamadı"
+
+#: etc/inc/xmlparse.inc:190
+#, php-format
+msgid "XML error: %1$s at line %2$d in %3$s"
+msgstr "XML hata: %3$s içinde %2$d satır %1$s"
+
+#: etc/inc/xmlparse.inc:207 etc/inc/xmlparse_attr.inc:210
+#, php-format
+msgid "XML error: no %s object found!"
+msgstr "XML hata : %s nesnesi bulunamadı!"
+
+#: etc/inc/xmlparse_attr.inc:197
+#, php-format
+msgid "XML error: %1$s at line %2$d"
+msgstr "XML hatası: %1$s satır %2$d"
+
+#: etc/inc/xmlreader.inc:168
+#, php-format
+msgid "Error returned while trying to parse %s"
+msgstr "Ayrıştırmaya çalışırken hata ile döndü %s"
+
+#: etc/inc/xmlrpc_client.inc:152
+msgid "Unknown method"
+msgstr "Bilinmeyen yöntem"
+
+#: etc/inc/xmlrpc_client.inc:153
+msgid "Invalid return payload: enable debugging to examine incoming payload"
+msgstr ""
+"Geçersiz yük dönüşü: gelen yükü incelemek için hata ayıklamayı etkinleştir"
+
+#: etc/inc/xmlrpc_client.inc:154
+msgid "Incorrect parameters passed to method"
+msgstr "Hatalı parametreler yönteme geçirildi"
+
+#: etc/inc/xmlrpc_client.inc:155
+msgid "Can't introspect: method unknown"
+msgstr "İçgözlem olamaz: Biliynmeyen Yöntem"
+
+#: etc/inc/xmlrpc_client.inc:156
+msgid "Didn't receive 200 OK from remote server."
+msgstr "Uzak sunucudan 200 OK alınmadı."
+
+#: etc/inc/xmlrpc_client.inc:157
+msgid "The requested method didn't return an XML_RPC_Response object."
+msgstr "İstenilen yöntem XML_RPC_Response nesnesi döndürmedi."
+
+#: etc/inc/xmlrpc_client.inc:158
+msgid "Invalid request payload"
+msgstr "Geçersiz yük isteği"
+
+#: etc/inc/xmlrpc_client.inc:260
+msgid "missing top level xmlrpc element"
+msgstr "üst düzey xmlrpc öğesi kayıp"
+
+#: etc/inc/xmlrpc_client.inc:268
+#, php-format
+msgid "xmlrpc element %1$s cannot be child of %2$s"
+msgstr "xmlrpc öğesi %1$s %2$s nin alt öğesi değil"
+
+#: etc/inc/xmlrpc_client.inc:431
+msgid "Non-numeric value received in INT or DOUBLE"
+msgstr "INT veya İKİZ alınan değerleri numaratik olmayan değer"
+
+#: etc/inc/xmlrpc_client.inc:860
+#, php-format
+msgid "send()'s %s parameter must be an XML_RPC_Message object."
+msgstr "send()'s %s parametresi XML_RPC_Message nesnesine ait olmalıdır."
+
+#: etc/inc/xmlrpc_client.inc:951
+#, php-format
+msgid ""
+"Connection to proxy server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+"Proxy sunucu bağlantısı sırasında \n"
+"%1$s:%2$s başarısız oldu. %3$s"
+
+#: etc/inc/xmlrpc_client.inc:957
+#, php-format
+msgid ""
+"Connection to RPC server \n"
+" %1$s:%2$s failed. %3$s"
+msgstr ""
+"RPC sunucu bağlantısı sırasında \n"
+"%1$s:%2$s başarısız oldu. %3$s"
+
+#: etc/inc/xmlrpc_client.inc:1330
+msgid "The submitted request did not contain this parameter"
+msgstr "Gönderilen istek bu parametreyi içermiyor"
+
+#: etc/inc/xmlrpc_client.inc:1361
+msgid "mb_convert_encoding() is not available"
+msgstr "mb_convert_encoding() kullanılamaz"
+
+#: etc/inc/xmlrpc_client.inc:1470
+#, php-format
+msgid "HTTP error, got response: %s"
+msgstr "HTTP hatası, gelen yanıt: %s"
+
+#: etc/inc/xmlrpc_client.inc:1593
+msgid "Scalar can have only one value"
+msgstr "Sayı sadece bir değer olmalı"
+
+#: etc/inc/xmlrpc_client.inc:1600
+#, php-format
+msgid "Not a scalar type (%s)"
+msgstr "(%s) sayısal bir tür değil"
+
+#: etc/inc/xmlrpc_client.inc:1636 etc/inc/xmlrpc_client.inc:1652
+#, php-format
+msgid "Already initialized as a [%s]"
+msgstr "[%s] olarak henüz başlatıldı"
+
+#: etc/inc/xmlrpc_server.inc:48
+msgid ""
+"This method lists all the methods that the XML-RPC server knows how to "
+"dispatch"
+msgstr ""
+"Bu yöntem tüm yöntemleri listeler XML-RPC sunucusu nasıl dağıtacağını "
+"belirler"
+
+#: etc/inc/xmlrpc_server.inc:66
+msgid ""
+"Returns an array of known signatures (an array of arrays) for the method "
+"name passed. If no signatures are known, returns a none-array (test for "
+"type != array to detect missing signature)"
+msgstr ""
+"Geçen yöntem adı ile tanınan imzalar bir dizi olarak döndürür. (dizler için "
+"dizi) Eğer tanımlı imza yoksa, boş-dizi olarak dönüş yapar (tür için test != "
+"dizi kayıp imza tesbiti)"
+
+#: etc/inc/xmlrpc_server.inc:86
+msgid ""
+"Returns help text if defined for the method passed, otherwise returns an "
+"empty string"
+msgstr ""
+"Yardım dosyası tanımlıysa yöntem geçiş yaparak döner, aksi halde boş dizilim "
+"olarak döner"
+
+#: etc/inc/zeromq.inc:225 etc/inc/zeromq.inc:236
+#, php-format
+msgid "Merged in config (%s sections) from ZeroMQ client."
+msgstr "ZeroMQ istemcisinden (%s bölümleri) yapılandırmaya dahil edildi."
+
+#: usr/local/sbin/gmirror_status_check.php:58
+#, php-format
+msgid "List of mirrors changed. Old: (%s) New: (%s)"
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:65
+#, php-format
+msgid "Mirror %s status changed from %s to %s."
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:70
+#, php-format
+msgid "Mirror %s consumer count changed from %d to %d."
+msgstr ""
+
+#: usr/local/sbin/gmirror_status_check.php:77
+#, php-format
+msgid "Mirror %s drive status changed. Old: (%s) New: (%s)"
+msgstr ""
+
+#: usr/local/www/bandwidth_by_ip.php:24
+msgid "Wrong Interface"
+msgstr "Hatalı Arabirim"
+
+#: usr/local/www/bandwidth_by_ip.php:119
+msgid "no info"
+msgstr "bilgi yok"
+
+#: usr/local/www/carp_status.php:72
+#, php-format
+msgid ""
+"%s IPs have been disabled. Please note that disabling does not survive a "
+"reboot."
+msgstr ""
+"%s IP kapatılmış durumda. Cihazı yeniden başlattığınızda tekrar "
+"etkinleştirileceklerini unutmayın."
+
+#: usr/local/www/carp_status.php:75
+msgid "CARP has been enabled."
+msgstr "CARP etkinleÅŸtirildi."
+
+#: usr/local/www/carp_status.php:99 usr/local/www/carp_status.php:148
+#: usr/local/www/diag_gmirror.php:221 usr/local/www/diag_ipsec.php:49
+#: usr/local/www/diag_ipsec.php:115 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_leases.php:89 usr/local/www/diag_ipsec_sad.php:50
+#: usr/local/www/diag_ipsec_spd.php:50 usr/local/www/diag_logs.php:66
+#: usr/local/www/diag_logs_auth.php:57 usr/local/www/diag_logs_dhcp.php:60
+#: usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+#: usr/local/www/diag_logs_filter_summary.php:35
+#: usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_ipsec.php:61 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_openvpn.php:46 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_relayd.php:56
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_settings.php:187 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_wireless.php:57 usr/local/www/diag_pkglogs.php:86
+#: usr/local/www/easyrule.php:83 usr/local/www/fbegin.inc:324
+#: usr/local/www/pkg_mgr.php:198
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_vouchers.php:58
+#: usr/local/www/status_dhcp_leases.php:50
+#: usr/local/www/status_dhcpv6_leases.php:51
+#: usr/local/www/status_filter_reload.php:45
+#: usr/local/www/status_gateway_groups.php:53
+#: usr/local/www/status_gateways.php:52 usr/local/www/status_gateways.php:79
+#: usr/local/www/status_graph.php:114 usr/local/www/status_graph_cpu.php:42
+#: usr/local/www/status_interfaces.php:60
+#: usr/local/www/status_interfaces.php:88 usr/local/www/status_lb_pool.php:63
+#: usr/local/www/status_lb_vs.php:57 usr/local/www/status_lb_vs.php:81
+#: usr/local/www/status_ntpd.php:164 usr/local/www/status_ntpd.php:178
+#: usr/local/www/status_openvpn.php:46 usr/local/www/status_openvpn.php:277
+#: usr/local/www/status_openvpn.php:340 usr/local/www/status_queues.php:124
+#: usr/local/www/status_rrd_graph.php:260
+#: usr/local/www/status_rrd_graph_settings.php:120
+#: usr/local/www/status_services.php:68 usr/local/www/status_services.php:86
+#: usr/local/www/status_upnp.php:59 usr/local/www/status_wireless.php:42
+#: usr/local/www/status_wireless.php:79
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:46
+msgid "Status"
+msgstr "Durum"
+
+#: usr/local/www/carp_status.php:99
+#: usr/local/www/firewall_virtual_ip_edit.php:389
+msgid "CARP"
+msgstr "CARP"
+
+#: usr/local/www/carp_status.php:110
+msgid ""
+"CARP has detected a problem and this unit has been demoted to BACKUP status."
+msgstr ""
+
+#: usr/local/www/carp_status.php:110
+msgid "Check link status on all interfaces with configured CARP VIPs."
+msgstr ""
+
+#: usr/local/www/carp_status.php:130
+msgid "Temporarily Disable CARP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:133
+msgid "Enable CARP"
+msgstr ""
+
+#: usr/local/www/carp_status.php:136
+msgid "Leave Persistent CARP Maintenance Mode"
+msgstr ""
+
+#: usr/local/www/carp_status.php:138
+msgid "Enter Persistent CARP Maintenance Mode"
+msgstr ""
+
+#: usr/local/www/carp_status.php:146
+msgid "CARP Interface"
+msgstr "CARP Arabirimi"
+
+#: usr/local/www/carp_status.php:147 usr/local/www/firewall_nat_out.php:649
+#: usr/local/www/firewall_nat_out_edit.php:712
+#: usr/local/www/system_gateway_groups_edit.php:319
+msgid "Virtual IP"
+msgstr "Sanal IP"
+
+#: usr/local/www/carp_status.php:152
+msgid "Could not locate any defined CARP interfaces."
+msgstr "Tanımlı herhangi bir CARP arabirimi tespit edilememiştir."
+
+#: usr/local/www/carp_status.php:199 usr/local/www/diag_packet_capture.php:262
+#: usr/local/www/diag_packet_capture.php:348
+#: usr/local/www/firewall_shaper_layer7.php:66
+#: usr/local/www/interfaces_wireless.php:137 usr/local/www/pkg_edit.php:936
+#: usr/local/www/services_ntpd_pps.php:138 usr/local/www/status_graph.php:338
+#: usr/local/www/status_graph_cpu.php:54 usr/local/www/status_queues.php:187
+#: usr/local/www/vpn_ipsec.php:642 usr/local/www/vpn_ipsec_keys.php:180
+#: usr/local/www/vpn_ipsec_keys_edit.php:161
+#: usr/local/www/vpn_pppoe_edit.php:610 usr/local/www/vpn_pptp.php:487
+msgid "Note"
+msgstr "Not"
+
+#: usr/local/www/carp_status.php:201
+msgid "You can configure high availability sync settings"
+msgstr "Yüksek erişilebilirlik senkronize ayarlarını yapılandırabilirsiniz"
+
+#: usr/local/www/carp_status.php:201
+#: usr/local/www/firewall_shaper_layer7.php:67
+#: usr/local/www/firewall_virtual_ip.php:308 usr/local/www/interfaces.php:3490
+#: usr/local/www/interfaces.php:3499 usr/local/www/status_queues.php:189
+msgid "here"
+msgstr "burada"
+
+#: usr/local/www/carp_status.php:205
+msgid "pfSync nodes"
+msgstr "pfSync uçları"
+
+#: usr/local/www/crash_reporter.php:69
+msgid "Unfortunately we have detected a programming bug."
+msgstr "Ne yazıkki bir programlama hatası algılandı."
+
+#: usr/local/www/crash_reporter.php:70
+msgid ""
+"Would you like to submit the programming debug logs to the pfSense "
+"developers for inspection?"
+msgstr ""
+"İnceleme için pfSense geliştiricilerine programlama hata ayıklama kodlarını "
+"göndermek istermisiniz?"
+
+#: usr/local/www/crash_reporter.php:71
+msgid ""
+"Please double check the contents to ensure you are comfortable sending this "
+"information before clicking Yes."
+msgstr ""
+"Bu bilgilerin gönderilmesinde herhangi bir sakınca olmadığından emin olmak "
+"için içeriği inceleyip ondan sonra Evet'e tıklayınız."
+
+#: usr/local/www/crash_reporter.php:72
+msgid "Contents of crash reports"
+msgstr "Problem raporu içeriği"
+
+#: usr/local/www/crash_reporter.php:74 usr/local/www/diag_defaults.php:61
+#: usr/local/www/diag_defaults.php:71 usr/local/www/diag_defaults.php:83
+#: usr/local/www/halt.php:61 usr/local/www/halt.php:70
+#: usr/local/www/pkg.php:426 usr/local/www/reboot.php:55
+#: usr/local/www/reboot.php:65 usr/local/www/system_firmware.php:231
+msgid "Yes"
+msgstr "Evet"
+
+#: usr/local/www/crash_reporter.php:74
+msgid " - Submit this to the developers for inspection"
+msgstr " - İncelenmek üzere geliştiricilere gönder"
+
+#: usr/local/www/crash_reporter.php:75 usr/local/www/diag_defaults.php:48
+#: usr/local/www/diag_defaults.php:84 usr/local/www/halt.php:50
+#: usr/local/www/halt.php:71 usr/local/www/pkg.php:424
+#: usr/local/www/reboot.php:44 usr/local/www/reboot.php:66
+#: usr/local/www/system_firmware.php:232
+msgid "No"
+msgstr "Hayır"
+
+#: usr/local/www/crash_reporter.php:75
+msgid " - Just delete the crash report and take me back to the Dashboard"
+msgstr "- Hata raporunu temizle ve anasayfaya geri dön"
+
+#: usr/local/www/crash_reporter.php:79 usr/local/www/diag_arp.php:262
+#: usr/local/www/diag_authentication.php:69 usr/local/www/diag_backup.php:593
+#: usr/local/www/diag_confbak.php:110 usr/local/www/diag_defaults.php:53
+#: usr/local/www/diag_dns.php:35 usr/local/www/diag_dump_states.php:72
+#: usr/local/www/diag_dump_states_sources.php:66
+#: usr/local/www/diag_gmirror.php:46 usr/local/www/diag_nanobsd.php:50
+#: usr/local/www/diag_ndp.php:107 usr/local/www/diag_packet_capture.php:88
+#: usr/local/www/diag_patterns.php:63 usr/local/www/diag_ping.php:47
+#: usr/local/www/diag_resetstate.php:65 usr/local/www/diag_routes.php:71
+#: usr/local/www/diag_smart.php:18 usr/local/www/diag_sockets.php:45
+#: usr/local/www/diag_states_summary.php:187 usr/local/www/diag_tables.php:45
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_traceroute.php:47
+#: usr/local/www/edit.php:42 usr/local/www/exec.php:96
+#: usr/local/www/fbegin.inc:332 usr/local/www/halt.php:55
+#: usr/local/www/reboot.php:49 usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_restorefullbackup.php:105
+msgid "Diagnostics"
+msgstr "Araçlar"
+
+#: usr/local/www/crash_reporter.php:79
+msgid "Crash reporter"
+msgstr "Hata raporlayıcısı"
+
+#: usr/local/www/crash_reporter.php:100
+msgid "Processing..."
+msgstr "Ä°ÅŸleniyor..."
+
+#: usr/local/www/crash_reporter.php:109
+msgid "Uploading..."
+msgstr "Yükleniyor..."
+
+#: usr/local/www/crash_reporter.php:119
+#: usr/local/www/services_captiveportal_zones_edit.php:116
+msgid "Continue"
+msgstr "Devam et"
+
+#: usr/local/www/crash_reporter.php:119
+msgid " and delete crash report files from local disk."
+msgstr " ve hata raporu dosyalarını diskten sil."
+
+#: usr/local/www/diag_arp.php:262 usr/local/www/fbegin.inc:206
+msgid "ARP Table"
+msgstr "ARP Tablosu"
+
+#: usr/local/www/diag_arp.php:272 usr/local/www/diag_ndp.php:117
+#: usr/local/www/firewall_rules.php:300
+msgid "Loading, please wait..."
+msgstr "Yükleniyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_arp.php:315 usr/local/www/diag_ndp.php:134
+#: usr/local/www/interfaces.php:1694
+#: usr/local/www/services_captiveportal_mac.php:170
+#: usr/local/www/services_captiveportal_mac_edit.php:102
+#: usr/local/www/services_captiveportal_mac_edit.php:205
+#: usr/local/www/services_dhcp.php:1247
+#: usr/local/www/services_dhcp_edit.php:374 usr/local/www/services_wol.php:145
+#: usr/local/www/services_wol.php:163 usr/local/www/services_wol_edit.php:86
+#: usr/local/www/services_wol_edit.php:144
+#: usr/local/www/status_captiveportal.php:158
+#: usr/local/www/status_dhcp_leases.php:332
+#: usr/local/www/status_interfaces.php:246
+msgid "MAC address"
+msgstr "MAC adresi"
+
+#: usr/local/www/diag_arp.php:316 usr/local/www/diag_ndp.php:135
+#: usr/local/www/interfaces.php:2004
+#: usr/local/www/services_captiveportal_hostname.php:126
+#: usr/local/www/services_captiveportal_hostname_edit.php:179
+#: usr/local/www/services_captiveportal_hostname_edit.php:183
+#: usr/local/www/services_dhcp.php:1249
+#: usr/local/www/services_dhcp_edit.php:404
+#: usr/local/www/services_dhcpv6.php:860
+#: usr/local/www/services_dhcpv6_edit.php:220
+#: usr/local/www/services_dyndns.php:88
+#: usr/local/www/services_dyndns_edit.php:100
+#: usr/local/www/services_dyndns_edit.php:312
+#: usr/local/www/services_rfc2136.php:82
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:152
+#: usr/local/www/status_dhcp_leases.php:333 usr/local/www/system.php:108
+#: usr/local/www/system.php:312
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:83
+msgid "Hostname"
+msgstr "Host adı"
+
+#: usr/local/www/diag_arp.php:317 usr/local/www/diag_logs_filter.php:203
+#: usr/local/www/diag_logs_filter.php:237 usr/local/www/diag_ndp.php:136
+#: usr/local/www/diag_packet_capture.php:243
+#: usr/local/www/firewall_nat_1to1.php:182
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+#: usr/local/www/firewall_nat_1to1_edit.php:295
+#: usr/local/www/firewall_nat_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_edit.php:495
+#: usr/local/www/firewall_nat_npt.php:107
+#: usr/local/www/firewall_nat_npt_edit.php:108
+#: usr/local/www/firewall_nat_npt_edit.php:173
+#: usr/local/www/firewall_nat_out.php:305
+#: usr/local/www/firewall_nat_out.php:542
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:469
+#: usr/local/www/firewall_rules_edit.php:906
+#: usr/local/www/firewall_virtual_ip.php:240
+#: usr/local/www/firewall_virtual_ip_edit.php:397
+#: usr/local/www/interfaces_assign.php:482
+#: usr/local/www/interfaces_bridge.php:118
+#: usr/local/www/interfaces_gif.php:112 usr/local/www/interfaces_gre.php:113
+#: usr/local/www/interfaces_groups_edit.php:276
+#: usr/local/www/interfaces_lagg.php:118 usr/local/www/interfaces_ppps.php:110
+#: usr/local/www/interfaces_qinq.php:121 usr/local/www/interfaces_vlan.php:115
+#: usr/local/www/interfaces_wireless.php:110
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_dhcp_relay.php:73
+#: usr/local/www/services_dhcpv6_relay.php:74
+#: usr/local/www/services_dyndns.php:86
+#: usr/local/www/services_igmpproxy_edit.php:166
+#: usr/local/www/services_wol.php:131 usr/local/www/services_wol.php:162
+#: usr/local/www/services_wol_edit.php:86
+#: usr/local/www/services_wol_edit.php:130 usr/local/www/status_graph.php:208
+#: usr/local/www/system_gateways.php:218
+#: usr/local/www/system_gateways_edit.php:114
+#: usr/local/www/system_gateways_edit.php:655
+#: usr/local/www/system_routes.php:236 usr/local/www/vpn_ipsec_phase1.php:610
+#: usr/local/www/vpn_l2tp.php:309 usr/local/www/vpn_openvpn_client.php:530
+#: usr/local/www/vpn_openvpn_server.php:850 usr/local/www/vpn_pppoe.php:104
+#: usr/local/www/vpn_pppoe_edit.php:383
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:45
+msgid "Interface"
+msgstr "Arabirim"
+
+# takip eden 5642 ve 5643 le beraber kullanılıyor
+#: usr/local/www/diag_arp.php:343
+msgid "NOTE: Local IPv6 peers use"
+msgstr "NOT: Yerel IPv6 eşler için"
+
+#: usr/local/www/diag_arp.php:343
+msgid "NDP"
+msgstr "NDP"
+
+# 5641 ve 5642 ile beraber kullanılıyor. (technical)
+#: usr/local/www/diag_arp.php:343
+msgid "instead of ARP"
+msgstr "yerine ARP kullanın"
+
+#: usr/local/www/diag_authentication.php:52
+msgid "is not a valid authentication server"
+msgstr "geçerli bir kimlik doğrulama sunucusu değil"
+
+#: usr/local/www/diag_authentication.php:55
+msgid "A username and password must be specified."
+msgstr "Bir kullanıcı adı ve parola tanımlanmalıdır."
+
+#: usr/local/www/diag_authentication.php:59
+#: usr/local/www/diag_logs_vpn.php:177
+#: usr/local/www/system_groupmanager.php:533
+#: usr/local/www/system_usermanager.php:99
+#: usr/local/www/system_usermanager.php:959
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "User"
+msgstr "Kullanıcı"
+
+#: usr/local/www/diag_authentication.php:59
+msgid "authenticated successfully."
+msgstr "kimliği başarıyla doğrulandı."
+
+#: usr/local/www/diag_authentication.php:61
+msgid "This user is a member of these groups"
+msgstr "Bu kullanıcı belirtilen belirtilen üyesidir"
+
+#: usr/local/www/diag_authentication.php:65
+msgid "Authentication failed."
+msgstr "Kimlik doğrulama başarısız."
+
+#: usr/local/www/diag_authentication.php:69 usr/local/www/fbegin.inc:207
+#: usr/local/www/interfaces.php:3238
+#: usr/local/www/services_captiveportal.php:662
+#: usr/local/www/services_captiveportal.php:1039
+msgid "Authentication"
+msgstr "Kimlik doÄŸrulama"
+
+#: usr/local/www/diag_authentication.php:91
+#: usr/local/www/system_authservers.php:85
+#: usr/local/www/system_usermanager_settings.php:141
+msgid "Authentication Server"
+msgstr "Kimlik DoÄŸrulama Sunucusu"
+
+#: usr/local/www/diag_authentication.php:107
+#: usr/local/www/firewall_aliases_edit.php:602
+#: usr/local/www/interfaces.php:2619 usr/local/www/interfaces.php:2693
+#: usr/local/www/interfaces.php:2802
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:523
+#: usr/local/www/services_dyndns_edit.php:104
+#: usr/local/www/services_dyndns_edit.php:356
+#: usr/local/www/status_captiveportal.php:159
+#: usr/local/www/system_usermanager.php:205
+#: usr/local/www/system_usermanager.php:210
+#: usr/local/www/system_usermanager.php:215
+#: usr/local/www/system_usermanager.php:533
+#: usr/local/www/system_usermanager.php:904
+#: usr/local/www/vpn_l2tp_users.php:103
+#: usr/local/www/vpn_l2tp_users_edit.php:83
+#: usr/local/www/vpn_l2tp_users_edit.php:86
+#: usr/local/www/vpn_l2tp_users_edit.php:159
+#: usr/local/www/vpn_openvpn_client.php:621
+#: usr/local/www/vpn_openvpn_client.php:685
+#: usr/local/www/vpn_pppoe_edit.php:548 usr/local/www/vpn_pptp_users.php:100
+#: usr/local/www/vpn_pptp_users_edit.php:79
+#: usr/local/www/vpn_pptp_users_edit.php:82
+#: usr/local/www/vpn_pptp_users_edit.php:150
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:107
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: usr/local/www/diag_authentication.php:113 usr/local/www/interfaces.php:2625
+#: usr/local/www/interfaces.php:2699 usr/local/www/interfaces.php:2808
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/interfaces_ppps_edit.php:529
+#: usr/local/www/services_dyndns_edit.php:102
+#: usr/local/www/services_dyndns_edit.php:365
+#: usr/local/www/system_advanced_notifications.php:232
+#: usr/local/www/system_usermanager.php:211
+#: usr/local/www/system_usermanager.php:216
+#: usr/local/www/system_usermanager.php:540
+#: usr/local/www/system_usermanager_passwordmg.php:51
+#: usr/local/www/system_usermanager_passwordmg.php:111
+#: usr/local/www/system_usermanager_passwordmg.php:115
+#: usr/local/www/vpn_l2tp_users_edit.php:86
+#: usr/local/www/vpn_l2tp_users_edit.php:165
+#: usr/local/www/vpn_openvpn_client.php:631
+#: usr/local/www/vpn_openvpn_client.php:695
+#: usr/local/www/vpn_pppoe_edit.php:549
+#: usr/local/www/vpn_pptp_users_edit.php:82
+#: usr/local/www/vpn_pptp_users_edit.php:156
+msgid "Password"
+msgstr "Parola"
+
+#: usr/local/www/diag_authentication.php:121 usr/local/www/diag_smart.php:370
+#: usr/local/www/diag_testport.php:181
+msgid "Test"
+msgstr "Test"
+
+#: usr/local/www/diag_backup.php:162
+msgid "Restored base_package menus after configuration restore."
+msgstr "Yapılandırmaya geri dönüldükten sonra temel_paket menüleri yüklendi."
+
+#: usr/local/www/diag_backup.php:181 usr/local/www/fbegin.inc:128
+#: usr/local/www/firewall_aliases.php:157
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_aliases_import.php:50
+#: usr/local/www/firewall_aliases_import.php:68
+#: usr/local/www/services_dnsmasq_edit.php:244
+#: usr/local/www/services_unbound_host_edit.php:247
+msgid "Aliases"
+msgstr "Gruplar"
+
+#: usr/local/www/diag_backup.php:183
+msgid "Captive Portal Vouchers"
+msgstr "Hizmet Portalı Biletleri"
+
+#: usr/local/www/diag_backup.php:185 usr/local/www/fbegin.inc:144
+msgid "DHCP Server"
+msgstr "DHCP Sunucu"
+
+#: usr/local/www/diag_backup.php:186 usr/local/www/services_dhcpv6.php:533
+#: usr/local/www/services_dhcpv6.php:543
+#: usr/local/www/services_router_advertisements.php:262
+msgid "DHCPv6 Server"
+msgstr "DHCPv6 Sunucu"
+
+#: usr/local/www/diag_backup.php:187
+msgid "Firewall Rules"
+msgstr "Güvenlik Duvarı Kuralları"
+
+#: usr/local/www/diag_backup.php:188
+#: usr/local/www/diag_logs_filter_summary.php:48 usr/local/www/fbegin.inc:180
+#: usr/local/www/fbegin.inc:292 usr/local/www/interfaces.php:1406
+#: usr/local/www/interfaces_assign.php:44
+#: usr/local/www/interfaces_bridge.php:87
+#: usr/local/www/interfaces_bridge_edit.php:240
+#: usr/local/www/interfaces_gif.php:81
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre.php:82
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups.php:64
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/interfaces_lagg.php:87
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq.php:90
+#: usr/local/www/interfaces_qinq_edit.php:40
+#: usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_vlan_edit.php:152
+#: usr/local/www/interfaces_wireless.php:79
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/services_captiveportal.php:523
+#: usr/local/www/services_captiveportal_zones.php:81
+#: usr/local/www/services_dnsmasq.php:269
+#: usr/local/www/status_interfaces.php:60
+msgid "Interfaces"
+msgstr "Arabirimler"
+
+#: usr/local/www/diag_backup.php:189
+msgid "IPSEC"
+msgstr "IPSEC"
+
+#: usr/local/www/diag_backup.php:190 usr/local/www/fbegin.inc:129
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:81
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "NAT"
+msgstr "NAT"
+
+#: usr/local/www/diag_backup.php:192 usr/local/www/fbegin.inc:437
+#: usr/local/www/pkg_mgr.php:59 usr/local/www/pkg_mgr.php:106
+#: usr/local/www/pkg_mgr_install.php:58 usr/local/www/pkg_mgr_installed.php:52
+#: usr/local/www/pkg_mgr_installed.php:81
+msgid "Package Manager"
+msgstr "Paket Yöneticisi"
+
+#: usr/local/www/diag_backup.php:193
+msgid "PPTP Server"
+msgstr "PPTP Sunucusu"
+
+#: usr/local/www/diag_backup.php:194
+msgid "RRD Data"
+msgstr "RRD Veri"
+
+#: usr/local/www/diag_backup.php:195
+msgid "Scheduled Tasks"
+msgstr "Zamanlanmış Görevler"
+
+#: usr/local/www/diag_backup.php:196
+msgid "Syslog"
+msgstr "Syslog"
+
+#: usr/local/www/diag_backup.php:197 usr/local/www/diag_logs.php:78
+#: usr/local/www/diag_logs_auth.php:69 usr/local/www/diag_logs_dhcp.php:72
+#: usr/local/www/diag_logs_filter.php:135
+#: usr/local/www/diag_logs_filter_dynamic.php:100
+#: usr/local/www/diag_logs_filter_summary.php:189
+#: usr/local/www/diag_logs_gateways.php:80
+#: usr/local/www/diag_logs_ipsec.php:73 usr/local/www/diag_logs_ntpd.php:67
+#: usr/local/www/diag_logs_openvpn.php:71 usr/local/www/diag_logs_ppp.php:69
+#: usr/local/www/diag_logs_relayd.php:68
+#: usr/local/www/diag_logs_resolver.php:80
+#: usr/local/www/diag_logs_routing.php:67
+#: usr/local/www/diag_logs_settings.php:267
+#: usr/local/www/diag_logs_vpn.php:127 usr/local/www/diag_logs_wireless.php:69
+#: usr/local/www/fbegin.inc:284 usr/local/www/fbegin.inc:437
+#: usr/local/www/pkg_mgr.php:59 usr/local/www/pkg_mgr.php:106
+#: usr/local/www/pkg_mgr_install.php:58 usr/local/www/pkg_mgr_installed.php:52
+#: usr/local/www/pkg_mgr_installed.php:81
+#: usr/local/www/pkg_mgr_settings.php:63
+#: usr/local/www/status_rrd_graph.php:416
+#: usr/local/www/status_rrd_graph_img.php:44
+#: usr/local/www/status_rrd_graph_settings.php:54
+#: usr/local/www/status_rrd_graph_settings.php:135 usr/local/www/system.php:76
+#: usr/local/www/system.php:289 usr/local/www/system.php:309
+#: usr/local/www/system_advanced_admin.php:275
+#: usr/local/www/system_advanced_firewall.php:233
+#: usr/local/www/system_advanced_misc.php:245
+#: usr/local/www/system_advanced_network.php:154
+#: usr/local/www/system_advanced_notifications.php:164
+#: usr/local/www/system_advanced_sysctl.php:135
+#: usr/local/www/system_authservers.php:45
+#: usr/local/www/system_camanager.php:52
+#: usr/local/www/system_certmanager.php:58
+#: usr/local/www/system_crlmanager.php:47
+#: usr/local/www/system_firmware.php:103 usr/local/www/system_firmware.php:202
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_settings.php:87
+#: usr/local/www/system_gateway_groups.php:99
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways.php:182
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_groupmanager.php:53
+#: usr/local/www/system_groupmanager_addprivs.php:57
+#: usr/local/www/system_hasync.php:101 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes_edit.php:212
+#: usr/local/www/system_usermanager.php:58
+#: usr/local/www/system_usermanager_passwordmg.php:44
+#: usr/local/www/system_usermanager_settings.php:50
+msgid "System"
+msgstr "Sistem"
+
+#: usr/local/www/diag_backup.php:198
+msgid "Static routes"
+msgstr "Statik yönlendirmeler"
+
+#: usr/local/www/diag_backup.php:199
+msgid "System tunables"
+msgstr "Sistem deÄŸiÅŸkenleri"
+
+#: usr/local/www/diag_backup.php:200
+msgid "SNMP Server"
+msgstr "SNMP Sunucu"
+
+#: usr/local/www/diag_backup.php:201 usr/local/www/fbegin.inc:132
+#: usr/local/www/firewall_shaper.php:55
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:74
+msgid "Traffic Shaper"
+msgstr "Trafik Åžekillendirme"
+
+#: usr/local/www/diag_backup.php:202
+msgid "VLANS"
+msgstr "VLANlar"
+
+#: usr/local/www/diag_backup.php:203 usr/local/www/fbegin.inc:159
+#: usr/local/www/services_wol.php:116 usr/local/www/services_wol.php:128
+#: usr/local/www/services_wol_edit.php:116
+msgid "Wake on LAN"
+msgstr "Lan ile Uyan"
+
+#: usr/local/www/diag_backup.php:207
+msgid "ALL"
+msgstr "TÜMÜ"
+
+#: usr/local/www/diag_backup.php:248 usr/local/www/diag_backup.php:715
+#: usr/local/www/diag_backup.php:752
+msgid "Restore configuration"
+msgstr "Yapılandırmaya geri dön"
+
+#: usr/local/www/diag_backup.php:250
+msgid "Reinstall"
+msgstr "Tekrar kur"
+
+#: usr/local/www/diag_backup.php:252 usr/local/www/diag_backup.php:774
+msgid "Clear Package Lock"
+msgstr "Paket Kilidini Temizle"
+
+#: usr/local/www/diag_backup.php:254 usr/local/www/diag_tables.php:157
+#: usr/local/www/diag_tables.php:166 usr/local/www/exec.php:279
+#: usr/local/www/exec.php:289
+#: usr/local/www/system_firmware_restorefullbackup.php:167
+msgid "Download"
+msgstr "Ä°ndir"
+
+#: usr/local/www/diag_backup.php:256
+msgid "Restore version"
+msgstr "Sürümü geri yükle"
+
+#: usr/local/www/diag_backup.php:271
+msgid "You must supply and confirm the password for encryption."
+msgstr "Şifreleme için parola belirleyip onaylamalısınız."
+
+#: usr/local/www/diag_backup.php:273 usr/local/www/diag_backup.php:350
+msgid "The supplied 'Password' and 'Confirm' field values must match."
+msgstr "Belirtilen 'Parola' ve 'Onay' alanları aynı olmalıdır."
+
+#: usr/local/www/diag_backup.php:348
+msgid "You must supply and confirm the password for decryption."
+msgstr "Şifre çözümleme için parola belirleyip onaylamalısınız."
+
+#: usr/local/www/diag_backup.php:360
+#, php-format
+msgid "Warning, could not read file %s"
+msgstr "Uyarı, %s dosyası okunamadı"
+
+#: usr/local/www/diag_backup.php:366
+msgid ""
+"The uploaded file does not appear to contain an encrypted pfsense "
+"configuration."
+msgstr ""
+"Görünüşe göre yüklenen dosya şifrelenmiş bir pfSense yapılandırma dosyası "
+"deÄŸil."
+
+#: usr/local/www/diag_backup.php:373
+msgid "Upgrading m0n0wall configuration to pfsense."
+msgstr "M0n0wall yapılandırması pfSense'ye yükseltiliyor."
+
+#: usr/local/www/diag_backup.php:381 usr/local/www/diag_backup.php:384
+msgid ""
+"You have selected to restore an area but we could not locate the correct xml "
+"tag."
+msgstr ""
+"Yapılandırmanın sadece belirli bir kısmını geri yüklemeyi seçtiniz ancak "
+"yüklenen yapılandırma dosyasında gerekli bölüm bulunamadı."
+
+#: usr/local/www/diag_backup.php:396
+msgid ""
+"The configuration area has been restored. You may need to reboot the "
+"firewall."
+msgstr ""
+"apılandırmanın seçilen kısmına geri dönüldü. Sistemi yeniden başlatmanız "
+"gerekebilir."
+
+#: usr/local/www/diag_backup.php:401
+#, php-format
+msgid ""
+"You have selected to restore the full configuration but we could not locate "
+"a %s tag."
+msgstr "Tüm yapılandırmayı geri yüklemeyi seçtiniz fakat %s takısı bulunamadı."
+
+#: usr/local/www/diag_backup.php:527
+msgid "The m0n0wall configuration has been restored and upgraded to pfSense."
+msgstr "m0n0wall yapılandırması pfSense'ye geri yüklendi ve güncellendi."
+
+#: usr/local/www/diag_backup.php:555 usr/local/www/diag_backup.php:579
+msgid "The configuration could not be restored."
+msgstr "Yapılandırmaya geri dönülemedi."
+
+#: usr/local/www/diag_backup.php:560
+msgid "The configuration could not be restored (file upload error)."
+msgstr "Yapılandırma geri alınamadı (dosya yükleme hatası)."
+
+#: usr/local/www/diag_backup.php:573
+msgid ""
+"XXX - this feature may hose your config (do NOT backrev configs!) - billm"
+msgstr ""
+"XXX - bu özellik yapılandımanızı bozabilir. (eski versiyon yapılandırması "
+"OLMASIN!) - billm"
+
+#: usr/local/www/diag_backup.php:582
+msgid "No version selected."
+msgstr "Sürüm seçimi yapılmadı."
+
+#: usr/local/www/diag_backup.php:593
+msgid "Backup/restore"
+msgstr "Yedekle/geri dön"
+
+#: usr/local/www/diag_backup.php:636
+#: usr/local/www/system_firmware_restorefullbackup.php:117
+msgid "The firewall configuration has been changed."
+msgstr "Güvenlik Duvarı yapılandırması değiştirildi."
+
+#: usr/local/www/diag_backup.php:636
+#: usr/local/www/system_firmware_restorefullbackup.php:117
+msgid "The firewall is now rebooting."
+msgstr "Güvenlik Duvarı yeniden başlatılıyor."
+
+#: usr/local/www/diag_backup.php:645 usr/local/www/diag_confbak.php:151
+msgid "Config History"
+msgstr "Yapılandırma Geçmişi"
+
+#: usr/local/www/diag_backup.php:646 usr/local/www/diag_confbak.php:152
+#: usr/local/www/fbegin.inc:208
+msgid "Backup/Restore"
+msgstr "Yedekle/Geri Dön"
+
+# Cümle sonunda " unutulmuş!
+#: usr/local/www/diag_backup.php:656
+msgid "Backup configuration"
+msgstr "Yapılandırmayı yedekle"
+
+#: usr/local/www/diag_backup.php:661
+msgid "Click this button to download the system configuration in XML format."
+msgstr ""
+"Sistem yapılandırmasını XML biçiminde indirmek için bu düğmeye tıklayın."
+
+#: usr/local/www/diag_backup.php:661
+msgid "Backup area:"
+msgstr "Yedekleme alanı:"
+
+#: usr/local/www/diag_backup.php:668
+msgid "Do not backup package information."
+msgstr "Paket bilgisini yedekleme."
+
+#: usr/local/www/diag_backup.php:678
+msgid "Encrypt this configuration file."
+msgstr "Bu yapılandırma dosyasını şifrele."
+
+#: usr/local/www/diag_backup.php:686
+msgid ""
+"Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config."
+"xml space!)"
+msgstr ""
+"RRD verisini yedekleme. (RRD verisi 4MB'dan fazla alana ihtiyaç duyar!)"
+
+#: usr/local/www/diag_backup.php:701
+msgid "confirm:"
+msgstr "onayla:"
+
+# İndir büyük harfle yazılmalı aksi halde XML yedeği alınamaz. A.Y.
+#: usr/local/www/diag_backup.php:708
+msgid "Download configuration"
+msgstr "Yapılandırmayı İndir"
+
+#: usr/local/www/diag_backup.php:720
+msgid "Open a"
+msgstr "Bir "
+
+#: usr/local/www/diag_backup.php:720
+msgid ""
+"configuration XML file and click the button below to restore the "
+"configuration."
+msgstr ""
+"yapılandırma yedeğini aşağıda seçip yükleyerek o yapılandırmaya "
+"dönebilirsiniz."
+
+#: usr/local/www/diag_backup.php:722
+msgid "Restore area:"
+msgstr "Geri yüklenecek alan:"
+
+#: usr/local/www/diag_backup.php:730
+msgid "Configuration file is encrypted."
+msgstr "Yapılandırma dosyası şifreli."
+
+#: usr/local/www/diag_backup.php:737
+msgid "Password :"
+msgstr "Parola :"
+
+#: usr/local/www/diag_backup.php:745
+msgid "confirm :"
+msgstr "onayla :"
+
+#: usr/local/www/diag_backup.php:753 usr/local/www/diag_ipsec.php:498
+#: usr/local/www/diag_ipsec_leases.php:125
+#: usr/local/www/diag_ipsec_sad.php:135 usr/local/www/diag_ipsec_spd.php:132
+#: usr/local/www/diag_logs_settings.php:469
+#: usr/local/www/diag_packet_capture.php:339 usr/local/www/diag_routes.php:207
+#: usr/local/www/firewall_aliases.php:291
+#: usr/local/www/firewall_nat_1to1.php:339
+#: usr/local/www/firewall_nat_out.php:637
+#: usr/local/www/firewall_schedule.php:241
+#: usr/local/www/firewall_virtual_ip.php:306
+#: usr/local/www/firewall_virtual_ip_edit.php:520
+#: usr/local/www/interfaces.php:2749 usr/local/www/interfaces_bridge.php:155
+#: usr/local/www/interfaces_bridge_edit.php:467
+#: usr/local/www/interfaces_bridge_edit.php:511
+#: usr/local/www/interfaces_bridge_edit.php:555
+#: usr/local/www/interfaces_gif.php:138 usr/local/www/interfaces_gre.php:139
+#: usr/local/www/interfaces_groups.php:150
+#: usr/local/www/interfaces_lagg.php:144
+#: usr/local/www/interfaces_ppps_edit.php:633
+#: usr/local/www/interfaces_qinq.php:156 usr/local/www/interfaces_vlan.php:141
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+#: usr/local/www/services_captiveportal.php:1087
+#: usr/local/www/services_captiveportal_filemanager.php:213
+#: usr/local/www/services_captiveportal_hostname.php:175
+#: usr/local/www/services_captiveportal_ip.php:172
+#: usr/local/www/services_captiveportal_mac.php:215
+#: usr/local/www/services_captiveportal_vouchers.php:642
+#: usr/local/www/services_dhcp.php:1007 usr/local/www/services_dhcp.php:1032
+#: usr/local/www/services_dhcp.php:1227 usr/local/www/services_dhcpv6.php:688
+#: usr/local/www/services_dhcpv6.php:840
+#: usr/local/www/services_dnsmasq.php:323
+#: usr/local/www/services_dyndns.php:189
+#: usr/local/www/services_dyndns_edit.php:317
+#: usr/local/www/services_dyndns_edit.php:434
+#: usr/local/www/services_igmpproxy.php:161
+#: usr/local/www/services_rfc2136_edit.php:224
+#: usr/local/www/services_unbound.php:394 usr/local/www/services_wol.php:211
+#: usr/local/www/status_rrd_graph_settings.php:247
+#: usr/local/www/system_advanced_network.php:268
+#: usr/local/www/system_advanced_network.php:279
+#: usr/local/www/system_advanced_network.php:290
+#: usr/local/www/system_gateway_groups.php:206
+#: usr/local/www/system_routes.php:372 usr/local/www/vpn_l2tp.php:456
+msgid "Note:"
+msgstr "Not:"
+
+#: usr/local/www/diag_backup.php:753
+msgid "The firewall will reboot after restoring the configuration."
+msgstr ""
+"Güvenlik duvarı yapılandırmayı sistem yükledikten sonra tekrar başlatılacak."
+
+#: usr/local/www/diag_backup.php:761
+msgid "Package Functions"
+msgstr "Paket Fonksiyonları"
+
+#: usr/local/www/diag_backup.php:767
+msgid ""
+"Click this button to reinstall all system packages. This may take a while."
+msgstr ""
+"Tüm sistem paketlerini yeniden kurmak için bu düğmeye tıklayınız. Bu işlem "
+"biraz zaman alabilir."
+
+#: usr/local/www/diag_backup.php:768
+msgid "Reinstall packages"
+msgstr "Paketleri tekrar kur"
+
+#: usr/local/www/diag_backup.php:773
+msgid ""
+"Click this button to clear the package lock if a package fails to reinstall "
+"properly after an upgrade."
+msgstr ""
+"Eğer yükseltme işleminden sonra paketin yeniden kurulumu başarılı olmazsa "
+"paket kilidini temizlemek için bu düğmeye tıklayın."
+
+#: usr/local/www/diag_confbak.php:55 usr/local/www/diag_confbak.php:185
+#: usr/local/www/diag_gmirror.php:74 usr/local/www/diag_gmirror.php:204
+msgid "Confirm"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:64
+#, php-format
+msgid "Successfully reverted to timestamp %1$s with description \"%2$s\"."
+msgstr ""
+"\"%2$s\" tanımlamasını taşıyan %1$s zaman damgasına başarıyla geri dönüldü."
+
+#: usr/local/www/diag_confbak.php:64 usr/local/www/diag_confbak.php:70
+#: usr/local/www/diag_confbak.php:123 usr/local/www/diag_confbak.php:184
+#: usr/local/www/diag_confbak.php:231 usr/local/www/diag_confbak.php:241
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_nat_edit.php:884
+#: usr/local/www/firewall_nat_out_edit.php:805
+#: usr/local/www/firewall_nat_out_edit.php:816
+#: usr/local/www/firewall_rules_edit.php:1721
+#: usr/local/www/firewall_rules_edit.php:1729
+msgid "n/j/y H:i:s"
+msgstr "n/j/y H:i:s"
+
+#: usr/local/www/diag_confbak.php:66
+msgid "Unable to revert to the selected configuration."
+msgstr "Seçilen yapılandırmaya geri dönülemedi."
+
+#: usr/local/www/diag_confbak.php:70
+#, php-format
+msgid "Deleted backup with timestamp %1$s and description \"%2$s\"."
+msgstr "\"%2$s\" tanımlamalı ve %1$s zaman damgalı yedek silindi."
+
+#: usr/local/www/diag_confbak.php:110
+msgid "Configuration History"
+msgstr "Yapılandırma Geçmişi"
+
+#: usr/local/www/diag_confbak.php:123
+msgid "Configuration diff from"
+msgstr "Yapılandırma farkı"
+
+#: usr/local/www/diag_confbak.php:123 usr/local/www/diag_dump_states.php:213
+#: usr/local/www/diag_dump_states_sources.php:182
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_dhcp.php:864 usr/local/www/services_dhcpv6.php:606
+#: usr/local/www/services_dhcpv6.php:613
+msgid "to"
+msgstr "ile"
+
+#: usr/local/www/diag_confbak.php:165 usr/local/www/diag_gmirror.php:186
+msgid "Confirm Action"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:171 usr/local/www/diag_gmirror.php:191
+msgid "Please confirm the selected action"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:173 usr/local/www/diag_gmirror.php:193
+#: usr/local/www/diag_logs_filter.php:174 usr/local/www/diag_logs_vpn.php:176
+#: usr/local/www/firewall_rules_edit.php:836
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:485
+#: usr/local/www/services_captiveportal_mac_edit.php:102
+#: usr/local/www/services_captiveportal_mac_edit.php:186
+#: usr/local/www/services_unbound_acls.php:215
+#: usr/local/www/services_unbound_acls.php:322
+msgid "Action"
+msgstr "Eylem"
+
+#: usr/local/www/diag_confbak.php:175
+msgid "Restore from Configuration Backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:179
+msgid "Remove Configuration Backup"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:183
+msgid "Target Configuration"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:184
+#, php-format
+msgid "Timestamp %1$s"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:192
+msgid "Backup Count"
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:197
+msgid ""
+"Enter the number of older configurations to keep in the local backup cache. "
+"By default this is 30 for a full install or 5 on NanoBSD."
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:199 usr/local/www/diag_logs_settings.php:464
+#: usr/local/www/diag_nanobsd.php:199 usr/local/www/diag_smart.php:244
+#: usr/local/www/edit.php:189 usr/local/www/firewall_aliases_edit.php:851
+#: usr/local/www/firewall_aliases_import.php:215
+#: usr/local/www/firewall_nat_1to1_edit.php:536
+#: usr/local/www/firewall_nat_edit.php:896
+#: usr/local/www/firewall_nat_npt_edit.php:278
+#: usr/local/www/firewall_nat_out.php:265
+#: usr/local/www/firewall_nat_out_edit.php:828
+#: usr/local/www/firewall_rules_edit.php:1261
+#: usr/local/www/firewall_rules_edit.php:1738
+#: usr/local/www/firewall_schedule_edit.php:1168
+#: usr/local/www/firewall_shaper.php:351
+#: usr/local/www/firewall_shaper_layer7.php:566
+#: usr/local/www/firewall_shaper_vinterface.php:319
+#: usr/local/www/firewall_virtual_ip_edit.php:509
+#: usr/local/www/interfaces.php:3379 usr/local/www/interfaces_assign.php:553
+#: usr/local/www/interfaces_bridge_edit.php:604
+#: usr/local/www/interfaces_gif_edit.php:233
+#: usr/local/www/interfaces_gre_edit.php:236
+#: usr/local/www/interfaces_groups_edit.php:333
+#: usr/local/www/interfaces_lagg_edit.php:235
+#: usr/local/www/interfaces_ppps_edit.php:795
+#: usr/local/www/interfaces_qinq_edit.php:397
+#: usr/local/www/interfaces_vlan_edit.php:203
+#: usr/local/www/interfaces_wireless_edit.php:201
+#: usr/local/www/load_balancer_monitor_edit.php:358
+#: usr/local/www/load_balancer_pool_edit.php:334
+#: usr/local/www/load_balancer_relay_action_edit.php:558
+#: usr/local/www/load_balancer_relay_protocol_edit.php:281
+#: usr/local/www/load_balancer_setting.php:162 usr/local/www/pkg_edit.php:435
+#: usr/local/www/pkg_mgr_settings.php:143
+#: usr/local/www/services_captiveportal.php:1081
+#: usr/local/www/services_captiveportal_hostname_edit.php:206
+#: usr/local/www/services_captiveportal_ip_edit.php:226
+#: usr/local/www/services_captiveportal_mac_edit.php:244
+#: usr/local/www/services_captiveportal_vouchers.php:636
+#: usr/local/www/services_captiveportal_vouchers_edit.php:208
+#: usr/local/www/services_dhcp.php:1222
+#: usr/local/www/services_dhcp_edit.php:545
+#: usr/local/www/services_dhcp_relay.php:192
+#: usr/local/www/services_dhcpv6.php:835
+#: usr/local/www/services_dhcpv6_edit.php:249
+#: usr/local/www/services_dhcpv6_relay.php:193
+#: usr/local/www/services_dnsmasq.php:318
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:164
+#: usr/local/www/services_dnsmasq_edit.php:305
+#: usr/local/www/services_dyndns_edit.php:424
+#: usr/local/www/services_igmpproxy.php:155
+#: usr/local/www/services_igmpproxy_edit.php:282
+#: usr/local/www/services_ntpd.php:411 usr/local/www/services_ntpd_gps.php:574
+#: usr/local/www/services_ntpd_pps.php:217
+#: usr/local/www/services_rfc2136_edit.php:214
+#: usr/local/www/services_router_advertisements.php:407
+#: usr/local/www/services_snmp.php:438 usr/local/www/services_unbound.php:382
+#: usr/local/www/services_unbound_acls.php:117
+#: usr/local/www/services_unbound_acls.php:310
+#: usr/local/www/services_unbound_domainoverride_edit.php:159
+#: usr/local/www/services_unbound_host_edit.php:310
+#: usr/local/www/services_wol_edit.php:161
+#: usr/local/www/status_lb_pool.php:218
+#: usr/local/www/status_rrd_graph_settings.php:236
+#: usr/local/www/system.php:521 usr/local/www/system_advanced_admin.php:611
+#: usr/local/www/system_advanced_firewall.php:559
+#: usr/local/www/system_advanced_misc.php:651
+#: usr/local/www/system_advanced_network.php:330
+#: usr/local/www/system_advanced_notifications.php:101
+#: usr/local/www/system_advanced_notifications.php:343
+#: usr/local/www/system_advanced_sysctl.php:114
+#: usr/local/www/system_advanced_sysctl.php:269
+#: usr/local/www/system_authservers.php:791
+#: usr/local/www/system_camanager.php:369
+#: usr/local/www/system_camanager.php:580
+#: usr/local/www/system_certmanager.php:197
+#: usr/local/www/system_certmanager.php:595
+#: usr/local/www/system_certmanager.php:1016
+#: usr/local/www/system_crlmanager.php:298
+#: usr/local/www/system_crlmanager.php:401
+#: usr/local/www/system_crlmanager.php:433
+#: usr/local/www/system_firmware_settings.php:274
+#: usr/local/www/system_gateway_groups_edit.php:347
+#: usr/local/www/system_gateways_edit.php:861
+#: usr/local/www/system_groupmanager.php:460
+#: usr/local/www/system_groupmanager_addprivs.php:226
+#: usr/local/www/system_routes_edit.php:332
+#: usr/local/www/system_usermanager.php:882
+#: usr/local/www/system_usermanager_addprivs.php:195
+#: usr/local/www/system_usermanager_passwordmg.php:133
+#: usr/local/www/system_usermanager_settings.php:163
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:124
+#: usr/local/www/vpn_ipsec.php:266 usr/local/www/vpn_ipsec_keys_edit.php:150
+#: usr/local/www/vpn_ipsec_mobile.php:659
+#: usr/local/www/vpn_ipsec_phase1.php:924
+#: usr/local/www/vpn_ipsec_phase2.php:833
+#: usr/local/www/vpn_ipsec_settings.php:297 usr/local/www/vpn_l2tp.php:450
+#: usr/local/www/vpn_l2tp_users_edit.php:182
+#: usr/local/www/vpn_openvpn_client.php:1100
+#: usr/local/www/vpn_openvpn_csc.php:732
+#: usr/local/www/vpn_openvpn_server.php:1816
+#: usr/local/www/vpn_pppoe_edit.php:604 usr/local/www/vpn_pptp.php:482
+#: usr/local/www/vpn_pptp_users_edit.php:173
+msgid "Save"
+msgstr "Kaydet"
+
+#: usr/local/www/diag_confbak.php:204
+msgid ""
+"NOTE: Be aware of how much space is consumed by backups before adjusting "
+"this value. Current space used by backups: "
+msgstr ""
+
+#: usr/local/www/diag_confbak.php:214
+msgid ""
+"To view the differences between an older configuration and a newer "
+"configuration, select the older configuration using the left column of radio "
+"options and select the newer configuration in the right column, then press "
+"the Diff button."
+msgstr ""
+
+# Buton değeri paketin işlevi için kullanılıyor, değiştirildiği için bu özellik şuanda kullanılamıyor.
+#: usr/local/www/diag_confbak.php:219 usr/local/www/diag_confbak.php:275
+msgid "Diff"
+msgstr "Diff"
+
+#: usr/local/www/diag_confbak.php:220
+#: usr/local/www/system_firmware_restorefullbackup.php:141
+msgid "Date"
+msgstr "Tarih"
+
+#: usr/local/www/diag_confbak.php:221 usr/local/www/pkg_mgr_installed.php:125
+#: usr/local/www/widgets/widgets/system_information.widget.php:122
+msgid "Version"
+msgstr "Sürüm"
+
+#: usr/local/www/diag_confbak.php:222 usr/local/www/diag_gmirror.php:288
+#: usr/local/www/diag_system_pftop.php:138
+#: usr/local/www/diag_system_pftop.php:157
+#: usr/local/www/services_captiveportal_filemanager.php:161
+#: usr/local/www/system_firmware_restorefullbackup.php:142
+msgid "Size"
+msgstr "Boyut"
+
+#: usr/local/www/diag_confbak.php:223
+msgid "Configuration Change"
+msgstr "Ayar DeÄŸiÅŸikliÄŸi"
+
+#: usr/local/www/diag_confbak.php:235
+msgid "Current"
+msgstr "Güncel"
+
+#: usr/local/www/diag_confbak.php:243 usr/local/www/diag_ipsec.php:143
+#: usr/local/www/diag_ipsec.php:151 usr/local/www/diag_ipsec.php:158
+#: usr/local/www/diag_ipsec.php:164 usr/local/www/diag_ipsec.php:173
+#: usr/local/www/diag_ipsec.php:188 usr/local/www/diag_ipsec.php:198
+#: usr/local/www/diag_ipsec.php:204 usr/local/www/diag_ipsec.php:302
+#: usr/local/www/diag_ipsec.php:321 usr/local/www/diag_ipsec.php:409
+#: usr/local/www/diag_ipsec.php:418 usr/local/www/diag_ipsec.php:427
+#: usr/local/www/diag_ipsec.php:436
+#: usr/local/www/widgets/widgets/gateways.widget.php:123
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#: usr/local/www/diag_confbak.php:263
+msgid "Revert to this configuration"
+msgstr "Bu yapılandırmaya geri dön"
+
+#: usr/local/www/diag_confbak.php:266
+msgid "Remove this backup"
+msgstr "Bu yedeÄŸi sil"
+
+#: usr/local/www/diag_confbak.php:269
+msgid "Download this backup"
+msgstr "Bu yedeÄŸi indir"
+
+#: usr/local/www/diag_confbak.php:281
+msgid "No backups found."
+msgstr "Yedek bulunamadı."
+
+#: usr/local/www/diag_defaults.php:53
+msgid "Factory defaults"
+msgstr "Fabrika ayarları"
+
+#: usr/local/www/diag_defaults.php:62
+msgid ""
+"The system has been reset to factory defaults and is now rebooting. This may "
+"take a few minutes, depending on your hardware."
+msgstr ""
+"Sistem fabrika ayarlarına geri döndürüldü ve tekrar başlatılacak. Bu işlem "
+"donanımınıza bağlı olarak birkaç dakika sürebilir."
+
+#: usr/local/www/diag_defaults.php:71
+msgid "If you click"
+msgstr "Eğer buna tıklarsanız"
+
+#: usr/local/www/diag_defaults.php:71
+msgid "the firewall will:"
+msgstr "güvenlik duvarı şunu yapacak:"
+
+#: usr/local/www/diag_defaults.php:73
+msgid "Reset to factory defaults"
+msgstr "Fabrika ayarlarına geri dön"
+
+#: usr/local/www/diag_defaults.php:74
+msgid "LAN IP address will be reset to 192.168.1.1"
+msgstr "LAN IP adresi 192.168.1.1 e sıfırlanacak"
+
+#: usr/local/www/diag_defaults.php:75
+msgid "System will be configured as a DHCP server on the default LAN interface"
+msgstr ""
+"Sistem öntanımlı LAN arabiriminde DHCP sunucu olarak çalışacak şekilde "
+"yapılandırılacaktır"
+
+#: usr/local/www/diag_defaults.php:76
+msgid "Reboot after changes are installed"
+msgstr "DeÄŸiÅŸiklikler kurulduktan sonra tekrar baÅŸlat"
+
+#: usr/local/www/diag_defaults.php:77
+msgid ""
+"WAN interface will be set to obtain an address automatically from a DHCP "
+"server"
+msgstr ""
+"WAN arabirimi bir DHCP sunucudan otomatik IP almak üzere yapılandırılacaktır"
+
+#: usr/local/www/diag_defaults.php:78
+msgid "webConfigurator admin username will be reset to 'admin'"
+msgstr "webArayüzü yönetici kullanıcı adı 'admin' olarak değiştirilecektir"
+
+#: usr/local/www/diag_defaults.php:79
+msgid "webConfigurator admin password will be reset to"
+msgstr "Yeni webArayüzü yönetici kullanıcı parolası"
+
+#: usr/local/www/diag_defaults.php:81
+msgid "Are you sure you want to proceed?"
+msgstr "Devam etmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/diag_dns.php:35 usr/local/www/diag_dns.php:277
+#: usr/local/www/fbegin.inc:210
+msgid "DNS Lookup"
+msgstr "DNS Sorgusu"
+
+#: usr/local/www/diag_dns.php:101
+msgid "Host must be a valid hostname or IP address."
+msgstr "Sunucu geçerli bir ad ya da IP adresine sahip olmalıdır."
+
+#: usr/local/www/diag_dns.php:110
+msgid "No response"
+msgstr "Cevap yok"
+
+#: usr/local/www/diag_dns.php:143
+msgid "No record found"
+msgstr "Hiç kayıt bulunamadı"
+
+#: usr/local/www/diag_dns.php:156 usr/local/www/diag_tables.php:137
+#: usr/local/www/interfaces_ppps_edit.php:673
+#: usr/local/www/load_balancer_virtual_server.php:134
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:178
+#: usr/local/www/system_advanced_notifications.php:225
+msgid "IP Address"
+msgstr "IP Adresi"
+
+#: usr/local/www/diag_dns.php:157 usr/local/www/system_authservers.php:807
+msgid "Host Name"
+msgstr "Host Adı"
+
+#: usr/local/www/diag_dns.php:160 usr/local/www/diag_dns.php:234
+#: usr/local/www/diag_logs_settings.php:421
+#: usr/local/www/diag_logs_settings.php:425
+#: usr/local/www/diag_logs_settings.php:429
+#: usr/local/www/services_rfc2136.php:81
+#: usr/local/www/services_rfc2136_edit.php:187
+#: usr/local/www/status_ntpd.php:179 usr/local/www/vpn_ipsec_mobile.php:547
+#: usr/local/www/vpn_ipsec_mobile.php:553
+#: usr/local/www/vpn_ipsec_mobile.php:559
+#: usr/local/www/vpn_ipsec_mobile.php:565
+#: usr/local/www/vpn_ipsec_mobile.php:589
+#: usr/local/www/vpn_ipsec_mobile.php:595
+#: usr/local/www/vpn_openvpn_client.php:445
+#: usr/local/www/vpn_openvpn_client.php:1117
+#: usr/local/www/vpn_openvpn_csc.php:316 usr/local/www/vpn_openvpn_csc.php:551
+#: usr/local/www/vpn_openvpn_csc.php:559 usr/local/www/vpn_openvpn_csc.php:567
+#: usr/local/www/vpn_openvpn_csc.php:575 usr/local/www/vpn_openvpn_csc.php:603
+#: usr/local/www/vpn_openvpn_csc.php:611 usr/local/www/vpn_openvpn_csc.php:699
+#: usr/local/www/vpn_openvpn_csc.php:707
+#: usr/local/www/vpn_openvpn_server.php:479
+#: usr/local/www/vpn_openvpn_server.php:743
+#: usr/local/www/vpn_openvpn_server.php:1554
+#: usr/local/www/vpn_openvpn_server.php:1562
+#: usr/local/www/vpn_openvpn_server.php:1570
+#: usr/local/www/vpn_openvpn_server.php:1578
+#: usr/local/www/vpn_openvpn_server.php:1626
+#: usr/local/www/vpn_openvpn_server.php:1634
+#: usr/local/www/vpn_openvpn_server.php:1722
+#: usr/local/www/vpn_openvpn_server.php:1730
+msgid "Server"
+msgstr "Sunucu"
+
+# 90%
+#: usr/local/www/diag_dns.php:160
+msgid "Query Time"
+msgstr "Sorgu Zamanı"
+
+#: usr/local/www/diag_dns.php:182
+msgid "Resolve DNS hostname or IP"
+msgstr "DNS adı yada IP çözümle"
+
+#: usr/local/www/diag_dns.php:185 usr/local/www/system_authservers.php:168
+#: usr/local/www/system_authservers.php:191
+msgid "Hostname or IP"
+msgstr "Host adı ya da IP"
+
+#: usr/local/www/diag_dns.php:229
+msgid "Resolution time per server"
+msgstr "Sunucu başına çözümleme süresi"
+
+#: usr/local/www/diag_dns.php:237
+msgid "Query time"
+msgstr "Sorgu zamanı"
+
+#: usr/local/www/diag_dns.php:261
+msgid "More Information:"
+msgstr "Ek Bilgi:"
+
+#: usr/local/www/diag_dns.php:263 usr/local/www/diag_ping.php:47
+#: usr/local/www/diag_ping.php:97 usr/local/www/diag_ping.php:144
+#: usr/local/www/fbegin.inc:222
+msgid "Ping"
+msgstr "Ping"
+
+#: usr/local/www/diag_dns.php:266
+msgid ""
+"NOTE: The following links are to external services, so their reliability "
+"cannot be guaranteed."
+msgstr ""
+"NOT: Belirtilen linkler dış servislere aittir, dolayısıyla tutarlılıkları "
+"garanti edilememektedir."
+
+#: usr/local/www/diag_dns.php:267
+msgid "IP WHOIS @ DNS Stuff"
+msgstr "DNS Stuff sunucusundaki IP WHOIS bilgisi"
+
+#: usr/local/www/diag_dns.php:268
+msgid "IP Info @ DNS Stuff"
+msgstr "DNS Stuff sunucusundaki IP bilgisi"
+
+#: usr/local/www/diag_dump_states.php:52
+#: usr/local/www/diag_dump_states_sources.php:52
+#: usr/local/www/status_openvpn.php:63
+#: usr/local/www/widgets/widgets/openvpn.widget.php:20
+msgid "invalid input"
+msgstr "geçersiz girdi"
+
+#: usr/local/www/diag_dump_states.php:72
+msgid "Show States"
+msgstr "Durumları Göster"
+
+#: usr/local/www/diag_dump_states.php:108
+#: usr/local/www/diag_dump_states_sources.php:96
+#: usr/local/www/status_openvpn.php:134
+#: usr/local/www/widgets/widgets/openvpn.widget.php:87
+msgid "An error occurred."
+msgstr "Bir hata oluÅŸtu."
+
+#: usr/local/www/diag_dump_states.php:124
+#: usr/local/www/diag_dump_states_sources.php:112
+#: usr/local/www/diag_resetstate.php:78
+#: usr/local/www/diag_states_summary.php:153
+#: usr/local/www/diag_states_summary.php:155 usr/local/www/fbegin.inc:230
+msgid "States"
+msgstr "Durumlar"
+
+#: usr/local/www/diag_dump_states.php:126
+#: usr/local/www/diag_dump_states_sources.php:113
+#: usr/local/www/diag_resetstate.php:80
+msgid "Source Tracking"
+msgstr "Kaynak Takibi"
+
+#: usr/local/www/diag_dump_states.php:127
+#: usr/local/www/diag_dump_states_sources.php:114
+#: usr/local/www/diag_resetstate.php:81
+msgid "Reset States"
+msgstr "Durumları Sıfırla"
+
+# 76%
+#: usr/local/www/diag_dump_states.php:149
+msgid "Current total state count"
+msgstr "Güncel toplam durum sayımı"
+
+#: usr/local/www/diag_dump_states.php:152
+#: usr/local/www/diag_dump_states_sources.php:133
+msgid "Filter expression:"
+msgstr "Filtreleme ifadesi:"
+
+#: usr/local/www/diag_dump_states.php:154
+#: usr/local/www/diag_dump_states_sources.php:135
+#: usr/local/www/diag_logs.php:127 usr/local/www/diag_logs_filter.php:219
+#: usr/local/www/diag_logs_filter.php:282
+#: usr/local/www/diag_logs_gateways.php:129
+#: usr/local/www/diag_logs_resolver.php:129
+msgid "Filter"
+msgstr "Filtre"
+
+#: usr/local/www/diag_dump_states.php:156
+msgid "Kill"
+msgstr "Sonlandır"
+
+#: usr/local/www/diag_dump_states.php:169
+msgid "Int"
+msgstr ""
+
+#: usr/local/www/diag_dump_states.php:170
+#: usr/local/www/diag_logs_filter.php:329
+#: usr/local/www/diag_logs_filter_dynamic.php:140
+#: usr/local/www/diag_states_summary.php:154
+#: usr/local/www/firewall_nat.php:205 usr/local/www/firewall_rules.php:339
+msgid "Proto"
+msgstr "Protokol"
+
+#: usr/local/www/diag_dump_states.php:171
+msgid "Source -> Router -> Destination"
+msgstr "Kaynak -> Router -> Hedef"
+
+#: usr/local/www/diag_dump_states.php:172
+#: usr/local/www/diag_system_pftop.php:140
+#: usr/local/www/status_dhcpv6_leases.php:507
+msgid "State"
+msgstr "Durum"
+
+#: usr/local/www/diag_dump_states.php:213
+msgid "Remove all state entries from"
+msgstr "Tüm durum girdilerini sil"
+
+#: usr/local/www/diag_dump_states.php:224
+msgid "No states were found."
+msgstr "Herhangi bir durum bulunamadı."
+
+#: usr/local/www/diag_dump_states.php:237
+msgid "States matching current filter"
+msgstr "Åžimdiki filitreye uyuÅŸan durumlar"
+
+#: usr/local/www/diag_dump_states_sources.php:66
+msgid "Show Source Tracking"
+msgstr "Kaynak Takibini Göster"
+
+#: usr/local/www/diag_dump_states_sources.php:147
+msgid "Source -> Destination"
+msgstr "Kaynak -> Hedef"
+
+#: usr/local/www/diag_dump_states_sources.php:148
+msgid "# States"
+msgstr "# Durum"
+
+#: usr/local/www/diag_dump_states_sources.php:149
+msgid "# Connections"
+msgstr "# Bağlantılar"
+
+#: usr/local/www/diag_dump_states_sources.php:150
+#: usr/local/www/diag_system_pftop.php:156
+#: usr/local/www/status_interfaces.php:377
+msgid "Rate"
+msgstr "Hız"
+
+#: usr/local/www/diag_dump_states_sources.php:182
+msgid "Remove all source tracking entries from"
+msgstr "Tüm kaynak takibi girdilerini sil"
+
+#: usr/local/www/diag_dump_states_sources.php:192
+msgid "No source tracking entries were found."
+msgstr "Kaynak takibi girdisi bulunamadı."
+
+#: usr/local/www/diag_gmirror.php:46 usr/local/www/fbegin.inc:215
+msgid "GEOM Mirrors"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:58
+msgid "Forget all formerly connected consumers"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:59 usr/local/www/diag_gmirror.php:301
+msgid "Remove metadata from disk"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:60
+msgid "Insert consumer into mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:61
+msgid "Remove consumer from mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:62
+msgid "Reactivate consumer on mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:63
+msgid "Deactivate consumer from mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:64
+msgid "Force rebuild of mirror consumer"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:81
+msgid "You must supply a valid mirror name."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:84
+msgid "You must supply a valid consumer name"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:90
+msgid ""
+"Consumer is already in use and cannot be inserted. Remove consumer from "
+"existing mirror first."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:92
+msgid ""
+"Consumer has metadata from an existing mirror. Clear metadata before "
+"inserting consumer."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:95
+msgid ""
+"Mirror is not in a COMPLETE state, cannot insert consumer. Forget "
+"disconnected disks or wait for rebuild to finish."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:99
+msgid "Consumer is in use and cannot be cleared. Deactivate disk first."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:101
+msgid "Consumer has no metadata to clear."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:105
+msgid "Consumer is already present on specified mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:107
+msgid "Consumer has no metadata and cannot be reactivated."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:114
+msgid "Consumer must be present on the specified mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:166
+msgid ""
+"There was an error performing the chosen mirror operation. Check the System "
+"Log for details."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:176 usr/local/www/diag_nanobsd.php:137
+#: usr/local/www/interfaces.php:3490 usr/local/www/interfaces.php:3499
+#: usr/local/www/interfaces_groups_edit.php:325
+#: usr/local/www/load_balancer_virtual_server_edit.php:210
+#: usr/local/www/load_balancer_virtual_server_edit.php:229
+#: usr/local/www/system_advanced_admin.php:322
+#: usr/local/www/system_advanced_firewall.php:285
+#: usr/local/www/system_advanced_misc.php:302
+#: usr/local/www/system_advanced_network.php:203
+#: usr/local/www/system_advanced_sysctl.php:173
+#: usr/local/www/system_firmware_settings.php:175
+#: usr/local/www/system_routes_edit.php:393
+msgid "NOTE:"
+msgstr "NOT:"
+
+#: usr/local/www/diag_gmirror.php:178
+msgid ""
+"The options on this page are intended for use by advanced users only. This "
+"page is for managing existing mirrors, not creating new mirrors."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:196
+msgid "Mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:200
+msgid "Consumer"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:209
+msgid "GEOM Mirror information"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:213
+msgid "Mirror Status"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:222
+msgid "Component"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:234
+msgid "Forget Disconnected Disks"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:242 usr/local/www/diag_gmirror.php:257
+msgid "Rebuild"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:243 usr/local/www/diag_gmirror.php:258
+msgid "Deactivate"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:244 usr/local/www/diag_gmirror.php:259
+#: usr/local/www/load_balancer_pool_edit.php:303
+#: usr/local/www/load_balancer_pool_edit.php:323
+#: usr/local/www/load_balancer_relay_protocol_edit.php:254
+msgid "Remove"
+msgstr "Kaldır"
+
+#: usr/local/www/diag_gmirror.php:267
+msgid "No Mirrors Found"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:271
+msgid ""
+"Some disk operations may only be performed when there are multiple consumers "
+"present in a mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:276
+msgid "Consumer information"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:280
+msgid "Available Consumers"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:289
+msgid "Add to Mirror"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:300
+msgid "Reactivate on:"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:316
+msgid "No unused consumers found"
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:320
+msgid ""
+"Consumers may only be added to a mirror if they are larger than the size of "
+"the mirror."
+msgstr ""
+
+#: usr/local/www/diag_gmirror.php:327
+msgid ""
+"To repair a failed mirror, first perform a 'Forget' command on the mirror, "
+"followed by an 'insert' action on the new consumer."
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:49 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_sad.php:50 usr/local/www/diag_ipsec_spd.php:50
+#: usr/local/www/diag_logs.php:82 usr/local/www/diag_logs_auth.php:73
+#: usr/local/www/diag_logs_dhcp.php:76 usr/local/www/diag_logs_filter.php:139
+#: usr/local/www/diag_logs_filter_dynamic.php:104
+#: usr/local/www/diag_logs_filter_summary.php:193
+#: usr/local/www/diag_logs_gateways.php:84
+#: usr/local/www/diag_logs_ipsec.php:77 usr/local/www/diag_logs_ntpd.php:71
+#: usr/local/www/diag_logs_openvpn.php:75 usr/local/www/diag_logs_ppp.php:73
+#: usr/local/www/diag_logs_relayd.php:72
+#: usr/local/www/diag_logs_resolver.php:84
+#: usr/local/www/diag_logs_routing.php:71
+#: usr/local/www/diag_logs_settings.php:271
+#: usr/local/www/diag_logs_vpn.php:131 usr/local/www/diag_logs_wireless.php:73
+#: usr/local/www/fbegin.inc:164 usr/local/www/fbegin.inc:181
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_mobile.php:241
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+#: usr/local/www/vpn_ipsec_settings.php:168
+msgid "IPsec"
+msgstr "IPsec"
+
+#: usr/local/www/diag_ipsec.php:92 usr/local/www/diag_ipsec_leases.php:61
+#: usr/local/www/diag_ipsec_sad.php:75 usr/local/www/diag_ipsec_spd.php:64
+msgid "Overview"
+msgstr "Görünüm"
+
+#: usr/local/www/diag_ipsec.php:93 usr/local/www/diag_ipsec_leases.php:46
+#: usr/local/www/diag_ipsec_leases.php:62 usr/local/www/diag_ipsec_sad.php:76
+#: usr/local/www/diag_ipsec_spd.php:65
+msgid "Leases"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:94 usr/local/www/diag_ipsec_leases.php:63
+#: usr/local/www/diag_ipsec_sad.php:50 usr/local/www/diag_ipsec_sad.php:77
+#: usr/local/www/diag_ipsec_spd.php:66
+msgid "SAD"
+msgstr "SAD"
+
+#: usr/local/www/diag_ipsec.php:95 usr/local/www/diag_ipsec_leases.php:64
+#: usr/local/www/diag_ipsec_sad.php:78 usr/local/www/diag_ipsec_spd.php:50
+#: usr/local/www/diag_ipsec_spd.php:67
+msgid "SPD"
+msgstr "SPD"
+
+#: usr/local/www/diag_ipsec.php:96 usr/local/www/diag_ipsec_leases.php:65
+#: usr/local/www/diag_ipsec_sad.php:79 usr/local/www/diag_ipsec_spd.php:68
+msgid "Logs"
+msgstr "Kayıtlar"
+
+#: usr/local/www/diag_ipsec.php:108
+msgid "Local ID"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:109 usr/local/www/interfaces_ppps_edit.php:665
+#: usr/local/www/vpn_pppoe.php:105
+msgid "Local IP"
+msgstr "Yerel IP"
+
+#: usr/local/www/diag_ipsec.php:110
+msgid "Remote ID"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:111
+msgid "Remote IP"
+msgstr "Uzak IP"
+
+#: usr/local/www/diag_ipsec.php:112
+msgid "Role"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:113
+msgid "Reauth"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:114 usr/local/www/diag_ipsec.php:284
+msgid "Algo"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:147
+msgid "Any identifier"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:162 usr/local/www/diag_ipsec.php:202
+msgid "Port: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:246 usr/local/www/diag_ipsec.php:472
+msgid "Connect VPN"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:254
+msgid "Disconnect VPN"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:257
+msgid "Disconnect VPN Connection"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:280
+msgid "Local subnets"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:281
+msgid "Local SPI(s)"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:282
+msgid "Remote subnets"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:283
+msgid "Times"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:285
+msgid "Stats"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:308
+msgid "Local: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:310
+msgid "Remote: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:326
+msgid "Rekey: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:327
+msgid "Life: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:328
+msgid "Install: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:350
+msgid "IPComp: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:355
+msgid "Bytes-In: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:357
+msgid "Packets-In: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:359
+msgid "Bytes-Out: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:361
+msgid "Packets-Out: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:367
+msgid "Disconnect Child SA"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:452 usr/local/www/diag_ipsec.php:453
+msgid "Awaiting connections"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:465 usr/local/www/diag_ipsec.php:466
+msgid "Disconnected"
+msgstr ""
+
+#: usr/local/www/diag_ipsec.php:500
+msgid "You can configure IPsec"
+msgstr "IPsec'i yapılandırabilirsiniz"
+
+#: usr/local/www/diag_ipsec_leases.php:79
+msgid "Pool: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:80
+msgid "usage: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:81
+msgid "online: "
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:87 usr/local/www/firewall_rules.php:335
+#: usr/local/www/load_balancer_relay_action_edit.php:511
+msgid "ID"
+msgstr "Kimlik"
+
+#: usr/local/www/diag_ipsec_leases.php:88 usr/local/www/diag_ping.php:60
+#: usr/local/www/diag_ping.php:100 usr/local/www/diag_testport.php:60
+#: usr/local/www/diag_testport.php:117 usr/local/www/diag_traceroute.php:64
+#: usr/local/www/diag_traceroute.php:100
+#: usr/local/www/load_balancer_monitor_edit.php:280
+#: usr/local/www/load_balancer_monitor_edit.php:313
+#: usr/local/www/services_dnsmasq.php:352
+#: usr/local/www/services_dnsmasq_edit.php:215
+#: usr/local/www/services_dnsmasq_edit.php:256
+#: usr/local/www/services_rfc2136_edit.php:175
+#: usr/local/www/services_unbound.php:420
+#: usr/local/www/services_unbound_host_edit.php:216
+#: usr/local/www/services_unbound_host_edit.php:259
+msgid "Host"
+msgstr "Host"
+
+#: usr/local/www/diag_ipsec_leases.php:104
+msgid "No leases from this pool yet."
+msgstr ""
+
+#: usr/local/www/diag_ipsec_leases.php:114
+msgid "No IPsec pools."
+msgstr ""
+
+# yapılandırabilirsiniz kelimesi web arayüz de iki defa geldiği için silindi. (technical)
+#: usr/local/www/diag_ipsec_leases.php:126
+#: usr/local/www/diag_ipsec_sad.php:136 usr/local/www/diag_ipsec_spd.php:133
+msgid "You can configure your IPsec"
+msgstr "IPsec'i "
+
+#: usr/local/www/diag_ipsec_leases.php:126
+#: usr/local/www/diag_ipsec_sad.php:136 usr/local/www/diag_ipsec_spd.php:133
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "here."
+msgstr "yapılandırabilirsiniz."
+
+#: usr/local/www/diag_ipsec_sad.php:90 usr/local/www/diag_ipsec_spd.php:79
+#: usr/local/www/diag_logs_filter.php:327
+#: usr/local/www/diag_logs_filter_dynamic.php:138
+#: usr/local/www/firewall_nat_edit.php:548
+#: usr/local/www/firewall_nat_edit.php:554
+#: usr/local/www/firewall_nat_out.php:306
+#: usr/local/www/firewall_nat_out.php:543
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:533
+#: usr/local/www/firewall_rules.php:340
+#: usr/local/www/firewall_rules_edit.php:1034
+#: usr/local/www/vpn_ipsec_mobile.php:385
+#: usr/local/www/vpn_ipsec_mobile.php:403
+#: usr/local/www/widgets/widgets/log.widget.php:181
+msgid "Source"
+msgstr "Kaynak"
+
+#: usr/local/www/diag_ipsec_sad.php:91 usr/local/www/diag_ipsec_spd.php:80
+#: usr/local/www/diag_logs_filter.php:328
+#: usr/local/www/diag_logs_filter_dynamic.php:139
+#: usr/local/www/firewall_nat_1to1_edit.php:422
+#: usr/local/www/firewall_nat_edit.php:643
+#: usr/local/www/firewall_nat_out.php:308
+#: usr/local/www/firewall_nat_out.php:545
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:578
+#: usr/local/www/firewall_rules.php:342
+#: usr/local/www/firewall_rules_edit.php:1137
+#: usr/local/www/widgets/widgets/log.widget.php:182
+msgid "Destination"
+msgstr "Hedef"
+
+#: usr/local/www/diag_ipsec_sad.php:92 usr/local/www/diag_ipsec_spd.php:82
+#: usr/local/www/diag_logs_filter.php:193
+#: usr/local/www/diag_packet_capture.php:277
+#: usr/local/www/firewall_nat_edit.php:197
+#: usr/local/www/firewall_nat_edit.php:200
+#: usr/local/www/firewall_nat_edit.php:537
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_nat_out_edit.php:513
+#: usr/local/www/firewall_rules_edit.php:988
+#: usr/local/www/firewall_shaper_layer7.php:467
+#: usr/local/www/interfaces_bridge_edit.php:310
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:425
+#: usr/local/www/load_balancer_virtual_server.php:133
+#: usr/local/www/services_rfc2136_edit.php:193
+#: usr/local/www/status_upnp.php:88
+#: usr/local/www/system_advanced_admin.php:333
+#: usr/local/www/vpn_ipsec_phase2.php:710
+#: usr/local/www/vpn_openvpn_client.php:500
+#: usr/local/www/vpn_openvpn_client.php:1116
+#: usr/local/www/vpn_openvpn_server.php:815
+msgid "Protocol"
+msgstr "Protokol"
+
+#: usr/local/www/diag_ipsec_sad.php:93
+msgid "SPI"
+msgstr "SPI"
+
+#: usr/local/www/diag_ipsec_sad.php:94
+msgid "Enc. alg."
+msgstr "Şifreleme algoritması."
+
+#: usr/local/www/diag_ipsec_sad.php:95
+msgid "Auth. alg."
+msgstr "Kimlik doğrulama algoritması."
+
+#: usr/local/www/diag_ipsec_sad.php:96
+msgid "Data"
+msgstr "Veri"
+
+#: usr/local/www/diag_ipsec_sad.php:115
+msgid "Do you really want to delete this security association?"
+msgstr "Bu güvenlik ilişkilendirmesini silmeyi gerçekten istiyor musunuz?"
+
+#: usr/local/www/diag_ipsec_sad.php:124
+msgid "No IPsec security associations."
+msgstr "IPsec güvenlik ilişkilendirmesi yok."
+
+#: usr/local/www/diag_ipsec_spd.php:81
+#: usr/local/www/firewall_rules_edit.php:954
+#: usr/local/www/load_balancer_relay_action_edit.php:121
+#: usr/local/www/load_balancer_relay_action_edit.php:444
+#: usr/local/www/services_captiveportal_hostname_edit.php:163
+msgid "Direction"
+msgstr "Yön"
+
+#: usr/local/www/diag_ipsec_spd.php:83
+msgid "Tunnel endpoints"
+msgstr "Tünel uçları"
+
+#: usr/local/www/diag_ipsec_spd.php:109
+msgid "incoming (as seen by firewall)"
+msgstr "gelen (güvenlik duvarı tarafından görüldüğü şekliyle)"
+
+#: usr/local/www/diag_ipsec_spd.php:116
+msgid "outgoing (as seen by firewall)"
+msgstr "giden (güvenlik duvarı tarafından görünen şekliyle)"
+
+#: usr/local/www/diag_ipsec_spd.php:121
+msgid "No IPsec security policies."
+msgstr "IPsec güvenlik ilkesi bulunamamıştır."
+
+#: usr/local/www/diag_limiter_info.php:106
+msgid "Gathering Limiter information, please wait..."
+msgstr "Limitleyici bilgisi alınıyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_logs.php:66 usr/local/www/diag_logs_auth.php:57
+#: usr/local/www/diag_logs_dhcp.php:60 usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+#: usr/local/www/diag_logs_filter_summary.php:35
+#: usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_ipsec.php:61 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_openvpn.php:46 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_relayd.php:56
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_settings.php:187 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_wireless.php:57
+msgid "System logs"
+msgstr "Sistem kayıtları"
+
+# 75%
+#: usr/local/www/diag_logs.php:66 usr/local/www/diag_logs.php:96
+#: usr/local/www/diag_logs_gateways.php:98
+#: usr/local/www/diag_logs_resolver.php:98
+#: usr/local/www/diag_logs_routing.php:84
+#: usr/local/www/diag_logs_wireless.php:86
+msgid "General"
+msgstr "Genel"
+
+# Kısaltma kullanılmıştır çünki sayfa içindeki menülere sığmıyordu (technical)
+#: usr/local/www/diag_logs.php:79 usr/local/www/diag_logs_auth.php:70
+#: usr/local/www/diag_logs_dhcp.php:73 usr/local/www/diag_logs_filter.php:123
+#: usr/local/www/diag_logs_filter.php:136
+#: usr/local/www/diag_logs_filter_dynamic.php:101
+#: usr/local/www/diag_logs_filter_summary.php:190
+#: usr/local/www/diag_logs_gateways.php:81
+#: usr/local/www/diag_logs_ipsec.php:74 usr/local/www/diag_logs_ntpd.php:68
+#: usr/local/www/diag_logs_openvpn.php:72 usr/local/www/diag_logs_ppp.php:70
+#: usr/local/www/diag_logs_relayd.php:69
+#: usr/local/www/diag_logs_resolver.php:81
+#: usr/local/www/diag_logs_routing.php:68
+#: usr/local/www/diag_logs_settings.php:268
+#: usr/local/www/diag_logs_vpn.php:128 usr/local/www/diag_logs_wireless.php:70
+#: usr/local/www/fbegin.inc:300 usr/local/www/firewall_aliases.php:157
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_aliases_import.php:50
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:81
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_rules.php:50
+#: usr/local/www/firewall_rules_edit.php:805
+#: usr/local/www/firewall_schedule.php:51
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/firewall_shaper.php:55
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_wizards.php:74
+#: usr/local/www/firewall_virtual_ip.php:203
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/services_igmpproxy_edit.php:46
+msgid "Firewall"
+msgstr "Güvenlik Duvarı"
+
+#: usr/local/www/diag_logs.php:80 usr/local/www/diag_logs_auth.php:71
+#: usr/local/www/diag_logs_dhcp.php:60 usr/local/www/diag_logs_dhcp.php:74
+#: usr/local/www/diag_logs_filter.php:137
+#: usr/local/www/diag_logs_filter_dynamic.php:102
+#: usr/local/www/diag_logs_filter_summary.php:191
+#: usr/local/www/diag_logs_gateways.php:82
+#: usr/local/www/diag_logs_ipsec.php:75 usr/local/www/diag_logs_ntpd.php:69
+#: usr/local/www/diag_logs_openvpn.php:73 usr/local/www/diag_logs_ppp.php:71
+#: usr/local/www/diag_logs_relayd.php:70
+#: usr/local/www/diag_logs_resolver.php:82
+#: usr/local/www/diag_logs_routing.php:69
+#: usr/local/www/diag_logs_settings.php:269
+#: usr/local/www/diag_logs_vpn.php:129 usr/local/www/diag_logs_wireless.php:71
+#: usr/local/www/interfaces.php:1411 usr/local/www/services_dhcp_edit.php:335
+msgid "DHCP"
+msgstr "DHCP"
+
+#: usr/local/www/diag_logs.php:81 usr/local/www/diag_logs_auth.php:57
+#: usr/local/www/diag_logs_auth.php:72 usr/local/www/diag_logs_dhcp.php:75
+#: usr/local/www/diag_logs_filter.php:138
+#: usr/local/www/diag_logs_filter_dynamic.php:103
+#: usr/local/www/diag_logs_filter_summary.php:192
+#: usr/local/www/diag_logs_gateways.php:83
+#: usr/local/www/diag_logs_ipsec.php:76 usr/local/www/diag_logs_ntpd.php:70
+#: usr/local/www/diag_logs_openvpn.php:74 usr/local/www/diag_logs_ppp.php:72
+#: usr/local/www/diag_logs_relayd.php:71
+#: usr/local/www/diag_logs_resolver.php:83
+#: usr/local/www/diag_logs_routing.php:70
+#: usr/local/www/diag_logs_settings.php:270
+#: usr/local/www/diag_logs_vpn.php:130 usr/local/www/diag_logs_wireless.php:72
+msgid "Portal Auth"
+msgstr "Hizmet Portalı"
+
+#: usr/local/www/diag_logs.php:83 usr/local/www/diag_logs_auth.php:74
+#: usr/local/www/diag_logs_dhcp.php:77 usr/local/www/diag_logs_filter.php:140
+#: usr/local/www/diag_logs_filter_dynamic.php:105
+#: usr/local/www/diag_logs_filter_summary.php:194
+#: usr/local/www/diag_logs_gateways.php:85
+#: usr/local/www/diag_logs_ipsec.php:78 usr/local/www/diag_logs_ntpd.php:72
+#: usr/local/www/diag_logs_openvpn.php:76 usr/local/www/diag_logs_ppp.php:58
+#: usr/local/www/diag_logs_ppp.php:74 usr/local/www/diag_logs_relayd.php:73
+#: usr/local/www/diag_logs_resolver.php:85
+#: usr/local/www/diag_logs_routing.php:72
+#: usr/local/www/diag_logs_settings.php:272
+#: usr/local/www/diag_logs_vpn.php:132 usr/local/www/diag_logs_wireless.php:74
+#: usr/local/www/interfaces.php:1411 usr/local/www/status_interfaces.php:165
+msgid "PPP"
+msgstr "PPP"
+
+#: usr/local/www/diag_logs.php:84 usr/local/www/diag_logs_auth.php:75
+#: usr/local/www/diag_logs_dhcp.php:78 usr/local/www/diag_logs_filter.php:141
+#: usr/local/www/diag_logs_filter_dynamic.php:106
+#: usr/local/www/diag_logs_filter_summary.php:195
+#: usr/local/www/diag_logs_gateways.php:86
+#: usr/local/www/diag_logs_ipsec.php:79 usr/local/www/diag_logs_ntpd.php:73
+#: usr/local/www/diag_logs_openvpn.php:77 usr/local/www/diag_logs_ppp.php:75
+#: usr/local/www/diag_logs_relayd.php:74
+#: usr/local/www/diag_logs_resolver.php:86
+#: usr/local/www/diag_logs_routing.php:73
+#: usr/local/www/diag_logs_settings.php:273 usr/local/www/diag_logs_vpn.php:45
+#: usr/local/www/diag_logs_vpn.php:133 usr/local/www/diag_logs_wireless.php:75
+#: usr/local/www/fbegin.inc:316
+#: usr/local/www/status_rrd_graph_settings.php:158
+#: usr/local/www/vpn_ipsec.php:216 usr/local/www/vpn_ipsec_mobile.php:241
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+#: usr/local/www/vpn_ipsec_settings.php:168 usr/local/www/vpn_l2tp.php:39
+#: usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users_edit.php:39 usr/local/www/vpn_pppoe.php:88
+#: usr/local/www/vpn_pptp.php:197 usr/local/www/vpn_pptp_users.php:72
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "VPN"
+msgstr "VPN"
+
+#: usr/local/www/diag_logs.php:85 usr/local/www/diag_logs_auth.php:76
+#: usr/local/www/diag_logs_dhcp.php:79 usr/local/www/diag_logs_filter.php:142
+#: usr/local/www/diag_logs_filter_dynamic.php:107
+#: usr/local/www/diag_logs_filter_summary.php:196
+#: usr/local/www/diag_logs_gateways.php:87
+#: usr/local/www/diag_logs_ipsec.php:80 usr/local/www/diag_logs_ntpd.php:74
+#: usr/local/www/diag_logs_openvpn.php:78 usr/local/www/diag_logs_ppp.php:76
+#: usr/local/www/diag_logs_relayd.php:56 usr/local/www/diag_logs_relayd.php:75
+#: usr/local/www/diag_logs_resolver.php:87
+#: usr/local/www/diag_logs_routing.php:74
+#: usr/local/www/diag_logs_settings.php:274
+#: usr/local/www/diag_logs_vpn.php:134 usr/local/www/diag_logs_wireless.php:76
+#: usr/local/www/fbegin.inc:149 usr/local/www/fbegin.inc:182
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/status_lb_pool.php:63 usr/local/www/status_lb_vs.php:57
+msgid "Load Balancer"
+msgstr "Yük Dengeleyici"
+
+#: usr/local/www/diag_logs.php:87 usr/local/www/diag_logs_auth.php:78
+#: usr/local/www/diag_logs_dhcp.php:81 usr/local/www/diag_logs_filter.php:144
+#: usr/local/www/diag_logs_filter_dynamic.php:109
+#: usr/local/www/diag_logs_filter_summary.php:198
+#: usr/local/www/diag_logs_gateways.php:89
+#: usr/local/www/diag_logs_ipsec.php:82 usr/local/www/diag_logs_ntpd.php:55
+#: usr/local/www/diag_logs_ntpd.php:76 usr/local/www/diag_logs_openvpn.php:80
+#: usr/local/www/diag_logs_ppp.php:78 usr/local/www/diag_logs_relayd.php:77
+#: usr/local/www/diag_logs_resolver.php:89
+#: usr/local/www/diag_logs_routing.php:76
+#: usr/local/www/diag_logs_settings.php:276
+#: usr/local/www/diag_logs_vpn.php:136 usr/local/www/diag_logs_wireless.php:78
+#: usr/local/www/fbegin.inc:150 usr/local/www/fbegin.inc:183
+#: usr/local/www/services_ntpd.php:180 usr/local/www/services_ntpd.php:237
+#: usr/local/www/services_ntpd_gps.php:366
+#: usr/local/www/services_ntpd_pps.php:117 usr/local/www/status_ntpd.php:164
+#: usr/local/www/status_rrd_graph_settings.php:62
+msgid "NTP"
+msgstr "NTP"
+
+#: usr/local/www/diag_logs.php:88 usr/local/www/diag_logs_auth.php:79
+#: usr/local/www/diag_logs_dhcp.php:82 usr/local/www/diag_logs_filter.php:145
+#: usr/local/www/diag_logs_filter_dynamic.php:110
+#: usr/local/www/diag_logs_filter_summary.php:199
+#: usr/local/www/diag_logs_gateways.php:90
+#: usr/local/www/diag_logs_ipsec.php:83 usr/local/www/diag_logs_ntpd.php:77
+#: usr/local/www/diag_logs_openvpn.php:81 usr/local/www/diag_logs_ppp.php:79
+#: usr/local/www/diag_logs_relayd.php:78
+#: usr/local/www/diag_logs_resolver.php:90
+#: usr/local/www/diag_logs_routing.php:77
+#: usr/local/www/diag_logs_settings.php:187
+#: usr/local/www/diag_logs_settings.php:277
+#: usr/local/www/diag_logs_vpn.php:137 usr/local/www/diag_logs_wireless.php:79
+#: usr/local/www/load_balancer_monitor.php:111
+#: usr/local/www/load_balancer_pool.php:120
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_setting.php:123
+#: usr/local/www/load_balancer_virtual_server.php:121
+#: usr/local/www/status_rrd_graph.php:452
+#: usr/local/www/status_rrd_graph_settings.php:171
+#: usr/local/www/system_authservers.php:450
+#: usr/local/www/system_firmware_settings.php:87
+#: usr/local/www/system_groupmanager.php:290
+#: usr/local/www/system_groupmanager_addprivs.php:170
+#: usr/local/www/system_usermanager.php:496
+#: usr/local/www/system_usermanager_addprivs.php:159
+#: usr/local/www/system_usermanager_settings.php:116
+#: usr/local/www/vpn_ipsec_settings.php:168
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: usr/local/www/diag_logs.php:97 usr/local/www/diag_logs_gateways.php:67
+#: usr/local/www/diag_logs_gateways.php:99
+#: usr/local/www/diag_logs_resolver.php:99
+#: usr/local/www/diag_logs_routing.php:85
+#: usr/local/www/diag_logs_wireless.php:87 usr/local/www/fbegin.inc:176
+#: usr/local/www/status_gateway_groups.php:66
+#: usr/local/www/status_gateway_groups.php:77
+#: usr/local/www/status_gateways.php:52 usr/local/www/status_gateways.php:64
+#: usr/local/www/system_gateway_groups.php:119
+#: usr/local/www/system_gateway_groups.php:132
+#: usr/local/www/system_gateway_groups_edit.php:153
+#: usr/local/www/system_gateways.php:182 usr/local/www/system_gateways.php:203
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_routes.php:220
+msgid "Gateways"
+msgstr "Ağ Geçitleri"
+
+#: usr/local/www/diag_logs.php:98 usr/local/www/diag_logs_gateways.php:100
+#: usr/local/www/diag_logs_resolver.php:100
+#: usr/local/www/diag_logs_routing.php:55
+#: usr/local/www/diag_logs_routing.php:86
+#: usr/local/www/diag_logs_wireless.php:88 usr/local/www/fbegin.inc:108
+msgid "Routing"
+msgstr "Yönlendirmeler"
+
+#: usr/local/www/diag_logs.php:99 usr/local/www/diag_logs_gateways.php:101
+#: usr/local/www/diag_logs_resolver.php:67
+#: usr/local/www/diag_logs_resolver.php:101
+#: usr/local/www/diag_logs_routing.php:87
+#: usr/local/www/diag_logs_wireless.php:89
+msgid "Resolver"
+msgstr "Çözücü"
+
+#: usr/local/www/diag_logs.php:100 usr/local/www/diag_logs_gateways.php:102
+#: usr/local/www/diag_logs_resolver.php:102
+#: usr/local/www/diag_logs_routing.php:88
+#: usr/local/www/diag_logs_wireless.php:57
+#: usr/local/www/diag_logs_wireless.php:90 usr/local/www/fbegin.inc:201
+#: usr/local/www/interfaces_assign.php:467
+#: usr/local/www/interfaces_bridge.php:102 usr/local/www/interfaces_gif.php:96
+#: usr/local/www/interfaces_gre.php:97 usr/local/www/interfaces_groups.php:79
+#: usr/local/www/interfaces_lagg.php:102 usr/local/www/interfaces_ppps.php:94
+#: usr/local/www/interfaces_qinq.php:105 usr/local/www/interfaces_vlan.php:99
+#: usr/local/www/interfaces_wireless.php:79
+#: usr/local/www/interfaces_wireless.php:94
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/status_rrd_graph.php:431
+#: usr/local/www/status_rrd_graph_settings.php:150
+#: usr/local/www/status_wireless.php:42
+msgid "Wireless"
+msgstr "Kablosuz"
+
+#: usr/local/www/diag_logs.php:110 usr/local/www/diag_logs_gateways.php:112
+#: usr/local/www/diag_logs_resolver.php:112
+#, php-format
+msgid "Last %s system log entries"
+msgstr "Sistem günlüğü son %s girdisi"
+
+#: usr/local/www/diag_logs.php:121 usr/local/www/diag_logs_auth.php:93
+#: usr/local/www/diag_logs_dhcp.php:96 usr/local/www/diag_logs_filter.php:410
+#: usr/local/www/diag_logs_gateways.php:123
+#: usr/local/www/diag_logs_ipsec.php:110 usr/local/www/diag_logs_ntpd.php:92
+#: usr/local/www/diag_logs_openvpn.php:98 usr/local/www/diag_logs_ppp.php:96
+#: usr/local/www/diag_logs_relayd.php:92
+#: usr/local/www/diag_logs_resolver.php:123
+#: usr/local/www/diag_logs_routing.php:103 usr/local/www/diag_logs_vpn.php:188
+#: usr/local/www/diag_logs_wireless.php:105
+msgid "Clear log"
+msgstr "Günlüğü temizle"
+
+#: usr/local/www/diag_logs_auth.php:89
+#, php-format
+msgid "Last %s Portal Auth log entries"
+msgstr "Hizmet Portalı son %s kimlik doğrulama girdisi"
+
+#: usr/local/www/diag_logs_dhcp.php:92
+#, php-format
+msgid "Last %s DHCP service log entries"
+msgstr "DHCP servisi son %s günlük girdisi"
+
+#: usr/local/www/diag_logs_filter.php:58
+msgid "Cannot resolve"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:78
+msgid "The rule that triggered this action is"
+msgstr "Bu eylemi tetikleyen kural"
+
+#: usr/local/www/diag_logs_filter.php:152
+#: usr/local/www/diag_logs_filter_dynamic.php:117
+#: usr/local/www/diag_logs_filter_summary.php:206
+msgid "Normal View"
+msgstr "Normal görünüm"
+
+#: usr/local/www/diag_logs_filter.php:153
+#: usr/local/www/diag_logs_filter_dynamic.php:118
+#: usr/local/www/diag_logs_filter_summary.php:207
+msgid "Dynamic View"
+msgstr "Dinamik Görünüm"
+
+#: usr/local/www/diag_logs_filter.php:154
+#: usr/local/www/diag_logs_filter_dynamic.php:119
+#: usr/local/www/diag_logs_filter_summary.php:208
+msgid "Summary View"
+msgstr "Özet Görünüm"
+
+#: usr/local/www/diag_logs_filter.php:181
+#: usr/local/www/diag_logs_filter.php:322
+#: usr/local/www/diag_logs_filter_dynamic.php:136
+#: usr/local/www/diag_logs_vpn.php:175 usr/local/www/diag_system_pftop.php:141
+#: usr/local/www/firewall_schedule_edit.php:922
+#: usr/local/www/widgets/widgets/log.widget.php:179
+msgid "Time"
+msgstr "Zaman"
+
+# 82%
+#: usr/local/www/diag_logs_filter.php:185
+msgid "Source IP Address"
+msgstr "Kaynak IP Adresi"
+
+#: usr/local/www/diag_logs_filter.php:189
+#: usr/local/www/diag_system_pftop.php:158 usr/local/www/diag_testport.php:129
+#: usr/local/www/firewall_nat_out.php:307
+#: usr/local/www/firewall_nat_out.php:544
+msgid "Source Port"
+msgstr "Kaynak port"
+
+# 75%
+#: usr/local/www/diag_logs_filter.php:197
+#: usr/local/www/diag_logs_filter.php:277
+msgid "Quantity"
+msgstr "Miktar"
+
+# 86%
+#: usr/local/www/diag_logs_filter.php:207
+msgid "Destination IP Address"
+msgstr "Hedef IP Adresi"
+
+#: usr/local/www/diag_logs_filter.php:211
+#: usr/local/www/diag_system_pftop.php:151
+#: usr/local/www/firewall_nat_out.php:309
+#: usr/local/www/firewall_nat_out.php:546
+msgid "Destination Port"
+msgstr "Hedef Port"
+
+#: usr/local/www/diag_logs_filter.php:215
+msgid "Protocol Flags"
+msgstr "Protokol Bayrakları"
+
+#: usr/local/www/diag_logs_filter.php:225
+#: usr/local/www/diag_logs_filter.php:288
+#, php-format
+msgid "Matches %1$s regular expression%2$s."
+msgstr "Düzenli ifade %2$s Eşleşen %1$s."
+
+#: usr/local/www/diag_logs_filter.php:226
+msgid "Precede with exclamation (!) as first character to exclude match."
+msgstr "Eşleşmeyi ilk karakterden hariç tutmak için ünlem (!) koyun."
+
+#: usr/local/www/diag_logs_filter.php:273 usr/local/www/diag_routes.php:193
+msgid "Filter expression"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:314
+#, php-format
+msgid "Last %s firewall log entries."
+msgstr "Güvenlik Duvarı son %s günlük girdisi."
+
+#: usr/local/www/diag_logs_filter.php:316
+msgid "matched log entries."
+msgstr "uyan günlük girdisi."
+
+#: usr/local/www/diag_logs_filter.php:317
+#, php-format
+msgid "Max(%s)"
+msgstr "En fazla (%s)"
+
+#: usr/local/www/diag_logs_filter.php:321
+#: usr/local/www/diag_logs_filter_dynamic.php:135
+#: usr/local/www/widgets/widgets/log.widget.php:178
+msgid "Act"
+msgstr "Eyl"
+
+#: usr/local/www/diag_logs_filter.php:323
+#: usr/local/www/diag_logs_filter_dynamic.php:137
+#: usr/local/www/firewall_nat.php:204 usr/local/www/services_rfc2136.php:80
+msgid "If"
+msgstr "Arabirim"
+
+#: usr/local/www/diag_logs_filter.php:325
+msgid "Rule"
+msgstr "Kural"
+
+#: usr/local/www/diag_logs_filter.php:370
+#: usr/local/www/diag_logs_filter.php:376
+msgid "Click to resolve"
+msgstr ""
+
+#: usr/local/www/diag_logs_filter.php:371
+msgid "Easy Rule: Add to Block List"
+msgstr "Kolay Kural: Engelleme listesine ekle"
+
+#: usr/local/www/diag_logs_filter.php:371
+msgid "Do you really want to add this BLOCK rule?"
+msgstr "Bu ENGEL kuralını eklemek istediğinize emin misiniz?"
+
+#: usr/local/www/diag_logs_filter.php:377
+msgid "Easy Rule: Pass this traffic"
+msgstr "Kolay Kural: Bu trafiÄŸe izin ver"
+
+#: usr/local/www/diag_logs_filter.php:377
+msgid "Do you really want to add this PASS rule?"
+msgstr "Bu İZİN Kuralını eklemek istediğinize emin misiniz?"
+
+#: usr/local/www/diag_logs_filter.php:398
+#, php-format
+msgid "Last %s firewall log entries"
+msgstr "Güvenlik Duvarı son %s günlük girdisi "
+
+#: usr/local/www/diag_logs_filter_dynamic.php:62
+msgid "Firewall (Dynamic View)"
+msgstr "Güvenlik Duvarı (Dinamik Görünüm)"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+#, php-format
+msgid "Last %s records"
+msgstr "Son %s kayıtlar"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:131
+msgid "Pause:"
+msgstr "Duraklat:"
+
+#: usr/local/www/diag_logs_filter_dynamic.php:173
+msgid "TCP Flags"
+msgstr "TCP Bayrakları"
+
+#: usr/local/www/diag_logs_filter_summary.php:35
+msgid "Firewall Log Summary"
+msgstr "Güvenlik duvarı günlük özeti"
+
+#: usr/local/www/diag_logs_filter_summary.php:47
+#: usr/local/www/load_balancer_relay_protocol_edit.php:231
+msgid "Actions"
+msgstr "Eylemler"
+
+#: usr/local/www/diag_logs_filter_summary.php:49
+msgid "Protocols"
+msgstr "Protokoller"
+
+#: usr/local/www/diag_logs_filter_summary.php:50
+msgid "Source IPs"
+msgstr "Kaynak IPler"
+
+#: usr/local/www/diag_logs_filter_summary.php:51
+msgid "Destination IPs"
+msgstr "Hedef IPler"
+
+#: usr/local/www/diag_logs_filter_summary.php:52
+msgid "Source Ports"
+msgstr "Kaynak Portlar"
+
+#: usr/local/www/diag_logs_filter_summary.php:53
+msgid "Destination Ports"
+msgstr "Hedef Portlar"
+
+#: usr/local/www/diag_logs_filter_summary.php:73
+msgid "data"
+msgstr "veri"
+
+#: usr/local/www/diag_logs_filter_summary.php:83
+#: usr/local/www/widgets/widgets/log.widget.php:201
+#: usr/local/www/widgets/widgets/log.widget.php:204
+msgid "Reverse Resolve with DNS"
+msgstr "DNS ters çözümleme yap"
+
+#: usr/local/www/diag_logs_filter_summary.php:219
+#, php-format
+msgid ""
+"This is a firewall log summary, of the last %1$s lines of the firewall log "
+"(Max %2$s)."
+msgstr ""
+"Güvenlik Duvarı olay günlüğünün son %1$s satırının özetidir (en fazla %2$s)."
+
+#: usr/local/www/diag_logs_filter_summary.php:220
+msgid "NOTE: IE8 users must enable compatibility view."
+msgstr "NOT: IE8 kullanıcıları uyumluluk görünümünü etkinleştirmelidir."
+
+#: usr/local/www/diag_logs_ipsec.php:93
+#, php-format
+msgid "Last %s IPsec log entries"
+msgstr "IPSec son %s günlük girdisi"
+
+#: usr/local/www/diag_logs_ntpd.php:87
+#, php-format
+msgid "Last %s NTP log entries"
+msgstr "Son %s NTP günlük girdileri"
+
+#: usr/local/www/diag_logs_openvpn.php:91
+#, php-format
+msgid "Last %s OpenVPN log entries"
+msgstr "OpenVPN son %s olay girdisi"
+
+#: usr/local/www/diag_logs_ppp.php:89
+#, php-format
+msgid "Last %s PPP log entries"
+msgstr "Son %s PPP günlük girdisi"
+
+#: usr/local/www/diag_logs_relayd.php:88
+#, php-format
+msgid "Last %s Load Balancer log entries"
+msgstr "Yük Dengeleyici son %s günlük girdisi"
+
+#: usr/local/www/diag_logs_routing.php:99
+#, php-format
+msgid "Routing daemon log entries"
+msgstr "Yönlendirme servisi günlük girdileri"
+
+#: usr/local/www/diag_logs_settings.php:88
+#: usr/local/www/diag_logs_settings.php:366
+msgid "Reset Log Files"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:90
+msgid "The log files have been reset."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:98
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #1."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:101
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #2."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:104
+msgid ""
+"A valid IP address/hostname or IP/hostname:port must be specified for remote "
+"syslog server #3."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:108
+msgid "Number of log entries to show must be between 5 and 2000."
+msgstr "Gösterilecek günlük girdisi sayısı 5 ile 2000 arasında olmalıdır."
+
+#: usr/local/www/diag_logs_settings.php:113
+msgid "Log file size must be a positive integer greater than 5120."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:178
+#: usr/local/www/system_advanced_admin.php:650
+msgid "webConfigurator configuration has changed. Restarting webConfigurator."
+msgstr "webArayüzü ayarları değiştirildi. webArayüzü tekrar başlatılıyor."
+
+#: usr/local/www/diag_logs_settings.php:180
+msgid "WebGUI process is restarting."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:286
+msgid "General Logging Options"
+msgstr "Genel Günlükleme Ayarları"
+
+#: usr/local/www/diag_logs_settings.php:291
+msgid "Show log entries in reverse order (newest entries on top)"
+msgstr "Günlük girdilerini tersten (en yeni kayıtlar en üstte) göster"
+
+#: usr/local/www/diag_logs_settings.php:297
+msgid ""
+"Hint: This is only the number of log entries displayed in the GUI. It does "
+"not affect how many entries are contained in the actual log files."
+msgstr ""
+"İpucu: Bu sadece GUI (webArayüz) tarafından görüntülenecek günlük girdisi "
+"sayısı içindir. Bu gerçek günlük dosyalarında bulunan girdilerin sayısının "
+"kaç tane olduğunu etkilemez."
+
+#: usr/local/www/diag_logs_settings.php:303
+msgid ""
+"Logs are held in constant-size circular log files. This field controls how "
+"large each log file is, and thus how many entries may exist inside the log. "
+"By default this is approximately 500KB per log file, and there are nearly 20 "
+"such log files."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:305
+msgid ""
+"NOTE: Log sizes are changed the next time a log file is cleared or deleted. "
+"To immediately increase the size of the log files, you must first save the "
+"options to set the size, then clear all logs using the \"Reset Log Files\" "
+"option farther down this page. "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:306
+msgid ""
+"Be aware that increasing this value increases every log file size, so disk "
+"usage will increase significantly."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:307
+msgid "Disk space currently used by log files: "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:308
+msgid "Remaining disk space for log files: "
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:315
+msgid "Log packets matched from the default block rules put in the ruleset"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:316
+msgid ""
+"Hint: packets that are blocked by the implicit default block rule will not "
+"be logged if you uncheck this option. Per-rule logging options are still "
+"respected."
+msgstr ""
+"İpucu: Eğer bu seçeneğin işaretini kaldırırsanız varsayılan kural tarafından "
+"engellenen paketler kayıt altına alınmayacaktır. Kuralların kendi günlükleme "
+"seçenekleri etkilenmez."
+
+#: usr/local/www/diag_logs_settings.php:319
+msgid "Log packets matched from the default pass rules put in the ruleset"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:320
+msgid ""
+"Hint: packets that are allowed by the implicit default pass rule will be "
+"logged if you check this option. Per-rule logging options are still "
+"respected."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:323
+msgid "Log packets blocked by 'Block Bogon Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:326
+msgid "Log packets blocked by 'Block Private Networks' rules"
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:332
+msgid "Log errors from the web server process."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:333
+msgid ""
+"Hint: If this is checked, errors from the lighttpd web server process for "
+"the GUI or Captive Portal will appear in the main system log."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:338
+msgid "Show raw filter logs"
+msgstr "Ham filtreleme günlüklerini göster"
+
+#: usr/local/www/diag_logs_settings.php:339
+msgid ""
+"Hint: If this is checked, filter logs are shown as generated by the packet "
+"filter, without any formatting. This will reveal more detailed information, "
+"but it is more difficult to read."
+msgstr ""
+"İpucu: Eğer bu seçeneği işaretlerseniz, filtre günlükleri paket filtresinin "
+"oluşturduğu haliyle, herhangi bir biçimlendirme uygulanmadan gösterilir. Bu "
+"durumda daha fazla detay görüntülenir, ancak okuması daha zordur."
+
+#: usr/local/www/diag_logs_settings.php:349
+msgid "Show the applied rule description below or in the firewall log rows."
+msgstr ""
+"Uygulanan kural açıklamalarını aşşağıda yada Güvenlik Duvarı kayıt "
+"satırlarında görebilirsiniz."
+
+#: usr/local/www/diag_logs_settings.php:351
+msgid ""
+"Displaying rule descriptions for all lines in the log might affect "
+"performance with large rule sets."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:358
+msgid "Disable writing log files to the local disk"
+msgstr "Yerel diske (Harddisk) günlük dosyalarını yazmayı devre dışı bırak."
+
+#: usr/local/www/diag_logs_settings.php:360
+msgid "Disable writing log files to the local RAM disk"
+msgstr "Günlük dosyalarının yerel RAM diske yazılması özelliğini kapat"
+
+#: usr/local/www/diag_logs_settings.php:366
+msgid ""
+"Do you really want to reset the log files? This will erase all local log "
+"data."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:368
+msgid ""
+"Note: Clears all local log files and reinitializes them as empty logs. This "
+"also restarts the DHCP daemon. Use the Save button first if you have made "
+"any setting changes."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:375
+msgid "Remote Logging Options"
+msgstr "Uzak Günlük Seçenekleri"
+
+#: usr/local/www/diag_logs_settings.php:378 usr/local/www/diag_ping.php:114
+#: usr/local/www/diag_system_pftop.php:159 usr/local/www/diag_testport.php:143
+#: usr/local/www/diag_traceroute.php:114
+msgid "Source Address"
+msgstr "Kaynak Adres"
+
+#: usr/local/www/diag_logs_settings.php:394
+msgid ""
+"This option will allow the logging daemon to bind to a single IP address, "
+"rather than all IP addresses."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:395
+msgid ""
+"If you pick a single IP, remote syslog severs must all be of that IP type. "
+"If you wish to mix IPv4 and IPv6 remote syslog servers, you must bind to all "
+"interfaces."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:397
+msgid ""
+"NOTE: If an IP address cannot be located on the chosen interface, the daemon "
+"will bind to all addresses."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:401 usr/local/www/diag_ping.php:105
+#: usr/local/www/diag_testport.php:161 usr/local/www/diag_traceroute.php:105
+msgid "IP Protocol"
+msgstr "IP Protokolü"
+
+#: usr/local/www/diag_logs_settings.php:408
+msgid ""
+"This option is only used when a non-default address is chosen as the source "
+"above. This option only expresses a preference; If an IP address of the "
+"selected type is not found on the chosen interface, the other type will be "
+"tried."
+msgstr ""
+
+#: usr/local/www/diag_logs_settings.php:412
+msgid "Enable Remote Logging"
+msgstr "Uzak Günlük Tutmayı Etkinleştir"
+
+#: usr/local/www/diag_logs_settings.php:414
+msgid "Send log messages to remote syslog server"
+msgstr "Sistem günlüklerini uzaktaki Syslog sunusuna gönder"
+
+#: usr/local/www/diag_logs_settings.php:417
+msgid "Remote Syslog Servers"
+msgstr "Uzak Syslog Sunucuları"
+
+#: usr/local/www/diag_logs_settings.php:434
+msgid "IP addresses of remote syslog servers, or an IP:port."
+msgstr "Uzak syslog sunucularının IP adresleri, yada IP:port."
+
+#: usr/local/www/diag_logs_settings.php:440
+msgid "Remote Syslog Contents"
+msgstr "Uzak Syslog İçerikleri"
+
+#: usr/local/www/diag_logs_settings.php:443
+msgid "Everything"
+msgstr "HerÅŸey"
+
+#: usr/local/www/diag_logs_settings.php:445
+msgid "System events"
+msgstr "Sistem olayları"
+
+#: usr/local/www/diag_logs_settings.php:447
+msgid "Firewall events"
+msgstr "Güvenlik Duvarı olayları"
+
+#: usr/local/www/diag_logs_settings.php:449
+msgid "DHCP service events"
+msgstr "DHCP servisi olayları"
+
+#: usr/local/www/diag_logs_settings.php:451
+msgid "Portal Auth events"
+msgstr "Hizmet Portalı olayları"
+
+#: usr/local/www/diag_logs_settings.php:453
+msgid "VPN (PPTP, IPsec, OpenVPN) events"
+msgstr "VPN (PPTP, IPsec, OpenVPN) olayları"
+
+#: usr/local/www/diag_logs_settings.php:455
+msgid "Gateway Monitor events"
+msgstr "Ağ geçidi izleme olayları"
+
+#: usr/local/www/diag_logs_settings.php:457
+msgid "Server Load Balancer events"
+msgstr "Sunucu Yük Dengeleyici olayları"
+
+#: usr/local/www/diag_logs_settings.php:459
+msgid "Wireless events"
+msgstr "Kablosuz olayları"
+
+#: usr/local/www/diag_logs_settings.php:470
+msgid ""
+"syslog sends UDP datagrams to port 514 on the specified remote syslog "
+"server, unless another port is specified. Be sure to set syslogd on the "
+"remote server to accept syslog messages from"
+msgstr ""
+"syslog UDP verigramlarını 514. porttan başka bir port belirtilmediğinde UDP "
+"olarak uzak syslog sunucusuna gönderir. Uzak sunucudan syslog mesajlarını "
+"kabul etme ayarlarının açık olduğundan emin olun"
+
+#: usr/local/www/diag_logs_vpn.php:144
+msgid "PPTP Logins"
+msgstr "PPTP Oturumları"
+
+#: usr/local/www/diag_logs_vpn.php:147
+msgid "PPTP Raw"
+msgstr "Ham PPTP"
+
+#: usr/local/www/diag_logs_vpn.php:150
+msgid "PPPoE Logins"
+msgstr "PPPoE Oturumları"
+
+#: usr/local/www/diag_logs_vpn.php:153
+msgid "PPPoE Raw"
+msgstr "Ham PPPoE"
+
+#: usr/local/www/diag_logs_vpn.php:156
+msgid "L2TP Logins"
+msgstr "L2TP Oturumları"
+
+#: usr/local/www/diag_logs_vpn.php:159
+msgid "L2TP Raw"
+msgstr "Ham L2TP"
+
+#: usr/local/www/diag_logs_vpn.php:171
+#, php-format
+msgid "Last %1$s %2$s VPN log entries"
+msgstr "VPN %1$s %2$s günlük girdileri"
+
+#: usr/local/www/diag_logs_wireless.php:101
+#, php-format
+msgid "Wireless (hostapd) log entries"
+msgstr "Kablosuz (hostapd) günlük girdileri"
+
+#: usr/local/www/diag_nanobsd.php:50 usr/local/www/fbegin.inc:236
+msgid "NanoBSD"
+msgstr "NanoBSD"
+
+#: usr/local/www/diag_nanobsd.php:70
+msgid "Setting slice information, please wait..."
+msgstr "Dilim bilgisi yapılandıılıyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_nanobsd.php:79
+msgid "The boot slice has been set to"
+msgstr "Yeni açılış dilimi"
+
+#: usr/local/www/diag_nanobsd.php:86
+msgid "Duplicating slice. Please wait, this will take a moment..."
+msgstr "Dilim çoğaltılıyor. Lütfen bekleyin, biraz zaman alabilir..."
+
+#: usr/local/www/diag_nanobsd.php:95
+msgid "The slice has been duplicated."
+msgstr "Dilim çoğaltıldı."
+
+#: usr/local/www/diag_nanobsd.php:95
+msgid ""
+"If you would like to boot from this newly duplicated slice please set it "
+"using the bootup information area."
+msgstr ""
+"Eğer sistemi bu yeni dilimden açmak isterseniz açılış bilgisi bölümünden "
+"ayarlayabilirsiniz."
+
+#: usr/local/www/diag_nanobsd.php:97
+msgid "There was an error while duplicating the slice. Operation aborted."
+msgstr "Dilim çoğaltılırken bir hata oluştu. İşlem iptal edildi."
+
+#: usr/local/www/diag_nanobsd.php:139
+#: usr/local/www/system_advanced_admin.php:324
+#: usr/local/www/system_advanced_firewall.php:287
+#: usr/local/www/system_advanced_misc.php:304
+#: usr/local/www/system_advanced_network.php:205
+#: usr/local/www/system_advanced_sysctl.php:175
+msgid "The options on this page are intended for use by advanced users only."
+msgstr "Bu sayfadaki seçenekler sadece ileri düzey kullanıcılar içindir."
+
+#: usr/local/www/diag_nanobsd.php:145
+msgid "Bootup information"
+msgstr "Açılış bilgisi"
+
+#: usr/local/www/diag_nanobsd.php:148
+msgid "NanoBSD Image size"
+msgstr "NanoBSD imaj boyutu"
+
+#: usr/local/www/diag_nanobsd.php:154
+msgid "Bootup"
+msgstr "Açılış"
+
+#: usr/local/www/diag_nanobsd.php:157
+msgid "Bootup slice is currently:"
+msgstr "Güncel açılış dilimi:"
+
+#: usr/local/www/diag_nanobsd.php:158
+msgid "This will switch the bootup slice to the alternate slice."
+msgstr "Bu işlem açılış dilimini diğer dilim olarak değiştirir."
+
+#: usr/local/www/diag_nanobsd.php:168
+msgid "Media Read/Write Status"
+msgstr "Ortam Oku/Yaz Durumu"
+
+#: usr/local/www/diag_nanobsd.php:182
+msgid "Read/Write"
+msgstr "Oku/Yaz"
+
+#: usr/local/www/diag_nanobsd.php:184
+msgid "Switch to Read-Only"
+msgstr "Salt okunur' a deÄŸiÅŸtir"
+
+#: usr/local/www/diag_nanobsd.php:186
+msgid "Read-Only"
+msgstr "Salt okunur"
+
+#: usr/local/www/diag_nanobsd.php:188
+msgid "Switch to Read/Write"
+msgstr "Oku/Yaz' ı değiştir"
+
+#: usr/local/www/diag_nanobsd.php:191
+msgid ""
+"NOTE: This setting is only temporary, and can be switched dynamically in the "
+"background."
+msgstr ""
+"NOT: Bu ​​ayar geçicidir, ve arka planda dinamik olarak değiştirilebilir."
+
+#: usr/local/www/diag_nanobsd.php:198
+msgid "Keep media mounted read/write at all times."
+msgstr "Okuma/yazma için ortamı her zaman takılı tut (mounted)."
+
+#: usr/local/www/diag_nanobsd.php:207
+msgid "Duplicate bootup slice to alternate"
+msgstr "Açılış dilimini alternatif dilime çoğalt"
+
+#: usr/local/www/diag_nanobsd.php:210
+msgid "Duplicate bootup slice"
+msgstr "Açılış dilimini çoğalt"
+
+#: usr/local/www/diag_nanobsd.php:213
+msgid "Destination slice:"
+msgstr "Hedef dilim:"
+
+#: usr/local/www/diag_nanobsd.php:220
+msgid ""
+"This will duplicate the bootup slice to the alternate slice. Use this if "
+"you would like to duplicate the known good working boot partition to the "
+"alternate."
+msgstr ""
+"Bu işlem açılış dilimini alternatif dilime çoğaltır. Bu seçeneği çalıştığını "
+"bildiğiniz açılış bölümünü alternatif bölüme çoğaltmak için kullanın."
+
+#: usr/local/www/diag_nanobsd.php:221
+msgid "Duplicate slice"
+msgstr ""
+
+#: usr/local/www/diag_nanobsd.php:229
+msgid "Periodic Data Backup"
+msgstr "Periyodik Veri Yedekleme"
+
+#: usr/local/www/diag_nanobsd.php:232
+msgid "RRD/DHCP Backup"
+msgstr "RRD/DHCP Yedek"
+
+#: usr/local/www/diag_nanobsd.php:234
+msgid "These options have been relocated to"
+msgstr "Bu ayarlar yeniden konumlandırıldı"
+
+# 75%
+#: usr/local/www/diag_nanobsd.php:234
+msgid "System > Advanced, Miscellaneous tab"
+msgstr "Sistem: GeliÅŸmiÅŸ, DiÄŸer sekmesine"
+
+#: usr/local/www/diag_nanobsd.php:242
+msgid "View upgrade log"
+msgstr "Yükseltme günlüğünü görüntüle"
+
+#: usr/local/www/diag_nanobsd.php:245
+msgid "View previous upgrade log"
+msgstr "Önceki yükseltme günlüğünü göster"
+
+#: usr/local/www/diag_ndp.php:107 usr/local/www/fbegin.inc:219
+msgid "NDP Table"
+msgstr "NDB Tablosu"
+
+#: usr/local/www/diag_ndp.php:133 usr/local/www/interfaces.php:564
+#: usr/local/www/interfaces.php:1883 usr/local/www/services_dhcpv6.php:859
+#: usr/local/www/services_dhcpv6_edit.php:210
+#: usr/local/www/status_dhcpv6_leases.php:416
+#: usr/local/www/status_interfaces.php:291
+msgid "IPv6 address"
+msgstr "IPv6 adresi"
+
+#: usr/local/www/diag_packet_capture.php:85
+#: usr/local/www/diag_packet_capture.php:371
+msgid "Download Capture"
+msgstr "Yakalanan Paketleri Ä°ndir"
+
+#: usr/local/www/diag_packet_capture.php:88 usr/local/www/fbegin.inc:234
+msgid "Packet Capture"
+msgstr "Paket Yakalama"
+
+#: usr/local/www/diag_packet_capture.php:127
+msgid "Invalid interface."
+msgstr "Geçersiz arabirim."
+
+#: usr/local/www/diag_packet_capture.php:130
+msgid "Invalid address family."
+msgstr "Geçersiz adres ailesi."
+
+#: usr/local/www/diag_packet_capture.php:133
+msgid "Invalid protocol."
+msgstr "Geçersiz protokol."
+
+#: usr/local/www/diag_packet_capture.php:145
+#, php-format
+msgid "A valid IP address or CIDR block must be specified. [%s]"
+msgstr "Geçerli bir IP adresi yada CIDR bloğu belirtilmelidir. [%s]"
+
+#: usr/local/www/diag_packet_capture.php:151
+msgid "Invalid value specified for port."
+msgstr "Port için belirtilen değer geçersiz."
+
+#: usr/local/www/diag_packet_capture.php:158
+msgid "Invalid value specified for packet length."
+msgstr "Paket uzunluğu için beliritlen değer geçersiz."
+
+#: usr/local/www/diag_packet_capture.php:165
+msgid "Invalid value specified for packet count."
+msgstr "Paket sayısı için belirtilen değer geçersiz."
+
+#: usr/local/www/diag_packet_capture.php:191
+#: usr/local/www/diag_packet_capture.php:365
+#: usr/local/www/diag_packet_capture.php:420
+#: usr/local/www/status_dhcp_leases.php:334
+#: usr/local/www/status_dhcpv6_leases.php:420
+#: usr/local/www/status_dhcpv6_leases.php:505
+msgid "Start"
+msgstr "BaÅŸlat"
+
+#: usr/local/www/diag_packet_capture.php:198
+#: usr/local/www/diag_packet_capture.php:364
+#: usr/local/www/diag_packet_capture.php:367
+msgid "Stop"
+msgstr "Durdur"
+
+#: usr/local/www/diag_packet_capture.php:240
+msgid "Packet capture"
+msgstr "Paket yakalama"
+
+#: usr/local/www/diag_packet_capture.php:254
+msgid "Select the interface on which to capture traffic."
+msgstr "Üzerinden geçen trafiğin kaydedileceği arabirimi seçiniz."
+
+#: usr/local/www/diag_packet_capture.php:258
+msgid "Promiscuous"
+msgstr "Karışıklık"
+
+#: usr/local/www/diag_packet_capture.php:261
+msgid "If checked, the"
+msgstr "EÄŸer iÅŸaretlendiyse, "
+
+# 92%
+#: usr/local/www/diag_packet_capture.php:261
+msgid "packet capture"
+msgstr "paket yakalama"
+
+#: usr/local/www/diag_packet_capture.php:261
+msgid "will be performed using promiscuous mode."
+msgstr "karışıklık kipi kullanılarak gerçekleştirilir."
+
+#: usr/local/www/diag_packet_capture.php:262
+msgid "Some network adapters do not support or work well in promiscuous mode."
+msgstr "Bağzı ağ adaptörleri karışıklık kipinde çalışmayı desteklemeyebilir."
+
+#: usr/local/www/diag_packet_capture.php:266
+#: usr/local/www/system_gateways_edit.php:672
+msgid "Address Family"
+msgstr "Adres Ailesi"
+
+#: usr/local/www/diag_packet_capture.php:273
+msgid ""
+"Select the type of traffic to be captured, either Any, IPv4 only or IPv6 "
+"only."
+msgstr "Yakalanacak trafik türünü (Tümü, sadece IPv4 veya sadece IPv6) seçin."
+
+#: usr/local/www/diag_packet_capture.php:295
+msgid "Select the protocol to capture, or Any."
+msgstr "Yakalamak için protokol seçin veya tümünü."
+
+#: usr/local/www/diag_packet_capture.php:299
+msgid "Host Address"
+msgstr "Sunucu Adresi"
+
+#: usr/local/www/diag_packet_capture.php:302
+msgid ""
+"This value is either the Source or Destination IP address or subnet in CIDR "
+"notation. The packet capture will look for this address in either field."
+msgstr ""
+"Bu değer kaynak veya hedef IP adresi veya CIDR biçiminde alt ağ olabilir. "
+"Paket yakalama işlemi iki alanda da girdiğiniz adresi arayacaktır."
+
+#: usr/local/www/diag_packet_capture.php:303
+msgid ""
+"Matching can be negated by preceding the value with \"!\". Multiple IP "
+"addresses or CIDR subnets may be specified. Comma (\",\") separated values "
+"perform a boolean \"and\". Separating with a pipe (\"|\") performs a boolean "
+"\"or\"."
+msgstr ""
+
+#: usr/local/www/diag_packet_capture.php:304
+msgid ""
+"If you leave this field blank, all packets on the specified interface will "
+"be captured."
+msgstr ""
+"Bu alanı boş bırakırsanız belirtilen arabirimden geçen tüm paketler "
+"kaydedilir."
+
+#: usr/local/www/diag_packet_capture.php:308
+#: usr/local/www/diag_testport.php:60 usr/local/www/diag_testport.php:123
+#: usr/local/www/firewall_aliases_edit.php:587
+#: usr/local/www/firewall_rules.php:341 usr/local/www/firewall_rules.php:343
+#: usr/local/www/load_balancer_pool.php:134
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:223
+#: usr/local/www/load_balancer_virtual_server.php:135
+#: usr/local/www/load_balancer_virtual_server_edit.php:192
+#: usr/local/www/services_captiveportal.php:731
+#: usr/local/www/services_captiveportal.php:752
+#: usr/local/www/services_captiveportal.php:774
+#: usr/local/www/services_captiveportal.php:793
+#: usr/local/www/status_upnp.php:87
+msgid "Port"
+msgstr "Port"
+
+#: usr/local/www/diag_packet_capture.php:311
+msgid ""
+"The port can be either the source or destination port. The packet capture "
+"will look for this port in either field."
+msgstr ""
+"Bu deÄŸer kaynak veya hedef port olabilir. Kaynak veya hedef portu bu deÄŸerde "
+"olan paketler kaydedilir."
+
+#: usr/local/www/diag_packet_capture.php:312
+msgid "Leave blank if you do not want to filter by port."
+msgstr ""
+"Port numarasına göre filtrelemek istemiyorsanız bu alanı boş bırakınız."
+
+#: usr/local/www/diag_packet_capture.php:316
+msgid "Packet Length"
+msgstr "Paket UzunluÄŸu"
+
+#: usr/local/www/diag_packet_capture.php:319
+msgid ""
+"The Packet length is the number of bytes of each packet that will be "
+"captured. Default value is 0, which will capture the entire frame regardless "
+"of its size."
+msgstr ""
+"Bu alana her paketin ilk kaç baytının kaydedileceğini girebilirsiniz. "
+"Öntanımlı değer olan 0 girilirse boyutuna bakılmaksızın tüm çerçeve "
+"kaydedilir."
+
+#: usr/local/www/diag_packet_capture.php:323 usr/local/www/diag_ping.php:60
+#: usr/local/www/diag_ping.php:132
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_captiveportal_vouchers_edit.php:190
+msgid "Count"
+msgstr "Adet"
+
+#: usr/local/www/diag_packet_capture.php:326
+msgid ""
+"This is the number of packets the packet capture will grab. Default value is "
+"100."
+msgstr ""
+"Paket yakalamada kaç paketin kaydedileceğini bu bölüme girebilirsiniz. "
+"Öntanımlı değeri 100'dür."
+
+#: usr/local/www/diag_packet_capture.php:326
+msgid "Enter 0 (zero) for no count limit."
+msgstr "Adet sınırını kaldırmak için 0 (sıfır) giriniz."
+
+#: usr/local/www/diag_packet_capture.php:330
+msgid "Level of Detail"
+msgstr "Detay Seviyesi"
+
+#: usr/local/www/diag_packet_capture.php:333
+msgid "Normal"
+msgstr "Normal"
+
+#: usr/local/www/diag_packet_capture.php:334
+msgid "Medium"
+msgstr "Orta"
+
+#: usr/local/www/diag_packet_capture.php:335
+msgid "High"
+msgstr "Yüksek"
+
+#: usr/local/www/diag_packet_capture.php:336
+msgid "Full"
+msgstr "Tam"
+
+#: usr/local/www/diag_packet_capture.php:338
+msgid ""
+"This is the level of detail that will be displayed after hitting 'Stop' when "
+"the packets have been captured."
+msgstr ""
+"Paket yakalama bittiğinde veya [Dur]a tıklandığında yakalanan paketlerin ne "
+"derece detaylı görüntüleneceğini belirler."
+
+#: usr/local/www/diag_packet_capture.php:340
+msgid ""
+"This option does not affect the level of detail when downloading the packet "
+"capture."
+msgstr ""
+"Bu seçenek paket kayıtlarının indirilmesi sırasındaki detay deviyesini "
+"etkilemez."
+
+#: usr/local/www/diag_packet_capture.php:344
+msgid "Reverse DNS Lookup"
+msgstr "Ters DNS Sorgusu"
+
+#: usr/local/www/diag_packet_capture.php:347
+msgid ""
+"This check box will cause the packet capture to perform a reverse DNS lookup "
+"associated with all IP addresses."
+msgstr ""
+"Bu seçenek paket yakalama işleminin tüm IP adreslerine ters DNS sorgusu "
+"uygulanmasını sağlar."
+
+#: usr/local/www/diag_packet_capture.php:348
+msgid "This option can cause delays for large packet captures."
+msgstr ""
+"Bu seçenek paket yakalama boyutu büyük olduğunda gecikmelere sebep olabilir."
+
+#: usr/local/www/diag_packet_capture.php:370
+msgid "View Capture"
+msgstr "Yakalananı Gör"
+
+#: usr/local/www/diag_packet_capture.php:372
+msgid "The packet capture file was last updated:"
+msgstr "Paket yakalama dosyasının son güncellenme zamanı:"
+
+#: usr/local/www/diag_packet_capture.php:385
+#: usr/local/www/diag_packet_capture.php:422
+msgid "Packet Capture is running."
+msgstr "Paket Yakalama çalışıyor."
+
+#: usr/local/www/diag_packet_capture.php:429
+msgid "Packet Capture stopped."
+msgstr "Paket Yakalama durdu."
+
+#: usr/local/www/diag_packet_capture.php:429
+msgid "Packets Captured:"
+msgstr "Yakalanan Paket Sayısı:"
+
+#: usr/local/www/diag_patterns.php:43 usr/local/www/diag_patterns.php:85
+msgid "Upload Pattern file"
+msgstr "Desen dosyası yükle"
+
+#: usr/local/www/diag_patterns.php:49
+#, php-format
+msgid "Added custom l7 pattern %s"
+msgstr ""
+
+#: usr/local/www/diag_patterns.php:51
+msgid "Uploaded file to"
+msgstr "Yüklenen dosyanın konumu"
+
+#: usr/local/www/diag_patterns.php:54
+msgid "Warning: You must upload a file with .pat extension."
+msgstr "Uyarı: Yüklenecek dosya .pat uzantısında olmalıdır."
+
+#: usr/local/www/diag_patterns.php:63
+msgid "Add layer7 pattern"
+msgstr "Layer7 deseni ekle"
+
+#: usr/local/www/diag_patterns.php:74
+msgid "Upload layer7 pattern file"
+msgstr "Layer7 desen dosyası yükle"
+
+#: usr/local/www/diag_patterns.php:77
+msgid "File to upload:"
+msgstr "Yüklenecek dosya:"
+
+#: usr/local/www/diag_pf_info.php:101
+msgid "Gathering PF information, please wait..."
+msgstr "PF bilgisi toplanıyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_ping.php:64
+#, php-format
+msgid "Count must be between 1 and %s"
+msgstr "Adet 1 ile %s arasında olmalıdır"
+
+#: usr/local/www/diag_ping.php:70 usr/local/www/diag_traceroute.php:73
+msgid "When using IPv4, the target host must be an IPv4 address or hostname."
+msgstr "IPv4 kullanıldığında, hedef host IPv4 adresi yada host adı olmalı."
+
+#: usr/local/www/diag_ping.php:72 usr/local/www/diag_traceroute.php:75
+msgid "When using IPv6, the target host must be an IPv6 address or hostname."
+msgstr "IPv6 kullanıldığında, hedef host IPv6 adresi yada host adı olmalı."
+
+#: usr/local/www/diag_ping.php:151
+msgid "Ping output"
+msgstr "Ping çıktısı"
+
+#: usr/local/www/diag_pkglogs.php:86
+msgid "Package logs"
+msgstr "Paket günlükleri"
+
+#: usr/local/www/diag_pkglogs.php:97
+msgid "No packages with logging facilities are currently installed."
+msgstr "Şu anda günlükleme özellikli bir paket yok."
+
+#: usr/local/www/diag_pkglogs.php:108 usr/local/www/diag_pkglogs.php:110
+#, php-format
+msgid "%s"
+msgstr "%s"
+
+#: usr/local/www/diag_pkglogs.php:123
+#, php-format
+msgid "Last %1$s %2$s log entries"
+msgstr "Son %1$s %2$s günlük girdisi"
+
+#: usr/local/www/diag_resetstate.php:55
+msgid "The state table has been flushed successfully."
+msgstr "Durum tablosu başarıyla temizlendi."
+
+#: usr/local/www/diag_resetstate.php:61
+msgid "The source tracking table has been flushed successfully."
+msgstr "Kaynak takibi tablosu başarıyla temizlendi."
+
+#: usr/local/www/diag_resetstate.php:65
+msgid "Reset state"
+msgstr "Durumu sıfırla"
+
+#: usr/local/www/diag_resetstate.php:92
+msgid "Firewall state table"
+msgstr "Güvenlik Duvarı durum tablosu"
+
+#: usr/local/www/diag_resetstate.php:94
+msgid ""
+"Resetting the state tables will remove all entries from the corresponding "
+"tables. This means that all open connections will be broken and will have to "
+"be re-established. This may be necessary after making substantial changes to "
+"the firewall and/or NAT rules, especially if there are IP protocol mappings "
+"(e.g. for PPTP or IPv6) with open connections."
+msgstr ""
+"Durum tablosunun temizlenmesi tüm açık bağlantıların kapatılmasına sebep "
+"olur. Dolayısıyla tüm açık bağlantılar kopar ve yeniden kurulmaları gerekir. "
+"Bu sıfırlama işlemi, güvenlik duvarında ve/veya NAT kurallarında büyük "
+"değişiklikler yapıldığında (özellikle PPTP veya IPv6 gibi IP protokol "
+"eÅŸleÅŸtirmeleri varsa) gerekli olabilir."
+
+#: usr/local/www/diag_resetstate.php:101
+msgid ""
+"The firewall will normally leave the state tables intact when changing rules."
+msgstr ""
+"Güvenlik duvarı normalde kurallar değiştirilirken durum tablolarına dokunmaz."
+
+#: usr/local/www/diag_resetstate.php:104
+msgid ""
+"NOTE: If you reset the firewall state table, the browser session may appear "
+"to be hung after clicking &quot;Reset&quot;. Simply refresh the page to "
+"continue."
+msgstr ""
+"NOT: Güvenlik duvarı durum tablosu sıfırlandığında tarayıcı oturumu asılı "
+"kalabilir. Bu durumda çalışmaya devam etmek için sayfayı yenilemeniz "
+"yeterlidir."
+
+#: usr/local/www/diag_resetstate.php:114
+msgid "Firewall Source Tracking"
+msgstr "Güvenlik Duvarı Kaynak Takibi"
+
+#: usr/local/www/diag_resetstate.php:116
+msgid ""
+"Resetting the source tracking table will remove all source/destination "
+"associations. This means that the \"sticky\" source/destination association "
+"will be cleared for all clients."
+msgstr ""
+"Kaynak takibi tablosunu temizlenmesi tüm kaynak/hedef ortaklıklarını "
+"silecektir. Bu \"sabit\" kaynak/hedef ortaklılkarının tüm istemcilerde "
+"silineceÄŸini belirtir."
+
+#: usr/local/www/diag_resetstate.php:120
+msgid "This does not clear active connection states, only source tracking."
+msgstr "Bu aktif bağlantı durumlarını silmez, sadece kaynak takibini siler."
+
+#: usr/local/www/diag_resetstate.php:128 usr/local/www/status_lb_pool.php:219
+msgid "Reset"
+msgstr "Sıfırla"
+
+#: usr/local/www/diag_routes.php:71
+msgid "Routing tables"
+msgstr "Yönlendirme tabloları"
+
+#: usr/local/www/diag_routes.php:169
+msgid "Name resolution"
+msgstr "İsim çözümleme"
+
+#: usr/local/www/diag_routes.php:173
+msgid "Enable this to attempt to resolve names when displaying the tables."
+msgstr "Tabloları görüntülerken isim çözümlemeyi etkinleştir."
+
+#: usr/local/www/diag_routes.php:178
+msgid "Number of rows"
+msgstr ""
+
+#: usr/local/www/diag_routes.php:182 usr/local/www/diag_tables.php:169
+msgid "all"
+msgstr "tüm"
+
+#: usr/local/www/diag_routes.php:188
+msgid "Select how many rows to display."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:197
+msgid "Use a regular expression to filter IP address or hostnames."
+msgstr ""
+
+#: usr/local/www/diag_routes.php:204 usr/local/www/system_certmanager.php:413
+#: usr/local/www/system_certmanager.php:1025
+#: usr/local/www/system_certmanager.php:1069
+msgid "Update"
+msgstr "Güncelle"
+
+#: usr/local/www/diag_routes.php:207
+msgid ""
+"By enabling name resolution, the query should take a bit longer. You can "
+"stop it at any time by clicking the Stop button in your browser."
+msgstr ""
+"İsim çözümleme etkinleştirildiğinde, sorgulama biraz daha uzun sürecektir. "
+"İstediğiniz anda tarayıcınızın Durdur düğmesini kullanarak işlemi "
+"durdurabilirsiniz."
+
+#: usr/local/www/diag_routes.php:219 usr/local/www/diag_routes.php:227
+msgid "Gathering data, please wait..."
+msgstr ""
+
+#: usr/local/www/diag_smart.php:18
+msgid "S.M.A.R.T. Monitor Tools"
+msgstr "S.M.A.R.T. İzleme Araçları"
+
+#: usr/local/www/diag_smart.php:77
+msgid "PASSED"
+msgstr "GEÇTİ"
+
+#: usr/local/www/diag_smart.php:78
+msgid "FAILED"
+msgstr "BAÅžARISIZ"
+
+#: usr/local/www/diag_smart.php:79
+msgid "Warning"
+msgstr "Uyarı"
+
+#: usr/local/www/diag_smart.php:130 usr/local/www/diag_smart.php:437
+msgid "Abort"
+msgstr "Ä°ptal"
+
+#: usr/local/www/diag_smart.php:179
+#, php-format
+msgid "Email sent to %s"
+msgstr "%s adresine E-posta gönderildi"
+
+#: usr/local/www/diag_smart.php:219 usr/local/www/diag_smart.php:290
+msgid "Information/Tests"
+msgstr "Bilgi/Testler"
+
+#: usr/local/www/diag_smart.php:220 usr/local/www/diag_smart.php:231
+msgid "Config"
+msgstr "Yapılandırma"
+
+#: usr/local/www/diag_smart.php:234 usr/local/www/system_camanager.php:552
+#: usr/local/www/system_certmanager.php:776
+#: usr/local/www/system_certmanager.php:949
+msgid "Email Address"
+msgstr "E-Posta Adresi"
+
+#: usr/local/www/diag_smart.php:256
+msgid "Test email"
+msgstr "Test e-postası"
+
+#: usr/local/www/diag_smart.php:261
+#, php-format
+msgid "Send test email to %s"
+msgstr "Test e-postası %s adresine gönderildi"
+
+#: usr/local/www/diag_smart.php:269 usr/local/www/services_wol.php:153
+msgid "Send"
+msgstr "Gönder"
+
+#: usr/local/www/diag_smart.php:302 usr/local/www/diag_smart.php:307
+msgid "Info"
+msgstr "Bilgi"
+
+#: usr/local/www/diag_smart.php:305
+msgid "Info type"
+msgstr "Bilgi tipi"
+
+#: usr/local/www/diag_smart.php:308
+msgid "Health"
+msgstr "Sağlık"
+
+#: usr/local/www/diag_smart.php:309
+msgid "SMART Capabilities"
+msgstr "SMART Yetenekleri"
+
+#: usr/local/www/diag_smart.php:310
+msgid "Attributes"
+msgstr "Özellikler"
+
+#: usr/local/www/diag_smart.php:311 usr/local/www/firewall_aliases.php:180
+#: usr/local/www/pkg_mgr.php:176
+msgid "All"
+msgstr "Tümü"
+
+#: usr/local/www/diag_smart.php:315 usr/local/www/diag_smart.php:354
+#: usr/local/www/diag_smart.php:391 usr/local/www/diag_smart.php:421
+msgid "Device: /dev/"
+msgstr "Aygıt: /dev/"
+
+#: usr/local/www/diag_smart.php:331 usr/local/www/diag_smart.php:407
+msgid "View"
+msgstr "Görüntüle"
+
+#: usr/local/www/diag_smart.php:342
+msgid "Perform Self-tests"
+msgstr "Kendini kendini testleri Yapın"
+
+#: usr/local/www/diag_smart.php:345
+msgid "Test type"
+msgstr "Test türü"
+
+#: usr/local/www/diag_smart.php:347
+#: usr/local/www/status_gateway_groups.php:125
+#: usr/local/www/status_gateways.php:123
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:63
+msgid "Offline"
+msgstr "Çevrim Dışı"
+
+#: usr/local/www/diag_smart.php:348
+msgid "Short"
+msgstr "Kısa"
+
+#: usr/local/www/diag_smart.php:349 usr/local/www/diag_system_pftop.php:135
+msgid "Long"
+msgstr "Uzun"
+
+#: usr/local/www/diag_smart.php:350
+msgid "Conveyance (ATA Disks Only)"
+msgstr "Taşıma (Sadece ATA diskler)"
+
+#: usr/local/www/diag_smart.php:381
+msgid "View Logs"
+msgstr "Günlükleri Görüntüle"
+
+#: usr/local/www/diag_smart.php:384
+msgid "Log type"
+msgstr "Günlük türü"
+
+#: usr/local/www/diag_smart.php:386
+msgid "Error"
+msgstr "Hata"
+
+#: usr/local/www/diag_smart.php:387
+msgid "Self-test"
+msgstr "Kendi kendini test"
+
+#: usr/local/www/diag_smart.php:418
+msgid "Abort tests"
+msgstr "Testleri durdur"
+
+#: usr/local/www/diag_smart.php:437
+msgid "Do you really want to abort the test?"
+msgstr "Testleri durdurmayı gerçekten istiyor musunuz?"
+
+#: usr/local/www/diag_smart.php:452
+msgid "Back"
+msgstr "Geri"
+
+#: usr/local/www/diag_sockets.php:45 usr/local/www/fbegin.inc:229
+msgid "Sockets"
+msgstr "Soketler"
+
+#: usr/local/www/diag_states_summary.php:152
+#: usr/local/www/firewall_aliases.php:177
+#: usr/local/www/services_dnsmasq.php:354
+#: usr/local/www/services_dnsmasq.php:441
+#: usr/local/www/services_unbound.php:422
+#: usr/local/www/services_unbound.php:509 usr/local/www/vpn_pppoe_edit.php:550
+msgid "IP"
+msgstr "IP"
+
+#: usr/local/www/diag_states_summary.php:156
+msgid "Src Ports"
+msgstr "Kyn Portlar"
+
+#: usr/local/www/diag_states_summary.php:157
+msgid "Dst Ports"
+msgstr "Hdf Portlar"
+
+#: usr/local/www/diag_states_summary.php:187
+msgid "State Table Summary"
+msgstr "Durum Tablosu Özeti"
+
+#: usr/local/www/diag_states_summary.php:194
+msgid "By Source IP"
+msgstr "Kaynak IPye göre"
+
+#: usr/local/www/diag_states_summary.php:195
+msgid "By Destination IP"
+msgstr "Hedef IPye göre"
+
+#: usr/local/www/diag_states_summary.php:196
+msgid "Total per IP"
+msgstr "IP başı toplam"
+
+#: usr/local/www/diag_states_summary.php:197
+msgid "By IP Pair"
+msgstr "IP çiftine göre"
+
+#: usr/local/www/diag_system_activity.php:46
+msgid "Diagnostics: System Activity"
+msgstr "Araçlar: İşlemci Kullanımı"
+
+#: usr/local/www/diag_system_activity.php:99
+msgid "Gathering CPU activity, please wait..."
+msgstr "CPU etkinlikleri toplanıyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_system_pftop.php:131
+msgid "View type:"
+msgstr "Türü Görüntüle:"
+
+#: usr/local/www/diag_system_pftop.php:133 usr/local/www/interfaces.php:2972
+#: usr/local/www/interfaces.php:2983 usr/local/www/interfaces.php:2995
+#: usr/local/www/interfaces.php:3025 usr/local/www/interfaces.php:3041
+#: usr/local/www/interfaces.php:3057
+msgid "Default"
+msgstr "Varsayılan"
+
+#: usr/local/www/diag_system_pftop.php:134
+msgid "Label"
+msgstr "Etiket"
+
+#: usr/local/www/diag_system_pftop.php:136
+#: usr/local/www/firewall_rules.php:345 usr/local/www/status_queues.php:166
+msgid "Queue"
+msgstr "Sıra"
+
+#: usr/local/www/diag_system_pftop.php:137 usr/local/www/fbegin.inc:130
+#: usr/local/www/firewall_rules.php:50
+#: usr/local/www/firewall_rules_edit.php:805
+msgid "Rules"
+msgstr "Kurallar"
+
+#: usr/local/www/diag_system_pftop.php:139
+msgid "Speed"
+msgstr "Hız"
+
+#: usr/local/www/diag_system_pftop.php:146
+msgid "Sort type:"
+msgstr "Sıralama türü:"
+
+#: usr/local/www/diag_system_pftop.php:148
+msgid "Age"
+msgstr "YaÅŸ"
+
+#: usr/local/www/diag_system_pftop.php:149
+msgid "Bytes"
+msgstr "Bayt"
+
+#: usr/local/www/diag_system_pftop.php:150
+msgid "Destination Address"
+msgstr "Hedef Adres"
+
+#: usr/local/www/diag_system_pftop.php:152
+msgid "Expiry"
+msgstr "Geçerlilik"
+
+#: usr/local/www/diag_system_pftop.php:154
+msgid "Peak"
+msgstr "En Yüksek"
+
+#: usr/local/www/diag_system_pftop.php:155
+msgid "Packet"
+msgstr "Paket"
+
+#: usr/local/www/diag_system_pftop.php:164
+msgid "Number of States:"
+msgstr "Durumların Numarası:"
+
+#: usr/local/www/diag_system_pftop.php:184
+msgid "Gathering pfTOP activity, please wait..."
+msgstr "pfTop etkinlikleri toplanıyor, lütfen bekleyiniz..."
+
+#: usr/local/www/diag_tables.php:45 usr/local/www/fbegin.inc:221
+msgid "Tables"
+msgstr "Tablolar"
+
+#: usr/local/www/diag_tables.php:88
+msgid "The bogons database has been updated."
+msgstr "Sahte IP (bogon) veritabanı güncellendi."
+
+#: usr/local/www/diag_tables.php:122
+msgid "Table:"
+msgstr "Tablo:"
+
+#: usr/local/www/diag_tables.php:157 usr/local/www/diag_tables.php:159
+msgid "No entries exist in this table."
+msgstr "Tabloda herhangi bir girdi bulunamadı."
+
+#: usr/local/www/diag_tables.php:157 usr/local/www/diag_tables.php:166
+msgid " the latest bogon data."
+msgstr " son sahte IP (bogon) verisi."
+
+#: usr/local/www/diag_tables.php:166 usr/local/www/diag_tables.php:169
+msgid "entries in this table."
+msgstr "girdileri sil."
+
+#: usr/local/www/diag_tables.php:169
+#: usr/local/www/firewall_shaper_layer7.php:572
+#: usr/local/www/services_dhcpv6.php:809
+#: usr/local/www/system_firmware_restorefullbackup.php:164
+msgid "Delete"
+msgstr "Sil"
+
+#: usr/local/www/diag_testport.php:49 usr/local/www/diag_testport.php:114
+#: usr/local/www/fbegin.inc:223
+msgid "Test Port"
+msgstr "Port Test"
+
+#: usr/local/www/diag_testport.php:64
+msgid "Please enter a valid IP or hostname."
+msgstr "Lütfen geçerli bir IP adresi girin."
+
+#: usr/local/www/diag_testport.php:68
+msgid "Please enter a valid port number."
+msgstr "Lütfen geçerli bir port numarası girin."
+
+#: usr/local/www/diag_testport.php:72
+msgid "Please enter a valid source port number, or leave the field blank."
+msgstr "Lütfen geçerli bir kaynak adresi girin veya bu alanı boş bırakın."
+
+#: usr/local/www/diag_testport.php:76
+msgid "You cannot connect to an IPv4 address using IPv6."
+msgstr "IPv6 adresini kullanarak IPv4 adresine bağlanamazsınız."
+
+#: usr/local/www/diag_testport.php:79
+msgid "You cannot connect to an IPv6 address using IPv4."
+msgstr "IPv4 adresini kullanarak IPv6 adresine bağlanamazsınız."
+
+#: usr/local/www/diag_testport.php:106
+msgid ""
+"This page allows you to perform a simple TCP connection test to determine if "
+"a host is up and accepting connections on a given port. This test does not "
+"function for UDP since there is no way to reliably determine if a UDP port "
+"accepts connections in this manner."
+msgstr ""
+"Bu sayfa, host'un açık ve belirtilen porttan bağlantıyı kabul ettiğini "
+"belirlemek için basit bir TCP bağlantısı testi gerçekleştirmeye olanak "
+"sağlar. UDP portları bu şekilde bir bağlantıyı kabul ediyorsa "
+"güvenilirliğini belirlemenin bir yolu olmadığı için bu test UDP için "
+"çalışmaz."
+
+#: usr/local/www/diag_testport.php:108
+msgid ""
+"No data is transmitted to the remote host during this test, it will only "
+"attempt to open a connection and optionally display the data sent back from "
+"the server."
+msgstr ""
+"Test sırasında Host'a bağlantıyı açmak için herhangi bir veri gönderilir ve "
+"isteğe bağlı olarak Host'dan geri gönderilen verileri görüntülemek için "
+"kullanılır."
+
+#: usr/local/www/diag_testport.php:132
+msgid "This should typically be left blank."
+msgstr "Bu genellikle boş bırakılmalıdır."
+
+#: usr/local/www/diag_testport.php:136
+msgid "Show Remote Text"
+msgstr "Uzak Metin Görüntüle"
+
+#: usr/local/www/diag_testport.php:139
+msgid ""
+"Shows the text given by the server when connecting to the port. Will take "
+"10+ seconds to display if checked."
+msgstr ""
+"Port'a bağlanırken sunucu tarafından verilen metini gösterir. İşaretlenirse "
+"görüntüleme 10+ saniye uzar."
+
+#: usr/local/www/diag_testport.php:168
+msgid "IPv4"
+msgstr "IPv4"
+
+#: usr/local/www/diag_testport.php:171
+msgid "IPv6"
+msgstr "IPv6"
+
+#: usr/local/www/diag_testport.php:175
+msgid ""
+"If you force IPv4 or IPv6 and use a hostname that does not contain a result "
+"using that protocol, it will result in an error. For example if you force "
+"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will "
+"not work."
+msgstr ""
+"Zorla IPv4 yada IPv6 ile host adı kullanılırsa bu protokol de sonuç vermez, "
+"sonuç hatalı olacaktır. Örnek verecek olursak zorla IPv4 ve host adı "
+"kullanımı sadece AAAA IPv6 IP adresi ile dönecektir, işe yaramayacaktır."
+
+#: usr/local/www/diag_testport.php:188
+msgid "Port Test Results"
+msgstr "Port Testi Sonuçları"
+
+#: usr/local/www/diag_testport.php:266
+msgid ""
+"No output received, or connection failed. Try with \"Show Remote Text\" "
+"unchecked first."
+msgstr ""
+"Çıktı alınamadı, yada bağlantı başarısız oldu. Önce \"Uzak Metin Göster\" "
+"iÅŸaretsiz yaparak deneyin."
+
+#: usr/local/www/diag_testport.php:268
+msgid "Connection failed (Refused/Timeout)"
+msgstr "Bağlantı başarısız (Reddedildi/Zaman aşımı)"
+
+#: usr/local/www/diag_traceroute.php:64
+msgid "ttl"
+msgstr "ttl"
+
+#: usr/local/www/diag_traceroute.php:68
+#, php-format
+msgid "Maximum number of hops must be between 1 and %s"
+msgstr "Maksimum atlama sayısı 1 ile %s arasında olmalıdır"
+
+#: usr/local/www/diag_traceroute.php:132
+msgid "Maximum number of hops"
+msgstr "Maksimum atlama sayısı"
+
+#: usr/local/www/diag_traceroute.php:142
+msgid "Reverse Address Lookup"
+msgstr "Ters Adres Arama"
+
+#: usr/local/www/diag_traceroute.php:148
+msgid "Use ICMP"
+msgstr "ICMP Kullan"
+
+#: usr/local/www/diag_traceroute.php:162
+#: usr/local/www/firewall_rules_edit.php:880
+#: usr/local/www/services_ntpd_gps.php:402
+#: usr/local/www/services_ntpd_gps.php:404
+msgid "Note: "
+msgstr "Not: "
+
+#: usr/local/www/diag_traceroute.php:163
+msgid ""
+"Traceroute may take a while to complete. You may hit the Stop button on your "
+"browser at any time to see the progress of failed traceroutes."
+msgstr ""
+"Traceroute işleminin tamamlanması uzun zaman alabilir. Tarayıcınızdaki "
+"durdur butonu ile başarısız traceroute sonuçlarını görebilirsiniz."
+
+#: usr/local/www/diag_traceroute.php:165
+msgid ""
+"Using a source interface/IP address that does not match selected type (IPv4, "
+"IPv6) will result in an error or empty output."
+msgstr ""
+"Kaynak arabirim/IP adresi seçilen tür (IPv4,IPv6) ya uyuşmuyor bu yüzden "
+"sonuç boş yada hatalı olacak."
+
+#: usr/local/www/diag_traceroute.php:174
+msgid "Traceroute output:"
+msgstr "Traceroute çıktısı:"
+
+#: usr/local/www/easyrule.php:42
+msgid "Firewall: EasyRule"
+msgstr ""
+
+#: usr/local/www/easyrule.php:77
+msgid "Message"
+msgstr "Mesaj"
+
+#: usr/local/www/easyrule.php:80
+msgid ""
+"This is the Easy Rule status page, mainly used to display errors when adding "
+"rules. If you are seeing this, there apparently was not an error, and you "
+"navigated to the page directly without telling it what to do"
+msgstr ""
+"Kolay Kural durum sayfası, kural eklerken oluşan hataların görüntülendiği "
+"sayfadır. Bu sayfayı görüyorsanız kural eklenirken herhangi bir hata "
+"oluşmadı ve sistem sizi otomatik olarak buraya yönlendirdi"
+
+#: usr/local/www/easyrule.php:83
+msgid ""
+"This page is meant to be called from the block/pass buttons on the Firewall "
+"Logs page"
+msgstr ""
+"Bu sayfa Güvenlik Duvarı Günlüğü sayfasındaki engelle/izin ver düğmelerinden "
+"çağırılmak üzere tasarlanmıştır"
+
+#: usr/local/www/easyrule.php:83
+msgid "System Logs, Firewall Tab"
+msgstr "Sistem Kayıtları, Güvenlik Duvarı Sekmesi"
+
+#: usr/local/www/edit.php:42
+msgid "Edit file"
+msgstr "Dosya düzenle"
+
+#: usr/local/www/edit.php:49 usr/local/www/edit.php:66
+msgid "No file name specified"
+msgstr "Dosya adı belirtilmeli"
+
+#: usr/local/www/edit.php:51
+msgid "Loading a directory is not supported"
+msgstr "Klasör yükleme desteklenmemektedir"
+
+#: usr/local/www/edit.php:53
+msgid "File does not exist or is not a regular file"
+msgstr "Dosya bulunamadı ya da tür desteklenmiyor"
+
+#: usr/local/www/edit.php:57
+msgid "Failed to read file"
+msgstr "Dosya okuma başarısız"
+
+#: usr/local/www/edit.php:78
+msgid "Failed to write file"
+msgstr "Dosya yazma başarısız"
+
+#: usr/local/www/edit.php:80
+msgid "Error while writing file"
+msgstr "Dosya yazma sırasında hata"
+
+#: usr/local/www/edit.php:82
+msgid "File successfully saved"
+msgstr "Dosya başarıyla kaydedildi"
+
+#: usr/local/www/edit.php:104
+msgid "Loading file"
+msgstr "Dosya yükleniyor"
+
+#: usr/local/www/edit.php:124
+msgid "File successfully loaded"
+msgstr "Dosya başarıyla yüklendi"
+
+#: usr/local/www/edit.php:147
+msgid "Saving file"
+msgstr "Dosya kaydediliyor"
+
+#: usr/local/www/edit.php:185
+msgid "Save / Load from path"
+msgstr "Dosya kaydet/yükle"
+
+#: usr/local/www/edit.php:187
+msgid "Load"
+msgstr "Yükle"
+
+#: usr/local/www/edit.php:188
+msgid "Browse"
+msgstr "Gözat"
+
+#: usr/local/www/exec.php:96
+msgid "Execute command"
+msgstr "Komut çalıştır"
+
+#: usr/local/www/exec.php:159
+msgid "Nothing to recall"
+msgstr "Çağırılacak herhangi bir bilgi yok"
+
+#: usr/local/www/exec.php:228
+msgid "Note: this function is unsupported. Use it on your own risk"
+msgstr "Not: Bu özellik desteklenmemektedir. Risk aldığınızı unutmayın"
+
+#: usr/local/www/exec.php:259
+msgid "Execute Shell command"
+msgstr "Kabuk komutu çalıştır"
+
+#: usr/local/www/exec.php:262 usr/local/www/exec.php:315
+msgid "Command"
+msgstr "Komut"
+
+#: usr/local/www/exec.php:270 usr/local/www/exec.php:321
+msgid "Execute"
+msgstr "Çalıştır"
+
+#: usr/local/www/exec.php:272 usr/local/www/status_upnp.php:79
+msgid "Clear"
+msgstr "Temizle"
+
+#: usr/local/www/exec.php:282
+msgid "File to download"
+msgstr "Ä°ndirilecek dosya"
+
+#: usr/local/www/exec.php:296 usr/local/www/exec.php:306
+#: usr/local/www/services_captiveportal_filemanager.php:193
+msgid "Upload"
+msgstr "Yükle"
+
+#: usr/local/www/exec.php:299
+msgid "File to upload"
+msgstr "Yüklenecek dosya"
+
+#: usr/local/www/exec.php:312
+msgid "PHP Execute"
+msgstr "PHP Çalıştır"
+
+#: usr/local/www/exec.php:323
+msgid "Example"
+msgstr "Örnek"
+
+#: usr/local/www/fbegin.inc:100 usr/local/www/firewall_nat_edit.php:550
+#: usr/local/www/firewall_rules_edit.php:1096
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_rules_edit.php:1318
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1398
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1440
+#: usr/local/www/firewall_rules_edit.php:1495
+#: usr/local/www/firewall_rules_edit.php:1522
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1621
+#: usr/local/www/firewall_rules_edit.php:1676
+#: usr/local/www/interfaces.php:1743 usr/local/www/interfaces.php:2847
+#: usr/local/www/pkg_edit.php:1129 usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcp.php:1066 usr/local/www/services_dhcp.php:1080
+#: usr/local/www/services_dhcp.php:1092 usr/local/www/services_dhcp.php:1104
+#: usr/local/www/services_dhcp.php:1116 usr/local/www/services_dhcp.php:1143
+#: usr/local/www/services_dhcp_edit.php:499
+#: usr/local/www/services_dhcp_edit.php:522
+#: usr/local/www/services_dhcp_edit.php:534
+#: usr/local/www/services_dhcpv6.php:700 usr/local/www/services_dhcpv6.php:723
+#: usr/local/www/services_dhcpv6.php:736 usr/local/www/services_dhcpv6.php:749
+#: usr/local/www/services_dhcpv6.php:761 usr/local/www/services_dhcpv6.php:776
+#: usr/local/www/services_dnsmasq.php:304
+#: usr/local/www/services_dnsmasq.php:307
+#: usr/local/www/services_dnsmasq.php:310 usr/local/www/services_ntpd.php:346
+#: usr/local/www/services_ntpd.php:366 usr/local/www/services_ntpd.php:395
+#: usr/local/www/services_ntpd_gps.php:558
+#: usr/local/www/services_unbound.php:368
+#: usr/local/www/services_unbound.php:371
+#: usr/local/www/services_unbound.php:374
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/system_gateways_edit.php:744
+#: usr/local/www/vpn_openvpn_client.php:1057
+#: usr/local/www/vpn_openvpn_csc.php:716
+#: usr/local/www/vpn_openvpn_server.php:1773
+msgid "Advanced"
+msgstr "GeliÅŸmiÅŸ"
+
+#: usr/local/www/fbegin.inc:101 usr/local/www/system_firmware.php:103
+#: usr/local/www/system_firmware.php:202
+#: usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_settings.php:87
+msgid "Firmware"
+msgstr "Üretici yazılımı"
+
+#: usr/local/www/fbegin.inc:102 usr/local/www/system.php:289
+msgid "General Setup"
+msgstr "Genel Ayarlar"
+
+#: usr/local/www/fbegin.inc:103
+msgid "High Avail. Sync"
+msgstr "Yüksek Kullanılırlık senk."
+
+#: usr/local/www/fbegin.inc:104 usr/local/www/services_captiveportal.php:1059
+msgid "Logout"
+msgstr "Güvenli Çıkış"
+
+#: usr/local/www/fbegin.inc:106
+msgid "Packages"
+msgstr "Paketler"
+
+#: usr/local/www/fbegin.inc:107
+msgid "Setup Wizard"
+msgstr "Kurulum Sihirbazı"
+
+#: usr/local/www/fbegin.inc:109
+msgid "Cert Manager"
+msgstr "Sertifika Yöneticisi"
+
+#: usr/local/www/fbegin.inc:111 usr/local/www/fbegin.inc:113
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/system_usermanager.php:58
+msgid "User Manager"
+msgstr "Kullanıcı Yönetimi"
+
+#: usr/local/www/fbegin.inc:119
+msgid "(assign)"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:131 usr/local/www/firewall_schedule.php:51
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/system_advanced_misc.php:496
+msgid "Schedules"
+msgstr "Zamanlamalar"
+
+#: usr/local/www/fbegin.inc:133 usr/local/www/firewall_virtual_ip.php:226
+msgid "Virtual IPs"
+msgstr "Sanal IPler"
+
+#: usr/local/www/fbegin.inc:140 usr/local/www/services_unbound.php:204
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+#: usr/local/www/services_unbound_host_edit.php:183
+msgid "DNS Resolver"
+msgstr "DNS Çözümleyici"
+
+#: usr/local/www/fbegin.inc:145
+msgid "DHCPv6 Server/RA"
+msgstr "DHCPv6 Sunucu/RA"
+
+#: usr/local/www/fbegin.inc:151 usr/local/www/vpn_pppoe_edit.php:239
+msgid "PPPoE Server"
+msgstr "PPPoE Sunucu"
+
+#: usr/local/www/fbegin.inc:152 usr/local/www/services_snmp.php:170
+msgid "SNMP"
+msgstr "SNMP"
+
+#: usr/local/www/fbegin.inc:157 usr/local/www/fbegin.inc:193
+msgid "UPnP &amp; NAT-PMP"
+msgstr "UPnP &amp; NAT-PMP"
+
+#: usr/local/www/fbegin.inc:166 usr/local/www/interfaces.php:1411
+#: usr/local/www/status_interfaces.php:139
+msgid "PPTP"
+msgstr "PPTP"
+
+#: usr/local/www/fbegin.inc:167 usr/local/www/interfaces.php:1411
+#: usr/local/www/status_interfaces.php:152 usr/local/www/vpn_l2tp.php:39
+#: usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+msgid "L2TP"
+msgstr "L2TP"
+
+#: usr/local/www/fbegin.inc:174
+msgid "CARP (failover)"
+msgstr "CARP (yük aktarma)"
+
+#: usr/local/www/fbegin.inc:175
+msgid "Dashboard"
+msgstr "Anasayfa"
+
+#: usr/local/www/fbegin.inc:177
+msgid "DHCP Leases"
+msgstr "DHCP Kiraları"
+
+#: usr/local/www/fbegin.inc:178
+msgid "DHCPv6 Leases"
+msgstr "DHCPv6 Kiraları"
+
+#: usr/local/www/fbegin.inc:179
+msgid "Filter Reload"
+msgstr "Filitre Yeniden Yükleme"
+
+#: usr/local/www/fbegin.inc:186
+msgid "Package Logs"
+msgstr "Paket Günlükleri"
+
+#: usr/local/www/fbegin.inc:187 usr/local/www/status_queues.php:124
+#: usr/local/www/status_rrd_graph.php:425
+#: usr/local/www/status_rrd_graph_settings.php:58
+#: usr/local/www/status_rrd_graph_settings.php:144
+msgid "Queues"
+msgstr "Kuyruklar"
+
+#: usr/local/www/fbegin.inc:188 usr/local/www/status_rrd_graph.php:260
+#: usr/local/www/status_rrd_graph_img.php:44
+#: usr/local/www/status_rrd_graph_settings.php:120
+#: usr/local/www/status_rrd_graph_settings.php:182
+msgid "RRD Graphs"
+msgstr "RRD Grafikleri"
+
+#: usr/local/www/fbegin.inc:189 usr/local/www/fbegin.inc:308
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_setting.php:100
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/services_captiveportal.php:69
+#: usr/local/www/services_captiveportal_filemanager.php:72
+#: usr/local/www/services_captiveportal_hostname.php:67
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+#: usr/local/www/services_captiveportal_ip.php:65
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+#: usr/local/www/services_captiveportal_mac.php:64
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+#: usr/local/www/services_dhcp.php:597
+#: usr/local/www/services_dhcp_edit.php:335
+#: usr/local/www/services_dhcp_relay.php:102
+#: usr/local/www/services_dhcpv6.php:375
+#: usr/local/www/services_dhcpv6_edit.php:185
+#: usr/local/www/services_dhcpv6_relay.php:103
+#: usr/local/www/services_dnsmasq.php:153
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_dnsmasq_edit.php:182
+#: usr/local/www/services_dyndns.php:61
+#: usr/local/www/services_dyndns_edit.php:181
+#: usr/local/www/services_igmpproxy.php:81 usr/local/www/services_ntpd.php:180
+#: usr/local/www/services_ntpd_gps.php:160
+#: usr/local/www/services_ntpd_pps.php:101
+#: usr/local/www/services_rfc2136.php:56
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_router_advertisements.php:194
+#: usr/local/www/services_snmp.php:170 usr/local/www/services_unbound.php:204
+#: usr/local/www/services_unbound_advanced.php:191
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+#: usr/local/www/services_unbound_host_edit.php:183
+#: usr/local/www/services_wol.php:116 usr/local/www/services_wol_edit.php:116
+#: usr/local/www/status_services.php:68
+#: usr/local/www/system_authservers.php:192
+#: usr/local/www/vpn_pppoe_edit.php:239
+msgid "Services"
+msgstr "Servisler"
+
+#: usr/local/www/fbegin.inc:190
+msgid "System Logs"
+msgstr "Sistem Kayıtları"
+
+#: usr/local/www/fbegin.inc:191 usr/local/www/status_graph.php:114
+msgid "Traffic Graph"
+msgstr "Trafik Grafikleri"
+
+#: usr/local/www/fbegin.inc:209
+msgid "Command Prompt"
+msgstr "Hızlı Komut Ekranı"
+
+#: usr/local/www/fbegin.inc:211
+msgid "Edit File"
+msgstr "Dosya Düzenle"
+
+#: usr/local/www/fbegin.inc:212
+msgid "Factory Defaults"
+msgstr "Fabrika Ayarları"
+
+#: usr/local/www/fbegin.inc:217
+msgid "Halt System"
+msgstr "Sistemi Kapat"
+
+#: usr/local/www/fbegin.inc:218
+msgid "Limiter Info"
+msgstr "Limitleyici Bilgisi"
+
+#: usr/local/www/fbegin.inc:224
+msgid "pfInfo"
+msgstr "pfBilgi"
+
+#: usr/local/www/fbegin.inc:225
+msgid "pfTop"
+msgstr "pfTop"
+
+#: usr/local/www/fbegin.inc:226
+msgid "Reboot"
+msgstr "Yeniden BaÅŸlat"
+
+#: usr/local/www/fbegin.inc:227 usr/local/www/system_gateway_groups.php:120
+#: usr/local/www/system_gateways.php:204 usr/local/www/system_routes.php:221
+msgid "Routes"
+msgstr "Yönlendirmeler"
+
+#: usr/local/www/fbegin.inc:228
+#: usr/local/www/widgets/widgets/smart_status.widget.php:40
+msgid "SMART Status"
+msgstr "SMART Durumu"
+
+#: usr/local/www/fbegin.inc:231
+msgid "States Summary"
+msgstr "Durum Özeti"
+
+#: usr/local/www/fbegin.inc:232
+msgid "System Activity"
+msgstr "Sistem EtkinliÄŸi"
+
+#: usr/local/www/fbegin.inc:239
+msgid "Restart HTTPD"
+msgstr "HTTPD Yeniden BaÅŸlat"
+
+#: usr/local/www/fbegin.inc:245
+msgid "pfSense Gold"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:250
+msgid "About this Page"
+msgstr "Sayfa Hakkında"
+
+#: usr/local/www/fbegin.inc:252
+msgid "Bug Database"
+msgstr "Hata Veritabanı"
+
+#: usr/local/www/fbegin.inc:253
+msgid "User Forum"
+msgstr "Kullanıcı Forum"
+
+#: usr/local/www/fbegin.inc:254
+msgid "Documentation"
+msgstr "Dökümantasyon"
+
+#: usr/local/www/fbegin.inc:255
+msgid "Developers Wiki"
+msgstr "Wiki GeliÅŸtiricileri"
+
+#: usr/local/www/fbegin.inc:256
+msgid "Paid Support"
+msgstr "Ödemeli Destek"
+
+#: usr/local/www/fbegin.inc:257
+msgid "pfSense Book"
+msgstr "pfSense Kitabı"
+
+#: usr/local/www/fbegin.inc:258
+msgid "Search portal"
+msgstr "Arama portalı"
+
+#: usr/local/www/fbegin.inc:259
+msgid "FreeBSD Handbook"
+msgstr "FreeBSD El Kitapçığı"
+
+#: usr/local/www/fbegin.inc:340
+msgid "Gold"
+msgstr ""
+
+#: usr/local/www/fbegin.inc:349
+msgid "Help"
+msgstr "Yardım"
+
+#: usr/local/www/fbegin.inc:428
+msgid "Help for items on this page"
+msgstr "Bu sayfadakı öğeler için yardım"
+
+#: usr/local/www/fbegin.inc:438
+msgid ""
+"Packages are currently being reinstalled in the background.<p>Do not make "
+"changes in the GUI until this is complete."
+msgstr ""
+"Åžu anda paketler arkaplanda yeniden kuruluyor.<p>Bu iÅŸlem tamamlanana kadar "
+"arayüzde değişiklik yapmayın."
+
+#: usr/local/www/firewall_aliases.php:109
+#, php-format
+msgid "Cannot delete alias. Currently in use by %s"
+msgstr "%s tarafından kullanıldığı için grup silinemiyor"
+
+#: usr/local/www/firewall_aliases.php:169
+msgid "The alias list has been changed."
+msgstr "Grup listesi deÄŸiÅŸtirildi."
+
+#: usr/local/www/firewall_aliases.php:169 usr/local/www/firewall_nat.php:184
+#: usr/local/www/firewall_nat_1to1.php:162
+#: usr/local/www/firewall_nat_npt.php:90
+#: usr/local/www/firewall_nat_out.php:226
+#: usr/local/www/firewall_shaper.php:406
+#: usr/local/www/firewall_shaper_layer7.php:402
+#: usr/local/www/firewall_shaper_queues.php:189
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+#: usr/local/www/firewall_virtual_ip.php:218 usr/local/www/interfaces.php:1633
+#: usr/local/www/load_balancer_monitor.php:101
+#: usr/local/www/load_balancer_relay_protocol.php:113
+#: usr/local/www/load_balancer_setting.php:112
+#: usr/local/www/load_balancer_virtual_server.php:111
+#: usr/local/www/services_captiveportal_zones.php:75
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:482
+#: usr/local/www/services_dnsmasq.php:182
+#: usr/local/www/services_igmpproxy.php:91
+#: usr/local/www/services_unbound_acls.php:179
+#: usr/local/www/services_unbound_advanced.php:204
+#: usr/local/www/system_gateways.php:196 usr/local/www/vpn_ipsec.php:231
+#: usr/local/www/vpn_ipsec_keys.php:92 usr/local/www/vpn_ipsec_mobile.php:331
+#: usr/local/www/vpn_pppoe.php:99
+msgid "You must apply the changes in order for them to take effect."
+msgstr "DeÄŸiÅŸiklikleri uygulayarak etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#: usr/local/www/firewall_aliases.php:178
+msgid "Ports"
+msgstr "Portlar"
+
+#: usr/local/www/firewall_aliases.php:179
+msgid "URLs"
+msgstr ""
+
+#: usr/local/www/firewall_aliases.php:192
+#: usr/local/www/services_igmpproxy.php:98
+msgid "Values"
+msgstr "DeÄŸerler"
+
+#: usr/local/www/firewall_aliases.php:198
+#: usr/local/www/firewall_aliases.php:278
+msgid "Add a new alias"
+msgstr "Yeni grup ekle"
+
+#: usr/local/www/firewall_aliases.php:260
+msgid "Edit alias"
+msgstr "Grup düzenle"
+
+#: usr/local/www/firewall_aliases.php:261
+msgid ""
+"Do you really want to delete this alias? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+"Bu grup tanımını silmek istediğinize emin misiniz? Bu tanımı kullanan tüm "
+"nesneler (örn. filtre kuralları) devre dışı kalacaktır!"
+
+#: usr/local/www/firewall_aliases.php:261
+msgid "Delete alias"
+msgstr "Grup sil"
+
+#: usr/local/www/firewall_aliases.php:281
+msgid "Bulk import aliases from list"
+msgstr "Grupları listeden içeri aktar"
+
+#: usr/local/www/firewall_aliases.php:291
+msgid ""
+"Aliases act as placeholders for real hosts, networks or ports. They can be "
+"used to minimize the number of changes that have to be made if a host, "
+"network or port changes. You can enter the name of an alias instead of the "
+"host, network or port in all fields that have a red background. The alias "
+"will be resolved according to the list above. If an alias cannot be resolved "
+"(e.g. because you deleted it), the corresponding element (e.g. filter/NAT/"
+"shaper rule) will be considered invalid and skipped."
+msgstr ""
+"Gruplar gerçek bilgisayarlar, ağlar ya da portlar için taşıyıcı gibidir. "
+"Bilgisayarlar, ağlar ya da portlar değiştiğinde yapılması gereken değişiklik "
+"sayısını azaltmak için kullanılabilirler. Arkaplan rengi kırmızı tüm "
+"alanlarda IP, ağ veya port girmek yerine grup adı girebilirsiniz. Girdiğiniz "
+"grup yukarıdaki listeye göre çözümlenir. Eğer bir grup çözümlenemezse (örn. "
+"sildiğiniz için), grup adının girildiği öğe (örn. güvenlik duvarı kuralı) "
+"geçersiz kabul edilir ve atlanır."
+
+#: usr/local/www/firewall_aliases_edit.php:53
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out_edit.php:343
+#: usr/local/www/firewall_rules_edit.php:805
+#: usr/local/www/firewall_schedule_edit.php:62
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+#: usr/local/www/interfaces_bridge_edit.php:240
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq_edit.php:40
+#: usr/local/www/interfaces_vlan_edit.php:152
+#: usr/local/www/interfaces_wireless_edit.php:151
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/pkg_edit.php:259 usr/local/www/services_igmpproxy_edit.php:46
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_wol_edit.php:116
+#: usr/local/www/vpn_l2tp_users_edit.php:39
+#: usr/local/www/vpn_pppoe_edit.php:239
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "Edit"
+msgstr "Düzenle"
+
+#: usr/local/www/firewall_aliases_edit.php:126
+msgid ""
+"Vertical bars (|) at start or end, or double in the middle of descriptions "
+"not allowed. Descriptions have been cleaned. Check and save again."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:137
+#: usr/local/www/firewall_aliases_edit.php:139
+msgid "Reserved word used for alias name."
+msgstr "Grup için bu isim kullanılamaz."
+
+#: usr/local/www/firewall_aliases_edit.php:142
+msgid ""
+"The alias name must be less than 32 characters long, may not consist of only "
+"numbers, and may only contain the following characters"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:148
+#: usr/local/www/firewall_aliases_import.php:77
+msgid "An alias with this name already exists."
+msgstr "Bu isimde bir grup adı zaten var."
+
+#: usr/local/www/firewall_aliases_edit.php:157
+#: usr/local/www/firewall_aliases_import.php:83
+#, php-format
+msgid "Cannot use a reserved keyword as alias name %s"
+msgstr "Ayrılmış kelime %s grup adı olarak kullanılamaz"
+
+#: usr/local/www/firewall_aliases_edit.php:162
+#: usr/local/www/firewall_aliases_import.php:88
+msgid "An interface description with this name already exists."
+msgstr "Bu isimde bir arabirim açıklaması zaten var."
+
+#: usr/local/www/firewall_aliases_edit.php:185
+msgid "You must provide a valid URL."
+msgstr "Geçerli bir URL girmelisiniz."
+
+#: usr/local/www/firewall_aliases_edit.php:187
+msgid "Unable to fetch usable data."
+msgstr "Kullanılabilir veri toplanamadı."
+
+#: usr/local/www/firewall_aliases_edit.php:199
+#: usr/local/www/firewall_aliases_edit.php:241
+#: usr/local/www/firewall_aliases_edit.php:306
+#, php-format
+msgid "Entry added %s"
+msgstr "%s girdisi eklendi"
+
+# 85%
+#: usr/local/www/firewall_aliases_edit.php:270
+#, php-format
+msgid "You must provide a valid URL. Could not fetch usable data from '%s'."
+msgstr "Geçerli bir URL sağlamalısınız. Kullanılabilir veri toplanamadı '%s'."
+
+#: usr/local/www/firewall_aliases_edit.php:274
+#, php-format
+msgid "URL '%s' is not valid."
+msgstr "URL '%s' geçerli değil."
+
+#: usr/local/www/firewall_aliases_edit.php:337
+#, php-format
+msgid "Range is too large to expand into individual host IP addresses (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:338
+#: usr/local/www/firewall_aliases_edit.php:366
+#, php-format
+msgid "The maximum number of entries in an alias is %s"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:346
+#: usr/local/www/firewall_aliases_import.php:113
+#, php-format
+msgid "IPv6 address ranges are not supported (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:365
+#, php-format
+msgid "Subnet is too large to expand into individual host IP addresses (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:373
+#, php-format
+msgid "IPv6 subnets are not supported in host aliases (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:400
+#, php-format
+msgid "The maximum number of entries in an alias has been exceeded (%s)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:417
+msgid "is not a valid port or alias."
+msgstr "geçerli bir port veya grup adı değil."
+
+#: usr/local/www/firewall_aliases_edit.php:421
+#, php-format
+msgid "%1$s is not a valid %2$s address, FQDN or alias."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:426
+#, php-format
+msgid "%s/%s is not a valid subnet."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:434
+#, php-format
+msgid ""
+"The alias(es): %s cannot be nested because they are not of the same type."
+msgstr "Grup ad(lar)ı: %s aynı türde olmadığından gruplanamaz."
+
+#: usr/local/www/firewall_aliases_edit.php:580
+msgid "Network or FQDN"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:581
+#: usr/local/www/firewall_aliases_edit.php:775
+msgid "Network(s)"
+msgstr "AÄŸ(lar)"
+
+#: usr/local/www/firewall_aliases_edit.php:582
+#: usr/local/www/services_igmpproxy_edit.php:229
+#: usr/local/www/services_unbound_acls.php:241
+msgid "CIDR"
+msgstr "CIDR"
+
+#: usr/local/www/firewall_aliases_edit.php:584
+#: usr/local/www/firewall_aliases_edit.php:774
+#: usr/local/www/firewall_aliases_edit.php:786
+msgid "Host(s)"
+msgstr "Ä°stemci(ler)"
+
+#: usr/local/www/firewall_aliases_edit.php:585
+msgid "IP or FQDN"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:586
+#: usr/local/www/firewall_aliases_edit.php:776
+msgid "Port(s)"
+msgstr "Port(lar)"
+
+#: usr/local/www/firewall_aliases_edit.php:588
+#: usr/local/www/firewall_aliases_edit.php:778
+msgid "URL (IPs)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:589
+#: usr/local/www/firewall_aliases_edit.php:779
+msgid "URL (Ports)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:590
+#: usr/local/www/firewall_aliases_edit.php:780
+msgid "URL Table (IPs)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:591
+#: usr/local/www/firewall_aliases_edit.php:781
+msgid "URL Table (Ports)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:592
+msgid "Update Freq. (days)"
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:594
+msgid ""
+"Networks are specified in CIDR format. Select the CIDR mask that pertains "
+"to each entry. /32 specifies a single IPv4 host, /128 specifies a single "
+"IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, "
+"etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 "
+"or /128 for IPv6. You may also enter an IP range such as "
+"192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to "
+"fill the range."
+msgstr ""
+"Ağlar bit sayısıyla CIDR biçiminde belirtilir. Her girdi için bir CIDR "
+"maskesi seçmelisiniz. /32 tek bir istemciyi belirtir, /128 tek IPv6 sunucusu "
+"belirtir, /24 255.255.255.0 belirtir, /64 normal IPv6 aÄŸ belirtir, vb. /32 "
+"maskesiyle IPv4 yada IPv6 için /128 maskesi ile sunucu isimleri (FQDNler) de "
+"belirtebilirsiniz. 192.168.1.1-192.168.1.254 gibi IP aralıkları da "
+"belirtebilirsiniz, bu durumda aralığı belirtecek CIDR otomatik belirlenir."
+
+#: usr/local/www/firewall_aliases_edit.php:595
+msgid ""
+"Enter as many hosts as you would like. Hosts must be specified by their IP "
+"address or fully qualified domain name (FQDN). FQDN hostnames are "
+"periodically re-resolved and updated. If multiple IPs are returned by a DNS "
+"query, all are used. You may also enter an IP range such as "
+"192.168.1.1-192.168.1.10 or a small subnet such as 192.168.1.16/28 and a "
+"list of individual IP addresses will be generated."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:596
+msgid ""
+"Enter as many ports as you wish. Port ranges can be expressed by separating "
+"with a colon."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:597
+#, php-format
+msgid ""
+"Enter as many URLs as you wish. After saving %s will download the URL and "
+"import the items into the alias. Use only with small sets of IP addresses "
+"(less than 3000)."
+msgstr ""
+"İstediğiniz sayıda URL girebilirsiniz. Kaydettikten sonra %s URL'yi indirip "
+"öğeleri gruba aktarır. Sadece küçük IP adresi gruplarında (3000'den az) "
+"kullanın."
+
+#: usr/local/www/firewall_aliases_edit.php:598
+#, php-format
+msgid ""
+"Enter as many URLs as you wish. After saving %s will download the URL and "
+"import the items into the alias. Use only with small sets of Ports (less "
+"than 3000)."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:599
+#, php-format
+msgid ""
+"Enter a single URL containing a large number of IPs and/or Subnets. After "
+"saving %s will download the URL and create a table file containing these "
+"addresses. This will work with large numbers of addresses (30,000+) or small "
+"numbers."
+msgstr ""
+"Çok sayıda IP veya altağ içeren tek bir URL girin. Kaydettikten sonra %s "
+"URL'yi indirip bu adresleri içeren bir tablo dosyası oluşturur. Hem küçük "
+"sayılarla hem de çok sayıda adresle (300 binden fazla) çalışır."
+
+#: usr/local/www/firewall_aliases_edit.php:600
+#, php-format
+msgid ""
+"Enter a single URL containing a list of Port numbers and/or Port ranges. "
+"After saving %s will download the URL."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_edit.php:603
+#: usr/local/www/firewall_aliases_edit.php:777
+msgid "OpenVPN Users"
+msgstr "OpenVPN Kullanıcıları"
+
+#: usr/local/www/firewall_aliases_edit.php:604
+msgid "Enter as many usernames as you wish."
+msgstr "İstediğiniz sayıda kullanıcı adı girebilirsiniz."
+
+#: usr/local/www/firewall_aliases_edit.php:743
+msgid "Alias Edit"
+msgstr "Grup Düzenle"
+
+#: usr/local/www/firewall_aliases_edit.php:755
+msgid ""
+"The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and "
+"_\"."
+msgstr "Grup adı \"a-z, A-Z, 0-9 ve _\" karakterleri içerebilir."
+
+#: usr/local/www/firewall_aliases_edit.php:771
+#: usr/local/www/firewall_virtual_ip.php:241
+#: usr/local/www/firewall_virtual_ip_edit.php:110
+#: usr/local/www/firewall_virtual_ip_edit.php:384
+#: usr/local/www/load_balancer_monitor.php:123
+#: usr/local/www/load_balancer_monitor_edit.php:91
+#: usr/local/www/load_balancer_monitor_edit.php:249
+#: usr/local/www/load_balancer_relay_action.php:140
+#: usr/local/www/load_balancer_relay_action_edit.php:464
+#: usr/local/www/load_balancer_relay_protocol.php:134
+#: usr/local/www/load_balancer_relay_protocol_edit.php:82
+#: usr/local/www/load_balancer_relay_protocol_edit.php:202
+#: usr/local/www/services_captiveportal.php:894
+#: usr/local/www/services_dhcp.php:1157
+#: usr/local/www/services_igmpproxy.php:97
+#: usr/local/www/services_igmpproxy_edit.php:190
+#: usr/local/www/status_ntpd.php:182 usr/local/www/system_authservers.php:167
+#: usr/local/www/system_authservers.php:190
+#: usr/local/www/system_authservers.php:476
+#: usr/local/www/system_authservers.php:806
+#: usr/local/www/system_certmanager.php:805
+#: usr/local/www/vpn_ipsec_phase2.php:582
+#: usr/local/www/vpn_ipsec_phase2.php:617
+#: usr/local/www/vpn_ipsec_phase2.php:659
+msgid "Type"
+msgstr "Tür"
+
+#: usr/local/www/firewall_aliases_edit.php:792
+msgid "Item information"
+msgstr "Öğe Bilgisi"
+
+#: usr/local/www/firewall_aliases_edit.php:796
+#: usr/local/www/firewall_nat_1to1_edit.php:368
+#: usr/local/www/firewall_nat_1to1_edit.php:442
+#: usr/local/www/firewall_nat_edit.php:571
+#: usr/local/www/firewall_nat_edit.php:660
+#: usr/local/www/firewall_nat_out_edit.php:542
+#: usr/local/www/firewall_nat_out_edit.php:593
+#: usr/local/www/firewall_rules_edit.php:1057
+#: usr/local/www/firewall_rules_edit.php:1160
+#: usr/local/www/firewall_virtual_ip_edit.php:424
+#: usr/local/www/services_igmpproxy_edit.php:228
+#: usr/local/www/services_unbound_acls.php:240
+#: usr/local/www/system_routes.php:234 usr/local/www/vpn_ipsec_mobile.php:435
+#: usr/local/www/vpn_ipsec_phase2.php:587
+#: usr/local/www/vpn_ipsec_phase2.php:622
+#: usr/local/www/vpn_ipsec_phase2.php:664
+msgid "Network"
+msgstr "AÄŸ"
+
+#: usr/local/www/firewall_aliases_edit.php:830
+#: usr/local/www/services_dnsmasq_edit.php:279
+#: usr/local/www/services_router_advertisements.php:345
+#: usr/local/www/services_unbound_host_edit.php:283
+#: usr/local/www/system_certmanager.php:825
+msgid "remove this entry"
+msgstr "bu girdiyi sil"
+
+#: usr/local/www/firewall_aliases_edit.php:843
+#: usr/local/www/firewall_shaper_layer7.php:556
+#: usr/local/www/interfaces_groups_edit.php:322
+#: usr/local/www/interfaces_qinq_edit.php:390
+#: usr/local/www/services_dhcp.php:1197 usr/local/www/services_dhcpv6.php:817
+#: usr/local/www/services_dnsmasq_edit.php:290
+#: usr/local/www/services_igmpproxy_edit.php:275
+#: usr/local/www/services_router_advertisements.php:363
+#: usr/local/www/services_unbound_acls.php:281
+#: usr/local/www/services_unbound_host_edit.php:295
+#: usr/local/www/system_certmanager.php:837
+#: usr/local/www/vpn_pppoe_edit.php:586
+msgid "add another entry"
+msgstr "baÅŸka giriÅŸ ekle"
+
+#: usr/local/www/firewall_aliases_edit.php:852
+#: usr/local/www/firewall_aliases_import.php:216
+#: usr/local/www/firewall_nat_1to1_edit.php:537
+#: usr/local/www/firewall_nat_edit.php:897
+#: usr/local/www/firewall_nat_npt_edit.php:279
+#: usr/local/www/firewall_nat_out_edit.php:829
+#: usr/local/www/firewall_rules_edit.php:1262
+#: usr/local/www/firewall_rules_edit.php:1739
+#: usr/local/www/firewall_schedule_edit.php:1169
+#: usr/local/www/firewall_shaper_layer7.php:569
+#: usr/local/www/firewall_virtual_ip_edit.php:510
+#: usr/local/www/interfaces.php:1856 usr/local/www/interfaces.php:1962
+#: usr/local/www/interfaces.php:3380
+#: usr/local/www/interfaces_bridge_edit.php:605
+#: usr/local/www/interfaces_gif_edit.php:234
+#: usr/local/www/interfaces_gre_edit.php:237
+#: usr/local/www/interfaces_groups_edit.php:334
+#: usr/local/www/interfaces_lagg_edit.php:236
+#: usr/local/www/interfaces_ppps_edit.php:796
+#: usr/local/www/interfaces_qinq_edit.php:398
+#: usr/local/www/interfaces_vlan_edit.php:204
+#: usr/local/www/interfaces_wireless_edit.php:202
+#: usr/local/www/load_balancer_monitor_edit.php:359
+#: usr/local/www/load_balancer_pool_edit.php:335
+#: usr/local/www/load_balancer_relay_action_edit.php:559
+#: usr/local/www/load_balancer_relay_protocol_edit.php:282
+#: usr/local/www/load_balancer_virtual_server_edit.php:280
+#: usr/local/www/pkg_edit.php:942
+#: usr/local/www/services_captiveportal.php:1082
+#: usr/local/www/services_captiveportal_vouchers.php:637
+#: usr/local/www/services_dhcp_edit.php:546
+#: usr/local/www/services_dhcpv6_edit.php:250
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:165
+#: usr/local/www/services_dnsmasq_edit.php:306
+#: usr/local/www/services_dyndns_edit.php:425
+#: usr/local/www/services_igmpproxy_edit.php:283
+#: usr/local/www/services_rfc2136_edit.php:215
+#: usr/local/www/services_unbound_acls.php:311
+#: usr/local/www/services_unbound_domainoverride_edit.php:160
+#: usr/local/www/services_unbound_host_edit.php:311
+#: usr/local/www/services_wol_edit.php:162
+#: usr/local/www/system_advanced_sysctl.php:270
+#: usr/local/www/system_gateway_groups_edit.php:348
+#: usr/local/www/system_gateways_edit.php:862
+#: usr/local/www/system_groupmanager.php:461
+#: usr/local/www/system_groupmanager_addprivs.php:227
+#: usr/local/www/system_hasync.php:348
+#: usr/local/www/system_routes_edit.php:302
+#: usr/local/www/system_routes_edit.php:333
+#: usr/local/www/system_usermanager.php:883
+#: usr/local/www/system_usermanager_addprivs.php:196
+#: usr/local/www/vpn_l2tp_users_edit.php:183
+#: usr/local/www/vpn_pppoe_edit.php:605
+msgid "Cancel"
+msgstr "Ä°ptal"
+
+#: usr/local/www/firewall_aliases_import.php:50
+msgid "Bulk import"
+msgstr "Toplu İçeri Aktarım"
+
+#: usr/local/www/firewall_aliases_import.php:73
+msgid "The alias name may only consist of the characters"
+msgstr "Grup adı sadece karakterlerden oluşmalıdır"
+
+#: usr/local/www/firewall_aliases_import.php:115
+#, php-format
+msgid "%s is not an IP address. Please correct the error to continue"
+msgstr "%s bir IP adresi değildir. Devam etmek için hatayı düzeltiniz"
+
+#: usr/local/www/firewall_aliases_import.php:123
+msgid ""
+"Descriptions may not start or end with vertical bar (|) or contain double "
+"vertical bar ||."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:132
+msgid "Descriptions must be less than 200 characters long."
+msgstr ""
+
+#: usr/local/www/firewall_aliases_import.php:172
+msgid "Alias Import"
+msgstr "Grup İçeri Aktar"
+
+#: usr/local/www/firewall_aliases_import.php:175
+msgid "Alias Name"
+msgstr "Grup Adı"
+
+#: usr/local/www/firewall_aliases_import.php:180
+msgid ""
+"The name of the alias may only consist of the characters \"a-z, A-Z and "
+"0-9\"."
+msgstr "Grup adı sadece \"a-z, A-Z and 0-9\" karakterleri içerebilir."
+
+#: usr/local/www/firewall_aliases_import.php:190
+#: usr/local/www/interfaces_lagg_edit.php:228
+#: usr/local/www/services_captiveportal_hostname_edit.php:189
+#: usr/local/www/services_captiveportal_ip_edit.php:206
+#: usr/local/www/services_captiveportal_mac_edit.php:222
+#: usr/local/www/services_captiveportal_zones_edit.php:110
+#: usr/local/www/system_gateways_edit.php:855
+#: usr/local/www/vpn_ipsec_phase1.php:665
+#: usr/local/www/vpn_ipsec_phase2.php:696
+#: usr/local/www/vpn_openvpn_client.php:667
+#: usr/local/www/vpn_openvpn_csc.php:368
+#: usr/local/www/vpn_openvpn_server.php:896
+msgid "You may enter a description here for your reference (not parsed)"
+msgstr ""
+"Bu alana kendiniz için herhangi bir açıklama girebilirsiniz, (sistem dikkate "
+"almayacaktır)"
+
+#: usr/local/www/firewall_aliases_import.php:195
+msgid "Aliases to import"
+msgstr "İçeri aktarılacak gruplar"
+
+#: usr/local/www/firewall_aliases_import.php:200
+msgid ""
+"Paste in the aliases to import separated by a carriage return. Common "
+"examples are lists of IPs, networks, blacklists, etc."
+msgstr ""
+"Grupları her satıra ayrı bir tane gelecek şekilde bu alana yapıştırın. Genel "
+"örnekler IPler, ağlar, karalisteler ve benzerleridir."
+
+#: usr/local/www/firewall_aliases_import.php:202
+msgid ""
+"The list may contain IP addresses, with or without CIDR prefix, IP ranges, "
+"blank lines (ignored) and an optional description after each IP. e.g.:"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:167 usr/local/www/firewall_nat.php:190
+#: usr/local/www/firewall_nat_1to1.php:169
+#: usr/local/www/firewall_nat_edit.php:457
+#: usr/local/www/firewall_nat_npt.php:95
+#: usr/local/www/firewall_nat_out.php:233
+msgid "Port Forward"
+msgstr "Port Yönlendirme"
+
+#: usr/local/www/firewall_nat.php:184 usr/local/www/firewall_nat_npt.php:90
+msgid "The NAT configuration has been changed"
+msgstr "NAT yapılandırması değiştirildi"
+
+#: usr/local/www/firewall_nat.php:191 usr/local/www/firewall_nat_1to1.php:148
+#: usr/local/www/firewall_nat_1to1.php:170
+#: usr/local/www/firewall_nat_1to1_edit.php:227
+#: usr/local/www/firewall_nat_npt.php:96
+#: usr/local/www/firewall_nat_out.php:234
+msgid "1:1"
+msgstr "1:1"
+
+#: usr/local/www/firewall_nat.php:192 usr/local/www/firewall_nat_1to1.php:171
+#: usr/local/www/firewall_nat_npt.php:97
+#: usr/local/www/firewall_nat_out.php:214
+#: usr/local/www/firewall_nat_out.php:235
+#: usr/local/www/firewall_nat_out_edit.php:343
+msgid "Outbound"
+msgstr "Dışarı giden"
+
+#: usr/local/www/firewall_nat.php:193 usr/local/www/firewall_nat_1to1.php:172
+#: usr/local/www/firewall_nat_npt.php:81 usr/local/www/firewall_nat_npt.php:98
+#: usr/local/www/firewall_nat_npt_edit.php:148
+#: usr/local/www/firewall_nat_out.php:236
+msgid "NPt"
+msgstr "NPt"
+
+#: usr/local/www/firewall_nat.php:206
+msgid "Src. addr"
+msgstr "Kyn. adres"
+
+#: usr/local/www/firewall_nat.php:207
+msgid "Src. ports"
+msgstr "Kyn. portlar"
+
+#: usr/local/www/firewall_nat.php:208
+msgid "Dest. addr"
+msgstr "Hdf. adres"
+
+#: usr/local/www/firewall_nat.php:209
+msgid "Dest. ports"
+msgstr "Hdf. portlar"
+
+#: usr/local/www/firewall_nat.php:210
+msgid "NAT IP"
+msgstr "NAT IP"
+
+#: usr/local/www/firewall_nat.php:211
+msgid "NAT Ports"
+msgstr "NAT Portları"
+
+#: usr/local/www/firewall_nat.php:218 usr/local/www/firewall_nat.php:220
+#: usr/local/www/firewall_nat.php:349 usr/local/www/firewall_nat.php:351
+#: usr/local/www/firewall_nat_1to1.php:321
+#: usr/local/www/firewall_nat_out.php:515 usr/local/www/firewall_rules.php:367
+#: usr/local/www/firewall_rules.php:368 usr/local/www/firewall_rules.php:804
+#: usr/local/www/firewall_rules.php:805
+msgid "delete selected rules"
+msgstr "seçili kuralları sil"
+
+#: usr/local/www/firewall_nat.php:220 usr/local/www/firewall_nat.php:351
+#: usr/local/www/firewall_rules.php:368 usr/local/www/firewall_rules.php:805
+msgid "Do you really want to delete the selected rules?"
+msgstr "Seçili kuralları silmek istediğinize emin misiniz?"
+
+#: usr/local/www/firewall_nat.php:269
+msgid "All traffic matching this NAT entry is passed"
+msgstr "Bu NAT girişine uyan tüm trafik geçirilir"
+
+#: usr/local/www/firewall_nat.php:271
+msgid "Firewall rule ID"
+msgstr "Güvenlik duvarı kuralı"
+
+#: usr/local/www/firewall_nat.php:271
+msgid "is managed with this rule"
+msgstr "bu kural tarafından yönetilmektedir"
+
+#: usr/local/www/firewall_nat.php:326 usr/local/www/firewall_nat_1to1.php:260
+#: usr/local/www/firewall_nat_out.php:460 usr/local/www/firewall_rules.php:402
+#: usr/local/www/firewall_rules.php:431 usr/local/www/firewall_rules.php:459
+#: usr/local/www/firewall_rules.php:750
+msgid "move selected rules before this rule"
+msgstr "seçili kuralları bu kuralın üstüne taşı"
+
+#: usr/local/www/firewall_nat.php:327 usr/local/www/firewall_nat_1to1.php:265
+#: usr/local/www/firewall_nat_npt.php:160 usr/local/www/firewall_rules.php:403
+#: usr/local/www/firewall_rules.php:432 usr/local/www/firewall_rules.php:460
+#: usr/local/www/firewall_rules.php:751
+msgid "edit rule"
+msgstr "kuralı düzenle"
+
+#: usr/local/www/firewall_nat.php:330 usr/local/www/firewall_nat_1to1.php:271
+#: usr/local/www/firewall_nat_out.php:469
+msgid "Do you really want to delete this rule?"
+msgstr "Bu kuralı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/firewall_nat.php:330 usr/local/www/firewall_nat_1to1.php:272
+#: usr/local/www/firewall_nat_npt.php:161
+#: usr/local/www/firewall_nat_out.php:470 usr/local/www/firewall_rules.php:754
+msgid "delete rule"
+msgstr "kuralı sil"
+
+#: usr/local/www/firewall_nat.php:331 usr/local/www/firewall_nat_out.php:475
+msgid "add a new NAT based on this one"
+msgstr ""
+
+#: usr/local/www/firewall_nat.php:344 usr/local/www/firewall_rules.php:798
+msgid "move selected rules to end"
+msgstr "seçili kuralları sona taşı"
+
+#: usr/local/www/firewall_nat.php:362 usr/local/www/firewall_rules.php:817
+msgid "pass"
+msgstr "izin ver"
+
+#: usr/local/www/firewall_nat.php:366
+msgid "linked rule"
+msgstr "iliÅŸkilendirilmiÅŸ kural"
+
+#: usr/local/www/firewall_nat_1to1.php:160
+#: usr/local/www/firewall_nat_out.php:226
+msgid "The NAT configuration has been changed."
+msgstr "NAT yapılandırması değiştirildi."
+
+#: usr/local/www/firewall_nat_1to1.php:183
+msgid "External IP"
+msgstr "Dış IP"
+
+#: usr/local/www/firewall_nat_1to1.php:184
+#: usr/local/www/firewall_nat_1to1_edit.php:348
+#: usr/local/www/status_upnp.php:89
+msgid "Internal IP"
+msgstr "İç IP"
+
+#: usr/local/www/firewall_nat_1to1.php:185
+msgid "Destination IP"
+msgstr "Hedef IP"
+
+#: usr/local/www/firewall_nat_1to1.php:193
+#: usr/local/www/firewall_nat_npt.php:115
+#: usr/local/www/firewall_nat_npt.php:173
+msgid "add rule"
+msgstr "kural ekle"
+
+#: usr/local/www/firewall_nat_1to1.php:219
+#: usr/local/www/firewall_nat_out.php:371 usr/local/www/firewall_rules.php:507
+#: usr/local/www/system_gateways.php:272 usr/local/www/system_gateways.php:278
+#: usr/local/www/system_routes.php:264 usr/local/www/vpn_ipsec.php:300
+#: usr/local/www/vpn_ipsec.php:475
+msgid "click to toggle enabled/disabled status"
+msgstr "açık/kapalı durumunu değiştirmek için tıklayın"
+
+#: usr/local/www/firewall_nat_1to1.php:277
+#: usr/local/www/firewall_rules.php:407 usr/local/www/firewall_rules.php:436
+#: usr/local/www/firewall_rules.php:464 usr/local/www/firewall_rules.php:755
+msgid "add a new rule based on this one"
+msgstr "bu kuralı temel alan yeni bir kural ekle"
+
+#: usr/local/www/firewall_nat_1to1.php:298
+#: usr/local/www/firewall_nat_1to1.php:303
+#: usr/local/www/firewall_nat_out.php:495
+#: usr/local/www/firewall_nat_out.php:499
+msgid "move selected mappings to end"
+msgstr "seçili eşlemeleri sona taşı"
+
+#: usr/local/www/firewall_nat_1to1.php:311
+#: usr/local/www/firewall_nat_out.php:320
+#: usr/local/www/firewall_nat_out.php:506
+msgid "add new mapping"
+msgstr "yeni eÅŸleme ekle"
+
+#: usr/local/www/firewall_nat_1to1.php:326
+#: usr/local/www/firewall_nat_out.php:519
+msgid "delete selected mappings"
+msgstr "seçili eşlemeleri sil"
+
+#: usr/local/www/firewall_nat_1to1.php:327
+#: usr/local/www/firewall_nat_out.php:519
+msgid "Do you really want to delete the selected mappings?"
+msgstr "Seçili eşlemeleri silmek istediğinize emin misiniz?"
+
+#: usr/local/www/firewall_nat_1to1.php:340
+msgid "Depending on the way your WAN connection is setup, you may also need a"
+msgstr ""
+"WAN bağlantı yapılandırmanıza bağlı olarak ayrıca ihtiyaç duyabilirsiniz"
+
+#: usr/local/www/firewall_nat_1to1.php:341
+msgid "Virtual IP."
+msgstr "bir Sanal IP."
+
+#: usr/local/www/firewall_nat_1to1.php:342
+msgid ""
+"If you add a 1:1 NAT entry for any of the interface IPs on this system, it "
+"will make this system inaccessible on that IP address. i.e. if you use your "
+"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) "
+"using the WAN IP address will no longer function."
+msgstr ""
+"Eğer 1:1 NAT girdisi olarak bu sistem üzerindeki herhangi bir arabirimin IP "
+"adresini tanımlarsanız, belirtilen IP adresinden sisteme erişemezsiniz. "
+"Örneğin WAN IP adresinizi kullanırsanız o sistem üzerindeki servisler "
+"(örneğin IPsec, OpenVPN, vb.) çalışmaz hale gelir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:112
+#: usr/local/www/firewall_nat_out_edit.php:141
+#, php-format
+msgid ""
+"Invalid characters detected (%s). Please remove invalid characters and save "
+"again."
+msgstr ""
+"Geçersiz karakterler tespit edildi (%s). Lütfen geçersiz karakterleri "
+"temizleyip tekrar kaydediniz."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:117
+msgid "External subnet"
+msgstr "Dış alt ağ"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:120
+#: usr/local/www/firewall_nat_edit.php:205
+msgid "Source address"
+msgstr "Kaynak adres"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:124
+#: usr/local/www/firewall_nat_edit.php:209
+msgid "Destination address"
+msgstr "Hedef adres"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:155
+msgid "A valid external subnet must be specified."
+msgstr "Geçerli bir dış altağ tanımlanmalıdır."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:159
+#: usr/local/www/firewall_nat_edit.php:254
+#: usr/local/www/firewall_rules_edit.php:446
+#: usr/local/www/firewall_rules_edit.php:450
+msgid "You must specify single host or alias for alias entries."
+msgstr "Tek bir grup adı ya da istemci girmelisiniz."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:164
+#, php-format
+msgid "%s is not a valid internal IP address."
+msgstr "%s geçerli bir iç IP adresi değildir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:167
+msgid "A valid internal bit count must be specified."
+msgstr "Gerçerli bir iç ağ maskesi bit değeri belirtilmelidir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:174
+#: usr/local/www/firewall_nat_edit.php:267
+#: usr/local/www/firewall_rules_edit.php:463
+#, php-format
+msgid "%s is not a valid destination IP address or alias."
+msgstr "%s geçerli bir hedef IP değeri ya da grup adı değildir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:177
+#: usr/local/www/firewall_nat_edit.php:270
+#: usr/local/www/firewall_nat_out_edit.php:188
+#: usr/local/www/firewall_rules_edit.php:466
+msgid "A valid destination bit count must be specified."
+msgstr "Geçerli bi hedef ağ maskesi bit değeri tanımlanmalıdır."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:284
+msgid "Edit NAT 1:1 entry"
+msgstr "1:1 NAT girdisini düzenle"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:290
+#: usr/local/www/firewall_nat_edit.php:482
+#: usr/local/www/firewall_nat_npt_edit.php:168
+#: usr/local/www/firewall_nat_out_edit.php:456
+#: usr/local/www/firewall_rules_edit.php:859
+msgid "Disable this rule"
+msgstr "Kuralı devre dışı bırak"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:291
+#: usr/local/www/firewall_nat_edit.php:483
+#: usr/local/www/firewall_nat_npt_edit.php:169
+#: usr/local/www/firewall_nat_out_edit.php:457
+#: usr/local/www/firewall_rules_edit.php:860
+msgid "Set this option to disable this rule without removing it from the list."
+msgstr ""
+"Herhangi bir kuralı silmeden devredışı bırakmak için bu seçeneği "
+"iÅŸaretleyiniz."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:332
+#: usr/local/www/firewall_nat_npt_edit.php:209
+msgid "Choose which interface this rule applies to"
+msgstr "Bu kuralın hangi arabirime uygulanacağını seçiniz"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:333
+#: usr/local/www/firewall_nat_npt_edit.php:210
+msgid "Hint: in most cases, you'll want to use WAN here"
+msgstr "İpucu: Çoğu durumda bu alanda WAN seçilmelidir"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:336
+msgid "External subnet IP"
+msgstr "Dış altağ IPsi"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:341
+msgid ""
+"Enter the external (usually on a WAN) subnet's starting address for the 1:1 "
+"mapping. The subnet mask from the internal address below will be applied to "
+"this IP address."
+msgstr ""
+"1:1 haritalama için dış altağın (genellikle WAN arabiriminde olur) başlangıç "
+"adresini girin. Aşağıdaki iç adres altağ maskesi bu IP adresine uygulanır."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:343
+msgid ""
+"Hint: this is generally an address owned by the router itself on the "
+"selected interface."
+msgstr ""
+"İpucu: Genellikle seçili arabirimde yönlendiriciye (router) ait bir adrestir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:351
+#: usr/local/www/firewall_nat_1to1_edit.php:425
+#: usr/local/www/firewall_nat_edit.php:557
+#: usr/local/www/firewall_nat_edit.php:646
+#: usr/local/www/firewall_nat_npt_edit.php:216
+#: usr/local/www/firewall_nat_npt_edit.php:244
+#: usr/local/www/firewall_nat_out_edit.php:581
+#: usr/local/www/firewall_rules_edit.php:1037
+#: usr/local/www/firewall_rules_edit.php:1140
+msgid "not"
+msgstr "dışında"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:353
+#: usr/local/www/firewall_nat_1to1_edit.php:427
+#: usr/local/www/firewall_nat_edit.php:559
+#: usr/local/www/firewall_nat_edit.php:648
+#: usr/local/www/firewall_nat_npt_edit.php:218
+#: usr/local/www/firewall_nat_npt_edit.php:246
+#: usr/local/www/firewall_nat_out_edit.php:582
+#: usr/local/www/firewall_rules_edit.php:1039
+#: usr/local/www/firewall_rules_edit.php:1142
+msgid "Use this option to invert the sense of the match."
+msgstr "Eşleştirmeyi tersine çevirmek için bu seçeneği kullanabilirsiniz."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:358
+#: usr/local/www/firewall_nat_1to1_edit.php:432
+#: usr/local/www/firewall_nat_edit.php:564
+#: usr/local/www/firewall_nat_edit.php:653
+#: usr/local/www/firewall_nat_out_edit.php:537
+#: usr/local/www/firewall_nat_out_edit.php:586
+#: usr/local/www/firewall_rules_edit.php:1044
+#: usr/local/www/firewall_rules_edit.php:1147
+#: usr/local/www/firewall_virtual_ip_edit.php:419
+msgid "Type:"
+msgstr "Tür:"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:366
+msgid "Single host"
+msgstr "Tek istemci"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:372
+#: usr/local/www/firewall_nat_1to1_edit.php:448
+#: usr/local/www/firewall_nat_edit.php:573
+#: usr/local/www/firewall_nat_edit.php:663
+#: usr/local/www/firewall_rules_edit.php:1062
+#: usr/local/www/firewall_rules_edit.php:1163
+msgid "PPTP clients"
+msgstr "PPTP istemcileri"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:377
+#: usr/local/www/firewall_nat_1to1_edit.php:455
+#: usr/local/www/firewall_nat_edit.php:576
+#: usr/local/www/firewall_nat_edit.php:666
+#: usr/local/www/firewall_rules_edit.php:1065
+#: usr/local/www/firewall_rules_edit.php:1166
+msgid "PPPoE clients"
+msgstr "PPPoE istemcileri"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:382
+#: usr/local/www/firewall_nat_1to1_edit.php:462
+#: usr/local/www/firewall_nat_edit.php:579
+#: usr/local/www/firewall_nat_edit.php:669
+#: usr/local/www/firewall_rules_edit.php:1068
+#: usr/local/www/firewall_rules_edit.php:1169
+msgid "L2TP clients"
+msgstr "L2TP istemcileri"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:389
+#: usr/local/www/firewall_nat_1to1_edit.php:471
+#: usr/local/www/firewall_nat_edit.php:584
+#: usr/local/www/firewall_nat_edit.php:674
+#: usr/local/www/firewall_rules_edit.php:1073
+#: usr/local/www/firewall_rules_edit.php:1174
+msgid "net"
+msgstr ""
+
+#: usr/local/www/firewall_nat_1to1_edit.php:392
+#: usr/local/www/firewall_nat_1to1_edit.php:474
+#: usr/local/www/firewall_nat_edit.php:586
+#: usr/local/www/firewall_nat_edit.php:676
+#: usr/local/www/firewall_rules_edit.php:1075
+#: usr/local/www/firewall_rules_edit.php:1176
+msgid "address"
+msgstr "adres"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:402
+#: usr/local/www/firewall_nat_1to1_edit.php:484
+#: usr/local/www/firewall_nat_edit.php:594
+#: usr/local/www/firewall_nat_edit.php:705
+#: usr/local/www/firewall_nat_npt_edit.php:223
+#: usr/local/www/firewall_nat_npt_edit.php:251
+#: usr/local/www/firewall_nat_out_edit.php:547
+#: usr/local/www/firewall_nat_out_edit.php:599
+#: usr/local/www/firewall_nat_out_edit.php:634
+#: usr/local/www/firewall_rules_edit.php:1083
+#: usr/local/www/firewall_rules_edit.php:1184
+#: usr/local/www/firewall_virtual_ip_edit.php:430
+#: usr/local/www/vpn_ipsec_phase2.php:598
+#: usr/local/www/vpn_ipsec_phase2.php:634
+msgid "Address:"
+msgstr "Adres:"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:418
+msgid ""
+"Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size "
+"specified for the internal subnet will be applied to the external subnet."
+msgstr ""
+"1:1 haritalama için iç (LAN) altağını girin. İç altağ için belirtilen altağ "
+"boyutu dış altağa uygulanır."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:439
+#: usr/local/www/firewall_nat_edit.php:570
+#: usr/local/www/firewall_nat_edit.php:659
+#: usr/local/www/firewall_rules_edit.php:1056
+#: usr/local/www/firewall_rules_edit.php:1159
+msgid "Single host or alias"
+msgstr "Tek istemci ya da grup"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:502
+msgid ""
+"The 1:1 mapping will only be used for connections to or from the specified "
+"destination."
+msgstr ""
+"1:1 haritalama belirtilen hedefe giden ya da hedeften gelen bağlantılar için "
+"kullanılır."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:503
+msgid "Hint: this is usually 'any'."
+msgstr "İpucu: Genelde 'herhangi biri' seçilir."
+
+#: usr/local/www/firewall_nat_1to1_edit.php:518
+#: usr/local/www/firewall_nat_edit.php:803
+msgid "NAT reflection"
+msgstr "NAT yansılama"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:522
+msgid "use system default"
+msgstr "sistem varsayılanını kullan"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:525
+msgid "enable"
+msgstr "etkinleÅŸtir"
+
+#: usr/local/www/firewall_nat_1to1_edit.php:528
+msgid "disable"
+msgstr "kapat"
+
+#: usr/local/www/firewall_nat_edit.php:124
+#, php-format
+msgid ""
+"Invalid characters detected %s. Please remove invalid characters and save "
+"again."
+msgstr ""
+"Geçersiz karakter tespit edilmiştir %s. Lütfen geçersiz karakterleri "
+"temizleyip tekrar kaydediniz."
+
+#: usr/local/www/firewall_nat_edit.php:197
+msgid "Destination port from"
+msgstr "Hedef porttan"
+
+#: usr/local/www/firewall_nat_edit.php:197
+msgid "Destination port to"
+msgstr "Hedef porta"
+
+#: usr/local/www/firewall_nat_edit.php:213
+#: usr/local/www/firewall_nat_edit.php:760
+msgid "Redirect target IP"
+msgstr "Hedef IPyi yönlendir"
+
+#: usr/local/www/firewall_nat_edit.php:235
+#, php-format
+msgid "\"%s\" is not a valid redirect target IP address or host alias."
+msgstr "\"%s\" geçerli bir yönlendirme hedef IP adresi veya grup değil."
+
+#: usr/local/www/firewall_nat_edit.php:239
+#: usr/local/www/firewall_rules_edit.php:410
+#, php-format
+msgid ""
+"%s is not a valid start source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+"%s geçerli bir başlangıç kaynak portu değil. Bir port grubu ya da 1 ile "
+"65535 arası bir tamsayı olmalıdır."
+
+#: usr/local/www/firewall_nat_edit.php:241
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+"%s geçerli bir bitiş kaynak portu değil. Bir port grubu yada 1 ile 65535 "
+"arası bir tamsayı olmalıdır."
+
+#: usr/local/www/firewall_nat_edit.php:243
+#: usr/local/www/firewall_rules_edit.php:414
+#, php-format
+msgid ""
+"%s is not a valid start destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+"%s geçerli bir başlangıç hedef portu değil. Bir port grubu yada 1 ile 65535 "
+"arası sayı olmalıdır."
+
+#: usr/local/www/firewall_nat_edit.php:245
+#: usr/local/www/firewall_rules_edit.php:416
+#, php-format
+msgid ""
+"%s is not a valid end destination port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+"%s geçerli bir bitiş hedef portu değil. Bir port grubu yada 1 ile 65535 "
+"arası sayı olmalıdır."
+
+#: usr/local/www/firewall_nat_edit.php:248
+#, php-format
+msgid ""
+"A valid redirect target port must be specified. It must be a port alias or "
+"integer between 1 and 65535."
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:259
+#: usr/local/www/firewall_rules_edit.php:455
+#, php-format
+msgid "%s is not a valid source IP address or alias."
+msgstr "%s geçerli bir kaynak IP adresi ya da grup değil."
+
+#: usr/local/www/firewall_nat_edit.php:262
+#: usr/local/www/firewall_nat_out_edit.php:180
+#: usr/local/www/firewall_rules_edit.php:458
+msgid "A valid source bit count must be specified."
+msgstr "Geçerli bir kaynak bit adedi belirtilmelidir."
+
+#: usr/local/www/firewall_nat_edit.php:289
+msgid "The target port range must be an integer between 1 and 65535."
+msgstr "Hedef port aralığı 1 ile 65535 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/firewall_nat_edit.php:310
+msgid "The destination port range overlaps with an existing entry."
+msgstr "Hedef port aralığı varolan bir girdi ile çakışıyor."
+
+# 75%
+#: usr/local/www/firewall_nat_edit.php:422
+msgid "NAT Port Forward"
+msgstr "NAT Port Yonlendirme"
+
+#: usr/local/www/firewall_nat_edit.php:472
+msgid "Edit Redirect entry"
+msgstr "Yönlendirme girdisini düzenle"
+
+#: usr/local/www/firewall_nat_edit.php:487
+msgid "No RDR (NOT)"
+msgstr "Yönlendirme (YOK)"
+
+#: usr/local/www/firewall_nat_edit.php:490
+msgid ""
+"Enabling this option will disable redirection for traffic matching this rule."
+msgstr ""
+"Bu seçeneğin etkinleştirilmesi kurala uyan trafikte yönlendirmeyi kapatır."
+
+#: usr/local/www/firewall_nat_edit.php:491
+msgid ""
+"Hint: this option is rarely needed, don't use this unless you know what "
+"you're doing."
+msgstr ""
+"İpucu: Bu seçeneğe nadiren ihtiyaç olur, ne yaptığınızdan emin değilseniz bu "
+"seçeneği kullanmayın."
+
+#: usr/local/www/firewall_nat_edit.php:533
+#: usr/local/www/firewall_nat_out_edit.php:507
+msgid "Choose which interface this rule applies to."
+msgstr "Bu kuralın uygulanacağı arabirimi seçiniz."
+
+#: usr/local/www/firewall_nat_edit.php:534
+#: usr/local/www/firewall_nat_out_edit.php:508
+msgid "Hint: in most cases, you'll want to use WAN here."
+msgstr "İpucu: Çoğu durumda burada WAN kullanılır."
+
+#: usr/local/www/firewall_nat_edit.php:543
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "Choose which IP protocol this rule should match."
+msgstr "Bu kuralın eşleşeceği IP protokolünü seçiniz."
+
+#: usr/local/www/firewall_nat_edit.php:545
+msgid "Hint: in most cases, you should specify"
+msgstr "İpucu: Çoğu durumda"
+
+#: usr/local/www/firewall_nat_edit.php:545
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+msgid "TCP"
+msgstr "TCP"
+
+#: usr/local/www/firewall_nat_edit.php:550
+msgid "Show source address and port range"
+msgstr "Kaynak adres ve port aralığını görüntüle"
+
+#: usr/local/www/firewall_nat_edit.php:608
+#: usr/local/www/firewall_rules_edit.php:1102
+msgid "Source port range"
+msgstr "Kaynak port aralığı"
+
+#: usr/local/www/firewall_nat_edit.php:612
+#: usr/local/www/firewall_nat_edit.php:725
+#: usr/local/www/firewall_rules_edit.php:1106
+#: usr/local/www/firewall_rules_edit.php:1205
+msgid "from:"
+msgstr "başlangıç:"
+
+#: usr/local/www/firewall_nat_edit.php:615
+#: usr/local/www/firewall_nat_edit.php:628
+#: usr/local/www/firewall_nat_edit.php:728
+#: usr/local/www/firewall_nat_edit.php:741
+#: usr/local/www/firewall_nat_edit.php:771
+#: usr/local/www/firewall_rules_edit.php:1109
+#: usr/local/www/firewall_rules_edit.php:1122
+#: usr/local/www/firewall_rules_edit.php:1208
+#: usr/local/www/firewall_rules_edit.php:1221
+msgid "other"
+msgstr "diÄŸer"
+
+#: usr/local/www/firewall_nat_edit.php:625
+#: usr/local/www/firewall_nat_edit.php:738
+#: usr/local/www/firewall_rules_edit.php:1119
+#: usr/local/www/firewall_rules_edit.php:1218
+msgid "to:"
+msgstr "bitiÅŸ:"
+
+#: usr/local/www/firewall_nat_edit.php:639
+msgid "Specify the source port or port range for this rule"
+msgstr "Bu kural için kaynak port yada port aralığı belirtiniz"
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "This is usually"
+msgstr "Bu genellikle"
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "random"
+msgstr "rasgeledir"
+
+#: usr/local/www/firewall_nat_edit.php:639
+msgid ""
+"and almost never equal to the destination port range (and should usually be "
+"'any')"
+msgstr ""
+"ve neredeyse hiçbir zaman hedef port aralığıyla aynı olmaz (ve genellikle "
+"'herhangi biri' olmalıdır)"
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_nat_edit.php:755
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "Hint: you can leave the"
+msgstr "Ä°pucu: "
+
+#: usr/local/www/firewall_nat_edit.php:639
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "field empty if you only want to filter a single port."
+msgstr "Sadece tek port engellemek için bu alanı boş bırakınız."
+
+#: usr/local/www/firewall_nat_edit.php:661
+#: usr/local/www/firewall_nat_out_edit.php:541
+#: usr/local/www/firewall_rules_edit.php:1059
+#: usr/local/www/firewall_rules_edit.php:1161
+msgid "This Firewall (self)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_edit.php:721
+msgid "Destination port range"
+msgstr "Hedef port aralığı"
+
+#: usr/local/www/firewall_nat_edit.php:753
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"mapping."
+msgstr "Bu eşleştirme için hedef port ya da port aralığı belirtiniz."
+
+#: usr/local/www/firewall_nat_edit.php:755
+msgid "field empty if you only want to map a single port"
+msgstr "Tek port belirtmek istiyorsanız bu alanı boş bırakınız"
+
+#: usr/local/www/firewall_nat_edit.php:763
+msgid ""
+"Enter the internal IP address of the server on which you want to map the "
+"ports."
+msgstr "Portları haritalamak istediğiniz sunucunun iç IP adresini giriniz."
+
+#: usr/local/www/firewall_nat_edit.php:765
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+#: usr/local/www/services_dnsmasq_edit.php:220
+#: usr/local/www/services_dnsmasq_edit.php:227
+#: usr/local/www/services_dnsmasq_edit.php:234
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+#: usr/local/www/services_unbound_domainoverride_edit.php:142
+#: usr/local/www/services_unbound_host_edit.php:220
+#: usr/local/www/services_unbound_host_edit.php:228
+#: usr/local/www/services_unbound_host_edit.php:236
+#: usr/local/www/system.php:318 usr/local/www/system.php:329
+msgid "e.g."
+msgstr "örn."
+
+#: usr/local/www/firewall_nat_edit.php:768
+msgid "Redirect target port"
+msgstr "Hedef portu yönlendir"
+
+#: usr/local/www/firewall_nat_edit.php:782
+msgid ""
+"Specify the port on the machine with the IP address entered above. In case "
+"of a port range, specify the beginning port of the range (the end port will "
+"be calculated automatically)."
+msgstr ""
+"Yukarıda girdiğiniz IPye sahip makinanın portunu belirtiniz. Port aralığı "
+"olacaksa başlangıç portunu giriniz (bitiş portu otomatik hesaplanacaktır)."
+
+#: usr/local/www/firewall_nat_edit.php:786
+msgid "Hint: this is usually identical to the 'from' port above"
+msgstr "İpucu: bu değer genellikle yukarıdaki 'başlangıç' portu ile aynıdır"
+
+#: usr/local/www/firewall_nat_edit.php:796
+#: usr/local/www/firewall_nat_out_edit.php:774
+#: usr/local/www/firewall_rules_edit.php:1425
+msgid "No XMLRPC Sync"
+msgstr "XMLRPC senkronizasyonunu kapat"
+
+#: usr/local/www/firewall_nat_edit.php:799
+#: usr/local/www/firewall_nat_out_edit.php:777
+#: usr/local/www/firewall_rules_edit.php:1432
+msgid ""
+"Hint: This prevents the rule on Master from automatically syncing to other "
+"CARP members. This does NOT prevent the rule from being overwritten on Slave."
+msgstr ""
+"İpucu: CARP üyelerinin eşitlenmesini (Ana \"Master\") kural otomatik olarak "
+"engeller. Bu düşük seviyeli (Slave) kuralın üstüne gelen kuralı engellemez."
+
+#: usr/local/www/firewall_nat_edit.php:806
+msgid "Use system default"
+msgstr "Sistem varsayılanını kullan"
+
+#: usr/local/www/firewall_nat_edit.php:807
+#: usr/local/www/system_advanced_firewall.php:490
+msgid "Enable (NAT + Proxy)"
+msgstr "(NAT+ Vekil 'Proxy') EtkinleÅŸtir"
+
+#: usr/local/www/firewall_nat_edit.php:808
+#: usr/local/www/system_advanced_firewall.php:491
+msgid "Enable (Pure NAT)"
+msgstr "(Saf NAT)'ı Etkinleştir"
+
+#: usr/local/www/firewall_nat_edit.php:809
+#: usr/local/www/services_dyndns_edit.php:241
+#: usr/local/www/system_advanced_firewall.php:489
+#: usr/local/www/system_advanced_misc.php:576
+#: usr/local/www/system_advanced_misc.php:592
+#: usr/local/www/system_firmware.php:127
+msgid "Disable"
+msgstr "Kapat"
+
+#: usr/local/www/firewall_nat_edit.php:815
+#: usr/local/www/firewall_nat_edit.php:846
+msgid "Filter rule association"
+msgstr "Filtre kuralı ilişkilendirmesi"
+
+#: usr/local/www/firewall_nat_edit.php:819
+#: usr/local/www/firewall_nat_edit.php:852
+msgid "Pass"
+msgstr "Ä°zin ver"
+
+#: usr/local/www/firewall_nat_edit.php:829
+msgid "View the filter rule"
+msgstr "Filtreleme kurallını görüntüle"
+
+#: usr/local/www/firewall_nat_edit.php:837
+msgid "Create new associated filter rule"
+msgstr "İlişkilendirilmiş filtreleme kuralı oluştur"
+
+#: usr/local/www/firewall_nat_edit.php:850
+msgid "Add associated filter rule"
+msgstr "İlişkilendirilmiş filtreleme kuralı ekle"
+
+#: usr/local/www/firewall_nat_edit.php:851
+msgid "Add unassociated filter rule"
+msgstr "İlişkilendirilmemiş filtreleme kuralı ekle"
+
+#: usr/local/www/firewall_nat_edit.php:854
+msgid ""
+"NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will "
+"only work on an interface containing the default gateway."
+msgstr ""
+"NOT: \"İzin ver\" seçimi Çoklu-WAN (Multi-WAN) ile düzgün çalışmamaktadır. "
+"Yanlızca varsayılan ağ geçidi içeren bir arabirim üzerinden çalışmaktadır."
+
+# 76%
+#: usr/local/www/firewall_nat_edit.php:870
+#: usr/local/www/firewall_nat_out_edit.php:797
+#: usr/local/www/firewall_rules_edit.php:1715
+msgid "Rule Information"
+msgstr "Kural Bilgisi"
+
+# 87%
+#: usr/local/www/firewall_nat_edit.php:874
+#: usr/local/www/firewall_nat_out_edit.php:803
+#: usr/local/www/firewall_rules_edit.php:1719
+msgid "Created"
+msgstr "OluÅŸturuldu"
+
+#: usr/local/www/firewall_nat_edit.php:876
+#: usr/local/www/firewall_nat_edit.php:884
+#: usr/local/www/firewall_nat_out_edit.php:805
+#: usr/local/www/firewall_nat_out_edit.php:816
+#: usr/local/www/firewall_rules_edit.php:1721
+#: usr/local/www/firewall_rules_edit.php:1729 usr/local/www/license.php:49
+msgid "by"
+msgstr "(c)"
+
+# 85%
+#: usr/local/www/firewall_nat_edit.php:882
+#: usr/local/www/firewall_nat_out_edit.php:814
+#: usr/local/www/firewall_rules_edit.php:1727
+msgid "Updated"
+msgstr "Güncellendi"
+
+#: usr/local/www/firewall_nat_npt.php:108
+msgid "External Prefix"
+msgstr "Dış Ön-ek"
+
+#: usr/local/www/firewall_nat_npt.php:109
+msgid "Internal prefix"
+msgstr "İç Ön-ek"
+
+#: usr/local/www/firewall_nat_npt.php:161 usr/local/www/services_dhcp.php:1285
+#: usr/local/www/services_dhcpv6.php:891
+msgid "Do you really want to delete this mapping?"
+msgstr "Bu adreslemeyi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/firewall_nat_npt_edit.php:110
+msgid "Source prefix"
+msgstr "Kaynak Ön-ek"
+
+#: usr/local/www/firewall_nat_npt_edit.php:112
+msgid "Destination prefix"
+msgstr "Hedef Ön-ek"
+
+#: usr/local/www/firewall_nat_npt_edit.php:162
+msgid "Edit NAT NPt entry"
+msgstr "NAT NPT girdisini düzenle"
+
+#: usr/local/www/firewall_nat_npt_edit.php:213
+msgid "Internal IPv6 Prefix"
+msgstr "İç IPv6 Ön-ek"
+
+#: usr/local/www/firewall_nat_npt_edit.php:235
+msgid ""
+"Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. "
+"The prefix size specified for the internal IPv6 prefix will be applied to "
+"the \n"
+"external prefix."
+msgstr ""
+"İç (LAN) ULA IPv6 Ön-ek i Ağ ön-ek çevirisi için girin. Ön-ek boyutu iç IPv6 "
+"ön-eki belirtin, belirtilen değer dış Ön-ek \n"
+"için de geçerli olacak."
+
+#: usr/local/www/firewall_nat_npt_edit.php:241
+msgid "Destination IPv6 Prefix"
+msgstr "Hedef IPv6 Ön-ek"
+
+#: usr/local/www/firewall_nat_npt_edit.php:265
+msgid "Enter the Global Unicast routable IPv6 prefix here"
+msgstr "Global yönetilebilir tekli IPv6 ön-ek' i buraya girin"
+
+#: usr/local/www/firewall_nat_out.php:101
+#, php-format
+msgid " - %1$s to %2$s"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:104
+msgid "Manual Outbound NAT Switch"
+msgstr "Elle dışarı NAT Değiştir"
+
+#: usr/local/www/firewall_nat_out.php:123
+msgid "Default rules for each interface have been created."
+msgstr "Her arabirim için öntanımlı kurallar oluşturuldu."
+
+#: usr/local/www/firewall_nat_out.php:245
+msgid "Mode:"
+msgstr "Kip:"
+
+#: usr/local/www/firewall_nat_out.php:251
+msgid "Automatic outbound NAT rule generation"
+msgstr "Otomatik dışarı NAT kuralı oluşturma"
+
+#: usr/local/www/firewall_nat_out.php:252
+msgid "(IPsec passthrough included)"
+msgstr "(IPsec geçiş dahil)"
+
+#: usr/local/www/firewall_nat_out.php:260
+msgid "Hybrid Outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:261
+msgid "(Automatic Outbound NAT + rules below)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:279
+msgid "Manual Outbound NAT rule generation"
+msgstr "Elle dışarı NAT kuralı oluşturma"
+
+#: usr/local/www/firewall_nat_out.php:280
+msgid "(AON - Advanced Outbound NAT)"
+msgstr "(AON - Gelişmiş Dışarı NAT)"
+
+#: usr/local/www/firewall_nat_out.php:288
+msgid "Disable Outbound NAT rule generation"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:289
+msgid "(No Outbound NAT rules)"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:300
+msgid "Mappings:"
+msgstr "EÅŸlemeler:"
+
+#: usr/local/www/firewall_nat_out.php:310
+#: usr/local/www/firewall_nat_out.php:547
+msgid "NAT Address"
+msgstr "NAT Adresi"
+
+#: usr/local/www/firewall_nat_out.php:311
+#: usr/local/www/firewall_nat_out.php:548
+msgid "NAT Port"
+msgstr "NAT Portu"
+
+#: usr/local/www/firewall_nat_out.php:312
+#: usr/local/www/firewall_nat_out.php:549
+msgid "Static Port"
+msgstr "Sabit Port"
+
+#: usr/local/www/firewall_nat_out.php:365
+msgid "This rule is being ignored"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:448
+#: usr/local/www/firewall_nat_out.php:620
+msgid "YES"
+msgstr "EVET"
+
+#: usr/local/www/firewall_nat_out.php:450
+#: usr/local/www/firewall_nat_out.php:622
+msgid "NO"
+msgstr "HAYIR"
+
+#: usr/local/www/firewall_nat_out.php:463
+msgid "edit mapping"
+msgstr "eşlemeyi düzenle"
+
+#: usr/local/www/firewall_nat_out.php:537
+msgid "Automatic rules:"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:559
+msgid "automatic outbound nat"
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:638
+msgid ""
+"If automatic outbound NAT selected, a mapping is automatically created for "
+"each interface's subnet (except WAN-type connections) and the rules on "
+"\"Mappings\" section of this page are ignored.<br /><br /> If manual "
+"outbound NAT is selected, outbound NAT rules will not be automatically "
+"generated and only the mappings you specify on this page will be used. <br /"
+"><br /> If hybrid outbound NAT is selected, mappings you specify on this "
+"page will be used, followed by the automatically generated ones. <br /><br /"
+">If disable outbound NAT is selected, no rules will be used. <br /><br />If "
+"a target address other than an interface's IP address is used, then "
+"depending on the way the WAN connection is setup, a "
+msgstr ""
+
+#: usr/local/www/firewall_nat_out.php:650
+msgid " may also be required."
+msgstr " de gerekebilir."
+
+#: usr/local/www/firewall_nat_out_edit.php:146
+msgid "Source bit count"
+msgstr "Kaynak bit sayısı"
+
+#: usr/local/www/firewall_nat_out_edit.php:146
+#: usr/local/www/firewall_rules_edit.php:395
+msgid "Destination bit count"
+msgstr "Hedef bit sayısı"
+
+#: usr/local/www/firewall_nat_out_edit.php:166
+msgid ""
+"You must supply either a valid port or port alias for the source port entry."
+msgstr ""
+"Kaynak port girişi için geçerli bir port veya port grubu adı girmelisiniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:169
+msgid ""
+"You must supply either a valid port or port alias for the destination port "
+"entry."
+msgstr ""
+"Hedef Port girişi için geçerli bir port yada port grubu adı belirtiniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:172
+msgid "You must supply a valid port for the NAT port entry."
+msgstr ""
+
+#: usr/local/www/firewall_nat_out_edit.php:176
+msgid "A valid source must be specified."
+msgstr "Geçerli bir kaynak belirtilmelidir."
+
+#: usr/local/www/firewall_nat_out_edit.php:184
+msgid "A valid destination must be specified."
+msgstr "Geçerli bir hedef belirtilmelidir."
+
+#: usr/local/www/firewall_nat_out_edit.php:192
+msgid "Negating destination address of \"any\" is invalid."
+msgstr "Hedef adres \\\"Herhangi bir\\\"in tersi alınamaz."
+
+#: usr/local/www/firewall_nat_out_edit.php:197
+msgid "A valid target IP address must be specified."
+msgstr "Geçerli bir hedef IP adresi belirtilmelidir."
+
+#: usr/local/www/firewall_nat_out_edit.php:202
+msgid "A valid target IP must be specified when using the 'Other Subnet' type."
+msgstr "'Diğer Altağ' seçildiğinde geçerli bir hedef IP belirtilmelidir."
+
+#: usr/local/www/firewall_nat_out_edit.php:205
+msgid ""
+"A valid target bit count must be specified when using the 'Other Subnet' "
+"type."
+msgstr ""
+"'Diğer Altağ' seçildiğinde geçerli bir hedef bit sayısı belirtilmelidir."
+
+#: usr/local/www/firewall_nat_out_edit.php:218
+msgid "Only Round Robin pool options may be chosen when selecting an alias."
+msgstr ""
+"Bir grup seçilirken sadece Dairesel Denetim havuz seçenekleri kullanılabilir."
+
+#: usr/local/www/firewall_nat_out_edit.php:446
+msgid "Edit Advanced Outbound NAT entry"
+msgstr "Detaylı Dışarı NAT girdisini düzenle"
+
+#: usr/local/www/firewall_nat_out_edit.php:461
+msgid "Do not NAT"
+msgstr "NAT yapma"
+
+#: usr/local/www/firewall_nat_out_edit.php:464
+msgid ""
+"Enabling this option will disable NAT for traffic matching this rule and "
+"stop processing Outbound NAT rules."
+msgstr ""
+"Bu seçeneği etkinleştirerek bu kurala uyan trafikte NATı devre dışı "
+"bırakabilir ve Dışarı NAT kurallarının çalışmasını durdurabilirsiniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:465
+msgid "Hint: in most cases, you won't use this option."
+msgstr "İpucu: Çoğu durumda bu seçenek kullanılmaz."
+
+#: usr/local/www/firewall_nat_out_edit.php:525
+msgid "Choose which protocol this rule should match."
+msgstr "Bu kuralın uyacağı protokolü seçiniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:527
+#, php-format
+msgid "Hint: in most cases, you should specify %s any %s here."
+msgstr "İpucu: Çoğu durumda burada %s tümü %s seçmelisiniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:564
+msgid "Enter the source network for the outbound NAT mapping."
+msgstr "Dışarı NAT eşleme için kaynak ağı girin."
+
+#: usr/local/www/firewall_nat_out_edit.php:568
+msgid "Source port:"
+msgstr "Kaynak port:"
+
+# 95%
+#: usr/local/www/firewall_nat_out_edit.php:571
+#: usr/local/www/firewall_nat_out_edit.php:623
+msgid "(leave blank for any)"
+msgstr "(Tümü için boş bırakınız)"
+
+#: usr/local/www/firewall_nat_out_edit.php:616
+msgid "Enter the destination network for the outbound NAT mapping."
+msgstr "Dışarı NAT için hedef ağ giriniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:620
+msgid "Destination port:"
+msgstr "Hedef port:"
+
+#: usr/local/www/firewall_nat_out_edit.php:630
+msgid "Translation"
+msgstr "Çeviri"
+
+#: usr/local/www/firewall_nat_out_edit.php:638
+msgid "Interface address"
+msgstr "Arabirim adresi"
+
+#: usr/local/www/firewall_nat_out_edit.php:684
+msgid "Other Subnet (Enter Below)"
+msgstr "Diğer Altağ (Aşağıya Giriniz)"
+
+#: usr/local/www/firewall_nat_out_edit.php:691
+msgid "Other Subnet:"
+msgstr "DiÄŸer AltaÄŸ:"
+
+#: usr/local/www/firewall_nat_out_edit.php:709
+msgid "Packets matching this rule will be mapped to the IP address given here."
+msgstr "Bu kurala uyan paketler burada belirtilen IP adresine eÅŸlenecektir."
+
+#: usr/local/www/firewall_nat_out_edit.php:710
+msgid ""
+"If you want this rule to apply to another IP address rather than the IP "
+"address of the interface chosen above, select it here (you will need to "
+"define "
+msgstr ""
+"Eğer bu kuralın yukarıda seçilen arabirim dışında bir IP adresine "
+"uygulanmasını istiyorsanız, burada seçiniz (önce "
+
+#: usr/local/www/firewall_nat_out_edit.php:713
+msgid "addresses on the interface first)."
+msgstr "arabirime adresler tanımlamalısınız)."
+
+#: usr/local/www/firewall_nat_out_edit.php:745
+msgid ""
+"Only Round Robin types work with Host Aliases. Any type can be used with a "
+"Subnet."
+msgstr ""
+"Altağlarda herhangi bir tür kullanılabilir. İstemci gruplarında ise sadece "
+"Dairesel Denetim türleri çalışır."
+
+#: usr/local/www/firewall_nat_out_edit.php:746
+msgid "Round Robin: Loops through the translation addresses."
+msgstr "Dairesel Denetim: Çeviri adreslerinde döner."
+
+#: usr/local/www/firewall_nat_out_edit.php:747
+msgid "Random: Selects an address from the translation address pool at random."
+msgstr "Rasgele: Çeviri adres havuzundan rasgele bir adres seçer."
+
+#: usr/local/www/firewall_nat_out_edit.php:748
+msgid ""
+"Source Hash: Uses a hash of the source address to determine the translation "
+"address, ensuring that the redirection address is always the same for a "
+"given source."
+msgstr ""
+"Kaynak Değeri: Çeviri adresini belirlemek için kaynak adresten hesaplanan "
+"bir değer kullanılır. Böylece her bir kaynak için yönlendirileceği adres "
+"sabitlenmiÅŸ olur."
+
+#: usr/local/www/firewall_nat_out_edit.php:749
+msgid ""
+"Bitmask: Applies the subnet mask and keeps the last portion identical; "
+"10.0.1.50 -&gt; x.x.x.50."
+msgstr ""
+"Bit maskesi: Son bölümü aynen bırakarak altağ maskesini uygular; 10.0.1.50 -"
+"&gt; x.x.x.50."
+
+#: usr/local/www/firewall_nat_out_edit.php:750
+msgid ""
+"Sticky Address: The Sticky Address option can be used with the Random and "
+"Round Robin pool types to ensure that a particular source address is always "
+"mapped to the same translation address."
+msgstr ""
+"Kalıcı Adres: Kalıcı Adres seçeneği Rasgele ve Dairesel Denetim havuz "
+"türleriyle belirli bir kaynak adresin her zaman aynı çeviri adresine "
+"eşlenmesi için kullanılabilir."
+
+#: usr/local/www/firewall_nat_out_edit.php:755
+msgid "Port:"
+msgstr "Port:"
+
+#: usr/local/www/firewall_nat_out_edit.php:763
+msgid "Enter the source port for the outbound NAT mapping."
+msgstr "Dışarı NAT eşleme için kaynak port giriniz."
+
+#: usr/local/www/firewall_nat_out_edit.php:767
+msgid "Static-port:"
+msgstr "Statik-port:"
+
+#: usr/local/www/firewall_rules.php:109
+msgid "Drag and drop firewall rules ordering update."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:184
+#, php-format
+msgid ""
+"The settings have been applied. The firewall rules are now reloading in the "
+"background.<br />You can also %s monitor %s the reload progress"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:292 usr/local/www/firewall_rules.php:294
+msgid ""
+"The firewall rule configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:292 usr/local/www/guiconfig.inc:307
+#: usr/local/www/headjs.php:148
+msgid "Apply changes"
+msgstr "Apply changes"
+
+#: usr/local/www/firewall_rules.php:315
+msgid "Floating"
+msgstr "DeÄŸiÅŸen"
+
+#: usr/local/www/firewall_rules.php:344
+#: usr/local/www/firewall_rules_edit.php:1519 usr/local/www/interfaces.php:511
+#: usr/local/www/interfaces.php:564 usr/local/www/services_dhcp.php:944
+#: usr/local/www/services_dhcp_edit.php:455
+#: usr/local/www/status_gateways.php:75 usr/local/www/system_gateways.php:219
+#: usr/local/www/system_gateways_edit.php:696
+#: usr/local/www/system_routes.php:235 usr/local/www/system_routes_edit.php:87
+#: usr/local/www/system_routes_edit.php:244
+msgid "Gateway"
+msgstr "Ağ geçidi"
+
+#: usr/local/www/firewall_rules.php:346
+#: usr/local/www/firewall_rules_edit.php:1492
+msgid "Schedule"
+msgstr "Zamanlama"
+
+#: usr/local/www/firewall_rules.php:371 usr/local/www/firewall_rules.php:774
+#: usr/local/www/firewall_rules.php:808
+msgid "add new rule"
+msgstr "yeni kural ekle"
+
+#: usr/local/www/firewall_rules.php:398
+msgid "Anti-Lockout Rule"
+msgstr "Kilitlenmeme Kuralı"
+
+#: usr/local/www/firewall_rules.php:420
+msgid "RFC 1918 networks"
+msgstr "RFC 1918 ağları"
+
+#: usr/local/www/firewall_rules.php:427 usr/local/www/interfaces.php:3348
+msgid "Block private networks"
+msgstr "Özel networkleri engelle"
+
+#: usr/local/www/firewall_rules.php:448
+msgid "Reserved/not assigned by IANA"
+msgstr "Ayrılmış/IANA tarafından atanmamış"
+
+#: usr/local/www/firewall_rules.php:455 usr/local/www/interfaces.php:3360
+msgid "Block bogon networks"
+msgstr "Sahte ağları engelle"
+
+#: usr/local/www/firewall_rules.php:480
+msgid "advanced settings set"
+msgstr "detaylı ayar kümesi"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:858
+msgid "Mon"
+msgstr "Pts"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+msgid "Tues"
+msgstr "Sal"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:860
+msgid "Wed"
+msgstr "Çar"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+msgid "Thur"
+msgstr "Per"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:862
+msgid "Fri"
+msgstr "Cum"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:863
+msgid "Sat"
+msgstr "Cts"
+
+#: usr/local/www/firewall_rules.php:544 usr/local/www/firewall_schedule.php:44
+#: usr/local/www/firewall_schedule_edit.php:66
+#: usr/local/www/firewall_schedule_edit.php:864
+msgid "Sun"
+msgstr "Paz"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "January"
+msgstr "Ocak"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "February"
+msgstr "Åžubat"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "March"
+msgstr "Mart"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "April"
+msgstr "Nisan"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "May"
+msgstr "Mayıs"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "June"
+msgstr "Haziran"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "July"
+msgstr "Temmuz"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "August"
+msgstr "AÄŸustos"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "September"
+msgstr "Eylül"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "October"
+msgstr "Ekim"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "November"
+msgstr "Kasım"
+
+#: usr/local/www/firewall_rules.php:545 usr/local/www/firewall_schedule.php:45
+#: usr/local/www/firewall_schedule_edit.php:67
+msgid "December"
+msgstr "Aralık"
+
+#: usr/local/www/firewall_rules.php:654
+msgid "Traffic matching this rule is currently being denied"
+msgstr "Bu kurala uyan trafik engellenmektedir"
+
+#: usr/local/www/firewall_rules.php:657
+msgid "Traffic matching this rule is currently being allowed"
+msgstr "Bu kurala uyan trafik izinlidir"
+
+#: usr/local/www/firewall_rules.php:665
+msgid "This rule is not currently active because its period has expired"
+msgstr "Süresi geçtiği için bu kural artık etkin değil"
+
+#: usr/local/www/firewall_rules.php:769
+msgid "No floating rules are currently defined."
+msgstr "Geçerli olarak tanımlanmış değişen kurallar yok."
+
+#: usr/local/www/firewall_rules.php:771
+msgid "No rules are currently defined for this interface"
+msgstr "Bu arabirim için herhangi bir kural tanımlanmadı"
+
+#: usr/local/www/firewall_rules.php:772
+msgid ""
+"All incoming connections on this interface will be blocked until you add "
+"pass rules."
+msgstr ""
+"Bu arabirimden gelen tüm bağlantılar siz izin kuralı ekleyene kadar "
+"engellenecektir."
+
+#: usr/local/www/firewall_rules.php:774
+msgid "Click the"
+msgstr "Yeni kural"
+
+#: usr/local/www/firewall_rules.php:774
+msgid " button to add a new rule."
+msgstr " eklemek için tıklayınız."
+
+#: usr/local/www/firewall_rules.php:820
+msgid "match"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:823
+msgid "block"
+msgstr "engelle"
+
+#: usr/local/www/firewall_rules.php:826
+msgid "reject"
+msgstr "reddet"
+
+#: usr/local/www/firewall_rules.php:829
+msgid "log"
+msgstr "günlüğe kaydet"
+
+#: usr/local/www/firewall_rules.php:833
+msgid "pass (disabled)"
+msgstr "izin ver (devre dışı)"
+
+#: usr/local/www/firewall_rules.php:836
+msgid "match (disabled)"
+msgstr ""
+
+#: usr/local/www/firewall_rules.php:839
+msgid "block (disabled)"
+msgstr "engelle (devre dışı)"
+
+#: usr/local/www/firewall_rules.php:842
+msgid "reject (disabled)"
+msgstr "reddet (devre dışı)"
+
+#: usr/local/www/firewall_rules.php:845
+msgid "log (disabled)"
+msgstr "günlüğe kaydet (devre dışı)"
+
+#: usr/local/www/firewall_rules.php:851
+#: usr/local/www/load_balancer_pool.php:148 usr/local/www/vpn_l2tp.php:359
+#: usr/local/www/vpn_l2tp.php:376
+msgid "Hint:"
+msgstr "Ä°pucu:"
+
+#: usr/local/www/firewall_rules.php:855
+msgid ""
+"Rules are evaluated on a first-match basis (i.e. the action of the first "
+"rule to match a packet will be executed). This means that if you use block "
+"rules, you'll have to pay attention to the rule order. Everything that isn't "
+"explicitly passed is blocked by default. "
+msgstr ""
+"Kurallar ilk uyan sırasına göre işlemektedir (pakete ilk uyan kuralın eylemi "
+"gerçekleştirilir). Yani eğer 'engelle' kuralları kullanıyorsanız kural "
+"sıralamasına dikkat etmelisiniz. Özellikle 'izin ver'mediğiniz kurallar "
+"öntanımlı olarak engellenecektir."
+
+#: usr/local/www/firewall_rules.php:862
+msgid ""
+"Floating rules are evaluated on a first-match basis (i.e. the action of the "
+"first rule to match a packet will be executed) only if the 'quick' option is "
+"checked on a rule. Otherwise they will only apply if no other rules match. "
+"Pay close attention to the rule order and options chosen. If no rule here "
+"matches, the per-interface or default rules are used. "
+msgstr ""
+"Eğer bir kuralda 'hızlı' seçeneği etkinleştirilmişse, değişen kurallar \\"
+"\"ilk uyan\\\" mantığıyla değerlendirilir (yani pakete uyan ilk kuralın "
+"eylemi iÅŸletilir). Aksi taktirde diÄŸer kurallar uymazsa iÅŸletilirler. "
+"Seçimlerinize ve kural sırasına dikkat etmelisiniz. Eğer buradaki kuralların "
+"hiçbiri eşleşmezse, arabirim başına veya öntanımlı kurallar işler."
+
+#: usr/local/www/firewall_rules_edit.php:278
+#: usr/local/www/firewall_rules_edit.php:292
+msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6"
+msgstr "IPv4 ve IPv6 uygulanacak kural için ağ geçidi atayamazsınız"
+
+#: usr/local/www/firewall_rules_edit.php:281
+msgid "You can not assign an IPv4 gateway group on IPv6 Address Family rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:284
+msgid "You can not assign an IPv6 gateway group on IPv4 Address Family rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:295
+msgid "You can not assign an IPv4 Gateway to an IPv6 Filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:298
+msgid "You can not assign an IPv6 Gateway to an IPv4 Filter rule"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:304
+msgid ""
+"You can not assign a protocol other than ICMP, TCP, UDP or TCP/UDP to a rule "
+"that applies to IPv4 and IPv6"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:308
+msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6"
+msgstr "IPv4 ve IPv6 için uygulanacak ICMP türü kurallarını atayamazsınız"
+
+#: usr/local/www/firewall_rules_edit.php:382
+#, php-format
+msgid "%s is only valid with protocol TCP."
+msgstr "%s sadece TCP protokolü ile çalışır."
+
+#: usr/local/www/firewall_rules_edit.php:384
+#, php-format
+msgid "%s is only valid if the gateway is set to 'default'."
+msgstr "%s sadece varsayılan ağ geçidi ile çalışır."
+
+#: usr/local/www/firewall_rules_edit.php:412
+#, php-format
+msgid ""
+"%s is not a valid end source port. It must be a port alias or integer "
+"between 1 and 65535."
+msgstr ""
+"%s geçerli bir bitiş kaynak portu değil. Port grubu ya da 1 ile 65535 arası "
+"bir tamsayı olmalıdır."
+
+#: usr/local/www/firewall_rules_edit.php:471
+#, php-format
+msgid ""
+"The Source IP address %s Address Family differs from the destination %s."
+msgstr "Kaynak IP adresi %s Hedef Adres Ailesi %s den farklıdır."
+
+#: usr/local/www/firewall_rules_edit.php:473
+msgid "You can not use IPv6 addresses in IPv4 rules."
+msgstr "IPv6 adreslerini IPv4 kuralları ile kullanamazsınız."
+
+#: usr/local/www/firewall_rules_edit.php:475
+msgid "You can not use IPv4 addresses in IPv6 rules."
+msgstr "IPv4 adreslerini IPv6 kuralları ile kullanamazsınız."
+
+#: usr/local/www/firewall_rules_edit.php:479
+msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules."
+msgstr ""
+"IPv4 yada IPv6 adresleri içinde birleşik IPv4 IPv6 kurallarını "
+"kullanamazsınız."
+
+#: usr/local/www/firewall_rules_edit.php:495
+msgid "OS detection is only valid with protocol TCP."
+msgstr "İşletim sistemi tespiti sadece TCP protokolünde çalışır."
+
+#: usr/local/www/firewall_rules_edit.php:497
+msgid "Invalid OS detection selection. Please select a valid OS."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:502
+msgid "You have to select a queue when you select an acknowledge queue too."
+msgstr "Alındılama kuyruğu seçtiğinizde bir kuyruk da seçmeniz gerekir."
+
+#: usr/local/www/firewall_rules_edit.php:504
+msgid "Acknowledge queue and Queue cannot be the same."
+msgstr "Alındılama kuyruğu ve kuyruk aynı olamaz."
+
+#: usr/local/www/firewall_rules_edit.php:507
+msgid ""
+"You can not use limiters in Floating rules without choosing a direction."
+msgstr "Değişen kurallarda yön seçmeksizin limitleyici kulllanamazsınız."
+
+#: usr/local/www/firewall_rules_edit.php:509
+msgid ""
+"You can not use gateways in Floating rules without choosing a direction."
+msgstr "Değişen kurallarda yön seçmeksizin ağ geçidi kullanamazsınız."
+
+#: usr/local/www/firewall_rules_edit.php:512
+msgid ""
+"You must select a queue for the In direction before selecting one for Out "
+"too."
+msgstr ""
+"Dış yönü için bir kuyruk seçmeden önce İç yönü için bir kuyruk seçmelisiniz."
+
+#: usr/local/www/firewall_rules_edit.php:514
+msgid "In and Out Queue cannot be the same."
+msgstr "Giriş ve Çıkış kuyrukları aynı olmaz."
+
+#: usr/local/www/firewall_rules_edit.php:516
+#: usr/local/www/firewall_rules_edit.php:518
+msgid ""
+"You cannot select one queue and one virtual interface for IN and Out. Both "
+"must be from the same type."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:520
+msgid ""
+"Please select a gateway, normally the interface selected gateway, so the "
+"limiters work correctly"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:523
+msgid "ID must be an integer"
+msgstr "Kimlik değeri tamsayı olmalıdır"
+
+#: usr/local/www/firewall_rules_edit.php:526
+msgid "You can only select a layer7 container for TCP and/or UDP protocols"
+msgstr "Sadece TCP ve UDP protokolleri için layer7 barındırıcı seçilebilir"
+
+#: usr/local/www/firewall_rules_edit.php:528
+msgid "You can only select a layer7 container for Pass type rules."
+msgstr "Sadece İzin türü kurallar için layer7 barındırıcı seçilebilir."
+
+#: usr/local/www/firewall_rules_edit.php:533
+msgid ""
+"You can only specify the maximum number of established connections per host "
+"(advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:535
+msgid ""
+"You can only specify the maximum new connections per host / per second(s) "
+"(advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:537
+msgid ""
+"You can only specify the state timeout (advanced option) for TCP protocol."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:542
+msgid ""
+"You can only specify the maximum state entries (advanced option) for Pass "
+"type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:544
+msgid ""
+"You can only specify the maximum number of unique source hosts (advanced "
+"option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:546
+msgid ""
+"You can only specify the maximum number of established connections per host "
+"(advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:548
+msgid ""
+"You can only specify the maximum state entries per host (advanced option) "
+"for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:550
+msgid ""
+"You can only specify the maximum new connections per host / per second(s) "
+"(advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:552
+msgid ""
+"You can only specify the state timeout (advanced option) for Pass type rules."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:557
+msgid ""
+"You cannot specify the maximum state entries (advanced option) if statetype "
+"is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:559
+msgid ""
+"You cannot specify the maximum number of unique source hosts (advanced "
+"option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:561
+msgid ""
+"You cannot specify the maximum number of established connections per host "
+"(advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:563
+msgid ""
+"You cannot specify the maximum state entries per host (advanced option) if "
+"statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:565
+msgid ""
+"You cannot specify the maximum new connections per host / per second(s) "
+"(advanced option) if statetype is none and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:567
+msgid ""
+"You cannot specify the state timeout (advanced option) if statetype is none "
+"and no L7 container is selected."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:571
+msgid "Maximum state entries (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:574
+msgid ""
+"Maximum number of unique source hosts (advanced option) must be a positive "
+"integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:577
+msgid ""
+"Maximum number of established connections per host (advanced option) must be "
+"a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:580
+msgid ""
+"Maximum state entries per host (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:583
+msgid ""
+"Maximum new connections per host / per second(s) (advanced option) must be a "
+"positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:586
+msgid "State timeout (advanced option) must be a positive integer"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:590
+msgid ""
+"Both maximum new connections per host and the interval (per second(s)) must "
+"be specified"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:602
+msgid ""
+"If you specify TCP flags that should be set you should specify out of which "
+"flags as well."
+msgstr ""
+"İşaretlenecek TCP bayrakları belirtirseniz hangilerinden olduğunu da "
+"belirtmelisiniz."
+
+#: usr/local/www/firewall_rules_edit.php:829
+msgid "Edit Firewall rule"
+msgstr "Güvenlik duvarı kuralını düzenle"
+
+#: usr/local/www/firewall_rules_edit.php:850
+msgid "Choose what to do with packets that match the criteria specified below."
+msgstr "Aşağıda belirtilen kritere uyan paketlere ne yapılacağını seçin."
+
+#: usr/local/www/firewall_rules_edit.php:851
+msgid ""
+"Hint: the difference between block and reject is that with reject, a packet "
+"(TCP RST or ICMP port unreachable for UDP) is returned to the sender, "
+"whereas with block the packet is dropped silently. In either case, the "
+"original packet is discarded."
+msgstr ""
+"İpucu: Engelle ile reddet arasındaki fark şudur; reddedilen paket (TCP "
+"sıfırlama veya UDP ICM port erişilemez) sahibine geri gönderilir, engellenen "
+"paket ise sessizce silinir. İki durumda da asıl paket 'çöpe gider'."
+
+#: usr/local/www/firewall_rules_edit.php:866
+msgid "Quick"
+msgstr "Hızlı"
+
+#: usr/local/www/firewall_rules_edit.php:870
+msgid "Apply the action immediately on match."
+msgstr "Eşleşen olduğunda eylemi hemen gerçekleştir."
+
+#: usr/local/www/firewall_rules_edit.php:871
+msgid ""
+"Set this option if you need to apply this action to traffic that matches "
+"this rule immediately."
+msgstr ""
+"Bu kurala uyan trafiğin hemen uygulanması için bu seçeneği işaretleyin."
+
+#: usr/local/www/firewall_rules_edit.php:878
+msgid "Associated filter rule"
+msgstr "İlişkilendirilmiş filtreleme kuralı"
+
+#: usr/local/www/firewall_rules_edit.php:880
+msgid "This is associated to a NAT rule."
+msgstr "Bu bir NAT kuralına ilişkilendirilmiş."
+
+#: usr/local/www/firewall_rules_edit.php:881
+msgid ""
+"You cannot edit the interface, protocol, source, or destination of "
+"associated filter rules."
+msgstr ""
+"İlişkilendirilmiş filtreleme kurallarının arabirim, protokol, kaynak ya da "
+"hedefini deÄŸiÅŸtiremezsiniz."
+
+#: usr/local/www/firewall_rules_edit.php:888
+msgid "View the NAT rule"
+msgstr "NAT kuralını görüntüle"
+
+#: usr/local/www/firewall_rules_edit.php:948
+msgid "Choose on which interface packets must come in to match this rule."
+msgstr "Bu kurala uyacak paketlerin hangi arabirimden geleceğinini seçiniz."
+
+#: usr/local/www/firewall_rules_edit.php:972
+msgid "TCP/IP Version"
+msgstr "TCP/IP Versiyonu"
+
+#: usr/local/www/firewall_rules_edit.php:984
+msgid "Select the Internet Protocol version this rule applies to"
+msgstr "Kuralların uygulanacağı İnternet Protokol versiyonunu seçin"
+
+#: usr/local/www/firewall_rules_edit.php:998
+msgid "Hint: in most cases, you should specify "
+msgstr "İpucu: Çoğu durumda şunu belirtmelisiniz "
+
+#: usr/local/www/firewall_rules_edit.php:1002
+msgid "ICMP type"
+msgstr "ICMP türü"
+
+#: usr/local/www/firewall_rules_edit.php:1014
+#: usr/local/www/firewall_rules_edit.php:1030
+msgid ""
+"If you selected ICMP for the protocol above, you may specify an ICMP type "
+"here."
+msgstr ""
+"Eğer yukarıdan ICMP protokolünü seçtiyseniz burada ICMP türü "
+"belirtebilirsiniz."
+
+#: usr/local/www/firewall_rules_edit.php:1018
+msgid "ICMPv6 type"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1096
+msgid "Show source port range"
+msgstr "Kaynak port aralığını göster"
+
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid "Specify the source port or port range for this rule."
+msgstr "Bu kural için kaynak port ya da port aralığı belirtiniz."
+
+#: usr/local/www/firewall_rules_edit.php:1133
+msgid ""
+"and almost never equal to the destination port range (and should usually be"
+msgstr ""
+"ve neredeyse hiçbir zaman hedef port aralığıyla aynı değildir (ve genellikle"
+
+#: usr/local/www/firewall_rules_edit.php:1133
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "'to'"
+msgstr "'hedef'"
+
+#: usr/local/www/firewall_rules_edit.php:1201
+msgid "Destination port range "
+msgstr "Hedef port aralığı "
+
+#: usr/local/www/firewall_rules_edit.php:1233
+msgid ""
+"Specify the port or port range for the destination of the packet for this "
+"rule."
+msgstr "Bu kural için hedef port yada port aralığı belirtin."
+
+#: usr/local/www/firewall_rules_edit.php:1235
+msgid "field empty if you only want to filter a single port"
+msgstr "tek portun filtrelenmesi için alanı boş bırakınız"
+
+#: usr/local/www/firewall_rules_edit.php:1240
+msgid "Log"
+msgstr "Günlük"
+
+#: usr/local/www/firewall_rules_edit.php:1243
+msgid "Log packets that are handled by this rule"
+msgstr "Bu kural tarafından işlenen paketleri günlükle"
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid ""
+"Hint: the firewall has limited local log space. Don't turn on logging for "
+"everything. If you want to do a lot of logging, consider using a remote "
+"syslog server"
+msgstr ""
+"İpucu: Güvenlik duvarının yerel günlük alanı kısıtlıdır. Herşeyi günlüğe "
+"kaydetmeyin. Eğer çok sayıda günlükleme faaliyeti olacaksa bir uzak syslog "
+"sunucu kullanmayı düşünebilirsiniz"
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid "see the"
+msgstr "bakın"
+
+#: usr/local/www/firewall_rules_edit.php:1245
+msgid "Diagnostics: System logs: Settings"
+msgstr "Araçlar: Sistem kayıtları: Ayarlar"
+
+#: usr/local/www/firewall_rules_edit.php:1245
+#: usr/local/www/services_captiveportal.php:1060
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "page"
+msgstr "sayfa"
+
+#: usr/local/www/firewall_rules_edit.php:1253
+#: usr/local/www/services_unbound_acls.php:300
+msgid "You may enter a description here for your reference."
+msgstr "Bu alana kendiniz için herhangi bir açıklama girebilirsiniz."
+
+#: usr/local/www/firewall_rules_edit.php:1274 usr/local/www/pkg_edit.php:446
+msgid "Advanced features"
+msgstr "Gelişmiş özellikler"
+
+#: usr/local/www/firewall_rules_edit.php:1277
+msgid "Source OS"
+msgstr "Kaynak Ä°ÅŸletim Sistemi"
+
+#: usr/local/www/firewall_rules_edit.php:1280
+#: usr/local/www/firewall_rules_edit.php:1302
+#: usr/local/www/firewall_rules_edit.php:1318
+#: usr/local/www/firewall_rules_edit.php:1358
+#: usr/local/www/firewall_rules_edit.php:1398
+#: usr/local/www/firewall_rules_edit.php:1428
+#: usr/local/www/firewall_rules_edit.php:1440
+#: usr/local/www/firewall_rules_edit.php:1495
+#: usr/local/www/firewall_rules_edit.php:1522
+#: usr/local/www/firewall_rules_edit.php:1571
+#: usr/local/www/firewall_rules_edit.php:1621
+#: usr/local/www/firewall_rules_edit.php:1676
+#: usr/local/www/interfaces.php:1743 usr/local/www/pkg_edit.php:1129
+#: usr/local/www/services_dnsmasq.php:307
+#: usr/local/www/services_unbound.php:371
+msgid "Show advanced option"
+msgstr "Gelişmiş seçeneği göster"
+
+#: usr/local/www/firewall_rules_edit.php:1283
+msgid "OS Type:"
+msgstr "İşletim Sistemi Türü:"
+
+#: usr/local/www/firewall_rules_edit.php:1294
+msgid ""
+"Note: this only works for TCP rules. General OS choice matches all subtypes."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1299
+msgid "Diffserv Code Point"
+msgstr "Fark sunucusu kod noktası"
+
+#: usr/local/www/firewall_rules_edit.php:1315
+#: usr/local/www/interfaces_ppps_edit.php:688
+#: usr/local/www/vpn_ipsec_phase1.php:862
+#: usr/local/www/vpn_ipsec_phase2.php:817
+msgid "Advanced Options"
+msgstr "Gelişmiş Seçenekler"
+
+#: usr/local/www/firewall_rules_edit.php:1322
+msgid ""
+"This allows packets with IP options to pass. Otherwise they are blocked by "
+"default. This is usually only seen with multicast traffic."
+msgstr ""
+"Bu ayar IP özellikli paketlerin geçmesine izin verir. Aksi taktirde "
+"öntanımlı olarak engellenirler. seçenek izin verilecek IP seçeneklerini "
+"belirler. Bu durum genellikle sadece çok noktaya yayın yapan trafikte "
+"görülür."
+
+#: usr/local/www/firewall_rules_edit.php:1325
+msgid "This will disable auto generated reply-to for this rule."
+msgstr ""
+"Bu seçenek bu kural için otomatik oluşturulacak olan cevap kuralını devre "
+"dışı bırakır."
+
+#: usr/local/www/firewall_rules_edit.php:1328
+msgid ""
+"You can mark a packet matching this rule and use this mark to match on other "
+"NAT/filter rules. It is called"
+msgstr ""
+"Bu kurala uyan paketleri iÅŸaretleyebilirsiniz. O iÅŸareti de diÄŸer NAT/filtre "
+"kurallarında kullanabilirsiniz. Buna"
+
+#: usr/local/www/firewall_rules_edit.php:1328
+msgid "Policy filtering"
+msgstr "Ä°lke filtreleme denir"
+
+#: usr/local/www/firewall_rules_edit.php:1331
+msgid "You can match packet on a mark placed before on another rule."
+msgstr "Daha önce başka bir kuralda işaretlenen paketle eşleştirebilirsiniz."
+
+#: usr/local/www/firewall_rules_edit.php:1333
+msgid " Maximum state entries this rule can create"
+msgstr " Bu kuralın oluşturabileceği maksimum durum girdisi"
+
+#: usr/local/www/firewall_rules_edit.php:1334
+msgid " Maximum number of unique source hosts"
+msgstr " Maksimum benzersiz kaynak host sayısı"
+
+#: usr/local/www/firewall_rules_edit.php:1335
+msgid " Maximum number of established connections per host (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1336
+msgid " Maximum state entries per host"
+msgstr " Host başına maksimum durum girdisi"
+
+#: usr/local/www/firewall_rules_edit.php:1345
+msgid "Maximum new connections per host / per second(s) (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1348
+msgid "State Timeout in seconds (TCP only)"
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1350
+msgid "Note: Leave fields blank to disable that feature."
+msgstr "Not: Bu özelliği kapatmak için alanları boş bırakınız."
+
+#: usr/local/www/firewall_rules_edit.php:1355
+msgid "TCP flags"
+msgstr "TCP bayrakları"
+
+#: usr/local/www/firewall_rules_edit.php:1387
+msgid "Any flags."
+msgstr "Tüm bayraklar."
+
+#: usr/local/www/firewall_rules_edit.php:1389
+msgid ""
+"Use this to choose TCP flags that must be set or cleared for this rule to "
+"match."
+msgstr ""
+"Bu kuralın eşleşmesi için 1 ya da 0 yapılacak TCP bayraklarını belirlemek "
+"için kullanabilirsiniz."
+
+#: usr/local/www/firewall_rules_edit.php:1395
+msgid "State Type"
+msgstr "Durum Türü"
+
+#: usr/local/www/firewall_rules_edit.php:1404
+msgid ""
+"Hint: This prevents states created by this rule to be sync'ed over pfsync."
+msgstr ""
+
+#: usr/local/www/firewall_rules_edit.php:1407
+#: usr/local/www/firewall_rules_edit.php:1416
+msgid "keep state"
+msgstr "durumu koru"
+
+#: usr/local/www/firewall_rules_edit.php:1408
+#: usr/local/www/firewall_rules_edit.php:1417
+msgid "sloppy state"
+msgstr "yarım durum"
+
+#: usr/local/www/firewall_rules_edit.php:1409
+#: usr/local/www/firewall_rules_edit.php:1418
+msgid "synproxy state"
+msgstr "synproxy durumu"
+
+#: usr/local/www/firewall_rules_edit.php:1413
+msgid ""
+"Hint: Select which type of state tracking mechanism you would like to use. "
+"If in doubt, use keep state."
+msgstr ""
+"İpucu: Ne tür durum takip mekanizması kullanmak istediğinizi seçin. Emin "
+"değilseniz 'durumu koru'yu kullanın."
+
+#: usr/local/www/firewall_rules_edit.php:1416
+#: usr/local/www/firewall_rules_edit.php:1417
+msgid "Works with all IP protocols."
+msgstr "Tüm IP protokolleri ile çalışır."
+
+#: usr/local/www/firewall_rules_edit.php:1418
+msgid ""
+"Proxies incoming TCP connections to help protect servers from spoofed TCP "
+"SYN floods. This option includes the functionality of keep state and "
+"modulate state combined."
+msgstr ""
+"Gelen TCP bağlantılarına vekillik yaparak sunucuları TCP SYN yükleme "
+"saldırılarından korur. Bu seçenek durumu koru ve durumu ayarla "
+"fonksiyonelliÄŸini birlikte saÄŸlar."
+
+#: usr/local/www/firewall_rules_edit.php:1419
+msgid ""
+"Do not use state mechanisms to keep track. This is only useful if you're "
+"doing advanced queueing in certain situations. Please check the "
+"documentation."
+msgstr ""
+"İzleme amaçlı olarak durum mekanizmalarını kullanma. Bu sadece belirli "
+"durumlarda, gelişmiş kuyruklama yapıyorsanız kullanışlıdır. Lütfen "
+"belgeleri kontrol edin."
+
+#: usr/local/www/firewall_rules_edit.php:1437
+msgid "802.1p"
+msgstr "802.1p"
+
+#: usr/local/www/firewall_rules_edit.php:1472
+msgid "Choose 802.1p priority to match on"
+msgstr "802.1p eşleşen önceliği seçin"
+
+#: usr/local/www/firewall_rules_edit.php:1476
+msgid "Choose 802.1p priority to apply"
+msgstr "802.1p uygulanacak önceliği seçin"
+
+#: usr/local/www/firewall_rules_edit.php:1514
+msgid "Leave as 'none' to leave the rule enabled all the time."
+msgstr "Kuralın her zaman etkin olması için 'hiçbiri' olarak bırakın."
+
+#: usr/local/www/firewall_rules_edit.php:1526
+#: usr/local/www/services_captiveportal.php:896
+#: usr/local/www/services_captiveportal.php:926
+#: usr/local/www/services_ntpd_gps.php:464
+#: usr/local/www/services_ntpd_gps.php:470
+#: usr/local/www/services_ntpd_gps.php:476
+#: usr/local/www/services_ntpd_gps.php:552
+#: usr/local/www/services_ntpd_pps.php:162
+#: usr/local/www/services_ntpd_pps.php:168
+#: usr/local/www/services_ntpd_pps.php:212
+msgid "default"
+msgstr "varsayılan"
+
+#: usr/local/www/firewall_rules_edit.php:1563
+msgid ""
+"Leave as 'default' to use the system routing table. Or choose a gateway to "
+"utilize policy based routing."
+msgstr ""
+"Sistem yönlendirme tablolarını kullanmak için 'varsayılan'da bırakınız. Ya "
+"da ilke tabanlı yönlendirme yapmak için bir ağ geçidi seçin."
+
+#: usr/local/www/firewall_rules_edit.php:1568
+msgid "In/Out"
+msgstr "İçeri/Dışarı"
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"Choose the Out queue/Virtual interface only if you have also selected In."
+msgstr ""
+"Sadece 'İçeri'yi de seçtiyseniz 'Dışarı' kuyruğunu veya sanal arabirimi "
+"seçin."
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"The Out selection is applied to traffic leaving the interface where the rule "
+"is created, In is applied to traffic coming into the chosen interface."
+msgstr ""
+"'Dışarı' seçimi kuralın oluşturulduğu arabirimden ayrılan trafiğe, 'İçeri' "
+"seçimi ise arabirime gelen trafiğe uygulanır."
+
+#: usr/local/www/firewall_rules_edit.php:1612
+msgid ""
+"If you are creating a floating rule, if the direction is In then the same "
+"rules apply, if the direction is out the selections are reverted Out is for "
+"incoming and In is for outgoing."
+msgstr ""
+"Değişen türde bir kural oluşturuyorsanız, yön 'İçeri' ise kural aynen "
+"geçerlidir ama yön 'Dışarı' ise yaptığınız seçimler tersine çevrilir "
+"'Dışarı' gelen, 'İçeri' giden paketler için olur."
+
+#: usr/local/www/firewall_rules_edit.php:1618
+msgid "Ackqueue/Queue"
+msgstr "Alındılama kuyruğu/Kuyruk"
+
+#: usr/local/www/firewall_rules_edit.php:1668
+msgid "Choose the Acknowledge Queue only if you have selected Queue."
+msgstr "Sadece Kuyruk seçtiyseniz Alındılama Kuyruğu'nu seçin."
+
+#: usr/local/www/firewall_rules_edit.php:1673
+#: usr/local/www/firewall_shaper.php:415
+#: usr/local/www/firewall_shaper_layer7.php:60
+#: usr/local/www/firewall_shaper_layer7.php:411
+#: usr/local/www/firewall_shaper_queues.php:198
+#: usr/local/www/firewall_shaper_vinterface.php:395
+#: usr/local/www/firewall_shaper_wizards.php:106
+msgid "Layer7"
+msgstr "Layer7"
+
+#: usr/local/www/firewall_rules_edit.php:1696
+msgid ""
+"Choose a Layer7 container to apply application protocol inspection rules. "
+"These are valid for TCP and UDP protocols only."
+msgstr ""
+"Uygulama protokolü inceleme kurallarını uygulamak için Layer7 barındırıcı "
+"seçiniz. Bu seçenekler sadece TCP ve UDP protokolleri için geçerlidir."
+
+#: usr/local/www/firewall_schedule.php:78
+#, php-format
+msgid "Cannot delete Schedule. Currently in use by %s"
+msgstr "Zamanlama %s tarafından kullanıldığından silinemez"
+
+#: usr/local/www/firewall_schedule.php:98
+msgid "Time Range(s)"
+msgstr "Zaman Aralık(lar)ı"
+
+#: usr/local/www/firewall_schedule.php:104
+#: usr/local/www/firewall_schedule.php:234
+msgid "add a new schedule"
+msgstr "yeni zamanlama ekle"
+
+#: usr/local/www/firewall_schedule.php:116
+msgid "Schedule is currently active"
+msgstr "Zamanlama etkin durumda"
+
+#: usr/local/www/firewall_schedule.php:221
+msgid "edit alias"
+msgstr "grubu düzenle"
+
+#: usr/local/www/firewall_schedule.php:222
+msgid "Do you really want to delete this schedule?"
+msgstr "Bu zamanlamayı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/firewall_schedule.php:222
+msgid "delete alias"
+msgstr "grubu sil"
+
+#: usr/local/www/firewall_schedule.php:241
+msgid ""
+"Schedules act as placeholders for time ranges to be used in Firewall Rules."
+msgstr ""
+"Zamanlamalar güvenlik duvarı kurallarında bir veya daha fazla zaman "
+"aralığına taşıyıcı görevi görür."
+
+#: usr/local/www/firewall_schedule_edit.php:90
+msgid "Schedule may not be named LAN."
+msgstr "Zamanlama ismi LAN olamaz."
+
+#: usr/local/www/firewall_schedule_edit.php:92
+msgid "Schedule may not be named WAN."
+msgstr "Zamanlama ismi WAN olamaz."
+
+#: usr/local/www/firewall_schedule_edit.php:94
+msgid "Schedule name cannot be blank."
+msgstr "Zamanlama adı alanı boş bırakılamaz."
+
+#: usr/local/www/firewall_schedule_edit.php:98
+msgid "Reserved word used for schedule name."
+msgstr "Zamanlama adı olarak ayrılmış bir isim kullanılamaz."
+
+#: usr/local/www/firewall_schedule_edit.php:101
+msgid "The schedule name may only consist of the characters a-z, A-Z, 0-9"
+msgstr ""
+"Zamanlama adı sadece a-z, A-Z, 0-9 karakterlerinden oluşmalıdır ve Türkçe "
+"karakter kullanılmamalıdır"
+
+#: usr/local/www/firewall_schedule_edit.php:110
+msgid "A Schedule with this name already exists."
+msgstr "Bu isimde bir zamanlama zaten var."
+
+#: usr/local/www/firewall_schedule_edit.php:123
+#, php-format
+msgid "Invalid start time - '%s'"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:127
+#, php-format
+msgid "Invalid stop time - '%s'"
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:175
+msgid "The schedule must have at least one time range configured."
+msgstr "Zamanlamada en az bir zaman aralığı tanımlanmış olmalıdır."
+
+#: usr/local/www/firewall_schedule_edit.php:782
+msgid "Schedule information"
+msgstr "Zamanlama bilgisi"
+
+#: usr/local/www/firewall_schedule_edit.php:788
+msgid "Schedule Name"
+msgstr "Zamanlama Adı"
+
+#: usr/local/www/firewall_schedule_edit.php:794
+msgid "NOTE: This schedule is in use so the name may not be modified!"
+msgstr ""
+"NOT: Bu zamanlama bir güvenlik duvarı tarafından kullanılıyor, o yüzden adı "
+"deÄŸiÅŸtirilemez!"
+
+#: usr/local/www/firewall_schedule_edit.php:799
+msgid ""
+"The name of the alias may only consist of the characters a-z, A-Z and 0-9"
+msgstr ""
+"Grup adı a-z,A-Z, ve 0-9 arası karakterler içerebilir, Türkçe karakter "
+"kullanılmamalıdır"
+
+#: usr/local/www/firewall_schedule_edit.php:816
+msgid "Month"
+msgstr "Ay"
+
+#: usr/local/www/firewall_schedule_edit.php:859
+msgid "Tue"
+msgstr "Sal"
+
+#: usr/local/www/firewall_schedule_edit.php:861
+msgid "Thu"
+msgstr "Per"
+
+#: usr/local/www/firewall_schedule_edit.php:918
+msgid ""
+"Click individual date to select that date only. Click the appropriate "
+"weekday Header to select all occurrences of that weekday."
+msgstr ""
+
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:1008
+msgid "Start Time"
+msgstr "Başlama Zamanı"
+
+#: usr/local/www/firewall_schedule_edit.php:926
+#: usr/local/www/firewall_schedule_edit.php:1009
+msgid "Stop Time"
+msgstr "Bitiş Zamanı"
+
+#: usr/local/www/firewall_schedule_edit.php:939
+#: usr/local/www/firewall_schedule_edit.php:964
+msgid "Hr"
+msgstr "Sa"
+
+#: usr/local/www/firewall_schedule_edit.php:946
+#: usr/local/www/firewall_schedule_edit.php:971
+msgid "Min"
+msgstr "Dak"
+
+#: usr/local/www/firewall_schedule_edit.php:975
+msgid ""
+"Select the time range for the day(s) selected on the Month(s) above. A full "
+"day is 0:00-23:59."
+msgstr ""
+"Seçili tarihler için saat-dakika aralığını seçin. Tam bir gün 0:00 ile 23:59 "
+"arasıdır."
+
+#: usr/local/www/firewall_schedule_edit.php:979
+msgid "Time Range Description"
+msgstr "Zaman Aralığı Açıklaması"
+
+#: usr/local/www/firewall_schedule_edit.php:989
+msgid "Add Time"
+msgstr "Zaman Ekle"
+
+#: usr/local/www/firewall_schedule_edit.php:990
+msgid "Clear Selection"
+msgstr "Seçimi Temizle"
+
+#: usr/local/www/firewall_schedule_edit.php:999
+msgid "Schedule repeat"
+msgstr "Zamanlama tekrarı"
+
+#: usr/local/www/firewall_schedule_edit.php:1002
+msgid "Configured Ranges"
+msgstr "Yapılandırılan Aralıklar"
+
+#: usr/local/www/firewall_schedule_edit.php:1007
+msgid "Day(s)"
+msgstr "Gün(ler)"
+
+#: usr/local/www/firewall_shaper.php:132
+#: usr/local/www/firewall_shaper_vinterface.php:146
+msgid "Unable to write config.xml (Access Denied?)"
+msgstr "Config.xml dosyasına yazılamadı (Erişim Reddedildi?)"
+
+#: usr/local/www/firewall_shaper.php:161
+#: usr/local/www/firewall_shaper_vinterface.php:160
+msgid "Could not create new queue/discipline!"
+msgstr "Yeni kuyruk/disiplin oluşturulamadı!"
+
+#: usr/local/www/firewall_shaper.php:177 usr/local/www/firewall_shaper.php:186
+#: usr/local/www/firewall_shaper.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:173
+#: usr/local/www/firewall_shaper_vinterface.php:183
+#: usr/local/www/firewall_shaper_vinterface.php:193
+msgid "Queue not found!"
+msgstr "Kuyruk bulunamadı!"
+
+#: usr/local/www/firewall_shaper.php:272
+#: usr/local/www/firewall_shaper_vinterface.php:247
+msgid "Could not add new queue."
+msgstr "Yeni kuyruk eklenemedi."
+
+#: usr/local/www/firewall_shaper.php:348
+#: usr/local/www/firewall_shaper_vinterface.php:316
+msgid "Queue Actions"
+msgstr "Kuyruk Eylemleri"
+
+#: usr/local/www/firewall_shaper.php:359
+#: usr/local/www/firewall_shaper_vinterface.php:327
+msgid "Add new queue"
+msgstr "Yeni kuyruk ekle"
+
+#: usr/local/www/firewall_shaper.php:370
+#: usr/local/www/firewall_shaper_vinterface.php:338
+msgid "Delete this queue"
+msgstr "Bu kuyruÄŸu sil"
+
+#: usr/local/www/firewall_shaper.php:372
+msgid "Disable shaper on interface"
+msgstr "Arabirimdeki ÅŸekillendiriciyi kapat"
+
+#: usr/local/www/firewall_shaper.php:406
+#: usr/local/www/firewall_shaper_vinterface.php:386
+#: usr/local/www/firewall_shaper_wizards.php:97
+msgid "The traffic shaper configuration has been changed."
+msgstr "Trafik şekillendirici yapılandırması değiştirildi."
+
+#: usr/local/www/firewall_shaper.php:412
+#: usr/local/www/firewall_shaper_layer7.php:408
+#: usr/local/www/firewall_shaper_queues.php:195
+#: usr/local/www/firewall_shaper_vinterface.php:392
+#: usr/local/www/firewall_shaper_wizards.php:103
+msgid "By Interface"
+msgstr "Arabirime Göre"
+
+#: usr/local/www/firewall_shaper.php:413
+#: usr/local/www/firewall_shaper_layer7.php:409
+#: usr/local/www/firewall_shaper_queues.php:196
+#: usr/local/www/firewall_shaper_vinterface.php:393
+#: usr/local/www/firewall_shaper_wizards.php:104
+msgid "By Queue"
+msgstr "Kuyruğa Göre"
+
+#: usr/local/www/firewall_shaper.php:414
+#: usr/local/www/firewall_shaper_layer7.php:410
+#: usr/local/www/firewall_shaper_queues.php:197
+#: usr/local/www/firewall_shaper_vinterface.php:54
+#: usr/local/www/firewall_shaper_vinterface.php:394
+#: usr/local/www/firewall_shaper_wizards.php:105
+msgid "Limiter"
+msgstr "Limitleyici"
+
+#: usr/local/www/firewall_shaper.php:416
+#: usr/local/www/firewall_shaper_layer7.php:412
+#: usr/local/www/firewall_shaper_queues.php:199
+#: usr/local/www/firewall_shaper_vinterface.php:396
+#: usr/local/www/firewall_shaper_wizards.php:74
+#: usr/local/www/firewall_shaper_wizards.php:107
+#: usr/local/www/vpn_openvpn_client.php:448
+#: usr/local/www/vpn_openvpn_csc.php:319
+#: usr/local/www/vpn_openvpn_server.php:746
+msgid "Wizards"
+msgstr "Sihirbazlar"
+
+#: usr/local/www/firewall_shaper.php:427
+msgid "Remove Shaper"
+msgstr "Şekillendiriciyi Kaldır"
+
+#: usr/local/www/firewall_shaper_layer7.php:67
+msgid "You can add new layer7 protocol patterns by simply uploading the file"
+msgstr "Dosyayı yükleyerek yeni layer7 protokol örüntüleri ekleyebilirsiniz"
+
+#: usr/local/www/firewall_shaper_layer7.php:112
+msgid "Layer7 Rules Container not found!"
+msgstr "Layer7 Kural Barındırıcısı bulunamadı!"
+
+#: usr/local/www/firewall_shaper_layer7.php:162
+msgid "Found the following repeated protocol definitions"
+msgstr "Şu tekrarlanan protokol tanımları tespit edildi"
+
+#: usr/local/www/firewall_shaper_layer7.php:402
+#: usr/local/www/firewall_shaper_queues.php:189
+msgid "The traffic shaper configuration has been changed"
+msgstr "Trafik şekillendirme yapılandırması değiştirildi"
+
+#: usr/local/www/firewall_shaper_layer7.php:433
+msgid "Create new l7 rules group"
+msgstr "Yeni Layer7 kural grubu oluÅŸtur"
+
+#: usr/local/www/firewall_shaper_layer7.php:446
+msgid "Rule(s)"
+msgstr "Kural(lar)"
+
+#: usr/local/www/firewall_shaper_layer7.php:458
+msgid "Add one or more rules"
+msgstr "Bir yada daha fazla kural ekle"
+
+#: usr/local/www/firewall_shaper_layer7.php:474
+msgid "Structure"
+msgstr "Yapı"
+
+#: usr/local/www/firewall_shaper_layer7.php:481
+msgid "Behaviour"
+msgstr "Davranış"
+
+#: usr/local/www/firewall_shaper_queues.php:173
+msgid "Firewall: Shaper: By Queues View"
+msgstr "Güvenlik Duvarı: Şekillendirici: Kuyruk Görünümü"
+
+#: usr/local/www/firewall_shaper_vinterface.php:102
+msgid ""
+"This pipe/queue is referenced in filter rules, please remove references from "
+"there before deleting."
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:114
+#, php-format
+msgid "No queue with name %s was found!"
+msgstr "%s adında kuyruk bulunamadı!"
+
+#: usr/local/www/firewall_shaper_vinterface.php:205
+#: usr/local/www/firewall_shaper_vinterface.php:230
+msgid "You cannot name a child queue with the same name as a parent limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:340
+msgid "Delete Limiter"
+msgstr ""
+
+#: usr/local/www/firewall_shaper_vinterface.php:415
+msgid "Create new limiter"
+msgstr "Yeni limitleyici ekle"
+
+#: usr/local/www/firewall_shaper_wizards.php:78
+msgid "Multiple Lan/Wan"
+msgstr "Çoklu LAN/WAN"
+
+#: usr/local/www/firewall_shaper_wizards.php:79
+msgid "Dedicated Links"
+msgstr "Adanmış Bağlantılar"
+
+#: usr/local/www/firewall_shaper_wizards.php:116
+msgid "Wizard function"
+msgstr "Sihirbaz fonksiyonu"
+
+#: usr/local/www/firewall_shaper_wizards.php:117
+msgid "Wizard Link"
+msgstr "Sihirbaz Bağlantısı"
+
+#: usr/local/www/firewall_virtual_ip.php:104
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"NAT mapping."
+msgstr "Bu girdi en az bir NAT eşleme kuralında kullanıldığı için silinemez."
+
+# 90%
+#: usr/local/www/firewall_virtual_ip.php:138
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"Gateway."
+msgstr ""
+"Bu girdi en az bir tane Ağ Geçidi tarafından kullanıldığı için silinemez."
+
+#: usr/local/www/firewall_virtual_ip.php:165
+msgid ""
+"This entry cannot be deleted because it is still referenced by a CARP IP "
+"with the description"
+msgstr ""
+"Bu girdi halen açıklama içeren CARP IP ile beraber kullanıldığı için "
+"silinemez"
+
+#: usr/local/www/firewall_virtual_ip.php:170
+msgid ""
+"This entry cannot be deleted because it is still referenced by an IP alias "
+"entry with the description"
+msgstr ""
+"Bu girdi halen açıklama içeren IP grubu ile beraber kullanıldığı için "
+"silinemez"
+
+#: usr/local/www/firewall_virtual_ip.php:203
+msgid "Virtual IP Addresses"
+msgstr "Sanal IP Adresleri"
+
+#: usr/local/www/firewall_virtual_ip.php:218
+msgid "The VIP configuration has been changed."
+msgstr "Sanal IP yapılandırılması değiştirildi."
+
+#: usr/local/www/firewall_virtual_ip.php:227
+msgid "CARP Settings"
+msgstr "CARP Ayarları"
+
+#: usr/local/www/firewall_virtual_ip.php:239
+msgid "Virtual IP address"
+msgstr "Sanal IP adresi"
+
+#: usr/local/www/firewall_virtual_ip.php:285
+#: usr/local/www/services_captiveportal_zones.php:117
+#: usr/local/www/services_dyndns.php:179 usr/local/www/services_wol.php:189
+#: usr/local/www/system_advanced_sysctl.php:210
+msgid "Do you really want to delete this entry?"
+msgstr "Bu girdiyi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "The virtual IP addresses defined on this page may be used in"
+msgstr "Bu sayfada tanımlanan sanal IP adresleri haritalamada "
+
+#: usr/local/www/firewall_virtual_ip.php:307
+msgid "mappings."
+msgstr "kullanılabilir."
+
+#: usr/local/www/firewall_virtual_ip.php:308
+msgid "You can check the status of your CARP Virtual IPs and interfaces "
+msgstr "CARP sanal IP ve arabirimlerinizin durumunu takip edebilirsiniz "
+
+#: usr/local/www/firewall_virtual_ip_edit.php:119
+#: usr/local/www/services_dhcp_edit.php:180
+#: usr/local/www/services_dnsmasq_edit.php:103
+#: usr/local/www/services_unbound_host_edit.php:105
+msgid "A valid IP address must be specified."
+msgstr "Geçerli bir IP adresi belirtilmelidir."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:140
+msgid "This IP address is being used by another interface or VIP."
+msgstr "Bu IP adresi başka bir arabirim veya VIP tarafından kullanılıyor."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:149
+msgid ""
+"The interface chosen for the VIP has no IPv4 or IPv6 address configured so "
+"it cannot be used as a parent for the VIP."
+msgstr ""
+"Seçilen arabirim IPv4 yada IPv6 adresi VIP olarak yapılandırılmadı bu "
+"yüzden Üst (parent) olarak VIP kullanılamaz."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:163
+msgid "You cannot use the network address for this VIP"
+msgstr "Ağ adresini bu VIP de kullanamazsınız"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:165
+msgid "You cannot use the broadcast address for this VIP"
+msgstr "Yayın adresini bu VIP de kullanamazsınız"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:177
+#, php-format
+msgid ""
+"VHID %s is already in use on interface %s. Pick a unique number on this "
+"interface."
+msgstr ""
+"VHID %s arabirimde zaten kullanılıyor %s. Bu arabirim için benzersiz bir "
+"numara seçiniz."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:181
+msgid ""
+"You must specify a CARP password that is shared between the two VHID members."
+msgstr ""
+"İki VHID üyesi arasında paylaşılacak bir CARP parolası belirlemelisiniz."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:194
+#: usr/local/www/firewall_virtual_ip_edit.php:218
+msgid "For this type of vip localhost is not allowed."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:196
+#: usr/local/www/firewall_virtual_ip_edit.php:220
+msgid ""
+"A CARP parent interface can only be used with IP Alias type Virtual IPs."
+msgstr ""
+
+#: usr/local/www/firewall_virtual_ip_edit.php:212
+#, php-format
+msgid ""
+"Sorry, we could not locate an interface with a matching subnet for %s. "
+"Please add an IP alias in this subnet on this interface."
+msgstr ""
+"%s altağına uyan arabirim yok. Lütfen bu arabirime bu altağda bir IP rumuzu "
+"ekleyiniz."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:290
+msgid "Virtual IP Address"
+msgstr "Sanal IP Adresi"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:316
+#: usr/local/www/firewall_virtual_ip_edit.php:318
+msgid ""
+"This must be the network's subnet mask. It does not specify a CIDR range."
+msgstr "Ağın altağ maskesi olmalıdır. CIDR aralığı belirtmez."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:317
+msgid "This is a CIDR block of proxy ARP addresses."
+msgstr "Vekil ARP adreslerinin CIDR bloÄŸudur."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:381
+msgid "Edit Virtual IP"
+msgstr "Sanal IP yi düzenle"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:387
+msgid "IP Alias"
+msgstr "IP Grubu"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:391
+msgid "Proxy ARP"
+msgstr "Vekil ARP"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:393
+msgid "Other"
+msgstr "DiÄŸer"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:415
+msgid "IP Address(es)"
+msgstr "IP Adres(ler)i"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:422
+msgid "Single address"
+msgstr "Tek adres"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:442
+msgid "Expansion:"
+msgstr "GeniÅŸleme:"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:462
+msgid "Virtual IP Password"
+msgstr "Sanal IP Parolası"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:464
+msgid "Enter the VHID group password."
+msgstr "VHID grubunun parolasını giriniz."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:468
+msgid "VHID Group"
+msgstr "VHID Grubu"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:476
+msgid "Enter the VHID group that the machines will share"
+msgstr "Sistemlerin paylaşacağı VHID grubunu giriniz"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:480
+msgid "Advertising Frequency"
+msgstr "Duyuru Sıklığı"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:497
+msgid ""
+"The frequency that this machine will advertise. 0 means usually master. "
+"Otherwise the lowest combination of both values in the cluster determines "
+"the master."
+msgstr ""
+"Bu makinanın duyuru yapma sıklığı. 0 genellikle ana eleman demektir. Diğer "
+"durumlarda kümedeki iki değerin en düşük kombinasyonu ana elemanın hangisi "
+"olduÄŸunu belirler."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:522
+msgid ""
+"Proxy ARP and Other type Virtual IPs cannot be bound to by anything running "
+"on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type "
+"address for these cases."
+msgstr ""
+"Vekil ARP ve Diğer IP(ler) türündeki adresler OpenVPN, IPsec ve Güvenlik "
+"Duvarı gibi çalışan servisler ile bağlı olamaz. Bu gibi durumlar için bir "
+"CARP veya IP Grubu türünde adres kullanın."
+
+#: usr/local/www/firewall_virtual_ip_edit.php:523
+msgid "For more information on CARP and the above values, visit the OpenBSD "
+msgstr ""
+"CARP ve yukarıdaki değerler hakkında daha fazla bilgi için OpenBSD ziyaret "
+"edebilirsiniz"
+
+#: usr/local/www/firewall_virtual_ip_edit.php:523
+msgid "CARP FAQ"
+msgstr "CARP Sıkça Sorulan Sorular"
+
+#: usr/local/www/graph.php:117
+msgid "In"
+msgstr "İçeri"
+
+#: usr/local/www/graph.php:118
+msgid "Out"
+msgstr "Dışarı"
+
+#: usr/local/www/graph.php:122
+msgid "Switch to bytes/s"
+msgstr "bayt/saniye gösterimine geç"
+
+#: usr/local/www/graph.php:123
+msgid "AutoScale"
+msgstr "otomatik Ölçekleme"
+
+#: usr/local/www/graph.php:126
+msgid "Graph shows last"
+msgstr "Grafik son"
+
+#: usr/local/www/graph.php:126 usr/local/www/interfaces.php:2721
+#: usr/local/www/interfaces.php:2843
+#: usr/local/www/interfaces_bridge_edit.php:347
+#: usr/local/www/interfaces_bridge_edit.php:357
+#: usr/local/www/interfaces_bridge_edit.php:366
+#: usr/local/www/interfaces_bridge_edit.php:437
+#: usr/local/www/services_dhcp.php:968 usr/local/www/services_dhcp.php:978
+#: usr/local/www/services_dhcp_edit.php:479
+#: usr/local/www/services_dhcp_edit.php:489
+#: usr/local/www/services_dhcpv6.php:655 usr/local/www/services_dhcpv6.php:665
+#: usr/local/www/services_ntpd_gps.php:463
+#: usr/local/www/services_ntpd_gps.php:469
+#: usr/local/www/services_ntpd_pps.php:161
+#: usr/local/www/services_rfc2136_edit.php:162
+#: usr/local/www/vpn_ipsec_phase1.php:855
+#: usr/local/www/vpn_ipsec_phase1.php:900
+#: usr/local/www/vpn_ipsec_phase2.php:810
+msgid "seconds"
+msgstr "saniyeyi gösterir"
+
+#: usr/local/www/graph.php:129 usr/local/www/graph_cpu.php:85
+msgid "Collecting initial data, please wait"
+msgstr "Başlangıç verisi toplanıyor, lütfen bekleyiniz"
+
+#: usr/local/www/graph.php:141 usr/local/www/graph_cpu.php:97
+msgid "No URL for getURL"
+msgstr "getURL için URL yok"
+
+#: usr/local/www/graph.php:148 usr/local/www/graph_cpu.php:104
+msgid "No callback function for getURL"
+msgstr "getURL için çağrı fonksiyonu yok"
+
+#: usr/local/www/graph.php:164 usr/local/www/graph_cpu.php:120
+msgid "Both getURL and XMLHttpRequest are undefined"
+msgstr "Ne getURL ne de XMLHttpRequest tanımlanmış"
+
+#: usr/local/www/graph.php:201
+msgid "Switch to"
+msgstr "Geç"
+
+#: usr/local/www/graph.php:207
+msgid "follow"
+msgstr "takip"
+
+#: usr/local/www/graph.php:368
+msgid "Kbps"
+msgstr "Kbps"
+
+#: usr/local/www/graph.php:370
+msgid "Mbps"
+msgstr "Mbps"
+
+#: usr/local/www/graph.php:372
+msgid "Gbps"
+msgstr "Gbps"
+
+#: usr/local/www/graph.php:378
+msgid "KB/s"
+msgstr "KB/sn"
+
+#: usr/local/www/graph.php:380
+msgid "MB/s"
+msgstr "MB/sn"
+
+#: usr/local/www/graph.php:382
+msgid "GB/s"
+msgstr "GB/sn"
+
+#: usr/local/www/graph_cpu.php:84
+msgid "Cannot get CPU load"
+msgstr "CPU yükü alınamadı"
+
+#: usr/local/www/guiconfig.inc:257
+#, php-format
+msgid "The field %s contains invalid characters."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:263
+#, php-format
+msgid "The field %s is required."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:280
+msgid "The following input errors were detected:"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:314
+msgid "apply"
+msgstr "uygula"
+
+#: usr/local/www/guiconfig.inc:314
+msgid "save"
+msgstr "kaydet"
+
+#: usr/local/www/guiconfig.inc:314 usr/local/www/system_certmanager.php:667
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "create"
+msgstr "iç sertifika otoritesi oluştur"
+
+#: usr/local/www/guiconfig.inc:337 usr/local/www/guiconfig.inc:402
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:98
+#: usr/local/www/system_usermanager_settings_test.php:128
+msgid "Close"
+msgstr "Kapat"
+
+#: usr/local/www/guiconfig.inc:379
+msgid "Undo"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:448
+msgid "The changes have been applied successfully."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:453
+msgid ""
+"You can also <a href=\"status_filter_reload.php\">monitor</a> the filter "
+"reload progress."
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1013
+msgid "Currently viewing: "
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1071
+msgid "move mouse out this alias to hide"
+msgstr "Bu grubu gizlemek için farenizi dışarı hareket ettirin"
+
+#: usr/local/www/guiconfig.inc:1111
+msgid "listing only first 10k items"
+msgstr ""
+
+#: usr/local/www/guiconfig.inc:1135
+msgid "edit this alias"
+msgstr "bu grubu düzenle"
+
+#: usr/local/www/guiconfig.inc:1146 usr/local/www/guiconfig.inc:1158
+msgid "loading..."
+msgstr "yükleniyor..."
+
+#: usr/local/www/halt.php:55
+msgid "Halt system"
+msgstr "Sistemi kapat"
+
+#: usr/local/www/halt.php:62
+msgid "The system is halting now. This may take one minute."
+msgstr "Sistem kapatılıyor. Bu işlem bir dakika sürebilir."
+
+#: usr/local/www/halt.php:68
+msgid "Are you sure you want to halt the system?"
+msgstr "Sistemi kapatmak istediÄŸinize emin misiniz?"
+
+# XML loglarında hatalara neden oluyor. Bu nedenle ş, ı ve ğ harfleri düzenlendi.
+#: usr/local/www/index.php:128
+msgid "Widget configuration has been changed."
+msgstr "Kullanilabilir pencere yapilandirmasi degistirildi."
+
+#: usr/local/www/index.php:185
+#, php-format
+msgid "Welcome to %s!\n"
+msgstr "%s - HoÅŸgeldiniz!\n"
+
+#: usr/local/www/index.php:186
+msgid "One moment while we start the initial setup wizard."
+msgstr "Kurulum sihirbazı hazırlanırken lütfen bekleyiniz."
+
+#: usr/local/www/index.php:187
+msgid ""
+"Embedded platform users: Please be patient, the wizard takes a little longer "
+"to run than the normal GUI."
+msgstr ""
+"Gömülü platform kullanıcıları: Sihirbazın tamamlanması normal grafik arayüze "
+"göre biraz daha uzun sürer, lütfen sabırlı olunuz."
+
+#: usr/local/www/index.php:188
+#, php-format
+msgid "To bypass the wizard, click on the %s logo on the initial page."
+msgstr "Sihirbazı geçmek için giriş sayfasındaki %s logosuna tıklayınız."
+
+#: usr/local/www/index.php:467
+msgid "Status: Dashboard"
+msgstr "Durum: Anasayfa"
+
+#: usr/local/www/index.php:497
+msgid "Available Widgets"
+msgstr "Kullanılabilir Pencere Araçları"
+
+#: usr/local/www/index.php:534
+msgid "Welcome to the Dashboard page"
+msgstr "Anasayfa'ya hoÅŸ geldiniz"
+
+#: usr/local/www/index.php:541
+msgid ""
+"This page allows you to customize the information you want to be displayed!"
+msgstr "Bu sayfa görüntülemek istediğiniz bilginin özelleştirilmesini sağlar!"
+
+#: usr/local/www/index.php:542
+msgid "To get started click the"
+msgstr "Başlamak için"
+
+#: usr/local/www/index.php:542
+msgid "icon to add widgets."
+msgstr "pencere araçları ekle simgesine tıklayınız."
+
+#: usr/local/www/index.php:544
+msgid "You can move any widget around by clicking and dragging the title."
+msgstr ""
+"Pencere araçlarını başlıklarına tıklayıp sürükleyerek taşıyabilirsiniz."
+
+#: usr/local/www/index.php:551
+msgid "Click here to add widgets"
+msgstr "Pencere aracı eklemek için tıklayınız"
+
+#: usr/local/www/index.php:553
+msgid "Click here for help"
+msgstr "Yardım için tıklayınız"
+
+#: usr/local/www/index.php:557
+msgid "Save Settings"
+msgstr "Ayarları Kaydet"
+
+#: usr/local/www/index.php:730
+msgid "Loading selected widget"
+msgstr "Seçili pencere aracı yükleniyor"
+
+#: usr/local/www/installer/installer.php:187
+msgid "Could not open /tmp/installer.sh for writing"
+msgstr "Yazmak için /tmp/installer.sh açılamadı"
+
+#: usr/local/www/installer/installer.php:362
+#, php-format
+msgid "Beginning installation on disk %s."
+msgstr "Disk %s üzerine kurulum başlıyor."
+
+#: usr/local/www/installer/installer.php:408
+msgid "Installer"
+msgstr "Kurulum"
+
+#: usr/local/www/installer/installer.php:916
+#: usr/local/www/installer/installer.php:1104
+msgid "ERROR: Could not find any suitable disks for installation."
+msgstr "HATA: Kurulum için uygun disk bulunamadı."
+
+#: usr/local/www/interfaces.php:250
+#, php-format
+msgid "Sorry, an alias with the name %s already exists."
+msgstr "%s isimli bir grup sistemde zaten var."
+
+#: usr/local/www/interfaces.php:415
+msgid "You have already applied your settings!"
+msgstr "Ayarlar zaten uygulandı!"
+
+#: usr/local/www/interfaces.php:495
+msgid "An interface with the specified description already exists."
+msgstr "Belirtilen açıklamaya sahip arabirim zaten var."
+
+#: usr/local/www/interfaces.php:500
+msgid "The interface description cannot contain only numbers."
+msgstr ""
+
+#: usr/local/www/interfaces.php:504
+msgid ""
+"The DHCP Server is active on this interface and it can be used only with a "
+"static IP configuration. Please disable the DHCP Server service on this "
+"interface first, then change the interface configuration."
+msgstr ""
+"Bu arabirimde DHCP sunucu aktif durumda ve sadece statik IP yapılandırması "
+"kullanılabilir. Arabirim yapılandırmasını değiştirmeden önce DHCP sunucu "
+"servisini durdurmalısınız."
+
+#: usr/local/www/interfaces.php:506
+msgid ""
+"The DHCP6 Server is active on this interface and it can be used only with a "
+"static IPv6 configuration. Please disable the DHCPv6 Server service on this "
+"interface first, then change the interface configuration."
+msgstr ""
+"DHCP6 Sunucusu bu arabirimde aktif ve sadece statik IPv6 yapılandırması "
+"tarafından kullanılır. Bu arabirimde lütfen DHCPv6 Sunucu servisini önce "
+"durdurun, daha sonra arabirim yapılandırmasını değiştirin. "
+
+#: usr/local/www/interfaces.php:511 usr/local/www/interfaces.php:1777
+#: usr/local/www/status_interfaces.php:260
+msgid "IPv4 address"
+msgstr "IPv4 adresi"
+
+#: usr/local/www/interfaces.php:511 usr/local/www/interfaces.php:564
+msgid "Subnet bit count"
+msgstr "Altağ bit sayısı"
+
+#: usr/local/www/interfaces.php:518
+msgid ""
+"This interface is referenced by IPv4 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr ""
+"Bu arabirim IPv4 VIP(lere) tarafından referans edildi. Lütfen arabirim "
+"'hiç' ('none') yapılandırmasını ayarlamadan önce bunları silin."
+
+#: usr/local/www/interfaces.php:523 usr/local/www/interfaces.php:576
+#: usr/local/www/interfaces.php:588 usr/local/www/interfaces.php:598
+#: usr/local/www/interfaces.php:603
+#, php-format
+msgid "You have to reassign the interface to be able to configure as %s."
+msgstr "%s yapılandırabilmek için arabirimi tekrar atamanız gerekli."
+
+#: usr/local/www/interfaces.php:527 usr/local/www/interfaces.php:2643
+msgid "Modem Port"
+msgstr "Modem Portu"
+
+#: usr/local/www/interfaces.php:527 usr/local/www/interfaces.php:2631
+#: usr/local/www/interfaces_ppps_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:536
+msgid "Phone Number"
+msgstr "Telefon Numarası"
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:536
+msgid "PPPoE username"
+msgstr "PPPoE kullanıcı adı"
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:536
+msgid "PPPoE password"
+msgstr "PPPoE parolası"
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:2711
+#: usr/local/www/interfaces.php:2833
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:210
+msgid "Dial on demand"
+msgstr "GerektiÄŸinde baÄŸlan"
+
+#: usr/local/www/interfaces.php:533 usr/local/www/interfaces.php:543
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:210
+msgid "Idle timeout value"
+msgstr "Boşta kalma süresi"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP username"
+msgstr "PPTP kullanıcı adı"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP password"
+msgstr "PPTP parolası"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP local IP address"
+msgstr "PPTP yerel IP adresi"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP subnet"
+msgstr "PPTP altaÄŸ"
+
+#: usr/local/www/interfaces.php:543 usr/local/www/interfaces.php:546
+msgid "PPTP remote IP address"
+msgstr "PPTP uzak IP adresi"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP username"
+msgstr "L2TP kullanıcı adı"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP password"
+msgstr "L2TP parolası"
+
+#: usr/local/www/interfaces.php:553 usr/local/www/interfaces.php:556
+msgid "L2TP remote IP address"
+msgstr "PPTP uzak IP adresi"
+
+#: usr/local/www/interfaces.php:571
+msgid ""
+"This interface is referenced by IPv6 VIPs. Please delete those before "
+"setting the interface to 'none' configuration."
+msgstr ""
+"Bu arabirim IPv6 VIP(lere) tarafından referans edildi. Lütfen arabirim "
+"'hiç' ('none') yapılandırmasını ayarlamadan önce bunları silin."
+
+#: usr/local/www/interfaces.php:582
+msgid "You can only have one interface configured in 6rd with same prefix."
+msgstr "Yapılandırabileceğiniz arabirim sadece bir tane 6. ile aynı ön-ek'te."
+
+# 89%
+#: usr/local/www/interfaces.php:593
+#, php-format
+msgid "You can only have one interface configured as 6to4."
+msgstr "Yapılandırabileceğiniz arabirim sadece bir tane 6 dan 4'e."
+
+#: usr/local/www/interfaces.php:606
+msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID."
+msgstr "IPv6 ön-eki kimliği için geçerli bir ondalık numara girmelisiniz."
+
+#: usr/local/www/interfaces.php:618
+#, php-format
+msgid "This track6 prefix ID is already being used in %s."
+msgstr ""
+
+#: usr/local/www/interfaces.php:631
+msgid "A valid IPv4 address must be specified."
+msgstr "Geçerli bir IPv4 adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:634
+msgid "This IPv4 address is being used by another interface or VIP."
+msgstr "Bu IPv4 adresi başka bir arabirim veya VIP tarafından kullanılıyor."
+
+#: usr/local/www/interfaces.php:639
+msgid "This IPv4 address is the network address and cannot be used"
+msgstr ""
+
+#: usr/local/www/interfaces.php:641
+msgid "This IPv4 address is the broadcast address and cannot be used"
+msgstr ""
+
+#: usr/local/www/interfaces.php:647
+msgid "This IPv4 address conflicts with a Static Route."
+msgstr "Bu IPv4 adresi statik yönlendirme ile çakışmaya neden olmaktadır."
+
+#: usr/local/www/interfaces.php:656 usr/local/www/services_dhcpv6_edit.php:132
+msgid "A valid IPv6 address must be specified."
+msgstr "Geçerli bir IPv6 adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:659
+msgid "This IPv6 address is being used by another interface or VIP."
+msgstr "Bu IPv6 adresi başka bir arabirim veya VIP tarafından kullanılıyor."
+
+#: usr/local/www/interfaces.php:664
+msgid "This IPv6 address conflicts with a Static Route."
+msgstr "Bu IPv6 adresi statik yönlendirme ile çakışmaya neden olmaktadır."
+
+#: usr/local/www/interfaces.php:672 usr/local/www/interfaces.php:674
+msgid "A valid subnet bit count must be specified."
+msgstr "Geçerli bir altağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/interfaces.php:676
+msgid "A valid alias IP address must be specified."
+msgstr "Geçerli bir Grup IP adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:678
+msgid "A valid alias subnet bit count must be specified."
+msgstr "Geçerli bir Grup altağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/interfaces.php:680
+msgid "A valid alias IP address must be specified to reject DHCP Leases from."
+msgstr ""
+
+#: usr/local/www/interfaces.php:694 usr/local/www/system_routes_edit.php:99
+msgid "A valid gateway must be specified."
+msgstr "Geçerli bir ağ geçidi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:698
+msgid "The service name contains invalid characters."
+msgstr "Servis adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/interfaces.php:700 usr/local/www/interfaces.php:716
+#: usr/local/www/interfaces_ppps_edit.php:228
+msgid "The idle timeout value must be an integer."
+msgstr "Boşta kalma süresi bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces.php:703 usr/local/www/interfaces_ppps_edit.php:231
+msgid "A valid PPPoE reset hour must be specified (0-23)."
+msgstr "Geçerli bir PPPoE sıfırlama saati belirtilmelidir (0-23)."
+
+#: usr/local/www/interfaces.php:706 usr/local/www/interfaces_ppps_edit.php:234
+msgid "A valid PPPoE reset minute must be specified (0-59)."
+msgstr "Geçerli bir PPPoE sıfırlama dakikası belirtilmelidir (0-59)."
+
+#: usr/local/www/interfaces.php:708 usr/local/www/interfaces_ppps_edit.php:236
+msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)."
+msgstr "Geçerli bir PPPoE sıfırlama tarihi girilmelidir.(aa/gg/yyyy)."
+
+#: usr/local/www/interfaces.php:710
+msgid "A valid PPTP local IP address must be specified."
+msgstr "Geçerli bir PPTP yerel IP adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:712
+msgid "A valid PPTP subnet bit count must be specified."
+msgstr "Geçerli bir PPTP altağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/interfaces.php:714
+msgid "A valid PPTP remote IP address must be specified."
+msgstr "Geçerli bir PPTP uzak IP adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:718 usr/local/www/services_dhcp_edit.php:183
+#: usr/local/www/services_wol.php:87 usr/local/www/services_wol_edit.php:94
+msgid "A valid MAC address must be specified."
+msgstr "Geçerli bir MAC adresi belirtilmelidir."
+
+#: usr/local/www/interfaces.php:731
+#, php-format
+msgid "The MTU must be between %d and %d bytes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:742
+msgid "The MTU of a VLAN cannot be greater than that of its parent interface."
+msgstr ""
+
+#: usr/local/www/interfaces.php:757
+#, php-format
+msgid "Interface %s (VLAN) has MTU set to a larger value"
+msgstr ""
+
+#: usr/local/www/interfaces.php:763
+msgid "The MSS must be an integer between 576 and 65535 bytes."
+msgstr ""
+
+#: usr/local/www/interfaces.php:767 usr/local/www/interfaces.php:3075
+#: usr/local/www/interfaces_wireless.php:111
+#: usr/local/www/interfaces_wireless_edit.php:90
+#: usr/local/www/interfaces_wireless_edit.php:182
+#: usr/local/www/load_balancer_pool.php:132
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:207
+#: usr/local/www/load_balancer_virtual_server_edit.php:76
+#: usr/local/www/status_lb_pool.php:132 usr/local/www/vpn_ipsec.php:276
+#: usr/local/www/vpn_ipsec.php:444 usr/local/www/vpn_ipsec_phase2.php:563
+msgid "Mode"
+msgstr "Kip"
+
+#: usr/local/www/interfaces.php:770 usr/local/www/interfaces.php:3085
+#: usr/local/www/status_interfaces.php:363
+msgid "SSID"
+msgstr "SSID"
+
+#: usr/local/www/interfaces.php:805
+msgid ""
+"Invalid WEP key. Enter a valid 40, 64, 104 or 128 bit WEP key."
+msgstr ""
+"WEP anahtar boyutu geçersiz. Anahtar boyutu 40 (64) bit ya da 104 (128) bit "
+"olmalıdır."
+
+#: usr/local/www/interfaces.php:813
+msgid "The WPA passphrase must be between 8 and 63 characters long."
+msgstr "Şifre uzunluğu 8 ila 63 karakter arası olmalıdır."
+
+#: usr/local/www/interfaces.php:1383
+#, php-format
+msgid ""
+"Unable to change mode to %s. You may already have the maximum number of "
+"wireless clones supported in this mode."
+msgstr ""
+"Kip %s olarak deÄŸiÅŸtirilemedi. Bu kipte desteklenen maksimum kablosuz "
+"kopyasını kullanıyor olabilirsiniz."
+
+#: usr/local/www/interfaces.php:1411
+msgid "Static IPv4"
+msgstr "Sabit IPv4"
+
+#: usr/local/www/interfaces.php:1411 usr/local/www/status_interfaces.php:126
+#: usr/local/www/vpn_pppoe.php:88
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: usr/local/www/interfaces.php:1412
+msgid "Static IPv6"
+msgstr "Sabit IPv6"
+
+#: usr/local/www/interfaces.php:1412
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: usr/local/www/interfaces.php:1412
+msgid "SLAAC"
+msgstr "SLAAC"
+
+#: usr/local/www/interfaces.php:1412
+msgid "6rd Tunnel"
+msgstr "6'ıncı Tünel"
+
+#: usr/local/www/interfaces.php:1412
+msgid "6to4 Tunnel"
+msgstr "6 dan 4'e Tünel"
+
+#: usr/local/www/interfaces.php:1412
+msgid "Track Interface"
+msgstr "Arabirim Ä°zi"
+
+#: usr/local/www/interfaces.php:1633
+#, php-format
+msgid "The %s configuration has been changed."
+msgstr "%s yapılandırması değiştirildi."
+
+#: usr/local/www/interfaces.php:1633
+msgid "Don't forget to adjust the DHCP Server range if needed after applying."
+msgstr "Gerekiyorsa DHCP sunucu aralığını yapılandırmayı unutmayınız."
+
+#: usr/local/www/interfaces.php:1642
+msgid "General configuration"
+msgstr "Genel yapılandırma"
+
+#: usr/local/www/interfaces.php:1648
+msgid "Enable Interface"
+msgstr "Arabirimi EtkinleÅŸtir"
+
+#: usr/local/www/interfaces.php:1658
+msgid "Enter a description (name) for the interface here."
+msgstr "Bu alana arabirim için bir açıklama (isim) girebilirsiniz."
+
+#: usr/local/www/interfaces.php:1662
+msgid "IPv4 Configuration Type"
+msgstr "IPv4 Yapılandırma Türü"
+
+#: usr/local/www/interfaces.php:1678
+msgid "IPv6 Configuration Type"
+msgstr "IPv6 Yapılandırma Türü"
+
+#: usr/local/www/interfaces.php:1703
+msgid "Insert my local MAC address"
+msgstr "Yerel MAC adresimi al"
+
+#: usr/local/www/interfaces.php:1706
+msgid ""
+"This field can be used to modify (\"spoof\") the MAC address of this "
+"interface"
+msgstr ""
+"Bu alan arabiriminin MAC adresini olduğundan farklı (\"aldatmak\") göstermek "
+"için yapılandırılabilir"
+
+#: usr/local/www/interfaces.php:1708
+msgid "(may be required with some cable connections)"
+msgstr "(bazı kablo bağlantılarda gerekebilir)"
+
+#: usr/local/www/interfaces.php:1709
+msgid ""
+"Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank"
+msgstr "xx:xx:xx:xx:xx:xx biçiminde bir MAC adresi giriniz yada boş bırakınız"
+
+#: usr/local/www/interfaces.php:1714
+#: usr/local/www/interfaces_ppps_edit.php:769
+#: usr/local/www/status_interfaces.php:326
+msgid "MTU"
+msgstr "MTU"
+
+#: usr/local/www/interfaces.php:1719
+msgid ""
+"If you leave this field blank, the adapter's default MTU will be used. This "
+"is typically 1500 bytes but can vary in some circumstances."
+msgstr ""
+"Bu alanı boş bırakırsanız, ağ kartının varsayılan MTU değeri kullanılır. "
+"Varsayılan değer bir çok durumda bu 1500 bayttır."
+
+#: usr/local/www/interfaces.php:1725
+msgid "MSS"
+msgstr "MSS"
+
+#: usr/local/www/interfaces.php:1729
+msgid ""
+"If you enter a value in this field, then MSS clamping for TCP connections to "
+"the value entered above minus 40 (TCP/IP header size) will be in effect."
+msgstr ""
+"Bu alana bir değer girerseniz, TCP bağlantılarının MSS sıkma değeri "
+"girdiğiniz değerin 40 eksiği (TCP/IP başlık boyutu) olarak ayarlanır."
+
+#: usr/local/www/interfaces.php:1738
+msgid "Speed and duplex"
+msgstr "Hız ve çift yönlü"
+
+#: usr/local/www/interfaces.php:1759
+msgid ""
+"Here you can explicitly set speed and duplex mode for this interface. "
+"WARNING: You MUST leave this set to autoselect (automatically negotiate "
+"speed) unless the port this interface connects to has its speed and duplex "
+"forced."
+msgstr ""
+"Burada bu arabirimin hızını ve çift yön biçimini belirleyebilirsiniz. UYARI: "
+"Eğer bu arabirimin bağlandığı portun hızı ve çift yön kipi özel olarak "
+"ayarlanmadıysa otomatik (otomatik hız anlaşması) olarak bırakın."
+
+#: usr/local/www/interfaces.php:1774
+msgid "Static IPv4 configuration"
+msgstr "Sabit IPv4 yapılandırması"
+
+#: usr/local/www/interfaces.php:1795
+msgid "IPv4 Upstream Gateway"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1813 usr/local/www/interfaces.php:1919
+#: usr/local/www/system_routes_edit.php:257
+msgid "add a new one."
+msgstr "yeni bir tane ekleyin."
+
+#: usr/local/www/interfaces.php:1816 usr/local/www/interfaces.php:1922
+msgid ""
+"If this interface is an Internet connection, select an existing Gateway from "
+"the list or add a new one using the link above."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1817 usr/local/www/interfaces.php:1923
+msgid "On local LANs the upstream gateway should be \"none\"."
+msgstr ""
+
+#: usr/local/www/interfaces.php:1831 usr/local/www/system_routes_edit.php:270
+msgid "Add new gateway:"
+msgstr "Yeni ağ geçidi ekle:"
+
+#: usr/local/www/interfaces.php:1839
+msgid "Default gateway:"
+msgstr "Varsayılan ağ geçidi:"
+
+#: usr/local/www/interfaces.php:1842 usr/local/www/system_routes_edit.php:288
+msgid "Gateway Name:"
+msgstr "Ağ Geçidi Adı:"
+
+#: usr/local/www/interfaces.php:1845
+msgid "Gateway IPv4:"
+msgstr "Ağ Geçidi IPv4:"
+
+#: usr/local/www/interfaces.php:1848 usr/local/www/interfaces.php:1954
+#: usr/local/www/system_routes_edit.php:294
+msgid "Description:"
+msgstr "Açıklama:"
+
+#: usr/local/www/interfaces.php:1855 usr/local/www/interfaces.php:1961
+#: usr/local/www/system_routes_edit.php:301
+msgid "Save Gateway"
+msgstr "Ağ Geçidini Kaydet"
+
+#: usr/local/www/interfaces.php:1880
+msgid "Static IPv6 configuration"
+msgstr "Sabit IPv6 yapılandırması"
+
+#: usr/local/www/interfaces.php:1901
+msgid "IPv6 Upstream Gateway"
+msgstr ""
+
+#: usr/local/www/interfaces.php:1937
+msgid "Add new v6 gateway:"
+msgstr "Yeni v6 ağ geçidi ekle:"
+
+#: usr/local/www/interfaces.php:1945
+msgid "Default v6 gateway:"
+msgstr "Varsayılan v6 ağ geçidi:"
+
+#: usr/local/www/interfaces.php:1948
+msgid "Gateway Name IPv6:"
+msgstr "Ağ geçidi ismi IPv6:"
+
+#: usr/local/www/interfaces.php:1951
+msgid "Gateway IPv6:"
+msgstr "Ağ geçidi IPv6:"
+
+#: usr/local/www/interfaces.php:1985
+msgid ""
+"DHCP client configuration &nbsp; &nbsp; <input name="
+"\"adv_dhcp_config_advanced\" type=\"checkbox\" id=\"adv_dhcp_config_advanced"
+"\" value=\"\" onclick=\"show_adv_dhcp_config(this)\" /> Advanced &nbsp; "
+"&nbsp; <input name=\"adv_dhcp_config_file_override\" type=\"checkbox\" id="
+"\"adv_dhcp_config_file_override\" value=\"\" onclick="
+"\"show_adv_dhcp_config(this)\" /> Config File Override &nbsp; &nbsp; "
+msgstr ""
+
+#: usr/local/www/interfaces.php:1994
+msgid "Enable DHCP+"
+msgstr "EtkinleÅŸtir DHCP+"
+
+#: usr/local/www/interfaces.php:1997
+msgid "Enable DHCP+L2TP or DHCP+PPTP."
+msgstr "DHCP+L2TP veya DHCP+PPTP etkinleÅŸtir."
+
+#: usr/local/www/interfaces.php:1999
+msgid ""
+"Status changes on this interface will trigger reconfiguration (if necessary) "
+"of the associated PPTP/L2TP link."
+msgstr ""
+"Bu arabirimde durum değişiklikleri ilişkili PPTP/L2TP bağlantısının "
+"(gerekiyorsa) yeniden yapılandırılmasına neden olur."
+
+#: usr/local/www/interfaces.php:2008
+msgid ""
+"The value in this field is sent as the DHCP client identifier and hostname "
+"when requesting a DHCP lease. Some ISPs may require this (for client "
+"identification)."
+msgstr ""
+"Bu alandaki değer DHCP istemci tanımlayıcısı ve DHCP kirası istendiğinde "
+"makine adı olarak gönderilir. Bazı ISSler (Internet Servis Sağlayıcı) "
+"istemci tanıma amaçlı olarak bu alanın bir değer taşımasını gerektirebilir."
+
+#: usr/local/www/interfaces.php:2014
+msgid "Alias IPv4 address"
+msgstr "Grup IPv4 adresi"
+
+#: usr/local/www/interfaces.php:2028
+msgid ""
+"The value in this field is used as a fixed alias IPv4 address by the DHCP "
+"client."
+msgstr ""
+"Bu alandaki kısaltılmış Grup değeri, DHCP istemcinin IPv4 adresi olarak "
+"kullanılacak."
+
+#: usr/local/www/interfaces.php:2033
+msgid "Reject Leases From"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2037
+msgid ""
+"If there is a certain upstream DHCP server that should be ignored, place the "
+"IP address or subnet of the DHCP server to be ignored here."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2038
+msgid ""
+"This is useful for rejecting leases from cable modems that offer private IPs "
+"when they lose upstream sync."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2043
+msgid "Protocol Timing"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2064
+msgid ""
+"The values in these fields are DHCP protocol timings used when requesting a "
+"lease. <br /> "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2105
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Lease "
+"Requirements and Requests</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2107
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Send</a> "
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2110
+msgid ""
+"The values in this field are DHCP options to be sent when requesting a DHCP "
+"lease. [option declaration [, ...]] <br />Value Substitutions: {interface}, "
+"{hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />Where C is U(pper) or "
+"L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) "
+"(omitted for none). <br />Some ISPs may require certain options be or not be "
+"sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2115
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Request</"
+"a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2118
+msgid ""
+"The values in this field are DHCP option 55 to be sent when requesting a "
+"DHCP lease. [option [, ...]] <br />Some ISPs may require certain options be "
+"or not be requested. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2121
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Require</"
+"a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Options</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2124
+msgid ""
+"The values in this field are DHCP options required by the client when "
+"requesting a DHCP lease. [option [, ...]] "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2129
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp-options&amp;sektion=5\">Option</a> <a target=\"FreeBSD_DHCP\" "
+"href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;"
+"sektion=5#OPTION_MODIFIERS\">Modifiers</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2133
+msgid ""
+"The values in this field are DHCP option modifiers applied to obtained DHCP "
+"lease. [modifier option declaration [, ...]] <br /> modifiers: (default, "
+"supersede, prepend, append)"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2139
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhclient.conf&amp;sektion=5\">Configuration File</a> Override"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2143 usr/local/www/interfaces.php:2388
+msgid ""
+"The value in this field is the full absolute path to a DHCP client "
+"configuration file. [/[dirname/[.../]]filename[.ext]] <br /> Value "
+"Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, "
+"{mac_addr_hexCD} <br />Where C is U(pper) or L(ower) Case, and D is \" :-.\" "
+"Delimiter (space, colon, hyphen, or period) (omitted for none). <br />Some "
+"ISPs may require certain options be or not be sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2197
+msgid ""
+"DHCP6 client configuration &nbsp; &nbsp; <input name="
+"\"adv_dhcp6_config_advanced\" type=\"checkbox\" id="
+"\"adv_dhcp6_config_advanced\" value=\"\" onclick="
+"\"show_adv_dhcp6_config(this)\" /> Advanced &nbsp; &nbsp; <input name="
+"\"adv_dhcp6_config_file_override\" type=\"checkbox\" id="
+"\"adv_dhcp6_config_file_override\" value=\"\" onclick="
+"\"show_adv_dhcp6_config(this)\" /> Config File Override &nbsp; &nbsp; "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2206
+msgid "DHCPv6 Unique Identifier (DUID)"
+msgstr "DHCPv6 benzersiz tanımlayıcı (DUID)"
+
+#: usr/local/www/interfaces.php:2210
+msgid ""
+"The value in this field is sent as the DHCPv6 client identifier when "
+"requesting a DHCPv6 lease."
+msgstr ""
+"Bu alandaki değer DHCPv6 kira talebi olunca DHCPv6 istemcisi tarafından "
+"gönderilir."
+
+#: usr/local/www/interfaces.php:2215
+#, php-format
+msgid "The current DUID is: '%s'"
+msgstr "Åžimdiki DUID: '%s' "
+
+#: usr/local/www/interfaces.php:2222
+msgid "Use IPv4 connectivity as parent interface"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2225
+msgid "Request a IPv6 prefix/information through the IPv4 connectivity link"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2229
+msgid "Request only an IPv6 prefix"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2232
+msgid "Only request an IPv6 prefix, do not request an IPv6 address"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2236
+msgid "DHCPv6 Prefix Delegation size"
+msgstr "DHCP Önek Yetkilendirme boyutu"
+
+#: usr/local/www/interfaces.php:2249
+msgid ""
+"The value in this field is the delegated prefix length provided by the "
+"DHCPv6 server. Normally specified by the ISP."
+msgstr ""
+"Bu alandaki önek uzunluğu yetkilendirmesi değerini DHCPv6 sunucusu sağlar. "
+"Normalde ISP tarafından belirtilir."
+
+#: usr/local/www/interfaces.php:2253
+msgid "Send IPv6 prefix hint"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2256
+msgid ""
+"Send an IPv6 prefix hint to indicate the desired prefix size for delegation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2262
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Interface_statement\">Interface Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2265
+msgid "Information Only"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2268
+msgid "Send Options"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2271
+msgid ""
+"The values in this field are DHCP send options to be sent when requesting a "
+"DHCP lease. [option declaration [, ...]] <br />Value Substitutions: "
+"{interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />Where C "
+"is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, "
+"hyphen, or period) (omitted for none). <br />Some DHCP services may require "
+"certain options be or not be sent. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2277
+msgid "Request Options"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2280
+msgid ""
+"The values in this field are DHCP request options to be sent when requesting "
+"a DHCP lease. [option [, ...]] <br />Some DHCP services may require certain "
+"options be or not be requested. "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2284
+msgid "Script"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2287
+msgid ""
+"The value in this field is the absolute path to a script invoked on certain "
+"conditions including when a reply message is received. <br />[/[dirname/"
+"[.../]]filename[.ext]] "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2294
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Identity_association_statement\">Identity Association Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2299
+msgid "Non-Temporary Address Allocation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2301
+msgid "id-assoc na"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2302 usr/local/www/interfaces.php:2319
+msgid "<i>ID</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2305 usr/local/www/status_lb_vs.php:79
+#: usr/local/www/vpn_ipsec_phase2.php:586
+#: usr/local/www/vpn_ipsec_phase2.php:621
+#: usr/local/www/vpn_ipsec_phase2.php:663
+#: usr/local/www/vpn_ipsec_phase2.php:669
+msgid "Address"
+msgstr "Adres"
+
+#: usr/local/www/interfaces.php:2306
+msgid "<i>ipv6-address</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2308 usr/local/www/interfaces.php:2325
+msgid "<i>pltime</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2310 usr/local/www/interfaces.php:2327
+msgid "<i>vltime</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2316
+msgid "Prefix Delegation"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2318
+msgid "id-assoc pd"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2322
+msgid "Prefix"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2323
+msgid "<i>ipv6-prefix</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2335
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Prefix_interface_statement\">Prefix Interface Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2338
+msgid "Prefix Interface "
+msgstr ""
+
+#: usr/local/www/interfaces.php:2339
+msgid "<i>sla-id</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2341
+msgid "<i>sla-len</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2348
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Authentication_statement\">Authentication Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2351
+msgid "<i>authname</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2353
+msgid "<i>protocol</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2355
+msgid "<i>algorithm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2357
+msgid "<i>rdm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2364
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD"
+"+10.1-RELEASE+and+Ports#Keyinfo_statement\">Keyinfo Statement</a>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2367
+msgid "<i>keyname</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2369
+msgid "<i>realm</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2372
+msgid "<i>keyid</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2374
+msgid "<i>secret</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2376
+msgid "<i>expire</i>"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2383
+msgid ""
+"<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?"
+"query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=+10.1-RELEASE+and+Ports"
+"\">Configuration File</a> Override"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2469
+msgid "6RD Configuration"
+msgstr ""
+
+#: usr/local/www/interfaces.php:2472
+msgid "6RD prefix"
+msgstr "6'ıncı ön-ek"
+
+#: usr/local/www/interfaces.php:2476
+msgid ""
+"The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. "
+"'2001:db8::/32'"
+msgstr ""
+"Bu alandaki değer 6'ıncı IPv6 ön-eki sizin ISP'niz tarafından sağlanır. örn. "
+"'2001:db8::/32'"
+
+#: usr/local/www/interfaces.php:2480
+msgid "6RD Border Relay"
+msgstr "6'ıncı Sınır Aktarma"
+
+#: usr/local/www/interfaces.php:2484
+msgid ""
+"The value in this field is 6RD IPv4 gateway address assigned by your ISP"
+msgstr ""
+"Bu alandaki değer 6'ıncı IPv4 ağ geçidi sizin ISP'niz tarafından sağlanır"
+
+#: usr/local/www/interfaces.php:2488
+msgid "6RD IPv4 Prefix length"
+msgstr "6'ıncı Ipv4 ön-ek uzunluğu"
+
+#: usr/local/www/interfaces.php:2500
+msgid ""
+"The value in this field is the 6RD IPv4 prefix length. Normally specified by "
+"the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD "
+"prefix."
+msgstr ""
+"Bu alandaki değer 6'ıncı IPv4 ön-ek uzunluğudur. Normalde ISP tarafından "
+"belirlenir. Değer 0 ise tüm IPv4 adresini 6'ıncı ön-ek'e gömmüşüz anlamına "
+"gelir."
+
+#: usr/local/www/interfaces.php:2513
+msgid "Track IPv6 Interface"
+msgstr "IPv6 Arabirim Ä°zi"
+
+#: usr/local/www/interfaces.php:2516
+msgid "IPv6 Interface"
+msgstr "IPv6 Arabirimi"
+
+#: usr/local/www/interfaces.php:2554
+msgid "This selects the dynamic IPv6 WAN interface to track for configuration"
+msgstr "Bu dinamik IPv6 WAN arabirimini yapılandırma izi için seçer"
+
+#: usr/local/www/interfaces.php:2558
+msgid "IPv6 Prefix ID"
+msgstr "IPv6 Ön-ek kimliği"
+
+#: usr/local/www/interfaces.php:2569
+msgid ""
+"The value in this field is the (Delegated) IPv6 prefix ID. This determines "
+"the configurable network ID based on the dynamic IPv6 connection"
+msgstr ""
+"Bu alandaki değer (yetkilendirimiş) IPv6 ön-ek kimliğidir. Bu dinamik IPv6 "
+"bağlantısına dayalı yapılandırılabilir bir ağ kimliği belirler"
+
+#: usr/local/www/interfaces.php:2571
+msgid "default value is 0."
+msgstr ""
+
+#: usr/local/www/interfaces.php:2584
+msgid "PPP configuration"
+msgstr "PPP yapılandırması"
+
+#: usr/local/www/interfaces.php:2587
+#: usr/local/www/interfaces_ppps_edit.php:491
+msgid "Service Provider"
+msgstr "Servis Sağlayıcı"
+
+#: usr/local/www/interfaces.php:2591
+#: usr/local/www/interfaces_ppps_edit.php:495
+msgid "Country:"
+msgstr "Ãœlke:"
+
+#: usr/local/www/interfaces.php:2599
+#: usr/local/www/interfaces_ppps_edit.php:503
+msgid "Provider:"
+msgstr "Sağlayıcı:"
+
+#: usr/local/www/interfaces.php:2607
+#: usr/local/www/interfaces_ppps_edit.php:511
+msgid "Plan:"
+msgstr "Plan:"
+
+#: usr/local/www/interfaces.php:2615
+#: usr/local/www/interfaces_ppps_edit.php:519
+msgid "Select to fill in data for your service provider."
+msgstr "Servis sağlayıcı bilgilerinizi girmek için seçiniz."
+
+#: usr/local/www/interfaces.php:2637
+#: usr/local/www/interfaces_ppps_edit.php:543
+msgid "Access Point Name (APN)"
+msgstr "Erişim Noktası Adı (APN)"
+
+#: usr/local/www/interfaces.php:2667
+msgid "Advanced PPP"
+msgstr "GeliÅŸmiÅŸ PPP"
+
+#: usr/local/www/interfaces.php:2670 usr/local/www/interfaces.php:2675
+#: usr/local/www/interfaces.php:2779 usr/local/www/interfaces.php:2784
+#: usr/local/www/interfaces.php:2850 usr/local/www/interfaces.php:2855
+msgid "Click here"
+msgstr "Buraya "
+
+#: usr/local/www/interfaces.php:2671
+msgid "to edit PPP configuration."
+msgstr "tıklayarak PPP yapılandırmanızı değiştirebilirsiniz."
+
+#: usr/local/www/interfaces.php:2676
+msgid "to create a PPP configuration."
+msgstr "PPP yapılandırması oluşturabilirsiniz."
+
+#: usr/local/www/interfaces.php:2690
+msgid "PPPoE configuration"
+msgstr "PPPoE yapılandırması"
+
+#: usr/local/www/interfaces.php:2705
+#: usr/local/www/interfaces_ppps_edit.php:602
+msgid "Service name"
+msgstr "Servis adı"
+
+#: usr/local/www/interfaces.php:2707
+msgid "Hint: this field can usually be left empty"
+msgstr "İpucu: Bu alan çoğunlukla boş bırakılabilir"
+
+#: usr/local/www/interfaces.php:2714 usr/local/www/interfaces.php:2836
+msgid "Enable Dial-On-Demand mode"
+msgstr "GerektiÄŸinde arama kipini etkinleÅŸtir"
+
+#: usr/local/www/interfaces.php:2715
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a "
+msgstr ""
+"Bu seçenek arabirimin 'gerektiğinde ara' kipinde çalışmasını sağlar, böylece "
+
+#: usr/local/www/interfaces.php:2715 usr/local/www/interfaces.php:2837
+msgid "virtual full time"
+msgstr "görünüşte tam zamanlı"
+
+#: usr/local/www/interfaces.php:2715 usr/local/www/interfaces.php:2837
+msgid ""
+"connection. The interface is configured, but the actual connection of the "
+"link is delayed until qualifying outgoing traffic is detected."
+msgstr ""
+"bir bağlantı elde edilir. Arabirim yapılandırılır ama bağlantının gerçekten "
+"sağlanması için dışarıya doğru trafik oluşması beklenir."
+
+#: usr/local/www/interfaces.php:2719 usr/local/www/interfaces.php:2841
+#: usr/local/www/services_captiveportal.php:550
+msgid "Idle timeout"
+msgstr "Boşta bekleme zamanı"
+
+#: usr/local/www/interfaces.php:2721 usr/local/www/interfaces.php:2843
+msgid ""
+"If no qualifying outgoing packets are transmitted for the specified number "
+"of seconds, the connection is brought down. An idle timeout of zero disables "
+"this feature."
+msgstr ""
+"Belirtilen saniye sayısı boyunca dışarıya paket gönderilmezse bağlantı "
+"durdurulur. Bu değeri 0 girerseniz bu özellik kapatılır."
+
+#: usr/local/www/interfaces.php:2725
+#: usr/local/www/interfaces_ppps_edit.php:609
+msgid "Periodic reset"
+msgstr "Belirli aralıklarla sıfırlama"
+
+#: usr/local/www/interfaces.php:2733
+#: usr/local/www/interfaces_ppps_edit.php:617
+#: usr/local/www/status_rrd_graph.php:450
+#: usr/local/www/status_rrd_graph_settings.php:169
+msgid "Custom"
+msgstr "Özel"
+
+#: usr/local/www/interfaces.php:2734
+#: usr/local/www/interfaces_ppps_edit.php:618
+msgid "Pre-Set"
+msgstr "Önceden ayarlı"
+
+#: usr/local/www/interfaces.php:2735
+#: usr/local/www/interfaces_ppps_edit.php:619
+msgid "Select a reset timing type"
+msgstr "Sıfırlama zamanlama türü seçin"
+
+#: usr/local/www/interfaces.php:2743
+#: usr/local/www/interfaces_ppps_edit.php:627
+msgid "hour (0-23)"
+msgstr "saat (0-23)"
+
+#: usr/local/www/interfaces.php:2745
+#: usr/local/www/interfaces_ppps_edit.php:629
+msgid "minute (0-59)"
+msgstr "dakika (0-59)"
+
+#: usr/local/www/interfaces.php:2747
+#: usr/local/www/interfaces_ppps_edit.php:631
+msgid "reset at a specific date (mm/dd/yyyy)"
+msgstr "belirli tarihte sıfırla (aa/gg/yyyy)"
+
+#: usr/local/www/interfaces.php:2750
+#: usr/local/www/interfaces_ppps_edit.php:634
+msgid ""
+"If you leave the date field empty, the reset will be executed each day at "
+"the time you did specify using the minutes and hour field."
+msgstr ""
+"Tarih alanı boş bırakılır ise sıfırlama işlemi dakika ve saat alanında "
+"belirtilen değerlere göre her gün gerçekleştirilecektir."
+
+#: usr/local/www/interfaces.php:2758
+#: usr/local/www/interfaces_ppps_edit.php:642
+msgid "reset at each month ('0 0 1 * *')"
+msgstr "her ay sıfırla ('0 0 1 * *')"
+
+#: usr/local/www/interfaces.php:2761
+#: usr/local/www/interfaces_ppps_edit.php:645
+msgid "reset at each week ('0 0 * * 0')"
+msgstr "her hafta sıfırla ('0 0 * * 0')"
+
+#: usr/local/www/interfaces.php:2764
+#: usr/local/www/interfaces_ppps_edit.php:648
+msgid "reset at each day ('0 0 * * *')"
+msgstr "her gün sıfırla ('0 0 * * *')"
+
+#: usr/local/www/interfaces.php:2767
+#: usr/local/www/interfaces_ppps_edit.php:651
+msgid "reset at each hour ('0 * * * *')"
+msgstr "her saat sıfırla ('0 * * * *')"
+
+#: usr/local/www/interfaces.php:2776
+msgid "Advanced and MLPPP"
+msgstr "GeliÅŸmiÅŸ ve MLPPP"
+
+#: usr/local/www/interfaces.php:2780
+msgid ""
+"for additional PPPoE configuration options. Save first if you made changes."
+msgstr "ek PPPoE yapılandırma seçenekleri için önce değişiklikleri kaydediniz."
+
+#: usr/local/www/interfaces.php:2785
+msgid "for advanced PPPoE configuration options and MLPPP configuration."
+msgstr "gelişmiş PPPoE yapılandırma seçenekleri ve MLPPP yapılandırması için."
+
+#: usr/local/www/interfaces.php:2799
+msgid "PPTP/L2TP configuration"
+msgstr "PPTP/L2TP yapılandırması"
+
+#: usr/local/www/interfaces.php:2814
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Local IP address"
+msgstr "Yerel IP adresi"
+
+#: usr/local/www/interfaces.php:2827
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Remote IP address"
+msgstr "Uzak IP adresi"
+
+#: usr/local/www/interfaces.php:2837
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode, allowing "
+"you to have a"
+msgstr "Bu seçenek arabirimin gerektiğinde bağlanarak çalışmasını sağlar"
+
+#: usr/local/www/interfaces.php:2851
+msgid ""
+"for additional PPTP and L2TP configuration options. Save first if you made "
+"changes."
+msgstr ""
+"Ek PPTP ve L2TP yapılandırma seçenekleri için değişiklikleri kaydediniz."
+
+#: usr/local/www/interfaces.php:2856
+msgid "for advanced PPTP and L2TP configuration options"
+msgstr "gelişmiş PPTP ve L2TP yapılandırma seçeneklerini değiştirebilirsiniz"
+
+#: usr/local/www/interfaces.php:2871
+msgid ""
+"Common wireless configuration - Settings apply to all wireless networks on"
+msgstr ""
+"Genel kablosuz yapılandırması - Ayarlar şu arabirim üzerindeki kablosuz "
+"ağlara uygulanacaktır"
+
+#: usr/local/www/interfaces.php:2874
+msgid "Persist common settings"
+msgstr "Ortak ayarları sabitle"
+
+#: usr/local/www/interfaces.php:2877
+msgid ""
+"Enabling this preserves the common wireless configuration through interface "
+"deletions and reassignments."
+msgstr ""
+"Bu seçeneği açmak arabirim silinme ve yeniden atanma gibi durumlarda ortak "
+"ayarları korur."
+
+#: usr/local/www/interfaces.php:2881
+msgid "Standard"
+msgstr "Standart"
+
+#: usr/local/www/interfaces.php:2901
+msgid "Protection Mode"
+msgstr "Koruma Kipi"
+
+#: usr/local/www/interfaces.php:2904
+msgid "Protection mode off"
+msgstr "Koruma kipi kapalı"
+
+#: usr/local/www/interfaces.php:2905
+msgid "Protection mode CTS to self"
+msgstr "Koruma kipi CTS kendine"
+
+#: usr/local/www/interfaces.php:2906
+msgid "Protection mode RTS and CTS"
+msgstr "Koruma kipi RTS ve CTS"
+
+#: usr/local/www/interfaces.php:2909
+msgid ""
+"For IEEE 802.11g, use the specified technique for protecting OFDM frames in "
+"a mixed 11b/11g network."
+msgstr ""
+"IEEE 802.11g için OFDM çerçevelerini 11b/11g karışık ağlarda korumak için "
+"belirtilen tekniÄŸi kullan."
+
+#: usr/local/www/interfaces.php:2917
+msgid "Transmit power"
+msgstr "Yayın gücü"
+
+#: usr/local/www/interfaces.php:2930
+msgid ""
+"Note: Typically only a few discreet power settings are available and the "
+"driver will use the setting closest to the specified value. Not all "
+"adapters support changing the transmit power setting."
+msgstr ""
+"Not: Genellikle sadece birkaç güç ayarı kullanılabilir durumdadır ve sürücü "
+"belirtilen değere en yakın ayarı kullanır. Tüm ağ kartları yayın gücü "
+"ayarını desteklemez."
+
+#: usr/local/www/interfaces.php:2934 usr/local/www/status_interfaces.php:356
+msgid "Channel"
+msgstr "Kanal"
+
+#: usr/local/www/interfaces.php:2937 usr/local/www/interfaces.php:2984
+#: usr/local/www/interfaces.php:2996 usr/local/www/vpn_ipsec_phase1.php:882
+msgid "Auto"
+msgstr "Otomatik"
+
+#: usr/local/www/interfaces.php:2957
+msgid ""
+"Legend: wireless standards - channel # (frequency @ max TX power / TX power "
+"allowed in reg. domain)"
+msgstr ""
+"Efsane: kablosuz standartları - kanal # (frekans @ en yüksek TX gücü / "
+"normal alanda izin verilen TX gücü)"
+
+#: usr/local/www/interfaces.php:2959
+msgid ""
+"Note: Not all channels may be supported by your card. Auto may override the "
+"wireless standard selected above."
+msgstr ""
+"Not: Kartınız tüm kanalları desteklemiyor olabilir. Otomatik seçeneği "
+"yukarıda seçili olan kablosuz standardının üzerine yazabilir."
+
+#: usr/local/www/interfaces.php:2964
+msgid "Antenna settings"
+msgstr "Anten ayarları"
+
+#: usr/local/www/interfaces.php:2970
+msgid "Diversity"
+msgstr "Farklılık"
+
+#: usr/local/www/interfaces.php:2973 usr/local/www/vpn_l2tp.php:299
+#: usr/local/www/vpn_pppoe_edit.php:372 usr/local/www/vpn_pptp.php:320
+msgid "Off"
+msgstr "Kapalı"
+
+#: usr/local/www/interfaces.php:2974
+msgid "On"
+msgstr "Açık"
+
+#: usr/local/www/interfaces.php:2981
+msgid "Transmit antenna"
+msgstr "Yayın anteni"
+
+#: usr/local/www/interfaces.php:2985 usr/local/www/interfaces.php:2997
+msgid "#1"
+msgstr "#1"
+
+#: usr/local/www/interfaces.php:2986 usr/local/www/interfaces.php:2998
+msgid "#2"
+msgstr "#2"
+
+#: usr/local/www/interfaces.php:2993
+msgid "Receive antenna"
+msgstr "Alıcı anten"
+
+#: usr/local/www/interfaces.php:3005
+msgid ""
+"Note: The antenna numbers do not always match up with the labels on the card."
+msgstr "Not: Anten numaraları kart üzerindeki etiketlerle eşleşmeyebilir."
+
+#: usr/local/www/interfaces.php:3011
+msgid "Distance setting"
+msgstr "Mesafe ayarı"
+
+#: usr/local/www/interfaces.php:3015
+msgid ""
+"Note: This field can be used to tune ACK/CTS timers to fit the distance "
+"between AP and Client"
+msgstr ""
+"Not: Bu alan erişim noktası (AP - Access Point) ile istemci arasındaki "
+"mesafeyi belielemek için ACK/CTS zamanlayıcılarını ayarlamada kullanılabilir"
+
+#: usr/local/www/interfaces.php:3016
+msgid "(measured in meters)"
+msgstr ""
+"(metre cinsinden ölçülür ve sadece Atheros tabanlı kartlarda çalışır !)"
+
+#: usr/local/www/interfaces.php:3021
+msgid "Regulatory settings"
+msgstr "Düzenleyici ayarları"
+
+#: usr/local/www/interfaces.php:3023
+msgid "Regulatory domain"
+msgstr "Düzenleyici bölgesi"
+
+#: usr/local/www/interfaces.php:3037
+msgid ""
+"Note: Some cards have a default that is not recognized and require changing "
+"the regulatory domain to one in this list for the changes to other "
+"regulatory settings to work."
+msgstr ""
+"Not: Bazı kartların öntanımlı değeri tanınmaz ve diğer düzenleyici "
+"ayarlarının çalışabilmesi için bu düzenleyici bölgesinin bu değere "
+"deÄŸiÅŸtirilmesi gerekir."
+
+#: usr/local/www/interfaces.php:3039
+msgid "Country (listed with country code and regulatory domain)"
+msgstr "Ülke (ülke kodu ve düzenleyici bölgesi şeklinde listelenmiştir)"
+
+#: usr/local/www/interfaces.php:3053
+msgid ""
+"Note: Any country setting other than \"Default\" will override the "
+"regulatory domain setting"
+msgstr ""
+"Not: \"Öntanımlı\" dışındaki değerler düzenleyici bölgesi değerini değiştirir"
+
+#: usr/local/www/interfaces.php:3055
+msgid "Location"
+msgstr "Konum"
+
+#: usr/local/www/interfaces.php:3058
+msgid "Indoor"
+msgstr "Kapalı alan"
+
+#: usr/local/www/interfaces.php:3059
+msgid "Outdoor"
+msgstr "Açık alan"
+
+#: usr/local/www/interfaces.php:3060
+msgid "Anywhere"
+msgstr "Herhangi biryerde"
+
+#: usr/local/www/interfaces.php:3063
+msgid ""
+"These settings may affect which channels are available and the maximum "
+"transmit power allowed on those channels. Using the correct settings to "
+"comply with local regulatory requirements is recommended."
+msgstr ""
+"Bu ayarlar hangi kanalların kullanılabileceğini ve o kanallarda izin verilen "
+"en yüksek yayın gücünü etkileyebilir. Yerel düzenleyici gerekliliklerine "
+"uygun ve doğru ayarları kullanmak gerekir."
+
+#: usr/local/www/interfaces.php:3065
+msgid ""
+"Note: All wireless networks on this interface will be temporarily brought "
+"down when changing regulatory settings. Some of the regulatory domains or "
+"country codes may not be allowed by some cards. These settings may not be "
+"able to add additional channels that are not already supported."
+msgstr ""
+"Not: Düzenleyici ayarları değiştirilirken bu arabirim üzerindeki tüm "
+"kablosuz ağlar geçici olarak kapatılacaktır. Bazı kartlar bazı düzenleyici "
+"bölgelerini ve ülke kodlarını kabul etmeyebilir. Bu ayarlar halihazırda "
+"desteklenenlerin dışında ek kanallar ekleyemeyebilir."
+
+#: usr/local/www/interfaces.php:3072
+msgid "Network-specific wireless configuration"
+msgstr "Ağa-özel kablosuz yapılandırması"
+
+#: usr/local/www/interfaces.php:3078
+#: usr/local/www/interfaces_wireless_edit.php:185
+msgid "Infrastructure (BSS)"
+msgstr "Altyapı (BSS)"
+
+#: usr/local/www/interfaces.php:3079
+#: usr/local/www/interfaces_wireless_edit.php:186
+msgid "Ad-hoc (IBSS)"
+msgstr "Eşlerarası (Ad-hoc - IBSS)"
+
+#: usr/local/www/interfaces.php:3080
+#: usr/local/www/interfaces_wireless_edit.php:187
+msgid "Access Point"
+msgstr "Erişim Noktası (Access Point - AP)"
+
+#: usr/local/www/interfaces.php:3089
+msgid ""
+"Note: Only required in Access Point mode. If left blank in Ad-hoc or "
+"Infrastructure mode, this interface will connect to any available SSID"
+msgstr ""
+"Not: Sadece Access Point (Erişim Noktası) kipinde gerekir. Adhoc (eşler "
+"arası) yada Infrastructure (Altyapı BSS) kipinde boş bırakılırsa arabirim "
+"sadece mevcut olan SSID ye bağlanır"
+
+#: usr/local/www/interfaces.php:3094
+msgid "Minimum wireless standard"
+msgstr "Minimum kablosuz standardı"
+
+#: usr/local/www/interfaces.php:3097
+msgid "Any"
+msgstr "Herhangi biri"
+
+#: usr/local/www/interfaces.php:3099
+msgid "802.11g"
+msgstr "802.11g"
+
+#: usr/local/www/interfaces.php:3101
+msgid "802.11n"
+msgstr "802.11n"
+
+#: usr/local/www/interfaces.php:3104
+msgid ""
+"When operating as an access point, allow only stations capable of the "
+"selected wireless standard to associate (stations not capable are not "
+"permitted to associate)."
+msgstr ""
+"Erişim noktası olarak çalışırken sadece seçilen kablosuz standardında "
+"çalışabilen istemcilerin bağlanmasına izin ver, (diğerlerinin ilişkilendirme "
+"isteklerini reddet)."
+
+#: usr/local/www/interfaces.php:3109
+msgid "802.11g only"
+msgstr "Sadece 802.11g"
+
+#: usr/local/www/interfaces.php:3112
+msgid ""
+"When operating as an access point in 802.11g mode, allow only 11g-capable "
+"stations to associate (11b-only stations are not permitted to associate)."
+msgstr ""
+"802.11g kipinde erişim noktası olarak çalışırken sadece 11g çalışabilen "
+"istemcilerin eriÅŸimine izin ver (sadece 11b olan istemcileri reddet)."
+
+#: usr/local/www/interfaces.php:3117
+msgid "Allow intra-BSS communication"
+msgstr "BSS'ler arası iletişime izin ver"
+
+#: usr/local/www/interfaces.php:3121
+msgid ""
+"When operating as an access point, enable this if you want to pass packets "
+"between wireless clients directly."
+msgstr ""
+"Erişim noktası olarak çalışırken kablosuz istemciler arasında paketlerin "
+"doğrudan geçirilmesine izin vermek istiyorsanız etkinleştirin."
+
+#: usr/local/www/interfaces.php:3123
+msgid ""
+"Disabling the internal bridging is useful when traffic is to be processed "
+"with packet filtering."
+msgstr ""
+"Trafik paket filtreleme tarafından işlenecekse iç köprülemeyi kapatmak "
+"gerekir."
+
+#: usr/local/www/interfaces.php:3127
+msgid "Enable WME"
+msgstr "WMEyi etkinleÅŸtir"
+
+#: usr/local/www/interfaces.php:3130
+msgid "Setting this option will force the card to use WME (wireless QoS)."
+msgstr "Bu seçeneği açmak ağ kartını WME (kablosuz QoS) kullanmaya zorlar."
+
+#: usr/local/www/interfaces.php:3134
+msgid "Enable Hide SSID"
+msgstr "SSID Gizlemeyi EtkinleÅŸtir"
+
+#: usr/local/www/interfaces.php:3138
+msgid "Setting this option will force the card to NOT broadcast its SSID"
+msgstr ""
+"Bu seçeneğin etkinleştirilmesi ağ kartını ağ adını (SSID) yayınlanmamaya "
+"zorlar"
+
+#: usr/local/www/interfaces.php:3140
+msgid "(this might create problems for some clients)."
+msgstr "(bazı işlemcilerin zorun yaşamasına neden olabilir)."
+
+#: usr/local/www/interfaces.php:3144
+msgid "WEP"
+msgstr "WEP"
+
+#: usr/local/www/interfaces.php:3147
+msgid "Enable WEP"
+msgstr "WEP'i EtkinleÅŸtir"
+
+#: usr/local/www/interfaces.php:3152
+msgid "TX key"
+msgstr "TX anahtarı"
+
+#: usr/local/www/interfaces.php:3155
+msgid "Key 1:"
+msgstr "Anahtar 1:"
+
+#: usr/local/www/interfaces.php:3164
+msgid "Key 2:"
+msgstr "Anahtar 2:"
+
+#: usr/local/www/interfaces.php:3173
+msgid "Key 3:"
+msgstr "Anahtar 3:"
+
+#: usr/local/www/interfaces.php:3182
+msgid "Key 4:"
+msgstr "Anahtar 4:"
+
+#: usr/local/www/interfaces.php:3192
+msgid ""
+"40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits "
+"preceded by '0x'."
+msgstr ""
+"40 (64) bit anahtarlar 5 ASCII karakter veya önüne '0x' koymak şartıyla 10 "
+"adet onaltılı basamak olarak girilebilir."
+
+#: usr/local/www/interfaces.php:3193
+msgid ""
+"104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits "
+"preceded by '0x'."
+msgstr ""
+"40 (128) bit anahtarlar 13 ASCII karakter veya önüne '0x' koymak şartıyla 26 "
+"adet onaltılı basamak olarak girilebilir."
+
+#: usr/local/www/interfaces.php:3197 usr/local/www/interfaces.php:3221
+msgid "WPA"
+msgstr "WPA"
+
+#: usr/local/www/interfaces.php:3200
+msgid "Enable WPA"
+msgstr "WPA'yı Etkinleştir"
+
+#: usr/local/www/interfaces.php:3205
+msgid "WPA Pre-Shared Key"
+msgstr "WPA Ön Paylaşımlı Anahtar"
+
+#: usr/local/www/interfaces.php:3208
+msgid "PSK:"
+msgstr "PSK:"
+
+#: usr/local/www/interfaces.php:3214
+msgid "WPA Passphrase must be between 8 and 63 characters long."
+msgstr "Şifre 8 ila 63 karakter olmalıdır."
+
+#: usr/local/www/interfaces.php:3218
+msgid "WPA Mode"
+msgstr "WPA Kipi"
+
+#: usr/local/www/interfaces.php:3222
+msgid "WPA2"
+msgstr "WPA2"
+
+#: usr/local/www/interfaces.php:3223 usr/local/www/interfaces.php:3233
+#: usr/local/www/interfaces.php:3243 usr/local/www/interfaces.php:3252
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+msgid "Both"
+msgstr "Ä°kisi birden"
+
+#: usr/local/www/interfaces.php:3228
+msgid "WPA Key Management Mode"
+msgstr "WPA Anahtar Yönetim Kipi"
+
+#: usr/local/www/interfaces.php:3231 usr/local/www/vpn_ipsec_keys.php:113
+#: usr/local/www/vpn_ipsec_keys_edit.php:72
+#: usr/local/www/vpn_ipsec_keys_edit.php:142
+#: usr/local/www/vpn_ipsec_mobile.php:348
+#: usr/local/www/vpn_ipsec_phase1.php:174
+#: usr/local/www/vpn_ipsec_phase1.php:747
+#: usr/local/www/vpn_ipsec_settings.php:206
+msgid "Pre-Shared Key"
+msgstr "Ön Paylaşımlı Anahtar"
+
+#: usr/local/www/interfaces.php:3232
+msgid "Extensible Authentication Protocol"
+msgstr "Genişletilebilir Kimlik Doğrulama Protokolü (EAP)"
+
+#: usr/local/www/interfaces.php:3241
+msgid "Open System Authentication"
+msgstr "Açık Sistem Kimlik Doğrulama (OSA)"
+
+#: usr/local/www/interfaces.php:3242
+msgid "Shared Key Authentication"
+msgstr "Paylaşımlı Anahtar Kimlik Doğrulama (SKA)"
+
+#: usr/local/www/interfaces.php:3245
+msgid "Note: Shared Key Authentication requires WEP."
+msgstr "Not: Paylaşımlı Anahtar Kimlik Doğrulama WEP gerektirir."
+
+#: usr/local/www/interfaces.php:3249
+msgid "WPA Pairwise"
+msgstr "WPA Çiftleme"
+
+#: usr/local/www/interfaces.php:3253
+msgid "AES (recommended)"
+msgstr "AES (önerilen)"
+
+#: usr/local/www/interfaces.php:3254
+msgid "TKIP"
+msgstr "TKIP"
+
+#: usr/local/www/interfaces.php:3259
+msgid "Key Rotation"
+msgstr "Anahtar Rotasyonu"
+
+#: usr/local/www/interfaces.php:3262
+msgid ""
+"Allowed values are 1-9999. Must be longer than Master Key "
+"Regeneration time."
+msgstr ""
+"İzin verilen değerler 1 ile 9999 arasındadır ama Ana Anahtar Yenileme "
+"zamanından fazla olmamalıdır."
+
+#: usr/local/www/interfaces.php:3266
+msgid "Master Key Regeneration"
+msgstr "Ana Anahtar Yenileme"
+
+#: usr/local/www/interfaces.php:3269
+msgid ""
+"Allowed values are 1-9999. Must be shorter than Key Rotation time."
+msgstr ""
+"İzin verilen değerler 1 ile 9999 arasındadır ama Anahtar Rotasyon zamanından "
+"fazla olmamalıdır."
+
+#: usr/local/www/interfaces.php:3273
+msgid "Strict Key Regeneration"
+msgstr "Sıkı Anahtar Yenileme"
+
+#: usr/local/www/interfaces.php:3276
+msgid ""
+"Setting this option will force the AP to rekey whenever a client "
+"disassociates."
+msgstr ""
+"Bu seçeneği açmak erişim noktasını her istemci ayrılışında anahtar "
+"yenilemeye zorlar."
+
+#: usr/local/www/interfaces.php:3280
+msgid "Enable IEEE802.1X Authentication"
+msgstr "IEEE802.1x Kimlik Doğrulamayı Etkinleştir"
+
+#: usr/local/www/interfaces.php:3283
+msgid "Setting this option will enable 802.1X authentication."
+msgstr ""
+"Bu seçeneği etkinleştirmek 802.1x kimlik doğrulamanın devreye girmesini "
+"sağlayacaktır."
+
+#: usr/local/www/interfaces.php:3284
+#: usr/local/www/load_balancer_pool_edit.php:267
+#: usr/local/www/status_openvpn.php:392
+msgid "NOTE"
+msgstr "NOT"
+
+#: usr/local/www/interfaces.php:3284
+msgid "this option requires checking the \"Enable WPA box\"."
+msgstr "bu seçenek \"WPA kutusunu etkinleştir\"i işaretlemeyi gerektirir."
+
+#: usr/local/www/interfaces.php:3288
+msgid "802.1X Authentication Server IP Address"
+msgstr "802.1x Kimlik DoÄŸrulama Sunucu IP Adresi"
+
+#: usr/local/www/interfaces.php:3291 usr/local/www/interfaces.php:3312
+msgid ""
+"Enter the IP address of the 802.1X Authentication Server. This is commonly "
+"a Radius server (FreeRadius, Internet Authentication Services, etc.)"
+msgstr ""
+"802.1x kimlik doÄŸrulama sunucusunun IP adesini giriniz. Genellikle Radius "
+"sunucudur (FreeRadius, Internet Kimlik DoÄŸrulama Servisleri (IAS) vb.)"
+
+#: usr/local/www/interfaces.php:3295
+msgid "802.1X Authentication Server Port"
+msgstr "802.1x Kimlik doÄŸrulama Sunucu Portu"
+
+#: usr/local/www/interfaces.php:3298 usr/local/www/interfaces.php:3319
+msgid "Leave blank for the default port 1812."
+msgstr "Varsayılan port olan 1812'yi kullanmak için boş bırakın."
+
+#: usr/local/www/interfaces.php:3302
+msgid "802.1X Authentication Server Shared Secret"
+msgstr "802.1x Kimlik Doğrulama Sunucusu Paylaşımlı Anahtar"
+
+#: usr/local/www/interfaces.php:3309
+msgid "Secondary 802.1X Authentication Server IP Address"
+msgstr "Ä°kincil 802.1X Kimlik DoÄŸrulama Suncusu IP Adresi"
+
+#: usr/local/www/interfaces.php:3316
+msgid "Secondary 802.1X Authentication Server Port"
+msgstr "Ä°kincil 802.1X Kimlik DoÄŸrulama Sunucusu Portu"
+
+#: usr/local/www/interfaces.php:3323
+msgid "Secondary 802.1X Authentication Server Shared Secret"
+msgstr "İkincil 802.1X Kimlik Doğrulama Sunucusu Paylaşımlı Anahtarı"
+
+#: usr/local/www/interfaces.php:3330
+msgid "Authentication Roaming Preauth"
+msgstr "Kimlik Doğrulama Dolaşım Önyayını"
+
+#: usr/local/www/interfaces.php:3341
+msgid "Private networks"
+msgstr "Özel ağlar"
+
+#: usr/local/www/interfaces.php:3349
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved for "
+"private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"
+msgstr ""
+"Ayarlandığında, bu seçenek RFC 1918'e göre özel ağ olarak ayrılmış IP "
+"adreslerinden (10/8, 172.16/12, 192.168/16) ve "
+
+#: usr/local/www/interfaces.php:3351
+msgid "well as loopback addresses (127/8)."
+msgstr "loopback adresinden gelen trafiÄŸi (127/8) engeller."
+
+#: usr/local/www/interfaces.php:3351
+msgid ""
+"You should generally leave this option turned on, unless your WAN network "
+"lies in such a private address space, too."
+msgstr ""
+"Eğer WAN ağınız da bu tür bir özel ağın içinde değilse bu seçeneği açık "
+"bırakmalısınız."
+
+#: usr/local/www/interfaces.php:3361
+msgid ""
+"When set, this option blocks traffic from IP addresses that are reserved "
+"(but not RFC 1918) or not yet assigned by IANA."
+msgstr ""
+"Bu seçenek RFC 1918 dışında ayrılmış veya IANA tarafından atanmamış IP "
+"adreslerini engeller."
+
+#: usr/local/www/interfaces.php:3363
+msgid ""
+"Bogons are prefixes that should never appear in the Internet routing table, "
+"and obviously should not appear as the source address in any packets you "
+"receive."
+msgstr ""
+"Sahte IPler Internet yönlendirme tablosunda veya aldığınız paketlerin kaynak "
+"adres bölümünde hiç görünmemesi gereken IPlerdir."
+
+#: usr/local/www/interfaces.php:3366
+msgid ""
+"Note: The update frequency can be changed under System->Advanced Firewall/"
+"NAT settings."
+msgstr ""
+"Not: Güncelleme sıklığı Sistem -> Gelişmiş -> Firewall/NAT menüsünden "
+"yapılabilir."
+
+#: usr/local/www/interfaces.php:3490 usr/local/www/interfaces.php:3499
+msgid "You can manage Gateways"
+msgstr "Ağ geçitlerini yönetebilirsiniz"
+
+#: usr/local/www/interfaces_assign.php:44
+msgid "Assign network ports"
+msgstr "Ağ portlarını ata"
+
+#: usr/local/www/interfaces_assign.php:59
+#, php-format
+msgid "VLAN %1$s on %2$s"
+msgstr "VLAN %2$s üzerinde %1$s"
+
+#: usr/local/www/interfaces_assign.php:208
+msgid "lan"
+msgstr "lan"
+
+#: usr/local/www/interfaces_assign.php:209
+msgid "LAN"
+msgstr "LAN"
+
+#: usr/local/www/interfaces_assign.php:234
+msgid "Interface has been added."
+msgstr "Arabirim eklendi."
+
+#: usr/local/www/interfaces_assign.php:274
+#, php-format
+msgid "Port %1$s was assigned to %2$s interfaces:"
+msgstr "Port %1$s %2$s arabirimlerine atanmıştı:"
+
+#: usr/local/www/interfaces_assign.php:290
+#, php-format
+msgid ""
+"You cannot set port %s to interface %s because this interface is a member of "
+"%s."
+msgstr "%s port %s arabirimi üyesi olduğundan %s arabirimi için kullanılamaz."
+
+#: usr/local/www/interfaces_assign.php:367
+msgid ""
+"The interface is part of a group. Please remove it from the group to continue"
+msgstr ""
+"Arabirim bir grubun üyesi. Devam etmek için önce grup üyeliğinden çıkarınız"
+
+#: usr/local/www/interfaces_assign.php:369
+msgid ""
+"The interface is part of a bridge. Please remove it from the bridge to "
+"continue"
+msgstr "Arabirim bir köprünün üyesi. Devam etmek için önce köprüden çıkarınız"
+
+#: usr/local/www/interfaces_assign.php:371
+msgid ""
+"The interface is part of a gre tunnel. Please delete the tunnel to continue"
+msgstr "Arabirim bir GRE tünelinin üyesi. Devam etmek için önce tüneli siliniz"
+
+#: usr/local/www/interfaces_assign.php:373
+msgid ""
+"The interface is part of a gif tunnel. Please delete the tunnel to continue"
+msgstr "Arabirim bir GIF tünelinin üyesi. Devam etmek için önce tüneli siliniz"
+
+#: usr/local/www/interfaces_assign.php:411
+msgid "Interface has been deleted."
+msgstr "Arabirim silindi."
+
+#: usr/local/www/interfaces_assign.php:435
+msgid "The system is now rebooting. Please wait."
+msgstr "Sistem yeniden başlatılıyor. Lütfen bekleyiniz."
+
+#: usr/local/www/interfaces_assign.php:437
+msgid "Reboot is needed. Please apply the settings in order to reboot."
+msgstr ""
+"Sistemi yeniden başlatmak gerekiyor. Lütfen tekrar başlatma için "
+"yapılandırmayı uygulayınız."
+
+#: usr/local/www/interfaces_assign.php:439
+msgid ""
+"Interface mismatch detected. Please resolve the mismatch and click 'Apply "
+"changes'. The firewall will reboot afterwards."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:451
+msgid ""
+"The interface configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:465
+#: usr/local/www/interfaces_bridge.php:100 usr/local/www/interfaces_gif.php:94
+#: usr/local/www/interfaces_gre.php:95 usr/local/www/interfaces_groups.php:77
+#: usr/local/www/interfaces_lagg.php:100 usr/local/www/interfaces_ppps.php:92
+#: usr/local/www/interfaces_qinq.php:103 usr/local/www/interfaces_vlan.php:97
+#: usr/local/www/interfaces_wireless.php:92
+msgid "Interface assignments"
+msgstr "Arabirim atamaları"
+
+#: usr/local/www/interfaces_assign.php:466
+#: usr/local/www/interfaces_bridge.php:101 usr/local/www/interfaces_gif.php:95
+#: usr/local/www/interfaces_gre.php:96 usr/local/www/interfaces_groups.php:78
+#: usr/local/www/interfaces_lagg.php:101 usr/local/www/interfaces_ppps.php:93
+#: usr/local/www/interfaces_qinq.php:104 usr/local/www/interfaces_vlan.php:98
+#: usr/local/www/interfaces_wireless.php:93
+msgid "Interface Groups"
+msgstr "Arabirim Grupları"
+
+#: usr/local/www/interfaces_assign.php:468
+#: usr/local/www/interfaces_bridge.php:103 usr/local/www/interfaces_gif.php:97
+#: usr/local/www/interfaces_gre.php:98 usr/local/www/interfaces_groups.php:80
+#: usr/local/www/interfaces_lagg.php:103 usr/local/www/interfaces_ppps.php:95
+#: usr/local/www/interfaces_qinq.php:106 usr/local/www/interfaces_vlan.php:100
+#: usr/local/www/interfaces_wireless.php:95
+msgid "VLANs"
+msgstr "VLANlar"
+
+#: usr/local/www/interfaces_assign.php:469
+#: usr/local/www/interfaces_bridge.php:104 usr/local/www/interfaces_gif.php:98
+#: usr/local/www/interfaces_gre.php:99 usr/local/www/interfaces_groups.php:81
+#: usr/local/www/interfaces_lagg.php:104 usr/local/www/interfaces_ppps.php:96
+#: usr/local/www/interfaces_qinq.php:107 usr/local/www/interfaces_vlan.php:101
+#: usr/local/www/interfaces_wireless.php:96
+msgid "QinQs"
+msgstr "QinQler"
+
+#: usr/local/www/interfaces_assign.php:470
+#: usr/local/www/interfaces_bridge.php:105 usr/local/www/interfaces_gif.php:99
+#: usr/local/www/interfaces_gre.php:100 usr/local/www/interfaces_groups.php:82
+#: usr/local/www/interfaces_lagg.php:105 usr/local/www/interfaces_ppps.php:97
+#: usr/local/www/interfaces_ppps_edit.php:389
+#: usr/local/www/interfaces_qinq.php:108 usr/local/www/interfaces_vlan.php:102
+#: usr/local/www/interfaces_wireless.php:97
+msgid "PPPs"
+msgstr "PPPler"
+
+#: usr/local/www/interfaces_assign.php:471
+#: usr/local/www/interfaces_bridge.php:106
+#: usr/local/www/interfaces_gif.php:100 usr/local/www/interfaces_gre.php:82
+#: usr/local/www/interfaces_gre.php:101
+#: usr/local/www/interfaces_gre_edit.php:130
+#: usr/local/www/interfaces_groups.php:83
+#: usr/local/www/interfaces_lagg.php:106 usr/local/www/interfaces_ppps.php:98
+#: usr/local/www/interfaces_qinq.php:109 usr/local/www/interfaces_vlan.php:103
+#: usr/local/www/interfaces_wireless.php:98
+msgid "GRE"
+msgstr "GRE"
+
+#: usr/local/www/interfaces_assign.php:472
+#: usr/local/www/interfaces_bridge.php:107 usr/local/www/interfaces_gif.php:81
+#: usr/local/www/interfaces_gif.php:101
+#: usr/local/www/interfaces_gif_edit.php:136
+#: usr/local/www/interfaces_gre.php:102 usr/local/www/interfaces_groups.php:84
+#: usr/local/www/interfaces_lagg.php:107 usr/local/www/interfaces_ppps.php:99
+#: usr/local/www/interfaces_qinq.php:110 usr/local/www/interfaces_vlan.php:104
+#: usr/local/www/interfaces_wireless.php:99
+msgid "GIF"
+msgstr "GIF"
+
+#: usr/local/www/interfaces_assign.php:473
+#: usr/local/www/interfaces_bridge.php:108
+#: usr/local/www/interfaces_gif.php:102 usr/local/www/interfaces_gre.php:103
+#: usr/local/www/interfaces_groups.php:85
+#: usr/local/www/interfaces_lagg.php:108 usr/local/www/interfaces_ppps.php:100
+#: usr/local/www/interfaces_qinq.php:111 usr/local/www/interfaces_vlan.php:105
+#: usr/local/www/interfaces_wireless.php:100
+msgid "Bridges"
+msgstr "Köprüler"
+
+#: usr/local/www/interfaces_assign.php:474
+#: usr/local/www/interfaces_bridge.php:109
+#: usr/local/www/interfaces_gif.php:103 usr/local/www/interfaces_gre.php:104
+#: usr/local/www/interfaces_groups.php:86 usr/local/www/interfaces_lagg.php:87
+#: usr/local/www/interfaces_lagg.php:109
+#: usr/local/www/interfaces_lagg_edit.php:137
+#: usr/local/www/interfaces_ppps.php:101 usr/local/www/interfaces_qinq.php:112
+#: usr/local/www/interfaces_vlan.php:106
+#: usr/local/www/interfaces_wireless.php:101
+msgid "LAGG"
+msgstr "LAGG"
+
+#: usr/local/www/interfaces_assign.php:483
+msgid "Network port"
+msgstr "AÄŸ portu"
+
+#: usr/local/www/interfaces_assign.php:513
+msgid "delete interface"
+msgstr "arabirimi sil"
+
+#: usr/local/www/interfaces_assign.php:515
+msgid "Do you really want to delete this interface?"
+msgstr "Bu arabirimi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/interfaces_assign.php:527
+msgid "Available network ports:"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:543
+msgid "add selected interface"
+msgstr ""
+
+#: usr/local/www/interfaces_assign.php:556
+msgid ""
+"Interfaces that are configured as members of a lagg(4) interface will not be "
+"shown."
+msgstr ""
+"Lagg(4) arabiriminin üyesi olarak yapılandırılmış arabirimler "
+"gösterilmeyecek."
+
+#: usr/local/www/interfaces_bridge.php:64 usr/local/www/interfaces_gif.php:64
+#: usr/local/www/interfaces_gre.php:65 usr/local/www/interfaces_lagg.php:70
+#: usr/local/www/interfaces_vlan.php:65
+msgid "Wrong parameters supplied"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:66 usr/local/www/interfaces_gif.php:66
+#: usr/local/www/interfaces_gre.php:67 usr/local/www/interfaces_lagg.php:72
+#: usr/local/www/interfaces_vlan.php:67
+msgid "Wrong index supplied"
+msgstr ""
+
+#: usr/local/www/interfaces_bridge.php:69
+msgid "This bridge cannot be deleted because it is assigned as an interface."
+msgstr "Köprü bir arabirim olarak atandığı için silinemez."
+
+#: usr/local/www/interfaces_bridge.php:87
+#: usr/local/www/interfaces_bridge_edit.php:240
+msgid "Bridge"
+msgstr "Köprü"
+
+#: usr/local/www/interfaces_bridge.php:119
+#: usr/local/www/interfaces_groups.php:97
+#: usr/local/www/interfaces_lagg.php:119
+#: usr/local/www/load_balancer_pool_edit.php:286
+#: usr/local/www/system_groupmanager.php:375
+msgid "Members"
+msgstr "Ãœyeler"
+
+#: usr/local/www/interfaces_bridge.php:146
+msgid "Do you really want to delete this bridge?"
+msgstr "Bu köprüyü silmek istediğinize emin misiniz?"
+
+#: usr/local/www/interfaces_bridge.php:157
+msgid "Here you can configure bridging of interfaces."
+msgstr "Burada arabirimler arasında köprülemeyi yapılandırabilirsiniz."
+
+#: usr/local/www/interfaces_bridge_edit.php:123
+msgid "Member Interfaces"
+msgstr "Ãœye Arabirimler"
+
+#: usr/local/www/interfaces_bridge_edit.php:128
+msgid "Maxage needs to be an integer between 6 and 40."
+msgstr "En yüksek süre değeri 6 ile 40 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:130
+msgid "Maxaddr needs to be an integer."
+msgstr "En yüksek adres tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:132
+msgid "Timeout needs to be an integer."
+msgstr "Zaman aşımı tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:134
+msgid "Forward Delay needs to be an integer between 4 and 30."
+msgstr "Yönlendirme Gecikmesi 4 ile 30 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:136
+msgid "Hello time for STP needs to be an integer between 1 and 2."
+msgstr "STP selamlama zamanı 1 ya da 2 olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:138
+msgid "Priority for STP needs to be an integer between 0 and 61440."
+msgstr "STP önceliği 0 ile 61440 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:140
+msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10."
+msgstr "STP Yayın Tutma Sayısı 1 ile 10 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:143
+msgid "interface priority for STP needs to be an integer between 0 and 240."
+msgstr "STP arabirim önceliği 0 ile 240 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:148
+msgid ""
+"interface path cost for STP needs to be an integer between 1 and 200000000."
+msgstr ""
+"STP arabirim yol tutarı 1 ile 200.000.000 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_bridge_edit.php:153
+msgid "You must select at least 2 member interfaces for a bridge."
+msgstr "Köprü için en az iki üye arabirim seçmelisiniz."
+
+#: usr/local/www/interfaces_bridge_edit.php:158
+msgid "A member interface passed does not exist in configuration"
+msgstr "Geçiş yapan arabirim üyesi yapılandırmada mevcut değil"
+
+#: usr/local/www/interfaces_bridge_edit.php:161
+msgid "Bridging a wireless interface is only possible in hostap mode."
+msgstr "Kablosuz bir arabirimi köprülemek sadece hostap kipinde mümkündür."
+
+#: usr/local/www/interfaces_bridge_edit.php:163
+msgid ""
+"Span interface cannot be part of the bridge. Remove the span interface from "
+"bridge members to continue."
+msgstr ""
+"Yayım arabirimi bir köprünün parçası olamaz. Devam etmek için yayım "
+"arabirimini köprüden çıkarınız."
+
+#: usr/local/www/interfaces_bridge_edit.php:221
+#: usr/local/www/interfaces_gif_edit.php:117
+#: usr/local/www/interfaces_gre_edit.php:111
+#: usr/local/www/interfaces_lagg_edit.php:118
+#: usr/local/www/interfaces_vlan_edit.php:134
+msgid "Error occurred creating interface, please retry."
+msgstr ""
+
+#: usr/local/www/interfaces_bridge_edit.php:270
+msgid "Bridge configuration"
+msgstr "Köprü yapılandırması"
+
+#: usr/local/www/interfaces_bridge_edit.php:273
+#: usr/local/www/interfaces_lagg_edit.php:92
+msgid "Member interfaces"
+msgstr "Ãœye arabirimler"
+
+#: usr/local/www/interfaces_bridge_edit.php:288
+msgid "Interfaces participating in the bridge."
+msgstr "Bu arabirimde yer alan köprüler."
+
+#: usr/local/www/interfaces_bridge_edit.php:304
+msgid "RSTP/STP"
+msgstr "RSTP/STP"
+
+#: usr/local/www/interfaces_bridge_edit.php:307
+msgid "Enable spanning tree options for this bridge."
+msgstr "Bu köprü için yayım ağacı seçeneklerini aç."
+
+#: usr/local/www/interfaces_bridge_edit.php:323
+msgid "Protocol used for spanning tree."
+msgstr "Yayım ağacında kullanılacak protokol."
+
+#: usr/local/www/interfaces_bridge_edit.php:325
+msgid "STP interfaces"
+msgstr "STP Arabirimleri"
+
+#: usr/local/www/interfaces_bridge_edit.php:339
+msgid ""
+"Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has "
+"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to "
+"detect and remove loops in a network topology."
+msgstr ""
+"Arabirimde Yayım Ağacı Protokolünü (STP) aç. if_bridge(4) sürücüsü IEEE "
+"802.1d Yayım Ağacı Protokolünü (STP - Spanning Tree Protocol) destekler. STP "
+"ağ topolojisinde döngüleri tespit edip silmek için kullanılır."
+
+#: usr/local/www/interfaces_bridge_edit.php:345
+msgid "Valid time"
+msgstr "Geçerli Zaman"
+
+#: usr/local/www/interfaces_bridge_edit.php:350
+msgid ""
+"Set the time that a Spanning Tree Protocol configuration is valid. The "
+"default is 20 seconds. The minimum is 6 seconds and the maximum is 40 "
+"seconds."
+msgstr ""
+"Yayım Ağacı Protokolü yapılandırmasının geçerli olacağı süreyi belirleyin. "
+"Varsayılan değer 20 saniyedir. En az 6, en çok 40 saniye olabilir."
+
+#: usr/local/www/interfaces_bridge_edit.php:355
+msgid "Forward time"
+msgstr "Yönlendirme Zamanı"
+
+#: usr/local/www/interfaces_bridge_edit.php:360
+msgid ""
+"Set the time that must pass before an interface begins forwarding packets "
+"when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 "
+"seconds and the maximum is 30 seconds."
+msgstr ""
+"Yayım Ağacı açıldığında arabirimler paketleri yönlendirmeye başlamadan önce "
+"geçmesi gereken süreyi belirleyin. Varsayılan değeri 15, en az 4, en fazla "
+"30 saniyedir."
+
+#: usr/local/www/interfaces_bridge_edit.php:364
+msgid "Hello time"
+msgstr "Selamlama süresi"
+
+#: usr/local/www/interfaces_bridge_edit.php:369
+msgid ""
+"Set the time between broadcasting of Spanning Tree Protocol configuration "
+"messages. The hello time may only be changed when operating in legacy STP "
+"mode. The default is 2 seconds. The minimum is 1 second and the maximum is "
+"2 seconds."
+msgstr ""
+"Yayım Ağacı Protokolü yapılandırma mesajlarının yayınlanışı arasında geçmesi "
+"gereken süreyi belirleyin. Selamlama süresi sadece eski STP kipinde "
+"çalışırken değiştirilebilir. Varsayılan değeri 2 saniyedir ve 1 ya da 2 "
+"saniye olabilir."
+
+#: usr/local/www/interfaces_bridge_edit.php:378
+msgid ""
+"Set the bridge priority for Spanning Tree. The default is 32768. The "
+"minimum is 0 and the maximum is 61440."
+msgstr ""
+"Yayım Ağacı köprü önceliğini belirleyin. Varsayılan değeri 32768 saniyedir. "
+"En az 0, en fazla 61440 olabilir."
+
+#: usr/local/www/interfaces_bridge_edit.php:382
+msgid "Hold count"
+msgstr "Tutma sayısı"
+
+#: usr/local/www/interfaces_bridge_edit.php:387
+msgid ""
+"Set the transmit hold count for Spanning Tree. This is the number of "
+"packets transmitted before being rate limited. The default is 6. The "
+"minimum is 1 and the maximum is 10."
+msgstr ""
+"Yayım Ağacı tutma sayısını belirleyin. Hız sınırlamasından önce gönderilen "
+"paket sayısıdır. Varsayılan değeri 6'dır. En az 1, en fazla 10 olabilir."
+
+#: usr/local/www/interfaces_bridge_edit.php:402
+msgid ""
+"Set the Spanning Tree priority of interface to value. The default is 128. "
+"The minimum is 0 and the maximum is 240. Increments of 16."
+msgstr ""
+"Arabirimin Yayım Ağacı önceliğini ayarlayın. Varsayılan olarak 128, en az 0, "
+"en fazla 240'tır. Artışları 16 dır."
+
+#: usr/local/www/interfaces_bridge_edit.php:406
+msgid "Path cost"
+msgstr "Yol tutarı"
+
+#: usr/local/www/interfaces_bridge_edit.php:416
+msgid ""
+"Set the Spanning Tree path cost of interface to value. The default is "
+"calculated from the link speed. To change a previously selected path cost "
+"back to automatic, set the cost to 0. The minimum is 1 and the maximum is "
+"200000000."
+msgstr ""
+"Arabirimin Yayım Ağacı yol tutarını belirleyin. Varsayılan değer bağlantı "
+"hızından hesaplanır. Önceden seçilmiş yol tutarını otomatiğe çevirmek için 0 "
+"atayın. En az 1, en fazla 200.000.000 olabilir."
+
+#: usr/local/www/interfaces_bridge_edit.php:425
+msgid "Cache size"
+msgstr "Önbellek boyutu"
+
+#: usr/local/www/interfaces_bridge_edit.php:427
+msgid "entries"
+msgstr "girdileri"
+
+#: usr/local/www/interfaces_bridge_edit.php:429
+msgid ""
+"Set the size of the bridge address cache to size.\tThe default is .100 "
+"entries."
+msgstr ""
+"Köprü adresi önbelleğini bu boyuta ayarla.\tVarsayılan değeri .100 girdidir."
+
+#: usr/local/www/interfaces_bridge_edit.php:435
+msgid "Cache entry expire time"
+msgstr "Önbellek girdi zaman dolumu süresi"
+
+#: usr/local/www/interfaces_bridge_edit.php:439
+msgid ""
+"Set the timeout of address cache entries to this number of seconds. If "
+"seconds is zero, then address cache entries will not be expired. The default "
+"is 240 seconds."
+msgstr ""
+"Adres önbellek girdilerinin zaman aşımını bu kadar saniye olarak ayarla. "
+"Eğer 0 atanırsa adres önbellek girdilerinin süresi dolmaz. Varsayılan değeri "
+"240 saniyedir."
+
+#: usr/local/www/interfaces_bridge_edit.php:446
+msgid "Span port"
+msgstr "Yayım portu"
+
+#: usr/local/www/interfaces_bridge_edit.php:460
+msgid ""
+"Add the interface named by interface as a span port on the bridge. Span "
+"ports transmit a copy of every frame received by the bridge. This is most "
+"useful for snooping a bridged network passively on another host connected to "
+"one of the span ports of the bridge."
+msgstr ""
+"Adı verilen arabirimi köprüde yayım portu olarak ekle. Yayım portları "
+"köprüye gelen her çerçevenin bir kopyasını yayınlar. Bu yöntem en çok "
+"köprünün yayım portlarından birine bağlı başka bir sunucu üzerindeki "
+"köprülenmiş ağı izlemekte işe yarar."
+
+#: usr/local/www/interfaces_bridge_edit.php:469
+msgid "The span interface cannot be part of the bridge member interfaces."
+msgstr "Yayım arabirimi köprü üye arabirimlerinden biri olamaz."
+
+#: usr/local/www/interfaces_bridge_edit.php:474
+msgid "Edge ports"
+msgstr "Sınır portlar"
+
+#: usr/local/www/interfaces_bridge_edit.php:488
+msgid ""
+"Set interface as an edge port. An edge port connects directly to end "
+"stations and cannot create bridging loops in the network; this allows it to "
+"transition straight to forwarding."
+msgstr ""
+"Arabirimi sınır port olarak ata. Sınır port uç bilgisayarlara doğrudan "
+"bağlanır; böylece doğrudan yönlendirme yapmasına olanak sağlanmış olur."
+
+#: usr/local/www/interfaces_bridge_edit.php:494
+msgid "Auto Edge ports"
+msgstr "Otomatik Sınır portlar"
+
+#: usr/local/www/interfaces_bridge_edit.php:508
+msgid ""
+"Allow interface to automatically detect edge status. This is the default "
+"for all interfaces added to a bridge."
+msgstr ""
+"Arabirimin sınır durumunu doğrudan tespit etmesine olanak ver. Köprüye "
+"eklenen tüm arabirimlerin öntanımlısı budur."
+
+#: usr/local/www/interfaces_bridge_edit.php:513
+msgid "This will disable the autoedge status of interfaces."
+msgstr "Bu seçenek arabirimlerin otomatik sınır durumunu kapatır."
+
+#: usr/local/www/interfaces_bridge_edit.php:517
+msgid "PTP ports"
+msgstr "PTP portları"
+
+#: usr/local/www/interfaces_bridge_edit.php:531
+msgid ""
+"Set the interface as a point-to-point link. This is required for straight "
+"transitions to forwarding and should be enabled on a direct link to another "
+"RSTP-capable switch."
+msgstr ""
+"Arabirimi uçtan uca bağlantısı olarak ayarla. Bu yönlendirmeye doğrudan "
+"geçiş için gereklidir ve RSTP becerisi olan başka bir switch'e doğrudan "
+"bağlantı varsa etkinleştirilmelidir."
+
+#: usr/local/www/interfaces_bridge_edit.php:537
+msgid "Auto PTP ports"
+msgstr "Otomatik PTP portları"
+
+#: usr/local/www/interfaces_bridge_edit.php:551
+msgid ""
+"Automatically detect the point-to-point status on interface by checking the "
+"full duplex link status. This is the default for interfaces added to the "
+"bridge."
+msgstr ""
+"Full duplex bağlantı durumunu kontrol ederek uçtan uca durumunu otomatik "
+"olarak bul. Köprüye eklenen arabirimler için öntanımlı ayar budur."
+
+#: usr/local/www/interfaces_bridge_edit.php:557
+msgid ""
+"The interfaces selected here will be removed from default autoedge status."
+msgstr ""
+"Burada seçilen arabirimler varsayılan otomatik sınır durumundan çıkarılır."
+
+#: usr/local/www/interfaces_bridge_edit.php:561
+msgid "Sticky ports"
+msgstr "Sabit portlar"
+
+#: usr/local/www/interfaces_bridge_edit.php:575
+msgid ""
+"Mark an interface as a \"sticky\" interface. Dynamically learned address "
+"entries are treated as static once entered into the cache. Sticky entries "
+"are never aged out of the cache or replaced, even if the address is seen on "
+"a different interface."
+msgstr ""
+"Arabirimi \"sabit\" diye işaretle. Dinamik olarak öğrenilen adres girdileri "
+"önbelleğe girdikten sonra statik kabul edilir. Sabit girdiler adreslerle "
+"farklı bir arabirim üzerimde karşılaşılsa da önbellekten çıkarılmaz."
+
+#: usr/local/www/interfaces_bridge_edit.php:582
+msgid "Private ports"
+msgstr "Özel portlar"
+
+#: usr/local/www/interfaces_bridge_edit.php:596
+msgid ""
+"Mark an interface as a \"private\" interface. A private interface does not "
+"forward any traffic to any other port that is also a private interface."
+msgstr ""
+"Arabirimi \"özel\" bir arabirim olarak ata. Özel arabirimler diğer özel "
+"arabirimlere trafik yönlendirmez."
+
+#: usr/local/www/interfaces_gif.php:69
+msgid ""
+"This gif TUNNEL cannot be deleted because it is still being used as an "
+"interface."
+msgstr "Bu GIF tüneli bir arabirim olarak kullanıldığı için silinemez."
+
+#: usr/local/www/interfaces_gif.php:113 usr/local/www/interfaces_gre.php:114
+msgid "Tunnel to..."
+msgstr "Tünellenecek..."
+
+#: usr/local/www/interfaces_gif.php:129
+msgid "Do you really want to delete this gif tunnel?"
+msgstr "Bu GIF tünelini silmek istediğinize emin misiniz?"
+
+#: usr/local/www/interfaces_gif.php:140
+msgid "GIF tunnels are configured here."
+msgstr "GIF tünelleri burada yapılandırılır."
+
+# takip eden 2 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical)
+#: usr/local/www/interfaces_gif.php:142
+msgid ""
+"If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) "
+"Tunnel Broker on a WAN with a dynamic IP, you may want to add a"
+msgstr ""
+"IP değişikliklerinizde tünelinizi işlevsel tutmak ve Hurricane Electric (he."
+"net) e bağlanmak için WAN dinamik IP sinde GIF Tünelkırıcı kullanıyorsanız,"
+
+# takip eden 1 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical)
+#: usr/local/www/interfaces_gif.php:142
+msgid "HE.net Tunnelbroker type DynDNS Entry"
+msgstr "HE.net Tünelkırıcı için DynDNS girdisi eklemek"
+
+# yukarıdaki 2 satır çeviri birlikte kullanılıyor o yüzden cümleler devrik konumlanmıştır (technical)
+#: usr/local/www/interfaces_gif.php:142
+msgid "to keep your tunnel functional when your IP changes."
+msgstr "isteyebilirsiniz."
+
+#: usr/local/www/interfaces_gif_edit.php:78
+msgid ""
+"Parent interface,Local address, Remote tunnel address, Remote tunnel "
+"network, Local tunnel address"
+msgstr ""
+"Ebeveyn arabirim, Yerel adres, Uzak tünel adresi, Uzak tünel ağı, Yerel "
+"tünel adresi"
+
+#: usr/local/www/interfaces_gif_edit.php:84
+#: usr/local/www/interfaces_gre_edit.php:83
+msgid "The tunnel local and tunnel remote fields must have valid IP addresses."
+msgstr "Yerel ve uzak tünel alanlarına geçerli IP adresleri girilmeli."
+
+#: usr/local/www/interfaces_gif_edit.php:90
+msgid ""
+"The alias IP address family has to match the family of the remote peer "
+"address."
+msgstr ""
+"Grup IP adres ailesi ile uzak eş adres ailesine birbirine uymak zorundadır."
+
+#: usr/local/www/interfaces_gif_edit.php:98
+#, php-format
+msgid "A gif with the network %s is already defined."
+msgstr "%s ağıyla bir GIF zaten tanımlı."
+
+#: usr/local/www/interfaces_gif_edit.php:149
+msgid "GIF configuration"
+msgstr "GIF yapılandırması"
+
+#: usr/local/www/interfaces_gif_edit.php:152
+#: usr/local/www/interfaces_gre_edit.php:77
+#: usr/local/www/interfaces_gre_edit.php:146
+#: usr/local/www/interfaces_lagg_edit.php:152
+#: usr/local/www/interfaces_qinq_edit.php:294
+#: usr/local/www/interfaces_vlan_edit.php:79
+#: usr/local/www/interfaces_vlan_edit.php:167
+#: usr/local/www/interfaces_wireless_edit.php:90
+#: usr/local/www/interfaces_wireless_edit.php:165
+msgid "Parent interface"
+msgstr "Ebeveyn arabirim"
+
+#: usr/local/www/interfaces_gif_edit.php:172
+msgid ""
+"The interface here serves as the local address to be used for the gif tunnel."
+msgstr ""
+"Buradaki arabirim GIF tüneli olarak kullanılacak yerel uca karşılık gelir."
+
+#: usr/local/www/interfaces_gif_edit.php:175
+msgid "gif remote address"
+msgstr "GIF uzak adresi"
+
+#: usr/local/www/interfaces_gif_edit.php:179
+msgid "Peer address where encapsulated gif packets will be sent. "
+msgstr "Kapsüllenmiş GIF paketlerinin gönderileceği eş adresi."
+
+#: usr/local/www/interfaces_gif_edit.php:182
+msgid "gif tunnel local address"
+msgstr "GIF tünel yerel adresi"
+
+#: usr/local/www/interfaces_gif_edit.php:186
+msgid "Local gif tunnel endpoint"
+msgstr "GIF tüneli yerel ucu"
+
+#: usr/local/www/interfaces_gif_edit.php:189
+msgid "gif tunnel remote address "
+msgstr "GIF tüneli uzak adresi"
+
+#: usr/local/www/interfaces_gif_edit.php:203
+msgid ""
+"Remote gif address endpoint. The subnet part is used for determining the "
+"network that is tunnelled."
+msgstr ""
+"Uzak GIF adresi bitiş noktası. Bu alt ağ tünel ağın sonlandırılmasında "
+"kullanıldı."
+
+#: usr/local/www/interfaces_gif_edit.php:206
+msgid "Route caching "
+msgstr "Rota önbellekleme"
+
+#: usr/local/www/interfaces_gif_edit.php:210
+msgid ""
+"Specify if route caching can be enabled. Be careful with these settings on "
+"dynamic networks. "
+msgstr ""
+"Rota önbelleklemenin etkinleştirilip etkinleştirilmeyeceğini seçiniz. "
+"Dinamik ağlarda bu ayarları dikkatli kullanınız."
+
+# 95%
+#: usr/local/www/interfaces_gif_edit.php:213
+msgid "ECN friendly behavior"
+msgstr "ECN dostu davranış"
+
+#: usr/local/www/interfaces_gif_edit.php:218
+msgid ""
+"Note that the ECN friendly behavior violates RFC2893. This should be used "
+"in mutual agreement with the peer."
+msgstr ""
+"ECN dostu davranışın RFC2893'ü ihlal ettiğini unutmayınız. Bu ayar sadece "
+"diğer uçla anlaşılarak kullanılmalıdır."
+
+#: usr/local/www/interfaces_gre.php:70
+msgid ""
+"This GRE tunnel cannot be deleted because it is still being used as an "
+"interface."
+msgstr "Bu GRE tüneli halen bir arabirim olarak kullanıldığından silinemiyor."
+
+#: usr/local/www/interfaces_gre.php:130
+msgid "Do you really want to delete this GRE tunnel?"
+msgstr "GRE tünelini silmek istediğinize emin misiniz?"
+
+#: usr/local/www/interfaces_gre.php:139
+msgid ""
+"Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) "
+"tunnels."
+msgstr ""
+"Bu kısımda GRE (Genel Rota Sarmalama - RFC2784) yapılandırmasını "
+"gerçekleştirebilirsiniz."
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Local address"
+msgstr "Yerel adres"
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Remote tunnel address"
+msgstr "Uzak tünel adresi"
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Remote tunnel network"
+msgstr "Uzak tünel ağı"
+
+#: usr/local/www/interfaces_gre_edit.php:77
+msgid "Local tunnel address"
+msgstr "Yerel tünel adresi"
+
+#: usr/local/www/interfaces_gre_edit.php:91
+#, php-format
+msgid "A GRE tunnel with the network %s is already defined."
+msgstr "Sistemde zaten %s ağında bir GRE tüneli tanımlı durumda."
+
+#: usr/local/www/interfaces_gre_edit.php:143
+msgid "GRE configuration"
+msgstr "GRE yapılandırması"
+
+#: usr/local/www/interfaces_gre_edit.php:166
+msgid ""
+"The interface here serves as the local address to be used for the GRE tunnel."
+msgstr "Bu arabirim GRE Tüneli için kullanılacak yerel adres olarak çalışır."
+
+#: usr/local/www/interfaces_gre_edit.php:169
+msgid "Remote tunnel endpoint IP address"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:173
+msgid "Peer address where encapsulated GRE packets will be sent "
+msgstr "Sarmalanmış GRE paketlerinin gönderileceği eş uç adresi"
+
+#: usr/local/www/interfaces_gre_edit.php:176
+msgid "Local tunnel IP address "
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:180
+msgid "Local IP address assigned inside this tunnel"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:183
+msgid "Remote tunnel IP address "
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:197
+msgid ""
+"IP address inside this tunnel on the remote end. The subnet part is used for "
+"the determining the network that is tunneled."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:200
+msgid "Mobile encapsulation"
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:204
+msgid ""
+"Check this box to use mobile encapsulation (IP protocol 55, RFC 2004). When "
+"unchecked, uses GRE encapsulation (IP protocol 47, RFCs 1701, 1702)."
+msgstr ""
+
+#: usr/local/www/interfaces_gre_edit.php:207
+msgid "Route search type"
+msgstr "Rota arama türü"
+
+#: usr/local/www/interfaces_gre_edit.php:212
+msgid ""
+"For correct operation, the GRE device needs a route to the destination that "
+"is less specific than the one over the tunnel. (Basically, there needs to "
+"be a route to the decapsulating host that does not run over the tunnel, as "
+"this would be a loop."
+msgstr ""
+"Doğru bir şekilde çalışması için, GRE cihazının hedefe tünel üzerinden "
+"gidenden daha az özelleşmiş olması gerekir. (Özetle, çözümleme işlemini "
+"yapan istemciye tünel üzerinden gitmeyen bir rota olması gerekir, çünkü aksi "
+"taktirde bir döngü oluşur)."
+
+#: usr/local/www/interfaces_gre_edit.php:219
+msgid "WCCP version"
+msgstr "WCCP sürümü"
+
+#: usr/local/www/interfaces_gre_edit.php:223
+msgid ""
+"Check this box for WCCP encapsulation version 2, or leave unchecked for "
+"version 1."
+msgstr ""
+
+#: usr/local/www/interfaces_groups.php:64
+#: usr/local/www/interfaces_groups_edit.php:45
+#: usr/local/www/system_authservers.php:449
+#: usr/local/www/system_gateway_groups.php:121
+#: usr/local/www/system_gateways.php:205
+#: usr/local/www/system_groupmanager.php:289
+#: usr/local/www/system_groupmanager_addprivs.php:169
+#: usr/local/www/system_routes.php:222
+#: usr/local/www/system_usermanager.php:495
+#: usr/local/www/system_usermanager.php:907
+#: usr/local/www/system_usermanager_addprivs.php:158
+#: usr/local/www/system_usermanager_settings.php:115
+msgid "Groups"
+msgstr "Gruplar"
+
+#: usr/local/www/interfaces_groups.php:130
+#: usr/local/www/system_groupmanager.php:552
+msgid "edit group"
+msgstr "grup düzenle"
+
+#: usr/local/www/interfaces_groups.php:131
+msgid ""
+"Do you really want to delete this group? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+"Bu grubu silmek istediğinize emin misiniz? Bu grubu kullanan öğeler (örn. "
+"filtre kuralları) devre dışı kalacaktır!"
+
+#: usr/local/www/interfaces_groups.php:131
+msgid "delete ifgroupentry"
+msgstr "eÄŸer grubu girdisini sil"
+
+#: usr/local/www/interfaces_groups.php:143
+msgid "add a new group"
+msgstr "yeni grup ekle"
+
+#: usr/local/www/interfaces_groups.php:150
+msgid ""
+"Interface Groups allow you to create rules that apply to multiple interfaces "
+"without duplicating the rules. If you remove members from an interface "
+"group, the group rules no longer apply to that interface."
+msgstr ""
+"Arabirim Grupları kuralların birden fazla kopyasını çıkarmadan birden fazla "
+"arabirime uygulanacak kurallar oluşturmanıza olanak verir. Bir arabirim "
+"grubunun bir üyesi silindiğinde grup kuralları artık o arabirime uygulanmaz."
+
+#: usr/local/www/interfaces_groups_edit.php:75
+msgid "Group name already exists!"
+msgstr "Grup adı sistemde mevcut!"
+
+#: usr/local/www/interfaces_groups_edit.php:78
+msgid "Only letters A-Z are allowed as the group name."
+msgstr "Grup adında sadece İngilizce A-Z harfleri kullanılabilir."
+
+#: usr/local/www/interfaces_groups_edit.php:250
+msgid "Interface Groups Edit"
+msgstr "Arabirim Gruplarını Düzenle"
+
+#: usr/local/www/interfaces_groups_edit.php:253
+#: usr/local/www/status_gateway_groups.php:76
+#: usr/local/www/system_gateway_groups.php:131
+#: usr/local/www/system_gateway_groups_edit.php:235
+#: usr/local/www/system_gateway_groups_edit.php:238
+#: usr/local/www/system_groupmanager.php:143
+msgid "Group Name"
+msgstr "Grup Adı"
+
+#: usr/local/www/interfaces_groups_edit.php:257
+msgid "No numbers or spaces are allowed. Only characters in a-zA-Z"
+msgstr ""
+"Sayı ve boşluk kullanılamaz. Sadece İngilizce a-z ve A-Z harfleri "
+"kullanılabilir"
+
+#: usr/local/www/interfaces_groups_edit.php:271
+#: usr/local/www/interfaces_qinq_edit.php:353
+msgid "Member (s)"
+msgstr "Ãœye (ler)"
+
+#: usr/local/www/interfaces_groups_edit.php:326
+msgid ""
+"Rules for WAN type interfaces in groups do not contain the reply-to "
+"mechanism upon which Multi-WAN typically relies."
+msgstr ""
+
+#: usr/local/www/interfaces_groups_edit.php:327
+msgid "More Information"
+msgstr ""
+
+#: usr/local/www/interfaces_lagg.php:75
+msgid "This LAGG interface cannot be deleted because it is still being used."
+msgstr "Bu LAGG arabirimi kullanımda olduğundan silinemez."
+
+#: usr/local/www/interfaces_lagg.php:146
+msgid ""
+"LAGG allows for link aggregation, bonding and fault tolerance. Only "
+"unassigned interfaces can be added to LAGG."
+msgstr ""
+"LAGG bağlantı toplamaya, bağlanmaya ve hata toleransına izin verir. Sadece "
+"atanmamış arabirimler LAGG'a eklenebilir."
+
+#: usr/local/www/interfaces_lagg_edit.php:92
+msgid "Lagg protocol"
+msgstr "LAGG protokolü"
+
+#: usr/local/www/interfaces_lagg_edit.php:99
+#: usr/local/www/interfaces_lagg_edit.php:102
+msgid "Interface supplied as member is invalid"
+msgstr "Arabirime verilen kullanıcı geçersiz"
+
+#: usr/local/www/interfaces_lagg_edit.php:105
+msgid "Protocol supplied is invalid"
+msgstr "Verilen protokol geçersiz"
+
+#: usr/local/www/interfaces_lagg_edit.php:149
+msgid "LAGG configuration"
+msgstr "LAGG yapılandırması"
+
+#: usr/local/www/interfaces_lagg_edit.php:167
+msgid "Choose the members that will be used for the link aggregation"
+msgstr "Bağlantı toplamada kullanılacak üyeleri seçin"
+
+#: usr/local/www/interfaces_lagg_edit.php:170
+msgid "Lag proto"
+msgstr "Lag protokolü"
+
+#: usr/local/www/interfaces_lagg_edit.php:185
+msgid "failover"
+msgstr "yük aktarma"
+
+#: usr/local/www/interfaces_lagg_edit.php:186
+msgid ""
+"Sends and receives traffic only through the master port. If the master port "
+"becomes unavailable, the next active port is used. The first interface "
+"added is the master port; any interfaces added after that are used as "
+"failover devices."
+msgstr ""
+"Sadece ana portu kullanarak trafik gönderir ve alır. Eğer ana port devre "
+"dışı kalırsa bir sonraki aktif port kullanılır. İlk eklenen arabirim ana "
+"porttur, daha sonra eklenenler yük aktarma için kullanılır."
+
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid "fec"
+msgstr "fec"
+
+#: usr/local/www/interfaces_lagg_edit.php:191
+msgid ""
+"Supports Cisco EtherChannel. This is a static setup and does not negotiate "
+"aggregation with the peer or exchange frames to monitor the link."
+msgstr ""
+"Cisco EtherChannel destekler. Bu statik bir yapılandırmadır; eş ile toplama "
+"anlaşması veya bağlantıyı takip etmek için çerçeve alışverişi yapmaz."
+
+#: usr/local/www/interfaces_lagg_edit.php:195
+msgid "lacp"
+msgstr "lacp"
+
+#: usr/local/www/interfaces_lagg_edit.php:195
+msgid ""
+"Supports the IEEE 802.3ad Link Aggregation Control Protocol (LACP) and the "
+"Marker Protocol. LACP will negotiate a set of aggregable links with the "
+"peer in to one or more Link Aggregated Groups. Each LAG is composed of "
+"ports of the same speed, set to full-duplex operation. The traffic will be "
+"balanced across the ports in the LAG with the greatest total speed, in most "
+"cases there will only be one LAG which contains all ports. In the event of "
+"changes in physical connectivity, Link Aggregation will quickly converge to "
+"a new configuration."
+msgstr ""
+"IEEE 802.3ad Bağlantı Toplama Kontrol Protokolünü (LACP - Link Aggregation "
+"Control Protocol) ve İşaretleme Protokolünü (Marker Protocol) destekler. "
+"LACP eş ile bir veya daha fazla Bağlantı Toplama Grubuna (LAG - Link "
+"Aggregated Group) bir dizi anlaşılmış bağlantı görüşecektir. Her LAG full-"
+"duplex çalışmaya ayarlanmış aynı hızda portlardan oluşur. Trafik LAG'daki "
+"portlar arasında dengelenir ve böylece en yüksek toplam hız elde edilir; "
+"çoğu durumda tüm portları içeren tek bir LAG olur. Fiziksel "
+"bağlanılabilirlik değişikliklerinde Bağlantı Toplama hemen yeni "
+"yapılandırmaya geçer."
+
+#: usr/local/www/interfaces_lagg_edit.php:206
+msgid "loadbalance"
+msgstr "yük dengeleme"
+
+#: usr/local/www/interfaces_lagg_edit.php:206
+msgid ""
+"Balances outgoing traffic across the active ports based on hashed protocol "
+"header information and accepts incoming traffic from any active port. This "
+"is a static setup and does not negotiate aggregation with the peer or "
+"exchange frames to monitor the link. The hash includes the Ethernet source "
+"and destination address, and, if available, the VLAN tag, and the IP source "
+"and destination address"
+msgstr ""
+"Dışarıya giden trafiği protokol başlık bilgisine göre etkin portlar arasında "
+"dengeler ve tüm etkin portlardan gelen trafiği kabul eder. Bu statik bir "
+"yapılandırmadır; eş ile toplama görüşmesi yapmaz ve bağlantıyı izlemek için "
+"çerçeve alışverişinde bulunmaz. Protokol başlık bilgisinde kullanılan "
+"değerleme Ethernet kaynak ve hedef adresini, varsa VLAN takısını ve IP "
+"kaynak ve hedef adresini içerir"
+
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid "roundrobin"
+msgstr "dairesel denetim"
+
+#: usr/local/www/interfaces_lagg_edit.php:214
+msgid ""
+"Distributes outgoing traffic using a round-robin scheduler through all "
+"active ports and accepts incoming traffic from any active port"
+msgstr ""
+"Dışarı giden trafiği bir dairesel denetim tarifeleyici kullanarak tüm etkin "
+"portlar arasında dağıtır ve tüm etkin portlardan gelen trafiği kabul eder"
+
+#: usr/local/www/interfaces_lagg_edit.php:218
+msgid ""
+"This protocol is intended to do nothing: it disables any traffic without "
+"disabling the lagg interface itself"
+msgstr ""
+"Bu protokol hiçbirşey yapmamak için tasarlanmıştır: LAGG arabirimini "
+"kapatmadan tüm trafiği kapatır"
+
+#: usr/local/www/interfaces_ppps.php:63
+msgid ""
+"This point-to-point link cannot be deleted because it is still being used as "
+"an interface."
+msgstr ""
+"Bu noktadan noktaya bağlantı bir arabirim olarak kullanıldığından "
+"silinemiyor."
+
+#: usr/local/www/interfaces_ppps.php:79
+msgid "Interfaces: PPPs"
+msgstr "Arabirimler: PPPler"
+
+#: usr/local/www/interfaces_ppps.php:111
+msgid "Interface(s)/Port(s)"
+msgstr "Arabirim(ler)/Port(lar)"
+
+#: usr/local/www/interfaces_ppps.php:134
+msgid "Do you really want to delete this PPP interface?"
+msgstr "Bu PPP arabirimini silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/interfaces_ppps_edit.php:193
+#: usr/local/www/interfaces_ppps_edit.php:199
+#: usr/local/www/interfaces_ppps_edit.php:202
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+msgid "Link Interface(s)"
+msgstr "Bağlantı Arabirim(ler)i"
+
+#: usr/local/www/interfaces_ppps_edit.php:210
+#: usr/local/www/interfaces_ppps_edit.php:213
+#: usr/local/www/services_dhcp.php:804 usr/local/www/services_dhcpv6.php:555
+msgid "Subnet"
+msgstr "AltaÄŸ"
+
+#: usr/local/www/interfaces_ppps_edit.php:218
+msgid "Please choose a Link Type."
+msgstr "Bağlantı türü seçiniz."
+
+#: usr/local/www/interfaces_ppps_edit.php:222
+msgid ""
+"Multilink connections (MLPPP) using the PPP link type is not currently "
+"supported. Please select only one Link Interface."
+msgstr ""
+"PPP bağlantı türüyle çoklu bağlantı (MLPPP) henüz desteklenmiyor. Lütfen "
+"sadece bir bağlantı arabirimi seçin."
+
+#: usr/local/www/interfaces_ppps_edit.php:224
+msgid "The Service name contains invalid characters."
+msgstr "Servis adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/interfaces_ppps_edit.php:226
+msgid "Do not specify both a Service name and a NULL Service name."
+msgstr "Hem bir servis adı hem de Boş servis adı belirtmeyin."
+
+#: usr/local/www/interfaces_ppps_edit.php:240
+msgid ""
+"A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE "
+"Periodic reset fields."
+msgstr ""
+"Özel PPPoE düzenli sıfırlama alanlarında çeçerli bir PPPoE sıfırlama ayı "
+"(1-12) belirtmelisiniz."
+
+#: usr/local/www/interfaces_ppps_edit.php:242
+msgid ""
+"A valid PPPoE reset day of month must be specified (1-31) in the Custom "
+"PPPoE Periodic reset fields. No checks are done on valid # of days per month"
+msgstr ""
+"Özel PPPoE düzenli sıfırlama alanlarında çeçerli bir PPPoE sıfırlama günü "
+"(1-31) belirtmelisiniz. Her ayın farklı sayıda günden oluştuğunu da unutmayın"
+
+#: usr/local/www/interfaces_ppps_edit.php:244
+msgid ""
+"A valid PPPoE reset year must be specified. Don't select a year in the past!"
+msgstr ""
+"Geçerli bir PPPoE sıfırlama yılı giriniz. Geçmişteki bir yıl "
+"belirtilmemelidir!"
+
+#: usr/local/www/interfaces_ppps_edit.php:249
+#, php-format
+msgid "A valid local IP address must be specified for %s."
+msgstr "%s için geçerli bir yerel IP adresi belirtilmelidir."
+
+#: usr/local/www/interfaces_ppps_edit.php:251
+#, php-format
+msgid "A valid gateway IP address OR hostname must be specified for %s."
+msgstr "%s geçerli bir ağ geçidi IP adresi ya da host adı tanımlanmalıdır."
+
+#: usr/local/www/interfaces_ppps_edit.php:253
+#, php-format
+msgid "The bandwidth value for %s must be an integer."
+msgstr "%s bant genişliği tamsayı olarak girilmelidir."
+
+#: usr/local/www/interfaces_ppps_edit.php:255
+#, php-format
+msgid "The MTU for %s must be greater than 576 bytes."
+msgstr "%s MTU değeri 576 bayttan büyük olmalıdır."
+
+#: usr/local/www/interfaces_ppps_edit.php:257
+#, php-format
+msgid "The MRU for %s must be greater than 576 bytes."
+msgstr "%s MRU değeri 576 bayttan büyük olmalıdır."
+
+#: usr/local/www/interfaces_ppps_edit.php:393
+#: usr/local/www/system_authservers.php:605
+msgid "Select"
+msgstr "Seç"
+
+#: usr/local/www/interfaces_ppps_edit.php:412
+msgid "PPPs configuration"
+msgstr "PPP yapılandırması"
+
+#: usr/local/www/interfaces_ppps_edit.php:415
+msgid "Link Type"
+msgstr "Bağlantı Türü"
+
+#: usr/local/www/interfaces_ppps_edit.php:430
+msgid "Link interface(s)"
+msgstr "Bağlantı arabirim(ler)i"
+
+#: usr/local/www/interfaces_ppps_edit.php:436
+msgid "Select at least two interfaces for Multilink (MLPPP) connections."
+msgstr "Çoklu bağlantı (MLPPP) için en az iki arabirim seçmelisiniz."
+
+#: usr/local/www/interfaces_ppps_edit.php:485
+msgid ""
+"You may enter a description here for your reference. Description will appear "
+"in the \"Interfaces Assign\" select lists."
+msgstr ""
+"Buraya kendiniz için bir açıklama girebilirsiniz. Açıklama \"Arabirim Ataması"
+"\" seçim listelerinde çıkar."
+
+#: usr/local/www/interfaces_ppps_edit.php:539
+msgid "Note: Typically *99# for GSM networks and #777 for CDMA networks"
+msgstr "Not: Genelde, GSM ağları için *99# ve CDMA ağları için #777'dir"
+
+#: usr/local/www/interfaces_ppps_edit.php:553
+msgid "APN number (optional)"
+msgstr "APN numarası (isteğe bağlı)"
+
+#: usr/local/www/interfaces_ppps_edit.php:556
+msgid ""
+"Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."
+msgstr ""
+"Not: APN belirttiyseniz varsayılan olarak 1'dir. APN belirtmediyseniz "
+"gözardı edilir."
+
+#: usr/local/www/interfaces_ppps_edit.php:560
+msgid "SIM PIN"
+msgstr "SIM PIN"
+
+#: usr/local/www/interfaces_ppps_edit.php:567
+msgid "SIM PIN wait"
+msgstr "SIM PIN beklemesi"
+
+#: usr/local/www/interfaces_ppps_edit.php:570
+msgid ""
+"Note: Time to wait for SIM to discover network after PIN is sent to SIM "
+"(seconds)."
+msgstr ""
+"Not: SIM kartının PIN girildikten sonra ağı bulması için beklenecek süre "
+"(saniye cinsinden)."
+
+#: usr/local/www/interfaces_ppps_edit.php:574
+msgid "Init String"
+msgstr "Açılış Dizesi"
+
+#: usr/local/www/interfaces_ppps_edit.php:577
+msgid ""
+"Note: Enter the modem initialization string here. Do NOT include the \"AT\" "
+"string at the beginning of the command. Many modern USB 3G modems don't need "
+"an initialization string."
+msgstr ""
+"Not: Buraya modem açılış dizesini girin. Komutun başındaki \"AT\" dizesini "
+"yazmayın. Çoğu modern USB 3G modemin bir açılış dizesine ihtiyacı yoktur."
+
+#: usr/local/www/interfaces_ppps_edit.php:582
+msgid "Connection Timeout"
+msgstr "Bağlantı Zaman Aşımı"
+
+#: usr/local/www/interfaces_ppps_edit.php:585
+msgid ""
+"Note: Enter timeout in seconds for connection to be established (sec.) "
+"Default is 45 sec."
+msgstr ""
+"Not: Bağlantının kurulması için en fazla beklenmesi gereken süreyi saniye "
+"cinsinden girin. Varsayılan olarak 45 saniyedir."
+
+#: usr/local/www/interfaces_ppps_edit.php:589
+msgid "Uptime Logging"
+msgstr "Geçen Süre Günlükleme"
+
+#: usr/local/www/interfaces_ppps_edit.php:591
+msgid "Enable persistent logging of connection uptime."
+msgstr "Bağlantı süresinin kalıcı olarak günlüklenmesini aç."
+
+#: usr/local/www/interfaces_ppps_edit.php:592
+msgid ""
+"This option causes cumulative uptime to be recorded and displayed on the "
+"Status Interfaces page."
+msgstr ""
+"Bu seçenek toplam etkinlik süresinin kaydedilmesini ve Arabirim Durumları "
+"sayfasında gösterilmesini açar."
+
+#: usr/local/www/interfaces_ppps_edit.php:604
+msgid "Configure a NULL Service name"
+msgstr "Boş servis adını yapılandır"
+
+#: usr/local/www/interfaces_ppps_edit.php:605
+msgid ""
+"Hint: this field can usually be left empty. Service name will not be "
+"configured if this field is empty. Check the \"Configure NULL\" box to "
+"configure a blank Service name."
+msgstr ""
+"İpucu: Bu alan genellikle boş bırakılabilir ve boş bırakıldığında servis adı "
+"yapılandırılmaz. Boş bir servis adını yapılandırmak için \"Boş servisi "
+"yapılandır\" kutusunu işaretleyin."
+
+#: usr/local/www/interfaces_ppps_edit.php:680
+msgid "IP Address OR Hostname"
+msgstr "IP Adresi ya da Host Adı"
+
+#: usr/local/www/interfaces_ppps_edit.php:691
+msgid "Dial On Demand"
+msgstr "GerektiÄŸinde Arama"
+
+#: usr/local/www/interfaces_ppps_edit.php:693
+msgid "Enable Dial-on-Demand mode"
+msgstr "GerektiÄŸinde Arama kipini etkinleÅŸtir"
+
+#: usr/local/www/interfaces_ppps_edit.php:694
+msgid ""
+"This option causes the interface to operate in dial-on-demand mode. Do NOT "
+"enable if you want your link to be always up. The interface is configured, "
+"but the actual connection of the link is delayed until qualifying outgoing "
+"traffic is detected."
+msgstr ""
+"Bu seçenek arabiriminde gerektiğinde arama kipinde çalışmasını sağlar. Eğer "
+"bağlantının sürekli açık olmasını istiyorsanız bu seçeneği AÇMAYIN. Arabirim "
+"yapılandırılır ama dışarı trafik çıkana kadar bağlantı sağlanmaz."
+
+#: usr/local/www/interfaces_ppps_edit.php:699
+msgid "Idle Timeout"
+msgstr "Boşta Kalma Zaman Aşımı"
+
+#: usr/local/www/interfaces_ppps_edit.php:701
+msgid "(seconds) Default is 0, which disables the timeout feature."
+msgstr ""
+"(Saniye) cinsindendir. Varsayılan değer olan 0 zaman aşımı süresini devre "
+"dışı bırakır."
+
+#: usr/local/www/interfaces_ppps_edit.php:702
+msgid ""
+"If no incoming or outgoing packets are transmitted for the entered number of "
+"seconds the connection is brought down."
+msgstr ""
+"Girilen süre boyunca gelen yada giden paket trafiği oluşmazsa bağlantı "
+"kapatılır."
+
+#: usr/local/www/interfaces_ppps_edit.php:703
+msgid ""
+"When the idle timeout occurs, if the dial-on-demand option is enabled, mpd "
+"goes back into dial-on-demand mode. Otherwise, the interface is brought down "
+"and all associated routes removed."
+msgstr ""
+"Boşta kalma zamanı dolduğunda, eğer gerektiğinde arama özelliği açıksa mpd "
+"gerektiğinde arama kipine döner. Aksi taktirde bağlantı kapatılır ve "
+"ilişkili tüm rotalar kaldırılır."
+
+#: usr/local/www/interfaces_ppps_edit.php:707
+#: usr/local/www/vpn_openvpn_client.php:956
+#: usr/local/www/vpn_openvpn_server.php:1349
+msgid "Compression"
+msgstr "Sıkıştırma"
+
+#: usr/local/www/interfaces_ppps_edit.php:709
+msgid "Disable vjcomp(compression) (auto-negotiated by default)."
+msgstr ""
+"vjcomp'u (sıkıştırma) devre dışı bırak. Varsayılan olarak karşı taraftan "
+"gelen değere göre davranılır."
+
+#: usr/local/www/interfaces_ppps_edit.php:710
+msgid ""
+"This option enables Van Jacobson TCP header compression, which saves several "
+"bytes per TCP data packet. You almost always want this option. This "
+"compression ineffective for TCP connections with enabled modern extensions "
+"like time stamping or SACK, which modify TCP options between sequential "
+"packets."
+msgstr ""
+"Bu seçenek Van Jacobson TCP başlık sıkıştırmasını açar, bu da her TCP veri "
+"paketinde birkaç bayt kazandırır. Bu seçenek neredeyse her zaman açık "
+"olmalıdır. Ardışık paketlerde TCP seçeneklerini değiştiren zaman damgası ve "
+"SACK gibi modern eklentileri açık TCP bağlantılarında etkisizdir."
+
+#: usr/local/www/interfaces_ppps_edit.php:716
+msgid "TCPmssFix"
+msgstr "TCPmssFix"
+
+#: usr/local/www/interfaces_ppps_edit.php:718
+msgid "Disable tcpmssfix (enabled by default)."
+msgstr "tcpmssfix'i kapat (varsayılan olarak etkin)."
+
+#: usr/local/www/interfaces_ppps_edit.php:719
+msgid ""
+"This option causes mpd to adjust incoming and outgoing TCP SYN segments so "
+"that the requested maximum segment size is not greater than the amount "
+"allowed by the interface MTU. This is necessary in many setups to avoid "
+"problems caused by routers that drop ICMP Datagram Too Big messages. Without "
+"these messages, the originating machine sends data, it passes the rogue "
+"router then hits a machine that has an MTU that is not big enough for the "
+"data. Because the IP Don't Fragment option is set, this machine sends an "
+"ICMP Datagram Too Big message back to the originator and drops the packet. "
+"The rogue router drops the ICMP message and the originator never gets to "
+"discover that it must reduce the fragment size or drop the IP Don't Fragment "
+"option from its outgoing data."
+msgstr ""
+"Bu seçenek mpd'nin gelen ve giden TCP SYN paketlerini istenen en yüksek "
+"paket boyutunun arabirim MTU'sunun izin verdiğinden büyük olmamasını "
+"sağlayacak şekilde değiştirmesini sağlar. Bu ayar, \"ICMP Datagram Çok Büyük"
+"\" mesajlarını silen yönlendiricilerin (router) neden olduğu problemleri "
+"engellemek için gereklidir. Bu mesajlar olmadığında, paketin çıktığı makine "
+"veriyi gönderir, paket yönlendiriciden gelen ve MTU'su veri için yeterince "
+"yüksek olmayan makineye ulaşır, IP Bölmeme (IP Don't Fragment) seçeneği açık "
+"olduğu için de makine geriye ICMP Datagram Çok Büyük yanıtıyla paketi siler. "
+"Yönlendirici ise bu ICMP mesajını sildiğinden ilk paketi gönderen makine "
+"parça boyutunu küçültmesi ya da IP Bölmeme seçeneğini kaldırması gerektiğini "
+"öğrenemez."
+
+#: usr/local/www/interfaces_ppps_edit.php:727
+msgid "ShortSeq"
+msgstr "ShortSeq"
+
+#: usr/local/www/interfaces_ppps_edit.php:729
+msgid "Disable shortseq (auto-negotiated by default)."
+msgstr ""
+"shortseq'i kapat (varsayılan olarak karşı tarafla anlaşarak belirlenir)."
+
+#: usr/local/www/interfaces_ppps_edit.php:730
+msgid ""
+"This option is only meaningful if multi-link PPP is negotiated. It "
+"proscribes shorter multi-link fragment headers, saving two bytes on every "
+"frame. It is not necessary to disable this for connections that are not "
+"multi-link."
+msgstr ""
+"Bu seçenek sadece çoklu PPP bağlantısı açıksa anlamlıdır. Daha kısa çoklu "
+"bağlantı parça başlıkları oluşturarak her çerçevede 2 bayt kazanır. Bağlantı "
+"çoklu türde değilse kapatmaya gerek yoktur."
+
+#: usr/local/www/interfaces_ppps_edit.php:735
+msgid "ACFComp"
+msgstr "ACFComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:737
+msgid "Disable acfcomp (compression) (auto-negotiated by default)."
+msgstr ""
+"ACFComp'u (sıkıştırma) kapat (varsayılan olarak eşle anlaşılarak atanır)."
+
+#: usr/local/www/interfaces_ppps_edit.php:738
+msgid ""
+"Address and control field compression. This option only applies to "
+"asynchronous link types. It saves two bytes per frame."
+msgstr ""
+"Adres ve kontrol alanı sıkıştırması. Bu seçenek sadece asenkron bağlantı "
+"türlerinde geçerlidir. Çerçeve başına 2 bayt kazanır."
+
+#: usr/local/www/interfaces_ppps_edit.php:742
+msgid "ProtoComp"
+msgstr "ProtoComp"
+
+#: usr/local/www/interfaces_ppps_edit.php:744
+msgid "Disable protocomp (compression) (auto-negotiated by default)."
+msgstr ""
+"ProtoComp'u (sıkıştırma) kapat (varsayılan olarak eşle anlaşılarak atanır)."
+
+#: usr/local/www/interfaces_ppps_edit.php:745
+msgid ""
+"Protocol field compression. This option saves one byte per frame for most "
+"frames."
+msgstr "Protokol alanı sıkıştırması. Bu seçenek çoğu çerçevede 1 bayt kazanır."
+
+#: usr/local/www/interfaces_ppps_edit.php:758
+msgid "Link Parameters"
+msgstr "Bağlantı Paremetreleri"
+
+#: usr/local/www/interfaces_ppps_edit.php:765
+msgid ""
+"Set ONLY for MLPPP connections and ONLY when links have different bandwidths."
+msgstr ""
+"Sadece MLPPP bağlantılarında ve sadece farklı bant genişliğine sahip hatlar "
+"var ise kullanınız."
+
+#: usr/local/www/interfaces_ppps_edit.php:772
+msgid "MTU will default to 1492."
+msgstr "MTU varsayılan değeri 1492 olarak atanacak."
+
+#: usr/local/www/interfaces_ppps_edit.php:776
+msgid "MRU"
+msgstr "MRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:779
+#: usr/local/www/interfaces_ppps_edit.php:786
+msgid "will be auto-negotiated by default."
+msgstr "varsayılan olarak karşı tarafla anlaşılarak atanır."
+
+#: usr/local/www/interfaces_ppps_edit.php:783
+msgid "MRRU"
+msgstr "MRRU"
+
+#: usr/local/www/interfaces_ppps_edit.php:786
+msgid "Set ONLY for MLPPP connections."
+msgstr "Sadece MLPPP bağlantıları için açın."
+
+#: usr/local/www/interfaces_qinq.php:67
+msgid ""
+"This QinQ cannot be deleted because it is still being used as an interface."
+msgstr "Bir arabirim olarak kullanıldığından bu QinQ silinemiyor."
+
+#: usr/local/www/interfaces_qinq.php:69
+msgid "QinQ interface does not exist"
+msgstr "QinQ arabirimi mevcut deÄŸil"
+
+#: usr/local/www/interfaces_qinq.php:90
+#: usr/local/www/interfaces_qinq_edit.php:40
+msgid "QinQ"
+msgstr "QinQ"
+
+#: usr/local/www/interfaces_qinq.php:122
+#: usr/local/www/interfaces_qinq_edit.php:362
+msgid "Tag"
+msgstr "Başlık"
+
+#: usr/local/www/interfaces_qinq.php:123
+msgid "QinQ members"
+msgstr "QinQ üyeleri"
+
+#: usr/local/www/interfaces_qinq.php:147
+msgid "Do you really want to delete this QinQ?"
+msgstr "Bu QinQ'i silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/interfaces_qinq.php:158
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do "
+"not explicitly support it, QinQ tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr ""
+"Tüm sürücüler ve NICler 802.1q QinQ başlıklarını desteklemez. Özel olarak "
+"desteklediği belirtilmeyen kartlarda QinQ yine de çalışır, ama düşen MTU "
+"değeri problem çıkarabilir. Desteklenen kartlar için %s El Kitabına bakın."
+
+#: usr/local/www/interfaces_qinq_edit.php:87
+msgid "First level tag cannot be empty."
+msgstr "Birinci seviye başlığı boş olamaz."
+
+#: usr/local/www/interfaces_qinq_edit.php:89
+msgid ""
+"You are editing an existing entry and modifying the first level tag is not "
+"allowed."
+msgstr ""
+"Varolan bir girdiyi düzenliyorsunuz ve ilk seviye başlığın düzenlenmesine "
+"izin verilmemektedir."
+
+#: usr/local/www/interfaces_qinq_edit.php:91
+msgid ""
+"You are editing an existing entry and modifying the interface is not allowed."
+msgstr ""
+"Varolan bir girdiyi düzenliyorsunuz ve arabirimi değiştirmeye izin verilmez."
+
+#: usr/local/www/interfaces_qinq_edit.php:95
+msgid "QinQ level already exists for this interface, edit it!"
+msgstr "QinQ seviyesi bu arabirim için zaten tanımlı, düzenleyiniz!"
+
+#: usr/local/www/interfaces_qinq_edit.php:99
+msgid ""
+"A normal VLAN exists with this tag please remove it to use this tag for QinQ "
+"first level."
+msgstr ""
+"Bu başlığı taşıyan normal bir VLAN zaten var, bu başlığı QinQ ilk seviye "
+"olarak kullanmak için onu silmelisiniz."
+
+#: usr/local/www/interfaces_qinq_edit.php:126
+#: usr/local/www/interfaces_qinq_edit.php:136
+msgid "Tags can contain only numbers or a range in format #-#."
+msgstr "Başlıklar sadece sayı ve #-# biçiminde aralık içerebilir."
+
+#: usr/local/www/interfaces_qinq_edit.php:199
+msgid "QinQ VLANs group"
+msgstr "QinQ VLANlar grubu"
+
+#: usr/local/www/interfaces_qinq_edit.php:274
+msgid "members"
+msgstr "üyeler"
+
+#: usr/local/www/interfaces_qinq_edit.php:278
+msgid "detail"
+msgstr "detay"
+
+#: usr/local/www/interfaces_qinq_edit.php:291
+msgid "Interface QinQ Edit"
+msgstr "Arabirim QinQ'ini düzenle"
+
+#: usr/local/www/interfaces_qinq_edit.php:311
+msgid "Only QinQ capable interfaces will be shown."
+msgstr "Sadece QinQ uyumlu arabirimler görüntüleniyor."
+
+#: usr/local/www/interfaces_qinq_edit.php:314
+msgid "First level tag"
+msgstr "İlk seviye başlığı"
+
+#: usr/local/www/interfaces_qinq_edit.php:319
+msgid ""
+"This is the first level VLAN tag. On top of this are stacked the member "
+"VLANs defined below."
+msgstr ""
+"İlk seviye VLAN başlığıdır. Bunun üzerine aşağıda tanımlanan üye VLAN "
+"iliÅŸtirilir."
+
+#: usr/local/www/interfaces_qinq_edit.php:324
+#: usr/local/www/load_balancer_relay_action.php:141
+#: usr/local/www/load_balancer_relay_action_edit.php:516
+#: usr/local/www/load_balancer_relay_action_edit.php:536
+#: usr/local/www/load_balancer_relay_protocol.php:135
+msgid "Options"
+msgstr "Seçenekler"
+
+#: usr/local/www/interfaces_qinq_edit.php:339
+msgid ""
+"Adds interface to QinQ interface groups so you can write filter rules easily."
+msgstr ""
+"Arabirimi QinQ arabirim grubuna ekleyerek filtreleme kuralı yazmayı "
+"kolaylaştırır."
+
+#: usr/local/www/interfaces_qinq_edit.php:356
+msgid ""
+"You can specify ranges in the input below. The format is pretty simple i.e "
+"9-100 or 10.20..."
+msgstr ""
+"Aşağıdaki giriş alanında aralık belirtebilirsiniz. Yapısı basittir, 9-100 "
+"veya 10.20... biçiminde yazabilirsiniz."
+
+#: usr/local/www/interfaces_vlan.php:70
+msgid ""
+"This VLAN cannot be deleted because it is still being used as an interface."
+msgstr "Bu VLAN bir arabirim olarak kullanıldığından silinemez."
+
+#: usr/local/www/interfaces_vlan.php:84
+#: usr/local/www/interfaces_vlan_edit.php:152
+msgid "VLAN"
+msgstr "VLAN"
+
+#: usr/local/www/interfaces_vlan.php:116
+#: usr/local/www/interfaces_vlan_edit.php:79
+msgid "VLAN tag"
+msgstr "VLAN başlığı"
+
+#: usr/local/www/interfaces_vlan.php:132
+msgid "Do you really want to delete this VLAN?"
+msgstr "Bu VLANı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/interfaces_vlan.php:143
+#, php-format
+msgid ""
+"Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do "
+"not explicitly support it, VLAN tagging will still work, but the reduced MTU "
+"may cause problems. See the %s handbook for information on supported cards."
+msgstr ""
+"Tüm sürücüler ve NICler 802.1q VLAN başlıklarını desteklemez. Özel olarak "
+"desteklediği belirtilmeyen kartlarda VLAN başlıklama yine de çalışır, ama "
+"düşen MTU değeri problem çıkarabilir. Desteklenen kartlar için %s El "
+"Kitabına bakın."
+
+#: usr/local/www/interfaces_vlan_edit.php:84
+msgid "The VLAN tag must be an integer between 1 and 4094."
+msgstr "VLAN başlığı ile 4094 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/interfaces_vlan_edit.php:88
+msgid "Interface supplied as parent is invalid"
+msgstr "Arabirime verilen aile(üst-parent) geçersiz"
+
+#: usr/local/www/interfaces_vlan_edit.php:93
+msgid ""
+"Interface is assigned and you cannot change the VLAN tag while assigned."
+msgstr ""
+
+#: usr/local/www/interfaces_vlan_edit.php:101
+#, php-format
+msgid "A VLAN with the tag %s is already defined on this interface."
+msgstr "%s başlığa sahip VLAN bu arabirimde tanımlanmış durumda."
+
+#: usr/local/www/interfaces_vlan_edit.php:108
+msgid "A QinQ VLAN exists with this tag please remove it to use this tag with."
+msgstr ""
+"Bu başlığa sahip bir QinQ VLAN zaten var, lütfen bu takıyı kullanmak için "
+"önce onu silin."
+
+#: usr/local/www/interfaces_vlan_edit.php:164
+msgid "VLAN configuration"
+msgstr "VLAN yapılandırması"
+
+#: usr/local/www/interfaces_vlan_edit.php:183
+msgid "Only VLAN capable interfaces will be shown."
+msgstr "Sadece VLAN uyumlu arabirimler görüntülenir."
+
+#: usr/local/www/interfaces_vlan_edit.php:186
+msgid "VLAN tag "
+msgstr "VLAN başlığı "
+
+#: usr/local/www/interfaces_vlan_edit.php:190
+msgid "802.1Q VLAN tag (between 1 and 4094) "
+msgstr "802.1q VLAN başlığı (1 ile 4094 arasında) "
+
+#: usr/local/www/interfaces_wireless.php:66
+msgid ""
+"This wireless clone cannot be deleted because it is assigned as an interface."
+msgstr "Bu kablosuz klonu bir arabirim olarak atandığından silinemez."
+
+#: usr/local/www/interfaces_wireless.php:128
+msgid "Do you really want to delete this wireless clone?"
+msgstr "Bu kablosuz klonunu silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/interfaces_wireless.php:139
+msgid ""
+"Here you can configure clones of wireless interfaces, which can be assigned "
+"as separate independent interfaces. Only available on wireless chipsets that "
+"support this, with limitations on the number that can be created in each "
+"mode."
+msgstr ""
+"Bu alandan kablosuz arabirimlerin bağımsız arabirim olarak atanacak "
+"klonlarını yapılandırabilirsiniz. Sadece bu özelliği destekleyen "
+"arabirimlerde, her kipte oluşturulabilecek klon sayısı sınırlı olmak "
+"kaydıyla, çalışır."
+
+#: usr/local/www/interfaces_wireless_edit.php:122
+msgid ""
+"This wireless clone cannot be modified because it is still assigned as an "
+"interface."
+msgstr "Bir arabirim olarak kullanıldığından bu kablosuz klonu değiştirilemez."
+
+#: usr/local/www/interfaces_wireless_edit.php:124
+msgid ""
+"Use the configuration page for the assigned interface to change the mode."
+msgstr ""
+"Kipi değiştirmek için atanmış arabirimin yapılandırma sayfasını kullanınız."
+
+#: usr/local/www/interfaces_wireless_edit.php:129
+#, php-format
+msgid ""
+"Error creating interface with mode %1$s. The %2$s interface may not support "
+"creating more clones with the selected mode."
+msgstr ""
+"%1$s kipinde arabirim oluşturulurken hata oluştu. %2$s arabirimi seçili "
+"kipte daha fazla klon oluşturulmasını desteklemiyor olabilir."
+
+#: usr/local/www/interfaces_wireless_edit.php:134
+#, php-format
+msgid "Created with id %s"
+msgstr "%s kimliÄŸi ile oluÅŸturuldu"
+
+#: usr/local/www/interfaces_wireless_edit.php:137
+msgid "Created without id"
+msgstr "Kimlik olmadan oluÅŸturuldu"
+
+#: usr/local/www/interfaces_wireless_edit.php:162
+msgid "Wireless clone configuration"
+msgstr "Kablosuz klonu yapılandırması"
+
+#: usr/local/www/license.php:47
+msgid "License"
+msgstr "Lisans"
+
+#: usr/local/www/license.php:49
+msgid "is Copyright"
+msgstr "Telif hakkı"
+
+#: usr/local/www/license.php:50 usr/local/www/license.php:54
+msgid "All rights reserved"
+msgstr "Tüm hakları saklıdır"
+
+#: usr/local/www/license.php:52
+msgid "m0n0wall is Copyright "
+msgstr "m0n0wall telif hakkı "
+
+#: usr/local/www/license.php:52
+msgid "2002-2014 by Manuel Kasper"
+msgstr ""
+
+#: usr/local/www/license.php:55
+msgid "Redistribution and use in source and binary forms, with or without"
+msgstr ""
+"Kaynak ve ikili dosya forumlarını değişiklik, yeniden dağıtımı, kullanımı, "
+
+#: usr/local/www/license.php:56
+msgid ""
+"modification, are permitted provided that the following conditions are met"
+msgstr ""
+"düzenlemesi sadece aşağıdaki koşulların yerine getirilmesi şartı ile izin "
+"verilir"
+
+#: usr/local/www/license.php:59
+msgid ""
+"1. Redistributions of source code must retain the above copyright notice,"
+msgstr ""
+"1. Redistributions of source code must retain the above copyright notice,"
+
+#: usr/local/www/license.php:61
+msgid "this list of conditions and the following disclaimer"
+msgstr "this list of conditions and the following disclaimer"
+
+#: usr/local/www/license.php:63
+msgid "2. Redistributions in binary form must reproduce the above copyright"
+msgstr "2. Redistributions in binary form must reproduce the above copyright"
+
+#: usr/local/www/license.php:64
+msgid "notice, this list of conditions and the following disclaimer in the"
+msgstr "notice, this list of conditions and the following disclaimer in the"
+
+#: usr/local/www/license.php:66
+msgid "documentation and/or other materials provided with the distribution."
+msgstr "documentation and/or other materials provided with the distribution."
+
+#: usr/local/www/license.php:68
+msgid "THIS SOFTWARE IS PROVIDED "
+msgstr "THIS SOFTWARE IS PROVIDED "
+
+#: usr/local/www/license.php:68
+msgid "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,"
+msgstr "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,"
+
+#: usr/local/www/license.php:70
+msgid ""
+"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY"
+msgstr ""
+"INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY"
+
+#: usr/local/www/license.php:71
+msgid ""
+"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE"
+msgstr ""
+"AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE"
+
+#: usr/local/www/license.php:73
+msgid ""
+"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"
+msgstr ""
+"AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"
+
+#: usr/local/www/license.php:75
+msgid "OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF"
+msgstr ""
+"OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF"
+
+#: usr/local/www/license.php:77
+msgid ""
+"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"
+msgstr ""
+"SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"
+
+#: usr/local/www/license.php:79
+msgid "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN"
+msgstr ""
+"INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN"
+
+#: usr/local/www/license.php:81
+msgid "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"
+msgstr ""
+"CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"
+
+#: usr/local/www/license.php:82
+msgid ""
+"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE"
+msgstr ""
+"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE"
+
+#: usr/local/www/license.php:84
+msgid "POSSIBILITY OF SUCH DAMAGE"
+msgstr "POSSIBILITY OF SUCH DAMAGE"
+
+#: usr/local/www/license.php:86
+msgid "is based upon/includes various free software packages, listed below."
+msgstr ""
+"temel içerik/üzerine çeşitli ücretsiz yazılım paketleri, aşağıda "
+"listelenmiÅŸtir."
+
+#: usr/local/www/license.php:88
+#, php-format
+msgid ""
+"The authors of %s would like to thank the authors of these software packages "
+"for their efforts"
+msgstr ""
+
+#: usr/local/www/license.php:91 usr/local/www/license.php:94
+#: usr/local/www/license.php:97 usr/local/www/license.php:101
+#: usr/local/www/license.php:102 usr/local/www/license.php:107
+#: usr/local/www/license.php:111 usr/local/www/license.php:114
+#: usr/local/www/license.php:117 usr/local/www/license.php:120
+#: usr/local/www/license.php:124 usr/local/www/license.php:125
+#: usr/local/www/license.php:127 usr/local/www/license.php:133
+#: usr/local/www/license.php:134 usr/local/www/license.php:141
+msgid "Copyright"
+msgstr "Telif hakkı"
+
+#: usr/local/www/license.php:91
+msgid "1992-2014 The FreeBSD Project. All rights reserved"
+msgstr ""
+
+#: usr/local/www/license.php:93
+msgid "This product includes PHP, freely available from"
+msgstr "Bu ürün PHP içerir, ücretsiz olarak"
+
+#: usr/local/www/license.php:94
+msgid "1999-2014 The PHP Group. All rights reserved."
+msgstr ""
+
+#: usr/local/www/license.php:96
+msgid "LightTPD"
+msgstr "LightTPD"
+
+#: usr/local/www/license.php:97
+msgid "2004, Jan Knescke, incremental"
+msgstr "2004, Jan Knescke, incremental"
+
+#: usr/local/www/license.php:98 usr/local/www/license.php:108
+msgid "All rights reserved."
+msgstr "Her hakkı saklıdır."
+
+#: usr/local/www/license.php:100
+msgid "ISC DHCP server "
+msgstr "ISC DHCP sunucu "
+
+#: usr/local/www/license.php:101
+msgid "2004-2012 Internet Software Consortium, Inc."
+msgstr "2004-2012 Internet Software Consortium, Inc."
+
+#: usr/local/www/license.php:102
+msgid "1995-2003 Internet Software Consortium"
+msgstr "1995-2003 Internet Software Consortium"
+
+#: usr/local/www/license.php:104 usr/local/www/services_snmp.php:397
+msgid "PF"
+msgstr "PF"
+
+#: usr/local/www/license.php:106
+msgid "MPD - Multi-link PPP daemon for FreeBSD"
+msgstr "MPD - FreeBSD çoklu bağlantı PPP servisi"
+
+#: usr/local/www/license.php:110
+msgid "Circular log support for FreeBSD syslogd "
+msgstr "FreeBSD syslogd dairesel günlük desteği "
+
+#: usr/local/www/license.php:113
+msgid "Dnsmasq - a DNS forwarder for NAT firewalls"
+msgstr "Dnsmasq - NAT güvenlik duvarları için DNS yönlendirici"
+
+#: usr/local/www/license.php:116
+msgid "IPsec-Tools"
+msgstr ""
+
+#: usr/local/www/license.php:117
+msgid "1995-2002 WIDE Project. All rights reserved."
+msgstr "1995-2002 WIDE Project. Her hakkı saklıdır."
+
+#: usr/local/www/license.php:119
+msgid "msntp"
+msgstr "msntp"
+
+#: usr/local/www/license.php:120
+msgid ""
+" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. All rights "
+"reserved."
+msgstr ""
+" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. Her hakkı saklıdır."
+
+#: usr/local/www/license.php:123
+msgid "UCD-SNMP"
+msgstr "UCD-SNMP"
+
+#: usr/local/www/license.php:124
+msgid "1989, 1991, 1992 by Carnegie Mellon University."
+msgstr "1989, 1991, 1992 Carnegie Mellon University."
+
+#: usr/local/www/license.php:125
+msgid ""
+"1996, 1998-2000 The Regents of the University of California. All rights "
+"reserved"
+msgstr ""
+"1996, 1998-2000 University of California İdare Meclisi. Her hakkı saklıdır"
+
+#: usr/local/www/license.php:127
+msgid "2001-2002, Network Associates Technology, Inc. All rights reserved."
+msgstr "2001-2002, Network Associates Technology, Inc. Her hakkı saklıdır."
+
+#: usr/local/www/license.php:129
+msgid "Portions of this code are copyright"
+msgstr "Kodun bir kısmının hakları"
+
+#: usr/local/www/license.php:129
+msgid "2001-2002, Cambridge Broadband Ltd. All rights reserved."
+msgstr "2001-2002, Cambridge Broadband Ltd. Her hakkı saklıdır."
+
+#: usr/local/www/license.php:132
+msgid "choparp"
+msgstr "choparp"
+
+#: usr/local/www/license.php:136
+msgid "php-radius"
+msgstr "php-radius"
+
+#: usr/local/www/license.php:137
+msgid "Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved."
+msgstr "Telif hakkı 2000, 2001, 2002 Edwin Groothuis. Her hakkı saklıdır."
+
+#: usr/local/www/license.php:138
+msgid "This product includes software developed by Edwin Groothuis."
+msgstr "Bu ürün Edwin Groothuis tarafından geliştirilmiş yazılım içerir."
+
+#: usr/local/www/license.php:140
+msgid "wol"
+msgstr "wol"
+
+#: usr/local/www/license.php:144
+msgid "Copyright (C) 2002-2005 OpenVPN Solutions LLC "
+msgstr "Copyright (C) 2002-2005 OpenVPN Solutions LLC "
+
+#: usr/local/www/load_balancer_monitor.php:73
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"pool."
+msgstr "Bu girdi halen en az bir havuz tarafından kullanıldığı için silinemez."
+
+#: usr/local/www/load_balancer_monitor.php:89
+#: usr/local/www/load_balancer_monitor_edit.php:196
+#: usr/local/www/load_balancer_pool.php:135
+#: usr/local/www/load_balancer_pool_edit.php:81
+#: usr/local/www/load_balancer_pool_edit.php:252
+#: usr/local/www/status_gateways.php:76 usr/local/www/status_lb_pool.php:134
+msgid "Monitor"
+msgstr "Ä°zle"
+
+#: usr/local/www/load_balancer_monitor.php:101
+#: usr/local/www/load_balancer_relay_protocol.php:113
+#: usr/local/www/load_balancer_setting.php:112
+msgid "The load balancer configuration has been changed"
+msgstr "Yük Dengeleyici yapılandırması değiştirildi"
+
+#: usr/local/www/load_balancer_monitor.php:108
+#: usr/local/www/load_balancer_pool.php:117
+#: usr/local/www/load_balancer_relay_action.php:125
+#: usr/local/www/load_balancer_relay_protocol.php:121
+#: usr/local/www/load_balancer_setting.php:120
+#: usr/local/www/load_balancer_virtual_server.php:118
+#: usr/local/www/status_lb_pool.php:121 usr/local/www/status_lb_vs.php:68
+msgid "Pools"
+msgstr "Havuzlar"
+
+#: usr/local/www/load_balancer_monitor.php:109
+#: usr/local/www/load_balancer_pool.php:118
+#: usr/local/www/load_balancer_relay_action.php:126
+#: usr/local/www/load_balancer_relay_protocol.php:122
+#: usr/local/www/load_balancer_setting.php:121
+#: usr/local/www/load_balancer_virtual_server.php:99
+#: usr/local/www/load_balancer_virtual_server.php:119
+#: usr/local/www/status_lb_pool.php:122 usr/local/www/status_lb_vs.php:69
+msgid "Virtual Servers"
+msgstr "Sanal Sunucular"
+
+#: usr/local/www/load_balancer_monitor.php:110
+#: usr/local/www/load_balancer_pool.php:119
+#: usr/local/www/load_balancer_relay_action.php:124
+#: usr/local/www/load_balancer_relay_protocol.php:120
+#: usr/local/www/load_balancer_setting.php:122
+#: usr/local/www/load_balancer_virtual_server.php:120
+msgid "Monitors"
+msgstr "Ä°zlemeler"
+
+#: usr/local/www/load_balancer_monitor_edit.php:69
+msgid "Load Balancer: Monitor:"
+msgstr "Yük Dengeleyici: İzle:"
+
+#: usr/local/www/load_balancer_monitor_edit.php:98
+msgid "This monitor name has already been used. Monitor names must be unique."
+msgstr "Bu izleme adı zaten kullanımda. İzleme adları benzersiz olmalıdır."
+
+#: usr/local/www/load_balancer_monitor_edit.php:101
+#: usr/local/www/load_balancer_pool_edit.php:91
+#: usr/local/www/load_balancer_relay_action_edit.php:131
+#: usr/local/www/load_balancer_relay_protocol_edit.php:92
+msgid "You cannot use spaces in the 'name' field."
+msgstr "'İsim' alanında boşluk kullanamazsınız."
+
+#: usr/local/www/load_balancer_monitor_edit.php:115
+#: usr/local/www/services_dhcp_edit.php:172
+#: usr/local/www/services_dhcpv6_edit.php:124
+msgid "The hostname can only contain the characters A-Z, 0-9 and '-'."
+msgstr ""
+"Host adı İngilizce A-Z,0-9 ve '-' karakterleri dışında bir karakter içeremez."
+
+#: usr/local/www/load_balancer_monitor_edit.php:121
+msgid "HTTP(s) codes must be from RFC2616."
+msgstr "HTTP(s) kodları RFC2616'ya uygun olmalıdır."
+
+#: usr/local/www/load_balancer_monitor_edit.php:125
+msgid "The path to monitor must be set."
+msgstr "İzleme yolu tanımlanmalıdır."
+
+#: usr/local/www/load_balancer_monitor_edit.php:148
+#, php-format
+msgid "modified '%s' monitor:"
+msgstr "'%s' izlemesi deÄŸiÅŸtirildi:"
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+msgid "ICMP"
+msgstr "ICMP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:270
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+#: usr/local/www/system_advanced_admin.php:344
+msgid "HTTP"
+msgstr "HTTP"
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:303
+#: usr/local/www/system_advanced_admin.php:347
+msgid "HTTPS"
+msgstr "HTTPS"
+
+#: usr/local/www/load_balancer_monitor_edit.php:200
+#: usr/local/www/load_balancer_monitor_edit.php:337
+msgid "Send/Expect"
+msgstr "Gönder/Bekle"
+
+#: usr/local/www/load_balancer_monitor_edit.php:234
+msgid "Edit Load Balancer - Monitor entry"
+msgstr "Yük Dengeleme Düzenle - Girdiyi izle"
+
+#: usr/local/www/load_balancer_monitor_edit.php:274
+#: usr/local/www/load_balancer_monitor_edit.php:307
+msgid "Path"
+msgstr "Yol"
+
+#: usr/local/www/load_balancer_monitor_edit.php:282
+#: usr/local/www/load_balancer_monitor_edit.php:315
+msgid "Hostname for Host: header if needed."
+msgstr "Gerekiyorsa &quot;Host:&quot; başlığı sunucu adı."
+
+#: usr/local/www/load_balancer_monitor_edit.php:286
+#: usr/local/www/load_balancer_monitor_edit.php:319
+msgid "HTTP Code"
+msgstr "HTTP Kodu"
+
+#: usr/local/www/load_balancer_monitor_edit.php:341
+msgid "Send string"
+msgstr "Dize gönder "
+
+#: usr/local/www/load_balancer_monitor_edit.php:347
+msgid "Expect string"
+msgstr "Beklenecek dize"
+
+#: usr/local/www/load_balancer_pool.php:73
+#: usr/local/www/load_balancer_relay_protocol.php:72
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"virtual server."
+msgstr "En az bir sanal sunucuda kullanıldığından bu girdi silinemez."
+
+#: usr/local/www/load_balancer_pool.php:98
+#: usr/local/www/load_balancer_pool_edit.php:170
+#: usr/local/www/load_balancer_virtual_server.php:136
+#: usr/local/www/status_lb_pool.php:63
+msgid "Pool"
+msgstr "Havuz"
+
+#: usr/local/www/load_balancer_pool.php:110
+#: usr/local/www/status_lb_pool.php:114
+#, php-format
+msgid ""
+"The load balancer configuration has been changed%sYou must apply the changes "
+"in order for them to take effect."
+msgstr ""
+"Yük Dengeleme yapılandırması değiştirilmiştir%sDeğişiklikleri uygulayarak "
+"etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#: usr/local/www/load_balancer_pool.php:133
+#: usr/local/www/status_lb_pool.php:133 usr/local/www/status_lb_vs.php:80
+#: usr/local/www/system_authservers.php:451
+#: usr/local/www/system_groupmanager.php:291
+#: usr/local/www/system_groupmanager_addprivs.php:171
+#: usr/local/www/system_usermanager.php:497
+#: usr/local/www/system_usermanager_addprivs.php:160
+#: usr/local/www/system_usermanager_settings.php:117
+msgid "Servers"
+msgstr "Sunucular"
+
+#: usr/local/www/load_balancer_pool.php:149
+#, php-format
+msgid ""
+"The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For "
+"load balancing or failover for multiple WANs, use "
+msgstr ""
+"Bu Yük Dengeleyici %s 2.0 sunucu yük dengeleyicisi için, birden fazla WAN "
+"için değil. Eğer yükaktarma için birden fazla WAN kullanımında Yük "
+"Dengeleyici olarak kullanmak istiyorsanız sağdaki link'e tıklayınız "
+
+#: usr/local/www/load_balancer_pool.php:150
+#: usr/local/www/status_gateway_groups.php:49
+#: usr/local/www/status_gateway_groups.php:53
+#: usr/local/www/status_gateway_groups.php:67
+#: usr/local/www/status_gateways.php:65
+#: usr/local/www/system_gateway_groups.php:54
+#: usr/local/www/system_gateway_groups.php:99
+msgid "Gateway Groups"
+msgstr "Ağ Geçidi Grupları"
+
+#: usr/local/www/load_balancer_pool_edit.php:70
+msgid "Load Balancer: Pool:"
+msgstr "Yük Dengeleyici: Havuz:"
+
+#: usr/local/www/load_balancer_pool_edit.php:81
+msgid "Server List"
+msgstr "Sunucu Listesi"
+
+#: usr/local/www/load_balancer_pool_edit.php:88
+msgid "This pool name has already been used. Pool names must be unique."
+msgstr "Havuz adı zaten kullanılıyor. Havuz adları benzersiz olmalıdır."
+
+#: usr/local/www/load_balancer_pool_edit.php:94
+#, php-format
+msgid "The name '%s' is a reserved word and cannot be used."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:97
+#, php-format
+msgid "Sorry, an alias is already named %s."
+msgstr ""
+
+#: usr/local/www/load_balancer_pool_edit.php:100
+msgid "The port must be an integer between 1 and 65535, or a port alias."
+msgstr ""
+"Port 1 ile 65535 arasında bir tamsayı yada grup (alias) portu olmalıdır."
+
+#: usr/local/www/load_balancer_pool_edit.php:104
+msgid "The retry value must be an integer between 1 and 65535."
+msgstr "Tekrar deneme değeri 1 ile 65535 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/load_balancer_pool_edit.php:109
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."
+msgstr ""
+"%s geçerli bir IP adresi yada IPv4 altağ değil (\"etkin\" listesi içinde)."
+
+#: usr/local/www/load_balancer_pool_edit.php:112
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."
+msgstr ""
+"%s altağı 64 ten daha fazla IP adresleri içeriyor (\"etkin\" listesi içinde)."
+
+#: usr/local/www/load_balancer_pool_edit.php:119
+#, php-format
+msgid "%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."
+msgstr ""
+"%s geçerli bir IP adresi yada IPv4 altağ değil (\"kapalı\" listesi içinde)."
+
+#: usr/local/www/load_balancer_pool_edit.php:122
+#, php-format
+msgid ""
+"%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."
+msgstr ""
+"%s altağı 64 ten daha fazla IP adresleri içeriyor (\"kapalı\" listesi "
+"içinde)."
+
+#: usr/local/www/load_balancer_pool_edit.php:131
+msgid "Invalid monitor chosen."
+msgstr "Geçersiz izleme seçimi."
+
+#: usr/local/www/load_balancer_pool_edit.php:138
+#, php-format
+msgid " modified '%s' pool:"
+msgstr " '%s' havuzu deÄŸiÅŸtirildi:"
+
+#: usr/local/www/load_balancer_pool_edit.php:198
+msgid "Add/edit Load Balancer - Pool entry"
+msgstr "Yük Dengeleyici ekle/düzenle - Havuz girdisi"
+
+#: usr/local/www/load_balancer_pool_edit.php:210
+msgid "Load Balance"
+msgstr "Yük Dengeleme"
+
+#: usr/local/www/load_balancer_pool_edit.php:211
+msgid "Manual Failover"
+msgstr "Elle Yük Aktarma"
+
+#: usr/local/www/load_balancer_pool_edit.php:227
+msgid "This is the port your servers are listening on."
+msgstr "Sunucularınızın dinlediği port numarası."
+
+#: usr/local/www/load_balancer_pool_edit.php:228
+#: usr/local/www/load_balancer_virtual_server_edit.php:197
+msgid ""
+"You may also specify a port alias listed in Firewall -&gt; Aliases here."
+msgstr ""
+"Güvenlik Duvarı -&gt; Gruplar kısmında belirtilmiş listelenen port Grup ları "
+"belirtebilirsiniz."
+
+#: usr/local/www/load_balancer_pool_edit.php:239
+msgid "Retry"
+msgstr "Tekrar Dene"
+
+#: usr/local/www/load_balancer_pool_edit.php:242
+msgid ""
+"Optionally specify how many times to retry checking a server before "
+"declaring it down."
+msgstr ""
+"İsterseniz bir sunucuyu erişilemez kabul etmek için kaç deneme yapılması "
+"gerektiÄŸini belirtebilirsiniz."
+
+#: usr/local/www/load_balancer_pool_edit.php:249
+msgid "Add item to pool"
+msgstr "Havuza öğe ekle"
+
+#: usr/local/www/load_balancer_pool_edit.php:267
+msgid ""
+"Please add a monitor IP address on the monitors tab if you wish to use this "
+"feature."
+msgstr ""
+"Bu özelliği kullanmak istiyorsanız izlemeler sekmesinden bir izleme IPsi "
+"ekleyiniz."
+
+#: usr/local/www/load_balancer_pool_edit.php:273
+msgid "Server IP Address"
+msgstr "Sunucu IP Adresi"
+
+#: usr/local/www/load_balancer_pool_edit.php:276
+msgid "Add to pool"
+msgstr "Havuza ekle"
+
+#: usr/local/www/load_balancer_pool_edit.php:283
+msgid "Current Pool Members"
+msgstr "Güncel Havuz Üyeleri"
+
+#: usr/local/www/load_balancer_pool_edit.php:292
+msgid "Pool Disabled"
+msgstr "Havuz Devre Dışı"
+
+#: usr/local/www/load_balancer_pool_edit.php:312
+msgid "Enabled (default)"
+msgstr "Etkin (varsayılan)"
+
+#: usr/local/www/load_balancer_relay_action.php:75
+msgid ""
+"This entry cannot be deleted because it is still referenced by at least one "
+"relay protocol."
+msgstr ""
+"Bu girdi en az bir aktarım protokolü tarafından kullanıldığı için silinemez."
+
+#: usr/local/www/load_balancer_relay_action.php:105
+#: usr/local/www/load_balancer_relay_action_edit.php:184
+msgid "Relay Action"
+msgstr "Aktarma Eylemi"
+
+#: usr/local/www/load_balancer_relay_action.php:117
+msgid ""
+"The load balancer configuration has been changed.<br />You must apply the "
+"changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/load_balancer_relay_action.php:127
+msgid "Relay Actions"
+msgstr "Aktarma Eylemleri"
+
+#: usr/local/www/load_balancer_relay_action.php:128
+msgid "Relay Protocols"
+msgstr "Aktarma Protokolleri"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:69
+msgid "Load Balancer: Relay Action:"
+msgstr "Yük Dengeleyici: Aktarma Eylemi:"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:128
+msgid "This action name has already been used. Action names must be unique."
+msgstr "Bu eylem adı kullanılıyor. Eylem adları benzersiz olmalıdır."
+
+#: usr/local/www/load_balancer_relay_action_edit.php:138
+#, php-format
+msgid "modified '%s' action:"
+msgstr "'%s' deÄŸiÅŸtirilmiÅŸ eylemi:"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:188
+#: usr/local/www/load_balancer_relay_protocol_edit.php:145
+msgid "DNS"
+msgstr "DNS"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:409
+msgid "Edit Load Balancer - Relay Action entry"
+msgstr "Yük Dengeleyici Düzenle - Aktarma Eylemi girişi"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:507
+#: usr/local/www/services_dhcp.php:1158 usr/local/www/services_dhcpv6.php:790
+#: usr/local/www/system_advanced_sysctl.php:183
+#: usr/local/www/system_advanced_sysctl.php:261
+#: usr/local/www/system_certmanager.php:806
+msgid "Value"
+msgstr "DeÄŸer"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:509
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:180
+msgid "Key"
+msgstr "Anahtar"
+
+#: usr/local/www/load_balancer_relay_action_edit.php:518
+#: usr/local/www/load_balancer_relay_action_edit.php:538
+msgid "TODO"
+msgstr "YAPILACAK"
+
+#: usr/local/www/load_balancer_relay_protocol.php:101
+#: usr/local/www/load_balancer_relay_protocol_edit.php:140
+#: usr/local/www/load_balancer_virtual_server_edit.php:81
+#: usr/local/www/load_balancer_virtual_server_edit.php:260
+msgid "Relay Protocol"
+msgstr "Aktarım Protokolü"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:68
+msgid "Load Balancer: Relay Protocol:"
+msgstr "Yük Dengeleyici: Aktarım Protokolü:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:89
+msgid ""
+"This protocol name has already been used. Protocol names must be unique."
+msgstr "Protokol adı kullanımda. Protokol adları benzersiz olmalıdır."
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:108
+#, php-format
+msgid "modified '%s' load balancing protocol:"
+msgstr "değiştirilmiş '%s' yük dengeleme protokolü:"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:110
+msgid "name"
+msgstr "isim"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:111
+#: usr/local/www/load_balancer_relay_protocol_edit.php:113
+msgid "type"
+msgstr "tür"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:112
+msgid "description"
+msgstr "açıklama"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:114
+msgid "action"
+msgstr "eylem"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:193
+msgid "Edit Load Balancer - Relay Protocol entry"
+msgstr "Yük dengeleyiciyi düzenle - Aktarma Protokolü girişi"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:228
+msgid "Add / remove available actions"
+msgstr "Eylem ekle / kaldır"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:238
+msgid "Available Actions"
+msgstr "Kullanılabilir Eylemler"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:253
+#: usr/local/www/system_crlmanager.php:528
+msgid "Add"
+msgstr "Ekle"
+
+#: usr/local/www/load_balancer_relay_protocol_edit.php:260
+msgid "Enabled Actions"
+msgstr "EtkinleÅŸtirilmiÅŸ Eylemler"
+
+#: usr/local/www/load_balancer_setting.php:71
+msgid "Timeout must be a numeric value"
+msgstr "Zaman aşımı sayısal bir değer olmalıdır"
+
+#: usr/local/www/load_balancer_setting.php:75
+msgid "Interval must be a numeric value"
+msgstr "Aralık sayısal bir değer olmalıdır"
+
+#: usr/local/www/load_balancer_setting.php:80
+msgid "Prefork must be a numeric value"
+msgstr "Prefork sayısal bir değer olmalıdır"
+
+#: usr/local/www/load_balancer_setting.php:83
+msgid "Prefork value must be between 1 and 32"
+msgstr "Prefork değeri 1 ile 32 arasında olmalıdır"
+
+#: usr/local/www/load_balancer_setting.php:133
+msgid "Relayd global settings"
+msgstr "Aytarıcıd genel ayarları"
+
+#: usr/local/www/load_balancer_setting.php:136
+msgid "timeout"
+msgstr "zaman aşımı"
+
+#: usr/local/www/load_balancer_setting.php:140
+msgid ""
+"Set the global timeout in milliseconds for checks. Leave blank to use the "
+"default value of 1000 ms "
+msgstr ""
+"Genel zaman aşımı kontrollerini milisaniye olarak ayarlayın. Boş bırakarak "
+"varsayılan değer (1000 ms) kullanın "
+
+#: usr/local/www/load_balancer_setting.php:144
+msgid "interval"
+msgstr "aralık"
+
+#: usr/local/www/load_balancer_setting.php:148
+msgid ""
+"Set the interval in seconds at which the member of a pool will be checked. "
+"Leave blank to use the default interval of 10 seconds"
+msgstr ""
+"Tabloya ait kullanıcıların kontrol edileceği aralığı ayarlayın. Boş "
+"bırakarak varsayılan değer (10 saniye) kullanın"
+
+#: usr/local/www/load_balancer_setting.php:152
+msgid "prefork"
+msgstr "iÅŸlem (prefork)"
+
+#: usr/local/www/load_balancer_setting.php:156
+msgid ""
+"Number of processes used by relayd for dns protocol. Leave blank to use the "
+"default value of 5 processes"
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server.php:111
+msgid "The virtual server configuration has been changed"
+msgstr "Sanal sunucu yapılandırması değiştirildi"
+
+#: usr/local/www/load_balancer_virtual_server.php:137
+#: usr/local/www/load_balancer_virtual_server_edit.php:226
+msgid "Fall Back Pool"
+msgstr "Alternatif Havuz"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:65
+msgid "Load Balancer: Virtual Server:"
+msgstr "Yük Dengeleyici: Sanal Sunucu:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:90
+msgid ""
+"This virtual server name has already been used. Virtual server names must "
+"be unique."
+msgstr ""
+"Bu sanal sunucu adı kullanımda. Sanal sunucu adları benzersiz olmalıdır."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:93
+msgid "You cannot use spaces or slashes in the 'name' field."
+msgstr "'isim' alanında boşluk veya bölü çizgisi (slaş) kullanamazsınız."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:96
+msgid ""
+"The port must be an integer between 1 and 65535, a port alias, or left blank."
+msgstr ""
+"Port 1 ile 65535 arasında bir tamsayı yada grup (alias) portu olmalıdır yada "
+"boş bırakılmalıdır."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:99
+#, php-format
+msgid "%s is not a valid IP address, IPv4 subnet, or alias."
+msgstr "%s geçerli bir IP adresi, IPv4 altağ yada grup (alias) değil."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:101
+#, php-format
+msgid "%s is a subnet containing more than 64 IP addresses."
+msgstr "%s altağı 64 ten daha fazla IP adresleri içeriyor."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:104
+msgid "You cannot select a Fall Back Pool when using the DNS relay protocol."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:111
+#, php-format
+msgid "modified '%s' vs:"
+msgstr "'%s' deÄŸiÅŸtirildi:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:113
+#, php-format
+msgid "created '%s' vs:"
+msgstr "'%s' oluÅŸturuldu:"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:147
+#: usr/local/www/status_lb_vs.php:57
+msgid "Virtual Server"
+msgstr "Sanal Sunucu"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:163
+msgid "Edit Load Balancer - Virtual Server entry"
+msgstr "Yük Dengeleyici Düzenle - Sanal Sunucu girişi"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:181
+msgid ""
+"This is normally the WAN IP address that you would like the server to listen "
+"on. All connections to this IP and port will be forwarded to the pool "
+"cluster."
+msgstr ""
+"Bu deÄŸer normalde sunucunuzun dinlemesini istediÄŸiniz WAN IP adresi "
+"olmalıdır. Bu IP porta yapılan tüm bağlantılar havuz kümesine "
+"yönlendirilecektir."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:182
+msgid ""
+"You may also specify a host alias listed in Firewall -&gt; Aliases here."
+msgstr ""
+"Güvenlik Duvarı -&gt; Gruplar kısmında belirtilmiş listelenen host Grup ları "
+"belirtebilirsiniz."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:195
+msgid ""
+"This is the port that the clients will connect to. All connections to this "
+"port will be forwarded to the pool cluster."
+msgstr ""
+"İstemcilerin bağlanacağı port. Bu porta yapılan bağlantılar havuz kümesine "
+"yönlendirilecektir."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:196
+msgid "If left blank, listening ports from the pool will be used."
+msgstr "Eğer boş bırakırsanız, dinlenen portlar havuzdan kullanılır."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:207
+msgid "Virtual Server Pool"
+msgstr "Sanal Sunucu Havuzu"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:210
+#: usr/local/www/load_balancer_virtual_server_edit.php:229
+msgid "Please add a pool on the Pools tab to use this feature."
+msgstr ""
+"Bu özelliği kullanabilmek için lütfen Havuzlar sekmesinden bir havuz ekleyin."
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:242
+msgid ""
+"The server pool to which clients will be redirected if *ALL* servers in the "
+"Virtual Server Pool are offline."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:243
+msgid "This option is NOT compatible with the DNS relay protocol."
+msgstr ""
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:279
+#: usr/local/www/status_captiveportal_expire.php:95
+#: usr/local/www/status_captiveportal_test.php:95
+msgid "Submit"
+msgstr "Kaydet"
+
+#: usr/local/www/load_balancer_virtual_server_edit.php:289
+msgid ""
+"Don't forget to add a firewall rule for the virtual server/pool after you're "
+"finished setting it up."
+msgstr ""
+"Yapılandırmayı tamamladıktan sonra sanal sunucu / havuz için güvenlik duvarı "
+"kuralı eklemeyi unutmayın."
+
+#: usr/local/www/pkg.php:57
+msgid "ERROR: No package defined."
+msgstr "HATA: Paket tanımlanmadı."
+
+#: usr/local/www/pkg.php:188
+msgid "Saving changes..."
+msgstr "DeÄŸiÅŸiklikler kaydediliyor..."
+
+#: usr/local/www/pkg.php:189
+msgid "Do you really want to save changes?"
+msgstr "Gerçekten değişiklikleri kaydetmek istiyor musunuz?"
+
+#: usr/local/www/pkg.php:458
+msgid "Do you really want to delete this item?"
+msgstr "Bu öğeyi silmek istediğinize emin misiniz?"
+
+#: usr/local/www/pkg_edit.php:74
+msgid "ERROR: No valid package defined."
+msgstr ""
+
+#: usr/local/www/pkg_edit.php:263
+msgid "Package Editor"
+msgstr "Paket Editörü"
+
+#: usr/local/www/pkg_mgr.php:91
+#, php-format
+msgid "Unable to retrieve package info from %s. Cached data will be used."
+msgstr "Paket bilgisi %s den alınamıyor. Önbellekteki veri kullanılacak."
+
+#: usr/local/www/pkg_mgr.php:94
+#, php-format
+msgid ""
+"Unable to communicate with %1$s. Please verify DNS and interface "
+"configuration, and that %2$s has functional Internet connectivity."
+msgstr ""
+"%1$s ile iletişim kurulamıyor. Lütfen DNS'i ve arabirimi doğrulayın ve "
+"%2$s'nin çalışan bir Internet bağlantısı olup olmadığını kontrol edin."
+
+#: usr/local/www/pkg_mgr.php:138 usr/local/www/pkg_mgr_installed.php:109
+msgid "Available Packages"
+msgstr "Kurulabilir Paketler"
+
+#: usr/local/www/pkg_mgr.php:139 usr/local/www/pkg_mgr_installed.php:113
+#: usr/local/www/pkg_mgr_settings.php:102
+msgid "Installed Packages"
+msgstr "Kurulu Paketler"
+
+#: usr/local/www/pkg_mgr.php:184
+msgid "Other Categories"
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:196 usr/local/www/pkg_mgr_installed.php:124
+msgid "Category"
+msgstr "Kategori"
+
+#: usr/local/www/pkg_mgr.php:203 usr/local/www/pkg_mgr.php:279
+msgid "There are currently no packages available for installation."
+msgstr "Kurulabilir paket bulunamadı."
+
+# 91%
+#: usr/local/www/pkg_mgr.php:225 usr/local/www/pkg_mgr_installed.php:190
+msgid "Package info"
+msgstr "Paket bilgisi"
+
+#: usr/local/www/pkg_mgr.php:228 usr/local/www/pkg_mgr_installed.php:194
+msgid "No package info, check the forum"
+msgstr "Paket bilgisi yok, forum'u kontrol ediniz"
+
+#: usr/local/www/pkg_mgr.php:234
+msgid "Click on package name to access its website."
+msgstr "Paket ismine tıklayarak websitesine erişebilirsiniz."
+
+#: usr/local/www/pkg_mgr.php:245
+msgid "Click "
+msgstr "Tıkla "
+
+#: usr/local/www/pkg_mgr.php:245
+msgid " version to check its change log."
+msgstr ""
+
+#: usr/local/www/pkg_mgr.php:257
+msgid "platform"
+msgstr "platform"
+
+#: usr/local/www/pkg_mgr.php:261 usr/local/www/pkg_mgr_installed.php:211
+msgid "Click package info for more details about "
+msgstr "Paket bilgisine tıklayarak hakkında daha fazla detay al "
+
+# 77%
+#: usr/local/www/pkg_mgr.php:273
+msgid "Install "
+msgstr "Yükle "
+
+#: usr/local/www/pkg_mgr_install.php:58
+msgid "Install Package"
+msgstr "Paket Kur"
+
+#: usr/local/www/pkg_mgr_install.php:100
+msgid "Available packages"
+msgstr "Kullanılabilir paketler"
+
+#: usr/local/www/pkg_mgr_install.php:101
+msgid "Installed packages"
+msgstr "Kurulu paketler"
+
+#: usr/local/www/pkg_mgr_install.php:102
+msgid "Package Installer"
+msgstr "Paket Kurucu"
+
+#: usr/local/www/pkg_mgr_install.php:197
+msgid "Something is wrong on the request."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:201
+msgid "Log was not retrievable."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_install.php:206
+msgid "installation completed."
+msgstr "kurulumu tamamlandı."
+
+#: usr/local/www/pkg_mgr_install.php:209
+#, php-format
+msgid "Could not find %s."
+msgstr "%s bulunamadı."
+
+#: usr/local/www/pkg_mgr_install.php:220
+msgid "Creating restore point before package installation."
+msgstr "Paket kurulumu oncesi kurtarma noktasi olusturuluyor."
+
+#: usr/local/www/pkg_mgr_install.php:225 usr/local/www/pkg_mgr_install.php:226
+msgid "Package deleted."
+msgstr "Paket silindi."
+
+#: usr/local/www/pkg_mgr_install.php:236 usr/local/www/pkg_mgr_install.php:237
+msgid "Package reinstallation failed."
+msgstr "Paketin tekrar kurulumu başarısız."
+
+#: usr/local/www/pkg_mgr_install.php:240 usr/local/www/pkg_mgr_install.php:241
+msgid "Package reinstalled."
+msgstr "Paket tekrar kuruldu."
+
+#: usr/local/www/pkg_mgr_install.php:263 usr/local/www/pkg_mgr_install.php:264
+msgid "All packages reinstalled."
+msgstr "Tüm paketler yeniden kuruldu."
+
+#: usr/local/www/pkg_mgr_install.php:269
+msgid "No packages are installed."
+msgstr "Yüklü paket yok."
+
+#: usr/local/www/pkg_mgr_install.php:275
+msgid "Installation of"
+msgstr "Kurulum"
+
+#: usr/local/www/pkg_mgr_install.php:275
+msgid "FAILED!"
+msgstr "BAÅžARISIZ!"
+
+#: usr/local/www/pkg_mgr_install.php:276
+msgid "Installation halted."
+msgstr "Kurulum durduruldu."
+
+#: usr/local/www/pkg_mgr_install.php:283
+msgid "Installation completed."
+msgstr "Kurulum tamamlandı."
+
+#: usr/local/www/pkg_mgr_install.php:283
+msgid "setup instructions"
+msgstr "kurulum adımları"
+
+#: usr/local/www/pkg_mgr_install.php:285
+msgid ""
+"Installation completed. Please check to make sure that the package is "
+"configured from the respective menu then start the package."
+msgstr ""
+"Kurulum tamamlandı. Paketin kurulu olduğundan emin olmak için ilgili "
+"menüden pakedin arayüzünü açıp yapılandırdıktan sonra paketi başlatınız."
+
+#: usr/local/www/pkg_mgr_installed.php:154
+#: usr/local/www/pkg_mgr_installed.php:156
+#: usr/local/www/pkg_mgr_installed.php:163
+#: usr/local/www/pkg_mgr_installed.php:165
+msgid "Available"
+msgstr "Uygun"
+
+#: usr/local/www/pkg_mgr_installed.php:157
+#: usr/local/www/pkg_mgr_installed.php:166
+#: usr/local/www/pkg_mgr_installed.php:184
+msgid "Installed"
+msgstr "Yüklü"
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:183
+msgid "Latest"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:181
+#: usr/local/www/pkg_mgr_installed.php:183
+msgid "N/A"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_installed.php:209
+msgid "Click on "
+msgstr "Tıklayın "
+
+#: usr/local/www/pkg_mgr_installed.php:220
+msgid "Remove "
+msgstr "Sil "
+
+#: usr/local/www/pkg_mgr_installed.php:224
+#: usr/local/www/pkg_mgr_installed.php:227
+msgid "Reinstall "
+msgstr "Tekrar kur "
+
+#: usr/local/www/pkg_mgr_installed.php:237
+msgid "There are no packages currently installed."
+msgstr "Kurulu paket yok."
+
+#: usr/local/www/pkg_mgr_settings.php:63
+#: usr/local/www/pkg_mgr_settings.php:103
+msgid "Package Settings"
+msgstr "Paket Ayarları"
+
+#: usr/local/www/pkg_mgr_settings.php:101
+#, php-format
+msgid "%s packages"
+msgstr "%s paketler"
+
+#: usr/local/www/pkg_mgr_settings.php:112
+msgid ""
+"This page allows an alternate package repository to be configured, primarily "
+"for temporary use as a testing mechanism."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:113
+msgid ""
+"The contents of unofficial packages servers cannot be verified and may "
+"contain malicious files."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:114
+msgid ""
+"The package server settings should remain at their default values to ensure "
+"that verifiable and trusted packages are recevied."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:116
+msgid ""
+"A warning is printed on the Dashboard and in the package manager when an "
+"unofficial package server is in use."
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:121
+#: usr/local/www/pkg_mgr_settings.php:124
+msgid "Package Repository URL"
+msgstr "Paket Depo URLsi"
+
+#: usr/local/www/pkg_mgr_settings.php:126
+msgid "Use a non-official server for packages"
+msgstr ""
+
+#: usr/local/www/pkg_mgr_settings.php:128
+#: usr/local/www/system_firmware_settings.php:170
+msgid "Base URL:"
+msgstr "Taban URL:"
+
+#: usr/local/www/pkg_mgr_settings.php:131
+#, php-format
+msgid "This is where %s will check for packages when the"
+msgstr "%s paketleri burada arayacak"
+
+#: usr/local/www/pkg_mgr_settings.php:131
+msgid "System: Packages"
+msgstr "Sistem: Paketler"
+
+#: usr/local/www/pkg_mgr_settings.php:131
+#: usr/local/www/system_firmware_settings.php:173
+msgid "page is viewed."
+msgstr "sayfa görüntülendi."
+
+#: usr/local/www/reboot.php:49
+msgid "Reboot System"
+msgstr "Sistemi Yeniden BaÅŸlat"
+
+#: usr/local/www/reboot.php:57
+msgid "The system is rebooting now. This may take one minute."
+msgstr "Sistem yeniden başlatılıyor. Birkaç dakika sürebilir."
+
+#: usr/local/www/reboot.php:63
+msgid "Are you sure you want to reboot the system?"
+msgstr "Sistemi yeniden baÅŸlatmak istediÄŸinize emin misiniz?"
+
+#: usr/local/www/restart_httpd.php:43
+msgid "Restarting httpd"
+msgstr "Httpd yeniden başlatılıyor"
+
+#: usr/local/www/restart_httpd.php:51
+msgid "Mounting file systems read/write"
+msgstr "Dosya sistemleri okuma-yazma yetkileri ile bağlanıyor"
+
+#: usr/local/www/restart_httpd.php:54
+msgid "Forcing all PHP file permissions to 0755"
+msgstr "Tüm PHP dosya izinleri 0755 olarak değiştiriliyor"
+
+#: usr/local/www/restart_httpd.php:57
+msgid "Mounting file systems read only"
+msgstr "Dosya sistemleri salt okunur olarak bağlanıyor"
+
+#: usr/local/www/restart_httpd.php:60
+msgid "Restarting mini_httpd"
+msgstr "mini_httpd yeniden başlatılıyor"
+
+#: usr/local/www/services_captiveportal.php:69
+#: usr/local/www/services_captiveportal_filemanager.php:72
+#: usr/local/www/services_captiveportal_hostname.php:67
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+#: usr/local/www/services_captiveportal_ip.php:65
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+#: usr/local/www/services_captiveportal_mac.php:64
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_vouchers.php:58
+msgid "Captive portal"
+msgstr "Hizmet Portalı"
+
+#: usr/local/www/services_captiveportal.php:88
+#, php-format
+msgid "Captive Portal: zone %s: Restore default portal page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:107
+#, php-format
+msgid "Captive Portal: zone %s: Restore default error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:126
+#, php-format
+msgid "Captive Portal: zone %s: Restore default logout page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:211
+#: usr/local/www/services_captiveportal_zones_edit.php:60
+#: usr/local/www/services_captiveportal_zones_edit.php:98
+msgid "Zone name"
+msgstr "Bölge adı"
+
+#: usr/local/www/services_captiveportal.php:219
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is part of a "
+"bridge."
+msgstr ""
+"%s arabirimi bir köprü üyesi olduğundan Hizmet Portalı için kullanılamaz."
+
+#: usr/local/www/services_captiveportal.php:223
+#, php-format
+msgid ""
+"The captive portal cannot be used on interface %s since it is used already "
+"on %s instance."
+msgstr ""
+"Hizmet Portalı %s arabirimini kullanamaz %s örneğinde zaten kullanımda."
+
+#: usr/local/www/services_captiveportal.php:231
+msgid "Certificate must be specified for HTTPS login."
+msgstr "HTTPS giriş için sertifika tanımlanmalıdır."
+
+#: usr/local/www/services_captiveportal.php:234
+msgid "The HTTPS server name must be specified for HTTPS login."
+msgstr "HTTPS oturumu için HTTP sunucu adı tanımlanmalıdır."
+
+#: usr/local/www/services_captiveportal.php:241
+msgid "The timeout must be at least 1 minute."
+msgstr "Zaman aşımı en az bir dakika olmalıdır."
+
+#: usr/local/www/services_captiveportal.php:254
+msgid ""
+"Hard timeout must be less or equal Default lease time set on DHCP Server"
+msgstr ""
+"Mecburi zaman aşımı varsayılan DHCP Sunucu kira zamanından daha az yada eşit "
+"olmalıdır"
+
+#: usr/local/www/services_captiveportal.php:259
+msgid "The idle timeout must be at least 1 minute."
+msgstr "Boşta kalma süresi en az 1 dakika olmalıdır."
+
+#: usr/local/www/services_captiveportal.php:262
+msgid "The pass-through credit count must be a number or left blank."
+msgstr "İzin kredi sayısı ya bir tamsayı olmalıdır ya da boş bırakılmalıdır."
+
+#: usr/local/www/services_captiveportal.php:265
+msgid ""
+"The waiting period to restore pass-through credits must be above 0 hours."
+msgstr ""
+"İzin kredilerini yenilemek için geçmesi gereken süre 0 saatten fazla "
+"olmalıdır."
+
+#: usr/local/www/services_captiveportal.php:269
+#: usr/local/www/services_captiveportal.php:272
+#: usr/local/www/services_captiveportal.php:275
+#: usr/local/www/services_captiveportal.php:278
+#: usr/local/www/services_captiveportal_ip_edit.php:106
+#, php-format
+msgid "A valid IP address must be specified. [%s]"
+msgstr "Geçerli bir IP adresi belirtilmelidir. [%s]"
+
+#: usr/local/www/services_captiveportal.php:281
+#: usr/local/www/services_captiveportal.php:284
+#: usr/local/www/services_captiveportal.php:287
+#: usr/local/www/services_captiveportal.php:290
+#: usr/local/www/services_captiveportal.php:293
+#, php-format
+msgid "A valid port number must be specified. [%s]"
+msgstr "Geçerli bir port numarası belirtilmelidir. [%s]"
+
+#: usr/local/www/services_captiveportal.php:296
+msgid ""
+"The maximum number of concurrent connections per client IP address may not "
+"be larger than the global maximum."
+msgstr ""
+"İstemci IP adresi başına maksimum eş zamanlı anlık bağlantı sayısı değeri "
+"verilen genel en yüksek değerden fazla olmamalıdır."
+
+#: usr/local/www/services_captiveportal.php:299
+msgid ""
+"The NAS-Identifier must be 3-253 characters long and should only contain "
+"ASCII characters."
+msgstr ""
+"NAS-Identifier 3-253 karakter uzunluğunda olmalıdır ve yalnızca ASCII "
+"karakterler içermelidir."
+
+#: usr/local/www/services_captiveportal.php:505
+#: usr/local/www/services_captiveportal_filemanager.php:148
+#: usr/local/www/services_captiveportal_hostname.php:113
+#: usr/local/www/services_captiveportal_ip.php:106
+#: usr/local/www/services_captiveportal_mac.php:156
+#: usr/local/www/services_captiveportal_vouchers.php:442
+msgid "Captive portal(s)"
+msgstr "Hizmet Portal(ları)"
+
+#: usr/local/www/services_captiveportal.php:506
+#: usr/local/www/services_captiveportal_filemanager.php:149
+#: usr/local/www/services_captiveportal_hostname.php:114
+#: usr/local/www/services_captiveportal_ip.php:107
+#: usr/local/www/services_captiveportal_mac.php:157
+#: usr/local/www/services_captiveportal_vouchers.php:443
+msgid "MAC"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:507
+#: usr/local/www/services_captiveportal_filemanager.php:150
+#: usr/local/www/services_captiveportal_ip.php:108
+#: usr/local/www/services_captiveportal_mac.php:158
+#: usr/local/www/services_captiveportal_vouchers.php:444
+msgid "Allowed IP addresses"
+msgstr "Ä°zinli IP adresleri"
+
+#: usr/local/www/services_captiveportal.php:508
+#: usr/local/www/services_captiveportal_filemanager.php:151
+#: usr/local/www/services_captiveportal_hostname.php:116
+#: usr/local/www/services_captiveportal_ip.php:109
+#: usr/local/www/services_captiveportal_mac.php:159
+#: usr/local/www/services_captiveportal_vouchers.php:445
+msgid "Allowed Hostnames"
+msgstr "İzinli sistem adları"
+
+#: usr/local/www/services_captiveportal.php:509
+#: usr/local/www/services_captiveportal.php:671
+#: usr/local/www/services_captiveportal_filemanager.php:152
+#: usr/local/www/services_captiveportal_hostname.php:117
+#: usr/local/www/services_captiveportal_ip.php:110
+#: usr/local/www/services_captiveportal_mac.php:160
+#: usr/local/www/services_captiveportal_vouchers.php:92
+#: usr/local/www/services_captiveportal_vouchers.php:446
+#: usr/local/www/status_captiveportal_vouchers.php:58
+msgid "Vouchers"
+msgstr "Biletler"
+
+#: usr/local/www/services_captiveportal.php:510
+#: usr/local/www/services_captiveportal_filemanager.php:153
+#: usr/local/www/services_captiveportal_hostname.php:118
+#: usr/local/www/services_captiveportal_ip.php:111
+#: usr/local/www/services_captiveportal_mac.php:161
+#: usr/local/www/services_captiveportal_vouchers.php:447
+msgid "File Manager"
+msgstr "Dosya Yöneticisi"
+
+#: usr/local/www/services_captiveportal.php:520
+msgid "Enable captive portal"
+msgstr "Hizmet Portalını etkinleştir"
+
+#: usr/local/www/services_captiveportal.php:535
+msgid "Select the interface(s) to enable for captive portal."
+msgstr "Hizmet Portalını etkinleştirmek istediğiniz arabirim(ler)'i seçiniz."
+
+#: usr/local/www/services_captiveportal.php:538
+msgid "Maximum concurrent connections"
+msgstr "Maksimum eş zamanlı bağlantı sayısı"
+
+#: usr/local/www/services_captiveportal.php:542
+msgid "per client IP address (0 = no limit)"
+msgstr "istemci başına IP adresi (0 = sınırsız)"
+
+#: usr/local/www/services_captiveportal.php:545
+msgid ""
+"This setting limits the number of concurrent connections to the captive "
+"portal HTTP(S) server. This does not set how many users can be logged in to "
+"the captive portal, but rather how many users can load the portal page or "
+"authenticate at the same time! Possible setting allowed is: minimum 4 "
+"connections per client IP address, with a total maximum of 100 connections."
+msgstr ""
+"Bu ayar Hizmet Portalı HTTP(S) sunucusuna aynı anda yapılabilecek bağlantı "
+"sayısını sınırlar. Hizmet Portalına oturum açabilecek kullanıcı sayısı "
+"değil, aynı anda oturum ekranını görebilecek kullanıcı sayısıdır. Varsayılan "
+"bağlantı değeri istemci IP adresi başına 4'tür, toplam en fazla 100'dür."
+
+#: usr/local/www/services_captiveportal.php:553
+#: usr/local/www/services_captiveportal.php:560
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/system_advanced_misc.php:623
+msgid "minutes"
+msgstr "dakika"
+
+#: usr/local/www/services_captiveportal.php:554
+msgid ""
+"Clients will be disconnected after this amount of inactivity. They may log "
+"in again immediately, though. Leave this field blank for no idle timeout."
+msgstr ""
+"İstemciler bu süre boyunca herhangi bir eylem gerçekleştirmezlerse "
+"bağlantıları kesilir. Hemen arkasında oturum açabilirler. Boşta kalma "
+"durumunda bağlantının kesilmesi için bu alanı boş bırakın."
+
+#: usr/local/www/services_captiveportal.php:557
+msgid "Hard timeout"
+msgstr "Mecburi zaman aşımı"
+
+#: usr/local/www/services_captiveportal.php:561
+msgid ""
+"Clients will be disconnected after this amount of time, regardless of "
+"activity. They may log in again immediately, though. Leave this field blank "
+"for no hard timeout (not recommended unless an idle timeout is set)."
+msgstr ""
+"İstemcilerin bağlantıları, etkinlik durumuna bakılmazsızın, bu sürenin "
+"sonunda koparılır. Hemen tekrar oturum açabilirler. Mecburi zaman aşımını "
+"kaldırmak için bu alanı boş bırakın (boşta zaman aşımı ayarlanmadıysa "
+"tavsiye edilmez)."
+
+#: usr/local/www/services_captiveportal.php:564
+msgid "Pass-through credits allowed per MAC address"
+msgstr "MAC adresi başına izinli kredi"
+
+#: usr/local/www/services_captiveportal.php:567
+msgid "per client MAC address (0 or blank = none)"
+msgstr "istemci MAC adresi başına (0 veya boş bırakabilirsiniz)"
+
+#: usr/local/www/services_captiveportal.php:568
+msgid ""
+"This setting allows passing through the captive portal without "
+"authentication a limited number of times per MAC address. Once used up, the "
+"client can only log in with valid credentials until the waiting period "
+"specified below has expired. Recommended to set a hard timeout and/or idle "
+"timeout when using this for it to be effective."
+msgstr ""
+"Bu ayar her MAC adresi başına Hizmet Portalından kimlik doğrulama olmaksızın "
+"sınırlı sayıda geçişe izin verir. Bu sayıda kimlik doğrulamasız geçişten "
+"sonra istemci aşağıda belirtilen bekleme süresi dolmadan sadece kimlik "
+"doğruladıktan sonra çıkabilir. Bu ayarı kullanacaksanız boşta zaman aşımı ve/"
+"veya mecburi zaman aşımının da yapılandırılması önerilir."
+
+#: usr/local/www/services_captiveportal.php:571
+msgid "Waiting period to restore pass-through credits"
+msgstr "İzinli kredileri yenilemek için gereken bekleme süresi"
+
+#: usr/local/www/services_captiveportal.php:574
+msgid "hours"
+msgstr "saat"
+
+#: usr/local/www/services_captiveportal.php:575
+msgid ""
+"Clients will have their available pass-through credits restored to the "
+"original count after this amount of time since using the first one. This "
+"must be above 0 hours if pass-through credits are enabled."
+msgstr ""
+"Belirtilen süre geçtiğinde istemcilerin izin kredileri orjinal değerlerine "
+"sıfırlanır. İzin kredileri açıksa 0 saatten fazla olmalıdır."
+
+#: usr/local/www/services_captiveportal.php:578
+msgid "Reset waiting period on attempted access"
+msgstr "Erişim denemesinde bekleme süresini sıfırla"
+
+#: usr/local/www/services_captiveportal.php:581
+msgid "Enable waiting period reset on attempted access"
+msgstr "Erişim denemesinde bekleme süresinin sıfırlanmasını etkinleştir"
+
+#: usr/local/www/services_captiveportal.php:582
+msgid ""
+"If enabled, the waiting period is reset to the original duration if access "
+"is attempted when all pass-through credits have already been exhausted."
+msgstr ""
+"Etkinleştirildiğinde, izin kredileri tükendikten sonra erişmeye "
+"çalışıldığında bekleme süresi sıfırlanır."
+
+#: usr/local/www/services_captiveportal.php:585
+msgid "Logout popup window"
+msgstr "Oturum kapat penceresi"
+
+#: usr/local/www/services_captiveportal.php:588
+msgid "Enable logout popup window"
+msgstr "Oturum kapat penceresini etkinleÅŸtir"
+
+#: usr/local/www/services_captiveportal.php:589
+msgid ""
+"If enabled, a popup window will appear when clients are allowed through the "
+"captive portal. This allows clients to explicitly disconnect themselves "
+"before the idle or hard timeout occurs."
+msgstr ""
+"Etkinleştirildiğinde, Hizmet Portalından istemci geçişine izin verildiyse ek "
+"bir pencere açılır. Bu pencereden kullanıcılar boşta veya mecburi zaman "
+"aşımını beklemeden oturumlarını kapatıp bağlantılarını kesebilirler."
+
+#: usr/local/www/services_captiveportal.php:592
+msgid "Pre-authentication redirect URL"
+msgstr "Ön kimlik doğrulama yönlendirme adresi"
+
+#: usr/local/www/services_captiveportal.php:595
+#, php-format
+msgid ""
+"Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using "
+"your custom captive portal index.php page or error pages."
+msgstr ""
+"Bu alanı Hizmet Portalı index.php veya hata sayfalarından erişilebilen bir "
+"değişken olan $PORTAL_REDIRURL$ değişkenine değer atamak için "
+"kullanabilirsiniz."
+
+#: usr/local/www/services_captiveportal.php:599
+msgid "After authentication Redirection URL"
+msgstr "Kimlik doğrulama sonrası yönlendirilecek adres"
+
+#: usr/local/www/services_captiveportal.php:603
+msgid ""
+"If you provide a URL here, clients will be redirected to that URL instead of "
+"the one they initially tried to access after they've authenticated."
+msgstr ""
+"Eğer buraya bir adres (URL) girerseniz, kullanıcılar kimlik doğrulama "
+"ardından erişmeye çalıştıkları adres yerine bu adrese yönlendirilirler."
+
+#: usr/local/www/services_captiveportal.php:607
+msgid "Blocked MAC address redirect URL"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:610
+#, php-format
+msgid ""
+"If you provide a URL here, MAC addresses set to be blocked will be redirect "
+"to that URL when attempt to access anything."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:614
+msgid "Concurrent user logins"
+msgstr "Eş zamanlı kullanıcı oturumları"
+
+#: usr/local/www/services_captiveportal.php:617
+msgid "Disable concurrent logins"
+msgstr "Eş zamanlı oturumları devre dışı bırak"
+
+#: usr/local/www/services_captiveportal.php:618
+msgid ""
+"If this option is set, only the most recent login per username will be "
+"active. Subsequent logins will cause machines previously logged in with the "
+"same username to be disconnected."
+msgstr ""
+"Bu seçenek açıldığında, her kullanıcı adına ait son oturum geçerli "
+"olacaktır. Aynı kullanıcı adıyla oturum açıldığında o kullanıcı adıyla "
+"açılan diğer oturumlar kapatılır."
+
+#: usr/local/www/services_captiveportal.php:621
+msgid "MAC filtering"
+msgstr "MAC filtreleme"
+
+#: usr/local/www/services_captiveportal.php:624
+msgid "Disable MAC filtering"
+msgstr "MAC filtrelemeyi devre dışı bırak"
+
+#: usr/local/www/services_captiveportal.php:625
+msgid ""
+"If this option is set, no attempts will be made to ensure that the MAC "
+"address of clients stays the same while they're logged in.This is required "
+"when the MAC address of the client cannot be determined (usually because "
+"there are routers between"
+msgstr ""
+"Bu seçenek açıldığında istemcilerin oturum açtıktan sonra MAC adreslerinin "
+"aynı kaldığına dair herhangi bir kontrol yapılmaz. Kullanıcın MAC adresi "
+"belirlenemiyorsa bu seçeneğin açılması gerekir (genellikle istemcilerle"
+
+#: usr/local/www/services_captiveportal.php:626
+msgid "and the clients)."
+msgstr "arasında yönlendirici(ler) varsa gereklidir)."
+
+#: usr/local/www/services_captiveportal.php:627
+msgid "If this is enabled, RADIUS MAC authentication cannot be used."
+msgstr ""
+"Bu özellik etkinleştirildiğinde RADIUS MAC kimlik doğrulama kullanılamaz."
+
+#: usr/local/www/services_captiveportal.php:630
+msgid "Pass-through MAC Auto Entry"
+msgstr "Ä°zinli MAC otomatik giriÅŸi"
+
+#: usr/local/www/services_captiveportal.php:633
+msgid "Enable Pass-through MAC automatic additions"
+msgstr "Ä°zinli MAC otomatik eklemelerini etkinleÅŸtir"
+
+#: usr/local/www/services_captiveportal.php:634
+msgid ""
+"If this option is set, a MAC passthrough entry is automatically added after "
+"the user has successfully authenticated. Users of that MAC address will "
+"never have to authenticate again."
+msgstr ""
+"Bu seçenek açıldığında kullanıcı başarılı şekilde kimlik doğruladıktan sonra "
+"otomatik olarak bir MAC izni oluşturulur. O MAC adresinden çıkan "
+"kullanıcıların bir daha kimlik doğrulaması gerekmez."
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid ""
+"To remove the passthrough MAC entry you either have to log in and remove it "
+"manually from the"
+msgstr "İzinli MAC girdisini silmek için oturum açmalı veya silmeli ("
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid "MAC tab"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:635
+#: usr/local/www/services_captiveportal.php:641
+msgid "or send a POST from another system to remove it."
+msgstr ") ya da silmek için başka bir sistemden POST isteğinde bulunmalısınız."
+
+#: usr/local/www/services_captiveportal.php:636
+msgid ""
+"If this is enabled, RADIUS MAC authentication cannot be used. Also, the "
+"logout window will not be shown."
+msgstr ""
+"Etkinleştirildiğinde RADIUS MAC kimlik doğrulama kullanılamaz. Aynı zamanda "
+"oturum kapatma ekranı da görüntülenmeyecektir."
+
+#: usr/local/www/services_captiveportal.php:639
+msgid "Enable Pass-through MAC automatic addition with username"
+msgstr "Kullanıcı adı ile otomatik izinli MAC eklenmesini etkinleştir"
+
+#: usr/local/www/services_captiveportal.php:640
+msgid ""
+"If this option is set, with the automatically MAC passthrough entry created "
+"the username, used during authentication, will be saved."
+msgstr ""
+"Bu seçenek açıldığında otomatik MAC izni eklenirken, kimlik doğrulayan "
+"kullanıcı adı da kaydedilir."
+
+#: usr/local/www/services_captiveportal.php:645
+msgid "Per-user bandwidth restriction"
+msgstr "Kullanıcı başına bant genişliği sınırlaması"
+
+#: usr/local/www/services_captiveportal.php:648
+msgid "Enable per-user bandwidth restriction"
+msgstr "Kullanıcı başına bant genişliği sınırlamasını etkinleştir"
+
+#: usr/local/www/services_captiveportal.php:651
+msgid "Default download"
+msgstr "Varsayılan indirme"
+
+#: usr/local/www/services_captiveportal.php:655
+msgid "Default upload"
+msgstr "Varsayılan gönderme"
+
+#: usr/local/www/services_captiveportal.php:659
+msgid ""
+"If this option is set, the captive portal will restrict each user who logs "
+"in to the specified default bandwidth. RADIUS can override the default "
+"settings. Leave empty or set to 0 for no limit."
+msgstr ""
+"Bu seçenek etkinleştirildiğinde Hizmet Portalı oturum açan her kullanıcıya "
+"belirtilen varsayılan bantgenişliği sınırlamasını uygulayacaktır. RADIUS "
+"varsayılan değerlerin üzerine yazabilir. Sınırlama uygulamamak için boş "
+"bırakın veya 0 atayın."
+
+#: usr/local/www/services_captiveportal.php:667
+msgid "No Authentication"
+msgstr "Kimlik DoÄŸrulama Yok"
+
+#: usr/local/www/services_captiveportal.php:671
+msgid "Local"
+msgstr "Yerel"
+
+#: usr/local/www/services_captiveportal.php:680
+msgid "Allow only users/groups with 'Captive portal login' privilege set"
+msgstr ""
+"Sadece kullanıcılar/gruplar a 'Hizmet portalı giriş' ayrıcalığı ayarlanırsa "
+"izin ver"
+
+#: usr/local/www/services_captiveportal.php:683
+msgid "RADIUS Authentication"
+msgstr "RADIUS Kimlik DoÄŸrulama"
+
+#: usr/local/www/services_captiveportal.php:689
+msgid "RADIUS Protocol"
+msgstr "Radius Protokol"
+
+#: usr/local/www/services_captiveportal.php:694 usr/local/www/vpn_l2tp.php:392
+msgid "PAP"
+msgstr "PAP"
+
+#: usr/local/www/services_captiveportal.php:698
+msgid "CHAP_MD5"
+msgstr "CHAP_MD5"
+
+#: usr/local/www/services_captiveportal.php:702
+msgid "MSCHAPv1"
+msgstr "MSCHAPv1"
+
+#: usr/local/www/services_captiveportal.php:706
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: usr/local/www/services_captiveportal.php:723
+#: usr/local/www/services_captiveportal.php:766
+msgid "Primary RADIUS server"
+msgstr "Ana RADIUS sunucu"
+
+#: usr/local/www/services_captiveportal.php:728
+msgid ""
+"Enter the IP address of the RADIUS server which users of the captive portal "
+"have to authenticate against."
+msgstr ""
+"Hizmet Portalının kimlik doğrulamada kullanacağı RADIUS sunucusunun IP "
+"adresini giriniz."
+
+#: usr/local/www/services_captiveportal.php:733
+msgid "Leave this field blank to use the default port (1812)."
+msgstr "Varsayılan port 1812unu kullanmak için boş bırakınız."
+
+#: usr/local/www/services_captiveportal.php:736
+#: usr/local/www/services_captiveportal.php:756
+#: usr/local/www/services_captiveportal.php:778
+#: usr/local/www/services_captiveportal.php:797
+msgid "Shared secret"
+msgstr "Paylaşımlı anahtar"
+
+#: usr/local/www/services_captiveportal.php:738
+msgid ""
+"Leave this field blank to not use a RADIUS shared secret (not recommended)."
+msgstr ""
+"Bu alanı boş bırakarak RADIUS paylaşımlı anahtar kullanımını devre dışı "
+"bırakabilirsiniz (tavsiye edilmez)."
+
+#: usr/local/www/services_captiveportal.php:744
+#: usr/local/www/services_captiveportal.php:785 usr/local/www/vpn_pptp.php:450
+msgid "Secondary RADIUS server"
+msgstr "Ä°kincil RADIUS sunucu"
+
+#: usr/local/www/services_captiveportal.php:749
+msgid ""
+"If you have a second RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+"Ä°kinci bir RADIUS sunucunuz varsa bu alandan IP adresini girerek "
+"etkinleÅŸtirebilirsiniz."
+
+#: usr/local/www/services_captiveportal.php:771
+msgid ""
+"If you have a third RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+"Üçüncü bir RADIUS sunucunuz varsa bu alandan IP adresini girerek "
+"etkinleÅŸtirebilirsiniz."
+
+#: usr/local/www/services_captiveportal.php:790
+msgid ""
+"If you have a fourth RADIUS server, you can activate it by entering its IP "
+"address here."
+msgstr ""
+"Dördüncü bir RADIUS sunucunuz varsa bu alandan IP adresini girerek "
+"etkinleÅŸtirebilirsiniz."
+
+#: usr/local/www/services_captiveportal.php:804
+msgid "Accounting"
+msgstr "Hesaplandırma"
+
+#: usr/local/www/services_captiveportal.php:809
+msgid "send RADIUS accounting packets"
+msgstr "RADIUS hesaplandırma paketleri gönder"
+
+#: usr/local/www/services_captiveportal.php:810
+msgid ""
+"If this is enabled, RADIUS accounting packets will be sent to the primary "
+"RADIUS server."
+msgstr ""
+"Etkinleştirildiğinde ana RADIUS sunucuya RADIUS hesaplandırma paketleri "
+"gönderilir."
+
+#: usr/local/www/services_captiveportal.php:813
+msgid "Accounting port"
+msgstr "Hesaplandırma portu"
+
+#: usr/local/www/services_captiveportal.php:815
+msgid "Leave blank to use the default port (1813)."
+msgstr "Varsayılan (1813) portunun kullanılması için boş bırakınız."
+
+#: usr/local/www/services_captiveportal.php:821
+msgid "Accounting updates"
+msgstr "Hesaplandırma güncellemeleri"
+
+#: usr/local/www/services_captiveportal.php:823
+msgid "no accounting updates"
+msgstr "hesaplandırma güncellemesi yapma"
+
+#: usr/local/www/services_captiveportal.php:824
+msgid "stop/start accounting"
+msgstr "hesaplandırmayı başlat/durdur"
+
+#: usr/local/www/services_captiveportal.php:825
+msgid "interim update"
+msgstr "geçici güncelleme"
+
+#: usr/local/www/services_captiveportal.php:832
+msgid "RADIUS options"
+msgstr "RADIUS seçenekleri"
+
+#: usr/local/www/services_captiveportal.php:835
+msgid "Reauthentication"
+msgstr "Tekrar kimlik doÄŸrulama"
+
+#: usr/local/www/services_captiveportal.php:837
+msgid "Reauthenticate connected users every minute"
+msgstr "Bağlı kullanıcıları her dakika tekrar kimlik doğrulamaya tabi tut"
+
+#: usr/local/www/services_captiveportal.php:838
+msgid ""
+"If reauthentication is enabled, Access-Requests will be sent to the RADIUS "
+"server for each user that is logged in every minute. If an Access-Reject is "
+"received for a user, that user is disconnected from the captive portal "
+"immediately."
+msgstr ""
+"Eğer yeniden kimlik doğrulama açıldıysa her kullanıcının erişim istekleri "
+"her dakika RADIUS sunucuya gönderilir. Herhangi bir kullanıcı için yanıt "
+"olarak erişim reddi alındığında o kullanıcının Hizmet Portalı bağlantısı "
+"kesilir."
+
+#: usr/local/www/services_captiveportal.php:842
+msgid "RADIUS MAC authentication"
+msgstr "RADIUS MAC kimlik doÄŸrulama"
+
+#: usr/local/www/services_captiveportal.php:844
+msgid "Enable RADIUS MAC authentication"
+msgstr "RADIUS MAC kimlik doğrulamayı etkinleştir"
+
+#: usr/local/www/services_captiveportal.php:845
+msgid ""
+"If this option is enabled, the captive portal will try to authenticate users "
+"by sending their MAC address as the username and the password entered below "
+"to the RADIUS server."
+msgstr ""
+"Bu seçenek açıldığında Hizmet Portalı RADIUS sunucuya kullanıcı adı olarak "
+"kullanıcıların MAC adreslerini ve parola olarak da aşağıda girilen değeri "
+"göndererek kimlik kontrolü gerçekleştirir."
+
+#: usr/local/www/services_captiveportal.php:849
+msgid "MAC authentication secret"
+msgstr "MAC kimlik doğrulaması gizli"
+
+#: usr/local/www/services_captiveportal.php:853
+msgid "RADIUS NAS IP attribute"
+msgstr "RADIUS NAS IP niteliÄŸi"
+
+#: usr/local/www/services_captiveportal.php:883
+msgid "Choose the IP to use for calling station attribute."
+msgstr "İstemci niteliğini çağırmak için kullanılacak IPyi seçin."
+
+#: usr/local/www/services_captiveportal.php:888
+msgid "Session-Timeout"
+msgstr "Oturum Zaman Aşımı"
+
+#: usr/local/www/services_captiveportal.php:889
+msgid "Use RADIUS Session-Timeout attributes"
+msgstr "RADIUS oturum zaman aşımı niteliklerini kullan"
+
+#: usr/local/www/services_captiveportal.php:890
+msgid ""
+"When this is enabled, clients will be disconnected after the amount of time "
+"retrieved from the RADIUS Session-Timeout attribute."
+msgstr ""
+"Etkinleştirildiğinde istemcilerin bağlantıları RADIUS oturum zaman aşımı "
+"niteliğiyle alınan süre sonunda kesilir."
+
+#: usr/local/www/services_captiveportal.php:906
+#, php-format
+msgid ""
+"If RADIUS type is set to Cisco, in Access-Requests the value of Calling-"
+"Station-Id will be set to the client's IP address and the Called-Station-Id "
+"to the client's MAC address. Default behavior is Calling-Station-Id = "
+"client's MAC address and Called-Station-Id = %s's WAN IP address."
+msgstr ""
+"RADIUS türü Cisco olarak ayarlandığında, erişim isteklerinde Calling-Station-"
+"Id deÄŸeri istemcinin IP adresi olarak ve Called-Station-Id de istemcinin MAC "
+"adresi olarak atanır. Öntanımlı davranış Calling-Station-Id'ye istemcinin "
+"MAC adresini ve Called-Station-Id'ye %s WAN IP adresini atamaktır."
+
+#: usr/local/www/services_captiveportal.php:912
+msgid "Accounting Style"
+msgstr "Hesap Tazı"
+
+#: usr/local/www/services_captiveportal.php:913
+msgid "Invert Acct-Input-Octets and Acct-Output-Octets"
+msgstr "Acct-Input-Octets ve Acct-Output-Octets ters çevir"
+
+#: usr/local/www/services_captiveportal.php:914
+msgid ""
+"When this is enabled, data counts for RADIUS accounting packets will be "
+"taken from the client perspective, not the NAS. Acct-Input-Octets will "
+"represent download, and Acct-Output-Octets will represent upload."
+msgstr ""
+"Etkinleştirildiğinde, RADIUS hesabında veri miktarı hesap edilirken, NAS "
+"trafiği değil, client trafiği dikkate alınacak. Acct-Input-Octets indirilen, "
+"Acct-Output-Octets gönderilen veriyi temsil edecek."
+
+#: usr/local/www/services_captiveportal.php:918
+msgid "NAS Identifier"
+msgstr "NAS tanımlayıcısı"
+
+#: usr/local/www/services_captiveportal.php:920
+msgid "Specify a NAS identifier to override the default value"
+msgstr "Varsayılan değeri geçersiz kılmak için bir NAS kimliği belirtin"
+
+#: usr/local/www/services_captiveportal.php:923
+msgid "MAC address format"
+msgstr "MAC adresi formatı"
+
+#: usr/local/www/services_captiveportal.php:938
+msgid ""
+"This option changes the MAC address format used in the whole RADIUS system. "
+"Change this if you also"
+msgstr ""
+"Bu seçenek tüm RADIUS sisteminde belirtilen formatın kullanılmasını sağlar. "
+"RADIUS MAC kimlik"
+
+#: usr/local/www/services_captiveportal.php:939
+msgid "need to change the username format for RADIUS MAC authentication."
+msgstr ""
+"doğrulamadaki kullanıcı adını da değiştirmeniz gerekiyorsa bunu kullanın."
+
+#: usr/local/www/services_captiveportal.php:940
+msgid "default:"
+msgstr "varsayılan:"
+
+#: usr/local/www/services_captiveportal.php:941
+msgid "singledash:"
+msgstr "tek çizgi:"
+
+#: usr/local/www/services_captiveportal.php:942
+msgid "ietf:"
+msgstr "ietf:"
+
+#: usr/local/www/services_captiveportal.php:943
+msgid "cisco:"
+msgstr "cisco:"
+
+#: usr/local/www/services_captiveportal.php:944
+msgid "unformatted:"
+msgstr "düz:"
+
+#: usr/local/www/services_captiveportal.php:951
+msgid "HTTPS login"
+msgstr "HTTPS oturum"
+
+#: usr/local/www/services_captiveportal.php:954
+msgid "Enable HTTPS login"
+msgstr "HTTPS oturumunu etkinleÅŸtir"
+
+#: usr/local/www/services_captiveportal.php:955
+msgid ""
+"If enabled, the username and password will be transmitted over an HTTPS "
+"connection to protect against eavesdroppers. A server name and certificate "
+"must also be specified below."
+msgstr ""
+"Etkinleştirildiğinde kullanıcı adı ve şifre dinlenmelerini engellemek için "
+"HTTPS üzerinden gönderilecektir. Bir sunucu adı ve sertifika aşağıda "
+"tanımlanmalıdır."
+
+#: usr/local/www/services_captiveportal.php:958
+msgid "HTTPS server name"
+msgstr "HTTPS sunucu adı"
+
+#: usr/local/www/services_captiveportal.php:961
+#, php-format
+msgid ""
+"This name will be used in the form action for the HTTPS POST and should "
+"match the Common Name (CN) in your certificate (otherwise, the client "
+"browser will most likely display a security warning). Make sure captive "
+"portal clients can resolve this name in DNS and verify on the client that "
+"the IP resolves to the correct interface IP on %s."
+msgstr ""
+"Bu isim HTTPS POST form eyleminde kullanılacaktır ve sertifikanızdaki Ortak "
+"İsim (CN - Common Name) ile aynı olmalıdır (aksi taktirde istemci browser "
+"büyük ihtimalle bir güvenlik uyarısı verecektir). Hizmet Portalı "
+"istemcilerinin DNS'te bu ismi çözümleyebildiğinden ve istemcide IP'nin %s "
+"üzerindeki doğru arabirim IP'sine gittiğine emin olmalısınız."
+
+#: usr/local/www/services_captiveportal.php:964
+#: usr/local/www/system_advanced_admin.php:357
+msgid "SSL Certificate"
+msgstr "SSL Sertifikası"
+
+#: usr/local/www/services_captiveportal.php:978
+msgid "No Certificates defined."
+msgstr "Tanımlı sertifika yok."
+
+#: usr/local/www/services_captiveportal.php:983
+#: usr/local/www/services_captiveportal.php:986
+msgid "Disable HTTPS forwards"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:987
+msgid ""
+"If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites "
+"will not be forwarded to the captive portal. This prevents certificate "
+"errors from being presented to the user even if HTTPS logins are enabled. "
+"Users must attempt a connecton to an HTTP (Port 80) site to get forwarded to "
+"the captive portal. If HTTPS logins are enabled, the user will be redirected "
+"to the HTTPS login page."
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:990
+msgid "Portal page contents"
+msgstr "Hizmet Portalı sayfa içerikleri"
+
+#: usr/local/www/services_captiveportal.php:1005
+#: usr/local/www/services_captiveportal.php:1045
+#: usr/local/www/services_captiveportal.php:1065
+msgid "View current page"
+msgstr "Sayfayı görüntüle"
+
+#: usr/local/www/services_captiveportal.php:1007
+#: usr/local/www/services_captiveportal.php:1047
+#: usr/local/www/services_captiveportal.php:1067
+msgid "Download current page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1010
+msgid "Restore default portal page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1017
+#, php-format
+msgid ""
+"Upload an HTML/PHP file for the portal page here (leave blank to keep the "
+"current one). Make sure to include a form (POST to %1$s) with a submit "
+"button (%2$s) and a hidden field with %3$s and %4$s. Include the %5$s and "
+"%6$s and/or %7$s input fields if authentication is enabled, otherwise it "
+"will always fail."
+msgstr ""
+"Hizmet Portalı için bir HTML/PHP sayfası yükleyin. %1$s POST yapacak bir "
+"form, %2$s bir gönder düğmesi ve %3$s ve %4$s şeklinde bir gizli alan "
+"eklemeyi unutmayın. Kimlik doğrulama açıksa %5$s ve %6$s girdi alanlarını "
+"eklemeyi unutmayın. Ayrıca kimlik doğrulama açıksa %7$s alanını da "
+"ekleyebilirsiniz."
+
+#: usr/local/www/services_captiveportal.php:1028
+msgid "Example code for the form:"
+msgstr "Form için örnek kod:"
+
+#: usr/local/www/services_captiveportal.php:1040
+msgid "error page"
+msgstr "hata sayfası"
+
+#: usr/local/www/services_captiveportal.php:1041
+#: usr/local/www/services_captiveportal.php:1061
+msgid "contents"
+msgstr "içindekiler"
+
+#: usr/local/www/services_captiveportal.php:1050
+msgid "Restore default error page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1055
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed when an "
+"authentication error occurs. You may include"
+msgstr ""
+"Burada yüklediğiniz HTML/PHP dosyası bir kimlik doğrulama hatası oluştuğunda "
+"gösterilen dosyadır"
+
+#: usr/local/www/services_captiveportal.php:1056
+msgid ""
+"which will be replaced by the error or reply messages from the RADIUS "
+"server, if any."
+msgstr ""
+"eklediğinizde RADIUS sunucudan gelen hata mesajı veya yanıtla değiştirilir."
+
+#: usr/local/www/services_captiveportal.php:1070
+msgid "Restore default logout page"
+msgstr ""
+
+#: usr/local/www/services_captiveportal.php:1075
+msgid ""
+"The contents of the HTML/PHP file that you upload here are displayed on "
+"authentication success when the logout popup is enabled."
+msgstr ""
+"Burada yüklediğiniz HTML/PHP dosyası oturum kapatma penceresi "
+"etkinleştirildiğinde kimlik doğrulandıktan sonra gösterilir."
+
+#: usr/local/www/services_captiveportal.php:1088
+msgid ""
+"Changing any settings on this page will disconnect all clients! Don't forget "
+"to enable the DHCP server on your captive portal interface! Make sure that "
+"the default/maximum DHCP lease time is higher than the timeout entered on "
+"this page. Also, the DNS forwarder needs to be enabled for DNS lookups by "
+"unauthenticated clients to work."
+msgstr ""
+"Bu sayfadaki herhangi bir ayarı değiştirmek tüm istemcilerin bağlantısını "
+"kesecektir. Hizmet Portalı arabiriminde DHCP sunucuyu etkinleştirmeyi "
+"unutmayın. DHCP kira süresinin bu sayfada girilen zaman aşımından yüksek "
+"olması gerekir. Ayrıca, kimliği doğrulanmamış istemcilerin DNS sorgularının "
+"çalışması için DNS yönlendiricinin etkinleştirilmesi gerekir."
+
+#: usr/local/www/services_captiveportal_filemanager.php:99
+#, php-format
+msgid "A file with the name '%s' already exists."
+msgstr "%s adında dosya sistemde zaten mevcut."
+
+#: usr/local/www/services_captiveportal_filemanager.php:106
+msgid "The total size of all files uploaded may not exceed "
+msgstr "Tüm dosyaların toplam boyutu şu değeri geçemez "
+
+#: usr/local/www/services_captiveportal_filemanager.php:166
+#: usr/local/www/services_captiveportal_filemanager.php:205
+msgid "add file"
+msgstr "dosya ekle"
+
+#: usr/local/www/services_captiveportal_filemanager.php:177
+msgid "Do you really want to delete this file?"
+msgstr "Bu dosyayı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/services_captiveportal_filemanager.php:177
+msgid "delete file"
+msgstr "dosyayı sil"
+
+#: usr/local/www/services_captiveportal_filemanager.php:184
+msgid "TOTAL"
+msgstr "TOPLAM"
+
+#: usr/local/www/services_captiveportal_filemanager.php:195
+msgid "cancel"
+msgstr "iptal"
+
+#: usr/local/www/services_captiveportal_filemanager.php:215
+msgid ""
+"Any files that you upload here with the filename prefix of captiveportal- "
+"will be made available in the root directory of the captive portal HTTP(S) "
+"server. You may reference them directly from your portal page HTML code "
+"using relative paths. Example: you've uploaded an image with the name "
+"'captiveportal-test.jpg' using the file manager. Then you can include it in "
+"your portal page like this:"
+msgstr ""
+"Burada yükleyeceğiniz tüm dosyalarının adlarının başına captiveportal- "
+"eklenecektir ve Hizmet Portalı HTTP(S) sunucusunun kök dizininden "
+"erişilebilir olacaktır. Portal sayfalarınızın HTML'in bu dosyalara atıfta "
+"bulunabilirsiniz. Örneğin dosya yöneticisini kullanacak 'captiveportal-test."
+"jpg' adlında bir dosya yüklediyseniz, Hizmet Portalı sayfalarınızda şu "
+"şekilde atıfta bulunabilirsiniz:"
+
+#: usr/local/www/services_captiveportal_filemanager.php:222
+msgid ""
+"In addition, you can also upload .php files for execution. You can pass the "
+"filename to your custom page from the initial page by using text similar to:"
+msgstr ""
+"Ek olarak, çalıştırılmak üzere .php dosyaları da yükleyebilirsiniz. "
+"Hazırladığınız özel dosyalara ana dosyadan şuna benzer şekilde atıfta "
+"bulunabilirsiniz:"
+
+#: usr/local/www/services_captiveportal_filemanager.php:225
+msgid "Acceptable usage policy"
+msgstr "Kabul edilebilir kullanım ilkeleri"
+
+#: usr/local/www/services_captiveportal_filemanager.php:227
+#, php-format
+msgid "The total size limit for all files is %s."
+msgstr "Tüm dosyalar için toplam boyut limiti %s."
+
+#: usr/local/www/services_captiveportal_hostname.php:115
+msgid "Allowed IP Addresses"
+msgstr "Ä°zinli IP Adresleri"
+
+#: usr/local/www/services_captiveportal_hostname.php:132
+#: usr/local/www/services_captiveportal_hostname.php:168
+#: usr/local/www/services_captiveportal_ip.php:125
+#: usr/local/www/services_captiveportal_ip.php:165
+msgid "add address"
+msgstr "adres ekle"
+
+#: usr/local/www/services_captiveportal_hostname.php:158
+#: usr/local/www/services_captiveportal_ip.php:155
+msgid "edit address"
+msgstr "adres düzenle"
+
+#: usr/local/www/services_captiveportal_hostname.php:159
+#: usr/local/www/services_captiveportal_ip.php:156
+msgid "Do you really want to delete this address?"
+msgstr "Bu adresi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/services_captiveportal_hostname.php:159
+#: usr/local/www/services_captiveportal_ip.php:156
+msgid "delete address"
+msgstr "adresi sil"
+
+#: usr/local/www/services_captiveportal_hostname.php:177
+msgid ""
+"Adding allowed Hostnames will allow a DNS hostname access to/from access "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example. By specifying <em>from</em> addresses, it "
+"may be used to always allow pass-through access from a client behind the "
+"captive portal."
+msgstr ""
+"Eklenen izinli sunucu adresleri portal sayfalarına yönlendirilmeksizin "
+"trafik gidiş-gelişine izin verilen adreslerdir. Bu özelliği başka bir ağdan "
+"hizmet portalına resim gönderen bir web sunucu gibi sistemlere erişim vermek "
+"ya da başka bir ağdaki DNS sunucuya sorgu yapabilmek için kullanabilirsiniz. "
+"<em>Kaynak</em> adresleri belirterek Hizmet Portalının arkasındaki bir "
+"istemciden bu adrese her zaman eriÅŸim izni verilebilir."
+
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "All connections"
+msgstr "Tüm bağlantılar"
+
+#: usr/local/www/services_captiveportal_hostname.php:181
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "the Hostname are allowed"
+msgstr "Ä°zin verilen hostlar"
+
+#: usr/local/www/services_captiveportal_hostname.php:188
+msgid "from"
+msgstr "kaynak"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:60
+msgid "Edit allowed Hostname"
+msgstr "İzinli host düzenle"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:102
+msgid "Allowed Hostname"
+msgstr "İzin verilen host adı"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:107
+#, php-format
+msgid "A valid Hostname must be specified. [%s]"
+msgstr "Geçerli bir host adı belirtilmelidir. [%s]"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:110
+#: usr/local/www/services_captiveportal_ip_edit.php:112
+#: usr/local/www/services_captiveportal_mac_edit.php:122
+msgid "Upload speed needs to be an integer"
+msgstr "Gönderme hızı tamsayı olmalıdır"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:112
+#: usr/local/www/services_captiveportal_ip_edit.php:115
+#: usr/local/www/services_captiveportal_mac_edit.php:124
+msgid "Download speed needs to be an integer"
+msgstr "İndirme hızı tamsayı olmalıdır"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:119
+#: usr/local/www/services_captiveportal_ip_edit.php:122
+msgid "already allowed"
+msgstr "zaten izinli"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+#: usr/local/www/system_gateways_edit.php:771
+#: usr/local/www/system_gateways_edit.php:783
+msgid "From"
+msgstr "Kaynak"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:167
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+#: usr/local/www/system_gateways_edit.php:774
+#: usr/local/www/system_gateways_edit.php:786
+msgid "To"
+msgstr "Hedef"
+
+# kelime içinde yeri yok herhangi bir veri girmeyiniz tek boşluk bırakılacak.
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+msgid "Use"
+msgstr " "
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:175
+msgid ""
+"to always allow an Hostname through the captive portal (without "
+"authentication)"
+msgstr ""
+"İstemciyi (kimlik doğrulamaya tabi tutmadan) hizmet portalından geçişine "
+"izin ver"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:176
+msgid ""
+"to allow access from all clients (even non-authenticated ones) behind the "
+"portal to this Hostname"
+msgstr ""
+"tüm istemcilerden (kimliği doğrulanmamış olanlar dahil) bu sunucuya erişim "
+"ver"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:192
+#: usr/local/www/services_captiveportal_ip_edit.php:210
+#: usr/local/www/services_captiveportal_mac_edit.php:226
+msgid "Bandwidth up"
+msgstr "Gönderme bantgenişliği"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:195
+msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s"
+msgstr "Kbit/sn cinsinden bu sunucuya veri gönderme hızı belirleyin"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:198
+#: usr/local/www/services_captiveportal_ip_edit.php:217
+#: usr/local/www/services_captiveportal_mac_edit.php:234
+msgid "Bandwidth down"
+msgstr "Ä°ndirme bantgeniÅŸliÄŸi"
+
+#: usr/local/www/services_captiveportal_hostname_edit.php:201
+msgid "Enter a download limit to be enforced on this Hostname in Kbit/s"
+msgstr "Kbit/sn cinsinden bu sunucudan veri indirme hızı belirleyin"
+
+#: usr/local/www/services_captiveportal_ip.php:174
+msgid ""
+"Adding allowed IP addresses will allow IP access to/from these addresses "
+"through the captive portal without being taken to the portal page. This can "
+"be used for a web server serving images for the portal page or a DNS server "
+"on another network, for example."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_ip_edit.php:61
+msgid "Edit allowed IP address"
+msgstr "İzinli IP adresini düzenle"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:101
+msgid "Allowed IP address"
+msgstr "Ä°zinli IP adresi"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:101
+#: usr/local/www/services_dhcp.php:810 usr/local/www/services_dhcpv6.php:561
+msgid "Subnet mask"
+msgstr "AltaÄŸ maskesi"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:109
+msgid "A valid subnet mask must be specified"
+msgstr "Geçerli bir Alt Ağ maskesi belirtin"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:187
+msgid "Edit allowed ip rule"
+msgstr "İzinli IP kuralını düzenle"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:199
+msgid "IP address and subnet mask. Use /32 for a single IP"
+msgstr "IP adresi ve altağ maskesi. Tek IP için /32 kullanınız"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:213
+msgid "Enter a upload limit to be enforced on this IP address in Kbit/s"
+msgstr "Kbit/sn cinsinden bu IP adresine veri gönderme hızı sınırını girin"
+
+#: usr/local/www/services_captiveportal_ip_edit.php:220
+msgid "Enter a download limit to be enforced on this IP address in Kbit/s"
+msgstr "Kbit/sn cinsinden bu IP adresinden veri çekme hızı sınırını girin"
+
+#: usr/local/www/services_captiveportal_mac.php:82
+msgid "No entry exists yet!"
+msgstr "Henüz herhangi bir kayıt girilmemiş!"
+
+#: usr/local/www/services_captiveportal_mac.php:86
+msgid "Please set the zone on which the operation should be allowed"
+msgstr "Lütfen bu alanı izin verilecek işleme göre ayarlayınız"
+
+#: usr/local/www/services_captiveportal_mac.php:98
+msgid "No entry exists for this username:"
+msgstr "Bu kullanıcı için hehangi bir kayıt bulunamadı:"
+
+#: usr/local/www/services_captiveportal_mac.php:117
+msgid "The entry was sucessfully deleted"
+msgstr "Kayıt başarıyla silindi"
+
+#: usr/local/www/services_captiveportal_mac.php:119
+msgid "No entry exists for this mac address:"
+msgstr "Bu MAC adresi için kayıt bulunamadı:"
+
+#: usr/local/www/services_captiveportal_mac.php:150
+msgid ""
+"The captive portal MAC address configuration has been changed.<br />You must "
+"apply the changes in order for them to take effect."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac.php:191
+msgid "edit host"
+msgstr "host düzenle"
+
+#: usr/local/www/services_captiveportal_mac.php:194
+#: usr/local/www/services_dnsmasq.php:398
+#: usr/local/www/services_unbound.php:466
+msgid "Do you really want to delete this host?"
+msgstr "Bu hostu silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/services_captiveportal_mac.php:195
+msgid "delete host"
+msgstr "host sil"
+
+#: usr/local/www/services_captiveportal_mac.php:208
+msgid "add host"
+msgstr "host ekle"
+
+#: usr/local/www/services_captiveportal_mac.php:216
+msgid ""
+"Adding MAC addresses as 'pass' MACs allows them access through the captive "
+"portal automatically without being taken to the portal page."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:61
+#: usr/local/www/services_captiveportal_mac_edit.php:183
+msgid "Edit MAC address rules"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:113
+#, php-format
+msgid ""
+"The MAC address %s belongs to a local interface, you cannot use it here."
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:118
+msgid "A valid MAC address must be specified"
+msgstr "Geçerli bir MAC adresi belirtilmelidir"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:131
+#: usr/local/www/services_captiveportal_zones_edit.php:70
+msgid "already exists"
+msgstr "zaten mevcut"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:201
+msgid "Choose what to do with packets coming from this MAC address"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_mac_edit.php:213
+#: usr/local/www/services_dhcp_edit.php:382
+msgid "Copy my MAC address"
+msgstr "Mac adresimi kopyala"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:215
+msgid "MAC address (6 hex octets separated by colons)"
+msgstr ""
+"MAC adresi (birbirinden : ile ayrılmış 6 adet çift basamaklı onaltılık sayı)"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:230
+msgid "Enter a upload limit to be enforced on this MAC address in Kbit/s"
+msgstr "Bu MAC adresi için Kbit/sn cinsinden veri gönderme limiti giriniz"
+
+#: usr/local/www/services_captiveportal_mac_edit.php:238
+msgid "Enter a download limit to be enforced on this MAC address in Kbit/s"
+msgstr "Bu MAC adresi için Kbit/sn cinsinden veri indirme limiti giriniz"
+
+#: usr/local/www/services_captiveportal_vouchers.php:67
+msgid ""
+"You will need to recreate any existing Voucher Rolls due to the public and "
+"private key changes. Click cancel if you do not wish to recreate the "
+"vouchers."
+msgstr ""
+"Genel ve özel anahtarlar değiştiği için Bilet Gruplarının yeniden "
+"hazırlanması gerekir. Eğer biletleri yeniden oluşturmak istemiyorsanız "
+"İptal'e tıklayın."
+
+#: usr/local/www/services_captiveportal_vouchers.php:133
+msgid "Voucher invalid"
+msgstr "Bilet geçersiz"
+
+#: usr/local/www/services_captiveportal_vouchers.php:135
+msgid "Voucher expired"
+msgstr "Biletin süresi doldu"
+
+#: usr/local/www/services_captiveportal_vouchers.php:158
+msgid "Cannot write private key file"
+msgstr "Özel anahtar dosyası yazılamadı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:178
+msgid "Need private RSA key to print vouchers"
+msgstr "Biletlerin yazdırılması için RSA özel anahtarına ihtiyaç duyulmaktadır"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "charset"
+msgstr "karakter kümesi"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "rollbits"
+msgstr "grup bit sayısı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "ticketbits"
+msgstr "bilet bit sayısı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "checksumbits"
+msgstr "kontrol bit sayısı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "publickey"
+msgstr "genel anahtar"
+
+#: usr/local/www/services_captiveportal_vouchers.php:213
+msgid "magic"
+msgstr "özel"
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+#: usr/local/www/services_captiveportal_vouchers.php:603
+msgid "Synchronize Voucher Database IP"
+msgstr "Bilet Veritabanı IP Adresi"
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync port"
+msgstr "Senkron portu"
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync password"
+msgstr "Senkron parolası"
+
+#: usr/local/www/services_captiveportal_vouchers.php:216
+msgid "Sync username"
+msgstr "Senkron kullanıcı adı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:225
+msgid "Need at least 2 characters to create vouchers."
+msgstr "Bilet oluşturmak için en az 2 karater gerekir."
+
+#: usr/local/www/services_captiveportal_vouchers.php:227
+msgid "Double quotes aren't allowed."
+msgstr "Çift tırnak kullanılamaz."
+
+#: usr/local/www/services_captiveportal_vouchers.php:229
+msgid "aren't allowed."
+msgstr "kullanılamaz."
+
+#: usr/local/www/services_captiveportal_vouchers.php:231
+msgid "# of Bits to store Roll Id needs to be between 1..31."
+msgstr "# Grup Kimliğinin saklanacağı bit sayısı 1 ile 31 arasında olmalıdır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:233
+msgid "# of Bits to store Ticket Id needs to be between 1..16."
+msgstr "# Bilet Kimliğinin saklanacağı bit sayısı 1 ile 16 arasında olmalıdır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:235
+msgid "# of Bits to store checksum needs to be between 1..31."
+msgstr ""
+"# Kontrol değerinin saklanacağı bit sayısı 1 ile 31 arasında olmalıdır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:237
+msgid "This doesn't look like an RSA Public key."
+msgstr "Bu bir RSA Ortak anahtarına benzemiyor."
+
+#: usr/local/www/services_captiveportal_vouchers.php:239
+msgid "This doesn't look like an RSA Private key."
+msgstr "Bu bir RSA Özel anahtarına benzemiyor."
+
+#: usr/local/www/services_captiveportal_vouchers.php:241
+msgid "You cannot sync the voucher database to this host (itself)."
+msgstr "Bilet veritabanını bu sunucuya (kendisine) senkron edemezsiniz."
+
+#: usr/local/www/services_captiveportal_vouchers.php:459
+msgid "Enable Vouchers"
+msgstr "Biletleri EtkinleÅŸtir"
+
+#: usr/local/www/services_captiveportal_vouchers.php:464
+#: usr/local/www/status_captiveportal.php:117
+#: usr/local/www/status_captiveportal_expire.php:74
+#: usr/local/www/status_captiveportal_test.php:74
+#: usr/local/www/status_captiveportal_voucher_rolls.php:58
+#: usr/local/www/status_captiveportal_voucher_rolls.php:79
+#: usr/local/www/status_captiveportal_vouchers.php:112
+msgid "Voucher Rolls"
+msgstr "Bilet Grupları"
+
+#: usr/local/www/services_captiveportal_vouchers.php:473
+#: usr/local/www/services_captiveportal_vouchers_edit.php:174
+#: usr/local/www/status_captiveportal_vouchers.php:124
+msgid "Roll"
+msgstr "Grup"
+
+#: usr/local/www/services_captiveportal_vouchers.php:474
+#: usr/local/www/status_captiveportal_voucher_rolls.php:91
+msgid "Minutes/Ticket"
+msgstr "Dakika/Bilet"
+
+#: usr/local/www/services_captiveportal_vouchers.php:475
+msgid "of Tickets"
+msgstr "Bilette"
+
+#: usr/local/www/services_captiveportal_vouchers.php:476
+#: usr/local/www/services_captiveportal_vouchers_edit.php:198
+#: usr/local/www/status_captiveportal_voucher_rolls.php:93
+msgid "Comment"
+msgstr "Yorum"
+
+#: usr/local/www/services_captiveportal_vouchers.php:496
+msgid "edit voucher"
+msgstr "bilet düzenle"
+
+#: usr/local/www/services_captiveportal_vouchers.php:497
+msgid ""
+"Do you really want to delete this voucher? This makes all vouchers from this "
+"roll invalid"
+msgstr ""
+"Bu bileti silmek istediğinize emin misiniz? Bu eylem bu gruptaki tüm "
+"biletleri geçersiz kılar"
+
+#: usr/local/www/services_captiveportal_vouchers.php:497
+msgid "delete vouchers"
+msgstr "biletleri sil"
+
+#: usr/local/www/services_captiveportal_vouchers.php:498
+msgid "generate vouchers for this roll to CSV file"
+msgstr "bu gruptaki biletleri CSV dosyasına yaz"
+
+#: usr/local/www/services_captiveportal_vouchers.php:508
+msgid "add voucher"
+msgstr "bilet ekle"
+
+#: usr/local/www/services_captiveportal_vouchers.php:513
+msgid ""
+"Create, generate and activate Rolls with Vouchers that allow access through "
+"the captive portal for the configured time. Once a voucher is activated, its "
+"clock is started and runs uninterrupted until it expires. During that time, "
+"the voucher can be re-used from the same or a different computer. If the "
+"voucher is used again from another computer, the previous session is stopped."
+msgstr ""
+"Hizmet Portalında istenen zaman aralığında kullanılmak üzere bilet(ler) "
+"oluÅŸturup etkinleÅŸtirebilirsiniz. Bir bilet etkinleÅŸtirildiÄŸinde saati "
+"başlar ve süresi dolana kadar kesintisiz devam eder. Bu süre zarfında bilet "
+"aynı bilgisayardan veya farklı bilgisayardan kullanılabilir. Eğer bilet "
+"farklı bir bilgisayarda kullanılırsa önceki oturum kapatılır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:519
+msgid ""
+"Enable Voucher support first using the checkbox above and hit Save at the "
+"bottom."
+msgstr ""
+"Bilet desteğini etkinleştirmek için aşağıdaki seçim kutusunu işaretleyip "
+"Kaydet'e tıklayın."
+
+#: usr/local/www/services_captiveportal_vouchers.php:525
+msgid "Voucher public key"
+msgstr "Bilet ortak anahtarı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+msgid ""
+"Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is "
+"used to decrypt vouchers."
+msgstr ""
+"Buraya PEM formatında bir RSA ortak anahtarı (64 bit veya daha küçük) "
+"yapıştırın. Bu anahtar biletleri çözümlemede kullanılır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid "Generate"
+msgstr "OluÅŸtur"
+
+#: usr/local/www/services_captiveportal_vouchers.php:530
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid "new key"
+msgstr "yeni anahtar"
+
+#: usr/local/www/services_captiveportal_vouchers.php:533
+msgid "Voucher private key"
+msgstr "Bilet özel anahtarı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:537
+msgid ""
+"Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is "
+"only used to generate encrypted vouchers and doesn't need to be available if "
+"the vouchers have been generated offline."
+msgstr ""
+"Buraya PEM formatında bir RSA özel anahtarı (64 bit veya daha küçük) "
+"yapıştırın. Bu anahtar sadece şifrelenmiş biletleri oluştururken kullanılır "
+"ve bilet çevrimdışı olarak oluşturulmuşsa erişilebilir durumda olması "
+"gerekmez."
+
+#: usr/local/www/services_captiveportal_vouchers.php:540
+msgid "Character set"
+msgstr "Karakter kümesi"
+
+#: usr/local/www/services_captiveportal_vouchers.php:544
+msgid ""
+"Tickets are generated with the specified character set. It should contain "
+"printable characters (numbers, lower case and upper case letters) that are "
+"hard to confuse with others. Avoid e.g. 0/O and l/1."
+msgstr ""
+"Biletler belirtilen karakter kümesinde oluşturulur. Diğer karakterlerle "
+"karıştırılmayacak alfanümerik karakterler (rakamlar, büyük ve küçük harfler) "
+"içermelidir. O (harf), 0 (sıfır), l (harf) ve 1 (bir) gibi karakterler "
+"kullanmaktan kaçının."
+
+#: usr/local/www/services_captiveportal_vouchers.php:548
+msgid "of Roll Bits"
+msgstr "Grup Bitleri"
+
+#: usr/local/www/services_captiveportal_vouchers.php:552
+msgid ""
+"Reserves a range in each voucher to store the Roll # it belongs to. Allowed "
+"range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the "
+"RSA key size."
+msgstr ""
+"Her bilette biletin ait olduğu grup numarasını saklamak için bir aralığı "
+"ayırır. İzin verilen bit sayısı 1 ile 31 arasıdır. Grup, Bilet ve Kontrol "
+"toplamı bitleri toplam sayısı RSA anahtar boyutundan bir düşük olmalıdır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:556
+msgid "of Ticket Bits"
+msgstr "Bilet bitleri"
+
+#: usr/local/www/services_captiveportal_vouchers.php:560
+msgid ""
+"Reserves a range in each voucher to store the Ticket# it belongs to. Allowed "
+"range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A "
+"bit array, stored in RAM and in the config, is used to mark if a voucher has "
+"been used. A bit array for 65535 vouchers requires 8 KB of storage."
+msgstr ""
+"Her bilette bilet kimliğini saklamak için bir aralığı ayırır. İzin verilen "
+"bit sayısı 1 ile 16 arasındadır. 16 bit kullanılması bir bilet grubunda "
+"65535 bilet olmasına olanak verir. Oluşan dizeler RAMda ve sistem "
+"yapılandırma dosyasında tutulur ve biletin kullanımda olup olmadığı oradan "
+"takip edilir. 65535 biletli bir dize 8KB depolama alanı gerektirir."
+
+#: usr/local/www/services_captiveportal_vouchers.php:564
+msgid "of Checksum Bits"
+msgstr "Kontrol Toplamı Bitleri"
+
+#: usr/local/www/services_captiveportal_vouchers.php:568
+msgid ""
+"Reserves a range in each voucher to store a simple checksum over Roll # and "
+"Ticket#. Allowed range is 0..31."
+msgstr ""
+"Her biletin bir kısmını grup ve bilet kimliklerinin kontrol toplamını "
+"saklamak için ayırır. İzin verilen aralık 0-31dir."
+
+#: usr/local/www/services_captiveportal_vouchers.php:572
+msgid "Magic Number"
+msgstr "Özel Numara"
+
+#: usr/local/www/services_captiveportal_vouchers.php:576
+msgid ""
+"Magic number stored in every voucher. Verified during voucher check. Size "
+"depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits "
+"are used, no magic number will be used and checked."
+msgstr ""
+"Her bilette saklanan özel numara. Bilet kontrolü sırasında doğrulanır. "
+"Boyutu grup, bilet ve kontrol toplamı için kaç bit ayrıldığına bağlıdır. Tüm "
+"bitler kullanımdaysa özel numara kullanılmaz ve kontrol edilmez."
+
+#: usr/local/www/services_captiveportal_vouchers.php:580
+msgid "Invalid Voucher Message"
+msgstr "Geçersiz Bilet Mesajı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:583
+msgid ""
+"Error message displayed for invalid vouchers on captive portal error page"
+msgstr ""
+"Hizmet Portalında geçersiz bilet kullanıldığında hata sayfasında "
+"gösterilecek hata mesajı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:587
+msgid "Expired Voucher Message"
+msgstr "Süresi Geçmiş Bilet Mesajı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:590
+msgid ""
+"Error message displayed for expired vouchers on captive portal error page"
+msgstr ""
+"Hizmet Portalında süresi dolmuş bilet kullanıldığında hata sayfasında "
+"gösterilecek hata mesajı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:600
+msgid "Voucher database synchronization"
+msgstr "Bilet veritabanı senkronizasyonu"
+
+#: usr/local/www/services_captiveportal_vouchers.php:606
+msgid ""
+"IP address of master nodes webConfigurator to synchronize voucher database "
+"and used vouchers from."
+msgstr ""
+"webArayüzü bilet veritabanını ve kullanılmış biletleri senkronize edeceği IP "
+"adresi."
+
+#: usr/local/www/services_captiveportal_vouchers.php:607
+msgid "NOTE: this should be setup on the slave nodes and not the primary node!"
+msgstr "NOT: Bu ayar ana uçta değil diğer uçlarda yapılmalıdır!"
+
+#: usr/local/www/services_captiveportal_vouchers.php:611
+msgid "Voucher sync port"
+msgstr "Bilet senkronizasyon portu"
+
+#: usr/local/www/services_captiveportal_vouchers.php:614
+msgid ""
+"This is the port of the master voucher nodes webConfigurator. Example: 443"
+msgstr ""
+"webArayüzü bilet verilerinin senkronizasyonu için kullanılacak porttur. "
+"Örnek: 443"
+
+#: usr/local/www/services_captiveportal_vouchers.php:618
+msgid "Voucher sync username"
+msgstr "Bilet senkronizasyon kullanıcı adı"
+
+#: usr/local/www/services_captiveportal_vouchers.php:621
+msgid "This is the username of the master voucher nodes webConfigurator."
+msgstr "webArayüzü ana bilet düğümlerinde verilecek kullanıcı adı."
+
+#: usr/local/www/services_captiveportal_vouchers.php:625
+msgid "Voucher sync password"
+msgstr "Bilet senkronizasyon parolası"
+
+#: usr/local/www/services_captiveportal_vouchers.php:628
+msgid "This is the password of the master voucher nodes webConfigurator."
+msgstr "webArayüzü ana bilet düğümlerinde verilecek parola."
+
+#: usr/local/www/services_captiveportal_vouchers.php:643
+msgid ""
+"Changing any Voucher parameter (apart from managing the list of Rolls) on "
+"this page will render existing vouchers useless if they were generated with "
+"different settings."
+msgstr ""
+"Bu sayfadaki herhangi bir Bilet parametresini deÄŸiÅŸtirmek (grup listesi "
+"yönetimi dışında) varolan biletleri (eğer farklı ayarlarla "
+"oluşturulmuşlarsa) geçersiz kılacaktır."
+
+#: usr/local/www/services_captiveportal_vouchers.php:645
+msgid ""
+"Specifying the Voucher Database Synchronization options will not record any "
+"other value from the other options. They will be retrieved/synced from the "
+"master."
+msgstr ""
+"Bilet Veritabanı Senkronizasyon ayarları yapılırsa diğer seçenekler "
+"kaydedilmez, ana uçtan alınır/senkronize edilir."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:46
+msgid "Edit Voucher Rolls"
+msgstr "Bilet Gruplarını Yönet"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:94
+#: usr/local/www/services_dhcp.php:1156 usr/local/www/services_dhcpv6.php:789
+msgid "Number"
+msgstr "Sıra"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:101
+#, php-format
+msgid "Roll number %s already exists."
+msgstr "Grup numarası %s zaten var."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:107
+#, php-format
+msgid "Roll number must be numeric and less than %s"
+msgstr "Grup numarası sayı olmalıdır ve %s sayısından küçük olmalıdır"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:110
+#, php-format
+msgid "A roll has at least one voucher and less than %s."
+msgstr "Bir grubun %s sayısından düşük olmak kaydıyla en az bir bileti var."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:113
+msgid "Each voucher must be good for at least 1 minute."
+msgstr "Her bilet en az 1 dakika kullanılabilir olmalıdır."
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:134
+#, php-format
+msgid "All %1$s vouchers from Roll %2$s marked unused"
+msgstr "%2$s grubundaki tüm %1$s bilet kullanılmadı olarak işaretlendi"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:178
+msgid "Enter the Roll"
+msgstr "Grubu gir"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:178
+msgid "found on top of the generated/printed vouchers"
+msgstr "oluşurulmuş veya yazdırılmış bilet listesinin üstünde"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:182
+msgid "Minutes per Ticket"
+msgstr "Dakikadaki Bilet Sayısı"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:186
+msgid ""
+"Defines the time in minutes that a user is allowed access. The clock starts "
+"ticking the first time a voucher is used for authentication"
+msgstr ""
+"Kullanıcıya kaç dakika erişim izni verileceğini belirler. Süre bilet kimlik "
+"doğrulama amacıyla kullanıldığı anda başlar"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:194
+msgid "Enter the number of vouchers"
+msgstr "Bilet sayısınız giriniz"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:194
+msgid ""
+"found on top of the generated/printed vouchers. WARNING: Changing this "
+"number for an existing Roll will mark all vouchers as unused again"
+msgstr ""
+"oluşturulmuş/yazdırılmış bilet listesinin üstündeki. UYARI: Mevcut grupta bu "
+"sayıyı değiştirmek tüm biletleri kullanılmamış olarak işaretler"
+
+#: usr/local/www/services_captiveportal_vouchers_edit.php:202
+msgid "Can be used to further identify this roll. Ignored by the system"
+msgstr "Bu bileti tanımada kullanılabilir. Sistem tarafından gözardı edilir"
+
+#: usr/local/www/services_captiveportal_zones.php:64
+msgid "Zones"
+msgstr "Bölgeler"
+
+#: usr/local/www/services_captiveportal_zones.php:75
+msgid "The CaptivePortal entry list has been changed"
+msgstr "Hizmet Portalı girdi listesi değiştirildi"
+
+#: usr/local/www/services_captiveportal_zones.php:80
+#: usr/local/www/services_rfc2136_edit.php:174
+msgid "Zone"
+msgstr "Bölge"
+
+#: usr/local/www/services_captiveportal_zones.php:82
+#: usr/local/www/vpn_pppoe.php:106
+msgid "Number of users"
+msgstr "Kullanıcı sayısı"
+
+#: usr/local/www/services_captiveportal_zones.php:88
+#: usr/local/www/services_captiveportal_zones.php:129
+msgid "add a new captiveportal instance"
+msgstr "yeni hizmet portalı örneği ekle"
+
+#: usr/local/www/services_captiveportal_zones.php:116
+msgid "edit captiveportal instance"
+msgstr "hizmet portalı örneğini düzenle"
+
+#: usr/local/www/services_captiveportal_zones.php:117
+msgid "delete captiveportal instance"
+msgstr "hizmet portalı örneğini sil"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:46
+msgid "Edit Zones"
+msgstr "Bölgeleri düzenle"
+
+#: usr/local/www/services_captiveportal_zones_edit.php:65
+msgid "The zone name can only contain letters, digits, and underscores (_)."
+msgstr "Bölge adı. Harfler, rakamlar ve sadece alt çizgi (_) içerebilir."
+
+#: usr/local/www/services_captiveportal_zones_edit.php:95
+msgid "Edit Captive Portal Zones"
+msgstr ""
+
+#: usr/local/www/services_captiveportal_zones_edit.php:102
+msgid "Zone name. Can only contain letters, digits, and underscores (_)."
+msgstr "Bölge adı. Harfler, rakamlar ve sadece alt çizgi (_) içerebilir."
+
+#: usr/local/www/services_dhcp.php:249 usr/local/www/services_dhcpv6.php:170
+msgid "Range begin"
+msgstr "Aralık başlangıcı"
+
+#: usr/local/www/services_dhcp.php:249 usr/local/www/services_dhcpv6.php:170
+msgid "Range end"
+msgstr "Aralık sonu"
+
+#: usr/local/www/services_dhcp.php:254 usr/local/www/services_dhcp.php:256
+#: usr/local/www/services_dhcpv6.php:175 usr/local/www/services_dhcpv6.php:179
+#: usr/local/www/services_dhcpv6.php:181
+msgid "A valid range must be specified."
+msgstr "Geçerli bir aralık belirtilmelidir."
+
+#: usr/local/www/services_dhcp.php:258
+#: usr/local/www/services_dhcp_edit.php:225
+msgid "A valid IP address must be specified for the gateway."
+msgstr "Ağ geçidi için geçerli bir IP adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcp.php:260
+#: usr/local/www/services_dhcp_edit.php:227
+msgid ""
+"A valid IP address must be specified for the primary/secondary WINS servers."
+msgstr ""
+"Birincil/ikincil WINS sunucular için geçerli bir IP adresi girilmelidir."
+
+#: usr/local/www/services_dhcp.php:265
+#: usr/local/www/services_dhcp_edit.php:233
+#, php-format
+msgid ""
+"The gateway address %s does not lie within the chosen interface's subnet."
+msgstr "Ağ geçidi adresi %s seçili arabirimin altağında değil."
+
+#: usr/local/www/services_dhcp.php:268
+#: usr/local/www/services_dhcp_edit.php:236
+msgid "A valid IP address must be specified for each of the DNS servers."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:271
+#: usr/local/www/services_dhcp_edit.php:239
+#: usr/local/www/services_dhcpv6.php:188
+msgid "The default lease time must be at least 60 seconds."
+msgstr "Varsayılan kira süresi en az 60 saniye olmalıdır."
+
+#: usr/local/www/services_dhcp.php:288
+#, php-format
+msgid ""
+"The Captive Portal zone '%s' has Hard Timeout parameter set to a value "
+"bigger than Default lease time (%s)."
+msgstr ""
+"Hizmet Portalı alanı Mecburi zaman aşımı parametresi değeri '%s' varsayılan "
+"kira süresinden (%s) daha büyük."
+
+#: usr/local/www/services_dhcp.php:293
+#: usr/local/www/services_dhcp_edit.php:241
+#: usr/local/www/services_dhcpv6.php:190
+msgid ""
+"The maximum lease time must be at least 60 seconds and higher than the "
+"default lease time."
+msgstr ""
+"En fazla kira süresi en az 60 saniye olmalıdır ve varsayılan kira süresinden "
+"de yüksek olmak zorundadır."
+
+#: usr/local/www/services_dhcp.php:295
+#: usr/local/www/services_dhcp_edit.php:243
+#: usr/local/www/services_dhcpv6.php:192
+msgid "A valid domain name must be specified for the dynamic DNS registration."
+msgstr "Dinamik DNS kaydı için geçerli bir sunucu adı girilmelidir."
+
+#: usr/local/www/services_dhcp.php:297
+#: usr/local/www/services_dhcp_edit.php:245
+msgid ""
+"A valid primary domain name server IP address must be specified for the "
+"dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:300
+#: usr/local/www/services_dhcp_edit.php:248
+#: usr/local/www/services_dhcpv6.php:197
+msgid "You must specify both a valid domain key and key name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:305
+#: usr/local/www/services_dhcp_edit.php:253
+#: usr/local/www/services_dhcpv6.php:202
+#: usr/local/www/services_router_advertisements.php:155
+msgid "A valid domain search list must be specified."
+msgstr "Geçerli bir domain (alan adı) listesi belirtilmelidir."
+
+#: usr/local/www/services_dhcp.php:313
+msgid ""
+"If you specify a mac allow list, it must contain only valid partial MAC "
+"addresses."
+msgstr ""
+"Eğer mac izin listesi belirtecekseniz, sadece geçerli kısmi MAC adresleri "
+"içerebilir."
+
+#: usr/local/www/services_dhcp.php:315
+msgid ""
+"If you specify a mac deny list, it must contain only valid partial MAC "
+"addresses."
+msgstr ""
+"Eğer mac reddetme listesi belirtecekseniz, sadece geçerli kısmi MAC "
+"adresleri içerebilir."
+
+#: usr/local/www/services_dhcp.php:318
+#: usr/local/www/services_dhcp_edit.php:260
+msgid ""
+"A valid IP address must be specified for the primary/secondary NTP servers."
+msgstr ""
+"Birincil/ikincil NTP sunucular için geçerli bir IP adresi girilmelidir."
+
+#: usr/local/www/services_dhcp.php:320 usr/local/www/services_dhcpv6.php:211
+msgid "A valid domain name must be specified for the DNS domain."
+msgstr "DNS etki alanı için geçerli bir sunucu adı girilmelidir."
+
+#: usr/local/www/services_dhcp.php:322
+#: usr/local/www/services_dhcp_edit.php:262
+msgid "A valid IP address or hostname must be specified for the TFTP server."
+msgstr "TFTP sunucu için geçerli bir host adı ya da IP adresi girilmelidir."
+
+#: usr/local/www/services_dhcp.php:324
+#: usr/local/www/services_dhcp_edit.php:264
+msgid "A valid IP address must be specified for the network boot server."
+msgstr "Ağ açılış (boot) sunucusu olarak geçerli bir IP adresi girilmelidir."
+
+#: usr/local/www/services_dhcp.php:327
+msgid "You cannot use the network address in the starting subnet range."
+msgstr "Ağ adresini altağ sınırı başlangıcı olarak kullanamazsınız."
+
+#: usr/local/www/services_dhcp.php:329
+msgid "You cannot use the broadcast address in the ending subnet range."
+msgstr "Yayın adresini altağ sınırı bitişi olarak kullanamazsınız."
+
+#: usr/local/www/services_dhcp.php:336
+#, php-format
+msgid "The subnet range cannot overlap with virtual IP address %s."
+msgstr "Altağ aralığı sanal IP adresi %s ile çakışamaz."
+
+#: usr/local/www/services_dhcp.php:351
+msgid "Text type cannot include quotation marks."
+msgstr "Metin türü çift veya tek tırnak içeremez."
+
+#: usr/local/www/services_dhcp.php:353
+msgid ""
+"String type must be enclosed in quotes like \"this\" or must be a series of "
+"octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:"
+"cd:ef"
+msgstr ""
+"Dize (string) türü çift tırnakla sarmalanmış (\"bunun\" gibi) olmalıdır veya "
+"iki basamaklı onaltılık 8 sayıdan (01:23:45:67:89:ab:cd:ef gibi) oluşmalıdır"
+
+#: usr/local/www/services_dhcp.php:355
+msgid "Boolean type must be true, false, on, or off."
+msgstr "Boole türü true, false, on veya off olabilir."
+
+#: usr/local/www/services_dhcp.php:357
+msgid "Unsigned 8-bit integer type must be a number in the range 0 to 255."
+msgstr ""
+"İşaretsiz 8 bitlik tamsayı türü 0 ile 255 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/services_dhcp.php:359
+msgid "Unsigned 16-bit integer type must be a number in the range 0 to 65535."
+msgstr ""
+"İşaretsiz 16 bitlik tamsayı türü 0 ile 65535 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/services_dhcp.php:361
+msgid ""
+"Unsigned 32-bit integer type must be a number in the range 0 to 4294967295."
+msgstr ""
+"İşaretsiz 32 bitlik tamsayı türü 0 ile 4294967295 arasında bir tamsayı "
+"olmalıdır."
+
+#: usr/local/www/services_dhcp.php:363
+msgid "Signed 8-bit integer type must be a number in the range -128 to 127."
+msgstr ""
+"İşaretli 8 bitlik tamsayı türü -128 ile 127 arasında bir tamsayı olmalıdır."
+
+#: usr/local/www/services_dhcp.php:365
+msgid ""
+"Signed 16-bit integer type must be a number in the range -32768 to 32767."
+msgstr ""
+"İşaretli 16 bitlik tamsayı türü -32768 ile 32767 arasında bir tamsayı "
+"olmalıdır."
+
+#: usr/local/www/services_dhcp.php:367
+msgid ""
+"Signed 32-bit integer type must be a number in the range -2147483648 to "
+"2147483647."
+msgstr ""
+"İşaretli 32 bitlik tamsayı türü -2147483648 ile 2147483647 arasında bir "
+"tamsayı olmalıdır."
+
+#: usr/local/www/services_dhcp.php:369
+msgid "IP address or host type must be an IP address or host name."
+msgstr "IP adresi veya host adı bir IP adresi veya host adı olmalıdır."
+
+#: usr/local/www/services_dhcp.php:380 usr/local/www/services_dhcpv6.php:239
+msgid "The specified range lies outside of the current subnet."
+msgstr "Belirtilen aralık varolan altağ dışında kalmaktadır."
+
+#: usr/local/www/services_dhcp.php:384 usr/local/www/services_dhcpv6.php:244
+msgid "The range is invalid (first element higher than second element)."
+msgstr "Aralık değeri geçerli değil (İlk sayı ikinciden daha büyük)."
+
+#: usr/local/www/services_dhcp.php:391
+msgid ""
+"The specified range must not be within the DHCP range for this interface."
+msgstr "Belirtilen aralık bu arabirim için DHCP aralığı içinde olmalıdır."
+
+#: usr/local/www/services_dhcp.php:400
+msgid ""
+"The specified range must not be within the range configured on a DHCP pool "
+"for this interface."
+msgstr ""
+"Belirtilen aralık bu arabirim için DHCP havuzunun yapılandırılmış aralığında "
+"olmalıdır."
+
+#: usr/local/www/services_dhcp.php:407 usr/local/www/services_dhcpv6.php:248
+#, php-format
+msgid ""
+"You must disable the DHCP relay on the %s interface before enabling the DHCP "
+"server."
+msgstr ""
+"DHCP sunucuyu etkinleştirmeden önce %s arabirimindeki DHCP aracısını devre "
+"dışı bırakmalısınız."
+
+#: usr/local/www/services_dhcp.php:417 usr/local/www/services_dhcpv6.php:263
+#, php-format
+msgid "The DHCP range cannot overlap any static DHCP mappings."
+msgstr ""
+"DHCP aralığı herhangi bir DHCP statik haritalamasındaki öğelerle örtüşemez."
+
+#: usr/local/www/services_dhcp.php:597
+msgid "DHCP server"
+msgstr "DHCP sunucu"
+
+#: usr/local/www/services_dhcp.php:611
+msgid "Text"
+msgstr "Metin"
+
+#: usr/local/www/services_dhcp.php:611
+msgid "String"
+msgstr "Dize (string)"
+
+#: usr/local/www/services_dhcp.php:611
+msgid "Boolean"
+msgstr "Boole"
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 8-bit integer"
+msgstr "İşaretsiz 8 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 16-bit integer"
+msgstr "İşaretsiz 16 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:612
+msgid "Unsigned 32-bit integer"
+msgstr "İşaretsiz 32 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 8-bit integer"
+msgstr "İşaretli 8 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 16-bit integer"
+msgstr "İşaretli 16 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:613
+msgid "Signed 32-bit integer"
+msgstr "İşaretli 32 bitlik tamsayı"
+
+#: usr/local/www/services_dhcp.php:613
+msgid "IP address or host"
+msgstr "IP adresi yada host"
+
+#: usr/local/www/services_dhcp.php:730 usr/local/www/services_dhcpv6.php:474
+msgid ""
+"DHCP Relay is currently enabled. Cannot enable the DHCP Server service while "
+"the DHCP Relay is enabled on any interface."
+msgstr ""
+"DHCP Aracısı etkin durumda. DHCP sunucu servisi DHCP Aracısı etkin "
+"durumdayken başlatılamaz."
+
+#: usr/local/www/services_dhcp.php:738 usr/local/www/services_dhcpv6.php:482
+msgid "The static mapping configuration has been changed"
+msgstr "Statik haritalama yapılandırması değiştirildi"
+
+#: usr/local/www/services_dhcp.php:760
+msgid ""
+"The DHCP Server can only be enabled on interfaces configured with a static "
+"IPv4 address. This system has none."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:779
+#, php-format
+msgid "Enable DHCP server on %s interface"
+msgstr "%s arabiriminde DHCP sunucuyu etkinleÅŸtir"
+
+#: usr/local/www/services_dhcp.php:785
+msgid ""
+"Editing Pool-Specific Options. To return to the Interface, click its tab "
+"above."
+msgstr ""
+"Havuz özel seçeneklerini düzenle. Arabirime geri dönmek için yukarıdaki "
+"sekmeye tıklayın."
+
+#: usr/local/www/services_dhcp.php:792
+msgid "Deny unknown clients"
+msgstr "Tanınmayan istemcileri reddet"
+
+#: usr/local/www/services_dhcp.php:793
+msgid ""
+"If this is checked, only the clients defined below will get DHCP leases from "
+"this server. "
+msgstr ""
+"Bu seçenek işaretlendiğinde sadece aşağıda belirtilen istemciler sunucudan "
+"DHCP kirası temin edebilirler. "
+
+#: usr/local/www/services_dhcp.php:797
+msgid "Pool Description"
+msgstr "Havuz Açıklaması"
+
+#: usr/local/www/services_dhcp.php:816 usr/local/www/services_dhcpv6.php:567
+msgid "Available range"
+msgstr "Uygun aralık"
+
+#: usr/local/www/services_dhcp.php:844 usr/local/www/services_dhcpv6.php:586
+#: usr/local/www/vpn_l2tp.php:346
+msgid "Subnet Mask"
+msgstr "AltaÄŸ Maskesi"
+
+#: usr/local/www/services_dhcp.php:861 usr/local/www/services_dhcpv6.php:603
+msgid "Range"
+msgstr "Aralık"
+
+#: usr/local/www/services_dhcp.php:869
+msgid "Additional Pools"
+msgstr "Ek Havuzlar"
+
+#: usr/local/www/services_dhcp.php:871
+msgid ""
+"If you need additional pools of addresses inside of this subnet outside the "
+"above Range, they may be specified here."
+msgstr ""
+"Yukardaki aralığın dışında bu altağ içinde eğer ek havuz adreslerine "
+"ihtiyacınız varsa, buradan belirtilebilirsiniz."
+
+#: usr/local/www/services_dhcp.php:874
+msgid "Pool Start"
+msgstr "Havuz Başlangıçı"
+
+#: usr/local/www/services_dhcp.php:875
+msgid "Pool End"
+msgstr "Havuz BitiÅŸi"
+
+#: usr/local/www/services_dhcp.php:903
+msgid "Do you really want to delete this pool?"
+msgstr "Bu havuzu silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/services_dhcp.php:927
+#: usr/local/www/services_dhcp_edit.php:438
+msgid "WINS servers"
+msgstr "WINS sunucular"
+
+#: usr/local/www/services_dhcp.php:934
+#: usr/local/www/services_dhcp_edit.php:445
+#: usr/local/www/services_dhcpv6.php:628
+#: usr/local/www/services_router_advertisements.php:377
+#: usr/local/www/system.php:334 usr/local/www/vpn_pppoe_edit.php:463
+msgid "DNS servers"
+msgstr "DNS sunucular"
+
+#: usr/local/www/services_dhcp.php:940
+#: usr/local/www/services_dhcp_edit.php:451
+#: usr/local/www/services_dhcpv6.php:634
+#: usr/local/www/services_router_advertisements.php:383
+msgid ""
+"NOTE: leave blank to use the system default DNS servers - this interface's "
+"IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the "
+"General page."
+msgstr ""
+"Not: Sistem varsayılan DNS sunucusunu kullanmak için boş bırakınız, DNS "
+"yönlendirici etkinse bu arabirimin IPsini, aksi taktirde Genel sayfasında "
+"yapılandırılmış sunucuları giriniz."
+
+#: usr/local/www/services_dhcp.php:947
+msgid ""
+"The default is to use the IP on this interface of the firewall as the "
+"gateway. Specify an alternate gateway here if this is not the correct "
+"gateway for your network. Type \"none\" for no gateway assignment."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:951
+#: usr/local/www/services_dhcp_edit.php:462
+#: usr/local/www/services_dhcpv6.php:638
+msgid "Domain name"
+msgstr "Alan adı"
+
+#: usr/local/www/services_dhcp.php:954
+#: usr/local/www/services_dhcp_edit.php:465
+#: usr/local/www/services_dhcpv6.php:641
+msgid ""
+"The default is to use the domain name of this system as the default domain "
+"name provided by DHCP. You may specify an alternate domain name here."
+msgstr ""
+"Varsayılan davranış DHCP tarafından verilen alan adı olarak bu sistmein alan "
+"adını kullanmaktır. İsterseniz buradan farklı bir alan adı verebilirsiniz."
+
+#: usr/local/www/services_dhcp.php:958
+#: usr/local/www/services_dhcp_edit.php:469
+#: usr/local/www/services_dhcpv6.php:645
+#: usr/local/www/services_router_advertisements.php:388
+msgid "Domain search list"
+msgstr "Alan adı arama listesi"
+
+#: usr/local/www/services_dhcp.php:961
+#: usr/local/www/services_dhcp_edit.php:472
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as separator "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:965
+#: usr/local/www/services_dhcp_edit.php:476
+#: usr/local/www/services_dhcpv6.php:652
+msgid "Default lease time"
+msgstr "Varsayılan kira süresi"
+
+#: usr/local/www/services_dhcp.php:969
+#: usr/local/www/services_dhcp_edit.php:480
+#: usr/local/www/services_dhcpv6.php:656
+msgid ""
+"This is used for clients that do not ask for a specific expiration time."
+msgstr "Kiralarının ne zaman dolacağını sormayan istemciler için kullanılır."
+
+#: usr/local/www/services_dhcp.php:971
+#: usr/local/www/services_dhcp_edit.php:482
+#: usr/local/www/services_dhcpv6.php:658
+msgid "The default is 7200 seconds."
+msgstr "Varsayılan 7200 saniyedir."
+
+#: usr/local/www/services_dhcp.php:975
+#: usr/local/www/services_dhcp_edit.php:486
+#: usr/local/www/services_dhcpv6.php:662
+msgid "Maximum lease time"
+msgstr "Maksimum kira süresi"
+
+#: usr/local/www/services_dhcp.php:979
+#: usr/local/www/services_dhcp_edit.php:490
+#: usr/local/www/services_dhcpv6.php:666
+msgid ""
+"This is the maximum lease time for clients that ask for a specific "
+"expiration time."
+msgstr ""
+"Kiralarının ne zaman dolacağını soran kullanıcılar için en yüksek kira "
+"süresidir."
+
+#: usr/local/www/services_dhcp.php:981
+#: usr/local/www/services_dhcp_edit.php:492
+#: usr/local/www/services_dhcpv6.php:668
+msgid "The default is 86400 seconds."
+msgstr "Varsayılan 86400 saniyedir."
+
+#: usr/local/www/services_dhcp.php:986
+msgid "Failover peer IP:"
+msgstr "Yük aktarma eş IPsi:"
+
+#: usr/local/www/services_dhcp.php:989
+msgid ""
+"Leave blank to disable. Enter the interface IP address of the other "
+"machine. Machines must be using CARP. Interface's advskew determines "
+"whether the DHCPd process is Primary or Secondary. Ensure one machine's "
+"advskew<20 (and the other is >20)."
+msgstr ""
+"Boş bırakarak devre dışı hale getirebilirsiniz. Diğer sistemin IP adresini "
+"giriniz. Her iki sistem de CARP kullanmalıdırlar. Arabirimler advskew DHCPd "
+"işleminin birincil veya ikincil olup olmadığını belirler. Bir makinanın "
+"advskew'i <20 (ve diÄŸer bir >20) olduÄŸundan emin olun."
+
+#: usr/local/www/services_dhcp.php:995 usr/local/www/services_dhcp.php:1246
+msgid "Static ARP"
+msgstr "Statik ARP"
+
+#: usr/local/www/services_dhcp.php:1002
+msgid "Enable Static ARP entries"
+msgstr "Statik ARP girdilerini etkinleÅŸtir"
+
+#: usr/local/www/services_dhcp.php:1007
+msgid ""
+"This option persists even if DHCP server is disabled. Only the machines "
+"listed below will be able to communicate with the firewall on this NIC."
+msgstr ""
+"Bu seçenek, DHCP sunucusu devre dışı olsa bile devam eder. Sadece aşağıda "
+"belirtilen sistemler bu NIC üzerinden güvenlik duvarı ile haberleşebilirler."
+
+#: usr/local/www/services_dhcp.php:1016 usr/local/www/services_dhcpv6.php:672
+msgid "Time format change"
+msgstr "Saat biçimi değiştir"
+
+#: usr/local/www/services_dhcp.php:1025
+msgid "Change DHCP display lease time from UTC to local time."
+msgstr "DHCP izleme kira saatini UTC den yerel saate deÄŸiÅŸtir."
+
+#: usr/local/www/services_dhcp.php:1032
+msgid ""
+"By default DHCP leases are displayed in UTC time. By checking this\n"
+"\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCP interfaces lease time."
+msgstr ""
+"Varsayılan olarak DHCP kiraları UTC zaman dilimine göre görüntülenir. DHCP "
+"kira sürülerini yerel saat diliminde görmek istiyorsanız zaman dilimini "
+"seçmek için bu\n"
+"\t\t\t\t\t\tkutucuÄŸu iÅŸaretleyin."
+
+#: usr/local/www/services_dhcp.php:1044
+#: usr/local/www/services_dhcp_edit.php:499
+#: usr/local/www/services_dhcpv6.php:700
+msgid "Show Dynamic DNS"
+msgstr "Dinamik DNS kayıtlarını göster"
+
+#: usr/local/www/services_dhcp.php:1048
+#: usr/local/www/services_dhcp_edit.php:503
+#: usr/local/www/services_dhcpv6.php:704
+msgid "Enable registration of DHCP client names in DNS."
+msgstr "DHCP istemci adlarının DNSe kaydedilmesini aktif et."
+
+#: usr/local/www/services_dhcp.php:1051
+#: usr/local/www/services_dhcp_edit.php:506
+#: usr/local/www/services_dhcpv6.php:707
+msgid "Note: Leave blank to disable dynamic DNS registration."
+msgstr ""
+"Not: Boş bırakarak dinamik DNS kayıt işlemini devre dışı bırakabilirsiniz."
+
+#: usr/local/www/services_dhcp.php:1052
+#: usr/local/www/services_dhcp_edit.php:507
+#: usr/local/www/services_dhcpv6.php:708
+msgid ""
+"Enter the dynamic DNS domain which will be used to register client names in "
+"the DNS server."
+msgstr ""
+"DNS sunucuda istemci isimlerini kaydetmede kullanılacak dinamik DNS adını "
+"giriniz."
+
+#: usr/local/www/services_dhcp.php:1054
+#: usr/local/www/services_dhcp_edit.php:509
+#: usr/local/www/services_dhcpv6.php:710
+msgid ""
+"Enter the primary domain name server IP address for the dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1056
+#: usr/local/www/services_dhcp_edit.php:511
+#: usr/local/www/services_dhcpv6.php:712
+msgid ""
+"Enter the dynamic DNS domain key name which will be used to register client "
+"names in the DNS server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1058
+#: usr/local/www/services_dhcp_edit.php:513
+#: usr/local/www/services_dhcpv6.php:714
+msgid ""
+"Enter the dynamic DNS domain key secret which will be used to register "
+"client names in the DNS server."
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1063
+msgid "MAC Address Control"
+msgstr "MAC Adres Kontrol"
+
+#: usr/local/www/services_dhcp.php:1066
+msgid "Show MAC Address Control"
+msgstr "MAC Adres Kontrolünü Göster"
+
+#: usr/local/www/services_dhcp.php:1070
+msgid ""
+"Enter a list of partial MAC addresses to allow, comma separated, no spaces, "
+"such as "
+msgstr ""
+"İzin verilen Kısmi MAC adresleri listesini ,virgülle ayrılmış, boşluk "
+"olmadan, ÅŸu ÅŸekilde giriniz "
+
+#: usr/local/www/services_dhcp.php:1072
+msgid ""
+"Enter a list of partial MAC addresses to deny access, comma separated, no "
+"spaces, such as "
+msgstr ""
+"İzin verilmeyen Kısmi MAC adresleri listesini , virgülle ayrılmış, boşluk "
+"olmadan, ÅŸu ÅŸekilde giriniz "
+
+#: usr/local/www/services_dhcp.php:1077
+#: usr/local/www/services_dhcp_edit.php:519
+#: usr/local/www/services_dhcpv6.php:720
+msgid "NTP servers"
+msgstr "NTP sunucular"
+
+#: usr/local/www/services_dhcp.php:1080
+#: usr/local/www/services_dhcp_edit.php:522
+#: usr/local/www/services_dhcpv6.php:723
+msgid "Show NTP configuration"
+msgstr "NTP yapılandırmasını görüntüle"
+
+#: usr/local/www/services_dhcp.php:1089
+#: usr/local/www/services_dhcp_edit.php:531
+#: usr/local/www/services_dhcpv6.php:733
+msgid "TFTP server"
+msgstr "TFTP sunucu"
+
+#: usr/local/www/services_dhcp.php:1092
+#: usr/local/www/services_dhcp_edit.php:534
+#: usr/local/www/services_dhcpv6.php:736
+msgid "Show TFTP configuration"
+msgstr "TFP yapılandırmasını görüntüle"
+
+#: usr/local/www/services_dhcp.php:1096
+#: usr/local/www/services_dhcp_edit.php:538
+#: usr/local/www/services_dhcpv6.php:740
+msgid ""
+"Leave blank to disable. Enter a full hostname or IP for the TFTP server."
+msgstr ""
+"Boş bırakarak devre dış hale getirebilirsiniz. TFP sunucunun IP ya da Host "
+"adını giriniz."
+
+#: usr/local/www/services_dhcp.php:1101 usr/local/www/services_dhcpv6.php:746
+msgid "LDAP URI"
+msgstr "LDAP URI"
+
+#: usr/local/www/services_dhcp.php:1104 usr/local/www/services_dhcpv6.php:749
+msgid "Show LDAP configuration"
+msgstr "LDAP yapılandırmasını görüntüle"
+
+#: usr/local/www/services_dhcp.php:1108 usr/local/www/services_dhcpv6.php:753
+msgid ""
+"Leave blank to disable. Enter a full URI for the LDAP server in the form "
+"ldap://ldap.example.com/dc=example,dc=com"
+msgstr ""
+"Boş bırakarak kapatabilirsiniz. LDAP sunucu URIsini ldap://ldap.ornek.com/"
+"c=example,dc=com"
+
+#: usr/local/www/services_dhcp.php:1113 usr/local/www/services_dhcpv6.php:758
+msgid "Enable network booting"
+msgstr "Ağdan açmayı etkinleştir"
+
+#: usr/local/www/services_dhcp.php:1116 usr/local/www/services_dhcpv6.php:761
+msgid "Show Network booting"
+msgstr "Ağ üzerinden açılma bilgilerini görüntüle"
+
+#: usr/local/www/services_dhcp.php:1120 usr/local/www/services_dhcpv6.php:765
+msgid "Enables network booting."
+msgstr "Ağdan açılmayı etkinleştir."
+
+#: usr/local/www/services_dhcp.php:1122
+msgid "Enter the IP of the"
+msgstr "IPsini girin"
+
+#: usr/local/www/services_dhcp.php:1122
+msgid "next-server"
+msgstr "bir sonraki sunucu"
+
+#: usr/local/www/services_dhcp.php:1124
+msgid "and the default bios filename"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1126
+msgid "and the UEFI 32bit filename "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1128
+msgid "and the UEFI 64bit filename "
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1130
+msgid ""
+"Note: You need both a filename and a boot server configured for this to work!"
+msgstr "Not: Çalışması için hem dosya adı hem de açılma sunucusu girmelisiniz!"
+
+#: usr/local/www/services_dhcp.php:1131
+msgid ""
+"You will need all three filenames and a boot server configured for UEFI to "
+"work!"
+msgstr ""
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "Enter the"
+msgstr "Girin"
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "root-path"
+msgstr "kök yolu"
+
+#: usr/local/www/services_dhcp.php:1132
+#: usr/local/www/services_dhcp_edit.php:420
+#: usr/local/www/services_dhcpv6_edit.php:236
+msgid "string"
+msgstr "dize"
+
+#: usr/local/www/services_dhcp.php:1134
+msgid ""
+"Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname"
+msgstr "Not: Dize formatı: iscsi:(sunucu adı):(protokol):(port):(LUN):hedef ad"
+
+#: usr/local/www/services_dhcp.php:1140 usr/local/www/services_dhcpv6.php:773
+msgid "Additional BOOTP/DHCP Options"
+msgstr "Ek DHCP/BOOTP seçenekleri"
+
+#: usr/local/www/services_dhcp.php:1143 usr/local/www/services_dhcpv6.php:776
+msgid "Show Additional BOOTP/DHCP Options"
+msgstr "Ek DHCP/BOOTP Seçeneklerini Görüntüle"
+
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/services_dhcpv6.php:784
+msgid ""
+"Enter the DHCP option number and the value for each item you would like to "
+"include in the DHCP lease information. For a list of available options "
+"please visit this"
+msgstr ""
+"DHCP kira bilgisine dahil etmek istediğiniz seçeneklerin DHCP seçenek "
+"numaralarını ve değerlerini girin. Seçeneklerin listesi "
+
+#: usr/local/www/services_dhcp.php:1151 usr/local/www/services_dhcpv6.php:784
+msgid "URL"
+msgstr "URL"
+
+#: usr/local/www/services_dhcp.php:1228 usr/local/www/services_dhcpv6.php:841
+msgid "The DNS servers entered in"
+msgstr "Girilen DNS sunucular"
+
+#: usr/local/www/services_dhcp.php:1228 usr/local/www/services_dhcpv6.php:841
+msgid "System: General setup"
+msgstr "Sistem: Genel ayarlar"
+
+#: usr/local/www/services_dhcp.php:1229 usr/local/www/services_dhcpv6.php:842
+msgid "(or the"
+msgstr "(ya da etkinleÅŸtirilmiÅŸse"
+
+#: usr/local/www/services_dhcp.php:1229 usr/local/www/services_dhcpv6.php:842
+#: usr/local/www/services_dnsmasq.php:153
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_dnsmasq_edit.php:182
+msgid "DNS forwarder"
+msgstr "DNS yönlendirici"
+
+#: usr/local/www/services_dhcp.php:1230 usr/local/www/services_dhcpv6.php:843
+msgid "if enabled)"
+msgstr ")"
+
+#: usr/local/www/services_dhcp.php:1230 usr/local/www/services_dhcpv6.php:843
+msgid "will be assigned to clients by the DHCP server."
+msgstr "DHCP sunucu tarafından istemcilere atanacaktır."
+
+#: usr/local/www/services_dhcp.php:1233 usr/local/www/services_dhcpv6.php:846
+msgid "The DHCP lease table can be viewed on the"
+msgstr "DHCP kira tablosuna"
+
+#: usr/local/www/services_dhcp.php:1233
+msgid "Status: DHCP leases"
+msgstr "Durum: DHCP kiraları"
+
+#: usr/local/www/services_dhcp.php:1234 usr/local/www/services_dhcpv6.php:847
+msgid "page."
+msgstr "sayfasından bakabilirsiniz."
+
+#: usr/local/www/services_dhcp.php:1242
+msgid "DHCP Static Mappings for this interface."
+msgstr "DHCP arabirimi için statik eşlemeler."
+
+#: usr/local/www/services_dhcp_edit.php:162
+msgid "Either MAC address or Client identifier must be specified"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:170
+#: usr/local/www/services_dhcpv6_edit.php:122
+msgid "The hostname cannot end with a hyphen according to RFC952"
+msgstr "RFC952'ye göre sunucu adı '-' ile bitemez"
+
+#: usr/local/www/services_dhcp_edit.php:175
+#: usr/local/www/services_dhcpv6_edit.php:127
+#: usr/local/www/services_dnsmasq_edit.php:94
+#: usr/local/www/services_unbound_host_edit.php:96
+#: usr/local/www/system.php:117
+msgid ""
+"A valid hostname is specified, but the domain name part should be omitted"
+msgstr "Sunucu adı geçerli ama alan adı kısmı olmamalı"
+
+#: usr/local/www/services_dhcp_edit.php:186
+msgid "Static ARP is enabled. You must specify an IP address."
+msgstr "Statik ARP etkinleÅŸtirildi. Bir IP adresi belirtmelisiniz."
+
+#: usr/local/www/services_dhcp_edit.php:195
+msgid "This Hostname, IP, MAC address or Client identifier already exists."
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:206
+#, php-format
+msgid "The IP address must not be within the DHCP range for this interface."
+msgstr "IP adresi bu arabirimin DHCP aralığında olmamalıdır."
+
+#: usr/local/www/services_dhcp_edit.php:211
+msgid ""
+"The IP address must not be within the range configured on a DHCP pool for "
+"this interface."
+msgstr ""
+"IP Adresi DHCP havuzunun bu arabirim için yapılandırılmış aralığı içinde "
+"olmalıdır."
+
+#: usr/local/www/services_dhcp_edit.php:220
+#, php-format
+msgid "The IP address must lie in the %s subnet."
+msgstr "IP adresi %s altağında bulunmalıdırlar."
+
+#: usr/local/www/services_dhcp_edit.php:335
+#: usr/local/www/services_dhcpv6_edit.php:185
+msgid "Edit static mapping"
+msgstr "Statik eşlemeyi düzenle"
+
+#: usr/local/www/services_dhcp_edit.php:371
+msgid "Static DHCP Mapping"
+msgstr "Statik DHCP EÅŸleme"
+
+#: usr/local/www/services_dhcp_edit.php:384
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "MAC adresini: xx:xx:xx:xx:xx:xx formatında giriniz"
+
+#: usr/local/www/services_dhcp_edit.php:388
+msgid "Client identifier"
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:398
+msgid "If an IPv4 address is entered, the address must be outside of the pool."
+msgstr "Bir IPv4 adresi girdiyseniz adres havuzu dışında olması gerekir."
+
+#: usr/local/www/services_dhcp_edit.php:400
+msgid ""
+"If no IPv4 address is given, one will be dynamically allocated from the pool."
+msgstr "Hiçbir IPv4 adresi belirtilmemişse dinamik olarak havuzundan ayrılır."
+
+#: usr/local/www/services_dhcp_edit.php:407
+#: usr/local/www/services_dhcpv6_edit.php:223
+msgid "Name of the host, without domain part."
+msgstr "Host adı (alan adı olmadan) girilmelidir."
+
+#: usr/local/www/services_dhcp_edit.php:431
+msgid "ARP Table Static Entry"
+msgstr "ARP tablosu statik girdisi"
+
+#: usr/local/www/services_dhcp_edit.php:434
+msgid "Create an ARP Table Static Entry for this MAC &amp; IP Address pair. "
+msgstr ""
+
+#: usr/local/www/services_dhcp_edit.php:458
+msgid ""
+"The default is to use the IP on this interface of the firewall as the "
+"gateway. Specify an alternate gateway here if this is not the correct "
+"gateway for your network."
+msgstr ""
+"Varsayılan davranış ağ geçidi olarak güvenlik duvarının bu arabiriminin IP "
+"adresini kullanmaktır. Eğer ağınızın ağ geçidi bu değilse buradan farklı bir "
+"ağ geçidi belirtebilirsiniz."
+
+#: usr/local/www/services_dhcp_relay.php:73
+#: usr/local/www/services_dhcpv6_relay.php:74
+msgid "Destination Server"
+msgstr "Hedef Sunucu"
+
+#: usr/local/www/services_dhcp_relay.php:81
+msgid "A valid Destination Server IP address must be specified."
+msgstr "Geçerli bir Hedef Sunucu IP adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcp_relay.php:147
+msgid "DHCP Relay configuration"
+msgstr "DHCP aracısı yapılandırma"
+
+#: usr/local/www/services_dhcp_relay.php:153
+#, php-format
+msgid "Enable DHCP relay on interface"
+msgstr "Bu arabirimde DHCP aracısını aktif et"
+
+#: usr/local/www/services_dhcp_relay.php:178
+#: usr/local/www/services_dhcpv6_relay.php:179
+msgid "Append circuit ID and agent ID to requests"
+msgstr "Ä°steklere devre ve uygulama kimliklerini ekle"
+
+#: usr/local/www/services_dhcp_relay.php:179
+#, php-format
+msgid ""
+"If this is checked, the DHCP relay will append the circuit ID (%s interface "
+"number) and the agent ID to the DHCP request."
+msgstr ""
+"İşaretliyse DHCP aracısı devre kimliğini (%s arabirim numarası) ve uygulama "
+"kimliÄŸini DHCP isteÄŸine ekler."
+
+#: usr/local/www/services_dhcp_relay.php:182
+#: usr/local/www/services_dhcpv6_relay.php:183
+msgid "Destination server"
+msgstr "Hedef sunucu"
+
+#: usr/local/www/services_dhcp_relay.php:186
+msgid ""
+"This is the IP address of the server to which DHCP requests are relayed. You "
+"can enter multiple server IP addresses, separated by commas. Select \"Proxy "
+"requests to DHCP server on WAN subnet\" to relay DHCP packets to the server "
+"that was used on the WAN interface."
+msgstr ""
+"DHCP isteklerinin aktarılacağı sunucunun IP adresidir. Virgülle ayırarak "
+"birden fazla IP adresi girebilirsiniz. DHCP paketlerini WAN arabiriminde "
+"kullanılan sunucuya aktarmak için \"DHCP sunucuya gelen istekleri WAN "
+"altağına yönlendir\"i seçin."
+
+#: usr/local/www/services_dhcpv6.php:177
+msgid "A valid prefix range must be specified."
+msgstr "Geçerli bir Ön-ek aralığı belirtilmelidir."
+
+#: usr/local/www/services_dhcpv6.php:183
+msgid "A valid IPv6 address must be specified for the gateway."
+msgstr "Ağ geçidi için geçerli bir IPv6 adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcpv6.php:185
+#: usr/local/www/services_router_advertisements.php:150
+msgid "A valid IPv6 address must be specified for each of the DNS servers."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:194
+msgid ""
+"A valid primary domain name server IPv4 address must be specified for the "
+"dynamic domain name."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:209
+msgid ""
+"A valid IPv6 address must be specified for the primary/secondary NTP servers."
+msgstr "Ana/ikincil NTP sunucusu için geçerli bir IPv6 adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcpv6.php:213
+msgid "A valid IPv6 address or hostname must be specified for the TFTP server."
+msgstr "TFTP sunucu için geçerli bir IPv6 adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcpv6.php:215
+msgid "A valid URL must be specified for the network bootfile."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:222
+#, php-format
+msgid "The subnet range cannot overlap with virtual IPv6 address %s."
+msgstr "Altağ aralığı sanal IPv6 adresi %s ile çakışamaz."
+
+#: usr/local/www/services_dhcpv6.php:375
+msgid "DHCPv6 server"
+msgstr "DHCPv6 sunucu"
+
+#: usr/local/www/services_dhcpv6.php:520
+msgid ""
+"The DHCPv6 Server can only be enabled on interfaces configured with a static "
+"IPv6 address. This system has none."
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:534
+#: usr/local/www/services_router_advertisements.php:263
+#: usr/local/www/services_router_advertisements.php:272
+msgid "Router Advertisements"
+msgstr "Yönlendirici İlanı"
+
+# 94%
+#: usr/local/www/services_dhcpv6.php:546
+#, php-format
+msgid "Enable DHCPv6 server on %s interface"
+msgstr "%s arabiriminde DHCPv6 sunucuyu etkinleÅŸtir"
+
+#: usr/local/www/services_dhcpv6.php:610
+msgid "Prefix Delegation Range"
+msgstr "Ön-ek Yetilendirme Aralığı"
+
+#: usr/local/www/services_dhcpv6.php:614
+msgid "Prefix Delegation Size"
+msgstr "Ön-Ek Yetkilendirme Boyutu"
+
+#: usr/local/www/services_dhcpv6.php:623
+msgid ""
+"You can define a Prefix range here for DHCP Prefix Delegation. This allows "
+"for \n"
+"\t\t\t\t\tassigning networks to subrouters. The start and end of the range "
+"must end on boundaries of the prefix delegation size."
+msgstr ""
+"DHCP Önek Yetkilendirmesi için Ön-ek aralığını tanılmayın. Bu \n"
+"\t\t\t\t\t Ağ'lara altyönlendiricilerin atanmasına izin verir. Aralığının "
+"başlangıç ​​ve bitişi ön-ek yetkilendirme boyutu sınırlarında bitmelidir."
+
+#: usr/local/www/services_dhcpv6.php:648
+msgid ""
+"The DHCP server can optionally provide a domain search list. Use the "
+"semicolon character as separator"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:681
+msgid "Change DHCPv6 display lease time from UTC to local time."
+msgstr "DHCPv6 izleme kira saatini UTC den yerel saate deÄŸiÅŸtir."
+
+#: usr/local/www/services_dhcpv6.php:688
+msgid ""
+"By default DHCPv6 leases are displayed in UTC time. By checking this \n"
+"\t\t\t\t\t\tbox DHCPv6 lease time will be displayed in local time and set to "
+"time zone selected. This will be used for all DHCPv6 interfaces lease time."
+msgstr ""
+"Varsayılan olarak DHCPv6 kiraları UTC saati olarak görüntülenir. Bu "
+"kutucuÄŸu \n"
+"\t\t\t\t\t\t tıkklayarak DHCPv6 kira saati yerel saat olarak görüntülenir ve "
+"seçilen zaman dilimine ayarlanır. Bu tüm DHCPv6 arabirimleri kira "
+"saatlerinde kullanılır."
+
+#: usr/local/www/services_dhcpv6.php:767
+msgid "Enter the Bootfile URL"
+msgstr ""
+
+#: usr/local/www/services_dhcpv6.php:846
+msgid "Status: DHCPv6 leases"
+msgstr "Durum: DHCPv6 Kiraları"
+
+#: usr/local/www/services_dhcpv6.php:854
+msgid "DHCPv6 Static Mappings for this interface."
+msgstr "DHCPv6 arabirimi için statik eşlemeler."
+
+#: usr/local/www/services_dhcpv6.php:858
+#: usr/local/www/status_dhcpv6_leases.php:418
+#: usr/local/www/status_dhcpv6_leases.php:504
+msgid "DUID"
+msgstr "DUID"
+
+#: usr/local/www/services_dhcpv6_edit.php:115
+#: usr/local/www/services_dhcpv6_edit.php:201
+msgid "DUID Identifier"
+msgstr "DUID Tanımlayıcı"
+
+#: usr/local/www/services_dhcpv6_edit.php:135
+msgid "A valid DUID Identifier must be specified."
+msgstr "Geçerli bir DUID tanımlayıcı belirtilmelidir."
+
+# 75%
+#: usr/local/www/services_dhcpv6_edit.php:144
+msgid "This Hostname, IP or DUID Identifier already exists."
+msgstr "Bu host Adı, IP ya da DUID tanımlayıcı sistemde zaten mevcut."
+
+# 83%
+#: usr/local/www/services_dhcpv6_edit.php:185
+msgid "DHCPv6"
+msgstr "DHCPv6"
+
+# 90%
+#: usr/local/www/services_dhcpv6_edit.php:198
+msgid "Static DHCPv6 Mapping"
+msgstr "Statik DHCPv6 EÅŸleme"
+
+#: usr/local/www/services_dhcpv6_edit.php:205
+msgid "Enter a DUID Identifier in the following format: "
+msgstr "DUID tanımlayıcıyı belirtilen biçimde giriniz: "
+
+#: usr/local/www/services_dhcpv6_edit.php:214
+msgid "If an IPv6 address is entered, the address must be outside of the pool."
+msgstr "Eğer IPv6 adresi girlidiyse bı adres havuzun dışında olmalıdır."
+
+#: usr/local/www/services_dhcpv6_edit.php:216
+msgid ""
+"If no IPv6 address is given, one will be dynamically allocated from the pool."
+msgstr ""
+"EÄŸer verilen bir IPv6 adresi yoksa, biri dinamik olarak havuzdan tahsis "
+"edilecek."
+
+# 96%
+#: usr/local/www/services_dhcpv6_relay.php:82
+msgid "A valid Destination Server IPv6 address must be specified."
+msgstr "Geçerli bir Hedef Sunucu IPv6 adresi belirtilmelidir."
+
+#: usr/local/www/services_dhcpv6_relay.php:148
+msgid "DHCPv6 Relay configuration"
+msgstr "DHCPv6 Aktarma yapılandırması"
+
+#: usr/local/www/services_dhcpv6_relay.php:154
+#, php-format
+msgid "Enable DHCPv6 relay on interface"
+msgstr "DHCPv6 Aktarıcısını arabirimde etkinleştir"
+
+#: usr/local/www/services_dhcpv6_relay.php:172
+msgid "Interfaces without an IPv6 address will not be shown."
+msgstr "IPv6 adresi dışındaki arabirimler gösterilmeyecektir."
+
+#: usr/local/www/services_dhcpv6_relay.php:180
+#, php-format
+msgid ""
+"If this is checked, the DHCPv6 relay will append the circuit ID (%s "
+"interface number) and the agent ID to the DHCPv6 request."
+msgstr ""
+"İşaretliyse DHCPv6 aracısı devre kimliğini (%s arabirim numarası) ve "
+"uygulama kimliÄŸini DHCPv6 isteÄŸine ekler."
+
+#: usr/local/www/services_dhcpv6_relay.php:187
+msgid ""
+"This is the IPv6 address of the server to which DHCPv6 requests are relayed. "
+"You can enter multiple server IPv6 addresses, separated by commas. "
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:94
+#: usr/local/www/system_advanced_admin.php:105
+msgid "You must specify a valid port number"
+msgstr "Geçerli bir port numarası belirtilmelidir"
+
+#: usr/local/www/services_dnsmasq.php:109
+msgid "Invalid custom options"
+msgstr "Özel ayarlar geçersiz"
+
+#: usr/local/www/services_dnsmasq.php:182
+msgid "The DNS forwarder configuration has been changed"
+msgstr "DNS yönlendirici yapılandırılması değiştirildi"
+
+#: usr/local/www/services_dnsmasq.php:186
+msgid "General DNS Forwarder Options"
+msgstr "Genel DNS Yönlendirici Seçenekleri"
+
+#: usr/local/www/services_dnsmasq.php:192
+msgid "Enable DNS forwarder"
+msgstr "DNS yönlendiriciyi etkinleştir"
+
+#: usr/local/www/services_dnsmasq.php:196
+#: usr/local/www/services_unbound.php:337
+msgid "DHCP Registration"
+msgstr "DHCP Kayıt"
+
+#: usr/local/www/services_dnsmasq.php:199
+msgid "Register DHCP leases in DNS forwarder"
+msgstr "DHCP kiralarını DNS yönlendiriciye kaydet"
+
+#: usr/local/www/services_dnsmasq.php:200
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS forwarder, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr ""
+"Bu seçenek açıldığında, DHCP kirası isterken kendi isimlerini belirten "
+"makinalar DNS yönlendiriciye kaydedilir, böylece isimleri çözülebilir. "
+"Ayrıca %sSistem: Genel ayarlar%s sayfasından alan adını da ayarlamalısınız."
+
+#: usr/local/www/services_dnsmasq.php:208
+#: usr/local/www/services_unbound.php:349
+msgid "Static DHCP"
+msgstr "Statik DHCP"
+
+#: usr/local/www/services_dnsmasq.php:211
+msgid "Register DHCP static mappings in DNS forwarder"
+msgstr "DHCP statik eşleşmeleri DNS yönlendiriciye kaydet"
+
+#: usr/local/www/services_dnsmasq.php:212
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS forwarder, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr ""
+"Bu seçenek açıldığında DHCP statik eşlemeleri DNS yönlendiriciye kaydedilir, "
+"böylece isimleri çözülebilir. Ayrıca %sSistem: Genel ayarlar%s sayfasından "
+"alan adını da ayarlamalısınız."
+
+#: usr/local/www/services_dnsmasq.php:219
+msgid "Prefer DHCP"
+msgstr "DHCP Öner"
+
+#: usr/local/www/services_dnsmasq.php:222
+msgid "Resolve DHCP mappings first"
+msgstr "Önce DHCP eşleşmelerini çöz"
+
+#: usr/local/www/services_dnsmasq.php:223
+#, php-format
+msgid ""
+"If this option is set, then DHCP mappings will be resolved before the manual "
+"list of names below. This only affects the name given for a reverse lookup "
+"(PTR)."
+msgstr ""
+"Bu seçenek açıldığında, aşağıda girdiğiniz listeden önce DHCP eşleşmeleri "
+"çözümlenir. Bu sadece tersine çözümleme (PTR) için verilen ismi etkiler."
+
+#: usr/local/www/services_dnsmasq.php:229
+#: usr/local/www/services_unbound.php:330
+msgid "DNS Query Forwarding"
+msgstr "DNS sorgusu iletme"
+
+#: usr/local/www/services_dnsmasq.php:232
+msgid "Query DNS servers sequentially"
+msgstr "DNS sunucularını sırayla sorgular"
+
+#: usr/local/www/services_dnsmasq.php:233
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will query the DNS servers "
+"sequentially in the order specified (<i>System - General Setup - DNS "
+"Servers</i>), rather than all at once in parallel. "
+msgstr ""
+"Bu seçenek seçili ise, %s DNS Yönlendirici (dnsmasq),(<i>Sistem - Genel "
+"Ayarlar - DNS Sunucular</i>), 'de belirtilen DNS sunucularının hepsinde tek "
+"seferde paralel sorgu yapmak yerine, sırayla sorgulama yapar. "
+
+#: usr/local/www/services_dnsmasq.php:242
+msgid "Require domain"
+msgstr "Etki alanı gerekli"
+
+#: usr/local/www/services_dnsmasq.php:243
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward A or AAAA "
+"queries for plain names, without dots or domain parts, to upstream name "
+"servers. If the name is not known from /etc/hosts or DHCP then a \"not found"
+"\" answer is returned. "
+msgstr ""
+"Eğer bu seçenek ayarlanırsa, %s DNS Yönlendirici (dnsmasq), nokta ya da "
+"domain parçaları içermeyen, sade isimlerin A yada AAAA sorgularını, üstdüzey "
+"DNS sunucularına yönlendirmeyecek. Eğer isim bilinen bir /etc/hosts yada "
+"DHCP de değilse \"not found (bulunamadı)\" cevabı ile geri döner. "
+
+#: usr/local/www/services_dnsmasq.php:252
+msgid "Do not forward private reverse lookups"
+msgstr "Özel geri aramaları yönlendirme"
+
+#: usr/local/www/services_dnsmasq.php:253
+#, php-format
+msgid ""
+"If this option is set, %s DNS Forwarder (dnsmasq) will not forward reverse "
+"DNS lookups (PTR) for private addresses (RFC 1918) to upstream name "
+"servers. Any entries in the Domain Overrides section forwarding private \"n."
+"n.n.in-addr.arpa\" names to a specific server are still forwarded. If the IP "
+"to name is not known from /etc/hosts, DHCP or a specific domain override "
+"then a \"not found\" answer is immediately returned. "
+msgstr ""
+"Eğer bu seçenek ayarlanırsa, %s DNS Yönlendirici (dnsmasq), birincil "
+"adresler (RFC 1918) dan üstakış isim sunucuları için ters DNS aramaları "
+"(PTR) yönlendirmesi yapmaz. Etki alanı Üzerine yazılacak alanındaki her "
+"girdi özel yönlendirme \"n.n.n.in-addr.arpa\" isimleri belirtilen sunuclar "
+"halen yönlendirilir. IP den isime bilinmeyen /etc/hosts, DHCP yada özel etki "
+"alanı üzerine yeniden yazmalar \"bulunamadı\" cevabı hemen geri döndürülür. "
+
+#: usr/local/www/services_dnsmasq.php:261
+#: usr/local/www/services_unbound.php:262
+msgid "Listen Port"
+msgstr "Dinlenecek Port"
+
+#: usr/local/www/services_dnsmasq.php:265
+#: usr/local/www/services_unbound.php:267
+msgid ""
+"The port used for responding to DNS queries. It should normally be left "
+"blank unless another service needs to bind to TCP/UDP port 53."
+msgstr ""
+"Bu port DNS sorgularının cevaplasında kullanılır. Başka bir hizmet TCP/UDP "
+"53. porttan bağlanması gerekmedikçe normalde boş bırakılması gerekir."
+
+#: usr/local/www/services_dnsmasq.php:275
+msgid ""
+"Interface IPs used by the DNS Forwarder for responding to queries from "
+"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries "
+"to other interface IPs not selected below are discarded. The default "
+"behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:295
+msgid "Strict Interface Binding"
+msgstr "Sıkı Arabirim Bağlama"
+
+#: usr/local/www/services_dnsmasq.php:297
+msgid ""
+"If this option is set, the DNS forwarder will only bind to the interfaces "
+"containing the IP addresses selected above, rather than binding to all "
+"interfaces and discarding queries to other addresses."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:299
+msgid ""
+"NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to "
+"IPv6 addresses."
+msgstr ""
+"NOT: Ayarlarsanız bu seçenek IPv6 ile ÇALIŞMAZ. dnsmasq IPv6 adresleri ile "
+"baÄŸlanamaz."
+
+#: usr/local/www/services_dnsmasq.php:312
+msgid ""
+"Enter any additional options you would like to add to the dnsmasq "
+"configuration here, separated by a space or newline"
+msgstr ""
+"dnsmasq yapılandırmasına eklemek istediğiniz diğer seçenekleri aralarına "
+"noktalı virgül koyarak veya her birini ayrı satıra yazarak buradan "
+"girebilirsiniz"
+
+#: usr/local/www/services_dnsmasq.php:324
+#, php-format
+msgid ""
+"If the DNS forwarder is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the forwarder. The DNS forwarder will use the DNS servers "
+"entered in %sSystem: General setup%s or those obtained via DHCP or PPP on "
+"WAN if the &quot;Allow DNS server list to be overridden by DHCP/PPP on "
+"WAN&quot; is checked. If you don't use that option (or if you use a static "
+"IP address on WAN), you must manually specify at least one DNS server on the "
+"%sSystem:General setup%s page."
+msgstr ""
+"DHCP yönlendirici etkinleştirildiğinde DHCP servisi (açıksa) LAN IP adresini "
+"DHCP istemcilere LAN DNS sunucu olarak bildirir, böylece istemciler "
+"yönlendiriciyi kullanır. DNS yönlendirici de %sSystem: Genel ayarlar%s "
+"sayfasında girilen veya DHCP ya da (&quot;WAN üzerinden DHCP/PPPnin DNS "
+"sunucu listesinin üzerine yazmasına izin ver&quot; açıksa) WAN üzerinden PPP "
+"ile alınan DNS sunucuları kullanır. O seçeneği kullanmıyorsanız (veya WAN "
+"tarafında statik IP kullanıyorsanız), %sSistem: Genel ayarlar%s sayfasında "
+"en az bir DNS sunucu belirtmelisiniz."
+
+#: usr/local/www/services_dnsmasq.php:340
+#: usr/local/www/services_unbound.php:408
+msgid "Host Overrides"
+msgstr "Host Ãœzerine yaz"
+
+#: usr/local/www/services_dnsmasq.php:344
+#: usr/local/www/services_unbound.php:412
+msgid ""
+"Entries in this section override individual results from the forwarders."
+msgstr ""
+"Bu bölümdeki girdiler yönlendiricilerdeki özel sonuçların üzerine yazar."
+
+#: usr/local/www/services_dnsmasq.php:345
+#: usr/local/www/services_unbound.php:413
+msgid "Use these for changing DNS results or for adding custom DNS records."
+msgstr ""
+"Bunu DNS sonuçlarını değiştirmede yada özel DNS kayıtlarını eklemede "
+"kullanın."
+
+#: usr/local/www/services_dnsmasq.php:353
+#: usr/local/www/services_dnsmasq.php:440
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:76
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:134
+#: usr/local/www/services_dnsmasq_edit.php:85
+#: usr/local/www/services_dnsmasq_edit.php:223
+#: usr/local/www/services_dnsmasq_edit.php:257
+#: usr/local/www/services_unbound.php:421
+#: usr/local/www/services_unbound.php:508
+#: usr/local/www/services_unbound_domainoverride_edit.php:71
+#: usr/local/www/services_unbound_domainoverride_edit.php:127
+#: usr/local/www/services_unbound_host_edit.php:87
+#: usr/local/www/services_unbound_host_edit.php:224
+#: usr/local/www/services_unbound_host_edit.php:260
+#: usr/local/www/system.php:108 usr/local/www/system.php:323
+msgid "Domain"
+msgstr "Alan adı"
+
+#: usr/local/www/services_dnsmasq.php:430
+#: usr/local/www/services_unbound.php:498
+msgid "Domain Overrides"
+msgstr "Alan adı Üzerine yaz"
+
+#: usr/local/www/services_dnsmasq.php:433
+msgid ""
+"Entries in this area override an entire domain, and subdomains, by "
+"specifying an authoritative DNS server to be queried for that domain."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq.php:479
+#: usr/local/www/services_unbound.php:552
+msgid "Do you really want to delete this domain override?"
+msgstr "Bu alan adı üzerine yazmayı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:87
+#: usr/local/www/services_unbound_domainoverride_edit.php:82
+msgid "A valid domain must be specified after _msdcs."
+msgstr "Geçerli bir domain (alan adı) _msdcs den sonra belirtilmelidir."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:91
+#: usr/local/www/services_dnsmasq_edit.php:100
+#: usr/local/www/services_unbound_domainoverride_edit.php:84
+#: usr/local/www/services_unbound_host_edit.php:102
+msgid "A valid domain must be specified."
+msgstr "Geçerli bir alan adı belirtilmelidir."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:94
+msgid ""
+"A valid IP address must be specified, or # for an exclusion or ! to not "
+"forward at all."
+msgstr ""
+"Ya geçerli bir IP adresi ya da dışta bırakma için # girilmelidir! yada "
+"tamamı yönlendirilmez."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:97
+msgid "An interface IP address must be specified for the DNS query source."
+msgstr "Arabirim IP adresi DNS sorgu kaynağı için belirtilmelidir."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:122
+#: usr/local/www/services_unbound_domainoverride_edit.php:115
+msgid "Edit Domain Override"
+msgstr "Alan Adı Üzerine yaz'ı Değiştir"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:137
+#: usr/local/www/services_unbound_domainoverride_edit.php:131
+msgid "Domain to override (NOTE: this does not have to be a valid TLD!)"
+msgstr "Üzerine yazılacak alan adı (Not: Geçerli bir TLD olması gerekmez.)"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+msgid "test"
+msgstr "test"
+
+# boş bırakınız cümle içinde gereksiz olabilir.
+#
+# "Olabilir cümlesi emin olunmadığını gösteriyor, anlamlı kelimelerin mutlaka karşılığı yazılmalıdır." A.Y.
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:138
+#: usr/local/www/services_dnsmasq_edit.php:234
+#: usr/local/www/services_unbound_domainoverride_edit.php:132
+#: usr/local/www/services_unbound_host_edit.php:236
+msgid "or"
+msgstr " veya"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:144
+#: usr/local/www/services_unbound_domainoverride_edit.php:141
+msgid "IP address of the authoritative DNS server for this domain"
+msgstr "Bu alan adı için otorite olacak DNS sunucunun IP adresi"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+msgid ""
+"Or enter # for an exclusion to pass through this host/subdomain to standard "
+"nameservers instead of a previous override."
+msgstr ""
+"Ya da daha önce tanımlanmış bir üzerine yazma işlemini iptal etmek için # "
+"girin."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:145
+msgid ""
+"Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."
+msgstr ""
+"Yada ! girin, aramalar için host/alt etki alanı herhangi bir yerden "
+"YÖNLENDİRİLEMEZ."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:148
+msgid "Source IP"
+msgstr "Kaynak IP"
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:151
+msgid ""
+"Source IP address for queries to the DNS server for the override domain."
+msgstr ""
+"Domain (alan adı) üzerine yazacak DNS sunucu sorguları için kaynak IP adresi."
+
+#: usr/local/www/services_dnsmasq_domainoverride_edit.php:152
+msgid "Leave blank unless your DNS server is accessed through a VPN tunnel."
+msgstr "DNS sunucunuz VPN tünel üzerinden erişim yapmadıkça boş bırakın."
+
+#: usr/local/www/services_dnsmasq_edit.php:91 usr/local/www/system.php:114
+msgid ""
+"The hostname can only contain the characters A-Z, 0-9 and '-'. It may not "
+"start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:130
+#: usr/local/www/services_unbound_host_edit.php:132
+msgid "Alias Domain"
+msgstr "Grup Alan Adı"
+
+#: usr/local/www/services_dnsmasq_edit.php:135
+#: usr/local/www/services_unbound_host_edit.php:137
+msgid ""
+"Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. "
+"They may not start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:138
+#: usr/local/www/services_unbound_host_edit.php:140
+msgid ""
+"A valid alias hostname is specified, but the domain name part should be "
+"omitted"
+msgstr ""
+
+#: usr/local/www/services_dnsmasq_edit.php:143
+#: usr/local/www/services_unbound_host_edit.php:145
+msgid "A valid domain must be specified in alias list."
+msgstr ""
+"Geçerli bir domain (alan adı) grup (alias) listesi içinde belirtilmelidir."
+
+#: usr/local/www/services_dnsmasq_edit.php:154
+#: usr/local/www/services_unbound_host_edit.php:155
+msgid "This host/domain already exists."
+msgstr "Bu sunucu/alan adı zaten kayıtlı."
+
+#: usr/local/www/services_dnsmasq_edit.php:182
+#: usr/local/www/services_unbound_host_edit.php:183
+msgid "Edit host"
+msgstr "Host düzenle"
+
+#: usr/local/www/services_dnsmasq_edit.php:212
+msgid "Edit DNS Forwarder entry"
+msgstr "DNS Yönlendirici kaydını düzenle"
+
+#: usr/local/www/services_dnsmasq_edit.php:218
+#: usr/local/www/services_unbound_host_edit.php:219
+msgid "Name of the host, without domain part"
+msgstr "Host adı, domain kısmı belirtilmeden"
+
+#: usr/local/www/services_dnsmasq_edit.php:220
+#: usr/local/www/services_unbound_host_edit.php:220
+msgid "myhost"
+msgstr "hostum"
+
+#: usr/local/www/services_dnsmasq_edit.php:226
+#: usr/local/www/services_unbound_host_edit.php:227
+msgid "Domain of the host"
+msgstr "Host'un alan adı"
+
+#: usr/local/www/services_dnsmasq_edit.php:227
+#: usr/local/www/services_unbound_host_edit.php:228
+msgid "example.com"
+msgstr "ornek.com"
+
+#: usr/local/www/services_dnsmasq_edit.php:233
+#: usr/local/www/services_unbound_host_edit.php:235
+msgid "IP address of the host"
+msgstr "Host IP adresi"
+
+#: usr/local/www/services_dnsmasq_edit.php:251
+#: usr/local/www/services_unbound_host_edit.php:254
+msgid "Enter additional names for this host."
+msgstr "Bu host için ek isimleri giriniz."
+
+#: usr/local/www/services_dyndns.php:61
+msgid "Dynamic DNS clients"
+msgstr "Dinamik DNS istemcileri"
+
+#: usr/local/www/services_dyndns.php:75 usr/local/www/services_rfc2136.php:69
+msgid "DynDns"
+msgstr "DynDns"
+
+#: usr/local/www/services_dyndns.php:76 usr/local/www/services_rfc2136.php:70
+msgid "RFC 2136"
+msgstr "RFC 2136"
+
+#: usr/local/www/services_dyndns.php:87 usr/local/www/status_openvpn.php:283
+#: usr/local/www/status_openvpn.php:346 usr/local/www/status_services.php:84
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:82
+msgid "Service"
+msgstr "Servis"
+
+#: usr/local/www/services_dyndns.php:89 usr/local/www/services_rfc2136.php:83
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:84
+msgid "Cached IP"
+msgstr "Önbelleklenmiş IP"
+
+#: usr/local/www/services_dyndns.php:191
+msgid ""
+"IP addresses appearing in green are up to date with Dynamic DNS provider."
+msgstr "Yeşil IP adresleri dinamik DNS sağlayıcıda güncel durumdadır."
+
+#: usr/local/www/services_dyndns.php:192
+msgid ""
+"You can force an update for an IP address on the edit page for that service."
+msgstr ""
+"Bu hizmet için düzenleme sayfasında IP adresini güncelleştirmeye "
+"zorlayabilirsiniz."
+
+#: usr/local/www/services_dyndns_edit.php:97
+#: usr/local/www/services_dyndns_edit.php:247
+msgid "Service type"
+msgstr "Servis türü"
+
+#: usr/local/www/services_dyndns_edit.php:107
+#: usr/local/www/services_dyndns_edit.php:382
+msgid "Update URL"
+msgstr "Güncelleme URL"
+
+#: usr/local/www/services_dyndns_edit.php:121
+msgid "The hostname contains invalid characters."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:126
+msgid "The MX contains invalid characters."
+msgstr "MX geçersiz karaterler içeriyor."
+
+#: usr/local/www/services_dyndns_edit.php:128
+#: usr/local/www/system_usermanager.php:227
+#: usr/local/www/vpn_l2tp_users_edit.php:92
+#: usr/local/www/vpn_pptp_users_edit.php:88
+msgid "The username contains invalid characters."
+msgstr "Kullanıcı adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/services_dyndns_edit.php:181
+#: usr/local/www/services_dyndns_edit.php:236
+msgid "Dynamic DNS client"
+msgstr "Dinamik DNS istemcisi"
+
+#: usr/local/www/services_dyndns_edit.php:243
+#: usr/local/www/services_rfc2136_edit.php:195
+#: usr/local/www/services_rfc2136_edit.php:201
+msgid "yes"
+msgstr "evet"
+
+#: usr/local/www/services_dyndns_edit.php:261
+#: usr/local/www/services_rfc2136_edit.php:141
+msgid "Interface to monitor"
+msgstr "Ä°zlenecek arabirim"
+
+#: usr/local/www/services_dyndns_edit.php:286
+msgid "Interface to send update from"
+msgstr "Arabirimden güncelleme gönderimi"
+
+#: usr/local/www/services_dyndns_edit.php:308
+msgid "Note: This is almost always the same as the Interface to Monitor."
+msgstr "Not: Bu hemen hemen herzaman Arabirimi izlemekle aynıdır."
+
+#: usr/local/www/services_dyndns_edit.php:319
+msgid "Enter the complete host/domain name. example: myhost.dyndns.org"
+msgstr "Tam host/alanadı giriniz. Örn: pfsense.dyndns.org"
+
+#: usr/local/www/services_dyndns_edit.php:320
+msgid "For he.net tunnelbroker, enter your tunnel ID"
+msgstr "he.net tünelkırıcı için, tünel kimliğinizi giriniz"
+
+#: usr/local/www/services_dyndns_edit.php:325
+msgid "MX"
+msgstr "MX"
+
+#: usr/local/www/services_dyndns_edit.php:329
+msgid ""
+"Note: With DynDNS service you can only use a hostname, not an IP address."
+msgstr ""
+"Not: DynDNS servisi ile sadece host adı kullanılabilir, IP adresi "
+"kullanılamaz."
+
+#: usr/local/www/services_dyndns_edit.php:331
+msgid ""
+"Set this option only if you need a special MX record. Not all services "
+"support this."
+msgstr ""
+"Bu seçeneği sadece özel MX kaydı oluşturulacak ise seçiniz. Bu özelliği tüm "
+"servisler desteklemez, unutmayınız."
+
+#: usr/local/www/services_dyndns_edit.php:335
+msgid "Wildcards"
+msgstr "Joker karakterler"
+
+#: usr/local/www/services_dyndns_edit.php:338
+#: usr/local/www/services_dyndns_edit.php:344
+msgid "Enable "
+msgstr "EtkinleÅŸtir "
+
+#: usr/local/www/services_dyndns_edit.php:338
+msgid "Wildcard"
+msgstr "Joker karakter"
+
+#: usr/local/www/services_dyndns_edit.php:341
+msgid "Verbose logging"
+msgstr "Kapsamlı günlük"
+
+#: usr/local/www/services_dyndns_edit.php:344
+msgid "verbose logging"
+msgstr "kapsamlı günlük"
+
+#: usr/local/www/services_dyndns_edit.php:347
+msgid "CURL options"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:350
+msgid "Force IPv4 resolving"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:352
+msgid "Verify SSL peer"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:359
+msgid ""
+"Username is required for all types except Namecheap, FreeDNS and Custom "
+"Entries."
+msgstr ""
+"Namecheap,Özel girdiler ve FreeDNS dışındaki tüm türlerde kullanıcı adı "
+"girilmelidir."
+
+#: usr/local/www/services_dyndns_edit.php:360
+msgid "Route 53: Enter your Access Key ID."
+msgstr "Yönlendir 53: Giriş Anahtarı Kimliğini giriniz."
+
+#: usr/local/www/services_dyndns_edit.php:361
+msgid ""
+"For Custom Entries, Username and Password represent HTTP Authentication "
+"username and passwords."
+msgstr ""
+"Özel girdiler, Kullanıcı adı ve Parola HTTP kimlik doğrulama kullanıcı adı "
+"ve parolasini temsil eder."
+
+#: usr/local/www/services_dyndns_edit.php:369
+msgid ""
+"FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided "
+"by FreeDNS."
+msgstr ""
+"FreeDNS (freedns.afraid.org): FreeDNS tarafından sağlanan \"Kimlik Doğrulama "
+"Anahtarı\"nı giriniz."
+
+#: usr/local/www/services_dyndns_edit.php:370
+msgid "Route 53: Enter your Secret Access Key."
+msgstr "Yönlendir 53: Gizli Giriş Anahtar' ınızı giriniz."
+
+#: usr/local/www/services_dyndns_edit.php:375
+msgid "Zone ID"
+msgstr "Alan KimliÄŸi (ID)"
+
+#: usr/local/www/services_dyndns_edit.php:378
+msgid ""
+"Enter Zone ID that you received when you created your domain in Route 53."
+msgstr ""
+"Route 53 ile oluşturduğunuz alan adınız için size gönderilen Zone ID "
+"bilgisini giriniz."
+
+#: usr/local/www/services_dyndns_edit.php:385
+msgid ""
+"This is the only field required by for Custom Dynamic DNS, and is only used "
+"by Custom Entries."
+msgstr ""
+"Bu alan sadece özel Dinamik DNS Girdilerinde gerekebilir, DNS ve sadece Özel "
+"Girdilerinde kullanılır."
+
+#: usr/local/www/services_dyndns_edit.php:387
+#: usr/local/www/services_dyndns_edit.php:398
+msgid ""
+"If you need the new IP to be included in the request, put %IP% in its place."
+msgstr ""
+"Eğer talep içerisinde yeni IP'ye ihtiyaç duyarsanız, oraya %IP% yazınız."
+
+#: usr/local/www/services_dyndns_edit.php:391
+msgid "Result Match"
+msgstr "Eşleşen Sonuç"
+
+#: usr/local/www/services_dyndns_edit.php:394
+msgid "This field is only used by Custom Dynamic DNS Entries."
+msgstr "Bu alan sadece özel Dinamik DNS Girdilerinde kullanılır."
+
+#: usr/local/www/services_dyndns_edit.php:396
+msgid ""
+"This field should be identical to what your DDNS Provider will return if the "
+"update succeeds, leave it blank to disable checking of returned results."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:400
+msgid ""
+"If you need to include multiple possible values, separate them with a |. If "
+"your provider includes a |, escape it with \\|"
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:402
+msgid ""
+"Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or "
+"end of the returned results are removed before comparison."
+msgstr ""
+
+#: usr/local/www/services_dyndns_edit.php:407
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:159
+msgid "TTL"
+msgstr "TTL"
+
+#: usr/local/www/services_dyndns_edit.php:410
+msgid "Choose TTL for your dns record."
+msgstr "Dns kaydınız için TTL seçiniz."
+
+#: usr/local/www/services_dyndns_edit.php:428
+#: usr/local/www/services_rfc2136_edit.php:106
+msgid "Save & Force Update"
+msgstr "Kaydet & Zorla Güncelle"
+
+#: usr/local/www/services_dyndns_edit.php:435
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem:\n"
+" General setup%s or allow the DNS server list to be "
+"overridden\n"
+" by DHCP/PPP on WAN for dynamic DNS updates to work."
+msgstr ""
+"Dinamik DNS güncellemelerinin çalışması için ya %sSistem:\n"
+" Genel ayarlar%s sayfasında bir DNS sunucu "
+"yapılandırmalısınız veya WAN\n"
+" üzerinde DHCP/PPP tarafından üzerine yazılabilecek "
+"şekilde ayarlamalısınız."
+
+#: usr/local/www/services_igmpproxy.php:81
+#: usr/local/www/services_igmpproxy_edit.php:46
+msgid "IGMP Proxy"
+msgstr "IGMP Vekil"
+
+#: usr/local/www/services_igmpproxy.php:91
+msgid "The IGMP entry list has been changed"
+msgstr "IGMP girdi listesi deÄŸiÅŸtirildi"
+
+#: usr/local/www/services_igmpproxy.php:104
+#: usr/local/www/services_igmpproxy.php:147
+msgid "add a new igmpentry"
+msgstr "yeni IGMP girdisi ekle"
+
+#: usr/local/www/services_igmpproxy.php:134
+msgid "edit igmpentry"
+msgstr "IGMP girdisini düzenle"
+
+#: usr/local/www/services_igmpproxy.php:135
+msgid ""
+"Do you really want to delete this igmp entry? All elements that still use it "
+"will become invalid (e.g. filter rules)!"
+msgstr ""
+
+#: usr/local/www/services_igmpproxy.php:135
+msgid "delete igmpentry"
+msgstr "IGMP girdisini sil"
+
+#: usr/local/www/services_igmpproxy.php:161
+msgid ""
+"Please add the interface for upstream, the allowed subnets, and the "
+"downstream interfaces you would like the proxy to allow. Only one 'upstream' "
+"interface can be configured."
+msgstr ""
+"Vekilin izin vermesini istediğiniz gönderme arabirimi, izin verilen altağlar "
+"ve alma arabirimlerini ekleyin. Tek bir 'gönderme' arabirimi "
+"yapılandırılabilir."
+
+#: usr/local/www/services_igmpproxy_edit.php:80
+msgid "Only one 'upstream' interface can be configured."
+msgstr "Tek bir 'gönderme' arabirimi yapılandırılabilir."
+
+#: usr/local/www/services_igmpproxy_edit.php:163
+msgid "IGMP Proxy Edit"
+msgstr "IGMP Vekili Düzenle"
+
+#: usr/local/www/services_igmpproxy_edit.php:193
+msgid "Upstream Interface"
+msgstr "Gönderme Arabirimi"
+
+#: usr/local/www/services_igmpproxy_edit.php:194
+msgid "Downstream Interface"
+msgstr "Alma Arabirimi"
+
+#: usr/local/www/services_igmpproxy_edit.php:198
+msgid ""
+"The <b>upstream</b> network interface is the outgoing interface which is "
+"responsible for communicating to available multicast data sources. There can "
+"only be one upstream interface."
+msgstr ""
+"<b>Gönderme</b> ağ arabirimi çoklu yayın veri kaynaklarına erişmekten "
+"sorumlu çıkış arabirimidir. Tek bir gönderme arabirimi olabilir."
+
+#: usr/local/www/services_igmpproxy_edit.php:204
+msgid "Downstream"
+msgstr "Alma"
+
+#: usr/local/www/services_igmpproxy_edit.php:204
+msgid ""
+"network interfaces are the distribution interfaces to the destination "
+"networks, where multicast clients can join groups and receive multicast "
+"data. One or more downstream interfaces must be configured."
+msgstr ""
+"arabirimleri çoklu yayın istemcilerinin gruplara dahil olabildiği ve çoklu "
+"yayın veri alabildiği hedef ağlara dağıtım yapan arabirimlerdir. Birden "
+"fazla alma arabirimi olabilir."
+
+#: usr/local/www/services_igmpproxy_edit.php:211
+msgid "Threshold"
+msgstr "EÅŸik"
+
+#: usr/local/www/services_igmpproxy_edit.php:216
+msgid ""
+"Defines the TTL threshold for the network interface. Packets with a "
+"lower TTL than the threshold value will be ignored. This setting is "
+"optional, and by default the threshold is 1."
+msgstr ""
+
+#: usr/local/www/services_igmpproxy_edit.php:223
+msgid "Network (s)"
+msgstr "AÄŸ (lar)"
+
+#: usr/local/www/services_ntpd.php:214 usr/local/www/services_ntpd.php:306
+msgid "Add another Time server"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:238 usr/local/www/services_ntpd_gps.php:367
+#: usr/local/www/services_ntpd_pps.php:118
+msgid "Serial GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:239 usr/local/www/services_ntpd_gps.php:368
+#: usr/local/www/services_ntpd_pps.php:119 usr/local/www/status_queues.php:174
+msgid "PPS"
+msgstr "PPS"
+
+#: usr/local/www/services_ntpd.php:249
+msgid "NTP Server Configuration"
+msgstr "NTP Sunucu Yapılandırması"
+
+#: usr/local/www/services_ntpd.php:276
+msgid "Interfaces without an IP address will not be shown."
+msgstr "IP adresi içermeyen arabirimler gösterilmeyecektir."
+
+#: usr/local/www/services_ntpd.php:278
+msgid "Selecting no interfaces will listen on all interfaces with a wildcard."
+msgstr "Arabirimler seçilmediğinde tüm arabirimlerin joker karakterini izler."
+
+#: usr/local/www/services_ntpd.php:279
+msgid ""
+"Selecting all interfaces will explicitly listen on only the interfaces/IPs "
+"specified."
+msgstr ""
+"Tüm arabirimlerin seçilmesi halinde sadece belirtilen arabirimler/IP(ler)i "
+"izlemesi beklenir."
+
+#: usr/local/www/services_ntpd.php:309
+msgid "For best results three to five servers should be configured here."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:311
+msgid ""
+"The <i>prefer</i> option indicates that NTP should favor the use of this "
+"server more than all others."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:313
+msgid ""
+"The <i>noselect</i> option indicates that NTP should not use this server for "
+"time, but stats for this server will be collected and displayed."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:319
+msgid "(0-15)"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:320
+msgid ""
+"Orphan mode allows the system clock to be used when no other clocks are "
+"available. The number here specifies the stratum reported during orphan mode "
+"and should normally be set to a number high enough to insure that any other "
+"servers available to clients are preferred over this server. (default: 12)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:327
+msgid "Enable RRD graphs of NTP statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:333
+msgid ""
+"These options enable additional messages from NTP to be written to the "
+"System Log"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:333
+msgid "Status > System Logs > NTP"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:336
+msgid "Enable logging of peer messages (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:339
+msgid "Enable logging of system messages (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:346
+msgid "Show statistics logging options"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:349
+msgid "Warning: "
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:349
+msgid "these options will create persistant daily log files in /var/log/ntp."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:352
+msgid "Enable logging of reference clock statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:355
+msgid "Enable logging of clock discipline statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:358
+msgid "Enable logging of NTP peer statistics (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:366
+msgid "Show access restriction options"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:369
+msgid "these options control access to NTP from the WAN."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:372
+msgid "Enable Kiss-o'-death packets (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:375
+msgid ""
+"Deny state modifications (i.e. run time configuration) by ntpq and ntpdc "
+"(default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:378
+msgid "Disable ntpq and ntpdc queries (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:381
+msgid "Disable all except ntpq and ntpdc queries (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:384
+msgid "Deny packets that attempt a peer association (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:387
+msgid "Deny mode 6 control message trap service (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:395
+msgid "Show Leap second configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:398
+msgid ""
+"A leap second file allows NTP to advertize an upcoming leap second addition "
+"or subtraction."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:399
+msgid "Normally this is only useful if this server is a stratum 1 time server."
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:401
+msgid "Enter Leap second configuration as text:"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:403
+msgid "Or"
+msgstr ""
+
+#: usr/local/www/services_ntpd.php:403
+msgid "select a file to upload:"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:160
+msgid "NTP GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:376
+msgid "NTP Serial GPS Configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+msgid ""
+"For the best results, NTP should have at least three sources of time. So it "
+"is best to configure at least 2 servers under"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "Services > NTP"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:383
+msgid ""
+"to minimize clock drift if the GPS data is not valid over time. Otherwise "
+"ntpd may only use values from the unsynchronized local clock when providing "
+"time to clients."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:387
+msgid "GPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:399
+msgid "This option allows you to select a predefined configuration."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:402
+msgid "Default is the configuration of pfSense 2.1 and earlier"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:403
+msgid " (not recommended). Select Generic if your GPS is not listed.)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:404
+msgid ""
+"The perdefined configurations assume your GPS has already been set to NMEA "
+"mode."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:428
+msgid ""
+"All serial ports are listed, be sure to pick the port with the GPS attached."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:437
+msgid "Serial port baud rate."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:440
+msgid ""
+"Note: A higher baud rate is generally only helpful if the GPS is sending too "
+"many sentences. It is recommended to configure the GPS to send only one "
+"sentence at a baud rate of 4800 or 9600."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:457
+msgid ""
+"By default NTP will listen for all supported NMEA sentences. Here one or "
+"more sentences to listen for may be specified."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:464
+msgid "Fudge time 1 is used to specify the GPS PPS signal offset"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:470
+msgid "Fudge time 2 is used to specify the GPS time offset"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:475
+#: usr/local/www/services_ntpd_pps.php:167
+msgid "(0-16)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:476
+msgid "This may be used to change the GPS Clock stratum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:476
+msgid ""
+"This may be useful if, for some reason, you want ntpd to prefer a different "
+"clock"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:484
+#: usr/local/www/services_ntpd_pps.php:176
+msgid ""
+"Normally there should be no need to change these options from the defaults."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:494
+msgid "NTP should prefer this clock (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:502
+msgid ""
+"NTP should not use this clock, it will be displayed for reference "
+"only(default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:510
+msgid "Enable PPS signal processing (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:518
+#: usr/local/www/services_ntpd_pps.php:186
+msgid "Enable falling edge PPS signal processing (default: rising edge)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:526
+msgid "Enable kernel PPS clock discipline (default: enabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:534
+msgid "Obscure location in timestamp (default: unobscured)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:542
+msgid ""
+"Log the sub-second fraction of the received time stamp (default: Not logged)."
+"<br />Note: enabling this will rapidly fill the log, but is useful for "
+"tuning Fudge time 2."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:551
+#: usr/local/www/services_ntpd_pps.php:211
+msgid "(1 to 4 charactors)"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:552
+msgid "This may be used to change the GPS Clock ID"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:558
+msgid "Show GPS Initialization commands"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:563
+msgid ""
+"Note: Commands entered here will be sent to the GPS during initialization. "
+"Please read and understand your GPS documentation before making any changes "
+"here."
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:564
+msgid "NMEA checksum calculator"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:566
+msgid ""
+"Enter the text between &quot;$&quot; and &quot;*&quot; of a NMEA command "
+"string:"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:566
+msgid "checksum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_gps.php:567
+msgid "Calculate NMEA checksum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:101
+msgid "NTP PPS"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:129
+msgid "NTP PPS Configuration"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:134
+msgid ""
+"Devices with a Pulse Per Second output such as radios that receive a time "
+"signal from DCF77 (DE), JJY (JP), MSF (GB) or WWVB (US) may be used as a PPS "
+"reference for NTP."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:135
+msgid ""
+"A serial GPS may also be used, but the serial GPS driver would usually be "
+"the better option."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:136
+msgid ""
+"A PPS signal only provides a reference to the change of a second, so at "
+"least one other source to number the seconds is required."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "At least 3 additional time sources should be configured under"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:138
+msgid "to reliably supply the time of each PPS pulse."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:154
+msgid ""
+"All serial ports are listed, be sure to pick the port with the PPS source "
+"attached."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:162
+msgid ""
+"Fudge time is used to specify the PPS signal offset from the actual second "
+"such as the transmission delay between the transmitter and the receiver."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:168
+msgid "This may be used to change the PPS Clock stratum"
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:168
+msgid ""
+"This may be useful if, for some reason, you want ntpd to prefer a different "
+"clock and just monitor this source."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:194
+msgid "Enable kernel PPS clock discipline (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:202
+msgid ""
+"Record a timestamp once for each second, useful for constructing Allan "
+"deviation plots (default: disabled)."
+msgstr ""
+
+#: usr/local/www/services_ntpd_pps.php:212
+msgid "This may be used to change the PPS Clock ID"
+msgstr ""
+
+#: usr/local/www/services_rfc2136.php:56
+msgid "RFC 2136 clients"
+msgstr "RFC 2136 istemcileri"
+
+#: usr/local/www/services_rfc2136.php:166
+#: usr/local/www/vpn_openvpn_client.php:1165
+msgid "Do you really want to delete this client?"
+msgstr "Bu istemciyi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/services_rfc2136_edit.php:74
+#: usr/local/www/services_rfc2136_edit.php:165
+msgid "Key name"
+msgstr "Anahtar adı"
+
+#: usr/local/www/services_rfc2136_edit.php:79
+msgid "The DNS update host name contains invalid characters."
+msgstr "DNS güncelleme host adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/services_rfc2136_edit.php:81
+msgid "The DNS update TTL must be an integer."
+msgstr "DNS güncelleme TTL değeri tamsayı olmalıdır."
+
+#: usr/local/www/services_rfc2136_edit.php:83
+msgid "The DNS update key name contains invalid characters."
+msgstr "DNS güncelleme anahtar adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/services_rfc2136_edit.php:104
+msgid "New/Edited RFC2136 dnsupdate entry was posted."
+msgstr "Yeni/değiştirilmiş RFC2136 dnsupdate girdisi gönderildi."
+
+#: usr/local/www/services_rfc2136_edit.php:116
+#: usr/local/www/services_rfc2136_edit.php:130
+msgid "RFC 2136 client"
+msgstr "RFC 2136 istemcisi"
+
+#: usr/local/www/services_rfc2136_edit.php:169
+msgid "This must match the setting on the DNS server."
+msgstr "Bu ayar DNS sunucu ayarları ile uyumlu olmalıdır."
+
+#: usr/local/www/services_rfc2136_edit.php:172
+msgid "Key type"
+msgstr "Anahtar türü"
+
+#: usr/local/www/services_rfc2136_edit.php:176
+msgid " User"
+msgstr " Kullanıcı"
+
+#: usr/local/www/services_rfc2136_edit.php:184
+msgid "Paste an HMAC-MD5 key here."
+msgstr "Burada bir HMAC-MD5 anahtarı vermelisiniz."
+
+#: usr/local/www/services_rfc2136_edit.php:196
+msgid "Use TCP instead of UDP"
+msgstr "UDP yerine TCP kullan"
+
+#: usr/local/www/services_rfc2136_edit.php:199
+msgid "Use Public IP"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:202
+msgid ""
+"If the interface IP is private, attempt to fetch and use the public IP "
+"instead."
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:216
+msgid "Save &amp; Force Update"
+msgstr ""
+
+#: usr/local/www/services_rfc2136_edit.php:225
+#, php-format
+msgid ""
+"You must configure a DNS server in %sSystem: General setup %sor allow the "
+"DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS updates "
+"to work."
+msgstr ""
+"Dinamik DNS güncellemelerinin çalışması için %sSistem: Genel ayarlar%s "
+"sayfasında bir DNS sunucu yapılandırmalı veya WAN üzerinde DHCP/PPP "
+"tarafından DNS listesinin güncellenmesine izin vermelisiniz."
+
+#: usr/local/www/services_router_advertisements.php:75
+msgid ""
+"The DHCPv6 Server can only be enabled on interfaces configured with static "
+"IP addresses"
+msgstr ""
+"DHCPv6 Sunucu sadece arabirimler statik IP adresleri ile yapılandırılınca "
+"etkinleÅŸir"
+
+#: usr/local/www/services_router_advertisements.php:76
+msgid "Only interfaces configured with a static IP will be shown"
+msgstr "Sadece statik IP adresine sahip arabirimler görüntülenmektedir"
+
+#: usr/local/www/services_router_advertisements.php:118
+msgid ""
+"Subnets are specified in CIDR format. Select the CIDR mask that pertains to "
+"each entry. /128 specifies a single IPv6 host; /64 specifies a normal IPv6 "
+"network; etc. If no subnets are specified here, the Router Advertisement "
+"(RA) Daemon will advertise to the subnet to which the router's interface is "
+"assigned."
+msgstr ""
+"Altağlar CIDR formatında belirtilmelidir. Her girdi seçilen CIDR maskesi ile "
+"ilgilidir. /128 tek bir IPv6 istemciyi belirtir; /64 normal bir IPv6 ağını "
+"belirtir; vb. Eğer alt ağlar burada belirtiliyor ise, Yönlendirici İlanı "
+"(RA) Servisi hangi arabirim atandıysa altağ için ilan yapar."
+
+#: usr/local/www/services_router_advertisements.php:145
+#, php-format
+msgid "An invalid subnet or alias was specified. [%s/%s]"
+msgstr "Geçersiz altağ yada grup belirtildi. [%s/%s]"
+
+#: usr/local/www/services_router_advertisements.php:194
+msgid "Router advertisements"
+msgstr "Yönlendirici ilanları"
+
+#: usr/local/www/services_router_advertisements.php:279
+#, php-format
+msgid "Select the Operating Mode for the Router Advertisement (RA) Daemon."
+msgstr ""
+"Yönlendirici İlanı (RA Router Advertisement) Servisi için operasyon kipini "
+"seçiniz."
+
+#: usr/local/www/services_router_advertisements.php:280
+#, php-format
+msgid ""
+"Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router "
+"Advertising with Stateless Autoconfig, \"Managed\" for assignment through "
+"(a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with "
+"Stateless Autoconfig"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:281
+#, php-format
+msgid ""
+"It is not required to activate this DHCPv6 server when set to \"Managed\", "
+"this can be another host on the network"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:285
+msgid "Router Priority"
+msgstr "Yönlendirici Önceliği"
+
+#: usr/local/www/services_router_advertisements.php:292
+#, php-format
+msgid "Select the Priority for the Router Advertisement (RA) Daemon."
+msgstr "Yönlendirici İlanı (RA Router Advertisement) için öncelik seçiniz."
+
+#: usr/local/www/services_router_advertisements.php:306
+msgid "RA Interface"
+msgstr "Yönlendirici İlanı (RA Router Advertisement) Arabirimi"
+
+#: usr/local/www/services_router_advertisements.php:314
+#, php-format
+msgid "Select the Interface for the Router Advertisement (RA) Daemon."
+msgstr "Yönlendirici İlanı (RA Router Advertisement) için arabirim seçiniz."
+
+#: usr/local/www/services_router_advertisements.php:320
+msgid "RA Subnet(s)"
+msgstr "Yönlendirici ilan (RA outer Advertisement) altağ(ları)"
+
+#: usr/local/www/services_router_advertisements.php:391
+msgid ""
+"The RA server can optionally provide a domain search list. Use the semicolon "
+"character as separator"
+msgstr ""
+
+#: usr/local/www/services_router_advertisements.php:399
+msgid "Use same settings as DHCPv6 server"
+msgstr "Aynı ayarları DHCPv6 sunucu için kullan"
+
+#: usr/local/www/services_snmp.php:95
+msgid "Invalid character '#' in system location"
+msgstr "Sistem konum alanında karakter '#' geçersiz"
+
+#: usr/local/www/services_snmp.php:96
+msgid "Invalid character '#' in system contact"
+msgstr "Sistem iletişim alanında karakter '#' geçersiz"
+
+#: usr/local/www/services_snmp.php:97
+msgid "Invalid character '#' in read community string"
+msgstr "Okuma topluluk dizesinde karakter '#' geçersiz"
+
+#: usr/local/www/services_snmp.php:100
+msgid "Community"
+msgstr "Topluluk"
+
+#: usr/local/www/services_snmp.php:104
+msgid "Polling Port"
+msgstr "Sorgulama Portu"
+
+#: usr/local/www/services_snmp.php:111
+msgid "Invalid character '#' in SNMP trap string"
+msgstr "SNMP tuzak dizesinde karakter '#' geçersiz"
+
+#: usr/local/www/services_snmp.php:114 usr/local/www/services_snmp.php:357
+msgid "Trap server"
+msgstr "Tuzak sunucusu"
+
+#: usr/local/www/services_snmp.php:118
+msgid "Trap server port"
+msgstr "Tuzak sunucusu portu"
+
+#: usr/local/www/services_snmp.php:122 usr/local/www/services_snmp.php:376
+msgid "Trap string"
+msgstr "Tuzak dizesi"
+
+#: usr/local/www/services_snmp.php:290
+msgid "SNMP Daemon"
+msgstr "SNMP servisi"
+
+#: usr/local/www/services_snmp.php:296
+msgid "Polling Port "
+msgstr "Sorgulama Portu "
+
+#: usr/local/www/services_snmp.php:299
+msgid "Enter the port to accept polling events on (default 161)"
+msgstr "Sorgulama olaylarına erişilecek portu girin (varsayılan 161)"
+
+#: usr/local/www/services_snmp.php:304
+msgid "System location"
+msgstr "Sistem konumu"
+
+#: usr/local/www/services_snmp.php:311
+msgid "System contact"
+msgstr "Sistem iletiÅŸim"
+
+#: usr/local/www/services_snmp.php:318
+msgid "Read Community String"
+msgstr "Topluluk dizesini oku"
+
+#: usr/local/www/services_snmp.php:321
+msgid ""
+"The community string is like a password, restricting access to querying SNMP "
+"to hosts knowing the community string. Use a strong value here to protect "
+"from unauthorized information disclosure."
+msgstr ""
+"Topluluk dizesi parola gibidir, SNMP sorgusunu dizeyi bilenlerle sınırlar. "
+"Yetkisiz erişimi engellemek için güçlü bir dize belirleyin."
+
+#: usr/local/www/services_snmp.php:350
+msgid "SNMP Traps"
+msgstr "SNMP Tuzakları"
+
+#: usr/local/www/services_snmp.php:360
+msgid "Enter trap server name"
+msgstr "Tuzak sunucusu adı giriniz"
+
+#: usr/local/www/services_snmp.php:365
+msgid "Trap server port "
+msgstr "Tuzak sunucu portu "
+
+#: usr/local/www/services_snmp.php:368
+msgid "Enter the port to send the traps to (default 162)"
+msgstr "Tuzakların gönderileceği port adresini giriniz (varsayılan 162)"
+
+#: usr/local/www/services_snmp.php:373
+msgid "Enter the SNMP trap string"
+msgstr "SNMP tuzak dizesini girin"
+
+#: usr/local/www/services_snmp.php:385
+msgid "Modules"
+msgstr "BileÅŸenler"
+
+#: usr/local/www/services_snmp.php:391
+msgid "SNMP Modules"
+msgstr "SMNP BileÅŸenleri"
+
+#: usr/local/www/services_snmp.php:393
+msgid "MibII"
+msgstr "MibII"
+
+#: usr/local/www/services_snmp.php:395
+msgid "Netgraph"
+msgstr "Net grafik"
+
+#: usr/local/www/services_snmp.php:399
+msgid "Host Resources (Requires MibII)"
+msgstr "Host Kaynakları (MibII gerektirir)"
+
+#: usr/local/www/services_snmp.php:401
+msgid "UCD"
+msgstr "UCD"
+
+#: usr/local/www/services_snmp.php:403
+msgid "Regex"
+msgstr "Düzenli ifade"
+
+#: usr/local/www/services_snmp.php:413
+msgid "Interface Binding"
+msgstr "Arabirim BaÄŸlama"
+
+#: usr/local/www/services_snmp.php:418
+msgid "Bind Interface"
+msgstr "Arabirim BaÄŸla (Ata)"
+
+#: usr/local/www/services_unbound.php:130
+msgid "You must specify a valid port number."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:230
+msgid "The configuration of the DNS Resolver has been changed"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:230
+msgid "You must apply changes for them to take effect."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:238
+#: usr/local/www/services_unbound_advanced.php:212
+msgid "General settings"
+msgstr "Genel ayarlar"
+
+#: usr/local/www/services_unbound.php:239
+#: usr/local/www/services_unbound_acls.php:189
+#: usr/local/www/services_unbound_advanced.php:213
+msgid "Advanced settings"
+msgstr "GeliÅŸmiÅŸ ayarlar"
+
+#: usr/local/www/services_unbound.php:240
+#: usr/local/www/services_unbound_acls.php:190
+#: usr/local/www/services_unbound_advanced.php:214
+msgid "Access Lists"
+msgstr "EriÅŸim Listeleri"
+
+#: usr/local/www/services_unbound.php:251
+msgid "General DNS Resolver Options"
+msgstr "Genel DNS Çözümleyici Ayarları"
+
+#: usr/local/www/services_unbound.php:257
+msgid "Enable DNS Resolver"
+msgstr "DNS Çözümleyici'yi etkinleştir"
+
+#: usr/local/www/services_unbound.php:272
+#: usr/local/www/system_advanced_network.php:251
+msgid "Network Interfaces"
+msgstr "AÄŸ Arabirimleri"
+
+#: usr/local/www/services_unbound.php:278
+msgid ""
+"Interface IPs used by the DNS Resolver for responding to queries from "
+"clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries "
+"to other interface IPs not selected below are discarded. The default "
+"behavior is to respond to queries on every available IPv4 and IPv6 address."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:297
+msgid "Outgoing Network Interfaces"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:303
+msgid ""
+"Utilize different network interface(s) that the DNS Resolver will use to "
+"send queries to authoritative servers and receive their replies. By default "
+"all interfaces are used."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:322
+msgid "DNSSEC"
+msgstr "DNSSEC"
+
+#: usr/local/www/services_unbound.php:325
+msgid "Enable DNSSEC Support"
+msgstr "DNSSEC DesteÄŸini EtkinleÅŸtir"
+
+#: usr/local/www/services_unbound.php:333
+msgid "Enable Forwarding Mode"
+msgstr "Yönlendirme Kipini Etkinleştir"
+
+#: usr/local/www/services_unbound.php:340
+msgid "Register DHCP leases in the DNS Resolver"
+msgstr "DHCP kiralarını DNS Çüzücüye kaydet"
+
+#: usr/local/www/services_unbound.php:341
+#, php-format
+msgid ""
+"If this option is set, then machines that specify their hostname when "
+"requesting a DHCP lease will be registered in the DNS Resolver, so that "
+"their name can be resolved. You should also set the domain in %sSystem: "
+"General setup%s to the proper value."
+msgstr ""
+"Bu seçenek açıldığında, DHCP kirası isterken kendi isimlerini belirten "
+"makinalar DNS Çözücüye kaydedilir, böylece isimleri çözülebilir. Ayrıca "
+"%sSistem: Genel ayarlar%s sayfasından alan adını da ayarlamalısınız."
+
+#: usr/local/www/services_unbound.php:352
+msgid "Register DHCP static mappings in the DNS Resolver"
+msgstr "DHCP statik eşleşmeleri DNS Çözücüye kaydet"
+
+#: usr/local/www/services_unbound.php:353
+#, php-format
+msgid ""
+"If this option is set, then DHCP static mappings will be registered in the "
+"DNS Resolver, so that their name can be resolved. You should also set the "
+"domain in %sSystem: General setup%s to the proper value."
+msgstr ""
+"Bu seçenek açıldığında DHCP statik eşlemeleri DNS Çözücüye kaydedilir, "
+"böylece isimleri çözülebilir. Ayrıca %sSistem: Genel ayarlar%s sayfasından "
+"alan adını da ayarlamalısınız."
+
+#: usr/local/www/services_unbound.php:360
+msgid "TXT Comment Support"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:363
+msgid ""
+"If this option is set, then any descriptions associated with Host entries "
+"and DHCP Static mappings will create a corresponding TXT record."
+msgstr ""
+
+#: usr/local/www/services_unbound.php:376
+msgid ""
+"Enter any additional configuration parameters to add to the DNS Resolver "
+"configuration here, separated by a newline"
+msgstr ""
+
+#: usr/local/www/services_unbound.php:395
+#, php-format
+msgid ""
+"If the DNS Resolver is enabled, the DHCP service (if enabled) will "
+"automatically serve the LAN IP address as a DNS server to DHCP clients so "
+"they will use the DNS Resolver. If Forwarding, is enabled, the DNS Resolver "
+"will use the DNS servers entered in %sSystem: General setup%s or those "
+"obtained via DHCP or PPP on WAN if the &quot;Allow DNS server list to be "
+"overridden by DHCP/PPP on WAN&quot; is checked."
+msgstr ""
+"DHCP Çözücü etkinleştirildiğinde DHCP servisi (açıksa) LAN IP adresini DHCP "
+"istemcilere LAN DNS sunucu olarak bildirir, böylece istemciler DNS çözücüyü "
+"kullanır. Eğer Yönlendirme etkinse, DNS Çözücü %sSystem: Genel ayarlar%s "
+"sayfasında girilen veya DHCP ya da (&quot;WAN üzerinden DHCP/PPPnin DNS "
+"sunucu listesinin üzerine yazmasına izin ver&quot; açıksa) WAN üzerinden PPP "
+"ile alınan DNS sunucuları kullanır."
+
+#: usr/local/www/services_unbound.php:501
+msgid ""
+"Entries in this area override an entire domain by specifying an "
+"authoritative DNS server to be queried for that domain."
+msgstr ""
+"Bu alandaki girdiler alan adı için sorgulanacak yetkili DNS sunucusu "
+"belirterek tüm alan adının üzerine yazar."
+
+#: usr/local/www/services_unbound_acls.php:95
+#: usr/local/www/services_unbound_acls.php:109
+msgid "You must enter a valid IP address for each row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:100
+msgid "You must enter a valid IPv4 netmask for each IPv4 row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:106
+msgid "You must enter a valid IPv6 netmask for each IPv6 row under Networks."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:179
+#: usr/local/www/services_unbound_advanced.php:204
+msgid "The configuration of the DNS Resolver, has been changed"
+msgstr "DNS Çözücü yapılandırması değiştirildi"
+
+# 93%
+#: usr/local/www/services_unbound_acls.php:188
+msgid "General Settings"
+msgstr "Genel Ayarlar"
+
+#: usr/local/www/services_unbound_acls.php:204
+#, php-format
+msgid "%s Access List"
+msgstr "%s EriÅŸim Listesi"
+
+#: usr/local/www/services_unbound_acls.php:207
+msgid "Access List name"
+msgstr "Erişim Listesi adı"
+
+#: usr/local/www/services_unbound_acls.php:211
+msgid "Provide an Access List name."
+msgstr "Erişim Listesi adı sağlayın."
+
+#: usr/local/www/services_unbound_acls.php:226
+msgid ""
+"Choose what to do with DNS requests that match the criteria specified below."
+msgstr "Aşağıda belirtilen kritere uyan DNS isteklerine ne yapılacağını seçin."
+
+#: usr/local/www/services_unbound_acls.php:227
+msgid ""
+"<b>Deny:</b> This action stops queries from hosts within the netblock "
+"defined below."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:228
+msgid ""
+"<b>Refuse:</b> This action also stops queries from hosts within the netblock "
+"defined below, but sends a DNS rcode REFUSED error message back to the "
+"client."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:229
+msgid ""
+"<b>Allow:</b> This action allows queries from hosts within the netblock "
+"defined below."
+msgstr ""
+
+#: usr/local/www/services_unbound_acls.php:230
+msgid ""
+"<b>Allow Snoop:</b> This action allows recursive and nonrecursive access "
+"from hosts within the netblock defined below. Used for cache snooping and "
+"ideally should only be configured for your administrative host."
+msgstr ""
+
+# 87%
+#: usr/local/www/services_unbound_acls.php:235
+msgid "Networks"
+msgstr "AÄŸlar"
+
+#: usr/local/www/services_unbound_acls.php:321
+msgid "Access List Name"
+msgstr "Giriş Listesi Adı"
+
+#: usr/local/www/services_unbound_acls.php:335
+msgid "Add new Access List"
+msgstr "Yeni GiriÅŸ Listesi Ekle"
+
+#: usr/local/www/services_unbound_acls.php:344
+msgid "Access Lists to control access to the DNS Resolver can be defined here."
+msgstr ""
+"Giriş Listeleri ile DNS Çözücü girişlerinin izinlerini buradan "
+"tanımlayabilirsiniz."
+
+#: usr/local/www/services_unbound_acls.php:368
+msgid "edit access list"
+msgstr "giriş listesini düzenle"
+
+# 82%
+#: usr/local/www/services_unbound_acls.php:370
+msgid "Do you really want to delete this access list?"
+msgstr "Bu giriÅŸ listesini silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/services_unbound_acls.php:371
+msgid "delete access list"
+msgstr "giriÅŸ listesini sil"
+
+#: usr/local/www/services_unbound_advanced.php:225
+msgid "Advanced Resolver Options"
+msgstr "Gelişmiş Çözücü Seçenekleri"
+
+#: usr/local/www/services_unbound_advanced.php:228
+msgid "Hide Identity"
+msgstr "KimliÄŸi gizle"
+
+#: usr/local/www/services_unbound_advanced.php:231
+msgid "If enabled, id.server and hostname.bind queries are refused."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:235
+msgid "Hide Version"
+msgstr "Sürümü gizle"
+
+#: usr/local/www/services_unbound_advanced.php:238
+msgid "If enabled, version.server and version.bind queries are refused."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:242
+msgid "Prefetch Support"
+msgstr "Prefetch (önbellek) Desteği"
+
+#: usr/local/www/services_unbound_advanced.php:245
+msgid ""
+"Message cache elements are prefetched before they expire to help keep the "
+"cache up to date. When enabled, this option can cause an increase of around "
+"10% more DNS traffic and load on the server, but frequently requested items "
+"will not expire from the cache."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:249
+msgid "Prefetch DNS Key Support"
+msgstr "Prefetch (önbellek) DNS Anahtar Desteği"
+
+#: usr/local/www/services_unbound_advanced.php:252
+#, php-format
+msgid ""
+"DNSKEY's are fetched earlier in the validation process when a %sDelegation "
+"signer%s is encountered. This helps lower the latency of requests but does "
+"utilize a little more CPU."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:256
+msgid "Harden Glue"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:259
+msgid "Only trust glue if it is within the servers authority."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:263
+msgid "Harden DNSSEC data"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:266
+msgid ""
+"DNSSEC data is required for trust-anchored zones. If such data is absent, "
+"the zone becomes bogus. If this is disabled and no DNSSEC data is received, "
+"then the zone is made insecure."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:270
+msgid "Message Cache Size"
+msgstr "Mesaj Ön bellek Boyutu"
+
+#: usr/local/www/services_unbound_advanced.php:283
+msgid ""
+"Size of the message cache. The message cache stores DNS rcodes and "
+"validation statuses. The RRSet cache will automatically be set to twice this "
+"amount. The RRSet cache contains the actual RR data. The default is 4 "
+"megabytes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:287
+msgid "Outgoing TCP Buffers"
+msgstr "Giden TCP Ön bellekleri"
+
+#: usr/local/www/services_unbound_advanced.php:300
+msgid ""
+"The number of outgoing TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, to authoritative servers, are "
+"done."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:304
+msgid "Incoming TCP Buffers"
+msgstr "Gelen TCP Ön bellekleri"
+
+#: usr/local/www/services_unbound_advanced.php:317
+msgid ""
+"The number of incoming TCP buffers to allocate per thread. The default value "
+"is 10. If 0 is selected then no TCP queries, from clients, are accepted."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:321
+msgid "EDNS Buffer Size"
+msgstr "EDNS Tampon Bellek Boyutu"
+
+#: usr/local/www/services_unbound_advanced.php:334
+msgid ""
+"Number of bytes size to advertise as the EDNS reassembly buffer size. This "
+"is the value that is used in UDP datagrams sent to peers. RFC recommendation "
+"is 4096 (which is the default). If you have fragmentation reassemble "
+"problems, usually seen as timeouts, then a value of 1480 should help. The "
+"512 value bypasses most MTU path problems, but it can generate an excessive "
+"amount of TCP fallback."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:338
+msgid "Number of queries per thread"
+msgstr "İş parçacığı (thread) başına kuyruk sayısı"
+
+#: usr/local/www/services_unbound_advanced.php:351
+msgid ""
+"The number of queries that every thread will service simultaneously. If more "
+"queries arrive that need to be serviced, and no queries can be jostled, then "
+"these queries are dropped."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:355
+msgid "Jostle Timeout"
+msgstr "Jostle Zaman Aşımı"
+
+#: usr/local/www/services_unbound_advanced.php:368
+msgid ""
+"This timeout is used for when the server is very busy. This protects against "
+"denial of service by slow queries or high query rates. The default value is "
+"200 milliseconds."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:372
+msgid "Maximum TTL for RRsets and messages"
+msgstr "RRset(ler) ve mesajlar için Maksimum TTL"
+
+#: usr/local/www/services_unbound_advanced.php:375
+msgid ""
+"Configure a maximum Time to live for RRsets and messages in the cache. The "
+"default is 86400 seconds (1 day). When the internal TTL expires the cache "
+"item is expired. This can be configured to force the resolver to query for "
+"data more often and not trust (very large) TTL values."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:379
+msgid "Minimum TTL for RRsets and messages"
+msgstr "RRset(ler) ve mesajlar için En Az (minimum) TTL"
+
+#: usr/local/www/services_unbound_advanced.php:382
+msgid ""
+"Configure a minimum Time to live for RRsets and messages in the cache. The "
+"default is 0 seconds. If the minimum value kicks in, the data is cached for "
+"longer than the domain owner intended, and thus less queries are made to "
+"look up the data. The 0 value ensures the data in the cache is as the domain "
+"owner intended. High values can lead to trouble as the data in the cache "
+"might not match up with the actual data anymore."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:386
+msgid "TTL for Host cache entries"
+msgstr "Host önbellek girdileri için TTL"
+
+#: usr/local/www/services_unbound_advanced.php:395
+msgid ""
+"Time to live for entries in the host cache. The host cache contains "
+"roundtrip timing and EDNS support information. The default is 15 minutes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:399
+msgid "TTL for lame delegation"
+msgstr "Eksik yetkilendirme için TTL"
+
+#: usr/local/www/services_unbound_advanced.php:408
+msgid ""
+"Time to live for when a delegation is considered to be lame. The default is "
+"15 minutes."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:412
+msgid "Number of Hosts to cache"
+msgstr "Ön belleğe alınacak Hostların sayısı"
+
+#: usr/local/www/services_unbound_advanced.php:421
+msgid "Number of hosts for which information is cached. The default is 10,000."
+msgstr ""
+"Önbelleğe alınacak bilgileri belirleyecek hostların sayısı. Varsayılan "
+"10,000."
+
+#: usr/local/www/services_unbound_advanced.php:425
+msgid "Unwanted Reply Threshold"
+msgstr "İstenmeyen Yanıt Eşik değerleri"
+
+#: usr/local/www/services_unbound_advanced.php:435
+msgid ""
+"If enabled, a total number of unwanted replies is kept track of in every "
+"thread. When it reaches the threshold, a defensive action is taken and a "
+"warning is printed to the log file. This defensive action is to clear the "
+"RRSet and message caches, hopefully flushing away any poison. The default is "
+"disabled, but if enabled a value of 10 million is suggested."
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:439
+msgid "Log level verbosity"
+msgstr "Günlük seviyesi ayrıntı düzeyi"
+
+#: usr/local/www/services_unbound_advanced.php:452
+msgid "Select the log verbosity."
+msgstr "Günlük ayrıntı düzeyini seç."
+
+#: usr/local/www/services_unbound_advanced.php:456
+msgid "Disable auto-added access control"
+msgstr ""
+
+#: usr/local/www/services_unbound_advanced.php:459
+msgid ""
+"Check this box to disable the automatically-added access control entries. By "
+"default, IPv4 and IPv6 networks residing on internal interfaces of this "
+"system are permitted. Allowed networks must be manually configured on the "
+"Access Lists tab if the auto-added entries are disabled."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:90
+msgid ""
+"A valid IP address and port must be specified, for example "
+"192.168.100.10@5353."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:92
+msgid "A valid IP address must be specified, for example 192.168.100.10."
+msgstr ""
+
+#: usr/local/www/services_unbound_domainoverride_edit.php:143
+msgid ""
+"To use a nondefault port for communication, append an '@' with the port "
+"number."
+msgstr ""
+
+#: usr/local/www/services_unbound_host_edit.php:93
+msgid ""
+"The hostname can only contain the characters A-Z, 0-9, '_' and '-'. It may "
+"not start or end with '-'."
+msgstr ""
+
+#: usr/local/www/services_unbound_host_edit.php:213
+msgid "Edit DNS Resolver entry"
+msgstr ""
+
+#: usr/local/www/services_wol.php:64
+#, php-format
+msgid "Sent magic packet to %1$s (%2$s)%3$s"
+msgstr "Özel paketi %1$s (%2$s)%3$s adresine gönderildi"
+
+#: usr/local/www/services_wol.php:66
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not "
+"complete successfully%5$s"
+msgstr ""
+"Lütfen %1$ssistem günlüğü%2$snü kontrol edin, %3$s (%4$s) wol komutu "
+"başarısız oldu %5$s"
+
+#: usr/local/www/services_wol.php:89
+msgid "A valid interface must be specified."
+msgstr "Geçerli bir arabirim belirtilmelidir."
+
+#: usr/local/www/services_wol.php:95
+msgid "A valid ip could not be found!"
+msgstr "Geçerli bir IP bulunamadı!"
+
+#: usr/local/www/services_wol.php:100
+#, php-format
+msgid "Sent magic packet to %s."
+msgstr "%s adresine özel paket gönderildi."
+
+#: usr/local/www/services_wol.php:102
+#, php-format
+msgid ""
+"Please check the %1$ssystem log%2$s, the wol command for %3$s did not "
+"complete successfully%4$s"
+msgstr ""
+"Lütfen %1$s sistem günlüğü %2$s kontrol edin, %3$s wol(LiU) komutu başarısız "
+"oldu %4$s"
+
+#: usr/local/www/services_wol.php:142
+msgid "Choose which interface the host to be woken up is connected to."
+msgstr "Uyanacak istemcinin bağlantı olduğu arabirimi seçin."
+
+#: usr/local/www/services_wol.php:149
+msgid "Enter a MAC address "
+msgstr "MAC adresi giriniz "
+
+#: usr/local/www/services_wol.php:149
+msgid "in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "xx:xx:xx:xx:xx:xx biçiminde"
+
+#: usr/local/www/services_wol.php:158
+msgid "Wake all clients at once: "
+msgstr "Tüm istemcileri aynı anda aç: "
+
+#: usr/local/www/services_wol.php:159
+msgid "Or Click the MAC address to wake up an individual device:"
+msgstr "Veya tek bir cihazı uyandırmak için MAC adresine tıkla:"
+
+#: usr/local/www/services_wol.php:213
+msgid ""
+"This service can be used to wake up (power on) computers by sending special"
+msgstr "Bu servis bilgisayarları uyandırmak (açmak) için kullanılabilir"
+
+#: usr/local/www/services_wol.php:213
+msgid "Magic Packets"
+msgstr "Özel Paketler göndererek"
+
+#: usr/local/www/services_wol.php:213
+msgid ""
+"The NIC in the computer that is to be woken up must support Wake on LAN and "
+"has to be configured properly (WOL cable, BIOS settings). "
+msgstr ""
+"Uyandırılacak bilgisayardaki NIC Wake ON LAN (Lan ile Uyan) özelliğini "
+"desteklemelidir ve düzgün şekilde ayarlanmış olmalıdır (WOL kablosu, BIOS "
+"ayarları)."
+
+#: usr/local/www/services_wol_edit.php:127
+msgid "Edit WOL entry"
+msgstr "WOL (Lan ile Uyan) girdisini düzenle"
+
+#: usr/local/www/services_wol_edit.php:141
+msgid "Choose which interface this host is connected to."
+msgstr "İstemcinin bağlı olduğu arabirimi seçiniz."
+
+#: usr/local/www/services_wol_edit.php:148
+msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx"
+msgstr "MAC adresini örnekteki gibi giriniz: xx:xx:xx:xx:xx:xx"
+
+#: usr/local/www/shortcuts.inc:96
+msgid "Main page for this section"
+msgstr "Bu bölümün ana sayfası"
+
+#: usr/local/www/shortcuts.inc:120
+msgid "Status of items on this page"
+msgstr "Bu sayfanın öğelerinin durumları"
+
+#: usr/local/www/shortcuts.inc:127
+msgid "Log entries for items on this page"
+msgstr "Bu sayfanın öğelerinin kayıt girdileri"
+
+#: usr/local/www/status.php:125
+msgid "This status page includes the following information"
+msgstr "Durum sayfası aşağıdaki bilgileri içerir"
+
+#: usr/local/www/status.php:245
+msgid ""
+"Note: make sure to remove any sensitive information (passwords, maybe also "
+"IP addresses) before posting information from this page in public places "
+"(like mailing lists)"
+msgstr ""
+"Not: Halka açık yerlerde (örneğin e-posta listelerinde) bu bilgileri "
+"yayınlamadan önce gizlilik dereceli bilgileri (parolalar, belki IP "
+"adresleri) silmeyi unutmayın"
+
+#: usr/local/www/status.php:248
+msgid "Passwords in config.xml have been automatically removed"
+msgstr "Config.xml'deki parolalar otomatik olarak silinecektir"
+
+#: usr/local/www/status_captiveportal.php:53
+msgid "Status: Captive portal"
+msgstr "Durum: Hizmet portalı"
+
+#: usr/local/www/status_captiveportal.php:115
+#: usr/local/www/status_captiveportal_expire.php:72
+#: usr/local/www/status_captiveportal_test.php:72
+#: usr/local/www/status_captiveportal_voucher_rolls.php:77
+#: usr/local/www/status_captiveportal_vouchers.php:110
+msgid "Active Users"
+msgstr "Etkin Kullanıcılar"
+
+#: usr/local/www/status_captiveportal.php:116
+#: usr/local/www/status_captiveportal_expire.php:73
+#: usr/local/www/status_captiveportal_test.php:73
+#: usr/local/www/status_captiveportal_voucher_rolls.php:78
+#: usr/local/www/status_captiveportal_vouchers.php:111
+msgid "Active Vouchers"
+msgstr "Etkin Biletler"
+
+#: usr/local/www/status_captiveportal.php:118
+#: usr/local/www/status_captiveportal_expire.php:75
+#: usr/local/www/status_captiveportal_test.php:59
+#: usr/local/www/status_captiveportal_test.php:75
+#: usr/local/www/status_captiveportal_voucher_rolls.php:80
+#: usr/local/www/status_captiveportal_vouchers.php:113
+msgid "Test Vouchers"
+msgstr "Test Biletleri"
+
+#: usr/local/www/status_captiveportal.php:119
+#: usr/local/www/status_captiveportal_expire.php:60
+#: usr/local/www/status_captiveportal_expire.php:76
+#: usr/local/www/status_captiveportal_test.php:76
+#: usr/local/www/status_captiveportal_voucher_rolls.php:81
+#: usr/local/www/status_captiveportal_vouchers.php:114
+msgid "Expire Vouchers"
+msgstr "Süresi dolan Biletler"
+
+#: usr/local/www/status_captiveportal.php:130
+msgid "Captive Portal Zone"
+msgstr "Hizmet Portalı Alanı"
+
+#: usr/local/www/status_captiveportal.php:154
+msgid "Captive Portal status"
+msgstr ""
+
+#: usr/local/www/status_captiveportal.php:161
+#: usr/local/www/status_captiveportal.php:164
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:111
+msgid "Session start"
+msgstr "Oturum başlangıcı"
+
+#: usr/local/www/status_captiveportal.php:162
+#: usr/local/www/widgets/widgets/captive_portal_status.widget.php:112
+msgid "Last activity"
+msgstr "Son etkinlik"
+
+#: usr/local/www/status_captiveportal.php:190
+msgid "Do you really want to disconnect this client?"
+msgstr "Bu istemcinin oturumu kapatmak istediÄŸinize emin misiniz?"
+
+#: usr/local/www/status_captiveportal.php:190
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:145
+#: usr/local/www/status_interfaces.php:158
+#: usr/local/www/status_interfaces.php:172
+msgid "Disconnect"
+msgstr "Bağlantıyı Kes"
+
+#: usr/local/www/status_captiveportal.php:207
+msgid "Don't show last activity"
+msgstr "Son etkinlikleri görüntüleme"
+
+#: usr/local/www/status_captiveportal.php:210
+msgid "Show last activity"
+msgstr "Son etkinlikleri göster"
+
+#: usr/local/www/status_captiveportal_expire.php:85
+#: usr/local/www/status_captiveportal_test.php:85
+msgid "Voucher(s)"
+msgstr "Bilet(ler)"
+
+#: usr/local/www/status_captiveportal_expire.php:89
+msgid ""
+"Enter multiple vouchers separated by space or newline. All valid vouchers "
+"will be marked as expired"
+msgstr ""
+"Birden fazla biletleri boşluk yada yeni satır ile girin. Tüm geçerli "
+"biletler süresi dolmuş olarak işaretlenecek"
+
+#: usr/local/www/status_captiveportal_test.php:89
+msgid ""
+"Enter multiple vouchers separated by space or newline. The remaining time, "
+"if valid, will be shown for each voucher"
+msgstr ""
+"Boşluklarla veya yeni satırlarla birbirinden ayrılmış birden fazla bilet "
+"girin. Her biletin (varsa) kalan süresi gösterilecektir"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:90
+msgid "Roll#"
+msgstr "Grup No#"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:92
+msgid "# of Tickets"
+msgstr "# Bilet Sayısı"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:94
+msgid "used"
+msgstr "kullanılan"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:95
+msgid "active"
+msgstr "aktif"
+
+#: usr/local/www/status_captiveportal_voucher_rolls.php:96
+msgid "ready"
+msgstr "hazır"
+
+#: usr/local/www/status_captiveportal_vouchers.php:123
+msgid "Voucher"
+msgstr "Bilet"
+
+#: usr/local/www/status_captiveportal_vouchers.php:125
+msgid "Activated at"
+msgstr "EtkinleÅŸtirilme"
+
+#: usr/local/www/status_captiveportal_vouchers.php:126
+msgid "Expires in"
+msgstr "Zaman dolumu"
+
+#: usr/local/www/status_captiveportal_vouchers.php:127
+msgid "Expires at"
+msgstr "Zaman dolumu"
+
+#: usr/local/www/status_captiveportal_vouchers.php:135
+msgid "min"
+msgstr "dk"
+
+#: usr/local/www/status_dhcp_leases.php:50
+msgid "DHCP leases"
+msgstr "DHCP kiraları"
+
+#: usr/local/www/status_dhcp_leases.php:300
+#: usr/local/www/status_dhcpv6_leases.php:385
+msgid "Failover Group"
+msgstr "Yük Aktarma Grubu"
+
+#: usr/local/www/status_dhcp_leases.php:301
+#: usr/local/www/status_dhcpv6_leases.php:386
+msgid "My State"
+msgstr "Durumum"
+
+#: usr/local/www/status_dhcp_leases.php:302
+#: usr/local/www/status_dhcp_leases.php:304
+#: usr/local/www/status_dhcpv6_leases.php:387
+#: usr/local/www/status_dhcpv6_leases.php:389
+msgid "Since"
+msgstr "Başlangıcı"
+
+#: usr/local/www/status_dhcp_leases.php:303
+#: usr/local/www/status_dhcpv6_leases.php:388
+msgid "Peer State"
+msgstr "EÅŸ Durumu"
+
+#: usr/local/www/status_dhcp_leases.php:335
+#: usr/local/www/status_dhcpv6_leases.php:421
+#: usr/local/www/status_dhcpv6_leases.php:506
+msgid "End"
+msgstr "BitiÅŸ"
+
+#: usr/local/www/status_dhcp_leases.php:336
+#: usr/local/www/status_dhcpv6_leases.php:422
+#: usr/local/www/status_gateway_groups.php:134
+#: usr/local/www/status_gateways.php:132 usr/local/www/status_gateways.php:136
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:60
+msgid "Online"
+msgstr "Çevrim İçi"
+
+#: usr/local/www/status_dhcp_leases.php:337
+#: usr/local/www/status_dhcpv6_leases.php:423
+msgid "Lease Type"
+msgstr "Kira Türü"
+
+#: usr/local/www/status_dhcp_leases.php:386
+msgid "send Wake on LAN packet to this MAC address"
+msgstr "bu MAC adresine ağdan açma paketi gönder"
+
+#: usr/local/www/status_dhcp_leases.php:408
+#: usr/local/www/status_dhcpv6_leases.php:482
+msgid "add a static mapping for this MAC address"
+msgstr "bu MAC adresi için statik eşleşme ekle"
+
+#: usr/local/www/status_dhcp_leases.php:411
+msgid "edit the static mapping for this entry"
+msgstr ""
+
+#: usr/local/www/status_dhcp_leases.php:415
+msgid "add a Wake on LAN mapping for this MAC address"
+msgstr "bu MAC adresi için ağdan açma eşlemesi ekle"
+
+#: usr/local/www/status_dhcp_leases.php:420
+#: usr/local/www/status_dhcpv6_leases.php:491
+msgid "delete this DHCP lease"
+msgstr "bu DHCP kirasını sil"
+
+#: usr/local/www/status_dhcp_leases.php:433
+#: usr/local/www/status_dhcpv6_leases.php:562
+msgid "Show active and static leases only"
+msgstr "Sadece etkin ve statik kira girişlerini görüntüle"
+
+#: usr/local/www/status_dhcp_leases.php:436
+#: usr/local/www/status_dhcpv6_leases.php:565
+msgid "Show all configured leases"
+msgstr "Yapılandırılmış tüm kiraları görüntüle"
+
+#: usr/local/www/status_dhcp_leases.php:440
+#: usr/local/www/status_dhcpv6_leases.php:569
+msgid "No leases file found. Is the DHCP server active"
+msgstr "Kira dosyası bulunamadı. DHCP sunucunun aktif olduğundan emin olun"
+
+# 92%
+#: usr/local/www/status_dhcpv6_leases.php:51
+msgid "DHCPv6 leases"
+msgstr "DHCPv6 kiraları"
+
+#: usr/local/www/status_dhcpv6_leases.php:417
+#: usr/local/www/status_dhcpv6_leases.php:503
+msgid "IAID"
+msgstr "IAID"
+
+#: usr/local/www/status_dhcpv6_leases.php:419
+msgid "Hostname/MAC"
+msgstr "Host adı/MAC"
+
+# 78%
+#: usr/local/www/status_dhcpv6_leases.php:502
+msgid "IPv6 Prefix"
+msgstr "IPv6 Ön-ek"
+
+#: usr/local/www/status_filter_reload.php:45
+msgid "Filter Reload Status"
+msgstr "Filtre Yeniden Yükleme Durumu"
+
+#: usr/local/www/status_filter_reload.php:90
+msgid ""
+"This page will automatically refresh every 3 seconds until the filter is "
+"done reloading"
+msgstr ""
+"Bu sayfa filtre yeniden yükleme tamamlanana kadar her 3 saniyede bir "
+"güncellenecektir"
+
+#: usr/local/www/status_gateway_groups.php:102
+#, php-format
+msgid "Tier %s"
+msgstr "Katman %s"
+
+#: usr/local/www/status_gateway_groups.php:128
+#: usr/local/www/status_gateways.php:126
+msgid "Warning, Packetloss"
+msgstr "Uyarı, Paket Kaybı"
+
+#: usr/local/www/status_gateway_groups.php:131
+#: usr/local/www/status_gateways.php:129
+msgid "Warning, Latency"
+msgstr "Uyarı, Gecikme"
+
+#: usr/local/www/status_gateway_groups.php:137
+msgid "Gathering data"
+msgstr "Veri toplanıyor"
+
+#: usr/local/www/status_gateways.php:77
+msgid "RTT"
+msgstr "RTT"
+
+#: usr/local/www/status_gateways.php:78
+msgid "Loss"
+msgstr "Kayıp"
+
+#: usr/local/www/status_gateways.php:102 usr/local/www/status_gateways.php:110
+#: usr/local/www/status_gateways.php:139
+#: usr/local/www/widgets/widgets/gateways.widget.php:88
+#: usr/local/www/widgets/widgets/gateways.widget.php:97
+msgid "Pending"
+msgstr "Beklemede"
+
+#: usr/local/www/status_gateways.php:120
+msgid "Offline (forced)"
+msgstr ""
+
+#: usr/local/www/status_gateways.php:145
+msgid "Last check:"
+msgstr "Son kontrol:"
+
+#: usr/local/www/status_graph.php:250
+msgid "Host IP"
+msgstr "Host IP"
+
+# 86%
+#: usr/local/www/status_graph.php:250
+msgid "Host Name or IP"
+msgstr "Host Adı ya da IP"
+
+#: usr/local/www/status_graph.php:251
+msgid "Bandwidth In"
+msgstr "Bant Genişliği (içeri)"
+
+#: usr/local/www/status_graph.php:252
+msgid "Bandwidth Out"
+msgstr "Bant Genişliği (dışarı)"
+
+# boş bırakınız kelime içinde gerekli değil.
+#: usr/local/www/status_graph.php:338
+msgid "the"
+msgstr " "
+
+#: usr/local/www/status_graph.php:338
+msgid "Adobe SVG Viewer"
+msgstr "Adobe SVG Görüntüleyici"
+
+#: usr/local/www/status_graph.php:338
+msgid ""
+"Firefox 1.5 or later or other browser supporting SVG is required to view the "
+"graph"
+msgstr ""
+"Grafiği görüntülemek için Firefox 1.5 üstü ve SVG destekli tarayıcılar "
+"gerekmektedir"
+
+#: usr/local/www/status_graph_cpu.php:42
+msgid "CPU load"
+msgstr "CPU yükü"
+
+#: usr/local/www/status_graph_cpu.php:47
+msgid "Status: CPU Graph"
+msgstr "Durum: CPU GrafiÄŸi"
+
+#: usr/local/www/status_graph_cpu.php:54
+msgid "if you can't see the graph, you may have to install the"
+msgstr "grafiği göremiyorsanız, kurmanız gerekebilir "
+
+#: usr/local/www/status_graph_cpu.php:54
+msgid "Adobe SVG viewer"
+msgstr "Adobe SVG Görüntüleyici"
+
+#: usr/local/www/status_interfaces.php:84
+msgid "interface"
+msgstr "arabirim"
+
+# Interface kısmında hattı bıraktırmak için söylenen yer çeviri ye müdahele etmeyin.
+#: usr/local/www/status_interfaces.php:103
+#: usr/local/www/status_interfaces.php:119
+msgid "Release"
+msgstr "Bırak"
+
+#: usr/local/www/status_interfaces.php:103
+#: usr/local/www/status_interfaces.php:119
+msgid "Renew"
+msgstr "Yenile"
+
+#: usr/local/www/status_interfaces.php:132
+#: usr/local/www/status_interfaces.php:145
+#: usr/local/www/status_interfaces.php:158
+#: usr/local/www/status_interfaces.php:175
+msgid "Connect"
+msgstr "BaÄŸlan"
+
+#: usr/local/www/status_interfaces.php:183
+msgid "Uptime "
+msgstr "Çalışma Zamanı "
+
+#: usr/local/www/status_interfaces.php:190
+msgid "Cell Signal (RSSI)"
+msgstr "Cep Sinyali (RSSI)"
+
+#: usr/local/www/status_interfaces.php:197
+msgid "Cell Mode"
+msgstr "Cep Kipi"
+
+#: usr/local/www/status_interfaces.php:204
+msgid "Cell SIM State"
+msgstr "Cep SIM Durumu"
+
+#: usr/local/www/status_interfaces.php:211
+msgid "Cell Service"
+msgstr "Cep Servisi"
+
+#: usr/local/www/status_interfaces.php:218
+msgid "Cell Upstream"
+msgstr "Cep Gönderme"
+
+#: usr/local/www/status_interfaces.php:225
+msgid "Cell Downstream"
+msgstr "Cep Ä°ndirme"
+
+#: usr/local/www/status_interfaces.php:232
+msgid "Cell Current Up"
+msgstr "Cep Şimdiki Gönderilen"
+
+#: usr/local/www/status_interfaces.php:239
+msgid "Cell Current Down"
+msgstr "Cep Åžimdiki Ä°ndirilen"
+
+#: usr/local/www/status_interfaces.php:268
+msgid "Subnet mask IPv4"
+msgstr "AltaÄŸ maskesi IPv4"
+
+#: usr/local/www/status_interfaces.php:275
+msgid "Gateway IPv4"
+msgstr "Ağ geçidi IPv4"
+
+#: usr/local/www/status_interfaces.php:283
+msgid "IPv6 Link Local"
+msgstr "IPv6 Yerel Bağlantı"
+
+#: usr/local/www/status_interfaces.php:299
+msgid "Subnet mask IPv6"
+msgstr "AltaÄŸ maskesi IPv6"
+
+#: usr/local/www/status_interfaces.php:306
+msgid "Gateway IPv6"
+msgstr "Ağ Geçidi IPv6"
+
+#: usr/local/www/status_interfaces.php:314
+msgid "ISP DNS servers"
+msgstr "ISP DNS sunucular"
+
+#: usr/local/www/status_interfaces.php:333
+msgid "Media"
+msgstr "Ortam"
+
+#: usr/local/www/status_interfaces.php:340
+msgid "LAGG Protocol"
+msgstr "LAGG Protokol"
+
+#: usr/local/www/status_interfaces.php:347
+msgid "LAGG Ports"
+msgstr "LAGG Portları"
+
+#: usr/local/www/status_interfaces.php:370
+msgid "BSSID"
+msgstr "BSSID"
+
+#: usr/local/www/status_interfaces.php:384
+msgid "RSSI"
+msgstr "RSSI"
+
+#: usr/local/www/status_interfaces.php:391
+msgid "In/out packets"
+msgstr "gelen/giden paketler"
+
+#: usr/local/www/status_interfaces.php:400
+msgid "In/out packets (pass)"
+msgstr "gelen/giden paketler (izin ver)"
+
+#: usr/local/www/status_interfaces.php:409
+msgid "In/out packets (block)"
+msgstr "gelen/giden paketler (engelle)"
+
+#: usr/local/www/status_interfaces.php:419
+msgid "In/out errors"
+msgstr "girdi/çıktı hataları"
+
+#: usr/local/www/status_interfaces.php:427
+msgid "Collisions"
+msgstr "Çarpışmalar"
+
+#: usr/local/www/status_interfaces.php:436
+#, php-format
+msgid "Bridge (%s)"
+msgstr "Köprü (%s)"
+
+#: usr/local/www/status_interfaces.php:458
+msgid "Interrupts/Second"
+msgstr "Kesme/Saniye"
+
+#: usr/local/www/status_interfaces.php:461
+msgid "total"
+msgstr "toplam"
+
+#: usr/local/www/status_interfaces.php:463
+msgid "rate"
+msgstr "hız"
+
+#: usr/local/www/status_interfaces.php:474
+#, php-format
+msgid ""
+"Using dial-on-demand will bring the connection up again if any packet "
+"triggers it. To substantiate this point: disconnecting manually will %snot%s "
+"prevent dial-on-demand from making connections to the outside! Don't use "
+"dial-on-demand if you want to make sure that the line is kept disconnected."
+msgstr ""
+"Gerektiğinde arama özelliği eğer herhangi bir paket tarafından tetiklenirse "
+"bağlantıyı tekrar kurar. Diğer bir deyişle, bağlantıyı kesmek bağlantının "
+"tekrar kurulmayacağı anlamına %sgelmez%s . Bağlantıyı kestiğinizde tekrar "
+"bağlanmamasını istiyorsanız gerektiğinde arama özelliğini kullanmayın."
+
+#: usr/local/www/status_ntpd.php:180
+msgid "Ref ID"
+msgstr "Referans KimliÄŸi"
+
+#: usr/local/www/status_ntpd.php:181
+msgid "Stratum"
+msgstr "Katman"
+
+#: usr/local/www/status_ntpd.php:183
+msgid "When"
+msgstr "Ne zaman"
+
+#: usr/local/www/status_ntpd.php:184
+msgid "Poll"
+msgstr "Havuz"
+
+#: usr/local/www/status_ntpd.php:185
+msgid "Reach"
+msgstr "EriÅŸim"
+
+#: usr/local/www/status_ntpd.php:187
+msgid "Offset"
+msgstr "Dengeli"
+
+#: usr/local/www/status_ntpd.php:188
+msgid "Jitter"
+msgstr "Toplam Gecikme (Jitter)"
+
+#: usr/local/www/status_ntpd.php:245
+msgid "Clock Latitude"
+msgstr "Saat Enlemi"
+
+#: usr/local/www/status_ntpd.php:246
+msgid "Clock Longitude"
+msgstr "Saat Boylamı"
+
+#: usr/local/www/status_ntpd.php:247
+msgid "Clock Altitude"
+msgstr ""
+
+#: usr/local/www/status_ntpd.php:248
+msgid "Satellites"
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:150
+msgid "Client connections"
+msgstr "İstemci bağlantıları"
+
+#: usr/local/www/status_openvpn.php:157 usr/local/www/status_openvpn.php:227
+#: usr/local/www/system_camanager.php:562
+#: usr/local/www/system_certmanager.php:786
+#: usr/local/www/system_certmanager.php:959
+#: usr/local/www/vpn_openvpn_csc.php:747
+msgid "Common Name"
+msgstr "Genel Ad"
+
+#: usr/local/www/status_openvpn.php:158 usr/local/www/status_openvpn.php:228
+msgid "Real Address"
+msgstr "Gerçek Adres"
+
+#: usr/local/www/status_openvpn.php:159
+msgid "Virtual Address"
+msgstr "Sanal Adres"
+
+#: usr/local/www/status_openvpn.php:160 usr/local/www/status_openvpn.php:278
+#: usr/local/www/status_openvpn.php:341
+msgid "Connected Since"
+msgstr "Bağlantı Süresi"
+
+#: usr/local/www/status_openvpn.php:161 usr/local/www/status_openvpn.php:281
+#: usr/local/www/status_openvpn.php:344
+msgid "Bytes Sent"
+msgstr "Gönderilen Bayt"
+
+#: usr/local/www/status_openvpn.php:162
+msgid "Bytes Received"
+msgstr "Alınan Bayt"
+
+#: usr/local/www/status_openvpn.php:189
+msgid "Kill client connection from"
+msgstr "İstemci bağlantısını kes"
+
+#: usr/local/www/status_openvpn.php:214
+msgid "Show Routing Table"
+msgstr "Yönlendirme Tablosunu Göster"
+
+#: usr/local/www/status_openvpn.php:214
+msgid "Display OpenVPN's internal routing table for this server."
+msgstr "Bu sunucuda OpenVPN'(ler) in dahili yönlendirme tablolarını görüntüle."
+
+#: usr/local/www/status_openvpn.php:220
+msgid "Routing Table"
+msgstr "Yönlendirme Tablosu"
+
+#: usr/local/www/status_openvpn.php:229
+msgid "Target Network"
+msgstr "Hedef AÄŸ"
+
+#: usr/local/www/status_openvpn.php:230
+msgid "Last Used"
+msgstr "Son Kullanım"
+
+#: usr/local/www/status_openvpn.php:252
+msgid ""
+"An IP address followed by C indicates a host currently connected through the "
+"VPN."
+msgstr ""
+"IP adresinden sonra C host'un geçerli bağlantısının VPN üzerinden olduğunu "
+"gösterir."
+
+#: usr/local/www/status_openvpn.php:269
+msgid "Peer to Peer Server Instance Statistics"
+msgstr "Eşler Arası Sunucu İstatistikleri"
+
+#: usr/local/www/status_openvpn.php:279 usr/local/www/status_openvpn.php:342
+msgid "Virtual Addr"
+msgstr "Sanal Adres"
+
+#: usr/local/www/status_openvpn.php:280 usr/local/www/status_openvpn.php:343
+msgid "Remote Host"
+msgstr "Uzak Host"
+
+#: usr/local/www/status_openvpn.php:282 usr/local/www/status_openvpn.php:345
+msgid "Bytes Rcvd"
+msgstr "Alınan Bayt"
+
+#: usr/local/www/status_openvpn.php:332
+msgid "Client Instance Statistics"
+msgstr "OpenVPN Ä°stemci Ä°statistikleri"
+
+#: usr/local/www/status_openvpn.php:392
+msgid ""
+"If you have custom options that override the management features of OpenVPN "
+"on a client or server, they will cause that OpenVPN instance to not work "
+"correctly with this status page."
+msgstr ""
+
+#: usr/local/www/status_openvpn.php:396
+msgid "No OpenVPN instances defined"
+msgstr ""
+
+#: usr/local/www/status_queues.php:124
+msgid "Traffic shaper"
+msgstr "Trafik ÅŸekillendirici"
+
+#: usr/local/www/status_queues.php:132
+msgid "Traffic shaping is not configured."
+msgstr "Trafik şekillendirme yapılandırılmadı."
+
+#: usr/local/www/status_queues.php:168
+msgid "Statistics"
+msgstr "Ä°statistikler"
+
+#: usr/local/www/status_queues.php:176
+msgid "Borrows"
+msgstr "Borrow(lar)"
+
+#: usr/local/www/status_queues.php:177
+msgid "Suspends"
+msgstr "Bekletilenler"
+
+#: usr/local/www/status_queues.php:178
+msgid "Drops"
+msgstr "Düşenler"
+
+#: usr/local/www/status_queues.php:179
+msgid "Length"
+msgstr "Uzunlık"
+
+#: usr/local/www/status_queues.php:188
+msgid "Queue graphs take 5 seconds to sample data"
+msgstr "Kuyruk grafiklerinin veri örneklemesi 5 saniye kadar sürer"
+
+#: usr/local/www/status_queues.php:189
+msgid "You can configure the Traffic Shaper"
+msgstr "Trafik şekillendiriciyi yapılandır"
+
+#: usr/local/www/status_queues.php:250
+msgid "Loading"
+msgstr "Yükleniyor"
+
+#: usr/local/www/status_rrd_graph.php:160
+msgid "Invalid start date/time:"
+msgstr "Geçersiz başlat tarih/saat:"
+
+#: usr/local/www/status_rrd_graph.php:173
+msgid "Invalid end date/time:"
+msgstr "Geçersiz bitiş tarih/saat:"
+
+#: usr/local/www/status_rrd_graph.php:188
+#: usr/local/www/status_rrd_graph_settings.php:65
+msgid "Inverse"
+msgstr "Ters"
+
+#: usr/local/www/status_rrd_graph.php:189
+#: usr/local/www/status_rrd_graph_settings.php:66
+msgid "Absolute"
+msgstr "Mutlak"
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:67
+msgid "Absolute Timespans"
+msgstr "Mutlak Müddet"
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:68
+msgid "Current Period"
+msgstr "Güncel Aralık"
+
+#: usr/local/www/status_rrd_graph.php:250
+#: usr/local/www/status_rrd_graph_settings.php:69
+msgid "Previous Period"
+msgstr "Önceki Aralık"
+
+#: usr/local/www/status_rrd_graph.php:418
+#: usr/local/www/status_rrd_graph_settings.php:55
+#: usr/local/www/status_rrd_graph_settings.php:137
+msgid "Traffic"
+msgstr "Trafik"
+
+#: usr/local/www/status_rrd_graph.php:420
+#: usr/local/www/status_rrd_graph_settings.php:56
+#: usr/local/www/status_rrd_graph_settings.php:139
+msgid "Packets"
+msgstr "Paketler"
+
+#: usr/local/www/status_rrd_graph.php:422
+#: usr/local/www/status_rrd_graph_settings.php:57
+#: usr/local/www/status_rrd_graph_settings.php:141
+msgid "Quality"
+msgstr "Kalite"
+
+#: usr/local/www/status_rrd_graph.php:427
+#: usr/local/www/status_rrd_graph_settings.php:146
+msgid "QueueDrops"
+msgstr "Kuyruktan Düşme"
+
+#: usr/local/www/status_rrd_graph.php:435
+#: usr/local/www/status_rrd_graph_settings.php:154
+msgid "Cellular"
+msgstr "Hücresel"
+
+#: usr/local/www/status_rrd_graph.php:469
+msgid ""
+"Note: Change of color and/or style may not take effect until the next refresh"
+msgstr ""
+"Not: Renk yada stil deÄŸiÅŸimi bir sonraki yenilemeye kadar etkin olmayabilir"
+
+#: usr/local/www/status_rrd_graph.php:473
+msgid "Graphs:"
+msgstr "Grafikler:"
+
+#: usr/local/www/status_rrd_graph.php:536
+msgid "Style:"
+msgstr "Stil:"
+
+#: usr/local/www/status_rrd_graph.php:550
+msgid "Period:"
+msgstr "Aralık:"
+
+#: usr/local/www/status_rrd_graph.php:566
+msgid "Enter date and/or time. Current timezone:"
+msgstr "Åžimdiki zamandilimi nin tarih ve/veya saatini giriniz:"
+
+#: usr/local/www/status_rrd_graph.php:570
+msgid "Start:"
+msgstr "Başlangıç:"
+
+#: usr/local/www/status_rrd_graph.php:572
+msgid "End:"
+msgstr "BitiÅŸ:"
+
+#: usr/local/www/status_rrd_graph.php:574
+msgid "Go"
+msgstr "OluÅŸtur"
+
+#: usr/local/www/status_rrd_graph_img.php:44
+msgid "Image viewer"
+msgstr "Resim görüntüleyici"
+
+#: usr/local/www/status_rrd_graph_img.php:268
+#, php-format
+msgid "rrdcolors.inc.php for theme %s does not exist, using defaults!"
+msgstr ""
+"%s temasının rrdcolors.inc.php dosyası olmadığından öntanımlı değerler "
+"kullanılıyor!"
+
+#: usr/local/www/status_rrd_graph_img.php:1228
+#, php-format
+msgid "Sorry we do not have data to graph for %s"
+msgstr "%s için grafik oluşturmaya yetecek kadar veri yok"
+
+#: usr/local/www/status_rrd_graph_img.php:1248
+#, php-format
+msgid "Failed to create graph with error code %1$s, the error is: %2$s"
+msgstr "Grafik oluşturulamadı. Hata kodu: %1$s. Hata mesajı: %2$s"
+
+#: usr/local/www/status_rrd_graph_img.php:1250
+#: usr/local/www/status_rrd_graph_img.php:1257
+#, php-format
+msgid "failed to create graph from %s%s, removing database"
+msgstr "%s%s grafiği oluşturulamadı, veritabanı kaldırılıyor"
+
+#: usr/local/www/status_rrd_graph_settings.php:185
+msgid "Enables the RRD graphing backend."
+msgstr "RRD grafiği çıkarma servisini etkinleştirir."
+
+#: usr/local/www/status_rrd_graph_settings.php:189
+msgid "Default category"
+msgstr "Varsayılan kategori"
+
+#: usr/local/www/status_rrd_graph_settings.php:200
+msgid "This selects default category."
+msgstr "Varsayılan kategoriyi seçer."
+
+#: usr/local/www/status_rrd_graph_settings.php:204
+msgid "Default style"
+msgstr "Varsayılan stil"
+
+#: usr/local/www/status_rrd_graph_settings.php:215
+msgid "This selects the default style."
+msgstr "Varsayılan stili seçer."
+
+#: usr/local/www/status_rrd_graph_settings.php:219
+msgid "Default period"
+msgstr "Varsayılan zaman aralığı"
+
+#: usr/local/www/status_rrd_graph_settings.php:230
+msgid "This selects the default period."
+msgstr "Varsayılan zaman aralığını seçer."
+
+#: usr/local/www/status_rrd_graph_settings.php:242
+msgid "Reset RRD Data"
+msgstr "RRD verisini sıfırla"
+
+#: usr/local/www/status_rrd_graph_settings.php:242
+msgid ""
+"Do you really want to reset the RRD graphs? This will erase all graph data."
+msgstr ""
+"RRD grafiklerini silmek istediğinize emin misiniz? Tüm grafik verisi silinir."
+
+#: usr/local/www/status_rrd_graph_settings.php:248
+msgid ""
+"Graphs will not be allowed to be recreated within a 1 minute interval, "
+"please take this into account after changing the style."
+msgstr ""
+"Bir dakikalık aralıklarla grafik yeniden oluşturulamaz, stili seçtikten "
+"sonra bir dakika boyunca tekrar değiştiremeyeceğinizi unutmayınız."
+
+#: usr/local/www/status_services.php:120
+#: usr/local/www/widgets/widgets/services_status.widget.php:90
+msgid "No services found"
+msgstr "Herhangi bir servis bulunamadı"
+
+#: usr/local/www/status_upnp.php:49
+msgid "Rules have been cleared and the daemon restarted"
+msgstr "Kurallar temizlendi ve servis tekrar başlatıldı"
+
+#: usr/local/www/status_upnp.php:59
+msgid "UPnP &amp; NAT-PMP Status"
+msgstr "UPnP &amp; NAT-PMP Durumu"
+
+#: usr/local/www/status_upnp.php:69
+msgid "UPnP is currently disabled."
+msgstr "UPnP devre dışı."
+
+#: usr/local/www/status_upnp.php:79
+msgid "all currently connected sessions"
+msgstr "şu anda bağlı olan tüm oturumlar"
+
+#: usr/local/www/status_upnp.php:90
+msgid "Int. Port"
+msgstr ""
+
+#: usr/local/www/status_wireless.php:85
+msgid ""
+"Rescan has been initiated in the background. Refresh this page in 10 seconds "
+"to see the results."
+msgstr ""
+"Tekrar tarama işlemi arkaplanda başlatılmıştır. Sonuçları görmek için bu "
+"sayfayı 10 sn içinde yenileyiniz."
+
+#: usr/local/www/status_wireless.php:95
+msgid "Nearby access points or ad-hoc peers"
+msgstr "Yakın erişim noktaları ve uçtan uca eşleri"
+
+#: usr/local/www/status_wireless.php:142
+msgid "Associated or ad-hoc peers"
+msgstr "Ä°liÅŸkilendirilmiÅŸ (ad-hoc) eÅŸleri"
+
+#: usr/local/www/system.php:122
+msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr ""
+"Alan adı sadece İngilizcede a-z, 0-9, '-' ve '.' karakterlerini içerebilir."
+
+#: usr/local/www/system.php:158
+#, php-format
+msgid ""
+"You can not assign a gateway to DNS '%s' server which is on a directly "
+"connected network."
+msgstr "Doğrudan bağlı bir ağ da %s DNS sunucusu için ağ geçidi atayamazsınız."
+
+#: usr/local/www/system.php:167
+msgid ""
+"The time update interval must be either 0 (disabled) or between 6 and 1440."
+msgstr ""
+"Zaman güncelleme aralığı 0 (devre dışı) ya da 6 ile 1140 arasında bir "
+"tamsayı olmalıdır."
+
+#: usr/local/www/system.php:174
+msgid ""
+"A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'."
+msgstr ""
+"NTP Zaman sunucusu İngilizce a-z,0-9, '-' ve '.' karakterleri içerebilir."
+
+#: usr/local/www/system.php:316
+msgid "Name of the firewall host, without domain part"
+msgstr "Güvenlik duvarı sistemin adı, alan adı olmadan"
+
+#: usr/local/www/system.php:327
+msgid ""
+"Do not use 'local' as a domain name. It will cause local hosts running mDNS "
+"(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."
+msgstr ""
+"Alan adı olarak 'local' kullanmayın. mDNS çalıştıran yerel sunucuların "
+"(avahi, bonjour vb.) mDNS çalıştırmayan yerel sunucuları bulmasını engeller."
+
+#: usr/local/www/system.php:329
+msgid "mycorp.com, home, office, private, etc."
+msgstr "firmam.com, ev, ofis, ozel vb."
+
+#: usr/local/www/system.php:339
+msgid "DNS Server"
+msgstr "DNS Sunucu"
+
+#: usr/local/www/system.php:341
+msgid "Use gateway"
+msgstr "Ağ geçidi kullan"
+
+#: usr/local/www/system.php:388
+msgid ""
+"Enter IP addresses to be used by the system for DNS resolution. These are "
+"also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+msgstr ""
+
+#: usr/local/www/system.php:393
+msgid ""
+"In addition, optionally select the gateway for each DNS server. When using "
+"multiple WAN connections there should be at least one unique DNS server per "
+"gateway."
+msgstr ""
+"Ek olarak her DNS sunucunun ağ geçidini seçin. Birden fazla WAN bağlantısı "
+"kullanırken her ağ geçidi için en az bir benzersiz DNS sunucu "
+"tanımlamalısınız."
+
+#: usr/local/www/system.php:400
+msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN"
+msgstr ""
+"WAN üzerinde DHCP/PPP tarafından DNS sunucu listesinin üzerine yazılmasına "
+"izin ver"
+
+#: usr/local/www/system.php:403
+#, php-format
+msgid ""
+"If this option is set, %s will use DNS servers assigned by a DHCP/PPP server "
+"on WAN for its own purposes (including the DNS forwarder). However, they "
+"will not be assigned to DHCP and PPTP VPN clients."
+msgstr ""
+"Bu seçenek açıldığında %s kendi işleri için WAN üzerinde DHCP/PPP sunucu "
+"tarafından atanan DNS sunucularını kullanır. Ancak, DHCP ve PPTP VPN "
+"istemcilerine atanmazlar."
+
+#: usr/local/www/system.php:412
+msgid "Do not use the DNS Forwarder as a DNS server for the firewall"
+msgstr "DNS yönlendiriciyi güvenlik duvarı için DNS sunucu olarak kullanma"
+
+#: usr/local/www/system.php:415
+msgid ""
+"By default localhost (127.0.0.1) will be used as the first DNS server where "
+"the DNS Forwarder or DNS Resolver is enabled and set to listen on Localhost, "
+"so system can use the local DNS service to perform lookups. Checking this "
+"box omits localhost from the list of DNS servers."
+msgstr ""
+
+#: usr/local/www/system.php:421
+msgid "Time zone"
+msgstr "Zaman dilimi"
+
+#: usr/local/www/system.php:433
+msgid "Select the location closest to you"
+msgstr "Size en yakın konumu seçiniz"
+
+#: usr/local/www/system.php:451
+msgid "NTP time server"
+msgstr "NTP zaman sunucusu"
+
+#: usr/local/www/system.php:456
+msgid ""
+"Use a space to separate multiple hosts (only one required). Remember to set "
+"up at least one DNS server if you enter a host name here!"
+msgstr ""
+"Bir tane yeterlidir ama birden fazla girecekseniz aralarına bir boşluk "
+"bırakın. Eğer burada bir adres girerseniz en az bir DNS sunucu girmeyi "
+"unutmamalısınız!"
+
+#: usr/local/www/system.php:463
+msgid "Language"
+msgstr "Dil"
+
+#: usr/local/www/system.php:476
+msgid "Choose a language for the webConfigurator"
+msgstr "webArayüzü için dil seçiniz"
+
+#: usr/local/www/system.php:485
+msgid "Theme"
+msgstr "Tema"
+
+#: usr/local/www/system.php:509
+msgid "This will change the look and feel of"
+msgstr "Görünümü değiştirerek hissedeceksiniz"
+
+#: usr/local/www/system_advanced_admin.php:90
+msgid "You must specify a valid webConfigurator port number"
+msgstr "webArayüzü için geçerli bir port numarası belirtmelisiniz"
+
+#: usr/local/www/system_advanced_admin.php:94
+msgid "Max Processes must be a number 1 or greater"
+msgstr "En Fazla Süreç Sayısı, en az 1 olmak üzere bir tamsayı olmalıdır"
+
+#: usr/local/www/system_advanced_admin.php:100
+#, php-format
+msgid "Alternate hostname %s is not a valid hostname."
+msgstr "Alternatif host adı %s geçerli bir host adı değil."
+
+#: usr/local/www/system_advanced_admin.php:247
+#, php-format
+msgid "One moment...redirecting to %s in 20 seconds."
+msgstr "Bekleyiniz... 20 saniye içinde %s sayfasına yönlendiriliyorsunuz."
+
+#: usr/local/www/system_advanced_admin.php:275
+msgid "Advanced: Admin Access"
+msgstr "Gelişmiş: Yönetici Erişimi"
+
+#: usr/local/www/system_advanced_admin.php:307
+#: usr/local/www/system_advanced_firewall.php:270
+#: usr/local/www/system_advanced_misc.php:287
+#: usr/local/www/system_advanced_network.php:188
+#: usr/local/www/system_advanced_notifications.php:184
+#: usr/local/www/system_advanced_sysctl.php:157
+msgid "Admin Access"
+msgstr "Yönetici Erişimi"
+
+#: usr/local/www/system_advanced_admin.php:308
+#: usr/local/www/system_advanced_firewall.php:271
+#: usr/local/www/system_advanced_misc.php:288
+#: usr/local/www/system_advanced_network.php:189
+#: usr/local/www/system_advanced_notifications.php:185
+#: usr/local/www/system_advanced_sysctl.php:158
+msgid "Firewall / NAT"
+msgstr "Güvenlik duvarı/NAT"
+
+#: usr/local/www/system_advanced_admin.php:309
+#: usr/local/www/system_advanced_firewall.php:272
+#: usr/local/www/system_advanced_misc.php:289
+#: usr/local/www/system_advanced_network.php:190
+#: usr/local/www/system_advanced_notifications.php:186
+#: usr/local/www/system_advanced_sysctl.php:159
+msgid "Networking"
+msgstr "AÄŸ"
+
+#: usr/local/www/system_advanced_admin.php:310
+#: usr/local/www/system_advanced_firewall.php:273
+#: usr/local/www/system_advanced_misc.php:290
+#: usr/local/www/system_advanced_network.php:191
+#: usr/local/www/system_advanced_notifications.php:187
+#: usr/local/www/system_advanced_sysctl.php:160
+msgid "Miscellaneous"
+msgstr "DiÄŸer Ayarlar"
+
+#: usr/local/www/system_advanced_admin.php:311
+#: usr/local/www/system_advanced_firewall.php:274
+#: usr/local/www/system_advanced_misc.php:291
+#: usr/local/www/system_advanced_network.php:192
+#: usr/local/www/system_advanced_notifications.php:188
+#: usr/local/www/system_advanced_sysctl.php:161
+msgid "System Tunables"
+msgstr "Sistem İnce Ayarları"
+
+#: usr/local/www/system_advanced_admin.php:312
+#: usr/local/www/system_advanced_firewall.php:275
+#: usr/local/www/system_advanced_misc.php:292
+#: usr/local/www/system_advanced_network.php:193
+#: usr/local/www/system_advanced_notifications.php:189
+#: usr/local/www/system_advanced_sysctl.php:162
+msgid "Notifications"
+msgstr "Bildirimler"
+
+#: usr/local/www/system_advanced_admin.php:330
+msgid "webConfigurator"
+msgstr "webArayüzü"
+
+#: usr/local/www/system_advanced_admin.php:350
+msgid "No Certificates have been defined. You must"
+msgstr ""
+"Herhangi bir sertifika tanımlanmadı. SSL'i etkinleştirebilmek için bir "
+"sertifika"
+
+#: usr/local/www/system_advanced_admin.php:351
+msgid "Create or Import"
+msgstr "Oluştur yada İçeri Aktar"
+
+#: usr/local/www/system_advanced_admin.php:352
+msgid "a Certificate before SSL can be enabled."
+msgstr "SSL etkinleştirilmeden önceki sertifika."
+
+#: usr/local/www/system_advanced_admin.php:376
+msgid "TCP port"
+msgstr "TCP port"
+
+#: usr/local/www/system_advanced_admin.php:381
+msgid ""
+"Enter a custom port number for the webConfigurator above if you want to "
+"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect "
+"immediately after save."
+msgstr ""
+"webArayüzünün çalışacağı portu değiştirmek istiyorsanız buraya yazın. "
+"Varsayılan portlar (HTTP 80, HTTPS 443'tür). Kaydettiğiniz anda "
+"deÄŸiÅŸiklikler etkinleÅŸtirilir."
+
+#: usr/local/www/system_advanced_admin.php:388
+msgid "Max Processes"
+msgstr "En Fazla İşlem Sayısı"
+
+#: usr/local/www/system_advanced_admin.php:393
+msgid ""
+"Enter the number of webConfigurator processes you want to run. This defaults "
+"to 2. Increasing this will allow more users/browsers to access the GUI "
+"concurrently."
+msgstr ""
+"Çalıştırmak istediğiniz webArayüzü sayısını girin. Öntanımlı değeri 2'dir. "
+"Bu sayıyı artırmak aynı anda daha fazla kullanıcının / tarayıcının web "
+"arayüzüne erişebilmesine olanak verir."
+
+#: usr/local/www/system_advanced_admin.php:400
+msgid "WebGUI redirect"
+msgstr "Web arayüzünü yeniden yönlendir"
+
+#: usr/local/www/system_advanced_admin.php:403
+msgid "Disable webConfigurator redirect rule"
+msgstr "webArayüzü yeniden yönlendirme kuralını kapat"
+
+#: usr/local/www/system_advanced_admin.php:405
+msgid ""
+"When this is unchecked, access to the webConfigurator is always permitted "
+"even on port 80, regardless of the listening port configured. Check this box "
+"to disable this automatically added redirect rule. "
+msgstr ""
+"Bu kutunun işareti kaldırıldığında başka bir porta yönlendirme olsa bile 80 "
+"portundan webArayüzüne erişime izin verilir. Otomatik olarak eklenen bu "
+"yeniden yönlendirme kuralını kapatmak için kutuyu işaretleyin. "
+
+#: usr/local/www/system_advanced_admin.php:412
+msgid "WebGUI Login Autocomplete"
+msgstr "Web arayüzü Oturum Açma Otomatik Tamamlama"
+
+#: usr/local/www/system_advanced_admin.php:415
+msgid "Enable webConfigurator login autocomplete"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:417
+msgid ""
+"When this is checked, login credentials for the webConfigurator may be saved "
+"by the browser. While convenient, some security standards require this to be "
+"disabled. Check this box to enable autocomplete on the login form so that "
+"browsers will prompt to save credentials (NOTE: Some browsers do not respect "
+"this option). "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:424
+msgid "WebGUI login messages"
+msgstr "Web arayüzü oturum açma mesajları"
+
+#: usr/local/www/system_advanced_admin.php:427
+msgid "Disable logging of webConfigurator successful logins"
+msgstr "webArayüzüne başarıyla oturum açma işlemlerini günlüğe kaydetme"
+
+#: usr/local/www/system_advanced_admin.php:429
+msgid ""
+"When this is checked, successful logins to the webConfigurator will not be "
+"logged."
+msgstr ""
+"Bu seçenek işaretlendiğinde webArayüzüne oturum açma işlemleri günlüğe "
+"kaydedilmez."
+
+#: usr/local/www/system_advanced_admin.php:435
+msgid "Anti-lockout"
+msgstr "Anti-kilit"
+
+#: usr/local/www/system_advanced_admin.php:444
+msgid "Disable webConfigurator anti-lockout rule"
+msgstr "webArayüzü anti-kilit kuralını kapat"
+
+#: usr/local/www/system_advanced_admin.php:446
+#, php-format
+msgid ""
+"When this is unchecked, access to the webConfigurator on the %s interface is "
+"always permitted, regardless of the user-defined firewall rule set. Check "
+"this box to disable this automatically added rule, so access to the "
+"webConfigurator is controlled by the user-defined firewall rules (ensure you "
+"have a firewall rule in place that allows you in, or you will lock yourself "
+"out!)"
+msgstr ""
+"Bu kutunun işareti kaldırıldığında, güvenlik duvarının kullanıcı tarafından "
+"tanımlanmış kurallarına bakılmaksızın webArayüzüne %s arabiriminden erişime "
+"her zaman izin verilir. Otomatik olarak eklenen bu kuralı kaldırmak için bu "
+"kutuyu işaretleyin.webArayüzünden bu kutuyu işaretlerseniz (kendinizi "
+"kilitlememek için bir güvenlik duvarı kuralı eklemeniz gerektiğini "
+"unutmayın!)"
+
+#: usr/local/www/system_advanced_admin.php:452
+msgid ""
+"Hint: the &quot;Set interface(s) IP address&quot; option in the console menu "
+"resets this setting as well."
+msgstr ""
+"İpucu: Konsol menüsündeki &quot;Arabirim(ler)in IP adresini yapılandır&quot; "
+"seçeneği bu ayarı da sıfırlar."
+
+#: usr/local/www/system_advanced_admin.php:456
+msgid "DNS Rebind Check"
+msgstr "DNS Yeniden Bağlama Kontrolü"
+
+#: usr/local/www/system_advanced_admin.php:459
+msgid "Disable DNS Rebinding Checks"
+msgstr "DNS Yeniden BaÄŸlama Kontrollerini Kapat"
+
+#: usr/local/www/system_advanced_admin.php:461
+msgid ""
+"When this is unchecked, your system is protected against <a href=\"http://en."
+"wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. This blocks "
+"private IP responses from your configured DNS servers. Check this box to "
+"disable this protection if it interferes with webConfigurator access or name "
+"resolution in your environment. "
+msgstr ""
+"Bu kutunun işaretini kaldırdığınızda, sisteminiz <a href=\\\"http://en."
+"wikipedia.org/wiki/DNS_rebinding\\\">DNS Yeniden Bağlama saldırıları</a>na "
+"karşı korunmuş olur. Bunu yapılandırılmış DNS sunucularınızdan özel IP "
+"yanıtlarını engelleyerek yapar. Bu seçeneği sadece webArayüzüne erişiminizi "
+"engelliyor veya isim çözme işlemlerini bozuyorsa kapatın. "
+
+#: usr/local/www/system_advanced_admin.php:468
+msgid "Alternate Hostnames"
+msgstr "Alternatif Host Adları"
+
+#: usr/local/www/system_advanced_admin.php:472
+msgid "Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"
+msgstr ""
+"DNS Yeniden Bağlama ve HTTP_REFERER Kontrolleri için Alternatif Host Adları"
+
+#: usr/local/www/system_advanced_admin.php:474
+msgid ""
+"Here you can specify alternate hostnames by which the router may be queried, "
+"to bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."
+msgstr ""
+"Yönlendiricinin (router) sorgulanabileceği alternatif host adları "
+"girebilirsiniz, bu hostlar DNS Yeniden Bağlama Saldırısı kontrollerinden "
+"muaf tutulur. Birden fazla host adı girecekseniz aralarında bir boşluk "
+"bırakın."
+
+#: usr/local/www/system_advanced_admin.php:479
+msgid "Browser HTTP_REFERER enforcement"
+msgstr "Tarayıcı HTTP_REFERER mecburiyeti"
+
+#: usr/local/www/system_advanced_admin.php:482
+msgid "Disable HTTP_REFERER enforcement check"
+msgstr "Tarayıcı HTTP_REFERER mecburiyeti kontrollerini kapat"
+
+#: usr/local/www/system_advanced_admin.php:484
+msgid ""
+"When this is unchecked, access to the webConfigurator is protected against "
+"HTTP_REFERER redirection attempts. Check this box to disable this protection "
+"if you find that it interferes with webConfigurator access in certain corner "
+"cases such as using external scripts to interact with this system. More "
+"information on HTTP_REFERER is available from <a target='_blank' "
+"href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."
+msgstr ""
+"Bu kutunun işareti kaldırıldığında, web arayüzüne erişim HTTP_REFERER "
+"yeniden yönlendirme denemelerine karşı korunur. Dış betiklerin sisteme "
+"erişimde sıkıntı yaşaması gibi uç durumlar yaşıyorsanız kutunun işaretini "
+"kaldırın. HTTP_REFERER başlığı hakkında daha fazla bilgiyi <a "
+"target='_blank' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</"
+"a>'da bulabilirsiniz."
+
+#: usr/local/www/system_advanced_admin.php:491
+msgid "BEAST Attack Protection"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:494
+msgid "Mitigate the BEAST SSL Attack"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:496
+msgid ""
+"When this is checked, the webConfigurator can mitigate BEAST SSL attacks. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:499
+#, php-format
+msgid ""
+"This option has been automatically disabled because a conflicting "
+"cryptographic accelerator card has been detected (%s)."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:501
+msgid ""
+"This option is off by default because Hifn accelerators do NOT work with "
+"this option, and the GUI will not function. It is possible that other "
+"accelerators have a similar problem that is not yet known/documented. More "
+"information on BEAST is available from <a target='_blank' href='https://en."
+"wikipedia.org/wiki/Transport_Layer_Security#BEAST_attack'>Wikipedia</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:507
+msgid "Browser tab text"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:510
+msgid "Display page name first in browser tab"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:512
+msgid ""
+"When this is unchecked, the browser tab shows the host name followed by the "
+"current page. "
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:514
+msgid "Check this box to display the current page followed by the host name."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:521
+msgid "Secure Shell"
+msgstr "SSH"
+
+#: usr/local/www/system_advanced_admin.php:524
+msgid "Secure Shell Server"
+msgstr "SSH Sunucu"
+
+#: usr/local/www/system_advanced_admin.php:527
+msgid "Enable Secure Shell"
+msgstr "SSH'ı Etkinleştir"
+
+#: usr/local/www/system_advanced_admin.php:531
+msgid "Authentication Method"
+msgstr "Kimlik Doğrulama Yöntemi"
+
+# 93%
+#: usr/local/www/system_advanced_admin.php:534
+msgid "Disable password login for Secure Shell (RSA/DSA key only)"
+msgstr "SSH için şifre girişini kapat (RSA/DSA anahtarıyla bağlan)"
+
+#: usr/local/www/system_advanced_admin.php:536
+msgid "When enabled, authorized keys need to be configured for each"
+msgstr "EtkinleÅŸtirildiÄŸinde, SSH eriÅŸimi verilen her "
+
+#: usr/local/www/system_advanced_admin.php:537
+msgid "user"
+msgstr "kullanıcı"
+
+#: usr/local/www/system_advanced_admin.php:538
+msgid "that has been granted secure shell access."
+msgstr "için kimliği doğrulanmış anahtarlar gerekir."
+
+#: usr/local/www/system_advanced_admin.php:542
+msgid "SSH port"
+msgstr "SSH portu"
+
+#: usr/local/www/system_advanced_admin.php:546
+msgid "Note: Leave this blank for the default of 22."
+msgstr "Not: Varsayılan 22 değeri için bu alanı boş bırakabilirsiniz."
+
+#: usr/local/www/system_advanced_admin.php:553
+msgid "Serial Communications"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:557
+msgid "Serial Terminal"
+msgstr "Seri Terminal"
+
+#: usr/local/www/system_advanced_admin.php:560
+msgid ""
+"Enables the first serial port with 115200/8/N/1 by default, or another speed "
+"selectable below."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:561
+msgid ""
+"Note: This will redirect the console output and messages to the serial "
+"port. You can still access the console menu from the internal video card/"
+"keyboard. A <b>null modem</b> serial cable or adapter is required to use the "
+"serial console."
+msgstr ""
+"Not: Bu işlem konsol çıktısını seri porta yöneltir. Konsol menüsüne ekran "
+"kartı/klavye ikilisinden erişim kapatılmaz. Seri konsolu kullanabilmek için "
+"<b>null modem</b> seri kablosu veya adaptörü gereklidir."
+
+#: usr/local/www/system_advanced_admin.php:566
+msgid "Serial Speed"
+msgstr "Seri Hızı"
+
+#: usr/local/www/system_advanced_admin.php:576
+msgid "Allows selection of different speeds for the serial console port."
+msgstr "Seri konsol portu için değişik hız seçimine izin verir."
+
+#: usr/local/www/system_advanced_admin.php:581
+msgid "Primary Console"
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:587
+msgid ""
+"Select the preferred console if multiple consoles are present. The preferred "
+"console will show pfSense boot script output. All consoles display OS boot "
+"messages, console messages, and the console menu."
+msgstr ""
+
+#: usr/local/www/system_advanced_admin.php:595
+msgid "Console Options"
+msgstr "Konsol Seçenekleri"
+
+#: usr/local/www/system_advanced_admin.php:598
+msgid "Console menu"
+msgstr "Konsol menüsü"
+
+#: usr/local/www/system_advanced_admin.php:601
+msgid "Password protect the console menu"
+msgstr "Konsol menüsünü parola ile koru"
+
+#: usr/local/www/system_advanced_admin.php:603
+msgid "Changes to this option will take effect after a reboot."
+msgstr ""
+"Bu seçenekte yapılan değişiklikler sistem tekrar başlatıldığında "
+"etkinleÅŸtirilir."
+
+#: usr/local/www/system_advanced_admin.php:640
+msgid "secure shell configuration has changed. Stopping sshd."
+msgstr "SSH yapılandırması değiştirildi. sshd servisi durduruluyor."
+
+#: usr/local/www/system_advanced_admin.php:643
+msgid "secure shell configuration has changed. Restarting sshd."
+msgstr "SSH yapılandırması değiştirildi. sshd servisi yeniden başlatılıyor."
+
+#: usr/local/www/system_advanced_firewall.php:82
+msgid "The Firewall Adaptive values must be set together."
+msgstr "Güvenlik Duvarı Uyarlanabilir değerleri beraber yapılandırılmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:84
+msgid "The Firewall Adaptive Start value must be an integer."
+msgstr "Güvenlik Duvarı Uyarlanabilir Başlangıç değeri tam sayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:87
+msgid "The Firewall Adaptive End value must be an integer."
+msgstr "Güvenlik Duvarı Uyarlanabilir Bitiş değeri tam sayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:90
+msgid "The Firewall Maximum States value must be an integer."
+msgstr "Güvenlik duvarı Maksimum Durum değeri tamsayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:93
+msgid "The Aliases Hostname Resolve Interval value must be an integer."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:96
+msgid "The Firewall Maximum Table Entries value must be an integer."
+msgstr "Güvenlik duvarı Maksimum Tablo Girdisi tamsayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:99
+msgid "The TCP idle timeout must be an integer."
+msgstr "TCP boşta kalma zaman aşımı değeri tamsayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:102
+msgid "The Reflection timeout must be an integer."
+msgstr "Yansıtma zaman aşımı değeri tamsayı olmalıdır."
+
+#: usr/local/www/system_advanced_firewall.php:233
+msgid "Advanced: Firewall and NAT"
+msgstr "Gelişmiş: Güvenlik duvarı ve NAT"
+
+#: usr/local/www/system_advanced_firewall.php:245
+msgid "as the name says, it's the normal optimization algorithm"
+msgstr "isminden de anlaşılacağı üzere, normal eniyileştirme algoritmasıdır"
+
+#: usr/local/www/system_advanced_firewall.php:246
+msgid ""
+"used for high latency links, such as satellite links. Expires idle "
+"connections later than default"
+msgstr ""
+"uydu bağlantıları gibi yüksek gecikmeli bağlantılar için kullanılır. Boş "
+"bağlantıları normalden daha geç kapatır"
+
+#: usr/local/www/system_advanced_firewall.php:247
+msgid ""
+"expires idle connections quicker. More efficient use of CPU and memory but "
+"can drop legitimate idle connections"
+msgstr ""
+"boştaki bağlantıları daha hızlı sonlandır. CPU ve belleğin daha verimli "
+"kullanılması için ancak meşru boştaki bağlantıları sonlandırabilirsiniz"
+
+#: usr/local/www/system_advanced_firewall.php:248
+msgid ""
+"tries to avoid dropping any legitimate idle connections at the expense of "
+"increased memory usage and CPU utilization."
+msgstr ""
+"meşru boştaki bağlantıyı sonlandırmak pahasına artan CPU ve bellek "
+"kullanımını önlemeye çalışır."
+
+#: usr/local/www/system_advanced_firewall.php:293
+msgid "Firewall Advanced"
+msgstr "Güvenlik Duvarı Gelişmiş"
+
+#: usr/local/www/system_advanced_firewall.php:296
+msgid "IP Do-Not-Fragment compatibility"
+msgstr "IP Bölme (DF) uyumluluğu"
+
+#: usr/local/www/system_advanced_firewall.php:299
+msgid "Clear invalid DF bits instead of dropping the packets"
+msgstr "Paketleri atmak yerine DG bitlerini temizlemeye çalış"
+
+#: usr/local/www/system_advanced_firewall.php:300
+msgid ""
+"This allows for communications with hosts that generate fragmented packets "
+"with the don't fragment (DF) bit set. Linux NFS is known to do this. This "
+"will cause the filter to not drop such packets but instead clear the don't "
+"fragment bit."
+msgstr ""
+"DF biti 1 durumunda olan parçalı paketler üreten sunucularla iletişime "
+"olanak verir. Örneğin Linux NFS bu tür sunuculardan biridir. Bu seçenekle o "
+"paketler atılmaz, sadece DF bitleri temizlenir."
+
+#: usr/local/www/system_advanced_firewall.php:307
+msgid "IP Random id generation"
+msgstr "IP rasgele kimlik üretimi"
+
+#: usr/local/www/system_advanced_firewall.php:310
+msgid ""
+"Insert a stronger id into IP header of packets passing through the filter."
+msgstr ""
+"Filtreden geçen paketlerin IP başlığına daha güçlü bir kimlik yerleştir."
+
+#: usr/local/www/system_advanced_firewall.php:311
+msgid ""
+"Replaces the IP identification field of packets with random values to "
+"compensate for operating systems that use predictable values. This option "
+"only applies to packets that are not fragmented after the optional packet "
+"reassembly."
+msgstr ""
+"Paketlerin IP kimlik tanımlama kısmında öngörülebilir değerler kullanan "
+"işletim sistemlerinden gelen paketleri güçlendirmek için IP kimlik tanımlama "
+"alanının değerini değiştirir. Bu seçenek sadece isteğe bağlı paket açma ve "
+"yeniden birleştirme işleminden sonra parçalanmamış halde olan paketleri "
+"etkiler."
+
+#: usr/local/www/system_advanced_firewall.php:318
+msgid "Firewall Optimization Options"
+msgstr "Güvenlik Duvarı Eniyileştirme Seçenekleri"
+
+#: usr/local/www/system_advanced_firewall.php:321
+msgid "normal"
+msgstr "normal"
+
+#: usr/local/www/system_advanced_firewall.php:322
+msgid "high-latency"
+msgstr "yüksek gecikmeli"
+
+#: usr/local/www/system_advanced_firewall.php:323
+msgid "aggressive"
+msgstr "saldırgan"
+
+#: usr/local/www/system_advanced_firewall.php:324
+msgid "conservative"
+msgstr "muhafazakar"
+
+#: usr/local/www/system_advanced_firewall.php:334
+msgid "Select the type of state table optimization to use"
+msgstr "Kullanılacak durum tablosu eniyileştirme yöntemini seçiniz"
+
+#: usr/local/www/system_advanced_firewall.php:338
+msgid "Disable Firewall"
+msgstr "Güvenlik Duvarını Devre Dışı Bırak"
+
+#: usr/local/www/system_advanced_firewall.php:341
+msgid "Disable all packet filtering."
+msgstr "Tüm paket filtrelemeyi devre dışı bırak."
+
+#: usr/local/www/system_advanced_firewall.php:343
+#, php-format
+msgid "Note: This converts %s into a routing only platform!"
+msgstr ""
+"Not: Bu seçenek %s sistemini sadece yönlendime yapan bir sisteme dönüştürür!"
+
+#: usr/local/www/system_advanced_firewall.php:344
+msgid "Note: This will also turn off NAT!"
+msgstr "Not: NAT'ı da devre dışı bırakır!"
+
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "If you only want to disable NAT, and not firewall rules, visit the"
+msgstr ""
+"Güvenlik Duvarı kurallarını kapatmadan sadece NAT'ı devredışı bırakmak "
+"istiyorsanız"
+
+#: usr/local/www/system_advanced_firewall.php:345
+msgid "Outbound NAT"
+msgstr "Dışarı NAT"
+
+#: usr/local/www/system_advanced_firewall.php:350
+msgid "Disable Firewall Scrub"
+msgstr "Güvenlik Duvarı Elden Geçirmeyi Devre Dışı Bırak"
+
+#: usr/local/www/system_advanced_firewall.php:353
+msgid ""
+"Disables the PF scrubbing option which can sometimes interfere with NFS and "
+"PPTP traffic."
+msgstr ""
+"Zaman zaman NFS ve PPTP trafiğini bozabilen bir özellik olan PF elden "
+"geçirme seçeneğini kapatır."
+
+#: usr/local/www/system_advanced_firewall.php:358
+msgid "Firewall Adaptive Timeouts"
+msgstr "Güvenlik Duvarı Uyarlanabilir Zaman aşımları"
+
+#: usr/local/www/system_advanced_firewall.php:360
+msgid ""
+"Timeouts for states can be scaled adaptively as the number of state table "
+"entries grows."
+msgstr ""
+"Durum tablosu girdileri büyüdükçe durumlar için zaman aşımı bağdaşık olarak "
+"ölçeklendirilebilir."
+
+#: usr/local/www/system_advanced_firewall.php:363
+msgid ""
+"When the number of state entries exceeds this value, adaptive scaling "
+"begins. All timeout values are scaled linearly with factor (adaptive.end - "
+"number of states) / (adaptive.end - adaptive.start)."
+msgstr ""
+"Durum tablosu girdilerinin sayısı bu değeri aştığında uyarlanabilir "
+"ölçekleme başlar. Tüm zaman aşımı değerleri faktörü ile doğrusal ölçeklenir "
+"(uyarlanabilir.bitiş -durum tablosu girdiler sayısı) / (uyarlanabilir bitiş "
+"- uyarlanabilir başlangıç)."
+
+#: usr/local/www/system_advanced_firewall.php:367
+msgid ""
+"When reaching this number of state entries, all timeout values become zero, "
+"effectively purging all state entries immediately. This value is used to "
+"define the scale factor, it should not actually be reached (set a lower "
+"state limit, see below)."
+msgstr ""
+"Durum girişleri bu sayıya ulaştığında tüm zaman aşımı değerleri anında "
+"sıfırlanır. Bu değer ölçek faktörü tanımlamak için kullanılır, aslında "
+"ulaşılabilir değildir. (daha düşük durum sınırı ayarlamak için aşağıya "
+"bakınız)."
+
+#: usr/local/www/system_advanced_firewall.php:369
+msgid "Note: Leave this blank for the default(0)."
+msgstr "Not: Varsayılan değer (0) için boş bırakın."
+
+#: usr/local/www/system_advanced_firewall.php:373
+msgid "Firewall Maximum States"
+msgstr "Güvenlik Duvarı Maksimum Durum"
+
+#: usr/local/www/system_advanced_firewall.php:377
+msgid "Maximum number of connections to hold in the firewall state table."
+msgstr "Güvenlik Duvarı durum tablosunda tutulacak maksimum bağlantı sayısı."
+
+#: usr/local/www/system_advanced_firewall.php:379
+msgid ""
+"Note: Leave this blank for the default. On your system the default size is:"
+msgstr ""
+"Not: Varsayılan değer için boş bırakınız. Sisteminizdeki varsayılan değer:"
+
+#: usr/local/www/system_advanced_firewall.php:383
+msgid "Firewall Maximum Table Entries"
+msgstr "Güvenlik Duvarı Maksimum Tablo Girdisi Sayısı"
+
+#: usr/local/www/system_advanced_firewall.php:387
+msgid ""
+"Maximum number of table entries for systems such as aliases, sshlockout, "
+"snort, etc, combined."
+msgstr ""
+"Gruplar, sshlockout, snort vb sistemler için ayrılan en fazla tablo girdisi "
+"sayısı."
+
+#: usr/local/www/system_advanced_firewall.php:390
+msgid "Note: Leave this blank for the default."
+msgstr "Not: Varsayılan değer için boş bırakınız."
+
+#: usr/local/www/system_advanced_firewall.php:392
+msgid "On your system the default size is:"
+msgstr "Sisteminizdeki varsayılan değer:"
+
+#: usr/local/www/system_advanced_firewall.php:398
+msgid "Static route filtering"
+msgstr "Statik rota yönlendirme filtreleme"
+
+#: usr/local/www/system_advanced_firewall.php:401
+msgid "Bypass firewall rules for traffic on the same interface"
+msgstr "Aynı arabirim üzerindeki trafik için güvenlik duvarı kurallarını atla"
+
+#: usr/local/www/system_advanced_firewall.php:403
+msgid ""
+"This option only applies if you have defined one or more static routes. If "
+"it is enabled, traffic that enters and leaves through the same interface "
+"will not be checked by the firewall. This may be desirable in some "
+"situations where multiple subnets are connected to the same interface."
+msgstr ""
+"Sadece statik rotalar tanımladıysanız anlamlıdır. Etkinleştirildiğinde, aynı "
+"arabirim üzerinden gelip giden trafik güvenlik duvarı tarafından kontrol "
+"edilmez. Bu seçeneği birden fazla altağın aynı arabirime bağlı olduğu "
+"durumlarda kullanmak isteyebilirsiniz."
+
+#: usr/local/www/system_advanced_firewall.php:413
+msgid "Disable all auto-added VPN rules."
+msgstr "Otomatik eklenen tüm VPN kurallarını kapat."
+
+#: usr/local/www/system_advanced_firewall.php:415
+msgid "Note: This disables automatically added rules for IPsec, PPTP."
+msgstr ""
+"Not: Bu seçenek IPsec ve PPTP için otomatik olarak eklenen kuralları kapatır."
+
+#: usr/local/www/system_advanced_firewall.php:423
+msgid "Disable reply-to on WAN rules"
+msgstr "WAN kurallarındaki yanıt adresi özelliğini kapat"
+
+#: usr/local/www/system_advanced_firewall.php:425
+msgid ""
+"With Multi-WAN you generally want to ensure traffic leaves the same "
+"interface it arrives on, hence reply-to is added automatically by default. "
+"When using bridging, you must disable this behavior if the WAN gateway IP is "
+"different from the gateway IP of the hosts behind the bridged interface."
+msgstr ""
+"Çoklu WAN yapılandırmalarda genellikle trafiğin geldiği arabirimden gitmesi "
+"istenir ve bu amaçla yanıt adresi otomatik olarak eklenir. Köprüleme "
+"kullanıldığında WAN ağ geçidi IPsi köprülenen arabirimin arkasındaki "
+"istemcilerin ağ geçidi IPsinden farklı ise bu özelliği kapatmanız gerekir."
+
+#: usr/local/www/system_advanced_firewall.php:434
+msgid "Disable Negate rule on policy routing rules"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:436
+msgid ""
+"With Multi-WAN you generally want to ensure traffic reaches directly "
+"connected networks and VPN networks when using policy routing. You can "
+"disable this for special purposes but it requires manually creating rules "
+"for these networks"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:441
+msgid "Aliases Hostnames Resolve Interval"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:445
+msgid ""
+"Interval, in seconds, that will be used to resolve hostnames configured on "
+"aliases."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:447
+msgid "Note: Leave this blank for the default (300s)."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:451
+msgid "Check certificate of aliases URLs"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:454
+msgid "Verify HTTPS certificates when downloading alias URLs"
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:456
+msgid ""
+"Make sure the certificate is valid for all HTTPS addresses on aliases. If "
+"it's not valid or is revoked, do not download it."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:464
+msgid "Bogon Networks"
+msgstr "Sahte AÄŸlar"
+
+# Güncelleme sıklığı
+#: usr/local/www/system_advanced_firewall.php:467
+msgid "Update Frequency"
+msgstr "Güncelleştirme sıklığı"
+
+#: usr/local/www/system_advanced_firewall.php:470
+msgid "Monthly"
+msgstr "Aylık"
+
+#: usr/local/www/system_advanced_firewall.php:471
+msgid "Weekly"
+msgstr "Haftalık"
+
+#: usr/local/www/system_advanced_firewall.php:472
+msgid "Daily"
+msgstr "Günlük"
+
+#: usr/local/www/system_advanced_firewall.php:475
+msgid ""
+"The frequency of updating the lists of IP addresses that are reserved (but "
+"not RFC 1918) or not yet assigned by IANA."
+msgstr ""
+"IP adreslerinin listesi güncelleme sıklığı ayrılmış (RFC 1918 hariç) yada "
+"IANA tarafından atanamaz."
+
+#: usr/local/www/system_advanced_firewall.php:483
+msgid "Network Address Translation"
+msgstr "NAT 'Ağ Adres Çevrimi'"
+
+#: usr/local/www/system_advanced_firewall.php:486
+msgid "NAT Reflection mode for port forwards"
+msgstr "Port yönlendirmeleri için NAT Yansıtma"
+
+#: usr/local/www/system_advanced_firewall.php:494
+msgid ""
+"When enabled, this automatically creates additional NAT redirect rules for "
+"access to port forwards on your external IP addresses from within your "
+"internal networks."
+msgstr ""
+"Etkinleştirildiğinde İç ağlarınızdan dış IPleriniz ile yapılan port "
+"yönlendirmelerine erişim için otomatik olarak ek NAT yönlendirme kuralları "
+"oluşturulmasını sağlar."
+
+#: usr/local/www/system_advanced_firewall.php:496
+msgid ""
+"The NAT + proxy mode uses a helper program to send packets to the target of "
+"the port forward. It is useful in setups where the interface and/or gateway "
+"IP used for communication with the target cannot be accurately determined at "
+"the time the rules are loaded. Reflection rules are not created for ranges "
+"larger than 500 ports and will not be used for more than 1000 ports total "
+"between all port forwards. Only TCP and UDP protocols are supported."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:498
+msgid ""
+"The pure NAT mode uses a set of NAT rules to direct packets to the target of "
+"the port forward. It has better scalability, but it must be possible to "
+"accurately determine the interface and gateway IP used for communication "
+"with the target at the time the rules are loaded. There are no inherent "
+"limits to the number of ports other than the limits of the protocols. All "
+"protocols available for port forwards are supported."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:500
+#: usr/local/www/system_advanced_firewall.php:520
+msgid ""
+"Individual rules may be configured to override this system setting on a per-"
+"rule basis."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:504
+msgid "Reflection Timeout"
+msgstr "Yansıtma Zaman Aşımı"
+
+#: usr/local/www/system_advanced_firewall.php:507
+msgid "Enter value for Reflection timeout in seconds."
+msgstr "Saniye cinsinden bir Yansıtma zaman aşımı değeri girin."
+
+#: usr/local/www/system_advanced_firewall.php:509
+msgid "Note: Only applies to Reflection on port forwards in NAT + proxy mode."
+msgstr ""
+
+# 91%
+#: usr/local/www/system_advanced_firewall.php:513
+msgid "Enable NAT Reflection for 1:1 NAT"
+msgstr "1:1 NAT için NAT Yansıtmayı Aktif et"
+
+#: usr/local/www/system_advanced_firewall.php:516
+msgid ""
+"Enables the automatic creation of additional NAT redirect rules for access "
+"to 1:1 mappings of your external IP addresses from within your internal "
+"networks."
+msgstr ""
+"Etkinleştirildiğinde İç ağlarınızdan dış IPleriniz ile yapılan 1:1 eşleşme "
+"yönlendirmelerine erişim için otomatik olarak ek NAT yönlendirme kuralları "
+"oluşturulmasını sağlar."
+
+#: usr/local/www/system_advanced_firewall.php:518
+msgid ""
+"Note: Reflection on 1:1 mappings is only for the inbound component of the "
+"1:1 mappings. This functions the same as the pure NAT mode for port "
+"forwards. For more details, refer to the pure NAT mode description above."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:524
+msgid "Enable automatic outbound NAT for Reflection"
+msgstr "Otomatik dışarı NAT'ı yansıma için etkinleştirin"
+
+#: usr/local/www/system_advanced_firewall.php:527
+msgid ""
+"Automatically create outbound NAT rules which assist inbound NAT rules that "
+"direct traffic back out to the same subnet it originated from."
+msgstr ""
+"Trafiği geldiği altağa yönlendirilen içeriye doğru NAT kurallarına yardımcı "
+"olmak amacıyla ek dışarıya doğru NAT kurallarını otomatik oluştur."
+
+#: usr/local/www/system_advanced_firewall.php:529
+msgid ""
+"Required for full functionality of the pure NAT mode of NAT Reflection for "
+"port forwards or NAT Reflection for 1:1 NAT."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:531
+msgid ""
+"Note: This only works for assigned interfaces. Other interfaces require "
+"manually creating the outbound NAT rules that direct the reply packets back "
+"through the router."
+msgstr ""
+
+#: usr/local/www/system_advanced_firewall.php:535
+msgid "TFTP Proxy"
+msgstr "TFTP Vekil"
+
+#: usr/local/www/system_advanced_firewall.php:550
+msgid "Choose the interfaces where you want TFTP proxy helper to be enabled."
+msgstr "TFTP vekil yardımcısının etkinleştirileceği arabirimleri seçiniz."
+
+#: usr/local/www/system_advanced_misc.php:85
+msgid "AMD Geode LX Security Block"
+msgstr "AMD Geode LX Güvenlik Engeli"
+
+#: usr/local/www/system_advanced_misc.php:86
+msgid "AES-NI CPU-based Acceleration"
+msgstr "AES-NI CPU-based Hızlandırma"
+
+#: usr/local/www/system_advanced_misc.php:88
+msgid "Intel Core* CPU on-die thermal sensor"
+msgstr "Intel Core* CPU on-die termal algılayıcı"
+
+#: usr/local/www/system_advanced_misc.php:89
+msgid "AMD K8, K10 and K11 CPU on-die thermal sensor"
+msgstr "AMD K8, K10 ve K11 CPU on-die termal algılayıcı"
+
+#: usr/local/www/system_advanced_misc.php:100
+msgid "Please select a valid Cryptographic Accelerator."
+msgstr "Geçerli bir Şifreleme Hızlandırıcı seçiniz."
+
+#: usr/local/www/system_advanced_misc.php:103
+msgid "Please select a valid Thermal Hardware Sensor."
+msgstr "Geçerli bir Termal Donanım Algılayıcı seçiniz."
+
+#: usr/local/www/system_advanced_misc.php:106
+msgid "/tmp Size must be numeric and should not be less than 40MB."
+msgstr "/tmp boyutu sayı olmalıdır ve 40MB dan daha az olamaz."
+
+#: usr/local/www/system_advanced_misc.php:109
+msgid "/var Size must be numeric and should not be less than 60MB."
+msgstr "/var boyutu sayı olmalıdır ve 60MB dan daha az olamaz."
+
+#: usr/local/www/system_advanced_misc.php:245
+msgid "Advanced: Miscellaneous"
+msgstr "GeliÅŸmiÅŸ: DiÄŸer"
+
+#: usr/local/www/system_advanced_misc.php:310
+msgid "Proxy support"
+msgstr "Vekil sunucu desteÄŸi"
+
+#: usr/local/www/system_advanced_misc.php:313
+msgid "Proxy URL"
+msgstr "Vekil URL"
+
+#: usr/local/www/system_advanced_misc.php:317
+#, php-format
+msgid ""
+"Hostname or IP address of proxy server this system will use for its outbound "
+"Internet access."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:321
+msgid "Proxy Port"
+msgstr "Vekil Portu"
+
+#: usr/local/www/system_advanced_misc.php:325
+#, php-format
+msgid "Port where proxy server is listening."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:329
+msgid "Proxy Username"
+msgstr "Vekil Kullanıcı adı"
+
+#: usr/local/www/system_advanced_misc.php:333
+#, php-format
+msgid ""
+"Username for authentication to proxy server. Optional, leave blank to not "
+"use authentication."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:337
+msgid "Proxy Password"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:341
+#, php-format
+msgid "Password for authentication to proxy server."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:345
+#: usr/local/www/system_advanced_misc.php:348
+#: usr/local/www/system_advanced_misc.php:369
+msgid "Load Balancing"
+msgstr "Yük Dengeleme"
+
+#: usr/local/www/system_advanced_misc.php:351
+msgid "Use sticky connections"
+msgstr "Sabit bağlantılar kullan"
+
+#: usr/local/www/system_advanced_misc.php:352
+msgid ""
+"Successive connections will be redirected to the servers in a round-robin "
+"manner with connections from the same source being sent to the same web "
+"server. This 'sticky connection' will exist as long as there are states that "
+"refer to this connection. Once the states expire, so will the sticky "
+"connection. Further connections from that host will be redirected to the "
+"next web server in the round robin. Changing this option will restart the "
+"Load Balancing service."
+msgstr ""
+"Ardışık bağlantılar sunuculara dairesel bir mantıkla yönlendirilir, bir "
+"kaynaktan gelen bağlantılar hep aynı sunucuya gönderilir. Bu 'kalıcı "
+"bağlantı', bu bağlantıya atıfta bulunan durumlar olduğu sürece canlı kalır. "
+"Durumların süresi dolduğunda, kalıcı bağlantının da süresi dolmuş olur. O "
+"istemciden gelen sonraki bağlantı istekleri dairesel dağıtılır. Bu ayarların "
+"değiştirilmesi Yük Dengeleyici servisini yeniden başlatacaktır."
+
+#: usr/local/www/system_advanced_misc.php:363
+msgid ""
+"Set the source tracking timeout for sticky connections. By default this is "
+"0, so source tracking is removed as soon as the state expires. Setting this "
+"timeout higher will cause the source/destination relationship to persist for "
+"longer periods of time."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:372
+msgid "Enable default gateway switching"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:373
+msgid ""
+"If the default gateway goes down, switch the default gateway to another "
+"available one. This is not enabled by default, as it's unnecessary in most "
+"all scenarios, which instead use gateway groups."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:381
+msgid "Power savings"
+msgstr "Güç tasarrufu"
+
+#: usr/local/www/system_advanced_misc.php:384
+msgid "PowerD"
+msgstr "PowerD"
+
+#: usr/local/www/system_advanced_misc.php:387
+msgid "Use PowerD"
+msgstr "PowerD Kullan"
+
+#: usr/local/www/system_advanced_misc.php:389
+msgid "On AC Power Mode"
+msgstr "Prizde Güç Modu"
+
+#: usr/local/www/system_advanced_misc.php:391
+#: usr/local/www/system_advanced_misc.php:399
+#: usr/local/www/system_advanced_misc.php:407
+msgid "Hiadaptive"
+msgstr "Hidengeli"
+
+#: usr/local/www/system_advanced_misc.php:392
+#: usr/local/www/system_advanced_misc.php:400
+#: usr/local/www/system_advanced_misc.php:408
+msgid "Adaptive"
+msgstr "Dengeli"
+
+#: usr/local/www/system_advanced_misc.php:393
+#: usr/local/www/system_advanced_misc.php:401
+#: usr/local/www/system_advanced_misc.php:409
+msgid "Minimum"
+msgstr "Minimum"
+
+#: usr/local/www/system_advanced_misc.php:394
+#: usr/local/www/system_advanced_misc.php:402
+#: usr/local/www/system_advanced_misc.php:410
+msgid "Maximum"
+msgstr "Maksimum"
+
+#: usr/local/www/system_advanced_misc.php:397
+msgid "On Battery Power Mode"
+msgstr "Bataryada Güç Modu"
+
+#: usr/local/www/system_advanced_misc.php:405
+msgid "On Unknown Power Mode"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:413
+msgid ""
+"The powerd utility monitors the system state and sets various power control "
+"options accordingly. It offers four modes (maximum, minimum, adaptive and "
+"hiadaptive) that can be individually selected while on AC power or "
+"batteries. The modes maximum, minimum, adaptive and hiadaptive may be "
+"abbreviated max, min, adp, hadp. Maximum mode chooses the highest "
+"performance values. Minimum mode selects the lowest performance values to "
+"get the most power savings. Adaptive mode attempts to strike a balance by "
+"degrading performance when the system appears idle and increasing it when "
+"the system is busy. It offers a good balance between a small performance "
+"loss for greatly increased power savings. Hiadaptive mode is alike adaptive "
+"mode, but tuned for systems where performance and interactivity are more "
+"important than power consumption. It raises frequency faster, drops slower "
+"and keeps twice lower CPU load."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:432
+msgid "Cryptographic Hardware Acceleration"
+msgstr "Donanımsal Şifreleme Hızlandırıcı"
+
+#: usr/local/www/system_advanced_misc.php:435
+msgid "Cryptographic Hardware"
+msgstr "Donanımsal Şifreleme"
+
+#: usr/local/www/system_advanced_misc.php:444
+msgid ""
+"A cryptographic accelerator module will use hardware support to speed up "
+"some cryptographic functions on systems which have the chip. Do not enable "
+"this option if you have a Hifn cryptographic acceleration card, as this will "
+"take precedence and the Hifn card will not be used. Acceleration should be "
+"automatic for IPsec when using a cipher supported by your chip, such as "
+"AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled "
+"for hardware acceleration."
+msgstr ""
+"Şifreleme hızlandırcı birimi bağzı hız artışı sağlayan donanımsal şifreleme "
+"işlevi sağlayacak çip e sahip sistemlerde kullanılır. Eğer Hifn şifreleme "
+"hızlandırıcı kart a sahipseniz bu seçeneği etkinleştirmeyin, bu öncelik alır "
+"ve Hifn kart kullanılmaz. Hızlandırma IPsec'in kullanacaği çip otomatik "
+"olmalı, örneğin AES-128 desteğine sahip bir çipe sahip olmalısınız. OpenVPN "
+"AES-128-CBC ye ayarlanmalı ve donanımsal hızlandırma da cryptodev seçeneği "
+"etkinleÅŸtirilmelidir."
+
+#: usr/local/www/system_advanced_misc.php:452
+msgid ""
+"If you do not have a crypto chip in your system, this option will have no "
+"effect. To unload the selected module, set this option to 'none' and then "
+"reboot."
+msgstr ""
+"Eğer sisteminizde şifreleme çipi yoksa, bu seçenek etkisiz olacak. "
+"Seçtiğiniz birimi kaldırın ve seçeneği 'yok (none)' ye ayarlayıp yeniden "
+"başlatın."
+
+#: usr/local/www/system_advanced_misc.php:460
+#: usr/local/www/system_advanced_misc.php:463
+msgid "Thermal Sensors"
+msgstr "Termal Algılayıcılar"
+
+#: usr/local/www/system_advanced_misc.php:466
+msgid "None/ACPI"
+msgstr "Yok (None)/ACPI"
+
+#: usr/local/www/system_advanced_misc.php:472
+msgid ""
+"If you have a supported CPU, selecting a themal sensor will load the "
+"appropriate driver to read its temperature. Setting this to 'None' will "
+"attempt to read the temperature from an ACPI-compliant motherboard sensor "
+"instead, if one is present."
+msgstr ""
+"Eğer desteklenen bir CPU ya sahipseniz, seçilen termal algılayıcı sıcaklığı "
+"okumak için uygun sürücüyü yükleyecektir. Eğer mevcutsa ayar 'yok (none) ise "
+"sıcaklığı sensör yerine ACPI-uyumlu anakart tan okumaya çalışacaktır."
+
+#: usr/local/www/system_advanced_misc.php:476
+msgid ""
+"If you do not have a supported thermal sensor chip in your system, this "
+"option will have no effect. To unload the selected module, set this option "
+"to 'none' and then reboot."
+msgstr ""
+"Eğer sisteminizde desteklenen termal algılayıcı çipi yoksa, bu seçenek "
+"etkisiz olacak. Seçtiğiniz birimi kaldırın ve seçeneği 'yok (none)' ye "
+"ayarlayıp yeniden başlatın."
+
+#: usr/local/www/system_advanced_misc.php:484
+msgid "IP Security"
+msgstr "IP Güvenlik"
+
+#: usr/local/www/system_advanced_misc.php:489
+msgid ""
+"These settings have moved to <a href=\"vpn_ipsec_settings.php\">VPN &gt; "
+"IPsec on the Advanced Settings tab</a>."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:499
+msgid "Schedule States"
+msgstr "Zamanlama Durumları"
+
+#: usr/local/www/system_advanced_misc.php:503
+msgid ""
+"By default, when a schedule expires, connections permitted by that schedule "
+"are killed. This option overrides that behavior by not clearing states for "
+"existing connections."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:511
+msgid "Gateway Monitoring"
+msgstr "Ağ Geçidi İzleme"
+
+#: usr/local/www/system_advanced_misc.php:514
+msgid "State Killing on Gateway Failure"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:518
+msgid ""
+"The monitoring process will flush states for a gateway that goes down if "
+"this box is not checked. Check this box to disable this behavior."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:522
+msgid "Skip rules when gateway is down"
+msgstr "Ağ geçidi kapalıysa kuralları es geç"
+
+#: usr/local/www/system_advanced_misc.php:526
+msgid ""
+"By default, when a rule has a gateway specified and this gateway is down, "
+"the rule is created omitting the gateway. This option overrides that "
+"behavior by omitting the entire rule instead."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:532
+msgid "Enable gateway monitoring debug logging"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:536
+msgid ""
+"Enable this setting to log debug information from the gateway monitoring "
+"process to the system logs."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:540
+msgid "RAM Disk Settings (Reboot to Apply Changes)"
+msgstr "RAM Disk Ayarları (Değişiklikleri Onaylayarak Yeniden Başlatın)"
+
+#: usr/local/www/system_advanced_misc.php:544
+msgid "Use RAM Disks"
+msgstr "RAM Disklerini kullan"
+
+#: usr/local/www/system_advanced_misc.php:547
+msgid "Use memory file system for /tmp and /var"
+msgstr "Sistem bellek dosyası olarak /tmp ve /var kullan"
+
+#: usr/local/www/system_advanced_misc.php:548
+msgid ""
+"Set this if you wish to use /tmp and /var as RAM disks (memory file system "
+"disks) on a full install rather than use the hard disk. Setting this will "
+"cause the data in /tmp and /var to be lost at reboot, including log data. "
+"RRD and DHCP Leases will be retained."
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:554
+msgid "/tmp RAM Disk Size"
+msgstr "/tmp RAM Disk Boyutu"
+
+#: usr/local/www/system_advanced_misc.php:558
+msgid ""
+"Set the size, in MB, for the /tmp RAM disk. Leave blank for 40MB. Do not set "
+"lower than 40."
+msgstr ""
+"Boyutu MB olarak /tmp RAM disk için ayarlayın. 40MB için boş bırakın. 40 dan "
+"düşük ayarlamayın."
+
+#: usr/local/www/system_advanced_misc.php:563
+msgid "/var RAM Disk Size"
+msgstr "/var RAM Disk Boyutu"
+
+#: usr/local/www/system_advanced_misc.php:567
+msgid ""
+"Set the size, in MB, for the /var RAM disk. Leave blank for 60MB. Do not set "
+"lower than 60."
+msgstr ""
+"Boyutu MB olarak /var RAM disk için ayarlayın. 60MB için boş bırakın. 60 dan "
+"düşük ayarlamayın."
+
+# 80%
+#: usr/local/www/system_advanced_misc.php:572
+msgid "Periodic RRD Backup"
+msgstr "Periyodik RRD Yedekleme"
+
+#: usr/local/www/system_advanced_misc.php:574
+#: usr/local/www/system_advanced_misc.php:590
+msgid "Frequency:"
+msgstr "Sıklık:"
+
+#: usr/local/www/system_advanced_misc.php:578
+#: usr/local/www/system_advanced_misc.php:594
+msgid "hour"
+msgstr "saat"
+
+#: usr/local/www/system_advanced_misc.php:582
+msgid ""
+"This will periodically backup the RRD data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr ""
+"Bu işlem RRD verisini belirli aralıklarla yedekler, böylece bir sonraki "
+"sistem açılışında yeniden yüklenebilir. Unutulmamalıdır ki yedekleme ne "
+"kadar sık olursa diske yazım o kadar sık gerçekleşir."
+
+#: usr/local/www/system_advanced_misc.php:588
+msgid "Periodic DHCP Leases Backup"
+msgstr "Periyodik DHCP Kiraları Yedekleme"
+
+#: usr/local/www/system_advanced_misc.php:598
+msgid ""
+"This will periodically backup the DHCP leases data so it can be restored "
+"automatically on the next boot. Keep in mind that the more frequent the "
+"backup, the more writes will happen to your media."
+msgstr ""
+"Bu işlem DHCP kiraları verisini belirli aralıklarla yedekler, böylece bir "
+"sonraki sistem açılışında yeniden yüklenebilir. Unutulmamalıdır ki yedekleme "
+"ne kadar sık olursa diske yazım o kadar sık gerçekleşir."
+
+#: usr/local/www/system_advanced_misc.php:608
+msgid "Hardware Settings"
+msgstr "Donanım Ayarları"
+
+#: usr/local/www/system_advanced_misc.php:611
+msgid "Hard disk standby time "
+msgstr "Harddisk beklemede kalma süresi "
+
+#: usr/local/www/system_advanced_misc.php:618
+msgid "Always on"
+msgstr "Her zaman açık"
+
+#: usr/local/www/system_advanced_misc.php:627
+msgid ""
+"Puts the hard disk into standby mode when the selected amount of time after "
+"the last access has elapsed."
+msgstr ""
+"Son disk erişiminden itibaren belirtilen süre geçtiğinde diskin beklemeye "
+"alınmasını sağlar."
+
+#: usr/local/www/system_advanced_misc.php:628
+msgid "Do not set this for CF cards."
+msgstr "CF kartlarda bu ayarı kullanmayınız."
+
+#: usr/local/www/system_advanced_misc.php:637
+msgid "Package settings"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:640
+msgid "Package signature"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:643
+msgid "Do NOT check package signature"
+msgstr ""
+
+#: usr/local/www/system_advanced_misc.php:644
+msgid ""
+"Enable this option to allow pfSense to install any package without checking "
+"its signature."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:68
+msgid "You must specify an IP address to NAT IPv6 packets."
+msgstr "NAT IPv6 paketleri için bir IP adresi belirtmelisiniz."
+
+#: usr/local/www/system_advanced_network.php:154
+msgid "Advanced: Networking"
+msgstr "GeliÅŸmiÅŸ: AÄŸ"
+
+#: usr/local/www/system_advanced_network.php:211
+msgid "IPv6 Options"
+msgstr "IPv6 Seçenekleri"
+
+#: usr/local/www/system_advanced_network.php:214
+#: usr/local/www/system_advanced_network.php:217
+msgid "Allow IPv6"
+msgstr "IPv6ya Ä°zin Ver"
+
+#: usr/local/www/system_advanced_network.php:218
+msgid ""
+"All IPv6 traffic will be blocked by the firewall unless this box is checked."
+msgstr ""
+"Bu kutu işaretli olduğu sürece tüm IPv6 trafiği güvenlik duvarı tarafından "
+"engellenir."
+
+#: usr/local/www/system_advanced_network.php:219
+msgid ""
+"NOTE: This does not disable any IPv6 features on the firewall, it only "
+"blocks traffic."
+msgstr ""
+"NOT: Bu güvenlik duvarında herhangi bir IPv6 özelliğini devre dışı bırakmaz, "
+"sadece trafiÄŸi engeller."
+
+#: usr/local/www/system_advanced_network.php:224
+msgid "IPv6 over IPv4 Tunneling"
+msgstr "IPv4 tünellemeyle IPv6"
+
+#: usr/local/www/system_advanced_network.php:227
+msgid "Enable IPv4 NAT encapsulation of IPv6 packets"
+msgstr "IPv6 paketlerinin IPv4 NAT ile sarmalanması özelliğini aç"
+
+#: usr/local/www/system_advanced_network.php:228
+msgid ""
+"This provides an RFC 2893 compatibility mechanism that can be used to "
+"tunneling IPv6 packets over IPv4 routing infrastructures. If enabled, don't "
+"forget to add a firewall rule to permit IPv6 packets."
+msgstr ""
+"Bu seçenek IPv6 paketlerinin IPv4 altyapısından tünellenmesine olanak veren "
+"RFC 2893 uyumluluk mekanizmasını sağlar. Etkinleştirirseniz IPv6 paketlerine "
+"izin veren bir güvenlik duvarı kuralı eklemeyi unutmayın."
+
+#: usr/local/www/system_advanced_network.php:238
+msgid "Prefer IPv4 over IPv6"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:241
+msgid "Prefer to use IPv4 even if IPv6 is available"
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:242
+msgid ""
+"By default, if a hostname resolves IPv6 and IPv4 addresses IPv6 will be "
+"used, if you check this option, IPv4 will be used instead of IPv6."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:254
+msgid "Device polling"
+msgstr "Aygıt sorgulama"
+
+#: usr/local/www/system_advanced_network.php:257
+msgid "Enable device polling"
+msgstr "Aygıt sorgulamayı etkinleştir"
+
+#: usr/local/www/system_advanced_network.php:258
+#, php-format
+msgid ""
+"Device polling is a technique that lets the system periodically poll network "
+"devices for new data instead of relying on interrupts. This prevents your "
+"webConfigurator, SSH, etc. from being inaccessible due to interrupt floods "
+"when under extreme load. Generally this is not recommended. Not all NICs "
+"support polling; see the %s homepage for a list of supported cards."
+msgstr ""
+"Aygıt sorgulama sistemin kesmelerle çalışmak yerine belirli aralıklarla "
+"ağdaki aygıtları sorguladığı bir tekniktir. Bu teknik webArayüzü ve SSH gibi "
+"servislerin çok yoğun yükler altında erişilemez hale gelmesini engeller, "
+"ancak genellikle tavsiye edilmez. Tüm NICler sorgulamayı desteklemez; "
+"desteklenen kartların listesini için %s adresine bakabilirsiniz."
+
+#: usr/local/www/system_advanced_network.php:262
+msgid "Hardware Checksum Offloading"
+msgstr "Donanım Kontrol Toplamı Yük Azaltımı"
+
+#: usr/local/www/system_advanced_network.php:265
+msgid "Disable hardware checksum offload"
+msgstr "Donanım kontrol toplamı yük azaltımını kapat"
+
+#: usr/local/www/system_advanced_network.php:266
+msgid ""
+"Checking this option will disable hardware checksum offloading. Checksum "
+"offloading is broken in some hardware, particularly some Realtek cards. "
+"Rarely, drivers may have problems with checksum offloading and some specific "
+"NICs."
+msgstr ""
+"Bu seçeneğin işaretlenmesi donanım kontrol toplamı yük azaltımını kapatır. "
+"Kontrol toplamı yük azaltımı bazı donanımlarda, özellikle de bazı Realtek "
+"kartlarda düzgün çalışmaz. Nadiren de olsa sürücüler kontrol toplamı yük "
+"azaltımı ve belirli NIClerde sorun çıkarabilir."
+
+#: usr/local/www/system_advanced_network.php:269
+#: usr/local/www/system_advanced_network.php:280
+#: usr/local/www/system_advanced_network.php:291
+msgid ""
+"This will take effect after you reboot the machine or re-configure each "
+"interface."
+msgstr ""
+
+#: usr/local/www/system_advanced_network.php:273
+msgid "Hardware TCP Segmentation Offloading"
+msgstr "Donanım TCP Kesimleme Yük Azaltımı"
+
+#: usr/local/www/system_advanced_network.php:276
+msgid "Disable hardware TCP segmentation offload"
+msgstr "Donanım TCP kesimleme yük azaltımını kapat"
+
+#: usr/local/www/system_advanced_network.php:277
+msgid ""
+"Checking this option will disable hardware TCP segmentation offloading (TSO, "
+"TSO4, TSO6). This offloading is broken in some hardware drivers, and may "
+"impact performance with some specific NICs."
+msgstr ""
+"Bu seçeneği işaretlemek TCP kesimleme yük azaltımını (TSO, TSO4, TSO6) "
+"kapatır. Bu yük azaltımı bazı donanım sürücülerinde düzgün çalışmaz ve "
+"belirli NIClerde performansı etkileyebilir."
+
+#: usr/local/www/system_advanced_network.php:284
+msgid "Hardware Large Receive Offloading"
+msgstr "Donanım Büyük Teslimat Yük Azaltımı"
+
+#: usr/local/www/system_advanced_network.php:287
+msgid "Disable hardware large receive offload"
+msgstr "Donanım büyük teslimat yük azaltımını kapat"
+
+#: usr/local/www/system_advanced_network.php:288
+msgid ""
+"Checking this option will disable hardware large receive offloading (LRO). "
+"This offloading is broken in some hardware drivers, and may impact "
+"performance with some specific NICs."
+msgstr ""
+"Bu seçeneği işaretlemek donanım büyük teslimat yük azatımını (LRO) kapatır. "
+"Bu yük azaltımı bazı donanım sürücülerinde bozuktur ve belirli NIClerde "
+"performansı etkileyebilir."
+
+#: usr/local/www/system_advanced_network.php:295
+msgid "ARP Handling"
+msgstr "ARP Ä°ÅŸleme"
+
+#: usr/local/www/system_advanced_network.php:298
+msgid "Suppress ARP messages"
+msgstr "ARP mesajlarını baskıla"
+
+#: usr/local/www/system_advanced_network.php:299
+msgid ""
+"This option will suppress ARP log messages when multiple interfaces reside "
+"on the same broadcast domain"
+msgstr ""
+"Bu seçenek birden fazla arabirim aynı yayın alanında bulunduğunda ARP "
+"günlükleme mesajlarını baskılar"
+
+#: usr/local/www/system_advanced_notifications.php:147
+#: usr/local/www/system_advanced_notifications.php:243
+msgid "Test Growl"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:153
+#: usr/local/www/system_advanced_notifications.php:160
+#, php-format
+msgid "This is a test message from %s. It is safe to ignore this message."
+msgstr "Bu %s tarafından gönderilen bir test mesajıdır. Gözardı ediniz."
+
+#: usr/local/www/system_advanced_notifications.php:156
+#: usr/local/www/system_advanced_notifications.php:315
+msgid "Test SMTP"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:164
+msgid "Advanced: Notifications"
+msgstr "GeliÅŸmiÅŸ: Bildirimler"
+
+#: usr/local/www/system_advanced_notifications.php:201
+msgid "Growl"
+msgstr "Growl"
+
+#: usr/local/www/system_advanced_notifications.php:204
+msgid "Disable Growl Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:207
+msgid ""
+"Check this option to disable growl notifications but preserve the settings "
+"below."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:211
+msgid "Registration Name"
+msgstr "Kayıt Adı"
+
+#: usr/local/www/system_advanced_notifications.php:214
+msgid "Enter the name to register with the Growl server (default: PHP-Growl)."
+msgstr "Growl sunucuya gönderilecek ismi giriniz (varsayılan PHP-Growl)."
+
+#: usr/local/www/system_advanced_notifications.php:218
+msgid "Notification Name"
+msgstr "Bildirim adı"
+
+#: usr/local/www/system_advanced_notifications.php:221
+#, php-format
+msgid "Enter a name for the Growl notifications (default: %s growl alert)."
+msgstr "Growl bildirimleri için bir isim giriniz (varsayılan %s growl alert)."
+
+#: usr/local/www/system_advanced_notifications.php:228
+msgid ""
+"This is the IP address that you would like to send growl notifications to."
+msgstr "Growl bildirimlerini göndermek istediğiniz IP adresi."
+
+#: usr/local/www/system_advanced_notifications.php:235
+msgid "Enter the password of the remote growl notification device."
+msgstr "Uzak Growl bildirim aygıtının parolası."
+
+#: usr/local/www/system_advanced_notifications.php:244
+msgid ""
+"NOTE: A test notification will be sent even if the service is marked as "
+"disabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:252
+msgid "SMTP E-Mail"
+msgstr "SMTP E-Posta"
+
+#: usr/local/www/system_advanced_notifications.php:255
+msgid "Disable SMTP Notifications"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:258
+msgid ""
+"Check this option to disable SMTP notifications but preserve the settings "
+"below. Some other mechanisms, such as packages, may need these settings in "
+"place to function."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:262
+msgid "E-Mail server"
+msgstr "E-posta sunucu"
+
+#: usr/local/www/system_advanced_notifications.php:265
+msgid ""
+"This is the FQDN or IP address of the SMTP E-Mail server to which "
+"notifications will be sent."
+msgstr ""
+"Bildirim mesajlarının gönderileceği SMTP e-posta sunucusunun FQDN veya IP "
+"adresidir."
+
+#: usr/local/www/system_advanced_notifications.php:269
+msgid "SMTP Port of E-Mail server"
+msgstr "E-Posta sunucusunun SMTP portu"
+
+#: usr/local/www/system_advanced_notifications.php:272
+msgid ""
+"This is the port of the SMTP E-Mail server, typically 25, 587 (submission) "
+"or 465 (smtps)"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:276
+msgid "Secure SMTP Connection"
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:283
+msgid "From e-mail address"
+msgstr "Kimden e-posta adresi"
+
+#: usr/local/www/system_advanced_notifications.php:286
+msgid "This is the e-mail address that will appear in the from field."
+msgstr "Kimden alanında görüntülenecek e-posta adresi."
+
+#: usr/local/www/system_advanced_notifications.php:290
+msgid "Notification E-Mail address"
+msgstr "Bildirim e-posta adresi"
+
+#: usr/local/www/system_advanced_notifications.php:293
+msgid ""
+"Enter the e-mail address that you would like email notifications sent to."
+msgstr ""
+"Bilgilendirme mesajlarının gönderilmesini istediğiniz e-posta adresini "
+"giriniz."
+
+#: usr/local/www/system_advanced_notifications.php:297
+msgid "Notification E-Mail auth username (optional)"
+msgstr "Bildirim e-posta kutusu kimlik doğrulama kullanıcı adı (isteğe bağlı)"
+
+#: usr/local/www/system_advanced_notifications.php:300
+msgid "Enter the e-mail address username for SMTP authentication."
+msgstr ""
+"SMTP kimlik doğrulama için kullanılacak e-posta kutusu kullanıcı adını "
+"giriniz."
+
+#: usr/local/www/system_advanced_notifications.php:304
+msgid "Notification E-Mail auth password"
+msgstr "Bildirim eposta kutusu kimlik doğrulama parolası"
+
+#: usr/local/www/system_advanced_notifications.php:307
+msgid "Enter the e-mail address password for SMTP authentication."
+msgstr ""
+"SMTP kimlik doğrulama için kullanılacak e-posta kutusu parolasını giriniz."
+
+#: usr/local/www/system_advanced_notifications.php:316
+msgid ""
+"NOTE: A test message will be sent even if the service is marked as disabled."
+msgstr ""
+
+#: usr/local/www/system_advanced_notifications.php:324
+msgid "System Sounds"
+msgstr "Sistem Sesleri"
+
+#: usr/local/www/system_advanced_notifications.php:327
+msgid "Startup/Shutdown Sound"
+msgstr "Başlangıç/Kapanış Sesi"
+
+#: usr/local/www/system_advanced_notifications.php:330
+msgid "Disable the startup/shutdown beep"
+msgstr "Başlangıç/Kapanış sesini kapat"
+
+#: usr/local/www/system_advanced_notifications.php:332
+msgid "When this is checked, startup and shutdown sounds will no longer play."
+msgstr "İşaretlendiğinde, başlangıç ve kapanış sesleri çalmayacak."
+
+#: usr/local/www/system_advanced_sysctl.php:135
+msgid "Advanced: System Tunables"
+msgstr "GeliÅŸmiÅŸ: Sistem DeÄŸiÅŸkenleri"
+
+#: usr/local/www/system_advanced_sysctl.php:149
+msgid ""
+"The firewall tunables have changed. You must apply the configuration to "
+"take affect."
+msgstr ""
+"Güvenlik duvarı iç değişkenleri değiştirildi. Değişikliklerin uygulanması "
+"için etkinleştirmelisiniz."
+
+#: usr/local/www/system_advanced_sysctl.php:181
+msgid "Tunable Name"
+msgstr "Değişken Adı"
+
+#: usr/local/www/system_advanced_sysctl.php:246
+msgid "Edit system tunable"
+msgstr "Sistem değişkenini düzenle"
+
+#: usr/local/www/system_advanced_sysctl.php:249
+msgid "Tunable"
+msgstr "DeÄŸiÅŸken"
+
+#: usr/local/www/system_authservers.php:45
+msgid "Authentication Servers"
+msgstr "Kimlik Doğrulama Sunucuları"
+
+#: usr/local/www/system_authservers.php:86
+msgid "deleted"
+msgstr "silindi"
+
+#: usr/local/www/system_authservers.php:166
+#: usr/local/www/system_authservers.php:189
+#: usr/local/www/system_authservers.php:465
+#: usr/local/www/system_camanager.php:170
+#: usr/local/www/system_camanager.php:182
+#: usr/local/www/system_camanager.php:197
+#: usr/local/www/system_camanager.php:379
+#: usr/local/www/system_certmanager.php:206
+#: usr/local/www/system_certmanager.php:218
+#: usr/local/www/system_certmanager.php:236
+#: usr/local/www/system_certmanager.php:420
+#: usr/local/www/system_certmanager.php:621
+#: usr/local/www/system_certmanager.php:1030
+#: usr/local/www/system_crlmanager.php:195
+#: usr/local/www/system_crlmanager.php:202
+#: usr/local/www/system_crlmanager.php:327
+#: usr/local/www/system_crlmanager.php:417
+#: usr/local/www/system_usermanager.php:217
+#: usr/local/www/system_usermanager.php:795
+msgid "Descriptive name"
+msgstr "Açıklayıcı isim"
+
+#: usr/local/www/system_authservers.php:169
+#: usr/local/www/system_authservers.php:512
+msgid "Port value"
+msgstr "Port deÄŸeri"
+
+#: usr/local/www/system_authservers.php:170
+#: usr/local/www/system_authservers.php:518
+msgid "Transport"
+msgstr "Taşıma"
+
+#: usr/local/www/system_authservers.php:171
+#: usr/local/www/system_authservers.php:554
+msgid "Protocol version"
+msgstr "Protokol sürümü"
+
+#: usr/local/www/system_authservers.php:172
+msgid "Search level"
+msgstr "Arama seviyesi"
+
+#: usr/local/www/system_authservers.php:173
+msgid "User naming Attribute"
+msgstr "Kullanıcı isimlendirme niteliği"
+
+#: usr/local/www/system_authservers.php:174
+msgid "Group naming Attribute"
+msgstr "Grup isimlendirme niteliÄŸi"
+
+#: usr/local/www/system_authservers.php:175
+#: usr/local/www/system_authservers.php:693
+msgid "Group member attribute"
+msgstr "Grup üyesi niteliği"
+
+#: usr/local/www/system_authservers.php:176
+msgid "Authentication container"
+msgstr "Kimlik doğrulama taşıyıcısı"
+
+#: usr/local/www/system_authservers.php:181
+msgid "Bind user DN"
+msgstr "Kullanıcı DN bağla"
+
+#: usr/local/www/system_authservers.php:182
+msgid "Bind Password"
+msgstr "Parola baÄŸla"
+
+#: usr/local/www/system_authservers.php:197
+#: usr/local/www/system_authservers.php:765
+msgid "Authentication port value"
+msgstr "Kimlik doÄŸrulama port deÄŸeri"
+
+#: usr/local/www/system_authservers.php:203
+#: usr/local/www/system_authservers.php:771
+msgid "Accounting port value"
+msgstr "Hesaplandırma port değeri"
+
+#: usr/local/www/system_authservers.php:208
+#: usr/local/www/system_authservers.php:744
+msgid "Shared Secret"
+msgstr "Paylaşımlı Anahtar"
+
+#: usr/local/www/system_authservers.php:215
+msgid "The host name contains invalid characters."
+msgstr "Host adı geçersiz karakter içeriyor."
+
+#: usr/local/www/system_authservers.php:218
+msgid "An authentication server with the same name already exists."
+msgstr "Aynı adla bir kimlik doğrulama sunucusu sistemde mevcut."
+
+#: usr/local/www/system_authservers.php:221
+msgid "RADIUS Timeout value must be numeric and positive."
+msgstr "RADIUS zaman aşımı değeri pozitif ve tam sayı olmalıdır. "
+
+#: usr/local/www/system_authservers.php:405
+msgid "Please fill the required values."
+msgstr "Lütfen gerekli alanları doldurunuz."
+
+#: usr/local/www/system_authservers.php:411
+msgid "Please fill the bind username/password."
+msgstr "Bağlama Kullanıcı adı ve parola alanlarını doldurunuz."
+
+#: usr/local/www/system_authservers.php:433
+#: usr/local/www/system_usermanager_settings.php:103
+msgid "Popup blocker detected. Action aborted."
+msgstr "Açılır pencere engelleyicisi tespit edildi. Eylem iptal edildi."
+
+#: usr/local/www/system_authservers.php:448
+#: usr/local/www/system_groupmanager.php:288
+#: usr/local/www/system_groupmanager_addprivs.php:168
+#: usr/local/www/system_usermanager.php:494
+#: usr/local/www/system_usermanager_addprivs.php:157
+#: usr/local/www/system_usermanager_settings.php:114
+#: usr/local/www/vpn_l2tp.php:286 usr/local/www/vpn_l2tp_users.php:39
+#: usr/local/www/vpn_l2tp_users.php:95 usr/local/www/vpn_pptp.php:307
+#: usr/local/www/vpn_pptp_users.php:72 usr/local/www/vpn_pptp_users.php:92
+msgid "Users"
+msgstr "Kullanıcılar"
+
+#: usr/local/www/system_authservers.php:502
+msgid "LDAP Server Settings"
+msgstr "LDAP Sunucu Ayarları"
+
+#: usr/local/www/system_authservers.php:505
+#: usr/local/www/system_authservers.php:738
+msgid "Hostname or IP address"
+msgstr "Host adı ya da IP adresi"
+
+#: usr/local/www/system_authservers.php:508
+msgid ""
+"NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the "
+"LDAP server's SSL Certificate."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:533
+#: usr/local/www/vpn_openvpn_client.php:751
+#: usr/local/www/vpn_openvpn_server.php:948
+msgid "Peer Certificate Authority"
+msgstr "EÅŸ Sertifika Otoritesi"
+
+#: usr/local/www/system_authservers.php:546
+msgid "This option is used if 'SSL Encrypted' option is choosen."
+msgstr "Bu seçenek sadece 'SSL Şifreli' seçeneği açıksa kullanılır."
+
+#: usr/local/www/system_authservers.php:547
+msgid "It must match with the CA in the AD otherwise problems will arise."
+msgstr "AD'deki CA ile eşleşmelidir, aksi taktirde problem çıkabilir."
+
+#: usr/local/www/system_authservers.php:569
+msgid "Search scope"
+msgstr "Arama kapsamı"
+
+#: usr/local/www/system_authservers.php:573
+msgid "Level:"
+msgstr "Seviye:"
+
+#: usr/local/www/system_authservers.php:588
+msgid "Base DN:"
+msgstr "Temel DN:"
+
+#: usr/local/www/system_authservers.php:598
+msgid "Authentication containers"
+msgstr "Kimlik doğrulama taşıyıcıları"
+
+#: usr/local/www/system_authservers.php:602
+msgid "Containers:"
+msgstr "Taşıyıcılar:"
+
+#: usr/local/www/system_authservers.php:606
+msgid ""
+"Note: Semi-Colon separated. This will be prepended to the search base dn "
+"above or you can specify full container path containing a dc= component."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:607
+#: usr/local/www/system_authservers.php:608
+#: usr/local/www/system_authservers.php:625
+msgid "Example:"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:615
+msgid "Extended Query"
+msgstr "GeniÅŸ Sorgu"
+
+#: usr/local/www/system_authservers.php:632
+msgid "Bind credentials"
+msgstr "BaÄŸlama bilgileri"
+
+#: usr/local/www/system_authservers.php:640
+msgid "Use anonymous binds to resolve distinguished names"
+msgstr "arklı isimleri çözmek için anonim bağlanma kullan"
+
+#: usr/local/www/system_authservers.php:649
+msgid "User DN:"
+msgstr "Kullanıcı DN:"
+
+#: usr/local/www/system_authservers.php:665
+msgid "Initial Template"
+msgstr "Başlangıç Şablonu"
+
+#: usr/local/www/system_authservers.php:681
+msgid "User naming attribute"
+msgstr "Kullanıcı isimlendirme niteliği"
+
+#: usr/local/www/system_authservers.php:687
+msgid "Group naming attribute"
+msgstr "Grup isimlendirme niteliÄŸi"
+
+#: usr/local/www/system_authservers.php:699
+msgid "UTF8 Encode"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:707
+msgid ""
+"UTF8 encode LDAP parameters before sending them to the server. Required to "
+"support international characters, but may not be supported by every LDAP "
+"server."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:714
+msgid "Username Alterations"
+msgstr ""
+
+#: usr/local/www/system_authservers.php:722
+msgid ""
+"Do not strip away parts of the username after the @ symbol, e.g. user@host "
+"becomes user when unchecked."
+msgstr ""
+
+#: usr/local/www/system_authservers.php:735
+msgid "Radius Server Settings"
+msgstr "Radius Sunucu Ayarları"
+
+#: usr/local/www/system_authservers.php:750
+msgid "Services offered"
+msgstr "Sunulan servisler"
+
+#: usr/local/www/system_authservers.php:777
+msgid "Authentication Timeout"
+msgstr "Kimlik doğrulamada zaman aşımı"
+
+#: usr/local/www/system_authservers.php:780
+msgid ""
+"This value controls how long, in seconds, that the RADIUS server may take to "
+"respond to an authentication request."
+msgstr ""
+"Bu değer RADIUS sunucusundan bir kimlik doğrulama isteğinde kaç saniye "
+"sürdüğünü kontrol eder."
+
+#: usr/local/www/system_authservers.php:781
+msgid "If left blank, the default value is 5 seconds."
+msgstr "Boş bırakılması durumunda varsayılan değer 5 saniyedir."
+
+#: usr/local/www/system_authservers.php:782
+msgid ""
+"NOTE: If you are using an interactive two-factor authentication system, "
+"increase this timeout to account for how long it will take the user to "
+"receive and enter a token."
+msgstr ""
+"NOT: İki faktörlü kimlik doğrulama sistemi kullanıyorsanız, hesabın zaman "
+"aşımı süresini uzatmak için kullanıcının giriş yetkisini tekrar alabileceği "
+"bir belirteç girin."
+
+#: usr/local/www/system_authservers.php:805
+msgid "Server Name"
+msgstr "Sunucu Adı"
+
+#: usr/local/www/system_authservers.php:816
+#: usr/local/www/vpn_openvpn_server.php:1842
+msgid "add server"
+msgstr "sunucu ekle"
+
+#: usr/local/www/system_authservers.php:823
+msgid "Additional authentication servers can be added here."
+msgstr "Buradan kimlik doğrulama sunucuları ekleyebilirsiniz."
+
+#: usr/local/www/system_authservers.php:843
+#: usr/local/www/vpn_openvpn_server.php:1871
+msgid "edit server"
+msgstr "sunucu düzenle"
+
+#: usr/local/www/system_authservers.php:846
+msgid "Do you really want to delete this Server?"
+msgstr "Bu sunucuyu silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_authservers.php:847
+#: usr/local/www/vpn_openvpn_server.php:1875
+msgid "delete server"
+msgstr "sunucu sil"
+
+#: usr/local/www/system_camanager.php:45
+msgid "Import an existing Certificate Authority"
+msgstr "Varolan Sertifika Otoritesini içeri aktar"
+
+#: usr/local/www/system_camanager.php:46
+msgid "Create an internal Certificate Authority"
+msgstr "İç Sertifika Sunucusu oluştur"
+
+#: usr/local/www/system_camanager.php:47
+msgid "Create an intermediate Certificate Authority"
+msgstr "Ara Sertifika Otoritesi oluÅŸtur"
+
+#: usr/local/www/system_camanager.php:52
+msgid "Certificate Authority Manager"
+msgstr "Sertifika Yöneticisi"
+
+#: usr/local/www/system_camanager.php:98
+#, php-format
+msgid "Certificate Authority %s and its CRLs (if any) successfully deleted"
+msgstr "%s Sertifika Otoritesi ve CRLleri başarıyla silindi"
+
+#: usr/local/www/system_camanager.php:171
+#: usr/local/www/system_camanager.php:412
+#: usr/local/www/system_certmanager.php:207
+#: usr/local/www/system_certmanager.php:637
+msgid "Certificate data"
+msgstr "Sertifika verisi"
+
+#: usr/local/www/system_camanager.php:173
+#: usr/local/www/system_certmanager.php:210
+msgid "This certificate does not appear to be valid."
+msgstr "Sertifika geçerli görünmüyor."
+
+#: usr/local/www/system_camanager.php:175
+msgid "Encrypted private keys are not yet supported."
+msgstr "Şifreli özel anahtarlar henüz desteklenmemektedir."
+
+#: usr/local/www/system_camanager.php:183
+#: usr/local/www/system_camanager.php:199
+#: usr/local/www/system_camanager.php:464
+#: usr/local/www/system_certmanager.php:220
+#: usr/local/www/system_certmanager.php:237
+#: usr/local/www/system_certmanager.php:692
+#: usr/local/www/system_certmanager.php:866
+#: usr/local/www/system_usermanager.php:219
+#: usr/local/www/system_usermanager.php:821
+msgid "Key length"
+msgstr "Anahtar uzunluÄŸu"
+
+#: usr/local/www/system_camanager.php:184
+#: usr/local/www/system_camanager.php:200
+#: usr/local/www/system_camanager.php:496
+#: usr/local/www/system_certmanager.php:222
+#: usr/local/www/system_certmanager.php:741
+#: usr/local/www/system_crlmanager.php:380
+#: usr/local/www/system_usermanager.php:220
+#: usr/local/www/system_usermanager.php:839
+#: usr/local/www/vpn_ipsec_phase1.php:852
+#: usr/local/www/vpn_ipsec_phase2.php:807
+msgid "Lifetime"
+msgstr "Yaşam süresi"
+
+#: usr/local/www/system_camanager.php:185
+#: usr/local/www/system_camanager.php:201
+#: usr/local/www/system_certmanager.php:223
+#: usr/local/www/system_certmanager.php:238
+msgid "Distinguished name Country Code"
+msgstr "Ayrılmış isim Ülke Kodu"
+
+#: usr/local/www/system_camanager.php:186
+#: usr/local/www/system_camanager.php:202
+#: usr/local/www/system_certmanager.php:224
+#: usr/local/www/system_certmanager.php:239
+msgid "Distinguished name State or Province"
+msgstr "Ayrılmış isim Eyalet"
+
+#: usr/local/www/system_camanager.php:187
+#: usr/local/www/system_camanager.php:203
+#: usr/local/www/system_certmanager.php:225
+#: usr/local/www/system_certmanager.php:240
+msgid "Distinguished name City"
+msgstr "Ayrılmış isim Şehir"
+
+#: usr/local/www/system_camanager.php:188
+#: usr/local/www/system_camanager.php:204
+#: usr/local/www/system_certmanager.php:226
+#: usr/local/www/system_certmanager.php:241
+msgid "Distinguished name Organization"
+msgstr "Ayrılmış isim Firma"
+
+#: usr/local/www/system_camanager.php:189
+#: usr/local/www/system_camanager.php:205
+#: usr/local/www/system_certmanager.php:227
+#: usr/local/www/system_certmanager.php:242
+msgid "Distinguished name Email Address"
+msgstr "Ayrılmış isim E-posta Adresi"
+
+#: usr/local/www/system_camanager.php:190
+#: usr/local/www/system_camanager.php:206
+#: usr/local/www/system_certmanager.php:228
+#: usr/local/www/system_certmanager.php:243
+msgid "Distinguished name Common Name"
+msgstr "Ayrılmış isim Genel Ad"
+
+#: usr/local/www/system_camanager.php:198
+#: usr/local/www/system_camanager.php:447
+msgid "Signing Certificate Authority"
+msgstr "Ä°ÅŸaretleyen Sertifika Otoritesi"
+
+#: usr/local/www/system_camanager.php:223
+#: usr/local/www/system_certmanager.php:311
+#: usr/local/www/system_certmanager.php:316
+msgid "Please select a valid Key Length."
+msgstr "Geçerli anahtar uzunlığını seçiniz."
+
+#: usr/local/www/system_camanager.php:225
+#: usr/local/www/system_certmanager.php:313
+#: usr/local/www/system_certmanager.php:318
+msgid "Please select a valid Digest Algorithm."
+msgstr "Geçerli Özet Algoritması' nı seçiniz."
+
+#: usr/local/www/system_camanager.php:358
+#: usr/local/www/system_certmanager.php:584
+#: usr/local/www/system_crlmanager.php:287
+msgid "CAs"
+msgstr "CA'lar"
+
+#: usr/local/www/system_camanager.php:359
+#: usr/local/www/system_camanager.php:596
+#: usr/local/www/system_certmanager.php:585
+#: usr/local/www/system_crlmanager.php:288
+#: usr/local/www/system_crlmanager.php:543
+msgid "Certificates"
+msgstr "Sertifikalar"
+
+#: usr/local/www/system_camanager.php:360
+#: usr/local/www/system_certmanager.php:586
+#: usr/local/www/system_crlmanager.php:289
+msgid "Certificate Revocation"
+msgstr "Sertifika Ä°ptal"
+
+#: usr/local/www/system_camanager.php:386
+#: usr/local/www/system_certmanager.php:601
+#: usr/local/www/system_crlmanager.php:304
+msgid "Method"
+msgstr "Yöntem"
+
+#: usr/local/www/system_camanager.php:408
+msgid "Existing Certificate Authority"
+msgstr "Varolan Sertifika Otoritesi"
+
+#: usr/local/www/system_camanager.php:416
+#: usr/local/www/system_certmanager.php:641
+msgid "Paste a certificate in X.509 PEM format here."
+msgstr "Sertifikayı X.509 PEM formatında bu alana yapıştırınız."
+
+#: usr/local/www/system_camanager.php:420
+msgid "Certificate Private Key"
+msgstr "Sertifika Özel Anahtarı"
+
+#: usr/local/www/system_camanager.php:420
+msgid "(optional)"
+msgstr "(isteğe bağlı)"
+
+#: usr/local/www/system_camanager.php:424
+msgid ""
+"Paste the private key for the above certificate here. This is optional in "
+"most cases, but required if you need to generate a Certificate Revocation "
+"List (CRL)."
+msgstr ""
+"Üsteki sertifikanın özel anahtarını buraya yapıştırın. Çoğu durumda isteğe "
+"bağlıdır ama eğer Sertifika İptal Listesi (CRL) oluşturmak istiyorsanız "
+"zorunludur."
+
+#: usr/local/www/system_camanager.php:430
+msgid "Serial for next certificate"
+msgstr "Sonraki sertifika için seri numarası"
+
+#: usr/local/www/system_camanager.php:433
+msgid ""
+"Enter a decimal number to be used as the serial number for the next "
+"certificate to be created using this CA."
+msgstr ""
+"Sonraki oluşturulacak sertifika için numaralardan oluşan bir seri numarası "
+"giriniz, bu oluşturulan CA'da kullanılacak."
+
+#: usr/local/www/system_camanager.php:444
+msgid "Internal Certificate Authority"
+msgstr "İç Sertifika Otoritesi"
+
+#: usr/local/www/system_camanager.php:476
+#: usr/local/www/system_certmanager.php:704 usr/local/www/vpn_ipsec.php:363
+#: usr/local/www/vpn_ipsec.php:517 usr/local/www/vpn_ipsec_phase2.php:757
+#: usr/local/www/vpn_openvpn_server.php:1034
+msgid "bits"
+msgstr "bit"
+
+#: usr/local/www/system_camanager.php:480
+#: usr/local/www/system_certmanager.php:708
+#: usr/local/www/system_certmanager.php:884
+msgid "Digest Algorithm"
+msgstr "Özet Algoritması"
+
+#: usr/local/www/system_camanager.php:492
+#: usr/local/www/system_certmanager.php:720
+#: usr/local/www/system_certmanager.php:896
+msgid ""
+"NOTE: It is recommended to use an algorithm stronger than SHA1 when possible."
+msgstr ""
+"NOT: Burada mümkünse SHA1 den daha güçlü bir algoritma kullanılması tavsiye "
+"edilir."
+
+#: usr/local/www/system_camanager.php:499
+#: usr/local/www/system_certmanager.php:744
+#: usr/local/www/system_crlmanager.php:383
+msgid "days"
+msgstr "gün"
+
+#: usr/local/www/system_camanager.php:507
+#: usr/local/www/system_certmanager.php:752
+#: usr/local/www/system_certmanager.php:904
+msgid "Country Code"
+msgstr "Ãœlke Kodu"
+
+#: usr/local/www/system_camanager.php:522
+#: usr/local/www/system_certmanager.php:758
+#: usr/local/www/system_certmanager.php:919
+msgid "State or Province"
+msgstr "Eyalet"
+
+#: usr/local/www/system_camanager.php:526
+#: usr/local/www/system_camanager.php:536
+#: usr/local/www/system_camanager.php:546
+#: usr/local/www/system_camanager.php:556
+#: usr/local/www/system_camanager.php:566
+msgid "ex:"
+msgstr "örn:"
+
+#: usr/local/www/system_camanager.php:528
+#: usr/local/www/system_certmanager.php:925
+msgid "Texas"
+msgstr "Teksas"
+
+#: usr/local/www/system_camanager.php:532
+#: usr/local/www/system_certmanager.php:764
+#: usr/local/www/system_certmanager.php:929
+msgid "City"
+msgstr "Åžehir"
+
+#: usr/local/www/system_camanager.php:538
+#: usr/local/www/system_certmanager.php:935
+msgid "Austin"
+msgstr "Austin"
+
+#: usr/local/www/system_camanager.php:542
+#: usr/local/www/system_certmanager.php:770
+#: usr/local/www/system_certmanager.php:939
+msgid "Organization"
+msgstr "Kurum"
+
+#: usr/local/www/system_camanager.php:548
+#: usr/local/www/system_certmanager.php:945
+msgid "My Company Inc."
+msgstr "Firmam Ltd. Åžti."
+
+#: usr/local/www/system_camanager.php:558
+msgid "admin@mycompany.com"
+msgstr "admin@sirketim.com"
+
+#: usr/local/www/system_camanager.php:568
+msgid "internal-ca"
+msgstr "iç sertifika"
+
+#: usr/local/www/system_camanager.php:594
+#: usr/local/www/system_crlmanager.php:542
+msgid "Internal"
+msgstr "iç"
+
+#: usr/local/www/system_camanager.php:595
+#: usr/local/www/system_certmanager.php:1084
+msgid "Issuer"
+msgstr "Sağlayıcı"
+
+#: usr/local/www/system_camanager.php:597
+#: usr/local/www/system_certmanager.php:1085
+msgid "Distinguished Name"
+msgstr "Ayrılmış İsim"
+
+#: usr/local/www/system_camanager.php:608
+#: usr/local/www/system_certmanager.php:1100
+msgid "self-signed"
+msgstr "kendinden imzalı"
+
+#: usr/local/www/system_camanager.php:610
+#: usr/local/www/system_certmanager.php:1102
+msgid "external"
+msgstr "dış"
+
+#: usr/local/www/system_camanager.php:656
+#: usr/local/www/system_certmanager.php:1148
+msgid "Valid From"
+msgstr "İtibaren geçerli"
+
+#: usr/local/www/system_camanager.php:661
+#: usr/local/www/system_certmanager.php:1153
+msgid "Valid Until"
+msgstr "Geçerlilik Tarihi"
+
+#: usr/local/www/system_camanager.php:668
+msgid "edit CA"
+msgstr "CA düzenle"
+
+#: usr/local/www/system_camanager.php:671
+msgid "export CA cert"
+msgstr "sertifikayı dışarı ver"
+
+#: usr/local/www/system_camanager.php:675
+msgid "export CA private key"
+msgstr "özel anahtarı dışarı ver"
+
+#: usr/local/www/system_camanager.php:678
+msgid ""
+"Do you really want to delete this Certificate Authority and its CRLs, and "
+"unreference any associated certificates?"
+msgstr ""
+"Bu sertifika otoritesini ve bununla ilişkilendirilmiş sertifikaları silmek "
+"istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_camanager.php:679
+msgid "delete ca"
+msgstr "CA sil"
+
+#: usr/local/www/system_camanager.php:691
+msgid "add or import ca"
+msgstr "CA ekle veya içeri aktar"
+
+#: usr/local/www/system_camanager.php:691
+msgid "add ca"
+msgstr "CA ekle"
+
+#: usr/local/www/system_camanager.php:698
+msgid "Additional trusted Certificate Authorities can be added here."
+msgstr "Ek Güvenilen Sertifika Otoriteleri burada eklenebilir."
+
+#: usr/local/www/system_certmanager.php:45
+msgid "Import an existing Certificate"
+msgstr "Varolan bir sertifikayı içeri aktar"
+
+#: usr/local/www/system_certmanager.php:46
+msgid "Create an internal Certificate"
+msgstr "İç sertifika oluştur"
+
+#: usr/local/www/system_certmanager.php:47
+msgid "Create a Certificate Signing Request"
+msgstr "Sertifika Ä°mzalama Talebi oluÅŸtur"
+
+#: usr/local/www/system_certmanager.php:58
+msgid "Certificate Manager"
+msgstr "Sertifika Yöneticisi"
+
+#: usr/local/www/system_certmanager.php:66
+msgid "Choose an existing certificate"
+msgstr "Varolan sertifika seç"
+
+#: usr/local/www/system_certmanager.php:106
+#, php-format
+msgid "Certificate %s successfully deleted"
+msgstr "% sertifikası başarıyla silindi"
+
+#: usr/local/www/system_certmanager.php:208
+msgid "Key data"
+msgstr "Anahtar veri"
+
+#: usr/local/www/system_certmanager.php:219
+#: usr/local/www/system_certmanager.php:675
+#: usr/local/www/system_usermanager.php:218
+#: usr/local/www/system_usermanager.php:801
+msgid "Certificate authority"
+msgstr "Sertifika otoritesi"
+
+#: usr/local/www/system_certmanager.php:221
+#: usr/local/www/system_certmanager.php:724
+msgid "Certificate Type"
+msgstr "Sertifika Türü"
+
+#: usr/local/www/system_certmanager.php:248
+msgid "Existing Certificate Choice"
+msgstr "Varolan Sertifika Seçimi"
+
+#: usr/local/www/system_certmanager.php:421
+msgid "Final Certificate data"
+msgstr "Son Sertifika verisi"
+
+#: usr/local/www/system_certmanager.php:441
+#, php-format
+msgid "The certificate modulus does not match the signing request modulus."
+msgstr "Sertifika konusu imzalama isteÄŸi konusuyla eÅŸleÅŸmiyor."
+
+#: usr/local/www/system_certmanager.php:633
+msgid "Import Certificate"
+msgstr "Sertifika İçeri Aktar"
+
+#: usr/local/www/system_certmanager.php:645
+msgid "Private key data"
+msgstr "Özel anahtar verisi"
+
+#: usr/local/www/system_certmanager.php:649
+msgid "Paste a private key in X.509 PEM format here."
+msgstr "Özel anahtarı x.509 PEM formatında yapıştırınız."
+
+#: usr/local/www/system_certmanager.php:659
+msgid "Internal Certificate"
+msgstr "İç Sertifika"
+
+#: usr/local/www/system_certmanager.php:666
+msgid "No internal Certificate Authorities have been defined. You must"
+msgstr ""
+"İç Sertifika sunucusu tanımlanmadı. Bir iç sertifika oluşturmadan önce bir "
+
+#: usr/local/www/system_certmanager.php:668
+msgid "an internal CA before creating an internal certificate."
+msgstr "manız gerekir."
+
+#: usr/local/www/system_certmanager.php:737
+msgid ""
+"Type of certificate to generate. Used for placing restrictions on the usage "
+"of the generated certificate."
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:782
+#: usr/local/www/system_certmanager.php:955
+msgid "webadmin@mycompany.com"
+msgstr "webadmin@sirketim.com"
+
+#: usr/local/www/system_certmanager.php:796
+#: usr/local/www/system_certmanager.php:965
+msgid "www.example.com"
+msgstr "www.test.com"
+
+#: usr/local/www/system_certmanager.php:800
+msgid "Alternative Names"
+msgstr "Alternatif Ä°simler"
+
+#: usr/local/www/system_certmanager.php:863
+msgid "External Signing Request"
+msgstr "Dış İmzalama Talebi"
+
+#: usr/local/www/system_certmanager.php:978
+msgid "Choose an Existing Certificate"
+msgstr "Varolan Sertifikayı Seç"
+
+#: usr/local/www/system_certmanager.php:981
+msgid "Existing Certificates"
+msgstr "Mevcut Sertifikalar"
+
+#: usr/local/www/system_certmanager.php:1039
+msgid "Complete Signing Request"
+msgstr "Tam Ä°mzalama Talebi"
+
+# 95%
+#: usr/local/www/system_certmanager.php:1043
+msgid "Signing request data"
+msgstr "Ä°mzalama talep verisi"
+
+#: usr/local/www/system_certmanager.php:1047
+msgid ""
+"Copy the certificate signing data from here and forward it to your "
+"certificate authority for signing."
+msgstr ""
+"Sertifika imzalama verisini buradan kopyalayın ve imzalama için sertifika "
+"otoritenize gönderin."
+
+# 95%
+#: usr/local/www/system_certmanager.php:1051
+msgid "Final certificate data"
+msgstr "Son sertifika verisi"
+
+#: usr/local/www/system_certmanager.php:1055
+msgid "Paste the certificate received from your certificate authority here."
+msgstr "Sertifika otoritesinden alınan sertifikayı buraya yapıştırın."
+
+#: usr/local/www/system_certmanager.php:1086
+#: usr/local/www/system_crlmanager.php:544
+msgid "In Use"
+msgstr "Kullanımda"
+
+#: usr/local/www/system_certmanager.php:1108
+msgid "external - signature pending"
+msgstr "dış - imza bekleniyor"
+
+#: usr/local/www/system_certmanager.php:1183
+#: usr/local/www/system_usermanager.php:742
+msgid "export cert"
+msgstr "sertifikayı dışarı aktar"
+
+#: usr/local/www/system_certmanager.php:1183
+#: usr/local/www/system_certmanager.php:1186
+msgid "export ca"
+msgstr "sertifika otoritesini dışarı aktar"
+
+#: usr/local/www/system_certmanager.php:1186
+msgid "export key"
+msgstr "anahtarı dışarı aktar"
+
+#: usr/local/www/system_certmanager.php:1189
+msgid "export ca cert+user cert+user cert key in .p12 format"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1192
+msgid "Do you really want to delete this Certificate?"
+msgstr "Bu sertifikayı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_certmanager.php:1193
+#: usr/local/www/system_usermanager.php:749
+msgid "delete cert"
+msgstr "sertifikayı sil"
+
+#: usr/local/www/system_certmanager.php:1199
+msgid "update csr"
+msgstr "CSRyi güncelle"
+
+#: usr/local/www/system_certmanager.php:1212
+msgid "add or import certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1212
+msgid "add certificate"
+msgstr ""
+
+#: usr/local/www/system_certmanager.php:1218
+msgid "Note: You can only delete a certificate if it is not currently in use."
+msgstr "Not: Sadece kullanımda olmayan sertifikaları silebilirsiniz."
+
+#: usr/local/www/system_crlmanager.php:47
+msgid "Certificate Revocation List Manager"
+msgstr "Sertifika İptal Listesi Yöneticisi"
+
+#: usr/local/www/system_crlmanager.php:50
+msgid "Create an internal Certificate Revocation List"
+msgstr "İç Sertifika İptal Listesi oluştur"
+
+#: usr/local/www/system_crlmanager.php:51
+msgid "Import an existing Certificate Revocation List"
+msgstr "Sertifika İptal Listesini içeri aktar"
+
+#: usr/local/www/system_crlmanager.php:88
+msgid "Invalid CRL reference."
+msgstr "Geçersiz Sertifika İptal Listesi referansı."
+
+#: usr/local/www/system_crlmanager.php:94
+#, php-format
+msgid "Certificate Revocation List %s is in use and cannot be deleted"
+msgstr "Sertifika İptal Listesi %s kullanımda ve silinemez"
+
+#: usr/local/www/system_crlmanager.php:100
+#, php-format
+msgid "Certificate Revocation List %s successfully deleted"
+msgstr "Sertifika İptal Listesi %s başarıyla silindi"
+
+#: usr/local/www/system_crlmanager.php:139
+msgid "Both the Certificate and CRL must be specified."
+msgstr "Sertifika ve Ä°ptal listesi belirtilmelidir."
+
+#: usr/local/www/system_crlmanager.php:143
+msgid "CA mismatch between the Certificate and CRL. Unable to Revoke."
+msgstr "Sertifika ve Sertifika Ä°ptal listesinde uyumsuzluk. Ä°ptal edilemiyor."
+
+#: usr/local/www/system_crlmanager.php:146
+msgid "Cannot revoke certificates for an imported/external CRL."
+msgstr "İçeriye aktarılmış veya dış CRL sertifikaları iptal edilemez."
+
+#: usr/local/www/system_crlmanager.php:178
+#: usr/local/www/system_crlmanager.php:180
+#, php-format
+msgid "Deleted Certificate %s from CRL %s"
+msgstr "CRL %1$s içindeki %2$s sertifikası silindi"
+
+#: usr/local/www/system_crlmanager.php:182
+#, php-format
+msgid "Failed to delete Certificate %s from CRL %s"
+msgstr "CRL %1$s içindeki %2$s sertifikası silinemedi"
+
+#: usr/local/www/system_crlmanager.php:196
+msgid "Certificate Revocation List data"
+msgstr "Sertifika Ä°ptal Listesi verisi"
+
+#: usr/local/www/system_crlmanager.php:203
+#: usr/local/www/system_crlmanager.php:333
+#: usr/local/www/vpn_ipsec_phase1.php:181
+#: usr/local/www/vpn_openvpn_client.php:258
+#: usr/local/www/vpn_openvpn_server.php:333
+msgid "Certificate Authority"
+msgstr "Sertifika Otoritesi"
+
+#: usr/local/www/system_crlmanager.php:359
+msgid "Existing Certificate Revocation List"
+msgstr "Varolan Sertifika Ä°ptal Listesi"
+
+#: usr/local/www/system_crlmanager.php:363
+#: usr/local/www/system_crlmanager.php:423
+msgid "CRL data"
+msgstr "CRL verisi"
+
+#: usr/local/www/system_crlmanager.php:367
+#: usr/local/www/system_crlmanager.php:427
+msgid "Paste a Certificate Revocation List in X.509 CRL format here."
+msgstr "Sertifika İptal Listesini x.509 CRL formatında bu alana yapıştırınız."
+
+#: usr/local/www/system_crlmanager.php:377
+msgid "Internal Certificate Revocation List"
+msgstr "İç Sertifika İptal Listesi"
+
+#: usr/local/www/system_crlmanager.php:384
+msgid "Default: 9999"
+msgstr "Varsayılan: 9999"
+
+#: usr/local/www/system_crlmanager.php:388
+msgid "Serial"
+msgstr "Seri"
+
+#: usr/local/www/system_crlmanager.php:392
+msgid "Default: 0"
+msgstr "Varsayılan: 0"
+
+#: usr/local/www/system_crlmanager.php:414
+msgid "Edit Imported Certificate Revocation List"
+msgstr "İçeriye aktarılan Sertifika İptal Listesini düzenle"
+
+#: usr/local/www/system_crlmanager.php:447
+msgid "Currently Revoked Certificates for CRL"
+msgstr "CRL iptal edilmiÅŸ sertifikalar listesi"
+
+#: usr/local/www/system_crlmanager.php:451
+msgid "Certificate Name"
+msgstr "Sertifika Adı"
+
+#: usr/local/www/system_crlmanager.php:452
+msgid "Revocation Reason"
+msgstr "Ä°ptal Sebebi"
+
+#: usr/local/www/system_crlmanager.php:453
+msgid "Revoked At"
+msgstr "İptal Zamanı"
+
+#: usr/local/www/system_crlmanager.php:462
+msgid "No Certificates Found for this CRL."
+msgstr "Sertifika İptal Listesinde Sertifika bulunamadı."
+
+#: usr/local/www/system_crlmanager.php:481
+msgid "Do you really want to delete this Certificate from the CRL?"
+msgstr ""
+"Bu sertifikayı Sertifika İptal Listesinden silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_crlmanager.php:482
+msgid "Delete this certificate from the CRL "
+msgstr "Bu sertifikayı sertifika iptal listesinden sil "
+
+#: usr/local/www/system_crlmanager.php:499
+msgid "No Certificates Found for this CA."
+msgstr "Sertifika otoritesi için sertifika bulunamadı."
+
+#: usr/local/www/system_crlmanager.php:506
+msgid "Choose a Certificate to Revoke"
+msgstr "İptal edilecek sertifikayı seçiniz"
+
+#: usr/local/www/system_crlmanager.php:515
+msgid "Reason"
+msgstr "Sebep"
+
+#: usr/local/www/system_crlmanager.php:552
+msgid "Additional Certificate Revocation Lists can be added here."
+msgstr "Ek Sertifika Ä°ptal Listelerini buradan ekleyebilirsiniz."
+
+#: usr/local/www/system_crlmanager.php:589
+#, php-format
+msgid "Add or Import CRL for %s"
+msgstr "%s den CRL içeri aktar yada ekle"
+
+#: usr/local/www/system_crlmanager.php:589
+#: usr/local/www/system_crlmanager.php:593
+msgid "add crl"
+msgstr "CRL ekle"
+
+#: usr/local/www/system_crlmanager.php:593
+#, php-format
+msgid "Import CRL for %s"
+msgstr "%s den CRL içeri aktar"
+
+#: usr/local/www/system_crlmanager.php:613
+msgid "Export CRL"
+msgstr "CRL dışarı aktar"
+
+#: usr/local/www/system_crlmanager.php:617
+#: usr/local/www/system_crlmanager.php:621
+msgid "Edit CRL"
+msgstr "CRL düzenle"
+
+#: usr/local/www/system_crlmanager.php:625
+msgid "Do you really want to delete this Certificate Revocation List?"
+msgstr "Sertifika Ä°ptal Listesini silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_crlmanager.php:626
+msgid "Delete CRL"
+msgstr "CRL sil"
+
+#: usr/local/www/system_firmware.php:83
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "Yüklenen dosya php.ini upload_max_filesize yönergesini aşıyor"
+
+#: usr/local/www/system_firmware.php:85
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr "Yüklenen dosya HTML de belirtilen MAX_FILE_SIZE ' yi aşıyor"
+
+#: usr/local/www/system_firmware.php:87
+msgid "The uploaded file was only partially uploaded"
+msgstr "Yüklenen dosya sadece kısmen yüklendi"
+
+#: usr/local/www/system_firmware.php:89
+msgid "No file was uploaded"
+msgstr "Yüklenen dosya yok"
+
+#: usr/local/www/system_firmware.php:91
+msgid "Missing a temporary folder"
+msgstr "Kayıp geçici klasör"
+
+#: usr/local/www/system_firmware.php:93
+msgid "Failed to write file to disk"
+msgstr "Disk e dosya yazma başarısız"
+
+#: usr/local/www/system_firmware.php:95
+msgid "File upload stopped by extension"
+msgstr "Dosya yüklemesi uzantı tarafından durduruldu"
+
+#: usr/local/www/system_firmware.php:97
+msgid "Unknown upload error"
+msgstr "Bilinmeyen yükleme hatası"
+
+#: usr/local/www/system_firmware.php:103 usr/local/www/system_firmware.php:240
+#: usr/local/www/system_firmware_auto.php:81
+#: usr/local/www/system_firmware_check.php:65
+#: usr/local/www/system_firmware_restorefullbackup.php:126
+#: usr/local/www/system_firmware_settings.php:125
+msgid "Manual Update"
+msgstr "Elle Güncelleme"
+
+#: usr/local/www/system_firmware.php:108
+msgid ""
+"An upgrade is currently in progress.<p>The firewall will reboot when the "
+"operation is complete."
+msgstr ""
+"Güncelleme işlemi devam etmekte.<p>Güvenlik Duvarı işlem bittikten sonra "
+"yeniden baÅŸlayacak."
+
+#: usr/local/www/system_firmware.php:129
+msgid "Upgrade"
+msgstr "Yükselt"
+
+#: usr/local/www/system_firmware.php:148
+msgid "The uploaded image file is not for this platform."
+msgstr "Yüklenen imaj dosyası bu platform için değil."
+
+#: usr/local/www/system_firmware.php:151
+msgid "Image upload failed (out of memory?)"
+msgstr "İmaj yüklemesi başarısız (bellek yetersizliği?)"
+
+#: usr/local/www/system_firmware.php:162
+#: usr/local/www/system_firmware_auto.php:209
+msgid "The digital signature on this image is invalid."
+msgstr "İmajın dijital imzası geçerli değil."
+
+#: usr/local/www/system_firmware.php:164
+#: usr/local/www/system_firmware_auto.php:212
+msgid "This image is not digitally signed."
+msgstr "İmaj dijital olarak imzalanmamış."
+
+#: usr/local/www/system_firmware.php:166
+#: usr/local/www/system_firmware_auto.php:216
+msgid "There has been an error verifying the signature on this image."
+msgstr "İmaj imzasının doğrulanması sırasında hata oluştu."
+
+#: usr/local/www/system_firmware.php:169
+#: usr/local/www/system_firmware_auto.php:231
+msgid "The image file is corrupt."
+msgstr "Belirtilen imaj dosyası bozuk."
+
+#: usr/local/www/system_firmware.php:182
+msgid ""
+"The firmware is now being updated. The firewall will reboot automatically."
+msgstr ""
+"Üretici yazılımı şimdi yükleniyor. Güvenlik Duvarı otomatik olarak yeniden "
+"baÅŸlayacak."
+
+#: usr/local/www/system_firmware.php:196
+#, php-format
+msgid "Firmware image missing or other error, please try again %s."
+msgstr ""
+"Üretici yazılımı imajı kayıp yada diğer hata, lütfen tekrar deneyin %s."
+
+#: usr/local/www/system_firmware.php:222
+msgid ""
+"This means that the image you uploaded is not an official/supported image "
+"and may lead to unexpected behavior or security compromises. Only install "
+"images that come from sources that you trust, and make sure that the image "
+"has not been tampered with."
+msgstr ""
+"Yüklediğiniz imaj orjinal ya da desteklenen bir imaj değil bunun uygulanması "
+"sistemde hata ve güvenlik sorunlarına yol açabilir. Kaynak dosyası "
+"değiştirilmiş tahrib edilmiş imajları yüklemekten kaçının sadece güvenilir "
+"kaynaklardan gelen imajları yükleyin."
+
+#: usr/local/www/system_firmware.php:226
+msgid "Do you want to install this image anyway (on your own risk)?"
+msgstr "Yine de bu imajı kurmak istermisiniz (risk size ait)?"
+
+#: usr/local/www/system_firmware.php:241
+#: usr/local/www/system_firmware_auto.php:62
+#: usr/local/www/system_firmware_auto.php:82
+#: usr/local/www/system_firmware_check.php:50
+#: usr/local/www/system_firmware_check.php:66
+#: usr/local/www/system_firmware_restorefullbackup.php:127
+#: usr/local/www/system_firmware_settings.php:126
+msgid "Auto Update"
+msgstr "Otomatik Güncelle"
+
+#: usr/local/www/system_firmware.php:242
+#: usr/local/www/system_firmware_auto.php:83
+#: usr/local/www/system_firmware_check.php:67
+#: usr/local/www/system_firmware_restorefullbackup.php:128
+#: usr/local/www/system_firmware_settings.php:127
+msgid "Updater Settings"
+msgstr "Güncelleme Ayarları"
+
+#: usr/local/www/system_firmware.php:244
+#: usr/local/www/system_firmware_auto.php:85
+#: usr/local/www/system_firmware_check.php:69
+#: usr/local/www/system_firmware_restorefullbackup.php:130
+#: usr/local/www/system_firmware_settings.php:129
+msgid "Restore Full Backup"
+msgstr "Tam Yedeğe Geri Dön"
+
+#: usr/local/www/system_firmware.php:254
+msgid "Invoke"
+msgstr "Çalıştır"
+
+#: usr/local/www/system_firmware.php:254
+msgid "Manual Upgrade"
+msgstr "Elle Yükseltme"
+
+#: usr/local/www/system_firmware.php:261
+msgid "Enable firmware upload"
+msgstr "Üretici yazılımı yüklemeyi etkinleştir"
+
+#: usr/local/www/system_firmware.php:263
+#, php-format
+msgid "Click \"Enable firmware upload\" to begin."
+msgstr "\"Üretici yazılımı yüklemeyi etkinleştir\" tıklayarak başlayın."
+
+#: usr/local/www/system_firmware.php:266
+msgid "Disable firmware upload"
+msgstr "Üretici yazılımı yüklemeyi kapat"
+
+#: usr/local/www/system_firmware.php:282
+#: usr/local/www/system_firmware_check.php:106
+msgid "Perform full backup prior to upgrade"
+msgstr "Yükseltme yapmadan önce tam yedek alın"
+
+#: usr/local/www/system_firmware.php:285
+msgid "Upgrade firmware"
+msgstr "Üretici yazılımı yükseltme"
+
+#: usr/local/www/system_firmware.php:286
+msgid "Click \"Upgrade firmware\" to start the upgrade process."
+msgstr ""
+"\"Üretici yazılımı yükseltme\" yi tıklayarak yükseltme işlemini başlatın."
+
+#: usr/local/www/system_firmware.php:288
+msgid "You must reboot the system before you can upgrade the firmware."
+msgstr "Üretici yazılımı yüklemeden önce sistemi yeniden başlatmalısınız."
+
+#: usr/local/www/system_firmware.php:299
+msgid "Warning:"
+msgstr "Uyarı:"
+
+#: usr/local/www/system_firmware.php:302
+msgid ""
+"DO NOT abort the firmware upgrade once it has started. The firewall will "
+"reboot automatically after storing the new firmware. The configuration will "
+"be maintained."
+msgstr ""
+"Başladıktan sonra ürün yükseltmesini DURDURMAYIN. Güvenlik duvarı yeni "
+"Üretici yazılımı yüklendikten sonra otomatik olarak tekrar başlayacaktır. "
+"Yapılandırma korunur."
+
+#: usr/local/www/system_firmware_auto.php:122
+msgid "Beginning firmware upgrade"
+msgstr "Üretici yazılımı yükseltme başlıyor"
+
+#: usr/local/www/system_firmware_auto.php:141
+msgid "Downloading current version information"
+msgstr "Güncel sürüm bilgisi indiriliyor"
+
+#: usr/local/www/system_firmware_auto.php:156
+#: usr/local/www/system_firmware_auto.php:165
+#: usr/local/www/system_firmware_check.php:143
+msgid "Unable to check for updates."
+msgstr "Güncellemeler kontrol edilemiyor."
+
+#: usr/local/www/system_firmware_auto.php:170
+msgid "Downloading updates"
+msgstr "Güncellemeler indiriliyor"
+
+#: usr/local/www/system_firmware_auto.php:180
+msgid "download complete."
+msgstr "indirme tamamlandı."
+
+#: usr/local/www/system_firmware_auto.php:182
+#: usr/local/www/system_firmware_check.php:161
+msgid "You are on the latest version."
+msgstr "En son sürümü kullanıyorsunuz."
+
+#: usr/local/www/system_firmware_auto.php:222
+msgid ""
+"Update cannot continue. You can disable this check on the Updater Settings "
+"tab."
+msgstr ""
+"Güncelleme devam edemiyor. Bu seçeneği Güncelleme Ayarları başlığından "
+"devre dışı bırakabilirsiniz."
+
+#: usr/local/www/system_firmware_auto.php:227
+msgid ""
+"Upgrade Image does not contain a signature but the system has been "
+"configured to allow unsigned images. One moment please..."
+msgstr ""
+"Yükseltme imajı bir imza içermiyor ama sistem imzasız imajlara izin verecek "
+"şekilde ayarlanmış durumda. Bir saniye..."
+
+#: usr/local/www/system_firmware_auto.php:232
+msgid "Update cannot continue"
+msgstr "Güncelleme devam edemiyor"
+
+#: usr/local/www/system_firmware_auto.php:243
+msgid "Downloading complete but sha256 does not match."
+msgstr "İndirme tamamlandı ama sha256 eşleşmiyor."
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Auto upgrade aborted."
+msgstr "Otomatik yükseltme iptal edildi."
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Downloaded SHA256"
+msgstr "SHA256 indirildi"
+
+#: usr/local/www/system_firmware_auto.php:244
+msgid "Needed SHA256"
+msgstr "SHA256 gerekiyor"
+
+#: usr/local/www/system_firmware_auto.php:246
+msgid "is now upgrading."
+msgstr "yükseltme yapılıyor."
+
+#: usr/local/www/system_firmware_auto.php:246
+msgid "The firewall will reboot once the operation is completed."
+msgstr "İşlem tamamlanınca güvenlik duvarı yeniden başlatılacak."
+
+#: usr/local/www/system_firmware_auto.php:268
+msgid "Auto Update Download Status"
+msgstr "Otomatik Güncelleme İndirme Durumu"
+
+#: usr/local/www/system_firmware_auto.php:270
+msgid "Current Version"
+msgstr "Mevcut Sürüm"
+
+#: usr/local/www/system_firmware_auto.php:271
+msgid "Latest Version"
+msgstr "Son Sürüm "
+
+#: usr/local/www/system_firmware_auto.php:272
+msgid "File size"
+msgstr "Dosya boyutu"
+
+#: usr/local/www/system_firmware_auto.php:273
+msgid "Downloaded"
+msgstr "Ä°ndirilen"
+
+#: usr/local/www/system_firmware_auto.php:274
+msgid "Percent"
+msgstr "Yüzde"
+
+#: usr/local/www/system_firmware_check.php:109
+msgid "Invoke Auto Upgrade"
+msgstr "Otomatik Yükseltmeyi Çalıştır"
+
+#: usr/local/www/system_firmware_check.php:127
+msgid "Downloading new version information..."
+msgstr "Yeni sürüm bilgisi indiriliyor..."
+
+#: usr/local/www/system_firmware_check.php:145
+msgid "Could not contact custom update server."
+msgstr "Özel güncelleme sunucusuna bağlanılamadı."
+
+#: usr/local/www/system_firmware_check.php:147
+#, php-format
+msgid "Could not contact %1$s update server %2$s%3$s"
+msgstr "%1$s özel güncelleme sunucusuna %2$s%3$s bağlanılamadı"
+
+#: usr/local/www/system_firmware_check.php:149
+msgid "Obtaining current version information..."
+msgstr "Güncel sürüm bilgisi alınıyor..."
+
+#: usr/local/www/system_firmware_check.php:186
+msgid "A new version is now available"
+msgstr "Yeni bir sürüm var"
+
+#: usr/local/www/system_firmware_check.php:187
+msgid "Current version"
+msgstr "Mevcut sürüm"
+
+#: usr/local/www/system_firmware_check.php:189
+msgid "NanoBSD Size"
+msgstr "NanoBSD Boyutu"
+
+#: usr/local/www/system_firmware_check.php:191
+msgid "Built On"
+msgstr "Ä°nÅŸa"
+
+#: usr/local/www/system_firmware_check.php:192
+msgid "New version"
+msgstr "Yeni sürüm"
+
+#: usr/local/www/system_firmware_check.php:193
+msgid "Update source"
+msgstr "Güncelleme kaynağı"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:105
+msgid "Restore full backup"
+msgstr "Tam yedeği geri yükle"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:140
+msgid "Filename"
+msgstr "Dosya ismi"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:163
+msgid "Do you really want to delete this backup?"
+msgstr "Bu yedeÄŸi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_firmware_restorefullbackup.php:175
+msgid "Could not locate any previous backups."
+msgstr "Herhangi bir önceki yedekleme bulamadı."
+
+# 86%
+#: usr/local/www/system_firmware_restorefullbackup.php:183
+msgid "do not restore config.xml."
+msgstr "config.xml dosyası onarılamadı."
+
+#: usr/local/www/system_firmware_restorefullbackup.php:185
+msgid "Restore"
+msgstr "Geri yükle"
+
+#: usr/local/www/system_firmware_settings.php:50
+msgid ""
+"A Firmware Auto Update Base URL must be specified when \"Use an unofficial "
+"server for firmware upgrades\" is enabled."
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:137
+msgid "Firmware Branch"
+msgstr "Üretici yazılımı Dalı"
+
+#: usr/local/www/system_firmware_settings.php:141
+msgid "Default Auto Update URLs"
+msgstr "Varsayılan Otomatik Güncelleme URLleri"
+
+#: usr/local/www/system_firmware_settings.php:161
+#, php-format
+msgid ""
+"Entries denoted by \"Current architecture\" match the architecture of your "
+"current installation, such as %s. Changing architectures during an upgrade "
+"is not recommended, and may require a manual reboot after the update "
+"completes."
+msgstr ""
+"\"Current architecture (güncel yapı)\" ifadesine uyan girdiler sizin "
+"sisteminizde kurulu olan yapıdır, mesela %s gibi. Güncelleme sırasında yapı "
+"değişitirmek önerilmez ve güncelleme tamamlanınca el ile yeniden başlatma "
+"gerekebilir."
+
+#: usr/local/www/system_firmware_settings.php:166
+msgid "Firmware Auto Update URL"
+msgstr "Üretici yazılımı Otomatik Güncelleme URLleri"
+
+#: usr/local/www/system_firmware_settings.php:168
+msgid "Use an unofficial server for firmware upgrades"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "This is where"
+msgstr "Burada"
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "will check for newer firmware versions when the"
+msgstr "yeni Üretici yazılımı sürümü kontrolü gerçekleştirir"
+
+#: usr/local/www/system_firmware_settings.php:173
+msgid "System: Firmware: Auto Update"
+msgstr "Sistem: Üretici yazılımı: Otomatik Güncelle"
+
+#: usr/local/www/system_firmware_settings.php:175
+#, php-format
+msgid ""
+"When a custom URL is configured, the system will not verify the image has an "
+"official digital signature"
+msgstr ""
+
+#: usr/local/www/system_firmware_settings.php:183
+msgid "Updates"
+msgstr "Güncellemeler"
+
+#: usr/local/www/system_firmware_settings.php:186
+msgid "Unsigned images"
+msgstr "İmzalanmamış imajlar"
+
+#: usr/local/www/system_firmware_settings.php:190
+msgid ""
+"Allow auto-update firmware images with a missing or invalid digital "
+"signature to be used."
+msgstr ""
+"Dijital olması olmayan veya bozuk olan ürün imajlarının otomatik "
+"güncellenmesine izin ver."
+
+#: usr/local/www/system_firmware_settings.php:194
+msgid "Dashboard check"
+msgstr "Anasayfa kotrol"
+
+#: usr/local/www/system_firmware_settings.php:198
+msgid "Disable the automatic dashboard auto-update check."
+msgstr "Anasayfada otomatik-güncelleme kontrol etmeyi kapat."
+
+#: usr/local/www/system_firmware_settings.php:206
+msgid "Gitsync"
+msgstr "Git senkronizasyonu"
+
+#: usr/local/www/system_firmware_settings.php:209
+msgid "Auto sync on update"
+msgstr "Güncellemede otomatik olarak senkronize et"
+
+#: usr/local/www/system_firmware_settings.php:213
+msgid ""
+"After updating, sync with the following repository/branch before reboot."
+msgstr ""
+"Güncellemeden sonra, yeniden başlatmadan önce aşağıdaki depo/dal ile "
+"senkronize et."
+
+#: usr/local/www/system_firmware_settings.php:225
+msgid "Repository URL"
+msgstr "Depo URLsi"
+
+#: usr/local/www/system_firmware_settings.php:230
+#, php-format
+msgid "The most recently used repository was %s"
+msgstr "En son kullanılan depo URLsi %s"
+
+#: usr/local/www/system_firmware_settings.php:232
+msgid "This will be used if the field is left blank."
+msgstr "Alan boş bırakılır ise bu kullanılacaktır."
+
+#: usr/local/www/system_firmware_settings.php:251
+msgid "Branch name"
+msgstr "Dal adı"
+
+#: usr/local/www/system_firmware_settings.php:256
+#, php-format
+msgid "The most recently used branch was %s"
+msgstr "En son kullanılan dal %s idi"
+
+#: usr/local/www/system_firmware_settings.php:259
+msgid "Usually the branch name is master"
+msgstr "Genellikle dal adı 'master'dır"
+
+#: usr/local/www/system_firmware_settings.php:262
+msgid "Note: Sync will not be performed if a branch is not specified."
+msgstr "Not: Eğer bir dal belirtmezseniz senkronizasyon gerçekleştirilmez."
+
+#: usr/local/www/system_gateway_groups.php:86
+msgid "removed gateway group"
+msgstr "ağ geçidi grubu silindi"
+
+#: usr/local/www/system_gateway_groups.php:112
+#, php-format
+msgid ""
+"The gateway configuration has been changed.%sYou must apply the changes in "
+"order for them to take effect."
+msgstr ""
+"Ağ geçidi yapılandırması değiştirildi.%s Değişiklikleri uygulayarak etkin "
+"hale gelmelerini saÄŸlayabilirsiniz."
+
+#: usr/local/www/system_gateway_groups.php:188
+msgid "Do you really want to delete this gateway group?"
+msgstr "Bu ağ geçidi grubunu silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_gateway_groups.php:206
+msgid ""
+"Remember to use these Gateway Groups in firewall rules in order to enable "
+"load balancing, failover, or policy-based routing. Without rules directing "
+"traffic into the Gateway Groups, they will not be used."
+msgstr ""
+"Yük dengeleme, yük aktarma veya ilke tabanlı yönlendirmeleri kullanabilmek "
+"için güvenlik duvarı kurallarında bu Ağ Geçidi Gruplarını kullanmayı "
+"unutmayın. Trafiği Ağ Geçidi Gruplarına yönlendiren kurallar olmazsa "
+"kullanılmazlar."
+
+#: usr/local/www/system_gateway_groups_edit.php:56
+msgid "Member Down"
+msgstr "Üye Kapalı"
+
+#: usr/local/www/system_gateway_groups_edit.php:57
+msgid "Packet Loss"
+msgstr "Paket Kaybı"
+
+#: usr/local/www/system_gateway_groups_edit.php:58
+msgid "High Latency"
+msgstr "Yüksek Gecikme"
+
+#: usr/local/www/system_gateway_groups_edit.php:59
+msgid "Packet Loss or High Latency"
+msgstr "Paket Kaybı ya da Yüksek Gecikme"
+
+#: usr/local/www/system_gateway_groups_edit.php:91
+msgid "A valid gateway group name must be specified."
+msgstr "Geçerli bir ağ geçidi grup adı belirtilmelidir."
+
+#: usr/local/www/system_gateway_groups_edit.php:94
+#: usr/local/www/system_gateways_edit.php:122
+msgid "The gateway name must not contain invalid characters."
+msgstr "Ağ geçidi adı geçersiz karakterler içermemelidir."
+
+# 87%
+#: usr/local/www/system_gateway_groups_edit.php:103
+msgid "Changing name on a gateway group is not allowed."
+msgstr "Ağ geçidi grubu adının değiştirilmesine izin verilmemektedir."
+
+#: usr/local/www/system_gateway_groups_edit.php:108
+#, php-format
+msgid "A gateway group with this name \"%s\" already exists."
+msgstr "\"%s\" adında bir ağ geçidi grubu sistemde mevcut."
+
+#: usr/local/www/system_gateway_groups_edit.php:125
+#, php-format
+msgid ""
+"A gateway group cannot have the same name with a gateway \"%s\" please "
+"choose another name."
+msgstr ""
+"Bir ağ geçidi grubu ağ geçidi \"%s\" ile aynı ada sahip olamaz. Lütfen başka "
+"bir isim seçin."
+
+#: usr/local/www/system_gateway_groups_edit.php:129
+msgid "No gateway(s) have been selected to be used in this group"
+msgstr "Bu grupta kullanılmak üzere ağ geçit(ler)'i seçilmemiş"
+
+#: usr/local/www/system_gateway_groups_edit.php:153
+msgid "Edit gateway group"
+msgstr "Ağ geçidi grubunu düzenle"
+
+# 75%
+#: usr/local/www/system_gateway_groups_edit.php:232
+msgid "Edit gateway group entry"
+msgstr "Ağ geçidi grup kaydını düzenle"
+
+#: usr/local/www/system_gateway_groups_edit.php:241
+msgid "Gateway Priority"
+msgstr "Ağ Geçidi Önceliği"
+
+#: usr/local/www/system_gateway_groups_edit.php:275
+msgid "Never"
+msgstr "Hiçbir zaman"
+
+#: usr/local/www/system_gateway_groups_edit.php:276
+msgid "Tier 1"
+msgstr "Sıra 1"
+
+#: usr/local/www/system_gateway_groups_edit.php:277
+msgid "Tier 2"
+msgstr "Sıra 2"
+
+#: usr/local/www/system_gateway_groups_edit.php:278
+msgid "Tier 3"
+msgstr "Sıra 3"
+
+#: usr/local/www/system_gateway_groups_edit.php:279
+msgid "Tier 4"
+msgstr "Sıra 4"
+
+#: usr/local/www/system_gateway_groups_edit.php:280
+msgid "Tier 5"
+msgstr "Sıra 5"
+
+#: usr/local/www/system_gateway_groups_edit.php:296
+msgid "Interface Address"
+msgstr "Arabirim Adresi"
+
+#: usr/local/www/system_gateway_groups_edit.php:314
+msgid "Link Priority"
+msgstr "Bağlantı Önceliği"
+
+#: usr/local/www/system_gateway_groups_edit.php:315
+msgid ""
+"The priority selected here defines in what order failover and balancing of "
+"links will be done. Multiple links of the same priority will balance "
+"connections until all links in the priority will be exhausted. If all links "
+"in a priority level are exhausted we will use the next available link(s) in "
+"the next priority level."
+msgstr ""
+"Burada seçilen öncelik bağlantılarda yük dengeleme ve aktarma işlemlerinin "
+"hangi sırayla yapılacağını belirler. Aynı önceliğe sahip birden fazla "
+"bağlantı olursa o önceliğe sahip tüm bağlantılar tükenene kadar dengeli "
+"kullanılır. Bir öncelik sırasındaki tüm bağlantılar tükendiğinde bir sonraki "
+"öncelik sırasına geçilir."
+
+#: usr/local/www/system_gateway_groups_edit.php:320
+msgid ""
+"The virtual IP field selects what (virtual) IP should be used when this "
+"group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint"
+msgstr ""
+"Sanal IP alanı seçilen hangi (sanal) IP, bu grup yerel Dinamik DNS, IPsec "
+"yada OpenVPN uç noktası için kullanılmalıdır"
+
+#: usr/local/www/system_gateway_groups_edit.php:325
+msgid "Trigger Level"
+msgstr "Tetikleme Seviyesi"
+
+#: usr/local/www/system_gateway_groups_edit.php:336
+msgid "When to trigger exclusion of a member"
+msgstr "Bir üyenin dışarıda bırakılması ne zaman tetiklenecek"
+
+#: usr/local/www/system_gateways.php:89
+#, php-format
+msgid ""
+"Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:99
+#, php-format
+msgid ""
+"Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:196
+msgid "The gateway configuration has been changed."
+msgstr "Ağ geçidi yapılandırması değiştirildi."
+
+#: usr/local/www/system_gateways.php:220
+#: usr/local/www/system_gateways_edit.php:719
+msgid "Monitor IP"
+msgstr "Ä°zleme IPsi"
+
+#: usr/local/www/system_gateways.php:266
+msgid "This gateway is inactive because interface is missing"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:340
+msgid "Do you really want to delete this gateway?"
+msgstr "Bu ağ geçidini silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_gateways.php:377 usr/local/www/system_gateways.php:382
+msgid "delete selected items"
+msgstr ""
+
+#: usr/local/www/system_gateways.php:383
+msgid "Do you really want to delete the selected gateway items?"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:126
+msgid "A valid gateway IP address must be specified."
+msgstr "Geçerli bir ağ geçidi IP adresi belirtilmelidir."
+
+#: usr/local/www/system_gateways_edit.php:134
+msgid ""
+"Cannot add IPv4 Gateway Address because no IPv4 address could be found on "
+"the interface."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:153
+#: usr/local/www/system_gateways_edit.php:181
+#, php-format
+msgid ""
+"The gateway address %1$s does not lie within one of the chosen interface's "
+"subnets."
+msgstr "Ağ geçidi adresi %1$s seçilen arabirimlerin altağı içinde yer almıyor."
+
+#: usr/local/www/system_gateways_edit.php:162
+msgid ""
+"Cannot add IPv6 Gateway Address because no IPv6 address could be found on "
+"the interface."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:188
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv4 "
+"configuration."
+msgstr ""
+"Statik IPv4 yapılandırması olan arabirimlerde dinamik ağ geçidi değerleri "
+"belirtilemez."
+
+#: usr/local/www/system_gateways_edit.php:192
+msgid ""
+"Dynamic gateway values cannot be specified for interfaces with a static IPv6 "
+"configuration."
+msgstr ""
+"Statik IPv6 yapılandırması olan arabirimlerde dinamik ağ geçidi değerleri "
+"belirtilemez."
+
+#: usr/local/www/system_gateways_edit.php:196
+msgid "A valid monitor IP address must be specified."
+msgstr "Geçerli bir izleme IP adresi belirtilmelidir."
+
+#: usr/local/www/system_gateways_edit.php:222
+msgid "Changing name on a gateway is not allowed."
+msgstr "Ağ geçidi adının değiştirilmesine izin verilmemektedir."
+
+#: usr/local/www/system_gateways_edit.php:227
+#, php-format
+msgid "The gateway name \"%s\" already exists."
+msgstr "\"%s\" adında ağ geçidi sistemde mevcut."
+
+#: usr/local/www/system_gateways_edit.php:233
+#, php-format
+msgid "The gateway IP address \"%s\" already exists."
+msgstr "Ağ geçidi IP adresi \"%s\" sistemde zaten mevcut."
+
+#: usr/local/www/system_gateways_edit.php:239
+#, php-format
+msgid ""
+"The monitor IP address \"%s\" is already in use. You must choose a different "
+"monitor IP."
+msgstr ""
+"\"%s\" izleme IP adresi kullanımda. Başka bir izleme IP adresi seçiniz."
+
+#: usr/local/www/system_gateways_edit.php:249
+msgid "The low latency threshold needs to be a numeric value."
+msgstr "Düşük gecikme eşiğinin sayısal bir değer olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:252
+msgid "The low latency threshold needs to be positive."
+msgstr "Düşük gecikme eşiğinin pozitif olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:259
+msgid "The high latency threshold needs to be a numeric value."
+msgstr "Yüksek gecikme eşiğinin sayısal bir değer olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:262
+msgid "The high latency threshold needs to be positive."
+msgstr "Yüksek gecikme eşiğinin pozitif olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:269
+msgid "The low Packet Loss threshold needs to be a numeric value."
+msgstr "Düşük paket kaybı eşiğinin sayısal bir değer olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:272
+msgid "The low Packet Loss threshold needs to be positive."
+msgstr "Düşük paket kaybı eşiğinin pozitif olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:275
+msgid "The low Packet Loss threshold needs to be less than 100."
+msgstr "Düşük paket kaybı eşiğinin 100 den daha az olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:282
+msgid "The high Packet Loss threshold needs to be a numeric value."
+msgstr "Yüksek paket kaybı eşiğinin sayısal bir değer olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:285
+msgid "The high Packet Loss threshold needs to be positive."
+msgstr "Yüksek paket kaybı eşiğinin pozitif olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:288
+msgid "The high Packet Loss threshold needs to be 100 or less."
+msgstr "Yüksek paket kaybı eşiğinin 100 yada daha az olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:296
+msgid ""
+"The high latency threshold needs to be higher than the low latency threshold"
+msgstr ""
+"Yüksek gecikme eşiğinin düşük gecikme eşiğinden daha yüksek olması gerekir"
+
+#: usr/local/www/system_gateways_edit.php:319
+msgid ""
+"The high Packet Loss threshold needs to be higher than the low Packet Loss "
+"threshold"
+msgstr ""
+"Yüksek paket kaybı eşiğinin düşük paket kaybı eşiğinden daha yüksek olması "
+"gerekir"
+
+#: usr/local/www/system_gateways_edit.php:341
+msgid "The probe interval needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:344
+msgid "The probe interval needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:351
+msgid "The down time setting needs to be a numeric value."
+msgstr "Erişilemez zamanının ayarları sayısal bir değer olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:354
+msgid "The down time setting needs to be positive."
+msgstr "Erişilemez zamanının ayarlarının pozitif olması gerekir."
+
+#: usr/local/www/system_gateways_edit.php:362
+msgid "The probe interval needs to be less than the down time setting."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:384
+msgid "The average delay replies qty needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:387
+msgid "The average delay replies qty needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:394
+msgid "The average packet loss probes qty needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:397
+msgid "The average packet loss probes qty needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:404
+msgid "The lost probe delay needs to be a numeric value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:407
+msgid "The lost probe delay needs to be positive."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:523
+#: usr/local/www/system_gateways_edit.php:644
+msgid "Edit gateway"
+msgstr "Ağ geçidi düzenle"
+
+#: usr/local/www/system_gateways_edit.php:650
+msgid "Disable this gateway"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:651
+msgid ""
+"Set this option to disable this gateway without removing it from the list."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:668
+msgid "Choose which interface this gateway applies to."
+msgstr "Bu ağ geçidinin hangi arabirim için olduğunu seçin."
+
+#: usr/local/www/system_gateways_edit.php:685
+msgid "Choose the Internet Protocol this gateway uses."
+msgstr "İnternet Protokolü için kullanılacak ağ geçidi türünü seçiniz."
+
+#: usr/local/www/system_gateways_edit.php:692
+msgid "Gateway name"
+msgstr "Ağ geçidi adı"
+
+#: usr/local/www/system_gateways_edit.php:699
+msgid "Gateway IP address"
+msgstr "Ağ geçidi IP adresi"
+
+#: usr/local/www/system_gateways_edit.php:703
+#: usr/local/www/system_gateways_edit.php:706
+msgid "Default Gateway"
+msgstr "Varsayılan Ağ Geçidi"
+
+#: usr/local/www/system_gateways_edit.php:707
+msgid "This will select the above gateway as the default gateway"
+msgstr ""
+"Bu seçenek aşağıda belirtilen ağ geçidini varsayılan ağ geçidi olarak "
+"seçecektir"
+
+#: usr/local/www/system_gateways_edit.php:711
+#: usr/local/www/system_gateways_edit.php:714
+msgid "Disable Gateway Monitoring"
+msgstr "Ağ Geçidi İzlemeyi Kapat"
+
+#: usr/local/www/system_gateways_edit.php:715
+msgid "This will consider this gateway as always being up"
+msgstr "Bu seçenek bu ağ geçidini her zaman açık kabul etmeyi sağlar"
+
+#: usr/local/www/system_gateways_edit.php:728
+msgid "Alternative monitor IP"
+msgstr "Alternatif izleme IP adresi"
+
+#: usr/local/www/system_gateways_edit.php:729
+msgid ""
+"Enter an alternative address here to be used to monitor the link. This is "
+"used for the quality RRD graphs as well as the load balancer entries. Use "
+"this if the gateway does not respond to ICMP echo requests (pings)"
+msgstr ""
+"Bağlantıyı izlemek için kullanılacak alternatif bir adres girin. Hem RRD "
+"grafikleri hem de yük dengeleyici kayıtlarında kullanılır. Ağ geçidi ICMP "
+"echo isteklerine (ping'lere) cevap vermiyorsa bunu kullanabilirsiniz"
+
+#: usr/local/www/system_gateways_edit.php:736
+#: usr/local/www/system_gateways_edit.php:739
+msgid "Mark Gateway as Down"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:740
+msgid "This will force this gateway to be considered Down"
+msgstr ""
+
+# 86%
+#: usr/local/www/system_gateways_edit.php:748
+msgid " - Show advanced option"
+msgstr " - Gelişmiş seçeneği göster"
+
+#: usr/local/www/system_gateways_edit.php:765
+msgid "Weight for this gateway when used in a Gateway Group."
+msgstr ""
+"Bu ağ geçidinin bir Ağ Geçidi Grubunda kullanıldığında alacağı ağırlık."
+
+#: usr/local/www/system_gateways_edit.php:769
+msgid "Latency thresholds"
+msgstr "Gecikme eÅŸik deÄŸerleri"
+
+#: usr/local/www/system_gateways_edit.php:781
+msgid "Packet Loss thresholds"
+msgstr "Paket Kaybı eşik değeri"
+
+#: usr/local/www/system_gateways_edit.php:793
+msgid "Probe Interval"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:799
+msgid ""
+"NOTE: The quality graph is averaged over seconds, not intervals, so as the "
+"probe interval is increased the accuracy of the quality graph is decreased."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:804
+msgid "Down"
+msgstr "Kapalı"
+
+#: usr/local/www/system_gateways_edit.php:812
+msgid "Average Delay Replies Qty"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:817
+#: usr/local/www/system_gateways_edit.php:827
+#: usr/local/www/system_gateways_edit.php:837
+msgid "Use calculated value."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:822
+msgid "Average Packet Loss Probes Qty"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:832
+msgid "Lost Probe Delay"
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:843
+msgid ""
+"The probe interval must be less than the down time, otherwise the gateway "
+"will seem to go down then come up again at the next probe."
+msgstr ""
+
+#: usr/local/www/system_gateways_edit.php:844
+msgid ""
+"The down time defines the length of time before the gateway is marked as "
+"down, but the accuracy is controlled by the probe interval. For example, if "
+"your down time is 40 seconds but on a 30 second probe interval, only one "
+"probe would have to fail before the gateway is marked down at the 40 second "
+"mark. By default, the gateway is considered down after 10 seconds, and the "
+"probe interval is 1 second, so 10 probes would have to fail before the "
+"gateway is marked down."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:53
+#: usr/local/www/system_groupmanager_addprivs.php:57
+msgid "Group manager"
+msgstr "Grup yöneticisi"
+
+#: usr/local/www/system_groupmanager.php:79
+#: usr/local/www/vpn_ipsec_mobile.php:619
+msgid "Group"
+msgstr "Grup"
+
+#: usr/local/www/system_groupmanager.php:80
+#: usr/local/www/system_groupmanager.php:104
+#: usr/local/www/system_usermanager.php:100
+#: usr/local/www/system_usermanager.php:115
+msgid "successfully deleted"
+msgstr "başarıyla silindi"
+
+#: usr/local/www/system_groupmanager.php:103
+#: usr/local/www/system_usermanager.php:114
+msgid "Privilege"
+msgstr "Yetki"
+
+#: usr/local/www/system_groupmanager.php:131
+msgid "Selected groups removed successfully!"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:148
+msgid "The group name contains invalid characters."
+msgstr "Grup adı geçersiz karakterler içeriyor."
+
+#: usr/local/www/system_groupmanager.php:151
+msgid "The group name is longer than 16 characters."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:157
+msgid "Another entry with the same group name already exists."
+msgstr "Sistemde aynı grup isminde bir tanım mevcut."
+
+#: usr/local/www/system_groupmanager.php:314
+#: usr/local/www/system_usermanager.php:520
+msgid "Defined by"
+msgstr "Tanımlayan"
+
+#: usr/local/www/system_groupmanager.php:321
+#: usr/local/www/system_groupmanager.php:481
+msgid "Group name"
+msgstr "Grup adı"
+
+#: usr/local/www/system_groupmanager.php:331
+msgid "Group description, for your own information only"
+msgstr "Grup açıklaması (grubu daha kolay tanıyabilmeniz için)"
+
+#: usr/local/www/system_groupmanager.php:338
+#: usr/local/www/system_usermanager.php:566
+msgid "Group Memberships"
+msgstr "Grup Ãœyelikleri"
+
+#: usr/local/www/system_groupmanager.php:343
+msgid "Not Members"
+msgstr "Ãœye Olmayanlar"
+
+#: usr/local/www/system_groupmanager.php:367
+msgid "Add Members"
+msgstr "Ãœye Ekle"
+
+#: usr/local/www/system_groupmanager.php:371
+msgid "Remove Members"
+msgstr "Üye Çıkar"
+
+#: usr/local/www/system_groupmanager.php:398
+#: usr/local/www/system_groupmanager_addprivs.php:196
+#: usr/local/www/system_usermanager.php:632
+#: usr/local/www/system_usermanager_addprivs.php:183
+msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items"
+msgstr "Birden fazla öğe seçmek için CTRL (PC) / COMMAND (Mac) basılı tutun"
+
+#: usr/local/www/system_groupmanager.php:406
+msgid "Assigned Privileges"
+msgstr "Atanan Yetkiler"
+
+#: usr/local/www/system_groupmanager.php:432
+#: usr/local/www/system_usermanager.php:674
+msgid "Do you really want to delete this privilege?"
+msgstr "Bu yetkiyi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_groupmanager.php:433
+#: usr/local/www/system_usermanager.php:675
+msgid "delete privilege"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:483
+msgid "Member Count"
+msgstr "Üye Sayısı"
+
+#: usr/local/www/system_groupmanager.php:494
+msgid "add group"
+msgstr "grup ekle"
+
+#: usr/local/www/system_groupmanager.php:495
+msgid "Delete selected groups"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:495
+msgid "Do you really want to delete selected groups?"
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:501
+msgid ""
+"Additional webConfigurator groups can be added here.\n"
+"\t\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by "
+"users who are members of the group.\n"
+"\t\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system "
+"defined object.\n"
+"\t\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they "
+"cannot be deleted."
+msgstr ""
+
+#: usr/local/www/system_groupmanager.php:562
+msgid "Do you really want to delete this group?"
+msgstr "Bu grubu silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_groupmanager.php:563
+msgid "delete group"
+msgstr "grubu sil"
+
+#: usr/local/www/system_groupmanager_addprivs.php:57
+msgid "Add privileges"
+msgstr "Yetki ekle"
+
+#: usr/local/www/system_groupmanager_addprivs.php:81
+#: usr/local/www/system_usermanager_addprivs.php:75
+msgid "Selected priveleges"
+msgstr "Seçili yetkiler"
+
+#: usr/local/www/system_groupmanager_addprivs.php:182
+#: usr/local/www/system_usermanager_addprivs.php:171
+msgid "System Privileges"
+msgstr "Sistem yetkileri"
+
+#: usr/local/www/system_groupmanager_addprivs.php:220
+#: usr/local/www/system_usermanager_addprivs.php:189
+msgid "Select a privilege from the list above for a description"
+msgstr "Yukarıdaki listeden bir yetki seçerek açıklamasını görebilirsiniz"
+
+#: usr/local/www/system_hasync.php:101
+msgid "High Availability Sync"
+msgstr "Yüksek Kullanılırlık senk."
+
+#: usr/local/www/system_routes.php:54 usr/local/www/system_routes.php:199
+#: usr/local/www/system_routes_edit.php:212
+msgid "Static Routes"
+msgstr "Statik Yönlendirmeler"
+
+#: usr/local/www/system_routes.php:114 usr/local/www/system_routes.php:126
+msgid "removed route to"
+msgstr "şu yönlendirme silindi"
+
+#: usr/local/www/system_routes.php:141
+msgid "enabled route to"
+msgstr ""
+
+#: usr/local/www/system_routes.php:145
+msgid "disabled route to"
+msgstr ""
+
+#: usr/local/www/system_routes.php:212
+#, php-format
+msgid ""
+"The static route configuration has been changed.%sYou must apply the changes "
+"in order for them to take effect."
+msgstr ""
+"Statik yönlendirme yapılandırması değiştirildi.%sDeğişiklikleri uygulayarak "
+"etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#: usr/local/www/system_routes.php:293
+msgid "move selected routes before this route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:298
+msgid "edit route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:304
+msgid "Do you really want to delete this route?"
+msgstr "Bu yönlendirmeyi silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_routes.php:305
+msgid "delete route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:310
+msgid "add a new route based on this one"
+msgstr ""
+
+#: usr/local/www/system_routes.php:328 usr/local/www/system_routes.php:333
+msgid "move selected routes to end"
+msgstr ""
+
+#: usr/local/www/system_routes.php:341
+msgid "add new route"
+msgstr ""
+
+#: usr/local/www/system_routes.php:351 usr/local/www/system_routes.php:356
+msgid "delete selected routes"
+msgstr ""
+
+#: usr/local/www/system_routes.php:357
+msgid "Do you really want to delete the selected routes?"
+msgstr ""
+
+#: usr/local/www/system_routes.php:372
+msgid ""
+"Do not enter static routes for networks assigned on any interface of this "
+"firewall. Static routes are only used for networks reachable via a "
+"different router, and not reachable via your default gateway."
+msgstr ""
+"Bu güvenlik duvarının herhangi bir arabirimine atanmış ağlar için statik "
+"yönlendirme girmeyin. Statik yönlendirmeler sadece varsayılan ağ geçidiniz "
+"üzerinden erişemediğiniz, onun yerine farklı bir yönlendirici üzerinden "
+"eriştiğiniz ağlar için kullanılır."
+
+#: usr/local/www/system_routes_edit.php:85
+#: usr/local/www/system_routes_edit.php:229
+msgid "Destination network"
+msgstr "Hedef aÄŸ"
+
+#: usr/local/www/system_routes_edit.php:86
+msgid "Destination network bit count"
+msgstr "Hedef ağ bit sayısı"
+
+#: usr/local/www/system_routes_edit.php:92
+msgid "A valid IPv4 or IPv6 destination network must be specified."
+msgstr "Geçerli bir IPv4 yada IPv6 hedef ağı belirtilmeli."
+
+#: usr/local/www/system_routes_edit.php:95
+msgid "A valid destination network bit count must be specified."
+msgstr "Geçerli bir hedef ağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/system_routes_edit.php:113
+msgid "A IPv4 subnet can not be over 32 bits."
+msgstr "IPv4 altağ 32 bit üzerinde olamaz."
+
+# 92%
+#: usr/local/www/system_routes_edit.php:155
+msgid "A route to these destination networks already exists"
+msgstr "Bu hedef ağa bir yönlendirme sistemde mevcut"
+
+#: usr/local/www/system_routes_edit.php:165
+#: usr/local/www/system_routes_edit.php:172
+#, php-format
+msgid "This network conflicts with address configured on interface %s."
+msgstr "Bu ağ çatışmaları adresi ile beraber %s arabiriminde yapılandırıldı."
+
+#: usr/local/www/system_routes_edit.php:212
+msgid "Edit route"
+msgstr "Yönlendirme düzenle"
+
+#: usr/local/www/system_routes_edit.php:226
+msgid "Edit route entry"
+msgstr "Yönlendirme girdisi düzenle"
+
+#: usr/local/www/system_routes_edit.php:240
+msgid "Destination network for this static route"
+msgstr "Bu statik yönlendirme için hedef ağ"
+
+#: usr/local/www/system_routes_edit.php:257
+msgid "Choose which gateway this route applies to or"
+msgstr "Bu yönlendirmenin uygulanacağı ağ geçidini seçiniz veya"
+
+#: usr/local/www/system_routes_edit.php:274
+msgid "Default gateway:"
+msgstr "Varsayılan ağ geçidi:"
+
+#: usr/local/www/system_routes_edit.php:277
+msgid "Interface:"
+msgstr "Arabirim:"
+
+#: usr/local/www/system_routes_edit.php:291
+msgid "Gateway IP:"
+msgstr "Ağ Geçidi IPsi:"
+
+#: usr/local/www/system_routes_edit.php:318
+msgid "Disable this static route"
+msgstr "Bu statik yönlendirmeyi kapat"
+
+#: usr/local/www/system_routes_edit.php:319
+msgid ""
+"Set this option to disable this static route without removing it from the "
+"list."
+msgstr ""
+"By seçenek ile listeden statik yönlendirmeyi silmeden devre dışı "
+"bırakabilirsiniz."
+
+#: usr/local/www/system_routes_edit.php:393
+#, php-format
+msgid "You can manage Gateways %shere%s."
+msgstr "Ağ geçitlerini %sburadan%s yönetebilirsiniz."
+
+#: usr/local/www/system_routes_edit.php:396
+msgid "Sorry, we could not create your gateway at this time."
+msgstr "Ağ geçidi oluşturulamadı."
+
+#: usr/local/www/system_usermanager.php:167
+#: usr/local/www/system_usermanager.php:781
+#: usr/local/www/system_usermanager.php:791
+#: usr/local/www/vpn_ipsec_phase1.php:181
+#: usr/local/www/vpn_openvpn_server.php:333
+msgid "Certificate"
+msgstr "Sertifika"
+
+#: usr/local/www/system_usermanager.php:168
+msgid "association removed."
+msgstr "ilişkilendirme kaldırıldı."
+
+#: usr/local/www/system_usermanager.php:193
+msgid "Selected users removed successfully!"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:230
+msgid "The username is longer than 16 characters."
+msgstr "Kullanıcı adı 16 karakterden uzun."
+
+#: usr/local/www/system_usermanager.php:233
+#: usr/local/www/system_usermanager_passwordmg.php:55
+#: usr/local/www/vpn_l2tp_users_edit.php:98
+#: usr/local/www/vpn_pptp_users_edit.php:97
+msgid "The passwords do not match."
+msgstr "Parolalar aynı değil."
+
+#: usr/local/www/system_usermanager.php:236
+msgid "IPsec Pre-Shared Key contains invalid characters."
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:246
+#: usr/local/www/vpn_l2tp_users_edit.php:108
+#: usr/local/www/vpn_pptp_users_edit.php:107
+msgid "Another entry with the same username already exists."
+msgstr "Aynı kullanıcı adıyla başka girdi tespit edildi."
+
+#: usr/local/www/system_usermanager.php:257
+msgid "That username is reserved by the system."
+msgstr "Bu kullanıcı adı sistem tarafından kullanıma ayrılmıştır."
+
+#: usr/local/www/system_usermanager.php:277
+msgid "Invalid expiration date format; use MM/DD/YYYY instead."
+msgstr "Süre dolum tarih formatı geçersiz; AA/GG/YYYY biçiminde girin."
+
+#: usr/local/www/system_usermanager.php:284
+msgid "Invalid internal Certificate Authority"
+msgstr "Geçersiz iç Sertifika Otoritesi"
+
+#: usr/local/www/system_usermanager.php:547
+#: usr/local/www/system_usermanager_passwordmg.php:123
+msgid "(confirmation)"
+msgstr "(onay)"
+
+#: usr/local/www/system_usermanager.php:551
+#: usr/local/www/system_usermanager.php:905
+msgid "Full name"
+msgstr "Ad Soyad"
+
+#: usr/local/www/system_usermanager.php:555
+msgid "User's full name, for your own information only"
+msgstr "Kullanıcının tam adı (Bilgi amaçlı)"
+
+#: usr/local/www/system_usermanager.php:559
+msgid "Expiration date"
+msgstr "Geçerlilik süresi"
+
+#: usr/local/www/system_usermanager.php:563
+msgid ""
+"Leave blank if the account shouldn't expire, otherwise enter the expiration "
+"date in the following format: mm/dd/yyyy"
+msgstr ""
+"Hesap her zaman geçerli olsun istiyorsanız boş bırakın, aksi taktirde "
+"hesabın son geçerlilik tarihini aa/gg/yyyy biçiminde girin"
+
+#: usr/local/www/system_usermanager.php:571
+msgid "Not Member Of"
+msgstr "Ãœyesi DeÄŸil"
+
+#: usr/local/www/system_usermanager.php:597
+msgid "Add Groups"
+msgstr "Grup ekle"
+
+#: usr/local/www/system_usermanager.php:601
+msgid "Remove Groups"
+msgstr "Grup çıkar"
+
+#: usr/local/www/system_usermanager.php:605
+msgid "Member Of"
+msgstr "Ãœyesi"
+
+#: usr/local/www/system_usermanager.php:639
+msgid "Effective Privileges"
+msgstr "Etkin Ä°zinler"
+
+#: usr/local/www/system_usermanager.php:643
+msgid "Inherited From"
+msgstr "Miras Alınan"
+
+#: usr/local/www/system_usermanager.php:700
+msgid "User Certificates"
+msgstr "Kullanıcı Sertifikaları"
+
+#: usr/local/www/system_usermanager.php:705
+msgid "CA"
+msgstr "CA"
+
+#: usr/local/www/system_usermanager.php:736
+msgid "export private key"
+msgstr "özel anahtarı dışarı ver"
+
+#: usr/local/www/system_usermanager.php:748
+msgid "Do you really want to remove this certificate association?"
+msgstr "Bu sertifika iliÅŸkilendirmesini silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/system_usermanager.php:748
+msgid "(Certificate will not be deleted)"
+msgstr "(Sertifika silinmeyecektir.)"
+
+#: usr/local/www/system_usermanager.php:783
+msgid "Click to create a user certificate."
+msgstr "Kullanıcı sertifikası oluşturmak için tıklayınız."
+
+#: usr/local/www/system_usermanager.php:853
+#: usr/local/www/system_usermanager.php:859
+msgid "Authorized keys"
+msgstr "Ä°zinli anahtarlar"
+
+#: usr/local/www/system_usermanager.php:855
+msgid "Click to paste an authorized key."
+msgstr "İzinli anahtar yapıştırmak için tıklayınız."
+
+#: usr/local/www/system_usermanager.php:870
+msgid "Paste an authorized keys file here."
+msgstr "Buraya izinli anahtar dosyası yapıştırabilirsiniz."
+
+#: usr/local/www/system_usermanager.php:874
+msgid "IPsec Pre-Shared Key"
+msgstr "IPsec Ön Paylaşımlı Anahtar"
+
+#: usr/local/www/system_usermanager.php:918
+#: usr/local/www/vpn_l2tp_users.php:122 usr/local/www/vpn_pptp_users.php:106
+#: usr/local/www/vpn_pptp_users.php:129
+msgid "add user"
+msgstr "kullanıcı ekle"
+
+#: usr/local/www/system_usermanager.php:919
+msgid "Delete selected users"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:919
+msgid "Do you really want to delete selected Users?"
+msgstr ""
+
+#: usr/local/www/system_usermanager.php:925
+msgid ""
+"Additional users can be added here. User permissions for accessing the "
+"webConfigurator can be assigned directly or inherited from group "
+"memberships. An icon that appears grey indicates that it is a system defined "
+"object. Some system object properties can be modified but they cannot be "
+"deleted."
+msgstr ""
+"Ek webArayüzü kullanıcıları buradan eklenebilir. webArayüzüne erişim "
+"izinleri doğrudan atanabilir veya grup üyeliklerinden miras alınabilir. Gri "
+"bir simge sistem tanımlı bir nesne olduğu anlamına gelir. Sistem "
+"nesnelerinin bazı özellikleri değiştirilebilir ancak silinemez."
+
+#: usr/local/www/system_usermanager.php:930
+msgid ""
+"Accounts created here are also used for other parts of the system such as "
+"OpenVPN, IPsec, and Captive Portal."
+msgstr ""
+"Burada oluşturulan hesaplar OpenVPN, IPsec ve Hizmet Portalı gibi bölümler "
+"için de kullanılır."
+
+#: usr/local/www/system_usermanager.php:978
+#: usr/local/www/vpn_pptp_users.php:119
+msgid "edit user"
+msgstr "kullanıcı düzenle"
+
+#: usr/local/www/system_usermanager.php:988
+#: usr/local/www/vpn_l2tp_users.php:117 usr/local/www/vpn_pptp_users.php:120
+msgid "Do you really want to delete this user?"
+msgstr "Bu kullanıcıyı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/system_usermanager.php:989
+#: usr/local/www/vpn_l2tp_users.php:117 usr/local/www/vpn_pptp_users.php:120
+msgid "delete user"
+msgstr "kullanıcı sil"
+
+#: usr/local/www/system_usermanager_passwordmg.php:44
+msgid "User Password"
+msgstr "Kullanıcı Parolası"
+
+#: usr/local/www/system_usermanager_passwordmg.php:67
+msgid "Password successfully changed"
+msgstr "Parola başarıyla değiştirildi"
+
+#: usr/local/www/system_usermanager_passwordmg.php:96
+msgid "Sorry, you cannot change the password for a non-local user."
+msgstr "Yerel olmayan kullanıcının parolasını değiştiremezsiniz."
+
+#: usr/local/www/system_usermanager_passwordmg.php:126
+msgid "Select a new password"
+msgstr "Yeni parola seçiniz"
+
+#: usr/local/www/system_usermanager_settings.php:50
+msgid "User manager settings"
+msgstr "Kullanıcı yöneticisi ayarları"
+
+#: usr/local/www/system_usermanager_settings.php:60
+msgid "Session timeout must be an integer value."
+msgstr "Oturum zaman aşımı değeri tamsayı olmalıdır."
+
+#: usr/local/www/system_usermanager_settings.php:70
+msgid ""
+"The test was not performed because it is supported only for ldap based "
+"backends."
+msgstr ""
+"Sadece LDAP tabanlı arkauçlarda desteklendiğinden dolayı test "
+"gerçekleştirilmedi."
+
+#: usr/local/www/system_usermanager_settings.php:132
+msgid "Session Timeout"
+msgstr "Oturum Zaman Aşımı"
+
+#: usr/local/www/system_usermanager_settings.php:136
+msgid ""
+"Time in minutes to expire idle management sessions. The default is 4 hours "
+"(240 minutes)."
+msgstr ""
+"Boş duran yönetim oturumlarının kapatılma süresi. Varsayılan 4 saattir (240 "
+"dakika)."
+
+#: usr/local/www/system_usermanager_settings.php:137
+msgid "Enter 0 to never expire sessions. NOTE: This is a security risk!"
+msgstr ""
+"Sıfır (0) girerek oturumların sona ermesini engelleyebilirsiniz. Not: Bu bir "
+"güvenlik riski oluşturur!"
+
+#: usr/local/www/system_usermanager_settings.php:164
+msgid "Save and Test"
+msgstr "Kaydet ve Test Et"
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:97
+msgid ""
+"Could not connect to the LDAP server. Please check your LDAP configuration."
+msgstr "LDAP sunucuya bağlanamadı. LDAP yapılandırmasını kontrol edin."
+
+#: usr/local/www/system_usermanager_settings_ldapacpicker.php:100
+msgid "Please select which containers to Authenticate against:"
+msgstr "Her taşıyıcılarla kimlik doğrulama yapılacağını seçiniz:"
+
+#: usr/local/www/system_usermanager_settings_test.php:81
+#, php-format
+msgid "Could not find settings for %s%s"
+msgstr "%s%s ayarları bulunamadı"
+
+#: usr/local/www/system_usermanager_settings_test.php:86
+#, php-format
+msgid "Testing %s LDAP settings... One moment please..."
+msgstr "%s LDAP ayarları test ediliyor... Bir dakika lütfen..."
+
+#: usr/local/www/system_usermanager_settings_test.php:90
+msgid "Attempting connection to"
+msgstr "Bağlanmaya çalışıyor"
+
+#: usr/local/www/system_usermanager_settings_test.php:94
+msgid "Attempting bind to"
+msgstr "İlişkilendirmeye çalışıyor"
+
+#: usr/local/www/system_usermanager_settings_test.php:98
+msgid "Attempting to fetch Organizational Units from"
+msgstr "Yönetimsel Birimler okunuyor"
+
+#: usr/local/www/system_usermanager_settings_test.php:105
+msgid "Organization units found"
+msgstr "Bulunan yönetimsel birimler"
+
+#: usr/local/www/system_usermanager_settings_test.php:112
+#: usr/local/www/system_usermanager_settings_test.php:117
+#: usr/local/www/system_usermanager_settings_test.php:121
+msgid "failed"
+msgstr "başarısız"
+
+#: usr/local/www/uploadconfig.php:49
+msgid "ERR Could not save configuration."
+msgstr "HATA: Yapılandırma kaydedilemedi."
+
+#: usr/local/www/uploadconfig.php:55
+msgid "OK"
+msgstr "TAMAM"
+
+#: usr/local/www/uploadconfig.php:58
+msgid "ERR Could not install configuration."
+msgstr "HATA: Yapılandırma kurulamadı."
+
+#: usr/local/www/uploadconfig.php:61
+msgid "ERR Invalid configuration received."
+msgstr "HATA: Geçersiz yapılandırma alındı."
+
+#: usr/local/www/vpn_ipsec.php:231 usr/local/www/vpn_ipsec_keys.php:92
+#: usr/local/www/vpn_ipsec_mobile.php:331
+msgid "The IPsec tunnel configuration has been changed"
+msgstr "IPSec tünel yapılandırması değiştirildi"
+
+#: usr/local/www/vpn_ipsec.php:238 usr/local/www/vpn_ipsec_keys.php:100
+#: usr/local/www/vpn_ipsec_mobile.php:346
+#: usr/local/www/vpn_ipsec_phase1.php:553
+#: usr/local/www/vpn_ipsec_phase2.php:539
+#: usr/local/www/vpn_ipsec_settings.php:204
+msgid "Tunnels"
+msgstr "Tüneller"
+
+#: usr/local/www/vpn_ipsec.php:239 usr/local/www/vpn_ipsec_keys.php:101
+#: usr/local/www/vpn_ipsec_mobile.php:347
+#: usr/local/www/vpn_ipsec_phase1.php:554
+#: usr/local/www/vpn_ipsec_phase2.php:540
+#: usr/local/www/vpn_ipsec_settings.php:205
+msgid "Mobile clients"
+msgstr "Mobil istemciler"
+
+#: usr/local/www/vpn_ipsec.php:240 usr/local/www/vpn_ipsec_keys.php:102
+#: usr/local/www/vpn_ipsec_phase1.php:555
+#: usr/local/www/vpn_ipsec_phase2.php:541
+msgid "Pre-Shared Keys"
+msgstr "Ön Paylaşımlı Anahtarlar"
+
+#: usr/local/www/vpn_ipsec.php:241 usr/local/www/vpn_ipsec_keys.php:103
+#: usr/local/www/vpn_ipsec_mobile.php:349
+#: usr/local/www/vpn_ipsec_phase1.php:556
+#: usr/local/www/vpn_ipsec_phase2.php:542
+#: usr/local/www/vpn_ipsec_settings.php:207
+msgid "Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:258
+msgid "Enable IPsec"
+msgstr "IPsec'i EtkinleÅŸtir"
+
+#: usr/local/www/vpn_ipsec.php:274
+msgid "IKE"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:275
+msgid "Remote Gateway"
+msgstr "Uzak ağ geçidi"
+
+#: usr/local/www/vpn_ipsec.php:277
+msgid "P1 Protocol"
+msgstr "P1 Protokol"
+
+#: usr/local/www/vpn_ipsec.php:278
+msgid "P1 Transforms"
+msgstr "P1 Dönüştürme"
+
+#: usr/local/www/vpn_ipsec.php:279
+msgid "P1 Description"
+msgstr "P1 Açıklama"
+
+#: usr/local/www/vpn_ipsec.php:361 usr/local/www/vpn_ipsec.php:515
+#: usr/local/www/vpn_ipsec_phase2.php:746
+msgid "auto"
+msgstr "otomatik"
+
+#: usr/local/www/vpn_ipsec.php:384 usr/local/www/vpn_ipsec.php:539
+msgid "move selected entries before this"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:389
+msgid "edit phase1 entry"
+msgstr "Aşama 1 girdisini düzenle"
+
+#: usr/local/www/vpn_ipsec.php:396
+msgid "delete phase1 entry"
+msgstr "aÅŸama 1 girdisini sil"
+
+#: usr/local/www/vpn_ipsec.php:398
+msgid ""
+"Do you really want to delete this phase1 and all associated phase2 entries?"
+msgstr ""
+"AÅŸama 1 ve iliÅŸkilendirilmiÅŸ AÅŸama 2 girdilerini silmek istediÄŸinize emin "
+"misiniz? "
+
+#: usr/local/www/vpn_ipsec.php:405
+msgid "copy phase1 entry"
+msgstr "aÅŸama 1 girdisini kopyala"
+
+#: usr/local/www/vpn_ipsec.php:437
+#, php-format
+msgid "Show %s Phase-2 entries"
+msgstr "%s aşama 2 girdisi göster"
+
+#: usr/local/www/vpn_ipsec.php:445
+msgid "Local Subnet"
+msgstr "Yerel AltaÄŸ"
+
+#: usr/local/www/vpn_ipsec.php:446
+msgid "Remote Subnet"
+msgstr "Uzak AltaÄŸ"
+
+#: usr/local/www/vpn_ipsec.php:447
+msgid "P2 Protocol"
+msgstr "P2 Protokol"
+
+#: usr/local/www/vpn_ipsec.php:448
+msgid "P2 Transforms"
+msgstr "P2 Dönüştürmeler"
+
+#: usr/local/www/vpn_ipsec.php:449
+msgid "P2 Auth Methods"
+msgstr "P2 Kimlik Doğrulama Yöntemleri"
+
+#: usr/local/www/vpn_ipsec.php:542
+msgid "edit phase2 entry"
+msgstr "aşama 2 girdisi düzenle"
+
+#: usr/local/www/vpn_ipsec.php:545
+msgid "delete phase2 entry"
+msgstr "aÅŸama 2 girdisini sil"
+
+#: usr/local/www/vpn_ipsec.php:547
+msgid "Do you really want to delete this phase2 entry?"
+msgstr "Bu aÅŸama 2 girdisini silmek istediÄŸinizden emin misiniz?"
+
+#: usr/local/www/vpn_ipsec.php:549
+msgid "add a new Phase 2 based on this one"
+msgstr "bunu temel alarak yeni bir AÅŸama 2 ekle"
+
+#: usr/local/www/vpn_ipsec.php:563 usr/local/www/vpn_ipsec.php:567
+msgid "move selected phase2 entries to end"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:572
+msgid "add phase2 entry"
+msgstr "aÅŸama 2 girdisi ekle"
+
+#: usr/local/www/vpn_ipsec.php:577 usr/local/www/vpn_ipsec.php:581
+msgid "delete selected phase2 entries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:581
+msgid "Do you really want to delete the selected phase2 entries?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:604 usr/local/www/vpn_ipsec.php:608
+msgid "move selected phase1 entries to end"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:615
+msgid "add new phase1"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:624 usr/local/www/vpn_ipsec.php:628
+msgid "delete selected phase1 entries"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:628
+msgid "Do you really want to delete the selected phase1 entries?"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:644
+msgid "You can check your IPsec status at"
+msgstr "IPsec durumunu kontrol edebilirsiniz"
+
+#: usr/local/www/vpn_ipsec.php:644
+msgid "Status:IPsec"
+msgstr "Durum: IPsec"
+
+#: usr/local/www/vpn_ipsec.php:645
+msgid "IPsec Debug Mode can be enabled at"
+msgstr "IPsec Hata Ayıklama Kipini açmak için"
+
+#: usr/local/www/vpn_ipsec.php:645 usr/local/www/vpn_ipsec.php:646
+msgid "VPN:IPsec:Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec.php:646
+msgid "IPsec can be set to prefer older SAs at"
+msgstr "IPsec'in daha eski SAları tercih etmesi için"
+
+#: usr/local/www/vpn_ipsec_keys.php:71
+msgid "Deleted IPsec Pre-Shared Key"
+msgstr "Silinen IPsec Ön Paylaşımlı Anahtar"
+
+#: usr/local/www/vpn_ipsec_keys.php:78
+msgid "VPN: IPsec: Keys"
+msgstr "VPN: IPsec: Anahtarlar"
+
+#: usr/local/www/vpn_ipsec_keys.php:112
+#: usr/local/www/vpn_ipsec_keys_edit.php:72
+#: usr/local/www/vpn_ipsec_keys_edit.php:134
+msgid "Identifier"
+msgstr "Tanımlayıcı"
+
+#: usr/local/www/vpn_ipsec_keys.php:118 usr/local/www/vpn_ipsec_keys.php:166
+msgid "add key"
+msgstr "anahtar ekle"
+
+#: usr/local/www/vpn_ipsec_keys.php:128
+msgid "ANY USER"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:142
+msgid "edit"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys.php:156
+msgid "edit key"
+msgstr "anahtarı düzenle"
+
+#: usr/local/www/vpn_ipsec_keys.php:157
+msgid "Do you really want to delete this Pre-Shared Key?"
+msgstr "Bu Ön Paylaşımlı anahtarı silmek istediğinize emin misiniz?"
+
+#: usr/local/www/vpn_ipsec_keys.php:157
+msgid "delete key"
+msgstr "anahtarı sil"
+
+#: usr/local/www/vpn_ipsec_keys.php:182
+#: usr/local/www/vpn_ipsec_keys_edit.php:163
+msgid "PSK for any user can be set by using an identifier of any/ANY"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:77
+msgid "The identifier contains invalid characters."
+msgstr "Tanımlayıcı geçersiz karakterler içeriyor."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:80
+msgid "A user with this name already exists. Add the key to the user instead."
+msgstr "Bu isimde bir kullanıcı sistemde mevcut. Anahtarı kullanıcıya ekleyin."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:84
+#: usr/local/www/vpn_ipsec_phase1.php:193
+msgid "Pre-Shared Key contains invalid characters."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:90
+msgid "Another entry with the same identifier already exists."
+msgstr "Aynı tanımlayıcıyla başka bir girdi sistemde mevcut."
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:107
+msgid "Edited"
+msgstr "Düzenlendi"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:110
+msgid "Added"
+msgstr "Eklendi"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:121
+msgid "VPN: IPsec: Edit Pre-Shared Key"
+msgstr "VPN: IPsec: Ön Paylaşımlı Anahtar Düzenle"
+
+#: usr/local/www/vpn_ipsec_keys_edit.php:138
+msgid ""
+"This can be either an IP address, fully qualified domain name or an e-mail "
+"address"
+msgstr "IP adresi, (tam) domain adı ya da e-posta adresi olabilir"
+
+#: usr/local/www/vpn_ipsec_mobile.php:133
+msgid "User Authentication Source"
+msgstr "Kullanıcı Kimlik Doğrulama Kaynağı"
+
+#: usr/local/www/vpn_ipsec_mobile.php:133
+msgid "Group Authentication Source"
+msgstr "Grup Kimlik Doğrulama Kaynağı"
+
+#: usr/local/www/vpn_ipsec_mobile.php:139
+msgid ""
+"A valid IP address for 'Virtual Address Pool Network' must be specified."
+msgstr "'Sanal IP Adres Havuzu' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:143
+msgid "A valid value for 'DNS Default Domain' must be specified."
+msgstr "'DNS Varsayılan Alan' için geçerli bir değer belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_mobile.php:150
+msgid "A valid split DNS domain list must be specified."
+msgstr "Geçerli bölünmüş DNS domain (alan adı) listesi belirtilmeli."
+
+#: usr/local/www/vpn_ipsec_mobile.php:160
+msgid ""
+"At least one DNS server must be specified to enable the DNS Server option."
+msgstr ""
+"DNS Sunucu seçeneğini etkinleştirmek için en az bir DNS sunucu "
+"tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:162
+msgid "A valid IP address for 'DNS Server #1' must be specified."
+msgstr "'DNS Sunucu #1' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:164
+msgid "A valid IP address for 'DNS Server #2' must be specified."
+msgstr "'DNS Sunucu #2' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:166
+msgid "A valid IP address for 'DNS Server #3' must be specified."
+msgstr "'DNS Sunucu #3' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:168
+msgid "A valid IP address for 'DNS Server #4' must be specified."
+msgstr "'DNS Sunucu #4' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:173
+msgid ""
+"At least one WINS server must be specified to enable the DNS Server option."
+msgstr ""
+"DNS Sunucu seçeneğini etkinleştirmek için en az bir WINS Sunucu "
+"tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:175
+msgid "A valid IP address for 'WINS Server #1' must be specified."
+msgstr "'WINS Sunucu #1' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:177
+msgid "A valid IP address for 'WINS Server #2' must be specified."
+msgstr "'WINS Sunucu #2' için geçerli bir IP adresi tanımlanmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:182
+msgid "A valid value for 'Login Banner' must be specified."
+msgstr "'Oturum Başlığı' için geçerli bir değer belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_mobile.php:241
+msgid "Mobile"
+msgstr "Mobil"
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid ""
+"Support for IPsec Mobile clients is enabled but a Phase1 definition was not "
+"found"
+msgstr ""
+"Ipsec Mobil istemci desteği aktif durumda fakat Aşama 1 tanımı bulunamadı"
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "Please click Create to define one."
+msgstr "Yeni bir tane tanımlamak için Oluştur'a tıklayınız."
+
+#: usr/local/www/vpn_ipsec_mobile.php:336
+msgid "Create Phase1"
+msgstr "AÅŸama 1 OluÅŸtur"
+
+#: usr/local/www/vpn_ipsec_mobile.php:359
+msgid "IKE Extensions"
+msgstr "IKE Uzantıları"
+
+#: usr/local/www/vpn_ipsec_mobile.php:368
+msgid "Enable IPsec Mobile Client Support"
+msgstr "IPsec Mobil Ä°stemci DesteÄŸini EtkinleÅŸtir"
+
+#: usr/local/www/vpn_ipsec_mobile.php:379
+msgid "Extended Authentication (Xauth)"
+msgstr "GeniÅŸletilmiÅŸ Kimlik DoÄŸrulama (XAuth)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:383
+msgid "User Authentication"
+msgstr "Kullanıcı Kimlik Doğrulama"
+
+#: usr/local/www/vpn_ipsec_mobile.php:401
+msgid "Group Authentication"
+msgstr "Grup Kimlik DoÄŸrulama"
+
+#: usr/local/www/vpn_ipsec_mobile.php:406
+msgid "system"
+msgstr "sistem"
+
+#: usr/local/www/vpn_ipsec_mobile.php:415
+msgid "Client Configuration (mode-cfg)"
+msgstr "İstemci Yapılandırma (mode-cfg)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:419
+msgid "Virtual Address Pool"
+msgstr "Sanal Adres Havuzu"
+
+#: usr/local/www/vpn_ipsec_mobile.php:428
+msgid "Provide a virtual IP address to clients"
+msgstr "Ä°stemcilere sanal IP saÄŸla"
+
+#: usr/local/www/vpn_ipsec_mobile.php:451
+msgid "Network List"
+msgstr "AÄŸ Listesi"
+
+#: usr/local/www/vpn_ipsec_mobile.php:460
+msgid "Provide a list of accessible networks to clients"
+msgstr "İstemcilere erişilebilir ağların listesini sağla"
+
+#: usr/local/www/vpn_ipsec_mobile.php:467
+msgid "Save Xauth Password"
+msgstr "Xauth Parolasını Kaydet"
+
+#: usr/local/www/vpn_ipsec_mobile.php:476
+msgid "Allow clients to save Xauth passwords (Cisco VPN client only)."
+msgstr ""
+"İstemcilerin Xauth parolalarını kaydetmelerine izin ver (sadece Cisco VPN "
+"istemci)."
+
+#: usr/local/www/vpn_ipsec_mobile.php:477
+msgid ""
+"NOTE: With iPhone clients, this does not work when deployed via the iPhone "
+"configuration utility, only by manual entry."
+msgstr ""
+"NOT: iPhone istemciler için dağıtılabilir bir yapılandırma aracı yoktur, "
+"sadece manuel giriş yapılmalıdır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:484
+#: usr/local/www/vpn_openvpn_csc.php:507
+#: usr/local/www/vpn_openvpn_server.php:1510
+msgid "DNS Default Domain"
+msgstr "DNS Varsayılan Alan"
+
+#: usr/local/www/vpn_ipsec_mobile.php:493
+#: usr/local/www/vpn_openvpn_csc.php:517
+#: usr/local/www/vpn_openvpn_server.php:1520
+msgid "Provide a default domain name to clients"
+msgstr "İstemcilere varsayılan alan adını sağla"
+
+#: usr/local/www/vpn_ipsec_mobile.php:507
+msgid "Split DNS"
+msgstr "Bölünmüş DNS"
+
+#: usr/local/www/vpn_ipsec_mobile.php:516
+msgid ""
+"Provide a list of split DNS domain names to clients. Enter a comma separated "
+"list."
+msgstr ""
+"DNS domain adı ve istemcilerini bölerek liste oluştur. Virgülle ayrılmış bir "
+"liste girin."
+
+#: usr/local/www/vpn_ipsec_mobile.php:517
+msgid ""
+"NOTE: If left blank, and a default domain is set, it will be used for this "
+"value."
+msgstr ""
+"NOT: Eğer boş bırakırsanız, varsayılan domain ayarlı ise, bu değer "
+"kullanılır."
+
+#: usr/local/www/vpn_ipsec_mobile.php:531
+#: usr/local/www/vpn_openvpn_csc.php:532
+#: usr/local/www/vpn_openvpn_server.php:1535
+msgid "DNS Servers"
+msgstr "DNS Sunucular"
+
+#: usr/local/www/vpn_ipsec_mobile.php:540
+#: usr/local/www/vpn_openvpn_csc.php:542
+#: usr/local/www/vpn_openvpn_server.php:1545
+msgid "Provide a DNS server list to clients"
+msgstr "Ä°stemcilere DNS sunucu listesi saÄŸla"
+
+#: usr/local/www/vpn_ipsec_mobile.php:573
+#: usr/local/www/vpn_openvpn_csc.php:680
+#: usr/local/www/vpn_openvpn_server.php:1703
+msgid "WINS Servers"
+msgstr "WINS Sunucular"
+
+#: usr/local/www/vpn_ipsec_mobile.php:582
+#: usr/local/www/vpn_openvpn_csc.php:690
+#: usr/local/www/vpn_openvpn_server.php:1713
+msgid "Provide a WINS server list to clients"
+msgstr "Ä°stemcilere WINS sunucu listesi saÄŸla"
+
+#: usr/local/www/vpn_ipsec_mobile.php:603
+msgid "Phase2 PFS Group"
+msgstr "AÅŸama 2 PFS Grubu"
+
+#: usr/local/www/vpn_ipsec_mobile.php:612
+msgid ""
+"Provide the Phase2 PFS group to clients ( overrides all mobile phase2 "
+"settings )"
+msgstr ""
+"İstemcilere Aşama 2 grubu sağla (tüm mobil aşama 2 ayarlarının üstüne yazar)"
+
+#: usr/local/www/vpn_ipsec_mobile.php:633
+msgid "Login Banner"
+msgstr "Oturum Açma Başlığı"
+
+#: usr/local/www/vpn_ipsec_mobile.php:642
+msgid "Provide a login banner to clients"
+msgstr "İstemcilere oturum açma başlığı sağla"
+
+#: usr/local/www/vpn_ipsec_phase1.php:165
+msgid "EAP-TLS can only be used with IKEv2 type VPNs."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:186
+#: usr/local/www/vpn_ipsec_phase1.php:649
+msgid "Remote gateway"
+msgstr "Uzak ağ geçidi"
+
+#: usr/local/www/vpn_ipsec_phase1.php:197
+msgid "The P1 lifetime must be an integer."
+msgstr "P1 yaşam süresi sayı değeri olmalıdır."
+
+#: usr/local/www/vpn_ipsec_phase1.php:201
+msgid "A valid remote gateway address or host name must be specified."
+msgstr "Geçerli bir uzak ağ geçidi ya da host adı belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase1.php:203
+msgid ""
+"A valid remote gateway IPv4 address must be specified or you need to change "
+"protocol to IPv6"
+msgstr ""
+"Geçerli bir uzak ağ geçidi IPv4 ağ adresi belirtilmeli yada Kipi IPv6'ya "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:205
+msgid ""
+"A valid remote gateway IPv6 address must be specified or you need to change "
+"protocol to IPv4"
+msgstr ""
+"Geçerli bir uzak ağ geçidi IPv6 ağ adresi belirtilmeli yada Kipi IPv4'e "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:214
+#, php-format
+msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"."
+msgstr "Uzak ağ geçidi \"%1$s\" aşama 1 \"%2$s\" tarafından kullanılıyor."
+
+#: usr/local/www/vpn_ipsec_phase1.php:225
+msgid "There is a Phase 2 using IPv6, you cannot use IPv4."
+msgstr "2. Aşama IPv6 kullanmaktadır, IPv4 kullanamazsınız."
+
+#: usr/local/www/vpn_ipsec_phase1.php:229
+msgid "There is a Phase 2 using IPv4, you cannot use IPv6."
+msgstr "2. Aşama IPv4 kullanmaktadır, IPv6 kullanamazsınız."
+
+#: usr/local/www/vpn_ipsec_phase1.php:242
+msgid "Please enter an address for 'My Identifier'"
+msgstr "Lütfen 'Tanımlayıcım' için bir adres giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:245
+msgid "Please enter a keyid tag for 'My Identifier'"
+msgstr "Lütfen 'Tanımlayıcım' için bir anahtar kimliği başlığı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:248
+msgid "Please enter a fully qualified domain name for 'My Identifier'"
+msgstr "Lütfen 'Tanmlayıcım' için tam bir alan (domain) adı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:251
+msgid "Please enter a user and fully qualified domain name for 'My Identifier'"
+msgstr ""
+"Lütfen 'Tanmlayıcım' için bir kullanıcı ve tam bir alan (domain) adı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:254
+msgid "Please enter a dynamic domain name for 'My Identifier'"
+msgstr "Lütfen 'Tanmlayıcım' için dinamik bir alan (domain) adı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:257
+msgid "A valid IP address for 'My identifier' must be specified."
+msgstr "Lütfen 'Tanmlayıcım' için geçerli bir IP adresi giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:260
+msgid "A valid domain name for 'My identifier' must be specified."
+msgstr "Lütfen 'Tanmlayıcım' için geçerli bir domain adı giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:264
+msgid "A valid FQDN for 'My identifier' must be specified."
+msgstr "Lütfen 'Tanmlayıcım' için geçerli bir FQDN adresi giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:269
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'My identifier' must "
+"be specified."
+msgstr ""
+"Lütfen 'Tanımlayıcım' için geçerli bir tam alan adı (FQDN) giriniz. Örn: "
+"kullanici@guncel.adres.com"
+
+#: usr/local/www/vpn_ipsec_phase1.php:274
+msgid "A valid Dynamic DNS address for 'My identifier' must be specified."
+msgstr "Lütfen 'Tanımlayıcım' için geçerli bir Dinamik DNS adresi giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:284
+msgid "Please enter an address for 'Peer Identifier'"
+msgstr "'Eş Tanımlayıcı' için bir adres giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:287
+msgid "Please enter a keyid tag for 'Peer Identifier'"
+msgstr "'Eş Tanımlayıcı' için bir anahtar kimliği takısı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:290
+msgid "Please enter a fully qualified domain name for 'Peer Identifier'"
+msgstr "'Eş Tanımlayıcı' için tam bir alan (domain) adı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:293
+msgid ""
+"Please enter a user and fully qualified domain name for 'Peer Identifier'"
+msgstr ""
+"'Eş Tanımlayıcı' için bir kullanıcı ve tam bir alan (domain) adı giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:296
+msgid "A valid IP address for 'Peer identifier' must be specified."
+msgstr "'Eş Tanımlayıcı' için geçerli bir IP giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:299
+msgid "A valid domain name for 'Peer identifier' must be specified."
+msgstr "'Eş Tanımlayıcı' için geçerli bir alan adı giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:303
+msgid "A valid FQDN for 'Peer identifier' must be specified."
+msgstr "Lütfen 'Eş tanımlayıcı' için geçerli bir FQDN giriniz."
+
+#: usr/local/www/vpn_ipsec_phase1.php:308
+msgid ""
+"A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' "
+"must be specified."
+msgstr ""
+"Lütfen 'Eş tanımlayıcı' için geçerli bir tam alan adı (FQDN) giriniz. Örn: "
+"kullanici@guncel.adres.com"
+
+#: usr/local/www/vpn_ipsec_phase1.php:314
+msgid "A numeric value must be specified for DPD delay."
+msgstr "DPD gecikmesi değeri sayı olmalıdır."
+
+#: usr/local/www/vpn_ipsec_phase1.php:317
+msgid "A numeric value must be specified for DPD retries."
+msgstr "DPD denemeleri sayı olmalıdır."
+
+#: usr/local/www/vpn_ipsec_phase1.php:321
+msgid "Valid arguments for IKE type is v1 or v2 or auto"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:398
+#: usr/local/www/vpn_ipsec_phase1.php:400
+msgid "Edit Phase 1"
+msgstr "Aşama 1 Düzenle"
+
+#: usr/local/www/vpn_ipsec_phase1.php:566
+#: usr/local/www/vpn_openvpn_client.php:462
+#: usr/local/www/vpn_openvpn_csc.php:333
+#: usr/local/www/vpn_openvpn_server.php:760
+msgid "General information"
+msgstr "Genel Bilgi"
+
+#: usr/local/www/vpn_ipsec_phase1.php:572
+msgid "Disable this phase1 entry"
+msgstr "Bu aşama 1 girdisini devre dışı bırak"
+
+#: usr/local/www/vpn_ipsec_phase1.php:574
+msgid ""
+"Set this option to disable this phase1 without removing it from the list"
+msgstr "Bu seçenekle aşama 1'i silmeden devre dışı bırakabilirsiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:580
+msgid "Key Exchange version"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:591
+msgid ""
+"Select the Internet Key Exchange protocol version to be used, IKEv1 or IKEv2"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:595
+msgid "Internet Protocol"
+msgstr "İnternet Protokolü"
+
+#: usr/local/www/vpn_ipsec_phase1.php:606
+msgid "Select the Internet Protocol family from this dropdown"
+msgstr "Açılır menüden İnternet Protokol cinsini seçiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:642
+msgid "Select the interface for the local endpoint of this phase1 entry"
+msgstr "Bu aşama 1 girdisinin yerel ucu için bir arabirim seçiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:653
+msgid "Enter the public IP address or host name of the remote gateway"
+msgstr "Uzak ağ geçidinin dış IP adresini veya alan adını giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:675
+msgid "Phase 1 proposal (Authentication)"
+msgstr "AÅŸama 1 teklif (Kimlik doÄŸrulama)"
+
+#: usr/local/www/vpn_ipsec_phase1.php:679
+#: usr/local/www/vpn_openvpn_client.php:604
+msgid "Authentication method"
+msgstr "Kimlik doğrulama yöntemi"
+
+#: usr/local/www/vpn_ipsec_phase1.php:694
+#: usr/local/www/vpn_ipsec_phase1.php:831
+#: usr/local/www/vpn_ipsec_phase1.php:847
+msgid "Must match the setting chosen on the remote side"
+msgstr "Uzak uçta seçilen ayarla eşleşmelidir"
+
+#: usr/local/www/vpn_ipsec_phase1.php:699
+msgid "Negotiation mode"
+msgstr "UzlaÅŸma kipi"
+
+#: usr/local/www/vpn_ipsec_phase1.php:710
+msgid "Aggressive is more flexible, but less secure"
+msgstr "'Saldırgan' dah esnek ama daha az güvenlidir"
+
+#: usr/local/www/vpn_ipsec_phase1.php:714
+msgid "My identifier"
+msgstr "Tanımlayıcım"
+
+#: usr/local/www/vpn_ipsec_phase1.php:727
+msgid "Peer identifier"
+msgstr "Eş tanımlayıcı"
+
+#: usr/local/www/vpn_ipsec_phase1.php:742
+msgid ""
+"NOTE: This is known as the \"group\" setting on some VPN client "
+"implementations"
+msgstr "NOT: Bazı VPN istemcilerde \"grup\" olarak bilinir"
+
+#: usr/local/www/vpn_ipsec_phase1.php:753
+msgid "Input your Pre-Shared Key string"
+msgstr "Ön Paylaşımlı Anahtar dizilimini giriniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:758
+msgid "My Certificate"
+msgstr "Sertifikam"
+
+#: usr/local/www/vpn_ipsec_phase1.php:772
+msgid "Select a certificate previously configured in the Certificate Manager"
+msgstr ""
+"Daha önce Sertifika Yöneticisinde yapılandırılmış bir sertifika seçiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:777
+msgid "My Certificate Authority"
+msgstr "Sertifika Sunucum"
+
+#: usr/local/www/vpn_ipsec_phase1.php:791
+msgid ""
+"Select a certificate authority previously configured in the Certificate "
+"Manager"
+msgstr ""
+"Daha önce Sertifika Yöneticisinde yapılandırılmış bir sertifika otoritesi "
+"seçiniz"
+
+#: usr/local/www/vpn_ipsec_phase1.php:797
+msgid "Phase 1 proposal (Algorithms)"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:801
+#: usr/local/www/vpn_openvpn_client.php:828
+#: usr/local/www/vpn_openvpn_server.php:1068
+msgid "Encryption algorithm"
+msgstr "Şifreleme algoritması"
+
+#: usr/local/www/vpn_ipsec_phase1.php:820
+msgid "Hash algorithm"
+msgstr "Değer üretme algoritması"
+
+#: usr/local/www/vpn_ipsec_phase1.php:836
+msgid "DH key group"
+msgstr "DH anahtar grup"
+
+#: usr/local/www/vpn_ipsec_phase1.php:865
+msgid "Disable Rekey"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:868
+msgid "Whether a connection should be renegotiated when it is about to expire."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:872
+msgid "Disable Reauth"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:875
+msgid ""
+"Whether rekeying of an IKE_SA should also reauthenticate the peer. In IKEv1, "
+"reauthentication is always done."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase1.php:879
+msgid "NAT Traversal"
+msgstr "NAT Çözümleme"
+
+#: usr/local/www/vpn_ipsec_phase1.php:883
+msgid "Force"
+msgstr "Zorla"
+
+#: usr/local/www/vpn_ipsec_phase1.php:887
+msgid ""
+"Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in "
+"UDP packets) if needed, which can help with clients that are behind "
+"restrictive firewalls"
+msgstr ""
+"Bu seçeneği, gerekiyorsa kısıtlayıcılığı yüksek güvenlik duvarları arkasında "
+"bulunan istemcilere yardımı olabilecek NAT-T (ESPnin UDP paketleriyle "
+"sarmalanması) kullanımını açmak için kullanın"
+
+#: usr/local/www/vpn_ipsec_phase1.php:893
+msgid "Dead Peer Detection"
+msgstr "Ölü Eş Keşfi"
+
+#: usr/local/www/vpn_ipsec_phase1.php:896
+msgid "Enable DPD"
+msgstr "DPD'yi EtkinleÅŸtir"
+
+#: usr/local/www/vpn_ipsec_phase1.php:902
+msgid "Delay between requesting peer acknowledgement"
+msgstr "Eş onayı istemleri arasındaki bekleme"
+
+#: usr/local/www/vpn_ipsec_phase1.php:906
+msgid "retries"
+msgstr "deneme"
+
+#: usr/local/www/vpn_ipsec_phase1.php:908
+msgid "Number of consecutive failures allowed before disconnect"
+msgstr "Bağlantı koparılmadan önce ardışık kaç başarısızlığa izin veriliyor"
+
+#: usr/local/www/vpn_ipsec_phase2.php:132
+msgid "A valid ikeid must be specified."
+msgstr "Geçerli bir ikeid belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+msgid "Local network type"
+msgstr "Yerel ağ türü"
+
+#: usr/local/www/vpn_ipsec_phase2.php:136
+msgid "Unique Identifier"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:139
+msgid "Remote network type"
+msgstr "Uzak ağ türü"
+
+#: usr/local/www/vpn_ipsec_phase2.php:149
+msgid "A valid local network bit count must be specified."
+msgstr "Geçerli bir yerel ağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:152
+msgid "A valid local network IP address must be specified."
+msgstr "Geçerli bir yerel ağ IP adresi belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:154
+msgid ""
+"A valid local network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr ""
+"Geçerli bir yerel IPv4 ağ adresi belirtilmeli yada Kipi IPv6'ya "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase2.php:156
+msgid ""
+"A valid local network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr ""
+"Geçerli bir yerel IPv6 ağ adresi belirtilmeli yada Kipi IPv4'e "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase2.php:166
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "Invalid Local Network."
+msgstr "Geçersiz Yerel Ağ."
+
+#: usr/local/www/vpn_ipsec_phase2.php:166
+#: usr/local/www/vpn_ipsec_phase2.php:192
+msgid "has no subnet."
+msgstr "altaÄŸ deÄŸil."
+
+#: usr/local/www/vpn_ipsec_phase2.php:173
+msgid "A valid NAT local network bit count must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:175
+msgid ""
+"You cannot configure a network type address for NAT while only an address "
+"type is selected for local source."
+msgstr ""
+"Sadece yerel kaynaktan adres türü seçildiyse NAT için ağ türü adresi "
+"yapılandıramazsınız."
+
+#: usr/local/www/vpn_ipsec_phase2.php:178
+msgid "A valid NAT local network IP address must be specified."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:180
+msgid ""
+"A valid NAT local network IPv4 address must be specified or you need to "
+"change Mode to IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:182
+msgid ""
+"A valid NAT local network IPv6 address must be specified or you need to "
+"change Mode to IPv4"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:199
+msgid "A valid remote network bit count must be specified."
+msgstr "Geçerli bir uzak ağ bit sayısı belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:202
+msgid "A valid remote network IP address must be specified."
+msgstr "Geçerli bir uzak ağ IP adresi belirtilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:204
+msgid ""
+"A valid remote network IPv4 address must be specified or you need to change "
+"Mode to IPv6"
+msgstr ""
+"Geçerli bir uzak IPv4 ağ adresi belirtilmeli yada Kipi IPv6'ya "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase2.php:206
+msgid ""
+"A valid remote network IPv6 address must be specified or you need to change "
+"Mode to IPv4"
+msgstr ""
+"Geçerli bir uzak IPv6 ağ adresi belirtilmeli yada Kipi IPv4'e "
+"deÄŸiÅŸtirmelisiniz"
+
+#: usr/local/www/vpn_ipsec_phase2.php:224
+msgid "Phase2 with this Local Network is already defined for mobile clients."
+msgstr "Mobil istemciler için bu Yerel Ağda Aşama 2 zaten tanımlı."
+
+#: usr/local/www/vpn_ipsec_phase2.php:249
+msgid ""
+"Phase2 with this Local/Remote networks combination is already defined for "
+"this Phase1."
+msgstr ""
+"Bu Yerel/Uzak ağ kombinasyonları için bu Aşama 1'in 2nci Aşaması zaten "
+"tanımlı."
+
+#: usr/local/www/vpn_ipsec_phase2.php:280
+#: usr/local/www/vpn_ipsec_phase2.php:285
+msgid ""
+"The local and remote networks of a phase 2 entry cannot overlap the outside "
+"of the tunnel (interface and remote gateway) configured in its phase 1."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:299
+msgid "At least one encryption algorithm must be selected."
+msgstr "En az bir şifreleme algoritması seçilmelidir."
+
+#: usr/local/www/vpn_ipsec_phase2.php:304
+msgid "At least one hashing algorithm needs to be selected."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_phase2.php:313
+msgid "The P2 lifetime must be an integer."
+msgstr "P2 yaşam süresi değeri tamsayı olmalıdır."
+
+#: usr/local/www/vpn_ipsec_phase2.php:360
+#: usr/local/www/vpn_ipsec_phase2.php:362
+msgid "Edit Phase 2"
+msgstr "Aşama 2 Düzenle"
+
+#: usr/local/www/vpn_ipsec_phase2.php:555
+msgid "Disable this phase2 entry"
+msgstr "Bu Aşama 2 girdisini devre dışı bırak"
+
+#: usr/local/www/vpn_ipsec_phase2.php:557
+msgid ""
+"Set this option to disable this phase2 entry without removing it from the "
+"list"
+msgstr ""
+"Bu seçeneği etkinleştirerek aşama 2 girdisini lsiteden silmeden devre dışı "
+"bırakabilirsiniz"
+
+#: usr/local/www/vpn_ipsec_phase2.php:578
+msgid "Local Network"
+msgstr "Yerel AÄŸ"
+
+#: usr/local/www/vpn_ipsec_phase2.php:592
+#: usr/local/www/vpn_ipsec_phase2.php:627
+#, php-format
+msgid "%s subnet"
+msgstr "%s altaÄŸ"
+
+#: usr/local/www/vpn_ipsec_phase2.php:614
+msgid ""
+"In case you need NAT/BINAT on this network specify the address to be "
+"translated"
+msgstr ""
+"Bu durumda ağ üzerinde NAT/BINAT çevrilecek adresini belirtmeniz gerekir"
+
+#: usr/local/www/vpn_ipsec_phase2.php:655
+msgid "Remote Network"
+msgstr "Uzak AÄŸ"
+
+#: usr/local/www/vpn_ipsec_phase2.php:706
+msgid "Phase 2 proposal (SA/Key Exchange)"
+msgstr "AÅŸama 2 teklif (SA/Anahtar DeÄŸiÅŸimi)"
+
+#: usr/local/www/vpn_ipsec_phase2.php:721
+msgid "ESP is encryption, AH is authentication only"
+msgstr "ESP şifreleme, AH sadece kimlik doğrulama içindir"
+
+#: usr/local/www/vpn_ipsec_phase2.php:726
+msgid "Encryption algorithms"
+msgstr "Şifreleme algoritmaları"
+
+#: usr/local/www/vpn_ipsec_phase2.php:768
+msgid ""
+"Hint: use 3DES for best compatibility or if you have a hardware crypto "
+"accelerator card. Blowfish is usually the fastest in software encryption"
+msgstr ""
+"İpucu: En yüksek uyumluluk için ya da donanım şifreleme hızlandırıcı "
+"kartınız varsa 3DES kullanın. Yazılım şifreleme söz konusu olduğunda "
+"Blowfish en hızlısıdır"
+
+#: usr/local/www/vpn_ipsec_phase2.php:774
+msgid "Hash algorithms"
+msgstr "Değer üretme algoritmaları"
+
+#: usr/local/www/vpn_ipsec_phase2.php:784
+msgid "PFS key group"
+msgstr "PFS anahtar grubu"
+
+#: usr/local/www/vpn_ipsec_phase2.php:802
+msgid "Set globally in mobile client options"
+msgstr "Mobil istemci seçeneklerinde genel olarak yapılandırılır"
+
+#: usr/local/www/vpn_ipsec_phase2.php:820
+msgid "Automatically ping host"
+msgstr "Hostu otomatik pingle"
+
+#: usr/local/www/vpn_ipsec_settings.php:217
+msgid "IPsec Advanced Settings"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:220
+msgid "Security Associations"
+msgstr "Güvenlik İlişkilendirmeleri"
+
+#: usr/local/www/vpn_ipsec_settings.php:223
+msgid "Prefer older IPsec SAs"
+msgstr "Daha eski IPsec SA'larını seç"
+
+#: usr/local/www/vpn_ipsec_settings.php:225
+msgid ""
+"By default, if several SAs match, the newest one is preferred if it's at "
+"least 30 seconds old. Select this option to always prefer old SAs over new "
+"ones."
+msgstr ""
+"Varsayılan olarak birden fazla SA eşleştiği taktirde, en az 30 saniyedir "
+"hayatta olan en yenisi tercih edilir. Daha eski olanları yenilere tercih "
+"etmek için bu seçeneği açın."
+
+#: usr/local/www/vpn_ipsec_settings.php:231
+msgid "IPsec Debug"
+msgstr "IPsec Hata Ayıklama"
+
+#: usr/local/www/vpn_ipsec_settings.php:233
+msgid "Start IPsec in debug mode based on sections selected"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:254
+msgid ""
+"Launches IPsec in debug mode so that more verbose logs will be generated to "
+"aid in troubleshooting."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:259
+msgid "IPsec Reload on Failover"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:262
+msgid "Force IPsec Reload on Failover"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:264
+msgid ""
+"In some circumstances using a gateway group as the interface for an IPsec "
+"tunnel does not function properly, and IPsec must be forcefully reloaded "
+"when a failover occurs. Because this will disrupt all IPsec tunnels, this "
+"behavior is disabled by default. Check this box to force IPsec to fully "
+"reload on failover."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:271
+msgid "Unencrypted payloads in IKEv1 Main Mode"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:274
+msgid "Accept unencrypted ID and HASH payloads in IKEv1 Main Mode"
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:276
+msgid ""
+"Some implementations send the third Main Mode message unencrypted, probably "
+"to find the PSKs for the specified ID for authentication.This is very "
+"similar to Aggressive Mode, and has the same security implications: A "
+"passive attacker can sniff the negotiated Identity, and start brute forcing "
+"the PSK using the HASH payload. It is recommended to keep this option to no, "
+"unless you know exactly what the implications are and require compatibility "
+"to such devices (for example, some SonicWall boxes)."
+msgstr ""
+
+#: usr/local/www/vpn_ipsec_settings.php:283
+msgid "Maximum MSS"
+msgstr "Maksimum MSS"
+
+#: usr/local/www/vpn_ipsec_settings.php:286
+msgid "Enable MSS clamping on VPN traffic"
+msgstr "VPN trafikte MSS sıkma özelliğini aç"
+
+#: usr/local/www/vpn_ipsec_settings.php:290
+msgid ""
+"Enable MSS clamping on TCP flows over VPN. This helps overcome problems with "
+"PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "
+msgstr ""
+"VPN üzerinden gerçekleşen TCP akışlarında MSS sıkma özelliğini etkinleştir. "
+"Bu seçenek IPsec VPN bağlantılardaki PMTUD problemlerinin giderilmesine "
+"yardımcı olur. Boş bırakarak varsayılan 1400 kullanılmasını "
+"saÄŸlayabilirsiniz."
+
+#: usr/local/www/vpn_l2tp.php:75 usr/local/www/vpn_pppoe_edit.php:114
+#: usr/local/www/vpn_pppoe_edit.php:436 usr/local/www/vpn_pptp.php:83
+#: usr/local/www/vpn_pptp.php:362
+msgid "Server address"
+msgstr "Sunucu adresi"
+
+#: usr/local/www/vpn_l2tp.php:75 usr/local/www/vpn_pppoe_edit.php:114
+#: usr/local/www/vpn_pptp.php:83
+msgid "Remote start address"
+msgstr "Uzak başlangıç adresi"
+
+#: usr/local/www/vpn_l2tp.php:80 usr/local/www/vpn_pppoe_edit.php:119
+#: usr/local/www/vpn_pptp.php:88
+msgid "RADIUS server address"
+msgstr "RADIUS sunucu adresi"
+
+#: usr/local/www/vpn_l2tp.php:80 usr/local/www/vpn_pppoe_edit.php:119
+#: usr/local/www/vpn_pptp.php:88 usr/local/www/vpn_pptp.php:442
+msgid "RADIUS shared secret"
+msgstr "RADIUS paylaşımlı anahtar"
+
+#: usr/local/www/vpn_l2tp.php:86 usr/local/www/vpn_pppoe_edit.php:125
+#: usr/local/www/vpn_pptp.php:94
+msgid "A valid server address must be specified."
+msgstr "Geçerli bir sunucu adresi belirtilmelidir."
+
+#: usr/local/www/vpn_l2tp.php:89 usr/local/www/vpn_pptp.php:97
+msgid ""
+"'Server address' parameter should NOT be set to any IP address currently in "
+"use on this firewall."
+msgstr ""
+"'Sunucu adresi' parametresi güvenlik duvarında kullanılacak herhangi bir IP "
+"adresine AYARLANAMAZ."
+
+#: usr/local/www/vpn_l2tp.php:92 usr/local/www/vpn_pppoe_edit.php:127
+#: usr/local/www/vpn_pptp.php:100
+msgid "A valid remote start address must be specified."
+msgstr "Geçerli bir uzak başlangıç adresi belirtilmelidir."
+
+#: usr/local/www/vpn_l2tp.php:95 usr/local/www/vpn_pppoe_edit.php:129
+#: usr/local/www/vpn_pptp.php:103
+msgid "A valid RADIUS server address must be specified."
+msgstr "Geçerli bir RADIUS sunucu adresi belirtilmelidir."
+
+#: usr/local/www/vpn_l2tp.php:111 usr/local/www/vpn_pppoe_edit.php:136
+#: usr/local/www/vpn_pptp.php:112
+msgid "The specified server address lies in the remote subnet."
+msgstr "Belirtilen sunucu adresi uzak ağ aralığı içinde kalıyor."
+
+#: usr/local/www/vpn_l2tp.php:114 usr/local/www/vpn_pptp.php:116
+msgid "The specified server address is equal to the LAN interface address."
+msgstr "Belirtilen sunucu adresi LAN arabirim adresi ile aynı."
+
+#: usr/local/www/vpn_l2tp.php:285 usr/local/www/vpn_l2tp_users.php:94
+#: usr/local/www/vpn_pptp.php:306 usr/local/www/vpn_pptp_users.php:91
+msgid "Configuration"
+msgstr "Yapılandırma"
+
+#: usr/local/www/vpn_l2tp.php:305
+msgid "Enable L2TP server"
+msgstr "L2TP Sunucusunu EtkinleÅŸtir"
+
+#: usr/local/www/vpn_l2tp.php:326
+msgid "Server Address"
+msgstr "Sunucu Adresi"
+
+#: usr/local/www/vpn_l2tp.php:330
+msgid ""
+"Enter the IP address the L2TP server should give to clients for use as their "
+"\"gateway\""
+msgstr ""
+"L2TP sunucunun tüm istemcilere \"ağ geçidi\" olarak göndereceği IP adresini "
+"giriniz"
+
+#: usr/local/www/vpn_l2tp.php:332 usr/local/www/vpn_pppoe_edit.php:442
+#: usr/local/www/vpn_pptp.php:368
+msgid "Typically this is set to an unused IP just outside of the client range"
+msgstr "Genelde istemci aralığının hemen dışında, kullanılmayan bir IP verilir"
+
+#: usr/local/www/vpn_l2tp.php:335 usr/local/www/vpn_pppoe_edit.php:445
+#: usr/local/www/vpn_pptp.php:371
+msgid ""
+"NOTE: This should NOT be set to any IP address currently in use on this "
+"firewall"
+msgstr ""
+"NOT: Bu ayar bu güvenlik duvarında kullanımda olan bir IP adresi olmamalıdır"
+
+#: usr/local/www/vpn_l2tp.php:338
+msgid "Remote Address Range"
+msgstr "Uzak Adres Aralığı"
+
+#: usr/local/www/vpn_l2tp.php:342
+msgid "Specify the starting address for the client IP address subnet."
+msgstr "İstemci IP adres aştağı için başlangış adresi belirtiniz."
+
+# kelime içinde anlamı olmadığı için boş geçilmelidir.
+#: usr/local/www/vpn_l2tp.php:359 usr/local/www/vpn_pppoe_edit.php:415
+msgid "is"
+msgstr " "
+
+#: usr/local/www/vpn_l2tp.php:363
+msgid "Number of L2TP users"
+msgstr "L2TP kullanıcı sayısı"
+
+#: usr/local/www/vpn_l2tp.php:376
+msgid "is ten L2TP clients"
+msgstr "10 (on) L2TP istemcisidir"
+
+#: usr/local/www/vpn_l2tp.php:380
+msgid "Secret"
+msgstr "Anahtar"
+
+#: usr/local/www/vpn_l2tp.php:384
+msgid ""
+"Specify optional secret shared between peers. Required on some devices/"
+"setups."
+msgstr ""
+"Eşler arasında paylaşılan ve isteğe bağlı olan anahtarı belirtin. Bazı "
+"aygıtlarda ve yapılandırmalarda gereklidir."
+
+#: usr/local/www/vpn_l2tp.php:388
+msgid "Authentication Type"
+msgstr "Kimlik Doğrulama Türü"
+
+#: usr/local/www/vpn_l2tp.php:391
+msgid "CHAP"
+msgstr "CHAP"
+
+#: usr/local/www/vpn_l2tp.php:395
+msgid "Specifies which protocol to use for authentication."
+msgstr "Kimlik doğrulama için hangi protokolün kullanılacağını belirler."
+
+#: usr/local/www/vpn_l2tp.php:399
+msgid "L2TP DNS Servers"
+msgstr "L2TP DNS Sunucuları"
+
+#: usr/local/www/vpn_l2tp.php:405
+msgid "primary and secondary DNS servers assigned to L2TP clients"
+msgstr "L2TP istemcilere atanacak birincil ve ikincil DNS sunucu"
+
+#: usr/local/www/vpn_l2tp.php:409 usr/local/www/vpn_pptp.php:393
+msgid "WINS Server"
+msgstr "WINS Sunucu"
+
+#: usr/local/www/vpn_l2tp.php:415 usr/local/www/vpn_pppoe_edit.php:473
+#: usr/local/www/vpn_pptp.php:399
+msgid "RADIUS"
+msgstr "RADIUS"
+
+#: usr/local/www/vpn_l2tp.php:418 usr/local/www/vpn_pppoe_edit.php:476
+#: usr/local/www/vpn_pptp.php:402
+msgid "Use a RADIUS server for authentication"
+msgstr "Kimlik doğrulama için RADIUS sunucu kullan"
+
+#: usr/local/www/vpn_l2tp.php:419
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used."
+msgstr ""
+"Etkinleştirildiğinde istemciler aşağıda belirtilen RADIUS sunucusundan "
+"kimlik doğrularlar. Yerel kullanıcı veritabanı kullanılmaz."
+
+#: usr/local/www/vpn_l2tp.php:422 usr/local/www/vpn_pppoe_edit.php:482
+#: usr/local/www/vpn_pptp.php:408
+msgid "Enable RADIUS accounting"
+msgstr "RADIUS hesaplandırmayı etkinleştir"
+
+#: usr/local/www/vpn_l2tp.php:423
+msgid "Sends accounting packets to the RADIUS server."
+msgstr "Hesaplandırma paketlerini RADIUS sunucuya gönderir."
+
+#: usr/local/www/vpn_l2tp.php:426 usr/local/www/vpn_pptp.php:433
+msgid "RADIUS Server"
+msgstr "RADIUS Sunucu"
+
+#: usr/local/www/vpn_l2tp.php:430
+msgid "Enter the IP address of the RADIUS server."
+msgstr "RADIUS sunucunun IP adresini giriniz."
+
+#: usr/local/www/vpn_l2tp.php:433
+msgid "RADIUS Shared Secret"
+msgstr "RADIUS Paylaşımlı Anahtar"
+
+#: usr/local/www/vpn_l2tp.php:437
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server."
+msgstr ""
+"RADIUS sunucu ile kimlik doğrulamada kullanılacak paylaşımlı anahtarı "
+"giriniz."
+
+#: usr/local/www/vpn_l2tp.php:440
+msgid "RADIUS Issued IP's"
+msgstr "RADIUS Verilen IP(ler)"
+
+#: usr/local/www/vpn_l2tp.php:444
+msgid "Issue IP Addresses via RADIUS server."
+msgstr "IP Adreslerini RADIUS sunucu sağlasın."
+
+#: usr/local/www/vpn_l2tp.php:457
+msgid ""
+"Don't forget to add a firewall rule to permit traffic from L2TP clients!"
+msgstr ""
+"Güvenlik Duvarında L2TP istemcilerinden trafiğe izin verecek kural "
+"oluşturulmalıdır!"
+
+#: usr/local/www/vpn_l2tp_users.php:86 usr/local/www/vpn_pptp_users.php:83
+msgid "Warning: RADIUS is enabled. The local user database will not be used."
+msgstr ""
+"Uyarı: RADIUS etkinleştirildi. Yerel kullanıcı veritabanı kullanılmayacaktır."
+
+#: usr/local/www/vpn_l2tp_users.php:88
+msgid "The l2tp user list has been modified"
+msgstr "L2TP kullanıcı listesi değiştirildi"
+
+#: usr/local/www/vpn_l2tp_users.php:88 usr/local/www/vpn_pptp_users.php:85
+msgid "You must apply the changes in order for them to take effect"
+msgstr "Değişiklikleri uygulayarak etkin olmasını sağlayabilirsiniz"
+
+#: usr/local/www/vpn_l2tp_users.php:88
+msgid "Warning: this will terminate all current l2tp sessions!"
+msgstr "Uyarı: Tüm aktif L2TP oturumları sonlandırılacaktır!"
+
+#: usr/local/www/vpn_l2tp_users_edit.php:95
+#: usr/local/www/vpn_pptp_users_edit.php:94
+msgid "The password contains invalid characters."
+msgstr "Parola geçersiz karakterler içermekte."
+
+#: usr/local/www/vpn_l2tp_users_edit.php:101
+#: usr/local/www/vpn_pptp_users_edit.php:100
+msgid "The IP address entered is not valid."
+msgstr "Girilen IP adresi geçerli değil."
+
+#: usr/local/www/vpn_l2tp_users_edit.php:169
+#: usr/local/www/vpn_pptp_users_edit.php:160
+msgid "confirmation"
+msgstr "onay"
+
+#: usr/local/www/vpn_l2tp_users_edit.php:170
+msgid "If you want to change the users password, enter it here twice."
+msgstr ""
+"Kullanıcı şifresini değiştirmek için yeni şifreyi burada iki defa giriniz."
+
+#: usr/local/www/vpn_l2tp_users_edit.php:177
+#: usr/local/www/vpn_pptp_users_edit.php:168
+msgid ""
+"If you want the user to be assigned a specific IP address, enter it here."
+msgstr ""
+"Kullanıcıya özel bir IP adresi atanması için IP adresini buraya giriniz."
+
+#: usr/local/www/vpn_openvpn_client.php:41
+#: usr/local/www/vpn_openvpn_client.php:446
+#: usr/local/www/vpn_openvpn_csc.php:317
+#: usr/local/www/vpn_openvpn_server.php:744
+msgid "Client"
+msgstr "Ä°stemci"
+
+#: usr/local/www/vpn_openvpn_client.php:88
+msgid "Client successfully deleted"
+msgstr "İstemci başarıyla silindi"
+
+#: usr/local/www/vpn_openvpn_client.php:180
+#: usr/local/www/vpn_openvpn_server.php:232
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv6 "
+"protocol and an IPv4 IP address."
+msgstr ""
+"Protokol ve IP adresi ailesi eşleşmiyor. IPv6 protokolü ve IPv4 IP adresi "
+"seçemezsiniz."
+
+#: usr/local/www/vpn_openvpn_client.php:182
+#: usr/local/www/vpn_openvpn_server.php:234
+msgid ""
+"Protocol and IP address families do not match. You cannot select an IPv4 "
+"protocol and an IPv6 IP address."
+msgstr ""
+"Protokol ve IP adresi ailesi eşleşmiyor. IPv4 protokolü ve IPv6 IP adresi "
+"seçemezsiniz."
+
+#: usr/local/www/vpn_openvpn_client.php:184
+#: usr/local/www/vpn_openvpn_server.php:236
+msgid ""
+"An IPv4 protocol was selected, but the selected interface has no IPv4 "
+"address."
+msgstr "IPv4 protokolü seçildi ancak seçili arabirimin IPv4 adresi yok."
+
+#: usr/local/www/vpn_openvpn_client.php:186
+#: usr/local/www/vpn_openvpn_server.php:238
+msgid ""
+"An IPv6 protocol was selected, but the selected interface has no IPv6 "
+"address."
+msgstr "IPv6 protokolü seçildi ancak seçili arabirimin IPv6 adresi yok."
+
+#: usr/local/www/vpn_openvpn_client.php:202
+#: usr/local/www/vpn_openvpn_server.php:273
+msgid "The specified 'Local port' is in use. Please select another value"
+msgstr "Belirtilen yerel port kullanımda. Lütfen başka port seçiniz"
+
+#: usr/local/www/vpn_openvpn_client.php:221
+msgid "User name and password are required for proxy with authentication."
+msgstr "Kimlik doğrulamalı vekil için kullanıcı adı ve parola gereklidir."
+
+#: usr/local/www/vpn_openvpn_client.php:240
+msgid "The bandwidth limit must be a positive numeric value."
+msgstr "Bant genişliği limiti pozitif bir sayısal değer olmalıdır."
+
+#: usr/local/www/vpn_openvpn_client.php:248
+#: usr/local/www/vpn_openvpn_server.php:281
+msgid "The field 'Shared Key' does not appear to be valid"
+msgstr "Paylaşımlı anahtar alanı geçersiz görünüyor"
+
+#: usr/local/www/vpn_openvpn_client.php:253
+#: usr/local/www/vpn_openvpn_server.php:286
+msgid "The field 'TLS Authentication Key' does not appear to be valid"
+msgstr "TLS Kimlik Doğrulama Anahtarı alanı geçersiz görünüyor"
+
+#: usr/local/www/vpn_openvpn_client.php:262
+#: usr/local/www/vpn_openvpn_server.php:337
+msgid "Shared key"
+msgstr "Paylaşımlı anahtar"
+
+#: usr/local/www/vpn_openvpn_client.php:268
+msgid ""
+"If no Client Certificate is selected, a username and password must be "
+"entered."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:447
+#: usr/local/www/vpn_openvpn_csc.php:318
+#: usr/local/www/vpn_openvpn_server.php:745
+msgid "Client Specific Overrides"
+msgstr "İstemciye Özel Ayarlar"
+
+#: usr/local/www/vpn_openvpn_client.php:476
+msgid "Disable this client"
+msgstr "Bu istemciyi devre dışı bırak"
+
+#: usr/local/www/vpn_openvpn_client.php:481
+msgid ""
+"Set this option to disable this client without removing it from the list"
+msgstr "Bu seçenekle istemciyi listeden silmeden devre dışı bırakabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_client.php:485
+#: usr/local/www/vpn_openvpn_server.php:783
+msgid "Server Mode"
+msgstr "Sunucu Kipi"
+
+#: usr/local/www/vpn_openvpn_client.php:515
+msgid "Device mode"
+msgstr "Aygıt kipi"
+
+#: usr/local/www/vpn_openvpn_client.php:566
+#: usr/local/www/vpn_openvpn_server.php:886
+msgid "Local port"
+msgstr "Yerel port"
+
+#: usr/local/www/vpn_openvpn_client.php:570
+msgid ""
+"Set this option if you would like to bind to a specific port. Leave this "
+"blank or enter 0 for a random dynamic port."
+msgstr ""
+"Bu seçenekle belirli bir porta bağlanmayı sağlayabilirsiniz. Boş bırakarak "
+"ya da 0 girerek rasgele bir port seçilmesini sağlayabilirsiniz."
+
+#: usr/local/www/vpn_openvpn_client.php:574
+msgid "Server host or address"
+msgstr "Sunucu host yada adres"
+
+#: usr/local/www/vpn_openvpn_client.php:580
+msgid "Server port"
+msgstr "Sunucu portu"
+
+#: usr/local/www/vpn_openvpn_client.php:586
+msgid "Proxy host or address"
+msgstr "Vekil host ya da adres"
+
+#: usr/local/www/vpn_openvpn_client.php:592
+msgid "Proxy port"
+msgstr "Vekil portu"
+
+#: usr/local/www/vpn_openvpn_client.php:598
+msgid "Proxy authentication extra options"
+msgstr "Vekil kimlik doğrulama ek seçenekleri"
+
+#: usr/local/www/vpn_openvpn_client.php:610
+msgid "basic"
+msgstr "temel"
+
+#: usr/local/www/vpn_openvpn_client.php:611
+msgid "ntlm"
+msgstr "ntlm"
+
+#: usr/local/www/vpn_openvpn_client.php:642
+msgid "Server host name resolution"
+msgstr "Sunucu host isim çözümleme"
+
+#: usr/local/www/vpn_openvpn_client.php:652
+msgid "Infinitely resolve server"
+msgstr "Sürekli sunucu adresi çözümle"
+
+#: usr/local/www/vpn_openvpn_client.php:657
+msgid ""
+"Continuously attempt to resolve the server host name. Useful when "
+"communicating with a server that is not permanently connected to the Internet"
+msgstr ""
+"Sunucu host adını çözümleyene kadar devam et. Internete sürekli bağlı "
+"olmayan bir sunucuyla iletişim kurarken faydalıdır"
+
+#: usr/local/www/vpn_openvpn_client.php:674
+msgid "User Authentication Settings"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:677
+msgid "User name/pass"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:679
+msgid "Leave empty when no user name and password are needed."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:706
+#: usr/local/www/vpn_openvpn_server.php:903
+msgid "Cryptographic Settings"
+msgstr "Şifreleme Ayarı"
+
+#: usr/local/www/vpn_openvpn_client.php:709
+#: usr/local/www/vpn_openvpn_server.php:906
+msgid "TLS Authentication"
+msgstr "TLS Kimlik DoÄŸrulama"
+
+#: usr/local/www/vpn_openvpn_client.php:719
+#: usr/local/www/vpn_openvpn_server.php:916
+msgid "Enable authentication of TLS packets"
+msgstr "TLS paketlerinin kimlik doğrulamasına izin ver"
+
+#: usr/local/www/vpn_openvpn_client.php:733
+#: usr/local/www/vpn_openvpn_server.php:930
+msgid "Automatically generate a shared TLS authentication key"
+msgstr "Otomatik olarak paylaşımlı bir TLS kimlik doğrulama anahtarı oluştur"
+
+#: usr/local/www/vpn_openvpn_client.php:744
+#: usr/local/www/vpn_openvpn_client.php:821
+#: usr/local/www/vpn_openvpn_server.php:941
+#: usr/local/www/vpn_openvpn_server.php:1061
+msgid "Paste your shared key here"
+msgstr "Paylaşımlı anahtarınızı bu alana yapıştırınız"
+
+#: usr/local/www/vpn_openvpn_client.php:770
+msgid "Client Certificate"
+msgstr "İstemci Sertifikası"
+
+#: usr/local/www/vpn_openvpn_client.php:799
+#: usr/local/www/vpn_openvpn_server.php:1039
+msgid "Shared Key"
+msgstr "Paylaşımlı Anahtar"
+
+#: usr/local/www/vpn_openvpn_client.php:810
+#: usr/local/www/vpn_openvpn_server.php:1050
+msgid "Automatically generate a shared key"
+msgstr "Otomatik olarak bir paylaşımlı anahtar oluştur"
+
+#: usr/local/www/vpn_openvpn_client.php:846
+#: usr/local/www/vpn_openvpn_server.php:1086
+msgid "Auth Digest Algorithm"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:861
+msgid ""
+"NOTE: Leave this set to SHA1 unless the server is set to match. SHA1 is the "
+"default for OpenVPN."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:865
+#: usr/local/www/vpn_openvpn_server.php:1105
+msgid "Hardware Crypto"
+msgstr "Donanım Şifreleme"
+
+#: usr/local/www/vpn_openvpn_client.php:886
+#: usr/local/www/vpn_openvpn_csc.php:396
+#: usr/local/www/vpn_openvpn_server.php:1169
+msgid "Tunnel Settings"
+msgstr "Tünel Ayarları"
+
+#: usr/local/www/vpn_openvpn_client.php:889
+#: usr/local/www/vpn_openvpn_server.php:1172
+msgid "IPv4 Tunnel Network"
+msgstr "IPv4 Tünel Ağ"
+
+#: usr/local/www/vpn_openvpn_client.php:893
+#: usr/local/www/vpn_openvpn_csc.php:403
+msgid ""
+"This is the virtual network used for private communications between this "
+"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr ""
+"Bu sunucu ile CIDR yoluyla belirtilen istemciler (örn 10.0.8.0/24) arasında "
+"özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu adresi "
+"olarak kabul edilir ve ikinci ağ adresi de istemci sanal arabirimine atanır"
+
+#: usr/local/www/vpn_openvpn_client.php:903
+#: usr/local/www/vpn_openvpn_server.php:1186
+msgid "IPv6 Tunnel Network"
+msgstr "IPv6 Tünel Ağ"
+
+#: usr/local/www/vpn_openvpn_client.php:907
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this client and the server expressed using CIDR (eg. fe80::/64). The first "
+"network address is assumed to be the server address and the second network "
+"address will be assigned to the client virtual interface"
+msgstr ""
+"Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) "
+"arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu "
+"adresi olarak kabul edilir ve ikinci aÄŸ adresi de istemci sanal arabirimine "
+"atanır"
+
+#: usr/local/www/vpn_openvpn_client.php:917
+#: usr/local/www/vpn_openvpn_csc.php:435
+#: usr/local/www/vpn_openvpn_server.php:1313
+msgid "IPv4 Remote Network/s"
+msgstr "Uzaktaki IPv4 Ağ(lar)ı"
+
+#: usr/local/www/vpn_openvpn_client.php:921
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr ""
+"Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal özel "
+"IPv4 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek "
+"bir ağdır. CIDR aralığı virgülle ayrılmış bir yada daha fazla liste olarak "
+"girilir. Eğer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer "
+"alanlar arası VPN istemiyorsanız burayı boş bırakabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_client.php:931
+#: usr/local/www/vpn_openvpn_csc.php:450
+#: usr/local/www/vpn_openvpn_server.php:1327
+msgid "IPv6 Remote Network/s"
+msgstr "Uzaktaki IPv6 Ağ(lar)ı"
+
+#: usr/local/www/vpn_openvpn_client.php:935
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank to only communicate with other clients"
+msgstr ""
+"Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal özel "
+"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek "
+"bir ağdır. IP/PREFIX virgülle ayrılmış bir yada daha fazla liste olarak "
+"girilir. Eğer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer "
+"alanlar arası VPN istemiyorsanız burayı boş bırakabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_client.php:945
+msgid "Limit outgoing bandwidth"
+msgstr "Giden bant genişliğini sınırla"
+
+#: usr/local/www/vpn_openvpn_client.php:949
+msgid ""
+"Maximum outgoing bandwidth for this tunnel. Leave empty for no limit. The "
+"input value has to be something between 100 bytes/sec and 100 Mbytes/sec "
+"(entered as bytes per second)"
+msgstr ""
+"Bu tünel için maksimum giden bant genişliği. Sınır koymamak için boş "
+"bırakın. Girdi değeri 100 bayt/sn ile 100 Mbayt/sn arasında olmalıdır (bayt/"
+"sn cinsinden girilir)"
+
+#: usr/local/www/vpn_openvpn_client.php:969
+msgid ""
+"Compress tunnel packets using the LZO algorithm. Adaptive compression will "
+"dynamically disable compression for a period of time if OpenVPN detects that "
+"the data in the packets is not being compressed efficiently."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:973
+#: usr/local/www/vpn_openvpn_server.php:1366
+msgid "Type-of-Service"
+msgstr "Servis Türü"
+
+#: usr/local/www/vpn_openvpn_client.php:983
+#: usr/local/www/vpn_openvpn_server.php:1376
+msgid ""
+"Set the TOS IP header value of tunnel packets to match the encapsulated "
+"packet value"
+msgstr ""
+"Tünel paketlerinin TOS IP başlık değerini satmalanmış paket değeriyle "
+"eÅŸlenecek ÅŸekilde ayarla"
+
+#: usr/local/www/vpn_openvpn_client.php:992
+#: usr/local/www/vpn_openvpn_server.php:1421
+msgid "Disable IPv6"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1002
+#: usr/local/www/vpn_openvpn_server.php:1431
+msgid "Don't forward IPv6 traffic"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1011
+msgid "Don't pull routes"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1021
+msgid "Don't add or remove routes automatically. Instead pass routes to "
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1021
+msgid "script using environmental variables"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1030
+msgid "Don't add/remove routes"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1040
+msgid ""
+"This option effectively bars the server from adding routes to the client's "
+"routing table, however note that this option still allows the server to set "
+"the TCP/IP properties of the client's TUN/TAP interface"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1054
+#: usr/local/www/vpn_openvpn_server.php:1770
+msgid "Advanced configuration"
+msgstr "Gelişmiş yapılandırma"
+
+#: usr/local/www/vpn_openvpn_client.php:1063
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN client "
+"configuration here, separated by a semicolon"
+msgstr ""
+"OpenVPN istemci yapılandırmasına eklemek istediğiniz ek seçenekleri "
+"aralarına noktalı virgül koyarak girin"
+
+#: usr/local/www/vpn_openvpn_client.php:1064
+msgid "EXAMPLE:"
+msgstr "ÖRNEK:"
+
+#: usr/local/www/vpn_openvpn_client.php:1072
+#: usr/local/www/vpn_openvpn_server.php:1788
+msgid "Verbosity level"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1085
+#: usr/local/www/vpn_openvpn_server.php:1801
+msgid ""
+"Each level shows all info from the previous levels. Level 3 is recommended "
+"if you want a good summary of what's happening without being swamped by "
+"output"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1086
+#: usr/local/www/vpn_openvpn_server.php:1802
+msgid "No output except fatal errors"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1087
+#: usr/local/www/vpn_openvpn_server.php:1803
+msgid "Normal usage range"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1088
+#: usr/local/www/vpn_openvpn_server.php:1804
+msgid ""
+"Output R and W characters to the console for each packet read and write, "
+"uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP "
+"packets"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1089
+#: usr/local/www/vpn_openvpn_server.php:1805
+msgid "Debug info range"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_client.php:1126
+msgid "add client"
+msgstr "istemci ekle"
+
+#: usr/local/www/vpn_openvpn_client.php:1133
+msgid "Additional OpenVPN clients can be added here."
+msgstr "Ek OpenVPN istemcilerini burada ekleyebilirsiniz."
+
+#: usr/local/www/vpn_openvpn_client.php:1162
+msgid "edit client"
+msgstr "istemci düzenle"
+
+#: usr/local/www/vpn_openvpn_client.php:1166
+msgid "delete client"
+msgstr "istemci sil"
+
+#: usr/local/www/vpn_openvpn_csc.php:41
+msgid "Client Specific Override"
+msgstr "İstemciye Özel Ayarlar"
+
+#: usr/local/www/vpn_openvpn_csc.php:68
+msgid "Client Specific Override successfully deleted"
+msgstr "İstemciye Özel Ayarlar başarıyla silindi"
+
+#: usr/local/www/vpn_openvpn_csc.php:148
+#: usr/local/www/vpn_openvpn_server.php:290
+msgid "The field 'DNS Server #1' must contain a valid IP address"
+msgstr "DNS Sunucu #1 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:150
+#: usr/local/www/vpn_openvpn_server.php:292
+msgid "The field 'DNS Server #2' must contain a valid IP address"
+msgstr "DNS Sunucu #2 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:152
+#: usr/local/www/vpn_openvpn_server.php:294
+msgid "The field 'DNS Server #3' must contain a valid IP address"
+msgstr "DNS Sunucu #3 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:154
+#: usr/local/www/vpn_openvpn_server.php:296
+msgid "The field 'DNS Server #4' must contain a valid IP address"
+msgstr "DNS Sunucu #4 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:159
+#: usr/local/www/vpn_openvpn_server.php:301
+msgid "The field 'NTP Server #1' must contain a valid IP address"
+msgstr "NTP Sunucu #1 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:161
+#: usr/local/www/vpn_openvpn_server.php:303
+msgid "The field 'NTP Server #2' must contain a valid IP address"
+msgstr "NTP Sunucu #2 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:163
+#: usr/local/www/vpn_openvpn_server.php:305
+msgid "The field 'NTP Server #3' must contain a valid IP address"
+msgstr "NTP Sunucu #3 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:165
+#: usr/local/www/vpn_openvpn_server.php:307
+msgid "The field 'NTP Server #4' must contain a valid IP address"
+msgstr "NTP Sunucu #4 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:171
+#: usr/local/www/vpn_openvpn_server.php:313
+msgid "The field 'WINS Server #1' must contain a valid IP address"
+msgstr "WINS Sunucu #1 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:173
+#: usr/local/www/vpn_openvpn_server.php:315
+msgid "The field 'WINS Server #2' must contain a valid IP address"
+msgstr "WINS Sunucu #2 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:177
+#: usr/local/www/vpn_openvpn_server.php:319
+msgid ""
+"The field 'NetBIOS Data Distribution Server #1' must contain a valid IP "
+"address"
+msgstr ""
+"NetBIOS Veri Dağıtım Sunucusu #1 alanı geçerli bir IP adresi içermelidir"
+
+#: usr/local/www/vpn_openvpn_csc.php:347
+msgid "Disable this override"
+msgstr "Üzerine yazmayı kapat"
+
+#: usr/local/www/vpn_openvpn_csc.php:352
+msgid ""
+"Set this option to disable this client-specific override without removing it "
+"from the list"
+msgstr ""
+"Bu ayar seçeneği ile istemciye-özgü yeniden yazmayı listeden silmeden "
+"kapatabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_csc.php:356
+msgid "Common name"
+msgstr "Genel ad"
+
+#: usr/local/www/vpn_openvpn_csc.php:360
+msgid "Enter the client's X.509 common name here"
+msgstr "İstemcinin X.509 genel adını buraya girin"
+
+#: usr/local/www/vpn_openvpn_csc.php:372
+msgid "Connection blocking"
+msgstr "Bağlantı engelleme"
+
+#: usr/local/www/vpn_openvpn_csc.php:382
+msgid "Block this client connection based on its common name"
+msgstr "Genel adına göre bu istemci bağlantısını engelle"
+
+#: usr/local/www/vpn_openvpn_csc.php:387
+msgid ""
+"Don't use this option to permanently disable a client due to a compromised "
+"key or password. Use a CRL (certificate revocation list) instead"
+msgstr ""
+"Bu seçeneği kullanarak bir anahtar ya da parola nedeniyle istemciyi "
+"tamamiyle kapatmak için kullanmayın. Bunun yerine CRL (sertifika silme "
+"listesi) kullanın"
+
+#: usr/local/www/vpn_openvpn_csc.php:399
+#: usr/local/www/vpn_openvpn_server.php:1833
+msgid "Tunnel Network"
+msgstr "Tünel Ağ"
+
+#: usr/local/www/vpn_openvpn_csc.php:413
+#: usr/local/www/vpn_openvpn_server.php:1287
+msgid "IPv4 Local Network/s"
+msgstr "IPv4 Yerel Ağ(ları)"
+
+#: usr/local/www/vpn_openvpn_csc.php:417
+msgid ""
+"These are the IPv4 networks that will be accessible from this particular "
+"client. Expressed as a comma-separated list of one or more CIDR ranges."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:419 usr/local/www/vpn_openvpn_csc.php:430
+msgid ""
+"NOTE: You do not need to specify networks here if they have already been "
+"defined on the main server configuration."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:424
+#: usr/local/www/vpn_openvpn_server.php:1300
+msgid "IPv6 Local Network/s"
+msgstr "IPv6 Yerel Ağ(ları)"
+
+#: usr/local/www/vpn_openvpn_csc.php:428
+msgid ""
+"These are the IPv6 networks that will be accessible from this particular "
+"client. Expressed as a comma-separated list of one or more IP/PREFIX "
+"networks."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:439
+msgid ""
+"These are the IPv4 networks that will be routed to this client specifically "
+"using iroute, so that a site-to-site VPN can be established. Expressed as a "
+"comma-separated list of one or more CIDR ranges. You may leave this blank if "
+"there are no client-side networks to be routed"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:445
+msgid ""
+"NOTE: Remember to add these subnets to the IPv4 Remote Networks list on the "
+"corresponding OpenVPN server settings."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:454
+msgid ""
+"These are the IPv6 networks that will be routed to this client specifically "
+"using iroute, so that a site-to-site VPN can be established. Expressed as a "
+"comma-separated list of one or more IP/PREFIX networks. You may leave this "
+"blank if there are no client-side networks to be routed"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:460
+msgid ""
+"NOTE: Remember to add these subnets to the IPv6 Remote Networks list on the "
+"corresponding OpenVPN server settings."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_csc.php:465
+#: usr/local/www/vpn_openvpn_server.php:1269
+msgid "Redirect Gateway"
+msgstr "Ağ Geçidini Yönlendir"
+
+#: usr/local/www/vpn_openvpn_csc.php:475
+#: usr/local/www/vpn_openvpn_server.php:1279
+msgid "Force all client generated traffic through the tunnel"
+msgstr "İstemci tarafından oluşturulan tüm trafiği tünelden geçir"
+
+#: usr/local/www/vpn_openvpn_csc.php:486
+#: usr/local/www/vpn_openvpn_server.php:1446
+msgid "Client Settings"
+msgstr "İstemci Ayarları"
+
+#: usr/local/www/vpn_openvpn_csc.php:489
+msgid "Server Definitions"
+msgstr "Sunucu Tanımlamaları"
+
+#: usr/local/www/vpn_openvpn_csc.php:499
+msgid "Prevent this client from receiving any server-defined client settings"
+msgstr ""
+"Bu istemcinin sunucu tarafından tanımlanmış istemci ayarlarını almasını "
+"engelle"
+
+#: usr/local/www/vpn_openvpn_csc.php:584
+#: usr/local/www/vpn_openvpn_server.php:1607
+msgid "NTP Servers"
+msgstr "NTP Sunucular"
+
+#: usr/local/www/vpn_openvpn_csc.php:594
+#: usr/local/www/vpn_openvpn_server.php:1617
+msgid "Provide a NTP server list to clients"
+msgstr "Ä°stemcilere bir NTP sunucu listesi saÄŸla"
+
+#: usr/local/www/vpn_openvpn_csc.php:620
+#: usr/local/www/vpn_openvpn_server.php:1643
+msgid "NetBIOS Options"
+msgstr "NETBIOS Seçenekleri"
+
+#: usr/local/www/vpn_openvpn_csc.php:630
+#: usr/local/www/vpn_openvpn_server.php:1653
+msgid "Enable NetBIOS over TCP/IP"
+msgstr "TCP/IP üzerinden NetBIOS'u etkinleştir"
+
+#: usr/local/www/vpn_openvpn_csc.php:635
+#: usr/local/www/vpn_openvpn_server.php:1658
+msgid ""
+"If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) "
+"will be disabled"
+msgstr ""
+"Bu seçenek seçilmediğinde TCP/IP üzerinde NetBIOS (WINS dahil ) devre dışı "
+"kalacaktır"
+
+#: usr/local/www/vpn_openvpn_csc.php:642
+#: usr/local/www/vpn_openvpn_server.php:1665
+msgid "Node Type"
+msgstr "Uç Türü"
+
+#: usr/local/www/vpn_openvpn_csc.php:655
+#: usr/local/www/vpn_openvpn_server.php:1678
+msgid ""
+"Possible options: b-node (broadcasts), p-node (point-to-point name queries "
+"to a WINS server), m-node (broadcast then query name server), and h-node "
+"(query name server, then broadcast)"
+msgstr ""
+"Mümkün seçenekler: b-node (yayınlamak), p-node (WINS sunucu noktadan noktaya "
+"isim sorguları), m-node (yayınladıktan sonra isim sunucusunu sorgulamak), ve "
+"h-node (isim sunucusunu sorguladıktan sonra yayınlamak)"
+
+#: usr/local/www/vpn_openvpn_csc.php:669
+#: usr/local/www/vpn_openvpn_server.php:1692
+msgid ""
+"A NetBIOS Scope\tID provides an extended naming service for\tNetBIOS over "
+"TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to "
+"only those nodes with the same NetBIOS scope ID"
+msgstr ""
+"NetBIOS Scope ID TCP/IP üzerinden NetBIOS için genişletilmiş isimlendirme "
+"servisi sağlar. NetBIOS scope ID tek ağ üzerindeki NetBIOS trafiğini sadece "
+"aynı NetBIOS scope ID'sini taşıyanlarla sınırlar"
+
+#: usr/local/www/vpn_openvpn_csc.php:722
+msgid ""
+"Enter any additional options you would like to add for this client specific "
+"override, separated by a semicolon"
+msgstr ""
+"Bu istemciye özel olarak eklemek istediğiniz seçenekleri aralarına noktalı "
+"virgül koyarak girin"
+
+#: usr/local/www/vpn_openvpn_csc.php:723
+#: usr/local/www/vpn_openvpn_server.php:1780
+msgid "EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""
+msgstr "ÖRNEK: push \"route 10.0.0.0 255.255.255.0\""
+
+#: usr/local/www/vpn_openvpn_csc.php:770
+msgid "edit csc"
+msgstr "csc düzenle"
+
+#: usr/local/www/vpn_openvpn_csc.php:773
+msgid "Do you really want to delete this csc?"
+msgstr "Bu csc'yi silmek istediÄŸinize emin misiniz?"
+
+#: usr/local/www/vpn_openvpn_csc.php:774
+msgid "delete csc"
+msgstr "csc sil"
+
+#: usr/local/www/vpn_openvpn_csc.php:785
+msgid "add csc"
+msgstr "csc ekle"
+
+#: usr/local/www/vpn_openvpn_csc.php:792
+msgid "Additional OpenVPN client specific overrides can be added here."
+msgstr "Ek OpenVPN istemciye özel ayarlar buradan girilebilir."
+
+#: usr/local/www/vpn_openvpn_server.php:89
+msgid "Server successfully deleted"
+msgstr "Sunucu başarıyla silindi"
+
+#: usr/local/www/vpn_openvpn_server.php:247
+msgid ""
+"You must select a Backend for Authentication if the server mode requires "
+"User Auth."
+msgstr ""
+"Sunucu kipi Kullanıcı Kimlik Doğrulama gerektiriyorsa kullanılacak kimlik "
+"doğrulama arkaucunu seçin."
+
+#: usr/local/www/vpn_openvpn_server.php:328
+msgid "The field 'Concurrent connections' must be numeric."
+msgstr "Eş zamanlı bağlantılar alanı sayı olmalıdır."
+
+#: usr/local/www/vpn_openvpn_server.php:342
+msgid "Tunnel network"
+msgstr "Tünel ağ"
+
+#: usr/local/www/vpn_openvpn_server.php:345
+msgid ""
+"Using a tunnel network and server bridge settings together is not allowed."
+msgstr "Tünel ağ ve sunucu köprüsü ayarlarını beraber kullanıma izin verilmez."
+
+#: usr/local/www/vpn_openvpn_server.php:348
+msgid "Server Bridge DHCP Start and End must both be empty, or defined."
+msgstr "Sunucu Köprüsü DHCP Başlangıç ve Bitişi boş yada tanımlı olmalıdır."
+
+#: usr/local/www/vpn_openvpn_server.php:350
+msgid "Server Bridge DHCP Start must be an IPv4 address."
+msgstr "Sunucu Köprüsü DHCP Başlangıcı IPv4 adresi olmalıdır."
+
+#: usr/local/www/vpn_openvpn_server.php:352
+msgid "Server Bridge DHCP End must be an IPv4 address."
+msgstr "Sunucu Köprüsü DHCP Bitişi IPv4 adresi olmalıdır."
+
+#: usr/local/www/vpn_openvpn_server.php:354
+msgid "The Server Bridge DHCP range is invalid (start higher than end)."
+msgstr ""
+"Sunucu Köprüsü DHCP aralığı geçersiz (Başlangıcı bitişinden daha yüksek)."
+
+#: usr/local/www/vpn_openvpn_server.php:774
+msgid "Disable this server"
+msgstr "Sunucuyu devre dışı bırak"
+
+#: usr/local/www/vpn_openvpn_server.php:779
+msgid ""
+"Set this option to disable this server without removing it from the list"
+msgstr ""
+"Bu seçeneği etkinleştirerek silmeden sunucunun devre dışı kalmasını "
+"saÄŸlayabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_server.php:798
+msgid "Backend for authentication"
+msgstr "Kimlik doÄŸrulama arkaucu"
+
+#: usr/local/www/vpn_openvpn_server.php:830
+msgid "Device Mode"
+msgstr "Aygıt Kipi"
+
+#: usr/local/www/vpn_openvpn_server.php:967
+msgid "Peer Certificate Revocation List"
+msgstr "EÅŸ Sertifika Silme Listesi"
+
+#: usr/local/www/vpn_openvpn_server.php:992
+msgid "Server Certificate"
+msgstr "Sunucu Sertifikası"
+
+#: usr/local/www/vpn_openvpn_server.php:1021
+msgid "DH Parameters Length"
+msgstr "DH Paremetre UzunluÄŸu"
+
+#: usr/local/www/vpn_openvpn_server.php:1101
+msgid ""
+"NOTE: Leave this set to SHA1 unless all clients are set to match. SHA1 is "
+"the default for OpenVPN."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1123
+msgid "Certificate Depth"
+msgstr "Sertifika DerinliÄŸi"
+
+#: usr/local/www/vpn_openvpn_server.php:1141
+msgid ""
+"When a certificate-based client logs in, do not accept certificates below "
+"this depth. Useful for denying certificates made with intermediate CAs "
+"generated from the same CA as the server."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1148
+msgid "Strict User/CN Matching"
+msgstr "Sıkı Kullanıcı/CN Eşleme"
+
+#: usr/local/www/vpn_openvpn_server.php:1158
+msgid ""
+"When authenticating users, enforce a match between the common name of the "
+"client certificate and the username given at login."
+msgstr ""
+"Kullanıcı kimlikleri doğrulanırken istemci sertifikasının genel adı ile "
+"oturum açılırken verilen kullanıcı adının aynı olmasını zorunlu kılar."
+
+#: usr/local/www/vpn_openvpn_server.php:1176
+msgid ""
+"This is the IPv4 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The "
+"first network address will be assigned to the\tserver virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr ""
+"Bu IPv4 sunucu ile CIDR yoluyla belirtilen istemciler (örn. 10.0.8.0/24) "
+"arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu"
+"\tsanal arabirimine atanır. Diğer ağ adresleri bağlanan istemcilere isteğe "
+"göre atanabilir (bkz Adres Havuzu)"
+
+#: usr/local/www/vpn_openvpn_server.php:1190
+msgid ""
+"This is the IPv6 virtual network used for private communications between "
+"this server and client hosts expressed using CIDR (eg. fe80::/64). The first "
+"network address will be assigned to the server virtual interface. The "
+"remaining network addresses can optionally be assigned to connecting "
+"clients. (see Address Pool)"
+msgstr ""
+"Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) "
+"arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu "
+"sanal arabirimine atanır. Diğer ağ adresleri bağlanan istemcilere isteğe "
+"göre atanabilir (bkz Adres Havuzu)"
+
+#: usr/local/www/vpn_openvpn_server.php:1200
+msgid "Bridge DHCP"
+msgstr "Köprü DHCP"
+
+#: usr/local/www/vpn_openvpn_server.php:1210
+msgid "Allow clients on the bridge to obtain DHCP."
+msgstr "Köprüdeki istemcilerin DHCP den yararlanmasına izin ver."
+
+#: usr/local/www/vpn_openvpn_server.php:1218
+msgid "Bridge Interface"
+msgstr "Köprü Arabirim"
+
+#: usr/local/www/vpn_openvpn_server.php:1240
+msgid ""
+"The interface to which this tap instance will be bridged. This is not done "
+"automatically. You must assign this interface and create the bridge "
+"separately. This setting controls which existing IP address and subnet mask "
+"are used by OpenVPN for the bridge. Setting this to 'none' will cause the "
+"Server Bridge DHCP settings below to be ignored."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1249
+msgid "Server Bridge DHCP Start"
+msgstr "Sunucu Köprüsü DHCP Başlangıcı"
+
+#: usr/local/www/vpn_openvpn_server.php:1253
+msgid ""
+"When using tap mode as a multi-point server, you may optionally supply a "
+"DHCP range to use on the interface to which this tap instance is bridged. If "
+"these settings are left blank, DHCP will be passed through to the LAN, and "
+"the interface setting above will be ignored."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1262
+msgid "Server Bridge DHCP End"
+msgstr "Sunucu Köprüsü DHCP Bitişi"
+
+#: usr/local/www/vpn_openvpn_server.php:1291
+msgid ""
+"These are the IPv4 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more CIDR ranges. "
+"You may leave this blank if you don't want to add a route to the local "
+"network through this tunnel on the remote machine. This is generally set to "
+"your LAN network"
+msgstr ""
+"Uzak uçtan erişilebilir olacak IPv4 ağı. CIDR aralığı virgülle ayrılmış bir "
+"yada daha fazla liste olarak belirtilir. Eğer uzak makinada bu tünel içinden "
+"yerel ağa bir yönlendirme eklemek istemiyorsanız burayı boş "
+"bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdır"
+
+#: usr/local/www/vpn_openvpn_server.php:1304
+msgid ""
+"These are the IPv6 networks that will be accessible from the remote "
+"endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. You "
+"may leave this blank if you don't want to add a route to the local network "
+"through this tunnel on the remote machine. This is generally set to your LAN "
+"network"
+msgstr ""
+"Uzak uçtan erişilebilir olacak IPv6 ağı. IP/PREFIX virgülle ayrılmış bir "
+"yada daha fazla liste olarak belirtilir. Eğer uzak makinada bu tünel içinden "
+"yerel ağa bir yönlendirme eklemek istemiyorsanız burayı boş "
+"bırakabilirsiniz. Genel LAN ağınız olarak ayarlıdır"
+
+#: usr/local/www/vpn_openvpn_server.php:1317
+msgid ""
+"These are the IPv4 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more CIDR ranges. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr ""
+"Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal özel "
+"IPv4 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek "
+"bir ağdır. CIDR aralığı virgülle ayrılmış bir yada daha fazla liste olarak "
+"girilir. Eğer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer "
+"alanlar arası VPN istemiyorsanız burayı boş bırakabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_server.php:1331
+msgid ""
+"These are the IPv6 networks that will be routed through the tunnel, so that "
+"a site-to-site VPN can be established without manually changing the routing "
+"tables. Expressed as a comma-separated list of one or more IP/PREFIX. If "
+"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this "
+"blank if you don't want a site-to-site VPN"
+msgstr ""
+"Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal özel "
+"IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden yönlendirilecek "
+"bir ağdır. IP/PREFIX virgülle ayrılmış bir yada daha fazla liste olarak "
+"girilir. Eğer bu alanlar arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer "
+"alanlar arası VPN istemiyorsanız burayı boş bırakabilirsiniz"
+
+#: usr/local/www/vpn_openvpn_server.php:1341
+msgid "Concurrent connections"
+msgstr "Eş zamanlı bağlantılar"
+
+#: usr/local/www/vpn_openvpn_server.php:1345
+msgid ""
+"Specify the maximum number of clients allowed to concurrently connect to "
+"this server"
+msgstr ""
+"Bu sunucuya eş zamanlı bağlanmasına izin verilen istemci sayısını belirtiniz"
+
+#: usr/local/www/vpn_openvpn_server.php:1362
+msgid ""
+"Compress tunnel packets using the LZO algorithm. Adaptive compression will "
+"dynamically disable compression for a period of time if OpenVPN detects that "
+"the data in the packets is not being compressed efficiently"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1384
+msgid "Inter-client communication"
+msgstr "İstemciler arası iletişim"
+
+#: usr/local/www/vpn_openvpn_server.php:1394
+msgid "Allow communication between clients connected to this server"
+msgstr ""
+"Bu sunucuya bağlanan istemcilerinin kendi aralarındaki trafiklerine izin ver"
+
+#: usr/local/www/vpn_openvpn_server.php:1402
+msgid "Duplicate Connections"
+msgstr "Çift Bağlantı"
+
+#: usr/local/www/vpn_openvpn_server.php:1412
+msgid ""
+"Allow multiple concurrent connections from clients using the same Common "
+"Name.<br />NOTE: This is not generally recommended, but may be needed for "
+"some scenarios."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1449
+msgid "Dynamic IP"
+msgstr "Dinamik IP"
+
+#: usr/local/www/vpn_openvpn_server.php:1459
+msgid ""
+"Allow connected clients to retain their connections if their IP address "
+"changes"
+msgstr ""
+"Bağlanan istemcilerin IP adresleri değişse bile bağlantılarını korumalarına "
+"izin ver"
+
+#: usr/local/www/vpn_openvpn_server.php:1467
+msgid "Address Pool"
+msgstr "Adres Havuzu"
+
+#: usr/local/www/vpn_openvpn_server.php:1477
+msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)"
+msgstr "İstemcilere sanal IP adresi sağla (bkz Tünel Ağ)"
+
+#: usr/local/www/vpn_openvpn_server.php:1485
+msgid "Topology"
+msgstr "Topoloji"
+
+#: usr/local/www/vpn_openvpn_server.php:1495
+msgid ""
+"Allocate only one IP per client (topology subnet), rather than an isolated "
+"subnet per client (topology net30)."
+msgstr ""
+"İstemci başına IP yi paylaştır (altağ tapoloji), yerine ise istemci başına "
+"izole edilmiÅŸ altaÄŸ koy (tapoloji net30)."
+
+#: usr/local/www/vpn_openvpn_server.php:1502
+msgid ""
+"Relevant when supplying a virtual adapter IP address to clients when using "
+"tun mode on IPv4."
+msgstr ""
+"IPv4 tünel kipinde istemciler için uygun sanal bağdaştırıcı IP adresi sağlar."
+
+#: usr/local/www/vpn_openvpn_server.php:1503
+msgid ""
+"Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/"
+"Android). Others may break if it is present, such as older versions of "
+"OpenVPN or clients such as Yealink phones."
+msgstr ""
+"Bağzı istemciler IPv6 ihtiyacı duyabilir, OpenVPN bağlantısı (iOS/Android) "
+"gibi. DiÄŸer eski versiyonlar mevcutsa (OpenVPN istemcileri yada Yealink "
+"telefonlar gibi) bu durumu bozabilir."
+
+#: usr/local/www/vpn_openvpn_server.php:1588
+msgid "Force DNS cache update"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1598
+msgid ""
+"Run ''net stop dnscache'', ''net start dnscache'', ''ipconfig /flushdns'' "
+"and ''ipconfig /registerdns'' on connection initiation. This is known to "
+"kick Windows into recognizing pushed DNS servers."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1688
+msgid "Scope ID"
+msgstr "Scope ID"
+
+#: usr/local/www/vpn_openvpn_server.php:1739
+msgid "Client Management Port"
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1749
+msgid ""
+"Use a different management port on clients. The default port is 166. Specify "
+"a different port if the client machines need to select from multiple OpenVPN "
+"links."
+msgstr ""
+
+#: usr/local/www/vpn_openvpn_server.php:1779
+msgid ""
+"Enter any additional options you would like to add to the OpenVPN server "
+"configuration here, separated by a semicolon"
+msgstr ""
+"OpenVPN sunucu yapılandırmasına eklemek istediğiniz diğer seçenekleri "
+"aralarına noktalı virgül koyarak girebilirsiniz"
+
+#: usr/local/www/vpn_openvpn_server.php:1832
+msgid "Protocol / Port"
+msgstr "Potokol / Port"
+
+#: usr/local/www/vpn_openvpn_server.php:1874
+msgid "Do you really want to delete this server?"
+msgstr "Bu sunucuyu silmek istediÄŸinizden emin misiniz?"
+
+#: usr/local/www/vpn_openvpn_server.php:1887
+msgid "Additional OpenVPN servers can be added here."
+msgstr "Ek OpenVPN sunucular bu alandan eklenebilir."
+
+#: usr/local/www/vpn_pppoe.php:99
+msgid "The PPPoE entry list has been changed"
+msgstr "PPPoE girdi listesi deÄŸiÅŸtirildi"
+
+#: usr/local/www/vpn_pppoe.php:112 usr/local/www/vpn_pppoe.php:147
+msgid "add a new pppoe instance"
+msgstr "yeni PPPoE ekle"
+
+#: usr/local/www/vpn_pppoe.php:134
+msgid "edit PPPoE instance"
+msgstr ""
+
+#: usr/local/www/vpn_pppoe.php:135
+msgid ""
+"Do you really want to delete this entry? All elements that still use it will "
+"become invalid (e.g. filter rules)!"
+msgstr ""
+"Bu girdiyi silmek istediğinize emin misiniz? Bunu kullanan öğeler (örn. "
+"filtre kuralları) geçersiz hale gelecektir!"
+
+#: usr/local/www/vpn_pppoe.php:135
+msgid "delete pppoe instance"
+msgstr "PPPoE sil"
+
+#: usr/local/www/vpn_pppoe_edit.php:138
+msgid "The specified server address is equal to an interface ip address."
+msgstr "Belirtilen sunucu adresi bir arabirim IP adresine eÅŸ."
+
+#: usr/local/www/vpn_pppoe_edit.php:143
+#, php-format
+msgid "No password specified for username %s"
+msgstr "%s kullanıcısının parolası tanımlanmamış"
+
+#: usr/local/www/vpn_pppoe_edit.php:145
+#, php-format
+msgid "Incorrect ip address specified for username %s"
+msgstr "%s kullanıcısı IP adresi yanlış girilmiş"
+
+#: usr/local/www/vpn_pppoe_edit.php:151
+msgid "Wrong data submitted"
+msgstr "Yanlış veri gönderildi"
+
+#: usr/local/www/vpn_pppoe_edit.php:366
+msgid "PPPoE server configuration"
+msgstr "PPPoE sunucu yapılandırması"
+
+#: usr/local/www/vpn_pppoe_edit.php:379
+msgid "Enable PPPoE server"
+msgstr "PPPoE sunucuyu etkinleÅŸtir"
+
+#: usr/local/www/vpn_pppoe_edit.php:402
+msgid "Subnet netmask"
+msgstr "AltaÄŸ maskesi"
+
+#: usr/local/www/vpn_pppoe_edit.php:415
+msgid "Hint"
+msgstr "Ä°pucu"
+
+#: usr/local/www/vpn_pppoe_edit.php:419
+msgid "No. PPPoE users"
+msgstr "PPPoE kullanıcı sayısı"
+
+#: usr/local/www/vpn_pppoe_edit.php:432
+msgid "Hint: 10 is ten PPPoE clients"
+msgstr "Ä°pucu: 10 on adet PPPoE istemcisi demektir"
+
+#: usr/local/www/vpn_pppoe_edit.php:440
+msgid ""
+"Enter the IP address the PPPoE server should give to clients for use as "
+"their \"gateway\""
+msgstr ""
+"PPPoE sunucunun istemcilere \"ağ geçidi\" olarak vereceği IP adresini girin"
+
+#: usr/local/www/vpn_pppoe_edit.php:448 usr/local/www/vpn_pptp.php:374
+msgid "Remote address range"
+msgstr "Uzak adres aralığı"
+
+#: usr/local/www/vpn_pppoe_edit.php:452
+msgid "Specify the starting address for the client IP address subnet"
+msgstr "İstemci IP adres altağı başlangıç adresi belirle"
+
+#: usr/local/www/vpn_pppoe_edit.php:469
+msgid ""
+"If entered they will be given to all PPPoE clients, else LAN DNS and one WAN "
+"DNS will go to all clients"
+msgstr ""
+"Boş bırakırsanız LAN DNS ve bir WAN DNS tüm istemcilere gider, aksi taktirde "
+"tüm PPPoE istemcilere bu değer gönderilir"
+
+#: usr/local/www/vpn_pppoe_edit.php:477 usr/local/www/vpn_pptp.php:403
+msgid ""
+"When set, all users will be authenticated using the RADIUS server specified "
+"below. The local user database will not be used"
+msgstr ""
+"İşaretlendiğinde, tüm kullanıcılar aşağıda belirtilen RADIUS sunucu "
+"kullanılarak kimlik doğrulamaya tabi tutulur. Yerel kullanıcı veritabanı "
+"kullanılmaz"
+
+#: usr/local/www/vpn_pppoe_edit.php:484 usr/local/www/vpn_pptp.php:409
+msgid "Sends accounting packets to the RADIUS server"
+msgstr "Hesaplandırma paketlerini RADIUS sunucuya gönderir"
+
+#: usr/local/www/vpn_pppoe_edit.php:486
+msgid "Use Backup RADIUS Server"
+msgstr "Yedek RADIUS Sunucusu Kullan"
+
+#: usr/local/www/vpn_pppoe_edit.php:487
+msgid ""
+"When set, if primary server fails all requests will be sent via backup server"
+msgstr ""
+"Eğer ana sunucu isteklere cevap veremezse tüm istekler yedek sunucu "
+"üzerinden gönderilir"
+
+#: usr/local/www/vpn_pppoe_edit.php:490
+msgid "NAS IP Address"
+msgstr "NAS IP Adresi"
+
+#: usr/local/www/vpn_pppoe_edit.php:493
+msgid "RADIUS server NAS IP Address"
+msgstr "RADIUS sunucu NAS IP adresi"
+
+#: usr/local/www/vpn_pppoe_edit.php:497 usr/local/www/vpn_pptp.php:427
+msgid "RADIUS Accounting Update"
+msgstr "RADIUS Hesaplandırma Güncelleme"
+
+#: usr/local/www/vpn_pppoe_edit.php:500
+msgid "RADIUS accounting update period in seconds"
+msgstr "RADIUS hesaplandırma güncelleme periyodu (sn)"
+
+#: usr/local/www/vpn_pppoe_edit.php:504 usr/local/www/vpn_pptp.php:416
+msgid "RADIUS issued IPs"
+msgstr "RADIUS tarafından atanan IP'ler"
+
+#: usr/local/www/vpn_pppoe_edit.php:507
+msgid "Issue IP Addresses via RADIUS server"
+msgstr "IP adreslerini RADIUS sunucudan ata"
+
+#: usr/local/www/vpn_pppoe_edit.php:510
+msgid "RADIUS server Primary"
+msgstr "Ana RADIUS sunucu"
+
+#: usr/local/www/vpn_pppoe_edit.php:515
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the RADIUS server."
+msgstr ""
+"Ana RADIUS sunucunun IP adresini, kimlik doğrulama portunu, hesaplandırma "
+"portu (isteğe bağlı) belirtiniz."
+
+#: usr/local/www/vpn_pppoe_edit.php:516 usr/local/www/vpn_pppoe_edit.php:532
+msgid "standard port 1812 and 1813 accounting"
+msgstr "standart 1812 ve 1813 hesaplandırma portları"
+
+#: usr/local/www/vpn_pppoe_edit.php:519
+msgid "RADIUS primary shared secret"
+msgstr "RADIUS ana paylaşımlı anahtar"
+
+#: usr/local/www/vpn_pppoe_edit.php:522 usr/local/www/vpn_pppoe_edit.php:539
+#: usr/local/www/vpn_pptp.php:446
+msgid ""
+"Enter the shared secret that will be used to authenticate to the RADIUS "
+"server"
+msgstr ""
+"RADIUS sunucuya kimlik doğrularken kullanılacak paylaşımlı anahtarı "
+"belirtiniz"
+
+#: usr/local/www/vpn_pppoe_edit.php:526
+msgid "RADIUS server Secondary"
+msgstr "Ä°kincil RADIUS sunucu"
+
+#: usr/local/www/vpn_pppoe_edit.php:531
+msgid ""
+"Enter the IP address, authentication port and accounting port (optional) of "
+"the backup RADIUS server."
+msgstr ""
+"Yedek RADIUS sunucunun IP adresini, kimlik doğrulama portunu, hesaplandırma "
+"portu (isteğe bağlı) belirtiniz."
+
+#: usr/local/www/vpn_pppoe_edit.php:535
+msgid "RADIUS secondary shared secret"
+msgstr "RADIUS ikincil paylaşımlı anahtar"
+
+#: usr/local/www/vpn_pppoe_edit.php:543
+msgid "User (s)"
+msgstr "Kullanıcı(lar)"
+
+#: usr/local/www/vpn_pppoe_edit.php:611
+msgid ""
+"don't forget to add a firewall rule to permit traffic from PPPoE clients"
+msgstr ""
+"PPPoE istemcilerden trafiğe izin verecek güvenlik duvarı izin kuralı "
+"eklemeyi unutmayın"
+
+#: usr/local/www/vpn_pptp.php:121
+msgid "PPTP redirection target address"
+msgstr "PPTP yönlendirme hedef adresi"
+
+#: usr/local/www/vpn_pptp.php:126
+msgid "A valid target address must be specified."
+msgstr "Geçerli bir hedef adres belirtilmelidir."
+
+#: usr/local/www/vpn_pptp.php:197 usr/local/www/vpn_pptp_users.php:72
+#: usr/local/www/vpn_pptp_users_edit.php:138
+msgid "VPN PPTP"
+msgstr "VPN PPTP"
+
+#: usr/local/www/vpn_pptp.php:301
+msgid ""
+"PPTP is no longer considered a secure VPN technology because it relies upon "
+"MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware "
+"that intercepted traffic can be decrypted by a third party, so it should be "
+"considered unencrypted. We advise migrating to another VPN type such as "
+"OpenVPN or IPsec.<br /><br /><a href=\"https://isc.sans.edu/diary/End+of+Days"
+"+for+MS-CHAPv2/13807\">Read More</a>"
+msgstr ""
+
+#: usr/local/www/vpn_pptp.php:327
+msgid "Redirect incoming PPTP connections to"
+msgstr "Gelen PPTP bağlantılarını yönlendir"
+
+#: usr/local/www/vpn_pptp.php:330
+msgid "PPTP redirection"
+msgstr "PPTP yönlendirme"
+
+#: usr/local/www/vpn_pptp.php:334
+msgid ""
+"Enter the IP address of a host which will accept incoming PPTP connections"
+msgstr "Gelen PPTP bağlantılarını kabul edecek bir host IP adresi giriniz"
+
+#: usr/local/www/vpn_pptp.php:341
+msgid "Enable PPTP server"
+msgstr "PPTP sunucuyu etkinleÅŸtir"
+
+#: usr/local/www/vpn_pptp.php:344
+msgid "No. PPTP users"
+msgstr "PPTP kullanıcı sayısı"
+
+#: usr/local/www/vpn_pptp.php:358
+msgid "Hint: 10 is ten PPTP clients"
+msgstr "Ä°pucu: 10, on adet PPTP istemcisi demektir"
+
+#: usr/local/www/vpn_pptp.php:366
+msgid ""
+"Enter the IP address the PPTP server should give to clients for use as their "
+"\"gateway\""
+msgstr ""
+"PPTP sunucunun istemcilere \"ağ geçidi\" olarak vereceği IP adresini giriniz"
+
+#: usr/local/www/vpn_pptp.php:379
+msgid "Specify the starting address for the client IP subnet"
+msgstr "İstemci IP altağı için başlangıç adresi belirtiniz"
+
+#: usr/local/www/vpn_pptp.php:383
+msgid "PPTP DNS Servers"
+msgstr "PPTP DNS Sunucuları"
+
+#: usr/local/www/vpn_pptp.php:389
+msgid "primary and secondary DNS servers assigned to PPTP clients"
+msgstr "PPTP istemcilere atanacak birincil ve ikincil DNS sunucu"
+
+#: usr/local/www/vpn_pptp.php:412
+msgid "Secondary RADIUS server for failover authentication"
+msgstr "Yük aktarma kimlik doğrulama için ikincil RADIUS sunucu"
+
+#: usr/local/www/vpn_pptp.php:413
+msgid ""
+"When set, all requests will go to the secondary server when primary fails"
+msgstr ""
+"Ayarlandığında, birincil sunucu yanıt veremediğinde tüm istekler ikincil "
+"sunucuya gidecektir"
+
+#: usr/local/www/vpn_pptp.php:417
+msgid "Issue IP addresses via RADIUS server"
+msgstr "IP adreslerini RADIUS sunucu üzerinden ata"
+
+#: usr/local/www/vpn_pptp.php:421
+msgid "RADIUS NAS IP"
+msgstr "RADIUS NAS IP"
+
+#: usr/local/www/vpn_pptp.php:439 usr/local/www/vpn_pptp.php:456
+msgid ""
+"Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS "
+"server"
+msgstr ""
+"RADIUS sunucunun IP adresini, RADIUS portunu ve RADIUS hesaplandırma portu "
+"belirtiniz"
+
+#: usr/local/www/vpn_pptp.php:459
+msgid "Secondary RADIUS shared secret"
+msgstr "İkincil RADIUS paylaşımlı anahtar"
+
+#: usr/local/www/vpn_pptp.php:463
+msgid ""
+"Enter the shared secret that will be used to authenticate to the secondary "
+"RADIUS server"
+msgstr ""
+"İkincil RADIUS sunucuda kimlik doğrulama için kullanılacak paylaşımlı "
+"anahtarı giriniz"
+
+#: usr/local/www/vpn_pptp.php:473
+msgid "Require 128-bit encryption"
+msgstr "128 bit ÅŸifreleme gerektir"
+
+#: usr/local/www/vpn_pptp.php:474
+msgid ""
+"When set, only 128-bit encryption will be accepted. Otherwise 40-bit and 56-"
+"bit encryption will be accepted as well. Note that encryption will always be "
+"forced on PPTP connections (i.e. unencrypted connections will not be "
+"accepted)"
+msgstr ""
+"Bu seçenek açıldığında sadece 128-bit şifreleme kabul edilir. Aksi taktirde "
+"40 ve 58-bit şifreleme de kabul edilir. PPTP bağlantılarda şifrelemenin her "
+"durumda zorunlu tutulduğunu unutmayınız (şifresiz bağlantı istekleri "
+"reddedilir)"
+
+# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız
+#: usr/local/www/vpn_pptp.php:488
+msgid "don't forget to "
+msgstr "PPTP istemcilerinin erişimine izin vermek için "
+
+# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız
+#: usr/local/www/vpn_pptp.php:488
+msgid "add a firewall rule"
+msgstr "güvenlik duvarı kuralı ekle"
+
+# bu çevirilerde kelime ters olarak işlendiği için (ingilizce altyapısı) çeviri cümlesine dikkate almayınız
+#: usr/local/www/vpn_pptp.php:488
+msgid "to permit traffic from PPTP clients"
+msgstr "meyi unutmayınız"
+
+#: usr/local/www/vpn_pptp_users.php:85
+msgid "The PPTP user list has been modified"
+msgstr "PPTP kullanıcı listesi değiştirildi"
+
+#: usr/local/www/vpn_pptp_users.php:85
+msgid "Warning: this will terminate all current PPTP sessions"
+msgstr "Uyarı: PPTP oturumları sonlandırılacaktır"
+
+#: usr/local/www/vpn_pptp_users_edit.php:91
+msgid "The password cannot start with '!'."
+msgstr "Parola '!' karakteri ile baÅŸlayamaz."
+
+#: usr/local/www/vpn_pptp_users_edit.php:161
+msgid "If you want to change the users' password, enter it here twice."
+msgstr ""
+"Kullanıcıların parolalarını değiştirmek için bu bölüme iki defa giriniz."
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:81
+msgid "Int."
+msgstr "Int."
+
+#: usr/local/www/widgets/widgets/dyn_dns_status.widget.php:134
+msgid "Checking ..."
+msgstr "Kontrol Ediliyor ..."
+
+#: usr/local/www/widgets/widgets/log.widget.php:180
+msgid "IF"
+msgstr "Arabrm"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:38
+msgid "Drive"
+msgstr "Sürücü"
+
+#: usr/local/www/widgets/widgets/smart_status.widget.php:39
+msgid "Ident"
+msgstr "Tanım"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:133
+msgid "Obtaining update status"
+msgstr "Güncelleme durumu alınıyor"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:139
+msgid "Platform"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:157
+msgid "NanoBSD Boot Slice"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:168
+msgid "CPU Type"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:183
+msgid "Hardware crypto"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:188
+msgid "Uptime"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:192
+msgid "Current date/time"
+msgstr "Güncel tarih/saat"
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:198
+msgid "DNS server(s)"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:210
+msgid "Last config change"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:215
+msgid "State table size"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:223
+msgid "Show states"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:227
+msgid "MBUF Usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:239
+msgid "Temperature"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:248
+msgid "Load average"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:254
+msgid "CPU usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:261
+msgid "Memory usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:270
+msgid "SWAP usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/system_information.widget.php:279
+msgid "Disk usage"
+msgstr ""
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:44
+msgid "Computer / Device"
+msgstr "Bilgisayar / Aygıt"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:70
+msgid "Wake Up"
+msgstr "Uyan"
+
+#: usr/local/www/widgets/widgets/wake_on_lan.widget.php:75
+msgid "No saved WoL addresses"
+msgstr "Kayıtlı WoL (Lan ile Uyan) adresleri yok"
+
+#: usr/local/www/wizard.php:66 usr/local/www/wizard.php:72
+#, php-format
+msgid "ERROR: Could not open %s."
+msgstr "HATA: %s açılamadı."
+
+#: usr/local/www/wizard.php:78
+#, php-format
+msgid "ERROR: Could not parse %s/wizards/%s file."
+msgstr "HATA: %s/wizards/%s dosyası ayrıştırılamadı."
+
+#: usr/local/www/wizards/openvpn_wizard.inc:626
+#: usr/local/www/wizards/openvpn_wizard.inc:643
+#, php-format
+msgid "OpenVPN %s wizard"
+msgstr "OpenVPN %s sihirbazı"
+
+# 76%
+#: usr/local/www/wizards/openvpn_wizard.inc:638
+#: usr/local/www/wizards/openvpn_wizard.inc:653
+msgid "OpenVPN Wizard"
+msgstr "OpenVPN Sihirbazı"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:60
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:63
+msgid "You need to specify the number of connections."
+msgstr "Bağlantı sayısını belirtmelisiniz."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:65
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:68
+msgid "The number of connections should be greater than 1."
+msgstr "Bağlantı sayısı 1'den yüksek olmalıdır."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:90
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:104
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:111
+msgid "You have less interfaces than number of connections!"
+msgstr "Bağlantı sayısından az arabirim var!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:302
+msgid "You cannot specify bandwidth smaller than 1!"
+msgstr "Bant genişliği 1'den düşük olamaz!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:313
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:336
+msgid "You cannot select the same interface for local and outside."
+msgstr "Yerel ve dış için aynı arabirimi seçemezsiniz."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:495
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:591
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:538
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:641
+msgid ""
+"Address must be a valid IP address or Firewall Alias. Please correct this "
+"value to continue."
+msgstr ""
+"Adres geçerli bir IP adresi veya Güvenlik Duvarı Grup tanımı olmalıdır. "
+"Devam etmek için hatayı düzeltiniz."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:579
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:608
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:629
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:656
+msgid "Only percentage bandwidth specification is allowed."
+msgstr "Bant genişliği sadece yüzde cinsinden yazılabilir."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:762
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1146
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:811
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1209
+msgid ""
+"Custom Bandwidths are greater than 30%. Please lower them for the wizard to "
+"continue."
+msgstr ""
+"Özel Bant Genişlikleri yüzde 30'dan fazla. Sihirbazın devam edebilmesi için "
+"onları düşürmelisiniz."
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1448
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1517
+msgid "Penalty Box"
+msgstr "Ceza Kutusu"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1455
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1475
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1489
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1506
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1525
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1549
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1628
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1524
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1545
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1559
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1576
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1595
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1619
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1646
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1699
+msgid "Traffic Shaper Wizard"
+msgstr "Trafik Şekillendirme Sihirbazı"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1467
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1537
+msgid "Connections From Upstream SIP Server"
+msgstr "Yukarıakış SIP Sunucu 'dan gelen bağlantılar"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1481
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1551
+msgid "Connections To Upstream SIP Server"
+msgstr "Yukarıakış SIP Sunucu 'ya giden bağlantılar"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:74
+msgid "You need to specify the number of LAN type interfaces."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:79
+msgid "The number of LAN type interfaces should be greater than 1."
+msgstr ""
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:323
+msgid "You cannot specify 0 bandwidth!"
+msgstr "Sıfır \"0\" bant genişliği kullanılamaz!"
+
+#: usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:345
+msgid "You cannot select the same interface twice on local interfaces."
+msgstr "Yerel arabirimlerde aynı arabirimi iki kez seçemezsiniz."
+
+#: usr/local/www/xmlrpc.php:68
+msgid "Authentication failed"
+msgstr "Kimlik doğrulama başarısız"
+
+#: usr/local/www/xmlrpc.php:79
+msgid ""
+"XMLRPC wrapper for eval(). This method must be called with two parameters: a "
+"string containing the local system\\'s password followed by the PHP code to "
+"evaluate."
+msgstr ""
+"eval(). için XMLRPC paketleyici. Bu method iki parametre ile çağrılmalıdır: "
+"yerel sistem\\'lerde bir dize içermeli PHP kodunu sorgulamak için ardından "
+"ÅŸifre girilmelidir."
+
+#: usr/local/www/xmlrpc.php:110
+msgid ""
+"XMLRPC wrapper for mwexec(). This method must be called with two parameters: "
+"a string containing the local system\\'s password followed by an shell "
+"command to execute."
+msgstr ""
+"mwexec(). için XMLPRC paketleyici. Bu method iki parametre ile "
+"çağrılmalıdır: yerel sistem\\'lerde bir dize içermeli komut satırı (shell) "
+"komutunu çalıştırmak için ardından şifre girilmelidir."
+
+#: usr/local/www/xmlrpc.php:134
+msgid ""
+"XMLRPC wrapper for backup_config_section. This method must be called with "
+"two parameters: a string containing the local system\\'s password followed "
+"by an array containing the keys to be backed up."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:162
+msgid ""
+"XMLRPC wrapper for restore_config_section. This method must be called with "
+"two parameters: a string containing the local system\\'s password and an "
+"array to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+# 88%
+#: usr/local/www/xmlrpc.php:229 usr/local/www/xmlrpc.php:320
+#: usr/local/www/xmlrpc.php:351
+#, php-format
+msgid "Merged in config (%s sections) from XMLRPC client."
+msgstr "XMLRPC istemcisinden (%s bölümleri) yapılandırmaya dahil edildi."
+
+#: usr/local/www/xmlrpc.php:296
+msgid ""
+"XMLRPC wrapper for merging package sections. This method must be called with "
+"two parameters: a string containing the local system\\'s password and an "
+"array to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:326
+msgid ""
+"XMLRPC wrapper for merge_config_section. This method must be called with two "
+"parameters: a string containing the local system\\'s password and an array "
+"to merge into the system\\'s config. This function returns true upon "
+"completion."
+msgstr ""
+
+#: usr/local/www/xmlrpc.php:356
+msgid ""
+"Basic XMLRPC wrapper for filter_configure. This method must be called with "
+"one paramater: a string containing the local system\\'s password. This "
+"function returns true upon completion."
+msgstr ""
+"filter_configure için temel XMLRPC paketleyici. Yerel sistem parolasını "
+"içeren bir dize: Bu yöntem, bir parametre ile çağrılmalıdır. Bu işlem "
+"tamamlandıktan sonra doğru yapıldığına dair sonuç gösterir."
+
+#: usr/local/www/xmlrpc.php:393
+msgid "Basic XMLRPC wrapper for configuring CARP interfaces."
+msgstr "CARP arabirimlerini yapılandırmak için temel XMLRPC paketleyici."
+
+#: usr/local/www/xmlrpc.php:420 usr/local/www/xmlrpc.php:441
+msgid ""
+"Basic XMLRPC wrapper for check_firmware_version. This function will return "
+"the output of check_firmware_version upon completion."
+msgstr ""
+"check_firmware_version için temel XMLRPC paketleyici. Bu fonksiyon, "
+"tamamlandıktan sonra check_firmware_version çıkışını gösterecektir."
+
+#: usr/local/www/xmlrpc.php:462
+msgid "Basic XMLRPC wrapper for rc.reboot."
+msgstr "rc.reboot için temel XMLRPC paketleyici."
+
+#~ msgid "PEAR constructor called, class=%s\n"
+#~ msgstr "PEAR kurucu çağırıldığında; sınıf=%s\n"
+
+#~ msgid "PEAR destructor called, class=%s\n"
+#~ msgstr "PEAR silici çağrıldığında, sınıf=%s\n"
+
+#~ msgid "invalid error callback"
+#~ msgstr "geçersiz hata çağrısı"
+
+#~ msgid "invalid error mode"
+#~ msgstr "geçersiz hata yöntemi"
+
+#~ msgid "The expected error you submitted does not exist"
+#~ msgstr "Gönderiniz artık mevcut değil"
+
+#~ msgid "The expected error you submitted is empty"
+#~ msgstr "Beklenen hatayı boş gönderdiniz"
+
+#~ msgid ""
+#~ "PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions"
+#~ msgstr ""
+#~ "PEAR_ERROR_EXCEPTION artık kullanılmıyor, PEAR_ErrorStack için özel sınıf "
+#~ "kullanılıyor."
+
+#~ msgid ""
+#~ "[%s: message=\"%s\" code=%d mode=callback callback=%s prefix=\"%s\" info="
+#~ "\"%s\"]"
+#~ msgstr "[%s: mesaj=\"%s\" kod=%d mod=geri geri=%s ek=\"%s\" bilgi=\"%s\"]"
+
+#~ msgid ""
+#~ "[%s: message=\"%s\" code=%d mode=%s level=%s prefix=\"%s\" info=\"%s\"]"
+#~ msgstr "[%s: mesaj=\"%s\" kod=%d mod=%s seviye=%s ek=\"%s\" bilgi=\"%s\"]"
+
+#~ msgid ""
+#~ "Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/"
+#~ "DNS_rebinding<br/>Try accessing the router by IP address instead of by "
+#~ "hostname."
+#~ msgstr ""
+#~ "Muhtemel DNS tekrar bağlama saldırısı tesbit edildi, açıklama: http://en."
+#~ "wikipedia.org/wiki/DNS_rebinding<br/> Router e host adı yerine IP adresi "
+#~ "ile giriş yapmayı deneyin."
+
+#~ msgid "ERROR! Could not login to server %1$s as user %2$s."
+#~ msgstr "HATA ! Sunucu'ya %1$s kullanıcı olarak %2$s giriş yapılamadı."
+
+#~ msgid "Radius start: %s<br>\n"
+#~ msgstr "Radius başladı: %s<br>\n"
+
+#~ msgid "Radius send failed: %s<br>\n"
+#~ msgstr "Radius başarısız gönderme: %s<br>\n"
+
+#~ msgid "Local Auth"
+#~ msgstr "Yerel kimlik doÄŸrulama"
+
+#~ msgid "Creating outbound rules %1$s - (%2$s)"
+#~ msgstr "%1$s - (%2$s) dışarı giden kuralları oluşturuluyor"
+
+#~ msgid "filter_generate_address: %s is not a valid source port."
+#~ msgstr "filter_generate_address: %s geçerli bir port değildir."
+
+#~ msgid "interface_vlan_confgure called with if undefined."
+#~ msgstr "interface_vlan_confgure denilen eğer tanımsızsa."
+
+#~ msgid "interface_qinq_confgure called with if undefined.%s"
+#~ msgstr "interface_qinq_confgure denilen eğer tanımsızsa.%s"
+
+#~ msgid "Creating other wireless clone interfaces..."
+#~ msgstr "Çoğaltılan diğer kablosuz arabirimler oluşturuluyor..."
+
+#~ msgid "Enable CARP ARP-balancing"
+#~ msgstr "CARP ARP-Dengelemesini EtkinleÅŸtir"
+
+#~ msgid "Disallow CARP preemption"
+#~ msgstr "CARP önalıma izin verme"
+
+#~ msgid "Enable CARP preemption"
+#~ msgstr "CARP önalımı etkinleştır"
+
+#~ msgid "Enable CARP logging"
+#~ msgstr "CARP günlüğünü etkinleştir"
+
+#~ msgid "Could not create rules.boot file!"
+#~ msgstr "rules.boot dosyası oluşturulamadı!"
+
+#~ msgid "Bring up pfsync0 syncpeer"
+#~ msgstr "syncpeer pfsync0 açık"
+
+#~ msgid "Bring up pfsync0 syncdev"
+#~ msgstr "syncdev pfsync0 açık"
+
+#~ msgid "Bring up pfsync0"
+#~ msgstr "pfsync0 açık"
+
+#~ msgid "Allow CARP."
+#~ msgstr "CARP izin ver."
+
+#~ msgid "Disallow CARP."
+#~ msgstr "CARP izin verme."
+
+#~ msgid ""
+#~ "Sorry but we could not find a matching real interface subnet for the "
+#~ "virtual IP address %s."
+#~ msgstr ""
+#~ "Üzgünüm %s Sanal IP adresi ile uyuşan gerçek arabirim altağ bulunamadı."
+
+#~ msgid ""
+#~ "Sorry but we could not find a matching real interface subnet for the "
+#~ "virtual IPv6 address %s."
+#~ msgstr ""
+#~ "Üzgünüm %s Sanal IPv6 adresi ile uyuşan gerçek arabirim altağ bulunamadı."
+
+#~ msgid ""
+#~ "Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for "
+#~ "writing.%s"
+#~ msgstr ""
+#~ "Hata: Yazmak için %s dhclient_%s.conf içinde "
+#~ "interfaces_carpdev_configure() açılamadı"
+
+#~ msgid "Could not bring wanif up in terface_carpdev_dhcp_configure()"
+#~ msgstr "in terface_carpdev_dhcp_configure() wanif açık değil"
+
+#~ msgid ""
+#~ "Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() "
+#~ "for writing.%s"
+#~ msgstr ""
+#~ "Hata: %s yazmak için interfaces_wan_dhcp_configure() yapılandırma içinde "
+#~ "dhclient_%s açılamadı"
+
+#~ msgid "The field '%s' must contain a valid CIDR range."
+#~ msgstr "'%s' Alanı geçerli bir CIDR aralığı içermeli."
+
+#~ msgid "Enabling auto login was not possible."
+#~ msgstr "Otomatik giriş mümkün değil."
+
+#~ msgid "Warning! DHCP Failover setup and no CARP virtual IP's defined!"
+#~ msgstr "Uyarı! DHCP Failover kurulum ve CARP sanal IP'leri tanımlı değil!"
+
+#~ msgid "Started Igmpproxy service sucsesfully."
+#~ msgstr "Igmpproxy servisi başarıyla çalıştırıldı."
+
+#~ msgid "Remvoed cron job for %s"
+#~ msgstr "%s için zamanlandırılmış görev silindi"
+
+#~ msgid "Qlimit must be an positive."
+#~ msgstr "Qlimit pozitif sayı olmalıdır."
+
+#~ msgid "Tbrsize must be an positive."
+#~ msgstr "Tbrsize pozitif sayı olmalıdır."
+
+#~ msgid "Queue limit in packets per second."
+#~ msgstr "Kuyruk Limiti Paket / Sn."
+
+#~ msgid "Plr must be an integer between 1 and 100."
+#~ msgstr "Plr 1 ile 100 tamsayısı arasında olmalıdır."
+
+#~ msgid ""
+#~ "If 'source' or 'destination' is chosen, \n"
+#~ "a dynamic pipe with the bandwidth, delay, packet loss and queue size "
+#~ "given above will \n"
+#~ "be created for each source/destination IP address encountered, \n"
+#~ "respectively. This makes it possible to easily specify bandwidth \n"
+#~ "limits per host."
+#~ msgstr ""
+#~ "'kaynak' veya 'hedef' seçilmişse, \n"
+#~ "sırası ile karşılaşılan her kaynak / varış yeri ip adresi için yukarıda "
+#~ "belirtilen \n"
+#~ "bant genişliği, gecikme, paket kaybı ve kuyruk hacmine sahip dinamik bir "
+#~ "boru oluşturulacaktır. \n"
+#~ "Bu, her ana sistem için bant genişliği sınırının kolayca belirtilmesini "
+#~ "mümkün kılacaktır."
+
+#~ msgid "Initializing PCMCIA..."
+#~ msgstr "PCMCIA başlatılıyor..."
+
+#~ msgid "webConfigurator default"
+#~ msgstr "webArayüzü varsayılan"
+
+#~ msgid "Importing HTTPS certificate"
+#~ msgstr "HTTPS sertifikası içe aktarılıyor"
+
+#~ msgid "Error: cannot open psk.txt in vpn_ipsec_configure()."
+#~ msgstr "Hata: vpn_ipsec_configure(). içindeki psk.txt açılamadı."
+
+#~ msgid "Error: cannot open racoon.conf in vpn_ipsec_configure()."
+#~ msgstr "Hata: vpn_ipsec_configure(). içindeki racoon.conf açılamadı."
+
+#~ msgid "Error: cannot open server %s in vpn.\n"
+#~ msgstr "Hata: vpn içindeki %s sunucusu açılamadı.\n"
+
+#~ msgid "Error: Cannot write phase1 CA certificate file for %s"
+#~ msgstr "Hata: %s CA sertifika aşama 1 dosyasına yazılamadı"
+
+#~ msgid "Error: cannot open spd.conf in vpn_ipsec_configure()."
+#~ msgstr "Hata: vpn_ipsec_configure(). içindeki spd.conf açılamadı."
+
+#~ msgid "Forcefully reloading IPsec racoon daemon"
+#~ msgstr "IPsec racoon servisi zorla yeniden yükleniyor"
+
+#~ msgid "Configuring PPPoE VPN service... "
+#~ msgstr "PPPoE VPN servisi yapılandırılıyor..."
+
+#~ msgid "Could not determine VPN endpoint for '%s'"
+#~ msgstr "'%s' VPN son noktası sonlandırılamıyor"
+
+#~ msgid ""
+#~ "IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1$s' new "
+#~ "EP '%2$s'"
+#~ msgstr ""
+#~ "IPSEC: HATA: Son noktalardan birisi IP adresi deÄŸil. Eski EP '%1$s' yeni "
+#~ "EP '%2$s'"
+
+#~ msgid ""
+#~ "IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG "
+#~ "'%1$s' new RG '%2$s'"
+#~ msgstr ""
+#~ "IPSEC: HATA: Uzak son noktalardan birisi IP adresi deÄŸil. Eski RG '%1$s' "
+#~ "yeni RG '%2$s'"
+
+#~ msgid ""
+#~ "Reloading IPsec tunnel '%1$s'. Previous IP '%2$s', current IP '%3$s'. "
+#~ "Reloading policy"
+#~ msgstr ""
+#~ "'%1$s'. IPsec tüneli yeniden yükleniyor. Önceki IP '%2$s', şimdiki IP "
+#~ "'%3$s'. ilke yeniden yükleniyor"
+
+#~ msgid "XML error at line 1, check URL"
+#~ msgstr "1. satırda XML hatası, URL'yi kontrol ediniz"
+
+#~ msgid ""
+#~ "You are accessing this router by an IP address not configured locally, "
+#~ "which may be forwarded by NAT or other means. <br/><br/>If you did not "
+#~ "setup this forwarding, you may be the target of a man-in-the-middle "
+#~ "attack."
+#~ msgstr ""
+#~ "Bu yönlendiriciye yerelde ayarlanmamış, NAT veya başka bir yöntemle "
+#~ "yönlendirilmiş olabilecek bir IP adresinden erişiyorsunuz. <br/><br/>Eğer "
+#~ "böyle bir yönlendirme ayarlamadıysanız, bir MitM (man-in-the-middle / "
+#~ "araya girilmesi) saldırısı altında olabilirsiniz."
+
+#~ msgid "CmdCHAIN is executing -> %1$s - %2$s"
+#~ msgstr "CmdCHAIN yürütülüyor -> %1$s - %2$s"
+
+#~ msgid "%1$s failed with return code -> %2$s. The command was %3$s"
+#~ msgstr "%1$s başarısız oldu dönen hata kodu: -> %2$s. %3$s komutuydu"
+
+#~ msgid "Only (%s) MB RAM has been detected.%s"
+#~ msgstr "Sadece (%s) MB RAM algılandı. %s"
+
+#~ msgid "%sInvalid interface name '%s'%s)"
+#~ msgstr "%s Geçersiz arabirim adı '%s'%s)"
+
+#~ msgid "(or nothing if finished):%s"
+#~ msgstr "(veya eÄŸer bittiyse herÅŸey): %s"
+
+#~ msgid ""
+#~ "Removing static route for monitor %1$s and adding a new route through %2$s"
+#~ msgstr ""
+#~ "İzlenmesi için %1$s sabit yönlendirmesi siliniyor ve yerine %2$s "
+#~ "yönlendirmesi ekleniyor"
+
+#~ msgid "MONITOR: %s is down, removing from routing group"
+#~ msgstr "İZLEME: %s kapalı, yönlendirme grubundan kaldırılıyor"
+
+#~ msgid "MONITOR: %s has packet loss, removing from routing group"
+#~ msgstr "İZLEME: %s paket kaybı var, yönlendirme grubundan kaldırılıyor"
+
+#~ msgid "MONITOR: %s has high latency, removing from routing group"
+#~ msgstr "İZLEME: %s gecikme oranı yüksek, yönlendirme grubundan kaldırılıyor"
+
+#~ msgid ""
+#~ "Gateways status could not be determined, considering all as up/active."
+#~ msgstr ""
+#~ "Ağ Geçitlerinin durumu belirlenemedi, hepsinin etkin/çalışır durumda "
+#~ "olduğunu gözden geçirin."
+
+#~ msgid "WebCfg - Status: System logs: OpenNTPD page"
+#~ msgstr "WebCfg - Durum: Sistem Kayıtları: OpenNTPD sayfası"
+
+#~ msgid "Allow access to the 'Status: System logs: OpenNTPD' page."
+#~ msgstr ""
+#~ "'Durum: Sistem Kayıtları: OpenNTPD' sayfasını kullanıcının erişime açar."
+
+#~ msgid "WebCfg - Hidden: Exec Raw page"
+#~ msgstr "WebCfg - Gizli: Çalıştır sayfası"
+
+#~ msgid "Allow access to the 'Hidden: Exec Raw' page."
+#~ msgstr "'Gizli: Çalıştır' sayfasını erişilebilir kılar."
+
+#~ msgid "WebCfg - Interfaces: Groups: Edit page"
+#~ msgstr "WebCfg - Arabirimler: Gruplar: Düzenle sayfası"
+
+#~ msgid "Edit Interface groups"
+#~ msgstr "Arabirim gruplarını düzenle"
+
+#~ msgid "WebCfg - Interfaces: LAGG: Edit page"
+#~ msgstr "WebCfg - Arabirimler: LAGG: Düzenle sayfası"
+
+#~ msgid "WebCfg - Interfaces: QinQ: Edit page"
+#~ msgstr "WebCfg - Arabirimler: QinQ: Düzenle sayfası"
+
+#~ msgid "Edit Interface qinq"
+#~ msgstr "Arabirim qinq düzenle"
+
+#~ msgid "WebCfg - Services: DHCPv6 Relay page"
+#~ msgstr "WebCfg - Servisler: DHCPv6 Aracısı sayfası"
+
+#~ msgid "WebCfg - Firewall: Igmpproxy: Edit page"
+#~ msgstr "WebCfg - Güvenlik duvarı: IGMP Vekil: Düzenle sayfası"
+
+#~ msgid "Allow access to the 'Firewall: Igmpproxy' page."
+#~ msgstr "'Güvenlik duvarı: IGMP Vekil' sayfasına erişim yetkisi verir."
+
+#~ msgid "WebCfg - System: User manager: settings page"
+#~ msgstr "WebCfg - Sistem: Kullanıcı Yöneticisi: Ayarlar sayfası"
+
+#~ msgid "Allow access to the 'System: User manager: settings' page."
+#~ msgstr "'Sistem: Kullanıcı Yöneticisi: Ayarlar' sayfasını açar."
+
+#~ msgid "RRD restore failed exited with %1$s, the error is: %2$s%3$s"
+#~ msgstr "RRD grafikleri geri yükleme başarısız %1$s, hata: %2$s%3$s"
+
+#~ msgid "Package Name"
+#~ msgstr "Paket Adı"
+
+#~ msgid "Package Info"
+#~ msgstr "Paket bilgisi"
+
+#~ msgid "Package Version"
+#~ msgstr "Paket Sürümü"
+
+#~ msgid "No info, check the"
+#~ msgstr "Bilgi yok, kontrol edin"
+
+#~ msgid "forum"
+#~ msgstr "forum"
+
+#~ msgid "Do you really want to remove this package?"
+#~ msgstr "Bu paketi kaldırmak istediğinize emin misiniz?"
+
+#~ msgid "Remove this package."
+#~ msgstr "Bu paketi sil."
+
+#~ msgid "Reinstall this package."
+#~ msgstr "Paketi tekrar kur."
+
+#~ msgid "Reinstall this package's GUI components."
+#~ msgstr "Bu paketin arabirim bileÅŸenlerini tekrar kur."
+
+#~ msgid "Status : EasyRule"
+#~ msgstr "Durum: Kolay Kural"
+
+#~ msgid "The list may contain only IP addresses."
+#~ msgstr "Liste sadece IP adresleri içermelidir."
+
+# Sayfada kullanımda olan limitter i silmek istediğinde verilen uyarı.
+#~ msgid ""
+#~ "This pipe/queue is referenced in filter rules, please remove references "
+#~ "from there before deleteing."
+#~ msgstr ""
+#~ "Bu kuyruk / boru filitre kurallarında kullanımda, lütfen silmeden önce "
+#~ "kullanımda olan kuralı kaldırınız."
+
+#~ msgid "Delete virtual interface"
+#~ msgstr "Sanal arabirimi sil"
+
+#~ msgid "Single Lan multi Wan"
+#~ msgstr "Tek LAN çoklu WAN"
+
+#~ msgid "Single Wan multi Lan"
+#~ msgstr "Tek WAN çoklu LAN"
+
+#~ msgid "A valid IP address must be specified, or # for an exclusion."
+#~ msgstr "Ya geçerli bir IP adresi ya da dışta bırakma için # girilmelidir."
+
+#~ msgid "The %s IP address may not be used in a virtual entry."
+#~ msgstr "%s IP adresi sanal girdi olarak kullanılamaz."
+
+#~ msgid "The /32 subnet mask is invalid for CARP IPs."
+#~ msgstr "/32 altağ maskesi CARP IPleri için geçerli değildir."
+
+#~ msgid "The /128 subnet mask is invalid for CARP IPs."
+#~ msgstr "/128 altağ maskesi CARP IPlerii için geçerli değildir."
+
+#~ msgid "There is already a virtual IP entry for the specified IP address."
+#~ msgstr "Belirtilen IP adresi için zaten sanal IP tanımlaması var."
+
+#~ msgid "VHID %s is already in use. Pick a unique number."
+#~ msgstr "VHID %s zaten kullanılıyor. Benzersiz bir numara seçiniz."
+
+#~ msgid "For this type of vip a carp parent is not allowed."
+#~ msgstr "Bu tür sanal IP için CARP ebeveyne izin verilmez."
+
+#~ msgid "For this type of VIP, a CARP parent is not allowed."
+#~ msgstr "Bu tür sanal IP, için CARP ebeveyne izin verilmez."
+
+#~ msgid "This entry cannot be modified because it is still referenced by CARP"
+#~ msgstr "Bu girdi CARP tarafından kullanıldığından düzenlenemez"
+
+#~ msgid ""
+#~ "The load balancer configuration has been changed.<br>You must apply the "
+#~ "changes in order for them to take effect."
+#~ msgstr ""
+#~ "Yük dengeleyici yapılandırması değiştirildi.<br>Değişiklikleri "
+#~ "uygulayarak etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#~ msgid ""
+#~ "The system has been reset to factory defaults and is now rebooting. This "
+#~ "may take one minute."
+#~ msgstr ""
+#~ "Sistem fabrika ayarlarına geri döndürüldü ve yeniden başlatılıyor. Bu "
+#~ "işlem birkaç dakika sürebilir."
+
+#~ msgid "OpenNTPD"
+#~ msgstr "OpenNTPD"
+
+#~ msgid "Easy Rule is still experimental."
+#~ msgstr "Kolay Kural deneyseldir."
+
+#~ msgid "Continue at risk of your own peril."
+#~ msgstr "Sistem kararlılığının bozulabileceğini unutmayın."
+
+#~ msgid "Backups are also nice."
+#~ msgstr "Yedekler güzeldir candır."
+
+#~ msgid "Unknown Gateway/Dynamic"
+#~ msgstr "Bilinmeyen Ağ Geçidi/Dinamik"
+
+#~ msgid "Last %s OpenNTPD log entries"
+#~ msgstr "OpenNTPD son %s olay girdisi"
+
+#~ msgid "Current state count:"
+#~ msgstr "Güncel durum sayımı:"
+
+#~ msgid "A valid IP address must be specified for remote syslog server #1."
+#~ msgstr "Uzak syslog sunucu #1 için geçerli bir IP adresi belirtilmeli."
+
+#~ msgid "A valid IP address must be specified for remote syslog server #2."
+#~ msgstr "Uzak syslog sunucu #2 için geçerli bir IP adresi belirtilmeli."
+
+#~ msgid "A valid IP address must be specified for remote syslog server #3."
+#~ msgstr "Uzak syslog sunucu #3 için geçerli bir IP adresi belirtilmeli."
+
+#~ msgid "Number of log entries to show:"
+#~ msgstr "Gösterilecek günlük girdisi sayısı:"
+
+#~ msgid "Log packets blocked by the default rule"
+#~ msgstr "Varsayılan kural tarafından engellenen paketleri günlüğe kaydet"
+
+#~ msgid ""
+#~ "Hint: packets that are blocked by the implicit default block rule will "
+#~ "not be logged anymore if you uncheck this option. Per-rule logging "
+#~ "options are not affected."
+#~ msgstr ""
+#~ "İpucu: Eğer bu seçeneğin işaretini kaldırırsanız varsayılan kural "
+#~ "tarafından engellenen paketler kayıt altına alınmayacaktır. Kuralların "
+#~ "kendi günlükleme seçenekleri etkilenmez."
+
+#~ msgid ""
+#~ "Hint: If this is checked, filter logs are shown as generated by the "
+#~ "packet filter, without any formatting. This will reveal more detailed "
+#~ "information."
+#~ msgstr ""
+#~ "İpucu: Eğer bu seçeneği işaretlerseniz, filtre günlükleri paket "
+#~ "filtresinin oluşturduğu haliyle, herhangi bir biçimlendirme uygulanmadan "
+#~ "gösterilir. Bu durumda daha fazla detay görüntülenir."
+
+#~ msgid "Enable syslog'ing to remote syslog server"
+#~ msgstr "Syslog kayıtlarının uzak syslog sunucuya gösterilmesi özelliğini aç"
+
+#~ msgid "Remote syslog servers"
+#~ msgstr "Uzak syslog sunucular"
+
+#~ msgid "IP addresses of remote syslog servers"
+#~ msgstr "Uzak syslog sunucularının IP adresleri"
+
+#~ msgid ""
+#~ "syslog sends UDP datagrams to port 514 on the specified remote syslog "
+#~ "server. Be sure to set syslogd on the remote server to accept syslog "
+#~ "messages from"
+#~ msgstr ""
+#~ "syslog UDP verigramlarını 514. porttan UDP olarak uzak syslog sunucusuna "
+#~ "gönderir. Uzak sunucudan syslog mesajlarını kabul etme ayarlarının açık "
+#~ "olduÄŸundan emin olun"
+
+#~ msgid "RRD Backup"
+#~ msgstr "RRD Yedekleme"
+
+#~ msgid "DHCP Leases Backup"
+#~ msgstr "DHCP Kiraları Yedeği"
+
+#~ msgid ""
+#~ "This value can be a domain name or IP address, or subnet in CIDR notation."
+#~ msgstr "Bu değer sunucu adı, IP adresi veya CIDR biçiminde alt ağ olabilir."
+
+#~ msgid "Bind to LAN interface only"
+#~ msgstr "Sadece LAN arabirimine baÄŸlan"
+
+#~ msgid ""
+#~ "This option can be useful when trying to access the SNMP agent by the LAN "
+#~ "interface's IP address through a VPN tunnel terminated on the WAN "
+#~ "interface."
+#~ msgstr ""
+#~ "Bu seçenek SNMP ajanına WAN arabiriminde biten bir VPN tüneli içinden LAN "
+#~ "arabiriminin IP adresine erişmekte kullanılabilir."
+
+#~ msgid "Captiveportal status"
+#~ msgstr "Hizmet Portalı durumu"
+
+#~ msgid "Error occured creating interface, please retry."
+#~ msgstr ""
+#~ "Arabirim oluşturulurken bir hata meydana geldi, lütfen tekrar deneyiniz."
+
+#~ msgid ""
+#~ "Set the transmit hold count for Spanning Tree. This is the num- ber of "
+#~ "packets transmitted before being rate limited. The default is 6. The "
+#~ "minimum is 1 and the maximum is 10."
+#~ msgstr ""
+#~ "Yayım Ağacı tutma sayısını belirleyin. Hız sınırlamasından önce "
+#~ "gönderilen paket sayısıdır. Varsayılan değeri 6'dır. En az 1, en fazla "
+#~ "10 olabilir."
+
+#~ msgid ""
+#~ "Set the Spanning Tree priority of interface to value. The default is "
+#~ "128. The minimum is 0 and the maximum is 240."
+#~ msgstr ""
+#~ "Arabirimin Yayım Ağacı önceliğini ayarlayın. Varsayılan olarak 128, en az "
+#~ "0, en fazla 240'tır."
+
+#~ msgid ""
+#~ "The interface here servers as the local address to be used for the gif "
+#~ "tunnel."
+#~ msgstr ""
+#~ "Buradaki arabirim GIF tüneli olarak kullanılacak yerel uca karşılık gelir."
+
+#~ msgid "ECN friendly behaviour"
+#~ msgstr "ECN dostu davranış"
+
+#~ msgid "GRE remote address"
+#~ msgstr "GRE uzak adres"
+
+#~ msgid "GRE tunnel local address "
+#~ msgstr "GRE tüneli yerel adresi"
+
+#~ msgid "Local GRE tunnel endpoint"
+#~ msgstr "Yerel GRE tüneli ucu"
+
+#~ msgid "GRE tunnel remote address "
+#~ msgstr "GRE tünel uzak adresi "
+
+#~ msgid ""
+#~ "Remote GRE address endpoint. The subnet part is used for the determining "
+#~ "the network that is tunneled."
+#~ msgstr ""
+#~ "Uzak GRE adres ucu. Altağ kısmı tünellenen ağı belirlemekte kullanılır."
+
+#~ msgid "Mobile tunnel"
+#~ msgstr "Mobil tünel"
+
+#~ msgid "Specify which encapsulation method the tunnel should use. "
+#~ msgstr "Tünelin hangi sarmalama yöntemini kullanacağını seçiniz. "
+
+#~ msgid ""
+#~ "Specify which WCCP encapsulation(version 1 or 2) method the tunnel should "
+#~ "use"
+#~ msgstr ""
+#~ "Tünelin hangi WCCP sarmalama yöntemini (sürüm 1 veya 2) kullanacağını "
+#~ "belirtin"
+
+#~ msgid "add a new alias"
+#~ msgstr "yeni grup ekle"
+
+#~ msgid "Sorry, an interface is already named %s."
+#~ msgstr "Üzgünüm,%s adında bir arabirim zaten var."
+
+#~ msgid ""
+#~ "The alias name must be less than 32 characters long and may only consist "
+#~ "of the characters"
+#~ msgstr ""
+#~ "Grup adı sadece karakterlerden oluşmalıdır ve 32 karakteri geçmemelidir"
+
+#~ msgid "You must provide a valid URL. Could not fetch usable data."
+#~ msgstr "Geçerli bir URL girmelisiniz. Kullanılabilir veri toplanamadı."
+
+#~ msgid "%1$s is not a valid %2$s alias."
+#~ msgstr "%1$s geçerli bir %2$s grup adı değil."
+
+#~ msgid "URL Table"
+#~ msgstr "URL Tablosu"
+
+#~ msgid "Update Freq."
+#~ msgstr "Güncelleme Sıklığı."
+
+#~ msgid ""
+#~ "Enter as many hosts as you would like. Hosts must be specified by their "
+#~ "IP address."
+#~ msgstr ""
+#~ "İstediğiniz sayıda istemci adresi girebilirsiniz. İstemcileri IP "
+#~ "adresleriyle girebilirsiniz."
+
+#~ msgid ""
+#~ "Enter as many ports as you wish. Port ranges can be expressed by "
+#~ "seperating with a colon."
+#~ msgstr ""
+#~ "İstediğiniz sayıda port girebilirsiniz. Port aralığı belirtmek için iki "
+#~ "sayı arasına girmelisiniz."
+
+#~ msgid "subnet"
+#~ msgstr "altaÄŸ"
+
+#~ msgid ""
+#~ "%s is not a valid local port. It must be a port alias or integer between "
+#~ "1 and 65535."
+#~ msgstr ""
+#~ "%s geçerli bir yerel port değil. Bir port grubu yada 1 ile 65535 arası "
+#~ "sayı olmalıdır."
+
+#~ msgid ""
+#~ "HINT: This prevents the rule from automatically syncing to other CARP "
+#~ "members"
+#~ msgstr ""
+#~ "İpucu: Bu seçenek kuralın otomatik olarak diğer CARP üyelerine "
+#~ "gönderilmesini engeller"
+
+#~ msgid "Auto created rule for ISAKMP - %1$s to %2$s"
+#~ msgstr "ISAKMP için oluşturulan otomatik kural %1$s - %2$s"
+
+#~ msgid "Auto created rule for %1$s to %2$s"
+#~ msgstr "%1$s - %2$s için otomatik oluşturulan kural"
+
+#~ msgid "Auto created rule for localhost to %1$s"
+#~ msgstr "localhost ile %1$s arasında otomatik oluşturulan kural"
+
+#~ msgid "Auto created rule for PPTP server"
+#~ msgstr "PPTP sunucu için otomatik oluşturulmuş kural"
+
+#~ msgid "Auto created rule for PPPoE server"
+#~ msgstr "PPPoE sunucu için otomatik oluşturulmuş kural"
+
+#~ msgid "Auto created rule for L2TP server"
+#~ msgstr "L2TP sunucu için otomatik oluşturulmuş kural"
+
+#~ msgid "Auto created rule for OpenVPN server"
+#~ msgstr "OpenVPN sunucu için otomatik oluşturulmuş kural"
+
+#~ msgid "add a new nat based on this one"
+#~ msgstr "Bu kuralı temel alan yeni NAT ekle"
+
+#~ msgid ""
+#~ "With automatic outbound NAT enabled, a mapping is automatically created "
+#~ "for each interface's subnet (except WAN-type connections) and the rules "
+#~ "on this page are ignored.<br/><br/> If manual outbound NAT is enabled, "
+#~ "outbound NAT rules will not be automatically generated and only the "
+#~ "mappings you specify on this page will be used. <br/><br/> If a target "
+#~ "address other than a WAN-type interface's IP address is used, then "
+#~ "depending on the way the WAN connection is setup, a "
+#~ msgstr ""
+#~ "Dışa otomatik NAT etkinleştirildiğinde, WAN türü bağlantılar hariç her "
+#~ "arabirimin alt ağı için otomatik olarak bir eşleme oluşturulur ve bu "
+#~ "sayfadaki kurallar gözardı edilir.<br/><br/>Eğer elle NAT "
+#~ "etkinleştirilmişse, otomatik NAT kuralları oluşturulmaz ve sadece bu "
+#~ "sayfada belirttiğiniz eşlemeler kullanılır.<br/><br/>WAN türü dışındaki "
+#~ "bir arabirimin IP adresi hedef adres olarak kullanılırsa, WAN bağlantı "
+#~ "yapılandırmasına bağlı olarak bir "
+
+#~ msgid ""
+#~ "To completely disable outbound NAT, switch to Manual Outbound NAT then "
+#~ "delete any NAT rules that appear in the list."
+#~ msgstr ""
+#~ "Dışa NAT'ı tamamen kapatmak için Elle Dışa NAT'a geçin ve listedeki tüm "
+#~ "NAT kurallarını silin."
+
+#~ msgid "You must supply a valid port for the nat port entry."
+#~ msgstr "NAT port girişi için geçerli bir port belirtmelisiniz."
+
+#~ msgid ""
+#~ "(leave \n"
+#~ "blank for any)"
+#~ msgstr ""
+#~ "(Tümü \n"
+#~ "için boş bırakınız)"
+
+#~ msgid ""
+#~ "(leave blank for \n"
+#~ "any)"
+#~ msgstr ""
+#~ "(Tümü \n"
+#~ "için boş bırakınız)"
+
+#~ msgid ""
+#~ "Also note that if you are trying to redirect connections on the LAN "
+#~ "select the \"any\" option."
+#~ msgstr ""
+#~ "Ayrıca LAN üzerinde bağlantıları yeniden yönlendirmek istiyorsanız "
+#~ "\"herhangi biri\" seçeneğini seçmeniz gerekir."
+
+#~ msgid ""
+#~ "HINT: This prevents the rule from automatically syncing to other CARP "
+#~ "members."
+#~ msgstr ""
+#~ "İpucu: Diğer CARP üyelerine otomatik olarak bu kuralın gönderilmesini "
+#~ "engeller."
+
+#~ msgid ""
+#~ "The settings have been applied. The firewall rules are now reloading in "
+#~ "the background.<br/>You can also %s monitor %s the reload progress"
+#~ msgstr ""
+#~ "Yapılandırma uygulandı. Güvenlik duvarı kuralları arka planda yükleniyor."
+#~ "<br/>Aynı zamanda %2$s yükleme durumunu %1$s izleyebilirsiniz"
+
+#~ msgid ""
+#~ "The firewall rule configuration has been changed.<br>You must apply the "
+#~ "changes in order for them to take effect."
+#~ msgstr ""
+#~ "Güvenlik duvarı kuralları değiştirildi.<br/>Değişiklikleri uygulayarak "
+#~ "etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#~ msgid "Reject type rules only works when the protocol is set to TCP."
+#~ msgstr "Reddet kuralları sadece protokol TCP ise kullanılabilir."
+
+#~ msgid "Queue type rules only work with queues."
+#~ msgstr "Sıra türü kurallar sadece sıralarda işe yarar."
+
+#~ msgid "You can not assign a IPv4 gateway group on IPv6 Address Family rule"
+#~ msgstr "IPv4 ağ geçidi grubunu IPv6 Adres Ailesi kuralına atayamazsınız"
+
+#~ msgid "You can not assign a IPv6 gateway group on IPv4 Address Family rule"
+#~ msgstr "IPv6 ağ geçidi grubunu IPv4 Adres Ailesi kuralına atayamazsınız"
+
+#~ msgid "You can not assign the IPv4 Gateway to a IPv6 Filter rule"
+#~ msgstr "IPv4 Ağ geçidini IPv6 Filtre kuralına atayamazsınız"
+
+#~ msgid "You can not assign the IPv6 Gateway to a IPv4 Filter rule"
+#~ msgstr "IPv6 Ağ geçidini IPv4 Filtre kuralına atayamazsınız"
+
+#~ msgid ""
+#~ "You cannot select one queue and one virtual interface for IN and Out. "
+#~ "both must be from the same type."
+#~ msgstr ""
+#~ "Giriş ve Çıkış için bir kuyruk ve bir de sanal arabirim seçemezsiniz. "
+#~ "İkisi de aynı türden olmalıdır."
+
+#~ msgid " subnet"
+#~ msgstr " altaÄŸ"
+
+#~ msgid "Note: this only works for TCP rules"
+#~ msgstr "Not: Bu ayar sadece TCP kurallarında çalışır"
+
+#~ msgid " Maximum number of established connections per host"
+#~ msgstr " Host başına maksimum kurulu bağlantı sayısı"
+
+#~ msgid "Maximum new connections / per second(s)"
+#~ msgstr "Saniyede kurulabilecek en fazla yeni bağlantı(lar)"
+
+#~ msgid "State Timeout in seconds"
+#~ msgstr "Saniye cinsinden durum zaman aşımı"
+
+#~ msgid ""
+#~ "Hint: This prevents the rule from automatically syncing to other CARP "
+#~ "members."
+#~ msgstr ""
+#~ "İpucu: Bu seçenek, diğer CARP üyelerine otomatik olarak bu kuralın "
+#~ "gönderilmesini engeller."
+
+#~ msgid ""
+#~ "Click individual date to select that date only. Click the appropriate "
+#~ "weekday Header to select all occurences of that weekday."
+#~ msgstr ""
+#~ "Belirli bir tarihi seçme için o tarihe tıklayın. Haftanın belirli bir "
+#~ "gününü seçmek için haftanın günü başlığına tıklayın."
+
+#~ msgid "Revert to this configuration?"
+#~ msgstr "Bu yapılandırmaya geri dönülsün mü?"
+
+#~ msgid "Delete this configuration backup?"
+#~ msgstr "Bu yapılandırma yedeği silinsin mi?"
+
+#~ msgid "This entry cannot be deleted because it is still referenced by CARP"
+#~ msgstr "Bu girdi CARP tarafından kullanıldığı için silinemez"
+
+#~ msgid ""
+#~ "This entry cannot be deleted because it is still referenced by ip alias "
+#~ "entry"
+#~ msgstr "Bu girdi bir IP grup girdisinde kullanıldığı için silinemez"
+
+#~ msgid ""
+#~ "This interface is referenced by VIPs please delete those before setting "
+#~ "the interface to 'none' configuration."
+#~ msgstr ""
+#~ "Bu arabirime bağlı sanal IPler olduğu için arabirimi 'hiçbiri' olarak "
+#~ "değiştirmeden önce onları silmelisiniz."
+
+#~ msgid "The MTU must be greater than 576 bytes."
+#~ msgstr "MTU değeri 576 bayttan yüksek olmalıdır."
+
+#~ msgid "The MSS must be greater than 576 bytes."
+#~ msgstr "MSS Değeri 576 bayttan yüksek olmalıdır."
+
+#~ msgid "Interface %s dynamic gateway"
+#~ msgstr "Arabirim %s dinamik ağ geçidi"
+
+#~ msgid ""
+#~ "If you leave this field blank, the adapter's default MTU will be used. "
+#~ "This is typically 1500 bytes but can vary on some hardware."
+#~ msgstr ""
+#~ "Bu alanı boş bırakırsanız, ağ kartının varsayılan MTU değeri kullanılır. "
+#~ "Varsayılan değer bir çok donanım için 1500 bayttır."
+
+#~ msgid ""
+#~ "If this interface is an Internet connection, select an existing Gateway "
+#~ "from the list or add one using the link above"
+#~ msgstr ""
+#~ "Eğer bu arabirim bir internet bağlantısı ise listedeki ağ geçitlerinden "
+#~ "birini seçin veya yukarıdaki bağlantıyı kullanarak yeni bir tane ekleyin"
+
+#~ msgid ""
+#~ "If this interface is an Internet connection, select an existing Gateway "
+#~ "from the list or add a new one using the link above"
+#~ msgstr ""
+#~ "Bu arabirim internet bağlantısı ise, mevcut ağ geçidini listeden seçiniz "
+#~ "yada aşağıdaki linki kullanarak bir tane ekleyiniz"
+
+#~ msgid "DHCPv6 Prefix Delegation ID"
+#~ msgstr "DHCPv6 Önek Yetkilendirme Kimliği"
+
+#~ msgid ""
+#~ "This ID sets the delegated DHCP-PD prefix number which will be used to "
+#~ "setup the interface."
+#~ msgstr ""
+#~ "Bu Kimlik arabirim kurulumu için yetkilendirilecek DHCP-PD önek "
+#~ "numarasını belirler."
+
+#~ msgid "DHCP client configuration"
+#~ msgstr "DHCP istemci yapılandırması"
+
+#~ msgid "DHCP6 client configuration"
+#~ msgstr "DHCP6 istemci yapılandırması"
+
+#~ msgid "WPA Pre Shared Key"
+#~ msgstr "WPA Önpaylaşımlı Anahtar"
+
+#~ msgid "Pre Shared Key"
+#~ msgstr "Önpaylaşımlı Anahtar"
+
+#~ msgid ""
+#~ "Interface mismatch detected. Please resolve the mismatch and click "
+#~ "Save. The firewall will reboot afterwards."
+#~ msgstr ""
+#~ "Arabirim uyumsuzluğu tespit edildi. Uyumsuzluğu düzelterek kaydediniz. "
+#~ "Ardından Güvenlik Duvarı yeniden başlatılacak."
+
+#~ msgid ""
+#~ "The interface configuration has been changed.<br>You must apply the "
+#~ "changes in order for them to take effect."
+#~ msgstr ""
+#~ "Arabirim yapılandırması değiştirildi.<br> Değişiklikleri uygulayarak "
+#~ "etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#~ msgid "add interface"
+#~ msgstr "arabirim ekle"
+
+#~ msgid "Perform Self Tests"
+#~ msgstr "Testleri Uygula"
+
+#~ msgid "Self Test"
+#~ msgstr "Kendi kendini Test"
+
+#~ msgid "bytes"
+#~ msgstr "bayt"
+
+#~ msgid "age"
+#~ msgstr "süre"
+
+#~ msgid "dest"
+#~ msgstr "hedef"
+
+#~ msgid "dport"
+#~ msgstr "hport"
+
+#~ msgid "exp"
+#~ msgstr "dolum"
+
+#~ msgid "peak"
+#~ msgstr "zirve"
+
+#~ msgid "pkt"
+#~ msgstr "pkt"
+
+#~ msgid "size"
+#~ msgstr "boyut"
+
+#~ msgid "sport"
+#~ msgstr "kport"
+
+#~ msgid "src"
+#~ msgstr "kaynak"
+
+#~ msgid "2002-2007 by Manuel Kasper"
+#~ msgstr "2002-2007 Manuel Kasper"
+
+#~ msgid "The following persons have contributed code to m0n0wall"
+#~ msgstr "Aşağıdaki kişiler m0n0wall'a kod katkısında bulunmuştur"
+
+#~ msgid "Diagnostics: Ping function; WLAN channel auto-select; DNS forwarder"
+#~ msgstr ""
+#~ "Araçlar: Ping fonksiyonu; WLAN kanalı otomatik seçimi; DNS yönlendirici"
+
+#~ msgid "Timezone and NTP client support"
+#~ msgstr "Zaman dilimi ve NTP istemci desteÄŸi"
+
+#~ msgid ""
+#~ "Remote syslog'ing; some code bits for DHCP server on optional interfaces"
+#~ msgstr ""
+#~ "Uzak syslog'lama; isteğe bağlı arabirimlerde DHCP sunucu için bir miktar "
+#~ "kod"
+
+#~ msgid ""
+#~ "Idea/code bits for encrypted webConfigurator passwords; minimalized SNMP "
+#~ "agent"
+#~ msgstr ""
+#~ "Şifrelenmiş webArayüzü parolaları için fikir ve kod parçaları; "
+#~ "küçültülmüş SNMP ajanı"
+
+#~ msgid "Advanced outbound NAT: destination selection"
+#~ msgstr "Gelişmiş dış NAT: hedef seçimi"
+
+#~ msgid "Filtering bridge patches "
+#~ msgstr "Filtreleme köprü yamaları "
+
+#~ msgid ""
+#~ "Filter rule patches (ordering, block/pass, disabled); better status page;"
+#~ msgstr ""
+#~ "Filtre kural yamaları (sıralama, engelle/izin ver, devre dışı); daha iyi "
+#~ "durum sayfası;"
+
+#~ msgid "webConfigurator assign network ports page "
+#~ msgstr "webArayüzü ağ portları atama sayfası "
+
+#~ msgid "enhanced "
+#~ msgstr "geliÅŸtirilmiÅŸ "
+
+#~ msgid "execute command"
+#~ msgstr "komut çalıştır"
+
+#~ msgid " page"
+#~ msgstr " sayfa"
+
+#~ msgid "DHCP client: send hostname patch"
+#~ msgstr "DHCP istemci: host adı yaması gönder"
+
+#~ msgid "DHCP lease list page"
+#~ msgstr "DHCP Kira Listesi sayfası"
+
+#~ msgid "type filter rules; dial-on-demand"
+#~ msgstr "tür filtre kuralları; gerektiğinde bağlan"
+
+#~ msgid "SVG-based traffic grapher"
+#~ msgstr "SVG tabanlı trafik grafiği"
+
+#~ msgid "per-user IP address assignments for PPTP VPN"
+#~ msgstr "PPTP-VPN için kulanıcı bazlı IP ataması"
+
+#~ msgid "NAT on optional interfaces"
+#~ msgstr "Opsiyonel Arabirim NAT"
+
+#~ msgid "captive portal: pass-through MAC/IP addresses, RADIUS authentication"
+#~ msgstr "Hizmet Portalı: İzinli Mac / IP adresler, RADIUS kimlik doğrulama"
+
+#~ msgid "accounting;"
+#~ msgstr "hesaplandırma;"
+
+#~ msgid "HTTP server concurrency limit"
+#~ msgstr "HTTP sunucu eş zamanlı kullanım limiti"
+
+#~ msgid ""
+#~ "traffic shaper TOS matching; magic shaper; DHCP deny unknown clients;"
+#~ msgstr ""
+#~ "trafik şekillendirici TOS eşleme; özel şekillendirici; DHCP bilinmeyen "
+#~ "istemcileri reddet;"
+
+#~ msgid "IPsec user FQDNs; DHCP relay"
+#~ msgstr "IPsec kullanıcı FQDN'leri; DHCP aktarım"
+
+#~ msgid "IDE hard disk standby"
+#~ msgstr "IDE sabit disk bekleme"
+
+#~ msgid "CPU/memory usage display"
+#~ msgstr "CPU/Hafıza kullanım görünümü"
+
+#~ msgid "OpenVPN support"
+#~ msgstr "OpenVPN DesteÄŸi"
+
+#~ msgid ""
+#~ "The author of %s would like to thank the authors of these software "
+#~ "packages for their efforts"
+#~ msgstr ""
+#~ "%s yazarları şu yazılım paketlerinin yazarlarına teşekkürü bir borç bilir"
+
+#~ msgid " 1994-2003 FreeBSD, Inc. All rights reserved"
+#~ msgstr " 1994-2003 FreeBSD, Inc. Her hakkı saklıdır"
+
+#~ msgid "1999 - 2003 The PHP Group. All rights reserved"
+#~ msgstr "1999 - 2003 The PHP Group. Her hakkı saklıdır"
+
+#~ msgid " 2004 by Jan Kneschke "
+#~ msgstr " 2004 Jan Kneschke "
+
+#~ msgid "1996-2003 Internet Software Consortium. All rights reserved."
+#~ msgstr "1996-2003 Internet Software Consortium. Her hakkı saklıdır."
+
+#~ msgid "Racoon"
+#~ msgstr "Racoon"
+
+#~ msgid "BPALogin"
+#~ msgstr "BPA GiriÅŸ"
+
+#~ msgid "lightweight portable BIDS2 login client"
+#~ msgstr "hafif ve taşınabilir BIDS2 oturum açma istemcisi"
+
+#~ msgid " 2001-3 Shane Hyde, and others."
+#~ msgstr " 2001-3 Shane Hyde, vd."
+
+#~ msgid "The hostname may only contain the characters a-z, 0-9 and '-'."
+#~ msgstr ""
+#~ "Host adı sadece İngilizce a-z, 0-9 ve '-' karakterlerini içerebilir."
+
+#~ msgid "'."
+#~ msgstr "'."
+
+#~ msgid "A valid TCP/IP port must be specified for the webConfigurator port."
+#~ msgstr "webArayüzü için geçerli br TCP/IP portu belirtilmelidir."
+
+#~ msgid ""
+#~ "Enter IP addresses to by used by the system for DNS resolution.These are "
+#~ "also used for the DHCP service, DNS forwarder and for PPTP VPN clients."
+#~ msgstr ""
+#~ "DNS çözümleme için sistemin kullanacağı IP adreslerini girin. Bu IPler "
+#~ "DHCP servisi, DNS yönlendirme ve PPTP VPN istemciler için de "
+#~ "kullanılırlar."
+
+#~ msgid ""
+#~ "By default localhost (127.0.0.1) will be used as the first DNS server "
+#~ "where the DNS forwarder is enabled, so system can use the DNS forwarder "
+#~ "to perform lookups. Checking this box omits localhost from the list of "
+#~ "DNS servers."
+#~ msgstr ""
+#~ "Öntanımlı olarak, DNS yönlendirici etkinleştirildiyse, DNS "
+#~ "yönlendiricinin isim çözümleyebilmesi için, localhost (127.0.0.1) ilk DNS "
+#~ "sunucu olarak kullanılır. Bu kutuyu işaretlerseniz localhost DNS "
+#~ "sunuculara yazılmaz."
+
+#~ msgid "Please select kernel type"
+#~ msgstr "Lütfen çekirdek tipini seçiniz"
+
+#~ msgid "Multiprocessor kernel"
+#~ msgstr "Çok işlemcili çekirdek"
+
+#~ msgid "Uniprocessor kernel"
+#~ msgstr "Tek işlemcili çekirdek"
+
+#~ msgid "Embedded kernel"
+#~ msgstr "Gömülü çekirdek"
+
+#~ msgid "Developers kernel"
+#~ msgstr "Geliştirici çekirdeği"
+
+#~ msgid "Use a URL server for firmware upgrades other than"
+#~ msgstr ""
+#~ "Şunun dışındaki Üretici yazılımı güncellemeleri için bir URL sunucu kullan"
+
+#~ msgid ""
+#~ "When a custom URL is enabled, the system will not verify the digital "
+#~ "signature from %s."
+#~ msgstr ""
+#~ "Özel bir URL girildiğinde, sistem %s dijital imzasını kontrol etmez."
+
+#~ msgid "A route to this destination network already exists."
+#~ msgstr "Bu hedef ağa bir yönlendirme sistemde mevcut."
+
+#~ msgid "Pre-shared keys"
+#~ msgstr "Ön paylaşımlı anahtarlar"
+
+#~ msgid "add phase1 entry"
+#~ msgstr "aÅŸama 1 girdisi ekle"
+
+#~ msgid "System:Advanced:Miscellaneous"
+#~ msgstr "Sistem: GeliÅŸmiÅŸ: DiÄŸer"
+
+#~ msgid "Pre-shared key"
+#~ msgstr "Ön paylaşımlı anahtar"
+
+#~ msgid "Do you really want to delete this pre-shared key?"
+#~ msgstr "Bu Ön paylaşımlı anahtarı silmek istediğinizden emin misiniz?"
+
+#~ msgid "VPN: IPsec: Edit pre-shared key"
+#~ msgstr "VPN: IPsec: Ön paylaşımlı anahtarı düzenle"
+
+#~ msgid "edit pppoe instance"
+#~ msgstr "PPPoE düzenle"
+
+#~ msgid "The port must be an integer between 1 and 65535."
+#~ msgstr "Port 1 ile 65535 arasında bir tamsayı olmalıdır."
+
+#~ msgid "%s is not a valid IP address (in \"enabled\" list)."
+#~ msgstr "%s geçerli bir IP adresi değil (\"açık\" listesinde)."
+
+#~ msgid "%s is not a valid IP address (in \"disabled\" list)."
+#~ msgstr "%s geçerli bir IP adresi değil (\"kapalı\" listesinde)."
+
+#~ msgid "%s is not a valid IP address."
+#~ msgstr "%s geçerli bir IP adresi değil."
+
+#~ msgid ""
+#~ "This is the server that clients will be redirected to if *ALL* servers in "
+#~ "the pool are offline."
+#~ msgstr ""
+#~ "Havuzdaki *HİÇBİR* sunucu erişilemez ise istemcilerin yönlendirilecek "
+#~ "sunucudur."
+
+#~ msgid "Do you really want to install this package?"
+#~ msgstr "Bu paketi kurmak istediÄŸinize emin misiniz?"
+
+#~ msgid "completed."
+#~ msgstr "tamamlandı."
+
+#~ msgid "You are not allowed to access this page."
+#~ msgstr "Bu sayfaya eriÅŸim yetkiniz yoktur."
+
+#~ msgid "Invalid Meter ID"
+#~ msgstr "Geçersiz Metre Kimliği"
+
+#~ msgid "UPLOAD completed"
+#~ msgstr "YÜKLEME tamamlandı"
+
+#~ msgid "Uploading Files... Please wait..."
+#~ msgstr "Dosyalar yükleniyor... Lütfen bekleyiniz..."
+
+#~ msgid "Uploading files..."
+#~ msgstr "Dosyalar yükleniyor..."
+
+#~ msgid "Time Remaining:"
+#~ msgstr "Kalan Zaman:"
+
+#~ msgid "Speed:"
+#~ msgstr "Hız:"
+
+#~ msgid "KB/sec"
+#~ msgstr "KB/sn"
+
+#~ msgid "Uploaded:"
+#~ msgstr "Yüklenen:"
+
+#~ msgid "File Size:"
+#~ msgstr "Dosya Boyutu:"
+
+#~ msgid "Completed:"
+#~ msgstr "Tamamlanan:"
+
+#~ msgid " Yes "
+#~ msgstr " Evet "
+
+#~ msgid "Certificate and key must be specified for HTTPS login."
+#~ msgstr "HTTPS oturumu için sertifika ve anahtar belirtilmelidir."
+
+#~ msgid "This intermmediate certificate does not appear to be valid."
+#~ msgstr "Bu ara sertifika geçerli görünmüyor."
+
+#~ msgid "This key does not appear to be valid."
+#~ msgstr "Anahtar geçerli değil."
+
+#~ msgid "Pass-through MAC"
+#~ msgstr "Ä°zinli MAC"
+
+#~ msgid ""
+#~ "This setting limits the number of concurrent connections to the captive "
+#~ "portal HTTP(S) server. This does not set how many users can be logged in "
+#~ "to the captive portal, but rather how many users can load the portal page "
+#~ "or authenticate at the same time! Default is 4 connections per client IP "
+#~ "address, with a total maximum of 16 connections."
+#~ msgstr ""
+#~ "Bu ayar Hizmet Portalı HTTP(S) sunucusuna aynı anda yapılabilecek "
+#~ "bağlantı sayısını sınırlar. Hizmet Portalına oturum açabilecek kullanıcı "
+#~ "sayısı değil, aynı anda oturum ekranını görebilecek kullanıcı sayısıdır. "
+#~ "Varsayılan değeri istemci IP adresi başına 4'tür, toplam 16'dır."
+
+#~ msgid "Pass-through MAC tab"
+#~ msgstr "Ä°zinli MAC sekmesi"
+
+#~ msgid "PMS authentication"
+#~ msgstr "PMS kimlik doÄŸrulama"
+
+#~ msgid "Enable PMS authentication"
+#~ msgstr "PMS kimlik doğrulamayı etkinleştir"
+
+#~ msgid ""
+#~ "If this option is set, users will be authenticated through the PMS "
+#~ "backend if they fill the necessary information in the login page."
+#~ msgstr ""
+#~ "Bu seçenek ayarlanırsa, kullanıcılar PMS arka uç biriminde doğrulanır "
+#~ "eğer gerekli ise giriş ekranında bilgilendirmeyi doldurunuz."
+
+#~ msgid "Tertiary RADIUS server"
+#~ msgstr "Üçüncü RADIUS sunucu"
+
+#~ msgid "Quaternary RADIUS server"
+#~ msgstr "Dördüncü RADIUS sunucu"
+
+#~ msgid "singledash"
+#~ msgstr "tek çizgi"
+
+#~ msgid "ietf"
+#~ msgstr "ietf"
+
+#~ msgid "cisco"
+#~ msgstr "cisco"
+
+#~ msgid "unformatted"
+#~ msgstr "düz"
+
+#~ msgid ""
+#~ "If enabled, the username and password will be transmitted over an HTTPS "
+#~ "connection to protect against eavesdroppers. A server name, certificate "
+#~ "and matching private key must also be specified below."
+#~ msgstr ""
+#~ "Etkinleştirildiğinde kullanıcı adı ve şifre dinlenmelerini engellemek "
+#~ "için HTTPS üzerinden gönderilecektir. Bir sunucu adı, sertifika ve "
+#~ "bunlara uyumlu özel anahtar aşağıda tanımlanmalıdır."
+
+#~ msgid "HTTPS certificate"
+#~ msgstr "HTTPS sertifikası"
+
+#~ msgid "Paste a signed certificate in X.509 PEM format here."
+#~ msgstr "İmzalı sertifikayı x.509 PEM formatında bu alana yapıştırınız."
+
+#~ msgid "HTTPS private key"
+#~ msgstr "HTTPS özel anahtar"
+
+#~ msgid "Paste an RSA private key in PEM format here."
+#~ msgstr "RSA özel anahtarını PEM formatında bu alana yapıştırınız."
+
+#~ msgid "HTTPS intermediate certificate"
+#~ msgstr "HTTPS ara sertifika"
+
+#~ msgid ""
+#~ "Adding allowed IP addresses will allow IP access to/from these addresses "
+#~ "through the captive portal without being taken to the portal page. This "
+#~ "can be used for a web server serving images for the portal page or a DNS "
+#~ "server on another network, for example. By specifying <em>from</em> "
+#~ "addresses, it may be used to always allow pass-through access from a "
+#~ "client behind the captive portal."
+#~ msgstr ""
+#~ "Eklenen izinli IP adresleri oturum açma sayfasına yönlendirilmeden IP "
+#~ "erişimine izin verilen adreslerdir. Bu özelliği başka bir ağdan hizmet "
+#~ "portalına resim gönderen bir web sunucu gibi sistemlere erişim vermek "
+#~ "için kullanabilirsiniz. <em>Kaynak</em> adresleri belirterek Hizmet "
+#~ "Portalının arkasındaki bir istemciye her zaman erişim izni verilebilir."
+
+#~ msgid "the IP address are allowed"
+#~ msgstr "izin verilen IP adresi"
+
+#~ msgid ""
+#~ "to always allow an IP address through the captive portal (without "
+#~ "authentication)"
+#~ msgstr ""
+#~ "bir IP adresininin Hizmet Portalından (kimlik doğrulama olmaksızın) "
+#~ "geçişine izin ver"
+
+#~ msgid ""
+#~ "to allow access from all clients (even non-authenticated ones) behind the "
+#~ "portal to this IP address"
+#~ msgstr ""
+#~ "Portalın arkasındaki tüm istemcilerden (kimliği doğrulanmamışlar dahil) "
+#~ "bu IP adresine eriÅŸim izni ver"
+
+#~ msgid ""
+#~ "The captive portal MAC address configuration has been changed.<br>You "
+#~ "must apply the changes in order for them to take effect."
+#~ msgstr ""
+#~ "Hizmet Portalı MAC adres yapılandırması değiştirildi.<br>Değişiklikleri "
+#~ "uygulayarak etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#~ msgid ""
+#~ "Adding MAC addresses as pass-through MACs allows them access through the "
+#~ "captive portal automatically without being taken to the portal page."
+#~ msgstr ""
+#~ "MAC adreslerini izinli MAC olarak eklemek onlara Hizmet Portalı oturumu "
+#~ "gerektirmeden eriÅŸim saÄŸlar."
+
+#~ msgid "Edit pass-through MAC address"
+#~ msgstr "İzinli MAC adresi girişini düzenle"
+
+#~ msgid "Edit Pass-through MAC address"
+#~ msgstr "Geçmesine izin verilecek MAC adresini düzenle"
+
+#~ msgid "Do you really want to delete this security policy?"
+#~ msgstr "Bu güvenlik ilkesini silmek istediğinize emin misiniz?"
+
+#~ msgid ""
+#~ "The DHCP Server can only be enabled on interfaces configured with static "
+#~ "IP addresses"
+#~ msgstr ""
+#~ "DHCP sunucu sadece statik adres ile çalışan arabirimlerde aktif edilebilir"
+
+#~ msgid ""
+#~ "A valid IP address must be specified for the primary/secondary DNS "
+#~ "servers."
+#~ msgstr ""
+#~ "Birincil/ikincil DNS sunucular için geçerli bir IP adresi girilmelidir."
+
+#~ msgid "The DHCP server can optionally provide a domain search list."
+#~ msgstr ""
+#~ "DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir."
+
+#~ msgid ""
+#~ "Leave blank to disable. Enter the interface IP address of the other "
+#~ "machine. Machines must be using CARP."
+#~ msgstr ""
+#~ "Boş bırakarak devre dışı hale getirebilirsiniz. Diğer sistemin IP "
+#~ "adresini giriniz. Her iki sistem de CARP kullanmalıdırlar."
+
+#~ msgid ""
+#~ "Only the machines listed below will be able to communicate with the "
+#~ "firewall on this NIC."
+#~ msgstr ""
+#~ "Sadece aşağıda belirtilen sistemler bu NIC üzerinden güvenlik duvarı ile "
+#~ "haberleÅŸebilirler."
+
+#~ msgid "and the filename"
+#~ msgstr "dosya adı"
+
+#~ msgid "This Hostname, IP or MAC address already exists."
+#~ msgstr "Bu host Adı, IP ya da MAC sistemde zaten mevcut."
+
+#~ msgid ""
+#~ "If no IP address is given, one will be dynamically allocated from the "
+#~ "pool."
+#~ msgstr "Eğer IP adresi verilmezse havuzdan dinamik olarak atanacaktır."
+
+#~ msgid "A valid Destination Server IP address must be specified."
+#~ msgstr "Geçerli bir Hedef Sunucu IP adresi belirtilmelidir."
+
+#~ msgid "Disallowing CARP sync loop."
+#~ msgstr "CARP senkronizasyon döngüsüne izin verilmeyecek."
+
+#~ msgid "Use a different URL server for packages other than"
+#~ msgstr "Paketler için farklı bir URL sunucu kullan"
+
+#~ msgid "Show"
+#~ msgstr "Göster"
+
+#~ msgid ""
+#~ "By enabling name resolution, the query should take a bit longer. You can "
+#~ "stop it at any time by clicking the Stop button in your browser"
+#~ msgstr ""
+#~ "İsim çözümleme etkinleştirildiğinde, sorgulama biraz daha uzun "
+#~ "sürecektir. İstediğiniz anda tarayıcınızın Durdur düğmesini kullanarak "
+#~ "iÅŸlemi durdurabilirsiniz"
+
+#~ msgid "Multi-wan is not supported from this utility currently."
+#~ msgstr "Çoklu WAN bu uygulamada henüz desteklenmemektedir."
+
+#~ msgid ""
+#~ "Your browser does not support the type SVG! You need to either use "
+#~ "Firefox or download the Adobe SVG plugin"
+#~ msgstr ""
+#~ "Tarayıcınız SVG görüntülemeyi desteklemiyor. Firefox veya Chrome kullanın "
+#~ "ya da Adobe SVG eklentisini kurun"
+
+#~ msgid "Enable Carp"
+#~ msgstr "CARP'ı etkinleştir"
+
+#~ msgid "Disable Carp"
+#~ msgstr "CARP'ı devre dışı bırak"
+
+#~ msgid "You can configure CARP settings"
+#~ msgstr "CARP ayarlarını düzenleyebilirsiniz"
+
+#~ msgid "Nothing specified. Cannot continue."
+#~ msgstr "Herhangi bir tanım yapılmadı. Devam edilemiyor."
+
+#~ msgid "OLSR"
+#~ msgstr "OLSR"
+
+#~ msgid "RIP"
+#~ msgstr "RIP"
+
+#~ msgid "ARP Tables"
+#~ msgstr "ARP Tabloları"
+
+#~ msgid "Status of items on this page."
+#~ msgstr "Bu sayfadaki maddelerin durumu."
+
+#~ msgid "Log entries for items on this page."
+#~ msgstr "Bu sayfadaki maddelerin kayıt girdileri."
+
+#~ msgid "Help for items on this page."
+#~ msgstr "Bu sayfadaki maddelerin yardımı."
+
+#~ msgid "Restart Service"
+#~ msgstr "Servisi Tekrar BaÅŸlat"
+
+#~ msgid "Stop Service"
+#~ msgstr "Servisi Durdur"
+
+#~ msgid "Start Service"
+#~ msgstr "Servisi BaÅŸlat"
+
+#~ msgid "Username is required for all types except Namecheap and FreeDNS."
+#~ msgstr ""
+#~ "Namecheap ve FreeDNS dışındaki tüm türlerde kullanıcı adı girilmelidir."
+
+#~ msgid ""
+#~ "Do you really want to delete this igmpentry? All elements that still use "
+#~ "it will become invalid (e.g. filter rules)!"
+#~ msgstr ""
+#~ "Bu IGMP girdisini silmek istediÄŸinizden emin misiniz? Bu girdiyi kullanan "
+#~ "öğeler (örn. filtre kuralları) devre dışı kalacaktır!"
+
+#~ msgid ""
+#~ "Defines the TTL threshold for the network interface. Packets with a "
+#~ "lower TTL than the threshols value will be ignored. This setting is "
+#~ "optional, and by default the threshold is 1."
+#~ msgstr ""
+#~ "Ağ arabiriminin TTL eşiğini tanımlar. Belirtilen eşiğin altında TTLsi "
+#~ "olan paketler gözardı edilir. Bu ayar seçimliktir ve varsayılan eşik "
+#~ "deÄŸeri 1 dir."
+
+#~ msgid "Last check %s"
+#~ msgstr "Son kontrol %s"
+
+#~ msgid ""
+#~ "You need to bind each OpenVPN client to enable its management daemon: use "
+#~ "'Local port' setting in the OpenVPN client screen"
+#~ msgstr ""
+#~ "OpenVPN itemcilerinin yönetim hizmetlerini açmak için onları bağlamanız "
+#~ "gerekir: OpenVPN istemci ekranında 'Yerel port' ayarını kullanın"
+
+#~ msgid "No OpenVPN instance defined"
+#~ msgstr "OpenVPN tanımı yapılmamış"
+
+#~ msgid "Disable webConfigurator login autocomplete"
+#~ msgstr "webArayüzü oturum açma otomatik tamamlama özelliğini kapat"
+
+#~ msgid ""
+#~ "When this is unchecked, login credentials for the webConfigurator may be "
+#~ "saved by the browser. While convenient, some security standards require "
+#~ "this to be disabled. Check this box to disable autocomplete on the login "
+#~ "form so that browsers will not prompt to save credentials (NOTE: Some "
+#~ "browsers do not respect this option). "
+#~ msgstr ""
+#~ "Bu seçenek işaretlenmediğinde, webArayüzü kimlik bilgileri tarayıcıya "
+#~ "kaydedilebilir. Bazı güvenlik standartları bu özelliğin kapalı olmasını "
+#~ "gerektirir. Bu seçeneği işaretleyerek oturum açma ekranında kullanıcı "
+#~ "adının otomatik tamamlanması özelliğini kapatabilirsiniz. (NOT: Bazı "
+#~ "tarayıcılar bu ayarı gözardı eder). "
+
+#~ msgid ""
+#~ "When this is unchecked, access to the webConfigurator is protected "
+#~ "against HTTP_REFERER redirection attempts. Check this box to disable this "
+#~ "protection if you find that it interferes with webConfigurator access in "
+#~ "certain corner cases such as using external scripts to interact with this "
+#~ "system. More information on HTTP_REFERER is available from <a "
+#~ "target='_new' href='http://en.wikipedia.org/wiki/"
+#~ "HTTP_referrer'>Wikipedia</a>."
+#~ msgstr ""
+#~ "Bu kutunun işareti kaldırıldığında, webArayüzüne erişim HTTP_REFERER "
+#~ "yeniden yönlendirme denemelerine karşı korunur. Dış betiklerin sisteme "
+#~ "erişimde sıkıntı yaşaması gibi uç durumlar yaşıyorsanız kutunun işaretini "
+#~ "kaldırın. HTTP_REFERER başlığı hakkında daha fazla bilgiyi <a "
+#~ "target='_new' href='http://en.wikipedia.org/wiki/"
+#~ "HTTP_referrer'>Wikipedia</a>'da bulabilirsiniz."
+
+#~ msgid "Disable password login for Secure Shell (RSA key only)"
+#~ msgstr "SSH için şifre girişini kapat (RSA anahtarıyla bağlan)"
+
+#~ msgid "Serial Communcations"
+#~ msgstr "Seri Ä°letiÅŸim"
+
+#~ msgid ""
+#~ "Enables the first serial port with 9600/8/N/1 by default, or another "
+#~ "speed selectable below."
+#~ msgstr ""
+#~ "Seri port etkinleştirildiğinde 9600/8/N/1 varsayılandır, diğer hız "
+#~ "seçenekleri aşağıdadır."
+
+#~ msgid ""
+#~ "expires idle connections quicker. More efficient use of CPU and memory "
+#~ "but can drop legitimate connections"
+#~ msgstr ""
+#~ "boş bağlantıları daha çabuk kapatır. İşlemci ve hafıza daha verimli "
+#~ "kullanır ama sağlıklı bağlantıların da kapatılmasına neden olabilir"
+
+#~ msgid ""
+#~ "tries to avoid dropping any legitimate connections at the expense of "
+#~ "increased memory usage and CPU utilization."
+#~ msgstr ""
+#~ "daha fazla hafıza ve işlemci kullanmayı göze alarak sağlıklı "
+#~ "bağlantıların kapatılmasını engellemeye çalışır."
+
+#~ msgid "Disable NAT Reflection for port forwards"
+#~ msgstr "Port yönlendirmeleri için NAT yansıtmayı kapat"
+
+#~ msgid ""
+#~ "Disables the automatic creation of additional NAT redirect rules for "
+#~ "access to port forwards on your external IP addresses from within your "
+#~ "internal networks. Note: Reflection for port forward entries is skipped "
+#~ "for ranges larger than 500 ports."
+#~ msgstr ""
+#~ "İç ağlarınızdan dış IPleriniz ile yapılan port yönlendirmelerine erişim "
+#~ "için otomatik olarak ek NAT yönlendirme kuralları oluşturulmasını devre "
+#~ "dışı bırakır. Not: 500 porttan büyük aralıklar için port yönlendirme "
+#~ "girdileri yansıtması yapılmaz."
+
+#~ msgid ""
+#~ "Enter value for Reflection timeout in seconds. Note: Only applies to "
+#~ "Reflection on port forwards."
+#~ msgstr ""
+#~ "Saniye cinsinden bir Yansıtma zaman aşımı değeri girin. Not: Sadece port "
+#~ "yönlendirmelerdeki Yansıtmayı etkiler."
+
+#~ msgid "Disable NAT Reflection for 1:1 NAT"
+#~ msgstr "1:1 NAT için NAT Yansıtmayı kapat"
+
+#~ msgid ""
+#~ "Disables the automatic creation of additional NAT 1:1 mappings for access "
+#~ "to 1:1 mappings of your external IP addresses from within your internal "
+#~ "networks. Note: Reflection for 1:1 NAT might not fully work in certain "
+#~ "complex routing scenarios."
+#~ msgstr ""
+#~ "İç ağlarınızdan dış IP adreslerinizle 1:1 eşlemelere erişim için otomatik "
+#~ "olarak ek 1:1 NAT eşlemeleri oluşturulmasını devre dışı bırakır. Not: 1:1 "
+#~ "NAT yansıtması belirli karmaşık yönlendirme senaryolarında çalışmayabilir."
+
+#~ msgid ""
+#~ "Currently only applies to 1:1 NAT rules. Required for full functionality "
+#~ "of NAT Reflection for 1:1 NAT."
+#~ msgstr ""
+#~ "Sadece 1:1 NAT kurallarına uygulanır. 1:1 NAT ile NAT Yansıtmanın tam "
+#~ "olarak çalışması için gereklidir."
+
+#~ msgid "Proxy url for allowing %s to use this proxy to connect outside."
+#~ msgstr "%s Dış bağlantılar için kullanılacak Vekil Sunucu."
+
+#~ msgid ""
+#~ "Proxy port to use when %s connects to the proxy URL configured above. "
+#~ "Default is 8080 for http protocol or 443 for ssl."
+#~ msgstr ""
+#~ "%s üzerinde yapılandırılmış vekil URL'ye bağlanır, kullanılacak vekil "
+#~ "port numarası varsayılan http protokolü için 8080 ssl için 443 dür."
+
+#~ msgid "Proxy username for allowing %s to use this proxy to connect outside"
+#~ msgstr ""
+#~ "%s Vekil Sunucuyu kullanarak dışarıya bağlantı kurması için izin verilen "
+#~ "vekil (proxy) kullanıcı adı"
+
+#~ msgid "Proxy Pass"
+#~ msgstr "Vekil Parola"
+
+#~ msgid "Proxy password for allowing %s to use this proxy to connect outside"
+#~ msgstr ""
+#~ "%s Vekil Sunucuyu kullanarak dışarıya bağlantı kurması için izin verilen "
+#~ "vekil (proxy) parolası"
+
+#~ msgid ""
+#~ "Successive connections will be redirected to the servers in a round-robin "
+#~ "manner with connections from the same source being sent to the same web "
+#~ "server. This 'sticky connection' will exist as long as there are states "
+#~ "that refer to this connection. Once the states expire, so will the sticky "
+#~ "connection. Further connections from that host will be redirected to the "
+#~ "next web server in the round robin."
+#~ msgstr ""
+#~ "Ardışık bağlantılar sunuculara dairesel bir mantıkla yönlendirilir, bir "
+#~ "kaynaktan gelen bağlantılar hep aynı sunucuya gönderilir. Bu 'kalıcı "
+#~ "bağlantı', bu bağlantıya atıfta bulunan durumlar olduğu sürece canlı "
+#~ "kalır. Durumların süresi dolduğunda, kalıcı bağlantının da süresi dolmuş "
+#~ "olur. O istemciden gelen sonraki bağlantı istekleri dairesel dağıtılır."
+
+#~ msgid "Allow default gateway switching"
+#~ msgstr "Ötanımlı ağ geçidi değiştirmeye izin ver"
+
+#~ msgid ""
+#~ "If the link where the default gateway resides fails switch the default "
+#~ "gateway to another available one."
+#~ msgstr ""
+#~ "Eğer öntanımlı ağ geçidi bağlantısı başarısız olursa öntanımlı ağ "
+#~ "geçidini bir başkasıyla değiştir."
+
+#~ msgid ""
+#~ "The powerd utility monitors the system state and sets various power "
+#~ "control options accordingly. It offers three modes (maximum, minimum, and "
+#~ "adaptive) that can be individually selected while on AC power or "
+#~ "batteries. The modes maximum, minimum, and adaptive may be abbreviated "
+#~ "max, min, adp. Maximum mode chooses the highest performance values. "
+#~ "Minimum mode selects the lowest performance values to get the most power "
+#~ "savings. Adaptive mode attempts to strike a balance by degrading "
+#~ "performance when the system appears idle and increasing it when the "
+#~ "system is busy. It offers a good balance between a small performance "
+#~ "loss for greatly "
+#~ msgstr ""
+#~ "PowerD aracı sistem durumunu takip eder ve çeşitli güç koruma "
+#~ "seçeneklerini ona göre ayarlar. AC güçte ve pilde çalışma anına göre "
+#~ "ayarlanabilen üç çalışma kipi sağlar: maksimum, minimum ve dengeli. "
+#~ "Maksimum kip en yüksek performans değerlerini seçer. Minimum kip en "
+#~ "yüksek güç koruma için en düşük performans değerlerini seçer. Denge kipi "
+#~ "ise sistem boşta olduğunda performansı düşürerek ve sistem yoğunluğu "
+#~ "arttığında performansı yükselterek bir denge elde etmeye çalışır."
+
+#~ msgid "glxsb Crypto Acceleration"
+#~ msgstr "glxsb Şifreleme Hızlandırma"
+
+#~ msgid "glxsb"
+#~ msgstr "glxsb"
+
+#~ msgid "Use glxsb"
+#~ msgstr "Şifreleme Hızlandırma (glxsb) kullan"
+
+#~ msgid ""
+#~ "The AMD Geode LX Security Block will accelerate some cryptographic "
+#~ "functions on systems which have the chip. Do not enable this option if "
+#~ "you have a Hifn cryptographic acceleration card, as this will take "
+#~ "precedence and the Hifn card will not be used. Acceleration should be "
+#~ "automatic for IPsec when using Rijndael (AES). OpenVPN should be set for "
+#~ "AES-128-CBC."
+#~ msgstr ""
+#~ "AMD Geode LX Güvenlik Blok çipi olan sistemler için bazı şifreleme "
+#~ "fonksiyonlarını hızlandırır. Hifn şifreleme hızlandırma kartınız varsa "
+#~ "Hifn'den daha yüksek öncelikte olduğu için Hifn kartının kullanılmasını "
+#~ "engeller; bu nedenle Hifn şifreleme hızlandırma kartınız varsa bu "
+#~ "seçeneği açmamalısınız. IPSEC için Rijndael (AES) kullanırken hızlandırma "
+#~ "otomatik olarak devreye girecektir ve OpenVPN AES-128-CBC olarak "
+#~ "ayarlanmalıdır."
+
+#~ msgid ""
+#~ "If you do not have a glxsb chip in your system, this option will have no "
+#~ "effect. To unload the module, uncheck this option and then reboot."
+#~ msgstr ""
+#~ "Sisteminizde glxsb çipi yoksa bu seçeneği açmanın bir etkisi olmaz. "
+#~ "Bileşeni kaldırmak için bu seçeneğin işaretini kaldırıp sistemi yeniden "
+#~ "başlatmanız gerekir."
+
+#~ msgid "Start racoon in debug mode"
+#~ msgstr "Racoon'u hata ayıklama kipinde başlat"
+
+#~ msgid ""
+#~ "Launches racoon in debug mode so that more verbose logs will be generated "
+#~ "to aid in troubleshooting."
+#~ msgstr ""
+#~ "Sorun çözmenize yardımcı olmak için Racoon'u daha detaylı log üretmesine "
+#~ "neden olan hata ayıklama kipinde başlatır."
+
+#~ msgid "NOTE: Changing this setting will restart racoon."
+#~ msgstr ""
+#~ "NOT: Bu seçeneği işaretlemek Racoon'un yeniden başlatılmasına neden olur."
+
+#~ msgid ""
+#~ "By default schedules clear the states of existing connections when the "
+#~ "expiration time has come. This option overrides that behavior by not "
+#~ "clearing states for existing connections."
+#~ msgstr ""
+#~ "Varsayılan olarak zamanlamalar süreleri dolduğunda varolan bağlantıların "
+#~ "durumlarını temizler. Bu seçeneği kullanarak bu işlemin yapılmamasını "
+#~ "saÄŸlayabilirsiniz."
+
+#~ msgid ""
+#~ "By default the monitoring process will flush states for a gateway that "
+#~ "goes down. This option overrides that behavior by not clearing states for "
+#~ "existing connections."
+#~ msgstr ""
+#~ "Varsayılan olarak izleme süreci erişilemeyen ağ geçidinin durumlarını "
+#~ "temizler. Bu seçeneği kullanarak bu işlemin yapılmamasını "
+#~ "saÄŸlayabilirsiniz."
+
+#~ msgid "All IPv6 will be blocked unless this box is checked."
+#~ msgstr "Bu kutu işaretli değilse tüm IPv6 engellenir."
+
+#~ msgid ""
+#~ "This is the port of the SMTP E-Mail server, typically 25, 587 "
+#~ "(submission) or 465 (smtps, tick ssl/tls checkbox)"
+#~ msgstr ""
+#~ "SMTP posta sunucusu portu, çoğunlukla 25, 587 (gönderi) veya 465 (SMTPS, "
+#~ "SSL/TLS kutusunu işaretleyin) olarak kullanılmaktadır"
+
+#~ msgid ""
+#~ "Note: Semi-Colon separated. This will be prepended to the search base dn "
+#~ "above or you can specify full container path."
+#~ msgstr ""
+#~ "Not: Noktalı virgülle ayrılmalıdır. Yukarıdaki temel arama DNye eklenir, "
+#~ "veya tam taşıyıcı yolu belirtebilirsiniz."
+
+#~ msgid "Example: CN=Users;DC=example"
+#~ msgstr "Örnek: CN=Users;DC=ornek"
+
+#~ msgid "Example: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+#~ msgstr "Örnek: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com "
+
+#~ msgid ""
+#~ "Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,"
+#~ "DC=example,DC=com "
+#~ msgstr ""
+#~ "Örnek: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,"
+#~ "DC=example,DC=com "
+
+#~ msgid "Signing Request data"
+#~ msgstr "Ä°mzalama Talep verisi"
+
+#~ msgid "Edit gateway entry"
+#~ msgstr "Ağ geçidi kaydını düzenle"
+
+#~ msgid "You can not use a IPv6 Gateway Address on a IPv4 only interface."
+#~ msgstr "IPv4 arabiriminde IPV6 ağ geçidi adresi kullanamazsınız."
+
+#~ msgid ""
+#~ "The gateway address %1$s does not lie within the chosen interface's "
+#~ "subnet '%2$s'."
+#~ msgstr ""
+#~ "Seçilen arabirimlerin altağı '%2$s' ise ağ geçidi adresi %1$s yalan "
+#~ "söylemez."
+
+#~ msgid "You can not use a IPv4 Gateway Address on a IPv6 only interface."
+#~ msgstr "IPv6 arabiriminde IPV4 ağ geçidi adresi kullanamazsınız."
+
+#~ msgid "The low latency watermark needs to be a numeric value."
+#~ msgstr "Düşük gecikme belirteci bir sayı olmalıdır."
+
+#~ msgid "The high latency watermark needs to be a numeric value."
+#~ msgstr "Yüksek gecikme belirteci bir sayı olmalıdır."
+
+#~ msgid "The low loss watermark needs to be a numeric value."
+#~ msgstr "Düşük kayıp belirteci bir sayı olmalıdır."
+
+#~ msgid "The high loss watermark needs to be a numeric value."
+#~ msgstr "Yüksek kayıp belirteci bir sayı olmalıdır."
+
+#~ msgid ""
+#~ "The High latency watermark needs to be higher then the low latency "
+#~ "watermark"
+#~ msgstr ""
+#~ "Yüksek gecikme belirtecinin düşük gecikme belirtecinden daha büyük bir "
+#~ "sayı olması gerekir"
+
+#~ msgid ""
+#~ "The High packet loss watermark needs to be higher then the low packet "
+#~ "loss watermark"
+#~ msgstr ""
+#~ "Yüksek paket kayıp belirtecinin düşük paket kayıp belirtecinden daha "
+#~ "büyük bir sayı olması gerekir"
+
+#~ msgid "Use BGPD"
+#~ msgstr "BGPD kullan"
+
+#~ msgid ""
+#~ "These define the low and high water marks for latency in milliseconds. "
+#~ "Default is 100/200."
+#~ msgstr ""
+#~ "Bunlar milisaniye cinsinden gecikme alt ve üst sınırlarını tanımlar. "
+#~ "Varsayılan 100/200 dür."
+
+#~ msgid ""
+#~ "These define the low and high water marks for packet loss in %. Default "
+#~ "is 10/20."
+#~ msgstr ""
+#~ "Bunlar %. (yüzde) cinsinden paket kaybı alt ve üst sınırlarını tanımlar. "
+#~ "Varsayılan 10/20 dir."
+
+#~ msgid ""
+#~ "This defines the down time for the alarm to fire in seconds. Default is "
+#~ "10."
+#~ msgstr ""
+#~ "Erişilemez alarmının tetiklenmesi için saniye cinsinden geçmesi gereken "
+#~ "süreyi tanımlar. Varsayılan 10 dur."
+
+#~ msgid "Frequency Probe"
+#~ msgstr "Sorgu Sıklığı"
+
+#~ msgid ""
+#~ "This defines the frequency that an icmp probe will be sent in seconds. "
+#~ "Default is 1."
+#~ msgstr ""
+#~ "Bu ayar ICMP sorgusu gönderilme sıklığını saniye cinsinden belirler. "
+#~ "Varsayılan 1 dir."
+
+#~ msgid ""
+#~ "Additional webConfigurator groups can be added here. \n"
+#~ "\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited by "
+#~ "users who are members of the group.\n"
+#~ "\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system "
+#~ "defined object.\n"
+#~ "\t\t\t\t\t\t\t\tSome system object properties can be modified but they "
+#~ "cannot be deleted."
+#~ msgstr ""
+#~ "Buradan ek webArayüzü grupları eklenebilir. \n"
+#~ "\t\t\t\t\t\t\t\tGrup üyeleri tarafından miras alınan grup izinleri "
+#~ "atanabilir.\n"
+#~ "\t\t\t\t\t\t\t\tGri bir simge nesnenin sistem tanımlı olduğu anlamına "
+#~ "gelir.\n"
+#~ "\t\t\t\t\t\t\t\tBazı sistem nesnesi özellikleri değiştirilebilir ama "
+#~ "silinemez."
+
+#~ msgid "Pick a date"
+#~ msgstr "Tarih seçiniz"
+
+#~ msgid "Do you really want to delete this User?"
+#~ msgstr "Bu kullanıcıyı silmek istediğinizden emin misiniz?"
+
+#~ msgid "Testing pfSense LDAP settings... One moment please..."
+#~ msgstr "LDAP ayarları test ediliyor... Lütfen bekleyiniz..."
+
+#~ msgid "Sorry, we could not find an uploadid code."
+#~ msgstr "Yükleme kimliği kodu (uploadid) bulunamadı."
+
+#~ msgid "Uploading Files"
+#~ msgstr "Dosyalar Yükleniyor"
+
+#~ msgid "Please wait"
+#~ msgstr "Lütfen bekleyiniz"
+
+#~ msgid "Uploading file"
+#~ msgstr "Dosya yükleniyor"
+
+#~ msgid "Uploaded"
+#~ msgstr "Yüklendi"
+
+#~ msgid "File Size"
+#~ msgstr "Dosya Boyutu"
+
+#~ msgid "Completed"
+#~ msgstr "Tamamlandı"
+
+#~ msgid "Estimated"
+#~ msgstr "Tahmini"
+
+#~ msgid "Input your pre-shared key string"
+#~ msgstr "Ön paylaşımlı anahtar dizenizi girin"
+
+#~ msgid "Policy Generation"
+#~ msgstr "Ä°lke Ãœretimi"
+
+#~ msgid ""
+#~ "When working as a responder (as with mobile clients), this controls how "
+#~ "policies are generated based on SA proposals."
+#~ msgstr ""
+#~ "Yanıtlayıcı olarak çalışırken (mobil istemcilerle olduğu gibi), bu ayar "
+#~ "SA tekliflerine göre ilkelerin nasıl üretileceğini belirler."
+
+#~ msgid "Proposal Checking"
+#~ msgstr "Teklif Kontrolü"
+
+#~ msgid ""
+#~ "Specifies the action of lifetime length, key length, and PFS of the phase "
+#~ "2 selection on the responder side, and the action of lifetime check in "
+#~ "phase 1."
+#~ msgstr ""
+#~ "Yanıtlayan tarafta aşama 2 seçiminin ömür, anahtar uzunluğu ve PFS "
+#~ "eylemini; aşama 1'de ömür kontrolü eylemini belirtir."
+
+#~ msgid "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit"
+#~ msgstr "1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit"
+
+#~ msgid "P2 Hash Algorithms"
+#~ msgstr "P2 Değer Üretme Algoritmaları"
+
+#~ msgid "Enable l2tp server"
+#~ msgstr "L2TP sunucuyu etkinleÅŸtir"
+
+#~ msgid "Encryption type"
+#~ msgstr "Şifreleme türü"
+
+#~ msgid "RADIUS server"
+#~ msgstr "RADIUS sunucu"
+
+#~ msgid "RADIUS issued IP's"
+#~ msgstr "RADIUS tarafından sağlanan IPler"
+
+#~ msgid ""
+#~ "This is a network that will be routed through the tunnel, so that a site-"
+#~ "to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter "
+#~ "here the remote LAN here. You may leave this blank to only communicate "
+#~ "with other clients"
+#~ msgstr ""
+#~ "Yönlendirme tablolarını elle değiştirmeden alanlar arası sanal özel ağ "
+#~ "(site-to-site VPN) kurulabilmesi için tünel içinden yönlendirilecek "
+#~ "ağdır. CIDR aralığı olarak belirtilir. Eğer bu siteler arası VPN ise "
+#~ "buraya uzak LAN girilir. Sadece diğer istemcilerle iletişim kurmak için "
+#~ "burayı boş bırakabilirsiniz"
+
+#~ msgid "Compress tunnel packets using the LZO algorithm"
+#~ msgstr "Tünel paketlerini LZO algoritması ile sıkıştır"
+
+#~ msgid "EXAMPLE: route 10.0.0.0 255.255.255.0;"
+#~ msgstr "ÖRNEK: route 10.0.0.0 255.255.255.0;"
+
+#~ msgid ""
+#~ "If this option is not set, all NetBIOS-over-TCP/IP options (includeing "
+#~ "WINS) will be disabled"
+#~ msgstr ""
+#~ "Bu seçenek etkinleştirilmemişse tüm TCP/IP üzerinden NETBIOS (WINS dahil) "
+#~ "devre dışı kalır"
+
+#~ msgid ""
+#~ "This is the IPv6 virtual network used for private communications between "
+#~ "this server and client hosts expressed using CIDR (eg. fe80::/64). The "
+#~ "first network address will be assigned to the\tserver virtual interface. "
+#~ "The remaining network addresses can optionally be assigned to connecting "
+#~ "clients. (see Address Pool)"
+#~ msgstr ""
+#~ "Bu IPv6 sunucu ile CIDR yoluyla belirtilen istemciler (örn. fe80::/64) "
+#~ "arasında özel iletişim için kullanılacak sanal ağdır. İlk ağ adresi sunucu"
+#~ "\tsanal arabirimine atanır. Diğer ağ adresleri bağlanan istemcilere "
+#~ "isteğe göre atanabilir (bkz Adres Havuzu)"
+
+# 94%
+#~ msgid "IPv4 Local Network"
+#~ msgstr "IPv4 Yerel AÄŸ"
+
+#~ msgid ""
+#~ "This is the network that will be accessible from the remote endpoint. "
+#~ "Expressed as a CIDR range. You may leave this blank if you don't want to "
+#~ "add a route to the local network through this tunnel on the remote "
+#~ "machine. This is generally set to your LAN network"
+#~ msgstr ""
+#~ "Uzak uçtan erişilebilir olacak ağ. CIDR aralığı olarak belirtilir. Eğer "
+#~ "uzak makinada bu tünel içinden yerel ağa bir yönlendirme eklemek "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz. Genel LAN ağınız olarak "
+#~ "ayarlıdır"
+
+#~ msgid "IPv6 Local Network"
+#~ msgstr "IPv6 Yerel AÄŸ"
+
+#~ msgid ""
+#~ "This is the IPv6 network that will be accessible from the remote "
+#~ "endpoint. Expressed as a CIDR range. You may leave this blank if you "
+#~ "don't want to add a route to the local network through this tunnel on the "
+#~ "remote machine. This is generally set to your LAN network"
+#~ msgstr ""
+#~ "Uzak uçtan erişilebilir olacak IPv6 ağı. CIDR aralığı olarak belirtilir. "
+#~ "Eğer uzak makinada bu tünel içinden yerel ağa bir yönlendirme eklemek "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz. Genel LAN ağınız olarak "
+#~ "ayarlıdı"
+
+#~ msgid ""
+#~ "This is a network that will be routed through the tunnel, so that a site-"
+#~ "to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter "
+#~ "here the remote LAN here. You may leave this blank if you don't want a "
+#~ "site-to-site VPN"
+#~ msgstr ""
+#~ "Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal "
+#~ "özel ağ (site-to-site VPN) kurulabilmesi için Tünel içinden "
+#~ "yönlendirilecek bir ağdır. CIDR aralığı şeklinde girilir. Eğer bu alanlar "
+#~ "arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer alanlar arası VPN "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz"
+
+#~ msgid ""
+#~ "Allow multiple concurrent connections from clients using the same Common "
+#~ "Name.<br/>NOTE: This is not generally recommended, but may be needed for "
+#~ "some scenarios."
+#~ msgstr ""
+#~ "Aynı Genel Adı kullanan istemcilerin birlikte birden fazla bağlantısına "
+#~ "izin ver.<br/>NOT: Genellikle önerilmez, ancak bazı durumlarda "
+#~ "gerekebilir."
+
+#~ msgid "VOIP Adapter"
+#~ msgstr "VoIP Adaptörü"
+
+#~ msgid "You need to specify the number of local interfaces connected."
+#~ msgstr "Bağlı arabirimlerin sayısını belirtmelisiniz."
+
+#~ msgid "The number of local connection needs to be greater than 1."
+#~ msgstr "Yerel bağlantı sayısı 1'den fazla olmalıdır."
+
+#~ msgid "Upload bandwidth of connection is not valid."
+#~ msgstr "Bağlantı upload bant genişliği geçerli değil."
+
+#~ msgid "Download bandwidth of connection is not valid."
+#~ msgstr "Bağlantı download bant genişliği geçerli değil."
+
+#~ msgid "You cannot specify bandwidth less than 1!"
+#~ msgstr "Bant genişliği alanlarında 1'den küçük değer giremezsiniz!"
+
+#~ msgid ""
+#~ "We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."
+#~ msgstr "CBQ zamanlayıcısında 128Kbit/s'den düşük değerleri desteklemiyoruz."
+
+#~ msgid "Upload or download bandwidth is not valid."
+#~ msgstr "Gönderme veya İndirme bant genişliği geçersiz."
+
+#~ msgid ""
+#~ "You cannot set the VoIP upload bandwidth on WAN connection higher than "
+#~ "80% of the connection."
+#~ msgstr ""
+#~ "Bağlantının 80% oranından daha fazlasını WAN bağlantısının VoIP gönderme "
+#~ "bant genişliği olarak ayarlayamazsınız."
+
+#~ msgid ""
+#~ "You cannot set the VoIP download bandwidth on connection higher than "
+#~ "80% of the connection."
+#~ msgstr ""
+#~ "Bağlantının 80% oranından daha fazlasını VoIP indirme bant genişliği "
+#~ "olarak ayarlayamazsınız."
+
+#~ msgid ""
+#~ "A valid IPv6 address must be specified for the primary/secondary DNS "
+#~ "servers."
+#~ msgstr ""
+#~ "Ana/ikincil DNS sunucusu için geçerli bir IPv6 adresi belirtilmelidir."
+
+#~ msgid "A valid IPv6 address must be specified for the network boot server."
+#~ msgstr ""
+#~ "Ağ açılış (boot) sunucusu için geçerli bir IPv6 adresi belirtilmelidir."
+
+#~ msgid "prefix length"
+#~ msgstr "ön-ek uzunluğu"
+
+#~ msgid ""
+#~ "You can define a Prefix range here for DHCP Prefix Delegation. This "
+#~ "allows for \n"
+#~ "\t\t\t\t\tassigning networks to subrouters"
+#~ msgstr ""
+#~ "DHCP Önek Yetkilendirmesi için Ön-ek aralığını tanılmayın. Bu \n"
+#~ "\t\t\t\t\t Ağ'lara altyönlendiricilerin atanmasına izin verir"
+
+#~ msgid ""
+#~ "If no IPv6 address is given, one will be dynamically allocated from the "
+#~ "pool."
+#~ msgstr ""
+#~ "EÄŸer IPv6 adresi verilmediyse, bir tanesi dinamik olarak havuzdan tahsis "
+#~ "edilir edilir."
+
+#~ msgid ""
+#~ "This is the IPv6 address of the server to which DHCPv6 requests are "
+#~ "relayed. You can enter multiple server IPv6 addresses, separated by "
+#~ "commas. Select \"Proxy requests to DHCPv6 server on WAN subnet\" to relay "
+#~ "DHCPv6 packets to the server that was used on the WAN interface."
+#~ msgstr ""
+#~ "DHCPv6 isteklerinin aktarılacağı sunucunun IP adresidir. Virgülle "
+#~ "ayırarak birden fazla IP adresi girebilirsiniz. DHCPv6 paketlerini WAN "
+#~ "arabiriminde kullanılan sunucuya aktarmak için \"DHCPv6 sunucuya gelen "
+#~ "istekleri WAN altağına yönlendir\"i seçin."
+
+#~ msgid "Captiveportal"
+#~ msgstr "Hizmet Portalı"
+
+#~ msgid "Edit Captiveportal Zones"
+#~ msgstr "Hizmet Portalı Bölgelerini düzenle"
+
+#~ msgid "Zone name. Cannot contain spaces."
+#~ msgstr "Bölge adı. Boşluk içeremez."
+
+#~ msgid "<center>Could not locate any previous backups.</center>"
+#~ msgstr "<center>Herhangi bir önceki yedek(ler) bulunamıyor.</center>"
+
+# 87%
+#~ msgid "WebCfg - Diagnostics: Logs: Wireless page"
+#~ msgstr "WebCfg - Araçlar: Sistem Kayıtları: Kablosuz sayfası"
+
+# 84%
+#~ msgid "Allow access to the 'Diagnostics: Logs: System: Wireless' page."
+#~ msgstr ""
+#~ "'Araçlar: Sistem Kayıtları: Sistem: Kablosuz' sayfasını erişime açar."
+
+# 75%
+#~ msgid ""
+#~ "Error: cannot open dhclient_%s.conf in interface_carpdev_configure() for "
+#~ "writing.%s"
+#~ msgstr ""
+#~ "Hata: %s dhclient_%s.conf içinde interface_carpdev_configure() açılamadı"
+
+# 96%
+#~ msgid "Could not bring wanif up in interface_carpdev_dhcp_configure()"
+#~ msgstr "interface_carpdev_dhcp_configure() wanif açık değil"
+
+# 97%
+#~ msgid "Click on package name to access it's website."
+#~ msgstr "Paket ismine tıklayarak web sitesine erişebilirsiniz."
+
+#~ msgid "Do you really want to install "
+#~ msgstr "Gerçekten yüklemek istiyormusunuz "
+
+#~ msgid "Access List successfully deleted"
+#~ msgstr "Erişim listesi başarıyla silindi"
+
+#~ msgid ""
+#~ "The settings for the DNS Resolver have changed. You must apply the "
+#~ "configuration to take affect."
+#~ msgstr ""
+#~ "DNS Çözümleyici ayarları değiştirildi. Değişiklikleri uygulayarak "
+#~ "yapılandırmanın etkin olmasını sağlayabilirsiniz."
+
+#~ msgid ""
+#~ "A valid IP address/hosname or IP/hostname:port must be specified for "
+#~ "remote syslog server #1."
+#~ msgstr ""
+#~ "Uzak syslog sunucu #1 için geçerli bir IP adresi/host adı yada IP/host "
+#~ "adı:port belirtilmeli."
+
+#~ msgid ""
+#~ "A valid IP address/hosname or IP/hostname:port must be specified for "
+#~ "remote syslog server #2."
+#~ msgstr ""
+#~ "Uzak syslog sunucu #2 için geçerli bir IP adresi/host adı yada IP/host "
+#~ "adı:port belirtilmeli."
+
+#~ msgid ""
+#~ "A valid IP address/hosname or IP/hostname:port must be specified for "
+#~ "remote syslog server #3."
+#~ msgstr ""
+#~ "Uzak syslog sunucu #3 için geçerli bir IP adresi/host adı yada IP/host "
+#~ "adı:port belirtilmeli."
+
+#~ msgid ""
+#~ "The virtual IP field selects what (virtual) IP should be used when this "
+#~ "group applies to a local Dyndns, IPsec or openvpn endpoint"
+#~ msgstr ""
+#~ "Sanal IP alanı seçilen hangi (sanal) IP, bu grup yerel Dyndsn, IPsec yada "
+#~ "OpenVPN uç noktası için kullanılmalıdır"
+
+#~ msgid ""
+#~ "If you need to include multiple possible values, sperate them with a |. "
+#~ "If your provider includes a |, escape it with \\|"
+#~ msgstr ""
+#~ "Eğer birden fazla değer girmek isterseniz değerleri | ile ayırınız. Eğer "
+#~ "değeriniz | işaretini de içermeli ise \\| şeklinde kullanabilirsiniz."
+
+#~ msgid ""
+#~ "Hostnames in alias list can only contain the characters A-Z, 0-9 and '-'."
+#~ msgstr ""
+#~ "Grup listesi içindeki Host adları sadece İngilizce A-Z, 0-9 ve '-' "
+#~ "karakterlerini içerebilir."
+
+#~ msgid ""
+#~ "Number of processes used by relayd. Leave blank to use the default value "
+#~ "of 5 processes"
+#~ msgstr ""
+#~ "Aktarıcıd nin kullanacağı işlemci sayısı. Boş bırakarak varsayılan değer "
+#~ "(5 işlemci) kullanın"
+
+#~ msgid "Disconnected user"
+#~ msgstr "Bağlantısı kopmuş kullanıcı"
+
+#~ msgid "Mobile User"
+#~ msgstr "Mobil Kullanıcı"
+
+#~ msgid "Login Time"
+#~ msgstr "Oturum açma Saati"
+
+#~ msgid "Remote"
+#~ msgstr "Uzak"
+
+#~ msgid "export cert+key in .p12"
+#~ msgstr "sertifika+anahtar içinden .p12 dışa aktar"
+
+#~ msgid ""
+#~ "You can not assign a protocol other then ICMP, TCP, UDP or TCP/UDP to a "
+#~ "rule that applies to IPv4 and IPv6"
+#~ msgstr ""
+#~ "IPv4 ve IPv6 uygulanacak kural için ICMP, TCP, UDP yada TCP/UDP protokolü "
+#~ "atayamazsınız"
+
+#~ msgid "The configuration for the DNS Resolver, has been changed"
+#~ msgstr "DNS Çözümleyici' nin yapılandırması değiştirildi"
+
+#~ msgid "Network interfaces"
+#~ msgstr "AÄŸ Arabirimleri"
+
+#~ msgid "Outgoing interfaces"
+#~ msgstr "Giden Arabirimler"
+
+#~ msgid "Forwarding"
+#~ msgstr "Yönlendirme"
+
+#~ msgid "The Firewall Maximum Tables value must be an integer."
+#~ msgstr "Güvenlik Duvarı Maksimum Tabloları Değeri tamsayı olmalıdır."
+
+#~ msgid "Firewall Maximum Tables"
+#~ msgstr "Güvenlik Duvarı Maksimum Tabloları"
+
+#~ msgid ""
+#~ "Maximum number of tables for systems such as aliases, sshlockout, snort, "
+#~ "etc, combined."
+#~ msgstr ""
+#~ "Gruplar, sshlockout, snort vb sistemler için ayrılan en fazla tablo "
+#~ "sayısı."
+
+#~ msgid ""
+#~ "Enter as many hosts as you would like. Hosts must be specified by their "
+#~ "IP address or fully qualified domain name (FQDN). FQDN hostnames are "
+#~ "periodically re-resolved and updated. If multiple IPs are returned by a "
+#~ "DNS query, all are used."
+#~ msgstr ""
+#~ "Birden fazla host girebilirsiniz. Hostlar IP adresi yada tam donanımlı "
+#~ "domian adı (FQDN) olmalıdır. (FQDN) host isimleri periyodik olarak "
+#~ "çözümlenmiş ve güncel olmalıdır. Eğer birden fazla IP DNS sorgusundan "
+#~ "geri dönüyorsa, tamamı kullanılmalıdır."
+
+#~ msgid ""
+#~ "The powerd utility monitors the system state and sets various power "
+#~ "control options accordingly. It offers four modes (maximum, minimum, "
+#~ "adaptive and hiadaptive) that can be individually selected while on AC "
+#~ "power or batteries. The modes maximum, minimum, adaptive and hiadaptive "
+#~ "may be abbreviated max, min, adp, hadp. Maximum mode chooses the highest "
+#~ "performance values. Minimum mode selects the lowest performance values "
+#~ "to get the most power savings. Adaptive mode attempts to strike a balance "
+#~ "by degrading performance when the system appears idle and increasing it "
+#~ "when the system is busy. It offers a good balance between a small "
+#~ "performance loss for greatly increased power savings. Hiadaptive mode is "
+#~ "alike adaptive mode, but tuned for systems where performance and "
+#~ "interactivity are more importantthan power consumption. It rises "
+#~ "frequency faster, drops slower andkeeps twice lower CPU load."
+#~ msgstr ""
+#~ "PowerD aracı sistem durumunu takip eder ve çeşitli güç koruma "
+#~ "seçeneklerini ona göre ayarlar. AC güçte ve pilde çalışma anına göre "
+#~ "ayarlanabilen dört çalışma kipi sağlar: (maksimum, minimum, dengeli ve "
+#~ "hidengeli.) Maksimum kip en yüksek performans değerlerini seçer. Minimum "
+#~ "kip en yüksek güç koruma için en düşük performans değerlerini seçer. "
+#~ "Denge kipi ise sistem boşta olduğunda performansı düşürerek ve sistem "
+#~ "yoğunluğu arttığında performansı yükselterek bir denge elde etmeye "
+#~ "çalışır. hidengeli kipi dengeli kipine benzer fakat hızlıca CPUfreknasını "
+#~ "yükseltip iki kat yavaş düşürerek ve bekleterek performans ve etkileşimin "
+#~ "güç tüketimine göre daha önemli olduğu sistemler için ayarlanmıştır."
+
+#~ msgid ""
+#~ "This defines how often that an icmp probe will be sent in seconds. "
+#~ "Default is 1."
+#~ msgstr ""
+#~ "Bu ayar ICMP sorgusunun ne sıklıkta göndermesini saniye cinsinden "
+#~ "belirler. Varsayılan 1 dir."
+
+#~ msgid ""
+#~ "This defines the number of bad probes before the alarm will fire. Default "
+#~ "is 10."
+#~ msgstr ""
+#~ "Kötü sonda sayısının (bad probes) alarmının tetiklenmesi için saniye "
+#~ "cinsinden geçmesi gereken süreyi tanımlar. Varsayılan 10 dur."
+
+#~ msgid "Current state count"
+#~ msgstr "Güncel durum sayımı"
+
+#~ msgid "Matching filter"
+#~ msgstr "UyuÅŸan filitre"
+
+#~ msgid ""
+#~ "The DHCP server can optionally provide a domain search list. Use the "
+#~ "semicolon character as seperator "
+#~ msgstr ""
+#~ "DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir. "
+#~ "Ayırıcı olarak noktalı virgül karakterini kullanın "
+
+#~ msgid ""
+#~ "By default DHCP leases are displayed in UTC time. By checking this \n"
+#~ "\t\t\t\t\t\tbox DHCP lease time will be displayed in local time and set "
+#~ "to time zone selected. This will be used for all DHCP interfaces lease "
+#~ "time."
+#~ msgstr ""
+#~ "Varsayılan olarak DHCP kiraları UTC saati olarak görüntülenir. Bu "
+#~ "kutucuÄŸu \n"
+#~ "\t\t\t\t\t\ttıkklayarak DHCP kira saati yerel saat olarak görüntülenir ve "
+#~ "seçilen zaman dilimine ayarlanır. Bu tüm DHCP arabirimleri kira "
+#~ "saatlerinde kullanılır."
+
+#~ msgid ""
+#~ "A valid local port must be specified. It must be a port alias or integer "
+#~ "between 1 and 65535."
+#~ msgstr ""
+#~ "Geçerli bir gerel port belirtilmelidir. Bir port grubu ya da 1 ile 65535 "
+#~ "arası bir tamsayı olmalıdır."
+
+#~ msgid "You can only have one interface configured as %s or 6to4."
+#~ msgstr "Yapılandırabileceğiniz arabirim sadece bir tane %s yada 6 dan 4'e."
+
+#~ msgid "You can only have one interface configured as %s or 6rd."
+#~ msgstr "Yapılandırabileceğiniz arabirim sadece bir tane %s yada 6'ıncı."
+
+#~ msgid "You specified an IPv6 prefix ID that is out of range."
+#~ msgstr "Belirttiğiniz IPv6 ön-eki kimliği aralık dışında."
+
+#~ msgid "6RD Rapid Deployment"
+#~ msgstr "6'ıncı Hızlı Dağıtım"
+
+#~ msgid ""
+#~ "Enter a <b>hexadecimal</b> value between %x and %x here, or leave blank."
+#~ msgstr ""
+#~ "Buraya <b>onaltılık</b>ondalık bir değer aralığında %x ve %x buraya "
+#~ "girin, yada boş bırakın."
+
+#~ msgid "prefix delegation size"
+#~ msgstr "ön-ek yetkilendirme boyutu"
+
+#~ msgid ""
+#~ "The DHCP server can optionally provide a domain search list. Use the "
+#~ "semicolon character as seperator"
+#~ msgstr ""
+#~ "DHCP sunucu isteğe bağlı olarak bir alan adı arama listesi de verebilir. "
+#~ "Ayırıcı olarak noktalı virgül karakterini kullanın"
+
+#~ msgid ""
+#~ "Displaying rule descriptions for all lines in the log might affect "
+#~ "performance with large rulessets."
+#~ msgstr ""
+#~ "Tüm satırlardaki büyük kural ayarlarını ve kural kayıtlarını görüntülemek "
+#~ "performansı etkileyebilir."
+
+#~ msgid ""
+#~ "Additional webConfigurator groups can be added here. \n"
+#~ "\t\t\t\t\t\t\t\t\tGroup permissions can be assigned which are inherited "
+#~ "by users who are members of the group.\n"
+#~ "\t\t\t\t\t\t\t\t\tAn icon that appears grey indicates that it is a system "
+#~ "defined object.\n"
+#~ "\t\t\t\t\t\t\t\t\tSome system object properties can be modified but they "
+#~ "cannot be deleted."
+#~ msgstr ""
+#~ "Buradan ek webArayüzü grupları eklenebilir. \n"
+#~ "\t\t\t\t\t\t\t\tGrup üyeleri tarafından miras alınan grup izinleri "
+#~ "atanabilir.\n"
+#~ "\t\t\t\t\t\t\t\tGri bir simge nesnenin sistem tanımlı olduğu anlamına "
+#~ "gelir.\n"
+#~ "\t\t\t\t\t\t\t\tBazı sistem nesnesi özellikleri değiştirilebilir ama "
+#~ "silinemez."
+
+#~ msgid ""
+#~ "The RA server can optionally provide a domain search list. Use the "
+#~ "semicolon character as seperator"
+#~ msgstr ""
+#~ "Yönlendirici ilan (RA Router Advertisement) sunucusu isteğe bağlı olarak "
+#~ "bir etki alanı arama listesini sağlar. Ayırıcı olarak noktalı virgül "
+#~ "işaretini kullanın"
+
+#~ msgid ""
+#~ "Please select a gateway, normaly the interface selected gateway, so the "
+#~ "limiters work correctly"
+#~ msgstr ""
+#~ "Ağ geçidini seçiniz, normalde arabirim ağ geçidi seçilidir, böylece "
+#~ "limitleyiciler düzgün çalışır"
+
+#~ msgid "The frequency probe interval needs to be a numeric value."
+#~ msgstr "Sorgu Sıklığı aralığının sayısal bir değer olması gerekir."
+
+#~ msgid "The frequency probe interval needs to be positive."
+#~ msgstr "Sorgu Sıklığı aralığının pozitif olması gerekir."
+
+#~ msgid ""
+#~ "The Frequency Probe interval needs to be less than the down time setting."
+#~ msgstr ""
+#~ "Sorgu Sıklığı aralığının erişilemez zaman ayarlarından daha az olması "
+#~ "gerelir."
+
+#~ msgid ""
+#~ "NOTE: The Frequency Probe interval must be less than the Down time, "
+#~ "otherwise the gateway will seem to go down then come up again at the next "
+#~ "probe."
+#~ msgstr ""
+#~ "NOT: Sorgu Sıklığı aralığı erişilemez zamandan daha az olması şarttır, "
+#~ "aksi taktirde ağ geçidi kapalı gibi gördüğü için tekrar açılması yeni "
+#~ "sorguda gerçekleşir."
+
+#~ msgid "IPv4 Remote Network"
+#~ msgstr "IPv4 Uzak AÄŸ"
+
+#~ msgid ""
+#~ "This is a network that will be routed through the tunnel, so that a site-"
+#~ "to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter "
+#~ "the remote LAN here. You may leave this blank if you don't want a site-to-"
+#~ "site VPN"
+#~ msgstr ""
+#~ "Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal "
+#~ "özel ağ (site-to-site VPN) kurulabilmesi için Tünel içinden "
+#~ "yönlendirilecek bir ağdır. CIDR aralığı şeklinde girilir. Eğer bu alanlar "
+#~ "arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer alanlar arası VPN "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz"
+
+#~ msgid "IPv6 Remote Network"
+#~ msgstr "IPv6 Uzak AÄŸ"
+
+#~ msgid ""
+#~ "This is an IPv6 network that will be routed through the tunnel, so that a "
+#~ "site-to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter "
+#~ "the remote LAN here. You may leave this blank if you don't want a site-to-"
+#~ "site VPN"
+#~ msgstr ""
+#~ "Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal "
+#~ "özel IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden "
+#~ "yönlendirilecek bir ağdır. IP/PREFIX olarak ifade edilir. Eğer bu alanlar "
+#~ "arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer alanlar arası VPN "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz"
+
+#~ msgid "The GPS must provide NMEA format output!"
+#~ msgstr "GPS NMEA formatında çıkış sağlamalıdır!"
+
+#~ msgid ""
+#~ "All serial ports are listed, be sure to pick only the port with the GPS "
+#~ "attached."
+#~ msgstr ""
+#~ "Tüm seri portlar listelendi, GPS'in bir porta bağlı olduğundan emin "
+#~ "olunuz."
+
+#~ msgid "It is best to configure at least 2 servers under"
+#~ msgstr "En az 2 sunucular altında yapılandırmak en iyisidir"
+
+#~ msgid "System > General"
+#~ msgstr "Sistem > Genel"
+
+#~ msgid "Urls"
+#~ msgstr "Urller"
+
+#~ msgid "A valid nat local network bit count must be specified."
+#~ msgstr "Geçerli bir nat yerel ağ bit sayısı belirtilmelidir."
+
+#~ msgid "A valid nat local network IP address must be specified."
+#~ msgstr "Geçerli bir nat yerel IP adresi belirtilmelidir."
+
+#~ msgid ""
+#~ "This is a network that will be routed through the tunnel, so that a site-"
+#~ "to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as a CIDR range. If this is a site-to-site VPN, enter "
+#~ "the remote LAN here. You may leave this blank to only communicate with "
+#~ "other clients"
+#~ msgstr ""
+#~ "Yönlendirme tablolarını elle değiştirmeden alanlar arası sanal özel ağ "
+#~ "(site-to-site VPN) kurulabilmesi için tünel içinden yönlendirilecek "
+#~ "ağdır. CIDR aralığı olarak belirtilir. Eğer bu siteler arası VPN ise "
+#~ "buraya uzak LAN girilir. Sadece diğer istemcilerle iletişim kurmak için "
+#~ "burayı boş bırakabilirsiniz"
+
+#~ msgid ""
+#~ "This is an IPv6 network that will be routed through the tunnel, so that a "
+#~ "site-to-site VPN can be established without manually changing the routing "
+#~ "tables. Expressed as an IP/PREFIX. If this is a site-to-site VPN, enter "
+#~ "the remote LAN here. You may leave this blank to only communicate with "
+#~ "other clients"
+#~ msgstr ""
+#~ "Yönlendirme tablolarında elle değişiklik yapmadan alanlar arası sanal "
+#~ "özel IPv6 ağı (site-to-site VPN) kurulabilmesi için Tünel içinden "
+#~ "yönlendirilecek bir ağdır. IP/PREFIX olarak tanımlanır. Eğer bu alanlar "
+#~ "arası bir VPN ise buraya uzak LAN'ı giriniz. Eğer alanlar arası VPN "
+#~ "istemiyorsanız burayı boş bırakabilirsiniz"
+
+#~ msgid "The /31 and /32 subnet mask are invalid for CARP IPs."
+#~ msgstr "/31 ve /32 altağ maskesi CARP IPleri için geçersiz."
+
+#~ msgid "The /127 and /128 subnet mask are invalid for CARP IPs."
+#~ msgstr "/127 ve /128 altağ maskesi CARP IPleri için geçersiz."
+
+#~ msgid "Standard Kernel"
+#~ msgstr "Standart Çekirdek"
+
+#~ msgid "Embedded Kernel"
+#~ msgstr "Gömülü Çekirdek"
+
+#~ msgid "Invalid VLAN interface."
+#~ msgstr "Geçersiz VLAN arabirimi."
+
+#~ msgid "Create an ARP Table Static Entry for this MAC & IP Address pair. "
+#~ msgstr ""
+#~ "Bu MAC & IP adresi çifti için bir ARP tablo statik girdisi oluşturur."
+
+#~ msgid "Invalid bridge interface."
+#~ msgstr "Geçersiz köprü arabirimi."
+
+#~ msgid "1992-2012 The FreeBSD Project. All rights reserved"
+#~ msgstr "1992-2012 FreeBSD Projesi. Tüm hakları saklıdır"
+
+#~ msgid "1999-2010 The PHP Group. All rights reserved."
+#~ msgstr "1999-2010 PHP Grubu. Tüm hakları saklıdır."
+
+#~ msgid "Prot"
+#~ msgstr "Prot"
+
+#~ msgid ""
+#~ "A valid nat local network IPv4 address must be specified or you need to "
+#~ "change Mode to IPv6"
+#~ msgstr ""
+#~ "Geçerli bir nat yerel IPv4 ağ adresi belirtilmeli yada Kipi IPv6'ya "
+#~ "deÄŸiÅŸtirmelisiniz"
+
+#~ msgid ""
+#~ "A valid nat local network IPv6 address must be specified or you need to "
+#~ "change Mode to IPv4"
+#~ msgstr ""
+#~ "Geçerli bir nat yerel IPv6 ağ adresi belirtilmeli yada Kipi IPv4'e "
+#~ "deÄŸiÅŸtirmelisiniz"
+
+#~ msgid "Mobile IPsec only supports Tunnel mode."
+#~ msgstr "Mobil IPSec yalnızca tünel modu destekler."
+
+#~ msgid "Phase 1 is using IPv4. You cannot use Tunnel IPv6 on Phase 2."
+#~ msgstr ""
+#~ "1. aşamada IPv4 kullanılmaktadır, 2. aşamada IPv6 tüneli kullanamazsınız."
+
+#~ msgid "Phase 1 is using IPv6. You cannot use Tunnel IPv4 on Phase 2."
+#~ msgstr ""
+#~ "1. aşamada IPv6 kullanılmaktadır, 2. aşamada IPv4 tüneli kullanamazsınız."
+
+#~ msgid ""
+#~ "Removing SPDs from tunnel gw '%1$s'. Local Subnet '%2$s' and Remote "
+#~ "Subnet '%3$s'. Reloading policy"
+#~ msgstr ""
+#~ "SPD(ler) ağ geçidi tünelinden siliniyor '%1$s'. Yerel Altağ '%2$s' ve "
+#~ "Uzak Altağ '%3$s'. ilkeler tekrar yükleniyor"
+
+#~ msgid "Disabling auto login was not possible."
+#~ msgstr "Otomatik giriş mümkün olmadığı için devre dışı bırakıldı."
+
+#~ msgid "Enabled console auto login, console menu is NOT password protected."
+#~ msgstr ""
+#~ "Konsola otomatik giriş açık, konsol menüsüne giriş şifre ile "
+#~ "korunmamaktadır."
+
+#~ msgid "Disabled console auto login, console menu is password protected."
+#~ msgstr ""
+#~ "Konsola otomatik giriş kapalı, konsol menüsüne giriş şifre ile "
+#~ "korunmaktadır."
+
+# 88%
+#~ msgid "Filter expresion"
+#~ msgstr "Filtreleme ifadesi"
+
+#~ msgid ""
+#~ "The alias (%s) has one or more FQDNs configured and cannot be used to "
+#~ "configure a static route."
+#~ msgstr ""
+#~ "Bu grup (%s) artık FQDNler yapılandırmasında yok ve statik yönlendirmede "
+#~ "kullanılmaz."
+
+#~ msgid ""
+#~ "The firewall rule configuration has been changed.<br/>You must apply the "
+#~ "changes in order for them to take effect."
+#~ msgstr ""
+#~ "Güvenlik duvarı kuralları değiştirildi.<br/>Değişiklikleri uygulayarak "
+#~ "etkin hale gelmelerini saÄŸlayabilirsiniz."
+
+#~ msgid "This alias is used on a static route and cannot contain FQDNs."
+#~ msgstr "Bu grup statik yönlendirmede kullanıldı ve FQDNler içermez."
+
+#~ msgid "MTU of a vlan should not be bigger than parent interface."
+#~ msgstr "Vlan için MTU üst (parent) arabirimden büyük olmamalıdır."
+
+#~ msgid "Interface %s (VLAN) has MTU set to a bigger value"
+#~ msgstr "Arabirim %s (VLAN) MTU değerinden daha büyük değer belirtildi"
+
+#~ msgid ""
+#~ "Ignoring IPsec racoon daemon reload since there are no tunnels on "
+#~ "interface %s"
+#~ msgstr ""
+#~ "Arabirim %s de tünel olmadığından IPsec rakun (racoon) servisi yeniden "
+#~ "yükleme işlemi göz ardı edildi"
+
+#~ msgid ""
+#~ "Enter a <b>hexadecimal</b> value between %x and %x here, default value is "
+#~ "0."
+#~ msgstr ""
+#~ "%x ve %x değeri arasında <b>onaltılı sayı dizgesi</b> girin, varsayılan "
+#~ "deÄŸer 0."
diff --git a/src/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml b/src/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml
new file mode 100755
index 0000000..44c5a62
--- /dev/null
+++ b/src/usr/local/share/mobile-broadband-provider-info/iso_3166-1_list_en.xml
@@ -0,0 +1,987 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<ISO_3166-1_List_en xml:lang="en">
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>AFGHANISTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ÅLAND ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AX</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ALBANIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ALGERIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>AMERICAN SAMOA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ANDORRA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ANGOLA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ANGUILLA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ANTARCTICA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AQ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ANTIGUA AND BARBUDA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ARGENTINA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ARMENIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ARUBA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>AUSTRALIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>AUSTRIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>AZERBAIJAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BAHAMAS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BAHRAIN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BANGLADESH</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BARBADOS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BB</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BELARUS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BELGIUM</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BELIZE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BENIN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BJ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BERMUDA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BHUTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BOLIVIA, PLURINATIONAL STATE OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BOSNIA AND HERZEGOVINA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BOTSWANA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BOUVET ISLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BRAZIL</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BRITISH INDIAN OCEAN TERRITORY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BRUNEI DARUSSALAM</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BULGARIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BURKINA FASO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>BURUNDI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CAMBODIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CAMEROON</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CANADA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CAPE VERDE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CAYMAN ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CENTRAL AFRICAN REPUBLIC</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CHAD</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CHILE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CHINA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CHRISTMAS ISLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CX</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>COCOS (KEELING) ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>COLOMBIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>COMOROS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CONGO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CONGO, THE DEMOCRATIC REPUBLIC OF THE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>COOK ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>COSTA RICA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CÔTE D'IVOIRE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CROATIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CUBA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CYPRUS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>CZECH REPUBLIC</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>DENMARK</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>DJIBOUTI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DJ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>DOMINICA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>DOMINICAN REPUBLIC</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ECUADOR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>EC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>EGYPT</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>EG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>EL SALVADOR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>EQUATORIAL GUINEA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GQ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ERITREA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ER</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ESTONIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>EE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ETHIOPIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ET</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FALKLAND ISLANDS (MALVINAS)</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FAROE ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FIJI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FJ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FINLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FRANCE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FRENCH GUIANA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FRENCH POLYNESIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>FRENCH SOUTHERN TERRITORIES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GABON</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GAMBIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GEORGIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GERMANY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>DE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GHANA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GIBRALTAR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GREECE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GREENLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GRENADA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUADELOUPE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GP</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUAM</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUATEMALA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUERNSEY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUINEA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUINEA-BISSAU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>GUYANA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HAITI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HEARD ISLAND AND MCDONALD ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HOLY SEE (VATICAN CITY STATE)</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HONDURAS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HONG KONG</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>HUNGARY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>HU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ICELAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>INDIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>INDONESIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ID</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>IRAN, ISLAMIC REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>IRAQ</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IQ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>IRELAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ISLE OF MAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ISRAEL</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ITALY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>IT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>JAMAICA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>JM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>JAPAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>JP</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>JERSEY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>JE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>JORDAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>JO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KAZAKHSTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KENYA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KIRIBATI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KP</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KOREA, REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KUWAIT</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>KYRGYZSTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LAO PEOPLE'S DEMOCRATIC REPUBLIC</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LATVIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LEBANON</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LB</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LESOTHO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LIBERIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LIBYAN ARAB JAMAHIRIYA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LIECHTENSTEIN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LITHUANIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>LUXEMBOURG</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MACAO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MADAGASCAR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MALAWI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MALAYSIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MALDIVES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MALI</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ML</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MALTA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MARSHALL ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MARTINIQUE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MQ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MAURITANIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MAURITIUS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MAYOTTE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>YT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MEXICO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MX</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MICRONESIA, FEDERATED STATES OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>FM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MOLDOVA, REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MONACO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MONGOLIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MONTENEGRO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ME</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MONTSERRAT</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MOROCCO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MOZAMBIQUE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>MYANMAR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NAMIBIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NAURU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NEPAL</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NP</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NETHERLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NETHERLANDS ANTILLES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NEW CALEDONIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NEW ZEALAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NICARAGUA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NIGER</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NIGERIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NIUE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NORFOLK ISLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NORTHERN MARIANA ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MP</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>NORWAY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>NO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>OMAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>OM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PAKISTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PALAU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PALESTINIAN TERRITORY, OCCUPIED</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PANAMA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PAPUA NEW GUINEA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PARAGUAY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PERU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PHILIPPINES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PITCAIRN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>POLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PORTUGAL</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>PUERTO RICO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>QATAR</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>QA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>REUNION</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>RE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ROMANIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>RO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>RUSSIAN FEDERATION</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>RU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>RWANDA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>RW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT BARTHÉLEMY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>BL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT KITTS AND NEVIS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>KN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT LUCIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT MARTIN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>MF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT PIERRE AND MIQUELON</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>PM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAINT VINCENT AND THE GRENADINES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAMOA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>WS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAN MARINO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAO TOME AND PRINCIPE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ST</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SAUDI ARABIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SENEGAL</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SERBIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>RS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SEYCHELLES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SIERRA LEONE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SINGAPORE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SLOVAKIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SLOVENIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SOLOMON ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SB</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SOMALIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SOUTH AFRICA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ZA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GS</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SPAIN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ES</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SRI LANKA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>LK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SUDAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SD</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SURINAME</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SVALBARD AND JAN MAYEN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SJ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SWAZILAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SWEDEN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SWITZERLAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>CH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>SYRIAN ARAB REPUBLIC</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>SY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TAIWAN, PROVINCE OF CHINA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TAJIKISTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TJ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TANZANIA, UNITED REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>THAILAND</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TIMOR-LESTE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TL</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TOGO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TOKELAU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TK</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TONGA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TO</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TRINIDAD AND TOBAGO</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TT</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TUNISIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TURKEY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TR</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TURKMENISTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TURKS AND CAICOS ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TC</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>TUVALU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>TV</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UGANDA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>UG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UKRAINE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>UA</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UNITED ARAB EMIRATES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>AE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UNITED KINGDOM</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>GB</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UNITED STATES</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>US</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UNITED STATES MINOR OUTLYING ISLANDS</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>UM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>URUGUAY</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>UY</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>UZBEKISTAN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>UZ</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>VANUATU</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VU</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>VENEZUELA, BOLIVARIAN REPUBLIC OF</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>VIET NAM</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VN</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>VIRGIN ISLANDS, BRITISH</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VG</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>VIRGIN ISLANDS, U.S.</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>VI</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>WALLIS AND FUTUNA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>WF</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>WESTERN SAHARA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>EH</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>YEMEN</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>YE</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ZAMBIA</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ZM</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+ <ISO_3166-1_Entry>
+ <ISO_3166-1_Country_name>ZIMBABWE</ISO_3166-1_Country_name>
+ <ISO_3166-1_Alpha-2_Code_element>ZW</ISO_3166-1_Alpha-2_Code_element>
+ </ISO_3166-1_Entry>
+</ISO_3166-1_List_en>
diff --git a/src/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml b/src/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml
new file mode 100644
index 0000000..a109fa4
--- /dev/null
+++ b/src/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml
@@ -0,0 +1,13576 @@
+<?xml version="1.0" encoding='utf-8'?>
+<!-- -*- Mode: XML; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- -->
+<!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd">
+
+<!-- Authors:
+ 2008 Antti Kaijanmäki <antti@kaijanmaki.net>
+ 2009 Dan Williams <dcbw@redhat.com>
+ 2011 Antti Kaijanmäki <antti@canonical.com>
+-->
+
+<!-- THIS WORK IS IN PUBLIC DOMAIN:
+The person or persons who have associated work with this document
+(the "Dedicator" or "Certifier") hereby either (a) certifies that, to the best
+of his knowledge, the work of authorship identified is in the public domain of
+the country from which the work is published, or (b) hereby dedicates whatever
+copyright the dedicators holds in the work of authorship identified below
+(the "Work") to the public domain. A certifier, moreover, dedicates any
+copyright interest he may have in the associated work, and for these purposes,
+is described as a "dedicator" below.
+
+A certifier has taken reasonable steps to verify the copyright status of this
+work. Certifier recognizes that his good faith efforts may not shield him from
+liability if in fact the work certified is not in the public domain.
+
+Dedicator makes this dedication for the benefit of the public at large and to
+the detriment of the Dedicator's heirs and successors. Dedicator intends this
+dedication to be an overt act of relinquishment in perpetuity of all present
+and future rights under copyright law, whether vested or contingent, in the
+Work. Dedicator understands that such relinquishment of all rights includes the
+relinquishment of all rights to enforce (by lawsuit or otherwise) those
+copyrights in the Work.
+
+Dedicator recognizes that, once placed in the public domain, the Work may be
+freely reproduced, distributed, transmitted, used, modified, built upon, or
+otherwise exploited by anyone for any purpose, commercial or non-commercial,
+and in any way, including by methods that have not yet been invented or
+conceived.
+-->
+
+<serviceproviders format="2.0">
+
+<!-- United Arab Emirates -->
+<country code="ae">
+ <provider>
+ <name>Etisalat</name>
+ <gsm>
+ <network-id mcc="424" mnc="02"/>
+ <apn value="mnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Etisalat</name>
+ <username>mnet</username>
+ <password>mnet</password>
+ <dns>194.170.1.6</dns>
+ <dns>194.170.1.7</dns>
+ </apn>
+ <apn value="etisalat.ae">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Etisalat 3G</name>
+ <username>etisalat.ae</username>
+ <password>etisalat.ae</password>
+ </apn>
+ <apn value="etisalat">
+ <usage type="mms"/>
+ <name>etisalat MMS</name>
+ <mmsc>http://10.99.52.150/servlets/mms</mmsc>
+ <mmsproxy>10.12.0.30:8080</mmsproxy>
+ </apn>
+ <apn value="etisalat">
+ <usage type="mms"/>
+ <name>etisalat MMS</name>
+ <mmsc>http://mms/servlets/mms</mmsc>
+ <mmsproxy>10.12.0.32:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>du</name>
+ <gsm>
+ <network-id mcc="424" mnc="03"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <apn value="du">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="du">
+ <usage type="mms"/>
+ <name>du MMS</name>
+ <mmsc>http://mms.du.ae</mmsc>
+ <mmsproxy>10.19.18.4:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Afghanistan -->
+<country code="af">
+ <provider>
+ <name>AWCC</name>
+ <gsm>
+ <network-id mcc="412" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>awcc</username>
+ <password>1111</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Albania -->
+<country code="al">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="276" mnc="02"/>
+ <apn value="Twa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>TWA</name>
+ </apn>
+ <apn value="vodafoneweb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone Web</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Vodafone MMS</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <mmsc>http://217.31.233.18:6001/MM1Servlet</mmsc>
+ <mmsproxy>217.31.233.18:9401</mmsproxy>
+ </apn>
+ <apn value="portalnmms">
+ <usage type="mms"/>
+ <name>Vodafone MMS</name>
+ <mmsc>http://mms1.live.vodafone.in/mms/</mmsc>
+ <mmsproxy>10.10.1.100:9401</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Armenia -->
+<country code="am">
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="283" mnc="01"/>
+ <apn value="internet.beeline.am">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="mms.beeline.ua">
+ <usage type="mms"/>
+ <name>Beeline MMS</name>
+ <mmsc>http://mms/</mmsc>
+ <mmsproxy>10.11.8.18:8080</mmsproxy>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Beeline MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>10.16.70.199:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="283" mnc="10"/>
+ <apn value="internet.orange">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Hima (USB)</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://mms.orange.nl:8002</mmsc>
+ <mmsproxy>10.250.255.183:5080</mmsproxy>
+ </apn>
+ <apn value="orangemms">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <username>orange</username>
+ <password>orange</password>
+ <mmsc>http://mms.orange.es</mmsc>
+ <mmsproxy>wapmms.orange.es:8080</mmsproxy>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://192.168.151.3:8002</mmsc>
+ <mmsproxy>192.168.151.2:8080</mmsproxy>
+ </apn>
+ <apn value="orange.mms">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.orange.at/mms/wapenc</mmsc>
+ <mmsproxy>194.24.128.118:8080</mmsproxy>
+ </apn>
+ <apn value="orangemms">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://mms.orange.co.uk/</mmsc>
+ <mmsproxy>192.168.224.10:8080</mmsproxy>
+ </apn>
+ <apn value="mms.orange.dk">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://mms.orange.dk:8002</mmsc>
+ <mmsproxy>172.18.251.11:8080</mmsproxy>
+ </apn>
+ <apn value="mms.orange.md">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://mms/mms</mmsc>
+ <mmsproxy>192.168.127.125:3128</mmsproxy>
+ </apn>
+ <apn value="mms.orange.jo">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <username>mmc</username>
+ <password>mmc</password>
+ <mmsc>http://172.16.1.96/servlets/mms</mmsc>
+ <mmsproxy>172.16.1.2:8080</mmsproxy>
+ </apn>
+ <apn value="orangerun.acte">
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <mmsc>http://mms.orange.re</mmsc>
+ <mmsproxy>192.168.10.200:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>VivaCell/MTS</name>
+ <gsm>
+ <network-id mcc="283" mnc="05"/>
+ <apn value="connect.vivacell.am">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>MTS connect</name>
+ </apn>
+ <apn value="inet.vivacell.am">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Karabakh Telecom</name>
+ <gsm>
+ <network-id mcc="283" mnc="04"/>
+ <balance-check>
+ <ussd>*122#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="connect.kt.am">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>KT_MARK</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+
+<!-- Angola -->
+<country code="ao">
+ <provider>
+ <name>Movinet</name>
+ <cdma>
+ <username>uname</username>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Unitel</name>
+ <gsm>
+ <network-id mcc="631" mnc="02"/>
+ <apn value="internet.unitel.co.ao">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="unitel">
+ <usage type="mms"/>
+ <name>unitel mms</name>
+ <mmsc>http//mms.unitel.com</mmsc>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Argentina -->
+<country code="ar">
+ <provider>
+ <name>Personal</name>
+ <gsm>
+ <network-id mcc="722" mnc="341"/>
+ <network-id mcc="722" mnc="34"/>
+ <apn value="gprs.personal.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>gprs</username>
+ <password>adgj</password>
+ <dns>172.25.7.6</dns>
+ <dns>172.25.7.7</dns>
+ </apn>
+ <apn value="datos.personal.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>DATOS</name>
+ <username>datos</username>
+ <password>datos</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Arnet</name>
+ <gsm>
+ <network-id mcc="722" mnc="340"/>
+ <apn value="arnet.personal.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>172.25.7.6</dns>
+ <dns>172.25.7.7</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Personal MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.personal.com/</mmsc>
+ <mmsproxy>172.25.7.31:8080</mmsproxy>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MMS Personal</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>172.16.192.7:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="722" mnc="310"/>
+ <network-id mcc="722" mnc="320"/>
+ <network-id mcc="722" mnc="330"/>
+ <apn value="gprs.claro.com.ar">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G Internet</name>
+ <username>clarogprs</username>
+ <password>clarogprs999</password>
+ <dns>170.51.255.100</dns>
+ <dns>170.51.242.18</dns>
+ </apn>
+ <apn value="internet.ctimovil.com.ar">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>clarogprs</username>
+ <password>clarogprs999</password>
+ </apn>
+ <apn value="mms.claro.com.br">
+ <usage type="mms"/>
+ <name>Claro Foto</name>
+ <username>claro</username>
+ <password>claro</password>
+ <mmsc>http://mms.claro.com.br/</mmsc>
+ <mmsproxy>200.169.126.10:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="722" mnc="010"/>
+ <network-id mcc="722" mnc="070"/>
+ <apn value="internet.gprs.unifon.com.ar">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WAP</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="internet.gprs.unifon.com.ar">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>Internet</username>
+ <password>Internet</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Austria -->
+<country code="at">
+ <provider>
+ <name>A1/Telekom Austria</name>
+ <gsm>
+ <!-- Vodafone Broadband Connect version 10.1.0.23908 2010-06-07T17:47:01 -->
+ <network-id mcc="232" mnc="01"/>
+ <apn value="a1.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>A1 Breitband</name>
+ <username>ppp@a1plus.at</username>
+ <password>ppp</password>
+ <dns>194.48.124.202</dns>
+ <dns>194.48.124.200</dns>
+ </apn>
+ <!-- https://www.aon.at/export/sites/default/residential/pdf/produktfolder/aonFlex_Mobiltelefon.pdf-->
+ <apn value="aon.data">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>aon (Flex, Breitband-Duo, BusinessFlex)</name>
+ <username>mobile@aon.at</username>
+ <password>ppp</password>
+ </apn>
+ <!-- http://konfigurator.aon.at/otauseraon/templates/user/aon/manuals/AON_Installation.pdf -->
+ <apn value="aon.at">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>aonMobile</name>
+ <username>mobile@aon.at</username>
+ <password>ppp</password>
+ </apn>
+ <apn value="free.A1.net">
+ <usage type="mms"/>
+ <name>A1MMS</name>
+ <username>ppp@A1plus.at</username>
+ <password>ppp</password>
+ <mmsc>http://mmsc.A1.net</mmsc>
+ <mmsproxy>gateway.A1.net:8001</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ABroadband</name>
+ <gsm>
+ <network-id mcc="232" mnc="01"/>
+ <apn value="mdata.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>International Roaming</name>
+ <username>mdata@mdata.com</username>
+ <password>ppp</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bob</name>
+ <gsm>
+ <network-id mcc="232" mnc="11"/>
+ <apn value="bob.at">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>data@bob.at</username>
+ <password>ppp</password>
+ </apn>
+ <apn value="bob.at">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>ppp@bob.at</username>
+ <password>ppp</password>
+ <dns>194.48.139.254</dns>
+ <dns>194.48.124.200</dns>
+ </apn>
+ <apn value="mms.bob.at">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>data@bob.at</username>
+ <password>ppp</password>
+ </apn>
+ <apn value="mms.bob.at">
+ <usage type="mms"/>
+ <name>data bob MMS</name>
+ <username>data@bob.at</username>
+ <password>ppp</password>
+ <mmsc>http://mmsc.bob.at</mmsc>
+ <mmsproxy>194.48.124.7:8001</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="232" mnc="03"/>
+ <apn value="gprswap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ </apn>
+ <apn value="gprsinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ <dns>213.162.69.169</dns>
+ <dns>213.162.65.1</dns>
+ </apn>
+ <apn value="business.gprsinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business Internet</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ </apn>
+ <apn value="general.t-mobile.uk">
+ <usage type="mms"/>
+ <name>T-Mobile MMS</name>
+ <username>user</username>
+ <password>wap</password>
+ <mmsc>http://mmsc.t-mobile.co.uk:8002</mmsc>
+ <mmsproxy>149.254.201.135:8080</mmsproxy>
+ </apn>
+ <apn value="wap.voicestream.com">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>nokia</username>
+ <password>6600</password>
+ <mmsc>http://216.155.174.84/servlets/mms</mmsc>
+ <mmsproxy>216.155.165.50:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>tele.ring</name>
+ <gsm>
+ <network-id mcc="232" mnc="07"/>
+ <balance-check>
+ <ussd>*102#</ussd>
+ </balance-check>
+ <apn value="web">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Ge org:)</name>
+ <username>web@telering.at</username>
+ <password>web</password>
+ <dns>213.162.69.170</dns>
+ <dns>213.162.65.2</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>tele ring mms</name>
+ <username>wap@telering.at</username>
+ <password>wap</password>
+ <mmsc>http://relay.mms.telering.at</mmsc>
+ <mmsproxy>212.95.31.50:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="232" mnc="05"/>
+ <apn value="web.one.at">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>OneNet Web</name>
+ <username>web</username>
+ <password>web</password>
+ <dns>194.24.128.100</dns>
+ <dns>194.24.128.102</dns>
+ </apn>
+ <apn value="wap.one.at">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Orange WAP</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="mms.one.at">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ <apn value="fullspeed">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web (no filtering)</name>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="orange.web">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Orange Web</name>
+ <username>Orange</username>
+ <password>Orange</password>
+ <dns>81.3.216.100</dns>
+ <dns>194.24.128.100</dns>
+ </apn>
+ <apn value="orange.mms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Orange Web</name>
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Drei (3)</name>
+ <name xml:lang="de">Drei</name>
+ <gsm>
+ <network-id mcc="232" mnc="10"/>
+ <apn value="drei.at">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.94.78.17</dns>
+ <dns>213.94.78.16</dns>
+ </apn>
+ <apn value="drei.at">
+ <usage type="mms"/>
+ <name>3MMS</name>
+ <mmsc>http://mmsc</mmsc>
+ <mmsproxy>213.94.78.133:8799</mmsproxy>
+ </apn>
+ <apn value="three.co.uk">
+ <usage type="mms"/>
+ <name>3 MMS</name>
+ <mmsc>http://mms.um.three.co.uk:10021/mmsc</mmsc>
+ <mmsproxy>mms.three.co.uk:8799</mmsproxy>
+ </apn>
+ <apn value="mobile.three.com.hk">
+ <usage type="mms"/>
+ <name>3MMS</name>
+ <mmsc>http://mms.um.three.com.hk:10021/mmsc</mmsc>
+ <mmsproxy>172.20.97.116:8799</mmsproxy>
+ </apn>
+ <apn value="3services">
+ <usage type="mms"/>
+ <name>3 MMS</name>
+ <mmsc>http://mmsc.three.net.au:10021/mmsc</mmsc>
+ <mmsproxy>mmscprox.three.net.au:8799</mmsproxy>
+ </apn>
+ <apn value="3mms">
+ <usage type="mms"/>
+ <name>3mms</name>
+ <username>3mms</username>
+ <password>3mms</password>
+ <mmsc>http://mms.three.co.id</mmsc>
+ <mmsproxy>10.4.0.10:3128</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Yesss</name>
+ <gsm>
+ <network-id mcc="232" mnc="12"/>
+ <apn value="web.yesss.at">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on T-Mobile's network -->
+ <name>VOLmobil</name>
+ <gsm>
+ <network-id mcc="232" mnc="03"/>
+ <apn value="volmobil">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="gprsmms">
+ <usage type="mms"/>
+ <name>T-Mobile MMS</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ <mmsc>http://mmsc.t-mobile.at/servlets/mms</mmsc>
+ <mmsproxy>10.12.0.20:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Australia -->
+<!-- http://whirlpool.net.au/wiki/mobiles_apn
+ http://ausdroid.net/apns/ -->
+<country code="au">
+ <provider>
+ <name>Amaysim</name>
+ <!-- http://www.amaysim.com.au/help-support/amaysim-mobile-broadband.html/ -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="internet"/>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Optus MMS</name>
+ <mmsc>http://mmsc.optus.com.au:8002/</mmsc>
+ <mmsproxy>61.88.190.10:8070</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Apex Telecom</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns357"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Beagle</name>
+ <!-- http://www.beagle.com.au/support/faq/wireless.html -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns357"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>BLiNK</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns888a1">
+ <name>BLiNK (services after 04/08/09)</name>
+ </apn>
+ <apn value="connect">
+ <name>BLiNK (services prior to 04/08/09)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Crazy John&apos;s</name>
+ <gsm>
+ <network-id mcc="505" mnc="03"/>
+ <network-id mcc="505" mnc="38"/>
+ <apn value="purtona.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Crazy NET</name>
+ <dns>203.21.112.40</dns>
+ <dns>203.21.113.40</dns>
+ </apn>
+ <apn value="purtona.wap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Crazy WAP/MMS</name>
+ </apn>
+ <apn value="purtona.wap">
+ <usage type="mms"/>
+ <name>Crazy MMS</name>
+ <mmsc>http://purtona.mms/mmssend</mmsc>
+ <mmsproxy>10.202.2.20:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dodo</name>
+ <!-- http://www.dodo.com/top-right-navigation/support/technical-support/wireless-broadband/wireless-broadband-settings/ -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="WirelessBroadband">
+ <name>Postpaid</name>
+ </apn>
+ <apn value="DODOLNS1">
+ <name>Prepaid</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Escape Net</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns357"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Exetel</name>
+ <!-- http://www.exetel.com.au/mobile_faq.php -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="exetel1">
+ <name>Exetel (Optus Based HSPA plans)</name>
+ </apn>
+ <apn value="INTERNET">
+ <name>Exetel (Optus Based CAP Plans) not iPhone</name>
+ </apn>
+ <apn value="OPTUSWAP">
+ <name>Exetel (Optus Based CAP Plans) not iPhone</name>
+ </apn>
+ <apn value="YesINTERNET">
+ <name>Exetel (Optus Based CAP Plans) iPhone</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Exetel (Vodafone based)</name>
+ <gsm>
+ <network-id mcc="505" mnc="03"/>
+ <apn value="vfinternet.au">
+ <name>Exetel (Vodafone Based)</name>
+ </apn>
+ </gsm>
+ </provider>
+<!-- Not validated yet
+ <provider>
+ <name>GRL / Red Bull Mobile</name>
+ <gsm>
+ <network-id mcc="505" mnc="03"/>
+ <apn value="purtona.net"/>
+ </gsm>
+ </provider>
+-->
+ <provider>
+ <name>Highway1</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns357"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>iiNet</name>
+ <!-- https://iihelp.iinet.net.au/BoB_MBB -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="iinet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Internode</name>
+ <gsm>
+ <!-- http://www.internode.on.net/residential/broadband/3g_wireless/nodemobile_data/faq/#What_is_the_APN -->
+ <network-id mcc="505" mnc="02"/>
+ <apn value="internode">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>NodeMobile Data</name>
+ </apn>
+ <apn value="splns333a1">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old NodeMobile Data (before 2009-08-26)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>iPrimus</name>
+ <!-- http://support.iprimus.com.au/index.php?option=com_content&task=view&id=559&Itemid=203 -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="primuslns1"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Optus</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet (handsets)</name>
+ <dns>211.29.132.12</dns>
+ <dns>198.142.0.51</dns>
+ </apn>
+ <apn value="yesinternet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Optus Yes Internet</name>
+ <dns>211.29.132.12</dns>
+ <dns>198.142.0.51</dns>
+ </apn>
+ <apn value="connect">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Wireless Broadband</name>
+ <dns>211.29.132.12</dns>
+ <dns>198.142.0.51</dns>
+ </apn>
+ <apn value="connectcap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Post-Paid Mobile Broadband</name>
+ <dns>211.29.132.12</dns>
+ <dns>198.142.0.51</dns>
+ </apn>
+ <apn value="preconnect">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pre-Paid Mobile Broadband</name>
+ <dns>211.29.132.12</dns>
+ <dns>198.142.0.51</dns>
+ </apn>
+ <apn value="mms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Optus MMS</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TPG Mobile</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="yesinternet">
+ <name>TPG (iPhone)</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>TPG (all except iPhone)</name>
+ </apn>
+ <apn value="mms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>MMS</name>
+ </apn>
+ </gsm>
+ </provider>
+<!-- not yet validated
+ <provider>
+ <name>Pacnet – Optus</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="pacnet"/>
+ <apn value="internet"/>
+ </gsm>
+ </provider>
+-->
+ <provider>
+ <name>Pennytel</name>
+ <!-- https://www.pennytel.com.au/faqs?f-answer-search=apn&x=0&y=0 -->
+ <gsm>
+ <network-id mcc="505" mnc="03"/>
+ <apn value="live.vodafone.com">
+ <name>Pennytel (Vodafone) live.vodafone.com</name>
+ </apn>
+ <apn value="vfinternet.au">
+ <name>Pennytel (Vodafone) vfinternet.au</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Smelly Black Dog</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="splns357"/>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telstra</name>
+ <gsm>
+ <network-id mcc="505" mnc="01"/>
+ <balance-check>
+ <dtmf>125111</dtmf>
+ <dtmf>1258888</dtmf>
+ <ussd-response>*100#</ussd-response>
+ </balance-check>
+ <apn value="telstra.wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>139.130.4.4</dns>
+ <dns>203.50.2.71</dns>
+ </apn>
+ <apn value="telstra.datapack">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telstra (3G data pack)</name>
+ <password>Telstra</password>
+ <dns>139.130.4.4</dns>
+ <dns>203.50.2.71</dns>
+ </apn>
+ <apn value="telstra.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telstra (Next G)</name>
+ <dns>10.4.85.138</dns>
+ <dns>10.4.176.234</dns>
+ </apn>
+ <apn value="telstra.pcpack">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telstra (3G PC pack - pay by time)</name>
+ <password>Telstra</password>
+ <dns>139.130.4.4</dns>
+ <dns>203.50.2.71</dns>
+ </apn>
+ <apn value="telstra.iph">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Telstra Internet/Wap</name>
+ </apn>
+ <apn value="telstra.mms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Telstra MMS</name>
+ </apn>
+ <apn value="telstra.bigpond">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telstra BigPond</name>
+ <!-- username/password per-user -->
+ </apn>
+ <apn value="telstra.mms">
+ <usage type="mms"/>
+ <name>Telstra MMS</name>
+ <mmsc>http://mmsc.telstra.com:8002</mmsc>
+ <mmsproxy>10.1.1.180:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Three</name>
+ <gsm>
+ <network-id mcc="505" mnc="06"/>
+ <apn value="3netaccess">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>a</username>
+ <password>a</password>
+ <dns>202.124.68.130</dns>
+ <dns>202.124.76.66</dns>
+ </apn>
+ <apn value="3services">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Three Prepaid</name>
+ <username>a</username>
+ <password>a</password>
+ <dns>202.124.68.130</dns>
+ <dns>202.124.76.66</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Virgin Mobile</name>
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="VirginInternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ <username>guest</username>
+ <password>guest</password>
+ <dns>61.88.88.88</dns>
+ </apn>
+ <apn value="VirginBroadband">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <!-- http://www.vodafone.com.au/personal/mobile-broadband/modem-setup/index.htm -->
+ <network-id mcc="505" mnc="03"/>
+ <apn value="vfinternet.au">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid and some prepaid phone plans</name>
+ </apn>
+ <!-- username/password included in Vodafone Broadband Connect version 10.1.0.23908 2010-06-07T17:47:01 -->
+ <!-- username/password not on site http://www.vodafone.com.au/personal/mobile-broadband/modem-setup/index.htm -->
+ <apn value="vfprepaymbb">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <!-- username>web</username -->
+ <!-- password>web</password -->
+ <dns>203.21.112.40</dns>
+ <dns>203.21.113.40</dns>
+ </apn>
+ <apn value="live.vodafone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Westnet</name>
+ <!-- http://myhelp.westnet.com.au/pages/releaseview.action?pageId=17073209#FAQs-WestnetMobilePhone-link31 -->
+ <gsm>
+ <network-id mcc="505" mnc="02"/>
+ <apn value="yesinternet">
+ <name>Westnet (iPhone)</name>
+ </apn>
+ <apn value="internet">
+ <name>Westnet (all except iPhone)</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Azerbaijan -->
+<country code="az">
+ <provider>
+ <name>Azercell</name>
+ <gsm>
+ <network-id mcc="400" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Azercell MMS</name>
+ <mmsc>http://mms.azercell.com/cMMSC/post</mmsc>
+ <mmsproxy>10.0.154.101:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bakcell</name>
+ <gsm>
+ <network-id mcc="400" mnc="02"/>
+ <apn value="mms">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Azerfon</name>
+ <gsm>
+ <network-id mcc="400" mnc="04"/>
+ <msisdn-query>
+ <ussd>*100#3#</ussd>
+ </msisdn-query>
+ <apn value="azerfon">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Bosnia & Herzegovina -->
+<country code="ba">
+ <provider>
+ <name>BH GSM</name>
+ <gsm>
+ <network-id mcc="218" mnc="90"/>
+ <apn value="mms.bhmobile.ba">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ </apn>
+ <apn value="mms.bhmobile.ba">
+ <usage type="mms"/>
+ <name>BHMobileMMS</name>
+ <mmsc>http://mms.bhmobile.ba/cmmsc/post</mmsc>
+ <mmsproxy>195.222.56.41:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>m:tel</name>
+ <gsm>
+ <network-id mcc="218" mnc="05"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <apn value="mtelgprs1">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Package 1</name>
+ <dns>81.93.67.2</dns>
+ <dns>81.93.67.3</dns>
+ </apn>
+ <apn value="mtelgprs2">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Package 2</name>
+ <dns>81.93.67.2</dns>
+ <dns>81.93.67.3</dns>
+ </apn>
+ <apn value="mtelgprs3">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Package 3</name>
+ <dns>81.93.67.2</dns>
+ <dns>81.93.67.3</dns>
+ </apn>
+ <apn value="mtelgprs4">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Package 4</name>
+ <dns>81.93.67.2</dns>
+ <dns>81.93.67.3</dns>
+ </apn>
+ <apn value="mtelfun">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <dns>81.93.67.2</dns>
+ <dns>81.93.67.3</dns>
+ </apn>
+ <apn value="mobismms">
+ <usage type="mms"/>
+ <name>mobismms</name>
+ <mmsc>http://mmsc.065mobis.com/mms/wapenc</mmsc>
+ <mmsproxy>192.168.61.11:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>HT-ERONET</name>
+ <gsm>
+ <network-id mcc="218" mnc="03"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <apn value="gprs.eronet.ba">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.eronet.ba">
+ <usage type="mms"/>
+ <name>ERONET MMS</name>
+ <mmsc>http://mms.gprs.eronet.ba/mms/wapenc</mmsc>
+ <mmsproxy>10.12.3.11:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Barbados -->
+<country code="bb">
+ <provider>
+ <name>Digicel</name>
+ <gsm>
+ <network-id mcc="342" mnc="750"/>
+ <apn value="isp.digicelbarbados.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Bangladesh -->
+<country code="bd">
+ <provider>
+ <name>Robi (AKTel)</name>
+ <gsm>
+ <network-id mcc="470" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <dns>192.168.23.7</dns>
+ </apn>
+ <apn value="wap">
+ <usage type="mms"/>
+ <name>AKTEL-MMS 2 0</name>
+ <mmsc>http://192.168.23.4/was</mmsc>
+ <mmsproxy>192.168.23.7:9028</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Banglalink</name>
+ <gsm>
+ <network-id mcc="470" mnc="03"/>
+ <apn value="blweb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web</name>
+ <dns>10.10.55.34</dns>
+ </apn>
+ <apn value="blmms">
+ <usage type="mms"/>
+ <name>blmms</name>
+ <mmsc>http://mmsc1:10021/mmsc/01</mmsc>
+ <mmsproxy>10.10.55.34:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>GrameenPhone</name>
+ <gsm>
+ <network-id mcc="470" mnc="01"/>
+ <apn value="gpinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>202.56.4.120</dns>
+ <dns>202.56.4.121</dns>
+ </apn>
+ <apn value="gpmms">
+ <usage type="mms"/>
+ <name>GP MMS</name>
+ <mmsc>http://mms.gpsurf.net/servlets/mms</mmsc>
+ <mmsproxy>10.128.1.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Airtel (Warid)</name>
+ <gsm>
+ <network-id mcc="470" mnc="07"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <dns>10.6.0.2</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Airtel MMS</name>
+ <mmsc>http://10.6.0.21/servlets/mms</mmsc>
+ <mmsproxy>10.6.0.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://www.teletalk.com.bd/cpoint/3G/MMS_Internet_service.php -->
+ <name>Teletalk</name>
+ <gsm>
+ <network-id mcc="470" mnc="04"/>
+ <apn value="wap">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Airtel MMS</name>
+ <mmsc>http://10.5.4.22:38090/was</mmsc>
+ <mmsproxy>10.5.4.40:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Citycell</name>
+ <cdma>
+ <username>waps</username>
+ <password>waps</password>
+ <dns>117.18.224.146</dns>
+ <dns>117.18.224.147</dns>
+ <sid value="13480"/>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Belgium -->
+<country code="be">
+ <provider>
+ <name>Mobistar</name>
+ <gsm>
+ <network-id mcc="206" mnc="10"/>
+ <voicemail>5555</voicemail>
+ <balance-check>
+ <ussd>#123#</ussd>
+ </balance-check>
+ <apn value="web.pro.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business</name>
+ <username>mobistar</username>
+ <password>mobistar</password>
+ <dns>212.65.63.10</dns>
+ <dns>212.65.63.145</dns>
+ </apn>
+ <apn value="internet.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Personal</name>
+ <username>mobistar</username>
+ <password>mobistar</password>
+ <dns>212.65.63.10</dns>
+ <dns>212.65.63.145</dns>
+ </apn>
+ <apn value="iew.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere</name>
+ <username>mobistar</username>
+ <password>mobistar</password>
+ <dns>212.224.255.252</dns>
+ <dns>212.65.63.217</dns>
+ </apn>
+ <apn value="mworld.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mobistar</username>
+ <password>mobistar</password>
+ <dns>212.65.63.10</dns>
+ <dns>212.65.63.145</dns>
+ </apn>
+ <apn value="mms.be">
+ <usage type="mms"/>
+ <name>Mobistar MMS</name>
+ <mmsc>http://mmsc.mobistar.be</mmsc>
+ <mmsproxy>212.65.63.143:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telenet Mobile</name>
+ <gsm>
+ <network-id mcc="206" mnc="10"/>
+ <apn value="mobile.internet.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old Walk &amp; Surf</name>
+ </apn>
+ <apn value="telenetwap.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Walk &amp; Talk</name>
+ </apn>
+ <apn value="telenetwap.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Walk &amp; Surf</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="206" mnc="10"/>
+ <apn value="orangeinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Proximus</name>
+ <gsm>
+ <network-id mcc="206" mnc="01"/>
+ <voicemail>1230</voicemail>
+ <!-- no balancecheck method ('auto-recharge') -->
+ <apn value="internet.proximus.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Inter</name>
+ <dns>195.238.2.21</dns>
+ <dns>81.169.60.107</dns>
+ </apn>
+ <apn value="intraprox.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Intra</name>
+ <dns>195.238.2.21</dns>
+ <dns>195.238.2.22</dns>
+ </apn>
+ <apn value="event.proximus.be">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.proximus.be/mms</mmsc>
+ <mmsproxy>10.55.14.75:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Base</name>
+ <gsm>
+ <network-id mcc="206" mnc="20"/>
+ <voicemail>1933</voicemail>
+ <!-- no balancecheck method ('auto-recharge') -->
+ <apn value="gprs.base.be">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>base</username>
+ <password>base</password>
+ <dns>195.130.131.139</dns>
+ <dns>212.53.4.4</dns>
+ </apn>
+ <apn value="mms.base.be">
+ <usage type="mms"/>
+ <name>BASE MMS</name>
+ <username>base</username>
+ <password>base</password>
+ <mmsc>http://mmsc.base.be</mmsc>
+ <mmsproxy>217.72.235.1:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mobile Vikings</name>
+ <gsm>
+ <network-id mcc="206" mnc="20"/>
+ <voicemail>1933</voicemail>
+ <apn value="web.be">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Burkina Faso -->
+<country code="bf">
+ <provider>
+ <name>Airtel 3G</name>
+ <gsm>
+ <network-id mcc="613" mnc="02"/>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Bulgaria -->
+<country code="bg">
+ <provider>
+ <name>GloBul</name>
+ <gsm>
+ <network-id mcc="284" mnc="05"/>
+ <voicemail>120</voicemail>
+ <balance-check>
+ <ussd>*125#</ussd>
+ </balance-check>
+ <apn value="internet.globul.bg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>globul</username>
+ <dns>192.168.88.11</dns>
+ </apn>
+ <apn value="mms.globul.bg">
+ <usage type="mms"/>
+ <name>GLOBUL MMS GPRS</name>
+ <username>mms</username>
+ <mmsc>http://mmsc1.mms.globul.bg:8002</mmsc>
+ <mmsproxy>192.168.87.11:8004</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>M-Tel</name>
+ <gsm>
+ <network-id mcc="284" mnc="01"/>
+ <voicemail>131</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <!-- username/password not included in Vodafone Broadband Connect version 10.1.0.23908 2010-06-07T17:47:01 -->
+ <apn value="inet-gprs.mtel.bg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.226.7.34</dns>
+ <dns>213.226.7.35</dns>
+ </apn>
+ <apn value="mms-gprs.mtel.bg">
+ <usage type="mms"/>
+ <name>MMS M-Tel GPRS</name>
+ <username>mtel</username>
+ <password>mtel</password>
+ <mmsc>http://mmsc/</mmsc>
+ <mmsproxy>10.150.0.33:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vivacom</name>
+ <gsm>
+ <network-id mcc="284" mnc="03"/>
+ <voicemail>110</voicemail>
+ <balance-check>
+ <ussd>*102#</ussd>
+ </balance-check>
+ <apn value="internet.vivacom.bg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <!-- http://www.vivacom.bg/en/residential/help_and_advice/common_questions/mobile_postpaid/8/ -->
+ <name>Vivacom Internet (Postpaid)</name>
+ <username>vivacom</username>
+ <password>vivacom</password>
+ </apn>
+ <apn value="internet.vivatel.bg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vivatel (old)</name>
+ <username>vivatel</username>
+ <password>vivatel</password>
+ <dns>192.168.123.123</dns>
+ </apn>
+ <apn value="mms.vivacom.bg">
+ <usage type="mms"/>
+ <name>vivacom MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.vivacom.bg</mmsc>
+ <mmsproxy>192.168.123.123:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Bahrain -->
+<country code="bh">
+ <provider>
+ <name>Batelco</name>
+ <gsm>
+ <network-id mcc="426" mnc="01"/>
+ <apn value="internet.batelco.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>oNet</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="mms.batelco.com">
+ <usage type="mms"/>
+ <name>Batelco MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://192.168.36.10/servlets/mms</mmsc>
+ <mmsproxy>192.168.1.2:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zain BH</name>
+ <gsm>
+ <network-id mcc="426" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="hsdpa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>eGO</name>
+ <username>hsdpa</username>
+ <password>hsdpa</password>
+ </apn>
+ <apn value="http://172.18.83.129">
+ <usage type="mms"/>
+ <name>mms</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://172.18.83.129</mmsc>
+ <mmsproxy>172.18.85.34:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>STC</name>
+ <gsm>
+ <network-id mcc="426" mnc="04"/>
+ <apn value="viva.bh">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Viva</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Brazil -->
+<country code="br">
+ <provider>
+ <!-- Brasil Telecom was bought by Oi on 2009-01-09 and will be phased
+ out and transitioned to Oi.
+ -->
+ <name>Brasil Telecom</name>
+ <gsm>
+ <network-id mcc="724" mnc="16"/>
+ <apn value="brt.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>BrT</username>
+ <password>BrT</password>
+ </apn>
+ <apn value="mms.brt.br">
+ <usage type="mms"/>
+ <name>BrT MMS</name>
+ <username>brt</username>
+ <password>brt</password>
+ <mmsc>http://mms.brasiltelecom.com.br/</mmsc>
+ <mmsproxy>200.96.8.29:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="724" mnc="05"/>
+ <voicemail>*100</voicemail>
+ <balance-check>
+ <ussd>*544#</ussd>
+ <ussd>*545#</ussd>
+ <ussd>*546#</ussd>
+ </balance-check>
+ <apn value="claro.com.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>claro</username>
+ <password>claro</password>
+ </apn>
+ <apn value="bandalarga.claro.com.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G</name>
+ <username>claro</username>
+ <password>claro</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CTBC</name>
+ <gsm>
+ <network-id mcc="724" mnc="07"/>
+ <network-id mcc="724" mnc="32"/>
+ <network-id mcc="724" mnc="33"/>
+ <network-id mcc="724" mnc="34"/>
+ <balance-check>
+ <dtmf>*22</dtmf>
+ </balance-check>
+ <apn value="ctbc.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>ctbc</username>
+ <password>1212</password>
+ </apn>
+ <apn value="mms.ctbc.br">
+ <usage type="mms"/>
+ <name>CTBC MMS</name>
+ <username>ctbc</username>
+ <password>1212</password>
+ <mmsc>http://mms.ctbccelular.com.br/was</mmsc>
+ <mmsproxy>172.29.7.70:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Oi</name>
+ <gsm>
+ <network-id mcc="724" mnc="16"/>
+ <network-id mcc="724" mnc="31"/>
+ <network-id mcc="724" mnc="24"/>
+ <voicemail>*100</voicemail>
+ <balance-check>
+ <dtmf>*804</dtmf>
+ <dtmf>*805</dtmf>
+ </balance-check>
+ <apn value="gprs.oi.com.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <password>oioioi</password>
+ </apn>
+ <apn value="wapgprs.oi.com.br">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>oiwap</username>
+ <password>oioioi</password>
+ </apn>
+ <apn value="mmsgprs.oi.com.br">
+ <usage type="mms"/>
+ <name>Oi MMS</name>
+ <username>oimms</username>
+ <password>oioioi</password>
+ <mmsc>http://200.222.42.204:8002</mmsc>
+ <mmsproxy>192.168.10.50:3128</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TIM</name>
+ <gsm>
+ <network-id mcc="724" mnc="02"/>
+ <network-id mcc="724" mnc="03"/>
+ <network-id mcc="724" mnc="04"/>
+ <network-id mcc="724" mnc="08"/>
+ <voicemail>*100</voicemail>
+ <balance-check>
+ <ussd>*222#</ussd>
+ <dtmf>*222</dtmf>
+ </balance-check>
+ <apn value="tim.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>tim</username>
+ <password>tim</password>
+ <dns>10.223.246.102</dns>
+ <dns>10.223.246.103</dns>
+ </apn>
+ <apn value="unico.tim.it">
+ <usage type="mms"/>
+ <name>iTIM</name>
+ <mmsc>http://mms.tim.it/servlets/mms</mmsc>
+ <mmsproxy>213.230.130.89:80</mmsproxy>
+ </apn>
+ <apn value="timbrasil.br">
+ <usage type="mms"/>
+ <name>TIM MMS</name>
+ <username>tim</username>
+ <password>tim</password>
+ <mmsc>http://mms.tim.br</mmsc>
+ <mmsproxy>200.179.66.242:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Velox</name>
+ <gsm>
+ <apn value="wap.telcel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>iesgprs</username>
+ <password>iesgprs2002</password>
+ <dns>66.36.250.14</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vivo</name>
+ <gsm>
+ <network-id mcc="724" mnc="06"/>
+ <network-id mcc="724" mnc="10"/>
+ <network-id mcc="724" mnc="11"/>
+ <network-id mcc="724" mnc="23"/>
+ <voicemail>*555</voicemail>
+ <balance-check>
+ <dtmf>*8000</dtmf>
+ <dtmf>*5005</dtmf>
+ </balance-check>
+ <apn value="zap.vivo.com.br">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vivo</username>
+ <password>vivo</password>
+ </apn>
+ <apn value="mms.vivo.com.br">
+ <usage type="mms"/>
+ <name>Vivo MMS</name>
+ <username>vivo</username>
+ <password>vivo</password>
+ <mmsc>http://termnat.vivomms.com.br:8088/mms</mmsc>
+ <mmsproxy>200.142.130.104:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Bahamas -->
+<country code="bs">
+ <provider>
+ <name>Batelco</name>
+ <gsm>
+ <network-id mcc="364" mnc="390"/>
+ <apn value="internet.btcbahamas.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Brunei -->
+<country code="bn">
+ <provider>
+ <name>B-Mobile</name>
+ <gsm>
+ <network-id mcc="528" mnc="02"/>
+ <apn value="bmobilewap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="bmobilemms">
+ <usage type="mms"/>
+ <name>B-mobile MMS</name>
+ <mmsc>http://mms.bmobile.com.bn/was</mmsc>
+ <mmsproxy>129.9.10.20:6500</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>DSTCOM</name>
+ <gsm>
+ <network-id mcc="528" mnc="11"/>
+ <apn value="dst.wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="mms.movistar.es">
+ <usage type="mms"/>
+ <name>Movistar MMS</name>
+ <username>MOVISTAR@mms</username>
+ <password>MOVISTAR</password>
+ <mmsc>http://mms.movistar.com</mmsc>
+ <mmsproxy>10.138.255.5:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Belarus -->
+<country code="by">
+ <provider>
+ <!-- http://www.velcom.by/ru/services/gprs/settings/ -->
+ <name>velcom</name>
+ <gsm>
+ <network-id mcc="257" mnc="01"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="wap.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>GPRS WAP</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="web.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS WEB</name>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="plus.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS WEB PLUS</name>
+ <username>plus</username>
+ <password>plus</password>
+ </apn>
+ <apn value="privet.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS PRIVET</name>
+ <username>privet</username>
+ <password>privet</password>
+ </apn>
+ <apn value="web1.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB BASIC</name>
+ <username>web1</username>
+ <password>web1</password>
+ </apn>
+ <apn value="web2.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB 25</name>
+ <username>web2</username>
+ <password>web2</password>
+ </apn>
+ <apn value="web3.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB 150</name>
+ <username>web3</username>
+ <password>web3</password>
+ </apn>
+ <apn value="vmi.velcom.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB 500</name>
+ <username>vmi</username>
+ <password>vmi</password>
+ </apn>
+ <apn value="mms.velcom.by">
+ <usage type="mms"/>
+ <name>VELCOM MMS</name>
+ <mmsc>http://mms.velcom.by/servlets/mms</mmsc>
+ <mmsproxy>10.200.15.15:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTS</name>
+ <gsm>
+ <network-id mcc="257" mnc="02"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet.mts.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mts</username>
+ <password>mts</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MTS MMS</name>
+ <mmsc>http://mms.mts064.telekom.yu/mms/wapenc</mmsc>
+ <mmsproxy>172.17.85.131:8080</mmsproxy>
+ </apn>
+ <apn value="mms.mts.ru">
+ <usage type="mms"/>
+ <name>MTS MMS</name>
+ <username>mts</username>
+ <password>mts</password>
+ <mmsc>http://mmsc/</mmsc>
+ <mmsproxy>192.168.192.192:9201</mmsproxy>
+ </apn>
+ <apn value="mms.umc.ua">
+ <usage type="mms"/>
+ <name>UMC MMS GPRS</name>
+ <mmsc>http://mmsc:8002/</mmsc>
+ <mmsproxy>192.168.10.10:8080</mmsproxy>
+ </apn>
+ <apn value="sp.mts">
+ <usage type="mms"/>
+ <name>MTS MMS</name>
+ <mmsc>http://mmsc2.mts.net</mmsc>
+ <mmsproxy>209.4.229.90:9401</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://life.com.by/en/services/internet-105.html -->
+ <name>life:)</name>
+ <gsm>
+ <network-id mcc="257" mnc="03"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet.life.com.by">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Botswana -->
+<country code="bw">
+ <provider>
+ <name>Mascom Wireless</name>
+ <gsm>
+ <network-id mcc="652" mnc="01"/>
+ <apn value="internet.mascom">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>life:) MMS</name>
+ <mmsc>http://mms.life.com.ua/cmmsc/post</mmsc>
+ <mmsproxy>212.58.162.230:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Burundi -->
+<country code="bi">
+ <provider>
+ <name>Leo/UCom</name>
+ <gsm>
+ <network-id mcc="642" mnc="03"/>
+ <apn value="ucnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tempo/Africell</name>
+ <gsm>
+ <network-id mcc="642" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.mascom">
+ <usage type="mms"/>
+ <name>Mascom MMS</name>
+ <mmsc>http://192.168.33.50/mms</mmsc>
+ <mmsproxy>192.168.33.138:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Canada -->
+<country code="ca">
+ <provider>
+ <name>Fido</name>
+ <gsm>
+ <network-id mcc="302" mnc="370"/>
+ <apn value="internet.fido.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>fido</username>
+ <password>fido</password>
+ <dns>204.92.15.211</dns>
+ <dns>207.181.101.4</dns>
+ </apn>
+ <apn value="mms.fido.ca">
+ <usage type="mms"/>
+ <name>Fido MMS</name>
+ <mmsc>http://mms.fido.ca</mmsc>
+ <mmsproxy>mm1.fido.ca:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Rogers</name>
+ <gsm>
+ <network-id mcc="302" mnc="720"/>
+ <apn value="internet.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wapuser1</username>
+ <password>wap</password>
+ <dns>207.181.101.4</dns>
+ <dns>207.181.101.5</dns>
+ </apn>
+ <apn value="media.com">
+ <usage type="mms"/>
+ <name>Rogers Media</name>
+ <username>media</username>
+ <password>mda01</password>
+ <mmsc>http://mms.gprs.rogers.com</mmsc>
+ <mmsproxy>10.128.1.69:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bell Mobility</name>
+ <gsm>
+ <network-id mcc="302" mnc="610"/>
+ <network-id mcc="302" mnc="640"/>
+ <network-id mcc="302" mnc="651"/>
+ <network-id mcc="302" mnc="880"/>
+ <apn value="inet.bell.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="pda.bell.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Web</name>
+ </apn>
+ <apn value="pda2.bell.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Fast Web</name>
+ </apn>
+ <apn value="pda.bell.ca">
+ <usage type="mms"/>
+ <name>Bell MMS</name>
+ <mmsc>http://mms.bell.ca/mms/wapenc</mmsc>
+ <mmsproxy>web.wireless.bell.ca:80</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <sid value="16420"/>
+ <sid value="16440"/>
+ <sid value="16456"/>
+ <sid value="16410"/>
+ <sid value="16444"/>
+ <sid value="16390"/>
+ <sid value="16394"/>
+ <sid value="16402"/>
+ <sid value="16414"/>
+ <sid value="16416"/>
+ <sid value="16418"/>
+ <sid value="16462"/>
+ <sid value="16472"/>
+ <sid value="16408"/>
+ <sid value="16404"/>
+ <sid value="16430"/>
+ <sid value="16396"/>
+ <sid value="16426"/>
+ <sid value="16388"/>
+ <sid value="16390"/>
+ <sid value="16408"/>
+ <sid value="16414"/>
+ <sid value="16430"/>
+ <sid value="16460"/>
+ <sid value="16468"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Telus Mobility</name>
+ <gsm>
+ <network-id mcc="302" mnc="220"/>
+ <network-id mcc="302" mnc="860"/>
+ <network-id mcc="302" mnc="880"/>
+ <apn value="isp.telus.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="vpn.telus.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet (with VPN)</name>
+ </apn>
+ <apn value="bb.telus.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Blackberry</name>
+ </apn>
+ <apn value="sp.telus.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Web/Smartphone</name>
+ </apn>
+ <apn value="sp.telus.com">
+ <usage type="mms"/>
+ <name>TELUS MMS</name>
+ <mmsc>http://aliasredirect.net/proxy/mmsc</mmsc>
+ <mmsproxy>74.49.0.18:80</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <sid value="16422"/>
+ <sid value="17500"/>
+ <sid value="16438"/>
+ <sid value="16458"/>
+ <sid value="16436"/>
+ <sid value="16434"/>
+ <sid value="16384"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Virgin Mobile</name>
+ <cdma/>
+ </provider>
+ <provider>
+ <name>SaskTel</name>
+ <cdma>
+ <sid value="16410"/>
+ <sid value="16412"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Vidéotron</name>
+ <gsm>
+ <network-id mcc="302" mnc="500"/>
+ <network-id mcc="302" mnc="510"/>
+ <apn value="media.videotron">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telephony data</name>
+ </apn>
+ <apn value="ihvm.videotron">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>IHVM</name>
+ </apn>
+ <apn value="media.videotron">
+ <usage type="mms"/>
+ <name>Media</name>
+ <mmsc>http://media.videotron.com</mmsc>
+ <mmsproxy>10.208.89.17:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>WIND Mobile</name>
+ <gsm>
+ <network-id mcc="302" mnc="490"/>
+ <apn value="broadband.windmobile.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Laptop (data stick)</name>
+ </apn>
+ <apn value="internet.windmobile.ca">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile (add-on for phone)</name>
+ </apn>
+ <apn value="mnet.b-online.gr">
+ <usage type="mms"/>
+ <name>WIND MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://192.168.200.95/servlets/mms</mmsc>
+ <mmsproxy>192.168.200.11:9401</mmsproxy>
+ </apn>
+ <apn value="mms.windmobile.ca">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.windmobile.ca</mmsc>
+ <mmsproxy>74.115.197.70:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mobilicity</name>
+ <gsm>
+ <network-id mcc="302" mnc="320"/>
+ <apn value="wap.davewireless.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Web</name>
+ </apn>
+ <apn value="internet.davewireless.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ <apn value="mms.davewireless.com">
+ <usage type="mms"/>
+ <name>MoMMS</name>
+ <mmsc>http://mms.mobilicity.net</mmsc>
+ <mmsproxy>10.100.3.4:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Congo (Dem. Rep.) -->
+<country code="cd">
+ <provider>
+ <name>Vodacom</name>
+ <gsm>
+ <network-id mcc="630" mnc="01"/>
+ <apn value="vodanet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vodalive</username>
+ <dns>172.24.97.1</dns>
+ </apn>
+ <apn value="vodalive">
+ <usage type="mms"/>
+ <name>Vodalive</name>
+ <mmsc>http://172.24.97.1/mmsc</mmsc>
+ <mmsproxy>172.24.97.1:3128</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Congo (Rep.) -->
+<country code="cg">
+</country>
+
+<!-- Switzerland -->
+<country code="ch">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="228" mnc="03"/>
+ <balance-check>
+ <ussd>#121#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">#121*CODE#</ussd>
+ </balance-top-up>
+ <apn value="mobileoffice3g">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere - Standard</name>
+ <dns>213.55.128.1</dns>
+ <dns>213.55.128.2</dns>
+ </apn>
+ <apn value="click">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere - Prepaid</name>
+ <dns>213.55.128.1</dns>
+ <dns>213.55.128.2</dns>
+ </apn>
+ <apn value="intranetaccess">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere - Intranet Access</name>
+ </apn>
+ <apn value="internet">
+ <name>Internet Everywhere - Postpaid</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sunrise</name>
+ <gsm>
+ <network-id mcc="228" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ <dns>194.230.1.103</dns>
+ <dns>194.230.1.71</dns>
+ </apn>
+ <apn value="wap.sunrise.ch">
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="mms.sunrise.ch">
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ <apn value="mms.sunrise.ch">
+ <usage type="mms"/>
+ <name>Sunrise MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.sunrise.ch</mmsc>
+ <mmsproxy>212.35.34.75:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Swisscom</name>
+ <gsm>
+ <!-- username/password not included in Vodafone Broadband Connect version 10.1.0.23908 2010-06-07T17:47:01 -->
+ <!-- http://www.swisscom.ch/res/hilfe/mobile/einstellungen/index.htm -->
+ <network-id mcc="228" mnc="01"/>
+ <balance-check>
+ <ussd>*130#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="gprs.swisscom.ch">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Swisscom GPRS</name>
+ <dns>138.188.101.189</dns>
+ <dns>138.188.101.186</dns>
+ </apn>
+ <apn value="corporate.swisscom.ch">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Swisscom CAA</name>
+ <username>testprofil</username>
+ <password>temporary</password>
+ </apn>
+ <apn value="event.swisscom.ch">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Swisscom MMS</name>
+ </apn>
+ <apn value="event.swisscom.ch">
+ <usage type="mms"/>
+ <name>Swisscom MMS</name>
+ <mmsc>http://mms.natel.ch:8079</mmsc>
+ <mmsproxy>192.168.210.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>M-Budget</name>
+ <gsm>
+ <network-id mcc="228" mnc="01"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <apn value="gprs.swisscom.ch">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Migros Data</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Cote d'Ivoire -->
+<country code="ci">
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="612" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>172.16.100.5</dns>
+ </apn>
+ <apn value="fast-mms">
+ <usage type="mms"/>
+ <name>MTN MMS</name>
+ <username>mms</username>
+ <mmsc>http://192.168.97.1/mmsc</mmsc>
+ <mmsproxy>192.168.97.1:3130</mmsproxy>
+ </apn>
+ <apn value="myMTN">
+ <usage type="mms"/>
+ <name>MTN-MMS</name>
+ <username>mtnmms</username>
+ <password>mtnmms</password>
+ <mmsc>http://mms.mtn.co.za/mms/wapenc</mmsc>
+ <mmsproxy>196.11.240.241:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Chile -->
+<country code="cl">
+ <provider>
+ <name>Claro Chile</name>
+ <gsm>
+ <network-id mcc="730" mnc="03"/>
+ <apn value="bam.clarochile.cl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>clarochile</username>
+ <password>clarochile</password>
+ </apn>
+ <apn value="bap.clarochile.cl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepago</name>
+ <username>clarochile</username>
+ <password>clarochile</password>
+ </apn>
+ <apn value="wap.clarochile.cl">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>clarochile</username>
+ <password>clarochile</password>
+ </apn>
+ <apn value="mms.clarochile.cl">
+ <usage type="mms"/>
+ <name>MMS CLARO</name>
+ <username>clarochile</username>
+ <password>clarochile</password>
+ <mmsc>http://mms.clarochile.cl</mmsc>
+ <mmsproxy>172.23.200.200:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Entel PCS</name>
+ <gsm>
+ <network-id mcc="730" mnc="01"/>
+ <apn value="imovil.entelpcs.cl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract / Prepaid / WebSession</name>
+ <username>entelpcs</username>
+ <password>entelpcs</password>
+ </apn>
+ <apn value="bam.entelpcs.cl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WAP</name>
+ <username>entelpcs</username>
+ <password>entelpcs</password>
+ </apn>
+ <apn value="mms.entelpcs.cl">
+ <usage type="mms"/>
+ <name>MMS Entel PCS</name>
+ <username>entelmms</username>
+ <password>entelpcs</password>
+ <mmsc>http://mmsc.entelpcs.cl</mmsc>
+ <mmsproxy>10.99.0.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="730" mnc="10"/>
+ <apn value="web.tmovil.cl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web</name>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="wap.tmovil.cl">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="dst.mms">
+ <usage type="mms"/>
+ <name>DSTMMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.dst.com.bn/mmsc</mmsc>
+ <mmsproxy>10.100.6.101:3130</mmsproxy>
+ </apn>
+ <apn value="dst.mms">
+ <usage type="mms"/>
+ <name>DSTMMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.dst.com.bn/mmsc</mmsc>
+ <mmsproxy>10.100.6.101:3130</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Cameroon -->
+<country code="cm">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="624" mnc="02"/>
+ <apn value="orangecmgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="624" mnc="01"/>
+ <apn value="INTERNET">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>guest</username>
+ <password>guest</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- China -->
+<country code="cn">
+ <provider>
+ <name>China Mobile</name>
+ <gsm>
+ <network-id mcc="460" mnc="00"/>
+ <network-id mcc="460" mnc="02"/>
+ <apn value="cmwap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>guest</username>
+ <password>guest</password>
+ </apn>
+ <apn value="cmnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>guest</username>
+ <password>guest</password>
+ <dns>211.136.20.203</dns>
+ </apn>
+ <apn value="cmwap">
+ <usage type="mms"/>
+ <name>移动彩信</name>
+ <mmsc>http://mmsc.monternet.com</mmsc>
+ <mmsproxy>10.0.0.172:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>China Unicom</name>
+ <gsm>
+ <network-id mcc="460" mnc="01"/>
+ <apn value="3gnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>uninet</username>
+ </apn>
+ <apn value="3gwap">
+ <usage type="mms"/>
+ <name>è”通彩信</name>
+ <mmsc>http://mmsc.myuni.com.cn</mmsc>
+ <mmsproxy>10.0.0.172:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>China Telecom</name>
+ <cdma>
+ <username>ctnet@mycdma.cn</username>
+ <password>vnet.mobi</password>
+ <sid value="11296"/>
+ <sid value="11298"/>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Costa Rica -->
+<country code="cr">
+ <provider>
+ <name>IceCelular</name>
+ <gsm>
+ <network-id mcc="712" mnc="01"/>
+ <network-id mcc="712" mnc="02"/>
+ <apn value="icecelular">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>guest</username>
+ <password>guest</password>
+ <dns>208.133.206.44</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Kolbi</name>
+ <gsm>
+ <network-id mcc="712" mnc="03"/>
+ <voicemail>190</voicemail>
+ <balance-check>
+ <sms text="">1150</sms>
+ </balance-check>
+ <apn value="kolbi3g">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Kolbi 3g</name>
+ </apn>
+ <apn value="mms.ideasclaro">
+ <usage type="mms"/>
+ <name>MMS CLARO CR</name>
+ <mmsc>http://mms.ideasclaro.com:8002</mmsc>
+ <mmsproxy>216.230.133.66:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Colombia -->
+<country code="co">
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="732" mnc="101"/>
+ <apn value="internet.comcel.com.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>COMCELWEB</username>
+ <password>COMCELWEB</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>eTb</name>
+ <gsm>
+ <apn value="moviletb.net.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>etb</username>
+ <password>etb</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="732" mnc="102"/>
+ <network-id mcc="732" mnc="123"/>
+ <apn value="internet.movistar.com.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="732" mnc="103"/>
+ <network-id mcc="732" mnc="111"/>
+ <apn value="web.colombiamovil.com.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.sentelgsm.com">
+ <usage type="mms"/>
+ <name>Tigo MMS</name>
+ <username>tigo</username>
+ <password>tigo</password>
+ <mmsc>http://mms.tigo.sn</mmsc>
+ <mmsproxy>172.16.16.16:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Uff</name>
+ <gsm>
+ <apn value="web.uffmovil.com.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on Tigo's network -->
+ <name>UNE</name>
+ <gsm>
+ <network-id mcc="732" mnc="103"/>
+ <network-id mcc="732" mnc="111"/>
+ <apn value="www.une.net.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>une</username>
+ <password>une</password>
+ </apn>
+ <apn value="une4glte.net.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>LTE (4G)</name>
+ </apn>
+ <apn value="mms.colombiamovil.com.co">
+ <usage type="mms"/>
+ <name>TIGO multimedia</name>
+ <username>mms-cm1900</username>
+ <password>mms-cm1900</password>
+ <mmsc>http://mms.ola.com.co</mmsc>
+ <mmsproxy>190.102.206.48:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on Telefonica's network -->
+ <name>Virgin Mobile</name>
+ <gsm>
+ <network-id mcc="732" mnc="123"/>
+ <apn value="web.vmc.net.co">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.movistar.com.co">
+ <usage type="mms"/>
+ <name>movistar MMS</name>
+ <username>movistar</username>
+ <password>movistar</password>
+ <mmsc>http://mms.movistar.com.co</mmsc>
+ <mmsproxy>192.168.222.7:9001</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Cyprus -->
+<country code="cy">
+ <provider>
+ <name>Cytamobile-Vodafone</name>
+ <gsm>
+ <network-id mcc="280" mnc="01"/>
+ <msisdn-query>
+ <ussd>*#109#</ussd>
+ </msisdn-query>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ </apn>
+ <apn value="pp.internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ </apn>
+ <apn value="cytamobile">
+ <usage type="mms"/>
+ <name>CytaMMS</name>
+ <mmsc>http://mmsc.cyta.com.cy</mmsc>
+ <mmsproxy>212.31.96.161:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="280" mnc="10"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Czech Republic -->
+<country code="cz">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="230" mnc="03"/>
+ <balance-check>
+ <ussd>*22#</ussd>
+ </balance-check>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>217.77.161.130</dns>
+ <dns>217.77.161.131</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>O2</name>
+ <gsm>
+ <network-id mcc="230" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>160.218.10.200</dns>
+ <dns>160.218.43.200</dns>
+ </apn>
+ <apn value="internet.open">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>160.218.10.200</dns>
+ <dns>160.218.43.200</dns>
+ </apn>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>02 MMS</name>
+ <mmsc>http://mms.o2active.cz:8002</mmsc>
+ <mmsproxy>160.218.160.218:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="230" mnc="01"/>
+ <apn value="internet.t-mobile.cz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>62.141.0.1</dns>
+ <dns>213.162.65.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Germany -->
+<country code="de">
+ <provider>
+ <name>AldiTalk/MedionMobile</name>
+ <gsm>
+ <network-id mcc="262" mnc="03"/>
+ <network-id mcc="262" mnc="05"/>
+ <network-id mcc="262" mnc="77"/>
+ <voicemail>9911</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*104*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Volume rate/30 Day Flatrate</name>
+ <username>eplus</username>
+ <password>gprs</password>
+ <dns>212.23.97.2</dns>
+ <dns>212.23.97.3</dns>
+ </apn>
+ <apn value="tagesflat.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>24 Hour Flatrate</name>
+ <name xml:lang="de">Tages-Flatrate</name>
+ <username>eplus</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="mms.eplus.de">
+ <usage type="mms"/>
+ <name>E-plus MMS</name>
+ <username>mms</username>
+ <password>eplus</password>
+ <mmsc>http://mms/eplus/</mmsc>
+ <mmsproxy>212.23.97.153:5080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>blau.de</name>
+ <gsm>
+ <network-id mcc="262" mnc="03"/>
+ <network-id mcc="262" mnc="05"/>
+ <network-id mcc="262" mnc="77"/>
+
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*104*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>blau</username>
+ <password>blau</password>
+ </apn>
+ <apn value="tagesflat.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>24 Hour Flatrate</name>
+ <name xml:lang="de">Tages-Flatrate</name>
+ <username>blau</username>
+ <password>blau</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bild Mobil</name>
+ <gsm>
+ <!-- http://www.bildmobil.de/info_handyeinstellungen.html -->
+ <network-id mcc="262" mnc="02"/>
+ <apn value="access.vodafone.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>BILD Mobilportal</name>
+ </apn>
+ <apn value="web.vodafone.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <dns>139.7.30.125</dns>
+ <dns>139.7.30.126</dns>
+ </apn>
+ <!-- http://www.prepaid-wiki.de/index.php5/BILDmobil_Daten-SIM -->
+ <apn value="event.vodafone.de">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>BILDmobil Speedstick (Surfpakete)</name>
+ </apn>
+ <apn value="event.vodafone.de">
+ <usage type="mms"/>
+ <name>VF DE MMS</name>
+ <mmsc>http://139.7.24.1/servlets/mms</mmsc>
+ <mmsproxy>139.7.29.17:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>E-Plus</name>
+ <gsm>
+ <network-id mcc="262" mnc="03"/>
+ <network-id mcc="262" mnc="05"/>
+ <network-id mcc="262" mnc="77"/>
+
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*104*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>eplus</username>
+ <password>gprs</password>
+ <dns>212.23.97.2</dns>
+ <dns>212.23.97.3</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>O2</name>
+ <gsm>
+ <network-id mcc="262" mnc="07"/>
+ <network-id mcc="262" mnc="08"/>
+ <network-id mcc="262" mnc="11"/>
+
+ <voicemail>333</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*103*CODE#</ussd>
+ </balance-top-up>
+
+ <apn value="pinternet.interkom.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>LOOP</name>
+ <dns>193.189.244.225</dns>
+ <dns>193.189.244.206</dns>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pay-by-MB</name>
+ <dns>195.182.110.132</dns>
+ <dns>62.134.11.4</dns>
+ </apn>
+ <apn value="surfo2">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pay-by-time</name>
+ <dns>195.182.110.132</dns>
+ <dns>62.134.11.4</dns>
+ </apn>
+ <apn value="internet">
+ <usage type="mms"/>
+ <name>o2 MMS</name>
+ <mmsc>http://10.81.0.7:8002</mmsc>
+ <mmsproxy>195.182.114.52:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tchibo-Mobil</name>
+ <gsm>
+ <network-id mcc="262" mnc="07"/>
+ <network-id mcc="262" mnc="08"/>
+ <network-id mcc="262" mnc="11"/>
+
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*103*CODE#</ussd>
+ </balance-top-up>
+ <apn value="webmobil1">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Tagesflat / Monats-Flatrate L / Monats-Flatrate XL</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile(Telekom)</name>
+ <gsm>
+ <network-id mcc="262" mnc="01"/>
+ <network-id mcc="262" mnc="06"/>
+
+ <voicemail>3311</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*101*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.t-d1.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <password>t-d1</password>
+ <dns>193.254.160.1</dns>
+ <dns>193.254.160.130</dns>
+ </apn>
+ <apn value="internet.t-mobile">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>t-mobile</username>
+ <password>tm</password>
+ <dns>10.74.83.22</dns>
+ <dns>193.254.160.1</dns>
+ </apn>
+ <apn value="internet.t-mobile">
+ <usage type="mms"/>
+ <name>T-Mobile MMS</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ <mmsc>http://mms.t-mobile.de/servlets/mms</mmsc>
+ <mmsproxy>172.28.23.131:8008</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Congstar</name>
+ <gsm>
+ <network-id mcc="262" mnc="01"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*101*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.t-mobile">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid Contracts</name>
+ <username>t-mobile</username>
+ <password>tm</password>
+ <dns>193.254.160.1</dns>
+ <dns>10.74.83.22</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="262" mnc="02"/>
+ <network-id mcc="262" mnc="04"/>
+ <network-id mcc="262" mnc="09"/>
+
+ <voicemail>5500</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*100*CODE#</ussd>
+ </balance-top-up>
+
+ <apn value="web.vodafone.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>139.7.30.125</dns>
+ <dns>139.7.30.126</dns>
+ </apn>
+ <apn value="event.vodafone.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WebSessions</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>139.7.30.125</dns>
+ <dns>139.7.30.126</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>FONIC</name>
+ <gsm>
+ <network-id mcc="262" mnc="07"/>
+ <network-id mcc="262" mnc="08"/>
+ <network-id mcc="262" mnc="11"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*103*CODE#</ussd>
+ </balance-top-up>
+ <apn value="pinternet.interkom.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>fonic</username>
+ <password>fonic</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>simyo Internet</name>
+ <gsm>
+ <network-id mcc="262" mnc="03"/>
+ <network-id mcc="262" mnc="05"/>
+ <network-id mcc="262" mnc="77"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*104*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.eplus.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>simyo</username>
+ <password>simyo</password>
+ <dns>212.23.97.2</dns>
+ <dns>212.23.97.3</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Alice</name>
+ <gsm>
+ <network-id mcc="262" mnc="07"/>
+ <apn value="internet.partner1">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Option Mobile</name>
+ <dns>193.189.244.225</dns>
+ <dns>193.189.244.206</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>1&amp;1</name>
+ <gsm>
+ <!-- Vodafone (D2) network -->
+ <network-id mcc="262" mnc="02"/>
+ <network-id mcc="262" mnc="04"/>
+ <network-id mcc="262" mnc="09"/>
+
+ <voicemail>5500</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+
+ <apn value="web.vodafone.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ <apn value="mail.partner.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Web</name>
+ <username>D2</username>
+ <password>Web</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Netzclub</name>
+ <gsm>
+ <!-- O2 network -->
+ <network-id mcc="262" mnc="07"/>
+ <network-id mcc="262" mnc="08"/>
+ <network-id mcc="262" mnc="11"/>
+ <apn value="pinternet.interkom.de">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <!-- Information taken from https://www.netzclub.net/downloads/default/Manuelle_Handyeinstellungen.pdf -->
+ <name>Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Denmark -->
+<country code="dk">
+ <provider primary="true">
+ <name>3</name>
+ <gsm>
+ <network-id mcc="238" mnc="06"/>
+ <apn value="bredband.tre.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Bredbånd (standard)</name>
+ </apn>
+ <apn value="net.tre.dk">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Bredbånd Premium Kontant</name>
+ </apn>
+ <apn value="data.tre.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3 (standard for mobilkunder; spærret for indgående trafik)</name>
+ </apn>
+ <apn value="static.tre.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3 (statisk IP)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <!-- http://oister.dk - Same network as 3.dk -->
+ <provider>
+ <name>OiSTER</name>
+ <gsm>
+ <network-id mcc="238" mnc="06"/>
+ <!-- http://www.oister.dk/kundeservice/mobilt-bredband/opsatning/andre-opsatninger/ -->
+ <apn value="bredband.oister.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ <apn value="data.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ </apn>
+ <apn value="data.tre.dk">
+ <usage type="mms"/>
+ <name>3mms</name>
+ <mmsc>http://mms.3.dk</mmsc>
+ <mmsproxy>mmsproxy.3.dk:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+
+ <!-- http://www.ice-net.dk/mobiltbredbaand.php -->
+ <provider>
+ <name>ice.net (Nordisk Mobiltelefon)</name>
+ <cdma>
+ <username>cdma</username>
+ <password>cdma</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="238" mnc="02"/>
+ <network-id mcc="238" mnc="77"/>
+
+ <voicemail>20171717</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ <dtmf>40454545</dtmf>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.88.64.199</dns>
+ <dns>212.88.64.14</dns>
+ </apn>
+ <apn value="telenor">
+ <usage type="mms"/>
+ <name>Telenor MMS</name>
+ <mmsc>http://mms.telenor.dk</mmsc>
+ <mmsproxy>212.88.64.8:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+
+ <!-- http://www.cbb.dk/mobil/hjaelp/manuel-opsaetning-af-mms-og-gprs/ -->
+ <provider>
+ <name>CBB Mobil</name>
+ <gsm>
+ <network-id mcc="238" mnc="02"/>
+ <network-id mcc="238" mnc="77"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TDC</name>
+ <gsm>
+ <network-id mcc="238" mnc="01"/>
+
+ <voicemail>20171717</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ <dtmf>40454545</dtmf>
+ </balance-check>
+
+ <!-- http://kundeservice.tdc.dk/privat/faq.php?id=20063 -->
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>194.239.134.83</dns>
+ <dns>193.162.153.164</dns>
+ </apn>
+ <!-- mnc="0171" in Vodafone XML -->
+ <apn value="internet.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <!-- mnc="0172" in Vodafone XML -->
+ <apn value="internet.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.tdc.fi">
+ <usage type="mms"/>
+ <name>TDC MMS</name>
+ <mmsc>http://mmsc.tdc.fi</mmsc>
+ <mmsproxy>10.1.12.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Fullrate</name>
+ <gsm>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>Fullrate</username>
+ <password>Fullrate</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telia</name>
+ <gsm>
+ <network-id mcc="238" mnc="30"/>
+
+ <voicemail>28184000</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+
+ <apn value="www.internet.mtelia.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="www.mms.mtelia.dk">
+ <usage type="mms"/>
+ <name>Telia MMS</name>
+ <mmsc>http://mms.telia.dk</mmsc>
+ <mmsproxy>193.209.134.131:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>BiBoB</name>
+ <gsm>
+ <network-id mcc="238" mnc="02"/>
+ <apn value="internet.bibob.dk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <!-- Telmore - Same network as TDC -->
+ <provider>
+ <name>Telmore</name>
+ <gsm>
+ <network-id mcc="238" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>194.239.134.83</dns>
+ <dns>193.162.153.164</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Telmore MMS</name>
+ <mmsc>http://192.168.241.114:8002</mmsc>
+ <mmsproxy>194.182.251.15:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Unotel</name>
+ <gsm>
+ <network-id mcc="238" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>happiimobil</name>
+ <gsm>
+ <network-id mcc="238" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <!-- Onfone: https://www.onfone.dk/Kundeservice/mobil/saet_din_mobil_op/internet-gprs-3g/ -->
+ <provider>
+ <name>Onfone Internet DK</name>
+ <gsm>
+ <network-id mcc="238" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Dominican Republic -->
+<country code="do">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="370" mnc="01"/>
+ <voicemail>*777</voicemail>
+ <balance-check>
+ <ussd>#131#</ussd>
+ </balance-check>
+ <apn value="orangenet.com.do">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="370" mnc="02"/>
+ <voicemail>*99</voicemail>
+ <balance-check>
+ <ussd>*122#</ussd>
+ <dtmf>*22</dtmf>
+ </balance-check>
+ <apn value="internet.ideasclaro.com.do">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.3.81.5</dns>
+ <dns>196.3.81.132</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Viva</name>
+ <gsm>
+ <network-id mcc="370" mnc="04"/>
+ <balance-check>
+ <ussd>#111#</ussd>
+ <dtmf>*74</dtmf>
+ </balance-check>
+ <apn value="edge.viva.net.do">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>viva</username>
+ <password>viva</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Algeria -->
+<country code="dz">
+ <provider>
+ <name>Djezzy</name>
+ <gsm>
+ <network-id mcc="603" mnc="02"/>
+ <apn value="djezzy.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="djezzy.mms">
+ <usage type="mms"/>
+ <name>MMS djezzy</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsproxy>172.24.97.158:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mobilis</name>
+ <gsm>
+ <network-id mcc="603" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Mobilis MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://172.25.49.9/servlets/mms</mmsc>
+ <mmsproxy>172.25.49.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Nedjma</name>
+ <gsm>
+ <network-id mcc="603" mnc="03"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB</name>
+ <username>nedjma</username>
+ <password>nedjma</password>
+ </apn>
+ <apn value="nedjmaMMS">
+ <usage type="mms"/>
+ <name>Nedjma MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://10.10.111.1</mmsc>
+ <mmsproxy>192.168.52.3:3128</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Ecuador -->
+<country code="ec">
+ <provider>
+ <name>Movistar UMTS</name>
+ <gsm>
+ <network-id mcc="740" mnc="00"/>
+ <apn value="navega.movistar.ec">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ <apn value="mms.movistar.com.ec">
+ <usage type="mms"/>
+ <name>movistar MMS</name>
+ <username>movistar</username>
+ <password>movistar</password>
+ <mmsc>http://mms.movistar.com.ec:8088/mms/</mmsc>
+ <mmsproxy>10.3.5.50:9001</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Porta 3G</name>
+ <gsm>
+ <network-id mcc="740" mnc="01"/>
+ <apn value="internet.porta.com.ec">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.porta.com.ec">
+ <usage type="mms"/>
+ <name>MMS Porta</name>
+ <username>portamms</username>
+ <password>portamms2003</password>
+ <mmsc>http://iesmms.porta.com.ec</mmsc>
+ <mmsproxy>216.250.208.94:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Estonia -->
+<country code="ee">
+ <provider>
+ <name>EMT</name>
+ <gsm>
+ <network-id mcc="248" mnc="01"/>
+ <apn value="internet.emt.ee">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>217.71.32.116</dns>
+ <dns>217.71.32.115</dns>
+ </apn>
+ <apn value="mms.emt.ee">
+ <usage type="mms"/>
+ <name>EMT MMS</name>
+ <mmsc>http://mms.emt.ee/servlets/mms</mmsc>
+ <mmsproxy>217.71.32.82:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Nordea</name>
+ <gsm>
+ <network-id mcc="248" mnc="01"/>
+ <apn value="internet.emt.ee">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Elisa</name>
+ <gsm>
+ <network-id mcc="248" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>194.204.0.1</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Elisa MMS</name>
+ <mmsc>http://mms.elisa.fi</mmsc>
+ <mmsproxy>213.161.41.57:80</mmsproxy>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Elisa MMS</name>
+ <mmsc>http://194.204.2.10</mmsc>
+ <mmsproxy>194.204.2.6:8000</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="248" mnc="03"/>
+ <apn value="internet.tele2.ee">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="internet.tele2.fi">
+ <usage type="mms"/>
+ <name>Tele2 MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mmsc.tele2.fi</mmsc>
+ <mmsproxy>193.12.40.19:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Egypt -->
+<country code="eg">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="602" mnc="02"/>
+ <msisdn-query>
+ <ussd>*878#</ussd>
+ </msisdn-query>
+ <apn value="internet.vodafone.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ <dns>163.121.128.134</dns>
+ <dns>212.103.160.18</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Etisalat</name>
+ <gsm>
+ <network-id mcc="602" mnc="03"/>
+ <apn value="etisalat">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="Etisalat">
+ <usage type="mms"/>
+ <name>Etisalat MMS</name>
+ <mmsc>http://10.71.131.7:38090/</mmsc>
+ <mmsproxy>10.71.130.29:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MobiNil</name>
+ <gsm>
+ <network-id mcc="602" mnc="01"/>
+ <apn value="mobinilweb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>80.75.166.250</dns>
+ <dns>163.121.163.201</dns>
+ </apn>
+ <apn value="mobinilmms">
+ <usage type="mms"/>
+ <name>MobiNil MMS</name>
+ <mmsc>http://10.7.13.24:8002/</mmsc>
+ <mmsproxy>62.241.155.45:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Spain -->
+<country code="es">
+ <provider>
+ <name>Euskaltel</name>
+ <gsm>
+ <network-id mcc="214" mnc="08"/>
+ <apn value="internet.euskaltel.mobi">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>CLIENTE</username>
+ <password>EUSKALTEL</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Lebara</name>
+ <gsm>
+ <apn value="gprsmov.lebaramobile.es">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Másmovil</name>
+ <gsm>
+ <network-id mcc="214" mnc="03"/>
+ <apn value="internetmas">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>móbil R (Mundo-R)</name>
+ <gsm>
+ <network-id mcc="214" mnc="17"/>
+ <apn value="internet.mundo-r.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://www.happymovil.es/es/prepago/internet-movil -->
+ <name>Happy Móvil/moviData</name>
+ <gsm>
+ <network-id mcc="214" mnc="03"/>
+ <apn value="INTERNETTPH">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.143.33.8</dns>
+ <dns>62.36.225.150</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ONO</name>
+ <gsm>
+ <network-id mcc="214" mnc="18"/>
+ <apn value="internet.ono.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>62.42.230.24</dns>
+ <dns>62.42.63.52</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Pepephone</name>
+ <gsm>
+ <network-id mcc="214" mnc="06"/>
+ <apn value="gprs.pepephone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pepephone</name>
+ </apn>
+ <apn value="gprsmov.pepephone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pepephone (Mobile)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="214" mnc="03"/>
+ <network-id mcc="214" mnc="09"/>
+
+ <voicemail>242</voicemail>
+ <balance-check>
+ <ussd>*111#</ussd>
+ <ussd>*113#</ussd>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Orange</name>
+ <username>ORANGE</username>
+ <password>ORANGE</password>
+ <dns>85.62.229.133</dns>
+ <dns>85.62.229.134</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Simyo</name>
+ <gsm>
+ <network-id mcc="214" mnc="19"/>
+ <apn value="gprs-service.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>195.230.105.134</dns>
+ <dns>195.230.105.135</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telecable</name>
+ <gsm>
+ <network-id mcc="214" mnc="16"/>
+ <apn value="internet.telecable.es">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>telecable</username>
+ <password>telecable</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar (Telefónica)</name>
+ <gsm>
+ <network-id mcc="214" mnc="05"/>
+ <network-id mcc="214" mnc="07"/>
+
+ <voicemail>123</voicemail>
+ <balance-check>
+ <dtmf>2266</dtmf>
+ </balance-check>
+
+ <!-- http://comunidad.movistar.es/t5/Asistencia-T%C3%A9cnica-Terminales-y/es-posible-capar-el-3g-desde-movistar/m-p/752106#M30907 -->
+ <apn value="telefonica.es">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telefónica</name>
+ <username>telefonica</username>
+ <password>telefonica</password>
+ <dns>194.179.1.100</dns>
+ <dns>194.179.1.101</dns>
+ </apn>
+ <apn value="movistar.es">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Movistar (USB modems)</name>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone (Airtel)</name>
+ <gsm>
+ <network-id mcc="214" mnc="01"/>
+ <network-id mcc="214" mnc="06"/>
+ <msisdn-query>
+ <ussd>*138#</ussd>
+ </msisdn-query>
+ <apn value="ac.vodafone.es">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>212.73.32.96</dns>
+ <dns>212.73.32.67</dns>
+ </apn>
+ <apn value="airtelnet.es">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Airtel (old)</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>212.73.32.3</dns>
+ <dns>212.73.32.67</dns>
+ </apn>
+ <apn value="mms.vodafone.net">
+ <usage type="mms"/>
+ <name>MMS VODAFONE</name>
+ <username>wap@wap</username>
+ <password>wap125</password>
+ <mmsc>http://mmsc.vodafone.es/servlets/mms</mmsc>
+ <mmsproxy>212.73.32.10:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Yoigo</name>
+ <gsm>
+ <network-id mcc="214" mnc="04"/>
+
+ <voicemail>633</voicemail>
+ <balance-check>
+ <ussd>*111#</ussd>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.248.76.210</dns>
+ <dns>213.248.100.54</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Yoigo MMS</name>
+ <mmsc>http://mmss/</mmsc>
+ <mmsproxy>193.209.134.141:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Jazztel</name>
+ <gsm>
+ <network-id mcc="214" mnc="21"/>
+ <apn value="jazzinternet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <dns>87.216.1.65</dns>
+ <dns>87.216.1.66</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Carrefour Móvil</name>
+ <gsm>
+ <apn value="CARREFOURINTERNET">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- from http://www.tuenti.com/movil/apn-tuenti-movil-android -->
+ <name>Tuenti Móvil</name>
+ <gsm>
+ <network-id mcc="214" mnc="05"/>
+ <apn value="tuenti.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>tuenti</username>
+ <password>tuenti</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- from http://www.eroskimovil.es/geomv/c/pub/en/servicios/datos -->
+ <name>Eroski Móvil</name>
+ <gsm>
+ <network-id mcc="214" mnc="24"/>
+ <apn value="gprs.eroskimovil.es">
+ <name>Eroski Móvil GPRS</name>
+ <username>wap@wap</username>
+ <password>wap125</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- from http://www.llamayamovil.com/internet -->
+ <name>LlamaYa móvil</name>
+ <gsm>
+ <network-id mcc="214" mnc="03"/>
+ <apn value="moreinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on Orange's network -->
+ <!-- www.amena.com -->
+ <name>Amena</name>
+ <gsm>
+ <network-id mcc="214" mnc="03"/>
+ <apn value="orangeworld">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Ethiopia -->
+<country code="et">
+ <provider>
+ <name>Ethio Telecom</name>
+ <gsm>
+ <network-id mcc="636" mnc="01"/>
+ <balance-check>
+ <ussd>*804#</ussd>
+ </balance-check>
+
+ <apn value="etc.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.55.96.148</dns>
+ <dns>213.55.96.166</dns>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>etc</username>
+ <password>etc</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Faroe Islands -->
+<country code="fo">
+ <provider>
+ <name>Vodafone FO</name>
+ <gsm>
+ <network-id mcc="288" mnc="02"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <apn value="vmc.vodafone.fo">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Finland -->
+<country code="fi">
+ <provider>
+ <name>Kuiri</name>
+ <gsm>
+ <network-id mcc="244" mnc="31"/>
+ <apn value="kuirinet">
+ <usage type="internet"/>
+ <name>Kuiri Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dna</name>
+ <gsm>
+ <network-id mcc="244" mnc="03"/>
+ <!-- Phone number dependent:
+ - Numbers beginning with 044 XXXXXXX turn in to 044 6 XXXXXXX
+ - Numbers beginning with 041 XXXXXXX turn in to 041 6 XXXXXXX
+ - Others case by case
+ http://www.dna.fi/Yrityksille/Matkaviestinpalvelut/LiittymienLisapalvelut/dnafaksivastaaja/Documents/dna_vastaaja_kayttohje_120310.pdf
+ <voicemail/> -->
+ <balance-check>
+ <ussd>*100#</ussd>
+ <dtmf>0800412582</dtmf>
+ <sms text="SALDO">14000</sms>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>dna internet</name>
+ <dns>217.78.192.22</dns>
+ <dns>217.78.192.78</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>dna MMS</name>
+ <username>dna</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.dnafinland.fi</mmsc>
+ <mmsproxy>10.1.1.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dna</name>
+ <gsm>
+ <network-id mcc="244" mnc="04"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ <name>dna internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dna</name>
+ <gsm>
+ <network-id mcc="244" mnc="12"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ <name>dna internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dna</name>
+ <gsm>
+ <network-id mcc="244" mnc="13"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ <name>dna internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Elisa</name>
+ <gsm>
+ <network-id mcc="244" mnc="05"/>
+ <voicemail>777</voicemail>
+ <balance-check>
+ <dtmf>080090598</dtmf>
+ <sms text="SALDO">18258</sms>
+ <sms text="PAKETTI">18258</sms>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Saunalahti</name>
+ <gsm>
+ <network-id mcc="244" mnc="21"/>
+
+ <!-- Phone number dependent:
+ - Numbers beginning with 045 67 XXXXX turn in to 045 66 XXXXX
+ - Numbers beginning with 045 63 XXXXX turn in to 045 62 XXXXX
+ - Others case by case
+ http://saunalahti.fi/tuki/gsm/vo/ohjevastaaja.php
+ <voicemail/> -->
+ <balance-check>
+ <sms text="SALDO">16304</sms>
+ <sms text="SALDO">15045</sms>
+ <sms text="KOKOSALDO">16304</sms>
+ <sms text="GSALDO">16304</sms>
+ <sms text="PAKETTI">16304</sms>
+ </balance-check>
+
+ <apn value="internet.saunalahti">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid (contract) NAT (available for all subscribers)</name>
+ <dns>195.74.0.47</dns>
+ <dns>195.197.54.100</dns>
+ </apn>
+ <apn value="internet4">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid (contract) public IP address (needs to be ordered)</name>
+ <dns>195.74.0.47</dns>
+ <dns>195.197.54.100</dns>
+ </apn>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid (no contract)</name>
+ <dns>195.74.0.47</dns>
+ <dns>195.197.54.100</dns>
+ </apn>
+ <apn value="mms.saunalahti.fi">
+ <usage type="mms"/>
+ <name>Saunalahti MMS</name>
+ <mmsc>http://mms.saunalahti.fi:8002/</mmsc>
+ <mmsproxy>62.142.4.197:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sonera</name>
+ <gsm>
+ <network-id mcc="244" mnc="91"/>
+
+ <!-- Phone number dependent:
+ - Numbers beginning with 040 XXXXXXX turns in to 042 XXXXXXX
+ - Others case by case
+ <voicemail/> -->
+ <balance-check>
+ <sms text="EASY SALDO">15400</sms>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>192.89.123.230</dns>
+ <dns>192.89.123.231</dns>
+ </apn>
+ <apn value="prointernet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Prointernet (public IP)</name>
+ <dns>192.89.123.230</dns>
+ <dns>192.89.123.231</dns>
+ </apn>
+ <apn value="telefinland">
+ <usage type="mms"/>
+ <name>TeleFinland MMS</name>
+ <mmsc>http://mms.sonera.net:8002</mmsc>
+ <mmsproxy>195.156.25.33:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Welho</name>
+ <gsm>
+ <apn value="internet.welho.fi">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Wekkula</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Fiji -->
+<country code="fj">
+ <provider>
+ <name>Vodafone / Kidanet</name>
+ <gsm>
+ <network-id mcc="542" mnc="01"/>
+ <msisdn-query>
+ <ussd>*999#</ussd>
+ </msisdn-query>
+ <apn value="vfinternet.fj">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="kidanet.fj">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <!-- http://www.vodafone.com.fj/pages.cfm/personal/services/prepay-flashnet/installation-guide.html -->
+ <apn value="prepay.vfinternet.fj">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- France -->
+<country code="fr">
+ <provider>
+ <name>A Mobile (Auchan Telecom)</name>
+ <gsm>
+ <apn value="wap65">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bouygues Telecom</name>
+ <gsm>
+ <network-id mcc="208" mnc="20"/>
+ <network-id mcc="208" mnc="21"/>
+
+ <voicemail>660</voicemail>
+ <balance-check>
+ <dtmf>630</dtmf>
+ </balance-check>
+
+ <apn value="a2bouygtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contrat Pro Data Illimité</name>
+ <dns>62.201.129.99</dns>
+ </apn>
+ <apn value="b2bouygtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>B2Bouygtel</name>
+ <dns>62.201.129.99</dns>
+ </apn>
+ <apn value="ebouygtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Forfait Data</name>
+ <dns>62.201.129.99</dns>
+ </apn>
+ <apn value="mmsbouygtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Forfait Data</name>
+ <dns>62.201.129.99</dns>
+ </apn>
+ <apn value="pcebouygtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contrat Pro Data</name>
+ <dns>62.201.129.99</dns>
+ </apn>
+ <apn value="mmsbouygtel.com">
+ <usage type="mms"/>
+ <name>Bouygues MMS</name>
+ <mmsc>http://mms.bouyguestelecom.fr/mms/wapenc</mmsc>
+ <mmsproxy>62.201.129.226:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Free Mobile</name>
+ <gsm>
+ <!-- http://mobile.free.fr/faq-config-apn-autres.html -->
+ <network-id mcc="208" mnc="15"/>
+ <apn value="free">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Free-Mobile</name>
+ <username>free</username>
+ <password>free</password>
+ </apn>
+ <apn value="mmsfree">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Free-Mobile</name>
+ </apn>
+ <apn value="mmsfree">
+ <usage type="mms"/>
+ <name>MMS Free</name>
+ <mmsc>http://mms.free.fr</mmsc>
+ <mmsproxy>10.0.0.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="208" mnc="01"/>
+ <network-id mcc="208" mnc="00"/>
+
+ <voicemail>888</voicemail>
+ <balance-check>
+ <ussd>#123#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">#124*CODE#</ussd>
+ </balance-top-up>
+
+ <apn value="orange.fr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Orange Internet</name>
+ <dns>194.51.3.56</dns>
+ <dns>194.51.3.76</dns>
+ </apn>
+ <apn value="internet-entreprise">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business Contract</name>
+ <dns>194.51.3.56</dns>
+ <dns>194.51.3.76</dns>
+ </apn>
+ <apn value="orange">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>No Contract / Mobicarte</name>
+ <username>orange</username>
+ <password>orange</password>
+ <dns>194.51.3.56</dns>
+ <dns>194.51.3.76</dns>
+ </apn>
+ <apn value="orange-mib">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Orange Entreprises</name>
+ <username>mportail</username>
+ <password>mib</password>
+ <dns>172.17.0.2</dns>
+ <dns>172.17.0.4</dns>
+ </apn>
+ <apn value="orange-acte">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Orange MMS</name>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ <apn value="orange.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere 3G</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>SFR</name>
+ <gsm>
+ <!-- http://assistance.sfr.fr/internet-partout/Mobile/difference-wap-web/fc-2302-62196 -->
+ <network-id mcc="208" mnc="10"/>
+ <network-id mcc="208" mnc="11"/>
+ <msisdn-query>
+ <sms text="ABCd84367">9445</sms>
+ </msisdn-query>
+ <voicemail>123</voicemail>
+ <balance-check>
+ <dtmf>950</dtmf>
+ </balance-check>
+
+ <apn value="websfr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web / Prepaid</name>
+ <dns>172.20.2.10</dns>
+ <dns>172.20.2.39</dns>
+ </apn>
+ <apn value="wapsfr">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ </apn>
+ <apn value="internetpro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SFR internetpro</name>
+ </apn>
+ <apn value="ipnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SFR ipnet</name>
+ </apn>
+ <apn value="slsfr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <dns>172.20.2.10</dns>
+ <dns>172.20.2.39</dns>
+ </apn>
+ <apn value="sl2sfr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Full Internet (Webphone)</name>
+ </apn>
+ <apn value="internetneuf">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet (Neuf Telecom)</name>
+ </apn>
+ <apn value="mms65">
+ <usage type="mms"/>
+ <name>mms65</name>
+ <mmsc>http://mms65</mmsc>
+ <mmsproxy>10.143.156.8</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Transatel Telecom</name>
+ <gsm>
+ <network-id mcc="208" mnc="22"/>
+ <apn value="netgprs.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TEN</name>
+ <gsm>
+ <network-id mcc="208" mnc="01"/>
+ <apn value="ao.fr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ <apn value="ofnew.fr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pay-by-MB</name>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ <apn value="orange.acte">
+ <usage type="mms"/>
+ <name>Orange acte</name>
+ <username>orange</username>
+ <password>orange</password>
+ <mmsc>http://mms.orange.fr</mmsc>
+ <mmsproxy>192.168.10.200:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Britain -->
+<country code="gb">
+ <provider>
+ <name>Asda Mobile</name>
+ <gsm>
+ <network-id mcc="234" mnc="15"/>
+ <apn value="asdamobiles.co.uk">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="asdamobiles.co.uk">
+ <usage type="mms"/>
+ <name>ASDA MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mms.asdamobiles.co.uk/servlets/mms</mmsc>
+ <mmsproxy>212.183.137.12:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>BT Mobile</name>
+ <gsm>
+ <network-id mcc="234" mnc="00"/>
+ <apn value="btmobile.bt.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>bt</username>
+ <password>bt</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>giffgaff</name>
+ <gsm>
+ <network-id mcc="234" mnc="02"/>
+ <network-id mcc="234" mnc="10"/>
+ <network-id mcc="234" mnc="11"/>
+ <voicemail>443</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="giffgaff.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>giffgaff</username>
+ <password>password</password>
+ </apn>
+ <apn value="wap.o2.co.uk">
+ <usage type="mms"/>
+ <name>O2 MMS</name>
+ <username>o2wap</username>
+ <password>password</password>
+ <mmsc>http://mmsc.mms.o2.co.uk:8002</mmsc>
+ <mmsproxy>193.113.200.195:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>O2</name>
+ <gsm>
+ <network-id mcc="234" mnc="02"/>
+ <network-id mcc="234" mnc="10"/>
+ <network-id mcc="234" mnc="11"/>
+ <voicemail>901</voicemail>
+ <balance-check>
+ <ussd>*#10#</ussd>
+ <dtmf>4444</dtmf>
+ </balance-check>
+ <apn value="mobile.o2.co.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <username>o2web</username>
+ <password>password</password>
+ <dns>193.113.200.200</dns>
+ <dns>193.113.200.201</dns>
+ </apn>
+ <apn value="mobile.o2.co.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract (faster)</name>
+ <username>faster</username>
+ <password>password</password>
+ <dns>193.113.200.200</dns>
+ <dns>193.113.200.201</dns>
+ </apn>
+ <apn value="payandgo.o2.co.uk">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Pay and Go (Prepaid)</name>
+ <username>payandgo</username>
+ <password>payandgo</password>
+ </apn>
+ <apn value="idata.o2.co.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>iPhone (Contract)</name>
+ <username>vertigo</username>
+ <password>password</password>
+ </apn>
+ <apn value="m-bb.o2.co.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>o2bb</username>
+ <password>password</password>
+ <dns>82.132.254.2</dns>
+ <dns>82.132.254.3</dns>
+ </apn>
+ <apn value="wap.o2.co.uk">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>o2wap</username>
+ <password>password</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://sales.talktalk.co.uk/products/mobile/faq/started.html#A12 -->
+ <name>TalkTalk</name>
+ <gsm>
+ <apn value="mobile.talktalk.co.uk">
+ <gateway>212.183.137.12:8799</gateway>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="234" mnc="30"/>
+ <voicemail>222</voicemail>
+ <balance-check>
+ <dtmf>150</dtmf>
+ <sms text="BA">150</sms>
+ <sms text="AL">150</sms>
+ </balance-check>
+ <apn value="general.t-mobile.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>User</username>
+ <password>mms</password>
+ <dns>149.254.201.126</dns>
+ <dns>149.254.192.126</dns>
+ </apn>
+ <apn value="general.t-mobile.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>149.254.230.7</dns>
+ <dns>149.254.199.126</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tesco Mobile</name>
+ <gsm>
+ <network-id mcc="234" mnc="02"/>
+ <network-id mcc="234" mnc="10"/>
+ <network-id mcc="234" mnc="11"/>
+ <apn value="prepay.tesco-mobile.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>tescowap</username>
+ <password>password</password>
+ <dns>193.113.200.195</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Virgin Mobile</name>
+ <gsm>
+ <network-id mcc="234" mnc="31"/>
+ <network-id mcc="234" mnc="32"/>
+ <apn value="vdata">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.7.0.138</dns>
+ <dns>196.7.142.132</dns>
+ </apn>
+ <apn value="goto.virginmobile.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>user</username>
+ </apn>
+ <apn value="orange.acte">
+ <usage type="mms"/>
+ <name>VM acte GPRS</name>
+ <username>orange</username>
+ <password>orange</password>
+ <mmsc>http://mms.orange.fr</mmsc>
+ <mmsproxy>192.168.10.200:8080</mmsproxy>
+ </apn>
+ <apn value="vmms">
+ <usage type="mms"/>
+ <name>Virgin MMS</name>
+ <mmsc>http://mms.virginmobile.co.za</mmsc>
+ <mmsproxy>196.31.116.242:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="234" mnc="15"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <voicemail>121</voicemail>
+ <balance-check>
+ <ussd>*#1345#</ussd>
+ <dtmf>2345</dtmf>
+ </balance-check>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <username>web</username>
+ <password>web</password>
+ <dns>10.206.65.68</dns>
+ <dns>10.203.65.68</dns>
+ </apn>
+ <apn value="pp.vodafone.co.uk">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <username>web</username>
+ <password>web</password>
+ <dns>172.29.1.11</dns>
+ <dns>172.29.1.11</dns>
+ </apn>
+ <apn value="ppbundle.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>TopUp and Go</name>
+ <username>web</username>
+ <password>web</password>
+ <dns>10.203.129.68</dns>
+ <dns>10.203.129.68</dns>
+ </apn>
+ <apn value="pp.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>TopUp and Go (older 1GB SIMs)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>3</name>
+ <gsm>
+ <network-id mcc="234" mnc="20"/>
+ <apn value="3internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="three.co.uk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Handsets</name>
+ <dns>172.30.139.17</dns>
+ <dns>172.31.139.17</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="234" mnc="33"/>
+ <network-id mcc="234" mnc="34"/>
+ <voicemail>123</voicemail>
+ <balance-check>
+ <dtmf>453</dtmf>
+ </balance-check>
+ <apn value="orangeinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <username>orange</username>
+ <password>orange</password>
+ <dns>193.35.133.10</dns>
+ <dns>193.35.134.10</dns>
+ </apn>
+ <apn value="internetvpn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract (with VPN)</name>
+ <username>orange</username>
+ <password>orange</password>
+ <dns>193.35.133.10</dns>
+ <dns>193.35.134.10</dns>
+ </apn>
+ <apn value="orangewap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Orange WAP</name>
+ <username>orange</username>
+ <password>multimedia</password>
+ <dns>158.43.192.1</dns>
+ <dns>158.43.128.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Georgia -->
+<country code="ge">
+ <provider>
+ <name>Geocell</name>
+ <gsm>
+ <network-id mcc="282" mnc="01"/>
+ <apn value="Internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.72.130.20</dns>
+ <dns>212.72.152.1</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Geo MMS</name>
+ <mmsc>http://mms.geocell.com.ge/cmmsc/post</mmsc>
+ <mmsproxy>10.11.240.7:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Guernsey -->
+<country code="gg">
+ <provider>
+ <name>Airtel-Vodaphone</name>
+ <gsm>
+ <network-id mcc="234" mnc="03"/>
+ <apn value="airtel-ci-gprs.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sure (Cable &amp; Wireless)</name>
+ <gsm>
+ <network-id mcc="234" mnc="55"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Lifestyle MMS</name>
+ <mmsc>http://mmsc.gprs.cw.com/</mmsc>
+ <mmsproxy>10.0.3.101:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Wave Telecom</name>
+ <gsm>
+ <network-id mcc="234" mnc="50"/>
+ <apn value="pepper">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.9.0.135</dns>
+ <dns>212.9.0.136</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>pepperMMS</name>
+ <username>mms</username>
+ <mmsc>http://mmsc.surfmail.com/mmsc</mmsc>
+ <mmsproxy>212.9.19.199:3130</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Ghana -->
+<country code="gh">
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="620" mnc="01"/>
+ <balance-check>
+ <ussd>*124#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*125*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="620" mnc="02"/>
+ <msisdn-query>
+ <ussd>*127#</ussd>
+ </msisdn-query>
+ <balance-check>
+ <ussd>*122#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="browse">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="620" mnc="03"/>
+ <balance-check>
+ <ussd>*820#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*842*CODE#</ussd>
+ </balance-top-up>
+ <apn value="web.tigo.com.gh">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Airtel</name>
+ <gsm>
+ <network-id mcc="620" mnc="06"/>
+ <balance-check>
+ <ussd>*133#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*134*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>GloGhana</name>
+ <gsm>
+ <network-id mcc="620" mnc="07"/>
+ <balance-check>
+ <ussd>*124#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Cosmote MMS</name>
+ <mmsc>http://mmsc.cosmote.gr:8002</mmsc>
+ <mmsproxy>10.10.10.20:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Expresso</name>
+ <cdma>
+ <username>evdo@expresso.com</username>
+ <password>evdo</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Greenland -->
+<country code="gl">
+ <!-- http://www.tele.gl/da-DK/Privat/Info/Selvbetjening/Mobilopsaetning/Sider/ManuelOpsaetning.aspx -->
+ <provider>
+ <name>Tele Greenland A/S</name>
+ <gsm>
+ <apn value="internet">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Greece -->
+<country code="gr">
+ <provider>
+ <name>Cosmote</name>
+ <gsm>
+ <network-id mcc="202" mnc="01"/>
+
+ <voicemail>123</voicemail>
+ <balance-check>
+ <dtmf>1314</dtmf>
+ <sms text="YP">1314</sms>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="202" mnc="05"/>
+ <voicemail>121</voicemail>
+ <balance-check>
+ <dtmf>1252</dtmf>
+ <sms text="Y">1252</sms>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ </apn>
+ <apn value="web.session">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband On Demand</name>
+ <dns>213.249.17.10</dns>
+ <dns>213.249.17.11</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Wind</name>
+ <gsm>
+ <network-id mcc="202" mnc="09"/>
+ <network-id mcc="202" mnc="10"/>
+
+ <voicemail>122</voicemail>
+ <voicemail>1333</voicemail>
+ <balance-check>
+ <dtmf>1269</dtmf>
+ <dtmf>1225</dtmf>
+ <sms text="">1269</sms>
+ <sms text="">1225</sms>
+ </balance-check>
+
+ <apn value="gint.b-online.gr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="q-mms.myq.gr">
+ <usage type="mms"/>
+ <name>Q-Telecom MMS</name>
+ <mmsc>http://mms.myq.gr</mmsc>
+ <mmsproxy>192.168.80.134:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Guatemala -->
+<country code="gt">
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="704" mnc="01"/>
+ <apn value="internet.ideasclaro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Comcel / Tigo</name>
+ <gsm>
+ <network-id mcc="704" mnc="02"/>
+ <apn value="Wap.tigo.gt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>Wap</username>
+ <password>Wap</password>
+ </apn>
+ <apn value="mms.tigo.gt">
+ <usage type="mms"/>
+ <name>MMS TIGO</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>10.16.17.12:8888</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="704" mnc="03"/>
+ <apn value="internet.movistar.gt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistargt</username>
+ <password>movistargt</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Guyana -->
+<country code="gy">
+ <provider>
+ <name>GT&amp;T Cellink Plus</name>
+ <gsm>
+ <network-id mcc="738" mnc="02"/>
+ <apn value="wap.cellinkgy.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>test</username>
+ <password>test</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>DigiCel</name>
+ <gsm>
+ <network-id mcc="738" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="wap.digicelgy.com">
+ <usage type="mms"/>
+ <name>Digicel Guyana MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mmc.digicelgy.com/servlets/mms</mmsc>
+ <mmsproxy>172.20.6.12:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Hong Kong -->
+<country code="hk">
+ <provider>
+ <name>CSL</name>
+ <gsm>
+ <network-id mcc="454" mnc="00"/>
+ <network-id mcc="454" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>202.84.255.1</dns>
+ <dns>203.116.254.150</dns>
+ </apn>
+ <apn value="hkcsl">
+ <usage type="mms"/>
+ <name>CSL MMS</name>
+ <mmsc>http://192.168.58.171:8002</mmsc>
+ <mmsproxy>192.168.59.51:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>New World</name>
+ <gsm>
+ <network-id mcc="454" mnc="10"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="peoples.mms">
+ <usage type="mms"/>
+ <name>CMHK MMS</name>
+ <mmsc>http://mms.hk.chinamobile.com/mms</mmsc>
+ <mmsproxy>172.31.31.36:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>China Mobile</name>
+ <gsm>
+ <network-id mcc="454" mnc="12"/>
+ <apn value="peoples.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="SmarTone-Vodafone">
+ <usage type="mms"/>
+ <name>picturemail</name>
+ <mmsc>http://mms.smartone-vodafone.com/server</mmsc>
+ <mmsproxy>10.9.9.9:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>SmarTone</name>
+ <gsm>
+ <network-id mcc="454" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>PCCW (Sunday)</name>
+ <gsm>
+ <network-id mcc="454" mnc="16"/>
+ <network-id mcc="454" mnc="19"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Sunday (Old)</name>
+ </apn>
+ <apn value="pccwdata">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>PCCW 2G/GPRS</name>
+ </apn>
+ <apn value="pccw">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>PCCW 3G</name>
+ </apn>
+ <apn value="pccwmms">
+ <usage type="mms"/>
+ <name>PCCW MMS</name>
+ <mmsc>http://mmsc.mms.pccwmobile.com:8002/</mmsc>
+ <mmsproxy>10.131.2.8:8080</mmsproxy>
+ </apn>
+ <apn value="pccw">
+ <usage type="mms"/>
+ <name>PCCW 3G MMS</name>
+ <mmsc>http://3gmms.pccwmobile.com:8080/was</mmsc>
+ <mmsproxy>10.140.14.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sunday</name>
+ <gsm>
+ <network-id mcc="454" mnc="16"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="454" mnc="04"/>
+ <apn value="web.orangehk.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Three</name>
+ <gsm>
+ <network-id mcc="454" mnc="03"/>
+ <network-id mcc="454" mnc="04"/>
+ <apn value="mobile.three.com.hk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Honduras -->
+<country code="hn">
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="708" mnc="02"/>
+ <apn value="internet.tigo.hn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Croatia -->
+<country code="hr">
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="219" mnc="01"/>
+ <apn value="web.htgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>10.12.0.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>VIPNET</name>
+ <gsm>
+ <network-id mcc="219" mnc="10"/>
+ <apn value="data.vip.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract and Prepaid</name>
+ </apn>
+ <apn value="gprs5.vipnet.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS 5</name>
+ <username>38591</username>
+ <password>38591</password>
+ <dns>195.29.159.15</dns>
+ </apn>
+ <apn value="gprs0.vipnet.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS 0</name>
+ <username>38591</username>
+ <password>38591</password>
+ <dns>195.29.159.15</dns>
+ </apn>
+ <apn value="3g.vip.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G</name>
+ <username>38591</username>
+ <password>38591</password>
+ <dns>212.91.97.3</dns>
+ <dns>212.91.97.4</dns>
+ </apn>
+ <apn value="mms.vipnet.hr">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.vipnet.hr/servlets/mms</mmsc>
+ <mmsproxy>212.91.99.91:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CARNet VIPNET</name>
+ <gsm>
+ <network-id mcc="219" mnc="10"/>
+ <apn value="carnet.vip.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>AAIEDU</username>
+ <password/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CARNet Tele2</name>
+ <gsm>
+ <network-id mcc="219" mnc="02"/>
+ <apn value="carnet.tele2.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>AAIEDU</username>
+ <password/>
+ </apn>
+ <apn value="internet.tele2.hr">
+ <usage type="mms"/>
+ <name>Tele2 MMS</name>
+ <mmsc>http://mmsc.tele2.hr</mmsc>
+ <mmsproxy>193012040066:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="219" mnc="02"/>
+ <apn value="mobileinternet.tele2.hr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.247.156.66</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Hungary -->
+<country code="hu">
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="216" mnc="01"/>
+ <apn value="net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>mobilinternet</name>
+ <dns>217.79.128.40</dns>
+ <dns>217.79.128.45</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Pannon MMS</name>
+ <mmsc>http://mmsc.pgsm.hu/</mmsc>
+ <mmsproxy>84.225.255.1:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>DIGI</name>
+ <gsm>
+ <!-- Using Telenor's network -->
+ <network-id mcc="216" mnc="01"/>
+ <apn value="digi">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>DIGI Move</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="216" mnc="30"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.51.115.1</dns>
+ <dns>194.176.224.6</dns>
+ </apn>
+ <apn value="mms-westel">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>mms</username>
+ <dns>212.51.115.1</dns>
+ <dns>194.176.224.3</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="216" mnc="70"/>
+ <apn value="standardnet.vodafone.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Előf. Normál</name>
+ <username>vodawap</username>
+ <password>vodawap</password>
+ <dns>80.244.97.30</dns>
+ <dns>80.244.96.1</dns>
+ </apn>
+ <!-- http://www.vodafone.hu/en/support/questions-answers/pay-monthly/internet -->
+ <apn value="internet.vodafone.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Előf. töm.</name>
+ <dns>80.244.97.30</dns>
+ <dns>80.244.96.1</dns>
+ </apn>
+ <apn value="vitamax.snet.vodafone.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Felt. norm.</name>
+ <dns>80.244.97.30</dns>
+ <dns>80.244.96.1</dns>
+ </apn>
+ <apn value="vitamax.internet.vodafone.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone (felt. töm.)</name>
+ <dns>80.244.97.30</dns>
+ <dns>80.244.96.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Invitel</name>
+ <!-- MVNO operating on Telenor's network -->
+ <gsm>
+ <apn value="invitel.mobilnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>net.and.go</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Indonesia -->
+<country code="id">
+ <provider>
+ <name>3</name>
+ <gsm>
+ <network-id mcc="510" mnc="89"/>
+ <apn value="3gprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>3gprs</username>
+ <password>3gprs</password>
+ </apn>
+ <apn value="3data">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Monthly Internet Service</name>
+ <name xml:lang="id">Layanan Internet Bulanan</name>
+ <username>3data</username>
+ <password>3data</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>AXIS</name>
+ <gsm>
+ <network-id mcc="510" mnc="08"/>
+ <apn value="AXIS">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>axis</username>
+ <password>123456</password>
+ </apn>
+ <apn value="AXISmms">
+ <usage type="mms"/>
+ <name>AXISmms</name>
+ <username>AXIS</username>
+ <password>123456</password>
+ <mmsc>http://mmsc.axis</mmsc>
+ <mmsproxy>10.8.3.8:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Indosat</name>
+ <gsm>
+ <network-id mcc="510" mnc="21"/>
+ <network-id mcc="510" mnc="01"/>
+
+ <!-- http://www.indosat.com/Customer_Support/Customer_Support/Setting_GPRS_MMS_WAP_dan_BroadBand -->
+ <!-- http://3g.indosat.com/about/FAQ.php -->
+ <!-- http://www.indosat.com/Mentari/Mentari_Update/Voucher_Internet_Indosat -->
+ <!-- It seems that the APN is pretty much the same for plans -->
+
+ <apn value="indosatgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>IM3/Mentari Time-based</name>
+ <username>indosat@durasi</username>
+ <password>indosat@durasi</password>
+ </apn>
+ <apn value="indosatgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>IM3/Mentari Volume-based</name>
+ <username>indosat</username>
+ <password>indosat</password>
+ </apn>
+ <apn value="indosatgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Matrix 3G/3.5G</name>
+ <username>indosat</username>
+ <password>indosat</password>
+ </apn>
+ <apn value="indosatmms">
+ <usage type="mms"/>
+ <name>IndosatMMS</name>
+ <username>indosat</username>
+ <password>indosat</password>
+ <mmsc>http://mmsc.indosat.com</mmsc>
+ <mmsproxy>10.19.19.19:8080</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <name>StarOne</name>
+ <username>starone</username>
+ <password>indosat</password>
+ <sid value="10817"/>
+ <sid value="10819"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Telkomsel</name>
+ <gsm>
+ <network-id mcc="510" mnc="10"/>
+ <network-id mcc="510" mnc="20"/>
+
+ <!-- http://www.telkomsel.com/customer-service/manual-setting/ -->
+ <apn value="telkomsel">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap123</password>
+ <dns>202.152.0.2</dns>
+ <dns>202.155.14.251</dns>
+ </apn>
+
+ <!-- http://www.telkomsel.com/telkomselflash/telkomsel-flash -->
+ <apn value="flash">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Flash Time-based</name>
+ <username>foo</username>
+ <password>bar</password>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Flash Volume-based</name>
+ <username>foo</username>
+ <password>bar</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>TSEL-MMS</name>
+ <username>wap</username>
+ <password>wap123</password>
+ <mmsc>http://mms.telkomsel.com</mmsc>
+ <mmsproxy>10.1.89.150:8000</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Excelcomindo (XL)</name>
+ <gsm>
+ <network-id mcc="510" mnc="11"/>
+ <apn value="www.xlgprs.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>xlgprs</username>
+ <password>proxl</password>
+ <dns>202.152.254.245</dns>
+ <dns>202.152.254.246</dns>
+ </apn>
+ <apn value="www.xlmms.net">
+ <usage type="mms"/>
+ <name>XL-MMS</name>
+ <username>xlgprs</username>
+ <password>proxl</password>
+ <mmsc>http://mmc.xl.net.id/servlets/mms</mmsc>
+ <mmsproxy>202.152.240.50:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>SMART</name>
+ <cdma>
+ <username>smart</username>
+ <password>smart</password>
+ <sid value="10608"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Ceria</name>
+ <cdma>
+ <username>internet</username>
+ <password>ceria</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Fren</name>
+ <cdma>
+ <username>m8</username>
+ <password>m8</password>
+ <sid value="10530"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Telkom Flexy</name>
+ <cdma>
+ <username>telkomnet@flexi</username>
+ <password>telkom</password>
+ <sid value="10496"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Esia</name>
+ <cdma>
+ <sid value="10623"/>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Ireland -->
+<country code="ie">
+ <provider>
+ <name>O2</name>
+ <gsm>
+ <network-id mcc="272" mnc="02"/>
+ <balance-check>
+ <ussd>*#100#</ussd>
+ </balance-check>
+ <apn value="open.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ <dns>62.40.32.33</dns>
+ <dns>62.40.32.34</dns>
+ </apn>
+ <apn value="pp.internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <username>faster</username>
+ <password>web</password>
+ <dns>62.40.32.33</dns>
+ <dns>62.40.32.34</dns>
+ </apn>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Old Config Internet and MMS</name>
+ </apn>
+ <apn value="internet">
+ <usage type="mms"/>
+ <name>O2 MMS</name>
+ <mmsc>http://mmsc.mms.o2.ie:8002</mmsc>
+ <mmsproxy>62.40.32.40:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="272" mnc="01"/>
+ <msisdn-query>
+ <sms text="MYMSISDN:">50189</sms>
+ </msisdn-query>
+ <apn value="hs.vodafone.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>89.19.64.36</dns>
+ <dns>89.19.64.164</dns>
+ </apn>
+ <apn value="isp.vodafone.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="live.vodafone.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>10.24.59.100</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>E-Mobile</name>
+ <gsm>
+ <network-id mcc="272" mnc="03"/>
+ <!-- Information not found on the web but with the Windows connection software -->
+ <apn value="broadband.eircommbb.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Broadband To Go</name>
+ <dns>212.129.64.220</dns>
+ <dns>212.129.64.221</dns>
+ </apn>
+ <apn value="mms.mymeteor.ie">
+ <usage type="mms"/>
+ <name>MMS over GPRS</name>
+ <username>my</username>
+ <password>wap</password>
+ <mmsc>http://mms.mymeteor.ie</mmsc>
+ <mmsproxy>10.85.85.85:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Meteor</name>
+ <gsm>
+ <network-id mcc="272" mnc="03"/>
+ <apn value="data.mymeteor.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Meteor Data</name>
+ <username>my</username>
+ <password>meteor</password>
+ </apn>
+ <apn value="broadband.mymeteor.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Broadband To Go</name>
+ <dns>212.129.64.220</dns>
+ <dns>212.129.64.221</dns>
+ </apn>
+ <apn value="isp.mymeteor.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>my</username>
+ <password>isp</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Three Ireland</name>
+ <gsm>
+ <network-id mcc="272" mnc="05"/>
+ <apn value="3ireland.ie">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>172.31.140.69</dns>
+ <dns>172.30.140.69</dns>
+ </apn>
+ <apn value="3ireland.ie">
+ <usage type="mms"/>
+ <name>3MMS</name>
+ <mmsc>http://mms.um.3ireland.ie:10021/mmsc</mmsc>
+ <mmsproxy>mms.3ireland.ie:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Israel -->
+<country code="il">
+ <provider>
+ <name>CellCom</name>
+ <gsm>
+ <network-id mcc="425" mnc="02"/>
+ <apn value="internetg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Cellcom MMS</name>
+ <mmsc>http://mms.cellcom.co.il</mmsc>
+ <mmsproxy>vwapm2.ain.co.il:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>GolanTelecom</name>
+ <gsm>
+ <network-id mcc="425" mnc="08"/>
+ <apn value="internet.golantelecom.net.il">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Home Cellular</name>
+ <gsm>
+ <network-id mcc="425" mnc="15"/>
+ <apn value="hcminternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Hot Mobile</name>
+ <gsm>
+ <network-id mcc="425" mnc="07"/>
+ <apn value="net.hotm">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="425" mnc="01"/>
+ <apn value="uinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G Internet</name>
+ <dns>158.43.192.1</dns>
+ <dns>158.43.128.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Pelephone</name>
+ <gsm>
+ <network-id mcc="425" mnc="03"/>
+ <apn value="internet.pelephone.net.il">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G</name>
+ <username>pcl@3g</username>
+ <password>pcl</password>
+ </apn>
+ <apn value="mms.pelephone.net.il">
+ <usage type="mms"/>
+ <name>Multimedia Pelephone</name>
+ <username>pcl@3g</username>
+ <password>pcl</password>
+ <mmsc>mmsu.pelephone.net.il</mmsc>
+ <mmsproxy>10.170.9.54:9093</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Rami Levi</name>
+ <gsm>
+ <network-id mcc="425" mnc="16"/>
+ <apn value="internet.rl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>rl@3g</username>
+ <password>rl</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>YouPhone 3G</name>
+ <gsm>
+ <network-id mcc="425" mnc="14"/>
+ <apn value="data.youphone.co.il">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Isle of Man -->
+<country code="im">
+ <provider>
+ <name>Manx Telecom</name>
+ <gsm>
+ <network-id mcc="234" mnc="58"/>
+ <apn value="3gpronto">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.manxpronto.net">
+ <usage type="mms"/>
+ <name>Pronto MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.manxpronto.net:8002</mmsc>
+ <mmsproxy>195.10.99.46:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sure (Cable &amp; Wireless)</name>
+ <gsm>
+ <network-id mcc="234" mnc="36"/>
+ <network-id mcc="234" mnc="55"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- India -->
+<country code="in">
+ <provider>
+ <name>AIRCEL</name>
+ <gsm>
+ <network-id mcc="404" mnc="17"/>
+ <network-id mcc="404" mnc="28"/>
+ <network-id mcc="404" mnc="29"/>
+ <network-id mcc="404" mnc="37"/>
+ <network-id mcc="404" mnc="41"/>
+ <network-id mcc="404" mnc="42"/>
+ <network-id mcc="404" mnc="91"/>
+ <network-id mcc="405" mnc="800"/>
+ <network-id mcc="405" mnc="801"/>
+ <network-id mcc="405" mnc="802"/>
+ <network-id mcc="405" mnc="803"/>
+ <network-id mcc="405" mnc="804"/>
+ <network-id mcc="405" mnc="805"/>
+ <network-id mcc="405" mnc="806"/>
+ <network-id mcc="405" mnc="807"/>
+ <network-id mcc="405" mnc="808"/>
+ <network-id mcc="405" mnc="809"/>
+ <network-id mcc="405" mnc="810"/>
+ <network-id mcc="405" mnc="811"/>
+ <network-id mcc="405" mnc="812"/>
+
+ <apn value="aircelweb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web</name>
+ </apn>
+ <apn value="aircelgprs">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ </apn>
+ <apn value="aircelgprs.po">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS (Postpaid)</name>
+ </apn>
+ <apn value="aircelgprs.pr">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>GPRS (Prepaid)</name>
+ </apn>
+ <apn value="aircelmms">
+ <usage type="mms"/>
+ <name>Aircel MMS</name>
+ <mmsc>http://172.17.83.67/servlets/mms</mmsc>
+ <mmsproxy>172.17.83.69:8080</mmsproxy>
+ </apn>
+ <apn value="aircelmms.po">
+ <usage type="mms"/>
+ <name>Aircel MMS</name>
+ <mmsc>http://mmsc/mmrelay.app</mmsc>
+ <mmsproxy>192.168.35.196:8081</mmsproxy>
+ </apn>
+ <apn value="aircelmms">
+ <usage type="mms"/>
+ <name>Aircel MMS</name>
+ <mmsc>http://mmsc/mmrelay.app</mmsc>
+ <mmsproxy>192.168.35.196:8081</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Airtel</name>
+ <gsm>
+ <network-id mcc="404" mnc="02"/>
+ <network-id mcc="404" mnc="03"/>
+ <network-id mcc="404" mnc="06"/>
+ <network-id mcc="404" mnc="10"/>
+ <network-id mcc="404" mnc="28"/>
+ <network-id mcc="404" mnc="31"/>
+ <network-id mcc="404" mnc="37"/>
+ <network-id mcc="404" mnc="40"/>
+ <network-id mcc="404" mnc="41"/>
+ <network-id mcc="404" mnc="42"/>
+ <network-id mcc="404" mnc="45"/>
+ <network-id mcc="404" mnc="49"/>
+ <network-id mcc="404" mnc="70"/>
+ <network-id mcc="404" mnc="90"/>
+ <network-id mcc="404" mnc="92"/>
+ <network-id mcc="404" mnc="93"/>
+ <network-id mcc="404" mnc="96"/>
+ <network-id mcc="404" mnc="97"/>
+ <network-id mcc="404" mnc="98"/>
+ <network-id mcc="405" mnc="51"/>
+ <network-id mcc="405" mnc="52"/>
+ <network-id mcc="405" mnc="54"/>
+ <network-id mcc="405" mnc="56"/>
+
+ <apn value="airtelgprs.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>202.56.230.5</dns>
+ <dns>202.56.240.5</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="404" mnc="01"/>
+ <network-id mcc="404" mnc="05"/>
+ <network-id mcc="404" mnc="11"/>
+ <network-id mcc="404" mnc="13"/>
+ <network-id mcc="404" mnc="15"/>
+ <network-id mcc="404" mnc="20"/>
+ <network-id mcc="404" mnc="27"/>
+ <network-id mcc="404" mnc="30"/>
+ <network-id mcc="404" mnc="43"/>
+ <network-id mcc="404" mnc="46"/>
+ <network-id mcc="404" mnc="60"/>
+ <network-id mcc="404" mnc="84"/>
+ <network-id mcc="404" mnc="86"/>
+ <network-id mcc="404" mnc="88"/>
+ <network-id mcc="405" mnc="66"/>
+ <network-id mcc="405" mnc="750"/>
+ <network-id mcc="405" mnc="751"/>
+ <network-id mcc="405" mnc="752"/>
+ <network-id mcc="405" mnc="753"/>
+ <network-id mcc="405" mnc="754"/>
+ <network-id mcc="405" mnc="755"/>
+ <network-id mcc="405" mnc="756"/>
+ <apn value="www">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone Connect</name>
+ </apn>
+ <apn value="portalnmms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Vodafone Live</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>BSNL/CellOne</name>
+ <gsm>
+ <network-id mcc="404" mnc="34"/>
+ <network-id mcc="404" mnc="38"/>
+ <network-id mcc="404" mnc="51"/>
+ <network-id mcc="404" mnc="53"/>
+ <network-id mcc="404" mnc="54"/>
+ <network-id mcc="404" mnc="55"/>
+ <network-id mcc="404" mnc="57"/>
+ <network-id mcc="404" mnc="58"/>
+ <network-id mcc="404" mnc="59"/>
+ <network-id mcc="404" mnc="62"/>
+ <network-id mcc="404" mnc="64"/>
+ <network-id mcc="404" mnc="66"/>
+ <network-id mcc="404" mnc="71"/>
+ <network-id mcc="404" mnc="72"/>
+ <network-id mcc="404" mnc="73"/>
+ <network-id mcc="404" mnc="74"/>
+ <network-id mcc="404" mnc="75"/>
+ <network-id mcc="404" mnc="76"/>
+ <network-id mcc="404" mnc="77"/>
+ <network-id mcc="404" mnc="80"/>
+ <network-id mcc="404" mnc="81"/>
+
+ <!-- http://cellone.in/cellone_msp.htm -->
+ <apn value="bsnlnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>New GPRS/3G</name>
+ </apn>
+
+ <apn value="bsnlwap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>New WAP</name>
+ </apn>
+
+ <apn value="bsnlsouth">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old South Zone A (Karnatka, Andhra Pradesh, Chennai, Tamil Nadu, Kerala)</name>
+ </apn>
+ <apn value="gprssouth.cellone.in">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old South Zone B (Karnatka, Andhra Pradesh, Chennai, Tamil Nadu, Kerala)</name>
+ </apn>
+ <apn value="gprsnorth.cellone.in">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old North Zone (Haryana, Punjab, UP(East), UP(West), Himachal Pradesh, Rajasthan, Jammu &amp; Kashmir)</name>
+ </apn>
+ <apn value="gprswest.cellone.in">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old West Zone (Maharashtra, Gujrat, Madhya Pradesh, Chattishgarh)</name>
+ </apn>
+ <apn value="www.e.pr">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Old East Zone Prepaid (Jharkhand, Bihar, Kolkata, West Bengal, Orissa, Assam, North East, Adman Nicobar)</name>
+ <dns>218.248.240.208</dns>
+ <dns>218.248.240.135</dns>
+ </apn>
+ <apn value="www.e.po">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Old East Zone Postpaid (Jharkhand, Bihar, Kolkata, West Bengal, Orissa, Assam, North East, Adman Nicobar)</name>
+ <dns>218.248.240.208</dns>
+ <dns>218.248.240.135</dns>
+ </apn>
+ <apn value="bsnlmms">
+ <usage type="mms"/>
+ <name>BSNL MMS</name>
+ <mmsc>http://bsnlmmsc.in:8514</mmsc>
+ <mmsproxy>10.210.10.11:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Idea Cellular</name>
+ <gsm>
+ <network-id mcc="404" mnc="04"/>
+ <network-id mcc="404" mnc="07"/>
+ <network-id mcc="404" mnc="12"/>
+ <network-id mcc="404" mnc="14"/>
+ <network-id mcc="404" mnc="19"/>
+ <network-id mcc="404" mnc="22"/>
+ <network-id mcc="404" mnc="24"/>
+ <network-id mcc="404" mnc="44"/>
+ <network-id mcc="404" mnc="56"/>
+ <network-id mcc="404" mnc="82"/>
+ <network-id mcc="405" mnc="70"/>
+ <network-id mcc="405" mnc="799"/>
+ <network-id mcc="405" mnc="845"/>
+ <network-id mcc="405" mnc="848"/>
+ <network-id mcc="405" mnc="850"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MMS Idea GPRS</name>
+ <mmsc>http://mms.idea.pl</mmsc>
+ <mmsproxy>192.168.6.104:8080</mmsproxy>
+ </apn>
+ <apn value="mmsc">
+ <usage type="mms"/>
+ <name>Idea MMS</name>
+ <mmsc>http://10.4.42.21:8002</mmsc>
+ <mmsproxy>10.4.42.15:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTNL</name>
+ <gsm>
+ <network-id mcc="404" mnc="68"/>
+ <network-id mcc="404" mnc="69"/>
+ <apn value="mtnl.net">
+ <usage type="internet"/>
+ <name>Delhi (3G Prepaid / Postpaid)</name>
+ <username>mtnl</username>
+ <password>mtnl123</password>
+ </apn>
+ <apn value="mtnl.net">
+ <usage type="internet"/>
+ <name>Mumbai (3G Prepaid / Postpaid)</name>
+ </apn>
+ <apn value="gprsmtnldel">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Delhi</name>
+ <username>mtnl</username>
+ <password>mtnl123</password>
+ </apn>
+ <apn value="gprsppsmum">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Mumbai (Prepaid)</name>
+ <username>mtnl</username>
+ <password>mtnl123</password>
+ </apn>
+ <apn value="gprsmtnlmum">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mumbai (Postpaid / Plan 2)</name>
+ <username>mtnl</username>
+ <password>mtnl123</password>
+ </apn>
+ <apn value="mmsmtnldel">
+ <usage type="mms"/>
+ <name>MTNL MMS</name>
+ <mmsc>http://172.16.31.136/mms/</mmsc>
+ <mmsproxy>172.16.31.136:9401</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Reliance</name>
+ <gsm>
+ <network-id mcc="404" mnc="09"/>
+ <network-id mcc="404" mnc="36"/>
+ <network-id mcc="404" mnc="52"/>
+ <network-id mcc="404" mnc="83"/>
+ <network-id mcc="404" mnc="85"/>
+ <network-id mcc="405" mnc="05"/>
+ <network-id mcc="405" mnc="10"/>
+ <network-id mcc="405" mnc="13"/>
+ <apn value="smartnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Smart Net</name>
+ </apn>
+ <apn value="smartwap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Smart WAP</name>
+ </apn>
+ <apn value="rcomnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Netconnect (RCOMNET)</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>RMMS</name>
+ <mmsc>http://10.239.221.47/mms/</mmsc>
+ <mmsproxy>10.239.221.7:8080</mmsproxy>
+ </apn>
+ <apn value="rcommms">
+ <usage type="mms"/>
+ <name>Reliance MMS</name>
+ <mmsc>http://mmsc.rcom.co.in/mms/</mmsc>
+ <mmsproxy>10.239.221.5:8080</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <name>Reliance Netconnect</name>
+ <sid value="14655"/>
+ <sid value="14656"/>
+ <sid value="14657"/>
+ <sid value="14658"/>
+ <sid value="14659"/>
+ <sid value="14660"/>
+ <sid value="14661"/>
+ <sid value="14662"/>
+ <sid value="14663"/>
+ <sid value="14664"/>
+ <sid value="14665"/>
+ <sid value="14666"/>
+ <sid value="14667"/>
+ <sid value="14668"/>
+ <sid value="14669"/>
+ <sid value="14670"/>
+ <sid value="14671"/>
+ <sid value="14672"/>
+ <sid value="14673"/>
+ <sid value="14674"/>
+ <sid value="14675"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Spice telecom</name>
+ <gsm>
+ <network-id mcc="404" mnc="14"/>
+ <network-id mcc="404" mnc="44"/>
+
+ <apn value="Simplyenjoy">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>spice</username>
+ <password>spice</password>
+ </apn>
+ <apn value="simplydownload">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>kar</name>
+ </apn>
+ <apn value="mmsc">
+ <usage type="mms"/>
+ <name>Idea MMS</name>
+ <mmsc>http://10.4.42.21:8002/</mmsc>
+ <mmsproxy>10.4.42.15:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tata Docomo</name>
+ <gsm>
+ <network-id mcc="405" mnc="025"/>
+ <network-id mcc="405" mnc="026"/>
+ <network-id mcc="405" mnc="027"/>
+ <network-id mcc="405" mnc="029"/>
+ <network-id mcc="405" mnc="030"/>
+ <network-id mcc="405" mnc="031"/>
+ <network-id mcc="405" mnc="032"/>
+ <network-id mcc="405" mnc="034"/>
+ <network-id mcc="405" mnc="035"/>
+ <network-id mcc="405" mnc="036"/>
+ <network-id mcc="405" mnc="037"/>
+ <network-id mcc="405" mnc="038"/>
+ <network-id mcc="405" mnc="039"/>
+ <network-id mcc="405" mnc="041"/>
+ <network-id mcc="405" mnc="042"/>
+ <network-id mcc="405" mnc="043"/>
+ <network-id mcc="405" mnc="044"/>
+ <network-id mcc="405" mnc="045"/>
+ <network-id mcc="405" mnc="046"/>
+ <network-id mcc="405" mnc="047"/>
+
+ <apn value="TATA.DOCOMO.INTERNET">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="TATADOCOMO3G">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="TATA.DOCOMO.MMS">
+ <usage type="mms"/>
+ <name>TATA DOCOMO MMS</name>
+ <mmsc>http://mmsc/</mmsc>
+ <mmsproxy>10.124.26.94:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tata Indicom (Plug2Surf)</name>
+ <cdma>
+ <username>internet</username>
+ <password>internet</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Tata Indicom (Photon+)</name>
+ <cdma>
+ <username>internet</username>
+ <password>internet</password>
+ <sid value="14836"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>MTS MBlaze</name>
+ <cdma>
+ <username>internet@internet.mtsindia.in</username>
+ <password>mts</password>
+ <sid value="14554"/>
+ <sid value="14555"/>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Iraq -->
+<country code="iq">
+ <provider>
+ <name>Itisaluna</name>
+ <cdma>
+ <username>itisaluna</username>
+ <password>itisaluna</password>
+ <sid value="15456"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Omnea Telecom</name>
+ <cdma>
+ <username>omnea</username>
+ <password>omnea</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Kalimat Telecom</name>
+ <cdma>
+ <sid value="15470"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Korek</name>
+ <gsm>
+ <network-id mcc="418" mnc="40"/>
+ <apn value="net.korek.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>korek</username>
+ <password>korek</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Asia Cell</name>
+ <gsm>
+ <network-id mcc="418" mnc="50"/>
+ <apn value="net.asiacell.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mtnirancell">
+ <usage type="mms"/>
+ <name>Irancell-MMS</name>
+ <mmsc>http://mms:8002</mmsc>
+ <mmsproxy>10.131.26.138:9200</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Iran -->
+<country code="ir">
+ <provider>
+ <name>همراه اول</name>
+ <gsm>
+ <network-id mcc="432" mnc="11"/>
+ <apn value="mcinet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ایرانسل</name>
+ <gsm>
+ <network-id mcc="432" mnc="35"/>
+ <apn value="mtnirancell">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Iceland -->
+<country code="is">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="274" mnc="02"/>
+ <network-id mcc="274" mnc="03"/>
+ <apn value="vmc.gprs.is">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.176.128.51</dns>
+ <dns>213.176.128.50</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Nova</name>
+ <gsm>
+ <network-id mcc="274" mnc="11"/>
+ <apn value="internet.nova.is">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>192.168.190.54</dns>
+ <dns>192.168.190.55</dns>
+ </apn>
+ <apn value="mms.nova.is">
+ <usage type="mms"/>
+ <name>Nova MMS</name>
+ <mmsc>http://mmsc.nova.is</mmsc>
+ <mmsproxy>10.10.2.60:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Síminn</name>
+ <gsm>
+ <network-id mcc="274" mnc="01"/>
+ <apn value="wap.simi.is">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>194.105.224.1</dns>
+ <dns>212.30.200.200</dns>
+ </apn>
+ <apn value="mms.simi.is">
+ <usage type="mms"/>
+ <name>Siminn MMS</name>
+ <mmsc>http://mms.simi.is/servlets/mms</mmsc>
+ <mmsproxy>213.167.138.200:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Italy -->
+<country code="it">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="222" mnc="10"/>
+ <apn value="mobile.vodafone.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ </apn>
+ <apn value="web.omnitel.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Facile (old)</name>
+ <dns>83.224.70.62</dns>
+ <dns>83.224.70.78</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TIM</name>
+ <gsm>
+ <network-id mcc="222" mnc="01"/>
+ <apn value="ibox.tim.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Maxxi Alice/Internet</name>
+ <dns>217.200.200.42</dns>
+ <dns>213.230.129.10</dns>
+ </apn>
+ <apn value="wap.tim.it">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>WAPTIM</username>
+ <dns>213.230.155.94</dns>
+ <dns>213.230.130.222</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Wind</name>
+ <gsm>
+ <network-id mcc="222" mnc="88"/>
+ <apn value="internet.wind">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Non-business</name>
+ <username>Wind</username>
+ <password>Wind</password>
+ <dns>193.70.152.25</dns>
+ <dns>193.70.192.25</dns>
+ </apn>
+ <apn value="internet.wind.biz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business</name>
+ <username>Wind</username>
+ <password>Wind</password>
+ <dns>193.70.152.25</dns>
+ <dns>193.70.192.25</dns>
+ </apn>
+ <apn value="mms.wind">
+ <usage type="mms"/>
+ <name>WIND MMS</name>
+ <mmsc>http://mms.wind.it</mmsc>
+ <mmsproxy>212.245.244.100:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>3</name>
+ <gsm>
+ <network-id mcc="222" mnc="99"/>
+ <apn value="tre.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Ricaricabile</name>
+ <dns>62.13.169.92</dns>
+ <dns>62.13.169.93</dns>
+ </apn>
+ <apn value="datacard.tre.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Abbonamento</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Fastweb</name>
+ <gsm>
+ <network-id mcc="222" mnc="99"/>
+ <apn value="apn.fastweb.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Voce/dati</name>
+ </apn>
+ <apn value="datacard.fastweb.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Solo dati</name>
+ <dns>213.140.2.43</dns>
+ <dns>213.140.2.49</dns>
+ </apn>
+ <apn value="tre.it">
+ <usage type="mms"/>
+ <name>3 MMS</name>
+ <mmsc>http://10.216.59.240:10021/mmsc</mmsc>
+ <mmsproxy>wsb.treumts.it:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>PosteMobile</name>
+ <gsm>
+ <network-id mcc="222" mnc="10"/>
+ <apn value="internet.postemobile.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.postemobile.it">
+ <usage type="mms"/>
+ <name>PosteMobile MMS</name>
+ <mmsc>http://mms.postemobile.it/servlets/mms</mmsc>
+ <mmsproxy>10.128.224.10:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CoopVoce</name>
+ <gsm>
+ <network-id mcc="222" mnc="01"/>
+ <apn value="web.coopvoce.it">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Mobile</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on 3's network -->
+ <!-- www.bip.it -->
+ <name>Bip</name>
+ <gsm>
+ <network-id mcc="222" mnc="99"/>
+ <apn value="internet.vistream.it">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Megabip Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <!-- Full MVNO with an own MNC code -->
+ <name>Nòverca</name>
+ <gsm>
+ <network-id mcc="222" mnc="07"/>
+ <apn value="web.noverca.it">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Noverca WEB</name>
+ </apn>
+ <apn value="mms.noverca.it">
+ <usage type="mms"/>
+ <name>Noverca MMS</name>
+ <mmsc>http://mms.noverca.it/</mmsc>
+ <mmsproxy>10.248.1.12:80</mmsproxy>
+ </apn>
+ <apn value="wap.noverca.it">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Noverca WAP</name>
+ <gateway>10.248.1.12:80</gateway>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on TIM's network -->
+ <name>Tiscali</name>
+ <gsm>
+ <network-id mcc="222" mnc="01"/>
+ <apn value="tiscalimobileinternet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Tiscali Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Jersey -->
+<country code="je">
+ <provider>
+ <name>Airtel-Vodaphone</name>
+ <gsm>
+ <network-id mcc="234" mnc="03"/>
+ <apn value="airtel-ci-gprs.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sure (Cable &amp; Wireless)</name>
+ <gsm>
+ <network-id mcc="234" mnc="55"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Jersey Telecom</name>
+ <gsm>
+ <network-id mcc="234" mnc="50"/>
+ <apn value="pepper">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>abc</username>
+ <password>abc</password>
+ <dns>212.9.0.135</dns>
+ <dns>212.9.0.136</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Jamaica -->
+<country code="jm">
+ <provider>
+ <name>Cable &amp; Wireless</name>
+ <gsm>
+ <network-id mcc="338" mnc="020"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Digicel</name>
+ <gsm>
+ <network-id mcc="338" mnc="050"/>
+ <apn value="web.digiceljamaica.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wapuser</username>
+ <password>wap03jam</password>
+ <dns>208.131.176.126</dns>
+ <dns>200.10.152.232</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Hashemite Kingdom of Jordan -->
+<country code="jo">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="416" mnc="77"/>
+ <apn value="net.orange.jo">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>net</username>
+ <password>net</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zain</name>
+ <gsm>
+ <network-id mcc="416" mnc="01"/>
+ <apn value="zain">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>Zain</username>
+ <password>Zain</password>
+ </apn>
+ <apn value="Zain">
+ <usage type="mms"/>
+ <name>Zain-MMS</name>
+ <mmsc>http://10.122.200.12:8002</mmsc>
+ <mmsproxy>10.122.200.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Japan -->
+<country code="jp">
+ <provider>
+ <name>Softbank Mobile</name>
+ <gsm>
+ <network-id mcc="440" mnc="04"/>
+ <network-id mcc="440" mnc="06"/>
+ <network-id mcc="440" mnc="20"/>
+ <network-id mcc="440" mnc="40"/>
+ <network-id mcc="440" mnc="41"/>
+ <network-id mcc="440" mnc="42"/>
+ <network-id mcc="440" mnc="43"/>
+ <network-id mcc="440" mnc="44"/>
+ <network-id mcc="440" mnc="45"/>
+ <network-id mcc="440" mnc="46"/>
+ <network-id mcc="440" mnc="47"/>
+ <network-id mcc="440" mnc="48"/>
+ <network-id mcc="440" mnc="90"/>
+ <network-id mcc="440" mnc="92"/>
+ <network-id mcc="440" mnc="93"/>
+ <network-id mcc="440" mnc="94"/>
+ <network-id mcc="440" mnc="95"/>
+ <network-id mcc="440" mnc="96"/>
+ <network-id mcc="440" mnc="97"/>
+ <network-id mcc="440" mnc="98"/>
+ <apn value="softbank">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>ai@softbank</username>
+ <password>softbank</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>b-mobile</name>
+ <gsm>
+ <network-id mcc="440" mnc="10"/>
+ <apn value="dm.jplat.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>u300</name>
+ <username>bmobile@u300</username>
+ <password>bmobile</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>e-mobile</name>
+ <gsm>
+ <network-id mcc="440" mnc="00"/>
+ <apn value="emb.ne.jp">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>em</username>
+ <password>em</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>NTTdocomo</name>
+ <gsm>
+ <network-id mcc="440" mnc="01"/>
+ <network-id mcc="440" mnc="02"/>
+ <network-id mcc="440" mnc="03"/>
+ <network-id mcc="440" mnc="09"/>
+ <network-id mcc="440" mnc="10"/>
+ <network-id mcc="440" mnc="11"/>
+ <network-id mcc="440" mnc="12"/>
+ <network-id mcc="440" mnc="13"/>
+ <network-id mcc="440" mnc="14"/>
+ <network-id mcc="440" mnc="15"/>
+ <network-id mcc="440" mnc="16"/>
+ <network-id mcc="440" mnc="17"/>
+ <network-id mcc="440" mnc="18"/>
+ <network-id mcc="440" mnc="19"/>
+ <network-id mcc="440" mnc="21"/>
+ <network-id mcc="440" mnc="22"/>
+ <network-id mcc="440" mnc="23"/>
+ <network-id mcc="440" mnc="24"/>
+ <network-id mcc="440" mnc="25"/>
+ <network-id mcc="440" mnc="26"/>
+ <network-id mcc="440" mnc="27"/>
+ <network-id mcc="440" mnc="28"/>
+ <network-id mcc="440" mnc="29"/>
+ <network-id mcc="440" mnc="30"/>
+ <network-id mcc="440" mnc="31"/>
+ <network-id mcc="440" mnc="32"/>
+ <network-id mcc="440" mnc="33"/>
+ <network-id mcc="440" mnc="34"/>
+ <network-id mcc="440" mnc="35"/>
+ <network-id mcc="440" mnc="36"/>
+ <network-id mcc="440" mnc="37"/>
+ <network-id mcc="440" mnc="38"/>
+ <network-id mcc="440" mnc="39"/>
+ <network-id mcc="440" mnc="49"/>
+ <network-id mcc="440" mnc="58"/>
+ <network-id mcc="440" mnc="60"/>
+ <network-id mcc="440" mnc="61"/>
+ <network-id mcc="440" mnc="62"/>
+ <network-id mcc="440" mnc="63"/>
+ <network-id mcc="440" mnc="64"/>
+ <network-id mcc="440" mnc="65"/>
+ <network-id mcc="440" mnc="66"/>
+ <network-id mcc="440" mnc="67"/>
+ <network-id mcc="440" mnc="68"/>
+ <network-id mcc="440" mnc="69"/>
+ <network-id mcc="440" mnc="87"/>
+ <network-id mcc="440" mnc="99"/>
+
+ <apn value="mopera.ne.jp">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>mopera</name>
+ </apn>
+ <apn value="mopera.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>mopera U</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>au(KDDI)</name>
+ <cdma>
+ <username>au@au-win.ne.jp</username>
+ <password>au</password>
+ <dns>210.196.3.183</dns>
+ <dns>210.141.112.163</dns>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Kenya -->
+<country code="ke">
+ <provider>
+ <name>Airtel</name>
+ <gsm>
+ <network-id mcc="639" mnc="03"/>
+ <apn value="ke.celtel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.yu.co.ke">
+ <usage type="mms"/>
+ <name>YU mms</name>
+ <mmsc>http://mms.yu.co.ke</mmsc>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Safaricom</name>
+ <gsm>
+ <!--http://www.safaricom.co.ke/personal/internet/getting-started/handset-setting -->
+ <network-id mcc="639" mnc="02"/>
+ <balance-check>
+ <ussd>*144#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*544*CODE#</ussd>
+ </balance-top-up>
+ <apn value="safaricom">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Safaricom (Prepaid)</name>
+ <username>saf</username>
+ <password>data</password>
+ </apn>
+ <apn value="safaricom">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <apn value="mms.safaricom.com">
+ <usage type="mms"/>
+ <name>Safaricom MMS</name>
+ <username>saf</username>
+ <password>data</password>
+ <mmsc>http://mms.gprs.safaricom.com</mmsc>
+ <mmsproxy>172.22.2.38:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>yu (Econet)</name>
+ <gsm>
+ <network-id mcc="639" mnc="05"/>
+ <apn value="internet.econet.co.ke">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="639" mnc="07"/>
+ <apn value="bew.orange.co.ke">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ <cdma>
+ <name>Orange Fixed Plus</name>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Kyrgyzstan -->
+<country code="kg">
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="437" mnc="01"/>
+ <balance-check>
+ <ussd>*102#</ussd>
+ </balance-check>
+ <apn value="internet.beeline.kg">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MegaCom</name>
+ <gsm>
+ <network-id mcc="437" mnc="05"/>
+ <balance-check>
+ <ussd>*500#</ussd>
+ </balance-check>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>O!</name>
+ <gsm>
+ <network-id mcc="437" mnc="09"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>FONEX</name>
+ <cdma>
+ <username>cdma</username>
+ <password>cdma</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>nexi (mir+kg)</name>
+ <name xml:lang="ru">Зона Мир+КГ</name>
+ <cdma>
+ <username>555@mir</username>
+ <password>555</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>nexi (kg)</name>
+ <name xml:lang="ru">Зона КГ</name>
+ <cdma>
+ <username>999@kg</username>
+ <password>999</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Cambodia -->
+<country code="kh">
+ <provider>
+ <name>Cellcard</name>
+ <gsm>
+ <network-id mcc="456" mnc="01"/>
+
+ <balance-check>
+ <ussd>#124#</ussd>
+ </balance-check>
+
+ <!-- http://www.cellcard.com.kh/en/service/data_3.5G_internet.php -->
+ <apn value="cellcard">
+ <usage type="internet"/>
+ <username>mobitel</username>
+ <password>mobitel</password>
+ </apn>
+ <apn value="internet">
+ <usage type="mms"/>
+ <name>Mobitel MMS</name>
+ <username>mobitel</username>
+ <password>internet</password>
+ <mmsc>http://mms.mobitel.si/servlets/mms</mmsc>
+ <mmsproxy>213.229.249.40:8080</mmsproxy>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>GPRS MMS</name>
+ <username>mobitel</username>
+ <password>mobitel</password>
+ <mmsc>http://mms.mobitel.com.kh/mmsc</mmsc>
+ <mmsproxy>203.144.95.98:3130</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Hello</name>
+ <gsm>
+ <network-id mcc="456" mnc="02"/>
+
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+
+ <!-- http://www.tmic.com.kh/public/mobile_broadband/mobile_broadband.aspx?page=broadband_faq -->
+ <!-- in reality any APN value works -->
+ <apn value="hellowww">
+ <usage type="internet"/>
+ </apn>
+ <apn value="hellomms">
+ <usage type="mms"/>
+ <name>Hellow MMS</name>
+ <mmsc>http://mms.iq2mobile.com</mmsc>
+ <mmsproxy>192.168.205.20:8088</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>qb</name>
+ <gsm>
+ <network-id mcc="456" mnc="04"/>
+
+ <balance-check>
+ <ussd>#132#</ussd>
+ </balance-check>
+
+ <!-- http://www.qbmore.com/download/handsetconfiguration.html -->
+ <apn value="WAP">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Smart Mobile</name>
+ <gsm>
+ <network-id mcc="456" mnc="06"/>
+
+ <balance-check>
+ <ussd>*888#</ussd>
+ </balance-check>
+
+ <!-- http://www.smart.com.kh/en/services/internet -->
+ <apn value="smart">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Metfone</name>
+ <gsm>
+ <network-id mcc="456" mnc="08"/>
+
+ <balance-check>
+ <ussd>*097#</ussd>
+ </balance-check>
+
+ <!-- http://metfone.com.kh/home/metfone.mf?id=20&task=detailpac -->
+ <apn value="metfone">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="456" mnc="09"/>
+
+ <balance-check>
+ <ussd>*102#</ussd>
+ </balance-check>
+
+ <!-- in reality any APN value works -->
+ <apn value="gprs.beeline.com.kh">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Excell</name>
+ <!-- mcc="456" mnc="11" -->
+ <cdma/>
+ </provider>
+ <provider>
+ <name>Mfone</name>
+ <gsm>
+ <network-id mcc="456" mnc="18"/>
+
+ <balance-check>
+ <ussd>*222#</ussd>
+ </balance-check>
+
+ <!-- http://www.mfone.com.kh/images/3g/mfone_3g.pdf -->
+ <apn value="Mfone">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Korea, Republic of -->
+<country code="kr">
+ <provider>
+ <name>KTF</name>
+ <gsm>
+ <network-id mcc="450" mnc="08"/>
+ <apn value="hsdpa-internet.ktfwing.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ <cdma>
+ <!-- cid: "016" -->
+ <username>ktf</username>
+ <password>ktf</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>LGUPlus</name>
+ <gsm>
+ <network-id mcc="450" mnc="06"/>
+ <apn value="internet.lguplus.co.kr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ <cdma>
+ <!-- cid: "109" -->
+ <!--
+ username must be xxxx(yournumber)@lgt.co.kr and
+ password must be your last 4 number
+ <username>number@lgt.co.kr</username>
+ <password></password>
+ -->
+ </cdma>
+ </provider>
+ <provider>
+ <name>SKTelecom</name>
+ <gsm>
+ <network-id mcc="450" mnc="05"/>
+ <apn value="nate.sktelecom.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.sktelecom.com">
+ <usage type="mms"/>
+ <name>SKT MMS</name>
+ <mmsc>http://omms.nate.com:9082/oma_mms</mmsc>
+ <mmsproxy>smart.nate.com:9093</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <!-- cid: 1501 -->
+ <username>sktelecom</username>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Kuwait -->
+<country code="kw">
+ <provider>
+ <name>Zain</name>
+ <gsm>
+ <network-id mcc="419" mnc="02"/>
+ <apn value="pps">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Personal</name>
+ <username>pps</username>
+ <password>pps</password>
+ </apn>
+ <apn value="apn01">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Corporate</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Wataniya</name>
+ <gsm>
+ <network-id mcc="419" mnc="03"/>
+ <apn value="action.wataniya.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.wataniya.com">
+ <usage type="mms"/>
+ <name>MMS Action</name>
+ <mmsc>http://action.wataniya.com</mmsc>
+ <mmsproxy>194.126.53.64:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Viva</name>
+ <gsm>
+ <network-id mcc="419" mnc="04"/>
+ <apn value="viva">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="viva">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://172.16.128.80:38090/was</mmsc>
+ <mmsproxy>172.16.128.228:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Kazakhstan -->
+<country code="kz">
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="401" mnc="01"/>
+ <apn value="internet.beeline.kz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>@internet.beeline</username>
+ <dns>212.19.149.53</dns>
+ <dns>194.226.128.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>K&apos;CELL</name>
+ <gsm>
+ <network-id mcc="401" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>kcell mms</name>
+ <mmsc>http://192.168.75.10:6001/MM1Servlet</mmsc>
+ <mmsproxy>195.47.255.15:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- Owned by K'CELL -->
+ <name>Activ</name>
+ <gsm>
+ <network-id mcc="401" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="401" mnc="77"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Pathword</name>
+ <cdma>
+ <username>Pathword</username>
+ <password>Pathword</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Dalacom</name>
+ <cdma>
+ <username>Dalacom</username>
+ <password>Dalacom</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Laos -->
+<country code="la">
+ <provider>
+ <name>ETL</name>
+ <gsm>
+ <network-id mcc="457" mnc="02"/>
+ <apn value="etlnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>192.168.4.130</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Lao Telecom</name>
+ <gsm>
+ <network-id mcc="457" mnc="01"/>
+ <balance-check>
+ <ussd>*122#</ussd>
+ </balance-check>
+ <apn value="ltcnet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Unitel</name>
+ <gsm>
+ <network-id mcc="457" mnc="03"/>
+ <apn value="startelecom">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Unitel (2G)</name>
+ </apn>
+ <apn value="unitel3g">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Unitel (3G)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Beeline (Tigo)</name>
+ <gsm>
+ <network-id mcc="457" mnc="08"/>
+ <apn value="beelinenet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Lebanon -->
+<country code="lb">
+ <provider>
+ <name>MTC Touch</name>
+ <gsm>
+ <network-id mcc="415" mnc="03"/>
+ <apn value="gprs.mtctouch.com.lb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.mtctouch.com.lb">
+ <usage type="mms"/>
+ <name>mtctouch MMS</name>
+ <username>mtctouch</username>
+ <mmsc>http://mms:8088/mms/</mmsc>
+ <mmsproxy>192.168.4.103:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- St Lucia -->
+<country code="lc">
+ <provider>
+ <name>Cable &amp; Wireless</name>
+ <gsm>
+ <network-id mcc="358" mnc="110"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="multimedia">
+ <usage type="mms"/>
+ <name>MMS Postpaid</name>
+ <mmsc>http://mmsc</mmsc>
+ <mmsproxy>10.20.5.34:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Sri Lanka -->
+<country code="lk">
+ <provider>
+ <name>Airtel</name>
+ <gsm>
+ <network-id mcc="413" mnc="05"/>
+ <apn value="www.wap.airtel.lk">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Dialog GSM</name>
+ <gsm>
+ <network-id mcc="413" mnc="02"/>
+ <apn value="www.dialogsl.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid</name>
+ </apn>
+ <apn value="ppinternet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ </apn>
+ <apn value="dialogbb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Unlimited Broadband</name>
+ </apn>
+ <apn value="kitbb.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid (Kitbb)</name>
+ </apn>
+ <apn value="www.dialogsl.com">
+ <usage type="mms"/>
+ <name>Dialog - Go MMS</name>
+ <mmsc>http://192.168.122.130:3130/mmsc</mmsc>
+ <mmsproxy>192.168.122.2:8080</mmsproxy>
+ </apn>
+ <apn value="ppwap">
+ <usage type="mms"/>
+ <name>Go MMS for KIT</name>
+ <mmsc>http://mms.dialog.lk:3130/mmsc</mmsc>
+ <mmsproxy>192.168.122.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Hutch</name>
+ <gsm>
+ <network-id mcc="413" mnc="08"/>
+ <apn value="htwap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mobitel</name>
+ <gsm>
+ <network-id mcc="413" mnc="01"/>
+ <apn value="isp">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="413" mnc="03"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Lesotho -->
+<country code="ls">
+ <provider>
+ <name>Vodacom Lesotho</name>
+ <gsm>
+ <network-id mcc="651" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Lithuania -->
+<country code="lt">
+ <provider>
+ <name>Bite</name>
+ <gsm>
+ <network-id mcc="246" mnc="02"/>
+ <apn value="banga">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.226.131.131</dns>
+ <dns>193.219.88.36</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>BITE mms</name>
+ <username>mms@mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc/servlets/mms</mmsc>
+ <mmsproxy>192.168.150.2:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TELE2 GPRS</name>
+ <gsm>
+ <network-id mcc="246" mnc="03"/>
+ <apn value="internet.tele2.lt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.tele2.lt">
+ <usage type="mms"/>
+ <name>Tele2 MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mmsc.tele2.lt</mmsc>
+ <mmsproxy>193.12.40.29:8080</mmsproxy>
+ </apn>
+ <apn value="mms.tele2.lv">
+ <usage type="mms"/>
+ <name>Tele2 MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mmsc.tele2.lv</mmsc>
+ <mmsproxy>193.12.40.38:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Omnitel (contract)</name>
+ <gsm>
+ <network-id mcc="246" mnc="01"/>
+ <apn value="gprs.omnitel.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ <dns>194.176.32.129</dns>
+ <dns>195.22.175.1</dns>
+ </apn>
+ <apn value="gprs.startas.lt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>No contract</name>
+ <username>omni</username>
+ <password>omni</password>
+ <dns>194.176.32.129</dns>
+ <dns>195.22.175.1</dns>
+ </apn>
+ <apn value="gprs.mms.lt">
+ <usage type="mms"/>
+ <name>Omnitel MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.omnitel.net:8002/</mmsc>
+ <mmsproxy>194.176.32.149:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Luxembourg -->
+<country code="lu">
+ <provider>
+ <name>LUXGSM</name>
+ <gsm>
+ <network-id mcc="270" mnc="01"/>
+ <apn value="web.pt.lu">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>194.154.192.101</dns>
+ <dns>194.154.192.102</dns>
+ </apn>
+ <apn value="mms.pt.lu">
+ <usage type="mms"/>
+ <name>Luxgsm MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.pt.lu</mmsc>
+ <mmsproxy>194.154.192.88:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tango</name>
+ <gsm>
+ <network-id mcc="270" mnc="77"/>
+ <apn value="hspa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>hspa</name>
+ <username>tango</username>
+ <password>tango</password>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>internet</name>
+ <username>tango</username>
+ <password>tango</password>
+ <dns>212.66.70.3</dns>
+ <dns>212.66.75.7</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Tango MMS</name>
+ <username>tango</username>
+ <password>tango</password>
+ <mmsc>http://mms.tango.lu/</mmsc>
+ <mmsproxy>212.66.75.3:8080</mmsproxy>
+ </apn>
+ <apn value="mms.li">
+ <usage type="mms"/>
+ <name>Tango MMS</name>
+ <mmsc>mms.tele2.li</mmsc>
+ <mmsproxy>212.66.75.9:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="270" mnc="99"/>
+ <apn value="orange.lu">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>85.94.224.1</dns>
+ <dns>85.94.224.2</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>VOXmobile</name>
+ <gsm>
+ <network-id mcc="270" mnc="99"/>
+ <apn value="vox.lu">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="vox.lu">
+ <usage type="mms"/>
+ <name>VOX mms GPRS</name>
+ <mmsc>http://mms.vox.lu</mmsc>
+ <mmsproxy>proxy.vox.lu:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Latvia -->
+<country code="lv">
+ <provider>
+ <name>LMT</name>
+ <gsm>
+ <network-id mcc="247" mnc="01"/>
+ <apn value="internet.lmt.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.93.96.2</dns>
+ <dns>212.93.96.4</dns>
+ </apn>
+ <apn value="open.lmt.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>O!Karte internet</name>
+ </apn>
+ <apn value="okarte.lmt.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>O!Karte</name>
+ </apn>
+ <apn value="mms.lmt.lv">
+ <usage type="mms"/>
+ <name>LMT MMS</name>
+ <username>lmt</username>
+ <password>lmt</password>
+ <mmsc>http://mmsc.lmt.lv/mmsc</mmsc>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="247" mnc="02"/>
+ <apn value="internet.tele2.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Regular</name>
+ <username>gprs</username>
+ <password>internet</password>
+ </apn>
+ <apn value="mobileinternet.tele2.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="data.tele2.lv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Zelta Zivtina</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Bite</name>
+ <gsm>
+ <network-id mcc="247" mnc="05"/>
+ <apn value="wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Bite plus</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Prepaid/Contract</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Morocco -->
+<country code="ma">
+ <provider>
+ <name>Ittissalat Al Maghrib (IAM)</name>
+ <gsm>
+ <network-id mcc="604" mnc="01"/>
+ <apn value="www.iamgprs1.ma">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Abonnement</name>
+ </apn>
+ <apn value="www.iamgprs2.ma">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Pre-payé</name>
+ </apn>
+ <apn value="Mmsiam">
+ <usage type="mms"/>
+ <name>MMSIAM</name>
+ <mmsc>http://mms:8002/</mmsc>
+ <mmsproxy>10.16.35.50:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Medi Telecom</name>
+ <gsm>
+ <network-id mcc="604" mnc="00"/>
+ <apn value="internet1.meditel.ma">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Abonnement</name>
+ <username>MEDINET</username>
+ <password>MEDINET</password>
+ </apn>
+ <apn value="internet2.meditel.ma">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Pre-payé</name>
+ <username>MEDINET</username>
+ <password>MEDINET</password>
+ </apn>
+ <apn value="mms.meditel.ma">
+ <usage type="mms"/>
+ <name>GPRS MMS</name>
+ <username>MEDIMMS</username>
+ <password>MEDIMMS</password>
+ <mmsc>http://mms.meditel.ma:8088/mms</mmsc>
+ <mmsproxy>10.8.8.9:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>WANA</name>
+ <gsm>
+ <network-id mcc="604" mnc="02"/>
+ <apn value="www.wana.ma">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>INWI</name>
+ </apn>
+ <apn value="mms.wana.ma">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.wana.ma:38090</mmsc>
+ <mmsproxy>10.86.0.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Moldova -->
+<country code="md">
+ <provider>
+ <name>Moldcell</name>
+ <gsm>
+ <network-id mcc="259" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Moldcell MMS</name>
+ <mmsc>http://mms.moldcell.md/cmmsc/post</mmsc>
+ <mmsproxy>10.0.10.10:9401</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Unité</name>
+ <gsm>
+ <network-id mcc="259" mnc="05"/>
+ <apn value="internet.unite.md">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet cu abonament</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="internet3g.unite.md">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet fără abonament</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="259" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Montenegro -->
+<country code="me">
+ <provider>
+ <name>ProMonte GSM</name>
+ <gsm>
+ <network-id mcc="297" mnc="01"/>
+ <apn value="gprs.promonte.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.promonte.com">
+ <usage type="mms"/>
+ <name>ProMMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mm.vor.promonte.com</mmsc>
+ <mmsproxy>192.168.246.5:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="297" mnc="02"/>
+ <apn value="tmcg-data">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>38267</username>
+ <password>38267</password>
+ </apn>
+ <apn value="tmcg-nw">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>38267</username>
+ <password>38267</password>
+ </apn>
+ <apn value="internet-postpaid">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid (old)</name>
+ </apn>
+ <apn value="internet-prepaid">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid (old)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>m:tel</name>
+ <gsm>
+ <network-id mcc="297" mnc="03"/>
+ <apn value="gprsinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mtelmms">
+ <usage type="mms"/>
+ <name>mtelmms</name>
+ <username>mms</username>
+ <password>068</password>
+ <mmsc>http://mmsmtel.com/mms/wapenc</mmsc>
+ <mmsproxy>172.17.85.131:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Madagascar -->
+<country code="mg">
+ <provider>
+ <name>Airtel</name>
+ <gsm>
+ <network-id mcc="646" mnc="01"/>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="646" mnc="02"/>
+ <apn value="orangeworld">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>world</username>
+ <password>orange</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telma</name>
+ <gsm>
+ <network-id mcc="646" mnc="04"/>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Mali -->
+<country code="ml">
+ <provider>
+ <name>Malitel</name>
+ <gsm>
+ <network-id mcc="610" mnc="01"/>
+ <apn value="web.malitel3.ml">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>3G+</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ <cdma>
+ <name>Internet Mobile+</name>
+ <username>card</username>
+ <password>card</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="610" mnc="02"/>
+ <apn value="iew">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet Every Where</name>
+ <username>iew</username>
+ <password>iew</password>
+ </apn>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Myanmar -->
+<country code="mm">
+ <provider>
+ <name>MPT</name>
+ <gsm>
+ <network-id mcc="414" mnc="01"/>
+ <apn value="mptnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>MPTNET</name>
+ <username>mptnet</username>
+ <password>mptnet</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Mongolia -->
+<country code="mn">
+ <provider>
+ <name>MobiCom</name>
+ <gsm>
+ <network-id mcc="428" mnc="99"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MMS MobiCom</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>10.10.10.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Macau -->
+<country code="mo">
+ <provider>
+ <name>3 / Hutchison</name>
+ <gsm>
+ <network-id mcc="455" mnc="03"/>
+ <network-id mcc="455" mnc="05"/>
+ <apn value="web.hutchisonmacau.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>hutchison</username>
+ <password>1234</password>
+ </apn>
+ <apn value="mms.hutchisonmacau.com">
+ <usage type="mms"/>
+ <name>HutchisonMMS</name>
+ <username>hutchison</username>
+ <password>1234</password>
+ <mmsc>http://10.30.15.51:10021/mmsc</mmsc>
+ <mmsproxy>10.30.15.53:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CTM</name>
+ <gsm>
+ <network-id mcc="455" mnc="01"/>
+ <network-id mcc="455" mnc="04"/>
+ <apn value="ctm-mobile">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="ctmmms">
+ <usage type="mms"/>
+ <name>CTMMMS</name>
+ <mmsc>http://mms.wap.ctm.net:8002</mmsc>
+ <mmsproxy>192.168.99.3:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>China Telecom</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Macedonia -->
+<country code="mk">
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="294" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>One</name>
+ <gsm>
+ <network-id mcc="294" mnc="02"/>
+ <apn value="datacard">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Cosmofon MMS</name>
+ <mmsc>http://195.167.65.220:8002</mmsc>
+ <mmsproxy>10.10.10.20:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="294" mnc="03"/>
+ <apn value="vipoperator">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vipoperator</username>
+ <password>vipoperator</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Malta -->
+<country code="mt">
+ <provider>
+ <name>GO Mobile</name>
+ <gsm>
+ <network-id mcc="278" mnc="21"/>
+ <apn value="gosurfing">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid</name>
+ </apn>
+ <apn value="rtgsurfing">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ </apn>
+ <apn value="gomms">
+ <usage type="mms"/>
+ <name>go mms</name>
+ <mmsc>http://mmsc</mmsc>
+ <mmsproxy>10.20.20.129:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="278" mnc="01"/>
+ <apn value="Internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ <dns>80.85.96.131</dns>
+ <dns>80.85.97.70</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Mauritius -->
+<country code="mu">
+ <provider>
+ <name>Emtel</name>
+ <gsm>
+ <network-id mcc="617" mnc="10"/>
+ <apn value="WEB">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Maldives -->
+<country code="mv">
+ <provider>
+ <name>Dhiraagu</name>
+ <gsm>
+ <network-id mcc="472" mnc="01"/>
+ <apn value="internet.dhimobile">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.dhimobile">
+ <usage type="mms"/>
+ <name>DhiMMS</name>
+ <mmsc>http://mmsc.dhimobile.com.mv</mmsc>
+ <mmsproxy>172.24.97.4:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Wataniya</name>
+ <gsm>
+ <network-id mcc="472" mnc="02"/>
+ <apn value="WataniyaNet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Malawi -->
+<country code="mw">
+ <provider>
+ <name>TNM</name>
+ <gsm>
+ <network-id mcc="650" mnc="01"/>
+ <apn value="Internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Mexico -->
+<country code="mx">
+ <provider>
+ <name>Telcel</name>
+ <gsm>
+ <network-id mcc="334" mnc="02"/>
+
+ <voicemail>*86</voicemail>
+ <balance-check>
+ <dtmf>*333</dtmf>
+ </balance-check>
+
+ <apn value="internet.itelcel.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>webgprs</username>
+ <password>webgprs2002</password>
+ </apn>
+ <apn value="mms.itelcel.com">
+ <usage type="mms"/>
+ <name>Mensajes Multimedia</name>
+ <username>mmsgprs</username>
+ <password>mmsgprs2003</password>
+ <mmsc>http://mms.itelcel.com/servlets/mms</mmsc>
+ <mmsproxy>148.233.151.240:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="334" mnc="03"/>
+
+ <voicemail>*86</voicemail>
+ <balance-check>
+ <dtmf>*133#</dtmf>
+ </balance-check>
+
+ <apn value="internet.movistar.mx">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Iusacell</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Malaysia -->
+<country code="my">
+ <provider>
+ <name>DiGi</name>
+ <gsm>
+ <network-id mcc="502" mnc="16"/>
+ <apn value="diginet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ <dns>203.92.128.131</dns>
+ <dns>203.92.128.132</dns>
+ </apn>
+ <apn value="3gdgnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ </apn>
+ <apn value="digimms">
+ <usage type="mms"/>
+ <name>DiGi MMS</name>
+ <mmsc>http://mms.digi.com.my/servlets/mms</mmsc>
+ <mmsproxy>203.92.128.160:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Maxis</name>
+ <gsm>
+ <network-id mcc="502" mnc="12"/>
+ <network-id mcc="502" mnc="17"/>
+ <apn value="maxisbb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ <username>maxis</username>
+ <password>wap</password>
+ </apn>
+ <apn value="net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>maxis</username>
+ <password>net</password>
+ </apn>
+ <apn value="unet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G (handsets)</name>
+ <username>maxis</username>
+ <password>wap</password>
+ <dns>10.213.17.1</dns>
+ <dns>10.213.17.2</dns>
+ </apn>
+ <apn value="unet">
+ <usage type="mms"/>
+ <name>Maxis 3G MMS</name>
+ <username>maxis</username>
+ <password>wap</password>
+ <mmsc>http://172.16.74.100:10021/mmsc</mmsc>
+ <mmsproxy>202.75.133.49:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Celcom</name>
+ <gsm>
+ <network-id mcc="502" mnc="13"/>
+ <network-id mcc="502" mnc="19"/>
+ <!-- http://www.channelx.com.my/mdp/gprs/internet_config.jsp?model_name=motorola_e398 -->
+ <apn value="celcom.net.my">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ </apn>
+ <!-- http://www.channelx.com.my/mdp/3g/wap_config_3g.jsp?model_name=huwei_u600_3g -->
+ <apn value="celcom3g">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Celcom 3G</name>
+ </apn>
+ <apn value="celcom3g">
+ <usage type="mms"/>
+ <name>Celcom 3G MMS</name>
+ <mmsc>http://mms.celcom.net.my</mmsc>
+ <mmsproxy>10.128.1.242:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Mozambique -->
+<country code="mz">
+ <provider>
+ <name>MCel</name>
+ <gsm>
+ <network-id mcc="643" mnc="01"/>
+ <apn value="isp.mcel.mz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>guest</username>
+ <password>guest</password>
+ <dns>212.96.24.2</dns>
+ <dns>212.96.24.1</dns>
+ </apn>
+ <apn value="mms.mcel.mz">
+ <usage type="mms"/>
+ <name>mCel MMS</name>
+ <mmsc>http://mcelmms</mmsc>
+ <mmsproxy>10.1.4.35:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodacom</name>
+ <gsm>
+ <network-id mcc="643" mnc="04"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract / Prepaid</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Namibia -->
+<country code="na">
+ <provider>
+ <name>MTC</name>
+ <gsm>
+ <network-id mcc="649" mnc="01"/>
+ <apn value="ppsinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Tango</name>
+ <username>ppsuser</username>
+ <password>ppsuser</password>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telecom</name>
+ <cdma>
+ <name>switch</name>
+ <password>telecom</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Leo</name>
+ <gsm>
+ <network-id mcc="649" mnc="03"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Leo</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Cell One MMS</name>
+ <username>cellone</username>
+ <password>cellone</password>
+ <mmsc>mms.cellone.com.na</mmsc>
+ <mmsproxy>41.223.80.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Nigeria -->
+<country code="ng">
+ <provider>
+ <name>Airtel NG</name>
+ <!-- http://www.airtel.com/wps/wcm/connect/africaairtel/nigeria/3g/home/3gpower/PG_Internet_Settings -->
+ <gsm>
+ <network-id mcc="621" mnc="20"/>
+ <network-id mcc="621" mnc="80"/>
+ <balance-check>
+ <ussd>*123#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*126*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet.ng.airtel.com.ng">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="621" mnc="30"/>
+ <network-id mcc="621" mnc="60"/>
+ <balance-check>
+ <ussd>*556#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*555*CODE#</ussd>
+ </balance-top-up>
+ <apn value="web.gprs.mtnnigeria.net">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Glo Mobile</name>
+ <gsm>
+ <network-id mcc="621" mnc="50"/>
+ <network-id mcc="621" mnc="70"/>
+ <balance-check>
+ <ussd>#124#</ussd>
+ <ussd-response>4</ussd-response>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="glosecure">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Pay as You Go</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="gloflat">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Glo 3G Packs</name>
+ <username>flat</username>
+ <password>flat</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Etisalat</name>
+ <gsm>
+ <network-id mcc="621" mnc="90"/>
+ <balance-check>
+ <ussd>*232#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*222*CODE#</ussd>
+ </balance-top-up>
+ <apn value="etisalat">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Etisalat Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Starcomms</name>
+ <cdma>
+ <username>your_phone_number@starcomms.com</username>
+ <password>your_phone_number</password>
+ <sid value="2"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Multilinks</name>
+ <cdma>
+ <!-- cid: "109" --><!--
+ username must be (yournumber)@multilinks.com and
+ password must be your last 4 number
+ <username>number@multilinks.com</username>
+ <password></password>
+ -->
+ </cdma>
+ </provider>
+</country>
+
+<!-- Nicaragua -->
+<country code="ni">
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="710" mnc="21"/>
+ <network-id mcc="710" mnc="73"/>
+ <apn value="wap.emovil">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>wapemovil</username>
+ <password>wapemovil</password>
+ </apn>
+ <apn value="web.emovil">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web</name>
+ <username>webemovil</username>
+ <password>webemovil</password>
+ </apn>
+ <apn value="internet.ideasalo.ni">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web (Alo pcs)</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="wap.ideasalo.ni">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP (Alo pcs)</name>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="710" mnc="30"/>
+ <apn value="internet.movistar.ni">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Netherlands -->
+<country code="nl">
+ <provider>
+ <name>Hi</name>
+ <gsm>
+ <network-id mcc="204" mnc="08"/>
+ <apn value="portalmmm.nl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="portalmmm.nl">
+ <usage type="mms"/>
+ <name>KPN MMS</name>
+ <mmsc>http://mp.mobiel.kpn/mmsc</mmsc>
+ <mmsproxy>10.10.100.20:5080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Lebara</name>
+ <gsm>
+ <network-id mcc="204" mnc="12"/>
+ <apn value="multimedia.lebara.nl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="internet">
+ <usage type="mms"/>
+ <name>Telfort MMS</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>193.113.200.195:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Lycamobile</name>
+ <gsm>
+ <network-id mcc="204" mnc="09"/>
+ <apn value="data.lycamobile.nl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>lmnl</username>
+ <password>plus</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>KPN NL</name>
+ <gsm>
+ <network-id mcc="204" mnc="08"/>
+ <apn value="prepaidinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="fastinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>KPN</username>
+ <password>gprs</password>
+ <dns>62.133.126.28</dns>
+ <dns>62.133.126.29</dns>
+ </apn>
+ <apn value="noapn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>62.133.126.28</dns>
+ <dns>62.133.126.29</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MEDIONmobile</name>
+ <gsm>
+ <network-id mcc="204" mnc="08"/>
+ <network-id mcc="204" mnc="10"/>
+ <apn value="portalmmm.nl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Aldi Talk Mobiel Prepaid Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telfort</name>
+ <gsm>
+ <network-id mcc="204" mnc="12"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>telfortnl</username>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="204" mnc="16"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>193.78.240.12</dns>
+ <dns>193.79.242.39</dns>
+ </apn>
+ <apn value="mms.ben">
+ <usage type="mms"/>
+ <name>Ben MMS</name>
+ <mmsc>http://benmms</mmsc>
+ <mmsproxy>10.10.10.11:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ben</name>
+ <gsm>
+ <network-id mcc="204" mnc="16"/>
+ <apn value="internet.ben">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>193.78.240.12</dns>
+ <dns>193.79.242.39</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="204" mnc="20"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>orange</username>
+ <password>orange</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="204" mnc="02"/>
+ <apn value="data.tele2.nl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>XS4ALL Mobiel Internet</name>
+ <gsm>
+ <apn value="umts.xs4all.nl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>xs4all</username>
+ <password>xs4all</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="204" mnc="04"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <apn value="live.vodafone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Non-business</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>62.140.138.237</dns>
+ <dns>62.140.140.250</dns>
+ </apn>
+ <apn value="office.vodafone.nl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="m2m.global.vodafone.nl">
+ <usage type="internet"/>
+ <name>M2M</name>
+ <username>web</username>
+ <password>web</password>
+ <authentication method="pap"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on KPN's network -->
+ <name>Galaxy</name>
+ <gsm>
+ <network-id mcc="204" mnc="08"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Norway -->
+<country code="no">
+ <provider>
+ <name>Netcom</name>
+ <gsm>
+ <network-id mcc="242" mnc="02"/>
+
+ <balance-check>
+ <ussd>*150#</ussd>
+ </balance-check>
+
+ <apn value="internet.netcom.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>netcom</username>
+ <password>netcom</password>
+ <dns>212.169.123.67</dns>
+ <dns>212.45.188.254</dns>
+ </apn>
+ <apn value="mms.netcom.no">
+ <usage type="mms"/>
+ <name>NetCom mms</name>
+ <username>mms</username>
+ <password>netcom</password>
+ <mmsc>http://mms/</mmsc>
+ <mmsproxy>212.169.66.4:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- MVNO operating on NetCom's network -->
+ <name>Chess</name>
+ <gsm>
+ <network-id mcc="242" mnc="02"/>
+ <apn value="netcom">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>chess</username>
+ <password>chess</password>
+ </apn>
+ <apn value="mms.netcom.no">
+ <usage type="mms"/>
+ <name>Chess MMS</name>
+ <username>chess</username>
+ <password>chess</password>
+ <mmsc>http://mms/</mmsc>
+ <mmsproxy>212.169.66.4:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <!-- http://www.ice.no/Mobilt-bredb%C3%A5nd-1046.aspx -->
+ <provider>
+ <name>ice.net (Nordisk Mobiltelefon)</name>
+ <cdma>
+ <username>cdma</username>
+ <password>cdma</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="242" mnc="01"/>
+
+ <voicemail>91500002</voicemail>
+ <balance-check>
+ <sms text="saldo">2525</sms>
+ </balance-check>
+
+ <apn value="telenor">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.17.131.3</dns>
+ <dns>148.122.161.2</dns>
+ </apn>
+ <apn value="mms.ventelo.no">
+ <usage type="mms"/>
+ <name>Ventelo MMS</name>
+ <username>ventelo</username>
+ <password>1111</password>
+ <mmsc>http://mmsc/</mmsc>
+ <mmsproxy>10.10.10.11:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TDC</name>
+ <gsm>
+ <network-id mcc="242" mnc="08"/>
+ <apn value="internet.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>80.232.41.10</dns>
+ <dns>80.232.41.20</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Network Norway</name>
+ <gsm>
+ <network-id mcc="242" mnc="05"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>NWN MMS</name>
+ <mmsc>http://mms.nwn.no</mmsc>
+ <mmsproxy>89.254.65.20:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>OneCall</name>
+ <gsm>
+ <network-id mcc="242" mnc="05"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MyCall</name>
+ <gsm>
+ <network-id mcc="242" mnc="05"/>
+ <apn value="internet">
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Altibox</name>
+ <gsm>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telipol</name>
+ <gsm>
+ <network-id mcc="242" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ventelo</name>
+ <gsm>
+ <network-id mcc="242" mnc="07"/>
+ <apn value="internet.ventelo.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ludo Mobil</name>
+ <gsm>
+ <network-id mcc="242" mnc="07"/>
+ <apn value="internet.ventelo.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="242" mnc="02"/>
+ <network-id mcc="242" mnc="04"/>
+
+ <voicemail>47230000</voicemail>
+ <balance-check>
+ <ussd>*111#</ussd>
+ <dtmf>47300000</dtmf>
+ </balance-check>
+
+ <apn value="internet.tele2.no">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>Mobilt internet</name>
+ </apn>
+ <!-- http://www.tele2.no/mobilt-bredbaand.html -->
+ <apn value="mobileinternet.tele2.no">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt bredbånd</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Nepal -->
+<country code="np">
+ <provider>
+ <name>Nepal Telecom</name>
+ <gsm>
+ <network-id mcc="429" mnc="01"/>
+ <apn value="ntnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mero Mobile</name>
+ <gsm>
+ <network-id mcc="429" mnc="02"/>
+ <apn value="mero">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- New Zealand -->
+<country code="nz">
+ <provider>
+ <name>Telecom New Zealand</name>
+ <gsm>
+ <network-id mcc="530" mnc="00"/>
+ <network-id mcc="530" mnc="05"/>
+ <apn value="wap.telecom.co.nz">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>XT mobile (WAP)</name>
+ </apn>
+ <apn value="internet.telecom.co.nz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>XT mobile (Internet with Firewall)</name>
+ <dns>202.27.156.72</dns>
+ <dns>202.27.158.40</dns>
+ </apn>
+ <apn value="direct.telecom.co.nz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>XT mobile (Direct Internet)</name>
+ <dns>202.27.156.72</dns>
+ <dns>202.27.158.40</dns>
+ </apn>
+ <apn value="oa.telecom.co.nz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>XT mobile (One Office/Remote Office)</name>
+ </apn>
+ <apn value="wap.telecom.co.nz">
+ <usage type="mms"/>
+ <name>TelecomMMS</name>
+ <mmsc>http://lsmmsc.xtra.co.nz</mmsc>
+ <mmsproxy>210.55.11.73:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="530" mnc="01"/>
+ <apn value="live.vodafone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WAP</name>
+ <dns>202.73.206.16</dns>
+ <dns>202.73.198.16</dns>
+ </apn>
+ <apn value="www.vodafone.net.nz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract / Prepaid (Restricted)</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Unrestricted (public)</name>
+ <dns>202.73.206.16</dns>
+ <dns>202.73.198.16</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>2-Degrees</name>
+ <gsm>
+ <network-id mcc="530" mnc="24"/>
+ <apn value="mms">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>MMS</name>
+ </apn>
+ <apn value="internet">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ <dns>118.148.1.10</dns>
+ <dns>118.148.1.20</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>mms</name>
+ <mmsc>http://mms.2degrees.net.nz:48090</mmsc>
+ <mmsproxy>118.148.1.118:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TelstraClear</name>
+ <gsm>
+ <apn value="www.telstraclear.net.nz">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orcon</name>
+ <gsm>
+ <apn value="www.orcon.net.nz">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Oman -->
+<country code="om">
+ <provider>
+ <name>Oman Mobile</name>
+ <gsm>
+ <network-id mcc="422" mnc="02"/>
+ <apn value="taif">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>taif</username>
+ <password>taif</password>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet (old)</name>
+ </apn>
+ <apn value="MMS">
+ <usage type="mms"/>
+ <name>Oman Mobile MMS</name>
+ <username>MMS</username>
+ <password>MMS</password>
+ <mmsproxy>192.168.203.35:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Nawras</name>
+ <gsm>
+ <network-id mcc="422" mnc="03"/>
+ <apn value="isp.nawras.com.om">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.nawras.com.om">
+ <usage type="mms"/>
+ <name>Nawras MMS</name>
+ <username>test</username>
+ <password>test</password>
+ <mmsc>http://10.128.240.16/servlets/mms</mmsc>
+ <mmsproxy>10.128.240.19:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Panama -->
+<country code="pa">
+ <provider>
+ <name>Cable and Wireless</name>
+ <gsm>
+ <network-id mcc="714" mnc="01"/>
+ <apn value="apn01.cwpanama.com.pa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="apn02.cwpanama.com.pa">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.zonamovil.com.pa</mmsc>
+ <mmsproxy>172.25.3.5:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="714" mnc="02"/>
+ <apn value="internet.movistar.pa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistarpa</username>
+ <password>movistarpa</password>
+ <dns>200.39.10.1</dns>
+ <dns>200.36.160.237</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Peru -->
+<country code="pe">
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="716" mnc="10"/>
+ <apn value="tim.pe">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>tim</username>
+ <password>tulibertad</password>
+ </apn>
+ <apn value="ba.amx">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet Móvil Prepago</name>
+ <username>amx</username>
+ <password>amx</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="716" mnc="06"/>
+ <apn value="movistar.pe">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistar@datos</username>
+ <password>movistar</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Nextel</name>
+ <gsm>
+ <network-id mcc="716" mnc="07"/>
+ <apn value="datacard.nextel.com.pe">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Vini MMS</name>
+ <mmsc>http://mms.vini.pf/mmsc</mmsc>
+ <mmsproxy>172.20.10.16:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- French Polynesia -->
+<country code="pf">
+ <provider>
+ <name>Vini</name>
+ <gsm>
+ <network-id mcc="547" mnc="20"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Papua New Guinea -->
+<country code="pg">
+ <provider>
+ <name>Digicel</name>
+ <gsm>
+ <network-id mcc="537" mnc="03"/>
+ <apn value="internet.digicelpng.com">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <dns>10.149.64.77</dns>
+ <dns>8.8.8.8</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Philippines -->
+<country code="ph">
+ <provider>
+ <name>Globe Telecom</name>
+ <gsm>
+ <network-id mcc="515" mnc="02"/>
+ <apn value="internet.globe.com.ph">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid</name>
+ <username>globe</username>
+ <password>globe</password>
+ <dns>203.127.225.10</dns>
+ <dns>203.127.225.11</dns>
+ </apn>
+ <apn value="http.globe.com.ph">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ <username>globe</username>
+ <password>globe</password>
+ <dns>203.127.225.10</dns>
+ <dns>203.127.225.11</dns>
+ </apn>
+ <apn value="www.globe.com.ph">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WAP</name>
+ <username>globe</username>
+ <password>globe</password>
+ <dns>203.127.225.10</dns>
+ <dns>203.127.225.11</dns>
+ </apn>
+ <apn value="mms.globe.com.ph">
+ <usage type="mms"/>
+ <name>myGlobe MMS</name>
+ <mmsc>http://192.40.100.22:10021/mmsc</mmsc>
+ <mmsproxy>192.40.100.20:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Smart</name>
+ <gsm>
+ <network-id mcc="515" mnc="03"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>witsductoor</username>
+ <password>banonoy</password>
+ <dns>202.57.96.3</dns>
+ <dns>202.57.96.4</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>SmartMMS</name>
+ <mmsc>http://10.102.61.238:8002</mmsc>
+ <mmsproxy>10.102.61.46:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Digitel (Sun Cellular)</name>
+ <gsm>
+ <network-id mcc="515" mnc="05"/>
+ <apn value="minternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Sun MMS</name>
+ <mmsc>http://mmscenter.suncellular.com.ph</mmsc>
+ <mmsproxy>202.138.159.78:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Pakistan -->
+<country code="pk">
+ <provider>
+ <name>Djuice</name>
+ <gsm>
+ <network-id mcc="515" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>telenor</username>
+ <password>telenor</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mobilink</name>
+ <gsm>
+ <network-id mcc="515" mnc="01"/>
+ <apn value="connect.mobilinkworld.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="jazzconnect.mobilinkworld.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Jazz</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="515" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>telenor</username>
+ <password>telenor</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ufone</name>
+ <gsm>
+ <network-id mcc="410" mnc="03"/>
+ <apn value="ufone.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>ufone</username>
+ <password>ufone</password>
+ </apn>
+ <apn value="ufone.mms">
+ <usage type="mms"/>
+ <name>Ufone MMS</name>
+ <username>ufone</username>
+ <password>ufone</password>
+ <mmsc>http://www.ufonemms.com:80</mmsc>
+ <mmsproxy>172.16.13.27:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Warid</name>
+ <gsm>
+ <network-id mcc="515" mnc="07"/>
+ <apn value="warid">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="zongmms">
+ <usage type="mms"/>
+ <name>ZONG MMS</name>
+ <mmsc>http://10.81.6.11:8080</mmsc>
+ <mmsproxy>10.81.6.33:8000</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ZONG</name>
+ <gsm>
+ <network-id mcc="515" mnc="04"/>
+ <apn value="zonginternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ptcl EVO</name>
+ <cdma>
+ <username>vwireless@ptcl.com</username>
+ <password>ptcl</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>WorldCall Wireless</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Poland -->
+<country code="pl">
+ <!-- Polish physical operators -->
+ <provider primary="true">
+ <name>T-mobile</name><!-- rebranded from Era in 2011 -->
+ <gsm>
+ <network-id mcc="260" mnc="02"/>
+ <voicemail>602950</voicemail>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*111*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <dns>213.158.194.1</dns>
+ <dns>213.158.193.38</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>T-Mobile.pl MMS</name>
+ <mmsc>http://mms/servlets/mms</mmsc>
+ <mmsproxy>213.158.194.226:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>Play Online</name>
+ <gsm>
+ <network-id mcc="260" mnc="06"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ <ussd>*155#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*100*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://10.10.28.164/mms/wapenc</mmsc>
+ <mmsproxy>10.10.25.5:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="260" mnc="03"/>
+ <voicemail>*501</voicemail>
+ <balance-check>
+ <ussd>*124*#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*125*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Standard access - with image compression</name>
+ <name xml:lang="pl">Dostęp standardowy - z kompresją grafiki</name>
+ <username>internet</username>
+ <password>internet</password>
+ <dns>194.9.223.79</dns>
+ <dns>194.204.159.1</dns>
+ </apn>
+ <apn value="vpn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>VPN mode access without compression (requires activation)</name>
+ <name xml:lang="pl">Dostęp VPN bez kompresji (wymaga aktywacji)</name>
+ <username>internet</username>
+ <password>internet</password>
+ <dns>194.9.223.79</dns>
+ <dns>194.204.159.1</dns>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>cdma@orange</username>
+ <password>orange</password>
+ </cdma>
+ </provider>
+ <provider primary="true">
+ <name>Plus</name>
+ <gsm>
+ <network-id mcc="260" mnc="01"/>
+ <voicemail>2222</voicemail>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*123*CODE#</ussd>
+ </balance-top-up>
+ <apn value="www.plusgsm.pl">
+ <plan type="postpaid"/>
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Standard access</name>
+ <name xml:lang="pl">Dostęp standardowy</name>
+ <username>plusgsm</username>
+ <password>plusgsm</password>
+ <dns>212.2.96.51</dns>
+ <dns>212.2.96.52</dns>
+ </apn>
+ <apn value="pro.plusgsm.pl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>External dynamic IP address (requires activation)</name>
+ <name xml:lang="pl">Zewnętrzny dynamiczny adres IP (wymaga aktywacji)</name>
+ <username>plusgsm</username>
+ <password>plusgsm</password>
+ <dns>212.2.96.51</dns>
+ <dns>212.2.96.52</dns>
+ </apn>
+ <apn value="m2m.plusgsm.pl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>External static IP address (requires activation)</name>
+ <name xml:lang="pl">Zewnętrzny statyczny adres IP (wymaga aktywacji)</name>
+ <username>plusgsm</username>
+ <password>plusgsm</password>
+ <dns>212.2.96.51</dns>
+ <dns>212.2.96.52</dns>
+ </apn>
+ <apn value="optimizer">
+ <plan type="postpaid"/>
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>iPlus optimizer with data compression</name>
+ <name xml:lang="pl">iPlus optimizer z kompresjÄ… danych</name>
+ <dns>212.2.96.51</dns>
+ <dns>212.2.96.52</dns>
+ </apn>
+ <apn value="mms.plusgsm.pl">
+ <usage type="mms"/>
+ <name>MMS GPRS</name>
+ <mmsc>http://mms.plusgsm.pl:8002</mmsc>
+ <mmsproxy>212.2.96.16:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>Cyfrowy Polsat</name>
+ <gsm>
+ <network-id mcc="260" mnc="12"/>
+ <apn value="multi.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="true">
+ <name>aero2</name>
+ <gsm>
+ <network-id mcc="260" mnc="17"/>
+ <apn value="darmowy">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <!-- Polish MVNO operators -->
+ <provider primary="false">
+ <name>Multimo</name>
+ <gsm>
+ <network-id mcc="260" mnc="03"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Default APN</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="mni.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>APN: mni.internet</name>
+ <username>mni.internet</username>
+ </apn>
+ <apn value="telogic.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>APN: telogic.internet</name>
+ <username>telogic.internet</username>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>cdma@orange</username>
+ <password>orange</password>
+ </cdma>
+ </provider>
+ <provider primary="false">
+ <name>FreeM</name>
+ <gsm>
+ <network-id mcc="260" mnc="01"/>
+ <apn value="freedata.pl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Heyah</name>
+ <gsm>
+ <network-id mcc="260" mnc="02"/>
+ <balance-check>
+ <ussd>*108#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*109*CODE#</ussd>
+ </balance-top-up>
+ <apn value="heyah.pl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>heyah</username>
+ <password>heyah</password>
+ <dns>213.158.194.1</dns>
+ <dns>213.158.193.38</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>GaduAIR</name>
+ <gsm>
+ <network-id mcc="260" mnc="01"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <apn value="internet.gadu-gadu.pl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Aster</name>
+ <gsm>
+ <network-id mcc="260" mnc="03"/>
+ <apn value="aster.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Netia</name>
+ <gsm>
+ <network-id mcc="260" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Vectra</name>
+ <gsm>
+ <network-id mcc="260" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>mBank mobile</name>
+ <gsm>
+ <network-id mcc="260" mnc="01"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="www.mobile.pl">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>INEA</name>
+ <gsm>
+ <network-id mcc="260" mnc="03"/>
+ <apn value="telogic.internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Mobilking</name>
+ <gsm>
+ <network-id mcc="260" mnc="02"/>
+ <apn value="wapMOBILKING">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>mobilking</username>
+ <password>mobilking</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>SamiSwoi</name>
+ <gsm>
+ <network-id mcc="260" mnc="01"/>
+ <apn value="www.plusgsm.pl">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider primary="false">
+ <name>Sferia</name>
+ <cdma>
+ <username>sferia</username>
+ <password>sferia</password>
+ </cdma>
+ </provider>
+ <provider primary="false">
+ <name>Nordisk Polska</name>
+ <cdma>
+ <username>CDMA</username>
+ <password>CDMA</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Portugal -->
+<country code="pt">
+ <provider>
+ <name>Kanguru</name>
+ <gsm>
+ <network-id mcc="268" mnc="03"/>
+ <apn value="kanguru-portatil">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Portable</name>
+ <name xml:lang="pt">Portátil</name>
+ <dns>62.169.67.172</dns>
+ <dns>62.169.67.171</dns>
+ </apn>
+ <apn value="kanguru-tempo">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Tempo (Prepaid)</name>
+ <dns>62.169.67.172</dns>
+ <dns>62.169.67.171</dns>
+ </apn>
+ <apn value="kangurufixo">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Fixo</name>
+ <dns>62.169.67.172</dns>
+ <dns>62.169.67.171</dns>
+ </apn>
+ <apn value="noapn">
+ <name>Apn dinâmico (no apn)</name>
+ <dns>62.169.67.172</dns>
+ <dns>62.169.67.171</dns>
+ </apn>
+ <apn value="umts">
+ <usage type="mms"/>
+ <name>Optimus MMS</name>
+ <mmsc>http://mmsc:10021/mmsc</mmsc>
+ <mmsproxy>62.169.66.5:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- Merged with Optimus in 2010 -->
+ <name>Clix</name>
+ <gsm>
+ <network-id mcc="268" mnc="03"/>
+ <apn value="clixinternetmovel">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Optimus</name>
+ <gsm>
+ <network-id mcc="268" mnc="03"/>
+ <apn value="umts">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G</name>
+ </apn>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <dns>194.79.69.129</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TMN</name>
+ <gsm>
+ <network-id mcc="268" mnc="06"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Tmn Internet</name>
+ <username>tmn</username>
+ <password>tmn</password>
+ <dns>88.214.178.1</dns>
+ <dns>88.214.182.2</dns>
+ </apn>
+ <apn value="mmsc.tmn.pt">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Tmn Mms</name>
+ <username>tmn</username>
+ <password>tmnnet</password>
+ <dns>194.65.3.20</dns>
+ <dns>194.65.3.21</dns>
+ </apn>
+ <apn value="mmsc.tmn.pt">
+ <usage type="mms"/>
+ <name>MMSgprs</name>
+ <username>tmn</username>
+ <password>tmnnet</password>
+ <mmsc>http://mmsc/</mmsc>
+ <mmsproxy>10.111.2.16:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="268" mnc="01"/>
+ <apn value="internet.vodafone.pt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ <dns>212.18.160.133</dns>
+ <dns>212.18.160.134</dns>
+ </apn>
+ <apn value="net2.vodafone.pt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Vodafone Internet</name>
+ </apn>
+ <apn value="vas.vodafone.pt">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Vodafone MMS</name>
+ <username>vas</username>
+ <password>vas</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ZON</name>
+ <gsm>
+ <network-id mcc="268" mnc="01"/>
+ <apn value="internet.zon.pt">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Dados Móveis</name>
+ </apn>
+ <apn value="vas.zon.pt">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>vas</username>
+ <password>vas</password>
+ </apn>
+ <apn value="vas.zon.pt">
+ <usage type="mms"/>
+ <name>ZON MMS</name>
+ <username>vas</username>
+ <password>vas</password>
+ <mmsc>http://mms/servlets/mms</mmsc>
+ <mmsproxy>213.30.27.63:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Paraguay -->
+<country code="py">
+ <provider>
+ <name>VOX</name>
+ <gsm>
+ <network-id mcc="744" mnc="01"/>
+ <apn value="vox.wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/></apn>
+ <apn value="vox.mms">
+ <usage type="mms"/>
+ <name>e-magen</name>
+ <mmsc>http:/mms.vox.com.py/mmsc</mmsc>
+ <mmsproxy>172.24.97.29:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Personal</name>
+ <gsm>
+ <network-id mcc="744" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/></apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="744" mnc="04"/>
+ <apn value="internet.tigo.py">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="broadband.tigo.py">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Broadband</name>
+ <name xml:lang="es">Banda Ancha Móvil</name>
+ <username>tigo</username>
+ <password>tigo</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="744" mnc="02"/>
+ <apn value="gprs.claro.com.py">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Qatar -->
+<country code="qa">
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="427" mnc="02"/>
+ <msisdn-query>
+ <ussd>*#100#</ussd>
+ </msisdn-query>
+ <apn value="web.vodafone.com.qa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web</name>
+ </apn>
+ <apn value="vodafone.com.qa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web (old)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Q-Tel</name>
+ <gsm>
+ <network-id mcc="427" mnc="01"/>
+ <apn value="gprs.qtel">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Qatarnet</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="mms.qtel">
+ <usage type="mms"/>
+ <name>Qtel MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsr.qtelmms.qa</mmsc>
+ <mmsproxy>10.23.8.3:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Réunion (France) -->
+<country code="re">
+ <provider>
+ <name>SFR Réunion</name>
+ <gsm>
+ <network-id mcc="647" mnc="10"/>
+ <msisdn-query>
+ <sms text="ABCd84367">+33621012555</sms>
+ </msisdn-query>
+ <apn value="websfr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract / Prepaid</name>
+ </apn>
+ <apn value="slsfr">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SFR slsfr</name>
+ </apn>
+ <apn value="internetpro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SFR internetpro</name>
+ </apn>
+ <apn value="ipnet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SFR ipnet</name>
+ </apn>
+ <apn value="mmssfr">
+ <usage type="mms"/>
+ <name>MMSGPRS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>10.0.224.145</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Romania -->
+<country code="ro">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="226" mnc="10"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>172.22.7.21</dns>
+ <dns>172.22.7.20</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="226" mnc="01"/>
+ <apn value="tobe.vodafone.ro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet (Prepaid)</name>
+ <username>tobe.vodafone.ro</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="internet.vodafone.ro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet (Postpaid)</name>
+ <username>internet.vodafone.ro</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="internet.pre.vodafone.ro">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet (Prepaid)</name>
+ <username>internet.pre.vodafone.ro</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="live.vodafone.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Live! (Postpaid)</name>
+ <username>live</username>
+ <password>vodafone</password>
+ </apn>
+ <apn value="live.pre.vodafone.ro">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Live! (Prepaid)</name>
+ <username>live.pre.vodafone.com</username>
+ <password>vodafone</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zapp</name>
+ <cdma>
+ <username>zapp</username>
+ <password>zapp</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Digi.Net Mobil</name>
+ <gsm>
+ <network-id mcc="226" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Home</name>
+ </apn>
+ <apn value="static">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Business (static)</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Serbia -->
+<country code="rs">
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="220" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>telenor</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Telenor MMS</name>
+ <mmsc>http://mms.telenor.rs/servlets/mms</mmsc>
+ <mmsproxy>217.65.192.33:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telekom Srbija</name>
+ <gsm>
+ <network-id mcc="220" mnc="03"/>
+ <apn value="gprsinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mts</username>
+ <password>064</password>
+ <dns>195.178.38.3</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>mts</username>
+ <password>"064"</password>
+ <mmsc>http://mms.mts064.telekom.yu/mms/wapenc</mmsc>
+ <mmsproxy>172.17.85.131:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>VIP Mobile</name>
+ <gsm>
+ <network-id mcc="220" mnc="05"/>
+ <apn value="vipmobile">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>vipmobile</username>
+ <password>vipmobile</password>
+ </apn>
+ <apn value="vipmobile.mms">
+ <usage type="mms"/>
+ <name>Vip MMS</name>
+ <username>vipmobile</username>
+ <password>vipmobile</password>
+ <mmsc>http://mmsc.vipmobile.rs</mmsc>
+ <mmsproxy>212.15.182.82:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Rwanda -->
+<country code="rw">
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="635" mnc="10"/>
+ <apn value="internet.mtn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="635" mnc="13"/>
+ <apn value="web.tigo.rw">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Russia -->
+<country code="ru">
+ <provider>
+ <name>BaikalWestCom</name>
+ <name xml:lang="ru">БайкалВеÑтКом</name>
+ <gsm>
+ <network-id mcc="250" mnc="12"/>
+ <apn value="inet.bwc.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>bwc</username>
+ <password>bwc</password>
+ <dns>81.18.113.2</dns>
+ <dns>81.18.112.50</dns>
+ </apn>
+ <apn value="mms.bwc.ru">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>bwc</username>
+ <mmsc>http://mmsc/mms</mmsc>
+ <mmsproxy>10.10.17.2:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Beeline</name>
+ <name xml:lang="ru">Билайн</name>
+ <gsm>
+ <network-id mcc="250" mnc="28"/>
+ <network-id mcc="250" mnc="99"/>
+ <balance-check>
+ <ussd>*102#</ussd>
+ </balance-check>
+ <apn value="home.beeline.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G modem</name>
+ <name xml:lang="ru">USB-модем</name>
+ <username>beeline</username>
+ <password>beeline</password>
+ <dns>212.44.130.6</dns>
+ <dns>217.118.83.6</dns>
+ </apn>
+ <apn value="internet.beeline.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile phone</name>
+ <name xml:lang="ru">Мобильный телефон</name>
+ <username>beeline</username>
+ <password>beeline</password>
+ <dns>217.118.66.243</dns>
+ <dns>217.118.66.244</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>ETK</name>
+ <gsm>
+ <network-id mcc="250" mnc="05"/>
+ <apn value="wap.etk.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTS</name>
+ <gsm>
+ <network-id mcc="250" mnc="01"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet.mts.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mts</username>
+ <password>mts</password>
+ <dns>213.87.0.1</dns>
+ <dns>213.87.1.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Megafon</name>
+ <name xml:lang="ru">Мегафон</name>
+
+ <gsm>
+ <network-id mcc="250" mnc="02"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>RUS</name>
+ <name xml:lang="ru">РоÑÑиÑ</name>
+ <username>gdata</username>
+ <password>gdata</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>МегаФон MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc:8002</mmsc>
+ <mmsproxy>10.10.10.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>NCC</name>
+ <gsm>
+ <network-id mcc="250" mnc="03"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>ncc</username>
+ <dns>10.0.3.5</dns>
+ <dns>10.0.3.2</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>NTC</name>
+ <gsm>
+ <network-id mcc="250" mnc="16"/>
+ <apn value="internet.ntc">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>80.243.64.67</dns>
+ <dns>80.243.68.34</dns>
+ </apn>
+ <apn value="mms.ntc">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mmsc.vntc.ru/was</mmsc>
+ <mmsproxy>80.243.64.68:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Enisey TeleCom</name>
+ <name xml:lang="ru">ЕниÑей Телеком</name>
+ <gsm>
+ <network-id mcc="250" mnc="05"/>
+ <apn value="internet.etk.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>etk</username>
+ <dns>10.10.30.3</dns>
+ <dns>10.10.30.4</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Motiv</name>
+ <name xml:lang="ru">Мотив</name>
+ <gsm>
+ <network-id mcc="250" mnc="35"/>
+ <apn value="inet.ycc.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>motiv</username>
+ <dns>217.148.52.34</dns>
+ <dns>217.148.52.3</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tatincom</name>
+ <name xml:lang="ru">Татинком</name>
+ <gsm>
+ <apn value="internet.tatincom.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>tatincom</username>
+ <password>tatincom</password>
+ <dns>89.207.96.2</dns>
+ <dns>89.207.97.18</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <name xml:lang="ru">Теле2</name>
+ <gsm>
+ <network-id mcc="250" mnc="20"/>
+ <apn value="internet.tele2.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>130.244.127.161</dns>
+ <dns>130.244.127.169</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Skylink</name>
+ <name xml:lang="ru">Скайлинк</name>
+ <cdma>
+ <username>mobile</username>
+ <password>internet</password>
+
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="11396"/> <!-- Khabarovsk area -->
+ <sid value="11398"/> <!-- Adygeya -->
+ <sid value="11400"/> <!-- Altay republic -->
+ <sid value="11418"/> <!-- Bashkostostan -->
+ <sid value="11424"/> <!-- Buryatiya -->
+ <sid value="11432"/> <!-- Dagestan -->
+ <sid value="11434"/> <!-- Ingushetia -->
+ <sid value="11438"/> <!-- Kabardino-Balkariya -->
+ <sid value="11440"/> <!-- Kalmykia -->
+ <sid value="11442"/> <!-- Karachayevo-Cherkessiya -->
+ <sid value="11446"/> <!-- Karelia -->
+ <sid value="11452"/> <!-- Komi -->
+ <sid value="11456"/> <!-- Mordovia -->
+ <sid value="11462"/> <!-- Yakutiya -->
+ <sid value="11465"/> <!-- North Osetia -->
+ <sid value="11482"/> <!-- Tatarstan -->
+ <sid value="11484"/> <!-- Tuva -->
+ <sid value="11492"/> <!-- Udmurtiya -->
+ <sid value="11494"/> <!-- Khakasia -->
+ <sid value="11498"/> <!-- Chechnya -->
+ <sid value="11510"/> <!-- Altay area -->
+ <sid value="11532"/> <!-- Krasnodar -->
+ <sid value="11546"/> <!-- Krasnoyarsk -->
+ <sid value="11556"/> <!-- Primorsky area -->
+ <sid value="11568"/> <!-- Stavropol -->
+ <sid value="11572"/> <!-- Amur area -->
+ <sid value="11578"/> <!-- Arkhangelsk -->
+ <sid value="11582"/> <!-- Astrakhan -->
+ <sid value="11590"/> <!-- Belgorod -->
+ <sid value="11596"/> <!-- Bryansk -->
+ <sid value="11604"/> <!-- Vladimir -->
+ <sid value="11616"/> <!-- Volgograd -->
+ <sid value="11622"/> <!-- Vologda -->
+ <sid value="11630"/> <!-- Ivanovo -->
+ <sid value="11642"/> <!-- Irkutsk -->
+ <sid value="11646"/> <!-- Kaliningrad -->
+ <sid value="11650"/> <!-- Kaluga -->
+ <sid value="11668"/> <!-- Kemerovo -->
+ <sid value="11672"/> <!-- Kostroma -->
+ <sid value="11676"/> <!-- Kurgan -->
+ <sid value="11684"/> <!-- Kursk -->
+ <sid value="11692"/> <!-- Leningrad area -->
+ <sid value="11698"/> <!-- Lipetsk -->
+ <sid value="11700"/> <!-- Magadan -->
+ <sid value="11732"/> <!-- Moscow area -->
+ <sid value="11736"/> <!-- Murmansk -->
+ <sid value="11754"/> <!-- Nizhniy Novgorod -->
+ <sid value="11758"/> <!-- V. Novgorog -->
+ <sid value="11772"/> <!-- Novosibirsk -->
+ <sid value="11780"/> <!-- Kirov -->
+ <sid value="11784"/> <!-- Chuvashia -->
+ <sid value="11788"/> <!-- Evreysky district -->
+ <sid value="11790"/> <!-- Aginsky-Buryatsky district -->
+ <sid value="11794"/> <!-- Penza -->
+ <sid value="11802"/> <!-- Mariy El -->
+ <sid value="11806"/> <!-- Koryak district -->
+ <sid value="11816"/> <!-- Omsk -->
+ <sid value="11826"/> <!-- Orenburg -->
+ <sid value="11830"/> <!-- Orel -->
+ <sid value="11844"/> <!-- Perm -->
+ <sid value="11848"/> <!-- Pskov -->
+ <sid value="11868"/> <!-- Rostov -->
+ <sid value="11874"/> <!-- Tomsk -->
+ <sid value="11884"/> <!-- Voronezh -->
+ <sid value="11892"/> <!-- Ryazan -->
+ <sid value="11908"/> <!-- Samara -->
+ <sid value="11922"/> <!-- Saratov -->
+ <sid value="11924"/> <!-- Sakhalin -->
+ <sid value="11948"/> <!-- Sverdlovsk -->
+ <sid value="11960"/> <!-- Tambov -->
+ <sid value="11964"/> <!-- Smolensk -->
+ <sid value="11968"/> <!-- Tver -->
+ <sid value="11978"/> <!-- Tula -->
+ <sid value="11984"/> <!-- Tyumen -->
+ <sid value="11990"/> <!-- Ul yanovsk -->
+ <sid value="12006"/> <!-- Chelyabinsk -->
+ <sid value="12012"/> <!-- Chita -->
+ <sid value="12020"/> <!-- Yaroslavl -->
+ <sid value="12060"/> <!-- Moscow -->
+ <sid value="12061"/> <!-- Moscow -->
+ <sid value="12063"/> <!-- St. Petersburg -->
+ <sid value="12064"/> <!-- St. Petersburg -->
+ <sid value="12065"/> <!-- Kemerovo -->
+ <sid value="12066"/> <!-- Kemerovo -->
+ <sid value="12067"/> <!-- Sverdlovsk -->
+ <sid value="12085"/> <!-- Nenetskiy district -->
+ <sid value="12087"/> <!-- Ust-Ordynsky district -->
+ <sid value="12090"/> <!-- Khanty-Mansi district -->
+ <sid value="12092"/> <!-- Chukotsky district -->
+ <sid value="12094"/> <!-- Yamal-Nenets district -->
+ <sid value="12095"/> <!-- Kamchatka -->
+ </cdma>
+ </provider>
+ <provider>
+ <name>U-tel</name>
+ <gsm>
+ <network-id mcc="250" mnc="39"/>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <apn value="internet.usi.ru">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mnc039.mcc250.gprs">
+ <usage type="mms"/>
+ <name>mms</name>
+ <mmsc>mms.usi.ru</mmsc>
+ <mmsproxy>192.168.168.192:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Saudi Arabia -->
+<country code="sa">
+ <provider>
+ <name>Mobily</name>
+ <gsm>
+ <network-id mcc="420" mnc="03"/>
+ <apn value="web1">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid</name>
+ </apn>
+ <apn value="web2">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Prepaid</name>
+ </apn>
+ <apn value="mms1">
+ <usage type="mms"/>
+ <name>mobily MMS (Postpaid)</name>
+ <mmsc>http://10.3.3.133:9090/was</mmsc>
+ <mmsproxy>10.3.2.133:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>STC</name>
+ <gsm>
+ <network-id mcc="420" mnc="01"/>
+ <apn value="jawalnet.com.sa">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.118.133.101</dns>
+ <dns>212.118.133.102</dns>
+ </apn>
+ <apn value="mms.net.sa">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.net.sa:8002</mmsc>
+ <mmsproxy>10.1.1.1:8080</mmsproxy>
+ </apn>
+ <apn value="mms.net.sa">
+ <usage type="mms"/>
+ <name>ALJAWAL MMS</name>
+ <mmsc>http://mms.net.sa:8002</mmsc>
+ <mmsproxy>10.1.1.1:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zain</name>
+ <gsm>
+ <network-id mcc="420" mnc="04"/>
+ <apn value="zain">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+
+<!-- Sweden -->
+<country code="se">
+ <provider primary="true">
+ <name>3</name>
+ <gsm>
+ <network-id mcc="240" mnc="02"/>
+ <network-id mcc="240" mnc="04"/>
+ <!-- http://www.tre.se/templates/Sporg3_02.aspx?id=4231 -->
+ <apn value="data.tre.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobiltelefon</name>
+ </apn>
+ <!-- http://www.tre.se/templates/Sporg3_02.aspx?id=4231 -->
+ <apn value="bredband.tre.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Bredband</name>
+ </apn>
+ <apn value="net.tre.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Bredband Kontantkort</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Glocalnet</name>
+ <gsm>
+ <network-id mcc="240" mnc="08"/>
+ <!-- http://glocalnet.se/mobiltbredband -->
+ <apn value="bredband.glocalnet.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Bredband</name>
+ </apn>
+ <!-- http://kundservice.glocalnet.se/Kundservice/Mobiltelefoni/Installningar/ -->
+ <apn value="internet.glocalnet.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Glocalnet Internet</name>
+ </apn>
+ <apn value="services.glocalnet.se">
+ <usage type="mms"/>
+ <name>Glocalnet MMS</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>172.30.253.241:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Halebop</name>
+ <gsm>
+ <network-id mcc="240" mnc="01"/>
+
+ <!-- http://www.halebop.se/halebop_kundtjanst/vanliga_fragor_kontantkort/ -->
+ <apn value="halebop.telia.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.telia.se">
+ <usage type="mms"/>
+ <name>Halebop MMS</name>
+ <mmsc>http://mmss/</mmsc>
+ <mmsproxy>193.209.134.132:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://www.ice.net/Mobilt-bredband-1373.aspx -->
+ <name>ice.net (Nordisk Mobiltelefon)</name>
+ <cdma>
+ <username>cdma</username>
+ <password>cdma</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Tele2</name>
+ <gsm>
+ <network-id mcc="240" mnc="07"/>
+ <network-id mcc="240" mnc="05"/>
+
+ <voicemail>222</voicemail>
+ <balance-check>
+ <ussd>*111#</ussd>
+ <dtmf>211</dtmf>
+ </balance-check>
+
+ <!-- http://www.tele2.se/internet-via-gprs.html -->
+ <apn value="internet.tele2.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Internet</name>
+ </apn>
+ <!-- http://www.tele2.se/alien-modem.html -->
+ <apn value="mobileinternet.tele2.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Bredband</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Comviq</name>
+ <gsm>
+ <network-id mcc="240" mnc="07"/>
+ <network-id mcc="240" mnc="05"/>
+
+ <voicemail>222</voicemail>
+ <balance-check>
+ <ussd>*111#</ussd>
+ <dtmf>211</dtmf>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*110*CODE#</ussd>
+ </balance-top-up>
+
+ <apn value="data.comviq.se">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Surf</name>
+ </apn>
+
+ <apn value="internet.tele2.se">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Tele2 Comviq 3G</name>
+ </apn>
+ <apn value="mobileinternet.tele2.se">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Tele2 Comviq 3G (7,2 Mbit/s)</name>
+ </apn>
+ <apn value="internet.tele2.se">
+ <usage type="mms"/>
+ <name>Tele2 MMS</name>
+ <mmsc>http://mmsc.tele2.se</mmsc>
+ <mmsproxy>130.244.202.30:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Multicom Security</name>
+ <gsm>
+ <network-id mcc="240" mnc="01"/>
+ <network-id mcc="240" mnc="05"/>
+
+ <!-- http://multicomsecurity.se/produkter-tjanster/mobil-datakommunikation/mobiflex/ -->
+ <apn value="mobiflex.telia.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobiflex</name>
+ </apn>
+ <apn value="mms.telia.se">
+ <usage type="mms"/>
+ <name>Telia MMS</name>
+ <mmsc>http://mmss/</mmsc>
+ <mmsproxy>193.209.134.132:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telenor</name>
+ <gsm>
+ <network-id mcc="240" mnc="04"/>
+ <network-id mcc="240" mnc="06"/>
+ <network-id mcc="240" mnc="08"/>
+
+ <voicemail>888</voicemail>
+ <balance-check>
+ <ussd>*222#</ussd>
+ </balance-check>
+
+ <!-- http://www.telenor.se/privat/mobiltelefoni/alla-mobiltjanster/alla-mobiltjanster.html#C45-2100 -->
+ <apn value="internet.telenor.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Internet</name>
+ </apn>
+ <apn value="services.telenor.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilsurf med maxtaxa</name>
+ </apn>
+ <apn value="bredband.telenor.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Bredband</name>
+ </apn>
+ <apn value="sp-services">
+ <usage type="mms"/>
+ <name>Cellmobile MMS</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>172.30.253.241:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Telia</name>
+ <gsm>
+ <network-id mcc="240" mnc="01"/>
+ <network-id mcc="240" mnc="05"/>
+
+ <voicemail>*133#</voicemail>
+ <balance-check>
+ <ussd>*120#</ussd>
+ <ussd>*121#</ussd>
+ </balance-check>
+
+ <!-- http://www3.telia.se/foretag/mobilguiden/ -->
+ <apn value="online.telia.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Telia 3G</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TDC</name>
+ <gsm>
+ <network-id mcc="240" mnc="14"/>
+ <apn value="internet.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="data.tre.se">
+ <usage type="mms"/>
+ <name>3mms</name>
+ <mmsc>http://mms.tre.se</mmsc>
+ <mmsproxy>mmsproxy.tre.se:8799</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>djuice</name>
+ <gsm>
+ <network-id mcc="240" mnc="09"/>
+ <apn value="internet.djuice.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Com Hem</name>
+ <gsm>
+ <network-id mcc="240" mnc="02"/>
+ <network-id mcc="240" mnc="04"/>
+ <!-- MVNO operating on 3's network -->
+ <apn value="bredband.comhem.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Parlino</name>
+ <gsm>
+ <network-id mcc="240" mnc="07"/>
+ <apn value="internet.parlino.se">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Universal Telecom</name>
+ <gsm>
+ <!-- http://www.uvtc.com/SWEDEN/internet/mobiltbredband/Default.aspx -->
+ <apn value="sp-internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Bredband</name>
+ </apn>
+ <!-- http://www.uvtc.com/sweden/Mobil/Faq/default.aspx -->
+ <apn value="internet.uvtc.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobilt Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Singapore -->
+<country code="sg">
+ <provider>
+ <name>M1</name>
+ <gsm>
+ <network-id mcc="525" mnc="03"/>
+ <!-- http://m1.com.sg/filedownloads/popup/Miworld/popup_se2.5.html mid page -->
+ <apn value="sunsurf">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>SunSurf/Mobile Broadband (postpaid)</name>
+ <username>65</username>
+ <dns>202.79.64.21</dns>
+ <dns>202.79.64.26</dns>
+ </apn>
+ <!-- http://m1.com.sg/filedownloads/popup/Miworld/popup_se2.5.html top page-->
+ <apn value="miworld">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>MiWorld Mobile (postpaid)</name>
+ <username>65(mobilenumber)</username>
+ <password>user123</password>
+ </apn>
+ <!-- http://m1.com.sg/filedownloads/popup/Miworld/popup_se2.5.html lower page -->
+ <apn value="miworldcard">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>MiWorld Mobile (prepaid)</name>
+ <username>65(mobilenumber)</username>
+ <password>user123</password>
+ </apn>
+ <apn value="prepaidbb">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband (prepaid)</name>
+ </apn>
+ <apn value="sunsurfmcard">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>M Card (prepaid)</name>
+ </apn>
+ <apn value="miworld">
+ <usage type="mms"/>
+ <name>M1 MMS</name>
+ <username>+65</username>
+ <password>user123</password>
+ <mmsc>http://mmsgw:8002/</mmsc>
+ <mmsproxy>172.16.14.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>SingTel</name>
+ <gsm>
+ <network-id mcc="525" mnc="01"/>
+ <network-id mcc="525" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>165.21.100.88</dns>
+ <dns>165.21.83.88</dns>
+ </apn>
+ <apn value="e-ideas">
+ <usage type="mms"/>
+ <name>IDEAS MMS</name>
+ <username>65IDEAS</username>
+ <password>IDEAS</password>
+ <mmsc>http://mms.singtel.com:10021/mmsc</mmsc>
+ <mmsproxy>165.21.42.84:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Starhub</name>
+ <gsm>
+ <network-id mcc="525" mnc="05"/>
+ <apn value="shwap">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>WAP</name>
+ <username>star</username>
+ <password>hub</password>
+ <dns>203.116.1.78</dns>
+ </apn>
+ <apn value="shppd">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>MaxMobile Broadband (prepaid)</name>
+ </apn>
+ <apn value="shinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>MaxMobile Broadband (postpaid)</name>
+ </apn>
+ <apn value="shmms">
+ <usage type="mms"/>
+ <name>Gee! MMS</name>
+ <mmsc>http://mms.starhubgee.com.sg:8002/</mmsc>
+ <mmsproxy>10.12.1.80:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Slovenia -->
+<country code="si">
+ <provider>
+ <name>Mobitel</name>
+ <gsm>
+ <network-id mcc="293" mnc="41"/>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Postpaid</name>
+ <username>mobitel</username>
+ <password>internet</password>
+ <dns>213.229.248.161</dns>
+ <dns>193.189.160.11</dns>
+ </apn>
+ <apn value="internetpro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mobitel</username>
+ <password>internet</password>
+ <dns>213.229.248.161</dns>
+ <dns>193.189.160.11</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone / Simobil</name>
+ <gsm>
+ <network-id mcc="293" mnc="40"/>
+ <msisdn-query>
+ <ussd>*100#</ussd>
+ </msisdn-query>
+ <apn value="internet.simobil.si">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>simobil</username>
+ <password>internet</password>
+ <dns>121.30.86.130</dns>
+ <dns>193.189.160.11</dns>
+ </apn>
+ <apn value="mms.simobil.si">
+ <usage type="mms"/>
+ <name>SI mobil MMS</name>
+ <username>simobil</username>
+ <password>internet</password>
+ <mmsc>http://mmc/</mmsc>
+ <mmsproxy>80.95.224.46:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-2</name>
+ <gsm>
+ <network-id mcc="293" mnc="64"/>
+ <apn value="internet.t-2.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.t-2.net">
+ <usage type="mms"/>
+ <name>T2 MMS</name>
+ <mmsc>http://www.mms.t-2.net:8002</mmsc>
+ <mmsproxy>172.20.18.137:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Slovakia -->
+<country code="sk">
+ <provider>
+ <name>Slovak Telekom</name>
+ <gsm>
+ <network-id mcc="231" mnc="02"/>
+ <network-id mcc="231" mnc="04"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>195.91.0.17</dns>
+ <dns>194.154.227.17</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>T-Mobile MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>192.168.1.1:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="231" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>213.151.200.31</dns>
+ <dns>213.151.208.162</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>O2</name>
+ <gsm>
+ <network-id mcc="231" mnc="06"/>
+ <apn value="o2internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ <dns>160.218.161.60</dns>
+ <dns>194.228.211.33</dns>
+ </apn>
+ <apn value="o2mms">
+ <usage type="mms"/>
+ <name>O2 SK MMS</name>
+ <mmsc>http://mms.o2world.sk:8002</mmsc>
+ <mmsproxy>10.97.1.11:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Senegal -->
+<country code="sn">
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="608" mnc="02"/>
+ <apn value="wap.sentelgsm.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>200.85.0.104</dns>
+ <dns>200.85.0.107</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- El Salvador -->
+<country code="sv">
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="706" mnc="04"/>
+ <apn value="internet.movistar.sv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>movistarsv</username>
+ <password>movistarsv</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>digicel</name>
+ <gsm>
+ <network-id mcc="706" mnc="02"/>
+ <apn value="wap.digicelsv.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="wap.digicelsv.com">
+ <usage type="mms"/>
+ <name>Digicel El Salvador MMS</name>
+ <mmsc>http://172.26.5.132/servlets/mms</mmsc>
+ <mmsproxy>172.26.5.12:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tigo</name>
+ <gsm>
+ <network-id mcc="706" mnc="03"/>
+ <apn value="internet.tigo.sv">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="706" mnc="10"/>
+ <apn value="internet.ideasclaro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Sudan -->
+<country code="sd">
+ <provider>
+ <name>Zain</name>
+ <gsm>
+ <network-id mcc="634" mnc="01"/>
+ <balance-check>
+ <ussd>*888#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*888*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTN</name>
+ <!-- http://www.mtn.sd/en/section/faq "Manual configuration of settings" -->
+ <gsm>
+ <network-id mcc="634" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sudani</name>
+ <!-- http://sudani.sd/PublicOne/Content/Support/HowTo.ConnectToInternet -->
+ <gsm>
+ <network-id mcc="634" mnc="07"/>
+ <apn value="sudaninet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>sudani</username>
+ <password>sudani</password>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>sudani</username>
+ <password>sudani</password>
+ </cdma>
+ </provider>
+</country>
+
+<!-- Thailand -->
+<country code="th">
+ <provider>
+ <name>AIS</name>
+ <gsm>
+ <network-id mcc="520" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>202.183.255.20</dns>
+ <dns>202.183.255.21</dns>
+ </apn>
+ <apn value="multimedia">
+ <usage type="mms"/>
+ <name>AIS-GPRS-3 MMS</name>
+ <mmsc>http://mms.mobilelife.co.th</mmsc>
+ <mmsproxy>203.170.229.34:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>DTAC</name>
+ <gsm>
+ <network-id mcc="520" mnc="18"/>
+ <apn value="www.dtac.co.th">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>202.44.202.2</dns>
+ <dns>203.44.144.33</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>DTAC-GPRS-3 MMS</name>
+ <mmsc>http://mms.dtac.co.th:8002/</mmsc>
+ <mmsproxy>203.155.200.133:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>True Move</name>
+ <gsm>
+ <network-id mcc="520" mnc="99"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>true</username>
+ <password>true</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>True GPRS 3 MMS</name>
+ <username>true</username>
+ <password>true</password>
+ <mmsc>http://mms.trueworld.net:8002/</mmsc>
+ <mmsproxy>10.4.7.39:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TOT 3G</name>
+ <gsm>
+ <network-id mcc="520" mnc="15"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Tunisia -->
+<country code="tn">
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="605" mnc="01"/>
+ <apn value="weborange">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet</name>
+ </apn>
+ <apn value="mms.otun">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>Internet + MMS</name>
+ </apn>
+ <apn value="keygp">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere Prepaid</name>
+ </apn>
+ <apn value="keypro">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet Everywhere Professional</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tunisie Télécom / TUNTEL</name>
+ <gsm>
+ <network-id mcc="605" mnc="02"/>
+ <apn value="mms.tn">
+ <plan type="postpaid"/>
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>mms@tt1</username>
+ <password>mms</password>
+ </apn>
+ <apn value="gprs.tn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS DATA</name>
+ <username>gprs</username>
+ <password>gprs</password>
+ </apn>
+ <apn value="internet.tn">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>WEB DATA</name>
+ </apn>
+ <apn value="mms.tn">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <username>mms@tt1</username>
+ <password>mms</password>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>213.150.186.106:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Tunisiana</name>
+ <gsm>
+ <network-id mcc="605" mnc="03"/>
+ <apn value="internet.tunisiana.com">
+ <name>Internet</name>
+ <username>internet</username>
+ <password>internet</password>
+ </apn>
+ <apn value="mms.tunisiana.com">
+ <usage type="mms"/>
+ <name>mms tunisiana</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mmsc.tunisiana.com</mmsc>
+ <mmsproxy>10.3.2.100:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Turkey -->
+<country code="tr">
+ <provider>
+ <name>Avea</name>
+ <gsm>
+ <network-id mcc="286" mnc="03"/>
+ <network-id mcc="286" mnc="04"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>212.156.4.4</dns>
+ <dns>212.156.4.20</dns>
+ </apn>
+
+ <apn value="aycell">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>(former Aycell)</name>
+ <dns>212.156.4.1</dns>
+ <dns>212.156.4.4</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Avea MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.avea.com.tr/servlets/mms</mmsc>
+ <mmsproxy>213.161.151.201:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Turkcell</name>
+ <gsm>
+ <!-- http://www.turkcell.com.tr/Downloads/servis-yazilimi/3g/VINN3GModemE180/VINN_2_0_sms_profil_sebeke_aygit_bilgisi.pdf -->
+ <!-- http://www.turkcell.com.tr/bireysel/cihazlar/Sayfalar/vinnailesi/Turkcell-DC-VINN.aspx -->
+ <network-id mcc="286" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Turkcell internet</name>
+ </apn>
+ <apn value="mgb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Turkcell 3G</name>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Turkcell MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.turkcell.com.tr/servlets/mms</mmsc>
+ <mmsproxy>212.252.169.217:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodafone</name>
+ <gsm>
+ <network-id mcc="286" mnc="02"/><!-- mnc="0251" in Vodofone XML -->
+ <msisdn-query>
+ <ussd>*101#</ussd>
+ </msisdn-query>
+ <apn value="internet">
+ <usage type="internet"/>
+ <name>Vodafone Internet</name>
+ <username>vodafone</username>
+ <password>vodafone</password>
+ </apn>
+ <!--
+ KKTC Telsim was a subsidiary of Telsim Group in Turkey which was taken
+ over by the Vodafone Group 2006 and rebranded as Vodafone in 2007.
+ Due to the political situation in Northern Cyprus the company shares the
+ Vodafone Turkey MCC and MNC codes although it is logically a separate
+ operator. The brand KKTC Telsim is still used in Northern Cyprus due to
+ Vodafone Group agreements with Cytamobile-Vodafone in Southern Cyprus.
+ -->
+ <apn value="edge.kktctelsim.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>KKTC Telsim</name>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Trinidad & Tobago -->
+<country code="tt">
+ <provider>
+ <name>Digicel</name>
+ <gsm>
+ <network-id mcc="374" mnc="13"/>
+ <apn value="wap.digiceltt.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="wap.digiceltt.com">
+ <usage type="mms"/>
+ <name>Digicel Trinidad MMS</name>
+ <username>wap</username>
+ <password>wap</password>
+ <mmsc>http://mmc.digiceltt.com/servlets/mms</mmsc>
+ <mmsproxy>172.20.6.12:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>bmobile / TSTT</name>
+ <gsm>
+ <network-id mcc="374" mnc="12"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wap</username>
+ <password>wap</password>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Bmobile mms</name>
+ <mmsc>http://192.168.210.104/mmrelay.app</mmsc>
+ <mmsproxy>192.168.210.104:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Taiwan -->
+<country code="tw">
+ <provider>
+ <name>Chunghwa Telecom (emome)</name>
+ <name xml:lang="zh">中è¯é›»ä¿¡ (emome)</name>
+ <gsm>
+ <network-id mcc="466" mnc="92"/>
+ <!-- http://www.nav4all.com/site2/www.nav4all.com/enguk/gprs_settings_taiwan_chunghwatelekom_nav4all.php?m=F3 -->
+ <apn value="emome">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>web</username>
+ <password>web</password>
+ </apn>
+ <!-- Vodafone Broadband Connect version 10.1.0.23908 2010-06-07T17:47:01 lists username/pass = web. Others list empty -->
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="emome">
+ <usage type="mms"/>
+ <name>CHT MMS</name>
+ <mmsc>http://mms.emome.net:8002</mmsc>
+ <mmsproxy>10.1.1.1:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Far EasTone / KGT</name>
+ <name xml:lang="zh">é å‚³é›»ä¿¡ / 和信電訊</name>
+ <gsm>
+ <network-id mcc="466" mnc="01"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="fetnet01">
+ <usage type="mms"/>
+ <name>é å‚³å½±éŸ³è¨Šæ¯</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>210.241.199.199:9201</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TW Mobile</name>
+ <name xml:lang="zh">å°æ¹¾å¤§å“¥å¤§</name>
+ <gsm>
+ <network-id mcc="466" mnc="99"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>catch MMS</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>211.78.224.100:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>TransAsia</name>
+ <name xml:lang="zh">泛亞電信</name>
+ <gsm>
+ <network-id mcc="466" mnc="97"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="vibo">
+ <usage type="mms"/>
+ <name>VIBO行動網-MMS</name>
+ <mmsc>http://mms</mmsc>
+ <mmsproxy>172.24.128.36:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vibo Telecom / Aurora</name>
+ <name xml:lang="zh">å¨å¯¶é›»ä¿¡ (Vibo) / 震旦電信 (Aurora)</name>
+ <gsm>
+ <network-id mcc="466" mnc="89"/>
+ <apn value="vibo">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="MMS">
+ <usage type="mms"/>
+ <name>Vodacom MMS</name>
+ <mmsproxy>10.154.0.12</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Asia Pacific Telecom (APBW)</name>
+ <name xml:lang="zh">亞太電信 (亞太行動寬頻電信)</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Tanzania, United Republic of -->
+<country code="tz">
+ <provider>
+ <name>Airtel Tanzania</name>
+ <gsm>
+ <network-id mcc="640" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodacom</name>
+ <gsm>
+ <network-id mcc="640" mnc="04"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zantel</name>
+ <gsm>
+ <network-id mcc="640" mnc="03"/>
+ <apn value="znet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>@zantel.com</username>
+ <password> </password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>tiGO</name>
+ <gsm>
+ <network-id mcc="640" mnc="02"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sasatel</name>
+ <cdma>
+ <username>sasatel</username>
+ <password>sasatel</password>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="9891"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>TTCL</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Ukraine -->
+<country code="ua">
+ <provider>
+ <name>kyivstar</name>
+ <gsm>
+ <network-id mcc="255" mnc="03"/>
+
+ <apn value="www.ab.kyivstar.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Ace&amp;Base</name>
+ <username>igprs</username>
+ <password>internet</password>
+ </apn>
+ <apn value="www.kyivstar.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Contract GPRS</name>
+ </apn>
+ <apn value="3g.kyivstar.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet 3G</name>
+ </apn>
+ <apn value="mms.kyivstar.net">
+ <usage type="mms"/>
+ <name>Kyivstar MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.kyivstar.net</mmsc>
+ <mmsproxy>10.10.10.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Djuice</name>
+ <gsm>
+ <network-id mcc="255" mnc="03"/>
+
+ <apn value="www.djuice.com.ua">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet GPRS</name>
+ </apn>
+ <apn value="xl.kyivstar.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet XL</name>
+ </apn>
+ <apn value="3g.kyivstar.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet 3G</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <!-- http://www.life.com.ua/index.php?area=lifebox&lng=en&page=15-12 -->
+ <name>life:)</name>
+ <gsm>
+ <network-id mcc="255" mnc="06"/>
+ <balance-check>
+ <ussd>*111#</ussd>
+ </balance-check>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Standard</name>
+ <dns>212.58.160.33</dns>
+ <dns>212.58.160.34</dns>
+ </apn>
+ <apn value="speed">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Faster</name>
+ <dns>212.58.160.33</dns>
+ <dns>212.58.160.34</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="255" mnc="02"/>
+ <apn value="internet.beeline.ua">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Jeans</name>
+ <gsm>
+ <network-id mcc="255" mnc="01"/>
+ <apn value="www.jeans.ua">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>80.255.64.23</dns>
+ <dns>80.255.64.24</dns>
+ </apn>
+ <apn value="hyper.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Hyper.NET</name>
+ <dns>212.58.160.33</dns>
+ <dns>212.58.160.34</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTS</name>
+ <gsm>
+ <network-id mcc="255" mnc="01"/>
+
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS Internet</name>
+ <username>internet</username>
+ <dns>212.58.160.33</dns>
+ <dns>212.58.160.34</dns>
+ </apn>
+ <apn value="hyper.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Hyper.NET</name>
+ </apn>
+ <apn value="active">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>HyperActive</name>
+ </apn>
+ <apn value="www.umc.ua">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>umc.ua</name>
+ <dns>80.255.64.23</dns>
+ <dns>80.255.64.24</dns>
+ </apn>
+ </gsm>
+ <cdma>
+ <name>MTS Connect 3G</name>
+ <username>mobile</username>
+ <password>internet</password>
+ <sid value="15907"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Utel</name>
+ <gsm>
+ <network-id mcc="255" mnc="07"/>
+ <apn value="3g.utel.ua">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="3g.utel.ua">
+ <usage type="mms"/>
+ <name>Utel MMS</name>
+ <mmsc>http://10.212.1.4/mms/wapenc</mmsc>
+ <mmsproxy>10.212.3.148:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>CDMA Ukraine</name>
+ <cdma>
+ <username>cdma</username>
+ <password>cdma</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>InterTelecom</name>
+ <cdma>
+ <username>IT@IT</username>
+ <password>IT</password>
+ <sid value="15906"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>PEOPLEnet</name>
+ <cdma/>
+ </provider>
+</country>
+
+<!-- Uganda -->
+<country code="ug">
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="641" mnc="10"/>
+ <apn value="yellopix.mtn.co.ug">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>193.108.252.50</dns>
+ <dns>193.108.252.51</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Orange</name>
+ <gsm>
+ <network-id mcc="641" mnc="14"/>
+ <apn value="orange.ug">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms.warid.co.ug">
+ <usage type="mms"/>
+ <name>warid mms</name>
+ <mmsc>http://mms.waridtel.co.ug</mmsc>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>UTL</name>
+ <gsm>
+ <network-id mcc="641" mnc="11"/>
+ <apn value="utbroadband">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ </apn>
+ <apn value="utweb">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ </apn>
+ <apn value="utwap">
+ <usage type="mms"/>
+ <name>Ug Telcom MMS</name>
+ <mmsc>http://mmsc.ugandatelecom.com/</mmsc>
+ <mmsproxy>10.76.101.51:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Warid</name>
+ <gsm>
+ <network-id mcc="641" mnc="22"/>
+ <!-- http://www.waridtel.co.ug/gprs.php -->
+ <apn value="web.waridtel.co.ug">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Zain</name>
+ <gsm>
+ <network-id mcc="641" mnc="01"/>
+ <apn value="web.ug.zain.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- United States -->
+<country code="us">
+ <provider>
+ <name>AT&amp;T</name>
+ <gsm>
+ <network-id mcc="310" mnc="038"/>
+ <network-id mcc="310" mnc="090"/>
+ <network-id mcc="310" mnc="150"/>
+ <network-id mcc="310" mnc="410"/>
+ <network-id mcc="310" mnc="560"/>
+ <network-id mcc="310" mnc="680"/>
+ <!-- http://www.wireless.att.com/answer-center/main.jsp?solutionId=35078&t=solutionTab -->
+ <apn value="wap.cingular">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>MEdia Net (phones)</name>
+ </apn>
+ <apn value="Broadband">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>LaptopConnect (data cards)</name>
+ </apn>
+ <apn value="isp.cingular">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Data Connect (old)</name>
+ </apn>
+ <apn value="pta">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>LTE</name>
+ </apn>
+ <apn value="wap.cingular">
+ <usage type="mms"/>
+ <name>AT&amp;T MMS</name>
+ <username>WAP@CINGULARGPRS.COM</username>
+ <password>CINGULAR1</password>
+ <mmsc>http://mmsc.cingular.com</mmsc>
+ <mmsproxy>wireless.cingular.com:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>T-Mobile</name>
+ <gsm>
+ <network-id mcc="310" mnc="026"/>
+ <network-id mcc="310" mnc="160"/>
+ <network-id mcc="310" mnc="200"/>
+ <network-id mcc="310" mnc="210"/>
+ <network-id mcc="310" mnc="220"/>
+ <network-id mcc="310" mnc="230"/>
+ <network-id mcc="310" mnc="240"/>
+ <network-id mcc="310" mnc="250"/>
+ <network-id mcc="310" mnc="260"/>
+ <network-id mcc="310" mnc="270"/>
+ <network-id mcc="310" mnc="310"/>
+ <network-id mcc="310" mnc="490"/>
+ <network-id mcc="310" mnc="580"/>
+ <network-id mcc="310" mnc="660"/>
+ <network-id mcc="310" mnc="800"/>
+
+ <voicemail>123</voicemail>
+ <apn value="fast.t-mobile.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>LTE</name>
+ </apn>
+ <apn value="epc.tmobile.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet/WebConnect</name>
+ <dns>10.177.0.34</dns>
+ <dns>10.164.103.44</dns>
+ </apn>
+ <apn value="wap.voicestream.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Web2Go/t-zones</name>
+ </apn>
+ <apn value="internet2.voicestream.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet (old)</name>
+ </apn>
+ <apn value="internet3.voicestream.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Internet with VPN (old)</name>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Cincinnati Bell Wireless</name>
+ <gsm>
+ <network-id mcc="310" mnc="420"/>
+ <apn value="wap.gocbw.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>cbw</username>
+ </apn>
+ <apn value="wap.gocbw.com">
+ <usage type="mms"/>
+ <name>CBW MMS</name>
+ <username>cbw</username>
+ <mmsc>http://mms.gocbw.com:8088/mms</mmsc>
+ <mmsproxy>216.68.79.202:80</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Sprint</name>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="4103"/>
+ <sid value="4106"/>
+ <sid value="4107"/>
+ <sid value="4120"/>
+ <sid value="4121"/>
+ <sid value="4124"/>
+ <sid value="4126"/>
+ <sid value="4132"/>
+ <sid value="4135"/>
+ <sid value="4139"/>
+ <sid value="4144"/>
+ <sid value="4145"/>
+ <sid value="4148"/>
+ <sid value="4151"/>
+ <sid value="4153"/>
+ <sid value="4155"/>
+ <sid value="4157"/>
+ <sid value="4159"/>
+ <sid value="4162"/>
+ <sid value="4164"/>
+ <sid value="4166"/>
+ <sid value="4168"/>
+ <sid value="4170"/>
+ <sid value="4171"/>
+ <sid value="4174"/>
+ <sid value="4180"/>
+ <sid value="4181"/>
+ <sid value="4183"/>
+ <sid value="4184"/>
+ <sid value="4186"/>
+ <sid value="4188"/>
+ <sid value="4190"/>
+ <sid value="4194"/>
+ <sid value="4195"/>
+ <sid value="4198"/>
+ <sid value="4274"/>
+ <sid value="4376"/>
+ <sid value="4379"/>
+ <sid value="4384"/>
+ <sid value="4390"/>
+ <sid value="4396"/>
+ <sid value="4418"/>
+ <sid value="4622"/>
+ <sid value="4654"/>
+ <sid value="4694"/>
+ <sid value="4812"/>
+ <sid value="4982"/>
+ <sid value="5116"/>
+ <sid value="5142"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Boost Mobile (Prepaid)</name>
+ <cdma/>
+ </provider>
+ <provider>
+ <name>Verizon</name>
+ <gsm>
+ <network-id mcc="310" mnc="995"/>
+ <network-id mcc="311" mnc="480"/>
+ <apn value="vzwims">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>4G LTE Contract</name>
+ </apn>
+ <apn value="vzwinternet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>4G LTE Contract</name>
+ <dns>66.174.92.14</dns>
+ <dns>69.78.96.14</dns>
+ </apn>
+ <apn value="vzwapp">
+ <plan type="postpaid"/>
+ <usage type="wap"/>
+ <name>4G LTE Contract</name>
+ </apn>
+ </gsm>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="2"/>
+ <sid value="4"/>
+ <sid value="5"/>
+ <sid value="6"/>
+ <sid value="8"/>
+ <sid value="12"/>
+ <sid value="15"/>
+ <sid value="17"/>
+ <sid value="18"/>
+ <sid value="20"/>
+ <sid value="21"/>
+ <sid value="22"/>
+ <sid value="26"/>
+ <sid value="28"/>
+ <sid value="30"/>
+ <sid value="32"/>
+ <sid value="33"/>
+ <sid value="37"/>
+ <sid value="40"/>
+ <sid value="41"/>
+ <sid value="48"/>
+ <sid value="51"/>
+ <sid value="54"/>
+ <sid value="56"/>
+ <sid value="58"/>
+ <sid value="59"/>
+ <sid value="60"/>
+ <sid value="64"/>
+ <sid value="65"/>
+ <sid value="69"/>
+ <sid value="73"/>
+ <sid value="75"/>
+ <sid value="78"/>
+ <sid value="80"/>
+ <sid value="86"/>
+ <sid value="92"/>
+ <sid value="93"/>
+ <sid value="94"/>
+ <sid value="95"/>
+ <sid value="96"/>
+ <sid value="104"/>
+ <sid value="107"/>
+ <sid value="110"/>
+ <sid value="112"/>
+ <sid value="113"/>
+ <sid value="119"/>
+ <sid value="126"/>
+ <sid value="127"/>
+ <sid value="133"/>
+ <sid value="137"/>
+ <sid value="139"/>
+ <sid value="143"/>
+ <sid value="150"/>
+ <sid value="154"/>
+ <sid value="162"/>
+ <sid value="163"/>
+ <sid value="165"/>
+ <sid value="170"/>
+ <sid value="172"/>
+ <sid value="179"/>
+ <sid value="180"/>
+ <sid value="181"/>
+ <sid value="186"/>
+ <sid value="189"/>
+ <sid value="190"/>
+ <sid value="203"/>
+ <sid value="213"/>
+ <sid value="214"/>
+ <sid value="222"/>
+ <sid value="224"/>
+ <sid value="226"/>
+ <sid value="228"/>
+ <sid value="241"/>
+ <sid value="250"/>
+ <sid value="258"/>
+ <sid value="262"/>
+ <sid value="263"/>
+ <sid value="266"/>
+ <sid value="272"/>
+ <sid value="276"/>
+ <sid value="284"/>
+ <sid value="286"/>
+ <sid value="294"/>
+ <sid value="298"/>
+ <sid value="299"/>
+ <sid value="300"/>
+ <sid value="314"/>
+ <sid value="316"/>
+ <sid value="319"/>
+ <sid value="323"/>
+ <sid value="328"/>
+ <sid value="329"/>
+ <sid value="330"/>
+ <sid value="349"/>
+ <sid value="356"/>
+ <sid value="377"/>
+ <sid value="385"/>
+ <sid value="404"/>
+ <sid value="428"/>
+ <sid value="443"/>
+ <sid value="456"/>
+ <sid value="465"/>
+ <sid value="482"/>
+ <sid value="483"/>
+ <sid value="486"/>
+ <sid value="490"/>
+ <sid value="498"/>
+ <sid value="502"/>
+ <sid value="506"/>
+ <sid value="528"/>
+ <sid value="530"/>
+ <sid value="532"/>
+ <sid value="539"/>
+ <sid value="1015"/>
+ <sid value="1026"/>
+ <sid value="1032"/>
+ <sid value="1034"/>
+ <sid value="1062"/>
+ <sid value="1072"/>
+ <sid value="1074"/>
+ <sid value="1076"/>
+ <sid value="1083"/>
+ <sid value="1086"/>
+ <sid value="1088"/>
+ <sid value="1094"/>
+ <sid value="1103"/>
+ <sid value="1129"/>
+ <sid value="1131"/>
+ <sid value="1137"/>
+ <sid value="1139"/>
+ <sid value="1145"/>
+ <sid value="1151"/>
+ <sid value="1153"/>
+ <sid value="1164"/>
+ <sid value="1166"/>
+ <sid value="1174"/>
+ <sid value="1180"/>
+ <sid value="1189"/>
+ <sid value="1193"/>
+ <sid value="1196"/>
+ <sid value="1220"/>
+ <sid value="1224"/>
+ <sid value="1227"/>
+ <sid value="1230"/>
+ <sid value="1267"/>
+ <sid value="1285"/>
+ <sid value="1330"/>
+ <sid value="1358"/>
+ <sid value="1417"/>
+ <sid value="1429"/>
+ <sid value="1476"/>
+ <sid value="1488"/>
+ <sid value="1492"/>
+ <sid value="1494"/>
+ <sid value="1506"/>
+ <sid value="1510"/>
+ <sid value="1514"/>
+ <sid value="1516"/>
+ <sid value="1517"/>
+ <sid value="1519"/>
+ <sid value="1523"/>
+ <sid value="1548"/>
+ <sid value="1552"/>
+ <sid value="1563"/>
+ <sid value="1567"/>
+ <sid value="1614"/>
+ <sid value="1626"/>
+ <sid value="1630"/>
+ <sid value="1632"/>
+ <sid value="1637"/>
+ <sid value="1639"/>
+ <sid value="1641"/>
+ <sid value="1653"/>
+ <sid value="1679"/>
+ <sid value="1736"/>
+ <sid value="1740"/>
+ <sid value="1749"/>
+ <sid value="1760"/>
+ <sid value="1776"/>
+ <sid value="1780"/>
+ <sid value="1790"/>
+ <sid value="1792"/>
+ <sid value="1824"/>
+ <sid value="1826"/>
+ <sid value="1827"/>
+ <sid value="1830"/>
+ <sid value="1832"/>
+ <sid value="1857"/>
+ <sid value="1910"/>
+ <sid value="1912"/>
+ <sid value="1940"/>
+ <sid value="1969"/>
+ <sid value="2004"/>
+ <sid value="2054"/>
+ <sid value="2058"/>
+ <sid value="2060"/>
+ <sid value="2076"/>
+ <sid value="2115"/>
+ <sid value="2119"/>
+ <sid value="2125"/>
+ <sid value="2127"/>
+ <sid value="2149"/>
+ <sid value="3004"/>
+ <sid value="3008"/>
+ <sid value="3046"/>
+ <sid value="3066"/>
+ <sid value="3216"/>
+ <sid value="3218"/>
+ <sid value="3228"/>
+ <sid value="6709"/>
+ <sid value="6711"/>
+ <sid value="7532"/>
+ <sid value="7536"/>
+ <sid value="9640"/>
+ <sid value="9642"/>
+ <sid value="9644"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>US Cellular</name>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm
+ NOTE: SIDs listed as "HOLLAND & KNIGHT LLP" are counted for US Cellular
+ because HOLLAND & KNIGHT LLP/Peter M. Connolly appears to be the
+ license administrator for US Cellular in those license areas listed
+ in the IFAST SID database as assigned to HOLLAND & KNIGHT LLP.
+ When a search of the FCC's ULS for the CMA noted for a SID by
+ IFAST does not return an active license held by
+ US Cellular/HOLLAND & KNIGHT LLP, that SID is not counted
+ for US Cellular (ex SID 1925, 1935, 5289, 5291, 5293, etc).
+ -->
+ <sid value="5"/>
+ <sid value="104"/>
+ <sid value="166"/>
+ <sid value="191"/>
+ <sid value="193"/>
+ <sid value="195"/>
+ <sid value="217"/>
+ <sid value="221"/>
+ <sid value="246"/>
+ <sid value="298"/>
+ <sid value="303"/>
+ <sid value="309"/>
+ <sid value="331"/>
+ <sid value="333"/>
+ <sid value="340"/>
+ <sid value="364"/>
+ <sid value="384"/>
+ <sid value="389"/>
+ <sid value="393"/>
+ <sid value="413"/>
+ <sid value="445"/>
+ <sid value="580"/>
+ <sid value="599"/>
+ <sid value="1059"/>
+ <sid value="1061"/>
+ <sid value="1075"/>
+ <sid value="1173"/>
+ <sid value="1175"/>
+ <sid value="1200"/>
+ <sid value="1211"/>
+ <sid value="1213"/>
+ <sid value="1219"/>
+ <sid value="1223"/>
+ <sid value="1228"/>
+ <sid value="1229"/>
+ <sid value="1237"/>
+ <sid value="1272"/>
+ <sid value="1317"/>
+ <sid value="1320"/>
+ <sid value="1399"/>
+ <sid value="1403"/>
+ <sid value="1406"/>
+ <sid value="1419"/>
+ <sid value="1425"/>
+ <sid value="1427"/>
+ <sid value="1484"/>
+ <sid value="1521"/>
+ <sid value="1541"/>
+ <sid value="1543"/>
+ <sid value="1574"/>
+ <sid value="1595"/>
+ <sid value="1607"/>
+ <sid value="1610"/>
+ <sid value="1643"/>
+ <sid value="1753"/>
+ <sid value="1779"/>
+ <sid value="1783"/>
+ <sid value="1794"/>
+ <sid value="1802"/>
+ <sid value="1819"/>
+ <sid value="1821"/>
+ <sid value="1881"/>
+ <sid value="1914"/>
+ <sid value="1983"/>
+ <sid value="2066"/>
+ <sid value="2141"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Alltel</name>
+ <gsm>
+ <!-- Former Western Wireless (roaming only) -->
+ <network-id mcc="310" mnc="590"/>
+ <apn value="MMS">
+ <usage type="mms"/>
+ <name>Picture Message</name>
+ <mmsc>http://mms.mycellonephone.com/highland/mms.php</mmsc>
+ <mmsproxy>66.255.55.23:80</mmsproxy>
+ </apn>
+ <apn value="cellular1wap">
+ <usage type="mms"/>
+ <name>CellularOne MMS</name>
+ <mmsc>http://mmsc</mmsc>
+ <mmsproxy>172.23.1.252:8799</mmsproxy>
+ </apn>
+ </gsm>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="32"/>
+ <sid value="42"/>
+ <sid value="52"/>
+ <sid value="53"/>
+ <sid value="54"/>
+ <sid value="57"/>
+ <sid value="71"/>
+ <sid value="74"/>
+ <sid value="79"/>
+ <sid value="83"/>
+ <sid value="84"/>
+ <sid value="85"/>
+ <sid value="97"/>
+ <sid value="100"/>
+ <sid value="114"/>
+ <sid value="116"/>
+ <sid value="120"/>
+ <sid value="126"/>
+ <sid value="130"/>
+ <sid value="142"/>
+ <sid value="144"/>
+ <sid value="152"/>
+ <sid value="156"/>
+ <sid value="182"/>
+ <sid value="186"/>
+ <sid value="188"/>
+ <sid value="202"/>
+ <sid value="204"/>
+ <sid value="205"/>
+ <sid value="208"/>
+ <sid value="212"/>
+ <sid value="216"/>
+ <sid value="220"/>
+ <sid value="240"/>
+ <sid value="244"/>
+ <sid value="256"/>
+ <sid value="260"/>
+ <sid value="272"/>
+ <sid value="281"/>
+ <sid value="282"/>
+ <sid value="292"/>
+ <sid value="304"/>
+ <sid value="306"/>
+ <sid value="312"/>
+ <sid value="318"/>
+ <sid value="338"/>
+ <sid value="342"/>
+ <sid value="344"/>
+ <sid value="348"/>
+ <sid value="350"/>
+ <sid value="368"/>
+ <sid value="374"/>
+ <sid value="376"/>
+ <sid value="386"/>
+ <sid value="387"/>
+ <sid value="392"/>
+ <sid value="396"/>
+ <sid value="416"/>
+ <sid value="418"/>
+ <sid value="424"/>
+ <sid value="430"/>
+ <sid value="440"/>
+ <sid value="444"/>
+ <sid value="448"/>
+ <sid value="462"/>
+ <sid value="478"/>
+ <sid value="487"/>
+ <sid value="491"/>
+ <sid value="504"/>
+ <sid value="518"/>
+ <sid value="520"/>
+ <sid value="544"/>
+ <sid value="546"/>
+ <sid value="547"/>
+ <sid value="550"/>
+ <sid value="558"/>
+ <sid value="570"/>
+ <sid value="578"/>
+ <sid value="1008"/>
+ <sid value="1012"/>
+ <sid value="1014"/>
+ <sid value="1016"/>
+ <sid value="1025"/>
+ <sid value="1031"/>
+ <sid value="1033"/>
+ <sid value="1038"/>
+ <sid value="1040"/>
+ <sid value="1042"/>
+ <sid value="1044"/>
+ <sid value="1046"/>
+ <sid value="1048"/>
+ <sid value="1052"/>
+ <sid value="1054"/>
+ <sid value="1056"/>
+ <sid value="1058"/>
+ <sid value="1093"/>
+ <sid value="1118"/>
+ <sid value="1120"/>
+ <sid value="1124"/>
+ <sid value="1126"/>
+ <sid value="1148"/>
+ <sid value="1154"/>
+ <sid value="1156"/>
+ <sid value="1236"/>
+ <sid value="1244"/>
+ <sid value="1246"/>
+ <sid value="1248"/>
+ <sid value="1250"/>
+ <sid value="1252"/>
+ <sid value="1254"/>
+ <sid value="1256"/>
+ <sid value="1258"/>
+ <sid value="1260"/>
+ <sid value="1262"/>
+ <sid value="1264"/>
+ <sid value="1266"/>
+ <sid value="1268"/>
+ <sid value="1270"/>
+ <sid value="1271"/>
+ <sid value="1296"/>
+ <sid value="1298"/>
+ <sid value="1302"/>
+ <sid value="1311"/>
+ <sid value="1332"/>
+ <sid value="1334"/>
+ <sid value="1336"/>
+ <sid value="1338"/>
+ <sid value="1340"/>
+ <sid value="1342"/>
+ <sid value="1344"/>
+ <sid value="1346"/>
+ <sid value="1348"/>
+ <sid value="1370"/>
+ <sid value="1372"/>
+ <sid value="1375"/>
+ <sid value="1383"/>
+ <sid value="1385"/>
+ <sid value="1393"/>
+ <sid value="1400"/>
+ <sid value="1414"/>
+ <sid value="1422"/>
+ <sid value="1424"/>
+ <sid value="1426"/>
+ <sid value="1466"/>
+ <sid value="1493"/>
+ <sid value="1495"/>
+ <sid value="1499"/>
+ <sid value="1501"/>
+ <sid value="1526"/>
+ <sid value="1528"/>
+ <sid value="1530"/>
+ <sid value="1532"/>
+ <sid value="1534"/>
+ <sid value="1536"/>
+ <sid value="1538"/>
+ <sid value="1540"/>
+ <sid value="1542"/>
+ <sid value="1544"/>
+ <sid value="1546"/>
+ <sid value="1558"/>
+ <sid value="1560"/>
+ <sid value="1566"/>
+ <sid value="1568"/>
+ <sid value="1638"/>
+ <sid value="1640"/>
+ <sid value="1642"/>
+ <sid value="1650"/>
+ <sid value="1652"/>
+ <sid value="1654"/>
+ <sid value="1688"/>
+ <sid value="1712"/>
+ <sid value="1720"/>
+ <sid value="1763"/>
+ <sid value="1765"/>
+ <sid value="1800"/>
+ <sid value="1816"/>
+ <sid value="1818"/>
+ <sid value="1866"/>
+ <sid value="1874"/>
+ <sid value="1900"/>
+ <sid value="1913"/>
+ <sid value="1916"/>
+ <sid value="1928"/>
+ <sid value="1930"/>
+ <sid value="1934"/>
+ <sid value="1938"/>
+ <sid value="1972"/>
+ <sid value="1982"/>
+ <sid value="1984"/>
+ <sid value="1986"/>
+ <sid value="1989"/>
+ <sid value="1992"/>
+ <sid value="2010"/>
+ <sid value="2012"/>
+ <sid value="2014"/>
+ <sid value="2018"/>
+ <sid value="2022"/>
+ <sid value="2026"/>
+ <sid value="2040"/>
+ <sid value="2044"/>
+ <sid value="2046"/>
+ <sid value="2064"/>
+ <sid value="2133"/>
+ <sid value="3020"/>
+ <sid value="3226"/>
+ <sid value="3244"/>
+ <sid value="3292"/>
+ <sid value="30524"/>
+ <sid value="30635"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Leap Wireless</name>
+ <cdma/>
+ </provider>
+ <provider>
+ <name>Cricket Communications</name>
+ <gsm>
+ <network-id mcc="310" mnc="000"/>
+ </gsm>
+ <cdma/>
+ </provider>
+ <provider>
+ <name>Jump Mobile (Prepaid)</name>
+ <cdma/>
+ </provider>
+ <provider>
+ <name>MetroPCS</name>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="4269"/>
+ <sid value="4273"/>
+ <sid value="4387"/>
+ <sid value="4531"/>
+ <sid value="4533"/>
+ <sid value="4547"/>
+ <sid value="4815"/>
+ <sid value="4855"/>
+ <sid value="5007"/>
+ <sid value="5023"/>
+ <sid value="5037"/>
+ <sid value="5097"/>
+ <sid value="5167"/>
+ <sid value="5199"/>
+ <sid value="21580"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Virgin Mobile / Helio</name>
+ <cdma>
+ <sid value="4183"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Cellular South</name>
+ <cdma>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm
+ NOTE: Cellular South appears to use "Lukas, Nace, Gutierrez & Sachs, Chartered"
+ as their license administrator, but that firm also administers Rural Cellular
+ Corporation (recently bought by Verizon) as well, so SIDs counted for
+ Cellular South were found by searching the FCC database for "Cellular South",
+ looking up the returned Cellular Market Areas in the IFAST database, and from
+ the IFAST database results using SIDs attributed to "Lukas, Nace, ..."
+ -->
+ <sid value="160"/>
+ <sid value="264"/>
+ <sid value="1382"/>
+ <sid value="1394"/>
+ <sid value="1996"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>BendBroadband</name>
+ <gsm>
+ <network-id mcc="311" mnc="570"/>
+ <apn value="ISP">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTPCS (Cellular One)</name>
+ <gsm>
+ <network-id mcc="310" mnc="570"/>
+ <apn value="wapgw.chinookwireless.net">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Mid-Rivers Cellular</name>
+ <cdma>
+ <sid value="3102"/>
+ </cdma>
+ </provider>
+ <provider>
+ <!-- MVNO operating on AT&T's network -->
+ <name>Straight Talk</name>
+ <gsm>
+ <network-id mcc="310" mnc="410"/>
+ <apn value="att.mvno">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="tfdata">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Uruguay -->
+<country code="uy">
+ <provider>
+ <name>Ancel</name>
+ <gsm>
+ <network-id mcc="748" mnc="00"/>
+ <network-id mcc="748" mnc="01"/>
+ <apn value="adslmovil">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>ADSL Móvil</name>
+ <dns>200.40.30.245</dns>
+ <dns>200.40.220.245</dns>
+ </apn>
+ <apn value="prepago.ancel">
+ <plan type="prepaid"/>
+ <usage type="internet"/>
+ <name>ADSL Móvil Prepago</name>
+ <username>BAM</username>
+ <password>BAM</password>
+ </apn>
+ <apn value="gprs.ancel">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <dns>200.40.30.245</dns>
+ <dns>200.40.220.245</dns>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>mmsANCEL</name>
+ <mmsc>http://mmsc.mms.ancelutil.com.uy</mmsc>
+ <mmsproxy>200.40.246.2:3128</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Claro</name>
+ <gsm>
+ <network-id mcc="748" mnc="10"/>
+ <apn value="gprs.claro.com.uy">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G Internet</name>
+ <username>ctigprs</username>
+ <password>ctigprs999</password>
+ </apn>
+ <apn value="internet.ctimovil.com.uy">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>2G Internet</name>
+ <username>ctiweb</username>
+ <password>ctiweb999</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="748" mnc="07"/>
+ <apn value="apnumt.movistar.com.uy">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>3G Internet</name>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ <apn value="webapn.movistar.com.uy">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>2G Internet</name>
+ <username>movistar</username>
+ <password>movistar</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Uzbekistan -->
+<country code="uz">
+ <provider>
+ <name>Beeline</name>
+ <gsm>
+ <network-id mcc="434" mnc="04"/>
+ <apn value="internet.beeline.uz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>beeline</username>
+ <password>beeline</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTS (Uzdunrobita)</name>
+ <gsm>
+ <network-id mcc="434" mnc="07"/>
+ <apn value="net.mts.uz">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mts</username>
+ <password>mts</password>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Ucell</name>
+ <gsm>
+ <network-id mcc="434" mnc="05"/>
+ <apn value="internet">
+ <username/>
+ <password/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- St Vincent -->
+<country code="vc">
+ <provider>
+ <name>Digicel</name>
+ <gsm>
+ <network-id mcc="360" mnc="070"/>
+ <apn value="wap.digiceloecs.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>wapoecs</username>
+ <password>wap03oecs</password>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Venezuela -->
+<country code="ve">
+ <provider>
+ <name>Digitel TIM</name>
+ <gsm>
+ <network-id mcc="734" mnc="01"/>
+ <network-id mcc="734" mnc="02"/>
+ <network-id mcc="734" mnc="03"/>
+ <apn value="gprsweb.digitel.ve">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>57.67.127.195</dns>
+ </apn>
+ <apn value="expresate.digitel.ve">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms.412.com.ve/servlets/mms</mmsc>
+ <mmsproxy>10.99.0.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movilnet</name>
+ <gsm>
+ <network-id mcc="734" mnc="06"/>
+ <apn value="int.movilnet.com.ve">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>200.44.32.12</dns>
+ <dns>200.11.248.12</dns>
+ </apn>
+ <apn value="mm.movilnet.com.ve">
+ <usage type="mms"/>
+ <name>MMS</name>
+ <mmsc>http://mms2.movilnet.com.ve/servlets/mms</mmsc>
+ <mmsproxy>192.168.16.12:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Movistar</name>
+ <gsm>
+ <network-id mcc="734" mnc="04"/>
+ <apn value="internet.movistar.ve">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>200.35.65.3</dns>
+ <dns>200.35.65.4</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- Viet Nam -->
+<country code="vn">
+ <provider>
+ <name>MobiFone</name>
+ <gsm>
+ <network-id mcc="452" mnc="01"/>
+ <apn value="m-wap">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ <apn value="m-i090">
+ <usage type="mms"/>
+ <name>Mobifone MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://203.162.21.114/mmsc</mmsc>
+ <mmsproxy>203.162.21.114:3130</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vinaphone</name>
+ <gsm>
+ <network-id mcc="452" mnc="02"/>
+ <apn value="m3-world">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ <apn value="m3-card">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Broadband</name>
+ <username>mms</username>
+ <password>mms</password>
+ </apn>
+ <apn value="m3-mms">
+ <usage type="mms"/>
+ <name>Vinaphone MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.vinaphone.com.vn</mmsc>
+ <mmsproxy>10.1.10.46:8000</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>S-Fone</name>
+ <cdma>
+ <!-- phone number dialed appears to be 1501 not 777 (???
+ http://www.sfone.com.vn/webportal/guideMobile02_vi.html?pageNum=3&subNum=9&idxNum=091
+ -->
+ <username>S-Fone</username>
+ <!-- Assignments taken from IFAST: http://www.ifast.org/files/NationalSID.htm -->
+ <sid value="13331"/>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Viettel Mobile</name>
+ <gsm>
+ <network-id mcc="452" mnc="04"/>
+ <apn value="v-internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Mobile Internet</name>
+ </apn>
+ <apn value="e-connect">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>D-com 3G</name>
+ </apn>
+ <apn value="v-mms">
+ <usage type="mms"/>
+ <name>Viettel MMS</name>
+ <mmsc>http://mms.viettelmobile.com.vn/mms/wapenc</mmsc>
+ <mmsproxy>192.168.233.10:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vietnamobile</name>
+ <gsm>
+ <network-id mcc="452" mnc="05"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Vietnamobile MMS</name>
+ <mmsc>http://10.10.128.58/servlets/mms</mmsc>
+ <mmsproxy>10.10.128.44:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>EVNTelecom/E-Mobile</name>
+ <gsm>
+ <network-id mcc="452" mnc="08"/>
+ <apn value="e-internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>EVNTelecomNet</name>
+ </apn>
+ </gsm>
+ <cdma>
+ <username>evntelecom</username>
+ <password>evntelecom</password>
+ </cdma>
+ </provider>
+ <provider>
+ <name>Beeline VN</name>
+ <gsm>
+ <network-id mcc="452" mnc="07"/>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<!-- South Africa -->
+<country code="za">
+ <provider>
+ <name>Cell-c</name>
+ <gsm>
+ <network-id mcc="655" mnc="07"/>
+ <msisdn-query>
+ <ussd>*147*100#</ussd>
+ </msisdn-query>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*102*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.7.0.138</dns>
+ <dns>196.7.142.132</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>MTN</name>
+ <gsm>
+ <network-id mcc="655" mnc="10"/>
+ <msisdn-query>
+ <ussd>*123*888#</ussd>
+ </msisdn-query>
+ <balance-check>
+ <ussd>*141#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*141*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.11.240.241</dns>
+ <dns>209.212.97.1</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Vodacom</name>
+ <gsm>
+ <network-id mcc="655" mnc="01"/>
+ <msisdn-query>
+ <ussd>*111*501#</ussd>
+ </msisdn-query>
+ <balance-check>
+ <ussd>*100#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*100*01*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.207.40.165</dns>
+ <dns>196.43.46.190</dns>
+ </apn>
+ <apn value="unrestricted">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Unrestricted</name>
+ <dns>196.207.32.69</dns>
+ <dns>196.43.45.190</dns>
+ </apn>
+ <apn value="mms.vodacom.net">
+ <usage type="mms"/>
+ <name>Vlive!MMS</name>
+ <mmsc>http://mmsc.vodacom4me.co.za</mmsc>
+ <mmsproxy>196.6.128.13:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>Virgin Mobile</name>
+ <gsm>
+ <network-id mcc="655" mnc="07"/>
+ <balance-check>
+ <ussd>*101#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*102*CODE#</ussd>
+ </balance-top-up>
+ <apn value="vdata">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <dns>196.7.0.138</dns>
+ <dns>196.7.142.132</dns>
+ </apn>
+ </gsm>
+ </provider>
+ <provider>
+ <name>8.ta</name>
+ <gsm>
+ <network-id mcc="655" mnc="02"/>
+ <msisdn-query>
+ <ussd>*1#</ussd>
+ </msisdn-query>
+ <balance-check>
+ <ussd>*188#</ussd>
+ </balance-check>
+ <balance-top-up>
+ <ussd replacement="CODE">*188*CODE#</ussd>
+ </balance-top-up>
+ <apn value="internet">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ </apn>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>8 ta mms</name>
+ <mmsc>http://mms.8ta.com:38090/was</mmsc>
+ <mmsproxy>10.148.29.101:8080</mmsproxy>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+</serviceproviders>
+
diff --git a/src/usr/local/share/pbi-keys/pfSense-BETA.ssl b/src/usr/local/share/pbi-keys/pfSense-BETA.ssl
new file mode 100644
index 0000000..69ced3a
--- /dev/null
+++ b/src/usr/local/share/pbi-keys/pfSense-BETA.ssl
@@ -0,0 +1,14 @@
+-----BEGIN PUBLIC KEY-----
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvl/Zi/Lj5p4cofA9pCIg
+ylSFUNZAIrJHhWE4x1jHr43Ez24RbbNQu2BfsaOGaCOnxBDk6xRNHkxWjUdFQIkc
+0R5lTLDiOnuJLB4nbA1FjVdygIeiikYHPnTQO2zaBAHX0O2k/ywNds+4HeKpf29S
+7NtqIeePMt8MlSqXJdyopZynAa+EF53q/0ude9fzvpITOtSogaJ78jlr3mLQmLeF
++flXBfV6sTe7bvVseFng+SuY8iAIsQqq58QrSlPcA7O2qNBlscqfJNFrZ2OCU4nZ
+7sXKqPWtIyZqCgH8XKv0ALwaDUt/F+XoAfod8kADXqhkIafx5dnbJ1ro0hffxi8Z
+SLia6heHvxLb2Ia9S7tteC3yaSa/Assq7anKefRpEDpSJFWTI+imdjHjteNpKrYz
+8WDPl5Rn3cOYgU1n73w+O9Km2VtO7Szhi6gh+EJ6+NXOmoUA4LHhVZYtfR3wFQtu
+jWazGigk3g0kXRh/wA7YLiLHbsgNT6zAnIk34UVx9agugYEUUjpsCAKUOxUSZNx7
+H0ow1zRNaE3cyMQAuxXy4opTnls9hiS5TpN1dstxviPgNj8/udykzJyeGFRVo5Tu
+iCcmBGizyK8n+9M1O5SAPpInukK5uR2sYYJhO8B8SOQTkbsBO55nip6wDQQx2ewE
+Rsvesuw3X/Mq/5hJ2DT8StkCAwEAAQ==
+-----END PUBLIC KEY-----
diff --git a/src/usr/local/share/pfSense/post_upgrade_command b/src/usr/local/share/pfSense/post_upgrade_command
new file mode 100755
index 0000000..097bc5c
--- /dev/null
+++ b/src/usr/local/share/pfSense/post_upgrade_command
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+/etc/rc.conf_mount_rw
+
+PFSENSETYPE=`cat /etc/platform`
+
+if [ "${PFSENSETYPE}" = "pfSense" -o "${PFSENSETYPE}" = "nanobsd" ]; then
+ touch /conf/needs_package_sync
+fi
+
+# Detect interactive logins and display the shell
+detect_command='[ -n "$SSH_TTY" -o "$TERM" = "cons25" ] && exec /etc/rc.initial'
+echo "${detect_command}" > ${CVS_CO_DIR}/root/.shrc
+echo "${detect_command}" >> ${CVS_CO_DIR}/root/.profile
+
+if [ "${PFSENSETYPE}" = "nanobsd" ]; then
+ ROOT=/tmp/${1}/
+else
+ ROOT=/
+fi
+
+# Now turn on or off serial console as needed
+echo "Checking for ${ROOT}usr/local/share/pfSense/post_upgrade_command.php... " >> /conf/upgrade_log.txt
+if [ -x ${ROOT}usr/local/share/pfSense/post_upgrade_command.php ]; then
+ echo "Running ${ROOT}usr/local/share/pfSense/post_upgrade_command.php $1" >> /conf/upgrade_log.txt
+ ${ROOT}usr/local/share/pfSense/post_upgrade_command.php $1 >> /conf/upgrade_log.txt 2>&1
+fi
+
+# Remove any previous MD5 sum files
+rm -f /root/*.md5 >/dev/null 2>&1
+
+# Fixup permissions on installed files
+if [ -f ${ROOT}usr/local/share/pfSense/base.mtree ]; then
+ if [ -x "/tmp/mtree.old" ]; then
+ MTREE_BIN=/tmp/mtree.old
+ else
+ MTREE_BIN=/usr/sbin/mtree
+ fi
+ ${MTREE_BIN} -U -e -q -f ${ROOT}usr/local/share/pfSense/base.mtree -p ${ROOT} > /conf/mtree.log
+fi
+
+# Make sure to preserve existing time zone
+if [ "${PFSENSETYPE}" = "nanobsd" -a -f /etc/localtime ]; then
+ /bin/cp -p /etc/localtime ${ROOT}etc/localtime 2>/dev/null
+fi
+
+# Files may contain spaces
+oIFS=${IFS}
+IFS="
+"
+# Obsolete files - nanobsd doesn't need it since a new image is installed
+# on the other partition
+if [ "${PFSENSETYPE}" != "nanobsd" -a -f /etc/pfSense.obsoletedfiles ]; then
+ for f in $(cat /etc/pfSense.obsoletedfiles); do
+ if [ -n "${f}" -a -f "${f}" ]; then
+ rm -f "${f}"
+ elif [ -n "${f}" -a -d "${f}" ]; then
+ rm -rf "${f}"
+ fi
+ done
+fi
+
+# Restore IFS
+IFS=${oIFS}
diff --git a/src/usr/local/share/pfSense/post_upgrade_command.php b/src/usr/local/share/pfSense/post_upgrade_command.php
new file mode 100755
index 0000000..4a0215a
--- /dev/null
+++ b/src/usr/local/share/pfSense/post_upgrade_command.php
@@ -0,0 +1,31 @@
+#!/usr/local/bin/php-cgi -f
+<?php
+
+ /* upgrade embedded users serial console */
+ require_once("globals.inc");
+ require_once("config.inc");
+ require_once("functions.inc");
+
+ if (file_exists("/usr/local/bin/git") && isset($config['system']['gitsync']['synconupgrade'])) {
+ if (!empty($config['system']['gitsync']['repositoryurl'])) {
+ exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url " . escapeshellarg($config['system']['gitsync']['repositoryurl']));
+ }
+ if (!empty($config['system']['gitsync']['branch'])) {
+ system("pfSsh.php playback gitsync " . escapeshellarg($config['system']['gitsync']['branch']) . " --upgrading");
+ }
+ }
+
+ $newslicedir = "";
+ if (isset($argv[1]) && $argv[1] != "") {
+ $newslicedir = '/tmp/' . $argv[1];
+ }
+
+ if ($g['enableserial_force'] || file_exists("{$newslicedir}/enableserial_force")) {
+ $config['system']['enableserial'] = true;
+ write_config();
+ }
+
+ system("echo \"Adding serial port settings ({$newslicedir})...\" >> /conf/upgrade_log.txt");
+ setup_serial_port("upgrade", $newslicedir);
+
+?>
diff --git a/src/usr/local/share/pfSense/pre_upgrade_command b/src/usr/local/share/pfSense/pre_upgrade_command
new file mode 100644
index 0000000..2ad365f
--- /dev/null
+++ b/src/usr/local/share/pfSense/pre_upgrade_command
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+/etc/rc.conf_mount_rw
+
+# Record the previous version
+PRIOR_VERSION=`uname -r | cut -d'.' -f1`
+echo $PRIOR_VERSION > /tmp/pre_upgrade_version
+
+# De-activate sync on root filesystem. See ticket #4523
+# Back up original fstab
+/bin/cp /etc/fstab /etc/fstab.orig
+# De-activate sync on the root slice only. This will not match NanoBSD since it already has sync,noatime
+/usr/bin/sed -i '' 's/^\(\/.*[[:space:]]*\/[[:space:]]*ufs[[:space:]]*\)rw,sync\([[:space:]]*[[:digit:]][[:space:]]*[[:digit:]]\)$/\1rw\2/' /etc/fstab
+
+# Hack to workaround ticket #3749
+if [ ${PRIOR_VERSION} -le 8 ] && grep -q 'sh /etc/rc.reboot' /etc/rc.firmware; then
+ PROC=$(ps axwww | grep '/etc/rc.firmware *pfSenseupgrade')
+ PID=''
+ IMG=''
+ if [ -n "${PROC}" ]; then
+ PID=$(echo "${PROC}" | awk '{print $1}')
+ IMG=$(echo "${PROC}" | sed 's,^.*pfSenseupgrade *,,')
+ fi
+
+ if [ -n "${PID}" -a -n "${IMG}" -a -f "${IMG}" ]; then
+ cp -fp /bin/sh /tmp/sh.old
+ kill ${PID} >/dev/null 2>&1
+ kill -9 ${PID} >/dev/null 2>&1
+ sed -i '' -e 's,sh /,/tmp/sh.old /,' \
+ -e 's,/usr/sbin/mtree,/tmp/mtree.old,' /etc/rc.firmware
+ # To avoid restarting rc.firmware twice because of #4328
+ sed -i '' -e '/^restore_chflags()/, /^}/ s/mtree *-PU/mtree -P/' /etc/rc.firmware
+ /etc/rc.firmware pfSenseupgrade "${IMG}"
+ exit
+ fi
+fi
+
+# One more hack to workaround #4328
+if grep -q 'mtree *-PU' /etc/rc.firmware; then
+ PROC=$(ps axwww | grep '/etc/rc.firmware *pfSenseupgrade')
+ PID=''
+ IMG=''
+ if [ -n "${PROC}" ]; then
+ PID=$(echo "${PROC}" | awk '{print $1}')
+ IMG=$(echo "${PROC}" | sed 's,^.*pfSenseupgrade *,,')
+ fi
+
+ if [ -n "${PID}" -a -n "${IMG}" -a -f "${IMG}" ]; then
+ kill ${PID} >/dev/null 2>&1
+ kill -9 ${PID} >/dev/null 2>&1
+ sed -i '' -e '/^restore_chflags()/, /^}/ s/mtree *-PU/mtree -P/' /etc/rc.firmware
+ /etc/rc.firmware pfSenseupgrade "${IMG}"
+ exit
+ fi
+fi
+
+rm /boot/kernel/*
+
diff --git a/src/usr/local/share/protocols/100bao.pat b/src/usr/local/share/protocols/100bao.pat
new file mode 100644
index 0000000..a03a891
--- /dev/null
+++ b/src/usr/local/share/protocols/100bao.pat
@@ -0,0 +1,12 @@
+# 100bao - a Chinese P2P protocol/program - http://www.100bao.com
+# Pattern attributes: ok veryfast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/100Bao
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Pattern written by www.routerclub.com's wsgtrsys.
+# The author of this pattern says it works, but this is unconfirmed.
+
+100bao
+^\x01\x01\x05\x0a
+
diff --git a/src/usr/local/share/protocols/EAOrigin.pat b/src/usr/local/share/protocols/EAOrigin.pat
new file mode 100644
index 0000000..391be72
--- /dev/null
+++ b/src/usr/local/share/protocols/EAOrigin.pat
@@ -0,0 +1,7 @@
+# Origin powered by EA
+# zip? - Main Downloads for Games/Patches/Updates
+# User-Agents - Browsing the EA store.
+
+User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Origin/9.2.1.4399 Safari/534.34 EA Download Manager
+User-Agent: Mozilla/5.0 EA Download Manager Origin
+zip?
diff --git a/src/usr/local/share/protocols/LICENSE b/src/usr/local/share/protocols/LICENSE
new file mode 100644
index 0000000..49395f6
--- /dev/null
+++ b/src/usr/local/share/protocols/LICENSE
@@ -0,0 +1,605 @@
+You may distribute this software under either the GPLv2 or Creative
+Commons Attribution-ShareAlike 2.5. The text of each follows:
+
+***************************************************************************
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+***************************************************************************
+
+ Creative Commons Legal Code
+ Attribution-ShareAlike 2.5
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+ DAMAGES RESULTING FROM ITS USE.
+
+ License
+
+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
+ CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
+ PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
+ WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
+ PROHIBITED.
+
+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
+ AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS
+ YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF
+ SUCH TERMS AND CONDITIONS.
+
+ 1. Definitions
+ a. "Collective Work" means a work, such as a periodical issue,
+ anthology or encyclopedia, in which the Work in its entirety in
+ unmodified form, along with a number of other contributions,
+ constituting separate and independent works in themselves, are
+ assembled into a collective whole. A work that constitutes a
+ Collective Work will not be considered a Derivative Work (as
+ defined below) for the purposes of this License.
+ b. "Derivative Work" means a work based upon the Work or upon the
+ Work and other pre-existing works, such as a translation, musical
+ arrangement, dramatization, fictionalization, motion picture
+ version, sound recording, art reproduction, abridgment,
+ condensation, or any other form in which the Work may be recast,
+ transformed, or adapted, except that a work that constitutes a
+ Collective Work will not be considered a Derivative Work for the
+ purpose of this License. For the avoidance of doubt, where the
+ Work is a musical composition or sound recording, the
+ synchronization of the Work in timed-relation with a moving image
+ ("synching") will be considered a Derivative Work for the purpose
+ of this License.
+ c. "Licensor" means the individual or entity that offers the Work
+ under the terms of this License.
+ d. "Original Author" means the individual or entity who created the
+ Work.
+ e. "Work" means the copyrightable work of authorship offered under
+ the terms of this License.
+ f. "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License
+ with respect to the Work, or who has received express permission
+ from the Licensor to exercise rights under this License despite a
+ previous violation.
+ g. "License Elements" means the following high-level license
+ attributes as selected by Licensor and indicated in the title of
+ this License: Attribution, ShareAlike.
+
+ 2. Fair Use Rights. Nothing in this license is intended to reduce,
+ limit, or restrict any rights arising from fair use, first sale or
+ other limitations on the exclusive rights of the copyright owner under
+ copyright law or other applicable laws.
+
+ 3. License Grant. Subject to the terms and conditions of this License,
+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+ perpetual (for the duration of the applicable copyright) license to
+ exercise the rights in the Work as stated below:
+ a. to reproduce the Work, to incorporate the Work into one or more
+ Collective Works, and to reproduce the Work as incorporated in the
+ Collective Works;
+ b. to create and reproduce Derivative Works;
+ c. to distribute copies or phonorecords of, display publicly, perform
+ publicly, and perform publicly by means of a digital audio
+ transmission the Work including as incorporated in Collective
+ Works;
+ d. to distribute copies or phonorecords of, display publicly, perform
+ publicly, and perform publicly by means of a digital audio
+ transmission Derivative Works.
+ e. For the avoidance of doubt, where the work is a musical
+ composition:
+ i. Performance Royalties Under Blanket Licenses. Licensor waives
+ the exclusive right to collect, whether individually or via a
+ performance rights society (e.g. ASCAP, BMI, SESAC),
+ royalties for the public performance or public digital
+ performance (e.g. webcast) of the Work.
+ ii. Mechanical Rights and Statutory Royalties. Licensor waives
+ the exclusive right to collect, whether individually or via a
+ music rights society or designated agent (e.g. Harry Fox
+ Agency), royalties for any phonorecord You create from the
+ Work ("cover version") and distribute, subject to the
+ compulsory license created by 17 USC Section 115 of the US
+ Copyright Act (or the equivalent in other jurisdictions).
+ f. Webcasting Rights and Statutory Royalties. For the avoidance of
+ doubt, where the Work is a sound recording, Licensor waives the
+ exclusive right to collect, whether individually or via a
+ performance-rights society (e.g. SoundExchange), royalties for the
+ public digital performance (e.g. webcast) of the Work, subject to
+ the compulsory license created by 17 USC Section 114 of the US
+ Copyright Act (or the equivalent in other jurisdictions).
+
+ The above rights may be exercised in all media and formats whether now
+ known or hereafter devised. The above rights include the right to make
+ such modifications as are technically necessary to exercise the rights
+ in other media and formats. All rights not expressly granted by
+ Licensor are hereby reserved.
+
+ 4. Restrictions.The license granted in Section 3 above is expressly
+ made subject to and limited by the following restrictions:
+ a. You may distribute, publicly display, publicly perform, or
+ publicly digitally perform the Work only under the terms of this
+ License, and You must include a copy of, or the Uniform Resource
+ Identifier for, this License with every copy or phonorecord of the
+ Work You distribute, publicly display, publicly perform, or
+ publicly digitally perform. You may not offer or impose any terms
+ on the Work that alter or restrict the terms of this License or
+ the recipients' exercise of the rights granted hereunder. You may
+ not sublicense the Work. You must keep intact all notices that
+ refer to this License and to the disclaimer of warranties. You may
+ not distribute, publicly display, publicly perform, or publicly
+ digitally perform the Work with any technological measures that
+ control access or use of the Work in a manner inconsistent with
+ the terms of this License Agreement. The above applies to the Work
+ as incorporated in a Collective Work, but this does not require
+ the Collective Work apart from the Work itself to be made subject
+ to the terms of this License. If You create a Collective Work,
+ upon notice from any Licensor You must, to the extent practicable,
+ remove from the Collective Work any credit as required by clause
+ 4(c), as requested. If You create a Derivative Work, upon notice
+ from any Licensor You must, to the extent practicable, remove from
+ the Derivative Work any credit as required by clause 4(c), as
+ requested.
+ b. You may distribute, publicly display, publicly perform, or
+ publicly digitally perform a Derivative Work only under the terms
+ of this License, a later version of this License with the same
+ License Elements as this License, or a Creative Commons iCommons
+ license that contains the same License Elements as this License
+ (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy
+ of, or the Uniform Resource Identifier for, this License or other
+ license specified in the previous sentence with every copy or
+ phonorecord of each Derivative Work You distribute, publicly
+ display, publicly perform, or publicly digitally perform. You may
+ not offer or impose any terms on the Derivative Works that alter
+ or restrict the terms of this License or the recipients' exercise
+ of the rights granted hereunder, and You must keep intact all
+ notices that refer to this License and to the disclaimer of
+ warranties. You may not distribute, publicly display, publicly
+ perform, or publicly digitally perform the Derivative Work with
+ any technological measures that control access or use of the Work
+ in a manner inconsistent with the terms of this License Agreement.
+ The above applies to the Derivative Work as incorporated in a
+ Collective Work, but this does not require the Collective Work
+ apart from the Derivative Work itself to be made subject to the
+ terms of this License.
+ c. If you distribute, publicly display, publicly perform, or publicly
+ digitally perform the Work or any Derivative Works or Collective
+ Works, You must keep intact all copyright notices for the Work and
+ provide, reasonable to the medium or means You are utilizing: (i)
+ the name of the Original Author (or pseudonym, if applicable) if
+ supplied, and/or (ii) if the Original Author and/or Licensor
+ designate another party or parties (e.g. a sponsor institute,
+ publishing entity, journal) for attribution in Licensor's
+ copyright notice, terms of service or by other reasonable means,
+ the name of such party or parties; the title of the Work if
+ supplied; to the extent reasonably practicable, the Uniform
+ Resource Identifier, if any, that Licensor specifies to be
+ associated with the Work, unless such URI does not refer to the
+ copyright notice or licensing information for the Work; and in the
+ case of a Derivative Work, a credit identifying the use of the
+ Work in the Derivative Work (e.g., "French translation of the Work
+ by Original Author," or "Screenplay based on original Work by
+ Original Author"). Such credit may be implemented in any
+ reasonable manner; provided, however, that in the case of a
+ Derivative Work or Collective Work, at a minimum such credit will
+ appear where any other comparable authorship credit appears and in
+ a manner at least as prominent as such other comparable authorship
+ credit.
+
+ 5. Representations, Warranties and Disclaimer
+
+ UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
+ THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
+ CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+ LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
+ ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
+ THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
+ TO YOU.
+
+ 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY
+ APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY
+ LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR
+ EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
+ EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ 7. Termination
+ a. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Derivative Works or
+ Collective Works from You under this License, however, will not
+ have their licenses terminated provided such individuals or
+ entities remain in full compliance with those licenses. Sections
+ 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ b. Subject to the above terms and conditions, the license granted
+ here is perpetual (for the duration of the applicable copyright in
+ the Work). Notwithstanding the above, Licensor reserves the right
+ to release the Work under different license terms or to stop
+ distributing the Work at any time; provided, however that any such
+ election will not serve to withdraw this License (or any other
+ license that has been, or is required to be, granted under the
+ terms of this License), and this License will continue in full
+ force and effect unless terminated as stated above.
+
+ 8. Miscellaneous
+ a. Each time You distribute or publicly digitally perform the Work or
+ a Collective Work, the Licensor offers to the recipient a license
+ to the Work on the same terms and conditions as the license
+ granted to You under this License.
+ b. Each time You distribute or publicly digitally perform a
+ Derivative Work, Licensor offers to the recipient a license to the
+ original Work on the same terms and conditions as the license
+ granted to You under this License.
+ c. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability
+ of the remainder of the terms of this License, and without further
+ action by the parties to this agreement, such provision shall be
+ reformed to the minimum extent necessary to make such provision
+ valid and enforceable.
+ d. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in
+ writing and signed by the party to be charged with such waiver or
+ consent.
+ e. This License constitutes the entire agreement between the parties
+ with respect to the Work licensed here. There are no
+ understandings, agreements or representations with respect to the
+ Work not specified here. Licensor shall not be bound by any
+ additional provisions that may appear in any communication from
+ You. This License may not be modified without the mutual written
+ agreement of the Licensor and You.
+
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+
+ Except for the limited purpose of indicating to the public that the
+ Work is licensed under the CCPL, neither party will use the trademark
+ "Creative Commons" or any related trademark or logo of Creative
+ Commons without the prior written consent of Creative Commons. Any
+ permitted use will be in compliance with Creative Commons'
+ then-current trademark usage guidelines, as may be published on its
+ website or otherwise made available upon request from time to time.
+
+ Creative Commons may be contacted at http://creativecommons.org/.
diff --git a/src/usr/local/share/protocols/aim.pat b/src/usr/local/share/protocols/aim.pat
new file mode 100644
index 0000000..5c43930
--- /dev/null
+++ b/src/usr/local/share/protocols/aim.pat
@@ -0,0 +1,28 @@
+# AIM - AOL instant messenger (OSCAR and TOC)
+# Pattern attributes: good slow notsofast
+# Protocol groups: chat proprietary
+# Wiki: http://www.protocolinfo.org/wiki/AIM
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 5190
+#
+# This may also match ICQ traffic.
+#
+# This pattern has been tested and is believed to work well.
+
+aim
+# See http://gridley.res.carleton.edu/~straitm/final (and various other places)
+# The first bit matches OSCAR signon and data commands, but not sure what
+# \x03\x0b matches, but it works apparently.
+# The next three bits match various parts of the TOC signon process.
+# The third one is the magic number "*", then 0x01 for "signon", then up to four
+# bytes ("up to" because l7-filter strips out nulls) which contain a sequence
+# number (2 bytes) the data length (2 more) and 3 nulls (which don't count),
+# then 0x01 for the version number (not sure if there ever has been another
+# version)
+# The fourth one is a command string, followed by some stuff, then the
+# beginning of the "roasted" password
+
+# This pattern is too slow!
+
+^(\*[\x01\x02].*\x03\x0b|\*\x01.?.?.?.?\x01)|flapon|toc_signon.*0x
diff --git a/src/usr/local/share/protocols/aimwebcontent.pat b/src/usr/local/share/protocols/aimwebcontent.pat
new file mode 100644
index 0000000..bc9a22d
--- /dev/null
+++ b/src/usr/local/share/protocols/aimwebcontent.pat
@@ -0,0 +1,10 @@
+# AIM web content - ads/news content downloaded by AOL Instant Messenger
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: chat document_retrieval proprietary
+# Wiki: http://www.protocolinfo.org/wiki/AIM
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+
+aimwebcontent
+user-agent:aim/
diff --git a/src/usr/local/share/protocols/any.pat b/src/usr/local/share/protocols/any.pat
new file mode 100644
index 0000000..56d8134
--- /dev/null
+++ b/src/usr/local/share/protocols/any.pat
@@ -0,0 +1,8 @@
+# Unknown - Dummy pattern for old unmatched connections.
+
+unknown
+# This pattern is ignored by the kernel. It sees that the "protocol" is
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# "unknown" and always returns unmatched for connections that are still
+# being tested.
+.
diff --git a/src/usr/local/share/protocols/applejuice.pat b/src/usr/local/share/protocols/applejuice.pat
new file mode 100644
index 0000000..eb552dc
--- /dev/null
+++ b/src/usr/local/share/protocols/applejuice.pat
@@ -0,0 +1,12 @@
+# Apple Juice - P2P filesharing - http://www.applejuicenet.de
+# Pattern attributes: great veryfast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/AppleJuice
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested with the Linux version (version
+# 0,29,142,229). It matches search reqests and file transfers.
+
+applejuice
+# this pattern extracted from ipp2p, by Eicke Friedrich.
+^ajprot\x0d\x0a
diff --git a/src/usr/local/share/protocols/ares.pat b/src/usr/local/share/protocols/ares.pat
new file mode 100644
index 0000000..32dc70d
--- /dev/null
+++ b/src/usr/local/share/protocols/ares.pat
@@ -0,0 +1,63 @@
+# Ares - P2P filesharing - http://aresgalaxy.sf.net
+# Pattern attributes: good veryfast fast undermatch
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/Ares
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This pattern catches only client-server connect messages. This is
+# sufficient for blocking, but not for shaping, since it doesn't catch
+# the actual file transfers (see below).
+
+# Original pattern by Brandon Enright <bmenrigh at the server known as ucsd.edu>
+
+# This pattern has been tested with Ares 1.8.8.2998.
+
+ares
+# regular expression madness: "[]Z]" means ']' or 'Z'.
+^\x03[]Z].?.?\x05$
+
+# It appears that the general packet format is:
+# - Two byte little endian integer giving the data length
+# - One byte packet type
+# - data
+#
+# Login packets (TCP) have the following format:
+# - \x03\x00 (the length appears to always be 3)
+# - \x5a - The login packet type.
+# The source code suggests that for supernodes \x5d is used instead.
+# - Three more bytes. I don't know the meaning of these, but for me they
+# are always \x06\x06\x05 (in Ares 1.8.8.2998). From the comments in IPP2P,
+# it seems that they are not always exactly that, but seem to always end in
+# \x05.
+#
+# Search packets have the following format:
+# - Two byte little endian integer giving the data length
+# A single two letter word make this \x0a
+# The biggest I could get it was \x4f
+# - Packet type = \x09
+# - One byte document type:
+# - "all" = 00
+# - "audio" = 01
+# - "software" = 03
+# - "video" = 05
+# - "document" = 06
+# - "image" = 07
+# - "other" = 08
+# - \x0f - I don't know what this means, but it is always this for me
+# - Two bytes of unknown meaning that change
+# - Some number search words:
+# - \x14 - I don't know what this means, but it is always this for me
+# - One byte length of the first search word
+# Between 2 and \x14 in my tests with Ares 1.8.8.2998
+# It ignores single letter words and truncates ones longer than \x14
+# - Two bytes of unknown meaning that change
+# - The search word (not null terminated)
+# This was all investigated by searching for strings in "all". Searches
+# can also be performed in "title" and "author". I'm not going to
+# bother to research these because I new realize that searches are done
+# on the same TCP connection as the login packets, so there is no need
+# to match them separately.
+#
+# File transfers appear to be encrypted or at least obfuscated. (The
+# files themselves, at least, are not transmitted in the clear.) I
+# haven't found any patterns.
diff --git a/src/usr/local/share/protocols/armagetron.pat b/src/usr/local/share/protocols/armagetron.pat
new file mode 100644
index 0000000..a032410
--- /dev/null
+++ b/src/usr/local/share/protocols/armagetron.pat
@@ -0,0 +1,12 @@
+# Armagetron Advanced - open source Tron/snake based multiplayer game
+# Pattern attributes: good slow notsofast
+# Protocol groups: open_source game
+# Wiki: http://protocolinfo.org/wiki/Armagetron
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Contributed to protocolinfo.org, possibly by joda.bot, who says "The
+# filter matches the initial transfer of configuration data. Very early
+# versions might not transfer the CYCLE_ Settings (before 0.2.5.x)."
+
+armagetron
+YCLC_E|CYEL
diff --git a/src/usr/local/share/protocols/audiogalaxy.pat b/src/usr/local/share/protocols/audiogalaxy.pat
new file mode 100644
index 0000000..db1999a
--- /dev/null
+++ b/src/usr/local/share/protocols/audiogalaxy.pat
@@ -0,0 +1,19 @@
+# Audiogalaxy - (defunct) Peer to Peer filesharing
+# Pattern attributes: ok fast fast
+# Protocol groups: p2p obsolete
+# Wiki: http://protocolinfo.org/wiki/Audiogalaxy
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# http://www.movspclr.co.uk/info/agprotocol.html
+#
+# This pattern is untested.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/Audiogalaxy
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+
+audiogalaxy
+# (magic cookie that starts conversations)|(magic cookie that starts
+# 0.606W/0.608W client/server conversations and a string that should always
+# appear in login messages)
+^(\x45\x5f\xd0\xd5|\x45\x5f.*0.60(6|8)W)
diff --git a/src/usr/local/share/protocols/battlefield1942.pat b/src/usr/local/share/protocols/battlefield1942.pat
new file mode 100644
index 0000000..ed7a7bf
--- /dev/null
+++ b/src/usr/local/share/protocols/battlefield1942.pat
@@ -0,0 +1,14 @@
+# Battlefield 1942 - An EA game
+# Pattern attributes: ok veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Battlefield_1942
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Contributed by Myles Uyema <mylesuyema AT gmail.com>
+#
+# This pattern has only been tested by one person.
+
+# tested on two original EA battlefield 1942 servers
+# matches the first two packets of joining a server
+battlefield1942
+^\x01\x11\x10\|\xf8\x02\x10\x40\x06
diff --git a/src/usr/local/share/protocols/battlefield2.pat b/src/usr/local/share/protocols/battlefield2.pat
new file mode 100644
index 0000000..e2d8791
--- /dev/null
+++ b/src/usr/local/share/protocols/battlefield2.pat
@@ -0,0 +1,26 @@
+# Battlefield 2 - An EA game.
+# Pattern attributes: ok slow notsofast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Battlefield_2
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is unconfirmed except implicitly by a comment on protocolinfo.
+
+battlefield2
+# gameplay|account-login|server browsing/information
+# See http://protocolinfo.org/wiki/Battlefield_2
+# Can we put a ^ on the last branch? If so, nosofast --> veryfast
+
+# 193.85.217.35 on protocolinfo says:
+# The first part of the pattern, \x11\x20\x01\xa0\x98\x11, has to be
+# modified for different version of Battlefield 2. The gameplay part of
+# pattern for BF2 v1.4 is \x11\x20\x01\x30\xb9\x10\x11, and for BF2
+# v1.41 is \x11\x20\x01\x50\xb9\x10\x11
+#
+# Rather than put all of those in, I've just gone with "...?" in the
+# middle.
+
+^(\x11\x20\x01...?\x11|\xfe\xfd.?.?.?.?.?.?(\x14\x01\x06|\xff\xff\xff))|[]\x01].?battlefield2
+
+# Pattern prior to 193.85.217.35's comment on protocolinfo:
+#^(\x11\x20\x01\xa0\x98\x11|\xfe\xfd.?.?.?.?.?.?(\x14\x01\x06|\xff\xff\xff))|[]\x01].?battlefield2
diff --git a/src/usr/local/share/protocols/battlefield2142.pat b/src/usr/local/share/protocols/battlefield2142.pat
new file mode 100644
index 0000000..4c0e42b
--- /dev/null
+++ b/src/usr/local/share/protocols/battlefield2142.pat
@@ -0,0 +1,14 @@
+# Battlefield 2142 - An EA game.
+# Pattern attributes: ok fast fast
+# Protocol groups: proprietary game
+# Wiki: http://protocolinfo.org/wiki/Battlefield_2142
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Submitted by Telsin. Not confirmed.
+
+battlefield2142
+# gameplay|account-login|server browsing/information
+# Can't put a ^ on the last branch: it fails to match if you do.
+# This branch seems to matter very rarely, though
+^(\x11\x20\x01\x90\x50\x64\x10|\xfe\xfd.?.?.?\x18|[\x01\\].?battlefield2)
+
diff --git a/src/usr/local/share/protocols/bgp.pat b/src/usr/local/share/protocols/bgp.pat
new file mode 100644
index 0000000..61e417f
--- /dev/null
+++ b/src/usr/local/share/protocols/bgp.pat
@@ -0,0 +1,19 @@
+# BGP - Border Gateway Protocol - RFC 1771
+# Pattern attributes: ok veryfast fast
+# Protocol groups: networking ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/BGP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is UNTESTED.
+
+bgp
+# "After a transport protocol connection is established, the first
+# message sent by each side is an OPEN message."
+# "If the Type of the message is OPEN, or if the Authentication Code used
+# in the OPEN message of the connection is zero, then the Marker must be
+# all ones."
+# Then the 2 byte length field, then the 1 byte type field (1 = OPEN).
+# Then the BGP version: 3 was RFC'd in 1991, 4 was RFC'd in 1995.
+# Could keep going, but that should be sufficient.
+^\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff..?\x01[\x03\x04]
+
diff --git a/src/usr/local/share/protocols/biff.pat b/src/usr/local/share/protocols/biff.pat
new file mode 100644
index 0000000..91e8bbf
--- /dev/null
+++ b/src/usr/local/share/protocols/biff.pat
@@ -0,0 +1,16 @@
+# Biff - new mail notification
+# Pattern attributes: good fast fast undermatch overmatch
+# Protocol groups: mail
+# Wiki: http://www.protocolinfo.org/wiki/Biff
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 512
+#
+# This pattern is completely untested.
+
+biff
+# This is a rare case where we will specify a $ (end of line), since
+# this is the entirety of the communication.
+# something that looks like a username, an @, a number.
+# won't catch usernames that have strange characters in them.
+^[a-z][a-z0-9]+@[1-9][0-9]+$
diff --git a/src/usr/local/share/protocols/bittorrent.pat b/src/usr/local/share/protocols/bittorrent.pat
new file mode 100644
index 0000000..c66f867
--- /dev/null
+++ b/src/usr/local/share/protocols/bittorrent.pat
@@ -0,0 +1,25 @@
+# Bittorrent - P2P filesharing / publishing tool - http://www.bittorrent.com
+# Pattern attributes: good slow notsofast undermatch
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/Bittorrent
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+# It will, however, not work on bittorrent streams that are encrypted, since
+# it's impossible to match (well) encrypted data.
+
+bittorrent
+
+# Does not attempt to match the HTTP download of the tracker
+# 0x13 is the length of "bittorrent protocol"
+# Second two bits match UDP wierdness
+# Next bit matches something Azureus does
+# Ditto on the next bit. Could also match on "user-agent: azureus", but that's in the next
+# packet and perhaps this will match multiple clients.
+# bitcomet-specific strings contributed by liangjun.
+
+# This is not a valid GNU basic regular expression (but that's ok).
+^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=|get /announce\?info_hash=|get /client/bitcomet/|GET /data\?fid=)|d1:ad2:id20:|\x08'7P\)[RP]
+
+# This pattern is "fast", but won't catch as much
+#^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=)
diff --git a/src/usr/local/share/protocols/chikka.pat b/src/usr/local/share/protocols/chikka.pat
new file mode 100644
index 0000000..a97ef28
--- /dev/null
+++ b/src/usr/local/share/protocols/chikka.pat
@@ -0,0 +1,17 @@
+# Chikka - SMS service which can be used without phones - http://chikka.com
+# Pattern attributes: good fast fast superset
+# Protocol groups: proprietary chat
+# Wiki: http://www.protocolinfo.org/wiki/Chikka
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Tested with Chikka Javalite on 14 Jan 2007.
+# The login and chat use the same TCP connection.
+
+# "Kamusta" means "Hello" in Tagalog, apparently, so that will probably
+# stay the same. I've only seen v1.2, but I've given it some leeway for
+# past and future versions.
+
+# Chikka uses CIMD as part of the login process, see cimd.pat
+
+chikka
+^CTPv1\.[123] Kamusta.*\x0d\x0a$
diff --git a/src/usr/local/share/protocols/cimd.pat b/src/usr/local/share/protocols/cimd.pat
new file mode 100644
index 0000000..f508350
--- /dev/null
+++ b/src/usr/local/share/protocols/cimd.pat
@@ -0,0 +1,19 @@
+# Computer Interface to Message Distribution, an SMSC protocol by Nokia
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: proprietary chat
+# Wiki: http://www.protocolinfo.org/wiki/CIMD
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# I don't know whether CIMD is ever found by itself in a TCP connection.
+# I have only seen it myself as part of the Chikka login process, in
+# which the second and third packets (at least) are CIMD. So I am not
+# using a '^' at the beginning.
+#
+# This pretty well explains the pattern:
+# http://en.wikipedia.org/w/index.php?title=CIMD&oldid=42707583
+# However, Chikka does NOT terminate the last field with a tab.
+#
+# Tested with Chikka Javalite on 14 Jan 2007.
+
+cimd
+\x02[0-4][0-9]:[0-9]+.*\x03$
diff --git a/src/usr/local/share/protocols/ciscovpn.pat b/src/usr/local/share/protocols/ciscovpn.pat
new file mode 100644
index 0000000..d3dd7a6
--- /dev/null
+++ b/src/usr/local/share/protocols/ciscovpn.pat
@@ -0,0 +1,11 @@
+# Cisco VPN - VPN client software to a Cisco VPN server
+# Pattern attributes: ok veryfast fast
+# Protocol groups: remote_access proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Cisco_VPN
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern contributed by Myles Uyema <myles AT uyema.net>
+
+ciscovpn
+^\x01\xf4\x01\xf4
+
diff --git a/src/usr/local/share/protocols/citrix.pat b/src/usr/local/share/protocols/citrix.pat
new file mode 100644
index 0000000..fa73ce1
--- /dev/null
+++ b/src/usr/local/share/protocols/citrix.pat
@@ -0,0 +1,12 @@
+# Citrix ICA - proprietary remote desktop application - http://citrix.com
+# Pattern attributes: marginal notsofast notsofast
+# Protocol groups: remote_access proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Citrix
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is UNTESTED.
+
+# This is based on decode_citrix in dsniff 2.4.
+
+citrix
+\x32\x26\x85\x92\x58
diff --git a/src/usr/local/share/protocols/code_red.pat b/src/usr/local/share/protocols/code_red.pat
new file mode 100644
index 0000000..df0beee
--- /dev/null
+++ b/src/usr/local/share/protocols/code_red.pat
@@ -0,0 +1,8 @@
+# Code Red - a worm that attacks Microsoft IIS web servers
+# Pattern attributes: ok fast notsofast subset
+# Protocol groups: worm
+# Wiki: http://www.protocolinfo.org/wiki/CodeRed
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+code_red
+/default\.ida\?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a
diff --git a/src/usr/local/share/protocols/counterstrike-source.pat b/src/usr/local/share/protocols/counterstrike-source.pat
new file mode 100644
index 0000000..8ebd627
--- /dev/null
+++ b/src/usr/local/share/protocols/counterstrike-source.pat
@@ -0,0 +1,42 @@
+# Counterstrike (using the new "Source" engine) - network game
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Counter-Strike
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# By adam.randazzoATgmail.com
+
+counterstrike-source
+^\xff\xff\xff\xff.*cstrikeCounter-Strike
+
+# These games use Steam, which is developed by Valve Software.
+#
+# This was based off of the following captured data from ethereal:
+# --Source--
+# 0000 00 11 09 2a a8 79 00 13 10 2c 3f d7 08 00 45 20 ...*.y...,?...E
+# 0010 00 72 b9 f6 00 00 6b 11 b6 78 18 0e 04 cc c0 a8 .r....k..x......
+# 0020 01 6a 69 87 04 65 00 5e 01 ac ff ff ff ff 49 07 .ji..e.^......I.
+# 0030 54 4a 27 73 20 50 6c 61 63 65 20 6f 66 20 50 61 TJ's Place of Pa
+# 0040 69 6e 00 64 65 5f 70 69 72 61 6e 65 73 69 00 63 in.de_piranesi.c
+# 0050 73 74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 strike.Counter-S
+# 0060 74 72 69 6b 65 3a 20 53 6f 75 72 63 65 00 dc 00 trike: Source...
+# 0070 08 10 06 64 77 00 00 31 2e 30 2e 30 2e 31 38 00 ...dw..1.0.0.18.
+# 0080
+#
+# --1.6--
+# 0000 00 11 09 2a a8 79 00 13 10 2c 3f d7 08 00 45 00 ...*.y...,?...E.
+# 0010 00 8e c4 1a 00 00 76 11 b3 85 08 09 02 fa c0 a8 ......v.........
+# 0020 01 14 69 91 04 37 00 7a c9 90 ff ff ff ff 6d 38 ..i..7.z......m8
+# 0030 2e 39 2e 32 2e 32 35 30 3a 32 37 30 32 35 00 49 .9.2.250:27025.I
+# 0040 50 20 2d 20 43 6c 61 6e 20 73 65 72 76 65 72 00 P - Clan server.
+# 0050 64 65 5f 64 75 73 74 32 00 63 73 74 72 69 6b 65 de_dust2.cstrike
+# 0060 00 43 6f 75 6e 74 65 72 2d 53 74 72 69 6b 65 00 .Counter-Strike.
+# 0070 0a 0c 2f 64 77 00 01 77 77 77 2e 63 6f 75 6e 74 ../dw..www.count
+# 0080 65 72 2d 73 74 72 69 6b 65 2e 6e 65 74 00 00 00 er-strike.net...
+# 0090 01 00 00 00 00 9e f7 0a 00 01 00 00 ............
+
+
+# Old pattern. (Adam Randazzo says "CS 1.6 and CS: Source are the
+# only two versions that are playable on the Internet since Valve
+# disabled the WON system in favor of steam.")
+# cs .*dl.www.counter-strike.net
diff --git a/src/usr/local/share/protocols/cvs.pat b/src/usr/local/share/protocols/cvs.pat
new file mode 100644
index 0000000..fc084d3
--- /dev/null
+++ b/src/usr/local/share/protocols/cvs.pat
@@ -0,0 +1,14 @@
+# CVS - Concurrent Versions System
+# Pattern attributes: good veryfast fast
+# Protocol groups: version_control open_source
+# Wiki: http://www.protocolinfo.org/wiki/CVS
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+cvs
+
+# Matches pserver login. AUTH is for actually starting the protocol
+# VERIFICATION is for authenticating without starting the protocols
+# and GSSAPI is for using security services such as kerberos.
+# http://www.loria.fr/~molli/cvs/doc/cvsclient_3.html
+
+^BEGIN (AUTH|VERIFICATION|GSSAPI) REQUEST\x0a
diff --git a/src/usr/local/share/protocols/dayofdefeat-source.pat b/src/usr/local/share/protocols/dayofdefeat-source.pat
new file mode 100644
index 0000000..42b24bb
--- /dev/null
+++ b/src/usr/local/share/protocols/dayofdefeat-source.pat
@@ -0,0 +1,11 @@
+# Day of Defeat: Source - game (Half-Life 2 mod) - http://www.valvesoftware.com
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Day_of_Defeat:Source
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# By Clayton Macleod <cherry twist at gmail dot com>
+
+dayofdefeat-source
+^\xff\xff\xff\xff.*dodDay of Defeat
+
diff --git a/src/usr/local/share/protocols/dazhihui.pat b/src/usr/local/share/protocols/dazhihui.pat
new file mode 100644
index 0000000..032440c
--- /dev/null
+++ b/src/usr/local/share/protocols/dazhihui.pat
@@ -0,0 +1,11 @@
+# Dazhihui - stock analysis and trading; Chinese - http://www.gw.com.cn
+# Pattern attributes: fast fast ok
+# Protocol groups:
+# Wiki: http://www.protocolinfo.org/wiki/Dazhihui
+# Copyright (C) 2009 Matthew Strait; See ../LICENSE
+
+# Pattern contributed by liangjun without comment.
+
+dazhihui
+^(longaccoun|qsver2auth|\x35[57]\x30|\+\x10\*)
+
diff --git a/src/usr/local/share/protocols/dhcp.pat b/src/usr/local/share/protocols/dhcp.pat
new file mode 100644
index 0000000..426480d
--- /dev/null
+++ b/src/usr/local/share/protocols/dhcp.pat
@@ -0,0 +1,36 @@
+# DHCP - Dynamic Host Configuration Protocol - RFC 1541
+# Pattern attributes: good veryfast fast
+# Protocol groups: networking ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/DHCP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on ports 67 (server) and 68 (client)
+#
+# Also matches BOOTP (Bootstrap Protocol (RFC 951)) in the case that
+# the "vendor specific options" are used (these options were made standard
+# for DHCP).
+#
+# This pattern is lightly tested.
+
+dhcp
+^[\x01\x02][\x01- ]\x06.*c\x82sc
+
+# Let's break that down:
+#
+# (\x01|\x02) is for BOOTREQUEST or BOOTREPLY
+# Is there a demand for doing these separately? The Packeteer does.
+#
+# [\x01-\x20] is for any of the hardware address types listed at
+# (http://www.iana.org/assignments/arp-parameters) and hopefully faster
+# ethernets too (100, 1000 and 10000mb) as well (do they share the 10mb
+# number?).
+#
+# \x06 for "hardware address length = 6 bytes". Does anyone use other lengths
+# these days? If so, this pattern won't match it as it stands.
+#
+# .* covers the hops, xid, secs, flags, ciaddr, yiaddr, siaddr, giaddr,
+# chaddr, sname and file fields. While this can't really be "any number
+# of characters" long, it doesn't seem worth it to count.
+# Can we make this more specific by restricting the number of hops or seconds?
+#
+# 0x63825363 is the "magic cookie" which begins the DHCP options field.
diff --git a/src/usr/local/share/protocols/directconnect.pat b/src/usr/local/share/protocols/directconnect.pat
new file mode 100644
index 0000000..13be4a1
--- /dev/null
+++ b/src/usr/local/share/protocols/directconnect.pat
@@ -0,0 +1,14 @@
+# Direct Connect - P2P filesharing - http://www.neo-modus.com
+# Pattern attributes: good fast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Direct_Connect
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Direct Connect "hubs" listen on port 411
+# http://www.dcpp.net/wiki/
+# I've verified that this pattern can be used to limit direct connect
+# bandwidth using DC:PRO 0.2.3.149R11.
+
+directconnect
+# client-to-client handshake|client-to-hub login, hub speaking|client-to-hub login, client speaking
+^(\$mynick |\$lock |\$key )
diff --git a/src/usr/local/share/protocols/dns.pat b/src/usr/local/share/protocols/dns.pat
new file mode 100644
index 0000000..c351831
--- /dev/null
+++ b/src/usr/local/share/protocols/dns.pat
@@ -0,0 +1,63 @@
+# DNS - Domain Name System - RFC 1035
+# Pattern attributes: great slow fast
+# Protocol groups: networking ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/DNS
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Thanks to Sebastien Bechet <s.bechet AT av7.net> for TLD detection
+# improvements
+
+# While RFC 2181 says "Occasionally it is assumed that the Domain Name
+# System serves only the purpose of mapping Internet host names to data,
+# and mapping Internet addresses to host names. This is not correct, the
+# DNS is a general (if somewhat limited) hierarchical database, and can
+# store almost any kind of data, for almost any purpose.", we will assume
+# just that, because that represents the vast majority of DNS traffic.
+
+# The packet starts with a 2 byte random ID number and 2 bytes of flags that
+# aren't easy to match on.
+
+# The first thing that is matchable is QDCOUNT, the number of queries.
+# Despite the fact that you can apparently ask for up to 65535
+# things at a time, usually you only ask for one and I doubt you ever ask for
+# zero. Let's allow up to two, just in case (even though I can't find any
+# situation that generates more than one).
+
+# Next comes the ANCOUNT, NSCOUNT, and ARCOUNT fields, which could be null
+# or some smallish number, not matchable except by length (up to 6)
+
+# The next matchable thing is the query address. The first byte indicates the
+# length of the first part of the address, which is limited to 63 (0x3F == '?').
+# The next byte has to be a letter (for domain names) or number (for reverse lookups).
+# Then there can be an combination of
+# letters, digits, hyphens, and 0x01-0x3F length markers.
+# Then we check for the presence of a top-level-domain at some later point.
+# This is indicated by a 0x02-0x06 and at least two letters, followed by no
+# more than four more letters.
+# Note that this will miss a very few queries that are for a TLD alone.
+# i.e. "host museum" (195.7.77.17)
+#
+# http://www.icann.org/tlds http://www.iana.org/cctld/cctld-whois.htm
+
+# next is the QTYPE field, which has valid values 1-16 (although this
+# could probably be restricted further since many are rare) and \x1c for
+# IPv6 (and maybe more?). It should follow immediately after the TLD
+# (and some stripped-out nulls)
+
+# next is QCLASS, which has valid values 1-4 and 255, except 2 is never used.
+# I'm not sure if 3 and 4 are used, so I'll include them. 1=Internet 255=any
+
+# If we wanted to match queries and responses separately, there could be
+# more specifics after this for the responses.
+
+dns
+# here's a sane way of doing it
+^.?.?.?.?[\x01\x02].?.?.?.?.?.?[\x01-?][a-z0-9][\x01-?a-z]*[\x02-\x06][a-z][a-z][fglmoprstuvz]?[aeop]?(um)?[\x01-\x10\x1c][\x01\x03\x04\xFF]
+
+# This way assumes that TLDs are any alpha string 2-6 characters long.
+# If TLDs are added, this is a good fallback.
+#^.?.?.?.?[\x01\x02].?.?.?.?.?.?[\x01-?][a-z0-9][\x01-?a-z]*[\x02-\x06][a-z][a-z][a-z]?[a-z]?[a-z]?[a-z]?[\x01-\x10][\x01\x03\x04\xFF]
+
+# If you have more processing power than me, you can substitute this for
+# the [a-z][a-z][a-z]?[a-z]?[a-z]?[a-z]?
+#(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|arpa|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)
diff --git a/src/usr/local/share/protocols/doom3.pat b/src/usr/local/share/protocols/doom3.pat
new file mode 100644
index 0000000..7d32d6f
--- /dev/null
+++ b/src/usr/local/share/protocols/doom3.pat
@@ -0,0 +1,10 @@
+# Doom 3 - computer game
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Doom
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Thanks to Clayton Macleod (cherrytwist at gmail.com).
+
+doom3
+^\xff\xffchallenge
diff --git a/src/usr/local/share/protocols/edonkey.pat b/src/usr/local/share/protocols/edonkey.pat
new file mode 100644
index 0000000..bc2522e
--- /dev/null
+++ b/src/usr/local/share/protocols/edonkey.pat
@@ -0,0 +1,37 @@
+# eDonkey2000 - P2P filesharing - http://edonkey2000.com and others
+# Pattern attributes: good fast fast overmatch
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/EDonkey
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Tested recently (April/May 2006) with eMule 0.47a and eDonkey2000 1.4
+# and a long time ago with something else.
+#
+# In addition to matching what you might expect, this matches much of
+# what eMule does when you tell it to only connect to the KAD network.
+# I don't quite know what to make of this.
+
+# Thanks to Matt Skidmore <fox AT woozle.org>
+
+edonkey
+
+# http://gd.tuwien.ac.at/opsys/linux/sf/p/pdonkey/eDonkey-protocol-0.6
+#
+# In addition to \xe3, \xc5 and \xd4, I see a lot of \xe5.
+# As of April 2006, I also see some \xe4.
+#
+# God this is a mess. What an irritating protocol.
+# This will match about 2% of streams with random data in them!
+# (But fortunately much fewer than 2% of streams that are other protocols.
+# You can test this with the data in ../testing/)
+
+^[\xc5\xd4\xe3-\xe5].?.?.?.?([\x01\x02\x05\x14\x15\x16\x18\x19\x1a\x1b\x1c\x20\x21\x32\x33\x34\x35\x36\x38\x40\x41\x42\x43\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58[\x60\x81\x82\x90\x91\x93\x96\x97\x98\x99\x9a\x9b\x9c\x9e\xa0\xa1\xa2\xa3\xa4]|\x59................?[ -~]|\x96....$)
+
+# matches everything and too much
+# ^(\xe3|\xc5|\xd4)
+
+# ipp2p essentially uses "\xe3....\x47", which doesn't seem at all right to me.
+
+# bandwidtharbitrator uses
+# e0.*@.*6[a-z].*p$|e0.*@.*[a-z]6[a-z].*p0$|e.*@.*[0-9]6.*p$|emule|edonkey
+# no comments to explain what all the mush is, of course...
diff --git a/src/usr/local/share/protocols/exe.pat b/src/usr/local/share/protocols/exe.pat
new file mode 100644
index 0000000..0a16e2a
--- /dev/null
+++ b/src/usr/local/share/protocols/exe.pat
@@ -0,0 +1,20 @@
+# Executable - Microsoft PE file format.
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# Thanks to Brandon Enright [bmenrighATucsd.edu]
+
+# This pattern doesn't techincally match the PE file format but rather the
+# MZ stub program Microsoft uses for backwards compatibility with DOS.
+# That means this will correctly match DOS executables too.
+
+exe
+# There are two different stubs used depending on the compiler/packer.
+# Numerous NULL bytes have been stripped from this pattern.
+
+# This pattern may be more efficient:
+# \x4d\x5a\x90\x03\x04|\x4d\x5a\x50\x02\x04
+
+# This is easier to understand:
+\x4d\x5a(\x90\x03|\x50\x02)\x04
diff --git a/src/usr/local/share/protocols/fasttrack.pat b/src/usr/local/share/protocols/fasttrack.pat
new file mode 100644
index 0000000..6ed8ff1
--- /dev/null
+++ b/src/usr/local/share/protocols/fasttrack.pat
@@ -0,0 +1,23 @@
+# FastTrack - P2P filesharing (Kazaa, Morpheus, iMesh, Grokster, etc)
+# Pattern attributes: good slow notsofast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Fasttrack
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Tested with Kazaa Lite Resurrection 0.0.7.6F
+#
+# This appears to match the download connections well, but not the search
+# connections (I think they are encrypted :-( ).
+
+fasttrack
+# while this is a valid http request, this will be caught because
+# the http pattern matches the response (and therefore the next packet)
+# Even so, it's best to put this match earlier in the chain.
+# http://cvs.berlios.de/cgi-bin/viewcvs.cgi/gift-fasttrack/giFT-FastTrack/PROTOCOL?rev=HEAD&content-type=text/vnd.viewcvs-markup
+
+# This pattern is kinda slow, but not too bad.
+^get (/.download/[ -~]*|/.supernode[ -~]|/.status[ -~]|/.network[ -~]*|/.files|/.hash=[0-9a-f]*/[ -~]*) http/1.1|user-agent: kazaa|x-kazaa(-username|-network|-ip|-supernodeip|-xferid|-xferuid|tag)|^give [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]?[0-9]?[0-9]?
+
+# This isn't much faster:
+#^get (/.download/.*|/.supernode.|/.status.|/.network.*|/.files|/.hash=[0-9a-f]*/.*) http/1.1|user-agent: kazaa|x-kazaa(-username|-network|-ip|-supernodeip|-xferid|-xferuid|tag)|^give [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]?[0-9]?[0-9]?
+
diff --git a/src/usr/local/share/protocols/finger.pat b/src/usr/local/share/protocols/finger.pat
new file mode 100644
index 0000000..f567f8c
--- /dev/null
+++ b/src/usr/local/share/protocols/finger.pat
@@ -0,0 +1,15 @@
+# Finger - User information server - RFC 1288
+# Pattern attributes: good slow slow undermatch overmatch
+# Protocol groups: ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/Finger
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 79
+#
+# This pattern is lightly tested.
+
+finger
+# The first matches the client request, which should look like a username.
+# The second matches the usual UNIX reply (but remember that they are
+# allowed to say whatever they want)
+^[a-z][a-z0-9\-_]+\x0d\x0a|login: [\x09-\x0d -~]* name: [\x09-\x0d -~]* Directory:
diff --git a/src/usr/local/share/protocols/flash.pat b/src/usr/local/share/protocols/flash.pat
new file mode 100644
index 0000000..23e5d74
--- /dev/null
+++ b/src/usr/local/share/protocols/flash.pat
@@ -0,0 +1,18 @@
+# Flash - Macromedia Flash.
+# Pattern attributes: good slow notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# Thanks to Brandon Enright {bmenrigh AT ucsd.edu} and chinalantian at
+# 126 dot com
+
+# Macromedia spec:
+# http://download.macromedia.com/pub/flash/flash_file_format_specification.pdf
+# See also:
+# http://www.digitalpreservation.gov/formats/fdd/fdd000130.shtml
+# http://osflash.org/flv
+
+flash
+# FWS = uncompressed, CWS = compressed, next byte is version number
+# FLV = video
+[FC]WS[\x01-\x09]|FLV\x01\x05\x09
diff --git a/src/usr/local/share/protocols/freenet.pat b/src/usr/local/share/protocols/freenet.pat
new file mode 100644
index 0000000..c62ad57
--- /dev/null
+++ b/src/usr/local/share/protocols/freenet.pat
@@ -0,0 +1,10 @@
+# Freenet - Anonymous information retrieval - http://freenetproject.org
+# Pattern attributes: poor veryfast fast
+# Protocol groups: p2p document_retrieval open_source
+# Wiki: http://www.protocolinfo.org/wiki/Freenet
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+freenet
+# Freenet is intentionally hard to identify...
+# This is empirical, only tested on one computer, and unlikely to work anymore.
+^\x01[\x08\x09][\x03\x04]
diff --git a/src/usr/local/share/protocols/ftp.pat b/src/usr/local/share/protocols/ftp.pat
new file mode 100644
index 0000000..44d97c4
--- /dev/null
+++ b/src/usr/local/share/protocols/ftp.pat
@@ -0,0 +1,46 @@
+# FTP - File Transfer Protocol - RFC 959
+# Pattern attributes: great notsofast fast
+# Protocol groups: document_retrieval ietf_internet_standard
+# Wiki: http://protocolinfo.org/wiki/FTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 21. Note that the data stream is on a dynamically
+# assigned port, which means that you will need the FTP connection
+# tracking module in your kernel to usefully match FTP data transfers.
+#
+# This pattern is well tested.
+#
+# Handles the first two things a server should say:
+#
+# First, the server says it's ready by sending "220". Most servers say
+# something after 220, even though they don't have to, and it usually
+# includes the string "ftp" (l7-filter is case insensitive). This
+# includes proftpd, vsftpd, wuftpd, warftpd, pureftpd, Bulletproof FTP
+# Server, and whatever ftp.microsoft.com uses. Almost all servers use only
+# ASCII printable characters between the "220" and the "FTP", but non-English
+# ones might use others.
+#
+# The next thing the server sends is a 331. All the above servers also
+# send something including "password" after this code. By default, we
+# do not match on this because it takes another packet and is more work
+# for regexec.
+
+ftp
+# by default, we allow only ASCII
+^220[\x09-\x0d -~]*ftp
+
+# This covers UTF-8 as well
+#^220[\x09-\x0d -~\x80-\xfd]*ftp
+
+# This allows any characters and is about 4x faster than either of the above
+# (which are about the same as each other)
+#^220.*ftp
+
+# This is much slower
+#^220[\x09-\x0d -~]*ftp|331[\x09-\x0d -~]*password
+
+# This pattern is more precise, but takes longer to match. (3 packets vs. 1)
+#^220[\x09-\x0d -~]*\x0d\x0aUSER[\x09-\x0d -~]*\x0d\x0a331
+
+# same as above, but slightly less precise and only takes 2 packets.
+#^220[\x09-\x0d -~]*\x0d\x0aUSER[\x09-\x0d -~]*\x0d\x0a
diff --git a/src/usr/local/share/protocols/gif.pat b/src/usr/local/share/protocols/gif.pat
new file mode 100644
index 0000000..d54ed91
--- /dev/null
+++ b/src/usr/local/share/protocols/gif.pat
@@ -0,0 +1,8 @@
+# GIF - Popular Image format.
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+gif
+# drawn from /usr/share/magic
+GIF8(7|9)a
diff --git a/src/usr/local/share/protocols/gkrellm.pat b/src/usr/local/share/protocols/gkrellm.pat
new file mode 100644
index 0000000..73eb537
--- /dev/null
+++ b/src/usr/local/share/protocols/gkrellm.pat
@@ -0,0 +1,13 @@
+# Gkrellm - a system monitor - http://gkrellm.net
+# Pattern attributes: great veryfast fast
+# Protocol groups: monitoring open_source
+# Wiki: http://www.protocolinfo.org/wiki/Gkrellm
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+# Since this is not anything resembling a published protocol, it may change without
+# warning in new versions of gkrellm.
+
+gkrellm
+# tested with gkrellm 2.2.7
+^gkrellm [23].[0-9].[0-9]\x0a$
diff --git a/src/usr/local/share/protocols/gnucleuslan.pat b/src/usr/local/share/protocols/gnucleuslan.pat
new file mode 100644
index 0000000..ae5895b
--- /dev/null
+++ b/src/usr/local/share/protocols/gnucleuslan.pat
@@ -0,0 +1,10 @@
+# GnucleusLAN - LAN-only P2P filesharing
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/GnucleusLAN
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+
+gnucleuslan
+gnuclear connect/[\x09-\x0d -~]*user-agent: gnucleus [\x09-\x0d -~]*lan:
diff --git a/src/usr/local/share/protocols/gnutella.pat b/src/usr/local/share/protocols/gnutella.pat
new file mode 100644
index 0000000..770ed43
--- /dev/null
+++ b/src/usr/local/share/protocols/gnutella.pat
@@ -0,0 +1,34 @@
+# Gnutella - P2P filesharing
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/Gnutella
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This should match both Gnutella and "Gnutella2" ("Mike's protocol")
+#
+# Various clients use this protocol including Mactella, Shareaza,
+# GTK-gnutella, Gnucleus, Gnotella, LimeWire, iMesh and BearShare.
+#
+# This is tested with gtk-gnutella and Shareaza.
+
+# http://www.gnutella2.com/tiki-index.php?page=UDP%20Transceiver
+# http://rfc-gnutella.sf.net/
+# http://www.gnutella2.com/tiki-index.php?page=Gnutella2%20Specification
+# http://en.wikipedia.org/wiki/Shareaza
+
+gnutella
+
+# The first part matches UDP messages - All start with "GND", then have
+# a flag byte which is either \x00, \x01 or \x02, then two sequence bytes
+# that can be anything, then a fragment number, which must start at 1.
+# The rest matches TCP first client message or first server message (in case
+# we can't see client messages). Some parts of this are empirical rather than
+# document based. Assumes version is between 0.0 and 2.9. (usually is
+# 0.4 or 0.6). I'm guessing at many of the user-agents.
+# The last bit is emprical and probably only matches Limewire.
+^(gnd[\x01\x02]?.?.?\x01|gnutella connect/[012]\.[0-9]\x0d\x0a|get /uri-res/n2r\?urn:sha1:|get /.*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|imesh)|get /.*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?[0-9]?|gnutella.*content-type: application/x-gnutella|...................?lime)
+
+# Needlessly precise, at the expense of time
+#^(gnd[\x01\x02]?.?.?\x01|gnutella connect/[012]\.[0-9]\x0d\x0a|get /uri-res/n2r\?urn:sha1:|get /[\x09-\x0d -~]*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|imesh)|get /[\x09-\x0d -~]*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?[0-9]?|gnutella[\x09-\x0d -~]*content-type: application/x-gnutella|..................lime)
+
+
diff --git a/src/usr/local/share/protocols/goboogy.pat b/src/usr/local/share/protocols/goboogy.pat
new file mode 100644
index 0000000..d88d00b
--- /dev/null
+++ b/src/usr/local/share/protocols/goboogy.pat
@@ -0,0 +1,13 @@
+# GoBoogy - a Korean P2P protocol
+# Pattern attributes: marginal slow notsofast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/GoBoogy
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested and likely does not work in all cases!
+#
+# By Adam Przybyla, modified by Matthew Strait. Possibly lifted from
+# Josh Ballard (oofle.com).
+
+goboogy
+<peerplat>|^get /getfilebyhash\.cgi\?|^get /queue_register\.cgi\?|^get /getupdowninfo\.cgi\?
diff --git a/src/usr/local/share/protocols/gopher.pat b/src/usr/local/share/protocols/gopher.pat
new file mode 100644
index 0000000..773016f
--- /dev/null
+++ b/src/usr/local/share/protocols/gopher.pat
@@ -0,0 +1,25 @@
+# Gopher - A precursor to HTTP - RFC 1436
+# Pattern attributes: good slow notsofast undermatch
+# Protocol groups: document_retrieval obsolete ietf_rfc_documented
+# Wiki: http://www.protocolinfo.org/wiki/Gopher
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Gopher servers usually run on TCP port 70.
+#
+# This pattern is lightly tested using gopher.dna.affrc.go.jp .
+
+gopher
+# This matches the server's response, but naturally only if it is a
+# directory listing, not if it is sending a file, because then the data
+# is totally arbitrary.
+
+# Matches the client saying "list what you have", then the server
+# response: one of the file type characters, any printable characters, a
+# tab, any printable characters, a tab, something that looks like a
+# domain name, a tab, and then a number which could be the start of a
+# port number.
+
+# "0About internet Gopher\tStuff:About us\trawBits.micro.umn.edu\t70"
+# "\r7search by keywords on protein data using wais\twaissrc:/protein_all/protein\tgopher.dna.affrc.go.jp\t70"
+
+^[\x09-\x0d]*[1-9,+tgi][\x09-\x0d -~]*\x09[\x09-\x0d -~]*\x09[a-z0-9.]*\.[a-z][a-z].?.?\x09[1-9]
diff --git a/src/usr/local/share/protocols/gtalk.pat b/src/usr/local/share/protocols/gtalk.pat
new file mode 100644
index 0000000..aa538ca
--- /dev/null
+++ b/src/usr/local/share/protocols/gtalk.pat
@@ -0,0 +1,11 @@
+# GTalk, a Jabber (XMPP) client
+# Pattern attributes: good veryfast fast subset
+# Protocol groups: chat ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/Jabber
+# Copyright (C) 2009 Matthew Strait; See ../LICENSE
+
+# See ../protocols/jabber.pat for more details
+
+gtalk
+^<stream:stream to="gmail\.com"
+
diff --git a/src/usr/local/share/protocols/guildwars.pat b/src/usr/local/share/protocols/guildwars.pat
new file mode 100644
index 0000000..65d2b92
--- /dev/null
+++ b/src/usr/local/share/protocols/guildwars.pat
@@ -0,0 +1,14 @@
+# Guild Wars - online game - http://guildwars.com
+# Pattern attributes: marginal veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Guild_Wars
+# Copyright (C) 2008 Matthew Strait; See ../LICENSE
+
+# Contributed on protocolinfo by Greatwolf with the comment, "Guild Wars
+# uses encrypted data on tcp/6112 and may be impossible to match by
+# content. An experimental filter has been written to match Guild Wars
+# packets. More testing is still required to determine the effectiveness
+# of this pattern."
+
+guildwars
+^[\x04\x05]\x0c.i\x01
diff --git a/src/usr/local/share/protocols/h323.pat b/src/usr/local/share/protocols/h323.pat
new file mode 100644
index 0000000..75b1a39
--- /dev/null
+++ b/src/usr/local/share/protocols/h323.pat
@@ -0,0 +1,36 @@
+# H.323 - Voice over IP.
+# Pattern attributes: ok veryfast fast
+# Protocol groups: voip itu-t_standard
+# Wiki: http://www.protocolinfo.org/wiki/H.323
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is written without knowledge of the principles of H.323.
+# It has only been tested with gnomemeeting and may not work for other
+# clients.
+#
+# Also, it has been reported that:
+# "the pattern ... match[es] only first H.323 stream (conntrack for H.323 was
+# enabled). Also the major chunk of traffic was of RTP which went untracked."
+#
+# Also, it may very well match other things that use TPKT and
+# Q.931.
+
+# Note that to take full advantage of this pattern, you will need to
+# have connection tracking of H.323 support in your kernel. This
+# support is not in the stock kernel. A patch can be found at
+# http://netfilter.org
+
+h323
+# TPKT format: http://www.ietf.org/rfc/rfc1006.txt
+# \x03 = TPKT version. It was 3 in May 1987 and gnomemeeting still uses 3.
+# ..? = null reserved byte and packet length field.
+# Q.931 format: http://www.freesoft.org/CIE/Topics/126.htm
+# \x08 = Q.931
+# . = length of call reference
+# The next byte was: \x18 = message sent from originating side.
+# But based on experimentation, it seems that just . is better.
+# .?.?.?.?.?.?.?.?.?.?.?.?.?.?.? = call reference (0-15 bytes (0 for nulls))
+# \x05 = setup message
+#
+# Yup, it doesn't actually include any H.323 protocol information.
+^\x03..?\x08...?.?.?.?.?.?.?.?.?.?.?.?.?.?.?\x05
diff --git a/src/usr/local/share/protocols/halflife2-deathmatch.pat b/src/usr/local/share/protocols/halflife2-deathmatch.pat
new file mode 100644
index 0000000..45d0bb0
--- /dev/null
+++ b/src/usr/local/share/protocols/halflife2-deathmatch.pat
@@ -0,0 +1,10 @@
+# Half-Life 2 Deathmatch - popular computer game
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Half-Life
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# By Clayton Macleod <cherrytwist TA gmail.com>
+
+halflife2-deathmatch
+^\xff\xff\xff\xff.*hl2mpDeathmatch
diff --git a/src/usr/local/share/protocols/hddtemp.pat b/src/usr/local/share/protocols/hddtemp.pat
new file mode 100644
index 0000000..cdd908c
--- /dev/null
+++ b/src/usr/local/share/protocols/hddtemp.pat
@@ -0,0 +1,14 @@
+# hddtemp - Hard drive temperature reporting
+# Pattern attributes: great veryfast fast
+# Protocol groups: monitoring open_source
+# Wiki: http://www.protocolinfo.org/wiki/HDDtemp
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 7634
+#
+# You're a silly person if you use this pattern.
+#
+# This pattern has been tested and is believed to work well.
+
+hddtemp
+^\|/dev/[a-z][a-z][a-z]\|[0-9a-z]*\|[0-9][0-9]\|[cfk]\|
diff --git a/src/usr/local/share/protocols/hotline.pat b/src/usr/local/share/protocols/hotline.pat
new file mode 100644
index 0000000..20ec6de
--- /dev/null
+++ b/src/usr/local/share/protocols/hotline.pat
@@ -0,0 +1,12 @@
+# Hotline - An old P2P filesharing protocol
+# Pattern attributes: marginal fast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Hotline
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested!
+#
+# This is lifted from http://oofle.com/filesharing.php?app=hotline
+
+hotline
+^....................TRTPHOTL\x01\x02
diff --git a/src/usr/local/share/protocols/html.pat b/src/usr/local/share/protocols/html.pat
new file mode 100644
index 0000000..d834a96
--- /dev/null
+++ b/src/usr/local/share/protocols/html.pat
@@ -0,0 +1,11 @@
+# (X)HTML - (Extensible) Hypertext Markup Language - http://w3.org
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+#
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# This pattern has been tested and is believe to work well.
+
+# this should match any (X)HTML document from any version that conforms
+# even vaugly to the standards.
+html
+<html.*><head>
diff --git a/src/usr/local/share/protocols/http-dap.pat b/src/usr/local/share/protocols/http-dap.pat
new file mode 100644
index 0000000..216d8d6
--- /dev/null
+++ b/src/usr/local/share/protocols/http-dap.pat
@@ -0,0 +1,19 @@
+# HTTP by Download Accelerator Plus - http://www.speedbit.com
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Uses HTTP to download.
+
+http-dap
+
+# DAP identifies itself in the User-Agent field of every HTTP request it
+# makes. This is pretty trivial to get around if speedbit.com ever
+# wanted to.
+
+# The latest version uses "User-Agent: DA 7.0". The additional version
+# allowance is an attempt at "future proofing".
+
+User-Agent: DA [678]\.[0-9]
+
diff --git a/src/usr/local/share/protocols/http-freshdownload.pat b/src/usr/local/share/protocols/http-freshdownload.pat
new file mode 100644
index 0000000..a342e86
--- /dev/null
+++ b/src/usr/local/share/protocols/http-freshdownload.pat
@@ -0,0 +1,17 @@
+# HTTP by Fresh Download - http://www.freshdevices.com
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# Uses HTTP to download.
+
+http-freshdownload
+
+# Fresh Download identifies itself in the User-Agent field of every HTTP
+# request it makes.
+
+# The latest version uses "User-Agent: FreshDownload/4.40". The
+# additional version allowance is an attempt at "future proofing".
+
+User-Agent: FreshDownload/[456](\.[0-9][0-9]?)?
+
diff --git a/src/usr/local/share/protocols/http-itunes.pat b/src/usr/local/share/protocols/http-itunes.pat
new file mode 100644
index 0000000..fd44ee4
--- /dev/null
+++ b/src/usr/local/share/protocols/http-itunes.pat
@@ -0,0 +1,14 @@
+# HTTP - iTunes (Apple's music program)
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: streaming_audio ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Port 80
+# iTunes program basically uses the HTTP protocol for its initial
+# communication.
+# Pattern contributed by Deepak Seshadri <dseshadri AT broadbandmaritime.com>
+
+http-itunes
+http/(0\.9|1\.0|1\.1).*(user-agent: itunes)
+
diff --git a/src/usr/local/share/protocols/http-rtsp.pat b/src/usr/local/share/protocols/http-rtsp.pat
new file mode 100644
index 0000000..73ef926
--- /dev/null
+++ b/src/usr/local/share/protocols/http-rtsp.pat
@@ -0,0 +1,16 @@
+# RTSP tunneled within HTTP
+# Pattern attributes: ok notsofast fast subset
+# Protocol groups: streaming_audio streaming_video ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/RTSP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Apple's documentation on what Quicktime does:
+# http://developer.apple.com/quicktime/icefloe/dispatch028.html
+# This is what the first part of the pattern is about
+#
+# The second part is based on the example in RFC 2326. For this part to
+# work, this pattern MUST be earlier in the iptables rules chain than
+# HTTP. Otherwise, the stream will be identified as HTTP.
+
+http-rtsp
+^(get[\x09-\x0d -~]* Accept: application/x-rtsp-tunnelled|http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*a=control:rtsp://)
diff --git a/src/usr/local/share/protocols/http.pat b/src/usr/local/share/protocols/http.pat
new file mode 100644
index 0000000..5122310
--- /dev/null
+++ b/src/usr/local/share/protocols/http.pat
@@ -0,0 +1,28 @@
+# HTTP - HyperText Transfer Protocol - RFC 2616
+# Pattern attributes: great slow notsofast superset
+# Protocol groups: document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 80
+#
+# This pattern has been tested and is believed to work well.
+#
+# this intentionally catches the response from the server rather than
+# the request so that other protocols which use http (like kazaa) can be
+# caught based on specific http requests regardless of the ordering of
+# filters... also matches posts
+
+# Sites that serve really long cookies may break this by pushing the
+# server response too far away from the beginning of the connection. To
+# fix this, increase the kernel's data buffer length.
+
+http
+# Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF (rfc 2616)
+# As specified in rfc 2616 a status code is preceeded and followed by a
+# space.
+http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*(connection:|content-type:|content-length:|date:)|post [\x09-\x0d -~]* http/[01]\.[019]
+# A slightly faster version that might be good enough:
+#http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9]|post [\x09-\x0d -~]* http/[01]\.[019]
+# old pattern(s):
+#(http[\x09-\x0d -~]*(200 ok|302 |304 )[\x09-\x0d -~]*(connection:|content-type:|content-length:))|^(post [\x09-\x0d -~]* http/)
diff --git a/src/usr/local/share/protocols/httpaudio.pat b/src/usr/local/share/protocols/httpaudio.pat
new file mode 100644
index 0000000..c6cdd9a
--- /dev/null
+++ b/src/usr/local/share/protocols/httpaudio.pat
@@ -0,0 +1,32 @@
+# HTTP - Audio over HyperText Transfer Protocol (RFC 2616)
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: streaming_audio document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 80
+#
+# Contributed by Deepak Seshadri <dseshadri AT broadbandmaritime.com>
+#
+# This pattern has been tested and is believed to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/HTTP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+#
+# If you use this, you should be aware that:
+#
+# - they match both simple downloads of audio/video and streaming content.
+#
+# - blocking based on content-type encourages server
+# writers/administrators to misreport content-type (which will just make
+# headaches for everyone, including us), so I would strongly recommend
+# shaping audio/video down to a speed that discourages use of streaming
+# players without actually blocking it.
+#
+# - obviously, since this is a subset of HTTP, you need to match it
+# earlier in your iptables rules than HTTP.
+
+httpaudio
+http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(content-type: audio)
+
diff --git a/src/usr/local/share/protocols/httpcachehit.pat b/src/usr/local/share/protocols/httpcachehit.pat
new file mode 100644
index 0000000..41cb099
--- /dev/null
+++ b/src/usr/local/share/protocols/httpcachehit.pat
@@ -0,0 +1,19 @@
+# HTTP - Proxy Cache hit for HyperText Transfer Protocol (RFC 2616)
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 80
+#
+# Contributed by Francesco Del Degan <fdeldegan AT libero.it>
+#
+# This pattern has been tested and is believed to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/HTTP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+
+httpcachehit
+http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(x-cache: hit)
+
diff --git a/src/usr/local/share/protocols/httpcachemiss.pat b/src/usr/local/share/protocols/httpcachemiss.pat
new file mode 100644
index 0000000..09ac6cd
--- /dev/null
+++ b/src/usr/local/share/protocols/httpcachemiss.pat
@@ -0,0 +1,17 @@
+# HTTP - Proxy Cache miss for HyperText Transfer Protocol (RFC 2616)
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 80
+#
+# This pattern has been tested and is believed to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/HTTP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+
+httpcachemiss
+http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(x-cache: miss)
+
diff --git a/src/usr/local/share/protocols/httpvideo.pat b/src/usr/local/share/protocols/httpvideo.pat
new file mode 100644
index 0000000..4a75ce0
--- /dev/null
+++ b/src/usr/local/share/protocols/httpvideo.pat
@@ -0,0 +1,32 @@
+# HTTP - Video over HyperText Transfer Protocol (RFC 2616)
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: streaming_video document_retrieval ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 80
+#
+# Contributed by Deepak Seshadri <dseshadri AT broadbandmaritime.com>
+#
+# This pattern has been tested and is believed to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/HTTP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+#
+# If you use this, you should be aware that:
+#
+# - they match both simple downloads of audio/video and streaming content.
+#
+# - blocking based on content-type encourages server
+# writers/administrators to misreport content-type (which will just make
+# headaches for everyone, including us), so I would strongly recommend
+# shaping audio/video down to a speed that discourages use of streaming
+# players without actually blocking it.
+#
+# - obviously, since this is a subset of HTTP, you need to match it
+# earlier in your iptables rules than HTTP.
+
+httpvideo
+http/(0\.9|1\.0|1\.1)[\x09-\x0d ][1-5][0-9][0-9][\x09-\x0d -~]*(content-type: video)
+
diff --git a/src/usr/local/share/protocols/ident.pat b/src/usr/local/share/protocols/ident.pat
new file mode 100644
index 0000000..3205e5e
--- /dev/null
+++ b/src/usr/local/share/protocols/ident.pat
@@ -0,0 +1,15 @@
+# Ident - Identification Protocol - RFC 1413
+# Pattern attributes: good fast fast
+# Protocol groups: networking ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/Ident
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 113
+#
+# This pattern is believed to work.
+
+ident
+# "number , numberCRLF" possibly without the CR and/or LF.
+# ^$ is appropriate because the first packet should never have anything
+# else in it.
+^[1-9][0-9]?[0-9]?[0-9]?[0-9]?[\x09-\x0d]*,[\x09-\x0d]*[1-9][0-9]?[0-9]?[0-9]?[0-9]?(\x0d\x0a|[\x0d\x0a])?$
diff --git a/src/usr/local/share/protocols/imap.pat b/src/usr/local/share/protocols/imap.pat
new file mode 100644
index 0000000..3f989c0
--- /dev/null
+++ b/src/usr/local/share/protocols/imap.pat
@@ -0,0 +1,14 @@
+# IMAP - Internet Message Access Protocol (A common e-mail protocol)
+# Pattern attributes: great fast fast
+# Protocol groups: mail ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/IMAP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This matches IMAP4 (RFC 3501) and probably IMAP2 (RFC 1176)
+#
+# This pattern has been tested and is believed to work well.
+#
+# This matches the IMAP welcome message or a noop command (which for
+# some unknown reason can happen at the start of a connection?)
+imap
+^(\* ok|a[0-9]+ noop)
diff --git a/src/usr/local/share/protocols/imesh.pat b/src/usr/local/share/protocols/imesh.pat
new file mode 100644
index 0000000..4cb7ac7
--- /dev/null
+++ b/src/usr/local/share/protocols/imesh.pat
@@ -0,0 +1,15 @@
+# iMesh - the native protocol of iMesh, a P2P application - http://imesh.com
+# Pattern attributes: ok fast notsofast
+# Protocol groups: p2p
+# Wiki: http://protocolinfo.org/wiki/iMesh
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# depending on the version of iMesh (the program), it can also use fasttrack,
+# gnutella and edonkey in addition to iMesh (the protocol).
+
+imesh
+# The first branch matches the login
+# The second branch matches the main non-download connection (searches, etc)
+# The third branch matches downloads of "premium" content
+# The fourth branch matches peer downloads.
+^(post[\x09-\x0d -~]*<PasswordHash>................................</PasswordHash><ClientVer>|\x34\x80?\x0d?\xfc\xff\x04|get[\x09-\x0d -~]*Host: imsh\.download-prod\.musicnet\.com|\x02[\x01\x02]\x83.*\x02[\x01\x02]\x83)
diff --git a/src/usr/local/share/protocols/ipp.pat b/src/usr/local/share/protocols/ipp.pat
new file mode 100644
index 0000000..15540d0
--- /dev/null
+++ b/src/usr/local/share/protocols/ipp.pat
@@ -0,0 +1,12 @@
+# IP printing - a new standard for UNIX printing - RFC 2911
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: printer ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/IPP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+
+ipp
+# It's unlikely that anything else has this string, but I think we could
+# do a bit better...
+ipp://
diff --git a/src/usr/local/share/protocols/irc.pat b/src/usr/local/share/protocols/irc.pat
new file mode 100644
index 0000000..b922b3e
--- /dev/null
+++ b/src/usr/local/share/protocols/irc.pat
@@ -0,0 +1,20 @@
+# IRC - Internet Relay Chat - RFC 1459
+# Pattern attributes: great fast fast
+# Protocol groups: chat ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/IRC
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 6666 or 6667
+# Note that chat traffic runs on these ports, but IRC-DCC traffic (which
+# can use much more bandwidth) uses a dynamically assigned port, so you
+# must have the IRC connection tracking module in your kernel to classify
+# this.
+#
+# This pattern has been tested and is believed to work well.
+
+irc
+# First thing that happens is that the client sends NICK and USER, in
+# either order. This allows MIRC color codes (\x02-\x0d instead of
+# \x09-\x0d).
+^(nick[\x09-\x0d -~]*user[\x09-\x0d -~]*:|user[\x09-\x0d -~]*:[\x02-\x0d -~]*nick[\x09-\x0d -~]*\x0d\x0a)
+
diff --git a/src/usr/local/share/protocols/jabber.pat b/src/usr/local/share/protocols/jabber.pat
new file mode 100644
index 0000000..7c32890
--- /dev/null
+++ b/src/usr/local/share/protocols/jabber.pat
@@ -0,0 +1,24 @@
+# Jabber (XMPP) - open instant messenger protocol - RFC 3920 - http://jabber.org
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: chat ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/Jabber
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested with Gaim and Gabber. It is only tested
+# with non-SSL mode Jabber with no proxies.
+
+# Thanks to Jan Hudec for some improvements.
+
+# Jabber seems to take a long time to set up a connection. I'm
+# connecting with Gabber 0.8.8 to 12jabber.org and the first 8 packets
+# is this:
+# <stream:stream to='12jabber.com' xmlns='jabber:client'
+# xmlns:stream='http://etherx.jabber.org/streams'><?xml
+# version='1.0'?><stream:stream
+# xmlns:stream='http://etherx.jabber.org/streams' id='3f73e951'
+# xmlns='jabber:client' from='12jabber.com'>
+#
+# No mention of my username or password yet, you'll note.
+
+jabber
+<stream:stream[\x09-\x0d ][ -~]*[\x09-\x0d ]xmlns=['"]jabber
diff --git a/src/usr/local/share/protocols/jpeg.pat b/src/usr/local/share/protocols/jpeg.pat
new file mode 100644
index 0000000..fd1a249
--- /dev/null
+++ b/src/usr/local/share/protocols/jpeg.pat
@@ -0,0 +1,8 @@
+# JPEG - Joint Picture Expert Group image format.
+# Pattern attributes: ok fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+jpeg
+# drawn from /usr/share/magic
+\xff\xd8
diff --git a/src/usr/local/share/protocols/kugoo.pat b/src/usr/local/share/protocols/kugoo.pat
new file mode 100644
index 0000000..c478317
--- /dev/null
+++ b/src/usr/local/share/protocols/kugoo.pat
@@ -0,0 +1,21 @@
+# KuGoo - a Chinese P2P program - http://www.kugoo.com
+# Pattern attributes: ok fast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/KuGoo
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+kugoo
+# liangjun says: "i find old pattern is not working for kugoo 2008. so i
+# write a new pattern of kugoo 2008 ,it's working with all of kugoo 2008
+# version!"
+^(\x64.....\x70....\x50\x37|\x65.+)
+
+# Pattern before 2008 11 08
+#
+# The author of this pattern says it works, but this is unconfirmed.
+# Written by www.routerclub.com wsgtrsys.
+#
+# LanTian submitted \x64.+\x74\x47\x50\x37 for "KuGoo2", but adding as
+# another branch makes the pattern REALLY slow. If it could have a ^, that'd
+# be ok (still veryfast/fast). Waiting to hear.
+#^(\x31..\x8e|\x64.+\x74\x47\x50\x37)
diff --git a/src/usr/local/share/protocols/live365.pat b/src/usr/local/share/protocols/live365.pat
new file mode 100644
index 0000000..144ac50
--- /dev/null
+++ b/src/usr/local/share/protocols/live365.pat
@@ -0,0 +1,15 @@
+# live365 - An Internet radio site - http://live365.com
+# Pattern attributes: marginal notsofast notsofast
+# Protocol groups: streaming_audio
+# Wiki: http://www.protocolinfo.org/wiki/Live365
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern was "contributed" (taken with permission) by the bandwidth
+# arbitrator project (www.bandwidtharbitrator.com).
+#
+# This pattern is unconfirmed.
+
+live365
+# FIXME: what's going on here?
+membername.*session.*player
+
diff --git a/src/usr/local/share/protocols/liveforspeed.pat b/src/usr/local/share/protocols/liveforspeed.pat
new file mode 100644
index 0000000..ad32e9a
--- /dev/null
+++ b/src/usr/local/share/protocols/liveforspeed.pat
@@ -0,0 +1,13 @@
+# Live For Speed - A racing game.
+# Pattern attributes: poor fast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Live_For_Speed
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern was submitted to protocolinfo.org by 80.55.238.74 with no
+# explanation. It is unconfirmed.
+
+# Live For Speed S2 Alpha 0.5 X10
+liveforspeed
+^..\x05\x58\x0a\x1d\x03
+# The same guy came by the next day and deleted the \x03 without comment...
diff --git a/src/usr/local/share/protocols/lpd.pat b/src/usr/local/share/protocols/lpd.pat
new file mode 100644
index 0000000..4b78dfe
--- /dev/null
+++ b/src/usr/local/share/protocols/lpd.pat
@@ -0,0 +1,18 @@
+# LPD - Line Printer Daemon Protocol (old-style UNIX printing) - RFC 1179
+# Pattern attributes: ok fast fast
+# Protocol groups: printer ietf_rfc_documented
+# Wiki: http://www.protocolinfo.org/wiki/LPD
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested.
+
+lpd
+# print waiting jobs: ^\x01[!-~]+\x0a$
+# receive a print job: ^\x02[!-~]+\x0a.[\x01\x02\x03][\x01-\x0a -~]*\x0a$
+# Send queue state: ^[\x03\x04][!-~]+[\x09-\x0d]+[a-z][\x09-\x0d -~]*\x0a$
+# Remove jobs: ^\x05[!-~]+[\x09-\x0d]+([a-z][!-~]*[\x09-\x0d]+[1-9][0-9]?[0-9]?|root[\x09-\x0d]+[!-~]+).*\x0a$
+
+# This pattern looks like it might match random data once in a while, but
+# testing shows that this is not the case.
+
+^(\x01[!-~]+|\x02[!-~]+\x0a.[\x01\x02\x03][\x01-\x0a -~]*|[\x03\x04][!-~]+[\x09-\x0d]+[a-z][\x09-\x0d -~]*|\x05[!-~]+[\x09-\x0d]+([a-z][!-~]*[\x09-\x0d]+[1-9][0-9]?[0-9]?|root[\x09-\x0d]+[!-~]+).*)\x0a$
diff --git a/src/usr/local/share/protocols/mohaa.pat b/src/usr/local/share/protocols/mohaa.pat
new file mode 100644
index 0000000..00b6c07
--- /dev/null
+++ b/src/usr/local/share/protocols/mohaa.pat
@@ -0,0 +1,11 @@
+# Medal of Honor Allied Assault - an Electronic Arts game
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Medal_of_Honor_Allied_Assault
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is written and tested by Krzysztof Maciejewski.
+
+mohaa
+^\xff\xff\xff\xffgetstatus\x0a
+
diff --git a/src/usr/local/share/protocols/mp3.pat b/src/usr/local/share/protocols/mp3.pat
new file mode 100644
index 0000000..1b60a4c
--- /dev/null
+++ b/src/usr/local/share/protocols/mp3.pat
@@ -0,0 +1,11 @@
+# MP3 - Moving Picture Experts Group Audio Layer III
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# By LanTian (chinalantian at 126 d.t com)
+
+# Only matches the standard MP3 form, non-standard files might not be matched.
+
+mp3
+\x49\x44\x33\x03
diff --git a/src/usr/local/share/protocols/msn-filetransfer.pat b/src/usr/local/share/protocols/msn-filetransfer.pat
new file mode 100644
index 0000000..797edb4
--- /dev/null
+++ b/src/usr/local/share/protocols/msn-filetransfer.pat
@@ -0,0 +1,30 @@
+# MSN (Micosoft Network) Messenger file transfers (MSNFTP and MSNSLP)
+# Pattern attributes: good fast fast
+# Protocol groups: chat document_retrieval proprietary
+# Wiki: http://www.protocolinfo.org/wiki/MSN_Messenger
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# http://www.hypothetic.org/docs/msn/client/file_transfer.php
+
+# NOTE! This pattern does not catch the modern type of MSN filetransfers
+# because they use the same TCP connection as the chat itself. See
+# ../example_traffic/msn_chat_and_file_transfer.txt for a demonstration.
+
+# This pattern has been tested and seems to work well. It, does,
+# however, require more testing with various versions of the official
+# MSN client as well as with clones such as Trillian, Miranda, Gaim,
+# etc. If you are using a MSN clone and this pattern DOES work for you,
+# please, also let us know.
+
+# First part matches the older MSNFTP: A MSN filetransfer is a normal
+# MSN connection except that the protocol is MSNFTP. Some clients
+# (especially Trillian) send other protocol versions besides MSNFTP
+# which should be matched by the [ -~]*.
+
+# Second part matches newer MSNSLP:
+# http://msnpiki.msnfanatic.com/index.php/MSNC:MSNSLP
+# This part is untested.
+
+msn-filetransfer
+^(ver [ -~]*msnftp\x0d\x0aver msnftp\x0d\x0ausr|method msnmsgr:)
+
diff --git a/src/usr/local/share/protocols/msnmessenger.pat b/src/usr/local/share/protocols/msnmessenger.pat
new file mode 100644
index 0000000..11dfc10
--- /dev/null
+++ b/src/usr/local/share/protocols/msnmessenger.pat
@@ -0,0 +1,28 @@
+# MSN Messenger - Microsoft Network chat client
+# Pattern attributes: good slow notsofast
+# Protocol groups: chat proprietary
+# Wiki: http://www.protocolinfo.org/wiki/MSN_Messenger
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually uses TCP port 1863
+# http://www.hypothetic.org/docs/msn/index.php
+# http://msnpiki.msnfanatic.com/
+#
+# This pattern has been tested and is believed to work well.
+
+msnmessenger
+
+# First branch: login
+# ver: allow versions up to 99.
+# I've never seen a cvr other than cvr0. Maybe this will be trouble later?
+# Can't anchor at the beginning because sometimes this is encapsulated in
+# HTTP. But either way, the first packet ends like this.
+# Second/Third branches: accepting/sending a message
+# I will assume that these can also be encapsulated in HTTP, although I have
+# not checked. Example of each direction:
+# ANS 1 quadong@hotmail.com 1139803431.29427 17522047
+# USR 1 quadong@hotmail.com 530423708.968145.366138
+
+# Branches are written entirely separately for better performance.
+ver [0-9]+ msnp[1-9][0-9]? [\x09-\x0d -~]*cvr0\x0d\x0a$|usr 1 [!-~]+ [0-9. ]+\x0d\x0a$|ans 1 [!-~]+ [0-9. ]+\x0d\x0a$
+
diff --git a/src/usr/local/share/protocols/mute.pat b/src/usr/local/share/protocols/mute.pat
new file mode 100644
index 0000000..53f2e23
--- /dev/null
+++ b/src/usr/local/share/protocols/mute.pat
@@ -0,0 +1,11 @@
+# MUTE - P2P filesharing - http://mute-net.sourceforge.net
+# Pattern attributes: marginal fast fast
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/MUTE
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is lightly tested. I don't know for sure that it will
+# match the actual file transfers.
+
+mute
+^(Public|AES)Key: [0-9a-f]*\x0aEnd(Public|AES)Key\x0a$
diff --git a/src/usr/local/share/protocols/napster.pat b/src/usr/local/share/protocols/napster.pat
new file mode 100644
index 0000000..d7ef032
--- /dev/null
+++ b/src/usr/local/share/protocols/napster.pat
@@ -0,0 +1,24 @@
+# Napster - P2P filesharing
+# Pattern attributes: good fast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Napster
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# All my tests show that this pattern is fast, but one user has reported that
+# it is slow. Your milage may vary.
+#
+# Should work for any Napster offspring, like OpenNAP.
+# (Yes, people still use this!)
+# Matches both searches and downloads.
+#
+# http://opennap.sourceforge.net/napster.txt
+#
+# This pattern has been tested and is believed to work well.
+
+napster
+# (client-server: length, assumed to be less than 256, login or new user login,
+# username, password, port, client ID, link-type |
+# client-client: 1, firewalled or not, username, filename)
+# Assumes that filenames are well-behaved ASCII strings. I have found
+# one case where this assumptions fails (filename had \x99 in it).
+^(.[\x02\x06][!-~]+ [!-~]+ [0-9][0-9]?[0-9]?[0-9]?[0-9]? "[\x09-\x0d -~]+" ([0-9]|10)|1(send|get)[!-~]+ "[\x09-\x0d -~]+")
diff --git a/src/usr/local/share/protocols/nbns.pat b/src/usr/local/share/protocols/nbns.pat
new file mode 100644
index 0000000..ca114de
--- /dev/null
+++ b/src/usr/local/share/protocols/nbns.pat
@@ -0,0 +1,20 @@
+# NBNS - NetBIOS name service
+# Pattern attributes: good slow notsofast
+# Protocol groups: networking proprietary
+# Wiki: http://www.protocolinfo.org/wiki/NBNS
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+#
+# name query
+# \x01\x10 means name query
+#
+# registration NB
+# (\x10 or )\x10 means registration
+#
+# release NB (merged with registration)
+# 0\x10 means release
+
+nbns
+# This is not a valid basic GNU regular expression.
+\x01\x10\x01|\)\x10\x01\x01|0\x10\x01
diff --git a/src/usr/local/share/protocols/ncp.pat b/src/usr/local/share/protocols/ncp.pat
new file mode 100644
index 0000000..55792b2
--- /dev/null
+++ b/src/usr/local/share/protocols/ncp.pat
@@ -0,0 +1,23 @@
+# NCP - Novell Core Protocol
+# Pattern attributes: good fast fast
+# Protocol groups: networking proprietary
+# Wiki: http://www.protocolinfo.org/wiki/NCP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+
+# ncp request
+# dmdt means Request
+# *any length
+#
+# *any reply buffer size
+# "" means service request
+# | \x17\x17 means create a service connection
+# | uu means destroy service connection
+
+# ncp reply
+# tncp means reply
+# 33 means service reply
+
+ncp
+^(dmdt.*\x01.*(""|\x11\x11|uu)|tncp.*33)
diff --git a/src/usr/local/share/protocols/netbios.pat b/src/usr/local/share/protocols/netbios.pat
new file mode 100644
index 0000000..a0314b1
--- /dev/null
+++ b/src/usr/local/share/protocols/netbios.pat
@@ -0,0 +1,29 @@
+# NetBIOS - Network Basic Input Output System
+# Pattern attributes: marginal notsofast notsofast
+# Protocol groups: networking ietf_internet_standard proprietary
+# Wiki: http://www.protocolinfo.org/wiki/NetBIOS
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# As mentioned in smb.pat:
+#
+# "This protocol is sometimes also referred to as the Common Internet File
+# System (CIFS), LanManager or NetBIOS protocol." -- "man samba"
+#
+# Actually, SMB is a higher level protocol than NetBIOS. However, the
+# NetBIOS header is only 4 bytes: not much to match on.
+#
+# http://www.ubiqx.org/cifs/SMB.html
+# See also RFCs 1001 and 1002.
+#
+# This pattern attempts to match the (Session layer) NetBIOS Session request.
+# If sucessful, you may be able to match NetBIOS several packets earlier
+# than if you just waited for the easier-to-match SMB header.
+#
+# This pattern is untested.
+
+netbios
+# session request byte, three bytes of flags and length. Then
+# there should be a big mess of letters between A and P which represent
+# the NetBIOS names of the involved computers (with a null between them).
+# (40ish here, damn this regexp implementation and its lack of {40,})
+\x81.?.?.[A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P][A-P]
diff --git a/src/usr/local/share/protocols/nimda.pat b/src/usr/local/share/protocols/nimda.pat
new file mode 100644
index 0000000..86c7ce1
--- /dev/null
+++ b/src/usr/local/share/protocols/nimda.pat
@@ -0,0 +1,8 @@
+# Nimda - a worm that attacks Microsoft IIS web servers, and MORE!
+# Pattern attributes: ok notsofast notsofast subset
+# Protocol groups: worm
+# Wiki: http://www.protocolinfo.org/wiki/Nimda
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+nimda
+GET (/scripts/root\.exe\?/c\+dir|/MSADC/root\.exe\?/c\+dir|/c/winnt/system32/cmd\.exe\?/c\+dir|/d/winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.%5c\.\./winnt/system32/cmd\.exe\?/c\+dir|/_vti_bin/\.\.%5c\.\./\.\.%5c\.\./\.\.%5c\.\./winnt/system32/cmd\.exe\?/c\+dir|/_mem_bin/\.\.%5c\.\./\.\.%5c\.\./\.\.%5c\.\./winnt/system32/cmd\.exe\?/c\+dir|/msadc/\.\.%5c\.\./\.\.%5c\.\./\.\.%5c/\.\.\xc1\x1c\.\./\.\.\xc1\x1c\.\./\.\.\xc1\x1c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.\xc1\x1c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.\xc0/\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.\xc0\xaf\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.\xc1\x9c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.%35c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.%35c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.%5c\.\./winnt/system32/cmd\.exe\?/c\+dir|/scripts/\.\.%2f\.\./winnt/system32/cmd\.exe\?/c\+dir)
diff --git a/src/usr/local/share/protocols/nntp.pat b/src/usr/local/share/protocols/nntp.pat
new file mode 100644
index 0000000..7a30578
--- /dev/null
+++ b/src/usr/local/share/protocols/nntp.pat
@@ -0,0 +1,21 @@
+# NNTP - Network News Transfer Protocol - RFCs 977 and 2980
+# Pattern attributes: good fast fast
+# Protocol groups: ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/NNTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 119
+
+# This pattern is tested and is believed to work well (but could use
+# more testing).
+
+nntp
+# matches authorized login
+# OR
+# matches unauthorized login if the server says "news" after 200/201
+# (Half of the 2 servers I tested did :-), but they both required authorization
+# so it's quite possible that this pattern will miss some nntp traffic.)
+^(20[01][\x09-\x0d -~]*AUTHINFO USER|20[01][\x09-\x0d -~]*news)
+
+# same thing, slightly more accurate, but 100+ times slower
+#^20[01][\x09-\x0d -~]*\x0d\x0a[\x09-\x0d -~]*AUTHINFO USER|20[01][\x09-\x0d -~]*news
diff --git a/src/usr/local/share/protocols/ntp.pat b/src/usr/local/share/protocols/ntp.pat
new file mode 100644
index 0000000..760cfdb
--- /dev/null
+++ b/src/usr/local/share/protocols/ntp.pat
@@ -0,0 +1,17 @@
+# (S)NTP - (Simple) Network Time Protocol - RFCs 1305 and 2030
+# Pattern attributes: good fast fast overmatch
+# Protocol groups: time_synchronization ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/NTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is tested and is believed to work.
+
+# client|server
+# Requires the server's timestamp to be in the present or future (of 2005).
+# Tested with ntpdate on Linux.
+# Assumes version 2, 3 or 4.
+
+# Note that ntp packets are always 48 bytes, so you should match on that too.
+
+ntp
+^([\x13\x1b\x23\xd3\xdb\xe3]|[\x14\x1c$].......?.?.?.?.?.?.?.?.?[\xc6-\xff])
diff --git a/src/usr/local/share/protocols/ogg.pat b/src/usr/local/share/protocols/ogg.pat
new file mode 100644
index 0000000..d9ba377
--- /dev/null
+++ b/src/usr/local/share/protocols/ogg.pat
@@ -0,0 +1,7 @@
+# Ogg - Ogg Vorbis music format (not any ogg file, just vorbis)
+# Pattern attributes: ok notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+ogg
+oggs.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?\x01vorbis
diff --git a/src/usr/local/share/protocols/openft.pat b/src/usr/local/share/protocols/openft.pat
new file mode 100644
index 0000000..09fa852
--- /dev/null
+++ b/src/usr/local/share/protocols/openft.pat
@@ -0,0 +1,13 @@
+# OpenFT - P2P filesharing (implemented in giFT library)
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/OpenFT
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Ben Efros <ben AT xgendev.com> says:
+# "This pattern identifies openFT P2P transfers fine. openFT is part of giFT
+# and is a pretty large p2p network. I would describe this pattern as pretty
+# weak, but it works for the giFT-based clients I've used."
+
+openft
+x-openftalias: [-)(0-9a-z ~.]
diff --git a/src/usr/local/share/protocols/pcanywhere.pat b/src/usr/local/share/protocols/pcanywhere.pat
new file mode 100644
index 0000000..60b50a7
--- /dev/null
+++ b/src/usr/local/share/protocols/pcanywhere.pat
@@ -0,0 +1,12 @@
+# pcAnywhere - Symantec remote access program
+# Pattern attributes: marginal veryfast fast
+# Protocol groups: remote_access proprietary
+# Wiki: http://www.protocolinfo.org/wiki/PcAnywhere
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This is completely untested!
+# See http://www.unixwiz.net/tools/pcascan.txt
+
+pcanywhere
+# I think this only matches queries and not the bulk of the traffic!
+^(nq|st)$
diff --git a/src/usr/local/share/protocols/pdf.pat b/src/usr/local/share/protocols/pdf.pat
new file mode 100644
index 0000000..0c0e5f9
--- /dev/null
+++ b/src/usr/local/share/protocols/pdf.pat
@@ -0,0 +1,11 @@
+# PDF - Portable Document Format - Postscript-like format by Adobe
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+#
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# This pattern has been tested and is believe to work well.
+
+# Matches PDF versions 1.0 - 1.6 (not sure if 1.6 exists yet, but it probably
+# will.
+pdf
+%PDF-1\.[0123456]
diff --git a/src/usr/local/share/protocols/perl.pat b/src/usr/local/share/protocols/perl.pat
new file mode 100644
index 0000000..822986b
--- /dev/null
+++ b/src/usr/local/share/protocols/perl.pat
@@ -0,0 +1,7 @@
+# Perl - A scripting language by Larry Wall.
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+perl
+\#! ?/(usr/(local/)?)?bin/perl
diff --git a/src/usr/local/share/protocols/png.pat b/src/usr/local/share/protocols/png.pat
new file mode 100644
index 0000000..33aafda
--- /dev/null
+++ b/src/usr/local/share/protocols/png.pat
@@ -0,0 +1,13 @@
+# PNG - Portable Network Graphics, a popular image format
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# Contributed by Radovan Josth. Tested at least a bit.
+
+png
+# drawn from /usr/share/magic
+\x89PNG\x0d\x0a\x1a\x0a
+
+# this is probably sufficient, but by default let's use the longer version
+# \x89PNG
diff --git a/src/usr/local/share/protocols/poco.pat b/src/usr/local/share/protocols/poco.pat
new file mode 100644
index 0000000..c7ce686
--- /dev/null
+++ b/src/usr/local/share/protocols/poco.pat
@@ -0,0 +1,12 @@
+# POCO and PP365 - Chinese P2P filesharing - http://pp365.com http://poco.cn
+# Pattern attributes: ok veryfast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Poco
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# The author of this pattern says it works, but this is unconfirmed.
+# Written by www.routerclub.com wsgtrsys.
+
+poco
+^\x80\x94\x0a\x01....\x1f\x9e
+
diff --git a/src/usr/local/share/protocols/pop3.pat b/src/usr/local/share/protocols/pop3.pat
new file mode 100644
index 0000000..47a8252
--- /dev/null
+++ b/src/usr/local/share/protocols/pop3.pat
@@ -0,0 +1,50 @@
+# POP3 - Post Office Protocol version 3 (popular e-mail protocol) - RFC 1939
+# Pattern attributes: great fast fast
+# Protocol groups: mail ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/POP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested somewhat.
+
+# this is a difficult protocol to match because of the relative lack of
+# distinguishing information. Read on.
+pop3
+
+# this the most conservative pattern. It should definitely work.
+#^(\+ok|-err)
+
+# this pattern assumes that the server says _something_ after +ok or -err
+# I think this is probably the way to go.
+^(\+ok |-err )
+
+# more that 90% of servers seem to say "pop" after "+ok", but not all.
+#^(\+ok .*pop)
+
+# Here's another tack. I think this is my second favorite.
+#^(\+ok [\x09-\x0d -~]*(ready|hello|pop|starting)|-err [\x09-\x0d -~]*(invalid|unknown|unimplemented|unrecognized|command))
+
+# this matches the server saying "you have N messages that are M bytes",
+# which the client probably asks for early in the session (not tested)
+#\+ok [0-9]+ [0-9]+
+
+# some sample servers:
+# RFC example: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
+# mail.dreamhost.com: +OK Hello there.
+# pop.carleton.edu: +OK POP3D(*) Server PMDFV6.2.2 at Fri, 12 Sep 2003 19:28:10 -0500 (CDT) (APOP disabled)
+# mail.earthlink.net: +OK NGPopper vEL_4_38 at earthlink.net ready <25509.1063412951@falcon>
+# *.email.umn.edu: +OK Cubic Circle's v1.22 1998/04/11 POP3 ready <7d1e0000da67623f@aquamarine.tc.umn.edu>
+# mail.yale.edu: +OK POP3 pantheon-po01 v2002.81 server ready
+# mail.gustavus.edu: +OK POP3 solen v2001.78 server ready
+# mail.reed.edu: +OK POP3 letra.reed.edu v2002.81 server ready
+# mail.bowdoin.edu: +OK mail.bowdoin.edu POP3 service (iPlanet Messaging Server 5.2 HotFix 1.15 (built Apr 28 2003))
+# pop.colby.edu: +OK Qpopper (version 4.0.5) at basalt starting.
+# mail.mac.com: +OK Netscape Messaging Multiplexor ready
+
+# various error strings:
+#-ERR Invalid command.
+#-ERR invalid command
+#-ERR unimplemented
+#-ERR Invalid command, try one of: USER name, PASS string, QUIT
+#-ERR Unknown AUTHORIZATION state command
+#-ERR Unrecognized command
+#-ERR Unknown command: "sadf'".
diff --git a/src/usr/local/share/protocols/postscript.pat b/src/usr/local/share/protocols/postscript.pat
new file mode 100644
index 0000000..456ac21
--- /dev/null
+++ b/src/usr/local/share/protocols/postscript.pat
@@ -0,0 +1,7 @@
+# Postscript - Printing Language
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+postscript
+%!ps
diff --git a/src/usr/local/share/protocols/pplive.pat b/src/usr/local/share/protocols/pplive.pat
new file mode 100644
index 0000000..42fef72
--- /dev/null
+++ b/src/usr/local/share/protocols/pplive.pat
@@ -0,0 +1,11 @@
+# PPLive - Chinese P2P streaming video - http://pplive.com
+# Pattern attributes: ok notsofast notsofast
+# Protocol groups: p2p streaming_video proprietary
+# Wiki: http://www.protocolinfo.org/wiki/PPLive
+# Copyright (C) 2008 Matthew Strait; See ../LICENSE
+
+# By liangjun, who says that it works. It may be easily improvable with
+# a bit more testing.
+
+pplive
+\x01...\xd3.+\x0c.$
diff --git a/src/usr/local/share/protocols/pressplay.pat b/src/usr/local/share/protocols/pressplay.pat
new file mode 100644
index 0000000..cd814cc
--- /dev/null
+++ b/src/usr/local/share/protocols/pressplay.pat
@@ -0,0 +1,15 @@
+# pressplay - A legal music distribution site - http://pressplay.com
+# Pattern attributes: ok notsofast notsofast
+# Protocol groups: document_retrieval obsolete proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Pressplay
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern was "contributed" (taken with permission) by the bandwidth
+# arbitrator project (www.bandwidtharbitrator.com).
+#
+# This pattern is unconfirmed.
+
+pressplay
+# can we do better than this?
+user-agent: nsplayer
+
diff --git a/src/usr/local/share/protocols/qq.pat b/src/usr/local/share/protocols/qq.pat
new file mode 100644
index 0000000..08db802
--- /dev/null
+++ b/src/usr/local/share/protocols/qq.pat
@@ -0,0 +1,26 @@
+# Tencent QQ Protocol - Chinese instant messenger protocol - http://www.qq.com
+# Pattern attributes: good notsofast fast
+# Protocol groups: chat
+# Wiki: http://www.protocolinfo.org/wiki/QQ
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Over six million people use QQ in China, according to wsgtrsys.
+#
+# This pattern has been tested and is believed to work well.
+#
+# QQ uses three (two?) methods to connect to server(s?).
+# one is udp, and another is tcp
+# udp protocol: the first byte is 02 and last byte is 03
+# tcp protocol: the second byte is 02 and last byte is 03
+# tony on protocolinfo.org says that now the *third* byte is 02:
+# "but when I tested on my PC, I found that when qq2007/qq2008
+# use tcp protocol, the third byte instead of the second is always 02.
+#
+# So the QQ protocol changed again, or I have made a mistake, I wonder
+# that."
+# So now the pattern allows any of the first three bytes to be 02. Delete
+# one of the ".?" to restore to the old behaviour.
+# pattern written by www.routerclub.com wsgtrsys
+
+qq
+^.?.?\x02.+\x03$
diff --git a/src/usr/local/share/protocols/quake-halflife.pat b/src/usr/local/share/protocols/quake-halflife.pat
new file mode 100644
index 0000000..bc05b8f
--- /dev/null
+++ b/src/usr/local/share/protocols/quake-halflife.pat
@@ -0,0 +1,32 @@
+# Half Life 1 engine games (HL 1, Quake 2/3/World, Counterstrike 1.6, etc.)
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Half-Life http://www.protocolinfo.org/wiki/Counter-Strike http://www.protocolinfo.org/wiki/Day_of_Defeat
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Contributed by Laurens Blankers <laurens AT blankersfamily.com>, who says:
+#
+# This pattern has been tested with QuakeWorld (2.30), Quake 2 (3.20),
+# Quake 3 (1.32), and Half-life (1.1.1.0). But may also work on other
+# games based on the Quake engine.
+#
+# Clayton Macleod <cherrytwist A gmail.com> says:
+# [This should match] Counter-Strike v1.6, [...] the slightly updated
+# Counter-Strike: Condition Zero, and the game Day Of Defeat, Team
+# Fortress Classic, Deathmatch Classic, Ricochet, Half-Life [1] Deathmatch,
+# and I imagine all the other 3rd party mods that also use this engine
+# will match that pattern.
+#
+# Gavin Pryke <gavinlee303 at googlemail.com> says:
+# Added "getstatus". Quake3 games were not being matched here until it was
+# added.
+
+quake-halflife
+# All quake (like) protocols start with 4x 0xFF. Then the client either
+# issues getinfo, getchallenge or getstatus.
+^\xff\xff\xff\xffget(info|challenge|status)
+
+# A previous quake pattern allowed the connection to start with only 2 bytes
+# of 0xFF. This doesn't seem to ever happen, but we should keep an eye out
+# for it.
+
diff --git a/src/usr/local/share/protocols/quake1.pat b/src/usr/local/share/protocols/quake1.pat
new file mode 100644
index 0000000..46bdebd
--- /dev/null
+++ b/src/usr/local/share/protocols/quake1.pat
@@ -0,0 +1,19 @@
+# Quake 1 - A popular computer game.
+# Pattern attributes: marginal veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Quake
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested and unconfirmed.
+
+# Info taken from http://www.gamers.org/dEngine/quake/QDP/qnp.html,
+# which says that it "is incomplete, inaccurate and only applies to
+# versions 0.91, 0.92, 1.00 and 1.01 of QUAKE"
+
+quake1
+# Connection request: 80 00 00 0c 01 51 55 41 4b 45 00 03
+# \x80 = control packet.
+# \x0c = packet length
+# \x01 = CCREQ_CONNECT
+# \x03 = protocol version (3 == 0.91, 0.92, 1.00, 1.01)
+^\x80\x0c\x01quake\x03
diff --git a/src/usr/local/share/protocols/quicktime.pat b/src/usr/local/share/protocols/quicktime.pat
new file mode 100644
index 0000000..5a6273d
--- /dev/null
+++ b/src/usr/local/share/protocols/quicktime.pat
@@ -0,0 +1,21 @@
+# Quicktime HTTP
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: streaming_video streaming_audio ietf_draft_standard
+# Wiki: http://protocolinfo.org/wiki/HTTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+# (Quick Time v6.5.1 downloading from www.apple.com/trailers)
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/HTTP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+#
+# Since this is a subset of HTTP, it should be put earlier in the packet
+# filtering chain than HTTP. Also, please don't use this to block Quicktime.
+# If you must do that, you should use a filtering HTTP proxy, which is probably
+# more accurate.
+
+quicktime
+user-agent: quicktime \(qtver=[0-9].[0-9].[0-9];os=[\x09-\x0d -~]+\)\x0d\x0a
+
diff --git a/src/usr/local/share/protocols/radmin.pat b/src/usr/local/share/protocols/radmin.pat
new file mode 100644
index 0000000..d13aa65
--- /dev/null
+++ b/src/usr/local/share/protocols/radmin.pat
@@ -0,0 +1,17 @@
+# Famatech Remote Administrator - remote desktop for MS Windows
+# Pattern attributes: ok veryfast fast
+# Protocol groups: remote_access proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Radmin
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been verified with Radmin v1.1 and v3.0beta on Win2000/XP
+# It has only been tested between a single pair of computers.
+
+# The first packet of every TCP stream appears to be either one of:
+#
+# 01 00 00 00 01 00 00 00 08 08
+# 01 00 00 00 01 00 00 00 1b 1b
+
+radmin
+^\x01\x01(\x08\x08|\x1b\x1b)$
+
diff --git a/src/usr/local/share/protocols/rar.pat b/src/usr/local/share/protocols/rar.pat
new file mode 100644
index 0000000..1332af1
--- /dev/null
+++ b/src/usr/local/share/protocols/rar.pat
@@ -0,0 +1,7 @@
+# RAR - The WinRAR archive format
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+rar
+rar\x21\x1a\x07
diff --git a/src/usr/local/share/protocols/rdp.pat b/src/usr/local/share/protocols/rdp.pat
new file mode 100644
index 0000000..44b853f
--- /dev/null
+++ b/src/usr/local/share/protocols/rdp.pat
@@ -0,0 +1,20 @@
+# RDP - Remote Desktop Protocol (used in Windows Terminal Services)
+# Pattern attributes: ok notsofast notsofast
+# Protocol groups: remote_access proprietary
+# Wiki: http://www.protocolinfo.org/wiki/RDP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern was submitted by Michael Leong. It has been tested under the
+# following conditions: "WinXP Pro with all the patches, rdesktop server
+# running on port 7000 instead of 3389 --> WinXP Pro Remote Desktop Client."
+# Also tested is WinXP to Win 2000 Server.
+
+# At least one other person has reported it to work as well.
+
+rdp
+rdpdr.*cliprdr.*rdpsnd
+
+# Old pattern, submitted by Daniel Weatherford.
+# rdpdr.*cliprdp.*rdpsnd
+
+
diff --git a/src/usr/local/share/protocols/replaytv-ivs.pat b/src/usr/local/share/protocols/replaytv-ivs.pat
new file mode 100644
index 0000000..aaf9255
--- /dev/null
+++ b/src/usr/local/share/protocols/replaytv-ivs.pat
@@ -0,0 +1,11 @@
+# ReplayTV Internet Video Sharing - Digital Video Recorder - http://replaytv.com
+# Pattern attributes: good fast fast
+# Protocol groups:
+# Wiki: http://www.protocolinfo.org/wiki/ReplayTV
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Pattern by jm 409 at hot mail dot com, who says that this one "worked best".
+
+replaytv-ivs
+^(get /ivs-IVSGetFileChunk|http/(0\.9|1\.0|1\.1) [1-5][0-9][0-9] [\x09-\x0d -~]*\x23\x23\x23\x23\x23REPLAY_CHUNK_START\x23\x23\x23\x23\x23)
+
diff --git a/src/usr/local/share/protocols/rlogin.pat b/src/usr/local/share/protocols/rlogin.pat
new file mode 100644
index 0000000..42c4f7e
--- /dev/null
+++ b/src/usr/local/share/protocols/rlogin.pat
@@ -0,0 +1,19 @@
+# rlogin - remote login - RFC 1282
+# Pattern attributes: ok fast fast
+# Protocol groups: remote_access ietf_rfc_documented
+# Wiki: http://www.protocolinfo.org/wiki/Rlogin
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 443
+#
+# This pattern is untested.
+
+rlogin
+# At least three characters (user name, user name, terminal type),
+# the first of which could be the first character of a user name, a
+# slash, then a terminal speed. (Assumes that usernames and terminal
+# types are alphanumeric only. I'm sure there are usernames like
+# "straitm-47" out there, but it's not common.) All terminal speeds
+# I know of end in two zeros and are between 3 and 6 digits long.
+# This pattern is uncomfortably general.
+^[a-z][a-z0-9][a-z0-9]+/[1-9][0-9]?[0-9]?[0-9]?00
diff --git a/src/usr/local/share/protocols/rpm.pat b/src/usr/local/share/protocols/rpm.pat
new file mode 100644
index 0000000..0302839
--- /dev/null
+++ b/src/usr/local/share/protocols/rpm.pat
@@ -0,0 +1,7 @@
+# RPM - Redhat Package Management packages
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+rpm
+\xed\xab\xee\xdb.?.?.?.?[1-7]
diff --git a/src/usr/local/share/protocols/rtf.pat b/src/usr/local/share/protocols/rtf.pat
new file mode 100644
index 0000000..676cb1a
--- /dev/null
+++ b/src/usr/local/share/protocols/rtf.pat
@@ -0,0 +1,8 @@
+# RTF - Rich Text Format - an open document format
+# Pattern attributes: good fast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+rtf
+\{\\rtf[12]
+
diff --git a/src/usr/local/share/protocols/rtmp.pat b/src/usr/local/share/protocols/rtmp.pat
new file mode 100644
index 0000000..2c7adad
--- /dev/null
+++ b/src/usr/local/share/protocols/rtmp.pat
@@ -0,0 +1,13 @@
+# Adobe Real Time Messaging Protocol(RTMP). By Jonathan A.P. Marpaung
+# Pattern attributes: works very fast
+# Protocol Groups: streaming_video streaming_audio
+# The RTMP Specification is availabe at
+# http://www.adobe.com/devnet/rtmp/pdf/rtmp_specification_1.0.pdf [^]
+#
+# First 12 bytes, starting at \x03 are the RTMP header. Next 25 bytes,
+# starting at \x02, are part of the RTMP body which is an AMF Object.
+# The first string "connect" is a command of the NetConnection class object.
+# The next string "app" is a Command Object which is followed by values
+# such as "video", .
+rtmp
+^\x03.+\x14.+\x02.+\x07.(connect)?.+(app)?
diff --git a/src/usr/local/share/protocols/rtp.pat b/src/usr/local/share/protocols/rtp.pat
new file mode 100644
index 0000000..61fcd8e
--- /dev/null
+++ b/src/usr/local/share/protocols/rtp.pat
@@ -0,0 +1,33 @@
+# RTP - Real-time Transport Protocol - RFC 3550
+# Pattern attributes: ok overmatch undermatch fast fast
+# Protocol groups: streaming_video ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/RTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# RTP headers are *very* short and compact. They have almost nothing in
+# them that can be matched by l7-filter. As RTP connections take place
+# between even numbered ports, you should probably check for that before
+# applying this pattern. If you want to match them along with their
+# associated SIP packets, you might try setting up some iptables rules
+# that watch for SIP packets and then also match any other UDP packets
+# that are going between the same two IP addresses.
+#
+# I think we can count on the first bit being 1 and the second bit being
+# 0 (meaning protocol version 2). The next two bits could go either way,
+# but in the example I've seen, they are zero, so I'll assume they are
+# usually zero. The next four bits are a count of "contributing source
+# identifiers". I'm not sure how big that could be, but in the example
+# I've seen, they're zero, so I'll assume they're usually zero. So that
+# gives us ^\x80. The next bit is a tossup. Next is the payload type, 7
+# bits. I've taken likely values from the WireShark code: 0-34, 96-127
+# (decimal). The rest of the header is random numbers (sequence number,
+# timestamp, synchronization source identifier), so that's no help at
+# all.
+
+rtp
+^\x80[\x01-"`-\x7f\x80-\xa2\xe0-\xff]?..........*\x80
+
+# Might also try this. It's a bit slower (one packet and not too much extra
+# regexec load) and a bit more accurate:
+#^\x80[\x01-"`-\x7f\x80-\xa2\xe0-\xff]?..........*\x80.*\x80
+
diff --git a/src/usr/local/share/protocols/rtsp.pat b/src/usr/local/share/protocols/rtsp.pat
new file mode 100644
index 0000000..1013ae3
--- /dev/null
+++ b/src/usr/local/share/protocols/rtsp.pat
@@ -0,0 +1,15 @@
+# RTSP - Real Time Streaming Protocol - http://www.rtsp.org - RFC 2326
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: streaming_video ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/RTSP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 554
+#
+# To take full advantage of this pattern, please see the RTSP connection
+# tracking patch to the Linux kernel referenced at the above site.
+#
+# This pattern has been tested and is believed to work well.
+
+rtsp
+rtsp/1.0 200 ok
diff --git a/src/usr/local/share/protocols/runesofmagic.pat b/src/usr/local/share/protocols/runesofmagic.pat
new file mode 100644
index 0000000..6fbfea4
--- /dev/null
+++ b/src/usr/local/share/protocols/runesofmagic.pat
@@ -0,0 +1,63 @@
+# Runes of Magic - game - http://www.runesofmagic.com
+# Pattern attributes: ok veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Runes_of_Magic
+# Copyright (C) 2008 Matthew Strait; See ../LICENSE
+
+runesofmagic
+^\x10\x03...........\x0a\x02.....\x0e
+# See below (this is also veryfast fast)
+#^\x10\x03...........?\x0a\x02.....?$
+
+# Greatwolf captured the following:
+#
+# Server:
+#
+# 10 00 00 00 03 78 76 7a 1e 8a dd b5 95 a3 3a de .....xvz ......:.
+# 0a 00 00 00 02 df 85 cc cc cc ........ ..
+#
+# Client reply:
+#
+# 0e 00 00 00 02 28 82 cc cc cc 8b c9 cc cc .....(.. ......
+#
+# Server:
+#
+# 2e 00 00 00 02 1e 7f f4 f4 f4 ef f4 f4 f4 b3 8c ........ ........
+# [...]
+#
+# And says: "Bytes 10 00 00 00 03, 0a 00 00 00 02 and 0e (client reply)
+# were consistently present.
+#
+# ^\x10\x03...........\x0a\x02.....\x0e
+#
+# Pattern was able to match during the closed beta period. It is still
+# matching okay after RoM started open beta but could definitely use
+# more testing from others to verify effectiveness."
+#
+# Matthew Strait says:
+#
+# * If the server consistently sends those four bytes in the first packet,
+# it is probably wasteful to wait for the next (client) packet before
+# matching.
+#
+# * If we switch the match strategy to just looking at the first packet, and
+# the first packet is always the same (or nearly the same) length, we can
+# anchor (i.e. use a '$') at the end of the packet.
+#
+# * When there's a string of bytes that I don't understand and that take
+# different values from connection to connection, I think it's good to allow
+# for the possibility that at least one might be \x00, and so I'd make one
+# of the "." into ".?", unless you *know* that \x00 is impossible somehow.
+#
+# * All of those \xcc bytes don't look random to me. Your comments suggest
+# that it isn't always exactly like that, but is there always pattern of
+# repeated bytes or something else that might be useful? It probably isn't
+# necessary to exploit this, since it looks like there's already enough to
+# go with, but it would be nice to understand.
+#
+# So perhaps it would be an improvement to use:
+#
+# ^\x10\x03...........?\x0a\x02.....?$
+#
+# but this depends on the assumptions I made above.
+
diff --git a/src/usr/local/share/protocols/shoutcast.pat b/src/usr/local/share/protocols/shoutcast.pat
new file mode 100644
index 0000000..e78883c
--- /dev/null
+++ b/src/usr/local/share/protocols/shoutcast.pat
@@ -0,0 +1,27 @@
+# Shoutcast and Icecast - streaming audio
+# Pattern attributes: good slow notsofast
+# Protocol groups: streaming_audio
+# Wiki: http://www.protocolinfo.org/wiki/Icecast
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 80
+#
+# Original pattern contributed by Deepak Seshadri <dseshadri AT
+# broadbandmaritime.com> who says "The difference between [Shoutcast and
+# Icecast] is not clearly mentioned anywhere. According to this
+# document, my pattern would filter JUST shoutcast packets."
+#
+# Should now match both Shoutcast and Icecast. Tested with Winamp (in
+# 2005) and Totem using streams at dir.xiph.org (in Nov 2007).
+#
+# http://sander.vanzoest.com/talks/2002/audio_and_apache/
+# http://forums.radiotoolbox.com/viewtopic.php?t=74
+# http://www.icecast.org
+
+shoutcast
+# The first branch looks for an HTTP request that looks like it is asking for
+# a SHOUTcast stream. The second branch looks for the server's reply. However,
+# some (newer?) servers answer with "http/1.0 200 OK", not "ICY 200 OK", so
+# this will not work.
+# This pattern was discovered using Ethereal.
+^get /.*icy-metadata:1|icy [1-5][0-9][0-9] [\x09-\x0d -~]*(content-type:audio|icy-)
diff --git a/src/usr/local/share/protocols/sip.pat b/src/usr/local/share/protocols/sip.pat
new file mode 100644
index 0000000..2728009
--- /dev/null
+++ b/src/usr/local/share/protocols/sip.pat
@@ -0,0 +1,20 @@
+# SIP - Session Initiation Protocol - Internet telephony - RFC 3261, 3265, etc.
+# Pattern attributes: good fast fast
+# Protocol groups: voip ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/SIP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested with the Ubiquity SIP user agent and has been
+# confirmed by at least one other user.
+#
+# Thanks to Ankit Desai for this pattern. Updated by tehseen sagar.
+#
+# SIP typically uses port 5060.
+#
+# This pattern is based on SIP request format as per RFC 3261. I'm not
+# sure about the version part. The RFC doesn't say anything about it, so
+# I have allowed version ranging from 0.x to 2.x.
+
+#Request-Line = Method SP Request-URI SP SIP-Version CRLF
+sip
+^(invite|register|cancel|message|subscribe|notify) sip[\x09-\x0d -~]*sip/[0-2]\.[0-9]
diff --git a/src/usr/local/share/protocols/skypeout.pat b/src/usr/local/share/protocols/skypeout.pat
new file mode 100644
index 0000000..55e4e10
--- /dev/null
+++ b/src/usr/local/share/protocols/skypeout.pat
@@ -0,0 +1,50 @@
+# Skype to phone - UDP voice call (program to POTS phone) - http://skype.com
+# Pattern attributes: ok slow notsofast overmatch
+# Protocol groups: voip p2p proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Skype
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# Thanks to Myles Uyema, mylesuyema AT gmail.com
+
+# Taken using Ethereal traces of Windows Skype v1.2.037, same in v1.2.0.18_API
+#
+# Skype will attempt to use the same UDP port for all its connections as
+# configured in its options. However, this is a random port by default.
+# Skype has some preference for ports 80 and 443.
+#
+# Example sessions:
+#
+#SkypeOut <USA phone number>
+#c6 5c bf 41 8e 8d d6 d2 08 <-- this is sometimes as short as 1 byte and
+#c6 5c bf 41 8e 8d d6 d2 08 <-- sometimes as long as 9 (or more?)
+#00 6b 2c f5 87 f1 06
+#00 6b 2c f5 87 f1 06
+#00 6b 2c f5 36 ea 85
+#00 6b 2c f5 36 ea 85
+#00 6b 2c f5 57 27 d4
+#00 6b 2c f5 57 27 d4
+#00 6b 2c f5 43 5b 00
+#00 6b 2c f5 43 5b 00
+#
+#SkypeOut <USA phone number>
+#7e 4f e5 b8
+#7e 4f e5 b8
+#00 6b 88 61 80 52 93
+#00 6b 88 61 80 52 93
+#00 6b 88 61 1a 09 e9
+#00 6b 88 61 1a 09 e9
+#00 6b 88 61 47 43 c4
+#00 6b 88 61 47 43 c4
+
+skypeout
+
+# Scary. Our regular expressions suck. This is a prime candidate for
+# some sort of a scheme to support two different regular expressions
+# when there's a major difference between what the two libraries allow.
+# For the Henry Spencer library, there's not much that can be done
+# except requiring that we see the same byte twice.
+
+# This matches about %4 of random streams and 13% of printable random streams
+
+# This is slow, but not as bad as you might think.
+^(\x01.?.?.?.?.?.?.?.?\x01|\x02.?.?.?.?.?.?.?.?\x02|\x03.?.?.?.?.?.?.?.?\x03|\x04.?.?.?.?.?.?.?.?\x04|\x05.?.?.?.?.?.?.?.?\x05|\x06.?.?.?.?.?.?.?.?\x06|\x07.?.?.?.?.?.?.?.?\x07|\x08.?.?.?.?.?.?.?.?\x08|\x09.?.?.?.?.?.?.?.?\x09|\x0a.?.?.?.?.?.?.?.?\x0a|\x0b.?.?.?.?.?.?.?.?\x0b|\x0c.?.?.?.?.?.?.?.?\x0c|\x0d.?.?.?.?.?.?.?.?\x0d|\x0e.?.?.?.?.?.?.?.?\x0e|\x0f.?.?.?.?.?.?.?.?\x0f|\x10.?.?.?.?.?.?.?.?\x10|\x11.?.?.?.?.?.?.?.?\x11|\x12.?.?.?.?.?.?.?.?\x12|\x13.?.?.?.?.?.?.?.?\x13|\x14.?.?.?.?.?.?.?.?\x14|\x15.?.?.?.?.?.?.?.?\x15|\x16.?.?.?.?.?.?.?.?\x16|\x17.?.?.?.?.?.?.?.?\x17|\x18.?.?.?.?.?.?.?.?\x18|\x19.?.?.?.?.?.?.?.?\x19|\x1a.?.?.?.?.?.?.?.?\x1a|\x1b.?.?.?.?.?.?.?.?\x1b|\x1c.?.?.?.?.?.?.?.?\x1c|\x1d.?.?.?.?.?.?.?.?\x1d|\x1e.?.?.?.?.?.?.?.?\x1e|\x1f.?.?.?.?.?.?.?.?\x1f|\x20.?.?.?.?.?.?.?.?\x20|\x21.?.?.?.?.?.?.?.?\x21|\x22.?.?.?.?.?.?.?.?\x22|\x23.?.?.?.?.?.?.?.?\x23|\$.?.?.?.?.?.?.?.?\$|\x25.?.?.?.?.?.?.?.?\x25|\x26.?.?.?.?.?.?.?.?\x26|\x27.?.?.?.?.?.?.?.?\x27|\(.?.?.?.?.?.?.?.?\(|\).?.?.?.?.?.?.?.?\)|\*.?.?.?.?.?.?.?.?\*|\+.?.?.?.?.?.?.?.?\+|\x2c.?.?.?.?.?.?.?.?\x2c|\x2d.?.?.?.?.?.?.?.?\x2d|\..?.?.?.?.?.?.?.?\.|\x2f.?.?.?.?.?.?.?.?\x2f|\x30.?.?.?.?.?.?.?.?\x30|\x31.?.?.?.?.?.?.?.?\x31|\x32.?.?.?.?.?.?.?.?\x32|\x33.?.?.?.?.?.?.?.?\x33|\x34.?.?.?.?.?.?.?.?\x34|\x35.?.?.?.?.?.?.?.?\x35|\x36.?.?.?.?.?.?.?.?\x36|\x37.?.?.?.?.?.?.?.?\x37|\x38.?.?.?.?.?.?.?.?\x38|\x39.?.?.?.?.?.?.?.?\x39|\x3a.?.?.?.?.?.?.?.?\x3a|\x3b.?.?.?.?.?.?.?.?\x3b|\x3c.?.?.?.?.?.?.?.?\x3c|\x3d.?.?.?.?.?.?.?.?\x3d|\x3e.?.?.?.?.?.?.?.?\x3e|\?.?.?.?.?.?.?.?.?\?|\x40.?.?.?.?.?.?.?.?\x40|\x41.?.?.?.?.?.?.?.?\x41|\x42.?.?.?.?.?.?.?.?\x42|\x43.?.?.?.?.?.?.?.?\x43|\x44.?.?.?.?.?.?.?.?\x44|\x45.?.?.?.?.?.?.?.?\x45|\x46.?.?.?.?.?.?.?.?\x46|\x47.?.?.?.?.?.?.?.?\x47|\x48.?.?.?.?.?.?.?.?\x48|\x49.?.?.?.?.?.?.?.?\x49|\x4a.?.?.?.?.?.?.?.?\x4a|\x4b.?.?.?.?.?.?.?.?\x4b|\x4c.?.?.?.?.?.?.?.?\x4c|\x4d.?.?.?.?.?.?.?.?\x4d|\x4e.?.?.?.?.?.?.?.?\x4e|\x4f.?.?.?.?.?.?.?.?\x4f|\x50.?.?.?.?.?.?.?.?\x50|\x51.?.?.?.?.?.?.?.?\x51|\x52.?.?.?.?.?.?.?.?\x52|\x53.?.?.?.?.?.?.?.?\x53|\x54.?.?.?.?.?.?.?.?\x54|\x55.?.?.?.?.?.?.?.?\x55|\x56.?.?.?.?.?.?.?.?\x56|\x57.?.?.?.?.?.?.?.?\x57|\x58.?.?.?.?.?.?.?.?\x58|\x59.?.?.?.?.?.?.?.?\x59|\x5a.?.?.?.?.?.?.?.?\x5a|\[.?.?.?.?.?.?.?.?\[|\\.?.?.?.?.?.?.?.?\\|\].?.?.?.?.?.?.?.?\]|\^.?.?.?.?.?.?.?.?\^|\x5f.?.?.?.?.?.?.?.?\x5f|\x60.?.?.?.?.?.?.?.?\x60|\x61.?.?.?.?.?.?.?.?\x61|\x62.?.?.?.?.?.?.?.?\x62|\x63.?.?.?.?.?.?.?.?\x63|\x64.?.?.?.?.?.?.?.?\x64|\x65.?.?.?.?.?.?.?.?\x65|\x66.?.?.?.?.?.?.?.?\x66|\x67.?.?.?.?.?.?.?.?\x67|\x68.?.?.?.?.?.?.?.?\x68|\x69.?.?.?.?.?.?.?.?\x69|\x6a.?.?.?.?.?.?.?.?\x6a|\x6b.?.?.?.?.?.?.?.?\x6b|\x6c.?.?.?.?.?.?.?.?\x6c|\x6d.?.?.?.?.?.?.?.?\x6d|\x6e.?.?.?.?.?.?.?.?\x6e|\x6f.?.?.?.?.?.?.?.?\x6f|\x70.?.?.?.?.?.?.?.?\x70|\x71.?.?.?.?.?.?.?.?\x71|\x72.?.?.?.?.?.?.?.?\x72|\x73.?.?.?.?.?.?.?.?\x73|\x74.?.?.?.?.?.?.?.?\x74|\x75.?.?.?.?.?.?.?.?\x75|\x76.?.?.?.?.?.?.?.?\x76|\x77.?.?.?.?.?.?.?.?\x77|\x78.?.?.?.?.?.?.?.?\x78|\x79.?.?.?.?.?.?.?.?\x79|\x7a.?.?.?.?.?.?.?.?\x7a|\{.?.?.?.?.?.?.?.?\{|\|.?.?.?.?.?.?.?.?\||\}.?.?.?.?.?.?.?.?\}|\x7e.?.?.?.?.?.?.?.?\x7e|\x7f.?.?.?.?.?.?.?.?\x7f|\x80.?.?.?.?.?.?.?.?\x80|\x81.?.?.?.?.?.?.?.?\x81|\x82.?.?.?.?.?.?.?.?\x82|\x83.?.?.?.?.?.?.?.?\x83|\x84.?.?.?.?.?.?.?.?\x84|\x85.?.?.?.?.?.?.?.?\x85|\x86.?.?.?.?.?.?.?.?\x86|\x87.?.?.?.?.?.?.?.?\x87|\x88.?.?.?.?.?.?.?.?\x88|\x89.?.?.?.?.?.?.?.?\x89|\x8a.?.?.?.?.?.?.?.?\x8a|\x8b.?.?.?.?.?.?.?.?\x8b|\x8c.?.?.?.?.?.?.?.?\x8c|\x8d.?.?.?.?.?.?.?.?\x8d|\x8e.?.?.?.?.?.?.?.?\x8e|\x8f.?.?.?.?.?.?.?.?\x8f|\x90.?.?.?.?.?.?.?.?\x90|\x91.?.?.?.?.?.?.?.?\x91|\x92.?.?.?.?.?.?.?.?\x92|\x93.?.?.?.?.?.?.?.?\x93|\x94.?.?.?.?.?.?.?.?\x94|\x95.?.?.?.?.?.?.?.?\x95|\x96.?.?.?.?.?.?.?.?\x96|\x97.?.?.?.?.?.?.?.?\x97|\x98.?.?.?.?.?.?.?.?\x98|\x99.?.?.?.?.?.?.?.?\x99|\x9a.?.?.?.?.?.?.?.?\x9a|\x9b.?.?.?.?.?.?.?.?\x9b|\x9c.?.?.?.?.?.?.?.?\x9c|\x9d.?.?.?.?.?.?.?.?\x9d|\x9e.?.?.?.?.?.?.?.?\x9e|\x9f.?.?.?.?.?.?.?.?\x9f|\xa0.?.?.?.?.?.?.?.?\xa0|\xa1.?.?.?.?.?.?.?.?\xa1|\xa2.?.?.?.?.?.?.?.?\xa2|\xa3.?.?.?.?.?.?.?.?\xa3|\xa4.?.?.?.?.?.?.?.?\xa4|\xa5.?.?.?.?.?.?.?.?\xa5|\xa6.?.?.?.?.?.?.?.?\xa6|\xa7.?.?.?.?.?.?.?.?\xa7|\xa8.?.?.?.?.?.?.?.?\xa8|\xa9.?.?.?.?.?.?.?.?\xa9|\xaa.?.?.?.?.?.?.?.?\xaa|\xab.?.?.?.?.?.?.?.?\xab|\xac.?.?.?.?.?.?.?.?\xac|\xad.?.?.?.?.?.?.?.?\xad|\xae.?.?.?.?.?.?.?.?\xae|\xaf.?.?.?.?.?.?.?.?\xaf|\xb0.?.?.?.?.?.?.?.?\xb0|\xb1.?.?.?.?.?.?.?.?\xb1|\xb2.?.?.?.?.?.?.?.?\xb2|\xb3.?.?.?.?.?.?.?.?\xb3|\xb4.?.?.?.?.?.?.?.?\xb4|\xb5.?.?.?.?.?.?.?.?\xb5|\xb6.?.?.?.?.?.?.?.?\xb6|\xb7.?.?.?.?.?.?.?.?\xb7|\xb8.?.?.?.?.?.?.?.?\xb8|\xb9.?.?.?.?.?.?.?.?\xb9|\xba.?.?.?.?.?.?.?.?\xba|\xbb.?.?.?.?.?.?.?.?\xbb|\xbc.?.?.?.?.?.?.?.?\xbc|\xbd.?.?.?.?.?.?.?.?\xbd|\xbe.?.?.?.?.?.?.?.?\xbe|\xbf.?.?.?.?.?.?.?.?\xbf|\xc0.?.?.?.?.?.?.?.?\xc0|\xc1.?.?.?.?.?.?.?.?\xc1|\xc2.?.?.?.?.?.?.?.?\xc2|\xc3.?.?.?.?.?.?.?.?\xc3|\xc4.?.?.?.?.?.?.?.?\xc4|\xc5.?.?.?.?.?.?.?.?\xc5|\xc6.?.?.?.?.?.?.?.?\xc6|\xc7.?.?.?.?.?.?.?.?\xc7|\xc8.?.?.?.?.?.?.?.?\xc8|\xc9.?.?.?.?.?.?.?.?\xc9|\xca.?.?.?.?.?.?.?.?\xca|\xcb.?.?.?.?.?.?.?.?\xcb|\xcc.?.?.?.?.?.?.?.?\xcc|\xcd.?.?.?.?.?.?.?.?\xcd|\xce.?.?.?.?.?.?.?.?\xce|\xcf.?.?.?.?.?.?.?.?\xcf|\xd0.?.?.?.?.?.?.?.?\xd0|\xd1.?.?.?.?.?.?.?.?\xd1|\xd2.?.?.?.?.?.?.?.?\xd2|\xd3.?.?.?.?.?.?.?.?\xd3|\xd4.?.?.?.?.?.?.?.?\xd4|\xd5.?.?.?.?.?.?.?.?\xd5|\xd6.?.?.?.?.?.?.?.?\xd6|\xd7.?.?.?.?.?.?.?.?\xd7|\xd8.?.?.?.?.?.?.?.?\xd8|\xd9.?.?.?.?.?.?.?.?\xd9|\xda.?.?.?.?.?.?.?.?\xda|\xdb.?.?.?.?.?.?.?.?\xdb|\xdc.?.?.?.?.?.?.?.?\xdc|\xdd.?.?.?.?.?.?.?.?\xdd|\xde.?.?.?.?.?.?.?.?\xde|\xdf.?.?.?.?.?.?.?.?\xdf|\xe0.?.?.?.?.?.?.?.?\xe0|\xe1.?.?.?.?.?.?.?.?\xe1|\xe2.?.?.?.?.?.?.?.?\xe2|\xe3.?.?.?.?.?.?.?.?\xe3|\xe4.?.?.?.?.?.?.?.?\xe4|\xe5.?.?.?.?.?.?.?.?\xe5|\xe6.?.?.?.?.?.?.?.?\xe6|\xe7.?.?.?.?.?.?.?.?\xe7|\xe8.?.?.?.?.?.?.?.?\xe8|\xe9.?.?.?.?.?.?.?.?\xe9|\xea.?.?.?.?.?.?.?.?\xea|\xeb.?.?.?.?.?.?.?.?\xeb|\xec.?.?.?.?.?.?.?.?\xec|\xed.?.?.?.?.?.?.?.?\xed|\xee.?.?.?.?.?.?.?.?\xee|\xef.?.?.?.?.?.?.?.?\xef|\xf0.?.?.?.?.?.?.?.?\xf0|\xf1.?.?.?.?.?.?.?.?\xf1|\xf2.?.?.?.?.?.?.?.?\xf2|\xf3.?.?.?.?.?.?.?.?\xf3|\xf4.?.?.?.?.?.?.?.?\xf4|\xf5.?.?.?.?.?.?.?.?\xf5|\xf6.?.?.?.?.?.?.?.?\xf6|\xf7.?.?.?.?.?.?.?.?\xf7|\xf8.?.?.?.?.?.?.?.?\xf8|\xf9.?.?.?.?.?.?.?.?\xf9|\xfa.?.?.?.?.?.?.?.?\xfa|\xfb.?.?.?.?.?.?.?.?\xfb|\xfc.?.?.?.?.?.?.?.?\xfc|\xfd.?.?.?.?.?.?.?.?\xfd|\xfe.?.?.?.?.?.?.?.?\xfe|\xff.?.?.?.?.?.?.?.?\xff)
diff --git a/src/usr/local/share/protocols/skypetoskype.pat b/src/usr/local/share/protocols/skypetoskype.pat
new file mode 100644
index 0000000..ed1103a
--- /dev/null
+++ b/src/usr/local/share/protocols/skypetoskype.pat
@@ -0,0 +1,14 @@
+# Skype to Skype - UDP voice call (program to program) - http://skype.com
+# Pattern attributes: ok veryfast fast overmatch
+# Protocol groups: voip p2p proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Skype
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This matches at least some of the general chatter that occurs when the
+# user isn't doing anything as well as actual calls.
+# Thanks to Myles Uyema, mylesuyema AT gmail.com
+
+skypetoskype
+# require at least 16 bytes (my limited tests always get at least 18)
+^..\x02.............
+
diff --git a/src/usr/local/share/protocols/smb.pat b/src/usr/local/share/protocols/smb.pat
new file mode 100644
index 0000000..c1f8b0a
--- /dev/null
+++ b/src/usr/local/share/protocols/smb.pat
@@ -0,0 +1,19 @@
+# Samba/SMB - Server Message Block - Microsoft Windows filesharing
+# Pattern attributes: good fast notsofast
+# Protocol groups: document_retrieval networking proprietary
+# Wiki: http://www.protocolinfo.org/wiki/SMB
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# "This protocol is sometimes also referred to as the Common Internet File
+# System (CIFS), LanManager or NetBIOS protocol." -- "man samba"
+#
+# Actually, SMB is a higher level protocol than NetBIOS. However, the
+# NetBIOS header is only 4 bytes: not much to match on.
+#
+# http://www.ubiqx.org/cifs/SMB.html
+#
+# This pattern is lightly tested.
+
+smb
+# matches a NEGOTIATE PROTOCOL or TRANSACTION REQUEST command
+\xffsmb[\x72\x25]
diff --git a/src/usr/local/share/protocols/smtp.pat b/src/usr/local/share/protocols/smtp.pat
new file mode 100644
index 0000000..2f5d195
--- /dev/null
+++ b/src/usr/local/share/protocols/smtp.pat
@@ -0,0 +1,40 @@
+# SMTP - Simple Mail Transfer Protocol - RFC 2821 (See also RFC 1869)
+# Pattern attributes: great notsofast fast
+# Protocol groups: mail ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/SMTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 25
+#
+# This pattern has been tested and is believed to work well.
+
+# As usual, no text is required after "220", but all known servers have some
+# there. It (almost?) always has string "smtp" in it. The RFC examples
+# does not, so we match those too, just in case anyone has copied them
+# literally.
+#
+# Some examples:
+# 220 mail.stalker.com ESMTP CommuniGate Pro 4.1.3
+# 220 mail.vieodata.com ESMTP Merak 6.1.0; Mon, 15 Sep 2003 13:48:11 -0400
+# 220 mail.ut.caldera.com ESMTP
+# 220 persephone.pmail.gen.nz ESMTP server ready.
+# 220 smtp1.superb.net ESMTP
+# 220 mail.kerio.com Kerio MailServer 5.6.7 ESMTP ready
+# 220-mail.deerfield.com ESMTP VisNetic.MailServer.v6.0.9.0; Mon, 15 Sep 2003 13:4
+# 220 altn.com ESMTP MDaemon 6.8.5; Mon, 15 Sep 2003 12:46:42 -0500
+# 220 X1 NT-ESMTP Server ipsmin0165atl2.interland.net (IMail 6.06 73062-3)
+# 220 mail.icewarp.com ESMTP Merak 6.1.1; Mon, 15 Sep 2003 19:43:23 +0200
+# 220-mail.email-scan.com ESMTP
+# 220 smaug.dreamhost.com ESMTP
+# 220 kona.carleton.edu -- Server ESMTP (PMDF V6.2#30648)
+# 220 letra.reed.edu ESMTP Sendmail 8.12.9/8.12.9; Mon, 15 Sep 2003 10:35:57 -0700 (PDT)
+# 220-swan.mail.pas.earthlink.net ESMTP Exim 3.33 #1 Mon, 15 Sep 2003 10:32:15 -0700
+#
+# RFC examples:
+# 220 xyz.com Simple Mail Transfer Service Ready (RFC example)
+# 220 dbc.mtview.ca.us SMTP service ready
+
+smtp
+^220[\x09-\x0d -~]* (e?smtp|simple mail)
+userspace pattern=^220[\x09-\x0d -~]* (E?SMTP|[Ss]imple [Mm]ail)
+userspace flags=REG_NOSUB REG_EXTENDED
diff --git a/src/usr/local/share/protocols/snmp-mon.pat b/src/usr/local/share/protocols/snmp-mon.pat
new file mode 100644
index 0000000..fe22662
--- /dev/null
+++ b/src/usr/local/share/protocols/snmp-mon.pat
@@ -0,0 +1,32 @@
+# SNMP Monitoring - Simple Network Management Protocol (RFC1157)
+# Pattern attributes: good veryfast fast subset
+# Protocol groups: networking ietf_internet_standard
+# Wiki: http://en.wikipedia.org/wiki/SNMP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on UDP ports 161
+#
+# These filters match SNMPv1 packets without fail, and are made
+# as specific as possible not to match any ASN.1 encoded protocols.
+# However these could still be matched by other protocols that
+# use ASN.1 encoding
+
+# Contributed by Goli SriSairam <goli_sai AT yahoo.com>
+
+# This pattern has been tested and is believe to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/SNMP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+
+# SNMPv1 GET/GETNEXT/SET request and response
+# matches SNMP header
+# version \x02\x01
+# community \x04.+
+# PDU type [\xa0-\xa3] (GET/GETNEXT/SET/GETRESPONSE)
+# RequestId \x02[\x01-\x04].?.?.?.?
+# errorStatus \x02\x01.?
+# errorIndex \x02\x01.?
+# varbinds start \x30
+snmp-mon
+^\x02\x01\x04.+[\xa0-\xa3]\x02[\x01-\x04].?.?.?.?\x02\x01.?\x02\x01.?\x30
diff --git a/src/usr/local/share/protocols/snmp-trap.pat b/src/usr/local/share/protocols/snmp-trap.pat
new file mode 100644
index 0000000..e8ba19a
--- /dev/null
+++ b/src/usr/local/share/protocols/snmp-trap.pat
@@ -0,0 +1,33 @@
+# SNMP Traps - Simple Network Management Protocol (RFC1157)
+# Pattern attributes: good veryfast fast subset
+# Protocol groups: networking ietf_internet_standard
+# Wiki: http://en.wikipedia.org/wiki/SNMP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on UDP ports 162
+#
+# These filters match SNMPv1 packets without fail, and are made
+# as specific as possible not to match any ASN.1 encoded protocols.
+# However these could still be matched by other protocols that
+# use ASN.1 encoding
+
+# Contributed by Goli SriSairam <goli_sai AT yahoo.com>
+
+# This pattern has been tested and is believe to work well.
+#
+# To get or provide more information about this protocol and/or pattern:
+# http://www.protocolinfo.org/wiki/SNMP
+# http://lists.sourceforge.net/lists/listinfo/l7-filter-developers
+
+# SNMPv1 Trap
+# matches SNMP trap header
+# version \x02\x01
+# community string \x04.+
+# PDU type \xa4 (TRAP)
+# enterprise \x06.+
+# agent address \x40\x04\.?.?.?.?
+# trap type \x02\x01.?
+# specific trap type \x02\x01.?
+# timestamp \x43
+snmp-trap
+^\x02\x01\x04.+\xa4\x06.+\x40\x04.?.?.?.?\x02\x01.?\x02\x01.?\x43
diff --git a/src/usr/local/share/protocols/snmp.pat b/src/usr/local/share/protocols/snmp.pat
new file mode 100644
index 0000000..a7186b2
--- /dev/null
+++ b/src/usr/local/share/protocols/snmp.pat
@@ -0,0 +1,19 @@
+# SNMP - Simple Network Management Protocol - RFC 1157
+# Pattern attributes: good veryfast fast superset
+# Protocol groups: networking ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/SNMP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on UDP ports 161 (monitoring) and 162 (traps).
+#
+# These filters match SNMPv1 packets without fail, and are made as
+# specific as possible not to match any ASN.1 encoded protocols. However
+# these could still be matched by other protocols that use ASN.1 encoding
+
+# Contributed by Goli SriSairam <goli_sai AT yahoo.com>
+
+# This pattern has been tested and is believed to work well.
+
+# All SNMPv1 traffic. See snmp-mon.pat and snmp-trap.pat for details.
+snmp
+^\x02\x01\x04.+([\xa0-\xa3]\x02[\x01-\x04].?.?.?.?\x02\x01.?\x02\x01.?\x30|\xa4\x06.+\x40\x04.?.?.?.?\x02\x01.?\x02\x01.?\x43)
diff --git a/src/usr/local/share/protocols/socks.pat b/src/usr/local/share/protocols/socks.pat
new file mode 100644
index 0000000..54189fd
--- /dev/null
+++ b/src/usr/local/share/protocols/socks.pat
@@ -0,0 +1,32 @@
+# SOCKS Version 5 - Firewall traversal protocol - RFC 1928
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: networking ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/SOCKS
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 1080
+# Also useful: http://www.iana.org/assignments/socks-methods
+#
+# We have had two reports that this pattern works.
+
+# method request, no private methods \x05[\x01-\x08]*
+# method reply, assumes sucess \x05[\x01-\x08]?
+# method dependent sub-negotiation .*
+# request, ipv4 only \x05[\x01-\x03][\x01\x03].*
+# reply \x05[\x01-\x08]?[\x01\x03].*
+
+# username/password method
+# u/p request, assuming reasonable usernames and passwords
+# \x05[\x02-\x10][a-z][a-z0-9\-]*[\x05-\x20][!-~]*
+# server reply
+# \x05
+
+# GSSAPI method
+# client initial token \x01\x01\x02.*
+# server reply \x01\x01\x02.*
+
+# any other method .* (all methods boil down to this until we have information
+# about all the commonly used ones)
+
+socks
+\x05[\x01-\x08]*\x05[\x01-\x08]?.*\x05[\x01-\x03][\x01\x03].*\x05[\x01-\x08]?[\x01\x03]
diff --git a/src/usr/local/share/protocols/soribada.pat b/src/usr/local/share/protocols/soribada.pat
new file mode 100644
index 0000000..e1c0c56
--- /dev/null
+++ b/src/usr/local/share/protocols/soribada.pat
@@ -0,0 +1,51 @@
+# Soribada - A Korean P2P filesharing program/protocol - http://www.soribada.com
+# Pattern attributes: good slow notsofast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Soribada
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# I am told that there are three versions of this protocol, the first no
+# longer being used. That would probably explain why incoming searches
+# have two different formats...
+
+# There are three parts to Soribada protocal:
+# 1: Ping/Pong to establish a relationship on the net (UDP with 2 useful bytes)
+# 2: Searching (in two formats) (UDP with two short easy to match starts)
+# 3: Download requests/transfers (TCP with an obvious first packet)
+
+# 1 -- Pings/Pongs:
+# Requester send 2 bytes and a 6 byte response is sent back.
+# \x10 for the first byte and \x14-\x16 for the second.
+# The response is the first byte (\x10) and the second byte incremented
+# by 1 (\x15-\x17).
+# No further communication happens between the hosts except for searches.
+# A regex match: ^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$
+# First Packet ---^^^^^^^^^^^^^^^
+# Second Packet -----------------^^^^^^^^^^^^^^^^^^^^^^^
+
+# 2 -- Search requests:
+# All searches are totally stateless and are only responded to if the user
+# actually has the file.
+# Both format start with a \x01 byte, have 3 "random bytes" and then 3 bytes
+# corasponding to one of two formats.
+# Format 1 is \x51\x3a\+ and format 2 is \x51\x32\x3a
+# A regex match: ^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a)
+
+# 3 -- Download requests:
+# All downloads start with "GETMP3\x0d\x0aFilename"
+# A regex match: ^GETMP3\x0d\x0aFilename
+
+soribada
+
+# This will match the second packet of two.
+# ^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$
+
+# Again, matching this is the end of the comunication.
+# ^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a)
+
+# This is the start of the transfer and an easy match
+#^GETMP3\x0d\x0aFilename
+
+# This will match everything including the udp packet portions
+^GETMP3\x0d\x0aFilename|^\x01.?.?.?(\x51\x3a\+|\x51\x32\x3a)|^\x10[\x14-\x16]\x10[\x15-\x17].?.?.?.?$
+
diff --git a/src/usr/local/share/protocols/soulseek.pat b/src/usr/local/share/protocols/soulseek.pat
new file mode 100644
index 0000000..ebc06ab
--- /dev/null
+++ b/src/usr/local/share/protocols/soulseek.pat
@@ -0,0 +1,17 @@
+# Soulseek - P2P filesharing - http://slsknet.org
+# Pattern attributes: good fast fast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Soulseek
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# All my tests show that this pattern is fast, but one user has reported that
+# it is slow. Your milage may vary.
+
+# This has been tested and works for "pierce firewall" commands and file
+# transfers. It does *not* match all the various sorts of chatter that go on,
+# such as searches, pings and whatnot.
+
+soulseek
+# (Pierce firewall: in theory the token could be 4 bytes, but the last two
+# seem to always be zero.|download: Peer Init)
+^(\x05..?|.\x01.[ -~]+\x01F..?.?.?.?.?.?.?)$
diff --git a/src/usr/local/share/protocols/ssdp.pat b/src/usr/local/share/protocols/ssdp.pat
new file mode 100644
index 0000000..d2de92d
--- /dev/null
+++ b/src/usr/local/share/protocols/ssdp.pat
@@ -0,0 +1,21 @@
+# SSDP - Simple Service Discovery Protocol - easy discovery of network devices
+# Pattern attributes: good slow notsofast
+# Protocol groups: networking ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/SSDP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This pattern was tested only by listening to a Linksys WRT54G. However,
+# I expect it works in general given the simplicity of the protocol.
+
+# SSDP packets should _always_ be sent to the multicast address
+# 239.255.255.250, making this pattern irrelevant. (Moreover, SSDP
+# packets should be resitricted to local networks that have plenty of
+# bandwidth.) However, Microsoft, as usual, has other ideas, so maybe
+# it could be useful. Can't hurt, anyway. :-)
+#
+# http://www.upnp.org/download/draft_cai_ssdp_v1_03.txt
+# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/randz/protocol/ssdp.asp
+
+ssdp
+^notify[\x09-\x0d ]\*[\x09-\x0d ]http/1\.1[\x09-\x0d -~]*ssdp:(alive|byebye)|^m-search[\x09-\x0d ]\*[\x09-\x0d ]http/1\.1[\x09-\x0d -~]*ssdp:discover
+
diff --git a/src/usr/local/share/protocols/ssh.pat b/src/usr/local/share/protocols/ssh.pat
new file mode 100644
index 0000000..5e32f5c
--- /dev/null
+++ b/src/usr/local/share/protocols/ssh.pat
@@ -0,0 +1,17 @@
+# SSH - Secure SHell
+# Pattern attributes: great veryfast fast
+# Protocol groups: remote_access secure ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/SSH
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 22
+#
+# http://www.ietf.org/internet-drafts/draft-ietf-secsh-transport-22.txt
+#
+# This pattern has been tested and is believed to work well.
+
+ssh
+^ssh-[12]\.[0-9]
+
+# old pattern:
+# (diffie-hellman-group-exchange-sha1|diffie-hellman-group1-sha1.ssh-rsa|ssh-dssfaes128-cbc|3des-cbc|blowfish-cbc|cast128-cbc|arcfour|aes192-cbc|aes256-cbc|rijndael-cbc@lysator.liu.sefaes128-cbc|3des-cbc|blowfish-cbc|cast128-cbc|arcfour|aes192-cbc|aes256-cbc|rijndael-cbc@lysator.liu.seuhmac-md5|hmac-sha1|hmac-ripemd160)+
diff --git a/src/usr/local/share/protocols/ssl.pat b/src/usr/local/share/protocols/ssl.pat
new file mode 100644
index 0000000..ae30ee4
--- /dev/null
+++ b/src/usr/local/share/protocols/ssl.pat
@@ -0,0 +1,16 @@
+# SSL and TLS - Secure Socket Layer / Transport Layer Security - RFC 2246
+# Pattern attributes: good notsofast fast superset
+# Protocol groups: secure ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/SSL
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 443
+#
+# This is a superset of validcertssl. For it to match, it must be first.
+#
+# This pattern has been tested and is believed to work well.
+
+ssl
+# Server Hello with certificate | Client Hello
+# This allows SSL 3.X, which includes TLS 1.0, known internally as SSL 3.1
+^(.?.?\x16\x03.*\x16\x03|.?.?\x01\x03\x01?.*\x0b)
diff --git a/src/usr/local/share/protocols/stun.pat b/src/usr/local/share/protocols/stun.pat
new file mode 100644
index 0000000..3bfc3ab
--- /dev/null
+++ b/src/usr/local/share/protocols/stun.pat
@@ -0,0 +1,46 @@
+# STUN - Simple Traversal of UDP Through NAT - RFC 3489
+# Pattern attributes: ok veryfast fast
+# Protocol groups: networking ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/STUN
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested as far as I know.
+
+# Wikipedia says: "The STUN server is contacted on UDP port 3478,
+# however the server will hint clients to perform tests on alternate IP
+# and port number too (STUN servers have two IP addresses). The RFC
+# states that this port and IP are arbitrary."
+
+stun
+# \x01 is a Binding Request. \x02 is a Shared Secret Request. Binding
+# Requests are, experimentally, exactly 20 Bytes with three NULL Bytes.
+# The first NULL is part of the two byte message type field. The other
+# two give the message length, zero. I'm guessing that Shared Secret
+# Requests are similar, but I have not checked. Please read the RFC and
+# do experiments to find out. All other message types are responses,
+# and so don't matter.
+#
+# The .? allows one of the Message Transaction ID Bytes to be \x00. If
+# two are \x00, it will fail. This will happen 0.37% of the time, since
+# the Message Transaction ID is supposed to be random. If this is
+# unacceptable to you, add another ? to reduce this to 0.020%, but be
+# aware of the increased possibility of false positives.
+^[\x01\x02]................?$
+
+# From my post to the mailing list:
+# http://sourceforge.net/mailarchive/message.php?msg_id=36787107
+#
+# This is a rather permissive pattern, but you can make it a little better
+# by combining it with another iptables rule that checks that the packet
+# data is exactly 20 Bytes. Of course, the second packet is longer, so
+# maybe that introduces more complications than benefits.
+#
+# If you're willing to wait until the second packet to make the
+# identification, you could use this:
+#
+# ^\x01................?\x01\x01
+#
+# or if the Message Length is always \x24 (I'm not sure it is from your
+# single example):
+#
+# ^\x01................?\x01\x01\x24
diff --git a/src/usr/local/share/protocols/subspace.pat b/src/usr/local/share/protocols/subspace.pat
new file mode 100644
index 0000000..0a1b174
--- /dev/null
+++ b/src/usr/local/share/protocols/subspace.pat
@@ -0,0 +1,21 @@
+# Subspace - 2D asteroids-style space game - http://sscentral.com
+# Pattern attributes: marginal veryfast fast
+# Protocol groups: game
+# Wiki: http://www.protocolinfo.org/wiki/Subspace
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# By Myles Uyema <mylesuyema AT gmail.com>
+#
+# This pattern matches the initial 2 packets of the client-server
+# 'handshake' when joining a Zone.
+#
+# The first packet is an 8 byte UDP payload sent from client
+# 0x00 0x01 0x?? 0x?? 0x?? 0x?? 0x11
+# The next packet is a 12 byte UDP response from server
+# 0x00 0x10 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x?? 0x01 0x00
+#
+# l7-filter strips out the null bytes, leaving me with this pattern
+
+subspace
+^\x01....\x11\x10........\x01$
+
diff --git a/src/usr/local/share/protocols/subversion.pat b/src/usr/local/share/protocols/subversion.pat
new file mode 100644
index 0000000..8769a19
--- /dev/null
+++ b/src/usr/local/share/protocols/subversion.pat
@@ -0,0 +1,13 @@
+# Subversion - a version control system
+# Pattern attributes: ok veryfast fast
+# Protocol groups: version_control open_source
+# Wiki: http://www.protocolinfo.org/wiki/Subversion
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is UNTESTED. (But it seems straightforward enough...)
+#
+# Subversion uses TCP port 3690 by default.
+
+subversion
+# This is not a valid basic GNU regular expression.
+^\( success \( 1 2 \(
diff --git a/src/usr/local/share/protocols/swf.pat b/src/usr/local/share/protocols/swf.pat
new file mode 100644
index 0000000..af03086
--- /dev/null
+++ b/src/usr/local/share/protocols/swf.pat
@@ -0,0 +1,2 @@
+swf
+swf\x21\x1a\x07
diff --git a/src/usr/local/share/protocols/tar.pat b/src/usr/local/share/protocols/tar.pat
new file mode 100644
index 0000000..d3ea987
--- /dev/null
+++ b/src/usr/local/share/protocols/tar.pat
@@ -0,0 +1,12 @@
+# Tar - tape archive. Standard UNIX file archiver, not just for tapes.
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+tar
+# /usr/share/magic
+## POSIX tar archives
+#257 string ustar\0 POSIX tar archive
+#257 string ustar\040\040\0 GNU tar archive
+# this is pretty general. It's not a dictionary word, but still...
+ustar
diff --git a/src/usr/local/share/protocols/teamfortress2.pat b/src/usr/local/share/protocols/teamfortress2.pat
new file mode 100644
index 0000000..337af39
--- /dev/null
+++ b/src/usr/local/share/protocols/teamfortress2.pat
@@ -0,0 +1,11 @@
+# Team Fortress 2 - network game - http://www.valvesoftware.com
+# Pattern attributes: good veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Team_Fortress
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Credits: Clayton Macleod <cherry twist at gmail dot com>
+# Jan Engelhardt <jengelh at computergmbh dot de>
+
+teamfortress2
+^\xff\xff\xff\xff.....*tfTeam Fortress
diff --git a/src/usr/local/share/protocols/teamspeak.pat b/src/usr/local/share/protocols/teamspeak.pat
new file mode 100644
index 0000000..8b2155e
--- /dev/null
+++ b/src/usr/local/share/protocols/teamspeak.pat
@@ -0,0 +1,15 @@
+# TeamSpeak - VoIP application - http://goteamspeak.com
+# Pattern attributes: good veryfast fast
+# Protocol groups: voip proprietary
+# Wiki: http://www.protocolinfo.org/wiki/TeamSpeak
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested by Matthew Strait and verified by packet
+# traces by at least two other people. The meaning of f4b303 is not
+# known, but it seems to appear in all first packets. This pattern only
+# matches the actual UDP voice traffic, not the TeamSpeak web interface
+# or "TCP query".
+
+teamspeak
+^\xf4\xbe\x03.*teamspeak
+
diff --git a/src/usr/local/share/protocols/telnet.pat b/src/usr/local/share/protocols/telnet.pat
new file mode 100644
index 0000000..cf10d0e
--- /dev/null
+++ b/src/usr/local/share/protocols/telnet.pat
@@ -0,0 +1,16 @@
+# Telnet - Insecure remote login - RFC 854
+# Pattern attributes: good veryfast fast
+# Protocol groups: remote_access obsolete ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/Telnet
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 23
+#
+# This pattern is lightly tested.
+
+telnet
+# Matches at least three IAC (Do|Will|Don't|Won't) commands in a row.
+# My telnet client sends 9 when I connect, so this should be fine.
+# This pattern could fail on a unchatty connection or it could be
+# matched by something non-telnet spewing a lot of stuff in the fb-ff range.
+^\xff[\xfb-\xfe].\xff[\xfb-\xfe].\xff[\xfb-\xfe]
diff --git a/src/usr/local/share/protocols/tesla.pat b/src/usr/local/share/protocols/tesla.pat
new file mode 100644
index 0000000..1f4ee86
--- /dev/null
+++ b/src/usr/local/share/protocols/tesla.pat
@@ -0,0 +1,15 @@
+# Tesla Advanced Communication - P2P filesharing (?)
+# Pattern attributes: marginal slow notsofast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Tesla
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern is untested!
+
+# This is lifted from http://oofle.com/filesharing.php?app=tesla
+# There is no explaination of what these numbers mean.
+# The above page says that the first string is found only in TCP packets
+# and the second only in UDP.
+
+tesla
+\x03\x9a\x89\x22\x31\x31\x31\.\x30\x30\x20\x42\x65\x74\x61\x20|\xe2\x3c\x69\x1e\x1c\xe9
diff --git a/src/usr/local/share/protocols/tftp.pat b/src/usr/local/share/protocols/tftp.pat
new file mode 100644
index 0000000..1782ff5
--- /dev/null
+++ b/src/usr/local/share/protocols/tftp.pat
@@ -0,0 +1,21 @@
+# TFTP - Trivial File Transfer Protocol - used for bootstrapping - RFC 1350
+# Pattern attributes: marginal fast fast
+# Protocol groups: document_retrieval ietf_internet_standard
+# Wiki: http://www.protocolinfo.org/wiki/TFTP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# usually runs on port 69
+#
+# This pattern is unconfirmed.
+
+tftp
+# The first packet from the initiating host should either be a Read Request
+# or a Write Request. In the other direction, it should be data packet with
+# block number one or an ACK with block number zero. We only attempt to match
+# the initiating host's packets, because the only identifying features of
+# the responses to them are two byte sequences (which isn't specific enough).
+# (\x01|\x02) = Read Request or Write Request
+# [ -~]* = the file name
+# the rest = netascii|octet|mail (case insensitivity done by the kernel)
+
+^(\x01|\x02)[ -~]*(netascii|octet|mail)
diff --git a/src/usr/local/share/protocols/thecircle.pat b/src/usr/local/share/protocols/thecircle.pat
new file mode 100644
index 0000000..d5e2b80
--- /dev/null
+++ b/src/usr/local/share/protocols/thecircle.pat
@@ -0,0 +1,12 @@
+# The Circle - P2P application - http://thecircle.org.au
+# Pattern attributes: ok veryfast fast
+# Protocol groups: p2p open_source
+# Wiki: http://www.protocolinfo.org/wiki/The_Circle
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This is tested with The Circle 0.41c on Linux.
+# It likely misses some stuff. Notably, I wasn't able to test it on any
+# large downloads, because no one is sharing anything!
+
+thecircle
+^t\x03ni.?[\x01-\x06]?t[\x01-\x05]s[\x0a\x0b](glob|who are you$|query data)
diff --git a/src/usr/local/share/protocols/tonghuashun.pat b/src/usr/local/share/protocols/tonghuashun.pat
new file mode 100644
index 0000000..45f838b
--- /dev/null
+++ b/src/usr/local/share/protocols/tonghuashun.pat
@@ -0,0 +1,11 @@
+# Tonghuashun - stock analysis and trading; Chinese - http://www.10jqka.com.cn
+# Pattern attributes: ok fast fast
+# Protocol groups:
+# Wiki: http://www.protocolinfo.org/wiki/Tonghuashun
+# Copyright (C) 2009 Matthew Strait; See ../LICENSE
+
+# Pattern contributed by liangjun without comment.
+
+tonghuashun
+^(GET /docookie\.php\?uname=|\xfd\xfd\xfd\xfd\x30\x30\x30\x30\x30)
+
diff --git a/src/usr/local/share/protocols/tor.pat b/src/usr/local/share/protocols/tor.pat
new file mode 100644
index 0000000..7e4f707
--- /dev/null
+++ b/src/usr/local/share/protocols/tor.pat
@@ -0,0 +1,17 @@
+# Tor - The Onion Router - used for anonymization - http://tor.eff.org
+# Pattern attributes: good notsofast notsofast
+# Protocol groups: networking
+# Wiki: http://protocolinfo.org/wiki/Tor
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This pattern has been tested and is believed to work well.
+#
+# It matches on the second packet. I have no idea how the protocol
+# works, but this matches every stream I have made using Tor 0.1.0.16 as
+# a client on Linux.
+#
+# It does NOT attempt to match the HTTP request that fetches the list of
+# Tor servers.
+
+tor
+TOR1.*<identity>
diff --git a/src/usr/local/share/protocols/tsp.pat b/src/usr/local/share/protocols/tsp.pat
new file mode 100644
index 0000000..7751df9
--- /dev/null
+++ b/src/usr/local/share/protocols/tsp.pat
@@ -0,0 +1,14 @@
+# TSP - Berkely UNIX Time Synchronization Protocol
+# Pattern attributes: good veryfast fast overmatch
+# Protocol groups: time_synchronization open_source
+# Wiki: http://www.protocolinfo.org/wiki/TSP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# http://ftp.svbug.com/ftp/pub/manuals/pdf/smm.22.timed.pdf
+# http://docs.freebsd.org/44doc/smm/12.timed/paper.pdf
+#
+# This pattern is barely tested.
+
+tsp
+# type, version (1), sequence number, 8 type specific bytes, machine name
+^[\x01-\x13\x16-$]\x01.?.?.?.?.?.?.?.?.?.?[ -~]+
diff --git a/src/usr/local/share/protocols/unset.pat b/src/usr/local/share/protocols/unset.pat
new file mode 100644
index 0000000..b9c1244
--- /dev/null
+++ b/src/usr/local/share/protocols/unset.pat
@@ -0,0 +1,8 @@
+# Unset - Dummy pattern for unmatched connections that are still being tested
+
+unset
+# This pattern is ignored by the kernel. It sees that the "protocol" is
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+# "testing" and always returns matched for connections that are still
+# being tested.
+.
diff --git a/src/usr/local/share/protocols/uucp.pat b/src/usr/local/share/protocols/uucp.pat
new file mode 100644
index 0000000..f7ef22c
--- /dev/null
+++ b/src/usr/local/share/protocols/uucp.pat
@@ -0,0 +1,12 @@
+# UUCP - Unix to Unix Copy
+# Pattern attributes: ok veryfast fast
+# Protocol groups: document_retrieval obsolete
+# Wiki: http://www.protocolinfo.org/wiki/UUCP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This is completely untested! (I don't know how to use UUCP...)
+
+# See http://docs.freebsd.org/info/uucp/uucp.info.The_Initial_Handshake.html
+
+uucp
+^\x10here=
diff --git a/src/usr/local/share/protocols/validcertssl.pat b/src/usr/local/share/protocols/validcertssl.pat
new file mode 100644
index 0000000..7aa1812
--- /dev/null
+++ b/src/usr/local/share/protocols/validcertssl.pat
@@ -0,0 +1,25 @@
+# Valid certificate SSL
+# Pattern attributes: good slow notsofast subset
+# Protocol groups: secure ietf_proposed_standard
+# Wiki: http://www.protocolinfo.org/wiki/SSL
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+# This matches anything claiming to use a valid certificate from a well
+# known certificate authority.
+#
+# This is a subset of ssl, so it needs to come first to match.
+#
+# Note that opening a website that has a valid certificate will
+# open one connection that matches this and many ssl connections that
+# only match the ssl pattern. Thus, this pattern may not be very useful.
+#
+# This pattern is believed match only the above, but may not match all
+# of it.
+#
+# the certificate authority info is sent in quasi plain text, if it matches
+# a well known certificate authority then we will assume it is a
+# web/imaps/etc server. Other ssl may be good too, but it should fall under
+# a different rule
+
+validcertssl
+^(.?.?\x16\x03.*\x16\x03|.?.?\x01\x03\x01?.*\x0b).*(thawte|equifax secure|rsa data security, inc|verisign, inc|gte cybertrust root|entrust\.net limited)
diff --git a/src/usr/local/share/protocols/ventrilo.pat b/src/usr/local/share/protocols/ventrilo.pat
new file mode 100644
index 0000000..74e588c
--- /dev/null
+++ b/src/usr/local/share/protocols/ventrilo.pat
@@ -0,0 +1,18 @@
+# Ventrilo - VoIP - http://ventrilo.com
+# Pattern attributes: good fast fast
+# Protocol groups: voip proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Ventrilo
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# I have tested this with Ventrilo client 2.3.0 on Windows talking to
+# Ventrilo server 2.3.1 (the public version) on Linux. I've done this
+# both within a LAN and over the Internet. In one test, I tried
+# monkeying around with the server settings to see if I could break the
+# pattern, and I couldn't. However, you can't change the port number in
+# the public server.
+#
+# It has also been tested by one other person in an unknown configuration.
+
+ventrilo
+^..?v\$\xcf
+
diff --git a/src/usr/local/share/protocols/vnc.pat b/src/usr/local/share/protocols/vnc.pat
new file mode 100644
index 0000000..79d0ae8
--- /dev/null
+++ b/src/usr/local/share/protocols/vnc.pat
@@ -0,0 +1,23 @@
+# VNC - Virtual Network Computing. Also known as RFB - Remote Frame Buffer
+# Pattern attributes: great veryfast fast
+# Protocol groups: remote_access
+# Wiki: http://www.protocolinfo.org/wiki/VNC
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# http://www.realvnc.com/documentation.html
+#
+# This pattern has been verified with vnc v3.3.7 on WinXP and Linux
+#
+# Thanks to Trevor Paskett <tpaskett AT cymphonix.com> for this pattern.
+
+vnc
+# Assumes single digit major and minor version numbers
+# This message should be all alone in the first packet, so ^$ is appropriate
+^rfb 00[1-9]\.00[0-9]\x0a$
+
+# This is a more restrictive version which assumes the version numbers
+# are ones actually in existance at the time of this writing, i.e. 3.3,
+# 3.7 and 3.8 (with some clients wrongly reporting 3.5). It should be
+# slightly faster, but probably not worth the extra maintenance.
+# ^rfb 003\.00[3578]\x0a$
+
diff --git a/src/usr/local/share/protocols/whois.pat b/src/usr/local/share/protocols/whois.pat
new file mode 100644
index 0000000..6abf0e8
--- /dev/null
+++ b/src/usr/local/share/protocols/whois.pat
@@ -0,0 +1,14 @@
+# Whois - query/response system, usually used for domain name info - RFC 3912
+# Pattern attributes: good notsofast notsofast overmatch
+# Protocol groups: networking ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/Whois
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on TCP port 43
+#
+# This pattern has been tested and is believed to work well.
+
+whois
+# Matches the query. Assumes only that it is printable ASCII without wierd
+# whitespace.
+^[ !-~]+\x0d\x0a$
diff --git a/src/usr/local/share/protocols/worldofwarcraft.pat b/src/usr/local/share/protocols/worldofwarcraft.pat
new file mode 100644
index 0000000..4136d79
--- /dev/null
+++ b/src/usr/local/share/protocols/worldofwarcraft.pat
@@ -0,0 +1,66 @@
+# World of Warcraft - popular network game - http://blizzard.com/
+# Pattern attributes: ok veryfast fast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/World_of_Warcraft
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+
+worldofwarcraft
+^\x06\xec\x01
+
+# Quoth the author of this pattern, Weisskopf Beat <weisb AT bfh.ch>:
+
+# I have written a pattern for wow (tested with versions 1.8.3 and
+# 1.8.4, german edition). It does not match the login as i think this is
+# uncritical, but i have added the necessary info later on. So only the
+# actual in-game traffic is matched.
+#
+# I hope the pattern is specific enough, otherwise one may add some
+# bytes from the response.
+#
+# some captured info:
+#
+# login:
+#
+# 0000: 00 02 28 00 57 6F 57 00 01 08 03 C7 12 36 38 78 ..(.WoW......68x
+# 0010: 00 6E 69 57 00 45 44 65 64 3C 00 00 00 C0 A8 01 .niW.EDed<......
+# 0020: 22 0A 42 57 45 49 53 53 4B 4F 50 46 ".BWEISSKOPF
+#
+# 0000: 00 02 28 00 57 6F 57 00 01 08 03 C7 12 36 38 78 ..(.WoW......68x
+# 0010: 00 6E 69 57 00 45 44 65 64 3C 00 00 00 C0 A8 01 .niW.EDed<......
+# 0020: 22 0A 42 57 45 49 53 53 4B 4F 50 46 ".BWEISSKOPF
+#
+# server asking:
+#
+# #1
+# 0000: 00 06 EC 01 04 49 C5 33 .....I.3
+#
+# #2
+# 0000: 00 06 EC 01 C3 A8 6E 63 ......nc
+#
+# client response
+# #1
+# 0000: 00 A4 ED 01 00 00 C7 12 00 00 00 00 00 00 42 57 ..............BW
+# 0010: 45 49 53 53 4B 4F 50 46 00 EB 35 DC 89 5A CA 6D EISSKOPF..5..Z.m
+# 0020: 17 95 DE 5B 74 6E 1E 5D 23 73 C6 8F 27 9F 11 12 ...[tn.]#s..'...
+# 0030: BB 21 01 00 00 78 9C 75 CC 41 0A 83 50 0C 84 E1 .!...x.u.A..P...
+# 0040: E7 3D 7A 19 75 25 D4 4D AB EB 12 5E A2 0C 8D 51 .=z.u%.M...^...Q
+# 0050: D2 57 04 4F DF 2E 2D A4 B3 FD 86 3F A5 EF 1A C5 .W.O..-....?....
+# 0060: 71 90 F3 A3 7E E7 82 D5 C6 2E 55 CB 7E B9 FE 58 q...~.....U.~..X
+# 0070: 43 A5 A8 4C 10 E5 1E 86 85 B6 E8 04 63 D8 1C 06 C..L........c...
+# 0080: 5A A7 A9 84 D2 D9 6B 93 1C 5B 4F D9 D7 50 6E 04 Z.....k..[O..Pn.
+# 0090: 0E 61 20 15 8B 6B 83 13 CB FD 09 D5 7F 0C 13 3F .a ..k.........?
+# 00A0: DB 07 B4 EA 54 F8 ....T.
+#
+# #2
+# 0000: 00 A4 ED 01 00 00 C7 12 00 00 00 00 00 00 42 57 ..............BW
+# 0010: 45 49 53 53 4B 4F 50 46 00 38 4C B5 95 C3 AD 25 EISSKOPF.8L....%
+# 0020: CB 73 48 BD 82 FC 99 63 59 AC BF F3 D0 C6 8D AB .sH....cY.......
+# 0030: 3D 21 01 00 00 78 9C 75 CC 41 0A 83 50 0C 84 E1 =!...x.u.A..P...
+# 0040: E7 3D 7A 19 75 25 D4 4D AB EB 12 5E A2 0C 8D 51 .=z.u%.M...^...Q
+# 0050: D2 57 04 4F DF 2E 2D A4 B3 FD 86 3F A5 EF 1A C5 .W.O..-....?....
+# 0060: 71 90 F3 A3 7E E7 82 D5 C6 2E 55 CB 7E B9 FE 58 q...~.....U.~..X
+# 0070: 43 A5 A8 4C 10 E5 1E 86 85 B6 E8 04 63 D8 1C 06 C..L........c...
+# 0080: 5A A7 A9 84 D2 D9 6B 93 1C 5B 4F D9 D7 50 6E 04 Z.....k..[O..Pn.
+# 0090: 0E 61 20 15 8B 6B 83 13 CB FD 09 D5 7F 0C 13 3F .a ..k.........?
+# 00A0: DB 07 B4 EA 54 F8 ....T.
+
diff --git a/src/usr/local/share/protocols/x11.pat b/src/usr/local/share/protocols/x11.pat
new file mode 100644
index 0000000..2028ee7
--- /dev/null
+++ b/src/usr/local/share/protocols/x11.pat
@@ -0,0 +1,23 @@
+# X Windows Version 11 - Networked GUI system used in most Unices
+# Pattern attributes: good notsofast veryfast
+# Protocol groups: remote_access x_consortium_standard
+# Wiki: http://www.protocolinfo.org/wiki/X11
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# It is common for X to be tunneled through SSH. Then obviously this pattern
+# will not catch it.
+#
+# Specification: http://www.msu.edu/~huntharo/xwin/docs/xwindows/PROTO.pdf
+# Usually runs on port 6000 (6001 for the second server on a host, etc)
+#
+# This pattern has been tested.
+
+x11
+# 'l' = little-endian. 'B' = big endian
+# ".?" is for the unused byte that comes next. If it's a null, it won't appear.
+# \x0b = protocol-major-version 11.
+# For some reason, protocol-minor-version is 0, not 6, so can't match it.
+# This pattern is too general.
+^[lb].?\x0b
+userspace pattern=^[lB].?\x0b
+userspace flags=REG_NOSUB
diff --git a/src/usr/local/share/protocols/xboxlive.pat b/src/usr/local/share/protocols/xboxlive.pat
new file mode 100644
index 0000000..d04d9a7
--- /dev/null
+++ b/src/usr/local/share/protocols/xboxlive.pat
@@ -0,0 +1,41 @@
+# XBox Live - Console gaming
+# Pattern attributes: marginal slow notsofast
+# Protocol groups: game proprietary
+# Wiki: http://www.protocolinfo.org/wiki/XBox_Live
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This may match all XBox traffic, or may only match Halo 2 traffic.
+# We don't know yet.
+#
+# Thanks to Myles Uyema <mylesuyema AT gmail DOT com>, who says:
+#
+# Analyzing packet traces using Ethereal, the Xbox typically connects
+# to remote users using UDP port 3074. The first frame is typically
+# a 156 byte UDP payload. I've only scrutinized the first 20 or so bytes.
+#
+# Each line below represents the first frame between my Xbox and a remote
+# player's IP address playing Halo2 on Xbox Live.
+#
+# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 05 0f c5 62 00 f3 96 08
+# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 0f 0f c5 62 00 f3 97 09
+# 00 00 00 00 00 58 80 00 00 00 00 00 82 31 9e a8 05 0f c5 62 00 f3 95 07
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bc 07
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 be 09
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bf 0a
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bd 08
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 ba 05
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 87 ea 59 aa 11 ff 89 00 f3 bb 06
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 ca 06
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 cc 08
+# 00 00 00 00 00 58 80 00 00 00 00 00 81 7f dd 14 f2 8e a3 a1 00 f3 c9 05
+# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 d4 0a
+# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f3 c3 00 f3 d1 07
+# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 d2 08
+# 00 00 00 00 00 58 80 00 00 00 00 00 8b ca 5b c0 d8 9c f8 c3 00 f3 cf 05
+# 00 00 00 00 06 58 4e 00 00 00 e6 d9 6e ab 65 0d 63 9f 02 00 00 02 80 dd
+# 00 00 00 00 06 58 4e 00 00 00 46 e2 95 74 cd f9 bc 3d 00 00 00 00 8b ca
+# 00 00 00 00 06 58 4e 00 00 00 cf ce 3b 5c f5 f2 49 9a 00 00 00 00 8b ca
+# 00 00 00 00 06 58 4e 00 00 00 a9 c0 ac c5 16 e5 c9 92 00 00 00 00 8b ca
+
+xboxlive
+^\x58\x80........\xf3|^\x06\x58\x4e
diff --git a/src/usr/local/share/protocols/xunlei.pat b/src/usr/local/share/protocols/xunlei.pat
new file mode 100644
index 0000000..f7814c7
--- /dev/null
+++ b/src/usr/local/share/protocols/xunlei.pat
@@ -0,0 +1,83 @@
+# Xunlei - Chinese P2P filesharing - http://xunlei.com
+# Pattern attributes: good slow notsofast
+# Protocol groups: p2p
+# Wiki: http://www.protocolinfo.org/wiki/Xunlei
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# This has been tested by a number of people.
+#
+# Written by wsgtrsys of www.routerclub.com. Improved by VeNoMouS.
+# Improved more by wsgtrsys and platinum of bbs.chinaunix.net.
+#
+# Further additions of HTTP-like content by liangjunATdcuxD.Tcom, who
+# says: "i find old pattern is not working . so i write a new pattern of
+# xunlei,it's working with all of xunlei 5 version!" Matthew Strait notes
+# in response:
+#
+# I've looked around and I'm fairly sure that Internet Explorer 5.0
+# never identifies itself as "Mozilla/4.0 (compatible; MSIE 5.00;
+# Windows 98)" and that Internet Explorer 6.0 never identifies itself as
+# either "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )" or
+# "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)".
+
+# The keep-alive part needs some examination too. These might validly
+# occur in an HTTP/1.0 connection, although I think in practical cases
+# they don't since there's general only one \x0d\x0a after it and/or the
+# next line starts with a letter (especially because it's the client
+# sending it). It wouldn't be crazy, though, if another protocol
+# (besides Xunlei) used keep-alive in a way that did match this. But
+# since I can't think of any examples, I'll assume it's ok for now.
+
+xunlei
+^([()]|get)(...?.?.?(reg|get|query)|.+User-Agent: (Mozilla/4\.0 \(compatible; (MSIE 6\.0; Windows NT 5\.1;? ?\)|MSIE 5\.00; Windows 98\))))|Keep-Alive\x0d\x0a\x0d\x0a[26]
+
+
+# This was the pattern until 2008 11 08. It is safer than the above against
+# overmatching ordinary HTTP connections
+#^[()]...?.?.?(reg|get|query)
+
+# More detail:
+# From http://sourceforge.net/tracker/index.php?func=detail&aid=1885209&group_id=80085&atid=558668
+#
+##############################################################################
+# Date: 2008-02-03
+# Sender: hydr0g3n
+#
+# Xunlei (Chinese P2P) traffic is not matched anymore by layer7 xunlei
+# pattern. It used to work in the past but not anymore. Maybe Xunlei was
+# updated and pattern should be adapted?
+#
+# Apparently ipp2p was edited by Chinese people to detect pplive and xunlei.
+# It is interesting and very recent:
+# http://www.chinaunix.net/jh/4/914377.html
+##############################################################################
+# Date: 2008-02-03
+# Sender: quadong
+#
+# Ok. Only some of the ipp2p function can be translated into an l7-filter
+# regular expression. The first part of search_xunlei can't be, since it
+# works by checking whether the length of the packet matches a byte in the
+# packet. The second part of search_xunlei becomes:
+#
+# \x20.?\x01?.?[\x01\x77]............?.?.?.?\x38
+#
+# Or possibly:
+#
+# ^\x20.?\x01?.?[\x01\x77]............?.?.?.?\x38
+#
+# I'm not sure whether IPP2P looks at every packet or only the first of each
+# connection.
+#
+# udp_search_xunlei says:
+# \x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff
+#
+# Again, putting a ^ at the beginning might work:
+#
+# ^(\x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff)
+#
+# So this *might* work:
+#
+# ^(\x20.?\x01?.?[\x01\x77]............?.?.?.?\x38|\x01\x01\x01\xfe\xff\xfe\xff|\x01\x11\xa0\xfe\xff\xfe\xff)
+#
+# but the ^ might be wrong and it will not match the HTTP part of Xunlei.
+##############################################################################
diff --git a/src/usr/local/share/protocols/yahoo.pat b/src/usr/local/share/protocols/yahoo.pat
new file mode 100644
index 0000000..17595b8
--- /dev/null
+++ b/src/usr/local/share/protocols/yahoo.pat
@@ -0,0 +1,27 @@
+# Yahoo messenger - an instant messenger protocol - http://yahoo.com
+# Pattern attributes: good fast fast
+# Protocol groups: chat proprietary
+# Wiki: http://www.protocolinfo.org/wiki/Yahoo_Messenger
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# Usually runs on port 5050
+#
+# This pattern has been tested and is believed to work well.
+
+yahoo
+# http://www.venkydude.com/articles/yahoo.htm says:
+# All Yahoo commands start with YMSG.
+# (Well... http://ethereal.com/faq.html#q5.32 suggests that YPNS and YHOO
+# are also possible, so let's allow those)
+# The next 7 bytes contain command (packet?) length and version information
+# which we won't currently try to match.
+# L means "YAHOO_SERVICE_VERIFY" according to Ethereal
+# W means "encryption challenge command" (YAHOO_SERVICE_AUTH)
+# T means "login command" (YAHOO_SERVICE_AUTHRESP)
+# (there are others, i.e. 0x01 "coming online", 0x02 "going offline",
+# 0x04 "changing status to available", 0x06 "user message", but W and T
+# should appear in the first few packets.)
+# 0xC080 is the standard argument separator, it should appear not long
+# after the "type of command" byte.
+
+^(ymsg|ypns|yhoo).?.?.?.?.?.?.?[lwt].*\xc0\x80
diff --git a/src/usr/local/share/protocols/zip.pat b/src/usr/local/share/protocols/zip.pat
new file mode 100644
index 0000000..e001354
--- /dev/null
+++ b/src/usr/local/share/protocols/zip.pat
@@ -0,0 +1,7 @@
+# ZIP - (PK|Win)Zip archive format
+# Pattern attributes: good notsofast notsofast subset
+# Protocol groups: file
+
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+zip
+pk\x03\x04\x14
diff --git a/src/usr/local/share/protocols/zmaap.pat b/src/usr/local/share/protocols/zmaap.pat
new file mode 100644
index 0000000..e741eca
--- /dev/null
+++ b/src/usr/local/share/protocols/zmaap.pat
@@ -0,0 +1,18 @@
+# ZMAAP - Zeroconf Multicast Address Allocation Protocol
+# Pattern attributes: ok veryfast fast
+# Protocol groups: networking ietf_draft_standard
+# Wiki: http://www.protocolinfo.org/wiki/ZMAAP
+# Copyright (C) 2008 Matthew Strait, Ethan Sommer; See ../LICENSE
+#
+# http://files.zeroconf.org/draft-ietf-zeroconf-zmaap-02.txt
+# (Note that this reference is an Internet-Draft, and therefore must
+# be considered a work in progress.)
+#
+# This pattern is untested!
+
+zmaap
+# - 4 byte magic number.
+# - 1 byte version. Allow 1 & 2, even though only version 1 currently exists.
+# - 1 byte message type,which is either 0 or 1
+# - 1 byte address family. L7-filter only works in IPv4, so this is 1.
+^\x1b\xd7\x3b\x48[\x01\x02]\x01?\x01
diff --git a/src/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf b/src/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf
new file mode 100644
index 0000000..691c8d6
--- /dev/null
+++ b/src/usr/local/share/rrdtool/fonts/DejaVuSansMono-Roman.ttf
Binary files differ
diff --git a/src/usr/local/www/apple-touch-icon.png b/src/usr/local/www/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/bandwidth_by_ip.php b/src/usr/local/www/bandwidth_by_ip.php
new file mode 100755
index 0000000..39f9a01
--- /dev/null
+++ b/src/usr/local/www/bandwidth_by_ip.php
@@ -0,0 +1,150 @@
+<?php
+/*
+ bandwidth_by_ip.php
+ */
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/bin/rate
+ pfSense_MODULE: trafficgraph
+*/
+
+require_once('guiconfig.inc');
+require_once('interfaces.inc');
+require_once('pfsense-utils.inc');
+require_once('util.inc');
+
+$listedIPs = "";
+
+//get interface IP and break up into an array
+$interface = $_GET['if'];
+$real_interface = get_real_interface($interface);
+if (!does_interface_exist($real_interface)) {
+ echo gettext("Wrong Interface");
+ return;
+}
+
+$intip = find_interface_ip($real_interface);
+//get interface subnet
+$netmask = find_interface_subnet($real_interface);
+$intsubnet = gen_subnet($intip, $netmask) . "/$netmask";
+
+// see if they want local, remote or all IPs returned
+$filter = $_GET['filter'];
+
+if ($filter == "") {
+ $filter = "local";
+}
+
+if ($filter == "local") {
+ $ratesubnet = "-c " . $intsubnet;
+} else {
+ // Tell the rate utility to consider the whole internet (0.0.0.0/0)
+ // and to consider local "l" traffic - i.e. traffic within the whole internet
+ // then we can filter the resulting output as we wish below.
+ $ratesubnet = "-lc 0.0.0.0/0";
+}
+
+//get the sort method
+$sort = $_GET['sort'];
+if ($sort == "out") {
+ $sort_method = "-T";
+} else {
+ $sort_method = "-R";
+}
+
+// get the desired format for displaying the host name or IP
+$hostipformat = $_GET['hostipformat'];
+$iplookup = array();
+// If hostname, description or FQDN is requested then load the locally-known IP address - host/description mappings into an array keyed by IP address.
+if ($hostipformat != "") {
+ if (is_array($config['dhcpd'])) {
+ // Build an array of static-mapped DHCP entries keyed by IP address.
+ foreach ($config['dhcpd'] as $ifdata) {
+ if (is_array($ifdata['staticmap'])) {
+ foreach ($ifdata['staticmap'] as $hostent) {
+ if (($hostent['ipaddr'] != "") && ($hostent['hostname'] != "")) {
+ if ($hostipformat == "descr" && $hostent['descr'] != "") {
+ $iplookup[$hostent['ipaddr']] = $hostent['descr'];
+ } else {
+ $iplookup[$hostent['ipaddr']] = $hostent['hostname'];
+ if ($hostipformat == "fqdn") {
+ $iplookup[$hostent['ipaddr']] .= "." . $config['system']['domain'];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // Add any DNS host override data keyed by IP address.
+ foreach (array('dnsmasq', 'unbound') as $dns_type) {
+ if (isset($config[$dns_type]['enable'])) {
+ if (is_array($config[$dns_type]['hosts'])) {
+ foreach ($config[$dns_type]['hosts'] as $hostent) {
+ if (($hostent['ip'] != "") && ($hostent['host'] != "")) {
+ if ($hostipformat == "descr" && $hostent['descr'] != "") {
+ $iplookup[$hostent['ip']] = $hostent['descr'];
+ } else {
+ $iplookup[$hostent['ip']] = $hostent['host'];
+ if ($hostipformat == "fqdn") {
+ $iplookup[$hostent['ip']] .= "." . $hostent['domain'];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+$_grb = exec("/usr/local/bin/rate -i {$real_interface} -nlq 1 -Aba 20 {$sort_method} {$ratesubnet} | tr \"|\" \" \" | awk '{ printf \"%s:%s:%s:%s:%s\\n\", $1, $2, $4, $6, $8 }'", $listedIPs);
+
+$someinfo = false;
+for ($x=2; $x<12; $x++) {
+
+ $bandwidthinfo = $listedIPs[$x];
+
+ // echo $bandwidthinfo;
+ $emptyinfocounter = 1;
+ if ($bandwidthinfo != "") {
+ $infoarray = explode (":", $bandwidthinfo);
+ if (($filter == "all") ||
+ (($filter == "local") && (ip_in_subnet($infoarray[0], $intsubnet))) ||
+ (($filter == "remote") && (!ip_in_subnet($infoarray[0], $intsubnet)))) {
+ if ($hostipformat == "") {
+ // pass back just the raw IP address
+ $addrdata = $infoarray[0];
+ } else {
+ // $hostipformat is one of "hostname", "descr" or "fqdn" - we want a text representation if we can get it.
+ if ($iplookup[$infoarray[0]] != "") {
+ // We have a local entry, so use it.
+ $addrdata = $iplookup[$infoarray[0]];
+ } else {
+ // Try to reverse lookup the IP address.
+ $addrdata = gethostbyaddr($infoarray[0]);
+ if ($addrdata != $infoarray[0]) {
+ // Reverse lookup returned something other than the IP address (FQDN, we hope!)
+ if ($hostipformat != "fqdn") {
+ // The user does not want the whole FQDN, so only pass back the first part of the name.
+ $name_array = explode(".", $addrdata);
+ $addrdata = $name_array[0];
+ }
+ }
+ }
+ }
+ //print host information;
+ echo $addrdata . ";" . $infoarray[1] . ";" . $infoarray[2] . "|";
+
+ //mark that we collected information
+ $someinfo = true;
+ }
+ }
+}
+unset($bandwidthinfo, $_grb);
+unset($listedIPs);
+
+//no bandwidth usage found
+if ($someinfo == false) {
+ echo gettext("no info");
+}
+?>
diff --git a/src/usr/local/www/carp_status.php b/src/usr/local/www/carp_status.php
new file mode 100644
index 0000000..5f863e2
--- /dev/null
+++ b/src/usr/local/www/carp_status.php
@@ -0,0 +1,252 @@
+<?php
+/*
+ carp_status.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-status-carp
+##|*NAME=Status: CARP page
+##|*DESCR=Allow access to the 'Status: CARP' page.
+##|*MATCH=carp_status.php*
+##|-PRIV
+
+/*
+ pfSense_MODULE: carp
+*/
+
+require_once("guiconfig.inc");
+require_once("globals.inc");
+
+function gentitle_pkg($pgname) {
+ global $config;
+ return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
+}
+
+unset($interface_arr_cache);
+unset($carp_interface_count_cache);
+unset($interface_ip_arr_cache);
+
+$status = get_carp_status();
+$status = intval($status);
+if ($_POST['carp_maintenancemode'] <> "") {
+ interfaces_carp_set_maintenancemode(!isset($config["virtualip_carp_maintenancemode"]));
+}
+if ($_POST['disablecarp'] <> "") {
+ if ($status > 0) {
+ set_single_sysctl('net.inet.carp.allow', '0');
+ if (is_array($config['virtualip']['vip'])) {
+ $viparr = &$config['virtualip']['vip'];
+ $found_dhcpdv6 = false;
+ foreach ($viparr as $vip) {
+ $carp_iface = "{$vip['interface']}_vip{$vip['vhid']}";
+ switch ($vip['mode']) {
+ case "carp":
+ interface_vip_bring_down($vip);
+ interface_ipalias_cleanup($carp_iface);
+
+ /*
+ * Reconfigure radvd when necessary
+ * XXX: Is it the best way to do it?
+ */
+ if (isset($config['dhcpdv6']) && is_array($config['dhcpdv6'])) {
+ foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) {
+ if ($dhcpv6ifconf['rainterface'] != $carp_iface) {
+ continue;
+ }
+
+ services_radvd_configure();
+ break;
+ }
+ }
+
+ sleep(1);
+ break;
+ }
+ }
+ }
+ $savemsg = sprintf(gettext("%s IPs have been disabled. Please note that disabling does not survive a reboot and some configuration changes will re-enable."), $carp_counter);
+ $status = 0;
+ } else {
+ $savemsg = gettext("CARP has been enabled.");
+ if (is_array($config['virtualip']['vip'])) {
+ $viparr = &$config['virtualip']['vip'];
+ foreach ($viparr as $vip) {
+ switch ($vip['mode']) {
+ case "carp":
+ interface_carp_configure($vip);
+ sleep(1);
+ break;
+ case 'ipalias':
+ if (strpos($vip['interface'], '_vip')) {
+ interface_ipalias_configure($vip);
+ }
+ break;
+ }
+ }
+ }
+ interfaces_sync_setup();
+ set_single_sysctl('net.inet.carp.allow', '1');
+ $status = 1;
+ }
+}
+
+$carp_detected_problems = get_single_sysctl("net.inet.carp.demotion");
+
+if (!empty($_POST['resetdemotion'])) {
+ set_single_sysctl("net.inet.carp.demotion", "-{$carp_detected_problems}");
+ sleep(1);
+ $carp_detected_problems = get_single_sysctl("net.inet.carp.demotion");
+}
+
+$pgtitle = array(gettext("Status"), gettext("CARP"));
+$shortcut_section = "carp";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="carp_status.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<?PHP if ($carp_detected_problems > 0) {
+ print_info_box(
+ gettext("CARP has detected a problem and this unit has been demoted to BACKUP status.") . "<br/>" .
+ gettext("Check the link status on all interfaces with configured CARP VIPs.") . "<br/>" .
+ gettext("Search the") .
+ " <a href=\"/diag_logs.php?filtertext=carp%3A+demoted+by\">" .
+ gettext("system log") .
+ "</a> " .
+ gettext("for CARP demotion-related events.") . "<br/>" .
+ "<input type=\"submit\" name=\"resetdemotion\" id=\"resetdemotion\" value=\"" .
+ gettext("Reset CARP Demotion Status") .
+ "\" />"
+ );
+
+} ?>
+
+<div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="carp status">
+ <tr>
+ <td>
+<?php
+ $carpcount = 0;
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $carp) {
+ if ($carp['mode'] == "carp") {
+ $carpcount++;
+ break;
+ }
+ }
+ }
+ if ($carpcount > 0) {
+ if ($status > 0) {
+ $carp_enabled = true;
+ echo "<input type=\"submit\" name=\"disablecarp\" id=\"disablecarp\" value=\"" . gettext("Temporarily Disable CARP") . "\" />";
+ } else {
+ $carp_enabled = false;
+ echo "<input type=\"submit\" name=\"disablecarp\" id=\"disablecarp\" value=\"" . gettext("Enable CARP") . "\" />";
+ }
+ if (isset($config["virtualip_carp_maintenancemode"])) {
+ echo "<input type=\"submit\" name=\"carp_maintenancemode\" id=\"carp_maintenancemode\" value=\"" . gettext("Leave Persistent CARP Maintenance Mode") . "\" />";
+ } else {
+ echo "<input type=\"submit\" name=\"carp_maintenancemode\" id=\"carp_maintenancemode\" value=\"" . gettext("Enter Persistent CARP Maintenance Mode") . "\" />";
+ }
+ }
+?>
+
+ <br/><br/>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="results">
+ <tr>
+ <td class="listhdrr" align="center"><?=gettext("CARP Interface"); ?></td>
+ <td class="listhdrr" align="center"><?=gettext("Virtual IP"); ?></td>
+ <td class="listhdrr" align="center"><?=gettext("Status"); ?></td>
+ </tr>
+<?php
+ if ($carpcount == 0) {
+ echo "</table></td></tr></table></div></form><center><br />" . gettext("Could not locate any defined CARP interfaces.");
+ echo "</center>";
+
+ include("fend.inc");
+ echo "</body></html>";
+ return;
+ }
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $carp) {
+ if ($carp['mode'] != "carp") {
+ continue;
+ }
+ $ipaddress = $carp['subnet'];
+ $vhid = $carp['vhid'];
+ $status = get_carp_interface_status("_vip{$carp['uniqid']}");
+ echo "<tr>";
+ $align = "style=\"vertical-align:middle\"";
+ if ($carp_enabled == false) {
+ $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_block.gif\" alt=\"disabled\" />";
+ $status = "DISABLED";
+ } else {
+ if ($status == "MASTER") {
+ $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_pass.gif\" alt=\"master\" />";
+ } else if ($status == "BACKUP") {
+ $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_pass_d.gif\" alt=\"backup\" />";
+ } else if ($status == "INIT") {
+ $icon = "<img {$align} src=\"/themes/".$g['theme']."/images/icons/icon_log.gif\" alt=\"init\" />";
+ } else {
+ $icon = "";
+ }
+ }
+ echo "<td class=\"listlr\" align=\"center\">" . convert_friendly_interface_to_friendly_descr($carp['interface']) . "@{$vhid} &nbsp;</td>";
+ echo "<td class=\"listlr\" align=\"center\">" . $ipaddress . "&nbsp;</td>";
+ echo "<td class=\"listlr\" align=\"center\">{$icon}&nbsp;&nbsp;" . $status . "&nbsp;</td>";
+ echo "</tr>";
+ }
+ }
+?>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
+</form>
+
+<p class="vexpl">
+<span class="red"><strong><?=gettext("Note"); ?>:</strong></span>
+<br />
+<?=gettext("You can configure high availability sync settings"); ?> <a href="system_hasync.php"><?=gettext("here"); ?></a>.
+</p>
+
+<?php
+ echo "<br />" . gettext("pfSync nodes") . ":<br />";
+ echo "<pre>";
+ system("/sbin/pfctl -vvss | /usr/bin/grep creator | /usr/bin/cut -d\" \" -f7 | /usr/bin/sort -u");
+ echo "</pre>";
+?>
+
+<?php include("fend.inc"); ?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/classes/maintable.inc b/src/usr/local/www/classes/maintable.inc
new file mode 100644
index 0000000..1478de8
--- /dev/null
+++ b/src/usr/local/www/classes/maintable.inc
@@ -0,0 +1,206 @@
+<?php
+/* $Id$ */
+/*
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: guiutils
+*/
+
+
+class MainTable {
+ private $headers = array();
+// private $columns = array();
+ private $columns = 0;
+ private $rows = 0;
+ private $content = array();
+ private $edit_uri = '';
+ private $my_uri = '';
+ private $buttons = array('move' => false, 'edit' => false, 'del' => false, 'dup' => false);
+
+ function add_column($header, $cname, $width) {
+// $this->column[] = array('header' => $header, 'cname' => $cname, 'width' => $width)
+ $this->headers[] = $header;
+ $this->cname[] = $cname;
+ $this->width[] = $width;
+ $this->columns++;
+ }
+
+ function add_content_array($rows) {
+ foreach ($rows as $row) {
+ $this->content[] = $row;
+ $this->rows++;
+ }
+ }
+ function add_button($name) {
+ if (isset($this->buttons[$name])) {
+ $this->buttons[$name] = true;
+ }
+ }
+ function edit_uri($uri) {
+ $this->edit_uri = $uri;
+ }
+
+ function my_uri($uri) {
+ $this->my_uri = $uri;
+ }
+
+ function display() {
+ echo "<!-- begin content table -->\n";
+ echo "<table class=\"tabcont\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"display\">\n";
+ echo " <!-- begin content table header -->\n";
+ echo $this->display_header();
+ echo " <!-- end content table header -->\n";
+ echo " <!-- begin content table rows -->\n";
+ echo $this->display_rows();
+ echo " <!-- end content table rows -->\n";
+ echo " <!-- begin content table footer -->\n";
+ echo $this->display_footer();
+ echo " <!-- end content table footer -->\n";
+ echo "</table>\n";
+ echo "<!-- end content table -->\n";
+ }
+
+ private function display_header() {
+ global $g;
+ echo "<tr>\n";
+ for ($col = 0; $col < $this->columns - 1; $col++) {
+ echo " <td width=\"{$this->width[$col]}%\" class=\"listhdrr\">{$this->headers[$col]}</td>\n";
+ }
+ echo " <td width=\"{$this->width[$this->columns - 1]}%\" class=\"listhdr\">{$this->headers[$this->columns - 1]}</td>\n";
+ echo " <td width=\"10%\" class=\"list\">\n";
+ echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display header\">\n";
+ echo " <tr>\n";
+ echo " <td width=\"17\"></td>\n";
+ echo " <td valign=\"middle\"><a href=\"{$this->edit_uri}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"plus\" /></a></td>\n";
+ echo " </tr>\n";
+ echo " </table>\n";
+ echo " </td>\n";
+ echo "</tr>\n";
+
+ }
+ private function display_rows() {
+ global $g;
+ $cur_row = 0;
+ $encode_cols = array("name", "descr");
+ foreach ($this->content as $row) {
+ echo "<tr>\n";
+ for ($col = 0; $col < $this->columns - 1; $col++) {
+ if ($col == 0) {
+ $cl = 'listlr';
+ } else {
+ $cl = 'listr';
+ }
+ echo " <td class=\"{$cl}\" onclick=\"fr_toggle({$cur_row})\" id=\"frd{$cur_row}\" ondblclick=\"document.location='{$this->edit_uri}?id={$cur_row}'\">\n";
+ if (is_array($row[$this->cname[$col]])) {
+ foreach ($row[$this->cname[$col]] as $data) {
+ if (in_array($this->cname[$col], $encode_cols)) {
+ $data = htmlspecialchars($data);
+ }
+ echo " {$data}<br />\n";
+ }
+ } else {
+ if (in_array($this->cname[$col], $encode_cols)) {
+ $row[$this->cname[$col]] = htmlspecialchars($row[$this->cname[$col]]);
+ }
+ echo " " . $row[$this->cname[$col]] . "\n";
+ }
+ echo " </td>\n";
+ }
+ echo " <td class=\"listbg\" onclick=\"fr_toggle({$cur_row})\" id=\"frd{$cur_row}\" ondblclick=\"document.location='{$this->edit_uri}?id={$cur_row}'\">\n";
+ echo " <font color=\"#FFFFFF\">" . htmlspecialchars($row[$this->cname[$this->columns - 1]]) . "</font>\n";
+ echo " </td>\n";
+ echo " <td class=\"list nowrap\">\n";
+ $this->display_buttons($cur_row);
+ echo " </td>\n";
+ echo "</tr>\n";
+
+ $cur_row++;
+ }
+ }
+ private function display_footer() {
+ global $g;
+ echo "<tr>\n";
+ echo " <td class=\"list\" colspan=\"{$this->columns}\"></td>\n";
+ echo " <td class=\"list\">\n";
+ echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display footer\">\n";
+ echo " <tr>\n";
+ echo " <td width=\"17\"></td>\n";
+ echo " <td valign=\"middle\"><a href=\"{$this->edit_uri}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"plus\" /></a></td>\n";
+ echo " </tr>\n";
+ echo " </table>\n";
+ echo " </td>\n";
+ echo "</tr>\n";
+ }
+ private function display_buttons($row) {
+ echo " <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" summary=\"display buttons\">\n";
+ echo " <tr>\n";
+ if ($this->buttons['move']) {
+ echo $this->display_button('move', $row);
+ }
+ if ($this->buttons['edit']) {
+ echo $this->display_button('edit', $row);
+ }
+ echo " </tr>\n";
+ echo " <tr>\n";
+ if ($this->buttons['del']) {
+ echo $this->display_button('del', $row);
+ }
+ if ($this->buttons['dup']) {
+ echo $this->display_button('dup', $row);
+ }
+ echo " </tr>\n";
+ echo " </table>\n";
+ }
+ private function display_button($button, $row) {
+ global $g;
+ echo "<td valign=\"middle\">";
+ switch ($button) {
+ case "move": {
+ echo "<input name=\"move_{$row}\" type=\"image\" src=\"./themes/{$g['theme']}/images/icons/icon_left.gif\" width=\"17\" height=\"17\" title=\"Move selected entries before this entry\" onmouseover=\"fr_insline({$row}, true)\" onmouseout=\"fr_insline({$row}, false)\" />";
+ break;
+ }
+ case "edit": {
+ echo "<a href=\"{$this->edit_uri}?id={$row}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_e.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Edit entry\" alt=\"edit\" /></a>";
+ break;
+ }
+ case "del": {
+ echo "<a href=\"{$this->my_uri}?act=del&amp;id={$row}\" onclick=\"return confirm('Do you really want to delete this entry?')\"><img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Delete entry\" alt=\"delete\" /></a>";
+ break;
+ }
+ case "dup": {
+ echo "<a href=\"{$this->edit_uri}?act=dup&amp;id={$row}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"Duplicate entry\" alt=\"duplicate\" /></a>";
+ break;
+ }
+ }
+ echo "</td>";
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css b/src/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css
new file mode 100644
index 0000000..413a034
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/SyntaxHighlighter.css
@@ -0,0 +1,166 @@
+
+/* Main style for the table */
+
+.dp-highlighter {
+ width: 100%;
+ overflow: auto;
+ line-height: 100% !important;
+ margin: 18px 0px 18px 0px;
+}
+
+.dp-highlighter table {
+ width: 100%;
+ margin: 2px 0px 2px 0px;
+ border-collapse: collapse;
+ border-bottom: 2px solid #eee;
+ background-color: #fff;
+}
+
+.dp-highlighter td
+{
+ font-family: Courier New;
+ font-size: 11px;
+}
+
+/* Styles for the tools */
+
+.dp-highlighter .tools-corner {
+ background-color: #eee;
+ font-size: 9px;
+}
+
+.dp-highlighter .tools {
+ background-color: #eee;
+ padding: 3px 8px 3px 0px;
+ border-bottom: 1px solid gray;
+ font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif;
+ color: silver;
+}
+
+.dp-highlighter .tools a {
+ font-size: 9px;
+ color: gray;
+ text-decoration: none;
+}
+
+.dp-highlighter .tools a:hover {
+ color: red;
+ text-decoration: underline;
+}
+
+/* Gutter with line number */
+
+.dp-highlighter .gutter {
+ padding-right: 5px;
+ padding-left: 10px;
+ width: 5px;
+ background-color: #eee;
+ border-right: 1px solid gray;
+ color: gray;
+ text-align: right;
+ vertical-align: top;
+}
+
+/* Single line style */
+
+.dp-highlighter .line {
+ padding-left: 10px;
+ border-bottom: 1px solid #F7F7F7;
+ white-space:nowrap;
+}
+
+/* About dialog styles */
+
+.dp-about {
+ background-color: #fff;
+ margin: 0px;
+}
+
+.dp-about table {
+ width: 100%;
+ height: 100%;
+ font-size: 11px;
+ font-family: Tahoma, Verdana, Arial, sans-serif !important;
+}
+
+.dp-about td {
+ padding: 10px;
+ vertical-align: top;
+}
+
+.dp-about .copy {
+ border-bottom: 1px solid #ACA899;
+ height: 95%;
+}
+
+.dp-about .title {
+ color: red;
+ font-weight: bold;
+}
+
+.dp-about .para {
+ margin-bottom: 4px;
+}
+
+.dp-about .footer {
+ background-color: #ECEADB;
+ border-top: 1px solid #fff;
+ text-align: right;
+}
+
+.dp-about .close {
+ font-size: 11px;
+ font-family: Tahoma, Verdana, Arial, sans-serif !important;
+ background-color: #ECEADB;
+ width: 60px;
+ height: 22px;
+}
+
+/* Language specific styles */
+
+.dp-c {}
+.dp-c .comment { color: green; }
+.dp-c .string { color: blue; }
+.dp-c .preprocessor { color: gray; }
+.dp-c .keyword { color: blue; }
+.dp-c .vars { color: #d00; }
+
+.dp-vb {}
+.dp-vb .comment { color: green; }
+.dp-vb .string { color: blue; }
+.dp-vb .preprocessor { color: gray; }
+.dp-vb .keyword { color: blue; }
+
+.dp-sql {}
+.dp-sql .comment { color: green; }
+.dp-sql .string { color: red; }
+.dp-sql .keyword { color: blue; }
+.dp-sql .func { color: #ff1493; }
+.dp-sql .op { color: #808080; }
+
+.dp-xml {}
+.dp-xml .cdata { color: #ff1493; }
+.dp-xml .comments { color: green; }
+.dp-xml .tag { color: blue; }
+.dp-xml .tag-name { color: black; font-weight: bold; }
+.dp-xml .attribute { color: red; }
+.dp-xml .attribute-value { color: blue; }
+
+.dp-delphi {}
+.dp-delphi .comment { color: #008200; font-style: italic; }
+.dp-delphi .string { color: blue; }
+.dp-delphi .number { color: blue; }
+.dp-delphi .directive { color: #008284; }
+.dp-delphi .keyword { font-weight: bold; color: navy; }
+.dp-delphi .vars { color: #000; }
+
+.dp-py {}
+.dp-py .comment { color: green; }
+.dp-py .string { color: red; }
+.dp-py .docstring { color: brown; }
+.dp-py .keyword { color: blue; font-weight: bold;}
+.dp-py .builtins { color: #ff1493; }
+.dp-py .magicmethods { color: #808080; }
+.dp-py .exceptions { color: brown; }
+.dp-py .types { color: brown; font-style: italic; }
+.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }
diff --git a/src/usr/local/www/code-syntax-highlighter/gpl.txt b/src/usr/local/www/code-syntax-highlighter/gpl.txt
new file mode 100644
index 0000000..5b6e7c6
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/gpl.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushCSharp.js b/src/usr/local/www/code-syntax-highlighter/shBrushCSharp.js
new file mode 100644
index 0000000..5743b93
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushCSharp.js
@@ -0,0 +1,30 @@
+dp.sh.Brushes.CSharp = function()
+{
+ var keywords = 'abstract as base bool break byte case catch char checked class const ' +
+ 'continue decimal default delegate do double else enum event explicit ' +
+ 'extern false finally fixed float for foreach get goto if implicit in int ' +
+ 'interface internal is lock long namespace new null object operator out ' +
+ 'override params private protected public readonly ref return sbyte sealed set ' +
+ 'short sizeof stackalloc static string struct switch this throw true try ' +
+ 'typeof uint ulong unchecked unsafe ushort using virtual void while';
+
+ this.regexList = [
+ // There's a slight problem with matching single line comments and figuring out
+ // a difference between // and ///. Using lookahead and lookbehind solves the
+ // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a
+ // loss how to translate that regular expression to JavaScript compatible one.
+// { regex: new RegExp('(?<!/)//(?!/).*$|(?<!/)////(?!/).*$|/\\*[^\\*]*(.)*?\\*/', 'gm'), css: 'comment' }, // one line comments starting with anything BUT '///' and multiline comments
+// { regex: new RegExp('(?<!/)///(?!/).*$', 'gm'), css: 'comments' }, // XML comments starting with ///
+
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.CSharp.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.CSharp.Aliases = ['c#', 'c-sharp', 'csharp'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushCpp.js b/src/usr/local/www/code-syntax-highlighter/shBrushCpp.js
new file mode 100644
index 0000000..09570d5
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushCpp.js
@@ -0,0 +1,72 @@
+/**
+ * Code Syntax Highlighter for C++(Windows Platform).
+ * Version 0.0.1
+ * Copyright (C) 2006 Shin, YoungJin.
+ * http://www.jiniya.net/lecture/techbox/test.html
+ *
+ * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library 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 Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+dp.sh.Brushes.Cpp = function()
+{
+ var datatypes =
+ 'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +
+ 'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +
+ 'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +
+ 'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +
+ 'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +
+ 'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +
+ 'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +
+ 'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +
+ 'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +
+ 'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +
+ 'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +
+ 'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +
+ 'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +
+ 'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +
+ 'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +
+ 'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +
+ 'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +
+ 'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +
+ 'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +
+ '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +
+ 'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +
+ 'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +
+ 'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +
+ 'va_list wchar_t wctrans_t wctype_t wint_t signed';
+
+ var keywords =
+ 'break case catch class const __finally __exception __try ' +
+ 'const_cast continue private public protected __declspec ' +
+ 'default delete deprecated dllexport dllimport do dynamic_cast ' +
+ 'else enum explicit extern if for friend goto inline ' +
+ 'mutable naked namespace new noinline noreturn nothrow ' +
+ 'register reinterpret_cast return selectany ' +
+ 'sizeof static static_cast struct switch template this ' +
+ 'thread throw true false try typedef typeid typename union ' +
+ 'using uuid virtual void volatile whcar_t while';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('^ *#.*', 'gm'), css: 'preprocessor' },
+ { regex: new RegExp(this.GetKeywords(datatypes), 'gm'), css: 'datatypes' },
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }
+ ];
+
+ this.CssClass = 'dp-cpp';
+}
+
+dp.sh.Brushes.Cpp.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Cpp.Aliases = ['cpp', 'c', 'c++'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushCss.js b/src/usr/local/www/code-syntax-highlighter/shBrushCss.js
new file mode 100644
index 0000000..6d3f0de
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushCss.js
@@ -0,0 +1,50 @@
+dp.sh.Brushes.CSS = function()
+{
+ var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' +
+ 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +
+ 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +
+ 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +
+ 'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +
+ 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +
+ 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +
+ 'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +
+ 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +
+ 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +
+ 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +
+ 'quotes richness right size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +
+ 'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +
+ 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
+
+ var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+
+ 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+
+ 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+
+ 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+
+ 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+
+ 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+
+ 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+
+ 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+
+ 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+
+ 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+
+ 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+
+ 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+
+ 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+
+ 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
+
+ var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp('\\#[a-zA-Z0-9]{3,6}', 'g'), css: 'colors' }, // html colors
+ { regex: new RegExp('(\\d+)(px|pt|\:)', 'g'), css: 'string' }, // size specifications
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetKeywords(values), 'g'), css: 'string' }, // values
+ { regex: new RegExp(this.GetKeywords(fonts), 'g'), css: 'string' } // fonts
+ ];
+
+ this.CssClass = 'dp-css';
+}
+
+dp.sh.Brushes.CSS.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.CSS.Aliases = ['css'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushDelphi.js b/src/usr/local/www/code-syntax-highlighter/shBrushDelphi.js
new file mode 100644
index 0000000..efb0601
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushDelphi.js
@@ -0,0 +1,31 @@
+/* Delphi brush is contributed by Eddie Shipman */
+dp.sh.Brushes.Delphi = function()
+{
+ var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +
+ 'case char class comp const constructor currency destructor div do double ' +
+ 'downto else end except exports extended false file finalization finally ' +
+ 'for function goto if implementation in inherited int64 initialization ' +
+ 'integer interface is label library longint longword mod nil not object ' +
+ 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +
+ 'pint64 pointer private procedure program property pshortstring pstring ' +
+ 'pvariant pwidechar pwidestring protected public published raise real real48 ' +
+ 'record repeat set shl shortint shortstring shr single smallint string then ' +
+ 'threadvar to true try type unit until uses val var varirnt while widechar ' +
+ 'widestring with word write writeln xor';
+
+ this.regexList = [
+ { regex: new RegExp('\\(\\*[\\s\\S]*?\\*\\)', 'gm'), css: 'comment' }, // multiline comments (* *)
+ { regex: new RegExp('{(?!\\$)[\\s\\S]*?}', 'gm'), css: 'comment' }, // multiline comments { }
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('\\{\\$[a-zA-Z]+ .+\\}', 'g'), css: 'directive' }, // Compiler Directives and Region tags
+ { regex: new RegExp('\\b[\\d\\.]+\\b', 'g'), css: 'number' }, // numbers 12345
+ { regex: new RegExp('\\$[a-zA-Z0-9]+\\b', 'g'), css: 'number' }, // numbers $F5D3
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-delphi';
+}
+
+dp.sh.Brushes.Delphi.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Delphi.Aliases = ['delphi', 'pascal'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushJScript.js b/src/usr/local/www/code-syntax-highlighter/shBrushJScript.js
new file mode 100644
index 0000000..c68a2a5
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushJScript.js
@@ -0,0 +1,22 @@
+dp.sh.Brushes.JScript = function()
+{
+ var keywords = 'abstract boolean break byte case catch char class const continue debugger ' +
+ 'default delete do double else enum export extends false final finally float ' +
+ 'for function goto if implements import in instanceof int interface long native ' +
+ 'new null package private protected public return short static super switch ' +
+ 'synchronized this throw throws transient true try typeof var void volatile while with';
+
+ this.regexList = [
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // double quoted strings
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // single quoted strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keywords
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.JScript.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.JScript.Aliases = ['js', 'jscript', 'javascript'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushJava.js b/src/usr/local/www/code-syntax-highlighter/shBrushJava.js
new file mode 100644
index 0000000..f18aaad
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushJava.js
@@ -0,0 +1,26 @@
+dp.sh.Brushes.Java = function()
+{
+ var keywords = 'abstract assert boolean break byte case catch char class const ' +
+ 'continue default do double else enum extends ' +
+ 'false final finally float for goto if implements import ' +
+ 'instanceof int interface long native new null ' +
+ 'package private protected public return ' +
+ 'short static strictfp super switch synchronized this throw throws true ' +
+ 'transient try void volatile while';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'), css: 'number' }, // numbers
+ { regex: new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b', 'g'), css: 'annotation' }, // annotation @anno
+ { regex: new RegExp('\\@interface\\b', 'g'), css: 'keyword' }, // @interface keyword
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // java keyword
+ ];
+
+ this.CssClass = 'dp-j';
+}
+
+dp.sh.Brushes.Java.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Java.Aliases = ['java'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushPhp.js b/src/usr/local/www/code-syntax-highlighter/shBrushPhp.js
new file mode 100644
index 0000000..bcc3e3f
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushPhp.js
@@ -0,0 +1,23 @@
+dp.sh.Brushes.Php = function()
+{
+ var keywords = 'and or xor __FILE__ __LINE__ array as break case ' +
+ 'cfunction class const continue declare default die do echo else ' +
+ 'elseif empty enddeclare endfor endforeach endif endswitch endwhile eval exit ' +
+ 'extends for foreach function global if include include_once isset list ' +
+ 'new old_function print require require_once return static switch unset use ' +
+ 'var while __FUNCTION__ __CLASS__';
+
+ this.regexList = [
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // double quoted strings
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // single quoted strings
+ { regex: new RegExp('\\$\\w+', 'g'), css: 'vars' }, // variables
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Php.Aliases = ['php'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushPython.js b/src/usr/local/www/code-syntax-highlighter/shBrushPython.js
new file mode 100644
index 0000000..96d2196
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushPython.js
@@ -0,0 +1,71 @@
+/* Python 2.3 syntax contributed by Gheorghe Milas */
+dp.sh.Brushes.Python = function()
+{
+ var keywords = 'and assert break class continue def del elif else except exec ' +
+ 'finally for from global if import in is lambda not or object pass print ' +
+ 'raise return try yield while';
+
+ var builtins = 'self __builtin__ __dict__ __future__ __methods__ __members__ __author__ __email__ __version__' +
+ '__class__ __bases__ __import__ __main__ __name__ __doc__ __self__ __debug__ __slots__ ' +
+ 'abs append apply basestring bool buffer callable chr classmethod clear close cmp coerce compile complex ' +
+ 'conjugate copy count delattr dict dir divmod enumerate Ellipsis eval execfile extend False file fileno filter float flush ' +
+ 'get getattr globals has_key hasarttr hash hex id index input insert int intern isatty isinstance isubclass ' +
+ 'items iter keys len list locals long map max min mode oct open ord pop pow property range ' +
+ 'raw_input read readline readlines reduce reload remove repr reverse round seek setattr slice sum ' +
+ 'staticmethod str super tell True truncate tuple type unichr unicode update values write writelines xrange zip';
+
+ var magicmethods = '__abs__ __add__ __and__ __call__ __cmp__ __coerce__ __complex__ __concat__ __contains__ __del__ __delattr__ __delitem__ ' +
+ '__delslice__ __div__ __divmod__ __float__ __getattr__ __getitem__ __getslice__ __hash__ __hex__ __eq__ __le__ __lt__ __gt__ __ge__ ' +
+ '__iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__ __ilshift__ __irshift__ ' +
+ '__invert__ __init__ __int__ __inv__ __iter__ __len__ __long__ __lshift__ __mod__ __mul__ __new__ __neg__ __nonzero__ __oct__ __or__ ' +
+ '__pos__ __pow__ __radd__ __rand__ __rcmp__ __rdiv__ __rdivmod__ __repeat__ __repr__ __rlshift__ __rmod__ __rmul__ ' +
+ '__ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rxor__ __setattr__ __setitem__ __setslice__ __str__ __sub__ __xor__';
+
+ var exceptions = 'Exception StandardError ArithmeticError LookupError EnvironmentError AssertionError AttributeError EOFError ' +
+ 'FutureWarning IndentationError OverflowWarning PendingDeprecationWarning ReferenceError RuntimeWarning ' +
+ 'SyntaxWarning TabError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UserWarning Warning ' +
+ 'IOError ImportError IndexError KeyError KeyboardInterrupt MemoryError NameError NotImplementedError OSError ' +
+ 'RuntimeError StopIteration SyntaxError SystemError SystemExit TypeError UnboundLocalError UnicodeError ValueError ' +
+ 'FloatingPointError OverflowError WindowsError ZeroDivisionError';
+
+ var types = 'NoneType TypeType IntType LongType FloatType ComplexType StringType UnicodeType BufferType TupleType ListType ' +
+ 'DictType FunctionType LambdaType CodeType ClassType UnboundMethodType InstanceType MethodType BuiltinFunctionType BuiltinMethodType ' +
+ 'ModuleType FileType XRangeType TracebackType FrameType SliceType EllipsisType';
+
+ var commonlibs = 'anydbm array asynchat asyncore AST base64 binascii binhex bisect bsddb buildtools bz2 ' +
+ 'BaseHTTPServer Bastion calendar cgi cmath cmd codecs codeop commands compiler copy copy_reg ' +
+ 'cPickle crypt cStringIO csv curses Carbon CGIHTTPServer ConfigParser Cookie datetime dbhash ' +
+ 'dbm difflib dircache distutils doctest DocXMLRPCServer email encodings errno exceptions fcntl ' +
+ 'filecmp fileinput ftplib gc gdbm getopt getpass glob gopherlib gzip heapq htmlentitydefs ' +
+ 'htmllib httplib HTMLParser imageop imaplib imgfile imghdr imp inspect itertools jpeg keyword ' +
+ 'linecache locale logging mailbox mailcap marshal math md5 mhlib mimetools mimetypes mimify mmap ' +
+ 'mpz multifile mutex MimeWriter netrc new nis nntplib nsremote operator optparse os parser pickle pipes ' +
+ 'popen2 poplib posix posixfile pprint preferences profile pstats pwd pydoc pythonprefs quietconsole ' +
+ 'quopri Queue random re readline resource rexec rfc822 rgbimg sched select sets sgmllib sha shelve shutil ' +
+ 'signal site smtplib socket stat statcache string struct symbol sys syslog SimpleHTTPServer ' +
+ 'SimpleXMLRPCServer SocketServer StringIO tabnanny tarfile telnetlib tempfile termios textwrap ' +
+ 'thread threading time timeit token tokenize traceback tty types Tkinter unicodedata unittest ' +
+ 'urllib urllib2 urlparse user UserDict UserList UserString warnings weakref webbrowser whichdb ' +
+ 'xml xmllib xmlrpclib xreadlines zipfile zlib';
+
+ this.regexList = [
+ { regex: new RegExp('#.*$', 'gm'), css: 'comment' }, // comments
+ { regex: new RegExp('^\\s*"""(.|\n)*?"""\\s*$', 'gm'), css: 'docstring' }, // documentation string "
+ { regex: new RegExp('^\\s*\'\'\'(.|\n)*?\'\'\'\\s*$', 'gm'), css: 'docstring' }, // documentation string '
+ { regex: new RegExp('"""(.|\n)*?"""', 'g'), css: 'string' }, // multi-line strings "
+ { regex: new RegExp('\'\'\'(.|\n)*?\'\'\'', 'g'), css: 'string' }, // multi-line strings '
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings "
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings '
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtins' }, // builtin objects, functions, methods, magic attributes
+ { regex: new RegExp(this.GetKeywords(magicmethods), 'gm'), css: 'magicmethods' }, // special methods
+ { regex: new RegExp(this.GetKeywords(exceptions), 'gm'), css: 'exceptions' }, // standard exception classes
+ { regex: new RegExp(this.GetKeywords(types), 'gm'), css: 'types' }, // types from types.py
+ { regex: new RegExp(this.GetKeywords(commonlibs), 'gm'), css: 'commonlibs' } // common standard library modules
+ ];
+
+ this.CssClass = 'dp-py';
+}
+
+dp.sh.Brushes.Python.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Python.Aliases = ['py', 'python'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushRuby.js b/src/usr/local/www/code-syntax-highlighter/shBrushRuby.js
new file mode 100644
index 0000000..fdc5e34
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushRuby.js
@@ -0,0 +1,26 @@
+/* Ruby 1.8.4 syntax contributed by Erik Peterson */
+dp.sh.Brushes.Ruby = function()
+{
+ var keywords = 'alias and BEGIN begin break case class def define_method defined do each else elsif ' +
+ 'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +
+ 'self super then throw true undef unless until when while yield';
+
+ var builtins = 'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +
+ 'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +
+ 'ThreadGroup Thread Time TrueClass'
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLinePerlComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp(':[a-z][A-Za-z0-9_]*', 'g'), css: 'symbol' }, // symbols
+ { regex: new RegExp('[\\$|@|@@]\\w+', 'g'), css: 'variable' }, // $global, @instance, and @@class variables
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtin' } // builtins
+ ];
+
+ this.CssClass = 'dp-rb';
+}
+
+dp.sh.Brushes.Ruby.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Ruby.Aliases = ['ruby', 'rails'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushSql.js b/src/usr/local/www/code-syntax-highlighter/shBrushSql.js
new file mode 100644
index 0000000..b52543e
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushSql.js
@@ -0,0 +1,40 @@
+dp.sh.Brushes.Sql = function()
+{
+ var funcs = 'abs avg case cast coalesce convert count current_timestamp ' +
+ 'current_user day isnull left lower month nullif replace right ' +
+ 'session_user space substring sum system_user upper user year';
+
+ var keywords = 'absolute action add after alter as asc at authorization begin bigint ' +
+ 'binary bit by cascade char character check checkpoint close collate ' +
+ 'column commit committed connect connection constraint contains continue ' +
+ 'create cube current current_date current_time cursor database date ' +
+ 'deallocate dec decimal declare default delete desc distinct double drop ' +
+ 'dynamic else end end-exec escape except exec execute false fetch first ' +
+ 'float for force foreign forward free from full function global goto grant ' +
+ 'group grouping having hour ignore index inner insensitive insert instead ' +
+ 'int integer intersect into is isolation key last level load local max min ' +
+ 'minute modify move name national nchar next no numeric of off on only ' +
+ 'open option order out output partial password precision prepare primary ' +
+ 'prior privileges procedure public read real references relative repeatable ' +
+ 'restrict return returns revoke rollback rollup rows rule schema scroll ' +
+ 'second section select sequence serializable set size smallint static ' +
+ 'statistics table temp temporary then time timestamp to top transaction ' +
+ 'translation trigger true truncate uncommitted union unique update values ' +
+ 'varchar varying view when where with work';
+
+ var operators = 'all and any between cross in join like not null or outer some';
+
+ this.regexList = [
+ { regex: new RegExp('--(.*)$', 'gm'), css: 'comment' }, // one line and multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
+ { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
+ { regex: new RegExp(this.GetKeywords(operators), 'gmi'), css: 'op' }, // operators and such
+ { regex: new RegExp(this.GetKeywords(keywords), 'gmi'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-sql';
+}
+
+dp.sh.Brushes.Sql.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Sql.Aliases = ['sql'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushVb.js b/src/usr/local/www/code-syntax-highlighter/shBrushVb.js
new file mode 100644
index 0000000..197adcc
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushVb.js
@@ -0,0 +1,29 @@
+dp.sh.Brushes.Vb = function()
+{
+ var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +
+ 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +
+ 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +
+ 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +
+ 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +
+ 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +
+ 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +
+ 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +
+ 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +
+ 'Overloads Overridable Overrides ParamArray Preserve Private Property ' +
+ 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +
+ 'Return Select Set Shadows Shared Short Single Static Step Stop String ' +
+ 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +
+ 'Variant When While With WithEvents WriteOnly Xor';
+
+ this.regexList = [
+ { regex: new RegExp('\'.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-vb';
+}
+
+dp.sh.Brushes.Vb.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Vb.Aliases = ['vb', 'vb.net'];
diff --git a/src/usr/local/www/code-syntax-highlighter/shBrushXml.js b/src/usr/local/www/code-syntax-highlighter/shBrushXml.js
new file mode 100644
index 0000000..0286082
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shBrushXml.js
@@ -0,0 +1,61 @@
+dp.sh.Brushes.Xml = function()
+{
+ this.CssClass = 'dp-xml';
+}
+
+dp.sh.Brushes.Xml.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Xml.Aliases = ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
+
+dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
+{
+ function push(array, value)
+ {
+ array[array.length] = value;
+ }
+
+ /* If only there was a way to get index of a group within a match, the whole XML
+ could be matched with the expression looking something like that:
+
+ (<!\[CDATA\[\s*.*\s*\]\]>)
+ | (<!--\s*.*\s*?-->)
+ | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)*
+ | (</?)(.*?)(/?>)
+ */
+ var index = 0;
+ var match = null;
+ var regex = null;
+
+ // Match CDATA in the following format <![ ... [ ... ]]>
+ // <\!\[[\w\s]*?\[(.|\s)*?\]\]>
+ this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata');
+
+ // Match comments
+ // <!--\s*.*\s*?-->
+ this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->', 'gm'), 'comments');
+
+ // Match attributes and their values
+ // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)*
+ regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm');
+ while((match = regex.exec(this.code)) != null)
+ {
+ push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute'));
+
+ // if xml is invalid and attribute has no property value, ignore it
+ if(match[2] != undefined)
+ {
+ push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value'));
+ }
+ }
+
+ // Match opening and closing tag brackets
+ // </*\?*(?!\!)|/*\?*>
+ this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>', 'gm'), 'tag');
+
+ // Match tag names
+ // </*\?*\s*(\w+)
+ regex = new RegExp('</*\\?*\\s*([\\w-\.]+)', 'gm');
+ while((match = regex.exec(this.code)) != null)
+ {
+ push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
+ }
+}
diff --git a/src/usr/local/www/code-syntax-highlighter/shCore.js b/src/usr/local/www/code-syntax-highlighter/shCore.js
new file mode 100644
index 0000000..e830438
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shCore.js
@@ -0,0 +1,589 @@
+/**
+ * Code Syntax Highlighter. Version 1.1.0
+ * Copyright (C) 2004 Dream Projections Inc.
+ *
+ * This program 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
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ **
+ * Usage example:
+ *
+ * <script src="shCore.js" type="text/javascript"></script>
+ * <script src="shBrushXml.js" type="text/javascript"></script>
+ *
+ * <textarea name="code" language="html">
+ * <img src="myimage.gif" border="0">
+ * </textarea>
+ *
+ * <script>dp.SyntaxHighlighter.HighlightAll('code', 'value');</script>
+ *
+ **
+ * History:
+ * 1.1.0 - March 23rd, 2005
+ * - split brushes into separate files
+ * - now works in Safari
+ * - added missing strings to PHP matches
+ *
+ * 1.0.4 - February 2nd, 2005
+ * - added Delphi & Python
+ * - multi-line comments fixed
+ * - language name can be set through w3c valid 'class' attribute
+ * - HighlightAll(name, [showGutter], [showTools])
+ *
+ * 1.0.3 - December 31th, 2004 (added PHP & SQL)
+ * 1.0.2 - December 28th, 2004 (refactoring with namespaces)
+ * 1.0.1 - December 14th, 2004
+ * 1.0.0 - November 13th, 2004
+ */
+
+// create namespaces
+var dp = {
+ sh : // dp.sh
+ {
+ Utils : {}, // dp.sh.Utils
+ Brushes : {} // dp.sh.Brushes
+ }
+};
+
+dp.sh.Config = {
+ Version : '1.1.0',
+ About : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><div class="para title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</div><div class="para"><a href="http://www.dreamprojections.com/sh/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></div>&copy;2004-2005 Dream Projections Inc. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
+};
+
+dp.SyntaxHighlighter = dp.sh;
+
+
+
+// opens a new windows and puts the original unformatted source code inside.
+dp.sh.Utils.ViewSource = function(sender)
+{
+ var code = sender.parentNode.originalCode;
+ var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');
+
+ code = code.replace(/</g, '&lt;');
+
+ wnd.document.write('<pre>' + code + '</pre>');
+ wnd.document.close();
+}
+
+// copies the original source code in to the clipboard (IE only)
+dp.sh.Utils.ToClipboard = function(sender)
+{
+ var code = sender.parentNode.originalCode;
+
+ // This works only for IE. There's a way to make it work with Mozilla as well,
+ // but it requires security settings changed on the client, which isn't by
+ // default, so 99% of users won't have it working anyways.
+ if(window.clipboardData)
+ {
+ window.clipboardData.setData('text', code);
+
+ alert('The code is in your clipboard now.');
+ }
+}
+
+// creates an invisible iframe, puts the original source code inside and prints it
+dp.sh.Utils.PrintSource = function(sender)
+{
+ var td = sender.parentNode;
+ var code = td.processedCode;
+ var iframe = document.createElement('iframe');
+ var doc = null;
+ var wnd =
+
+ // this hides the iframe
+ iframe.style.cssText = 'position:absolute; width:0px; height:0px; left:-5px; top:-5px;';
+
+ td.appendChild(iframe);
+
+ doc = iframe.contentWindow.document;
+ code = code.replace(/</g, '&lt;');
+
+ doc.open();
+ doc.write('<pre>' + code + '</pre>');
+ doc.close();
+
+ iframe.contentWindow.focus();
+ iframe.contentWindow.print();
+
+ td.removeChild(iframe);
+}
+
+dp.sh.Utils.About = function()
+{
+ var wnd = window.open('', '_blank', 'dialog, width=320, height=150');
+ var doc = wnd.document;
+
+ var styles = document.getElementsByTagName('style');
+ var links = document.getElementsByTagName('link');
+
+ doc.write(dp.sh.Config.About.replace('{V}', dp.sh.Config.Version));
+
+ // copy over ALL the styles from the parent page
+ for(var i = 0; i < styles.length; i++)
+ doc.write('<style>' + styles[i].innerHTML + '</style>');
+
+ for(var i = 0; i < links.length; i++)
+ if(links[i].rel.toLowerCase() == 'stylesheet')
+ doc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
+
+ doc.close();
+ wnd.focus();
+}
+
+
+
+
+
+// creates a new match object
+dp.sh.Match = function(value, index, css)
+{
+ this.value = value;
+ this.index = index;
+ this.length = value.length;
+ this.css = css;
+}
+
+
+
+
+
+dp.sh.Highlighter = function()
+{
+ this.addGutter = true;
+ this.addControls = true;
+ this.tabsToSpaces = true;
+}
+
+// static callback for the match sorting
+dp.sh.Highlighter.SortCallback = function(m1, m2)
+{
+ // sort matches by index first
+ if(m1.index < m2.index)
+ return -1;
+ else if(m1.index > m2.index)
+ return 1;
+ else
+ {
+ // if index is the same, sort by length
+ if(m1.length < m2.length)
+ return -1;
+ else if(m1.length > m2.length)
+ return 1;
+ }
+ return 0;
+}
+
+// gets a list of all matches for a given regular expression
+dp.sh.Highlighter.prototype.GetMatches = function(regex, css)
+{
+ var index = 0;
+ var match = null;
+
+ while((match = regex.exec(this.code)) != null)
+ {
+ this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);
+ }
+}
+
+dp.sh.Highlighter.prototype.AddBit = function(str, css)
+{
+ var span = document.createElement('span');
+
+ str = str.replace(/&/g, '&amp;');
+ str = str.replace(/ /g, '&nbsp;');
+ str = str.replace(/</g, '&lt;');
+ str = str.replace(/\n/gm, '&nbsp;<br />');
+
+ // when adding a piece of code, check to see if it has line breaks in it
+ // and if it does, wrap individual line breaks with span tags
+ if(css != null)
+ {
+ var regex = new RegExp('<br />', 'gi');
+
+ if(regex.test(str))
+ {
+ var lines = str.split('&nbsp;<br />');
+
+ str = '';
+
+ for(var i = 0; i < lines.length; i++)
+ {
+ span = document.createElement('span');
+ span.className = css;
+ span.innerHTML = lines[i];
+
+ this.div.appendChild(span);
+
+ // don't add a <br /> for the last line
+ if(i + 1 < lines.length)
+ {
+ this.div.appendChild(document.createElement('br'));
+ }
+ }
+ }
+ else
+ {
+ span.className = css;
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+ }
+ else
+ {
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+}
+
+// checks if one match is inside another
+dp.sh.Highlighter.prototype.IsInside = function(match)
+{
+ if(match == null || match.length == 0)
+ {
+ return;
+ }
+
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var c = this.matches[i];
+
+ if(c == null)
+ {
+ continue;
+ }
+
+ if((match.index > c.index) && (match.index <= c.index + c.length))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+dp.sh.Highlighter.prototype.ProcessRegexList = function()
+{
+ for(var i = 0; i < this.regexList.length; i++)
+ {
+ this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
+ }
+}
+
+dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code)
+{
+ var lines = code.split('\n');
+ var result = '';
+ var tabSize = 4;
+ var tab = '\t';
+
+ // This function inserts specified amount of spaces in the string
+ // where a tab is while removing that given tab.
+ function InsertSpaces(line, pos, count)
+ {
+ var left = line.substr(0, pos);
+ var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab
+ var spaces = '';
+
+ for(var i = 0; i < count; i++)
+ {
+ spaces += ' ';
+ }
+
+ return left + spaces + right;
+ }
+
+ // This function process one line for 'smart tabs'
+ function ProcessLine(line, tabSize)
+ {
+ if(line.indexOf(tab) == -1)
+ {
+ return line;
+ }
+
+ var pos = 0;
+
+ while((pos = line.indexOf(tab)) != -1)
+ {
+ // This is pretty much all there is to the 'smart tabs' logic.
+ // Based on the position within the line and size of a tab,
+ // calculate the amount of spaces we need to insert.
+ var spaces = tabSize - pos % tabSize;
+
+ line = InsertSpaces(line, pos, spaces);
+ }
+
+ return line;
+ }
+
+ // Go through all the lines and do the 'smart tabs' magic.
+ for(var i = 0; i < lines.length; i++)
+ {
+ var line = lines[i];
+ result += ProcessLine(line, tabSize) + '\n';
+ }
+
+ return result;
+}
+
+dp.sh.Highlighter.prototype.SwitchToTable = function()
+{
+ // Safari fix: for some reason lowercase <br /> isn't getting picked up, even though 'i' is set
+ var lines = this.div.innerHTML.split(/<br \/>/gi);
+ var row = null;
+ var cell = null;
+ var html = '';
+ var pipe = ' | ';
+
+ // creates an anchor to a utility
+ function UtilHref(util, text)
+ {
+ return '<a href="#" onclick="dp.sh.Utils.' + util + '(this); return false;">' + text + '</a>';
+ }
+
+ row = this.table.insertRow(-1);
+
+ if(this.addGutter == true)
+ {
+ cell = row.insertCell(-1);
+ cell.className = 'tools-corner';
+ }
+
+ if(this.addControls == true)
+ {
+ cell = row.insertCell(-1);
+
+ cell.originalCode = this.originalCode;
+ cell.processedCode = this.code;
+
+ cell.className = 'tools';
+ cell.innerHTML = UtilHref('ViewSource', 'view plain') + pipe + UtilHref('PrintSource', 'print');
+
+ if(window.clipboardData)
+ {
+ cell.innerHTML += pipe + UtilHref('ToClipboard', 'copy to clipboard');
+ }
+
+ cell.innerHTML += pipe + UtilHref('About', '?');
+ }
+
+ for(var i = 0; i < lines.length - 1; i++)
+ {
+ row = this.table.insertRow(-1);
+
+ if(this.addGutter == true)
+ {
+ cell = row.insertCell(-1);
+ cell.className = 'gutter';
+ cell.innerHTML = i + 1;
+ }
+
+ cell = row.insertCell(-1);
+ cell.className = 'line';
+ cell.innerHTML = lines[i];
+ }
+
+ this.div.innerHTML = '';
+}
+
+dp.sh.Highlighter.prototype.Highlight = function(code)
+{
+ // This function strips all new lines and spaces
+ // from the beging and end of the string .
+ function Trim(str)
+ {
+ var begining = new RegExp('^[\\s\\n]', 'g');
+ var end = new RegExp('[\\s\\n]$', 'g');
+
+ while(begining.test(str))
+ {
+ str = str.substr(1);
+ }
+
+ while(end.test(str))
+ {
+ str = str.substr(0, str.length - 1);
+ }
+
+ return str;
+ }
+
+ // This function returns a portions of the string
+ // from pos1 to pos2 inclusive.
+ function Copy(string, pos1, pos2)
+ {
+ return string.substr(pos1, pos2 - pos1);
+ }
+
+ var pos = 0;
+
+ this.originalCode = code;
+ this.code = Trim(code);
+ this.div = document.createElement('div');
+ this.table = document.createElement('table');
+ this.matches = new Array();
+
+ if(this.CssClass != null)
+ {
+ this.table.className = this.CssClass;
+ }
+
+ // replace tabs with spaces
+ if(this.tabsToSpaces == true)
+ {
+ this.code = this.ProcessSmartTabs(this.code);
+ }
+
+ this.table.border = 0;
+ this.table.cellSpacing = 0;
+ this.table.cellPadding = 0;
+
+ this.ProcessRegexList();
+
+ // if no matches found, do nothing
+ if(this.matches.length == 0)
+ {
+ return;
+ }
+
+ // sort the matches
+ this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
+
+ // The following loop checks to see if any of the matches are inside
+ // of other matches. This process would get rid of highligting strings
+ // inside comments, keywords inside strings and so on.
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ if(this.IsInside(this.matches[i]))
+ {
+ this.matches[i] = null;
+ }
+ }
+
+ // Finally, go through the final list of matches and pull the all
+ // together adding everything in between that isn't a match.
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var match = this.matches[i];
+
+ if(match == null || match.length == 0)
+ {
+ continue;
+ }
+
+ this.AddBit(Copy(this.code, pos, match.index), null);
+ this.AddBit(match.value, match.css);
+
+ pos = match.index + match.length;
+ }
+
+ this.AddBit(this.code.substr(pos), null);
+
+ this.SwitchToTable();
+}
+
+dp.sh.Highlighter.prototype.GetKeywords = function(str)
+{
+ return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b';
+}
+
+// highlightes all elements identified by name and gets source code from specified property
+dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */)
+{
+ var elements = document.getElementsByName(name);
+ var highlighter = null;
+ var registered = new Object();
+ var propertyName = 'value';
+
+ function FindValue()
+ {
+ var a = arguments;
+
+ for(var i = 0; i < a.length; i++)
+ if(a[i] != null && ((typeof(a[i]) == 'string' && a[i] != '') || (typeof(a[i]) == 'object' && a[i].value != '')))
+ return a[i];
+
+ return null;
+ }
+
+ if(elements == null)
+ {
+ return;
+ }
+
+ // if showGutter isn't set, default to TRUE
+ if(showGutter == null)
+ {
+ showGutter = true;
+ }
+
+ // if showControls isn't set, default to TRUE
+ if(showControls == null)
+ {
+ showControls = true;
+ }
+
+ // register all brushes
+ for(var brush in dp.sh.Brushes)
+ {
+ var aliases = dp.sh.Brushes[brush].Aliases;
+
+ if(aliases == null)
+ {
+ continue;
+ }
+
+ for(var i = 0; i < aliases.length; i++)
+ {
+ registered[aliases[i]] = brush;
+ }
+ }
+
+ for(var i = 0; i < elements.length; i++)
+ {
+ var element = elements[i];
+ var language = FindValue(element.attributes['class'], element.className, element.attributes['language'], element.language);
+
+ if(language == null)
+ continue;
+
+ if(language.value)
+ language = language.value;
+
+ language = (language + '').toLowerCase();
+
+ if(registered[language] == null)
+ {
+ continue;
+ }
+
+ // instantiate a brush
+ highlighter = new dp.sh.Brushes[registered[language]]();
+
+ // hide the original element
+ element.style.display = 'none';
+
+ highlighter.addGutter = showGutter;
+ highlighter.addControls = showControls;
+ highlighter.Highlight(element[propertyName]);
+
+ // place the result table inside a div
+ var div = document.createElement('div');
+
+ div.className = 'dp-highlighter';
+ div.appendChild(highlighter.table);
+
+ element.parentNode.insertBefore(div, element);
+ }
+}
diff --git a/src/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js b/src/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js
new file mode 100644
index 0000000..8d92721
--- /dev/null
+++ b/src/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js
@@ -0,0 +1,636 @@
+/**
+ * Code Syntax Highlighter.
+ * Version 1.3.0
+ * Copyright (C) 2004 Alex Gorbatchev.
+ * http://www.dreamprojections.com/syntaxhighlighter/
+ *
+ * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library 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 Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+//
+// create namespaces
+//
+var dp = {
+ sh :
+ {
+ Toolbar : {},
+ Utils : {},
+ RegexLib: {},
+ Brushes : {},
+ Strings : {},
+ Version : '1.4.1'
+ }
+};
+
+dp.sh.Strings = {
+ AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>&copy;2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
+};
+
+dp.SyntaxHighlighter = dp.sh;
+
+//
+// Toolbar functions
+//
+
+dp.sh.Toolbar.Commands = {
+ ExpandSource: {
+ label: '+ expand source',
+ check: function(highlighter) { return highlighter.collapse; },
+ func: function(sender, highlighter)
+ {
+ sender.parentNode.removeChild(sender);
+ highlighter.div.className = highlighter.div.className.replace('collapsed', '');
+ }
+ },
+
+ // opens a new windows and puts the original unformatted source code inside.
+ ViewSource: {
+ label: 'view plain',
+ func: function(sender, highlighter)
+ {
+ var code = highlighter.originalCode.replace(/</g, '&lt;');
+ var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');
+ wnd.document.write('<textarea style="width:99%;height:99%">' + code + '</textarea>');
+ wnd.document.close();
+ }
+ },
+
+ // copies the original source code in to the clipboard (IE only)
+ CopyToClipboard: {
+ label: 'copy to clipboard',
+ check: function() { return window.clipboardData != null; },
+ func: function(sender, highlighter)
+ {
+ window.clipboardData.setData('text', highlighter.originalCode);
+ alert('The code is in your clipboard now');
+ }
+ },
+
+ // creates an invisible iframe, puts the original source code inside and prints it
+ PrintSource: {
+ label: 'print',
+ func: function(sender, highlighter)
+ {
+ var iframe = document.createElement('IFRAME');
+ var doc = null;
+
+ // this hides the iframe
+ iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
+
+ document.body.appendChild(iframe);
+ doc = iframe.contentWindow.document;
+
+ dp.sh.Utils.CopyStyles(doc, window.document);
+ doc.write('<div class="' + highlighter.div.className.replace('collapsed', '') + ' printing">' + highlighter.div.innerHTML + '</div>');
+ doc.close();
+
+ iframe.contentWindow.focus();
+ iframe.contentWindow.print();
+
+ alert('Printing...');
+
+ document.body.removeChild(iframe);
+ }
+ },
+
+ About: {
+ label: '?',
+ func: function(highlighter)
+ {
+ var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0');
+ var doc = wnd.document;
+
+ dp.sh.Utils.CopyStyles(doc, window.document);
+
+ doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version));
+ doc.close();
+ wnd.focus();
+ }
+ }
+};
+
+// creates a <div /> with all toolbar links
+dp.sh.Toolbar.Create = function(highlighter)
+{
+ var div = document.createElement('div');
+
+ div.className = 'tools';
+
+ for(var name in dp.sh.Toolbar.Commands)
+ {
+ var cmd = dp.sh.Toolbar.Commands[name];
+
+ if(cmd.check != null && !cmd.check(highlighter))
+ continue;
+
+ div.innerHTML += '<a href="#" onclick="dp.sh.Toolbar.Command(\'' + name + '\',this);return false;">' + cmd.label + '</a>';
+ }
+
+ return div;
+}
+
+// executes toolbar command by name
+dp.sh.Toolbar.Command = function(name, sender)
+{
+ var n = sender;
+
+ while(n != null && n.className.indexOf('dp-highlighter') == -1)
+ n = n.parentNode;
+
+ if(n != null)
+ dp.sh.Toolbar.Commands[name].func(sender, n.highlighter);
+}
+
+// copies all <link rel="stylesheet" /> from 'target' window to 'dest'
+dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc)
+{
+ var links = sourceDoc.getElementsByTagName('link');
+
+ for(var i = 0; i < links.length; i++)
+ if(links[i].rel.toLowerCase() == 'stylesheet')
+ destDoc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
+}
+
+//
+// Common reusable regular expressions
+//
+dp.sh.RegexLib = {
+ MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'),
+ SingleLineCComments : new RegExp('//.*$', 'gm'),
+ SingleLinePerlComments : new RegExp('#.*$', 'gm'),
+ DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""])*"','g'),
+ SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'", 'g')
+};
+
+//
+// Match object
+//
+dp.sh.Match = function(value, index, css)
+{
+ this.value = value;
+ this.index = index;
+ this.length = value.length;
+ this.css = css;
+}
+
+//
+// Highlighter object
+//
+dp.sh.Highlighter = function()
+{
+ this.noGutter = false;
+ this.addControls = true;
+ this.collapse = false;
+ this.tabsToSpaces = true;
+ this.wrapColumn = 80;
+ this.showColumns = true;
+}
+
+// static callback for the match sorting
+dp.sh.Highlighter.SortCallback = function(m1, m2)
+{
+ // sort matches by index first
+ if(m1.index < m2.index)
+ return -1;
+ else if(m1.index > m2.index)
+ return 1;
+ else
+ {
+ // if index is the same, sort by length
+ if(m1.length < m2.length)
+ return -1;
+ else if(m1.length > m2.length)
+ return 1;
+ }
+ return 0;
+}
+
+dp.sh.Highlighter.prototype.createElement = function(name)
+{
+ var result = document.createElement(name);
+ result.highlighter = this;
+ return result;
+}
+
+// gets a list of all matches for a given regular expression
+dp.sh.Highlighter.prototype.GetMatches = function(regex, css)
+{
+ var index = 0;
+ var match = null;
+
+ while((match = regex.exec(this.code)) != null)
+ this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);
+}
+
+dp.sh.Highlighter.prototype.AddBit = function(str, css)
+{
+ if(str == null || str.length == 0)
+ return;
+
+ var span = this.createElement('span');
+
+ str = str.replace(/&/g, '&amp;');
+ str = str.replace(/ /g, '&nbsp;');
+ str = str.replace(/</g, '&lt;');
+ str = str.replace(/\n/gm, '&nbsp;<br />');
+
+ // when adding a piece of code, check to see if it has line breaks in it
+ // and if it does, wrap individual line breaks with span tags
+ if(css != null)
+ {
+ var regex = new RegExp('<br />', 'gi');
+
+ if(regex.test(str))
+ {
+ var lines = str.split('&nbsp;<br />');
+
+ str = '';
+
+ for(var i = 0; i < lines.length; i++)
+ {
+ span = this.createElement('span');
+ span.className = css;
+ span.innerHTML = lines[i];
+
+ this.div.appendChild(span);
+
+ // don't add a <br /> for the last line
+ if(i + 1 < lines.length)
+ this.div.appendChild(this.createElement('br'));
+ }
+ }
+ else
+ {
+ span.className = css;
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+ }
+ else
+ {
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+}
+
+// checks if one match is inside any other match
+dp.sh.Highlighter.prototype.IsInside = function(match)
+{
+ if(match == null || match.length == 0)
+ return false;
+
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var c = this.matches[i];
+
+ if(c == null)
+ continue;
+
+ if((match.index > c.index) && (match.index < c.index + c.length))
+ return true;
+ }
+
+ return false;
+}
+
+dp.sh.Highlighter.prototype.ProcessRegexList = function()
+{
+ for(var i = 0; i < this.regexList.length; i++)
+ this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
+}
+
+dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code)
+{
+ var lines = code.split('\n');
+ var result = '';
+ var tabSize = 4;
+ var tab = '\t';
+
+ // This function inserts specified amount of spaces in the string
+ // where a tab is while removing that given tab.
+ function InsertSpaces(line, pos, count)
+ {
+ var left = line.substr(0, pos);
+ var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab
+ var spaces = '';
+
+ for(var i = 0; i < count; i++)
+ spaces += ' ';
+
+ return left + spaces + right;
+ }
+
+ // This function process one line for 'smart tabs'
+ function ProcessLine(line, tabSize)
+ {
+ if(line.indexOf(tab) == -1)
+ return line;
+
+ var pos = 0;
+
+ while((pos = line.indexOf(tab)) != -1)
+ {
+ // This is pretty much all there is to the 'smart tabs' logic.
+ // Based on the position within the line and size of a tab,
+ // calculate the amount of spaces we need to insert.
+ var spaces = tabSize - pos % tabSize;
+
+ line = InsertSpaces(line, pos, spaces);
+ }
+
+ return line;
+ }
+
+ // Go through all the lines and do the 'smart tabs' magic.
+ for(var i = 0; i < lines.length; i++)
+ result += ProcessLine(lines[i], tabSize) + '\n';
+
+ return result;
+}
+
+dp.sh.Highlighter.prototype.SwitchToList = function()
+{
+ // thanks to Lachlan Donald from SitePoint.com for this <br /> tag fix.
+ var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n');
+ var lines = html.split('\n');
+
+ if(this.addControls == true)
+ this.bar.appendChild(dp.sh.Toolbar.Create(this));
+
+ // add columns ruler
+ if(this.showColumns)
+ {
+ var div = this.createElement('div');
+ var columns = this.createElement('div');
+ var showEvery = 10;
+ var i = 1;
+
+ while(i <= 150)
+ {
+ if(i % showEvery == 0)
+ {
+ div.innerHTML += i;
+ i += (i + '').length;
+ }
+ else
+ {
+ div.innerHTML += '&middot;';
+ i++;
+ }
+ }
+
+ columns.className = 'columns';
+ columns.appendChild(div);
+ this.bar.appendChild(columns);
+ }
+
+ for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++)
+ {
+ var li = this.createElement('li');
+ var span = this.createElement('span');
+
+ // uses .line1 and .line2 css styles for alternating lines
+ li.className = (i % 2 == 0) ? 'alt' : '';
+ span.innerHTML = lines[i] + '&nbsp;';
+
+ li.appendChild(span);
+ this.ol.appendChild(li);
+ }
+
+ this.div.innerHTML = '';
+}
+
+dp.sh.Highlighter.prototype.Highlight = function(code)
+{
+ function Trim(str)
+ {
+ return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1');
+ }
+
+ function Chop(str)
+ {
+ return str.replace(/\n*$/, '').replace(/^\n*/, '');
+ }
+
+ function Unindent(str)
+ {
+ var lines = str.split('\n');
+ var indents = new Array();
+ var regex = new RegExp('^\\s*', 'g');
+ var min = 1000;
+
+ // go through every line and check for common number of indents
+ for(var i = 0; i < lines.length && min > 0; i++)
+ {
+ if(Trim(lines[i]).length == 0)
+ continue;
+
+ var matches = regex.exec(lines[i]);
+
+ if(matches != null && matches.length > 0)
+ min = Math.min(matches[0].length, min);
+ }
+
+ // trim minimum common number of white space from the begining of every line
+ if(min > 0)
+ for(var i = 0; i < lines.length; i++)
+ lines[i] = lines[i].substr(min);
+
+ return lines.join('\n');
+ }
+
+ // This function returns a portions of the string from pos1 to pos2 inclusive
+ function Copy(string, pos1, pos2)
+ {
+ return string.substr(pos1, pos2 - pos1);
+ }
+
+ var pos = 0;
+
+ this.originalCode = code;
+ this.code = Chop(Unindent(code));
+ this.div = this.createElement('div');
+ this.bar = this.createElement('div');
+ this.ol = this.createElement('ol');
+ this.matches = new Array();
+
+ this.div.className = 'dp-highlighter';
+ this.div.highlighter = this;
+
+ this.bar.className = 'bar';
+
+ // set the first line
+ this.ol.start = this.firstLine;
+
+ if(this.CssClass != null)
+ this.ol.className = this.CssClass;
+
+ if(this.collapse)
+ this.div.className += ' collapsed';
+
+ if(this.noGutter)
+ this.div.className += ' nogutter';
+
+ // replace tabs with spaces
+ if(this.tabsToSpaces == true)
+ this.code = this.ProcessSmartTabs(this.code);
+
+ this.ProcessRegexList();
+
+ // if no matches found, add entire code as plain text
+ if(this.matches.length == 0)
+ {
+ this.AddBit(this.code, null);
+ this.SwitchToList();
+ this.div.appendChild(this.ol);
+ return;
+ }
+
+ // sort the matches
+ this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
+
+ // The following loop checks to see if any of the matches are inside
+ // of other matches. This process would get rid of highligted strings
+ // inside comments, keywords inside strings and so on.
+ for(var i = 0; i < this.matches.length; i++)
+ if(this.IsInside(this.matches[i]))
+ this.matches[i] = null;
+
+ // Finally, go through the final list of matches and pull the all
+ // together adding everything in between that isn't a match.
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var match = this.matches[i];
+
+ if(match == null || match.length == 0)
+ continue;
+
+ this.AddBit(Copy(this.code, pos, match.index), null);
+ this.AddBit(match.value, match.css);
+
+ pos = match.index + match.length;
+ }
+
+ this.AddBit(this.code.substr(pos), null);
+
+ this.SwitchToList();
+ this.div.appendChild(this.bar);
+ this.div.appendChild(this.ol);
+}
+
+dp.sh.Highlighter.prototype.GetKeywords = function(str)
+{
+ return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b';
+}
+
+// highlightes all elements identified by name and gets source code from specified property
+dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */)
+{
+ function FindValue()
+ {
+ var a = arguments;
+
+ for(var i = 0; i < a.length; i++)
+ {
+ if(a[i] == null)
+ continue;
+
+ if(typeof(a[i]) == 'string' && a[i] != '')
+ return a[i] + '';
+
+ if(typeof(a[i]) == 'object' && a[i].value != '')
+ return a[i].value + '';
+ }
+
+ return null;
+ }
+
+ function IsOptionSet(value, list)
+ {
+ for(var i = 0; i < list.length; i++)
+ if(list[i] == value)
+ return true;
+
+ return false;
+ }
+
+ function GetOptionValue(name, list, defaultValue)
+ {
+ var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi');
+ var matches = null;
+
+ for(var i = 0; i < list.length; i++)
+ if((matches = regex.exec(list[i])) != null)
+ return matches[1];
+
+ return defaultValue;
+ }
+
+ var elements = document.getElementsByName(name);
+ var highlighter = null;
+ var registered = new Object();
+ var propertyName = 'value';
+
+ // if no code blocks found, leave
+ if(elements == null)
+ return;
+
+ // register all brushes
+ for(var brush in dp.sh.Brushes)
+ {
+ var aliases = dp.sh.Brushes[brush].Aliases;
+
+ if(aliases == null)
+ continue;
+
+ for(var i = 0; i < aliases.length; i++)
+ registered[aliases[i]] = brush;
+ }
+
+ for(var i = 0; i < elements.length; i++)
+ {
+ var element = elements[i];
+ var options = FindValue(
+ element.attributes['class'], element.className,
+ element.attributes['language'], element.language
+ );
+ var language = '';
+
+ if(options == null)
+ continue;
+
+ options = options.split(':');
+
+ language = options[0].toLowerCase();
+
+ if(registered[language] == null)
+ continue;
+
+ // instantiate a brush
+ highlighter = new dp.sh.Brushes[registered[language]]();
+
+ // hide the original element
+ element.style.display = 'none';
+
+ highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter;
+ highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls;
+ highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll;
+ highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns;
+
+ // first line idea comes from Andrew Collington, thanks!
+ highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine;
+
+ highlighter.Highlight(element[propertyName]);
+
+ element.parentNode.insertBefore(highlighter.div, element);
+ }
+}
diff --git a/src/usr/local/www/crash_reporter.php b/src/usr/local/www/crash_reporter.php
new file mode 100644
index 0000000..3b00e47
--- /dev/null
+++ b/src/usr/local/www/crash_reporter.php
@@ -0,0 +1,156 @@
+<?php
+/* $Id$ */
+/*
+ crash_reporter.php
+ part of pfSense
+ Copyright (C) 2011 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: header
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-crash-reporter
+##|*NAME=Crash reporter
+##|*DESCR=Uploads crash reports to pfSense and or deletes crash reports.
+##|*MATCH=crash_reporter.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require("captiveportal.inc");
+
+define("FILE_SIZE", 450000);
+
+function upload_crash_report($files) {
+ global $g;
+ $post = array();
+ $counter = 0;
+ foreach ($files as $file) {
+ $post["file{$counter}"] = "@{$file}";
+ $counter++;
+ }
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_VERBOSE, 0);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . $g['product_version']);
+ curl_setopt($ch, CURLOPT_URL, $g['crashreporterurl']);
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
+ $response = curl_exec($ch);
+ return $response;
+}
+
+function output_crash_reporter_html($crash_reports) {
+ echo "<p><strong>" . gettext("Unfortunately we have detected a programming bug.") . "</strong></p>";
+ echo "<p>" . gettext("Would you like to submit the programming debug logs to the pfSense developers for inspection?") . "</p>";
+ echo "<p><i>" . gettext("Please double check the contents to ensure you are comfortable sending this information before clicking Yes.") . "</i></p>";
+ echo "<p>" . gettext("Contents of crash reports") . ":<br />";
+ echo "<textarea readonly=\"readonly\" rows=\"40\" cols=\"65\" name=\"crashreports\">{$crash_reports}</textarea></p>";
+ echo "<p><input name=\"Submit\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Yes") . "\" />" . gettext(" - Submit this to the developers for inspection") . "</p>";
+ echo "<p><input name=\"Submit\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("No") . "\" />" . gettext(" - Just delete the crash report and take me back to the Dashboard") . "</p>";
+ echo "</form>";
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Crash reporter"));
+include('head.inc');
+
+$crash_report_header = "Crash report begins. Anonymous machine information:\n\n";
+$crash_report_header .= php_uname("m") . "\n";
+$crash_report_header .= php_uname("r") . "\n";
+$crash_report_header .= php_uname("v") . "\n";
+$crash_report_header .= "\nCrash report details:\n";
+
+exec("/usr/bin/grep -vi warning /tmp/PHP_errors.log", $php_errors);
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+ <form action="crash_reporter.php" method="post">
+
+<?php
+ if (gettext($_POST['Submit']) == "Yes") {
+ echo gettext("Processing...");
+ if (!is_dir("/var/crash")) {
+ mkdir("/var/crash", 0750, true);
+ }
+ @file_put_contents("/var/crash/crashreport_header.txt", $crash_report_header);
+ if (file_exists("/tmp/PHP_errors.log")) {
+ copy("/tmp/PHP_errors.log", "/var/crash/PHP_errors.log");
+ }
+ exec("find /var/crash -type l -exec rm {} +");
+ exec("/usr/bin/gzip /var/crash/*");
+ $files_to_upload = glob("/var/crash/*");
+ echo "<br/>";
+ echo gettext("Uploading...");
+ ob_flush();
+ flush();
+ if (is_array($files_to_upload)) {
+ $resp = upload_crash_report($files_to_upload);
+ array_map('unlink', glob("/var/crash/*"));
+ // Erase the contents of the PHP error log
+ fclose(fopen("/tmp/PHP_errors.log", 'w'));
+ echo "<br/>";
+ print_r($resp);
+ echo "<p><a href=\"/\">" . gettext("Continue") . "</a>" . gettext(" and delete crash report files from local disk.") . "</p>";
+ } else {
+ echo "Could not find any crash files.";
+ }
+ } else if (gettext($_POST['Submit']) == "No") {
+ array_map('unlink', glob("/var/crash/*"));
+ // Erase the contents of the PHP error log
+ fclose(fopen("/tmp/PHP_errors.log", 'w'));
+ header("Location: /");
+ exit;
+ } else {
+ $crash_files = glob("/var/crash/*");
+ $crash_reports = $crash_report_header;
+ if (count($php_errors) > 0) {
+ $crash_reports .= "\nPHP Errors:\n";
+ $crash_reports .= implode("\n", $php_errors) . "\n\n";
+ }
+ if (is_array($crash_files)) {
+ foreach ($crash_files as $cf) {
+ if (filesize($cf) < FILE_SIZE) {
+ $crash_reports .= "\nFilename: {$cf}\n";
+ $crash_reports .= file_get_contents($cf);
+ }
+ }
+ } else {
+ echo "Could not locate any crash data.";
+ }
+ output_crash_reporter_html($crash_reports);
+ }
+?>
+
+<?php include("fend.inc"); ?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/csrf/csrf-magic.js b/src/usr/local/www/csrf/csrf-magic.js
new file mode 100644
index 0000000..d358b0f
--- /dev/null
+++ b/src/usr/local/www/csrf/csrf-magic.js
@@ -0,0 +1,186 @@
+/**
+ * @file
+ *
+ * Rewrites XMLHttpRequest to automatically send CSRF token with it. In theory
+ * plays nice with other JavaScript libraries, needs testing though.
+ */
+
+// Here are the basic overloaded method definitions
+// The wrapper must be set BEFORE onreadystatechange is written to, since
+// a bug in ActiveXObject prevents us from properly testing for it.
+CsrfMagic = function(real) {
+ // try to make it ourselves, if you didn't pass it
+ if (!real) try { real = new XMLHttpRequest; } catch (e) {;}
+ if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {;}
+ if (!real) try { real = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {;}
+ if (!real) try { real = new ActiveXObject('Msxml2.XMLHTTP.4.0'); } catch (e) {;}
+ this.csrf = real;
+ // properties
+ var csrfMagic = this;
+ real.onreadystatechange = function() {
+ csrfMagic._updateProps();
+ return csrfMagic.onreadystatechange ? csrfMagic.onreadystatechange() : null;
+ };
+ csrfMagic._updateProps();
+}
+
+CsrfMagic.prototype = {
+
+ open: function(method, url, async, username, password) {
+ if (method == 'POST') this.csrf_isPost = true;
+ // deal with Opera bug, thanks jQuery
+ if (username) return this.csrf_open(method, url, async, username, password);
+ else return this.csrf_open(method, url, async);
+ },
+ csrf_open: function(method, url, async, username, password) {
+ if (username) return this.csrf.open(method, url, async, username, password);
+ else return this.csrf.open(method, url, async);
+ },
+
+ send: function(data) {
+ if (!this.csrf_isPost) return this.csrf_send(data);
+ prepend = csrfMagicName + '=' + csrfMagicToken + '&';
+ if (this.csrf_purportedLength === undefined) {
+ this.csrf_setRequestHeader("Content-length", this.csrf_purportedLength + prepend.length);
+ delete this.csrf_purportedLength;
+ }
+ delete this.csrf_isPost;
+ return this.csrf_send(prepend + data);
+ },
+ csrf_send: function(data) {
+ return this.csrf.send(data);
+ },
+
+ setRequestHeader: function(header, value) {
+ // We have to auto-set this at the end, since we don't know how long the
+ // nonce is when added to the data.
+ if (this.csrf_isPost && header == "Content-length") {
+ this.csrf_purportedLength = value;
+ return;
+ }
+ return this.csrf_setRequestHeader(header, value);
+ },
+ csrf_setRequestHeader: function(header, value) {
+ return this.csrf.setRequestHeader(header, value);
+ },
+
+ abort: function() {
+ return this.csrf.abort();
+ },
+ getAllResponseHeaders: function() {
+ return this.csrf.getAllResponseHeaders();
+ },
+ getResponseHeader: function(header) {
+ return this.csrf.getResponseHeader(header);
+ } // ,
+}
+
+// proprietary
+CsrfMagic.prototype._updateProps = function() {
+ this.readyState = this.csrf.readyState;
+ if (this.readyState == 4) {
+ this.responseText = this.csrf.responseText;
+ this.responseXML = this.csrf.responseXML;
+ this.status = this.csrf.status;
+ this.statusText = this.csrf.statusText;
+ }
+}
+CsrfMagic.process = function(base) {
+ var prepend = csrfMagicName + '=' + csrfMagicToken;
+ if (base) return prepend + '&' + base;
+ return prepend;
+}
+// callback function for when everything on the page has loaded
+CsrfMagic.end = function() {
+ // This rewrites forms AGAIN, so in case buffering didn't work this
+ // certainly will.
+ forms = document.getElementsByTagName('form');
+ for (var i = 0; i < forms.length; i++) {
+ form = forms[i];
+ if (form.method.toUpperCase() !== 'POST') continue;
+ if (form.elements[csrfMagicName]) continue;
+ var input = document.createElement('input');
+ input.setAttribute('name', csrfMagicName);
+ input.setAttribute('value', csrfMagicToken);
+ input.setAttribute('type', 'hidden');
+ form.appendChild(input);
+ }
+}
+
+// Sets things up for Mozilla/Opera/nice browsers
+// We very specifically match against Internet Explorer, since they haven't
+// implemented prototypes correctly yet.
+if (window.XMLHttpRequest && window.XMLHttpRequest.prototype && '\v' != 'v') {
+ var x = XMLHttpRequest.prototype;
+ var c = CsrfMagic.prototype;
+
+ // Save the original functions
+ x.csrf_open = x.open;
+ x.csrf_send = x.send;
+ x.csrf_setRequestHeader = x.setRequestHeader;
+
+ // Notice that CsrfMagic is itself an instantiatable object, but only
+ // open, send and setRequestHeader are necessary as decorators.
+ x.open = c.open;
+ x.send = c.send;
+ x.setRequestHeader = c.setRequestHeader;
+} else {
+ // The only way we can do this is by modifying a library you have been
+ // using. We support YUI, script.aculo.us, prototype, MooTools,
+ // jQuery, Ext and Dojo.
+ if (window.jQuery) {
+ // jQuery didn't implement a new XMLHttpRequest function, so we have
+ // to do this the hard way.
+ jQuery.csrf_ajax = jQuery.ajax;
+ jQuery.ajax = function( s ) {
+ if (s.type && s.type.toUpperCase() == 'POST') {
+ s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
+ if ( s.data && s.processData && typeof s.data != "string" ) {
+ s.data = jQuery.param(s.data);
+ }
+ s.data = CsrfMagic.process(s.data);
+ }
+ return jQuery.csrf_ajax( s );
+ }
+ }
+ if (window.Prototype) {
+ // This works for script.aculo.us too
+ Ajax.csrf_getTransport = Ajax.getTransport;
+ Ajax.getTransport = function() {
+ return new CsrfMagic(Ajax.csrf_getTransport());
+ }
+ }
+ if (window.MooTools) {
+ Browser.csrf_Request = Browser.Request;
+ Browser.Request = function () {
+ return new CsrfMagic(Browser.csrf_Request());
+ }
+ }
+ if (window.YAHOO) {
+ // old YUI API
+ YAHOO.util.Connect.csrf_createXhrObject = YAHOO.util.Connect.createXhrObject;
+ YAHOO.util.Connect.createXhrObject = function (transaction) {
+ obj = YAHOO.util.Connect.csrf_createXhrObject(transaction);
+ obj.conn = new CsrfMagic(obj.conn);
+ return obj;
+ }
+ }
+ if (window.Ext) {
+ // Ext can use other js libraries as loaders, so it has to come last
+ // Ext's implementation is pretty identical to Yahoo's, but we duplicate
+ // it for comprehensiveness's sake.
+ Ext.lib.Ajax.csrf_createXhrObject = Ext.lib.Ajax.createXhrObject;
+ Ext.lib.Ajax.createXhrObject = function (transaction) {
+ obj = Ext.lib.Ajax.csrf_createXhrObject(transaction);
+ obj.conn = new CsrfMagic(obj.conn);
+ return obj;
+ }
+ }
+ if (window.dojo) {
+ // NOTE: this doesn't work with latest dojo
+ dojo.csrf__xhrObj = dojo._xhrObj;
+ dojo._xhrObj = function () {
+ return new CsrfMagic(dojo.csrf__xhrObj());
+ }
+ }
+}
diff --git a/src/usr/local/www/csrf/csrf-magic.php b/src/usr/local/www/csrf/csrf-magic.php
new file mode 100644
index 0000000..58f4eba
--- /dev/null
+++ b/src/usr/local/www/csrf/csrf-magic.php
@@ -0,0 +1,403 @@
+<?php
+
+/**
+ * @file
+ *
+ * csrf-magic is a PHP library that makes adding CSRF-protection to your
+ * web applications a snap. No need to modify every form or create a database
+ * of valid nonces; just include this file at the top of every
+ * web-accessible page (or even better, your common include file included
+ * in every page), and forget about it! (There are, of course, configuration
+ * options for advanced users).
+ *
+ * This library is PHP4 and PHP5 compatible.
+ */
+
+// CONFIGURATION:
+
+/**
+ * By default, when you include this file csrf-magic will automatically check
+ * and exit if the CSRF token is invalid. This will defer executing
+ * csrf_check() until you're ready. You can also pass false as a parameter to
+ * that function, in which case the function will not exit but instead return
+ * a boolean false if the CSRF check failed. This allows for tighter integration
+ * with your system.
+ */
+$GLOBALS['csrf']['defer'] = false;
+
+/**
+ * This is the amount of seconds you wish to allow before any token becomes
+ * invalid; the default is two hours, which should be more than enough for
+ * most websites.
+ */
+$GLOBALS['csrf']['expires'] = 7200;
+
+/**
+ * Callback function to execute when there's the CSRF check fails and
+ * $fatal == true (see csrf_check). This will usually output an error message
+ * about the failure.
+ */
+$GLOBALS['csrf']['callback'] = 'csrf_callback';
+
+/**
+ * Whether or not to include our JavaScript library which also rewrites
+ * AJAX requests on this domain. Set this to the web path. This setting only works
+ * with supported JavaScript libraries in Internet Explorer; see README.txt for
+ * a list of supported libraries.
+ */
+$GLOBALS['csrf']['rewrite-js'] = false;
+
+/**
+ * A secret key used when hashing items. Please generate a random string and
+ * place it here. If you change this value, all previously generated tokens
+ * will become invalid.
+ */
+$GLOBALS['csrf']['secret'] = '';
+// nota bene: library code should use csrf_get_secret() and not access
+// this global directly
+
+/**
+ * Set this to false to disable csrf-magic's output handler, and therefore,
+ * its rewriting capabilities. If you're serving non HTML content, you should
+ * definitely set this false.
+ */
+$GLOBALS['csrf']['rewrite'] = true;
+
+/**
+ * Whether or not to use IP addresses when binding a user to a token. This is
+ * less reliable and less secure than sessions, but is useful when you need
+ * to give facilities to anonymous users and do not wish to maintain a database
+ * of valid keys.
+ */
+$GLOBALS['csrf']['allow-ip'] = true;
+
+/**
+ * If this information is available, use the cookie by this name to determine
+ * whether or not to allow the request. This is a shortcut implementation
+ * very similar to 'key', but we randomly set the cookie ourselves.
+ */
+$GLOBALS['csrf']['cookie'] = '__csrf_cookie';
+
+/**
+ * If this information is available, set this to a unique identifier (it
+ * can be an integer or a unique username) for the current "user" of this
+ * application. The token will then be globally valid for all of that user's
+ * operations, but no one else. This requires that 'secret' be set.
+ */
+$GLOBALS['csrf']['user'] = false;
+
+/**
+ * This is an arbitrary secret value associated with the user's session. This
+ * will most probably be the contents of a cookie, as an attacker cannot easily
+ * determine this information. Warning: If the attacker knows this value, they
+ * can easily spoof a token. This is a generic implementation; sessions should
+ * work in most cases.
+ *
+ * Why would you want to use this? Lets suppose you have a squid cache for your
+ * website, and the presence of a session cookie bypasses it. Let's also say
+ * you allow anonymous users to interact with the website; submitting forms
+ * and AJAX. Previously, you didn't have any CSRF protection for anonymous users
+ * and so they never got sessions; you don't want to start using sessions either,
+ * otherwise you'll bypass the Squid cache. Setup a different cookie for CSRF
+ * tokens, and have Squid ignore that cookie for get requests, for anonymous
+ * users. (If you haven't guessed, this scheme was(?) used for MediaWiki).
+ */
+$GLOBALS['csrf']['key'] = false;
+
+/**
+ * The name of the magic CSRF token that will be placed in all forms, i.e.
+ * the contents of <input type="hidden" name="$name" value="CSRF-TOKEN" />
+ */
+$GLOBALS['csrf']['input-name'] = '__csrf_magic';
+
+/**
+ * Set this to false if your site must work inside of frame/iframe elements,
+ * but do so at your own risk: this configuration protects you against CSS
+ * overlay attacks that defeat tokens.
+ */
+$GLOBALS['csrf']['frame-breaker'] = true;
+
+/**
+ * Whether or not CSRF Magic should be allowed to start a new session in order
+ * to determine the key.
+ */
+$GLOBALS['csrf']['auto-session'] = true;
+
+/**
+ * Whether or not csrf-magic should produce XHTML style tags.
+ */
+$GLOBALS['csrf']['xhtml'] = true;
+
+// FUNCTIONS:
+
+// Don't edit this!
+$GLOBALS['csrf']['version'] = '1.0.4';
+
+/**
+ * Rewrites <form> on the fly to add CSRF tokens to them. This can also
+ * inject our JavaScript library.
+ */
+function csrf_ob_handler($buffer, $flags) {
+ // Even though the user told us to rewrite, we should do a quick heuristic
+ // to check if the page is *actually* HTML. We don't begin rewriting until
+ // we hit the first <html tag.
+ static $is_html = false;
+ if (!$is_html) {
+ // not HTML until proven otherwise
+ if (stripos($buffer, '<html') !== false) {
+ $is_html = true;
+ } else {
+ return $buffer;
+ }
+ }
+ $tokens = csrf_get_tokens();
+ $name = $GLOBALS['csrf']['input-name'];
+ $endslash = $GLOBALS['csrf']['xhtml'] ? ' /' : '';
+ $input = "<input type='hidden' name='$name' value=\"$tokens\"$endslash>";
+ $buffer = preg_replace('#(<form[^>]*method\s*=\s*["\']post["\'][^>]*>)#i', '$1' . $input, $buffer);
+ if ($GLOBALS['csrf']['frame-breaker']) {
+ $buffer = str_ireplace('</head>', '<script type="text/javascript">if (top != self) {top.location.href = self.location.href;}</script></head>', $buffer);
+ }
+ if ($js = $GLOBALS['csrf']['rewrite-js']) {
+ $buffer = str_ireplace(
+ '</head>',
+ '<script type="text/javascript">'.
+ 'var csrfMagicToken = "'.$tokens.'";'.
+ 'var csrfMagicName = "'.$name.'";</script>'.
+ '<script src="'.$js.'" type="text/javascript"></script></head>',
+ $buffer
+ );
+ $script = '<script type="text/javascript">CsrfMagic.end();</script>';
+ $buffer = str_ireplace('</body>', $script . '</body>', $buffer, $count);
+ if (!$count) {
+ $buffer .= $script;
+ }
+ }
+ return $buffer;
+}
+
+/**
+ * Checks if this is a post request, and if it is, checks if the nonce is valid.
+ * @param bool $fatal Whether or not to fatally error out if there is a problem.
+ * @return True if check passes or is not necessary, false if failure.
+ */
+function csrf_check($fatal = true) {
+ if ($_SERVER['REQUEST_METHOD'] !== 'POST') return true;
+ csrf_start();
+ $name = $GLOBALS['csrf']['input-name'];
+ $ok = false;
+ $tokens = '';
+ do {
+ if (!isset($_POST[$name])) break;
+ // we don't regenerate a token and check it because some token creation
+ // schemes are volatile.
+ $tokens = $_POST[$name];
+ if (!csrf_check_tokens($tokens)) break;
+ $ok = true;
+ } while (false);
+ if ($fatal && !$ok) {
+ $callback = $GLOBALS['csrf']['callback'];
+ if (trim($tokens, 'A..Za..z0..9:;,') !== '') $tokens = 'hidden';
+ $callback($tokens);
+ exit;
+ }
+ return $ok;
+}
+
+/**
+ * Retrieves a valid token(s) for a particular context. Tokens are separated
+ * by semicolons.
+ */
+function csrf_get_tokens() {
+ $has_cookies = !empty($_COOKIE);
+
+ // $ip implements a composite key, which is sent if the user hasn't sent
+ // any cookies. It may or may not be used, depending on whether or not
+ // the cookies "stick"
+ $secret = csrf_get_secret();
+ if (!$has_cookies && $secret) {
+ // :TODO: Harden this against proxy-spoofing attacks
+ $ip = ';ip:' . csrf_hash($_SERVER['IP_ADDRESS']);
+ } else {
+ $ip = '';
+ }
+ csrf_start();
+
+ // These are "strong" algorithms that don't require per se a secret
+ if (session_id()) return 'sid:' . csrf_hash(session_id()) . $ip;
+ if ($GLOBALS['csrf']['cookie']) {
+ $val = csrf_generate_secret();
+ setcookie($GLOBALS['csrf']['cookie'], $val);
+ return 'cookie:' . csrf_hash($val) . $ip;
+ }
+ if ($GLOBALS['csrf']['key']) return 'key:' . csrf_hash($GLOBALS['csrf']['key']) . $ip;
+ // These further algorithms require a server-side secret
+ if (!$secret) return 'invalid';
+ if ($GLOBALS['csrf']['user'] !== false) {
+ return 'user:' . csrf_hash($GLOBALS['csrf']['user']);
+ }
+ if ($GLOBALS['csrf']['allow-ip']) {
+ return ltrim($ip, ';');
+ }
+ return 'invalid';
+}
+
+function csrf_flattenpost($data) {
+ $ret = array();
+ foreach($data as $n => $v) {
+ $ret = array_merge($ret, csrf_flattenpost2(1, $n, $v));
+ }
+ return $ret;
+}
+function csrf_flattenpost2($level, $key, $data) {
+ if(!is_array($data)) return array($key => $data);
+ $ret = array();
+ foreach($data as $n => $v) {
+ $nk = $level >= 1 ? $key."[$n]" : "[$n]";
+ $ret = array_merge($ret, csrf_flattenpost2($level+1, $nk, $v));
+ }
+ return $ret;
+}
+
+/**
+ * @param $tokens is safe for HTML consumption
+ */
+function csrf_callback($tokens) {
+ // (yes, $tokens is safe to echo without escaping)
+ header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
+ $data = '';
+ foreach (csrf_flattenpost($_POST) as $key => $value) {
+ if ($key == $GLOBALS['csrf']['input-name']) continue;
+ $data .= '<input type="hidden" name="'.htmlspecialchars($key).'" value="'.htmlspecialchars($value).'" />';
+ }
+ echo "<html><head><title>CSRF check failed</title></head>
+ <body>
+ <p>CSRF check failed. Your form session may have expired, or you may not have
+ cookies enabled.</p>
+ <form method='post' action=''>$data<input type='submit' value='Try again' /></form>
+ <p>Debug: $tokens</p></body></html>
+";
+}
+
+/**
+ * Checks if a composite token is valid. Outward facing code should use this
+ * instead of csrf_check_token()
+ */
+function csrf_check_tokens($tokens) {
+ if (is_string($tokens)) $tokens = explode(';', $tokens);
+ foreach ($tokens as $token) {
+ if (csrf_check_token($token)) return true;
+ }
+ return false;
+}
+
+/**
+ * Checks if a token is valid.
+ */
+function csrf_check_token($token) {
+ if (strpos($token, ':') === false) return false;
+ list($type, $value) = explode(':', $token, 2);
+ if (strpos($value, ',') === false) return false;
+ list($x, $time) = explode(',', $token, 2);
+ if ($GLOBALS['csrf']['expires']) {
+ if (time() > $time + $GLOBALS['csrf']['expires']) return false;
+ }
+ switch ($type) {
+ case 'sid':
+ return $value === csrf_hash(session_id(), $time);
+ case 'cookie':
+ $n = $GLOBALS['csrf']['cookie'];
+ if (!$n) return false;
+ if (!isset($_COOKIE[$n])) return false;
+ return $value === csrf_hash($_COOKIE[$n], $time);
+ case 'key':
+ if (!$GLOBALS['csrf']['key']) return false;
+ return $value === csrf_hash($GLOBALS['csrf']['key'], $time);
+ // We could disable these 'weaker' checks if 'key' was set, but
+ // that doesn't make me feel good then about the cookie-based
+ // implementation.
+ case 'user':
+ if (!csrf_get_secret()) return false;
+ if ($GLOBALS['csrf']['user'] === false) return false;
+ return $value === csrf_hash($GLOBALS['csrf']['user'], $time);
+ case 'ip':
+ if (!csrf_get_secret()) return false;
+ // do not allow IP-based checks if the username is set, or if
+ // the browser sent cookies
+ if ($GLOBALS['csrf']['user'] !== false) return false;
+ if (!empty($_COOKIE)) return false;
+ if (!$GLOBALS['csrf']['allow-ip']) return false;
+ return $value === csrf_hash($_SERVER['IP_ADDRESS'], $time);
+ }
+ return false;
+}
+
+/**
+ * Sets a configuration value.
+ */
+function csrf_conf($key, $val) {
+ if (!isset($GLOBALS['csrf'][$key])) {
+ trigger_error('No such configuration ' . $key, E_USER_WARNING);
+ return;
+ }
+ $GLOBALS['csrf'][$key] = $val;
+}
+
+/**
+ * Starts a session if we're allowed to.
+ */
+function csrf_start() {
+ if ($GLOBALS['csrf']['auto-session'] && !session_id()) {
+ session_start();
+ }
+}
+
+/**
+ * Retrieves the secret, and generates one if necessary.
+ */
+function csrf_get_secret() {
+ if ($GLOBALS['csrf']['secret']) return $GLOBALS['csrf']['secret'];
+ $dir = dirname(__FILE__);
+ $file = $dir . '/csrf-secret.php';
+ $secret = '';
+ if (file_exists($file)) {
+ include $file;
+ return $secret;
+ }
+ if (is_writable($dir)) {
+ $secret = csrf_generate_secret();
+ $fh = fopen($file, 'w');
+ fwrite($fh, '<?php $secret = "'.$secret.'";' . PHP_EOL);
+ fclose($fh);
+ return $secret;
+ }
+ return '';
+}
+
+/**
+ * Generates a random string as the hash of time, microtime, and mt_rand.
+ */
+function csrf_generate_secret($len = 32) {
+ $r = '';
+ for ($i = 0; $i < 32; $i++) {
+ $r .= chr(mt_rand(0, 255));
+ }
+ $r .= time() . microtime();
+ return sha1($r);
+}
+
+/**
+ * Generates a hash/expiry double. If time isn't set it will be calculated
+ * from the current time.
+ */
+function csrf_hash($value, $time = null) {
+ if (!$time) $time = time();
+ return sha1(csrf_get_secret() . $value . $time) . ',' . $time;
+}
+
+// Load user configuration
+if (function_exists('csrf_startup')) csrf_startup();
+// Initialize our handler
+if ($GLOBALS['csrf']['rewrite']) ob_start('csrf_ob_handler');
+// Perform check
+if (!$GLOBALS['csrf']['defer']) csrf_check();
diff --git a/src/usr/local/www/css/table.css b/src/usr/local/www/css/table.css
new file mode 100644
index 0000000..3393db3
--- /dev/null
+++ b/src/usr/local/www/css/table.css
@@ -0,0 +1,46 @@
+/* Element CSS Definitions for (MultiRow-)tables
+if theme changes are needed include a table.css in the /themes/yourtheme/ */
+.listMR {
+ background-color: #DDD;
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listMRlr {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listMRr {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listMRodd {
+ background-color: #FFFFFF;
+}
+.listMReven {
+ background-color: #F0F0F0;
+}
+.listMRDescriptionL {
+ border-right: none;
+ border-bottom: 2px solid #999999;
+}
+.listMRDescriptionR {
+ border-left: none;
+ border-bottom: 2px solid #999999;
+}
+.ellipsis {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
diff --git a/src/usr/local/www/diag_arp.php b/src/usr/local/www/diag_arp.php
new file mode 100644
index 0000000..e5615f4
--- /dev/null
+++ b/src/usr/local/www/diag_arp.php
@@ -0,0 +1,365 @@
+<?php
+/*
+ diag_arp.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2004-2009 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp
+ pfSense_MODULE: arp
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-arptable
+##|*NAME=Diagnostics: ARP Table page
+##|*DESCR=Allow access to the 'Diagnostics: ARP Table' page.
+##|*MATCH=diag_arp.php*
+##|-PRIV
+
+@ini_set('zlib.output_compression', 0);
+@ini_set('implicit_flush', 1);
+
+require("guiconfig.inc");
+
+function leasecmp($a, $b) {
+ return strcmp($a[$_GET['order']], $b[$_GET['order']]);
+}
+
+function adjust_gmt($dt) {
+ $ts = strtotime($dt . " GMT");
+ return strftime("%Y/%m/%d %H:%M:%S", $ts);
+}
+
+function remove_duplicate($array, $field) {
+ foreach ($array as $sub) {
+ $cmp[] = $sub[$field];
+ }
+ $unique = array_unique($cmp);
+ foreach ($unique as $k => $rien) {
+ $new[] = $array[$k];
+ }
+ return $new;
+}
+
+// Define path to AWK
+$awk = "/usr/bin/awk";
+
+// Read in leases file
+$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases";
+
+/* this pattern sticks comments into a single array item */
+$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'";
+
+/* We then split the leases file by } */
+$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
+
+/* stuff the leases file in a proper format into an array by line */
+exec("cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
+$leases_count = count($leases_content);
+
+$pools = array();
+$leases = array();
+$i = 0;
+$l = 0;
+$p = 0;
+// Put everything together again
+while ($i < $leases_count) {
+ /* split the line by space */
+ $data = explode(" ", $leases_content[$i]);
+ /* walk the fields */
+ $f = 0;
+ $fcount = count($data);
+ /* with less then 20 fields there is nothing useful */
+ if ($fcount < 20) {
+ $i++;
+ continue;
+ }
+ while ($f < $fcount) {
+ switch ($data[$f]) {
+ case "failover":
+ $pools[$p]['name'] = $data[$f+2];
+ $pools[$p]['mystate'] = $data[$f+7];
+ $pools[$p]['peerstate'] = $data[$f+14];
+ $pools[$p]['mydate'] = $data[$f+10];
+ $pools[$p]['mydate'] .= " " . $data[$f+11];
+ $pools[$p]['peerdate'] = $data[$f+17];
+ $pools[$p]['peerdate'] .= " " . $data[$f+18];
+ $p++;
+ $i++;
+ continue 3;
+ case "lease":
+ $leases[$l]['ip'] = $data[$f+1];
+ $leases[$l]['type'] = "dynamic";
+ $f = $f+2;
+ break;
+ case "starts":
+ $leases[$l]['start'] = $data[$f+2];
+ $leases[$l]['start'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "ends":
+ $leases[$l]['end'] = $data[$f+2];
+ $leases[$l]['end'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "tstp":
+ $f = $f+3;
+ break;
+ case "tsfp":
+ $f = $f+3;
+ break;
+ case "atsfp":
+ $f = $f+3;
+ break;
+ case "cltt":
+ $f = $f+3;
+ break;
+ case "binding":
+ switch ($data[$f+2]) {
+ case "active":
+ $leases[$l]['act'] = "active";
+ break;
+ case "free":
+ $leases[$l]['act'] = "expired";
+ $leases[$l]['online'] = "offline";
+ break;
+ case "backup":
+ $leases[$l]['act'] = "reserved";
+ $leases[$l]['online'] = "offline";
+ break;
+ }
+ $f = $f+1;
+ break;
+ case "next":
+ /* skip the next binding statement */
+ $f = $f+3;
+ break;
+ case "rewind":
+ /* skip the rewind binding statement */
+ $f = $f+3;
+ break;
+ case "hardware":
+ $leases[$l]['mac'] = $data[$f+2];
+ /* check if it's online and the lease is active */
+ if ($leases[$l]['act'] == "active") {
+ $online = exec("/usr/sbin/arp -an |/usr/bin/awk '/{$leases[$l]['ip']}/ {print}'|wc -l");
+ if ($online == 1) {
+ $leases[$l]['online'] = 'online';
+ } else {
+ $leases[$l]['online'] = 'offline';
+ }
+ }
+ $f = $f+2;
+ break;
+ case "client-hostname":
+ if ($data[$f+1] <> "") {
+ $leases[$l]['hostname'] = preg_replace('/"/', '', $data[$f+1]);
+ } else {
+ $hostname = gethostbyaddr($leases[$l]['ip']);
+ if ($hostname <> "") {
+ $leases[$l]['hostname'] = $hostname;
+ }
+ }
+ $f = $f+1;
+ break;
+ case "uid":
+ $f = $f+1;
+ break;
+ }
+ $f++;
+ }
+ $l++;
+ $i++;
+}
+
+/* remove duplicate items by mac address */
+if (count($leases) > 0) {
+ $leases = remove_duplicate($leases, "ip");
+}
+
+if (count($pools) > 0) {
+ $pools = remove_duplicate($pools, "name");
+ asort($pools);
+}
+
+// Put this in an easy to use form
+$dhcpmac = array();
+$dhcpip = array();
+
+foreach ($leases as $value) {
+ $dhcpmac[$value['mac']] = $value['hostname'];
+ $dhcpip[$value['ip']] = $value['hostname'];
+}
+
+exec("/usr/sbin/arp -an", $rawdata);
+
+$i = 0;
+
+/* if list */
+$ifdescrs = get_configured_interface_with_descr();
+
+foreach ($ifdescrs as $key => $interface) {
+ $thisif = convert_friendly_interface_to_real_interface_name($key);
+ if (!empty($thisif)) {
+ $hwif[$thisif] = $interface;
+ }
+}
+
+$data = array();
+foreach ($rawdata as $line) {
+ $elements = explode(' ', $line);
+
+ if ($elements[3] != "(incomplete)") {
+ $arpent = array();
+ $arpent['ip'] = trim(str_replace(array('(', ')'), '', $elements[1]));
+ $arpent['mac'] = trim($elements[3]);
+ $arpent['interface'] = trim($elements[5]);
+ $data[] = $arpent;
+ }
+}
+
+function _getHostName($mac, $ip) {
+ global $dhcpmac, $dhcpip;
+
+ if ($dhcpmac[$mac]) {
+ return $dhcpmac[$mac];
+ } else if ($dhcpip[$ip]) {
+ return $dhcpip[$ip];
+ } else {
+ exec("host -W 1 " . escapeshellarg($ip), $output);
+ if (preg_match('/.*pointer ([A-Za-z_0-9.-]+)\..*/', $output[0], $matches)) {
+ if ($matches[1] <> $ip) {
+ return $matches[1];
+ }
+ }
+ }
+ return "";
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("ARP Table"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<div id="loading">
+ <img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /><?= gettext("Loading, please wait..."); ?>
+ <p>&nbsp;</p>
+</div>
+
+<?php
+
+// Flush buffers out to client so that they see Loading, please wait....
+for ($i = 0; $i < ob_get_level(); $i++) {
+ ob_end_flush();
+}
+ob_implicit_flush(1);
+
+// Resolve hostnames and replace Z_ with "". The intention
+// is to sort the list by hostnames, alpha and then the non
+// resolvable addresses will appear last in the list.
+$dnsavailable=1;
+$dns = trim(_getHostName("", "8.8.8.8"));
+if ($dns == "") {
+ $dns = trim(_getHostName("", "8.8.4.4"));
+ if ($dns == "") {
+ $dnsavailable = 0;
+ }
+}
+
+foreach ($data as &$entry) {
+ if ($dnsavailable) {
+ $dns = trim(_getHostName($entry['mac'], $entry['ip']));
+ } else {
+ $dns="";
+ }
+ if (trim($dns)) {
+ $entry['dnsresolve'] = "$dns";
+ } else {
+ $entry['dnsresolve'] = "Z_ ";
+ }
+}
+
+// Sort the data alpha first
+$data = msort($data, "dnsresolve");
+
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag arp">
+ <tr>
+ <td>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcont">
+ <tr>
+ <td class="listhdrr"><?= gettext("IP address"); ?></td>
+ <td class="listhdrr"><?= gettext("MAC address"); ?></td>
+ <td class="listhdrr"><?= gettext("Hostname"); ?></td>
+ <td class="listhdr"><?= gettext("Interface"); ?></td>
+ <td class="list"></td>
+ </tr>
+ <?php foreach ($data as $entry): ?>
+ <tr>
+ <td class="listlr"><?=$entry['ip'];?></td>
+ <td class="listr">
+ <?php
+ $mac=trim($entry['mac']);
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ print $mac;
+ if (isset($mac_man[$mac_hi])) { print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>"; }
+ ?>
+ </td>
+ <td class="listr">
+ <?php
+ echo trim(str_replace("Z_ ", "", $entry['dnsresolve']));
+ ?>
+ </td>
+ <td class="listr"><?=$hwif[$entry['interface']];?></td>
+ </tr>
+ <?php endforeach; ?>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td><br /><?= gettext("NOTE: Local IPv6 peers use") ?> <a href="diag_ndp.php"><?= gettext("NDP") ?></a> <?= gettext("instead of ARP") ?>.</td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ jQuery('#loading').html('');
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_authentication.php b/src/usr/local/www/diag_authentication.php
new file mode 100644
index 0000000..d0b81d5
--- /dev/null
+++ b/src/usr/local/www/diag_authentication.php
@@ -0,0 +1,138 @@
+<?php
+/*
+ diag_authentication.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-authentication
+##|*NAME=Diagnostics: Authentication page
+##|*DESCR=Allow access to the 'Diagnostics: Authentication' page.
+##|*MATCH=diag_authentication.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("PEAR.inc");
+require_once("radius.inc");
+
+if ($_POST) {
+ $pconfig = $_POST;
+ unset($input_errors);
+
+ $authcfg = auth_get_authserver($_POST['authmode']);
+ if (!$authcfg) {
+ $input_errors[] = $_POST['authmode'] . " " . gettext("is not a valid authentication server");
+ }
+
+ if (empty($_POST['username']) || empty($_POST['passwordfld'])) {
+ $input_errors[] = gettext("A username and password must be specified.");
+ }
+
+ if (!$input_errors) {
+ $attributes = array();
+ if (authenticate_user($_POST['username'], $_POST['passwordfld'], $authcfg, $attributes)) {
+ $savemsg = gettext("User") . ": " . $_POST['username'] . " " . gettext("authenticated successfully.");
+ $groups = getUserGroups($_POST['username'], $authcfg, $attributes);
+ $savemsg .= "<br />" . gettext("This user is a member of these groups") . ": <br />";
+ foreach ($groups as $group) {
+ $savemsg .= "{$group} ";
+ }
+ } else {
+ $input_errors[] = gettext("Authentication failed.");
+ }
+ }
+}
+$pgtitle = array(gettext("Diagnostics"), gettext("Authentication"));
+$shortcut_section = "authentication";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag authentication">
+ <tr>
+ <td class="tabnavtbl"></td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <form id="iform" name="iform" action="diag_authentication.php" method="post">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="test">
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Server"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="authmode" id="authmode" class="formselect" >
+ <?php
+ $auth_servers = auth_get_authserver_list();
+ foreach ($auth_servers as $auth_server):
+ $selected = "";
+ if ($auth_server['name'] == $pconfig['authmode']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$auth_server['name'];?>" <?=$selected;?>><?=$auth_server['name'];?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input class="formfld unknown" size="20" id="username" name="username" value="<?=htmlspecialchars($pconfig['username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input class="formfld pwd" type="password" size="20" id="passwordfld" name="passwordfld" value="<?=htmlspecialchars($pconfig['passwordfld']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="save" name="save" type="submit" class="formbtn" value="<?=gettext("Test");?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_backup.php b/src/usr/local/www/diag_backup.php
new file mode 100644
index 0000000..6e454a4
--- /dev/null
+++ b/src/usr/local/www/diag_backup.php
@@ -0,0 +1,818 @@
+<?php
+/* $Id$ */
+/*
+ diag_backup.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/shutdown
+ pfSense_MODULE: backup
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-backup/restore
+##|*NAME=Diagnostics: Backup/restore page
+##|*DESCR=Allow access to the 'Diagnostics: Backup/restore' page.
+##|*MATCH=diag_backup.php*
+##|-PRIV
+
+/* Allow additional execution time 0 = no limit. */
+ini_set('max_execution_time', '0');
+ini_set('max_input_time', '0');
+
+/* omit no-cache headers because it confuses IE with file downloads */
+$omit_nocacheheaders = true;
+$nocsrf = true;
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$rrddbpath = "/var/db/rrd";
+$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
+
+function rrd_data_xml() {
+ global $rrddbpath;
+ global $rrdtool;
+
+ $result = "\t<rrddata>\n";
+ $rrd_files = glob("{$rrddbpath}/*.rrd");
+ $xml_files = array();
+ foreach ($rrd_files as $rrd_file) {
+ $basename = basename($rrd_file);
+ $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
+ exec("$rrdtool dump '{$rrd_file}' '{$xml_file}'");
+ $xml_data = file_get_contents($xml_file);
+ unlink($xml_file);
+ if ($xml_data !== false) {
+ $result .= "\t\t<rrddatafile>\n";
+ $result .= "\t\t\t<filename>{$basename}</filename>\n";
+ $result .= "\t\t\t<xmldata>" . base64_encode(gzdeflate($xml_data)) . "</xmldata>\n";
+ $result .= "\t\t</rrddatafile>\n";
+ }
+ }
+ $result .= "\t</rrddata>\n";
+ return $result;
+}
+
+function restore_rrddata() {
+ global $config, $g, $rrdtool, $input_errors;
+ foreach ($config['rrddata']['rrddatafile'] as $rrd) {
+ if ($rrd['xmldata']) {
+ $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}";
+ $xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
+ if (file_put_contents($xml_file, gzinflate(base64_decode($rrd['xmldata']))) === false) {
+ log_error("Cannot write $xml_file");
+ continue;
+ }
+ $output = array();
+ $status = null;
+ exec("$rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status);
+ if ($status) {
+ log_error("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}.");
+ continue;
+ }
+ unlink($xml_file);
+ } else if ($rrd['data']) {
+ $rrd_file = "{$g['vardb_path']}/rrd/{$rrd['filename']}";
+ $rrd_fd = fopen($rrd_file, "w");
+ if (!$rrd_fd) {
+ log_error("Cannot write $rrd_file");
+ continue;
+ }
+ $data = base64_decode($rrd['data']);
+ /* Try to decompress the data. */
+ $dcomp = @gzinflate($data);
+ if ($dcomp) {
+ /* If the decompression worked, write the decompressed data */
+ if (fwrite($rrd_fd, $dcomp) === false) {
+ log_error("fwrite $rrd_file failed");
+ continue;
+ }
+ } else {
+ /* If the decompression failed, it wasn't compressed, so write raw data */
+ if (fwrite($rrd_fd, $data) === false) {
+ log_error("fwrite $rrd_file failed");
+ continue;
+ }
+ }
+ if (fclose($rrd_fd) === false) {
+ log_error("fclose $rrd_file failed");
+ continue;
+ }
+ }
+ }
+}
+
+function add_base_packages_menu_items() {
+ global $g, $config;
+ $base_packages = explode(",", $g['base_packages']);
+ $modified_config = false;
+ foreach ($base_packages as $bp) {
+ $basepkg_path = "/usr/local/pkg/{$bp}";
+ $tmpinfo = pathinfo($basepkg_path, PATHINFO_EXTENSION);
+ if ($tmpinfo['extension'] == "xml" && file_exists($basepkg_path)) {
+ $pkg_config = parse_xml_config_pkg($basepkg_path, "packagegui");
+ if ($pkg_config['menu'] != "") {
+ if (is_array($pkg_config['menu'])) {
+ foreach ($pkg_config['menu'] as $menu) {
+ if (is_array($config['installedpackages']['menu'])) {
+ foreach ($config['installedpackages']['menu'] as $amenu) {
+ if ($amenu['name'] == $menu['name']) {
+ continue;
+ }
+ }
+ }
+ $config['installedpackages']['menu'][] = $menu;
+ $modified_config = true;
+ }
+ }
+ $static_output .= "done.\n";
+ update_output_window($static_output);
+ }
+ }
+ }
+ if ($modified_config) {
+ write_config(gettext("Restored base_package menus after configuration restore."));
+ $config = parse_config(true);
+ }
+}
+
+function remove_bad_chars($string) {
+ return preg_replace('/[^a-z_0-9]/i', '', $string);
+}
+
+function check_and_returnif_section_exists($section) {
+ global $config;
+ if (is_array($config[$section])) {
+ return true;
+ }
+ return false;
+}
+
+function spit_out_select_items($name, $showall) {
+ global $config;
+
+ $areas = array("aliases" => gettext("Aliases"),
+ "captiveportal" => gettext("Captive Portal"),
+ "voucher" => gettext("Captive Portal Vouchers"),
+ "dnsmasq" => gettext("DNS Forwarder"),
+ "unbound" => gettext("DNS Resolver"),
+ "dhcpd" => gettext("DHCP Server"),
+ "dhcpdv6" => gettext("DHCPv6 Server"),
+ "filter" => gettext("Firewall Rules"),
+ "interfaces" => gettext("Interfaces"),
+ "ipsec" => gettext("IPSEC"),
+ "nat" => gettext("NAT"),
+ "openvpn" => gettext("OpenVPN"),
+ "installedpackages" => gettext("Package Manager"),
+ "pptpd" => gettext("PPTP Server"),
+ "rrddata" => gettext("RRD Data"),
+ "cron" => gettext("Scheduled Tasks"),
+ "syslog" => gettext("Syslog"),
+ "system" => gettext("System"),
+ "staticroutes" => gettext("Static routes"),
+ "sysctl" => gettext("System tunables"),
+ "snmpd" => gettext("SNMP Server"),
+ "shaper" => gettext("Traffic Shaper"),
+ "vlans" => gettext("VLANS"),
+ "wol" => gettext("Wake on LAN")
+ );
+
+ $select = "<select name=\"{$name}\" id=\"{$name}\">";
+ $select .= "<option value=\"\">" . gettext("ALL") . "</option>";
+
+ if ($showall == true) {
+ foreach ($areas as $area => $areaname) {
+ $select .= "<option value=\"{$area}\">{$areaname}</option>\n";
+ }
+ } else {
+ foreach ($areas as $area => $areaname) {
+ if ($area === "rrddata" || check_and_returnif_section_exists($area) == true) {
+ $select .= "<option value=\"{$area}\">{$areaname}</option>\n";
+ }
+ }
+ }
+
+ $select .= "</select>\n";
+
+ if ($name === "backuparea") {
+ $select .= <<<END_SCRIPT_BLOCK
+ <script type="text/javascript">
+ //<![CDATA[
+ jQuery(function (\$) {
+ $("#{$name}").change(function () {
+ backuparea_change(this);
+ }).trigger("change");
+ });
+ //]]>
+ </script>
+END_SCRIPT_BLOCK;
+ }
+
+ echo $select;
+
+}
+
+if ($_POST['apply']) {
+ ob_flush();
+ flush();
+ conf_mount_rw();
+ clear_subsystem_dirty("restore");
+ conf_mount_ro();
+ exit;
+}
+
+if ($_POST) {
+ unset($input_errors);
+ if (stristr($_POST['Submit'], gettext("Restore configuration"))) {
+ $mode = "restore";
+ } else if (stristr($_POST['Submit'], gettext("Reinstall"))) {
+ $mode = "reinstallpackages";
+ } else if (stristr($_POST['Submit'], gettext("Clear Package Lock"))) {
+ $mode = "clearpackagelock";
+ } else if (stristr($_POST['Submit'], gettext("Download"))) {
+ $mode = "download";
+ } else if (stristr($_POST['Submit'], gettext("Restore version"))) {
+ $mode = "restore_ver";
+ }
+ if ($_POST["nopackages"] <> "") {
+ $options = "nopackages";
+ }
+ if ($_POST["ver"] <> "") {
+ $ver2restore = $_POST["ver"];
+ }
+ if ($mode) {
+ if ($mode == "download") {
+ if ($_POST['encrypt']) {
+ if (!$_POST['encrypt_password'] || !$_POST['encrypt_passconf']) {
+ $input_errors[] = gettext("You must supply and confirm the password for encryption.");
+ }
+ if ($_POST['encrypt_password'] != $_POST['encrypt_passconf']) {
+ $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
+ }
+ }
+
+ if (!$input_errors) {
+
+ //$lockbckp = lock('config');
+
+ $host = "{$config['system']['hostname']}.{$config['system']['domain']}";
+ $name = "config-{$host}-".date("YmdHis").".xml";
+ $data = "";
+
+ if ($options == "nopackages") {
+ if (!$_POST['backuparea']) {
+ /* backup entire configuration */
+ $data = file_get_contents("{$g['conf_path']}/config.xml");
+ } else {
+ /* backup specific area of configuration */
+ $data = backup_config_section($_POST['backuparea']);
+ $name = "{$_POST['backuparea']}-{$name}";
+ }
+ $sfn = "{$g['tmp_path']}/config.xml.nopkg";
+ file_put_contents($sfn, $data);
+ exec("sed '/<installedpackages>/,/<\/installedpackages>/d' {$sfn} > {$sfn}-new");
+ $data = file_get_contents($sfn . "-new");
+ } else {
+ if (!$_POST['backuparea']) {
+ /* backup entire configuration */
+ $data = file_get_contents("{$g['conf_path']}/config.xml");
+ } else if ($_POST['backuparea'] === "rrddata") {
+ $data = rrd_data_xml();
+ $name = "{$_POST['backuparea']}-{$name}";
+ } else {
+ /* backup specific area of configuration */
+ $data = backup_config_section($_POST['backuparea']);
+ $name = "{$_POST['backuparea']}-{$name}";
+ }
+ }
+
+ //unlock($lockbckp);
+
+ /*
+ * Backup RRD Data
+ */
+ if ($_POST['backuparea'] !== "rrddata" && !$_POST['donotbackuprrd']) {
+ $rrd_data_xml = rrd_data_xml();
+ $closing_tag = "</" . $g['xml_rootobj'] . ">";
+ $data = str_replace($closing_tag, $rrd_data_xml . $closing_tag, $data);
+ }
+
+ if ($_POST['encrypt']) {
+ $data = encrypt_data($data, $_POST['encrypt_password']);
+ tagfile_reformat($data, $data, "config.xml");
+ }
+
+ $size = strlen($data);
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$name}");
+ header("Content-Length: $size");
+ if (isset($_SERVER['HTTPS'])) {
+ header('Pragma: ');
+ header('Cache-Control: ');
+ } else {
+ header("Pragma: private");
+ header("Cache-Control: private, must-revalidate");
+ }
+ echo $data;
+
+ exit;
+ }
+ }
+
+ if ($mode == "restore") {
+ if ($_POST['decrypt']) {
+ if (!$_POST['decrypt_password'] || !$_POST['decrypt_passconf']) {
+ $input_errors[] = gettext("You must supply and confirm the password for decryption.");
+ }
+ if ($_POST['decrypt_password'] != $_POST['decrypt_passconf']) {
+ $input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
+ }
+ }
+
+ if (!$input_errors) {
+ if (is_uploaded_file($_FILES['conffile']['tmp_name'])) {
+
+ /* read the file contents */
+ $data = file_get_contents($_FILES['conffile']['tmp_name']);
+ if (!$data) {
+ log_error(sprintf(gettext("Warning, could not read file %s"), $_FILES['conffile']['tmp_name']));
+ return 1;
+ }
+
+ if ($_POST['decrypt']) {
+ if (!tagfile_deformat($data, $data, "config.xml")) {
+ $input_errors[] = gettext("The uploaded file does not appear to contain an encrypted pfsense configuration.");
+ return 1;
+ }
+ $data = decrypt_data($data, $_POST['decrypt_password']);
+ }
+
+ if (stristr($data, "<m0n0wall>")) {
+ log_error(gettext("Upgrading m0n0wall configuration to pfsense."));
+ /* m0n0wall was found in config. convert it. */
+ $data = str_replace("m0n0wall", "pfsense", $data);
+ $m0n0wall_upgrade = true;
+ }
+ if ($_POST['restorearea']) {
+ /* restore a specific area of the configuration */
+ if (!stristr($data, "<" . $_POST['restorearea'] . ">")) {
+ $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag.");
+ } else {
+ if (!restore_config_section($_POST['restorearea'], $data)) {
+ $input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag.");
+ } else {
+ if ($config['rrddata']) {
+ restore_rrddata();
+ unset($config['rrddata']);
+ unlink_if_exists("{$g['tmp_path']}/config.cache");
+ write_config();
+ add_base_packages_menu_items();
+ convert_config();
+ conf_mount_ro();
+ }
+ filter_configure();
+ $savemsg = gettext("The configuration area has been restored. You may need to reboot the firewall.");
+ }
+ }
+ } else {
+ if (!stristr($data, "<" . $g['xml_rootobj'] . ">")) {
+ $input_errors[] = sprintf(gettext("You have selected to restore the full configuration but we could not locate a %s tag."), $g['xml_rootobj']);
+ } else {
+ /* restore the entire configuration */
+ file_put_contents($_FILES['conffile']['tmp_name'], $data);
+ if (config_install($_FILES['conffile']['tmp_name']) == 0) {
+ /* this will be picked up by /index.php */
+ conf_mount_rw();
+ mark_subsystem_dirty("restore");
+ touch("/conf/needs_package_sync");
+ /* remove cache, we will force a config reboot */
+ if (file_exists("{$g['tmp_path']}/config.cache")) {
+ unlink("{$g['tmp_path']}/config.cache");
+ }
+ $config = parse_config(true);
+ if (file_exists("/boot/loader.conf")) {
+ $loaderconf = file_get_contents("/boot/loader.conf");
+ if (strpos($loaderconf, "console=\"comconsole")) {
+ $config['system']['enableserial'] = true;
+ write_config("Restore serial console enabling in configuration.");
+ }
+ unset($loaderconf);
+ }
+ /* extract out rrd items, unset from $config when done */
+ if ($config['rrddata']) {
+ restore_rrddata();
+ unset($config['rrddata']);
+ unlink_if_exists("{$g['tmp_path']}/config.cache");
+ write_config();
+ add_base_packages_menu_items();
+ convert_config();
+ conf_mount_ro();
+ }
+ if ($m0n0wall_upgrade == true) {
+ if ($config['system']['gateway'] <> "") {
+ $config['interfaces']['wan']['gateway'] = $config['system']['gateway'];
+ }
+ unset($config['shaper']);
+ /* optional if list */
+ $ifdescrs = get_configured_interface_list(true, true);
+ /* remove special characters from interface descriptions */
+ if (is_array($ifdescrs)) {
+ foreach ($ifdescrs as $iface) {
+ $config['interfaces'][$iface]['descr'] = remove_bad_chars($config['interfaces'][$iface]['descr']);
+ }
+ }
+ /* check for interface names with an alias */
+ if (is_array($ifdescrs)) {
+ foreach ($ifdescrs as $iface) {
+ if (is_alias($config['interfaces'][$iface]['descr'])) {
+ // Firewall rules
+ $origname = $config['interfaces'][$iface]['descr'];
+ $newname = $config['interfaces'][$iface]['descr'] . "Alias";
+ update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $newname, $origname);
+ update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $newname, $origname);
+ // NAT Rules
+ update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $newname, $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $newname, $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('target'), $newname, $origname);
+ // Alias in an alias
+ update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $newname, $origname);
+ }
+ }
+ }
+ unlink_if_exists("{$g['tmp_path']}/config.cache");
+ // Reset configuration version to something low
+ // in order to force the config upgrade code to
+ // run through with all steps that are required.
+ $config['system']['version'] = "1.0";
+ // Deal with descriptions longer than 63 characters
+ for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
+ if (count($config['filter']['rule'][$i]['descr']) > 63) {
+ $config['filter']['rule'][$i]['descr'] = substr($config['filter']['rule'][$i]['descr'], 0, 63);
+ }
+ }
+ // Move interface from ipsec to enc0
+ for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
+ if ($config['filter']['rule'][$i]['interface'] == "ipsec") {
+ $config['filter']['rule'][$i]['interface'] = "enc0";
+ }
+ }
+ // Convert icmp types
+ // http://www.openbsd.org/cgi-bin/man.cgi?query=icmp&sektion=4&arch=i386&apropos=0&manpath=OpenBSD+Current
+ for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
+ if ($config["filter"]["rule"][$i]['icmptype']) {
+ switch ($config["filter"]["rule"][$i]['icmptype']) {
+ case "echo":
+ $config["filter"]["rule"][$i]['icmptype'] = "echoreq";
+ break;
+ case "unreach":
+ $config["filter"]["rule"][$i]['icmptype'] = "unreach";
+ break;
+ case "echorep":
+ $config["filter"]["rule"][$i]['icmptype'] = "echorep";
+ break;
+ case "squench":
+ $config["filter"]["rule"][$i]['icmptype'] = "squench";
+ break;
+ case "redir":
+ $config["filter"]["rule"][$i]['icmptype'] = "redir";
+ break;
+ case "timex":
+ $config["filter"]["rule"][$i]['icmptype'] = "timex";
+ break;
+ case "paramprob":
+ $config["filter"]["rule"][$i]['icmptype'] = "paramprob";
+ break;
+ case "timest":
+ $config["filter"]["rule"][$i]['icmptype'] = "timereq";
+ break;
+ case "timestrep":
+ $config["filter"]["rule"][$i]['icmptype'] = "timerep";
+ break;
+ case "inforeq":
+ $config["filter"]["rule"][$i]['icmptype'] = "inforeq";
+ break;
+ case "inforep":
+ $config["filter"]["rule"][$i]['icmptype'] = "inforep";
+ break;
+ case "maskreq":
+ $config["filter"]["rule"][$i]['icmptype'] = "maskreq";
+ break;
+ case "maskrep":
+ $config["filter"]["rule"][$i]['icmptype'] = "maskrep";
+ break;
+ }
+ }
+ }
+ $config['diag']['ipv6nat'] = true;
+ write_config();
+ add_base_packages_menu_items();
+ convert_config();
+ conf_mount_ro();
+ $savemsg = gettext("The m0n0wall configuration has been restored and upgraded to pfSense.");
+ mark_subsystem_dirty("restore");
+ }
+ if (is_array($config['captiveportal'])) {
+ foreach ($config['captiveportal'] as $cp) {
+ if (isset($cp['enable'])) {
+ /* for some reason ipfw doesn't init correctly except on bootup sequence */
+ mark_subsystem_dirty("restore");
+ break;
+ }
+ }
+ }
+ setup_serial_port();
+ if (is_interface_mismatch() == true) {
+ touch("/var/run/interface_mismatch_reboot_needed");
+ clear_subsystem_dirty("restore");
+ convert_config();
+ header("Location: interfaces_assign.php");
+ exit;
+ }
+ if (is_interface_vlan_mismatch() == true) {
+ touch("/var/run/interface_mismatch_reboot_needed");
+ clear_subsystem_dirty("restore");
+ convert_config();
+ header("Location: interfaces_assign.php");
+ exit;
+ }
+ } else {
+ $input_errors[] = gettext("The configuration could not be restored.");
+ }
+ }
+ }
+ } else {
+ $input_errors[] = gettext("The configuration could not be restored (file upload error).");
+ }
+ }
+ }
+
+ if ($mode == "reinstallpackages") {
+ header("Location: pkg_mgr_install.php?mode=reinstallall");
+ exit;
+ } else if ($mode == "clearpackagelock") {
+ clear_subsystem_dirty('packagelock');
+ $savemsg = "Package Lock Cleared";
+ } else if ($mode == "restore_ver") {
+ $input_errors[] = gettext("XXX - this feature may hose your config (do NOT backrev configs!) - billm");
+ if ($ver2restore <> "") {
+ $conf_file = "{$g['cf_conf_path']}/bak/config-" . strtotime($ver2restore) . ".xml";
+ if (config_install($conf_file) == 0) {
+ mark_subsystem_dirty("restore");
+ } else {
+ $input_errors[] = gettext("The configuration could not be restored.");
+ }
+ } else {
+ $input_errors[] = gettext("No version selected.");
+ }
+ }
+ }
+}
+
+$id = rand() . '.' . time();
+
+$mth = ini_get('upload_progress_meter.store_method');
+$dir = ini_get('upload_progress_meter.file.filename_template');
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Backup/restore"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function encrypt_change() {
+
+ if (!document.iform.encrypt.checked) {
+ document.getElementById("encrypt_opts").style.display="none";
+ } else {
+ document.getElementById("encrypt_opts").style.display="";
+ }
+}
+
+function decrypt_change() {
+
+ if (!document.iform.decrypt.checked) {
+ document.getElementById("decrypt_opts").style.display="none";
+ } else {
+ document.getElementById("decrypt_opts").style.display="";
+ }
+}
+
+function backuparea_change(obj) {
+ if (obj.value == "rrddata") {
+ document.getElementById("nopackages").disabled = true;
+ document.getElementById("dotnotbackuprrd").disabled = true;
+ } else {
+ document.getElementById("nopackages").disabled = false;
+ document.getElementById("dotnotbackuprrd").disabled = false;
+ }
+}
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('restore')): ?><br/>
+<form action="reboot.php" method="post">
+<input name="Submit" type="hidden" value="Yes" />
+<?php print_info_box(gettext("The firewall configuration has been changed.") . "<br />" . gettext("The firewall is now rebooting."));?><br />
+</form>
+<?php endif; ?>
+<form action="diag_backup.php" method="post" name="iform" enctype="multipart/form-data">
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="diag backup">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Config History"), false, "diag_confbak.php");
+ $tab_array[1] = array(gettext("Backup/Restore"), true, "diag_backup.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Backup configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <p><?=gettext("Click this button to download the system configuration in XML format."); ?><br /><br /> <?=gettext("Backup area:"); ?> <?php spit_out_select_items("backuparea", false); ?></p>
+ <table>
+ <tr>
+ <td>
+ <input name="nopackages" type="checkbox" class="formcheckbox" id="nopackages" />
+ </td>
+ <td>
+ <span class="vexpl"><?=gettext("Do not backup package information."); ?></span>
+ </td>
+ </tr>
+ </table>
+ <table>
+ <tr>
+ <td>
+ <input name="encrypt" type="checkbox" class="formcheckbox" id="nopackages" onclick="encrypt_change()" />
+ </td>
+ <td>
+ <span class="vexpl"><?=gettext("Encrypt this configuration file."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="donotbackuprrd" type="checkbox" class="formcheckbox" id="dotnotbackuprrd" checked="checked" />
+ </td>
+ <td>
+ <span class="vexpl"><?=gettext("Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config.xml space!)"); ?></span>
+ </td>
+ </tr>
+ </table>
+ <table id="encrypt_opts">
+ <tr>
+ <td>
+ <span class="vexpl"><?=gettext("Password:"); ?> </span>
+ </td>
+ <td>
+ <input name="encrypt_password" type="password" class="formfld pwd" size="20" value="" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl"><?=gettext("confirm:"); ?> </span>
+ </td>
+ <td>
+ <input name="encrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
+ </td>
+ </tr>
+ </table>
+ <p><input name="Submit" type="submit" class="formbtn" id="download" value="<?=gettext("Download configuration"); ?>" /></p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Restore configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <?=gettext("Open a"); ?> <?=$g['[product_name']?> <?=gettext("configuration XML file and click the button below to restore the configuration."); ?>
+ <br /><br />
+ <?=gettext("Restore area:"); ?> <?php spit_out_select_items("restorearea", true); ?>
+ <p><input name="conffile" type="file" class="formbtn" id="conffile" size="40" /></p>
+ <table>
+ <tr>
+ <td>
+ <input name="decrypt" type="checkbox" class="formcheckbox" id="nopackages" onclick="decrypt_change()" />
+ </td>
+ <td>
+ <span class="vexpl"><?=gettext("Configuration file is encrypted."); ?></span>
+ </td>
+ </tr>
+ </table>
+ <table id="decrypt_opts">
+ <tr>
+ <td>
+ <span class="vexpl"><?=gettext("Password :"); ?></span>
+ </td>
+ <td>
+ <input name="decrypt_password" type="password" class="formfld pwd" size="20" value="" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl"><?=gettext("confirm :"); ?></span>
+ </td>
+ <td>
+ <input name="decrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
+ </td>
+ </tr>
+ </table>
+ <p><input name="Submit" type="submit" class="formbtn" id="restore" value="<?=gettext("Restore configuration"); ?>" /></p>
+ <p><strong><span class="red"><?=gettext("Note:"); ?></span></strong><br /><?=gettext("The firewall will reboot after restoring the configuration."); ?><br /></p>
+ </td>
+ </tr>
+ <?php if (($config['installedpackages']['package'] != "") || (is_subsystem_dirty("packagelock"))) { ?>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Package Functions"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <?php if ($config['installedpackages']['package'] != "") { ?>
+ <p><?=gettext("Click this button to reinstall all system packages. This may take a while."); ?> <br /><br />
+ <input name="Submit" type="submit" class="formbtn" id="reinstallpackages" value="<?=gettext("Reinstall packages"); ?>" />
+ <br />
+ <br />
+ <?php } ?>
+ <?php if (is_subsystem_dirty("packagelock")) { ?>
+ <p><?=gettext("Click this button to clear the package lock if a package fails to reinstall properly after an upgrade."); ?> <br /><br />
+ <input name="Submit" type="submit" class="formbtn" id="clearpackagelock" value="<?=gettext("Clear Package Lock"); ?>" />
+ <?php } ?>
+ </p>
+ </td>
+ </tr>
+ <?php } ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+encrypt_change();
+decrypt_change();
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
+<?php
+
+if (is_subsystem_dirty('restore')) {
+ system_reboot();
+}
+
+?>
diff --git a/src/usr/local/www/diag_confbak.php b/src/usr/local/www/diag_confbak.php
new file mode 100644
index 0000000..cc1da99
--- /dev/null
+++ b/src/usr/local/www/diag_confbak.php
@@ -0,0 +1,301 @@
+<?php
+/* $Id$ */
+/*
+ diag_confbak.php
+ Copyright (C) 2005 Colin Smith
+ Copyright (C) 2010 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: config
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-configurationhistory
+##|*NAME=Diagnostics: Configuration History page
+##|*DESCR=Allow access to the 'Diagnostics: Configuration History' page.
+##|*MATCH=diag_confbak.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['backupcount'])) {
+ if (is_numeric($_POST['backupcount']) && ($_POST['backupcount'] >= 0)) {
+ $config['system']['backupcount'] = $_POST['backupcount'];
+ $changedescr = $config['system']['backupcount'];
+ } else {
+ unset($config['system']['backupcount']);
+ $changedescr = "(platform default)";
+ }
+ write_config("Changed backup revision count to {$changedescr}");
+} elseif ($_POST) {
+ if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm")) || (!isset($_POST['newver']) && !isset($_POST['rmver']))) {
+ header("Location: diag_confbak.php");
+ return;
+ }
+
+ conf_mount_rw();
+ $confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
+ if ($_POST['newver'] != "") {
+ if (config_restore($g['conf_path'] . '/backup/config-' . $_POST['newver'] . '.xml') == 0) {
+ $savemsg = sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['newver']), htmlspecialchars($confvers[$_POST['newver']]['description']));
+ } else {
+ $savemsg = gettext("Unable to revert to the selected configuration.");
+ }
+ }
+ if ($_POST['rmver'] != "") {
+ unlink_if_exists($g['conf_path'] . '/backup/config-' . $_POST['rmver'] . '.xml');
+ $savemsg = sprintf(gettext('Deleted backup with timestamp %1$s and description "%2$s".'), date(gettext("n/j/y H:i:s"), $_POST['rmver']), htmlspecialchars($confvers[$_POST['rmver']]['description']));
+ }
+ conf_mount_ro();
+}
+
+if ($_GET['getcfg'] != "") {
+ $file = $g['conf_path'] . '/backup/config-' . $_GET['getcfg'] . '.xml';
+
+ $exp_name = urlencode("config-{$config['system']['hostname']}.{$config['system']['domain']}-{$_GET['getcfg']}.xml");
+ $exp_data = file_get_contents($file);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if (($_GET['diff'] == 'Diff') && isset($_GET['oldtime']) && isset($_GET['newtime']) &&
+ (is_numeric($_GET['oldtime'])) &&
+ (is_numeric($_GET['newtime']) || ($_GET['newtime'] == 'current'))) {
+ $diff = "";
+ $oldfile = $g['conf_path'] . '/backup/config-' . $_GET['oldtime'] . '.xml';
+ $oldtime = $_GET['oldtime'];
+ if ($_GET['newtime'] == 'current') {
+ $newfile = $g['conf_path'] . '/config.xml';
+ $newtime = $config['revision']['time'];
+ } else {
+ $newfile = $g['conf_path'] . '/backup/config-' . $_GET['newtime'] . '.xml';
+ $newtime = $_GET['newtime'];
+ }
+ if (file_exists($oldfile) && file_exists($newfile)) {
+ exec("/usr/bin/diff -u " . escapeshellarg($oldfile) . " " . escapeshellarg($newfile), $diff);
+ }
+}
+
+cleanup_backupcache(false);
+$confvers = get_backups();
+unset($confvers['versions']);
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Configuration History"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php
+ include("fbegin.inc");
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ ?>
+ <?php if ($diff) { ?>
+ <table align="center" width="100%" border="0" cellspacing="0" style="padding-top: 4px; padding-bottom: 4px; vertical-align:middle;" summary="diag confbak">
+ <tr>
+ <td><?=gettext("Configuration diff from");?> <?php echo date(gettext("n/j/y H:i:s"), $oldtime); ?> <?=gettext("to");?> <?php echo date(gettext("n/j/y H:i:s"), $newtime); ?></td>
+ </tr>
+ <?php foreach ($diff as $line) {
+ switch (substr($line, 0, 1)) {
+ case "+":
+ $color = "#caffd3";
+ break;
+ case "-":
+ $color = "#ffe8e8";
+ break;
+ case "@":
+ $color = "#a0a0a0";
+ break;
+ default:
+ $color = "#ffffff";
+ }
+ ?>
+ <tr>
+ <td valign="middle" bgcolor="<?php echo $color; ?>" style="white-space: pre-wrap;"><?php echo htmlentities($line);?></td>
+ </tr>
+ <?php } ?>
+ </table>
+ <br />
+ <?php } ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="stats">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Config History"), true, "diag_confbak.php");
+ $tab_array[1] = array(gettext("Backup/Restore"), false, "diag_backup.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <form action="diag_confbak.php" method="post">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+
+<?php if ($_GET["newver"] || $_GET["rmver"]): ?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Confirm Action"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+
+ <strong><?php echo gettext("Please confirm the selected action"); ?></strong>:
+ <br />
+ <br /><strong><?php echo gettext("Action"); ?>:</strong>
+ <?php if (!empty($_GET["newver"])) {
+ echo gettext("Restore from Configuration Backup");
+ $target_config = $_GET["newver"]; ?>
+ <input type="hidden" name="newver" value="<?php echo htmlspecialchars($_GET["newver"]); ?>" />
+ <?php } elseif (!empty($_GET["rmver"])) {
+ echo gettext("Remove Configuration Backup");
+ $target_config = $_GET["rmver"]; ?>
+ <input type="hidden" name="rmver" value="<?php echo htmlspecialchars($_GET["rmver"]); ?>" />
+ <?php } ?>
+ <br /><strong><?php echo gettext("Target Configuration"); ?>:</strong>
+ <?php echo sprintf(gettext('Timestamp %1$s'), date(gettext("n/j/y H:i:s"), $target_config)); ?>
+ <br /><input type="submit" name="confirm" value="<?php echo gettext("Confirm"); ?>" />
+ </td>
+ </tr>
+<?php else: ?>
+
+ <tr>
+ <td width="10%">&nbsp;</td>
+ <td width="15%" valign="top"><?=gettext("Backup Count");?></td>
+ <td width="10%">
+ <input name="backupcount" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($config['system']['backupcount']);?>"/>
+ </td>
+ <td width="60%">
+ <?= gettext("Enter the number of older configurations to keep in the local backup cache. By default this is 30 for a full install or 5 on NanoBSD."); ?>
+ </td>
+ <td width= "5%"><input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /></td>
+ </tr>
+ <tr>
+ <td class="vncell">&nbsp;</td>
+ <td colspan="4" class="vncell">
+ <?= gettext("NOTE: Be aware of how much space is consumed by backups before adjusting this value. Current space used by backups: "); ?> <?= exec("/usr/bin/du -sh /conf/backup | /usr/bin/awk '{print $1;}'") ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <form action="diag_confbak.php" method="get">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="difference">
+ <?php if (is_array($confvers)): ?>
+ <tr>
+ <td colspan="7" class="list">
+ <?= gettext("To view the differences between an older configuration and a newer configuration, select the older configuration using the left column of radio options and select the newer configuration in the right column, then press the Diff button."); ?>
+ <br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="5%" colspan="2" valign="middle" align="center" class="list nowrap"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
+ <td width="20%" class="listhdrr"><?=gettext("Date");?></td>
+ <td width="5%" class="listhdrr"><?=gettext("Version");?></td>
+ <td width="5%" class="listhdrr"><?=gettext("Size");?></td>
+ <td width="60%" class="listhdrr"><?=gettext("Configuration Change");?></td>
+ <td width="5%" class="list">&nbsp;</td>
+ </tr>
+ <tr valign="top">
+ <td valign="middle" class="list nowrap"></td>
+ <td class="list">
+ <input type="radio" name="newtime" value="current" />
+ </td>
+ <td class="listlr"> <?= date(gettext("n/j/y H:i:s"), $config['revision']['time']) ?></td>
+ <td class="listr"> <?= $config['version'] ?></td>
+ <td class="listr"> <?= format_bytes(filesize("/conf/config.xml")) ?></td>
+ <td class="listr"> <?= htmlspecialchars($config['revision']['description']) ?></td>
+ <td valign="middle" class="list nowrap"><b><?=gettext("Current");?></b></td>
+ </tr>
+ <?php
+ $c = 0;
+ foreach ($confvers as $version):
+ if ($version['time'] != 0) {
+ $date = date(gettext("n/j/y H:i:s"), $version['time']);
+ } else {
+ $date = gettext("Unknown");
+ }
+ ?>
+ <tr valign="top">
+ <td class="list">
+ <input type="radio" name="oldtime" value="<?php echo $version['time'];?>" />
+ </td>
+ <td class="list">
+ <?php if ($c < (count($confvers) - 1)) { ?>
+ <input type="radio" name="newtime" value="<?php echo $version['time'];?>" />
+ <?php } else { ?>
+ &nbsp;
+ <?php }
+ $c++; ?>
+ </td>
+ <td class="listlr"> <?= $date ?></td>
+ <td class="listr"> <?= $version['version'] ?></td>
+ <td class="listr"> <?= format_bytes($version['filesize']) ?></td>
+ <td class="listr"> <?= htmlspecialchars($version['description']) ?></td>
+ <td valign="middle" class="list nowrap">
+ <a href="diag_confbak.php?newver=<?=$version['time'];?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="<?=gettext("Revert to this configuration");?>" title="<?=gettext("Revert to this configuration");?>" />
+ </a>
+ <a href="diag_confbak.php?rmver=<?=$version['time'];?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="<?=gettext("Remove this backup");?>" title="<?=gettext("Remove this backup");?>" />
+ </a>
+ <a href="diag_confbak.php?getcfg=<?=$version['time'];?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_down.gif" width="17" height="17" border="0" alt="<?=gettext("Download this backup");?>" title="<?=gettext("Download this backup");?>" />
+ </a>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ <tr>
+ <td colspan="2"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
+ <td colspan="5"></td>
+ </tr>
+ <?php else: ?>
+ <tr>
+ <td>
+ <?php print_info_box(gettext("No backups found.")); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+<?php endif; ?>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_defaults.php b/src/usr/local/www/diag_defaults.php
new file mode 100755
index 0000000..7c17511
--- /dev/null
+++ b/src/usr/local/www/diag_defaults.php
@@ -0,0 +1,90 @@
+<?php
+/* $Id$ */
+/*
+ diag_defaults.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: config
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-factorydefaults
+##|*NAME=Diagnostics: Factory defaults page
+##|*DESCR=Allow access to the 'Diagnostics: Factory defaults' page.
+##|*MATCH=diag_defaults.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if ($_POST['Submit'] == " " . gettext("No") . " ") {
+ header("Location: index.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Factory defaults"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "):
+ print_info_box(gettext("The system has been reset to factory defaults and is now rebooting. This may take a few minutes, depending on your hardware.")); ?>
+<pre>
+<?php
+ reset_factory_defaults();
+ system_reboot();
+?>
+</pre>
+<?php else: ?>
+<form action="diag_defaults.php" method="post">
+ <p><strong> <?=gettext("If you click") . " &quot;" . gettext("Yes") . "&quot;, " . gettext("the firewall will:")?></strong></p>
+ <ul>
+ <li><?=gettext("Reset to factory defaults");?></li>
+ <li><?=gettext("LAN IP address will be reset to 192.168.1.1");?></li>
+ <li><?=gettext("System will be configured as a DHCP server on the default LAN interface");?></li>
+ <li><?=gettext("Reboot after changes are installed");?></li>
+ <li><?=gettext("WAN interface will be set to obtain an address automatically from a DHCP server");?></li>
+ <li><?=gettext("webConfigurator admin username will be reset to 'admin'");?></li>
+ <li><?=gettext("webConfigurator admin password will be reset to");?> '<?=$g['factory_shipped_password']?>'</li>
+ </ul>
+ <p><strong><?=gettext("Are you sure you want to proceed?");?></strong></p>
+ <p>
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes");?> " />
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No");?> " />
+ </p>
+</form>
+<?php endif; ?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_dns.php b/src/usr/local/www/diag_dns.php
new file mode 100644
index 0000000..4c57223
--- /dev/null
+++ b/src/usr/local/www/diag_dns.php
@@ -0,0 +1,320 @@
+<?php
+/*
+ diag_dns.php
+
+ Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: dns
+*/
+
+$pgtitle = array(gettext("Diagnostics"), gettext("DNS Lookup"));
+require("guiconfig.inc");
+
+$host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'");
+$host_esc = escapeshellarg($host);
+
+/* If this section of config.xml has not been populated yet we need to set it up
+*/
+if (!is_array($config['aliases']['alias'])) {
+ $config['aliases']['alias'] = array();
+}
+$a_aliases = &$config['aliases']['alias'];
+
+$aliasname = str_replace(array(".", "-"), "_", $host);
+$alias_exists = false;
+$counter = 0;
+foreach ($a_aliases as $a) {
+ if ($a['name'] == $aliasname) {
+ $alias_exists = true;
+ $id = $counter;
+ }
+ $counter++;
+}
+
+if (isset($_POST['create_alias']) && (is_hostname($host) || is_ipaddr($host))) {
+ if ($_POST['override']) {
+ $override = true;
+ }
+ $resolved = gethostbyname($host);
+ $type = "hostname";
+ if ($resolved) {
+ $resolved = array();
+ exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
+ $isfirst = true;
+ foreach ($resolved as $re) {
+ if ($re <> "") {
+ if (!$isfirst) {
+ $addresses .= " ";
+ }
+ $addresses .= rtrim($re) . "/32";
+ $isfirst = false;
+ }
+ }
+ $newalias = array();
+ if ($override) {
+ $alias_exists = false;
+ }
+ if ($alias_exists == false) {
+ $newalias['name'] = $aliasname;
+ $newalias['type'] = "network";
+ $newalias['address'] = $addresses;
+ $newalias['descr'] = "Created from Diagnostics-> DNS Lookup";
+ if ($override) {
+ $a_aliases[$id] = $newalias;
+ } else {
+ $a_aliases[] = $newalias;
+ }
+ write_config();
+ $createdalias = true;
+ }
+ }
+}
+
+if ($_POST) {
+ unset($input_errors);
+
+ $reqdfields = explode(" ", "host");
+ $reqdfieldsn = explode(",", "Host");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!is_hostname($host) && !is_ipaddr($host)) {
+ $input_errors[] = gettext("Host must be a valid hostname or IP address.");
+ } else {
+ // Test resolution speed of each DNS server.
+ $dns_speeds = array();
+ $dns_servers = array();
+ exec("/usr/bin/grep nameserver /etc/resolv.conf | /usr/bin/cut -f2 -d' '", $dns_servers);
+ foreach ($dns_servers as $dns_server) {
+ $query_time = exec("/usr/bin/drill {$host_esc} " . escapeshellarg("@" . trim($dns_server)) . " | /usr/bin/grep Query | /usr/bin/cut -d':' -f2");
+ if ($query_time == "") {
+ $query_time = gettext("No response");
+ }
+ $new_qt = array();
+ $new_qt['dns_server'] = $dns_server;
+ $new_qt['query_time'] = $query_time;
+ $dns_speeds[] = $new_qt;
+ unset($new_qt);
+ }
+ }
+
+ $type = "unknown";
+ $resolved = "";
+ $ipaddr = "";
+ $hostname = "";
+ if (!$input_errors) {
+ if (is_ipaddr($host)) {
+ $type = "ip";
+ $resolved = gethostbyaddr($host);
+ $ipaddr = $host;
+ if ($host != $resolved) {
+ $hostname = $resolved;
+ }
+ } elseif (is_hostname($host)) {
+ $type = "hostname";
+ $resolved = gethostbyname($host);
+ if ($resolved) {
+ $resolved = array();
+ exec("/usr/bin/drill {$host_esc} A | /usr/bin/grep {$host_esc} | /usr/bin/grep -v ';' | /usr/bin/awk '{ print $5 }'", $resolved);
+ }
+ $hostname = $host;
+ if ($host != $resolved) {
+ $ipaddr = $resolved[0];
+ }
+ }
+
+ if ($host == $resolved) {
+ $resolved = gettext("No record found");
+ }
+ }
+}
+
+if (($_POST['host']) && ($_POST['dialog_output'])) {
+ display_host_results ($host, $resolved, $dns_speeds);
+ exit;
+}
+
+function display_host_results ($address, $hostname, $dns_speeds) {
+ $map_lengths = function($element) { return strlen($element[0]); };
+
+ echo gettext("IP Address") . ": {$address} \n";
+ echo gettext("Host Name") . ": {$hostname} \n";
+ echo "\n";
+ $text_table = array();
+ $text_table[] = array(gettext("Server"), gettext("Query Time"));
+ if (is_array($dns_speeds)) {
+ foreach ($dns_speeds as $qt) {
+ $text_table[] = array(trim($qt['dns_server']), trim($qt['query_time']));
+ }
+ }
+ $col0_padlength = max(array_map($map_lengths, $text_table)) + 4;
+ foreach ($text_table as $text_row) {
+ echo str_pad($text_row[0], $col0_padlength) . $text_row[1] . "\n";
+ }
+}
+
+include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag dns">
+ <tr>
+ <td>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="diag_dns.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"> <?=gettext("Resolve DNS hostname or IP");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?>
+ <table summary="results">
+ <tr>
+ <td valign="top">
+ <input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+<?php
+ if ($resolved && $type) {
+?>
+ <td valign="middle">&nbsp;=&nbsp;</td>
+ <td>
+ <font size="+1">
+<?php
+ $found = 0;
+ if (is_array($resolved)) {
+ foreach ($resolved as $hostitem) {
+ if ($hostitem <> "") {
+ echo $hostitem . "<br />";
+ $found++;
+ }
+ }
+ } else {
+ echo $resolved;
+ }
+ if ($found > 0) {
+?>
+ <br/>
+ </font>
+ <font size='-2'>
+<?php
+ if ($alias_exists) {
+?>
+ An alias already exists for the hostname <?= htmlspecialchars($host) ?>. <br />
+ <input type="hidden" name="override" value="true"/>
+ <input type="submit" name="create_alias" value="Overwrite Alias"/>
+<?php
+ } else {
+ if (!$createdalias) {
+?>
+ <input type="submit" name="create_alias" value="Create Alias from These Entries"/>
+<?php
+ } else {
+?>
+ Alias created with name <?= htmlspecialchars($newalias['name']) ?>
+<?php
+ }
+ }
+ }
+ }
+?>
+ </font>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if ($_POST):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Resolution time per server");?></td>
+ <td width="78%" class="vtable">
+ <table width="170" border="0" cellpadding="6" cellspacing="0" summary="resolution time">
+ <tr>
+ <td class="listhdrr">
+ <?=gettext("Server");?>
+ </td>
+ <td class="listhdrr">
+ <?=gettext("Query time");?>
+ </td>
+ </tr>
+<?php
+ if (is_array($dns_speeds)) {
+ foreach ($dns_speeds as $qt):
+?>
+ <tr>
+ <td class="listlr">
+ <?=$qt['dns_server']?>
+ </td>
+ <td class="listr">
+ <?=$qt['query_time']?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ }
+?>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+
+ if (!$input_errors && $ipaddr) {
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("More Information:");?></td>
+ <td width="78%" class="vtable">
+ <a href ="/diag_ping.php?host=<?=htmlspecialchars($host)?>&amp;interface=wan&amp;count=3"><?=gettext("Ping");?></a> <br />
+ <a href ="/diag_traceroute.php?host=<?=htmlspecialchars($host)?>&amp;ttl=18"><?=gettext("Traceroute");?></a>
+ <p>
+ <?=gettext("NOTE: The following links are to external services, so their reliability cannot be guaranteed.");?><br /><br />
+ <a target="_blank" href="http://private.dnsstuff.com/tools/whois.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP WHOIS @ DNS Stuff");?></a><br />
+ <a target="_blank" href="http://private.dnsstuff.com/tools/ipall.ch?ip=<?php echo $ipaddr; ?>"><?=gettext("IP Info @ DNS Stuff");?></a>
+ </p>
+ </td>
+ </tr>
+<?php
+ }
+?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <br />&nbsp;
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("DNS Lookup");?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_dump_states.php b/src/usr/local/www/diag_dump_states.php
new file mode 100755
index 0000000..ebb3b06
--- /dev/null
+++ b/src/usr/local/www/diag_dump_states.php
@@ -0,0 +1,280 @@
+<?php
+/*
+ diag_dump_states.php
+ Copyright (C) 2005 Colin Smith
+ Copyright (C) 2005-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-showstates
+##|*NAME=Diagnostics: Show States page
+##|*DESCR=Allow access to the 'Diagnostics: Show States' page.
+##|*MATCH=diag_dump_states.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("interfaces.inc");
+
+/* handle AJAX operations */
+if (isset($_POST['action']) && $_POST['action'] == "remove") {
+ if (isset($_POST['srcip']) && isset($_POST['dstip']) && is_ipaddr($_POST['srcip']) && is_ipaddr($_POST['dstip'])) {
+ $retval = pfSense_kill_states($_POST['srcip'], $_POST['dstip']);
+ echo htmlentities("|{$_POST['srcip']}|{$_POST['dstip']}|0|");
+ } else {
+ echo gettext("invalid input");
+ }
+ return;
+}
+
+if (isset($_POST['filter']) && isset($_POST['killfilter'])) {
+ if (is_ipaddr($_POST['filter'])) {
+ $tokill = $_POST['filter'] . "/32";
+ } elseif (is_subnet($_POST['filter'])) {
+ $tokill = $_POST['filter'];
+ } else {
+ // Invalid filter
+ $tokill = "";
+ }
+ if (!empty($tokill)) {
+ $retval = pfSense_kill_states($tokill);
+ $retval = pfSense_kill_states("0.0.0.0/0", $tokill);
+ }
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Show States"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ function removeState(srcip, dstip) {
+ var busy = function(index, icon) {
+ jQuery(icon).bind("onclick", "");
+ jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
+ jQuery(icon).css("cursor", "wait");
+ }
+
+ jQuery('img[name="i:' + srcip + ":" + dstip + '"]').each(busy);
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>",
+ {
+ type: "post",
+ data: {
+ action: "remove",
+ srcip: srcip,
+ dstip: dstip
+ },
+ complete: removeComplete
+ }
+ );
+ }
+
+ function removeComplete(req) {
+ var values = req.responseText.split("|");
+ if (values[3] != "0") {
+ alert('<?=gettext("An error occurred.");?>');
+ return;
+ }
+
+ jQuery('tr[id="r:' + values[1] + ":" + values[2] + '"]').each(
+ function(index, row) { jQuery(row).fadeOut(1000); }
+ );
+ }
+//]]>
+</script>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcon">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("States"), true, "diag_dump_states.php");
+ if (isset($config['system']['lb_use_sticky'])) {
+ $tab_array[] = array(gettext("Source Tracking"), false, "diag_dump_states_sources.php");
+ }
+ $tab_array[] = array(gettext("Reset States"), false, "diag_resetstate.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+
+<!-- Start of tab content -->
+
+<?php
+ $current_statecount=`pfctl -si | grep "current entries" | awk '{ print $3 }'`;
+?>
+
+<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="states">
+ <tr>
+ <td>
+ <form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="post" name="iform">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="filter">
+ <tr>
+ <td>
+ <?=gettext("Current total state count");?>: <?= $current_statecount ?>
+ </td>
+ <td style="font-weight:bold;" align="right">
+ <?=gettext("Filter expression:");?>
+ <input type="text" name="filter" class="formfld search" value="<?=htmlspecialchars($_POST['filter']);?>" size="30" />
+ <input type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
+ <?php if (isset($_POST['filter']) && (is_ipaddr($_POST['filter']) || is_subnet($_POST['filter']))): ?>
+ <input type="submit" class="formbtn" name="killfilter" value="<?=gettext("Kill");?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tabcont sortable" width="100%" border="0" cellspacing="0" cellpadding="0" summary="results">
+ <thead>
+ <tr>
+ <th class="listhdrr" width="5%"><?=gettext("Int");?></th>
+ <th class="listhdrr" width="5%"><?=gettext("Proto");?></th>
+ <th class="listhdrr" width="65"><?=gettext("Source -> Router -> Destination");?></th>
+ <th class="listhdr" width="24%"><?=gettext("State");?></th>
+ <th class="list sort_ignore" width="1%"></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+$row = 0;
+/* get our states */
+$grepline = (isset($_POST['filter'])) ? "| /usr/bin/egrep " . escapeshellarg(htmlspecialchars($_POST['filter'])) : "";
+$fd = popen("/sbin/pfctl -s state {$grepline}", "r");
+while ($line = chop(fgets($fd))) {
+ if ($row >= 10000) {
+ break;
+ }
+
+ $line_split = preg_split("/\s+/", $line);
+
+ $iface = array_shift($line_split);
+ $proto = array_shift($line_split);
+ $state = array_pop($line_split);
+ $info = implode(" ", $line_split);
+
+ // We may want to make this optional, with a large state table, this could get to be expensive.
+ $iface = convert_real_interface_to_friendly_descr($iface);
+
+ /* break up info and extract $srcip and $dstip */
+ $ends = preg_split("/\<?-\>?/", $info);
+ if (strstr($info, "[")) {
+ // IPv6
+ $parts = explode("[", $ends[0]);
+ if (strstr($info, "->")) {
+ $srcip = trim($parts[0]);
+ } else {
+ $dstip = trim($parts[0]);
+ }
+ $parts = explode("[", $ends[count($ends) - 1]);
+ if (strstr($info, "->")) {
+ $dstip = trim($parts[0]);
+ } else {
+ $srcip = trim($parts[0]);
+ }
+ } else {
+ // IPv4
+ $parts = explode(":", $ends[0]);
+ if (strstr($info, "->")) {
+ $srcip = trim($parts[0]);
+ } else {
+ $dstip = trim($parts[0]);
+ }
+ $parts = explode(":", $ends[count($ends) - 1]);
+ if (strstr($info, "->")) {
+ $dstip = trim($parts[0]);
+ } else {
+ $srcip = trim($parts[0]);
+ }
+ }
+?>
+ <tr valign="top" id="r:<?= $srcip ?>:<?= $dstip ?>">
+ <td class="listlr"><?= $iface ?></td>
+ <td class="listr"><?= $proto ?></td>
+ <td class="listr"><?= $info ?></td>
+ <td class="listr"><?= $state ?></td>
+ <td class="list">
+ <img src="/themes/<?= $g['theme'] ?>/images/icons/icon_x.gif" height="17" width="17" border="0"
+ onclick="removeState('<?= $srcip ?>', '<?= $dstip ?>');" style="cursor:pointer;"
+ name="i:<?= $srcip ?>:<?= $dstip ?>"
+ title="<?= gettext('Remove all state entries from') ?> <?= $srcip ?> <?= gettext('to') ?> <?= $dstip ?>" alt="" />
+ </td>
+ </tr>
+<?php
+ $row++;
+ ob_flush();
+}
+
+if ($row == 0):
+?>
+ <tr>
+ <td class="list" colspan="4" align="center" valign="top">
+ <?= gettext("No states were found.") ?>
+ </td>
+ </tr>
+<?php
+endif;
+pclose($fd);
+?>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="list" colspan="4" align="center" valign="top">
+ <?php if (isset($_POST['filter']) && !empty($_POST['filter'])): ?>
+ <?=gettext("States matching current filter")?>: <?= $row ?>
+ <?php endif; ?>
+ </td>
+ </tr>
+</table>
+
+<!-- End of tab content -->
+
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php require("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_dump_states_sources.php b/src/usr/local/www/diag_dump_states_sources.php
new file mode 100644
index 0000000..4cb14c2
--- /dev/null
+++ b/src/usr/local/www/diag_dump_states_sources.php
@@ -0,0 +1,211 @@
+<?php
+/*
+ diag_dump_states_sources.php
+ Copyright (C) 2005 Colin Smith
+ Copyright (C) 2005-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-showstates
+##|*NAME=Diagnostics: Show States page
+##|*DESCR=Allow access to the 'Diagnostics: Show States' page.
+##|*MATCH=diag_dump_states.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+/* handle AJAX operations */
+if ($_GET['action']) {
+ if ($_GET['action'] == "remove") {
+ if (is_ipaddr($_GET['srcip']) and is_ipaddr($_GET['dstip'])) {
+ $retval = mwexec("/sbin/pfctl -K " . escapeshellarg($_GET['srcip']) . " -K " . escapeshellarg($_GET['dstip']));
+ echo htmlentities("|{$_GET['srcip']}|{$_GET['dstip']}|{$retval}|");
+ } else {
+ echo gettext("invalid input");
+ }
+ exit;
+ }
+}
+
+/* get our states */
+if ($_GET['filter']) {
+ exec("/sbin/pfctl -s Sources | grep " . escapeshellarg(htmlspecialchars($_GET['filter'])), $sources);
+} else {
+ exec("/sbin/pfctl -s Sources", $sources);
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Show Source Tracking"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
+<?php include("fbegin.inc"); ?>
+<form action="diag_dump_states_sources.php" method="get" name="iform">
+
+<script type="text/javascript">
+//<![CDATA[
+ function removeSource(srcip, dstip) {
+ var busy = function(index, icon) {
+ jQuery(icon).bind("onclick", "");
+ jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
+ jQuery(icon).css("cursor", "wait");
+ }
+
+ jQuery('img[name="i:' + srcip + ":" + dstip + '"]').each(busy);
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>" +
+ "?action=remove&srcip=" + srcip + "&dstip=" + dstip,
+ { type: "get", complete: removeComplete }
+ );
+ }
+
+ function removeComplete(req) {
+ var values = req.responseText.split("|");
+ if (values[3] != "0") {
+ alert('<?=gettext("An error occurred.");?>');
+ return;
+ }
+
+ jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
+ function(index, row) { jQuery(row).fadeOut(1000); }
+ );
+ }
+//]]>
+</script>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("States"), false, "diag_dump_states.php");
+ $tab_array[] = array(gettext("Source Tracking"), true, "diag_dump_states_sources.php");
+ $tab_array[] = array(gettext("Reset States"), false, "diag_resetstate.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+
+<!-- Start of tab content -->
+
+<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ <form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="get">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>&nbsp;</td>
+ <td style="font-weight:bold;" align="right">
+ <?=gettext("Filter expression:");?>
+ <input type="text" name="filter" class="formfld search" value="<?=htmlspecialchars($_GET['filter']);?>" size="30" />
+ <input type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tabcont sortable" width="100%" border="0" cellspacing="0" cellpadding="0">
+ <thead>
+ <tr>
+ <th class="listhdrr" width="40%"><?=gettext("Source -> Destination");?></th>
+ <th class="listhdrr" width="15%"><?=gettext("# States");?></th>
+ <th class="listhdrr" width="15%"><?=gettext("# Connections");?></th>
+ <th class="listhdr" width="15%"><?=gettext("Rate");?></th>
+ <th class="list sort_ignore" width="1%"></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+$row = 0;
+if (count($sources) > 0) {
+ foreach ($sources as $line) {
+ if ($row >= 1000) {
+ break;
+ }
+
+ // 192.168.20.2 -> 216.252.56.1 ( states 10, connections 0, rate 0.0/0s )
+
+ $source_split = "";
+ preg_match("/(.*)\s\(\sstates\s(.*),\sconnections\s(.*),\srate\s(.*)\s\)/", $line, $source_split);
+ list($all, $info, $numstates, $numconnections, $rate) = $source_split;
+
+ $source_split = "";
+ preg_match("/(.*)\s\<?-\>?\s(.*)/", $info, $source_split);
+ list($all, $srcip, $dstip) = $source_split;
+
+ ?>
+ <tr valign='top' name='r:<?php echo "{$srcip}:{$dstip}" ?>'>
+ <td class='listlr'><?php echo $info;?></td>
+ <td class='listr'><?php echo $numstates;?></td>
+ <td class='listr'><?php echo $numconnections;?></td>
+ <td class='listr'><?php echo $rate;?></td>
+ <td class='list'>
+ <img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0'
+ onclick="removeSource(<?php echo "'{$srcip}', '{$dstip}'"; ?>);" style='cursor:pointer;'
+ name='i:<?php echo "{$srcip}:{$dstip}"; ?>'
+ title='<?php echo gettext("Remove all source tracking entries from") . " {$srcip} " . gettext("to") . " {$dstip}";?>' alt='' />
+ </td>
+ </tr>
+<?php
+ $row++;
+ }
+} else {
+ echo "<tr>
+ <td class='list' colspan='5' align='center' valign='top'>
+ " . gettext("No source tracking entries were found.") . "
+ </td>
+ </tr>";
+}
+?>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<!-- End of tab content -->
+
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php require("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_gmirror.php b/src/usr/local/www/diag_gmirror.php
new file mode 100644
index 0000000..f0f5bff
--- /dev/null
+++ b/src/usr/local/www/diag_gmirror.php
@@ -0,0 +1,406 @@
+<?php
+/*
+ diag_gmirror.php
+ Copyright (C) 2014 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/gmirror /sbin/geom /usr/bin/grep /usr/bin/egrep /usr/bin/cut /usr/bin/head
+ pfSense_BUILDER_BINARIES: /sbin/mount /usr/bin/awk /usr/bin/sed
+ pfSense_MODULE: gmirror
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-gmirror
+##|*NAME=Diagnostics: GEOM Mirrors
+##|*DESCR=Allow access to the 'Diagnostics: GEOM Mirrors' page.
+##|*MATCH=diag_gmirror.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("config.inc");
+require_once("gmirror.inc");
+
+$pgtitle = array(gettext("Diagnostics"), gettext("GEOM Mirrors"));
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
+
+<?php include("fbegin.inc"); ?>
+
+<?php
+$action_list = array(
+ "forget" => gettext("Forget all formerly connected consumers"),
+ "clear" => gettext("Remove metadata from disk"),
+ "insert" => gettext("Insert consumer into mirror"),
+ "remove" => gettext("Remove consumer from mirror"),
+ "activate" => gettext("Reactivate consumer on mirror"),
+ "deactivate" => gettext("Deactivate consumer from mirror"),
+ "rebuild" => gettext("Force rebuild of mirror consumer"),
+);
+
+/* User tried to pass a bogus action */
+if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) {
+ header("Location: diag_gmirror.php");
+ return;
+}
+
+if ($_POST) {
+ if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) {
+ header("Location: diag_gmirror.php");
+ return;
+ }
+ $input_errors = "";
+
+ if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror'])) {
+ $input_errors[] = gettext("You must supply a valid mirror name.");
+ }
+
+ if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer'])) {
+ $input_errors[] = gettext("You must supply a valid consumer name");
+ }
+
+ /* Additional action-specific validation that hasn't already been tested */
+ switch ($_POST['action']) {
+ case "insert":
+ if (!is_consumer_unused($_POST['consumer'])) {
+ $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first.");
+ }
+ if (gmirror_consumer_has_metadata($_POST['consumer'])) {
+ $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer.");
+ }
+ $mstat = gmirror_get_status_single($_POST['mirror']);
+ if (strtoupper($mstat) != "COMPLETE") {
+ $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish.");
+ }
+ break;
+ case "clear":
+ if (!is_consumer_unused($_POST['consumer'])) {
+ $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first.");
+ }
+ if (!gmirror_consumer_has_metadata($_POST['consumer'])) {
+ $input_errors[] = gettext("Consumer has no metadata to clear.");
+ }
+ break;
+ case "activate":
+ if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) {
+ $input_errors[] = gettext("Consumer is already present on specified mirror.");
+ }
+ if (!gmirror_consumer_has_metadata($_POST['consumer'])) {
+ $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated.");
+ }
+
+ break;
+ case "remove":
+ case "deactivate":
+ case "rebuild":
+ if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) {
+ $input_errors[] = gettext("Consumer must be present on the specified mirror.");
+ }
+ break;
+ }
+
+ $result = 0;
+ if (empty($input_errors)) {
+ switch ($_POST['action']) {
+ case "forget":
+ $result = gmirror_forget_disconnected($_POST['mirror']);
+ break;
+ case "clear":
+ $result = gmirror_clear_consumer($_POST['consumer']);
+ break;
+ case "insert":
+ $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']);
+ break;
+ case "remove":
+ $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']);
+ break;
+ case "activate":
+ $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']);
+ break;
+ case "deactivate":
+ $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']);
+ break;
+ case "rebuild":
+ $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']);
+ break;
+ }
+ $redir = "Location: diag_gmirror.php";
+ if ($result != 0) {
+ $redir .= "?error=" . urlencode($result);
+ }
+ /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */
+ sleep(3);
+ header($redir);
+ return;
+ }
+}
+
+$mirror_status = gmirror_get_status();
+$mirror_list = gmirror_get_mirrors();
+$unused_disks = gmirror_get_disks();
+$unused_consumers = array();
+foreach ($unused_disks as $disk) {
+ if (is_consumer_unused($disk)) {
+ $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk));
+ }
+}
+
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+if ($_GET["error"] && ($_GET["error"] != 0)) {
+ print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details."));
+}
+
+?>
+<form action="diag_gmirror.php" method="POST" id="gmirror_form" name="gmirror_form">
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:")?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only. This page is for managing existing mirrors, not creating new mirrors.")?>
+ <br />&nbsp;
+ </span>
+ <p/>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+
+<?php
+ if ($_GET["action"]):
+?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Confirm Action"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <strong><?php echo gettext("Please confirm the selected action"); ?></strong>:
+ <br />
+ <br /><strong><?php echo gettext("Action"); ?>:</strong> <?php echo $action_list[$_GET["action"]]; ?>
+ <input type="hidden" name="action" value="<?php echo htmlspecialchars($_GET["action"]); ?>" />
+ <?php if (!empty($_GET["mirror"])): ?>
+ <br /><strong><?php echo gettext("Mirror"); ?>:</strong> <?php echo htmlspecialchars($_GET["mirror"]); ?>
+ <input type="hidden" name="mirror" value="<?php echo htmlspecialchars($_GET["mirror"]); ?>" />
+ <?php endif; ?>
+ <?php if (!empty($_GET["consumer"])): ?>
+ <br /><strong><?php echo gettext("Consumer"); ?>:</strong> <?php echo htmlspecialchars($_GET["consumer"]); ?>
+ <input type="hidden" name="consumer" value="<?php echo htmlspecialchars($_GET["consumer"]); ?>" />
+ <?php endif; ?>
+ <br />
+ <br /><input type="submit" name="confirm" value="<?php echo gettext("Confirm"); ?>" />
+ </td>
+ </tr>
+<?php
+ else:
+?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?php echo gettext("GEOM Mirror information"); ?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?php echo gettext("Mirror Status"); ?></td>
+ <td width="78%" class="vtable">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="gmirror status">
+ <tbody id="gmirror_status_table">
+<?php
+ if (count($mirror_status) > 0):
+?>
+ <tr>
+ <td width="30%" class="vncellt"><?php echo gettext("Name"); ?></td>
+ <td width="30%" class="vncellt"><?php echo gettext("Status"); ?></td>
+ <td width="40%" class="vncellt"><?php echo gettext("Component"); ?></td>
+ </tr>
+<?php
+ foreach ($mirror_status as $mirror => $name):
+ $components = count($name["components"]);
+?>
+ <tr>
+ <td width="30%" rowspan="<?php echo $components; ?>" class="listr">
+ <?php echo htmlspecialchars($name['name']); ?>
+ <br />Size: <?php echo gmirror_get_mirror_size($name['name']); ?>
+ </td>
+ <td width="30%" rowspan="<?php echo $components; ?>" class="listr">
+ <?php echo htmlspecialchars($name['status']); ?>
+<?php
+ if (strtoupper($name['status']) == "DEGRADED"):
+?>
+ <br /><a href="diag_gmirror.php?action=forget&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Forget Disconnected Disks"); ?>]</a>
+<?php
+ endif;
+?>
+ </td>
+ <td width="40%" class="listr">
+ <?php echo $name['components'][0]; ?>
+ <?php list($cname, $cstatus) = explode(" ", $name['components'][0], 2); ?>
+ <br />
+<?php
+ if ((strtoupper($name['status']) == "COMPLETE") && (count($name["components"]) > 1)):
+?>
+ <a href="diag_gmirror.php?action=rebuild&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Rebuild"); ?>]</a>
+ <a href="diag_gmirror.php?action=deactivate&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Deactivate"); ?>]</a>
+ <a href="diag_gmirror.php?action=remove&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Remove"); ?>]</a>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ if (count($name["components"]) > 1):
+ $morecomponents = array_slice($name["components"], 1);
+ foreach ($morecomponents as $component):
+?>
+ <tr>
+ <td width="40%" class="listr">
+ <?php echo $component; ?>
+ <?php list($cname, $cstatus) = explode(" ", $component, 2); ?>
+ <br />
+<?php
+ if ((strtoupper($name['status']) == "COMPLETE") && (count($name["components"]) > 1)):
+?>
+ <a href="diag_gmirror.php?action=rebuild&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Rebuild"); ?>]</a>
+ <a href="diag_gmirror.php?action=deactivate&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Deactivate"); ?>]</a>
+ <a href="diag_gmirror.php?action=remove&amp;consumer=<?php echo htmlspecialchars($cname); ?>&amp;mirror=<?php echo htmlspecialchars($name['name']); ?>">[<?php echo gettext("Remove"); ?>]</a>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+ endforeach;
+ else:
+?>
+ <tr>
+ <td colspan="3" class="listr"><?php echo gettext("No Mirrors Found"); ?></td>
+ </tr>
+<?php
+ endif;
+?>
+ </tbody>
+ </table>
+ <br /><?php echo gettext("Some disk operations may only be performed when there are multiple consumers present in a mirror."); ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?php echo gettext("Consumer information"); ?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?php echo gettext("Available Consumers"); ?></td>
+ <td width="78%" class="vtable">
+
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="consumer list">
+ <tbody id="consumer_list">
+<?php
+ if (count($unused_consumers) > 0):
+?>
+ <tr>
+ <td width="30%" class="vncellt"><?php echo gettext("Name"); ?></td>
+ <td width="30%" class="vncellt"><?php echo gettext("Size"); ?></td>
+ <td width="40%" class="vncellt"><?php echo gettext("Add to Mirror"); ?></td>
+ </tr>
+<?php
+ foreach ($unused_consumers as $consumer):
+?>
+ <tr>
+ <td width="30%" class="listr">
+ <?php echo htmlspecialchars($consumer['name']); ?>
+ </td>
+ <td width="30%" class="listr"><?php echo htmlspecialchars($consumer['size']); ?> <?php echo htmlspecialchars($consumer['humansize']); ?></td>
+ <td width="40%" class="listr">
+<?php
+ $oldmirror = gmirror_get_consumer_metadata_mirror($consumer['name']);
+ if ($oldmirror):
+?>
+ <a href="diag_gmirror.php?action=activate&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>&amp;mirror=<?php echo htmlspecialchars($oldmirror); ?>">[<?php echo gettext("Reactivate on:") . ' ' . htmlspecialchars($oldmirror); ?>]</a>
+ <br /><a href="diag_gmirror.php?action=clear&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>">[<?php echo gettext("Remove metadata from disk"); ?>]</a>
+<?php
+ else:
+ foreach ($mirror_list as $mirror):
+ $mirror_size = gmirror_get_mirror_size($mirror);
+ $consumer_size = gmirror_get_unused_consumer_size($consumer['name']);
+ if ($consumer_size > $mirror_size):
+?>
+ <a href="diag_gmirror.php?action=insert&amp;consumer=<?php echo htmlspecialchars($consumer['name']); ?>&amp;mirror=<?php echo htmlspecialchars($mirror); ?>"><?php echo htmlspecialchars($mirror); ?></a>
+<?php
+ endif;
+ endforeach;
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ else:
+?>
+ <tr>
+ <td colspan="3" class="listr">
+ <?php echo gettext("No unused consumers found"); ?>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ </tbody>
+ </table>
+ <br /><?php echo gettext("Consumers may only be added to a mirror if they are larger than the size of the mirror."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class=""><?php echo gettext("To repair a failed mirror, first perform a 'Forget' command on the mirror, followed by an 'insert' action on the new consumer."); ?></td>
+ </tr>
+<?php
+ endif;
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php require("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+// Clear the loading indicator
+echo "<script type=\"text/javascript\">";
+echo "jQuery('#loading').html('');";
+echo "</script>";
+
+?>
diff --git a/src/usr/local/www/diag_ipsec.php b/src/usr/local/www/diag_ipsec.php
new file mode 100644
index 0000000..96c6835
--- /dev/null
+++ b/src/usr/local/www/diag_ipsec.php
@@ -0,0 +1,555 @@
+<?php
+/* $Id$ */
+/*
+ diag_ipsec.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc <mgrooms@shrew.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Parts of this code was originally based on vpn_ipsec_sad.php
+ Copyright (C) 2003-2004 Manuel Kasper
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: ipsec
+*/
+
+##|+PRIV
+##|*IDENT=page-status-ipsec
+##|*NAME=Status: IPsec page
+##|*DESCR=Allow access to the 'Status: IPsec' page.
+##|*MATCH=diag_ipsec.php*
+##|-PRIV
+
+
+global $g;
+
+$pgtitle = array(gettext("Status"), gettext("IPsec"));
+$shortcut_section = "ipsec";
+
+require("guiconfig.inc");
+include("head.inc");
+require("ipsec.inc");
+
+if ($_GET['act'] == 'connect') {
+ if (ctype_digit($_GET['ikeid'])) {
+ $ph1ent = ipsec_get_phase1($_GET['ikeid']);
+ if (!empty($ph1ent)) {
+ if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == 'ikev1') {
+ $ph2entries = ipsec_get_number_of_phase2($_GET['ikeid']);
+ for ($i = 0; $i < $ph2entries; $i++) {
+ $connid = escapeshellarg("con{$_GET['ikeid']}00{$i}");
+ mwexec("/usr/local/sbin/ipsec down {$connid}");
+ mwexec("/usr/local/sbin/ipsec up {$connid}");
+ }
+ } else {
+ mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']));
+ mwexec("/usr/local/sbin/ipsec up con" . escapeshellarg($_GET['ikeid']));
+ }
+ }
+ }
+} else if ($_GET['act'] == 'ikedisconnect') {
+ if (ctype_digit($_GET['ikeid'])) {
+ if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) {
+ mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "[" . escapeshellarg($_GET['ikesaid']) . "]");
+ } else {
+ mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']));
+ }
+ }
+} else if ($_GET['act'] == 'childdisconnect') {
+ if (ctype_digit($_GET['ikeid'])) {
+ if (!empty($_GET['ikesaid']) && ctype_digit($_GET['ikesaid'])) {
+ mwexec("/usr/local/sbin/ipsec down con" . escapeshellarg($_GET['ikeid']) . "{" . escapeshellarg($_GET['ikesaid']) . "}");
+ }
+ }
+}
+
+if (!is_array($config['ipsec']['phase1'])) {
+ $config['ipsec']['phase1'] = array();
+}
+
+$a_phase1 = &$config['ipsec']['phase1'];
+
+$status = ipsec_smp_dump_status();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?php echo $jsevents["body"]["onload"]; ?>">
+<?php include("fbegin.inc"); ?>
+<div id="inputerrors"></div>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Overview"), true, "diag_ipsec.php");
+ $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
+ $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
+ $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
+ $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" class="tabcont sortable" summary="status">
+ <thead>
+ <tr>
+ <th class="listhdrr nowrap"><?php echo gettext("Description");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Local ID");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Local IP");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Remote ID");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Remote IP");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Role");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Reauth");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Algo");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Status");?></th>
+ <th class="list nowrap"></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ $ipsecconnected = array();
+ if (is_array($status['query']) && is_array($status['query']['ikesalist']) && is_array($status['query']['ikesalist']['ikesa'])):
+ foreach ($status['query']['ikesalist']['ikesa'] as $ikeid => $ikesa):
+ $con_id = substr($ikesa['peerconfig'], 3);
+ if ($ikesa['version'] == 1) {
+ $ph1idx = substr($con_id, 0, strrpos(substr($con_id, 0, -1), '00'));
+ $ipsecconnected[$ph1idx] = $ph1idx;
+ } else {
+ $ipsecconnected[$con_id] = $ph1idx = $con_id;
+ }
+
+ if (ipsec_phase1_status($status['query']['ikesalist']['ikesa'], $ikesa['id'])) {
+ $icon = "pass";
+ } elseif (!isset($config['ipsec']['enable'])) {
+ $icon = "block";
+ } else {
+ $icon = "reject";
+ }
+?>
+ <tr>
+ <td class="listlr">
+<?php
+ echo htmlspecialchars(ipsec_get_descr($ph1idx));
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!is_array($ikesa['local'])) {
+ echo gettext("Unknown");
+ } else {
+ if (!empty($ikesa['local']['identification'])) {
+ if ($ikesa['local']['identification'] == '%any') {
+ echo gettext('Any identifier');
+ } else {
+ echo htmlspecialchars($ikesa['local']['identification']);
+ }
+ } else {
+ echo gettext("Unknown");
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!is_array($ikesa['local'])) {
+ echo gettext("Unknown");
+ } else {
+ if (!empty($ikesa['local']['address'])) {
+ echo htmlspecialchars($ikesa['local']['address']) . '<br/>' .
+ gettext('Port: ') . htmlspecialchars($ikesa['local']['port']);
+ } else {
+ echo gettext("Unknown");
+ }
+ if ($ikesa['local']['port'] == '4500') {
+ echo " NAT-T";
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!is_array($ikesa['remote'])) {
+ echo gettext("Unknown");
+ } else {
+ $identity = "";
+ if (!empty($ikesa['remote']['identification'])) {
+ if ($ikesa['remote']['identification'] == '%any') {
+ $identity = 'Any identifier';
+ } else {
+ $identity = htmlspecialchars($ikesa['remote']['identification']);
+ }
+ }
+
+ if (is_array($ikesa['remote']['auth']) && !empty($ikesa['remote']['auth'][0]['identity'])) {
+ echo htmlspecialchars($ikesa['remote']['auth'][0]['identity']);
+ echo "<br/>{$identity}";
+ } else {
+ if (empty($identity)) {
+ echo gettext("Unknown");
+ } else {
+ echo $identity;
+ }
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!is_array($ikesa['remote'])) {
+ echo gettext("Unknown");
+ } else {
+ if (!empty($ikesa['remote']['address'])) {
+ echo htmlspecialchars($ikesa['remote']['address']) . '<br/>' .
+ gettext('Port: ') . htmlspecialchars($ikesa['remote']['port']);
+ } else {
+ echo gettext("Unknown");
+ }
+ if ($ikesa['remote']['port'] == '4500') {
+ echo " NAT-T";
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+ IKEv<?php echo htmlspecialchars($ikesa['version']);?>
+ <br/>
+<?php
+ echo htmlspecialchars($ikesa['role']);
+?>
+ </td>
+ <td class="listr">
+<?php
+ echo htmlspecialchars($ikesa['reauth']);
+?>
+ </td>
+ <td class="listr">
+<?php
+ echo htmlspecialchars($ikesa['encalg']);
+ echo "<br/>";
+ echo htmlspecialchars($ikesa['intalg']);
+ echo "<br/>";
+ echo htmlspecialchars($ikesa['prfalg']);
+ echo "<br/>";
+ echo htmlspecialchars($ikesa['dhgroup']);
+?>
+ </td>
+ <td class="listr">
+ <center>
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_<?php echo $icon; ?>.gif" title="<?php echo $ikesa['status']; ?>" alt=""/>
+ <br/><?php echo htmlspecialchars($ikesa['status']);?>
+ <br/><?php echo htmlspecialchars($ikesa['established']);?>
+ </center>
+ </td>
+ <td >
+<?php
+ if ($icon != "pass"):
+?>
+ <center>
+ <a href="diag_ipsec.php?act=connect&amp;ikeid=<?php echo $con_id; ?>">
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_start.gif" alt=<?php echo gettext("Connect VPN");?> title=<?php echo gettext("Connect VPN");?> border="0"/>
+ </a>
+ </center>
+<?php
+ else:
+?>
+ <center>
+ <a href="diag_ipsec.php?act=ikedisconnect&amp;ikeid=<?php echo $con_id; ?>">
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_stop.gif" alt=<?php echo gettext("Disconnect VPN");?> title=<?php echo gettext("Disconnect VPN");?> border="0"/>
+ </a>
+ <a href="diag_ipsec.php?act=ikedisconnect&amp;ikeid=<?php echo $con_id; ?>&amp;ikesaid=<?php echo $ikesa['id']; ?>">
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" alt=<?php echo gettext("Disconnect VPN Connection");?> title=<?php echo gettext("Disconnect VPN Connection");?> border="0"/>
+ </a>
+ </center>
+<?php
+ endif;
+?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="">
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($ikesa['childsalist'])):
+?>
+ <tr>
+ <td class="listrborder" colspan="9">
+ <div id="btnchildsa-<?=$ikeid;?>">
+ <input type="button" onclick="show_childsa('childsa-<?=$ikeid;?>', 'btnchildsa-<?=$ikeid;?>');" value="+" /> - Show child SA entries
+ </div>
+ <table class="tabcont" width="100%" height="100%" border="0" cellspacing="0" cellpadding="0" id="childsa-<?=$ikeid;?>" style="display:none" summary="">
+ <thead>
+ <tr>
+ <th class="listhdrr nowrap"><?php echo gettext("Local subnets");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Local SPI(s)");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Remote subnets");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Times");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Algo");?></th>
+ <th class="listhdrr nowrap"><?php echo gettext("Stats");?></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ if (is_array($ikesa['childsalist']['childsa'])):
+ foreach ($ikesa['childsalist']['childsa'] as $childsa):
+?>
+ <tr valign="top">
+ <td class="listlr nowrap">
+<?php
+ if (is_array($childsa['local']) &&
+ is_array($childsa['local']['networks']) &&
+ is_array($childsa['local']['networks']['network'])) {
+ foreach ($childsa['local']['networks']['network'] as $lnets) {
+ echo htmlspecialchars(ipsec_fixup_network($lnets)) . "<br />";
+ }
+ } else {
+ echo gettext("Unknown");
+ }
+?>
+ </td>
+ <td class="listr nowrap">
+<?php
+ if (is_array($childsa['local'])) {
+ echo gettext("Local: ") . htmlspecialchars($childsa['local']['spi']);
+ }
+ if (is_array($childsa['remote'])) {
+ echo "<br/>" . gettext("Remote: ") . htmlspecialchars($childsa['remote']['spi']);
+ }
+?>
+ </td>
+ <td class="listr nowrap">
+<?php
+ if (is_array($childsa['remote']) &&
+ is_array($childsa['remote']['networks']) &&
+ is_array($childsa['remote']['networks']['network'])) {
+ foreach ($childsa['remote']['networks']['network'] as $rnets) {
+ echo htmlspecialchars(ipsec_fixup_network($rnets)) . "<br />";
+ }
+ } else {
+ echo gettext("Unknown");
+ }
+?>
+ </td>
+ <td class="listr nowrap">
+<?php
+ echo gettext("Rekey: ") . htmlspecialchars($childsa['rekey']);
+ echo "<br/>" . gettext("Life: ") . htmlspecialchars($childsa['lifetime']);
+ echo "<br/>" . gettext("Install: ") .htmlspecialchars($childsa['installtime']);
+
+?>
+ </td>
+ <td class="listr nowrap">
+<?php
+ echo htmlspecialchars($childsa['encalg']);
+ echo "<br/>";
+ echo htmlspecialchars($childsa['intalg']);
+ echo "<br/>";
+ if (!empty($childsa['prfalg'])) {
+ echo htmlspecialchars($childsa['prfalg']);
+ echo "<br/>";
+ }
+ if (!empty($childsa['dhgroup'])) {
+ echo htmlspecialchars($childsa['dhgroup']);
+ echo "<br/>";
+ }
+ if (!empty($childsa['esn'])) {
+ echo htmlspecialchars($childsa['esn']);
+ echo "<br/>";
+ }
+ echo gettext("IPComp: ") . htmlspecialchars($childsa['ipcomp']);
+?>
+ </td>
+ <td class="listr nowrap">
+<?php
+ echo gettext("Bytes-In: ") . htmlspecialchars($childsa['bytesin']);
+ echo "<br/>";
+ echo gettext("Packets-In: ") . htmlspecialchars($childsa['packetsin']);
+ echo "<br/>";
+ echo gettext("Bytes-Out: ") . htmlspecialchars($childsa['bytesout']);
+ echo "<br/>";
+ echo gettext("Packets-Out: ") . htmlspecialchars($childsa['packetsout']);
+?>
+ </td>
+ <td>
+ <center>
+ <a href="diag_ipsec.php?act=childdisconnect&amp;ikeid=<?php echo $con_id; ?>&amp;ikesaid=<?php echo $childsa['reqid']; ?>">
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" alt=<?php echo gettext("Disconnect Child SA");?> title=<?php echo gettext("Disconnect Child SA");?> border="0"/>
+ </a>
+ </center>
+ </td>
+ <td class="list nowrap">
+ &nbsp;
+ </td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+?>
+ <tr style="display:none;"><td></td></tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+
+ unset($con_id);
+ endforeach;
+ endif;
+
+ $rgmap = array();
+ foreach ($a_phase1 as $ph1ent):
+ if (isset($ph1ent['disabled'])) {
+ continue;
+ }
+ $rgmap[$ph1ent['remote-gateway']] = $ph1ent['remote-gateway'];
+ if ($ipsecconnected[$ph1ent['ikeid']]) {
+ continue;
+ }
+?>
+ <tr>
+ <td class="listlr">
+<?php
+ echo htmlspecialchars($ph1ent['descr']);
+?>
+ </td>
+ <td class="listr">
+<?php
+ list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local");
+ if (empty($myid_data)) {
+ echo gettext("Unknown");
+ } else {
+ echo htmlspecialchars($myid_data);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ $ph1src = ipsec_get_phase1_src($ph1ent);
+ if (empty($ph1src)) {
+ echo gettext("Unknown");
+ } else {
+ echo htmlspecialchars($ph1src);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap);
+ if (empty($peerid_data)) {
+ echo gettext("Unknown");
+ } else {
+ echo htmlspecialchars($peerid_data);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ $ph1src = ipsec_get_phase1_dst($ph1ent);
+ if (empty($ph1src)) {
+ echo gettext("Unknown");
+ } else {
+ echo htmlspecialchars($ph1src);
+ }
+?>
+ </td>
+ <td class="listr" >
+ </td>
+ <td class="listr" >
+ </td>
+ <td class="listr" >
+ </td>
+<?php
+ if (isset($ph1ent['mobile'])):
+?>
+ <td class="listr">
+ <center>
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_pass.gif" title=<?php echo gettext("Awaiting connections");?> alt=""/>
+ <br/><?php echo gettext("Awaiting connections");?>
+ </center>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="">
+ </table>
+ </td>
+<?php
+ else:
+?>
+ <td class="listr">
+ <center>
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_reject.gif" title=<?php echo gettext("Disconnected");?> alt=""/>
+ <br/><?php echo gettext("Disconnected");?>
+ </center>
+ </td>
+ <td >
+ <center>
+ <a href="diag_ipsec.php?act=connect&amp;ikeid=<?php echo $ph1ent['ikeid']; ?>">
+ <img src ="/themes/<?php echo $g['theme']; ?>/images/icons/icon_service_start.gif" alt=<?php echo gettext("Connect VPN");?> title=<?php echo gettext("Connect VPN");?> border="0"/>
+ </a>
+ </center>
+ </td>
+<?php
+ endif;
+?>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="">
+ </table>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ unset($ipsecconnected, $phase1, $rgmap);
+?>
+ <tr style="display:none;"><td></td></tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<p class="vexpl">
+ <span class="red">
+ <strong><?php echo gettext("Note:");?><br /></strong>
+ </span>
+ <?php echo gettext("You can configure IPsec");?>
+ <a href="vpn_ipsec.php">here</a>.
+</p>
+<?php unset($status); include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function show_childsa(id, buttonid) {
+ document.getElementById(buttonid).innerHTML='';
+ aodiv = document.getElementById(id);
+ aodiv.style.display = "block";
+}
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_ipsec_leases.php b/src/usr/local/www/diag_ipsec_leases.php
new file mode 100644
index 0000000..501c83a
--- /dev/null
+++ b/src/usr/local/www/diag_ipsec_leases.php
@@ -0,0 +1,131 @@
+<?php
+/* $Id$ */
+/*
+ diag_ipsec_leases.php
+ Copyright (C) 2014 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/sbin/ipsec
+ pfSense_MODULE: ipsec
+*/
+
+##|+PRIV
+##|*IDENT=page-status-ipsec-leases
+##|*NAME=Status: IPsec: Leases page
+##|*DESCR=Allow access to the 'Status: IPsec: Leases' page.
+##|*MATCH=diag_ipsec_leases.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("ipsec.inc");
+
+$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("Leases"));
+$shortcut_section = "ipsec";
+include("head.inc");
+
+$mobile = ipsec_dump_mobile();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc"); ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec sad">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
+ $tab_array[1] = array(gettext("Leases"), true, "diag_ipsec_leases.php");
+ $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
+ $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
+ $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <?php if (isset($mobile['pool']) && is_array($mobile['pool'])): ?>
+ <?php foreach ($mobile['pool'] as $pool): ?>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="4" valign="top" class="listtopic">
+ <?php
+ echo gettext("Pool: ") . $pool['name'];
+ echo ' ' . gettext("usage: ") . $pool['usage'];
+ echo ' ' . gettext("online: ") . $pool['online'];
+ ?>
+ </td>
+ </tr>
+ <?php if (is_array($pool['lease']) && count($pool['lease']) > 0): ?>
+ <tr>
+ <td class="listhdrr nowrap"><?=gettext("ID");?></td>
+ <td class="listhdrr nowrap"><?=gettext("Host");?></td>
+ <td class="listhdrr nowrap"><?=gettext("Status");?></td>
+ <td class="list nowrap"></td>
+ </tr>
+ <?php foreach ($pool['lease'] as $lease): ?>
+ <tr>
+ <td class="listlr"><?=htmlspecialchars($lease['id']);?></td>
+ <td class="listr"><?=htmlspecialchars($lease['host']);?></td>
+ <td class="listr"><?=htmlspecialchars($lease['status']);?></td>
+ <td class="list nowrap">
+ </td>
+ </tr>
+ <?php endforeach;
+ else: ?>
+ <tr>
+ <td>
+ <p><strong><?=gettext("No leases from this pool yet.");?></strong></p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+ <?php endforeach; ?>
+ <?php else: ?>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td>
+ <p><strong><?=gettext("No IPsec pools.");?></strong></p>
+ </td>
+ </tr>
+ </table>
+ <?php endif; ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+<p class="vexpl">
+<span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
+<?=gettext("You can configure your IPsec");?> <a href="vpn_ipsec.php"><?=gettext("here.");?></a>
+</p>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_ipsec_sad.php b/src/usr/local/www/diag_ipsec_sad.php
new file mode 100644
index 0000000..f958d29
--- /dev/null
+++ b/src/usr/local/www/diag_ipsec_sad.php
@@ -0,0 +1,141 @@
+<?php
+/* $Id$ */
+/*
+ diag_ipsec_sad.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/setkey
+ pfSense_MODULE: ipsec
+*/
+
+##|+PRIV
+##|*IDENT=page-status-ipsec-sad
+##|*NAME=Status: IPsec: SAD page
+##|*DESCR=Allow access to the 'Status: IPsec: SAD' page.
+##|*MATCH=diag_ipsec_sad.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("ipsec.inc");
+
+$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("SAD"));
+$shortcut_section = "ipsec";
+include("head.inc");
+
+$sad = ipsec_dump_sad();
+
+/* delete any SA? */
+if ($_GET['act'] == "del") {
+ $fd = @popen("/sbin/setkey -c > /dev/null 2>&1", "w");
+ if ($fd) {
+ fwrite($fd, "delete {$_GET['src']} {$_GET['dst']} {$_GET['proto']} {$_GET['spi']} ;\n");
+ pclose($fd);
+ sleep(1);
+ }
+}
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc"); ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec sad">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
+ $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
+ $tab_array[2] = array(gettext("SAD"), true, "diag_ipsec_sad.php");
+ $tab_array[3] = array(gettext("SPD"), false, "diag_ipsec_spd.php");
+ $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <?php if (count($sad)): ?>
+ <tr>
+ <td class="listhdrr nowrap"><?=gettext("Source");?></td>
+ <td class="listhdrr nowrap"><?=gettext("Destination");?></td>
+ <td class="listhdrr nowrap"><?=gettext("Protocol");?></td>
+ <td class="listhdrr nowrap"><?=gettext("SPI");?></td>
+ <td class="listhdrr nowrap"><?=gettext("Enc. alg.");?></td>
+ <td class="listhdr nowrap"><?=gettext("Auth. alg.");?></td>
+ <td class="listhdr nowrap"><?=gettext("Data");?></td>
+ <td class="list nowrap"></td>
+ </tr>
+ <?php foreach ($sad as $sa): ?>
+ <tr>
+ <td class="listlr"><?=htmlspecialchars($sa['src']);?></td>
+ <td class="listr"><?=htmlspecialchars($sa['dst']);?></td>
+ <td class="listr"><?=htmlspecialchars(strtoupper($sa['proto']));?></td>
+ <td class="listr"><?=htmlspecialchars($sa['spi']);?></td>
+ <td class="listr"><?=htmlspecialchars($sa['ealgo']);?></td>
+ <td class="listr"><?=htmlspecialchars($sa['aalgo']);?></td>
+ <td class="listr"><?=htmlspecialchars($sa['data']);?></td>
+ <td class="list nowrap">
+ <?php
+ $args = "src=" . rawurlencode($sa['src']);
+ $args .= "&amp;dst=" . rawurlencode($sa['dst']);
+ $args .= "&amp;proto=" . rawurlencode($sa['proto']);
+ $args .= "&amp;spi=" . rawurlencode("0x" . $sa['spi']);
+ ?>
+ <a href="diag_ipsec_sad.php?act=del&amp;<?=$args;?>" onclick="return confirm('<?=gettext("Do you really want to delete this security association?"); ?>')">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ <?php else: ?>
+ <tr>
+ <td>
+ <p><strong><?=gettext("No IPsec security associations.");?></strong></p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+<p class="vexpl">
+<span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
+<?=gettext("You can configure your IPsec");?> <a href="vpn_ipsec.php"><?=gettext("here.");?></a>
+</p>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_ipsec_spd.php b/src/usr/local/www/diag_ipsec_spd.php
new file mode 100644
index 0000000..5efeda3
--- /dev/null
+++ b/src/usr/local/www/diag_ipsec_spd.php
@@ -0,0 +1,138 @@
+<?php
+/* $Id$ */
+/*
+ diag_ipsec_spd.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/setkey
+ pfSense_MODULE: ipsec
+*/
+
+##|+PRIV
+##|*IDENT=page-status-ipsec-spd
+##|*NAME=Status: IPsec: SPD page
+##|*DESCR=Allow access to the 'Status: IPsec: SPD' page.
+##|*MATCH=diag_ipsec_spd.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("ipsec.inc");
+
+$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("SPD"));
+$shortcut_section = "ipsec";
+include("head.inc");
+
+$spd = ipsec_dump_spd();
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc"); ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ipsec spd">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Overview"), false, "diag_ipsec.php");
+ $tab_array[1] = array(gettext("Leases"), false, "diag_ipsec_leases.php");
+ $tab_array[2] = array(gettext("SAD"), false, "diag_ipsec_sad.php");
+ $tab_array[3] = array(gettext("SPD"), true, "diag_ipsec_spd.php");
+ $tab_array[4] = array(gettext("Logs"), false, "diag_logs_ipsec.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea" style="background:#eeeeee">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <?php if (count($spd)): ?>
+ <tr>
+ <td class="listhdrr nowrap"><?= gettext("Source"); ?></td>
+ <td class="listhdrr nowrap"><?= gettext("Destination"); ?></td>
+ <td class="listhdrr nowrap"><?= gettext("Direction"); ?></td>
+ <td class="listhdrr nowrap"><?= gettext("Protocol"); ?></td>
+ <td class="listhdrr nowrap"><?= gettext("Tunnel endpoints"); ?></td>
+ <td class="list nowrap"></td>
+ </tr>
+ <?php foreach ($spd as $sp): ?>
+ <tr>
+ <td class="listlr" valign="top"><?=htmlspecialchars($sp['srcid']);?></td>
+ <td class="listr" valign="top"><?=htmlspecialchars($sp['dstid']);?></td>
+ <td class="listr" valign="top">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$sp['dir'];?>.gif" width="11" height="11" style="margin-top: 2px" alt="direction" />
+ </td>
+ <td class="listr" valign="top"><?=htmlspecialchars(strtoupper($sp['proto']));?></td>
+ <td class="listr" valign="top"><?=htmlspecialchars($sp['src']);?> -> <?=htmlspecialchars($sp['dst']);?></td>
+ <td class="list nowrap">
+ <?php
+ $args = "srcid=".rawurlencode($sp['srcid']);
+ $args .= "&amp;dstid=".rawurlencode($sp['dstid']);
+ $args .= "&amp;dir=".rawurlencode($sp['dir']);
+ ?>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </table>
+ <br />
+ <table class="tabcont" border="0" cellspacing="0" cellpadding="6" summary="policies">
+ <tr>
+ <td width="16"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_in.gif" width="11" height="11" alt="in" /></td>
+ <td><?= gettext("incoming (as seen by firewall)"); ?></td>
+ </tr>
+ <tr>
+ <td colspan="5" height="4"></td>
+ </tr>
+ <tr>
+ <td><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_out.gif" width="11" height="11" alt="out" /></td>
+ <td><?= gettext("outgoing (as seen by firewall)"); ?></td>
+ </tr>
+ <?php else: ?>
+ <tr>
+ <td>
+ <p><strong><?= gettext("No IPsec security policies."); ?></strong></p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+<p class="vexpl">
+<span class="red"><strong><?= gettext("Note:"); ?><br /></strong></span>
+<?= gettext("You can configure your IPsec"); ?> <a href="vpn_ipsec.php"><?= gettext("here."); ?></a>
+</p>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_ipsec_xml.php b/src/usr/local/www/diag_ipsec_xml.php
new file mode 100644
index 0000000..82dcbea
--- /dev/null
+++ b/src/usr/local/www/diag_ipsec_xml.php
@@ -0,0 +1,84 @@
+<?php
+/* $Id$ */
+/*
+ diag_ipsec_xml.php
+ Copyright (C) 2007 pfSense Project
+ Copyright (C) 2010 Seth Mos
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Parts of this code was originally based on vpn_ipsec_sad.php
+ Copyright (C) 2003-2004 Manuel Kasper
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-ipsecxml
+##|*NAME=Diag IPsec XML page
+##|*DESCR=Allow access to the 'Diag IPsec XML' page.
+##|*MATCH=diag_ipsec_xml.php
+##|-PRIV
+
+global $g;
+
+require("guiconfig.inc");
+require("ipsec.inc");
+
+if (!is_array($config['ipsec']['phase2'])) {
+ $config['ipsec']['phase2'] = array();
+}
+
+$ipsec_status = array();
+
+$a_phase2 = &$config['ipsec']['phase2'];
+
+$status = ipsec_smp_dump_status();
+
+if (is_array($status['query']) && $status['query']['ikesalist'] && $status['query']['ikesalist']['ikesa']) {
+ foreach ($a_phase2 as $ph2ent) {
+ ipsec_lookup_phase1($ph2ent, $ph1ent);
+ $tunnel = array();
+ if (!isset($ph2ent['disabled']) && !isset($ph1ent['disabled'])) {
+ if (ipsec_phase1_status($status['query']['ikesalist']['ikesa'], $ph1ent['ikeid'])) {
+ $tunnel['state'] = "up";
+ } elseif (!isset($config['ipsec']['enable'])) {
+ $tunnel['state'] = "disabled";
+ } else {
+ $tunnel['state'] = "down";
+ }
+
+ $tunnel['src'] = ipsec_get_phase1_src($ph1ent);
+ $tunnel['endpoint'] = $ph1ent['remote-gateway'];
+ $tunnel['local'] = ipsec_idinfo_to_text($ph2ent['localid']);
+ $tunnel['remote'] = ipsec_idinfo_to_text($ph2ent['remoteid']);
+ $tunnel['name'] = "{$ph2ent['descr']}";
+ $ipsec_status['tunnel'][] = $tunnel;
+ }
+ }
+}
+
+$listtags = array("tunnel");
+$xml = dump_xml_config($ipsec_status, "ipsec");
+
+echo $xml;
+?>
diff --git a/src/usr/local/www/diag_limiter_info.php b/src/usr/local/www/diag_limiter_info.php
new file mode 100644
index 0000000..d4e5b06
--- /dev/null
+++ b/src/usr/local/www/diag_limiter_info.php
@@ -0,0 +1,121 @@
+<?php
+/* $Id$ */
+/*
+ diag_limiter_info.php
+ Copyright (C) 2010 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/top
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-limiter-info
+##|*NAME=Diagnostics: Limiter Info
+##|*DESCR=Allows access to the 'Diagnostics: Limiter Info' page
+##|*MATCH=diag_limiter_info.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pgtitle = gettext("Diagnostics: Limiter Info");
+$shortcut_section = "trafficshaper-limiters";
+
+if ($_REQUEST['getactivity']) {
+ $text = `/sbin/ipfw pipe show`;
+ if ($text == "") {
+ $text = "We could not find any limiters on this system.";
+ }
+ echo "Limiters:\n";
+ echo $text;
+ $text = `/sbin/ipfw queue show`;
+ if ($text != "") {
+ echo "\n\nQueues:\n";
+ echo $text;
+ }
+ exit;
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+ function getlimiteractivity() {
+ var url = "/diag_limiter_info.php";
+ var pars = 'getactivity=yes';
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ jQuery('#limiteractivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
+ setTimeout('getlimiteractivity()', 2000);
+ }
+ setTimeout('getlimiteractivity()', 5000);
+//]]>
+</script>
+<div id="maincontent">
+<?php
+ if ($savemsg) {
+ echo "<div id=\"savemsg\">";
+ print_info_box($savemsg);
+ echo "</div>";
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag limiter info">
+ <tr>
+ <td>
+ <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td align="center">
+ <table summary="results">
+ <tr><td>
+ <div id="limiteractivitydiv">
+ <?=gettext("Gathering Limiter information, please wait...");?>
+ </div>
+ </td></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs.php b/src/usr/local/www/diag_logs.php
new file mode 100755
index 0000000..2cbfcbb
--- /dev/null
+++ b/src/usr/local/www/diag_logs.php
@@ -0,0 +1,145 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-system
+##|*NAME=Diagnostics: Logs: System page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: System' page.
+##|*MATCH=diag_logs.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$system_logfile = "{$g['varlog_path']}/system.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($system_logfile);
+}
+
+if ($_GET['filtertext']) {
+ $filtertext = htmlspecialchars($_GET['filtertext']);
+}
+
+if ($_POST['filtertext']) {
+ $filtertext = htmlspecialchars($_POST['filtertext']);
+}
+
+if ($filtertext) {
+ $filtertextmeta="?filtertext=$filtertext";
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("General"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), true, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General"), true, "/diag_logs.php");
+ $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
+ $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
+ $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
+ $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
+ </tr>
+ <?php
+ if ($filtertext) {
+ dump_clog($system_logfile, $nentries, true, array("$filtertext"), array("ppp"));
+ } else {
+ dump_clog($system_logfile, $nentries, true, array(), array("ppp"));
+ }
+ ?>
+ <tr>
+ <td align="left" valign="top">
+ <form id="filterform" name="filterform" action="diag_logs.php" method="post" style="margin-top: 14px;">
+ <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
+ </form>
+ </td>
+ <td align="right" valign="top" >
+ <form id="clearform" name="clearform" action="diag_logs.php" method="post" style="margin-top: 14px;">
+ <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
+ <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_auth.php b/src/usr/local/www/diag_logs_auth.php
new file mode 100644
index 0000000..42bc0ba
--- /dev/null
+++ b/src/usr/local/www/diag_logs_auth.php
@@ -0,0 +1,112 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_auth.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-portalauth
+##|*NAME=Status: System logs: Portal Auth page
+##|*DESCR=Allow access to the 'Status: System logs: Portal Auth' page.
+##|*MATCH=diag_logs_auth.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$portal_logfile = "{$g['varlog_path']}/portalauth.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($portal_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Portal Auth"));
+$shortcut_section = "captiveportal";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs captive portal">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), true, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Last %s Portal Auth log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($portal_logfile, $nentries, true); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_auth.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?= gettext("Clear log"); ?>"/>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_dhcp.php b/src/usr/local/www/diag_logs_dhcp.php
new file mode 100644
index 0000000..f87845d
--- /dev/null
+++ b/src/usr/local/www/diag_logs_dhcp.php
@@ -0,0 +1,115 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_dhcp.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: dhcpserver
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-dhcp
+##|*NAME=Diagnostics: Logs: DHCP page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: DHCP' page.
+##|*MATCH=diag_logs_dhcp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$dhcpd_logfile = "{$g['varlog_path']}/dhcpd.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($dhcpd_logfile);
+ killbyname("dhcpd");
+ services_dhcpd_configure();
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("DHCP"));
+$shortcut_section = "dhcp";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs dhcp">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), true, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Last %s DHCP service log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($dhcpd_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_dhcp.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?= gettext("Clear log");?>" />
+ </form>
+ </td>
+ <td>NOTE: Clearing the log file will restart the DHCP daemon.</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_filter.php b/src/usr/local/www/diag_logs_filter.php
new file mode 100644
index 0000000..b583035
--- /dev/null
+++ b/src/usr/local/www/diag_logs_filter.php
@@ -0,0 +1,503 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_filter.php
+ part of pfSense
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2009 Manuel Kasper <mk@neon1.net>,
+ Jim Pingle jim@pingle.org
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-firewall
+##|*NAME=Diagnostics: Logs: Firewall page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: Firewall' page.
+##|*MATCH=diag_logs_filter.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter_log.inc");
+
+# --- AJAX RESOLVE ---
+if (isset($_POST['resolve'])) {
+ $ip = strtolower($_POST['resolve']);
+ $res = (is_ipaddr($ip) ? gethostbyaddr($ip) : '');
+
+ if ($res && $res != $ip) {
+ $response = array('resolve_ip' => $ip, 'resolve_text' => $res);
+ } else {
+ $response = array('resolve_ip' => $ip, 'resolve_text' => gettext("Cannot resolve"));
+ }
+
+ echo json_encode(str_replace("\\", "\\\\", $response)); // single escape chars can break JSON decode
+ exit;
+}
+
+function getGETPOSTsettingvalue($settingname, $default) {
+ $settingvalue = $default;
+ if ($_GET[$settingname]) {
+ $settingvalue = $_GET[$settingname];
+ }
+ if ($_POST[$settingname]) {
+ $settingvalue = $_POST[$settingname];
+ }
+ return $settingvalue;
+}
+
+$rulenum = getGETPOSTsettingvalue('getrulenum', null);
+if ($rulenum) {
+ list($rulenum, $tracker, $type) = explode(',', $rulenum);
+ $rule = find_rule_by_number($rulenum, $tracker, $type);
+ echo gettext("The rule that triggered this action is") . ":\n\n{$rule}";
+ exit;
+}
+
+$filtersubmit = getGETPOSTsettingvalue('filtersubmit', null);
+if ($filtersubmit) {
+ $interfacefilter = getGETPOSTsettingvalue('interface', null);
+ $filtertext = getGETPOSTsettingvalue('filtertext', "");
+ $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
+}
+
+$filterlogentries_submit = getGETPOSTsettingvalue('filterlogentries_submit', null);
+if ($filterlogentries_submit) {
+ $filterfieldsarray = array();
+
+ $actpass = getGETPOSTsettingvalue('actpass', null);
+ $actblock = getGETPOSTsettingvalue('actblock', null);
+
+ $filterfieldsarray['act'] = str_replace(" ", " ", trim($actpass . " " . $actblock));
+ $filterfieldsarray['act'] = $filterfieldsarray['act'] != "" ? $filterfieldsarray['act'] : 'All';
+ $filterfieldsarray['time'] = getGETPOSTsettingvalue('filterlogentries_time', null);
+ $filterfieldsarray['interface'] = getGETPOSTsettingvalue('filterlogentries_interfaces', null);
+ $filterfieldsarray['srcip'] = getGETPOSTsettingvalue('filterlogentries_sourceipaddress', null);
+ $filterfieldsarray['srcport'] = getGETPOSTsettingvalue('filterlogentries_sourceport', null);
+ $filterfieldsarray['dstip'] = getGETPOSTsettingvalue('filterlogentries_destinationipaddress', null);
+ $filterfieldsarray['dstport'] = getGETPOSTsettingvalue('filterlogentries_destinationport', null);
+ $filterfieldsarray['proto'] = getGETPOSTsettingvalue('filterlogentries_protocol', null);
+ $filterfieldsarray['tcpflags'] = getGETPOSTsettingvalue('filterlogentries_protocolflags', null);
+ $filterlogentries_qty = getGETPOSTsettingvalue('filterlogentries_qty', null);
+}
+
+$filter_logfile = "{$g['varlog_path']}/filter.log";
+
+$nentries = $config['syslog']['nentries'];
+
+# Override Display Quantity
+if ($filterlogentries_qty) {
+ $nentries = $filterlogentries_qty;
+}
+
+if (!$nentries || !is_numeric($nentries)) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($filter_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Firewall"));
+$shortcut_section = "firewall";
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script src="/javascript/filter_log.js" type="text/javascript"></script>
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Normal View"), true, "/diag_logs_filter.php");
+ $tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
+ $tab_array[] = array(gettext("Summary View"), false, "/diag_logs_filter_summary.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" style="sortableMultirow:<?=$config['syslog']['filterdescriptions'] === "2"?2:1?>" summary="main area">
+ <tr>
+ <td colspan="<?=(!isset($config['syslog']['rawfilter']))?7:2?>" align="left" valign="middle">
+ <div id="filterlogentries_show" class="widgetconfigdiv" style="<?=(!isset($config['syslog']['rawfilter']))?"":"display:none"?>">
+ <form id="filterlogentries" name="filterlogentries" action="diag_logs_filter.php" method="post">
+ <?php
+ $Include_Act = explode(",", str_replace(" ", ",", $filterfieldsarray['act']));
+ if ($filterfieldsarray['interface'] == "All") $interface = "";
+ ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="action">
+ <tr>
+ <td rowspan="2">
+ <div align="center"><?=gettext("Action");?></div>
+ <div align="left">
+ <input id="actpass" name="actpass" type="checkbox" value="Pass" <?php if (in_arrayi('Pass', $Include_Act)) echo "checked=\"checked\""; ?> /> Pass<br />
+ <input id="actblock" name="actblock" type="checkbox" value="Block" <?php if (in_arrayi('Block', $Include_Act)) echo "checked=\"checked\""; ?> /> Block<br />
+ </div>
+ </td>
+ <td>
+ <div align="center"><?=gettext("Time");?></div>
+ <div align="center"><input id="filterlogentries_time" name="filterlogentries_time" class="formfld search" type="text" size="12" value="<?= htmlspecialchars($filterfieldsarray['time']) ?>" /></div>
+ </td>
+ <td>
+ <div align="center"><?=gettext("Source IP Address");?></div>
+ <div align="center"><input id="filterlogentries_sourceipaddress" name="filterlogentries_sourceipaddress" class="formfld search" type="text" size="35" value="<?= htmlspecialchars($filterfieldsarray['srcip']) ?>" /></div>
+ </td>
+ <td>
+ <div align="center"><?=gettext("Source Port");?></div>
+ <div align="center"><input id="filterlogentries_sourceport" name="filterlogentries_sourceport" class="formfld search" type="text" size="10" value="<?= htmlspecialchars($filterfieldsarray['srcport']) ?>" /></div>
+ </td>
+ <td>
+ <div align="center"><?=gettext("Protocol");?></div>
+ <div align="center"><input id="filterlogentries_protocol" name="filterlogentries_protocol" class="formfld search" type="text" size="5" value="<?= htmlspecialchars($filterfieldsarray['proto']) ?>" /></div>
+ </td>
+ <td>
+ <div align="center" style="vertical-align:top;"><?=gettext("Quantity");?></div>
+ <div align="center" style="vertical-align:top;"><input id="filterlogentries_qty" name="filterlogentries_qty" class="" type="text" size="6" value="<?= htmlspecialchars($filterlogentries_qty) ?>" /></div>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div align="center"><?=gettext("Interface");?></div>
+ <div align="center"><input id="filterlogentries_interfaces" name="filterlogentries_interfaces" class="formfld search" type="text" size="12" value="<?= htmlspecialchars($filterfieldsarray['interface']) ?>" /></div>
+ </td>
+ <td valign="top">
+ <div align="center"><?=gettext("Destination IP Address");?></div>
+ <div align="center"><input id="filterlogentries_destinationipaddress" name="filterlogentries_destinationipaddress" class="formfld search" type="text" size="35" value="<?= htmlspecialchars($filterfieldsarray['dstip']) ?>" /></div>
+ </td>
+ <td valign="top">
+ <div align="center"><?=gettext("Destination Port");?></div>
+ <div align="center"><input id="filterlogentries_destinationport" name="filterlogentries_destinationport" class="formfld search" type="text" size="10" value="<?= htmlspecialchars($filterfieldsarray['dstport']) ?>" /></div>
+ </td>
+ <td valign="top">
+ <div align="center"><?=gettext("Protocol Flags");?></div>
+ <div align="center"><input id="filterlogentries_protocolflags" name="filterlogentries_protocolflags" class="formfld search" type="text" size="5" value="<?= htmlspecialchars($filterfieldsarray['tcpflags']) ?>" /></div>
+ </td>
+ <td valign="bottom">
+ <div align="center"><input id="filterlogentries_submit" name="filterlogentries_submit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" /></div>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td colspan="5">
+ <?printf(gettext('Matches %1$s regular expression%2$s.'), '<a target="_blank" href="http://www.php.net/manual/en/book.pcre.php">', '</a>');?>&nbsp;&nbsp;
+ <?=gettext("Precede with exclamation (!) as first character to exclude match.");?>&nbsp;&nbsp;
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ <div id="filterform_show" class="widgetconfigdiv" style="<?=(!isset($config['syslog']['rawfilter']))?"display:none":""?>">
+ <form id="filterform" name="filterform" action="diag_logs_filter.php" method="post">
+ <table width="0%" border="0" cellpadding="0" cellspacing="0" summary="firewall log">
+ <tr>
+ <td>
+ <div align="center" style="vertical-align:top;"><?=gettext("Interface");?></div>
+ <div align="center" style="vertical-align:top;">
+ <select name="interface" onchange="dst_change(this.value,iface_old,document.iform.dsttype.value);iface_old = document.iform.interface.value;typesel_change();">
+ <option value="" <?=$interfacefilter?"":"selected=\"selected\""?>>*Any interface</option>
+<?php
+ $iflist = get_configured_interface_with_descr(false, true);
+ //$iflist = get_interface_list();
+ // Allow extending of the firewall edit interfaces
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_interfaces_edit");
+ foreach ($iflist as $if => $ifdesc) {
+ $interfaces[$if] = $ifdesc;
+ }
+
+ if ($config['l2tp']['mode'] == "server") {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+
+ if ($config['pptpd']['mode'] == "server") {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+
+ if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ $interfaces["enc0"] = "IPsec";
+ }
+
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+
+ foreach ($interfaces as $iface => $ifacename):
+?>
+ <option value="<?=$iface;?>" <?=($iface == $interfacefilter)?"selected=\"selected\"":"";?>><?=htmlspecialchars($ifacename);?></option>
+<?php
+ endforeach;
+?>
+ </select>
+ </div>
+ </td>
+ <td>
+ <div align="center" style="vertical-align:top;"><?=gettext("Filter expression");?></div>
+ <div align="center" style="vertical-align:top;"><input id="filtertext" name="filtertext" class="formfld search" style="vertical-align:top;" type="text" size="35" value="<?= htmlspecialchars($filtertext) ?>" /></div>
+ </td>
+ <td>
+ <div align="center" style="vertical-align:top;"><?=gettext("Quantity");?></div>
+ <div align="center" style="vertical-align:top;"><input id="filterlogentries_qty" name="filterlogentries_qty" class="" style="vertical-align:top;" type="text" size="6" value="<?= htmlspecialchars($filterlogentries_qty) ?>" /></div>
+ </td>
+ <td>
+ <div align="center" style="vertical-align:top;">&nbsp;</div>
+ <div align="center" style="vertical-align:top;"><input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" style="vertical-align:top;" value="<?=gettext("Filter");?>" /></div>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td colspan="2">
+ <?printf(gettext('Matches %1$s regular expression%2$s.'), '<a target="_blank" href="http://www.php.net/manual/en/book.pcre.php">', '</a>');?>&nbsp;&nbsp;
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ <div style="float: right; vertical-align:middle">
+ <br />
+ <?php if (!isset($config['syslog']['rawfilter']) && (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2")):?>
+ <a href="#" onclick="toggleListDescriptions()">Show/hide rule descriptions</a>
+ <?php endif;?>
+ </div>
+ </td>
+ </tr>
+<?php
+ if (!isset($config['syslog']['rawfilter'])):
+ $iflist = get_configured_interface_with_descr(false, true);
+ if ($iflist[$interfacefilter]) {
+ $interfacefilter = $iflist[$interfacefilter];
+ }
+ if ($filterlogentries_submit) {
+ $filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100, $filterfieldsarray);
+ } else {
+ $filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100, $filtertext, $interfacefilter);
+ }
+?>
+ <tr>
+ <td colspan="<?=$config['syslog']['filterdescriptions'] === "1"?7:6?>" class="listtopic">
+<?php
+ if ((!$filtertext) && (!$filterfieldsarray)) {
+ printf(gettext("Last %s firewall log entries."), count($filterlog));
+ } else {
+ echo count($filterlog). ' ' . gettext("matched log entries.") . ' ';
+ }
+ printf(gettext("Max(%s)"), $nentries);
+?>
+ </td>
+ </tr>
+ <tr class="sortableHeaderRowIdentifier">
+ <td width="10%" class="listhdrr"><?=gettext("Act");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Time");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("If");?></td>
+ <?php if ($config['syslog']['filterdescriptions'] === "1"):?>
+ <td width="10%" class="listhdrr"><?=gettext("Rule");?></td>
+ <?php endif;?>
+ <td width="25%" class="listhdrr"><?=gettext("Source");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Destination");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Proto");?></td>
+ </tr>
+<?php
+ if ($config['syslog']['filterdescriptions']) {
+ buffer_rules_load();
+ }
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
+?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr nowrap" align="center" sorttable_customkey="<?=$filterent['act']?>">
+ <center>
+ <a onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
+ <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" align="middle" alt="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" title="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" />
+ <?php if ($filterent['count']) echo $filterent['count'];?>
+ </a>
+ </center>
+ </td>
+ <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
+ <td class="listMRr nowrap">
+ <?php if ($filterent['direction'] == "out"): ?>
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/out.gif" alt="Direction=OUT" title="Direction=OUT"/>
+ <?php endif; ?>
+ <?php echo htmlspecialchars($filterent['interface']);?>
+ </td>
+<?php
+ if ($config['syslog']['filterdescriptions'] === "1") {
+ echo("<td class=\"listMRr nowrap\">" . find_rule_by_number_buffer($filterent['rulenum'], $filterent['tracker'], $filterent['act']) . "</td>");
+ }
+
+ $int = strtolower($filterent['interface']);
+ $proto = strtolower($filterent['proto']);
+ if ($filterent['version'] == '6') {
+ $ipproto = "inet6";
+ $filterent['srcip'] = "[{$filterent['srcip']}]";
+ $filterent['dstip'] = "[{$filterent['dstip']}]";
+ } else {
+ $ipproto = "inet";
+ }
+
+ $srcstr = $filterent['srcip'] . get_port_with_service($filterent['srcport'], $proto);
+ $src_htmlclass = str_replace(array('.', ':'), '-', $filterent['srcip']);
+ $dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto);
+ $dst_htmlclass = str_replace(array('.', ':'), '-', $filterent['dstip']);
+?>
+ <td class="listMRr nowrap">
+ <img onclick="javascript:resolve_with_ajax('<?php echo "{$filterent['srcip']}"; ?>');" title="<?=gettext("Click to resolve");?>" class="ICON-<?= $src_htmlclass; ?>" border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/>
+ <a href="easyrule.php?<?php echo "action=block&amp;int={$int}&amp;src={$filterent['srcip']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")?>')">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif" alt="Icon Easy Rule: Add to Block List" />
+ </a>
+ <?php echo $srcstr . '<span class="RESOLVE-' . $src_htmlclass . '"></span>';?>
+ </td>
+ <td class="listMRr nowrap">
+ <img onclick="javascript:resolve_with_ajax('<?php echo "{$filterent['dstip']}"; ?>');" title="<?=gettext("Click to resolve");?>" class="ICON-<?= $dst_htmlclass; ?>" border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" alt="Icon Reverse Resolve with DNS"/>
+ <a href="easyrule.php?<?php echo "action=pass&amp;int={$int}&amp;proto={$proto}&amp;src={$filterent['srcip']}&amp;dst={$filterent['dstip']}&amp;dstport={$filterent['dstport']}&amp;ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")?>')">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_pass_add.gif" alt="Icon Easy Rule: Pass this traffic" />
+ </a>
+ <?php echo $dststr . '<span class="RESOLVE-' . $dst_htmlclass . '"></span>';?>
+ </td>
+<?php
+ if ($filterent['proto'] == "TCP") {
+ $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ }
+?>
+ <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
+ </tr>
+<?php
+ if (isset($config['syslog']['filterdescriptions']) && $config['syslog']['filterdescriptions'] === "2"):
+?>
+ <tr class="<?=$evenRowClass?>">
+ <td colspan="2" class="listMRDescriptionL listMRlr" />
+ <td colspan="4" class="listMRDescriptionR listMRr nowrap"><?=find_rule_by_number_buffer($filterent['rulenum'], $filterent['tracker'], $filterent['act']);?></td>
+ </tr>
+<?php
+ endif;
+ endforeach;
+ buffer_rules_clear();
+ else:
+?>
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Last %s firewall log entries"), $nentries);?>
+ </td>
+ </tr>
+<?php
+ if ($filtertext) {
+ dump_clog($filter_logfile, $nentries, true, array("$filtertext"));
+ } else {
+ dump_clog($filter_logfile, $nentries);
+ }
+ endif;
+?>
+ <tr>
+ <td align="left" valign="top" colspan="3">
+ <form id="clearform" name="clearform" action="diag_logs_filter.php" method="post" style="margin-top: 14px;">
+ <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<p><span class="vexpl"><a href="https://doc.pfsense.org/index.php/What_are_TCP_Flags%3F">TCP Flags</a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, W - CWR</span></p>
+
+<?php include("fend.inc"); ?>
+
+<!-- AJAXY STUFF -->
+<script type="text/javascript">
+//<![CDATA[
+function resolve_with_ajax(ip_to_resolve) {
+ var url = "/diag_logs_filter.php";
+
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ dataType: 'json',
+ data: {
+ resolve: ip_to_resolve,
+ },
+ complete: resolve_ip_callback
+ });
+
+}
+
+function resolve_ip_callback(transport) {
+ var response = jQuery.parseJSON(transport.responseText);
+ var resolve_class = htmlspecialchars(response.resolve_ip.replace(/[.:]/g, '-'));
+ var resolve_text = '<small><br />' + htmlspecialchars(response.resolve_text) + '<\/small>';
+
+ jQuery('span.RESOLVE-' + resolve_class).html(resolve_text);
+ jQuery('img.ICON-' + resolve_class).removeAttr('title');
+ jQuery('img.ICON-' + resolve_class).removeAttr('alt');
+ jQuery('img.ICON-' + resolve_class).attr('src', '/themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif');
+ jQuery('img.ICON-' + resolve_class).prop('onclick', null);
+ // jQuery cautions that "removeAttr('onclick')" fails in some versions of IE
+}
+
+// From http://stackoverflow.com/questions/5499078/fastest-method-to-escape-html-tags-as-html-entities
+function htmlspecialchars(str) {
+ return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
+}
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_filter_dynamic.php b/src/usr/local/www/diag_logs_filter_dynamic.php
new file mode 100755
index 0000000..16ced9f
--- /dev/null
+++ b/src/usr/local/www/diag_logs_filter_dynamic.php
@@ -0,0 +1,223 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_filter_dynamic.php
+ part of pfSesne
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-hidden-nolongerincluded
+##|*NAME=Hidden: No longer included page
+##|*DESCR=Allow access to the 'Hidden: No longer included' page.
+##|*MATCH=diag_logs_filter_dynamic.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter_log.inc");
+
+$filter_logfile = "{$g['varlog_path']}/filter.log";
+
+/* Hardcode this. AJAX doesn't do so well with large numbers */
+$nentries = 50;
+
+/* AJAX related routines */
+handle_ajax($nentries, $nentries + 20);
+
+if ($_POST['clear']) {
+ clear_log_file($filter_logfile);
+}
+
+$filterlog = conv_log_filter($filter_logfile, $nentries, $nentries + 100);
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Firewall (Dynamic View)"));
+$shortcut_section = "firewall";
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+ lastsawtime = '<?php echo time(); ?>;';
+ var lines = Array();
+ var timer;
+ var updateDelay = 25500;
+ var isBusy = false;
+ var isPaused = false;
+ var nentries = <?php echo $nentries; ?>;
+<?php
+ if (isset($config['syslog']['reverse'])) {
+ echo "var isReverse = true;\n";
+ } else {
+ echo "var isReverse = false;\n";
+ }
+?>
+ /* Called by the AJAX updater */
+ function format_log_line(row) {
+ if (row[8] == '6') {
+ srcIP = '[' + row[3] + ']';
+ dstIP = '[' + row[5] + ']';
+ } else {
+ srcIP = row[3];
+ dstIP = row[5];
+ }
+
+ if (row[4] == '') {
+ srcPort = '';
+ } else {
+ srcPort = ':' + row[4];
+ }
+ if (row[6] == '') {
+ dstPort = '';
+ } else {
+ dstPort = ':' + row[6];
+ }
+
+ var line = '<td class="listMRlr" align="center">' + row[0] + '</td>' +
+ '<td class="listMRr nowrap">' + row[1] + '</td>' +
+ '<td class="listMRr nowrap">' + row[2] + '</td>' +
+ '<td class="listMRr nowrap">' + srcIP + srcPort + '</td>' +
+ '<td class="listMRr nowrap">' + dstIP + dstPort + '</td>' +
+ '<td class="listMRr nowrap">' + row[7] + '</td>';
+ return line;
+ }
+//]]>
+</script>
+<script src="/javascript/filter_log.js" type="text/javascript"></script>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter dynamic">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
+ $tab_array[] = array(gettext("Dynamic View"), true, "/diag_logs_filter_dynamic.php");
+ $tab_array[] = array(gettext("Summary View"), false, "/diag_logs_filter_summary.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <thead>
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?php printf(gettext("Last %s records"), $nentries);?>; <?=gettext("Pause:");?><input style="vertical-align:middle;" type="checkbox" onclick="javascript:toggle_pause();" />
+ </td>
+ </tr>
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Act");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Time");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("If");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Source");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Destination");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Proto");?></td>
+ </tr>
+ </thead>
+ <tbody id="filter-log-entries">
+<?php
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
+ if ($filterent['version'] == '6') {
+ $srcIP = "[" . htmlspecialchars($filterent['srcip']) . "]";
+ $dstIP = "[" . htmlspecialchars($filterent['dstip']) . "]";
+ } else {
+ $srcIP = htmlspecialchars($filterent['srcip']);
+ $dstIP = htmlspecialchars($filterent['dstip']);
+ }
+
+ if ($filterent['srcport']) {
+ $srcPort = ":" . htmlspecialchars($filterent['srcport']);
+ } else {
+ $srcPort = "";
+ }
+
+ if ($filterent['dstport']) {
+ $dstPort = ":" . htmlspecialchars($filterent['dstport']);
+ } else {
+ $dstPort = "";
+ }
+?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr nowrap" align="center">
+ <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
+ <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" title="<?php echo $filterent['act'] .'/'. $filterent['tracker'];?>" />
+ </a>
+ </td>
+ <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
+ <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['interface']);?></td>
+ <td class="listMRr nowrap"><?php echo $srcIP . $srcPort;?></td>
+ <td class="listMRr nowrap"><?php echo $dstIP . $dstPort;?></td>
+ <?php
+ if ($filterent['proto'] == "TCP") {
+ $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ }
+ ?>
+ <td class="listMRr nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
+ </tr>
+<?php
+ endforeach;
+?>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<p><span class="vexpl"><a href="https://doc.pfsense.org/index.php/What_are_TCP_Flags%3F"><?=gettext("TCP Flags"); ?></a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, C - CWR</span></p>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_filter_summary.php b/src/usr/local/www/diag_logs_filter_summary.php
new file mode 100644
index 0000000..331df0d
--- /dev/null
+++ b/src/usr/local/www/diag_logs_filter_summary.php
@@ -0,0 +1,249 @@
+<?php
+/*
+ diag_logs_filter_summary.php
+ Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES:
+ pfSense_MODULE: filter
+*/
+
+$pgtitle = gettext("Status").": ".gettext("System logs").": ".gettext("Firewall Log Summary");
+$shortcut_section = "firewall";
+require_once("guiconfig.inc");
+include_once("filter_log.inc");
+
+$filter_logfile = "{$g['varlog_path']}/filter.log";
+$lines = 5000;
+$entriesperblock = 5;
+
+$filterlog = conv_log_filter($filter_logfile, $lines, $lines);
+$gotlines = count($filterlog);
+$fields = array(
+ 'act' => gettext("Actions"),
+ 'interface' => gettext("Interfaces"),
+ 'proto' => gettext("Protocols"),
+ 'srcip' => gettext("Source IPs"),
+ 'dstip' => gettext("Destination IPs"),
+ 'srcport' => gettext("Source Ports"),
+ 'dstport' => gettext("Destination Ports"));
+
+$summary = array();
+foreach (array_keys($fields) as $f) {
+ $summary[$f] = array();
+}
+
+$totals = array();
+
+function cmp($a, $b) {
+ if ($a == $b) {
+ return 0;
+ }
+ return ($a < $b) ? 1 : -1;
+}
+
+function stat_block($summary, $stat, $num) {
+ global $g, $gotlines, $fields;
+ uasort($summary[$stat] , 'cmp');
+ print "<table width=\"200\" cellpadding=\"3\" cellspacing=\"0\" border=\"1\" summary=\"source destination ip\">";
+ print "<tr><th colspan=\"2\">{$fields[$stat]} ".gettext("data")."</th></tr>";
+ $k = array_keys($summary[$stat]);
+ $total = 0;
+ $numentries = 0;
+ for ($i = 0; $i < $num; $i++) {
+ if ($k[$i]) {
+ $total += $summary[$stat][$k[$i]];
+ $numentries++;
+ $outstr = $k[$i];
+ if (is_ipaddr($outstr)) {
+ $outstr = "<a href=\"diag_dns.php?host={$outstr}\" title=\"".gettext("Reverse Resolve with DNS")."\"><img border=\"0\" src=\"/themes/{$g['theme']}/images/icons/icon_log.gif\" alt=\"log\" /></a> {$outstr}";
+ } elseif (substr_count($outstr, '/') == 1) {
+ list($proto, $port) = explode('/', $outstr);
+ $service = getservbyport($port, strtolower($proto));
+ if ($service) {
+ $outstr .= ": {$service}";
+ }
+ }
+ print "<tr><td>{$outstr}</td><td width=\"50\" align=\"right\">{$summary[$stat][$k[$i]]}</td></tr>";
+ }
+ }
+ $leftover = $gotlines - $total;
+ if ($leftover > 0) {
+ print "<tr><td>Other</td><td width=\"50\" align=\"right\">{$leftover}</td></tr>";
+ }
+ print "</table>";
+}
+
+function pie_block($summary, $stat, $num) {
+ global $gotlines, $fields;
+ uasort($summary[$stat] , 'cmp');
+ $k = array_keys($summary[$stat]);
+ $total = 0;
+ $numentries = 0;
+ print "\n<script type=\"text/javascript\">\n";
+ print "//<![CDATA[\n";
+ for ($i = 0; $i < $num; $i++) {
+ if ($k[$i]) {
+ $total += $summary[$stat][$k[$i]];
+ $numentries++;
+ print "var d{$stat}{$i} = [];\n";
+ print "d{$stat}{$i}.push([1, {$summary[$stat][$k[$i]]}]);\n";
+ }
+ }
+ $leftover = $gotlines - $total;
+ if ($leftover > 0) {
+ print "var d{$stat}{$num} = [];\n";
+ print "d{$stat}{$num}.push([1, {$leftover}]);\n";
+ }
+
+ print "Event.observe(window, 'load', function() {\n";
+ print " new Proto.Chart($('piechart{$stat}'),\n";
+ print " [\n";
+ for ($i = 0; $i < $num; $i++) {
+ if ($k[$i]) {
+ print " { data: d{$stat}{$i}, label: \"{$k[$i]}\"}";
+ if (!(($i == ($numentries - 1)) && ($leftover <= 0))) {
+ print ",\n";
+ } else {
+ print "\n";
+ }
+ }
+ }
+ if ($leftover > 0) {
+ print " { data: d{$stat}{$i}, label: \"Other\"}\n";
+ }
+ print " ],\n";
+ print " {\n";
+ print " pies: {show: true, autoScale: true},\n";
+ print " legend: {show: true, labelFormatter: lblfmt}\n";
+ print " });\n";
+ print "});\n";
+ print "//]]>\n";
+ print "</script>\n";
+ print "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\" summary=\"pie chart\">";
+ print "<tr><th><font size=\"+1\">{$fields[$stat]}</font></th></tr>";
+ print "<tr><td><div id=\"piechart{$stat}\" style=\"width:450px;height:300px\"></div></td></tr>";
+ print "</table>\n";
+}
+
+foreach ($filterlog as $fe) {
+ $specialfields = array('srcport', 'dstport');
+ foreach (array_keys($fields) as $field) {
+ if (!in_array($field, $specialfields)) {
+ $summary[$field][$fe[$field]]++;
+ }
+ }
+ /* Handle some special cases */
+ if ($fe['srcport']) {
+ $summary['srcport'][$fe['proto'].'/'.$fe['srcport']]++;
+ } else {
+ $summary['srcport'][$fe['srcport']]++;
+ }
+ if ($fe['dstport']) {
+ $summary['dstport'][$fe['proto'].'/'.$fe['dstport']]++;
+ } else {
+ $summary['dstport'][$fe['dstport']]++;
+ }
+}
+
+include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script src="/javascript/filter_log.js" type="text/javascript"></script>
+<script type="text/javascript" src="/protochart/prototype.js"></script>
+<script type="text/javascript" src="/protochart/ProtoChart.js"></script>
+<!--[if IE]>
+<script type="text/javascript" src="/protochart/excanvas.js">
+</script>
+<![endif]-->
+<script type="text/javascript">
+//<![CDATA[
+ function lblfmt(lbl) {
+ return '<font size=\"-2\">' + lbl + '<\/font>'
+ }
+//]]>
+</script>
+
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter summary">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
+ $tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
+ $tab_array[] = array(gettext("Summary View"), true, "/diag_logs_filter_summary.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" align="center" summary="main area">
+ <tr>
+ <td align="center">
+
+<?php printf (gettext('This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s).'), $gotlines, $lines)?><br />
+<?=gettext("NOTE: IE8 users must enable compatibility view.")?>
+
+<?php
+foreach (array_keys($fields) as $field) {
+ pie_block($summary, $field , $entriesperblock);
+ echo "<br /><br />";
+ stat_block($summary, $field , $entriesperblock);
+ echo "<br /><br />";
+}
+?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_gateways.php b/src/usr/local/www/diag_logs_gateways.php
new file mode 100755
index 0000000..bb88615
--- /dev/null
+++ b/src/usr/local/www/diag_logs_gateways.php
@@ -0,0 +1,147 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_gateways.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2012 Seth Mos
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-gateways
+##|*NAME=Diagnostics: Logs: System: Gateways page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Gateways' page.
+##|*MATCH=diag_logs_gateways.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$system_logfile = "{$g['varlog_path']}/gateways.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($system_logfile);
+}
+
+if ($_GET['filtertext']) {
+ $filtertext = htmlspecialchars($_GET['filtertext']);
+}
+
+if ($_POST['filtertext']) {
+ $filtertext = htmlspecialchars($_POST['filtertext']);
+}
+
+if ($filtertext) {
+ $filtertextmeta="?filtertext=$filtertext";
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Gateways"));
+$shortcut_section = "gateways";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system gateways">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), true, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
+ $tab_array[] = array(gettext("Gateways"), true, "/diag_logs_gateways.php");
+ $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
+ $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
+ $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
+ </tr>
+ <?php
+ if ($filtertext) {
+ dump_clog($system_logfile, $nentries, true, array("$filtertext"));
+ } else {
+ dump_clog($system_logfile, $nentries, true, array());
+ }
+ ?>
+ <tr>
+ <td align="left" valign="top">
+ <form id="filterform" name="filterform" action="diag_logs_gateways.php" method="post" style="margin-top: 14px;">
+ <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
+ </form>
+ </td>
+ <td align="right" valign="top" >
+ <form id="clearform" name="clearform" action="diag_logs_gateways.php" method="post" style="margin-top: 14px;">
+ <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
+ <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_ipsec.php b/src/usr/local/www/diag_logs_ipsec.php
new file mode 100644
index 0000000..8fa79ce
--- /dev/null
+++ b/src/usr/local/www/diag_logs_ipsec.php
@@ -0,0 +1,123 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_ipsec.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk
+ pfSense_MODULE: ipsec
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-ipsecvpn
+##|*NAME=Status: System logs: IPsec VPN page
+##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page.
+##|*MATCH=diag_logs_ipsec.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("ipsec.inc");
+
+$ipsec_logfile = "{$g['varlog_path']}/ipsec.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($ipsec_logfile);
+}
+
+$ipsec_logarr = return_clog($ipsec_logfile, $nentries);
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("IPsec VPN"));
+$shortcut_section = "ipsec";
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ipsec">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), true, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s IPsec log entries"), $nentries);?></td>
+ </tr>
+ <?php
+ foreach ($ipsec_logarr as $logent) {
+ $logent = htmlspecialchars($logent);
+ $logent = preg_split("/\s+/", $logent, 6);
+ echo "<tr valign=\"top\">\n";
+ $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3)));
+ echo "<td class=\"listlr nowrap\">" . $entry_date_time . "</td>\n";
+ echo "<td class=\"listr\">" . $logent[4] . " " . $logent[5] . "</td>\n";
+ echo "</tr>\n";
+ }
+ ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_ipsec.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_ntpd.php b/src/usr/local/www/diag_logs_ntpd.php
new file mode 100644
index 0000000..d9f6bf5
--- /dev/null
+++ b/src/usr/local/www/diag_logs_ntpd.php
@@ -0,0 +1,110 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_ntpd.php
+ part of pfSense
+ Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: ntpd
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-ntpd
+##|*NAME=Status: System logs: NTP page
+##|*DESCR=Allow access to the 'Status: System logs: NTP' page.
+##|*MATCH=diag_logs_ntpd.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$ntpd_logfile = "{$g['varlog_path']}/ntpd.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($ntpd_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("NTP"));
+$shortcut_section = "ntp";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ntpd">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), true, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Last %s NTP log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($ntpd_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_ntpd.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_openvpn.php b/src/usr/local/www/diag_logs_openvpn.php
new file mode 100644
index 0000000..374014d
--- /dev/null
+++ b/src/usr/local/www/diag_logs_openvpn.php
@@ -0,0 +1,111 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_openvpn.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: openvpn
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-openvpn
+##|*NAME=Status: System logs: OpenVPN page
+##|*DESCR=Allow access to the 'Status: System logs: OpenVPN' page.
+##|*MATCH=diag_logs_openvpn.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("OpenVPN"));
+$shortcut_section = "openvpn";
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+$openvpn_logfile = "{$g['varlog_path']}/openvpn.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($openvpn_logfile);
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs openvpn">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), true, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s OpenVPN log entries"), $nentries)?></td>
+ </tr>
+ <?php dump_clog($openvpn_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_openvpn.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_ppp.php b/src/usr/local/www/diag_logs_ppp.php
new file mode 100644
index 0000000..4ef3f9c
--- /dev/null
+++ b/src/usr/local/www/diag_logs_ppp.php
@@ -0,0 +1,109 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_ppp.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk
+ pfSense_MODULE:
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-ppp
+##|*NAME=Status: System logs: IPsec VPN page
+##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page.
+##|*MATCH=diag_logs_ppp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$ppp_logfile = "{$g['varlog_path']}/ppp.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($ppp_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("PPP"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs ppp">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), true, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s PPP log entries"), $nentries);?></td>
+ </tr>
+ <?php dump_clog($ppp_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_ppp.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_relayd.php b/src/usr/local/www/diag_logs_relayd.php
new file mode 100644
index 0000000..5468761
--- /dev/null
+++ b/src/usr/local/www/diag_logs_relayd.php
@@ -0,0 +1,111 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_relayd.php
+ part of pfSense
+
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2008 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-loadbalancer
+##|*NAME=Status: System logs: Load Balancer page
+##|*DESCR=Allow access to the 'Status: System logs: Load Balancer' page.
+##|*MATCH=diag_logs_relayd.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$relayd_logfile = "{$g['varlog_path']}/relayd.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($relayd_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Load Balancer"));
+$shortcut_section = "relayd";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), true, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Last %s Load Balancer log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($relayd_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_relayd.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_resolver.php b/src/usr/local/www/diag_logs_resolver.php
new file mode 100755
index 0000000..73e39a9
--- /dev/null
+++ b/src/usr/local/www/diag_logs_resolver.php
@@ -0,0 +1,152 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_resolver.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2012 Seth Mos
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-resolver
+##|*NAME=Diagnostics: Logs: System: Resolver page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: System: Resolver' page.
+##|*MATCH=diag_logs_resolver.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$system_logfile = "{$g['varlog_path']}/resolver.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($system_logfile);
+}
+
+if ($_GET['filtertext']) {
+ $filtertext = htmlspecialchars($_GET['filtertext']);
+}
+
+if ($_POST['filtertext']) {
+ $filtertext = htmlspecialchars($_POST['filtertext']);
+}
+
+if ($filtertext) {
+ $filtertextmeta="?filtertext=$filtertext";
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Resolver"));
+if (isset($config['dnsmasq']['enable'])) {
+ $shortcut_section = "forwarder";
+} else {
+ $shortcut_section = "resolver";
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system resolver">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), true, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
+ $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
+ $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
+ $tab_array[] = array(gettext("Resolver"), true, "/diag_logs_resolver.php");
+ $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?php printf(gettext("Last %s system log entries"), $nentries); ?></td>
+ </tr>
+ <?php
+ if ($filtertext) {
+ dump_clog($system_logfile, $nentries, true, array("$filtertext"), array("ppp"));
+ } else {
+ dump_clog($system_logfile, $nentries, true, array(), array("ppp"));
+ }
+ ?>
+ <tr>
+ <td align="left" valign="top">
+ <form id="filterform" name="filterform" action="diag_logs_resolver.php" method="post" style="margin-top: 14px;">
+ <input id="submit" name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log");?>" />
+ </form>
+ </td>
+ <td align="right" valign="top" >
+ <form id="clearform" name="clearform" action="diag_logs_resolver.php" method="post" style="margin-top: 14px;">
+ <input id="filtertext" name="filtertext" value="<?=$filtertext;?>" />
+ <input id="filtersubmit" name="filtersubmit" type="submit" class="formbtn" value="<?=gettext("Filter");?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_routing.php b/src/usr/local/www/diag_logs_routing.php
new file mode 100644
index 0000000..debbf18
--- /dev/null
+++ b/src/usr/local/www/diag_logs_routing.php
@@ -0,0 +1,123 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_routing.php
+ part of pfSense
+
+ Copyright (C) 2012 Jim Pingle <jimp@pfsense.org>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-routing
+##|*NAME=Status: System logs: Routing page
+##|*DESCR=Allow access to the 'Status: System logs: System: Routing' page.
+##|*MATCH=diag_logs_routing.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$routing_logfile = "{$g['varlog_path']}/routing.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($routing_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Routing"));
+$shortcut_section = "routing";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system routing">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), true, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
+ $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
+ $tab_array[] = array(gettext("Routing"), true, "/diag_logs_routing.php");
+ $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
+ $tab_array[] = array(gettext("Wireless"), false, "/diag_logs_wireless.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Routing daemon log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($routing_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_routing.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_settings.php b/src/usr/local/www/diag_logs_settings.php
new file mode 100644
index 0000000..c9f2791
--- /dev/null
+++ b/src/usr/local/www/diag_logs_settings.php
@@ -0,0 +1,517 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_settings.php
+ Copyright (C) 2004-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-settings
+##|*NAME=Diagnostics: Logs: Settings page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: Settings' page.
+##|*MATCH=diag_logs_settings.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pconfig['reverse'] = isset($config['syslog']['reverse']);
+$pconfig['nentries'] = $config['syslog']['nentries'];
+$pconfig['remoteserver'] = $config['syslog']['remoteserver'];
+$pconfig['remoteserver2'] = $config['syslog']['remoteserver2'];
+$pconfig['remoteserver3'] = $config['syslog']['remoteserver3'];
+$pconfig['sourceip'] = $config['syslog']['sourceip'];
+$pconfig['ipproto'] = $config['syslog']['ipproto'];
+$pconfig['filter'] = isset($config['syslog']['filter']);
+$pconfig['dhcp'] = isset($config['syslog']['dhcp']);
+$pconfig['portalauth'] = isset($config['syslog']['portalauth']);
+$pconfig['vpn'] = isset($config['syslog']['vpn']);
+$pconfig['apinger'] = isset($config['syslog']['apinger']);
+$pconfig['relayd'] = isset($config['syslog']['relayd']);
+$pconfig['hostapd'] = isset($config['syslog']['hostapd']);
+$pconfig['logall'] = isset($config['syslog']['logall']);
+$pconfig['system'] = isset($config['syslog']['system']);
+$pconfig['enable'] = isset($config['syslog']['enable']);
+$pconfig['logdefaultblock'] = !isset($config['syslog']['nologdefaultblock']);
+$pconfig['logdefaultpass'] = isset($config['syslog']['nologdefaultpass']);
+$pconfig['logbogons'] = !isset($config['syslog']['nologbogons']);
+$pconfig['logprivatenets'] = !isset($config['syslog']['nologprivatenets']);
+$pconfig['loglighttpd'] = !isset($config['syslog']['nologlighttpd']);
+$pconfig['rawfilter'] = isset($config['syslog']['rawfilter']);
+$pconfig['filterdescriptions'] = $config['syslog']['filterdescriptions'];
+$pconfig['disablelocallogging'] = isset($config['syslog']['disablelocallogging']);
+$pconfig['logfilesize'] = $config['syslog']['logfilesize'];
+
+if (!$pconfig['nentries']) {
+ $pconfig['nentries'] = 50;
+}
+
+function is_valid_syslog_server($target) {
+ return (is_ipaddr($target)
+ || is_ipaddrwithport($target)
+ || is_hostname($target)
+ || is_hostnamewithport($target));
+}
+
+if ($_POST['resetlogs'] == gettext("Reset Log Files")) {
+ clear_all_log_files();
+ $savemsg .= gettext("The log files have been reset.");
+} elseif ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable'] && !is_valid_syslog_server($_POST['remoteserver'])) {
+ $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #1.");
+ }
+ if ($_POST['enable'] && $_POST['remoteserver2'] && !is_valid_syslog_server($_POST['remoteserver2'])) {
+ $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #2.");
+ }
+ if ($_POST['enable'] && $_POST['remoteserver3'] && !is_valid_syslog_server($_POST['remoteserver3'])) {
+ $input_errors[] = gettext("A valid IP address/hostname or IP/hostname:port must be specified for remote syslog server #3.");
+ }
+
+ if (($_POST['nentries'] < 5) || ($_POST['nentries'] > 2000)) {
+ $input_errors[] = gettext("Number of log entries to show must be between 5 and 2000.");
+ }
+
+ if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) {
+ if (!is_numeric($_POST['logfilesize']) || ($_POST['logfilesize'] < 100000)) {
+ $input_errors[] = gettext("Log file size must be numeric and greater than or equal to 100000.");
+ }
+ }
+ if (!$input_errors) {
+ $config['syslog']['reverse'] = $_POST['reverse'] ? true : false;
+ $config['syslog']['nentries'] = (int)$_POST['nentries'];
+ $pconfig['nentries'] = $config['syslog']['nentries'];
+ if (isset($_POST['logfilesize']) && (strlen($_POST['logfilesize']) > 0)) {
+ $config['syslog']['logfilesize'] = (int)$_POST['logfilesize'];
+ $pconfig['logfilesize'] = $config['syslog']['logfilesize'];
+ } else {
+ unset($config['syslog']['logfilesize']);
+ }
+ $config['syslog']['remoteserver'] = $_POST['remoteserver'];
+ $config['syslog']['remoteserver2'] = $_POST['remoteserver2'];
+ $config['syslog']['remoteserver3'] = $_POST['remoteserver3'];
+ $config['syslog']['sourceip'] = $_POST['sourceip'];
+ $config['syslog']['ipproto'] = $_POST['ipproto'];
+ $config['syslog']['filter'] = $_POST['filter'] ? true : false;
+ $config['syslog']['dhcp'] = $_POST['dhcp'] ? true : false;
+ $config['syslog']['portalauth'] = $_POST['portalauth'] ? true : false;
+ $config['syslog']['vpn'] = $_POST['vpn'] ? true : false;
+ $config['syslog']['apinger'] = $_POST['apinger'] ? true : false;
+ $config['syslog']['relayd'] = $_POST['relayd'] ? true : false;
+ $config['syslog']['hostapd'] = $_POST['hostapd'] ? true : false;
+ $config['syslog']['logall'] = $_POST['logall'] ? true : false;
+ $config['syslog']['system'] = $_POST['system'] ? true : false;
+ $config['syslog']['disablelocallogging'] = $_POST['disablelocallogging'] ? true : false;
+ $config['syslog']['enable'] = $_POST['enable'] ? true : false;
+ $oldnologdefaultblock = isset($config['syslog']['nologdefaultblock']);
+ $oldnologdefaultpass = isset($config['syslog']['nologdefaultpass']);
+ $oldnologbogons = isset($config['syslog']['nologbogons']);
+ $oldnologprivatenets = isset($config['syslog']['nologprivatenets']);
+ $oldnologlighttpd = isset($config['syslog']['nologlighttpd']);
+ $config['syslog']['nologdefaultblock'] = $_POST['logdefaultblock'] ? false : true;
+ $config['syslog']['nologdefaultpass'] = $_POST['logdefaultpass'] ? true : false;
+ $config['syslog']['nologbogons'] = $_POST['logbogons'] ? false : true;
+ $config['syslog']['nologprivatenets'] = $_POST['logprivatenets'] ? false : true;
+ $config['syslog']['nologlighttpd'] = $_POST['loglighttpd'] ? false : true;
+ $config['syslog']['rawfilter'] = $_POST['rawfilter'] ? true : false;
+ if (is_numeric($_POST['filterdescriptions']) && $_POST['filterdescriptions'] > 0) {
+ $config['syslog']['filterdescriptions'] = $_POST['filterdescriptions'];
+ } else {
+ unset($config['syslog']['filterdescriptions']);
+ }
+ if ($config['syslog']['enable'] == false) {
+ unset($config['syslog']['remoteserver']);
+ unset($config['syslog']['remoteserver2']);
+ unset($config['syslog']['remoteserver3']);
+ }
+
+ write_config();
+
+ $retval = 0;
+ $retval = system_syslogd_start();
+ if (($oldnologdefaultblock !== isset($config['syslog']['nologdefaultblock'])) ||
+ ($oldnologdefaultpass !== isset($config['syslog']['nologdefaultpass'])) ||
+ ($oldnologbogons !== isset($config['syslog']['nologbogons'])) ||
+ ($oldnologprivatenets !== isset($config['syslog']['nologprivatenets']))) {
+ $retval |= filter_configure();
+ }
+
+ $savemsg = get_std_save_message($retval);
+
+ if ($oldnologlighttpd !== isset($config['syslog']['nologlighttpd'])) {
+ ob_flush();
+ flush();
+ log_error(gettext("webConfigurator configuration has changed. Restarting webConfigurator."));
+ send_event("service restart webgui");
+ $savemsg .= "<br />" . gettext("WebGUI process is restarting.");
+ }
+
+ filter_pflog_start(true);
+ }
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Settings"));
+$closehead = false;
+include("head.inc");
+
+?>
+
+
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_over) {
+ if (document.iform.enable.checked || enable_over) {
+ document.iform.remoteserver.disabled = 0;
+ document.iform.remoteserver2.disabled = 0;
+ document.iform.remoteserver3.disabled = 0;
+ document.iform.filter.disabled = 0;
+ document.iform.dhcp.disabled = 0;
+ document.iform.portalauth.disabled = 0;
+ document.iform.vpn.disabled = 0;
+ document.iform.apinger.disabled = 0;
+ document.iform.relayd.disabled = 0;
+ document.iform.hostapd.disabled = 0;
+ document.iform.system.disabled = 0;
+ document.iform.logall.disabled = 0;
+ check_everything();
+ } else {
+ document.iform.remoteserver.disabled = 1;
+ document.iform.remoteserver2.disabled = 1;
+ document.iform.remoteserver3.disabled = 1;
+ document.iform.filter.disabled = 1;
+ document.iform.dhcp.disabled = 1;
+ document.iform.portalauth.disabled = 1;
+ document.iform.vpn.disabled = 1;
+ document.iform.apinger.disabled = 1;
+ document.iform.relayd.disabled = 1;
+ document.iform.hostapd.disabled = 1;
+ document.iform.system.disabled = 1;
+ document.iform.logall.disabled = 1;
+ }
+}
+function check_everything() {
+ if (document.iform.logall.checked) {
+ document.iform.filter.disabled = 1;
+ document.iform.filter.checked = false;
+ document.iform.dhcp.disabled = 1;
+ document.iform.dhcp.checked = false;
+ document.iform.portalauth.disabled = 1;
+ document.iform.portalauth.checked = false;
+ document.iform.vpn.disabled = 1;
+ document.iform.vpn.checked = false;
+ document.iform.apinger.disabled = 1;
+ document.iform.apinger.checked = false;
+ document.iform.relayd.disabled = 1;
+ document.iform.relayd.checked = false;
+ document.iform.hostapd.disabled = 1;
+ document.iform.hostapd.checked = false;
+ document.iform.system.disabled = 1;
+ document.iform.system.checked = false;
+ } else {
+ document.iform.filter.disabled = 0;
+ document.iform.dhcp.disabled = 0;
+ document.iform.portalauth.disabled = 0;
+ document.iform.vpn.disabled = 0;
+ document.iform.apinger.disabled = 0;
+ document.iform.relayd.disabled = 0;
+ document.iform.hostapd.disabled = 0;
+ document.iform.system.disabled = 0;
+ }
+}
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="diag_logs_settings.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs settings">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), true, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General Logging Options");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">Forward/Reverse Display</td>
+ <td width="78%" class="vtable">
+ <input name="reverse" type="checkbox" id="reverse" value="yes" <?php if ($pconfig['reverse']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Show log entries in reverse order (newest entries on top)");?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">GUI Log Entries to Display</td>
+ <td width="78%" class="vtable">
+ <input name="nentries" id="nentries" type="text" class="formfld unknown" size="4" value="<?=htmlspecialchars($pconfig['nentries']);?>" /><br />
+ <?=gettext("Hint: This is only the number of log entries displayed in the GUI. It does not affect how many entries are contained in the actual log files.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">Log File Size (Bytes)</td>
+ <td width="78%" class="vtable">
+ <input name="logfilesize" id="logfilesize" type="text" class="formfld unknown" size="8" value="<?=htmlspecialchars($pconfig['logfilesize']);?>" /><br />
+ <?=gettext("Logs are held in constant-size circular log files. This field controls how large each log file is, and thus how many entries may exist inside the log. By default this is approximately 500KB per log file, and there are nearly 20 such log files.") ?>
+ <br /><br />
+ <?=gettext("NOTE: Log sizes are changed the next time a log file is cleared or deleted. To immediately increase the size of the log files, you must first save the options to set the size, then clear all logs using the \"Reset Log Files\" option farther down this page. "); ?>
+ <?=gettext("Be aware that increasing this value increases every log file size, so disk usage will increase significantly."); ?>
+ <?=gettext("Disk space currently used by log files: ") ?><?= exec("/usr/bin/du -sh /var/log | /usr/bin/awk '{print $1;}'"); ?>.
+ <?=gettext("Remaining disk space for log files: ") ?><?= exec("/bin/df -h /var/log | /usr/bin/awk '{print $4;}'"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vtable">Log Firewall Default Blocks</td>
+ <td class="vtable">
+ <input name="logdefaultblock" type="checkbox" id="logdefaultblock" value="yes" <?php if ($pconfig['logdefaultblock']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log packets matched from the default block rules put in the ruleset");?></strong><br />
+ <?=gettext("Hint: packets that are blocked by the implicit default block rule will not be logged if you uncheck this option. Per-rule logging options are still respected.");?>
+ <br />
+ <input name="logdefaultpass" type="checkbox" id="logdefaultpass" value="yes" <?php if ($pconfig['logdefaultpass']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log packets matched from the default pass rules put in the ruleset");?></strong><br />
+ <?=gettext("Hint: packets that are allowed by the implicit default pass rule will be logged if you check this option. Per-rule logging options are still respected.");?>
+ <br />
+ <input name="logbogons" type="checkbox" id="logbogons" value="yes" <?php if ($pconfig['logbogons']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log packets blocked by 'Block Bogon Networks' rules");?></strong><br />
+ <br />
+ <input name="logprivatenets" type="checkbox" id="logprivatenets" value="yes" <?php if ($pconfig['logprivatenets']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log packets blocked by 'Block Private Networks' rules");?></strong><br />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vtable">Web Server Log</td>
+ <td class="vtable">
+ <input name="loglighttpd" type="checkbox" id="loglighttpd" value="yes" <?php if ($pconfig['loglighttpd']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log errors from the web server process.");?></strong><br />
+ <?=gettext("Hint: If this is checked, errors from the lighttpd web server process for the GUI or Captive Portal will appear in the main system log.");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vtable">Raw Logs</td>
+ <td class="vtable">
+ <input name="rawfilter" type="checkbox" id="rawfilter" value="yes" <?php if ($pconfig['rawfilter']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Show raw filter logs");?></strong><br />
+ <?=gettext("Hint: If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read.");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vtable">Filter descriptions</td>
+ <td class="vtable">
+ <select name="filterdescriptions" id="filterdescriptions" >
+ <option value="0"<?=!isset($pconfig['filterdescriptions'])?" selected=\"selected\"":""?>>Dont load descriptions</option>
+ <option value="1"<?=($pconfig['filterdescriptions']) === "1"?" selected=\"selected\"":""?>>Display as column</option>
+ <option value="2"<?=($pconfig['filterdescriptions']) === "2"?" selected=\"selected\"":""?>>Display as second row</option>
+ </select>
+ <strong><?=gettext("Show the applied rule description below or in the firewall log rows.");?></strong>
+ <br />
+ <?=gettext("Displaying rule descriptions for all lines in the log might affect performance with large rule sets.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">Local Logging</td>
+ <td width="78%" class="vtable">
+ <input name="disablelocallogging" type="checkbox" id="disablelocallogging" value="yes" <?php if ($pconfig['disablelocallogging']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong>
+ <?php if ($g['platform'] == "pfSense"): ?>
+ <?=gettext("Disable writing log files to the local disk");?>
+ <?php else: ?>
+ <?=gettext("Disable writing log files to the local RAM disk");?>
+ <?php endif; ?>
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">Reset Logs</td>
+ <td width="78%">
+ <input name="resetlogs" type="submit" class="formbtn" value="<?=gettext("Reset Log Files"); ?>" onclick="return confirm('<?=gettext('Do you really want to reset the log files? This will erase all local log data.');?>')" />
+ <br /><br />
+ <?= gettext("Note: Clears all local log files and reinitializes them as empty logs. This also restarts the DHCP daemon. Use the Save button first if you have made any setting changes."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Remote Logging Options");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="sourceip" class="formselect">
+ <option value="">Default (any)</option>
+ <?php
+ $sourceips = get_possible_traffic_source_addresses(false);
+ foreach ($sourceips as $sipvalue => $sipname):
+ $selected = "";
+ if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $pconfig['sourceip'])) {
+ $selected = 'selected="selected"';
+ }
+ ?>
+ <option value="<?=$sipvalue;?>" <?=$selected;?>>
+ <?=htmlspecialchars($sipname);?>
+ </option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br />
+ <?= gettext("This option will allow the logging daemon to bind to a single IP address, rather than all IP addresses."); ?>
+ <?= gettext("If you pick a single IP, remote syslog severs must all be of that IP type. If you wish to mix IPv4 and IPv6 remote syslog servers, you must bind to all interfaces."); ?>
+ <br /><br />
+ <?= gettext("NOTE: If an IP address cannot be located on the chosen interface, the daemon will bind to all addresses."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ipproto" class="formselect">
+ <option value="ipv4" <?php if ($ipproto == "ipv4") echo 'selected="selected"' ?>>IPv4</option>
+ <option value="ipv6" <?php if ($ipproto == "ipv6") echo 'selected="selected"' ?>>IPv6</option>
+ </select>
+ <br />
+ <?= gettext("This option is only used when a non-default address is chosen as the source above. This option only expresses a preference; If an IP address of the selected type is not found on the chosen interface, the other type will be tried."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable Remote Logging");?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?=gettext("Send log messages to remote syslog server");?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Remote Syslog Servers");?></td>
+ <td width="78%" class="vtable">
+ <table summary="remtote syslog servers">
+ <tr>
+ <td><?=gettext("Server") . " 1";?></td>
+ <td><input name="remoteserver" id="remoteserver" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver']);?>" /></td>
+ </tr>
+ <tr>
+ <td><?=gettext("Server") . " 2";?></td>
+ <td><input name="remoteserver2" id="remoteserver2" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver2']);?>" /></td>
+ </tr>
+ <tr>
+ <td><?=gettext("Server") . " 3";?></td>
+ <td><input name="remoteserver3" id="remoteserver3" type="text" class="formfld host" size="20" value="<?=htmlspecialchars($pconfig['remoteserver3']);?>" /></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><?=gettext("IP addresses of remote syslog servers, or an IP:port.");?></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Remote Syslog Contents");?></td>
+ <td width="78%" class="vtable">
+ <input name="logall" id="logall" type="checkbox" value="yes" <?php if ($pconfig['logall']) echo "checked=\"checked\""; ?> onclick="check_everything();" />
+ <?=gettext("Everything");?><br /><br />
+ <input name="system" id="system" type="checkbox" value="yes" onclick="enable_change(false)" <?php if ($pconfig['system']) echo "checked=\"checked\""; ?> />
+ <?=gettext("System events");?><br />
+ <input name="filter" id="filter" type="checkbox" value="yes" <?php if ($pconfig['filter']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Firewall events");?><br />
+ <input name="dhcp" id="dhcp" type="checkbox" value="yes" <?php if ($pconfig['dhcp']) echo "checked=\"checked\""; ?> />
+ <?=gettext("DHCP service events");?><br />
+ <input name="portalauth" id="portalauth" type="checkbox" value="yes" <?php if ($pconfig['portalauth']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Portal Auth events");?><br />
+ <input name="vpn" id="vpn" type="checkbox" value="yes" <?php if ($pconfig['vpn']) echo "checked=\"checked\""; ?> />
+ <?=gettext("VPN (PPTP, IPsec, OpenVPN) events");?><br />
+ <input name="apinger" id="apinger" type="checkbox" value="yes" <?php if ($pconfig['apinger']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Gateway Monitor events");?><br />
+ <input name="relayd" id="relayd" type="checkbox" value="yes" <?php if ($pconfig['relayd']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Server Load Balancer events");?><br />
+ <input name="hostapd" id="hostapd" type="checkbox" value="yes" <?php if ($pconfig['hostapd']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Wireless events");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" height="53" valign="top">&nbsp;</td>
+ <td width="78%">
+ <strong>
+ <span class="red">
+ <?=gettext("Note:")?>
+ </span>
+ </strong>
+ <br />
+ <?=gettext("syslog sends UDP datagrams to port 514 on the specified " .
+ "remote syslog server, unless another port is specified. Be sure to set syslogd on the " .
+ "remote server to accept syslog messages from");?> <?=$g['product_name']?>.
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_vpn.php b/src/usr/local/www/diag_logs_vpn.php
new file mode 100755
index 0000000..d1dc748
--- /dev/null
+++ b/src/usr/local/www/diag_logs_vpn.php
@@ -0,0 +1,211 @@
+#!/usr/local/bin/php
+<?php
+/*
+ diag_logs_vpn.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/fifolog_reader /usr/local/sbin/clog
+ pfSense_MODULE: vpn
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-logs-pptpvpn
+##|*NAME=Diagnostics: Logs: VPN page
+##|*DESCR=Allow access to the 'Diagnostics: Logs: VPN' page.
+##|*MATCH=diag_logs_vpn.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("VPN"));
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if (htmlspecialchars($_POST['vpntype'])) {
+ $vpntype = htmlspecialchars($_POST['vpntype']);
+} elseif (htmlspecialchars($_GET['vpntype'])) {
+ $vpntype = htmlspecialchars($_GET['vpntype']);
+} else {
+ $vpntype = "pptp";
+}
+if (htmlspecialchars($_POST['mode'])) {
+ $mode = htmlspecialchars($_POST['mode']);
+} elseif (htmlspecialchars($_GET['mode'])) {
+ $mode = htmlspecialchars($_GET['mode']);
+} else {
+ $mode = "login";
+}
+switch ($vpntype) {
+ case 'pptp':
+ $logname = "pptps";
+ break;
+ case 'poes':
+ $logname = "poes";
+ break;
+ case 'l2tp':
+ $logname = "l2tps";
+ break;
+}
+
+if ($_POST['clear']) {
+ if ($mode != "raw") {
+ clear_log_file("/var/log/vpn.log");
+ } else {
+ clear_log_file("/var/log/{$logname}.log");
+ }
+}
+
+function dump_clog_vpn($logfile, $tail) {
+ global $g, $config, $vpntype;
+
+ $sor = isset($config['syslog']['reverse']) ? "-r" : "";
+
+ $logarr = "";
+
+ if (isset($config['system']['usefifolog'])) {
+ exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr);
+ } else {
+ exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . " | tail {$sor} -n " . $tail, $logarr);
+ }
+
+ foreach ($logarr as $logent) {
+ $logent = preg_split("/\s+/", $logent, 6);
+ $llent = explode(",", $logent[5]);
+ $iftype = substr($llent[1], 0, 4);
+ if ($iftype != $vpntype) {
+ continue;
+ }
+ echo "<tr>\n";
+ echo "<td class=\"listlr nowrap\">" . htmlspecialchars(join(" ", array_slice($logent, 0, 3))) . "</td>\n";
+
+ if ($llent[0] == "login") {
+ echo "<td class=\"listr\"><img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" title=\"login\" alt=\"in\" /></td>\n";
+ } else {
+ echo "<td class=\"listr\"><img src=\"/themes/{$g['theme']}/images/icons/icon_out.gif\" width=\"11\" height=\"11\" title=\"logout\" alt=\"out\" /></td>\n";
+ }
+
+ echo "<td class=\"listr\">" . htmlspecialchars($llent[3]) . "</td>\n";
+ echo "<td class=\"listr\">" . htmlspecialchars($llent[2]) . "&nbsp;</td>\n";
+ echo "</tr>\n";
+ }
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs vpn">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), false, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), true, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("PPTP Logins"),
+ (($vpntype == "pptp") && ($mode != "raw")),
+ "/diag_logs_vpn.php?vpntype=pptp");
+ $tab_array[] = array(gettext("PPTP Raw"),
+ (($vpntype == "pptp") && ($mode == "raw")),
+ "/diag_logs_vpn.php?vpntype=pptp&amp;mode=raw");
+ $tab_array[] = array(gettext("PPPoE Logins"),
+ (($vpntype == "poes") && ($mode != "raw")),
+ "/diag_logs_vpn.php?vpntype=poes");
+ $tab_array[] = array(gettext("PPPoE Raw"),
+ (($vpntype == "poes") && ($mode == "raw")),
+ "/diag_logs_vpn.php?vpntype=poes&amp;mode=raw");
+ $tab_array[] = array(gettext("L2TP Logins"),
+ (($vpntype == "l2tp") && ($mode != "raw")),
+ "/diag_logs_vpn.php?vpntype=l2tp");
+ $tab_array[] = array(gettext("L2TP Raw"),
+ (($vpntype == "l2tp") && ($mode == "raw")),
+ "/diag_logs_vpn.php?vpntype=l2tp&amp;mode=raw");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <form action="diag_logs_vpn.php" method="post">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="4" class="listtopic">
+ <?php printf(gettext('Last %1$s %2$s VPN log entries'), $nentries, $vpns[$vpntype]);?>
+ </td>
+ </tr>
+ <?php
+ if ($mode != "raw"):
+ ?>
+ <tr>
+ <td class="listhdrr"><?=gettext("Time");?></td>
+ <td class="listhdrr"><?=gettext("Action");?></td>
+ <td class="listhdrr"><?=gettext("User");?></td>
+ <td class="listhdrr"><?=gettext("IP address");?></td>
+ </tr>
+ <?php
+ dump_clog_vpn("/var/log/vpn.log", $nentries);
+ ?>
+ <?php
+ else:
+ dump_clog("/var/log/{$logname}.log", $nentries);
+ endif;
+ ?>
+ </table>
+ <br />
+ <input type="hidden" name="vpntype" id="vpntype" value="<?=$vpntype;?>" />
+ <input type="hidden" name="mode" id="mode" value="<?=$mode;?>" />
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_logs_wireless.php b/src/usr/local/www/diag_logs_wireless.php
new file mode 100644
index 0000000..4979d1e
--- /dev/null
+++ b/src/usr/local/www/diag_logs_wireless.php
@@ -0,0 +1,125 @@
+<?php
+/* $Id$ */
+/*
+ diag_logs_wireless.php
+ part of pfSense
+
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2008 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2011 Jim Pingle <jimp@pfsense.org>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-systemlogs-wireless
+##|*NAME=Status: System logs: Wireless page
+##|*DESCR=Allow access to the 'Status: System logs: System: Wireless' page.
+##|*MATCH=diag_logs_wireless.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$wireless_logfile = "{$g['varlog_path']}/wireless.log";
+
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+if ($_POST['clear']) {
+ clear_log_file($wireless_logfile);
+}
+
+$pgtitle = array(gettext("Status"), gettext("System logs"), gettext("Wireless"));
+$shortcut_section = "wireless";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs system wireless">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("System"), true, "diag_logs.php");
+ $tab_array[] = array(gettext("Firewall"), false, "diag_logs_filter.php");
+ $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
+ $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
+ $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
+ $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
+ $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+ $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
+ $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
+ $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
+ $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General"), false, "/diag_logs.php");
+ $tab_array[] = array(gettext("Gateways"), false, "/diag_logs_gateways.php");
+ $tab_array[] = array(gettext("Routing"), false, "/diag_logs_routing.php");
+ $tab_array[] = array(gettext("Resolver"), false, "/diag_logs_resolver.php");
+ $tab_array[] = array(gettext("Wireless"), true, "/diag_logs_wireless.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext("Wireless (hostapd) log entries"), $nentries);?>
+ </td>
+ </tr>
+ <?php dump_clog($wireless_logfile, $nentries); ?>
+ <tr>
+ <td>
+ <br />
+ <form action="diag_logs_wireless.php" method="post">
+ <input name="clear" type="submit" class="formbtn" value="<?=gettext("Clear log"); ?>" />
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_nanobsd.php b/src/usr/local/www/diag_nanobsd.php
new file mode 100644
index 0000000..63a4f35
--- /dev/null
+++ b/src/usr/local/www/diag_nanobsd.php
@@ -0,0 +1,289 @@
+<?php
+/*
+ diag_nanobsd.php
+ Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/mount /sbin/glabel /usr/bin/grep /usr/bin/cut /usr/bin/head /bin/cp
+ pfSense_BUILDER_BINARIES: /usr/sbin/boot0cfg /bin/mkdir /sbin/fsck_ufs /sbin/mount /bin/dd /sbin/tunefs
+ pfSense_MODULE: nanobsd
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-nanobsd
+##|*NAME=Diagnostics: NanoBSD
+##|*DESCR=Allow access to the 'Diagnostics: NanoBSD' page.
+##|*MATCH=diag_nanobsd.php*
+##|-PRIV
+
+ini_set('zlib.output_compression', 0);
+ini_set('implicit_flush', 1);
+ini_set('max_input_time', '9999');
+
+require_once("guiconfig.inc");
+require_once("config.inc");
+
+$pgtitle = array(gettext("Diagnostics"), gettext("NanoBSD"));
+include("head.inc");
+
+// Survey slice info
+global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH;
+global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH;
+global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE;
+nanobsd_detect_slice_info();
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
+
+<?php include("fbegin.inc"); ?>
+
+<?php
+
+$NANOBSD_SIZE = nanobsd_get_size();
+
+if ($_POST['bootslice']) {
+ $statusmsg = gettext("Setting slice information, please wait...");
+ echo <<<EOF
+ <div id="loading">
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif">
+ $statusmsg
+ <p/>&nbsp;
+ </div>
+EOF;
+ nanobsd_switch_boot_slice();
+ $savemsg = gettext("The boot slice has been set to") . " " . nanobsd_get_active_slice();
+ // Survey slice info
+ nanobsd_detect_slice_info();
+
+}
+
+if ($_POST['destslice']) {
+ $statusmsg = gettext("Duplicating slice. Please wait, this will take a moment...");
+ echo <<<EOF
+ <div id="loading">
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif">
+ $statusmsg
+ <p/>&nbsp;
+ </div>
+EOF;
+ if (nanobsd_clone_slice($_POST['destslice'])) {
+ $savemsg = gettext("The slice has been duplicated.") . "<p/>" . gettext("If you would like to boot from this newly duplicated slice please set it using the bootup information area.");
+ } else {
+ $savemsg = gettext("There was an error while duplicating the slice. Operation aborted.");
+ }
+ // Re-Survey slice info
+ nanobsd_detect_slice_info();
+}
+
+if ($_POST['changero']) {
+ if (is_writable("/")) {
+ conf_mount_ro();
+ } else {
+ conf_mount_rw();
+ }
+}
+
+if ($_POST['setrw']) {
+ conf_mount_rw();
+ if (isset($_POST['nanobsd_force_rw'])) {
+ $config['system']['nanobsd_force_rw'] = true;
+ } else {
+ unset($config['system']['nanobsd_force_rw']);
+ }
+
+ write_config("Changed Permanent Read/Write Setting");
+ conf_mount_ro();
+}
+
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <!-- tabs here if you want them -->
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:")?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only.")?>
+ <br />&nbsp;
+ </span>
+ <p/>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Bootup information");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NanoBSD Image size");?></td>
+ <td width="78%" class="vtable">
+ <?php echo $NANOBSD_SIZE; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bootup");?></td>
+ <td width="78%" class="vtable">
+ <form action="diag_nanobsd.php" method="post" name="iform">
+ <?=gettext("Bootup slice is currently:");?> <?php echo $ACTIVE_SLICE; ?>
+ <br /><br /><?=gettext("This will switch the bootup slice to the alternate slice.");?>
+ <br />
+ <input type='hidden' name='bootslice' value='switch'>
+ <input type='submit' value='Switch Slice'></form>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Media Read/Write Status");?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell">Current Read/Write Status:</td>
+ <td valign="top" class="vncell">
+ <form action="diag_nanobsd.php" method="post" name="iform">
+ <?php if (is_writable("/")) {
+ $refcount = refcount_read(1000);
+ /* refcount_read returns -1 when shared memory section does not exist */
+ if ($refcount == 1 || $refcount == -1) {
+ $refdisplay = "";
+ } else {
+ $refdisplay = " (reference count " . $refcount . ")";
+ }
+ echo gettext("Read/Write") . $refdisplay;
+ if (!isset($config['system']['nanobsd_force_rw'])) {
+ echo "<br /><input type='submit' name='changero' value='" . gettext("Switch to Read-Only") . "'>";
+ }
+ } else {
+ echo gettext("Read-Only");
+ if (!isset($config['system']['nanobsd_force_rw'])) {
+ echo "<br /><input type='submit' name='changero' value='" . gettext("Switch to Read/Write") . "'>";
+ }
+ } ?>
+ </form>
+ <br /><?php echo gettext("NOTE: This setting is only temporary, and can be switched dynamically in the background."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell">Permanent Read/Write:</td>
+ <td valign="top" class="vncell">
+ <form action="diag_nanobsd.php" method="post" name="iform">
+ <input type="checkbox" name="nanobsd_force_rw" <?php if (isset($config['system']['nanobsd_force_rw'])) echo "checked"; ?>> <?php echo gettext("Keep media mounted read/write at all times.") ?>
+ <br /><input type='submit' name='setrw' value='<?php echo gettext("Save") ?>'>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Duplicate bootup slice to alternate");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Duplicate bootup slice");?></td>
+ <td width="78%" class="vtable">
+ <form action="diag_nanobsd.php" method="post" name="iform">
+ <?=gettext("Destination slice:");?>
+ <select name='destslice'>
+ <option value='<?php echo $COMPLETE_PATH; ?>'>
+ <?php echo "{$COMPLETE_BOOT_PATH} -> {$TOFLASH}"; ?>
+ </option>
+ </select>
+ <br />
+ <?=gettext("This will duplicate the bootup slice to the alternate slice. Use this if you would like to duplicate the known good working boot partition to the alternate.");?>
+ <br /><input type='submit' name='duplicateslice' value='<?php echo gettext("Duplicate slice") ?>'>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Periodic Data Backup");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RRD/DHCP Backup");?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("These options have been relocated to");?> <a href="system_advanced_misc.php"><?=gettext("System > Advanced, Miscellaneous tab")?></a>.
+ </td>
+ </tr>
+<?php if (file_exists("/conf/upgrade_log.txt")): ?>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("View upgrade log");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("View previous upgrade log");?></td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($_POST['viewupgradelog']) {
+ echo "<textarea name='log' cols='80' rows='40'>";
+ echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/upgrade_log.txt"));
+ echo "\nFile list:\n";
+ echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/file_upgrade_log.txt"));
+ echo "\nMisc log:\n";
+ echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/firmware_update_misc_log.txt"));
+ echo "\nfdisk/bsdlabel log:\n";
+ echo str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/fdisk_upgrade_log.txt"));
+ echo "</textarea>";
+ } else {
+ echo "<form action='diag_nanobsd.php' method='post' name='iform'>";
+ echo "<input type='submit' name='viewupgradelog' value='View upgrade log'>";
+ }
+ ?>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td colspan="2" valign="top" class="">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php require("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+// Clear the loading indicator
+echo "<script type=\"text/javascript\">";
+echo "jQuery('#loading').html('');";
+echo "</script>";
+
+?>
diff --git a/src/usr/local/www/diag_ndp.php b/src/usr/local/www/diag_ndp.php
new file mode 100644
index 0000000..233d8ee
--- /dev/null
+++ b/src/usr/local/www/diag_ndp.php
@@ -0,0 +1,184 @@
+<?php
+/*
+ diag_ndp.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp
+ pfSense_MODULE: arp
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-ndptable
+##|*NAME=Diagnostics: NDP Table page
+##|*DESCR=Allow access to the 'Diagnostics: NDP Table' page.
+##|*MATCH=diag_ndp.php*
+##|-PRIV
+
+@ini_set('zlib.output_compression', 0);
+@ini_set('implicit_flush', 1);
+
+require("guiconfig.inc");
+
+exec("/usr/sbin/ndp -na", $rawdata);
+
+$i = 0;
+
+/* if list */
+$ifdescrs = get_configured_interface_with_descr();
+
+foreach ($ifdescrs as $key =>$interface) {
+ $hwif[$config['interfaces'][$key]['if']] = $interface;
+}
+
+/* Array ( [0] => Neighbor [1] => Linklayer [2] => Address
+[3] => Netif [4] => Expire [5] => S
+[6] => Flags ) */
+$data = array();
+array_shift($rawdata);
+foreach ($rawdata as $line) {
+ $elements = preg_split('/[ ]+/', $line);
+
+ $ndpent = array();
+ $ndpent['ipv6'] = trim($elements[0]);
+ $ndpent['mac'] = trim($elements[1]);
+ $ndpent['interface'] = trim($elements[2]);
+ $data[] = $ndpent;
+}
+
+/* FIXME: Not ipv6 compatible dns resolving. PHP needs fixing */
+function _getHostName($mac, $ip) {
+ if (is_ipaddr($ip)) {
+ list($ip, $scope) = explode("%", $ip);
+ if (gethostbyaddr($ip) <> "" and gethostbyaddr($ip) <> $ip) {
+ return gethostbyaddr($ip);
+ } else {
+ return "";
+ }
+ }
+}
+
+// Resolve hostnames and replace Z_ with "". The intention
+// is to sort the list by hostnames, alpha and then the non
+// resolvable addresses will appear last in the list.
+foreach ($data as &$entry) {
+ $dns = trim(_getHostName($entry['mac'], $entry['ipv6']));
+ if (trim($dns)) {
+ $entry['dnsresolve'] = "$dns";
+ } else {
+ $entry['dnsresolve'] = "Z_ ";
+ }
+}
+
+// Sort the data alpha first
+$data = msort($data, "dnsresolve");
+
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
+
+$pgtitle = array(gettext("Diagnostics"), gettext("NDP Table"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<div id="loading">
+ <img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /><?= gettext("Loading, please wait..."); ?>
+ <p>&nbsp;</p>
+</div>
+
+<?php
+
+// Flush buffers out to client so that they see Loading, please wait....
+for ($i = 0; $i < ob_get_level(); $i++) {
+ ob_end_flush();
+}
+ob_implicit_flush(1);
+
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag ndp">
+ <tr>
+ <td>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabcont">
+ <tr>
+ <td class="listhdrr"><?= gettext("IPv6 address"); ?></td>
+ <td class="listhdrr"><?= gettext("MAC address"); ?></td>
+ <td class="listhdrr"><?= gettext("Hostname"); ?></td>
+ <td class="listhdr"><?= gettext("Interface"); ?></td>
+ <td class="list"></td>
+ </tr>
+ <?php foreach ($data as $entry): ?>
+ <tr>
+ <td class="listlr"><?=$entry['ipv6'];?></td>
+ <td class="listr">
+ <?php
+ $mac=trim($entry['mac']);
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ print $mac;
+ if (isset($mac_man[$mac_hi])) {
+ print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
+ }
+ ?>
+ </td>
+ <td class="listr">
+ <?php
+ echo "&nbsp;". str_replace("Z_ ", "", $entry['dnsresolve']);
+ ?>
+ </td>
+ <td class="listr">
+ <?php
+ if (isset($hwif[$entry['interface']])) {
+ echo $hwif[$entry['interface']];
+ } else {
+ echo $entry['interface'];
+ }
+ ?>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ jQuery('#loading').html('');
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_packet_capture.php b/src/usr/local/www/diag_packet_capture.php
new file mode 100644
index 0000000..14be5d1
--- /dev/null
+++ b/src/usr/local/www/diag_packet_capture.php
@@ -0,0 +1,485 @@
+<?php
+/*
+ diag_packet_capture.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /bin/ps /usr/bin/grep /usr/sbin/tcpdump
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-packetcapture
+##|*NAME=Diagnostics: Packet Capture page
+##|*DESCR=Allow access to the 'Diagnostics: Packet Capture' page.
+##|*MATCH=diag_packet_capture.php*
+##|-PRIV
+
+$allowautocomplete = true;
+
+function fixup_host_logic($value) {
+ return str_replace(array(" ", ",", "+", "|", "!"), array("", "and ", "and ", "or ", "not "), $value);
+}
+function strip_host_logic($value) {
+ return str_replace(array(" ", ",", "+", "|", "!"), array("", "", "", "", ""), $value);
+}
+function get_host_boolean($value, $host) {
+ $value = str_replace(array("!", $host), array("", ""), $value);
+ $andor = "";
+ switch (trim($value)) {
+ case "|":
+ $andor = "or ";
+ break;
+ case ",":
+ case "+":
+ $andor = "and ";
+ break;
+ }
+ return $andor;
+}
+function has_not($value) {
+ return strpos($value, '!') !== false;
+}
+function fixup_not($value) {
+ return str_replace("!", "not ", $value);
+}
+function strip_not($value) {
+ return ltrim(trim($value), '!');
+}
+
+function fixup_host($value, $position) {
+ $host = strip_host_logic($value);
+ $not = has_not($value) ? "not " : "";
+ $andor = ($position > 0) ? get_host_boolean($value, $host) : "";
+ if (is_ipaddr($host)) {
+ return "{$andor}host {$not}" . $host;
+ } elseif (is_subnet($host)) {
+ return "{$andor}net {$not}" . $host;
+ } else {
+ return "";
+ }
+}
+
+if ($_POST['downloadbtn'] == gettext("Download Capture")) {
+ $nocsrf = true;
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Packet Capture"));
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+
+$fp = "/root/";
+$fn = "packetcapture.cap";
+$snaplen = 0;//default packet length
+$count = 100;//default number of packets to capture
+
+$fams = array('ip', 'ip6');
+$protos = array('icmp', 'icmp6', 'tcp', 'udp', 'arp', 'carp', 'esp',
+ '!icmp', '!icmp6', '!tcp', '!udp', '!arp', '!carp', '!esp');
+
+$input_errors = array();
+
+$interfaces = get_configured_interface_with_descr();
+if (isset($config['ipsec']['enable'])) {
+ $interfaces['ipsec'] = "IPsec";
+}
+foreach (array('server', 'client') as $mode) {
+ if (is_array($config['openvpn']["openvpn-{$mode}"])) {
+ foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
+ if (!isset($setting['disable'])) {
+ $interfaces['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
+ }
+ }
+ }
+}
+
+if ($_POST) {
+ $host = $_POST['host'];
+ $selectedif = $_POST['interface'];
+ $count = $_POST['count'];
+ $snaplen = $_POST['snaplen'];
+ $port = $_POST['port'];
+ $detail = $_POST['detail'];
+ $fam = $_POST['fam'];
+ $proto = $_POST['proto'];
+
+ if (!array_key_exists($selectedif, $interfaces)) {
+ $input_errors[] = gettext("Invalid interface.");
+ }
+ if ($fam !== "" && $fam !== "ip" && $fam !== "ip6") {
+ $input_errors[] = gettext("Invalid address family.");
+ }
+ if ($proto !== "" && !in_array(strip_not($proto), $protos)) {
+ $input_errors[] = gettext("Invalid protocol.");
+ }
+
+ if ($host != "") {
+ $host_string = str_replace(array(" ", "|", ","), array("", "#|", "#+"), $host);
+ if (strpos($host_string, '#') === false) {
+ $hosts = array($host);
+ } else {
+ $hosts = explode('#', $host_string);
+ }
+ foreach ($hosts as $h) {
+ if (!is_subnet(strip_host_logic($h)) && !is_ipaddr(strip_host_logic($h))) {
+ $input_errors[] = sprintf(gettext("A valid IP address or CIDR block must be specified. [%s]"), $h);
+ }
+ }
+ }
+ if ($port != "") {
+ if (!is_port(strip_not($port))) {
+ $input_errors[] = gettext("Invalid value specified for port.");
+ }
+ }
+ if ($snaplen == "") {
+ $snaplen = 0;
+ } else {
+ if (!is_numeric($snaplen) || $snaplen < 0) {
+ $input_errors[] = gettext("Invalid value specified for packet length.");
+ }
+ }
+ if ($count == "") {
+ $count = 0;
+ } else {
+ if (!is_numeric($count) || $count < 0) {
+ $input_errors[] = gettext("Invalid value specified for packet count.");
+ }
+ }
+
+ if (!count($input_errors)) {
+ $do_tcpdump = true;
+
+ conf_mount_rw();
+
+ if ($_POST['promiscuous']) {
+ //if promiscuous mode is checked
+ $disablepromiscuous = "";
+ } else {
+ //if promiscuous mode is unchecked
+ $disablepromiscuous = "-p";
+ }
+
+ if ($_POST['dnsquery']) {
+ //if dns lookup is checked
+ $disabledns = "";
+ } else {
+ //if dns lookup is unchecked
+ $disabledns = "-n";
+ }
+
+ if ($_POST['startbtn'] != "") {
+ $action = gettext("Start");
+
+ //delete previous packet capture if it exists
+ if (file_exists($fp.$fn)) {
+ unlink ($fp.$fn);
+ }
+
+ } elseif ($_POST['stopbtn'] != "") {
+ $action = gettext("Stop");
+ $processes_running = trim(shell_exec("/bin/ps axw -O pid= | /usr/bin/grep tcpdump | /usr/bin/grep {$fn} | /usr/bin/egrep -v '(pflog|grep)'"));
+
+ //explode processes into an array, (delimiter is new line)
+ $processes_running_array = explode("\n", $processes_running);
+
+ //kill each of the packetcapture processes
+ foreach ($processes_running_array as $process) {
+ $process_id_pos = strpos($process, ' ');
+ $process_id = substr($process, 0, $process_id_pos);
+ exec("kill $process_id");
+ }
+
+ } elseif ($_POST['downloadbtn'] != "") {
+ //download file
+ $fs = filesize($fp.$fn);
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename=$fn");
+ header("Content-Length: $fs");
+ readfile($fp.$fn);
+ exit;
+ }
+ }
+} else {
+ $do_tcpdump = false;
+}
+
+include("head.inc"); ?>
+
+<body link="#000000" vlink="#0000CC" alink="#0000CC">
+
+<?php
+include("fbegin.inc");
+?>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag packet capture">
+ <tr><td>
+ <form action="diag_packet_capture.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="table">
+ <tr>
+ <td colspan="3" valign="top" class="listtopic"><?=gettext("Packet capture");?></td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="32%" class="vtable">
+ <select name="interface">
+ <?php foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if ($selectedif == $iface) echo "selected=\"selected\""; ?>>
+ <?php echo $ifacename;?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br /><?=gettext("Select the interface on which to capture traffic.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Promiscuous");?></td>
+ <td width="51%" class="vtable">
+ <input name="promiscuous" type="checkbox"<?php if ($_POST['promiscuous']) echo " checked=\"checked\""; ?> />
+ <br /><?=gettext("If checked, the");?> <a target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=tcpdump&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+8.3-stable&amp;arch=default&amp;format=html"><?= gettext("packet capture")?></a> <?= gettext("will be performed using promiscuous mode.");?>
+ <br /><b><?=gettext("Note");?>: </b><?=gettext("Some network adapters do not support or work well in promiscuous mode.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Address Family");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <select name="fam">
+ <option value="">Any</option>
+ <option value="ip" <?php if ($fam == "ip") echo "selected=\"selected\""; ?>>IPv4 Only</option>
+ <option value="ip6" <?php if ($fam == "ip6") echo "selected=\"selected\""; ?>>IPv6 Only</option>
+ </select>
+ <br /><?=gettext("Select the type of traffic to be captured, either Any, IPv4 only or IPv6 only.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <select name="proto">
+ <option value="">Any</option>
+ <option value="icmp" <?php if ($proto == "icmp") echo "selected=\"selected\""; ?>>ICMP</option>
+ <option value="!icmp" <?php if ($proto == "!icmp") echo "selected=\"selected\""; ?>>Exclude ICMP</option>
+ <option value="icmp6" <?php if ($proto == "icmp6") echo "selected=\"selected\""; ?>>ICMPv6</option>
+ <option value="!icmp6" <?php if ($proto == "!icmp6") echo "selected=\"selected\""; ?>>Exclude ICMPv6</option>
+ <option value="tcp" <?php if ($proto == "tcp") echo "selected=\"selected\""; ?>>TCP</option>
+ <option value="!tcp" <?php if ($proto == "!tcp") echo "selected=\"selected\""; ?>>Exclude TCP</option>
+ <option value="udp" <?php if ($proto == "udp") echo "selected=\"selected\""; ?>>UDP</option>
+ <option value="!udp" <?php if ($proto == "!udp") echo "selected=\"selected\""; ?>>Exclude UDP</option>
+ <option value="arp" <?php if ($proto == "arp") echo "selected=\"selected\""; ?>>ARP</option>
+ <option value="!arp" <?php if ($proto == "!arp") echo "selected=\"selected\""; ?>>Exclude ARP</option>
+ <option value="carp" <?php if ($proto == "carp") echo "selected=\"selected\""; ?>>CARP (VRRP)</option>
+ <option value="!carp" <?php if ($proto == "!carp") echo "selected=\"selected\""; ?>>Exclude CARP (VRRP)</option>
+ <option value="esp" <?php if ($proto == "esp") echo "selected=\"selected\""; ?>>ESP</option>
+ </select>
+ <br /><?=gettext("Select the protocol to capture, or Any.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Host Address");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <input name="host" class="formfld host" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
+ <br /><?=gettext("This value is either the Source or Destination IP address or subnet in CIDR notation. The packet capture will look for this address in either field.");?>
+ <br /><?=gettext("Matching can be negated by preceding the value with \"!\". Multiple IP addresses or CIDR subnets may be specified. Comma (\",\") separated values perform a boolean \"and\". Separating with a pipe (\"|\") performs a boolean \"or\".");?>
+ <br /><?=gettext("If you leave this field blank, all packets on the specified interface will be captured.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Port");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <input name="port" class="formfld unknown" id="port" size="5" value="<?=htmlspecialchars($port);?>" />
+ <br /><?=gettext("The port can be either the source or destination port. The packet capture will look for this port in either field.");?>
+ <br /><?=gettext("Leave blank if you do not want to filter by port.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Packet Length");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <input name="snaplen" class="formfld unknown" id="snaplen" size="5" value="<?=htmlspecialchars($snaplen);?>" />
+ <br /><?=gettext("The Packet length is the number of bytes of each packet that will be captured. Default value is 0, which will capture the entire frame regardless of its size.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Count");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <input name="count" class="formfld unknown" id="count" size="5" value="<?=htmlspecialchars($count);?>" />
+ <br /><?=gettext("This is the number of packets the packet capture will grab. Default value is 100.") . "<br />" . gettext("Enter 0 (zero) for no count limit.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Level of Detail");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <select name="detail" class="formselect" id="detail" size="1">
+ <option value="normal" <?php if ($detail == "normal") echo "selected=\"selected\""; ?>><?=gettext("Normal");?></option>
+ <option value="medium" <?php if ($detail == "medium") echo "selected=\"selected\""; ?>><?=gettext("Medium");?></option>
+ <option value="high" <?php if ($detail == "high") echo "selected=\"selected\""; ?>><?=gettext("High");?></option>
+ <option value="full" <?php if ($detail == "full") echo "selected=\"selected\""; ?>><?=gettext("Full");?></option>
+ </select>
+ <br />
+ <?=gettext("This is the level of detail that will be displayed after hitting 'Stop' when the packets have been captured.") . "<br /><b>" .
+ gettext("Note:") . "</b> " .
+ gettext("This option does not affect the level of detail when downloading the packet capture.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top" class="vncellreq"><?=gettext("Reverse DNS Lookup");?></td>
+ <td colspan="2" width="83%" class="vtable">
+ <input name="dnsquery" type="checkbox" <?php if ($_POST['dnsquery']) echo " checked=\"checked\""; ?> />
+ <br /><?=gettext("This check box will cause the packet capture to perform a reverse DNS lookup associated with all IP addresses.");?>
+ <br /><b><?=gettext("Note");?>: </b><?=gettext("This option can cause delays for large packet captures.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="17%" valign="top">&nbsp;</td>
+ <td colspan="2" width="83%">
+<?php
+
+ /* check to see if packet capture tcpdump is already running */
+ $processcheck = (trim(shell_exec("/bin/ps axw -O pid= | /usr/bin/grep tcpdump | /usr/bin/grep {$fn} | /usr/bin/egrep -v '(pflog|grep)'")));
+
+ if ($processcheck != "") {
+ $processisrunning = true;
+ } else {
+ $processisrunning = false;
+ }
+
+ if (($action == gettext("Stop") or $action == "") and $processisrunning != true) {
+ echo "<input type=\"submit\" name=\"startbtn\" value=\"" . gettext("Start") . "\" />&nbsp;";
+ } else {
+ echo "<input type=\"submit\" name=\"stopbtn\" value=\"" . gettext("Stop") . "\" />&nbsp;";
+ }
+ if (file_exists($fp.$fn) and $processisrunning != true) {
+ echo "<input type=\"submit\" name=\"viewbtn\" value=\"" . gettext("View Capture") . "\" />&nbsp;";
+ echo "<input type=\"submit\" name=\"downloadbtn\" value=\"" . gettext("Download Capture") . "\" />";
+ echo "<br />" . gettext("The packet capture file was last updated:") . " " . date("F jS, Y g:i:s a.", filemtime($fp.$fn));
+ }
+?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="results">
+ <tr>
+ <td valign="top" colspan="2">
+<?php
+ echo "<font face=\"terminal\" size=\"2\">";
+ if ($processisrunning == true) {
+ echo("<strong>" . gettext("Packet Capture is running.") . "</strong><br />");
+ }
+
+ if ($do_tcpdump) {
+ $matches = array();
+
+ if (in_array($fam, $fams)) {
+ $matches[] = $fam;
+ }
+
+ if (in_array($proto, $protos)) {
+ $matches[] = fixup_not($proto);
+ }
+
+ if ($port != "") {
+ $matches[] = "port ".fixup_not($port);
+ }
+
+ if ($host != "") {
+ $hostmatch = "";
+ $hostcount = 0;
+ foreach ($hosts as $h) {
+ $h = fixup_host($h, $hostcount++);
+ if (!empty($h)) {
+ $hostmatch .= " " . $h;
+ }
+ }
+ if (!empty($hostmatch)) {
+ $matches[] = "({$hostmatch})";
+ }
+ }
+
+ if ($count != "0") {
+ $searchcount = "-c " . $count;
+ } else {
+ $searchcount = "";
+ }
+
+ $selectedif = convert_friendly_interface_to_real_interface_name($selectedif);
+
+ if ($action == gettext("Start")) {
+ $matchstr = implode($matches, " and ");
+ echo("<strong>" . gettext("Packet Capture is running.") . "</strong><br />");
+ $cmd = "/usr/sbin/tcpdump -i {$selectedif} {$disablepromiscuous} {$searchcount} -s {$snaplen} -w {$fp}{$fn} " . escapeshellarg($matchstr);
+ // Debug
+ //echo $cmd;
+ mwexec_bg ($cmd);
+ } else {
+ //action = stop
+ echo("<strong>" . gettext("Packet Capture stopped.") . "<br /><br />" . gettext("Packets Captured:") . "</strong><br />");
+?>
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("packetsCaptured").wrap='off';
+ }
+ //]]>
+ </script>
+ <textarea id="packetsCaptured" style="width:98%" name="code" rows="15" cols="66" readonly="readonly">
+<?php
+ $detail_args = "";
+ switch ($detail) {
+ case "full":
+ $detail_args = "-vv -e";
+ break;
+ case "high":
+ $detail_args = "-vv";
+ break;
+ case "medium":
+ $detail_args = "-v";
+ break;
+ case "normal":
+ default:
+ $detail_args = "-q";
+ break;
+ }
+ system("/usr/sbin/tcpdump {$disabledns} {$detail_args} -r {$fp}{$fn}");
+
+ conf_mount_ro();
+?>
+ </textarea>
+<?php
+ }
+ }
+?>
+ &nbsp;</font>
+ </td>
+ </tr>
+ </table>
+ </td></tr>
+</table>
+
+<?php
+include("fend.inc");
+?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_patterns.php b/src/usr/local/www/diag_patterns.php
new file mode 100644
index 0000000..1c3528d
--- /dev/null
+++ b/src/usr/local/www/diag_patterns.php
@@ -0,0 +1,97 @@
+<?php
+/* $Id$ */
+/*
+ Exec+ v1.02-000 - Copyright 2001-2003, All rights reserved
+ Created by André Ribeiro and Hélder Pereira
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-patters
+##|*NAME=Diagnostics: Patterns page
+##|*DESCR=Allow access to the 'Diagnostics: Patterns' page.
+##|*MATCH=patterns.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+//Move the upload file to /usr/local/share/protocols (is_uploaded_file must use tmp_name as argument)
+if (($_POST['submit'] == gettext("Upload Pattern file")) && is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
+ if (fileExtension($_FILES['ulfile']['name'])) {
+ if (!is_array($config['l7shaper']['custom_pat'])) {
+ $config['l7shaper']['custom_pat'] = array();
+ }
+
+ $config['l7shaper']['custom_pat'][$_FILES['ulfile']['name']] = base64_encode(file_get_contents($_FILES['ulfile']['tmp_name']));
+ write_config(sprintf(gettext("Added custom l7 pattern %s"), $_FILES['ulfile']['name']));
+ move_uploaded_file($_FILES['ulfile']['tmp_name'], "/usr/local/share/protocols/" . $_FILES['ulfile']['name']);
+ $ulmsg = gettext("Uploaded file to") . " /usr/local/share/protocols/" . htmlentities($_FILES['ulfile']['name']);
+ } else {
+ $ulmsg = gettext("Warning: You must upload a file with .pat extension.");
+ }
+}
+
+//Check if file has correct extension (.pat)
+function fileExtension($nameFile) {
+ $format = substr($nameFile, -4);
+ return ($format == ".pat");
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Add layer7 pattern"));
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($ulmsg) echo "<p class=\"red\"><strong>" . $ulmsg . "</strong></p>\n"; ?>
+<div id="mainarea">
+<form action="diag_patterns.php" method="post" enctype="multipart/form-data" name="frmPattern">
+<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="upload pattern">
+ <tr>
+ <td colspan="4" valign="top" class="listtopic"><?=gettext("Upload layer7 pattern file");?></td>
+ </tr>
+ <tr>
+ <td align="right"><strong><?=gettext("File to upload:");?></strong></td>
+ <td valign="top" class="label">
+ <input name="ulfile" type="file" class="formfld file" id="ulfile" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top" class="label">
+ <input name="submit" type="submit" class="button" id="upload" value="<?=gettext("Upload Pattern file");?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+</table>
+</form>
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_pf_info.php b/src/usr/local/www/diag_pf_info.php
new file mode 100644
index 0000000..369c0f4
--- /dev/null
+++ b/src/usr/local/www/diag_pf_info.php
@@ -0,0 +1,117 @@
+<?php
+/* $Id$ */
+/*
+ diag_pf_info.php
+ Copyright (C) 2010 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/top
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-pf-info
+##|*NAME=Diagnostics: pfInfo
+##|*DESCR=Allows access to the 'Diagnostics: pfInfo' page
+##|*MATCH=diag_pf_info.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pgtitle = gettext("Diagnostics: pfInfo");
+
+if ($_REQUEST['getactivity']) {
+ $text = `/sbin/pfctl -vvsi`;
+ $text .= "<p/>";
+ $text .= `/sbin/pfctl -vvsm`;
+ $text .= "<p/>";
+ $text .= `/sbin/pfctl -vvst`;
+ $text .= "<p/>";
+ $text .= `/sbin/pfctl -vvsI`;
+ echo $text;
+ exit;
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+jQuery(document).ready(function() {setTimeout('getpfinfo()', 5000);});
+//<![CDATA[
+ function getpfinfo() {
+ jQuery.ajax({
+ type: "POST",
+ url: "/diag_pf_info.php",
+ data: 'getactivity=yes',
+ async: false,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ jQuery('#pfactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
+ setTimeout('getpfinfo()', 2000);
+ }
+//]]>
+</script>
+<div id="maincontent">
+<?php
+ if ($savemsg) {
+ echo "<div id=\"savemsg\">";
+ print_info_box($savemsg);
+ echo "</div>";
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag pf info">
+ <tr>
+ <td>
+ <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td align="center">
+ <table summary="results">
+ <tr>
+ <td>
+ <div id="pfactivitydiv">
+ <?=gettext("Gathering PF information, please wait...");?>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_ping.php b/src/usr/local/www/diag_ping.php
new file mode 100644
index 0000000..102b097
--- /dev/null
+++ b/src/usr/local/www/diag_ping.php
@@ -0,0 +1,202 @@
+<?php
+/*
+ diag_ping.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2005 Bob Zoller (bob@kludgebox.com) and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ping /sbin/ping6
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-ping
+##|*NAME=Diagnostics: Ping page
+##|*DESCR=Allow access to the 'Diagnostics: Ping' page.
+##|*MATCH=diag_ping.php*
+##|-PRIV
+
+$allowautocomplete = true;
+$pgtitle = array(gettext("Diagnostics"), gettext("Ping"));
+require_once("guiconfig.inc");
+
+define('MAX_COUNT', 10);
+define('DEFAULT_COUNT', 3);
+
+if ($_POST || $_REQUEST['host']) {
+ unset($input_errors);
+ unset($do_ping);
+
+ /* input validation */
+ $reqdfields = explode(" ", "host count");
+ $reqdfieldsn = array(gettext("Host"), gettext("Count"));
+ do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_REQUEST['count'] < 1) || ($_REQUEST['count'] > MAX_COUNT)) {
+ $input_errors[] = sprintf(gettext("Count must be between 1 and %s"), MAX_COUNT);
+ }
+
+ $host = trim($_REQUEST['host']);
+ $ipproto = $_REQUEST['ipproto'];
+ if (($ipproto == "ipv4") && is_ipaddrv6($host)) {
+ $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname.");
+ }
+ if (($ipproto == "ipv6") && is_ipaddrv4($host)) {
+ $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname.");
+ }
+
+ if (!$input_errors) {
+ $do_ping = true;
+ $sourceip = $_REQUEST['sourceip'];
+ $count = $_POST['count'];
+ if (preg_match('/[^0-9]/', $count)) {
+ $count = DEFAULT_COUNT;
+ }
+ }
+}
+if (!isset($do_ping)) {
+ $do_ping = false;
+ $host = '';
+ $count = DEFAULT_COUNT;
+}
+
+include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ping">
+<tr><td>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="diag_ping.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Ping"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Host"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ipproto" class="formselect">
+ <option value="ipv4" <?php if ($ipproto == "ipv4") echo "selected=\"selected\"" ?>>IPv4</option>
+ <option value="ipv6" <?php if ($ipproto == "ipv6") echo "selected=\"selected\"" ?>>IPv6</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="sourceip" class="formselect">
+ <option value="">Default</option>
+ <?php $sourceips = get_possible_traffic_source_addresses(true);
+ foreach ($sourceips as $sipvalue => $sipname):
+ $selected = "";
+ if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$sipvalue;?>" <?=$selected;?>>
+ <?=htmlspecialchars($sipname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?= gettext("Count"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="count" class="formfld" id="count">
+ <?php for ($i = 1; $i <= MAX_COUNT; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $count) echo "selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Ping"); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" colspan="2">
+ <?php if ($do_ping) {
+ echo "<font face=\"terminal\" size=\"2\">";
+ echo "<strong>" . gettext("Ping output") . ":</strong><br />";
+ ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("pingCaptured").wrap='off';
+ }
+ //]]>
+ </script>
+ <?php
+ echo "<textarea id=\"pingCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
+ $ifscope = '';
+ $command = "/sbin/ping";
+ if ($ipproto == "ipv6") {
+ $command .= "6";
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip);
+ if (is_linklocal($ifaddr)) {
+ $ifscope = get_ll_scope($ifaddr);
+ }
+ } else {
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip);
+ }
+ if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) {
+ $srcip = "-S" . escapeshellarg($ifaddr);
+ if (is_linklocal($host) && !strstr($host, "%") && !empty($ifscope)) {
+ $host .= "%{$ifscope}";
+ }
+ }
+
+ $cmd = "{$command} {$srcip} -c" . escapeshellarg($count) . " " . escapeshellarg($host);
+ //echo "Ping command: {$cmd}\n";
+ system($cmd);
+ echo('</textarea>&nbsp;</font>');
+ }
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">&nbsp;</td>
+ </tr>
+</table>
+</form>
+</td></tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_pkglogs.php b/src/usr/local/www/diag_pkglogs.php
new file mode 100755
index 0000000..6575c48
--- /dev/null
+++ b/src/usr/local/www/diag_pkglogs.php
@@ -0,0 +1,147 @@
+<?php
+/*
+ $Id$
+
+ diag_pkglogs.php
+ Copyright (C) 2005 Colin Smith
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+ <logging>
+ <logtab>arpwatch</logtab>
+ <grepfor>arpwatch</logtab>
+ </logging>
+
+ <invertgrep/>
+ <logfile>/var/log/arpwatch.log</logfile>
+
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/netstat
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-status-packagelogs
+##|*NAME=Status: Package logs page
+##|*DESCR=Allow access to the 'Status: Package logs' page.
+##|*MATCH=diag_pkglogs.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("pkg-utils.inc");
+
+if (!($nentries = $config['syslog']['nentries'])) {
+ $nentries = 50;
+}
+
+//if ($_POST['clear'])
+// clear_log_file($logfile);
+
+$i = 0;
+$pkgwithlogging = false;
+$apkg = $_GET['pkg'];
+if (!$apkg) { // If we aren't looking for a specific package, locate the first package that handles logging.
+ if ($config['installedpackages']['package'] <> "") {
+ foreach ($config['installedpackages']['package'] as $package) {
+ if (is_array($package['logging'])) {
+ $pkgwithlogging = true;
+ $apkg = $package['name'];
+ $apkgid = $i;
+ break;
+ }
+ $i++;
+ }
+ }
+} elseif ($apkg) {
+ $apkgid = get_package_id($apkg);
+ if ($apkgid != -1) {
+ $pkgwithlogging = true;
+ $i = $apkgid;
+ }
+}
+
+$pgtitle = array(gettext("Status"), gettext("Package logs"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <?php
+ if ($pkgwithlogging == false) {
+ print_info_box(gettext("No packages with logging facilities are currently installed."));
+ echo '</ul></td></tr></table>';
+ include("fend.inc");
+ exit;
+ }
+ $tab_array = array();
+ foreach ($config['installedpackages']['package'] as $package) {
+ if (is_array($package['logging'])) {
+ if (!($logtab = $package['logging']['logtab'])) {
+ $logtab = $package['name'];
+ }
+ if ($apkg == $package['name']) {
+ $curtab = $logtab;
+ $tab_array[] = array(sprintf(gettext("%s"), $logtab), true, "diag_pkglogs.php?pkg=".$package['name']);
+ } else {
+ $tab_array[] = array(sprintf(gettext("%s"), $logtab), false, "diag_pkglogs.php?pkg=".$package['name']);
+ }
+ }
+ }
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?php printf(gettext('Last %1$s %2$s log entries'), $nentries, $curtab); ?>
+ </td>
+ </tr>
+ <?php
+ $package =& $config['installedpackages']['package'][$apkgid];
+ dump_clog($g['varlog_path'] . '/' . $package['logging']['logfilename'], $nentries);
+ ?>
+ </table>
+<!--
+<form action="diag_pkglogs.php" method="post">
+<input name="clear" type="submit" class="formbtn" value="Clear log">
+</form>
+-->
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_resetstate.php b/src/usr/local/www/diag_resetstate.php
new file mode 100644
index 0000000..07d3575
--- /dev/null
+++ b/src/usr/local/www/diag_resetstate.php
@@ -0,0 +1,143 @@
+<?php
+/* $Id$ */
+/*
+ diag_resetstate.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2009 Scott Ullrich
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-resetstate
+##|*NAME=Diagnostics: Reset state page
+##|*DESCR=Allow access to the 'Diagnostics: Reset state' page.
+##|*MATCH=diag_resetstate.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+
+if ($_POST) {
+ $savemsg = "";
+ if ($_POST['statetable']) {
+ filter_flush_state_table();
+ if ($savemsg) {
+ $savemsg .= " ";
+ }
+ $savemsg .= gettext("The state table has been flushed successfully.");
+ }
+ if ($_POST['sourcetracking']) {
+ mwexec("/sbin/pfctl -F Sources");
+ if ($savemsg) {
+ $savemsg .= " <br />";
+ }
+ $savemsg .= gettext("The source tracking table has been flushed successfully.");
+ }
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Reset state"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="diag_resetstate.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="reset states">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("States"), false, "diag_dump_states.php");
+ if (isset($config['system']['lb_use_sticky'])) {
+ $tab_array[] = array(gettext("Source Tracking"), false, "diag_dump_states_sources.php");
+ }
+ $tab_array[] = array(gettext("Reset States"), true, "diag_resetstate.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable"> <p>
+ <input name="statetable" type="checkbox" id="statetable" value="yes" checked="checked" />
+ <strong><?= gettext("Firewall state table"); ?></strong><br />
+ <span class="vexpl"><br />
+ <?=gettext("Resetting the state tables will remove all entries from " .
+ "the corresponding tables. This means that all open connections " .
+ "will be broken and will have to be re-established. This " .
+ "may be necessary after making substantial changes to the " .
+ "firewall and/or NAT rules, especially if there are IP protocol " .
+ "mappings (e.g. for PPTP or IPv6) with open connections."); ?><br />
+ <br />
+ </span><span class="vexpl"><?=gettext("The firewall will normally leave " .
+ "the state tables intact when changing rules."); ?><br />
+ <br />
+ <?=gettext("NOTE: If you reset the firewall state table, the browser " .
+ "session may appear to be hung after clicking &quot;Reset&quot;. " .
+ "Simply refresh the page to continue."); ?></span></p>
+ </td>
+ </tr>
+ <?php if (isset($config['system']['lb_use_sticky'])): ?>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable"><p>
+ <input name="sourcetracking" type="checkbox" id="sourcetracking" value="yes" checked="checked" />
+ <strong><?= gettext("Firewall Source Tracking"); ?></strong><br />
+ <span class="vexpl"><br />
+ <?=gettext("Resetting the source tracking table will remove all source/destination associations. " .
+ "This means that the \"sticky\" source/destination association " .
+ "will be cleared for all clients."); ?><br />
+ <br />
+ </span><span class="vexpl"><?=gettext("This does not clear active connection states, only source tracking."); ?><br />
+ </p>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Reset"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_routes.php b/src/usr/local/www/diag_routes.php
new file mode 100644
index 0000000..ff2fe8d
--- /dev/null
+++ b/src/usr/local/www/diag_routes.php
@@ -0,0 +1,247 @@
+<?php
+
+/* $Id$ */
+/*
+ diag_routes.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2006 Fernando Lamos
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/netstat
+ pfSense_MODULE: routing
+*/
+##|+PRIV
+##|*IDENT=page-diagnostics-routingtables
+##|*NAME=Diagnostics: Routing tables page
+##|*DESCR=Allow access to the 'Diagnostics: Routing tables' page.
+##|*MATCH=diag_routes.php*
+##|-PRIV
+
+include('guiconfig.inc');
+
+if (isset($_REQUEST['isAjax'])) {
+ $netstat = "/usr/bin/netstat -rW";
+ if (isset($_REQUEST['IPv6'])) {
+ $netstat .= " -f inet6";
+ echo "IPv6\n";
+ } else {
+ $netstat .= " -f inet";
+ echo "IPv4\n";
+ }
+ if (!isset($_REQUEST['resolve'])) {
+ $netstat .= " -n";
+ }
+
+ if (!empty($_REQUEST['filter'])) {
+ $netstat .= " | /usr/bin/sed -e '1,3d; 5,\$ { /" . escapeshellarg(htmlspecialchars($_REQUEST['filter'])) . "/!d; };'";
+ } else {
+ $netstat .= " | /usr/bin/sed -e '1,3d'";
+ }
+
+ if (is_numeric($_REQUEST['limit']) && $_REQUEST['limit'] > 0) {
+ $netstat .= " | /usr/bin/head -n {$_REQUEST['limit']}";
+ }
+
+ echo htmlspecialchars_decode(shell_exec($netstat));
+
+ exit;
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Routing tables"));
+$shortcut_section = "routing";
+
+include('head.inc');
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+ function update_routes(section) {
+ var url = "diag_routes.php";
+ var limit = jQuery('#limit option:selected').text();
+ var filter = jQuery('#filter').val();
+ var params = "isAjax=true&limit=" + limit + "&filter=" + filter;
+ if (jQuery('#resolve').is(':checked')) {
+ params += "&resolve=true";
+ }
+ if (section == "IPv6") {
+ params += "&IPv6=true";
+ }
+ var myAjax = new Ajax.Request(
+ url,
+ {
+ method: 'post',
+ parameters: params,
+ onComplete: update_routes_callback
+ });
+ }
+
+ function update_routes_callback(transport) {
+ // First line contains section
+ var responseTextArr = transport.responseText.split("\n");
+ var section = responseTextArr.shift();
+ var tbody = '';
+ var field = '';
+ var elements = 8;
+ var tr_class = '';
+
+ var thead = '<tr><td class="listtopic" colspan="' + elements + '"><strong>' + section + '<\/strong><\/td><\/tr>' + "\n";
+ for (var i = 0; i < responseTextArr.length; i++) {
+ if (responseTextArr[i] == "") {
+ continue;
+ }
+ var tmp = '';
+ if (i == 0) {
+ tr_class = 'listhdrr';
+ tmp += '<tr class="sortableHeaderRowIdentifier">' + "\n";
+ } else {
+ tr_class = 'listlr';
+ tmp += '<tr>' + "\n";
+ }
+ var j = 0;
+ var entry = responseTextArr[i].split(" ");
+ for (var k = 0; k < entry.length; k++) {
+ if (entry[k] == "") {
+ continue;
+ }
+ if (i == 0 && j == (elements - 1)) {
+ tr_class = 'listhdr';
+ }
+ tmp += '<td class="' + tr_class + '">' + entry[k] + '<\/td>' + "\n";
+ if (i > 0) {
+ tr_class = 'listr';
+ }
+ j++;
+ }
+ // The 'Expire' field might be blank
+ if (j == (elements - 1)) {
+ tmp += '<td class="listr">&nbsp;<\/td>' + "\n";
+ }
+ tmp += '<\/tr>' + "\n";
+ if (i == 0) {
+ thead += tmp;
+ } else {
+ tbody += tmp;
+ }
+ }
+ jQuery('#' + section + ' > thead').html(thead);
+ jQuery('#' + section + ' > tbody').html(tbody);
+ }
+
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+
+ function update_all_routes() {
+ update_routes("IPv4");
+ update_routes("IPv6");
+ }
+
+ jQuery(document).ready(function() {setTimeout('update_all_routes()', 5000);});
+
+//]]>
+</script>
+
+<div id="mainarea">
+<form action="diag_routes.php" method="post">
+<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="diag routes">
+ <tr>
+ <td class="vncellreq" width="22%"><?=gettext("Name resolution");?></td>
+ <td class="vtable" width="78%">
+ <input type="checkbox" class="formfld" id="resolve" name="resolve" value="yes" <?php if ($_POST['resolve'] == 'yes') echo "checked=\"checked\""; ?> /><?=gettext("Enable");?>
+ <br />
+ <span class="expl"><?=gettext("Enable this to attempt to resolve names when displaying the tables.");?></span>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="vncellreq" width="22%"><?=gettext("Number of rows");?></td>
+ <td class="vtable" width="78%">
+ <select id="limit" name="limit">
+<?php
+ foreach (array("10", "50", "100", "200", "500", "1000", gettext("all")) as $item) {
+ echo "<option value=\"{$item}\" " . ($item == "100" ? "selected=\"selected\"" : "") . ">{$item}</option>\n";
+ }
+?>
+ </select>
+ <br />
+ <span class="expl"><?=gettext("Select how many rows to display.");?></span>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="vncellreq" width="22%"><?=gettext("Filter expression");?></td>
+ <td class="vtable" width="78%">
+ <input type="text" class="formfld search" name="filter" id="filter" />
+ <br />
+ <span class="expl"><?=gettext("Use a regular expression to filter IP address or hostnames.");?></span>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="vncellreq" width="22%">&nbsp;</td>
+ <td class="vtable" width="78%">
+ <input type="button" class="formbtn" name="update" onclick="update_all_routes();" value="<?=gettext("Update"); ?>" />
+ <br />
+ <br />
+ <span class="vexpl"><span class="red"><strong><?=gettext("Note:")?></strong></span> <?=gettext("By enabling name resolution, the query should take a bit longer. You can stop it at any time by clicking the Stop button in your browser.");?></span>
+ </td>
+ </tr>
+</table>
+</form>
+
+<table class="tabcont sortable" width="100%" cellspacing="0" cellpadding="6" border="0" id="IPv4" summary="ipv4 routes">
+ <thead>
+ <tr><td class="listtopic"><strong>IPv4</strong></td></tr>
+ </thead>
+ <tbody>
+ <tr><td class="listhdrr"><?=gettext("Gathering data, please wait...");?></td></tr>
+ </tbody>
+</table>
+<table class="tabcont sortable" width="100%" cellspacing="0" cellpadding="6" border="0" id="IPv6" summary="ipv6 routes">
+ <thead>
+ <tr><td class="listtopic"><strong>IPv6</strong></td></tr>
+ </thead>
+ <tbody>
+ <tr><td class="listhdrr"><?=gettext("Gathering data, please wait...");?></td></tr>
+ </tbody>
+</table>
+
+</div>
+
+<?php
+include('fend.inc');
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/diag_smart.php b/src/usr/local/www/diag_smart.php
new file mode 100644
index 0000000..1cc9161
--- /dev/null
+++ b/src/usr/local/www/diag_smart.php
@@ -0,0 +1,453 @@
+<?php
+/*
+ diag_smart.php
+ Part of pfSense
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved
+
+ Some modifications:
+ Copyright (C) 2010 - Jim Pingle
+
+ Copyright (C) 2006, Eric Friesen
+ All rights reserved
+
+*/
+
+require("guiconfig.inc");
+
+$pgtitle = array(gettext("Diagnostics"), gettext("S.M.A.R.T. Monitor Tools"));
+$smartctl = "/usr/local/sbin/smartctl";
+$smartd = "/usr/local/sbin/smartd";
+$start_script = "/usr/local/etc/rc.d/smartd.sh";
+
+$valid_test_types = array("offline", "short", "long", "conveyance");
+$valid_info_types = array("i", "H", "c", "A", "a");
+$valid_log_types = array("error", "selftest");
+
+$closehead = false;
+include("head.inc");
+?>
+
+<style type="text/css">
+/*<![CDATA[*/
+
+input {
+ font-family: courier new, courier;
+ font-weight: normal;
+ font-size: 9pt;
+}
+
+pre {
+ border: 2px solid #435370;
+ background: #F0F0F0;
+ padding: 1em;
+ font-family: courier new, courier;
+ white-space: pre;
+ line-height: 10pt;
+ font-size: 10pt;
+}
+
+.label {
+ font-family: tahoma, verdana, arial, helvetica;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.button {
+ font-family: tahoma, verdana, arial, helvetica;
+ font-weight: bold;
+ font-size: 11px;
+}
+
+/*]]>*/
+</style>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php
+include("fbegin.inc");
+
+// Highlights the words "PASSED", "FAILED", and "WARNING".
+function add_colors($string) {
+ // To add words keep arrays matched by numbers
+ $patterns[0] = '/PASSED/';
+ $patterns[1] = '/FAILED/';
+ $patterns[2] = '/Warning/';
+ $replacements[0] = '<b><font color="#00ff00">' . gettext("PASSED") . '</font></b>';
+ $replacements[1] = '<b><font color="#ff0000">' . gettext("FAILED") . '</font></b>';
+ $replacements[2] = '<font color="#ff0000">' . gettext("Warning") . '</font>';
+ ksort($patterns);
+ ksort($replacements);
+ return preg_replace($patterns, $replacements, $string);
+}
+
+// Edits smartd.conf file, adds or removes email for failed disk reporting
+function update_email($email) {
+ // Did they pass an email?
+ if (!empty($email)) {
+ // Put it in the smartd.conf file
+ shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN -H -m " . escapeshellarg($email) . "/' /usr/local/etc/smartd.conf");
+ } else {
+ // Remove email flags in smartd.conf
+ shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf");
+ }
+}
+
+function smartmonctl($action) {
+ global $start_script;
+ shell_exec($start_script . escapeshellarg($action));
+}
+
+// What page, aka. action is being wanted
+// If they "get" a page but don't pass all arguments, smartctl will throw an error
+$action = (isset($_POST['action']) ? $_POST['action'] : $_GET['action']);
+$targetdev = basename($_POST['device']);
+if (!file_exists('/dev/' . $targetdev)) {
+ echo "Device does not exist, bailing.";
+ return;
+}
+switch ($action) {
+ // Testing devices
+ case 'test':
+ {
+ $test = $_POST['testType'];
+ if (!in_array($test, $valid_test_types)) {
+ echo "Invalid test type, bailing.";
+ return;
+ }
+ $output = add_colors(shell_exec($smartctl . " -t " . escapeshellarg($test) . " /dev/" . escapeshellarg($targetdev)));
+ echo '<pre>' . $output . '
+ <form action="diag_smart.php" method="post" name="abort">
+ <input type="hidden" name="device" value="' . $targetdev . '" />
+ <input type="hidden" name="action" value="abort" />
+ <input type="submit" name="submit" value="' . gettext("Abort") . '" />
+ </form>
+ </pre>';
+ break;
+ }
+
+ // Info on devices
+ case 'info':
+ {
+ $type = $_POST['type'];
+ if (!in_array($type, $valid_info_types)) {
+ echo "Invalid info type, bailing.";
+ return;
+ }
+ $output = add_colors(shell_exec($smartctl . " -" . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev)));
+ echo "<pre>$output</pre>";
+ break;
+ }
+
+ // View logs
+ case 'logs':
+ {
+ $type = $_POST['type'];
+ if (!in_array($type, $valid_log_types)) {
+ echo "Invalid log type, bailing.";
+ return;
+ }
+ $output = add_colors(shell_exec($smartctl . " -l " . escapeshellarg($type) . " /dev/" . escapeshellarg($targetdev)));
+ echo "<pre>$output</pre>";
+ break;
+ }
+
+ // Abort tests
+ case 'abort':
+ {
+ $output = shell_exec($smartctl . " -X /dev/" . escapeshellarg($targetdev));
+ echo "<pre>$output</pre>";
+ break;
+ }
+
+ // Config changes, users email in xml config and write changes to smartd.conf
+ case 'config':
+ {
+ if (isset($_POST['submit'])) {
+ // DOES NOT WORK YET...
+ if ($_POST['testemail']) {
+// FIXME shell_exec($smartd . " -M test -m " . $config['system']['smartmonemail']);
+ $savemsg = sprintf(gettext("Email sent to %s"), $config['system']['smartmonemail']);
+ smartmonctl("stop");
+ smartmonctl("start");
+ } else {
+ $config['system']['smartmonemail'] = $_POST['smartmonemail'];
+ write_config();
+
+ // Don't know what all this means, but it adds the config changed header when config is saved
+ $retval = 0;
+ config_lock();
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ config_unlock();
+
+ if ($_POST['email']) {
+ // Write the changes to the smartd.conf file
+ update_email($_POST['smartmonemail']);
+ }
+
+ // Send sig HUP to smartd, rereads the config file
+ shell_exec("/usr/bin/killall -HUP smartd");
+ }
+ }
+ // Was the config changed? if so , print the message
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ // Get users email from the xml file
+ $pconfig['smartmonemail'] = $config['system']['smartmonemail'];
+
+ ?>
+ <!-- Print the tabs across the top -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tabs">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Information/Tests"), false, $_SERVER['PHP_SELF'] . "?action=default");
+ $tab_array[1] = array(gettext("Config"), true, $_SERVER['PHP_SELF'] . "?action=config");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ </table>
+<!-- user email address -->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="config">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="e-mail">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Config"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Email Address"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="text" name="smartmonemail" value="<?=htmlspecialchars($pconfig['smartmonemail'])?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="config" />
+ <input type="hidden" name="email" value="true" />
+ <input type="submit" name="submit" value="<?=gettext("Save"); ?>" class="formbtn" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+
+<!-- test email -->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="config">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="test e-mail">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Test email"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <?php printf(gettext("Send test email to %s"), $config['system']['smartmonemail']); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="config" />
+ <input type="hidden" name="testemail" value="true" />
+ <input type="submit" name="submit" value="<?=gettext("Send"); ?>" class="formbtn" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+
+ <?php
+ break;
+ }
+
+ // Default page, prints the forms to view info, test, etc...
+ default:
+ {
+ $devs = get_smart_drive_list();
+ ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="default page">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Information/Tests"), true, $_SERVER['PHP_SELF']);
+ //$tab_array[1] = array("Config", false, $_SERVER['PHP_SELF'] . "?action=config");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ </table>
+<!--INFO-->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="info">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="info">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Info"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Info type"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="type" value="i" /><?=gettext("Info"); ?><br />
+ <input type="radio" name="type" value="H" checked="checked" /><?=gettext("Health"); ?><br />
+ <input type="radio" name="type" value="c" /><?=gettext("SMART Capabilities"); ?><br />
+ <input type="radio" name="type" value="A" /><?=gettext("Attributes"); ?><br />
+ <input type="radio" name="type" value="a" /><?=gettext("All"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="device">
+ <?php
+ foreach ($devs as $dev) {
+ echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="info" />
+ <input type="submit" name="submit" value="<?=gettext("View"); ?>" class="formbtn" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+<!--TESTS-->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="tests">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tests">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Perform Self-tests"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Test type"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="testType" value="offline" /><?=gettext("Offline"); ?><br />
+ <input type="radio" name="testType" value="short" checked="checked" /><?=gettext("Short"); ?><br />
+ <input type="radio" name="testType" value="long" /><?=gettext("Long"); ?><br />
+ <input type="radio" name="testType" value="conveyance" /><?=gettext("Conveyance (ATA Disks Only)"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="device">
+ <?php
+ foreach ($devs as $dev) {
+ echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="test" />
+ <input type="submit" name="submit" value="<?=gettext("Test"); ?>" class="formbtn" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+<!--LOGS-->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="logs">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="logs">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("View Logs"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Log type"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="type" value="error" checked="checked" /><?=gettext("Error"); ?><br />
+ <input type="radio" name="type" value="selftest" /><?=gettext("Self-test"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="device">
+ <?php
+ foreach ($devs as $dev) {
+ echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="logs" />
+ <input type="submit" name="submit" value="<?=gettext("View"); ?>" class="formbtn" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+<!--ABORT-->
+ <form action="<?= $_SERVER['PHP_SELF']?>" method="post" name="abort">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="abort">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Abort tests"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Device: /dev/"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="device">
+ <?php
+ foreach ($devs as $dev) {
+ echo "<option value=\"" . $dev . "\">" . $dev . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="action" value="abort" />
+ <input type="submit" name="submit" value="<?=gettext("Abort"); ?>" class="formbtn" onclick="return confirm('<?=gettext("Do you really want to abort the test?"); ?>')" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </form>
+
+ <?php
+ break;
+ }
+}
+
+// print back button on pages
+if (isset($_POST['submit']) && $_POST['submit'] != "Save") {
+?>
+ <input type="button" class="formbtn" value="<?=gettext("Back");?>" onclick="window.location.href='<?=$_SERVER['PHP_SELF'];?>'" />
+<?php
+}
+?>
+<br />
+<?php
+if ($ulmsg) {
+ echo "<p><strong>" . $ulmsg . "</strong></p>\n";
+}
+?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_sockets.php b/src/usr/local/www/diag_sockets.php
new file mode 100644
index 0000000..cdcfeb7
--- /dev/null
+++ b/src/usr/local/www/diag_sockets.php
@@ -0,0 +1,181 @@
+<?php
+
+/* $Id$ */
+/*
+ diag_sockets.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2012
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/sockstat
+*/
+##|+PRIV
+##|*IDENT=page-diagnostics-sockets
+##|*NAME=Diagnostics: Sockets page
+##|*DESCR=Allow access to the 'Diagnostics: Sockets' page.
+##|*MATCH=diag_sockets.php*
+##|-PRIV
+
+include('guiconfig.inc');
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Sockets"));
+
+include('head.inc');
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc");
+
+$showAll = isset($_GET['showAll']);
+$showAllText = $showAll ? "Show only listening sockets" : "Show all socket connections";
+$showAllOption = $showAll ? "" : "?showAll";
+
+?>
+<div id="mainarea">
+<table class="tabcont" width="100%" summary="diag sockets">
+ <tr>
+ <td>Information about listening sockets for both <a href="#IPv4">IPv4</a> and <a href="#IPv6">IPv6</a>.</td>
+ </tr>
+ <tr>
+ <td>For explanation about the meaning of the information listed for each socket click <a href="#about">here</a>.</td>
+ </tr>
+ <tr>
+ <td><input type="button" value="<?=$showAllText?>" onclick="window.location.href='diag_sockets.php<?=$showAllOption?>'"/>To show information about both listening and connected sockets click this.</td>
+ </tr>
+</table>
+
+<?php
+ if (isset($_GET['showAll'])) {
+ $internet4 = shell_exec('sockstat -4');
+ $internet6 = shell_exec('sockstat -6');
+ } else {
+ $internet4 = shell_exec('sockstat -4l');
+ $internet6 = shell_exec('sockstat -6l');
+ }
+ foreach (array(&$internet4, &$internet6) as $tabindex => $table) {
+ $elements = ($tabindex == 0 ? 7 : 7);
+ $name = ($tabindex == 0 ? 'IPv4' : 'IPv6');
+?>
+<a name="<?=$name;?>"></a>
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab">
+ <tr>
+ <td class="listtopic" colspan="<?=$elements?>"><strong><?=$name;?></strong></td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tabcont sortable" id="sortabletable" width="100%" cellspacing="0" cellpadding="6" border="0" summary="results">
+ <?php
+ foreach (explode("\n", $table) as $i => $line) {
+ if ($i == 0) {
+ $class = 'listhdrr';
+ } else {
+ $class = 'listlr';
+ }
+
+ if (trim($line) == "") {
+ continue;
+ }
+ print("<tr id=\"$name$i\">\n");
+ $j = 0;
+ foreach (explode(' ', $line) as $entry) {
+ if ($entry == '' || $entry == "ADDRESS") {
+ continue;
+ }
+ if ($i == 0) {
+ print("<th class=\"$class\">$entry</th>\n");
+ } else {
+ print("<td class=\"$class\">$entry</td>\n");
+ }
+ if ($i > 0) {
+ $class = 'listr';
+ }
+ $j++;
+ }
+ print("</tr>\n");
+ }
+ ?>
+ </table>
+ </td>
+ </tr>
+</table>
+<?php
+ }
+?>
+
+<br />
+<a name="about"></a>
+<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="info">
+ <tr>
+ <td colspan="2" class="listtopic" >Socket information explanation</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listhdrr">
+This page show the output for the commands: "sockstat -4lL" and "sockstat -6lL".<br />
+Or in case of showing all sockets the output for: "sockstat -4" and "sockstat -6".<br />
+<br />
+The information listed for each socket is:
+ </td>
+ </tr>
+ <tr>
+ <td class="listlr">USER </td>
+ <td class="listr">The user who owns the socket.</td>
+ </tr>
+ <tr>
+ <td class="listlr">COMMAND</td>
+ <td class="listr">The command which holds the socket.</td>
+ </tr>
+ <tr>
+ <td class="listlr">PID</td>
+ <td class="listr">The process ID of the command which holds the socket.</td>
+ </tr>
+ <tr>
+ <td class="listlr">FD</td>
+ <td class="listr">The file descriptor number of the socket.</td>
+ </tr>
+ <tr>
+ <td class="listlr">PROTO</td>
+ <td class="listr">The transport protocol associated with the socket for Internet sockets, or the type of socket (stream or data-gram) for UNIX sockets.</td>
+ </tr>
+ <tr>
+ <td class="listlr">ADDRESS</td>
+ <td class="listr">(UNIX sockets only) For bound sockets, this is the file-name of the socket. For other sockets, it is the name, PID and file descriptor number of the peer, or ``(none)'' if the socket is neither bound nor connected.</td>
+ </tr>
+ <tr>
+ <td class="listlr">LOCAL ADDRESS</td>
+ <td class="listr">(Internet sockets only) The address the local end of the socket is bound to (see getsockname(2)).</td>
+ </tr>
+ <tr>
+ <td class="listlr">FOREIGN ADDRESS</td>
+ <td class="listr">(Internet sockets only) The address the foreign end of the socket is bound to (see getpeername(2)).</td>
+ </tr>
+</table>
+</div>
+<?php
+include('fend.inc');
+?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_states_summary.php b/src/usr/local/www/diag_states_summary.php
new file mode 100644
index 0000000..7aa91d6
--- /dev/null
+++ b/src/usr/local/www/diag_states_summary.php
@@ -0,0 +1,206 @@
+<?php
+/*
+ diag_states_summary.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2010-2014 Jim Pingle
+
+ Portions borrowed from diag_dump_states.php:
+ Copyright (C) 2005-2009 Scott Ullrich
+ Copyright (C) 2005 Colin Smith
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-statessummary
+##|*NAME=Diagnostics: States Summary page
+##|*DESCR=Allow access to the 'Diagnostics: States Summary' page.
+##|*MATCH=diag_states_summary.php*
+##|-PRIV
+
+exec("/sbin/pfctl -s state", $states);
+
+$srcipinfo = array();
+$dstipinfo = array();
+$allipinfo = array();
+$pairipinfo = array();
+
+function addipinfo(&$iparr, $ip, $proto, $srcport, $dstport) {
+ $iparr[$ip]['seen']++;
+ $iparr[$ip]['protos'][$proto]['seen']++;
+ if (!empty($srcport)) {
+ $iparr[$ip]['protos'][$proto]['srcports'][$srcport]++;
+ }
+ if (!empty($dstport)) {
+ $iparr[$ip]['protos'][$proto]['dstports'][$dstport]++;
+ }
+}
+
+$row = 0;
+if (count($states) > 0) {
+ foreach ($states as $line) {
+ $line_split = preg_split("/\s+/", $line);
+ $iface = array_shift($line_split);
+ $proto = array_shift($line_split);
+ $state = array_pop($line_split);
+ $info = implode(" ", $line_split);
+
+ /* Handle NAT cases
+ Replaces an external IP + NAT by the internal IP */
+ if (strpos($info, ') ->') !== FALSE) {
+ /* Outbound NAT */
+ $info = preg_replace('/(\S+) \((\S+)\)/U', "$2", $info);
+ } elseif (strpos($info, ') <-') !== FALSE) {
+ /* Inbound NAT/Port Forward */
+ $info = preg_replace('/(\S+) \((\S+)\)/U', "$1", $info);
+ }
+
+ /* break up info and extract $srcip and $dstip */
+ $ends = preg_split("/\<?-\>?/", $info);
+
+ if (strpos($info, '->') === FALSE) {
+ $srcinfo = $ends[count($ends) - 1];
+ $dstinfo = $ends[0];
+ } else {
+ $srcinfo = $ends[0];
+ $dstinfo = $ends[count($ends) - 1];
+ }
+
+ /* Handle IPv6 */
+ $parts = explode(":", $srcinfo);
+ $partcount = count($parts);
+ if ($partcount <= 2) {
+ $srcip = trim($parts[0]);
+ $srcport = trim($parts[1]);
+ } else {
+ preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $srcinfo, $matches);
+ $srcip = $matches[1];
+ $srcport = trim($matches[3]);
+ }
+
+ $parts = explode(":", $dstinfo);
+ $partcount = count($parts);
+ if ($partcount <= 2) {
+ $dstip = trim($parts[0]);
+ $dstport = trim($parts[1]);
+ } else {
+ preg_match("/([0-9a-f:]+)(\[([0-9]+)\])?/i", $dstinfo, $matches);
+ $dstip = $matches[1];
+ $dstport = trim($matches[3]);
+ }
+
+ addipinfo($srcipinfo, $srcip, $proto, $srcport, $dstport);
+ addipinfo($dstipinfo, $dstip, $proto, $srcport, $dstport);
+ addipinfo($pairipinfo, "{$srcip} -> {$dstip}", $proto, $srcport, $dstport);
+
+ addipinfo($allipinfo, $srcip, $proto, $srcport, $dstport);
+ addipinfo($allipinfo, $dstip, $proto, $srcport, $dstport);
+
+ }
+}
+
+function sort_by_ip($a, $b) {
+ return ip2ulong($a) < ip2ulong($b) ? -1 : 1;
+}
+
+function build_port_info($portarr, $proto) {
+ if (!$portarr) {
+ return '';
+ }
+ $ports = array();
+ asort($portarr);
+ foreach (array_reverse($portarr, TRUE) as $port => $count) {
+ $str = "";
+ $service = getservbyport($port, strtolower($proto));
+ $port = "{$proto}/{$port}";
+ if ($service) {
+ $port = "{$port} ({$service})";
+ }
+ $ports[] = "{$port}: {$count}";
+ }
+ return implode($ports, ', ');
+}
+
+function print_summary_table($label, $iparr, $sort = TRUE) { ?>
+
+<h3><?php echo $label; ?></h3>
+<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="states summary">
+ <tr>
+ <td class="listhdrr"><?=gettext("IP");?></td>
+ <td class="listhdrr"># <?=gettext("States");?></td>
+ <td class="listhdrr"><?=gettext("Proto");?></td>
+ <td class="listhdrr"># <?=gettext("States");?></td>
+ <td class="listhdrr"><?=gettext("Src Ports");?></td>
+ <td class="listhdrr"><?=gettext("Dst Ports");?></td>
+ </tr>
+<?php
+ if ($sort) {
+ uksort($iparr, "sort_by_ip");
+ }
+ foreach ($iparr as $ip => $ipinfo) { ?>
+ <tr>
+ <td class="vncell"><?php echo $ip; ?></td>
+ <td class="vncell"><?php echo $ipinfo['seen']; ?></td>
+ <td class="vncell">&nbsp;</td>
+ <td class="vncell">&nbsp;</td>
+ <td class="vncell">&nbsp;</td>
+ <td class="vncell">&nbsp;</td>
+ </tr>
+ <?php foreach ($ipinfo['protos'] as $proto => $protoinfo) { ?>
+ <tr>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="listlr"><?php echo $proto; ?></td>
+ <td class="listr" align="center"><?php echo $protoinfo['seen']; ?></td>
+ <td class="listr" align="center"><span title="<?php echo build_port_info($protoinfo['srcports'], $proto); ?>"><?php echo count($protoinfo['srcports']); ?></span></td>
+ <td class="listr" align="center"><span title="<?php echo build_port_info($protoinfo['dstports'], $proto); ?>"><?php echo count($protoinfo['dstports']); ?></span></td>
+ </tr>
+ <?php } ?>
+<?php } ?>
+
+</table>
+
+<?php
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("State Table Summary"));
+require_once("guiconfig.inc");
+include("head.inc");
+echo "<body>";
+include("fbegin.inc");
+
+
+print_summary_table(gettext("By Source IP"), $srcipinfo);
+print_summary_table(gettext("By Destination IP"), $dstipinfo);
+print_summary_table(gettext("Total per IP"), $allipinfo);
+print_summary_table(gettext("By IP Pair"), $pairipinfo, FALSE);
+?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_system_activity.php b/src/usr/local/www/diag_system_activity.php
new file mode 100644
index 0000000..1f6380f
--- /dev/null
+++ b/src/usr/local/www/diag_system_activity.php
@@ -0,0 +1,115 @@
+<?php
+/* $Id$ */
+/*
+ diag_system_activity.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright (C) 2008-2009 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/top
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-system-activity
+##|*NAME=Diagnostics: System Activity
+##|*DESCR=Allows access to the 'Diagnostics: System Activity' page
+##|*MATCH=diag_system_activity.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pgtitle = gettext("Diagnostics: System Activity");
+
+if ($_REQUEST['getactivity']) {
+ $text = `/usr/bin/top -aHS | /usr/bin/cut -c1-105`;
+ echo $text;
+ exit;
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+ function getcpuactivity() {
+ scroll(0, 0);
+ var url = "/diag_system_activity.php";
+ var pars = 'getactivity=yes';
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ jQuery('#cpuactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
+ setTimeout('getcpuactivity()', 2500);
+ }
+ setTimeout('getcpuactivity()', 1000);
+//]]>
+</script>
+<div id="maincontent">
+<?php
+ if ($savemsg) {
+ echo "<div id=\"savemsg\">";
+ print_info_box($savemsg);
+ echo "</div>";
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag system activity">
+ <tr>
+ <td>
+ <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td align="center">
+ <table summary="results">
+ <tr>
+ <td>
+ <div id="cpuactivitydiv">
+ <?=gettext("Gathering CPU activity, please wait...");?>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_system_pftop.php b/src/usr/local/www/diag_system_pftop.php
new file mode 100644
index 0000000..7d51c84
--- /dev/null
+++ b/src/usr/local/www/diag_system_pftop.php
@@ -0,0 +1,216 @@
+<?php
+/* $Id$ */
+/*
+ diag_system_pftop.php
+ Copyright (C) 2008-2009 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-system-pftop
+##|*NAME=Diagnostics: pfTop
+##|*DESCR=Allows access to the 'Diagnostics: pfTop' page
+##|*MATCH=diag_system_pftop.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pgtitle = gettext("Diagnostics: pfTop");
+
+$sorttypes = array('age', 'bytes', 'dest', 'dport', 'exp', 'none', 'peak', 'pkt', 'rate', 'size', 'sport', 'src');
+$viewtypes = array('default', 'label', 'long', 'queue', 'rules', 'size', 'speed', 'state', 'time');
+$viewall = array('queue', 'label', 'rules');
+$numstates = array('50', '100', '200', '500', '1000', 'all');
+
+if ($_REQUEST['getactivity']) {
+ if ($_REQUEST['sorttype'] && in_array($_REQUEST['sorttype'], $sorttypes) &&
+ $_REQUEST['viewtype'] && in_array($_REQUEST['viewtype'], $viewtypes) &&
+ $_REQUEST['states'] && in_array($_REQUEST['states'], $numstates)) {
+ $viewtype = escapeshellarg($_REQUEST['viewtype']);
+ if (in_array($_REQUEST['viewtype'], $viewall)) {
+ $sorttype = "";
+ $numstate = "-a";
+ } else {
+ $sorttype = "-o " . escapeshellarg($_REQUEST['sorttype']);
+ $numstate = ($_REQUEST['states'] == "all" ? "-a" : escapeshellarg($_REQUEST['states']));
+ }
+ } else {
+ $sorttype = "bytes";
+ $viewtype = "default";
+ $numstate = "100";
+ }
+
+ $text = `pftop -b {$sorttype} -v {$viewtype} {$numstate}`;
+ echo $text;
+ exit;
+}
+
+include("head.inc");
+
+if ($_REQUEST['sorttype'] && in_array($_REQUEST['sorttype'], $sorttypes) &&
+ $_REQUEST['viewtype'] && in_array($_REQUEST['viewtype'], $viewtypes) &&
+ $_REQUEST['states'] && in_array($_REQUEST['states'], $numstates)) {
+ $viewtype = escapeshellarg($_REQUEST['viewtype']);
+ if (in_array($_REQUEST['viewtype'], $viewall)) {
+ $sorttype = "";
+ $numstate = "-a";
+ } else {
+ $sorttype = "-o " . escapeshellarg($_REQUEST['sorttype']);
+ $numstate = ($_REQUEST['states'] == "all" ? "-a" : escapeshellarg($_REQUEST['states']));
+ }
+} else {
+ $sorttype = "bytes";
+ $viewtype = "default";
+ $numstate = "100";
+}
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form method="post" action="diag_system_pftop.php">
+<script type="text/javascript">
+//<![CDATA[
+ function getpftopactivity() {
+ var url = "/diag_system_pftop.php";
+ var pars = 'getactivity=yes&sorttype=' + jQuery('#sorttype').val() + '&viewtype=' + jQuery('#viewtype').val() + '&states=' + jQuery('#states').val();
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ jQuery('#pftopactivitydiv').html('<font face="Courier" size="2"><pre style="text-align:left;">' + transport.responseText + '<\/pre><\/font>');
+ setTimeout('getpftopactivity()', 2500);
+ }
+ setTimeout('getpftopactivity()', 1000);
+//]]>
+</script>
+<div id="maincontent">
+<?php
+ if ($savemsg) {
+ echo "<div id=\"savemsg\">";
+ print_info_box($savemsg);
+ echo "</div>";
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+ <div id="mainarea" style="padding-bottom: 0px;">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="diag system pftop">
+ <tr>
+ <td class="list">
+ <div id='viewtypediv'><?=gettext("View type:"); ?>
+ <select name='viewtype' id='viewtype'>
+ <option value='default' <?php echo ($viewtype == "default") ? "selected=\"selected\"" : ""; ?>><?=gettext("Default");?></option>
+ <option value='label' <?php echo ($viewtype == "label") ? "selected=\"selected\"" : ""; ?>><?=gettext("Label");?></option>
+ <option value='long' <?php echo ($viewtype == "long") ? "selected=\"selected\"" : ""; ?>><?=gettext("Long");?></option>
+ <option value='queue' <?php echo ($viewtype == "queue") ? "selected=\"selected\"" : ""; ?>><?=gettext("Queue");?></option>
+ <option value='rules' <?php echo ($viewtype == "rules") ? "selected=\"selected\"" : ""; ?>><?=gettext("Rules");?></option>
+ <option value='size' <?php echo ($viewtype == "size") ? "selected=\"selected\"" : ""; ?>><?=gettext("Size");?></option>
+ <option value='speed' <?php echo ($viewtype == "speed") ? "selected=\"selected\"" : ""; ?>><?=gettext("Speed");?></option>
+ <option value='state' <?php echo ($viewtype == "state") ? "selected=\"selected\"" : ""; ?>><?=gettext("State");?></option>
+ <option value='time' <?php echo ($viewtype == "time") ? "selected=\"selected\"" : ""; ?>><?=gettext("Time");?></option>
+ </select>
+ </div>
+ </td>
+ <td class="list">
+ <div id='sorttypediv'><?=gettext("Sort type:"); ?>
+ <select name='sorttype' id='sorttype'>
+ <option value='age' <?php echo ($sorttype == "age") ? "selected=\"selected\"" : ""; ?>><?=gettext("Age");?></option>
+ <option value='bytes' <?php echo ($sorttype == "bytes") ? "selected=\"selected\"" : ""; ?>><?=gettext("Bytes");?></option>
+ <option value='dest' <?php echo ($sorttype == "dest") ? "selected=\"selected\"" : ""; ?>><?=gettext("Destination Address");?></option>
+ <option value='dport' <?php echo ($sorttype == "dport") ? "selected=\"selected\"" : ""; ?>><?=gettext("Destination Port");?></option>
+ <option value='exp' <?php echo ($sorttype == "exp") ? "selected=\"selected\"" : ""; ?>><?=gettext("Expiry");?></option>
+ <option value='none' <?php echo ($sorttype == "none") ? "selected=\"selected\"" : ""; ?>><?=gettext("None");?></option>
+ <option value='peak' <?php echo ($sorttype == "peak") ? "selected=\"selected\"" : ""; ?>><?=gettext("Peak");?></option>
+ <option value='pkt' <?php echo ($sorttype == "pkt") ? "selected=\"selected\"" : ""; ?>><?=gettext("Packet");?></option>
+ <option value='rate' <?php echo ($sorttype == "rate") ? "selected=\"selected\"" : ""; ?>><?=gettext("Rate");?></option>
+ <option value='size' <?php echo ($sorttype == "size") ? "selected=\"selected\"" : ""; ?>><?=gettext("Size");?></option>
+ <option value='sport' <?php echo ($sorttype == "sport") ? "selected=\"selected\"" : ""; ?>><?=gettext("Source Port");?></option>
+ <option value='src' <?php echo ($sorttype == "src") ? "selected=\"selected\"" : ""; ?>><?=gettext("Source Address");?></option>
+ </select>
+ </div>
+ </td>
+ <td class="list">
+ <div id='statesdiv'><?=gettext("Number of States:"); ?>
+ <select name='states' id='states'>
+ <option value='50' <?php echo ($numstate == "50") ? "selected=\"selected\"" : ""; ?>>50</option>
+ <option value='100' <?php echo ($numstate == "100") ? "selected=\"selected\"" : ""; ?>>100</option>
+ <option value='200' <?php echo ($numstate == "200") ? "selected=\"selected\"" : ""; ?>>200</option>
+ <option value='500' <?php echo ($numstate == "500") ? "selected=\"selected\"" : ""; ?>>500</option>
+ <option value='1000' <?php echo ($numstate == "1000") ? "selected=\"selected\"" : ""; ?>>1000</option>
+ <option value='all' <?php echo ($numstate == "all") ? "selected=\"selected\"" : ""; ?>>all</option>
+ </select>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" align="center">
+ <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
+ <tr>
+ <td align="center">
+ <table summary="results">
+ <tr>
+ <td>
+ <div id="pftopactivitydiv"><?=gettext("Gathering pfTOP activity, please wait...");?></div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+</div>
+</form>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+jQuery("#viewtype").change(function() {
+ var selected = jQuery("#viewtype option:selected");
+ switch (selected.val()) {
+ case "queue":
+ case "label":
+ case "rules":
+ jQuery("#sorttype, #sorttypediv, #statesdiv, #states").hide();
+ break;
+ default:
+ jQuery("#sorttype, #sorttypediv, #statesdiv, #states").show();
+ }
+});
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_tables.php b/src/usr/local/www/diag_tables.php
new file mode 100644
index 0000000..fe6778f
--- /dev/null
+++ b/src/usr/local/www/diag_tables.php
@@ -0,0 +1,191 @@
+<?php
+/*
+ diag_tables.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2010 Jim Pingle
+
+ Portions borrowed from diag_dump_states.php:
+ Copyright (C) 2010 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-tables
+##|*NAME=Diagnostics: PF Table IP addresses
+##|*DESCR=Allow access to the 'Diagnostics: Tables' page.
+##|*MATCH=diag_tables.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Tables"));
+$shortcut_section = "aliases";
+
+require_once("guiconfig.inc");
+
+// Set default table
+$tablename = "sshlockout";
+
+if ($_REQUEST['type']) {
+ $tablename = $_REQUEST['type'];
+}
+
+if ($_REQUEST['delete']) {
+ if (is_ipaddr($_REQUEST['delete']) || is_subnet($_REQUEST['delete'])) {
+ exec("/sbin/pfctl -t " . escapeshellarg($_REQUEST['type']) . " -T delete " . escapeshellarg($_REQUEST['delete']), $delete);
+ echo htmlentities($_REQUEST['delete']);
+ }
+ exit;
+}
+
+if ($_REQUEST['deleteall']) {
+ exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
+ if (is_array($entries)) {
+ foreach ($entries as $entryA) {
+ $entry = trim($entryA);
+ exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T delete " . escapeshellarg($entry), $delete);
+ }
+ }
+}
+
+if ((($tablename == "bogons") || ($tablename == "bogonsv6")) && ($_POST['Download'])) {
+ mwexec_bg("/etc/rc.update_bogons.sh now");
+ $maxtimetowait = 0;
+ $loading = true;
+ while ($loading == true) {
+ $isrunning = `/bin/ps awwwux | /usr/bin/grep -v grep | /usr/bin/grep bogons`;
+ if ($isrunning == "") {
+ $loading = false;
+ }
+ $maxtimetowait++;
+ if ($maxtimetowait > 89) {
+ $loading = false;
+ }
+ sleep(1);
+ }
+ if ($maxtimetowait < 90) {
+ $savemsg = gettext("The bogons database has been updated.");
+ }
+}
+
+exec("/sbin/pfctl -t " . escapeshellarg($tablename) . " -T show", $entries);
+exec("/sbin/pfctl -sT", $tables);
+
+include("head.inc");
+?>
+<body>
+<?php include("fbegin.inc"); ?>
+
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form method="post" action="diag_tables.php">
+
+<script type="text/javascript">
+//<![CDATA[
+ function method_change(entrytype) {
+ window.location='diag_tables.php?type=' + entrytype;
+ }
+ function del_entry(entry) {
+ jQuery.ajax("diag_tables.php?type=<?php echo htmlspecialchars($tablename);?>&delete=" + entry, {
+ complete: function(response) {
+ if (200 == response.status) {
+ // Escape all dots to not confuse jQuery selectors
+ name = response.responseText.replace(/\./g,'\\.');
+ name = name.replace(/\//g,'\\-');
+ name = "entry_" + name;
+ jQuery('#' + name).fadeOut(1000);
+ }
+ }
+ });
+ }
+//]]>
+</script>
+
+<?=gettext("Table:");?>
+<select id="type" onchange="method_change(jQuery('#type').val());" name="type">
+ <?php
+ foreach ($tables as $table) {
+ echo "<option value=\"{$table}\"";
+ if ($tablename == $table) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$table}</option>\n";
+ }
+ ?>
+</select>
+
+<br/><br/>
+
+<table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="tables">
+ <tr>
+ <td class="listhdrr"><?=gettext("IP Address");?></td>
+ </tr>
+<?php
+ $count = 0;
+ foreach ($entries as $entryA):
+ $entry = trim($entryA);
+?>
+ <tr id="entry_<?=str_replace("/", "-", $entry);?>">
+ <td>
+ <?php echo $entry; ?>
+ </td>
+ <td>
+ <?php if (($tablename != "bogons") && ($tablename != "bogonsv6")) { ?>
+ <a onclick="del_entry('<?=htmlspecialchars($entry)?>');">
+ <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="delete" />
+ </a>
+ <?php } ?>
+ </td>
+ </tr>
+<?php
+ $count++;
+ endforeach;
+ if ($count == 0) {
+ if (($tablename == "bogons") || ($tablename == "bogonsv6")) {
+ echo "<tr><td>" . gettext("No entries exist in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.");
+ } else {
+ echo "<tr><td>" . gettext("No entries exist in this table.");
+ }
+ }
+?>
+
+<?php
+ if ($count > 0) {
+ if (($tablename == "bogons") || ($tablename == "bogonsv6")) {
+ $last_updated = exec('/usr/bin/grep -i -m 1 -E "^# last updated" /etc/' . escapeshellarg($tablename));
+ echo "<tr><td>&nbsp;<b>$count</b> " . gettext("entries in this table.") . "&nbsp;&nbsp;" . "<input name=\"Download\" type=\"submit\" class=\"formbtn\" value=\"" . gettext("Download") . "\" /> " . gettext(" the latest bogon data.") . "<br />" . "$last_updated";
+ } else {
+ echo "<tr><td>" . gettext("Delete") . " <a href=\"diag_tables.php?deleteall=true&amp;type=" . htmlspecialchars($tablename) . "\">" . gettext("all") . "</a> " . "<b>$count</b> " . gettext("entries in this table.");
+ }
+ }
+?>
+</td></tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_testport.php b/src/usr/local/www/diag_testport.php
new file mode 100644
index 0000000..fbc448a
--- /dev/null
+++ b/src/usr/local/www/diag_testport.php
@@ -0,0 +1,290 @@
+<?php
+/*
+ diag_testport.php
+ Copyright (C) 2013 Jim P (jimp@pfsense.org)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Portions based on diag_ping.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2005 Bob Zoller (bob@kludgebox.com) and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/nc
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-testport
+##|*NAME=Diagnostics: Test Port
+##|*DESCR=Allow access to the 'Diagnostics: Test Port' page.
+##|*MATCH=diag_testport.php*
+##|-PRIV
+
+$allowautocomplete = true;
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Test Port"));
+require("guiconfig.inc");
+
+define('NC_TIMEOUT', 10);
+$do_testport = false;
+
+if ($_POST || $_REQUEST['host']) {
+ unset($input_errors);
+
+ /* input validation */
+ $reqdfields = explode(" ", "host port");
+ $reqdfieldsn = array(gettext("Host"), gettext("Port"));
+ do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!is_ipaddr($_REQUEST['host']) && !is_hostname($_REQUEST['host'])) {
+ $input_errors[] = gettext("Please enter a valid IP or hostname.");
+ }
+
+ if (!is_port($_REQUEST['port'])) {
+ $input_errors[] = gettext("Please enter a valid port number.");
+ }
+
+ if (($_REQUEST['srcport'] != "") && (!is_numeric($_REQUEST['srcport']) || !is_port($_REQUEST['srcport']))) {
+ $input_errors[] = gettext("Please enter a valid source port number, or leave the field blank.");
+ }
+
+ if (is_ipaddrv4($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv6")) {
+ $input_errors[] = gettext("You cannot connect to an IPv4 address using IPv6.");
+ }
+ if (is_ipaddrv6($_REQUEST['host']) && ($_REQUEST['ipprotocol'] == "ipv4")) {
+ $input_errors[] = gettext("You cannot connect to an IPv6 address using IPv4.");
+ }
+
+ if (!$input_errors) {
+ $do_testport = true;
+ $timeout = NC_TIMEOUT;
+ }
+
+ /* Save these request vars even if there were input errors. Then the fields are refilled for the user to correct. */
+ $host = $_REQUEST['host'];
+ $sourceip = $_REQUEST['sourceip'];
+ $port = $_REQUEST['port'];
+ $srcport = $_REQUEST['srcport'];
+ $showtext = isset($_REQUEST['showtext']);
+ $ipprotocol = $_REQUEST['ipprotocol'];
+}
+
+include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="diag test port">
+<tr><td>
+<?php echo gettext("This page allows you to perform a simple TCP connection test to determine if a host is up and accepting connections on a given port. This test does not function for UDP since there is no way to reliably determine if a UDP port accepts connections in this manner."); ?>
+<br /><br />
+<?php echo gettext("No data is transmitted to the remote host during this test, it will only attempt to open a connection and optionally display the data sent back from the server."); ?>
+<br /><br /><br />
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="diag_testport.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Test Port"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Host"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?>
+ <input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?= gettext("Port"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="port" type="text" class="formfld unknown" id="port" size="10" value="<?=htmlspecialchars($port);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Source Port"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="srcport" type="text" class="formfld unknown" id="srcport" size="10" value="<?=htmlspecialchars($srcport);?>" />
+ <br /><br /><?php echo gettext("This should typically be left blank."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Show Remote Text"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="showtext" type="checkbox" id="showtext" <?php if ($showtext) echo "checked=\"checked\"" ?> />
+ <br /><br /><?php echo gettext("Shows the text given by the server when connecting to the port. Will take 10+ seconds to display if checked."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="sourceip" class="formselect">
+ <option value="">Any</option>
+ <?php $sourceips = get_possible_traffic_source_addresses(true);
+ foreach ($sourceips as $sipvalue => $sipname):
+ $selected = "";
+ if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$sipvalue;?>" <?=$selected;?>>
+ <?=htmlspecialchars($sipname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ipprotocol" class="formfld">
+ <option value="any" <?php if ("any" == $ipprotocol) echo "selected=\"selected\""; ?>>
+ Any
+ </option>
+ <option value="ipv4" <?php if ($ipprotocol == "ipv4") echo "selected=\"selected\""; ?>>
+ <?=gettext("IPv4");?>
+ </option>
+ <option value="ipv6" <?php if ($ipprotocol == "ipv6") echo "selected=\"selected\""; ?>>
+ <?=gettext("IPv6");?>
+ </option>
+ </select>
+ <br /><br />
+ <?php echo gettext("If you force IPv4 or IPv6 and use a hostname that does not contain a result using that protocol, it will result in an error. For example if you force IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will not work."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Test"); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" colspan="2">
+ <?php if ($do_testport) {
+ echo "<font face=\"terminal\" size=\"2\">";
+ echo "<strong>" . gettext("Port Test Results") . ":</strong><br />";
+ ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("testportCaptured").wrap='off';
+ }
+ //]]>
+ </script>
+ <?php
+ echo "<textarea id=\"testportCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
+ $result = "";
+ $nc_base_cmd = "/usr/bin/nc";
+ $nc_args = "-w " . escapeshellarg($timeout);
+ if (!$showtext) {
+ $nc_args .= " -z ";
+ }
+ if (!empty($srcport)) {
+ $nc_args .= " -p " . escapeshellarg($srcport) . " ";
+ }
+
+ /* Attempt to determine the interface address, if possible. Else try both. */
+ if (is_ipaddrv4($host)) {
+ $ifaddr = ($sourceip == "any") ? "" : get_interface_ip($sourceip);
+ $nc_args .= " -4";
+ } elseif (is_ipaddrv6($host)) {
+ if ($sourceip == "any") {
+ $ifaddr = "";
+ } else if (is_linklocal($sourceip)) {
+ $ifaddr = $sourceip;
+ } else {
+ $ifaddr = get_interface_ipv6($sourceip);
+ }
+ $nc_args .= " -6";
+ } else {
+ switch ($ipprotocol) {
+ case "ipv4":
+ $ifaddr = get_interface_ip($sourceip);
+ $nc_ipproto = " -4";
+ break;
+ case "ipv6":
+ $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip));
+ $nc_ipproto = " -6";
+ break;
+ case "any":
+ $ifaddr = get_interface_ip($sourceip);
+ $nc_ipproto = (!empty($ifaddr)) ? " -4" : "";
+ if (empty($ifaddr)) {
+ $ifaddr = (is_linklocal($sourceip) ? $sourceip : get_interface_ipv6($sourceip));
+ $nc_ipproto = (!empty($ifaddr)) ? " -6" : "";
+ }
+ break;
+ }
+ /* Netcat doesn't like it if we try to connect using a certain type of IP without specifying the family. */
+ if (!empty($ifaddr)) {
+ $nc_args .= $nc_ipproto;
+ } elseif ($sourceip == "any") {
+ switch ($ipprotocol) {
+ case "ipv4":
+ $nc_ipproto = " -4";
+ break;
+ case "ipv6":
+ $nc_ipproto = " -6";
+ break;
+ }
+ $nc_args .= $nc_ipproto;
+ }
+ }
+ /* Only add on the interface IP if we managed to find one. */
+ if (!empty($ifaddr)) {
+ $nc_args .= " -s " . escapeshellarg($ifaddr) . " ";
+ $scope = get_ll_scope($ifaddr);
+ if (!empty($scope) && !strstr($host, "%")) {
+ $host .= "%{$scope}";
+ }
+ }
+
+ $nc_cmd = "{$nc_base_cmd} {$nc_args} " . escapeshellarg($host) . " " . escapeshellarg($port) . " 2>&1";
+ exec($nc_cmd, $result, $retval);
+ //echo "NC CMD: {$nc_cmd}\n\n";
+ if (empty($result)) {
+ if ($showtext) {
+ echo gettext("No output received, or connection failed. Try with \"Show Remote Text\" unchecked first.");
+ } else {
+ echo gettext("Connection failed (Refused/Timeout)");
+ }
+ } else {
+ if (is_array($result)) {
+ foreach ($result as $resline) {
+ echo htmlspecialchars($resline) . "\n";
+ }
+ } else {
+ echo htmlspecialchars($result);
+ }
+ }
+ echo '</textarea>&nbsp;</font>' ;
+ }
+ ?>
+ </td>
+ </tr>
+ </table>
+</form>
+</td></tr></table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/diag_traceroute.php b/src/usr/local/www/diag_traceroute.php
new file mode 100644
index 0000000..d094d49
--- /dev/null
+++ b/src/usr/local/www/diag_traceroute.php
@@ -0,0 +1,218 @@
+<?php
+/*
+ diag_traceroute.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/traceroute
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-traceroute
+##|*NAME=Diagnostics: Traceroute page
+##|*DESCR=Allow access to the 'Diagnostics: Traceroute' page.
+##|*MATCH=diag_traceroute.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$allowautocomplete = true;
+$pgtitle = array(gettext("Diagnostics"), gettext("Traceroute"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+
+define('MAX_TTL', 64);
+define('DEFAULT_TTL', 18);
+
+if ($_POST || $_REQUEST['host']) {
+ unset($input_errors);
+ unset($do_traceroute);
+
+ /* input validation */
+ $reqdfields = explode(" ", "host ttl");
+ $reqdfieldsn = array(gettext("Host"), gettext("ttl"));
+ do_input_validation($_REQUEST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_REQUEST['ttl'] < 1) || ($_REQUEST['ttl'] > MAX_TTL)) {
+ $input_errors[] = sprintf(gettext("Maximum number of hops must be between 1 and %s"), MAX_TTL);
+ }
+ $host = trim($_REQUEST['host']);
+ $ipproto = $_REQUEST['ipproto'];
+ if (($ipproto == "ipv4") && is_ipaddrv6($host)) {
+ $input_errors[] = gettext("When using IPv4, the target host must be an IPv4 address or hostname.");
+ }
+ if (($ipproto == "ipv6") && is_ipaddrv4($host)) {
+ $input_errors[] = gettext("When using IPv6, the target host must be an IPv6 address or hostname.");
+ }
+
+ if (!$input_errors) {
+ $sourceip = $_REQUEST['sourceip'];
+ $do_traceroute = true;
+ $ttl = $_REQUEST['ttl'];
+ $resolve = $_REQUEST['resolve'];
+ }
+} else {
+ $resolve = true;
+}
+
+if (!isset($do_traceroute)) {
+ $do_traceroute = false;
+ $host = '';
+ $ttl = DEFAULT_TTL;
+}
+
+?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="diag_traceroute.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="diag traceroute">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Traceroute");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Host");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="host" type="text" class="formfld unknown" id="host" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ipproto" class="formselect">
+ <option value="ipv4" <?php if ($ipproto == "ipv4") echo "selected=\"selected\"" ?>>IPv4</option>
+ <option value="ipv6" <?php if ($ipproto == "ipv6") echo "selected=\"selected\"" ?>>IPv6</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source Address"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="sourceip" class="formselect">
+ <option value="">Any</option>
+ <?php $sourceips = get_possible_traffic_source_addresses(true);
+ foreach ($sourceips as $sipvalue => $sipname):
+ $selected = "";
+ if (!link_interface_to_bridge($sipvalue) && ($sipvalue == $sourceip)) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$sipvalue;?>" <?=$selected;?>>
+ <?=htmlspecialchars($sipname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Maximum number of hops");?></td>
+ <td width="78%" class="vtable">
+ <select name="ttl" class="formfld" id="ttl">
+ <?php for ($i = 1; $i <= MAX_TTL; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $ttl) echo "selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Reverse Address Lookup");?></td>
+ <td width="78%" class="vtable">
+ <input name="resolve" type="checkbox"<?php echo (!isset($resolve) ? "" : " checked=\"checked\""); ?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Use ICMP");?></td>
+ <td width="78%" class="vtable">
+ <input name="useicmp" type="checkbox"<?php if ($_REQUEST['useicmp']) echo " checked=\"checked\""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Traceroute");?>" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" colspan="2">
+ <span class="vexpl">
+ <span class="red"><b><?=gettext("Note: ");?></b></span>
+ <?=gettext("Traceroute may take a while to complete. You may hit the Stop button on your browser at any time to see the progress of failed traceroutes.");?>
+ <br /><br />
+ <?=gettext("Using a source interface/IP address that does not match selected type (IPv4, IPv6) will result in an error or empty output.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" colspan="2">
+ <?php
+ if ($do_traceroute) {
+ echo "<font face=\"terminal\" size=\"2\">\n";
+ echo "<strong>" . gettext("Traceroute output:") . "</strong><br />\n";
+ ob_end_flush();
+ ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("tracerouteCaptured").wrap='off';
+ }
+ //]]>
+ </script>
+ <?php
+ echo "<textarea id=\"tracerouteCaptured\" style=\"width:98%\" name=\"code\" rows=\"15\" cols=\"66\" readonly=\"readonly\">";
+ $useicmp = isset($_REQUEST['useicmp']) ? "-I" : "";
+ $n = isset($resolve) ? "" : "-n";
+
+ $command = "/usr/sbin/traceroute";
+ if ($ipproto == "ipv6") {
+ $command .= "6";
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ipv6($sourceip);
+ } else {
+ $ifaddr = is_ipaddr($sourceip) ? $sourceip : get_interface_ip($sourceip);
+ }
+
+ if ($ifaddr && (is_ipaddr($host) || is_hostname($host))) {
+ $srcip = "-s " . escapeshellarg($ifaddr);
+ }
+
+ $cmd = "{$command} {$n} {$srcip} -w 2 {$useicmp} -m " . escapeshellarg($ttl) . " " . escapeshellarg($host);
+
+ //echo "Traceroute command: {$cmd}\n";
+ system($cmd);
+ echo "</textarea>&nbsp;</font>";
+ } ?>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/easyrule.php b/src/usr/local/www/easyrule.php
new file mode 100644
index 0000000..74b1051
--- /dev/null
+++ b/src/usr/local/www/easyrule.php
@@ -0,0 +1,89 @@
+<?php
+/*
+ easyrule.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009-2010 Jim Pingle (jpingle@gmail.com)
+ Originally Sponsored By Anathematic @ pfSense Forums
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-easyrule
+##|*NAME=Firewall: Easy Rule add/status page
+##|*DESCR=Allow access to the 'Firewall: Easy Rule' add/status page.
+##|*MATCH=easyrule.php*
+##|-PRIV
+
+$pgtitle = gettext("Firewall: EasyRule");
+require_once("guiconfig.inc");
+require_once("easyrule.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$retval = 0;
+$message = "";
+$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn");
+
+if ($_GET && isset($_GET['action'])) {
+ switch ($_GET['action']) {
+ case 'block':
+ /* Check that we have a valid host */
+ easyrule_parse_block($_GET['int'], $_GET['src'], $_GET['ipproto']);
+ break;
+ case 'pass':
+ easyrule_parse_pass($_GET['int'], $_GET['proto'], $_GET['src'], $_GET['dst'], $_GET['dstport'], $_GET['ipproto']);
+ break;
+ }
+}
+
+if (stristr($retval, "error") == true) {
+ $message = $retval;
+}
+
+include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<?php if ($message) { ?>
+<br />
+<?=gettext("Message"); ?>: <?php echo $message; ?>
+<br />
+<?php } else { ?>
+<?=gettext("This is the Easy Rule status page, mainly used to display errors when adding rules. " .
+"If you are seeing this, there apparently was not an error, and you navigated to the " .
+"page directly without telling it what to do"); ?>.<br /><br />
+<?=gettext("This page is meant to be called from the block/pass buttons on the Firewall Logs page"); ?>, <a href="diag_logs_filter.php"><?=gettext("Status"); ?> &gt; <?=gettext("System Logs, " .
+"Firewall Tab"); ?></a>.
+<br />
+<?php } ?>
+</td></tr></table>
+<?php include("fend.inc"); ?>
diff --git a/src/usr/local/www/edit.php b/src/usr/local/www/edit.php
new file mode 100644
index 0000000..481b2ce
--- /dev/null
+++ b/src/usr/local/www/edit.php
@@ -0,0 +1,254 @@
+<?php
+/*
+ edit.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: shell
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-edit
+##|*NAME=Diagnostics: Edit FIle
+##|*DESCR=Allow access to the 'Diagnostics: Edit File' page.
+##|*MATCH=edit.php*
+##|*MATCH=browser.php*
+##|*MATCH=filebrowser/browser.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Edit file"));
+require("guiconfig.inc");
+
+if ($_POST['action']) {
+ switch ($_POST['action']) {
+ case 'load':
+ if (strlen($_POST['file']) < 1) {
+ echo "|5|" . gettext("No file name specified") . ".|";
+ } elseif (is_dir($_POST['file'])) {
+ echo "|4|" . gettext("Loading a directory is not supported") . ".|";
+ } elseif (!is_file($_POST['file'])) {
+ echo "|3|" . gettext("File does not exist or is not a regular file") . ".|";
+ } else {
+ $data = file_get_contents(urldecode($_POST['file']));
+ if ($data === false) {
+ echo "|1|" . gettext("Failed to read file") . ".|";
+ } else {
+ $data = base64_encode($data);
+ echo "|0|{$_POST['file']}|{$data}|";
+ }
+ }
+ exit;
+ case 'save':
+ if (strlen($_POST['file']) < 1) {
+ echo "|" . gettext("No file name specified") . ".|";
+ } else {
+ conf_mount_rw();
+ $_POST['data'] = str_replace("\r", "", base64_decode($_POST['data']));
+ $ret = file_put_contents($_POST['file'], $_POST['data']);
+ conf_mount_ro();
+ if ($_POST['file'] == "/conf/config.xml" || $_POST['file'] == "/cf/conf/config.xml") {
+ if (file_exists("/tmp/config.cache")) {
+ unlink("/tmp/config.cache");
+ }
+ disable_security_checks();
+ }
+ if ($ret === false) {
+ echo "|" . gettext("Failed to write file") . ".|";
+ } elseif ($ret <> strlen($_POST['data'])) {
+ echo "|" . gettext("Error while writing file") . ".|";
+ } else {
+ echo "|" . gettext("File successfully saved") . ".|";
+ }
+ }
+ exit;
+ }
+ exit;
+}
+
+$closehead = false;
+require("head.inc");
+outputCSSFileInline("code-syntax-highlighter/SyntaxHighlighter.css");
+outputJavaScriptFileInline("filebrowser/browser.js");
+outputJavaScriptFileInline("javascript/base64.js");
+
+?>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ function loadFile() {
+ jQuery("#fileStatus").html("<?=gettext("Loading file"); ?> ...");
+ jQuery("#fileStatusBox").show(500);
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>", {
+ type: "post",
+ data: "action=load&file=" + jQuery("#fbTarget").val(),
+ complete: loadComplete
+ }
+ );
+ }
+
+ function loadComplete(req) {
+ jQuery("#fileContent").show(1000);
+ var values = req.responseText.split("|");
+ values.shift(); values.pop();
+
+ if (values.shift() == "0") {
+ var file = values.shift();
+ var fileContent = Base64.decode(values.join("|"));
+ jQuery("#fileStatus").html("<?=gettext("File successfully loaded"); ?>.");
+ jQuery("#fileContent").val(fileContent);
+
+ var lang = "none";
+ if (file.indexOf(".php") > 0) lang = "php";
+ else if (file.indexOf(".inc") > 0) lang = "php";
+ else if (file.indexOf(".xml") > 0) lang = "xml";
+ else if (file.indexOf(".js") > 0) lang = "js";
+ else if (file.indexOf(".css") > 0) lang = "css";
+
+ if (jQuery("#highlight").checked && lang != "none") {
+ jQuery("fileContent").prop("className", lang + ":showcolumns");
+ dp.SyntaxHighlighter.HighlightAll("fileContent", true, false);
+ }
+ } else {
+ jQuery("#fileStatus").html(values[0]);
+ jQuery("#fileContent").val("");
+ }
+ jQuery("#fileContent").show(1000);
+ }
+
+ function saveFile(file) {
+ jQuery("#fileStatus").html("<?=gettext("Saving file"); ?> ...");
+ jQuery("#fileStatusBox").show(500);
+
+ var fileContent = Base64.encode(jQuery("#fileContent").val());
+ fileContent = fileContent.replace(/\+/g, "%2B");
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>", {
+ type: "post",
+ data: "action=save&file=" + jQuery("#fbTarget").val() +
+ "&data=" + fileContent,
+ complete: function(req) {
+ var values = req.responseText.split("|");
+ jQuery("#fileStatus").html(values[1]);
+ }
+ }
+ );
+ }
+//]]>
+</script>
+
+<!-- file status box -->
+<div style="display:none; background:#eeeeee;" id="fileStatusBox">
+ <div class="vexpl" style="padding-left:15px;">
+ <strong id="fileStatus"></strong>
+ </div>
+</div>
+
+<br />
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="file editor">
+ <tr>
+ <td class="tabcont" align="center">
+
+<!-- controls -->
+<table width="100%" cellpadding="9" cellspacing="9" summary="controls">
+ <tr>
+ <td align="center" class="list">
+ <?=gettext("Save / Load from path"); ?>:
+ <input type="text" class="formfld file" id="fbTarget" size="45" />
+ <input type="button" class="formbtn" onclick="loadFile();" value="<?=gettext('Load');?>" />
+ <input type="button" class="formbtn" id="fbOpen" value="<?=gettext('Browse');?>" />
+ <input type="button" class="formbtn" onclick="saveFile();" value="<?=gettext('Save');?>" />
+ <br />
+ <?php
+ /*
+ <input type="checkbox" id="highlight" /><?=gettext("Enable syntax highlighting");
+ */
+ ?>
+ </td>
+ </tr>
+</table>
+
+<!-- filebrowser -->
+<div id="fbBrowser" style="display:none; border:1px dashed gray; width:98%;"></div>
+
+<!-- file viewer/editor -->
+<table width="100%" summary="file editor">
+ <tr>
+ <td valign="top">
+ <div style="background:#eeeeee;" id="fileOutput">
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("fileContent").wrap='off';
+ }
+ //]]>
+ </script>
+ <textarea id="fileContent" name="fileContent" style="width:100%;" rows="30" cols=""></textarea>
+ </div>
+ </td>
+ </tr>
+</table>
+
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript" src="/code-syntax-highlighter/shCore.js"></script>
+<script type="text/javascript" src="/code-syntax-highlighter/shBrushCss.js"></script>
+<script type="text/javascript" src="/code-syntax-highlighter/shBrushJScript.js"></script>
+<script type="text/javascript" src="/code-syntax-highlighter/shBrushPhp.js"></script>
+<script type="text/javascript" src="/code-syntax-highlighter/shBrushXml.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(window).load(
+ function() {
+ jQuery("#fbTarget").focus();
+
+ NiftyCheck();
+ Rounded("div#fileStatusBox", "all", "#ffffff", "#eeeeee", "smooth");
+ }
+ );
+
+ <?php if ($_GET['action'] == "load"): ?>
+ jQuery(window).load(
+ function() {
+ jQuery("#fbTarget").val("<?=htmlspecialchars($_GET['path']);?>");
+ loadFile();
+ }
+ );
+ <?php endif; ?>
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/exec.php b/src/usr/local/www/exec.php
new file mode 100644
index 0000000..e0220b7
--- /dev/null
+++ b/src/usr/local/www/exec.php
@@ -0,0 +1,355 @@
+<?php
+/* $Id$ */
+/*
+ Exec+ v1.02-000 - Copyright 2001-2003, All rights reserved
+ Created by technologEase (http://www.technologEase.com).
+
+ (modified for m0n0wall by Manuel Kasper <mk@neon1.net>)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: shell
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-command
+##|*NAME=Diagnostics: Command page
+##|*DESCR=Allow access to the 'Diagnostics: Command' page.
+##|*MATCH=exec.php*
+##|-PRIV
+
+$allowautocomplete = true;
+
+require("guiconfig.inc");
+
+if (($_POST['submit'] == "Download") && file_exists($_POST['dlPath'])) {
+ session_cache_limiter('public');
+ $fd = fopen($_POST['dlPath'], "rb");
+ header("Content-Type: application/octet-stream");
+ header("Content-Length: " . filesize($_POST['dlPath']));
+ header("Content-Disposition: attachment; filename=\"" .
+ trim(htmlentities(basename($_POST['dlPath']))) . "\"");
+ if (isset($_SERVER['HTTPS'])) {
+ header('Pragma: ');
+ header('Cache-Control: ');
+ } else {
+ header("Pragma: private");
+ header("Cache-Control: private, must-revalidate");
+ }
+
+ fpassthru($fd);
+ exit;
+} else if (($_POST['submit'] == "Upload") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
+ move_uploaded_file($_FILES['ulfile']['tmp_name'], "/tmp/" . $_FILES['ulfile']['name']);
+ $ulmsg = "Uploaded file to /tmp/" . htmlentities($_FILES['ulfile']['name']);
+ unset($_POST['txtCommand']);
+}
+
+if ($_POST) {
+ conf_mount_rw();
+}
+
+// Function: is Blank
+// Returns true or false depending on blankness of argument.
+
+function isBlank($arg) {
+ return preg_match("/^\s*$/", $arg);
+}
+
+// Function: Puts
+// Put string, Ruby-style.
+
+function puts($arg) {
+ echo "$arg\n";
+}
+
+// "Constants".
+
+$Version = '';
+$ScriptName = $REQUEST['SCRIPT_NAME'];
+
+// Get year.
+
+$arrDT = localtime();
+$intYear = $arrDT[5] + 1900;
+
+$closehead = false;
+$pgtitle = array(gettext("Diagnostics"), gettext("Execute command"));
+include("head.inc");
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+ // Create recall buffer array (of encoded strings).
+
+<?php
+
+if (isBlank($_POST['txtRecallBuffer'])) {
+ puts(" var arrRecallBuffer = new Array;");
+} else {
+ puts(" var arrRecallBuffer = new Array(");
+ $arrBuffer = explode("&", $_POST['txtRecallBuffer']);
+ for ($i = 0; $i < (count($arrBuffer) - 1); $i++) {
+ puts(" '" . htmlspecialchars($arrBuffer[$i], ENT_QUOTES | ENT_HTML401) . "',");
+ }
+ puts(" '" . htmlspecialchars($arrBuffer[count($arrBuffer) - 1], ENT_QUOTES | ENT_HTML401) . "'");
+ puts(" );");
+}
+
+?>
+
+ // Set pointer to end of recall buffer.
+ var intRecallPtr = arrRecallBuffer.length-1;
+
+ // Functions to extend String class.
+ function str_encode() { return escape( this ) }
+ function str_decode() { return unescape( this ) }
+
+ // Extend string class to include encode() and decode() functions.
+ String.prototype.encode = str_encode
+ String.prototype.decode = str_decode
+
+ // Function: is Blank
+ // Returns boolean true or false if argument is blank.
+ function isBlank( strArg ) { return strArg.match( /^\s*$/ ) }
+
+ // Function: frmExecPlus onSubmit (event handler)
+ // Builds the recall buffer from the command string on submit.
+ function frmExecPlus_onSubmit( form ) {
+
+ if (!isBlank(form.txtCommand.value)) {
+ // If this command is repeat of last command, then do not store command.
+ if (form.txtCommand.value.encode() == arrRecallBuffer[arrRecallBuffer.length-1]) { return true }
+
+ // Stuff encoded command string into the recall buffer.
+ if (isBlank(form.txtRecallBuffer.value)) {
+ form.txtRecallBuffer.value = form.txtCommand.value.encode();
+ } else {
+ form.txtRecallBuffer.value += '&' + form.txtCommand.value.encode();
+ }
+ }
+
+ return true;
+ }
+
+ // Function: btnRecall onClick (event handler)
+ // Recalls command buffer going either up or down.
+ function btnRecall_onClick( form, n ) {
+
+ // If nothing in recall buffer, then error.
+ if (!arrRecallBuffer.length) {
+ alert('<?=gettext("Nothing to recall"); ?>!');
+ form.txtCommand.focus();
+ return;
+ }
+
+ // Increment recall buffer pointer in positive or negative direction
+ // according to <n>.
+ intRecallPtr += n;
+
+ // Make sure the buffer stays circular.
+ if (intRecallPtr < 0) { intRecallPtr = arrRecallBuffer.length - 1 }
+ if (intRecallPtr > (arrRecallBuffer.length - 1)) { intRecallPtr = 0 }
+
+ // Recall the command.
+ form.txtCommand.value = arrRecallBuffer[intRecallPtr].decode();
+ }
+
+ // Function: Reset onClick (event handler)
+ // Resets form on reset button click event.
+ function Reset_onClick( form ) {
+
+ // Reset recall buffer pointer.
+ intRecallPtr = arrRecallBuffer.length;
+
+ // Clear form (could have spaces in it) and return focus ready for cmd.
+ form.txtCommand.value = '';
+ form.txtCommand.focus();
+
+ return true;
+ }
+//]]>
+</script>
+<style type="text/css">
+/*<![CDATA[*/
+
+input {
+ font-family: courier new, courier;
+ font-weight: normal;
+ font-size: 9pt;
+}
+
+pre {
+ border: 2px solid #435370;
+ background: #F0F0F0;
+ padding: 1em;
+ font-family: courier new, courier;
+ white-space: pre;
+ line-height: 10pt;
+ font-size: 10pt;
+}
+
+.label {
+ font-family: tahoma, verdana, arial, helvetica;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.button {
+ font-family: tahoma, verdana, arial, helvetica;
+ font-weight: bold;
+ font-size: 11px;
+}
+
+/*]]>*/
+</style>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if (isBlank($_POST['txtCommand'])): ?>
+<p class="red"><strong><?=gettext("Note: this function is unsupported. Use it " .
+"on your own risk"); ?>!</strong></p>
+<?php endif; ?>
+<?php if ($ulmsg) echo "<p><strong>" . $ulmsg . "</strong></p>\n"; ?>
+<?php
+
+if (!isBlank($_POST['txtCommand'])) {
+ puts("<pre>");
+ puts("\$ " . htmlspecialchars($_POST['txtCommand']));
+ putenv("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin");
+ putenv("SCRIPT_FILENAME=" . strtok($_POST['txtCommand'], " ")); /* PHP scripts */
+ $ph = popen($_POST['txtCommand'] . ' 2>&1', "r");
+ while ($line = fgets($ph)) {
+ echo htmlspecialchars($line);
+ }
+ pclose($ph);
+ puts("&nbsp;</pre>");
+}
+
+
+if (!isBlank($_POST['txtPHPCommand'])) {
+ puts("<pre>");
+ require_once("config.inc");
+ require_once("functions.inc");
+ echo eval($_POST['txtPHPCommand']);
+ puts("&nbsp;</pre>");
+}
+
+?>
+<div id="niftyOutter">
+<form action="exec.php" method="post" enctype="multipart/form-data" name="frmExecPlus" onsubmit="return frmExecPlus_onSubmit(this);">
+ <table summary="exec">
+ <tr>
+ <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Execute Shell command"); ?></td>
+ </tr>
+ <tr>
+ <td class="label" align="right"><?=gettext("Command"); ?>:</td>
+ <td class="type"><input id="txtCommand" name="txtCommand" type="text" class="formfld unknown" size="80" value="<?=htmlspecialchars($_POST['txtCommand']);?>" /></td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top" class="label">
+ <input type="hidden" name="txtRecallBuffer" value="<?=htmlspecialchars($_POST['txtRecallBuffer']) ?>" />
+ <input type="button" class="button" name="btnRecallPrev" value="<" onclick="btnRecall_onClick(this.form, -1);" />
+ <input type="submit" class="button" value="<?=gettext("Execute"); ?>" />
+ <input type="button" class="button" name="btnRecallNext" value=">" onclick="btnRecall_onClick(this.form, 1);" />
+ <input type="button" class="button" value="<?=gettext("Clear"); ?>" onclick="return Reset_onClick(this.form);" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Download"); ?></td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("File to download"); ?>:</td>
+ <td>
+ <input name="dlPath" type="text" class="formfld file" id="dlPath" size="50" value="<?php echo htmlspecialchars($_GET['dlPath']) ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top" class="label">
+ <input name="submit" type="submit" class="button" id="download" value="<?=gettext("Download"); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="vnsepcell"><?=gettext("Upload"); ?></td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("File to upload"); ?>:</td>
+ <td valign="top" class="label">
+ <input name="ulfile" type="file" class="formfld file" id="ulfile" />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top" class="label">
+ <input name="submit" type="submit" class="button" id="upload" value="<?=gettext("Upload"); ?>" /></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="vnsepcell"><?=gettext("PHP Execute"); ?></td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Command"); ?>:</td>
+ <td class="type"><textarea id="txtPHPCommand" name="txtPHPCommand" rows="9" cols="80"><?=htmlspecialchars($_POST['txtPHPCommand']);?></textarea></td>
+ </tr>
+ <tr>
+ <td valign="top">&nbsp;&nbsp;&nbsp;</td>
+ <td valign="top" class="label">
+ <input type="submit" class="button" value="<?=gettext("Execute"); ?>" />
+ <p>
+ <strong><?=gettext("Example"); ?>:</strong> interfaces_sync_setup();
+ </p>
+ </td>
+ </tr>
+
+ </table>
+</form>
+</div>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+document.forms[0].txtCommand.focus();
+//]]>
+</script>
+</body>
+</html>
+
+<?php
+
+if ($_POST) {
+ conf_mount_ro();
+}
+
+?>
diff --git a/src/usr/local/www/favicon.ico b/src/usr/local/www/favicon.ico
new file mode 100755
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/fbegin.inc b/src/usr/local/www/fbegin.inc
new file mode 100755
index 0000000..50a3f2e
--- /dev/null
+++ b/src/usr/local/www/fbegin.inc
@@ -0,0 +1,459 @@
+<?php
+/*
+ pfSense_MODULE: header
+*/
+
+require_once("globals.inc");
+require_once("functions.inc");
+require_once("shortcuts.inc");
+require_once("service-utils.inc");
+
+/* $Id$ */
+
+
+/* Determine automated help URL. Should output the page name and
+ parameters separately */
+$uri_split = "";
+preg_match("/\/(.*)\?(.*)/", $_SERVER["REQUEST_URI"], $uri_split);
+
+/* If there was no match, there were no parameters, just grab the filename
+ Otherwise, use the matched filename from above. */
+if (empty($uri_split[0])) {
+ $pagename = ltrim($_SERVER["REQUEST_URI"], '/');
+} else {
+ $pagename = $uri_split[1];
+}
+/* If the page name is still empty, the user must have requested / (index.php) */
+if (empty($pagename)) {
+ $pagename = "index.php";
+}
+
+/* If the filename is pkg_edit.php or wizard.php, reparse looking for the .xml filename */
+if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == "wizard.php")) {
+ $param_split = explode('&', $uri_split[2]);
+ foreach ($param_split as $param) {
+ if (substr($param, 0, 4) == "xml=") {
+ $xmlfile = explode('=', $param);
+ $pagename = $xmlfile[1];
+ }
+ }
+}
+
+/* Build the full help URL. */
+$helpurl .= "{$g['help_base_url']}?page={$pagename}";
+
+function return_ext_menu($section) {
+ global $config;
+ $htmltext = "";
+ $extarray = array();
+ if ($config['installedpackages']['menu'] <> "") {
+ foreach ($config['installedpackages']['menu'] as $menuitem) {
+ if ($menuitem['section'] != $section) {
+ continue;
+ }
+ if ($menuitem['url'] <> "") {
+ $test_url=$menuitem['url'];
+ $addresswithport = getenv("HTTP_HOST");
+ $colonpos = strpos($addresswithport, ":");
+ if ($colonpos !== False) {
+ //my url is actually just the IP address of the pfsense box
+ $myurl = substr($addresswithport, 0, $colonpos);
+ } else {
+ $myurl = $addresswithport;
+ }
+ $description = str_replace('$myurl', $myurl, $menuitem['url']);
+ } else {
+ $description = '/pkg.php?xml=' . $menuitem['configfile'];
+ $test_url=$description;
+ }
+ if (isAllowedPage($test_url)) {
+ $extarray[] = array($menuitem['name'], $description);
+ }
+ }
+ }
+ return $extarray;
+}
+
+function output_menu($arrayitem, $target = null) {
+ foreach ($arrayitem as $item) {
+ if (isAllowedPage($item[1]) || $item[1] == "/index.php?logout") {
+ $attr = sprintf("href=\"%s\"", htmlentities($item[1]));
+ if ($target) {
+ $attr .= sprintf(" target=\"%s\"", htmlentities($target));
+ }
+ $class = "navlnk";
+ if ($item['class']) {
+ $class .= " {$item['class']}";
+ }
+ $attr .= sprintf(" class=\"%s\"", htmlentities($class));
+ if ($item['style']) {
+ $attr .= sprintf(" style=\"%s\"", htmlentities($item['style']));
+ }
+ echo "<li>\n";
+ printf("<a %s>%s</a>\n", $attr, $item[0]);
+ echo "</li>\n";
+ }
+ }
+}
+
+// System
+$system_menu = array();
+$system_menu[] = array(gettext("Advanced"), "/system_advanced_admin.php");
+$system_menu[] = array(gettext("Firmware"), "/system_firmware.php");
+$system_menu[] = array(gettext("General Setup"), "/system.php");
+$system_menu[] = array(gettext("High Avail. Sync"), "/system_hasync.php");
+$system_menu[] = array(gettext("Logout"), "/index.php?logout");
+if ($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") {
+ $system_menu[] = array(gettext("Packages"), "/pkg_mgr_installed.php");
+}
+$system_menu[] = array(gettext("Setup Wizard"), "/wizard.php?xml=setup_wizard.xml");
+$system_menu[] = array(gettext("Routing"), "/system_gateways.php");
+$system_menu[] = array(gettext("Cert Manager"), "/system_camanager.php");
+if (!isAllowedPage("system_usermanager.php*")) {
+ $system_menu[] = array(gettext("User Manager"), "/system_usermanager_passwordmg.php");
+} else {
+ $system_menu[] = array(gettext("User Manager"), "/system_usermanager.php");
+}
+$system_menu = msort(array_merge($system_menu, return_ext_menu("System")), 0);
+
+// Interfaces
+$interfaces_menu = array();
+if (!isset($config['system']['webgui']['noassigninterfaces'])) {
+ $interfaces_menu[] = array(gettext("(assign)"), "/interfaces_assign.php");
+}
+$opts = get_configured_interface_with_descr(false, true);
+foreach ($opts as $oif => $odescr) {
+ if (!isset($config['interfaces'][$oif]['ovpn'])) {
+ $interfaces_menu[] = array(htmlspecialchars($odescr), "/interfaces.php?if={$oif}");
+ }
+}
+$interfaces_menu = msort(array_merge($interfaces_menu, return_ext_menu("Interfaces")), 0);
+
+// Firewall
+$firewall_menu = array();
+$firewall_menu[] = array(gettext("Aliases"), "/firewall_aliases.php");
+$firewall_menu[] = array(gettext("NAT"), "/firewall_nat.php");
+$firewall_menu[] = array(gettext("Rules"), "/firewall_rules.php");
+$firewall_menu[] = array(gettext("Schedules"), "/firewall_schedule.php");
+$firewall_menu[] = array(gettext("Traffic Shaper"), "/firewall_shaper.php");
+$firewall_menu[] = array(gettext("Virtual IPs"), "/firewall_virtual_ip.php");
+$firewall_menu = msort(array_merge($firewall_menu, return_ext_menu("Firewall")), 0);
+
+// Services
+$services_menu = array();
+$services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php");
+$services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php");
+$services_menu[] = array(gettext("DNS Resolver"), "/services_unbound.php");
+$services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php");
+$services_menu[] = array(gettext("DHCPv6 Relay"), "/services_dhcpv6_relay.php");
+if ($g['services_dhcp_server_enable']) {
+ $services_menu[] = array(gettext("DHCP Server"), "/services_dhcp.php");
+ $services_menu[] = array(gettext("DHCPv6 Server/RA"), "/services_dhcpv6.php");
+}
+$services_menu[] = array(gettext("Dynamic DNS"), "/services_dyndns.php");
+$services_menu[] = array(gettext("IGMP proxy"), "/services_igmpproxy.php");
+$services_menu[] = array(gettext("Load Balancer"), "/load_balancer_pool.php");
+$services_menu[] = array(gettext("NTP"), "/services_ntpd.php");
+$services_menu[] = array(gettext("PPPoE Server"), "/vpn_pppoe.php");
+$services_menu[] = array(gettext("SNMP"), "/services_snmp.php");
+if (count($config['interfaces']) > 1) {
+ /* no use for UPnP in single-interface deployments
+ remove to reduce user confusion
+ */
+ $services_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/pkg_edit.php?xml=miniupnpd.xml");
+}
+$services_menu[] = array(gettext("Wake on LAN"), "/services_wol.php");
+$services_menu = msort(array_merge($services_menu, return_ext_menu("Services")), 0);
+
+// VPN
+$vpn_menu = array();
+$vpn_menu[] = array(gettext("IPsec"), "/vpn_ipsec.php");
+$vpn_menu[] = array(gettext("OpenVPN"), "/vpn_openvpn_server.php");
+$vpn_menu[] = array(gettext("PPTP"), "/vpn_pptp.php");
+$vpn_menu[] = array(gettext("L2TP"), "/vpn_l2tp.php");
+$vpn_menu = msort(array_merge($vpn_menu, return_ext_menu("VPN")), 0);
+
+// Status
+$status_menu = array();
+if (count($config['captiveportal']) > 0) {
+ $status_menu[] = array(gettext("Captive Portal"), "/status_captiveportal.php");
+}
+$status_menu[] = array(gettext("CARP (failover)"), "/carp_status.php");
+$status_menu[] = array(gettext("Dashboard"), "/index.php");
+$status_menu[] = array(gettext("Gateways"), "/status_gateways.php");
+$status_menu[] = array(gettext("DHCP Leases"), "/status_dhcp_leases.php");
+$status_menu[] = array(gettext("DHCPv6 Leases"), "/status_dhcpv6_leases.php");
+$status_menu[] = array(gettext("Filter Reload"), "/status_filter_reload.php");
+$status_menu[] = array(gettext("Interfaces"), "/status_interfaces.php");
+$status_menu[] = array(gettext("IPsec"), "/diag_ipsec.php");
+$status_menu[] = array(gettext("Load Balancer"), "/status_lb_pool.php");
+$status_menu[] = array(gettext("NTP"), "/status_ntpd.php");
+$status_menu[] = array(gettext("OpenVPN"), "/status_openvpn.php");
+if ($g['platform'] == "pfSense") {
+ $status_menu[] = array(gettext("Package Logs"), "/diag_pkglogs.php");
+}
+$status_menu[] = array(gettext("Queues"), "/status_queues.php");
+$status_menu[] = array(gettext("RRD Graphs"), "/status_rrd_graph.php");
+$status_menu[] = array(gettext("Services"), "/status_services.php");
+$status_menu[] = array(gettext("System Logs"), "/diag_logs.php");
+$status_menu[] = array(gettext("Traffic Graph"), "/status_graph.php?if=wan");
+if (count($config['interfaces']) > 1) {
+ $status_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/status_upnp.php");
+}
+$ifentries = get_configured_interface_with_descr();
+foreach ($ifentries as $ent => $entdesc) {
+ if (is_array($config['interfaces'][$ent]['wireless']) &&
+ preg_match($g['wireless_regex'], $config['interfaces'][$ent]['if'])) {
+ $wifdescrs[$ent] = $entdesc;
+ }
+}
+if (count($wifdescrs) > 0) {
+ $status_menu[] = array(gettext("Wireless"), "/status_wireless.php");
+}
+$status_menu = msort(array_merge($status_menu, return_ext_menu("Status")), 0);
+
+// Diagnostics
+$diagnostics_menu = array();
+$diagnostics_menu[] = array(gettext("ARP Table"), "/diag_arp.php");
+$diagnostics_menu[] = array(gettext("Authentication"), "/diag_authentication.php");
+$diagnostics_menu[] = array(gettext("Backup/Restore"), "/diag_backup.php");
+$diagnostics_menu[] = array(gettext("Command Prompt"), "/exec.php");
+$diagnostics_menu[] = array(gettext("DNS Lookup"), "/diag_dns.php");
+$diagnostics_menu[] = array(gettext("Edit File"), "/edit.php");
+$diagnostics_menu[] = array(gettext("Factory Defaults"), "/diag_defaults.php");
+
+if (file_exists("/var/run/gmirror_active")) {
+ $diagnostics_menu[] = array(gettext("GEOM Mirrors"), "/diag_gmirror.php");
+}
+$diagnostics_menu[] = array(gettext("Halt System"), "/halt.php");
+$diagnostics_menu[] = array(gettext("Limiter Info"), "/diag_limiter_info.php");
+$diagnostics_menu[] = array(gettext("NDP Table"), "/diag_ndp.php");
+
+$diagnostics_menu[] = array(gettext("Tables"), "/diag_tables.php");
+$diagnostics_menu[] = array(gettext("Ping"), "/diag_ping.php");
+$diagnostics_menu[] = array(gettext("Test Port"), "/diag_testport.php");
+$diagnostics_menu[] = array(gettext("pfInfo"), "/diag_pf_info.php");
+$diagnostics_menu[] = array(gettext("pfTop"), "/diag_system_pftop.php");
+$diagnostics_menu[] = array(gettext("Reboot"), "/reboot.php");
+$diagnostics_menu[] = array(gettext("Routes"), "/diag_routes.php");
+$diagnostics_menu[] = array(gettext("SMART Status"), "/diag_smart.php");
+$diagnostics_menu[] = array(gettext("Sockets"), "/diag_sockets.php");
+$diagnostics_menu[] = array(gettext("States"), "/diag_dump_states.php");
+$diagnostics_menu[] = array(gettext("States Summary"), "/diag_states_summary.php");
+$diagnostics_menu[] = array(gettext("System Activity"), "/diag_system_activity.php");
+$diagnostics_menu[] = array(gettext("Traceroute"), "/diag_traceroute.php");
+$diagnostics_menu[] = array(gettext("Packet Capture"), "/diag_packet_capture.php");
+if ($g['platform'] == "nanobsd") {
+ $diagnostics_menu[] = array(gettext("NanoBSD"), "/diag_nanobsd.php");
+}
+
+if (isset($config['system']['developer'])) {
+ $diagnostics_menu[] = array(gettext("Restart HTTPD"), "/restart_httpd.php", "style" => "font-weight: bold; color: yellow;");
+}
+$diagnostics_menu = msort(array_merge($diagnostics_menu, return_ext_menu("Diagnostics")), 0);
+
+$gold_menu = array();
+$gold_menu[] = array(gettext("pfSense Gold"), "https://www.pfsense.org/gold");
+$gold_menu = msort(array_merge($gold_menu, return_ext_menu("Gold")), 0);
+
+if (!$g['disablehelpmenu']) {
+ $help_menu = array();
+ $help_menu[] = array(gettext("About this Page"), $helpurl);
+ if ($g['product_name'] == "pfSense") {
+ $help_menu[] = array(gettext("Bug Database"), "https://www.pfsense.org/j.php?jumpto=redmine");
+ }
+ $help_menu[] = array(gettext("User Forum"), "https://www.pfsense.org/j.php?jumpto=forum");
+ $help_menu[] = array(gettext("Documentation"), "https://www.pfsense.org/j.php?jumpto=doc");
+ $help_menu[] = array(gettext("Developers Wiki"), "https://www.pfsense.org/j.php?jumpto=devwiki");
+ $help_menu[] = array(gettext("Paid Support"), "https://www.pfsense.org/j.php?jumpto=portal");
+ $help_menu[] = array(gettext("pfSense Book"), "https://www.pfsense.org/j.php?jumpto=book");
+ $help_menu[] = array(gettext("Search portal"), "https://www.pfsense.org/j.php?jumpto=searchportal");
+ $help_menu[] = array(gettext("FreeBSD Handbook"), "https://www.pfsense.org/j.php?jumpto=fbsdhandbook");
+ $help_menu = msort(array_merge($help_menu, return_ext_menu("Help")), 0);
+}
+
+?>
+
+<div id="wrapper">
+ <div id="header">
+ <div id="header-left"><a href="/index.php" id="status-link"><img src="/themes/<?= $g['theme']; ?>/images/transparent.gif" border="0" alt="transparent" /></a></div>
+ <div id="header-right">
+ <div class="container">
+ <div class="left">webConfigurator</div>
+ <div class="right" id="menu_messages">
+<?php
+ echo get_menu_messages();
+?>
+ </div>
+ </div>
+ </div>
+ </div> <!-- Header DIV -->
+ <div id="content">
+ <div id="left">
+ <div id="navigation" style="z-index:1000;">
+ <ul id="menu">
+ <li class="firstdrop">
+ <div><?php echo gettext("System"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($system_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Interfaces"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($interfaces_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Firewall"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($firewall_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Services"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($services_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("VPN"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($vpn_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Status"); ?></div>
+ <ul class="subdrop">
+ <?php
+ output_menu($status_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Diagnostics"); ?></div>
+ <ul id="diag" class="subdrop">
+ <?php
+ output_menu($diagnostics_menu);
+ ?>
+ </ul>
+ </li>
+ <li class="drop">
+ <div><?php echo gettext("Gold"); ?></div>
+ <ul id="gold" class="subdrop">
+ <?php
+ output_menu($gold_menu, "_blank");
+ ?>
+ </ul>
+ </li>
+ <?php if (!$g['disablehelpmenu']): ?>
+ <li class="lastdrop">
+ <div><?php echo gettext("Help"); ?></div>
+ <ul id="help" class="subdrop">
+ <?php
+ output_menu($help_menu, "_blank");
+ ?>
+ </ul>
+ </li>
+ <?php endif; ?>
+ </ul>
+ </div>
+
+ </div> <!-- Left DIV -->
+
+ <div id="right">
+
+<?php
+echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/domLib.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/domTT.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/behaviour.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>\n";
+/* display a top alert bar if need be */
+$need_alert_display = false;
+$found_notices = are_notices_pending();
+if ($found_notices == true) {
+ $notices = get_notices();
+ if (!$notices) {
+ $need_alert_display = true;
+ $display_text = print_notices($notices) . "<br />";
+ }
+}
+if ($need_alert_display == true) {
+ echo "<div style=\"background-color:#000000\" id=\"roundalert\">";
+ echo "<table summary=\"round alert\">";
+ echo "<tr><td><font color=\"#ffffff\">";
+ echo "&nbsp;&nbsp;<img align=\"middle\" src=\"/top_notification.gif\" alt=\"notification\" />&nbsp;&nbsp;&nbsp;";
+ echo $display_text;
+ echo "</font></td>";
+ echo "</tr>";
+ echo "</table>";
+ echo "</div>";
+}
+
+function add_to_menu($url, $name) {
+ if (isAllowedPage($url)) {
+ echo "<li><a href=\"{$url}\" class=\"navlnk\">{$name}</a></li>\n";
+ }
+}
+
+?>
+
+<div>
+<span class="pgtitle"><a href="<?= htmlentities($_SERVER['REQUEST_URI']) ?>"><?=genhtmltitle($pgtitle);?></a></span>
+<span style="float:right; margin: 0 0 20px 20px">
+<?php
+if (!$hide_service_status && !empty($shortcuts[$shortcut_section]['service'])) {
+ $ssvc = array();
+ switch ($shortcut_section) {
+ case "openvpn":
+ $ssvc = find_service_by_openvpn_vpnid($vpnid);
+ break;
+ case "captiveportal":
+ $ssvc = find_service_by_cp_zone($cpzone);
+ break;
+ default:
+ $ssvc = find_service_by_name($shortcuts[$shortcut_section]['service']);
+
+ }
+ if (!empty($ssvc)) {
+ echo get_service_status_icon($ssvc, false);
+ echo get_service_control_links($ssvc, true);
+ }
+}
+
+echo get_shortcut_main_link($shortcut_section, true);
+echo get_shortcut_status_link($shortcut_section, true);
+echo get_shortcut_log_link($shortcut_section, true);
+
+?>
+<?php if (!$g['disablehelpicon']): ?>
+
+<a href="<?php echo $helpurl; ?>" title="<?php echo gettext("Help for items on this page"); ?>"><img style="vertical-align:middle" src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_help.gif" border="0" alt="help" /></a>
+<?php endif; ?>
+</span>
+</div>
+<br />
+
+<?php
+/* if upgrade in progress, alert user */
+if (is_subsystem_dirty('packagelock') || (file_exists('/conf/needs_package_sync') && platform_booting())) {
+ if (file_exists('/conf/needs_package_sync') && platform_booting()) {
+ $info_text = sprintf(gettext("%s is booting then packages will be reinstalled in the background.<p>Do not make changes in the GUI until this is complete."), $g['product_name']);
+ } else {
+ $pgtitle = array(gettext("System"), gettext("Package Manager"));
+ $info_text = gettext("Packages are currently being reinstalled in the background.<p>Do not make changes in the GUI until this is complete.");
+ }
+ print_info_box($info_text . "<p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif' alt='firmware update' />");
+}
+$pgtitle_output = true;
+?>
diff --git a/src/usr/local/www/fend.inc b/src/usr/local/www/fend.inc
new file mode 100755
index 0000000..f1cbdb9
--- /dev/null
+++ b/src/usr/local/www/fend.inc
@@ -0,0 +1,27 @@
+<!--
+ pfSense_MODULE: footer
+-->
+
+ </div> <!-- Right DIV -->
+
+ </div> <!-- Content DIV -->
+
+ <div id="footer">
+ <a target="_blank" href="<?=$g['product_website_footer']?>" class="redlnk"><?=$g['product_name']?></a> is &copy;
+ <?=$g['product_copyright_years']?> by <a href="<?=$g['product_copyright_url']?>" class="tblnk"><?=$g['product_copyright']?></a>. All Rights Reserved.
+ [<a href="/license.php" class="tblnk">view license</a>]
+ </div> <!-- Footer DIV -->
+
+</div> <!-- Wrapper Div -->
+
+<?php outputJavaScriptFileInline("/usr/local/www/themes/{$g['theme']}/bottom-loader.js");
+/* Disable form autocomplete on all but the login screen. */
+if (basename($_SERVER["SCRIPT_FILENAME"] != "index.php") && !$allowautocomplete): ?>
+<script type="text/javascript">
+//<![CDATA[
+(function ($) {
+ $("input").attr("autocomplete","off");
+})(jQuery);
+//]]>
+</script>
+<?php endif; ?>
diff --git a/src/usr/local/www/filebrowser/browser.js b/src/usr/local/www/filebrowser/browser.js
new file mode 100644
index 0000000..2769db3
--- /dev/null
+++ b/src/usr/local/www/filebrowser/browser.js
@@ -0,0 +1,48 @@
+/*
+ pfSense_MODULE: shell
+*/
+
+jQuery(document).ready(
+ function() {
+ jQuery("#fbOpen").click(
+ function() {
+ jQuery("#fbBrowser").fadeIn(750);
+ fbBrowse(jQuery("#fbTarget").val());
+ }
+ );
+ }
+);
+
+function fbBrowse(path) {
+ jQuery("#fileContent").fadeOut();
+
+ if (jQuery("#fbCurrentDir")) {
+ jQuery("#fbCurrentDir").html("Loading ...");
+ }
+
+ jQuery.ajax(
+ "/filebrowser/browser.php?path=" + encodeURI(path ? path : "/"),
+ { type: "get", complete: fbComplete }
+ );
+
+}
+
+function fbComplete(req) {
+ jQuery("#fbBrowser").html(req.responseText);
+
+ var actions = {
+ fbHome: function() { fbBrowse("/"); },
+ fbClose: function() { jQuery("#fbBrowser").fadeOut(750); },
+ fbDir: function() { fbBrowse(this.id); },
+ fbFile: function() { jQuery("#fbTarget").val(this.id); }
+ }
+
+ for (var type in actions) {
+ jQuery("#fbBrowser ." + type).each(
+ function() {
+ jQuery(this).click(actions[type]);
+ jQuery(this).css("cursor","pointer");
+ }
+ );
+ }
+}
diff --git a/src/usr/local/www/filebrowser/browser.php b/src/usr/local/www/filebrowser/browser.php
new file mode 100644
index 0000000..8ab05db
--- /dev/null
+++ b/src/usr/local/www/filebrowser/browser.php
@@ -0,0 +1,165 @@
+<?php
+
+require_once("guiconfig.inc");
+
+/*
+ pfSense_MODULE: shell
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+*/
+// Fetch a list of directories and files inside a given directory
+function get_content($dir) {
+ $dirs = array();
+ $files = array();
+
+ clearstatcache();
+ $fd = @opendir($dir);
+
+ while ($entry = @readdir($fd)) {
+ if ($entry == ".") {
+ continue;
+ }
+ if ($entry == ".." && $dir == "/") {
+ continue;
+ }
+ if (is_dir("{$dir}/{$entry}")) {
+ array_push($dirs, $entry);
+ } else {
+ array_push($files, $entry);
+ }
+ }
+
+ @closedir($fd);
+
+ natsort($dirs);
+ natsort($files);
+
+ return array($dirs, $files);
+}
+
+$path = realpath(strlen($_GET['path']) > 0 ? $_GET['path'] : "/");
+if (is_file($path)) {
+ $path = dirname($path);
+}
+
+// ----- header -----
+?>
+<table width="100%">
+ <tr>
+ <td class="fbHome" width="25px" align="left">
+ <img onClick="jQuery('#fbTarget').val('<?=$realDir?>'); fbBrowse('/');" src="/filebrowser/images/icon_home.gif" alt="Home" title="Home" />
+ </td>
+ <td><b><?=$path;?></b></td>
+ <td class="fbClose" align="right">
+ <img onClick="jQuery('#fbBrowser').fadeOut();" border="0" src="/filebrowser/images/icon_cancel.gif" alt="Close" title="Close" />
+ </td>
+ </tr>
+ <tr>
+ <td id="fbCurrentDir" colspan="3" class="vexpl" align="left">
+<?php
+
+// ----- read contents -----
+if (is_dir($path)) {
+ list($dirs, $files) = get_content($path);
+?>
+
+ </td>
+ </tr>
+<?php
+} else {
+?>
+ Directory does not exist.
+ </td>
+ </tr>
+</table>
+<?php
+ exit;
+}
+
+// ----- directories -----
+foreach ($dirs as $dir):
+ $realDir = realpath("{$path}/{$dir}");
+?>
+ <tr>
+ <td></td>
+ <td class="fbDir vexpl" id="<?=$realDir;?>" align="left">
+ <div onClick="jQuery('#fbTarget').val('<?=$realDir?>'); fbBrowse('<?=$realDir?>');">
+ <img src="/filebrowser/images/folder_generic.gif" />
+ &nbsp;<?=$dir;?>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+<?php
+endforeach;
+
+// ----- files -----
+foreach ($files as $file):
+ $ext = strrchr($file, ".");
+
+ switch ($ext) {
+ case ".css":
+ case ".html":
+ case ".xml":
+ $type = "code";
+ break;
+ case ".rrd":
+ $type = "database";
+ break;
+ case ".gif":
+ case ".jpg":
+ case ".png":
+ $type = "image";
+ break;
+ case ".js":
+ $type = "js";
+ break;
+ case ".pdf":
+ $type = "pdf";
+ break;
+ case ".inc":
+ case ".php":
+ $type = "php";
+ break;
+ case ".conf":
+ case ".pid":
+ case ".sh":
+ $type = "system";
+ break;
+ case ".bz2":
+ case ".gz":
+ case ".tgz":
+ case ".zip":
+ $type = "zip";
+ break;
+ default:
+ $type = "generic";
+ }
+
+ $fqpn = "{$path}/{$file}";
+
+ if (is_file($fqpn)) {
+ $fqpn = realpath($fqpn);
+ $size = sprintf("%.2f KiB", filesize($fqpn) / 1024);
+ } else {
+ $size = "";
+ }
+
+?>
+ <tr>
+ <td></td>
+ <td class="fbFile vexpl" id="<?=$fqpn;?>" align="left">
+ <?php $filename = str_replace("//","/", "{$path}/{$file}"); ?>
+ <div onClick="jQuery('#fbTarget').val('<?=$filename?>'); loadFile(); jQuery('#fbBrowser').fadeOut();">
+ <img src="/filebrowser/images/file_<?=$type;?>.gif" alt="" title="">
+ &nbsp;<?=$file;?>
+ </div>
+ </td>
+ <td align="right" class="vexpl">
+ <?=$size;?>
+ </td>
+ </tr>
+<?php
+endforeach;
+?>
+</table>
diff --git a/src/usr/local/www/filebrowser/images/file_code.gif b/src/usr/local/www/filebrowser/images/file_code.gif
new file mode 100755
index 0000000..f06a205
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_code.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_database.gif b/src/usr/local/www/filebrowser/images/file_database.gif
new file mode 100755
index 0000000..d479c91
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_database.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_doc.gif b/src/usr/local/www/filebrowser/images/file_doc.gif
new file mode 100755
index 0000000..222c31b
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_doc.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_flash.gif b/src/usr/local/www/filebrowser/images/file_flash.gif
new file mode 100755
index 0000000..e565c37
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_flash.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_generic.gif b/src/usr/local/www/filebrowser/images/file_generic.gif
new file mode 100755
index 0000000..5f39482
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_generic.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_image.gif b/src/usr/local/www/filebrowser/images/file_image.gif
new file mode 100755
index 0000000..4960683
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_image.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_js.gif b/src/usr/local/www/filebrowser/images/file_js.gif
new file mode 100755
index 0000000..9b6601f
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_js.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_pdf.gif b/src/usr/local/www/filebrowser/images/file_pdf.gif
new file mode 100755
index 0000000..b01bb23
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_pdf.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_php.gif b/src/usr/local/www/filebrowser/images/file_php.gif
new file mode 100755
index 0000000..ab7f459
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_php.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_ppt.gif b/src/usr/local/www/filebrowser/images/file_ppt.gif
new file mode 100755
index 0000000..0383c98
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_ppt.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_system.gif b/src/usr/local/www/filebrowser/images/file_system.gif
new file mode 100755
index 0000000..f1997c7
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_system.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_xls.gif b/src/usr/local/www/filebrowser/images/file_xls.gif
new file mode 100755
index 0000000..d004013
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_xls.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/file_zip.gif b/src/usr/local/www/filebrowser/images/file_zip.gif
new file mode 100755
index 0000000..ec98255
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/file_zip.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/folder_generic.gif b/src/usr/local/www/filebrowser/images/folder_generic.gif
new file mode 100755
index 0000000..45b191d
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/folder_generic.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_cancel.gif b/src/usr/local/www/filebrowser/images/icon_cancel.gif
new file mode 100755
index 0000000..246a819
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_cancel.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_contract.gif b/src/usr/local/www/filebrowser/images/icon_contract.gif
new file mode 100755
index 0000000..cf82159
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_contract.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_expand.gif b/src/usr/local/www/filebrowser/images/icon_expand.gif
new file mode 100755
index 0000000..06c0c68
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_expand.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_home.gif b/src/usr/local/www/filebrowser/images/icon_home.gif
new file mode 100755
index 0000000..f888434
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_home.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_left.gif b/src/usr/local/www/filebrowser/images/icon_left.gif
new file mode 100755
index 0000000..0d1137c
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/filebrowser/images/icon_magnifier.gif b/src/usr/local/www/filebrowser/images/icon_magnifier.gif
new file mode 100755
index 0000000..e96e548
--- /dev/null
+++ b/src/usr/local/www/filebrowser/images/icon_magnifier.gif
Binary files differ
diff --git a/src/usr/local/www/firewall_aliases.php b/src/usr/local/www/firewall_aliases.php
new file mode 100644
index 0000000..950a8a2
--- /dev/null
+++ b/src/usr/local/www/firewall_aliases.php
@@ -0,0 +1,311 @@
+<?php
+/* $Id$ */
+/*
+ firewall_aliases.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: aliases
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-aliases
+##|*NAME=Firewall: Aliases page
+##|*DESCR=Allow access to the 'Firewall: Aliases' page.
+##|*MATCH=firewall_aliases.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['aliases']['alias'])) {
+ $config['aliases']['alias'] = array();
+}
+$a_aliases = &$config['aliases']['alias'];
+
+$tab = ($_REQUEST['tab'] == "" ? "ip" : preg_replace("/\W/", "", $_REQUEST['tab']));
+
+if ($_POST) {
+
+ if ($_POST['apply']) {
+ $retval = 0;
+
+ /* reload all components that use aliases */
+ $retval = filter_configure();
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ if ($retval == 0) {
+ clear_subsystem_dirty('aliases');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_aliases[$_GET['id']]) {
+ /* make sure rule is not being referenced by any nat or filter rules */
+ $is_alias_referenced = false;
+ $referenced_by = false;
+ $alias_name = $a_aliases[$_GET['id']]['name'];
+ // Firewall rules
+ find_alias_reference(array('filter', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('filter', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('filter', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('filter', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
+ // NAT Rules
+ find_alias_reference(array('nat', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'rule'), array('local-port'), $alias_name, $is_alias_referenced, $referenced_by);
+ // NAT 1:1 Rules
+ //find_alias_reference(array('nat', 'onetoone'), array('external'), $alias_name, $is_alias_referenced, $referenced_by);
+ //find_alias_reference(array('nat', 'onetoone'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'onetoone'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ // NAT Outbound Rules
+ find_alias_reference(array('nat', 'outbound', 'rule'), array('source', 'network'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'outbound', 'rule'), array('sourceport'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'outbound', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'outbound', 'rule'), array('dstport'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('nat', 'outbound', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
+ // Alias in an alias
+ find_alias_reference(array('aliases', 'alias'), array('address'), $alias_name, $is_alias_referenced, $referenced_by);
+ // Load Balancer
+ find_alias_reference(array('load_balancer', 'lbpool'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
+ find_alias_reference(array('load_balancer', 'virtual_server'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
+ // Static routes
+ find_alias_reference(array('staticroutes', 'route'), array('network'), $alias_name, $is_alias_referenced, $referenced_by);
+ if ($is_alias_referenced == true) {
+ $savemsg = sprintf(gettext("Cannot delete alias. Currently in use by %s"), $referenced_by);
+ } else {
+ unset($a_aliases[$_GET['id']]);
+ if (write_config()) {
+ filter_configure();
+ mark_subsystem_dirty('aliases');
+ }
+ header("Location: firewall_aliases.php?tab=" . $tab);
+ exit;
+ }
+ }
+}
+
+function find_alias_reference($section, $field, $origname, &$is_alias_referenced, &$referenced_by) {
+ global $config;
+ if (!$origname || $is_alias_referenced) {
+ return;
+ }
+
+ $sectionref = &$config;
+ foreach ($section as $sectionname) {
+ if (is_array($sectionref) && isset($sectionref[$sectionname])) {
+ $sectionref = &$sectionref[$sectionname];
+ } else {
+ return;
+ }
+ }
+
+ if (is_array($sectionref)) {
+ foreach ($sectionref as $itemkey => $item) {
+ $fieldfound = true;
+ $fieldref = &$sectionref[$itemkey];
+ foreach ($field as $fieldname) {
+ if (is_array($fieldref) && isset($fieldref[$fieldname])) {
+ $fieldref = &$fieldref[$fieldname];
+ } else {
+ $fieldfound = false;
+ break;
+ }
+ }
+ if ($fieldfound && $fieldref == $origname) {
+ $is_alias_referenced = true;
+ if (is_array($item)) {
+ $referenced_by = $item['descr'];
+ }
+ break;
+ }
+ }
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Aliases"));
+$shortcut_section = "aliases";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_aliases.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('aliases')): ?><p>
+<?php print_info_box_np(gettext("The alias list has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."));?>
+<?php endif; ?>
+<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases/pre_table"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall aliases">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("IP"), ($tab == "ip" ? true : ($tab == "host" ? true : ($tab == "network" ? true : false))), "/firewall_aliases.php?tab=ip");
+ $tab_array[] = array(gettext("Ports"), ($tab == "port"? true : false), "/firewall_aliases.php?tab=port");
+ $tab_array[] = array(gettext("URLs"), ($tab == "url"? true : false), "/firewall_aliases.php?tab=url");
+ $tab_array[] = array(gettext("All"), ($tab == "all"? true : false), "/firewall_aliases.php?tab=all");
+ display_top_tabs($tab_array);
+ ?>
+ <input type="hidden" name="tab" value="<?=htmlspecialchars($tab);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="43%" class="listhdrr"><?=gettext("Values"); ?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="7%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="firewall_aliases_edit.php?tab=<?=$tab?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=dom_title(gettext("Add a new alias"));?> alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ asort($a_aliases);
+ foreach ($a_aliases as $i=> $alias) {
+ unset ($show_alias);
+ switch ($tab) {
+ case "all":
+ $show_alias= true;
+ break;
+ case "ip":
+ case "host":
+ case "network":
+ if (preg_match("/(host|network)/", $alias["type"])) {
+ $show_alias= true;
+ }
+ break;
+ case "url":
+ if (preg_match("/(url)/i", $alias["type"])) {
+ $show_alias= true;
+ }
+ break;
+ case "port":
+ if ($alias["type"] == "port") {
+ $show_alias= true;
+ }
+ break;
+ }
+ if ($show_alias) {
+ ?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($alias['name']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
+ <?php
+ if ($alias["url"]) {
+ echo $alias["url"] . "<br />";
+ } else {
+ if (is_array($alias["aliasurl"])) {
+ $aliasurls = implode(", ", array_slice($alias["aliasurl"], 0, 10));
+ echo $aliasurls;
+ if (count($aliasurls) > 10) {
+ echo "...<br />";
+ }
+ echo "<br />\n";
+ }
+ $tmpaddr = explode(" ", $alias['address']);
+ $addresses = implode(", ", array_slice($tmpaddr, 0, 10));
+ echo $addresses;
+ if (count($tmpaddr) > 10) {
+ echo "...";
+ }
+ }
+ ?>
+ </td>
+ <td class="listbg" ondblclick="document.location='firewall_aliases_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($alias['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="firewall_aliases_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" <?=dom_title(gettext("Edit alias")." {$alias['name']}");?> alt="edit" /></a></td>
+ <td><a href="firewall_aliases.php?act=del&amp;tab=<?=$tab;?>&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this alias? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" <?=dom_title(gettext("Delete alias")." {$alias['name']}");?> alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ } // if ($show_alias)
+ } // foreach
+ ?>
+
+ <tr>
+ <td colspan="3">&nbsp;</td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tbody>
+ <tr>
+ <td valign="middle">
+ <a href="firewall_aliases_edit.php?tab=<?=$tab?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=dom_title(gettext("Add a new alias")); ?> alt="add" /></a>
+ </td>
+ <td valign="middle">
+ <a href="firewall_aliases_import.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_import_alias.gif" width="17" height="17" border="0" <?=dom_title(gettext("Bulk import aliases from list"));?> alt="import" /></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="tabcont" colspan="3">
+ <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span></span></p><div style="overflow:hidden; text-align:justify;"><p><span class="vexpl"><?=gettext("Aliases act as placeholders for real hosts, networks or ports. They can be used to minimize the number of changes that have to be made if a host, network or port changes. You can enter the name of an alias instead of the host, network or port in all fields that have a red background. The alias will be resolved according to the list above. If an alias cannot be resolved (e.g. because you deleted it), the corresponding element (e.g. filter/NAT/shaper rule) will be considered invalid and skipped."); ?></span></p></div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_aliases_edit.php b/src/usr/local/www/firewall_aliases_edit.php
new file mode 100755
index 0000000..638d1f1
--- /dev/null
+++ b/src/usr/local/www/firewall_aliases_edit.php
@@ -0,0 +1,890 @@
+<?php
+/* $Id$ */
+/*
+ firewall_aliases_edit.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2010 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm /bin/mkdir /usr/bin/fetch
+ pfSense_MODULE: aliases
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-alias-edit
+##|*NAME=Firewall: Alias: Edit page
+##|*DESCR=Allow access to the 'Firewall: Alias: Edit' page.
+##|*MATCH=firewall_aliases_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pgtitle = array(gettext("Firewall"), gettext("Aliases"), gettext("Edit"));
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_aliases.php');
+}
+
+// Keywords not allowed in names
+$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
+
+// Add all Load balance names to reserved_keywords
+if (is_array($config['load_balancer']['lbpool'])) {
+ foreach ($config['load_balancer']['lbpool'] as $lbpool) {
+ $reserved_keywords[] = $lbpool['name'];
+ }
+}
+
+$reserved_ifs = get_configured_interface_list(false, true);
+$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names);
+$max_alias_addresses = 5000;
+
+if (!is_array($config['aliases']['alias'])) {
+ $config['aliases']['alias'] = array();
+}
+$a_aliases = &$config['aliases']['alias'];
+
+$tab = $_REQUEST['tab'];
+
+if ($_POST) {
+ $origname = $_POST['origname'];
+}
+
+// Debugging
+if ($debug) {
+ unlink_if_exists("{$g['tmp_path']}/alias_rename_log.txt");
+}
+
+function alias_same_type($name, $type) {
+ global $config;
+
+ foreach ($config['aliases']['alias'] as $alias) {
+ if ($name == $alias['name']) {
+ if (in_array($type, array("host", "network")) &&
+ in_array($alias['type'], array("host", "network"))) {
+ return true;
+ }
+ if ($type == $alias['type']) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_aliases[$id]) {
+ $original_alias_name = $a_aliases[$id]['name'];
+ $pconfig['name'] = $a_aliases[$id]['name'];
+ $pconfig['detail'] = $a_aliases[$id]['detail'];
+ $pconfig['address'] = $a_aliases[$id]['address'];
+ $pconfig['type'] = $a_aliases[$id]['type'];
+ $pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']);
+
+ if (preg_match("/urltable/i", $a_aliases[$id]['type'])) {
+ $pconfig['address'] = $a_aliases[$id]['url'];
+ $pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
+ }
+ if ($a_aliases[$id]['aliasurl'] <> "") {
+ if (is_array($a_aliases[$id]['aliasurl'])) {
+ $pconfig['address'] = implode(" ", $a_aliases[$id]['aliasurl']);
+ } else {
+ $pconfig['address'] = $a_aliases[$id]['aliasurl'];
+ }
+ }
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $vertical_bar_err_text = gettext("Vertical bars (|) at start or end, or double in the middle of descriptions not allowed. Descriptions have been cleaned. Check and save again.");
+
+ /* input validation */
+
+ $reqdfields = explode(" ", "name");
+ $reqdfieldsn = array(gettext("Name"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $x = is_validaliasname($_POST['name']);
+ if (!isset($x)) {
+ $input_errors[] = gettext("Reserved word used for alias name.");
+ } else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) {
+ $input_errors[] = gettext("Reserved word used for alias name.");
+ } else {
+ if (is_validaliasname($_POST['name']) == false) {
+ $input_errors[] = gettext("The alias name must be less than 32 characters long, may not consist of only numbers, and may only contain the following characters") . " a-z, A-Z, 0-9, _.";
+ }
+ }
+ /* check for name conflicts */
+ if (empty($a_aliases[$id])) {
+ foreach ($a_aliases as $alias) {
+ if ($alias['name'] == $_POST['name']) {
+ $input_errors[] = gettext("An alias with this name already exists.");
+ break;
+ }
+ }
+ }
+
+ /* Check for reserved keyword names */
+ foreach ($reserved_keywords as $rk) {
+ if ($rk == $_POST['name']) {
+ $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
+ }
+ }
+
+ /* check for name interface description conflicts */
+ foreach ($config['interfaces'] as $interface) {
+ if ($interface['descr'] == $_POST['name']) {
+ $input_errors[] = gettext("An interface description with this name already exists.");
+ break;
+ }
+ }
+
+ $alias = array();
+ $address = array();
+ $final_address_details = array();
+ $alias['name'] = $_POST['name'];
+
+ if (preg_match("/urltable/i", $_POST['type'])) {
+ $address = "";
+
+ /* item is a url table type */
+ if ($_POST['address0']) {
+ /* fetch down and add in */
+ $_POST['address0'] = trim($_POST['address0']);
+ $address[] = $_POST['address0'];
+ $alias['url'] = $_POST['address0'];
+ $alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7;
+ if (!is_URL($alias['url']) || empty($alias['url'])) {
+ $input_errors[] = gettext("You must provide a valid URL.");
+ } elseif (!process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
+ $input_errors[] = gettext("Unable to fetch usable data.");
+ }
+ if ($_POST["detail0"] <> "") {
+ if ((strpos($_POST["detail0"], "||") === false) && (substr($_POST["detail0"], 0, 1) != "|") && (substr($_POST["detail0"], -1, 1) != "|")) {
+ $final_address_details[] = $_POST["detail0"];
+ } else {
+ /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
+ /* and put in the output array so the text is at least redisplayed for the user. */
+ $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail0"], "|"));
+ $input_errors[] = $vertical_bar_err_text;
+ }
+ } else {
+ $final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
+ }
+ }
+ } else if ($_POST['type'] == "url" || $_POST['type'] == "url_ports") {
+ $desc_fmt_err_found = false;
+
+ /* item is a url type */
+ for ($x = 0; $x < $max_alias_addresses - 1; $x++) {
+ $_POST['address' . $x] = trim($_POST['address' . $x]);
+ if ($_POST['address' . $x]) {
+ /* fetch down and add in */
+ $temp_filename = tempnam("{$g['tmp_path']}/", "alias_import");
+ unlink_if_exists($temp_filename);
+ $verify_ssl = isset($config['system']['checkaliasesurlcert']);
+ mkdir($temp_filename);
+ download_file($_POST['address' . $x], $temp_filename . "/aliases", $verify_ssl);
+
+ /* if the item is tar gzipped then extract */
+ if (stristr($_POST['address' . $x], ".tgz")) {
+ process_alias_tgz($temp_filename);
+ } else if (stristr($_POST['address' . $x], ".zip")) {
+ process_alias_unzip($temp_filename);
+ }
+
+ if (!isset($alias['aliasurl'])) {
+ $alias['aliasurl'] = array();
+ }
+
+ $alias['aliasurl'][] = $_POST['address' . $x];
+ if ($_POST["detail{$x}"] <> "") {
+ if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
+ $final_address_details[] = $_POST["detail{$x}"];
+ } else {
+ /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
+ /* and put in the output array so the text is at least redisplayed for the user. */
+ $final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
+ if (!$desc_fmt_err_found) {
+ $input_errors[] = $vertical_bar_err_text;
+ $desc_fmt_err_found = true;
+ }
+ }
+ } else {
+ $final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
+ }
+
+ if (file_exists("{$temp_filename}/aliases")) {
+ $address = parse_aliases_file("{$temp_filename}/aliases", $_POST['type'], 3000);
+ if ($address == null) {
+ /* nothing was found */
+ $input_errors[] = sprintf(gettext("You must provide a valid URL. Could not fetch usable data from '%s'."), $_POST['address' . $x]);
+ }
+ mwexec("/bin/rm -rf " . escapeshellarg($temp_filename));
+ } else {
+ $input_errors[] = sprintf(gettext("URL '%s' is not valid."), $_POST['address' . $x]);
+ }
+ }
+ }
+ unset($desc_fmt_err_found);
+ if ($_POST['type'] == "url_ports") {
+ $address = group_ports($address);
+ }
+ } else {
+ /* item is a normal alias type */
+ $wrongaliases = "";
+ $desc_fmt_err_found = false;
+ $alias_address_count = 0;
+ $input_addresses = array();
+
+ // First trim and expand the input data.
+ // Users can paste strings like "10.1.2.0/24 10.3.0.0/16 9.10.11.0/24" into an address box.
+ // They can also put an IP range.
+ // This loop expands out that stuff so it can easily be validated.
+ for ($x = 0; $x < ($max_alias_addresses - 1); $x++) {
+ if ($_POST["address{$x}"] <> "") {
+ if ($_POST["detail{$x}"] <> "") {
+ if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
+ $detail_text = $_POST["detail{$x}"];
+ } else {
+ /* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
+ /* and put in the output array so the text is at least redisplayed for the user. */
+ $detail_text = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
+ if (!$desc_fmt_err_found) {
+ $input_errors[] = $vertical_bar_err_text;
+ $desc_fmt_err_found = true;
+ }
+ }
+ } else {
+ $detail_text = sprintf(gettext("Entry added %s"), date('r'));
+ }
+ $address_items = explode(" ", trim($_POST["address{$x}"]));
+ foreach ($address_items as $address_item) {
+ $iprange_type = is_iprange($address_item);
+ if ($iprange_type == 4) {
+ list($startip, $endip) = explode('-', $address_item);
+ if ($_POST['type'] == "network") {
+ // For network type aliases, expand an IPv4 range into an array of subnets.
+ $rangesubnets = ip_range_to_subnet_array($startip, $endip);
+ foreach ($rangesubnets as $rangesubnet) {
+ if ($alias_address_count > $max_alias_addresses) {
+ break;
+ }
+ list($address_part, $subnet_part) = explode("/", $rangesubnet);
+ $input_addresses[] = $address_part;
+ $input_address_subnet[] = $subnet_part;
+ $final_address_details[] = $detail_text;
+ $alias_address_count++;
+ }
+ } else {
+ // For host type aliases, expand an IPv4 range into a list of individual IPv4 addresses.
+ $rangeaddresses = ip_range_to_address_array($startip, $endip, $max_alias_addresses - $alias_address_count);
+ if (is_array($rangeaddresses)) {
+ foreach ($rangeaddresses as $rangeaddress) {
+ $input_addresses[] = $rangeaddress;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ $alias_address_count++;
+ }
+ } else {
+ $input_errors[] = sprintf(gettext('Range is too large to expand into individual host IP addresses (%s)'), $address_item);
+ $input_errors[] = sprintf(gettext('The maximum number of entries in an alias is %s'), $max_alias_addresses);
+ // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
+ $input_addresses[] = $address_item;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ }
+ }
+ } else if ($iprange_type == 6) {
+ $input_errors[] = sprintf(gettext('IPv6 address ranges are not supported (%s)'), $address_item);
+ // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
+ $input_addresses[] = $address_item;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ } else {
+ $subnet_type = is_subnet($address_item);
+ if (($_POST['type'] == "host") && $subnet_type) {
+ if ($subnet_type == 4) {
+ // For host type aliases, if the user enters an IPv4 subnet, expand it into a list of individual IPv4 addresses.
+ if (subnet_size($address_item) <= ($max_alias_addresses - $alias_address_count)) {
+ $rangeaddresses = subnetv4_expand($address_item);
+ foreach ($rangeaddresses as $rangeaddress) {
+ $input_addresses[] = $rangeaddress;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ $alias_address_count++;
+ }
+ } else {
+ $input_errors[] = sprintf(gettext('Subnet is too large to expand into individual host IP addresses (%s)'), $address_item);
+ $input_errors[] = sprintf(gettext('The maximum number of entries in an alias is %s'), $max_alias_addresses);
+ // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
+ $input_addresses[] = $address_item;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ }
+ } else {
+ $input_errors[] = sprintf(gettext('IPv6 subnets are not supported in host aliases (%s)'), $address_item);
+ // Put the user-entered data in the output anyway, so it will be re-displayed for correction.
+ $input_addresses[] = $address_item;
+ $input_address_subnet[] = "";
+ $final_address_details[] = $detail_text;
+ }
+ } else {
+ list($address_part, $subnet_part) = explode("/", $address_item);
+ if (!empty($subnet_part)) {
+ if (is_subnet($address_item)) {
+ $input_addresses[] = $address_part;
+ $input_address_subnet[] = $subnet_part;
+ } else {
+ // The user typed something like "1.2.3.444/24" or "1.2.3.0/36" or similar rubbish.
+ // Feed it through without splitting it apart, then it will be caught by the validation loop below.
+ $input_addresses[] = $address_item;
+ $input_address_subnet[] = "";
+ }
+ } else {
+ $input_addresses[] = $address_part;
+ $input_address_subnet[] = $_POST["address_subnet{$x}"];
+ }
+ $final_address_details[] = $detail_text;
+ $alias_address_count++;
+ }
+ }
+ if ($alias_address_count > $max_alias_addresses) {
+ $input_errors[] = sprintf(gettext('The maximum number of entries in an alias has been exceeded (%s)'), $max_alias_addresses);
+ break;
+ }
+ }
+ }
+ }
+
+ // Validate the input data expanded above.
+ foreach ($input_addresses as $idx => $input_address) {
+ if (is_alias($input_address)) {
+ if (!alias_same_type($input_address, $_POST['type'])) {
+ // But alias type network can include alias type urltable. Feature#1603.
+ if (!($_POST['type'] == 'network' &&
+ preg_match("/urltable/i", alias_get_type($input_address)))) {
+ $wrongaliases .= " " . $input_address;
+ }
+ }
+ } else if ($_POST['type'] == "port") {
+ if (!is_port($input_address) && !is_portrange($input_address)) {
+ $input_errors[] = $input_address . " " . gettext("is not a valid port or alias.");
+ }
+ } else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
+ if (is_subnet($input_address) ||
+ (!is_ipaddr($input_address) && !is_hostname($input_address))) {
+ $input_errors[] = sprintf(gettext('%1$s is not a valid %2$s address, FQDN or alias.'), $input_address, $_POST['type']);
+ }
+ }
+ $tmpaddress = $input_address;
+ if ($_POST['type'] != "host" && is_ipaddr($input_address) && $input_address_subnet[$idx] <> "") {
+ if (!is_subnet($input_address . "/" . $input_address_subnet[$idx])) {
+ $input_errors[] = sprintf(gettext('%s/%s is not a valid subnet.'), $input_address, $input_address_subnet[$idx]);
+ } else {
+ $tmpaddress .= "/" . $input_address_subnet[$idx];
+ }
+ }
+ $address[] = $tmpaddress;
+ }
+ unset($desc_fmt_err_found);
+ if ($wrongaliases <> "") {
+ $input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
+ }
+ }
+
+ unset($vertical_bar_err_text);
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
+
+ if (!$input_errors) {
+ $alias['address'] = is_array($address) ? implode(" ", $address) : $address;
+ $alias['descr'] = $_POST['descr'];
+ $alias['type'] = $_POST['type'];
+ $alias['detail'] = implode("||", $final_address_details);
+
+ /* Check to see if alias name needs to be
+ * renamed on referenced rules and such
+ */
+ if ($_POST['name'] <> $_POST['origname']) {
+ // Firewall rules
+ update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
+ // NAT Rules
+ update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
+ // NAT 1:1 Rules
+ //update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
+ //update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
+ // NAT Outbound Rules
+ update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('sourceport'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('dstport'), $_POST['name'], $origname);
+ update_alias_names_upon_change(array('nat', 'outbound', 'rule'), array('target'), $_POST['name'], $origname);
+ // Alias in an alias
+ update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
+ }
+
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
+
+ if (isset($id) && $a_aliases[$id]) {
+ if ($a_aliases[$id]['name'] <> $alias['name']) {
+ foreach ($a_aliases as $aliasid => $aliasd) {
+ if ($aliasd['address'] <> "") {
+ $tmpdirty = false;
+ $tmpaddr = explode(" ", $aliasd['address']);
+ foreach ($tmpaddr as $tmpidx => $tmpalias) {
+ if ($tmpalias == $a_aliases[$id]['name']) {
+ $tmpaddr[$tmpidx] = $alias['name'];
+ $tmpdirty = true;
+ }
+ }
+ if ($tmpdirty == true) {
+ $a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
+ }
+ }
+ }
+ }
+ $a_aliases[$id] = $alias;
+ } else {
+ $a_aliases[] = $alias;
+ }
+
+ // Sort list
+ $a_aliases = msort($a_aliases, "name");
+
+ if (write_config()) {
+ mark_subsystem_dirty('aliases');
+ }
+
+ if (!empty($tab)) {
+ header("Location: firewall_aliases.php?tab=" . htmlspecialchars ($tab));
+ } else {
+ header("Location: firewall_aliases.php");
+ }
+ exit;
+ } else {
+ //we received input errors, copy data to prevent retype
+ $pconfig['name'] = $_POST['name'];
+ $pconfig['descr'] = $_POST['descr'];
+ if (($_POST['type'] == 'url') || ($_POST['type'] == 'url_ports')) {
+ $pconfig['address'] = implode(" ", $alias['aliasurl']);
+ } else {
+ $pconfig['address'] = implode(" ", $address);
+ }
+ $pconfig['type'] = $_POST['type'];
+ $pconfig['detail'] = implode("||", $final_address_details);
+ }
+}
+
+include("head.inc");
+
+$jscriptstr = <<<EOD
+
+<script type="text/javascript">
+//<![CDATA[
+var objAlias = new Array(4999);
+function typesel_change() {
+ var field_disabled = 0;
+ var field_value = "";
+ var set_value = false;
+ switch (document.iform.type.selectedIndex) {
+ case 0: /* host */
+ field_disabled = 1;
+ field_value = "";
+ set_value = true;
+ break;
+ case 1: /* network */
+ field_disabled = 0;
+ break;
+ case 2: /* port */
+ field_disabled = 1;
+ field_value = "128";
+ set_value = true;
+ break;
+ case 3: /* url */
+ field_disabled = 1;
+ break;
+ case 4: /* url_ports */
+ field_disabled = 1;
+ break;
+ case 5: /* urltable */
+ field_disabled = 0;
+ break;
+ case 6: /* urltable_ports */
+ field_disabled = 0;
+ break;
+ }
+
+ jQuery("select[id^='address_subnet']").prop("disabled", field_disabled);
+ if (set_value == true) {
+ jQuery("select[id^='address_subnet']").prop("value", field_value);
+ }
+}
+
+function add_alias_control() {
+ var name = "address" + (totalrows - 1);
+ obj = document.getElementById(name);
+ obj.setAttribute('class', 'formfldalias');
+ obj.setAttribute('autocomplete', 'off');
+ objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
+}
+EOD;
+
+$network_str = gettext("Network or FQDN");
+$networks_str = gettext("Network(s)");
+$cidr_str = gettext("CIDR");
+$description_str = gettext("Description");
+$hosts_str = gettext("Host(s)");
+$ip_str = gettext("IP or FQDN");
+$ports_str = gettext("Port(s)");
+$port_str = gettext("Port");
+$url_str = gettext("URL (IPs)");
+$url_ports_str = gettext("URL (Ports)");
+$urltable_str = gettext("URL Table (IPs)");
+$urltable_ports_str = gettext("URL Table (Ports)");
+$update_freq_str = gettext("Update Freq. (days)");
+
+$networks_help = gettext("Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range.");
+$hosts_help = gettext("Enter as many hosts as you would like. Hosts must be specified by their IP address or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used. You may also enter an IP range such as 192.168.1.1-192.168.1.10 or a small subnet such as 192.168.1.16/28 and a list of individual IP addresses will be generated.");
+$ports_help = gettext("Enter as many ports as you wish. Port ranges can be expressed by separating with a colon.");
+$url_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)."), $g['product_name']);
+$url_ports_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of Ports (less than 3000)."), $g['product_name']);
+$urltable_help = sprintf(gettext("Enter a single URL containing a large number of IPs and/or Subnets. After saving %s will download the URL and create a table file containing these addresses. This will work with large numbers of addresses (30,000+) or small numbers."), $g['product_name']);
+$urltable_ports_help = sprintf(gettext("Enter a single URL containing a list of Port numbers and/or Port ranges. After saving %s will download the URL."), $g['product_name']);
+
+$openvpn_str = gettext("Username");
+$openvpn_user_str = gettext("OpenVPN Users");
+$openvpn_help = gettext("Enter as many usernames as you wish.");
+$openvpn_freq = "";
+
+$jscriptstr .= <<<EOD
+
+function update_box_type() {
+ var indexNum = document.forms[0].type.selectedIndex;
+ var selected = document.forms[0].type.options[indexNum].text;
+ if (selected == '{$networks_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
+ document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$hosts_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
+ document.getElementById ("twocolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$ports_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
+ document.getElementById ("twocolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$url_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
+ document.getElementById ("twocolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$url_ports_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$url_ports_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$url_ports_str}";
+ document.getElementById ("twocolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$url_ports_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$openvpn_user_str}') {
+ document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
+ document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
+ document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
+ document.getElementById ("threecolumn").style.display = 'block';
+ document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
+ document.getElementById ("addrowbutton").style.display = 'block';
+ } else if (selected == '{$urltable_str}') {
+ if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
+ addRowTo('maintable', 'formfldalias');
+ typesel_change();
+ add_alias_control(this);
+ }
+ document.getElementById ("addressnetworkport").firstChild.data = "{$urltable_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$urltable_str}";
+ document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
+ document.getElementById ("threecolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").style.display = 'none';
+ document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
+ document.getElementById ("addrowbutton").style.display = 'none';
+ } else if (selected == '{$urltable_ports_str}') {
+ if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
+ addRowTo('maintable', 'formfldalias');
+ typesel_change();
+ add_alias_control(this);
+ }
+ document.getElementById ("addressnetworkport").firstChild.data = "{$urltable_ports_str}";
+ document.getElementById ("onecolumn").firstChild.data = "{$urltable_ports_str}";
+ document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
+ document.getElementById ("threecolumn").firstChild.data = "";
+ document.getElementById ("threecolumn").style.display = 'none';
+ document.getElementById ("itemhelp").firstChild.data = "{$urltable_ports_help}";
+ document.getElementById ("addrowbutton").style.display = 'none';
+ }
+}
+//]]>
+</script>
+
+EOD;
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php
+ include("fbegin.inc");
+ echo $jscriptstr;
+?>
+
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<script type="text/javascript" src="/javascript/row_helper.js"></script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+
+<input type='hidden' name='address_type' value='textbox' />
+<input type='hidden' name='address_subnet_type' value='select' />
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "address";
+ rowtype[0] = "textbox,ipv4v6";
+ rowsize[0] = "30";
+
+ rowname[1] = "address_subnet";
+ rowtype[1] = "select,ipv4v6";
+ rowsize[1] = "1";
+
+ rowname[2] = "detail";
+ rowtype[2] = "textbox";
+ rowsize[2] = "50";
+//]]>
+</script>
+
+<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_input_errors"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+
+<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
+<?php
+if (empty($tab)) {
+ if (preg_match("/url/i", $pconfig['type'])) {
+ $tab = 'url';
+ } else if ($pconfig['type'] == 'host') {
+ $tab = 'ip';
+ } else {
+ $tab = $pconfig['type'];
+ }
+}
+?>
+<input name="tab" type="hidden" id="tab" value="<?=htmlspecialchars($tab);?>" />
+<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall aliases edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
+ <td class="vtable">
+ <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ <input name="name" type="text" id="name" class="formfld unknown" size="40" maxlength="31" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ <?php if (isset($id) && $a_aliases[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"."); ?>
+ </span>
+ </td>
+ </tr>
+ <?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/after_first_tr"); ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
+ <td class="vtable">
+ <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
+ <option value="host" <?php if ($pconfig['type'] == "host") echo "selected=\"selected\""; ?>><?=gettext("Host(s)"); ?></option>
+ <option value="network" <?php if ($pconfig['type'] == "network") echo "selected=\"selected\""; ?>><?=gettext("Network(s)"); ?></option>
+ <option value="port" <?php if (($pconfig['type'] == "port") || (empty($pconfig['type']) && ($tab == "port"))) echo "selected=\"selected\""; ?>><?=gettext("Port(s)"); ?></option>
+ <!--<option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected=\"selected\""; ?>><?=gettext("OpenVPN Users"); ?></option> -->
+ <option value="url" <?php if (($pconfig['type'] == "url") || (empty($pconfig['type']) && ($tab == "url"))) echo "selected=\"selected\""; ?>><?=gettext("URL (IPs)");?></option>
+ <option value="url_ports" <?php if ($pconfig['type'] == "url_ports") echo "selected=\"selected\""; ?>><?=gettext("URL (Ports)");?></option>
+ <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected=\"selected\""; ?>><?=gettext("URL Table (IPs)"); ?></option>
+ <option value="urltable_ports" <?php if ($pconfig['type'] == "urltable_ports") echo "selected=\"selected\""; ?>><?=gettext("URL Table (Ports)"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
+ <td width="78%" class="vtable">
+ <table id="maintable" summary="maintable">
+ <tbody>
+ <tr>
+ <td colspan="4">
+ <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp"><?=gettext("Item information"); ?></div>
+ </td>
+ </tr>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
+ <td><div id="twocolumn">CIDR</div></td>
+ <td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
+ </tr>
+
+ <?php
+ $counter = 0;
+ if ($pconfig['address'] <> ""):
+ $addresses = explode(" ", $pconfig['address']);
+ $details = explode("||", $pconfig['detail']);
+ while ($counter < count($addresses)):
+ if (($pconfig['type'] != "host") && is_subnet($addresses[$counter])) {
+ list($address, $address_subnet) = explode("/", $addresses[$counter]);
+ } else {
+ $address = $addresses[$counter];
+ $address_subnet = "";
+ }
+ ?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="address<?php echo $counter; ?>" type="text" class="formfldalias ipv4v6" id="address<?php echo $counter; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
+ </td>
+ <td>
+ <select name="address_subnet<?php echo $counter; ?>" class="formselect ipv4v6" id="address_subnet<?php echo $counter; ?>">
+ <option></option>
+ <?php for ($i = 128; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ <td>
+ <input name="detail<?php echo $counter; ?>" type="text" class="formfld unknown" id="detail<?php echo $counter; ?>" size="50" value="<?=htmlspecialchars($details[$counter]);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
+ </td>
+ </tr>
+ <?php
+ $counter++;
+
+ endwhile;
+ endif;
+ ?>
+ </tbody>
+ </table>
+ <div id="addrowbutton">
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" />
+ </a>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ typesel_change();
+ update_box_type();
+
+ var addressarray = <?= json_encode(array_exclude($pconfig['name'], get_alias_list($pconfig['type']))) ?>;
+
+ function createAutoSuggest() {
+ <?php
+ for ($jv = 0; $jv < $counter; $jv++) {
+ echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
+ }
+ ?>
+ }
+
+ setTimeout("createAutoSuggest();", 500);
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_aliases_import.php b/src/usr/local/www/firewall_aliases_import.php
new file mode 100755
index 0000000..868f5eb
--- /dev/null
+++ b/src/usr/local/www/firewall_aliases_import.php
@@ -0,0 +1,246 @@
+<?php
+/* $Id$ */
+/*
+ firewall_aliases_import.php
+ Copyright (C) 2005 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-alias-import
+##|*NAME=Firewall: Alias: Import page
+##|*DESCR=Allow access to the 'Firewall: Alias: Import' page.
+##|*MATCH=firewall_aliases_import.php*
+##|-PRIV
+
+
+// Keywords not allowed in names
+$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
+
+require("guiconfig.inc");
+require_once("util.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+$pgtitle = array(gettext("Firewall"), gettext("Aliases"), gettext("Bulk import"));
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_aliases.php');
+}
+
+// Add all Load balance names to reserved_keywords
+if (is_array($config['load_balancer']['lbpool'])) {
+ foreach ($config['load_balancer']['lbpool'] as $lbpool) {
+ $reserved_keywords[] = $lbpool['name'];
+ }
+}
+
+$reserved_ifs = get_configured_interface_list(false, true);
+$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names);
+
+if (!is_array($config['aliases']['alias'])) {
+ $config['aliases']['alias'] = array();
+}
+$a_aliases = &$config['aliases']['alias'];
+
+if ($_POST) {
+ $reqdfields = explode(" ", "name aliasimport");
+ $reqdfieldsn = array(gettext("Name"), gettext("Aliases"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (is_validaliasname($_POST['name']) == false) {
+ $input_errors[] = gettext("The alias name may only consist of the characters") . " a-z, A-Z, 0-9, _.";
+ }
+
+ /* check for name duplicates */
+ if (is_alias($_POST['name'])) {
+ $input_errors[] = gettext("An alias with this name already exists.");
+ }
+
+
+ /* Check for reserved keyword names */
+ foreach ($reserved_keywords as $rk) {
+ if ($rk == $_POST['name']) {
+ $input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
+ }
+ }
+
+ /* check for name interface description conflicts */
+ foreach ($config['interfaces'] as $interface) {
+ if ($interface['descr'] == $_POST['name']) {
+ $input_errors[] = gettext("An interface description with this name already exists.");
+ break;
+ }
+ }
+
+ if ($_POST['aliasimport']) {
+ $tocheck = explode("\n", $_POST['aliasimport']);
+ $imported_ips = array();
+ $imported_descs = array();
+ $desc_len_err_found = false;
+ $desc_fmt_err_found = false;
+ foreach ($tocheck as $impline) {
+ $implinea = explode(" ", trim($impline), 2);
+ $impip = $implinea[0];
+ $impdesc = trim($implinea[1]);
+ if (strlen($impdesc) < 200) {
+ if ((strpos($impdesc, "||") === false) && (substr($impdesc, 0, 1) != "|") && (substr($impdesc, -1, 1) != "|")) {
+ $iprange_type = is_iprange($impip);
+ if ($iprange_type == 4) {
+ list($startip, $endip) = explode('-', $impip);
+ $rangesubnets = ip_range_to_subnet_array($startip, $endip);
+ $imported_ips = array_merge($imported_ips, $rangesubnets);
+ $rangedescs = array_fill(0, count($rangesubnets), $impdesc);
+ $imported_descs = array_merge($imported_descs, $rangedescs);
+ } else if ($iprange_type == 6) {
+ $input_errors[] = sprintf(gettext('IPv6 address ranges are not supported (%s)'), $impip);
+ } else if (!is_ipaddr($impip) && !is_subnet($impip) && !is_hostname($impip) && !empty($impip)) {
+ $input_errors[] = sprintf(gettext("%s is not an IP address. Please correct the error to continue"), $impip);
+ } elseif (!empty($impip)) {
+ $imported_ips[] = $impip;
+ $imported_descs[] = $impdesc;
+ }
+ } else {
+ if (!$desc_fmt_err_found) {
+ $input_errors[] = gettext("Descriptions may not start or end with vertical bar (|) or contain double vertical bar ||.");
+ $desc_fmt_err_found = true;
+ }
+ }
+ } else {
+ if (!$desc_len_err_found) {
+ /* Note: The 200 character limit is just a practical check to avoid accidents */
+ /* if the user pastes a large number of IP addresses without line breaks. */
+ $input_errors[] = gettext("Descriptions must be less than 200 characters long.");
+ $desc_len_err_found = true;
+ }
+ }
+ }
+ unset($desc_len_err_found, $desc_fmt_err_found);
+ }
+
+ if (!$input_errors && is_array($imported_ips)) {
+ $alias = array();
+ $alias['address'] = implode(" ", $imported_ips);
+ $alias['detail'] = implode("||", $imported_descs);
+ $alias['name'] = $_POST['name'];
+ $alias['type'] = "network";
+ $alias['descr'] = $_POST['descr'];
+ unset($imported_ips, $imported_descs);
+ $a_aliases[] = $alias;
+
+ // Sort list
+ $a_aliases = msort($a_aliases, "name");
+
+ if (write_config()) {
+ mark_subsystem_dirty('aliases');
+ }
+ pfSenseHeader("firewall_aliases.php");
+
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="niftyOutter">
+<form action="firewall_aliases_import.php" method="post" name="iform" id="iform">
+<div id="inputerrors"></div>
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall alias import">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Import"); ?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Alias Name"); ?></td>
+ <td class="vtable">
+ <input name="name" type="text" class="formfld unknown" id="name" size="40" maxlength="31" value="<?=htmlspecialchars($_POST['name']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($_POST['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Aliases to import"); ?></td>
+ <td class="vtable">
+ <textarea name="aliasimport" rows="15" cols="40"><?php echo $_POST['aliasimport']; ?></textarea>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Paste in the aliases to import separated by a carriage return. Common examples are lists of IPs, networks, blacklists, etc."); ?>
+ <br />
+ <?=gettext("The list may contain IP addresses, with or without CIDR prefix, IP ranges, blank lines (ignored) and an optional description after each IP. e.g.:"); ?>
+ <br />172.16.1.2
+ <br />172.16.0.0/24
+ <br />10.11.12.100-10.11.12.200
+ <br />192.168.1.254 Home router
+ <br />10.20.0.0/16 Office network
+ <br />10.40.1.10-10.40.1.19 Managed switches
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+</table>
+
+
+</form>
+</div>
+
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ NiftyCheck();
+ Rounded("div#nifty","top","#FFF","#EEEEEE","smooth");
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat.php b/src/usr/local/www/firewall_nat.php
new file mode 100644
index 0000000..70c8041
--- /dev/null
+++ b/src/usr/local/www/firewall_nat.php
@@ -0,0 +1,399 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-portforward
+##|*NAME=Firewall: NAT: Port Forward page
+##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward' page.
+##|*MATCH=firewall_nat.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("itemid.inc");
+
+if (!is_array($config['nat']['rule'])) {
+ $config['nat']['rule'] = array();
+}
+
+$a_nat = &$config['nat']['rule'];
+
+/* if a custom message has been passed along, lets process it */
+if ($_GET['savemsg']) {
+ $savemsg = $_GET['savemsg'];
+}
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+
+ $retval = 0;
+
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/apply");
+
+ if ($retval == 0) {
+ clear_subsystem_dirty('natconf');
+ clear_subsystem_dirty('filter');
+ }
+
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_nat[$_GET['id']]) {
+
+ if (isset($a_nat[$_GET['id']]['associated-rule-id'])) {
+ delete_id($a_nat[$_GET['id']]['associated-rule-id'], $config['filter']['rule']);
+ $want_dirty_filter = true;
+ }
+ unset($a_nat[$_GET['id']]);
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ if ($want_dirty_filter) {
+ mark_subsystem_dirty('filter');
+ }
+ }
+ header("Location: firewall_nat.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected rules */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei) {
+ $target = $rule['target'];
+ // Check for filter rule associations
+ if (isset($a_nat[$rulei]['associated-rule-id'])) {
+ delete_id($a_nat[$rulei]['associated-rule-id'], $config['filter']['rule']);
+
+ mark_subsystem_dirty('filter');
+ }
+ unset($a_nat[$rulei]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat.php");
+ exit;
+ }
+
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($movebtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ break;
+ }
+ }
+ /* move selected rules before this rule */
+ if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
+ $a_nat_new = array();
+
+ /* copy all rules < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_nat_new[] = $a_nat[$i];
+ }
+ }
+
+ /* copy all selected rules */
+ for ($i = 0; $i < count($a_nat); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['rule'])) {
+ $a_nat_new[] = $a_nat[$i];
+ }
+ }
+
+ /* copy $movebtn rule */
+ if ($movebtn < count($a_nat)) {
+ $a_nat_new[] = $a_nat[$movebtn];
+ }
+
+ /* copy all rules > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_nat); $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_nat_new[] = $a_nat[$i];
+ }
+ }
+ $a_nat = $a_nat_new;
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat.php");
+ exit;
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Port Forward"));
+include("head.inc");
+
+echo "<script type=\"text/javascript\" src=\"/javascript/domTT/domLib.js\"></script>";
+echo "<script type=\"text/javascript\" src=\"/javascript/domTT/domTT.js\"></script>";
+echo "<script type=\"text/javascript\" src=\"/javascript/domTT/behaviour.js\"></script>";
+echo "<script type=\"text/javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>";
+
+?>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_nat.php" method="post" name="iform">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('natconf')): ?>
+<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Port Forward"), true, "firewall_nat.php");
+ $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
+ $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
+ $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr id="frheader">
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="5%" class="listhdrr"><?=gettext("If");?></td>
+ <td width="5%" class="listhdrr"><?=gettext("Proto");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("Src. addr");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("Src. ports");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("Dest. addr");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("Dest. ports");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("NAT IP");?></td>
+ <td width="11%" class="listhdrr nowrap"><?=gettext("NAT Ports");?></td>
+ <td width="11%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="list">
+ <tr>
+ <td width="17">
+ <?php if (count($a_nat) == 0): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
+ <?php else: ?>
+ <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected rules?");?>')" />
+ <?php endif; ?>
+ </td>
+ <td><a href="firewall_nat_edit.php?after=-1"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $nnats = $i = 0;
+ foreach ($a_nat as $natent):
+
+ //build Alias popup box
+ $span_end = "</U></span>";
+
+ $alias_popup = rule_popup($natent['source']['address'], pprint_port($natent['source']['port']), $natent['destination']['address'], pprint_port($natent['destination']['port']));
+
+ $alias_src_span_begin = $alias_popup["src"];
+ $alias_src_port_span_begin = $alias_popup["srcport"];
+ $alias_dst_span_begin = $alias_popup["dst"];
+ $alias_dst_port_span_begin = $alias_popup["dstport"];
+
+ $alias_src_span_end = $alias_popup["src_end"];
+ $alias_src_port_span_end = $alias_popup["srcport_end"];
+ $alias_dst_span_end = $alias_popup["dst_end"];
+ $alias_dst_port_span_end = $alias_popup["dstport_end"];
+
+ $alias_popup = rule_popup("", "", $natent['target'], pprint_port($natent['local-port']));
+
+ $alias_target_span_begin = $alias_popup["dst"];
+ $alias_local_port_span_begin = $alias_popup["dstport"];
+
+ $alias_target_span_end = $alias_popup["dst_end"];
+ $alias_local_port_span_end = $alias_popup["dstport_end"];
+
+ if (isset($natent['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ } else {
+ $textss = "<span>";
+ }
+
+ $textse = "</span>";
+
+ /* if user does not have access to edit an interface skip on to the next record */
+ if (!have_natpfruleint_access($natent['interface'])) {
+ continue;
+ }
+ ?>
+ <tr valign="top" id="fr<?=$nnats;?>">
+ <td class="listt"><input type="checkbox" id="frc<?=$nnats;?>" name="rule[]" value="<?=$i;?>" onClick="fr_bgcolor('<?=$nnats;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /></td>
+ <td class="listt" align="center">
+ <?php if ($natent['associated-rule-id'] == "pass"): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" title="<?=gettext("All traffic matching this NAT entry is passed"); ?>" border="0" alt="pass" />
+ <?php elseif (!empty($natent['associated-rule-id'])): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="17" height="17" title="<?=gettext("Firewall rule ID"); ?> <?=htmlspecialchars($nnatid); ?> <?=gettext("is managed with this rule"); ?>" border="0" alt="change" />
+ <?php endif; ?>
+ </td>
+ <td class="listlr" onClick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?>
+ <?php
+ if (!$natent['interface']) {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
+ } else {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
+ }
+ ?>
+ <?=$textse;?>
+ </td>
+
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?=strtoupper($natent['protocol']);?><?=$textse;?>
+ </td>
+
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['source']['port']));?><?php echo $alias_src_port_span_end;?><?=$textse;?>
+ </td>
+
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($natent['destination']));?><?php echo $alias_dst_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($natent['destination']['port']));?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
+ </td>
+
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?php echo $alias_target_span_begin;?><?php echo htmlspecialchars($natent['target']);?><?php echo $alias_target_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nnats;?>)" id="frd<?=$nnats;?>" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?php
+ $localport = $natent['local-port'];
+
+ list($dstbeginport, $dstendport) = explode("-", $natent['destination']['port']);
+
+ if ($dstendport) {
+ $localendport = $natent['local-port'] + $dstendport - $dstbeginport;
+ $localport .= '-' . $localendport;
+ }
+ ?>
+ <?=$textss;?><?php echo $alias_local_port_span_begin;?><?php echo htmlspecialchars(pprint_port($localport));?><?php echo $alias_local_port_span_end;?><?=$textse;?>
+ </td>
+
+ <td class="listbg" onclick="fr_toggle(<?=$nnats;?>)" ondblclick="document.location='firewall_nat_edit.php?id=<?=$nnats;?>';">
+ <?=$textss;?><?=htmlspecialchars($natent['descr']);?>&nbsp;<?=$textse;?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move">
+ <tr>
+ <td><input onmouseover="fr_insline(<?=$nnats;?>, true)" onmouseout="fr_insline(<?=$nnats;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected rules before this rule");?>" height="17" type="image" width="17" border="0" /></td>
+ <td><a href="firewall_nat_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>"></a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle"><a href="firewall_nat.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" /></a></td>
+ <td><a href="firewall_nat_edit.php?dup=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new NAT based on this one");?>" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ $nnats++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="8"></td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move">
+ <tr>
+ <td><?php if ($nnats == 0): ?><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules to end"); ?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected rules to end");?>" /><?php endif; ?></td>
+ </tr>
+ <tr>
+ <td width="17">
+ <?php if (count($a_nat) == 0): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
+ <?php else: ?>
+ <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" title="<?=gettext("delete selected rules"); ?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected rules?");?>')" />
+ <?php endif; ?>
+ </td>
+ <td><a href="firewall_nat_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" alt="pass" /></td>
+ <td colspan="3"><?=gettext("pass"); ?></td>
+ </tr>
+ <tr>
+ <td width="14"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_chain.png" width="11" height="11" alt="chain" /></td>
+ <td colspan="3"><?=gettext("linked rule");?></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php
+if ($pkg['tabs'] <> "") {
+ echo "</td></tr></table>";
+}
+?>
+
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_1to1.php b/src/usr/local/www/firewall_nat_1to1.php
new file mode 100644
index 0000000..10b48dc
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_1to1.php
@@ -0,0 +1,371 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_1to1.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-1-1
+##|*NAME=Firewall: NAT: 1:1 page
+##|*DESCR=Allow access to the 'Firewall: NAT: 1:1' page.
+##|*MATCH=firewall_nat_1to1.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['nat']['onetoone'])) {
+ $config['nat']['onetoone'] = array();
+}
+
+$a_1to1 = &$config['nat']['onetoone'];
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if ($retval == 0) {
+ clear_subsystem_dirty('natconf');
+ clear_subsystem_dirty('filter');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_1to1[$_GET['id']]) {
+ unset($a_1to1[$_GET['id']]);
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_1to1.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected rules */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei) {
+ unset($a_1to1[$rulei]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_1to1.php");
+ exit;
+ }
+
+} else if ($_GET['act'] == "toggle") {
+ if ($a_1to1[$_GET['id']]) {
+ if (isset($a_1to1[$_GET['id']]['disabled'])) {
+ unset($a_1to1[$_GET['id']]['disabled']);
+ } else {
+ $a_1to1[$_GET['id']]['disabled'] = true;
+ }
+ if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_1to1.php");
+ exit;
+ }
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($movebtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ break;
+ }
+ }
+ /* move selected rules before this rule */
+ if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
+ $a_1to1_new = array();
+
+ /* copy all rules < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_1to1_new[] = $a_1to1[$i];
+ }
+ }
+
+ /* copy all selected rules */
+ for ($i = 0; $i < count($a_1to1); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['rule'])) {
+ $a_1to1_new[] = $a_1to1[$i];
+ }
+ }
+
+ /* copy $movebtn rule */
+ if ($movebtn < count($a_1to1)) {
+ $a_1to1_new[] = $a_1to1[$movebtn];
+ }
+
+ /* copy all rules > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_1to1); $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_1to1_new[] = $a_1to1[$i];
+ }
+ }
+ if (count($a_1to1_new) > 0) {
+ $a_1to1 = $a_1to1_new;
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_1to1.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_nat_1to1.php" method="post">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+if (is_subsystem_dirty('natconf')) {
+ print_info_box_np(gettext("The NAT configuration has been changed.") .
+ "<br />" .
+ gettext("You must apply the changes in order for them to take effect."));
+}
+?>
+<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat 1to1">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
+ $tab_array[] = array(gettext("1:1"), true, "firewall_nat_1to1.php");
+ $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
+ $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr><td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr id="frheader">
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("External IP"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Internal IP"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Destination IP"); ?></td>
+ <td width="29%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle">
+ <a href="firewall_nat_1to1_edit.php">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $textse = "</span>";
+ $i = 0;
+ foreach ($a_1to1 as $natent):
+ if (isset($natent['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ $iconfn = "pass_d";
+ } else {
+ $textss = "<span>";
+ $iconfn = "pass";
+ }
+?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="listt">
+ <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ </td>
+ <td class="listt" align="center">
+ <a href="?act=toggle&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+ </a>
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ if (!$natent['interface']) {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
+ } else {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
+<?php
+ $source_net = pprint_address($natent['source']);
+ $source_cidr = strstr($source_net, '/');
+ echo $textss . $natent['external'] . $source_cidr . $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss . $source_net . $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss . pprint_address($natent['destination']) . $textse;
+?>
+ </td>
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss . htmlspecialchars($natent['descr']) . '&nbsp;' . $textse;
+?>
+ </td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move">
+ <tr>
+ <td>
+ <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>"
+ src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ title="<?=gettext("move selected rules before this rule");?>"
+ type="image" style="height:17;width:17;border:0" />
+ </td>
+ <td>
+ <a href="firewall_nat_1to1_edit.php?id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule");?>" alt="edit" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle">
+ <a href="firewall_nat_1to1.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" />
+ </a>
+ </td>
+ <td>
+ <a href="firewall_nat_1to1_edit.php?dup=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="7"></td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17"
+ title="<?=gettext("move selected mappings to end");?>" border="0" alt="move" />
+<?php
+ else:
+?>
+ <input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ style="width:17;height:17;border:0" title="<?=gettext("move selected mappings to end");?>" />
+<?php
+ endif;
+?>
+ </td>
+ <td>
+ <a href="firewall_nat_1to1_edit.php">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"
+ title="<?=gettext("add new mapping");?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
+ title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ style="width:17;height:17" title="<?=gettext("delete selected mappings");?>"
+ onclick="return confirm('<?=gettext("Do you really want to delete the selected mappings?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="7">
+ <p><span class="vexpl">
+ <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
+ <?=gettext("Depending on the way your WAN connection is setup, you may also need a"); ?>
+ <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP."); ?></a><br />
+ <?=gettext("If you add a 1:1 NAT entry for any of the interface IPs on this system, " .
+ "it will make this system inaccessible on that IP address. i.e. if " .
+ "you use your WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " .
+ "using the WAN IP address will no longer function."); ?>
+ </span></p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td></tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_1to1_edit.php b/src/usr/local/www/firewall_nat_1to1_edit.php
new file mode 100644
index 0000000..e415015
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_1to1_edit.php
@@ -0,0 +1,592 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_1to1_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-1-1-edit
+##|*NAME=Firewall: NAT: 1:1: Edit page
+##|*DESCR=Allow access to the 'Firewall: NAT: 1:1: Edit' page.
+##|*MATCH=firewall_nat_1to1_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("interfaces.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_1to1.php');
+}
+
+$specialsrcdst = explode(" ", "any pptp pppoe l2tp openvpn");
+$ifdisp = get_configured_interface_with_descr();
+foreach ($ifdisp as $kif => $kdescr) {
+ $specialsrcdst[] = "{$kif}";
+ $specialsrcdst[] = "{$kif}ip";
+}
+
+if (!is_array($config['nat']['onetoone'])) {
+ $config['nat']['onetoone'] = array();
+}
+
+$a_1to1 = &$config['nat']['onetoone'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+$after = $_GET['after'];
+if (isset($_POST['after'])) {
+ $after = $_POST['after'];
+}
+
+if (isset($_GET['dup'])) {
+ $id = $_GET['dup'];
+ $after = $_GET['dup'];
+}
+
+if (isset($id) && $a_1to1[$id]) {
+ $pconfig['disabled'] = isset($a_1to1[$id]['disabled']);
+
+ address_to_pconfig($a_1to1[$id]['source'], $pconfig['src'],
+ $pconfig['srcmask'], $pconfig['srcnot'],
+ $pconfig['srcbeginport'], $pconfig['srcendport']);
+
+ address_to_pconfig($a_1to1[$id]['destination'], $pconfig['dst'],
+ $pconfig['dstmask'], $pconfig['dstnot'],
+ $pconfig['dstbeginport'], $pconfig['dstendport']);
+
+ $pconfig['interface'] = $a_1to1[$id]['interface'];
+ if (!$pconfig['interface']) {
+ $pconfig['interface'] = "wan";
+ }
+
+ $pconfig['external'] = $a_1to1[$id]['external'];
+ $pconfig['descr'] = $a_1to1[$id]['descr'];
+ $pconfig['natreflection'] = $a_1to1[$id]['natreflection'];
+} else {
+ $pconfig['interface'] = "wan";
+}
+
+if (isset($_GET['dup'])) {
+ unset($id);
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+ /* run through $_POST items encoding HTML entities so that the user
+ * cannot think he is slick and perform a XSS attack on the unwilling
+ */
+ foreach ($_POST as $key => $value) {
+ $temp = str_replace(">", "", $value);
+ $newpost = htmlentities($temp);
+ if ($newpost <> $temp) {
+ $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."), $temp);
+ }
+ }
+
+ /* input validation */
+ $reqdfields = explode(" ", "interface external");
+ $reqdfieldsn = array(gettext("Interface"), gettext("External subnet"));
+ if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") {
+ $reqdfields[] = "src";
+ $reqdfieldsn[] = gettext("Source address");
+ }
+ if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") {
+ $reqdfields[] = "dst";
+ $reqdfieldsn[] = gettext("Destination address");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['external']) {
+ $_POST['external'] = trim($_POST['external']);
+ }
+ if ($_POST['src']) {
+ $_POST['src'] = trim($_POST['src']);
+ }
+ if ($_POST['dst']) {
+ $_POST['dst'] = trim($_POST['dst']);
+ }
+
+ if (is_specialnet($_POST['srctype'])) {
+ $_POST['src'] = $_POST['srctype'];
+ $_POST['srcmask'] = 0;
+ } else if ($_POST['srctype'] == "single") {
+ $_POST['srcmask'] = 32;
+ }
+ if (is_specialnet($_POST['dsttype'])) {
+ $_POST['dst'] = $_POST['dsttype'];
+ $_POST['dstmask'] = 0;
+ } else if ($_POST['dsttype'] == "single") {
+ $_POST['dstmask'] = 32;
+ } else if (is_ipaddr($_POST['dsttype'])) {
+ $_POST['dst'] = $_POST['dsttype'];
+ $_POST['dstmask'] = 32;
+ $_POST['dsttype'] = "single";
+ }
+
+ /* For external, user can enter only ip's */
+ if (($_POST['external'] && !is_ipaddr($_POST['external']))) {
+ $input_errors[] = gettext("A valid external subnet must be specified.");
+ }
+
+ /* For dst, if user enters an alias and selects "network" then disallow. */
+ if ($_POST['dsttype'] == "network" && is_alias($_POST['dst'])) {
+ $input_errors[] = gettext("You must specify single host or alias for alias entries.");
+ }
+
+ /* For src, user can enter only ip's or networks */
+ if (!is_specialnet($_POST['srctype'])) {
+ if (($_POST['src'] && !is_ipaddr($_POST['src']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid internal IP address."), $_POST['src']);
+ }
+ if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
+ $input_errors[] = gettext("A valid internal bit count must be specified.");
+ }
+ }
+
+ /* For dst, user can enter ip's, networks or aliases */
+ if (!is_specialnet($_POST['dsttype'])) {
+ if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
+ }
+ if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
+ $input_errors[] = gettext("A valid destination bit count must be specified.");
+ }
+ }
+
+ /* check for overlaps with other 1:1 */
+ foreach ($a_1to1 as $natent) {
+ if (isset($id) && ($a_1to1[$id]) && ($a_1to1[$id] === $natent)) {
+ continue;
+ }
+
+ if (check_subnets_overlap($_POST['internal'], $_POST['subnet'], $natent['internal'], $natent['subnet'])) {
+ //$input_errors[] = "Another 1:1 rule overlaps with the specified internal subnet.";
+ //break;
+ }
+ }
+
+ if (!$input_errors) {
+ $natent = array();
+
+ $natent['disabled'] = isset($_POST['disabled']) ? true:false;
+ $natent['external'] = $_POST['external'];
+ $natent['descr'] = $_POST['descr'];
+ $natent['interface'] = $_POST['interface'];
+
+ pconfig_to_address($natent['source'], $_POST['src'],
+ $_POST['srcmask'], $_POST['srcnot']);
+
+ pconfig_to_address($natent['destination'], $_POST['dst'],
+ $_POST['dstmask'], $_POST['dstnot']);
+
+ if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "disable") {
+ $natent['natreflection'] = $_POST['natreflection'];
+ } else {
+ unset($natent['natreflection']);
+ }
+
+ if (isset($id) && $a_1to1[$id]) {
+ $a_1to1[$id] = $natent;
+ } else {
+ if (is_numeric($after)) {
+ array_splice($a_1to1, $after+1, 0, array($natent));
+ } else {
+ $a_1to1[] = $natent;
+ }
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_1to1.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript">
+//<![CDATA[
+function typesel_change() {
+ switch (document.iform.srctype.selectedIndex) {
+ case 1: /* single */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.disabled = 0;
+ break;
+ default:
+ document.iform.src.value = "";
+ document.iform.src.disabled = 1;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ }
+ switch (document.iform.dsttype.selectedIndex) {
+ case 1: /* single */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.disabled = 0;
+ break;
+ default:
+ document.iform.dst.value = "";
+ document.iform.dst.disabled = 1;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ }
+}
+//]]>
+</script>
+
+<?php
+include("fbegin.inc");
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+?>
+<form action="firewall_nat_1to1_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat 1to1 edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit NAT 1:1 entry"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this rule"); ?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+<?php
+ foreach ($ifdisp as $if => $ifdesc) {
+ if (have_ruleint_access($if)) {
+ $interfaces[$if] = $ifdesc;
+ }
+ }
+
+ if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+ }
+
+ if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+ }
+
+ if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $interfaces["enc0"] = "IPsec";
+ }
+ }
+
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+
+ foreach ($interfaces as $iface => $ifacename):
+?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which interface this rule applies to"); ?>.<br />
+ <?=gettext("Hint: in most cases, you'll want to use WAN here"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("External subnet IP"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="external" type="text" class="formfld unknown" id="external" size="20" value="<?=htmlspecialchars($pconfig['external']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter the external (usually on a WAN) subnet's starting address for the 1:1 mapping. " .
+ "The subnet mask from the internal address below will be applied to this IP address."); ?><br />
+ <?=gettext("Hint: this is generally an address owned by the router itself on the selected interface."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IP"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="source">
+ <tr>
+ <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="srctype" class="formselect" onchange="typesel_change()">
+<?php
+ $sel = is_specialnet($pconfig['src']);
+?>
+ <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
+ <option value="single" <?php if ((($pconfig['srcmask'] == 32) || !isset($pconfig['srcmask'])) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>>
+ <?=gettext("Single host"); ?>
+ </option>
+ <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
+<?php
+ if (have_ruleint_access("pptp")):
+?>
+ <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
+<?php
+ endif;
+ if (have_ruleint_access("pppoe")):
+?>
+ <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
+<?php
+ endif;
+ if (have_ruleint_access("l2tp")):
+?>
+ <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
+<?php
+ endif;
+ foreach ($ifdisp as $ifent => $ifdesc):
+ if (have_ruleint_access($ifent)):
+?>
+ <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>>
+ <?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?>
+ </option>
+ <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc?> <?=gettext("address");?>
+ </option>
+<?php
+ endif;
+ endforeach;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="src" type="text" class="formfld" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
+ <select name="srcmask" class="formselect" id="srcmask">
+<?php
+ for ($i = 31; $i > 0; $i--):
+?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php
+ endfor;
+?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl"><?=gettext("Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size specified for the internal subnet will be applied to the external subnet."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="destination">
+ <tr>
+ <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="dsttype" class="formselect" onchange="typesel_change()">
+<?php
+ $sel = is_specialnet($pconfig['dst']); ?>
+ <option value="any" <?php if (empty($pconfig['dst']) || $pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
+ <option value="single" <?php if (($pconfig['dstmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>>
+ <?=gettext("Single host or alias"); ?>
+ </option>
+ <option value="network" <?php if (!$sel && !empty($pconfig['dst'])) echo "selected=\"selected\""; ?>>
+ <?=gettext("Network"); ?>
+ </option>
+<?php
+ if (have_ruleint_access("pptp")):
+?>
+ <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>>
+ <?=gettext("PPTP clients"); ?>
+ </option>
+<?php
+ endif;
+ if (have_ruleint_access("pppoe")):
+?>
+ <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>>
+ <?=gettext("PPPoE clients"); ?>
+ </option>
+<?php
+ endif;
+ if (have_ruleint_access("l2tp")):
+?>
+ <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>>
+ <?=gettext("L2TP clients"); ?>
+ </option>
+<?php
+ endif;
+
+ foreach ($ifdisp as $if => $ifdesc):
+ if (have_ruleint_access($if)):
+?>
+ <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?>
+ <?=gettext("net"); ?>
+ </option>
+ <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc;?> <?=gettext("address");?>
+ </option>
+<?php
+ endif;
+ endforeach;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="dst" type="text" autocomplete="off" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
+ /
+ <select name="dstmask" class="formselect" id="dstmask">
+<?php
+ for ($i = 31; $i > 0; $i--):
+?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php
+ endfor;
+?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl">
+ <?=gettext("The 1:1 mapping will only be used for connections to or from the specified destination."); ?><br />
+ <?=gettext("Hint: this is usually 'any'."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NAT reflection"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="natreflection" class="formselect">
+ <option value="default" <?php if ($pconfig['natreflection'] != "enable" && $pconfig['natreflection'] != "disable") echo "selected=\"selected\""; ?>>
+ <?=gettext("use system default"); ?>
+ </option>
+ <option value="enable" <?php if ($pconfig['natreflection'] == "enable") echo "selected=\"selected\""; ?>>
+ <?=gettext("enable"); ?>
+ </option>
+ <option value="disable" <?php if ($pconfig['natreflection'] == "disable") echo "selected=\"selected\""; ?>>
+ <?=gettext("disable"); ?>
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_1to1[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+ typesel_change();
+//]]>
+</script>
+<script type="text/javascript">
+//<![CDATA[
+ var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_edit.php b/src/usr/local/www/firewall_nat_edit.php
new file mode 100644
index 0000000..db8a174
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_edit.php
@@ -0,0 +1,1016 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-portforward-edit
+##|*NAME=Firewall: NAT: Port Forward: Edit page
+##|*DESCR=Allow access to the 'Firewall: NAT: Port Forward: Edit' page.
+##|*MATCH=firewall_nat_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("itemid.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat.php');
+}
+
+$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn");
+$ifdisp = get_configured_interface_with_descr();
+foreach ($ifdisp as $kif => $kdescr) {
+ $specialsrcdst[] = "{$kif}";
+ $specialsrcdst[] = "{$kif}ip";
+}
+
+if (!is_array($config['nat']['rule'])) {
+ $config['nat']['rule'] = array();
+}
+$a_nat = &$config['nat']['rule'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
+ $after = $_GET['after'];
+}
+if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
+ $after = $_POST['after'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+ $after = $_GET['dup'];
+}
+
+if (isset($id) && $a_nat[$id]) {
+ if (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created'])) {
+ $pconfig['created'] = $a_nat[$id]['created'];
+ }
+
+ if (isset($a_nat[$id]['updated']) && is_array($a_nat[$id]['updated'])) {
+ $pconfig['updated'] = $a_nat[$id]['updated'];
+ }
+
+ $pconfig['disabled'] = isset($a_nat[$id]['disabled']);
+ $pconfig['nordr'] = isset($a_nat[$id]['nordr']);
+ address_to_pconfig($a_nat[$id]['source'], $pconfig['src'],
+ $pconfig['srcmask'], $pconfig['srcnot'],
+ $pconfig['srcbeginport'], $pconfig['srcendport']);
+
+ address_to_pconfig($a_nat[$id]['destination'], $pconfig['dst'],
+ $pconfig['dstmask'], $pconfig['dstnot'],
+ $pconfig['dstbeginport'], $pconfig['dstendport']);
+
+ $pconfig['proto'] = $a_nat[$id]['protocol'];
+ $pconfig['localip'] = $a_nat[$id]['target'];
+ $pconfig['localbeginport'] = $a_nat[$id]['local-port'];
+ $pconfig['descr'] = $a_nat[$id]['descr'];
+ $pconfig['interface'] = $a_nat[$id]['interface'];
+ $pconfig['associated-rule-id'] = $a_nat[$id]['associated-rule-id'];
+ $pconfig['nosync'] = isset($a_nat[$id]['nosync']);
+ $pconfig['natreflection'] = $a_nat[$id]['natreflection'];
+
+ if (!$pconfig['interface']) {
+ $pconfig['interface'] = "wan";
+ }
+} else {
+ $pconfig['interface'] = "wan";
+ $pconfig['src'] = "any";
+ $pconfig['srcbeginport'] = "any";
+ $pconfig['srcendport'] = "any";
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+}
+
+/* run through $_POST items encoding HTML entities so that the user
+ * cannot think he is slick and perform a XSS attack on the unwilling
+ */
+unset($input_errors);
+foreach ($_POST as $key => $value) {
+ $temp = $value;
+ $newpost = htmlentities($temp);
+ if ($newpost <> $temp) {
+ $input_errors[] = sprintf(gettext("Invalid characters detected %s. Please remove invalid characters and save again."), $temp);
+ }
+}
+
+if ($_POST) {
+
+ if (strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") {
+ if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) {
+ $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']);
+ }
+ if ($_POST['srcendport_cust'] && !$_POST['srcendport']) {
+ $_POST['srcendport'] = trim($_POST['srcendport_cust']);
+ }
+
+ if ($_POST['srcbeginport'] == "any") {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ } else {
+ if (!$_POST['srcendport']) {
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ }
+ }
+ if ($_POST['srcendport'] == "any") {
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ }
+
+ if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) {
+ $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']);
+ }
+ if ($_POST['dstendport_cust'] && !$_POST['dstendport']) {
+ $_POST['dstendport'] = trim($_POST['dstendport_cust']);
+ }
+
+ if ($_POST['dstbeginport'] == "any") {
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ } else {
+ if (!$_POST['dstendport']) {
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ }
+ }
+ if ($_POST['dstendport'] == "any") {
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ }
+
+ if ($_POST['localbeginport_cust'] && !$_POST['localbeginport']) {
+ $_POST['localbeginport'] = trim($_POST['localbeginport_cust']);
+ }
+
+ /* Make beginning port end port if not defined and endport is */
+ if (!$_POST['srcbeginport'] && $_POST['srcendport']) {
+ $_POST['srcbeginport'] = $_POST['srcendport'];
+ }
+ if (!$_POST['dstbeginport'] && $_POST['dstendport']) {
+ $_POST['dstbeginport'] = $_POST['dstendport'];
+ }
+ } else {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ }
+
+ if (is_specialnet($_POST['srctype'])) {
+ $_POST['src'] = $_POST['srctype'];
+ $_POST['srcmask'] = 0;
+ } else if ($_POST['srctype'] == "single") {
+ $_POST['srcmask'] = 32;
+ }
+ if (is_specialnet($_POST['dsttype'])) {
+ $_POST['dst'] = $_POST['dsttype'];
+ $_POST['dstmask'] = 0;
+ } else if ($_POST['dsttype'] == "single") {
+ $_POST['dstmask'] = 32;
+ } else if (is_ipaddr($_POST['dsttype'])) {
+ $_POST['dst'] = $_POST['dsttype'];
+ $_POST['dstmask'] = 32;
+ $_POST['dsttype'] = "single";
+ }
+
+ $pconfig = $_POST;
+
+ /* input validation */
+ if (strtoupper($_POST['proto']) == "TCP" or strtoupper($_POST['proto']) == "UDP" or strtoupper($_POST['proto']) == "TCP/UDP") {
+ $reqdfields = explode(" ", "interface proto dstbeginport dstendport");
+ $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"), gettext("Destination port from"), gettext("Destination port to"));
+ } else {
+ $reqdfields = explode(" ", "interface proto");
+ $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"));
+ }
+
+ if ($_POST['srctype'] == "single" || $_POST['srctype'] == "network") {
+ $reqdfields[] = "src";
+ $reqdfieldsn[] = gettext("Source address");
+ }
+ if ($_POST['dsttype'] == "single" || $_POST['dsttype'] == "network") {
+ $reqdfields[] = "dst";
+ $reqdfieldsn[] = gettext("Destination address");
+ }
+ if (!isset($_POST['nordr'])) {
+ $reqdfields[] = "localip";
+ $reqdfieldsn[] = gettext("Redirect target IP");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$_POST['srcbeginport']) {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ }
+ if (!$_POST['dstbeginport']) {
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ }
+
+ if ($_POST['src']) {
+ $_POST['src'] = trim($_POST['src']);
+ }
+ if ($_POST['dst']) {
+ $_POST['dst'] = trim($_POST['dst']);
+ }
+ if ($_POST['localip']) {
+ $_POST['localip'] = trim($_POST['localip']);
+ }
+
+ if (!isset($_POST['nordr']) && ($_POST['localip'] && !is_ipaddroralias($_POST['localip']))) {
+ $input_errors[] = sprintf(gettext("\"%s\" is not a valid redirect target IP address or host alias."), $_POST['localip']);
+ }
+
+ if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginport']);
+ }
+ if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcendport']);
+ }
+ if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstbeginport']);
+ }
+ if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstendport']);
+ }
+
+ if ((strtoupper($_POST['proto']) == "TCP" || strtoupper($_POST['proto']) == "UDP" || strtoupper($_POST['proto']) == "TCP/UDP") && (!isset($_POST['nordr']) && !is_portoralias($_POST['localbeginport']))) {
+ $input_errors[] = sprintf(gettext("A valid redirect target port must be specified. It must be a port alias or integer between 1 and 65535."), $_POST['localbeginport']);
+ }
+
+ /* if user enters an alias and selects "network" then disallow. */
+ if (($_POST['srctype'] == "network" && is_alias($_POST['src'])) ||
+ ($_POST['dsttype'] == "network" && is_alias($_POST['dst']))) {
+ $input_errors[] = gettext("You must specify single host or alias for alias entries.");
+ }
+
+ if (!is_specialnet($_POST['srctype'])) {
+ if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']);
+ }
+ if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
+ $input_errors[] = gettext("A valid source bit count must be specified.");
+ }
+ }
+ if (!is_specialnet($_POST['dsttype'])) {
+ if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
+ }
+ if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
+ $input_errors[] = gettext("A valid destination bit count must be specified.");
+ }
+ }
+
+ if ($_POST['srcbeginport'] > $_POST['srcendport']) {
+ /* swap */
+ $tmp = $_POST['srcendport'];
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ $_POST['srcbeginport'] = $tmp;
+ }
+ if ($_POST['dstbeginport'] > $_POST['dstendport']) {
+ /* swap */
+ $tmp = $_POST['dstendport'];
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ $_POST['dstbeginport'] = $tmp;
+ }
+
+ if (!$input_errors) {
+ if (!isset($_POST['nordr']) && ($_POST['dstendport'] - $_POST['dstbeginport'] + $_POST['localbeginport']) > 65535) {
+ $input_errors[] = gettext("The target port range must be an integer between 1 and 65535.");
+ }
+ }
+
+ /* check for overlaps */
+ foreach ($a_nat as $natent) {
+ if (isset($id) && ($a_nat[$id]) && ($a_nat[$id] === $natent)) {
+ continue;
+ }
+ if ($natent['interface'] != $_POST['interface']) {
+ continue;
+ }
+ if ($natent['destination']['address'] != $_POST['dst']) {
+ continue;
+ }
+ if (($natent['proto'] != $_POST['proto']) && ($natent['proto'] != "tcp/udp") && ($_POST['proto'] != "tcp/udp")) {
+ continue;
+ }
+
+ list($begp, $endp) = explode("-", $natent['destination']['port']);
+ if (!$endp) {
+ $endp = $begp;
+ }
+
+ if (!((($_POST['dstbeginport'] < $begp) && ($_POST['dstendport'] < $begp)) ||
+ (($_POST['dstbeginport'] > $endp) && ($_POST['dstendport'] > $endp)))) {
+ $input_errors[] = gettext("The destination port range overlaps with an existing entry.");
+ break;
+ }
+ }
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/input_validation");
+
+ if (!$input_errors) {
+ $natent = array();
+
+ $natent['disabled'] = isset($_POST['disabled']) ? true:false;
+ $natent['nordr'] = isset($_POST['nordr']) ? true:false;
+
+ if ($natent['nordr']) {
+ $_POST['associated-rule-id'] = '';
+ $_POST['filter-rule-association'] = '';
+ }
+
+ pconfig_to_address($natent['source'], $_POST['src'],
+ $_POST['srcmask'], $_POST['srcnot'],
+ $_POST['srcbeginport'], $_POST['srcendport']);
+
+ pconfig_to_address($natent['destination'], $_POST['dst'],
+ $_POST['dstmask'], $_POST['dstnot'],
+ $_POST['dstbeginport'], $_POST['dstendport']);
+
+ $natent['protocol'] = $_POST['proto'];
+
+ if (!$natent['nordr']) {
+ $natent['target'] = $_POST['localip'];
+ $natent['local-port'] = $_POST['localbeginport'];
+ }
+ $natent['interface'] = $_POST['interface'];
+ $natent['descr'] = $_POST['descr'];
+ $natent['associated-rule-id'] = $_POST['associated-rule-id'];
+
+ if ($_POST['filter-rule-association'] == "pass") {
+ $natent['associated-rule-id'] = "pass";
+ }
+
+ if ($_POST['nosync'] == "yes") {
+ $natent['nosync'] = true;
+ } else {
+ unset($natent['nosync']);
+ }
+
+ if ($_POST['natreflection'] == "enable" || $_POST['natreflection'] == "purenat" || $_POST['natreflection'] == "disable") {
+ $natent['natreflection'] = $_POST['natreflection'];
+ } else {
+ unset($natent['natreflection']);
+ }
+
+ // If we used to have an associated filter rule, but no-longer should have one
+ if (!empty($a_nat[$id]) && (empty($natent['associated-rule-id']) || $natent['associated-rule-id'] != $a_nat[$id]['associated-rule-id'])) {
+ // Delete the previous rule
+ delete_id($a_nat[$id]['associated-rule-id'], $config['filter']['rule']);
+ mark_subsystem_dirty('filter');
+ }
+
+ $need_filter_rule = false;
+ // Updating a rule with a filter rule associated
+ if (!empty($natent['associated-rule-id'])) {
+ $need_filter_rule = true;
+ }
+ // Create a rule or if we want to create a new one
+ if ($natent['associated-rule-id'] == 'new') {
+ $need_filter_rule = true;
+ unset($natent['associated-rule-id']);
+ $_POST['filter-rule-association']='add-associated';
+ }
+ // If creating a new rule, where we want to add the filter rule, associated or not
+ else if (isset($_POST['filter-rule-association']) &&
+ ($_POST['filter-rule-association'] == 'add-associated' ||
+ $_POST['filter-rule-association'] == 'add-unassociated')) {
+ $need_filter_rule = true;
+ }
+
+ if ($need_filter_rule == true) {
+
+ /* auto-generate a matching firewall rule */
+ $filterent = array();
+ unset($filterentid);
+ // If a rule already exists, load it
+ if (!empty($natent['associated-rule-id'])) {
+ $filterentid = get_id($natent['associated-rule-id'], $config['filter']['rule']);
+ if ($filterentid === false) {
+ $filterent['associated-rule-id'] = $natent['associated-rule-id'];
+ } else {
+ $filterent =& $config['filter']['rule'][$filterentid];
+ }
+ }
+ pconfig_to_address($filterent['source'], $_POST['src'],
+ $_POST['srcmask'], $_POST['srcnot'],
+ $_POST['srcbeginport'], $_POST['srcendport']);
+
+ // Update interface, protocol and destination
+ $filterent['interface'] = $_POST['interface'];
+ $filterent['protocol'] = $_POST['proto'];
+ $filterent['destination']['address'] = $_POST['localip'];
+
+ $dstpfrom = $_POST['localbeginport'];
+ $dstpto = $dstpfrom + $_POST['dstendport'] - $_POST['dstbeginport'];
+
+ if ($dstpfrom == $dstpto) {
+ $filterent['destination']['port'] = $dstpfrom;
+ } else {
+ $filterent['destination']['port'] = $dstpfrom . "-" . $dstpto;
+ }
+
+ /*
+ * Our firewall filter description may be no longer than
+ * 63 characters, so don't let it be.
+ */
+ $filterent['descr'] = substr("NAT " . $_POST['descr'], 0, 62);
+
+ // If this is a new rule, create an ID and add the rule
+ if ($_POST['filter-rule-association'] == 'add-associated') {
+ $filterent['associated-rule-id'] = $natent['associated-rule-id'] = get_unique_id();
+ $filterent['created'] = make_config_revision_entry(null, gettext("NAT Port Forward"));
+ $config['filter']['rule'][] = $filterent;
+ }
+
+ mark_subsystem_dirty('filter');
+ }
+
+ if (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created'])) {
+ $natent['created'] = $a_nat[$id]['created'];
+ }
+
+ $natent['updated'] = make_config_revision_entry();
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_write_config");
+
+ // Update the NAT entry now
+ if (isset($id) && $a_nat[$id]) {
+ $a_nat[$id] = $natent;
+ } else {
+ $natent['created'] = make_config_revision_entry();
+ if (is_numeric($after)) {
+ array_splice($a_nat, $after+1, 0, array($natent));
+ } else {
+ $a_nat[] = $natent;
+ }
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+
+ header("Location: firewall_nat.php");
+ exit;
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Port Forward"), gettext("Edit"));
+include("head.inc");
+
+?>
+<link type="text/css" rel="stylesheet" href="/javascript/chosen/chosen.css" />
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
+<?php
+include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="firewall_nat_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Redirect entry"); ?></td>
+ </tr>
+<?php
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/htmlphpearly");
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this rule"); ?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("No RDR (NOT)"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" name="nordr" id="nordr" onclick="nordr_change();" <?php if ($pconfig['nordr']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl"><?=gettext("Enabling this option will disable redirection for traffic matching this rule."); ?>
+ <br /><?=gettext("Hint: this option is rarely needed, don't use this unless you know what you're doing."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect" onchange="dst_change(this.value, iface_old, document.iform.dsttype.value);iface_old = document.iform.interface.value;typesel_change();">
+ <?php
+ $iflist = get_configured_interface_with_descr(false, true);
+ // Allow extending of the firewall edit interfaces
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/pre_interfaces_edit");
+ foreach ($iflist as $if => $ifdesc) {
+ if (have_ruleint_access($if)) {
+ $interfaces[$if] = $ifdesc;
+ }
+ }
+
+ if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+ }
+
+ if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+ }
+
+ if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $interfaces["enc0"] = "IPsec";
+ }
+ }
+
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which interface this rule applies to."); ?><br />
+ <?=gettext("Hint: in most cases, you'll want to use WAN here."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="proto" class="formselect" onchange="proto_change(); check_for_aliases();">
+ <?php
+ $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP PIM OSPF");
+ foreach ($protocols as $proto): ?>
+ <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose which IP protocol this rule should match."); ?><br />
+ <?=gettext("Hint: in most cases, you should specify"); ?> <em><?=gettext("TCP"); ?></em> &nbsp;<?=gettext("here."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr id="showadvancedboxsrc" name="showadvancedboxsrc">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="button" onclick="show_source()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show source address and port range"); ?>
+ </td>
+ </tr>
+ <tr style="display: none;" id="srctable" name="srctable">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="type">
+ <tr>
+ <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="srctype" class="formselect" onchange="typesel_change()">
+<?php
+ $sel = is_specialnet($pconfig['src']); ?>
+ <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
+ <option value="single" <?php if (($pconfig['srcmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>><?=gettext("Single host or alias"); ?></option>
+ <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
+ <?php if (have_ruleint_access("pptp")): ?>
+ <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("pppoe")): ?>
+ <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("l2tp")): ?>
+ <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
+ <?php endif; ?>
+<?php
+ foreach ($ifdisp as $ifent => $ifdesc):
+ if (have_ruleint_access($ifent)):
+?>
+ <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?></option>
+ <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc?> <?=gettext("address");?>
+ </option>
+<?php
+ endif;
+ endforeach;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input autocomplete='off' name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
+ <select name="srcmask" class="formselect" id="srcmask">
+<?php for ($i = 31; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable" name="sprtable">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source port range"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="source port range">
+ <tr>
+ <td><?=gettext("from:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="srcbeginport" class="formselect" onchange="src_rep_change();ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['srcbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any"); ?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcbeginport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
+<?php endforeach; ?>
+ </select>
+ <input autocomplete='off' class="formfldalias" name="srcbeginport_cust" id="srcbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcbeginport']) echo htmlspecialchars($pconfig['srcbeginport']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("to:"); ?></td>
+ <td>
+ <select name="srcendport" class="formselect" onchange="ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['srcendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any"); ?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
+<?php endforeach; ?>
+ </select>
+ <input autocomplete='off' class="formfldalias" name="srcendport_cust" id="srcendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcendport']) echo htmlspecialchars($pconfig['srcendport']); ?>" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl"><?=gettext("Specify the source port or port range for this rule"); ?>. <b><?=gettext("This is usually"); ?> <em><?=gettext("random"); ?></em> <?=gettext("and almost never equal to the destination port range (and should usually be 'any')"); ?>.</b> <br /> <?=gettext("Hint: you can leave the"); ?> <em>'<?=gettext("to"); ?>'</em> <?=gettext("field empty if you only want to filter a single port."); ?></span><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="type">
+ <tr>
+ <td><?=gettext("Type:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="dsttype" class="formselect" onchange="typesel_change()">
+ <?php $sel = is_specialnet($pconfig['dst']); ?>
+ <option value="any" <?php if ($pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any"); ?></option>
+ <option value="single" <?php if (($pconfig['dstmask'] == 32) && !$sel) { echo "selected=\"selected\""; $sel = 1; } ?>><?=gettext("Single host or alias"); ?></option>
+ <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
+ <option value="(self)" <?PHP if ($pconfig['dst'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
+ <?php if (have_ruleint_access("pptp")): ?>
+ <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients"); ?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("pppoe")): ?>
+ <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients"); ?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("l2tp")): ?>
+ <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients"); ?></option>
+ <?php endif; ?>
+
+<?php foreach ($ifdisp as $if => $ifdesc):
+ if (have_ruleint_access($if)):
+?>
+ <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net"); ?></option>
+ <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc;?> <?=gettext("address");?>
+ </option>
+<?php
+ endif;
+ endforeach;
+?>
+
+<?php if (is_array($config['virtualip']['vip'])):
+ foreach ($config['virtualip']['vip'] as $sn):
+ if (isset($sn['noexpand'])) {
+ continue;
+ }
+ if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
+ $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
+ $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
+ $len = $end - $start;
+ for ($i = 0; $i <= $len; $i++):
+ $snip = long2ip32($start+$i);
+?>
+ <option value="<?=$snip;?>" <?php if ($snip == $pconfig['dst']) echo "selected=\"selected\""; ?>><?=htmlspecialchars("{$snip} ({$sn['descr']})");?></option>
+<?php endfor;
+ else:
+?>
+ <option value="<?=$sn['subnet'];?>" <?php if ($sn['subnet'] == $pconfig['dst']) echo "selected=\"selected\""; ?>><?=htmlspecialchars("{$sn['subnet']} ({$sn['descr']})");?></option>
+<?php endif;
+ endforeach;
+ endif;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input autocomplete='off' name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
+ /
+ <select name="dstmask" class="formselect" id="dstmask">
+<?php
+ for ($i = 31; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="dprtr" name="dprtr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination port range"); ?> </td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="destination port range">
+ <tr>
+ <td><?=gettext("from:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="dstbeginport" id="dstbeginport" class="formselect" onchange="dst_rep_change();ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+<?php $bfound = 0;
+ foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstbeginport']) { echo "selected=\"selected\""; $bfound = 1; }?>><?=htmlspecialchars($wkportdesc);?></option>
+<?php endforeach; ?>
+ </select>
+ <input autocomplete='off' class="formfldalias" name="dstbeginport_cust" id="dstbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstbeginport']) echo htmlspecialchars($pconfig['dstbeginport']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("to:"); ?></td>
+ <td>
+ <select name="dstendport" id="dstendport" class="formselect" onchange="ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+<?php $bfound = 0;
+ foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars($wkportdesc);?></option>
+<?php endforeach; ?>
+ </select>
+ <input autocomplete='off' class="formfldalias" name="dstendport_cust" id="dstendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstendport']) echo htmlspecialchars($pconfig['dstendport']); ?>" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Specify the port or port range for the destination of the packet for this mapping."); ?>
+ <br />
+ <?=gettext("Hint: you can leave the"); ?> <em>'<?=gettext("to"); ?>'</em> <?=gettext("field empty if you only want to map a single port"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr name="localiptable" id="localiptable">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Redirect target IP"); ?></td>
+ <td width="78%" class="vtable">
+ <input autocomplete='off' name="localip" type="text" class="formfldalias" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter the internal IP address of the server on which you want to map the ports."); ?>
+ <br />
+ <?=gettext("e.g."); ?>
+ <em>192.168.1.12</em>
+ </span>
+ </td>
+ </tr>
+ <tr name="lprtr" id="lprtr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Redirect target port"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="localbeginport" id="localbeginport" class="formselect" onchange="ext_change();check_for_aliases();">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <?php
+ $bfound = 0;
+ foreach ($wkports as $wkport => $wkportdesc):
+ ?>
+ <option value="<?=$wkport;?>"
+ <?php if ($wkport == $pconfig['localbeginport']) {
+ echo "selected=\"selected\"";
+ $bfound = 1;
+ }?>>
+ <?=htmlspecialchars($wkportdesc);?>
+ </option>
+ <?php endforeach; ?>
+ </select> <input onchange="check_for_aliases();" autocomplete='off' class="formfldalias" name="localbeginport_cust" id="localbeginport_cust" type="text" size="5" value="<?php if (!$bfound) echo htmlspecialchars($pconfig['localbeginport']); ?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Specify the port on the machine with the " .
+ "IP address entered above. In case of a port range, specify " .
+ "the beginning port of the range (the end port will be calculated " .
+ "automatically)."); ?><br />
+ <?=gettext("Hint: this is usually identical to the 'from' port above"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="yes" name="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
+ <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NAT reflection"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="natreflection" class="formselect">
+ <option value="default" <?php if ($pconfig['natreflection'] != "enable" && $pconfig['natreflection'] != "purenat" && $pconfig['natreflection'] != "disable") echo "selected=\"selected\""; ?>><?=gettext("Use system default"); ?></option>
+ <option value="enable" <?php if ($pconfig['natreflection'] == "enable") echo "selected=\"selected\""; ?>><?=gettext("Enable (NAT + Proxy)"); ?></option>
+ <option value="purenat" <?php if ($pconfig['natreflection'] == "purenat") echo "selected=\"selected\""; ?>><?=gettext("Enable (Pure NAT)"); ?></option>
+ <option value="disable" <?php if ($pconfig['natreflection'] == "disable") echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <?php if (isset($id) && $a_nat[$id] && (!isset($_GET['dup']) || !is_numericint($_GET['dup']))): ?>
+ <tr name="assoctable" id="assoctable">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Filter rule association"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="associated-rule-id">
+ <option value=""><?=gettext("None"); ?></option>
+ <option value="pass" <?php if ($pconfig['associated-rule-id'] == "pass") echo " selected=\"selected\""; ?>><?=gettext("Pass"); ?></option>
+ <?php
+ $linkedrule = "";
+ if (is_array($config['filter']['rule'])) {
+ filter_rules_sort();
+ foreach ($config['filter']['rule'] as $filter_id => $filter_rule) {
+ if (isset($filter_rule['associated-rule-id'])) {
+ echo "<option value=\"{$filter_rule['associated-rule-id']}\"";
+ if ($filter_rule['associated-rule-id'] == $pconfig['associated-rule-id']) {
+ echo " selected=\"selected\"";
+ $linkedrule = "<br /><a href=\"firewall_rules_edit.php?id={$filter_id}\">" . gettext("View the filter rule") . "</a><br />";
+ }
+ echo ">". htmlspecialchars('Rule ' . $filter_rule['descr']) . "</option>\n";
+ }
+ }
+ }
+ if (isset($pconfig['associated-rule-id'])) {
+ echo "<option value=\"new\">" . gettext("Create new associated filter rule") . "</option>\n";
+ }
+ echo "</select>\n";
+ echo $linkedrule;
+ ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if ((!(isset($id) && $a_nat[$id])) || (isset($_GET['dup']) && is_numericint($_GET['dup']))): ?>
+ <tr name="assoctable" id="assoctable">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Filter rule association"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="filter-rule-association" id="filter-rule-association">
+ <option value=""><?=gettext("None"); ?></option>
+ <option value="add-associated" selected="selected"><?=gettext("Add associated filter rule"); ?></option>
+ <option value="add-unassociated"><?=gettext("Add unassociated filter rule"); ?></option>
+ <option value="pass"><?=gettext("Pass"); ?></option>
+ </select>
+ <br /><br /><?=gettext("NOTE: The \"pass\" selection does not work properly with Multi-WAN. It will only work on an interface containing the default gateway.")?>
+ </td>
+ </tr>
+ <?php endif; ?>
+<?php
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_nat/htmlphplate");
+?>
+<?php
+ $has_created_time = (isset($a_nat[$id]['created']) && is_array($a_nat[$id]['created']));
+ $has_updated_time = (isset($a_nat[$id]['updated']) && is_array($a_nat[$id]['updated']));
+?>
+ <?php if ($has_created_time || $has_updated_time): ?>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
+ </tr>
+ <?php if ($has_created_time): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_nat[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_nat[$id]['created']['username'] ?></strong>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if ($has_updated_time): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_nat[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_nat[$id]['updated']['username'] ?></strong>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_nat[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+ ext_change();
+ dst_change(document.iform.interface.value,'<?=htmlspecialchars($pconfig['interface'])?>','<?=htmlspecialchars($pconfig['dst'])?>');
+ var iface_old = document.iform.interface.value;
+ typesel_change();
+ proto_change();
+ <?php if ($pconfig['srcnot'] || $pconfig['src'] != "any" || $pconfig['srcbeginport'] != "any" || $pconfig['srcendport'] != "any"): ?>
+ show_source();
+ <?php endif; ?>
+ nordr_change();
+//]]>
+</script>
+<script type="text/javascript">
+//<![CDATA[
+ var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
+ var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
+
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("localip"), new StateSuggestions(addressarray));
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
+ var oTextbox3 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
+ var oTextbox4 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox5 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
+ var oTextbox6 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox7 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
+ var oTextbox8 = new AutoSuggestControl(document.getElementById("localbeginport_cust"), new StateSuggestions(customarray));
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_npt.php b/src/usr/local/www/firewall_nat_npt.php
new file mode 100644
index 0000000..003bd88
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_npt.php
@@ -0,0 +1,195 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_npt.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-npt
+##|*NAME=Firewall: NAT: NPT page
+##|*DESCR=Allow access to the 'Firewall: NAT: NPT' page.
+##|*MATCH=firewall_nat_npt.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['nat']['npt'])) {
+ $config['nat']['npt'] = array();
+}
+$a_npt = &$config['nat']['npt'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if ($retval == 0) {
+ clear_subsystem_dirty('natconf');
+ clear_subsystem_dirty('filter');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_npt[$_GET['id']]) {
+ unset($a_npt[$_GET['id']]);
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_npt.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("NPt"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_nat_npt.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('natconf')): ?>
+<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat npt">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
+ $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
+ $tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
+ $tab_array[] = array(gettext("NPt"), true, "firewall_nat_npt.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("External Prefix"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Internal prefix"); ?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $textse = "</span>";
+
+ $i = 0;
+ foreach ($a_npt as $natent):
+
+ if (isset($natent['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ } else {
+ $textss = "<span>";
+ }
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ if (!$natent['interface']) {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
+ } else {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
+ }
+ echo $textse;
+?>
+ </td>
+<?php
+ $source_net = pprint_address($natent['source']);
+ $source_cidr = strstr($source_net, '/');
+ $destination_net = pprint_address($natent['destination']);
+ $destination_cidr = strstr($destination_net, '/');
+?>
+ <td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
+ <?php echo $textss . $destination_net . $textse; ?>
+ </td>
+ <td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
+ <?php echo $textss . $source_net . $textse; ?>
+ </td>
+ <td class="listbg" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?=htmlspecialchars($natent['descr']);?>&nbsp;
+ <?=$textse;?>
+ </td>
+ <td class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td valign="middle"><a href="firewall_nat_npt_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>" alt="edit" /></a></td>
+ <td valign="middle"><a href="firewall_nat_npt.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_npt_edit.php b/src/usr/local/www/firewall_nat_npt_edit.php
new file mode 100644
index 0000000..addddd2
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_npt_edit.php
@@ -0,0 +1,311 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_npt_edit.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-npt-edit
+##|*NAME=Firewall: NAT: NPt: Edit page
+##|*DESCR=Allow access to the 'Firewall: NAT: NPt: Edit' page.
+##|*MATCH=firewall_nat_npt_edit.php*
+##|-PRIV
+
+function natnptcmp($a, $b) {
+ return ipcmp($a['external'], $b['external']);
+}
+
+function nat_npt_rules_sort() {
+ global $g, $config;
+
+ if (!is_array($config['nat']['npt'])) {
+ return;
+ }
+
+ usort($config['nat']['npt'], "natnptcmp");
+}
+
+require("guiconfig.inc");
+require_once("interfaces.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_npt.php');
+}
+
+$ifdisp = get_configured_interface_with_descr();
+foreach ($ifdisp as $kif => $kdescr) {
+ $specialsrcdst[] = "{$kif}";
+ $specialsrcdst[] = "{$kif}ip";
+}
+
+if (!is_array($config['nat']['npt'])) {
+ $config['nat']['npt'] = array();
+}
+$a_npt = &$config['nat']['npt'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_npt[$id]) {
+ $pconfig['disabled'] = isset($a_npt[$id]['disabled']);
+
+ address_to_pconfig($a_npt[$id]['source'], $pconfig['src'],
+ $pconfig['srcmask'], $pconfig['srcnot'],
+ $pconfig['srcbeginport'], $pconfig['srcendport']);
+
+ address_to_pconfig($a_npt[$id]['destination'], $pconfig['dst'],
+ $pconfig['dstmask'], $pconfig['dstnot'],
+ $pconfig['dstbeginport'], $pconfig['dstendport']);
+
+ $pconfig['interface'] = $a_npt[$id]['interface'];
+ if (!$pconfig['interface']) {
+ $pconfig['interface'] = "wan";
+ }
+
+ $pconfig['external'] = $a_npt[$id]['external'];
+ $pconfig['descr'] = $a_npt[$id]['descr'];
+} else {
+ $pconfig['interface'] = "wan";
+}
+
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "interface");
+ $reqdfieldsn = array(gettext("Interface"));
+ $reqdfields[] = "src";
+ $reqdfieldsn[] = gettext("Source prefix");
+ $reqdfields[] = "dst";
+ $reqdfieldsn[] = gettext("Destination prefix");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$input_errors) {
+ $natent = array();
+
+ $natent['disabled'] = isset($_POST['disabled']) ? true:false;
+ $natent['descr'] = $_POST['descr'];
+ $natent['interface'] = $_POST['interface'];
+
+ if ($_POST['src']) {
+ $_POST['src'] = trim($_POST['src']);
+ }
+ if ($_POST['dst']) {
+ $_POST['dst'] = trim($_POST['dst']);
+ }
+
+ pconfig_to_address($natent['source'], $_POST['src'], $_POST['srcmask'], $_POST['srcnot']);
+
+ pconfig_to_address($natent['destination'], $_POST['dst'], $_POST['dstmask'], $_POST['dstnot']);
+
+ if (isset($id) && $a_npt[$id]) {
+ $a_npt[$id] = $natent;
+ } else {
+ $a_npt[] = $natent;
+ }
+ nat_npt_rules_sort();
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+
+ header("Location: firewall_nat_npt.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("NPt"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="firewall_nat_npt_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall nat npt edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit NAT NPt entry"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this rule"); ?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ foreach ($ifdisp as $if => $ifdesc) {
+ if (have_ruleint_access($if)) {
+ $interfaces[$if] = $ifdesc;
+ }
+ }
+
+ if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+ }
+
+ if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+ }
+
+ if ($config['pppoe']['mode'] == "server") {
+ if (have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+ }
+
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $interfaces["enc0"] = "IPsec";
+ }
+ }
+
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+
+ foreach ($interfaces as $iface => $ifacename):
+ ?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which interface this rule applies to"); ?>.<br />
+ <?=gettext("Hint: in most cases, you'll want to use WAN here"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IPv6 Prefix"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="internal">
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
+ <select name="srcmask" class="formselect" id="srcmask">
+<?php for ($i = 128; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl"><?=gettext("Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The prefix size specified for the internal IPv6 prefix will be applied to the external prefix.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination IPv6 Prefix"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not"); ?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match."); ?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="destination">
+ <tr>
+ <td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
+ /
+ <select name="dstmask" class="formselect" id="dstmask">
+<?php
+ for ($i = 128; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl"><?=gettext("Enter the Global Unicast routable IPv6 prefix here"); ?><br /></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_npt[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_out.php b/src/usr/local/www/firewall_nat_out.php
new file mode 100644
index 0000000..d560abe
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_out.php
@@ -0,0 +1,695 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_out.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-outbound
+##|*NAME=Firewall: NAT: Outbound page
+##|*DESCR=Allow access to the 'Firewall: NAT: Outbound' page.
+##|*MATCH=firewall_nat_out.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+global $FilterIflist;
+global $GatewaysList;
+
+if (!is_array($config['nat']['outbound'])) {
+ $config['nat']['outbound'] = array();
+}
+
+if (!is_array($config['nat']['outbound']['rule'])) {
+ $config['nat']['outbound']['rule'] = array();
+}
+
+$a_out = &$config['nat']['outbound']['rule'];
+
+if (!isset($config['nat']['outbound']['mode'])) {
+ $config['nat']['outbound']['mode'] = "automatic";
+}
+
+$mode = $config['nat']['outbound']['mode'];
+
+if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ if ($retval == 0) {
+ clear_subsystem_dirty('natconf');
+ clear_subsystem_dirty('filter');
+ }
+}
+
+if (isset($_POST['save']) && $_POST['save'] == "Save") {
+ /* mutually exclusive settings - if user wants advanced NAT, we don't generate automatic rules */
+ if ($_POST['mode'] == "advanced" && ($mode == "automatic" || $mode == "hybrid")) {
+ /*
+ * user has enabled advanced outbound NAT and doesn't have rules
+ * lets automatically create entries
+ * for all of the interfaces to make life easier on the pip-o-chap
+ */
+ if (empty($FilterIflist)) {
+ filter_generate_optcfg_array();
+ }
+ if (empty($GatewaysList)) {
+ filter_generate_gateways();
+ }
+ $tonathosts = filter_nat_rules_automatic_tonathosts(true);
+ $automatic_rules = filter_nat_rules_outbound_automatic("");
+
+ foreach ($tonathosts as $tonathost) {
+ foreach ($automatic_rules as $natent) {
+ $natent['source']['network'] = $tonathost['subnet'];
+ $natent['descr'] .= sprintf(gettext(' - %1$s to %2$s'),
+ $tonathost['descr'],
+ convert_real_interface_to_friendly_descr($natent['interface']));
+ $natent['created'] = make_config_revision_entry(null, gettext("Manual Outbound NAT Switch"));
+
+ /* Try to detect already auto created rules and avoid duplicating them */
+ $found = false;
+ foreach ($a_out as $rule) {
+ if ($rule['interface'] == $natent['interface'] &&
+ $rule['source']['network'] == $natent['source']['network'] &&
+ $rule['dstport'] == $natent['dstport'] &&
+ $rule['target'] == $natent['target'] &&
+ $rule['descr'] == $natent['descr']) {
+ $found = true;
+ break;
+ }
+ }
+
+ if ($found === false) {
+ $a_out[] = $natent;
+ }
+ }
+ }
+ $savemsg = gettext("Default rules for each interface have been created.");
+ unset($FilterIflist, $GatewaysList);
+ }
+
+ $config['nat']['outbound']['mode'] = $_POST['mode'];
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_out[$_GET['id']]) {
+ unset($a_out[$_GET['id']]);
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected rules */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei) {
+ unset($a_out[$rulei]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+ }
+
+} else if ($_GET['act'] == "toggle") {
+ if ($a_out[$_GET['id']]) {
+ if (isset($a_out[$_GET['id']]['disabled'])) {
+ unset($a_out[$_GET['id']]['disabled']);
+ } else {
+ $a_out[$_GET['id']]['disabled'] = true;
+ }
+ if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+ }
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($movebtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ break;
+ }
+ }
+ /* move selected rules before this rule */
+ if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
+ $a_out_new = array();
+
+ /* copy all rules < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_out_new[] = $a_out[$i];
+ }
+ }
+
+ /* copy all selected rules */
+ for ($i = 0; $i < count($a_out); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['rule'])) {
+ $a_out_new[] = $a_out[$i];
+ }
+ }
+
+ /* copy $movebtn rule */
+ if ($movebtn < count($a_out)) {
+ $a_out_new[] = $a_out[$movebtn];
+ }
+
+ /* copy all rules > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_out); $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_out_new[] = $a_out[$i];
+ }
+ }
+ if (count($a_out_new) > 0) {
+ $a_out = $a_out_new;
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Outbound"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_nat_out.php" method="post" name="iform">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+if (is_subsystem_dirty('natconf')) {
+ print_info_box_np(gettext("The NAT configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));
+}
+?>
+<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall nat outbound">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
+ $tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
+ $tab_array[] = array(gettext("Outbound"), true, "firewall_nat_out.php");
+ $tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td rowspan="3" align="right" valign="middle"><b><?=gettext("Mode:"); ?></b></td>
+ <td>
+ <input name="mode" type="radio" id="automatic" value="automatic" <?php if ($mode == "automatic") echo "checked=\"checked\"";?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Automatic outbound NAT rule generation"); ?><br />
+ <?=gettext("(IPsec passthrough included)");?>
+ </strong>
+ </td>
+ <td>
+ <input name="mode" type="radio" id="hybrid" value="hybrid" <?php if ($mode == "hybrid") echo "checked=\"checked\"";?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Hybrid Outbound NAT rule generation"); ?><br />
+ <?=gettext("(Automatic Outbound NAT + rules below)");?>
+ </strong>
+ </td>
+ <td rowspan="3" valign="middle" align="left">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ &nbsp;
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="mode" type="radio" id="advanced" value="advanced" <?php if ($mode == "advanced") echo "checked=\"checked\"";?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Manual Outbound NAT rule generation"); ?><br />
+ <?=gettext("(AON - Advanced Outbound NAT)");?>
+ </strong>
+ </td>
+ <td>
+ <input name="mode" type="radio" id="disabled" value="disabled" <?php if ($mode == "disabled") echo "checked=\"checked\"";?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Disable Outbound NAT rule generation"); ?><br />
+ <?=gettext("(No Outbound NAT rules)");?>
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6">
+ &nbsp;
+ </td>
+ </tr>
+ </table>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="mappings">
+ <tr><td colspan="5"><b>&nbsp;<?=gettext("Mappings:"); ?></b></td></tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr id="frheader">
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Source");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Source Port");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Destination");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Destination Port");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("NAT Address");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("NAT Port");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Static Port");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="firewall_nat_out_edit.php?after=-1">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new mapping");?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_out as $natent):
+ $iconfn = "pass";
+ $textss = $textse = "";
+ if ($mode == "disabled" || $mode == "automatic" || isset($natent['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ $textse = "</span>";
+ $iconfn .= "_d";
+ }
+
+ //build Alias popup box
+ $alias_src_span_begin = "";
+ $alias_src_port_span_begin = "";
+ $alias_dst_span_begin = "";
+ $alias_dst_port_span_begin = "";
+
+ $alias_popup = rule_popup($natent['source']['network'], pprint_port($natent['sourceport']), $natent['destination']['address'], pprint_port($natent['dstport']));
+
+ $alias_src_span_begin = $alias_popup["src"];
+ $alias_src_port_span_begin = $alias_popup["srcport"];
+ $alias_dst_span_begin = $alias_popup["dst"];
+ $alias_dst_port_span_begin = $alias_popup["dstport"];
+
+ $alias_src_span_end = $alias_popup["src_end"];
+ $alias_src_port_span_end = $alias_popup["srcport_end"];
+ $alias_dst_span_end = $alias_popup["dst_end"];
+ $alias_dst_port_span_end = $alias_popup["dstport_end"];
+?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="listt">
+ <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ </td>
+ <td class="listt" align="center">
+<?php
+ if ($mode == "disabled" || $mode == "automatic"):
+?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("This rule is being ignored");?>" alt="icon" />
+<?php
+ else:
+?>
+ <a href="?act=toggle&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+ </a>
+<?php
+ endif;
+?>
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+ <?php echo $textss . htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . $textse; ?>
+ &nbsp;
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+ <?php $natent['source']['network'] = ($natent['source']['network'] == "(self)") ? "This Firewall" : $natent['source']['network']; ?>
+ <?php echo $textss . $alias_src_span_begin . $natent['source']['network'] . $alias_src_span_end . $textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
+ if (!$natent['sourceport']) {
+ echo "*";
+ } else {
+ echo $alias_src_port_span_begin . $natent['sourceport'] . $alias_src_port_span_end;
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ if (isset($natent['destination']['any'])) {
+ echo "*";
+ } else {
+ if (isset($natent['destination']['not'])) {
+ echo "!&nbsp;";
+ }
+ echo $alias_dst_span_begin . $natent['destination']['address'] . $alias_dst_span_end;
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
+ if (!$natent['dstport']) {
+ echo "*";
+ } else {
+ echo $alias_dst_port_span_begin . $natent['dstport'] . $alias_dst_port_span_end;
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ if (isset($natent['nonat'])) {
+ echo '<I>NO NAT</I>';
+ } elseif (!$natent['target']) {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address";
+ } elseif ($natent['target'] == "other-subnet") {
+ echo $natent['targetip'] . '/' . $natent['targetip_subnet'];
+ } else {
+ echo $natent['target'];
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ if (!$natent['natport']) {
+ echo "*";
+ } else {
+ echo $natent['natport'];
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';" align="center">
+<?php
+ echo $textss;
+ if (isset($natent['staticnatport'])) {
+ echo gettext("YES");
+ } else {
+ echo gettext("NO");
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='firewall_nat_out_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($natent['descr']);?>&nbsp;
+ </td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move">
+ <tr>
+ <td><input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" title="<?=gettext("move selected rules before this rule");?>" type="image" style="height:17;width:17;border:0" /></td>
+ <td>
+ <a href="firewall_nat_out_edit.php?id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit mapping");?>" alt="edit" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle">
+ <a href="firewall_nat_out.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this rule?");?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule");?>" alt="delete" />
+ </a>
+ </td>
+ <td>
+ <a href="firewall_nat_out_edit.php?dup=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new NAT based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="list" colspan="11"></td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected mappings to end");?>" border="0" alt="move" />
+<?php
+ else:
+?>
+ <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected mappings to end");?>" />
+<?php
+ endif;
+?>
+ </td>
+ <td>
+ <a href="firewall_nat_out_edit.php">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new mapping");?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected mappings");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected mappings?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if ($mode == "automatic" || $mode == "hybrid"):
+ if (empty($FilterIflist)) {
+ filter_generate_optcfg_array();
+ }
+ if (empty($GatewaysList)) {
+ filter_generate_gateways();
+ }
+ $automatic_rules = filter_nat_rules_outbound_automatic(implode(" ", filter_nat_rules_automatic_tonathosts()));
+ unset($FilterIflist, $GatewaysList);
+?>
+ <tr><td colspan="5"><b>&nbsp;<?=gettext("Automatic rules:"); ?></b></td></tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr id="frheader">
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Source");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Source Port");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Destination");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Destination Port");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("NAT Address");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("NAT Port");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Static Port");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">&nbsp;</td>
+ </tr>
+<?php
+ foreach ($automatic_rules as $natent):
+?>
+ <tr valign="top">
+ <td class="list">&nbsp;</td>
+ <td class="listt" align="center">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0" title="<?=gettext("automatic outbound nat");?>" alt="icon" />
+ </td>
+ <td class="listlr" style="background-color: #E0E0E0">
+ <?php echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])); ?>
+ &nbsp;
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+ <?=$natent['source']['network'];?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
+ if (!$natent['sourceport']) {
+ echo "*";
+ } else {
+ echo $natent['sourceport'];
+ }
+?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ if (isset($natent['destination']['any'])) {
+ echo "*";
+ } else {
+ if (isset($natent['destination']['not'])) {
+ echo "!&nbsp;";
+ }
+ echo $natent['destination']['address'];
+ }
+?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ echo ($natent['protocol']) ? $natent['protocol'] . '/' : "" ;
+ if (!$natent['dstport']) {
+ echo "*";
+ } else {
+ echo $natent['dstport'];
+ }
+?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ if (isset($natent['nonat'])) {
+ echo '<I>NO NAT</I>';
+ } elseif (!$natent['target']) {
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface'])) . " address";
+ } elseif ($natent['target'] == "other-subnet") {
+ echo $natent['targetip'] . '/' . $natent['targetip_subnet'];
+ } else {
+ echo $natent['target'];
+ }
+?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ if (!$natent['natport']) {
+ echo "*";
+ } else {
+ echo $natent['natport'];
+ }
+?>
+ </td>
+ <td class="listr" style="background-color: #E0E0E0">
+<?php
+ if (isset($natent['staticnatport'])) {
+ echo gettext("YES");
+ } else {
+ echo gettext("NO");
+ }
+?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($natent['descr']);?>&nbsp;
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td colspan="12">
+ <p><span class="vexpl">
+ <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
+ <?=gettext("If automatic outbound NAT selected, a mapping is automatically created " .
+ "for each interface's subnet (except WAN-type connections) and the rules " .
+ "on \"Mappings\" section of this page are ignored.<br /><br /> " .
+ "If manual outbound NAT is selected, outbound NAT rules will not be " .
+ "automatically generated and only the mappings you specify on this page " .
+ "will be used. <br /><br /> " .
+ "If hybrid outbound NAT is selected, mappings you specify on this page will " .
+ "be used, followed by the automatically generated ones. <br /><br />" .
+ "If disable outbound NAT is selected, no rules will be used. <br /><br />" .
+ "If a target address other than an interface's IP address is used, " .
+ "then depending on the way the WAN connection is setup, a "); ?>
+ <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP"); ?></a>
+ <?= gettext(" may also be required.") ?>
+ </span></p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_nat_out_edit.php b/src/usr/local/www/firewall_nat_out_edit.php
new file mode 100644
index 0000000..e99cebb
--- /dev/null
+++ b/src/usr/local/www/firewall_nat_out_edit.php
@@ -0,0 +1,905 @@
+<?php
+/* $Id$ */
+/*
+ firewall_nat_out_edit.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: nat
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-nat-outbound-edit
+##|*NAME=Firewall: NAT: Outbound: Edit page
+##|*DESCR=Allow access to the 'Firewall: NAT: Outbound: Edit' page.
+##|*MATCH=firewall_nat_out_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_nat_out.php');
+}
+
+if (!is_array($config['nat']['outbound'])) {
+ $config['nat']['outbound'] = array();
+}
+
+if (!is_array($config['nat']['outbound']['rule'])) {
+ $config['nat']['outbound']['rule'] = array();
+}
+
+$a_out = &$config['nat']['outbound']['rule'];
+
+if (!is_array($config['aliases']['alias'])) {
+ $config['aliases']['alias'] = array();
+}
+$a_aliases = &$config['aliases']['alias'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
+ $after = $_GET['after'];
+}
+if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
+ $after = $_POST['after'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+ $after = $_GET['dup'];
+}
+
+if (isset($id) && $a_out[$id]) {
+ if (isset($a_out[$id]['created']) && is_array($a_out[$id]['created'])) {
+ $pconfig['created'] = $a_out[$id]['created'];
+ }
+
+ if (isset($a_out[$id]['updated']) && is_array($a_out[$id]['updated'])) {
+ $pconfig['updated'] = $a_out[$id]['updated'];
+ }
+
+ $pconfig['protocol'] = $a_out[$id]['protocol'];
+ list($pconfig['source'], $pconfig['source_subnet']) = explode('/', $a_out[$id]['source']['network']);
+ if (!is_numeric($pconfig['source_subnet'])) {
+ $pconfig['source_subnet'] = 32;
+ }
+ $pconfig['sourceport'] = $a_out[$id]['sourceport'];
+ address_to_pconfig($a_out[$id]['destination'], $pconfig['destination'],
+ $pconfig['destination_subnet'], $pconfig['destination_not'],
+ $none, $none);
+ $pconfig['dstport'] = $a_out[$id]['dstport'];
+ $pconfig['natport'] = $a_out[$id]['natport'];
+ $pconfig['target'] = $a_out[$id]['target'];
+ $pconfig['targetip'] = $a_out[$id]['targetip'];
+ $pconfig['targetip_subnet'] = $a_out[$id]['targetip_subnet'];
+ $pconfig['poolopts'] = $a_out[$id]['poolopts'];
+ $pconfig['interface'] = $a_out[$id]['interface'];
+ if (!$pconfig['interface']) {
+ $pconfig['interface'] = "wan";
+ }
+ $pconfig['descr'] = $a_out[$id]['descr'];
+ $pconfig['nonat'] = $a_out[$id]['nonat'];
+ $pconfig['disabled'] = isset($a_out[$id]['disabled']);
+ $pconfig['staticnatport'] = isset($a_out[$id]['staticnatport']);
+ $pconfig['nosync'] = isset($a_out[$id]['nosync']);
+} else {
+ $pconfig['source_subnet'] = 24;
+ $pconfig['destination'] = "any";
+ $pconfig['destination_subnet'] = 24;
+ $pconfig['interface'] = "wan";
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+}
+
+if ($_POST) {
+ if ($_POST['destination_type'] == "any") {
+ $_POST['destination'] = "any";
+ $_POST['destination_subnet'] = 24;
+ }
+ if ($_POST['source_type'] == "any") {
+ $_POST['source'] = "any";
+ $_POST['source_subnet'] = 24;
+ } elseif ($_POST['source_type'] == "(self)") {
+ $_POST['source'] = "(self)";
+ $_POST['source_subnet'] = 24;
+ }
+
+ unset($input_errors);
+ $pconfig = $_POST;
+ /* run through $_POST items encoding HTML entitles so that the user
+ * cannot think he is slick and perform a XSS attack on the unwilling
+ */
+ foreach ($_POST as $key => $value) {
+ $temp = str_replace(">", "", $value);
+ $newpost = htmlentities($temp);
+ if ($newpost <> $temp) {
+ $input_errors[] = sprintf(gettext("Invalid characters detected (%s). Please remove invalid characters and save again."), $temp);
+ }
+ }
+
+ /* input validation */
+ $reqdfields = explode(" ", "interface protocol source source_subnet destination destination_subnet");
+ $reqdfieldsn = array(gettext("Interface"), gettext("Protocol"), gettext("Source"), gettext("Source bit count"), gettext("Destination"), gettext("Destination bit count"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $protocol_uses_ports = in_array($_POST['protocol'], explode(" ", "any tcp udp tcp/udp"));
+
+ if ($_POST['source']) {
+ $_POST['source'] = trim($_POST['source']);
+ }
+ if ($_POST['destination']) {
+ $_POST['destination'] = trim($_POST['destination']);
+ }
+ if ($_POST['targetip']) {
+ $_POST['targetip'] = trim($_POST['targetip']);
+ }
+ if ($_POST['sourceport']) {
+ $_POST['sourceport'] = trim($_POST['sourceport']);
+ }
+ if ($_POST['dstport']) {
+ $_POST['dstport'] = trim($_POST['dstport']);
+ }
+ if ($_POST['natport']) {
+ $_POST['natport'] = trim($_POST['natport']);
+ }
+
+ if ($protocol_uses_ports && $_POST['sourceport'] <> "" && !(is_portoralias($_POST['sourceport']) || is_portrange($_POST['sourceport']))) {
+ $input_errors[] = gettext("You must supply either a valid port or port alias for the source port entry.");
+ }
+
+ if ($protocol_uses_ports && $_POST['dstport'] <> "" && !(is_portoralias($_POST['dstport']) || is_portrange($_POST['dstport']))) {
+ $input_errors[] = gettext("You must supply either a valid port or port alias for the destination port entry.");
+ }
+
+ if ($protocol_uses_ports && $_POST['natport'] <> "" && !is_port($_POST['natport']) && !isset($_POST['nonat'])) {
+ $input_errors[] = gettext("You must supply a valid port for the NAT port entry.");
+ }
+
+ if (($_POST['source_type'] != "any") && ($_POST['source_type'] != "(self)")) {
+ if ($_POST['source'] && !is_ipaddroralias($_POST['source']) && $_POST['source'] <> "any") {
+ $input_errors[] = gettext("A valid source must be specified.");
+ }
+ }
+ if ($_POST['source_subnet'] && !is_numericint($_POST['source_subnet'])) {
+ $input_errors[] = gettext("A valid source bit count must be specified.");
+ }
+ if ($_POST['destination_type'] != "any") {
+ if ($_POST['destination'] && !is_ipaddroralias($_POST['destination'])) {
+ $input_errors[] = gettext("A valid destination must be specified.");
+ }
+ }
+ if ($_POST['destination_subnet'] && !is_numericint($_POST['destination_subnet'])) {
+ $input_errors[] = gettext("A valid destination bit count must be specified.");
+ }
+ if ($_POST['destination_type'] == "any") {
+ if ($_POST['destination_not']) {
+ $input_errors[] = gettext("Negating destination address of \"any\" is invalid.");
+ }
+ }
+
+ if ($_POST['target'] && !is_ipaddr($_POST['target']) && !is_subnet($_POST['target']) && !is_alias($_POST['target']) && !isset($_POST['nonat']) && !($_POST['target'] == "other-subnet")) {
+ $input_errors[] = gettext("A valid target IP address must be specified.");
+ }
+
+ if ($_POST['target'] == "other-subnet") {
+ if (!is_ipaddr($_POST['targetip'])) {
+ $input_errors[] = gettext("A valid target IP must be specified when using the 'Other Subnet' type.");
+ }
+ if (!is_numericint($_POST['targetip_subnet'])) {
+ $input_errors[] = gettext("A valid target bit count must be specified when using the 'Other Subnet' type.");
+ }
+ }
+
+ /* Verify Pool Options */
+ $poolopts = "";
+ if ($_POST['poolopts']) {
+ if (is_subnet($_POST['target']) || ($_POST['target'] == "other-subnet")) {
+ $poolopts = $_POST['poolopts'];
+ } elseif (is_alias($_POST['target'])) {
+ if (substr($_POST['poolopts'], 0, 11) == "round-robin") {
+ $poolopts = $_POST['poolopts'];
+ } else {
+ $input_errors[] = gettext("Only Round Robin pool options may be chosen when selecting an alias.");
+ }
+ }
+ }
+
+ /* if user has selected any as source, set it here */
+ if ($_POST['source_type'] == "any") {
+ $osn = "any";
+ } else if ($_POST['source_type'] == "(self)") {
+ $osn = "(self)";
+ } else if (is_alias($_POST['source'])) {
+ $osn = $_POST['source'];
+ } else {
+ $osn = gen_subnet($_POST['source'], $_POST['source_subnet']) . "/" . $_POST['source_subnet'];
+ }
+
+ /* check for existing entries */
+ if ($_POST['destination_type'] == "any") {
+ $ext = "any";
+ } else if (is_alias($_POST['destination'])) {
+ $ext = $_POST['destination'];
+ } else {
+ $ext = gen_subnet($_POST['destination'], $_POST['destination_subnet']) . "/" . $_POST['destination_subnet'];
+ }
+
+ foreach ($a_out as $natent) {
+ if (isset($id) && ($a_out[$id]) && ($a_out[$id] === $natent)) {
+ continue;
+ }
+
+ if (!$natent['interface']) {
+ $natent['interface'] == "wan";
+ }
+ }
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/input_validation");
+
+ if (!$input_errors) {
+ $natent = array();
+ $natent['source']['network'] = $osn;
+ $natent['sourceport'] = ($protocol_uses_ports) ? $_POST['sourceport'] : "";
+ $natent['descr'] = $_POST['descr'];
+ $natent['target'] = (!isset($_POST['nonat'])) ? $_POST['target'] : "";
+ $natent['targetip'] = (!isset($_POST['nonat'])) ? $_POST['targetip'] : "";
+ $natent['targetip_subnet'] = (!isset($_POST['nonat'])) ? $_POST['targetip_subnet'] : "";
+ $natent['interface'] = $_POST['interface'];
+ $natent['poolopts'] = $poolopts;
+
+ /* static-port */
+ if (isset($_POST['staticnatport']) && $protocol_uses_ports && !isset($_POST['nonat'])) {
+ $natent['staticnatport'] = true;
+ } else {
+ unset($natent['staticnatport']);
+ }
+
+ if (isset($_POST['disabled'])) {
+ $natent['disabled'] = true;
+ } else {
+ unset($natent['disabled']);
+ }
+
+ /* if user has selected not nat, set it here */
+ if (isset($_POST['nonat'])) {
+ $natent['nonat'] = true;
+ } else {
+ unset($natent['nonat']);
+ }
+
+ if ($_POST['protocol'] && $_POST['protocol'] != "any") {
+ $natent['protocol'] = $_POST['protocol'];
+ } else {
+ unset($natent['protocol']);
+ }
+
+ if ($ext == "any") {
+ $natent['destination']['any'] = true;
+ } else {
+ $natent['destination']['address'] = $ext;
+ }
+ if ($_POST['natport'] != "" && $protocol_uses_ports && !isset($_POST['nonat'])) {
+ $natent['natport'] = $_POST['natport'];
+ } else {
+ unset($natent['natport']);
+ }
+ if ($_POST['dstport'] != "" && $protocol_uses_ports) {
+ $natent['dstport'] = $_POST['dstport'];
+ } else {
+ unset($natent['dstport']);
+ }
+
+ if ($_POST['nosync'] == "yes") {
+ $natent['nosync'] = true;
+ } else {
+ unset($natent['nosync']);
+ }
+
+ if (isset($_POST['destination_not']) && $ext != "any") {
+ $natent['destination']['not'] = true;
+ }
+
+ if (isset($a_out[$id]['created']) && is_array($a_out[$id]['created'])) {
+ $natent['created'] = $a_out[$id]['created'];
+ }
+
+ $natent['updated'] = make_config_revision_entry();
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/pre_write_config");
+
+ if (isset($id) && $a_out[$id]) {
+ $a_out[$id] = $natent;
+ } else {
+ $natent['created'] = make_config_revision_entry();
+ if (is_numeric($after)) {
+ array_splice($a_out, $after+1, 0, array($natent));
+ } else {
+ $a_out[] = $natent;
+ }
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('natconf');
+ }
+ header("Location: firewall_nat_out.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Outbound"), gettext("Edit"));
+$closehead = false;
+include("head.inc");
+
+?>
+
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript">
+//<![CDATA[
+var portsenabled = 1;
+function staticportchange() {
+ if (document.iform.staticnatport.checked) {
+ document.iform.natport.value = "";
+ document.iform.natport.disabled = 1;
+ } else {
+ document.iform.natport.disabled = 0;
+ }
+}
+function typesel_change() {
+ switch (document.iform.destination_type.selectedIndex) {
+ case 1: // network
+ document.iform.destination.disabled = 0;
+ document.iform.destination_subnet.disabled = 0;
+ break;
+ default:
+ document.iform.destination.value = "";
+ document.iform.destination.disabled = 1;
+ document.iform.destination_subnet.value = "24";
+ document.iform.destination_subnet.disabled = 1;
+ break;
+ }
+}
+function sourcesel_change() {
+ switch (document.iform.source_type.selectedIndex) {
+ case 2: // network
+ document.iform.source.disabled = 0;
+ document.iform.source_subnet.disabled = 0;
+ break;
+ default:
+ document.iform.source.value = "";
+ document.iform.source.disabled = 1;
+ document.iform.source_subnet.value = "24";
+ document.iform.source_subnet.disabled = 1;
+ break;
+ }
+}
+function nonat_change() {
+ if (document.iform.nonat.checked) {
+ document.getElementById("transtable").style.display = 'none';
+ } else {
+ document.getElementById("transtable").style.display = '';
+ }
+}
+function proto_change() {
+ if (document.iform.protocol.selectedIndex >= 0 && document.iform.protocol.selectedIndex <= 3) {
+ portsenabled = 1;
+ } else {
+ portsenabled = 0;
+ }
+
+ if (portsenabled) {
+ document.getElementById("sport_tr").style.display = '';
+ document.getElementById("dport_tr").style.display = '';
+ document.getElementById("tport_tr").style.display = '';
+ document.getElementById("tporttext_tr").style.display = '';
+ document.getElementById("tportstatic_tr").style.display = '';
+ } else {
+ document.getElementById("sport_tr").style.display = 'none';
+ document.getElementById("dport_tr").style.display = 'none';
+ document.getElementById("tport_tr").style.display = 'none';
+ document.getElementById("tporttext_tr").style.display = 'none';
+ document.getElementById("tportstatic_tr").style.display = 'none';
+ }
+}
+function poolopts_change() {
+ if (jQuery('#target option:selected').text().trim().substring(0, 4) == "Host") {
+ jQuery('#poolopts_tr').css('display', '');
+ jQuery('#target_network').css('display', 'none');
+ } else if (jQuery('#target option:selected').text().trim().substring(0, 6) == "Subnet") {
+ jQuery('#poolopts_tr').css('display', '');
+ jQuery('#target_network').css('display', 'none');
+ } else if (jQuery('#target option:selected').text().trim().substring(0, 5) == "Other") {
+ jQuery('#poolopts_tr').css('display', '');
+ jQuery('#target_network').css('display', '');
+ } else {
+ jQuery('#poolopts').prop('selectedIndex', 0);
+ jQuery('#poolopts_tr').css('display', 'none');
+ jQuery('#target_network').css('display', 'none');
+ jQuery('#targetip').val('');
+ jQuery('#targetip_subnet').val('0');
+ }
+}
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="firewall_nat_out_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="1" summary="firewall nat outbound edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Advanced Outbound NAT entry");?></td>
+ </tr>
+<?php
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphpearly");
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this rule");?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Do not NAT");?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" name="nonat" id="nonat" onclick="nonat_change();" <?php if (isset($pconfig['nonat'])) echo " checked=\"checked\""; ?> />
+ <span class="vexpl"><?=gettext("Enabling this option will disable NAT for traffic matching this rule and stop processing Outbound NAT rules.");?>
+ <br /><?=gettext("Hint: in most cases, you won't use this option.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+<?php
+ $iflist = get_configured_interface_with_descr(false, true);
+ foreach ($iflist as $if => $ifdesc) {
+ if (have_ruleint_access($if)) {
+ $interfaces[$if] = $ifdesc;
+ }
+ }
+
+ if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+ }
+
+ if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+ }
+
+ if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $interfaces["enc0"] = "IPsec";
+ }
+ }
+
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+
+ foreach ($interfaces as $iface => $ifacename):
+?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which interface this rule applies to.");?><br />
+ <?=gettext("Hint: in most cases, you'll want to use WAN here.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td width="78%" class="vtable">
+ <select name="protocol" class="formselect" onchange="proto_change();">
+<?php
+ $protocols = explode(" ", "any TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP carp pfsync");
+ foreach ($protocols as $proto):
+?>
+ <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['protocol']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which protocol this rule should match.");?><br />
+<?php
+ printf(gettext("Hint: in most cases, you should specify %s any %s here."), "<em>", "</em>&nbsp;");
+?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="1" cellpadding="1" summary="source">
+ <tr>
+ <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="source_type" class="formselect" onchange="sourcesel_change()">
+ <option value="any" <?php if ($pconfig['source'] == "any") echo "selected=\"selected\""; ?>><?=gettext("any");?></option>
+ <option value="(self)" <?PHP if ($pconfig['source'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
+ <option value="network" <?php if (($pconfig['source'] != "any") && ($pconfig['source'] != "(self)")) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="source" type="text" autocomplete="off" class="formfldalias" id="source" size="20" value="<?=htmlspecialchars($pconfig['source']);?>" />/
+ <select name="source_subnet" class="formfld" id="source_subnet">
+<?php
+ for ($i = 32; $i >= 0; $i--):
+?>
+ <option value="<?=$i;?>"<?php if ($i == $pconfig['source_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
+<?php
+ endfor;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="vexpl"><?=gettext("Enter the source network for the outbound NAT mapping.");?></span>
+ </td>
+ </tr>
+ <tr name="sport_tr" id="sport_tr">
+ <td><?=gettext("Source port:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="sourceport" type="text" autocomplete="off" class="formfldalias" id="sourceport" size="5" value="<?=htmlspecialchars($pconfig['sourceport']);?>" />
+ <?=gettext("(leave blank for any)");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination");?></td>
+ <td width="78%" class="vtable">
+ <input name="destination_not" type="checkbox" id="destination_not" value="yes" <?php if ($pconfig['destination_not']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not");?></strong><br />
+ <?=gettext("Use this option to invert the sense of the match.");?><br />
+ <br />
+ <table border="0" cellspacing="1" cellpadding="1" summary="destination">
+ <tr>
+ <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="destination_type" class="formselect" onchange="typesel_change()">
+ <option value="any"<?php if ($pconfig['destination'] == "any") echo " selected=\"selected\""; ?>>
+ <?=gettext("any");?>
+ </option>
+ <option value="network"<?php if ($pconfig['destination'] != "any") echo " selected=\"selected\""; ?>>
+ <?=gettext("Network");?>
+ </option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="destination" type="text" autocomplete="off" class="formfldalias" id="destination" size="20" value="<?=htmlspecialchars($pconfig['destination']);?>" />/
+ <select name="destination_subnet" class="formselect" id="destination_subnet">
+<?php
+ for ($i = 32; $i >= 0; $i--):
+?>
+ <option value="<?=$i;?>"<?php if ($i == $pconfig['destination_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
+<?php
+ endfor;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="vexpl"><?=gettext("Enter the destination network for the outbound NAT mapping.");?></span>
+ </td>
+ </tr>
+ <tr name="dport_tr" id="dport_tr">
+ <td><?=gettext("Destination port:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="dstport" type="text" autocomplete="off" class="formfldalias" id="dstport" size="5" value="<?=htmlspecialchars($pconfig['dstport']);?>" />
+ <?=gettext("(leave blank for any)");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr name="transtable" id="transtable">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Translation");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="1" cellpadding="1" summary="translation">
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="target" class="formselect" id="target" onchange="poolopts_change();">
+ <option value=""<?php if (!$pconfig['target']) echo " selected=\"selected\""; ?>>
+ <?=gettext("Interface address");?>
+ </option>
+<?php
+ if (is_array($config['virtualip']['vip'])):
+ foreach ($config['virtualip']['vip'] as $sn):
+ if (isset($sn['noexpand'])) {
+ continue;
+ }
+ if ($sn['mode'] == "proxyarp" && $sn['type'] == "network"):
+ $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
+ $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
+ $len = $end - $start;
+?>
+ <option value="<?=$sn['subnet'].'/'.$sn['subnet_bits'];?>" <?php if ($sn['subnet'].'/'.$sn['subnet_bits'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Subnet: {$sn['subnet']}/{$sn['subnet_bits']} ({$sn['descr']})");?>
+ </option>
+<?php
+ for ($i = 0; $i <= $len; $i++):
+ $snip = long2ip32($start+$i);
+?>
+ <option value="<?=$snip;?>" <?php if ($snip == $pconfig['target']) echo "selected"; ?>>
+ <?=htmlspecialchars("{$snip} ({$sn['descr']})");?>
+ </option>
+<?php
+ endfor;
+?>
+<?php
+ else:
+?>
+ <option value="<?=$sn['subnet'];?>" <?php if ($sn['subnet'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("{$sn['subnet']} ({$sn['descr']})");?>
+ </option>
+<?php
+ endif;
+ endforeach;
+ endif;
+ foreach ($a_aliases as $alias):
+ if ($alias['type'] != "host") {
+ continue;
+ }
+?>
+ <option value="<?=$alias['name'];?>" <?php if ($alias['name'] == $pconfig['target']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Host Alias: {$alias['name']} ({$alias['descr']})");?>
+ </option>
+<?php
+ endforeach;
+?>
+ <option value="other-subnet"<?php if ($pconfig['target'] == "other-subnet") echo " selected=\"selected\""; ?>>
+ <?=gettext("Other Subnet (Enter Below)");?>
+ </option>
+ </select>
+ </td>
+ </tr>
+
+ <tr id="target_network">
+ <td><?=gettext("Other Subnet:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="targetip" type="text" class="formfld unknown" id="targetip" size="20" value="<?=htmlspecialchars($pconfig['targetip']);?>" />/
+ <select name="targetip_subnet" class="formfld" id="targetip_subnet">
+<?php
+ for ($i = 32; $i >= 0; $i--):
+?>
+ <option value="<?=$i;?>"<?php if ($i == $pconfig['targetip_subnet']) echo " selected=\"selected\""; ?>><?=$i;?></option>
+<?php
+ endfor;
+?>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="vexpl"><?=gettext("Packets matching this rule will be mapped to the IP address given here.");?><br />
+ <?=gettext("If you want this rule to apply to another IP address rather than the IP address of the interface chosen above, ".
+ "select it here (you will need to define ");?>
+ <a href="firewall_virtual_ip.php"><?=gettext("Virtual IP");?></a>
+ <?=gettext("addresses on the interface first).");?>
+ </span><br />
+ </td>
+ </tr>
+ <tr id="poolopts_tr">
+ <td valign="top">Pool Options</td>
+ <td>
+ <select name="poolopts" id="poolopts">
+ <option value="" <?php if ($pconfig['poolopts'] == "") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Default");?>
+ </option>
+ <option value="round-robin" <?php if ($pconfig['poolopts'] == "round-robin") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Round Robin");?>
+ </option>
+ <option value="round-robin sticky-address" <?php if ($pconfig['poolopts'] == "round-robin sticky-address") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Round Robin with Sticky Address");?>
+ </option>
+ <option value="random" <?php if ($pconfig['poolopts'] == "random") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Random");?>
+ </option>
+ <option value="random sticky-address" <?php if ($pconfig['poolopts'] == "random sticky-address") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Random with Sticky Address");?>
+ </option>
+ <option value="source-hash" <?php if ($pconfig['poolopts'] == "source-hash") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Source Hash");?>
+ </option>
+ <option value="bitmask" <?php if ($pconfig['poolopts'] == "bitmask") echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars("Bitmask");?>
+ </option>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Only Round Robin types work with Host Aliases. Any type can be used with a Subnet.");?><br />
+ * <?=gettext("Round Robin: Loops through the translation addresses.");?><br />
+ * <?=gettext("Random: Selects an address from the translation address pool at random.");?><br />
+ * <?=gettext("Source Hash: Uses a hash of the source address to determine the translation address, ensuring that the redirection address is always the same for a given source.");?><br />
+ * <?=gettext("Bitmask: Applies the subnet mask and keeps the last portion identical; 10.0.1.50 -&gt; x.x.x.50.");?><br />
+ * <?=gettext("Sticky Address: The Sticky Address option can be used with the Random and Round Robin pool types to ensure that a particular source address is always mapped to the same translation address.");?><br />
+ </span><br />
+ </td>
+ </tr>
+ <tr name="tport_tr" id="tport_tr">
+ <td><?=gettext("Port:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="natport" type="text" class="formfld unknown" id="natport" size="5" value="<?=htmlspecialchars($pconfig['natport']);?>" />
+ </td>
+ </tr>
+ <tr name="tporttext_tr" id="tporttext_tr">
+ <td>&nbsp;</td>
+ <td>
+ <span class="vexpl"><?=gettext("Enter the source port for the outbound NAT mapping.");?></span>
+ </td>
+ </tr>
+ <tr name="tportstatic_tr" id="tportstatic_tr">
+ <td><?=gettext("Static-port:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input onchange="staticportchange();" name="staticnatport" type="checkbox" class="formfld" id="staticnatport" size="5"<?php if ($pconfig['staticnatport']) echo " checked=\"checked\"";?> />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync");?></td>
+ <td width="78%" class="vtable">
+ <input value="yes" name="nosync" type="checkbox" class="formfld" id="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
+ <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+<?php
+ $has_created_time = (isset($a_out[$id]['created']) && is_array($a_out[$id]['created']));
+ $has_updated_time = (isset($a_out[$id]['updated']) && is_array($a_out[$id]['updated']));
+ if ($has_created_time || $has_updated_time):
+?>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
+ </tr>
+<?php
+ if ($has_created_time):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_out[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_out[$id]['created']['username'] ?></strong>
+ </td>
+ </tr>
+<?php
+ endif;
+
+ if ($has_updated_time):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_out[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_out[$id]['updated']['username'] ?></strong>
+ </td>
+ </tr>
+<?php
+ endif;
+ endif;
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_aon/htmlphplate");
+?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+<?php
+ if (isset($id) && $a_out[$id]):
+?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+<?php
+ endif;
+?>
+ <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+ sourcesel_change();
+ typesel_change();
+ staticportchange();
+ nonat_change();
+ proto_change();
+ poolopts_change();
+
+ var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
+ var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
+
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("source"), new StateSuggestions(addressarray));
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("sourceport"), new StateSuggestions(customarray));
+ var oTextbox3 = new AutoSuggestControl(document.getElementById("destination"), new StateSuggestions(addressarray));
+ var oTextbox4 = new AutoSuggestControl(document.getElementById("dstport"), new StateSuggestions(customarray));
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_rules.php b/src/usr/local/www/firewall_rules.php
new file mode 100644
index 0000000..d3e8f24
--- /dev/null
+++ b/src/usr/local/www/firewall_rules.php
@@ -0,0 +1,944 @@
+<?php
+/* $Id$ */
+/*
+ firewall_rules.php
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-rules
+##|*NAME=Firewall: Rules page
+##|*DESCR=Allow access to the 'Firewall: Rules' page.
+##|*MATCH=firewall_rules.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pgtitle = array(gettext("Firewall"), gettext("Rules"));
+$shortcut_section = "firewall";
+
+function delete_nat_association($id) {
+ global $config;
+
+ if (!$id || !is_array($config['nat']['rule'])) {
+ return;
+ }
+
+ $a_nat = &$config['nat']['rule'];
+
+ foreach ($a_nat as &$natent) {
+ if ($natent['associated-rule-id'] == $id) {
+ $natent['associated-rule-id'] = '';
+ }
+ }
+}
+
+if (!is_array($config['filter']['rule'])) {
+ $config['filter']['rule'] = array();
+}
+filter_rules_sort();
+$a_filter = &$config['filter']['rule'];
+
+$if = $_GET['if'];
+if ($_POST['if']) {
+ $if = $_POST['if'];
+}
+
+$ifdescs = get_configured_interface_with_descr();
+
+/* add group interfaces */
+if (is_array($config['ifgroups']['ifgroupentry'])) {
+ foreach ($config['ifgroups']['ifgroupentry'] as $ifgen) {
+ if (have_ruleint_access($ifgen['ifname'])) {
+ $iflist[$ifgen['ifname']] = $ifgen['ifname'];
+ }
+ }
+}
+
+foreach ($ifdescs as $ifent => $ifdesc) {
+ if (have_ruleint_access($ifent)) {
+ $iflist[$ifent] = $ifdesc;
+ }
+}
+
+if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $iflist['l2tp'] = "L2TP VPN";
+ }
+}
+
+if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $iflist['pptp'] = "PPTP VPN";
+ }
+}
+
+if (is_array($config['pppoes']['pppoe'])) {
+ foreach ($config['pppoes']['pppoe'] as $pppoes) {
+ if (($pppoes['mode'] == 'server') && have_ruleint_access("pppoe")) {
+ $iflist['pppoe'] = "PPPoE Server";
+ }
+ }
+}
+
+/* add ipsec interfaces */
+if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $iflist["enc0"] = "IPsec";
+ }
+}
+
+/* add openvpn/tun interfaces */
+if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $iflist["openvpn"] = "OpenVPN";
+}
+
+pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/interfaces_override");
+
+if (!$if || !isset($iflist[$if])) {
+ if ("any" == $if) {
+ $if = "FloatingRules";
+ } else if ("FloatingRules" != $if) {
+ if (isset($iflist['wan'])) {
+ $if = "wan";
+ } else {
+ $if = "FloatingRules";
+ }
+ }
+}
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval = filter_configure();
+
+ clear_subsystem_dirty('filter');
+
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/apply");
+
+ $savemsg = sprintf(gettext("The settings have been applied. The firewall rules are now reloading in the background.<br />You can also %s monitor %s the reload progress"), "<a href='status_filter_reload.php'>", "</a>");
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_filter[$_GET['id']]) {
+ if (!empty($a_filter[$_GET['id']]['associated-rule-id'])) {
+ delete_nat_association($a_filter[$_GET['id']]['associated-rule-id']);
+ }
+ unset($a_filter[$_GET['id']]);
+ if (write_config()) {
+ mark_subsystem_dirty('filter');
+ }
+ header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
+ exit;
+ }
+}
+
+// Handle save msg if defined
+if ($_REQUEST['savemsg']) {
+ $savemsg = htmlentities($_REQUEST['savemsg']);
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected rules */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei) {
+ delete_nat_association($a_filter[$rulei]['associated-rule-id']);
+ unset($a_filter[$rulei]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('filter');
+ }
+ header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
+ exit;
+ }
+} else if ($_GET['act'] == "toggle") {
+ if ($a_filter[$_GET['id']]) {
+ if (isset($a_filter[$_GET['id']]['disabled'])) {
+ unset($a_filter[$_GET['id']]['disabled']);
+ } else {
+ $a_filter[$_GET['id']]['disabled'] = true;
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('filter');
+ }
+ header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
+ exit;
+ }
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does -
+ so we use .x/.y to fine move button clicks instead... */
+ unset($movebtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ break;
+ }
+ }
+ /* move selected rules before this rule */
+ if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) {
+ $a_filter_new = array();
+
+ /* copy all rules < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_filter_new[] = $a_filter[$i];
+ }
+ }
+
+ /* copy all selected rules */
+ for ($i = 0; $i < count($a_filter); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['rule'])) {
+ $a_filter_new[] = $a_filter[$i];
+ }
+ }
+
+ /* copy $movebtn rule */
+ if ($movebtn < count($a_filter)) {
+ $a_filter_new[] = $a_filter[$movebtn];
+ }
+
+ /* copy all rules > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_filter); $i++) {
+ if (!in_array($i, $_POST['rule'])) {
+ $a_filter_new[] = $a_filter[$i];
+ }
+ }
+
+ $a_filter = $a_filter_new;
+ if (write_config()) {
+ mark_subsystem_dirty('filter');
+ }
+ header("Location: firewall_rules.php?if=" . htmlspecialchars($if));
+ exit;
+ }
+}
+$closehead = false;
+
+include("head.inc");
+?>
+<link type="text/css" rel="stylesheet" href="/javascript/chosen/chosen.css" />
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
+<?php include("fbegin.inc"); ?>
+<form action="firewall_rules.php" method="post">
+
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('filter')): ?><p>
+<?php print_info_box_np(gettext("The firewall rule configuration has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."), "apply", "", true); ?>
+<br />
+<?php endif; ?>
+<?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_table");
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall rules">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ if ("FloatingRules" == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array(gettext("Floating"), $active, "firewall_rules.php?if=FloatingRules");
+ $tabscounter = 0;
+ $i = 0;
+ foreach ($iflist as $ifent => $ifname) {
+ if ($ifent == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array($ifname, $active, "firewall_rules.php?if={$ifent}");
+ }
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr><td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/before_first_tr");
+ ?>
+ <tr id="frheader">
+ <td width="3%" class="list">&nbsp;</td>
+ <td width="5%" class="list">&nbsp;</td>
+ <td width="3%" class="listhdrr"><?=gettext("ID");?></td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tablehead");
+ ?>
+ <?php
+ if ('FloatingRules' == $if) {
+ ?>
+ <td width="3%" class="listhdrr"><?=gettext('Interfaces');?></td>
+ <?php
+ }
+ ?>
+ <td width="6%" class="listhdrr"><?=gettext("Proto");?></td>
+ <td width="12%" class="listhdrr"><?=gettext("Source");?></td>
+ <td width="6%" class="listhdrr"><?=gettext("Port");?></td>
+ <td width="12%" class="listhdrr"><?=gettext("Destination");?></td>
+ <td width="6%" class="listhdrr"><?=gettext("Port");?></td>
+ <td width="5%" class="listhdrr"><?=gettext("Gateway");?></td>
+ <td width="8%" class="listhdrr"><?=gettext("Queue");?></td>
+ <td width="5%" class="listhdrr"><?=gettext("Schedule");?></td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_desc_tablehead");
+ ?>
+ <td width="19%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="delete selected rules">
+ <tr>
+ <?php
+ $nrules = 0;
+ for ($i = 0; isset($a_filter[$i]); $i++) {
+ $filterent = $a_filter[$i];
+ if ($filterent['interface'] != $if && !isset($filterent['floating'])) {
+ continue;
+ }
+ if (isset($filterent['floating']) && "FloatingRules" != $if) {
+ continue;
+ }
+ $nrules++;
+ }
+ ?>
+ <td>
+ <?php if ($nrules == 0): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?gettext("delete selected rules"); ?>" border="0" alt="delete" /><?php else: ?>
+ <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')" />
+ <?php endif; ?>
+ </td>
+ <td align="center" valign="middle">
+ <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>&amp;after=-1">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php // Show the anti-lockout rule if it's enabled, and we are on LAN with an if count > 1, or WAN with an if count of 1.
+ if (!isset($config['system']['webgui']['noantilockout']) &&
+ (((count($config['interfaces']) > 1) && ($if == 'lan')) ||
+ ((count($config['interfaces']) == 1) && ($if == 'wan')))):
+
+ $alports = implode('<br />', filter_get_antilockout_ports(true));
+ ?>
+ <tr valign="top" id="antilockout">
+ <td class="list">&nbsp;</td>
+ <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0" alt="pass" /></td>
+ <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_antilockout");
+ ?>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0"><?=$iflist[$if];?> Address</td>
+ <td class="listr" style="background-color: #E0E0E0"><?= $alports ?></td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
+ <td class="listbg"><?=gettext("Anti-Lockout Rule");?></td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
+ <tr>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="move" /></td>
+ <td><a href="system_advanced_admin.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle"></td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php endif; ?>
+
+<?php if (isset($config['interfaces'][$if]['blockpriv'])): ?>
+ <tr valign="top" id="frrfc1918">
+ <td class="list">&nbsp;</td>
+ <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0" alt="block" /></td>
+ <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0"><?=gettext("RFC 1918 networks");?></td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
+ <td class="listbg"><?=gettext("Block private networks");?></td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
+ <tr>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="edit" /></td>
+ <td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle"></td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php endif; ?>
+<?php if (isset($config['interfaces'][$if]['blockbogons'])): ?>
+ <tr valign="top" id="frrfc1918">
+ <td class="list">&nbsp;</td>
+ <td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0" alt="block" /></td>
+ <td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0"><?=gettext("Reserved/not assigned by IANA");?></td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listr" style="background-color: #E0E0E0">*</td>
+ <td class="listbg"><?=gettext("Block bogon networks");?></td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move rules before">
+ <tr>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules before this rule");?>" alt="move" /></td>
+ <td><a href="interfaces.php?if=<?=htmlspecialchars($if)?>#rfc1918"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule");?>" width="17" height="17" border="0" alt=" edit" /></a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle"></td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus_d.gif" title="<?=gettext("add a new rule based on this one");?>" width="17" height="17" border="0" alt="add" /></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tbody>
+<?php
+ $nrules = 0;
+ for ($i = 0; isset($a_filter[$i]); $i++):
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/row_start");
+ $filterent = $a_filter[$i];
+ if ($filterent['interface'] != $if && !isset($filterent['floating'])) {
+ continue;
+ }
+ if (isset($filterent['floating']) && "FloatingRules" != $if) {
+ continue;
+ }
+ $isadvset = firewall_check_for_advanced_options($filterent);
+ if ($isadvset) {
+ $advanced_set = "<img src=\"./themes/{$g['theme']}/images/icons/icon_advanced.gif\" title=\"" . gettext("advanced settings set") . ": {$isadvset}\" border=\"0\" alt=\"advanced\" />";
+ } else {
+ $advanced_set = "";
+ }
+?>
+ <tr valign="top" id="fr<?=$nrules;?>">
+ <td class="listt">
+ <input type="checkbox" id="frc<?=$nrules;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$nrules;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ <?php echo $advanced_set; ?>
+ </td>
+ <td class="listt" align="center">
+ <?php
+ if ($filterent['type'] == "block") {
+ $iconfn = "block";
+ } else if ($filterent['type'] == "reject") {
+ $iconfn = "reject";
+ } else if ($filterent['type'] == "match") {
+ $iconfn = "match";
+ } else {
+ $iconfn = "pass";
+ }
+ if (isset($filterent['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ $textse = "</span>";
+ $iconfn .= "_d";
+ } else {
+ $textss = $textse = "";
+ }
+ ?>
+ <a href="?if=<?=htmlspecialchars($if);?>&amp;act=toggle&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" /></a>
+<?php
+ if (isset($filterent['log'])):
+ $iconfnlog = "log_s";
+ if (isset($filterent['disabled'])) {
+ $iconfnlog .= "_d";
+ }
+?>
+ <br /><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfnlog;?>.gif" width="11" height="15" border="0" alt="icon" />
+<?php endif; ?>
+ </td>
+ <?php
+
+ //build Alias popup box
+ $alias_src_span_begin = "";
+ $alias_src_port_span_begin = "";
+ $alias_dst_span_begin = "";
+ $alias_dst_port_span_begin = "";
+
+ $alias_popup = rule_popup($filterent['source']['address'], pprint_port($filterent['source']['port']), $filterent['destination']['address'], pprint_port($filterent['destination']['port']));
+
+ $alias_src_span_begin = $alias_popup["src"];
+ $alias_src_port_span_begin = $alias_popup["srcport"];
+ $alias_dst_span_begin = $alias_popup["dst"];
+ $alias_dst_port_span_begin = $alias_popup["dstport"];
+
+ $alias_src_span_end = $alias_popup["src_end"];
+ $alias_src_port_span_end = $alias_popup["srcport_end"];
+ $alias_dst_span_end = $alias_popup["dst_end"];
+ $alias_dst_port_span_end = $alias_popup["dstport_end"];
+
+ //build Schedule popup box
+ $a_schedules = &$config['schedules']['schedule'];
+ $schedule_span_begin = "";
+ $schedule_span_end = "";
+ $sched_caption_escaped = "";
+ $sched_content = "";
+ $schedstatus = false;
+ $dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
+ $monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
+ if ($config['schedules']['schedule'] <> "" and is_array($config['schedules']['schedule'])) {
+ foreach ($a_schedules as $schedule) {
+ if ($schedule['name'] == $filterent['sched']) {
+ $schedstatus = filter_get_time_based_rule_status($schedule);
+
+ foreach ($schedule['timerange'] as $timerange) {
+ $tempFriendlyTime = "";
+ $tempID = "";
+ $firstprint = false;
+ if ($timerange) {
+ $dayFriendly = "";
+ $tempFriendlyTime = "";
+
+ //get hours
+ $temptimerange = $timerange['hour'];
+ $temptimeseparator = strrpos($temptimerange, "-");
+
+ $starttime = substr ($temptimerange, 0, $temptimeseparator);
+ $stoptime = substr ($temptimerange, $temptimeseparator+1);
+
+ if ($timerange['month']) {
+ $tempmontharray = explode(",", $timerange['month']);
+ $tempdayarray = explode(",", $timerange['day']);
+ $arraycounter = 0;
+ $firstDayFound = false;
+ $firstPrint = false;
+ foreach ($tempmontharray as $monthtmp) {
+ $month = $tempmontharray[$arraycounter];
+ $day = $tempdayarray[$arraycounter];
+
+ if (!$firstDayFound) {
+ $firstDay = $day;
+ $firstmonth = $month;
+ $firstDayFound = true;
+ }
+
+ $currentDay = $day;
+ $nextDay = $tempdayarray[$arraycounter+1];
+ $currentDay++;
+ if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
+ if ($firstPrint) {
+ $dayFriendly .= ", ";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
+ } else {
+ $dayFriendly .= $monthArray[$month-1] . " " . $day;
+ }
+ $firstDayFound = false;
+ $firstPrint = true;
+ }
+ $arraycounter++;
+ }
+ } else {
+ $tempdayFriendly = $timerange['position'];
+ $firstDayFound = false;
+ $tempFriendlyDayArray = explode(",", $tempdayFriendly);
+ $currentDay = "";
+ $firstDay = "";
+ $nextDay = "";
+ $counter = 0;
+ foreach ($tempFriendlyDayArray as $day) {
+ if ($day != "") {
+ if (!$firstDayFound) {
+ $firstDay = $tempFriendlyDayArray[$counter];
+ $firstDayFound = true;
+ }
+ $currentDay =$tempFriendlyDayArray[$counter];
+ //get next day
+ $nextDay = $tempFriendlyDayArray[$counter+1];
+ $currentDay++;
+ if ($currentDay != $nextDay) {
+ if ($firstprint) {
+ $dayFriendly .= ", ";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
+ } else {
+ $dayFriendly .= $dayArray[$firstDay-1];
+ }
+ $firstDayFound = false;
+ $firstprint = true;
+ }
+ $counter++;
+ }
+ }
+ }
+ $timeFriendly = $starttime . " - " . $stoptime;
+ $description = $timerange['rangedescr'];
+ $sched_content .= $dayFriendly . "; " . $timeFriendly . "<br />";
+ }
+ }
+ $sched_caption_escaped = str_replace("'", "\'", $schedule['descr']);
+ $schedule_span_begin = "<span style=\"cursor: help;\" onmouseover=\"domTT_activate(this, event, 'content', '<h1>{$sched_caption_escaped}</h1><p>{$sched_content}</p>', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><u>";
+ $schedule_span_end = "</u></span>";
+ }
+ }
+ }
+ $printicon = false;
+ $alttext = "";
+ $image = "";
+ if (!isset($filterent['disabled'])) {
+ if ($schedstatus) {
+ if ($iconfn == "block" || $iconfn == "reject") {
+ $image = "icon_block";
+ $alttext = gettext("Traffic matching this rule is currently being denied");
+ } else {
+ $image = "icon_pass";
+ $alttext = gettext("Traffic matching this rule is currently being allowed");
+ }
+ $printicon = true;
+ } else if ($filterent['sched']) {
+ if ($iconfn == "block" || $iconfn == "reject") {
+ $image = "icon_block_d";
+ } else {
+ $image = "icon_block";
+ }
+ $alttext = gettext("This rule is not currently active because its period has expired");
+ $printicon = true;
+ }
+ }
+ ?>
+ <td class="listlr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php if (isset($filterent['id'])) echo $filterent['id']."&nbsp;"; else echo "&nbsp;"; ?><?=$textse;?>
+ </td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr");
+ ?>
+ <?php
+ if ('FloatingRules' == $if) {
+ ?>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?php
+ if (isset($filterent['interface'])) {
+ $selected_interfaces = explode(',', $filterent['interface']);
+ unset($selected_descs);
+ foreach ($selected_interfaces as $interface) {
+ if (isset($ifdescs[$interface])) {
+ $selected_descs[] = $ifdescs[$interface];
+ } else {
+ switch ($interface) {
+ case 'l2tp':
+ if ($config['l2tp']['mode'] == 'server') {
+ $selected_descs[] = 'L2TP VPN';
+ }
+ break;
+ case 'pptp':
+ if ($config['pptpd']['mode'] == 'server') {
+ $selected_descs[] = 'PPTP VPN';
+ }
+ break;
+ case 'pppoe':
+ if (is_pppoe_server_enabled()) {
+ $selected_descs[] = 'PPPoE Server';
+ }
+ break;
+ case 'enc0':
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ $selected_descs[] = 'IPsec';
+ }
+ break;
+ case 'openvpn':
+ if ($config['openvpn']['openvpn-server'] || $config['openvpn']['openvpn-client']) {
+ $selected_descs[] = 'OpenVPN';
+ }
+ break;
+ default:
+ $selected_descs[] = $interface;
+ break;
+ }
+ }
+ }
+
+ echo implode('<br/>', $selected_descs);
+ }
+ ?>
+ <?=$textse;?>
+ </td>
+ <?php
+ }
+ ?>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?php
+ if (isset($filterent['ipprotocol'])) {
+ switch ($filterent['ipprotocol']) {
+ case "inet":
+ echo "IPv4 ";
+ break;
+ case "inet6":
+ echo "IPv6 ";
+ break;
+ case "inet46":
+ echo "IPv4+6 ";
+ break;
+ }
+ } else {
+ echo "IPv4 ";
+ }
+ if (isset($filterent['protocol'])) {
+ echo strtoupper($filterent['protocol']);
+ if (strtoupper($filterent['protocol']) == "ICMP" && !empty($filterent['icmptype'])) {
+ echo ' <span style="cursor: help;" title="ICMP type: ' .
+ ($filterent['ipprotocol'] == "inet6" ? $icmp6types[$filterent['icmptype']] : $icmptypes[$filterent['icmptype']]) .
+ '"><u>';
+ echo $filterent['icmptype'];
+ echo '</u></span>';
+ }
+ } else {
+ echo "*";
+ }
+ ?>
+ <?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php echo $alias_src_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['source']));?><?php echo $alias_src_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php echo $alias_src_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['source']['port'])); ?><?php echo $alias_src_port_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php echo $alias_dst_span_begin;?><?php echo htmlspecialchars(pprint_address($filterent['destination'])); ?><?php echo $alias_dst_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php echo $alias_dst_port_span_begin;?><?php echo htmlspecialchars(pprint_port($filterent['destination']['port'])); ?><?php echo $alias_dst_port_span_end;?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?php if (isset($config['interfaces'][$filterent['gateway']]['descr'])) echo htmlspecialchars($config['interfaces'][$filterent['gateway']]['descr']); else echo htmlspecialchars(pprint_port($filterent['gateway'])); ?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?php
+ if (isset($filterent['ackqueue']) && isset($filterent['defaultqueue'])) {
+ $desc = $filterent['ackqueue'] ;
+ echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['ackqueue']}&amp;action=show\">{$desc}</a>";
+ $desc = $filterent['defaultqueue'];
+ echo "/<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&amp;action=show\">{$desc}</a>";
+ } else if (isset($filterent['defaultqueue'])) {
+ $desc = $filterent['defaultqueue'];
+ echo "<a href=\"firewall_shaper_queues.php?queue={$filterent['defaultqueue']}&amp;action=show\">{$desc}</a>";
+ } else {
+ echo gettext("none");
+ }
+ ?>
+ <?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <font color="black">
+ <?php if ($printicon) { ?><img src="./themes/<?= $g['theme']; ?>/images/icons/<?php echo $image; ?>.gif" title="<?php echo $alttext;?>" border="0" alt="icon" /><?php } ?><?=$textss;?><?php echo $schedule_span_begin;?><?=htmlspecialchars($filterent['sched']);?>&nbsp;<?php echo $schedule_span_end; ?><?=$textse;?>
+ </font>
+ </td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_descr_tr");
+ ?>
+ <td class="listbg descr" onclick="fr_toggle(<?=$nrules;?>)" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?=htmlspecialchars($filterent['descr']);?>&nbsp;<?=$textse;?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move before">
+ <tr>
+ <td><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17" title="<?=gettext("move selected rules before this rule"); ?>" onmouseover="fr_insline(<?=$nrules;?>, true)" onmouseout="fr_insline(<?=$nrules;?>, false)" /></td>
+ <td><a href="firewall_rules_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit rule"); ?>" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle"><a href="firewall_rules.php?act=del&amp;if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>" onclick="return confirm('Do you really want to delete this rule?')" alt="delete" /></a></td>
+ <td><a href="firewall_rules_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new rule based on this one"); ?>" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php $nrules++; endfor; ?>
+ <tr><td></td></tr>
+ </tbody>
+<?php if ($nrules == 0): ?>
+ <tr>
+ <td class="listt"></td>
+ <td class="listt"></td>
+ <?php
+ if ($_REQUEST['if'] == "FloatingRules") {
+ $ncolumns = "11";
+ } else {
+ $ncolumns = "10";
+ }
+ ?>
+ <td class="listlr" colspan=<?=$ncolumns;?> align="center" valign="middle">
+ <span class="gray">
+ <?php if ($_REQUEST['if'] == "FloatingRules"): ?>
+ <?=gettext("No floating rules are currently defined."); ?><br /><br />
+ <?php else: ?>
+ <?=gettext("No rules are currently defined for this interface"); ?><br />
+ <?=gettext("All incoming connections on this interface will be blocked until you add pass rules."); ?><br /><br />
+ <?php endif; ?>
+ <?=gettext("Click the"); ?> <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" border="0" width="17" height="17" align="middle" alt="add" /></a><?=gettext(" button to add a new rule.");?></span>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr id="fr<?=$nrules;?>">
+ <td class="list"></td>
+ <td class="list"></td>
+ <?php
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_belowtable");
+ ?>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move rules">
+ <tr>
+ <td>
+ <?php if ($nrules == 0): ?><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected rules to end");?>" border="0" alt="move" /><?php else: ?><input name="move_<?=$i;?>" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17" title="<?=gettext("move selected rules to end");?>" onmouseover="fr_insline(<?=$nrules;?>, true)" onmouseout="fr_insline(<?=$nrules;?>, false)" /><?php endif; ?>
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+<?php if ($nrules == 0): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected rules");?>" border="0" alt="delete" /><?php else: ?>
+ <input name="del" type="image" src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected rules");?>" onclick="return confirm('<?=gettext('Do you really want to delete the selected rules?');?>')" />
+<?php endif; ?>
+ </td>
+ <td>
+ <a href="firewall_rules_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add new rule");?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="icons">
+ <tr>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" alt="pass" /></td>
+ <td width="100"><?=gettext("pass");?></td>
+ <td width="14"></td>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_match.gif" width="11" height="11" alt="match" /></td>
+ <td width="100"><?=gettext("match");?></td>
+ <td width="14"></td>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" alt="block" /></td>
+ <td width="100"><?=gettext("block");?></td>
+ <td width="14"></td>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject.gif" width="11" height="11" alt="reject" /></td>
+ <td width="100"><?=gettext("reject");?></td>
+ <td width="14"></td>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log.gif" width="11" height="11" alt="log" /></td>
+ <td width="100"><?=gettext("log");?></td>
+ </tr>
+ <tr>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass_d.gif" width="11" height="11" alt="pass disabled" /></td>
+ <td class="nowrap"><?=gettext("pass (disabled)");?></td>
+ <td>&nbsp;</td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_match_d.gif" width="11" height="11" alt="match disabled" /></td>
+ <td class="nowrap"><?=gettext("match (disabled)");?></td>
+ <td>&nbsp;</td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block_d.gif" width="11" height="11" alt="block disabled" /></td>
+ <td class="nowrap"><?=gettext("block (disabled)");?></td>
+ <td>&nbsp;</td>
+ <td><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" alt="reject disabled" /></td>
+ <td class="nowrap"><?=gettext("reject (disabled)");?></td>
+ <td>&nbsp;</td>
+ <td width="16"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_log_d.gif" width="11" height="11" alt="log disabled" /></td>
+ <td class="nowrap"><?=gettext("log (disabled)");?></td>
+ </tr>
+ <tr>
+ <td colspan="10">
+ <p>&nbsp;</p>
+ <strong>
+ <span class="red"><?=gettext("Hint:");?></span>
+ </strong><br />
+ <ul>
+ <?php if ("FloatingRules" != $if): ?>
+ <li><?=gettext("Rules are evaluated on a first-match basis (i.e. " .
+ "the action of the first rule to match a packet will be executed). " .
+ "This means that if you use block rules, you'll have to pay attention " .
+ "to the rule order. Everything that isn't explicitly passed is blocked " .
+ "by default. ");?>
+ </li>
+ <?php else: ?>
+ <li><?=gettext("Floating rules are evaluated on a first-match basis (i.e. " .
+ "the action of the first rule to match a packet will be executed) only " .
+ "if the 'quick' option is checked on a rule. Otherwise they will only apply if no " .
+ "other rules match. Pay close attention to the rule order and options " .
+ "chosen. If no rule here matches, the per-interface or default rules are used. ");?>
+ </li>
+ <?php endif; ?>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td></tr>
+</table>
+<input type="hidden" name="if" value="<?=htmlspecialchars($if);?>" />
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_rules_edit.php b/src/usr/local/www/firewall_rules_edit.php
new file mode 100644
index 0000000..b0af4cc
--- /dev/null
+++ b/src/usr/local/www/firewall_rules_edit.php
@@ -0,0 +1,1946 @@
+<?php
+/* $Id$ */
+/*
+ firewall_rules_edit.php
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-rules-edit
+##|*NAME=Firewall: Rules: Edit page
+##|*DESCR=Allow access to the 'Firewall: Rules: Edit' page.
+##|*MATCH=firewall_rules_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_rules.php');
+}
+
+function is_posnumericint($arg) {
+ // Note that to be safe we do not allow any leading zero - "01", "007"
+ return (is_numericint($arg) && $arg[0] != '0' && $arg > 0);
+}
+
+function is_aoadv_used($rule_config) {
+ // Note that the user could set "tag" or "tagged" to the string "0", which is valid but empty().
+ // And if the user enters "0" in other fields, we want to present an error message, and keep the Advanced Options section open.
+ if ((isset($rule_config['allowopts'])) ||
+ (isset($rule_config['disablereplyto'])) ||
+ ($rule_config['tag'] != "") ||
+ ($rule_config['tagged'] != "") ||
+ ($rule_config['max'] != "") ||
+ ($rule_config['max-src-nodes'] != "") ||
+ ($rule_config['max-src-conn'] != "") ||
+ ($rule_config['max-src-states'] != "") ||
+ ($rule_config['max-src-conn-rate'] != "") ||
+ ($rule_config['max-src-conn-rates'] != "") ||
+ ($rule_config['statetimeout'] != "")) {
+ return true;
+ }
+ return false;
+}
+
+$ostypes = array();
+exec('/sbin/pfctl -s osfp | /usr/bin/tr \'\t\' \' \'', $ostypes);
+
+if (count($ostypes) > 2) {
+ // Remove header rows from pfctl output
+ array_shift($ostypes);
+ array_shift($ostypes);
+} else {
+ // Fall back to a default list
+ $ostypes = array(
+ "AIX",
+ "Linux",
+ "FreeBSD",
+ "NetBSD",
+ "OpenBSD",
+ "Solaris",
+ "MacOS",
+ "Windows",
+ "Novell",
+ "NMAP"
+ );
+}
+
+$specialsrcdst = explode(" ", "any (self) pptp pppoe l2tp openvpn");
+$ifdisp = get_configured_interface_with_descr();
+foreach ($ifdisp as $kif => $kdescr) {
+ $specialsrcdst[] = "{$kif}";
+ $specialsrcdst[] = "{$kif}ip";
+}
+
+if (!is_array($config['filter']['rule'])) {
+ $config['filter']['rule'] = array();
+}
+filter_rules_sort();
+$a_filter = &$config['filter']['rule'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (is_numericint($_GET['after']) || $_GET['after'] == "-1") {
+ $after = $_GET['after'];
+}
+if (isset($_POST['after']) && (is_numericint($_POST['after']) || $_POST['after'] == "-1")) {
+ $after = $_POST['after'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+ $after = $_GET['dup'];
+}
+
+if (isset($id) && $a_filter[$id]) {
+ $pconfig['interface'] = $a_filter[$id]['interface'];
+
+ if (isset($a_filter[$id]['id'])) {
+ $pconfig['ruleid'] = $a_filter[$id]['id'];
+ }
+
+ if (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created'])) {
+ $pconfig['created'] = $a_filter[$id]['created'];
+ }
+
+ if (isset($a_filter[$id]['updated']) && is_array($a_filter[$id]['updated'])) {
+ $pconfig['updated'] = $a_filter[$id]['updated'];
+ }
+
+ if (!isset($a_filter[$id]['type'])) {
+ $pconfig['type'] = "pass";
+ } else {
+ $pconfig['type'] = $a_filter[$id]['type'];
+ }
+
+ if (isset($a_filter[$id]['floating']) || $if == "FloatingRules") {
+ $pconfig['floating'] = $a_filter[$id]['floating'];
+ if (isset($a_filter[$id]['interface']) && $a_filter[$id]['interface'] <> "") {
+ $pconfig['interface'] = $a_filter[$id]['interface'];
+ }
+ }
+
+ if (isset($a_filter['floating'])) {
+ $pconfig['floating'] = "yes";
+ }
+
+ if (isset($a_filter[$id]['direction'])) {
+ $pconfig['direction'] = $a_filter[$id]['direction'];
+ }
+
+ if (isset($a_filter[$id]['ipprotocol'])) {
+ $pconfig['ipprotocol'] = $a_filter[$id]['ipprotocol'];
+ }
+
+ if (isset($a_filter[$id]['protocol'])) {
+ $pconfig['proto'] = $a_filter[$id]['protocol'];
+ } else {
+ $pconfig['proto'] = "any";
+ }
+
+ if ($a_filter[$id]['protocol'] == "icmp") {
+ $pconfig['icmptype'] = $a_filter[$id]['icmptype'];
+ }
+
+ address_to_pconfig($a_filter[$id]['source'], $pconfig['src'],
+ $pconfig['srcmask'], $pconfig['srcnot'],
+ $pconfig['srcbeginport'], $pconfig['srcendport']);
+
+ if ($a_filter[$id]['os'] <> "") {
+ $pconfig['os'] = $a_filter[$id]['os'];
+ }
+
+ address_to_pconfig($a_filter[$id]['destination'], $pconfig['dst'],
+ $pconfig['dstmask'], $pconfig['dstnot'],
+ $pconfig['dstbeginport'], $pconfig['dstendport']);
+
+ if ($a_filter[$id]['dscp'] <> "") {
+ $pconfig['dscp'] = $a_filter[$id]['dscp'];
+ }
+
+ $pconfig['disabled'] = isset($a_filter[$id]['disabled']);
+ $pconfig['log'] = isset($a_filter[$id]['log']);
+ $pconfig['descr'] = $a_filter[$id]['descr'];
+
+ if (isset($a_filter[$id]['tcpflags_any'])) {
+ $pconfig['tcpflags_any'] = true;
+ } else {
+ if (isset($a_filter[$id]['tcpflags1']) && $a_filter[$id]['tcpflags1'] <> "") {
+ $pconfig['tcpflags1'] = $a_filter[$id]['tcpflags1'];
+ }
+ if (isset($a_filter[$id]['tcpflags2']) && $a_filter[$id]['tcpflags2'] <> "") {
+ $pconfig['tcpflags2'] = $a_filter[$id]['tcpflags2'];
+ }
+ }
+
+ if (isset($a_filter[$id]['tag']) && $a_filter[$id]['tag'] <> "") {
+ $pconfig['tag'] = $a_filter[$id]['tag'];
+ }
+ if (isset($a_filter[$id]['tagged']) && $a_filter[$id]['tagged'] <> "") {
+ $pconfig['tagged'] = $a_filter[$id]['tagged'];
+ }
+ if (isset($a_filter[$id]['quick']) && $a_filter[$id]['quick']) {
+ $pconfig['quick'] = $a_filter[$id]['quick'];
+ }
+ if (isset($a_filter[$id]['allowopts'])) {
+ $pconfig['allowopts'] = true;
+ }
+ if (isset($a_filter[$id]['disablereplyto'])) {
+ $pconfig['disablereplyto'] = true;
+ }
+
+ /* advanced */
+ $pconfig['max'] = $a_filter[$id]['max'];
+ $pconfig['max-src-nodes'] = $a_filter[$id]['max-src-nodes'];
+ $pconfig['max-src-conn'] = $a_filter[$id]['max-src-conn'];
+ $pconfig['max-src-states'] = $a_filter[$id]['max-src-states'];
+ $pconfig['statetype'] = $a_filter[$id]['statetype'];
+ $pconfig['statetimeout'] = $a_filter[$id]['statetimeout'];
+ $pconfig['nopfsync'] = isset($a_filter[$id]['nopfsync']);
+
+ /* advanced - nosync */
+ $pconfig['nosync'] = isset($a_filter[$id]['nosync']);
+
+ /* advanced - new connection per second banning*/
+ $pconfig['max-src-conn-rate'] = $a_filter[$id]['max-src-conn-rate'];
+ $pconfig['max-src-conn-rates'] = $a_filter[$id]['max-src-conn-rates'];
+
+ /* Multi-WAN next-hop support */
+ $pconfig['gateway'] = $a_filter[$id]['gateway'];
+
+ /* Shaper support */
+ $pconfig['defaultqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['defaultqueue']);
+ $pconfig['ackqueue'] = (($a_filter[$id]['ackqueue'] == "none") ? '' : $a_filter[$id]['ackqueue']);
+ $pconfig['dnpipe'] = (($a_filter[$id]['dnpipe'] == "none") ? '' : $a_filter[$id]['dnpipe']);
+ $pconfig['pdnpipe'] = (($a_filter[$id]['pdnpipe'] == "none") ? '' : $a_filter[$id]['pdnpipe']);
+ $pconfig['l7container'] = (($a_filter[$id]['l7container'] == "none") ? '' : $a_filter[$id]['l7container']);
+
+ //schedule support
+ $pconfig['sched'] = (($a_filter[$id]['sched'] == "none") ? '' : $a_filter[$id]['sched']);
+ $pconfig['vlanprio'] = (($a_filter[$id]['vlanprio'] == "none") ? '' : $a_filter[$id]['vlanprio']);
+ $pconfig['vlanprioset'] = (($a_filter[$id]['vlanprioset'] == "none") ? '' : $a_filter[$id]['vlanprioset']);
+ if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) {
+ $pconfig['associated-rule-id'] = $a_filter[$id]['associated-rule-id'];
+ }
+
+ $pconfig['tracker'] = $a_filter[$id]['tracker'];
+
+} else {
+ /* defaults */
+ if ($_GET['if']) {
+ $pconfig['interface'] = $_GET['if'];
+ }
+ $pconfig['type'] = "pass";
+ $pconfig['src'] = "any";
+ $pconfig['dst'] = "any";
+}
+/* Allow the FloatingRules to work */
+$if = $pconfig['interface'];
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+}
+
+read_altq_config(); /* XXX: */
+$qlist =& get_unique_queue_list();
+read_dummynet_config(); /* XXX: */
+$dnqlist =& get_unique_dnqueue_list();
+read_layer7_config();
+$l7clist =& get_l7_unique_list();
+$a_gatewaygroups = return_gateway_groups_array();
+
+if ($_POST) {
+ unset($input_errors);
+
+ if (isset($a_filter[$id]['associated-rule-id'])) {
+ $_POST['proto'] = $pconfig['proto'];
+ if ($pconfig['proto'] == "icmp") {
+ $_POST['icmptype'] = $pconfig['icmptype'];
+ }
+ }
+
+ if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "")) {
+ if (is_array($config['gateways']['gateway_group'])) {
+ foreach ($config['gateways']['gateway_group'] as $gw_group) {
+ if ($gw_group['name'] == $_POST['gateway']) {
+ $family = $a_gatewaygroups[$_POST['gateway']]['ipprotocol'];
+ if ($_POST['ipprotocol'] == $family) {
+ continue;
+ }
+ if (($_POST['ipprotocol'] == "inet46") && ($_POST['ipprotocol'] != $family)) {
+ $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6");
+ }
+ if (($_POST['ipprotocol'] == "inet6") && ($_POST['ipprotocol'] != $family)) {
+ $input_errors[] = gettext("You can not assign an IPv4 gateway group on IPv6 Address Family rule");
+ }
+ if (($_POST['ipprotocol'] == "inet") && ($_POST['ipprotocol'] != $family)) {
+ $input_errors[] = gettext("You can not assign an IPv6 gateway group on IPv4 Address Family rule");
+ }
+ }
+ }
+ }
+ }
+ if (($_POST['ipprotocol'] <> "") && ($_POST['gateway'] <> "") && (is_ipaddr(lookup_gateway_ip_by_name($_POST['gateway'])))) {
+ if (($_POST['ipprotocol'] == "inet46") && ($_POST['gateway'] <> "")) {
+ $input_errors[] = gettext("You can not assign a gateway to a rule that applies to IPv4 and IPv6");
+ }
+ if (($_POST['ipprotocol'] == "inet6") && (!is_ipaddrv6(lookup_gateway_ip_by_name($_POST['gateway'])))) {
+ $input_errors[] = gettext("You can not assign an IPv4 Gateway to an IPv6 Filter rule");
+ }
+ if (($_POST['ipprotocol'] == "inet") && (!is_ipaddrv4(lookup_gateway_ip_by_name($_POST['gateway'])))) {
+ $input_errors[] = gettext("You can not assign an IPv6 Gateway to an IPv4 Filter rule");
+ }
+ }
+ if (($_POST['proto'] == "icmp") && ($_POST['icmptype'] <> "")) {
+ if ($_POST['ipprotocol'] == "inet46") {
+ $input_errors[] = gettext("You can not assign a ICMP type to a rule that applies to IPv4 and IPv6");
+ }
+ }
+
+ if (($_POST['proto'] != "tcp") && ($_POST['proto'] != "udp") && ($_POST['proto'] != "tcp/udp")) {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ } else {
+ if ($_POST['srcbeginport_cust'] && !$_POST['srcbeginport']) {
+ $_POST['srcbeginport'] = trim($_POST['srcbeginport_cust']);
+ }
+ if ($_POST['srcendport_cust'] && !$_POST['srcendport']) {
+ $_POST['srcendport'] = trim($_POST['srcendport_cust']);
+ }
+ if ($_POST['srcbeginport'] == "any") {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ } else {
+ if (!$_POST['srcendport']) {
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ }
+ }
+ if ($_POST['srcendport'] == "any") {
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ }
+
+ if ($_POST['dstbeginport_cust'] && !$_POST['dstbeginport']) {
+ $_POST['dstbeginport'] = trim($_POST['dstbeginport_cust']);
+ }
+ if ($_POST['dstendport_cust'] && !$_POST['dstendport']) {
+ $_POST['dstendport'] = trim($_POST['dstendport_cust']);
+ }
+
+ if ($_POST['dstbeginport'] == "any") {
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ } else {
+ if (!$_POST['dstendport']) {
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ }
+ }
+ if ($_POST['dstendport'] == "any") {
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ }
+ }
+
+ if (is_specialnet($_POST['srctype'])) {
+ $_POST['src'] = $_POST['srctype'];
+ $_POST['srcmask'] = 0;
+ } else if ($_POST['srctype'] == "single") {
+ if (is_ipaddrv6($_POST['src'])) {
+ $_POST['srcmask'] = 128;
+ } else {
+ $_POST['srcmask'] = 32;
+ }
+ }
+ if (is_specialnet($_POST['dsttype'])) {
+ $_POST['dst'] = $_POST['dsttype'];
+ $_POST['dstmask'] = 0;
+ } else if ($_POST['dsttype'] == "single") {
+ if (is_ipaddrv6($_POST['dst'])) {
+ $_POST['dstmask'] = 128;
+ } else {
+ $_POST['dstmask'] = 32;
+ }
+ }
+
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "type proto");
+ if (isset($a_filter[$id]['associated-rule-id']) === false) {
+ $reqdfields[] = "src";
+ $reqdfields[] = "dst";
+ }
+ $reqdfieldsn = explode(",", "Type,Protocol");
+ if (isset($a_filter[$id]['associated-rule-id']) === false) {
+ $reqdfieldsn[] = "Source";
+ $reqdfieldsn[] = "Destination";
+ }
+
+ if ($_POST['statetype'] == "modulate state" or $_POST['statetype'] == "synproxy state") {
+ if ($_POST['proto'] != "tcp") {
+ $input_errors[] = sprintf(gettext("%s is only valid with protocol TCP."), $_POST['statetype']);
+ }
+ if (($_POST['statetype'] == "synproxy state") && ($_POST['gateway'] != "")) {
+ $input_errors[] = sprintf(gettext("%s is only valid if the gateway is set to 'default'."), $_POST['statetype']);
+ }
+ }
+
+ if (isset($a_filter[$id]['associated-rule-id']) === false &&
+ (!(is_specialnet($_POST['srctype']) || ($_POST['srctype'] == "single")))) {
+ $reqdfields[] = "srcmask";
+ $reqdfieldsn[] = "Source bit count";
+ }
+ if (isset($a_filter[$id]['associated-rule-id']) === false &&
+ (!(is_specialnet($_POST['dsttype']) || ($_POST['dsttype'] == "single")))) {
+ $reqdfields[] = "dstmask";
+ $reqdfieldsn[] = gettext("Destination bit count");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$_POST['srcbeginport']) {
+ $_POST['srcbeginport'] = 0;
+ $_POST['srcendport'] = 0;
+ }
+ if (!$_POST['dstbeginport']) {
+ $_POST['dstbeginport'] = 0;
+ $_POST['dstendport'] = 0;
+ }
+
+ if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginposrt']);
+ }
+ if ($_POST['srcendport'] && !is_portoralias($_POST['srcendport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid end source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcendport']);
+ }
+ if ($_POST['dstbeginport'] && !is_portoralias($_POST['dstbeginport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid start destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstbeginport']);
+ }
+ if ($_POST['dstendport'] && !is_portoralias($_POST['dstendport'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid end destination port. It must be a port alias or integer between 1 and 65535."), $_POST['dstendport']);
+ }
+ if (!$_POST['srcbeginport_cust'] && $_POST['srcendport_cust']) {
+ if (is_alias($_POST['srcendport_cust'])) {
+ $input_errors[] = 'If you put port alias in Source port range to: field you must put the same port alias in from: field';
+ }
+ }
+ if ($_POST['srcbeginport_cust'] && $_POST['srcendport_cust']) {
+ if (is_alias($_POST['srcendport_cust']) && is_alias($_POST['srcendport_cust']) && $_POST['srcbeginport_cust'] != $_POST['srcendport_cust']) {
+ $input_errors[] = 'The same port alias must be used in Source port range from: and to: fields';
+ }
+ if ((is_alias($_POST['srcbeginport_cust']) && (!is_alias($_POST['srcendport_cust']) && $_POST['srcendport_cust'] != '')) ||
+ ((!is_alias($_POST['srcbeginport_cust']) && $_POST['srcbeginport_cust'] != '') && is_alias($_POST['srcendport_cust']))) {
+ $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Source port range from: and to: field';
+ }
+ }
+ if (!$_POST['dstbeginport_cust'] && $_POST['dstendport_cust']) {
+ if (is_alias($_POST['dstendport_cust'])) {
+ $input_errors[] = 'If you put port alias in Destination port range to: field you must put the same port alias in from: field';
+ }
+ }
+ if ($_POST['dstbeginport_cust'] && $_POST['dstendport_cust']) {
+ if (is_alias($_POST['dstendport_cust']) && is_alias($_POST['dstendport_cust']) && $_POST['dstbeginport_cust'] != $_POST['dstendport_cust']) {
+ $input_errors[] = 'The same port alias must be used in Destination port range from: and to: fields';
+ }
+ if ((is_alias($_POST['dstbeginport_cust']) && (!is_alias($_POST['dstendport_cust']) && $_POST['dstendport_cust'] != '')) ||
+ ((!is_alias($_POST['dstbeginport_cust']) && $_POST['dstbeginport_cust'] != '') && is_alias($_POST['dstendport_cust']))) {
+ $input_errors[] = 'You cannot specify numbers and port aliases at the same time in Destination port range from: and to: field';
+ }
+ }
+
+ if ($_POST['src']) {
+ $_POST['src'] = trim($_POST['src']);
+ }
+ if ($_POST['dst']) {
+ $_POST['dst'] = trim($_POST['dst']);
+ }
+
+ /* if user enters an alias and selects "network" then disallow. */
+ if ($_POST['srctype'] == "network") {
+ if (is_alias($_POST['src'])) {
+ $input_errors[] = gettext("You must specify single host or alias for alias entries.");
+ }
+ }
+ if ($_POST['dsttype'] == "network") {
+ if (is_alias($_POST['dst'])) {
+ $input_errors[] = gettext("You must specify single host or alias for alias entries.");
+ }
+ }
+
+ if (!is_specialnet($_POST['srctype'])) {
+ if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']);
+ }
+ if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) {
+ $input_errors[] = gettext("A valid source bit count must be specified.");
+ }
+ }
+ if (!is_specialnet($_POST['dsttype'])) {
+ if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) {
+ $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']);
+ }
+ if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) {
+ $input_errors[] = gettext("A valid destination bit count must be specified.");
+ }
+ }
+ if ((is_ipaddr($_POST['src']) && is_ipaddr($_POST['dst']))) {
+ if (!validate_address_family($_POST['src'], $_POST['dst'])) {
+ $input_errors[] = sprintf(gettext("The Source IP address %s Address Family differs from the destination %s."), $_POST['src'], $_POST['dst']);
+ }
+ if ((is_ipaddrv6($_POST['src']) || is_ipaddrv6($_POST['dst'])) && ($_POST['ipprotocol'] == "inet")) {
+ $input_errors[] = gettext("You can not use IPv6 addresses in IPv4 rules.");
+ }
+ if ((is_ipaddrv4($_POST['src']) || is_ipaddrv4($_POST['dst'])) && ($_POST['ipprotocol'] == "inet6")) {
+ $input_errors[] = gettext("You can not use IPv4 addresses in IPv6 rules.");
+ }
+ }
+
+ if ((is_ipaddr($_POST['src']) || is_ipaddr($_POST['dst'])) && ($_POST['ipprotocol'] == "inet46")) {
+ $input_errors[] = gettext("You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules.");
+ }
+
+ if ($_POST['srcbeginport'] > $_POST['srcendport']) {
+ /* swap */
+ $tmp = $_POST['srcendport'];
+ $_POST['srcendport'] = $_POST['srcbeginport'];
+ $_POST['srcbeginport'] = $tmp;
+ }
+ if ($_POST['dstbeginport'] > $_POST['dstendport']) {
+ /* swap */
+ $tmp = $_POST['dstendport'];
+ $_POST['dstendport'] = $_POST['dstbeginport'];
+ $_POST['dstbeginport'] = $tmp;
+ }
+ if ($_POST['os']) {
+ if ($_POST['proto'] != "tcp") {
+ $input_errors[] = gettext("OS detection is only valid with protocol TCP.");
+ }
+ if (!in_array($_POST['os'], $ostypes)) {
+ $input_errors[] = gettext("Invalid OS detection selection. Please select a valid OS.");
+ }
+ }
+
+ if ($_POST['ackqueue'] != "") {
+ if ($_POST['defaultqueue'] == "") {
+ $input_errors[] = gettext("You have to select a queue when you select an acknowledge queue too.");
+ } else if ($_POST['ackqueue'] == $_POST['defaultqueue']) {
+ $input_errors[] = gettext("Acknowledge queue and Queue cannot be the same.");
+ }
+ }
+ if (isset($_POST['floating']) && $_POST['pdnpipe'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) {
+ $input_errors[] = gettext("You can not use limiters in Floating rules without choosing a direction.");
+ }
+ if (isset($_POST['floating']) && $_POST['gateway'] != "" && (empty($_POST['direction']) || $_POST['direction'] == "any")) {
+ $input_errors[] = gettext("You can not use gateways in Floating rules without choosing a direction.");
+ }
+ if ($_POST['pdnpipe'] && $_POST['pdnpipe'] != "") {
+ if ($_POST['dnpipe'] == "") {
+ $input_errors[] = gettext("You must select a queue for the In direction before selecting one for Out too.");
+ } else if ($_POST['pdnpipe'] == $_POST['dnpipe']) {
+ $input_errors[] = gettext("In and Out Queue cannot be the same.");
+ } else if ($dnqlist[$_POST['pdnpipe']][0] == "?" && $dnqlist[$_POST['dnpipe']][0] <> "?") {
+ $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. Both must be from the same type.");
+ } else if ($dnqlist[$_POST['dnpipe']][0] == "?" && $dnqlist[$_POST['pdnpipe']][0] <> "?") {
+ $input_errors[] = gettext("You cannot select one queue and one virtual interface for IN and Out. Both must be from the same type.");
+ }
+ if ($_POST['direction'] == "out" && empty($_POST['gateway'])) {
+ $input_errors[] = gettext("Please select a gateway, normally the interface selected gateway, so the limiters work correctly");
+ }
+ }
+ if (!empty($_POST['ruleid']) && !ctype_digit($_POST['ruleid'])) {
+ $input_errors[] = gettext('ID must be an integer');
+ }
+ if ($_POST['l7container'] && $_POST['l7container'] != "") {
+ if (!($_POST['proto'] == "tcp" || $_POST['proto'] == "udp" || $_POST['proto'] == "tcp/udp")) {
+ $input_errors[] = gettext("You can only select a layer7 container for TCP and/or UDP protocols");
+ }
+ if ($_POST['type'] <> "pass") {
+ $input_errors[] = gettext("You can only select a layer7 container for Pass type rules.");
+ }
+ }
+
+ if (!in_array($_POST['proto'], array("tcp", "tcp/udp"))) {
+ if (!empty($_POST['max-src-conn'])) {
+ $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for TCP protocol.");
+ }
+ if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
+ $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for TCP protocol.");
+ }
+ if (!empty($_POST['statetimeout'])) {
+ $input_errors[] = gettext("You can only specify the state timeout (advanced option) for TCP protocol.");
+ }
+ }
+
+ if ($_POST['type'] <> "pass") {
+ if (!empty($_POST['max'])) {
+ $input_errors[] = gettext("You can only specify the maximum state entries (advanced option) for Pass type rules.");
+ }
+ if (!empty($_POST['max-src-nodes'])) {
+ $input_errors[] = gettext("You can only specify the maximum number of unique source hosts (advanced option) for Pass type rules.");
+ }
+ if (!empty($_POST['max-src-conn'])) {
+ $input_errors[] = gettext("You can only specify the maximum number of established connections per host (advanced option) for Pass type rules.");
+ }
+ if (!empty($_POST['max-src-states'])) {
+ $input_errors[] = gettext("You can only specify the maximum state entries per host (advanced option) for Pass type rules.");
+ }
+ if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
+ $input_errors[] = gettext("You can only specify the maximum new connections per host / per second(s) (advanced option) for Pass type rules.");
+ }
+ if (!empty($_POST['statetimeout'])) {
+ $input_errors[] = gettext("You can only specify the state timeout (advanced option) for Pass type rules.");
+ }
+ }
+
+ if (($_POST['statetype'] == "none") && (empty($_POST['l7container']))) {
+ if (!empty($_POST['max'])) {
+ $input_errors[] = gettext("You cannot specify the maximum state entries (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ if (!empty($_POST['max-src-nodes'])) {
+ $input_errors[] = gettext("You cannot specify the maximum number of unique source hosts (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ if (!empty($_POST['max-src-conn'])) {
+ $input_errors[] = gettext("You cannot specify the maximum number of established connections per host (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ if (!empty($_POST['max-src-states'])) {
+ $input_errors[] = gettext("You cannot specify the maximum state entries per host (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ if (!empty($_POST['max-src-conn-rate']) || !empty($_POST['max-src-conn-rates'])) {
+ $input_errors[] = gettext("You cannot specify the maximum new connections per host / per second(s) (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ if (!empty($_POST['statetimeout'])) {
+ $input_errors[] = gettext("You cannot specify the state timeout (advanced option) if statetype is none and no L7 container is selected.");
+ }
+ }
+
+ if (($_POST['max'] != "") && !is_posnumericint($_POST['max'])) {
+ $input_errors[] = gettext("Maximum state entries (advanced option) must be a positive integer");
+ }
+
+ if (($_POST['max-src-nodes'] != "") && !is_posnumericint($_POST['max-src-nodes'])) {
+ $input_errors[] = gettext("Maximum number of unique source hosts (advanced option) must be a positive integer");
+ }
+
+ if (($_POST['max-src-conn'] != "") && !is_posnumericint($_POST['max-src-conn'])) {
+ $input_errors[] = gettext("Maximum number of established connections per host (advanced option) must be a positive integer");
+ }
+
+ if (($_POST['max-src-states'] != "") && !is_posnumericint($_POST['max-src-states'])) {
+ $input_errors[] = gettext("Maximum state entries per host (advanced option) must be a positive integer");
+ }
+
+ if (($_POST['max-src-conn-rate'] != "") && !is_posnumericint($_POST['max-src-conn-rate'])) {
+ $input_errors[] = gettext("Maximum new connections per host / per second(s) (advanced option) must be a positive integer");
+ }
+
+ if (($_POST['statetimeout'] != "") && !is_posnumericint($_POST['statetimeout'])) {
+ $input_errors[] = gettext("State timeout (advanced option) must be a positive integer");
+ }
+
+ if ((($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] == "")) ||
+ (($_POST['max-src-conn-rate'] == "" and $_POST['max-src-conn-rates'] <> ""))) {
+ $input_errors[] = gettext("Both maximum new connections per host and the interval (per second(s)) must be specified");
+ }
+
+ if (!$_POST['tcpflags_any']) {
+ $settcpflags = array();
+ $outoftcpflags = array();
+ foreach ($tcpflags as $tcpflag) {
+ if ($_POST['tcpflags1_' . $tcpflag] == "on") {
+ $settcpflags[] = $tcpflag;
+ }
+ if ($_POST['tcpflags2_' . $tcpflag] == "on") {
+ $outoftcpflags[] = $tcpflag;
+ }
+ }
+ if (empty($outoftcpflags) && !empty($settcpflags)) {
+ $input_errors[] = gettext("If you specify TCP flags that should be set you should specify out of which flags as well.");
+ }
+ }
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/input_validation");
+
+ if (!$input_errors) {
+ $filterent = array();
+ $filterent['id'] = $_POST['ruleid']>0?$_POST['ruleid']:'';
+
+ $filterent['tracker'] = empty($_POST['tracker']) ? (int)microtime(true) : $_POST['tracker'];
+
+ $filterent['type'] = $_POST['type'];
+ if (isset($_POST['interface'])) {
+ $filterent['interface'] = $_POST['interface'];
+ }
+
+ if (isset($_POST['ipprotocol'])) {
+ $filterent['ipprotocol'] = $_POST['ipprotocol'];
+ }
+
+ if ($_POST['tcpflags_any']) {
+ $filterent['tcpflags_any'] = true;
+ } else {
+ $settcpflags = array();
+ $outoftcpflags = array();
+ foreach ($tcpflags as $tcpflag) {
+ if ($_POST['tcpflags1_' . $tcpflag] == "on") {
+ $settcpflags[] = $tcpflag;
+ }
+ if ($_POST['tcpflags2_' . $tcpflag] == "on") {
+ $outoftcpflags[] = $tcpflag;
+ }
+ }
+ if (!empty($outoftcpflags)) {
+ $filterent['tcpflags2'] = join(",", $outoftcpflags);
+ if (!empty($settcpflags)) {
+ $filterent['tcpflags1'] = join(",", $settcpflags);
+ }
+ }
+ }
+
+ if (isset($_POST['tag'])) {
+ $filterent['tag'] = $_POST['tag'];
+ }
+ if (isset($_POST['tagged'])) {
+ $filterent['tagged'] = $_POST['tagged'];
+ }
+ if ($if == "FloatingRules" || isset($_POST['floating'])) {
+ $filterent['direction'] = $_POST['direction'];
+ if (isset($_POST['quick']) && $_POST['quick'] <> "") {
+ $filterent['quick'] = $_POST['quick'];
+ }
+ $filterent['floating'] = "yes";
+ if (isset($_POST['interface']) && count($_POST['interface']) > 0) {
+ $filterent['interface'] = implode(",", $_POST['interface']);
+ }
+ }
+
+ /* Advanced options */
+ if ($_POST['allowopts'] == "yes") {
+ $filterent['allowopts'] = true;
+ } else {
+ unset($filterent['allowopts']);
+ }
+ if ($_POST['disablereplyto'] == "yes") {
+ $filterent['disablereplyto'] = true;
+ } else {
+ unset($filterent['disablereplyto']);
+ }
+ $filterent['max'] = $_POST['max'];
+ $filterent['max-src-nodes'] = $_POST['max-src-nodes'];
+ $filterent['max-src-conn'] = $_POST['max-src-conn'];
+ $filterent['max-src-states'] = $_POST['max-src-states'];
+ $filterent['statetimeout'] = $_POST['statetimeout'];
+ $filterent['statetype'] = $_POST['statetype'];
+ $filterent['os'] = $_POST['os'];
+ if ($_POST['nopfsync'] <> "") {
+ $filterent['nopfsync'] = true;
+ } else {
+ unset($filterent['nopfsync']);
+ }
+
+ /* Nosync directive - do not xmlrpc sync this item */
+ if ($_POST['nosync'] <> "") {
+ $filterent['nosync'] = true;
+ } else {
+ unset($filterent['nosync']);
+ }
+
+ /* unless both values are provided, unset the values - ticket #650 */
+ if ($_POST['max-src-conn-rate'] <> "" and $_POST['max-src-conn-rates'] <> "") {
+ $filterent['max-src-conn-rate'] = $_POST['max-src-conn-rate'];
+ $filterent['max-src-conn-rates'] = $_POST['max-src-conn-rates'];
+ } else {
+ unset($filterent['max-src-conn-rate']);
+ unset($filterent['max-src-conn-rates']);
+ }
+
+ if ($_POST['proto'] != "any") {
+ $filterent['protocol'] = $_POST['proto'];
+ } else {
+ unset($filterent['protocol']);
+ }
+
+ if ($_POST['proto'] == "icmp") {
+ if ($filterent['ipprotocol'] == 'inet6' && $_POST['icmp6type']) {
+ $filterent['icmptype'] = $_POST['icmp6type'];
+ } else if ($filterent['ipprotocol'] != 'inet6' && $_POST['icmptype']) {
+ $filterent['icmptype'] = $_POST['icmptype'];
+ } else {
+ unset($filterent['icmptype']);
+ }
+ } else {
+ unset($filterent['icmptype']);
+ }
+
+ pconfig_to_address($filterent['source'], $_POST['src'],
+ $_POST['srcmask'], $_POST['srcnot'],
+ $_POST['srcbeginport'], $_POST['srcendport']);
+
+ pconfig_to_address($filterent['destination'], $_POST['dst'],
+ $_POST['dstmask'], $_POST['dstnot'],
+ $_POST['dstbeginport'], $_POST['dstendport']);
+
+ if ($_POST['disabled']) {
+ $filterent['disabled'] = true;
+ } else {
+ unset($filterent['disabled']);
+ }
+
+ if ($_POST['dscp']) {
+ $filterent['dscp'] = $_POST['dscp'];
+ }
+
+ if ($_POST['log']) {
+ $filterent['log'] = true;
+ } else {
+ unset($filterent['log']);
+ }
+ strncpy($filterent['descr'], $_POST['descr'], 52);
+
+ if ($_POST['gateway'] != "") {
+ $filterent['gateway'] = $_POST['gateway'];
+ }
+
+ if ($_POST['defaultqueue'] != "") {
+ $filterent['defaultqueue'] = $_POST['defaultqueue'];
+ if ($_POST['ackqueue'] != "") {
+ $filterent['ackqueue'] = $_POST['ackqueue'];
+ }
+ }
+
+ if ($_POST['dnpipe'] != "") {
+ $filterent['dnpipe'] = $_POST['dnpipe'];
+ if ($_POST['pdnpipe'] != "") {
+ $filterent['pdnpipe'] = $_POST['pdnpipe'];
+ }
+ }
+
+ if ($_POST['l7container'] != "") {
+ $filterent['l7container'] = $_POST['l7container'];
+ }
+
+ if ($_POST['sched'] != "") {
+ $filterent['sched'] = $_POST['sched'];
+ }
+
+ if ($_POST['vlanprio'] != "") {
+ $filterent['vlanprio'] = $_POST['vlanprio'];
+ }
+ if ($_POST['vlanprioset'] != "") {
+ $filterent['vlanprioset'] = $_POST['vlanprioset'];
+ }
+
+ // If we have an associated nat rule, make sure the source and destination doesn't change
+ if (isset($a_filter[$id]['associated-rule-id'])) {
+ $filterent['interface'] = $a_filter[$id]['interface'];
+ if (isset($a_filter[$id]['protocol'])) {
+ $filterent['protocol'] = $a_filter[$id]['protocol'];
+ } else if (isset($filterent['protocol'])) {
+ unset($filterent['protocol']);
+ }
+ if ($a_filter[$id]['protocol'] == "icmp" && $a_filter[$id]['icmptype']) {
+ $filterent['icmptype'] = $a_filter[$id]['icmptype'];
+ } else if (isset($filterent['icmptype'])) {
+ unset($filterent['icmptype']);
+ }
+
+ $filterent['source'] = $a_filter[$id]['source'];
+ $filterent['destination'] = $a_filter[$id]['destination'];
+ $filterent['associated-rule-id'] = $a_filter[$id]['associated-rule-id'];
+ }
+
+ if (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created'])) {
+ $filterent['created'] = $a_filter[$id]['created'];
+ }
+
+ $filterent['updated'] = make_config_revision_entry();
+
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_write_config");
+
+ if (isset($id) && $a_filter[$id]) {
+ $a_filter[$id] = $filterent;
+ } else {
+ $filterent['created'] = make_config_revision_entry();
+ if (is_numeric($after)) {
+ array_splice($a_filter, $after+1, 0, array($filterent));
+ } else {
+ $a_filter[] = $filterent;
+ }
+ }
+
+ filter_rules_sort();
+
+ if (write_config()) {
+ mark_subsystem_dirty('filter');
+ }
+
+ if (isset($_POST['floating'])) {
+ header("Location: firewall_rules.php?if=FloatingRules");
+ } else {
+ header("Location: firewall_rules.php?if=" . htmlspecialchars($_POST['interface']));
+ }
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Rules"), gettext("Edit"));
+$shortcut_section = "firewall";
+
+$closehead = false;
+
+$page_filename = "firewall_rules_edit.php";
+include("head.inc");
+
+?>
+<link rel="stylesheet" href="/javascript/chosen/chosen.css" />
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<script src="/javascript/chosen/chosen.jquery.js" type="text/javascript"></script>
+<?php include("fbegin.inc"); ?>
+<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_input_errors"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="firewall_rules_edit.php" method="post" name="iform" id="iform">
+<input type='hidden' name="ruleid" value="<?=(isset($pconfig['ruleid'])&&$pconfig['ruleid']>0)?htmlspecialchars($pconfig['ruleid']):''?>" />
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall rules edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Firewall rule");?></td>
+ </tr>
+<?php
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphpearly");
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Action");?></td>
+ <td width="78%" class="vtable">
+ <select name="type" class="formselect">
+ <?php $types = explode(" ", "Pass Block Reject"); foreach ($types as $type): ?>
+ <option value="<?=strtolower($type);?>" <?php if (strtolower($type) == strtolower($pconfig['type'])) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($type);?>
+ </option>
+ <?php endforeach; ?>
+<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
+ <option value="match" <?php if ("match" == strtolower($pconfig['type'])) echo "selected=\"selected\""; ?>>Match</option>
+<?php endif; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Choose what to do with packets that match the criteria specified below.");?> <br />
+ <?=gettext("Hint: the difference between block and reject is that with reject, a packet (TCP RST or ICMP port unreachable for UDP) is returned to the sender, whereas with block the packet is dropped silently. In either case, the original packet is discarded.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this rule");?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list.");?></span>
+ </td>
+ </tr>
+<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">
+ <?=gettext("Quick");?>
+ </td>
+ <td width="78%" class="vtable">
+ <input name="quick" type="checkbox" id="quick" value="yes" <?php if ($pconfig['quick']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Apply the action immediately on match.");?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option if you need to apply this action to traffic that matches this rule immediately.");?></span>
+ </td>
+ </tr>
+<?php endif; ?>
+<?php $edit_disabled = ""; ?>
+<?php if (isset($pconfig['associated-rule-id'])): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Associated filter rule");?></td>
+ <td width="78%" class="vtable">
+ <span class="red"><strong><?=gettext("Note: ");?></strong></span><?=gettext("This is associated to a NAT rule.");?><br />
+ <?=gettext("You cannot edit the interface, protocol, source, or destination of associated filter rules.");?><br />
+ <br />
+ <?php
+ $edit_disabled = "disabled";
+ if (is_array($config['nat']['rule'])) {
+ foreach ($config['nat']['rule'] as $index => $nat_rule) {
+ if (isset($nat_rule['associated-rule-id']) && $nat_rule['associated-rule-id'] == $pconfig['associated-rule-id']) {
+ echo "<a href=\"firewall_nat_edit.php?id={$index}\">" . gettext("View the NAT rule") . "</a><br />";
+ break;
+ }
+ }
+ }
+ echo "<input name='associated-rule-id' id='associated-rule-id' type='hidden' value='{$pconfig['associated-rule-id']}' />";
+ if (!empty($pconfig['interface'])) {
+ echo "<input name='interface' id='interface' type='hidden' value='{$pconfig['interface']}' />";
+ }
+ ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ editenabled = 0;
+ //]]>
+ </script>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="78%" class="vtable">
+<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
+ <select name="interface[]" title="Select interfaces..." multiple="multiple" style="width:350px;" class="chzn-select" tabindex="2" <?=$edit_disabled;?>>
+<?php else: ?>
+ <select name="interface" class="formselect" <?=$edit_disabled;?>>
+<?php endif;
+ /* add group interfaces */
+ if (is_array($config['ifgroups']['ifgroupentry'])) {
+ foreach ($config['ifgroups']['ifgroupentry'] as $ifgen) {
+ if (have_ruleint_access($ifgen['ifname'])) {
+ $interfaces[$ifgen['ifname']] = $ifgen['ifname'];
+ }
+ }
+ }
+ $ifdescs = get_configured_interface_with_descr();
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_interfaces_edit");
+ foreach ($ifdescs as $ifent => $ifdesc) {
+ if (have_ruleint_access($ifent)) {
+ $interfaces[$ifent] = $ifdesc;
+ }
+ }
+ if ($config['l2tp']['mode'] == "server") {
+ if (have_ruleint_access("l2tp")) {
+ $interfaces['l2tp'] = "L2TP VPN";
+ }
+ }
+ if ($config['pptpd']['mode'] == "server") {
+ if (have_ruleint_access("pptp")) {
+ $interfaces['pptp'] = "PPTP VPN";
+ }
+ }
+
+ if (is_pppoe_server_enabled() && have_ruleint_access("pppoe")) {
+ $interfaces['pppoe'] = "PPPoE Server";
+ }
+ /* add ipsec interfaces */
+ if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ if (have_ruleint_access("enc0")) {
+ $interfaces["enc0"] = "IPsec";
+ }
+ }
+ /* add openvpn/tun interfaces */
+ if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"]) {
+ $interfaces["openvpn"] = "OpenVPN";
+ }
+ if (is_array($pconfig['interface'])) {
+ $pconfig['interface'] = implode(",", $pconfig['interface']);
+ }
+ $selected_interfaces = explode(",", $pconfig['interface']);
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if ($pconfig['interface'] <> "" && (strcasecmp($pconfig['interface'], $iface) == 0 || in_array($iface, $selected_interfaces))) echo "selected=\"selected\""; ?>><?=$ifacename?></option>
+<?php endforeach; ?>
+ </select>
+ <br />
+ <?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
+ <span class="vexpl"><?=gettext("Choose the interface(s) for this rule.");?></span>
+ <?php else: ?>
+ <span class="vexpl"><?=gettext("Choose which interface packets must be sourced on to match this rule.");?></span>
+ <?php endif; ?>
+ </td>
+ </tr>
+<?php if ($if == "FloatingRules" || isset($pconfig['floating'])): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">
+ <?=gettext("Direction");?>
+ </td>
+ <td width="78%" class="vtable">
+ <select name="direction" class="formselect">
+ <?php $directions = array('any', 'in', 'out');
+ foreach ($directions as $direction): ?>
+ <option value="<?=$direction;?>"
+ <?php if ($direction == $pconfig['direction']): ?>
+ selected="selected"
+ <?php endif; ?>
+ ><?=$direction;?></option>
+ <?php endforeach; ?>
+ </select>
+ <input type="hidden" id="floating" name="floating" value="floating" />
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("TCP/IP Version");?></td>
+ <td width="78%" class="vtable">
+ <select name="ipprotocol" class="formselect" onchange="proto_change()">
+ <?php
+ $ipproto = array('inet' => 'IPv4', 'inet6' => 'IPv6', 'inet46' => 'IPv4+IPv6');
+ foreach ($ipproto as $proto => $name):
+ ?>
+ <option value="<?=$proto;?>"
+ <?php if ($proto == $pconfig['ipprotocol']): ?>
+ selected="selected"
+ <?php endif; ?>
+ ><?=$name;?></option>
+ <?php endforeach; ?>
+ </select>
+ <strong><?=gettext("Select the Internet Protocol version this rule applies to");?></strong><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td width="78%" class="vtable">
+ <select <?=$edit_disabled;?> name="proto" class="formselect" onchange="proto_change()">
+<?php
+ $protocols = explode(" ", "TCP UDP TCP/UDP ICMP ESP AH GRE IPV6 IGMP PIM OSPF SCTP any carp pfsync");
+ foreach ($protocols as $proto): ?>
+ <option value="<?=strtolower($proto);?>" <?php if (strtolower($proto) == $pconfig['proto']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($proto);?></option>
+<?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose which IP protocol this rule should match.");?> <br /> <?=gettext("Hint: in most cases, you should specify ");?><em>TCP</em> &nbsp;<?=gettext("here.");?></span>
+ </td>
+ </tr>
+ <tr id="icmpbox">
+ <td valign="top" class="vncell"><?=gettext("ICMP type");?></td>
+ <td class="vtable">
+ <select <?=$edit_disabled;?> name="icmptype" class="formselect">
+<?php
+ foreach ($icmptypes as $icmptype => $descr):
+?>
+ <option value="<?=$icmptype;?>" <?php if ($icmptype == $pconfig['icmptype']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($descr);?></option>
+<?php
+ endforeach;
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("If you selected ICMP for the protocol above, you may specify an ICMP type here.");?></span>
+ </td>
+ </tr>
+ <tr id="icmp6box">
+ <td valign="top" class="vncell"><?=gettext("ICMPv6 type");?></td>
+ <td class="vtable">
+ <select <?=$edit_disabled;?> name="icmp6type" class="formselect">
+<?php
+ foreach ($icmp6types as $icmptype => $descr):
+?>
+ <option value="<?=$icmptype;?>" <?php if ($icmptype == $pconfig['icmptype']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($descr);?></option>
+<?php
+ endforeach;
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("If you selected ICMP for the protocol above, you may specify an ICMP type here.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source");?></td>
+ <td width="78%" class="vtable">
+ <input <?=$edit_disabled;?> name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not");?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match.");?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select <?=$edit_disabled;?> name="srctype" class="formselect" onchange="typesel_change()">
+<?php
+ $sel = is_specialnet($pconfig['src']);
+?>
+ <option value="any" <?php if ($pconfig['src'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any");?></option>
+ <option value="single"
+ <?php
+ if (!$sel &&
+ ((is_ipaddrv6($pconfig['src']) && $pconfig['srcmask'] == 128) ||
+ (is_ipaddrv4($pconfig['src']) && $pconfig['srcmask'] == 32) || is_alias($pconfig['src']))) {
+ echo "selected=\"selected\""; $sel = 1;
+ }
+ ?>
+ > <?=gettext("Single host or alias");?></option>
+ <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
+ <?php if (isset($a_filter[$id]['floating']) || $if == "FloatingRules"): ?>
+ <option value="(self)" <?php if ($pconfig['src'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
+ <?php endif;?>
+ <?php if (have_ruleint_access("pptp")): ?>
+ <option value="pptp" <?php if ($pconfig['src'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients");?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("pppoe")): ?>
+ <option value="pppoe" <?php if ($pconfig['src'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients");?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("l2tp")): ?>
+ <option value="l2tp" <?php if ($pconfig['src'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients");?></option>
+ <?php endif; ?>
+<?php
+ foreach ($ifdisp as $ifent => $ifdesc):
+?>
+ <?php if (have_ruleint_access($ifent)): ?>
+ <option value="<?=$ifent;?>" <?php if ($pconfig['src'] == $ifent) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net");?></option>
+ <option value="<?=$ifent;?>ip"<?php if ($pconfig['src'] == $ifent . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc?> <?=gettext("address");?>
+ </option>
+ <?php endif; ?>
+<?php
+ endforeach;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input <?=$edit_disabled;?> autocomplete='off' name="src" type="text" class="formfldalias ipv4v6" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>" /> /
+ <select <?=$edit_disabled;?> name="srcmask" class="formselect ipv4v6" id="srcmask">
+<?php for ($i = 127; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <div id="showadvancedboxspr">
+ <p>
+ <input <?=$edit_disabled;?> type="button" onclick="show_source_port_range()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show source port range");?>
+ </p>
+ </div>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Source port range");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><?=gettext("from:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select <?=$edit_disabled;?> name="srcbeginport" class="formselect" onchange="src_rep_change();ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['srcbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcbeginport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
+<?php endforeach; ?>
+ </select>
+ <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="srcbeginport_cust" id="srcbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcbeginport']) echo htmlspecialchars($pconfig['srcbeginport']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("to:");?></td>
+ <td>
+ <select <?=$edit_disabled;?> name="srcendport" class="formselect" onchange="ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['srcendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['srcendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
+<?php endforeach; ?>
+ </select>
+ <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="srcendport_cust" id="srcendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['srcendport']) echo htmlspecialchars($pconfig['srcendport']); ?>" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl"><?=gettext("Specify the source port or port range for this rule."); ?> <b><?=gettext("This is usually"); ?> <em><?=gettext("random"); ?></em> <?=gettext("and almost never equal to the destination port range (and should usually be"); ?> &quot;<?=gettext("any"); ?>&quot;).</b><br /><?=gettext("Hint: you can leave the"); ?> <em><?=gettext("'to'"); ?></em> <?=gettext("field empty if you only want to filter a single port.");?></span><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination");?></td>
+ <td width="78%" class="vtable">
+ <input <?=$edit_disabled;?> name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("not");?></strong>
+ <br />
+ <?=gettext("Use this option to invert the sense of the match.");?>
+ <br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select <?=$edit_disabled;?> name="dsttype" class="formselect" onchange="typesel_change()">
+<?php
+ $sel = is_specialnet($pconfig['dst']); ?>
+ <option value="any" <?php if ($pconfig['dst'] == "any") { echo "selected=\"selected\""; } ?>><?=gettext("any");?></option>
+ <option value="single"
+ <?php
+ if (!$sel &&
+ ((is_ipaddrv6($pconfig['dst']) && $pconfig['dstmask'] == 128) ||
+ (is_ipaddrv4($pconfig['dst']) && $pconfig['dstmask'] == 32) || is_alias($pconfig['dst']))) {
+ echo "selected=\"selected\""; $sel = 1;
+ }
+ ?>
+ ><?=gettext("Single host or alias");?></option>
+ <option value="network" <?php if (!$sel) echo "selected=\"selected\""; ?>><?=gettext("Network");?></option>
+ <option value="(self)" <?PHP if ($pconfig['dst'] == "(self)") echo "selected=\"selected\""; ?>><?=gettext("This Firewall (self)");?></option>
+ <?php if (have_ruleint_access("pptp")): ?>
+ <option value="pptp" <?php if ($pconfig['dst'] == "pptp") { echo "selected=\"selected\""; } ?>><?=gettext("PPTP clients");?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("pppoe")): ?>
+ <option value="pppoe" <?php if ($pconfig['dst'] == "pppoe") { echo "selected=\"selected\""; } ?>><?=gettext("PPPoE clients");?></option>
+ <?php endif; ?>
+ <?php if (have_ruleint_access("l2tp")): ?>
+ <option value="l2tp" <?php if ($pconfig['dst'] == "l2tp") { echo "selected=\"selected\""; } ?>><?=gettext("L2TP clients");?></option>
+ <?php endif; ?>
+
+<?php foreach ($ifdisp as $if => $ifdesc): ?>
+ <?php if (have_ruleint_access($if)): ?>
+ <option value="<?=$if;?>" <?php if ($pconfig['dst'] == $if) { echo "selected=\"selected\""; } ?>><?=htmlspecialchars($ifdesc);?> <?=gettext("net");?></option>
+ <option value="<?=$if;?>ip"<?php if ($pconfig['dst'] == $if . "ip") { echo "selected=\"selected\""; } ?>>
+ <?=$ifdesc;?> <?=gettext("address");?>
+ </option>
+ <?php endif; ?>
+<?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input <?=$edit_disabled;?> autocomplete='off' name="dst" type="text" class="formfldalias ipv4v6" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>" />
+ /
+ <select <?=$edit_disabled;?> name="dstmask" class="formselect ipv4v6" id="dstmask">
+<?php for ($i = 127; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+<?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="dprtr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination port range ");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><?=gettext("from:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select <?=$edit_disabled;?> name="dstbeginport" class="formselect" onchange="dst_rep_change();ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['dstbeginport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstbeginport']) { echo "selected=\"selected\""; $bfound = 1; }?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
+<?php endforeach; ?>
+ </select>
+ <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="dstbeginport_cust" id="dstbeginport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstbeginport']) echo htmlspecialchars($pconfig['dstbeginport']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("to:");?></td>
+ <td>
+ <select <?=$edit_disabled;?> name="dstendport" class="formselect" onchange="ext_change()">
+ <option value="">(<?=gettext("other"); ?>)</option>
+ <option value="any" <?php $bfound = 0; if ($pconfig['dstendport'] == "any") { echo "selected=\"selected\""; $bfound = 1; } ?>><?=gettext("any");?></option>
+<?php foreach ($wkports as $wkport => $wkportdesc): ?>
+ <option value="<?=$wkport;?>" <?php if ($wkport == $pconfig['dstendport']) { echo "selected=\"selected\""; $bfound = 1; } ?>><?=htmlspecialchars("{$wkportdesc} ({$wkport})");?></option>
+<?php endforeach; ?>
+ </select>
+ <input <?=$edit_disabled;?> autocomplete='off' class="formfldalias" name="dstendport_cust" id="dstendport_cust" type="text" size="5" value="<?php if (!$bfound && $pconfig['dstendport']) echo htmlspecialchars($pconfig['dstendport']); ?>" />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Specify the port or port range for the destination of the packet for this rule.");?>
+ <br />
+ <?=gettext("Hint: you can leave the"); ?> <em><?=gettext("'to'"); ?></em> <?=gettext("field empty if you only want to filter a single port");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Log");?></td>
+ <td width="78%" class="vtable">
+ <input name="log" type="checkbox" id="log" value="yes" <?php if ($pconfig['log']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Log packets that are handled by this rule");?></strong>
+ <br />
+ <span class="vexpl"><?=gettext("Hint: the firewall has limited local log space. Don't turn on logging for everything. If you want to do a lot of logging, consider using a remote syslog server"); ?> (<?=gettext("see the"); ?> <a href="diag_logs_settings.php"><?=gettext("Diagnostics: System logs: Settings"); ?></a> <?=gettext("page"); ?>).</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="52" maxlength="52" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference.");?></span>
+ </td>
+ </tr>
+<?php if (!isset($id) || !($a_filter[$id] && firewall_check_for_advanced_options($a_filter[$id]) <> "")): ?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ &nbsp;<br />&nbsp;
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+<?php if (isset($id) && $a_filter[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+<?php endif; ?>
+ <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced features");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source OS");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvsourceosbox" <?php if ($pconfig['os']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_sourceos()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showsourceosadv" <?php if (empty($pconfig['os'])) echo "style='display:none'"; ?>>
+ <?=gettext("OS Type:");?>&nbsp;
+ <select name="os" id="os" class="formselect">
+ <option value="" <?php if (empty($pconfig['os'])) echo "selected=\"selected\""; ?>>Any</option>
+<?php foreach ($ostypes as $ostype): ?>
+ <option value="<?=$ostype;?>" <?php if ($ostype == $pconfig['os']) echo "selected=\"selected\""; ?>><?=htmlspecialchars($ostype);?></option>
+<?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Note: this only works for TCP rules. General OS choice matches all subtypes.");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Diffserv Code Point");?></td>
+ <td width="78%" class="vtable">
+ <div id="dsadv" <?php if ($pconfig['dscp']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_dsdiv();" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="dsdivmain" <?php if (empty($pconfig['dscp'])) echo "style='display:none'"; ?>>
+ <select name="dscp" id="dscp">
+ <option value=""></option>
+ <?php foreach ($firewall_rules_dscp_types as $frdt): ?>
+ <option value="<?=$frdt?>"<?php if ($pconfig['dscp'] == $frdt) echo " selected=\"selected\""; ?>><?=$frdt?></option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced Options");?></td>
+ <td width="78%" class="vtable">
+ <div id="aoadv" <?php if (is_aoadv_used($pconfig)) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_aodiv();" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="aodivmain" <?php if (!is_aoadv_used($pconfig)) echo "style='display:none'"; ?>>
+ <input type="checkbox" id="allowopts" value="yes" name="allowopts"<?php if ($pconfig['allowopts'] == true) echo " checked=\"checked\""; ?> />
+ <br /><span class="vexpl"><?=gettext("This allows packets with IP options to pass. Otherwise they are blocked by default. This is usually only seen with multicast traffic.");?>
+ </span><p>
+ <input type="checkbox" id="disablereplyto" value="yes" name="disablereplyto"<?php if ($pconfig['disablereplyto'] == true) echo " checked=\"checked\""; ?> />
+ <br /><span class="vexpl"><?=gettext("This will disable auto generated reply-to for this rule.");?>
+ </span></p><p>
+ <input name="tag" id="tag" value="<?=htmlspecialchars($pconfig['tag']);?>" />
+ <br /><span class="vexpl"><?=gettext("You can mark a packet matching this rule and use this mark to match on other NAT/filter rules. It is called"); ?> <b><?=gettext("Policy filtering"); ?></b>
+ </span></p><p>
+ <input name="tagged" id="tagged" value="<?=htmlspecialchars($pconfig['tagged']);?>" />
+ <br /><span class="vexpl"><?=gettext("You can match packet on a mark placed before on another rule.")?>
+ </span></p><p>
+ <input name="max" id="max" value="<?php echo htmlspecialchars($pconfig['max']) ?>" /><br /><?=gettext(" Maximum state entries this rule can create");?></p><p>
+ <input name="max-src-nodes" id="max-src-nodes" value="<?php echo htmlspecialchars($pconfig['max-src-nodes']) ?>" /><br /><?=gettext(" Maximum number of unique source hosts");?></p><p>
+ <input name="max-src-conn" id="max-src-conn" value="<?php echo htmlspecialchars($pconfig['max-src-conn']) ?>" /><br /><?=gettext(" Maximum number of established connections per host (TCP only)");?></p><p>
+ <input name="max-src-states" id="max-src-states" value="<?php echo htmlspecialchars($pconfig['max-src-states']) ?>" /><br /><?=gettext(" Maximum state entries per host");?></p><p>
+ <input name="max-src-conn-rate" id="max-src-conn-rate" value="<?php echo htmlspecialchars($pconfig['max-src-conn-rate']) ?>" /> /
+ <select name="max-src-conn-rates" id="max-src-conn-rates">
+ <option value=""<?php if (intval($pconfig['max-src-conn-rates']) < 1) echo " selected=\"selected\""; ?>></option>
+<?php for ($x=1; $x<255; $x++) {
+ if ($x == $pconfig['max-src-conn-rates']) $selected = " selected=\"selected\""; else $selected = ""; {
+ echo "<option value=\"{$x}\"{$selected}>{$x}</option>\n";
+ }
+ } ?>
+ </select><br />
+ <?=gettext("Maximum new connections per host / per second(s) (TCP only)");?>
+ </p><p>
+ <input name="statetimeout" value="<?php echo htmlspecialchars($pconfig['statetimeout']) ?>" /><br />
+ <?=gettext("State Timeout in seconds (TCP only)");?>
+ </p>
+ <p><strong><?=gettext("Note: Leave fields blank to disable that feature.");?></strong></p>
+ </div>
+ </td>
+ </tr>
+ <tr id="tcpflags">
+ <td width="22%" valign="top" class="vncell"><?=gettext("TCP flags");?></td>
+ <td width="78%" class="vtable">
+ <div id="showtcpflagsbox" <?php if ($pconfig['tcpflags_any'] || $pconfig['tcpflags1'] || $pconfig['tcpflags2']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_tcpflags()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showtcpflagsadv" <?php if (empty($pconfig['tcpflags_any']) && empty($pconfig['tcpflags1']) && empty($pconfig['tcpflags2'])) echo "style='display:none'"; ?>>
+ <div id="tcpheader" align="center">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <?php
+ $setflags = explode(",", $pconfig['tcpflags1']);
+ $outofflags = explode(",", $pconfig['tcpflags2']);
+ $header = "<td width='40' class='nowrap'></td>";
+ $tcpflags1 = "<td width='40' class='nowrap'>set</td>";
+ $tcpflags2 = "<td width='40' class='nowrap'>out of</td>";
+ foreach ($tcpflags as $tcpflag) {
+ $header .= "<td width='40' class='nowrap'><strong>" . strtoupper($tcpflag) . "</strong></td>\n";
+ $tcpflags1 .= "<td width='40' class='nowrap'> <input type='checkbox' name='tcpflags1_{$tcpflag}' value='on' ";
+ if (array_search($tcpflag, $setflags) !== false) {
+ $tcpflags1 .= "checked=\"checked\"";
+ }
+ $tcpflags1 .= " /></td>\n";
+ $tcpflags2 .= "<td width='40' class='nowrap'> <input type='checkbox' name='tcpflags2_{$tcpflag}' value='on' ";
+ if (array_search($tcpflag, $outofflags) !== false) {
+ $tcpflags2 .= "checked=\"checked\"";
+ }
+ $tcpflags2 .= " /></td>\n";
+ }
+ echo "<tr id='tcpheader'>{$header}</tr>\n";
+ echo "<tr id='tcpflags1'>{$tcpflags1}</tr>\n";
+ echo "<tr id='tcpflags2'>{$tcpflags2}</tr>\n";
+ ?>
+ </table>
+ </div>
+ <br /><center>
+ <input onclick='tcpflags_anyclick(this);' type='checkbox' name='tcpflags_any' value='on' <?php if ($pconfig['tcpflags_any']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Any flags.");?></strong><br /></center>
+ <br />
+ <span class="vexpl"><?=gettext("Use this to choose TCP flags that must ".
+ "be set or cleared for this rule to match.");?></span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("State Type");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvstatebox" <?php if (!empty($pconfig['nopfsync']) || (!empty($pconfig['statetype']) && $pconfig['statetype'] != "keep state")) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_state()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showstateadv" <?php if (empty($pconfig['nopfsync']) && (empty($pconfig['statetype']) || $pconfig['statetype'] == "keep state")) echo "style='display:none'"; ?>>
+ <input name="nopfsync" type="checkbox" id="nopfsync" value="yes" <?php if ($pconfig['nopfsync']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl">
+ NO pfsync<br />
+ <?=gettext("Hint: This prevents states created by this rule to be sync'ed over pfsync.");?><br />
+ </span><br />
+ <select name="statetype">
+ <option value="keep state" <?php if (!isset($pconfig['statetype']) or $pconfig['statetype'] == "keep state") echo "selected=\"selected\""; ?>><?=gettext("keep state");?></option>
+ <option value="sloppy state" <?php if ($pconfig['statetype'] == "sloppy state") echo "selected=\"selected\""; ?>><?=gettext("sloppy state");?></option>
+ <option value="synproxy state"<?php if ($pconfig['statetype'] == "synproxy state") echo "selected=\"selected\""; ?>><?=gettext("synproxy state");?></option>
+ <option value="none"<?php if ($pconfig['statetype'] == "none") echo "selected=\"selected\""; ?>><?=gettext("none");?></option>
+ </select><br />
+ <span class="vexpl">
+ <?=gettext("Hint: Select which type of state tracking mechanism you would like to use. If in doubt, use keep state.");?>
+ </span>
+ <table width="90%">
+ <tr><td width="25%"><ul><li><?=gettext("keep state");?></li></ul></td><td><?=gettext("Works with all IP protocols.");?></td></tr>
+ <tr><td width="25%"><ul><li><?=gettext("sloppy state");?></li></ul></td><td><?=gettext("Works with all IP protocols.");?></td></tr>
+ <tr><td width="25%"><ul><li><?=gettext("synproxy state");?></li></ul></td><td><?=gettext("Proxies incoming TCP connections to help protect servers from spoofed TCP SYN floods. This option includes the functionality of keep state and modulate state combined.");?></td></tr>
+ <tr><td width="25%"><ul><li><?=gettext("none");?></li></ul></td><td><?=gettext("Do not use state mechanisms to keep track. This is only useful if you're doing advanced queueing in certain situations. Please check the documentation.");?></td></tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("No XMLRPC Sync");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvnoxmlrpcsyncbox" <?php if ($pconfig['nosync']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_noxmlrpc()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="shownoxmlrpcadv" <?php if (empty($pconfig['nosync'])) echo "style='display:none'"; ?>>
+ <input type="checkbox" name="nosync"<?php if ($pconfig['nosync']) echo " checked=\"checked\""; ?> /><br />
+ <?=gettext("Hint: This prevents the rule on Master from automatically syncing to other CARP members. This does NOT prevent the rule from being overwritten on Slave.");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("802.1p");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvvlanpriobox" <?php if (!empty($pconfig['vlanprio'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_vlanprio()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showvlanprioadv" <?php if (empty($pconfig['vlanprio'])) echo "style='display:none'"; ?>>
+ <?php $vlanprio = array("none", "be", "bk", "ee", "ca", "vi", "vo", "ic", "nc"); ?>
+<?php
+ $opts = "";
+ foreach ($vlanprio as $vprio) {
+ if ($vprio == $pconfig['vlanprio']) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ if ($vprio == "none") {
+ $opts .= "<option value=\"\">{$vprio}</option>\n";
+ } else {
+ $opts .= "<option value=\"{$vprio}\" {$selected}>" . strtoupper($vprio) . "</option>\n";
+ }
+ }
+
+ $optsset = "";
+ foreach ($vlanprio as $vprioset) {
+ if ($vprioset == $pconfig['vlanprioset']) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ if ($vprioset == "none") {
+ $optsset .= "<option value=\"\">{$vprioset}</option>\n";
+ } else {
+ $optsset .= "<option value=\"{$vprioset}\" {$selected}>" . strtoupper($vprioset) . "</option>\n";
+ }
+ }
+?>
+ <select name='vlanprio'>
+ <?php echo $opts; ?>
+ </select>
+ <p><?=gettext("Choose 802.1p priority to match on");?></p>
+ <select name='vlanprioset'>
+ <?php echo $optsset; ?>
+ </select>
+ <p><?=gettext("Choose 802.1p priority to apply");?></p>
+ </div>
+ </td>
+ </tr>
+ <?php
+ //build list of schedules
+ $schedules = array();
+ $schedules[] = "none";//leave none to leave rule enabled all the time
+ if (is_array($config['schedules']['schedule'])) {
+ foreach ($config['schedules']['schedule'] as $schedule) {
+ if ($schedule['name'] <> "") {
+ $schedules[] = $schedule['name'];
+ }
+ }
+ }
+ ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Schedule");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvschedulebox" <?php if (!empty($pconfig['sched'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_schedule()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showscheduleadv" <?php if (empty($pconfig['sched'])) echo "style='display:none'"; ?>>
+ <select name='sched'>
+<?php
+ foreach ($schedules as $schedule) {
+ if ($schedule == $pconfig['sched']) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ if ($schedule == "none") {
+ echo "<option value=\"\" {$selected}>{$schedule}</option>\n";
+ } else {
+ echo "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n";
+ }
+ }
+?>
+ </select>
+ <p><?=gettext("Leave as 'none' to leave the rule enabled all the time.");?></p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvgatewaybox" <?php if (!empty($pconfig['gateway'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_gateway()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showgatewayadv" <?php if (empty($pconfig['gateway'])) echo "style='display:none'"; ?>>
+ <select name='gateway'>
+ <option value="" ><?=gettext("default");?></option>
+<?php
+ /* build a list of gateways */
+ $gateways = return_gateways_array();
+ // add statically configured gateways to list
+ foreach ($gateways as $gwname => $gw) {
+ if (($pconfig['ipprotocol'] == "inet46")) {
+ continue;
+ }
+ if (($pconfig['ipprotocol'] == "inet6") && !(($gw['ipprotocol'] == "inet6") || (is_ipaddrv6($gw['gateway'])))) {
+ continue;
+ }
+ if (($pconfig['ipprotocol'] == "inet") && !(($gw['ipprotocol'] == "inet") || (is_ipaddrv4($gw['gateway'])))) {
+ continue;
+ }
+ if ($gw == "") {
+ continue;
+ }
+ if ($gwname == $pconfig['gateway']) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ $gateway_addr_str = empty($gw['gateway']) ? "" : " - " . $gw[gateway];
+ echo "<option value=\"{$gwname}\" {$selected}>{$gw['name']}{$gateway_addr_str}</option>\n";
+ }
+ /* add gateway groups to the list */
+ if (is_array($a_gatewaygroups)) {
+ foreach ($a_gatewaygroups as $gwg_name => $gwg_data) {
+ if ((empty($pconfig['ipprotocol'])) || ($pconfig['ipprotocol'] == $gwg_data['ipprotocol'])) {
+ if ($pconfig['gateway'] == $gwg_name) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value=\"{$gwg_name}\" $selected>{$gwg_name}</option>\n";
+ }
+ }
+ }
+?>
+ </select>
+ <p><?=gettext("Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing.");?></p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("In/Out");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvinoutbox" <?php if (!empty($pconfig['dnpipe'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_inout()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showinoutadv" <?php if (empty($pconfig['dnpipe'])) echo "style='display:none'"; ?>>
+ <select name="dnpipe">
+<?php
+ if (!is_array($dnqlist)) {
+ $dnqlist = array();
+ }
+ echo "<option value=\"\"";
+ if (!$dnqselected) {
+ echo " selected=\"selected\"";
+ }
+ echo " >none</option>";
+ foreach ($dnqlist as $dnq => $dnqkey) {
+ if ($dnq == "") {
+ continue;
+ }
+ echo "<option value=\"$dnq\"";
+ if ($dnq == $pconfig['dnpipe']) {
+ $dnqselected = 1;
+ echo " selected=\"selected\"";
+ }
+ echo ">{$dnq}</option>";
+ }
+?>
+ </select> /
+ <select name="pdnpipe">
+<?php
+ $dnqselected = 0;
+ echo "<option value=\"\"";
+ if (!$dnqselected) {
+ echo " selected=\"selected\"";
+ }
+ echo " >none</option>";
+ foreach ($dnqlist as $dnq => $dnqkey) {
+ if ($dnq == "") {
+ continue;
+ }
+ echo "<option value=\"$dnq\"";
+ if ($dnq == $pconfig['pdnpipe']) {
+ $dnqselected = 1;
+ echo " selected=\"selected\"";
+ }
+ echo ">{$dnq}</option>";
+ }
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose the Out queue/Virtual interface only if you have also selected In.")."<br />".gettext("The Out selection is applied to traffic leaving the interface where the rule is created, In is applied to traffic coming into the chosen interface.")."<br />".gettext("If you are creating a floating rule, if the direction is In then the same rules apply, if the direction is out the selections are reverted Out is for incoming and In is for outgoing.");?></span>
+ </div>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Ackqueue/Queue");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvackqueuebox" <?php if (!empty($pconfig['defaultqueue'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_ackqueue()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showackqueueadv" <?php if (empty($pconfig['defaultqueue'])) echo "style='display:none'"; ?>>
+ <select name="ackqueue">
+<?php
+ if (!is_array($qlist)) {
+ $qlist = array();
+ }
+ echo "<option value=\"\"";
+ if (!$qselected) {
+ echo " selected=\"selected\"";
+ }
+ echo " >none</option>";
+ foreach ($qlist as $q => $qkey) {
+ if ($q == "") {
+ continue;
+ }
+ echo "<option value=\"$q\"";
+ if ($q == $pconfig['ackqueue']) {
+ $qselected = 1;
+ echo " selected=\"selected\"";
+ }
+ if (isset($ifdisp[$q])) {
+ echo ">{$ifdisp[$q]}</option>";
+ } else {
+ echo ">{$q}</option>";
+ }
+ }
+?>
+ </select> /
+ <select name="defaultqueue">
+<?php
+ $qselected = 0;
+ echo "<option value=\"\"";
+ if (!$qselected) {
+ echo " selected=\"selected\"";
+ }
+ echo " >none</option>";
+ foreach ($qlist as $q => $qkey) {
+ if ($q == "") {
+ continue;
+ }
+ echo "<option value=\"$q\"";
+ if ($q == $pconfig['defaultqueue']) {
+ $qselected = 1;
+ echo " selected=\"selected\"";
+ }
+ if (isset($ifdisp[$q])) {
+ echo ">{$ifdisp[$q]}</option>";
+ } else {
+ echo ">{$q}</option>";
+ }
+ }
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose the Acknowledge Queue only if you have selected Queue.");?></span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Layer7");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvlayer7box" <?php if (!empty($pconfig['l7container'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_layer7()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showlayer7adv" <?php if (empty($pconfig['l7container'])) echo "style='display:none'"; ?>>
+ <select name="l7container">
+<?php
+ if (!is_array($l7clist)) {
+ $l7clist = array();
+ }
+ echo "<option value=\"\"";
+ echo " >none</option>";
+ foreach ($l7clist as $l7ckey) {
+ echo "<option value=\"{$l7ckey}\"";
+ if ($l7ckey == $pconfig['l7container']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$l7ckey}</option>";
+ }
+?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Choose a Layer7 container to apply application protocol inspection rules. " .
+ "These are valid for TCP and UDP protocols only.");?>
+ </span>
+ </div>
+ </td>
+ </tr>
+<?php
+ // Allow extending of the firewall edit page and include custom input validation
+ pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/htmlphplate");
+?>
+<?php
+$has_created_time = (isset($a_filter[$id]['created']) && is_array($a_filter[$id]['created']));
+$has_updated_time = (isset($a_filter[$id]['updated']) && is_array($a_filter[$id]['updated']));
+?>
+ <?php if ($has_created_time || $has_updated_time): ?>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Rule Information");?></td>
+ </tr>
+ <?php if ($has_created_time): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Created");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_filter[$id]['created']['time']) ?> <?= gettext("by") ?> <strong><?= $a_filter[$id]['created']['username'] ?></strong>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if ($has_updated_time): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Updated");?></td>
+ <td width="78%" class="vtable">
+ <?= date(gettext("n/j/y H:i:s"), $a_filter[$id]['updated']['time']) ?> <?= gettext("by") ?> <strong><?= $a_filter[$id]['updated']['username'] ?></strong>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ &nbsp;<br />&nbsp;
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+<?php if (isset($id) && $a_filter[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <input name="tracker" type="hidden" value="<?=htmlspecialchars($pconfig['tracker']);?>">
+<?php endif; ?>
+ <input name="after" type="hidden" value="<?=htmlspecialchars($after);?>" />
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+ ext_change();
+ typesel_change();
+ proto_change();
+ <?php if ((!empty($pconfig['srcbeginport']) && $pconfig['srcbeginport'] != "any") || (!empty($pconfig['srcendport']) && $pconfig['srcendport'] != "any")): ?>
+ show_source_port_range();
+ <?php endif; ?>
+
+ var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>;
+ var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
+
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox3 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
+ var oTextbox4 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
+ var oTextbox5 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox6 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_schedule.php b/src/usr/local/www/firewall_schedule.php
new file mode 100644
index 0000000..e6b7a21
--- /dev/null
+++ b/src/usr/local/www/firewall_schedule.php
@@ -0,0 +1,255 @@
+<?php
+/*
+ firewall_schedule.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: schedules
+*/
+##|+PRIV
+##|*IDENT=page-firewall-schedules
+##|*NAME=Firewall: Schedules page
+##|*DESCR=Allow access to the 'Firewall: Schedules' page.
+##|*MATCH=firewall_schedule.php*
+##|-PRIV
+
+
+$dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
+$monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+$pgtitle = array(gettext("Firewall"), gettext("Schedules"));
+
+if (!is_array($config['schedules']['schedule'])) {
+ $config['schedules']['schedule'] = array();
+}
+
+$a_schedules = &$config['schedules']['schedule'];
+
+
+if ($_GET['act'] == "del") {
+ if ($a_schedules[$_GET['id']]) {
+ /* make sure rule is not being referenced by any nat or filter rules */
+ $is_schedule_referenced = false;
+ $referenced_by = false;
+ $schedule_name = $a_schedules[$_GET['id']]['name'];
+
+ if (is_array($config['filter']['rule'])) {
+ foreach ($config['filter']['rule'] as $rule) {
+ //check for this later once this is established
+ if ($rule['sched'] == $schedule_name) {
+ $referenced_by = $rule['descr'];
+ $is_schedule_referenced = true;
+ break;
+ }
+ }
+ }
+
+ if ($is_schedule_referenced == true) {
+ $savemsg = sprintf(gettext("Cannot delete Schedule. Currently in use by %s"), $referenced_by);
+ } else {
+ unset($a_schedules[$_GET['id']]);
+ write_config();
+ header("Location: firewall_schedule.php");
+ exit;
+ }
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="firewall_schedule.php" method="post">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall schedule">
+ <tr>
+ <td width="25%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="35%" class="listhdrr"><?=gettext("Time Range(s)");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list sort_ignore">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_schedule_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new schedule");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php $i = 0; foreach ($a_schedules as $schedule): ?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($schedule['name']);?>
+ <?php
+ $schedstatus = filter_get_time_based_rule_status($schedule);
+ if ($schedstatus) { ?>
+ &nbsp;<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_frmfld_time.png" title="<?=gettext("Schedule is currently active");?>" width="17" height="17" border="0" alt="schedule" />
+ <?php } ?>
+ </td>
+ <td class="listlr" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
+ <table width="98%" border="0" cellpadding="0" cellspacing="0" summary="schedule">
+ <?php
+ foreach ($schedule['timerange'] as $timerange) {
+ $tempFriendlyTime = "";
+ $tempID = "";
+ $firstprint = false;
+ if ($timerange) {
+ $dayFriendly = "";
+ $tempFriendlyTime = "";
+
+ //get hours
+ $temptimerange = $timerange['hour'];
+ $temptimeseparator = strrpos($temptimerange, "-");
+
+ $starttime = substr ($temptimerange, 0, $temptimeseparator);
+ $stoptime = substr ($temptimerange, $temptimeseparator+1);
+
+ if ($timerange['month']) {
+ $tempmontharray = explode(",", $timerange['month']);
+ $tempdayarray = explode(",", $timerange['day']);
+ $arraycounter = 0;
+ $firstDayFound = false;
+ $firstPrint = false;
+ foreach ($tempmontharray as $monthtmp) {
+ $month = $tempmontharray[$arraycounter];
+ $day = $tempdayarray[$arraycounter];
+
+ if (!$firstDayFound) {
+ $firstDay = $day;
+ $firstmonth = $month;
+ $firstDayFound = true;
+ }
+
+ $currentDay = $day;
+ $nextDay = $tempdayarray[$arraycounter+1];
+ $currentDay++;
+ if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
+ if ($firstPrint) {
+ $dayFriendly .= "<br />";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $dayFriendly .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
+ } else {
+ $dayFriendly .= $monthArray[$month-1] . " " . $day;
+ }
+ $firstDayFound = false;
+ $firstPrint = true;
+ }
+ $arraycounter++;
+ }
+ } else {
+ $tempdayFriendly = $timerange['position'];
+ $firstDayFound = false;
+ $tempFriendlyDayArray = explode(",", $tempdayFriendly);
+ $currentDay = "";
+ $firstDay = "";
+ $nextDay = "";
+ $counter = 0;
+ foreach ($tempFriendlyDayArray as $day) {
+ if ($day != "") {
+ if (!$firstDayFound) {
+ $firstDay = $tempFriendlyDayArray[$counter];
+ $firstDayFound = true;
+ }
+ $currentDay =$tempFriendlyDayArray[$counter];
+ //get next day
+ $nextDay = $tempFriendlyDayArray[$counter+1];
+ $currentDay++;
+ if ($currentDay != $nextDay) {
+ if ($firstprint) {
+ $dayFriendly .= "<br />";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $dayFriendly .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
+ } else {
+ $dayFriendly .= $dayArray[$firstDay-1];
+ }
+ $firstDayFound = false;
+ $firstprint = true;
+ }
+ $counter++;
+ }
+ }
+ }
+ $timeFriendly = $starttime . "-" . $stoptime;
+ $description = $timerange['rangedescr'];
+
+ ?>
+ <tr>
+ <td><?=$dayFriendly;?></td>
+ <td><?=$timeFriendly;?></td>
+ <td><?=$description;?></td>
+ </tr>
+ <?php
+ }
+ }//end for
+ ?>
+ </table>
+ </td>
+ <td class="listbg" ondblclick="document.location='firewall_schedule_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($schedule['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="buttons">
+ <tr>
+ <td valign="middle"><a href="firewall_schedule_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit alias");?>" alt="edit" /></a></td>
+ <td><a href="firewall_schedule.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext('Do you really want to delete this schedule?');?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete alias");?>" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php $i++; endforeach; ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_schedule_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new schedule");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont" colspan="3">
+ <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Schedules act as placeholders for time ranges to be used in Firewall Rules.");?></span></p>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_schedule_edit.php b/src/usr/local/www/firewall_schedule_edit.php
new file mode 100644
index 0000000..e7c4bca
--- /dev/null
+++ b/src/usr/local/www/firewall_schedule_edit.php
@@ -0,0 +1,1151 @@
+<?php
+/*
+ firewall_schedule_edit.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: schedules
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-schedules-edit
+##|*NAME=Firewall: Schedules: Edit page
+##|*DESCR=Allow access to the 'Firewall: Schedules: Edit' page.
+##|*MATCH=firewall_schedule_edit.php*
+##|-PRIV
+
+function schedulecmp($a, $b) {
+ return strcmp($a['name'], $b['name']);
+}
+
+function schedule_sort() {
+ global $g, $config;
+
+ if (!is_array($config['schedules']['schedule'])) {
+ return;
+ }
+
+ usort($config['schedules']['schedule'], "schedulecmp");
+}
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pgtitle = array(gettext("Firewall"), gettext("Schedules"), gettext("Edit"));
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_schedule.php');
+}
+
+$dayArray = array (gettext('Mon'), gettext('Tues'), gettext('Wed'), gettext('Thur'), gettext('Fri'), gettext('Sat'), gettext('Sun'));
+$monthArray = array (gettext('January'), gettext('February'), gettext('March'), gettext('April'), gettext('May'), gettext('June'), gettext('July'), gettext('August'), gettext('September'), gettext('October'), gettext('November'), gettext('December'));
+
+if (!is_array($config['schedules']['schedule'])) {
+ $config['schedules']['schedule'] = array();
+}
+
+$a_schedules = &$config['schedules']['schedule'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_schedules[$id]) {
+ $pconfig['name'] = $a_schedules[$id]['name'];
+ $pconfig['descr'] = html_entity_decode($a_schedules[$id]['descr']);
+ $pconfig['timerange'] = $a_schedules[$id]['timerange'];
+ $pconfig['schedlabel'] = $a_schedules[$id]['schedlabel'];
+ $getSchedule = true;
+}
+
+if ($_POST) {
+
+ if (strtolower($_POST['name']) == "lan") {
+ $input_errors[] = gettext("Schedule may not be named LAN.");
+ }
+ if (strtolower($_POST['name']) == "wan") {
+ $input_errors[] = gettext("Schedule may not be named WAN.");
+ }
+ if (strtolower($_POST['name']) == "") {
+ $input_errors[] = gettext("Schedule name cannot be blank.");
+ }
+
+ $x = is_validaliasname($_POST['name']);
+ if (!isset($x)) {
+ $input_errors[] = gettext("Reserved word used for schedule name.");
+ } else {
+ if (is_validaliasname($_POST['name']) == false) {
+ $input_errors[] = gettext("The schedule name may only consist of the characters a-z, A-Z, 0-9");
+ }
+ }
+
+ /* check for name conflicts */
+ foreach ($a_schedules as $schedule) {
+ if (isset($id) && ($a_schedules[$id]) && ($a_schedules[$id] === $schedule)) {
+ continue;
+ }
+
+ if ($schedule['name'] == $_POST['name']) {
+ $input_errors[] = gettext("A Schedule with this name already exists.");
+ break;
+ }
+ }
+ $schedule = array();
+
+ $schedule['name'] = $_POST['name'];
+ $schedule['descr'] = htmlentities($_POST['descr'], ENT_QUOTES, 'UTF-8');
+
+ $timerangeFound = false;
+ for ($x = 0; $x < 99; $x++) {
+ if ($_POST['schedule' . $x]) {
+ if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['starttime' . $x])) {
+ $input_errors[] = sprintf(gettext("Invalid start time - '%s'"), $_POST['starttime' . $x]);
+ continue;
+ }
+ if (!preg_match('/^[0-9]+:[0-9]+$/', $_POST['stoptime' . $x])) {
+ $input_errors[] = sprintf(gettext("Invalid stop time - '%s'"), $_POST['stoptime' . $x]);
+ continue;
+ }
+ $timerangeFound = true;
+ $timeparts = array();
+ $firstprint = false;
+ $timestr = $_POST['schedule' . $x];
+ $timehourstr = $_POST['starttime' . $x];
+ $timehourstr .= "-";
+ $timehourstr .= $_POST['stoptime' . $x];
+ $timedescrstr = htmlentities($_POST['timedescr' . $x], ENT_QUOTES, 'UTF-8');
+ $dashpos = strpos($timestr, '-');
+ if ($dashpos === false) {
+ $timeparts['position'] = $timestr;
+ } else {
+ $tempindarray = array();
+ $monthstr = "";
+ $daystr = "";
+ $tempindarray = explode(",", $timestr);
+ foreach ($tempindarray as $currentselection) {
+ if ($currentselection) {
+ if ($firstprint) {
+ $monthstr .= ",";
+ $daystr .= ",";
+ }
+ $tempstr = "";
+ $monthpos = strpos($currentselection, "m");
+ $daypos = strpos($currentselection, "d");
+ $monthstr .= substr($currentselection, $monthpos+1, $daypos-$monthpos-1);
+ $daystr .= substr($currentselection, $daypos+1);
+ $firstprint = true;
+ }
+ }
+ $timeparts['month'] = $monthstr;
+ $timeparts['day'] = $daystr;
+ }
+ $timeparts['hour'] = $timehourstr;
+ $timeparts['rangedescr'] = $timedescrstr;
+ $schedule['timerange'][$x] = $timeparts;
+ }
+ }
+
+ if (!$timerangeFound) {
+ $input_errors[] = gettext("The schedule must have at least one time range configured.");
+ }
+
+ if (!$input_errors) {
+
+ if (!empty($pconfig['schedlabel'])) {
+ $schedule['schedlabel'] = $pconfig['schedlabel'];
+ } else {
+ $schedule['schedlabel'] = uniqid();
+ }
+
+ if (isset($id) && $a_schedules[$id]) {
+ $a_schedules[$id] = $schedule;
+ } else {
+ $a_schedules[] = $schedule;
+ }
+ schedule_sort();
+ if (write_config()) {
+ filter_configure();
+ }
+
+ header("Location: firewall_schedule.php");
+ exit;
+ } else {
+ //we received input errors, copy data to prevent retype
+ if (!$_POST['schedule0']) {
+ $getSchedule = false;
+ } else {
+ $getSchedule = true;
+ }
+ $pconfig['name'] = $schedule['name'];
+ $pconfig['descr'] = $schedule['descr'];
+ $pconfig['timerange'] = $schedule['timerange'];
+ }
+
+}
+include("head.inc");
+
+/* put your custom HTML head content here */
+/* using some of the $pfSenseHead function calls */
+$jscriptstr = <<<EOD
+<script type="text/javascript">
+//<![CDATA[
+var daysSelected = "";
+var month_array = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+var day_array = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'];
+var schCounter = 0;
+
+function rgb2hex(rgb) {
+ var parts = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+ if (parts == null) {
+ return;
+ }
+ function hex(x) {
+ return ("0" + parseInt(x).toString(16)).slice(-2);
+ }
+ return ("#" + hex(parts[1]) + hex(parts[2]) + hex(parts[3])).toUpperCase();
+}
+
+function repeatExistingDays() {
+ var tempstr, tempstrdaypos, week, daypos, dayposdone = "";
+
+ var dayarray = daysSelected.split(",");
+ for (i = 0; i <= dayarray.length; i++) {
+ tempstr = dayarray[i];
+ tempstrdaypos = tempstr.search("p");
+ week = tempstr.substring(1, tempstrdaypos);
+ week = parseInt(week);
+ dashpos = tempstr.search("-");
+ daypos = tempstr.substring(tempstrdaypos+1, dashpos);
+ daypos = parseInt(daypos);
+
+ daydone = dayposdone.search(daypos);
+ tempstr = 'w' + week + 'p' + daypos;
+ daycell = eval('document.getElementById(tempstr)');
+ if (daydone == "-1") {
+ if (rgb2hex(daycell.style.backgroundColor) == "#F08080") { // lightcoral
+ daytogglerepeating(week, daypos, true);
+ } else {
+ daytogglerepeating(week, daypos, false);
+ }
+ dayposdone += daypos + ",";
+ }
+ }
+}
+
+function daytogglerepeating(week, daypos, bExists) {
+ var tempstr, daycell, dayoriginal = "";
+ for (j=1; j<=53; j++) {
+ tempstr = 'w' + j + 'p' + daypos;
+ daycell = eval('document.getElementById(tempstr)');
+ dayoriginalpos = daysSelected.indexOf(tempstr);
+
+ //if bExists set to true, means cell is already select it
+ //unselect it and remove original day from daysSelected string
+
+ if (daycell != null) {
+ if (bExists) {
+ daycell.style.backgroundColor = "#FFFFFF"; // white
+ } else {
+ daycell.style.backgroundColor = "#F08080"; // lightcoral
+ }
+
+ if (dayoriginalpos != "-1") {
+ dayoriginalend = daysSelected.indexOf(',', dayoriginalpos);
+ tempstr = daysSelected.substring(dayoriginalpos, dayoriginalend+1);
+ daysSelected = daysSelected.replace(tempstr, "");
+
+ }
+ }
+ }
+}
+
+function daytoggle(id) {
+ var runrepeat, tempstr = "";
+ var bFoundValid = false;
+
+ iddashpos = id.search("-");
+ var tempstrdaypos = id.search("p");
+ var week = id.substring(1, tempstrdaypos);
+ week = parseInt(week);
+
+ if (iddashpos == "-1") {
+ idmod = id;
+ runrepeat = true;
+ var daypos = id.substr(tempstrdaypos+1);
+ } else {
+ idmod = id.substring(0, iddashpos);
+ var daypos = id.substring(tempstrdaypos+1, iddashpos);
+ }
+
+ daypos = parseInt(daypos);
+
+ while (!bFoundValid) {
+ var daycell = document.getElementById(idmod);
+
+ if (daycell != null) {
+ if (rgb2hex(daycell.style.backgroundColor) == "#FF0000") { // red
+ daycell.style.backgroundColor = "#FFFFFF"; // white
+ str = id + ",";
+ daysSelected = daysSelected.replace(str, "");
+ } else if (rgb2hex(daycell.style.backgroundColor) == "#F08080") { // lightcoral
+ daytogglerepeating(week, daypos, true);
+ } else {
+ //color is white cell
+ if (!runrepeat) {
+ daycell.style.backgroundColor = "#FF0000"; // red
+ } else {
+ daycell.style.backgroundColor = "#F08080"; // lightcoral
+ daytogglerepeating(week, daypos, false);
+ }
+ daysSelected += id + ",";
+ }
+ bFoundValid = true;
+ } else {
+ //we found an invalid cell when column was clicked, move up to the next week
+ week++;
+ tempstr = "w" + week + "p" + daypos;
+ idmod = tempstr;
+ }
+ }
+}
+
+function update_month() {
+ var indexNum = document.forms[0].monthsel.selectedIndex;
+ var selected = document.forms[0].monthsel.options[indexNum].text;
+
+ for (i = 0; i <= 11; i++) {
+ option = document.forms[0].monthsel.options[i].text;
+ document.popupMonthLayer = eval('document.getElementById (option)');
+
+ if (selected == option) {
+ document.popupMonthLayer.style.display="block";
+ } else {
+ document.popupMonthLayer.style.display="none";
+ }
+ }
+}
+
+function checkForRanges() {
+ if (daysSelected != "") {
+ alert("You have not saved the specified time range. Please click 'Add Time' button to save the time range.");
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function processEntries() {
+ var tempstr, starttimehour, starttimemin, stoptimehour, stoptimemin, errors = "";
+ var passedValidiation = true;
+
+ //get time specified
+ starttimehour = parseInt(document.getElementById("starttimehour").value);
+ starttimemin = parseInt(document.getElementById("starttimemin").value);
+ stoptimehour = parseInt(document.getElementById("stoptimehour").value);
+ stoptimemin = parseInt(document.getElementById("stoptimemin").value);
+
+
+ //do time checks
+ if (starttimehour > stoptimehour) {
+ errors = "Error: Start Hour cannot be greater than Stop Hour.";
+ passedValidiation = false;
+
+ } else if (starttimehour == stoptimehour) {
+ if (starttimemin > stoptimemin) {
+ errors = "Error: Start Minute cannot be greater than Stop Minute.";
+ passedValidiation = false;
+ }
+ }
+
+ if (passedValidiation) {
+ addTimeRange();
+ } else {
+ if (errors != "") {
+ alert(errors);
+ }
+ }
+}
+
+function addTimeRange() {
+ var tempdayarray = daysSelected.split(",");
+ var tempstr, tempFriendlyDay, starttimehour, starttimemin, stoptimehour, nrtempFriendlyTime, rtempFriendlyTime, nrtempID, rtempID = "";
+ var stoptimemin, timeRange, tempstrdaypos, week, daypos, day, month, dashpos, nrtempTime, rtempTime, monthstr, daystr = "";
+ rtempFriendlyTime = "";
+ nrtempFriendlyTime = "";
+ nrtempID = "";
+ rtempID = "";
+ nrtempTime = "";
+ rtempTime = "";
+ tempdayarray.sort();
+ rtempFriendlyDay = "";
+ monthstr = "";
+ daystr = "";
+
+ //check for existing entries
+ var findCurrentCounter;
+ for (u = 0; u < 99; u++) {
+ findCurrentCounter = document.getElementById("schedule" + u);
+ if (!findCurrentCounter) {
+ schCounter = u;
+ break;
+ }
+ }
+
+ if (daysSelected != "") {
+ //get days selected
+ for (i = 0; i < tempdayarray.length; i++) {
+ tempstr = tempdayarray[i];
+ if (tempstr != "") {
+ tempstrdaypos = tempstr.search("p");
+ week = tempstr.substring(1, tempstrdaypos);
+ week = parseInt(week);
+ dashpos = tempstr.search("-");
+
+ if (dashpos != "-1") {
+ var nonrepeatingfound = true;
+ daypos = tempstr.substring(tempstrdaypos+1, dashpos);
+ daypos = parseInt(daypos);
+ monthpos = tempstr.search("m");
+ tempstrdaypos = tempstr.search("d");
+ month = tempstr.substring(monthpos+1, tempstrdaypos);
+ month = parseInt(month);
+ day = tempstr.substring(tempstrdaypos+1);
+ day = parseInt(day);
+ monthstr += month + ",";
+ daystr += day + ",";
+ nrtempID += tempstr + ",";
+ } else {
+ var repeatingfound = true;
+ daypos = tempstr.substr(tempstrdaypos+1);
+ daypos = parseInt(daypos);
+ rtempFriendlyDay += daypos + ",";
+ rtempID += daypos + ",";
+ }
+ }
+ }
+
+ //code below spits out friendly look format for nonrepeating schedules
+ var foundEnd = false;
+ var firstDayFound = false;
+ var firstprint = false;
+ var tempFriendlyMonthArray = monthstr.split(",");
+ var tempFriendlyDayArray = daystr.split(",");
+ var currentDay, firstDay, nextDay, currentMonth, nextMonth, firstDay, firstMonth = "";
+ for (k = 0; k < tempFriendlyMonthArray.length; k++) {
+ tempstr = tempFriendlyMonthArray[k];
+ if (tempstr != "") {
+ if (!firstDayFound) {
+ firstDay = tempFriendlyDayArray[k];
+ firstDay = parseInt(firstDay);
+ firstMonth = tempFriendlyMonthArray[k];
+ firstMonth = parseInt(firstMonth);
+ firstDayFound = true;
+ }
+ currentDay = tempFriendlyDayArray[k];
+ currentDay = parseInt(currentDay);
+ //get next day
+ nextDay = tempFriendlyDayArray[k+1];
+ nextDay = parseInt(nextDay);
+ //get next month
+
+ currentDay++;
+ if ((currentDay != nextDay) || (tempFriendlyMonthArray[k] != tempFriendlyMonthArray[k+1])) {
+ if (firstprint) {
+ nrtempFriendlyTime += ", ";
+ }
+ currentDay--;
+ if (currentDay != firstDay) {
+ nrtempFriendlyTime += month_array[firstMonth-1] + " " + firstDay + "-" + currentDay;
+ } else {
+ nrtempFriendlyTime += month_array[firstMonth-1] + " " + currentDay;
+ }
+ firstDayFound = false;
+ firstprint = true;
+ }
+ }
+ }
+
+ //code below spits out friendly look format for repeating schedules
+ foundEnd = false;
+ firstDayFound = false;
+ firstprint = false;
+ tempFriendlyDayArray = rtempFriendlyDay.split(",");
+ tempFriendlyDayArray.sort();
+ currentDay, firstDay, nextDay = "";
+ for (k = 0; k < tempFriendlyDayArray.length; k++) {
+ tempstr = tempFriendlyDayArray[k];
+ if (tempstr != "") {
+ if (!firstDayFound) {
+ firstDay = tempFriendlyDayArray[k];
+ firstDay = parseInt(firstDay);
+ firstDayFound = true;
+ }
+ currentDay = tempFriendlyDayArray[k];
+ currentDay = parseInt(currentDay);
+ //get next day
+ nextDay = tempFriendlyDayArray[k+1];
+ nextDay = parseInt(nextDay);
+ currentDay++;
+ if (currentDay != nextDay) {
+ if (firstprint) {
+ rtempFriendlyTime += ", ";
+ }
+ currentDay--;
+ if (currentDay != firstDay) {
+ rtempFriendlyTime += day_array[firstDay-1] + " - " + day_array[currentDay-1];
+ } else {
+ rtempFriendlyTime += day_array[firstDay-1];
+ }
+ firstDayFound = false;
+ firstprint = true;
+ }
+ }
+ }
+
+ //sort the tempID
+ var tempsortArray = rtempID.split(",");
+ var isFirstdone = false;
+ tempsortArray.sort();
+ //clear tempID
+ rtempID = "";
+ for (t = 0; t < tempsortArray.length; t++) {
+ if (tempsortArray[t] != "") {
+ if (!isFirstdone) {
+ rtempID += tempsortArray[t];
+ isFirstdone = true;
+ } else {
+ rtempID += "," + tempsortArray[t];
+ }
+ }
+ }
+
+
+ //get time specified
+ starttimehour = document.getElementById("starttimehour").value
+ starttimemin = document.getElementById("starttimemin").value;
+ stoptimehour = document.getElementById("stoptimehour").value;
+ stoptimemin = document.getElementById("stoptimemin").value;
+
+ timeRange = "||" + starttimehour + ":";
+ timeRange += starttimemin + "-";
+ timeRange += stoptimehour + ":";
+ timeRange += stoptimemin;
+
+ //get description for time range
+ var tempdescr = document.getElementById("timerangedescr").value
+
+ if (nonrepeatingfound) {
+ nrtempTime += nrtempID;
+ //add time ranges
+ nrtempTime += timeRange;
+ //add description
+ nrtempTime += "||" + tempdescr;
+ insertElements(nrtempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, nrtempTime, nrtempID);
+ }
+
+ if (repeatingfound) {
+ rtempTime += rtempID;
+ //add time ranges
+ rtempTime += timeRange;
+ //add description
+ rtempTime += "||" + tempdescr;
+ insertElements(rtempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, rtempTime, rtempID);
+ }
+
+ } else {
+ //no days were selected, alert user
+ alert ("You must select at least 1 day before adding time");
+ }
+}
+
+function insertElements(tempFriendlyTime, starttimehour, starttimemin, stoptimehour, stoptimemin, tempdescr, tempTime, tempID) {
+
+ //add it to the schedule list
+ d = document;
+ tbody = d.getElementById("scheduletable").getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ td = d.createElement("td");
+ td.innerHTML= "<span class='vexpl'>" + tempFriendlyTime + "<\/span>";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML="<input type='text' readonly class='vexpl' name='starttime" + schCounter + "' id='starttime" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + starttimehour + ":" + starttimemin + "' />";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML="<input type='text' readonly class='vexpl' name='stoptime" + schCounter + "' id='stoptime" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + stoptimehour + ":" + stoptimemin + "' />";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML="<input type='text' readonly class='vexpl' name='timedescr" + schCounter + "' id='timedescr" + schCounter + "' style=' word-wrap:break-word; width:100%; border:0px solid;' value='" + tempdescr + "' />";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML = "<a onclick='editRow(\"" + tempTime + "\",this); return false;' href='#'><img border='0' src='/themes/" + theme + "/images/icons/icon_e.gif' alt='edit' /></\a>";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML = "<a onclick='removeRow(this); return false;' href='#'><img border='0' src='/themes/" + theme + "/images/icons/icon_x.gif' alt='remove' /></\a>";
+ tr.appendChild(td);
+
+ td = d.createElement("td");
+ td.innerHTML="<input type='hidden' id='schedule" + schCounter + "' name='schedule" + schCounter + "' value='" + tempID + "' />";
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+
+ schCounter++;
+
+ //reset calendar and time and descr
+ clearCalendar();
+ clearTime();
+ clearDescr();
+}
+
+
+function clearCalendar() {
+ var tempstr, daycell = "";
+ //clear days selected
+ daysSelected = "";
+ //loop through all 52 weeks
+ for (j=1; j<=53; j++) {
+ //loop through all 7 days
+ for (k=1; k<8; k++) {
+ tempstr = 'w' + j + 'p' + k;
+ daycell = eval('document.getElementById(tempstr)');
+ if (daycell != null) {
+ daycell.style.backgroundColor = "#FFFFFF"; // white
+ }
+ }
+ }
+}
+
+function clearTime() {
+ document.getElementById("starttimehour").value = "0";
+ document.getElementById("starttimemin").value = "00";
+ document.getElementById("stoptimehour").value = "23";
+ document.getElementById("stoptimemin").value = "59";
+}
+
+function clearDescr() {
+ document.getElementById("timerangedescr").value = "";
+}
+
+function editRow(incTime, el) {
+ var check = checkForRanges();
+
+ if (check) {
+
+ //reset calendar and time
+ clearCalendar();
+ clearTime();
+
+ var starttimehour, descr, days, tempstr, starttimemin, hours, stoptimehour, stoptimemin = "";
+
+ tempArray = incTime.split ("||");
+
+ days = tempArray[0];
+ hours = tempArray[1];
+ descr = tempArray[2];
+
+ var tempdayArray = days.split(",");
+ var temphourArray = hours.split("-");
+ tempstr = temphourArray[0];
+ var temphourArray2 = tempstr.split(":");
+
+ document.getElementById("starttimehour").value = temphourArray2[0];
+ document.getElementById("starttimemin").value = temphourArray2[1];
+
+ tempstr = temphourArray[1];
+ temphourArray2 = tempstr.split(":");
+
+ document.getElementById("stoptimehour").value = temphourArray2[0];
+ document.getElementById("stoptimemin").value = temphourArray2[1];
+
+ document.getElementById("timerangedescr").value = descr;
+
+ //toggle the appropriate days
+ for (i = 0; i < tempdayArray.length; i++) {
+ if (tempdayArray[i]) {
+ var tempweekstr = tempdayArray[i];
+ dashpos = tempweekstr.search("-");
+
+ if (dashpos == "-1") {
+ tempstr = "w2p" + tempdayArray[i];
+ } else {
+ tempstr = tempdayArray[i];
+ }
+ daytoggle(tempstr);
+ }
+ }
+ removeRownoprompt(el);
+ }
+}
+
+function removeRownoprompt(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr") {
+ el = el.parentNode;
+ }
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+}
+
+
+function removeRow(el) {
+ var check = confirm ("Do you really want to delete this time range?");
+ if (check) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr") {
+ el = el.parentNode;
+ }
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+ }
+}
+//]]>
+</script>
+EOD;
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+
+
+<?php include("fbegin.inc"); echo $jscriptstr; ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+
+<form action="firewall_schedule_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firewall schedule">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedule information");?></td>
+ </tr>
+ <tr>
+ <td>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="15%" valign="top" class="vncellreq"><?=gettext("Schedule Name");?></td>
+ <td width="85%" class="vtable">
+ <?php if (is_schedule_inuse($pconfig['name']) == true): ?>
+ <input name="name" type="hidden" id="name" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ <?php echo $pconfig['name']; ?>
+ <p>
+ <span class="vexpl"><?=gettext("NOTE: This schedule is in use so the name may not be modified!");?></span>
+ </p>
+ <?php else: ?>
+ <input name="name" type="text" id="name" size="40" maxlength="40" class="formfld unknown" value="<?=htmlspecialchars($pconfig['name']);?>" /><br />
+ <span class="vexpl">
+ <?=gettext("The name of the alias may only consist of the characters a-z, A-Z and 0-9");?>
+ </span>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="85%" class="vtable"><input name="descr" type="text" id="descr" size="40" maxlength="40" class="formfld unknown" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <!-- tr>
+ </tr -->
+ <tr>
+ <td width="15%" valign="top" class="vncellreq"><?=gettext("Month");?></td>
+ <td width="85%" class="vtable">
+ <select name="monthsel" class="formselect" id="monthsel" onchange="update_month();">
+ <?php
+ $monthcounter = date("n");
+ $monthlimit = $monthcounter + 12;
+ $yearcounter = date("Y");
+ for ($k = 0; $k < 12; $k++) {?>
+ <option value="<?php echo $monthcounter;?>"><?php echo date("F_y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?></option>
+ <?php
+ if ($monthcounter == 12) {
+ $monthcounter = 1;
+ $yearcounter++;
+ } else {
+ $monthcounter++;
+ }
+ } ?>
+ </select>
+ <br /><br />
+ <?php
+ $firstmonth = TRUE;
+ $monthcounter = date("n");
+ $yearcounter = date("Y");
+ for ($k = 0; $k < 12; $k++) {
+ $firstdayofmonth = date("w", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));
+ if ($firstdayofmonth == 0) {
+ $firstdayofmonth = 7;
+ }
+
+ $daycounter = 1;
+ //number of day in month
+ $numberofdays = date("t", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));
+ $firstdayprinted = FALSE;
+ $lasttr = FALSE;
+ $positioncounter = 1;//7 for Sun, 1 for Mon, 2 for Tues, etc
+ ?>
+ <div id="<?php echo date("F_y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?>" style=" position:relative; display:<?php if ($firstmonth)echo "block";else echo "none";?>">
+ <table border="1" cellspacing="1" cellpadding="1" id="calTable<?=$monthcounter . $yearcounter;?>" class="tabcont" summary="month">
+ <tr>
+ <td colspan="7" align="center" class="listbg"><b><?php echo date("F_Y", mktime(0, 0, 0, date($monthcounter), 1, date($yearcounter)));?></b></td>
+ </tr>
+ <tr>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p1');"><u><b><?=gettext("Mon");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p2');"><u><b><?=gettext("Tue");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p3');"><u><b><?=gettext("Wed");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p4');"><u><b><?=gettext("Thu");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p5');"><u><b><?=gettext("Fri");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p6');"><u><b><?=gettext("Sat");?></b></u></td>
+ <td align="center" class="listhdrr" style="cursor: pointer;" onclick="daytoggle('w1p7');"><u><b><?=gettext("Sun");?></b></u></td>
+ </tr>
+ <?php
+ $firstmonth = FALSE;
+ while ($daycounter<=$numberofdays) {
+ $weekcounter = date("W", mktime(0, 0, 0, date($monthcounter), date($daycounter), date($yearcounter)));
+ $weekcounter = ltrim($weekcounter, "0");
+ if ($positioncounter == 1) {
+ echo "<tr>";
+ }
+ if ($firstdayofmonth == $positioncounter) {
+ ?>
+ <td align="center" style="cursor: pointer;" class="listr" id="w<?=$weekcounter;?>p<?=$positioncounter;?>" onclick="daytoggle('w<?=$weekcounter;?>p<?=$positioncounter;?>-m<?=$monthcounter;?>d<?=$daycounter;?>');">
+ <?php
+ echo $daycounter;
+ $daycounter++;
+ $firstdayprinted = TRUE;
+ echo "</td>";
+ } elseif ($firstdayprinted == TRUE && $daycounter <= $numberofdays) {
+ ?>
+ <td align="center" style="cursor: pointer;" class="listr" id="w<?=$weekcounter;?>p<?=$positioncounter;?>" onclick="daytoggle('w<?=$weekcounter;?>p<?=$positioncounter;?>-m<?=$monthcounter;?>d<?=$daycounter;?>');">
+ <?php
+ echo $daycounter;
+ $daycounter++;
+ echo "</td>";
+ } else {
+ echo "<td align=\"center\" class=\"listr\"></td>";
+ }
+
+ if ($positioncounter == 7 || $daycounter > $numberofdays) {
+ $positioncounter = 1;
+ echo "</tr>";
+ } else {
+ $positioncounter++;
+ }
+
+ } //end while loop
+ ?>
+ </table>
+ </div>
+ <?php
+ if ($monthcounter == 12) {
+ $monthcounter = 1;
+ $yearcounter++;
+ } else {
+ $monthcounter++;
+ }
+ } //end for loop
+ ?>
+ <br />
+ <?=gettext("Click individual date to select that date only. Click the appropriate weekday Header to select all occurrences of that weekday.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top" class="vncellreq"><?=gettext("Time");?></td>
+ <td width="85%" class="vtable">
+ <table cellspacing="2" class="tabcont" summary="time">
+ <tr>
+ <td class="listhdrr" align="center"><?=gettext("Start Time");?></td><td></td><td class="listhdrr" align="center"><?=gettext("Stop Time");?></td>
+ </tr>
+ <tr>
+ <td>
+ <select name="starttimehour" class="formselect" id="starttimehour">
+ <?php
+ for ($i = 0; $i < 24; $i++) {
+ echo "<option value=\"$i\">";
+ echo $i;
+ echo "</option>";
+ }
+ ?>
+ </select>&nbsp;<?=gettext("Hr"); ?>&nbsp;&nbsp;
+ <select name="starttimemin" class="formselect" id="starttimemin">
+ <option value="00">00</option>
+ <option value="15">15</option>
+ <option value="30">30</option>
+ <option value="45">45</option>
+ <option value="59">59</option>
+ </select>&nbsp;<?=gettext("Min"); ?>
+ </td>
+ <td></td>
+ <td>
+ <select name="stoptimehour" class="formselect" id="stoptimehour">
+ <?php
+ for ($i = 0; $i < 24; $i++) {
+ if ($i == 23) {
+ $selected = "selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+
+ echo "<option value=\"$i\" $selected>";
+ echo $i;
+ echo "</option>";
+ }
+ ?>
+ </select>&nbsp;<?=gettext("Hr");?>&nbsp;&nbsp;
+ <select name="stoptimemin" class="formselect" id="stoptimemin">
+ <option value="00">00</option>
+ <option value="15">15</option>
+ <option value="30">30</option>
+ <option value="45">45</option>
+ <option value="59" selected="selected">59</option>
+ </select>&nbsp;<?=gettext("Min");?>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <?=gettext("Select the time range for the day(s) selected on the Month(s) above. A full day is 0:00-23:59.")?>
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top" class="vncell"><?=gettext("Time Range Description")?></td>
+ <td width="85%" class="vtable"><input name="timerangedescr" type="text" class="formfld unknown" id="timerangedescr" size="40" maxlength="40" /><br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).")?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="button" value="<?=gettext("Add Time");?>" class="formbtn" onclick="javascript:processEntries();" />&nbsp;&nbsp;&nbsp;
+ <input type="button" value="<?=gettext("Clear Selection");?>" class="formbtn" onclick="javascript:clearCalendar(); clearTime(); clearDescr();" />
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top" class="vtable"></td>
+ <td width="85%" class="vtable"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedule repeat");?></td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top" class="vncellreq"><?=gettext("Configured Ranges");?></td>
+ <td width="85%">
+ <table id="scheduletable" summary="range">
+ <tbody>
+ <tr>
+ <td align="center" class="listbg" width="35%"><?=gettext("Day(s)");?></td>
+ <td align="center" class="listbg" width="12%"><?=gettext("Start Time");?></td>
+ <td align="center" class="listbg" width="11%"><?=gettext("Stop Time");?></td>
+ <td align="center" class="listbg" width="42%"><?=gettext("Description");?></td>
+ </tr>
+ <?php
+ if ($getSchedule) {
+ $counter = 0;
+
+ foreach ($pconfig['timerange'] as $timerange) {
+ $tempFriendlyTime = "";
+ $tempID = "";
+ if ($timerange) {
+ $dayFriendly = "";
+ $tempFriendlyTime = "";
+ $timedescr = $timerange['rangedescr'];
+
+ //get hours
+ $temptimerange = $timerange['hour'];
+ $temptimeseparator = strrpos($temptimerange, "-");
+
+ $starttime = substr ($temptimerange, 0, $temptimeseparator);
+ $stoptime = substr ($temptimerange, $temptimeseparator+1);
+ $currentDay = "";
+ $firstDay = "";
+ $nextDay = "";
+ $foundEnd = false;
+ $firstDayFound = false;
+ $firstPrint = false;
+ $firstprint2 = false;
+
+ if ($timerange['month']) {
+ $tempmontharray = explode(",", $timerange['month']);
+ $tempdayarray = explode(",", $timerange['day']);
+ $arraycounter = 0;
+ foreach ($tempmontharray as $monthtmp) {
+ $month = $tempmontharray[$arraycounter];
+ $day = $tempdayarray[$arraycounter];
+ $daypos = date("w", mktime(0, 0, 0, date($month), date($day), date("Y")));
+ //if sunday, set position to 7 to get correct week number. This is due to php limitations on ISO-8601. When we move to php5.1 we can change this.
+ if ($daypos == 0) {
+ $daypos = 7;
+ }
+ $weeknumber = date("W", mktime(0, 0, 0, date($month), date($day), date("Y")));
+ $weeknumber = ltrim($weeknumber, "0");
+
+ if ($firstPrint) {
+ $tempID .= ",";
+ }
+ $tempID .= "w" . $weeknumber . "p" . $daypos . "-m" . $month . "d" . $day;
+ $firstPrint = true;
+
+ if (!$firstDayFound) {
+ $firstDay = $day;
+ $firstmonth = $month;
+ $firstDayFound = true;
+ }
+
+ $currentDay = $day;
+ $nextDay = $tempdayarray[$arraycounter+1];
+ $currentDay++;
+ if (($currentDay != $nextDay) || ($tempmontharray[$arraycounter] != $tempmontharray[$arraycounter+1])) {
+ if ($firstprint2) {
+ $tempFriendlyTime .= ", ";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $tempFriendlyTime .= $monthArray[$firstmonth-1] . " " . $firstDay . " - " . $currentDay ;
+ } else {
+ $tempFriendlyTime .= $monthArray[$month-1] . " " . $day;
+ }
+ $firstDayFound = false;
+ $firstprint2 = true;
+ }
+ $arraycounter++;
+ }
+ } else {
+ $dayFriendly = $timerange['position'];
+ $tempID = $dayFriendly;
+ }
+
+ $tempTime = $tempID . "||" . $starttime . "-" . $stoptime . "||" . $timedescr;
+
+ //following code makes the days friendly appearing, IE instead of Mon, Tues, Wed it will show Mon - Wed
+ $foundEnd = false;
+ $firstDayFound = false;
+ $firstprint = false;
+ $tempFriendlyDayArray = explode(",", $dayFriendly);
+ $currentDay = "";
+ $firstDay = "";
+ $nextDay = "";
+ $i = 0;
+ if (!$timerange['month']) {
+ foreach ($tempFriendlyDayArray as $day) {
+ if ($day != "") {
+ if (!$firstDayFound) {
+ $firstDay = $tempFriendlyDayArray[$i];
+ $firstDayFound = true;
+ }
+ $currentDay =$tempFriendlyDayArray[$i];
+ //get next day
+ $nextDay = $tempFriendlyDayArray[$i+1];
+ $currentDay++;
+ if ($currentDay != $nextDay) {
+ if ($firstprint) {
+ $tempFriendlyTime .= ", ";
+ }
+ $currentDay--;
+ if ($currentDay != $firstDay) {
+ $tempFriendlyTime .= $dayArray[$firstDay-1] . " - " . $dayArray[$currentDay-1];
+ } else {
+ $tempFriendlyTime .= $dayArray[$firstDay-1];
+ }
+ $firstDayFound = false;
+ $firstprint = true;
+ }
+ $i++;
+ }
+ }
+ }
+ ?>
+ <tr>
+ <td>
+ <span class="vexpl"><?php echo $tempFriendlyTime; ?></span>
+ </td>
+ <td>
+ <input type='text' readonly='readonly' class='vexpl' name='starttime<?php echo $counter; ?>' id='starttime<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $starttime; ?>' />
+ </td>
+ <td>
+ <input type='text' readonly='readonly' class='vexpl' name='stoptime<?php echo $counter; ?>' id='stoptime<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $stoptime; ?>' />
+ </td>
+ <td>
+ <input type='text' readonly='readonly' class='vexpl' name='timedescr<?php echo $counter; ?>' id='timedescr<?php echo $counter; ?>' style=' word-wrap:break-word; width:100%; border:0px solid;' value='<?php echo $timedescr; ?>' />
+ </td>
+ <td>
+ <a onclick='editRow("<?php echo $tempTime; ?>",this); return false;' href='#'><img border='0' src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif' alt='edit' /></a>
+ </td>
+ <td>
+ <a onclick='removeRow(this); return false;' href='#'><img border='0' src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' alt='remove' /></a>
+ </td>
+ <td>
+ <input type='hidden' id='schedule<?php echo $counter; ?>' name='schedule<?php echo $counter; ?>' value='<?php echo $tempID; ?>' />
+ </td>
+ </tr>
+ <?php
+ $counter++;
+ }//end if
+ } // end foreach
+ }//end if
+ ?>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="15%" valign="top">&nbsp;</td>
+ <td width="85%">
+ <input id="submit" name="submit" type="submit" onclick="return checkForRanges();" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_schedules[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_shaper.php b/src/usr/local/www/firewall_shaper.php
new file mode 100644
index 0000000..7b8f489
--- /dev/null
+++ b/src/usr/local/www/firewall_shaper.php
@@ -0,0 +1,486 @@
+<?php
+/* $Id$ */
+/*
+ firewall_shaper.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-trafficshaper
+##|*NAME=Firewall: Traffic Shaper page
+##|*DESCR=Allow access to the 'Firewall: Traffic Shaper' page.
+##|*MATCH=firewall_shaper.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("rrd.inc");
+
+if ($_GET['reset'] <> "") {
+ /* XXX: Huh, why are we killing php? */
+ mwexec("killall -9 pfctl php");
+ exit;
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"));
+$shortcut_section = "trafficshaper";
+
+$shaperIFlist = get_configured_interface_with_descr();
+read_altq_config();
+/*
+ * The whole logic in these code maybe can be specified.
+ * If you find a better way contact me :).
+ */
+
+if ($_GET) {
+ if ($_GET['queue']) {
+ $qname = htmlspecialchars(trim($_GET['queue']));
+ }
+ if ($_GET['interface']) {
+ $interface = htmlspecialchars(trim($_GET['interface']));
+ }
+ if ($_GET['action']) {
+ $action = htmlspecialchars($_GET['action']);
+ }
+}
+if ($_POST) {
+ if ($_POST['name']) {
+ $qname = htmlspecialchars(trim($_POST['name']));
+ }
+ if ($_POST['interface']) {
+ $interface = htmlspecialchars(trim($_POST['interface']));
+ }
+ if ($_POST['parentqueue']) {
+ $parentqueue = htmlspecialchars(trim($_POST['parentqueue']));
+ }
+}
+
+if ($interface) {
+ $altq = $altq_list_queues[$interface];
+ if ($altq) {
+ $queue =& $altq->find_queue($interface, $qname);
+ } else {
+ $addnewaltq = true;
+ }
+}
+
+$dontshow = false;
+$newqueue = false;
+$output_form = "";
+
+if ($_GET) {
+ switch ($action) {
+ case "delete":
+ if ($queue) {
+ $queue->delete_queue();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ }
+ header("Location: firewall_shaper.php");
+ exit;
+ break;
+ case "resetall":
+ foreach ($altq_list_queues as $altq) {
+ $altq->delete_all();
+ }
+ unset($altq_list_queues);
+ $altq_list_queues = array();
+ $tree = "<ul class=\"tree\" >";
+ $tree .= get_interface_list_to_show();
+ $tree .= "</ul>";
+ unset($config['shaper']['queue']);
+ unset($queue);
+ unset($altq);
+ $can_add = false;
+ $can_enable = false;
+ $dontshow = true;
+ foreach ($config['filter']['rule'] as $key => $rule) {
+ if (isset($rule['wizard']) && $rule['wizard'] == "yes") {
+ unset($config['filter']['rule'][$key]);
+ }
+ }
+ if (write_config()) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ } else {
+ $savemsg = gettext("Unable to write config.xml (Access Denied?)");
+ }
+ $output_form = $default_shaper_message;
+
+ break;
+ case "add":
+ /* XXX: Find better way because we shouldn't know about this */
+ if ($altq) {
+ switch ($altq->GetScheduler()) {
+ case "PRIQ":
+ $q = new priq_queue();
+ break;
+ case "FAIRQ":
+ $q = new fairq_queue();
+ break;
+ case "HFSC":
+ $q = new hfsc_queue();
+ break;
+ case "CBQ":
+ $q = new cbq_queue();
+ break;
+ default:
+ /* XXX: Happens when sched == NONE?! */
+ $q = new altq_root_queue();
+ break;
+ }
+ } else if ($addnewaltq) {
+ $q = new altq_root_queue();
+ } else {
+ $input_errors[] = gettext("Could not create new queue/discipline!");
+ }
+
+ if ($q) {
+ $q->SetInterface($interface);
+ $output_form .= $q->build_form();
+ $output_form .= "<input type=\"hidden\" name=\"parentqueue\" id=\"parentqueue\"";
+ $output_form .= " value=\"".htmlspecialchars($qname)."\" />";
+ $newjavascript = $q->build_javascript();
+ unset($q);
+ $newqueue = true;
+ }
+ break;
+ case "show":
+ if ($queue) {
+ $output_form .= $queue->build_form();
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ case "enable":
+ if ($queue) {
+ $queue->SetEnabled("on");
+ $output_form .= $queue->build_form();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ case "disable":
+ if ($queue) {
+ $queue->SetEnabled("");
+ $output_form .= $queue->build_form();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ default:
+ $output_form .= $default_shaper_msg;
+ $dontshow = true;
+ break;
+ }
+} else if ($_POST) {
+ unset($input_errors);
+
+ if ($addnewaltq) {
+ $altq =& new altq_root_queue();
+ $altq->SetInterface($interface);
+
+ switch ($altq->GetBwscale()) {
+ case "Mb":
+ $factor = 1000 * 1000;
+ brak;
+ case "Kb":
+ $factor = 1000;
+ break;
+ case "b":
+ $factor = 1;
+ break;
+ case "Gb":
+ $factor = 1000 * 1000 * 1000;
+ break;
+ case "%": /* We don't use it for root_XXX queues. */
+ default: /* XXX assume Kb by default. */
+ $factor = 1000;
+ break;
+ }
+ $altq->SetAvailableBandwidth($altq->GetBandwidth() * $factor);
+ $altq->ReadConfig($_POST);
+ $altq->validate_input($_POST, $input_errors);
+ if (!$input_errors) {
+ unset($tmppath);
+ $tmppath[] = $altq->GetInterface();
+ $altq->SetLink($tmppath);
+ $altq->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ $can_enable = true;
+ $can_add = true;
+ }
+ read_altq_config();
+ $output_form .= $altq->build_form();
+
+ } else if ($parentqueue) { /* Add a new queue */
+ $qtmp =& $altq->find_queue($interface, $parentqueue);
+ if ($qtmp) {
+ $tmppath =& $qtmp->GetLink();
+ array_push($tmppath, $qname);
+ $tmp =& $qtmp->add_queue($interface, $_POST, $tmppath, $input_errors);
+ if (!$input_errors) {
+ array_pop($tmppath);
+ $tmp->wconfig();
+ $can_enable = true;
+ if ($tmp->CanHaveChildren() && $can_enable) {
+ if ($tmp->GetDefault() <> "") {
+ $can_add = false;
+ } else {
+ $can_add = true;
+ }
+ } else {
+ $can_add = false;
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ $can_enable = true;
+ if ($altq->GetScheduler() != "PRIQ") { /* XXX */
+ if ($tmp->GetDefault() <> "") {
+ $can_add = false;
+ } else {
+ $can_add = true;
+ }
+ }
+ }
+ read_altq_config();
+ $output_form .= $tmp->build_form();
+ } else {
+ $input_errors[] = gettext("Could not add new queue.");
+ }
+ } else if ($_POST['apply']) {
+ write_config();
+
+ $retval = 0;
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ /* reset rrd queues */
+ system("rm -f /var/db/rrd/*queuedrops.rrd");
+ system("rm -f /var/db/rrd/*queues.rrd");
+ enable_rrd_graphing();
+
+ clear_subsystem_dirty('shaper');
+
+ if ($queue) {
+ $output_form .= $queue->build_form();
+ $dontshow = false;
+ } else {
+ $output_form .= $default_shaper_message;
+ $dontshow = true;
+ }
+ } else if ($queue) {
+ $queue->validate_input($_POST, $input_errors);
+ if (!$input_errors) {
+ $queue->update_altq_queue_data($_POST);
+ $queue->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ $dontshow = false;
+ }
+ read_altq_config();
+ $output_form .= $queue->build_form();
+ } else {
+ $output_form .= $default_shaper_msg;
+ $dontshow = true;
+ }
+ mwexec("killall qstats");
+} else {
+ $output_form .= $default_shaper_msg;
+ $dontshow = true;
+}
+
+if ($queue) {
+ if ($queue->GetEnabled()) {
+ $can_enable = true;
+ } else {
+ $can_enable = false;
+ }
+ if ($queue->CanHaveChildren() && $can_enable) {
+ if ($altq->GetQname() <> $queue->GetQname() && $queue->GetDefault() <> "") {
+ $can_add = false;
+ } else {
+ $can_add = true;
+ }
+ } else {
+ $can_add = false;
+ }
+}
+
+$tree = "<ul class=\"tree\" >";
+if (is_array($altq_list_queues)) {
+ foreach ($altq_list_queues as $tmpaltq) {
+ $tree .= $tmpaltq->build_tree();
+ }
+ $tree .= get_interface_list_to_show();
+}
+$tree .= "</ul>";
+
+if (!$dontshow || $newqueue) {
+
+ $output_form .= "<tr><td width=\"22%\" valign=\"middle\" class=\"vncellreq\">";
+ $output_form .= "<br />" . gettext("Queue Actions") . "<br />";
+ $output_form .= "</td><td valign=\"middle\" class=\"vncellreq\" width=\"78%\"><br />";
+
+ $output_form .= "<input type=\"submit\" name=\"Submit\" value=\"" . gettext("Save") . "\" class=\"formbtn\" />";
+ if ($can_add || $addnewaltq) {
+ $output_form .= "<a href=\"firewall_shaper.php?interface=";
+ $output_form .= $interface;
+ if ($queue) {
+ $output_form .= "&amp;queue=" . $queue->GetQname();
+ }
+ $output_form .= "&amp;action=add\">";
+ $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"add\" value=\"" . gettext("Add new queue") . "\" />";
+ $output_form .= "</a>";
+ }
+ $output_form .= "<a href=\"firewall_shaper.php?interface=";
+ $output_form .= $interface . "&amp;queue=";
+ if ($queue) {
+ $output_form .= "&amp;queue=" . $queue->GetQname();
+ }
+ $output_form .= "&amp;action=delete\">";
+ $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"delete\"";
+ if ($queue) {
+ $output_form .= " value=\"" . gettext("Delete this queue") . "\" />";
+ } else {
+ $output_form .= " value=\"" . gettext("Disable shaper on interface") . "\" />";
+ }
+ $output_form .= "</a>";
+ $output_form .= "<br /></td></tr>";
+ $output_form .= "</table>";
+} else {
+ $output_form .= "</table>";
+}
+
+$output = "<table summary=\"output form\">";
+$output .= $output_form;
+
+//$pgtitle = "Firewall: Shaper: By Interface View";
+$closehead = false;
+include("head.inc");
+?>
+<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
+<script type="text/javascript" src="./tree/tree.js"></script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
+<?php
+if ($queue) {
+ echo $queue->build_javascript();
+}
+echo $newjavascript;
+
+include("fbegin.inc");
+?>
+<div id="inputerrors"></div>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="firewall_shaper.php" method="post" id="iform" name="iform">
+
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('shaper')): ?><p>
+<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("By Interface"), true, "firewall_shaper.php");
+ $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
+ $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
+ $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
+ $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+<?php if (count($altq_list_queues) > 0): ?>
+ <tr class="tabcont">
+ <td width="25%" align="left">
+ <a href="firewall_shaper.php?action=resetall" >
+ <input type="button" value="<?=gettext("Remove Shaper")?>" class="formbtn" />
+ </a>
+ </td>
+ <td width="75%"> </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td width="25%" valign="top" align="left">
+ <?php
+ echo $tree;
+ ?>
+ </td>
+ <td width="75%" valign="top" align="center">
+ <div id="shaperarea" style="position:relative">
+ <?php
+ echo $output;
+ ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_shaper_layer7.php b/src/usr/local/www/firewall_shaper_layer7.php
new file mode 100644
index 0000000..9a72233
--- /dev/null
+++ b/src/usr/local/www/firewall_shaper_layer7.php
@@ -0,0 +1,584 @@
+<?php
+/* $Id$ */
+/*
+ firewall_shaper_layer7.php
+ Copyright (C) 2008 Helder Pereira, André Ribeiro
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-trafficshaper-layer7
+##|*NAME=Firewall: Traffic Shaper: Layer7 page
+##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Layer7' page.
+##|*MATCH=firewall_shaper_layer7.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+// Variables protocols (dynamic) and structures (static)
+$avail_protos =& generate_protocols_array();
+$avail_structures = array("action", "queue", "limiter");
+
+// Available behaviours
+$avail_behaviours_action = array("block");
+read_altq_config();
+$avail_behaviours_altq = get_altq_name_list();
+read_dummynet_config();
+$avail_behaviours_limiter = get_dummynet_name_list();
+$show_proto_form = false;
+
+//More variables
+$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Layer7"));
+$shortcut_section = "trafficshaper";
+
+$output_form = "";
+
+$default_layer7shaper_msg = "<tr><td colspan=\"4\">";
+$default_layer7shaper_msg .= "<span class=\"vexpl\"><span class=\"red\"><strong>" . gettext("Note") . ":<br />";
+$default_layer7shaper_msg .= "</strong></span>" . gettext("You can add new layer7 protocol patterns by simply uploading the file") . " <a href=\"diag_patterns.php\">" . gettext("here") . ".</a></span><br />";
+$default_layer7shaper_msg .= "</td></tr>";
+
+read_layer7_config();
+
+if ($_GET['reset'] <> "") {
+ // kill all ipfw-classifyd processes
+ mwexec("killall -9 ipfw-classifyd");
+ exit;
+}
+
+if ($_GET) {
+ if ($_GET['container']) {
+ $name = htmlspecialchars(trim($_GET['container']));
+ }
+ if ($_GET['action']) {
+ $action = htmlspecialchars($_GET['action']);
+ }
+}
+
+if ($_POST) {
+ if ($_POST['container']) {
+ $name = htmlspecialchars(trim($_POST['container']));
+ }
+}
+
+if ($name) {
+ //Get the object from the 7rules list
+ $container = $layer7_rules_list[$name];
+}
+
+if ($_GET) {
+ switch ($action) {
+ case "add":
+ $show_proto_form = true;
+ $container = new layer7();
+ $output_form .= $container->build_form(); //constructs the graphical interface on the right side
+ unset($container);
+ break;
+ case "show":
+ $show_proto_form = true;
+ if ($container) {
+ $output_form .= $container->build_form();
+ } else {
+ $show_proto_form = false;
+ $input_errors[] = gettext("Layer7 Rules Container not found!");
+ }
+ break;
+ default:
+ echo log_error("Get default");
+ $show_proto_form = false;
+ $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
+ break;
+ }
+} else if ($_POST) {
+ //add a new l7rules container
+ $show_proto_form = true;
+ unset($input_errors);
+
+ if ($_POST['submit']) {
+ if (isset($layer7_rules_list[$name])) {
+ $l7r = $layer7_rules_list[$name];
+ $_POST['divert_port'] = $l7r->GetRPort();
+ } else {
+ $l7r =& new layer7();
+ $_POST['divert_port'] = $l7r->gen_divert_port();
+ }
+ for ($i = 0; $_POST['protocol'][$i] <> ""; $i++) {
+ $_POST['l7rules'][$i]['protocol'] = $_POST['protocol'][$i];
+ $_POST['l7rules'][$i]['structure'] = $_POST['structure'][$i];
+ $_POST['l7rules'][$i]['behaviour'] = $_POST['behaviour'][$i];
+ }
+ $l7r->validate_input($_POST, $input_errors);
+ $l7r->ReadConfig($_POST['container'], $_POST);
+ //Before writing the results, we need to test for repeated protocols
+ $non_dupes = array();
+ $dupes = array();
+ for ($j = 0; $j < $i; $j++) {
+ if (!$non_dupes[$_POST['protocol'][$j]]) {
+ $non_dupes[$_POST['protocol'][$j]] = true;
+ } else {
+ $dupes[] = $_POST['protocol'][$j];
+ }
+ }
+ unset($non_dupes);
+ if (sizeof($dupes) == 0 && !$input_errors) {
+ $l7r->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+
+ read_layer7_config();
+ } else {
+ if (sizeof($dupes) > 0) {
+ $dupe_error = gettext("Found the following repeated protocol definitions") . ": ";
+ foreach ($dupes as $dupe) {
+ $dupe_error .= "$dupe ";
+ }
+ $input_errors[] .= $dupe_error;
+ }
+ }
+ unset($dupes);
+ unset($dupe_error);
+ //Even if there are repeated protocols, we won't lose any previous values
+ //The user will be able to solve the situation
+ $output_form .= $l7r->build_form();
+ //Necessary to correctly build the proto form
+ $container = $layer7_rules_list[$name];
+ if ($input_errors) {
+ $container =& $l7r;
+ }
+ } else if ($_POST['apply']) {
+ write_config();
+
+ $retval = 0;
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ clear_subsystem_dirty('shaper');
+
+ if ($container) {
+ $output_form .= $container->build_form();
+ } else {
+ $show_proto_form = false;
+ $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
+ }
+ } else if ($_POST['delete']) {
+ $container->delete_l7c();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ unset($container);
+
+ header("Location: firewall_shaper_layer7.php");
+ exit;
+ } else {
+ $show_proto_form = false;
+ }
+} else {
+ $show_proto_form = false;
+ $output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
+}
+
+// Builds the left tree
+$tree = "<ul class=\"tree\" >";
+if (is_array($layer7_rules_list)) {
+ foreach ($layer7_rules_list as $tmpl7) {
+ $tree .= $tmpl7->build_tree();
+ }
+}
+$tree .= "</ul>";
+$closehead = false;
+include("head.inc");
+?>
+<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
+<script type="text/javascript" src="./tree/tree.js"></script>
+
+<script type="text/javascript">
+//<![CDATA[
+var initial_count = new Array();
+var rows_limit = 0; // Set to 0 to disable limitation
+
+/* Build the behaviours arrays in javascript */
+var js_behaviours_action = ['block']; //static
+
+var js_behaviours_altq = new Array();
+js_behaviours_altq = array_altq(js_behaviours_altq);
+
+var js_behaviours_limiter = new Array();
+js_behaviours_limiter = array_limiter(js_behaviours_limiter);
+
+function array_altq(a_behav) {
+ var index;
+ <?php
+ if (!empty($avail_behaviours_altq)) {
+ foreach ($avail_behaviours_altq as $key => $queue) { ?>
+ name = "<?= $queue; ?>";
+ index = <?= $key; ?>;
+ a_behav[index] = name;
+ <?php
+ }
+ } ?>
+ return a_behav;
+}
+
+function array_limiter(a_behav) {
+ var index;
+ <?php
+ if (!empty($avail_behaviours_limiter)) {
+ foreach ($avail_behaviours_limiter as $key => $limiter) { ?>
+ name = "<?= $limiter; ?>";
+ index = <?= $key; ?>;
+ a_behav[index] = name;
+ <?php
+ }
+ } ?>
+ return a_behav;
+}
+
+/* Fill the variables with available protocols, structures and behaviours */
+function fillProtocol() {
+ var protocol = '<select name="protocol[]" style="font-size:8pt">';
+ var name;
+
+ <?php foreach ($avail_protos as $key => $proto) { ?>
+ name = "<?= $proto; ?>";
+ protocol += "<option value=" + name + ">" + name + "<\/option>";
+ <?php } ?>
+ protocol += "<\/select>";
+
+ return protocol;
+}
+
+function fillStructure() {
+ var structure = '<select name="structure[]" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">';
+ var name;
+ <?php foreach ($avail_structures as $key => $struct) { ?>
+ name = "<?= $struct; ?>";
+ if (name == "queue") {
+ if (js_behaviours_altq != "") {
+ structure += "<option value=" + name + ">" + name + "<\/option>";
+ }
+ } else {
+ if (name == "limiter") {
+ if (js_behaviours_limiter != "") {
+ structure += "<option value=" + name + ">" + name + "<\/option>";
+ }
+ } else {
+ structure += "<option value=" + name + ">" + name + "<\/option>"; //action
+ }
+ }
+ <?php } ?>
+ structure += "<\/select>";
+
+ return structure;
+}
+
+//Used by default to fill the values when inserting a new row.
+function fillBehaviour() {
+ var behaviour = '<select name="behaviour[]" style="width:80px; font-size:8pt">';
+ var name;
+ <?php foreach ($avail_behaviours_action as $key => $behav) { ?>
+ name = "<?= $behav; ?>";
+ behaviour += "<option value=" + name + ">" + name + "<\/option>";
+ <?php } ?>
+ behaviour += "<\/select>";
+
+ return behaviour;
+}
+
+/* Change the values on behaviours select when changing the structure row */
+function changeBehaviourValues(row) {
+ var selectedRow = row.rowIndex - 2; //because row.rowIndex returns 2, not 0
+ var structureSelected = document.getElementsByName("structure[]")[selectedRow].value;
+
+ //Select the behaviours values to array a_behav
+ var a_behav = new Array();
+ if (structureSelected == "action") {
+ a_behav = js_behaviours_action; //static
+ } else {
+ if (structureSelected == "queue") {
+ a_behav = js_behaviours_altq;
+ } else {
+ a_behav = js_behaviours_limiter;
+ }
+ }
+
+ //Build the html statement with the array values previously selected
+ var new_behav;
+ var name;
+ for (i = 0; i < a_behav.length; i++) {
+ new_behav += "<option value=" + a_behav[i] + ">" + a_behav[i] + "<\/option>";
+ }
+
+ document.getElementsByName("behaviour[]")[selectedRow].innerHTML = new_behav;
+}
+
+/* Add row to the table */
+function addRow(table_id) {
+ var tbl = document.getElementById(table_id);
+ // counting rows in table
+ var rows_count = tbl.rows.length;
+ if (initial_count[table_id] == undefined) {
+ // if it is first adding in this table setting initial rows count
+ initial_count[table_id] = rows_count;
+ }
+ // determining real count of added fields
+ var tFielsNum = rows_count - initial_count[table_id];
+ if (rows_limit != 0 && tFielsNum >= rows_limit) return false;
+
+ var remove = '<a onclick="removeRow(\''+table_id+'\',this.parentNode.parentNode)" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /><\/a>';
+
+ try {
+ var newRow = tbl.insertRow(rows_count);
+ var newCell = newRow.insertCell(0);
+ newCell.innerHTML = fillProtocol();
+ var newCell = newRow.insertCell(1);
+ newCell.innerHTML = fillStructure();
+ var newCell = newRow.insertCell(2);
+ newCell.innerHTML = fillBehaviour();
+ var newCell = newRow.insertCell(3);
+ newCell.innerHTML = remove;
+ }
+ catch (ex) {
+ //if exception occurs
+ alert(ex);
+ }
+}
+
+/* Remove row from the table */
+function removeRow(tbl, row) {
+ var table = document.getElementById(tbl);
+ try {
+ table.deleteRow(row.rowIndex);
+ } catch (ex) {
+ alert(ex);
+ }
+}
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+<div id="inputerrors"></div>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="firewall_shaper_layer7.php" method="post" id="iform" name="iform">
+
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('shaper')): ?><p>
+<?php print_info_box_np(gettext("The traffic shaper configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper layer7">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
+ $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
+ $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
+ $tab_array[3] = array(gettext("Layer7"), true, "firewall_shaper_layer7.php");
+ $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+
+ <?php if (count($layer7_rules_list) > 0): ?>
+ <tr class="tabcont">
+ <td width="25%" align="left"></td>
+ <td width="75%"> </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" valign="top" align="left">
+ <?php
+ echo $tree;
+ ?>
+ <br /><br />
+ <a href="firewall_shaper_layer7.php?action=add">
+ <img src="./themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("Create new l7 rules group"); ?>" width="17" height="17" border="0" alt="add" /> <?=gettext("Create new l7 rules group"); ?>
+ </a>
+ <br />
+ </td>
+ <td width="75%" valign="top" align="center">
+ <div id="shaperarea" style="position:relative">
+ <table summary="output form">
+ <?php
+ echo $output_form;
+ ?>
+
+ <!-- Layer 7 rules form -->
+ <?php if ($show_proto_form): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">
+ <div id="addressnetworkport">
+ <?=gettext("Rule(s)"); ?>
+ </div>
+ </td>
+
+ <td width="78%" class="vtable">
+ <table width="236" id="maintable" summary="main table">
+ <tbody>
+ <tr>
+ <td colspan="4">
+ <div style="font-size: 8pt; padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066;" id="itemhelp">
+ <?=gettext("Add one or more rules"); ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div style="font-size: 8pt; padding:5px;" id="onecolumn">
+ <?=gettext("Protocol"); ?>
+ </div>
+ </td>
+ <td>
+ <div style="font-size: 8pt; padding:5px;" id="twocolumn">
+ <?=gettext("Structure"); ?>
+ </div>
+ </td>
+ <td>
+ <div style="font-size: 8pt; padding:5px;" id="threecolumn">
+ <?=gettext("Behaviour"); ?>
+ </div>
+ </td>
+ </tr>
+ <!-- PHP Code to generate the existing rules -->
+ <?php
+ if ($container) {
+ foreach ($container->rsets as $l7rule) {
+ ?>
+ <tr>
+ <td>
+ <select name="protocol[]" class="formselect" style="font-size:8pt">
+ <?php foreach ($avail_protos as $proto): ?>
+ <option value="<?=$proto;?>" <?php if ($proto == $l7rule->GetRProtocol()) echo "selected=\"selected\""; ?>><?=$proto;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ <td>
+ <select name="structure[]" class="formselect" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">
+ <?php foreach ($avail_structures as $struct) {
+ if ($struct == "queue") {
+ if (!empty($avail_behaviours_altq)) { ?>
+ <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
+ <?php }
+ } else {
+ if ($struct == "limiter") {
+ if (!empty($avail_behaviours_limiter)) { ?>
+ <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
+ <?php }
+ } else {
+ if ($struct == "action") { ?>
+ <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
+ <?php }
+ }
+ }
+ } ?>
+ </select>
+ </td>
+ <td>
+ <select name="behaviour[]" class="formselect" style="width:80px; font-size:8pt">
+ <?php if ($l7rule->GetRStructure() == "action"): ?>
+ <?php foreach ($avail_behaviours_action as $behaviour): ?>
+ <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
+ <?php endforeach; ?>
+ <?php endif; ?>
+ <?php if ($l7rule->GetRStructure() == "queue"): ?>
+ <?php foreach ($avail_behaviours_altq as $behaviour): ?>
+ <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
+ <?php endforeach; ?>
+ <?php endif; ?>
+ <?php if ($l7rule->GetRStructure() == "limiter"): ?>
+ <?php foreach ($avail_behaviours_limiter as $behaviour): ?>
+ <option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
+ <?php endforeach; ?>
+ <?php endif; ?>
+ </select>
+ </td>
+ <td>
+ <a onclick="removeRow('maintable', this.parentNode.parentNode); return false;" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /></a>
+ </td>
+ </tr>
+ <?php
+ } //end foreach
+ } //end if
+ ?>
+ </tbody>
+ </table>
+
+ <a onclick="javascript:addRow('maintable'); return false;" href="#"> <img border="0"
+ src="/themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif"
+ alt="" title="<?=gettext("add another entry"); ?>" /> </a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">
+ &nbsp;
+ </td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+
+ <a href="firewall_shaper_layer7.php">
+ <input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" />
+
+ <?php if ($container): ?>
+ <input id="delete" type="submit" class="formbtn" name="delete" value="<?=gettext("Delete"); ?>" />
+ <?php endif ?>
+ </a>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <!-- End of layer7 rules form -->
+ </table>
+ </div><!-- end of div:shape area -->
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_shaper_queues.php b/src/usr/local/www/firewall_shaper_queues.php
new file mode 100644
index 0000000..6aa062b
--- /dev/null
+++ b/src/usr/local/www/firewall_shaper_queues.php
@@ -0,0 +1,244 @@
+<?php
+/* $Id$ */
+/*
+ firewall_shaper_queues.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-trafficshaper-queues
+##|*NAME=Firewall: Traffic Shaper: Queues page
+##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Queues' page.
+##|*MATCH=firewall_shaper_queues.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("rrd.inc");
+
+if ($_GET['reset'] <> "") {
+ mwexec("killall -9 pfctl");
+ exit;
+}
+
+$shaperIFlist = get_configured_interface_with_descr();
+read_altq_config();
+$qlist =& get_unique_queue_list();
+
+if (!is_array($qlist)) {
+ $qlist = array();
+}
+
+$tree = "<ul class=\"tree\" >";
+foreach ($qlist as $queue => $qkey) {
+ $tree .= "<li><a href=\"firewall_shaper_queues.php?queue={$queue}&amp;action=show\" >";
+ if (isset($shaperIFlist[$queue])) {
+ $tree .= $shaperIFlist[$queue] . "</a></li>";
+ } else {
+ $tree .= $queue . "</a></li>";
+ }
+}
+$tree .= "</ul>";
+
+if ($_GET) {
+ if ($_GET['queue']) {
+ $qname = htmlspecialchars(trim($_GET['queue']));
+ }
+ if ($_GET['interface']) {
+ $interface = htmlspecialchars(trim($_GET['interface']));
+ }
+ if ($_GET['action']) {
+ $action = htmlspecialchars($_GET['action']);
+ }
+
+ switch ($action) {
+ case "delete":
+ $altq =& $altq_list_queues[$interface];
+ $qtmp =& $altq->find_queue("", $qname);
+ if ($qtmp) {
+ $qtmp->delete_queue();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ }
+ header("Location: firewall_shaper_queues.php");
+ exit;
+ break;
+ case "add":
+ /*
+ * XXX: WARNING: This returns the first it finds.
+ * Maybe the user expects something else?!
+ */
+ foreach ($altq_list_queues as $altq) {
+ $qtmp =& $altq->find_queue("", $qname);
+ if ($qtmp) {
+ $copycfg = array();
+ $qtmp->copy_queue($interface, $copycfg);
+ $aq =& $altq_list_queues[$interface];
+ if ($qname == $qtmp->GetInterface()) {
+ $config['shaper']['queue'][] = $copycfg;
+ } else if ($aq) {
+ $tmp1 =& $qtmp->find_parentqueue($interface, $qname);
+ if ($tmp1) {
+ $tmp =& $aq->find_queue($interface, $tmp1->GetQname());
+ }
+
+ if ($tmp) {
+ $link =& get_reference_to_me_in_config($tmp->GetLink());
+ } else {
+ $link =& get_reference_to_me_in_config($aq->GetLink());
+ }
+ $link['queue'][] = $copycfg;
+ } else {
+ $newroot = array();
+ $newroot['name'] = $interface;
+ $newroot['interface'] = $interface;
+ $newroot['scheduler'] = $altq->GetScheduler();
+ $newroot['queue'] = array();
+ $newroot['queue'][] = $copycfg;
+ $config['shaper']['queue'][] = $newroot;
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ break;
+ }
+ }
+
+ header("Location: firewall_shaper_queues.php?queue=".$qname."&action=show");
+ exit;
+ break;
+ case "show":
+ foreach ($config['interfaces'] as $if => $ifdesc) {
+ $altq = $altq_list_queues[$if];
+ if ($altq) {
+ $qtmp =& $altq->find_queue("", $qname);
+ if ($qtmp) {
+ $output .= $qtmp->build_shortform();
+ } else {
+ $output .= build_iface_without_this_queue($if, $qname);
+ }
+ } else {
+ if (!is_altq_capable($ifdesc['if'])) {
+ continue;
+ }
+ if (!isset($ifdesc['enable']) && $if != "lan" && $if != "wan") {
+ continue;
+ }
+ $output .= build_iface_without_this_queue($if, $qname);
+ }
+ }
+ break;
+ }
+}
+
+if ($_POST['apply']) {
+ write_config();
+
+ $retval = 0;
+ /* Setup pf rules since the user may have changed the optimization value */
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ /* reset rrd queues */
+ system("rm -f /var/db/rrd/*queuedrops.rrd");
+ system("rm -f /var/db/rrd/*queues.rrd");
+ enable_rrd_graphing();
+
+ clear_subsystem_dirty('shaper');
+}
+
+$pgtitle = gettext("Firewall: Shaper: By Queues View");
+$shortcut_section = "trafficshaper";
+$closehead = false;
+include("head.inc");
+?>
+<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
+<script type="text/javascript" src="./tree/tree.js"></script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<div id="inputerrors"></div>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="firewall_shaper_queues.php" method="post" name="iform" id="iform">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('shaper')): ?><p>
+<?php print_info_box_np(gettext("The traffic shaper configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper queues">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
+ $tab_array[1] = array(gettext("By Queue"), true, "firewall_shaper_queues.php");
+ $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
+ $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
+ $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td valign="top">
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="30%" valign="top" align="left">
+ <?php echo $tree; ?>
+ </td>
+ <td width="70%" valign="top" align="center">
+ <?php
+ if ($qname) {
+ echo "<p class=\"pgtitle\">" . $qname . "</p><br />";
+ }
+ echo "<table align=\"center\" class=\"tabcont\" width=\"80%\" border=\"0\" cellpadding=\"4\" cellspacing=\"0\" summary=\"output form\">";
+ echo $output;
+ echo "<tr><td>&nbsp;</td></tr>";
+ echo "</table>";
+ ?>
+ </td>
+ </tr>
+ </table><!-- table:main area -->
+ </div><!-- div:main area -->
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_shaper_vinterface.php b/src/usr/local/www/firewall_shaper_vinterface.php
new file mode 100644
index 0000000..ffa3f15
--- /dev/null
+++ b/src/usr/local/www/firewall_shaper_vinterface.php
@@ -0,0 +1,475 @@
+<?php
+/* $Id$ */
+/*
+ firewall_shaper_vinterface.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-trafficshaper-limiter
+##|*NAME=Firewall: Traffic Shaper: Limiter page
+##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Limiter' page.
+##|*MATCH=firewall_shaper_vinterface.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if ($_GET['reset'] <> "") {
+ mwexec("/usr/bin/killall -9 pfctl");
+ exit;
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Limiter"));
+$shortcut_section = "trafficshaper-limiters";
+
+read_dummynet_config();
+/*
+ * The whole logic in these code maybe can be specified.
+ * If you find a better way contact me :).
+ */
+
+if ($_GET) {
+ if ($_GET['queue']) {
+ $qname = htmlspecialchars(trim($_GET['queue']));
+ }
+ if ($_GET['pipe']) {
+ $pipe = htmlspecialchars(trim($_GET['pipe']));
+ }
+ if ($_GET['action']) {
+ $action = htmlspecialchars($_GET['action']);
+ }
+}
+if ($_POST) {
+ if ($_POST['name']) {
+ $qname = htmlspecialchars(trim($_POST['name']));
+ } else if ($_POST['newname']) {
+ $qname = htmlspecialchars(trim($_POST['newname']));
+ }
+ if ($_POST['pipe']) {
+ $pipe = htmlspecialchars(trim($_POST['pipe']));
+ } else {
+ $pipe = htmlspecialchars(trim($qname));
+ }
+ if ($_POST['parentqueue']) {
+ $parentqueue = htmlspecialchars(trim($_POST['parentqueue']));
+ }
+}
+
+if ($pipe) {
+ $dnpipe = $dummynet_pipe_list[$pipe];
+ if ($dnpipe) {
+ $queue =& $dnpipe->find_queue($pipe, $qname);
+ } else {
+ $addnewpipe = true;
+ }
+}
+
+$dontshow = false;
+$newqueue = false;
+$output_form = "";
+
+if ($_GET) {
+ switch ($action) {
+ case "delete":
+ if ($queue) {
+ if (is_array($config['filter']['rule'])) {
+ foreach ($config['filter']['rule'] as $rule) {
+ if ($rule['dnpipe'] == $queue->GetQname() || $rule['pdnpipe'] == $queue->GetQname()) {
+ $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleting.");
+ }
+ }
+ }
+ if (!$input_errors) {
+ $queue->delete_queue();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ header("Location: firewall_shaper_vinterface.php");
+ exit;
+ }
+ $output_form .= $queue->build_form();
+ } else {
+ $input_errors[] = sprintf(gettext("No queue with name %s was found!"), $qname);
+ $output_form .= $dn_default_shaper_msg;
+ $dontshow = true;
+ }
+ break;
+ case "resetall":
+ foreach ($dummynet_pipe_list as $dn) {
+ $dn->delete_queue();
+ }
+ unset($dummynet_pipe_list);
+ $dummynet_pipe_list = array();
+ unset($config['dnshaper']['queue']);
+ unset($queue);
+ unset($pipe);
+ $can_add = false;
+ $can_enable = false;
+ $dontshow = true;
+ foreach ($config['filter']['rule'] as $key => $rule) {
+ if (isset($rule['dnpipe'])) {
+ unset($config['filter']['rule'][$key]['dnpipe']);
+ }
+ if (isset($rule['pdnpipe'])) {
+ unset($config['filter']['rule'][$key]['pdnpipe']);
+ }
+ }
+ if (write_config()) {
+ $retval = 0;
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ } else {
+ $savemsg = gettext("Unable to write config.xml (Access Denied?)");
+ }
+ $output_form = $dn_default_shaper_message;
+
+ break;
+ case "add":
+ if ($dnpipe) {
+ $q = new dnqueue_class();
+ $q->SetPipe($pipe);
+ $output_form .= "<input type=\"hidden\" name=\"parentqueue\" id=\"parentqueue\"";
+ $output_form .= " value=\"".$pipe."\" />";
+ } else if ($addnewpipe) {
+ $q = new dnpipe_class();
+ $q->SetQname($pipe);
+ } else {
+ $input_errors[] = gettext("Could not create new queue/discipline!");
+ }
+
+ if ($q) {
+ $output_form .= $q->build_form();
+ $newjavascript = $q->build_javascript();
+ unset($q);
+ $newqueue = true;
+ }
+ break;
+ case "show":
+ if ($queue) {
+ $output_form .= $queue->build_form();
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ case "enable":
+ if ($queue) {
+ $queue->SetEnabled("on");
+ $output_form .= $queue->build_form();
+ $queue->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ case "disable":
+ if ($queue) {
+ $queue->SetEnabled("");
+ $output_form .= $queue->build_form();
+ $queue->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ } else {
+ $input_errors[] = gettext("Queue not found!");
+ }
+ break;
+ default:
+ $output_form .= $dn_default_shaper_msg;
+ $dontshow = true;
+ break;
+ }
+} else if ($_POST) {
+ unset($input_errors);
+
+ if ($addnewpipe) {
+ if (!empty($dummynet_pipe_list[$qname])) {
+ $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter");
+ } else {
+ $dnpipe =& new dnpipe_class();
+
+ $dnpipe->ReadConfig($_POST);
+ $dnpipe->validate_input($_POST, $input_errors);
+ if (!$input_errors) {
+ $number = dnpipe_find_nextnumber();
+ $dnpipe->SetNumber($number);
+ unset($tmppath);
+ $tmppath[] = $dnpipe->GetQname();
+ $dnpipe->SetLink($tmppath);
+ $dnpipe->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ $can_enable = true;
+ $can_add = true;
+ }
+
+ read_dummynet_config();
+ $output_form .= $dnpipe->build_form();
+ $newjavascript = $dnpipe->build_javascript();
+ }
+ } else if ($parentqueue) { /* Add a new queue */
+ if (!empty($dummynet_pipe_list[$qname])) {
+ $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter");
+ } else if ($dnpipe) {
+ $tmppath =& $dnpipe->GetLink();
+ array_push($tmppath, $qname);
+ $tmp =& $dnpipe->add_queue($pipe, $_POST, $tmppath, $input_errors);
+ if (!$input_errors) {
+ array_pop($tmppath);
+ $tmp->wconfig();
+ if (write_config()) {
+ $can_enable = true;
+ $can_add = false;
+ mark_subsystem_dirty('shaper');
+ }
+ }
+ read_dummynet_config();
+ $output_form .= $tmp->build_form();
+ } else {
+ $input_errors[] = gettext("Could not add new queue.");
+ }
+ } else if ($_POST['apply']) {
+ write_config();
+
+ $retval = 0;
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ /* XXX: TODO Make dummynet pretty graphs */
+ // enable_rrd_graphing();
+
+ clear_subsystem_dirty('shaper');
+
+ if ($queue) {
+ $output_form .= $queue->build_form();
+ $dontshow = false;
+ } else {
+ $output_form .= $dn_default_shaper_message;
+ $dontshow = true;
+ }
+ } else if ($queue) {
+ $queue->validate_input($_POST, $input_errors);
+ if (!$input_errors) {
+ $queue->update_dn_data($_POST);
+ $queue->wconfig();
+ if (write_config()) {
+ mark_subsystem_dirty('shaper');
+ }
+ $dontshow = false;
+ }
+ read_dummynet_config();
+ $output_form .= $queue->build_form();
+ } else {
+ $output_form .= $dn_default_shaper_msg;
+ $dontshow = true;
+ }
+} else {
+ $output_form .= $dn_default_shaper_msg;
+ $dontshow = true;
+}
+
+if ($queue) {
+ if ($queue->GetEnabled()) {
+ $can_enable = true;
+ } else {
+ $can_enable = false;
+ }
+ if ($queue->CanHaveChildren()) {
+ $can_add = true;
+ } else {
+ $can_add = false;
+ }
+}
+
+$tree = "<ul class=\"tree\" >";
+if (is_array($dummynet_pipe_list)) {
+ foreach ($dummynet_pipe_list as $tmpdn) {
+ $tree .= $tmpdn->build_tree();
+ }
+}
+$tree .= "</ul>";
+
+if (!$dontshow || $newqueue) {
+
+$output_form .= "<tr><td width=\"22%\" valign=\"top\" class=\"vncellreq\">";
+$output_form .= gettext("Queue Actions");
+$output_form .= "</td><td valign=\"top\" class=\"vncellreq\" width=\"78%\">";
+
+$output_form .= "<input type=\"submit\" name=\"Submit\" value=\"" . gettext("Save") . "\" class=\"formbtn\" />";
+if ($can_add || $addnewaltq) {
+ $output_form .= "<a href=\"firewall_shaper_vinterface.php?pipe=";
+ $output_form .= $pipe;
+ if ($queue) {
+ $output_form .= "&amp;queue=" . $queue->GetQname();
+ }
+ $output_form .= "&amp;action=add\">";
+ $output_form .= "<input type=\"button\" class=\"formbtn\" name=\"add\" value=\"" . gettext("Add new queue") ."\" />";
+ $output_form .= "</a>";
+}
+$output_form .= "<a href=\"firewall_shaper_vinterface.php?pipe=";
+$output_form .= $pipe;
+if ($queue) {
+ $output_form .= "&amp;queue=" . $queue->GetQname();
+}
+$output_form .= "&amp;action=delete\">";
+$output_form .= "<input type=\"button\" class=\"formbtn\" name=\"delete\"";
+if ($queue) {
+ $output_form .= " value=\"" . gettext("Delete this queue") ."\" />";
+} else {
+ $output_form .= " value=\"" . gettext("Delete Limiter") ."\" />";
+}
+$output_form .= "</a>";
+$output_form .= "</td></tr>";
+$output_form .= "</table>";
+} else {
+ $output_form .= "</table>";
+}
+
+$output = "<table summary=\"output form\">";
+$output .= $output_form;
+$closehead = false;
+include("head.inc");
+?>
+<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
+<script type="text/javascript" src="./tree/tree.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+function show_source_port_range() {
+ document.getElementById("sprtable").style.display = '';
+ document.getElementById("sprtable1").style.display = '';
+ document.getElementById("sprtable2").style.display = '';
+ document.getElementById("sprtable5").style.display = '';
+ document.getElementById("sprtable4").style.display = 'none';
+ document.getElementById("showadvancedboxspr").innerHTML='';
+}
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php
+if ($queue) {
+ echo $queue->build_javascript();
+} else {
+ echo $newjavascript;
+}
+
+include("fbegin.inc");
+?>
+<div id="inputerrors"></div>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="firewall_shaper_vinterface.php" method="post" id="iform" name="iform">
+
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('shaper')): ?><p>
+<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper limiter">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
+ $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
+ $tab_array[2] = array(gettext("Limiter"), true, "firewall_shaper_vinterface.php");
+ $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
+ $tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+<?php if (count($dummynet_pipe_list) > 0): ?>
+ <tr class="tabcont">
+ <td width="25%" align="left"></td>
+ <td width="75%"> </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td width="25%" valign="top" align="left">
+ <?php
+ echo $tree;
+ ?>
+ <br /><br />
+ <a href="firewall_shaper_vinterface.php?pipe=new&amp;action=add">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("Create new limiter");?>" width="17" height="17" border="0" alt="add" />&nbsp;<?=gettext("Create new limiter");?>
+ </a>
+ <br />
+ </td>
+ <td width="75%" valign="top" align="center">
+ <div id="shaperarea" style="position:relative">
+ <?php
+ echo $output;
+ ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type='text/javascript'>
+//<![CDATA[
+<?php
+ $totalrows = 0;
+ if (is_array($config['dnshaper']) && is_array($config['dnshaper']['queue'])) {
+ $totalrows = count($config['dnshaper']['queue']);
+ }
+ echo "totalrows = {$totalrows}";
+?>
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_shaper_wizards.php b/src/usr/local/www/firewall_shaper_wizards.php
new file mode 100644
index 0000000..583fdef
--- /dev/null
+++ b/src/usr/local/www/firewall_shaper_wizards.php
@@ -0,0 +1,146 @@
+<?php
+/* $Id$ */
+/*
+ firewall_shaper_wizards.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-trafficshaper-wizard
+##|*NAME=Firewall: Traffic Shaper: Wizard page
+##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Wizard' page.
+##|*MATCH=firewall_shaper_wizards.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("util.inc");
+
+if ($_GET['reset'] <> "") {
+ sigkillbyname('pfctl', SIGKILL);
+ exit;
+}
+
+if ($_POST['apply']) {
+ write_config();
+
+ $retval = 0;
+ /* Setup pf rules since the user may have changed the optimization value */
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ /* reset rrd queues */
+ unlink_if_exists("/var/db/rrd/*queuedrops.rrd");
+ unlink_if_exists("/var/db/rrd/*queues.rrd");
+ enable_rrd_graphing();
+
+ clear_subsystem_dirty('shaper');
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Wizards"));
+$shortcut_section = "trafficshaper";
+
+$wizards = array(
+ gettext("Multiple Lan/Wan") => "traffic_shaper_wizard_multi_all.xml",
+ gettext("Dedicated Links") => "traffic_shaper_wizard_dedicated.xml",
+);
+
+$closehead = false;
+include("head.inc");
+?>
+<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
+
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="firewall_shaper_wizards.php" method="post" id="iform" name="iform">
+
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('shaper')): ?><p>
+<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper wizard">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
+ $tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
+ $tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
+ $tab_array[3] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php");
+ $tab_array[4] = array(gettext("Wizards"), true, "firewall_shaper_wizards.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td class="listhdrr" width="25%" align="center" ><?=gettext("Wizard function");?></td>
+ <td class="listhdrr" width="75%" align="center"><?=gettext("Wizard Link");?></td>
+ </tr>
+<?php
+ foreach ($wizards as $key => $wizard):
+?>
+ <tr class="tabcont">
+ <td class="listlr" style="background-color: #e0e0e0" width="25%" align="center">
+<?php
+ echo $key;
+?>
+ </td>
+ <td class="listr" style="background-color: #e0e0e0" width="75%" align="center">
+<?php
+ echo "<a href=\"wizard.php?xml=" . $wizard ."\" >" .$wizard . "</a>";
+?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_virtual_ip.php b/src/usr/local/www/firewall_virtual_ip.php
new file mode 100644
index 0000000..148477f
--- /dev/null
+++ b/src/usr/local/www/firewall_virtual_ip.php
@@ -0,0 +1,373 @@
+<?php
+/* $Id$ */
+/*
+ firewall_virtual_ip.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Includes code from m0n0wall which is:
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Includes code from pfSense which is:
+ Copyright (C) 2004-2005 Scott Ullrich <geekgod@pfsense.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-virtualipaddresses
+##|*NAME=Firewall: Virtual IP Addresses page
+##|*DESCR=Allow access to the 'Firewall: Virtual IP Addresses' page.
+##|*MATCH=firewall_virtual_ip.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['virtualip']['vip'])) {
+ $config['virtualip']['vip'] = array();
+}
+$a_vip = &$config['virtualip']['vip'];
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $check_carp = false;
+ if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply"));
+ foreach ($toapplylist as $vid => $ovip) {
+ if (!empty($ovip)) {
+ interface_vip_bring_down($ovip);
+ }
+ if ($a_vip[$vid]) {
+ switch ($a_vip[$vid]['mode']) {
+ case "ipalias":
+ interface_ipalias_configure($a_vip[$vid]);
+ break;
+ case "proxyarp":
+ interface_proxyarp_configure($a_vip[$vid]['interface']);
+ break;
+ case "carp":
+ $check_carp = true;
+ interface_carp_configure($a_vip[$vid]);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ @unlink("{$g['tmp_path']}/.firewall_virtual_ip.apply");
+ }
+ /* Before changing check #4633 */
+ if ($check_carp === true && !get_carp_status()) {
+ set_single_sysctl("net.inet.carp.allow", "1");
+ }
+
+ $retval = 0;
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ clear_subsystem_dirty('vip');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_vip[$_GET['id']]) {
+ /* make sure no inbound NAT mappings reference this entry */
+ if (is_array($config['nat']['rule'])) {
+ foreach ($config['nat']['rule'] as $rule) {
+ if ($rule['destination']['address'] <> "") {
+ if ($rule['destination']['address'] == $a_vip[$_GET['id']]['subnet']) {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one NAT mapping.");
+ break;
+ }
+ }
+ }
+ }
+
+ /* make sure no OpenVPN server or client references this entry */
+ $openvpn_types_a = array("openvpn-server" => gettext("server"), "openvpn-client" => gettext("client"));
+ foreach ($openvpn_types_a as $openvpn_type => $openvpn_type_text) {
+ if (is_array($config['openvpn'][$openvpn_type])) {
+ foreach ($config['openvpn'][$openvpn_type] as $openvpn) {
+ if ($openvpn['ipaddr'] <> "") {
+ if ($openvpn['ipaddr'] == $a_vip[$_GET['id']]['subnet']) {
+ if (strlen($openvpn['description'])) {
+ $openvpn_desc = $openvpn['description'];
+ } else {
+ $openvpn_desc = $openvpn['ipaddr'] . ":" . $openvpn['local_port'];
+ }
+ $input_errors[] = sprintf(gettext("This entry cannot be deleted because it is still referenced by OpenVPN %s %s."), $openvpn_type_text, $openvpn_desc);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (is_ipaddrv6($a_vip[$_GET['id']]['subnet'])) {
+ $is_ipv6 = true;
+ $subnet = gen_subnetv6($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']);
+ $if_subnet_bits = get_interface_subnetv6($a_vip[$_GET['id']]['interface']);
+ $if_subnet = gen_subnetv6(get_interface_ipv6($a_vip[$_GET['id']]['interface']), $if_subnet_bits);
+ } else {
+ $is_ipv6 = false;
+ $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']);
+ $if_subnet_bits = get_interface_subnet($a_vip[$_GET['id']]['interface']);
+ $if_subnet = gen_subnet(get_interface_ip($a_vip[$_GET['id']]['interface']), $if_subnet_bits);
+ }
+
+ $subnet .= "/" . $a_vip[$_GET['id']]['subnet_bits'];
+ $if_subnet .= "/" . $if_subnet_bits;
+
+ if (is_array($config['gateways']['gateway_item'])) {
+ foreach ($config['gateways']['gateway_item'] as $gateway) {
+ if ($a_vip[$_GET['id']]['interface'] != $gateway['interface']) {
+ continue;
+ }
+ if ($is_ipv6 && $gateway['ipprotocol'] == 'inet') {
+ continue;
+ }
+ if (!$is_ipv6 && $gateway['ipprotocol'] == 'inet6') {
+ continue;
+ }
+ if (ip_in_subnet($gateway['gateway'], $if_subnet)) {
+ continue;
+ }
+
+ if (ip_in_subnet($gateway['gateway'], $subnet)) {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one Gateway.");
+ break;
+ }
+ }
+ }
+
+ if ($a_vip[$_GET['id']]['mode'] == "ipalias") {
+ $subnet = gen_subnet($a_vip[$_GET['id']]['subnet'], $a_vip[$_GET['id']]['subnet_bits']) . "/" . $a_vip[$_GET['id']]['subnet_bits'];
+ $found_if = false;
+ $found_carp = false;
+ $found_other_alias = false;
+
+ if ($subnet == $if_subnet) {
+ $found_if = true;
+ }
+
+ $vipiface = $a_vip[$_GET['id']]['interface'];
+ foreach ($a_vip as $vip_id => $vip) {
+ if ($vip_id == $_GET['id']) {
+ continue;
+ }
+
+ if ($vip['interface'] == $vipiface && ip_in_subnet($vip['subnet'], $subnet)) {
+ if ($vip['mode'] == "carp") {
+ $found_carp = true;
+ } else if ($vip['mode'] == "ipalias") {
+ $found_other_alias = true;
+ }
+ }
+ }
+
+ if ($found_carp === true && $found_other_alias === false && $found_if === false) {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by a CARP IP with the description") . " {$vip['descr']}.";
+ }
+ } else if ($a_vip[$_GET['id']]['mode'] == "carp") {
+ $vipiface = "{$a_vip[$_GET['id']]['interface']}_vip{$a_vip[$_GET['id']]['vhid']}";
+ foreach ($a_vip as $vip) {
+ if ($vipiface == $vip['interface'] && $vip['mode'] == "ipalias") {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by an IP alias entry with the description") . " {$vip['descr']}.";
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ if (!session_id()) {
+ session_start();
+ }
+ $user = getUserEntry($_SESSION['Username']);
+ if (is_array($user) && userHasPrivilege($user, "user-config-readonly")) {
+ header("Location: firewall_virtual_ip.php");
+ exit;
+ }
+ session_commit();
+
+ // Special case since every proxyarp vip is handled by the same daemon.
+ if ($a_vip[$_GET['id']]['mode'] == "proxyarp") {
+ $viface = $a_vip[$_GET['id']]['interface'];
+ unset($a_vip[$_GET['id']]);
+ interface_proxyarp_configure($viface);
+ } else {
+ interface_vip_bring_down($a_vip[$_GET['id']]);
+ unset($a_vip[$_GET['id']]);
+ }
+ if (count($config['virtualip']['vip']) == 0) {
+ unset($config['virtualip']['vip']);
+ }
+ write_config();
+ header("Location: firewall_virtual_ip.php");
+ exit;
+ }
+ }
+} else if ($_GET['changes'] == "mods" && is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Virtual IP Addresses"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="firewall_virtual_ip.php" method="post">
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ } else if ($savemsg) {
+ print_info_box($savemsg);
+ } else if (is_subsystem_dirty('vip')) {
+ print_info_box_np(gettext("The VIP configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));
+ }
+?>
+<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="virtual ip">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Virtual IPs"), true, "firewall_virtual_ip.php");
+ $tab_array[] = array(gettext("CARP Settings"), false, "system_hasync.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td><input type="hidden" id="id" name="id" value="<?php echo htmlspecialchars($id); ?>" /></td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="30%" class="listhdrr"><?=gettext("Virtual IP address");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Type");?></td>
+ <td width="40%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_virtual_ip_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $interfaces = get_configured_interface_with_descr(false, true);
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
+ }
+ $interfaces['lo0'] = "Localhost";
+ $i = 0;
+ foreach ($a_vip as $vipent):
+ if ($vipent['subnet'] <> "" or $vipent['range'] <> "" or $vipent['subnet_bits'] <> "" or (isset($vipent['range']['from']) && $vipent['range']['from'] <> "")):
+ ?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
+ <?php
+ if (($vipent['type'] == "single") || ($vipent['type'] == "network")) {
+ if ($vipent['subnet_bits']) {
+ echo "{$vipent['subnet']}/{$vipent['subnet_bits']}";
+ }
+ }
+ if ($vipent['type'] == "range") {
+ echo "{$vipent['range']['from']}-{$vipent['range']['to']}";
+ }
+ if ($vipent['mode'] == "carp") {
+ echo " (vhid {$vipent['vhid']})";
+ }
+ ?>
+ </td>
+ <td class="listr" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($interfaces[$vipent['interface']]);?>&nbsp;
+ </td>
+ <td class="listr" align="center" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
+ <?php if ($vipent['mode'] == "proxyarp") echo "<img src='./themes/".$g['theme']."/images/icons/icon_parp.gif' title='Proxy ARP' alt='proxy arp' />"; elseif ($vipent['mode'] == "carp") echo "<img src='./themes/".$g['theme']."/images/icons/icon_carp.gif' title='CARP' alt='carp' />"; elseif ($vipent['mode'] == "other") echo "<img src='./themes/".$g['theme']."/images/icons/icon_other.gif' title='Other' alt='other' />"; elseif ($vipent['mode'] == "ipalias") echo "<img src='./themes/".$g['theme']."/images/icons/icon_ifalias.gif' title='IP Alias' alt='ip alias' />";?>
+ </td>
+ <td class="listbg" ondblclick="document.location='firewall_virtual_ip_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($vipent['descr']);?>&nbsp;
+ </td>
+ <td class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="firewall_virtual_ip_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td valign="middle"><a href="firewall_virtual_ip.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext('Do you really want to delete this entry?');?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ endif;
+ $i++;
+ endforeach;
+ ?>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="firewall_virtual_ip_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5">
+ <p>
+ <span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span>
+ <?=gettext("The virtual IP addresses defined on this page may be used in");?><a href="firewall_nat.php"> <?=gettext("NAT"); ?> </a><?=gettext("mappings.");?><br />
+ <?=gettext("You can check the status of your CARP Virtual IPs and interfaces ");?><a href="carp_status.php"><?=gettext("here");?></a>.</span>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+ </div><!-- div:mainarea -->
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/firewall_virtual_ip_edit.php b/src/usr/local/www/firewall_virtual_ip_edit.php
new file mode 100644
index 0000000..6021115
--- /dev/null
+++ b/src/usr/local/www/firewall_virtual_ip_edit.php
@@ -0,0 +1,572 @@
+<?php
+/* $Id$ */
+/*
+
+ firewall_virtual_ip_edit.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Includes code from m0n0wall which is:
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Includes code from pfSense which is:
+ Copyright (C) 2004-2005 Scott Ullrich <geekgod@pfsense.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-firewall-virtualipaddress-edit
+##|*NAME=Firewall: Virtual IP Address: Edit page
+##|*DESCR=Allow access to the 'Firewall: Virtual IP Address: Edit' page.
+##|*MATCH=firewall_virtual_ip_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/firewall_virtual_ip.php');
+}
+
+if (!is_array($config['virtualip']['vip'])) {
+ $config['virtualip']['vip'] = array();
+}
+$a_vip = &$config['virtualip']['vip'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+function return_first_two_octets($ip) {
+ $ip_split = explode(".", $ip);
+ return $ip_split[0] . "." . $ip_split[1];
+}
+
+function find_last_used_vhid() {
+ global $config, $g;
+ $vhid = 0;
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if ($vip['vhid'] > $vhid) {
+ $vhid = $vip['vhid'];
+ }
+ }
+ return $vhid;
+}
+
+if (isset($id) && $a_vip[$id]) {
+ $pconfig['mode'] = $a_vip[$id]['mode'];
+ $pconfig['vhid'] = $a_vip[$id]['vhid'];
+ $pconfig['advskew'] = $a_vip[$id]['advskew'];
+ $pconfig['advbase'] = $a_vip[$id]['advbase'];
+ $pconfig['password'] = $a_vip[$id]['password'];
+ $pconfig['range'] = $a_vip[$id]['range'];
+ $pconfig['subnet'] = $a_vip[$id]['subnet'];
+ $pconfig['subnet_bits'] = $a_vip[$id]['subnet_bits'];
+ $pconfig['noexpand'] = $a_vip[$id]['noexpand'];
+ $pconfig['descr'] = $a_vip[$id]['descr'];
+ $pconfig['type'] = $a_vip[$id]['type'];
+ $pconfig['interface'] = $a_vip[$id]['interface'];
+ $pconfig['uniqid'] = $a_vip[$id]['interface'];
+} else {
+ $lastvhid = find_last_used_vhid();
+ $lastvhid++;
+ $pconfig['vhid'] = $lastvhid;
+ $pconfig['uniqid'] = uniqid();
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "mode");
+ $reqdfieldsn = array(gettext("Type"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['subnet']) {
+ $_POST['subnet'] = trim($_POST['subnet']);
+ }
+
+ if ($_POST['subnet']) {
+ if (!is_ipaddr($_POST['subnet'])) {
+ $input_errors[] = gettext("A valid IP address must be specified.");
+ } else {
+ if (isset($id) && isset($a_vip[$id])) {
+ $ignore_if = $a_vip[$id]['interface'];
+ $ignore_mode = $a_vip[$id]['mode'];
+ if (isset($a_vip[$id]['vhid'])) {
+ $ignore_vhid = $a_vip[$id]['vhid'];
+ }
+ } else {
+ $ignore_if = $_POST['interface'];
+ $ignore_mode = $_POST['mode'];
+ }
+
+ if (!isset($ignore_vhid)) {
+ $ignore_vhid = $_POST['vhid'];
+ }
+
+ if ($ignore_mode == 'carp') {
+ $ignore_if .= "_vip{$ignore_vhid}";
+ } else {
+ $ignore_if .= "_virtualip{$id}";
+ }
+
+ if (is_ipaddr_configured($_POST['subnet'], $ignore_if)) {
+ $input_errors[] = gettext("This IP address is being used by another interface or VIP.");
+ }
+
+ unset($ignore_if, $ignore_mode);
+ }
+ }
+
+ $natiflist = get_configured_interface_with_descr();
+ foreach ($natiflist as $natif => $natdescr) {
+ if ($_POST['interface'] == $natif && (empty($config['interfaces'][$natif]['ipaddr']) && empty($config['interfaces'][$natif]['ipaddrv6']))) {
+ $input_errors[] = gettext("The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP.");
+ }
+ }
+
+ /* ipalias and carp should not use network or broadcast address */
+ if ($_POST['mode'] == "ipalias" || $_POST['mode'] == "carp") {
+ if (is_ipaddrv4($_POST['subnet']) && $_POST['subnet_bits'] != "32") {
+ $network_addr = gen_subnet($_POST['subnet'], $_POST['subnet_bits']);
+ $broadcast_addr = gen_subnet_max($_POST['subnet'], $_POST['subnet_bits']);
+ } else if (is_ipaddrv6($_POST['subnet']) && $_POST['subnet_bits'] != "128") {
+ $network_addr = gen_subnetv6($_POST['subnet'], $_POST['subnet_bits']);
+ $broadcast_addr = gen_subnetv6_max($_POST['subnet'], $_POST['subnet_bits']);
+ }
+
+ if (isset($network_addr) && $_POST['subnet'] == $network_addr) {
+ $input_errors[] = gettext("You cannot use the network address for this VIP");
+ } else if (isset($broadcast_addr) && $_POST['subnet'] == $broadcast_addr) {
+ $input_errors[] = gettext("You cannot use the broadcast address for this VIP");
+ }
+ }
+
+ /* make sure new ip is within the subnet of a valid ip
+ * on one of our interfaces (wan, lan optX)
+ */
+ switch ($_POST['mode']) {
+ case 'carp':
+ /* verify against reusage of vhids */
+ $idtracker = 0;
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if ($vip['vhid'] == $_POST['vhid'] && $vip['interface'] == $_POST['interface'] && $idtracker <> $id) {
+ $input_errors[] = sprintf(gettext("VHID %s is already in use on interface %s. Pick a unique number on this interface."), $_POST['vhid'], convert_friendly_interface_to_friendly_descr($_POST['interface']));
+ }
+ $idtracker++;
+ }
+ if (empty($_POST['password'])) {
+ $input_errors[] = gettext("You must specify a CARP password that is shared between the two VHID members.");
+ }
+
+ if ($_POST['interface'] == 'lo0') {
+ $input_errors[] = gettext("For this type of vip localhost is not allowed.");
+ } else if (strpos($_POST['interface'], '_vip')) {
+ $input_errors[] = gettext("A CARP parent interface can only be used with IP Alias type Virtual IPs.");
+ }
+ break;
+ case 'ipalias':
+ if (strstr($_POST['interface'], "_vip")) {
+ if (is_ipaddrv4($_POST['subnet'])) {
+ $parent_ip = get_interface_ip($_POST['interface']);
+ $parent_sn = get_interface_subnet($_POST['interface']);
+ $subnet = gen_subnet($parent_ip, $parent_sn);
+ } else if (is_ipaddrv6($_POST['subnet'])) {
+ $parent_ip = get_interface_ipv6($_POST['interface']);
+ $parent_sn = get_interface_subnetv6($_POST['interface']);
+ $subnet = gen_subnetv6($parent_ip, $parent_sn);
+ }
+ if (isset($parent_ip) && !ip_in_subnet($_POST['subnet'], "{$subnet}/{$parent_sn}") &&
+ !ip_in_interface_alias_subnet(link_carp_interface_to_parent($_POST['interface']), $_POST['subnet'])) {
+ $cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
+ $input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."), $cannot_find);
+ }
+ unset($parent_ip, $parent_sn, $subnet);
+ }
+ break;
+ default:
+ if ($_POST['interface'] == 'lo0') {
+ $input_errors[] = gettext("For this type of vip localhost is not allowed.");
+ } else if (strpos($_POST['interface'], '_vip')) {
+ $input_errors[] = gettext("A CARP parent interface can only be used with IP Alias type Virtual IPs.");
+ }
+ break;
+ }
+
+ if (!$input_errors) {
+ $vipent = array();
+
+ $vipent['mode'] = $_POST['mode'];
+ $vipent['interface'] = $_POST['interface'];
+
+ /* ProxyARP specific fields */
+ if ($_POST['mode'] === "proxyarp") {
+ if ($_POST['type'] == "range") {
+ $vipent['range']['from'] = $_POST['range_from'];
+ $vipent['range']['to'] = $_POST['range_to'];
+
+ }
+ $vipent['noexpand'] = isset($_POST['noexpand']);
+ }
+
+ /* CARP specific fields */
+ if ($_POST['mode'] === "carp") {
+ $vipent['vhid'] = $_POST['vhid'];
+ $vipent['vhid'] = $_POST['uinqid'];
+ $vipent['advskew'] = $_POST['advskew'];
+ $vipent['advbase'] = $_POST['advbase'];
+ $vipent['password'] = $_POST['password'];
+ }
+
+ /* Common fields */
+ $vipent['descr'] = $_POST['descr'];
+ if (isset($_POST['type'])) {
+ $vipent['type'] = $_POST['type'];
+ } else {
+ $vipent['type'] = "single";
+ }
+
+ if ($vipent['type'] == "single" || $vipent['type'] == "network") {
+ if (!isset($_POST['subnet_bits'])) {
+ $vipent['subnet_bits'] = "32";
+ } else {
+ $vipent['subnet_bits'] = $_POST['subnet_bits'];
+ }
+ $vipent['subnet'] = $_POST['subnet'];
+ }
+
+ if (!isset($id)) {
+ $id = count($a_vip);
+ }
+ if (file_exists("{$g['tmp_path']}/.firewall_virtual_ip.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply"));
+ } else {
+ $toapplylist = array();
+ }
+
+ $toapplylist[$id] = $a_vip[$id];
+ if (!empty($a_vip[$id])) {
+ /* modify all virtual IP rules with this address */
+ for ($i = 0; isset($config['nat']['rule'][$i]); $i++) {
+ if ($config['nat']['rule'][$i]['destination']['address'] == $a_vip[$id]['subnet']) {
+ $config['nat']['rule'][$i]['destination']['address'] = $vipent['subnet'];
+ }
+ }
+ }
+ $a_vip[$id] = $vipent;
+
+ if (write_config()) {
+ mark_subsystem_dirty('vip');
+ file_put_contents("{$g['tmp_path']}/.firewall_virtual_ip.apply", serialize($toapplylist));
+ }
+ header("Location: firewall_virtual_ip.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Firewall"), gettext("Virtual IP Address"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function get_radio_value(obj) {
+ for (i = 0; i < obj.length; i++) {
+ if (obj[i].checked) {
+ return obj[i].value;
+ }
+ }
+ return null;
+}
+function set_note(noteMessage) {
+ var note = document.getElementById("typenote");
+ if (note.firstChild != null) {
+ note.removeChild(note.firstChild);
+ }
+ if (noteMessage) {
+ note.appendChild(noteMessage);
+ }
+}
+function enable_change() {
+ var carpnote = document.createTextNode("<?=gettext("This must be the network's subnet mask. It does not specify a CIDR range.");?>");
+ var proxyarpnote = document.createTextNode("<?=gettext("This is a CIDR block of proxy ARP addresses.");?>");
+ var ipaliasnote = document.createTextNode("<?=gettext("This must be the network's subnet mask. It does not specify a CIDR range.");?>");
+
+ $mode = get_radio_value(document.iform.mode);
+
+ document.iform.password.disabled = $mode != "carp";
+ document.iform.vhid.disabled = $mode != "carp";
+ document.iform.advskew.disabled = $mode != "carp";
+ document.iform.advbase.disabled = $mode != "carp";
+ document.iform.type.disabled = $mode in {"carp":1, "ipalias":1};
+
+ if ($mode in {"carp":1, "ipalias":1}) {
+ document.iform.type.selectedIndex = 0;// single-adress
+ }
+ switch ($mode) {
+ case "carp" : set_note(carpnote); break;
+ case "ipalias" : set_note(ipaliasnote); break;
+ case "proxyarp": set_note(proxyarpnote); break;
+ default: set_note(undefined);
+ }
+ typesel_change();
+}
+
+function typesel_change() {
+ switch (document.iform.type.selectedIndex) {
+ case 0: // single
+ document.iform.subnet.disabled = 0;
+ document.iform.subnet_bits.disabled = (get_radio_value(document.iform.mode) == "proxyarp") || (get_radio_value(document.iform.mode) == "other");
+ document.iform.noexpand.disabled = 1;
+ jQuery('#noexpandrow').css('display', 'none');
+ break;
+ case 1: // network
+ document.iform.subnet.disabled = 0;
+ document.iform.subnet_bits.disabled = 0;
+ document.iform.noexpand.disabled = 0;
+ jQuery('#noexpandrow').css('display', '');
+ //document.iform.range_from.disabled = 1;
+ //document.iform.range_to.disabled = 1;
+ break;
+ case 2: // range
+ document.iform.subnet.disabled = 1;
+ document.iform.subnet_bits.disabled = 1;
+ document.iform.noexpand.disabled = 1;
+ jQuery('#noexpandrow').css('display', 'none');
+ //document.iform.range_from.disabled = 0;
+ //document.iform.range_to.disabled = 0;
+ break;
+ case 3: // IP alias
+ document.iform.subnet.disabled = 1;
+ document.iform.subnet_bits.disabled = 0;
+ document.iform.noexpand.disabled = 1;
+ jQuery('#noexpandrow').css('display', 'none');
+ //document.iform.range_from.disabled = 0;
+ //document.iform.range_to.disabled = 0;
+ break;
+ }
+}
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="firewall_virtual_ip_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="virtual IP edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Virtual IP");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Type");?></td>
+ <td width="78%" class="vtable">
+ <input name="mode" type="radio" onclick="enable_change()" value="ipalias"
+ <?php if ($pconfig['mode'] == "ipalias") echo "checked=\"checked\"";?> /> <?=gettext("IP Alias");?>
+ <input name="mode" type="radio" onclick="enable_change()" value="carp"
+ <?php if ($pconfig['mode'] == "carp") echo "checked=\"checked\"";?> /> <?=gettext("CARP"); ?>
+ <input name="mode" type="radio" onclick="enable_change()" value="proxyarp"
+ <?php if ($pconfig['mode'] == "proxyarp") echo "checked=\"checked\"";?> /> <?=gettext("Proxy ARP"); ?>
+ <input name="mode" type="radio" onclick="enable_change()" value="other"
+ <?php if ($pconfig['mode'] == "other") echo "checked=\"checked\"";?> /> <?=gettext("Other");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ $interfaces = get_configured_interface_with_descr(false, true);
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif] = $carpip . ' (' . get_vip_descr($carpip) . ')';
+ }
+ $interfaces['lo0'] = 'Localhost';
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("IP Address(es)");?></td>
+ <td class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="ip addresses">
+ <tr>
+ <td><?=gettext("Type:");?>&nbsp;&nbsp;</td>
+ <td>
+ <select name="type" class="formselect" onchange="typesel_change()">
+ <option value="single" <?php if ((!$pconfig['range'] && $pconfig['subnet_bits'] == 32) || (!isset($pconfig['subnet']))) echo "selected=\"selected\""; ?>>
+ <?=gettext("Single address");?>
+ </option>
+ <option value="network" <?php if (!$pconfig['range'] && $pconfig['subnet_bits'] != 32 && isset($pconfig['subnet'])) echo "selected=\"selected\""; ?>>
+ <?=gettext("Network");?>
+ </option>
+ <!-- XXX: Billm, don't let anyone choose this until NAT configuration screens are ready for it <option value="range" <?php if ($pconfig['range']) echo "selected=\"selected\""; ?>>
+ Range</option> -->
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="subnet" type="text" class="formfld unknown ipv4v6" id="subnet" size="28" value="<?=htmlspecialchars($pconfig['subnet']);?>" />
+ /
+ <select name="subnet_bits" class="formselect ipv4v6" id="select">
+ <?php for ($i = 128; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['subnet_bits']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ <i id="typenote"></i>
+ </td>
+ </tr>
+ <tr id="noexpandrow">
+ <td><?=gettext("Expansion:");?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="noexpand" type="checkbox" class="formfld unknown" id="noexpand" <?php echo (isset($pconfig['noexpand'])) ? "checked=\"checked\"" : "" ; ?> />
+ Disable expansion of this entry into IPs on NAT lists (e.g. 192.168.1.0/24 expands to 256 entries.)
+ </td>
+ </tr>
+ <?php
+ /*
+ <tr>
+ <td>Range:&nbsp;&nbsp;</td>
+ <td><input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range']['from']);?>" />
+-
+ <input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range']['to']);?>" />
+ </td>
+ </tr>
+ */
+?>
+ </table>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncellreq"><?=gettext("Virtual IP Password");?></td>
+ <td class="vtable"><input type='password' name='password' value="<?=htmlspecialchars($pconfig['password']);?>" />
+ <br /><?=gettext("Enter the VHID group password.");?>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncellreq"><?=gettext("VHID Group");?></td>
+ <td class="vtable">
+ <select id='vhid' name='vhid'>
+ <?php for ($i = 1; $i <= 255; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['vhid']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ <br /><?=gettext("Enter the VHID group that the machines will share");?>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncellreq"><?=gettext("Advertising Frequency");?></td>
+ <td class="vtable">
+ Base:
+ <select id='advbase' name='advbase'>
+ <?php for ($i = 1; $i <= 254; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['advbase']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ Skew:
+ <select id='advskew' name='advskew'>
+ <?php for ($i = 0; $i <= 254; $i++): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['advskew']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ <br /><br />
+ <?=gettext("The frequency that this machine will advertise. 0 means usually master. Otherwise the lowest combination of both values in the cluster determines the master.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_vip[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <input name="uniqid" type="hidden" value="<?=$pconfig['uniqid'];?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <span class="vexpl">
+ <span class="red">
+ <b><?=gettext("Note:");?><br /></b>
+ </span>&nbsp;&nbsp;
+ <?=gettext("Proxy ARP and Other type Virtual IPs cannot be bound to by anything running on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type address for these cases.");?>
+ <br /><br />&nbsp;&nbsp;&nbsp;<?=gettext("For more information on CARP and the above values, visit the OpenBSD ");?><a href='http://www.openbsd.org/faq/pf/carp.html'> <?=gettext("CARP FAQ"); ?></a>.
+ </span>
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/getserviceproviders.php b/src/usr/local/www/getserviceproviders.php
new file mode 100644
index 0000000..cb456aa
--- /dev/null
+++ b/src/usr/local/www/getserviceproviders.php
@@ -0,0 +1,150 @@
+<?php
+/*
+ getserviceproviders.php
+ Copyright (C) 2010 Vinicius Coque <vinicius.coque@bluepex.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: ajax
+*/
+
+##|+PRIV
+##|*IDENT=page-getserviceproviders
+##|*NAME=AJAX: Get Service Providers
+##|*DESCR=Allow access to the 'AJAX: Service Providers' page.
+##|*MATCH=getserviceproviders.php*
+##|-PRIV
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+
+$serviceproviders_xml = "/usr/local/share/mobile-broadband-provider-info/serviceproviders.xml";
+$serviceproviders_contents = file_get_contents($serviceproviders_xml);
+$serviceproviders_attr = xml2array($serviceproviders_contents, 1, "attr");
+
+$serviceproviders = &$serviceproviders_attr['serviceproviders']['country'];
+
+function get_country_providers($country) {
+ global $serviceproviders;
+ foreach ($serviceproviders as $sp) {
+ if ($sp['attr']['code'] == strtolower($country)) {
+ return is_array($sp['provider'][0]) ? $sp['provider'] : array($sp['provider']);
+ }
+ }
+ return $provider_list;
+}
+
+function country_list() {
+ global $serviceproviders;
+ $country_list = get_country_name("ALL");
+ foreach ($serviceproviders as $sp) {
+ foreach ($country_list as $country) {
+ if (strtoupper($sp['attr']['code']) == $country['code']) {
+ echo $country['name'] . ":" . $country['code'] . "\n";
+ }
+ }
+ }
+}
+
+function providers_list($country) {
+ $serviceproviders = get_country_providers($country);
+ foreach ($serviceproviders as $sp) {
+ echo $sp['name']['value'] . "\n";
+ }
+}
+
+function provider_plan_data($country, $provider, $connection) {
+ header("Content-type: application/xml;");
+ echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ echo "<connection>\n";
+ $serviceproviders = get_country_providers($country);
+ foreach ($serviceproviders as $sp) {
+ if (strtolower($sp['name']['value']) == strtolower($provider)) {
+ if (strtoupper($connection) == "CDMA") {
+ $conndata = $sp['cdma'];
+ } else {
+ if (!is_array($sp['gsm']['apn'][0])) {
+ $conndata = $sp['gsm']['apn'];
+ } else {
+ foreach ($sp['gsm']['apn'] as $apn) {
+ if ($apn['attr']['value'] == $connection) {
+ $conndata = $apn;
+ break;
+ }
+ }
+ }
+ }
+ if (is_array($conndata)) {
+ echo "<apn>" . $connection . "</apn>\n";
+ echo "<username>" . $conndata['username']['value'] . "</username>\n";
+ echo "<password>" . $conndata['password']['value'] . "</password>\n";
+
+ $dns_arr = is_array($conndata['dns'][0]) ? $conndata['dns'] : array($conndata['dns']);
+ foreach ($dns_arr as $dns) {
+ echo '<dns>' . $dns['value'] . "</dns>\n";
+ }
+ }
+ break;
+ }
+ }
+ echo "</connection>";
+}
+
+function provider_plans_list($country, $provider) {
+ $serviceproviders = get_country_providers($country);
+ foreach ($serviceproviders as $sp) {
+ if (strtolower($sp['name']['value']) == strtolower($provider)) {
+ if (array_key_exists('gsm', $sp)) {
+ if (array_key_exists('attr', $sp['gsm']['apn'])) {
+ $name = ($sp['gsm']['apn']['name'] ? $sp['gsm']['apn']['name'] : $sp['name']['value']);
+ echo $name . ":" . $sp['gsm']['apn']['attr']['value'];
+ } else {
+ foreach ($sp['gsm']['apn'] as $apn_info) {
+ $name = ($apn_info['name']['value'] ? $apn_info['name']['value'] : $apn_info['gsm']['apn']['name']);
+ echo $name . ":" . $apn_info['attr']['value'] . "\n";
+ }
+ }
+ }
+ if (array_key_exists('cdma', $sp)) {
+ $name = $sp['cdma']['name']['value'] ? $sp['cdma']['name']['value']:$sp['name']['value'];
+ echo $name . ":" . "CDMA";
+ }
+ }
+ }
+}
+
+$_GET_OR_POST = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET;
+
+if (isset($_GET_OR_POST['country']) && !isset($_GET_OR_POST['provider'])) {
+ providers_list($_GET_OR_POST['country']);
+} elseif (isset($_GET_OR_POST['country']) && isset($_GET_OR_POST['provider'])) {
+ if (isset($_GET_OR_POST['plan'])) {
+ provider_plan_data($_GET_OR_POST['country'], $_GET_OR_POST['provider'], $_GET_OR_POST['plan']);
+ } else {
+ provider_plans_list($_GET_OR_POST['country'], $_GET_OR_POST['provider']);
+ }
+} else {
+ country_list();
+}
+?>
diff --git a/src/usr/local/www/getstats.php b/src/usr/local/www/getstats.php
new file mode 100644
index 0000000..886114b
--- /dev/null
+++ b/src/usr/local/www/getstats.php
@@ -0,0 +1,50 @@
+<?php
+/*
+ getstats.php
+ Copyright (C) 2009 Bill Marquette
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: ajax
+*/
+
+##|+PRIV
+##|*IDENT=page-getstats
+##|*NAME=AJAX: Get Stats
+##|*DESCR=Allow access to the 'AJAX: Get Stats' page.
+##|*MATCH=getstats.php*
+##|-PRIV
+
+header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
+header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
+header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
+header("Pragma: no-cache"); // HTTP/1.0
+
+require_once("guiconfig.inc");
+include_once("includes/functions.inc.php");
+
+echo get_stats();
+
+?>
diff --git a/src/usr/local/www/graph.php b/src/usr/local/www/graph.php
new file mode 100755
index 0000000..d637836
--- /dev/null
+++ b/src/usr/local/www/graph.php
@@ -0,0 +1,408 @@
+<?php
+/*
+ graph.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2006 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: graph
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-interfacetraffic
+##|*NAME=Diagnostics: Interface Traffic page
+##|*DESCR=Allow access to the 'Diagnostics: Interface Traffic' page.
+##|*MATCH=graph.php*
+##|-PRIV
+
+require("globals.inc");
+require("guiconfig.inc");
+
+header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
+header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
+header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
+header("Pragma: no-cache"); // HTTP/1.0
+header("Content-type: image/svg+xml");
+
+/********** HTTP GET Based Conf ***********/
+$ifnum = @$_GET["ifnum"]; // BSD / SNMP interface name / number
+$ifnum = get_real_interface($ifnum);
+$ifname = @$_GET["ifname"]?$_GET["ifname"]:"Interface $ifnum"; //Interface name that will be showed on top right of graph
+
+/********* Other conf *******/
+if (isset($config["widgets"]["trafficgraphs"]["scale_type"])) {
+ $scale_type = $config["widgets"]["trafficgraphs"]["scale_type"];
+} else {
+ $scale_type = "up";
+}
+
+$nb_plot=120; //NB plot in graph
+if ($_GET["timeint"]) {
+ $time_interval = $_GET["timeint"]; //Refresh time Interval
+} else {
+ $time_interval = 3;
+}
+
+if ($_GET["initdelay"]) {
+ $init_delay = $_GET["initdelay"]; //Initial Delay
+} else {
+ $init_delay = 3;
+}
+
+//SVG attributes
+$attribs['axis']='fill="black" stroke="black"';
+$attribs['in']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
+$attribs['out']='fill="#000000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
+$attribs['graph_in']='fill="none" stroke="#FF0000" stroke-opacity="0.8"';
+$attribs['graph_out']='fill="none" stroke="#000000" stroke-opacity="0.8"';
+$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
+$attribs['graphname']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="8"';
+$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"';
+$attribs['grid']='stroke="gray" stroke-opacity="0.5"';
+$attribs['switch_unit']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"';
+$attribs['switch_scale']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4" text-decoration="underline"';
+$attribs['error']='fill="blue" font-family="Arial" font-size="4"';
+$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
+
+//Error text if we cannot fetch data : depends on which method is used
+$error_text = "Cannot get data about interface " . htmlspecialchars($ifnum);
+
+$height=100; //SVG internal height : do not modify
+$width=200; //SVG internal width : do not modify
+
+$fetch_link = "ifstats.php?if=" . htmlspecialchars($ifnum);
+
+/* check for custom theme colors */
+if (file_exists("/usr/local/www/themes/{$g['theme']}/graph.php")) {
+ $themetxt = file_get_contents("/usr/local/www/themes/{$g['theme']}/graph.php");
+ eval($themetxt);
+}
+
+/********* Graph DATA **************/
+print('<?xml version="1.0" encoding="UTF-8"?>' . "\n");?>
+<svg width="100%" height="100%" viewBox="0 0 <?=$width?> <?=$height?>" preserveAspectRatio="none" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)">
+ <g id="graph">
+ <rect id="bg" x1="0" y1="0" width="100%" height="100%" fill="white"/>
+ <line id="axis_x" x1="0" y1="0" x2="0" y2="100%" <?=$attribs['axis']?>/>
+ <line id="axis_y" x1="0" y1="100%" x2="100%" y2="100%" <?=$attribs['axis']?>/>
+ <path id="graph_out" d="M0 <?=$height?> L 0 <?=$height?>" <?=$attribs['graph_out']?>/>
+ <path id="graph_in" d="M0 <?=$height?> L 0 <?=$height?>" <?=$attribs['graph_in']?>/>
+ <path id="grid" d="M0 <?=$height/4*1?> L <?=$width?> <?=$height/4*1?> M0 <?=$height/4*2?> L <?=$width?> <?=$height/4*2?> M0 <?=$height/4*3?> L <?=$width?> <?=$height/4*3?>" <?=$attribs['grid']?>/>
+ <text id="grid_txt1" x="<?=$width?>" y="<?=$height/4*1?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
+ <text id="grid_txt2" x="<?=$width?>" y="<?=$height/4*2?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
+ <text id="grid_txt3" x="<?=$width?>" y="<?=$height/4*3?>" <?=$attribs['grid_txt']?> text-anchor="end"> </text>
+ <text id="graph_in_lbl" x="5" y="8" <?=$attribs['in']?>><?=gettext("In"); ?></text>
+ <text id="graph_out_lbl" x="5" y="16" <?=$attribs['out']?>><?=gettext("Out"); ?></text>
+ <text id="graph_in_txt" x="20" y="8" <?=$attribs['in']?>> </text>
+ <text id="graph_out_txt" x="20" y="16" <?=$attribs['out']?>> </text>
+ <text id="ifname" x="<?=$width?>" y="8" <?=$attribs['graphname']?> text-anchor="end"><?=htmlspecialchars($ifname)?></text>
+ <text id="switch_unit" x="<?=$width*0.55?>" y="5" <?=$attribs['switch_unit']?>><?=gettext("Switch to bytes/s"); ?></text>
+ <text id="switch_scale" x="<?=$width*0.55?>" y="11" <?=$attribs['switch_scale']?>><?=gettext("AutoScale"); ?> (<?=$scale_type?>)</text>
+ <text id="date" x="<?=$width*0.33?>" y="5" <?=$attribs['legend']?>> </text>
+ <text id="time" x="<?=$width*0.33?>" y="11" <?=$attribs['legend']?>> </text>
+ <text id="graphlast" x="<?=$width*0.55?>" y="17" <?=$attribs['legend']?>><?=gettext("Graph shows last"); ?> <?=$time_interval*$nb_plot?> <?=gettext("seconds"); ?></text>
+ <polygon id="axis_arrow_x" <?=$attribs['axis']?> points="<?=($width) . "," . ($height)?> <?=($width-2) . "," . ($height-2)?> <?=($width-2) . "," . $height?>"/>
+ <text id="error" x="<?=$width*0.5?>" y="<?=$height*0.5?>" visibility="hidden" <?=$attribs['error']?> text-anchor="middle"><?=$error_text?></text>
+ <text id="collect_initial" x="<?=$width*0.5?>" y="<?=$height*0.5?>" visibility="hidden" <?=$attribs['collect_initial']?> text-anchor="middle"><?=gettext("Collecting initial data, please wait"); ?>...</text>
+ </g>
+ <script type="text/ecmascript">
+ <![CDATA[
+
+/**
+ * getURL is a proprietary Adobe function, but it's simplicity has made it very
+ * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
+ */
+if (typeof getURL == 'undefined') {
+ getURL = function(url, callback) {
+ if (!url) {
+ throw '<?=gettext("No URL for getURL"); ?>';
+ }
+
+ try {
+ if (typeof callback.operationComplete == 'function') {
+ callback = callback.operationComplete;
+ }
+ } catch (e) {}
+ if (typeof callback != 'function') {
+ throw '<?=gettext("No callback function for getURL"); ?>';
+ }
+
+ var http_request = null;
+ if (typeof XMLHttpRequest != 'undefined') {
+ http_request = new XMLHttpRequest();
+ } else if (typeof ActiveXObject != 'undefined') {
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ } catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ } catch (e) {}
+ }
+ }
+ if (!http_request) {
+ throw '<?=gettext("Both getURL and XMLHttpRequest are undefined"); ?>';
+ }
+
+ http_request.onreadystatechange = function() {
+ if (http_request.readyState == 4) {
+ callback( { success : true,
+ content : http_request.responseText,
+ contentType : http_request.getResponseHeader("Content-Type") } );
+ }
+ }
+ http_request.open('GET', url, true);
+ http_request.send(null);
+ }
+}
+
+var SVGDoc = null;
+var last_ifin = 0;
+var last_ifout = 0;
+var last_ugmt = 0;
+var max = 0;
+var plot_in = new Array();
+var plot_out = new Array();
+
+var max_num_points = <?=$nb_plot?>; // maximum number of plot data points
+var step = <?=$width?> / max_num_points ;
+var unit = 'bits';
+var scale_type = '<?=$scale_type?>';
+
+function init(evt) {
+ SVGDoc = evt.target.ownerDocument;
+ SVGDoc.getElementById("switch_unit").addEventListener("mousedown", switch_unit, false);
+ SVGDoc.getElementById("switch_scale").addEventListener("mousedown", switch_scale, false);
+
+ fetch_data();
+}
+
+function switch_unit(event) {
+ SVGDoc.getElementById('switch_unit').firstChild.data = '<?=gettext("Switch to"); ?> ' + unit + '/s';
+ unit = (unit == 'bits') ? 'bytes' : 'bits';
+}
+
+function switch_scale(event) {
+ scale_type = (scale_type == 'up') ? '<?=gettext("follow"); ?>' : '<?=gettext("up"); ?>';
+ SVGDoc.getElementById('switch_scale').firstChild.data = 'AutoScale (' + scale_type + ')';
+}
+
+function fetch_data() {
+ getURL('<?=$fetch_link?>', plot_data);
+}
+
+function plot_data(obj) {
+ // Show datetimelegend
+ var now = new Date();
+ var time = LZ(now.getHours()) + ":" + LZ(now.getMinutes()) + ":" + LZ(now.getSeconds());
+ SVGDoc.getElementById('time').firstChild.data = time;
+ var date = (now.getMonth()+1) + "/" + now.getDate() + "/" + now.getFullYear();
+ SVGDoc.getElementById('date').firstChild.data = date;
+
+ if (!obj.success) {
+ return handle_error(); // getURL failed to get data
+ }
+
+ var t = obj.content.split("|");
+ var ugmt = parseFloat(t[0]); // ugmt is an unixtimestamp style
+ var ifin = parseInt(t[1], 10); // number of bytes received by the interface
+ var ifout = parseInt(t[2], 10); // number of bytes sent by the interface
+ var scale;
+
+ if (!isNumber(ifin) || !isNumber(ifout)) {
+ return handle_error();
+ }
+
+ var diff_ugmt = ugmt - last_ugmt;
+ var diff_ifin = ifin - last_ifin;
+ var diff_ifout = ifout - last_ifout;
+
+ if (diff_ugmt == 0) {
+ diff_ugmt = 1; /* avoid division by zero */
+ }
+
+ last_ugmt = ugmt;
+ last_ifin = ifin;
+ last_ifout = ifout;
+ var graphTimerId = 0;
+ switch (plot_in.length) {
+ case 0:
+ SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'visible');
+ plot_in[0] = diff_ifin / diff_ugmt;
+ plot_out[0] = diff_ifout / diff_ugmt;
+ setTimeout('fetch_data()', <?=1000*($time_interval + $init_delay)?>);
+ return;
+ case 1:
+ SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'hidden');
+ break;
+ case max_num_points:
+ // shift plot to left if the maximum number of plot points has been reached
+ var i = 0;
+ while (i < max_num_points) {
+ plot_in[i] = plot_in[i+1];
+ plot_out[i] = plot_out[++i];
+ }
+ plot_in.length--;
+ plot_out.length--;
+ }
+
+ plot_in[plot_in.length] = diff_ifin / diff_ugmt;
+ plot_out[plot_out.length]= diff_ifout / diff_ugmt;
+ var index_plot = plot_in.length - 1;
+
+ SVGDoc.getElementById('graph_in_txt').firstChild.data = formatSpeed(plot_in[index_plot], unit);
+ SVGDoc.getElementById('graph_out_txt').firstChild.data = formatSpeed(plot_out[index_plot], unit);
+
+ /* determine peak for sensible scaling */
+ if (scale_type == 'up') {
+ if (plot_in[index_plot] > max) {
+ max = plot_in[index_plot];
+ }
+ if (plot_out[index_plot] > max) {
+ max = plot_out[index_plot];
+ }
+ } else if (scale_type == 'follow') {
+ i = 0;
+ max = 0;
+ while (i < plot_in.length) {
+ if (plot_in[i] > max) {
+ max = plot_in[i];
+ }
+ if (plot_out[i] > max) {
+ max = plot_out[i];
+ }
+ i++;
+ }
+ }
+
+ var rmax; // max, rounded up
+
+ if (unit == 'bits') {
+ /* round up max, such that
+ 100 kbps -> 200 kbps -> 400 kbps -> 800 kbps -> 1 Mbps -> 2 Mbps -> ... */
+ rmax = 12500;
+ i = 0;
+ while (max > rmax) {
+ i++;
+ if (i && (i % 4 == 0)) {
+ rmax *= 1.25;
+ } else {
+ rmax *= 2;
+ }
+ }
+ } else {
+ /* round up max, such that
+ 10 KB/s -> 20 KB/s -> 40 KB/s -> 80 KB/s -> 100 KB/s -> 200 KB/s -> 400 KB/s -> 800 KB/s -> 1 MB/s ... */
+ rmax = 10240;
+ i = 0;
+ while (max > rmax) {
+ i++;
+ if (i && (i % 4 == 0)) {
+ rmax *= 1.25;
+ } else {
+ rmax *= 2;
+ }
+
+ if (i == 8) {
+ rmax *= 1.024;
+ }
+ }
+ }
+
+ scale = <?=$height?> / rmax;
+
+ /* change labels accordingly */
+ SVGDoc.getElementById('grid_txt1').firstChild.data = formatSpeed(3*rmax/4, unit);
+ SVGDoc.getElementById('grid_txt2').firstChild.data = formatSpeed(2*rmax/4, unit);
+ SVGDoc.getElementById('grid_txt3').firstChild.data = formatSpeed(rmax/4, unit);
+
+ var path_in = "M 0 " + (<?=$height?> - (plot_in[0] * scale));
+ var path_out = "M 0 " + (<?=$height?> - (plot_out[0] * scale));
+ for (i = 1; i < plot_in.length; i++) {
+ var x = step * i;
+ var y_in = <?=$height?> - (plot_in[i] * scale);
+ var y_out = <?=$height?> - (plot_out[i] * scale);
+ path_in += " L" + x + " " + y_in;
+ path_out += " L" + x + " " + y_out;
+ }
+
+ SVGDoc.getElementById('error').setAttributeNS(null, 'visibility', 'hidden');
+ SVGDoc.getElementById('graph_in').setAttributeNS(null, 'd', path_in);
+ SVGDoc.getElementById('graph_out').setAttributeNS(null, 'd', path_out);
+
+ setTimeout('fetch_data()', <?=1000*$time_interval?>);
+}
+
+function handle_error() {
+ SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'visible');
+ setTimeout('fetch_data()', <?=1000*$time_interval?>);
+}
+
+function isNumber(a) {
+ return typeof a == 'number' && isFinite(a);
+}
+
+function formatSpeed(speed, unit) {
+ if (unit == 'bits') {
+ return formatSpeedBits(speed);
+ }
+ if (unit == 'bytes') {
+ return formatSpeedBytes(speed);
+ }
+}
+
+function formatSpeedBits(speed) {
+ // format speed in bits/sec, input: bytes/sec
+ if (speed < 125000) {
+ return Math.round(speed / 125) + " <?=gettext("Kbps"); ?>";
+ }
+ if (speed < 125000000) {
+ return Math.round(speed / 1250)/100 + " <?=gettext("Mbps"); ?>";
+ }
+ // else
+ return Math.round(speed / 1250000)/100 + " <?=gettext("Gbps"); ?>"; /* wow! */
+}
+
+function formatSpeedBytes(speed) {
+ // format speed in bytes/sec, input: bytes/sec
+ if (speed < 1048576) {
+ return Math.round(speed / 10.24)/100 + " <?=gettext("KB/s"); ?>";
+ }
+ if (speed < 1073741824) {
+ return Math.round(speed / 10485.76)/100 + " <?=gettext("MB/s"); ?>";
+ }
+ // else
+ return Math.round(speed / 10737418.24)/100 + " <?=gettext("GB/s"); ?>"; /* wow! */
+}
+
+function LZ(x) {
+ return (x < 0 || x > 9 ? "" : "0") + x;
+}
+
+ ]]>
+ </script>
+</svg>
diff --git a/src/usr/local/www/graph_cpu.php b/src/usr/local/www/graph_cpu.php
new file mode 100644
index 0000000..80d97f1
--- /dev/null
+++ b/src/usr/local/www/graph_cpu.php
@@ -0,0 +1,211 @@
+<?php
+/*
+ $Id$
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: graph
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-cpuutilization
+##|*NAME=Diagnostics: CPU Utilization page
+##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page.
+##|*MATCH=graph_cpu.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
+header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
+header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
+header("Pragma: no-cache"); // HTTP/1.0
+header("Content-type: image/svg+xml");
+
+/********* Other conf *******/
+
+$nb_plot = 120; // maximum number of data points to plot in the graph
+$fetch_link = "stats.php?stats=cpu";
+
+//SVG attributes
+$attribs['axis']='fill="black" stroke="black"';
+$attribs['cpu']='fill="#FF0000" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="7"';
+$attribs['graph_cpu']='fill="none" stroke="#FF0000" stroke-opacity="0.8"';
+$attribs['legend']='fill="black" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
+$attribs['grid_txt']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="6"';
+$attribs['grid']='stroke="gray" stroke-opacity="0.5"';
+$attribs['error']='fill="blue" font-family="Arial" font-size="4"';
+$attribs['collect_initial']='fill="gray" font-family="Tahoma, Verdana, Arial, Helvetica, sans-serif" font-size="4"';
+
+$height=100; // SVG internal height : do not modify
+$width=200; // SVG internal width : do not modify
+
+/********* Graph DATA **************/
+print('<?xml version="1.0" encoding="UTF-8"?>' . "\n");?>
+<svg width="100%" height="100%" viewBox="0 0 <?=$width?> <?=$height?>" preserveAspectRatio="none" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt);">
+ <g id="graph">
+ <rect id="bg" x1="0" y1="0" width="100%" height="100%" fill="white"/>
+ <line id="axis_x" x1="0" y1="0" x2="0" y2="100%" <?=$attribs['axis']?>/>
+ <line id="axis_y" x1="0" y1="100%" x2="100%" y2="100%" <?=$attribs['axis']?>/>
+ <polygon id="axis_arrow_x" <?=$attribs['axis']?> points="<?=($width) . "," . ($height)?> <?=($width-2) . "," . ($height-2)?> <?=($width-2) . "," . $height?>"/>
+ <path id="graph_cpu" d="" <?=$attribs['graph_cpu']?>/>
+ <path id="grid" d="M0 <?=$height/4*1?> L <?=$width?> <?=$height/4*1?> M0 <?=$height/4*2?> L <?=$width?> <?=$height/4*2?> M0 <?=$height/4*3?> L <?=$width?> <?=$height/4*3?>" <?=$attribs['grid']?>/>
+ <text id="grid_txt1" x="100%" y="25%" <?=$attribs['grid_txt']?> text-anchor="end">75%</text>
+ <text id="grid_txt2" x="100%" y="50%" <?=$attribs['grid_txt']?> text-anchor="end">50%</text>
+ <text id="grid_txt3" x="100%" y="75%" <?=$attribs['grid_txt']?> text-anchor="end">25%</text>
+ <text id="graph_cpu_txt" x="4" y="8" <?=$attribs['cpu']?>> </text>
+ <text id="error" x="50%" y="50%" visibility="hidden" <?=$attribs['error']?> text-anchor="middle"><?=gettext("Cannot get CPU load"); ?></text>
+ <text id="collect_initial" x="50%" y="50%" visibility="hidden" <?=$attribs['collect_initial']?> text-anchor="middle"><?=gettext("Collecting initial data, please wait"); ?>...</text>
+ </g>
+ <script type="text/ecmascript">
+ <![CDATA[
+
+/**
+ * getURL is a proprietary Adobe function, but it's simplicity has made it very
+ * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
+ */
+if (typeof getURL == 'undefined') {
+ getURL = function(url, callback) {
+ if (!url) {
+ throw '<?=gettext("No URL for getURL"); ?>';
+ }
+
+ try {
+ if (typeof callback.operationComplete == 'function') {
+ callback = callback.operationComplete;
+ }
+ } catch (e) {}
+ if (typeof callback != 'function') {
+ throw '<?=gettext("No callback function for getURL"); ?>';
+ }
+
+ var http_request = null;
+ if (typeof XMLHttpRequest != 'undefined') {
+ http_request = new XMLHttpRequest();
+ } else if (typeof ActiveXObject != 'undefined') {
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ } catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ } catch (e) {}
+ }
+ }
+ if (!http_request) {
+ throw '<?=gettext("Both getURL and XMLHttpRequest are undefined"); ?>';
+ }
+
+ http_request.onreadystatechange = function() {
+ if (http_request.readyState == 4) {
+ callback( { success : true,
+ content : http_request.responseText,
+ contentType : http_request.getResponseHeader("Content-Type") } );
+ }
+ }
+ http_request.open('GET', url, true);
+ http_request.send(null);
+ }
+}
+
+var SVGDoc = null;
+var last_cpu_total = 0;
+var last_cpu_idle = 0;
+var diff_cpu_total = 0;
+var diff_cpu_idle = 0;
+var cpu_data = new Array();
+
+var max_num_points = <?=$nb_plot?>; // maximum number of plot data points
+var step = <?=$width?> / max_num_points; // plot X division size
+var scale = <?=$height?> / 100;
+
+function init(evt) {
+ SVGDoc = evt.target.ownerDocument;
+ fetch_data();
+}
+
+function fetch_data() {
+ getURL('<?=$fetch_link?>', plot_cpu_data);
+}
+
+function plot_cpu_data(obj) {
+ if (!obj.success) {
+ return handle_error(); // getURL failed to get current CPU load data
+ }
+
+ var cpu = parseInt(obj.content);
+ if (!isNumber(cpu)) {
+ return handle_error();
+ }
+
+ switch (cpu_data.length) {
+ case 0:
+ SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'visible');
+ cpu_data[0] = cpu;
+ fetch_data();
+ return;
+ case 1:
+ SVGDoc.getElementById("collect_initial").setAttributeNS(null, 'visibility', 'hidden');
+ break;
+ case max_num_points:
+ // shift plot to left if the maximum number of plot points has been reached
+ var i = 0;
+ while (i < max_num_points) {
+ cpu_data[i] = cpu_data[++i];
+ }
+ --cpu_data.length;
+ }
+
+ cpu_data[cpu_data.length] = cpu;
+
+ var path_data = "M 0 " + (<?=$height?> - (cpu_data[0] * scale));
+ for (var i = 1; i < cpu_data.length; ++i) {
+ var x = step * i;
+ var y_cpu = <?=$height?> - (cpu_data[i] * scale);
+ path_data += " L" + x + " " + y_cpu;
+ }
+
+ SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'hidden');
+ SVGDoc.getElementById('graph_cpu_txt').firstChild.data = cpu + '%';
+ SVGDoc.getElementById('graph_cpu').setAttributeNS(null, "d", path_data);
+
+ fetch_data();
+}
+
+function handle_error() {
+ SVGDoc.getElementById("error").setAttributeNS(null, 'visibility', 'visible');
+ fetch_data();
+}
+
+function isNumber(a) {
+ return typeof a == 'number' && isFinite(a);
+}
+
+ ]]>
+ </script>
+</svg>
diff --git a/src/usr/local/www/green_dot.jpg b/src/usr/local/www/green_dot.jpg
new file mode 100755
index 0000000..9df0abf
--- /dev/null
+++ b/src/usr/local/www/green_dot.jpg
Binary files differ
diff --git a/src/usr/local/www/gui.css b/src/usr/local/www/gui.css
new file mode 100755
index 0000000..d93c4d9
--- /dev/null
+++ b/src/usr/local/www/gui.css
@@ -0,0 +1,363 @@
+/*
+ pfSense_MODULE: base
+*/
+
+html,body {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+td,th,input,select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+}
+form {
+ margin: 0px;
+}
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+a {
+ text-decoration: none;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 0.9em;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
diff --git a/src/usr/local/www/guiconfig.inc b/src/usr/local/www/guiconfig.inc
new file mode 100644
index 0000000..3b36f5f
--- /dev/null
+++ b/src/usr/local/www/guiconfig.inc
@@ -0,0 +1,1252 @@
+<?php
+/*
+ guiconfig.inc
+ by Scott Ullrich, Copyright 2004, All rights reserved.
+ originally based on of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: base
+*/
+
+/* Include authentication routines */
+/* THIS MUST BE ABOVE ALL OTHER CODE */
+if (!$nocsrf) {
+ function csrf_startup() {
+ csrf_conf('rewrite-js', '/csrf/csrf-magic.js');
+ $timeout_minutes = isset($config['system']['webgui']['session_timeout']) ? $config['system']['webgui']['session_timeout'] : 240;
+ csrf_conf('expires', $timeout_minutes * 60);
+ }
+ require_once("csrf/csrf-magic.php");
+}
+
+/* make sure nothing is cached */
+if (!$omit_nocacheheaders) {
+ header("Expires: 0");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ header("Cache-Control: no-cache, no-store, must-revalidate");
+ header("Pragma: no-cache");
+}
+
+header("X-Frame-Options: SAMEORIGIN");
+require_once("authgui.inc");
+
+/* parse the configuration and include all configuration functions */
+require_once("functions.inc");
+
+/* Pull in all the gui related display classes) */
+foreach (scandir("/usr/local/www/classes/") as $file) {
+ if (substr($file, -4) == ".inc") {
+ require_once("classes/{$file}");
+ }
+}
+
+$g['theme'] = get_current_theme();
+
+/* Set the default interface language */
+if ($config['system']['language'] <> "") {
+ $g['language'] = $config['system']['language'];
+} elseif ($g['language'] == "") {
+ $g['language'] = 'en_US';
+}
+
+set_language($g['language']);
+
+/* used by progress bar */
+$lastseen = "-1";
+
+$navlevelsep = ": "; /* navigation level separator string */
+$mandfldhtml = ""; /* display this before mandatory input fields */
+$mandfldhtmlspc = ""; /* same as above, but with spacing */
+
+/* Some ajax scripts still need access to GUI */
+if (!$ignorefirmwarelock) {
+ if (is_subsystem_dirty('firmwarelock')) {
+ if (!$d_isfwfile) {
+ header("Location: system_firmware.php");
+ exit;
+ } else {
+ return;
+ }
+ }
+}
+
+/* Reserved table names to avoid collision */
+$reserved_table_names = array(
+ "bogons",
+ "bogonsv6",
+ "negate_networks",
+ "snort2c",
+ "sshlockout",
+ "tonatsubnets",
+ "virusprot",
+ "vpn_networks",
+ "webConfiguratorlockout"
+);
+
+$firewall_rules_dscp_types = array(
+ "af11",
+ "af12",
+ "af13",
+ "af21",
+ "af22",
+ "af23",
+ "af31",
+ "af32",
+ "af33",
+ "af41",
+ "af42",
+ "af43",
+ "VA",
+ "EF",
+ "cs1",
+ "cs2",
+ "cs3",
+ "cs4",
+ "cs5",
+ "cs6",
+ "cs7",
+ "0x01",
+ "0x02",
+ "0x04");
+
+$auth_server_types = array(
+ 'ldap' => "LDAP",
+ 'radius' => "Radius");
+
+$ldap_urltypes = array(
+ 'TCP - Standard' => 389,
+ 'SSL - Encrypted' => 636);
+
+$ldap_scopes = array(
+ 'one' => "One Level",
+ 'subtree' => "Entire Subtree");
+
+$ldap_protvers = array(
+ 2,
+ 3);
+
+$ldap_templates = array(
+
+ 'open' => array(
+ 'desc' => "OpenLDAP",
+ 'attr_user' => "cn",
+ 'attr_group' => "cn",
+ 'attr_member' => "member"),
+
+ 'msad' => array(
+ 'desc' => "Microsoft AD",
+ 'attr_user' => "samAccountName",
+ 'attr_group' => "cn",
+ 'attr_member' => "memberOf"),
+
+ 'edir' => array(
+ 'desc' => "Novell eDirectory",
+ 'attr_user' => "cn",
+ 'attr_group' => "cn",
+ 'attr_member' => "uniqueMember"));
+
+$radius_srvcs = array(
+ 'both' => "Authentication and Accounting",
+ 'auth' => "Authentication",
+ 'acct' => "Accounting");
+
+$netbios_nodetypes = array(
+ '0' => "none",
+ '1' => "b-node",
+ '2' => "p-node",
+ '4' => "m-node",
+ '8' => "h-node");
+
+/* some well known ports */
+$wkports = array(
+ 5999 => "CVSup",
+ 53 => "DNS",
+ 21 => "FTP",
+ 3000 => "HBCI",
+ 80 => "HTTP",
+ 443 => "HTTPS",
+ 5190 => "ICQ",
+ 113 => "IDENT/AUTH",
+ 143 => "IMAP",
+ 993 => "IMAP/S",
+ 4500 => "IPsec NAT-T",
+ 500 => "ISAKMP",
+ 1701 => "L2TP",
+ 389 => "LDAP",
+ 1755 => "MMS/TCP",
+ 7000 => "MMS/UDP",
+ 445 => "MS DS",
+ 3389 => "MS RDP",
+ 1512 => "MS WINS",
+ 1863 => "MSN",
+ 119 => "NNTP",
+ 123 => "NTP",
+ 138 => "NetBIOS-DGM",
+ 137 => "NetBIOS-NS",
+ 139 => "NetBIOS-SSN",
+ 1194 => "OpenVPN",
+ 110 => "POP3",
+ 995 => "POP3/S",
+ 1723 => "PPTP",
+ 1812 => "RADIUS",
+ 1813 => "RADIUS accounting",
+ 5004 => "RTP",
+ 5060 => "SIP",
+ 25 => "SMTP",
+ 465 => "SMTP/S",
+ 161 => "SNMP",
+ 162 => "SNMP-Trap",
+ 22 => "SSH",
+ 3478 => "STUN",
+ 587 => "SUBMISSION",
+ 3544 => "Teredo",
+ 23 => "Telnet",
+ 69 => "TFTP",
+ 5900 => "VNC");
+
+/* TCP flags */
+$tcpflags = array("fin", "syn", "rst", "psh", "ack", "urg", "ece", "cwr");
+
+$specialnets = array("(self)" => "This Firewall", "pptp" => "PPTP clients", "pppoe" => "PPPoE clients", "l2tp" => "L2TP clients");
+
+$spiflist = get_configured_interface_with_descr(false, true);
+foreach ($spiflist as $ifgui => $ifdesc) {
+ $specialnets[$ifgui] = $ifdesc . " net";
+ $specialnets[$ifgui . 'ip'] = $ifdesc . " address";
+}
+
+$medias = array(
+ "auto" => "autoselect",
+ "100full" => "100BASE-TX full-duplex",
+ "100half" => "100BASE-TX half-duplex",
+ "10full" => "10BASE-T full-duplex",
+ "10half" => "10BASE-T half-duplex");
+
+$wlan_modes = array(
+ "bss" => "Infrastructure (BSS)",
+ "adhoc" => "Ad-hoc (IBSS)",
+ "hostap" => "Access Point");
+
+function do_input_validation($postdata, $reqdfields, $reqdfieldsn, &$input_errors) {
+
+ /* check for bad control characters */
+ foreach ($postdata as $pn => $pd) {
+ if (is_string($pd) && preg_match("/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/", $pd)) {
+ $input_errors[] = sprintf(gettext("The field %s contains invalid characters."), $pn);
+ }
+ }
+
+ for ($i = 0; $i < count($reqdfields); $i++) {
+ if ($_POST[$reqdfields[$i]] == "" && $_REQUEST[$reqdfields[$i]] == "") {
+ $input_errors[] = sprintf(gettext("The field %s is required."), $reqdfieldsn[$i]);
+ }
+ }
+}
+
+function print_input_errors($input_errors) {
+ global $g;
+
+ print <<<EOF
+ <div id="inputerrorsdiv">
+ <table border="0" cellspacing="0" cellpadding="4" width="100%" summary="input errors">
+ <tr>
+ <td class="inputerrorsleft">
+ <img src="/themes/{$g['theme']}/images/icons/icon_error.gif" alt="errors" />
+ </td>
+ <td class="inputerrorsright errmsg">
+EOF;
+ echo "<p>" . gettext("The following input errors were detected:") . "</p>\n<ul>";
+ foreach ($input_errors as $ierr) {
+ echo "<li>" . htmlspecialchars($ierr) . "</li>";
+ }
+
+ print <<<EOF2
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </div>
+ &nbsp;<br />
+EOF2;
+
+}
+
+function verify_gzip_file($fname) {
+ $returnvar = mwexec("/usr/bin/gzip -t " . escapeshellarg($fname));
+ if ($returnvar != 0) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+function print_info_box_np($msg, $name = "apply", $value = "", $showapply = false) {
+ global $g, $nifty_redbox, $nifty_blackbox, $nifty_background;
+
+ if (empty($value)) {
+ $value = gettext("Apply changes");
+ }
+
+ // Set the Nifty background color if one is not set already (defaults to white)
+ if ($nifty_background == "") {
+ $nifty_background = "#FFF";
+ }
+
+ if (stristr($msg, gettext("apply")) != false || stristr($msg, gettext("save")) != false || stristr($msg, gettext("create")) != false || $showapply) {
+ $savebutton = "<td class=\"infoboxsave\">";
+ $savebutton .= "<input name=\"{$name}\" type=\"submit\" class=\"formbtn\" id=\"${name}\" value=\"{$value}\" />";
+ if ($_POST['if']) {
+ $savebutton .= "<input type=\"hidden\" name=\"if\" value=\"" . htmlspecialchars($_POST['if']) . "\" />";
+ }
+ $savebutton .= "</td>";
+ }
+ $nifty_redbox = "#990000";
+ $nifty_blackbox = "#000000";
+
+ $themename = $g['theme'];
+
+ if (file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) {
+ $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php");
+ eval($toeval);
+ }
+
+ if (file_exists("/usr/local/www/themes/{$themename}/infobox.php")) {
+ $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php");
+ eval($toeval);
+ }
+
+ if (!$savebutton) {
+ $savebutton = "<td class=\"infoboxsave\"><input value=\"" . gettext("Close") . "\" type=\"button\" onclick=\"jQuery(this).parents('table[id=redboxtable]').hide();\" /></td>";
+ }
+
+ echo <<<EOFnp
+ <table class="infobox" id="redboxtable" summary="red box table">
+ <tr>
+ <td>
+ <div class="infoboxnp" id="redbox">
+ <table class="infoboxnptable2" summary="message">
+ <tr>
+ <td class="infoboxnptd">
+ &nbsp;&nbsp;&nbsp;<img class="infoboxnpimg" src="/themes/{$g['theme']}/images/icons/icon_exclam.gif" alt="exclamation" />
+ </td>
+ <td class="infoboxnptd2">
+ <b>{$msg}</b>
+ </td>
+ {$savebutton}
+ </tr>
+ </table>
+ </div>
+ <div>
+ <p>&nbsp;</p>
+ </div>
+ </td>
+ </tr>
+ </table>
+ <script type="text/javascript">
+ //<![CDATA[
+ NiftyCheck();
+ Rounded("div#redbox","all","{$nifty_background}","{$nifty_redbox}","smooth");
+ Rounded("td#blackbox","all","{$nifty_background}","{$nifty_blackbox}","smooth");
+ //]]>
+ </script>
+EOFnp;
+
+}
+
+function print_info_box_np_undo($msg, $name = "apply", $value = "Apply changes", $undo) {
+ global $g;
+
+ if (stristr($msg, "apply") != false || stristr($msg, "save") != false || stristr($msg, "create") != false) {
+ $savebutton = "<td class=\"infoboxsave nowrap\">";
+ $savebutton .= "<input type=\"button\" value=\"". gettext("Undo") . "\" onclick=\"document.location='{$undo}'\" />";
+ $savebutton .= "<input name=\"{$name}\" type=\"submit\" class=\"formbtn\" id=\"${name}\" value=\"{$value}\" />";
+ $savebutton .= "</td>";
+ if ($_POST['if']) {
+ $savebutton .= "<input type=\"hidden\" name=\"if\" value=\"" . htmlspecialchars($_POST['if']) . "\" />";
+ }
+ }
+ $nifty_redbox = "#990000";
+ $nifty_blackbox = "#000000";
+
+ $themename = $g['theme'];
+
+ if (file_exists("/usr/local/www/themes/{$themename}/tabcontrols.php")) {
+ $toeval = file_get_contents("/usr/local/www/themes/{$themename}/tabcontrols.php");
+ eval($toeval);
+ }
+
+ if (file_exists("/usr/local/www/themes/{$themename}/infobox.php")) {
+ $toeval = file_get_contents("/usr/local/www/themes/{$themename}/infobox.php");
+ eval($toeval);
+ }
+
+
+ if (!$savebutton) {
+ $savebutton = "<td class=\"infoboxsave\"><input value=\"" . gettext("Close") . "\" type=\"button\" onclick=\"jQuery(this).parents('table[id=redboxtable]').hide();\" /></td>";
+ }
+
+ echo <<<EOFnp
+ <table class="infobox" id="redboxtable" summary="red box table">
+ <tr>
+ <td>
+ <div class="infoboxnp" id="redbox">
+ <table class="infoboxnptable2" summary="message">
+ <tr>
+ <td class="infoboxnptd">
+ &nbsp;&nbsp;&nbsp;<img class="infoboxnpimg" src="/themes/{$g['theme']}/images/icons/icon_exclam.gif" alt="exclamation" />
+ </td>
+ <td class="infoboxnptd2">
+ <b>{$msg}</b>
+ </td>
+ {$savebutton}
+ {$undobutton}
+ </tr>
+ </table>
+ </div>
+ <div>
+ <p>&nbsp;</p>
+ </div>
+ </td>
+ </tr>
+ </table>
+ <script type="text/javascript">
+ //<![CDATA[
+ NiftyCheck();
+ Rounded("div#redbox","all","#FFF","{$nifty_redbox}","smooth");
+ Rounded("td#blackbox","all","#FFF","{$nifty_blackbox}","smooth");
+ //]]>
+ </script>
+EOFnp;
+
+}
+
+function print_info_box($msg) {
+ print_info_box_np($msg);
+}
+
+function get_std_save_message($ok) {
+ global $d_sysrebootreqd_path;
+ $filter_related = false;
+ $filter_pages = array("nat", "filter");
+ $to_return = gettext("The changes have been applied successfully.");
+ foreach ($filter_pages as $fp) {
+ if (stristr($_SERVER['SCRIPT_FILENAME'], $fp)) {
+ $filter_related = true;
+ }
+ }
+ if ($filter_related) {
+ $to_return .= "<br />" . gettext("You can also <a href=\"status_filter_reload.php\">monitor</a> the filter reload progress.");
+ }
+ return $to_return;
+}
+
+function pprint_address($adr) {
+ global $specialnets;
+
+ if (isset($adr['any'])) {
+ $padr = "*";
+ } else if ($adr['network']) {
+ $padr = $specialnets[$adr['network']];
+ } else {
+ $padr = $adr['address'];
+ }
+
+ if (isset($adr['not'])) {
+ $padr = "! " . $padr;
+ }
+
+ return $padr;
+}
+
+function pprint_port($port) {
+ global $wkports;
+
+ $pport = "";
+
+ if (!$port) {
+ return "*";
+ } else {
+ $srcport = explode("-", $port);
+ if ((!$srcport[1]) || ($srcport[0] == $srcport[1])) {
+ $pport = $srcport[0];
+ if ($wkports[$srcport[0]]) {
+ $pport .= " (" . $wkports[$srcport[0]] . ")";
+ }
+ } else {
+ $pport .= $srcport[0] . " - " . $srcport[1];
+ }
+ }
+
+ return $pport;
+}
+
+function firewall_check_for_advanced_options(&$item) {
+ $item_set = "";
+ if ($item['os']) {
+ $item_set .= "os {$item['os']} ";
+ }
+ if ($item['dscp']) {
+ $item_set .= "dscp {$item['dscp']} ";
+ }
+ if ($item['max']) {
+ $item_set .= "max {$item['max']} ";
+ }
+ if ($item['max-src-nodes']) {
+ $item_set .= "max-src-nodes {$item['max-src-nodes']} ";
+ }
+ if ($item['max-src-conn']) {
+ $item_set .= "max-src-conn {$item['max-src-conn']} ";
+ }
+ if ($item['max-src-states']) {
+ $item_set .= "max-src-states {$item['max-src-states']} ";
+ }
+ if (isset($item['nopfsync'])) {
+ $item_set .= "nopfsync ";
+ }
+ if ($item['statetype'] != "keep state" && $item['statetype'] != "") {
+ $item_set .= "statetype {$item['statetype']} ";
+ }
+ if ($item['statetimeout']) {
+ $item_set .= "statetimeout {$item['statetimeout']} ";
+ }
+ if (isset($item['nosync'])) {
+ $item_set .= "no XMLRPC Sync ";
+ }
+ if ($item['max-src-conn-rate']) {
+ $item_set .= "max-src-conn-rate {$item['max-src-conn-rate']} ";
+ }
+ if ($item['max-src-conn-rates']) {
+ $item_set .= "max-src-conn-rates {$item['max-src-conn-rates']} ";
+ }
+ if ($item['vlanprio']) {
+ $item_set .= "vlanprio {$item['vlanprio']} ";
+ }
+ if ($item['vlanprioset']) {
+ $item_set .= "vlanprioset {$item['vlanprioset']} ";
+ }
+ if ($item['gateway']) {
+ $item_set .= "gateway {$item['gateway']} ";
+ }
+ if ($item['dnpipe']) {
+ $item_set .= "limiter {$item['dnpipe']} ";
+ }
+ if ($item['pdnpipe']) {
+ $item_set .= "limiter {$item['pdnpipe']} ";
+ }
+ if ($item['ackqueue']) {
+ $item_set .= "ackqueue {$item['ackqueue']} ";
+ }
+ if ($item['defaultqueue']) {
+ $item_set .= "defaultqueue {$item['defaultqueue']} ";
+ }
+ if ($item['l7container']) {
+ $item_set .= "layer7 {$item['l7container']} ";
+ }
+ if ($item['tag']) {
+ $item_set .= "tag {$item['tag']} ";
+ }
+ if ($item['tagged']) {
+ $item_set .= "tagged {$item['tagged']} ";
+ }
+ if (isset($item['allowopts'])) {
+ $item_set .= "allowopts ";
+ }
+ if (isset($item['disablereplyto'])) {
+ $item_set .= "disable reply-to ";
+ }
+ if ($item['tcpflags_any'] || $item['tcpflags1'] || $item['tcpflags2']) {
+ $item_set .= "tcpflags set";
+ }
+
+ return $item_set;
+}
+
+function gentitle($title) {
+ global $navlevelsep;
+ if (!is_array($title)) {
+ return $title;
+ } else {
+ return join($navlevelsep, $title);
+ }
+}
+
+function genhtmltitle($title) {
+ global $config;
+ return gentitle($title);
+}
+
+/* update the changedesc and changecount(er) variables */
+function update_changedesc($update) {
+ global $changedesc;
+ global $changecount;
+
+ $changedesc .= " {$update}";
+ $changecount++;
+}
+
+function clear_log_file($logfile = "/var/log/system.log", $restart_syslogd = true) {
+ global $config, $g;
+ if ($restart_syslogd) {
+ exec("/usr/bin/killall syslogd");
+ }
+ if (isset($config['system']['disablesyslogclog'])) {
+ unlink($logfile);
+ touch($logfile);
+ } else {
+ $log_size = isset($config['syslog']['logfilesize']) ? $config['syslog']['logfilesize'] : "511488";
+ if (isset($config['system']['usefifolog'])) {
+ exec("/usr/sbin/fifolog_create -s {$log_size} " . escapeshellarg($logfile));
+ } else {
+ exec("/usr/local/sbin/clog -i -s {$log_size} " . escapeshellarg($logfile));
+ }
+ }
+ if ($restart_syslogd) {
+ system_syslogd_start();
+ }
+}
+
+function clear_all_log_files() {
+ global $g;
+ exec("/usr/bin/killall syslogd");
+
+ $log_files = array("system", "filter", "dhcpd", "vpn", "pptps", "poes", "l2tps", "openvpn", "portalauth", "ipsec", "ppp", "relayd", "wireless", "lighttpd", "ntpd", "gateways", "resolver", "routing");
+ foreach ($log_files as $lfile) {
+ clear_log_file("{$g['varlog_path']}/{$lfile}.log", false);
+ }
+
+ system_syslogd_start();
+ killbyname("dhcpd");
+ services_dhcpd_configure();
+ return;
+}
+
+function dump_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "") {
+ global $g, $config;
+ $sor = isset($config['syslog']['reverse']) ? "-r" : "";
+ $logarr = "";
+ $grepline = " ";
+ if (is_array($grepfor)) {
+ $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor));
+ }
+ if (is_array($grepinvert)) {
+ $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert));
+ }
+ if (is_dir($logfile)) {
+ $logarr = array("File $logfile is a directory.");
+ } elseif (file_exists($logfile) && filesize($logfile) == 0) {
+ $logarr = array("Log file started.");
+ } else {
+ if ($config['system']['disablesyslogclog']) {
+ exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ } else {
+ if (isset($config['system']['usefifolog'])) {
+ exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ } else {
+ exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ }
+ }
+ }
+ foreach ($logarr as $logent) {
+ $logent = preg_split("/\s+/", $logent, 6);
+ echo "<tr valign=\"top\">\n";
+ if ($withorig) {
+ if (isset($config['system']['usefifolog'])) {
+ $entry_date_time = htmlspecialchars(date("F j, Y, g:i a", "" . $logent[1] . ""));
+ $entry_text = htmlspecialchars($logent[5]);
+ } else {
+ $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3)));
+ $entry_text = ($logent[3] == $config['system']['hostname']) ? "" : $logent[3] . " ";
+ $entry_text .= htmlspecialchars($logent[4] . " " . $logent[5]);
+ }
+ echo "<td class=\"listlr nowrap\">{$entry_date_time}</td>\n";
+ echo "<td class=\"listr\">{$entry_text}</td>\n";
+ } else {
+ echo "<td class=\"listlr\" colspan=\"2\">" . htmlspecialchars($logent[5]) . "</td>\n";
+ }
+ echo "</tr>\n";
+ }
+}
+
+function return_clog($logfile, $tail, $withorig = true, $grepfor = "", $grepinvert = "", $grepreverse = false) {
+ global $g, $config;
+ $sor = (isset($config['syslog']['reverse']) || $grepreverse) ? "-r" : "";
+ $logarr = "";
+ $grepline = " ";
+ if (is_array($grepfor)) {
+ $grepline .= " | /usr/bin/egrep " . escapeshellarg(implode("|", $grepfor));
+ }
+ if (is_array($grepinvert)) {
+ $grepline .= " | /usr/bin/egrep -v " . escapeshellarg(implode("|", $grepinvert));
+ }
+ if ($config['system']['disablesyslogclog']) {
+ exec("cat " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ } else {
+ if (isset($config['system']['usefifolog'])) {
+ exec("/usr/sbin/fifolog_reader " . escapeshellarg($logfile) . "{$grepline} | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ } else {
+ exec("/usr/local/sbin/clog " . escapeshellarg($logfile) . "{$grepline}| grep -v \"CLOG\" | grep -v \"\033\" | /usr/bin/tail {$sor} -n " . escapeshellarg($tail), $logarr);
+ }
+ }
+ return($logarr);
+}
+
+/* Check if variable has changed, update and log if it has
+ * returns true if var changed
+ * varname = variable name in plain text
+ * orig = original value
+ * new = new value
+ */
+function update_if_changed($varname, & $orig, $new) {
+ if (is_array($orig) && is_array($new)) {
+ $a_diff = array_diff($orig, $new);
+ foreach ($a_diff as $diff) {
+ update_changedesc("removed {$varname}: \"{$diff}\"");
+ }
+ $a_diff = array_diff($new, $orig);
+ foreach ($a_diff as $diff) {
+ update_changedesc("added {$varname}: \"{$diff}\"");
+ }
+ $orig = $new;
+ return true;
+
+ } else {
+ if ($orig != $new) {
+ update_changedesc("{$varname}: \"{$orig}\" -> \"{$new}\"");
+ $orig = $new;
+ return true;
+ }
+ }
+ return false;
+}
+
+function address_to_pconfig($adr, &$padr, &$pmask, &$pnot, &$pbeginport, &$pendport) {
+ if (isset($adr['any'])) {
+ $padr = "any";
+ } else if ($adr['network']) {
+ $padr = $adr['network'];
+ } else if ($adr['address']) {
+ list($padr, $pmask) = explode("/", $adr['address']);
+ if (!$pmask) {
+ if (is_ipaddrv6($padr)) {
+ $pmask = 128;
+ } else {
+ $pmask = 32;
+ }
+ }
+ }
+
+ if (isset($adr['not'])) {
+ $pnot = 1;
+ } else {
+ $pnot = 0;
+ }
+
+ if ($adr['port']) {
+ list($pbeginport, $pendport) = explode("-", $adr['port']);
+ if (!$pendport) {
+ $pendport = $pbeginport;
+ }
+ } else if (!is_alias($pbeginport) && !is_alias($pendport)) {
+ $pbeginport = "any";
+ $pendport = "any";
+ }
+}
+
+function pconfig_to_address(&$adr, $padr, $pmask, $pnot = false, $pbeginport = 0, $pendport = 0) {
+ $adr = array();
+
+ if ($padr == "any") {
+ $adr['any'] = true;
+ } else if (is_specialnet($padr)) {
+ $adr['network'] = $padr;
+ } else {
+ $adr['address'] = $padr;
+ if (is_ipaddrv6($padr)) {
+ if ($pmask != 128) {
+ $adr['address'] .= "/" . $pmask;
+ }
+ } else {
+ if ($pmask != 32) {
+ $adr['address'] .= "/" . $pmask;
+ }
+ }
+ }
+
+ if ($pnot) {
+ $adr['not'] = true;
+ } else {
+ unset($adr['not']);
+ }
+
+ if (($pbeginport != 0) && ($pbeginport != "any")) {
+ if ($pbeginport != $pendport) {
+ $adr['port'] = $pbeginport . "-" . $pendport;
+ } else {
+ $adr['port'] = $pbeginport;
+ }
+ }
+
+ if (is_alias($pbeginport)) {
+ $adr['port'] = $pbeginport;
+ }
+}
+
+function is_specialnet($net) {
+ global $specialsrcdst;
+
+ if (!$net) {
+ return false;
+ }
+ if (in_array($net, $specialsrcdst)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+//function to create widget tabs when called
+function display_widget_tabs(& $tab_array) {
+ echo "<div id=\"tabs\">";
+ $tabscounter = 0;
+ foreach ($tab_array as $ta) {
+ $dashpos = strpos($ta[2], '-');
+ $tabname = $ta[2] . "-tab";
+ $tabclass = substr($ta[2], 0, $dashpos);
+ $tabclass = $tabclass . "-class";
+ if ($ta[1] == true) {
+ $tabActive = "table-cell";
+ $tabNonActive = "none";
+ } else {
+ $tabActive = "none";
+ $tabNonActive = "table-cell";
+ }
+ echo "<div id=\"{$ta[2]}-active\" class=\"{$tabclass}-tabactive\" style=\"display:{$tabActive}; background-color:#EEEEEE; color:black;\">";
+ echo "<b>&nbsp;&nbsp;&nbsp;{$ta[0]}";
+ echo "&nbsp;&nbsp;&nbsp;</b>";
+ echo "</div>";
+
+ echo "<div id=\"{$ta[2]}-deactive\" class=\"{$tabclass}-tabdeactive\" style=\"display:{$tabNonActive}; background-color:#777777; color:white; cursor: pointer;\" onclick=\"return changeTabDIV('{$ta[2]}')\">";
+ echo "<b>&nbsp;&nbsp;&nbsp;{$ta[0]}";
+ echo "&nbsp;&nbsp;&nbsp;</b>";
+ echo "</div>";
+ }
+
+ echo "<script type=\"text/javascript\">";
+ echo "\n//<![CDATA[\n";
+ echo "NiftyCheck();\n";
+ echo "Rounded(\"div.{$tabclass}-tabactive\",\"top\",\"#CCCCCC\",\"#EEEEEE\",\"smooth\");\n";
+ echo "Rounded(\"div.{$tabclass}-tabdeactive\",\"top\",\"#CCCCCC\",\"#777777\",\"smooth\");\n";
+ echo "//]]>\n";
+ echo "</script>";
+ echo "</div>";
+}
+
+
+// Return inline javascript file or CSS to minimize
+// request count going back to server.
+function outputJavaScriptFileInline($javascript) {
+ if (file_exists($javascript)) {
+ echo "\n<script type=\"text/javascript\">\n";
+ include($javascript);
+ echo "\n</script>\n";
+ } else {
+ echo "\n\n<!-- Could not locate file: {$javascript} -->\n\n";
+ }
+}
+
+
+
+function outputCSSPrintFileInline($css) {
+ if (file_exists($css)) {
+ echo "\n<style media=\"print\" type=\"text/css\">\n";
+ include($css);
+ echo "\n</style>\n";
+ } else {
+ echo "\n\n<!-- Could not locate file: {$css} -->\n\n";
+ }
+}
+
+
+function outputCSSFileInline($css) {
+ if (file_exists($css)) {
+ echo "\n<style type=\"text/css\">\n";
+ include($css);
+ echo "\n</style>\n";
+ } else {
+ echo "\n\n<!-- Could not locate file: {$css} -->\n\n";
+ }
+}
+
+$rfc2616 = array(
+ 100 => "100 Continue",
+ 101 => "101 Switching Protocols",
+ 200 => "200 OK",
+ 201 => "201 Created",
+ 202 => "202 Accepted",
+ 203 => "203 Non-Authoritative Information",
+ 204 => "204 No Content",
+ 205 => "205 Reset Content",
+ 206 => "206 Partial Content",
+ 300 => "300 Multiple Choices",
+ 301 => "301 Moved Permanently",
+ 302 => "302 Found",
+ 303 => "303 See Other",
+ 304 => "304 Not Modified",
+ 305 => "305 Use Proxy",
+ 306 => "306 (Unused)",
+ 307 => "307 Temporary Redirect",
+ 400 => "400 Bad Request",
+ 401 => "401 Unauthorized",
+ 402 => "402 Payment Required",
+ 403 => "403 Forbidden",
+ 404 => "404 Not Found",
+ 405 => "405 Method Not Allowed",
+ 406 => "406 Not Acceptable",
+ 407 => "407 Proxy Authentication Required",
+ 408 => "408 Request Timeout",
+ 409 => "409 Conflict",
+ 410 => "410 Gone",
+ 411 => "411 Length Required",
+ 412 => "412 Precondition Failed",
+ 413 => "413 Request Entity Too Large",
+ 414 => "414 Request-URI Too Long",
+ 415 => "415 Unsupported Media Type",
+ 416 => "416 Requested Range Not Satisfiable",
+ 417 => "417 Expectation Failed",
+ 500 => "500 Internal Server Error",
+ 501 => "501 Not Implemented",
+ 502 => "502 Bad Gateway",
+ 503 => "503 Service Unavailable",
+ 504 => "504 Gateway Timeout",
+ 505 => "505 HTTP Version Not Supported"
+);
+
+function is_rfc2616_code($code) {
+ global $rfc2616;
+ if (isset($rfc2616[$code])) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function print_rfc2616_select($tag, $current) {
+ global $rfc2616;
+
+ /* Default to 200 OK if not set */
+ if ($current == "") {
+ $current = 200;
+ }
+
+ echo "<select id=\"{$tag}\" name=\"{$tag}\">\n";
+ foreach ($rfc2616 as $code => $message) {
+ if ($code == $current) {
+ $sel = " selected=\"selected\"";
+ } else {
+ $sel = "";
+ }
+ echo "<option value=\"{$code}\"{$sel}>{$message}</option>\n";
+ }
+ echo "</select>\n";
+}
+
+// Useful debugging function, much cleaner than print_r
+function echo_array($array, $return_me = false) {
+ if (is_array($array) == false) {
+ $return = "The provided variable is not an array.";
+ } else {
+ foreach ($array as $name=>$value) {
+ if (is_array($value)) {
+ $return .= "";
+ $return .= "['<b>$name</b>'] {<div style=\"margin-left:10px;\">\n";
+ $return .= echo_array($value, true);
+ $return .= "</div>}";
+ $return .= "\n\n";
+ } else {
+ if (is_string($value)) {
+ $value = "\"$value\"";
+ }
+ $return .= "['<b>$name</b>'] = $value\n\n";
+ }
+ }
+ }
+ if ($return_me == true) {
+ return $return;
+ } else {
+ echo "<pre>".$return."</pre>";
+ }
+}
+
+/****f* pfsense-utils/display_top_tabs
+ * NAME
+ * display_top_tabs - display tabs with rounded edges
+ * INPUTS
+ * $text - array of tabs
+ * RESULT
+ * null
+ ******/
+function display_top_tabs(& $tab_array, $no_drop_down = false) {
+ global $config;
+ global $g;
+ global $tab_array_indent;
+ global $tab_array_space;
+ global $tab_array_char_limit;
+
+ /* does the user have access to this tab?
+ * master user has access to everything.
+ * if the user does not have access, simply
+ * unset the tab item.
+ */
+
+ /* empty string code */
+ if ($tab_array_indent == '') {
+ $tab_array_indent = 0;
+ }
+
+ if ($tab_array_space == '') {
+ $tab_array_space = 1;
+ }
+
+ if ($tab_array_char_limit == '') {
+ $tab_array_char_limit = 92;
+ }
+
+ foreach ($tab_array as $tab_id => $ta) {
+ if (!isAllowedPage($ta[2])) {
+ unset ($tab_array[$tab_id]);
+ }
+ }
+
+ $tab_active_bg = "#EEEEEE";
+ $tab_inactive_bg = "#777777";
+ $nifty_tabs_corners = "#FFF";
+ $font_color = "white";
+
+ /* if tabcontrols.php exist for a theme, allow it to be overridden */
+ $themename = $config['theme'];
+ $filename = "/usr/local/www/themes/{$themename}/tabcontrols.php";
+ if (file_exists($filename)) {
+ $eval_code = file_get_contents($filename);
+ eval($eval_code);
+ }
+
+ $tabcharcount = 0;
+ foreach ($tab_array as $ta) {
+ $tabcharcount = $tabcharcount + strlen($ta[0]);
+ }
+
+ if ($no_drop_down == true) {
+ $tabcharcount = 0;
+ unset($tab_array_char_limit);
+ }
+
+ // If the character count of the tab names is > 670
+ // then show a select item dropdown menubox.
+ if ($tabcharcount > $tab_array_char_limit) {
+ echo gettext("Currently viewing: ");
+ echo "<select name=\"TabSelect\" onchange=\"tabs_will_go(this)\">\n";
+ foreach ($tab_array as $ta) {
+ if ($ta[1] == "true") {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ // Onclick in option will not work in some browser
+ // echo "<option onclick=\"document.location='{$ta[2]}';\"{$selected}>{$ta['0']}</option>\n";
+ echo "<option value=\"{$ta[2]}\"{$selected}>{$ta['0']}</option>\n";
+ }
+ echo "</select>\n<p>&nbsp;</p>";
+ echo "<script type=\"text/javascript\">";
+ echo "\n//<![CDATA[\n";
+ echo " function tabs_will_go(obj) { document.location = obj.value; }\n";
+ echo "//]]>\n";
+ echo "</script>";
+ } else {
+ echo "<div class=\"newtabmenu\" style=\"margin:{$tab_array_space}px {$tab_array_indent}px; width:775px;\">\n";
+ echo "<!-- Tabbed bar code-->\n";
+ echo "<ul class=\"newtabmenu\">\n";
+ $tabscounter = 0;
+ foreach ($tab_array as $ta) {
+ if ($ta[1] == true) {
+ echo " <li class=\"newtabmenu_active\"><a href=\"{$ta[2]}\"><span>{$ta[0]}</span></a></li>\n";
+ } else {
+ echo " <li><a href=\"{$ta[2]}\"><span>{$ta[0]}</span></a></li>\n";
+ }
+ $tabscounter++;
+ }
+ echo "</ul>\n</div>\n";
+ }
+}
+
+function add_package_tabs($pkgname, &$tab_array) {
+ global $config, $g;
+
+ $pkg = get_pkg_data($pkgname);
+
+ if (!isset($pkg['configurationfile']) || !file_exists('/usr/local/pkg/' . $pkg['configurationfile'])) {
+ return;
+ }
+
+ $pkg_config = parse_xml_config_pkg('/usr/local/pkg/' . $pkg['configurationfile'], "packagegui");
+
+ if (!isset($pkg_config['tabs']['tab'])) {
+ return;
+ }
+
+ foreach ($pkg_config['tabs']['tab'] as $tab) {
+ $tab_entry = array();
+ if ($tab['name']) {
+ $tab_entry[] = $tab['name'];
+ $tab_entry[] = false;
+ $tab_entry[] = $tab['url'];
+ $tab_array[] = $tab_entry;
+ }
+ }
+}
+
+function alias_info_popup($alias_id) {
+ global $config;
+ $maxlength = 60;
+ $close_title="title='".gettext('move mouse out of this alias to hide')."'";
+ if (is_array($config['aliases']['alias'][$alias_id])) {
+ $alias_name = $config['aliases']['alias'][$alias_id];
+ $alias_objects_with_details = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" summary=\"alias info popup\">";
+ if ($alias_name['url']) {
+ // TODO: Change it when pf supports tables with ports
+ if ($alias_name['type'] == "urltable") {
+ exec("/sbin/pfctl -t {$alias_name['name']} -T show | wc -l", $total_entries);
+ $counter = preg_replace("/\D/", "", $total_entries[0]);
+ exec("/sbin/pfctl -t {$alias_name['name']} -T show | head -10002", $alias_addresses);
+ } else {
+ $urlfn = alias_expand_urltable($alias_name['name']);
+ $alias_addresses = explode("\n", file_get_contents($urlfn));
+ $counter = count($alias_addresses);
+ }
+ $alias_objects_with_details .= "<tr><td colspan=\"3\" $close_title class=\"vncell\">{$alias_name['url']}</td></tr>";
+ $x = 0;
+ foreach ($alias_addresses as $alias_ports_address) {
+ switch ($x) {
+ case 0:
+ $x++;
+ $alias_objects_with_details .= "<tr><td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td>";
+ break;
+ case 1:
+ $x++;
+ $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td>";
+ break;
+ default:
+ $x = 0;
+ $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\" style=\"background: #FFFFFF;color: #000000;\">{$alias_ports_address}</td><tr>";
+ break;
+ }
+ }
+ for ($y = $x; $y <= $x; $y++) {
+ $alias_objects_with_details .= "<td $close_title class=\"vncell\" width=\"33%\">&nbsp;</td>";
+ }
+ if ($x > 0) {
+ $alias_objects_with_details .= "</tr>";
+ }
+ if ($counter > 10002) {
+ $alias_objects_with_details .= "<tr><td colspan=\"3\"> ". gettext("listing only first 10k items") . "</td><tr>";
+ }
+ } else {
+ $alias_addresses = explode (" ", $alias_name['address']);
+ $alias_details = explode ("||", $alias_name['detail']);
+ $counter = 0;
+ foreach ($alias_addresses as $alias_ports_address) {
+ $alias_objects_with_details .= "<tr><td $close_title width=\"5%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">{$alias_addresses[$counter]}</td>";
+ $alias_detail_default = strpos ($alias_details[$counter], "Entry added");
+ if ($alias_details[$counter] != "" && $alias_detail_default === False) {
+ $alias_objects_with_details .="<td $close_title width=\"95%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">{$alias_details[$counter]}</td>";
+ } else {
+ $alias_objects_with_details .="<td $close_title width=\"95%\" class=\"vncell\" style=\"background: #FFFFFF;color: #000000;\">&nbsp;</td>";
+ }
+ $alias_objects_with_details .= "</tr>";
+ $counter++;
+ }
+ }
+ $alias_objects_with_details .= "</table>";
+ }
+ $alias_descr_substr = $alias_name['descr'];
+ if ($strlength >= $maxlength) {
+ $alias_descr_substr = substr($alias_descr_substr, 0, $maxlength) . "...";
+ }
+ $item_text = ($counter > 1 ? "items" : "item");
+ $alias_caption = "{$alias_descr_substr} - {$counter} {$item_text}<a href=\"/firewall_aliases_edit.php?id={$alias_id}\" title=\"".gettext('edit this alias')."\">&nbsp;&nbsp;edit </a>";
+ $strlength = strlen ($alias_caption);
+ print "<h1>{$alias_caption}</h1>" . $alias_objects_with_details;
+}
+
+function rule_popup($src, $srcport, $dst, $dstport) {
+ global $config, $g;
+ $aliases_array = array();
+ if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) {
+ $descriptions = array ();
+ foreach ($config['aliases']['alias'] as $alias_id=>$alias_name) {
+ $loading_image="<a><img src=\'/themes/{$g['theme']}/images/misc/loader.gif\' alt=\'loader\' /> " .gettext("loading...")."</a>";
+ switch ($alias_name['type']) {
+ case "port":
+ $width="250";
+ break;
+ case "urltable":
+ $width="500";
+ break;
+ default:
+ $width="350";
+ break;
+ }
+ $span_begin = "<span style=\"cursor: help;\" onmouseover=\"var response_html=domTT_activate(this, event, 'id','ttalias_{$alias_id}','content','{$loading_image}', 'trail', true, 'delay', 300, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle','type','velcro','width',{$width});alias_popup('{$alias_id}','{$g['theme']}','".gettext('loading...')."');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><u>";
+ $span_end = "</u></span>";
+ if ($alias_name['name'] == $src) {
+ $descriptions['src'] = $span_begin;
+ $descriptions['src_end'] = $span_end;
+ }
+ if ($alias_name['name'] == $srcport) {
+ $descriptions['srcport'] = $span_begin;
+ $descriptions['srcport_end'] = $span_end;
+ }
+ if ($alias_name['name'] == $dst) {
+ $descriptions['dst'] = $span_begin;
+ $descriptions['dst_end'] = $span_end;
+ }
+ if ($alias_name['name'] == $dstport) {
+ $descriptions['dstport'] = $span_begin;
+ $descriptions['dstport_end'] = $span_end;
+ }
+ }
+ return $descriptions;
+ }
+}
+
+$timezone = $config['system']['timezone'];
+if (!$timezone) {
+ $timezone = "Etc/UTC";
+}
+
+date_default_timezone_set($timezone);
+
+?>
diff --git a/src/usr/local/www/halt.php b/src/usr/local/www/halt.php
new file mode 100755
index 0000000..ab4fe99
--- /dev/null
+++ b/src/usr/local/www/halt.php
@@ -0,0 +1,77 @@
+<?php
+/* $Id$ */
+/*
+ halt.php
+ part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ part of m0n0wall as reboot.php (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: header
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-haltsystem
+##|*NAME=Diagnostics: Halt system page
+##|*DESCR=Allow access to the 'Diagnostics: Halt system' page.
+##|*MATCH=halt.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require("captiveportal.inc");
+
+if ($_POST['Submit'] == " " . gettext("No") . " ") {
+ header("Location: index.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Halt system"));
+include('head.inc');
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "):
+ print_info_box(gettext("The system is halting now. This may take one minute.")); ?>
+<pre>
+<?php system_halt(); ?>
+</pre>
+<?php else: ?>
+<form action="halt.php" method="post">
+ <p><strong><?=gettext("Are you sure you want to halt the system?");?></strong></p>
+ <p>
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes"); ?> " />
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No"); ?> " />
+ </p>
+</form>
+<?php endif; ?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/head.inc b/src/usr/local/www/head.inc
new file mode 100755
index 0000000..d8b8867
--- /dev/null
+++ b/src/usr/local/www/head.inc
@@ -0,0 +1,120 @@
+<?php
+/*
+ pfSense_MODULE: header
+*/
+
+$g['theme'] = get_current_theme();
+
+$pagetitle = gentitle($pgtitle);
+
+if (isset($config['system']['webgui']['pagenamefirst'])) {
+ $tabtitle = $pagetitle . " - " . $config['system']['hostname'] . "." . $config['system']['domain'];
+} else {
+ $tabtitle = $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pagetitle;
+}
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="<?=system_get_language_code();?>" xml:lang="<?=system_get_language_code();?>">
+<head>
+ <title><?php echo($tabtitle); ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=<?=system_get_language_codeset();?>" />
+ <link rel="apple-touch-icon" href="/themes/<?php echo $g['theme']; ?>/apple-touch-icon.png"/>
+ <link rel="shortcut icon" href="/themes/<?php echo $g['theme']; ?>/images/icons/favicon.ico"/>
+ <?php
+ if (file_exists("{$g['www_path']}/themes/{$g['theme']}/table.css")):
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/table.css\" />";
+ else:
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/css/table.css\" media=\"all\" />";
+ endif;
+ ?>
+
+ <?php if (strpos($_SERVER["SCRIPT_FILENAME"], "wizard.php") !== false &&
+ file_exists("{$g['www_path']}/themes/{$g['theme']}/wizard.css")): ?>
+ <?php echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" />"; ?>
+ <?php else: ?>
+ <link type="text/css" rel="stylesheet" href="/themes/<?php echo $g['theme']; ?>/all.css" media="all" />
+ <?php endif; ?>
+ <link rel="stylesheet" type="text/css" href="/niftycssCode.css" />
+ <link rel="stylesheet" type="text/css" href="/niftycssprintCode.css" media="print" />
+ <link rel="stylesheet" type="text/css" href="/themes/<?=$g['theme']?>/new_tab_menu.css" media="all" />
+ <link rel="stylesheet" type="text/css" href="/themes/<?=$g['theme']?>/styles/jquery-ui-1.11.1.css" />
+ <script type="text/javascript" src="/javascript/niftyjsCode.js"></script>
+ <script type="text/javascript" src="/javascript/jquery-1.11.1.min.js"></script>
+ <script type="text/javascript" src="/javascript/jquery-migrate-1.2.1.min.js"></script>
+ <script type="text/javascript" src="/javascript/jquery/jquery-ui-1.11.1.min.js"></script>
+ <script type="text/javascript">
+ //<![CDATA[
+ var theme = "<?php echo $g['theme']; ?>";
+
+ jQuery.noConflict();
+ //]]>
+ </script>
+
+ <script type="text/javascript" src="/javascript/sorttable.js"></script>
+ <script type="text/javascript" src="/javascript/ticker.js"></script>
+ <style type="text/css" id="antiClickjack">
+ /*<![CDATA[*/
+ body{display:none}
+ /*]]>*/
+ </style>
+ <script type="text/javascript">
+ //<![CDATA[
+ if (self === top) {
+ var antiClickjack = document.getElementById("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack);
+ } else {
+ top.location = self.location;
+ }
+ //]]>
+ </script>
+
+<?php
+echo "\t<script type=\"text/javascript\" src=\"/themes/{$g['theme']}/loader.js\"></script>\n";
+if ($_GET['enablefirebuglite']) {
+ echo "\t<script type=\"text/javascript\" src=\"/javascript/pi.js\"></script>\n";
+ echo "\t<script type=\"text/javascript\" src=\"/javascript/firebug-lite.js\"></script>\n";
+}
+echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/prototype.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/scriptaculous.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/effects.js\"></script>\n";
+echo "\t<script type=\"text/javascript\" src=\"/javascript/scriptaculous/dragdrop.js\"></script>\n";
+if (file_exists("{$g['www_path']}/javascript/global.js")) {
+ echo "\t<script type=\"text/javascript\" src=\"/javascript/global.js\"></script>\n";
+}
+/*
+ * Find all javascript files that need to be included
+ * for this page ... from the arrays ... :)
+ * Coded by: Erik Kristensen
+ */
+
+$dir = trim(basename($_SERVER["SCRIPT_FILENAME"], '.php'));
+$path = "{$g['www_path']}/javascript/" . $dir . "/";
+if (is_dir($path)) {
+ if ($dh = opendir($path)) {
+ while (($file = readdir($dh)) !== false) {
+ if (is_dir($file)) {
+ continue;
+ }
+ echo "\t<script type=\"text/javascript\" src=\"/javascript/{$dir}/{$file}?rev=1\"></script>\n";
+ }
+ closedir($dh);
+ }
+}
+
+if (!isset($closehead)) {
+ echo "</head>";
+}
+
+/* If this page is being remotely managed then do not allow the loading of the contents. */
+if ($config['remote_managed_pages']['item']) {
+ foreach ($config['remote_managed_pages']['item'] as $rmp) {
+ if ($rmp == $_SERVER['SCRIPT_NAME']) {
+ include("fbegin.inc");
+ print_info_box_np("This page is currently being managed by a remote machine.");
+ include("fend.inc");
+ exit;
+ }
+ }
+}
+
+?>
diff --git a/src/usr/local/www/headjs.php b/src/usr/local/www/headjs.php
new file mode 100644
index 0000000..5e4148f
--- /dev/null
+++ b/src/usr/local/www/headjs.php
@@ -0,0 +1,186 @@
+<?php
+/*
+ headjs.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: header
+*/
+
+##|+PRIV
+##|*IDENT=page-requiredforjavascript
+##|*NAME=Required for javascript page
+##|*DESCR=Allow access to the 'Required for javascript' page.
+##|*MATCH=headjs.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+function getHeadJS() {
+ global $g, $use_loader_tab_gif;
+
+ if (!$use_loader_tab_gif) {
+ $loader_gif = "/themes/{$g['theme']}/images/misc/loader.gif";
+ } else {
+ $loader_gif = "/themes/{$g['theme']}/images/misc/loader_tab.gif";
+ }
+
+ $headjs = "
+ var input_errors = '';
+ jQuery(document).ready(init);
+ ";
+ if (!session_id()) {
+ session_start();
+ }
+ $_SESSION['NO_AJAX'] == "True" ? $noajax = "var noAjaxOnSubmit = true;" : $noajax = "var noAjaxOnSubmit = false;";
+ session_commit();
+
+ $headjs .= "
+ {$noajax}
+
+ function init() {
+ if (jQuery('#submit') && ! noAjaxOnSubmit) {
+ // debugging helper
+ //alert('adding observe event for submit button');
+
+ jQuery(\"#submit\").click(submit_form);
+ jQuery('#submit').click(function() {return false;});
+ var to_insert = \"<div style='visibility:hidden' id='loading' name='loading'><img src='{$loader_gif}' alt='loader' \/><\/div>\";
+ jQuery('#submit').before(to_insert);
+ }
+ }
+
+ function submit_form(e) {
+ // debugging helper
+ //alert(Form.serialize($('iform')));
+
+ if (jQuery('#inputerrors')) {
+ jQuery('#inputerrors').html('<center><b><i>Loading...<\/i><\/b><\/center>');
+ }
+
+ /* dsh: Introduced because pkg_edit tries to set some hidden fields
+ * if executing submit's onclick event. The click gets deleted
+ * by Ajax. Hence using onkeydown instead.
+ */
+ if (jQuery('#submit').prop('keydown')) {
+ jQuery('#submit').keydown();
+ jQuery('#submit').css('visibility','hidden');
+ }
+ if (jQuery('#cancelbutton')) {
+ jQuery('#cancelbutton').css('visibility','hidden');
+ }
+ jQuery('#loading').css('visibility','visible');
+ // submit the form using Ajax
+ }
+
+ function formSubmitted(resp) {
+ var responseText = resp.responseText;
+
+ // debugging helper
+ // alert(responseText);
+
+ if (responseText.indexOf('html') > 0) {
+ /* somehow we have been fed an html page! */
+ //alert('Somehow we have been fed an html page! Forwarding to /.');
+ document.location.href = '/';
+ }
+
+ eval(responseText);
+ }
+
+ /* this function will be called if an HTTP error will be triggered */
+ function formFailure(resp) {
+ showajaxmessage(resp.responseText);
+ if (jQuery('#submit')) {
+ jQuery('#submit').css('visibility','visible');
+ }
+ if (jQuery('#cancelbutton')) {
+ jQuery('#cancelbutton').css('visibility','visible');
+ }
+ if (jQuery('#loading')) {
+ jQuery('#loading').css('visibility','hidden');
+ }
+ }
+
+ function showajaxmessage(message) {
+ var message_html;
+
+ if (message == '') {
+ NiftyCheck();
+ Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\");
+ Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\");
+
+ if (jQuery('#submit')) {
+ jQuery('#submit').css('visibility','visible');
+ }
+ if (jQuery('#cancelbutton')) {
+ jQuery('#cancelbutton').css('visibility','visible');
+ }
+ if (jQuery('#loading')) {
+ jQuery('#loading').css('visibility','hidden');
+ }
+
+ return;
+ }
+
+ message_html = '<table height=\"32\" width=\"100%\" summary=\"redbox\"><tr><td>';
+ message_html += '<div style=\"background-color:#990000\" id=\"redbox\">';
+ message_html += '<table width=\"100%\" summary=\"message\"><tr><td width=\"8%\">';
+ message_html += '<img style=\"vertical-align:center\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\" width=\"28\" height=\"32\" alt=\"exclamation\" \/>';
+ message_html += '<\/td><td width=\"70%\"><font color=\"white\">';
+ message_html += '<b>' + message + '<\/b><\/font><\/td>';
+
+ if (message.indexOf('apply') > 0) {
+ message_html += '<td>';
+ message_html += '<input name=\"apply\" type=\"submit\" class=\"formbtn\" id=\"apply\" value=\"" . gettext("Apply changes") . "\" \/>';
+ message_html += '<\/td>';
+ }
+
+ message_html += '<\/tr><\/table><\/div><\/td><\/table><br \/>';
+ jQuery('#inputerrors').html(message_html);
+
+ NiftyCheck();
+ Rounded(\"div#redbox\",\"all\",\"#FFF\",\"#990000\",\"smooth\");
+ Rounded(\"td#blackbox\",\"all\",\"#FFF\",\"#000000\",\"smooth\");
+
+ if (jQuery('#submit')) {
+ jQuery('#submit').css('visibility','visible');
+ }
+ if (jQuery('#cancelbutton')) {
+ jQuery('#cancelbutton').css('visibility','visible');
+ }
+ if (jQuery('#loading')) {
+ jQuery('#loading').css('visibility','hidden');
+ }
+ if (jQuery('#inputerrors')) {
+ window.scrollTo(0, 0);
+ }
+ }
+ ";
+
+ return $headjs;
+}
+
+?>
diff --git a/src/usr/local/www/help.php b/src/usr/local/www/help.php
new file mode 100644
index 0000000..8cee1ab
--- /dev/null
+++ b/src/usr/local/www/help.php
@@ -0,0 +1,377 @@
+<?php
+/* Redirector for Contextual Help System
+ * Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ * (c) 2009 Jim Pingle <jimp@pfsense.org>
+ *
+ */
+
+require_once("guiconfig.inc");
+
+/* Define hash of jumpto url maps */
+
+/* Links to categories could probably be more specific. */
+$helppages = array(
+ /* These pages are confirmed to work and have usable content */
+ 'index.php' => 'https://doc.pfsense.org/index.php/Dashboard',
+ 'license.php' => 'https://www.pfsense.org/about-pfsense/#legal',
+ 'miniupnpd.xml' => 'https://doc.pfsense.org/index.php/What_are_UPnP_and_NAT-PMP',
+ 'status_upnp.php' => 'https://doc.pfsense.org/index.php/What_are_UPnP_and_NAT-PMP',
+ 'firewall_virtual_ip.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses',
+ 'firewall_virtual_ip_edit.php' => 'https://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses',
+ 'firewall_aliases.php' => 'https://doc.pfsense.org/index.php/Aliases',
+ 'firewall_aliases_edit.php' => 'https://doc.pfsense.org/index.php/Aliases',
+ 'firewall_aliases_import.php' => 'https://doc.pfsense.org/index.php/Aliases',
+ 'firewall_nat_out.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT',
+ 'firewall_nat_out_edit.php' => 'https://doc.pfsense.org/index.php/Outbound_NAT',
+ 'firewall_rules.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics',
+ 'firewall_rules_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Basics',
+ 'firewall_schedule.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules',
+ 'firewall_schedule_edit.php' => 'https://doc.pfsense.org/index.php/Firewall_Rule_Schedules',
+ 'interfaces_vlan.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking',
+ 'interfaces_vlan_edit.php' => 'https://doc.pfsense.org/index.php/VLAN_Trunking',
+ 'diag_routes.php' => 'https://doc.pfsense.org/index.php/Viewing_Routes',
+ 'diag_packet_capture.php' => 'https://doc.pfsense.org/index.php/Sniffers,_Packet_Capture',
+ 'diag_system_pftop.php' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage#pftop',
+ 'status_rrd_graph.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
+ 'status_rrd_graph_img.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
+ 'status_rrd_graph_settings.php' => 'https://doc.pfsense.org/index.php/RRD_Graphs',
+ 'firewall_nat.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense',
+ 'firewall_nat_edit.php' => 'https://doc.pfsense.org/index.php/How_can_I_forward_ports_with_pfSense',
+ 'diag_arp.php' => 'https://doc.pfsense.org/index.php/ARP_Table',
+ 'diag_backup.php' => 'https://doc.pfsense.org/index.php/Configuration_Backup_and_Restore',
+ 'diag_confbak.php' => 'https://doc.pfsense.org/index.php/Configuration_History',
+ 'diag_defaults.php' => 'https://doc.pfsense.org/index.php/Factory_Defaults',
+ 'firewall_shaper.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
+ 'firewall_shaper_layer7.php' => 'https://doc.pfsense.org/index.php/Layer_7',
+ 'firewall_shaper_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
+ 'firewall_shaper_vinterface.php' => 'https://doc.pfsense.org/index.php/Limiters',
+ 'firewall_shaper_wizards.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
+ 'status_queues.php' => 'https://doc.pfsense.org/index.php/Traffic_Shaping_Guide',
+ 'status_dhcp_leases.php' => 'https://doc.pfsense.org/index.php/DHCP_Leases',
+ 'diag_dns.php' => 'https://doc.pfsense.org/index.php/DNS_Lookup',
+ 'diag_dump_states.php' => 'https://doc.pfsense.org/index.php/Show_States',
+ 'diag_resetstate.php' => 'https://doc.pfsense.org/index.php/Reset_States',
+ 'diag_logs.php' => 'https://doc.pfsense.org/index.php/System_Logs',
+ 'diag_logs_auth.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Authentication_Logs',
+ 'diag_logs_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Logs',
+ 'diag_logs_filter.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
+ 'diag_logs_filter_dynamic.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
+ 'diag_logs_filter_summary.php' => 'https://doc.pfsense.org/index.php/Firewall_Logs',
+ 'diag_logs_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Logs',
+ 'diag_logs_ppp.php' => 'https://doc.pfsense.org/index.php/PPP_Logs',
+ 'diag_logs_relayd.php' => 'https://doc.pfsense.org/index.php/Load_Balancer_Logs',
+ 'diag_logs_settings.php' => 'https://doc.pfsense.org/index.php/Log_Settings',
+ 'diag_logs_vpn.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Logs',
+ 'diag_logs_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Logs',
+ 'diag_logs_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Logs',
+ 'diag_nanobsd.php' => 'https://doc.pfsense.org/index.php/NanoBSD_Diagnostics',
+ 'diag_patterns.php' => 'https://doc.pfsense.org/index.php/Layer7_Pattern_Diagnostics',
+ 'diag_ping.php' => 'https://doc.pfsense.org/index.php/Ping_Host',
+ 'diag_pkglogs.php' => 'https://doc.pfsense.org/index.php/Package_Logs',
+ 'diag_tables.php' => 'https://doc.pfsense.org/index.php/Tables',
+ 'diag_system_activity.php' => 'https://doc.pfsense.org/index.php/System_Activity',
+ 'diag_traceroute.php' => 'https://doc.pfsense.org/index.php/Traceroute',
+ 'easyrule.php' => 'https://doc.pfsense.org/index.php/Easy_Rule',
+ 'edit.php' => 'https://doc.pfsense.org/index.php/Edit_File',
+ 'exec.php' => 'https://doc.pfsense.org/index.php/Execute_Command',
+ 'firewall_nat_1to1.php' => 'https://doc.pfsense.org/index.php/1:1_NAT',
+ 'firewall_nat_1to1_edit.php' => 'https://doc.pfsense.org/index.php/1:1_NAT',
+ 'halt.php' => 'https://doc.pfsense.org/index.php/Halt_System',
+ 'reboot.php' => 'https://doc.pfsense.org/index.php/Reboot_System',
+ 'status_filter_reload.php' => 'https://doc.pfsense.org/index.php/Filter_Reload_Status',
+ 'status_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Status',
+ 'status_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Status',
+ 'status_graph.php' => 'https://doc.pfsense.org/index.php/Traffic_Graph',
+ 'status_graph_cpu.php' => 'https://doc.pfsense.org/index.php/CPU_Load',
+ 'status_interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Status',
+ 'status_services.php' => 'https://doc.pfsense.org/index.php/Services_Status',
+ 'status_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Status',
+ 'pkg_mgr.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
+ 'pkg_mgr_install.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
+ 'pkg_mgr_installed.php' => 'https://doc.pfsense.org/index.php/Package_Manager',
+ 'pkg_mgr_settings.php' => 'https://doc.pfsense.org/index.php/Package_Manager_Settings',
+ 'interfaces.php' => 'https://doc.pfsense.org/index.php/Interface_Settings',
+ 'interfaces_assign.php' => 'https://doc.pfsense.org/index.php/Assign_Interfaces',
+ 'interfaces_bridge.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges',
+ 'interfaces_bridge_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Bridges',
+ 'interfaces_gif.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces',
+ 'interfaces_gif_edit.php' => 'https://doc.pfsense.org/index.php/GIF_Interfaces',
+ 'interfaces_gre.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces',
+ 'interfaces_gre_edit.php' => 'https://doc.pfsense.org/index.php/GRE_Interfaces',
+ 'interfaces_groups.php' => 'https://doc.pfsense.org/index.php/Interface_Groups',
+ 'interfaces_groups_edit.php' => 'https://doc.pfsense.org/index.php/Interface_Groups',
+ 'interfaces_lagg.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces',
+ 'interfaces_lagg_edit.php' => 'https://doc.pfsense.org/index.php/LAGG_Interfaces',
+ 'interfaces_ppps.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces',
+ 'interfaces_ppps_edit.php' => 'https://doc.pfsense.org/index.php/PPP_Interfaces',
+ 'interfaces_qinq.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces',
+ 'interfaces_qinq_edit.php' => 'https://doc.pfsense.org/index.php/QinQ_Interfaces',
+ 'services_dyndns.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
+ 'services_dyndns_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
+ 'services_rfc2136.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
+ 'services_rfc2136_edit.php' => 'https://doc.pfsense.org/index.php/Dynamic_DNS',
+ 'services_dhcp.php' => 'https://doc.pfsense.org/index.php/DHCP_Server',
+ 'services_dhcp_edit.php' => 'https://doc.pfsense.org/index.php/DHCP_Server',
+ 'services_dhcp_relay.php' => 'https://doc.pfsense.org/index.php/DHCP_Relay',
+ 'services_dnsmasq.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
+ 'services_dnsmasq_domainoverride_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
+ 'services_dnsmasq_edit.php' => 'https://doc.pfsense.org/index.php/DNS_Forwarder',
+ 'services_igmpproxy.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy',
+ 'services_igmpproxy_edit.php' => 'https://doc.pfsense.org/index.php/IGMP_Proxy',
+ 'services_snmp.php' => 'https://doc.pfsense.org/index.php/SNMP_Daemon',
+ 'services_wol.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN',
+ 'services_wol_edit.php' => 'https://doc.pfsense.org/index.php/Wake_on_LAN',
+ 'system.php' => 'https://doc.pfsense.org/index.php/General_Setup',
+ 'system_advanced_admin.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup',
+ 'system_advanced_firewall.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Firewall.2FNAT',
+ 'system_advanced_misc.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Miscellaneous',
+ 'system_advanced_network.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Firewall.2FNAT',
+ 'system_advanced_notifications.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#Notifications',
+ 'system_advanced_sysctl.php' => 'https://doc.pfsense.org/index.php/Advanced_Setup#System_Tunables',
+ 'system_firmware.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
+ 'system_firmware_auto.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
+ 'system_firmware_check.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
+ 'system_firmware_settings.php' => 'https://doc.pfsense.org/index.php/Firmware_Updates',
+ 'system_gateway_groups.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
+ 'system_gateway_groups_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
+ 'system_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
+ 'system_gateways_edit.php' => 'https://doc.pfsense.org/index.php/Gateway_Settings',
+ 'system_routes.php' => 'https://doc.pfsense.org/index.php/Static_Routes',
+ 'system_routes_edit.php' => 'https://doc.pfsense.org/index.php/Static_Routes',
+ 'system_authservers.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers',
+ 'system_groupmanager.php' => 'https://doc.pfsense.org/index.php/Group_Manager',
+ 'system_groupmanager_addprivs.php' => 'https://doc.pfsense.org/index.php/Group_Manager',
+ 'system_usermanager.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_usermanager_addprivs.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_usermanager_settings.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_usermanager_settings_ldapacpicker.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_usermanager_settings_test.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_usermanager_passwordmg.php' => 'https://doc.pfsense.org/index.php/User_Manager',
+ 'system_camanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
+ 'system_certmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
+ 'vpn_l2tp.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
+ 'vpn_l2tp_users.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
+ 'vpn_l2tp_users_edit.php' => 'https://doc.pfsense.org/index.php/L2TP_VPN_Settings',
+ 'vpn_pppoe.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings',
+ 'vpn_pppoe_edit.php' => 'https://doc.pfsense.org/index.php/PPPoE_Server_Settings',
+ 'vpn_pptp.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
+ 'vpn_pptp_users.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
+ 'vpn_pptp_users_edit.php' => 'https://doc.pfsense.org/index.php/PPTP_VPN_Settings',
+ 'diag_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
+ 'diag_ipsec_sad.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
+ 'diag_ipsec_spd.php' => 'https://doc.pfsense.org/index.php/IPsec_Status',
+ 'vpn_ipsec.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
+ 'vpn_ipsec_mobile.php' => 'https://doc.pfsense.org/index.php/IPsec_Mobile_Clients',
+ 'diag_ipsec_leases.php' => 'https://doc.pfsense.org/index.php/IPsec_Mobile_Clients',
+ 'vpn_ipsec_phase1.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
+ 'vpn_ipsec_phase2.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
+ 'vpn_ipsec_keys.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
+ 'vpn_ipsec_keys_edit.php' => 'https://doc.pfsense.org/index.php/IPsec_Tunnels',
+ 'vpn_ipsec_settings.php' => 'https://doc.pfsense.org/index.php/Advanced_IPsec_Settings',
+ 'services_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_filemanager.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_ip.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_ip_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_mac.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_mac_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_hostname.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_hostname_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'status_captiveportal.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status',
+ 'status_captiveportal_test.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Status',
+ 'services_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
+ 'services_captiveportal_vouchers_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
+ 'status_captiveportal_voucher_rolls.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
+ 'status_captiveportal_vouchers.php' => 'https://doc.pfsense.org/index.php/Captive_Portal_Vouchers',
+ 'status_openvpn.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Status',
+ 'vpn_openvpn_client.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
+ 'vpn_openvpn_csc.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
+ 'vpn_openvpn_server.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Settings',
+ 'openvpn-client-export.xml' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */
+ 'vpn_openvpn_export.php' => 'https://doc.pfsense.org/index.php/OpenVPN_Client_Exporter', /* Package */
+ 'diag_authentication.php' => 'https://doc.pfsense.org/index.php/User_Authentication_Servers',
+ 'diag_limiter_info.php' => 'https://doc.pfsense.org/index.php/Limiters',
+ 'diag_pf_info.php' => 'https://doc.pfsense.org/index.php/Packet_Filter_Information',
+ 'diag_smart.php' => 'https://doc.pfsense.org/index.php/SMART_Status',
+ 'diag_states_summary.php' => 'https://doc.pfsense.org/index.php/States_Summary',
+ 'interfaces_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces',
+ 'interfaces_wireless_edit.php' => 'https://doc.pfsense.org/index.php/Wireless_Interfaces',
+ 'system_crlmanager.php' => 'https://doc.pfsense.org/index.php/Certificate_Management',
+ 'crash_reporter.php' => 'https://doc.pfsense.org/index.php/Unexpected_Reboot_Troubleshooting',
+ 'diag_dump_states_sources.php' => 'https://doc.pfsense.org/index.php/Show_Source_Tracking',
+ 'diag_logs_gateways.php' => 'https://doc.pfsense.org/index.php/Gateway_Logs',
+ 'diag_logs_resolver.php' => 'https://doc.pfsense.org/index.php/Resolver_Logs',
+ 'diag_logs_routing.php' => 'https://doc.pfsense.org/index.php/Routing_Logs',
+ 'diag_logs_wireless.php' => 'https://doc.pfsense.org/index.php/Wireless_Logs',
+ 'diag_ndp.php' => 'https://doc.pfsense.org/index.php/NDP_Table',
+ 'diag_sockets.php' => 'https://doc.pfsense.org/index.php/Diag_Sockets',
+ 'diag_testport.php' => 'https://doc.pfsense.org/index.php/Test_Port',
+ 'firewall_nat_npt.php' => 'https://doc.pfsense.org/index.php/NPt',
+ 'firewall_nat_npt_edit.php' => 'https://doc.pfsense.org/index.php/NPt',
+ 'services_captiveportal_zones.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_captiveportal_zones_edit.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'status_captiveportal_expire.php' => 'https://doc.pfsense.org/index.php/Captive_Portal',
+ 'services_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
+ 'status_ntpd.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
+ 'services_ntpd_gps.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
+ 'services_ntpd_pps.php' => 'https://doc.pfsense.org/index.php/NTP_Server',
+ 'system_firmware_restorefullbackup.php' => 'https://doc.pfsense.org/index.php/Full_Backup',
+ 'load_balancer_monitor.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing',
+ 'load_balancer_monitor_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing',
+ 'load_balancer_pool.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Load_Balancing_Pool',
+ 'load_balancer_pool_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Load_Balancing_Pool',
+ 'load_balancer_virtual_server.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Virtual_Server',
+ 'load_balancer_virtual_server_edit.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Set_up_Virtual_Server',
+ 'load_balancer_setting.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing#Advanced_Settings',
+ 'status_lb_pool.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing_Status',
+ 'status_lb_vs.php' => 'https://doc.pfsense.org/index.php/Inbound_Load_Balancing_Status',
+ 'services_dhcpv6_relay.php' => 'https://doc.pfsense.org/index.php/DHCP_Relay',
+ 'status_dhcpv6_leases.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Leases',
+ 'services_dhcpv6.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Server',
+ 'services_dhcpv6_edit.php' => 'https://doc.pfsense.org/index.php/DHCPv6_Server',
+ 'services_router_advertisements.php' => 'https://doc.pfsense.org/index.php/Router_Advertisements',
+ 'carp_status.php' => 'https://doc.pfsense.org/index.php/CARP_Status',
+ 'system_hasync.php' => 'https://doc.pfsense.org/index.php/High_Availability',
+ 'services_unbound.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
+ 'services_unbound_advanced.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver#Advanced_Settings_Tab',
+ 'services_unbound_acls.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver#Access_Lists_Tab',
+ 'services_unbound_domainoverride_edit.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
+ 'services_unbound_host_edit.php' => 'https://doc.pfsense.org/index.php/Unbound_DNS_Resolver',
+ 'diag_gmirror.php' => 'https://doc.pfsense.org/index.php/Create_a_Software_RAID1_%28gmirror%29',
+
+ /* From here down are packages. Not checking these as strictly,
+ any information is better than nothing. */
+ 'olsrd.xml' => 'https://doc.pfsense.org/index.php/OLSR_Daemon',
+ 'routed.xml' => 'https://doc.pfsense.org/index.php/Routing_Information_Protocol_(RIP)', # RIP
+ 'autoconfigbackup.xml' => 'https://doc.pfsense.org/index.php/AutoConfigBackup',
+ 'phpservice.xml' => 'https://doc.pfsense.org/index.php/PHPService',
+ 'anyterm.xml' => 'https://doc.pfsense.org/index.php/AnyTerm_package',
+ 'avahi.xml' => 'https://doc.pfsense.org/index.php/Avahi_package',
+ 'squid.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_auth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_cache.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_extauth.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_nac.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_ng.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_traffic.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_upstream.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squid_users.xml' => 'https://doc.pfsense.org/index.php/Category:Squid',
+ 'squidGuard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_acl.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_default.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_dest.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_log.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_rewr.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'squidguard_time.xml' => 'https://doc.pfsense.org/index.php/SquidGuard_package',
+ 'bandwidthd.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'pfflowd.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'darkstat.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'rate.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'ntop.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'ntopng.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'vnstat.xml' => 'https://doc.pfsense.org/index.php/How_can_I_monitor_bandwidth_usage',
+ 'widentd.xml' => 'https://doc.pfsense.org/index.php/Widentd_package',
+ 'tinydns.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
+ 'tinydns_domains.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
+ 'tinydns_sync.xml' => 'https://doc.pfsense.org/index.php/Tinydns_package',
+ 'blinkled.xml' => 'https://doc.pfsense.org/index.php/BlinkLED_Package',
+ 'havp.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'havp_avset.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'havp_blacklist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'havp_fscan.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'havp_trans_exclude.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'havp_whitelist.xml' => 'https://doc.pfsense.org/index.php/HAVP_Package_for_HTTP_Anti-Virus_Scanning',
+ 'snort.xml' => 'https://doc.pfsense.org/index.php/Setup_Snort_Package',
+ 'snort/snort_interfaces.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces',
+ 'snort/snort_interfaces_global.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces_global',
+ 'snort/snort_download_updates.php' => 'https://doc.pfsense.org/index.php/Snort_updates',
+ 'snort/snort_alerts.php' => 'https://doc.pfsense.org/index.php/Snort_alerts',
+ 'snort/snort_blocked.php' => 'https://doc.pfsense.org/index.php/Snort_blocked_hosts',
+ 'snort/snort_passlist.php' => 'https://doc.pfsense.org/index.php/Snort_passlist',
+ 'snort/snort_passlist_edit.php' => 'https://doc.pfsense.org/index.php/Snort_passlist',
+ 'snort/snort_interfaces_suppress.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list',
+ 'snort/snort_interfaces_suppress_edit.php' => 'https://doc.pfsense.org/index.php/Snort_suppress_list',
+ 'snort/snort_interfaces_edit.php' => 'https://doc.pfsense.org/index.php/Snort_interfaces_edit',
+ 'snort/snort_rulesets.php' => 'https://doc.pfsense.org/index.php/Snort_rulesets',
+ 'snort/snort_rules.php' => 'https://doc.pfsense.org/index.php/Snort_rules',
+ 'snort/snort_define_servers.php' => 'https://doc.pfsense.org/index.php/Snort_define_servers',
+ 'snort/snort_preprocessors.php' => 'https://doc.pfsense.org/index.php/Snort_preprocessors',
+ 'snort/snort_barnyard.php' => 'https://doc.pfsense.org/index.php/Snort_barnyard2',
+ 'snort/snort_ip_reputation.php' => 'https://doc.pfsense.org/index.php/Snort_ip_reputation_preprocessor',
+ 'snort/snort_ip_list_mgmt.php' => 'https://doc.pfsense.org/index.php/Snort_ip_list_mgmt',
+ 'snort/snort_sync.xml' => 'https://doc.pfsense.org/index.php/Snort_sync',
+ 'stunnel.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package',
+ 'stunnel_certs.xml' => 'https://doc.pfsense.org/index.php/Stunnel_package',
+ 'openbgpd.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
+ 'openbgpd_groups.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
+ 'openbgpd_neighbors.xml' => 'https://doc.pfsense.org/index.php/OpenBGPD_package',
+ 'iperf.xml' => 'https://doc.pfsense.org/index.php/Iperf_package',
+ 'iperfserver.xml' => 'https://doc.pfsense.org/index.php/Iperf_package',
+ 'jail_template.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
+ 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
+ 'jailctl.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
+ 'jailctl_defaults.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
+ 'jailctl_settings.xml' => 'https://doc.pfsense.org/index.php/PfJailctl_package',
+ 'siproxd.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package',
+ 'siproxdusers.xml' => 'https://doc.pfsense.org/index.php/Siproxd_package',
+ 'open-vm-tools.xml' => 'https://doc.pfsense.org/index.php/Open_VM_Tools_package',
+ 'arping.xml' => 'https://doc.pfsense.org/index.php/Arping_package',
+ 'unbound.xml' => 'https://doc.pfsense.org/index.php/Unbound_package',
+ 'nut.xml' => 'https://doc.pfsense.org/index.php/Nut_package',
+
+);
+
+$pagename = "";
+/* Check for parameter "page". */
+if ($_GET && isset($_GET['page'])) {
+ $pagename = $_GET['page'];
+}
+
+/* If "page" is not found, check referring URL */
+if (empty($pagename)) {
+ /* Attempt to parse out filename */
+ $uri_split = "";
+ preg_match("/\/(.*)\?(.*)/", $_SERVER["HTTP_REFERER"], $uri_split);
+
+ /* If there was no match, there were no parameters, just grab the filename
+ Otherwise, use the matched filename from above. */
+ if (empty($uri_split[0])) {
+ $pagename = ltrim(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_PATH), '/');
+ } else {
+ $pagename = $uri_split[1];
+ }
+
+ /* If the page name is still empty, the user must have requested / (index.php) */
+ if (empty($pagename)) {
+ $pagename = "index.php";
+ }
+
+ /* If the filename is pkg_edit.php or wizard.php, reparse looking
+ for the .xml filename */
+ if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == "wizard.php")) {
+ $param_split = explode('&', $uri_split[2]);
+ foreach ($param_split as $param) {
+ if (substr($param, 0, 4) == "xml=") {
+ $xmlfile = explode('=', $param);
+ $pagename = $xmlfile[1];
+ }
+ }
+ }
+}
+
+/* Using the derived page name, attempt to find in the URL mapping hash */
+if (array_key_exists($pagename, $helppages)) {
+ $helppage = $helppages[$pagename];
+}
+
+/* If we haven't determined a proper page, use a generic help page
+ stating that a given page does not have help yet. */
+
+if (empty($helppage)) {
+ $helppage = 'https://doc.pfsense.org/index.php/No_Help_Found';
+}
+
+/* Redirect to help page. */
+header("Location: {$helppage}");
+
+?>
diff --git a/src/usr/local/www/ifstats.php b/src/usr/local/www/ifstats.php
new file mode 100644
index 0000000..68cc6d8
--- /dev/null
+++ b/src/usr/local/www/ifstats.php
@@ -0,0 +1,66 @@
+<?php
+/* $Id$ */
+/*
+ ifstats.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005-2006 Scott Ullrich (sullrich@gmail.com)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/netstat
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-xmlrpcinterfacestats
+##|*NAME=XMLRPC Interface Stats page
+##|*DESCR=Allow access to the 'XMLRPC Interface Stats' page.
+##|*MATCH=ifstats.php*
+##|-PRIV
+
+ require_once('guiconfig.inc');
+ require_once("interfaces.inc");
+
+ $if = $_GET['if'];
+
+ $realif = get_real_interface($if);
+ if (!$realif) {
+ $realif = $if; // Need for IPsec case interface.
+ }
+
+ $ifinfo = pfSense_get_interface_stats($realif);
+
+ $temp = gettimeofday();
+ $timing = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0;
+
+ header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
+ header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
+ header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
+ header("Pragma: no-cache"); // HTTP/1.0
+
+ echo "$timing|" . $ifinfo['inbytes'] . "|" . $ifinfo['outbytes'] . "\n";
+
+?>
diff --git a/src/usr/local/www/includes/functions.inc.php b/src/usr/local/www/includes/functions.inc.php
new file mode 100644
index 0000000..2c48543
--- /dev/null
+++ b/src/usr/local/www/includes/functions.inc.php
@@ -0,0 +1,407 @@
+<?
+/*
+ functions.inc.php
+ pfSense_MODULE: ajax
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+*/
+
+if (Connection_Aborted()) {
+ exit;
+}
+
+require_once("config.inc");
+require_once("pfsense-utils.inc");
+
+function get_stats() {
+ $stats['cpu'] = cpu_usage();
+ $stats['mem'] = mem_usage();
+ $stats['uptime'] = get_uptime();
+ $stats['states'] = get_pfstate();
+ $stats['temp'] = get_temp();
+ $stats['datetime'] = update_date_time();
+ $stats['interfacestatistics'] = get_interfacestats();
+ $stats['interfacestatus'] = get_interfacestatus();
+ $stats['gateways'] = get_gatewaystats();
+ $stats['cpufreq'] = get_cpufreq();
+ $stats['load_average'] = get_load_average();
+ $stats['mbuf'] = get_mbuf();
+ $stats['mbufpercent'] = get_mbuf(true);
+ $stats['statepercent'] = get_pfstate(true);
+ $stats = join("|", $stats);
+ return $stats;
+}
+
+function get_gatewaystats() {
+ global $config;
+ if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
+ $display_type = $config["widgets"]["gateways_widget"]["display_type"];
+ } else {
+ $display_type = "gw_ip";
+ }
+
+ $a_gateways = return_gateways_array();
+ $gateways_status = array();
+ $gateways_status = return_gateways_status(true);
+ $data = "";
+ $isfirst = true;
+ foreach ($a_gateways as $gname => $gw) {
+ if (!$isfirst) {
+ $data .= ",";
+ }
+ $isfirst = false;
+ $data .= $gw['name'] . ",";
+
+ $monitor_address = "";
+ $monitor_address_disp = "";
+ if ($display_type == "monitor_ip" || $display_type == "both_ip") {
+ $monitor_address = $gw['monitor'];
+ if ($monitor_address != "" && $display_type == "both_ip") {
+ $monitor_address_disp = " (" . $monitor_address . ")";
+ } else {
+ $monitor_address_disp = $monitor_address;
+ }
+ }
+
+ if ($gateways_status[$gname]) {
+ if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
+ $if_gw = lookup_gateway_ip_by_name($gname);
+ } else {
+ $if_gw = "";
+ }
+ if ($monitor_address == $if_gw) {
+ $monitor_address_disp = "";
+ }
+
+ $data .= "<b>" . $if_gw . $monitor_address_disp . "</b>,";
+ $gws = $gateways_status[$gname];
+ switch (strtolower($gws['status'])) {
+ case "none":
+ $online = "Online";
+ $bgcolor = "#90EE90"; // lightgreen
+ break;
+ case "down":
+ $online = "Offline";
+ $bgcolor = "#F08080"; // lightcoral
+ break;
+ case "delay":
+ $online = "Latency";
+ $bgcolor = "#F0E68C"; // khaki
+ break;
+ case "loss":
+ $online = "Packetloss";
+ $bgcolor = "#F0E68C"; // khaki
+ break;
+ default:
+ $online = "Pending";
+ break;
+ }
+ } else {
+ if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
+ $if_gw = "~";
+ } else {
+ $if_gw = "";
+ }
+ $data .= $if_gw . $monitor_address_disp . ",";
+ $gws['delay'] = "~";
+ $gws['loss'] = "~";
+ $online = "Unknown";
+ $bgcolor = "#ADD8E6"; // lightblue
+ }
+ $data .= ($online == "Pending") ? "{$online},{$online}," : "{$gws['delay']},{$gws['loss']},";
+ $data .= "{$online}^{$bgcolor}";
+ }
+ return $data;
+}
+
+function get_uptime() {
+ $uptime = get_uptime_sec();
+
+ if (intval($uptime) == 0) {
+ return;
+ }
+
+ $updays = (int)($uptime / 86400);
+ $uptime %= 86400;
+ $uphours = (int)($uptime / 3600);
+ $uptime %= 3600;
+ $upmins = (int)($uptime / 60);
+ $uptime %= 60;
+ $upsecs = (int)($uptime);
+
+ $uptimestr = "";
+ if ($updays > 1) {
+ $uptimestr .= "$updays Days ";
+ } else if ($updays > 0) {
+ $uptimestr .= "1 Day ";
+ }
+
+ if ($uphours > 1) {
+ $hours = "s";
+ }
+
+ if ($upmins > 1) {
+ $minutes = "s";
+ }
+
+ if ($upmins > 1) {
+ $seconds = "s";
+ }
+
+ $uptimestr .= sprintf("%02d Hour$hours %02d Minute$minutes %02d Second$seconds", $uphours, $upmins, $upsecs);
+ return $uptimestr;
+}
+
+/* Calculates non-idle CPU time and returns as a percentage */
+function cpu_usage() {
+ $duration = 1;
+ $diff = array('user', 'nice', 'sys', 'intr', 'idle');
+ $cpuTicks = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time')));
+ sleep($duration);
+ $cpuTicks2 = array_combine($diff, explode(" ", get_single_sysctl('kern.cp_time')));
+
+ $totalStart = array_sum($cpuTicks);
+ $totalEnd = array_sum($cpuTicks2);
+
+ // Something wrapped ?!?!
+ if ($totalEnd <= $totalStart) {
+ return 0;
+ }
+
+ // Calculate total cycles used
+ $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']);
+
+ // Calculate the percentage used
+ $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart)));
+
+ return $cpuUsage;
+}
+
+function get_pfstate($percent=false) {
+ global $config;
+ $matches = "";
+ if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) {
+ $maxstates="{$config['system']['maximumstates']}";
+ } else {
+ $maxstates=pfsense_default_state_size();
+ }
+ $curentries = `/sbin/pfctl -si |grep current`;
+ if (preg_match("/([0-9]+)/", $curentries, $matches)) {
+ $curentries = $matches[1];
+ }
+ if (!is_numeric($curentries)) {
+ $curentries = 0;
+ }
+ if ($percent) {
+ if (intval($maxstates) > 0) {
+ return round(($curentries / $maxstates) * 100, 0);
+ } else {
+ return "NA";
+ }
+ } else {
+ return $curentries . "/" . $maxstates;
+ }
+}
+
+function has_temp() {
+ /* no known temp monitors available at present */
+
+ /* should only reach here if there is no hardware monitor */
+ return false;
+}
+
+function get_hwtype() {
+ return;
+}
+
+function get_mbuf($percent=false) {
+ $mbufs_output=trim(`/usr/bin/netstat -mb | /usr/bin/grep "mbuf clusters in use" | /usr/bin/awk '{ print $1 }'`);
+ list($mbufs_current, $mbufs_cache, $mbufs_total, $mbufs_max) = explode("/", $mbufs_output);
+ if ($percent) {
+ if ($mbufs_max > 0) {
+ return round(($mbufs_total / $mbufs_max) * 100, 0);
+ } else {
+ return "NA";
+ }
+ } else {
+ return "{$mbufs_total}/{$mbufs_max}";
+ }
+}
+
+function get_temp() {
+ $temp_out = get_single_sysctl("dev.cpu.0.temperature");
+ if ($temp_out == "") {
+ $temp_out = get_single_sysctl("hw.acpi.thermal.tz0.temperature");
+ }
+
+ // Remove 'C' from the end
+ return rtrim($temp_out, 'C');
+}
+
+/* Get mounted filesystems and usage. Do not display entries for virtual filesystems (e.g. devfs, nullfs, unionfs) */
+function get_mounted_filesystems() {
+ $mout = "";
+ $filesystems = array();
+ exec("/bin/df -Tht ufs,zfs,cd9660 | /usr/bin/awk '{print $1, $2, $3, $6, $7;}'", $mout);
+
+ /* Get rid of the header */
+ array_shift($mout);
+ foreach ($mout as $fs) {
+ $f = array();
+ list($f['device'], $f['type'], $f['total_size'], $f['percent_used'], $f['mountpoint']) = explode(' ', $fs);
+
+ /* We dont' want the trailing % sign. */
+ $f['percent_used'] = trim($f['percent_used'], '%');
+
+ $filesystems[] = $f;
+ }
+ return $filesystems;
+}
+
+function disk_usage($slice = '/') {
+ $dfout = "";
+ exec("/bin/df -h {$slice} | /usr/bin/tail -n 1 | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d '%' -f 1", $dfout);
+ $diskusage = trim($dfout[0]);
+
+ return $diskusage;
+}
+
+function swap_usage() {
+ exec("/usr/sbin/swapinfo", $swap_info);
+ $swap_used = "";
+ foreach ($swap_info as $line) {
+ if (preg_match('/(\d+)%$/', $line, $matches)) {
+ $swap_used = $matches[1];
+ break;
+ }
+ }
+
+ return $swap_used;
+}
+
+function mem_usage() {
+ $totalMem = get_single_sysctl("vm.stats.vm.v_page_count");
+ if ($totalMem > 0) {
+ $inactiveMem = get_single_sysctl("vm.stats.vm.v_inactive_count");
+ $cachedMem = get_single_sysctl("vm.stats.vm.v_cache_count");
+ $freeMem = get_single_sysctl("vm.stats.vm.v_free_count");
+ $usedMem = $totalMem - ($inactiveMem + $cachedMem + $freeMem);
+ $memUsage = round(($usedMem * 100) / $totalMem, 0);
+ } else {
+ $memUsage = "NA";
+ }
+
+ return $memUsage;
+}
+
+function update_date_time() {
+ $datetime = date("D M j G:i:s T Y");
+ return $datetime;
+}
+
+function get_cpufreq() {
+ $cpufreqs = "";
+ $out = "";
+ $cpufreqs = explode(" ", get_single_sysctl('dev.cpu.0.freq_levels'));
+ $maxfreq = explode("/", $cpufreqs[0]);
+ $maxfreq = $maxfreq[0];
+ $curfreq = "";
+ $curfreq = get_single_sysctl('dev.cpu.0.freq');
+ if (($curfreq > 0) && ($curfreq != $maxfreq)) {
+ $out = "Current: {$curfreq} MHz, Max: {$maxfreq} MHz";
+ }
+ return $out;
+}
+
+function get_cpu_count($show_detail = false) {
+ $cpucount = get_single_sysctl('kern.smp.cpus');
+
+ if ($show_detail) {
+ $cpudetail = "";
+ exec("/usr/bin/grep 'SMP.*package.*core' /var/log/dmesg.boot | /usr/bin/cut -f2- -d' '", $cpudetail);
+ $cpucount = $cpudetail[0];
+ }
+ return $cpucount;
+}
+
+function get_load_average() {
+ $load_average = "";
+ exec("/usr/bin/uptime | /usr/bin/sed 's/^.*: //'", $load_average);
+ return $load_average[0];
+}
+
+function get_interfacestats() {
+ global $config;
+ //build interface list for widget use
+ $ifdescrs = get_configured_interface_list();
+
+ $array_in_packets = array();
+ $array_out_packets = array();
+ $array_in_bytes = array();
+ $array_out_bytes = array();
+ $array_in_errors = array();
+ $array_out_errors = array();
+ $array_collisions = array();
+ $array_interrupt = array();
+ $new_data = "";
+
+ //build data arrays
+ foreach ($ifdescrs as $ifdescr => $ifname) {
+ $ifinfo = get_interface_info($ifdescr);
+ $new_data .= "{$ifinfo['inpkts']},";
+ $new_data .= "{$ifinfo['outpkts']},";
+ $new_data .= format_bytes($ifinfo['inbytes']) . ",";
+ $new_data .= format_bytes($ifinfo['outbytes']) . ",";
+ if (isset($ifinfo['inerrs'])) {
+ $new_data .= "{$ifinfo['inerrs']},";
+ $new_data .= "{$ifinfo['outerrs']},";
+ } else {
+ $new_data .= "0,";
+ $new_data .= "0,";
+ }
+ if (isset($ifinfo['collisions'])) {
+ $new_data .= htmlspecialchars($ifinfo['collisions']) . ",";
+ } else {
+ $new_data .= "0,";
+ }
+ }//end for
+
+ return $new_data;
+}
+
+function get_interfacestatus() {
+ $data = "";
+ global $config;
+
+ //build interface list for widget use
+ $ifdescrs = get_configured_interface_with_descr();
+
+ foreach ($ifdescrs as $ifdescr => $ifname) {
+ $ifinfo = get_interface_info($ifdescr);
+ $data .= $ifname . "^";
+ if ($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") {
+ $data .= "up";
+ } else if ($ifinfo['status'] == "no carrier") {
+ $data .= "down";
+ } else if ($ifinfo['status'] == "down") {
+ $data .= "block";
+ }
+ $data .= "^";
+ if ($ifinfo['ipaddr']) {
+ $data .= "<strong>" . htmlspecialchars($ifinfo['ipaddr']) . "</strong>";
+ }
+ $data .= "^";
+ if ($ifinfo['ipaddrv6']) {
+ $data .= "<strong>" . htmlspecialchars($ifinfo['ipaddrv6']) . "</strong>";
+ }
+ $data .= "^";
+ if ($ifinfo['status'] != "down") {
+ $data .= htmlspecialchars($ifinfo['media']);
+ }
+
+ $data .= "~";
+
+ }
+ return $data;
+}
+
+?>
diff --git a/src/usr/local/www/index.php b/src/usr/local/www/index.php
new file mode 100644
index 0000000..ba39623
--- /dev/null
+++ b/src/usr/local/www/index.php
@@ -0,0 +1,799 @@
+<?php
+/* $Id$ */
+/*
+ index.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2012 Scott Ullrich
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-system-login/logout
+##|*NAME=System: Login / Logout page / Dashboard
+##|*DESCR=Allow access to the 'System: Login / Logout' page and Dashboard.
+##|*MATCH=index.php*
+##|-PRIV
+
+// Turn on buffering to speed up rendering
+ini_set('output_buffering', 'true');
+
+// Start buffering with a cache size of 100000
+ob_start(null, "1000");
+
+
+## Load Essential Includes
+require_once('guiconfig.inc');
+require_once('functions.inc');
+require_once('notices.inc');
+require_once("pkg-utils.inc");
+
+if (isset($_REQUEST['closenotice'])) {
+ close_notice($_REQUEST['closenotice']);
+ echo get_menu_messages();
+ exit;
+}
+if ($_REQUEST['act'] == 'alias_info_popup' && !preg_match("/\D/", $_REQUEST['aliasid'])) {
+ alias_info_popup($_REQUEST['aliasid']);
+ exit;
+}
+
+if ($g['disablecrashreporter'] != true) {
+ // Check to see if we have a crash report
+ $x = 0;
+ if (file_exists("/tmp/PHP_errors.log")) {
+ $total = `/usr/bin/grep -vi warning /tmp/PHP_errors.log | /usr/bin/wc -l | /usr/bin/awk '{ print $1 }'`;
+ if ($total > 0) {
+ $x++;
+ }
+ }
+ $crash = glob("/var/crash/*");
+ $skip_files = array(".", "..", "minfree", "");
+ if (is_array($crash)) {
+ foreach ($crash as $c) {
+ if (!in_array(basename($c), $skip_files)) {
+ $x++;
+ }
+ }
+ if ($x > 0) {
+ $savemsg = "{$g['product_name']} has detected a crash report or programming bug. Click <a href='crash_reporter.php'>here</a> for more information.";
+ }
+ }
+}
+
+##build list of widgets
+$directory = "/usr/local/www/widgets/widgets/";
+$dirhandle = opendir($directory);
+$filename = "";
+$widgetnames = array();
+$widgetfiles = array();
+$widgetlist = array();
+
+while (false !== ($filename = readdir($dirhandle))) {
+ $periodpos = strpos($filename, ".");
+ /* Ignore files not ending in .php */
+ if (substr($filename, -4, 4) != ".php") {
+ continue;
+ }
+ $widgetname = substr($filename, 0, $periodpos);
+ $widgetnames[] = $widgetname;
+ if ($widgetname != "system_information") {
+ $widgetfiles[] = $filename;
+ }
+}
+
+##sort widgets alphabetically
+sort($widgetfiles);
+
+##insert the system information widget as first, so as to be displayed first
+array_unshift($widgetfiles, "system_information.widget.php");
+
+##if no config entry found, initialize config entry
+if (!is_array($config['widgets'])) {
+ $config['widgets'] = array();
+}
+
+if ($_POST && $_POST['submit']) {
+ $config['widgets']['sequence'] = $_POST['sequence'];
+
+ foreach ($widgetnames as $widget) {
+ if ($_POST[$widget . '-config']) {
+ $config['widgets'][$widget . '-config'] = $_POST[$widget . '-config'];
+ }
+ }
+
+ write_config(gettext("Widget configuration has been changed."));
+ header("Location: index.php");
+ exit;
+}
+
+## Load Functions Files
+require_once('includes/functions.inc.php');
+
+## Check to see if we have a swap space,
+## if true, display, if false, hide it ...
+if (file_exists("/usr/sbin/swapinfo")) {
+ $swapinfo = `/usr/sbin/swapinfo`;
+ if (stristr($swapinfo, '%') == true) {
+ $showswap=true;
+ }
+}
+
+## User recently restored his config.
+## If packages are installed lets resync
+if (file_exists('/conf/needs_package_sync')) {
+ if ($config['installedpackages'] <> '' && is_array($config['installedpackages']['package'])) {
+ if ($g['platform'] == "pfSense" || $g['platform'] == "nanobsd") {
+ ## If the user has logged into webGUI quickly while the system is booting then do not redirect them to
+ ## the package reinstall page. That is about to be done by the boot script anyway.
+ ## The code in fbegin.inc will put up a notice to the user.
+ if (!platform_booting()) {
+ header('Location: pkg_mgr_install.php?mode=reinstallall');
+ exit;
+ }
+ }
+ } else {
+ conf_mount_rw();
+ @unlink('/conf/needs_package_sync');
+ conf_mount_ro();
+ }
+}
+
+## If it is the first time webConfigurator has been
+## accessed since initial install show this stuff.
+if (file_exists('/conf/trigger_initial_wizard')) {
+ $lang_code = system_get_language_code();
+ $lang_codeset = system_get_language_codeset();
+ echo <<<EOF
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang_code" xml:lang="$lang_code">
+<head>
+ <title>{$g['product_name']}.localdomain - {$g['product_name']} first time setup</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=$lang_codeset" />
+ <link rel="stylesheet" type="text/css" href="/niftycssprintCode.css" media="print" />
+ <script type="text/javascript">var theme = "{$g['theme']}"</script>
+ <script type="text/javascript" src="/themes/{$g['theme']}/loader.js"></script>
+
+EOF;
+
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+
+ if (file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) {
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
+ } else {
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
+ }
+
+ echo "<form>\n";
+ echo "<center>\n";
+ echo "<img src=\"/themes/{$g['theme']}/images/logo.gif\" border=\"0\" alt=\"logo\" /><p>\n";
+ echo "<div \" style=\"width:700px;background-color:#ffffff\" id=\"nifty\">\n";
+ echo sprintf(gettext("Welcome to %s!\n"), $g['product_name']) . "<p>";
+ echo gettext("One moment while we start the initial setup wizard.") . "<p>\n";
+ echo gettext("Embedded platform users: Please be patient, the wizard takes a little longer to run than the normal GUI.") . "<p>\n";
+ echo sprintf(gettext("To bypass the wizard, click on the %s logo on the initial page."), $g['product_name']) . "\n";
+ echo "</div>\n";
+ echo "<meta http-equiv=\"refresh\" content=\"1;url=wizard.php?xml=setup_wizard.xml\">\n";
+ echo "<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ echo "NiftyCheck();\n";
+ echo "Rounded(\"div#nifty\",\"all\",\"#AAA\",\"#FFFFFF\",\"smooth\");\n";
+ echo "//]]>\n";
+ echo "</script>\n";
+ exit;
+}
+
+
+## Find out whether there's hardware encryption or not
+unset($hwcrypto);
+$fd = @fopen("{$g['varlog_path']}/dmesg.boot", "r");
+if ($fd) {
+ while (!feof($fd)) {
+ $dmesgl = fgets($fd);
+ if (preg_match("/^hifn.: (.*?),/", $dmesgl, $matches) or
+ preg_match("/.*(VIA Padlock)/", $dmesgl, $matches) or
+ preg_match("/^safe.: (\w.*)/", $dmesgl, $matches) or
+ preg_match("/^ubsec.: (.*?),/", $dmesgl, $matches) or
+ preg_match("/^padlock.: <(.*?)>,/", $dmesgl, $matches) or
+ preg_match("/^glxsb.: (.*?),/", $dmesgl, $matches) or
+ preg_match("/^aesni.: <(.*?)>/", $dmesgl, $matches)) {
+ $hwcrypto = $matches[1];
+ break;
+ }
+ }
+ fclose($fd);
+}
+
+##build widget saved list information
+if ($config['widgets'] && $config['widgets']['sequence'] != "") {
+ $pconfig['sequence'] = $config['widgets']['sequence'];
+
+ $widgetlist = $pconfig['sequence'];
+ $colpos = array();
+ $savedwidgetfiles = array();
+ $widgetname = "";
+ $widgetlist = explode(",", $widgetlist);
+
+ ##read the widget position and display information
+ foreach ($widgetlist as $widget) {
+ $dashpos = strpos($widget, "-");
+ $widgetname = substr($widget, 0, $dashpos);
+ $colposition = strpos($widget, ":");
+ $displayposition = strrpos($widget, ":");
+ $colpos[] = substr($widget, $colposition + 1, $displayposition - $colposition - 1);
+ $displayarray[] = substr($widget, $displayposition + 1);
+ $savedwidgetfiles[] = $widgetname . ".widget.php";
+ }
+
+ ##add widgets that may not be in the saved configuration, in case they are to be displayed later
+ foreach ($widgetfiles as $defaultwidgets) {
+ if (!in_array($defaultwidgets, $savedwidgetfiles)) {
+ $savedwidgetfiles[] = $defaultwidgets;
+ }
+ }
+
+ ##find custom configurations of a particular widget and load its info to $pconfig
+ foreach ($widgetnames as $widget) {
+ if ($config['widgets'][$widget . '-config']) {
+ $pconfig[$widget . '-config'] = $config['widgets'][$widget . '-config'];
+ }
+ }
+
+ $widgetlist = $savedwidgetfiles;
+} else {
+ // no saved widget sequence found, build default list.
+ $widgetlist = $widgetfiles;
+}
+
+##build list of php include files
+$phpincludefiles = array();
+$directory = "/usr/local/www/widgets/include/";
+$dirhandle = opendir($directory);
+$filename = "";
+while (false !== ($filename = readdir($dirhandle))) {
+ $phpincludefiles[] = $filename;
+}
+foreach ($phpincludefiles as $includename) {
+ if (!stristr($includename, ".inc")) {
+ continue;
+ }
+ include($directory . $includename);
+}
+
+##begin AJAX
+$jscriptstr = <<<EOD
+<script type="text/javascript">
+//<![CDATA[
+
+function widgetAjax(widget) {
+ uri = "widgets/widgets/" + widget + ".widget.php";
+ var opt = {
+ // Use GET
+ type: 'get',
+ async: true,
+ // Handle 404
+ statusCode: {
+ 404: function(t) {
+ alert('Error 404: location "' + t.statusText + '" was not found.');
+ }
+ },
+ // Handle other errors
+ error: function(t) {
+ alert('Error ' + t.status + ' -- ' + t.statusText);
+ },
+ success: function(data) {
+ widget2 = '#' + widget + "-loader";
+ jQuery(widget2).fadeOut(1000,function() {
+ jQuery('#' + widget).show();
+ });
+ jQuery('#' + widget).html(data);
+ }
+ }
+ jQuery.ajax(uri, opt);
+}
+
+
+function addWidget(selectedDiv) {
+ selectedDiv2 = '#' + selectedDiv + "-container";
+ if (jQuery(selectedDiv2).css('display') != "none")
+ {
+ jQuery(selectedDiv2).effect('shake',{times: 2}, 100);
+ }
+ else
+ {
+ jQuery(selectedDiv2).show('blind');
+ widgetAjax(selectedDiv);
+ selectIntLink = selectedDiv2 + "-input";
+ jQuery(selectIntLink).val("show");
+ showSave();
+ }
+}
+
+function configureWidget(selectedDiv) {
+ selectIntLink = '#' + selectedDiv + "-settings";
+ if (jQuery(selectIntLink).css('display') == "none") {
+ jQuery(selectIntLink).show();
+ } else {
+ jQuery(selectIntLink).hide();
+ }
+}
+
+function showWidget(selectedDiv, swapButtons) {
+ //appear element
+ jQuery('#' + selectedDiv).show('blind');
+ showSave();
+ d = document;
+ if (swapButtons) {
+ selectIntLink = selectedDiv + "-min";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+
+
+ selectIntLink = selectedDiv + "-open";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "none";
+
+ }
+ selectIntLink = selectedDiv + "-container-input";
+ textlink = d.getElementById(selectIntLink);
+ textlink.value = "show";
+
+}
+
+function minimizeWidget(selectedDiv, swapButtons) {
+ //fade element
+ jQuery('#' + selectedDiv).hide('blind');
+ showSave();
+ d = document;
+ if (swapButtons) {
+ selectIntLink = selectedDiv + "-open";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+
+ selectIntLink = selectedDiv + "-min";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "none";
+ }
+ selectIntLink = selectedDiv + "-container-input";
+ textlink = d.getElementById(selectIntLink);
+ textlink.value = "hide";
+
+}
+
+function closeWidget(selectedDiv) {
+ showSave();
+ selectedDiv2 = "#" + selectedDiv + "-container";
+ jQuery(selectedDiv2).hide('blind');
+ selectIntLink = "#" + selectedDiv + "-container-input";
+ jQuery(selectIntLink).val("close");
+}
+
+function showSave() {
+ d = document;
+ selectIntLink = "submit";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+}
+
+function updatePref() {
+ var widgets = document.getElementsByClassName('widgetdiv');
+ var widgetSequence = "";
+ var firstprint = false;
+ d = document;
+ for (i = 0; i < widgets.length; i++) {
+ if (firstprint) {
+ widgetSequence += ",";
+ }
+ var widget = widgets[i].id;
+ widgetSequence += widget + ":" + widgets[i].parentNode.id + ":";
+ widget = widget + "-input";
+ textlink = d.getElementById(widget).value;
+ widgetSequence += textlink;
+ firstprint = true;
+ }
+ selectLink = "sequence";
+ textlink = d.getElementById(selectLink);
+ textlink.value = widgetSequence;
+ return true;
+}
+
+function hideAllWidgets() {
+ jQuery('#niftyOutter').fadeTo('slow', 0.2);
+}
+
+function showAllWidgets() {
+ jQuery('#niftyOutter').fadeTo('slow', 1.0);
+}
+
+
+function changeTabDIV(selectedDiv) {
+ var dashpos = selectedDiv.indexOf("-");
+ var tabclass = selectedDiv.substring(0, dashpos);
+ d = document;
+
+ //get deactive tabs first
+ tabclass = tabclass + "-class-tabdeactive";
+ var tabs = document.getElementsByClassName(tabclass);
+ var incTabSelected = selectedDiv + "-deactive";
+ for (i = 0; i < tabs.length; i++) {
+ var tab = tabs[i].id;
+ dashpos = tab.lastIndexOf("-");
+ var tab2 = tab.substring(0, dashpos) + "-deactive";
+ if (tab2 == incTabSelected) {
+ tablink = d.getElementById(tab2);
+ tablink.style.display = "none";
+ tab2 = tab.substring(0, dashpos) + "-active";
+ tablink = d.getElementById(tab2);
+ tablink.style.display = "table-cell";
+
+ //now show main div associated with link clicked
+ tabmain = d.getElementById(selectedDiv);
+ tabmain.style.display = "block";
+ }
+ else
+ {
+ tab2 = tab.substring(0, dashpos) + "-deactive";
+ tablink = d.getElementById(tab2);
+ tablink.style.display = "table-cell";
+ tab2 = tab.substring(0, dashpos) + "-active";
+ tablink = d.getElementById(tab2);
+ tablink.style.display = "none";
+
+ //hide sections we don't want to see
+ tab2 = tab.substring(0, dashpos);
+ tabmain = d.getElementById(tab2);
+ tabmain.style.display = "none";
+
+ }
+ }
+}
+//]]>
+</script>
+EOD;
+
+
+## Set Page Title and Include Header
+$pgtitle = array(gettext("Status: Dashboard"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<script type="text/javascript">
+//<![CDATA[
+columns = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8', 'col9', 'col10'];
+//]]>
+</script>
+
+<?php
+include("fbegin.inc");
+echo $jscriptstr;
+if (!file_exists("/usr/local/www/themes/{$g['theme']}/no_big_logo")) {
+ echo "<center><img src=\"./themes/".$g['theme']."/images/logobig.jpg\" alt=\"big logo\" /></center><br />";
+}
+
+/* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
+if (!verify_all_package_servers()) {
+ print_info_box(package_server_mismatch_message());
+}
+
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+
+pfSense_handle_custom_code("/usr/local/pkg/dashboard/pre_dashboard");
+
+?>
+<div id="widgetcontainer" style="display:none">
+ <div id="content1"><h1><?=gettext("Available Widgets"); ?></h1><p><?php
+ $widgetfiles_add = $widgetfiles;
+ sort($widgetfiles_add);
+ foreach ($widgetfiles_add as $widget) {
+ if (!stristr($widget, "widget.php")) {
+ continue;
+ }
+
+ $periodpos = strpos($widget, ".");
+ $widgetname = substr($widget, 0, $periodpos);
+ $nicename = $widgetname;
+ $nicename = str_replace("_", " ", $nicename);
+ //make the title look nice
+ $nicename = ucwords($nicename);
+
+ $widgettitle = $widgetname . "_title";
+ $widgettitlelink = $widgetname . "_title_link";
+ if ($$widgettitle != "") {
+ //echo widget title
+ ?>
+ <span style="cursor: pointer;" onclick='return addWidget("<?php echo $widgetname; ?>")'>
+ <u><?php echo $$widgettitle; ?></u></span><br />
+ <?php
+ } else {
+ ?>
+ <span style="cursor: pointer;" onclick='return addWidget("<?php echo $widgetname; ?>")'>
+ <u><?php echo $nicename; ?></u></span><br /><?php
+ }
+ }
+ ?>
+ </p>
+ </div>
+</div>
+
+<div id="welcomecontainer" style="display:none">
+ <div id="welcome-container">
+ <div style="float:left;width:100%;padding: 2px">
+ <h1><?=gettext("Welcome to the Dashboard page"); ?>!</h1>
+ </div>
+ <div onclick="domTT_close(this);showAllWidgets();" style="width:87%; position: absolute; cursor:pointer; padding: 10px;" >
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_close.gif" alt="close" style="float:right" />
+ </div>
+ <div style="clear:both;">
+ </div>
+ <p>
+ <?=gettext("This page allows you to customize the information you want to be displayed!");?><br />
+ <?=gettext("To get started click the");?> <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="plus" /> <?=gettext("icon to add widgets.");?><br />
+ <br />
+ <?=gettext("You can move any widget around by clicking and dragging the title.");?>
+ </p>
+ </div>
+</div>
+
+<form action="index.php" method="post">
+ <input type="hidden" value="" name="sequence" id="sequence" />
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="<?=gettext("Click here to add widgets"); ?>" style="cursor: pointer;" onmouseup="domTT_activate(this, event, 'content', document.getElementById('content1'), 'type', 'velcro', 'delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" />
+
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_info_pkg.gif" alt="<?=gettext("Click here for help"); ?>" style="cursor: help;" onmouseup="hideAllWidgets();domTT_activate(this, event, 'content', document.getElementById('welcome-container'), 'type', 'sticky', 'closeLink', '', 'delay', 0, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');" />
+
+&nbsp;&nbsp;&nbsp;
+ <input id="submit" name="submit" type="submit" style="display:none" onclick="return updatePref();" class="formbtn" value="<?=gettext("Save Settings");?>" />
+</form>
+<!-- fakeClass contains no CSS but is used as an identifier in theme pfsense_ng_fs - loader.js -->
+<div id="niftyOutter" class="fakeClass">
+ <?php
+ $totalwidgets = count($widgetfiles);
+ $halftotal = $totalwidgets / 2 - 2;
+ $widgetcounter = 0;
+ $directory = "/usr/local/www/widgets/widgets/";
+ $printed = false;
+ $firstprint = false;
+ ?>
+ <div id="col1" style="float:left;width:49%;padding-bottom:40px" class="ui-sortable">
+ <?php
+
+ foreach ($widgetlist as $widget) {
+
+ if (!stristr($widget, "widget.php")) {
+ continue;
+ }
+ $periodpos = strpos($widget, ".");
+ $widgetname = substr($widget, 0, $periodpos);
+ if ($widgetname != "") {
+ $nicename = $widgetname;
+ $nicename = str_replace("_", " ", $nicename);
+
+ //make the title look nice
+ $nicename = ucwords($nicename);
+ }
+
+ if ($config['widgets'] && $pconfig['sequence'] != "") {
+ switch ($displayarray[$widgetcounter]) {
+ case "show":
+ $divdisplay = "block";
+ $display = "block";
+ $inputdisplay = "show";
+ $showWidget = "none";
+ $mindiv = "inline";
+ break;
+ case "hide":
+ $divdisplay = "block";
+ $display = "none";
+ $inputdisplay = "hide";
+ $showWidget = "inline";
+ $mindiv = "none";
+ break;
+ case "close":
+ $divdisplay = "none";
+ $display = "block";
+ $inputdisplay = "close";
+ $showWidget = "none";
+ $mindiv = "inline";
+ break;
+ default:
+ $divdisplay = "none";
+ $display = "block";
+ $inputdisplay = "none";
+ $showWidget = "none";
+ $mindiv = "inline";
+ break;
+ }
+ } else {
+ if ($firstprint == false) {
+ $divdisplay = "block";
+ $display = "block";
+ $inputdisplay = "show";
+ $showWidget = "none";
+ $mindiv = "inline";
+ $firstprint = true;
+ } else {
+ switch ($widget) {
+ case "interfaces.widget.php":
+ case "traffic_graphs.widget.php":
+ $divdisplay = "block";
+ $display = "block";
+ $inputdisplay = "show";
+ $showWidget = "none";
+ $mindiv = "inline";
+ break;
+ default:
+ $divdisplay = "none";
+ $display = "block";
+ $inputdisplay = "close";
+ $showWidget = "none";
+ $mindiv = "inline";
+ break;
+ }
+ }
+ }
+
+ if (substr($g['theme'], -3) != "_fs") {
+ if ($config['widgets'] && $pconfig['sequence'] != "") {
+ if ($colpos[$widgetcounter] == "col2" && $printed == false) {
+ $printed = true;
+ ?>
+ </div>
+ <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
+ <?php
+ }
+ } else if ($widgetcounter >= $halftotal && $printed == false) {
+ $printed = true;
+ ?>
+ </div>
+ <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
+ <?php
+ }
+ } else {
+ if ($config['widgets'] && $pconfig['sequence'] != "") {
+ if ($colpos[$widgetcounter] == "col2" && $printed == false) {
+ $printed = true;
+ ?>
+ </div>
+ <div id="col2" style="float:right;width:49%;padding-bottom:40px" class="ui-sortable">
+ <?php
+ } else { ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ var colpos = "<?=$colpos[$widgetcounter]?>";
+ createColumn(colpos);
+ //]]>
+ </script>
+ <?php }
+ }
+ }
+
+ ?>
+ <div style="clear:both;"></div>
+ <div id="<?php echo $widgetname;?>-container" class="widgetdiv" style="display:<?php echo $divdisplay; ?>;">
+ <input type="hidden" value="<?php echo $inputdisplay;?>" id="<?php echo $widgetname;?>-container-input" name="<?php echo $widgetname;?>-container-input" />
+ <div id="<?php echo $widgetname;?>-topic" class="widgetheader" style="cursor:move">
+ <div style="float:left;">
+ <?php
+
+ $widgettitle = $widgetname . "_title";
+ $widgettitlelink = $widgetname . "_title_link";
+ if ($$widgettitle != "") {
+ //only show link if defined
+ if ($$widgettitlelink != "") {?>
+ <u><span onclick="location.href='/<?php echo $$widgettitlelink;?>'" style="cursor:pointer">
+ <?php }
+ //echo widget title
+ echo $$widgettitle;
+ if ($$widgettitlelink != "") { ?>
+ </span></u>
+ <?php }
+ } else {
+ if ($$widgettitlelink != "") {?>
+ <u><span onclick="location.href='/<?php echo $$widgettitlelink;?>'" style="cursor:pointer">
+ <?php }
+ echo $nicename;
+ if ($$widgettitlelink != "") { ?>
+ </span></u>
+ <?php }
+ }
+ ?>
+ </div>
+ <div align="right" style="float:right;">
+ <div id="<?php echo $widgetname;?>-configure" onclick='return configureWidget("<?php echo $widgetname;?>")' style="display:none; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_configure.gif" alt="configure" /></div>
+ <div id="<?php echo $widgetname;?>-open" onclick='return showWidget("<?php echo $widgetname;?>", true)' style="display:<?php echo $showWidget;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_open.gif" alt="open" /></div>
+ <div id="<?php echo $widgetname;?>-min" onclick='return minimizeWidget("<?php echo $widgetname;?>", true)' style="display:<?php echo $mindiv;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_minus.gif" alt="minimize" /></div>
+ <div id="<?php echo $widgetname;?>-close" onclick='return closeWidget("<?php echo $widgetname;?>", true)' style="display:inline; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_close.gif" alt="close" /></div>
+ </div>
+ <div style="clear:both;"></div>
+ </div>
+ <?php if ($divdisplay != "block") { ?>
+ <div id="<?php echo $widgetname;?>-loader" style="display:<?php echo $display; ?>;" align="center">
+ <br />
+ <img src="./themes/<?= $g['theme']; ?>/images/misc/widget_loader.gif" width="25" height="25" alt="<?=gettext("Loading selected widget"); ?>..." />
+ <br />
+ </div> <?php $display = "none"; } ?>
+ <div id="<?php echo $widgetname;?>" style="display:<?php echo $display; ?>;">
+ <?php
+ if ($divdisplay == "block") {
+ include($directory . $widget);
+ }
+ ?>
+ </div>
+ <div style="clear:both;"></div>
+ </div>
+ <?php
+ $widgetcounter++;
+
+ }//end foreach
+ ?>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(document).ready(function(in_event)
+ {
+ jQuery('.ui-sortable').sortable({connectWith: '.ui-sortable', dropOnEmpty: true, handle: '.widgetheader', change: showSave});
+
+ <?php if (!$config['widgets'] && $pconfig['sequence'] != "") { ?>
+ hideAllWidgets();
+ domTT_activate('welcome1', null, 'x', 287, 'y', 107, 'content', document.getElementById('welcome-container'), 'type', 'sticky', 'closeLink', '', 'delay', 1000, 'fade', 'both', 'fadeMax', 100, 'styleClass', 'niceTitle');
+ <?php } ?>
+ });
+//]]>
+</script>
+<?php
+ //build list of javascript include files
+ $jsincludefiles = array();
+ $directory = "widgets/javascript/";
+ $dirhandle = opendir($directory);
+ $filename = "";
+ while (false !== ($filename = readdir($dirhandle))) {
+ $jsincludefiles[] = $filename;
+ }
+ foreach ($jsincludefiles as $jsincludename) {
+ if (!preg_match('/\.js$/', $jsincludename)) {
+ continue;
+ }
+ echo "<script src='{$directory}{$jsincludename}' type='text/javascript'></script>\n";
+ }
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces.php b/src/usr/local/www/interfaces.php
new file mode 100644
index 0000000..760d386
--- /dev/null
+++ b/src/usr/local/www/interfaces.php
@@ -0,0 +1,3882 @@
+<?php
+/* $Id$ */
+/*
+ interfaces.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2008 Scott Ullrich
+ Copyright (C) 2006 Daniel S. Haischt.
+ Copyright (C) 2008-2010 Ermal Luçi
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/arp
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces
+##|*NAME=Interfaces: WAN page
+##|*DESCR=Allow access to the 'Interfaces' page.
+##|*MATCH=interfaces.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("functions.inc");
+require_once("captiveportal.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("rrd.inc");
+require_once("vpn.inc");
+require_once("xmlparse_attr.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces.php');
+}
+
+// Get configured interface list
+$ifdescrs = get_configured_interface_with_descr(false, true);
+
+$if = "wan";
+if ($_REQUEST['if']) {
+ $if = $_REQUEST['if'];
+}
+
+if (empty($ifdescrs[$if])) {
+ header("Location: interfaces.php");
+ exit;
+}
+
+define("CRON_MONTHLY_PATTERN", "0 0 1 * *");
+define("CRON_WEEKLY_PATTERN", "0 0 * * 0");
+define("CRON_DAILY_PATTERN", "0 0 * * *");
+define("CRON_HOURLY_PATTERN", "0 * * * *");
+
+if (!is_array($pconfig)) {
+ $pconfig = array();
+}
+
+if (!is_array($config['ppps'])) {
+ $config['ppps'] = array();
+}
+if (!is_array($config['ppps']['ppp'])) {
+ $config['ppps']['ppp'] = array();
+}
+$a_ppps = &$config['ppps']['ppp'];
+
+function remove_bad_chars($string) {
+ return preg_replace('/[^a-z_0-9]/i', '', $string);
+}
+
+if (!is_array($config['gateways']['gateway_item'])) {
+ $config['gateways']['gateway_item'] = array();
+}
+$a_gateways = &$config['gateways']['gateway_item'];
+
+$wancfg = &$config['interfaces'][$if];
+$old_wancfg = $wancfg;
+$old_wancfg['realif'] = get_real_interface($if);
+$old_ppps = $a_ppps;
+// Populate page descr if it does not exist.
+if ($if == "wan" && !$wancfg['descr']) {
+ $wancfg['descr'] = "WAN";
+} else if ($if == "lan" && !$wancfg['descr']) {
+ $wancfg['descr'] = "LAN";
+}
+
+/* NOTE: The code here is used to set the $pppid for the curious */
+foreach ($a_ppps as $pppid => $ppp) {
+ if ($wancfg['if'] == $ppp['if']) {
+ break;
+ }
+}
+
+$type_disabled = (substr($wancfg['if'], 0, 3) == 'gre') ? 'disabled="disabled"' : '';
+
+if ($wancfg['if'] == $a_ppps[$pppid]['if']) {
+ $pconfig['pppid'] = $pppid;
+ $pconfig['ptpid'] = $a_ppps[$pppid]['ptpid'];
+ $pconfig['port'] = $a_ppps[$pppid]['ports'];
+ if ($a_ppps[$pppid]['type'] == "ppp") {
+ $pconfig['ppp_username'] = $a_ppps[$pppid]['username'];
+ $pconfig['ppp_password'] = base64_decode($a_ppps[$pppid]['password']);
+
+ $pconfig['phone'] = $a_ppps[$pppid]['phone'];
+ $pconfig['apn'] = $a_ppps[$pppid]['apn'];
+ } else if ($a_ppps[$pppid]['type'] == "pppoe") {
+ $pconfig['pppoe_username'] = $a_ppps[$pppid]['username'];
+ $pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']);
+ $pconfig['provider'] = $a_ppps[$pppid]['provider'];
+ $pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
+ $pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout'];
+
+ /* ================================================ */
+ /* = force a connection reset at a specific time? = */
+ /* ================================================ */
+
+ if (isset($a_ppps[$pppid]['pppoe-reset-type'])) {
+ $pconfig['pppoe-reset-type'] = $a_ppps[$pppid]['pppoe-reset-type'];
+ $itemhash = getMPDCRONSettings($a_ppps[$pppid]['if']);
+ if ($itemhash) {
+ $cronitem = $itemhash['ITEM'];
+ }
+ if (isset($cronitem)) {
+ $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}";
+ } else {
+ $resetTime = NULL;
+ }
+ //log_error("ResetTime:".$resetTime);
+ if ($a_ppps[$pppid]['pppoe-reset-type'] == "custom") {
+ if ($cronitem) {
+ $pconfig['pppoe_pr_custom'] = true;
+ $pconfig['pppoe_resetminute'] = $cronitem['minute'];
+ $pconfig['pppoe_resethour'] = $cronitem['hour'];
+ if ($cronitem['mday'] <> "*" && $cronitem['month'] <> "*") {
+ $pconfig['pppoe_resetdate'] = "{$cronitem['month']}/{$cronitem['mday']}/" . date("Y");
+ }
+ }
+ } else if ($a_ppps[$pppid]['pppoe-reset-type'] == "preset") {
+ $pconfig['pppoe_pr_preset'] = true;
+ switch ($resetTime) {
+ case CRON_MONTHLY_PATTERN:
+ $pconfig['pppoe_monthly'] = true;
+ break;
+ case CRON_WEEKLY_PATTERN:
+ $pconfig['pppoe_weekly'] = true;
+ break;
+ case CRON_DAILY_PATTERN:
+ $pconfig['pppoe_daily'] = true;
+ break;
+ case CRON_HOURLY_PATTERN:
+ $pconfig['pppoe_hourly'] = true;
+ break;
+ }
+ }
+ } // End force pppoe reset at specific time
+ // End if type == pppoe
+ } else if ($a_ppps[$pppid]['type'] == "pptp" || $a_ppps[$pppid]['type'] == "l2tp") {
+ $pconfig['pptp_username'] = $a_ppps[$pppid]['username'];
+ $pconfig['pptp_password'] = base64_decode($a_ppps[$pppid]['password']);
+ $pconfig['pptp_local'] = explode(",", $a_ppps[$pppid]['localip']);
+ $pconfig['pptp_subnet'] = explode(",", $a_ppps[$pppid]['subnet']);
+ $pconfig['pptp_remote'] = explode(",", $a_ppps[$pppid]['gateway']);
+ $pconfig['pptp_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
+ $pconfig['pptp_idletimeout'] = $a_ppps[$pppid]['timeout'];
+ }
+} else {
+ $pconfig['ptpid'] = interfaces_ptpid_next();
+ $pppid = count($a_ppps);
+}
+$pconfig['dhcphostname'] = $wancfg['dhcphostname'];
+$pconfig['alias-address'] = $wancfg['alias-address'];
+$pconfig['alias-subnet'] = $wancfg['alias-subnet'];
+$pconfig['dhcprejectfrom'] = $wancfg['dhcprejectfrom'];
+
+$pconfig['adv_dhcp_pt_timeout'] = $wancfg['adv_dhcp_pt_timeout'];
+$pconfig['adv_dhcp_pt_retry'] = $wancfg['adv_dhcp_pt_retry'];
+$pconfig['adv_dhcp_pt_select_timeout'] = $wancfg['adv_dhcp_pt_select_timeout'];
+$pconfig['adv_dhcp_pt_reboot'] = $wancfg['adv_dhcp_pt_reboot'];
+$pconfig['adv_dhcp_pt_backoff_cutoff'] = $wancfg['adv_dhcp_pt_backoff_cutoff'];
+$pconfig['adv_dhcp_pt_initial_interval'] = $wancfg['adv_dhcp_pt_initial_interval'];
+
+$pconfig['adv_dhcp_pt_values'] = $wancfg['adv_dhcp_pt_values'];
+
+$pconfig['adv_dhcp_send_options'] = $wancfg['adv_dhcp_send_options'];
+$pconfig['adv_dhcp_request_options'] = $wancfg['adv_dhcp_request_options'];
+$pconfig['adv_dhcp_required_options'] = $wancfg['adv_dhcp_required_options'];
+$pconfig['adv_dhcp_option_modifiers'] = $wancfg['adv_dhcp_option_modifiers'];
+
+$pconfig['adv_dhcp_config_advanced'] = $wancfg['adv_dhcp_config_advanced'];
+$pconfig['adv_dhcp_config_file_override'] = $wancfg['adv_dhcp_config_file_override'];
+$pconfig['adv_dhcp_config_file_override_path'] = $wancfg['adv_dhcp_config_file_override_path'];
+
+$pconfig['adv_dhcp6_interface_statement_send_options'] = $wancfg['adv_dhcp6_interface_statement_send_options'];
+$pconfig['adv_dhcp6_interface_statement_request_options'] = $wancfg['adv_dhcp6_interface_statement_request_options'];
+$pconfig['adv_dhcp6_interface_statement_information_only_enable'] = $wancfg['adv_dhcp6_interface_statement_information_only_enable'];
+$pconfig['adv_dhcp6_interface_statement_script'] = $wancfg['adv_dhcp6_interface_statement_script'];
+
+$pconfig['adv_dhcp6_id_assoc_statement_address_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_address_enable'];
+$pconfig['adv_dhcp6_id_assoc_statement_address'] = $wancfg['adv_dhcp6_id_assoc_statement_address'];
+$pconfig['adv_dhcp6_id_assoc_statement_address_id'] = $wancfg['adv_dhcp6_id_assoc_statement_address_id'];
+$pconfig['adv_dhcp6_id_assoc_statement_address_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_pltime'];
+$pconfig['adv_dhcp6_id_assoc_statement_address_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_address_vltime'];
+
+$pconfig['adv_dhcp6_id_assoc_statement_prefix_enable'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'];
+$pconfig['adv_dhcp6_id_assoc_statement_prefix'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix'];
+$pconfig['adv_dhcp6_id_assoc_statement_prefix_id'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_id'];
+$pconfig['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'];
+$pconfig['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'];
+
+$pconfig['adv_dhcp6_prefix_interface_statement_sla_id'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_id'];
+$pconfig['adv_dhcp6_prefix_interface_statement_sla_len'] = $wancfg['adv_dhcp6_prefix_interface_statement_sla_len'];
+
+$pconfig['adv_dhcp6_authentication_statement_authname'] = $wancfg['adv_dhcp6_authentication_statement_authname'];
+$pconfig['adv_dhcp6_authentication_statement_protocol'] = $wancfg['adv_dhcp6_authentication_statement_protocol'];
+$pconfig['adv_dhcp6_authentication_statement_algorithm'] = $wancfg['adv_dhcp6_authentication_statement_algorithm'];
+$pconfig['adv_dhcp6_authentication_statement_rdm'] = $wancfg['adv_dhcp6_authentication_statement_rdm'];
+
+$pconfig['adv_dhcp6_key_info_statement_keyname'] = $wancfg['adv_dhcp6_key_info_statement_keyname'];
+$pconfig['adv_dhcp6_key_info_statement_realm'] = $wancfg['adv_dhcp6_key_info_statement_realm'];
+$pconfig['adv_dhcp6_key_info_statement_keyid'] = $wancfg['adv_dhcp6_key_info_statement_keyid'];
+$pconfig['adv_dhcp6_key_info_statement_secret'] = $wancfg['adv_dhcp6_key_info_statement_secret'];
+$pconfig['adv_dhcp6_key_info_statement_expire'] = $wancfg['adv_dhcp6_key_info_statement_expire'];
+
+$pconfig['adv_dhcp6_config_advanced'] = $wancfg['adv_dhcp6_config_advanced'];
+$pconfig['adv_dhcp6_config_file_override'] = $wancfg['adv_dhcp6_config_file_override'];
+$pconfig['adv_dhcp6_config_file_override_path'] = $wancfg['adv_dhcp6_config_file_override_path'];
+
+$pconfig['dhcp_plus'] = isset($wancfg['dhcp_plus']);
+$pconfig['descr'] = remove_bad_chars($wancfg['descr']);
+$pconfig['enable'] = isset($wancfg['enable']);
+
+if (is_array($config['aliases']['alias'])) {
+ foreach ($config['aliases']['alias'] as $alias) {
+ if ($alias['name'] == $wancfg['descr']) {
+ $input_errors[] = sprintf(gettext("Sorry, an alias with the name %s already exists."), $wancfg['descr']);
+ }
+ }
+}
+
+switch ($wancfg['ipaddr']) {
+ case "dhcp":
+ $pconfig['type'] = "dhcp";
+ break;
+ case "pppoe":
+ case "pptp":
+ case "l2tp":
+ case "ppp":
+ $pconfig['type'] = $wancfg['ipaddr'];
+ break;
+ default:
+ if (is_ipaddrv4($wancfg['ipaddr'])) {
+ $pconfig['type'] = "staticv4";
+ $pconfig['ipaddr'] = $wancfg['ipaddr'];
+ $pconfig['subnet'] = $wancfg['subnet'];
+ $pconfig['gateway'] = $wancfg['gateway'];
+ } else {
+ $pconfig['type'] = "none";
+ }
+ break;
+}
+
+switch ($wancfg['ipaddrv6']) {
+ case "slaac":
+ $pconfig['type6'] = "slaac";
+ break;
+ case "dhcp6":
+ $pconfig['dhcp6-duid'] = $wancfg['dhcp6-duid'];
+ if (!isset($wancfg['dhcp6-ia-pd-len'])) {
+ $wancfg['dhcp6-ia-pd-len'] = "none";
+ }
+ $pconfig['dhcp6-ia-pd-len'] = $wancfg['dhcp6-ia-pd-len'];
+ $pconfig['dhcp6-ia-pd-send-hint'] = isset($wancfg['dhcp6-ia-pd-send-hint']);
+ $pconfig['type6'] = "dhcp6";
+ $pconfig['dhcp6prefixonly'] = isset($wancfg['dhcp6prefixonly']);
+ $pconfig['dhcp6usev4iface'] = isset($wancfg['dhcp6usev4iface']);
+ break;
+ case "6to4":
+ $pconfig['type6'] = "6to4";
+ break;
+ case "track6":
+ $pconfig['type6'] = "track6";
+ $pconfig['track6-interface'] = $wancfg['track6-interface'];
+ if ($wancfg['track6-prefix-id'] == "") {
+ $pconfig['track6-prefix-id'] = 0;
+ } else {
+ $pconfig['track6-prefix-id'] = $wancfg['track6-prefix-id'];
+ }
+ $pconfig['track6-prefix-id--hex'] = sprintf("%x", $pconfig['track6-prefix-id']);
+ break;
+ case "6rd":
+ $pconfig['prefix-6rd'] = $wancfg['prefix-6rd'];
+ if ($wancfg['prefix-6rd-v4plen'] == "") {
+ $wancfg['prefix-6rd-v4plen'] = "0";
+ }
+ $pconfig['prefix-6rd-v4plen'] = $wancfg['prefix-6rd-v4plen'];
+ $pconfig['type6'] = "6rd";
+ $pconfig['gateway-6rd'] = $wancfg['gateway-6rd'];
+ break;
+ default:
+ if (is_ipaddrv6($wancfg['ipaddrv6'])) {
+ $pconfig['type6'] = "staticv6";
+ $pconfig['ipaddrv6'] = $wancfg['ipaddrv6'];
+ $pconfig['subnetv6'] = $wancfg['subnetv6'];
+ $pconfig['gatewayv6'] = $wancfg['gatewayv6'];
+ } else {
+ $pconfig['type6'] = "none";
+ }
+ break;
+}
+
+// print_r($pconfig);
+
+$pconfig['blockpriv'] = isset($wancfg['blockpriv']);
+$pconfig['blockbogons'] = isset($wancfg['blockbogons']);
+$pconfig['spoofmac'] = $wancfg['spoofmac'];
+$pconfig['mtu'] = $wancfg['mtu'];
+$pconfig['mss'] = $wancfg['mss'];
+
+/* Wireless interface? */
+if (isset($wancfg['wireless'])) {
+ /* Sync first to be sure it displays the actual settings that will be used */
+ interface_sync_wireless_clones($wancfg, false);
+ /* Get wireless modes */
+ $wlanif = get_real_interface($if);
+ if (!does_interface_exist($wlanif)) {
+ interface_wireless_clone($wlanif, $wancfg);
+ }
+ $wlanbaseif = interface_get_wireless_base($wancfg['if']);
+ preg_match("/^(.*?)([0-9]*)$/", $wlanbaseif, $wlanbaseif_split);
+ $wl_modes = get_wireless_modes($if);
+ $wl_chaninfo = get_wireless_channel_info($if);
+ $wl_sysctl_prefix = 'dev.' . $wlanbaseif_split[1] . '.' . $wlanbaseif_split[2];
+ $wl_sysctl = get_sysctl(
+ array(
+ "{$wl_sysctl_prefix}.diversity",
+ "{$wl_sysctl_prefix}.txantenna",
+ "{$wl_sysctl_prefix}.rxantenna",
+ "{$wl_sysctl_prefix}.slottime",
+ "{$wl_sysctl_prefix}.acktimeout",
+ "{$wl_sysctl_prefix}.ctstimeout"));
+ $wl_regdomain_xml_attr = array();
+ $wl_regdomain_xml = parse_xml_regdomain($wl_regdomain_xml_attr);
+ $wl_regdomains = &$wl_regdomain_xml['regulatory-domains']['rd'];
+ $wl_regdomains_attr = &$wl_regdomain_xml_attr['regulatory-domains']['rd'];
+ $wl_countries = &$wl_regdomain_xml['country-codes']['country'];
+ $wl_countries_attr = &$wl_regdomain_xml_attr['country-codes']['country'];
+ $pconfig['persistcommonwireless'] = isset($config['wireless']['interfaces'][$wlanbaseif]);
+ $pconfig['standard'] = $wancfg['wireless']['standard'];
+ $pconfig['mode'] = $wancfg['wireless']['mode'];
+ $pconfig['protmode'] = $wancfg['wireless']['protmode'];
+ $pconfig['ssid'] = $wancfg['wireless']['ssid'];
+ $pconfig['channel'] = $wancfg['wireless']['channel'];
+ $pconfig['txpower'] = $wancfg['wireless']['txpower'];
+ $pconfig['diversity'] = $wancfg['wireless']['diversity'];
+ $pconfig['txantenna'] = $wancfg['wireless']['txantenna'];
+ $pconfig['rxantenna'] = $wancfg['wireless']['rxantenna'];
+ $pconfig['distance'] = $wancfg['wireless']['distance'];
+ $pconfig['regdomain'] = $wancfg['wireless']['regdomain'];
+ $pconfig['regcountry'] = $wancfg['wireless']['regcountry'];
+ $pconfig['reglocation'] = $wancfg['wireless']['reglocation'];
+ $pconfig['wme_enable'] = isset($wancfg['wireless']['wme']['enable']);
+ if (isset($wancfg['wireless']['puren']['enable'])) {
+ $pconfig['puremode'] = '11n';
+ } else if (isset($wancfg['wireless']['pureg']['enable'])) {
+ $pconfig['puremode'] = '11g';
+ } else {
+ $pconfig['puremode'] = 'any';
+ }
+ $pconfig['apbridge_enable'] = isset($wancfg['wireless']['apbridge']['enable']);
+ $pconfig['authmode'] = $wancfg['wireless']['authmode'];
+ $pconfig['hidessid_enable'] = isset($wancfg['wireless']['hidessid']['enable']);
+ $pconfig['auth_server_addr'] = $wancfg['wireless']['auth_server_addr'];
+ $pconfig['auth_server_port'] = $wancfg['wireless']['auth_server_port'];
+ $pconfig['auth_server_shared_secret'] = $wancfg['wireless']['auth_server_shared_secret'];
+ $pconfig['auth_server_addr2'] = $wancfg['wireless']['auth_server_addr2'];
+ $pconfig['auth_server_port2'] = $wancfg['wireless']['auth_server_port2'];
+ $pconfig['auth_server_shared_secret2'] = $wancfg['wireless']['auth_server_shared_secret2'];
+ if (is_array($wancfg['wireless']['wpa'])) {
+ $pconfig['debug_mode'] = $wancfg['wireless']['wpa']['debug_mode'];
+ $pconfig['macaddr_acl'] = $wancfg['wireless']['wpa']['macaddr_acl'];
+ $pconfig['mac_acl_enable'] = isset($wancfg['wireless']['wpa']['mac_acl_enable']);
+ $pconfig['auth_algs'] = $wancfg['wireless']['wpa']['auth_algs'];
+ $pconfig['wpa_mode'] = $wancfg['wireless']['wpa']['wpa_mode'];
+ $pconfig['wpa_key_mgmt'] = $wancfg['wireless']['wpa']['wpa_key_mgmt'];
+ $pconfig['wpa_pairwise'] = $wancfg['wireless']['wpa']['wpa_pairwise'];
+ $pconfig['wpa_group_rekey'] = $wancfg['wireless']['wpa']['wpa_group_rekey'];
+ $pconfig['wpa_gmk_rekey'] = $wancfg['wireless']['wpa']['wpa_gmk_rekey'];
+ $pconfig['wpa_strict_rekey'] = isset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
+ $pconfig['passphrase'] = $wancfg['wireless']['wpa']['passphrase'];
+ $pconfig['ieee8021x'] = isset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
+ $pconfig['rsn_preauth'] = isset($wancfg['wireless']['wpa']['rsn_preauth']);
+ $pconfig['ext_wpa_sw'] = $wancfg['wireless']['wpa']['ext_wpa_sw'];
+ $pconfig['wpa_enable'] = isset($wancfg['wireless']['wpa']['enable']);
+ }
+ $pconfig['wep_enable'] = isset($wancfg['wireless']['wep']['enable']);
+ $pconfig['mac_acl'] = $wancfg['wireless']['mac_acl'];
+ if (is_array($wancfg['wireless']['wep']) && is_array($wancfg['wireless']['wep']['key'])) {
+ $i = 1;
+ foreach ($wancfg['wireless']['wep']['key'] as $wepkey) {
+ $pconfig['key' . $i] = $wepkey['value'];
+ if (isset($wepkey['txkey'])) {
+ $pconfig['txkey'] = $i;
+ }
+ $i++;
+ }
+ if (!isset($wepkey['txkey'])) {
+ $pconfig['txkey'] = 1;
+ }
+ }
+}
+
+if ($_POST['apply']) {
+ unset($input_errors);
+ if (!is_subsystem_dirty('interfaces')) {
+ $input_errors[] = gettext("You have already applied your settings!");
+ } else {
+ unlink_if_exists("{$g['tmp_path']}/config.cache");
+ clear_subsystem_dirty('interfaces');
+
+ if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
+ foreach ($toapplylist as $ifapply => $ifcfgo) {
+ if (isset($config['interfaces'][$ifapply]['enable'])) {
+ interface_bring_down($ifapply, false, $ifcfgo);
+ interface_configure($ifapply, true);
+ } else {
+ interface_bring_down($ifapply, true, $ifcfgo);
+ if (isset($config['dhcpd'][$ifapply]['enable']) ||
+ isset($config['dhcpdv6'][$ifapply]['enable'])) {
+ services_dhcpd_configure();
+ }
+ }
+ }
+ }
+ /* restart snmp so that it binds to correct address */
+ services_snmpd_configure();
+
+ /* sync filter configuration */
+ setup_gateways_monitor();
+
+ clear_subsystem_dirty('interfaces');
+
+ filter_configure();
+
+ enable_rrd_graphing();
+
+ if (is_subsystem_dirty('staticroutes') && (system_routing_configure() == 0)) {
+ clear_subsystem_dirty('staticroutes');
+ }
+ }
+ @unlink("{$g['tmp_path']}/.interfaces.apply");
+ header("Location: interfaces.php?if={$if}");
+ exit;
+} else if ($_POST && $_POST['enable'] != "yes") {
+ unset($wancfg['enable']);
+ if (isset($wancfg['wireless'])) {
+ interface_sync_wireless_clones($wancfg, false);
+ }
+ write_config("Interface {$_POST['descr']}({$if}) is now disabled.");
+ mark_subsystem_dirty('interfaces');
+ if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
+ } else {
+ $toapplylist = array();
+ }
+ $toapplylist[$if]['ifcfg'] = $wancfg;
+ $toapplylist[$if]['ppps'] = $a_ppps;
+ /* we need to be able remove IP aliases for IPv6 */
+ file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
+ header("Location: interfaces.php?if={$if}");
+ exit;
+} else if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
+ $pconfig['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16);
+ } else {
+ $pconfig['track6-prefix-id'] = 0;
+ }
+ conf_mount_rw();
+
+ /* filter out spaces from descriptions */
+ $_POST['descr'] = remove_bad_chars($_POST['descr']);
+
+ /* okay first of all, cause we are just hiding the PPPoE HTML
+ * fields related to PPPoE resets, we are going to unset $_POST
+ * vars, if the reset feature should not be used. Otherwise the
+ * data validation procedure below, may trigger a false error
+ * message.
+ */
+ if (empty($_POST['pppoe-reset-type'])) {
+ unset($_POST['pppoe_pr_type']);
+ unset($_POST['pppoe_resethour']);
+ unset($_POST['pppoe_resetminute']);
+ unset($_POST['pppoe_resetdate']);
+ unset($_POST['pppoe_pr_preset_val']);
+ }
+ /* description unique? */
+ foreach ($ifdescrs as $ifent => $ifdescr) {
+ if ($if != $ifent && $ifdescr == $_POST['descr']) {
+ $input_errors[] = gettext("An interface with the specified description already exists.");
+ break;
+ }
+ }
+ if (is_numeric($_POST['descr'])) {
+ $input_errors[] = gettext("The interface description cannot contain only numbers.");
+ }
+ /* input validation */
+ if (isset($config['dhcpd']) && isset($config['dhcpd'][$if]['enable']) && (!preg_match("/^staticv4/", $_POST['type']))) {
+ $input_errors[] = gettext("The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration.");
+ }
+ if (isset($config['dhcpdv6']) && isset($config['dhcpdv6'][$if]['enable']) && (!preg_match("/^staticv6/", $_POST['type6']))) {
+ $input_errors[] = gettext("The DHCP6 Server is active on this interface and it can be used only with a static IPv6 configuration. Please disable the DHCPv6 Server service on this interface first, then change the interface configuration.");
+ }
+
+ switch (strtolower($_POST['type'])) {
+ case "staticv4":
+ $reqdfields = explode(" ", "ipaddr subnet gateway");
+ $reqdfieldsn = array(gettext("IPv4 address"), gettext("Subnet bit count"), gettext("Gateway"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "none":
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if (is_ipaddrv4($vip['subnet']) && $vip['interface'] == $if) {
+ $input_errors[] = gettext("This interface is referenced by IPv4 VIPs. Please delete those before setting the interface to 'none' configuration.");
+ }
+ }
+ }
+ break;
+ case "ppp":
+ $reqdfields = explode(" ", "port phone");
+ $reqdfieldsn = array(gettext("Modem Port"), gettext("Phone Number"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "pppoe":
+ if ($_POST['pppoe_dialondemand']) {
+ $reqdfields = explode(" ", "pppoe_username pppoe_password pppoe_dialondemand pppoe_idletimeout");
+ $reqdfieldsn = array(gettext("PPPoE username"), gettext("PPPoE password"), gettext("Dial on demand"), gettext("Idle timeout value"));
+ } else {
+ $reqdfields = explode(" ", "pppoe_username pppoe_password");
+ $reqdfieldsn = array(gettext("PPPoE username"), gettext("PPPoE password"));
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "pptp":
+ if ($_POST['pptp_dialondemand']) {
+ $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote pptp_dialondemand pptp_idletimeout");
+ $reqdfieldsn = array(gettext("PPTP username"), gettext("PPTP password"), gettext("PPTP local IP address"), gettext("PPTP subnet"), gettext("PPTP remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
+ } else {
+ $reqdfields = explode(" ", "pptp_username pptp_password pptp_local pptp_subnet pptp_remote");
+ $reqdfieldsn = array(gettext("PPTP username"), gettext("PPTP password"), gettext("PPTP local IP address"), gettext("PPTP subnet"), gettext("PPTP remote IP address"));
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "l2tp":
+ if ($_POST['pptp_dialondemand']) {
+ $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote pptp_dialondemand pptp_idletimeout");
+ $reqdfieldsn = array(gettext("L2TP username"), gettext("L2TP password"), gettext("L2TP remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
+ } else {
+ $reqdfields = explode(" ", "pptp_username pptp_password pptp_remote");
+ $reqdfieldsn = array(gettext("L2TP username"), gettext("L2TP password"), gettext("L2TP remote IP address"));
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ }
+ switch (strtolower($_POST['type6'])) {
+ case "staticv6":
+ $reqdfields = explode(" ", "ipaddrv6 subnetv6 gatewayv6");
+ $reqdfieldsn = array(gettext("IPv6 address"), gettext("Subnet bit count"), gettext("Gateway"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "none":
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if (is_ipaddrv6($vip['subnet']) && $vip['interface'] == $if) {
+ $input_errors[] = gettext("This interface is referenced by IPv6 VIPs. Please delete those before setting the interface to 'none' configuration.");
+ }
+ }
+ }
+ break;
+ case "dhcp6":
+ if (in_array($wancfg['ipaddrv6'], array())) {
+ $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
+ }
+ if ($_POST['dhcp6-ia-pd-send-hint'] && strtolower($_POST['dhcp6-ia-pd-len']) == 'none') {
+ $input_errors[] = gettext('DHCPv6 Prefix Delegation size must be provided when Send IPv6 prefix hint flag is checked');
+ }
+ break;
+ case "6rd":
+ foreach ($ifdescrs as $ifent => $ifdescr) {
+ if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) {
+ if ($config[interfaces][$ifent]['prefix-6rd'] == $_POST['prefix-6rd']) {
+ $input_errors[] = gettext("You can only have one interface configured in 6rd with same prefix.");
+ break;
+ }
+ }
+ }
+ if (in_array($wancfg['ipaddrv6'], array())) {
+ $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
+ }
+ break;
+ case "6to4":
+ foreach ($ifdescrs as $ifent => $ifdescr) {
+ if ($if != $ifent && ($config[interfaces][$ifent]['ipaddrv6'] == $_POST['type6'])) {
+ $input_errors[] = sprintf(gettext("You can only have one interface configured as 6to4."), $_POST['type6']);
+ break;
+ }
+ }
+ if (in_array($wancfg['ipaddrv6'], array())) {
+ $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
+ }
+ break;
+ case "track6":
+ /* needs to check if $track6-prefix-id is used on another interface */
+ if (in_array($wancfg['ipaddrv6'], array())) {
+ $input_errors[] = sprintf(gettext("You have to reassign the interface to be able to configure as %s."), $_POST['type6']);
+ }
+
+ if ($_POST['track6-prefix-id--hex'] != "" && !is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
+ $input_errors[] = gettext("You must enter a valid hexadecimal number for the IPv6 prefix ID.");
+ } else {
+ $track6_prefix_id = intval($_POST['track6-prefix-id--hex'], 16);
+ if ($track6_prefix_id < 0 || $track6_prefix_id > $_POST['ipv6-num-prefix-ids-' . $_POST['track6-interface']]) {
+ $input_errors[] = gettext("You specified an IPv6 prefix ID that is out of range.") .
+ " ({$_POST['track6-interface']}) - (0) - (" . sprintf('%x', $_POST['ipv6-num-prefix-ids-' . $_POST['track6-interface']]) . ")";
+ } else {
+ foreach ($ifdescrs as $ifent => $ifdescr) {
+ if ($if == $ifent) {
+ continue;
+ }
+ if ($config['interfaces'][$ifent]['ipaddrv6'] == 'track6' &&
+ $config['interfaces'][$ifent]['track6-interface'] == $_POST['track6-interface'] &&
+ $config['interfaces'][$ifent]['track6-prefix-id'] == $track6_prefix_id) {
+ $input_errors[] = sprintf(gettext("This track6 prefix ID is already being used in %s."), $ifdescr);
+ }
+ }
+ }
+ }
+ break;
+ }
+
+ /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
+ $staticroutes = get_staticroutes(true);
+ $_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac']));
+ if ($_POST['ipaddr']) {
+ if (!is_ipaddrv4($_POST['ipaddr'])) {
+ $input_errors[] = gettext("A valid IPv4 address must be specified.");
+ } else {
+ $where_ipaddr_configured = where_is_ipaddr_configured($_POST['ipaddr'], $if, true, true, $_POST['subnet']);
+ if (count($where_ipaddr_configured)) {
+ $subnet_conflict_text = sprintf(gettext("IPv4 address %s is being used by or overlaps with:"), $_POST['ipaddr'] . "/" . $_POST['subnet']);
+ foreach ($where_ipaddr_configured as $subnet_conflict) {
+ $subnet_conflict_text .= " " . convert_friendly_interface_to_friendly_descr($subnet_conflict['if']) . " (" . $subnet_conflict['ip_or_subnet'] . ")";
+ }
+ $input_errors[] = $subnet_conflict_text;
+ }
+
+ /* Do not accept network or broadcast address, except if subnet is 31 or 32 */
+ if ($_POST['subnet'] < 31) {
+ if ($_POST['ipaddr'] == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) {
+ $input_errors[] = gettext("This IPv4 address is the network address and cannot be used");
+ } else if ($_POST['ipaddr'] == gen_subnet_max($_POST['ipaddr'], $_POST['subnet'])) {
+ $input_errors[] = gettext("This IPv4 address is the broadcast address and cannot be used");
+ }
+ }
+
+ foreach ($staticroutes as $route_subnet) {
+ list($network, $subnet) = explode("/", $route_subnet);
+ if ($_POST['subnet'] == $subnet && $network == gen_subnet($_POST['ipaddr'], $_POST['subnet'])) {
+ $input_errors[] = gettext("This IPv4 address conflicts with a Static Route.");
+ break;
+ }
+ unset($network, $subnet);
+ }
+ }
+ }
+ if ($_POST['ipaddrv6']) {
+ if (!is_ipaddrv6($_POST['ipaddrv6'])) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified.");
+ } else {
+ $where_ipaddr_configured = where_is_ipaddr_configured($_POST['ipaddrv6'], $if, true, true, $_POST['subnetv6']);
+ if (count($where_ipaddr_configured)) {
+ $subnet_conflict_text = sprintf(gettext("IPv6 address %s is being used by or overlaps with:"), $_POST['ipaddrv6'] . "/" . $_POST['subnetv6']);
+ foreach ($where_ipaddr_configured as $subnet_conflict) {
+ $subnet_conflict_text .= " " . convert_friendly_interface_to_friendly_descr($subnet_conflict['if']) . " (" . $subnet_conflict['ip_or_subnet'] . ")";
+ }
+ $input_errors[] = $subnet_conflict_text;
+ }
+
+ foreach ($staticroutes as $route_subnet) {
+ list($network, $subnet) = explode("/", $route_subnet);
+ if ($_POST['subnetv6'] == $subnet && $network == gen_subnetv6($_POST['ipaddrv6'], $_POST['subnetv6'])) {
+ $input_errors[] = gettext("This IPv6 address conflicts with a Static Route.");
+ break;
+ }
+ unset($network, $subnet);
+ }
+ }
+ }
+ if (($_POST['subnet'] && !is_numeric($_POST['subnet']))) {
+ $input_errors[] = gettext("A valid subnet bit count must be specified.");
+ }
+ if (($_POST['subnetv6'] && !is_numeric($_POST['subnetv6']))) {
+ $input_errors[] = gettext("A valid subnet bit count must be specified.");
+ }
+ if (($_POST['alias-address'] && !is_ipaddrv4($_POST['alias-address']))) {
+ $input_errors[] = gettext("A valid alias IP address must be specified.");
+ }
+ if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet']))) {
+ $input_errors[] = gettext("A valid alias subnet bit count must be specified.");
+ }
+ if ($_POST['dhcprejectfrom'] && !is_ipaddrv4($_POST['dhcprejectfrom'])) {
+ $input_errors[] = gettext("A valid alias IP address must be specified to reject DHCP Leases from.");
+ }
+ if (($_POST['gateway'] != "none") || ($_POST['gatewayv6'] != "none")) {
+ $match = false;
+ foreach ($a_gateways as $gateway) {
+ if (in_array($_POST['gateway'], $gateway)) {
+ $match = true;
+ }
+ }
+ foreach ($a_gateways as $gateway) {
+ if (in_array($_POST['gatewayv6'], $gateway)) {
+ $match = true;
+ }
+ }
+ if (!$match) {
+ $input_errors[] = gettext("A valid gateway must be specified.");
+ }
+ }
+ if (($_POST['provider'] && !is_domain($_POST['provider']))) {
+ $input_errors[] = gettext("The service name contains invalid characters.");
+ }
+ if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) {
+ $input_errors[] = gettext("The idle timeout value must be an integer.");
+ }
+ if ($_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) &&
+ $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) {
+ $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23).");
+ }
+ if ($_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) &&
+ $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) {
+ $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59).");
+ }
+ if ($_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
+ $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy).");
+ }
+ if (($_POST['pptp_local'] && !is_ipaddrv4($_POST['pptp_local']))) {
+ $input_errors[] = gettext("A valid PPTP local IP address must be specified.");
+ }
+ if (($_POST['pptp_subnet'] && !is_numeric($_POST['pptp_subnet']))) {
+ $input_errors[] = gettext("A valid PPTP subnet bit count must be specified.");
+ }
+ if (($_POST['pptp_remote'] && !is_ipaddrv4($_POST['pptp_remote']) && !is_hostname($_POST['gateway'][$iface]))) {
+ $input_errors[] = gettext("A valid PPTP remote IP address must be specified.");
+ }
+ if (($_POST['pptp_idletimeout'] != "") && !is_numericint($_POST['pptp_idletimeout'])) {
+ $input_errors[] = gettext("The idle timeout value must be an integer.");
+ }
+ if (($_POST['spoofmac'] && !is_macaddr($_POST['spoofmac']))) {
+ $input_errors[] = gettext("A valid MAC address must be specified.");
+ }
+ if ($_POST['mtu']) {
+ if (!is_numericint($_POST['mtu'])) {
+ $input_errors[] = "MTU must be an integer.";
+ }
+ if (substr($wancfg['if'], 0, 3) == 'gif') {
+ $min_mtu = 1280;
+ $max_mtu = 8192;
+ } else {
+ $min_mtu = 576;
+ $max_mtu = 9000;
+ }
+
+ if ($_POST['mtu'] < $min_mtu || $_POST['mtu'] > $max_mtu) {
+ $input_errors[] = sprintf(gettext("The MTU must be between %d and %d bytes."), $min_mtu, $max_mtu);
+ }
+
+ unset($min_mtu, $max_mtu);
+
+ if (stristr($wancfg['if'], "_vlan")) {
+ $realhwif_array = get_parent_interface($wancfg['if']);
+ // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling
+ $parent_realhwif = $realhwif_array[0];
+ $parent_if = convert_real_interface_to_friendly_interface_name($parent_realhwif);
+ if (!empty($parent_if) && !empty($config['interfaces'][$parent_if]['mtu'])) {
+ if ($_POST['mtu'] > intval($config['interfaces'][$parent_if]['mtu'])) {
+ $input_errors[] = gettext("The MTU of a VLAN cannot be greater than that of its parent interface.");
+ }
+ }
+ } else {
+ foreach ($config['interfaces'] as $idx => $ifdata) {
+ if (($idx == $if) || !preg_match('/_vlan[0-9]/', $ifdata['if'])) {
+ continue;
+ }
+
+ $realhwif_array = get_parent_interface($ifdata['if']);
+ // Need code to handle MLPPP if we ever use $realhwif for MLPPP handling
+ $parent_realhwif = $realhwif_array[0];
+
+ if ($parent_realhwif != $wancfg['if']) {
+ continue;
+ }
+
+ if (isset($ifdata['mtu']) && $ifdata['mtu'] > $_POST['mtu']) {
+ $input_errors[] = sprintf(gettext("Interface %s (VLAN) has MTU set to a larger value"), $ifdata['descr']);
+ }
+ }
+ }
+ }
+ if ($_POST['mss'] <> '') {
+ if (!is_numericint($_POST['mss']) || ($_POST['mss'] < 576 || $_POST['mss'] > 65535)) {
+ $input_errors[] = gettext("The MSS must be an integer between 576 and 65535 bytes.");
+ }
+ }
+ /* Wireless interface? */
+ if (isset($wancfg['wireless'])) {
+ $reqdfields = array("mode");
+ $reqdfieldsn = array(gettext("Mode"));
+ if ($_POST['mode'] == 'hostap') {
+ $reqdfields[] = "ssid";
+ $reqdfieldsn[] = gettext("SSID");
+ if (isset($_POST['channel']) && $_POST['channel'] == "0") {
+ // auto channel with hostap is broken, prevent this for now.
+ $input_errors[] = gettext("A specific channel, not auto, must be selected for Access Point mode.");
+ }
+ }
+ if (stristr($_POST['standard'], '11n')) {
+ if (!($_POST['wme_enable'])) {
+ $input_errors[] = gettext("802.11n standards require enabling WME.");
+ }
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ check_wireless_mode();
+ if (isset($_POST['wpa_group_rekey']) && (!is_numericint($_POST['wpa_group_rekey']) || $_POST['wpa_group_rekey'] < 1 || $_POST['wpa_group_rekey'] > 9999)) {
+ $input_errors[] = gettext("Key Rotation must be an integer between 1 and 9999.");
+ }
+ if (isset($_POST['wpa_gmk_rekey']) && (!is_numericint($_POST['wpa_gmk_rekey']) || $_POST['wpa_gmk_rekey'] < 1 || $_POST['wpa_gmk_rekey'] > 9999)) {
+ $input_errors[] = gettext("Master Key Regeneration must be an integer between 1 and 9999.");
+ }
+ if (isset($_POST['wpa_group_rekey']) && isset($_POST['wpa_gmk_rekey'])) {
+ if ($_POST['wpa_group_rekey'] > $_POST['wpa_gmk_rekey']) {
+ $input_errors[] = gettext("Master Key Regeneration must be greater than Key Rotation.");
+ }
+ }
+ if (!empty($_POST['auth_server_addr'])) {
+ if (!is_domain($_POST['auth_server_addr']) && !is_ipaddr($_POST['auth_server_addr'])) {
+ $input_errors[] = gettext("802.1X Authentication Server must be an IP or hostname.");
+ }
+ }
+ if (!empty($_POST['auth_server_addr2'])) {
+ if (!is_domain($_POST['auth_server_addr2']) && !is_ipaddr($_POST['auth_server_addr2'])) {
+ $input_errors[] = gettext("Secondary 802.1X Authentication Server must be an IP or hostname.");
+ }
+ }
+ if (!empty($_POST['auth_server_port'])) {
+ if (!is_port($_POST['auth_server_port'])) {
+ $input_errors[] = gettext("802.1X Authentication Server Port must be a valid port number (1-65535).");
+ }
+ }
+ if (!empty($_POST['auth_server_port2'])) {
+ if (!is_port($_POST['auth_server_port2'])) {
+ $input_errors[] = gettext("Secondary 802.1X Authentication Server Port must be a valid port number (1-65535).");
+ }
+ }
+ if (isset($_POST['channel']) && !is_numericint($_POST['channel'])) {
+ if (!is_numericint($_POST['channel'])) {
+ $input_errors[] = gettext("Invalid channel specified.");
+ } else {
+ if ($_POST['channel'] > 255 || $_POST['channel'] < 0) {
+ $input_errors[] = gettext("Channel must be between 0-255.");
+ }
+ }
+ }
+ if (!empty($_POST['distance']) && !is_numericint($_POST['distance'])) {
+ $input_errors[] = gettext("Distance must be an integer.");
+ }
+ if (isset($_POST['standard']) && (stristr($_POST['standard'], '11na') || stristr($_POST['standard'], '11a'))) {
+ if ($_POST['channel'] != 0 && $_POST['channel'] < 15) {
+ $input_errors[] = gettext("Channel selected is not valid for 802.11a or 802.11na.");
+ }
+ }
+ if (isset($_POST['standard']) && ($_POST['standard'] == "11b" || $_POST['standard'] == "11g")) {
+ if ($_POST['channel'] > 14) {
+ $input_errors[] = gettext("Channel selected is not valid for 802.11b or 802.11g.");
+ }
+ }
+ if (!empty($_POST['protmode']) && !in_array($_POST['protmode'], array("off", "cts", "rtscts"))) {
+ $input_errors[] = gettext("Invalid option chosen for OFDM Protection Mode");
+ }
+ /* loop through keys and enforce size */
+ for ($i = 1; $i <= 4; $i++) {
+ if ($_POST['key' . $i]) {
+ /* 64 bit */
+ if (strlen($_POST['key' . $i]) == 5) {
+ continue;
+ }
+ if (strlen($_POST['key' . $i]) == 10) {
+ /* hex key */
+ if (stristr($_POST['key' . $i], "0x") == false) {
+ $_POST['key' . $i] = "0x" . $_POST['key' . $i];
+ }
+ continue;
+ }
+ if (strlen($_POST['key' . $i]) == 12) {
+ /* hex key */
+ if (stristr($_POST['key' . $i], "0x") == false) {
+ $_POST['key' . $i] = "0x" . $_POST['key' . $i];
+ }
+ continue;
+ }
+ /* 128 bit */
+ if (strlen($_POST['key' . $i]) == 13) {
+ continue;
+ }
+ if (strlen($_POST['key' . $i]) == 26) {
+ /* hex key */
+ if (stristr($_POST['key' . $i], "0x") == false) {
+ $_POST['key' . $i] = "0x" . $_POST['key' . $i];
+ }
+ continue;
+ }
+ if (strlen($_POST['key' . $i]) == 28) {
+ continue;
+ }
+ $input_errors[] = gettext("Invalid WEP key. Enter a valid 40, 64, 104 or 128 bit WEP key.");
+ break;
+ }
+ }
+
+ if ($_POST['passphrase']) {
+ $passlen = strlen($_POST['passphrase']);
+ if ($passlen < 8 || $passlen > 63) {
+ $input_errors[] = gettext("The WPA passphrase must be between 8 and 63 characters long.");
+ }
+ }
+ if ($_POST['wpa_enable'] == "yes") {
+ if (empty($_POST['passphrase']) && stristr($_POST['wpa_key_mgmt'], "WPA-PSK")) {
+ $input_errors[] = gettext("A WPA Passphrase must be specified when WPA PSK is enabled.");
+ }
+ }
+ }
+ if (!$input_errors) {
+ if ($wancfg['ipaddr'] != $_POST['type']) {
+ if (in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) {
+ $wancfg['if'] = $a_ppps[$pppid]['ports'];
+ unset($a_ppps[$pppid]);
+ } else if ($wancfg['ipaddr'] == "dhcp") {
+ kill_dhclient_process($wancfg['if']);
+ }
+ if ($wancfg['ipaddrv6'] == "dhcp6") {
+ $pid = find_dhcp6c_process($wancfg['if']);
+ if ($pid) {
+ posix_kill($pid, SIGTERM);
+ }
+ }
+ }
+ $ppp = array();
+ if ($wancfg['ipaddr'] != "ppp") {
+ unset($wancfg['ipaddr']);
+ }
+ if ($wancfg['ipaddrv6'] != "ppp") {
+ unset($wancfg['ipaddrv6']);
+ }
+ unset($wancfg['subnet']);
+ unset($wancfg['gateway']);
+ unset($wancfg['subnetv6']);
+ unset($wancfg['gatewayv6']);
+ unset($wancfg['dhcphostname']);
+ unset($wancfg['dhcprejectfrom']);
+ unset($wancfg['dhcp6-duid']);
+ unset($wancfg['dhcp6-ia-pd-len']);
+ unset($wancfg['dhcp6-ia-pd-send-hint']);
+ unset($wancfg['dhcp6prefixonly']);
+ unset($wancfg['dhcp6usev4iface']);
+ unset($wancfg['track6-interface']);
+ unset($wancfg['track6-prefix-id']);
+ unset($wancfg['prefix-6rd']);
+ unset($wancfg['prefix-6rd-v4plen']);
+ unset($wancfg['gateway-6rd']);
+
+ unset($wancfg['adv_dhcp_pt_timeout']);
+ unset($wancfg['adv_dhcp_pt_retry']);
+ unset($wancfg['adv_dhcp_pt_select_timeout']);
+ unset($wancfg['adv_dhcp_pt_reboot']);
+ unset($wancfg['adv_dhcp_pt_backoff_cutoff']);
+ unset($wancfg['adv_dhcp_pt_initial_interval']);
+
+ unset($wancfg['adv_dhcp_pt_values']);
+
+ unset($wancfg['adv_dhcp_send_options']);
+ unset($wancfg['adv_dhcp_request_options']);
+ unset($wancfg['adv_dhcp_required_options']);
+ unset($wancfg['adv_dhcp_option_modifiers']);
+
+ unset($wancfg['adv_dhcp_config_advanced']);
+ unset($wancfg['adv_dhcp_config_file_override']);
+ unset($wancfg['adv_dhcp_config_file_override_path']);
+
+ unset($wancfg['adv_dhcp6_interface_statement_send_options']);
+ unset($wancfg['adv_dhcp6_interface_statement_request_options']);
+ unset($wancfg['adv_dhcp6_interface_statement_information_only_enable']);
+ unset($wancfg['adv_dhcp6_interface_statement_script']);
+
+ unset($wancfg['adv_dhcp6_id_assoc_statement_address_enable']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_address']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_address_id']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_address_pltime']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_address_vltime']);
+
+ unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_enable']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_prefix']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_id']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime']);
+ unset($wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime']);
+
+ unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_id']);
+ unset($wancfg['adv_dhcp6_prefix_interface_statement_sla_len']);
+
+ unset($wancfg['adv_dhcp6_authentication_statement_authname']);
+ unset($wancfg['adv_dhcp6_authentication_statement_protocol']);
+ unset($wancfg['adv_dhcp6_authentication_statement_algorithm']);
+ unset($wancfg['adv_dhcp6_authentication_statement_rdm']);
+
+ unset($wancfg['adv_dhcp6_key_info_statement_keyname']);
+ unset($wancfg['adv_dhcp6_key_info_statement_realm']);
+ unset($wancfg['adv_dhcp6_key_info_statement_keyid']);
+ unset($wancfg['adv_dhcp6_key_info_statement_secret']);
+ unset($wancfg['adv_dhcp6_key_info_statement_expire']);
+
+ unset($wancfg['adv_dhcp6_config_advanced']);
+ unset($wancfg['adv_dhcp6_config_file_override']);
+ unset($wancfg['adv_dhcp6_config_file_override_path']);
+
+ unset($wancfg['pppoe_password']);
+ unset($wancfg['pptp_username']);
+ unset($wancfg['pptp_password']);
+ unset($wancfg['provider']);
+ unset($wancfg['ondemand']);
+ unset($wancfg['timeout']);
+ if (empty($wancfg['pppoe']['pppoe-reset-type'])) {
+ unset($wancfg['pppoe']['pppoe-reset-type']);
+ }
+ unset($wancfg['local']);
+
+ unset($wancfg['remote']);
+ if (is_array($a_ppps[$pppid]) && in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp"))) {
+ if ($wancfg['ipaddr'] != 'ppp') {
+ unset($a_ppps[$pppid]['apn']);
+ unset($a_ppps[$pppid]['phone']);
+ unset($a_ppps[$pppid]['provider']);
+ unset($a_ppps[$pppid]['ondemand']);
+ }
+ if (in_array($wancfg['ipaddr'], array("pppoe", "pptp", "l2tp"))) {
+ unset($a_ppps[$pppid]['localip']);
+ unset($a_ppps[$pppid]['subnet']);
+ unset($a_ppps[$pppid]['gateway']);
+ }
+ if ($wancfg['ipaddr'] != 'pppoe') {
+ unset($a_ppps[$pppid]['pppoe-reset-type']);
+ }
+ if ($wancfg['type'] != $_POST['type']) {
+ unset($a_ppps[$pppid]['idletimeout']);
+ }
+ }
+
+ $wancfg['descr'] = remove_bad_chars($_POST['descr']);
+ $wancfg['enable'] = $_POST['enable'] == "yes" ? true : false;
+
+ /* let return_gateways_array() do the magic on dynamic interfaces for us */
+ switch ($_POST['type']) {
+ case "staticv4":
+ $wancfg['ipaddr'] = $_POST['ipaddr'];
+ $wancfg['subnet'] = $_POST['subnet'];
+ if ($_POST['gateway'] != "none") {
+ $wancfg['gateway'] = $_POST['gateway'];
+ }
+ break;
+ case "dhcp":
+ $wancfg['ipaddr'] = "dhcp";
+ $wancfg['dhcphostname'] = $_POST['dhcphostname'];
+ $wancfg['alias-address'] = $_POST['alias-address'];
+ $wancfg['alias-subnet'] = $_POST['alias-subnet'];
+ $wancfg['dhcprejectfrom'] = $_POST['dhcprejectfrom'];
+
+ $wancfg['adv_dhcp_pt_timeout'] = $_POST['adv_dhcp_pt_timeout'];
+ $wancfg['adv_dhcp_pt_retry'] = $_POST['adv_dhcp_pt_retry'];
+ $wancfg['adv_dhcp_pt_select_timeout'] = $_POST['adv_dhcp_pt_select_timeout'];
+ $wancfg['adv_dhcp_pt_reboot'] = $_POST['adv_dhcp_pt_reboot'];
+ $wancfg['adv_dhcp_pt_backoff_cutoff'] = $_POST['adv_dhcp_pt_backoff_cutoff'];
+ $wancfg['adv_dhcp_pt_initial_interval'] = $_POST['adv_dhcp_pt_initial_interval'];
+
+ $wancfg['adv_dhcp_pt_values'] = $_POST['adv_dhcp_pt_values'];
+
+ $wancfg['adv_dhcp_send_options'] = $_POST['adv_dhcp_send_options'];
+ $wancfg['adv_dhcp_request_options'] = $_POST['adv_dhcp_request_options'];
+ $wancfg['adv_dhcp_required_options'] = $_POST['adv_dhcp_required_options'];
+ $wancfg['adv_dhcp_option_modifiers'] = $_POST['adv_dhcp_option_modifiers'];
+
+ $wancfg['adv_dhcp_config_advanced'] = $_POST['adv_dhcp_config_advanced'];
+ $wancfg['adv_dhcp_config_file_override'] = $_POST['adv_dhcp_config_file_override'];
+ $wancfg['adv_dhcp_config_file_override_path'] = $_POST['adv_dhcp_config_file_override_path'];
+
+ $wancfg['dhcp_plus'] = $_POST['dhcp_plus'] == "yes" ? true : false;
+ if ($gateway_item) {
+ $a_gateways[] = $gateway_item;
+ }
+ break;
+ case "ppp":
+ $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
+ $a_ppps[$pppid]['type'] = $_POST['type'];
+ $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
+ $a_ppps[$pppid]['ports'] = $_POST['port'];
+ $a_ppps[$pppid]['username'] = $_POST['ppp_username'];
+ $a_ppps[$pppid]['password'] = base64_encode($_POST['ppp_password']);
+ $a_ppps[$pppid]['phone'] = $_POST['phone'];
+ $a_ppps[$pppid]['apn'] = $_POST['apn'];
+ $wancfg['if'] = $_POST['type'] . $_POST['ptpid'];
+ $wancfg['ipaddr'] = $_POST['type'];
+ break;
+
+ case "pppoe":
+ $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
+ $a_ppps[$pppid]['type'] = $_POST['type'];
+ $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
+ if (isset($_POST['ppp_port'])) {
+ $a_ppps[$pppid]['ports'] = $_POST['ppp_port'];
+ } else {
+ $a_ppps[$pppid]['ports'] = $wancfg['if'];
+ }
+ $a_ppps[$pppid]['username'] = $_POST['pppoe_username'];
+ $a_ppps[$pppid]['password'] = base64_encode($_POST['pppoe_password']);
+ if (!empty($_POST['provider'])) {
+ $a_ppps[$pppid]['provider'] = $_POST['provider'];
+ } else {
+ $a_ppps[$pppid]['provider'] = true;
+ }
+ $a_ppps[$pppid]['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false;
+ if (!empty($_POST['pppoe_idletimeout'])) {
+ $a_ppps[$pppid]['idletimeout'] = $_POST['pppoe_idletimeout'];
+ } else {
+ unset($a_ppps[$pppid]['idletimeout']);
+ }
+
+ if (!empty($_POST['pppoe-reset-type'])) {
+ $a_ppps[$pppid]['pppoe-reset-type'] = $_POST['pppoe-reset-type'];
+ } else {
+ unset($a_ppps[$pppid]['pppoe-reset-type']);
+ }
+ $wancfg['if'] = $_POST['type'].$_POST['ptpid'];
+ $wancfg['ipaddr'] = $_POST['type'];
+ if ($gateway_item) {
+ $a_gateways[] = $gateway_item;
+ }
+
+ break;
+ case "pptp":
+ case "l2tp":
+ $a_ppps[$pppid]['ptpid'] = $_POST['ptpid'];
+ $a_ppps[$pppid]['type'] = $_POST['type'];
+ $a_ppps[$pppid]['if'] = $_POST['type'].$_POST['ptpid'];
+ if (isset($_POST['ppp_port'])) {
+ $a_ppps[$pppid]['ports'] = $_POST['ppp_port'];
+ } else {
+ $a_ppps[$pppid]['ports'] = $wancfg['if'];
+ }
+ $a_ppps[$pppid]['username'] = $_POST['pptp_username'];
+ $a_ppps[$pppid]['password'] = base64_encode($_POST['pptp_password']);
+ $a_ppps[$pppid]['localip'] = $_POST['pptp_local'];
+ $a_ppps[$pppid]['subnet'] = $_POST['pptp_subnet'];
+ $a_ppps[$pppid]['gateway'] = $_POST['pptp_remote'];
+ $a_ppps[$pppid]['ondemand'] = $_POST['pptp_dialondemand'] ? true : false;
+ if (!empty($_POST['pptp_idletimeout'])) {
+ $a_ppps[$pppid]['idletimeout'] = $_POST['pptp_idletimeout'];
+ } else {
+ unset($a_ppps[$pppid]['idletimeout']);
+ }
+ $wancfg['if'] = $_POST['type'].$_POST['ptpid'];
+ $wancfg['ipaddr'] = $_POST['type'];
+ if ($gateway_item) {
+ $a_gateways[] = $gateway_item;
+ }
+ break;
+ case "none":
+ break;
+ }
+ switch ($_POST['type6']) {
+ case "staticv6":
+ $wancfg['ipaddrv6'] = $_POST['ipaddrv6'];
+ $wancfg['subnetv6'] = $_POST['subnetv6'];
+ if ($_POST['gatewayv6'] != "none") {
+ $wancfg['gatewayv6'] = $_POST['gatewayv6'];
+ }
+ break;
+ case "slaac":
+ $wancfg['ipaddrv6'] = "slaac";
+ break;
+ case "dhcp6":
+ $wancfg['ipaddrv6'] = "dhcp6";
+ $wancfg['dhcp6-duid'] = $_POST['dhcp6-duid'];
+ $wancfg['dhcp6-ia-pd-len'] = $_POST['dhcp6-ia-pd-len'];
+ if ($_POST['dhcp6-ia-pd-send-hint'] == "yes") {
+ $wancfg['dhcp6-ia-pd-send-hint'] = true;
+ }
+ if ($_POST['dhcp6prefixonly'] == "yes") {
+ $wancfg['dhcp6prefixonly'] = true;
+ }
+ if ($_POST['dhcp6usev4iface'] == "yes") {
+ $wancfg['dhcp6usev4iface'] = true;
+ }
+
+ if (!empty($_POST['adv_dhcp6_interface_statement_send_options'])) {
+ $wancfg['adv_dhcp6_interface_statement_send_options'] = $_POST['adv_dhcp6_interface_statement_send_options'];
+ }
+ if (!empty($_POST['adv_dhcp6_interface_statement_request_options'])) {
+ $wancfg['adv_dhcp6_interface_statement_request_options'] = $_POST['adv_dhcp6_interface_statement_request_options'];
+ }
+ if (isset($_POST['adv_dhcp6_interface_statement_information_only_enable'])) {
+ $wancfg['adv_dhcp6_interface_statement_information_only_enable'] = $_POST['adv_dhcp6_interface_statement_information_only_enable'];
+ }
+ if (!empty($_POST['adv_dhcp6_interface_statement_script'])) {
+ $wancfg['adv_dhcp6_interface_statement_script'] = $_POST['adv_dhcp6_interface_statement_script'];
+ }
+
+ if (isset($_POST['adv_dhcp6_id_assoc_statement_address_enable'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_address_enable'] = $_POST['adv_dhcp6_id_assoc_statement_address_enable'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_address'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_address'] = $_POST['adv_dhcp6_id_assoc_statement_address'];
+ }
+ if (is_numericint($_POST['adv_dhcp6_id_assoc_statement_address_id'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_address_id'] = $_POST['adv_dhcp6_id_assoc_statement_address_id'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_address_pltime'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_address_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_pltime'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_address_vltime'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_address_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_address_vltime'];
+ }
+
+ if (isset($_POST['adv_dhcp6_id_assoc_statement_prefix_enable'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_prefix_enable'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_enable'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_prefix'] = $_POST['adv_dhcp6_id_assoc_statement_prefix'];
+ }
+ if (is_numericint($_POST['adv_dhcp6_id_assoc_statement_prefix_id'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_prefix_id'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_id'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix_pltime'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_prefix_pltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_pltime'];
+ }
+ if (!empty($_POST['adv_dhcp6_id_assoc_statement_prefix_vltime'])) {
+ $wancfg['adv_dhcp6_id_assoc_statement_prefix_vltime'] = $_POST['adv_dhcp6_id_assoc_statement_prefix_vltime'];
+ }
+
+ if (is_numericint($_POST['adv_dhcp6_prefix_interface_statement_sla_id'])) {
+ $wancfg['adv_dhcp6_prefix_interface_statement_sla_id'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_id'];
+ }
+ if (is_numericint($_POST['adv_dhcp6_prefix_interface_statement_sla_len'])) {
+ $wancfg['adv_dhcp6_prefix_interface_statement_sla_len'] = $_POST['adv_dhcp6_prefix_interface_statement_sla_len'];
+ }
+
+ if (!empty($_POST['adv_dhcp6_authentication_statement_authname'])) {
+ $wancfg['adv_dhcp6_authentication_statement_authname'] = $_POST['adv_dhcp6_authentication_statement_authname'];
+ }
+ if (!empty($_POST['adv_dhcp6_authentication_statement_protocol'])) {
+ $wancfg['adv_dhcp6_authentication_statement_protocol'] = $_POST['adv_dhcp6_authentication_statement_protocol'];
+ }
+ if (!empty($_POST['adv_dhcp6_authentication_statement_algorithm'])) {
+ $wancfg['adv_dhcp6_authentication_statement_algorithm'] = $_POST['adv_dhcp6_authentication_statement_algorithm'];
+ }
+ if (!empty($_POST['adv_dhcp6_authentication_statement_rdm'])) {
+ $wancfg['adv_dhcp6_authentication_statement_rdm'] = $_POST['adv_dhcp6_authentication_statement_rdm'];
+ }
+
+ if (!empty($_POST['adv_dhcp6_key_info_statement_keyname'])) {
+ $wancfg['adv_dhcp6_key_info_statement_keyname'] = $_POST['adv_dhcp6_key_info_statement_keyname'];
+ }
+ if (!empty($_POST['adv_dhcp6_key_info_statement_realm'])) {
+ $wancfg['adv_dhcp6_key_info_statement_realm'] = $_POST['adv_dhcp6_key_info_statement_realm'];
+ }
+ if (!empty($_POST['adv_dhcp6_key_info_statement_keyid'])) {
+ $wancfg['adv_dhcp6_key_info_statement_keyid'] = $_POST['adv_dhcp6_key_info_statement_keyid'];
+ }
+ if (!empty($_POST['adv_dhcp6_key_info_statement_secret'])) {
+ $wancfg['adv_dhcp6_key_info_statement_secret'] = $_POST['adv_dhcp6_key_info_statement_secret'];
+ }
+ if (!empty($_POST['adv_dhcp6_key_info_statement_expire'])) {
+ $wancfg['adv_dhcp6_key_info_statement_expire'] = $_POST['adv_dhcp6_key_info_statement_expire'];
+ }
+
+ if (!empty($_POST['adv_dhcp6_config_advanced'])) {
+ $wancfg['adv_dhcp6_config_advanced'] = $_POST['adv_dhcp6_config_advanced'];
+ }
+ if (!empty($_POST['adv_dhcp6_config_file_override'])) {
+ $wancfg['adv_dhcp6_config_file_override'] = $_POST['adv_dhcp6_config_file_override'];
+ }
+ if (!empty($_POST['adv_dhcp6_config_file_override_path'])) {
+ $wancfg['adv_dhcp6_config_file_override_path'] = $_POST['adv_dhcp6_config_file_override_path'];
+ }
+
+ if ($gateway_item) {
+ $a_gateways[] = $gateway_item;
+ }
+ break;
+ case "6rd":
+ $wancfg['ipaddrv6'] = "6rd";
+ $wancfg['prefix-6rd'] = $_POST['prefix-6rd'];
+ $wancfg['prefix-6rd-v4plen'] = $_POST['prefix-6rd-v4plen'];
+ $wancfg['gateway-6rd'] = $_POST['gateway-6rd'];
+ if ($gateway_item) {
+ $a_gateways[] = $gateway_item;
+ }
+ break;
+ case "6to4":
+ $wancfg['ipaddrv6'] = "6to4";
+ break;
+ case "track6":
+ $wancfg['ipaddrv6'] = "track6";
+ $wancfg['track6-interface'] = $_POST['track6-interface'];
+ if ($_POST['track6-prefix-id--hex'] === "") {
+ $wancfg['track6-prefix-id'] = 0;
+ } else if (is_numeric("0x" . $_POST['track6-prefix-id--hex'])) {
+ $wancfg['track6-prefix-id'] = intval($_POST['track6-prefix-id--hex'], 16);
+ } else {
+ $wancfg['track6-prefix-id'] = 0;
+ }
+ break;
+ case "none":
+ break;
+ }
+ handle_pppoe_reset($_POST);
+
+ if ($_POST['blockpriv'] == "yes") {
+ $wancfg['blockpriv'] = true;
+ } else {
+ unset($wancfg['blockpriv']);
+ }
+ if ($_POST['blockbogons'] == "yes") {
+ $wancfg['blockbogons'] = true;
+ } else {
+ unset($wancfg['blockbogons']);
+ }
+ $wancfg['spoofmac'] = $_POST['spoofmac'];
+ if (empty($_POST['mtu'])) {
+ unset($wancfg['mtu']);
+ } else {
+ $wancfg['mtu'] = $_POST['mtu'];
+ }
+ if (empty($_POST['mss'])) {
+ unset($wancfg['mss']);
+ } else {
+ $wancfg['mss'] = $_POST['mss'];
+ }
+ if (empty($_POST['mediaopt'])) {
+ unset($wancfg['media']);
+ unset($wancfg['mediaopt']);
+ } else {
+ $mediaopts = explode(' ', $_POST['mediaopt']);
+ if ($mediaopts[0] != '') {
+ $wancfg['media'] = $mediaopts[0];
+ }
+ if ($mediaopts[1] != '') {
+ $wancfg['mediaopt'] = $mediaopts[1];
+ } else {
+ unset($wancfg['mediaopt']);
+ }
+ }
+ if (isset($wancfg['wireless'])) {
+ handle_wireless_post();
+ }
+
+ conf_mount_ro();
+ write_config();
+
+ if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
+ } else {
+ $toapplylist = array();
+ }
+ $toapplylist[$if]['ifcfg'] = $old_wancfg;
+ $toapplylist[$if]['ppps'] = $old_ppps;
+ file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
+
+ mark_subsystem_dirty('interfaces');
+
+ /* regenerate cron settings/crontab file */
+ configure_cron();
+
+ header("Location: interfaces.php?if={$if}");
+ exit;
+ }
+
+} // end if ($_POST)
+
+function handle_wireless_post() {
+ global $_POST, $config, $g, $wancfg, $if, $wl_countries_attr, $wlanbaseif;
+ if (!is_array($wancfg['wireless'])) {
+ $wancfg['wireless'] = array();
+ }
+ $wancfg['wireless']['standard'] = $_POST['standard'];
+ $wancfg['wireless']['mode'] = $_POST['mode'];
+ $wancfg['wireless']['protmode'] = $_POST['protmode'];
+ $wancfg['wireless']['ssid'] = $_POST['ssid'];
+ $wancfg['wireless']['channel'] = $_POST['channel'];
+ $wancfg['wireless']['authmode'] = $_POST['authmode'];
+ $wancfg['wireless']['txpower'] = $_POST['txpower'];
+ $wancfg['wireless']['distance'] = $_POST['distance'];
+ $wancfg['wireless']['regdomain'] = $_POST['regdomain'];
+ $wancfg['wireless']['regcountry'] = $_POST['regcountry'];
+ $wancfg['wireless']['reglocation'] = $_POST['reglocation'];
+ if (!empty($wancfg['wireless']['regdomain']) && !empty($wancfg['wireless']['regcountry'])) {
+ foreach ($wl_countries_attr as $wl_country) {
+ if ($wancfg['wireless']['regcountry'] == $wl_country['ID']) {
+ $wancfg['wireless']['regdomain'] = $wl_country['rd'][0]['REF'];
+ break;
+ }
+ }
+ }
+ if (!is_array($wancfg['wireless']['wpa'])) {
+ $wancfg['wireless']['wpa'] = array();
+ }
+ $wancfg['wireless']['wpa']['macaddr_acl'] = $_POST['macaddr_acl'];
+ $wancfg['wireless']['wpa']['auth_algs'] = $_POST['auth_algs'];
+ $wancfg['wireless']['wpa']['wpa_mode'] = $_POST['wpa_mode'];
+ $wancfg['wireless']['wpa']['wpa_key_mgmt'] = $_POST['wpa_key_mgmt'];
+ $wancfg['wireless']['wpa']['wpa_pairwise'] = $_POST['wpa_pairwise'];
+ $wancfg['wireless']['wpa']['wpa_group_rekey'] = $_POST['wpa_group_rekey'];
+ $wancfg['wireless']['wpa']['wpa_gmk_rekey'] = $_POST['wpa_gmk_rekey'];
+ $wancfg['wireless']['wpa']['passphrase'] = $_POST['passphrase'];
+ $wancfg['wireless']['wpa']['ext_wpa_sw'] = $_POST['ext_wpa_sw'];
+ $wancfg['wireless']['auth_server_addr'] = $_POST['auth_server_addr'];
+ $wancfg['wireless']['auth_server_port'] = $_POST['auth_server_port'];
+ $wancfg['wireless']['auth_server_shared_secret'] = $_POST['auth_server_shared_secret'];
+ $wancfg['wireless']['auth_server_addr2'] = $_POST['auth_server_addr2'];
+ $wancfg['wireless']['auth_server_port2'] = $_POST['auth_server_port2'];
+ $wancfg['wireless']['auth_server_shared_secret2'] = $_POST['auth_server_shared_secret2'];
+
+ if ($_POST['persistcommonwireless'] == "yes") {
+ if (!is_array($config['wireless'])) {
+ $config['wireless'] = array();
+ }
+ if (!is_array($config['wireless']['interfaces'])) {
+ $config['wireless']['interfaces'] = array();
+ }
+ if (!is_array($config['wireless']['interfaces'][$wlanbaseif])) {
+ $config['wireless']['interfaces'][$wlanbaseif] = array();
+ }
+ } else if (isset($config['wireless']['interfaces'][$wlanbaseif])) {
+ unset($config['wireless']['interfaces'][$wlanbaseif]);
+ }
+ if (isset($_POST['diversity']) && is_numeric($_POST['diversity'])) {
+ $wancfg['wireless']['diversity'] = $_POST['diversity'];
+ } else if (isset($wancfg['wireless']['diversity'])) {
+ unset($wancfg['wireless']['diversity']);
+ }
+ if (isset($_POST['txantenna']) && is_numeric($_POST['txantenna'])) {
+ $wancfg['wireless']['txantenna'] = $_POST['txantenna'];
+ } else if (isset($wancfg['wireless']['txantenna'])) {
+ unset($wancfg['wireless']['txantenna']);
+ }
+ if (isset($_POST['rxantenna']) && is_numeric($_POST['rxantenna'])) {
+ $wancfg['wireless']['rxantenna'] = $_POST['rxantenna'];
+ } else if (isset($wancfg['wireless']['rxantenna'])) {
+ unset($wancfg['wireless']['rxantenna']);
+ }
+ if ($_POST['hidessid_enable'] == "yes") {
+ $wancfg['wireless']['hidessid']['enable'] = true;
+ } else if (isset($wancfg['wireless']['hidessid']['enable'])) {
+ unset($wancfg['wireless']['hidessid']['enable']);
+ }
+ if ($_POST['mac_acl_enable'] == "yes") {
+ $wancfg['wireless']['wpa']['mac_acl_enable'] = true;
+ } else if (isset($wancfg['wireless']['wpa']['mac_acl_enable'])) {
+ unset($wancfg['wireless']['wpa']['mac_acl_enable']);
+ }
+ if ($_POST['rsn_preauth'] == "yes") {
+ $wancfg['wireless']['wpa']['rsn_preauth'] = true;
+ } else {
+ unset($wancfg['wireless']['wpa']['rsn_preauth']);
+ }
+ if ($_POST['ieee8021x'] == "yes") {
+ $wancfg['wireless']['wpa']['ieee8021x']['enable'] = true;
+ } else if (isset($wancfg['wireless']['wpa']['ieee8021x']['enable'])) {
+ unset($wancfg['wireless']['wpa']['ieee8021x']['enable']);
+ }
+ if ($_POST['wpa_strict_rekey'] == "yes") {
+ $wancfg['wireless']['wpa']['wpa_strict_rekey'] = true;
+ } else if (isset($wancfg['wireless']['wpa']['wpa_strict_rekey'])) {
+ unset($wancfg['wireless']['wpa']['wpa_strict_rekey']);
+ }
+ if ($_POST['debug_mode'] == "yes") {
+ $wancfg['wireless']['wpa']['debug_mode'] = true;
+ } else if (isset($wancfg['wireless']['wpa']['debug_mode'])) {
+ sunset($wancfg['wireless']['wpa']['debug_mode']);
+ }
+ if ($_POST['wpa_enable'] == "yes") {
+ $wancfg['wireless']['wpa']['enable'] = $_POST['wpa_enable'] = true;
+ } else if (isset($wancfg['wireless']['wpa']['enable'])) {
+ unset($wancfg['wireless']['wpa']['enable']);
+ }
+ if ($_POST['wep_enable'] == "yes") {
+ if (!is_array($wancfg['wireless']['wep'])) {
+ $wancfg['wireless']['wep'] = array();
+ }
+ $wancfg['wireless']['wep']['enable'] = $_POST['wep_enable'] = true;
+ } else if (isset($wancfg['wireless']['wep'])) {
+ unset($wancfg['wireless']['wep']);
+ }
+ if ($_POST['wme_enable'] == "yes") {
+ if (!is_array($wancfg['wireless']['wme'])) {
+ $wancfg['wireless']['wme'] = array();
+ }
+ $wancfg['wireless']['wme']['enable'] = $_POST['wme_enable'] = true;
+ } else if (isset($wancfg['wireless']['wme']['enable'])) {
+ unset($wancfg['wireless']['wme']['enable']);
+ }
+ if ($_POST['puremode'] == "11g") {
+ if (!is_array($wancfg['wireless']['pureg'])) {
+ $wancfg['wireless']['pureg'] = array();
+ }
+ $wancfg['wireless']['pureg']['enable'] = true;
+ } else if ($_POST['puremode'] == "11n") {
+ if (!is_array($wancfg['wireless']['puren'])) {
+ $wancfg['wireless']['puren'] = array();
+ }
+ $wancfg['wireless']['puren']['enable'] = true;
+ } else {
+ if (isset($wancfg['wireless']['pureg'])) {
+ unset($wancfg['wireless']['pureg']);
+ }
+ if (isset($wancfg['wireless']['puren'])) {
+ unset($wancfg['wireless']['puren']);
+ }
+ }
+ if ($_POST['apbridge_enable'] == "yes") {
+ if (!is_array($wancfg['wireless']['apbridge'])) {
+ $wancfg['wireless']['apbridge'] = array();
+ }
+ $wancfg['wireless']['apbridge']['enable'] = $_POST['apbridge_enable'] = true;
+ } else if (isset($wancfg['wireless']['apbridge']['enable'])) {
+ unset($wancfg['wireless']['apbridge']['enable']);
+ }
+ if ($_POST['standard'] == "11g Turbo" || $_POST['standard'] == "11a Turbo") {
+ if (!is_array($wancfg['wireless']['turbo'])) {
+ $wancfg['wireless']['turbo'] = array();
+ }
+ $wancfg['wireless']['turbo']['enable'] = true;
+ } else if (isset($wancfg['wireless']['turbo']['enable'])) {
+ unset($wancfg['wireless']['turbo']['enable']);
+ }
+ $wancfg['wireless']['wep']['key'] = array();
+ for ($i = 1; $i <= 4; $i++) {
+ if ($_POST['key' . $i]) {
+ $newkey = array();
+ $newkey['value'] = $_POST['key' . $i];
+ if ($_POST['txkey'] == $i) {
+ $newkey['txkey'] = true;
+ }
+ $wancfg['wireless']['wep']['key'][] = $newkey;
+ }
+ }
+ interface_sync_wireless_clones($wancfg, true);
+}
+
+function check_wireless_mode() {
+ global $_POST, $config, $g, $wlan_modes, $wancfg, $if, $wlanif, $wlanbaseif, $old_wireless_mode, $input_errors;
+
+ if ($wancfg['wireless']['mode'] == $_POST['mode']) {
+ return;
+ }
+
+ if (does_interface_exist(interface_get_wireless_clone($wlanbaseif))) {
+ $clone_count = 1;
+ } else {
+ $clone_count = 0;
+ }
+ if (isset($config['wireless']['clone']) && is_array($config['wireless']['clone'])) {
+ foreach ($config['wireless']['clone'] as $clone) {
+ if ($clone['if'] == $wlanbaseif) {
+ $clone_count++;
+ }
+ }
+ }
+ if ($clone_count > 1) {
+ $old_wireless_mode = $wancfg['wireless']['mode'];
+ $wancfg['wireless']['mode'] = $_POST['mode'];
+ if (!interface_wireless_clone("{$wlanif}_", $wancfg)) {
+ $input_errors[] = sprintf(gettext("Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode."), $wlan_modes[$wancfg['wireless']['mode']]);
+ } else {
+ mwexec("/sbin/ifconfig " . escapeshellarg($wlanif) . "_ destroy");
+ }
+ $wancfg['wireless']['mode'] = $old_wireless_mode;
+ }
+}
+
+// Find all possible media options for the interface
+$mediaopts_list = array();
+$intrealname = $config['interfaces'][$if]['if'];
+exec("/sbin/ifconfig -m $intrealname | grep \"media \"", $mediaopts);
+foreach ($mediaopts as $mediaopt) {
+ preg_match("/media (.*)/", $mediaopt, $matches);
+ if (preg_match("/(.*) mediaopt (.*)/", $matches[1], $matches1)) {
+ // there is media + mediaopt like "media 1000baseT mediaopt full-duplex"
+ array_push($mediaopts_list, $matches1[1] . " " . $matches1[2]);
+ } else {
+ // there is only media like "media 1000baseT"
+ array_push($mediaopts_list, $matches[1]);
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), $pconfig['descr']);
+$shortcut_section = "interfaces";
+
+$closehead = false;
+include("head.inc");
+$types4 = array("none" => gettext("None"), "staticv4" => gettext("Static IPv4"), "dhcp" => gettext("DHCP"), "ppp" => gettext("PPP"), "pppoe" => gettext("PPPoE"), "pptp" => gettext("PPTP"), "l2tp" => gettext("L2TP"));
+$types6 = array("none" => gettext("None"), "staticv6" => gettext("Static IPv6"), "dhcp6" => gettext("DHCP6"), "slaac" => gettext("SLAAC"), "6rd" => gettext("6rd Tunnel"), "6to4" => gettext("6to4 Tunnel"), "track6" => gettext("Track Interface"));
+
+?>
+
+<script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script>
+<link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" />
+<script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script>
+<link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/>
+
+<script type="text/javascript">
+//<![CDATA[
+ function updateType(t) {
+ switch (t) {
+ case "none": {
+ jQuery('#staticv4, #dhcp, #pppoe, #pptp, #ppp').hide();
+ break;
+ }
+ case "staticv4": {
+ jQuery('#none, #dhcp, #pppoe, #pptp, #ppp').hide();
+ break;
+ }
+ case "dhcp": {
+ jQuery('#none, #staticv4, #pppoe, #pptp, #ppp').hide();
+ break;
+ }
+ case "ppp": {
+ jQuery('#none, #staticv4, #dhcp, #pptp, #pppoe').hide();
+ country_list();
+ break;
+ }
+ case "pppoe": {
+ jQuery('#none, #staticv4, #dhcp, #pptp, #ppp').hide();
+ break;
+ }
+ case "l2tp":
+ case "pptp": {
+ jQuery('#none, #staticv4, #dhcp, #pppoe, #ppp').hide();
+ jQuery('#pptp').show();
+ break;
+ }
+ }
+ if (t != "l2tp" && t != "pptp") {
+ jQuery('#'+t).show();
+ }
+ }
+ function updateTypeSix(t) {
+ if (!isNaN(t[0])) t = '_' + t;
+ switch (t) {
+ case "none": {
+ jQuery('#staticv6, #dhcp6, #_6rd, #_6to4, #track6, #slaac').hide();
+ break;
+ }
+ case "staticv6": {
+ jQuery('#none, #dhcp6, #_6rd, #_6to4, #track6, #slaac').hide();
+ break;
+ }
+ case "slaac": {
+ jQuery('#none, #staticv6, #_6rd, #_6to4, #track6, #dhcp6').hide();
+ break;
+ }
+ case "dhcp6": {
+ jQuery('#none, #staticv6, #_6rd, #_6to4, #track6, #slaac').hide();
+ break;
+ }
+ case "_6rd": {
+ jQuery('#none, #dhcp6, #staticv6, #_6to4, #track6, #slaac').hide();
+ break;
+ }
+ case "_6to4": {
+ jQuery('#none, #dhcp6, #staticv6, #_6rd, #track6, #slaac').hide();
+ break;
+ }
+ case "track6": {
+ jQuery('#none, #dhcp6, #staticv6, #_6rd, #_6to4, #slaac').hide();
+ update_track6_prefix();
+ break;
+ }
+ }
+ if (t != "l2tp" && t != "pptp") {
+ jQuery('#'+t).show();
+ }
+ }
+
+ function show_allcfg(obj) {
+ if (obj.checked) {
+ jQuery('#allcfg').show();
+ } else {
+ jQuery('#allcfg').hide();
+ }
+ }
+
+ function show_reset_settings(reset_type) {
+ if (reset_type == 'preset') {
+ jQuery('#pppoepresetwrap').show();
+ jQuery('#pppoecustomwrap').hide();
+ } else if (reset_type == 'custom') {
+ jQuery('#pppoecustomwrap').show();
+ jQuery('#pppoepresetwrap').hide();
+ } else {
+ jQuery('#pppoecustomwrap').hide();
+ jQuery('#pppoepresetwrap').hide();
+ }
+ }
+
+ function show_mon_config() {
+ jQuery("#showmonbox").html('');
+ jQuery('#showmon').css('display', 'block');
+ }
+
+ function openwindow(url) {
+ var oWin = window.open(url, "pfSensePop", "width=620,height=400,top=150,left=150");
+ if (oWin == null || typeof(oWin) == "undefined") {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function country_list() {
+ jQuery('#country').children().remove();
+ jQuery('#provider_list').children().remove();
+ jQuery('#providerplan').children().remove();
+ jQuery.ajax("getserviceproviders.php",{
+ success: function(response) {
+ var responseTextArr = response.split("\n");
+ responseTextArr.sort();
+ responseTextArr.each( function(value) {
+ var option = new Element('option');
+ country = value.split(":");
+ option.text = country[0];
+ option.value = country[1];
+ jQuery('#country').append(option);
+ });
+ }
+ });
+ jQuery('#trcountry').css('display', "table-row");
+ }
+
+ function providers_list() {
+ jQuery('#provider_list').children().remove();
+ jQuery('#providerplan').children().remove();
+ jQuery.ajax("getserviceproviders.php",{
+ type: 'post',
+ data: {country : jQuery('#country').val()},
+ success: function(response) {
+ var responseTextArr = response.split("\n");
+ responseTextArr.sort();
+ responseTextArr.each( function(value) {
+ var option = new Element('option');
+ option.text = value;
+ option.value = value;
+ jQuery('#provider_list').append(option);
+ });
+ }
+ });
+ jQuery('#trprovider').css("display", "table-row");
+ jQuery('#trproviderplan').css("display", "none");
+ }
+
+ function providerplan_list() {
+ jQuery('#providerplan').children().remove();
+ jQuery('#providerplan').append( new Element('option') );
+ jQuery.ajax("getserviceproviders.php",{
+ type: 'post',
+ data: {country : jQuery('#country').val(), provider : jQuery('#provider_list').val()},
+ success: function(response) {
+ var responseTextArr = response.split("\n");
+ responseTextArr.sort();
+ responseTextArr.each( function(value) {
+ if (value != "") {
+ providerplan = value.split(":");
+
+ var option = new Element('option');
+ option.text = providerplan[0] + " - " + providerplan[1];
+ option.value = providerplan[1];
+ jQuery('#providerplan').append(option);
+ }
+ });
+ }
+ });
+ jQuery('#trproviderplan').css("display", "table-row");
+ }
+
+ function prefill_provider() {
+ jQuery.ajax("getserviceproviders.php",{
+ type: 'post',
+ data: {country : jQuery('#country').val(), provider : jQuery('#provider_list').val(), plan : jQuery('#providerplan').val()},
+ success: function(data, textStatus, response) {
+ var xmldoc = response.responseXML;
+ var provider = xmldoc.getElementsByTagName('connection')[0];
+ jQuery('#ppp_username').val('');
+ jQuery('#ppp_password').val('');
+ if (provider.getElementsByTagName('apn')[0].firstChild.data == "CDMA") {
+ jQuery('#phone').val('#777');
+ jQuery('#apn').val('');
+ } else {
+ jQuery('#phone').val('*99#');
+ jQuery('#apn').val(provider.getElementsByTagName('apn')[0].firstChild.data);
+ }
+ ppp_username = provider.getElementsByTagName('ppp_username')[0].firstChild.data;
+ ppp_password = provider.getElementsByTagName('ppp_password')[0].firstChild.data;
+ jQuery('#ppp_username').val(ppp_username);
+ jQuery('#ppp_password').val(ppp_password);
+ }
+ });
+ }
+
+ function update_track6_prefix() {
+ var iface = jQuery("#track6-interface").val();
+ if (iface == null) {
+ return;
+ }
+ var track6_prefix_ids = jQuery('#ipv6-num-prefix-ids-' + iface).val();
+ if (track6_prefix_ids == null) {
+ return;
+ }
+ track6_prefix_ids = parseInt(track6_prefix_ids).toString(16);
+ jQuery('#track6-prefix-id-range').html('(<b>hexadecimal</b> from 0 to ' + track6_prefix_ids + ')');
+ }
+
+//]]>
+</script>
+</head>
+ <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc"); ?>
+ <form action="interfaces.php" method="post" name="iform" id="iform">
+ <?php if ($input_errors) print_input_errors($input_errors); ?>
+ <?php if (is_subsystem_dirty('interfaces')): ?><p>
+ <?php print_info_box_np(sprintf(gettext("The %s configuration has been changed."), $wancfg['descr']) . "</p><p>" . gettext("You must apply the changes in order for them to take effect.") . "</p><p>" . gettext("Don't forget to adjust the DHCP Server range if needed after applying."));?></p><br />
+ <?php endif; ?>
+ <?php if ($savemsg) print_info_box($savemsg); ?>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces">
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabs">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable'] == true) echo "checked=\"checked\""; ?> onclick="show_allcfg(this);" />
+ <strong><?=gettext("Enable Interface"); ?></strong>
+ </td>
+ </tr>
+ </table>
+ <div style="display:none;" id="allcfg">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="allcfg">
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="30" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /><span class="vexpl"><?= gettext("Enter a description (name) for the interface here."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="middle" class="vncell"><strong><?=gettext("IPv4 Configuration Type"); ?></strong></td>
+ <td class="vtable">
+ <select name="type" onchange="updateType(this.value);" <?php echo $type_disabled; ?> class="formselect" id="type">
+ <?php
+ foreach ($types4 as $key => $opt) {
+ echo "<option onclick=\"updateType('{$key}');\"";
+ if ($key == $pconfig['type']) {
+ echo " selected=\"selected\"";
+ }
+ echo " value=\"{$key}\" >" . htmlspecialchars($opt);
+ echo "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="middle" class="vncell"><strong><?=gettext("IPv6 Configuration Type"); ?></strong></td>
+ <td class="vtable">
+ <select name="type6" onchange="updateTypeSix(this.value);" <?php echo $type_disabled; ?> class="formselect" id="type6">
+ <?php
+ foreach ($types6 as $key => $opt) {
+ echo "<option onclick=\"updateTypeSix('{$key}');\"";
+ if ($key == $pconfig['type6']) {
+ echo " selected=\"selected\"";
+ }
+ echo " value=\"{$key}\" >" . htmlspecialchars($opt);
+ echo "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("MAC address"); ?></td>
+ <td class="vtable">
+ <input name="spoofmac" type="text" class="formfld unknown" id="spoofmac" size="30" value="<?=htmlspecialchars($pconfig['spoofmac']);?>" />
+ <br />
+ <?=gettext("This field can be used to modify (\"spoof\") the MAC " .
+ "address of this interface"); ?><br />
+ <?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx " .
+ "or leave blank"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("MTU"); ?></td>
+ <td class="vtable">
+ <input name="mtu" type="text" class="formfld unknown" id="mtu" size="8" value="<?=htmlspecialchars($pconfig['mtu']);?>" />
+ <br />
+ <?php
+ print gettext("If you leave this field blank, the adapter's default MTU will " .
+ "be used. This is typically 1500 bytes but can vary in some circumstances.");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("MSS"); ?></td>
+ <td class="vtable">
+ <input name="mss" type="text" class="formfld unknown" id="mss" size="8" value="<?=htmlspecialchars($pconfig['mss']);?>" />
+ <br />
+ <?=gettext("If you enter a value in this field, then MSS clamping for " .
+ "TCP connections to the value entered above minus 40 (TCP/IP " .
+ "header size) will be in effect."); ?>
+ </td>
+ </tr>
+ <?php
+ if (count($mediaopts_list) > 0) {
+ $mediaopt_from_config = $config['interfaces'][$if]['media'] . ' ' . $config['interfaces'][$if]['mediaopt'];
+ echo "<tr>";
+ echo '<td valign="top" class="vncell">' . gettext("Speed and duplex") . '</td>';
+ echo '<td class="vtable">';
+ echo '<div id="showadvmediabox"';
+ if ($mediaopt_from_config != 'autoselect ' && $mediaopt_from_config != ' ') {
+ echo " style='display:none'>";
+ } else {
+ echo '>';
+ }
+ echo '<input type="button" onclick="show_advanced_media()" value="' . gettext("Advanced") . '" /> - ' . gettext("Show advanced option");
+ echo "</div>";
+ echo '<div id="showmediaadv" ';
+ if ($mediaopt_from_config == 'autoselect ' || $mediaopt_from_config == ' ') {
+ echo "style='display:none'>";
+ } else {
+ echo '>';
+ }
+ echo '<select name="mediaopt" class="formselect" id="mediaopt">';
+ print "<option value=\"\">Default (no preference, typically autoselect)</option>";
+ print "<option value=\"\">------- Media Supported by this interface -------</option>";
+ foreach ($mediaopts_list as $mediaopt) {
+ if ($mediaopt != rtrim($mediaopt_from_config)) {
+ print "<option value=\"$mediaopt\">" . gettext("$mediaopt") . "</option>";
+ } else {
+ print "<option value=\"$mediaopt\" selected=\"selected\">" . gettext("$mediaopt") . "</option>";
+ }
+ }
+ echo '</select><br />';
+ echo gettext("Here you can explicitly set speed and duplex mode for this interface. WARNING: You MUST leave this set to autoselect (automatically negotiate speed) unless the port this interface connects to has its speed and duplex forced.");
+ echo '</div>';
+ echo '</td>';
+ echo '</tr>';
+ }
+ ?>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr style="display:none;" id="none">
+ <td style="display:none;"></td>
+ </tr>
+ <tr style="display:none;" id="staticv4">
+ <td colspan="2" style="padding:0px;">
+ <a name="gatewaysection"></a>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="staticv4">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv4 configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IPv4 address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>" />
+ /
+ <select name="subnet" class="formselect" id="subnet">
+ <?php
+ for ($i = 32; $i > 0; $i--) {
+ echo "<option value=\"{$i}\" ";
+ if ($i == $pconfig['subnet']) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Upstream Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="gateway" class="formselect" id="gateway">
+ <option value="none" selected="selected"><?=gettext("None"); ?></option>
+ <?php
+ if (count($a_gateways) > 0) {
+ foreach ($a_gateways as $gateway) {
+ if (($gateway['interface'] == $if) && (is_ipaddrv4($gateway['gateway']))) {
+ ?>
+ <option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gateway']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
+ </option>
+ <?php
+ }
+ }
+ }
+ ?>
+ </select>
+ - or <strong><a onclick="show_add_gateway();" href="#gatewaysection"><?=gettext("add a new one."); ?></a></strong>
+ <br />
+ <div id='addgwbox'>
+ <?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above."); ?><br />
+ <?=gettext("On local LANs the upstream gateway should be \"none\"."); ?>
+ </div>
+ <div id='notebox'>
+ </div>
+ <div id="status">
+ </div>
+ <div style="display:none" id="addgateway">
+ <p>&nbsp;</p>
+ <table border="1" class="addgatewaybox" summary="addgateway">
+ <tr>
+ <td>
+ <table class="addgatewaybox" cellpadding="1" cellspacing="1" summary="addgateway">
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2"><center><b><font color="white"><?=gettext("Add new gateway:"); ?></font></b></center></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <?php
+ if ($if == "wan" || $if == "WAN") {
+ $checked = " checked=\"checked\"";
+ }
+ ?>
+ <tr>
+ <td width="45%" align="right"><font color="white"><?=gettext("Default gateway:"); ?></font></td><td><input type="checkbox" id="defaultgw" name="defaultgw"<?=$checked?> /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></font></td><td><input id="name" name="name" value="<?=$wancfg['descr'] . "GW"?>" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway IPv4:"); ?></font></td><td><input id="gatewayip" name="gatewayip" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescr" name="gatewaydescr" /></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <center>
+ <div id='savebuttondiv'>
+ <input id="gwsave" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave();' />
+ <input id="gwcancel" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway();' />
+ </div>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="staticv6">
+ <td colspan="2" style="padding:0px;">
+ <a name="gatewayv6section"></a>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="staticv6">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv6 configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IPv6 address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>" />
+ /
+ <select name="subnetv6" class="formselect" id="subnetv6">
+ <?php
+ for ($i = 128; $i > 0; $i--) {
+ echo "<option value=\"{$i}\" ";
+ if ($i == $pconfig['subnetv6']) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Upstream Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="gatewayv6" class="formselect" id="gatewayv6">
+ <option value="none" selected="selected"><?=gettext("None"); ?></option>
+ <?php
+ if (count($a_gateways) > 0) {
+ foreach ($a_gateways as $gateway) {
+ if (($gateway['interface'] == $if) && (is_ipaddrv6($gateway['gateway']))) {
+ ?>
+ <option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gatewayv6']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
+ </option>
+ <?php
+ }
+ }
+ }
+ ?>
+ </select>
+ - or <strong><a onclick="show_add_gateway_v6();" href="#gatewayv6section"><?=gettext("add a new one."); ?></a></strong>
+ <br />
+ <div id='addgwboxv6'>
+ <?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above."); ?><br />
+ <?=gettext("On local LANs the upstream gateway should be \"none\"."); ?>
+ </div>
+ <div id='noteboxv6'>
+ </div>
+ <div id="statusv6">
+ </div>
+ <div style="display:none" id="addgatewayv6">
+ <p>&nbsp;</p>
+ <table border="1" class="addgatewaybox" summary="addgatewayv6">
+ <tr>
+ <td>
+ <table class="addgatewaybox" cellpadding="1" cellspacing="1" summary="addgatewayv6">
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2"><center><b><font color="white"><?=gettext("Add new v6 gateway:"); ?></font></b></center></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <?php
+ if ($if == "wan" || $if == "WAN") {
+ $checked = " checked=\"checked\"";
+ }
+ ?>
+ <tr>
+ <td width="45%" align="right"><font color="white"><?=gettext("Default v6 gateway:"); ?></font></td><td><input type="checkbox" id="defaultgwv6" name="defaultgwv6"<?=$checked?> /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway Name IPv6:"); ?></font></td><td><input id="namev6" name="namev6" value="<?=$wancfg['descr'] . "GWv6"?>" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway IPv6:"); ?></font></td><td><input id="gatewayipv6" name="gatewayipv6" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescrv6" name="gatewaydescrv6" /></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <center>
+ <div id='savebuttondivv6'>
+ <input id="gwsavev6" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave_v6();' />
+ <input id="gwcancelv6" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway_v6();' />
+ </div>
+ </center>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="dhcp">
+ <td colspan="2" style="padding: 0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dhcp">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP client configuration &nbsp; &nbsp; " .
+ ' <input name="adv_dhcp_config_advanced" type="checkbox" id="adv_dhcp_config_advanced" value="" onclick="show_adv_dhcp_config(this)" /> ' .
+ " Advanced &nbsp; &nbsp; " .
+ ' <input name="adv_dhcp_config_file_override" type="checkbox" id="adv_dhcp_config_file_override" value="" onclick="show_adv_dhcp_config(this)" /> ' .
+ " Config File Override &nbsp; &nbsp; "); ?>
+ </td>
+ </tr>
+ <!-- Uncomment to expose DHCP+ in GUI
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable DHCP+"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcp_plus" type="checkbox" value="yes" <?php if ($pconfig['dhcp_plus'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable DHCP+L2TP or DHCP+PPTP."); ?></strong>
+ <br />
+ <?=gettext("Status changes on this interface will trigger reconfiguration (if necessary) of the associated PPTP/L2TP link."); ?>
+ </td>
+ </tr>
+ -->
+ <tr style='display:none' id="show_basic_dhcphostname">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hostname"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcphostname" type="text" class="formfld unknown" id="dhcphostname" size="40" value="<?=htmlspecialchars($pconfig['dhcphostname']);?>" />
+ <br />
+ <?=gettext("The value in this field is sent as the DHCP client identifier " .
+ "and hostname when requesting a DHCP lease. Some ISPs may require " .
+ "this (for client identification)."); ?>
+ </td>
+ </tr>
+ <tr style='display:none' id="show_basic_dhcpalias-address">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Alias IPv4 address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="alias-address" type="text" class="formfld unknown" id="alias-address" size="20" value="<?=htmlspecialchars($pconfig['alias-address']);?>" />
+ <select name="alias-subnet" class="formselect" id="alias-subnet">
+ <?php
+ for ($i = 32; $i > 0; $i--) {
+ echo "<option value=\"{$i}\" ";
+ if ($i == $pconfig['alias-subnet']) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ <?=gettext("The value in this field is used as a fixed alias IPv4 address by the " .
+ "DHCP client."); ?>
+ </td>
+ </tr>
+ <tr style='display:none' id="show_basic_dhcprejectlease">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Reject Leases From"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcprejectfrom" type="text" class="formfld unknown" id="dhcprejectfrom" size="20" value="<?=htmlspecialchars($pconfig['dhcprejectfrom']);?>" />
+ <br />
+ <?=gettext("If there is a certain upstream DHCP server that should be ignored, place the IP address or subnet of the DHCP server to be ignored here."); ?>
+ <?=gettext("This is useful for rejecting leases from cable modems that offer private IPs when they lose upstream sync."); ?>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp_protocol_timing">
+ <td width="22%" valign="top" class="vncell"><a target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#PROTOCOL_TIMING"><?=gettext("Protocol Timing"); ?></a></td>
+ <td width="48%" class="vtable">
+ Timeout: <input name="adv_dhcp_pt_timeout" type="text" class="formfld unknown" id="adv_dhcp_pt_timeout" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_timeout']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+ Retry: <input name="adv_dhcp_pt_retry" type="text" class="formfld unknown" id="adv_dhcp_pt_retry" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_retry']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+ Select Timeout: <input name="adv_dhcp_pt_select_timeout" type="text" class="formfld unknown" id="adv_dhcp_pt_select_timeout" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_select_timeout']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+
+ &nbsp; &nbsp; &nbsp; &nbsp;
+ Presets: &nbsp;
+ <input name="adv_dhcp_pt_values" type="radio" value="DHCP" id="customdhcpptdhcpdefaults" onclick="customdhcpptsetvalues(this, iform);" />FreeBSD Default &nbsp;
+ <input name="adv_dhcp_pt_values" type="radio" value="Clear" id="customdhcpptclear" onclick="customdhcpptsetvalues(this, iform);" />Clear
+
+ <br />
+ Reboot: <input name="adv_dhcp_pt_reboot" type="text" class="formfld unknown" id="adv_dhcp_pt_reboot" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_reboot']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+ Backoff Cutoff: <input name="adv_dhcp_pt_backoff_cutoff" type="text" class="formfld unknown" id="adv_dhcp_pt_backoff_cutoff" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_backoff_cutoff']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+ Initial Interval: <input name="adv_dhcp_pt_initial_interval" type="text" class="formfld unknown" id="adv_dhcp_pt_initial_interval" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp_pt_initial_interval']);?>" onchange="customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, '');" />
+
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+ <input name="adv_dhcp_pt_values" type="radio" value="pfSense" id="customdhcpptpfsensedefaults" onclick="customdhcpptsetvalues(this, iform);" />pfSense Default &nbsp;
+ <input name="adv_dhcp_pt_values" type="radio" value="SavedCfg" checked="checked" id="customdhcpptsavedcfg" onclick="customdhcpptsetvalues(this, iform);" />Saved Cfg
+
+ <br />
+ <?=gettext("The values in these fields are DHCP protocol timings used when requesting a lease. <br /> "); ?>
+
+ <script type="text/javascript">
+ //<![CDATA[
+ function customdhcpptcheckradiobuton(T, BUTTON) {
+ for (var i = 0; i < T.length; i++) {
+ T[i].checked = false;
+ if (T[i].value == BUTTON) T[i].checked = true;
+ }
+ T.value = BUTTON;
+ }
+
+ function customdhcpptsetvalues(T, FORM) {
+ // timeout, retry, select-timeout, reboot, backoff-cutoff, initial-interval
+ if (T.value == "DHCP") customdhcpptsetvaluesnow(T, FORM, "60", "300", "0", "10", "120", "10");
+ if (T.value == "pfSense") customdhcpptsetvaluesnow(T, FORM, "60", "15", "0", "", "", "1");
+ if (T.value == "SavedCfg") customdhcpptsetvaluesnow(T, FORM, "<?=htmlspecialchars($pconfig['adv_dhcp_pt_timeout']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_retry']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_select_timeout']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_reboot']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_backoff_cutoff']);?>", "<?=htmlspecialchars($pconfig['adv_dhcp_pt_initial_interval']);?>");
+ if (T.value == "Clear") customdhcpptsetvaluesnow(T, FORM, "", "", "", "", "", "");
+ }
+
+ function customdhcpptsetvaluesnow(T, FORM, timeout, retry, selecttimeout, reboot, backoffcutoff, initialinterval) {
+ FORM.adv_dhcp_pt_timeout.value = timeout;
+ FORM.adv_dhcp_pt_retry.value = retry;
+ FORM.adv_dhcp_pt_select_timeout.value = selecttimeout;
+ FORM.adv_dhcp_pt_reboot.value = reboot;
+ FORM.adv_dhcp_pt_backoff_cutoff.value = backoffcutoff;
+ FORM.adv_dhcp_pt_initial_interval.value = initialinterval;
+
+ FORM.adv_dhcp_pt_values.value = T.value;
+ }
+
+ <!-- Set the adv_dhcp_pt_values radio button from saved config -->
+ var RADIOBUTTON_VALUE = "<?=htmlspecialchars($pconfig['adv_dhcp_pt_values']);?>";
+ if (RADIOBUTTON_VALUE == "") RADIOBUTTON_VALUE = "SavedCfg";
+ customdhcpptcheckradiobuton(document.iform.adv_dhcp_pt_values, RADIOBUTTON_VALUE);
+ //]]>
+ </script>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp_lease_requirements_and_requests">
+ <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Lease Requirements and Requests</a>"); ?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Send</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
+ <input name="adv_dhcp_send_options" type="text" class="formfld unknown" id="adv_dhcp_send_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_send_options']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP options to be sent when requesting a DHCP lease. [option declaration [, ...]] <br />" .
+ "Value Substitutions: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
+ "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
+ "Some ISPs may require certain options be or not be sent. "); ?>
+ <hr/>
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Request</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
+ <input name="adv_dhcp_request_options" type="text" class="formfld unknown" id="adv_dhcp_request_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_request_options']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP option 55 to be sent when requesting a DHCP lease. [option [, ...]] <br />" .
+ "Some ISPs may require certain options be or not be requested. "); ?>
+ <hr/>
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#LEASE_REQUIREMENTS_AND_REQUESTS\">Require</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Options</a>"); ?><br />
+ <input name="adv_dhcp_required_options" type="text" class="formfld unknown" id="adv_dhcp_required_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_required_options']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP options required by the client when requesting a DHCP lease. [option [, ...]] "); ?>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp_option_modifiers">
+ <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp-options&amp;sektion=5\">Option</a> <a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5#OPTION_MODIFIERS\">Modifiers</a>"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="adv_dhcp_option_modifiers" type="text" class="formfld unknown" id="adv_dhcp_option_modifiers" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_option_modifiers']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP option modifiers applied to obtained DHCP lease. [modifier option declaration [, ...]] <br /> " .
+ "modifiers: (default, supersede, prepend, append)"); ?>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp_config_file_override">
+ <td width="22%" valign="top" class="vncell"><?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhclient.conf&amp;sektion=5\">Configuration File</a> Override"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="adv_dhcp_config_file_override_path" type="text" class="formfld unknown" id="adv_dhcp_config_file_override_path" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp_config_file_override_path']);?>" />
+ <br />
+ <?=gettext("The value in this field is the full absolute path to a DHCP client configuration file. [/[dirname/[.../]]filename[.ext]] <br /> " .
+ "Value Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
+ "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
+ "Some ISPs may require certain options be or not be sent. "); ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+
+ </table>
+
+ <script type="text/javascript">
+ //<![CDATA[
+ function show_adv_dhcp_config(T) {
+
+ if (T.checked) {
+ T.value = "Selected";
+ } else {
+ T.value = "";
+ }
+
+ if (document.iform.adv_dhcp_config_file_override.checked) {
+ show_hide_adv_dhcp('none', 'none', '');
+ } else if (document.iform.adv_dhcp_config_advanced.checked) {
+ show_hide_adv_dhcp('', '', 'none');
+ } else {
+ show_hide_adv_dhcp('', 'none', 'none');
+ }
+ }
+
+ function show_hide_adv_dhcp(basic, advanced, override) {
+
+ document.getElementById("show_basic_dhcphostname").style.display = basic;
+ document.getElementById("show_basic_dhcpalias-address").style.display = basic;
+ document.getElementById("show_basic_dhcprejectlease").style.display = basic;
+
+ document.getElementById("show_adv_dhcp_protocol_timing").style.display = advanced;
+ document.getElementById("show_adv_dhcp_lease_requirements_and_requests").style.display = advanced;
+ document.getElementById("show_adv_dhcp_option_modifiers").style.display = advanced;
+
+ document.getElementById("show_adv_dhcp_config_file_override").style.display = override;
+ }
+
+ <!-- Set the adv_dhcp_config_advanced checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp_config_advanced']);?>" == "Selected") {
+ document.iform.adv_dhcp_config_advanced.checked = true;
+ }
+ show_adv_dhcp_config(document.iform.adv_dhcp_config_advanced);
+
+ <!-- Set the adv_dhcp_config_file_override checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp_config_file_override']);?>" == "Selected") {
+ document.iform.adv_dhcp_config_file_override.checked = true;
+ }
+ show_adv_dhcp_config(document.iform.adv_dhcp_config_file_override);
+ //]]>
+ </script>
+
+ </td>
+ </tr>
+ <tr style="display:none;" id="dhcp6">
+ <td colspan="2" style="padding: 0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dhcp6">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP6 client configuration &nbsp; &nbsp; " .
+ ' <input name="adv_dhcp6_config_advanced" type="checkbox" id="adv_dhcp6_config_advanced" value="" onclick="show_adv_dhcp6_config(this)" /> ' .
+ " Advanced &nbsp; &nbsp; " .
+ ' <input name="adv_dhcp6_config_file_override" type="checkbox" id="adv_dhcp6_config_file_override" value="" onclick="show_adv_dhcp6_config(this)" /> ' .
+ " Config File Override &nbsp; &nbsp; "); ?>
+ </td>
+ </tr>
+ <!--- Leave commented out for now
+ <tr style='display:none' id="basicdhcp6_show_dhcp6_duid">
+ <td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Unique Identifier (DUID)"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcp6-duid" type="text" class="formfld unknown" id="dhcp6-duid" size="40" value="<?=htmlspecialchars($pconfig['dhcp6-duid']);?>" />
+ <br />
+ <?=gettext("The value in this field is sent as the DHCPv6 client identifier " .
+ "when requesting a DHCPv6 lease."); ?><br />
+ <?php if (is_readable("/var/db/dhcp6c_duid")) {
+ // $current_duid = file_get_contents("/var/db/dhcp6c_duid");
+ }
+ printf(gettext("The current DUID is: '%s'"), $current_duid);
+ // hexdump -e '"%07.7_ax " 1/2 "%04x" " " 14/1 "%02x:" "\n"'
+ ?>
+ </td>
+ </tr>
+ -->
+ <tr style='display:none' id="basicdhcp6_use_pppoeinterface">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Use IPv4 connectivity as parent interface"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcp6usev4iface" type="checkbox" id="dhcp6usev4iface" value="yes" <?php if ($pconfig['dhcp6usev4iface'] == true) echo "checked=\"checked\""; ?> />
+ <?=gettext("Request a IPv6 prefix/information through the IPv4 connectivity link"); ?>
+ </td>
+ </tr>
+ <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_only">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Request only an IPv6 prefix"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcp6prefixonly" type="checkbox" id="dhcp6prefixonly" value="yes" <?php if ($pconfig['dhcp6prefixonly'] == true) echo "checked=\"checked\""; ?> />
+ <?=gettext("Only request an IPv6 prefix, do not request an IPv6 address"); ?>
+ </td>
+ </tr>
+ <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_delegation_size">
+ <td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Prefix Delegation size"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dhcp6-ia-pd-len" class="formselect" id="dhcp6-ia-pd-len">
+ <?php
+ $sizes = array("none" => "None", 16 => "48", 12 => "52", 8 => "56", 4 => "60", 3 => "61", 2 => "62", 1 => "63", 0 => "64");
+ foreach ($sizes as $bits => $length) {
+ echo "<option value=\"{$bits}\" ";
+ if (is_numeric($pconfig['dhcp6-ia-pd-len']) && ($bits == $pconfig['dhcp6-ia-pd-len'])) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $length . "</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("The value in this field is the delegated prefix length provided by the DHCPv6 server. Normally specified by the ISP."); ?>
+ </td>
+ </tr>
+ <tr style='display:none' id="basicdhcp6_show_dhcp6_prefix_send_hint">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Send IPv6 prefix hint"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dhcp6-ia-pd-send-hint" type="checkbox" id="dhcp6-ia-pd-send-hint" value="yes" <?php if ($pconfig['dhcp6-ia-pd-send-hint'] == true) echo "checked=\"checked\""; ?> />
+ <?=gettext("Send an IPv6 prefix hint to indicate the desired prefix size for delegation"); ?>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_interface_statement">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Interface_statement\">Interface Statement</a>"); ?>
+ <br /><br />
+ <input name="adv_dhcp6_interface_statement_information_only_enable" type="checkbox" id="adv_dhcp6_interface_statement_information_only_enable" value="" onclick="show_adv_dhcp6_config(this)" />
+ <?=gettext("Information Only"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <?=gettext("Send Options"); ?><br />
+ <input name="adv_dhcp6_interface_statement_send_options" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_send_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_send_options']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP send options to be sent when requesting a DHCP lease. [option declaration [, ...]] <br />" .
+ "Value Substitutions: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
+ "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
+ "Some DHCP services may require certain options be or not be sent. "); ?>
+ <br />
+ <br />
+ <?=gettext("Request Options"); ?><br />
+ <input name="adv_dhcp6_interface_statement_request_options" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_request_options" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_request_options']);?>" />
+ <br />
+ <?=gettext("The values in this field are DHCP request options to be sent when requesting a DHCP lease. [option [, ...]] <br />" .
+ "Some DHCP services may require certain options be or not be requested. "); ?>
+ <br />
+ <br />
+ <?=gettext("Script"); ?><br />
+ <input name="adv_dhcp6_interface_statement_script" type="text" class="formfld unknown" id="adv_dhcp6_interface_statement_script" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_script']);?>" />
+ <br />
+ <?=gettext("The value in this field is the absolute path to a script invoked on certain conditions including when a reply message is received. <br />" .
+ "[/[dirname/[.../]]filename[.ext]] "); ?>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_id_assoc_statement">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Identity_association_statement\">Identity Association Statement</a>"); ?>
+ </td>
+ <td width="78%" class="vtable">
+
+ <input name="adv_dhcp6_id_assoc_statement_address_enable" type="checkbox" id="adv_dhcp6_id_assoc_statement_address_enable" value="" onclick="show_adv_dhcp6_config(this);" />
+ <?=gettext("Non-Temporary Address Allocation"); ?>
+ <div style='display:none' id="show_adv_dhcp6_id_assoc_statement_address">
+ <?=gettext("id-assoc na"); ?>
+ <?=gettext("<i>ID</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_address_id" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_id']);?>" />
+ <br />
+ <?=gettext("Address"); ?>
+ <?=gettext("<i>ipv6-address</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_address" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address" size="34" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address']);?>" />
+ <?=gettext("<i>pltime</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_address_pltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_pltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_pltime']);?>" />
+ <?=gettext("<i>vltime</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_address_vltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_address_vltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_vltime']);?>" />
+ </div>
+ <hr/>
+
+ <input name="adv_dhcp6_id_assoc_statement_prefix_enable" type="checkbox" id="adv_dhcp6_id_assoc_statement_prefix_enable" value="" onclick="show_adv_dhcp6_config(this)" />
+ <?=gettext("Prefix Delegation"); ?>
+ <div style='display:none' id="show_adv_dhcp6_id_assoc_statement_prefix">
+ <?=gettext("id-assoc pd"); ?>
+ <?=gettext("<i>ID</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_prefix_id" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_id']);?>" />
+ <br />
+ <?=gettext("Prefix"); ?>
+ <?=gettext("<i>ipv6-prefix</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_prefix" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix" size="37" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix']);?>" />
+ <?=gettext("<i>pltime</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_prefix_pltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_pltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_pltime']);?>" />
+ <?=gettext("<i>vltime</i>"); ?>
+ <input name="adv_dhcp6_id_assoc_statement_prefix_vltime" type="text" class="formfld unknown" id="adv_dhcp6_id_assoc_statement_prefix_vltime" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_vltime']);?>" />
+ </div>
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_prefix_interface_statement">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Prefix_interface_statement\">Prefix Interface Statement</a>"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <?=gettext("Prefix Interface "); ?>
+ <?=gettext("<i>sla-id</i>"); ?>
+ <input name="adv_dhcp6_prefix_interface_statement_sla_id" type="text" class="formfld unknown" id="adv_dhcp6_prefix_interface_statement_sla_id" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_prefix_interface_statement_sla_id']);?>" />
+ <?=gettext("<i>sla-len</i>"); ?>
+ <input name="adv_dhcp6_prefix_interface_statement_sla_len" type="text" class="formfld unknown" id="adv_dhcp6_prefix_interface_statement_sla_len" size="3" value="<?=htmlspecialchars($pconfig['adv_dhcp6_prefix_interface_statement_sla_len']);?>" />
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_authentication_statement">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Authentication_statement\">Authentication Statement</a>"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <?=gettext("<i>authname</i>"); ?>
+ <input name="adv_dhcp6_authentication_statement_authname" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_authname" size="10" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_authname']);?>" />
+ <?=gettext("<i>protocol</i>"); ?>
+ <input name="adv_dhcp6_authentication_statement_protocol" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_protocol" size="6" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_protocol']);?>" />
+ <?=gettext("<i>algorithm</i>"); ?>
+ <input name="adv_dhcp6_authentication_statement_algorithm" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_algorithm" size="8" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_algorithm']);?>" />
+ <?=gettext("<i>rdm</i>"); ?>
+ <input name="adv_dhcp6_authentication_statement_rdm" type="text" class="formfld unknown" id="adv_dhcp6_authentication_statement_rdm" size="9" value="<?=htmlspecialchars($pconfig['adv_dhcp6_authentication_statement_rdm']);?>" />
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_key_info_statement">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports#Keyinfo_statement\">Keyinfo Statement</a>"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <?=gettext("<i>keyname</i>"); ?>
+ <input name="adv_dhcp6_key_info_statement_keyname" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_keyname" size="27" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_keyname']);?>" />
+ <?=gettext("<i>realm</i>"); ?>
+ <input name="adv_dhcp6_key_info_statement_realm" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_realm" size="37" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_realm']);?>" />
+ <br />
+ <?=gettext("<i>keyid</i>"); ?>
+ <input name="adv_dhcp6_key_info_statement_keyid" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_keyid" size="2" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_keyid']);?>" />
+ <?=gettext("<i>secret</i>"); ?>
+ <input name="adv_dhcp6_key_info_statement_secret" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_secret" size="36" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_secret']);?>" />
+ <?=gettext("<i>expire</i>"); ?>
+ <input name="adv_dhcp6_key_info_statement_expire" type="text" class="formfld unknown" id="adv_dhcp6_key_info_statement_expire" size="15" value="<?=htmlspecialchars($pconfig['adv_dhcp6_key_info_statement_expire']);?>" />
+ </td>
+ </tr>
+
+ <tr style='display:none' id="show_adv_dhcp6_config_file_override">
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("<a target=\"FreeBSD_DHCP\" href=\"http://www.freebsd.org/cgi/man.cgi?query=dhcp6c.conf&amp;sektion=5&amp;apropos=0&amp;manpath=FreeBSD+10.1-RELEASE+and+Ports\">Configuration File</a> Override"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <input name="adv_dhcp6_config_file_override_path" type="text" class="formfld unknown" id="adv_dhcp6_config_file_override_path" size="86" value="<?=htmlspecialchars($pconfig['adv_dhcp6_config_file_override_path']);?>" />
+ <br />
+ <?=gettext("The value in this field is the full absolute path to a DHCP client configuration file. [/[dirname/[.../]]filename[.ext]] <br /> " .
+ "Value Substitutions in Config File: {interface}, {hostname}, {mac_addr_asciiCD}, {mac_addr_hexCD} <br />" .
+ "Where C is U(pper) or L(ower) Case, and D is \" :-.\" Delimiter (space, colon, hyphen, or period) (omitted for none). <br />" .
+ "Some ISPs may require certain options be or not be sent. "); ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+
+ </table>
+
+ <script type="text/javascript">
+ //<![CDATA[
+ function show_adv_dhcp6_config(T) {
+
+ if (T.checked) {
+ T.value = "Selected";
+ } else {
+ T.value = "";
+ }
+
+ if (document.iform.adv_dhcp6_config_file_override.checked) {
+ show_hide_adv_dhcp6('none', 'none', '');
+ } else if (document.iform.adv_dhcp6_config_advanced.checked) {
+ show_hide_adv_dhcp6('none', '', 'none');
+ } else {
+ show_hide_adv_dhcp6('', 'none', 'none');
+ }
+ }
+
+ function show_hide_adv_dhcp6(basic, advanced, override) {
+
+ document.getElementById("basicdhcp6_use_pppoeinterface").style.display = basic;
+ document.getElementById("basicdhcp6_show_dhcp6_prefix_delegation_size").style.display = basic;
+ document.getElementById("basicdhcp6_show_dhcp6_prefix_send_hint").style.display = basic;
+ document.getElementById("basicdhcp6_show_dhcp6_prefix_only").style.display = basic;
+
+ document.getElementById("show_adv_dhcp6_interface_statement").style.display = advanced;
+ document.getElementById("show_adv_dhcp6_id_assoc_statement").style.display = advanced;
+
+ document.getElementById("show_adv_dhcp6_id_assoc_statement_address").style.display = 'none';
+ if (document.iform.adv_dhcp6_id_assoc_statement_address_enable.checked) {
+ document.getElementById("show_adv_dhcp6_id_assoc_statement_address").style.display = advanced;
+ }
+
+ document.getElementById("show_adv_dhcp6_id_assoc_statement_prefix").style.display = 'none';
+ document.getElementById("show_adv_dhcp6_prefix_interface_statement").style.display = 'none';
+ if (document.iform.adv_dhcp6_id_assoc_statement_prefix_enable.checked) {
+ document.getElementById("show_adv_dhcp6_id_assoc_statement_prefix").style.display = advanced;
+ document.getElementById("show_adv_dhcp6_prefix_interface_statement").style.display = advanced;
+ }
+
+ document.getElementById("show_adv_dhcp6_authentication_statement").style.display = advanced;
+ document.getElementById("show_adv_dhcp6_key_info_statement").style.display = advanced;
+
+ document.getElementById("show_adv_dhcp6_config_file_override").style.display = override;
+ }
+
+ <!-- Set the adv_dhcp6_config_advanced checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp6_config_advanced']);?>" == "Selected") {
+ document.iform.adv_dhcp6_config_advanced.checked = true;
+ }
+ show_adv_dhcp6_config(document.iform.adv_dhcp6_config_advanced);
+
+ <!-- Set the adv_dhcp6_config_file_override checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp6_config_file_override']);?>" == "Selected") {
+ document.iform.adv_dhcp6_config_file_override.checked = true;
+ }
+ show_adv_dhcp6_config(document.iform.adv_dhcp6_config_file_override);
+
+ <!-- Set the adv_dhcp6_interface_statement_information_only_enable checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp6_interface_statement_information_only_enable']);?>" == "Selected") {
+ document.iform.adv_dhcp6_interface_statement_information_only_enable.checked = true;
+ }
+ show_adv_dhcp6_config(document.iform.adv_dhcp6_interface_statement_information_only_enable);
+
+ <!-- Set the adv_dhcp6_id_assoc_statement_address_enable checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_address_enable']);?>" == "Selected") {
+ document.iform.adv_dhcp6_id_assoc_statement_address_enable.checked = true;
+ }
+ show_adv_dhcp6_config(document.iform.adv_dhcp6_id_assoc_statement_address_enable);
+
+ <!-- Set the adv_dhcp6_id_assoc_statement_prefix_enable checkbox from saved config -->
+ if ("<?=htmlspecialchars($pconfig['adv_dhcp6_id_assoc_statement_prefix_enable']);?>" == "Selected") {
+ document.iform.adv_dhcp6_id_assoc_statement_prefix_enable.checked = true;
+ }
+ show_adv_dhcp6_config(document.iform.adv_dhcp6_id_assoc_statement_prefix_enable);
+ //]]>
+ </script>
+
+ </td>
+ </tr>
+ <tr style="display:none;" id="_6rd">
+ <td colspan="2" style="padding: 0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="6rd">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("6RD Configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("6RD prefix"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="prefix-6rd" type="text" class="formfld unknown" id="prefix-6rd" size="40" value="<?=htmlspecialchars($pconfig['prefix-6rd']);?>" />
+ <br />
+ <?=gettext("The value in this field is the 6RD IPv6 prefix assigned by your ISP. e.g. '2001:db8::/32'") ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("6RD Border Relay"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="gateway-6rd" type="text" class="formfld unknown" id="gateway-6rd" size="40" value="<?=htmlspecialchars($pconfig['gateway-6rd']);?>" />
+ <br />
+ <?=gettext("The value in this field is 6RD IPv4 gateway address assigned by your ISP") ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("6RD IPv4 Prefix length"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="prefix-6rd-v4plen" class="formselect" id="prefix-6rd-v4plen">
+ <?php
+ for ($i = 0; $i < 32; $i++) {
+ echo "<option value=\"{$i}\" ";
+ if (is_numeric($pconfig['prefix-6rd-v4plen']) && ($i == $pconfig['prefix-6rd-v4plen'])) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $i . " bits</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("The value in this field is the 6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means we embed the entire IPv4 address in the 6RD prefix."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="track6">
+ <td colspan="2" style="padding: 0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="track6">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Track IPv6 Interface"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="track6-interface" id='track6-interface' class='formselect' onchange="update_track6_prefix();">
+ <?php
+ $interfaces = get_configured_interface_with_descr(false, true);
+ $dynv6ifs = array();
+ foreach ($interfaces as $iface => $ifacename) {
+ switch ($config['interfaces'][$iface]['ipaddrv6']) {
+ case "6to4":
+ case "6rd":
+ case "dhcp6":
+ $dynv6ifs[$iface] = array(
+ 'name' => $ifacename,
+ 'ipv6_num_prefix_ids' => pow(2, calculate_ipv6_delegation_length($iface)) - 1
+ );
+ break;
+ default:
+ continue;
+ }
+ }
+ $rowIndex = 0;
+ foreach ($dynv6ifs as $iface => $ifacedata) {
+ $rowIndex++;
+ echo "<option value=\"{$iface}\"";
+ if ($iface == $pconfig['track6-interface']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($ifacedata['name']) . "</option>";
+ }
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select> <br />
+ <?php
+ foreach ($dynv6ifs as $iface => $ifacedata) {
+ echo "<input type=\"hidden\" name=\"ipv6-num-prefix-ids-{$iface}\" id=\"ipv6-num-prefix-ids-{$iface}\" value=\"{$ifacedata['ipv6_num_prefix_ids']}\">\n";
+ }
+ ?>
+ <br />
+ <?=gettext("This selects the dynamic IPv6 WAN interface to track for configuration") ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Prefix ID"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($pconfig['track6-prefix-id'] == "") {
+ $pconfig['track6-prefix-id'] = 0;
+ }
+ $track6_prefix_id_hex = sprintf("%x", $pconfig['track6-prefix-id']);
+ ?>
+ <input name="track6-prefix-id--hex" type="text" class="formfld unknown" id="track6-prefix-id--hex" size="8" value="<?= $track6_prefix_id_hex ?>" />
+ <span id="track6-prefix-id-range"></span>
+ <input type="hidden" id="track6-prefix-id-max" value="0"></input>
+ <br />
+ <?= gettext("The value in this field is the (Delegated) IPv6 prefix ID. This determines the configurable network ID based on the dynamic IPv6 connection"); ?>
+ <br />
+ <?= gettext("default value is 0."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="ppp">
+ <td colspan="2" style="padding: 0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="ppp">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("PPP configuration"); ?></td>
+ </tr>
+ <tr id="ppp_provider">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Service Provider"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="service provider">
+ <tr id="trcountry">
+ <td><?=gettext("Country:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="country" id="country" onchange="providers_list()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ <tr id="trprovider" style="display:none">
+ <td><?=gettext("Provider:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="provider_list" id="provider_list" onchange="providerplan_list()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ <tr id="trproviderplan" style="display:none">
+ <td><?=gettext("Plan:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="providerplan" id="providerplan" onchange="prefill_provider()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br /><span class="vexpl"><?=gettext("Select to fill in data for your service provider."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ppp_username" type="text" class="formfld user" id="ppp_username" size="20" value="<?=htmlspecialchars($pconfig['ppp_username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ppp_password" type="password" class="formfld pwd" id="ppp_password" size="20" value="<?=htmlspecialchars($pconfig['ppp_password']);?>" />
+ </td>
+ </tr>
+ <tr id="phone_num">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Phone Number"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="phone" type="text" class="formfld unknown" id="phone" size="12" value="<?=htmlspecialchars($pconfig['phone']);?>" />
+ </td>
+ </tr>
+ <tr id="apn_">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Access Point Name (APN)"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="apn" type="text" class="formfld unknown" id="apn" size="40" value="<?=htmlspecialchars($pconfig['apn']);?>" />
+ </td>
+ </tr>
+ <tr id="interface" >
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Modem Port"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="port" id="port" class="formselect">
+ <?php
+ $portlist = glob("/dev/cua*");
+ $modems = glob("/dev/modem*");
+ $portlist = array_merge($portlist, $modems);
+ $rowIndex = 0;
+ foreach ($portlist as $port) {
+ if (preg_match("/\.(lock|init)$/", $port)) {
+ continue;
+ }
+ $rowIndex++;
+ echo "<option value=\"".trim($port)."\"";
+ if ($pconfig['port'] == $port) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$port}</option>";
+ }
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced PPP"); ?></td>
+ <?php if (isset($pconfig['pppid'])): ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here"); ?> </a>
+ <?=gettext("to edit PPP configuration."); ?>
+ </td>
+ <?php else: ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here"); ?> </a>
+ <?=gettext("to create a PPP configuration."); ?>
+ </td>
+ <?php endif; ?>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="pppoe">
+ <td colspan="2" style="padding:0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="pppoe">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("PPPoE configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pppoe_username" type="text" class="formfld user" id="pppoe_username" size="20" value="<?=htmlspecialchars($pconfig['pppoe_username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pppoe_password" type="password" class="formfld pwd" id="pppoe_password" size="20" value="<?=htmlspecialchars($pconfig['pppoe_password']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Service name"); ?></td>
+ <td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>" />
+ <br /> <span class="vexpl"><?=gettext("Hint: this field can usually be left empty"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dial on demand"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pppoe_dialondemand" type="checkbox" id="pppoe_dialondemand" value="enable" <?php if ($pconfig['pppoe_dialondemand']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable Dial-On-Demand mode"); ?></strong><br />
+ <?=gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a "); ?><i><?=gettext("virtual full time"); ?></i> <?=gettext("connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pppoe_idletimeout" type="text" class="formfld unknown" id="pppoe_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pppoe_idletimeout']);?>" /> <?=gettext("seconds"); ?><br /><?=gettext("If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td>
+ <td width="78%" class="vtable">
+ <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" summary="periodic reset">
+ <tr>
+ <td align="left" valign="top">
+ <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;">
+ <select style="vertical-align:top" id="reset_type" name="pppoe-reset-type" class="formselect" onchange="show_reset_settings(this.value);">
+ <option value=""><?=gettext("Disabled"); ?></option>
+ <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected=\"selected\""; ?>><?=gettext("Custom"); ?></option>
+ <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected=\"selected\""; ?>><?=gettext("Pre-Set"); ?></option>
+ </select> <?=gettext("Select a reset timing type"); ?>
+ </p>
+ <?php if ($pconfig['pppoe_pr_custom']): ?>
+ <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap">
+ <?php else: ?>
+ <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap">
+ <?php endif; ?>
+ <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= htmlspecialchars($pconfig['pppoe_resethour']); ?>" size="3" />
+ <?=gettext("hour (0-23)"); ?><br />
+ <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= htmlspecialchars($pconfig['pppoe_resetminute']); ?>" size="3" />
+ <?=gettext("minute (0-59)"); ?><br />
+ <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" />
+ <?=gettext("reset at a specific date (mm/dd/yyyy)"); ?>
+ <br />&nbsp;<br />
+ <span class="red"><strong><?=gettext("Note:"); ?> </strong></span>
+ <?=gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?>
+ </p>
+ <?php if ($pconfig['pppoe_pr_preset']): ?>
+ <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap">
+ <?php else: ?>
+ <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap">
+ <?php endif; ?>
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> />
+ <?=gettext("reset at each month ('0 0 1 * *')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> />
+ <?=gettext("reset at each week ('0 0 * * 0')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> />
+ <?=gettext("reset at each day ('0 0 * * *')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> />
+ <?=gettext("reset at each hour ('0 * * * *')"); ?>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced and MLPPP"); ?></td>
+ <?php if (isset($pconfig['pppid'])): ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here"); ?> </a>
+ <?=gettext("for additional PPPoE configuration options. Save first if you made changes."); ?>
+ </td>
+ <?php else: ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here"); ?> </a>
+ <?=gettext("for advanced PPPoE configuration options and MLPPP configuration."); ?>
+ </td>
+ <?php endif; ?>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none;" id="pptp">
+ <td colspan="2" style="padding:0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="pptp">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("PPTP/L2TP configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_username" type="text" class="formfld user" id="pptp_username" size="20" value="<?=htmlspecialchars($pconfig['pptp_username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_password" type="password" class="formfld pwd" id="pptp_password" size="20" value="<?=htmlspecialchars($pconfig['pptp_password']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Local IP address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_local" type="text" class="formfld unknown" id="pptp_local" size="20" value="<?=htmlspecialchars($pconfig['pptp_local'][0]);?>" />
+ /
+ <select name="pptp_subnet" class="formselect" id="pptp_subnet">
+ <?php for ($i = 31; $i > 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['pptp_subnet'][0]) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote IP address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_remote" type="text" class="formfld unknown" id="pptp_remote" size="20" value="<?=htmlspecialchars($pconfig['pptp_remote'][0]);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dial on demand"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_dialondemand" type="checkbox" id="pptp_dialondemand" value="enable" <?php if ($pconfig['pptp_dialondemand']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable Dial-On-Demand mode"); ?></strong><br />
+ <?=gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a"); ?> <i><?=gettext("virtual full time"); ?></i> <?=gettext("connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pptp_idletimeout" type="text" class="formfld unknown" id="pptp_idletimeout" size="8" value="<?=htmlspecialchars($pconfig['pptp_idletimeout']);?>" /> <?=gettext("seconds"); ?><br /><?=gettext("If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
+ <?php if (isset($pconfig['pppid'])): ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk"><?=gettext("Click here");?></a>
+ <?=gettext("for additional PPTP and L2TP configuration options. Save first if you made changes.");?>
+ </td>
+ <?php else: ?>
+ <td width="78%" class="vtable">
+ <a href="/interfaces_ppps_edit.php" class="navlnk"><?=gettext("Click here");?></a>
+ <?=gettext("for advanced PPTP and L2TP configuration options");?>.
+ </td>
+ <?php endif; ?>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ /* Wireless interface? */
+ if (isset($wancfg['wireless'])):
+ ?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Common wireless configuration - Settings apply to all wireless networks on"); ?> <?=$wlanbaseif;?>.</td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Persist common settings");?></td>
+ <td class="vtable">
+ <input name="persistcommonwireless" type="checkbox" value="yes" class="formfld" id="persistcommonwireless" <?php if ($pconfig['persistcommonwireless']) echo "checked=\"checked\"";?> />
+ <br /><?=gettext("Enabling this preserves the common wireless configuration through interface deletions and reassignments.");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Standard"); ?></td>
+ <td class="vtable">
+ <select name="standard" class="formselect" id="standard">
+ <?php
+ $rowIndex = 0;
+ echo "<option ";
+ if ($pconfig['standard'] == "auto") {
+ echo "selected=\"selected\" ";
+ }
+ echo "value=\"auto\">auto</option>\n";
+ foreach ($wl_modes as $wl_standard => $wl_channels) {
+ $rowIndex++;
+ echo "<option ";
+ if ($pconfig['standard'] == "$wl_standard") {
+ echo "selected=\"selected\" ";
+ }
+ if ($pconfig['standard'] == "") {
+ if ($wl_standard == "11ng") {
+ echo "selected=\"selected\" ";
+ }
+ }
+ echo "value=\"$wl_standard\">802.$wl_standard</option>\n";
+ }
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php if (isset($wl_modes['11g'])): ?>
+ <tr>
+ <td valign="top" class="vncellreq">802.11g OFDM <?=gettext("Protection Mode"); ?></td>
+ <td class="vtable">
+ <select name="protmode" class="formselect" id="protmode">
+ <option <?php if ($pconfig['protmode'] == 'off') echo "selected=\"selected\"";?> value="off"><?=gettext("Protection mode off"); ?></option>
+ <option <?php if ($pconfig['protmode'] == 'cts') echo "selected=\"selected\"";?> value="cts"><?=gettext("Protection mode CTS to self"); ?></option>
+ <option <?php if ($pconfig['protmode'] == 'rtscts') echo "selected=\"selected\"";?> value="rtscts"><?=gettext("Protection mode RTS and CTS"); ?></option>
+ </select>
+ <br />
+ <?=gettext("For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network."); ?>
+ <br />
+ </td>
+ </tr>
+ <?php else: ?>
+ <input name="protmode" type="hidden" id="protmode" value="off" />
+ <?php endif; ?>
+ <?php /* txpower is disabled because of issues with it.
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Transmit power"); ?></td>
+ <td class="vtable">
+ <select name="txpower" class="formselect" id="txpower">
+ <?
+ for ($x = 99; $x > 0; $x--) {
+ if ($pconfig["txpower"] == $x) {
+ $SELECTED = " selected=\"selected\"";
+ } else {
+ $SELECTED = "";
+ }
+ echo "<option {$SELECTED}>{$x}</option>\n";
+ }
+ ?>
+ </select><br />
+ <?=gettext("Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adapters support changing the transmit power setting."); ?>
+ </td>
+ </tr>*/
+ ?>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Channel"); ?></td>
+ <td class="vtable">
+ <select name="channel" class="formselect" id="channel">
+ <option <?php if ($pconfig['channel'] == 0) echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
+ <?php
+ foreach ($wl_modes as $wl_standard => $wl_channels) {
+ if ($wl_standard == "11g") {
+ $wl_standard = "11b/g";
+ } else if ($wl_standard == "11ng") {
+ $wl_standard = "11b/g/n";
+ } else if ($wl_standard == "11na") {
+ $wl_standard = "11a/n";
+ }
+ foreach ($wl_channels as $wl_channel) {
+ echo "<option ";
+ if ($pconfig['channel'] == "$wl_channel") {
+ echo "selected=\"selected\" ";
+ }
+ echo "value=\"$wl_channel\">$wl_standard - $wl_channel";
+ if (isset($wl_chaninfo[$wl_channel])) {
+ echo " ({$wl_chaninfo[$wl_channel][1]} @ {$wl_chaninfo[$wl_channel][2]} / {$wl_chaninfo[$wl_channel][3]})";
+ }
+ echo "</option>\n";
+ }
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("Legend: wireless standards - channel # (frequency @ max TX power / TX power allowed in reg. domain)"); ?>
+ <br />
+ <?=gettext("Note: Not all channels may be supported by your card. Auto may override the wireless standard selected above."); ?>
+ </td>
+ </tr>
+ <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.diversity"]) || isset($wl_sysctl["{$wl_sysctl_prefix}.txantenna"]) || isset($wl_sysctl["{$wl_sysctl_prefix}.rxantenna"])): ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Antenna settings"); ?></td>
+ <td class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="antenna settings">
+ <tr>
+ <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.diversity"])): ?>
+ <td>
+ <?=gettext("Diversity"); ?><br />
+ <select name="diversity" class="formselect" id="diversity">
+ <option <?php if (!isset($pconfig['diversity'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['diversity'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Off"); ?></option>
+ <option <?php if ($pconfig['diversity'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("On"); ?></option>
+ </select>
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <?php endif; ?>
+ <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.txantenna"])): ?>
+ <td>
+ <?=gettext("Transmit antenna"); ?><br />
+ <select name="txantenna" class="formselect" id="txantenna">
+ <option <?php if (!isset($pconfig['txantenna'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("#1"); ?></option>
+ <option <?php if ($pconfig['txantenna'] === '2') echo "selected=\"selected\""; ?> value="2"><?=gettext("#2"); ?></option>
+ </select>
+ </td>
+ <td>&nbsp;&nbsp;</td>
+ <?php endif; ?>
+ <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.rxantenna"])): ?>
+ <td>
+ <?=gettext("Receive antenna"); ?><br />
+ <select name="rxantenna" class="formselect" id="rxantenna">
+ <option <?php if (!isset($pconfig['rxantenna'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '0') echo "selected=\"selected\""; ?> value="0"><?=gettext("Auto"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '1') echo "selected=\"selected\""; ?> value="1"><?=gettext("#1"); ?></option>
+ <option <?php if ($pconfig['rxantenna'] === '2') echo "selected=\"selected\""; ?> value="2"><?=gettext("#2"); ?></option>
+ </select>
+ </td>
+ <?php endif; ?>
+ </tr>
+ </table>
+ <br />
+ <?=gettext("Note: The antenna numbers do not always match up with the labels on the card."); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if (isset($wl_sysctl["{$wl_sysctl_prefix}.slottime"]) && isset($wl_sysctl["{$wl_sysctl_prefix}.acktimeout"]) && isset($wl_sysctl["{$wl_sysctl_prefix}.ctstimeout"])): ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Distance setting"); ?></td>
+ <td class="vtable">
+ <input name="distance" type="text" class="formfld unknown" id="distance" size="5" value="<?=htmlspecialchars($pconfig['distance']);?>" />
+ <br />
+ <?=gettext("Note: This field can be used to tune ACK/CTS timers to fit the distance between AP and Client"); ?><br />
+ <?=gettext("(measured in meters)"); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Regulatory settings"); ?></td>
+ <td class="vtable">
+ <?=gettext("Regulatory domain"); ?><br />
+ <select name="regdomain" class="formselect" id="regdomain">
+ <option <?php if (empty($pconfig['regdomain'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <?php
+ foreach ($wl_regdomains as $wl_regdomain_key => $wl_regdomain) {
+ echo "<option ";
+ if ($pconfig['regdomain'] == $wl_regdomains_attr[$wl_regdomain_key]['ID']) {
+ echo "selected=\"selected\" ";
+ }
+ echo "value=\"{$wl_regdomains_attr[$wl_regdomain_key]['ID']}\">{$wl_regdomain['name']}</option>\n";
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("Note: Some cards have a default that is not recognized and require changing the regulatory domain to one in this list for the changes to other regulatory settings to work."); ?>
+ <br /><br />
+ <?=gettext("Country (listed with country code and regulatory domain)"); ?><br />
+ <select name="regcountry" class="formselect" id="regcountry">
+ <option <?php if (empty($pconfig['regcountry'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <?php
+ foreach ($wl_countries as $wl_country_key => $wl_country) {
+ echo "<option ";
+ if ($pconfig['regcountry'] == $wl_countries_attr[$wl_country_key]['ID']) {
+ echo "selected=\"selected\" ";
+ }
+ echo "value=\"{$wl_countries_attr[$wl_country_key]['ID']}\">{$wl_country['name']} -- ({$wl_countries_attr[$wl_country_key]['ID']}, " . strtoupper($wl_countries_attr[$wl_country_key]['rd'][0]['REF']) . ")</option>\n";
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("Note: Any country setting other than \"Default\" will override the regulatory domain setting"); ?>.
+ <br /><br />
+ <?=gettext("Location"); ?><br />
+ <select name="reglocation" class="formselect" id="reglocation">
+ <option <?php if (empty($pconfig['reglocation'])) echo "selected=\"selected\""; ?> value=""><?=gettext("Default"); ?></option>
+ <option <?php if ($pconfig['reglocation'] == 'indoor') echo "selected=\"selected\""; ?> value="indoor"><?=gettext("Indoor"); ?></option>
+ <option <?php if ($pconfig['reglocation'] == 'outdoor') echo "selected=\"selected\""; ?> value="outdoor"><?=gettext("Outdoor"); ?></option>
+ <option <?php if ($pconfig['reglocation'] == 'anywhere') echo "selected=\"selected\""; ?> value="anywhere"><?=gettext("Anywhere"); ?></option>
+ </select>
+ <br /><br />
+ <?=gettext("These settings may affect which channels are available and the maximum transmit power allowed on those channels. Using the correct settings to comply with local regulatory requirements is recommended."); ?>
+ <br />
+ <?=gettext("Note: All wireless networks on this interface will be temporarily brought down when changing regulatory settings. Some of the regulatory domains or country codes may not be allowed by some cards. These settings may not be able to add additional channels that are not already supported."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Network-specific wireless configuration");?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
+ <td class="vtable">
+ <select name="mode" class="formselect" id="mode">
+ <option <?php if ($pconfig['mode'] == 'bss') echo "selected=\"selected\"";?> value="bss"><?=gettext("Infrastructure (BSS)"); ?></option>
+ <option <?php if ($pconfig['mode'] == 'adhoc') echo "selected=\"selected\"";?> value="adhoc"><?=gettext("Ad-hoc (IBSS)"); ?></option>
+ <option <?php if ($pconfig['mode'] == 'hostap') echo "selected=\"selected\"";?> value="hostap"><?=gettext("Access Point"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("SSID"); ?></td>
+ <td class="vtable">
+ <input name="ssid" type="text" class="formfld unknown" id="ssid" size="20" value="<?=htmlspecialchars($pconfig['ssid']); ?>" />
+ <br />
+ <?=gettext("Note: Only required in Access Point mode. If left blank in Ad-hoc or Infrastructure mode, this interface will connect to any available SSID"); ?>
+ </td>
+ </tr>
+ <?php if (isset($wl_modes['11ng']) || isset($wl_modes['11na'])): ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Minimum wireless standard"); ?></td>
+ <td class="vtable">
+ <select name="puremode" class="formselect" id="puremode">
+ <option <?php if ($pconfig['puremode'] == 'any') echo "selected=\"selected\"";?> value="any"><?=gettext("Any"); ?></option>
+ <?php if (isset($wl_modes['11g'])): ?>
+ <option <?php if ($pconfig['puremode'] == '11g') echo "selected=\"selected\"";?> value="11g"><?=gettext("802.11g"); ?></option>
+ <?php endif; ?>
+ <option <?php if ($pconfig['puremode'] == '11n') echo "selected=\"selected\"";?> value="11n"><?=gettext("802.11n"); ?></option>
+ </select>
+ <br />
+ <?=gettext("When operating as an access point, allow only stations capable of the selected wireless standard to associate (stations not capable are not permitted to associate)."); ?>
+ </td>
+ </tr>
+ <?php elseif (isset($wl_modes['11g'])): ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("802.11g only"); ?></td>
+ <td class="vtable">
+ <input name="puremode" type="checkbox" value="11g" class="formfld" id="puremode" <?php if ($pconfig['puremode'] == '11g') echo "checked=\"checked\"";?> />
+ <br /><?=gettext("When operating as an access point in 802.11g mode, allow only 11g-capable stations to associate (11b-only stations are not permitted to associate)."); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Allow intra-BSS communication"); ?></td>
+ <td class="vtable">
+ <input name="apbridge_enable" type="checkbox" value="yes" class="formfld" id="apbridge_enable" <?php if ($pconfig['apbridge_enable']) echo "checked=\"checked\"";?> />
+ <br />
+ <?=gettext("When operating as an access point, enable this if you want to pass packets between wireless clients directly."); ?>
+ <br />
+ <?=gettext("Disabling the internal bridging is useful when traffic is to be processed with packet filtering."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Enable WME"); ?></td>
+ <td class="vtable">
+ <input name="wme_enable" type="checkbox" class="formfld" id="wme_enable" value="yes" <?php if ($pconfig['wme_enable']) echo "checked=\"checked\"";?> />
+ <br /><?=gettext("Setting this option will force the card to use WME (wireless QoS)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Enable Hide SSID"); ?></td>
+ <td class="vtable">
+ <input name="hidessid_enable" type="checkbox" class="formfld" id="hidessid_enable" value="yes" <?php if ($pconfig['hidessid_enable']) echo "checked=\"checked\"";?> />
+ <br />
+ <?=gettext("Setting this option will force the card to NOT broadcast its SSID"); ?>
+ <br />
+ <?=gettext("(this might create problems for some clients)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WEP"); ?></td>
+ <td class="vtable">
+ <input name="wep_enable" type="checkbox" id="wep_enable" value="yes" <?php if ($pconfig['wep_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable WEP"); ?></strong>
+ <table border="0" cellspacing="0" cellpadding="0" summary="wep">
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;<?=gettext("TX key"); ?>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><?=gettext("Key 1:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="key1" type="text" class="formfld unknown" id="key1" size="30" value="<?=htmlspecialchars($pconfig['key1']);?>" />
+ </td>
+ <td align="center">
+ <input name="txkey" type="radio" value="1" <?php if ($pconfig['txkey'] == 1) echo "checked=\"checked\"";?> />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Key 2:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="key2" type="text" class="formfld unknown" id="key2" size="30" value="<?=htmlspecialchars($pconfig['key2']);?>" />
+ </td>
+ <td align="center">
+ <input name="txkey" type="radio" value="2" <?php if ($pconfig['txkey'] == 2) echo "checked=\"checked\"";?> />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Key 3:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="key3" type="text" class="formfld unknown" id="key3" size="30" value="<?=htmlspecialchars($pconfig['key3']);?>" />
+ </td>
+ <td align="center">
+ <input name="txkey" type="radio" value="3" <?php if ($pconfig['txkey'] == 3) echo "checked=\"checked\"";?> />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Key 4:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="key4" type="text" class="formfld unknown" id="key4" size="30" value="<?=htmlspecialchars($pconfig['key4']);?>" />
+ </td>
+ <td align="center">
+ <input name="txkey" type="radio" value="4" <?php if ($pconfig['txkey'] == 4) echo "checked=\"checked\"";?> />
+ </td>
+ </tr>
+ </table>
+ <br />
+ <?=gettext("40 (64) bit keys may be entered as 5 ASCII characters or 10 hex digits preceded by '0x'."); ?><br />
+ <?=gettext("104 (128) bit keys may be entered as 13 ASCII characters or 26 hex digits preceded by '0x'."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WPA"); ?></td>
+ <td class="vtable">
+ <input name="wpa_enable" type="checkbox" class="formfld" id="wpa_enable" value="yes" <?php if ($pconfig['wpa_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable WPA"); ?></strong>
+ <br /><br />
+ <table border="0" cellspacing="0" cellpadding="0" summary="wpa">
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;<?=gettext("WPA Pre-Shared Key"); ?>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><?=gettext("PSK:"); ?>&nbsp;&nbsp;</td>
+ <td>
+ <input name="passphrase" type="text" class="formfld unknown" id="passphrase" size="66" value="<?=htmlspecialchars($pconfig['passphrase']);?>" />
+ </td>
+ </tr>
+ </table>
+ <br /><?=gettext("WPA Passphrase must be between 8 and 63 characters long."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WPA Mode"); ?></td>
+ <td class="vtable">
+ <select name="wpa_mode" class="formselect" id="wpa_mode">
+ <option <?php if ($pconfig['wpa_mode'] == '1') echo "selected=\"selected\"";?> value="1"><?=gettext("WPA"); ?></option>
+ <option <?php if ($pconfig['wpa_mode'] == '2' || !isset($pconfig['wpa_mode'])) echo "selected=\"selected\"";?> value="2"><?=gettext("WPA2"); ?></option>
+ <option <?php if ($pconfig['wpa_mode'] == '3') echo "selected=\"selected\"";?> value="3"><?=gettext("Both"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WPA Key Management Mode"); ?></td>
+ <td class="vtable">
+ <select name="wpa_key_mgmt" class="formselect" id="wpa_key_mgmt">
+ <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK') echo "selected=\"selected\"";?> value="WPA-PSK"><?=gettext("Pre-Shared Key"); ?></option>
+ <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-EAP') echo "selected=\"selected\"";?> value="WPA-EAP"><?=gettext("Extensible Authentication Protocol"); ?></option>
+ <option <?php if ($pconfig['wpa_key_mgmt'] == 'WPA-PSK WPA-EAP') echo "selected=\"selected\"";?> value="WPA-PSK WPA-EAP"><?=gettext("Both"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Authentication"); ?></td>
+ <td class="vtable">
+ <select name="auth_algs" class="formselect" id="auth_algs">
+ <option <?php if ($pconfig['auth_algs'] == '1') echo "selected=\"selected\"";?> value="1"><?=gettext("Open System Authentication"); ?></option>
+ <option <?php if ($pconfig['auth_algs'] == '2') echo "selected=\"selected\"";?> value="2"><?=gettext("Shared Key Authentication"); ?></option>
+ <option <?php if ($pconfig['auth_algs'] == '3') echo "selected=\"selected\"";?> value="3"><?=gettext("Both"); ?></option>
+ </select>
+ <br /><?=gettext("Note: Shared Key Authentication requires WEP."); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WPA Pairwise"); ?></td>
+ <td class="vtable">
+ <select name="wpa_pairwise" class="formselect" id="wpa_pairwise">
+ <option <?php if ($pconfig['wpa_pairwise'] == 'CCMP TKIP') echo "selected=\"selected\"";?> value="CCMP TKIP"><?=gettext("Both"); ?></option>
+ <option <?php if ($pconfig['wpa_pairwise'] == 'CCMP' || !isset($pconfig['wpa_pairwise'])) echo "selected=\"selected\"";?> value="CCMP"><?=gettext("AES (recommended)"); ?></option>
+ <option <?php if ($pconfig['wpa_pairwise'] == 'TKIP') echo "selected=\"selected\"";?> value="TKIP"><?=gettext("TKIP"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Key Rotation"); ?></td>
+ <td class="vtable">
+ <input name="wpa_group_rekey" type="text" class="formfld unknown" id="wpa_group_rekey" size="30" value="<?php echo htmlspecialchars($pconfig['wpa_group_rekey']) ? $pconfig['wpa_group_rekey'] : "60";?>" />
+ <br /><?=gettext("Specified in seconds. Allowed values are 1-9999. Must be shorter than Master Key Regeneration time."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Master Key Regeneration"); ?></td>
+ <td class="vtable">
+ <input name="wpa_gmk_rekey" type="text" class="formfld" id="wpa_gmk_rekey" size="30" value="<?php echo htmlspecialchars($pconfig['wpa_gmk_rekey']) ? $pconfig['wpa_gmk_rekey'] : "3600";?>" />
+ <br /><?=gettext("Specified in seconds. Allowed values are 1-9999. Must be longer than Key Rotation time."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Strict Key Regeneration"); ?></td>
+ <td class="vtable">
+ <input name="wpa_strict_rekey" type="checkbox" value="yes" class="formfld" id="wpa_strict_rekey" <?php if ($pconfig['wpa_strict_rekey']) echo "checked=\"checked\""; ?> />
+ <br /><?=gettext("Setting this option will force the AP to rekey whenever a client disassociates."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Enable IEEE802.1X Authentication"); ?></td>
+ <td class="vtable">
+ <input name="ieee8021x" type="checkbox" value="yes" class="formfld" id="ieee8021x" <?php if ($pconfig['ieee8021x']) echo "checked=\"checked\"";?> />
+ <br /><?=gettext("Setting this option will enable 802.1X authentication."); ?>
+ <br /><span class="red"><strong><?=gettext("NOTE"); ?>:</strong></span> <?=gettext("this option requires checking the \"Enable WPA box\"."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server IP Address"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_addr" id="auth_server_addr" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_addr']);?>" />
+ <br /><?=gettext("Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server Port"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_port" id="auth_server_port" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_port']);?>" />
+ <br /><?=gettext("Leave blank for the default port 1812."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("802.1X Authentication Server Shared Secret"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_shared_secret" id="auth_server_shared_secret" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_shared_secret']);?>" />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server IP Address"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_addr2" id="auth_server_addr2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_addr2']);?>" />
+ <br /><?=gettext("Enter the IP address of the 802.1X Authentication Server. This is commonly a Radius server (FreeRadius, Internet Authentication Services, etc.)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server Port"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_port2" id="auth_server_port2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_port2']);?>" />
+ <br /><?=gettext("Leave blank for the default port 1812."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Secondary 802.1X Authentication Server Shared Secret"); ?></td>
+ <td class="vtable">
+ <input name="auth_server_shared_secret2" id="auth_server_shared_secret2" type="text" class="formfld unknown" size="66" value="<?=htmlspecialchars($pconfig['auth_server_shared_secret2']);?>" />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell">802.1X <?=gettext("Authentication Roaming Preauth"); ?></td>
+ <td class="vtable">
+ <input name="rsn_preauth" id="rsn_preauth" type="checkbox" class="formfld unknown" size="66" value="yes" <?php if ($pconfig['rsn_preauth']) echo "checked=\"checked\""; ?> />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Private networks"); ?></td>
+ </tr>
+ <tr>
+ <td valign="middle" class="vncell">&nbsp;</td>
+ <td class="vtable">
+ <a name="rfc1918"></a>
+ <input name="blockpriv" type="checkbox" id="blockpriv" value="yes" <?php if ($pconfig['blockpriv']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Block private networks"); ?></strong><br />
+ <?=gettext("When set, this option blocks traffic from IP addresses that are reserved " .
+ "for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as"); ?>
+ <?=gettext("well as loopback addresses (127/8)."); ?>&nbsp;&nbsp; <?=gettext("You should generally " .
+ "leave this option turned on, unless your WAN network lies in such " .
+ "a private address space, too."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="middle" class="vncell">&nbsp;</td>
+ <td class="vtable">
+ <input name="blockbogons" type="checkbox" id="blockbogons" value="yes" <?php if ($pconfig['blockbogons']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Block bogon networks"); ?></strong><br />
+ <?=gettext("When set, this option blocks traffic from IP addresses that are reserved " .
+ "(but not RFC 1918) or not yet assigned by IANA."); ?>&nbsp;&nbsp;
+ <?=gettext("Bogons are prefixes that should never appear in the Internet routing table, " .
+ "and obviously should not appear as the source address in any packets you receive."); ?>
+ <br /><br />
+ <?=gettext("Note: The update frequency can be changed under System->Advanced Firewall/NAT settings.")?>
+ </td>
+ </tr>
+ </table> <!-- End "allcfg" table -->
+ </div> <!-- End "allcfg" div -->
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="buttons">
+ <tr>
+ <td width="22%" valign="top">
+ &nbsp;
+ </td>
+ <td width="78%">
+ <br />
+ <input id="save" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input id="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <input name="if" type="hidden" id="if" value="<?=htmlspecialchars($if);?>" />
+ <?php if ($wancfg['if'] == $a_ppps[$pppid]['if']) : ?>
+ <input name="ppp_port" type="hidden" value="<?=htmlspecialchars($pconfig['port']);?>" />
+ <?php endif; ?>
+ <input name="ptpid" type="hidden" value="<?=htmlspecialchars($pconfig['ptpid']);?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <script type="text/javascript">
+ //<![CDATA[
+ var gatewayip;
+ var name;
+ var gatewayipv6;
+ var namev6;
+ function show_add_gateway() {
+ document.getElementById("addgateway").style.display = '';
+ document.getElementById("addgwbox").style.display = 'none';
+ document.getElementById("gateway").style.display = 'none';
+ document.getElementById("save").style.display = 'none';
+ document.getElementById("cancel").style.display = 'none';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ jQuery('#notebox').html("");
+ }
+ function show_add_gateway_v6() {
+ document.getElementById("addgatewayv6").style.display = '';
+ document.getElementById("addgwboxv6").style.display = 'none';
+ document.getElementById("gatewayv6").style.display = 'none';
+ document.getElementById("save").style.display = 'none';
+ document.getElementById("cancel").style.display = 'none';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ jQuery('#noteboxv6').html("");
+ }
+ function hide_add_gateway() {
+ document.getElementById("addgateway").style.display = 'none';
+ document.getElementById("addgwbox").style.display = '';
+ document.getElementById("gateway").style.display = '';
+ document.getElementById("save").style.display = '';
+ document.getElementById("cancel").style.display = '';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ jQuery('#status').html('');
+ }
+ function hide_add_gateway_v6() {
+ document.getElementById("addgatewayv6").style.display = 'none';
+ document.getElementById("addgwboxv6").style.display = '';
+ document.getElementById("gatewayv6").style.display = '';
+ document.getElementById("save").style.display = '';
+ document.getElementById("cancel").style.display = '';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ jQuery('#statusv6').html('');
+ }
+ function hide_add_gatewaysave() {
+ document.getElementById("addgateway").style.display = 'none';
+ jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> One moment please...');
+ var iface = jQuery('#if').val();
+ name = jQuery('#name').val();
+ var descr = jQuery('#gatewaydescr').val();
+ gatewayip = jQuery('#gatewayip').val();
+
+ var defaultgw = '';
+ if (jQuery('#defaultgw').is(':checked')) {
+ defaultgw = '&defaultgw=on';
+ }
+ var url = "system_gateways_edit.php";
+ var pars = 'isAjax=true&ipprotocol=inet' + defaultgw + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ error: report_failure,
+ success: save_callback
+ });
+ }
+ function hide_add_gatewaysave_v6() {
+ document.getElementById("addgatewayv6").style.display = 'none';
+ jQuery('#statusv6').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> One moment please...');
+ var iface = jQuery('#if').val();
+ name = jQuery('#namev6').val();
+ var descr = jQuery('#gatewaydescrv6').val();
+ gatewayip = jQuery('#gatewayipv6').val();
+ var defaultgw = '';
+ if (jQuery('#defaultgwv6').is(':checked')) {
+ defaultgw = '&defaultgw=on';
+ }
+ var url_v6 = "system_gateways_edit.php";
+ var pars_v6 = 'isAjax=true&ipprotocol=inet6' + defaultgw + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
+ jQuery.ajax(
+ url_v6,
+ {
+ type: 'post',
+ data: pars_v6,
+ error: report_failure_v6,
+ success: save_callback_v6
+ });
+ }
+ function addOption(selectbox, text, value)
+ {
+ var optn = document.createElement("OPTION");
+ optn.text = text;
+ optn.value = value;
+ selectbox.append(optn);
+ selectbox.prop('selectedIndex', selectbox.children().length - 1);
+ jQuery('#notebox').html("<p><strong><?=gettext("NOTE:"); ?><\/strong> <?=gettext("You can manage Gateways"); ?> <a target='_blank' href='system_gateways.php'><?=gettext("here"); ?><\/a>.<\/p>");
+ }
+ function addOption_v6(selectbox, text, value)
+ {
+ var optn = document.createElement("OPTION");
+ optn.text = text;
+ optn.value = value;
+ selectbox.append(optn);
+ selectbox.prop('selectedIndex', selectbox.children().length - 1);
+ jQuery('#noteboxv6').html("<p><strong><?=gettext("NOTE:"); ?><\/strong> <?=gettext("You can manage Gateways"); ?> <a target='_blank' href='system_gateways.php'><?=gettext("here"); ?><\/a>.<\/p>");
+ }
+ function report_failure(request, textStatus, errorThrown) {
+ if (textStatus === "error" && request.getResponseHeader("Content-Type") === "text/plain") {
+ alert(request.responseText);
+ } else {
+ alert("Sorry, we could not create your IPv4 gateway at this time.");
+ }
+ hide_add_gateway();
+ }
+ function report_failure_v6(request, textStatus, errorThrown) {
+ if (textStatus === "error" && request.getResponseHeader("Content-Type") === "text/plain") {
+ alert(request.responseText);
+ } else {
+ alert("Sorry, we could not create your IPv6 gateway at this time.");
+ }
+ hide_add_gateway_v6();
+ }
+ function save_callback(response) {
+ if (response) {
+ document.getElementById("addgateway").style.display = 'none';
+ hide_add_gateway();
+ var gwtext = escape(name) + " - " + gatewayip;
+ addOption(jQuery('#gateway'), gwtext, name);
+ // Auto submit form?
+ //document.iform.submit();
+ //jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader /">');
+ } else {
+ report_failure();
+ }
+ }
+ function show_advanced_media() {
+ document.getElementById("showadvmediabox").innerHTML='';
+ aodiv = document.getElementById('showmediaadv');
+ aodiv.style.display = "block";
+ }
+ function save_callback_v6(response_v6) {
+ if (response_v6) {
+ document.getElementById("addgatewayv6").style.display = 'none';
+ hide_add_gateway_v6();
+ var gwtext_v6 = escape(name) + " - " + gatewayip;
+ addOption_v6(jQuery('#gatewayv6'), gwtext_v6, name);
+ // Auto submit form?
+ //document.iform.submit();
+ //jQuery('#statusv6').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" />');
+ } else {
+ report_failure_v6();
+ }
+ }
+ <?php
+ echo "show_allcfg(document.iform.enable);";
+ echo "updateType('{$pconfig['type']}');\n";
+ echo "updateTypeSix('{$pconfig['type6']}');\n";
+ ?>
+ //]]>
+ </script>
+ <?php include("fend.inc"); ?>
+ </body>
+</html>
diff --git a/src/usr/local/www/interfaces_assign.php b/src/usr/local/www/interfaces_assign.php
new file mode 100644
index 0000000..03fe582
--- /dev/null
+++ b/src/usr/local/www/interfaces_assign.php
@@ -0,0 +1,597 @@
+<?php
+/*
+ interfaces_assign.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ Written by Jim McBeath based on existing m0n0wall files
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-assignnetworkports
+##|*NAME=Interfaces: Assign network ports page
+##|*DESCR=Allow access to the 'Interfaces: Assign network ports' page.
+##|*MATCH=interfaces_assign.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Interfaces"), gettext("Assign network ports"));
+$shortcut_section = "interfaces";
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("ipsec.inc");
+require("vpn.inc");
+require("captiveportal.inc");
+require_once("rrd.inc");
+
+function interface_assign_description($portinfo, $portname) {
+ global $ovpn_descrs;
+ if ($portinfo['isvlan']) {
+ $descr = sprintf(gettext('VLAN %1$s on %2$s'), $portinfo['tag'], $portinfo['if']);
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['iswlclone']) {
+ $descr = $portinfo['cloneif'];
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['isppp']) {
+ $descr = $portinfo['descr'];
+ } elseif ($portinfo['isbridge']) {
+ $descr = strtoupper($portinfo['bridgeif']);
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['isgre']) {
+ $descr = "GRE {$portinfo['remote-addr']}";
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['isgif']) {
+ $descr = "GIF {$portinfo['remote-addr']}";
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['islagg']) {
+ $descr = strtoupper($portinfo['laggif']);
+ if ($portinfo['descr']) {
+ $descr .= " (" . $portinfo['descr'] . ")";
+ }
+ } elseif ($portinfo['isqinq']) {
+ $descr = $portinfo['descr'];
+ } elseif (substr($portname, 0, 4) == 'ovpn') {
+ $descr = $portname . " (" . $ovpn_descrs[substr($portname, 5)] . ")";
+ } else {
+ $descr = $portname . " (" . $portinfo['mac'] . ")";
+ }
+
+ return htmlspecialchars($descr);
+}
+
+/*
+ In this file, "port" refers to the physical port name,
+ while "interface" refers to LAN, WAN, or OPTn.
+*/
+
+/* get list without VLAN interfaces */
+$portlist = get_interface_list();
+
+/* add wireless clone interfaces */
+if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) {
+ foreach ($config['wireless']['clone'] as $clone) {
+ $portlist[$clone['cloneif']] = $clone;
+ $portlist[$clone['cloneif']]['iswlclone'] = true;
+ }
+}
+
+/* add VLAN interfaces */
+if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ $portlist[$vlan['vlanif']] = $vlan;
+ $portlist[$vlan['vlanif']]['isvlan'] = true;
+ }
+}
+
+/* add Bridge interfaces */
+if (is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
+ foreach ($config['bridges']['bridged'] as $bridge) {
+ $portlist[$bridge['bridgeif']] = $bridge;
+ $portlist[$bridge['bridgeif']]['isbridge'] = true;
+ }
+}
+
+/* add GIF interfaces */
+if (is_array($config['gifs']['gif']) && count($config['gifs']['gif'])) {
+ foreach ($config['gifs']['gif'] as $gif) {
+ $portlist[$gif['gifif']] = $gif;
+ $portlist[$gif['gifif']]['isgif'] = true;
+ }
+}
+
+/* add GRE interfaces */
+if (is_array($config['gres']['gre']) && count($config['gres']['gre'])) {
+ foreach ($config['gres']['gre'] as $gre) {
+ $portlist[$gre['greif']] = $gre;
+ $portlist[$gre['greif']]['isgre'] = true;
+ }
+}
+
+/* add LAGG interfaces */
+if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
+ foreach ($config['laggs']['lagg'] as $lagg) {
+ $portlist[$lagg['laggif']] = $lagg;
+ $portlist[$lagg['laggif']]['islagg'] = true;
+ /* LAGG members cannot be assigned */
+ $lagifs = explode(',', $lagg['members']);
+ foreach ($lagifs as $lagif) {
+ if (isset($portlist[$lagif])) {
+ unset($portlist[$lagif]);
+ }
+ }
+ }
+}
+
+/* add QinQ interfaces */
+if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
+ foreach ($config['qinqs']['qinqentry'] as $qinq) {
+ $portlist["vlan{$qinq['tag']}"]['descr'] = "VLAN {$qinq['tag']}";
+ $portlist["vlan{$qinq['tag']}"]['isqinq'] = true;
+ /* QinQ members */
+ $qinqifs = explode(' ', $qinq['members']);
+ foreach ($qinqifs as $qinqif) {
+ $portlist["vlan{$qinq['tag']}_{$qinqif}"]['descr'] = "QinQ {$qinqif}";
+ $portlist["vlan{$qinq['tag']}_{$qinqif}"]['isqinq'] = true;
+ }
+ }
+}
+
+/* add PPP interfaces */
+if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
+ foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
+ $portname = $ppp['if'];
+ $portlist[$portname] = $ppp;
+ $portlist[$portname]['isppp'] = true;
+ $ports_base = basename($ppp['ports']);
+ if (isset($ppp['descr'])) {
+ $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['descr']}";
+ } else if (isset($ppp['username'])) {
+ $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base}) - {$ppp['username']}";
+ } else {
+ $portlist[$portname]['descr'] = strtoupper($ppp['if']). "({$ports_base})";
+ }
+ }
+}
+
+$ovpn_descrs = array();
+if (is_array($config['openvpn'])) {
+ if (is_array($config['openvpn']['openvpn-server'])) {
+ foreach ($config['openvpn']['openvpn-server'] as $s) {
+ $ovpn_descrs[$s['vpnid']] = $s['description'];
+ }
+ }
+ if (is_array($config['openvpn']['openvpn-client'])) {
+ foreach ($config['openvpn']['openvpn-client'] as $c) {
+ $ovpn_descrs[$c['vpnid']] = $c['description'];
+ }
+ }
+}
+
+if (isset($_POST['add_x']) && isset($_POST['if_add'])) {
+ /* Be sure this port is not being used */
+ $portused = false;
+ foreach ($config['interfaces'] as $ifname => $ifdata) {
+ if ($ifdata['if'] == $_POST['if_add']) {
+ $portused = true;
+ break;
+ }
+ }
+
+ if ($portused === false) {
+ /* find next free optional interface number */
+ if (!$config['interfaces']['lan']) {
+ $newifname = gettext("lan");
+ $descr = gettext("LAN");
+ } else {
+ for ($i = 1; $i <= count($config['interfaces']); $i++) {
+ if (!$config['interfaces']["opt{$i}"]) {
+ break;
+ }
+ }
+ $newifname = 'opt' . $i;
+ $descr = "OPT" . $i;
+ }
+
+ $config['interfaces'][$newifname] = array();
+ $config['interfaces'][$newifname]['descr'] = $descr;
+ $config['interfaces'][$newifname]['if'] = $_POST['if_add'];
+ if (preg_match($g['wireless_regex'], $_POST['if_add'])) {
+ $config['interfaces'][$newifname]['wireless'] = array();
+ interface_sync_wireless_clones($config['interfaces'][$newifname], false);
+ }
+
+ uksort($config['interfaces'], "compare_interface_friendly_names");
+
+ /* XXX: Do not remove this. */
+ unlink_if_exists("{$g['tmp_path']}/config.cache");
+
+ write_config();
+
+ $savemsg = gettext("Interface has been added.");
+ }
+
+} else if (isset($_POST['apply'])) {
+ if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
+ system_reboot();
+ $rebootingnow = true;
+ } else {
+ write_config();
+
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ }
+
+} else if (isset($_POST['Submit'])) {
+
+ unset($input_errors);
+
+ /* input validation */
+
+ /* Build a list of the port names so we can see how the interfaces map */
+ $portifmap = array();
+ foreach ($portlist as $portname => $portinfo) {
+ $portifmap[$portname] = array();
+ }
+
+ /* Go through the list of ports selected by the user,
+ build a list of port-to-interface mappings in portifmap */
+ foreach ($_POST as $ifname => $ifport) {
+ if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
+ $portifmap[$ifport][] = strtoupper($ifname);
+ }
+ }
+
+ /* Deliver error message for any port with more than one assignment */
+ foreach ($portifmap as $portname => $ifnames) {
+ if (count($ifnames) > 1) {
+ $errstr = sprintf(gettext('Port %1$s '.
+ ' was assigned to %2$s' .
+ ' interfaces:'), $portname, count($ifnames));
+
+ foreach ($portifmap[$portname] as $ifn) {
+ $errstr .= " " . convert_friendly_interface_to_friendly_descr(strtolower($ifn)) . " (" . $ifn . ")";
+ }
+
+ $input_errors[] = $errstr;
+ } else if (count($ifnames) == 1 && preg_match('/^bridge[0-9]/', $portname) && is_array($config['bridges']['bridged']) && count($config['bridges']['bridged'])) {
+ foreach ($config['bridges']['bridged'] as $bridge) {
+ if ($bridge['bridgeif'] != $portname) {
+ continue;
+ }
+
+ $members = explode(",", strtoupper($bridge['members']));
+ foreach ($members as $member) {
+ if ($member == $ifnames[0]) {
+ $input_errors[] = sprintf(gettext("You cannot set port %s to interface %s because this interface is a member of %s."), $portname, $member, $portname);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (is_array($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ if (does_interface_exist($vlan['if']) == false) {
+ $input_errors[] = "Vlan parent interface {$vlan['if']} does not exist anymore so vlan id {$vlan['tag']} cannot be created please fix the issue before continuing.";
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ /* No errors detected, so update the config */
+ foreach ($_POST as $ifname => $ifport) {
+
+ if (($ifname == 'lan') || ($ifname == 'wan') || (substr($ifname, 0, 3) == 'opt')) {
+
+ if (!is_array($ifport)) {
+ $reloadif = false;
+ if (!empty($config['interfaces'][$ifname]['if']) && $config['interfaces'][$ifname]['if'] <> $ifport) {
+ interface_bring_down($ifname);
+ /* Mark this to be reconfigured in any case. */
+ $reloadif = true;
+ }
+ $config['interfaces'][$ifname]['if'] = $ifport;
+ if (isset($portlist[$ifport]['isppp'])) {
+ $config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type'];
+ }
+
+ if (substr($ifport, 0, 3) == 'gre' || substr($ifport, 0, 3) == 'gif') {
+ unset($config['interfaces'][$ifname]['ipaddr']);
+ unset($config['interfaces'][$ifname]['subnet']);
+ unset($config['interfaces'][$ifname]['ipaddrv6']);
+ unset($config['interfaces'][$ifname]['subnetv6']);
+ }
+
+ /* check for wireless interfaces, set or clear ['wireless'] */
+ if (preg_match($g['wireless_regex'], $ifport)) {
+ if (!is_array($config['interfaces'][$ifname]['wireless'])) {
+ $config['interfaces'][$ifname]['wireless'] = array();
+ }
+ } else {
+ unset($config['interfaces'][$ifname]['wireless']);
+ }
+
+ /* make sure there is a descr for all interfaces */
+ if (!isset($config['interfaces'][$ifname]['descr'])) {
+ $config['interfaces'][$ifname]['descr'] = strtoupper($ifname);
+ }
+
+ if ($reloadif == true) {
+ if (preg_match($g['wireless_regex'], $ifport)) {
+ interface_sync_wireless_clones($config['interfaces'][$ifname], false);
+ }
+ /* Reload all for the interface. */
+ interface_configure($ifname, true);
+ }
+ }
+ }
+ }
+
+ write_config();
+
+ enable_rrd_graphing();
+ }
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($delbtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/del_(.+)_x/", $pn, $matches)) {
+ $delbtn = $matches[1];
+ }
+ }
+
+ if (isset($delbtn)) {
+ $id = $delbtn;
+
+ if (link_interface_to_group($id)) {
+ $input_errors[] = gettext("The interface is part of a group. Please remove it from the group to continue");
+ } else if (link_interface_to_bridge($id)) {
+ $input_errors[] = gettext("The interface is part of a bridge. Please remove it from the bridge to continue");
+ } else if (link_interface_to_gre($id)) {
+ $input_errors[] = gettext("The interface is part of a gre tunnel. Please delete the tunnel to continue");
+ } else if (link_interface_to_gif($id)) {
+ $input_errors[] = gettext("The interface is part of a gif tunnel. Please delete the tunnel to continue");
+ } else {
+ unset($config['interfaces'][$id]['enable']);
+ $realid = get_real_interface($id);
+ interface_bring_down($id); /* down the interface */
+
+ unset($config['interfaces'][$id]); /* delete the specified OPTn or LAN*/
+
+ if (is_array($config['dhcpd']) && is_array($config['dhcpd'][$id])) {
+ unset($config['dhcpd'][$id]);
+ services_dhcpd_configure();
+ }
+
+ if (count($config['filter']['rule']) > 0) {
+ foreach ($config['filter']['rule'] as $x => $rule) {
+ if ($rule['interface'] == $id) {
+ unset($config['filter']['rule'][$x]);
+ }
+ }
+ }
+ if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) {
+ foreach ($config['nat']['rule'] as $x => $rule) {
+ if ($rule['interface'] == $id) {
+ unset($config['nat']['rule'][$x]['interface']);
+ }
+ }
+ }
+
+ write_config();
+
+ /* If we are in firewall/routing mode (not single interface)
+ * then ensure that we are not running DHCP on the wan which
+ * will make a lot of ISP's unhappy.
+ */
+ if ($config['interfaces']['lan'] && $config['dhcpd']['wan']) {
+ unset($config['dhcpd']['wan']);
+ }
+
+ link_interface_to_vlans($realid, "update");
+
+ $savemsg = gettext("Interface has been deleted.");
+ }
+ }
+}
+
+/* Create a list of unused ports */
+$unused_portlist = array();
+foreach ($portlist as $portname => $portinfo) {
+ $portused = false;
+ foreach ($config['interfaces'] as $ifname => $ifdata) {
+ if ($ifdata['if'] == $portname) {
+ $portused = true;
+ break;
+ }
+ }
+ if ($portused === false) {
+ $unused_portlist[$portname] = $portinfo;
+ }
+}
+
+include("head.inc");
+
+if (file_exists("/var/run/interface_mismatch_reboot_needed")) {
+ if ($_POST) {
+ if ($rebootingnow) {
+ $savemsg = gettext("The system is now rebooting. Please wait.");
+ } else {
+ $savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot.");
+ }
+ } else {
+ $savemsg = gettext("Interface mismatch detected. Please resolve the mismatch and click 'Apply changes'. The firewall will reboot afterwards.");
+ }
+}
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<form action="interfaces_assign.php" method="post" name="iform" id="iform">
+
+<?php
+if (file_exists("/tmp/reload_interfaces")) {
+ echo "<p>\n";
+ print_info_box_np(gettext("The interface configuration has been changed.<br />You must apply the changes in order for them to take effect."));
+ echo "<br /></p>\n";
+} elseif ($savemsg) {
+ print_info_box($savemsg);
+}
+
+pfSense_handle_custom_code("/usr/local/pkg/interfaces_assign/pre_input_errors");
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces assign">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), true, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr><td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td class="listhdr"><?=gettext("Network port"); ?></td>
+ <td class="list">&nbsp;</td>
+ </tr>
+<?php
+ foreach ($config['interfaces'] as $ifname => $iface):
+ if ($iface['descr']) {
+ $ifdescr = $iface['descr'];
+ } else {
+ $ifdescr = strtoupper($ifname);
+ }
+?>
+ <tr>
+ <td class="listlr" valign="middle"><strong><u><span onclick="location.href='/interfaces.php?if=<?=$ifname;?>'" style="cursor: pointer;"><?=$ifdescr;?></span></u></strong></td>
+ <td valign="middle" class="listr">
+ <select onchange="javascript:jQuery('#savediv').show();" name="<?=$ifname;?>" id="<?=$ifname;?>">
+<?php
+ foreach ($portlist as $portname => $portinfo):
+?>
+ <option value="<?=$portname;?>" <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
+ <?=interface_assign_description($portinfo, $portname);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select>
+ </td>
+ <td valign="middle" class="list">
+<?php
+ if ($ifname != 'wan'):
+?>
+ <input name="del_<?=$ifname;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ title="<?=gettext("delete interface");?>"
+ type="image" style="height:17;width:17;border:0"
+ onclick="return confirm('<?=gettext("Do you really want to delete this interface?"); ?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ if (count($config['interfaces']) < count($portlist)):
+?>
+ <tr>
+ <td class="list">
+ <strong><?=gettext("Available network ports:");?></strong>
+ </td>
+ <td class="list">
+ <select name="if_add" id="if_add">
+<?php
+ foreach ($unused_portlist as $portname => $portinfo):
+?>
+ <option value="<?=$portname;?>" <?php if ($portname == $iface['if']) echo " selected=\"selected\"";?>>
+ <?=interface_assign_description($portinfo, $portname);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select>
+ </td>
+ <td class="list">
+ <input name="add" type="image" src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" style="width:17;height:17;border:0" title="<?=gettext("add selected interface");?>" />
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ </table>
+ </div>
+ <br />
+ <div id='savediv' style='display:none'>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /><br /><br />
+ </div>
+ <ul>
+ <li><span class="vexpl"><?=gettext("Interfaces that are configured as members of a lagg(4) interface will not be shown."); ?></span></li>
+ </ul>
+ </td></tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_bridge.php b/src/usr/local/www/interfaces_bridge.php
new file mode 100644
index 0000000..b7e557f
--- /dev/null
+++ b/src/usr/local/www/interfaces_bridge.php
@@ -0,0 +1,179 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_bridge.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: interfaces_assign
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-bridge
+##|*NAME=Interfaces: Bridge page
+##|*DESCR=Allow access to the 'Interfaces: Bridge' page.
+##|*MATCH=interfaces_bridge.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['bridges']['bridged'])) {
+ $config['bridges']['bridged'] = array();
+}
+
+$a_bridges = &$config['bridges']['bridged'] ;
+
+function bridge_inuse($num) {
+ global $config, $a_bridges;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_bridges[$num]['bridgeif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ if (!isset($_GET['id'])) {
+ $input_errors[] = gettext("Wrong parameters supplied");
+ } else if (empty($a_bridges[$_GET['id']])) {
+ $input_errors[] = gettext("Wrong index supplied");
+ /* check if still in use */
+ } else if (bridge_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This bridge cannot be deleted because it is assigned as an interface.");
+ } else {
+ if (!does_interface_exist($a_bridges[$_GET['id']]['bridgeif'])) {
+ log_error("Bridge interface does not exist, skipping ifconfig destroy.");
+ } else {
+ mwexec("/sbin/ifconfig " . $a_bridges[$_GET['id']]['bridgeif'] . " destroy");
+ }
+
+ unset($a_bridges[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_bridge.php");
+ exit;
+ }
+}
+
+
+$pgtitle = array(gettext("Interfaces"), gettext("Bridge"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces bridge">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), true, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Members"); ?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $i = 0;
+ $ifdescrs = get_configured_interface_with_descr();
+ foreach ($a_bridges as $bridge):
+ ?>
+ <tr ondblclick="document.location='interfaces_bridge_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars(strtoupper($bridge['bridgeif']));?>
+ </td>
+ <td class="listr">
+ <?php
+ $members = explode(',', $bridge['members']);
+ $j = 0;
+ foreach ($members as $member) {
+ if (isset($ifdescrs[$member])) {
+ echo $ifdescrs[$member];
+ $j++;
+ }
+ if ($j > 0 && $j < count($members)) {
+ echo ", ";
+ }
+ }
+ ?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($bridge['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_bridge_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_bridge.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this bridge?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_bridge_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list"><p class="vexpl"><span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("Here you can configure bridging of interfaces."); ?></p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_bridge_edit.php b/src/usr/local/www/interfaces_bridge_edit.php
new file mode 100644
index 0000000..1787ca1
--- /dev/null
+++ b/src/usr/local/www/interfaces_bridge_edit.php
@@ -0,0 +1,708 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_bridge_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-bridge-edit
+##|*NAME=Interfaces: Bridge edit page
+##|*DESCR=Allow access to the 'Interfaces: Bridge : Edit' page.
+##|*MATCH=interfaces_bridge_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_bridge.php');
+}
+
+if (!is_array($config['bridges']['bridged'])) {
+ $config['bridges']['bridged'] = array();
+}
+
+$a_bridges = &$config['bridges']['bridged'];
+
+$ifacelist = get_configured_interface_with_descr();
+foreach ($ifacelist as $bif => $bdescr) {
+ if (substr(get_real_interface($bif), 0, 3) == "gre") {
+ unset($ifacelist[$bif]);
+ }
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_bridges[$id]) {
+ $pconfig['enablestp'] = isset($a_bridges[$id]['enablestp']);
+ $pconfig['descr'] = $a_bridges[$id]['descr'];
+ $pconfig['bridgeif'] = $a_bridges[$id]['bridgeif'];
+ $pconfig['members'] = $a_bridges[$id]['members'];
+ $pconfig['maxaddr'] = $a_bridges[$id]['maxaddr'];
+ $pconfig['timeout'] = $a_bridges[$id]['timeout'];
+ if ($a_bridges[$id]['static']) {
+ $pconfig['static'] = $a_bridges[$id]['static'];
+ }
+ if ($a_bridges[$id]['private']) {
+ $pconfig['private'] = $a_bridges[$id]['private'];
+ }
+ if (isset($a_bridges[$id]['stp'])) {
+ $pconfig['stp'] = $a_bridges[$id]['stp'];
+ }
+ $pconfig['maxage'] = $a_bridges[$id]['maxage'];
+ $pconfig['fwdelay'] = $a_bridges[$id]['fwdelay'];
+ $pconfig['hellotime'] = $a_bridges[$id]['hellotime'];
+ $pconfig['priority'] = $a_bridges[$id]['priority'];
+ $pconfig['proto'] = $a_bridges[$id]['proto'];
+ $pconfig['holdcnt'] = $a_bridges[$id]['holdcnt'];
+ if (!empty($a_bridges[$id]['ifpriority'])) {
+ $pconfig['ifpriority'] = explode(",", $a_bridges[$id]['ifpriority']);
+ $ifpriority = array();
+ foreach ($pconfig['ifpriority'] as $cfg) {
+ list ($key, $value) = explode(":", $cfg);
+ $embprioritycfg[$key] = $value;
+ foreach ($embprioritycfg as $key => $value) {
+ $ifpriority[$key] = $value;
+ }
+ }
+ $pconfig['ifpriority'] = $ifpriority;
+ }
+ if (!empty($a_bridges[$id]['ifpathcost'])) {
+ $pconfig['ifpathcost'] = explode(",", $a_bridges[$id]['ifpathcost']);
+ $ifpathcost = array();
+ foreach ($pconfig['ifpathcost'] as $cfg) {
+ list ($key, $value) = explode(":", $cfg);
+ $embpathcfg[$key] = $value;
+ foreach ($embpathcfg as $key => $value) {
+ $ifpathcost[$key] = $value;
+ }
+ }
+ $pconfig['ifpathcost'] = $ifpathcost;
+ }
+ $pconfig['span'] = $a_bridges[$id]['span'];
+ if (isset($a_bridges[$id]['edge'])) {
+ $pconfig['edge'] = $a_bridges[$id]['edge'];
+ }
+ if (isset($a_bridges[$id]['autoedge'])) {
+ $pconfig['autoedge'] = $a_bridges[$id]['autoedge'];
+ }
+ if (isset($a_bridges[$id]['ptp'])) {
+ $pconfig['ptp'] = $a_bridges[$id]['ptp'];
+ }
+ if (isset($a_bridges[$id]['autoptp'])) {
+ $pconfig['autoptp'] = $a_bridges[$id]['autoptp'];
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "members");
+ $reqdfieldsn = array(gettext("Member Interfaces"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['maxage'] && !is_numeric($_POST['maxage'])) {
+ $input_errors[] = gettext("Maxage needs to be an integer between 6 and 40.");
+ }
+ if ($_POST['maxaddr'] && !is_numeric($_POST['maxaddr'])) {
+ $input_errors[] = gettext("Maxaddr needs to be an integer.");
+ }
+ if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) {
+ $input_errors[] = gettext("Timeout needs to be an integer.");
+ }
+ if ($_POST['fwdelay'] && !is_numeric($_POST['fwdelay'])) {
+ $input_errors[] = gettext("Forward Delay needs to be an integer between 4 and 30.");
+ }
+ if ($_POST['hellotime'] && !is_numeric($_POST['hellotime'])) {
+ $input_errors[] = gettext("Hello time for STP needs to be an integer between 1 and 2.");
+ }
+ if ($_POST['priority'] && !is_numeric($_POST['priority'])) {
+ $input_errors[] = gettext("Priority for STP needs to be an integer between 0 and 61440.");
+ }
+ if ($_POST['holdcnt'] && !is_numeric($_POST['holdcnt'])) {
+ $input_errors[] = gettext("Transmit Hold Count for STP needs to be an integer between 1 and 10.");
+ }
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ if ($_POST[$ifn] <> "" && !is_numeric($_POST[$ifn])) {
+ $input_errors[] = "{$ifdescr} " . gettext("interface priority for STP needs to be an integer between 0 and 240.");
+ }
+ }
+ $i = 0;
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ if ($_POST["{$ifn}{$i}"] <> "" && !is_numeric($_POST["{$ifn}{$i}"])) {
+ $input_errors[] = "{$ifdescr} " . gettext("interface path cost for STP needs to be an integer between 1 and 200000000.");
+ }
+ $i++;
+ }
+
+ if (!is_array($_POST['members']) || count($_POST['members']) < 1) {
+ $input_errors[] = gettext("You must select at least one member interface for a bridge.");
+ }
+
+ if (is_array($_POST['members'])) {
+ foreach ($_POST['members'] as $ifmembers) {
+ if (empty($config['interfaces'][$ifmembers])) {
+ $input_errors[] = gettext("A member interface passed does not exist in configuration");
+ }
+ if (is_array($config['interfaces'][$ifmembers]['wireless']) &&
+ $config['interfaces'][$ifmembers]['wireless']['mode'] != "hostap") {
+ $input_errors[] = gettext("Bridging a wireless interface is only possible in hostap mode.");
+ }
+ if ($_POST['span'] != "none" && $_POST['span'] == $ifmembers) {
+ $input_errors[] = gettext("Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue.");
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $bridge = array();
+ $bridge['members'] = implode(',', $_POST['members']);
+ $bridge['enablestp'] = $_POST['enablestp'] ? true : false;
+ $bridge['descr'] = $_POST['descr'];
+ $bridge['maxaddr'] = $_POST['maxaddr'];
+ $bridge['timeout'] = $_POST['timeout'];
+ if ($_POST['static']) {
+ $bridge['static'] = implode(',', $_POST['static']);
+ }
+ if ($_POST['private']) {
+ $bridge['private'] = implode(',', $_POST['private']);
+ }
+ if (isset($_POST['stp'])) {
+ $bridge['stp'] = implode(',', $_POST['stp']);
+ }
+ $bridge['maxage'] = $_POST['maxage'];
+ $bridge['fwdelay'] = $_POST['fwdelay'];
+ $bridge['hellotime'] = $_POST['hellotime'];
+ $bridge['priority'] = $_POST['priority'];
+ $bridge['proto'] = $_POST['proto'];
+ $bridge['holdcnt'] = $_POST['holdcnt'];
+ $i = 0;
+ $ifpriority = "";
+ $ifpathcost = "";
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ if ($_POST[$ifn] <> "") {
+ if ($i > 0) {
+ $ifpriority .= ",";
+ }
+ $ifpriority .= $ifn.":".$_POST[$ifn];
+ }
+ if ($_POST["{$ifn}0"] <> "") {
+ if ($i > 0) {
+ $ifpathcost .= ",";
+ }
+ $ifpathcost .= $ifn.":".$_POST["{$ifn}0"];
+ }
+ $i++;
+ }
+ $bridge['ifpriority'] = $ifpriority;
+ $bridge['ifpathcost'] = $ifpathcost;
+
+ if ($_POST['span'] != "none") {
+ $bridge['span'] = $_POST['span'];
+ } else {
+ unset($bridge['span']);
+ }
+ if (isset($_POST['edge'])) {
+ $bridge['edge'] = implode(',', $_POST['edge']);
+ }
+ if (isset($_POST['autoedge'])) {
+ $bridge['autoedge'] = implode(',', $_POST['autoedge']);
+ }
+ if (isset($_POST['ptp'])) {
+ $bridge['ptp'] = implode(',', $_POST['ptp']);
+ }
+ if (isset($_POST['autoptp'])) {
+ $bridge['autoptp'] = implode(',', $_POST['autoptp']);
+ }
+
+ $bridge['bridgeif'] = $_POST['bridgeif'];
+ interface_bridge_configure($bridge);
+ if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) {
+ $input_errors[] = gettext("Error occurred creating interface, please retry.");
+ } else {
+ if (isset($id) && $a_bridges[$id]) {
+ $a_bridges[$id] = $bridge;
+ } else {
+ $a_bridges[] = $bridge;
+ }
+
+ write_config();
+
+ $confif = convert_real_interface_to_friendly_interface_name($bridge['bridgeif']);
+ if ($confif <> "") {
+ interface_configure($confif);
+ }
+
+ header("Location: interfaces_bridge.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("Bridge"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript">
+//<![CDATA[
+function show_source_port_range() {
+ document.getElementById("sprtable").style.display = 'none';
+ document.getElementById("sprtable1").style.display = '';
+ document.getElementById("sprtable2").style.display = '';
+ document.getElementById("sprtable3").style.display = '';
+ document.getElementById("sprtable4").style.display = '';
+ document.getElementById("sprtable5").style.display = '';
+ document.getElementById("sprtable6").style.display = '';
+ document.getElementById("sprtable7").style.display = '';
+ document.getElementById("sprtable8").style.display = '';
+ document.getElementById("sprtable9").style.display = '';
+ document.getElementById("sprtable10").style.display = '';
+}
+//]]>
+</script>
+
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php $size=count($ifacelist); ?>
+<form action="interfaces_bridge_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces bridge edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Bridge configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Member interfaces"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="members[]" multiple="multiple" class="formselect" size="<?php echo $size; ?>">
+ <?php
+ $members_array = explode(',', $pconfig['members']);
+ foreach ($ifacelist as $ifn => $ifinfo) {
+ echo "<option value=\"{$ifn}\"";
+ if (in_array($ifn, $members_array)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifinfo}</option>";
+ }
+ unset($members_array);
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Interfaces participating in the bridge."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="text" name="descr" id="descr" class="formfld unknown" size="50" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ </td>
+ </tr>
+ <tr id="sprtable">
+ <td></td>
+ <td>
+ <p><input type="button" onclick="show_source_port_range()" value="<?=gettext("Show advanced options"); ?>" /></p>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable1">
+ <td valign="top" class="vncell" align="center"><?=gettext("RSTP/STP"); ?> </td>
+ <td class="vtable">
+ <input type="checkbox" name="enablestp" id="enablestp" <?php if ($pconfig['enablestp']) echo "checked=\"checked\"";?> />
+ <span class="vexpl"><strong><?=gettext("Enable spanning tree options for this bridge."); ?> </strong></span>
+ <br /><br />
+ <table id="stpoptions" border="0" cellpadding="6" cellspacing="0" summary="protocol">
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Protocol"); ?></td>
+ <td class="vtable" width="80%">
+ <select name="proto" id="proto">
+ <?php
+ foreach (array("rstp", "stp") as $proto) {
+ echo "<option value=\"{$proto}\"";
+ if ($pconfig['proto'] == $proto) {
+ echo " selected=\"selected\"";
+ }
+ echo ">".strtoupper($proto)."</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Protocol used for spanning tree."); ?> </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("STP interfaces"); ?></td>
+ <td class="vtable" width="80%">
+ <select name="stp[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['stp'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl" >
+ <?=gettext("Enable Spanning Tree Protocol on interface. The if_bridge(4) " .
+ "driver has support for the IEEE 802.1D Spanning Tree Protocol " .
+ "(STP). STP is used to detect and remove loops in a " .
+ "network topology."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Valid time"); ?></td>
+ <td class="vtable" width="80%">
+ <input name="maxage" type="text" class="formfld unknown" id="maxage" size="8" value="<?=htmlspecialchars($pconfig['maxage']);?>" /> <?=gettext("seconds"); ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the time that a Spanning Tree Protocol configuration is " .
+ "valid. The default is 20 seconds. The minimum is 6 seconds and " .
+ "the maximum is 40 seconds."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Forward time"); ?> </td>
+ <td class="vtable" width="80%">
+ <input name="fwdelay" type="text" class="formfld unknown" id="fwdelay" size="8" value="<?=htmlspecialchars($pconfig['fwdelay']);?>" /> <?=gettext("seconds"); ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the time that must pass before an interface begins forwarding " .
+ "packets when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 seconds and the maximum is 30 seconds."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Hello time"); ?></td>
+ <td class="vtable" width="80%">
+ <input name="hellotime" type="text" class="formfld unknown" size="8" id="hellotime" value="<?=htmlspecialchars($pconfig['hellotime']);?>" /> <?=gettext("seconds"); ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the time between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when " .
+ "operating in legacy STP mode. The default is 2 seconds. The minimum is 1 second and the maximum is 2 seconds."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Priority"); ?></td>
+ <td class="vtable" width="80%">
+ <input name="priority" type="text" class="formfld unknown" id="priority" value="<?=htmlspecialchars($pconfig['priority']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the bridge priority for Spanning Tree. The default is 32768. " .
+ "The minimum is 0 and the maximum is 61440."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Hold count"); ?></td>
+ <td class="vtable" width="80%">
+ <input name="holdcnt" type="text" class="formfld unknown" id="holdcnt" value="<?=htmlspecialchars($pconfig['holdcnt']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the transmit hold count for Spanning Tree. This is the number" .
+ " of packets transmitted before being rate limited. The " .
+ "default is 6. The minimum is 1 and the maximum is 10."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Priority"); ?></td>
+ <td class="vtable" width="80%">
+ <table summary="priority">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<tr><td>{$ifdescr}</td><td><input size=\"5\" name=\"{$ifn}\" type=\"text\" class=\"formfld unknown\" id=\"{$ifn}\" value=\"{$ifpriority[$ifn]}\" /></td></tr>";
+ }
+ ?>
+ <tr>
+ <td></td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl" >
+ <?=gettext("Set the Spanning Tree priority of interface to value. The " .
+ "default is 128. The minimum is 0 and the maximum is 240. Increments of 16."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell" width="20%"><?=gettext("Path cost"); ?></td>
+ <td class="vtable" width="80%">
+ <table summary="path cost">
+ <?php
+ $i = 0;
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<tr><td>{$ifdescr}</td><td><input size=\"8\" name=\"{$ifn}{$i}\" type=\"text\" class=\"formfld unknown\" id=\"{$ifn}{$i}\" value=\"{$ifpathcost[$ifn]}\" /></td></tr>";
+ }
+ ?>
+ <tr>
+ <td></td>
+ </tr>
+ </table>
+ <br />
+ <span class="vexpl" >
+ <?=gettext("Set the Spanning Tree path cost of interface to value. The " .
+ "default is calculated from the link speed. To change a previously selected path cost back to automatic, set the cost to 0. ".
+ "The minimum is 1 and the maximum is 200000000."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable2">
+ <td valign="top" class="vncell"><?=gettext("Cache size"); ?></td>
+ <td class="vtable">
+ <input name="maxaddr" size="10" type="text" class="formfld unknown" id="maxaddr" value="<?=htmlspecialchars($pconfig['maxaddr']);?>" /> <?=gettext("entries"); ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the size of the bridge address cache to size. The default is " .
+ ".100 entries."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable3">
+ <td valign="top" class="vncell"><?=gettext("Cache entry expire time"); ?></td>
+ <td>
+ <input name="timeout" type="text" class="formfld unknown" id="timeout" size="10" value="<?=htmlspecialchars($pconfig['timeout']);?>" /> <?=gettext("seconds"); ?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the timeout of address cache entries to this number of seconds. If " .
+ "seconds is zero, then address cache entries will not be expired. " .
+ "The default is 240 seconds."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable4">
+ <td valign="top" class="vncell"><?=gettext("Span port"); ?></td>
+ <td class="vtable">
+ <select name="span" class="formselect" id="span">
+ <option value="none" selected="selected"><?=gettext("None"); ?></option>
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['span']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Add the interface named by interface as a span port on the " .
+ "bridge. Span ports transmit a copy of every frame received by " .
+ "the bridge. This is most useful for snooping a bridged network " .
+ "passively on another host connected to one of the span ports of " .
+ "the bridge."); ?>
+ </span>
+ <p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("The span interface cannot be part of the bridge member interfaces."); ?>
+ </p>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable5">
+ <td valign="top" class="vncell"><?=gettext("Edge ports"); ?></td>
+ <td class="vtable">
+ <select name="edge[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['edge'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set interface as an edge port. An edge port connects directly to " .
+ "end stations and cannot create bridging loops in the network; this " .
+ "allows it to transition straight to forwarding."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable6">
+ <td valign="top" class="vncell"><?=gettext("Auto Edge ports"); ?></td>
+ <td class="vtable">
+ <select name="autoedge[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['autoedge'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Allow interface to automatically detect edge status. This is the " .
+ "default for all interfaces added to a bridge."); ?>
+ </span>
+ <p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("This will disable the autoedge status of interfaces."); ?>
+ </p>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable7">
+ <td valign="top" class="vncell"><?=gettext("PTP ports"); ?></td>
+ <td class="vtable">
+ <select name="ptp[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['ptp'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set the interface as a point-to-point link. This is required for " .
+ "straight transitions to forwarding and should be enabled on a " .
+ "direct link to another RSTP-capable switch."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable8">
+ <td valign="top" class="vncell"><?=gettext("Auto PTP ports"); ?></td>
+ <td class="vtable">
+ <select name="autoptp[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['autoptp'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Automatically detect the point-to-point status on interface by " .
+ "checking the full duplex link status. This is the default for " .
+ "interfaces added to the bridge."); ?>
+ </span>
+ <p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("The interfaces selected here will be removed from default autoedge status."); ?>
+ </p>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable9">
+ <td valign="top" class="vncell"><?=gettext("Sticky ports"); ?></td>
+ <td class="vtable">
+ <select name="static[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['static'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Mark an interface as a \"sticky\" interface. Dynamically learned " .
+ "address entries are treated as static once entered into the " .
+ "cache. Sticky entries are never aged out of the cache or " .
+ "replaced, even if the address is seen on a different interface."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="sprtable10">
+ <td valign="top" class="vncell"><?=gettext("Private ports"); ?></td>
+ <td class="vtable">
+ <select name="private[]" class="formselect" multiple="multiple" size="3">
+ <?php
+ foreach ($ifacelist as $ifn => $ifdescr) {
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['private'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Mark an interface as a \"private\" interface. A private interface does not forward any traffic to any other port that is also " .
+ "a private interface."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="bridgeif" value="<?=htmlspecialchars($pconfig['bridgeif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_bridges[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_gif.php b/src/usr/local/www/interfaces_gif.php
new file mode 100644
index 0000000..0730090
--- /dev/null
+++ b/src/usr/local/www/interfaces_gif.php
@@ -0,0 +1,162 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_gif.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-gif
+##|*NAME=Interfaces: GIF page
+##|*DESCR=Allow access to the 'Interfaces: GIF' page.
+##|*MATCH=interfaces_gif.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['gifs']['gif'])) {
+ $config['gifs']['gif'] = array();
+}
+
+$a_gifs = &$config['gifs']['gif'] ;
+
+function gif_inuse($num) {
+ global $config, $a_gifs;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_gifs[$num]['gifif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ if (!isset($_GET['id'])) {
+ $input_errors[] = gettext("Wrong parameters supplied");
+ } else if (empty($a_gifs[$_GET['id']])) {
+ $input_errors[] = gettext("Wrong index supplied");
+ /* check if still in use */
+ } else if (gif_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This gif TUNNEL cannot be deleted because it is still being used as an interface.");
+ } else {
+ mwexec("/sbin/ifconfig " . $a_gifs[$_GET['id']]['gifif'] . " destroy");
+ unset($a_gifs[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_gif.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("GIF"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces gif">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), true, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Tunnel to..."); ?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $i = 0;
+ foreach ($a_gifs as $gif):
+ ?>
+ <tr ondblclick="document.location='interfaces_gif_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($gif['if']));?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($gif['remote-addr']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($gif['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_gif_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_gif.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gif tunnel?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_gif_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list"><p class="vexpl"><span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("GIF tunnels are configured here."); ?>
+ <br /><br />
+ <?php echo gettext("If you are using a GIF tunnel to connect to a Hurricane Electric (he.net) Tunnel Broker on a WAN with a dynamic IP, you may want to add a"); ?> <a href="services_dyndns.php"><?php echo gettext("HE.net Tunnelbroker type DynDNS Entry"); ?></a> <?php echo gettext("to keep your tunnel functional when your IP changes."); ?></p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_gif_edit.php b/src/usr/local/www/interfaces_gif_edit.php
new file mode 100644
index 0000000..2870c79
--- /dev/null
+++ b/src/usr/local/www/interfaces_gif_edit.php
@@ -0,0 +1,272 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_gif_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-gif-edit
+##|*NAME=Interfaces: GIF: Edit page
+##|*DESCR=Allow access to the 'Interfaces: GIF: Edit' page.
+##|*MATCH=interfaces_gif_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_gif.php');
+}
+
+if (!is_array($config['gifs']['gif'])) {
+ $config['gifs']['gif'] = array();
+}
+
+$a_gifs = &$config['gifs']['gif'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_gifs[$id]) {
+ $pconfig['if'] = $a_gifs[$id]['if'];
+ if (!empty($a_gifs[$id]['ipaddr'])) {
+ $pconfig['if'] = $pconfig['if'] . '|' . $a_gifs[$id]['ipaddr'];
+ }
+ $pconfig['gifif'] = $a_gifs[$id]['gifif'];
+ $pconfig['remote-addr'] = $a_gifs[$id]['remote-addr'];
+ $pconfig['tunnel-remote-net'] = $a_gifs[$id]['tunnel-remote-net'];
+ $pconfig['tunnel-local-addr'] = $a_gifs[$id]['tunnel-local-addr'];
+ $pconfig['tunnel-remote-addr'] = $a_gifs[$id]['tunnel-remote-addr'];
+ $pconfig['link1'] = isset($a_gifs[$id]['link1']);
+ $pconfig['link0'] = isset($a_gifs[$id]['link0']);
+ $pconfig['descr'] = $a_gifs[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "if remote-addr tunnel-local-addr tunnel-remote-addr tunnel-remote-net");
+ $reqdfieldsn = array(gettext("Parent interface"), gettext("gif remote address"), gettext("gif tunnel local address"), gettext("gif tunnel remote address"), gettext("gif tunnel remote netmask"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ((!is_ipaddr($_POST['tunnel-local-addr'])) ||
+ (!is_ipaddr($_POST['tunnel-remote-addr'])) ||
+ (!is_ipaddr($_POST['remote-addr']))) {
+ $input_errors[] = gettext("The tunnel local and tunnel remote fields must have valid IP addresses.");
+ }
+
+ $alias = strstr($_POST['if'], '|');
+ if ((is_ipaddrv4($alias) && !is_ipaddrv4($_POST['remote-addr'])) ||
+ (is_ipaddrv6($alias) && !is_ipaddrv6($_POST['remote-addr']))) {
+ $input_errors[] = gettext("The alias IP address family has to match the family of the remote peer address.");
+ }
+
+ foreach ($a_gifs as $gif) {
+ if (isset($id) && ($a_gifs[$id]) && ($a_gifs[$id] === $gif)) {
+ continue;
+ }
+
+ /* FIXME: needs to perform proper subnet checks in the future */
+ if (($gif['if'] == $interface) && ($gif['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) {
+ $input_errors[] = sprintf(gettext("A gif with the network %s is already defined."), $gif['tunnel-remote-addr']);
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $gif = array();
+ list($gif['if'], $gif['ipaddr']) = explode("|", $_POST['if']);
+ $gif['tunnel-local-addr'] = $_POST['tunnel-local-addr'];
+ $gif['tunnel-remote-addr'] = $_POST['tunnel-remote-addr'];
+ $gif['tunnel-remote-net'] = $_POST['tunnel-remote-net'];
+ $gif['remote-addr'] = $_POST['remote-addr'];
+ $gif['descr'] = $_POST['descr'];
+ $gif['link1'] = isset($_POST['link1']);
+ $gif['link0'] = isset($_POST['link0']);
+ $gif['gifif'] = $_POST['gifif'];
+
+ $gif['gifif'] = interface_gif_configure($gif);
+ if ($gif['gifif'] == "" || !stristr($gif['gifif'], "gif")) {
+ $input_errors[] = gettext("Error occurred creating interface, please retry.");
+ } else {
+ if (isset($id) && $a_gifs[$id]) {
+ $a_gifs[$id] = $gif;
+ } else {
+ $a_gifs[] = $gif;
+ }
+
+ write_config();
+
+ $confif = convert_real_interface_to_friendly_interface_name($gif['gifif']);
+ if ($confif <> "") {
+ interface_configure($confif);
+ }
+
+ header("Location: interfaces_gif.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("GIF"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_gif_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces gif edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("GIF configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="if" class="formselect">
+ <?php
+ $portlist = get_possible_listen_ips();
+ foreach ($portlist as $ifn => $ifinfo) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['if']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($ifinfo) . "</option>\n";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("The interface here serves as the local address to be used for the gif tunnel."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("gif remote address"); ?></td>
+ <td class="vtable">
+ <input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="24" value="<?=htmlspecialchars($pconfig['remote-addr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Peer address where encapsulated gif packets will be sent. "); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("gif tunnel local address"); ?></td>
+ <td class="vtable">
+ <input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Local gif tunnel endpoint"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("gif tunnel remote address "); ?></td>
+ <td class="vtable">
+ <input name="tunnel-remote-addr" type="text" class="formfld unknown ipv4v6" id="tunnel-remote-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>" />
+ <select name="tunnel-remote-net" class="formselect ipv4v6" id="tunnel-remote-net">
+ <?php
+ for ($i = 128; $i > 0; $i--) {
+ echo "<option value=\"{$i}\"";
+ if ($i == $pconfig['tunnel-remote-net']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Remote gif address endpoint. The subnet part is used for determining the network that is tunnelled."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Route caching "); ?></td>
+ <td class="vtable">
+ <input name="link0" type="checkbox" id="link0" <?if ($pconfig['link0']) echo "checked=\"checked\"";?> />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Specify if route caching can be enabled. Be careful with these settings on dynamic networks. "); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("ECN friendly behavior"); ?></td>
+ <td class="vtable">
+ <input name="link1" type="checkbox" id="link1" <?if ($pconfig['link1']) echo "checked=\"checked\"";?> />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Note that the ECN friendly behavior violates RFC2893. This should be " .
+ "used in mutual agreement with the peer."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="gifif" value="<?=htmlspecialchars($pconfig['gifif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_gifs[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_gre.php b/src/usr/local/www/interfaces_gre.php
new file mode 100644
index 0000000..3431987
--- /dev/null
+++ b/src/usr/local/www/interfaces_gre.php
@@ -0,0 +1,158 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_gre.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-gre
+##|*NAME=Interfaces: GRE page
+##|*DESCR=Allow access to the 'Interfaces: GRE' page.
+##|*MATCH=interfaces_gre.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+if (!is_array($config['gres']['gre'])) {
+ $config['gres']['gre'] = array();
+}
+
+$a_gres = &$config['gres']['gre'] ;
+
+function gre_inuse($num) {
+ global $config, $a_gres;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_gres[$num]['greif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ if (!isset($_GET['id'])) {
+ $input_errors[] = gettext("Wrong parameters supplied");
+ } else if (empty($a_gres[$_GET['id']])) {
+ $input_errors[] = gettext("Wrong index supplied");
+ /* check if still in use */
+ } else if (gre_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This GRE tunnel cannot be deleted because it is still being used as an interface.");
+ } else {
+ mwexec("/sbin/ifconfig " . $a_gres[$_GET['id']]['greif'] . " destroy");
+ unset($a_gres[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_gre.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("GRE"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces gre">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), true, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Tunnel to...");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $i = 0;
+ foreach ($a_gres as $gre):
+ ?>
+ <tr ondblclick="document.location='interfaces_gre_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($gre['if']));?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($gre['remote-addr']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($gre['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_gre_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_gre.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this GRE tunnel?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_gre_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td class="tabcont" colspan="3">
+ <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Here you can configure Generic Routing Encapsulation (GRE - RFC 2784) tunnels.");?></span></p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_gre_edit.php b/src/usr/local/www/interfaces_gre_edit.php
new file mode 100644
index 0000000..a6cde04
--- /dev/null
+++ b/src/usr/local/www/interfaces_gre_edit.php
@@ -0,0 +1,262 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_gre_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-gre-edit
+##|*NAME=Interfaces: GRE: Edit page
+##|*DESCR=Allow access to the 'Interfaces: GRE: Edit' page.
+##|*MATCH=interfaces_gre_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_gre.php');
+}
+
+if (!is_array($config['gres']['gre'])) {
+ $config['gres']['gre'] = array();
+}
+
+$a_gres = &$config['gres']['gre'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_gres[$id]) {
+ $pconfig['if'] = $a_gres[$id]['if'];
+ $pconfig['greif'] = $a_gres[$id]['greif'];
+ $pconfig['remote-addr'] = $a_gres[$id]['remote-addr'];
+ $pconfig['tunnel-remote-net'] = $a_gres[$id]['tunnel-remote-net'];
+ $pconfig['tunnel-local-addr'] = $a_gres[$id]['tunnel-local-addr'];
+ $pconfig['tunnel-remote-addr'] = $a_gres[$id]['tunnel-remote-addr'];
+ $pconfig['link1'] = isset($a_gres[$id]['link1']);
+ $pconfig['link2'] = isset($a_gres[$id]['link2']);
+ $pconfig['link0'] = isset($a_gres[$id]['link0']);
+ $pconfig['descr'] = $a_gres[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "if remote-addr tunnel-local-addr tunnel-remote-addr tunnel-remote-net");
+ $reqdfieldsn = array(gettext("Parent interface"), gettext("Remote tunnel endpoint IP address"), gettext("Local tunnel IP address"), gettext("Remote tunnel IP address"), gettext("Remote tunnel network"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ((!is_ipaddr($_POST['tunnel-local-addr'])) ||
+ (!is_ipaddr($_POST['tunnel-remote-addr'])) ||
+ (!is_ipaddr($_POST['remote-addr']))) {
+ $input_errors[] = gettext("The tunnel local and tunnel remote fields must have valid IP addresses.");
+ }
+
+ foreach ($a_gres as $gre) {
+ if (isset($id) && ($a_gres[$id]) && ($a_gres[$id] === $gre)) {
+ continue;
+ }
+
+ if (($gre['if'] == $_POST['if']) && ($gre['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) {
+ $input_errors[] = sprintf(gettext("A GRE tunnel with the network %s is already defined."), $gre['remote-network']);
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $gre = array();
+ $gre['if'] = $_POST['if'];
+ $gre['tunnel-local-addr'] = $_POST['tunnel-local-addr'];
+ $gre['tunnel-remote-addr'] = $_POST['tunnel-remote-addr'];
+ $gre['tunnel-remote-net'] = $_POST['tunnel-remote-net'];
+ $gre['remote-addr'] = $_POST['remote-addr'];
+ $gre['descr'] = $_POST['descr'];
+ $gre['link1'] = isset($_POST['link1']);
+ $gre['link2'] = isset($_POST['link2']);
+ $gre['link0'] = isset($_POST['link0']);
+ $gre['greif'] = $_POST['greif'];
+
+ $gre['greif'] = interface_gre_configure($gre);
+ if ($gre['greif'] == "" || !stristr($gre['greif'], "gre")) {
+ $input_errors[] = gettext("Error occurred creating interface, please retry.");
+ } else {
+ if (isset($id) && $a_gres[$id]) {
+ $a_gres[$id] = $gre;
+ } else {
+ $a_gres[] = $gre;
+ }
+
+ write_config();
+
+ $confif = convert_real_interface_to_friendly_interface_name($gre['greif']);
+ if ($confif <> "") {
+ interface_configure($confif);
+ }
+
+ header("Location: interfaces_gre.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("GRE"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_gre_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces gre edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("GRE configuration");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="if" class="formselect">
+ <?php
+ $portlist = get_possible_listen_ips();
+ foreach ($portlist as $ifn => $ifinfo) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['if']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($ifinfo) . "</option>\n";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("The interface here serves as the local address to be used for the GRE tunnel.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Remote tunnel endpoint IP address");?></td>
+ <td class="vtable">
+ <input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="16" value="<?=htmlspecialchars($pconfig['remote-addr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Peer address where encapsulated GRE packets will be sent ");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Local tunnel IP address ");?></td>
+ <td class="vtable">
+ <input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Local IP address assigned inside this tunnel");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Remote tunnel IP address ");?></td>
+ <td class="vtable">
+ <input name="tunnel-remote-addr" type="text" class="formfld unknown ipv4v6" id="tunnel-remote-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>" />
+ <select name="tunnel-remote-net" class="formselect ipv4v6" id="tunnel-remote-net">
+ <?php
+ for ($i = 128; $i > 0; $i--) {
+ echo "<option value=\"{$i}\"";
+ if ($i == $pconfig['tunnel-remote-net']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("IP address inside this tunnel on the remote end. The subnet part is used for the determining the network that is tunneled.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Mobile encapsulation");?></td>
+ <td class="vtable">
+ <input name="link0" type="checkbox" id="link0" <?if ($pconfig['link0']) echo "checked=\"checked\"";?> />
+ <br />
+ <span class="vexpl"><?=gettext("Check this box to use mobile encapsulation (IP protocol 55, RFC 2004). When unchecked, uses GRE encapsulation (IP protocol 47, RFCs 1701, 1702).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Route search type");?></td>
+ <td class="vtable">
+ <input name="link1" type="checkbox" id="link1" <?if ($pconfig['link1']) echo "checked=\"checked\"";?> />
+ <br />
+ <span class="vexpl">
+ <?=gettext("For correct operation, the GRE device needs a route to the destination".
+ " that is less specific than the one over the tunnel. (Basically, there".
+ " needs to be a route to the decapsulating host that does not run over the".
+ " tunnel, as this would be a loop.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("WCCP version");?></td>
+ <td class="vtable">
+ <input name="link2" type="checkbox" id="link2" <?if ($pconfig['link2']) echo "checked=\"checked\"";?> />
+ <br />
+ <span class="vexpl"><?=gettext("Check this box for WCCP encapsulation version 2, or leave unchecked for version 1.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="greif" value="<?=htmlspecialchars($pconfig['greif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_gres[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_groups.php b/src/usr/local/www/interfaces_groups.php
new file mode 100644
index 0000000..6342bcf
--- /dev/null
+++ b/src/usr/local/www/interfaces_groups.php
@@ -0,0 +1,171 @@
+<?php
+/*
+ interfaces_groups.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-groups
+##|*NAME=Interfaces: Groups page
+##|*DESCR=Create interface groups
+##|*MATCH=interfaces_groups.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+if (!is_array($config['ifgroups']['ifgroupentry'])) {
+ $config['ifgroups']['ifgroupentry'] = array();
+}
+
+$a_ifgroups = &$config['ifgroups']['ifgroupentry'];
+
+if ($_GET['act'] == "del") {
+ if ($a_ifgroups[$_GET['id']]) {
+ $members = explode(" ", $a_ifgroups[$_GET['id']]['members']);
+ foreach ($members as $ifs) {
+ $realif = get_real_interface($ifs);
+ if ($realif) {
+ mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$_GET['id']]['ifname']);
+ }
+ }
+ unset($a_ifgroups[$_GET['id']]);
+ write_config();
+ header("Location: interfaces_groups.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("Groups"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces groups">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), true, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="35%" class="listhdrr"><?=gettext("Members");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list"></td>
+ </tr>
+<?php
+ if (count ($a_ifgroups)):
+ $i = 0;
+ foreach ($a_ifgroups as $ifgroupentry):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
+ <a href="/firewall_rules.php?if=<?=htmlspecialchars($ifgroupentry['ifname']);?>"><?=htmlspecialchars($ifgroupentry['ifname']);?></a>
+ </td>
+ <td class="listr" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
+<?php
+ $members_arr = explode(" ", $ifgroupentry['members']);
+ $iflist = get_configured_interface_with_descr(false, true);
+ $memberses_arr = array();
+ foreach ($members_arr as $memb) {
+ $memberses_arr[] = $iflist[$memb] ? $iflist[$memb] : $memb;
+ }
+ unset($iflist);
+ $memberses = implode(", ", $memberses_arr);
+ echo $memberses;
+ if (count($members_arr) < 10) {
+ echo " ";
+ } else {
+ echo "...";
+ }
+?>
+ </td>
+ <td class="listbg" ondblclick="document.location='interfaces_groups_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($ifgroupentry['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="interfaces_groups_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit group");?>" alt="edit" /></a></td>
+ <td><a href="interfaces_groups.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this group? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete ifgroupentry");?>" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="interfaces_groups_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new group");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont" colspan="3">
+ <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br /></strong></span><?=gettext("Interface Groups allow you to create rules that apply to multiple interfaces without duplicating the rules. If you remove members from an interface group, the group rules no longer apply to that interface.");?></span></p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_groups_edit.php b/src/usr/local/www/interfaces_groups_edit.php
new file mode 100644
index 0000000..22b8567
--- /dev/null
+++ b/src/usr/local/www/interfaces_groups_edit.php
@@ -0,0 +1,378 @@
+<?php
+/*
+ interfaces_groups_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-groups-edit
+##|*NAME=Interfaces: Groups: Edit page
+##|*DESCR=Allow access to the 'Interfaces: Groups: Edit' page.
+##|*MATCH=interfaces_groups_edit.php*
+##|-PRIV
+
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+$pgtitle = array(gettext("Interfaces"), gettext("Groups"), gettext("Edit"));
+$shortcut_section = "interfaces";
+
+if (!is_array($config['ifgroups']['ifgroupentry'])) {
+ $config['ifgroups']['ifgroupentry'] = array();
+}
+
+$a_ifgroups = &$config['ifgroups']['ifgroupentry'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_ifgroups[$id]) {
+ $pconfig['ifname'] = $a_ifgroups[$id]['ifname'];
+ $pconfig['members'] = $a_ifgroups[$id]['members'];
+ $pconfig['descr'] = html_entity_decode($a_ifgroups[$id]['descr']);
+}
+
+$iflist = get_configured_interface_with_descr();
+$iflist_disabled = get_configured_interface_with_descr(false, true);
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!isset($id)) {
+ foreach ($a_ifgroups as $groupentry) {
+ if ($groupentry['ifname'] == $_POST['ifname']) {
+ $input_errors[] = gettext("Group name already exists!");
+ }
+ }
+ }
+ if (preg_match("/([^a-zA-Z])+/", $_POST['ifname'], $match)) {
+ $input_errors[] = gettext("Only letters A-Z are allowed as the group name.");
+ }
+
+ foreach ($iflist as $gif => $gdescr) {
+ if ($gdescr == $_POST['ifname'] || $gif == $_POST['ifname']) {
+ $input_errors[] = "The specified group name is already used by an interface. Please choose another name.";
+ }
+ }
+ $members = "";
+ $isfirst = 0;
+ /* item is a normal ifgroupentry type */
+ for ($x = 0; $x < 9999; $x++) {
+ if ($_POST["members{$x}"] <> "") {
+ if ($isfirst > 0) {
+ $members .= " ";
+ }
+ $members .= $_POST["members{$x}"];
+ $isfirst++;
+ }
+ }
+
+ if (!$input_errors) {
+ $ifgroupentry = array();
+ $ifgroupentry['members'] = $members;
+ $ifgroupentry['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) {
+ if (!empty($config['filter']) && is_array($config['filter']['rule'])) {
+ foreach ($config['filter']['rule'] as $ridx => $rule) {
+ if (isset($rule['floating'])) {
+ $rule_ifs = explode(",", $rule['interface']);
+ $rule_changed = false;
+ foreach ($rule_ifs as $rule_if_id => $rule_if) {
+ if ($rule_if == $a_ifgroups[$id]['ifname']) {
+ $rule_ifs[$rule_if_id] = $_POST['ifname'];
+ $rule_changed = true;
+ }
+ }
+ if ($rule_changed) {
+ $config['filter']['rule'][$ridx]['interface'] = implode(",", $rule_ifs);
+ }
+ } else {
+ if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
+ $config['filter']['rule'][$ridx]['interface'] = $_POST['ifname'];
+ }
+ }
+ }
+ }
+ if (!empty($config['nat']) && is_array($config['nat']['rule'])) {
+ foreach ($config['nat']['rule'] as $ridx => $rule) {
+ if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
+ $config['nat']['rule'][$ridx]['interface'] = $_POST['ifname'];
+ }
+ }
+ }
+ $omembers = explode(" ", $a_ifgroups[$id]['members']);
+ if (count($omembers) > 0) {
+ foreach ($omembers as $ifs) {
+ $realif = get_real_interface($ifs);
+ if ($realif) {
+ mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
+ }
+ }
+ }
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[$id] = $ifgroupentry;
+ } else if (isset($id) && $a_ifgroups[$id]) {
+ $omembers = explode(" ", $a_ifgroups[$id]['members']);
+ $nmembers = explode(" ", $members);
+ $delmembers = array_diff($omembers, $nmembers);
+ if (count($delmembers) > 0) {
+ foreach ($delmembers as $ifs) {
+ $realif = get_real_interface($ifs);
+ if ($realif) {
+ mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
+ }
+ }
+ }
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[$id] = $ifgroupentry;
+ } else {
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[] = $ifgroupentry;
+ }
+
+ write_config();
+
+ interface_group_setup($ifgroupentry);
+
+ header("Location: interfaces_groups.php");
+ exit;
+ } else {
+ $pconfig['descr'] = $_POST['descr'];
+ $pconfig['members'] = $members;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+// Global Variables
+var rowname = new Array(9999);
+var rowtype = new Array(9999);
+var newrow = new Array(9999);
+var rowsize = new Array(9999);
+
+for (i = 0; i < 9999; i++) {
+ rowname[i] = '';
+ rowtype[i] = 'select';
+ newrow[i] = '';
+ rowsize[i] = '30';
+}
+
+var field_counter_js = 0;
+var loaded = 0;
+var is_streaming_progress_bar = 0;
+var temp_streaming_text = "";
+
+var addRowTo = (function() {
+ return (function (tableId) {
+ var d, tbody, tr, td, bgc, i, ii, j;
+ d = document;
+ tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ for (i = 0; i < field_counter_js; i++) {
+ td = d.createElement("td");
+ <?php
+ $innerHTML="\"<input type='hidden' value='\" + totalrows +\"' name='\" + rowname[i] + \"_row-\" + totalrows + \"' /><select size='1' name='\" + rowname[i] + totalrows + \"'>\" +\"";
+
+ foreach ($iflist as $ifnam => $ifdescr) {
+ $innerHTML .= "<option value='{$ifnam}'>{$ifdescr}<\/option>";
+ }
+ $innerHTML .= "<\/select>\";";
+ ?>
+ td.innerHTML=<?=$innerHTML;?>
+ tr.appendChild(td);
+ }
+ td = d.createElement("td");
+ td.rowSpan = "1";
+
+ td.innerHTML = '<a onclick="removeRow(this);return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" alt="remove" /><\/a>';
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+ totalrows++;
+ });
+})();
+
+function removeRow(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr") {
+ el = el.parentNode;
+ }
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+}
+
+ rowname[0] = "members";
+ rowtype[0] = "textbox";
+ rowsize[0] = "30";
+
+ rowname[2] = "detail";
+ rowtype[2] = "textbox";
+ rowsize[2] = "50";
+//]]>
+</script>
+<input type='hidden' name='members_type' value='textbox' class="formfld unknown" />
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+
+<form action="interfaces_groups_edit.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces groups edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Interface Groups Edit");?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Group Name");?></td>
+ <td class="vtable">
+ <input class="formfld unknown" name="ifname" id="ifname" maxlength="15" value="<?=htmlspecialchars($pconfig['ifname']);?>" />
+ <br />
+ <?=gettext("No numbers or spaces are allowed. Only characters in a-zA-Z");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><div id="membersnetworkport"><?=gettext("Member (s)");?></div></td>
+ <td width="78%" class="vtable">
+ <table id="maintable" summary="main table">
+ <tbody>
+ <tr>
+ <td>
+ <div id="onecolumn"><?=gettext("Interface");?></div>
+ </td>
+ </tr>
+<?php
+ $counter = 0;
+ $members = $pconfig['members'];
+ if ($members <> "") {
+ $item = explode(" ", $members);
+ foreach ($item as $ww) {
+ $members = $item[$counter];
+ $tracker = $counter;
+?>
+ <tr>
+ <td class="vtable">
+ <select name="members<?php echo $tracker; ?>" class="formselect" id="members<?php echo $tracker; ?>">
+<?php
+ $found = false;
+ foreach ($iflist as $ifnam => $ifdescr) {
+ echo "<option value=\"{$ifnam}\"";
+ if ($ifnam == $members) {
+ $found = true;
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+
+ if ($found === false) {
+ foreach ($iflist_disabled as $ifnam => $ifdescr) {
+ if ($ifnam == $members) {
+ echo "<option value=\"{$ifnam}\" selected=\"selected\">{$ifdescr}</option>";
+ }
+ }
+ }
+?>
+ </select>
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="remove" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+ } // end foreach
+ } // end if
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <br /><br />
+ <strong><?php echo gettext("NOTE:");?></strong>
+ <?php echo gettext("Rules for WAN type interfaces in groups do not contain the reply-to mechanism upon which Multi-WAN typically relies.");?>
+ <a href="https://doc.pfsense.org/index.php/Interface_Groups"><?PHP echo gettext("More Information");?></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <a href="interfaces_groups.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
+ <?php if (isset($id) && $a_ifgroups[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ field_counter_js = 1;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+//]]>
+</script>
+
+<?php
+ unset($iflist);
+ unset($iflist_disabled);
+ include("fend.inc");
+?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_lagg.php b/src/usr/local/www/interfaces_lagg.php
new file mode 100644
index 0000000..32b2a21
--- /dev/null
+++ b/src/usr/local/www/interfaces_lagg.php
@@ -0,0 +1,169 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_lagg.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-lagg
+##|*NAME=Interfaces: LAGG: page
+##|*DESCR=Allow access to the 'Interfaces: LAGG' page.
+##|*MATCH=interfaces_lagg.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['laggs']['lagg'])) {
+ $config['laggs']['lagg'] = array();
+}
+
+$a_laggs = &$config['laggs']['lagg'] ;
+
+function lagg_inuse($num) {
+ global $config, $a_laggs;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_laggs[$num]['laggif']) {
+ return true;
+ }
+ }
+
+ if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ if ($vlan['if'] == $a_laggs[$num]['laggif']) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ if (!isset($_GET['id'])) {
+ $input_errors[] = gettext("Wrong parameters supplied");
+ } else if (empty($a_laggs[$_GET['id']])) {
+ $input_errors[] = gettext("Wrong index supplied");
+ /* check if still in use */
+ } else if (lagg_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This LAGG interface cannot be deleted because it is still being used.");
+ } else {
+ mwexec_bg("/sbin/ifconfig " . $a_laggs[$_GET['id']]['laggif'] . " destroy");
+ unset($a_laggs[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_lagg.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("LAGG"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces lagg">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), true, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Members"); ?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_laggs as $lagg):
+?>
+ <tr ondblclick="document.location='interfaces_lagg_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars(strtoupper($lagg['laggif']));?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($lagg['members']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($lagg['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_lagg_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_lagg.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('Do you really want to delete this LAGG interface?')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_lagg_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list">
+ <p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:"); ?><br />
+ </strong></span>
+ <?=gettext("LAGG allows for link aggregation, bonding and fault tolerance. Only unassigned interfaces can be added to LAGG."); ?>
+ </p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_lagg_edit.php b/src/usr/local/www/interfaces_lagg_edit.php
new file mode 100644
index 0000000..d548160
--- /dev/null
+++ b/src/usr/local/www/interfaces_lagg_edit.php
@@ -0,0 +1,278 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_lagg_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-lagg-edit
+##|*NAME=Interfaces: LAGG: Edit page
+##|*DESCR=Allow access to the 'Interfaces: LAGG: Edit' page.
+##|*MATCH=interfaces_lagg_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_lagg.php');
+}
+
+if (!is_array($config['laggs']['lagg'])) {
+ $config['laggs']['lagg'] = array();
+}
+
+$a_laggs = &$config['laggs']['lagg'];
+
+$portlist = get_interface_list();
+
+$realifchecklist = array();
+/* add LAGG interfaces */
+if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
+ foreach ($config['laggs']['lagg'] as $lagg) {
+ unset($portlist[$lagg['laggif']]);
+ $laggiflist = explode(",", $lagg['members']);
+ foreach ($laggiflist as $tmpif) {
+ $realifchecklist[get_real_interface($tmpif)] = $tmpif;
+ }
+ }
+}
+
+$checklist = get_configured_interface_list(false, true);
+foreach ($checklist as $tmpif) {
+ $realifchecklist[get_real_interface($tmpif)] = $tmpif;
+}
+
+$laggprotos = array("none", "lacp", "failover", "fec", "loadbalance", "roundrobin");
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_laggs[$id]) {
+ $pconfig['laggif'] = $a_laggs[$id]['laggif'];
+ $pconfig['members'] = $a_laggs[$id]['members'];
+ $laggiflist = explode(",", $a_laggs[$id]['members']);
+ foreach ($laggiflist as $tmpif) {
+ unset($realifchecklist[get_real_interface($tmpif)]);
+ }
+ $pconfig['proto'] = $a_laggs[$id]['proto'];
+ $pconfig['descr'] = $a_laggs[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "members proto");
+ $reqdfieldsn = array(gettext("Member interfaces"), gettext("Lagg protocol"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (is_array($_POST['members'])) {
+ foreach ($_POST['members'] as $member) {
+ if (!does_interface_exist($member)) {
+ $input_errors[] = gettext("Interface supplied as member is invalid");
+ }
+ }
+ } else if (!does_interface_exist($_POST['members'])) {
+ $input_errors[] = gettext("Interface supplied as member is invalid");
+ }
+
+ if (!in_array($_POST['proto'], $laggprotos)) {
+ $input_errors[] = gettext("Protocol supplied is invalid");
+ }
+
+ if (!$input_errors) {
+ $lagg = array();
+ $lagg['members'] = implode(',', $_POST['members']);
+ $lagg['descr'] = $_POST['descr'];
+ $lagg['laggif'] = $_POST['laggif'];
+ $lagg['proto'] = $_POST['proto'];
+ if (isset($id) && $a_laggs[$id]) {
+ $lagg['laggif'] = $a_laggs[$id]['laggif'];
+ }
+
+ $lagg['laggif'] = interface_lagg_configure($lagg);
+ if ($lagg['laggif'] == "" || !stristr($lagg['laggif'], "lagg")) {
+ $input_errors[] = gettext("Error occurred creating interface, please retry.");
+ } else {
+ if (isset($id) && $a_laggs[$id]) {
+ $a_laggs[$id] = $lagg;
+ } else {
+ $a_laggs[] = $lagg;
+ }
+
+ write_config();
+
+ $confif = convert_real_interface_to_friendly_interface_name($lagg['laggif']);
+ if ($confif <> "") {
+ interface_configure($confif);
+ }
+
+ header("Location: interfaces_lagg.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("LAGG"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_lagg_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces lagg edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("LAGG configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="members[]" multiple="multiple" size="4" class="formselect">
+<?php
+ foreach ($portlist as $ifn => $ifinfo) {
+ if (array_key_exists($ifn, $realifchecklist)) {
+ continue;
+ }
+ echo "<option value=\"{$ifn}\"";
+ if (stristr($pconfig['members'], $ifn)) {
+ echo " selected=\"selected\"";
+ }
+ echo ">". $ifn ."(".$ifinfo['mac'] .")</option>";
+ }
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose the members that will be used for the link aggregation"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Lag proto"); ?></td>
+ <td class="vtable">
+ <select name="proto" class="formselect" id="proto">
+<?php
+ foreach ($laggprotos as $proto) {
+ echo "<option value=\"{$proto}\"";
+ if ($proto == $pconfig['proto']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">".strtoupper($proto)."</option>";
+ }
+?>
+ </select>
+ <br />
+ <ul class="vexpl">
+ <li>
+ <b><?=gettext("failover"); ?></b><br />
+ <?=gettext("Sends and receives traffic only through the master port. If " .
+ "the master port becomes unavailable, the next active port is " .
+ "used. The first interface added is the master port; any " .
+ "interfaces added after that are used as failover devices."); ?>
+ </li>
+ <li>
+ <b><?=gettext("fec"); ?></b><br />
+ <?=gettext("Supports Cisco EtherChannel. This is a static setup and " .
+ "does not negotiate aggregation with the peer or exchange " .
+ "frames to monitor the link."); ?>
+ </li>
+ <li>
+ <b><?=gettext("lacp"); ?></b><br />
+ <?=gettext("Supports the IEEE 802.3ad Link Aggregation Control Protocol " .
+ "(LACP) and the Marker Protocol. LACP will negotiate a set " .
+ "of aggregable links with the peer in to one or more Link " .
+ "Aggregated Groups. Each LAG is composed of ports of the " .
+ "same speed, set to full-duplex operation. The traffic will " .
+ "be balanced across the ports in the LAG with the greatest " .
+ "total speed, in most cases there will only be one LAG which " .
+ "contains all ports. In the event of changes in physical " .
+ "connectivity, Link Aggregation will quickly converge to a " .
+ "new configuration."); ?>
+ </li>
+ <li>
+ <b><?=gettext("loadbalance"); ?></b><br />
+ <?=gettext("Balances outgoing traffic across the active ports based on " .
+ "hashed protocol header information and accepts incoming " .
+ "traffic from any active port. This is a static setup and " .
+ "does not negotiate aggregation with the peer or exchange " .
+ "frames to monitor the link. The hash includes the Ethernet " .
+ "source and destination address, and, if available, the VLAN " .
+ "tag, and the IP source and destination address") ?>.
+ </li>
+ <li>
+ <b><?=gettext("roundrobin"); ?></b><br />
+ <?=gettext("Distributes outgoing traffic using a round-robin scheduler " .
+ "through all active ports and accepts incoming traffic from " .
+ "any active port"); ?>.
+ </li>
+ <li>
+ <b><?=gettext("none"); ?></b><br />
+ <?=gettext("This protocol is intended to do nothing: it disables any " .
+ "traffic without disabling the lagg interface itself"); ?>.
+ </li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="laggif" value="<?=htmlspecialchars($pconfig['laggif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_laggs[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_ppps.php b/src/usr/local/www/interfaces_ppps.php
new file mode 100644
index 0000000..85b5181
--- /dev/null
+++ b/src/usr/local/www/interfaces_ppps.php
@@ -0,0 +1,159 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_ppps.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-ppps
+##|*NAME=Interfaces: ppps page
+##|*DESCR=Allow access to the 'Interfaces: ppps' page.
+##|*MATCH=interfaces_ppps.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+function ppp_inuse($num) {
+ global $config, $g;
+ $iflist = get_configured_interface_list(false, true);
+ if (!is_array($config['ppps']['ppp'])) {
+ return false;
+ }
+
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $config['ppps']['ppp'][$num]['if']) {
+ return true;
+ }
+ }
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ /* check if still in use */
+ if (ppp_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This point-to-point link cannot be deleted because it is still being used as an interface.");
+ } elseif (is_array($config['ppps']['ppp']) && is_array($config['ppps']['ppp'][$_GET['id']])) {
+
+ unset($config['ppps']['ppp'][$_GET['id']]['pppoe-reset-type']);
+ handle_pppoe_reset($config['ppps']['ppp'][$_GET['id']]);
+ unset($config['ppps']['ppp'][$_GET['id']]);
+ write_config();
+ header("Location: interfaces_ppps.php");
+ exit;
+ }
+}
+
+if (!is_array($config['ppps']['ppp'])) {
+ $config['ppps']['ppp'] = array();
+}
+$a_ppps = $config['ppps']['ppp'];
+
+$pgtitle = gettext("Interfaces: PPPs");
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces ppps">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), true, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Interface(s)/Port(s)");?></td>
+ <td width="40%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_ppps as $id => $ppp):
+?>
+ <tr ondblclick="document.location='interfaces_ppps_edit.php?id=<?=$i;?>'">
+ <td class="listr">
+ <?=htmlspecialchars($ppp['if']);?>
+ </td>
+ <td class="listr">
+<?php
+ $portlist = explode(",", $ppp['ports']);
+ foreach ($portlist as $portid => $port) {
+ if ($port != get_real_interface($port) && $ppp['type'] != "ppp") {
+ $portlist[$portid] = convert_friendly_interface_to_friendly_descr($port);
+ }
+ }
+ echo htmlspecialchars(implode(",", $portlist));
+?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($ppp['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_ppps_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_ppps.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this PPP interface?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="remove" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_ppps_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_ppps_edit.php b/src/usr/local/www/interfaces_ppps_edit.php
new file mode 100644
index 0000000..2a7eaf9
--- /dev/null
+++ b/src/usr/local/www/interfaces_ppps_edit.php
@@ -0,0 +1,903 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_ppps_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+ Copyright (C) 2010 Gabriel B. <gnoahb@gmail.com>.
+ All rights reserved.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-ppps-edit
+##|*NAME=Interfaces: PPPs: Edit page
+##|*DESCR=Allow access to the 'Interfaces: PPPs: Edit' page.
+##|*MATCH=interfaces_ppps_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_ppps.php');
+}
+
+define("CRON_MONTHLY_PATTERN", "0 0 1 * *");
+define("CRON_WEEKLY_PATTERN", "0 0 * * 0");
+define("CRON_DAILY_PATTERN", "0 0 * * *");
+define("CRON_HOURLY_PATTERN", "0 * * * *");
+
+if (!is_array($config['ppps']['ppp'])) {
+ $config['ppps']['ppp'] = array();
+}
+
+$a_ppps = &$config['ppps']['ppp'];
+
+$iflist = get_configured_interface_with_descr();
+$portlist = get_interface_list();
+$portlist = array_merge($portlist, $iflist);
+
+if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ $portlist[$vlan['vlanif']] = $vlan;
+ }
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_ppps[$id]) {
+ $pconfig['ptpid'] = $a_ppps[$id]['ptpid'];
+ $pconfig['type'] = $a_ppps[$id]['type'];
+ //$pconfig['if'] = $a_ppps[$id]['if'];
+ $pconfig['interfaces'] = $a_ppps[$id]['ports'];
+ $pconfig['username'] = $a_ppps[$id]['username'];
+ $pconfig['password'] = base64_decode($a_ppps[$id]['password']);
+ if (isset($a_ppps[$id]['ondemand'])) {
+ $pconfig['ondemand'] = true;
+ }
+ $pconfig['idletimeout'] = $a_ppps[$id]['idletimeout'];
+ $pconfig['uptime'] = $a_ppps[$id]['uptime'];
+ $pconfig['descr'] = $a_ppps[$id]['descr'];
+ $pconfig['bandwidth'] = explode(",", $a_ppps[$id]['bandwidth']);
+ $pconfig['mtu'] = explode(",", $a_ppps[$id]['mtu']);
+ $pconfig['mru'] = explode(",", $a_ppps[$id]['mru']);
+ $pconfig['mrru'] = explode(",", $a_ppps[$id]['mrru']);
+ if (isset($a_ppps[$id]['shortseq'])) {
+ $pconfig['shortseq'] = true;
+ }
+ if (isset($a_ppps[$id]['acfcomp'])) {
+ $pconfig['acfcomp'] = true;
+ }
+ if (isset($a_ppps[$id]['protocomp'])) {
+ $pconfig['protocomp'] = true;
+ }
+ if (isset($a_ppps[$id]['vjcomp'])) {
+ $pconfig['vjcomp'] = true;
+ }
+ if (isset($a_ppps[$id]['tcpmssfix'])) {
+ $pconfig['tcpmssfix'] = true;
+ }
+ switch ($a_ppps[$id]['type']) {
+ case "ppp":
+ $pconfig['initstr'] = base64_decode($a_ppps[$id]['initstr']);
+ $pconfig['simpin'] = $a_ppps[$id]['simpin'];
+ $pconfig['pin-wait'] = $a_ppps[$id]['pin-wait'];
+ $pconfig['apn'] = $a_ppps[$id]['apn'];
+ $pconfig['apnum'] = $a_ppps[$id]['apnum'];
+ $pconfig['phone'] = $a_ppps[$id]['phone'];
+ $pconfig['connect-timeout'] = $a_ppps[$id]['connect-timeout'];
+ $pconfig['localip'] = explode(",", $a_ppps[$id]['localip']);
+ $pconfig['gateway'] = explode(",", $a_ppps[$id]['gateway']);
+ break;
+ case "l2tp":
+ case "pptp":
+ $pconfig['localip'] = explode(",", $a_ppps[$id]['localip']);
+ $pconfig['subnet'] = explode(",", $a_ppps[$id]['subnet']);
+ $pconfig['gateway'] = explode(",", $a_ppps[$id]['gateway']);
+ case "pppoe":
+ $pconfig['provider'] = $a_ppps[$id]['provider'];
+ if (isset($a_ppps[$id]['provider']) and empty($a_ppps[$id]['provider'])) {
+ $pconfig['null_service'] = true;
+ }
+ /* ================================================ */
+ /* = force a connection reset at a specific time? = */
+ /* ================================================ */
+
+ if (isset($a_ppps[$id]['pppoe-reset-type'])) {
+ $pconfig['pppoe-reset-type'] = $a_ppps[$id]['pppoe-reset-type'];
+ $itemhash = getMPDCRONSettings($a_ppps[$id]['if']);
+ $cronitem = $itemhash['ITEM'];
+ if (isset($cronitem)) {
+ $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}";
+ } else {
+ $resetTime = NULL;
+ }
+
+ if ($a_ppps[$id]['pppoe-reset-type'] == "custom") {
+ $resetTime_a = explode(" ", $resetTime);
+ $pconfig['pppoe_pr_custom'] = true;
+ $pconfig['pppoe_resetminute'] = $resetTime_a[0];
+ $pconfig['pppoe_resethour'] = $resetTime_a[1];
+ /* just initialize $pconfig['pppoe_resetdate'] if the
+ * corresponding item contains appropriate numeric values.
+ */
+ if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") {
+ $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y");
+ }
+ } else if ($a_ppps[$id]['pppoe-reset-type'] == "preset") {
+ $pconfig['pppoe_pr_preset'] = true;
+ switch ($resetTime) {
+ case CRON_MONTHLY_PATTERN:
+ $pconfig['pppoe_monthly'] = true;
+ break;
+ case CRON_WEEKLY_PATTERN:
+ $pconfig['pppoe_weekly'] = true;
+ break;
+ case CRON_DAILY_PATTERN:
+ $pconfig['pppoe_daily'] = true;
+ break;
+ case CRON_HOURLY_PATTERN:
+ $pconfig['pppoe_hourly'] = true;
+ break;
+ }
+ }
+ }
+ break;
+ }
+
+} else {
+ $pconfig['ptpid'] = interfaces_ptpid_next();
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* okay first of all, cause we are just hiding the PPPoE HTML
+ * fields related to PPPoE resets, we are going to unset $_POST
+ * vars, if the reset feature should not be used. Otherwise the
+ * data validation procedure below, may trigger a false error
+ * message.
+ */
+ if (empty($_POST['pppoe-reset-type'])) {
+ unset($_POST['pppoe_resethour']);
+ unset($_POST['pppoe_resetminute']);
+ unset($_POST['pppoe_resetdate']);
+ unset($_POST['pppoe_pr_preset_val']);
+ }
+
+ /* input validation */
+ switch ($_POST['type']) {
+ case "ppp":
+ $reqdfields = explode(" ", "interfaces phone");
+ $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Phone Number"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "pppoe":
+ if ($_POST['ondemand']) {
+ $reqdfields = explode(" ", "interfaces username passwordfld ondemand idletimeout");
+ $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Dial on demand"), gettext("Idle timeout value"));
+ } else {
+ $reqdfields = explode(" ", "interfaces username passwordfld");
+ $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"));
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ case "l2tp":
+ case "pptp":
+ if ($_POST['ondemand']) {
+ $reqdfields = explode(" ", "interfaces username passwordfld localip subnet gateway ondemand idletimeout");
+ $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Local IP address"), gettext("Subnet"), gettext("Remote IP address"), gettext("Dial on demand"), gettext("Idle timeout value"));
+ } else {
+ $reqdfields = explode(" ", "interfaces username passwordfld localip subnet gateway");
+ $reqdfieldsn = array(gettext("Link Interface(s)"), gettext("Username"), gettext("Password"), gettext("Local IP address"), gettext("Subnet"), gettext("Remote IP address"));
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ break;
+ default:
+ $input_errors[] = gettext("Please choose a Link Type.");
+ break;
+ }
+ if ($_POST['type'] == "ppp" && count($_POST['interfaces']) > 1) {
+ $input_errors[] = gettext("Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface.");
+ }
+ if ($_POST['provider'] && !is_domain($_POST['provider'])) {
+ $input_errors[] = gettext("The Service name contains invalid characters.");
+ }
+ if ($_POST['provider'] && $_POST['null_service']) {
+ $input_errors[] = gettext("Do not specify both a Service name and a NULL Service name.");
+ }
+ if (($_POST['idletimeout'] != "") && !is_numericint($_POST['idletimeout'])) {
+ $input_errors[] = gettext("The idle timeout value must be an integer.");
+ }
+ if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) &&
+ $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) {
+ $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23).");
+ }
+ if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) &&
+ $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) {
+ $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59).");
+ }
+ if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
+ $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy).");
+ }
+ if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) {
+ $date_nums = explode("/", $_POST['pppoe_resetdate']);
+ if ($date_nums[0] < 1 || $date_nums[0] > 12) {
+ $input_errors[] = gettext("A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields.");
+ }
+ if ($date_nums[1] < 1 || $date_nums[1] > 31) {
+ $input_errors[] = gettext("A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month");
+ }
+ if ($date_nums[2] < date("Y")) {
+ $input_errors[] = gettext("A valid PPPoE reset year must be specified. Don't select a year in the past!");
+ }
+ }
+
+ if (is_array($_POST['interfaces'])) {
+ foreach ($_POST['interfaces'] as $iface) {
+ if ($_POST['localip'][$iface] && !is_ipaddr($_POST['localip'][$iface])) {
+ $input_errors[] = sprintf(gettext("A valid local IP address must be specified for %s."), $iface);
+ }
+ if ($_POST['gateway'][$iface] && !is_ipaddr($_POST['gateway'][$iface]) && !is_hostname($_POST['gateway'][$iface])) {
+ $input_errors[] = sprintf(gettext("A valid gateway IP address OR hostname must be specified for %s."), $iface);
+ }
+ if ($_POST['bandwidth'][$iface] && !is_numericint($_POST['bandwidth'][$iface])) {
+ $input_errors[] = sprintf(gettext("The bandwidth value for %s must be an integer."), $iface);
+ }
+ if ($_POST['mtu'][$iface] && ($_POST['mtu'][$iface] < 576)) {
+ $input_errors[] = sprintf(gettext("The MTU for %s must be greater than 576 bytes."), $iface);
+ }
+ if ($_POST['mru'][$iface] && ($_POST['mru'][$iface] < 576)) {
+ $input_errors[] = sprintf(gettext("The MRU for %s must be greater than 576 bytes."), $iface);
+ }
+ }
+ }
+
+/*
+ foreach ($a_ppps as $ppp) {
+ if (isset($id) && ($a_ppps[$id]) && ($a_ppps[$id] === $ppp)) {
+ continue;
+ }
+
+ if ($ppp['serialport'] == $_POST['serialport']) {
+ $input_errors[] = "Serial port is in use";
+ break;
+ }
+ }
+*/
+
+ if (!$input_errors) {
+ $ppp = array();
+ $ppp['ptpid'] = $_POST['ptpid'];
+ $ppp['type'] = $_POST['type'];
+ $ppp['if'] = $ppp['type'].$ppp['ptpid'];
+ $ppp['ports'] = implode(',', $_POST['interfaces']);
+ $ppp['username'] = $_POST['username'];
+ $ppp['password'] = base64_encode($_POST['passwordfld']);
+ $ppp['ondemand'] = $_POST['ondemand'] ? true : false;
+ if (!empty($_POST['idletimeout'])) {
+ $ppp['idletimeout'] = $_POST['idletimeout'];
+ } else {
+ unset($ppp['idletimeout']);
+ }
+ $ppp['uptime'] = $_POST['uptime'] ? true : false;
+ if (!empty($_POST['descr'])) {
+ $ppp['descr'] = $_POST['descr'];
+ } else {
+ unset($ppp['descr']);
+ }
+
+ // Loop through fields associated with an individual link/port and make an array of the data
+ $port_fields = array("localip", "gateway", "subnet", "bandwidth", "mtu", "mru", "mrru");
+ foreach ($_POST['interfaces'] as $iface) {
+ foreach ($port_fields as $field_label) {
+ if (isset($_POST[$field_label][$iface])) {
+ $port_data[$field_label][] = $_POST[$field_label][$iface];
+ }
+ }
+ }
+
+ switch ($_POST['type']) {
+ case "ppp":
+ if (!empty($_POST['initstr'])) {
+ $ppp['initstr'] = base64_encode($_POST['initstr']);
+ } else {
+ unset($ppp['initstr']);
+ }
+ if (!empty($_POST['simpin'])) {
+ $ppp['simpin'] = $_POST['simpin'];
+ $ppp['pin-wait'] = $_POST['pin-wait'];
+ } else {
+ unset($ppp['simpin']);
+ unset($ppp['pin-wait']);
+ }
+
+ if (!empty($_POST['apn'])) {
+ $ppp['apn'] = $_POST['apn'];
+ $ppp['apnum'] = $_POST['apnum'];
+ } else {
+ unset($ppp['apn']);
+ unset($ppp['apnum']);
+ }
+ $ppp['phone'] = $_POST['phone'];
+ $ppp['localip'] = implode(',', $port_data['localip']);
+ $ppp['gateway'] = implode(',', $port_data['gateway']);
+ if (!empty($_POST['connect-timeout'])) {
+ $ppp['connect-timeout'] = $_POST['connect-timeout'];
+ } else {
+ unset($ppp['connect-timeout']);
+ }
+ break;
+ case "pppoe":
+ if (!empty($_POST['provider'])) {
+ $ppp['provider'] = $_POST['provider'];
+ } else {
+ unset($ppp['provider']);
+ $ppp['provider'] = $_POST['null_service'] ? true : false;
+ }
+ if (!empty($_POST['pppoe-reset-type'])) {
+ $ppp['pppoe-reset-type'] = $_POST['pppoe-reset-type'];
+ } else {
+ unset($ppp['pppoe-reset-type']);
+ }
+
+ break;
+ case "pptp":
+ case "l2tp":
+ $ppp['localip'] = implode(',', $port_data['localip']);
+ $ppp['subnet'] = implode(',', $port_data['subnet']);
+ $ppp['gateway'] = implode(',', $port_data['gateway']);
+ break;
+ default:
+ break;
+
+ }
+
+ $ppp['shortseq'] = $_POST['shortseq'] ? true : false;
+ $ppp['acfcomp'] = $_POST['acfcomp'] ? true : false;
+ $ppp['protocomp'] = $_POST['protocomp'] ? true : false;
+ $ppp['vjcomp'] = $_POST['vjcomp'] ? true : false;
+ $ppp['tcpmssfix'] = $_POST['tcpmssfix'] ? true : false;
+ $ppp['bandwidth'] = implode(',', $port_data['bandwidth']);
+ if (is_array($port_data['mtu'])) {
+ $ppp['mtu'] = implode(',', $port_data['mtu']);
+ }
+ if (is_array($port_data['mru'])) {
+ $ppp['mru'] = implode(',', $port_data['mru']);
+ }
+ if (is_array($port_data['mrru'])) {
+ $ppp['mrru'] = implode(',', $port_data['mrru']);
+ }
+
+ /* handle_pppoe_reset is called here because if user changes Link Type from PPPoE to another type we
+ must be able to clear the config data in the <cron> section of config.xml if it exists
+ */
+ handle_pppoe_reset($_POST);
+
+ if (isset($id) && $a_ppps[$id]) {
+ $a_ppps[$id] = $ppp;
+ } else {
+ $a_ppps[] = $ppp;
+ }
+
+ write_config();
+ configure_cron();
+
+ foreach ($iflist as $pppif => $ifdescr) {
+ if ($config['interfaces'][$pppif]['if'] == $ppp['if']) {
+ interface_ppps_configure($pppif);
+ }
+ }
+ header("Location: interfaces_ppps.php");
+ exit;
+ }
+} // end if ($_POST)
+
+$closehead = false;
+$pgtitle = array(gettext("Interfaces"), gettext("PPPs"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+$types = array("select" => gettext("Select"), "ppp" => "PPP", "pppoe" => "PPPoE", "pptp" => "PPTP", "l2tp" => "L2TP"/*, "tcp" => "TCP", "udp" => "UDP"*/);
+
+?>
+ <script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script>
+ <link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" />
+ <script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script>
+ <link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/>
+ <script type="text/javascript">
+ //<![CDATA[
+ jQuery(document).ready(function() { updateType(<?php echo "'{$pconfig['type']}'";?>); });
+ //]]>
+ </script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_ppps_edit.php" method="post" name="iform" id="iform">
+ <table id="interfacetable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces ppps edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?= gettext("PPPs configuration"); ?></td>
+ </tr>
+ <tr>
+ <td valign="middle" class="vncell"><strong><?= gettext("Link Type"); ?></strong></td>
+ <td class="vtable">
+ <select name="type" onchange="updateType(this.value);" class="formselect" id="type">
+ <?php
+ foreach ($types as $key => $opt) {
+ echo "<option onclick=\"updateType('{$key}');\"";
+ if ($key == $pconfig['type']) {
+ echo " selected=\"selected\"";
+ }
+ echo " value=\"{$key}\" >" . htmlspecialchars($opt) . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr name="interface" id="interface" >
+ <td width="22%" valign="top" class="vncellreq"><?= gettext("Link interface(s)"); ?></td>
+ <td width="78%" class="vtable">
+ <select style="vertical-align:top" name="interfaces[]" multiple="multiple" class="formselect" size="4" onchange="show_hide_linkfields(this.options);">
+ <option></option>
+ </select>
+ <br />
+ <span class="vexpl"><?= gettext("Select at least two interfaces for Multilink (MLPPP) connections."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" name="portlists" id="portlists">
+ <td id="serialports">
+ <?php
+ $selected_ports = explode(',', $pconfig['interfaces']);
+ if (!is_dir("/var/spool/lock")) {
+ mwexec("/bin/mkdir -p /var/spool/lock");
+ }
+ // $serialports = pfSense_get_modem_devices();
+ // Match files in /dev starting with "cua" then:
+ // [a-zA-Z] = any single alpha character e.g. like "cuau"
+ // [0-9] = a digit from 0 to 9
+ // stuff in {} = the various possible digit and dot combinations to allow an optional 2nd digit, dot, followed by 1 or 2 optional digits
+ // This supports up to 100 device numbers (0 to 99), e.g. cuau0 cuau1 ... cuau10 cuau11 ... cuau99 and also possibilities like cuau1.1 cuau1.11 cuau11.1 cuau11.11
+ $serialports = glob("/dev/cua[a-zA-Z][0-9]{,.[0-9],.[0-9][0-9],[0-9],[0-9].[0-9],[0-9].[0-9][0-9]}", GLOB_BRACE);
+ $serport_count = 0;
+ foreach ($serialports as $port) {
+ $serport_count++;
+ echo $port . "," . trim($port);
+ if (in_array($port, $selected_ports)) {
+ echo ",1|";
+ } else {
+ echo ",|";
+ }
+ }
+ echo $serport_count;
+ ?>
+ </td>
+ <td id="ports">
+ <?php
+ $port_count = 0;
+ foreach ($portlist as $ifn => $ifinfo) {
+ $port_count++;
+ $string = "";
+ if (is_array($ifinfo)) {
+ $string .= $ifn;
+ if ($ifinfo['mac']) {
+ $string .= " ({$ifinfo['mac']})";
+ }
+ } else {
+ $string .= $ifinfo;
+ }
+ $string .= ",{$ifn}";
+ echo htmlspecialchars($string);
+ if (in_array($ifn, $selected_ports)) {
+ echo ",1|";
+ } else {
+ echo ",|";
+ }
+ }
+ echo $port_count;
+ if ($serport_count > $port_count) {
+ $port_count = $serport_count;
+ }
+ ?>
+ </td>
+ <td style="display:none" name="port_count" id="port_count"><?=htmlspecialchars($port_count);?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("You may enter a description here for your reference. Description will appear in the \"Interfaces Assign\" select lists."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" name="select" id="select"><td style="display:none"></td></tr>
+ <?php
+ $k = 0;
+ ?>
+ <tr style="display:none" name="ppp_provider" id="ppp_provider">
+ <td width="22%" valign="top" class="vncell">
+ <?= gettext("Service Provider"); ?>
+ </td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="service provider">
+ <tr id="trcountry" style="display:none">
+ <td><?= gettext("Country:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="country" id="country" onchange="providers_list()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ <tr id="trprovider" style="display:none">
+ <td><?= gettext("Provider:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="provider" id="provider" onchange="providerplan_list()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ <tr id="trproviderplan" style="display:none">
+ <td><?= gettext("Plan:"); ?> &nbsp;&nbsp;</td>
+ <td>
+ <select class="formselect" name="providerplan" id="providerplan" onchange="prefill_provider()">
+ <option></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br /><span class="vexpl"><?= gettext("Select to fill in data for your service provider."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" value="<?=htmlspecialchars($pconfig['password']);?>" />
+ </td>
+ </tr>
+
+ <tr style="display:none" name="phone_num" id="phone_num">
+ <td width="22%" valign="top" class="vncellreq"><?= gettext("Phone Number"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="phone" type="text" class="formfld unknown" id="phone" size="40" value="<?=htmlspecialchars($pconfig['phone']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("Note: Typically *99# for GSM networks and #777 for CDMA networks"); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" name="apn_" id="apn_">
+ <td width="22%" valign="top" class="vncell"><?= gettext("Access Point Name (APN)"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="apn" type="text" class="formfld unknown" id="apn" size="40" value="<?=htmlspecialchars($pconfig['apn']);?>" />
+ </td>
+ </tr>
+
+ <tr style="display:none" name="ppp" id="ppp">
+ <td colspan="2" style="padding:0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="advanced">
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("APN number (optional)"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="apnum" type="text" class="formfld unknown" id="apnum" size="2" value="<?=htmlspecialchars($pconfig['apnum']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("SIM PIN"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="simpin" type="text" class="formfld unknown" id="simpin" size="12" value="<?=htmlspecialchars($pconfig['simpin']);?>" />
+ </td>
+ </tr>
+
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("SIM PIN wait"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pin-wait" type="text" class="formfld unknown" id="pin-wait" size="2" value="<?=htmlspecialchars($pconfig['pin-wait']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("Note: Time to wait for SIM to discover network after PIN is sent to SIM (seconds)."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("Init String"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="text" size="40" class="formfld unknown" id="initstr" name="initstr" value="<?=htmlspecialchars($pconfig['initstr']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("Note: Enter the modem initialization string here. Do NOT include the \"AT\"" .
+ " string at the beginning of the command. Many modern USB 3G modems don't need an initialization string."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("Connection Timeout"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="connect-timeout" type="text" class="formfld unknown" id="connect-timeout" size="2" value="<?=htmlspecialchars($pconfig['connect-timeout']);?>" />
+ <br />
+ <span class="vexpl"><?= gettext("Note: Enter timeout in seconds for connection to be established (sec.) Default is 45 sec."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td valign="top" class="vncell"><?= gettext("Uptime Logging"); ?></td>
+ <td class="vtable">
+ <input type="checkbox" value="on" id="uptime" name="uptime" <?php if (isset($pconfig['uptime'])) echo "checked=\"checked\""; ?> /> <?= gettext("Enable persistent logging of connection uptime."); ?>
+ <br />
+ <span class="vexpl"><?= gettext("This option causes cumulative uptime to be recorded and displayed on the Status Interfaces page."); ?></span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr style="display:none" name="pppoe" id="pppoe">
+ <td colspan="2" style="padding:0px;">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="service name">
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?= gettext("Service name"); ?></td>
+ <td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>" />&nbsp;&nbsp;
+ <input type="checkbox" value="on" id="null_service" name="null_service" <?php if (isset($pconfig['null_service'])) echo "checked=\"checked\""; ?> /> <?= gettext("Configure a NULL Service name"); ?>
+ <br />
+ <span class="vexpl"><?= gettext("Hint: this field can usually be left empty. Service name will not be configured if this field is empty. Check the \"Configure NULL\" box to configure a blank Service name."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td>
+ <td width="78%" class="vtable">
+ <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" summary="periodic reset">
+ <tr>
+ <td align="left" valign="top">
+ <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;">
+ <select style="vertical-align:top" id="reset_type" name="pppoe-reset-type" class="formselect" onchange="show_reset_settings(this.value);">
+ <option value = ""><?= gettext("Disabled"); ?></option>
+ <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected=\"selected\""; ?>><?= gettext("Custom"); ?></option>
+ <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected=\"selected\""; ?>><?= gettext("Pre-Set"); ?></option>
+ </select> <?= gettext("Select a reset timing type"); ?>
+ </p>
+ <?php if ($pconfig['pppoe_pr_custom']): ?>
+ <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap">
+ <?php else: ?>
+ <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap">
+ <?php endif; ?>
+ <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= htmlspecialchars($pconfig['pppoe_resethour']); ?>" size="3" />
+ <?= gettext("hour (0-23)"); ?><br />
+ <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= htmlspecialchars($pconfig['pppoe_resetminute']); ?>" size="3" />
+ <?= gettext("minute (0-59)"); ?><br />
+ <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" />
+ <?= gettext("reset at a specific date (mm/dd/yyyy)"); ?>
+ <br />&nbsp;<br />
+ <span class="red"><strong><?=gettext("Note:");?></strong></span>
+ <?= gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?>
+ </p>
+ <?php if ($pconfig['pppoe_pr_preset']): ?>
+ <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap">
+ <?php else: ?>
+ <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap">
+ <?php endif; ?>
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> />
+ <?= gettext("reset at each month ('0 0 1 * *')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> />
+ <?= gettext("reset at each week ('0 0 * * 0')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> />
+ <?= gettext("reset at each day ('0 0 * * *')"); ?>
+ <br />
+ <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> />
+ <?= gettext("reset at each hour ('0 * * * *')"); ?>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+<?php
+ for ($j = 0; $j < $port_count; $j++) :
+?>
+
+ <tr style="display:none" id="gw_fields<?=$j;?>">
+ <td width="22%" id="localiplabel<?=$j;?>" valign="top" class="vncell"><?= gettext("Local IP"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="localip[]" type="text" class="formfld unknown" id="localip<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['localip'][$j]);?>" />
+ /
+ <select name="subnet[]" class="formselect" id="subnet<?=$j;?>" disabled="disabled">
+ <?php for ($i = 31; $i > 0; $i--): ?>
+ <option value="<?=$i;?>"<?php if ($i == $pconfig['subnet'][$j]) echo " selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select> <?= gettext("IP Address"); ?>
+ </td>
+ </tr>
+ <tr style="display:none" id="ip_fields<?=$j;?>">
+ <td width="22%" id="gatewaylabel<?=$j;?>" valign="top" class="vncell"></td>
+ <td width="78%" class="vtable">
+ <input name="gateway[]" type="text" class="formfld unknown" id="gateway<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['gateway'][$j]);?>" /><?= gettext("IP Address OR Hostname"); ?>
+ </td>
+ </tr>
+<?php
+ endfor;
+?>
+
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td colspan="2" valign="top" height="16"></td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td colspan="2" valign="top" class="listtopic"><?= gettext("Advanced Options"); ?></td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td valign="top" class="vncell"><?= gettext("Dial On Demand"); ?></td>
+ <td class="vtable">
+ <input type="checkbox" value="on" id="ondemand" name="ondemand" <?php if (isset($pconfig['ondemand'])) echo "checked=\"checked\""; ?> /> <?= gettext("Enable Dial-on-Demand mode"); ?>
+ <br />
+ <span class="vexpl"><?= gettext("This option causes the interface to operate in dial-on-demand mode. Do NOT enable if you want your link to be always up. " .
+ "The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?> </span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td valign="top" class="vncell"><?= gettext("Idle Timeout"); ?></td>
+ <td class="vtable">
+ <input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="12" value="<?=htmlspecialchars($pconfig['idletimeout']);?>" /> <?= gettext("(seconds) Default is 0, which disables the timeout feature."); ?>
+ <br />
+ <span class="vexpl"><?= gettext("If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down.");?>
+ <br />
+ <?=gettext("When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. Otherwise, the interface is brought down and all associated routes removed."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("Compression"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="on" id="vjcomp" name="vjcomp" <?php if (isset($pconfig['vjcomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable vjcomp(compression) (auto-negotiated by default)."); ?>
+ <br />
+ <span class="vexpl"><?=gettext("This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet. " .
+ "You almost always want this option. This compression ineffective for TCP connections with enabled modern extensions like time " .
+ "stamping or SACK, which modify TCP options between sequential packets.");?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?= gettext("TCPmssFix"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="on" id="tcpmssfix" name="tcpmssfix" <?php if (isset($pconfig['tcpmssfix'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable tcpmssfix (enabled by default)."); ?>
+ <br />
+ <span class="vexpl"><?=gettext("This option causes mpd to adjust incoming and outgoing TCP SYN segments so that the requested maximum segment size is not greater than the amount ".
+ "allowed by the interface MTU. This is necessary in many setups to avoid problems caused by routers that drop ICMP Datagram Too Big messages. Without these messages, ".
+ "the originating machine sends data, it passes the rogue router then hits a machine that has an MTU that is not big enough for the data. Because the IP Don't Fragment option is set, ".
+ "this machine sends an ICMP Datagram Too Big message back to the originator and drops the packet. The rogue router drops the ICMP message and the originator never ".
+ "gets to discover that it must reduce the fragment size or drop the IP Don't Fragment option from its outgoing data.");?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?=gettext("ShortSeq");?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="on" id="shortseq" name="shortseq" <?php if (isset($pconfig['shortseq'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable shortseq (auto-negotiated by default)."); ?>
+ <br />
+ <span class="vexpl"><?= gettext("This option is only meaningful if multi-link PPP is negotiated. It proscribes shorter multi-link fragment headers, saving two bytes on every frame. " .
+ "It is not necessary to disable this for connections that are not multi-link."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?=gettext("ACFComp"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="on" id="acfcomp" name="acfcomp" <?php if (isset($pconfig['acfcomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable acfcomp (compression) (auto-negotiated by default)."); ?>
+ <br />
+ <span class="vexpl"><?= gettext("Address and control field compression. This option only applies to asynchronous link types. It saves two bytes per frame."); ?></span>
+ </td>
+ </tr>
+ <tr style="display:none" id="advanced_<?=$k;?>" name="advanced_<?=$k;$k++;?>">
+ <td width="22%" valign="top" class="vncell"><?=gettext("ProtoComp"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" value="on" id="protocomp" name="protocomp" <?php if (isset($pconfig['protocomp'])) echo "checked=\"checked\""; ?> />&nbsp;<?= gettext("Disable protocomp (compression) (auto-negotiated by default)."); ?>
+ <br />
+ <span class="vexpl"><?= gettext("Protocol field compression. This option saves one byte per frame for most frames."); ?></span>
+ </td>
+ </tr>
+ <tr id="advanced_" name="advanced_">
+ <td>&nbsp;</td>
+ <td>
+ <p><input type="button" onclick="show_advanced(1)" value="<?=gettext("Show advanced options"); ?>" /></p>
+ </td>
+ <td style="display:none" id="adv_rows" name="adv_rows"><?=$k;?></td>
+ <td style="display:none" id="adv_show" name="adv_show">0</td>
+ </tr>
+<?php
+ for ($i = 0; $i < $port_count; $i++) :
+?>
+ <tr style="display:none" id="link<?=$i;?>">
+ <td width="22%" valign="top" id="linklabel<?=$i;?>" class="vncell"> <?=gettext("Link Parameters");?></td>
+ <td class="vtable">
+ <table name="link_parameters" border="0" cellpadding="6" cellspacing="0" summary="link parameters">
+ <tr>
+ <td width="22%" id="bwlabel<?=$i;?>" valign="top"class="vncell"> <?=gettext("Bandwidth");?></td>
+ <td width="78%" class="vtable">
+ <br />
+ <input name="bandwidth[]" id="bandwidth<?=$i;?>" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['bandwidth'][$i]);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Set ONLY for MLPPP connections and ONLY when links have different bandwidths.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" id="mtulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MTU"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="mtu[]" id="mtu<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mtu'][$i]);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("MTU will default to 1492.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" id="mrulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MRU"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="mru[]" id="mru<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mru'][$i]);?>" />
+ <br />
+ <span class="vexpl">MRU <?=gettext("will be auto-negotiated by default.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" id="mrrulabel<?=$i;?>" valign="top" class="vncell"> <?=gettext("MRRU"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="mrru[]" id="mrru<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mrru'][$i]);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Set ONLY for MLPPP connections.");?> MRRU <?=gettext("will be auto-negotiated by default.");?></span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endfor;
+?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <input name="ptpid" type="hidden" value="<?=htmlspecialchars($pconfig['ptpid']);?>" />
+ <?php if (isset($id) && $a_ppps[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_qinq.php b/src/usr/local/www/interfaces_qinq.php
new file mode 100644
index 0000000..dac5801
--- /dev/null
+++ b/src/usr/local/www/interfaces_qinq.php
@@ -0,0 +1,181 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_qinq.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/ngctl
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-qinq
+##|*NAME=Interfaces: QinQ page
+##|*DESCR=Allow access to the 'Interfaces: QinQ' page.
+##|*MATCH=interfaces_qinq.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+if (!is_array($config['qinqs']['qinqentry'])) {
+ $config['qinqs']['qinqentry'] = array();
+}
+
+$a_qinqs = &$config['qinqs']['qinqentry'];
+
+function qinq_inuse($num) {
+ global $config, $a_qinqs;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_qinqs[$num]['qinqif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ $id = $_GET['id'];
+
+ /* check if still in use */
+ if (qinq_inuse($id)) {
+ $input_errors[] = gettext("This QinQ cannot be deleted because it is still being used as an interface.");
+ } else {
+ $qinq =& $a_qinqs[$id];
+
+ $delmembers = explode(" ", $qinq['members']);
+ if (count($delmembers) > 0) {
+ foreach ($delmembers as $tag) {
+ mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}h{$tag}:");
+ }
+ }
+ mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}qinq:");
+ mwexec("/usr/sbin/ngctl shutdown {$qinq['vlanif']}:");
+ mwexec("/sbin/ifconfig {$qinq['vlanif']} destroy");
+ unset($a_qinqs[$id]);
+
+ write_config();
+
+ header("Location: interfaces_qinq.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("QinQ"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces qinqs">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), true, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Tag");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("QinQ members");?></td>
+ <td width="45%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_qinqs as $qinq):
+?>
+ <tr ondblclick="document.location='interfaces_qinq_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars($qinq['if']);?>
+ </td>
+ <td class="listlr">
+ <?=htmlspecialchars($qinq['tag']);?>
+ </td>
+ <td class="listr">
+ <?php
+ if (strlen($qinq['members']) > 20) {
+ echo substr(htmlspecialchars($qinq['members']), 0, 20) . "...";
+ } else {
+ echo htmlspecialchars($qinq['members']);
+ }
+ ?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($qinq['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_qinq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_qinq.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this QinQ?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="remove" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="4">&nbsp;</td>
+ <td class="list"> <a href="interfaces_qinq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="4" class="list">
+ <p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:");?><br />
+ </strong></span>
+ <?php printf(gettext("Not all drivers/NICs support 802.1Q QinQ tagging properly. On cards that do not explicitly support it, QinQ tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."), $g['product_name']);?>
+ </p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_qinq_edit.php b/src/usr/local/www/interfaces_qinq_edit.php
new file mode 100644
index 0000000..93048a9
--- /dev/null
+++ b/src/usr/local/www/interfaces_qinq_edit.php
@@ -0,0 +1,444 @@
+<?php
+/*
+ interfaces_qinq_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/ngctl
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-qinq-edit
+##|*NAME=Interfaces: QinQ: Edit page
+##|*DESCR=Allow access to 'Interfaces: QinQ: Edit' page
+##|*MATCH=interfaces_qinq_edit.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Interfaces"), gettext("QinQ"), gettext("Edit"));
+$shortcut_section = "interfaces";
+
+require("guiconfig.inc");
+
+if (!is_array($config['qinqs']['qinqentry'])) {
+ $config['qinqs']['qinqentry'] = array();
+}
+
+$a_qinqs = &$config['qinqs']['qinqentry'];
+
+$portlist = get_interface_list();
+
+/* add LAGG interfaces */
+if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
+ foreach ($config['laggs']['lagg'] as $lagg) {
+ $portlist[$lagg['laggif']] = $lagg;
+ }
+}
+
+if (count($portlist) < 1) {
+ header("Location: interfaces_qinq.php");
+ exit;
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_qinqs[$id]) {
+ $pconfig['if'] = $a_qinqs[$id]['if'];
+ $pconfig['tag'] = $a_qinqs[$id]['tag'];
+ $pconfig['members'] = $a_qinqs[$id]['members'];
+ $pconfig['descr'] = html_entity_decode($a_qinqs[$id]['descr']);
+/*
+ $pconfig['autoassign'] = isset($a_qinqs[$id]['autoassign']);
+ $pconfig['autoenable'] = isset($a_qinqs[$id]['autoenable']);
+*/
+ $pconfig['autogroup'] = isset($a_qinqs[$id]['autogroup']);
+ $pconfig['autoadjustmtu'] = isset($a_qinqs[$id]['autoadjustmtu']);
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (empty($_POST['tag'])) {
+ $input_errors[] = gettext("First level tag cannot be empty.");
+ }
+ if (isset($id) && $a_qinqs[$id]['tag'] != $_POST['tag']) {
+ $input_errors[] = gettext("You are editing an existing entry and modifying the first level tag is not allowed.");
+ }
+ if (isset($id) && $a_qinqs[$id]['if'] != $_POST['if']) {
+ $input_errors[] = gettext("You are editing an existing entry and modifying the interface is not allowed.");
+ }
+ if (!isset($id)) {
+ foreach ($a_qinqs as $qinqentry) {
+ if ($qinqentry['tag'] == $_POST['tag'] && $qinqentry['if'] == $_POST['if']) {
+ $input_errors[] = gettext("QinQ level already exists for this interface, edit it!");
+ }
+ }
+ if (is_array($config['vlans']['vlan'])) {
+ foreach ($config['vlans']['vlan'] as $vlan) {
+ if ($vlan['tag'] == $_POST['tag'] && $vlan['if'] == $_POST['if']) {
+ $input_errors[] = gettext("A normal VLAN exists with this tag please remove it to use this tag for QinQ first level.");
+ }
+ }
+ }
+ }
+
+ $qinqentry = array();
+ $qinqentry['if'] = $_POST['if'];
+ $qinqentry['tag'] = $_POST['tag'];
+/*
+ if ($_POST['autoassign'] == "yes") { {
+ $qinqentry['autoassign'] = true;
+ }
+ if ($_POST['autoenable'] == "yes") {
+ $qinqentry['autoenable'] = true;
+ }
+ if ($_POST['autoadjust'] == "yes") {
+ $qinqentry['autoadjustmtu'] = true;
+ }
+*/
+ if ($_POST['autogroup'] == "yes") {
+ $qinqentry['autogroup'] = true;
+ }
+
+ $members = "";
+ $isfirst = 0;
+ /* item is a normal qinqentry type */
+ for ($x = 0; $x < 9999; $x++) {
+ if ($_POST["members{$x}"] <> "") {
+ $member = explode("-", $_POST["members{$x}"]);
+ if (count($member) > 1) {
+ if (preg_match("/([^0-9])+/", $member[0], $match) ||
+ preg_match("/([^0-9])+/", $member[1], $match)) {
+ $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
+ }
+
+ for ($i = $member[0]; $i <= $member[1]; $i++) {
+ if ($isfirst > 0) {
+ $members .= " ";
+ }
+ $members .= $i;
+ $isfirst++;
+ }
+ } else {
+ if (preg_match("/([^0-9])+/", $_POST["members{$x}"], $match)) {
+ $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
+ }
+
+ if ($isfirst > 0) {
+ $members .= " ";
+ }
+ $members .= $_POST["members{$x}"];
+ $isfirst++;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $qinqentry['members'] = $members;
+ $qinqentry['descr'] = $_POST['descr'];
+ $qinqentry['vlanif'] = "{$_POST['if']}_{$_POST['tag']}";
+ $nmembers = explode(" ", $members);
+
+ if (isset($id) && $a_qinqs[$id]) {
+ $omembers = explode(" ", $a_qinqs[$id]['members']);
+ $delmembers = array_diff($omembers, $nmembers);
+ $addmembers = array_diff($nmembers, $omembers);
+
+ if ((count($delmembers) > 0) || (count($addmembers) > 0)) {
+ $fd = fopen("{$g['tmp_path']}/netgraphcmd", "w");
+ foreach ($delmembers as $tag) {
+ fwrite($fd, "shutdown {$qinqentry['vlanif']}h{$tag}:\n");
+ fwrite($fd, "msg {$qinqentry['vlanif']}qinq: delfilter \\\"{$qinqentry['vlanif']}{$tag}\\\"\n");
+ }
+
+ foreach ($addmembers as $member) {
+ $qinq = array();
+ $qinq['if'] = $qinqentry['vlanif'];
+ $qinq['tag'] = $member;
+ $macaddr = get_interface_mac($qinqentry['vlanif']);
+ interface_qinq2_configure($qinq, $fd, $macaddr);
+ }
+
+ fclose($fd);
+ mwexec("/usr/sbin/ngctl -f {$g['tmp_path']}/netgraphcmd");
+ }
+ $a_qinqs[$id] = $qinqentry;
+ } else {
+ interface_qinq_configure($qinqentry);
+ $a_qinqs[] = $qinqentry;
+ }
+ if ($_POST['autogroup'] == "yes") {
+ if (!is_array($config['ifgroups']['ifgroupentry'])) {
+ $config['ifgroups']['ifgroupentry'] = array();
+ }
+ foreach ($config['ifgroups']['ifgroupentry'] as $gid => $group) {
+ if ($group['ifname'] == "QinQ") {
+ $found = true;
+ break;
+ }
+ }
+ $additions = "";
+ foreach ($nmembers as $qtag) {
+ $additions .= "{$qinqentry['vlanif']}_{$qtag} ";
+ }
+ $additions .= "{$qinqentry['vlanif']}";
+ if ($found == true) {
+ $config['ifgroups']['ifgroupentry'][$gid]['members'] .= " {$additions}";
+ } else {
+ $gentry = array();
+ $gentry['ifname'] = "QinQ";
+ $gentry['members'] = "{$additions}";
+ $gentry['descr'] = gettext("QinQ VLANs group");
+ $config['ifgroups']['ifgroupentry'][] = $gentry;
+ }
+ }
+
+ write_config();
+
+ header("Location: interfaces_qinq.php");
+ exit;
+ } else {
+ $pconfig['descr'] = $_POST['descr'];
+ $pconfig['tag'] = $_POST['tag'];
+ $pconfig['members'] = $members;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+// Global Variables
+var rowname = new Array(9999);
+var rowtype = new Array(9999);
+var newrow = new Array(9999);
+var rowsize = new Array(9999);
+
+for (i = 0; i < 9999; i++) {
+ rowname[i] = 'members';
+ rowtype[i] = 'select';
+ newrow[i] = '';
+ rowsize[i] = '30';
+}
+
+var field_counter_js = 0;
+var loaded = 0;
+var is_streaming_progress_bar = 0;
+var temp_streaming_text = "";
+
+var addRowTo = (function() {
+ return (function (tableId) {
+ var d, tbody, tr, td, bgc, i, ii, j;
+ d = document;
+ tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ for (i = 0; i < field_counter_js; i++) {
+ td = d.createElement("td");
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown' name='" + rowname[i] + totalrows + "' /> ";
+ tr.appendChild(td);
+ }
+ td = d.createElement("td");
+ td.rowSpan = "1";
+
+ td.innerHTML = '<a onclick="removeRow(this);return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" alt="remove" /><\/a>';
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+ totalrows++;
+ });
+})();
+
+function removeRow(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr") {
+ el = el.parentNode;
+ }
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+}
+
+ rowname[0] = <?=gettext("members");?>;
+ rowtype[0] = "textbox";
+ rowsize[0] = "30";
+
+ rowname[2] = <?=gettext("detail");?>;
+ rowtype[2] = "textbox";
+ rowsize[2] = "50";
+//]]>
+</script>
+<input type='hidden' name='members_type' value='textbox' class="formfld unknown" />
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+
+<form action="interfaces_qinq_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces qinq edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Interface QinQ Edit");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="if" id="if" class="formselect">
+ <?php
+ foreach ($portlist as $ifn => $ifinfo) {
+ if (is_jumbo_capable($ifn)) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['if']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">";
+ echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
+ echo "</option>";
+ }
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Only QinQ capable interfaces will be shown.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("First level tag");?></td>
+ <td width="78%" class="vtable">
+ <input name="tag" type="text" class="formfld unknown" id="tag" size="10" value="<?=htmlspecialchars($pconfig['tag']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("This is the first level VLAN tag. On top of this are stacked the member VLANs defined below.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Options");?></td>
+ <td width="78%" class="vtable">
+<?php /* ?>
+ <br />
+ <input type="checkbox" value="yes" name="autoassign" id="autoassign" <?php if ($pconfig['autoassign']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl"> Auto assign interface so it can be configured with ip etc...</span>
+ <br />
+ <input type="checkbox" value="yes" name="autoenable" id="autoenable" <?php if ($pconfig['autoenable']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl"> Auto enable interface so it can be used on filter rules.</span>
+ <br />
+ <input type="checkbox" value="yes" name="autoadjustmtu" id="autoadjustmtu" <?php if ($pconfig['autoadjustmtu']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl"> Allows to keep clients mtu unchanged(1500). <br />NOTE: if you are using jumbo frames this option is not needed and may produce incorrect results!</span>
+<?php */ ?>
+ <br />
+ <input name="autogroup" type="checkbox" value="yes" id="autogroup" <?php if ($pconfig['autogroup']) echo "checked=\"checked\""; ?> />
+ <span class="vexpl"><?=gettext("Adds interface to QinQ interface groups so you can write filter rules easily.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><div id="membersnetworkport"><?=gettext("Member (s)");?></div></td>
+ <td width="78%" class="vtable">
+ <span class="vexpl">
+ <?=gettext("You can specify ranges in the input below. The format is pretty simple i.e 9-100 or 10.20...");?>
+ </span>
+ <br />
+ <table id="maintable" summary="main table">
+ <tbody>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Tag");?></div></td>
+ </tr>
+
+<?php
+ $counter = 0;
+ $members = $pconfig['members'];
+ if ($members <> "") {
+ $item = explode(" ", $members);
+ foreach ($item as $ww) {
+ $member = $item[$counter];
+?>
+ <tr>
+ <td class="vtable">
+ <input name="members<?php echo $counter; ?>" class="formselect" id="members<?php echo $counter; ?>" value="<?php echo htmlspecialchars($member);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="remove" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+
+ } // end foreach
+ } // end if
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <a href="interfaces_qinq.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
+ <?php if (isset($id) && $a_qinqs[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ field_counter_js = 1;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_vlan.php b/src/usr/local/www/interfaces_vlan.php
new file mode 100644
index 0000000..20453b4
--- /dev/null
+++ b/src/usr/local/www/interfaces_vlan.php
@@ -0,0 +1,165 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_vlan.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-vlan
+##|*NAME=Interfaces: VLAN page
+##|*DESCR=Allow access to the 'Interfaces: VLAN' page.
+##|*MATCH=interfaces_vlan.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['vlans']['vlan'])) {
+ $config['vlans']['vlan'] = array();
+}
+
+$a_vlans = &$config['vlans']['vlan'] ;
+
+function vlan_inuse($num) {
+ global $config, $a_vlans;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_vlans[$num]['vlanif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ if (!isset($_GET['id'])) {
+ $input_errors[] = gettext("Wrong parameters supplied");
+ } else if (empty($a_vlans[$_GET['id']])) {
+ $input_errors[] = gettext("Wrong index supplied");
+ /* check if still in use */
+ } else if (vlan_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This VLAN cannot be deleted because it is still being used as an interface.");
+ } else {
+ if (does_interface_exist($a_vlans[$_GET['id']]['vlanif'])) {
+ pfSense_interface_destroy($a_vlans[$_GET['id']]['vlanif']);
+ }
+ unset($a_vlans[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_vlan.php");
+ exit;
+ }
+}
+
+
+$pgtitle = array(gettext("Interfaces"), gettext("VLAN"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces vlan">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), true, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("VLAN tag");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_vlans as $vlan):
+?>
+ <tr ondblclick="document.location='interfaces_vlan_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars($vlan['if']);?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($vlan['tag']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($vlan['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_vlan_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="interfaces_vlan.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this VLAN?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_vlan_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list"><p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note:");?><br />
+ </strong></span>
+ <?php printf(gettext("Not all drivers/NICs support 802.1Q VLAN tagging properly. On cards that do not explicitly support it, VLAN tagging will still work, but the reduced MTU may cause problems. See the %s handbook for information on supported cards."), $g['product_name']);?> </p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_vlan_edit.php b/src/usr/local/www/interfaces_vlan_edit.php
new file mode 100644
index 0000000..dd9f1a7
--- /dev/null
+++ b/src/usr/local/www/interfaces_vlan_edit.php
@@ -0,0 +1,236 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_vlan_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-vlan-edit
+##|*NAME=Interfaces: VLAN: Edit page
+##|*DESCR=Allow access to the 'Interfaces: VLAN: Edit' page.
+##|*MATCH=interfaces_vlan_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_vlan.php');
+}
+
+if (!is_array($config['vlans']['vlan'])) {
+ $config['vlans']['vlan'] = array();
+}
+
+$a_vlans = &$config['vlans']['vlan'];
+
+$portlist = get_interface_list();
+
+/* add LAGG interfaces */
+if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
+ foreach ($config['laggs']['lagg'] as $lagg) {
+ $portlist[$lagg['laggif']] = $lagg;
+ }
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_vlans[$id]) {
+ $pconfig['if'] = $a_vlans[$id]['if'];
+ $pconfig['vlanif'] = $a_vlans[$id]['vlanif'];
+ $pconfig['tag'] = $a_vlans[$id]['tag'];
+ $pconfig['descr'] = $a_vlans[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "if tag");
+ $reqdfieldsn = array(gettext("Parent interface"), gettext("VLAN tag"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (isset($_POST['tag']) && (!is_numericint($_POST['tag']) || ($_POST['tag'] < '1') || ($_POST['tag'] > '4094'))) {
+ $input_errors[] = gettext("The VLAN tag must be an integer between 1 and 4094.");
+ }
+
+ if (!does_interface_exist($_POST['if'])) {
+ $input_errors[] = gettext("Interface supplied as parent is invalid");
+ }
+
+ if (isset($id)) {
+ if ($_POST['tag'] && $_POST['tag'] != $a_vlans[$id]['tag']) {
+ if (!empty($a_vlans[$id]['vlanif']) && convert_real_interface_to_friendly_interface_name($a_vlans[$id]['vlanif']) != NULL) {
+ $input_errors[] = gettext("Interface is assigned and you cannot change the VLAN tag while assigned.");
+ }
+ }
+ }
+ foreach ($a_vlans as $vlan) {
+ if (isset($id) && ($a_vlans[$id]) && ($a_vlans[$id] === $vlan)) {
+ continue;
+ }
+
+ if (($vlan['if'] == $_POST['if']) && ($vlan['tag'] == $_POST['tag'])) {
+ $input_errors[] = sprintf(gettext("A VLAN with the tag %s is already defined on this interface."), $vlan['tag']);
+ break;
+ }
+ }
+ if (is_array($config['qinqs']['qinqentry'])) {
+ foreach ($config['qinqs']['qinqentry'] as $qinq) {
+ if ($qinq['tag'] == $_POST['tag'] && $qinq['if'] == $_POST['if']) {
+ $input_errors[] = gettext("A QinQ VLAN exists with this tag please remove it to use this tag with.");
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ if (isset($id) && $a_vlans[$id]) {
+ if (($a_vlans[$id]['if'] != $_POST['if']) || ($a_vlans[$id]['tag'] != $_POST['tag'])) {
+ if (!empty($a_vlans[$id]['vlanif'])) {
+ $confif = convert_real_interface_to_friendly_interface_name($vlan['vlanif']);
+ // Destroy previous vlan
+ pfSense_interface_destroy($a_vlans[$id]['vlanif']);
+ } else {
+ pfSense_interface_destroy("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}");
+ $confif = convert_real_interface_to_friendly_interface_name("{$a_vlans[$id]['if']}_vlan{$a_vlans[$id]['tag']}");
+ }
+ if ($confif <> "") {
+ $config['interfaces'][$confif]['if'] = "{$_POST['if']}_vlan{$_POST['tag']}";
+ }
+ }
+ }
+ $vlan = array();
+ $vlan['if'] = $_POST['if'];
+ $vlan['tag'] = $_POST['tag'];
+ $vlan['descr'] = $_POST['descr'];
+ $vlan['vlanif'] = "{$_POST['if']}_vlan{$_POST['tag']}";
+
+ $vlan['vlanif'] = interface_vlan_configure($vlan);
+ if ($vlan['vlanif'] == "" || !stristr($vlan['vlanif'], "vlan")) {
+ $input_errors[] = gettext("Error occurred creating interface, please retry.");
+ } else {
+ if (isset($id) && $a_vlans[$id]) {
+ $a_vlans[$id] = $vlan;
+ } else {
+ $a_vlans[] = $vlan;
+ }
+
+ write_config();
+
+ if ($confif <> "") {
+ interface_configure($confif);
+ }
+
+ header("Location: interfaces_vlan.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("VLAN"), gettext("Edit"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_vlan_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces vlan edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("VLAN configuration");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="if" class="formselect">
+ <?php
+ foreach ($portlist as $ifn => $ifinfo) {
+ if (is_jumbo_capable($ifn)) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['if']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">";
+ echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
+ echo "</option>";
+ }
+ }
+ ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Only VLAN capable interfaces will be shown.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("VLAN tag ");?></td>
+ <td class="vtable">
+ <input name="tag" type="text" class="formfld unknown" id="tag" size="6" value="<?=htmlspecialchars($pconfig['tag']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("802.1Q VLAN tag (between 1 and 4094) ");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="vlanif" value="<?=htmlspecialchars($pconfig['vlanif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_vlans[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_wireless.php b/src/usr/local/www/interfaces_wireless.php
new file mode 100644
index 0000000..86fc077
--- /dev/null
+++ b/src/usr/local/www/interfaces_wireless.php
@@ -0,0 +1,160 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_wireless.php
+
+ Copyright (C) 2010 Erik Fonnesbeck
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces_assign
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-wireless
+##|*NAME=Interfaces: Wireless page
+##|*DESCR=Allow access to the 'Interfaces: Wireless' page.
+##|*MATCH=interfaces_wireless.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['wireless'])) {
+ $config['wireless'] = array();
+}
+if (!is_array($config['wireless']['clone'])) {
+ $config['wireless']['clone'] = array();
+}
+
+$a_clones = &$config['wireless']['clone'];
+
+function clone_inuse($num) {
+ global $config, $a_clones;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_clones[$num]['cloneif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+if ($_GET['act'] == "del") {
+ /* check if still in use */
+ if (clone_inuse($_GET['id'])) {
+ $input_errors[] = gettext("This wireless clone cannot be deleted because it is assigned as an interface.");
+ } else {
+ mwexec("/sbin/ifconfig " . $a_clones[$_GET['id']]['cloneif'] . " destroy");
+ unset($a_clones[$_GET['id']]);
+
+ write_config();
+
+ header("Location: interfaces_wireless.php");
+ exit;
+ }
+}
+
+
+$pgtitle = array(gettext("Interfaces"), gettext("Wireless"));
+$shortcut_section = "wireless";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="interfaces wireless">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+ $tab_array[1] = array(gettext("Interface Groups"), false, "interfaces_groups.php");
+ $tab_array[2] = array(gettext("Wireless"), true, "interfaces_wireless.php");
+ $tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+ $tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+ $tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+ $tab_array[6] = array(gettext("GRE"), false, "interfaces_gre.php");
+ $tab_array[7] = array(gettext("GIF"), false, "interfaces_gif.php");
+ $tab_array[8] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+ $tab_array[9] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main table">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Mode");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_clones as $clone):
+?>
+ <tr ondblclick="document.location='interfaces_wireless_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars($clone['cloneif']);?>
+ </td>
+ <td class="listr">
+ <?= $wlan_modes[$clone['mode']]; ?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($clone['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap"> <a href="interfaces_wireless_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" ></a>
+ &nbsp;<a href="interfaces_wireless.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this wireless clone?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list"> <a href="interfaces_wireless_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list"><p class="vexpl">
+ <span class="red"><strong>
+ <?=gettext("Note");?>:<br />
+ </strong></span>
+ <?=gettext("Here you can configure clones of wireless interfaces, which can be assigned as separate independent interfaces. Only available on wireless chipsets that support this, with limitations on the number that can be created in each mode.");?></p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/interfaces_wireless_edit.php b/src/usr/local/www/interfaces_wireless_edit.php
new file mode 100644
index 0000000..6ccce5c
--- /dev/null
+++ b/src/usr/local/www/interfaces_wireless_edit.php
@@ -0,0 +1,230 @@
+<?php
+/* $Id$ */
+/*
+ interfaces_wireless_edit.php
+
+ Copyright (C) 2010 Erik Fonnesbeck
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-wireless-edit
+##|*NAME=Interfaces: Wireless edit page
+##|*DESCR=Allow access to the 'Interfaces: Wireless : Edit' page.
+##|*MATCH=interfaces_wireless_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/interfaces_wireless.php');
+}
+
+if (!is_array($config['wireless'])) {
+ $config['wireless'] = array();
+}
+if (!is_array($config['wireless']['clone'])) {
+ $config['wireless']['clone'] = array();
+}
+
+$a_clones = &$config['wireless']['clone'];
+
+function clone_inuse($num) {
+ global $config, $a_clones;
+
+ $iflist = get_configured_interface_list(false, true);
+ foreach ($iflist as $if) {
+ if ($config['interfaces'][$if]['if'] == $a_clones[$num]['cloneif']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function clone_compare($a, $b) {
+ return strnatcmp($a['cloneif'], $b['cloneif']);
+}
+
+$portlist = get_interface_list();
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_clones[$id]) {
+ $pconfig['if'] = $a_clones[$id]['if'];
+ $pconfig['cloneif'] = $a_clones[$id]['cloneif'];
+ $pconfig['mode'] = $a_clones[$id]['mode'];
+ $pconfig['descr'] = $a_clones[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "if mode");
+ $reqdfieldsn = array(gettext("Parent interface"), gettext("Mode"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$input_errors) {
+ $clone = array();
+ $clone['if'] = $_POST['if'];
+ $clone['mode'] = $_POST['mode'];
+ $clone['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_clones[$id]) {
+ if ($clone['if'] == $a_clones[$id]['if']) {
+ $clone['cloneif'] = $a_clones[$id]['cloneif'];
+ }
+ }
+ if (!$clone['cloneif']) {
+ $clone_id = 1;
+ do {
+ $clone_exists = false;
+ $clone['cloneif'] = "{$_POST['if']}_wlan{$clone_id}";
+ foreach ($a_clones as $existing) {
+ if ($clone['cloneif'] == $existing['cloneif']) {
+ $clone_exists = true;
+ $clone_id++;
+ break;
+ }
+ }
+ } while ($clone_exists);
+ }
+
+ if (isset($id) && $a_clones[$id]) {
+ if (clone_inuse($id)) {
+ if ($clone['if'] != $a_clones[$id]['if']) {
+ $input_errors[] = gettext("This wireless clone cannot be modified because it is still assigned as an interface.");
+ } else if ($clone['mode'] != $a_clones[$id]['mode']) {
+ $input_errors[] = gettext("Use the configuration page for the assigned interface to change the mode.");
+ }
+ }
+ }
+ if (!$input_errors) {
+ if (!interface_wireless_clone($clone['cloneif'], $clone)) {
+ $input_errors[] = sprintf(gettext('Error creating interface with mode %1$s. The %2$s interface may not support creating more clones with the selected mode.'), $wlan_modes[$clone['mode']], $clone['if']);
+ } else {
+ if (isset($id) && $a_clones[$id]) {
+ if ($clone['if'] != $a_clones[$id]['if']) {
+ mwexec("/sbin/ifconfig " . $a_clones[$id]['cloneif'] . " destroy");
+ }
+ $input_errors[] = sprintf(gettext("Created with id %s"), $id);
+ $a_clones[$id] = $clone;
+ } else {
+ $input_errors[] = gettext("Created without id");
+ $a_clones[] = $clone;
+ }
+
+ usort($a_clones, "clone_compare");
+ write_config();
+
+ header("Location: interfaces_wireless.php");
+ exit;
+ }
+ }
+ }
+}
+
+$pgtitle = array(gettext("Interfaces"), gettext("Wireless"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="interfaces_wireless_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="interfaces wireless edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Wireless clone configuration");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Parent interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="if" class="formselect">
+ <?php
+ foreach ($portlist as $ifn => $ifinfo) {
+ if (preg_match($g['wireless_regex'], $ifn)) {
+ echo "<option value=\"{$ifn}\"";
+ if ($ifn == $pconfig['if']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">";
+ echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")");
+ echo "</option>";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Mode");?></td>
+ <td class="vtable">
+ <select name="mode" class="formselect">
+ <option <?php if ($pconfig['mode'] == 'bss') echo "selected=\"selected\"";?> value="bss"><?=gettext("Infrastructure (BSS)");?></option>
+ <option <?php if ($pconfig['mode'] == 'adhoc') echo "selected=\"selected\"";?> value="adhoc"><?=gettext("Ad-hoc (IBSS)");?></option>
+ <option <?php if ($pconfig['mode'] == 'hostap') echo "selected=\"selected\"";?> value="hostap"><?=gettext("Access Point");?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="cloneif" value="<?=htmlspecialchars($pconfig['cloneif']); ?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_clones[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/javascript/autosuggest.js b/src/usr/local/www/javascript/autosuggest.js
new file mode 100644
index 0000000..d9b5ac0
--- /dev/null
+++ b/src/usr/local/www/javascript/autosuggest.js
@@ -0,0 +1,337 @@
+
+/**
+ * An autosuggest textbox control.
+ * @class
+ * @scope public
+ */
+function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
+ oProvider /*:SuggestionProvider*/) {
+
+ /**
+ * The currently selected suggestions.
+ * @scope private
+ */
+ this.cur /*:int*/ = -1;
+
+ /**
+ * The dropdown list layer.
+ * @scope private
+ */
+ this.layer = null;
+
+ /**
+ * Suggestion provider for the autosuggest feature.
+ * @scope private.
+ */
+ this.provider /*:SuggestionProvider*/ = oProvider;
+
+ /**
+ * The textbox to capture.
+ * @scope private
+ */
+ this.textbox /*:HTMLInputElement*/ = oTextbox;
+
+ //initialize the control
+ this.init();
+
+}
+
+/**
+ * Autosuggests one or more suggestions for what the user has typed.
+ * If no suggestions are passed in, then no autosuggest occurs.
+ * @scope private
+ * @param aSuggestions An array of suggestion strings.
+ * @param bTypeAhead If the control should provide a type ahead suggestion.
+ */
+AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
+ bTypeAhead /*:boolean*/) {
+
+ //make sure there's at least one suggestion
+ if (aSuggestions.length > 0) {
+ if (bTypeAhead) {
+ this.typeAhead(aSuggestions[0]);
+ }
+
+ this.showSuggestions(aSuggestions);
+ } else {
+ this.hideSuggestions();
+ }
+};
+
+/**
+ * Creates the dropdown layer to display multiple suggestions.
+ * @scope private
+ */
+AutoSuggestControl.prototype.createDropDown = function () {
+
+ var oThis = this;
+
+ //create the layer and assign styles
+ this.layer = document.createElement("div");
+ this.layer.className = "suggestions";
+ this.layer.style.visibility = "hidden";
+ this.layer.style.width = this.textbox.offsetWidth;
+
+ //when the user clicks on the a suggestion, get the text (innerHTML)
+ //and place it into a textbox
+ this.layer.onmousedown =
+ this.layer.onmouseup =
+ this.layer.onmouseover = function (oEvent) {
+ oEvent = oEvent || window.event;
+ oTarget = oEvent.target || oEvent.srcElement;
+
+ if (oEvent.type == "mousedown") {
+ oThis.textbox.value = oTarget.firstChild.nodeValue;
+ oThis.hideSuggestions();
+ } else if (oEvent.type == "mouseover") {
+ oThis.highlightSuggestion(oTarget);
+ } else {
+ oThis.textbox.focus();
+ }
+ };
+
+
+ document.body.appendChild(this.layer);
+};
+
+/**
+ * Gets the left coordinate of the textbox.
+ * @scope private
+ * @return The left coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iLeft = 0;
+
+ while(oNode.tagName != "BODY") {
+ iLeft += oNode.offsetLeft;
+ oNode = oNode.offsetParent;
+ }
+
+ return iLeft;
+};
+
+/**
+ * Gets the top coordinate of the textbox.
+ * @scope private
+ * @return The top coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getTop = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iTop = 0;
+
+ while(oNode.tagName != "BODY") {
+ iTop += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+
+ return iTop;
+};
+
+/**
+ * Handles three keydown events.
+ * @scope private
+ * @param oEvent The event object for the keydown event.
+ */
+AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
+
+ switch(oEvent.keyCode) {
+ case 38: //up arrow
+ this.previousSuggestion();
+ break;
+ case 40: //down arrow
+ this.nextSuggestion();
+ break;
+ case 13: //enter
+ this.hideSuggestions();
+ break;
+ }
+
+};
+
+/**
+ * Handles keyup events.
+ * @scope private
+ * @param oEvent The event object for the keyup event.
+ */
+AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
+
+ var iKeyCode = oEvent.keyCode;
+
+ //for backspace (8) and delete (46), shows suggestions without typeahead
+ if (iKeyCode == 8 || iKeyCode == 46) {
+ this.provider.requestSuggestions(this, false);
+
+ //make sure not to interfere with non-character keys
+ } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
+ //ignore
+ } else {
+ //request suggestions from the suggestion provider with typeahead
+ this.provider.requestSuggestions(this, true);
+ }
+};
+
+/**
+ * Hides the suggestion dropdown.
+ * @scope private
+ */
+AutoSuggestControl.prototype.hideSuggestions = function () {
+ this.layer.style.visibility = "hidden";
+};
+
+/**
+ * Highlights the given node in the suggestions dropdown.
+ * @scope private
+ * @param oSuggestionNode The node representing a suggestion in the dropdown.
+ */
+AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
+
+ for (var i=0; i < this.layer.childNodes.length; i++) {
+ var oNode = this.layer.childNodes[i];
+ if (oNode == oSuggestionNode) {
+ oNode.className = "current";
+ } else if (oNode.className == "current") {
+ oNode.className = "";
+ }
+ }
+};
+
+/**
+ * Initializes the textbox with event handlers for
+ * auto suggest functionality.
+ * @scope private
+ */
+AutoSuggestControl.prototype.init = function () {
+
+ //save a reference to this object
+ var oThis = this;
+
+ //assign the onkeyup event handler
+ this.textbox.onkeyup = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyUp() method with the event object
+ oThis.handleKeyUp(oEvent);
+ };
+
+ //assign onkeydown event handler
+ this.textbox.onkeydown = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyDown() method with the event object
+ oThis.handleKeyDown(oEvent);
+ };
+
+ //assign onblur event handler (hides suggestions)
+ this.textbox.onblur = function () {
+ oThis.hideSuggestions();
+ };
+
+ //create the suggestions dropdown
+ this.createDropDown();
+};
+
+/**
+ * Highlights the next suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.nextSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
+ var oNode = cSuggestionNodes[++this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Highlights the previous suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.previousSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur > 0) {
+ var oNode = cSuggestionNodes[--this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Selects a range of text in the textbox.
+ * @scope public
+ * @param iStart The start index (base 0) of the selection.
+ * @param iLength The number of characters to select.
+ */
+AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
+
+ //use text ranges for Internet Explorer
+ if (this.textbox.createTextRange) {
+ var oRange = this.textbox.createTextRange();
+ oRange.moveStart("character", iStart);
+ oRange.moveEnd("character", iLength - this.textbox.value.length);
+ oRange.select();
+
+ //use setSelectionRange() for Mozilla
+ } else if (this.textbox.setSelectionRange) {
+ this.textbox.setSelectionRange(iStart, iLength);
+ }
+
+ //set focus back to the textbox
+ this.textbox.focus();
+};
+
+/**
+ * Builds the suggestion layer contents, moves it into position,
+ * and displays the layer.
+ * @scope private
+ * @param aSuggestions An array of suggestions for the control.
+ */
+AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
+
+ var oDiv = null;
+ this.layer.innerHTML = ""; //clear contents of the layer
+
+ for (var i=0; i < aSuggestions.length; i++) {
+ oDiv = document.createElement("div");
+ oDiv.appendChild(document.createTextNode(aSuggestions[i]));
+ this.layer.appendChild(oDiv);
+ }
+
+ this.layer.style.left = this.getLeft() + "px";
+ this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
+ this.layer.style.width = this.textbox.offsetWidth + "px";
+ this.layer.style.visibility = "visible";
+
+};
+
+/**
+ * Inserts a suggestion into the textbox, highlighting the
+ * suggested part of the text.
+ * @scope private
+ * @param sSuggestion The suggestion for the textbox.
+ */
+AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
+
+ //check for support of typeahead functionality
+ if (this.textbox.createTextRange || this.textbox.setSelectionRange){
+ var iLen = this.textbox.value.length;
+ this.textbox.value = sSuggestion;
+ this.selectRange(iLen, sSuggestion.length);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/base64.js b/src/usr/local/www/javascript/base64.js
new file mode 100644
index 0000000..48d5f33
--- /dev/null
+++ b/src/usr/local/www/javascript/base64.js
@@ -0,0 +1,142 @@
+/**
+ *
+ * Base64 encode / decode
+ * http://www.webtoolkit.info/
+ * http://www.webtoolkit.info/licence
+ **/
+
+var Base64 = {
+
+ // private property
+ _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+
+ // public method for encoding
+ encode : function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = Base64._utf8_encode(input);
+
+ while (i < input.length) {
+
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output +
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
+ this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
+
+ }
+
+ return output;
+ },
+
+ // public method for decoding
+ decode : function (input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ while (i < input.length) {
+
+ enc1 = this._keyStr.indexOf(input.charAt(i++));
+ enc2 = this._keyStr.indexOf(input.charAt(i++));
+ enc3 = this._keyStr.indexOf(input.charAt(i++));
+ enc4 = this._keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ }
+
+ output = Base64._utf8_decode(output);
+
+ return output;
+
+ },
+
+ // private method for UTF-8 encoding
+ _utf8_encode : function (string) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ },
+
+ // private method for UTF-8 decoding
+ _utf8_decode : function (utftext) {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while ( i < utftext.length ) {
+
+ c = utftext.charCodeAt(i);
+
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+
+ return string;
+ }
+
+}; \ No newline at end of file
diff --git a/src/usr/local/www/javascript/carp_status/carp_status.js b/src/usr/local/www/javascript/carp_status/carp_status.js
new file mode 100644
index 0000000..c14201d
--- /dev/null
+++ b/src/usr/local/www/javascript/carp_status/carp_status.js
@@ -0,0 +1,5 @@
+
+window.onLoad = function () {
+ NiftyCheck();
+ Rounded("div#mainlevel","all","#FFF","#eeeeee","smooth");
+};
diff --git a/src/usr/local/www/javascript/chosen/chosen-sprite.png b/src/usr/local/www/javascript/chosen/chosen-sprite.png
new file mode 100644
index 0000000..6ec9bbf
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen-sprite.png
Binary files differ
diff --git a/src/usr/local/www/javascript/chosen/chosen.css b/src/usr/local/www/javascript/chosen/chosen.css
new file mode 100644
index 0000000..d2b1eb4
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen.css
@@ -0,0 +1,317 @@
+div.chzn-container {
+ font-size: 13px;
+ position: relative;
+}
+
+div.chzn-container input {
+ background: #fff;
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
+ background: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
+ background: -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
+ border: 1px solid #aaa;
+ font-family: sans-serif;
+ font-size: 1em;
+ margin: 0px;
+ padding: 4px 5px;
+ outline: none;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -o-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -khtml-border-radius: 3px;
+ border-radius: 3px;
+}
+div.chzn-container textarea:focus {
+ border-color: #058cf5;
+ -moz-box-shadow: 0px 0px 3px #aaa;
+ -webkit-box-shadow: 0px 0px 3px #aaa;
+ box-shadow: 0px 0px 3px #aaa;
+}
+
+
+div.chzn-container div.chzn-drop {
+ background: #FFF;
+ border: 1px solid #aaa;
+ border-width: 0 1px 1px;
+ left: 0;
+ position: absolute;
+ top: 29px;
+ -webkit-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.15);
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
+ z-index: 20;
+}
+div.chzn-container-single div.chzn-drop {
+ -moz-border-radius: 0 0 4px 4px;
+ -webkit-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -khtml-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+
+/* SINGLE */
+div.chzn-container a.chzn-single {
+ background: #FFF;
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));
+ background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);
+ background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 50%);
+ border: 1px solid #aaa;
+ display: block;
+ overflow: hidden;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ border-radius: 4px;
+ height: 25px;
+ color: #444;
+ line-height: 26px;
+ padding: 0px 0px 0px 8px;
+ position: relative;
+ text-decoration: none;
+ z-index: 19;
+ white-space: nowrap;
+}
+div.chzn-container a.chzn-single span {
+ display: block;
+ margin-right: 26px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.chzn-container a.chzn-single div {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -o-border-top-right-radius: 4px;
+ -ms-border-top-right-radius: 4px;
+ -khtml-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -o-border-bottom-right-radius: 4px;
+ -ms-border-bottom-right-radius: 4px;
+ -khtml-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ background: #ccc;
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
+ background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
+ background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);
+ border-left: 1px solid #aaa;
+ display: block;
+ height: 100%;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 18px;
+}
+div.chzn-container a.chzn-single div b {
+ background: url('chosen-sprite.png') no-repeat 0 1px;
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+div.chzn-container div.chzn-search {
+ padding: 3px 4px;
+ margin: 0px;
+ white-space: nowrap;
+}
+div.chzn-container div.chzn-search input {
+ background: url('chosen-sprite.png') no-repeat 97% -35px, #ffffff;
+ background: url('chosen-sprite.png') no-repeat 97% -35px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
+ background: url('chosen-sprite.png') no-repeat 97% -35px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
+ background: url('chosen-sprite.png') no-repeat 97% -35px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
+ -moz-border-radius: 0px;
+ -webkit-border-radius: 0px;
+ -o-border-radius: 0px;
+ -ms-border-radius: 0px;
+ -khtml-border-radius: 0px;
+ border-radius: 0px;
+ margin: 1px 0;
+ outline: 0;
+}
+
+
+/* Multi */
+div.chzn-container ul.chzn-choices {
+ background: #fff;
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
+ background-image: -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
+ background-image: -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
+ margin: 0;
+ cursor: text;
+ border: 1px solid #aaa;
+ overflow: hidden;
+ height: auto !important;
+ height: 1%;
+ padding: 0;
+ position: relative;
+}
+div.chzn-container ul.chzn-choices:focus {
+ border-color: #058cf5;
+ -moz-box-shadow: 0px 0px 5px #999;
+ -webkit-box-shadow: 0px 0px 5px #999;
+ box-shadow: 0px 0px 5px #999;
+}
+div.chzn-container ul.chzn-choices li {
+ float: left;
+ list-style-type: none;
+ margin: 0px;
+}
+div.chzn-container ul.chzn-choices li.search-field {
+ margin: 0px;
+ white-space: nowrap;
+ padding: 0px;
+}
+div.chzn-container ul.chzn-choices li.search-field input {
+ color: #666;
+ background: transparent !important;
+ border: 0px !important;
+ padding: 5px;
+ margin: 1px 0;
+ outline: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+div.chzn-container ul.chzn-choices li.search-field input.default {
+ color: #999;
+}
+div.chzn-container ul.chzn-choices li.search-choice {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ background: #e4e4e4;
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #e4e4e4), color-stop(0.7, #eeeeee));
+ background-image: -moz-linear-gradient(center bottom, #e4e4e4 0%, #eeeeee 70%);
+ background-image: -o-linear-gradient(bottom, #e4e4e4 0%, #eeeeee 70%);
+ color: #333;
+ border: 1px solid #b4b4b4;
+ line-height: 13px;
+ padding: 3px 19px 3px 6px;
+ position: relative;
+ margin: 3px 0px 3px 5px;
+}
+div.chzn-container ul.chzn-choices li.search-choice span {
+ cursor: default;
+}
+div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus {
+ background: #d4d4d4;
+}
+div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close {
+ position: absolute;
+ right: 5px;
+ top: 6px;
+ display: block;
+ width: 8px;
+ height: 9px;
+ font-size: 1px;
+ background: url(chosen-sprite.png) right top no-repeat;
+}
+div.chzn-container ul.chzn-choices li.search-choice a.search-choice-close:hover {
+ background-position: right -9px;
+}
+div.chzn-container ul.chzn-choices li.search-choice.search-choice-focus a.search-choice-close {
+ background-position: right -9px;
+}
+
+
+/* Results */
+div.chzn-container ul.chzn-results {
+ margin: 0 4px 4px 0;
+ max-height: 190px;
+ padding: 0 0 0 4px;
+ position: relative;
+ overflow-x: hidden;
+ overflow-y: auto;
+ z-index: 20;
+}
+div.chzn-container-multi ul.chzn-results {
+ margin: -1px 0 0;
+ padding: 0;
+}
+div.chzn-container-multi ul.chzn-results li {
+ border-left: 0px !important;
+ border-right: 0px !important;
+}
+div.chzn-container ul.chzn-results li {
+ line-height: 80%;
+ padding: 7px 7px 8px;
+ z-index: 22;
+ margin: 0;
+ list-style-type: none;
+}
+div.chzn-container ul.chzn-results li.active-result {
+ cursor: pointer;
+}
+div.chzn-container ul.chzn-results li em {
+ font-style: normal;
+ background: #FEFFDC;
+}
+div.chzn-container ul.chzn-results li.highlighted {
+ background: #3875d7;
+ color: #fff;
+}
+div.chzn-container ul.chzn-results li.highlighted em {
+ background: transparent;
+}
+div.chzn-container ul.chzn-results li.no-results {
+ background: #F4F4F4;
+}
+div.chzn-container ul.chzn-results li.group-result {
+ cursor: default;
+ color: #999;
+ font-weight: bold;
+}
+div.chzn-container ul.chzn-results li.group-option {
+ padding-left: 20px;
+}
+
+div.chzn-container-multi div.chzn-drop li.result-selected {
+ display: none;
+}
+
+
+
+/* Active */
+div.chzn-container-active a.chzn-single {
+ -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ border: 1px solid #5897fb;
+}
+div.chzn-container-active a.chzn-single-with-drop {
+ border: 1px solid #aaa;
+ border-width: 1px 1px 1px;
+ -moz-box-shadow: 0px 1px 0px #FFF inset;
+ -webkit-box-shadow: 0px 1px 0px #FFF inset;
+ box-shadow: 0px 1px 0px #FFF inset;
+ background: #EEE;
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));
+ background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);
+ background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);
+ -webkit-border-bottom-left-radius: 0px;
+ -webkit-border-bottom-right-radius: 0px;
+ -moz-border-radius-bottomleft: 0px;
+ -moz-border-radius-bottomright: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+div.chzn-container-active a.chzn-single-with-drop div {
+ background: transparent;
+ border-left: none;
+}
+div.chzn-container-active a.chzn-single-with-drop div b {
+ background-position: -18px 1px;
+}
+div.chzn-container-active ul.chzn-choices {
+ z-index: 21;
+ -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);
+ border: 1px solid #5897fb;
+}
+div.chzn-container-active ul.chzn-choices input {
+ color: #111 !important;
+}
diff --git a/src/usr/local/www/javascript/chosen/chosen.jquery.js b/src/usr/local/www/javascript/chosen/chosen.jquery.js
new file mode 100644
index 0000000..21e822a
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen.jquery.js
@@ -0,0 +1,755 @@
+(function() {
+ /*
+ Chosen, a Select Box Enhancer for jQuery and Protoype
+ by Patrick Filler for Harvest, http://getharvest.com
+
+ Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+ Copyright (c) 2011 by Harvest
+ */ var $, Chosen, SelectParser, get_side_border_padding, root;
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+ $ = jQuery;
+ $.fn.extend({
+ chosen: function(data, options) {
+ return $(this).each(function(input_field) {
+ if (!($(this)).hasClass("chzn-done")) {
+ return new Chosen(this, data, options);
+ }
+ });
+ }
+ });
+ Chosen = (function() {
+ function Chosen(elmn) {
+ this.set_default_values();
+ this.form_field = elmn;
+ this.form_field_jq = $(this.form_field);
+ this.is_multiple = this.form_field.multiple;
+ this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option";
+ this.set_up_html();
+ this.register_observers();
+ this.form_field_jq.addClass("chzn-done");
+ }
+ Chosen.prototype.set_default_values = function() {
+ this.click_test_action = __bind(function(evt) {
+ return this.test_active_click(evt);
+ }, this);
+ this.active_field = false;
+ this.mouse_on_container = false;
+ this.results_showing = false;
+ this.result_highlighted = null;
+ this.result_single_selected = null;
+ return this.choices = 0;
+ };
+ Chosen.prototype.set_up_html = function() {
+ var container_div, dd_top, dd_width, sf_width;
+ this.container_id = this.form_field.id + "_chzn";
+ this.f_width = this.form_field_jq.width();
+ this.default_text = this.form_field_jq.attr('title') ? this.form_field_jq.attr('title') : this.default_text_default;
+ container_div = $("<div />", {
+ id: this.container_id,
+ "class": 'chzn-container',
+ style: 'width: ' + this.f_width + 'px;'
+ });
+ if (this.is_multiple) {
+ container_div.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');
+ } else {
+ container_div.html('<a href="javascript:void(0)" class="chzn-single"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');
+ }
+ this.form_field_jq.hide().after(container_div);
+ this.container = $('#' + this.container_id);
+ this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single"));
+ this.dropdown = this.container.find('div.chzn-drop').first();
+ dd_top = this.container.height();
+ dd_width = this.f_width - get_side_border_padding(this.dropdown);
+ this.dropdown.css({
+ "width": dd_width + "px",
+ "top": dd_top + "px"
+ });
+ this.search_field = this.container.find('input').first();
+ this.search_results = this.container.find('ul.chzn-results').first();
+ this.search_field_scale();
+ this.search_no_results = this.container.find('li.no-results').first();
+ if (this.is_multiple) {
+ this.search_choices = this.container.find('ul.chzn-choices').first();
+ this.search_container = this.container.find('li.search-field').first();
+ } else {
+ this.search_container = this.container.find('div.chzn-search').first();
+ this.selected_item = this.container.find('.chzn-single').first();
+ sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field);
+ this.search_field.css({
+ "width": sf_width + "px"
+ });
+ }
+ this.results_build();
+ return this.set_tab_index();
+ };
+ Chosen.prototype.register_observers = function() {
+ this.container.click(__bind(function(evt) {
+ return this.container_click(evt);
+ }, this));
+ this.container.mouseenter(__bind(function(evt) {
+ return this.mouse_enter(evt);
+ }, this));
+ this.container.mouseleave(__bind(function(evt) {
+ return this.mouse_leave(evt);
+ }, this));
+ this.search_results.click(__bind(function(evt) {
+ return this.search_results_click(evt);
+ }, this));
+ this.search_results.mouseover(__bind(function(evt) {
+ return this.search_results_mouseover(evt);
+ }, this));
+ this.search_results.mouseout(__bind(function(evt) {
+ return this.search_results_mouseout(evt);
+ }, this));
+ this.form_field_jq.bind("liszt:updated", __bind(function(evt) {
+ return this.results_update_field(evt);
+ }, this));
+ this.search_field.blur(__bind(function(evt) {
+ return this.input_blur(evt);
+ }, this));
+ this.search_field.keyup(__bind(function(evt) {
+ return this.keyup_checker(evt);
+ }, this));
+ this.search_field.keydown(__bind(function(evt) {
+ return this.keydown_checker(evt);
+ }, this));
+ if (this.is_multiple) {
+ this.search_choices.click(__bind(function(evt) {
+ return this.choices_click(evt);
+ }, this));
+ return this.search_field.focus(__bind(function(evt) {
+ return this.input_focus(evt);
+ }, this));
+ } else {
+ return this.selected_item.focus(__bind(function(evt) {
+ return this.activate_field(evt);
+ }, this));
+ }
+ };
+ Chosen.prototype.container_click = function(evt) {
+ if (evt && evt.type === "click") {
+ evt.stopPropagation();
+ }
+ if (!this.pending_destroy_click) {
+ if (!this.active_field) {
+ if (this.is_multiple) {
+ this.search_field.val("");
+ }
+ $(document).click(this.click_test_action);
+ this.results_show();
+ } else if (!this.is_multiple && evt && ($(evt.target) === this.selected_item || $(evt.target).parents("a.chzn-single").length)) {
+ evt.preventDefault();
+ this.results_toggle();
+ }
+ return this.activate_field();
+ } else {
+ return this.pending_destroy_click = false;
+ }
+ };
+ Chosen.prototype.mouse_enter = function() {
+ return this.mouse_on_container = true;
+ };
+ Chosen.prototype.mouse_leave = function() {
+ return this.mouse_on_container = false;
+ };
+ Chosen.prototype.input_focus = function(evt) {
+ if (!this.active_field) {
+ return setTimeout((__bind(function() {
+ return this.container_click();
+ }, this)), 50);
+ }
+ };
+ Chosen.prototype.input_blur = function(evt) {
+ if (!this.mouse_on_container) {
+ this.active_field = false;
+ return setTimeout((__bind(function() {
+ return this.blur_test();
+ }, this)), 100);
+ }
+ };
+ Chosen.prototype.blur_test = function(evt) {
+ if (!this.active_field && this.container.hasClass("chzn-container-active")) {
+ return this.close_field();
+ }
+ };
+ Chosen.prototype.close_field = function() {
+ $(document).unbind("click", this.click_test_action);
+ if (!this.is_multiple) {
+ this.selected_item.attr("tabindex", this.search_field.attr("tabindex"));
+ this.search_field.attr("tabindex", -1);
+ }
+ this.active_field = false;
+ this.results_hide();
+ this.container.removeClass("chzn-container-active");
+ this.winnow_results_clear();
+ this.clear_backstroke();
+ this.show_search_field_default();
+ return this.search_field_scale();
+ };
+ Chosen.prototype.activate_field = function() {
+ if (!this.is_multiple && !this.active_field) {
+ this.search_field.attr("tabindex", this.selected_item.attr("tabindex"));
+ this.selected_item.attr("tabindex", -1);
+ }
+ this.container.addClass("chzn-container-active");
+ this.active_field = true;
+ this.search_field.val(this.search_field.val());
+ return this.search_field.focus();
+ };
+ Chosen.prototype.test_active_click = function(evt) {
+ if ($(evt.target).parents('#' + this.container.id).length) {
+ return this.active_field = true;
+ } else {
+ return this.close_field();
+ }
+ };
+ Chosen.prototype.results_build = function() {
+ var content, data, startTime, _i, _len, _ref;
+ startTime = new Date();
+ this.parsing = true;
+ this.results_data = SelectParser.select_to_array(this.form_field);
+ if (this.is_multiple && this.choices > 0) {
+ this.search_choices.find("li.search-choice").remove();
+ this.choices = 0;
+ } else if (!this.is_multiple) {
+ this.selected_item.find("span").text(this.default_text);
+ }
+ content = '';
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ data = _ref[_i];
+ if (data.group) {
+ content += this.result_add_group(data);
+ } else if (!data.empty) {
+ content += this.result_add_option(data);
+ if (data.selected && this.is_multiple) {
+ this.choice_build(data);
+ } else if (data.selected && !this.is_multiple) {
+ this.selected_item.find("span").text(data.text);
+ }
+ }
+ }
+ this.show_search_field_default();
+ this.search_field_scale();
+ this.search_results.html(content);
+ return this.parsing = false;
+ };
+ Chosen.prototype.result_add_group = function(group) {
+ if (!group.disabled) {
+ group.dom_id = this.form_field.id + "chzn_g_" + group.array_index;
+ return '<li id="' + group.dom_id + '" class="group-result">' + $("<div />").text(group.label).html() + '</li>';
+ } else {
+ return "";
+ }
+ };
+ Chosen.prototype.result_add_option = function(option) {
+ var classes;
+ if (!option.disabled) {
+ option.dom_id = this.form_field.id + "chzn_o_" + option.array_index;
+ classes = option.selected && this.is_multiple ? [] : ["active-result"];
+ if (option.selected) {
+ classes.push("result-selected");
+ }
+ if (option.group_array_index != null) {
+ classes.push("group-option");
+ }
+ return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + $("<div />").text(option.text).html() + '</li>';
+ } else {
+ return "";
+ }
+ };
+ Chosen.prototype.results_update_field = function() {
+ this.result_clear_highlight();
+ this.result_single_selected = null;
+ return this.results_build();
+ };
+ Chosen.prototype.result_do_highlight = function(el) {
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
+ if (el.length) {
+ this.result_clear_highlight();
+ this.result_highlight = el;
+ this.result_highlight.addClass("highlighted");
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
+ visible_top = this.search_results.scrollTop();
+ visible_bottom = maxHeight + visible_top;
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
+ high_bottom = high_top + this.result_highlight.outerHeight();
+ if (high_bottom >= visible_bottom) {
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
+ } else if (high_top < visible_top) {
+ return this.search_results.scrollTop(high_top);
+ }
+ }
+ };
+ Chosen.prototype.result_clear_highlight = function() {
+ if (this.result_highlight) {
+ this.result_highlight.removeClass("highlighted");
+ }
+ return this.result_highlight = null;
+ };
+ Chosen.prototype.results_toggle = function() {
+ if (this.results_showing) {
+ return this.results_hide();
+ } else {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.results_show = function() {
+ var dd_top;
+ if (!this.is_multiple) {
+ this.selected_item.addClass("chzn-single-with-drop");
+ if (this.result_single_selected) {
+ this.result_do_highlight(this.result_single_selected);
+ }
+ }
+ dd_top = this.is_multiple ? this.container.height() : this.container.height() - 1;
+ this.dropdown.css({
+ "top": dd_top + "px",
+ "left": 0
+ });
+ this.results_showing = true;
+ this.search_field.focus();
+ this.search_field.val(this.search_field.val());
+ return this.winnow_results();
+ };
+ Chosen.prototype.results_hide = function() {
+ if (!this.is_multiple) {
+ this.selected_item.removeClass("chzn-single-with-drop");
+ }
+ this.result_clear_highlight();
+ this.dropdown.css({
+ "left": "-9000px"
+ });
+ return this.results_showing = false;
+ };
+ Chosen.prototype.set_tab_index = function(el) {
+ var ti;
+ if (this.form_field_jq.attr("tabindex")) {
+ ti = this.form_field_jq.attr("tabindex");
+ this.form_field_jq.attr("tabindex", -1);
+ if (this.is_multiple) {
+ return this.search_field.attr("tabindex", ti);
+ } else {
+ this.selected_item.attr("tabindex", ti);
+ return this.search_field.attr("tabindex", -1);
+ }
+ }
+ };
+ Chosen.prototype.show_search_field_default = function() {
+ if (this.is_multiple && this.choices < 1 && !this.active_field) {
+ this.search_field.val(this.default_text);
+ return this.search_field.addClass("default");
+ } else {
+ this.search_field.val("");
+ return this.search_field.removeClass("default");
+ }
+ };
+ Chosen.prototype.search_results_click = function(evt) {
+ var target;
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+ if (target.length) {
+ this.result_highlight = target;
+ return this.result_select();
+ }
+ };
+ Chosen.prototype.search_results_mouseover = function(evt) {
+ var target;
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
+ if (target) {
+ return this.result_do_highlight(target);
+ }
+ };
+ Chosen.prototype.search_results_mouseout = function(evt) {
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
+ return this.result_clear_highlight();
+ }
+ };
+ Chosen.prototype.choices_click = function(evt) {
+ evt.preventDefault();
+ if (this.active_field && !($(evt.target).hasClass("search-choice" || $(evt.target).parents('.search-choice').first)) && !this.results_showing) {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.choice_build = function(item) {
+ var choice_id, link;
+ choice_id = this.form_field.id + "_chzn_c_" + item.array_index;
+ this.choices += 1;
+ this.search_container.before('<li class="search-choice" id="' + choice_id + '"><span>' + item.text + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>');
+ link = $('#' + choice_id).find("a").first();
+ return link.click(__bind(function(evt) {
+ return this.choice_destroy_link_click(evt);
+ }, this));
+ };
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
+ evt.preventDefault();
+ this.pending_destroy_click = true;
+ return this.choice_destroy($(evt.target));
+ };
+ Chosen.prototype.choice_destroy = function(link) {
+ this.choices -= 1;
+ this.show_search_field_default();
+ if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) {
+ this.results_hide();
+ }
+ this.result_deselect(link.attr("rel"));
+ return link.parents('li').first().remove();
+ };
+ Chosen.prototype.result_select = function() {
+ var high, high_id, item, position;
+ if (this.result_highlight) {
+ high = this.result_highlight;
+ high_id = high.attr("id");
+ this.result_clear_highlight();
+ high.addClass("result-selected");
+ if (this.is_multiple) {
+ this.result_deactivate(high);
+ } else {
+ this.result_single_selected = high;
+ }
+ position = high_id.substr(high_id.lastIndexOf("_") + 1);
+ item = this.results_data[position];
+ item.selected = true;
+ this.form_field.options[item.options_index].selected = true;
+ if (this.is_multiple) {
+ this.choice_build(item);
+ } else {
+ this.selected_item.find("span").first().text(item.text);
+ }
+ this.results_hide();
+ this.search_field.val("");
+ this.form_field_jq.trigger("change");
+ return this.search_field_scale();
+ }
+ };
+ Chosen.prototype.result_activate = function(el) {
+ return el.addClass("active-result").show();
+ };
+ Chosen.prototype.result_deactivate = function(el) {
+ return el.removeClass("active-result").hide();
+ };
+ Chosen.prototype.result_deselect = function(pos) {
+ var result, result_data;
+ result_data = this.results_data[pos];
+ result_data.selected = false;
+ this.form_field.options[result_data.options_index].selected = false;
+ result = $("#" + this.form_field.id + "chzn_o_" + pos);
+ result.removeClass("result-selected").addClass("active-result").show();
+ this.result_clear_highlight();
+ this.winnow_results();
+ this.form_field_jq.trigger("change");
+ return this.search_field_scale();
+ };
+ Chosen.prototype.results_search = function(evt) {
+ if (this.results_showing) {
+ return this.winnow_results();
+ } else {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.winnow_results = function() {
+ var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
+ startTime = new Date();
+ this.no_results_clear();
+ results = 0;
+ searchText = this.search_field.val() === this.default_text ? "" : $.trim(this.search_field.val());
+ regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
+ zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ if (!option.disabled && !option.empty) {
+ if (option.group) {
+ $('#' + option.dom_id).hide();
+ } else if (!(this.is_multiple && option.selected)) {
+ found = false;
+ result_id = option.dom_id;
+ if (regex.test(option.text)) {
+ found = true;
+ results += 1;
+ } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) {
+ parts = option.text.replace(/\[|\]/g, "").split(" ");
+ if (parts.length) {
+ for (_j = 0, _len2 = parts.length; _j < _len2; _j++) {
+ part = parts[_j];
+ if (regex.test(part)) {
+ found = true;
+ results += 1;
+ }
+ }
+ }
+ }
+ if (found) {
+ if (searchText.length) {
+ startpos = option.text.search(zregex);
+ text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length);
+ text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
+ } else {
+ text = option.text;
+ }
+ if ($("#" + result_id).html !== text) {
+ $("#" + result_id).html(text);
+ }
+ this.result_activate($("#" + result_id));
+ if (option.group_array_index != null) {
+ $("#" + this.results_data[option.group_array_index].dom_id).show();
+ }
+ } else {
+ if (this.result_highlight && result_id === this.result_highlight.attr('id')) {
+ this.result_clear_highlight();
+ }
+ this.result_deactivate($("#" + result_id));
+ }
+ }
+ }
+ }
+ if (results < 1 && searchText.length) {
+ return this.no_results(searchText);
+ } else {
+ return this.winnow_results_set_highlight();
+ }
+ };
+ Chosen.prototype.winnow_results_clear = function() {
+ var li, lis, _i, _len, _results;
+ this.search_field.val("");
+ lis = this.search_results.find("li");
+ _results = [];
+ for (_i = 0, _len = lis.length; _i < _len; _i++) {
+ li = lis[_i];
+ li = $(li);
+ _results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0);
+ }
+ return _results;
+ };
+ Chosen.prototype.winnow_results_set_highlight = function() {
+ var do_high;
+ if (!this.result_highlight) {
+ do_high = this.search_results.find(".active-result").first();
+ if (do_high) {
+ return this.result_do_highlight(do_high);
+ }
+ }
+ };
+ Chosen.prototype.no_results = function(terms) {
+ var no_results_html;
+ no_results_html = $('<li class="no-results">No results match "<span></span>"</li>');
+ no_results_html.find("span").first().text(terms);
+ return this.search_results.append(no_results_html);
+ };
+ Chosen.prototype.no_results_clear = function() {
+ return this.search_results.find(".no-results").remove();
+ };
+ Chosen.prototype.keydown_arrow = function() {
+ var first_active, next_sib;
+ if (!this.result_highlight) {
+ first_active = this.search_results.find("li.active-result").first();
+ if (first_active) {
+ this.result_do_highlight($(first_active));
+ }
+ } else if (this.results_showing) {
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
+ if (next_sib) {
+ this.result_do_highlight(next_sib);
+ }
+ }
+ if (!this.results_showing) {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.keyup_arrow = function() {
+ var prev_sibs;
+ if (!this.results_showing && !this.is_multiple) {
+ return this.results_show();
+ } else if (this.result_highlight) {
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
+ if (prev_sibs.length) {
+ return this.result_do_highlight(prev_sibs.first());
+ } else {
+ if (this.choices > 0) {
+ this.results_hide();
+ }
+ return this.result_clear_highlight();
+ }
+ }
+ };
+ Chosen.prototype.keydown_backstroke = function() {
+ if (this.pending_backstroke) {
+ this.choice_destroy(this.pending_backstroke.find("a").first());
+ return this.clear_backstroke();
+ } else {
+ this.pending_backstroke = this.search_container.siblings("li.search-choice").last();
+ return this.pending_backstroke.addClass("search-choice-focus");
+ }
+ };
+ Chosen.prototype.clear_backstroke = function() {
+ if (this.pending_backstroke) {
+ this.pending_backstroke.removeClass("search-choice-focus");
+ }
+ return this.pending_backstroke = null;
+ };
+ Chosen.prototype.keyup_checker = function(evt) {
+ var stroke, _ref;
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
+ this.search_field_scale();
+ switch (stroke) {
+ case 8:
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) {
+ return this.keydown_backstroke();
+ } else if (!this.pending_backstroke) {
+ this.result_clear_highlight();
+ return this.results_search();
+ }
+ break;
+ case 13:
+ evt.preventDefault();
+ if (this.results_showing) {
+ return this.result_select();
+ }
+ break;
+ case 27:
+ if (this.results_showing) {
+ return this.results_hide();
+ }
+ break;
+ case 9:
+ case 38:
+ case 40:
+ case 16:
+ break;
+ default:
+ return this.results_search();
+ }
+ };
+ Chosen.prototype.keydown_checker = function(evt) {
+ var stroke, _ref;
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
+ this.search_field_scale();
+ if (stroke !== 8 && this.pending_backstroke) {
+ this.clear_backstroke();
+ }
+ switch (stroke) {
+ case 8:
+ this.backstroke_length = this.search_field.val().length;
+ break;
+ case 9:
+ this.mouse_on_container = false;
+ break;
+ case 13:
+ evt.preventDefault();
+ break;
+ case 38:
+ evt.preventDefault();
+ this.keyup_arrow();
+ break;
+ case 40:
+ this.keydown_arrow();
+ break;
+ }
+ };
+ Chosen.prototype.search_field_scale = function() {
+ var dd_top, div, h, style, style_block, styles, w, _i, _len;
+ if (this.is_multiple) {
+ h = 0;
+ w = 0;
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
+ style = styles[_i];
+ style_block += style + ":" + this.search_field.css(style) + ";";
+ }
+ div = $('<div />', {
+ 'style': style_block
+ });
+ div.text(this.search_field.val());
+ $('body').append(div);
+ w = div.width() + 25;
+ div.remove();
+ if (w > this.f_width - 10) {
+ w = this.f_width - 10;
+ }
+ this.search_field.css({
+ 'width': w + 'px'
+ });
+ dd_top = this.container.height();
+ return this.dropdown.css({
+ "top": dd_top + "px"
+ });
+ }
+ };
+ return Chosen;
+ })();
+ get_side_border_padding = function(elmt) {
+ var side_border_padding;
+ return side_border_padding = elmt.outerWidth() - elmt.width();
+ };
+ root.get_side_border_padding = get_side_border_padding;
+ SelectParser = (function() {
+ function SelectParser() {
+ this.options_index = 0;
+ this.parsed = [];
+ }
+ SelectParser.prototype.add_node = function(child) {
+ if (child.nodeName === "OPTGROUP") {
+ return this.add_group(child);
+ } else {
+ return this.add_option(child);
+ }
+ };
+ SelectParser.prototype.add_group = function(group) {
+ var group_position, option, _i, _len, _ref, _results;
+ group_position = this.parsed.length;
+ this.parsed.push({
+ array_index: group_position,
+ group: true,
+ label: group.label,
+ children: 0,
+ disabled: group.disabled
+ });
+ _ref = group.childNodes;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ _results.push(this.add_option(option, group_position, group.disabled));
+ }
+ return _results;
+ };
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
+ if (option.nodeName === "OPTION") {
+ if (option.text !== "") {
+ if (group_position != null) {
+ this.parsed[group_position].children += 1;
+ }
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ value: option.value,
+ text: option.text,
+ selected: option.selected,
+ disabled: group_disabled === true ? group_disabled : option.disabled,
+ group_array_index: group_position
+ });
+ } else {
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ empty: true
+ });
+ }
+ return this.options_index += 1;
+ }
+ };
+ return SelectParser;
+ })();
+ SelectParser.select_to_array = function(select) {
+ var child, parser, _i, _len, _ref;
+ parser = new SelectParser();
+ _ref = select.childNodes;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ child = _ref[_i];
+ parser.add_node(child);
+ }
+ return parser.parsed;
+ };
+ root.SelectParser = SelectParser;
+}).call(this);
diff --git a/src/usr/local/www/javascript/chosen/chosen.jquery.min.js b/src/usr/local/www/javascript/chosen/chosen.jquery.min.js
new file mode 100644
index 0000000..ae69f22
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen.jquery.min.js
@@ -0,0 +1,9 @@
+/*
+Chosen, a Select Box Enhancer for jQuery and Protoype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+Copyright (c) 2011 by Harvest
+*/
+(function(){var $,Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;$=jQuery;$.fn.extend({chosen:function(data,options){return $(this).each(function(input_field){if(!($(this)).hasClass("chzn-done")){return new Chosen(this,data,options);}});}});Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.form_field_jq=$(this.form_field);this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();this.form_field_jq.addClass("chzn-done");}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;return this.choices=0;};Chosen.prototype.set_up_html=function(){var container_div,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field_jq.width();this.default_text=this.form_field_jq.attr("title")?this.form_field_jq.attr("title"):this.default_text_default;container_div=$("<div />",{id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px;"});if(this.is_multiple){container_div.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');}else{container_div.html('<a href="javascript:void(0)" class="chzn-single"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');}this.form_field_jq.hide().after(container_div);this.container=$("#"+this.container_id);this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.find("div.chzn-drop").first();dd_top=this.container.height();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.css({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.find("input").first();this.search_results=this.container.find("ul.chzn-results").first();this.search_field_scale();this.search_no_results=this.container.find("li.no-results").first();if(this.is_multiple){this.search_choices=this.container.find("ul.chzn-choices").first();this.search_container=this.container.find("li.search-field").first();}else{this.search_container=this.container.find("div.chzn-search").first();this.selected_item=this.container.find(".chzn-single").first();sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.css({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.click(__bind(function(evt){return this.container_click(evt);},this));this.container.mouseenter(__bind(function(evt){return this.mouse_enter(evt);},this));this.container.mouseleave(__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.click(__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.mouseover(__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.mouseout(__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field_jq.bind("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.blur(__bind(function(evt){return this.input_blur(evt);},this));this.search_field.keyup(__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.keydown(__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.click(__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.focus(__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.focus(__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stopPropagation();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.val("");}$(document).click(this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&($(evt.target)===this.selected_item||$(evt.target).parents("a.chzn-single").length)){evt.preventDefault();this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout((__bind(function(){return this.container_click();},this)),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout((__bind(function(){return this.blur_test();},this)),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClass("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){$(document).unbind("click",this.click_test_action);if(!this.is_multiple){this.selected_item.attr("tabindex",this.search_field.attr("tabindex"));this.search_field.attr("tabindex",-1);}this.active_field=false;this.results_hide();this.container.removeClass("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.attr("tabindex",this.selected_item.attr("tabindex"));this.selected_item.attr("tabindex",-1);}this.container.addClass("chzn-container-active");this.active_field=true;this.search_field.val(this.search_field.val());return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if($(evt.target).parents("#"+this.container.id).length){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.find("li.search-choice").remove();this.choices=0;}else{if(!this.is_multiple){this.selected_item.find("span").text(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.find("span").text(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.html(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'<li id="'+group.dom_id+'" class="group-result">'+$("<div />").text(group.label).html()+"</li>";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'<li id="'+option.dom_id+'" class="'+classes.join(" ")+'">'+$("<div />").text(option.text).html()+"</li>";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;if(el.length){this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClass("highlighted");maxHeight=parseInt(this.search_results.css("maxHeight"),10);visible_top=this.search_results.scrollTop();visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.position().top+this.search_results.scrollTop();high_bottom=high_top+this.result_highlight.outerHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop((high_bottom-maxHeight)>0?high_bottom-maxHeight:0);}else{if(high_top<visible_top){return this.search_results.scrollTop(high_top);}}}};Chosen.prototype.result_clear_highlight=function(){if(this.result_highlight){this.result_highlight.removeClass("highlighted");}return this.result_highlight=null;};Chosen.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide();}else{return this.results_show();}};Chosen.prototype.results_show=function(){var dd_top;if(!this.is_multiple){this.selected_item.addClass("chzn-single-with-drop");if(this.result_single_selected){this.result_do_highlight(this.result_single_selected);}}dd_top=this.is_multiple?this.container.height():this.container.height()-1;this.dropdown.css({top:dd_top+"px",left:0});this.results_showing=true;this.search_field.focus();this.search_field.val(this.search_field.val());return this.winnow_results();};Chosen.prototype.results_hide=function(){if(!this.is_multiple){this.selected_item.removeClass("chzn-single-with-drop");}this.result_clear_highlight();this.dropdown.css({left:"-9000px"});return this.results_showing=false;};Chosen.prototype.set_tab_index=function(el){var ti;if(this.form_field_jq.attr("tabindex")){ti=this.form_field_jq.attr("tabindex");this.form_field_jq.attr("tabindex",-1);if(this.is_multiple){return this.search_field.attr("tabindex",ti);}else{this.selected_item.attr("tabindex",ti);return this.search_field.attr("tabindex",-1);}}};Chosen.prototype.show_search_field_default=function(){if(this.is_multiple&&this.choices<1&&!this.active_field){this.search_field.val(this.default_text);return this.search_field.addClass("default");}else{this.search_field.val("");return this.search_field.removeClass("default");}};Chosen.prototype.search_results_click=function(evt){var target;target=$(evt.target).hasClass("active-result")?$(evt.target):$(evt.target).parents(".active-result").first();if(target.length){this.result_highlight=target;return this.result_select();}};Chosen.prototype.search_results_mouseover=function(evt){var target;target=$(evt.target).hasClass("active-result")?$(evt.target):$(evt.target).parents(".active-result").first();if(target){return this.result_do_highlight(target);}};Chosen.prototype.search_results_mouseout=function(evt){if($(evt.target).hasClass("active-result"||$(evt.target).parents(".active-result").first())){return this.result_clear_highlight();}};Chosen.prototype.choices_click=function(evt){evt.preventDefault();if(this.active_field&&!($(evt.target).hasClass("search-choice"||$(evt.target).parents(".search-choice").first))&&!this.results_showing){return this.results_show();}};Chosen.prototype.choice_build=function(item){var choice_id,link;choice_id=this.form_field.id+"_chzn_c_"+item.array_index;this.choices+=1;this.search_container.before('<li class="search-choice" id="'+choice_id+'"><span>'+item.text+'</span><a href="javascript:void(0)" class="search-choice-close" rel="'+item.array_index+'"></a></li>');link=$("#"+choice_id).find("a").first();return link.click(__bind(function(evt){return this.choice_destroy_link_click(evt);},this));};Chosen.prototype.choice_destroy_link_click=function(evt){evt.preventDefault();this.pending_destroy_click=true;return this.choice_destroy($(evt.target));};Chosen.prototype.choice_destroy=function(link){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.val().length<1){this.results_hide();}this.result_deselect(link.attr("rel"));return link.parents("li").first().remove();};Chosen.prototype.result_select=function(){var high,high_id,item,position;if(this.result_highlight){high=this.result_highlight;high_id=high.attr("id");this.result_clear_highlight();high.addClass("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high_id.substr(high_id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.find("span").first().text(item.text);}this.results_hide();this.search_field.val("");this.form_field_jq.trigger("change");return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClass("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClass("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$("#"+this.form_field.id+"chzn_o_"+pos);result.removeClass("result-selected").addClass("active-result").show();this.result_clear_highlight();this.winnow_results();this.form_field_jq.trigger("change");return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.val()===this.default_text?"":$.trim(this.search_field.val());regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$("#"+option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"</em>"+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+"<em>"+text.substr(startpos);}else{text=option.text;}if($("#"+result_id).html!==text){$("#"+result_id).html(text);}this.result_activate($("#"+result_id));if(option.group_array_index!=null){$("#"+this.results_data[option.group_array_index].dom_id).show();}}else{if(this.result_highlight&&result_id===this.result_highlight.attr("id")){this.result_clear_highlight();}this.result_deactivate($("#"+result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.val("");lis=this.search_results.find("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];li=$(li);_results.push(li.hasClass("group-result")?li.show():!this.is_multiple||!li.hasClass("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.find(".active-result").first();if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){var no_results_html;no_results_html=$('<li class="no-results">No results match "<span></span>"</li>');no_results_html.find("span").first().text(terms);return this.search_results.append(no_results_html);};Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove();};Chosen.prototype.keydown_arrow=function(){var first_active,next_sib;if(!this.result_highlight){first_active=this.search_results.find("li.active-result").first();if(first_active){this.result_do_highlight($(first_active));}}else{if(this.results_showing){next_sib=this.result_highlight.nextAll("li.active-result").first();if(next_sib){this.result_do_highlight(next_sib);}}}if(!this.results_showing){return this.results_show();}};Chosen.prototype.keyup_arrow=function(){var prev_sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){prev_sibs=this.result_highlight.prevAll("li.active-result");if(prev_sibs.length){return this.result_do_highlight(prev_sibs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.find("a").first());return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClass("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClass("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.mouse_on_container=false;break;case 13:evt.preventDefault();break;case 38:evt.preventDefault();this.keyup_arrow();break;case 40:this.keydown_arrow();break;}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.css(style)+";";}div=$("<div />",{style:style_block});div.text(this.search_field.val());$("body").append(div);w=div.width()+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.css({width:w+"px"});dd_top=this.container.height();return this.dropdown.css({top:dd_top+"px"});}};return Chosen;})();get_side_border_padding=function(elmt){var side_border_padding;return side_border_padding=elmt.outerWidth()-elmt.width();};root.get_side_border_padding=get_side_border_padding;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/chosen/chosen.proto.js b/src/usr/local/www/javascript/chosen/chosen.proto.js
new file mode 100644
index 0000000..e3c0fbd
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen.proto.js
@@ -0,0 +1,765 @@
+(function() {
+ /*
+ Chosen, a Select Box Enhancer for jQuery and Protoype
+ by Patrick Filler for Harvest, http://getharvest.com
+
+ Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+ Copyright (c) 2011 by Harvest
+ */ var Chosen, SelectParser, get_side_border_padding, root;
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+ Chosen = (function() {
+ function Chosen(elmn) {
+ this.set_default_values();
+ this.form_field = elmn;
+ this.is_multiple = this.form_field.multiple;
+ this.default_text_default = this.form_field.multiple ? "Select Some Options" : "Select an Option";
+ this.set_up_html();
+ this.register_observers();
+ }
+ Chosen.prototype.set_default_values = function() {
+ this.click_test_action = __bind(function(evt) {
+ return this.test_active_click(evt);
+ }, this);
+ this.active_field = false;
+ this.mouse_on_container = false;
+ this.results_showing = false;
+ this.result_highlighted = null;
+ this.result_single_selected = null;
+ this.choices = 0;
+ this.single_temp = new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');
+ this.multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');
+ this.choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>');
+ return this.no_results_temp = new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>');
+ };
+ Chosen.prototype.set_up_html = function() {
+ var base_template, container_props, dd_top, dd_width, sf_width;
+ this.container_id = this.form_field.id + "_chzn";
+ this.f_width = this.form_field.getStyle("width") ? parseInt(this.form_field.getStyle("width"), 10) : this.form_field.getWidth();
+ container_props = {
+ 'id': this.container_id,
+ 'class': 'chzn-container',
+ 'style': 'width: ' + this.f_width + 'px'
+ };
+ this.default_text = this.form_field.readAttribute('title') ? this.form_field.readAttribute('title') : this.default_text_default;
+ base_template = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({
+ "default": this.default_text
+ })) : new Element('div', container_props).update(this.single_temp.evaluate({
+ "default": this.default_text
+ }));
+ this.form_field.hide().insert({
+ after: base_template
+ });
+ this.container = $(this.container_id);
+ this.container.addClassName("chzn-container-" + (this.is_multiple ? "multi" : "single"));
+ this.dropdown = this.container.down('div.chzn-drop');
+ dd_top = this.container.getHeight();
+ dd_width = this.f_width - get_side_border_padding(this.dropdown);
+ this.dropdown.setStyle({
+ "width": dd_width + "px",
+ "top": dd_top + "px"
+ });
+ this.search_field = this.container.down('input');
+ this.search_results = this.container.down('ul.chzn-results');
+ this.search_field_scale();
+ this.search_no_results = this.container.down('li.no-results');
+ if (this.is_multiple) {
+ this.search_choices = this.container.down('ul.chzn-choices');
+ this.search_container = this.container.down('li.search-field');
+ } else {
+ this.search_container = this.container.down('div.chzn-search');
+ this.selected_item = this.container.down('.chzn-single');
+ sf_width = dd_width - get_side_border_padding(this.search_container) - get_side_border_padding(this.search_field);
+ this.search_field.setStyle({
+ "width": sf_width + "px"
+ });
+ }
+ this.results_build();
+ return this.set_tab_index();
+ };
+ Chosen.prototype.register_observers = function() {
+ this.container.observe("click", __bind(function(evt) {
+ return this.container_click(evt);
+ }, this));
+ this.container.observe("mouseenter", __bind(function(evt) {
+ return this.mouse_enter(evt);
+ }, this));
+ this.container.observe("mouseleave", __bind(function(evt) {
+ return this.mouse_leave(evt);
+ }, this));
+ this.search_results.observe("click", __bind(function(evt) {
+ return this.search_results_click(evt);
+ }, this));
+ this.search_results.observe("mouseover", __bind(function(evt) {
+ return this.search_results_mouseover(evt);
+ }, this));
+ this.search_results.observe("mouseout", __bind(function(evt) {
+ return this.search_results_mouseout(evt);
+ }, this));
+ this.form_field.observe("liszt:updated", __bind(function(evt) {
+ return this.results_update_field(evt);
+ }, this));
+ this.search_field.observe("blur", __bind(function(evt) {
+ return this.input_blur(evt);
+ }, this));
+ this.search_field.observe("keyup", __bind(function(evt) {
+ return this.keyup_checker(evt);
+ }, this));
+ this.search_field.observe("keydown", __bind(function(evt) {
+ return this.keydown_checker(evt);
+ }, this));
+ if (this.is_multiple) {
+ this.search_choices.observe("click", __bind(function(evt) {
+ return this.choices_click(evt);
+ }, this));
+ return this.search_field.observe("focus", __bind(function(evt) {
+ return this.input_focus(evt);
+ }, this));
+ } else {
+ return this.selected_item.observe("focus", __bind(function(evt) {
+ return this.activate_field(evt);
+ }, this));
+ }
+ };
+ Chosen.prototype.container_click = function(evt) {
+ if (evt && evt.type === "click") {
+ evt.stop();
+ }
+ if (!this.pending_destroy_click) {
+ if (!this.active_field) {
+ if (this.is_multiple) {
+ this.search_field.clear();
+ }
+ document.observe("click", this.click_test_action);
+ this.results_show();
+ } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chzn-single"))) {
+ this.results_toggle();
+ }
+ return this.activate_field();
+ } else {
+ return this.pending_destroy_click = false;
+ }
+ };
+ Chosen.prototype.mouse_enter = function() {
+ return this.mouse_on_container = true;
+ };
+ Chosen.prototype.mouse_leave = function() {
+ return this.mouse_on_container = false;
+ };
+ Chosen.prototype.input_focus = function(evt) {
+ if (!this.active_field) {
+ return setTimeout(this.container_click.bind(this), 50);
+ }
+ };
+ Chosen.prototype.input_blur = function(evt) {
+ if (!this.mouse_on_container) {
+ this.active_field = false;
+ return setTimeout(this.blur_test.bind(this), 100);
+ }
+ };
+ Chosen.prototype.blur_test = function(evt) {
+ if (!this.active_field && this.container.hasClassName("chzn-container-active")) {
+ return this.close_field();
+ }
+ };
+ Chosen.prototype.close_field = function() {
+ document.stopObserving("click", this.click_test_action);
+ if (!this.is_multiple) {
+ this.selected_item.tabIndex = this.search_field.tabIndex;
+ this.search_field.tabIndex = -1;
+ }
+ this.active_field = false;
+ this.results_hide();
+ this.container.removeClassName("chzn-container-active");
+ this.winnow_results_clear();
+ this.clear_backstroke();
+ this.show_search_field_default();
+ return this.search_field_scale();
+ };
+ Chosen.prototype.activate_field = function() {
+ if (!this.is_multiple && !this.active_field) {
+ this.search_field.tabIndex = this.selected_item.tabIndex;
+ this.selected_item.tabIndex = -1;
+ }
+ this.container.addClassName("chzn-container-active");
+ this.active_field = true;
+ this.search_field.value = this.search_field.value;
+ return this.search_field.focus();
+ };
+ Chosen.prototype.test_active_click = function(evt) {
+ if (evt.target.up('#' + this.container.id)) {
+ return this.active_field = true;
+ } else {
+ return this.close_field();
+ }
+ };
+ Chosen.prototype.results_build = function() {
+ var content, data, startTime, _i, _len, _ref;
+ startTime = new Date();
+ this.parsing = true;
+ this.results_data = SelectParser.select_to_array(this.form_field);
+ if (this.is_multiple && this.choices > 0) {
+ this.search_choices.select("li.search-choice").invoke("remove");
+ this.choices = 0;
+ } else if (!this.is_multiple) {
+ this.selected_item.down("span").update(this.default_text);
+ }
+ content = '';
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ data = _ref[_i];
+ if (data.group) {
+ content += this.result_add_group(data);
+ } else if (!data.empty) {
+ content += this.result_add_option(data);
+ if (data.selected && this.is_multiple) {
+ this.choice_build(data);
+ } else if (data.selected && !this.is_multiple) {
+ this.selected_item.down("span").update(data.text);
+ }
+ }
+ }
+ this.show_search_field_default();
+ this.search_field_scale();
+ this.search_results.update(content);
+ return this.parsing = false;
+ };
+ Chosen.prototype.result_add_group = function(group) {
+ if (!group.disabled) {
+ group.dom_id = this.form_field.id + "chzn_g_" + group.array_index;
+ return '<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>';
+ } else {
+ return "";
+ }
+ };
+ Chosen.prototype.result_add_option = function(option) {
+ var classes;
+ if (!option.disabled) {
+ option.dom_id = this.form_field.id + "chzn_o_" + option.array_index;
+ classes = option.selected && this.is_multiple ? [] : ["active-result"];
+ if (option.selected) {
+ classes.push("result-selected");
+ }
+ if (option.group_array_index != null) {
+ classes.push("group-option");
+ }
+ return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + option.text.escapeHTML() + '</li>';
+ } else {
+ return "";
+ }
+ };
+ Chosen.prototype.results_update_field = function() {
+ this.result_clear_highlight();
+ this.result_single_selected = null;
+ return this.results_build();
+ };
+ Chosen.prototype.result_do_highlight = function(el) {
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
+ this.result_clear_highlight();
+ this.result_highlight = el;
+ this.result_highlight.addClassName("highlighted");
+ maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10);
+ visible_top = this.search_results.scrollTop;
+ visible_bottom = maxHeight + visible_top;
+ high_top = this.result_highlight.positionedOffset().top;
+ high_bottom = high_top + this.result_highlight.getHeight();
+ if (high_bottom >= visible_bottom) {
+ return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0;
+ } else if (high_top < visible_top) {
+ return this.search_results.scrollTop = high_top;
+ }
+ };
+ Chosen.prototype.result_clear_highlight = function() {
+ if (this.result_highlight) {
+ this.result_highlight.removeClassName('highlighted');
+ }
+ return this.result_highlight = null;
+ };
+ Chosen.prototype.results_toggle = function() {
+ if (this.results_showing) {
+ return this.results_hide();
+ } else {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.results_show = function() {
+ var dd_top;
+ if (!this.is_multiple) {
+ this.selected_item.addClassName('chzn-single-with-drop');
+ if (this.result_single_selected) {
+ this.result_do_highlight(this.result_single_selected);
+ }
+ }
+ dd_top = this.is_multiple ? this.container.getHeight() : this.container.getHeight() - 1;
+ this.dropdown.setStyle({
+ "top": dd_top + "px",
+ "left": 0
+ });
+ this.results_showing = true;
+ this.search_field.focus();
+ this.search_field.value = this.search_field.value;
+ return this.winnow_results();
+ };
+ Chosen.prototype.results_hide = function() {
+ if (!this.is_multiple) {
+ this.selected_item.removeClassName('chzn-single-with-drop');
+ }
+ this.result_clear_highlight();
+ this.dropdown.setStyle({
+ "left": "-9000px"
+ });
+ return this.results_showing = false;
+ };
+ Chosen.prototype.set_tab_index = function(el) {
+ var ti;
+ if (this.form_field.tabIndex) {
+ ti = this.form_field.tabIndex;
+ this.form_field.tabIndex = -1;
+ if (this.is_multiple) {
+ return this.search_field.tabIndex = ti;
+ } else {
+ this.selected_item.tabIndex = ti;
+ return this.search_field.tabIndex = -1;
+ }
+ }
+ };
+ Chosen.prototype.show_search_field_default = function() {
+ if (this.is_multiple && this.choices < 1 && !this.active_field) {
+ this.search_field.value = this.default_text;
+ return this.search_field.addClassName("default");
+ } else {
+ this.search_field.value = "";
+ return this.search_field.removeClassName("default");
+ }
+ };
+ Chosen.prototype.search_results_click = function(evt) {
+ var target;
+ target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result");
+ if (target) {
+ this.result_highlight = target;
+ return this.result_select();
+ }
+ };
+ Chosen.prototype.search_results_mouseover = function(evt) {
+ var target;
+ target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result");
+ if (target) {
+ return this.result_do_highlight(target);
+ }
+ };
+ Chosen.prototype.search_results_mouseout = function(evt) {
+ if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) {
+ return this.result_clear_highlight();
+ }
+ };
+ Chosen.prototype.choices_click = function(evt) {
+ evt.preventDefault();
+ if (this.active_field && !(evt.target.hasClassName('search-choice') || evt.target.up('.search-choice')) && !this.results_showing) {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.choice_build = function(item) {
+ var choice_id, link;
+ choice_id = this.form_field.id + "_chzn_c_" + item.array_index;
+ this.choices += 1;
+ this.search_container.insert({
+ before: this.choice_temp.evaluate({
+ "id": choice_id,
+ "choice": item.text,
+ "position": item.array_index
+ })
+ });
+ link = $(choice_id).down('a');
+ return link.observe("click", __bind(function(evt) {
+ return this.choice_destroy_link_click(evt);
+ }, this));
+ };
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
+ evt.preventDefault();
+ this.pending_destroy_click = true;
+ return this.choice_destroy(evt.target);
+ };
+ Chosen.prototype.choice_destroy = function(link) {
+ this.choices -= 1;
+ this.show_search_field_default();
+ if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) {
+ this.results_hide();
+ }
+ this.result_deselect(link.readAttribute("rel"));
+ return link.up('li').remove();
+ };
+ Chosen.prototype.result_select = function() {
+ var high, item, position;
+ if (this.result_highlight) {
+ high = this.result_highlight;
+ this.result_clear_highlight();
+ high.addClassName("result-selected");
+ if (this.is_multiple) {
+ this.result_deactivate(high);
+ } else {
+ this.result_single_selected = high;
+ }
+ position = high.id.substr(high.id.lastIndexOf("_") + 1);
+ item = this.results_data[position];
+ item.selected = true;
+ this.form_field.options[item.options_index].selected = true;
+ if (this.is_multiple) {
+ this.choice_build(item);
+ } else {
+ this.selected_item.down("span").update(item.text);
+ }
+ this.results_hide();
+ this.search_field.value = "";
+ if (typeof Event.simulate === 'function') {
+ this.form_field.simulate("change");
+ }
+ return this.search_field_scale();
+ }
+ };
+ Chosen.prototype.result_activate = function(el) {
+ return el.addClassName("active-result").show();
+ };
+ Chosen.prototype.result_deactivate = function(el) {
+ return el.removeClassName("active-result").hide();
+ };
+ Chosen.prototype.result_deselect = function(pos) {
+ var result, result_data;
+ result_data = this.results_data[pos];
+ result_data.selected = false;
+ this.form_field.options[result_data.options_index].selected = false;
+ result = $(this.form_field.id + "chzn_o_" + pos);
+ result.removeClassName("result-selected").addClassName("active-result").show();
+ this.result_clear_highlight();
+ this.winnow_results();
+ if (typeof Event.simulate === 'function') {
+ this.form_field.simulate("change");
+ }
+ return this.search_field_scale();
+ };
+ Chosen.prototype.results_search = function(evt) {
+ if (this.results_showing) {
+ return this.winnow_results();
+ } else {
+ return this.results_show();
+ }
+ };
+ Chosen.prototype.winnow_results = function() {
+ var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
+ startTime = new Date();
+ this.no_results_clear();
+ results = 0;
+ searchText = this.search_field.value === this.default_text ? "" : this.search_field.value.strip();
+ regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
+ zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
+ _ref = this.results_data;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ if (!option.disabled && !option.empty) {
+ if (option.group) {
+ $(option.dom_id).hide();
+ } else if (!(this.is_multiple && option.selected)) {
+ found = false;
+ result_id = option.dom_id;
+ if (regex.test(option.text)) {
+ found = true;
+ results += 1;
+ } else if (option.text.indexOf(" ") >= 0 || option.text.indexOf("[") === 0) {
+ parts = option.text.replace(/\[|\]/g, "").split(" ");
+ if (parts.length) {
+ for (_j = 0, _len2 = parts.length; _j < _len2; _j++) {
+ part = parts[_j];
+ if (regex.test(part)) {
+ found = true;
+ results += 1;
+ }
+ }
+ }
+ }
+ if (found) {
+ if (searchText.length) {
+ startpos = option.text.search(zregex);
+ text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length);
+ text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
+ } else {
+ text = option.text;
+ }
+ if ($(result_id).innerHTML !== text) {
+ $(result_id).update(text);
+ }
+ this.result_activate($(result_id));
+ if (option.group_array_index != null) {
+ $(this.results_data[option.group_array_index].dom_id).show();
+ }
+ } else {
+ if ($(result_id) === this.result_highlight) {
+ this.result_clear_highlight();
+ }
+ this.result_deactivate($(result_id));
+ }
+ }
+ }
+ }
+ if (results < 1 && searchText.length) {
+ return this.no_results(searchText);
+ } else {
+ return this.winnow_results_set_highlight();
+ }
+ };
+ Chosen.prototype.winnow_results_clear = function() {
+ var li, lis, _i, _len, _results;
+ this.search_field.clear();
+ lis = this.search_results.select("li");
+ _results = [];
+ for (_i = 0, _len = lis.length; _i < _len; _i++) {
+ li = lis[_i];
+ _results.push(li.hasClassName("group-result") ? li.show() : !this.is_multiple || !li.hasClassName("result-selected") ? this.result_activate(li) : void 0);
+ }
+ return _results;
+ };
+ Chosen.prototype.winnow_results_set_highlight = function() {
+ var do_high;
+ if (!this.result_highlight) {
+ do_high = this.search_results.down(".active-result");
+ if (do_high) {
+ return this.result_do_highlight(do_high);
+ }
+ }
+ };
+ Chosen.prototype.no_results = function(terms) {
+ return this.search_results.insert(this.no_results_temp.evaluate({
+ "terms": terms.escapeHTML()
+ }));
+ };
+ Chosen.prototype.no_results_clear = function() {
+ var nr, _results;
+ nr = null;
+ _results = [];
+ while (nr = this.search_results.down(".no-results")) {
+ _results.push(nr.remove());
+ }
+ return _results;
+ };
+ Chosen.prototype.keydown_arrow = function() {
+ var actives, nexts, sibs;
+ actives = this.search_results.select("li.active-result");
+ if (actives.length) {
+ if (!this.result_highlight) {
+ this.result_do_highlight(actives.first());
+ } else if (this.results_showing) {
+ sibs = this.result_highlight.nextSiblings();
+ nexts = sibs.intersect(actives);
+ if (nexts.length) {
+ this.result_do_highlight(nexts.first());
+ }
+ }
+ if (!this.results_showing) {
+ return this.results_show();
+ }
+ }
+ };
+ Chosen.prototype.keyup_arrow = function() {
+ var actives, prevs, sibs;
+ if (!this.results_showing && !this.is_multiple) {
+ return this.results_show();
+ } else if (this.result_highlight) {
+ sibs = this.result_highlight.previousSiblings();
+ actives = this.search_results.select("li.active-result");
+ prevs = sibs.intersect(actives);
+ if (prevs.length) {
+ return this.result_do_highlight(prevs.first());
+ } else {
+ if (this.choices > 0) {
+ this.results_hide();
+ }
+ return this.result_clear_highlight();
+ }
+ }
+ };
+ Chosen.prototype.keydown_backstroke = function() {
+ if (this.pending_backstroke) {
+ this.choice_destroy(this.pending_backstroke.down("a"));
+ return this.clear_backstroke();
+ } else {
+ this.pending_backstroke = this.search_container.siblings("li.search-choice").last();
+ return this.pending_backstroke.addClassName("search-choice-focus");
+ }
+ };
+ Chosen.prototype.clear_backstroke = function() {
+ if (this.pending_backstroke) {
+ this.pending_backstroke.removeClassName("search-choice-focus");
+ }
+ return this.pending_backstroke = null;
+ };
+ Chosen.prototype.keyup_checker = function(evt) {
+ var stroke, _ref;
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
+ this.search_field_scale();
+ switch (stroke) {
+ case 8:
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) {
+ return this.keydown_backstroke();
+ } else if (!this.pending_backstroke) {
+ this.result_clear_highlight();
+ return this.results_search();
+ }
+ break;
+ case 13:
+ evt.preventDefault();
+ if (this.results_showing) {
+ return this.result_select();
+ }
+ break;
+ case 27:
+ if (this.results_showing) {
+ return this.results_hide();
+ }
+ break;
+ case 9:
+ case 38:
+ case 40:
+ case 16:
+ break;
+ default:
+ return this.results_search();
+ }
+ };
+ Chosen.prototype.keydown_checker = function(evt) {
+ var stroke, _ref;
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
+ this.search_field_scale();
+ if (stroke !== 8 && this.pending_backstroke) {
+ this.clear_backstroke();
+ }
+ switch (stroke) {
+ case 8:
+ return this.backstroke_length = this.search_field.value.length;
+ case 9:
+ return this.mouse_on_container = false;
+ case 13:
+ return evt.preventDefault();
+ case 38:
+ evt.preventDefault();
+ return this.keyup_arrow();
+ case 40:
+ return this.keydown_arrow();
+ }
+ };
+ Chosen.prototype.search_field_scale = function() {
+ var dd_top, div, h, style, style_block, styles, w, _i, _len;
+ if (this.is_multiple) {
+ h = 0;
+ w = 0;
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
+ style = styles[_i];
+ style_block += style + ":" + this.search_field.getStyle(style) + ";";
+ }
+ div = new Element('div', {
+ 'style': style_block
+ }).update(this.search_field.value);
+ document.body.appendChild(div);
+ w = Element.measure(div, 'width') + 25;
+ div.remove();
+ if (w > this.f_width - 10) {
+ w = this.f_width - 10;
+ }
+ this.search_field.setStyle({
+ 'width': w + 'px'
+ });
+ dd_top = this.container.getHeight();
+ return this.dropdown.setStyle({
+ "top": dd_top + "px"
+ });
+ }
+ };
+ return Chosen;
+ })();
+ root.Chosen = Chosen;
+ document.observe('dom:loaded', function(evt) {
+ var select, selects, _i, _len, _results;
+ selects = $$(".chzn-select");
+ _results = [];
+ for (_i = 0, _len = selects.length; _i < _len; _i++) {
+ select = selects[_i];
+ _results.push(new Chosen(select));
+ }
+ return _results;
+ });
+ get_side_border_padding = function(elmt) {
+ var layout, side_border_padding;
+ layout = new Element.Layout(elmt);
+ return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right");
+ };
+ root.get_side_border_padding = get_side_border_padding;
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+ SelectParser = (function() {
+ function SelectParser() {
+ this.options_index = 0;
+ this.parsed = [];
+ }
+ SelectParser.prototype.add_node = function(child) {
+ if (child.nodeName === "OPTGROUP") {
+ return this.add_group(child);
+ } else {
+ return this.add_option(child);
+ }
+ };
+ SelectParser.prototype.add_group = function(group) {
+ var group_position, option, _i, _len, _ref, _results;
+ group_position = this.parsed.length;
+ this.parsed.push({
+ array_index: group_position,
+ group: true,
+ label: group.label,
+ children: 0,
+ disabled: group.disabled
+ });
+ _ref = group.childNodes;
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ option = _ref[_i];
+ _results.push(this.add_option(option, group_position, group.disabled));
+ }
+ return _results;
+ };
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
+ if (option.nodeName === "OPTION") {
+ if (option.text !== "") {
+ if (group_position != null) {
+ this.parsed[group_position].children += 1;
+ }
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ value: option.value,
+ text: option.text,
+ selected: option.selected,
+ disabled: group_disabled === true ? group_disabled : option.disabled,
+ group_array_index: group_position
+ });
+ } else {
+ this.parsed.push({
+ array_index: this.parsed.length,
+ options_index: this.options_index,
+ empty: true
+ });
+ }
+ return this.options_index += 1;
+ }
+ };
+ return SelectParser;
+ })();
+ SelectParser.select_to_array = function(select) {
+ var child, parser, _i, _len, _ref;
+ parser = new SelectParser();
+ _ref = select.childNodes;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ child = _ref[_i];
+ parser.add_node(child);
+ }
+ return parser.parsed;
+ };
+ root.SelectParser = SelectParser;
+}).call(this);
diff --git a/src/usr/local/www/javascript/chosen/chosen.proto.min.js b/src/usr/local/www/javascript/chosen/chosen.proto.min.js
new file mode 100644
index 0000000..79109c5
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/chosen.proto.min.js
@@ -0,0 +1,9 @@
+/*
+Chosen, a Select Box Enhancer for jQuery and Protoype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+Copyright (c) 2011 by Harvest
+*/
+(function(){var Chosen,SelectParser,get_side_border_padding,root;var __bind=function(fn,me){return function(){return fn.apply(me,arguments);};};root=typeof exports!=="undefined"&&exports!==null?exports:this;Chosen=(function(){function Chosen(elmn){this.set_default_values();this.form_field=elmn;this.is_multiple=this.form_field.multiple;this.default_text_default=this.form_field.multiple?"Select Some Options":"Select an Option";this.set_up_html();this.register_observers();}Chosen.prototype.set_default_values=function(){this.click_test_action=__bind(function(evt){return this.test_active_click(evt);},this);this.active_field=false;this.mouse_on_container=false;this.results_showing=false;this.result_highlighted=null;this.result_single_selected=null;this.choices=0;this.single_temp=new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>');this.multi_temp=new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>');this.choice_temp=new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>');return this.no_results_temp=new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>');};Chosen.prototype.set_up_html=function(){var base_template,container_props,dd_top,dd_width,sf_width;this.container_id=this.form_field.id+"_chzn";this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth();container_props={id:this.container_id,"class":"chzn-container",style:"width: "+this.f_width+"px"};this.default_text=this.form_field.readAttribute("title")?this.form_field.readAttribute("title"):this.default_text_default;base_template=this.is_multiple?new Element("div",container_props).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",container_props).update(this.single_temp.evaluate({"default":this.default_text}));this.form_field.hide().insert({after:base_template});this.container=$(this.container_id);this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single"));this.dropdown=this.container.down("div.chzn-drop");dd_top=this.container.getHeight();dd_width=this.f_width-get_side_border_padding(this.dropdown);this.dropdown.setStyle({width:dd_width+"px",top:dd_top+"px"});this.search_field=this.container.down("input");this.search_results=this.container.down("ul.chzn-results");this.search_field_scale();this.search_no_results=this.container.down("li.no-results");if(this.is_multiple){this.search_choices=this.container.down("ul.chzn-choices");this.search_container=this.container.down("li.search-field");}else{this.search_container=this.container.down("div.chzn-search");this.selected_item=this.container.down(".chzn-single");sf_width=dd_width-get_side_border_padding(this.search_container)-get_side_border_padding(this.search_field);this.search_field.setStyle({width:sf_width+"px"});}this.results_build();return this.set_tab_index();};Chosen.prototype.register_observers=function(){this.container.observe("click",__bind(function(evt){return this.container_click(evt);},this));this.container.observe("mouseenter",__bind(function(evt){return this.mouse_enter(evt);},this));this.container.observe("mouseleave",__bind(function(evt){return this.mouse_leave(evt);},this));this.search_results.observe("click",__bind(function(evt){return this.search_results_click(evt);},this));this.search_results.observe("mouseover",__bind(function(evt){return this.search_results_mouseover(evt);},this));this.search_results.observe("mouseout",__bind(function(evt){return this.search_results_mouseout(evt);},this));this.form_field.observe("liszt:updated",__bind(function(evt){return this.results_update_field(evt);},this));this.search_field.observe("blur",__bind(function(evt){return this.input_blur(evt);},this));this.search_field.observe("keyup",__bind(function(evt){return this.keyup_checker(evt);},this));this.search_field.observe("keydown",__bind(function(evt){return this.keydown_checker(evt);},this));if(this.is_multiple){this.search_choices.observe("click",__bind(function(evt){return this.choices_click(evt);},this));return this.search_field.observe("focus",__bind(function(evt){return this.input_focus(evt);},this));}else{return this.selected_item.observe("focus",__bind(function(evt){return this.activate_field(evt);},this));}};Chosen.prototype.container_click=function(evt){if(evt&&evt.type==="click"){evt.stop();}if(!this.pending_destroy_click){if(!this.active_field){if(this.is_multiple){this.search_field.clear();}document.observe("click",this.click_test_action);this.results_show();}else{if(!this.is_multiple&&evt&&(evt.target===this.selected_item||evt.target.up("a.chzn-single"))){this.results_toggle();}}return this.activate_field();}else{return this.pending_destroy_click=false;}};Chosen.prototype.mouse_enter=function(){return this.mouse_on_container=true;};Chosen.prototype.mouse_leave=function(){return this.mouse_on_container=false;};Chosen.prototype.input_focus=function(evt){if(!this.active_field){return setTimeout(this.container_click.bind(this),50);}};Chosen.prototype.input_blur=function(evt){if(!this.mouse_on_container){this.active_field=false;return setTimeout(this.blur_test.bind(this),100);}};Chosen.prototype.blur_test=function(evt){if(!this.active_field&&this.container.hasClassName("chzn-container-active")){return this.close_field();}};Chosen.prototype.close_field=function(){document.stopObserving("click",this.click_test_action);if(!this.is_multiple){this.selected_item.tabIndex=this.search_field.tabIndex;this.search_field.tabIndex=-1;}this.active_field=false;this.results_hide();this.container.removeClassName("chzn-container-active");this.winnow_results_clear();this.clear_backstroke();this.show_search_field_default();return this.search_field_scale();};Chosen.prototype.activate_field=function(){if(!this.is_multiple&&!this.active_field){this.search_field.tabIndex=this.selected_item.tabIndex;this.selected_item.tabIndex=-1;}this.container.addClassName("chzn-container-active");this.active_field=true;this.search_field.value=this.search_field.value;return this.search_field.focus();};Chosen.prototype.test_active_click=function(evt){if(evt.target.up("#"+this.container.id)){return this.active_field=true;}else{return this.close_field();}};Chosen.prototype.results_build=function(){var content,data,startTime,_i,_len,_ref;startTime=new Date();this.parsing=true;this.results_data=SelectParser.select_to_array(this.form_field);if(this.is_multiple&&this.choices>0){this.search_choices.select("li.search-choice").invoke("remove");this.choices=0;}else{if(!this.is_multiple){this.selected_item.down("span").update(this.default_text);}}content="";_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){data=_ref[_i];if(data.group){content+=this.result_add_group(data);}else{if(!data.empty){content+=this.result_add_option(data);if(data.selected&&this.is_multiple){this.choice_build(data);}else{if(data.selected&&!this.is_multiple){this.selected_item.down("span").update(data.text);}}}}}this.show_search_field_default();this.search_field_scale();this.search_results.update(content);return this.parsing=false;};Chosen.prototype.result_add_group=function(group){if(!group.disabled){group.dom_id=this.form_field.id+"chzn_g_"+group.array_index;return'<li id="'+group.dom_id+'" class="group-result">'+group.label.escapeHTML()+"</li>";}else{return"";}};Chosen.prototype.result_add_option=function(option){var classes;if(!option.disabled){option.dom_id=this.form_field.id+"chzn_o_"+option.array_index;classes=option.selected&&this.is_multiple?[]:["active-result"];if(option.selected){classes.push("result-selected");}if(option.group_array_index!=null){classes.push("group-option");}return'<li id="'+option.dom_id+'" class="'+classes.join(" ")+'">'+option.text.escapeHTML()+"</li>";}else{return"";}};Chosen.prototype.results_update_field=function(){this.result_clear_highlight();this.result_single_selected=null;return this.results_build();};Chosen.prototype.result_do_highlight=function(el){var high_bottom,high_top,maxHeight,visible_bottom,visible_top;this.result_clear_highlight();this.result_highlight=el;this.result_highlight.addClassName("highlighted");maxHeight=parseInt(this.search_results.getStyle("maxHeight"),10);visible_top=this.search_results.scrollTop;visible_bottom=maxHeight+visible_top;high_top=this.result_highlight.positionedOffset().top;high_bottom=high_top+this.result_highlight.getHeight();if(high_bottom>=visible_bottom){return this.search_results.scrollTop=(high_bottom-maxHeight)>0?high_bottom-maxHeight:0;}else{if(high_top<visible_top){return this.search_results.scrollTop=high_top;}}};Chosen.prototype.result_clear_highlight=function(){if(this.result_highlight){this.result_highlight.removeClassName("highlighted");}return this.result_highlight=null;};Chosen.prototype.results_toggle=function(){if(this.results_showing){return this.results_hide();}else{return this.results_show();}};Chosen.prototype.results_show=function(){var dd_top;if(!this.is_multiple){this.selected_item.addClassName("chzn-single-with-drop");if(this.result_single_selected){this.result_do_highlight(this.result_single_selected);}}dd_top=this.is_multiple?this.container.getHeight():this.container.getHeight()-1;this.dropdown.setStyle({top:dd_top+"px",left:0});this.results_showing=true;this.search_field.focus();this.search_field.value=this.search_field.value;return this.winnow_results();};Chosen.prototype.results_hide=function(){if(!this.is_multiple){this.selected_item.removeClassName("chzn-single-with-drop");}this.result_clear_highlight();this.dropdown.setStyle({left:"-9000px"});return this.results_showing=false;};Chosen.prototype.set_tab_index=function(el){var ti;if(this.form_field.tabIndex){ti=this.form_field.tabIndex;this.form_field.tabIndex=-1;if(this.is_multiple){return this.search_field.tabIndex=ti;}else{this.selected_item.tabIndex=ti;return this.search_field.tabIndex=-1;}}};Chosen.prototype.show_search_field_default=function(){if(this.is_multiple&&this.choices<1&&!this.active_field){this.search_field.value=this.default_text;return this.search_field.addClassName("default");}else{this.search_field.value="";return this.search_field.removeClassName("default");}};Chosen.prototype.search_results_click=function(evt){var target;target=evt.target.hasClassName("active-result")?evt.target:evt.target.up(".active-result");if(target){this.result_highlight=target;return this.result_select();}};Chosen.prototype.search_results_mouseover=function(evt){var target;target=evt.target.hasClassName("active-result")?evt.target:evt.target.up(".active-result");if(target){return this.result_do_highlight(target);}};Chosen.prototype.search_results_mouseout=function(evt){if(evt.target.hasClassName("active-result")||evt.target.up(".active-result")){return this.result_clear_highlight();}};Chosen.prototype.choices_click=function(evt){evt.preventDefault();if(this.active_field&&!(evt.target.hasClassName("search-choice")||evt.target.up(".search-choice"))&&!this.results_showing){return this.results_show();}};Chosen.prototype.choice_build=function(item){var choice_id,link;choice_id=this.form_field.id+"_chzn_c_"+item.array_index;this.choices+=1;this.search_container.insert({before:this.choice_temp.evaluate({id:choice_id,choice:item.text,position:item.array_index})});link=$(choice_id).down("a");return link.observe("click",__bind(function(evt){return this.choice_destroy_link_click(evt);},this));};Chosen.prototype.choice_destroy_link_click=function(evt){evt.preventDefault();this.pending_destroy_click=true;return this.choice_destroy(evt.target);};Chosen.prototype.choice_destroy=function(link){this.choices-=1;this.show_search_field_default();if(this.is_multiple&&this.choices>0&&this.search_field.value.length<1){this.results_hide();}this.result_deselect(link.readAttribute("rel"));return link.up("li").remove();};Chosen.prototype.result_select=function(){var high,item,position;if(this.result_highlight){high=this.result_highlight;this.result_clear_highlight();high.addClassName("result-selected");if(this.is_multiple){this.result_deactivate(high);}else{this.result_single_selected=high;}position=high.id.substr(high.id.lastIndexOf("_")+1);item=this.results_data[position];item.selected=true;this.form_field.options[item.options_index].selected=true;if(this.is_multiple){this.choice_build(item);}else{this.selected_item.down("span").update(item.text);}this.results_hide();this.search_field.value="";if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();}};Chosen.prototype.result_activate=function(el){return el.addClassName("active-result").show();};Chosen.prototype.result_deactivate=function(el){return el.removeClassName("active-result").hide();};Chosen.prototype.result_deselect=function(pos){var result,result_data;result_data=this.results_data[pos];result_data.selected=false;this.form_field.options[result_data.options_index].selected=false;result=$(this.form_field.id+"chzn_o_"+pos);result.removeClassName("result-selected").addClassName("active-result").show();this.result_clear_highlight();this.winnow_results();if(typeof Event.simulate==="function"){this.form_field.simulate("change");}return this.search_field_scale();};Chosen.prototype.results_search=function(evt){if(this.results_showing){return this.winnow_results();}else{return this.results_show();}};Chosen.prototype.winnow_results=function(){var found,option,part,parts,regex,result_id,results,searchText,startTime,startpos,text,zregex,_i,_j,_len,_len2,_ref;startTime=new Date();this.no_results_clear();results=0;searchText=this.search_field.value===this.default_text?"":this.search_field.value.strip();regex=new RegExp("^"+searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");zregex=new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i");_ref=this.results_data;for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];if(!option.disabled&&!option.empty){if(option.group){$(option.dom_id).hide();}else{if(!(this.is_multiple&&option.selected)){found=false;result_id=option.dom_id;if(regex.test(option.text)){found=true;results+=1;}else{if(option.text.indexOf(" ")>=0||option.text.indexOf("[")===0){parts=option.text.replace(/\[|\]/g,"").split(" ");if(parts.length){for(_j=0,_len2=parts.length;_j<_len2;_j++){part=parts[_j];if(regex.test(part)){found=true;results+=1;}}}}}if(found){if(searchText.length){startpos=option.text.search(zregex);text=option.text.substr(0,startpos+searchText.length)+"</em>"+option.text.substr(startpos+searchText.length);text=text.substr(0,startpos)+"<em>"+text.substr(startpos);}else{text=option.text;}if($(result_id).innerHTML!==text){$(result_id).update(text);}this.result_activate($(result_id));if(option.group_array_index!=null){$(this.results_data[option.group_array_index].dom_id).show();}}else{if($(result_id)===this.result_highlight){this.result_clear_highlight();}this.result_deactivate($(result_id));}}}}}if(results<1&&searchText.length){return this.no_results(searchText);}else{return this.winnow_results_set_highlight();}};Chosen.prototype.winnow_results_clear=function(){var li,lis,_i,_len,_results;this.search_field.clear();lis=this.search_results.select("li");_results=[];for(_i=0,_len=lis.length;_i<_len;_i++){li=lis[_i];_results.push(li.hasClassName("group-result")?li.show():!this.is_multiple||!li.hasClassName("result-selected")?this.result_activate(li):void 0);}return _results;};Chosen.prototype.winnow_results_set_highlight=function(){var do_high;if(!this.result_highlight){do_high=this.search_results.down(".active-result");if(do_high){return this.result_do_highlight(do_high);}}};Chosen.prototype.no_results=function(terms){return this.search_results.insert(this.no_results_temp.evaluate({terms:terms.escapeHTML()}));};Chosen.prototype.no_results_clear=function(){var nr,_results;nr=null;_results=[];while(nr=this.search_results.down(".no-results")){_results.push(nr.remove());}return _results;};Chosen.prototype.keydown_arrow=function(){var actives,nexts,sibs;actives=this.search_results.select("li.active-result");if(actives.length){if(!this.result_highlight){this.result_do_highlight(actives.first());}else{if(this.results_showing){sibs=this.result_highlight.nextSiblings();nexts=sibs.intersect(actives);if(nexts.length){this.result_do_highlight(nexts.first());}}}if(!this.results_showing){return this.results_show();}}};Chosen.prototype.keyup_arrow=function(){var actives,prevs,sibs;if(!this.results_showing&&!this.is_multiple){return this.results_show();}else{if(this.result_highlight){sibs=this.result_highlight.previousSiblings();actives=this.search_results.select("li.active-result");prevs=sibs.intersect(actives);if(prevs.length){return this.result_do_highlight(prevs.first());}else{if(this.choices>0){this.results_hide();}return this.result_clear_highlight();}}}};Chosen.prototype.keydown_backstroke=function(){if(this.pending_backstroke){this.choice_destroy(this.pending_backstroke.down("a"));return this.clear_backstroke();}else{this.pending_backstroke=this.search_container.siblings("li.search-choice").last();return this.pending_backstroke.addClassName("search-choice-focus");}};Chosen.prototype.clear_backstroke=function(){if(this.pending_backstroke){this.pending_backstroke.removeClassName("search-choice-focus");}return this.pending_backstroke=null;};Chosen.prototype.keyup_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();switch(stroke){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0){return this.keydown_backstroke();}else{if(!this.pending_backstroke){this.result_clear_highlight();return this.results_search();}}break;case 13:evt.preventDefault();if(this.results_showing){return this.result_select();}break;case 27:if(this.results_showing){return this.results_hide();}break;case 9:case 38:case 40:case 16:break;default:return this.results_search();}};Chosen.prototype.keydown_checker=function(evt){var stroke,_ref;stroke=(_ref=evt.which)!=null?_ref:evt.keyCode;this.search_field_scale();if(stroke!==8&&this.pending_backstroke){this.clear_backstroke();}switch(stroke){case 8:return this.backstroke_length=this.search_field.value.length;case 9:return this.mouse_on_container=false;case 13:return evt.preventDefault();case 38:evt.preventDefault();return this.keyup_arrow();case 40:return this.keydown_arrow();}};Chosen.prototype.search_field_scale=function(){var dd_top,div,h,style,style_block,styles,w,_i,_len;if(this.is_multiple){h=0;w=0;style_block="position:absolute; left: -1000px; top: -1000px; display:none;";styles=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(_i=0,_len=styles.length;_i<_len;_i++){style=styles[_i];style_block+=style+":"+this.search_field.getStyle(style)+";";}div=new Element("div",{style:style_block}).update(this.search_field.value);document.body.appendChild(div);w=Element.measure(div,"width")+25;div.remove();if(w>this.f_width-10){w=this.f_width-10;}this.search_field.setStyle({width:w+"px"});dd_top=this.container.getHeight();return this.dropdown.setStyle({top:dd_top+"px"});}};return Chosen;})();root.Chosen=Chosen;document.observe("dom:loaded",function(evt){var select,selects,_i,_len,_results;selects=$$(".chzn-select");_results=[];for(_i=0,_len=selects.length;_i<_len;_i++){select=selects[_i];_results.push(new Chosen(select));}return _results;});get_side_border_padding=function(elmt){var layout,side_border_padding;layout=new Element.Layout(elmt);return side_border_padding=layout.get("border-left")+layout.get("border-right")+layout.get("padding-left")+layout.get("padding-right");};root.get_side_border_padding=get_side_border_padding;root=typeof exports!=="undefined"&&exports!==null?exports:this;SelectParser=(function(){function SelectParser(){this.options_index=0;this.parsed=[];}SelectParser.prototype.add_node=function(child){if(child.nodeName==="OPTGROUP"){return this.add_group(child);}else{return this.add_option(child);}};SelectParser.prototype.add_group=function(group){var group_position,option,_i,_len,_ref,_results;group_position=this.parsed.length;this.parsed.push({array_index:group_position,group:true,label:group.label,children:0,disabled:group.disabled});_ref=group.childNodes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){option=_ref[_i];_results.push(this.add_option(option,group_position,group.disabled));}return _results;};SelectParser.prototype.add_option=function(option,group_position,group_disabled){if(option.nodeName==="OPTION"){if(option.text!==""){if(group_position!=null){this.parsed[group_position].children+=1;}this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:option.value,text:option.text,selected:option.selected,disabled:group_disabled===true?group_disabled:option.disabled,group_array_index:group_position});}else{this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:true});}return this.options_index+=1;}};return SelectParser;})();SelectParser.select_to_array=function(select){var child,parser,_i,_len,_ref;parser=new SelectParser();_ref=select.childNodes;for(_i=0,_len=_ref.length;_i<_len;_i++){child=_ref[_i];parser.add_node(child);}return parser.parsed;};root.SelectParser=SelectParser;}).call(this); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee b/src/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee
new file mode 100644
index 0000000..0d6596a
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/coffee/chosen.jquery.coffee
@@ -0,0 +1,633 @@
+###
+Chosen, a Select Box Enhancer for jQuery and Protoype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+Copyright (c) 2011 by Harvest
+###
+
+root = exports ? this
+$ = jQuery
+
+$.fn.extend({
+ chosen: (data, options) ->
+ $(this).each((input_field) ->
+ new Chosen(this, data, options) unless ($ this).hasClass "chzn-done"
+ )
+})
+
+class Chosen
+
+ constructor: (elmn) ->
+ this.set_default_values()
+
+ @form_field = elmn
+ @form_field_jq = $ @form_field
+ @is_multiple = @form_field.multiple
+
+ @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option"
+
+ this.set_up_html()
+ this.register_observers()
+ @form_field_jq.addClass "chzn-done"
+
+ set_default_values: ->
+
+ @click_test_action = (evt) => this.test_active_click(evt)
+ @active_field = false
+ @mouse_on_container = false
+ @results_showing = false
+ @result_highlighted = null
+ @result_single_selected = null
+ @choices = 0
+
+ set_up_html: ->
+ @container_id = @form_field.id + "_chzn"
+
+ @f_width = @form_field_jq.width()
+
+ @default_text = if @form_field_jq.attr 'title' then @form_field_jq.attr 'title' else @default_text_default
+
+ container_div = ($ "<div />", {
+ id: @container_id
+ class: 'chzn-container'
+ style: 'width: ' + (@f_width) + 'px;' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter
+ })
+
+ if @is_multiple
+ container_div.html '<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + @default_text + '" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'
+ else
+ container_div.html '<a href="javascript:void(0)" class="chzn-single"><span>' + @default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>'
+
+ @form_field_jq.hide().after container_div
+ @container = ($ '#' + @container_id)
+ @container.addClass( "chzn-container-" + (if @is_multiple then "multi" else "single") )
+ @dropdown = @container.find('div.chzn-drop').first()
+
+ dd_top = @container.height()
+ dd_width = (@f_width - get_side_border_padding(@dropdown))
+
+ @dropdown.css({"width": dd_width + "px", "top": dd_top + "px"})
+
+ @search_field = @container.find('input').first()
+ @search_results = @container.find('ul.chzn-results').first()
+ this.search_field_scale()
+
+ @search_no_results = @container.find('li.no-results').first()
+
+ if @is_multiple
+ @search_choices = @container.find('ul.chzn-choices').first()
+ @search_container = @container.find('li.search-field').first()
+ else
+ @search_container = @container.find('div.chzn-search').first()
+ @selected_item = @container.find('.chzn-single').first()
+ sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
+ @search_field.css( {"width" : sf_width + "px"} )
+
+ this.results_build()
+ this.set_tab_index()
+
+
+ register_observers: ->
+ @container.click (evt) => this.container_click(evt)
+ @container.mouseenter (evt) => this.mouse_enter(evt)
+ @container.mouseleave (evt) => this.mouse_leave(evt)
+
+ @search_results.click (evt) => this.search_results_click(evt)
+ @search_results.mouseover (evt) => this.search_results_mouseover(evt)
+ @search_results.mouseout (evt) => this.search_results_mouseout(evt)
+
+ @form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt)
+
+ @search_field.blur (evt) => this.input_blur(evt)
+ @search_field.keyup (evt) => this.keyup_checker(evt)
+ @search_field.keydown (evt) => this.keydown_checker(evt)
+
+ if @is_multiple
+ @search_choices.click (evt) => this.choices_click(evt)
+ @search_field.focus (evt) => this.input_focus(evt)
+ else
+ @selected_item.focus (evt) => this.activate_field(evt)
+
+ container_click: (evt) ->
+ if evt and evt.type is "click"
+ evt.stopPropagation()
+ if not @pending_destroy_click
+ if not @active_field
+ @search_field.val "" if @is_multiple
+ $(document).click @click_test_action
+ this.results_show()
+ else if not @is_multiple and evt and ($(evt.target) is @selected_item || $(evt.target).parents("a.chzn-single").length)
+ evt.preventDefault()
+ this.results_toggle()
+
+ this.activate_field()
+ else
+ @pending_destroy_click = false
+
+ mouse_enter: -> @mouse_on_container = true
+ mouse_leave: -> @mouse_on_container = false
+
+ input_focus: (evt) ->
+ setTimeout (=> this.container_click()), 50 unless @active_field
+
+ input_blur: (evt) ->
+ if not @mouse_on_container
+ @active_field = false
+ setTimeout (=> this.blur_test()), 100
+
+ blur_test: (evt) ->
+ this.close_field() if not @active_field and @container.hasClass "chzn-container-active"
+
+ close_field: ->
+ $(document).unbind "click", @click_test_action
+
+ if not @is_multiple
+ @selected_item.attr "tabindex", @search_field.attr("tabindex")
+ @search_field.attr "tabindex", -1
+
+ @active_field = false
+ this.results_hide()
+
+ @container.removeClass "chzn-container-active"
+ this.winnow_results_clear()
+ this.clear_backstroke()
+
+ this.show_search_field_default()
+ this.search_field_scale()
+
+ activate_field: ->
+ if not @is_multiple and not @active_field
+ @search_field.attr "tabindex", (@selected_item.attr "tabindex")
+ @selected_item.attr "tabindex", -1
+
+ @container.addClass "chzn-container-active"
+ @active_field = true
+
+ @search_field.val(@search_field.val())
+ @search_field.focus()
+
+
+ test_active_click: (evt) ->
+ if $(evt.target).parents('#' + @container.id).length
+ @active_field = true
+ else
+ this.close_field()
+
+ results_build: ->
+ startTime = new Date()
+ @parsing = true
+ @results_data = SelectParser.select_to_array @form_field
+
+ if @is_multiple and @choices > 0
+ @search_choices.find("li.search-choice").remove()
+ @choices = 0
+ else if not @is_multiple
+ @selected_item.find("span").text @default_text
+
+ content = ''
+ for data in @results_data
+ if data.group
+ content += this.result_add_group data
+ else if !data.empty
+ content += this.result_add_option data
+ if data.selected and @is_multiple
+ this.choice_build data
+ else if data.selected and not @is_multiple
+ @selected_item.find("span").text data.text
+
+ this.show_search_field_default()
+ this.search_field_scale()
+
+ @search_results.html content
+ @parsing = false
+
+
+ result_add_group: (group) ->
+ if not group.disabled
+ group.dom_id = @form_field.id + "chzn_g_" + group.array_index
+ '<li id="' + group.dom_id + '" class="group-result">' + $("<div />").text(group.label).html() + '</li>'
+ else
+ ""
+
+ result_add_option: (option) ->
+ if not option.disabled
+ option.dom_id = @form_field.id + "chzn_o_" + option.array_index
+
+ classes = if option.selected and @is_multiple then [] else ["active-result"]
+ classes.push "result-selected" if option.selected
+ classes.push "group-option" if option.group_array_index?
+
+ '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + $("<div />").text(option.text).html() + '</li>'
+ else
+ ""
+
+ results_update_field: ->
+ this.result_clear_highlight()
+ @result_single_selected = null
+ this.results_build()
+
+ result_do_highlight: (el) ->
+ if el.length
+ this.result_clear_highlight()
+
+ @result_highlight = el
+ @result_highlight.addClass "highlighted"
+
+ maxHeight = parseInt @search_results.css("maxHeight"), 10
+ visible_top = @search_results.scrollTop()
+ visible_bottom = maxHeight + visible_top
+
+ high_top = @result_highlight.position().top + @search_results.scrollTop()
+ high_bottom = high_top + @result_highlight.outerHeight()
+
+ if high_bottom >= visible_bottom
+ @search_results.scrollTop if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
+ else if high_top < visible_top
+ @search_results.scrollTop high_top
+
+ result_clear_highlight: ->
+ @result_highlight.removeClass "highlighted" if @result_highlight
+ @result_highlight = null
+
+ results_toggle: ->
+ if @results_showing
+ this.results_hide()
+ else
+ this.results_show()
+
+ results_show: ->
+ if not @is_multiple
+ @selected_item.addClass "chzn-single-with-drop"
+ if @result_single_selected
+ this.result_do_highlight( @result_single_selected )
+
+ dd_top = if @is_multiple then @container.height() else (@container.height() - 1)
+ @dropdown.css {"top": dd_top + "px", "left":0}
+ @results_showing = true
+
+ @search_field.focus()
+ @search_field.val @search_field.val()
+
+ this.winnow_results()
+
+ results_hide: ->
+ @selected_item.removeClass "chzn-single-with-drop" unless @is_multiple
+ this.result_clear_highlight()
+ @dropdown.css {"left":"-9000px"}
+ @results_showing = false
+
+
+ set_tab_index: (el) ->
+ if @form_field_jq.attr "tabindex"
+ ti = @form_field_jq.attr "tabindex"
+ @form_field_jq.attr "tabindex", -1
+
+ if @is_multiple
+ @search_field.attr "tabindex", ti
+ else
+ @selected_item.attr "tabindex", ti
+ @search_field.attr "tabindex", -1
+
+ show_search_field_default: ->
+ if @is_multiple and @choices < 1 and not @active_field
+ @search_field.val(@default_text)
+ @search_field.addClass "default"
+ else
+ @search_field.val("")
+ @search_field.removeClass "default"
+
+ search_results_click: (evt) ->
+ target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first()
+ if target.length
+ @result_highlight = target
+ this.result_select()
+
+ search_results_mouseover: (evt) ->
+ target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first()
+ this.result_do_highlight( target ) if target
+
+ search_results_mouseout: (evt) ->
+ this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first()
+
+
+ choices_click: (evt) ->
+ evt.preventDefault()
+ if( @active_field and not($(evt.target).hasClass "search-choice" or $(evt.target).parents('.search-choice').first) and not @results_showing )
+ this.results_show()
+
+ choice_build: (item) ->
+ choice_id = @form_field.id + "_chzn_c_" + item.array_index
+ @choices += 1
+ @search_container.before '<li class="search-choice" id="' + choice_id + '"><span>' + item.text + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>'
+ link = $('#' + choice_id).find("a").first()
+ link.click (evt) => this.choice_destroy_link_click(evt)
+
+ choice_destroy_link_click: (evt) ->
+ evt.preventDefault()
+ @pending_destroy_click = true
+ this.choice_destroy $(evt.target)
+
+ choice_destroy: (link) ->
+ @choices -= 1
+ this.show_search_field_default()
+
+ this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1
+
+ this.result_deselect (link.attr "rel")
+ link.parents('li').first().remove()
+
+ result_select: ->
+ if @result_highlight
+ high = @result_highlight
+ high_id = high.attr "id"
+
+ this.result_clear_highlight()
+
+ high.addClass "result-selected"
+
+ if @is_multiple
+ this.result_deactivate high
+ else
+ @result_single_selected = high
+
+ position = high_id.substr(high_id.lastIndexOf("_") + 1 )
+ item = @results_data[position]
+ item.selected = true
+
+ @form_field.options[item.options_index].selected = true
+
+ if @is_multiple
+ this.choice_build item
+ else
+ @selected_item.find("span").first().text item.text
+
+ this.results_hide()
+ @search_field.val ""
+
+ @form_field_jq.trigger "change"
+ this.search_field_scale()
+
+ result_activate: (el) ->
+ el.addClass("active-result").show()
+
+ result_deactivate: (el) ->
+ el.removeClass("active-result").hide()
+
+ result_deselect: (pos) ->
+ result_data = @results_data[pos]
+ result_data.selected = false
+
+ @form_field.options[result_data.options_index].selected = false
+ result = $("#" + @form_field.id + "chzn_o_" + pos)
+ result.removeClass("result-selected").addClass("active-result").show()
+
+ this.result_clear_highlight()
+ this.winnow_results()
+
+ @form_field_jq.trigger "change"
+ this.search_field_scale()
+
+ results_search: (evt) ->
+ if @results_showing
+ this.winnow_results()
+ else
+ this.results_show()
+
+ winnow_results: ->
+ startTime = new Date()
+ this.no_results_clear()
+
+ results = 0
+
+ searchText = if @search_field.val() is @default_text then "" else $.trim @search_field.val()
+ regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
+ zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
+
+ for option in @results_data
+ if not option.disabled and not option.empty
+ if option.group
+ $('#' + option.dom_id).hide()
+ else if not (@is_multiple and option.selected)
+ found = false
+ result_id = option.dom_id
+
+ if regex.test option.text
+ found = true
+ results += 1
+ else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0
+ #TODO: replace this substitution of /\[\]/ with a list of characters to skip.
+ parts = option.text.replace(/\[|\]/g, "").split(" ")
+ if parts.length
+ for part in parts
+ if regex.test part
+ found = true
+ results += 1
+
+ if found
+ if searchText.length
+ startpos = option.text.search zregex
+ text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length)
+ text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
+ else
+ text = option.text
+
+ $("#" + result_id).html text if $("#" + result_id).html != text
+
+ this.result_activate $("#" + result_id)
+
+ $("#" + @results_data[option.group_array_index].dom_id).show() if option.group_array_index?
+ else
+ this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id'
+ this.result_deactivate $("#" + result_id)
+
+ if results < 1 and searchText.length
+ this.no_results searchText
+ else
+ this.winnow_results_set_highlight()
+
+ winnow_results_clear: ->
+ @search_field.val ""
+ lis = @search_results.find("li")
+
+ for li in lis
+ li = $(li)
+ if li.hasClass "group-result"
+ li.show()
+ else if not @is_multiple or not li.hasClass "result-selected"
+ this.result_activate li
+
+ winnow_results_set_highlight: ->
+ if not @result_highlight
+ do_high = @search_results.find(".active-result").first()
+ if(do_high)
+ this.result_do_highlight do_high
+
+ no_results: (terms) ->
+ no_results_html = $('<li class="no-results">No results match "<span></span>"</li>')
+ no_results_html.find("span").first().text(terms)
+
+ @search_results.append no_results_html
+
+ no_results_clear: ->
+ @search_results.find(".no-results").remove()
+
+ keydown_arrow: ->
+ if not @result_highlight
+ first_active = @search_results.find("li.active-result").first()
+ this.result_do_highlight $(first_active) if first_active
+ else if @results_showing
+ next_sib = @result_highlight.nextAll("li.active-result").first()
+ this.result_do_highlight next_sib if next_sib
+ this.results_show() if not @results_showing
+
+ keyup_arrow: ->
+ if not @results_showing and not @is_multiple
+ this.results_show()
+ else if @result_highlight
+ prev_sibs = @result_highlight.prevAll("li.active-result")
+
+ if prev_sibs.length
+ this.result_do_highlight prev_sibs.first()
+ else
+ this.results_hide() if @choices > 0
+ this.result_clear_highlight()
+
+ keydown_backstroke: ->
+ if @pending_backstroke
+ this.choice_destroy @pending_backstroke.find("a").first()
+ this.clear_backstroke()
+ else
+ @pending_backstroke = @search_container.siblings("li.search-choice").last()
+ @pending_backstroke.addClass "search-choice-focus"
+
+ clear_backstroke: ->
+ @pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke
+ @pending_backstroke = null
+
+ keyup_checker: (evt) ->
+ stroke = evt.which ? evt.keyCode
+ this.search_field_scale()
+
+ switch stroke
+ when 8
+ if @is_multiple and @backstroke_length < 1 and @choices > 0
+ this.keydown_backstroke()
+ else if not @pending_backstroke
+ this.result_clear_highlight()
+ this.results_search()
+ when 13
+ evt.preventDefault()
+ this.result_select() if this.results_showing
+ when 27
+ this.results_hide() if @results_showing
+ when 9, 38, 40, 16
+ # don't do anything on these keys
+ else this.results_search()
+
+
+ keydown_checker: (evt) ->
+ stroke = evt.which ? evt.keyCode
+ this.search_field_scale()
+
+ this.clear_backstroke() if stroke != 8 and this.pending_backstroke
+
+ switch stroke
+ when 8
+ @backstroke_length = this.search_field.val().length
+ break
+ when 9
+ @mouse_on_container = false
+ break
+ when 13
+ evt.preventDefault()
+ break
+ when 38
+ evt.preventDefault()
+ this.keyup_arrow()
+ break
+ when 40
+ this.keydown_arrow()
+ break
+
+
+ search_field_scale: ->
+ if @is_multiple
+ h = 0
+ w = 0
+
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
+ styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
+
+ for style in styles
+ style_block += style + ":" + @search_field.css(style) + ";"
+
+ div = $('<div />', { 'style' : style_block })
+ div.text @search_field.val()
+ $('body').append div
+
+ w = div.width() + 25
+ div.remove()
+
+ if( w > @f_width-10 )
+ w = @f_width - 10
+
+ @search_field.css({'width': w + 'px'})
+
+ dd_top = @container.height()
+ @dropdown.css({"top": dd_top + "px"})
+
+get_side_border_padding = (elmt) ->
+ side_border_padding = elmt.outerWidth() - elmt.width()
+
+root.get_side_border_padding = get_side_border_padding
+
+class SelectParser
+
+ constructor: ->
+ @options_index = 0
+ @parsed = []
+
+ add_node: (child) ->
+ if child.nodeName is "OPTGROUP"
+ this.add_group child
+ else
+ this.add_option child
+
+ add_group: (group) ->
+ group_position = @parsed.length
+ @parsed.push
+ array_index: group_position
+ group: true
+ label: group.label
+ children: 0
+ disabled: group.disabled
+ this.add_option( option, group_position, group.disabled ) for option in group.childNodes
+
+ add_option: (option, group_position, group_disabled) ->
+ if option.nodeName is "OPTION"
+ if option.text != ""
+ if group_position?
+ @parsed[group_position].children += 1
+ @parsed.push
+ array_index: @parsed.length
+ options_index: @options_index
+ value: option.value
+ text: option.text
+ selected: option.selected
+ disabled: if group_disabled is true then group_disabled else option.disabled
+ group_array_index: group_position
+ else
+ @parsed.push
+ array_index: @parsed.length
+ options_index: @options_index
+ empty: true
+ @options_index += 1
+
+SelectParser.select_to_array = (select) ->
+ parser = new SelectParser()
+ parser.add_node( child ) for child in select.childNodes
+ parser.parsed
+
+root.SelectParser = SelectParser
diff --git a/src/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee b/src/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee
new file mode 100644
index 0000000..87a22b6
--- /dev/null
+++ b/src/usr/local/www/javascript/chosen/coffee/chosen.proto.coffee
@@ -0,0 +1,629 @@
+###
+Chosen, a Select Box Enhancer for jQuery and Protoype
+by Patrick Filler for Harvest, http://getharvest.com
+
+Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
+
+Copyright (c) 2011 by Harvest
+###
+
+root = exports ? this
+
+class Chosen
+
+ constructor: (elmn) ->
+ this.set_default_values()
+
+ @form_field = elmn
+ @is_multiple = @form_field.multiple
+
+ @default_text_default = if @form_field.multiple then "Select Some Options" else "Select an Option"
+
+ this.set_up_html()
+ this.register_observers()
+
+
+ set_default_values: ->
+
+ @click_test_action = (evt) => this.test_active_click(evt)
+ @active_field = false
+ @mouse_on_container = false
+ @results_showing = false
+ @result_highlighted = null
+ @result_single_selected = null
+ @choices = 0
+
+ # HTML Templates
+ @single_temp = new Template('<a href="javascript:void(0)" class="chzn-single"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" /></div><ul class="chzn-results"></ul></div>')
+ @multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>')
+ @choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>')
+ @no_results_temp = new Template('<li class="no-results">No results match "<span>#{terms}</span>"</li>')
+
+
+ set_up_html: ->
+ @container_id = @form_field.id + "_chzn"
+
+ @f_width = if @form_field.getStyle("width") then parseInt @form_field.getStyle("width"), 10 else @form_field.getWidth()
+
+ container_props =
+ 'id': @container_id
+ 'class': 'chzn-container'
+ 'style': 'width: ' + (@f_width) + 'px' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter
+
+ @default_text = if @form_field.readAttribute 'title' then @form_field.readAttribute 'title' else @default_text_default
+
+ base_template = if @is_multiple then new Element('div', container_props).update( @multi_temp.evaluate({ "default": @default_text}) ) else new Element('div', container_props).update( @single_temp.evaluate({ "default":@default_text }) )
+
+ @form_field.hide().insert({ after: base_template })
+ @container = $(@container_id)
+ @container.addClassName( "chzn-container-" + (if @is_multiple then "multi" else "single") )
+ @dropdown = @container.down('div.chzn-drop')
+
+ dd_top = @container.getHeight()
+ dd_width = (@f_width - get_side_border_padding(@dropdown))
+
+ @dropdown.setStyle({"width": dd_width + "px", "top": dd_top + "px"})
+
+ @search_field = @container.down('input')
+ @search_results = @container.down('ul.chzn-results')
+ this.search_field_scale()
+
+ @search_no_results = @container.down('li.no-results')
+
+ if @is_multiple
+ @search_choices = @container.down('ul.chzn-choices')
+ @search_container = @container.down('li.search-field')
+ else
+ @search_container = @container.down('div.chzn-search')
+ @selected_item = @container.down('.chzn-single')
+ sf_width = dd_width - get_side_border_padding(@search_container) - get_side_border_padding(@search_field)
+ @search_field.setStyle( {"width" : sf_width + "px"} )
+
+ this.results_build()
+ this.set_tab_index()
+
+
+ register_observers: ->
+ @container.observe "click", (evt) => this.container_click(evt)
+ @container.observe "mouseenter", (evt) => this.mouse_enter(evt)
+ @container.observe "mouseleave", (evt) => this.mouse_leave(evt)
+
+ @search_results.observe "click", (evt) => this.search_results_click(evt)
+ @search_results.observe "mouseover", (evt) => this.search_results_mouseover(evt)
+ @search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt)
+
+ @form_field.observe "liszt:updated", (evt) => this.results_update_field(evt)
+
+ @search_field.observe "blur", (evt) => this.input_blur(evt)
+ @search_field.observe "keyup", (evt) => this.keyup_checker(evt)
+ @search_field.observe "keydown", (evt) => this.keydown_checker(evt)
+
+ if @is_multiple
+ @search_choices.observe "click", (evt) => this.choices_click(evt)
+ @search_field.observe "focus", (evt) => this.input_focus(evt)
+ else
+ @selected_item.observe "focus", (evt) => this.activate_field(evt)
+
+
+ container_click: (evt) ->
+ if evt and evt.type is "click"
+ evt.stop()
+ if not @pending_destroy_click
+ if not @active_field
+ @search_field.clear() if @is_multiple
+ document.observe "click", @click_test_action
+ this.results_show()
+ else if not @is_multiple and evt and (evt.target is @selected_item || evt.target.up("a.chzn-single"))
+ this.results_toggle()
+
+ this.activate_field()
+ else
+ @pending_destroy_click = false
+
+ mouse_enter: -> @mouse_on_container = true
+ mouse_leave: -> @mouse_on_container = false
+
+ input_focus: (evt) ->
+ setTimeout this.container_click.bind(this), 50 unless @active_field
+
+ input_blur: (evt) ->
+ if not @mouse_on_container
+ @active_field = false
+ setTimeout this.blur_test.bind(this), 100
+
+ blur_test: (evt) ->
+ this.close_field() if not @active_field and @container.hasClassName("chzn-container-active")
+
+ close_field: ->
+ document.stopObserving "click", @click_test_action
+
+ if not @is_multiple
+ @selected_item.tabIndex = @search_field.tabIndex
+ @search_field.tabIndex = -1
+
+ @active_field = false
+ this.results_hide()
+
+ @container.removeClassName "chzn-container-active"
+ this.winnow_results_clear()
+ this.clear_backstroke()
+
+ this.show_search_field_default()
+ this.search_field_scale()
+
+ activate_field: ->
+ if not @is_multiple and not @active_field
+ @search_field.tabIndex = @selected_item.tabIndex
+ @selected_item.tabIndex = -1
+
+ @container.addClassName "chzn-container-active"
+ @active_field = true
+
+ @search_field.value = @search_field.value
+ @search_field.focus()
+
+
+ test_active_click: (evt) ->
+ if evt.target.up('#' + @container.id)
+ @active_field = true
+ else
+ this.close_field()
+
+ results_build: ->
+ startTime = new Date()
+ @parsing = true
+ @results_data = SelectParser.select_to_array @form_field
+
+ if @is_multiple and @choices > 0
+ @search_choices.select("li.search-choice").invoke("remove")
+ @choices = 0
+ else if not @is_multiple
+ @selected_item.down("span").update(@default_text)
+
+ content = ''
+ for data in @results_data
+ if data.group
+ content += this.result_add_group data
+ else if !data.empty
+ content += this.result_add_option data
+ if data.selected and @is_multiple
+ this.choice_build data
+ else if data.selected and not @is_multiple
+ @selected_item.down("span").update( data.text )
+
+ this.show_search_field_default()
+ this.search_field_scale()
+
+ @search_results.update content
+ @parsing = false
+
+
+ result_add_group: (group) ->
+ if not group.disabled
+ group.dom_id = @form_field.id + "chzn_g_" + group.array_index
+ '<li id="' + group.dom_id + '" class="group-result">' + group.label.escapeHTML() + '</li>'
+ else
+ ""
+
+ result_add_option: (option) ->
+ if not option.disabled
+ option.dom_id = @form_field.id + "chzn_o_" + option.array_index
+
+ classes = if option.selected and @is_multiple then [] else ["active-result"]
+ classes.push "result-selected" if option.selected
+ classes.push "group-option" if option.group_array_index?
+
+ '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '">' + option.text.escapeHTML() + '</li>'
+ else
+ ""
+
+ results_update_field: ->
+ this.result_clear_highlight()
+ @result_single_selected = null
+ this.results_build()
+
+ result_do_highlight: (el) ->
+ this.result_clear_highlight()
+
+ @result_highlight = el
+ @result_highlight.addClassName "highlighted"
+
+ maxHeight = parseInt @search_results.getStyle('maxHeight'), 10
+ visible_top = @search_results.scrollTop
+ visible_bottom = maxHeight + visible_top
+
+ high_top = @result_highlight.positionedOffset().top
+ high_bottom = high_top + @result_highlight.getHeight()
+
+ if high_bottom >= visible_bottom
+ @search_results.scrollTop = if (high_bottom - maxHeight) > 0 then (high_bottom - maxHeight) else 0
+ else if high_top < visible_top
+ @search_results.scrollTop = high_top
+
+ result_clear_highlight: ->
+ @result_highlight.removeClassName('highlighted') if @result_highlight
+ @result_highlight = null
+
+ results_toggle: ->
+ if @results_showing
+ this.results_hide()
+ else
+ this.results_show()
+
+ results_show: ->
+ if not @is_multiple
+ @selected_item.addClassName('chzn-single-with-drop')
+ if @result_single_selected
+ this.result_do_highlight( @result_single_selected )
+
+ dd_top = if @is_multiple then @container.getHeight() else (@container.getHeight() - 1)
+ @dropdown.setStyle {"top": dd_top + "px", "left":0}
+ @results_showing = true
+
+ @search_field.focus()
+ @search_field.value = @search_field.value
+
+ this.winnow_results()
+
+ results_hide: ->
+ @selected_item.removeClassName('chzn-single-with-drop') unless @is_multiple
+ this.result_clear_highlight()
+ @dropdown.setStyle({"left":"-9000px"})
+ @results_showing = false
+
+
+ set_tab_index: (el) ->
+ if @form_field.tabIndex
+ ti = @form_field.tabIndex
+ @form_field.tabIndex = -1
+
+ if @is_multiple
+ @search_field.tabIndex = ti
+ else
+ @selected_item.tabIndex = ti
+ @search_field.tabIndex = -1
+
+ show_search_field_default: ->
+ if @is_multiple and @choices < 1 and not @active_field
+ @search_field.value = @default_text
+ @search_field.addClassName "default"
+ else
+ @search_field.value = ""
+ @search_field.removeClassName "default"
+
+ search_results_click: (evt) ->
+ target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result")
+ if target
+ @result_highlight = target
+ this.result_select()
+
+ search_results_mouseover: (evt) ->
+ target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result")
+ this.result_do_highlight( target ) if target
+
+ search_results_mouseout: (evt) ->
+ this.result_clear_highlight() if evt.target.hasClassName('active-result') or evt.target.up('.active-result')
+
+
+ choices_click: (evt) ->
+ evt.preventDefault()
+ if( @active_field and not(evt.target.hasClassName('search-choice') or evt.target.up('.search-choice')) and not @results_showing )
+ this.results_show()
+
+ choice_build: (item) ->
+ choice_id = @form_field.id + "_chzn_c_" + item.array_index
+ @choices += 1
+ @search_container.insert { before: @choice_temp.evaluate({"id":choice_id, "choice":item.text, "position":item.array_index}) }
+ link = $(choice_id).down('a')
+ link.observe "click", (evt) => this.choice_destroy_link_click(evt)
+
+ choice_destroy_link_click: (evt) ->
+ evt.preventDefault()
+ @pending_destroy_click = true
+ this.choice_destroy evt.target
+
+ choice_destroy: (link) ->
+ @choices -= 1
+ this.show_search_field_default()
+
+ this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1
+
+ this.result_deselect link.readAttribute("rel")
+ link.up('li').remove()
+
+ result_select: ->
+ if @result_highlight
+ high = @result_highlight
+ this.result_clear_highlight()
+
+ high.addClassName("result-selected")
+
+ if @is_multiple
+ this.result_deactivate high
+ else
+ @result_single_selected = high
+
+ position = high.id.substr(high.id.lastIndexOf("_") + 1 )
+ item = @results_data[position]
+ item.selected = true
+
+ @form_field.options[item.options_index].selected = true
+
+ if @is_multiple
+ this.choice_build item
+ else
+ @selected_item.down("span").update(item.text)
+
+ this.results_hide()
+ @search_field.value = ""
+
+ @form_field.simulate("change") if typeof Event.simulate is 'function'
+ this.search_field_scale()
+
+ result_activate: (el) ->
+ el.addClassName("active-result").show()
+
+ result_deactivate: (el) ->
+ el.removeClassName("active-result").hide()
+
+ result_deselect: (pos) ->
+ result_data = @results_data[pos]
+ result_data.selected = false
+
+ @form_field.options[result_data.options_index].selected = false
+ result = $(@form_field.id + "chzn_o_" + pos)
+ result.removeClassName("result-selected").addClassName("active-result").show()
+
+ this.result_clear_highlight()
+ this.winnow_results()
+
+ @form_field.simulate("change") if typeof Event.simulate is 'function'
+ this.search_field_scale()
+
+ results_search: (evt) ->
+ if @results_showing
+ this.winnow_results()
+ else
+ this.results_show()
+
+ winnow_results: ->
+ startTime = new Date()
+ this.no_results_clear()
+
+ results = 0
+
+ searchText = if @search_field.value is @default_text then "" else @search_field.value.strip()
+ regex = new RegExp('^' + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
+ zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i')
+
+ for option in @results_data
+ if not option.disabled and not option.empty
+ if option.group
+ $(option.dom_id).hide()
+ else if not (@is_multiple and option.selected)
+ found = false
+ result_id = option.dom_id
+
+ if regex.test option.text
+ found = true
+ results += 1
+ else if option.text.indexOf(" ") >= 0 or option.text.indexOf("[") == 0
+ #TODO: replace this substitution of /\[\]/ with a list of characters to skip.
+ parts = option.text.replace(/\[|\]/g, "").split(" ")
+ if parts.length
+ for part in parts
+ if regex.test part
+ found = true
+ results += 1
+
+ if found
+ if searchText.length
+ startpos = option.text.search zregex
+ text = option.text.substr(0, startpos + searchText.length) + '</em>' + option.text.substr(startpos + searchText.length)
+ text = text.substr(0, startpos) + '<em>' + text.substr(startpos)
+ else
+ text = option.text
+
+ $(result_id).update text if $(result_id).innerHTML != text
+
+ this.result_activate $(result_id)
+
+ $(@results_data[option.group_array_index].dom_id).show() if option.group_array_index?
+ else
+ this.result_clear_highlight() if $(result_id) is @result_highlight
+ this.result_deactivate $(result_id)
+
+ if results < 1 and searchText.length
+ this.no_results(searchText)
+ else
+ this.winnow_results_set_highlight()
+
+ winnow_results_clear: ->
+ @search_field.clear()
+ lis = @search_results.select("li")
+
+ for li in lis
+ if li.hasClassName("group-result")
+ li.show()
+ else if not @is_multiple or not li.hasClassName("result-selected")
+ this.result_activate li
+
+ winnow_results_set_highlight: ->
+ if not @result_highlight
+ do_high = @search_results.down(".active-result")
+ if(do_high)
+ this.result_do_highlight do_high
+
+ no_results: (terms) ->
+ @search_results.insert @no_results_temp.evaluate({"terms":terms.escapeHTML()})
+
+ no_results_clear: ->
+ nr = null
+ nr.remove() while nr = @search_results.down(".no-results")
+
+
+ keydown_arrow: ->
+ actives = @search_results.select("li.active-result")
+ if actives.length
+ if not @result_highlight
+ this.result_do_highlight actives.first()
+ else if @results_showing
+ sibs = @result_highlight.nextSiblings()
+ nexts = sibs.intersect(actives)
+ this.result_do_highlight nexts.first() if nexts.length
+ this.results_show() if not @results_showing
+
+ keyup_arrow: ->
+ if not @results_showing and not @is_multiple
+ this.results_show()
+ else if @result_highlight
+ sibs = @result_highlight.previousSiblings()
+ actives = @search_results.select("li.active-result")
+ prevs = sibs.intersect(actives)
+
+ if prevs.length
+ this.result_do_highlight prevs.first()
+ else
+ this.results_hide() if @choices > 0
+ this.result_clear_highlight()
+
+ keydown_backstroke: ->
+ if @pending_backstroke
+ this.choice_destroy @pending_backstroke.down("a")
+ this.clear_backstroke()
+ else
+ @pending_backstroke = @search_container.siblings("li.search-choice").last()
+ @pending_backstroke.addClassName("search-choice-focus")
+
+ clear_backstroke: ->
+ @pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke
+ @pending_backstroke = null
+
+ keyup_checker: (evt) ->
+ stroke = evt.which ? evt.keyCode
+ this.search_field_scale()
+
+ switch stroke
+ when 8
+ if @is_multiple and @backstroke_length < 1 and @choices > 0
+ this.keydown_backstroke()
+ else if not @pending_backstroke
+ this.result_clear_highlight()
+ this.results_search()
+ when 13
+ evt.preventDefault()
+ this.result_select() if this.results_showing
+ when 27
+ this.results_hide() if @results_showing
+ when 9, 38, 40, 16
+ # don't do anything on these keys
+ else this.results_search()
+
+
+ keydown_checker: (evt) ->
+ stroke = evt.which ? evt.keyCode
+ this.search_field_scale()
+
+ this.clear_backstroke() if stroke != 8 and this.pending_backstroke
+
+ switch stroke
+ when 8
+ @backstroke_length = this.search_field.value.length
+ when 9
+ @mouse_on_container = false
+ when 13
+ evt.preventDefault()
+ when 38
+ evt.preventDefault()
+ this.keyup_arrow()
+ when 40
+ this.keydown_arrow()
+
+
+ search_field_scale: ->
+ if @is_multiple
+ h = 0
+ w = 0
+
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"
+ styles = ['font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing']
+
+ for style in styles
+ style_block += style + ":" + @search_field.getStyle(style) + ";"
+
+ div = new Element('div', { 'style' : style_block }).update(@search_field.value)
+ document.body.appendChild(div)
+
+ w = Element.measure(div, 'width') + 25
+ div.remove()
+
+ if( w > @f_width-10 )
+ w = @f_width - 10
+
+ @search_field.setStyle({'width': w + 'px'})
+
+ dd_top = @container.getHeight()
+ @dropdown.setStyle({"top": dd_top + "px"})
+
+root.Chosen = Chosen
+
+document.observe 'dom:loaded', (evt) ->
+ selects = $$(".chzn-select")
+ new Chosen select for select in selects
+
+get_side_border_padding = (elmt) ->
+ layout = new Element.Layout(elmt)
+ side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right")
+
+root.get_side_border_padding = get_side_border_padding
+
+root = exports ? this
+
+class SelectParser
+
+ constructor: ->
+ @options_index = 0
+ @parsed = []
+
+ add_node: (child) ->
+ if child.nodeName is "OPTGROUP"
+ this.add_group child
+ else
+ this.add_option child
+
+ add_group: (group) ->
+ group_position = @parsed.length
+ @parsed.push
+ array_index: group_position
+ group: true
+ label: group.label
+ children: 0
+ disabled: group.disabled
+ this.add_option( option, group_position, group.disabled ) for option in group.childNodes
+
+ add_option: (option, group_position, group_disabled) ->
+ if option.nodeName is "OPTION"
+ if option.text != ""
+ if group_position?
+ @parsed[group_position].children += 1
+ @parsed.push
+ array_index: @parsed.length
+ options_index: @options_index
+ value: option.value
+ text: option.text
+ selected: option.selected
+ disabled: if group_disabled is true then group_disabled else option.disabled
+ group_array_index: group_position
+ else
+ @parsed.push
+ array_index: @parsed.length
+ options_index: @options_index
+ empty: true
+ @options_index += 1
+
+SelectParser.select_to_array = (select) ->
+ parser = new SelectParser()
+ parser.add_node( child ) for child in select.childNodes
+ parser.parsed
+
+root.SelectParser = SelectParser
diff --git a/src/usr/local/www/javascript/datepicker/css/datepicker.css b/src/usr/local/www/javascript/datepicker/css/datepicker.css
new file mode 100644
index 0000000..0773fa6
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/css/datepicker.css
@@ -0,0 +1,178 @@
+/* This is a very basic stylesheet for the date-picker. Feel free to create your own. */
+
+/* The wrapper div */
+.datePicker
+ {
+ position:absolute;
+ min-width:21em;
+ width:21em;
+ z-index:9999;
+ text-align:center;
+ font:900 0.8em/0.8em Verdana, Sans-Serif;
+ background:transparent;
+ }
+/*
+ Quirksmode necessity
+ --------------------
+
+ If your HTML document renders in quirksmode (i.e. has no doctype declaration)
+ then uncomment the following CSS rule or the datePicker will be HUGE...
+
+.datePicker th,
+.datePicker td
+ {
+ font-size:11px;
+ }
+*/
+/* The iframe hack to cover selectlists in Internet Explorer <= v6 */
+.iehack
+ {
+ position:absolute;
+ background:#fff;
+ z-index:9998;
+ padding:0;
+ border:0;
+ display:none;
+ }
+/* The button created beside each input */
+.date-picker-control
+ {
+ border:0 none;
+ padding:0;
+ margin-left:4px;
+ background:transparent url(../media/cal.gif) no-repeat 0 0;
+ width:16px;
+ height:16px;
+ margin-top:0;
+ vertical-align:top;
+ cursor:pointer;
+ }
+/* The next & previous buttons */
+.datePicker th button
+ {
+ display:inline;
+ padding:0;
+ margin:0;
+ color:#000;
+ height:1em;
+ width:0.8em;
+ line-height:0.8em;
+ border-width:0;
+ font-family: georgia, times new roman, palatino, times, bookman, serif;
+ background:transparent;
+ font-weight:bold;
+ cursor:pointer;
+ }
+.datePicker th button:active,
+.datePicker th button:focus,
+.date-picker-control:active,
+.date-picker-control:focus
+ {
+ outline:none;
+ }
+.datePicker th button.prev-but
+ {
+ text-align:left;
+ }
+.datePicker th button.next-but
+ {
+ text-align:right;
+ }
+/* The mon, tue, wed etc day buttons */
+.datePicker th button.fd-day-header
+ {
+ text-align:center;
+ margin:0 auto;
+ font:900 1em Verdana, Sans-Serif;
+ height:auto;
+ width:auto;
+ text-decoration:none;
+ line-height:1.4em;
+ }
+/* The table */
+.datePicker table
+ {
+ position:relative;
+ margin:0;
+ padding:0;
+ border:1px solid #ccc;
+ background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -20px;
+ text-align:center;
+ width:100%;
+ }
+.datePicker table tfoot td
+ {
+ background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -40px;
+ }
+/* Common TD & TH styling */
+.datePicker table td
+ {
+ border: 1px solid #ccc;
+ padding:0.6em 0.5em 0.5em 0.5em;
+ /* Opera requires a line-height bigger than 1em in order to redraw properly */
+ line-height:1.2em;
+ cursor:default;
+ background:#fff url(../media/gradient-e5e5e5-ffffff.gif) repeat-x 0 -50px;
+ }
+.datePicker table th
+ {
+ border:0 none;
+ padding:0;
+ line-height:1em;
+ font-weight:bold;
+ color:#222;
+ text-align:center;
+ }
+/* The "mon tue wed etc" day header button styles */
+.datePicker table th.date-picker-day-header
+ {
+ text-transform:lowercase;
+ cursor:help;
+ }
+/* The "todays date" style */
+.datePicker table td.date-picker-today
+ {
+ background:#fff url(../media/bullet2.gif) no-repeat 0 0;
+ color:rgb(100,100,100) !important;
+ }
+/* The "selected date" style */
+.datePicker table td.date-picker-selected-date
+ {
+ color:#333 !important;
+ border-color:#333 !important;
+ }
+/* the "highlight days" style */
+td.date-picker-highlight
+ {
+ color:#a86666;
+ }
+/* The date "out of range" style */
+.datePicker table td.out-of-range
+ {
+ color:#ccc !important;
+ font-style:oblique;
+ background:transparent !important;
+ cursor:default !important;
+ }
+/* The "disabled days" style */
+.datePicker table td.day-disabled
+ {
+ color:#aaa !important;
+ background:transparent !important;
+ cursor:default !important;
+ }
+/* The "active cursor" style */
+.datePicker table td#date-picker-hover
+ {
+ background:#fff url(../media/bg_header.jpg) no-repeat 0 0;
+ cursor:pointer;
+ border-color:rgb(100,130,170);
+ color:rgb(100,130,170);
+ }
+/* Remove the images for Internet Explorer <= v6 using the "* html" hack */
+* html .datePicker table td.date-picker-selected,
+* html .datePicker table td.date-picker-hover,
+* html .datePicker table td
+ {
+ background-image:none;
+ }
diff --git a/src/usr/local/www/javascript/datepicker/js/blank.html b/src/usr/local/www/javascript/datepicker/js/blank.html
new file mode 100644
index 0000000..53a7f24
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/js/blank.html
@@ -0,0 +1,6 @@
+<html>
+<head>
+</head>
+<body>
+</body>
+</html>
diff --git a/src/usr/local/www/javascript/datepicker/js/datepicker.js b/src/usr/local/www/javascript/datepicker/js/datepicker.js
new file mode 100644
index 0000000..3d6dbd3
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/js/datepicker.js
@@ -0,0 +1,1111 @@
+/*
+ DatePicker v2.5 by frequency-decoder.com (2006/12/01)
+
+ Released under a creative commons Attribution-ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/)
+
+ Please credit frequency-decoder in any derivative work - thanks.
+
+ You are free:
+
+ * to copy, distribute, display, and perform the work
+ * to make derivative works
+ * to make commercial use of the work
+
+ Under the following conditions:
+
+ by Attribution.
+ --------------
+ You must attribute the work in the manner specified by the author or licensor.
+
+ sa
+ --
+ Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.
+
+ * For any reuse or distribution, you must make clear to others the license terms of this work.
+ * Any of these conditions can be waived if you get permission from the copyright holder.
+*/
+var datePickerController;
+
+(function() {
+
+datePicker.isSupported = typeof document.createElement != "undefined" &&
+ typeof document.documentElement != "undefined" &&
+ typeof document.documentElement.offsetWidth == "number";
+
+// Detect the users language
+datePicker.languageinfo = navigator.language ? navigator.language : navigator.userLanguage;
+datePicker.languageinfo = datePicker.languageinfo ? datePicker.languageinfo.toLowerCase().replace(/-[a-z]+$/, "") : 'en';
+
+if(datePicker.languageinfo != 'en') {
+ // Load the appropriate language file
+ var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script');
+ var loc = "";
+
+ for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) {
+ if(scriptFile.src && scriptFile.src.match(/datepicker/)) {
+ loc = scriptFile.src.replace("datepicker", "lang/" + datePicker.languageinfo);
+ break;
+ };
+ };
+
+ if(loc != "") {
+ var script = document.createElement('script');
+ script.type = "text/javascript";
+ script.src = loc;
+ // Hopefully this allows a UTF-8 js file to be imported into a non-UTF HTML document
+ script.setAttribute("charset", "utf-8");
+ document.getElementsByTagName('head')[0].appendChild(script);
+ };
+};
+
+// Defaults for the language should the locale file not load
+datePicker.months = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"];
+datePicker.fullDay = [
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday",
+ "Sunday"];
+datePicker.titles = [
+ "Previous month",
+ "Next month",
+ "Previous year",
+ "Next year"];
+datePicker.daysPerMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
+
+datePicker.getDaysPerMonth = function (nMonth, nYear) {
+ nMonth = (nMonth + 12) % 12;
+ var res = datePicker.daysPerMonth[nMonth];
+ if(((0 == (nYear%4)) && ((0 != (nYear%100)) || (0 == (nYear%400)))) && nMonth == 1) {
+ res = 29;
+ };
+ return res;
+};
+
+function datePicker(options) {
+
+ this.defaults = {};
+
+ for(opt in options) {
+ this[opt] = this.defaults[opt] = options[opt];
+ };
+
+ this.date = new Date();
+ this.yearinc = 1;
+ this.timer = null;
+ this.pause = 1000;
+ this.timerSet = false;
+ this.opacity = 0;
+ this.opacityTo = 0;
+ this.fadeTimer = null;
+ this.interval = new Date();
+ this.firstDayOfWeek = this.defaults.firstDayOfWeek = 0;
+ this.dateSet = null;
+ this.visible = false;
+ this.div;
+ this.table;
+
+ var o = this;
+
+ o.reset = function() {
+ for(def in o.defaults) {
+ o[def] = o.defaults[def];
+ };
+ };
+ o.setOpacity = function(op) {
+ o.div.style.opacity = + op/100;
+ o.div.style.filter = 'alpha(opacity=' + op + ')';
+ o.opacity = op;
+ };
+ o.fade = function() {
+
+ window.clearTimeout(o.fadeTimer);
+ var diff = Math.round(o.opacity + ((o.opacityTo - o.opacity) / 4));
+
+ o.setOpacity(diff);
+
+ if(Math.abs(o.opacityTo - diff) > 3) {
+ o.fadeTimer = window.setTimeout(function () { o.fade(); }, 50);
+ } else {
+ o.setOpacity(o.opacityTo);
+ if(o.opacityTo == 0) o.div.style.display = "none";
+ };
+ };
+ o.killEvent = function(e) {
+ if (e == null) e = document.parentWindow.event;
+
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ /*@cc_on@*/
+ /*@if(@_win32)
+ e.cancelBubble = true;
+ e.returnValue = false;
+ /*@end@*/
+ return false;
+ };
+ o.startTimer = function () {
+ if (o.timerSet) o.stopTimer();
+ o.timer = window.setTimeout(function () { o.onTimer(); }, o.timerInc);
+ o.timerSet = true;
+ };
+ o.stopTimer = function () {
+ if (o.timer != null) window.clearTimeout(o.timer);
+ o.timerSet = false;
+ };
+ o.events = {
+ onkeydown: function (e) {
+
+ if(!o.visible) return false;
+
+ if (e == null) e = document.parentWindow.event;
+ var kc = e.keyCode ? e.keyCode : e.charCode;
+
+ if ( kc == 13 ) {
+ // close with update
+ o.returnFormattedDate();
+ o.hide();
+ return o.killEvent(e);
+ } else if ( kc == 27 ) {
+ // close
+ o.hide();
+ return o.killEvent(e);
+ } else if ( kc == 32 || kc == 0 ) {
+ // close
+ o.date = new Date( );
+ o.updateTable();
+ return o.killEvent(e);
+ };
+
+ // Internet Explorer fires the keydown event faster than the JavaScript engine can
+ // update the interface. The following attempts to fix this.
+
+ /*@cc_on@*/
+ /*@if(@_win32)
+ if(new Date().getTime() - o.interval.getTime() < 100) return o.killEvent(e);
+ o.interval = new Date();
+ /*@end@*/
+
+ if ((kc > 49 && kc < 56) || (kc > 97 && kc < 104)) {
+ if (kc > 96) kc -= (96-48);
+ kc -= 49;
+ o.firstDayOfWeek = (o.firstDayOfWeek + kc) % 7;
+ o.updateTable();
+ return o.killEvent(e);
+ };
+
+ if ( kc < 37 || kc > 40 ) return true;
+
+ var d = new Date( o.date ).valueOf();
+
+ if ( kc == 37 ) {
+ // ctrl + left = previous month
+ if( e.ctrlKey ) {
+ d = new Date( o.date );
+ d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() - 1,d.getFullYear())) ); // no need to catch dec -> jan for the year
+ d.setMonth( d.getMonth() - 1 );
+ } else {
+ d -= 24 * 60 * 60 * 1000;
+ };
+ } else if ( kc == 39 ) {
+ // ctrl + right = next month
+ if( e.ctrlKey ) {
+ d = new Date( o.date );
+ d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth() + 1,d.getFullYear())) ); // no need to catch dec -> jan for the year
+ d.setMonth( d.getMonth() + 1 );
+ } else {
+ d += 24 * 60 * 60 * 1000;
+ };
+ } else if ( kc == 38 ) {
+ // ctrl + up = next year
+ if( e.ctrlKey ) {
+ d = new Date( o.date );
+ d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() + 1)) ); // no need to catch dec -> jan for the year
+ d.setFullYear( d.getFullYear() + 1 );
+ } else {
+ d -= 7 * 24 * 60 * 60 * 1000;
+ };
+ } else if ( kc == 40 ) {
+ // ctrl + down = prev year
+ if( e.ctrlKey ) {
+ d = new Date( o.date );
+ d.setDate( Math.min(d.getDate(), datePicker.getDaysPerMonth(d.getMonth(),d.getFullYear() - 1)) ); // no need to catch dec -> jan for the year
+ d.setFullYear( d.getFullYear() - 1 );
+ } else {
+ d += 7 * 24 * 60 * 60 * 1000;
+ };
+ };
+
+ var tmpDate = new Date( d );
+ if(!o.outOfRange(tmpDate)) {
+ o.date = tmpDate;
+ };
+
+ o.updateTable();
+
+ return o.killEvent(e);
+ },
+ onmousedown: function(e) {
+ if ( e == null ) e = document.parentWindow.event;
+ var el = e.target != null ? e.target : e.srcElement;
+
+ var found = false;
+
+ while(el.parentNode) {
+ if(el.id && (el.id == "fd-"+o.id || el.id == "fd-but-"+o.id)) {
+ found = true;
+ break;
+ }
+ try {
+ el = el.parentNode;
+ } catch(err) {
+ break;
+ }
+ }
+ if(found) return true;
+ datePickerController.hideAll();
+ },
+ onmouseover: function(e) {
+ if(document.getElementById("date-picker-hover")) {
+ document.getElementById("date-picker-hover").id = "";
+ };
+
+ this.id = "date-picker-hover";
+
+ o.date.setDate(this.firstChild.nodeValue);
+ },
+ onclick: function (e) {
+ if(o.opacity != o.opacityTo) return false;
+ if ( e == null ) e = document.parentWindow.event;
+ var el = e.target != null ? e.target : e.srcElement;
+ while ( el.nodeType != 1 ) el = el.parentNode;
+
+ var d = new Date( o.date );
+ var n = Number( el.firstChild.data );
+
+ if(isNaN(n)) { return true; };
+
+ d.setDate( n );
+ o.date = d;
+
+ o.returnFormattedDate();
+ o.hide();
+ return o.killEvent(e);
+ },
+ incDec:function(e) {
+ if(o.timerSet) {
+ o.stopTimer();
+ };
+
+ datePickerController.addEvent(document, "mouseup", o.events.clearTimer);
+
+ o.timerInc = 1000;
+ o.dayInc = arguments[1];
+ o.yearInc = arguments[2];
+ o.monthInc = arguments[3];
+ o.onTimer();
+ return o.killEvent(e);
+ },
+ clearTimer:function() {
+ o.stopped = true;
+ o.timerInc = 1000;
+ o.yearInc = 0;
+ o.monthInc = 0;
+ o.dayInc = 0;
+ try {
+ datePickerController.removeEvent(document, "mouseup", o.events.clearTimer);
+ } catch(e) { };
+ o.stopTimer();
+ }
+ };
+ o.onTimer = function() {
+ var d = new Date( o.date );
+
+ d.setDate( Math.min(d.getDate()+o.dayInc, datePicker.getDaysPerMonth(d.getMonth()+o.monthInc,d.getFullYear()+o.yearInc)) ); // no need to catch dec -> jan for the year
+ d.setMonth( d.getMonth() + o.monthInc );
+ d.setFullYear( d.getFullYear() + o.yearInc );
+
+ o.date = d;
+
+ if(o.timerInc > 50) {
+ o.timerInc = 50 + Math.round(((o.timerInc - 50) / 1.8));
+ };
+ o.startTimer();
+ o.updateTable();
+ };
+ o.getElem = function() {
+ return document.getElementById(o.id.replace(/^fd-/, '')) || false;
+ };
+ o.setRangeLow = function(range) {
+ if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = '';
+ o.low = o.defaults.low = range;
+ };
+ o.setRangeHigh = function(range) {
+ if(String(range).search(/^(\d\d?\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) range = '';
+ o.high = o.defaults.high = range;
+ };
+ o.setDisabledDays = function(dayArray) {
+ o.disableDays = o.defaults.disableDays = dayArray;
+ };
+ o.setFirstDayOfWeek = function(e) {
+ if ( e == null ) e = document.parentWindow.event;
+ var elem = e.target != null ? e.target : e.srcElement;
+
+ if(elem.tagName.toLowerCase() != "th") {
+ while(elem.tagName.toLowerCase() != "th") elem = elem.parentNode;
+ }
+
+ var cnt = 0;
+
+ while(elem.previousSibling) {
+ elem = elem.previousSibling;
+ if(elem.tagName.toLowerCase() == "th") cnt++;
+ }
+
+ o.firstDayOfWeek = (o.firstDayOfWeek + cnt) % 7;
+ o.updateTable();
+
+ return o.killEvent(e);
+ };
+ o.trueBody = function() {
+ return;
+ };
+ o.resize = function() {
+ if(!o.created || !o.getElem()) return;
+
+ o.div.style.visibility = "hidden";
+ o.div.style.display = "block";
+
+ var osh = o.div.offsetHeight;
+ var osw = o.div.offsetWidth;
+
+ o.div.style.visibility = "visible";
+ o.div.style.display = "none";
+
+ var elem = document.getElementById('fd-but-' + o.id);
+ var pos = datePickerController.findPosition(elem);
+ var trueBody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
+
+ if ( parseInt(trueBody.clientWidth+trueBody.scrollLeft) < parseInt(osw+pos[0])) {
+ o.div.style.left = Math.abs(parseInt((trueBody.clientWidth+trueBody.scrollLeft) - osw)) + "px";
+ } else {
+ o.div.style.left = pos[0] + "px";
+ };
+
+ if ( parseInt(trueBody.clientHeight+trueBody.scrollTop) < parseInt(osh+pos[1]+elem.offsetHeight+2)) {
+ o.div.style.top = Math.abs(parseInt(pos[1] - (osh + 2))) + "px";
+ } else {
+ o.div.style.top = Math.abs(parseInt(pos[1] + elem.offsetHeight + 2)) + "px";
+ };
+ };
+ o.equaliseDates = function() {
+ var clearDayFound = false;
+ var tmpDate;
+ for(var i = o.low; i <= o.high; i++) {
+ tmpDate = String(i);
+ if(!o.disableDays[new Date(tmpDate.substr(4,2) + '/' + tmpDate.substr(6,2) + '/' + tmpDate.substr(0,4)).getDay() - 1]) {
+ clearDayFound = true;
+ break;
+ };
+ };
+ if(!clearDayFound) o.disableDays = o.defaults.disableDays = [0,0,0,0,0,0,0];
+ };
+ o.outOfRange = function(tmpDate) {
+ if(!o.low && !o.high) return false;
+
+ var level = false;
+ if(!tmpDate) {
+ level = true;
+ tmpDate = o.date;
+ };
+
+ var d = (tmpDate.getDate() < 10) ? "0" + tmpDate.getDate() : tmpDate.getDate();
+ var m = ((tmpDate.getMonth() + 1) < 10) ? "0" + (tmpDate.getMonth() + 1) : tmpDate.getMonth() + 1;
+ var y = tmpDate.getFullYear();
+ var dt = (y+' '+m+' '+d).replace(/ /g,'');
+
+ if(o.low) {
+ if(parseInt(dt) < parseInt(o.low)) {
+ if(!level) return true;
+ o.date = new Date( o.low.substr(4,2) + '/' + o.low.substr(6,2) + '/' + o.low.substr(0,4) );
+ return false;
+ };
+ };
+ if(o.high) {
+ if(parseInt(dt) > parseInt(o.high)) {
+ if(!level) return true;
+ o.date = new Date( o.high.substr(4,2) + '/' + o.high.substr(6,2) + '/' + o.high.substr(0,4) );
+ };
+ };
+ return false;
+ };
+ o.create = function() {
+
+ /*@cc_on@*/
+ /*@if(@_jscript_version <= 5.6)
+ if(!document.getElementById("iePopUpHack")) {
+ var loc = "./blank.html";
+ var scriptFiles = document.getElementsByTagName('head')[0].getElementsByTagName('script');
+ for(var i = 0, scriptFile; scriptFile = scriptFiles[i]; i++) {
+ if(scriptFile.src && scriptFile.src.match(/datepicker.js$/)) {
+ loc = scriptFile.src.replace("datepicker.js", "blank.html");
+ break;
+ };
+ };
+
+ o.iePopUp = document.createElement('iframe');
+ o.iePopUp.src = loc;
+ o.iePopUp.setAttribute('className','iehack');
+ o.iePopUp.scrolling="no";
+ o.iePopUp.frameBorder="0";
+ o.iePopUp.name = o.iePopUp.id = "iePopUpHack";
+ document.body.appendChild(o.iePopUp);
+ } else {
+ o.iePopUp = document.getElementById("iePopUpHack");
+ };
+ /*@end@*/
+
+ if(typeof(fdLocale) == "object" && o.locale) {
+ datePicker.titles = fdLocale.titles;
+ datePicker.months = fdLocale.months;
+ datePicker.fullDay = fdLocale.fullDay;
+ // Optional parameters
+ if(fdLocale.dayAbbr) datePicker.dayAbbr = fdLocale.dayAbbr;
+ if(fdLocale.firstDayOfWeek) o.firstDayOfWeek = o.defaults.firstDayOfWeek = fdLocale.firstDayOfWeek;
+ };
+
+ o.div = document.createElement('div');
+ o.div.style.zIndex = 9999;
+ o.div.id = "fd-"+o.id;
+ var tableBody = document.createElement('tbody');
+ var tableHead = document.createElement('thead');
+ var nbsp = String.fromCharCode( 160 );
+
+ o.table = document.createElement('table');
+ o.div.className = "datePicker";
+
+ var tr = document.createElement('tr');
+ var th = document.createElement('th');
+
+ // previous year
+ var tmpelem = document.createElement('button');
+ tmpelem.setAttribute("type", "button");
+ tmpelem.className = "prev-but";
+ tmpelem.appendChild(document.createTextNode('\u00AB'));
+ tmpelem.title = datePicker.titles[2];
+ tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,-1,0); };
+ tmpelem.onmouseup = o.events.clearTimer;
+ th.appendChild( tmpelem );
+
+ // previous month
+ var tmpelem = document.createElement('button');
+ tmpelem.setAttribute("type", "button");
+ tmpelem.className = "prev-but";
+ tmpelem.appendChild(document.createTextNode("\u2039"));
+ tmpelem.title = datePicker.titles[0];
+ tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,-1); };
+ tmpelem.onmouseup = o.events.clearTimer;
+ th.appendChild( tmpelem );
+ tr.appendChild( th );
+
+ // title bar
+ o.titleBar = document.createElement('th');
+
+ /*@cc_on
+ /*@if (@_win32)
+ o.titleBar.setAttribute('colSpan','5');
+ @else @*/
+ o.titleBar.setAttribute('colspan','5');
+ /*@end
+ @*/
+
+ o.titleBar.setAttribute('text-align','center');
+ tr.appendChild( o.titleBar );
+
+ th = document.createElement('th');
+
+ // next month
+ var tmpelem = document.createElement('button');
+ tmpelem.setAttribute("type", "button");
+ tmpelem.className = "next-but";
+ tmpelem.appendChild(document.createTextNode('\u203A'));
+ tmpelem.title = datePicker.titles[1];
+ tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,0,1); };
+ tmpelem.onmouseup = o.events.clearTimer;
+
+ th.appendChild( tmpelem );
+
+ // next year
+ var tmpelem = document.createElement('button');
+ tmpelem.setAttribute("type", "button");
+ tmpelem.className = "next-but";
+ tmpelem.appendChild(document.createTextNode('\u00BB'));
+ tmpelem.title = datePicker.titles[3];
+ tmpelem.onmousedown = function(e) { this.blur(); o.events.incDec(e,0,1,0); };
+ tmpelem.onmouseup = o.events.clearTimer;
+ th.appendChild( tmpelem );
+
+ tr.appendChild( th );
+
+ tableHead.appendChild(tr);
+
+ var row, col;
+
+ for(var rows = 0; rows < 7; rows++) {
+ row = document.createElement('tr');
+ for(var cols = 0; cols < 7; cols++) {
+ col = (rows == 0) ? document.createElement('th') : document.createElement('td');
+ if(rows != 0) {
+ col.appendChild(document.createTextNode(nbsp));
+ } else {
+ col.className = "date-picker-day-header";
+ col.scope = "col";
+ };
+
+ row.appendChild(col);
+ }
+ if(rows != 0) tableBody.appendChild(row);
+ else tableHead.appendChild(row);
+ };
+ o.table.appendChild( tableHead );
+ o.table.appendChild( tableBody );
+
+ o.div.appendChild( o.table );
+ o.created = true;
+
+ document.getElementsByTagName('body')[0].appendChild( o.div );
+ };
+ o.setDateFromInput = function() {
+ o.dateSet = null;
+
+ var elem = o.getElem();
+ if(!elem) return;
+
+ var date = elem.value;
+
+ var d,m,y,dt,dates;
+
+ d = o.format.replace(/-/g,'').indexOf('d');
+ m = o.format.replace(/-/g,'').indexOf('m');
+ y = o.format.replace(/-/g,'').indexOf('y');
+
+ if(o.splitDate) {
+ dates = [];
+
+ dates[m] = document.getElementById(o.id+'-mm').value;
+ if(dates[m] < 1 || dates[m] > 12) dates[m] = "";
+
+ dates[d] = document.getElementById(o.id+'-dd').value;
+ if(dates[d] < 1 || dates[d] > datePicker.daysPerMonth[dates[m]-1]) dates[d] = "";
+
+ dates[y] = date;
+ } else {
+ if(date.match(/^[0-9]{4}$/)) {
+ if(date > 1600 && date < 2030) {
+ o.date.setFullYear(date);
+ return;
+ };
+ };
+
+ dates = date.split(o.divider);
+
+ if(dates.length != 3) {
+ o.date = new Date();
+ return;
+ };
+ };
+
+ var check = new Date( dates[y] + "/" + dates[m] + "/" + dates[d] );
+ if(check == 'Invalid Date' /*@cc_on@*/ /*@if(@_win32) || check == 'NaN' /*@end@*/) {
+ o.date = new Date();
+ return;
+ };
+
+ o.date.setMonth(dates[m]-1);
+ o.date.setFullYear(dates[y]);
+ o.date.setDate(dates[d]);
+
+ o.dateSet = new Date(o.date);
+ };
+ o.returnFormattedDate = function() {
+ var elem = o.getElem();
+ if(!elem) return;
+
+ var d = (o.date.getDate() < 10) ? "0" + o.date.getDate() : o.date.getDate();
+ var m = ((o.date.getMonth() + 1) < 10) ? "0" + (o.date.getMonth() + 1) : o.date.getMonth() + 1;
+ var yyyy = o.date.getFullYear();
+
+ var weekDay = ( o.date.getDay() + 6 ) % 7;
+
+ if(!(o.disableDays[weekDay])) {
+ if(o.splitDate) {
+ document.getElementById(o.id+"-dd").value = d;
+ document.getElementById(o.id+"-mm").value = m;
+ elem.value = yyyy;
+
+ document.getElementById(o.id+"-dd").focus();
+ if(document.getElementById(o.id+"-dd").onchange) document.getElementById(o.id+"-dd").onchange();
+ if(document.getElementById(o.id+"-mm").onchange) document.getElementById(o.id+"-mm").onchange();
+ } else {
+ elem.value = o.format.replace('y',yyyy).replace('m',m).replace('d',d).replace(/-/g,o.divider);
+ elem.focus();
+ };
+ if(elem.onchange) elem.onchange();
+ };
+ };
+ // Credit where credit's due:
+
+ // Most of the logic for this method from the webfx date-picker
+ // http://webfx.eae.net/
+
+ o.updateTable = function() {
+
+ if(document.getElementById("date-picker-hover")) {
+ document.getElementById("date-picker-hover").id = "";
+ };
+
+ var i;
+ var str = "";
+ var rows = 6;
+ var cols = 7;
+ var currentWeek = 0;
+ var nbsp = String.fromCharCode( 160 );
+
+ var cells = new Array( rows );
+
+ for ( i = 0; i < rows; i++ ) {
+ cells[i] = new Array( cols );
+ };
+
+ o.outOfRange();
+
+ // Set the tmpDate to this month
+ var tmpDate = new Date( o.date.getFullYear(), o.date.getMonth(), 1 );
+ var today = new Date();
+
+ // titleBar
+ var titleText = datePicker.months[o.date.getMonth()] + nbsp + o.date.getFullYear();
+ while(o.titleBar.firstChild) o.titleBar.removeChild(o.titleBar.firstChild);
+ o.titleBar.appendChild(document.createTextNode(titleText));
+
+ for ( i = 1; i < 32; i++ ) {
+
+ tmpDate.setDate( i );
+ var weekDay = ( tmpDate.getDay() + 6 ) % 7;
+ var colIndex = ( (weekDay - o.firstDayOfWeek) + 7 ) % 7;
+ var cell = { text:"", className:"", id:"" };
+
+ if ( tmpDate.getMonth() == o.date.getMonth() ) {
+
+ cells[currentWeek][colIndex] = { text:"", className:"", id:"" };
+
+ var isToday = tmpDate.getDate() == today.getDate() &&
+ tmpDate.getMonth() == today.getMonth() &&
+ tmpDate.getFullYear() == today.getFullYear();
+
+ if ( o.dateSet != null && o.dateSet.getDate() == tmpDate.getDate() && o.dateSet.getMonth() == tmpDate.getMonth() && o.dateSet.getFullYear() == tmpDate.getFullYear()) {
+ cells[currentWeek][colIndex].className = "date-picker-selected-date";
+ };
+ if ( o.date.getDate() == tmpDate.getDate() && o.date.getFullYear() == tmpDate.getFullYear()) {
+ cells[currentWeek][colIndex].id = "date-picker-hover";
+ };
+
+ if(o.highlightDays[weekDay]) {
+ cells[currentWeek][colIndex].className += " date-picker-highlight";
+ };
+ if ( isToday ) {
+ cells[currentWeek][colIndex].className = "date-picker-today";
+ };
+ if(o.outOfRange(tmpDate)) {
+ cells[currentWeek][colIndex].className = "out-of-range";
+ } else if(o.disableDays[weekDay]) {
+ cells[currentWeek][colIndex].className = "day-disabled";
+ };
+ cells[currentWeek][colIndex].text = tmpDate.getDate();
+ if ( colIndex == 6 ) currentWeek++;
+ };
+ };
+
+ // Table headers
+ var lnk, d;
+ var ths = o.table.getElementsByTagName('thead')[0].getElementsByTagName('tr')[1].getElementsByTagName('th');
+ for ( var y = 0; y < 7; y++ ) {
+ d = (o.firstDayOfWeek + y) % 7;
+
+ while(ths[y].firstChild) ths[y].removeChild(ths[y].firstChild);
+
+ ths[y].title = datePicker.fullDay[d];
+
+ // Don't create a button for the first day header
+ if(y > 0) {
+ but = document.createElement("BUTTON");
+ but.className = "fd-day-header";
+ but.onclick = but.onkeypress = ths[y].onclick = o.setFirstDayOfWeek;
+ but.appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0)));
+ ths[y].appendChild(but);
+ but.title = datePicker.fullDay[d];
+ } else {
+ ths[y].appendChild(document.createTextNode(datePicker.dayAbbr ? datePicker.dayAbbr[d] : datePicker.fullDay[d].charAt(0)));
+ ths[y].onclick = null;
+ };
+ };
+
+
+ var trs = o.table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
+
+ var tmpCell;
+
+ for ( var y = 0; y < rows; y++ ) {
+ var tds = trs[y].getElementsByTagName('td');
+ for (var x = 0; x < cols; x++) {
+ tmpCell = tds[x];
+
+ while(tmpCell.firstChild) tmpCell.removeChild(tmpCell.firstChild);
+
+ if ( typeof cells[y][x] != "undefined" ) {
+ tmpCell.className = cells[y][x].className;
+ tmpCell.id = cells[y][x].id;
+
+ tmpCell.appendChild(document.createTextNode(cells[y][x].text));
+
+ if(cells[y][x].className != "out-of-range") {
+ tmpCell.onmouseover = o.events.onmouseover;
+ tmpCell.onclick = cells[y][x].className == "day-disabled" ? o.killEvent : o.events.onclick;
+ tmpCell.title = datePicker.months[o.date.getMonth()] + nbsp + cells[y][x].text + "," + nbsp + o.date.getFullYear();
+ } else {
+ tmpCell.onmouseover = null;
+ tmpCell.onclick = o.killEvent;
+ tmpCell.title = "";
+ };
+ } else {
+ tmpCell.className = "";
+ tmpCell.id = "";
+ tmpCell.onmouseover = null;
+ tmpCell.onclick = function(e) { return o.killEvent(e); };
+ tmpCell.appendChild(document.createTextNode(nbsp));
+ tmpCell.title = "";
+ };
+ };
+ };
+ };
+ o.init = function() {
+ if(o.low && o.high && (o.high - o.low < 7)) {
+ o.equaliseDates();
+ };
+ o.resize();
+ o.setDateFromInput();
+ o.fade();
+ o.ieHack(true);
+ };
+ o.ieHack = function(cleanup) {
+ // IE hack
+ if(o.iePopUp) {
+ o.iePopUp.style.display = "block";
+ o.iePopUp.style.top = (o.div.offsetTop + 2) + "px";
+ o.iePopUp.style.left = o.div.offsetLeft + "px";
+ o.iePopUp.style.width = o.div.clientWidth + "px";
+ o.iePopUp.style.height = (o.div.clientHeight - 2) + "px";
+ if(cleanup) o.iePopUp.style.display = "none";
+ }
+ };
+ o.show = function() {
+ var elem = o.getElem();
+ if(!elem || o.visible || elem.disabled) return;
+
+ o.reset();
+ o.setDateFromInput();
+ o.updateTable();
+ o.resize();
+ o.ieHack(false);
+
+ datePickerController.addEvent(document, "mousedown", o.events.onmousedown);
+ datePickerController.addEvent(document, "keypress", o.events.onkeydown);
+
+ // Internet Explorer requires the keydown event in order to catch arrow keys
+
+ /*@cc_on@*/
+ /*@if(@_win32)
+ datePickerController.removeEvent(document, "keypress", o.events.onkeydown);
+ datePickerController.addEvent(document, "keydown", o.events.onkeydown);
+ /*@end@*/
+
+ o.opacityTo = 90;
+ o.div.style.display = "block";
+ o.ieHack(false);
+ o.fade();
+ o.visible = true;
+
+ };
+ o.hide = function() {
+ try {
+ datePickerController.removeEvent(document, "mousedown", o.events.onmousedown);
+ datePickerController.removeEvent(document, "keypress", o.events.onkeydown);
+ datePickerController.removeEvent(document, "keydown", o.events.onkeydown);
+ } catch(e) {
+
+ };
+ if(o.iePopUp) {
+ o.iePopUp.style.display = "none";
+ };
+ o.opacityTo = 0;
+ o.fade();
+ o.visible = false;
+ };
+ o.create();
+ o.init();
+};
+
+datePickerController = {
+ datePickers: {},
+ addEvent: function(obj, type, fn, tmp) {
+ tmp || (tmp = true);
+ if( obj.attachEvent ) {
+ obj["e"+type+fn] = fn;
+ obj[type+fn] = function(){obj["e"+type+fn]( window.event );};
+ obj.attachEvent( "on"+type, obj[type+fn] );
+ } else {
+ obj.addEventListener( type, fn, true );
+ };
+ },
+ removeEvent: function(obj, type, fn, tmp) {
+ tmp || (tmp = true);
+ if( obj.detachEvent ) {
+ obj.detachEvent( "on"+type, obj[type+fn] );
+ obj[type+fn] = null;
+ } else {
+ obj.removeEventListener( type, fn, true );
+ };
+ },
+ findPosition: function(obj) {
+ var curleft = 0;
+ var curtop = 0;
+ var orig = obj;
+
+ if(obj.offsetParent) {
+ while(obj.offsetParent) {
+ curleft += obj.offsetLeft;
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ };
+ } else if (obj.x) {
+ curleft += obj.x;
+ curtop += obj.y;
+ };
+ return [ curleft, curtop ];
+ },
+ hideAll: function(exception) {
+ for(dp in datePickerController.datePickers) {
+ if(exception && exception == datePickerController.datePickers[dp].id) continue;
+ datePickerController.datePickers[dp].hide();
+ };
+ },
+ cleanUp: function() {
+ var dp;
+ for(dp in datePickerController.datePickers) {
+ if(!document.getElementById(datePickerController.datePickers[dp].id)) {
+ dpElem = document.getElementById("fd-"+datePickerController.datePickers[dp].id);
+ if(dpElem) {
+ dpElem.parentNode.removeChild(dpElem);
+ };
+ datePickerController.datePickers[dp] = null;
+ delete datePickerController.datePickers[dp];
+ };
+ };
+ },
+ dateFormat: function(dateIn, favourMDY) {
+ var dateTest = [
+ { regExp:/^(0[1-9]|[12][0-9]|3[01])([- \/.])(0[1-9]|1[012])([- \/.])(\d\d?\d\d)$/, d:1, m:3, y:5 }, // dmy
+ { regExp:/^(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])([- \/.])(\d\d?\d\d)$/, d:3, m:1, y:5 }, // mdy
+ { regExp:/^(\d\d?\d\d)([- \/.])(0[1-9]|1[012])([- \/.])(0[1-9]|[12][0-9]|3[01])$/, d:5, m:3, y:1 } // ymd
+ ];
+
+ var start;
+ var cnt = 0;
+
+ while(cnt < 3) {
+ start = (cnt + (favourMDY ? 4 : 3)) % 3;
+
+ if(dateIn.match(dateTest[start].regExp)) {
+ res = dateIn.match(dateTest[start].regExp);
+ y = res[dateTest[start].y];
+ m = res[dateTest[start].m];
+ d = res[dateTest[start].d];
+ if(m.length == 1) m = "0" + m;
+ if(d.length == 1) d = "0" + d;
+ if(y.length != 4) y = (parseInt(y) < 50) ? '20' + y : '19' + y;
+
+ return y+m+d;
+ };
+
+ cnt++;
+ };
+
+ return 0;
+ },
+ create: function() {
+ if(!datePicker.isSupported) return;
+
+ datePickerController.cleanUp();
+
+ var inputs = document.getElementsByTagName('input');
+
+ var regExp1 = /disable-days-([1-7]){1,6}/g; // the days to disable
+ var regExp3 = /highlight-days-([1-7]){1,7}/g; // the days to highlight in red
+ var regExp4 = /range-low-([0-9\-]){10}/g; // the lowest selectable date
+ var regExp5 = /range-high-([0-9\-]){10}/g; // the highest selectable date
+ var regExp6 = /format-([dmy\-]{5})/g; // the input/output date format
+ var regExp7 = /divider-(dot|slash|space|dash)/g; // the character used to divide the date
+ var regExp8 = /no-locale/g; // do not attempt to detect the browser language
+
+ for(var i=0, inp; inp = inputs[i]; i++) {
+ if(inp.className && (inp.className.search(regExp6) != -1 || inp.className.search(/split-date/) != -1) && inp.type == "text" && inp.name) {
+
+ if(!inp.id) {
+ // Internet explorer requires you to give each input a unique ID attribute.
+ if(document.getElementById(inp.name)) continue;
+ inp.id = inp.name;
+ };
+
+ var options = {
+ id:inp.id,
+ low:"",
+ high:"",
+ divider:"/",
+ format:"d-m-y",
+ highlightDays:[0,0,0,0,0,1,1],
+ disableDays:[0,0,0,0,0,0,0],
+ locale:inp.className.search(regExp8) == -1,
+ splitDate:0
+ };
+
+ // Split the date into three parts ?
+ if(inp.className.search(/split-date/) != -1) {
+ if(document.getElementById(inp.id+'-dd') && document.getElementById(inp.id+'-mm') && document.getElementById(inp.id+'-dd').tagName.toLowerCase() == "input" && document.getElementById(inp.id+'-mm').tagName.toLowerCase() == "input") {
+ options.splitDate = 1;
+ };
+ };
+
+ // Date format(variations of d-m-y)
+ if(inp.className.search(regExp6) != -1) {
+ options.format = inp.className.match(regExp6)[0].replace('format-','');
+ };
+
+ // What divider to use, a "/", "-", "." or " "
+ if(inp.className.search(regExp7) != -1) {
+ var divider = inp.className.match(regExp7)[0].replace('divider-','');
+ switch(divider.toLowerCase()) {
+ case "dot":
+ options.divider = ".";
+ break;
+ case "space":
+ options.divider = " ";
+ break;
+ case "dash":
+ options.divider = "-";
+ break;
+ default:
+ options.divider = "/";
+ };
+ };
+
+ // The days to highlight
+ if(inp.className.search(regExp3) != -1) {
+ var tmp = inp.className.match(regExp3)[0].replace(/highlight-days-/, '');
+ options.highlightDays = [0,0,0,0,0,0,0];
+ for(var j = 0; j < tmp.length; j++) {
+ options.highlightDays[tmp.charAt(j) - 1] = 1;
+ };
+ };
+
+ // The days to disable
+ if(inp.className.search(regExp1) != -1) {
+ var tmp = inp.className.match(regExp1)[0].replace(/disable-days-/, '');
+ options.disableDays = [0,0,0,0,0,0,0];
+ for(var j = 0; j < tmp.length; j++) {
+ options.disableDays[tmp.charAt(j) - 1] = 1;
+ };
+ };
+
+ // The lower limit
+ if(inp.className.search(regExp4) != -1) {
+ options.low = datePickerController.dateFormat(inp.className.match(regExp4)[0].replace(/range-low-/, ''), options.format.charAt(0) == "m");
+ if(options.low == 0) {
+ options.low = '';
+ };
+ };
+
+ // The higher limit
+ if(inp.className.search(regExp5) != -1) {
+ options.high = datePickerController.dateFormat(inp.className.match(regExp5)[0].replace(/range-high-/, ''), options.format.charAt(0) == "m");
+ if(options.high == 0) {
+ options.high = '';
+ };
+ };
+
+ // Datepicker is already created so reset it's defaults
+ if(document.getElementById('fd-'+inp.id)) {
+ for(var opt in options) {
+ datePickerController.datePickers[inp.id].defaults[opt] = options[opt];
+ };
+ };
+
+ // Create the button (if needs be)
+ if(!document.getElementById("fd-but-" + inp.id)) {
+ var but = document.createElement('button');
+ but.setAttribute("type", "button");
+ but.className = "date-picker-control";
+
+ but.id = "fd-but-" + inp.id;
+ but.appendChild(document.createTextNode(String.fromCharCode( 160 )));
+
+ if(inp.nextSibling) {
+ inp.parentNode.insertBefore(but, inp.nextSibling);
+ } else {
+ inp.parentNode.appendChild(but);
+ };
+
+ } else {
+ var but = document.getElementById("fd-but-" + inp.id);
+ };
+
+ // Add button events
+ but.onclick = but.onpress = function() {
+ var inpId = this.id.replace('fd-but-','');
+
+ datePickerController.hideAll(inpId);
+ if(inpId in datePickerController.datePickers && !datePickerController.datePickers[inpId].visible) {
+ datePickerController.datePickers[inpId].show();
+ };
+ return false;
+ };
+
+ // Create the datePicker (if needs be)
+ if(!document.getElementById('fd-'+inp.id)) {
+ datePickerController.datePickers[inp.id] = new datePicker(options);
+ };
+ };
+ };
+ }
+
+};
+
+
+})();
+
+datePickerController.addEvent(window, 'load', datePickerController.create);
+
diff --git a/src/usr/local/www/javascript/datepicker/media/bg_header.jpg b/src/usr/local/www/javascript/datepicker/media/bg_header.jpg
new file mode 100755
index 0000000..10dbd74
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/media/bg_header.jpg
Binary files differ
diff --git a/src/usr/local/www/javascript/datepicker/media/bullet1.gif b/src/usr/local/www/javascript/datepicker/media/bullet1.gif
new file mode 100755
index 0000000..ae352c2
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/media/bullet1.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/datepicker/media/bullet2.gif b/src/usr/local/www/javascript/datepicker/media/bullet2.gif
new file mode 100755
index 0000000..04b293d
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/media/bullet2.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/datepicker/media/cal.gif b/src/usr/local/www/javascript/datepicker/media/cal.gif
new file mode 100755
index 0000000..8526cf5
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/media/cal.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif b/src/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif
new file mode 100755
index 0000000..72a0d3e
--- /dev/null
+++ b/src/usr/local/www/javascript/datepicker/media/gradient-e5e5e5-ffffff.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/domTT/LICENSE b/src/usr/local/www/javascript/domTT/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/src/usr/local/www/javascript/domTT/LICENSE
@@ -0,0 +1,202 @@
+
+ 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/src/usr/local/www/javascript/domTT/behaviour.js b/src/usr/local/www/javascript/domTT/behaviour.js
new file mode 100644
index 0000000..21b28d7
--- /dev/null
+++ b/src/usr/local/www/javascript/domTT/behaviour.js
@@ -0,0 +1,254 @@
+/*
+ Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work
+ of Simon Willison (see comments by Simon below).
+
+ Description:
+
+ Uses css selectors to apply javascript behaviours to enable
+ unobtrusive javascript in html documents.
+
+ Usage:
+
+ var myrules = {
+ 'b.someclass' : function(element){
+ element.onclick = function(){
+ alert(this.innerHTML);
+ }
+ },
+ '#someid u' : function(element){
+ element.onmouseover = function(){
+ this.innerHTML = "BLAH!";
+ }
+ }
+ };
+
+ Behaviour.register(myrules);
+
+ // Call Behaviour.apply() to re-apply the rules (if you
+ // update the dom, etc).
+
+ License:
+
+ This file is entirely BSD licensed.
+
+ More information:
+
+ http://ripcord.co.nz/behaviour/
+
+*/
+
+var Behaviour = {
+ list : new Array,
+
+ register : function(sheet){
+ Behaviour.list.push(sheet);
+ },
+
+ start : function(){
+ Behaviour.addLoadEvent(function(){
+ Behaviour.apply();
+ });
+ },
+
+ apply : function(){
+ for (h=0;sheet=Behaviour.list[h];h++){
+ for (selector in sheet){
+ list = document.getElementsBySelector(selector);
+
+ if (!list){
+ continue;
+ }
+
+ for (i=0;element=list[i];i++){
+ sheet[selector](element);
+ }
+ }
+ }
+ },
+
+ addLoadEvent : function(func){
+ var oldonload = window.onload;
+
+ if (typeof window.onload != 'function') {
+ window.onload = func;
+ } else {
+ window.onload = function() {
+ oldonload();
+ func();
+ };
+ }
+ }
+};
+
+Behaviour.start();
+
+/*
+ The following code is Copyright (C) Simon Willison 2004.
+
+ document.getElementsBySelector(selector)
+ - returns an array of element objects from the current document
+ matching the CSS selector. Selectors can contain element names,
+ class names and ids and can be nested. For example:
+
+ elements = document.getElementsBySelect('div#main p a.external')
+
+ Will return an array of all 'a' elements with 'external' in their
+ class attribute that are contained inside 'p' elements that are
+ contained inside the 'div' element which has id="main"
+
+ New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
+ See http://www.w3.org/TR/css3-selectors/#attribute-selectors
+
+ Version 0.4 - Simon Willison, March 25th 2003
+ -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
+ -- Opera 7 fails
+*/
+
+function getAllChildren(e) {
+ // Returns all children of element. Workaround required for IE5/Windows. Ugh.
+ return e.all ? e.all : e.getElementsByTagName('*');
+}
+
+document.getElementsBySelector = function(selector) {
+ // Attempt to fail gracefully in lesser browsers
+ if (!document.getElementsByTagName) {
+ return new Array();
+ }
+ // Split selector in to tokens
+ var tokens = selector.split(' ');
+ var currentContext = new Array(document);
+ for (var i = 0; i < tokens.length; i++) {
+ token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
+ if (token.indexOf('#') > -1) {
+ // Token is an ID selector
+ var bits = token.split('#');
+ var tagName = bits[0];
+ var id = bits[1];
+ var element = document.getElementById(id);
+ if (tagName && element.nodeName.toLowerCase() != tagName) {
+ // tag with that ID not found, return false
+ return new Array();
+ }
+ // Set currentContext to contain just this element
+ currentContext = new Array(element);
+ continue; // Skip to next token
+ }
+ if (token.indexOf('.') > -1) {
+ // Token contains a class selector
+ var bits = token.split('.');
+ var tagName = bits[0];
+ var className = bits[1];
+ if (!tagName) {
+ tagName = '*';
+ }
+ // Get elements matching tag, filter them for class selector
+ var found = new Array;
+ var foundCount = 0;
+ for (var h = 0; h < currentContext.length; h++) {
+ var elements;
+ if (tagName == '*') {
+ elements = getAllChildren(currentContext[h]);
+ } else {
+ elements = currentContext[h].getElementsByTagName(tagName);
+ }
+ for (var j = 0; j < elements.length; j++) {
+ found[foundCount++] = elements[j];
+ }
+ }
+ currentContext = new Array;
+ var currentContextIndex = 0;
+ for (var k = 0; k < found.length; k++) {
+ if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
+ currentContext[currentContextIndex++] = found[k];
+ }
+ }
+ continue; // Skip to next token
+ }
+ // Code to deal with attribute selectors
+ if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
+ var tagName = RegExp.$1;
+ var attrName = RegExp.$2;
+ var attrOperator = RegExp.$3;
+ var attrValue = RegExp.$4;
+ if (!tagName) {
+ tagName = '*';
+ }
+ // Grab all of the tagName elements within current context
+ var found = new Array;
+ var foundCount = 0;
+ for (var h = 0; h < currentContext.length; h++) {
+ var elements;
+ if (tagName == '*') {
+ elements = getAllChildren(currentContext[h]);
+ } else {
+ elements = currentContext[h].getElementsByTagName(tagName);
+ }
+ for (var j = 0; j < elements.length; j++) {
+ found[foundCount++] = elements[j];
+ }
+ }
+ currentContext = new Array;
+ var currentContextIndex = 0;
+ var checkFunction; // This function will be used to filter the elements
+ switch (attrOperator) {
+ case '=': // Equality
+ checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
+ break;
+ case '~': // Match one of space separated words
+ checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
+ break;
+ case '|': // Match start with value followed by optional hyphen
+ checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
+ break;
+ case '^': // Match starts with value
+ checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
+ break;
+ case '$': // Match ends with value - fails with "Warning" in Opera 7
+ checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
+ break;
+ case '*': // Match ends with value
+ checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
+ break;
+ default :
+ // Just test for existence of attribute
+ checkFunction = function(e) { return e.getAttribute(attrName); };
+ }
+ currentContext = new Array;
+ var currentContextIndex = 0;
+ for (var k = 0; k < found.length; k++) {
+ if (checkFunction(found[k])) {
+ currentContext[currentContextIndex++] = found[k];
+ }
+ }
+ // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
+ continue; // Skip to next token
+ }
+
+ if (!currentContext[0]){
+ return;
+ }
+
+ // If we get here, token is JUST an element (not a class or ID selector)
+ tagName = token;
+ var found = new Array;
+ var foundCount = 0;
+ for (var h = 0; h < currentContext.length; h++) {
+ var elements = currentContext[h].getElementsByTagName(tagName);
+ for (var j = 0; j < elements.length; j++) {
+ found[foundCount++] = elements[j];
+ }
+ }
+ currentContext = found;
+ }
+ return currentContext;
+}
+
+/* That revolting regular expression explained
+/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
+ \---/ \---/\-------------/ \-------/
+ | | | |
+ | | | The value
+ | | ~,|,^,$,* or =
+ | Attribute
+ Tag
+*/
diff --git a/src/usr/local/www/javascript/domTT/domLib.js b/src/usr/local/www/javascript/domTT/domLib.js
new file mode 100644
index 0000000..9a51a34
--- /dev/null
+++ b/src/usr/local/www/javascript/domTT/domLib.js
@@ -0,0 +1,706 @@
+/** $Id: domLib.js 2321 2006-06-12 06:45:41Z dallen $ */
+// {{{ license
+
+/*
+ * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com)
+ *
+ * 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.
+ */
+
+// }}}
+// {{{ intro
+
+/**
+ * Title: DOM Library Core
+ * Version: 0.70
+ *
+ * Summary:
+ * A set of commonly used functions that make it easier to create javascript
+ * applications that rely on the DOM.
+ *
+ * Updated: 2005/05/17
+ *
+ * Maintainer: Dan Allen <dan.allen@mojavelinux.com>
+ * Maintainer: Jason Rust <jrust@rustyparts.com>
+ *
+ * License: Apache 2.0
+ */
+
+// }}}
+// {{{ global constants (DO NOT EDIT)
+
+// -- Browser Detection --
+var domLib_userAgent = navigator.userAgent.toLowerCase();
+var domLib_isMac = navigator.appVersion.indexOf('Mac') != -1;
+var domLib_isWin = domLib_userAgent.indexOf('windows') != -1;
+// NOTE: could use window.opera for detecting Opera
+var domLib_isOpera = domLib_userAgent.indexOf('opera') != -1;
+var domLib_isOpera7up = domLib_userAgent.match(/opera.(7|8)/i);
+var domLib_isSafari = domLib_userAgent.indexOf('safari') != -1;
+var domLib_isKonq = domLib_userAgent.indexOf('konqueror') != -1;
+// Both konqueror and safari use the khtml rendering engine
+var domLib_isKHTML = (domLib_isKonq || domLib_isSafari || domLib_userAgent.indexOf('khtml') != -1);
+var domLib_isIE = (!domLib_isKHTML && !domLib_isOpera && (domLib_userAgent.indexOf('msie 5') != -1 || domLib_userAgent.indexOf('msie 6') != -1 || domLib_userAgent.indexOf('msie 7') != -1 || domLib_userAgent.indexOf('msie 8') != -1));
+var domLib_isIE5up = domLib_isIE;
+var domLib_isIE50 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.0') != -1);
+var domLib_isIE55 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.5') != -1);
+var domLib_isIE5 = (domLib_isIE50 || domLib_isIE55);
+// safari and konq may use string "khtml, like gecko", so check for destinctive /
+var domLib_isGecko = domLib_userAgent.indexOf('gecko/') != -1;
+var domLib_isMacIE = (domLib_isIE && domLib_isMac);
+var domLib_isIE55up = domLib_isIE5up && !domLib_isIE50 && !domLib_isMacIE;
+var domLib_isIE6up = domLib_isIE55up && !domLib_isIE55;
+
+// -- Browser Abilities --
+var domLib_standardsMode = (document.compatMode && document.compatMode == 'CSS1Compat');
+var domLib_useLibrary = (domLib_isOpera7up || domLib_isKHTML || domLib_isIE5up || domLib_isGecko || domLib_isMacIE || document.defaultView);
+// fixed in Konq3.2
+var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && domLib_userAgent.match(/konqueror\/3.([2-9])/) == null));
+var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera);
+var domLib_canDrawOverSelect = (domLib_isMac || domLib_isOpera || domLib_isGecko);
+var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin);
+
+// -- Event Variables --
+var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget';
+var domLib_eventButton = domLib_isIE ? 'button' : 'which';
+var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';
+var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer';
+// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it huge
+var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none';
+var domLib_hidePosition = '-1000px';
+var domLib_scrollbarWidth = 14;
+var domLib_autoId = 1;
+var domLib_zIndex = 1010;
+
+// -- Detection --
+var domLib_collisionElements;
+var domLib_collisionsCached = false;
+
+var domLib_timeoutStateId = 0;
+var domLib_timeoutStates = new domTT_Hash();
+
+// }}}
+// {{{ DOM enhancements
+
+if (!document.ELEMENT_NODE)
+{
+ document.ELEMENT_NODE = 1;
+ document.ATTRIBUTE_NODE = 2;
+ document.TEXT_NODE = 3;
+ document.DOCUMENT_NODE = 9;
+ document.DOCUMENT_FRAGMENT_NODE = 11;
+}
+
+function domLib_clone(obj)
+{
+ var copy = {};
+ for (var i in obj)
+ {
+ var value = obj[i];
+ try
+ {
+ if (value != null && typeof(value) == 'object' && value != window && !value.nodeType)
+ {
+ copy[i] = domLib_clone(value);
+ }
+ else
+ {
+ copy[i] = value;
+ }
+ }
+ catch(e)
+ {
+ copy[i] = value;
+ }
+ }
+
+ return copy;
+}
+
+// }}}
+// {{{ class domTT_Hash()
+
+function domTT_Hash()
+{
+ this.length = 0;
+ this.numericLength = 0;
+ this.elementData = [];
+ for (var i = 0; i < arguments.length; i += 2)
+ {
+ if (typeof(arguments[i + 1]) != 'undefined')
+ {
+ this.elementData[arguments[i]] = arguments[i + 1];
+ this.length++;
+ if (arguments[i] == parseInt(arguments[i]))
+ {
+ this.numericLength++;
+ }
+ }
+ }
+}
+
+// using prototype as opposed to inner functions saves on memory
+domTT_Hash.prototype.get = function(in_key)
+{
+ if (typeof(this.elementData[in_key]) != 'undefined') {
+ return this.elementData[in_key];
+ }
+
+ return null;
+};
+
+domTT_Hash.prototype.set = function(in_key, in_value)
+{
+ if (typeof(in_value) != 'undefined')
+ {
+ if (typeof(this.elementData[in_key]) == 'undefined')
+ {
+ this.length++;
+ if (in_key == parseInt(in_key))
+ {
+ this.numericLength++;
+ }
+ }
+
+ return this.elementData[in_key] = in_value;
+ }
+
+ return false;
+};
+
+domTT_Hash.prototype.remove = function(in_key)
+{
+ var tmp_value;
+ if (typeof(this.elementData[in_key]) != 'undefined')
+ {
+ this.length--;
+ if (in_key == parseInt(in_key))
+ {
+ this.numericLength--;
+ }
+
+ tmp_value = this.elementData[in_key];
+ delete this.elementData[in_key];
+ }
+
+ return tmp_value;
+};
+
+domTT_Hash.prototype.size = function()
+{
+ return this.length;
+};
+
+domTT_Hash.prototype.has = function(in_key)
+{
+ return typeof(this.elementData[in_key]) != 'undefined';
+};
+
+domTT_Hash.prototype.find = function(in_obj)
+{
+ for (var tmp_key in this.elementData)
+ {
+ if (this.elementData[tmp_key] == in_obj)
+ {
+ return tmp_key;
+ }
+ }
+
+ return null;
+};
+
+domTT_Hash.prototype.merge = function(in_hash)
+{
+ for (var tmp_key in in_hash.elementData)
+ {
+ if (typeof(this.elementData[tmp_key]) == 'undefined')
+ {
+ this.length++;
+ if (tmp_key == parseInt(tmp_key))
+ {
+ this.numericLength++;
+ }
+ }
+
+ this.elementData[tmp_key] = in_hash.elementData[tmp_key];
+ }
+};
+
+domTT_Hash.prototype.compare = function(in_hash)
+{
+ if (this.length != in_hash.length)
+ {
+ return false;
+ }
+
+ for (var tmp_key in this.elementData)
+ {
+ if (this.elementData[tmp_key] != in_hash.elementData[tmp_key])
+ {
+ return false;
+ }
+ }
+
+ return true;
+};
+
+// }}}
+// {{{ domLib_isDescendantOf()
+
+function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags)
+{
+ if (in_object == null)
+ {
+ return false;
+ }
+
+ if (in_object == in_ancestor)
+ {
+ return true;
+ }
+
+ if (typeof(in_bannedTags) != 'undefined' &&
+ (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1)
+ {
+ return false;
+ }
+
+ while (in_object != document.documentElement)
+ {
+ try
+ {
+ if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor)
+ {
+ return true;
+ }
+ else if ((tmp_object = in_object.parentNode) == in_ancestor)
+ {
+ return true;
+ }
+ else
+ {
+ in_object = tmp_object;
+ }
+ }
+ // in case we get some wierd error, assume we left the building
+ catch(e)
+ {
+ return false;
+ }
+ }
+
+ return false;
+}
+
+// }}}
+// {{{ domLib_detectCollisions()
+
+/**
+ * For any given target element, determine if elements on the page
+ * are colliding with it that do not obey the rules of z-index.
+ */
+function domLib_detectCollisions(in_object, in_recover, in_useCache)
+{
+ // the reason for the cache is that if the root menu is built before
+ // the page is done loading, then it might not find all the elements.
+ // so really the only time you don't use cache is when building the
+ // menu as part of the page load
+ if (!domLib_collisionsCached)
+ {
+ var tags = [];
+
+ if (!domLib_canDrawOverFlash)
+ {
+ tags[tags.length] = 'object';
+ }
+
+ if (!domLib_canDrawOverSelect)
+ {
+ tags[tags.length] = 'select';
+ }
+
+ domLib_collisionElements = domLib_getElementsByTagNames(tags, true);
+ domLib_collisionsCached = in_useCache;
+ }
+
+ // if we don't have a tip, then unhide selects
+ if (in_recover)
+ {
+ for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
+ {
+ var thisElement = domLib_collisionElements[cnt];
+
+ if (!thisElement.hideList)
+ {
+ thisElement.hideList = new domTT_Hash();
+ }
+
+ thisElement.hideList.remove(in_object.id);
+ if (!thisElement.hideList.length)
+ {
+ domLib_collisionElements[cnt].style.visibility = 'visible';
+ if (domLib_isKonq)
+ {
+ domLib_collisionElements[cnt].style.display = '';
+ }
+ }
+ }
+
+ return;
+ }
+ else if (domLib_collisionElements.length == 0)
+ {
+ return;
+ }
+
+ // okay, we have a tip, so hunt and destroy
+ var objectOffsets = domLib_getOffsets(in_object);
+
+ for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
+ {
+ var thisElement = domLib_collisionElements[cnt];
+
+ // if collision element is in active element, move on
+ // WARNING: is this too costly?
+ if (domLib_isDescendantOf(thisElement, in_object))
+ {
+ continue;
+ }
+
+ // konqueror only has trouble with multirow selects
+ if (domLib_isKonq &&
+ thisElement.tagName == 'SELECT' &&
+ (thisElement.size <= 1 && !thisElement.multiple))
+ {
+ continue;
+ }
+
+ if (!thisElement.hideList)
+ {
+ thisElement.hideList = new domTT_Hash();
+ }
+
+ var selectOffsets = domLib_getOffsets(thisElement);
+ var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2));
+ var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius');
+ // the encompassing circles are overlapping, get in for a closer look
+ if (center2centerDistance < radiusSum)
+ {
+ // tip is left of select
+ if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) ||
+ // tip is right of select
+ (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) ||
+ // tip is above select
+ (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) ||
+ // tip is below select
+ (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom')))
+ {
+ thisElement.hideList.remove(in_object.id);
+ if (!thisElement.hideList.length)
+ {
+ thisElement.style.visibility = 'visible';
+ if (domLib_isKonq)
+ {
+ thisElement.style.display = '';
+ }
+ }
+ }
+ else
+ {
+ thisElement.hideList.set(in_object.id, true);
+ thisElement.style.visibility = 'hidden';
+ if (domLib_isKonq)
+ {
+ thisElement.style.display = 'none';
+ }
+ }
+ }
+ }
+}
+
+// }}}
+// {{{ domLib_getOffsets()
+
+function domLib_getOffsets(in_object, in_preserveScroll)
+{
+ if (typeof(in_preserveScroll) == 'undefined') {
+ in_preserveScroll = false;
+ }
+
+ var originalObject = in_object;
+ var originalWidth = in_object.offsetWidth;
+ var originalHeight = in_object.offsetHeight;
+ var offsetLeft = 0;
+ var offsetTop = 0;
+
+ while (in_object)
+ {
+ offsetLeft += in_object.offsetLeft;
+ offsetTop += in_object.offsetTop;
+ in_object = in_object.offsetParent;
+ // consider scroll offset of parent elements
+ if (in_object && !in_preserveScroll)
+ {
+ offsetLeft -= in_object.scrollLeft;
+ offsetTop -= in_object.scrollTop;
+ }
+ }
+
+ // MacIE misreports the offsets (even with margin: 0 in body{}), still not perfect
+ if (domLib_isMacIE) {
+ offsetLeft += 10;
+ offsetTop += 10;
+ }
+
+ return new domTT_Hash(
+ 'left', offsetLeft,
+ 'top', offsetTop,
+ 'right', offsetLeft + originalWidth,
+ 'bottom', offsetTop + originalHeight,
+ 'leftCenter', offsetLeft + originalWidth/2,
+ 'topCenter', offsetTop + originalHeight/2,
+ 'radius', Math.max(originalWidth, originalHeight)
+ );
+}
+
+// }}}
+// {{{ domLib_setTimeout()
+
+function domLib_setTimeout(in_function, in_timeout, in_args)
+{
+ if (typeof(in_args) == 'undefined')
+ {
+ in_args = [];
+ }
+
+ if (in_timeout == -1)
+ {
+ // timeout event is disabled
+ return 0;
+ }
+ else if (in_timeout == 0)
+ {
+ in_function(in_args);
+ return 0;
+ }
+
+ // must make a copy of the arguments so that we release the reference
+ var args = domLib_clone(in_args);
+
+ if (!domLib_hasBrokenTimeout)
+ {
+ return setTimeout(function() { in_function(args); }, in_timeout);
+ }
+ else
+ {
+ var id = domLib_timeoutStateId++;
+ var data = new domTT_Hash();
+ data.set('function', in_function);
+ data.set('args', args);
+ domLib_timeoutStates.set(id, data);
+
+ data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout));
+ return id;
+ }
+}
+
+// }}}
+// {{{ domLib_clearTimeout()
+
+function domLib_clearTimeout(in_id)
+{
+ if (!domLib_hasBrokenTimeout)
+ {
+ if (in_id > 0) {
+ clearTimeout(in_id);
+ }
+ }
+ else
+ {
+ if (domLib_timeoutStates.has(in_id))
+ {
+ clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId'));
+ domLib_timeoutStates.remove(in_id);
+ }
+ }
+}
+
+// }}}
+// {{{ domLib_getEventPosition()
+
+function domLib_getEventPosition(in_eventObj)
+{
+ var eventPosition = new domTT_Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0);
+
+ // IE varies depending on standard compliance mode
+ if (domLib_isIE)
+ {
+ var doc = (domLib_standardsMode ? document.documentElement : document.body);
+ // NOTE: events may fire before the body has been loaded
+ if (doc)
+ {
+ eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft);
+ eventPosition.set('y', in_eventObj.clientY + doc.scrollTop);
+ eventPosition.set('scrollX', doc.scrollLeft);
+ eventPosition.set('scrollY', doc.scrollTop);
+ }
+ }
+ else
+ {
+ eventPosition.set('x', in_eventObj.pageX);
+ eventPosition.set('y', in_eventObj.pageY);
+ eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX);
+ eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY);
+ }
+
+ return eventPosition;
+}
+
+// }}}
+// {{{ domLib_cancelBubble()
+
+function domLib_cancelBubble(in_event)
+{
+ var eventObj = in_event ? in_event : window.event;
+ eventObj.cancelBubble = true;
+}
+
+// }}}
+// {{{ domLib_getIFrameReference()
+
+function domLib_getIFrameReference(in_frame)
+{
+ if (domLib_isGecko || domLib_isIE)
+ {
+ return in_frame.frameElement;
+ }
+ else
+ {
+ // we could either do it this way or require an id on the frame
+ // equivalent to the name
+ var name = in_frame.name;
+ if (!name || !in_frame.parent)
+ {
+ return null;
+ }
+
+ var candidates = in_frame.parent.document.getElementsByTagName('iframe');
+ for (var i = 0; i < candidates.length; i++)
+ {
+ if (candidates[i].name == name)
+ {
+ return candidates[i];
+ }
+ }
+
+ return null;
+ }
+}
+
+// }}}
+// {{{ domLib_getElementsByClass()
+
+function domLib_getElementsByClass(in_class)
+{
+ var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*');
+ var matches = [];
+ var cnt = 0;
+ for (var i = 0; i < elements.length; i++)
+ {
+ if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1)
+ {
+ matches[cnt++] = elements[i];
+ }
+ }
+
+ return matches;
+}
+
+// }}}
+// {{{ domLib_getElementsByTagNames()
+
+function domLib_getElementsByTagNames(in_list, in_excludeHidden)
+{
+ var elements = [];
+ for (var i = 0; i < in_list.length; i++)
+ {
+ var matches = document.getElementsByTagName(in_list[i]);
+ for (var j = 0; j < matches.length; j++)
+ {
+ // skip objects that have nested embeds, or else we get "flashing"
+ if (matches[j].tagName == 'OBJECT' && domLib_isGecko)
+ {
+ var kids = matches[j].childNodes;
+ var skip = false;
+ for (var k = 0; k < kids.length; k++)
+ {
+ if (kids[k].tagName == 'EMBED')
+ {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+ }
+
+ if (in_excludeHidden && domLib_getComputedStyle(matches[j], 'visibility') == 'hidden')
+ {
+ continue;
+ }
+
+ elements[elements.length] = matches[j];
+ }
+ }
+
+ return elements;
+}
+
+// }}}
+// {{{ domLib_getComputedStyle()
+
+function domLib_getComputedStyle(in_obj, in_property)
+{
+ if (domLib_isIE)
+ {
+ var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); });
+ return eval('in_obj.currentStyle.' + humpBackProp);
+ }
+ // getComputedStyle() is broken in konqueror, so let's go for the style object
+ else if (domLib_isKonq)
+ {
+ //var humpBackProp = in_property.replace(/-(.)/, function (a, b) { return b.toUpperCase(); });
+ return eval('in_obj.style.' + in_property);
+ }
+ else
+ {
+ return document.defaultView.getComputedStyle(in_obj, null).getPropertyValue(in_property);
+ }
+}
+
+// }}}
+// {{{ makeTrue()
+
+function makeTrue()
+{
+ return true;
+}
+
+// }}}
+// {{{ makeFalse()
+
+function makeFalse()
+{
+ return false;
+}
+
+// }}}
diff --git a/src/usr/local/www/javascript/domTT/domTT.js b/src/usr/local/www/javascript/domTT/domTT.js
new file mode 100644
index 0000000..fc9bf6a
--- /dev/null
+++ b/src/usr/local/www/javascript/domTT/domTT.js
@@ -0,0 +1,1132 @@
+/** $Id: domTT.js 2324 2006-06-12 07:06:39Z dallen $ */
+// {{{ license
+
+/*
+ * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com)
+ *
+ * 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.
+ */
+
+// }}}
+// {{{ intro
+
+/**
+ * Title: DOM Tooltip Library
+ * Version: 0.7.3
+ *
+ * Summary:
+ * Allows developers to add custom tooltips to the webpages. Tooltips are
+ * generated using the domTT_activate() function and customized by setting
+ * a handful of options.
+ *
+ * Maintainer: Dan Allen <dan.allen@mojavelinux.com>
+ * Contributors:
+ * Josh Gross <josh@jportalhome.com>
+ * Jason Rust <jason@rustyparts.com>
+ *
+ * License: Apache 2.0
+ * However, if you use this library, you earn the position of official bug
+ * reporter :) Please post questions or problem reports to the newsgroup:
+ *
+ * http://groups-beta.google.com/group/dom-tooltip
+ *
+ * If you are doing this for commercial work, perhaps you could send me a few
+ * Starbucks Coffee gift dollars or PayPal bucks to encourage future
+ * developement (NOT REQUIRED). E-mail me for my snail mail address.
+
+ *
+ * Homepage: http://www.mojavelinux.com/projects/domtooltip/
+ *
+ * Newsgroup: http://groups-beta.google.com/group/dom-tooltip
+ *
+ * Freshmeat Project: http://freshmeat.net/projects/domtt/?topic_id=92
+ *
+ * Updated: 2005/07/16
+ *
+ * Supported Browsers:
+ * Mozilla (Gecko), IE 5.5+, IE on Mac, Safari, Konqueror, Opera 7
+ *
+ * Usage:
+ * Please see the HOWTO documentation.
+**/
+
+// }}}
+// {{{ settings (editable)
+
+// IE mouse events seem to be off by 2 pixels
+var domTT_offsetX = (domLib_isIE ? -2 : 0);
+var domTT_offsetY = (domLib_isIE ? 4 : 2);
+var domTT_direction = 'southeast';
+var domTT_mouseHeight = domLib_isIE ? 13 : 19;
+var domTT_closeLink = 'X';
+var domTT_closeAction = 'hide';
+var domTT_activateDelay = 500;
+var domTT_maxWidth = false;
+var domTT_styleClass = 'domTT';
+var domTT_fade = 'neither';
+var domTT_lifetime = 0;
+var domTT_grid = 0;
+var domTT_trailDelay = 200;
+var domTT_useGlobalMousePosition = true;
+var domTT_postponeActivation = false;
+var domTT_tooltipIdPrefix = '[domTT]';
+var domTT_screenEdgeDetection = true;
+var domTT_screenEdgePadding = 4;
+var domTT_oneOnly = false;
+var domTT_cloneNodes = false;
+var domTT_detectCollisions = true;
+var domTT_bannedTags = ['OPTION'];
+var domTT_draggable = false;
+if (typeof(domTT_dragEnabled) == 'undefined')
+{
+ domTT_dragEnabled = false;
+}
+
+// }}}
+// {{{ globals (DO NOT EDIT)
+
+var domTT_predefined = new domTT_Hash();
+// tooltips are keyed on both the tip id and the owner id,
+// since events can originate on either object
+var domTT_tooltips = new domTT_Hash();
+var domTT_lastOpened = 0;
+var domTT_documentLoaded = false;
+var domTT_mousePosition = null;
+
+// }}}
+// {{{ document.onmousemove
+
+if (domLib_useLibrary && domTT_useGlobalMousePosition)
+{
+ document.onmousemove = function(in_event)
+ {
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+
+ domTT_mousePosition = domLib_getEventPosition(in_event);
+ if (domTT_dragEnabled && domTT_dragMouseDown)
+ {
+ domTT_dragUpdate(in_event);
+ }
+ };
+}
+
+// }}}
+// {{{ domTT_activate()
+
+function domTT_activate(in_this, in_event)
+{
+ if (!domLib_useLibrary || (domTT_postponeActivation && !domTT_documentLoaded)) { return false; }
+
+ // make sure in_event is set (for IE, some cases we have to use window.event)
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+
+ // don't allow tooltips on banned tags (such as OPTION)
+ if (in_event != null) {
+ var target = in_event.srcElement ? in_event.srcElement : in_event.target;
+ if (target != null && (',' + domTT_bannedTags.join(',') + ',').indexOf(',' + target.tagName + ',') != -1)
+ {
+ return false;
+ }
+ }
+
+ var owner = document.body;
+ // we have an active event so get the owner
+ if (in_event != null && in_event.type.match(/key|mouse|click|contextmenu/i))
+ {
+ // make sure we have nothing higher than the body element
+ if (in_this.nodeType && in_this.nodeType != document.DOCUMENT_NODE)
+ {
+ owner = in_this;
+ }
+ }
+ // non active event (make sure we were passed a string id)
+ else
+ {
+ if (typeof(in_this) != 'object' && !(owner = domTT_tooltips.get(in_this)))
+ {
+ // NOTE: two steps to avoid "flashing" in gecko
+ var embryo = document.createElement('div');
+ owner = document.body.appendChild(embryo);
+ owner.style.display = 'none';
+ owner.id = in_this;
+ }
+ }
+
+ // make sure the owner has a unique id
+ if (!owner.id)
+ {
+ owner.id = '__autoId' + domLib_autoId++;
+ }
+
+ // see if we should only be opening one tip at a time
+ // NOTE: this is not "perfect" yet since it really steps on any other
+ // tip working on fade out or delayed close, but it get's the job done
+ if (domTT_oneOnly && domTT_lastOpened)
+ {
+ domTT_deactivate(domTT_lastOpened);
+ }
+
+ domTT_lastOpened = owner.id;
+
+ var tooltip = domTT_tooltips.get(owner.id);
+ if (tooltip)
+ {
+ if (tooltip.get('eventType') != in_event.type)
+ {
+ if (tooltip.get('type') == 'greasy')
+ {
+ tooltip.set('closeAction', 'destroy');
+ domTT_deactivate(owner.id);
+ }
+ else if (tooltip.get('status') != 'inactive')
+ {
+ return owner.id;
+ }
+ }
+ else
+ {
+ if (tooltip.get('status') == 'inactive')
+ {
+ tooltip.set('status', 'pending');
+ tooltip.set('activateTimeout', domLib_setTimeout(domTT_runShow, tooltip.get('delay'), [owner.id, in_event]));
+
+ return owner.id;
+ }
+ // either pending or active, let it be
+ else
+ {
+ return owner.id;
+ }
+ }
+ }
+
+ // setup the default options hash
+ var options = new domTT_Hash(
+ 'caption', '',
+ 'content', '',
+ 'clearMouse', true,
+ 'closeAction', domTT_closeAction,
+ 'closeLink', domTT_closeLink,
+ 'delay', domTT_activateDelay,
+ 'direction', domTT_direction,
+ 'draggable', domTT_draggable,
+ 'fade', domTT_fade,
+ 'fadeMax', 100,
+ 'grid', domTT_grid,
+ 'id', domTT_tooltipIdPrefix + owner.id,
+ 'inframe', false,
+ 'lifetime', domTT_lifetime,
+ 'offsetX', domTT_offsetX,
+ 'offsetY', domTT_offsetY,
+ 'parent', document.body,
+ 'position', 'absolute',
+ 'styleClass', domTT_styleClass,
+ 'type', 'greasy',
+ 'trail', false,
+ 'lazy', false
+ );
+
+ // load in the options from the function call
+ for (var i = 2; i < arguments.length; i += 2)
+ {
+ // load in predefined
+ if (arguments[i] == 'predefined')
+ {
+ var predefinedOptions = domTT_predefined.get(arguments[i + 1]);
+ for (var j in predefinedOptions.elementData)
+ {
+ options.set(j, predefinedOptions.get(j));
+ }
+ }
+ // set option
+ else
+ {
+ options.set(arguments[i], arguments[i + 1]);
+ }
+ }
+
+ options.set('eventType', in_event != null ? in_event.type : null);
+
+ // immediately set the status text if provided
+ if (options.has('statusText'))
+ {
+ try { window.status = options.get('statusText'); } catch(e) {}
+ }
+
+ // if we didn't give content...assume we just wanted to change the status and return
+ if (!options.has('content') || options.get('content') == '' || options.get('content') == null)
+ {
+ if (typeof(owner.onmouseout) != 'function')
+ {
+ owner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); };
+ }
+
+ return owner.id;
+ }
+
+ options.set('owner', owner);
+
+ domTT_create(options);
+
+ // determine the show delay
+ options.set('delay', (in_event != null && in_event.type.match(/click|mousedown|contextmenu/i)) ? 0 : parseInt(options.get('delay')));
+ domTT_tooltips.set(owner.id, options);
+ domTT_tooltips.set(options.get('id'), options);
+ options.set('status', 'pending');
+ options.set('activateTimeout', domLib_setTimeout(domTT_runShow, options.get('delay'), [owner.id, in_event]));
+
+ return owner.id;
+}
+
+// }}}
+// {{{ domTT_create()
+
+function domTT_create(in_options)
+{
+ var tipOwner = in_options.get('owner');
+ var parentObj = in_options.get('parent');
+ var parentDoc = parentObj.ownerDocument || parentObj.document;
+
+ // create the tooltip and hide it
+ // NOTE: two steps to avoid "flashing" in gecko
+ var embryo = parentDoc.createElement('div');
+ var tipObj = parentObj.appendChild(embryo);
+ tipObj.style.position = 'absolute';
+ tipObj.style.left = '0px';
+ tipObj.style.top = '0px';
+ tipObj.style.visibility = 'hidden';
+ tipObj.id = in_options.get('id');
+ tipObj.className = in_options.get('styleClass');
+
+ var contentBlock;
+ var tableLayout = false;
+
+ if (in_options.get('caption') || (in_options.get('type') == 'sticky' && in_options.get('caption') !== false))
+ {
+ tableLayout = true;
+ // layout the tip with a hidden formatting table
+ var tipLayoutTable = tipObj.appendChild(parentDoc.createElement('table'));
+ tipLayoutTable.style.borderCollapse = 'collapse';
+ if (domLib_isKHTML)
+ {
+ tipLayoutTable.cellSpacing = 0;
+ }
+
+ var tipLayoutTbody = tipLayoutTable.appendChild(parentDoc.createElement('tbody'));
+
+ var numCaptionCells = 0;
+ var captionRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr'));
+ var captionCell = captionRow.appendChild(parentDoc.createElement('td'));
+ captionCell.style.padding = '0px';
+ var caption = captionCell.appendChild(parentDoc.createElement('div'));
+ caption.className = 'caption';
+ if (domLib_isIE50)
+ {
+ caption.style.height = '100%';
+ }
+
+ if (in_options.get('caption').nodeType)
+ {
+ caption.appendChild(domTT_cloneNodes ? in_options.get('caption').cloneNode(1) : in_options.get('caption'));
+ }
+ else
+ {
+ caption.innerHTML = in_options.get('caption');
+ }
+
+ if (in_options.get('type') == 'sticky')
+ {
+ var numCaptionCells = 2;
+ var closeLinkCell = captionRow.appendChild(parentDoc.createElement('td'));
+ closeLinkCell.style.padding = '0px';
+ var closeLink = closeLinkCell.appendChild(parentDoc.createElement('div'));
+ closeLink.className = 'caption';
+ if (domLib_isIE50)
+ {
+ closeLink.style.height = '100%';
+ }
+
+ closeLink.style.textAlign = 'right';
+ closeLink.style.cursor = domLib_stylePointer;
+ // merge the styles of the two cells
+ closeLink.style.borderLeftWidth = caption.style.borderRightWidth = '0px';
+ closeLink.style.paddingLeft = caption.style.paddingRight = '0px';
+ closeLink.style.marginLeft = caption.style.marginRight = '0px';
+ if (in_options.get('closeLink').nodeType)
+ {
+ closeLink.appendChild(in_options.get('closeLink').cloneNode(1));
+ }
+ else
+ {
+ closeLink.innerHTML = in_options.get('closeLink');
+ }
+
+ closeLink.onclick = function()
+ {
+ domTT_deactivate(tipOwner.id);
+ };
+ closeLink.onmousedown = function(in_event)
+ {
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+ in_event.cancelBubble = true;
+ };
+ // MacIE has to have a newline at the end and must be made with createTextNode()
+ if (domLib_isMacIE)
+ {
+ closeLinkCell.appendChild(parentDoc.createTextNode("\n"));
+ }
+ }
+
+ // MacIE has to have a newline at the end and must be made with createTextNode()
+ if (domLib_isMacIE)
+ {
+ captionCell.appendChild(parentDoc.createTextNode("\n"));
+ }
+
+ var contentRow = tipLayoutTbody.appendChild(parentDoc.createElement('tr'));
+ var contentCell = contentRow.appendChild(parentDoc.createElement('td'));
+ contentCell.style.padding = '0px';
+ if (numCaptionCells)
+ {
+ if (domLib_isIE || domLib_isOpera)
+ {
+ contentCell.colSpan = numCaptionCells;
+ }
+ else
+ {
+ contentCell.setAttribute('colspan', numCaptionCells);
+ }
+ }
+
+ contentBlock = contentCell.appendChild(parentDoc.createElement('div'));
+ if (domLib_isIE50)
+ {
+ contentBlock.style.height = '100%';
+ }
+ }
+ else
+ {
+ contentBlock = tipObj.appendChild(parentDoc.createElement('div'));
+ }
+
+ contentBlock.className = 'contents';
+
+ var content = in_options.get('content');
+ // allow content has a function to return the actual content
+ if (typeof(content) == 'function') {
+ content = content(in_options.get('id'));
+ }
+
+ if (content != null && content.nodeType)
+ {
+ contentBlock.appendChild(domTT_cloneNodes ? content.cloneNode(1) : content);
+ }
+ else
+ {
+ contentBlock.innerHTML = content;
+ }
+
+ // adjust the width if specified
+ if (in_options.has('width'))
+ {
+ tipObj.style.width = parseInt(in_options.get('width')) + 'px';
+ }
+
+ // check if we are overridding the maxWidth
+ // if the browser supports maxWidth, the global setting will be ignored (assume stylesheet)
+ var maxWidth = domTT_maxWidth;
+ if (in_options.has('maxWidth'))
+ {
+ if ((maxWidth = in_options.get('maxWidth')) === false)
+ {
+ tipObj.style.maxWidth = domLib_styleNoMaxWidth;
+ }
+ else
+ {
+ maxWidth = parseInt(in_options.get('maxWidth'));
+ tipObj.style.maxWidth = maxWidth + 'px';
+ }
+ }
+
+ // HACK: fix lack of maxWidth in CSS for KHTML and IE
+ if (maxWidth !== false && (domLib_isIE || domLib_isKHTML) && tipObj.offsetWidth > maxWidth)
+ {
+ tipObj.style.width = maxWidth + 'px';
+ }
+
+ in_options.set('offsetWidth', tipObj.offsetWidth);
+ in_options.set('offsetHeight', tipObj.offsetHeight);
+
+ // konqueror miscalcuates the width of the containing div when using the layout table based on the
+ // border size of the containing div
+ if (domLib_isKonq && tableLayout && !tipObj.style.width)
+ {
+ var left = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-left-width');
+ var right = document.defaultView.getComputedStyle(tipObj, '').getPropertyValue('border-right-width');
+
+ left = left.substring(left.indexOf(':') + 2, left.indexOf(';'));
+ right = right.substring(right.indexOf(':') + 2, right.indexOf(';'));
+ var correction = 2 * ((left ? parseInt(left) : 0) + (right ? parseInt(right) : 0));
+ tipObj.style.width = (tipObj.offsetWidth - correction) + 'px';
+ }
+
+ // if a width is not set on an absolutely positioned object, both IE and Opera
+ // will attempt to wrap when it spills outside of body...we cannot have that
+ if (domLib_isIE || domLib_isOpera)
+ {
+ if (!tipObj.style.width)
+ {
+ // HACK: the correction here is for a border
+ tipObj.style.width = (tipObj.offsetWidth - 2) + 'px';
+ }
+
+ // HACK: the correction here is for a border
+ tipObj.style.height = (tipObj.offsetHeight - 2) + 'px';
+ }
+
+ // store placement offsets from event position
+ var offsetX, offsetY;
+
+ // tooltip floats
+ if (in_options.get('position') == 'absolute' && !(in_options.has('x') && in_options.has('y')))
+ {
+ // determine the offset relative to the pointer
+ switch (in_options.get('direction'))
+ {
+ case 'northeast':
+ offsetX = in_options.get('offsetX');
+ offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
+ break;
+ case 'northwest':
+ offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX');
+ offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
+ break;
+ case 'north':
+ offsetX = 0 - parseInt(tipObj.offsetWidth/2);
+ offsetY = 0 - tipObj.offsetHeight - in_options.get('offsetY');
+ break;
+ case 'southwest':
+ offsetX = 0 - tipObj.offsetWidth - in_options.get('offsetX');
+ offsetY = in_options.get('offsetY');
+ break;
+ case 'southeast':
+ offsetX = in_options.get('offsetX');
+ offsetY = in_options.get('offsetY');
+ break;
+ case 'south':
+ offsetX = 0 - parseInt(tipObj.offsetWidth/2);
+ offsetY = in_options.get('offsetY');
+ break;
+ }
+
+ // if we are in an iframe, get the offsets of the iframe in the parent document
+ if (in_options.get('inframe'))
+ {
+ var iframeObj = domLib_getIFrameReference(window);
+ if (iframeObj)
+ {
+ var frameOffsets = domLib_getOffsets(iframeObj);
+ offsetX += frameOffsets.get('left');
+ offsetY += frameOffsets.get('top');
+ }
+ }
+ }
+ // tooltip is fixed
+ else
+ {
+ offsetX = 0;
+ offsetY = 0;
+ in_options.set('trail', false);
+ }
+
+ // set the direction-specific offsetX/Y
+ in_options.set('offsetX', offsetX);
+ in_options.set('offsetY', offsetY);
+ if (in_options.get('clearMouse') && in_options.get('direction').indexOf('south') != -1)
+ {
+ in_options.set('mouseOffset', domTT_mouseHeight);
+ }
+ else
+ {
+ in_options.set('mouseOffset', 0);
+ }
+
+ if (domLib_canFade && typeof(Fadomatic) == 'function')
+ {
+ if (in_options.get('fade') != 'neither')
+ {
+ var fadeHandler = new Fadomatic(tipObj, 10, 0, 0, in_options.get('fadeMax'));
+ in_options.set('fadeHandler', fadeHandler);
+ }
+ }
+ else
+ {
+ in_options.set('fade', 'neither');
+ }
+
+ // setup mouse events
+ if (in_options.get('trail') && typeof(tipOwner.onmousemove) != 'function')
+ {
+ tipOwner.onmousemove = function(in_event) { domTT_mousemove(this, in_event); };
+ }
+
+ if (typeof(tipOwner.onmouseout) != 'function')
+ {
+ tipOwner.onmouseout = function(in_event) { domTT_mouseout(this, in_event); };
+ }
+
+ if (in_options.get('type') == 'sticky')
+ {
+ if (in_options.get('position') == 'absolute' && domTT_dragEnabled && in_options.get('draggable'))
+ {
+ if (domLib_isIE)
+ {
+ captionRow.onselectstart = function() { return false; };
+ }
+
+ // setup drag
+ captionRow.onmousedown = function(in_event) { domTT_dragStart(tipObj, in_event); };
+ captionRow.onmousemove = function(in_event) { domTT_dragUpdate(in_event); };
+ captionRow.onmouseup = function() { domTT_dragStop(); };
+ }
+ }
+ else if (in_options.get('type') == 'velcro')
+ {
+ /* can use once we have deactivateDelay
+ tipObj.onmouseover = function(in_event)
+ {
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+ var tooltip = domTT_tooltips.get(tipObj.id);
+ if (in_options.get('lifetime')) {
+ domLib_clearTimeout(in_options.get('lifetimeTimeout');
+ }
+ };
+ */
+ tipObj.onmouseout = function(in_event)
+ {
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+ if (!domLib_isDescendantOf(in_event[domLib_eventTo], tipObj, domTT_bannedTags)) {
+ domTT_deactivate(tipOwner.id);
+ }
+ };
+ // NOTE: this might interfere with links in the tip
+ tipObj.onclick = function(in_event)
+ {
+ domTT_deactivate(tipOwner.id);
+ };
+ }
+
+ if (in_options.get('position') == 'relative')
+ {
+ tipObj.style.position = 'relative';
+ }
+
+ in_options.set('node', tipObj);
+ in_options.set('status', 'inactive');
+}
+
+// }}}
+// {{{ domTT_show()
+
+// in_id is either tip id or the owner id
+function domTT_show(in_id, in_event)
+{
+
+ // should always find one since this call would be cancelled if tip was killed
+ var tooltip = domTT_tooltips.get(in_id);
+ var status = tooltip.get('status');
+ var tipObj = tooltip.get('node');
+
+ if (tooltip.get('position') == 'absolute')
+ {
+ var mouseX, mouseY;
+
+ if (tooltip.has('x') && tooltip.has('y'))
+ {
+ mouseX = tooltip.get('x');
+ mouseY = tooltip.get('y');
+ }
+ else if (!domTT_useGlobalMousePosition || domTT_mousePosition == null || status == 'active' || tooltip.get('delay') == 0)
+ {
+ var eventPosition = domLib_getEventPosition(in_event);
+ var eventX = eventPosition.get('x');
+ var eventY = eventPosition.get('y');
+ if (tooltip.get('inframe'))
+ {
+ eventX -= eventPosition.get('scrollX');
+ eventY -= eventPosition.get('scrollY');
+ }
+
+ // only move tip along requested trail axis when updating position
+ if (status == 'active' && tooltip.get('trail') !== true)
+ {
+ var trail = tooltip.get('trail');
+ if (trail == 'x')
+ {
+ mouseX = eventX;
+ mouseY = tooltip.get('mouseY');
+ }
+ else if (trail == 'y')
+ {
+ mouseX = tooltip.get('mouseX');
+ mouseY = eventY;
+ }
+ }
+ else
+ {
+ mouseX = eventX;
+ mouseY = eventY;
+ }
+ }
+ else
+ {
+ mouseX = domTT_mousePosition.get('x');
+ mouseY = domTT_mousePosition.get('y');
+ if (tooltip.get('inframe'))
+ {
+ mouseX -= domTT_mousePosition.get('scrollX');
+ mouseY -= domTT_mousePosition.get('scrollY');
+ }
+ }
+
+ // we are using a grid for updates
+ if (tooltip.get('grid'))
+ {
+ // if this is not a mousemove event or it is a mousemove event on an active tip and
+ // the movement is bigger than the grid
+ if (in_event.type != 'mousemove' || (status == 'active' && (Math.abs(tooltip.get('lastX') - mouseX) > tooltip.get('grid') || Math.abs(tooltip.get('lastY') - mouseY) > tooltip.get('grid'))))
+ {
+ tooltip.set('lastX', mouseX);
+ tooltip.set('lastY', mouseY);
+ }
+ // did not satisfy the grid movement requirement
+ else
+ {
+ return false;
+ }
+ }
+
+ // mouseX and mouseY store the last acknowleged mouse position,
+ // good for trailing on one axis
+ tooltip.set('mouseX', mouseX);
+ tooltip.set('mouseY', mouseY);
+
+ var coordinates;
+ if (domTT_screenEdgeDetection)
+ {
+ coordinates = domTT_correctEdgeBleed(
+ tooltip.get('offsetWidth'),
+ tooltip.get('offsetHeight'),
+ mouseX,
+ mouseY,
+ tooltip.get('offsetX'),
+ tooltip.get('offsetY'),
+ tooltip.get('mouseOffset'),
+ tooltip.get('inframe') ? window.parent : window
+ );
+ }
+ else
+ {
+ coordinates = {
+ 'x' : mouseX + tooltip.get('offsetX'),
+ 'y' : mouseY + tooltip.get('offsetY') + tooltip.get('mouseOffset')
+ };
+ }
+
+ // update the position
+ tipObj.style.left = coordinates.x + 'px';
+ tipObj.style.top = coordinates.y + 'px';
+
+ // increase the tip zIndex so it goes over previously shown tips
+ tipObj.style.zIndex = domLib_zIndex++;
+ }
+
+ // if tip is not active, active it now and check for a fade in
+ if (status == 'pending')
+ {
+ // unhide the tooltip
+ tooltip.set('status', 'active');
+ tipObj.style.display = '';
+ tipObj.style.visibility = 'visible';
+
+ var fade = tooltip.get('fade');
+ if (fade != 'neither')
+ {
+ var fadeHandler = tooltip.get('fadeHandler');
+ if (fade == 'out' || fade == 'both')
+ {
+ fadeHandler.haltFade();
+ if (fade == 'out')
+ {
+ fadeHandler.halt();
+ }
+ }
+
+ if (fade == 'in' || fade == 'both')
+ {
+ fadeHandler.fadeIn();
+ }
+ }
+
+ if (tooltip.get('type') == 'greasy' && tooltip.get('lifetime') != 0)
+ {
+ tooltip.set('lifetimeTimeout', domLib_setTimeout(domTT_runDeactivate, tooltip.get('lifetime'), [tipObj.id]));
+ }
+ }
+
+ if (tooltip.get('position') == 'absolute' && domTT_detectCollisions)
+ {
+ // utilize original collision element cache
+ domLib_detectCollisions(tipObj, false, true);
+ }
+}
+
+// }}}
+// {{{ domTT_close()
+
+// in_handle can either be an child object of the tip, the tip id or the owner id
+function domTT_close(in_handle)
+{
+ var id;
+ if (typeof(in_handle) == 'object' && in_handle.nodeType)
+ {
+ var obj = in_handle;
+ while (!obj.id || !domTT_tooltips.get(obj.id))
+ {
+ obj = obj.parentNode;
+
+ if (obj.nodeType != document.ELEMENT_NODE) { return; }
+ }
+
+ id = obj.id;
+ }
+ else
+ {
+ id = in_handle;
+ }
+
+ domTT_deactivate(id);
+}
+
+// }}}
+// {{{ domTT_closeAll()
+
+// run through the tooltips and close them all
+function domTT_closeAll()
+{
+ // NOTE: this will iterate 2x # of tooltips
+ for (var id in domTT_tooltips.elementData) {
+ domTT_close(id);
+ }
+}
+
+// }}}
+// {{{ domTT_deactivate()
+
+// in_id is either the tip id or the owner id
+function domTT_deactivate(in_id)
+{
+ var tooltip = domTT_tooltips.get(in_id);
+ if (tooltip)
+ {
+ var status = tooltip.get('status');
+ if (status == 'pending')
+ {
+ // cancel the creation of this tip if it is still pending
+ domLib_clearTimeout(tooltip.get('activateTimeout'));
+ tooltip.set('status', 'inactive');
+ }
+ else if (status == 'active')
+ {
+ if (tooltip.get('lifetime'))
+ {
+ domLib_clearTimeout(tooltip.get('lifetimeTimeout'));
+ }
+
+ var tipObj = tooltip.get('node');
+ if (tooltip.get('closeAction') == 'hide')
+ {
+ var fade = tooltip.get('fade');
+ if (fade != 'neither')
+ {
+ var fadeHandler = tooltip.get('fadeHandler');
+ if (fade == 'out' || fade == 'both')
+ {
+ fadeHandler.fadeOut();
+ }
+ else
+ {
+ fadeHandler.hide();
+ }
+ }
+ else
+ {
+ tipObj.style.display = 'none';
+ }
+ }
+ else
+ {
+ tooltip.get('parent').removeChild(tipObj);
+ domTT_tooltips.remove(tooltip.get('owner').id);
+ domTT_tooltips.remove(tooltip.get('id'));
+ }
+
+ tooltip.set('status', 'inactive');
+ if (domTT_detectCollisions) {
+ // unhide all of the selects that are owned by this object
+ // utilize original collision element cache
+ domLib_detectCollisions(tipObj, true, true);
+ }
+ }
+ }
+}
+
+// }}}
+// {{{ domTT_mouseout()
+
+function domTT_mouseout(in_owner, in_event)
+{
+ if (!domLib_useLibrary) { return false; }
+
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+
+ var toChild = domLib_isDescendantOf(in_event[domLib_eventTo], in_owner, domTT_bannedTags);
+ var tooltip = domTT_tooltips.get(in_owner.id);
+ if (tooltip && (tooltip.get('type') == 'greasy' || tooltip.get('status') != 'active'))
+ {
+ // deactivate tip if exists and we moved away from the owner
+ if (!toChild)
+ {
+ domTT_deactivate(in_owner.id);
+ try { window.status = window.defaultStatus; } catch(e) {}
+ }
+ }
+ else if (!toChild)
+ {
+ try { window.status = window.defaultStatus; } catch(e) {}
+ }
+}
+
+// }}}
+// {{{ domTT_mousemove()
+
+function domTT_mousemove(in_owner, in_event)
+{
+ if (!domLib_useLibrary) { return false; }
+
+ if (typeof(in_event) == 'undefined') { in_event = window.event; }
+
+ var tooltip = domTT_tooltips.get(in_owner.id);
+ if (tooltip && tooltip.get('trail') && tooltip.get('status') == 'active')
+ {
+ // see if we are trailing lazy
+ if (tooltip.get('lazy'))
+ {
+ domLib_setTimeout(domTT_runShow, domTT_trailDelay, [in_owner.id, in_event]);
+ }
+ else
+ {
+ domTT_show(in_owner.id, in_event);
+ }
+ }
+}
+
+// }}}
+// {{{ domTT_addPredefined()
+
+function domTT_addPredefined(in_id)
+{
+ var options = new domTT_Hash();
+ for (var i = 1; i < arguments.length; i += 2)
+ {
+ options.set(arguments[i], arguments[i + 1]);
+ }
+
+ domTT_predefined.set(in_id, options);
+}
+
+// }}}
+// {{{ domTT_correctEdgeBleed()
+
+function domTT_correctEdgeBleed(in_width, in_height, in_x, in_y, in_offsetX, in_offsetY, in_mouseOffset, in_window)
+{
+ var win, doc;
+ var bleedRight, bleedBottom;
+ var pageHeight, pageWidth, pageYOffset, pageXOffset;
+
+ var x = in_x + in_offsetX;
+ var y = in_y + in_offsetY + in_mouseOffset;
+
+ win = (typeof(in_window) == 'undefined' ? window : in_window);
+
+ // Gecko and IE swaps values of clientHeight, clientWidth properties when
+ // in standards compliance mode from documentElement to document.body
+ doc = ((domLib_standardsMode && (domLib_isIE || domLib_isGecko)) ? win.document.documentElement : win.document.body);
+
+ // for IE in compliance mode
+ if (domLib_isIE)
+ {
+ pageHeight = doc.clientHeight;
+ pageWidth = doc.clientWidth;
+ pageYOffset = doc.scrollTop;
+ pageXOffset = doc.scrollLeft;
+ }
+ else
+ {
+ pageHeight = doc.clientHeight;
+ pageWidth = doc.clientWidth;
+
+ if (domLib_isKHTML)
+ {
+ pageHeight = win.innerHeight;
+ }
+
+ pageYOffset = win.pageYOffset;
+ pageXOffset = win.pageXOffset;
+ }
+
+ // we are bleeding off the right, move tip over to stay on page
+ // logic: take x position, add width and subtract from effective page width
+ if ((bleedRight = (x - pageXOffset) + in_width - (pageWidth - domTT_screenEdgePadding)) > 0)
+ {
+ x -= bleedRight;
+ }
+
+ // we are bleeding to the left, move tip over to stay on page
+ // if tip doesn't fit, we will go back to bleeding off the right
+ // logic: take x position and check if less than edge padding
+ if ((x - pageXOffset) < domTT_screenEdgePadding)
+ {
+ x = domTT_screenEdgePadding + pageXOffset;
+ }
+
+ // if we are bleeding off the bottom, flip to north
+ // logic: take y position, add height and subtract from effective page height
+ if ((bleedBottom = (y - pageYOffset) + in_height - (pageHeight - domTT_screenEdgePadding)) > 0)
+ {
+ y = in_y - in_height - in_offsetY;
+ }
+
+ // if we are bleeding off the top, flip to south
+ // if tip doesn't fit, we will go back to bleeding off the bottom
+ // logic: take y position and check if less than edge padding
+ if ((y - pageYOffset) < domTT_screenEdgePadding)
+ {
+ y = in_y + domTT_mouseHeight + in_offsetY;
+ }
+
+ return {'x' : x, 'y' : y};
+}
+
+// }}}
+// {{{ domTT_isActive()
+
+// in_id is either the tip id or the owner id
+function domTT_isActive(in_id)
+{
+ var tooltip = domTT_tooltips.get(in_id);
+ if (!tooltip || tooltip.get('status') != 'active')
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+// }}}
+// {{{ domTT_runXXX()
+
+// All of these domMenu_runXXX() methods are used by the event handling sections to
+// avoid the circular memory leaks caused by inner functions
+function domTT_runDeactivate(args) { domTT_deactivate(args[0]); }
+function domTT_runShow(args) { domTT_show(args[0], args[1]); }
+
+// }}}
+// {{{ domTT_replaceTitles()
+
+function domTT_replaceTitles(in_decorator)
+{
+ var elements = domLib_getElementsByClass('tooltip');
+ for (var i = 0; i < elements.length; i++)
+ {
+ if (elements[i].title)
+ {
+ var content;
+ if (typeof(in_decorator) == 'function')
+ {
+ content = in_decorator(elements[i]);
+ }
+ else
+ {
+ content = elements[i].title;
+ }
+
+ content = content.replace(new RegExp('\'', 'g'), '\\\'');
+ elements[i].onmouseover = new Function('in_event', "domTT_activate(this, in_event, 'content', '" + content + "')");
+ elements[i].title = '';
+ }
+ }
+}
+
+// }}}
+// {{{ domTT_update()
+
+// Allow authors to update the contents of existing tips using the DOM
+// Unfortunately, the tip must already exist, or else no work is done.
+// TODO: make getting at content or caption cleaner
+function domTT_update(handle, content, type)
+{
+ // type defaults to 'content', can also be 'caption'
+ if (typeof(type) == 'undefined')
+ {
+ type = 'content';
+ }
+
+ var tip = domTT_tooltips.get(handle);
+ if (!tip)
+ {
+ return;
+ }
+
+ var tipObj = tip.get('node');
+ var updateNode;
+ if (type == 'content')
+ {
+ // <div class="contents">...
+ updateNode = tipObj.firstChild;
+ if (updateNode.className != 'contents')
+ {
+ // <table><tbody><tr>...</tr><tr><td><div class="contents">...
+ updateNode = updateNode.firstChild.firstChild.nextSibling.firstChild.firstChild;
+ }
+ }
+ else
+ {
+ updateNode = tipObj.firstChild;
+ if (updateNode.className == 'contents')
+ {
+ // missing caption
+ return;
+ }
+
+ // <table><tbody><tr><td><div class="caption">...
+ updateNode = updateNode.firstChild.firstChild.firstChild.firstChild;
+ }
+
+ // TODO: allow for a DOM node as content
+ updateNode.innerHTML = content;
+}
+
+// }}}
diff --git a/src/usr/local/www/javascript/domTT/fadomatic.js b/src/usr/local/www/javascript/domTT/fadomatic.js
new file mode 100644
index 0000000..2c67d0b
--- /dev/null
+++ b/src/usr/local/www/javascript/domTT/fadomatic.js
@@ -0,0 +1,180 @@
+/** $Id$ */
+// Title: Fadomatic
+// Version: 1.2
+// Homepage: http://chimpen.com/fadomatic
+// Author: Philip McCarthy <fadomatic@chimpen.com>
+
+// Fade interval in milliseconds
+// Make this larger if you experience performance issues
+Fadomatic.INTERVAL_MILLIS = 50;
+
+// Creates a fader
+// element - The element to fade
+// speed - The speed to fade at, from 0.0 to 100.0
+// initialOpacity (optional, default 100) - element's starting opacity, 0 to 100
+// minOpacity (optional, default 0) - element's minimum opacity, 0 to 100
+// maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100
+function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) {
+ this._element = element;
+ this._intervalId = null;
+ this._rate = rate;
+ this._isFadeOut = true;
+
+ // Set initial opacity and bounds
+ // NB use 99 instead of 100 to avoid flicker at start of fade
+ this._minOpacity = 0;
+ this._maxOpacity = 99;
+ this._opacity = 99;
+
+ if (typeof minOpacity != 'undefined') {
+ if (minOpacity < 0) {
+ this._minOpacity = 0;
+ } else if (minOpacity > 99) {
+ this._minOpacity = 99;
+ } else {
+ this._minOpacity = minOpacity;
+ }
+ }
+
+ if (typeof maxOpacity != 'undefined') {
+ if (maxOpacity < 0) {
+ this._maxOpacity = 0;
+ } else if (maxOpacity > 99) {
+ this._maxOpacity = 99;
+ } else {
+ this._maxOpacity = maxOpacity;
+ }
+
+ if (this._maxOpacity < this._minOpacity) {
+ this._maxOpacity = this._minOpacity;
+ }
+ }
+
+ if (typeof initialOpacity != 'undefined') {
+ if (initialOpacity > this._maxOpacity) {
+ this._opacity = this._maxOpacity;
+ } else if (initialOpacity < this._minOpacity) {
+ this._opacity = this._minOpacity;
+ } else {
+ this._opacity = initialOpacity;
+ }
+ }
+
+ // See if we're using W3C opacity, MSIE filter, or just
+ // toggling visiblity
+ if(typeof element.style.opacity != 'undefined') {
+
+ this._updateOpacity = this._updateOpacityW3c;
+
+ } else if(typeof element.style.filter != 'undefined') {
+
+ // If there's not an alpha filter on the element already,
+ // add one
+ if (element.style.filter.indexOf("alpha") == -1) {
+
+ // Attempt to preserve existing filters
+ var existingFilters="";
+ if (element.style.filter) {
+ existingFilters = element.style.filter+" ";
+ }
+ element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")";
+ }
+
+ this._updateOpacity = this._updateOpacityMSIE;
+
+ } else {
+
+ this._updateOpacity = this._updateVisibility;
+ }
+
+ this._updateOpacity();
+}
+
+// Initiates a fade out
+Fadomatic.prototype.fadeOut = function () {
+ this._isFadeOut = true;
+ this._beginFade();
+};
+
+// Initiates a fade in
+Fadomatic.prototype.fadeIn = function () {
+ this._isFadeOut = false;
+ this._beginFade();
+};
+
+// Makes the element completely opaque, stops any fade in progress
+Fadomatic.prototype.show = function () {
+ this.haltFade();
+ this._opacity = this._maxOpacity;
+ this._updateOpacity();
+};
+
+// Makes the element completely transparent, stops any fade in progress
+Fadomatic.prototype.hide = function () {
+ this.haltFade();
+ this._opacity = 0;
+ this._updateOpacity();
+};
+
+// Halts any fade in progress
+Fadomatic.prototype.haltFade = function () {
+
+ clearInterval(this._intervalId);
+};
+
+// Resumes a fade where it was halted
+Fadomatic.prototype.resumeFade = function () {
+
+ this._beginFade();
+};
+
+// Pseudo-private members
+
+Fadomatic.prototype._beginFade = function () {
+
+ this.haltFade();
+ var objref = this;
+ this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS);
+};
+
+Fadomatic.prototype._tickFade = function () {
+
+ if (this._isFadeOut) {
+ this._opacity -= this._rate;
+ if (this._opacity < this._minOpacity) {
+ this._opacity = this._minOpacity;
+ this.haltFade();
+ }
+ } else {
+ this._opacity += this._rate;
+ if (this._opacity > this._maxOpacity ) {
+ this._opacity = this._maxOpacity;
+ this.haltFade();
+ }
+ }
+
+ this._updateOpacity();
+};
+
+Fadomatic.prototype._updateVisibility = function () {
+
+ if (this._opacity > 0) {
+ this._element.style.visibility = 'visible';
+ } else {
+ this._element.style.visibility = 'hidden';
+ }
+};
+
+Fadomatic.prototype._updateOpacityW3c = function () {
+
+ this._element.style.opacity = this._opacity/100;
+ this._updateVisibility();
+};
+
+Fadomatic.prototype._updateOpacityMSIE = function () {
+
+ this._element.filters.alpha.opacity = this._opacity;
+ this._updateVisibility();
+};
+
+Fadomatic.prototype._updateOpacity = null;
diff --git a/src/usr/local/www/javascript/filter_log.js b/src/usr/local/www/javascript/filter_log.js
new file mode 100644
index 0000000..66a7309
--- /dev/null
+++ b/src/usr/local/www/javascript/filter_log.js
@@ -0,0 +1,168 @@
+if (typeof getURL == 'undefined') {
+ getURL = function(url, callback) {
+ if (!url)
+ throw 'No URL for getURL';
+ try {
+ if (typeof callback.operationComplete == 'function')
+ callback = callback.operationComplete;
+ } catch (e) {}
+ if (typeof callback != 'function')
+ throw 'No callback function for getURL';
+ var http_request = null;
+ if (typeof XMLHttpRequest != 'undefined') {
+ http_request = new XMLHttpRequest();
+ }
+ else if (typeof ActiveXObject != 'undefined') {
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ } catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ } catch (e) {}
+ }
+ }
+ if (!http_request)
+ throw 'Both getURL and XMLHttpRequest are undefined';
+ http_request.onreadystatechange = function() {
+ if (http_request.readyState == 4) {
+ callback( { success : true,
+ content : http_request.responseText,
+ contentType : http_request.getResponseHeader("Content-Type") } );
+ }
+ };
+ http_request.open('GET', url, true);
+ http_request.send(null);
+ };
+}
+
+function outputrule(req) {
+ alert(req.content);
+}
+function fetch_new_rules() {
+ if(isPaused)
+ return;
+ if(isBusy)
+ return;
+ isBusy = true;
+ getURL('diag_logs_filter_dynamic.php?lastsawtime=' + lastsawtime, fetch_new_rules_callback);
+}
+function fetch_new_rules_callback(callback_data) {
+ if(isPaused)
+ return;
+
+ var data_split;
+ var new_data_to_add = Array();
+ var data = callback_data.content;
+
+ data_split = data.split("\n");
+
+ for(var x=0; x<data_split.length-1; x++) {
+ /* loop through rows */
+ row_split = data_split[x].split("||");
+ lastsawtime = row_split[9];
+
+ var tmp = format_log_line(row_split);
+ if ( !(tmp) ) continue;
+
+ new_data_to_add[new_data_to_add.length] = tmp;
+ }
+ update_table_rows(new_data_to_add);
+ isBusy = false;
+}
+
+function in_arrayi(needle, haystack) {
+ var i = haystack.length;
+ while (i--) {
+ if (haystack[i].toLowerCase() === needle.toLowerCase()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function update_table_rows(data) {
+ if(isPaused)
+ return;
+
+ var isIE = navigator.appName.indexOf('Microsoft') != -1;
+ var isSafari = navigator.userAgent.indexOf('Safari') != -1;
+ var isOpera = navigator.userAgent.indexOf('Opera') != -1;
+ var showanim = 1;
+ if (isIE) {
+ showanim = 0;
+ }
+
+ var startat = data.length - nentries;
+ if (startat < 0) {
+ startat = 0;
+ }
+ data = data.slice(startat, data.length);
+
+ var rows = jQuery('#filter-log-entries>tr');
+
+ // Number of rows to move by
+ var move = rows.length + data.length - nentries;
+ if (move < 0)
+ move = 0;
+
+ if (isReverse == false) {
+ for (var i = move; i < rows.length; i++) {
+ jQuery(rows[i - move]).html(jQuery(rows[i]).html());
+ }
+
+ var tbody = jQuery('#filter-log-entries');
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = rows.length - move + i;
+ if (rowIndex < rows.length) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).append('<tr>' + data[i] + '</tr>');
+ }
+ }
+ } else {
+ for (var i = rows.length - 1; i >= move; i--) {
+ jQuery(rows[i]).html(jQuery(rows[i - move]).html());
+ }
+
+ var tbody = jQuery('#filter-log-entries');
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = move - 1 - i;
+ if (rowIndex >= 0) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).prepend('<tr>' + data[i] + '</tr>');
+ }
+ }
+ }
+
+ // Much easier to go through each of the rows once they've all be added.
+ rows = jQuery('#filter-log-entries>tr');
+ for (var i = 0; i < rows.length; i++) {
+ rows[i].className = i % 2 == 0 ? 'listMRodd' : 'listMReven';
+ }
+}
+
+function toggle_pause() {
+ if(isPaused) {
+ isPaused = false;
+ fetch_new_rules();
+ } else {
+ isPaused = true;
+ }
+}
+/* start local AJAX engine */
+if (typeof updateDelay != 'undefined') {
+ timer = setInterval('fetch_new_rules()', updateDelay);
+}
+
+function toggleListDescriptions(){
+ var ss = document.styleSheets;
+ for (var i=0; i<ss.length; i++) {
+ var rules = ss[i].cssRules || ss[i].rules;
+ for (var j=0; j<rules.length; j++) {
+ if (rules[j].selectorText === ".listMRDescriptionL" || rules[j].selectorText === ".listMRDescriptionR") {
+ rules[j].style.display = rules[j].style.display === "none" ? "table-cell" : "none";
+ }
+ }
+ }
+}
diff --git a/src/usr/local/www/javascript/firebug-lite.js b/src/usr/local/www/javascript/firebug-lite.js
new file mode 100644
index 0000000..135b9e6
--- /dev/null
+++ b/src/usr/local/www/javascript/firebug-lite.js
@@ -0,0 +1,1000 @@
+/**
+ * firebug lite <http://www.getfirebug.com/lite.html>
+ * v1.0
+ * 04.11.2008, 8:25 PM ~
+ * v1.0a
+ * 03.27.2008, 5:44 AM ~ 04.01.2008, 21:32 PM
+ * Azer Koçulu <http://azer.kodfabrik.com>
+ */
+
+var firebug = {
+ env:{ "cache":{}, "ctmp":[], "dIndex":"console", "init":false, "ml":false, "objCn":[] },
+ init:function(){
+ firebug.el = {}; // elements
+ firebug.el.content = {};
+ with(firebug){
+
+ document.documentElement.childNodes[0].appendChild(
+ new pi.element("link").attribute.set("rel","stylesheet").attribute.set("href","http://firebuglite.appspot.com/firebug-lite.css").environment.getElement()
+ );
+
+ /*
+ * main interface
+ */
+ el.main = new pi.element("DIV").attribute.set("id","Firebug").environment.addStyle({ "width":pi.util.GetWindowSize().width+"px" }).insert(document.body);
+ el.header = new pi.element("DIV").attribute.addClass("Header").insert(el.main);
+ el.left = {};
+ el.left.container = new pi.element("DIV").attribute.addClass("Left").insert(el.main);
+ el.right = {};
+ el.right.container = new pi.element("DIV").attribute.addClass("Right").insert(el.main);
+ el.main.child.add(new pi.element("DIV").environment.addStyle({ "clear":"both" }));
+
+ /*
+ * buttons
+ */
+ el.button = {};
+ el.button.container = new pi.element("DIV").attribute.addClass("ButtonContainer").insert(el.header);
+ el.button.logo = new pi.element("A").attribute.set("title","Firebug Lite").attribute.set("target","_blank").attribute.set("href","http://getfirebug.com/lite.html").update("&nbsp;").attribute.addClass("Button Logo").insert(el.button.container);
+ el.button.inspect = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.inspector.toggle).update("Inspect").insert(el.button.container);
+ el.button.maximize = new pi.element("A").attribute.addClass("Button Maximize").event.addListener("click",win.maximize).insert(el.button.container);
+ el.button.minimize = new pi.element("A").attribute.addClass("Button Minimize").event.addListener("click",win.minimize).insert(el.button.container);
+ el.button.close = new pi.element("A").attribute.addClass("Button Close").event.addListener("click",win.close).insert(el.button.container);
+
+ if(pi.env.ie||pi.env.webkit){
+ el.button.container.environment.addStyle({ "paddingTop":"12px" });
+ }
+
+ /*
+ * navigation
+ */
+ el.nav = {};
+ el.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.left.container);
+ el.nav.console = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.navigate.curry(window,"console")).update("Console").insert(el.nav.container);
+ el.nav.html = new pi.element("A").attribute.addClass("Tab").update("HTML").event.addListener("click",d.navigate.curry(window,"html")).insert(el.nav.container);
+ el.nav.css = new pi.element("A").attribute.addClass("Tab").update("CSS").event.addListener("click",d.navigate.curry(window,"css")).insert(el.nav.container);
+ el.nav.scripts = new pi.element("A").attribute.addClass("Tab").update("Script").event.addListener("click",d.navigate.curry(window,"scripts")).insert(el.nav.container);
+ el.nav.dom = new pi.element("A").attribute.addClass("Tab").update("DOM").event.addListener("click",d.navigate.curry(window,"dom")).insert(el.nav.container);
+ el.nav.xhr = new pi.element("A").attribute.addClass("Tab").update("XHR").event.addListener("click",d.navigate.curry(window,"xhr")).insert(el.nav.container);
+
+ /*
+ * inspector
+ */
+
+ el.borderInspector = new pi.element("DIV").attribute.set("id","FirebugBorderInspector").event.addListener("click",listen.inspector).insert(document.body);
+ el.bgInspector = new pi.element("DIV").attribute.set("id","FirebugBGInspector").insert(document.body);
+
+ /*
+ * console
+ */
+ el.left.console = {};
+ el.left.console.container = new pi.element("DIV").attribute.addClass("Console").insert(el.left.container);
+ el.left.console.mlButton = new pi.element("A").attribute.addClass("MLButton").event.addListener("click",d.console.toggleML).insert(el.left.console.container);
+ el.left.console.monitor = new pi.element("DIV").insert(
+ new pi.element("DIV").attribute.addClass("Monitor").insert(el.left.console.container)
+ );
+ el.left.console.container.child.add(
+ new pi.element("DIV").attribute.addClass("InputArrow").update(">>>")
+ );
+ el.left.console.input = new pi.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert(
+ new pi.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container)
+ );
+
+ el.right.console = {};
+ el.right.console.container = new pi.element("DIV").attribute.addClass("Console Container").insert(el.right.container);
+ el.right.console.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container);
+ el.right.console.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container);
+ el.right.console.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container);
+
+ el.right.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.console.input)).update("Clear").insert(el.right.console.container);
+
+ el.button.console = {};
+ el.button.console.container = new pi.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container);
+ el.button.console.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.left.console.monitor)).update("Clear").insert(el.button.console.container);
+
+ /*
+ * html
+ */
+
+ el.left.html = {};
+ el.left.html.container = new pi.element("DIV").attribute.addClass("HTML").insert(el.left.container);
+
+ el.right.html = {};
+ el.right.html.container = new pi.element("DIV").attribute.addClass("HTML Container").insert(el.right.container);
+
+ el.right.html.nav = {};
+ el.right.html.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.html.container);
+ el.right.html.nav.computedStyle = new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.html.navigate.curry(firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container);
+ if(!pi.env.ie6)
+ el.right.html.nav.dom = new pi.element("A").attribute.addClass("Tab").event.addListener("click",d.html.navigate.curry(firebug,"dom")).update("DOM").insert(el.right.html.nav.container);
+
+ el.right.html.content = new pi.element("DIV").attribute.addClass("Content").insert(el.right.html.container);
+
+ el.button.html = {};
+ el.button.html.container = new pi.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container);
+
+ /*
+ * css
+ */
+
+ el.left.css = {};
+ el.left.css.container = new pi.element("DIV").attribute.addClass("CSS").insert(el.left.container);
+
+ el.right.css = {};
+ el.right.css.container = new pi.element("DIV").attribute.addClass("CSS Container").insert(el.right.container);
+
+ el.right.css.nav = {};
+ el.right.css.nav.container = new pi.element("DIV").attribute.addClass("Nav").insert(el.right.css.container);
+ el.right.css.nav.runCSS = new pi.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container);
+
+ el.right.css.mlButton = new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container);
+ el.right.css.input = new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container);
+ el.right.css.run = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container);
+ el.right.css.clear = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.css.input)).update("Clear").insert(el.right.css.container);
+
+ el.button.css = {};
+ el.button.css.container = new pi.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container);
+ el.button.css.selectbox = new pi.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container);
+
+ /*
+ * scripts
+ */
+
+ el.left.scripts = {};
+ el.left.scripts.container = new pi.element("DIV").attribute.addClass("Scripts").insert(el.left.container);
+
+ el.right.scripts = {};
+ el.right.scripts.container = new pi.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container);
+
+ el.button.scripts = {};
+ el.button.scripts.container = new pi.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container);
+ el.button.scripts.selectbox = new pi.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container);
+ el.button.scripts.lineNumbers = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container);
+
+ /*
+ * dom
+ */
+
+ el.left.dom = {};
+ el.left.dom.container = new pi.element("DIV").attribute.addClass("DOM").insert(el.left.container);
+
+ el.right.dom = {};
+ el.right.dom.container = new pi.element("DIV").attribute.addClass("DOM Container").insert(el.right.container);
+
+ el.button.dom = {};
+ el.button.dom.container = new pi.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container);
+ el.button.dom.label = new pi.element("LABEL").update("Object Path:").insert(el.button.dom.container);
+ el.button.dom.textbox = new pi.element("INPUT").event.addListener("keydown",listen.domTextbox).update("window").insert(el.button.dom.container);
+
+ /*
+ * str
+ */
+
+ el.left.str = {};
+ el.left.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);
+
+ el.right.str = {};
+ el.right.str.container = new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);
+
+ el.button.str = {};
+ el.button.str.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
+ el.button.str.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",d.navigate.curry(window,"xhr")).update("Back").insert(el.button.str.container);
+
+ /*
+ * xhr
+ */
+
+ el.left.xhr = {};
+ el.left.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);
+
+ el.right.xhr = {};
+ el.right.xhr.container = new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);
+
+
+ el.button.xhr = {};
+ el.button.xhr.container = new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);
+ el.button.xhr.label = new pi.element("LABEL").update("XHR Path:").insert(el.button.xhr.container);
+ el.button.xhr.textbox = new pi.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container);
+ el.button.xhr.watch = new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container);
+
+ // fix ie6 a:hover bug
+ if(pi.env.ie6)
+ {
+ var buttons = [
+ el.button.inspect,
+ el.button.close,
+ el.button.inspect,
+ el.button.console.clear,
+ el.right.console.run,
+ el.right.console.clear,
+ el.right.css.run,
+ el.right.css.clear
+ ];
+ for(var i=0; i<buttons.length; i++)
+ buttons[i].attribute.set("href","#");
+ }
+ //
+
+ env.init = true;
+
+ for(var i=0; i<env.ctmp.length; i++)
+ {
+ d.console.log.apply(window,env.ctmp[i]);
+ }
+ }
+ },
+ win:{
+ close:function(){
+ with(firebug){
+ el.main.update("");
+ el.main.remove();
+ }
+ },
+ minimize:function(){
+ with(firebug){
+ el.main.environment.addStyle({ "height":"35px" });
+ el.button.maximize.environment.addStyle({ "display":"block" });
+ el.button.minimize.environment.addStyle({ "display":"none" });
+ d.refreshSize();
+ }
+ },
+ maximize:function(){
+ with(firebug){
+ el.main.environment.addStyle({ "height":"295px" });
+ el.button.minimize.environment.addStyle({ "display":"block" });
+ el.button.maximize.environment.addStyle({ "display":"none" });
+ d.refreshSize();
+ }
+ }
+ },
+ watchXHR:function(){
+ with(firebug){
+ d.xhr.addObject.apply(window,arguments);
+ if(env.dIndex!="xhr"){
+ d.navigate("xhr");
+ }
+ }
+ },
+ d: {
+ clean:function(_element){
+ with(firebug){
+ _element.update("");
+ }
+ },
+ console:{
+ dir:function(_value){
+ with(firebug){
+ d.console.addLine().attribute.addClass("Arrow").update(">>> console.dir("+_value+")");
+ d.dom.open(_value,d.console.addLine());
+ }
+ },
+ addLine:function(){
+ with (firebug) {
+ return new pi.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor);
+ }
+ },
+ openObject:function(_index){
+ with (firebug) {
+ d.dom.open(env.objCn[_index], el.left.dom.container, pi.env.ie);
+ d.navigate("dom");
+ }
+ },
+ historyIndex:0,
+ history:[],
+ log:function(_values){
+ with (firebug) {
+ if(env.init==false){
+ env.ctmp.push(arguments);
+ return;
+ }
+
+ var value = "";
+ for(var i=0; i<arguments.length; i++){
+ value += (i>0?" ":"")+d.highlight(arguments[i],false,false,true);
+ }
+
+ d.console.addLine().update(value);
+ d.console.scroll();
+
+ }
+ },
+ print: function(_cmd,_text){
+ with (firebug){
+ d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd);
+ d.console.addLine().update(d.highlight(_text,false,false,true));
+ d.console.scroll();
+ d.console.historyIndex = d.console.history.push(_cmd);
+ }
+ },
+ run:function(cmd){
+ with(firebug){
+ if(cmd.length==0)return;
+ el.left.console.input.environment.getElement().value = "";
+ try {
+ var result = eval.call(window,cmd);
+ d.console.print(cmd,result);
+ } catch(e){
+ d.console.addLine().attribute.addClass("Arrow").update(">>> "+cmd);
+ if(!pi.env.ff){
+ d.console.scroll();
+ return d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+(e.description||e),true);
+ }
+ if(e.fileName==null){
+ d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+e.message,true);
+ }
+ var fileName = e.fileName.split("\/").getLastItem();
+ d.console.addLine().attribute.addClass("Error").update("<strong>Error: </strong>"+e.message+" (<em>"+fileName+"</em>,"+e.lineNumber+")",true);
+ d.console.scroll();
+ }
+ d.console.scroll();
+ }
+ },
+ scroll:function(){
+ with(firebug){
+ el.left.console.monitor.environment.getElement().parentNode.scrollTop = Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-200);
+ }
+ },
+ toggleML:function(){
+ with(firebug){
+ var open = !env.ml;
+ env.ml = !env.ml;
+ d.navigateRightColumn("console",open);
+ el[open?"left":"right"].console.mlButton.environment.addStyle({ display:"none" });
+ el[!open?"left":"right"].console.mlButton.environment.addStyle({ display:"block" });
+ el.left.console.monitor.environment.addStyle({ "height":(open?233:210)+"px" });
+ el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML");
+ }
+ }
+ },
+ css:{
+ index:-1,
+ open:function(_index){
+ with (firebug) {
+ var item = document.styleSheets[_index];
+ var uri = item.href;
+ if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){
+ el.left.css.container.update("<em>Access to restricted URI denied</em>");
+ return;
+ }
+ var rules = item[pi.env.ie ? "rules" : "cssRules"];
+ var str = "";
+ for (var i=0; i<rules.length; i++) {
+ var item = rules[i];
+ var selector = item.selectorText;
+ var cssText = pi.env.ie?item.style.cssText:item.cssText.match(/\{(.*)\}/)[1];
+ str+=d.css.printRule(selector, cssText.split(";"), el.left.css.container);
+ }
+ el.left.css.container.update(str);
+ }
+ },
+ printRule:function(_selector,_css,_layer){
+ with(firebug){
+ var str = "<div class='Selector'>"+_selector+" {</div>";
+ for(var i=0; i<_css.length; i++){
+ var item = _css[i];
+ str += "<div class='CSSText'>"+item.replace(/(.+\:)(.+)/,"<span class='CSSProperty'>$1</span><span class='CSSValue'>$2;</span>")+"</div>";
+ }
+ str+="<div class='Selector'>}</div>";
+ return str;
+ }
+ },
+ refresh:function(){
+ with(firebug){
+ el.button.css.selectbox.update("");
+ var collection = document.styleSheets;
+ for(var i=0; i<collection.length; i++){
+ var uri = collection[i].href;
+ d.css.index=d.css.index<0?i:d.css.index;
+ el.button.css.selectbox.child.add(
+ new pi.element("OPTION").attribute.set("value",i).update(uri)
+ );
+ };
+ d.css.open(d.css.index);
+ }
+ }
+ },
+ dom: {
+ open: function(_object,_layer){
+ with (firebug) {
+ _layer.clean();
+ var container = new pi.element("DIV").attribute.addClass("DOMContent").insert(_layer);
+ d.dom.print(_object, container);
+ }
+ },
+ print:function(_object,_parent, _inTree){
+ with (firebug) {
+ var obj = _object || window, parentElement = _parent;
+ parentElement.update("");
+
+ if(parentElement.opened&&parentElement!=el.left.dom.container){
+ parentElement.environment.getParent().pi.child.get()[0].pi.child.get()[0].pi.attribute.removeClass("Opened");
+ parentElement.opened = false;
+ parentElement.environment.addStyle({ "display":"none" });
+ return;
+ }
+ if(_inTree)
+ parentElement.environment.getParent().pi.child.get()[0].pi.child.get()[0].pi.attribute.addClass("Opened");
+ parentElement.opened = true;
+
+ for (var key in obj) {
+ try {
+
+ var value = obj[key], property = key, container = new pi.element("DIV").attribute.addClass("DOMRow").insert(parentElement),
+ left = new pi.element("DIV").attribute.addClass("DOMRowLeft").insert(container), right = new pi.element("DIV").attribute.addClass("DOMRowRight").insert(container);
+
+ container.child.add(
+ new pi.element("DIV").environment.addStyle({ "clear":"both" })
+ );
+
+ var link = new pi.element("A").attribute.addClass(
+ typeof value=="object"&&Boolean(value)?"Property Object":"Property"
+ ).update(property).insert(left);
+
+ right.update(
+ d.highlight(value,false,true)
+ );
+
+ var subContainer = new pi.element("DIV").attribute.addClass("DOMRowSubContainer").insert(container);
+
+ if(typeof value!="object"||Boolean(value)==false)
+ continue;
+
+ link.event.addListener("click",d.dom.print.curry(window,value, subContainer, true));
+ }catch(e){
+ }
+ }
+ parentElement.environment.addStyle({ "display":"block" });
+ }
+ }
+ },
+ highlight:function(_value,_inObject,_inArray,_link){
+ with(firebug){
+ var isArray = false, isElement = false;
+ try {
+ isArray = pi.util.IsArray(_value);
+ isElement = _value!=undefined&&Boolean(_value.nodeName)&&Boolean(_value.nodeType);
+ }catch(e){};
+
+ // number, string, boolean, null, function
+ if(_value==null||["boolean","function","number","string"].indexOf(typeof _value)>-1){
+ // NULL
+ if(_value==null){
+ return "<span class='Null'>null</span>";
+ }
+
+ // BOOLEAN & NUMBER
+ if (["boolean", "number"].indexOf(typeof _value) > -1) {
+ return "<span class='DarkBlue'>" + _value + "</span>";
+ }
+
+ // FUNCTION
+ if(typeof _value=="function"){
+ return "<span class='"+(_inObject?"Italic Gray":"Green")+"'>function()</span>";
+ }
+
+ // STRING
+ return "<span class='Red'>\""+( !_inObject&&!_inArray?_value : _value.substring(0,35) ).replace(/\n/g,"\\n").replace(/\s/g,"&nbsp;").replace(/>/g,"&#62;").replace(/</g,"&#60;")+"\"</span>";
+ }
+ // element
+ else if(isElement){
+ if(_value.nodeType==3)return d.highlight(_value.nodeValue);
+
+ if(_inArray||_inObject){
+ var result = "<span class='Blue'>"+_value.nodeName.toLowerCase();
+ if(_value.getAttribute&&_value.getAttribute("id"))result += "<span class='DarkBlue'>#"+_value.getAttribute("id")+"</span>";
+ var elClass = _value.getAttribute?_value.getAttribute(pi.env.ie?"className":"class"):"";
+ if(elClass)result += "<span class='Red'>."+elClass.split(" ")[0]+"</span>";
+ return result+"</span>";
+ }
+
+ var result = "<span class='Blue'>&#60;"+_value.nodeName.toLowerCase()+"";
+ if(_value.attributes)
+ for(var i=0; i<_value.attributes.length; i++){
+ var item = _value.attributes[i];
+ if(pi.env.ie&&Boolean(item.nodeValue)==false)continue;
+ result += " <span class='DarkBlue'>"+item.nodeName+"=\"<span class='Red'>"+item.nodeValue+"</span>\"</span>";
+ }
+ result += "&#62;</span>";
+ return result;
+ }
+ // array & object
+ else if(isArray||["object","array"].indexOf(typeof _value)>-1){
+ var result = "";
+ if(isArray||_value instanceof Array){
+ if(_inObject)return "<span class='Gray Italic'>["+_value.length+"]</span>";
+ result += "<span class='Strong'>[ ";
+
+ for(var i=0; i<_value.length; i++){
+ if((_inObject||_inArray)&&pi.env.ie&&i>3)break;
+ result += (i > 0 ? ", " : "") + d.highlight(_value[i], false, true, true);
+ }
+ result += " ]</span>";
+ return result;
+ }
+ if(_inObject)return "<span class='Gray Italic'>Object</span>";
+ result += "<span class='Strong Green"+ ( !_link?"'":" ObjectLink' onmouseover='this.className=this.className.replace(\"ObjectLink\",\"ObjectLinkHover\")' onmouseout='this.className=this.className.replace(\"ObjectLinkHover\",\"ObjectLink\")' onclick='firebug.d.console.openObject(" +( env.objCn.push( _value ) -1 )+")'" ) + ">Object";
+ var i=0;
+ for(var key in _value){
+ var value = _value[key];
+ if((_inObject||_inArray)&&pi.env.ie&&i>3)
+ break;
+ result += " "+key+"="+d.highlight(value,true);
+ i++;
+ };
+ result += "</span>";
+ return result;
+ } else {
+ if(_inObject)
+ return "<span class='Gray Italic'>"+_value+"</span>";
+ return _value;
+ }
+
+ }
+ },
+ html:{
+ nIndex:"computedStyle",
+ current:null,
+ highlight:function(_element,_clear,_event){
+ with(firebug){
+ if(_clear){
+ el.bgInspector.environment.addStyle({ "display":"none" });
+ return;
+ }
+ d.inspector.inspect(_element,true);
+ }
+ },
+ inspect:function(_element){
+ var el = _element, map = [], parent = _element;
+ while(parent){
+ map.push(parent);
+ if(parent==document.body)break;
+ parent = parent.parentNode;
+ }
+ map = map.reverse();
+ with(firebug){
+ d.inspector.toggle();
+ var parentLayer = el.left.html.container.child.get()[1].childNodes[1].pi;
+ for(var t=0; map[t];){
+ if(t==map.length-1){
+
+ var link = parentLayer.environment.getElement().previousSibling.pi;
+ link.attribute.addClass("Selected");
+
+ if(d.html.current)d.html.current[1].attribute.removeClass("Selected");
+
+ d.html.current = [_element,link];
+
+ return t;
+ }
+ parentLayer = d.html.openHtmlTree(map[t],parentLayer,map[t+1]);
+ t++;
+ }
+ }
+ },
+ navigate:function(_index,_element){
+ with(firebug){
+ el.right.html.nav[d.html.nIndex].attribute.removeClass("Selected");
+ el.right.html.nav[_index].attribute.addClass("Selected");
+ d.html.nIndex = _index;
+ d.html.openProperties();
+
+ }
+ },
+ openHtmlTree:function(_element,_parent,_returnParentElementByElement,_event){
+ with(firebug){
+ var element = _element || document.documentElement,
+ parent = _parent || el.left.html.container,
+ returnParentEl = _returnParentElementByElement || null,
+ returnParentVal = null;
+
+ if(parent!=el.left.html.container){
+ var nodeLink = parent.environment.getParent().pi.child.get()[0].pi;
+ if(d.html.current)d.html.current[1].attribute.removeClass("Selected");
+ nodeLink.attribute.addClass("Selected");
+
+ d.html.current = [_element,nodeLink];
+ d.html.openProperties();
+ }
+
+ if(element.childNodes&&(element.childNodes.length==0||(element.childNodes.length==1&&element.childNodes[0].nodeType==3)))return;
+ parent.clean();
+
+ if(parent.opened&&Boolean(_returnParentElementByElement)==false){
+ parent.opened = false;
+ parent.environment.getParent().pi.child.get()[0].pi.attribute.removeClass("Open");
+ return;
+ }
+ if (parent != el.left.html.container) {
+ parent.environment.getParent().pi.child.get()[0].pi.attribute.addClass("Open");
+ parent.opened = true;
+
+ }
+
+ for(var i=0; i<element.childNodes.length; i++){
+ var item = element.childNodes[i];
+
+ if(item.nodeType==3)continue;
+ var container = new pi.element().attribute.addClass("Block").insert(parent);
+ var link = new pi.element("A").attribute.addClass("Link").update(d.highlight(item)).insert(container);
+ var subContainer = new pi.element("DIV").attribute.addClass("SubContainer").insert(container);
+ link.event.addListener("click",d.html.openHtmlTree.curry(window,item,subContainer,false));
+ link.event.addListener("mouseover",d.html.highlight.curry(window,item, false));
+ link.event.addListener("mouseout",d.html.highlight.curry(window,item,true));
+
+ returnParentVal = returnParentEl==item?subContainer:returnParentVal;
+
+ if(d.html.current==null&&item==document.body){
+ link.attribute.addClass("Selected");
+ d.html.current = [item,link];
+ d.html.openHtmlTree(item,subContainer);
+ }
+
+ if(item.childNodes&&item.childNodes.length==1&&item.childNodes[0].nodeType==3){
+ link.child.get()[0].appendChild(document.createTextNode(item.childNodes[0].nodeValue.substring(0,100)));
+ link.child.get()[0].appendChild(document.createTextNode("</"));
+ link.child.get()[0].appendChild(new pi.element("span").attribute.addClass("Blue").update(item.nodeName.toLowerCase()).environment.getElement());
+ link.child.get()[0].appendChild(document.createTextNode(">"));
+ continue;
+ }
+ else if(item.childNodes&&item.childNodes.length==0)continue;
+ link.attribute.addClass("ParentLink");
+
+ }
+ return returnParentVal;
+ }
+ },
+ openProperties:function(){
+ with(firebug){
+
+ var index = d.html.nIndex;
+ var node = d.html.current[0];
+ d.clean(el.right.html.content);
+ var str = "";
+ switch(index){
+ case "computedStyle":
+ var property = ["opacity","filter","azimuth","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderCollapse","borderColor","borderSpacing","borderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","cssFloat","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginTop","marginRight","marginBottom","marginLeft","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"].sort();
+ var view = document.defaultView?document.defaultView.getComputedStyle(node,null):node.currentStyle;
+ for(var i=0; i<property.length; i++){
+ var item = property[i];
+ if(!view[item])continue;
+ str+="<div class='CSSItem'><div class='CSSProperty'>"+item+"</div><div class='CSSValue'>"+d.highlight(view[item])+"</div></div>";
+ }
+ el.right.html.content.update(str);
+ break;
+ case "dom":
+ d.dom.open(node,el.right.html.content,pi.env.ie);
+ break;
+ }
+ }
+ }
+ },
+ inspector:{
+ enabled:false,
+ el:null,
+ inspect:function(_element,_bgInspector){
+ var el = _element, top = el.offsetTop, left = el.offsetLeft, parent = _element.offsetParent;
+ while(Boolean(parent)&&parent!=document.firstChild){
+ top += parent.offsetTop;
+ left += parent.offsetLeft;
+ parent = parent.offsetParent;
+ if(parent==document.body)break;
+ };
+
+ with(firebug){
+ el[_bgInspector?"bgInspector":"borderInspector"].environment.addStyle({
+ "width":_element.offsetWidth+"px", "height":_element.offsetHeight+"px",
+ "top":top-(_bgInspector?0:2)+"px", "left":left-(_bgInspector?0:2)+"px",
+ "display":"block"
+ });
+
+ if(!_bgInspector){
+ d.inspector.el = _element;
+ }
+ };
+ },
+ toggle:function(){
+ with (firebug) {
+ d.inspector.enabled = !d.inspector.enabled;
+ el.button.inspect.attribute[(d.inspector.enabled ? "add" : "remove") + "Class"]("Enabled");
+ if(d.inspector.enabled==false){
+ el.borderInspector.environment.addStyle({ "display":"none" });
+ d.inspector.el = null;
+ } else if(pi.env.dIndex!="html") {
+ d.navigate("html");
+ }
+ }
+ }
+ },
+ scripts:{
+ index:-1,
+ lineNumbers:false,
+ open:function(_index){
+ with(firebug){
+ d.scripts.index = _index;
+ el.left.scripts.container.update("");
+ var script = document.getElementsByTagName("script")[_index],uri = script.src||document.location.href,source;
+
+ if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){
+ el.left.scripts.container.update("<em>Access to restricted URI denied</em>");
+ return;
+ }
+
+ if(uri!=document.location.href){
+ source = env.cache[uri]||pi.xhr.get(uri).responseText;
+ env.cache[uri] = source;
+ } else
+ source = script.innerHTML;
+ source = source.replace(/\n|\t|<|>/g,function(_ch){
+ return ({"<":"&#60;",">":"&#62;","\t":"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;","\n":"<br />"})[_ch];
+ });
+
+ if (!d.scripts.lineNumbers)
+ el.left.scripts.container.child.add(
+ new pi.element("DIV").attribute.addClass("CodeContainer").update(source)
+ );
+ else {
+ source = source.split("<br />");
+ for (var i = 0; i < source.length; i++) {
+ el.left.scripts.container.child.add(new pi.element("DIV").child.add(new pi.element("DIV").attribute.addClass("LineNumber").update(i + 1), new pi.element("DIV").attribute.addClass("Code").update("&nbsp;" + source[i]), new pi.element("DIV").environment.addStyle({
+ "clear": "both"
+ })));
+ };
+ };
+ }
+ },
+ toggleLineNumbers:function(){
+ with(firebug){
+ d.scripts.lineNumbers = !d.scripts.lineNumbers;
+ el.button.scripts.lineNumbers.attribute[(d.scripts.lineNumbers ? "add" : "remove") + "Class"]("Enabled");
+ d.scripts.open( d.scripts.index );
+
+ }
+ },
+ refresh:function(){
+ with(firebug){
+ el.button.scripts.selectbox.clean();
+ var collection = document.getElementsByTagName("script");
+ for(var i=0; i<collection.length; i++){
+ var item = collection[i];
+ d.scripts.index=d.scripts.index<0?i:d.scripts.index;
+ el.button.scripts.selectbox.child.add(
+ new pi.element("OPTION").attribute.set("value",i).update(item.src||item.baseURI||"..")
+ );
+ }
+ d.scripts.open( d.scripts.index );
+ }
+ }
+ },
+ str: {
+ open:function(_str){
+ with(firebug){
+ d.navigate("str");
+ el.left.str.container.update(_str.replace(/\n/g,"<br />"))
+ }
+ }
+ },
+ xhr:{
+ objects:[],
+ addObject:function(){
+ with(firebug){
+ for(var i=0; i<arguments.length; i++){
+ try {
+ var item = arguments[i];
+ var val = eval(item);
+ d.xhr.objects.push([
+ item, val
+ ]);
+ } catch(e){
+ continue;
+ }
+ }
+ }
+ },
+ open:function(){
+ with(firebug){
+ el.left.xhr.container.update("");
+ el.left.xhr.name = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").attribute.addClass("Block").environment.addStyle({ "width":"20%" }).insert(el.left.xhr.container));
+ el.left.xhr.nameTitle = new pi.element("STRONG").update("Object Name:").insert(el.left.xhr.name);
+ el.left.xhr.nameContent = new pi.element("DIV").insert(el.left.xhr.name);
+ el.left.xhr.status = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").attribute.addClass("Block").environment.addStyle({ "width":"10%" }).insert(el.left.xhr.container));
+ el.left.xhr.statusTitle = new pi.element("STRONG").update("Status:").insert(el.left.xhr.status);
+ el.left.xhr.statusContent = new pi.element("DIV").insert(el.left.xhr.status);
+ el.left.xhr.readystate = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").environment.addStyle({ "width":"15%" }).attribute.addClass("Block").insert(el.left.xhr.container));
+ el.left.xhr.readystateTitle =el.left.xhr.nameTitle = new pi.element("STRONG").update("Ready State:").insert(el.left.xhr.readystate);
+ el.left.xhr.readystateContent = new pi.element("DIV").insert(el.left.xhr.readystate);
+ el.left.xhr.response = new pi.element("DIV").attribute.addClass("BlockContent").insert(new pi.element("DIV").environment.addStyle({ "width":(pi.env.ie?"50":"55")+"%" }).attribute.addClass("Block").insert(el.left.xhr.container));
+ el.left.xhr.responseTitle = new pi.element("STRONG").update("Response:").insert(el.left.xhr.response);
+ el.left.xhr.responseContent = new pi.element("DIV").insert(el.left.xhr.response);
+ setTimeout(d.xhr.refresh,500);
+ }
+ },
+ refresh:function(){
+ with(firebug){
+ el.left.xhr.nameContent.update("");
+ el.left.xhr.statusContent.update("");
+ el.left.xhr.readystateContent.update("");
+ el.left.xhr.responseContent.update("");
+ for(var i=0; i<d.xhr.objects.length; i++){
+ var item = d.xhr.objects[i];
+ var response = item[1].responseText;
+ if(Boolean(item[1])==false)continue;
+ el.left.xhr.nameContent.child.add(new pi.element("span").update(item[0]));
+ try { 
+ el.left.xhr.statusContent.child.add(new pi.element("span").update(item[1].status));
+ } catch(e){ el.left.xhr.statusContent.child.add(new pi.element("span").update("&nbsp;")); }
+ el.left.xhr.readystateContent.child.add(new pi.element("span").update(item[1].readyState));
+
+ el.left.xhr.responseContent.child.add(new pi.element("span").child.add(
+ new pi.element("A").event.addListener("click",d.str.open.curry(window,response)).update("&nbsp;"+response.substring(0,50))
+ ));
+ };
+ if(env.dIndex=="xhr")
+ setTimeout(d.xhr.refresh,500);
+ }
+ }
+ },
+ navigateRightColumn:function(_index,_open){
+ with(firebug){
+ el.left.container.environment.addStyle({ "width":_open?"70%":"100%" });
+ el.right.container.environment.addStyle({ "display":_open?"block":"none" });
+ }
+ },
+ navigate:function(_index){
+ with(firebug){
+
+ var open = _index, close = env.dIndex;
+ env.dIndex = open;
+
+ el.button[close].container.environment.addStyle({ "display":"none" });
+ el.left[close].container.environment.addStyle({ "display":"none" });
+ el.right[close].container.environment.addStyle({ "display":"none" });
+
+ el.button[open].container.environment.addStyle({ "display":"inline" });
+ el.left[open].container.environment.addStyle({ "display":"block" });
+ el.right[open].container.environment.addStyle({ "display":"block" });
+
+ if(el.nav[close])
+ el.nav[close].attribute.removeClass("Selected");
+ if(el.nav[open])
+ el.nav[open].attribute.addClass("Selected");
+
+ switch(open){
+ case "console":
+ d.navigateRightColumn(_index);
+ break;
+ case "html":
+ d.navigateRightColumn(_index,true);
+ d.html.openHtmlTree();
+ break;
+ case "css":
+ d.navigateRightColumn(_index,true);
+ d.css.refresh();
+ break;
+ case "scripts":
+ d.navigateRightColumn(_index);
+ d.scripts.refresh();
+ break;
+ case "dom":
+ d.navigateRightColumn(_index);
+ if(el.left.dom.container.environment.getElement().innerHTML=="")
+ d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container);
+ break;
+ case "xhr":
+ d.navigateRightColumn(_index);
+ d.xhr.open();
+ break;
+ }
+
+ }
+ },
+ refreshSize:function(){
+ with(firebug){
+ el.main.environment.addStyle({ "width":pi.util.GetWindowSize().width+"px"});
+ if(pi.env.ie6)
+ el.main.environment.addStyle({ "top":pi.util.GetWindowSize().height-el.main.environment.getSize().offsetHeight+"px" });
+ }
+ }
+ },
+ getDomain:function(_url){
+ return _url.match(/http:\/\/(www.)?([\.\w]+)/)[2];
+ },
+ listen: {
+ addXhrObject:function(){
+ with(firebug){
+ d.xhr.addObject.apply(window, el.button.xhr.textbox.environment.getElement().value.split(","));
+ }
+ },
+ consoleTextbox:function(_event){
+ with(firebug){
+ if(_event.keyCode==13&&(env.multilinemode==false||_event.shiftKey==false)){
+ d.console.historyIndex = d.console.history.length;
+ d.console.run(el.left.console.input.environment.getElement().value);
+ return false;
+ }
+ if([13,38,40].indexOf(_event.keyCode)==-1)
+ return;
+ d.console.historyIndex+=_event.keyCode!=40?0:d.console.historyIndex==d.console.history.length?0:1;
+ d.console.historyIndex-=_event.keyCode!=38?0:d.console.historyIndex==0?0:1;
+ el.left.console.input.update(
+ d.console.history.length > d.console.historyIndex ?
+ d.console.history[d.console.historyIndex] :
+ ""
+ );
+ }
+ },
+ cssSelectbox:function(){
+ with(firebug){
+ d.css.open(el.button.css.selectbox.environment.getElement().selectedIndex);
+ }
+ },
+ domTextbox:function(_event){
+ with(firebug){
+ if(_event.keyCode==13){
+ d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container);
+ }
+ }
+ },
+ inspector:function(){
+ with(firebug){
+ d.html.inspect(d.inspector.el);
+ }
+ },
+ keyboard:function(_event){
+ with(firebug){
+ if(_event.keyCode==27&&d.inspector.enabled)
+ d.inspector.toggle();
+ }
+ },
+ mouse:function(_event){
+ with(firebug){
+ var target = _event[pi.env.ie?"srcElement":"target"];
+ if(
+ d.inspector.enabled&&
+ target!=document.body&&
+ target!=document.firstChild&&
+ target!=document.childNodes[1]&&
+ target!=el.borderInspector.environment.getElement()&&
+ target!=el.main.environment.getElement()&&
+ target.offsetParent!=el.main.environment.getElement()
+ )
+ d.inspector.inspect(target);
+ }
+ },
+ runMultiline:function(){
+ with(firebug){
+ d.console.run.call(window,el.right.console.input.environment.getElement().value);
+ }
+ },
+ runCSS:function(){
+ with(firebug){
+ var source = el.right.css.input.environment.getElement().value.replace(/\n|\t/g,"").split("}");
+ for(var i=0; i<source.length; i++){
+ var item = source[i]+"}", rule = !pi.env.ie?item:item.split(/{|}/), collection = document.getElementsByTagName("style"),
+ style = collection.length>0?collection[0]:document.body.appendChild( document.createElement("style") );
+ if(!item.match(/.+\{.+\}/))continue;
+ if(pi.env.ie)
+ style.styleSheet.addRule(rule[0],rule[1]);
+ else
+ style.sheet.insertRule( rule, style.sheet.cssRules.length );
+ }
+ }
+ },
+ scriptsSelectbox:function(){
+ with(firebug){
+ d.scripts.open(parseInt(el.button.scripts.selectbox.environment.getElement().value));
+ }
+ },
+ xhrTextbox:function(_event){
+ with(firebug){
+ if(_event.keyCode==13){
+ d.xhr.addObject.apply(window, el.button.xhr.textbox.environment.getElement().value.split(","));
+ }
+ }
+ }
+ }
+};
+
+window.console = firebug.d.console;
+pi.util.AddEvent(window,"resize",firebug.d.refreshSize);
+pi.util.AddEvent(document,"mousemove",firebug.listen.mouse);
+pi.util.AddEvent(document,"keydown",firebug.listen.keyboard);
+pi.util.DOMContentLoaded.push(firebug.init); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/firewall_nat_edit/autosuggest.js b/src/usr/local/www/javascript/firewall_nat_edit/autosuggest.js
new file mode 100644
index 0000000..d9b5ac0
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_nat_edit/autosuggest.js
@@ -0,0 +1,337 @@
+
+/**
+ * An autosuggest textbox control.
+ * @class
+ * @scope public
+ */
+function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
+ oProvider /*:SuggestionProvider*/) {
+
+ /**
+ * The currently selected suggestions.
+ * @scope private
+ */
+ this.cur /*:int*/ = -1;
+
+ /**
+ * The dropdown list layer.
+ * @scope private
+ */
+ this.layer = null;
+
+ /**
+ * Suggestion provider for the autosuggest feature.
+ * @scope private.
+ */
+ this.provider /*:SuggestionProvider*/ = oProvider;
+
+ /**
+ * The textbox to capture.
+ * @scope private
+ */
+ this.textbox /*:HTMLInputElement*/ = oTextbox;
+
+ //initialize the control
+ this.init();
+
+}
+
+/**
+ * Autosuggests one or more suggestions for what the user has typed.
+ * If no suggestions are passed in, then no autosuggest occurs.
+ * @scope private
+ * @param aSuggestions An array of suggestion strings.
+ * @param bTypeAhead If the control should provide a type ahead suggestion.
+ */
+AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
+ bTypeAhead /*:boolean*/) {
+
+ //make sure there's at least one suggestion
+ if (aSuggestions.length > 0) {
+ if (bTypeAhead) {
+ this.typeAhead(aSuggestions[0]);
+ }
+
+ this.showSuggestions(aSuggestions);
+ } else {
+ this.hideSuggestions();
+ }
+};
+
+/**
+ * Creates the dropdown layer to display multiple suggestions.
+ * @scope private
+ */
+AutoSuggestControl.prototype.createDropDown = function () {
+
+ var oThis = this;
+
+ //create the layer and assign styles
+ this.layer = document.createElement("div");
+ this.layer.className = "suggestions";
+ this.layer.style.visibility = "hidden";
+ this.layer.style.width = this.textbox.offsetWidth;
+
+ //when the user clicks on the a suggestion, get the text (innerHTML)
+ //and place it into a textbox
+ this.layer.onmousedown =
+ this.layer.onmouseup =
+ this.layer.onmouseover = function (oEvent) {
+ oEvent = oEvent || window.event;
+ oTarget = oEvent.target || oEvent.srcElement;
+
+ if (oEvent.type == "mousedown") {
+ oThis.textbox.value = oTarget.firstChild.nodeValue;
+ oThis.hideSuggestions();
+ } else if (oEvent.type == "mouseover") {
+ oThis.highlightSuggestion(oTarget);
+ } else {
+ oThis.textbox.focus();
+ }
+ };
+
+
+ document.body.appendChild(this.layer);
+};
+
+/**
+ * Gets the left coordinate of the textbox.
+ * @scope private
+ * @return The left coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iLeft = 0;
+
+ while(oNode.tagName != "BODY") {
+ iLeft += oNode.offsetLeft;
+ oNode = oNode.offsetParent;
+ }
+
+ return iLeft;
+};
+
+/**
+ * Gets the top coordinate of the textbox.
+ * @scope private
+ * @return The top coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getTop = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iTop = 0;
+
+ while(oNode.tagName != "BODY") {
+ iTop += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+
+ return iTop;
+};
+
+/**
+ * Handles three keydown events.
+ * @scope private
+ * @param oEvent The event object for the keydown event.
+ */
+AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
+
+ switch(oEvent.keyCode) {
+ case 38: //up arrow
+ this.previousSuggestion();
+ break;
+ case 40: //down arrow
+ this.nextSuggestion();
+ break;
+ case 13: //enter
+ this.hideSuggestions();
+ break;
+ }
+
+};
+
+/**
+ * Handles keyup events.
+ * @scope private
+ * @param oEvent The event object for the keyup event.
+ */
+AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
+
+ var iKeyCode = oEvent.keyCode;
+
+ //for backspace (8) and delete (46), shows suggestions without typeahead
+ if (iKeyCode == 8 || iKeyCode == 46) {
+ this.provider.requestSuggestions(this, false);
+
+ //make sure not to interfere with non-character keys
+ } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
+ //ignore
+ } else {
+ //request suggestions from the suggestion provider with typeahead
+ this.provider.requestSuggestions(this, true);
+ }
+};
+
+/**
+ * Hides the suggestion dropdown.
+ * @scope private
+ */
+AutoSuggestControl.prototype.hideSuggestions = function () {
+ this.layer.style.visibility = "hidden";
+};
+
+/**
+ * Highlights the given node in the suggestions dropdown.
+ * @scope private
+ * @param oSuggestionNode The node representing a suggestion in the dropdown.
+ */
+AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
+
+ for (var i=0; i < this.layer.childNodes.length; i++) {
+ var oNode = this.layer.childNodes[i];
+ if (oNode == oSuggestionNode) {
+ oNode.className = "current";
+ } else if (oNode.className == "current") {
+ oNode.className = "";
+ }
+ }
+};
+
+/**
+ * Initializes the textbox with event handlers for
+ * auto suggest functionality.
+ * @scope private
+ */
+AutoSuggestControl.prototype.init = function () {
+
+ //save a reference to this object
+ var oThis = this;
+
+ //assign the onkeyup event handler
+ this.textbox.onkeyup = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyUp() method with the event object
+ oThis.handleKeyUp(oEvent);
+ };
+
+ //assign onkeydown event handler
+ this.textbox.onkeydown = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyDown() method with the event object
+ oThis.handleKeyDown(oEvent);
+ };
+
+ //assign onblur event handler (hides suggestions)
+ this.textbox.onblur = function () {
+ oThis.hideSuggestions();
+ };
+
+ //create the suggestions dropdown
+ this.createDropDown();
+};
+
+/**
+ * Highlights the next suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.nextSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
+ var oNode = cSuggestionNodes[++this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Highlights the previous suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.previousSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur > 0) {
+ var oNode = cSuggestionNodes[--this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Selects a range of text in the textbox.
+ * @scope public
+ * @param iStart The start index (base 0) of the selection.
+ * @param iLength The number of characters to select.
+ */
+AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
+
+ //use text ranges for Internet Explorer
+ if (this.textbox.createTextRange) {
+ var oRange = this.textbox.createTextRange();
+ oRange.moveStart("character", iStart);
+ oRange.moveEnd("character", iLength - this.textbox.value.length);
+ oRange.select();
+
+ //use setSelectionRange() for Mozilla
+ } else if (this.textbox.setSelectionRange) {
+ this.textbox.setSelectionRange(iStart, iLength);
+ }
+
+ //set focus back to the textbox
+ this.textbox.focus();
+};
+
+/**
+ * Builds the suggestion layer contents, moves it into position,
+ * and displays the layer.
+ * @scope private
+ * @param aSuggestions An array of suggestions for the control.
+ */
+AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
+
+ var oDiv = null;
+ this.layer.innerHTML = ""; //clear contents of the layer
+
+ for (var i=0; i < aSuggestions.length; i++) {
+ oDiv = document.createElement("div");
+ oDiv.appendChild(document.createTextNode(aSuggestions[i]));
+ this.layer.appendChild(oDiv);
+ }
+
+ this.layer.style.left = this.getLeft() + "px";
+ this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
+ this.layer.style.width = this.textbox.offsetWidth + "px";
+ this.layer.style.visibility = "visible";
+
+};
+
+/**
+ * Inserts a suggestion into the textbox, highlighting the
+ * suggested part of the text.
+ * @scope private
+ * @param sSuggestion The suggestion for the textbox.
+ */
+AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
+
+ //check for support of typeahead functionality
+ if (this.textbox.createTextRange || this.textbox.setSelectionRange){
+ var iLen = this.textbox.value.length;
+ this.textbox.value = sSuggestion;
+ this.selectRange(iLen, sSuggestion.length);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/firewall_nat_edit/disablekeys.js b/src/usr/local/www/javascript/firewall_nat_edit/disablekeys.js
new file mode 100644
index 0000000..5d6c87a
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_nat_edit/disablekeys.js
@@ -0,0 +1,6 @@
+function kH(e) {
+ var pK = document.all? window.event.keyCode:e.which;
+ return pK != 13;
+}
+document.onkeypress = kH;
+if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js b/src/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js
new file mode 100644
index 0000000..7007b40
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_nat_edit/firewall_nat_edit.js
@@ -0,0 +1,203 @@
+//<![CDATA[
+var portsenabled = 1;
+var dstenabled = 1;
+var showsource = 0;
+
+function ext_change() {
+ if ((document.iform.srcbeginport.selectedIndex == 0) && portsenabled) {
+ document.iform.srcbeginport_cust.disabled = 0;
+ } else {
+ document.iform.srcbeginport_cust.value = "";
+ document.iform.srcbeginport_cust.disabled = 1;
+ }
+ if ((document.iform.srcendport.selectedIndex == 0) && portsenabled) {
+ document.iform.srcendport_cust.disabled = 0;
+ } else {
+ document.iform.srcendport_cust.value = "";
+ document.iform.srcendport_cust.disabled = 1;
+ }
+ if ((document.iform.dstbeginport.selectedIndex == 0) && portsenabled && dstenabled) {
+ document.iform.dstbeginport_cust.disabled = 0;
+ } else {
+ document.iform.dstbeginport_cust.value = "";
+ document.iform.dstbeginport_cust.disabled = 1;
+ }
+ if ((document.iform.dstendport.selectedIndex == 0) && portsenabled && dstenabled) {
+ document.iform.dstendport_cust.disabled = 0;
+ } else {
+ document.iform.dstendport_cust.value = "";
+ document.iform.dstendport_cust.disabled = 1;
+ }
+
+ if ((document.iform.localbeginport.selectedIndex == 0) && portsenabled) {
+ document.iform.localbeginport_cust.disabled = 0;
+ } else {
+ document.iform.localbeginport_cust.value = "";
+ document.iform.localbeginport_cust.disabled = 1;
+ }
+
+ if (!portsenabled) {
+ document.iform.srcbeginport.disabled = 1;
+ document.iform.srcendport.disabled = 1;
+ document.iform.dstbeginport.disabled = 1;
+ document.iform.dstendport.disabled = 1;
+ document.iform.localbeginport_cust.disabled = 1;
+ } else {
+ document.iform.srcbeginport.disabled = 0;
+ document.iform.srcendport.disabled = 0;
+ document.iform.localbeginport_cust.disabled = 0;
+ if( dstenabled ) {
+ document.iform.dstbeginport.disabled = 0;
+ document.iform.dstendport.disabled = 0;
+ }
+ }
+}
+
+function nordr_change() {
+ if (document.iform.nordr.checked) {
+ document.getElementById("localiptable").style.display = 'none';
+ document.getElementById("lprtr").style.display = 'none';
+ document.getElementById("assoctable").style.display = 'none';
+ } else {
+ document.getElementById("localiptable").style.display = '';
+ document.getElementById("lprtr").style.display = portsenabled ? '' : 'none';
+ document.getElementById("assoctable").style.display = '';
+ }
+}
+
+function show_source() {
+ if(portsenabled)
+ document.getElementById("sprtable").style.display = '';
+
+ document.getElementById("srctable").style.display = '';
+ document.getElementById("showadvancedboxsrc").style.display = 'none';
+ showsource = 1;
+}
+
+function check_for_aliases() {
+ /* if External port range is an alias, then disallow
+ * entry of Local port
+ */
+ for(i=0; i<customarray.length; i++) {
+ if(document.iform.dstbeginport_cust.value == customarray[i]) {
+ document.iform.dstendport_cust.value = customarray[i];
+ document.iform.localbeginport_cust.value = customarray[i];
+ document.iform.dstendport_cust.disabled = 1;
+ document.iform.localbeginport.disabled = 1;
+ document.iform.localbeginport_cust.disabled = 1;
+ document.iform.dstendport_cust.disabled = 0;
+ document.iform.localbeginport.disabled = 0;
+ document.iform.localbeginport_cust.disabled = 0;
+ }
+ if(document.iform.dstbeginport.value == customarray[i]) {
+ document.iform.dstendport_cust.value = customarray[i];
+ document.iform.localbeginport_cust.value = customarray[i];
+ document.iform.dstendport_cust.disabled = 1;
+ document.iform.localbeginport.disabled = 1;
+ document.iform.localbeginport_cust.disabled = 1;
+ document.iform.dstendport_cust.disabled = 0;
+ document.iform.localbeginport.disabled = 0;
+ document.iform.localbeginport_cust.disabled = 0;
+ }
+ if(document.iform.dstendport_cust.value == customarray[i]) {
+ document.iform.dstendport_cust.value = customarray[i];
+ document.iform.localbeginport_cust.value = customarray[i];
+ document.iform.dstendport_cust.disabled = 1;
+ document.iform.localbeginport.disabled = 1;
+ document.iform.localbeginport_cust.disabled = 1;
+ document.iform.dstendport_cust.disabled = 0;
+ document.iform.localbeginport.disabled = 0;
+ document.iform.localbeginport_cust.disabled = 0;
+ }
+ if(document.iform.dstendport.value == customarray[i]) {
+ document.iform.dstendport_cust.value = customarray[i];
+ document.iform.localbeginport_cust.value = customarray[i];
+ document.iform.dstendport_cust.disabled = 1;
+ document.iform.localbeginport.disabled = 1;
+ document.iform.localbeginport_cust.disabled = 1;
+ document.iform.dstendport_cust.disabled = 0;
+ document.iform.localbeginport.disabled = 0;
+ document.iform.localbeginport_cust.disabled = 0;
+ }
+
+ }
+}
+
+function proto_change() {
+ if (document.iform.proto.selectedIndex >= 0 && document.iform.proto.selectedIndex <= 2) {
+ portsenabled = 1;
+ } else {
+ portsenabled = 0;
+ }
+
+ if (portsenabled) {
+ document.getElementById("sprtable").style.display = showsource == 1 ? '':'none';
+ document.getElementById("dprtr").style.display = '';
+ document.getElementById("lprtr").style.display = document.iform.nordr.checked ? 'none' : '';
+ } else {
+ document.getElementById("sprtable").style.display = 'none';
+ document.getElementById("dprtr").style.display = 'none';
+ document.getElementById("lprtr").style.display = 'none';
+ document.getElementById("dstbeginport").selectedIndex = 0;
+ document.getElementById("dstbeginport_cust").value = "";
+ document.getElementById("dstendport").selectedIndex = 0;
+ document.getElementById("dstendport_cust").value = "";
+ document.getElementById("localbeginport").selectedIndex = 0;
+ document.getElementById("localbeginport_cust").value = "";
+ }
+}
+
+function typesel_change() {
+ switch (document.iform.srctype.selectedIndex) {
+ case 1: /* single */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.disabled = 0;
+ break;
+ default:
+ document.iform.src.value = "";
+ document.iform.src.disabled = 1;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ }
+ if( dstenabled )
+ {
+ switch (document.iform.dsttype.selectedIndex) {
+ case 1: /* single */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.disabled = 0;
+ break;
+ default:
+ document.iform.dst.value = "";
+ document.iform.dst.disabled = 1;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ }
+ }
+}
+
+function src_rep_change() {
+ document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex;
+}
+
+function dst_rep_change() {
+ document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex;
+}
+
+function dst_change( iface, old_iface, old_dst ) {
+ if ( ( old_dst == "" ) || ( old_iface.concat("ip") == old_dst ) ) {
+ document.iform.dsttype.value = iface.concat("ip");
+ }
+}
+//]]>
diff --git a/src/usr/local/www/javascript/firewall_nat_edit/suggestions.js b/src/usr/local/www/javascript/firewall_nat_edit/suggestions.js
new file mode 100644
index 0000000..4d1e127
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_nat_edit/suggestions.js
@@ -0,0 +1,33 @@
+
+/**
+ * Provides suggestions for state names (USA).
+ * @class
+ * @scope public
+ */
+function StateSuggestions(text) {
+ this.states = text;
+}
+
+/**
+ * Request suggestions for the given autosuggest control.
+ * @scope protected
+ * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
+ */
+StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
+ bTypeAhead /*:boolean*/) {
+ var aSuggestions = [];
+ var sTextboxValue = oAutoSuggestControl.textbox.value;
+
+ if (sTextboxValue.length > 0){
+
+ //search for matching states
+ for (var i=0; i < this.states.length; i++) {
+ if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
+ aSuggestions.push(this.states[i]);
+ }
+ }
+ }
+
+ //provide suggestions to the control
+ oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
+};
diff --git a/src/usr/local/www/javascript/firewall_rules_edit/autosuggest.js b/src/usr/local/www/javascript/firewall_rules_edit/autosuggest.js
new file mode 100644
index 0000000..d9b5ac0
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_rules_edit/autosuggest.js
@@ -0,0 +1,337 @@
+
+/**
+ * An autosuggest textbox control.
+ * @class
+ * @scope public
+ */
+function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
+ oProvider /*:SuggestionProvider*/) {
+
+ /**
+ * The currently selected suggestions.
+ * @scope private
+ */
+ this.cur /*:int*/ = -1;
+
+ /**
+ * The dropdown list layer.
+ * @scope private
+ */
+ this.layer = null;
+
+ /**
+ * Suggestion provider for the autosuggest feature.
+ * @scope private.
+ */
+ this.provider /*:SuggestionProvider*/ = oProvider;
+
+ /**
+ * The textbox to capture.
+ * @scope private
+ */
+ this.textbox /*:HTMLInputElement*/ = oTextbox;
+
+ //initialize the control
+ this.init();
+
+}
+
+/**
+ * Autosuggests one or more suggestions for what the user has typed.
+ * If no suggestions are passed in, then no autosuggest occurs.
+ * @scope private
+ * @param aSuggestions An array of suggestion strings.
+ * @param bTypeAhead If the control should provide a type ahead suggestion.
+ */
+AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
+ bTypeAhead /*:boolean*/) {
+
+ //make sure there's at least one suggestion
+ if (aSuggestions.length > 0) {
+ if (bTypeAhead) {
+ this.typeAhead(aSuggestions[0]);
+ }
+
+ this.showSuggestions(aSuggestions);
+ } else {
+ this.hideSuggestions();
+ }
+};
+
+/**
+ * Creates the dropdown layer to display multiple suggestions.
+ * @scope private
+ */
+AutoSuggestControl.prototype.createDropDown = function () {
+
+ var oThis = this;
+
+ //create the layer and assign styles
+ this.layer = document.createElement("div");
+ this.layer.className = "suggestions";
+ this.layer.style.visibility = "hidden";
+ this.layer.style.width = this.textbox.offsetWidth;
+
+ //when the user clicks on the a suggestion, get the text (innerHTML)
+ //and place it into a textbox
+ this.layer.onmousedown =
+ this.layer.onmouseup =
+ this.layer.onmouseover = function (oEvent) {
+ oEvent = oEvent || window.event;
+ oTarget = oEvent.target || oEvent.srcElement;
+
+ if (oEvent.type == "mousedown") {
+ oThis.textbox.value = oTarget.firstChild.nodeValue;
+ oThis.hideSuggestions();
+ } else if (oEvent.type == "mouseover") {
+ oThis.highlightSuggestion(oTarget);
+ } else {
+ oThis.textbox.focus();
+ }
+ };
+
+
+ document.body.appendChild(this.layer);
+};
+
+/**
+ * Gets the left coordinate of the textbox.
+ * @scope private
+ * @return The left coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iLeft = 0;
+
+ while(oNode.tagName != "BODY") {
+ iLeft += oNode.offsetLeft;
+ oNode = oNode.offsetParent;
+ }
+
+ return iLeft;
+};
+
+/**
+ * Gets the top coordinate of the textbox.
+ * @scope private
+ * @return The top coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getTop = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iTop = 0;
+
+ while(oNode.tagName != "BODY") {
+ iTop += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+
+ return iTop;
+};
+
+/**
+ * Handles three keydown events.
+ * @scope private
+ * @param oEvent The event object for the keydown event.
+ */
+AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
+
+ switch(oEvent.keyCode) {
+ case 38: //up arrow
+ this.previousSuggestion();
+ break;
+ case 40: //down arrow
+ this.nextSuggestion();
+ break;
+ case 13: //enter
+ this.hideSuggestions();
+ break;
+ }
+
+};
+
+/**
+ * Handles keyup events.
+ * @scope private
+ * @param oEvent The event object for the keyup event.
+ */
+AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
+
+ var iKeyCode = oEvent.keyCode;
+
+ //for backspace (8) and delete (46), shows suggestions without typeahead
+ if (iKeyCode == 8 || iKeyCode == 46) {
+ this.provider.requestSuggestions(this, false);
+
+ //make sure not to interfere with non-character keys
+ } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
+ //ignore
+ } else {
+ //request suggestions from the suggestion provider with typeahead
+ this.provider.requestSuggestions(this, true);
+ }
+};
+
+/**
+ * Hides the suggestion dropdown.
+ * @scope private
+ */
+AutoSuggestControl.prototype.hideSuggestions = function () {
+ this.layer.style.visibility = "hidden";
+};
+
+/**
+ * Highlights the given node in the suggestions dropdown.
+ * @scope private
+ * @param oSuggestionNode The node representing a suggestion in the dropdown.
+ */
+AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
+
+ for (var i=0; i < this.layer.childNodes.length; i++) {
+ var oNode = this.layer.childNodes[i];
+ if (oNode == oSuggestionNode) {
+ oNode.className = "current";
+ } else if (oNode.className == "current") {
+ oNode.className = "";
+ }
+ }
+};
+
+/**
+ * Initializes the textbox with event handlers for
+ * auto suggest functionality.
+ * @scope private
+ */
+AutoSuggestControl.prototype.init = function () {
+
+ //save a reference to this object
+ var oThis = this;
+
+ //assign the onkeyup event handler
+ this.textbox.onkeyup = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyUp() method with the event object
+ oThis.handleKeyUp(oEvent);
+ };
+
+ //assign onkeydown event handler
+ this.textbox.onkeydown = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyDown() method with the event object
+ oThis.handleKeyDown(oEvent);
+ };
+
+ //assign onblur event handler (hides suggestions)
+ this.textbox.onblur = function () {
+ oThis.hideSuggestions();
+ };
+
+ //create the suggestions dropdown
+ this.createDropDown();
+};
+
+/**
+ * Highlights the next suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.nextSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
+ var oNode = cSuggestionNodes[++this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Highlights the previous suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.previousSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur > 0) {
+ var oNode = cSuggestionNodes[--this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Selects a range of text in the textbox.
+ * @scope public
+ * @param iStart The start index (base 0) of the selection.
+ * @param iLength The number of characters to select.
+ */
+AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
+
+ //use text ranges for Internet Explorer
+ if (this.textbox.createTextRange) {
+ var oRange = this.textbox.createTextRange();
+ oRange.moveStart("character", iStart);
+ oRange.moveEnd("character", iLength - this.textbox.value.length);
+ oRange.select();
+
+ //use setSelectionRange() for Mozilla
+ } else if (this.textbox.setSelectionRange) {
+ this.textbox.setSelectionRange(iStart, iLength);
+ }
+
+ //set focus back to the textbox
+ this.textbox.focus();
+};
+
+/**
+ * Builds the suggestion layer contents, moves it into position,
+ * and displays the layer.
+ * @scope private
+ * @param aSuggestions An array of suggestions for the control.
+ */
+AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
+
+ var oDiv = null;
+ this.layer.innerHTML = ""; //clear contents of the layer
+
+ for (var i=0; i < aSuggestions.length; i++) {
+ oDiv = document.createElement("div");
+ oDiv.appendChild(document.createTextNode(aSuggestions[i]));
+ this.layer.appendChild(oDiv);
+ }
+
+ this.layer.style.left = this.getLeft() + "px";
+ this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
+ this.layer.style.width = this.textbox.offsetWidth + "px";
+ this.layer.style.visibility = "visible";
+
+};
+
+/**
+ * Inserts a suggestion into the textbox, highlighting the
+ * suggested part of the text.
+ * @scope private
+ * @param sSuggestion The suggestion for the textbox.
+ */
+AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
+
+ //check for support of typeahead functionality
+ if (this.textbox.createTextRange || this.textbox.setSelectionRange){
+ var iLen = this.textbox.value.length;
+ this.textbox.value = sSuggestion;
+ this.selectRange(iLen, sSuggestion.length);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/firewall_rules_edit/disablekeys.js b/src/usr/local/www/javascript/firewall_rules_edit/disablekeys.js
new file mode 100644
index 0000000..5d6c87a
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_rules_edit/disablekeys.js
@@ -0,0 +1,6 @@
+function kH(e) {
+ var pK = document.all? window.event.keyCode:e.which;
+ return pK != 13;
+}
+document.onkeypress = kH;
+if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js b/src/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js
new file mode 100644
index 0000000..de1ff0c
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_rules_edit/firewall_rules_edit.js
@@ -0,0 +1,237 @@
+//<![CDATA[
+var portsenabled = 1;
+var editenabled = 1;
+
+function ext_change() {
+ if ((document.iform.srcbeginport.selectedIndex == 0) && portsenabled && editenabled) {
+ document.iform.srcbeginport_cust.disabled = 0;
+ } else {
+ if (editenabled)
+ document.iform.srcbeginport_cust.value = "";
+ document.iform.srcbeginport_cust.disabled = 1;
+ }
+ if ((document.iform.srcendport.selectedIndex == 0) && portsenabled && editenabled) {
+ document.iform.srcendport_cust.disabled = 0;
+ } else {
+ if (editenabled)
+ document.iform.srcendport_cust.value = "";
+ document.iform.srcendport_cust.disabled = 1;
+ }
+ if ((document.iform.dstbeginport.selectedIndex == 0) && portsenabled && editenabled) {
+ document.iform.dstbeginport_cust.disabled = 0;
+ } else {
+ if (editenabled)
+ document.iform.dstbeginport_cust.value = "";
+ document.iform.dstbeginport_cust.disabled = 1;
+ }
+ if ((document.iform.dstendport.selectedIndex == 0) && portsenabled && editenabled) {
+ document.iform.dstendport_cust.disabled = 0;
+ } else {
+ if (editenabled)
+ document.iform.dstendport_cust.value = "";
+ document.iform.dstendport_cust.disabled = 1;
+ }
+
+ if (!portsenabled) {
+ document.iform.srcbeginport.disabled = 1;
+ document.iform.srcendport.disabled = 1;
+ document.iform.dstbeginport.disabled = 1;
+ document.iform.dstendport.disabled = 1;
+ } else {
+ if( editenabled ) {
+ document.iform.srcbeginport.disabled = 0;
+ document.iform.srcendport.disabled = 0;
+ document.iform.dstbeginport.disabled = 0;
+ document.iform.dstendport.disabled = 0;
+ }
+ }
+}
+
+function show_source_port_range() {
+ if (portsenabled) {
+ document.getElementById("sprtable").style.display = '';
+ document.getElementById("showadvancedboxspr").style.display = 'none';
+ }
+}
+
+function typesel_change() {
+ if( editenabled ) {
+ switch (document.iform.srctype.selectedIndex) {
+ case 1: /* single */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.src.disabled = 0;
+ document.iform.srcmask.disabled = 0;
+ break;
+ default:
+ document.iform.src.value = "";
+ document.iform.src.disabled = 1;
+ document.iform.srcmask.value = "";
+ document.iform.srcmask.disabled = 1;
+ break;
+ }
+ switch (document.iform.dsttype.selectedIndex) {
+ case 1: /* single */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ case 2: /* network */
+ document.iform.dst.disabled = 0;
+ document.iform.dstmask.disabled = 0;
+ break;
+ default:
+ document.iform.dst.value = "";
+ document.iform.dst.disabled = 1;
+ document.iform.dstmask.value = "";
+ document.iform.dstmask.disabled = 1;
+ break;
+ }
+ }
+}
+
+function proto_change() {
+ if (document.iform.proto.selectedIndex < 3) {
+ portsenabled = 1;
+ document.getElementById("tcpflags").style.display = '';
+ } else {
+ portsenabled = 0;
+ document.getElementById("tcpflags").style.display = 'none';
+ }
+
+ /* Disable OS knob if the proto is not TCP. */
+ if (document.iform.proto.selectedIndex < 1) {
+ document.forms[0].os.disabled = 0;
+ } else {
+ document.forms[0].os.disabled = 1;
+ }
+
+ if (document.iform.proto.selectedIndex == 3) {
+ document.iform.icmptype.disabled = 0;
+ document.iform.icmp6type.disabled = 0;
+ } else {
+ document.iform.icmptype.disabled = 1;
+ document.iform.icmp6type.disabled = 1;
+ }
+
+ ext_change();
+
+ if(document.iform.proto.selectedIndex == 3 || document.iform.proto.selectedIndex == 4) {
+ if(document.iform.ipprotocol.selectedIndex == 0) { // IPv4
+ document.getElementById("icmpbox").style.display = '';
+ document.getElementById("icmp6box").style.display = 'none';
+ } else if(document.iform.ipprotocol.selectedIndex == 1) { // IPv6
+ document.getElementById("icmpbox").style.display = 'none';
+ document.getElementById("icmp6box").style.display = '';
+ } else { // IPv4 + IPv6
+ document.getElementById("icmpbox").style.display = 'none';
+ document.getElementById("icmp6box").style.display = 'none';
+ }
+ } else {
+ document.getElementById("icmpbox").style.display = 'none';
+ document.getElementById("icmp6box").style.display = 'none';
+ }
+
+ if(document.iform.proto.selectedIndex >= 0 && document.iform.proto.selectedIndex <= 2) {
+ document.getElementById("dprtr").style.display = '';
+ if (editenabled) {
+ document.getElementById("showadvancedboxspr").style.display = 'table-row';
+ }
+ } else {
+ document.getElementById("sprtable").style.display = 'none';
+ document.getElementById("dprtr").style.display = 'none';
+ document.getElementById("showadvancedboxspr").style.display = 'none';
+ }
+}
+
+function show_aodiv() {
+ document.getElementById("aoadv").innerHTML='';
+ aodiv = document.getElementById('aodivmain');
+ aodiv.style.display = "block";
+}
+
+function show_dsdiv() {
+ document.getElementById("dsadv").innerHTML='';
+ dsdiv = document.getElementById('dsdivmain');
+ dsdiv.style.display = "block";
+}
+
+function show_advanced_noxmlrpc() {
+ document.getElementById("showadvnoxmlrpcsyncbox").innerHTML='';
+ aodiv = document.getElementById('shownoxmlrpcadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_vlanprio() {
+ document.getElementById("showadvvlanpriobox").innerHTML='';
+ aodiv = document.getElementById('showvlanprioadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_schedule() {
+ document.getElementById("showadvschedulebox").innerHTML='';
+ aodiv = document.getElementById('showscheduleadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_gateway() {
+ document.getElementById("showadvgatewaybox").innerHTML='';
+ aodiv = document.getElementById('showgatewayadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_sourceos() {
+ document.getElementById("showadvsourceosbox").innerHTML='';
+ aodiv = document.getElementById('showsourceosadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_ackqueue() {
+ document.getElementById("showadvackqueuebox").innerHTML='';
+ aodiv = document.getElementById('showackqueueadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_inout() {
+ document.getElementById("showadvinoutbox").innerHTML='';
+ aodiv = document.getElementById('showinoutadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_state() {
+ document.getElementById("showadvstatebox").innerHTML='';
+ aodiv = document.getElementById('showstateadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_tcpflags() {
+ document.getElementById("showtcpflagsbox").innerHTML='';
+ aodiv = document.getElementById('showtcpflagsadv');
+ aodiv.style.display = "block";
+}
+
+function show_advanced_layer7() {
+ document.getElementById("showadvlayer7box").innerHTML='';
+ aodiv = document.getElementById('showlayer7adv');
+ aodiv.style.display = "block";
+}
+
+function src_rep_change() {
+ document.iform.srcendport.selectedIndex = document.iform.srcbeginport.selectedIndex;
+}
+
+function dst_rep_change() {
+ document.iform.dstendport.selectedIndex = document.iform.dstbeginport.selectedIndex;
+}
+
+function tcpflags_anyclick(obj) {
+ if (obj.checked) {
+ document.getElementById('tcpheader').style.display= 'none';
+ } else {
+ document.getElementById('tcpheader').style.display= "";
+ }
+}
+//]]>
diff --git a/src/usr/local/www/javascript/firewall_rules_edit/suggestions.js b/src/usr/local/www/javascript/firewall_rules_edit/suggestions.js
new file mode 100644
index 0000000..4d1e127
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_rules_edit/suggestions.js
@@ -0,0 +1,33 @@
+
+/**
+ * Provides suggestions for state names (USA).
+ * @class
+ * @scope public
+ */
+function StateSuggestions(text) {
+ this.states = text;
+}
+
+/**
+ * Request suggestions for the given autosuggest control.
+ * @scope protected
+ * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
+ */
+StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
+ bTypeAhead /*:boolean*/) {
+ var aSuggestions = [];
+ var sTextboxValue = oAutoSuggestControl.textbox.value;
+
+ if (sTextboxValue.length > 0){
+
+ //search for matching states
+ for (var i=0; i < this.states.length; i++) {
+ if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
+ aSuggestions.push(this.states[i]);
+ }
+ }
+ }
+
+ //provide suggestions to the control
+ oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
+};
diff --git a/src/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js b/src/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js
new file mode 100644
index 0000000..d9b5ac0
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_shaper_edit/autosuggest.js
@@ -0,0 +1,337 @@
+
+/**
+ * An autosuggest textbox control.
+ * @class
+ * @scope public
+ */
+function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
+ oProvider /*:SuggestionProvider*/) {
+
+ /**
+ * The currently selected suggestions.
+ * @scope private
+ */
+ this.cur /*:int*/ = -1;
+
+ /**
+ * The dropdown list layer.
+ * @scope private
+ */
+ this.layer = null;
+
+ /**
+ * Suggestion provider for the autosuggest feature.
+ * @scope private.
+ */
+ this.provider /*:SuggestionProvider*/ = oProvider;
+
+ /**
+ * The textbox to capture.
+ * @scope private
+ */
+ this.textbox /*:HTMLInputElement*/ = oTextbox;
+
+ //initialize the control
+ this.init();
+
+}
+
+/**
+ * Autosuggests one or more suggestions for what the user has typed.
+ * If no suggestions are passed in, then no autosuggest occurs.
+ * @scope private
+ * @param aSuggestions An array of suggestion strings.
+ * @param bTypeAhead If the control should provide a type ahead suggestion.
+ */
+AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
+ bTypeAhead /*:boolean*/) {
+
+ //make sure there's at least one suggestion
+ if (aSuggestions.length > 0) {
+ if (bTypeAhead) {
+ this.typeAhead(aSuggestions[0]);
+ }
+
+ this.showSuggestions(aSuggestions);
+ } else {
+ this.hideSuggestions();
+ }
+};
+
+/**
+ * Creates the dropdown layer to display multiple suggestions.
+ * @scope private
+ */
+AutoSuggestControl.prototype.createDropDown = function () {
+
+ var oThis = this;
+
+ //create the layer and assign styles
+ this.layer = document.createElement("div");
+ this.layer.className = "suggestions";
+ this.layer.style.visibility = "hidden";
+ this.layer.style.width = this.textbox.offsetWidth;
+
+ //when the user clicks on the a suggestion, get the text (innerHTML)
+ //and place it into a textbox
+ this.layer.onmousedown =
+ this.layer.onmouseup =
+ this.layer.onmouseover = function (oEvent) {
+ oEvent = oEvent || window.event;
+ oTarget = oEvent.target || oEvent.srcElement;
+
+ if (oEvent.type == "mousedown") {
+ oThis.textbox.value = oTarget.firstChild.nodeValue;
+ oThis.hideSuggestions();
+ } else if (oEvent.type == "mouseover") {
+ oThis.highlightSuggestion(oTarget);
+ } else {
+ oThis.textbox.focus();
+ }
+ };
+
+
+ document.body.appendChild(this.layer);
+};
+
+/**
+ * Gets the left coordinate of the textbox.
+ * @scope private
+ * @return The left coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iLeft = 0;
+
+ while(oNode.tagName != "BODY") {
+ iLeft += oNode.offsetLeft;
+ oNode = oNode.offsetParent;
+ }
+
+ return iLeft;
+};
+
+/**
+ * Gets the top coordinate of the textbox.
+ * @scope private
+ * @return The top coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getTop = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iTop = 0;
+
+ while(oNode.tagName != "BODY") {
+ iTop += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+
+ return iTop;
+};
+
+/**
+ * Handles three keydown events.
+ * @scope private
+ * @param oEvent The event object for the keydown event.
+ */
+AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
+
+ switch(oEvent.keyCode) {
+ case 38: //up arrow
+ this.previousSuggestion();
+ break;
+ case 40: //down arrow
+ this.nextSuggestion();
+ break;
+ case 13: //enter
+ this.hideSuggestions();
+ break;
+ }
+
+};
+
+/**
+ * Handles keyup events.
+ * @scope private
+ * @param oEvent The event object for the keyup event.
+ */
+AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
+
+ var iKeyCode = oEvent.keyCode;
+
+ //for backspace (8) and delete (46), shows suggestions without typeahead
+ if (iKeyCode == 8 || iKeyCode == 46) {
+ this.provider.requestSuggestions(this, false);
+
+ //make sure not to interfere with non-character keys
+ } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
+ //ignore
+ } else {
+ //request suggestions from the suggestion provider with typeahead
+ this.provider.requestSuggestions(this, true);
+ }
+};
+
+/**
+ * Hides the suggestion dropdown.
+ * @scope private
+ */
+AutoSuggestControl.prototype.hideSuggestions = function () {
+ this.layer.style.visibility = "hidden";
+};
+
+/**
+ * Highlights the given node in the suggestions dropdown.
+ * @scope private
+ * @param oSuggestionNode The node representing a suggestion in the dropdown.
+ */
+AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
+
+ for (var i=0; i < this.layer.childNodes.length; i++) {
+ var oNode = this.layer.childNodes[i];
+ if (oNode == oSuggestionNode) {
+ oNode.className = "current";
+ } else if (oNode.className == "current") {
+ oNode.className = "";
+ }
+ }
+};
+
+/**
+ * Initializes the textbox with event handlers for
+ * auto suggest functionality.
+ * @scope private
+ */
+AutoSuggestControl.prototype.init = function () {
+
+ //save a reference to this object
+ var oThis = this;
+
+ //assign the onkeyup event handler
+ this.textbox.onkeyup = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyUp() method with the event object
+ oThis.handleKeyUp(oEvent);
+ };
+
+ //assign onkeydown event handler
+ this.textbox.onkeydown = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyDown() method with the event object
+ oThis.handleKeyDown(oEvent);
+ };
+
+ //assign onblur event handler (hides suggestions)
+ this.textbox.onblur = function () {
+ oThis.hideSuggestions();
+ };
+
+ //create the suggestions dropdown
+ this.createDropDown();
+};
+
+/**
+ * Highlights the next suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.nextSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
+ var oNode = cSuggestionNodes[++this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Highlights the previous suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.previousSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur > 0) {
+ var oNode = cSuggestionNodes[--this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Selects a range of text in the textbox.
+ * @scope public
+ * @param iStart The start index (base 0) of the selection.
+ * @param iLength The number of characters to select.
+ */
+AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
+
+ //use text ranges for Internet Explorer
+ if (this.textbox.createTextRange) {
+ var oRange = this.textbox.createTextRange();
+ oRange.moveStart("character", iStart);
+ oRange.moveEnd("character", iLength - this.textbox.value.length);
+ oRange.select();
+
+ //use setSelectionRange() for Mozilla
+ } else if (this.textbox.setSelectionRange) {
+ this.textbox.setSelectionRange(iStart, iLength);
+ }
+
+ //set focus back to the textbox
+ this.textbox.focus();
+};
+
+/**
+ * Builds the suggestion layer contents, moves it into position,
+ * and displays the layer.
+ * @scope private
+ * @param aSuggestions An array of suggestions for the control.
+ */
+AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
+
+ var oDiv = null;
+ this.layer.innerHTML = ""; //clear contents of the layer
+
+ for (var i=0; i < aSuggestions.length; i++) {
+ oDiv = document.createElement("div");
+ oDiv.appendChild(document.createTextNode(aSuggestions[i]));
+ this.layer.appendChild(oDiv);
+ }
+
+ this.layer.style.left = this.getLeft() + "px";
+ this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
+ this.layer.style.width = this.textbox.offsetWidth + "px";
+ this.layer.style.visibility = "visible";
+
+};
+
+/**
+ * Inserts a suggestion into the textbox, highlighting the
+ * suggested part of the text.
+ * @scope private
+ * @param sSuggestion The suggestion for the textbox.
+ */
+AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
+
+ //check for support of typeahead functionality
+ if (this.textbox.createTextRange || this.textbox.setSelectionRange){
+ var iLen = this.textbox.value.length;
+ this.textbox.value = sSuggestion;
+ this.selectRange(iLen, sSuggestion.length);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js b/src/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js
new file mode 100644
index 0000000..5d6c87a
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_shaper_edit/disablekeys.js
@@ -0,0 +1,6 @@
+function kH(e) {
+ var pK = document.all? window.event.keyCode:e.which;
+ return pK != 13;
+}
+document.onkeypress = kH;
+if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js b/src/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js
new file mode 100644
index 0000000..b1b8df0
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_shaper_edit/firewall_shaper_edit.js
@@ -0,0 +1,37 @@
+//<![CDATA[
+function ext_change() {
+ if (document.iform.beginport.selectedIndex == 0) {
+ document.iform.beginport_cust.disabled = 0;
+ } else {
+ document.iform.beginport_cust.value = "";
+ document.iform.beginport_cust.disabled = 1;
+ }
+ if (document.iform.endport.selectedIndex == 0) {
+ document.iform.endport_cust.disabled = 0;
+ } else {
+ document.iform.endport_cust.value = "";
+ document.iform.endport_cust.disabled = 1;
+ }
+ if (document.iform.localbeginport.selectedIndex == 0) {
+ document.iform.localbeginport_cust.disabled = 0;
+ } else {
+ document.iform.localbeginport_cust.value = "";
+ document.iform.localbeginport_cust.disabled = 1;
+ }
+};
+function ext_rep_change() {
+ document.iform.endport.selectedIndex = document.iform.beginport.selectedIndex;
+ document.iform.localbeginport.selectedIndex = document.iform.beginport.selectedIndex;
+}
+
+
+window.onload = function () {
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("src"), new StateSuggestions(addressarray));
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("srcbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox3 = new AutoSuggestControl(document.getElementById("srcendport_cust"), new StateSuggestions(customarray));
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("dst"), new StateSuggestions(addressarray));
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("dstbeginport_cust"), new StateSuggestions(customarray));
+ var oTextbox3 = new AutoSuggestControl(document.getElementById("dstendport_cust"), new StateSuggestions(customarray));
+};
+
+//]]> \ No newline at end of file
diff --git a/src/usr/local/www/javascript/firewall_shaper_edit/suggestions.js b/src/usr/local/www/javascript/firewall_shaper_edit/suggestions.js
new file mode 100644
index 0000000..4d1e127
--- /dev/null
+++ b/src/usr/local/www/javascript/firewall_shaper_edit/suggestions.js
@@ -0,0 +1,33 @@
+
+/**
+ * Provides suggestions for state names (USA).
+ * @class
+ * @scope public
+ */
+function StateSuggestions(text) {
+ this.states = text;
+}
+
+/**
+ * Request suggestions for the given autosuggest control.
+ * @scope protected
+ * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
+ */
+StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
+ bTypeAhead /*:boolean*/) {
+ var aSuggestions = [];
+ var sTextboxValue = oAutoSuggestControl.textbox.value;
+
+ if (sTextboxValue.length > 0){
+
+ //search for matching states
+ for (var i=0; i < this.states.length; i++) {
+ if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
+ aSuggestions.push(this.states[i]);
+ }
+ }
+ }
+
+ //provide suggestions to the control
+ oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
+};
diff --git a/src/usr/local/www/javascript/global.js b/src/usr/local/www/javascript/global.js
new file mode 100644
index 0000000..0b67f58
--- /dev/null
+++ b/src/usr/local/www/javascript/global.js
@@ -0,0 +1,43 @@
+var AjaxQueue = {
+ batchSize: 1, //No.of simultaneous AJAX requests allowed, Default : 1
+ urlQueue: [], //Request URLs will be pushed into this array
+ elementsQueue: [], //Element IDs of elements to be updated on completion of a request
+ optionsQueue: [], //Request options will be pushed into this array
+ currentRequest: null,
+ setBatchSize: function(bSize){ //Method to set a different batch size. Recommended: Set batchSize before making requests
+ this.batchSize = bSize;
+ },
+ push: function(url, options, elementID){ //Push the request in the queue. elementID is optional and required only for Ajax requests that updates the element
+ this.urlQueue.push(url);
+ this.optionsQueue.push(options);
+ if(elementID!=null){
+ this.elementsQueue.push(elementID);
+ } else {
+ this.elementsQueue.push("NOTSPECIFIED");
+ }
+
+ this._processNext();
+ },
+ _processNext: function() { // Method for processing the requests in the queue. Private method. Don't call it explicitly
+ if(this.currentRequest == null && this.urlQueue.length > 0) // Check if the currently processing request count is less than batch size
+ {
+ // Call jQuery.ajax on the first item in the queue and remove it from the queue
+ AjaxQueue.currentRequest = jQuery.ajax(AjaxQueue.urlQueue.shift(), AjaxQueue.optionsQueue.shift());
+ AjaxQueue.currentRequest.complete( function() {
+ //Call AjaxQueue._processNext on completion ( success / failure) of this AJAX request.
+ AjaxQueue.currentRequest = null;
+ AjaxQueue._processNext();
+ });
+ if(this.elementsQueue[0]=="NOTSPECIFIED") { //Check if an elementID was specified
+ // If no ElementID was specified remove the first item from the queue
+ var junk = AjaxQueue.elementsQueue.shift();
+ } else {
+ // If ElementID was specified update the first item in the queue and remove it from the queue
+ AjaxQueue.currentRequest.success( function(data) {
+ jQuery(AjaxQueue.elementsQueue.shift()).html(data);
+ });
+ }
+ }
+ }
+};
+
diff --git a/src/usr/local/www/javascript/index/ajax.js b/src/usr/local/www/javascript/index/ajax.js
new file mode 100644
index 0000000..274b8c0
--- /dev/null
+++ b/src/usr/local/www/javascript/index/ajax.js
@@ -0,0 +1,196 @@
+/* Most widgets update their backend data every 10 seconds. 11 seconds
+ * will ensure that we update the GUI right after the stats are updated.
+ * Seconds * 1000 = value
+ */
+var Seconds = 11;
+var update_interval = (Math.abs(Math.ceil(Seconds))-1)*1000 + 990;
+
+function updateMeters() {
+ url = '/getstats.php';
+
+ jQuery.ajax(url, {
+ type: 'get',
+ success: function(data) {
+ response = data || "";
+ if (response != "")
+ stats(data);
+ }
+ });
+ setTimer();
+}
+
+function setTimer() {
+ timeout = window.setTimeout('updateMeters()', update_interval);
+}
+
+function stats(x) {
+ var values = x.split("|");
+ if (jQuery.each(values,function(key,value){
+ if (value == 'undefined' || value == null)
+ return true;
+ else
+ return false;
+ }))
+
+ updateUptime(values[2]);
+ updateDateTime(values[5]);
+ updateCPU(values[0]);
+ updateMemory(values[1]);
+ updateState(values[3]);
+ updateTemp(values[4]);
+ updateInterfaceStats(values[6]);
+ updateInterfaces(values[7]);
+ updateGatewayStats(values[8]);
+ updateCpuFreq(values[9]);
+ updateLoadAverage(values[10]);
+ updateMbuf(values[11]);
+ updateMbufMeter(values[12]);
+ updateStateMeter(values[13]);
+}
+
+function updateMemory(x) {
+ if(jQuery('#memusagemeter'))
+ jQuery("#memusagemeter").html(x + '%');
+ if(jQuery('#memUsagePB'))
+ jQuery('#memUsagePB').progressbar( { value: parseInt(x) } );
+}
+
+function updateMbuf(x) {
+ if(jQuery('#mbuf'))
+ jQuery("#mbuf").html(x);
+}
+
+function updateMbufMeter(x) {
+ if(jQuery('#mbufusagemeter'))
+ jQuery("#mbufusagemeter").html(x + '%');
+ if(jQuery('#mbufPB'))
+ jQuery('#mbufPB').progressbar( { value: parseInt(x) } );
+}
+
+function updateCPU(x) {
+ if(jQuery('#cpumeter'))
+ jQuery("#cpumeter").html(x + '%');
+ if(jQuery('#cpuPB'))
+ jQuery('#cpuPB').progressbar( { value: parseInt(x) } );
+ /* Load CPU Graph widget if enabled */
+ if(widgetActive('cpu_graphs')) {
+ GraphValue(graph[0], x);
+ }
+}
+
+function updateTemp(x) {
+ if(jQuery("#tempmeter"))
+ jQuery("#tempmeter").html(x + '\u00B0' + 'C');
+ if(jQuery('#tempPB'))
+ jQuery("#tempPB").progressbar( { value: parseInt(x) } );
+}
+
+function updateDateTime(x) {
+ if(jQuery('#datetime'))
+ jQuery("#datetime").html(x);
+}
+
+function updateUptime(x) {
+ if(jQuery('#uptime'))
+ jQuery("#uptime").html(x);
+}
+
+function updateState(x) {
+ if(jQuery('#pfstate'))
+ jQuery("#pfstate").html(x);
+}
+
+function updateStateMeter(x) {
+ if(jQuery('#pfstateusagemeter'))
+ jQuery("#pfstateusagemeter").html(x + '%');
+ if(jQuery('#statePB'))
+ jQuery('#statePB').progressbar( { value: parseInt(x) } );
+}
+
+function updateGatewayStats(x){
+ if (widgetActive("gateways")){
+ gateways_split = x.split(",");
+ for (var y=0; y<gateways_split.length; y++){
+ gateways_field_split = gateways_split[y].split("^");
+ if(jQuery('#gateway' + (y + 1))) {
+ jQuery('#gateway' + (y + 1)).html(gateways_field_split[0]);
+ if(gateways_field_split[1]) {
+ jQuery('#gateway' + (y + 1)).css('background-color',gateways_field_split[1]);
+ }
+ }
+ }
+ }
+}
+
+function updateCpuFreq(x) {
+ if(jQuery('#cpufreq'))
+ jQuery("#cpufreq").html(x);
+}
+
+function updateLoadAverage(x) {
+ if(jQuery('#load_average'))
+ jQuery("#load_average").html(x);
+}
+
+function updateInterfaceStats(x){
+ if (widgetActive("interface_statistics")){
+ statistics_split = x.split(",");
+ var counter = 1;
+ for (var y=0; y<statistics_split.length-1; y++){
+ if(jQuery('#stat' + counter)) {
+ jQuery('#stat' + counter).html(statistics_split[y]);
+ counter++;
+ }
+ }
+ }
+}
+
+function updateInterfaces(x){
+ if (widgetActive("interfaces")){
+ interfaces_split = x.split("~");
+ interfaces_split.each(function(iface){
+ details = iface.split("^");
+ if (details[2] == '')
+ ipv4_details = '';
+ else
+ ipv4_details = details[2] + '<br />';
+ switch(details[1]) {
+ case "up":
+ jQuery('#' + details[0] + '-up').css("display","inline");
+ jQuery('#' + details[0] + '-down').css("display","none");
+ jQuery('#' + details[0] + '-block').css("display","none");
+ jQuery('#' + details[0] + '-ip').html(ipv4_details);
+ jQuery('#' + details[0] + '-ipv6').html(details[3]);
+ jQuery('#' + details[0] + '-media').html(details[4]);
+ break;
+ case "down":
+ jQuery('#' + details[0] + '-down').css("display","inline");
+ jQuery('#' + details[0] + '-up').css("display","none");
+ jQuery('#' + details[0] + '-block').css("display","none");
+ jQuery('#' + details[0] + '-ip').html(ipv4_details);
+ jQuery('#' + details[0] + '-ipv6').html(details[3]);
+ jQuery('#' + details[0] + '-media').html(details[4]);
+ break;
+ case "block":
+ jQuery('#' + details[0] + '-block').css("display","inline");
+ jQuery('#' + details[0] + '-down').css("display","none");
+ jQuery('#' + details[0] + '-up').css("display","none");
+ break;
+ }
+ });
+ }
+}
+
+function widgetActive(x) {
+ var widget = jQuery('#' + x + '-container');
+ if ((widget != null) && (widget.css('display') != null) && (widget.css('display') != "none"))
+ return true;
+ else
+ return false;
+}
+
+/* start updater */
+jQuery(document).ready(function(){
+ setTimer();
+});
+
diff --git a/src/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js b/src/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js
new file mode 100644
index 0000000..45b529b
--- /dev/null
+++ b/src/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js
@@ -0,0 +1,253 @@
+/*jslint white: true, sloppy: true, vars: true, eqeq: true */
+/*jslint browser: true, devel: true */
+/*global show_hide_linkfields, jQuery, country_list */
+
+function update_select_list(new_options, select_list){
+ var option_array = new_options.split("|");
+ var i = 0;
+ var j;
+ select_list.length = 0;
+ for(j=0; j < option_array.length-1; j++){
+ var option = option_array[j].split(",");
+ var selected = Boolean(parseInt(option[2], 10));
+ select_list[j] = new Option(option[0], option[1], false, selected);
+ //for testing and debugging
+ //select_list.options[option_array.length-1+j] = new Option(option[2].toString() +" "+ selected.toString());
+ //select_list.options[option_array.length-1+j] = new Option("Link Label: " + linklabel + " Label Text:" + label_text);
+ }
+ show_hide_linkfields(select_list);
+}
+
+function show_advanced(hide){
+ var select_list = document.iform["interfaces[]"].options;
+ var adv_rows = parseInt(jQuery('#adv_rows').html(), 10);
+ var adv_show = Boolean(parseInt(jQuery('#adv_show').html(), 10));
+ var status = Boolean(parseInt(hide, 10));
+ var j, advanced;
+ if (status){
+ jQuery('#advanced_').hide();
+ for(j=0; j < adv_rows; j++){
+ advanced = "#advanced_" + j.toString();
+ jQuery(advanced).show();
+ }
+ jQuery('#adv_show').html("1");
+ show_hide_linkfields(select_list);
+ } else {
+ jQuery('#advanced_').show();
+ for(j=0; j < adv_rows; j++){
+ advanced = "#advanced_" + j.toString();
+ jQuery(advanced).hide();
+ }
+ jQuery('#adv_show').html("0");
+ show_hide_linkfields(select_list);
+ }
+}
+
+function show_hide_linkfields(options){
+ var i = 0;
+ var port_count = parseInt(jQuery('#port_count').html(), 10);
+ var adv_show = Boolean(parseInt(jQuery('#adv_show').html(), 10));
+ var j, count, type, link, lnklabel, bw, bwlabel, mtu, mru, mrru, ipfields, gwfields, localip,
+ localiplabel, subnet, gateway, gatewaylabel;
+ for(j=0; j < port_count; j++){
+ count = j.toString();
+ type = jQuery('#type').val();
+ link = "#link" + count;
+ lnklabel = "#linklabel" + count;
+ bw = "#bandwidth" + count;
+ bwlabel = "#bwlabel" + count;
+ mtu = "#mtu" + count;
+ mru = "#mru" + count;
+ mrru = "#mrru" + count;
+ ipfields = "#ip_fields" + count;
+ gwfields = "#gw_fields" + count;
+ localip = "#localip" + count;
+ localiplabel = "#localiplabel" + count;
+ subnet = "#subnet" + count;
+ gateway = "#gateway" + count;
+ gatewaylabel = "#gatewaylabel" + count;
+
+ jQuery(ipfields + ',' + gwfields + ',' + link).hide();
+ jQuery(subnet).prop('disabled',true);
+
+ jQuery(bw).attr("name","bandwidth[]");
+ jQuery(mtu).attr("name","mtu[]");
+ jQuery(mru).attr("name","mru[]");
+ jQuery(mrru).attr("name","mrru[]");
+ jQuery(localip).attr("name","localip[]");
+ jQuery(subnet).attr("name","subnet[]");
+ jQuery(gateway).attr("name","gateway[]");
+
+ while(i < options.length){
+ if (options[i].selected ){
+ jQuery(lnklabel).html("Link Parameters (" + options[i].value + ")");
+ jQuery(bwlabel).html("Bandwidth (" + options[i].value + ")");
+ jQuery(bw).attr("name","bandwidth[" + options[i].value + "]");
+ jQuery(mtu).attr("name","mtu[" + options[i].value + "]");
+ jQuery(mru).attr("name","mru[" + options[i].value + "]");
+ jQuery(mrru).attr("name","mrru[" + options[i].value + "]");
+ jQuery(localiplabel).html("Local IP (" + options[i].value + ")");
+ jQuery(gatewaylabel).html("Gateway (" + options[i].value + ")");
+ jQuery(localip).attr("name","localip[" + options[i].value + "]");
+ jQuery(subnet).attr("name","subnet[" + options[i].value + "]");
+ jQuery(gateway).attr("name","gateway[" + options[i].value + "]");
+ if (type == 'ppp' && adv_show){
+ jQuery(ipfields + ',' + gwfields).show();
+ }
+ if (type == 'pptp' || type == 'l2tp'){
+ jQuery(subnet).prop("disabled",false);
+ jQuery(ipfields + ',' + gwfields).show();
+ }
+ if (adv_show){
+ jQuery(link).show();
+ }
+ i++;
+ break;
+ }
+ i++;
+ }
+ }
+}
+
+
+function updateType(t){
+ var serialports = jQuery('#serialports').html();
+ var ports = jQuery('#ports').html();
+ var select_list = document.iform["interfaces[]"].options;
+ jQuery('#adv_show').html("0");
+ show_advanced('0');
+ jQuery("#select").show();
+ switch(t) {
+ case "select":
+ jQuery('#ppp,#pppoe,#ppp_provider,#phone_num,#apn_').hide();
+ select_list.length = 0;
+ select_list[0] = new Option("Select Link Type First","");
+ break;
+ case "ppp":
+ update_select_list(serialports, select_list);
+ jQuery('#select,#pppoe').hide();
+ jQuery('#ppp_provider,#phone_num,#apn_').show();
+ country_list();
+ break;
+ case "pppoe":
+ update_select_list(ports, select_list);
+ jQuery('#select,#ppp,#ppp_provider,#phone_num,#apn_').hide();
+ break;
+ case "l2tp":
+ case "pptp":
+ update_select_list(ports, select_list);
+ jQuery('#select,#ppp,#pppoe,#ppp_provider,#phone_num,#apn_').hide();
+ break;
+ default:
+ select_list.length = 0;
+ select_list[0] = new Option("Select Link Type First","");
+ break;
+ }
+ if (t == "pppoe" || t == "ppp"){
+ jQuery("#" + t).show();
+ }
+}
+
+function show_reset_settings(reset_type) {
+ if (reset_type == 'preset') {
+ jQuery('#pppoepresetwrap').show(0);
+ jQuery('#pppoecustomwrap').hide(0);
+ }
+ else if (reset_type == 'custom') {
+ jQuery('#pppoecustomwrap').show(0);
+ jQuery('#pppoepresetwrap').hide(0);
+ } else {
+ jQuery('#pppoecustomwrap').hide(0);
+ jQuery('#pppoepresetwrap').hide(0);
+ }
+}
+
+function country_list() {
+ jQuery('#country option').remove();
+ jQuery('#provider option').remove();
+ jQuery('#providerplan option').remove();
+ jQuery('#country').append(new Option('', ''));
+ jQuery.ajax("getserviceproviders.php",{
+ success: function(responseText) {
+ var responseTextArr = responseText.split("\n");
+ var value, i, country;
+ responseTextArr.sort();
+ for (i = 0; i < responseTextArr.length; i += 1) {
+ value = responseTextArr[i];
+ if (/\S/.test(value)) {
+ country = value.split(":");
+ jQuery('#country').append(new Option(country[0],country[1]));
+ }
+ }
+ }
+ });
+ jQuery('#trcountry').css("display","table-row");
+}
+
+function providers_list() {
+ jQuery('#provider option').remove();
+ jQuery('#providerplan option').remove();
+ jQuery('#provider').append(new Option('', ''));
+ jQuery.ajax("getserviceproviders.php",{
+ type: 'POST',
+ data: {country : jQuery('#country').val()},
+ success: function(responseText) {
+ var responseTextArr = responseText.split("\n");
+ var value, i;
+ responseTextArr.sort();
+ for (i = 0; i < responseTextArr.length; i += 1) {
+ value = responseTextArr[i];
+ if (/\S/.test(value)) {
+ jQuery('#provider').append(new Option(value, value));
+ }
+ }
+ }
+ });
+ jQuery('#trprovider').css("display","table-row");
+ jQuery('#trproviderplan').css("display","none");
+}
+
+function providerplan_list() {
+ jQuery('#providerplan option').remove();
+ jQuery('#providerplan').append( new Option('','') );
+ jQuery.ajax("getserviceproviders.php",{
+ type: 'POST',
+ data: {country : jQuery('#country').val(), provider : jQuery('#provider').val()},
+ success: function(responseText) {
+ var responseTextArr = responseText.split("\n");
+ var value, providerplan, i;
+ responseTextArr.sort();
+ for (i = 0; i < responseTextArr.length; i += 1) {
+ value = responseTextArr[i];
+ if (/\S/.test(value)) {
+ providerplan = value.split(":");
+ jQuery('#providerplan').append(new Option(providerplan[0] + " - " + providerplan[1],
+ providerplan[1]));
+ }
+ }
+ }
+ });
+ jQuery('#trproviderplan').css("display","table-row");
+}
+
+function prefill_provider() {
+ jQuery.ajax("getserviceproviders.php",{
+ type: "POST",
+ data: {country : jQuery('#country').val(), provider : jQuery('#provider').val(), plan : jQuery('#providerplan').val()},
+ success: function(responseXML) {
+ var xmldoc = responseXML;
+ var provider = xmldoc.getElementsByTagName('connection')[0];
+ jQuery('#username').val('');
+ jQuery('#password').val('');
+ if(provider.getElementsByTagName('apn')[0].firstChild.data == "CDMA") {
+ jQuery('#phone').val('#777');
+ jQuery('#apn').val('');
+ } else {
+ jQuery('#phone').val('*99#');
+ jQuery('#apn').val(provider.getElementsByTagName('apn')[0].firstChild.data);
+ }
+ jQuery('#username').val(provider.getElementsByTagName('username')[0].firstChild.data);
+ jQuery('#password').val(provider.getElementsByTagName('password')[0].firstChild.data);
+ }
+ });
+}
diff --git a/src/usr/local/www/javascript/jquery-1.11.1.min.js b/src/usr/local/www/javascript/jquery-1.11.1.min.js
new file mode 100644
index 0000000..ab28a24
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery-1.11.1.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),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("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
+if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
+},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/src/usr/local/www/javascript/jquery-migrate-1.2.1.min.js b/src/usr/local/www/javascript/jquery-migrate-1.2.1.min.js
new file mode 100644
index 0000000..62149c2
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery-migrate-1.2.1.min.js
@@ -0,0 +1,2 @@
+/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
+jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css b/src/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css
new file mode 100644
index 0000000..1af3008
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css
@@ -0,0 +1,7 @@
+/* css for timepicker */
+.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
+.ui-timepicker-div dl { text-align: left; }
+.ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
+.ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
+.ui-timepicker-div td { font-size: 90%; }
+.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
diff --git a/src/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js b/src/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js
new file mode 100644
index 0000000..33cd3ae
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js
@@ -0,0 +1,1326 @@
+/*
+* jQuery timepicker addon
+* By: Trent Richardson [http://trentrichardson.com]
+* Version 0.9.9
+* Last Modified: 02/05/2012
+*
+* Copyright 2012 Trent Richardson
+* Dual licensed under the MIT and GPL licenses.
+* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
+* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
+*
+* HERES THE CSS:
+* .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
+* .ui-timepicker-div dl { text-align: left; }
+* .ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }
+* .ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
+* .ui-timepicker-div td { font-size: 90%; }
+* .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
+*/
+
+(function($) {
+
+$.extend($.ui, { timepicker: { version: "0.9.9" } });
+
+/* Time picker manager.
+ Use the singleton instance of this class, $.timepicker, to interact with the time picker.
+ Settings for (groups of) time pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Timepicker() {
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[''] = { // Default regional settings
+ currentText: 'Now',
+ closeText: 'Done',
+ ampm: false,
+ amNames: ['AM', 'A'],
+ pmNames: ['PM', 'P'],
+ timeFormat: 'hh:mm tt',
+ timeSuffix: '',
+ timeOnlyTitle: 'Choose Time',
+ timeText: 'Time',
+ hourText: 'Hour',
+ minuteText: 'Minute',
+ secondText: 'Second',
+ millisecText: 'Millisecond',
+ timezoneText: 'Time Zone'
+ };
+ this._defaults = { // Global defaults for all the datetime picker instances
+ showButtonPanel: true,
+ timeOnly: false,
+ showHour: true,
+ showMinute: true,
+ showSecond: false,
+ showMillisec: false,
+ showTimezone: false,
+ showTime: true,
+ stepHour: 1,
+ stepMinute: 1,
+ stepSecond: 1,
+ stepMillisec: 1,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisec: 0,
+ timezone: '+0000',
+ hourMin: 0,
+ minuteMin: 0,
+ secondMin: 0,
+ millisecMin: 0,
+ hourMax: 23,
+ minuteMax: 59,
+ secondMax: 59,
+ millisecMax: 999,
+ minDateTime: null,
+ maxDateTime: null,
+ onSelect: null,
+ hourGrid: 0,
+ minuteGrid: 0,
+ secondGrid: 0,
+ millisecGrid: 0,
+ alwaysSetTime: true,
+ separator: ' ',
+ altFieldTimeOnly: true,
+ showTimepicker: true,
+ timezoneIso8609: false,
+ timezoneList: null,
+ addSliderAccess: false,
+ sliderAccessArgs: null
+ };
+ $.extend(this._defaults, this.regional['']);
+};
+
+$.extend(Timepicker.prototype, {
+ $input: null,
+ $altInput: null,
+ $timeObj: null,
+ inst: null,
+ hour_slider: null,
+ minute_slider: null,
+ second_slider: null,
+ millisec_slider: null,
+ timezone_select: null,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisec: 0,
+ timezone: '+0000',
+ hourMinOriginal: null,
+ minuteMinOriginal: null,
+ secondMinOriginal: null,
+ millisecMinOriginal: null,
+ hourMaxOriginal: null,
+ minuteMaxOriginal: null,
+ secondMaxOriginal: null,
+ millisecMaxOriginal: null,
+ ampm: '',
+ formattedDate: '',
+ formattedTime: '',
+ formattedDateTime: '',
+ timezoneList: null,
+
+ /* Override the default settings for all instances of the time picker.
+ @param settings object - the new settings to use as defaults (anonymous object)
+ @return the manager object */
+ setDefaults: function(settings) {
+ extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ //########################################################################
+ // Create a new Timepicker instance
+ //########################################################################
+ _newInst: function($input, o) {
+ var tp_inst = new Timepicker(),
+ inlineSettings = {};
+
+ for (var attrName in this._defaults) {
+ var attrValue = $input.attr('time:' + attrName);
+ if (attrValue) {
+ try {
+ inlineSettings[attrName] = eval(attrValue);
+ } catch (err) {
+ inlineSettings[attrName] = attrValue;
+ }
+ }
+ }
+ tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {
+ beforeShow: function(input, dp_inst) {
+ if ($.isFunction(o.beforeShow))
+ return o.beforeShow(input, dp_inst, tp_inst);
+ },
+ onChangeMonthYear: function(year, month, dp_inst) {
+ // Update the time as well : this prevents the time from disappearing from the $input field.
+ tp_inst._updateDateTime(dp_inst);
+ if ($.isFunction(o.onChangeMonthYear))
+ o.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
+ },
+ onClose: function(dateText, dp_inst) {
+ if (tp_inst.timeDefined === true && $input.val() != '')
+ tp_inst._updateDateTime(dp_inst);
+ if ($.isFunction(o.onClose))
+ o.onClose.call($input[0], dateText, dp_inst, tp_inst);
+ },
+ timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
+ });
+ tp_inst.amNames = $.map(tp_inst._defaults.amNames, function(val) { return val.toUpperCase() ;});
+ tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function(val) { return val.toUpperCase() ;});
+
+ if (tp_inst._defaults.timezoneList === null) {
+ var timezoneList = [];
+ for (var i = -11; i <= 12; i++)
+ timezoneList.push((i >= 0 ? '+' : '-') + ('0' + Math.abs(i).toString()).slice(-2) + '00');
+ if (tp_inst._defaults.timezoneIso8609)
+ timezoneList = $.map(timezoneList, function(val) {
+ return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3));
+ });
+ tp_inst._defaults.timezoneList = timezoneList;
+ }
+
+ tp_inst.hour = tp_inst._defaults.hour;
+ tp_inst.minute = tp_inst._defaults.minute;
+ tp_inst.second = tp_inst._defaults.second;
+ tp_inst.millisec = tp_inst._defaults.millisec;
+ tp_inst.ampm = '';
+ tp_inst.$input = $input;
+
+ if (o.altField)
+ tp_inst.$altInput = $(o.altField)
+ .css({ cursor: 'pointer' })
+ .focus(function(){ $input.trigger("focus"); });
+
+ if(tp_inst._defaults.minDate==0 || tp_inst._defaults.minDateTime==0)
+ {
+ tp_inst._defaults.minDate=new Date();
+ }
+ if(tp_inst._defaults.maxDate==0 || tp_inst._defaults.maxDateTime==0)
+ {
+ tp_inst._defaults.maxDate=new Date();
+ }
+
+ // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
+ if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)
+ tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
+ if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)
+ tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
+ if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)
+ tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
+ if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)
+ tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
+ return tp_inst;
+ },
+
+ //########################################################################
+ // add our sliders to the calendar
+ //########################################################################
+ _addTimePicker: function(dp_inst) {
+ var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ?
+ this.$input.val() + ' ' + this.$altInput.val() :
+ this.$input.val();
+
+ this.timeDefined = this._parseTime(currDT);
+ this._limitMinMaxDateTime(dp_inst, false);
+ this._injectTimePicker();
+ },
+
+ //########################################################################
+ // parse the time string from input value or _setTime
+ //########################################################################
+ _parseTime: function(timeString, withDate) {
+ var regstr = this._defaults.timeFormat.toString()
+ .replace(/h{1,2}/ig, '(\\d?\\d)')
+ .replace(/m{1,2}/ig, '(\\d?\\d)')
+ .replace(/s{1,2}/ig, '(\\d?\\d)')
+ .replace(/l{1}/ig, '(\\d?\\d?\\d)')
+ .replace(/t{1,2}/ig, this._getPatternAmpm())
+ .replace(/z{1}/ig, '(z|[-+]\\d\\d:?\\d\\d)?')
+ .replace(/\s/g, '\\s?') + this._defaults.timeSuffix + '$',
+ order = this._getFormatPositions(),
+ ampm = '',
+ treg;
+
+ if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
+
+ if (withDate || !this._defaults.timeOnly) {
+ // the time should come after x number of characters and a space.
+ // x = at least the length of text specified by the date format
+ var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
+ // escape special regex characters in the separator
+ var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g");
+ regstr = '^.{' + dp_dateFormat.length + ',}?' + this._defaults.separator.replace(specials, "\\$&") + regstr;
+ }
+
+ treg = timeString.match(new RegExp(regstr, 'i'));
+
+ if (treg) {
+ if (order.t !== -1) {
+ if (treg[order.t] === undefined || treg[order.t].length === 0) {
+ ampm = '';
+ this.ampm = '';
+ } else {
+ ampm = $.inArray(treg[order.t].toUpperCase(), this.amNames) !== -1 ? 'AM' : 'PM';
+ this.ampm = this._defaults[ampm == 'AM' ? 'amNames' : 'pmNames'][0];
+ }
+ }
+
+ if (order.h !== -1) {
+ if (ampm == 'AM' && treg[order.h] == '12')
+ this.hour = 0; // 12am = 0 hour
+ else if (ampm == 'PM' && treg[order.h] != '12')
+ this.hour = (parseFloat(treg[order.h]) + 12).toFixed(0); // 12pm = 12 hour, any other pm = hour + 12
+ else this.hour = Number(treg[order.h]);
+ }
+
+ if (order.m !== -1) this.minute = Number(treg[order.m]);
+ if (order.s !== -1) this.second = Number(treg[order.s]);
+ if (order.l !== -1) this.millisec = Number(treg[order.l]);
+ if (order.z !== -1 && treg[order.z] !== undefined) {
+ var tz = treg[order.z].toUpperCase();
+ switch (tz.length) {
+ case 1: // Z
+ tz = this._defaults.timezoneIso8609 ? 'Z' : '+0000';
+ break;
+ case 5: // +hhmm
+ if (this._defaults.timezoneIso8609)
+ tz = tz.substring(1) == '0000'
+ ? 'Z'
+ : tz.substring(0, 3) + ':' + tz.substring(3);
+ break;
+ case 6: // +hh:mm
+ if (!this._defaults.timezoneIso8609)
+ tz = tz == 'Z' || tz.substring(1) == '00:00'
+ ? '+0000'
+ : tz.replace(/:/, '');
+ else if (tz.substring(1) == '00:00')
+ tz = 'Z';
+ break;
+ }
+ this.timezone = tz;
+ }
+
+ return true;
+
+ }
+ return false;
+ },
+
+ //########################################################################
+ // pattern for standard and localized AM/PM markers
+ //########################################################################
+ _getPatternAmpm: function() {
+ var markers = [];
+ o = this._defaults;
+ if (o.amNames)
+ $.merge(markers, o.amNames);
+ if (o.pmNames)
+ $.merge(markers, o.pmNames);
+ markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&') });
+ return '(' + markers.join('|') + ')?';
+ },
+
+ //########################################################################
+ // figure out position of time elements.. cause js cant do named captures
+ //########################################################################
+ _getFormatPositions: function() {
+ var finds = this._defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
+ orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
+
+ if (finds)
+ for (var i = 0; i < finds.length; i++)
+ if (orders[finds[i].toString().charAt(0)] == -1)
+ orders[finds[i].toString().charAt(0)] = i + 1;
+
+ return orders;
+ },
+
+ //########################################################################
+ // generate and inject html for timepicker into ui datepicker
+ //########################################################################
+ _injectTimePicker: function() {
+ var $dp = this.inst.dpDiv,
+ o = this._defaults,
+ tp_inst = this,
+ // Added by Peter Medeiros:
+ // - Figure out what the hour/minute/second max should be based on the step values.
+ // - Example: if stepMinute is 15, then minMax is 45.
+ hourMax = parseInt((o.hourMax - ((o.hourMax - o.hourMin) % o.stepHour)) ,10),
+ minMax = parseInt((o.minuteMax - ((o.minuteMax - o.minuteMin) % o.stepMinute)) ,10),
+ secMax = parseInt((o.secondMax - ((o.secondMax - o.secondMin) % o.stepSecond)) ,10),
+ millisecMax = parseInt((o.millisecMax - ((o.millisecMax - o.millisecMin) % o.stepMillisec)) ,10),
+ dp_id = this.inst.id.toString().replace(/([^A-Za-z0-9_])/g, '');
+
+ // Prevent displaying twice
+ //if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0) {
+ if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0 && o.showTimepicker) {
+ var noDisplay = ' style="display:none;"',
+ html = '<div class="ui-timepicker-div" id="ui-timepicker-div-' + dp_id + '"><dl>' +
+ '<dt class="ui_tpicker_time_label" id="ui_tpicker_time_label_' + dp_id + '"' +
+ ((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +
+ '<dd class="ui_tpicker_time" id="ui_tpicker_time_' + dp_id + '"' +
+ ((o.showTime) ? '' : noDisplay) + '></dd>' +
+ '<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
+ ((o.showHour) ? '' : noDisplay) + '>' + o.hourText + '</dt>',
+ hourGridSize = 0,
+ minuteGridSize = 0,
+ secondGridSize = 0,
+ millisecGridSize = 0,
+ size;
+
+ // Hours
+ html += '<dd class="ui_tpicker_hour"><div id="ui_tpicker_hour_' + dp_id + '"' +
+ ((o.showHour) ? '' : noDisplay) + '></div>';
+ if (o.showHour && o.hourGrid > 0) {
+ html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
+
+ for (var h = o.hourMin; h <= hourMax; h += parseInt(o.hourGrid,10)) {
+ hourGridSize++;
+ var tmph = (o.ampm && h > 12) ? h-12 : h;
+ if (tmph < 10) tmph = '0' + tmph;
+ if (o.ampm) {
+ if (h == 0) tmph = 12 +'a';
+ else if (h < 12) tmph += 'a';
+ else tmph += 'p';
+ }
+ html += '<td>' + tmph + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Minutes
+ html += '<dt class="ui_tpicker_minute_label" id="ui_tpicker_minute_label_' + dp_id + '"' +
+ ((o.showMinute) ? '' : noDisplay) + '>' + o.minuteText + '</dt>'+
+ '<dd class="ui_tpicker_minute"><div id="ui_tpicker_minute_' + dp_id + '"' +
+ ((o.showMinute) ? '' : noDisplay) + '></div>';
+
+ if (o.showMinute && o.minuteGrid > 0) {
+ html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
+
+ for (var m = o.minuteMin; m <= minMax; m += parseInt(o.minuteGrid,10)) {
+ minuteGridSize++;
+ html += '<td>' + ((m < 10) ? '0' : '') + m + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Seconds
+ html += '<dt class="ui_tpicker_second_label" id="ui_tpicker_second_label_' + dp_id + '"' +
+ ((o.showSecond) ? '' : noDisplay) + '>' + o.secondText + '</dt>'+
+ '<dd class="ui_tpicker_second"><div id="ui_tpicker_second_' + dp_id + '"'+
+ ((o.showSecond) ? '' : noDisplay) + '></div>';
+
+ if (o.showSecond && o.secondGrid > 0) {
+ html += '<div style="padding-left: 1px"><table><tr>';
+
+ for (var s = o.secondMin; s <= secMax; s += parseInt(o.secondGrid,10)) {
+ secondGridSize++;
+ html += '<td>' + ((s < 10) ? '0' : '') + s + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Milliseconds
+ html += '<dt class="ui_tpicker_millisec_label" id="ui_tpicker_millisec_label_' + dp_id + '"' +
+ ((o.showMillisec) ? '' : noDisplay) + '>' + o.millisecText + '</dt>'+
+ '<dd class="ui_tpicker_millisec"><div id="ui_tpicker_millisec_' + dp_id + '"'+
+ ((o.showMillisec) ? '' : noDisplay) + '></div>';
+
+ if (o.showMillisec && o.millisecGrid > 0) {
+ html += '<div style="padding-left: 1px"><table><tr>';
+
+ for (var l = o.millisecMin; l <= millisecMax; l += parseInt(o.millisecGrid,10)) {
+ millisecGridSize++;
+ html += '<td>' + ((l < 10) ? '0' : '') + l + '</td>';
+ }
+
+ html += '</tr></table></div>';
+ }
+ html += '</dd>';
+
+ // Timezone
+ html += '<dt class="ui_tpicker_timezone_label" id="ui_tpicker_timezone_label_' + dp_id + '"' +
+ ((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
+ html += '<dd class="ui_tpicker_timezone" id="ui_tpicker_timezone_' + dp_id + '"' +
+ ((o.showTimezone) ? '' : noDisplay) + '></dd>';
+
+ html += '</dl></div>';
+ $tp = $(html);
+
+ // if we only want time picker...
+ if (o.timeOnly === true) {
+ $tp.prepend(
+ '<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
+ '<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' +
+ '</div>');
+ $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
+ }
+
+ this.hour_slider = $tp.find('#ui_tpicker_hour_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.hour,
+ min: o.hourMin,
+ max: hourMax,
+ step: o.stepHour,
+ slide: function(event, ui) {
+ tp_inst.hour_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+
+ // Updated by Peter Medeiros:
+ // - Pass in Event and UI instance into slide function
+ this.minute_slider = $tp.find('#ui_tpicker_minute_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.minute,
+ min: o.minuteMin,
+ max: minMax,
+ step: o.stepMinute,
+ slide: function(event, ui) {
+ tp_inst.minute_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.second_slider = $tp.find('#ui_tpicker_second_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.second,
+ min: o.secondMin,
+ max: secMax,
+ step: o.stepSecond,
+ slide: function(event, ui) {
+ tp_inst.second_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.millisec_slider = $tp.find('#ui_tpicker_millisec_'+ dp_id).slider({
+ orientation: "horizontal",
+ value: this.millisec,
+ min: o.millisecMin,
+ max: millisecMax,
+ step: o.stepMillisec,
+ slide: function(event, ui) {
+ tp_inst.millisec_slider.slider( "option", "value", ui.value);
+ tp_inst._onTimeChange();
+ }
+ });
+
+ this.timezone_select = $tp.find('#ui_tpicker_timezone_'+ dp_id).append('<select></select>').find("select");
+ $.fn.append.apply(this.timezone_select,
+ $.map(o.timezoneList, function(val, idx) {
+ return $("<option />")
+ .val(typeof val == "object" ? val.value : val)
+ .text(typeof val == "object" ? val.label : val);
+ })
+ );
+ this.timezone_select.val((typeof this.timezone != "undefined" && this.timezone != null && this.timezone != "") ? this.timezone : o.timezone);
+ this.timezone_select.change(function() {
+ tp_inst._onTimeChange();
+ });
+
+ // Add grid functionality
+ if (o.showHour && o.hourGrid > 0) {
+ size = 100 * hourGridSize * o.hourGrid / (hourMax - o.hourMin);
+
+ $tp.find(".ui_tpicker_hour table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * hourGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each( function(index) {
+ $(this).click(function() {
+ var h = $(this).html();
+ if(o.ampm) {
+ var ap = h.substring(2).toLowerCase(),
+ aph = parseInt(h.substring(0,2), 10);
+ if (ap == 'a') {
+ if (aph == 12) h = 0;
+ else h = aph;
+ } else if (aph == 12) h = 12;
+ else h = aph + 12;
+ }
+ tp_inst.hour_slider.slider("option", "value", h);
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / hourGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showMinute && o.minuteGrid > 0) {
+ size = 100 * minuteGridSize * o.minuteGrid / (minMax - o.minuteMin);
+ $tp.find(".ui_tpicker_minute table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * minuteGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.minute_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / minuteGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showSecond && o.secondGrid > 0) {
+ $tp.find(".ui_tpicker_second table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * secondGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.second_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / secondGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ if (o.showMillisec && o.millisecGrid > 0) {
+ $tp.find(".ui_tpicker_millisec table").css({
+ width: size + "%",
+ marginLeft: (size / (-2 * millisecGridSize)) + "%",
+ borderCollapse: 'collapse'
+ }).find("td").each(function(index) {
+ $(this).click(function() {
+ tp_inst.millisec_slider.slider("option", "value", $(this).html());
+ tp_inst._onTimeChange();
+ tp_inst._onSelectHandler();
+ }).css({
+ cursor: 'pointer',
+ width: (100 / millisecGridSize) + '%',
+ textAlign: 'center',
+ overflow: 'hidden'
+ });
+ });
+ }
+
+ var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
+ if ($buttonPanel.length) $buttonPanel.before($tp);
+ else $dp.append($tp);
+
+ this.$timeObj = $tp.find('#ui_tpicker_time_'+ dp_id);
+
+ if (this.inst !== null) {
+ var timeDefined = this.timeDefined;
+ this._onTimeChange();
+ this.timeDefined = timeDefined;
+ }
+
+ //Emulate datepicker onSelect behavior. Call on slidestop.
+ var onSelectDelegate = function() {
+ tp_inst._onSelectHandler();
+ };
+ this.hour_slider.bind('slidestop',onSelectDelegate);
+ this.minute_slider.bind('slidestop',onSelectDelegate);
+ this.second_slider.bind('slidestop',onSelectDelegate);
+ this.millisec_slider.bind('slidestop',onSelectDelegate);
+
+ // slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/
+ if (this._defaults.addSliderAccess){
+ var sliderAccessArgs = this._defaults.sliderAccessArgs;
+ setTimeout(function(){ // fix for inline mode
+ if($tp.find('.ui-slider-access').length == 0){
+ $tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);
+
+ // fix any grids since sliders are shorter
+ var sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);
+ if(sliderAccessWidth){
+ $tp.find('table:visible').each(function(){
+ var $g = $(this),
+ oldWidth = $g.outerWidth(),
+ oldMarginLeft = $g.css('marginLeft').toString().replace('%',''),
+ newWidth = oldWidth - sliderAccessWidth,
+ newMarginLeft = ((oldMarginLeft * newWidth)/oldWidth) + '%';
+
+ $g.css({ width: newWidth, marginLeft: newMarginLeft });
+ });
+ }
+ }
+ },0);
+ }
+ // end slideAccess integration
+
+ }
+ },
+
+ //########################################################################
+ // This function tries to limit the ability to go outside the
+ // min/max date range
+ //########################################################################
+ _limitMinMaxDateTime: function(dp_inst, adjustSliders){
+ var o = this._defaults,
+ dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
+
+ if(!this._defaults.showTimepicker) return; // No time so nothing to check here
+
+ if($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date){
+ var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
+ minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
+
+ if(this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null){
+ this.hourMinOriginal = o.hourMin;
+ this.minuteMinOriginal = o.minuteMin;
+ this.secondMinOriginal = o.secondMin;
+ this.millisecMinOriginal = o.millisecMin;
+ }
+
+ if(dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
+ this._defaults.hourMin = minDateTime.getHours();
+ if (this.hour <= this._defaults.hourMin) {
+ this.hour = this._defaults.hourMin;
+ this._defaults.minuteMin = minDateTime.getMinutes();
+ if (this.minute <= this._defaults.minuteMin) {
+ this.minute = this._defaults.minuteMin;
+ this._defaults.secondMin = minDateTime.getSeconds();
+ } else if (this.second <= this._defaults.secondMin){
+ this.second = this._defaults.secondMin;
+ this._defaults.millisecMin = minDateTime.getMilliseconds();
+ } else {
+ if(this.millisec < this._defaults.millisecMin)
+ this.millisec = this._defaults.millisecMin;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ } else {
+ this._defaults.minuteMin = this.minuteMinOriginal;
+ this._defaults.secondMin = this.secondMinOriginal;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ }else{
+ this._defaults.hourMin = this.hourMinOriginal;
+ this._defaults.minuteMin = this.minuteMinOriginal;
+ this._defaults.secondMin = this.secondMinOriginal;
+ this._defaults.millisecMin = this.millisecMinOriginal;
+ }
+ }
+
+ if($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date){
+ var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
+ maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
+
+ if(this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null){
+ this.hourMaxOriginal = o.hourMax;
+ this.minuteMaxOriginal = o.minuteMax;
+ this.secondMaxOriginal = o.secondMax;
+ this.millisecMaxOriginal = o.millisecMax;
+ }
+
+ if(dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()){
+ this._defaults.hourMax = maxDateTime.getHours();
+ if (this.hour >= this._defaults.hourMax) {
+ this.hour = this._defaults.hourMax;
+ this._defaults.minuteMax = maxDateTime.getMinutes();
+ if (this.minute >= this._defaults.minuteMax) {
+ this.minute = this._defaults.minuteMax;
+ this._defaults.secondMax = maxDateTime.getSeconds();
+ } else if (this.second >= this._defaults.secondMax) {
+ this.second = this._defaults.secondMax;
+ this._defaults.millisecMax = maxDateTime.getMilliseconds();
+ } else {
+ if(this.millisec > this._defaults.millisecMax) this.millisec = this._defaults.millisecMax;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ } else {
+ this._defaults.minuteMax = this.minuteMaxOriginal;
+ this._defaults.secondMax = this.secondMaxOriginal;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ }else{
+ this._defaults.hourMax = this.hourMaxOriginal;
+ this._defaults.minuteMax = this.minuteMaxOriginal;
+ this._defaults.secondMax = this.secondMaxOriginal;
+ this._defaults.millisecMax = this.millisecMaxOriginal;
+ }
+ }
+
+ if(adjustSliders !== undefined && adjustSliders === true){
+ var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)) ,10),
+ minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)) ,10),
+ secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)) ,10),
+ millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)) ,10);
+
+ if(this.hour_slider)
+ this.hour_slider.slider("option", { min: this._defaults.hourMin, max: hourMax }).slider('value', this.hour);
+ if(this.minute_slider)
+ this.minute_slider.slider("option", { min: this._defaults.minuteMin, max: minMax }).slider('value', this.minute);
+ if(this.second_slider)
+ this.second_slider.slider("option", { min: this._defaults.secondMin, max: secMax }).slider('value', this.second);
+ if(this.millisec_slider)
+ this.millisec_slider.slider("option", { min: this._defaults.millisecMin, max: millisecMax }).slider('value', this.millisec);
+ }
+
+ },
+
+
+ //########################################################################
+ // when a slider moves, set the internal time...
+ // on time change is also called when the time is updated in the text field
+ //########################################################################
+ _onTimeChange: function() {
+ var hour = (this.hour_slider) ? this.hour_slider.slider('value') : false,
+ minute = (this.minute_slider) ? this.minute_slider.slider('value') : false,
+ second = (this.second_slider) ? this.second_slider.slider('value') : false,
+ millisec = (this.millisec_slider) ? this.millisec_slider.slider('value') : false,
+ timezone = (this.timezone_select) ? this.timezone_select.val() : false,
+ o = this._defaults;
+
+ if (typeof(hour) == 'object') hour = false;
+ if (typeof(minute) == 'object') minute = false;
+ if (typeof(second) == 'object') second = false;
+ if (typeof(millisec) == 'object') millisec = false;
+ if (typeof(timezone) == 'object') timezone = false;
+
+ if (hour !== false) hour = parseInt(hour,10);
+ if (minute !== false) minute = parseInt(minute,10);
+ if (second !== false) second = parseInt(second,10);
+ if (millisec !== false) millisec = parseInt(millisec,10);
+
+ var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
+
+ // If the update was done in the input field, the input field should not be updated.
+ // If the update was done using the sliders, update the input field.
+ var hasChanged = (hour != this.hour || minute != this.minute
+ || second != this.second || millisec != this.millisec
+ || (this.ampm.length > 0
+ && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1))
+ || timezone != this.timezone);
+
+ if (hasChanged) {
+
+ if (hour !== false)this.hour = hour;
+ if (minute !== false) this.minute = minute;
+ if (second !== false) this.second = second;
+ if (millisec !== false) this.millisec = millisec;
+ if (timezone !== false) this.timezone = timezone;
+
+ if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
+
+ this._limitMinMaxDateTime(this.inst, true);
+ }
+ if (o.ampm) this.ampm = ampm;
+
+ //this._formatTime();
+ this.formattedTime = $.datepicker.formatTime(this._defaults.timeFormat, this, this._defaults);
+ if (this.$timeObj) this.$timeObj.text(this.formattedTime + o.timeSuffix);
+ this.timeDefined = true;
+ if (hasChanged) this._updateDateTime();
+ },
+
+ //########################################################################
+ // call custom onSelect.
+ // bind to sliders slidestop, and grid click.
+ //########################################################################
+ _onSelectHandler: function() {
+ var onSelect = this._defaults.onSelect;
+ var inputEl = this.$input ? this.$input[0] : null;
+ if (onSelect && inputEl) {
+ onSelect.apply(inputEl, [this.formattedDateTime, this]);
+ }
+ },
+
+ //########################################################################
+ // left for any backwards compatibility
+ //########################################################################
+ _formatTime: function(time, format) {
+ time = time || { hour: this.hour, minute: this.minute, second: this.second, millisec: this.millisec, ampm: this.ampm, timezone: this.timezone };
+ var tmptime = (format || this._defaults.timeFormat).toString();
+
+ tmptime = $.datepicker.formatTime(tmptime, time, this._defaults);
+
+ if (arguments.length) return tmptime;
+ else this.formattedTime = tmptime;
+ },
+
+ //########################################################################
+ // update our input with the new date time..
+ //########################################################################
+ _updateDateTime: function(dp_inst) {
+ dp_inst = this.inst || dp_inst;
+ var dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),
+ dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
+ formatCfg = $.datepicker._getFormatConfig(dp_inst),
+ timeAvailable = dt !== null && this.timeDefined;
+ this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
+ var formattedDateTime = this.formattedDate;
+ if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0))
+ return;
+
+ if (this._defaults.timeOnly === true) {
+ formattedDateTime = this.formattedTime;
+ } else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
+ formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
+ }
+
+ this.formattedDateTime = formattedDateTime;
+
+ if(!this._defaults.showTimepicker) {
+ this.$input.val(this.formattedDate);
+ } else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
+ this.$altInput.val(this.formattedTime);
+ this.$input.val(this.formattedDate);
+ } else if(this.$altInput) {
+ this.$altInput.val(formattedDateTime);
+ this.$input.val(formattedDateTime);
+ } else {
+ this.$input.val(formattedDateTime);
+ }
+
+ this.$input.trigger("change");
+ }
+
+});
+
+$.fn.extend({
+ //########################################################################
+ // shorthand just to use timepicker..
+ //########################################################################
+ timepicker: function(o) {
+ o = o || {};
+ var tmp_args = arguments;
+
+ if (typeof o == 'object') tmp_args[0] = $.extend(o, { timeOnly: true });
+
+ return $(this).each(function() {
+ $.fn.datetimepicker.apply($(this), tmp_args);
+ });
+ },
+
+ //########################################################################
+ // extend timepicker to datepicker
+ //########################################################################
+ datetimepicker: function(o) {
+ o = o || {};
+ var $input = this,
+ tmp_args = arguments;
+
+ if (typeof(o) == 'string'){
+ if(o == 'getDate')
+ return $.fn.datepicker.apply($(this[0]), tmp_args);
+ else
+ return this.each(function() {
+ var $t = $(this);
+ $t.datepicker.apply($t, tmp_args);
+ });
+ }
+ else
+ return this.each(function() {
+ var $t = $(this);
+ $t.datepicker($.timepicker._newInst($t, o)._defaults);
+ });
+ }
+});
+
+//########################################################################
+// format the time all pretty...
+// format = string format of the time
+// time = a {}, not a Date() for timezones
+// options = essentially the regional[].. amNames, pmNames, ampm
+//########################################################################
+$.datepicker.formatTime = function(format, time, options) {
+ options = options || {};
+ options = $.extend($.timepicker._defaults, options);
+ time = $.extend({hour:0, minute:0, second:0, millisec:0, timezone:'+0000'}, time);
+
+ var tmptime = format;
+ var ampmName = options['amNames'][0];
+
+ var hour = parseInt(time.hour, 10);
+ if (options.ampm) {
+ if (hour > 11){
+ ampmName = options['pmNames'][0];
+ if(hour > 12)
+ hour = hour % 12;
+ }
+ if (hour === 0)
+ hour = 12;
+ }
+ tmptime = tmptime.replace(/(?:hh?|mm?|ss?|[tT]{1,2}|[lz])/g, function(match) {
+ switch (match.toLowerCase()) {
+ case 'hh': return ('0' + hour).slice(-2);
+ case 'h': return hour;
+ case 'mm': return ('0' + time.minute).slice(-2);
+ case 'm': return time.minute;
+ case 'ss': return ('0' + time.second).slice(-2);
+ case 's': return time.second;
+ case 'l': return ('00' + time.millisec).slice(-3);
+ case 'z': return time.timezone;
+ case 't': case 'tt':
+ if (options.ampm) {
+ if (match.length == 1)
+ ampmName = ampmName.charAt(0);
+ return match.charAt(0) == 'T' ? ampmName.toUpperCase() : ampmName.toLowerCase();
+ }
+ return '';
+ }
+ });
+
+ tmptime = $.trim(tmptime);
+ return tmptime;
+};
+
+//########################################################################
+// the bad hack :/ override datepicker so it doesnt close on select
+// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
+//########################################################################
+$.datepicker._base_selectDate = $.datepicker._selectDate;
+$.datepicker._selectDate = function (id, dateStr) {
+ var inst = this._getInst($(id)[0]),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ tp_inst._limitMinMaxDateTime(inst, true);
+ inst.inline = inst.stay_open = true;
+ //This way the onSelect handler called from calendarpicker get the full dateTime
+ this._base_selectDate(id, dateStr);
+ inst.inline = inst.stay_open = false;
+ this._notifyChange(inst);
+ this._updateDatepicker(inst);
+ }
+ else this._base_selectDate(id, dateStr);
+};
+
+//#############################################################################################
+// second bad hack :/ override datepicker so it triggers an event when changing the input field
+// and does not redraw the datepicker on every selectDate event
+//#############################################################################################
+$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
+$.datepicker._updateDatepicker = function(inst) {
+
+ // don't popup the datepicker if there is another instance already opened
+ var input = inst.input[0];
+ if($.datepicker._curInst &&
+ $.datepicker._curInst != inst &&
+ $.datepicker._datepickerShowing &&
+ $.datepicker._lastInput != input) {
+ return;
+ }
+
+ if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
+
+ this._base_updateDatepicker(inst);
+
+ // Reload the time control when changing something in the input text field.
+ var tp_inst = this._get(inst, 'timepicker');
+ if(tp_inst) tp_inst._addTimePicker(inst);
+ }
+};
+
+//#######################################################################################
+// third bad hack :/ override datepicker so it allows spaces and colon in the input field
+//#######################################################################################
+$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
+$.datepicker._doKeyPress = function(event) {
+ var inst = $.datepicker._getInst(event.target),
+ tp_inst = $.datepicker._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ if ($.datepicker._get(inst, 'constrainInput')) {
+ var ampm = tp_inst._defaults.ampm,
+ dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
+ datetimeChars = tp_inst._defaults.timeFormat.toString()
+ .replace(/[hms]/g, '')
+ .replace(/TT/g, ampm ? 'APM' : '')
+ .replace(/Tt/g, ampm ? 'AaPpMm' : '')
+ .replace(/tT/g, ampm ? 'AaPpMm' : '')
+ .replace(/T/g, ampm ? 'AP' : '')
+ .replace(/tt/g, ampm ? 'apm' : '')
+ .replace(/t/g, ampm ? 'ap' : '') +
+ " " +
+ tp_inst._defaults.separator +
+ tp_inst._defaults.timeSuffix +
+ (tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +
+ (tp_inst._defaults.amNames.join('')) +
+ (tp_inst._defaults.pmNames.join('')) +
+ dateChars,
+ chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
+ return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
+ }
+ }
+
+ return $.datepicker._base_doKeyPress(event);
+};
+
+//#######################################################################################
+// Override key up event to sync manual input changes.
+//#######################################################################################
+$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
+$.datepicker._doKeyUp = function (event) {
+ var inst = $.datepicker._getInst(event.target),
+ tp_inst = $.datepicker._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
+ try {
+ $.datepicker._updateDatepicker(inst);
+ }
+ catch (err) {
+ $.datepicker.log(err);
+ }
+ }
+ }
+
+ return $.datepicker._base_doKeyUp(event);
+};
+
+//#######################################################################################
+// override "Today" button to also grab the time.
+//#######################################################################################
+$.datepicker._base_gotoToday = $.datepicker._gotoToday;
+$.datepicker._gotoToday = function(id) {
+ var inst = this._getInst($(id)[0]),
+ $dp = inst.dpDiv;
+ this._base_gotoToday(id);
+ var now = new Date();
+ var tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst && tp_inst._defaults.showTimezone && tp_inst.timezone_select) {
+ var tzoffset = now.getTimezoneOffset(); // If +0100, returns -60
+ var tzsign = tzoffset > 0 ? '-' : '+';
+ tzoffset = Math.abs(tzoffset);
+ var tzmin = tzoffset % 60;
+ tzoffset = tzsign + ('0' + (tzoffset - tzmin) / 60).slice(-2) + ('0' + tzmin).slice(-2);
+ if (tp_inst._defaults.timezoneIso8609)
+ tzoffset = tzoffset.substring(0, 3) + ':' + tzoffset.substring(3);
+ tp_inst.timezone_select.val(tzoffset);
+ }
+ this._setTime(inst, now);
+ $( '.ui-datepicker-today', $dp).click();
+};
+
+//#######################################################################################
+// Disable & enable the Time in the datetimepicker
+//#######################################################################################
+$.datepicker._disableTimepickerDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+ if (tp_inst) {
+ tp_inst._defaults.showTimepicker = false;
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+$.datepicker._enableTimepickerDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ $(target).datepicker('getDate'); // Init selected[Year|Month|Day]
+ if (tp_inst) {
+ tp_inst._defaults.showTimepicker = true;
+ tp_inst._addTimePicker(inst); // Could be disabled on page load
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+//#######################################################################################
+// Create our own set time function
+//#######################################################################################
+$.datepicker._setTime = function(inst, date) {
+ var tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst) {
+ var defaults = tp_inst._defaults,
+ // calling _setTime with no date sets time to defaults
+ hour = date ? date.getHours() : defaults.hour,
+ minute = date ? date.getMinutes() : defaults.minute,
+ second = date ? date.getSeconds() : defaults.second,
+ millisec = date ? date.getMilliseconds() : defaults.millisec;
+
+ //check if within min/max times..
+ if ((hour < defaults.hourMin || hour > defaults.hourMax) || (minute < defaults.minuteMin || minute > defaults.minuteMax) || (second < defaults.secondMin || second > defaults.secondMax) || (millisec < defaults.millisecMin || millisec > defaults.millisecMax)) {
+ hour = defaults.hourMin;
+ minute = defaults.minuteMin;
+ second = defaults.secondMin;
+ millisec = defaults.millisecMin;
+ }
+
+ tp_inst.hour = hour;
+ tp_inst.minute = minute;
+ tp_inst.second = second;
+ tp_inst.millisec = millisec;
+
+ if (tp_inst.hour_slider) tp_inst.hour_slider.slider('value', hour);
+ if (tp_inst.minute_slider) tp_inst.minute_slider.slider('value', minute);
+ if (tp_inst.second_slider) tp_inst.second_slider.slider('value', second);
+ if (tp_inst.millisec_slider) tp_inst.millisec_slider.slider('value', millisec);
+
+ tp_inst._onTimeChange();
+ tp_inst._updateDateTime(inst);
+ }
+};
+
+//#######################################################################################
+// Create new public method to set only time, callable as $().datepicker('setTime', date)
+//#######################################################################################
+$.datepicker._setTimeDatepicker = function(target, date, withDate) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ this._setDateFromField(inst);
+ var tp_date;
+ if (date) {
+ if (typeof date == "string") {
+ tp_inst._parseTime(date, withDate);
+ tp_date = new Date();
+ tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ }
+ else tp_date = new Date(date.getTime());
+ if (tp_date.toString() == 'Invalid Date') tp_date = undefined;
+ this._setTime(inst, tp_date);
+ }
+ }
+
+};
+
+//#######################################################################################
+// override setDate() to allow setting time too within Date object
+//#######################################################################################
+$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
+$.datepicker._setDateDatepicker = function(target, date) {
+ var inst = this._getInst(target),
+ tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
+
+ this._updateDatepicker(inst);
+ this._base_setDateDatepicker.apply(this, arguments);
+ this._setTimeDatepicker(target, tp_date, true);
+};
+
+//#######################################################################################
+// override getDate() to allow getting time too within Date object
+//#######################################################################################
+$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
+$.datepicker._getDateDatepicker = function(target, noDefault) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+
+ if (tp_inst) {
+ this._setDateFromField(inst, noDefault);
+ var date = this._getDate(inst);
+ if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ return date;
+ }
+ return this._base_getDateDatepicker(target, noDefault);
+};
+
+//#######################################################################################
+// override parseDate() because UI 1.8.14 throws an error about "Extra characters"
+// An option in datapicker to ignore extra format characters would be nicer.
+//#######################################################################################
+$.datepicker._base_parseDate = $.datepicker.parseDate;
+$.datepicker.parseDate = function(format, value, settings) {
+ var date;
+ try {
+ date = this._base_parseDate(format, value, settings);
+ } catch (err) {
+ if (err.indexOf(":") >= 0) {
+ // Hack! The error message ends with a colon, a space, and
+ // the "extra" characters. We rely on that instead of
+ // attempting to perfectly reproduce the parsing algorithm.
+ date = this._base_parseDate(format, value.substring(0,value.length-(err.length-err.indexOf(':')-2)), settings);
+ } else {
+ // The underlying error was not related to the time
+ throw err;
+ }
+ }
+ return date;
+};
+
+//#######################################################################################
+// override formatDate to set date with time to the input
+//#######################################################################################
+$.datepicker._base_formatDate=$.datepicker._formatDate;
+$.datepicker._formatDate = function(inst, day, month, year){
+ var tp_inst = this._get(inst, 'timepicker');
+ if(tp_inst)
+ {
+ if(day)
+ var b = this._base_formatDate(inst, day, month, year);
+ tp_inst._updateDateTime(inst);
+ return tp_inst.$input.val();
+ }
+ return this._base_formatDate(inst);
+};
+
+//#######################################################################################
+// override options setter to add time to maxDate(Time) and minDate(Time). MaxDate
+//#######################################################################################
+$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
+$.datepicker._optionDatepicker = function(target, name, value) {
+ var inst = this._getInst(target),
+ tp_inst = this._get(inst, 'timepicker');
+ if (tp_inst) {
+ var min,max,onselect;
+ if (typeof name == 'string') { // if min/max was set with the string
+ if (name==='minDate' || name==='minDateTime' )
+ min = value;
+ else if (name==='maxDate' || name==='maxDateTime')
+ max = value;
+ else if (name==='onSelect')
+ onselect=value;
+ } else if (typeof name == 'object') { //if min/max was set with the JSON
+ if(name.minDate)
+ min = name.minDate;
+ else if (name.minDateTime)
+ min = name.minDateTime;
+ else if (name.maxDate)
+ max = name.maxDate;
+ else if (name.maxDateTime)
+ max = name.maxDateTime;
+ }
+ if(min){ //if min was set
+ if(min==0)
+ min=new Date();
+ else
+ min= new Date(min);
+
+ tp_inst._defaults.minDate = min;
+ tp_inst._defaults.minDateTime = min;
+ } else if (max){ //if max was set
+ if(max==0)
+ max=new Date();
+ else
+ max= new Date(max);
+ tp_inst._defaults.maxDate = max;
+ tp_inst._defaults.maxDateTime = max;
+ }
+ else if (onselect)
+ tp_inst._defaults.onSelect=onselect;
+ }
+ if (value === undefined)
+ return this._base_optionDatepicker(target, name);
+ return this._base_optionDatepicker(target, name, value);
+};
+
+//#######################################################################################
+// jQuery extend now ignores nulls!
+//#######################################################################################
+function extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props)
+ if (props[name] === null || props[name] === undefined)
+ target[name] = props[name];
+ return target;
+};
+
+$.timepicker = new Timepicker(); // singleton instance
+$.timepicker.version = "0.9.9";
+
+})(jQuery);
+
diff --git a/src/usr/local/www/javascript/jquery.ipv4v6ify.js b/src/usr/local/www/javascript/jquery.ipv4v6ify.js
new file mode 100755
index 0000000..93a513a
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery.ipv4v6ify.js
@@ -0,0 +1,140 @@
+/*jslint browser: true, eqeqeq: true, undef: true */
+/*global jQuery */
+/******************************************************************************
+Lines above are for jslint, the JavaScript verifier. http://www.jslint.com/
+******************************************************************************/
+
+/* MIT-licensed code from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some */
+/* (C) 2007 Mozilla Developer Network and/or Jeff Walden */
+if (!Array.prototype.some) {
+ Array.prototype.some = function(fun /*, thisp */) {
+ "use strict";
+ if (!this) {
+ throw new TypeError();
+ }
+ var t = Object(this);
+ var len = t.length >>> 0;
+ if (typeof fun !== "function") {
+ throw new TypeError();
+ }
+ var thisp = arguments[1];
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(thisp, t[i], i, t)) {
+ return true;
+ }
+ }
+ return false;
+ };
+}
+
+(function ($) {
+ // --------------------------------------------------------------------
+ // find pairs of <input class='ipv4v6'> (textbox for IPv4 or IPv6 addr)
+ // and <select class='ipv4v6'> (dropdown for # bits in CIDR) and
+ // activate behavior that restricts options in the <select> when an
+ // ipv4 address is typed in the <input>.
+ // --------------------------------------------------------------------
+ var _ipv4v6ify = function (input1, input2) {
+ var options = Array.prototype.slice.call(input2.options, 0);
+ var has_128 = options.some(function (x) { return parseInt(x.value, 10) === 128; });
+ var has_0 = options.some(function (x) { return parseInt(x.value, 10) === 0; });
+ var max_ipv6 = has_128 ? 128 : 127;
+ var min_ipv6 = has_0 ? 0 : 1;
+ var max_ipv4 = has_128 ? 32 : 31;
+ var min_ipv4 = has_0 ? 0 : 1;
+ var was_ipv4 = undefined;
+ var is_ipv4 = undefined;
+ var restrict_bits_to_ipv4 = function () {
+ input2.options.length = 0;
+ for (var i = 0; i < options.length; i += 1) {
+ var val = parseInt(options[i].value, 10);
+ if (val >= min_ipv4 && val <= max_ipv4) {
+ input2.options.add(options[i]);
+ }
+ }
+ };
+ var unrestrict_bits = function () {
+ input2.options.length = 0;
+ for (var i = 0; i < options.length; i += 1) {
+ input2.options.add(options[i]);
+ }
+ };
+ var onchange_handler = function () {
+ was_ipv4 = is_ipv4;
+ is_ipv4 = /\./.test(input1.value) && !/\:/.test(input1.value);
+ // handle state transitions to gracefully change the
+ // value in the dropdown.
+ var bits = parseInt($(input2).val(), 10);
+ if (was_ipv4 === false && is_ipv4 === true) {
+ restrict_bits_to_ipv4();
+ /* min_ipv4 -> min_ipv4 */
+ /* ... -> ... */
+ /* max_ipv4 -> max_ipv4 */
+ /* ... -> ... */
+ /* max_ipv6 -> max_ipv4 */
+ if (bits < min_ipv4) {
+ $(input2).val(min_ipv4);
+ }
+ else if (bits < max_ipv4) {
+ $(input2).val(bits);
+ }
+ else {
+ $(input2).val(max_ipv4);
+ }
+ }
+ else if (was_ipv4 === true && is_ipv4 === false) {
+ unrestrict_bits();
+ /* min_ipv4 -> min_ipv4 */
+ /* ... -> ... */
+ /* max_ipv4 -> max_ipv4 */
+ if (bits < min_ipv4) {
+ $(input2).val(min_ipv6);
+ }
+ else if (bits < max_ipv4) {
+ $(input2).val(bits);
+ }
+ else {
+ $(input2).val(max_ipv6);
+ }
+ }
+ else if (was_ipv4 === undefined && is_ipv4 === true) {
+ // initial value is an ipv4 address
+ restrict_bits_to_ipv4();
+ /* min_ipv4 -> min_ipv4 */
+ /* ... -> ... */
+ /* max_ipv4 -> max_ipv4 */
+ /* ... -> ... */
+ /* max_ipv6 -> max_ipv4 */
+ if (bits < min_ipv4) {
+ $(input2).val(min_ipv4);
+ }
+ else if (bits < max_ipv4) {
+ $(input2).val(bits);
+ }
+ else {
+ $(input2).val(max_ipv4);
+ }
+ }
+ };
+ $(input1).unbind("change").bind("change", onchange_handler).trigger("change");
+ };
+ $.fn.extend({
+ "ipv4v6ify": function () {
+ return this.each(function () {
+ var inputs, i, input1, input2;
+ inputs = $(this).find(":input.ipv4v6").toArray();
+ for (i = 0; i < inputs.length - 1; i += 1) {
+ input1 = inputs[i];
+ input2 = inputs[i + 1];
+ if (input1.type === "text" && input2.type === "select-one") {
+ _ipv4v6ify(input1, input2);
+ }
+ }
+ });
+ }
+ });
+ $(function () {
+ $(document).ipv4v6ify();
+ });
+})(jQuery);
+
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100755
index 0000000..954e22d
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png b/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100755
index 0000000..64ece57
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100755
index 0000000..5b5dab2
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png
new file mode 100755
index 0000000..e44f861
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png
new file mode 100755
index 0000000..abdc010
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png
new file mode 100755
index 0000000..b8c9bb1
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png
new file mode 100755
index 0000000..e44f861
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100755
index 0000000..9b383f4
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png
new file mode 100755
index 0000000..cd79e9f
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100755
index 0000000..a23baad
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png
new file mode 100755
index 0000000..3550f06
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png
new file mode 100755
index 0000000..8ad921a
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100755
index 0000000..42ccba2
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100755
index 0000000..39d5824
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100755
index 0000000..f127367
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100755
index 0000000..359397a
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png
new file mode 100755
index 0000000..89b88d8
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png b/src/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png
new file mode 100755
index 0000000..a265c62
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png
new file mode 100755
index 0000000..b273ff1
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png
new file mode 100755
index 0000000..a641a37
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png
new file mode 100755
index 0000000..905274f
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_3383bb_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png
new file mode 100755
index 0000000..59bd45b
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png
new file mode 100755
index 0000000..ed8543e
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_70b2e1_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png
new file mode 100755
index 0000000..50ff803
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_999999_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png
new file mode 100755
index 0000000..85e63e9
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png
new file mode 100755
index 0000000..18e65a1
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_fbc856_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png
new file mode 100755
index 0000000..e117eff
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png b/src/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000..42f8f99
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/src/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js b/src/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js
new file mode 100644
index 0000000..6a4e1d1
--- /dev/null
+++ b/src/usr/local/www/javascript/jquery/jquery-ui-1.11.1.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.11.1 - 2014-09-21
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.1",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.1",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):t.which?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),N=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=N[0],M.top+=N[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+N[0],p[1]+N[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.document[0],s=this.options;try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(n){}return this.helper||s.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(s.iframeFix===!0?"iframe":s.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}
+},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i,s){var n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left,l=h+s.snapElements[c].width,u=s.snapElements[c].top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left-s.margins.left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left-s.margins.left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.1",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left,o=(t.positionAbs||t.position.absolute).top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;
+this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!t){for(this._trigger("beforeStop",e,this._uiHash()),s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!1}if(t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.accordion",{version:"1.11.1",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");
+t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(t.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(t.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())})),s.length?(this.focus(t,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)}}),e.widget("ui.autocomplete",{version:"1.11.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.1",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.1",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.1"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())
+},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,N,C,A,I,P,z,H,F,E,j,O,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",N=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)C=(x+u)%7,N+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[C]+"'>"+p[C]+"</span></th>";for(M+=N+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),I=(this._getFirstDayOfMonth(et,Z)-u+7)%7,P=Math.ceil((I+A)/7),z=Q?this.maxRows>P?this.maxRows:P:P,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-I)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)j=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],O=H.getMonth()!==Z,W=O&&!y||!j[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(O?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(O&&!v?"":" "+j[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(O&&!v||!j[2]?"":" title='"+j[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(O&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(O?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.1",e.datepicker,e.widget("ui.dialog",{version:"1.11.1",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;
+e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.progressbar",{version:"1.11.1",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectmenu",{version:"1.11.1",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(e){e.preventDefault()},click:"_toggle",keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.1",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.spinner",{version:"1.11.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;
+return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.1",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.1",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,a.is(":hidden")||a.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i),a.length)return a.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):a.position(e.extend({of:i},this.options.position)),this.hiding=!1,this.closing=!1,a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:a}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(o.remove=function(){this._removeTooltip(a)}),t&&"mouseover"!==t.type||(o.mouseleave="close"),t&&"focusin"!==t.type||(o.focusout="close"),this._on(!0,i,o)}},close:function(t){var i=this,s=e(t?t.currentTarget:this.element),n=this._find(s);this.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),this.hiding=!0,n.stop(!0),this._hide(n,this.options.hide,function(){i._removeTooltip(e(this)),this.hiding=!1,this.closing=!1}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,s){e(s.element).attr("title",s.title),delete i.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:n}),this.hiding||(this.closing=!1))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]=t,i},_find:function(t){var i=t.data("ui-tooltip-id");return i?e("#"+i):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0),e("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}});var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.1",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)
+},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}}); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/load_balancer_pool_edit/pool.js b/src/usr/local/www/javascript/load_balancer_pool_edit/pool.js
new file mode 100644
index 0000000..98e317c
--- /dev/null
+++ b/src/usr/local/www/javascript/load_balancer_pool_edit/pool.js
@@ -0,0 +1,191 @@
+/*
+ pool.js
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* Add server to virtual server pool
+ * operates on whatever form is passed to it
+ */
+function AddServerToPool(form) {
+ var ServerPort = form.ipaddr.value;
+ form['servers[]'].options[form['servers[]'].options.length] = new Option(ServerPort,ServerPort);
+}
+
+
+function AllServers(id, selectAll) {
+ var opts = document.getElementById(id).getElementsByTagName('option');
+ for (i = 0; i < opts.length; i++)
+ {
+ opts[i].selected = selectAll;
+ }
+}
+
+
+function RemoveServerFromPool(form, field)
+{
+ var theSel = form[field];
+ var selIndex = theSel.selectedIndex;
+ if (selIndex != -1) {
+ for(i=theSel.length-1; i>=0; i--)
+ {
+ if(theSel.options[i].selected)
+ {
+ theSel.options[i] = null;
+ }
+ }
+ if (theSel.length > 0) {
+ theSel.selectedIndex = selIndex == 0 ? 0 : selIndex - 1;
+ }
+ }
+}
+
+function addOption(theSel, theText, theValue)
+{
+ var newOpt = new Option(theText, theValue);
+ var selLength = theSel.length;
+ theSel.options[selLength] = newOpt;
+}
+
+function deleteOption(theSel, theIndex)
+{
+ var selLength = theSel.length;
+ if(selLength>0)
+ {
+ theSel.options[theIndex] = null;
+ }
+}
+
+function moveOptions(theSelFrom, theSelTo)
+{
+ var selLength = theSelFrom.length;
+ var selectedText = new Array();
+ var selectedValues = new Array();
+ var selectedCount = 0;
+
+ var i;
+
+ // Find the selected Options in reverse order
+ // and delete them from the 'from' Select.
+ for(i=selLength-1; i>=0; i--)
+ {
+ if(theSelFrom.options[i].selected)
+ {
+ selectedText[selectedCount] = theSelFrom.options[i].text;
+ selectedValues[selectedCount] = theSelFrom.options[i].value;
+ deleteOption(theSelFrom, i);
+ selectedCount++;
+ }
+ }
+
+ // Add the selected text/values in reverse order.
+ // This will add the Options to the 'to' Select
+ // in the same order as they were in the 'from' Select.
+ for(i=selectedCount-1; i>=0; i--)
+ {
+ addOption(theSelTo, selectedText[i], selectedValues[i]);
+ }
+}
+
+function checkPoolControls() {
+ var active = document.iform.serversSelect;
+ var inactive = document.iform.serversDisabledSelect;
+ if (jQuery("#mode").val() == "failover") {
+ if (jQuery("#serversSelect option").length > 0) {
+ jQuery("#moveToEnabled").prop("disabled",true);
+ } else {
+ jQuery("#moveToEnabled").prop("disabled",false);
+ }
+ } else {
+ jQuery("#moveToEnabled").prop("disabled",false);
+ }
+}
+
+function enforceFailover() {
+ if (jQuery("#mode").val() != "failover") {
+ return;
+ }
+ var active = document.iform.serversSelect;
+ var inactive = document.iform.serversDisabledSelect;
+ var count = 0;
+ var moveText = new Array();
+ var moveVals = new Array();
+ var i;
+ if (active.length > 1) {
+ // Move all but one entry to the disabled list
+ for (i=active.length-1; i>0; i--) {
+ moveText[count] = active.options[i].text;
+ moveVals[count] = active.options[i].value;
+ deleteOption(active, i);
+ count++;
+ }
+ for (i=count-1; i>=0; i--) {
+ addOption(inactive, moveText[i], moveVals[i]);
+ }
+ }
+}
+
+// functions up() and down() modified from http://www.babailiica.com/js/sorter/
+
+function up(obj) {
+ var sel = new Array();
+ for (var i=0; i<obj.length; i++) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != 0 && !obj[sel[i]-1].selected) {
+ var tmp = new Array(obj[sel[i]-1].text, obj[sel[i]-1].value);
+ obj[sel[i]-1].text = obj[sel[i]].text;
+ obj[sel[i]-1].value = obj[sel[i]].value;
+ obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]-1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+}
+
+function down(obj) {
+ var sel = new Array();
+ for (var i=obj.length-1; i>-1; i--) {
+ if (obj[i].selected == true) {
+ sel[sel.length] = i;
+ }
+ }
+ for (i in sel) {
+ if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
+ var tmp = new Array(obj[sel[i]+1].text, obj[sel[i]+1].value);
+ obj[sel[i]+1].text = obj[sel[i]].text;
+ obj[sel[i]+1].value = obj[sel[i]].value;
+ obj[sel[i]].text = tmp[0];
+ obj[sel[i]].value = tmp[1];
+ obj[sel[i]+1].selected = true;
+ obj[sel[i]].selected = false;
+ }
+ }
+}
diff --git a/src/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js b/src/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js
new file mode 100644
index 0000000..6c44272
--- /dev/null
+++ b/src/usr/local/www/javascript/load_balancer_relay_protocol_edit/load_balancer_relay_protocol_edit.js
@@ -0,0 +1,56 @@
+/*
+ pool.js
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ * This code makes use of prototype shortcuts and will not work
+ * without prototype being loaded prior to it.
+ */
+
+function copyOption(theSrc, theDst)
+{
+ var selOption = theSrc[theSrc.selectedIndex];
+ theDst.options[theDst.length] = new Option(selOption.text, selOption.value);
+}
+
+function deleteOption(theSel)
+{
+ var theIndex = theSel.selectedIndex;
+ var selLength = theSel.length;
+ if(selLength>0)
+ {
+ theSel.options[theIndex] = null;
+ }
+}
+
+function AllOptions(el, selectAll) {
+ el.select('option').each(function(opt) {
+ opt.selected = selectAll;
+ });
+}
+
diff --git a/src/usr/local/www/javascript/niftyjsCode.js b/src/usr/local/www/javascript/niftyjsCode.js
new file mode 100644
index 0000000..75ef8b0
--- /dev/null
+++ b/src/usr/local/www/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/javascript/numericupdown/css/numericupdown.css b/src/usr/local/www/javascript/numericupdown/css/numericupdown.css
new file mode 100644
index 0000000..429619b
--- /dev/null
+++ b/src/usr/local/www/javascript/numericupdown/css/numericupdown.css
@@ -0,0 +1,40 @@
+.buttonInc,
+.buttonDec
+ {
+ margin:0;
+ padding:0;
+ width:11px;
+ height:8px;
+ vertical-align:top;
+ background-color:#ccc;
+ text-indent:-999px;
+ overflow:hidden;
+ background:#ccc url(../images/up.gif) no-repeat 50% 50%;
+ border-top:1px solid #eee;
+ border-left:1px solid #eee;
+ border-bottom:1px solid #777;
+ border-right:1px solid #777;
+ voice-family: inherit;
+ height:9px;
+ }
+html>body .buttonInc,
+html>body .buttonDec
+ {
+ height:9px;
+ }
+.buttonDec
+ {
+ margin:9px 0 0 -11px;
+ background:#ccc url(../images/down.gif) no-repeat 50% 50%;
+ voice-family: inherit;
+ margin:10px 0 0 -11px;
+ }
+html>body .buttonDec
+ {
+ margin:10px 0 0 -11px;
+ }
+button
+ {
+ font-family:monospace;
+ line-height:1em;
+ }
diff --git a/src/usr/local/www/javascript/numericupdown/images/down.gif b/src/usr/local/www/javascript/numericupdown/images/down.gif
new file mode 100755
index 0000000..278664a
--- /dev/null
+++ b/src/usr/local/www/javascript/numericupdown/images/down.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/numericupdown/images/up.gif b/src/usr/local/www/javascript/numericupdown/images/up.gif
new file mode 100755
index 0000000..ad33679
--- /dev/null
+++ b/src/usr/local/www/javascript/numericupdown/images/up.gif
Binary files differ
diff --git a/src/usr/local/www/javascript/numericupdown/js/numericupdown.js b/src/usr/local/www/javascript/numericupdown/js/numericupdown.js
new file mode 100644
index 0000000..a6af0d4
--- /dev/null
+++ b/src/usr/local/www/javascript/numericupdown/js/numericupdown.js
@@ -0,0 +1,287 @@
+// As usual, we keep the generic functions out of the namespace
+function addEvent(obj, evType, fn, useCapture){
+ if (obj.addEventListener){
+ obj.addEventListener(evType, fn, useCapture);
+ return true;
+ } else if (obj.attachEvent){
+ var r = obj.attachEvent("on"+evType, fn);
+ return r;
+ }
+ return false;
+}
+
+function removeEvent(obj, evType, fn, useCapture){
+ if (obj.removeEventListener){
+ obj.removeEventListener(evType, fn, useCapture);
+ return true;
+ } else if (obj.detachEvent){
+ var r = obj.detachEvent("on"+evType, fn);
+ return r;
+ }
+ return false;
+}
+
+if(!String.prototype.trim) String.prototype.trim = function() { return this.replace(/^\s*/,'').replace(/\s*$/, ''); };
+
+var incrementalInputController;
+
+// Encapsulate the Timer and incrementalInput objects
+(function() {
+
+// WEBFX Timer : http://www.webfx.com/
+function Timer(nPauseTime) {
+ this._pauseTime = typeof nPauseTime == "undefined" ? 1000 : nPauseTime;
+ this._timer = null;
+ this._isStarted = false;
+}
+
+Timer.prototype.start = function () {
+ if (this.isStarted())
+ this.stop();
+ var oThis = this;
+ this._timer = window.setTimeout(function () {
+ if (typeof oThis.ontimer == "function")
+ oThis.ontimer();
+ }, this._pauseTime);
+ this._isStarted = false;
+};
+
+Timer.prototype.stop = function () {
+ if (this._timer != null)
+ window.clearTimeout(this._timer);
+ this._isStarted = false;
+};
+
+Timer.prototype.isStarted = function () {
+ return this._isStarted;
+};
+
+Timer.prototype.getPauseTime = function () {
+ return this._pauseTime;
+};
+
+Timer.prototype.setPauseTime = function (nPauseTime) {
+ this._pauseTime = nPauseTime;
+};
+
+function incrementalInput(inp, range, increment, classInc, classDec) {
+ if(!inp || !range) return;
+
+ this._inp = inp;
+ this._buttonInc;
+ this._buttonDec;
+ this._value;
+ this._classInc = classInc;
+ this._classDec = classDec;
+ this._minv = Number(range[0]);
+ this._maxv = Number(range[1]);
+ this._incBase = Number(increment) || 1;
+ this._precision = 0;
+ if(increment.indexOf('.') != -1) {
+ this._precision = increment.substr(increment.indexOf('.')+1, increment.length);
+ this._precision = this._precision.length;
+ }
+
+ this._increment;
+ this._timerInc = 1000;
+ this._timer = new Timer(1000);
+ this._stop = false;
+ this._key = false;
+
+ this._events = {
+
+ dec: function(e) {
+ self._increment = -self._incBase;
+ self.updateValue();
+ return false;
+ },
+ inc: function(e) {
+ self._increment = self._incBase;
+ self.updateValue();
+ return false;
+ },
+ keydec: function(e) {
+ var kc;
+ if (!e) var e = window.event;
+
+ if (e.keyCode) kc = e.keyCode;
+ else if (e.charCode) kc = e.charCode;
+
+ if ( kc != 13 || self._key ) return true;
+
+ self._key = true;
+ self._increment = -self._incBase;
+ self._timerInc = 1000;
+ self.updateValue();
+ return false;
+ },
+ keyinc: function(e) {
+ var kc;
+ if (!e) var e = window.event;
+
+ if (e.keyCode) kc = e.keyCode;
+ else if (e.charCode) kc = e.charCode;
+
+ if ( kc != 13 || self._key ) return true;
+
+ self._key = true;
+ self._increment = self._incBase;
+ self._timerInc = 1000;
+ self.updateValue();
+ return false;
+ },
+ clearTimer: function(e) {
+ self._key = false;
+ self._events.stopTimer();
+ },
+ stopTimer: function(e) {
+ self._timer.stop();
+ self._timerInc = 1000;
+ self._timer.setPauseTime(self._timerInc);
+ },
+ onchange: function(e){
+ var value = Number(parseFloat(self._inp.value).toFixed(self._precision));
+
+ if( Number(value % self._incBase).toFixed(self._precision) != self._incBase ) {
+ value -= Number(parseFloat(value % self._incBase)).toFixed(self._precision);
+ };
+ if(value < self._minv) value = self._minv;
+ else if(value > self._maxv) value = self._maxv;
+ self._inp.value = parseFloat(value).toFixed(self._precision);
+ }
+ };
+
+ this.updateValue = function() {
+ if(self._inp.disabled) {
+ stopTimer();
+ return;
+ }
+
+
+ var value = Number(parseFloat(self._inp.value).toFixed(self._precision));
+ var stop = self._timerInc == 0 ? true : false;
+
+ if( Math.abs(Number(value % self._incBase).toFixed(self._precision)) != self._incBase ) {
+ value -= Number(parseFloat(value % self._incBase)).toFixed(self._precision);
+ }
+
+ value += Number(parseFloat(self._increment).toFixed(self._precision));
+
+ if(value < self._minv) {
+ value = self._minv;
+ stop = true;
+ } else if(value > self._maxv) {
+ value = self._maxv;
+ stop = true;
+ }
+
+ self._inp.value = parseFloat(value).toFixed(self._precision);
+
+ if(self._timerInc > 50) {
+ self._timerInc = 50 + Math.round(((self._timerInc - 50) / 1.8));
+ }
+
+ self._timer.setPauseTime(self._timerInc);
+ if(!stop) self._timer.start();
+ };
+
+ this.construct = function() {
+ var h = self._inp.offsetHeight;
+
+ self._inp.onchange = self._events.onchange;
+
+ self._buttonInc = document.createElement('button');
+ self._buttonDec = document.createElement('button');
+
+ if(self._classDec) self._buttonDec.className = self._classDec;
+ if(self._classInc) self._buttonInc.className = self._classInc;
+
+ self._buttonDec.setAttribute('type','button');
+ self._buttonInc.setAttribute('type','button');
+
+ self._buttonDec.appendChild(document.createTextNode('-'));
+ self._buttonInc.appendChild(document.createTextNode('+'));
+
+ self._buttonDec.onmousedown = self._events.dec;
+ self._buttonInc.onmousedown = self._events.inc;
+
+ addEvent(self._buttonDec, "keypress", self._events.keydec, true);
+ addEvent(self._buttonDec, "keyup", self._events.clearTimer, true);
+ addEvent(self._buttonInc, "keypress", self._events.keyinc, true);
+ addEvent(self._buttonInc, "keyup", self._events.clearTimer, true);
+
+ self._buttonInc.onmouseout = self._events.stopTimer;
+ self._buttonDec.onmouseout = self._events.stopTimer;
+
+ addEvent(document, 'mouseup', self._events.stopTimer, false);
+
+ if(self._inp.nextSibling) {
+ self._inp.parentNode.insertBefore( self._buttonDec, self._inp.nextSibling );
+ self._inp.parentNode.insertBefore( self._buttonInc, self._inp.nextSibling );
+ } else {
+ self._inp.parentNode.appendChild( self._buttonInc );
+ self._inp.parentNode.appendChild( self._buttonDec );
+ };
+ };
+
+ var self = this;
+
+ self._timer.ontimer = function() { self.updateValue(); };
+ self.construct();
+}
+
+incremetalInputController = {
+ inputCollection: [],
+ constructor: function() {
+
+ if(!document.getElementById || !document.createElement) return;
+
+ // TODO : cut the regExps down to readable levels - they are hideous at present...
+ var regExp_1 = /fd_incremental_inp_range_([-]{0,1}[0-9]+(f[0-9]+){0,1}){1}_([-]{0,1}[0-9]+(f[0-9]+){0,1}){1}/ig;
+ var regExp_2 = /fd_increment_([0-9]+(f[0-9]+){0,1}){1}/ig;
+ var regExp_3 = /fd_classname_inc_([\-_0-9a-zA-Z]+){1}/ig;
+ var regExp_4 = /fd_classname_dec_([\-_0-9a-zA-Z]+){1}/ig;
+
+ var inputCollection = document.getElementsByTagName('input');
+ var obj, range, classname, classes, classInc, classDec, increment;
+
+ for(var i = 0, inp; inp = inputCollection[i]; i++) {
+ if(inp.type == 'text' && inp.className && inp.className.search(regExp_1) != -1) {
+ classes = inp.className.split(' ');
+ increment = 1;
+ range = [0,0];
+ classInc = "";
+ classDec = "";
+
+ for(var z = 0, classname; classname = classes[z]; z++) {
+ if(classname.search(regExp_1) != -1) {
+ range = classname.trim();
+ range = range.replace(/fd_incremental_inp_range_/ig, '');
+ range = range.replace(/f/g,'.');
+ range = range.split('_');
+ } else if(classname.search(regExp_2) != -1) {
+ increment = classname.trim();
+ increment = increment.replace(/fd_increment_/ig, '');
+ increment = increment.replace('f','.');
+ } else if(classname.search(regExp_3) != -1) {
+ classInc = classname.trim();
+ classInc = classInc.replace(/fd_classname_inc_/ig, '');
+ } else if(classname.search(regExp_4) != -1) {
+ classDec = classname.trim();
+ classDec = classDec.replace(/fd_classname_dec_/ig, '');
+ }
+ }
+
+ if (inp.value.length == 0 || isNaN(inp.value) == true) { inp.value = 0; }
+
+ obj = new incrementalInput(inp, range, increment, classInc, classDec);
+ incremetalInputController.inputCollection.push(obj);
+ }
+ }
+ }
+};
+
+// Close and call anonymous function
+})();
+
+addEvent(window, 'load', incremetalInputController.constructor, true); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/pi.js b/src/usr/local/www/javascript/pi.js
new file mode 100644
index 0000000..8a3a3c3
--- /dev/null
+++ b/src/usr/local/www/javascript/pi.js
@@ -0,0 +1,682 @@
+(function(_scope){
+
+ /*
+ * pi.js
+ * 1.0
+ * Azer Koçulu <http://azer.kodfabrik.com>
+ * http://pi-js.googlecode.com
+ */
+
+ _scope.pi = Object(3.14159265358979323846);
+ var pi = _scope.pi;
+ pi.version = 1.0;
+
+ pi.env = {
+ ie: /MSIE/i.test(navigator.userAgent),
+ ie6: /MSIE 6/i.test(navigator.userAgent),
+ ie7: /MSIE 7/i.test(navigator.userAgent),
+ ie8: /MSIE 8/i.test(navigator.userAgent),
+ firefox: /Firefox/i.test(navigator.userAgent),
+ opera: /Opera/i.test(navigator.userAgent),
+ webkit: /Webkit/i.test(navigator.userAgent)
+ };
+
+ pi.util = {
+ IsArray:function(_object){
+ return _object && _object != window && ( _object instanceof Array || ( typeof _object.length == "number" && typeof _object.item =="function" ) );
+ },
+ IsHash:function(_object){
+ return _object && typeof _object=="object"&&(_object==window||_object instanceof Object)&&!_object.nodeName&&!pi.util.IsArray(_object);
+ },
+ DOMContentLoaded:[],
+ AddEvent: function(_element,_eventName,_fn,_useCapture){
+ _element[pi.env.ie.toggle("attachEvent","addEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false);
+ return pi.util.AddEvent.curry(this,_element);
+ },
+ RemoveEvent: function(_element,_eventName,_fn,_useCapture){
+ return _element[pi.env.ie.toggle("detachEvent","removeEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false);
+ },
+ GetWindowSize:function(){
+ return {
+ height:pi.env.ie?Math.max(document.documentElement.clientHeight,document.body.clientHeight):window.innerHeight,
+ width:pi.env.ie?Math.max(document.documentElement.clientWidth,document.body.clientWidth):window.innerWidth
+ };
+ },
+ Include:function(_url,_callback){
+ var script = new pi.element("script").attribute.set("src",_url), callback = _callback||new Function, done = false, head = pi.get.byTag("head")[0];
+ script.environment.getElement().onload = script.environment.getElement().onreadystatechange = function(){
+ if(!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")){
+ callback.call(this);
+ done = true;
+ head.removeChild(script.environment.getElement());
+ }
+ };
+ script.insert(head);
+ },
+ Element:{
+ addClass:function(_element,_class){
+ if( !pi.util.Element.hasClass(_element,_class) )
+ pi.util.Element.setClass(_element, pi.util.Element.getClass(_element) + " " + _class );
+ },
+ getClass:function(_element){
+ return _element.getAttribute(pi.env.ie.toggle("className","class"))||"";
+ },
+ hasClass:function(_element,_class){
+ return pi.util.Element.getClass(_element).split(" ").indexOf(_class)>-1;
+ },
+ removeClass:function(_element,_class){
+ if( pi.util.Element.hasClass(_element,_class) )
+ pi.util.Element.setClass(
+ _element,
+ pi.util.Element.getClass(_element,_class).split(" ").removeValue(_class).join(" ")
+ );
+ },
+ setClass:function(_element,_value){
+ _element.setAttribute( pi.env.ie.toggle("className","class"), _value );
+ },
+ toggleClass:function(){
+ if(pi.util.Element.hasClass.apply(this,arguments))
+ pi.util.Element.removeClass.apply(this,arguments);
+ else
+ pi.util.Element.addClass.apply(this,arguments);
+ },
+ getOpacity:function(_styleObject){
+ var styleObject = _styleObject;
+ if(!pi.env.ie)
+ return styleObject["opacity"];
+
+ var alpha = styleObject["filter"].match(/opacity\=(\d+)/i);
+ return alpha?alpha[1]/100:1;
+ },
+ setOpacity:function(_element,_value){
+ if(!pi.env.ie)
+ return pi.util.Element.addStyle(_element,{ "opacity":_value });
+ _value*=100;
+ pi.util.Element.addStyle(_element,{ "filter":"alpha(opacity="+_value+")" });
+ return this._parent_;
+ },
+ getPosition:function(_element){
+ var parent = _element,offsetLeft = 0, offsetTop = 0, view = pi.util.Element.getView(_element);
+ while(parent&&parent!=document.body&&parent!=document.firstChild){
+ offsetLeft +=parseInt(parent.offsetLeft);
+ offsetTop += parseInt(parent.offsetTop);
+ parent = parent.offsetParent;
+ };
+ return {
+ "bottom":view["bottom"],
+ "left":view["left"],
+ "marginTop":view["marginTop"],
+ "marginLeft":view["marginLeft"],
+ "offsetLeft":offsetLeft,
+ "offsetTop":offsetTop,
+ "position":view["position"],
+ "right":view["right"],
+ "top":view["top"],
+ "z-index":view["zIndex"]
+ };
+ },
+ getSize:function(_element){
+ var view = pi.util.Element.getView(_element);
+ return {
+ "height":view["height"],
+ "offsetHeight":_element.offsetHeight,
+ "offsetWidth":_element.offsetWidth,
+ "width":view["width"]
+ };
+ },
+ addStyle:function(_element,_style){
+ for(var key in _style){
+ key = key=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):key;
+ if (key == "opacity" && pi.env.ie) {
+ pi.util.Element.setOpacity(_element,_style[key]);
+ continue;
+ }
+ _element.style[key] = _style[key];
+ }
+ },
+ getStyle:function(_element,_property){
+ _property = _property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;
+ if(_property=="opacity"&&pi.env.ie)
+ return pi.util.Element.getOpacity(_element.style);
+ return typeof _property=="string"?_element.style[_property]:_element.style;
+ },
+ getView:function(_element,_property){
+ var view = document.defaultView?document.defaultView.getComputedStyle(_element,null):_element.currentStyle;
+ _property = _property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;
+ if(_property=="opacity"&&pi.env.ie)
+ return pi.util.Element.getOpacity(_element,view);
+ return typeof _property=="string"?view[_property]:view;
+ }
+ },
+ CloneObject:function(_object,_fn){
+ var tmp = {};
+ for(var key in _object)
+ {
+ if( pi.util.IsArray( _object[key] ) ){
+ tmp[key] = Array.prototype.clone.apply( _object[key] );
+ } else
+ if( pi.util.IsHash( _object[key] ) ){
+ tmp[ key ] = pi.util.CloneObject(_object[key]);
+ if(_fn)_fn.call(tmp,key,_object);
+ } else
+ tmp[key] = _object[key];
+ }
+ return tmp;
+ },
+ MergeObjects:function(_object,_source){
+ for(var key in _source){
+ var value = _source[key];
+ if (pi.util.IsArray(_source[key])) {
+ if(pi.util.IsArray( _object[key] )){
+ Array.prototype.push.apply( _source[key], _object[key] );
+ }
+ else
+ value = _source[key].clone();
+ }
+ else
+ if (pi.util.IsHash(_source[key])) {
+ if (pi.util.IsHash(_object[key])) {
+ value = pi.util.MergeObjects(_object[key], _source[key]);
+ } else {
+ value = pi.util.CloneObject( _source[key] );
+ }
+ }
+ _object[key] = value;
+ };
+ return _object;
+ }
+ };
+
+ pi.get = function(){
+ return document.getElementById(arguments[0]);
+ };
+ pi.get.byTag = function(){
+ return document.getElementsByTagName(arguments[0]);
+ };
+ pi.get.byClass = function(){ return document.getElementsByClassName.apply(document,arguments); };
+
+ pi.base = function(){
+ this.body = {};
+ this.constructor = null;
+
+ this.build = function(_skipClonning){
+ var base = this, skipClonning = _skipClonning||false, _private = {},
+ fn = function(){
+ var _p = pi.util.CloneObject(_private);
+ if(!skipClonning){
+ for(var key in this){
+
+ if(pi.util.IsArray( this[ key ] ) ){
+ this[key] = Array.prototype.clone.apply( this[key] );
+ } else
+ if( pi.util.IsHash(this[key]) ){
+ this[key] = pi.util.CloneObject(
+ this[ key ],
+ function(_key,_object){
+ this[ _key ]._parent_ = this;
+ }
+ );
+ this[key]._parent_ = this;
+ }
+ }
+ };
+ base.createAccessors( _p, this );
+ if(base.constructor)
+ return base.constructor.apply(this,arguments);
+ return this;
+ };
+ this.movePrivateMembers(this.body,_private);
+ if(this.constructor){
+ fn["$Constructor"] = this.constructor;
+ }
+ fn.prototype = this.body;
+ return fn;
+ };
+
+ this.createAccessors = function(_p, _branch){
+ var getter = function(_property){ return this[_property]; },
+ setter = function(_property,_value){ this[_property] = _value; return _branch._parent_||_branch; };
+
+ for (var name in _p) {
+ var isPrivate = name.substring(0, 1) == "_", title = name.substring(1, 2).toUpperCase() + name.substring(2);
+ if (isPrivate) {
+ _branch["get" + title] = getter.curry(_p,name);
+ _branch["set" + title] = setter.curry(_p,name);
+ }
+ else
+ if (pi.util.IsHash(_p[name])){
+ if(!_branch[name])
+ _branch[name] = {};
+ this.createAccessors(_p[name], _branch[name]);
+ }
+ };
+ };
+
+ this.movePrivateMembers = function(_object, _branch){
+ for (var name in _object) {
+ var isPrivate = name.substring(0, 1) == "_";
+
+ if (isPrivate) {
+ _branch[name] = _object[name];
+ delete _object[name];
+ }
+ else
+ if (pi.util.IsHash(_object[name])){
+ _branch[name] = {};
+ this.movePrivateMembers(_object[name], _branch[name]);
+ }
+ };
+ };
+ };
+
+ Function.prototype.extend = function(_prototype,_skipClonning){
+ var object = new pi.base, superClass = this;
+ if(_prototype["$Constructor"]){
+ object.constructor = _prototype["$Constructor"];
+ delete _prototype["$Constructor"];
+ };
+
+ object.body = superClass==pi.base?_prototype:pi.util.MergeObjects(_prototype,superClass.prototype,2);
+ object.constructor=object.constructor||function(){
+ if(superClass!=pi.base)
+ superClass.apply(this,arguments);
+ };
+
+ return object.build(_skipClonning);
+ };
+
+ Function.prototype.curry = function(_scope){
+ var fn = this, scope = _scope||window, args = Array.prototype.slice.call(arguments,1);
+ return function(){
+ return fn.apply(scope,args.concat( Array.prototype.slice.call(arguments,0) ));
+ };
+ };
+
+ pi.element = pi.base.extend({
+ "$Constructor":function(_tag){
+ this.environment.setElement(document.createElement(_tag||"DIV"));
+ this.environment.getElement().pi = this;
+ return this;
+ },
+ "clean":function(){
+ var childs = this.child.get();
+ while(childs.length){
+ childs[0].parentNode.removeChild(childs[0]);
+ }
+ },
+ "clone":function(_deep){
+ return this.environment.getElement().cloneNode(_deep);
+ },
+ "insert":function(_element){
+ _element = _element.environment?_element.environment.getElement():_element;
+ _element.appendChild(this.environment.getElement());
+ return this;
+ },
+ "insertAfter":function(_referenceElement){
+ _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
+ _referenceElement.nextSibling?this.insertBefore(_referenceElement.nextSibling):this.insert(_referenceElement.parentNode);
+ return this;
+ },
+ "insertBefore":function(_referenceElement){
+ _referenceElement = _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;
+ _referenceElement.parentNode.insertBefore(this.environment.getElement(),_referenceElement);
+ return this;
+ },
+ "query":function(_expression,_resultType,namespaceResolver,_result){
+ return pi.xpath(_expression,_resultType||"ORDERED_NODE_SNAPSHOT_TYPE",this.environment.getElement(),_namespaceResolver,_result);
+ },
+ "remove":function(){
+ this.environment.getParent().removeChild(
+ this.environment.getElement()
+ );
+ },
+ "update":function(_value){
+ ["textarea","input"].indexOf(this.environment.getName())>-1?
+ (this.environment.getElement().value = _value):
+ (this.environment.getElement().innerHTML = _value);
+ return this;
+ },
+ "attribute":{
+ "getAll":function(_name){
+ return this._parent_.environment.getElement().attributes;
+ },
+ "clear":function(_name){
+ this.set(_name,"");
+ return this._parent_;
+ },
+ "get":function(_name){
+ return this._parent_.environment.getElement().getAttribute(_name);
+ },
+ "has":function(_name){
+ return pi.env.ie?(this.get(_name)!=null):this._parent_.environment.getElement().hasAttribute(_name);
+ },
+ "remove":function(_name){
+ this._parent_.environment.getElement().removeAttribute(_name);
+ return this._parent_;
+ },
+ "set":function(_name,_value){
+ this._parent_.environment.getElement().setAttribute(_name,_value);
+ return this._parent_;
+ },
+ "addClass":function(_classes){
+ for (var i = 0; i < arguments.length; i++) {
+ pi.util.Element.addClass(this._parent_.environment.getElement(),arguments[i]);
+ };
+ return this._parent_;
+ },
+ "clearClass":function(){
+ this.setClass("");
+ this._parent_;
+ },
+ "getClass":function(){
+ return pi.util.Element.getClass( this._parent_.environment.getElement() );
+ },
+ "hasClass":function(_class){
+ return pi.util.Element.hasClass( this._parent_.environment.getElement(), _class );
+ },
+ "setClass":function(_value){
+ return pi.util.Element.setClass( this._parent_.environment.getElement(), _value );
+ },
+ "removeClass":function(_class){
+ pi.util.Element.removeClass( this._parent_.environment.getElement(), _class );
+ return this._parent_;
+ },
+ "toggleClass":function(_class){
+ pi.util.Element.toggleClass( this._parent_.environment.getElement(), _class );
+ }
+ },
+ "child":{
+ "get":function(){
+ return this._parent_.environment.getElement().childNodes;
+ },
+ "add":function(_elements){
+ for (var i = 0; i < arguments.length; i++) {
+ var el = arguments[i];
+ this._parent_.environment.getElement().appendChild(
+ el.environment ? el.environment.getElement() : el
+ );
+ }
+ return this._parent_;
+ },
+ "addAfter":function(_element,_referenceElement){
+ this.addBefore(
+ _element.environment?_element.environment.getElement():_element,
+ (_referenceElement.environment?_referenceElement.environment.getElement():_referenceElement).nextSibling
+ );
+ return this._parent_;
+ },
+ "addBefore":function(_element,_referenceElement){
+ this._parent_.environment.getElement().insertBefore(
+ _element.environment?_element.environment.getElement():_element,
+ _referenceElement.environment?_referenceElement.environment.getElement():_referenceElement
+ );
+ return this._parent_;
+ },
+ "query":function(_tag,_attributeName,_attributeValue){
+ return this._parent_.query(
+ "{0}{1}".format( (_tag?"{0}".format(_tag):"/*"), _attributeName||_attributeValue?"[contains(concat(' ', @{0}, ' '),' {1} ')]".format(_attributeName||"",_attributeValue||""):"" )
+ );
+ },
+ "remove":function(_element){
+ this._parent_.environment.getElement().removeChild(_element.environment?_element.environment.getElement():_element);
+ }
+ },
+ "environment":{
+ "_element":null,
+ "getParent":function(){
+ return this.getElement().parentNode;
+ },
+ "getPosition":function(){
+ return pi.util.Element.getPosition(this.getElement());
+ },
+ "getSize":function(){
+ return pi.util.Element.getSize( this.getElement() );
+ },
+ "addStyle":function(_styleObject){
+ pi.util.Element.addStyle(this.getElement(),_styleObject);
+ return this._parent_;
+ },
+ "getStyle":function(_property){
+ return pi.util.Element.getStyle(_property);
+ },
+ "getName":function(){
+ return this.getElement().nodeName;
+ },
+ "getType":function(){
+ return this.getElement().nodeType;
+ },
+ "getView":function(_property){
+ return pi.util.Element.getView(this.getElement(),_property);
+ }
+ },
+ "event":{
+ "addListener":function(_event,_fn,_useCapture){
+ pi.util.AddEvent(this._parent_.environment.getElement(),_event,_fn,_useCapture);
+ return this._parent_;
+ },
+ "removeListener":function(_event,_fn,_useCapture){
+ pi.util.RemoveEvent(this._parent_.environment.getElement(),_event,_fn,_useCapture);
+ return this._parent_;
+ }
+ }
+ });
+
+ pi.xhr = new pi.base;
+ pi.xhr.constructor = function(){
+ var api;
+ if(!window.XMLHttpRequest){
+ var names = ["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
+ for (var i = 0; i < names.length; i++) {
+ try {
+ this.environment.setApi(new ActiveXObject(names[i]));
+ break;
+ } catch (e) { continue; }
+ }
+ }
+ else
+ this.environment.setApi(new XMLHttpRequest());
+ this.environment.getApi().onreadystatechange=this.event.readystatechange.curry(this);
+ return this;
+ };
+ pi.xhr.body = {
+ "abort":function(){
+ this.environment.getApi().abort();
+ },
+ "send":function(){
+ var url = this.environment.getUrl(), data = this.environment.getData(),dataUrl = "";
+
+ for (var key in data)
+ dataUrl += "{0}={1}&".format(key, data[key]);
+
+ if (this.environment.getType()=="GET")
+ url += (url.search("\\?")==-1?"?":"&")+"{0}".format(dataUrl);
+
+ this.environment.getApi().open(this.environment.getType(),url,this.environment.getAsync());
+
+ for(var key in this.environment.getHeader())
+ this.environment.getApi().setRequestHeader(key,this.environment.getHeader()[key]);
+
+ this.environment.getApi().send(this.environment.getType()=="GET"?"":dataUrl);
+ }
+ };
+ pi.xhr.body.environment = {
+ "_async":true, "_api":null, "_cache":true, "_callback":[], "_channel":null, "_data":{}, "_header":{}, "_mimeType":null, "_multipart":false, "_type":"GET", "_timeout":0, "_url":"",
+ "addCallback": function(_options,_fn){
+ this.getCallback().push({ "fn":_fn, "options":_options });
+ },
+ "addHeader": function(_key,_value){
+ this.getHeader()[_key] = _value;
+ },
+ "addData": function(_key,_value){
+ this.getData()[_key] = _value;
+ },
+ "changeCache":function(_value){
+ if(_value==false){
+ this.addData("forceCache",Math.round(Math.random()*10000));
+ }
+ this.setCache(_value);
+ },
+ "changeType": function(_value){
+ if(_value=="POST"){
+ this.addHeader("Content-Type","application/x-www-form-urlencoded");
+ }
+ this.setType(_value);
+ }
+ };
+ pi.xhr.body.event = {
+ "readystatechange":function(){
+ var readyState = this.environment.getApi().readyState;
+ var callback=this.environment.getCallback();
+
+ for (var i = 0; i < callback.length; i++) {
+ if(callback[i].options.readyState.indexOf(readyState)>-1)
+ callback[i].fn.apply(this);
+ }
+ }
+ };
+ pi.xhr = pi.xhr.build();
+
+ /*
+ * xml.xhr.get
+ */
+
+ pi.xhr.get = function(_url,_returnPiObject){
+ var request = new pi.xhr();
+ request.environment.setAsync(false);
+ request.environment.setUrl(_url);
+ request.send();
+ return _returnPiObject?request:request.environment.getApi();
+ };
+
+ /*
+ * pi.xpath
+ */
+
+ pi.xpath = function(_expression,_resultType,_contextNode,_namespaceResolver,_result){
+ var contextNode = _contextNode||document,
+ expression = _expression||"",
+ namespaceResolver = _namespaceResolver||null,
+ result=_result||null,
+ resultType=_resultType||"ANY_TYPE";
+ return document.evaluate(expression, contextNode, namespaceResolver, XPathResult[resultType], result);
+ };
+
+ Array.prototype.clone = function(){
+ var tmp = [];
+ Array.prototype.push.apply(tmp,this);
+ tmp.forEach(function(item,index,object){
+ if(item instanceof Array)
+ object[index] = object[index].clone();
+ });
+ return tmp;
+ };
+ Array.prototype.count = function(_value){
+ var count = 0;
+ this.forEach(function(){
+ count+=Number(arguments[0]==_value);
+ });
+ return count;
+ };
+
+ Array.prototype.forEach = Array.prototype.forEach||function(_function){
+ for(var i=0; i<this.length; i++)
+ _function.apply(this,[this[i],i,this]);
+ };
+
+ Array.prototype.getLastItem = function(){
+ return this[this.length-1];
+ };
+
+ Array.prototype.indexOf = Array.prototype.indexOf||function(_value){
+ var index = -1;
+ for(var i=0; i<this.length; i++)
+ if(this[i]==_value){
+ index = i;
+ break;
+ }
+ return index;
+ };
+
+ Array.prototype.remove = function(_index){
+ var array = this.slice(0,_index);
+ Array.prototype.push.apply(array,this.slice(_index+1));
+ return array;
+ };
+
+ Array.prototype.removeValue = function(_value){
+ return this.remove(this.indexOf(_value));
+ };
+
+ Boolean.prototype.toggle = function(){
+ return this==true?arguments[0]:arguments[1];
+ };
+
+ Number.prototype.base = function(_system){
+ var remain = this%_system;
+ if(this==remain)return String.fromCharCode(this+(this>9?87:48));
+ return ((this-remain)/_system).base(_system)+String.fromCharCode(remain+(remain>9?87:48));
+ };
+ Number.prototype.decimal = function(_system){
+ var result = 0, digit = String(this).split("");
+ for(var i=0; i<digit.length; i++)
+ {
+ digit[i]=parseInt((digit[i].charCodeAt(0)>58)?digit[i].charCodeAt(0)-87:digit[i]);
+ result += digit[i]*(Math.pow(_system,digit.length-1-i));
+ }
+ return result;
+ };
+ Number.prototype.range = function(_pattern){
+ for(
+ var value = String(this), isFloat = /\./i.test(value),
+ i = isFloat.toggle(parseInt(value.split(".")[0]),0),
+ end = parseInt(value.split(".")[isFloat.toggle(1,0)]),
+ array = []; i<end; i++
+ ){
+ array.push(
+ Boolean(_pattern)==false?i:(typeof _pattern=="function"?_pattern(i):_pattern[i])
+ );
+ }
+ return array;
+ };
+
+ String.prototype.escape = function(){
+ return escape(this);
+ };
+
+ String.prototype.format = function(){
+ var values = arguments;
+ return this.replace(/\{(\d)\}/g,function(){
+ return values[arguments[1]];
+ });
+ };
+
+ String.prototype.leftpad = function(_len,_ch){
+ var str=this;
+ var ch = Boolean(_ch)==false?" ":_ch;
+ while(str.length<_len)
+ str=ch+str;
+ return str;
+ };
+
+ String.prototype.toggle = function(_value,_other){
+ return this==_value?_value:_other;
+ };
+
+ String.prototype.unicode = function(){
+ var str="", obj = this.split("");
+ for(var i=obj.length-1; i>=0; i--)
+ str="\\u{0}{1}".format(String(obj[i].charCodeAt(0).base(16)).leftpad(4,"0"),str);
+ return str;
+ };
+
+ pi.util.AddEvent(
+ pi.env.ie?window:document,
+ pi.env.ie?"load":"DOMContentLoaded",
+ function(){
+ for(var i=0; i<pi.util.DOMContentLoaded.length; i++){
+ pi.util.DOMContentLoaded[ i ]();
+ }
+ }
+ );
+
+})(window); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/row_helper.js b/src/usr/local/www/javascript/row_helper.js
new file mode 100644
index 0000000..07d4bfc
--- /dev/null
+++ b/src/usr/local/www/javascript/row_helper.js
@@ -0,0 +1,97 @@
+// Global Variables
+var rowname = new Array(4999);
+var rowtype = new Array(4999);
+var newrow = new Array(4999);
+var rowsize = new Array(4999);
+
+for (i = 0; i < 4999; i++) {
+ rowname[i] = '';
+ rowtype[i] = '';
+ newrow[i] = '';
+ rowsize[i] = '30';
+}
+
+var field_counter_js = 0;
+var loaded = 0;
+var is_streaming_progress_bar = 0;
+var temp_streaming_text = "";
+
+var addRowTo = (function() {
+ return (function (tableId) {
+ var $ = jQuery;
+ var d, tbody, tr, td, bgc, i, ii, j;
+ d = document;
+ tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ for (i = 0; i < field_counter_js; i++) {
+ td = d.createElement("td");
+ if(typeof(rowtype[i]) == 'function') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' />" + rowtype[i](rowname[i], rowsize[i], totalrows) + " ";
+ } else if(rowtype[i] == 'textbox') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'textbox,ipv4v6') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input size='" + rowsize[i] + "' class='formfld unknown ipv4v6' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'password') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input type='password' size='" + rowsize[i] + "' class='formfld pwd' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'select') {
+ var cidr;
+ var str;
+ for (cidr = 128; cidr>= 1; cidr--) {
+ str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
+ }
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
+ } else if(rowtype[i] == 'select,ipv4v6') {
+ var cidr;
+ var str;
+ for (cidr = 128; cidr>= 1; cidr--) {
+ str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
+ }
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select class='ipv4v6' size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
+ } else if(rowtype[i] == 'select_source') {
+ var cidr;
+ var str;
+ for (cidr = 128; cidr>= 1; cidr--) {
+ str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
+ }
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select size='1' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + str + "</select> ";
+ } else {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input type='checkbox' name='" + rowname[i] + totalrows + "' /> ";
+ }
+ tr.appendChild(td);
+ }
+ td = d.createElement("td");
+ td.rowSpan = "1";
+
+ td.innerHTML = '<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" /></a>';
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+ totalrows++;
+ if($(tr).ipv4v6ify)
+ $(tr).ipv4v6ify();
+ });
+})();
+
+function removeRow(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr")
+ el = el.parentNode;
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+}
+
+function find_unique_field_name(field_name) {
+ // loop through field_name and strip off -NUMBER
+ var last_found_dash = 0;
+ for (var i = 0; i < field_name.length; i++) {
+ // is this a dash, if so, update
+ // last_found_dash
+ if (field_name.substr(i,1) == "-" )
+ last_found_dash = i;
+ }
+ if (last_found_dash < 1)
+ return field_name;
+ return(field_name.substr(0,last_found_dash));
+}
diff --git a/src/usr/local/www/javascript/row_helper_dynamic.js b/src/usr/local/www/javascript/row_helper_dynamic.js
new file mode 100644
index 0000000..d144093
--- /dev/null
+++ b/src/usr/local/www/javascript/row_helper_dynamic.js
@@ -0,0 +1,98 @@
+// Global Variables
+var rowname = new Array(99);
+var rowtype = new Array(99);
+var newrow = new Array(99);
+var rowsize = new Array(99);
+
+// Global variables. Set to javascript code
+// that will be eval() after change, add & delete.
+var rowhelper_onChange = '';
+var rowhelper_onAdd = '';
+var rowhelper_onDelete = '';
+
+for (i = 0; i < 99; i++) {
+ rowname[i] = '';
+ rowtype[i] = '';
+ newrow[i] = '';
+ rowsize[i] = '25';
+}
+
+var field_counter_js = 0;
+var loaded = 0;
+var is_streaming_progress_bar = 0;
+var temp_streaming_text = "";
+
+var addRowTo = (function() {
+ return (function (tableId, objectSize) {
+ var $ = jQuery;
+ var d, tbody, tr, td, bgc, i, ii, j, size, className;
+ d = document;
+ tbody = d.getElementById(tableId).getElementsByTagName("tbody").item(0);
+ tr = d.createElement("tr");
+ totalrows++;
+ size = objectSize;
+ for (i = 0; i < field_counter_js; i++) {
+ if (!objectSize)
+ size = rowsize[i];
+ td = d.createElement("td");
+ if(typeof(rowtype[i]) == 'function') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' />" + rowtype[i](rowname[i], size, totalrows) + " ";
+ } else if(rowtype[i] == 'textbox') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'textbox,ipv4v6') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " size='" + rowsize[i] + "' name='" + rowname[i] + totalrows + "' class='ipv4v6' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'select') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ } else if(rowtype[i] == 'select,ipv4v6') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' class='ipv4v6' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ } else if(rowtype[i] == 'interfaces_selection') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ } else if(rowtype[i] == 'select_source') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><select " + rowhelper_onChange + " name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'>" + newrow[i] + "</select> ";
+ } else if(rowtype[i] == 'checkbox') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " type='checkbox'name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'input') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " class='formfld unknown' size='" + size + "' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ } else if(rowtype[i] == 'password') {
+ td.innerHTML="<input type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "' /><input " + rowhelper_onChange + " class='formfld pwd' type='password' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "' /> ";
+ }
+ tr.appendChild(td);
+ }
+ td = d.createElement("td");
+ td.rowSpan = "1";
+ td.innerHTML = '<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/' + theme + '/images/icons/icon_x.gif" /></a>';
+ tr.appendChild(td);
+ tbody.appendChild(tr);
+ if(rowhelper_onAdd != '')
+ eval(rowhelper_onAdd);
+ if($(tr).ipv4v6ify)
+ $(tr).ipv4v6ify();
+ });
+})();
+
+function removeRow(el) {
+ var cel;
+ while (el && el.nodeName.toLowerCase() != "tr")
+ el = el.parentNode;
+
+ if (el && el.parentNode) {
+ cel = el.getElementsByTagName("td").item(0);
+ el.parentNode.removeChild(el);
+ }
+ if(rowhelper_onDelete != '')
+ eval(rowhelper_onDelete);
+}
+
+function find_unique_field_name(field_name) {
+ // loop through field_name and strip off -NUMBER
+ var last_found_dash = 0;
+ for (var i = 0; i < field_name.length; i++) {
+ // is this a dash, if so, update
+ // last_found_dash
+ if (field_name.substr(i,1) == "-" )
+ last_found_dash = i;
+ }
+ if (last_found_dash < 1)
+ return field_name;
+ return(field_name.substr(0,last_found_dash));
+}
diff --git a/src/usr/local/www/javascript/row_toggle.js b/src/usr/local/www/javascript/row_toggle.js
new file mode 100644
index 0000000..350743e
--- /dev/null
+++ b/src/usr/local/www/javascript/row_toggle.js
@@ -0,0 +1,66 @@
+function fr_toggle(id, prefix) {
+ if (!prefix)
+ prefix = 'fr';
+
+ var checkbox = document.getElementById(prefix + 'c' + id);
+ checkbox.checked = !checkbox.checked;
+ fr_bgcolor(id, prefix);
+}
+
+function fr_bgcolor(id, prefix) {
+ if (!prefix)
+ prefix = 'fr';
+
+ var row = document.getElementById(prefix + id);
+ var checkbox = document.getElementById(prefix + 'c' + id);
+ var cells = row.getElementsByTagName('td');
+ var cellcnt = cells.length;
+
+ for (i = 0; i < cellcnt; i++) {
+ // Check for cells with frd id only
+ if (cells[i].id == prefix + 'd' + id)
+ cells[i].style.backgroundColor = checkbox.checked ? "#FFFFBB" : "#FFFFFF";
+ }
+ //cells[7].style.backgroundColor = checkbox.checked ? "#FFFFBB" : "#990000";
+}
+
+function fr_insline(id, on, prefix) {
+ if (!prefix)
+ prefix = 'fr';
+
+ var row = document.getElementById(prefix + id);
+ var prevrow;
+ if (id != 0) {
+ prevrow = document.getElementById(prefix + (id-1));
+ } else {
+ prevrow = document.getElementById(prefix + 'header');
+ }
+
+ var cells = row.getElementsByTagName("td");
+ var prevcells = prevrow.getElementsByTagName("td");
+
+ for (i = 0; i <= prevcells.length - 1; i++) {
+ if (prevcells[i].id == prefix + 'd' + (id-1)) {
+ if (on) {
+ prevcells[i].style.borderBottom = "3px solid #990000";
+ prevcells[i].style.paddingBottom = ((id != 0) ? 2 : 3) + "px";
+ } else {
+ prevcells[i].style.borderBottom = "1px solid #999999";
+ prevcells[i].style.borderBottomWidth = "1px";
+ prevcells[i].style.paddingBottom = ((id != 0) ? 4 : 5) + "px";
+ }
+ }
+ }
+
+ for (i = 0; i <= cells.length - 1; i++) {
+ if (cells[i].id == prefix + 'd' + (id)) {
+ if (on) {
+ cells[i].style.borderTop = "2px solid #990000";
+ cells[i].style.paddingTop = "2px";
+ } else {
+ cells[i].style.borderTopWidth = 0;
+ cells[i].style.paddingTop = "4px";
+ }
+ }
+ }
+}
diff --git a/src/usr/local/www/javascript/scriptaculous/builder.js b/src/usr/local/www/javascript/scriptaculous/builder.js
new file mode 100644
index 0000000..b0dd14e
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName.toUpperCase() != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array) ||
+ arguments[1].tagName) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName.toUpperCase() != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return $(element);
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+
+ ATTR_MAP: {
+ 'className': 'class',
+ 'htmlFor': 'for'
+ },
+
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(children.tagName) {
+ element.appendChild(children);
+ return;
+ }
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e);
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ build: function(html) {
+ var element = this.node('div');
+ $(element).update(html.strip());
+ return element.down();
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("a abbr acronym address applet area b base basefont bdo big blockquote body " +
+ "br button caption center cite code col colgroup dd del dfn dir div dl dt em fieldset " +
+ "font form frame frameset h1 h2 h3 h4 h5 h6 head hr html i iframe img input ins isindex "+
+ "kbd label legend li link map menu meta noframes noscript object ol optgroup option p "+
+ "param pre q s samp script select small span strike strong style sub sup table tbody td "+
+ "textarea tfoot th thead title tr tt u ul var").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ };
+ });
+ }
+}; \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/controls.js b/src/usr/local/www/javascript/scriptaculous/controls.js
new file mode 100644
index 0000000..59815cb
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = $(element);
+ this.element = element;
+ this.update = $(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}); };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = $(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = $(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = $(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if ($(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = $(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = $(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = $(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+}); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/dragdrop.js b/src/usr/local/www/javascript/scriptaculous/dragdrop.js
new file mode 100644
index 0000000..452601e
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/dragdrop.js
@@ -0,0 +1,974 @@
+// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==$(element); });
+ },
+
+ add: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || { });
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if(Object.isArray(containment)) {
+ containment.each( function(c) { options._containers.push($(c)); });
+ } else {
+ options._containers.push($(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c; });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v); } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var drop, affected = [];
+
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0)
+ drop = Droppables.findDeepestChild(affected);
+
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+ if (drop) {
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ if (drop != this.last_active) Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop) {
+ this.last_active.onDrop(element, this.last_active.element, event);
+ return true;
+ }
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+};
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable; });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element; });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false;
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || { });
+
+ this.element = $(element);
+
+ if(options.handle && Object.isString(options.handle))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = $(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = $(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='input' ||
+ tag_name=='select' ||
+ tag_name=='option' ||
+ tag_name=='button' ||
+ tag_name=='textarea')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = this.element.cumulativeOffset();
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]); });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+ if(!this.delta)
+ this.delta = this.currentDelta();
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+ if (!this._originallyAbsolute)
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+
+ if(!this.options.quiet){
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ }
+
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.quiet){
+ Position.prepare();
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ Droppables.show(pointer, this.element);
+ }
+
+ if(this.options.ghosting) {
+ if (!this._originallyAbsolute)
+ Position.relativize(this.element);
+ delete this._originallyAbsolute;
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ var dropped = false;
+ if(success) {
+ dropped = Droppables.fire(event, this.element);
+ if (!dropped) dropped = false;
+ }
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ if (dropped == 0 || revert != 'failure')
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = this.element.cumulativeOffset();
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i]);
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(Object.isFunction(this.options.snap)) {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(Object.isArray(this.options.snap)) {
+ p = p.map( function(v, i) {
+ return (v/this.options.snap[i]).round()*this.options.snap[i]; }.bind(this));
+ } else {
+ p = p.map( function(v) {
+ return (v/this.options.snap).round()*this.options.snap; }.bind(this));
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight;
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+ initialize: function(element, observer) {
+ this.element = $(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element);
+ }
+});
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: { },
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement($(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ element = $(element);
+ var s = Sortable.sortables[element.id];
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d); });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+
+ // these take arrays of elements or ids and can be
+ // used for better initialization performance
+ elements: false,
+ handles: false,
+
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || { });
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ quiet: options.quiet,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ };
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ };
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+ var handle = options.handles ? $(options.handles[i]) :
+ (options.handle ? $(e).select('.' + options.handle)[0] : e);
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.identify()] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ ($('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = dropon.cumulativeOffset();
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: $(children[i]).down(options.treeTag)
+ };
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child);
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = $(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || { });
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ };
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[1] || { });
+
+ return $(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[2] || { });
+
+ var nodeMap = { };
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = $(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v); }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}; \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/effects.js b/src/usr/local/www/javascript/scriptaculous/effects.js
new file mode 100644
index 0000000..7d5192c
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/effects.js
@@ -0,0 +1,1123 @@
+// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart(); } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = $(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return $(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = $(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = $(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = $(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect, options) {
+ element = $(element);
+ effect = (effect || 'appear').toLowerCase();
+
+ return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, options || {}));
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle'; }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect; });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? $(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value; };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = $(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = $(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = $(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = $(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = $(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = $(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = $(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [$(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)); });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle($(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = $(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = $(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = $(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = $(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = $(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/prototype.js b/src/usr/local/www/javascript/scriptaculous/prototype.js
new file mode 100644
index 0000000..9cb702c
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/prototype.js
@@ -0,0 +1,6079 @@
+/* Prototype JavaScript framework, version 1.7
+ * (c) 2005-2010 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+
+ Version: '1.7',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile/.test(ua)
+ };
+ })(),
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+
+ SelectorsAPI: !!document.querySelector,
+
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div'),
+ form = document.createElement('form'),
+ isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+
+ K: function(x) { return x; }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+var Abstract = { };
+
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+
+ var IS_DONTENUM_BUGGY = (function(){
+ for (var p in { toString: 1 }) {
+ if (p === 'toString') return false;
+ }
+ return true;
+ })();
+
+ function subclass() {};
+ function create() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+ return klass;
+ }
+
+ function addMethods(source) {
+ var ancestor = this.superclass && this.superclass.prototype,
+ properties = Object.keys(source);
+
+ if (IS_DONTENUM_BUGGY) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames()[0] == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
+
+ var _toString = Object.prototype.toString,
+ NULL_TYPE = 'Null',
+ UNDEFINED_TYPE = 'Undefined',
+ BOOLEAN_TYPE = 'Boolean',
+ NUMBER_TYPE = 'Number',
+ STRING_TYPE = 'String',
+ OBJECT_TYPE = 'Object',
+ FUNCTION_CLASS = '[object Function]',
+ BOOLEAN_CLASS = '[object Boolean]',
+ NUMBER_CLASS = '[object Number]',
+ STRING_CLASS = '[object String]',
+ ARRAY_CLASS = '[object Array]',
+ DATE_CLASS = '[object Date]',
+ NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
+ typeof JSON.stringify === 'function' &&
+ JSON.stringify(0) === '0' &&
+ typeof JSON.stringify(Prototype.K) === 'undefined';
+
+ function Type(o) {
+ switch(o) {
+ case null: return NULL_TYPE;
+ case (void 0): return UNDEFINED_TYPE;
+ }
+ var type = typeof o;
+ switch(type) {
+ case 'boolean': return BOOLEAN_TYPE;
+ case 'number': return NUMBER_TYPE;
+ case 'string': return STRING_TYPE;
+ }
+ return OBJECT_TYPE;
+ }
+
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
+ try {
+ if (isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ }
+
+ function toJSON(value) {
+ return Str('', { '': value }, []);
+ }
+
+ function Str(key, holder, stack) {
+ var value = holder[key],
+ type = typeof value;
+
+ if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+ var _class = _toString.call(value);
+
+ switch (_class) {
+ case NUMBER_CLASS:
+ case BOOLEAN_CLASS:
+ case STRING_CLASS:
+ value = value.valueOf();
+ }
+
+ switch (value) {
+ case null: return 'null';
+ case true: return 'true';
+ case false: return 'false';
+ }
+
+ type = typeof value;
+ switch (type) {
+ case 'string':
+ return value.inspect(true);
+ case 'number':
+ return isFinite(value) ? String(value) : 'null';
+ case 'object':
+
+ for (var i = 0, length = stack.length; i < length; i++) {
+ if (stack[i] === value) { throw new TypeError(); }
+ }
+ stack.push(value);
+
+ var partial = [];
+ if (_class === ARRAY_CLASS) {
+ for (var i = 0, length = value.length; i < length; i++) {
+ var str = Str(i, value, stack);
+ partial.push(typeof str === 'undefined' ? 'null' : str);
+ }
+ partial = '[' + partial.join(',') + ']';
+ } else {
+ var keys = Object.keys(value);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ var key = keys[i], str = Str(key, value, stack);
+ if (typeof str !== "undefined") {
+ partial.push(key.inspect(true)+ ':' + str);
+ }
+ }
+ partial = '{' + partial.join(',') + '}';
+ }
+ stack.pop();
+ return partial;
+ }
+ }
+
+ function stringify(object) {
+ return JSON.stringify(object);
+ }
+
+ function toQueryString(object) {
+ return $H(object).toQueryString();
+ }
+
+ function toHTML(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ }
+
+ function keys(object) {
+ if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
+ var results = [];
+ for (var property in object) {
+ if (object.hasOwnProperty(property)) {
+ results.push(property);
+ }
+ }
+ return results;
+ }
+
+ function values(object) {
+ var results = [];
+ for (var property in object)
+ results.push(object[property]);
+ return results;
+ }
+
+ function clone(object) {
+ return extend({ }, object);
+ }
+
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) === ARRAY_CLASS;
+ }
+
+ var hasNativeIsArray = (typeof Array.isArray == 'function')
+ && Array.isArray([]) && !Array.isArray({});
+
+ if (hasNativeIsArray) {
+ isArray = Array.isArray;
+ }
+
+ function isHash(object) {
+ return object instanceof Hash;
+ }
+
+ function isFunction(object) {
+ return _toString.call(object) === FUNCTION_CLASS;
+ }
+
+ function isString(object) {
+ return _toString.call(object) === STRING_CLASS;
+ }
+
+ function isNumber(object) {
+ return _toString.call(object) === NUMBER_CLASS;
+ }
+
+ function isDate(object) {
+ return _toString.call(object) === DATE_CLASS;
+ }
+
+ function isUndefined(object) {
+ return typeof object === "undefined";
+ }
+
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: Object.keys || keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isDate: isDate,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ }
+
+ function bind(context) {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = slice.call(arguments, 1);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(context, a);
+ };
+ }
+
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
+ return function(event) {
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
+ };
+ }
+
+ function curry() {
+ if (!arguments.length) return this;
+ var __method = this, args = slice.call(arguments, 0);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
+ };
+ }
+
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
+
+ function wrap(wrapper) {
+ var __method = this;
+ return function() {
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
+ };
+ }
+
+ function methodize() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ var a = update([this], arguments);
+ return __method.apply(null, a);
+ };
+ }
+
+ return {
+ argumentNames: argumentNames,
+ bind: bind,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ };
+})());
+
+
+
+(function(proto) {
+
+ function toISOString() {
+ return this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z';
+ }
+
+
+ function toJSON() {
+ return this.toISOString();
+ }
+
+ if (!proto.toISOString) proto.toISOString = toISOString;
+ if (!proto.toJSON) proto.toJSON = toJSON;
+
+})(Date.prototype);
+
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, (function() {
+ var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
+ typeof JSON.parse === 'function' &&
+ JSON.parse('{"test": true}').test;
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match); };
+ }
+
+ function gsub(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ }
+
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ }
+
+ function scan(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ }
+
+ function truncate(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ }
+
+ function strip() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ }
+
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
+
+ function stripScripts() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ }
+
+ function extractScripts() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
+ matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ }
+
+ function evalScripts() {
+ return this.extractScripts().map(function(script) { return eval(script); });
+ }
+
+ function escapeHTML() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ }
+
+ function unescapeHTML() {
+ return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+ }
+
+
+ function toQueryParams(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift()),
+ value = pair.length > 1 ? pair.join('=') : pair[0];
+
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ }
+
+ function toArray() {
+ return this.split('');
+ }
+
+ function succ() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ }
+
+ function times(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ }
+
+ function camelize() {
+ return this.replace(/-+(.)?/g, function(match, chr) {
+ return chr ? chr.toUpperCase() : '';
+ });
+ }
+
+ function capitalize() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ }
+
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
+
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
+
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
+
+ function isJSON() {
+ var str = this;
+ if (str.blank()) return false;
+ str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
+ str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
+ str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
+ return (/^[\],:{}\s]*$/).test(str);
+ }
+
+ function evalJSON(sanitize) {
+ var json = this.unfilterJSON(),
+ cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+ if (cx.test(json)) {
+ json = json.replace(cx, function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ }
+
+ function parseJSON() {
+ var json = this.unfilterJSON();
+ return JSON.parse(json);
+ }
+
+ function include(pattern) {
+ return this.indexOf(pattern) > -1;
+ }
+
+ function startsWith(pattern) {
+ return this.lastIndexOf(pattern, 0) === 0;
+ }
+
+ function endsWith(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.indexOf(pattern, d) === d;
+ }
+
+ function empty() {
+ return this == '';
+ }
+
+ function blank() {
+ return /^\s*$/.test(this);
+ }
+
+ function interpolate(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+
+ return {
+ gsub: gsub,
+ sub: sub,
+ scan: scan,
+ truncate: truncate,
+ strip: String.prototype.trim || strip,
+ stripTags: stripTags,
+ stripScripts: stripScripts,
+ extractScripts: extractScripts,
+ evalScripts: evalScripts,
+ escapeHTML: escapeHTML,
+ unescapeHTML: unescapeHTML,
+ toQueryParams: toQueryParams,
+ parseQuery: toQueryParams,
+ toArray: toArray,
+ succ: succ,
+ times: times,
+ camelize: camelize,
+ capitalize: capitalize,
+ underscore: underscore,
+ dasherize: dasherize,
+ inspect: inspect,
+ unfilterJSON: unfilterJSON,
+ isJSON: isJSON,
+ evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
+ include: include,
+ startsWith: startsWith,
+ endsWith: endsWith,
+ empty: empty,
+ blank: blank,
+ interpolate: interpolate
+ };
+})());
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (object && Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return (match[1] + '');
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3],
+ pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = (function() {
+ function each(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ }
+
+ function eachSlice(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ }
+
+ function all(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ }
+
+ function any(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ }
+
+ function collect(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function detect(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ }
+
+ function findAll(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function grep(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(RegExp.escape(filter));
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function include(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ }
+
+ function inGroupsOf(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ }
+
+ function inject(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ }
+
+ function invoke(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ }
+
+ function max(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ }
+
+ function min(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ }
+
+ function partition(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ }
+
+ function pluck(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ }
+
+ function reject(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function sortBy(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ }
+
+ function toArray() {
+ return this.map();
+ }
+
+ function zip() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ }
+
+ function size() {
+ return this.toArray().length;
+ }
+
+ function inspect() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+
+
+
+
+
+
+
+
+
+ return {
+ each: each,
+ eachSlice: eachSlice,
+ all: all,
+ every: all,
+ any: any,
+ some: any,
+ collect: collect,
+ map: collect,
+ detect: detect,
+ findAll: findAll,
+ select: findAll,
+ filter: findAll,
+ grep: grep,
+ include: include,
+ member: include,
+ inGroupsOf: inGroupsOf,
+ inject: inject,
+ invoke: invoke,
+ max: max,
+ min: min,
+ partition: partition,
+ pluck: pluck,
+ reject: reject,
+ sortBy: sortBy,
+ toArray: toArray,
+ entries: toArray,
+ zip: zip,
+ size: size,
+ inspect: inspect,
+ find: detect
+ };
+})();
+
+function $A(iterable) {
+ if (!iterable) return [];
+ if ('toArray' in Object(iterable)) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+Array.from = $A;
+
+
+(function() {
+ var arrayProto = Array.prototype,
+ slice = arrayProto.slice,
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+ function each(iterator, context) {
+ for (var i = 0, length = this.length >>> 0; i < length; i++) {
+ if (i in this) iterator.call(context, this[i], i, this);
+ }
+ }
+ if (!_each) _each = each;
+
+ function clear() {
+ this.length = 0;
+ return this;
+ }
+
+ function first() {
+ return this[0];
+ }
+
+ function last() {
+ return this[this.length - 1];
+ }
+
+ function compact() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ }
+
+ function flatten() {
+ return this.inject([], function(array, value) {
+ if (Object.isArray(value))
+ return array.concat(value.flatten());
+ array.push(value);
+ return array;
+ });
+ }
+
+ function without() {
+ var values = slice.call(arguments, 0);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ }
+
+ function reverse(inline) {
+ return (inline === false ? this.toArray() : this)._reverse();
+ }
+
+ function uniq(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ }
+
+ function intersect(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value; });
+ });
+ }
+
+
+ function clone() {
+ return slice.call(this, 0);
+ }
+
+ function size() {
+ return this.length;
+ }
+
+ function inspect() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ }
+
+ function indexOf(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+ }
+
+ function lastIndexOf(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+ }
+
+ function concat() {
+ var array = slice.call(this, 0), item;
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ item = arguments[i];
+ if (Object.isArray(item) && !('callee' in item)) {
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+ array.push(item[j]);
+ } else {
+ array.push(item);
+ }
+ }
+ return array;
+ }
+
+ Object.extend(arrayProto, Enumerable);
+
+ if (!arrayProto._reverse)
+ arrayProto._reverse = arrayProto.reverse;
+
+ Object.extend(arrayProto, {
+ _each: _each,
+ clear: clear,
+ first: first,
+ last: last,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ reverse: reverse,
+ uniq: uniq,
+ intersect: intersect,
+ clone: clone,
+ toArray: clone,
+ size: size,
+ inspect: inspect
+ });
+
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
+ return [].concat(arguments)[0][0] !== 1;
+ })(1,2);
+
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ function initialize(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ }
+
+
+ function _each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+
+ function set(key, value) {
+ return this._object[key] = value;
+ }
+
+ function get(key) {
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ }
+
+ function unset(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ }
+
+ function toObject() {
+ return Object.clone(this._object);
+ }
+
+
+
+ function keys() {
+ return this.pluck('key');
+ }
+
+ function values() {
+ return this.pluck('value');
+ }
+
+ function index(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ }
+
+ function merge(object) {
+ return this.clone().update(object);
+ }
+
+ function update(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ function toQueryString() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values)) {
+ var queryValues = [];
+ for (var i = 0, len = values.length, value; i < len; i++) {
+ value = values[i];
+ queryValues.push(toQueryPair(key, value));
+ }
+ return results.concat(queryValues);
+ }
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ }
+
+ function inspect() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
+
+ function clone() {
+ return new Hash(this);
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ set: set,
+ get: get,
+ unset: unset,
+ toObject: toObject,
+ toTemplateReplacements: toObject,
+ keys: keys,
+ values: values,
+ index: index,
+ merge: merge,
+ update: update,
+ toQueryString: toQueryString,
+ inspect: inspect,
+ toJSON: toObject,
+ clone: clone
+ };
+})());
+
+Hash.from = $H;
+Object.extend(Number.prototype, (function() {
+ function toColorPart() {
+ return this.toPaddedString(2, 16);
+ }
+
+ function succ() {
+ return this + 1;
+ }
+
+ function times(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ }
+
+ function toPaddedString(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ }
+
+ function abs() {
+ return Math.abs(this);
+ }
+
+ function round() {
+ return Math.round(this);
+ }
+
+ function ceil() {
+ return Math.ceil(this);
+ }
+
+ function floor() {
+ return Math.floor(this);
+ }
+
+ return {
+ toColorPart: toColorPart,
+ succ: succ,
+ times: times,
+ toPaddedString: toPaddedString,
+ abs: abs,
+ round: round,
+ ceil: ceil,
+ floor: floor
+ };
+})());
+
+function $R(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+ function initialize(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ }
+
+ function _each(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ }
+
+ function include(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ include: include
+ };
+})());
+
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest();},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP');},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP');}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++; },
+ onComplete: function() { Ajax.activeRequestCount--; }
+});
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.isString(this.options.parameters) ?
+ this.options.parameters :
+ Object.toQueryString(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ params += (params ? '&' : '') + "_method=" + this.method;
+ this.method = 'post';
+ }
+
+ if (params && this.method === 'get') {
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ }
+
+ this.parameters = params.toQueryParams();
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value; });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300) || status == 304;
+ },
+
+ getStatus: function() {
+ try {
+ if (this.transport.status === 1223) return 204;
+ return this.transport.status || 0;
+ } catch (e) { return 0; }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null; }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+
+
+
+
+
+
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if (readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return ''; }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null; }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+
+
+(function(global) {
+ function shouldUseCache(tagName, attributes) {
+ if (tagName === 'select') return false;
+ if ('type' in attributes) return false;
+ return true;
+ }
+
+ var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
+ try {
+ var el = document.createElement('<input name="x">');
+ return el.tagName.toLowerCase() === 'input' && el.name === 'x';
+ }
+ catch(err) {
+ return false;
+ }
+ })();
+
+ var element = global.Element;
+
+ global.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+
+ if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+
+ var node = shouldUseCache(tagName, attributes) ?
+ cache[tagName].cloneNode(false) : document.createElement(tagName);
+
+ return Element.writeAttribute(node, attributes);
+ };
+
+ Object.extend(global.Element, element || { });
+ if (element) global.Element.prototype = element.prototype;
+
+})(this);
+
+Element.idCounter = 1;
+Element.cache = { };
+
+Element._purgeElement = function(element) {
+ var uid = element._prototypeUID;
+ if (uid) {
+ Element.stopObserving(element);
+ element._prototypeUID = void 0;
+ delete Element.Storage[uid];
+ }
+};
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ element = $(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = $(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: (function(){
+
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+ var el = document.createElement("select"),
+ isBuggy = true;
+ el.innerHTML = "<option value=\"test\">test</option>";
+ if (el.options && el.options[0]) {
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+ }
+ el = null;
+ return isBuggy;
+ })();
+
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+ try {
+ var el = document.createElement("table");
+ if (el && el.tBodies) {
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+ var isBuggy = typeof el.tBodies[0] == "undefined";
+ el = null;
+ return isBuggy;
+ }
+ } catch (e) {
+ return true;
+ }
+ })();
+
+ var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
+ try {
+ var el = document.createElement('div');
+ el.innerHTML = "<link>";
+ var isBuggy = (el.childNodes.length === 0);
+ el = null;
+ return isBuggy;
+ } catch(e) {
+ return true;
+ }
+ })();
+
+ var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
+ TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;
+
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+ var s = document.createElement("script"),
+ isBuggy = false;
+ try {
+ s.appendChild(document.createTextNode(""));
+ isBuggy = !s.firstChild ||
+ s.firstChild && s.firstChild.nodeType !== 3;
+ } catch (e) {
+ isBuggy = true;
+ }
+ s = null;
+ return isBuggy;
+ })();
+
+
+ function update(element, content) {
+ element = $(element);
+ var purgeElement = Element._purgeElement;
+
+ var descendants = element.getElementsByTagName('*'),
+ i = descendants.length;
+ while (i--) purgeElement(descendants[i]);
+
+ if (content && content.toElement)
+ content = content.toElement();
+
+ if (Object.isElement(content))
+ return element.update().insert(content);
+
+ content = Object.toHTML(content);
+
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+ element.text = content;
+ return element;
+ }
+
+ if (ANY_INNERHTML_BUGGY) {
+ if (tagName in Element._insertionTranslations.tags) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) {
+ element.appendChild(node);
+ });
+ } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
+ nodes.each(function(node) { element.appendChild(node); });
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ }
+
+ return update;
+ })(),
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(),
+ attribute = pair.last(),
+ value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property, maximumLength) {
+ element = $(element);
+ maximumLength = maximumLength || -1;
+ var elements = [];
+
+ while (element = element[property]) {
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ if (elements.length == maximumLength)
+ break;
+ }
+
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return Element.recursivelyCollect(element, 'parentNode');
+ },
+
+ descendants: function(element) {
+ return Element.select(element, "*");
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ var results = [], child = $(element).firstChild;
+ while (child) {
+ if (child.nodeType === 1) {
+ results.push(Element.extend(child));
+ }
+ child = child.nextSibling;
+ }
+ return results;
+ },
+
+ previousSiblings: function(element, maximumLength) {
+ return Element.recursivelyCollect(element, 'previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return Element.previousSiblings(element).reverse()
+ .concat(Element.nextSiblings(element));
+ },
+
+ match: function(element, selector) {
+ element = $(element);
+ if (Object.isString(selector))
+ return Prototype.Selector.match(element, selector);
+ return selector.match(element);
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = Element.ancestors(element);
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Prototype.Selector.find(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return Element.firstDescendant(element);
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (Object.isNumber(expression)) index = expression, expression = false;
+ if (!Object.isNumber(index)) index = 0;
+
+ if (expression) {
+ return Prototype.Selector.find(element.previousSiblings(), expression, index);
+ } else {
+ return element.recursivelyCollect("previousSibling", index + 1)[index];
+ }
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (Object.isNumber(expression)) index = expression, expression = false;
+ if (!Object.isNumber(index)) index = 0;
+
+ if (expression) {
+ return Prototype.Selector.find(element.nextSiblings(), expression, index);
+ } else {
+ var maximumLength = Object.isNumber(index) ? index + 1 : 1;
+ return element.recursivelyCollect("nextSibling", index + 1)[index];
+ }
+ },
+
+
+ select: function(element) {
+ element = $(element);
+ var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+ return Prototype.Selector.select(expressions, element);
+ },
+
+ adjacent: function(element) {
+ element = $(element);
+ var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
+ return Prototype.Selector.select(expressions, element.parentNode).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = Element.readAttribute(element, 'id');
+ if (id) return id;
+ do { id = 'anonymous_element_' + Element.idCounter++; } while ($(id));
+ Element.writeAttribute(element, 'id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return Element.getDimensions(element).height;
+ },
+
+ getWidth: function(element) {
+ return Element.getDimensions(element).width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!Element.hasClassName(element, className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return Element[Element.hasClassName(element, className) ?
+ 'removeClassName' : 'addClassName'](element, className);
+ },
+
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = Element.cumulativeOffset(element);
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ source = $(source);
+ var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
+
+ element = $(element);
+
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = Element.getOffsetParent(element);
+ delta = Element.viewportOffset(parent);
+ }
+
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'height': case 'width':
+ if (!Element.visible(element)) return null;
+
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = (function(){
+
+ var classProp = 'className',
+ forProp = 'for',
+ el = document.createElement('div');
+
+ el.setAttribute(classProp, 'x');
+
+ if (el.className !== 'x') {
+ el.setAttribute('class', 'x');
+ if (el.className === 'x') {
+ classProp = 'class';
+ }
+ }
+ el = null;
+
+ el = document.createElement('label');
+ el.setAttribute(forProp, 'x');
+ if (el.htmlFor !== 'x') {
+ el.setAttribute('htmlFor', 'x');
+ if (el.htmlFor === 'x') {
+ forProp = 'htmlFor';
+ }
+ }
+ el = null;
+
+ return {
+ read: {
+ names: {
+ 'class': classProp,
+ 'className': classProp,
+ 'for': forProp,
+ 'htmlFor': forProp
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute);
+ },
+ _getAttr2: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: (function(){
+
+ var el = document.createElement('div'), f;
+ el.onclick = Prototype.emptyFunction;
+ var value = el.getAttribute('onclick');
+
+ if (String(value).indexOf('{') > -1) {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ attribute = attribute.toString();
+ attribute = attribute.split('{')[1];
+ attribute = attribute.split('}')[0];
+ return attribute.strip();
+ };
+ }
+ else if (value === '') {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ return attribute.strip();
+ };
+ }
+ el = null;
+ return f;
+ })(),
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+ })();
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr2,
+ src: v._getAttr2,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+
+ if (Prototype.BrowserFeatures.ElementExtensions) {
+ (function() {
+ function _descendants(element) {
+ var nodes = element.getElementsByTagName('*'), results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName !== "!") // Filter out comment nodes.
+ results.push(node);
+ return results;
+ }
+
+ Element.Methods.down = function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ };
+ })();
+ }
+
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if (element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+}
+
+if ('outerHTML' in document.documentElement) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next(),
+ fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling); });
+ else
+ fragments.each(function(node) { parent.appendChild(node); });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html, force) {
+ var div = new Element('div'),
+ t = Element._insertionTranslations.tags[tagName];
+
+ var workaround = false;
+ if (t) workaround = true;
+ else if (force) {
+ workaround = true;
+ t = ['', '', 0];
+ }
+
+ if (workaround) {
+ div.innerHTML = '&nbsp;' + t[0] + html + t[1];
+ div.removeChild(div.firstChild);
+ for (var i = t[2]; i--; ) {
+ div = div.firstChild;
+ }
+ }
+ else {
+ div.innerHTML = html;
+ }
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ var tags = Element._insertionTranslations.tags;
+ Object.extend(tags, {
+ THEAD: tags.TBODY,
+ TFOOT: tags.TBODY,
+ TH: tags.TD
+ });
+})();
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+(function(div) {
+
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = div['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+ }
+
+ div = null;
+
+})(document.createElement('div'));
+
+Element.extend = (function() {
+
+ function checkDeficiency(tagName) {
+ if (typeof window.Element != 'undefined') {
+ var proto = window.Element.prototype;
+ if (proto) {
+ var id = '_' + (Math.random()+'').slice(2),
+ el = document.createElement(tagName);
+ proto[id] = 'x';
+ var isBuggy = (el[id] !== 'x');
+ delete proto[id];
+ el = null;
+ return isBuggy;
+ }
+ }
+ return false;
+ }
+
+ function extendElementWith(element, methods) {
+ for (var property in methods) {
+ var value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+ }
+
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+ return function(element) {
+ if (element && typeof element._extendedByPrototype == 'undefined') {
+ var t = element.tagName;
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+ extendElementWith(element, Element.Methods);
+ extendElementWith(element, Element.Methods.Simulated);
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+ }
+ }
+ return element;
+ };
+ }
+ return Prototype.K;
+ }
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase();
+
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ extendElementWith(element, methods);
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+if (document.documentElement.hasAttribute) {
+ Element.hasAttribute = function(element, attribute) {
+ return element.hasAttribute(attribute);
+ };
+}
+else {
+ Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
+}
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods),
+ "BUTTON": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ var element = document.createElement(tagName),
+ proto = element['__proto__'] || element.constructor.prototype;
+
+ element = null;
+ return proto;
+ }
+
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+ Element.prototype;
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, elementPrototype);
+ copy(Element.Methods.Simulated, elementPrototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+
+document.viewport = {
+
+ getDimensions: function() {
+ return { width: this.getWidth(), height: this.getHeight() };
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+
+(function(viewport) {
+ var B = Prototype.Browser, doc = document, element, property = {};
+
+ function getRootElement() {
+ if (B.WebKit && !doc.evaluate)
+ return document;
+
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+ return document.body;
+
+ return document.documentElement;
+ }
+
+ function define(D) {
+ if (!element) element = getRootElement();
+
+ property[D] = 'client' + D;
+
+ viewport['get' + D] = function() { return element[property[D]]; };
+ return viewport['get' + D]();
+ }
+
+ viewport.getWidth = define.curry('Width');
+
+ viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+ UID: 1
+};
+
+Element.addMethods({
+ getStorage: function(element) {
+ if (!(element = $(element))) return;
+
+ var uid;
+ if (element === window) {
+ uid = 0;
+ } else {
+ if (typeof element._prototypeUID === "undefined")
+ element._prototypeUID = Element.Storage.UID++;
+ uid = element._prototypeUID;
+ }
+
+ if (!Element.Storage[uid])
+ Element.Storage[uid] = $H();
+
+ return Element.Storage[uid];
+ },
+
+ store: function(element, key, value) {
+ if (!(element = $(element))) return;
+
+ if (arguments.length === 2) {
+ Element.getStorage(element).update(key);
+ } else {
+ Element.getStorage(element).set(key, value);
+ }
+
+ return element;
+ },
+
+ retrieve: function(element, key, defaultValue) {
+ if (!(element = $(element))) return;
+ var hash = Element.getStorage(element), value = hash.get(key);
+
+ if (Object.isUndefined(value)) {
+ hash.set(key, defaultValue);
+ value = defaultValue;
+ }
+
+ return value;
+ },
+
+ clone: function(element, deep) {
+ if (!(element = $(element))) return;
+ var clone = element.cloneNode(deep);
+ clone._prototypeUID = void 0;
+ if (deep) {
+ var descendants = Element.select(clone, '*'),
+ i = descendants.length;
+ while (i--) {
+ descendants[i]._prototypeUID = void 0;
+ }
+ }
+ return Element.extend(clone);
+ },
+
+ purge: function(element) {
+ if (!(element = $(element))) return;
+ var purgeElement = Element._purgeElement;
+
+ purgeElement(element);
+
+ var descendants = element.getElementsByTagName('*'),
+ i = descendants.length;
+
+ while (i--) purgeElement(descendants[i]);
+
+ return null;
+ }
+});
+
+(function() {
+
+ function toDecimal(pctString) {
+ var match = pctString.match(/^(\d+)%?$/i);
+ if (!match) return null;
+ return (Number(match[1]) / 100);
+ }
+
+ function getPixelValue(value, property, context) {
+ var element = null;
+ if (Object.isElement(value)) {
+ element = value;
+ value = element.getStyle(property);
+ }
+
+ if (value === null) {
+ return null;
+ }
+
+ if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
+ return window.parseFloat(value);
+ }
+
+ var isPercentage = value.include('%'), isViewport = (context === document.viewport);
+
+ if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
+ var style = element.style.left, rStyle = element.runtimeStyle.left;
+ element.runtimeStyle.left = element.currentStyle.left;
+ element.style.left = value || 0;
+ value = element.style.pixelLeft;
+ element.style.left = style;
+ element.runtimeStyle.left = rStyle;
+
+ return value;
+ }
+
+ if (element && isPercentage) {
+ context = context || element.parentNode;
+ var decimal = toDecimal(value);
+ var whole = null;
+ var position = element.getStyle('position');
+
+ var isHorizontal = property.include('left') || property.include('right') ||
+ property.include('width');
+
+ var isVertical = property.include('top') || property.include('bottom') ||
+ property.include('height');
+
+ if (context === document.viewport) {
+ if (isHorizontal) {
+ whole = document.viewport.getWidth();
+ } else if (isVertical) {
+ whole = document.viewport.getHeight();
+ }
+ } else {
+ if (isHorizontal) {
+ whole = $(context).measure('width');
+ } else if (isVertical) {
+ whole = $(context).measure('height');
+ }
+ }
+
+ return (whole === null) ? 0 : whole * decimal;
+ }
+
+ return 0;
+ }
+
+ function toCSSPixels(number) {
+ if (Object.isString(number) && number.endsWith('px')) {
+ return number;
+ }
+ return number + 'px';
+ }
+
+ function isDisplayed(element) {
+ var originalElement = element;
+ while (element && element.parentNode) {
+ var display = element.getStyle('display');
+ if (display === 'none') {
+ return false;
+ }
+ element = $(element.parentNode);
+ }
+ return true;
+ }
+
+ var hasLayout = Prototype.K;
+ if ('currentStyle' in document.documentElement) {
+ hasLayout = function(element) {
+ if (!element.currentStyle.hasLayout) {
+ element.style.zoom = 1;
+ }
+ return element;
+ };
+ }
+
+ function cssNameFor(key) {
+ if (key.include('border')) key = key + '-width';
+ return key.camelize();
+ }
+
+ Element.Layout = Class.create(Hash, {
+ initialize: function($super, element, preCompute) {
+ $super();
+ this.element = $(element);
+
+ Element.Layout.PROPERTIES.each( function(property) {
+ this._set(property, null);
+ }, this);
+
+ if (preCompute) {
+ this._preComputing = true;
+ this._begin();
+ Element.Layout.PROPERTIES.each( this._compute, this );
+ this._end();
+ this._preComputing = false;
+ }
+ },
+
+ _set: function(property, value) {
+ return Hash.prototype.set.call(this, property, value);
+ },
+
+ set: function(property, value) {
+ throw "Properties of Element.Layout are read-only.";
+ },
+
+ get: function($super, property) {
+ var value = $super(property);
+ return value === null ? this._compute(property) : value;
+ },
+
+ _begin: function() {
+ if (this._prepared) return;
+
+ var element = this.element;
+ if (isDisplayed(element)) {
+ this._prepared = true;
+ return;
+ }
+
+ var originalStyles = {
+ position: element.style.position || '',
+ width: element.style.width || '',
+ visibility: element.style.visibility || '',
+ display: element.style.display || ''
+ };
+
+ element.store('prototype_original_styles', originalStyles);
+
+ var position = element.getStyle('position'),
+ width = element.getStyle('width');
+
+ if (width === "0px" || width === null) {
+ element.style.display = 'block';
+ width = element.getStyle('width');
+ }
+
+ var context = (position === 'fixed') ? document.viewport :
+ element.parentNode;
+
+ element.setStyle({
+ position: 'absolute',
+ visibility: 'hidden',
+ display: 'block'
+ });
+
+ var positionedWidth = element.getStyle('width');
+
+ var newWidth;
+ if (width && (positionedWidth === width)) {
+ newWidth = getPixelValue(element, 'width', context);
+ } else if (position === 'absolute' || position === 'fixed') {
+ newWidth = getPixelValue(element, 'width', context);
+ } else {
+ var parent = element.parentNode, pLayout = $(parent).getLayout();
+
+ newWidth = pLayout.get('width') -
+ this.get('margin-left') -
+ this.get('border-left') -
+ this.get('padding-left') -
+ this.get('padding-right') -
+ this.get('border-right') -
+ this.get('margin-right');
+ }
+
+ element.setStyle({ width: newWidth + 'px' });
+
+ this._prepared = true;
+ },
+
+ _end: function() {
+ var element = this.element;
+ var originalStyles = element.retrieve('prototype_original_styles');
+ element.store('prototype_original_styles', null);
+ element.setStyle(originalStyles);
+ this._prepared = false;
+ },
+
+ _compute: function(property) {
+ var COMPUTATIONS = Element.Layout.COMPUTATIONS;
+ if (!(property in COMPUTATIONS)) {
+ throw "Property not found.";
+ }
+
+ return this._set(property, COMPUTATIONS[property].call(this, this.element));
+ },
+
+ toObject: function() {
+ var args = $A(arguments);
+ var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+ args.join(' ').split(' ');
+ var obj = {};
+ keys.each( function(key) {
+ if (!Element.Layout.PROPERTIES.include(key)) return;
+ var value = this.get(key);
+ if (value != null) obj[key] = value;
+ }, this);
+ return obj;
+ },
+
+ toHash: function() {
+ var obj = this.toObject.apply(this, arguments);
+ return new Hash(obj);
+ },
+
+ toCSS: function() {
+ var args = $A(arguments);
+ var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
+ args.join(' ').split(' ');
+ var css = {};
+
+ keys.each( function(key) {
+ if (!Element.Layout.PROPERTIES.include(key)) return;
+ if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;
+
+ var value = this.get(key);
+ if (value != null) css[cssNameFor(key)] = value + 'px';
+ }, this);
+ return css;
+ },
+
+ inspect: function() {
+ return "#<Element.Layout>";
+ }
+ });
+
+ Object.extend(Element.Layout, {
+ PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),
+
+ COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),
+
+ COMPUTATIONS: {
+ 'height': function(element) {
+ if (!this._preComputing) this._begin();
+
+ var bHeight = this.get('border-box-height');
+ if (bHeight <= 0) {
+ if (!this._preComputing) this._end();
+ return 0;
+ }
+
+ var bTop = this.get('border-top'),
+ bBottom = this.get('border-bottom');
+
+ var pTop = this.get('padding-top'),
+ pBottom = this.get('padding-bottom');
+
+ if (!this._preComputing) this._end();
+
+ return bHeight - bTop - bBottom - pTop - pBottom;
+ },
+
+ 'width': function(element) {
+ if (!this._preComputing) this._begin();
+
+ var bWidth = this.get('border-box-width');
+ if (bWidth <= 0) {
+ if (!this._preComputing) this._end();
+ return 0;
+ }
+
+ var bLeft = this.get('border-left'),
+ bRight = this.get('border-right');
+
+ var pLeft = this.get('padding-left'),
+ pRight = this.get('padding-right');
+
+ if (!this._preComputing) this._end();
+
+ return bWidth - bLeft - bRight - pLeft - pRight;
+ },
+
+ 'padding-box-height': function(element) {
+ var height = this.get('height'),
+ pTop = this.get('padding-top'),
+ pBottom = this.get('padding-bottom');
+
+ return height + pTop + pBottom;
+ },
+
+ 'padding-box-width': function(element) {
+ var width = this.get('width'),
+ pLeft = this.get('padding-left'),
+ pRight = this.get('padding-right');
+
+ return width + pLeft + pRight;
+ },
+
+ 'border-box-height': function(element) {
+ if (!this._preComputing) this._begin();
+ var height = element.offsetHeight;
+ if (!this._preComputing) this._end();
+ return height;
+ },
+
+ 'border-box-width': function(element) {
+ if (!this._preComputing) this._begin();
+ var width = element.offsetWidth;
+ if (!this._preComputing) this._end();
+ return width;
+ },
+
+ 'margin-box-height': function(element) {
+ var bHeight = this.get('border-box-height'),
+ mTop = this.get('margin-top'),
+ mBottom = this.get('margin-bottom');
+
+ if (bHeight <= 0) return 0;
+
+ return bHeight + mTop + mBottom;
+ },
+
+ 'margin-box-width': function(element) {
+ var bWidth = this.get('border-box-width'),
+ mLeft = this.get('margin-left'),
+ mRight = this.get('margin-right');
+
+ if (bWidth <= 0) return 0;
+
+ return bWidth + mLeft + mRight;
+ },
+
+ 'top': function(element) {
+ var offset = element.positionedOffset();
+ return offset.top;
+ },
+
+ 'bottom': function(element) {
+ var offset = element.positionedOffset(),
+ parent = element.getOffsetParent(),
+ pHeight = parent.measure('height');
+
+ var mHeight = this.get('border-box-height');
+
+ return pHeight - mHeight - offset.top;
+ },
+
+ 'left': function(element) {
+ var offset = element.positionedOffset();
+ return offset.left;
+ },
+
+ 'right': function(element) {
+ var offset = element.positionedOffset(),
+ parent = element.getOffsetParent(),
+ pWidth = parent.measure('width');
+
+ var mWidth = this.get('border-box-width');
+
+ return pWidth - mWidth - offset.left;
+ },
+
+ 'padding-top': function(element) {
+ return getPixelValue(element, 'paddingTop');
+ },
+
+ 'padding-bottom': function(element) {
+ return getPixelValue(element, 'paddingBottom');
+ },
+
+ 'padding-left': function(element) {
+ return getPixelValue(element, 'paddingLeft');
+ },
+
+ 'padding-right': function(element) {
+ return getPixelValue(element, 'paddingRight');
+ },
+
+ 'border-top': function(element) {
+ return getPixelValue(element, 'borderTopWidth');
+ },
+
+ 'border-bottom': function(element) {
+ return getPixelValue(element, 'borderBottomWidth');
+ },
+
+ 'border-left': function(element) {
+ return getPixelValue(element, 'borderLeftWidth');
+ },
+
+ 'border-right': function(element) {
+ return getPixelValue(element, 'borderRightWidth');
+ },
+
+ 'margin-top': function(element) {
+ return getPixelValue(element, 'marginTop');
+ },
+
+ 'margin-bottom': function(element) {
+ return getPixelValue(element, 'marginBottom');
+ },
+
+ 'margin-left': function(element) {
+ return getPixelValue(element, 'marginLeft');
+ },
+
+ 'margin-right': function(element) {
+ return getPixelValue(element, 'marginRight');
+ }
+ }
+ });
+
+ if ('getBoundingClientRect' in document.documentElement) {
+ Object.extend(Element.Layout.COMPUTATIONS, {
+ 'right': function(element) {
+ var parent = hasLayout(element.getOffsetParent());
+ var rect = element.getBoundingClientRect(),
+ pRect = parent.getBoundingClientRect();
+
+ return (pRect.right - rect.right).round();
+ },
+
+ 'bottom': function(element) {
+ var parent = hasLayout(element.getOffsetParent());
+ var rect = element.getBoundingClientRect(),
+ pRect = parent.getBoundingClientRect();
+
+ return (pRect.bottom - rect.bottom).round();
+ }
+ });
+ }
+
+ Element.Offset = Class.create({
+ initialize: function(left, top) {
+ this.left = left.round();
+ this.top = top.round();
+
+ this[0] = this.left;
+ this[1] = this.top;
+ },
+
+ relativeTo: function(offset) {
+ return new Element.Offset(
+ this.left - offset.left,
+ this.top - offset.top
+ );
+ },
+
+ inspect: function() {
+ return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
+ },
+
+ toString: function() {
+ return "[#{left}, #{top}]".interpolate(this);
+ },
+
+ toArray: function() {
+ return [this.left, this.top];
+ }
+ });
+
+ function getLayout(element, preCompute) {
+ return new Element.Layout(element, preCompute);
+ }
+
+ function measure(element, property) {
+ return $(element).getLayout().get(property);
+ }
+
+ function getDimensions(element) {
+ element = $(element);
+ var display = Element.getStyle(element, 'display');
+
+ if (display && display !== 'none') {
+ return { width: element.offsetWidth, height: element.offsetHeight };
+ }
+
+ var style = element.style;
+ var originalStyles = {
+ visibility: style.visibility,
+ position: style.position,
+ display: style.display
+ };
+
+ var newStyles = {
+ visibility: 'hidden',
+ display: 'block'
+ };
+
+ if (originalStyles.position !== 'fixed')
+ newStyles.position = 'absolute';
+
+ Element.setStyle(element, newStyles);
+
+ var dimensions = {
+ width: element.offsetWidth,
+ height: element.offsetHeight
+ };
+
+ Element.setStyle(element, originalStyles);
+
+ return dimensions;
+ }
+
+ function getOffsetParent(element) {
+ element = $(element);
+
+ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+ return $(document.body);
+
+ var isInline = (Element.getStyle(element, 'display') === 'inline');
+ if (!isInline && element.offsetParent) return $(element.offsetParent);
+
+ while ((element = element.parentNode) && element !== document.body) {
+ if (Element.getStyle(element, 'position') !== 'static') {
+ return isHtml(element) ? $(document.body) : $(element);
+ }
+ }
+
+ return $(document.body);
+ }
+
+
+ function cumulativeOffset(element) {
+ element = $(element);
+ var valueT = 0, valueL = 0;
+ if (element.parentNode) {
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ }
+ return new Element.Offset(valueL, valueT);
+ }
+
+ function positionedOffset(element) {
+ element = $(element);
+
+ var layout = element.getLayout();
+
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (isBody(element)) break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+
+ valueL -= layout.get('margin-top');
+ valueT -= layout.get('margin-left');
+
+ return new Element.Offset(valueL, valueT);
+ }
+
+ function cumulativeScrollOffset(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return new Element.Offset(valueL, valueT);
+ }
+
+ function viewportOffset(forElement) {
+ element = $(element);
+ var valueT = 0, valueL = 0, docBody = document.body;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == docBody &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (element != docBody) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+ return new Element.Offset(valueL, valueT);
+ }
+
+ function absolutize(element) {
+ element = $(element);
+
+ if (Element.getStyle(element, 'position') === 'absolute') {
+ return element;
+ }
+
+ var offsetParent = getOffsetParent(element);
+ var eOffset = element.viewportOffset(),
+ pOffset = offsetParent.viewportOffset();
+
+ var offset = eOffset.relativeTo(pOffset);
+ var layout = element.getLayout();
+
+ element.store('prototype_absolutize_original_styles', {
+ left: element.getStyle('left'),
+ top: element.getStyle('top'),
+ width: element.getStyle('width'),
+ height: element.getStyle('height')
+ });
+
+ element.setStyle({
+ position: 'absolute',
+ top: offset.top + 'px',
+ left: offset.left + 'px',
+ width: layout.get('width') + 'px',
+ height: layout.get('height') + 'px'
+ });
+
+ return element;
+ }
+
+ function relativize(element) {
+ element = $(element);
+ if (Element.getStyle(element, 'position') === 'relative') {
+ return element;
+ }
+
+ var originalStyles =
+ element.retrieve('prototype_absolutize_original_styles');
+
+ if (originalStyles) element.setStyle(originalStyles);
+ return element;
+ }
+
+ if (Prototype.Browser.IE) {
+ getOffsetParent = getOffsetParent.wrap(
+ function(proceed, element) {
+ element = $(element);
+
+ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
+ return $(document.body);
+
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ positionedOffset = positionedOffset.wrap(function(proceed, element) {
+ element = $(element);
+ if (!element.parentNode) return new Element.Offset(0, 0);
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ hasLayout(offsetParent);
+
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ });
+ } else if (Prototype.Browser.Webkit) {
+ cumulativeOffset = function(element) {
+ element = $(element);
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return new Element.Offset(valueL, valueT);
+ };
+ }
+
+
+ Element.addMethods({
+ getLayout: getLayout,
+ measure: measure,
+ getDimensions: getDimensions,
+ getOffsetParent: getOffsetParent,
+ cumulativeOffset: cumulativeOffset,
+ positionedOffset: positionedOffset,
+ cumulativeScrollOffset: cumulativeScrollOffset,
+ viewportOffset: viewportOffset,
+ absolutize: absolutize,
+ relativize: relativize
+ });
+
+ function isBody(element) {
+ return element.nodeName.toUpperCase() === 'BODY';
+ }
+
+ function isHtml(element) {
+ return element.nodeName.toUpperCase() === 'HTML';
+ }
+
+ function isDocument(element) {
+ return element.nodeType === Node.DOCUMENT_NODE;
+ }
+
+ function isDetached(element) {
+ return element !== document.body &&
+ !Element.descendantOf(element, document.body);
+ }
+
+ if ('getBoundingClientRect' in document.documentElement) {
+ Element.addMethods({
+ viewportOffset: function(element) {
+ element = $(element);
+ if (isDetached(element)) return new Element.Offset(0, 0);
+
+ var rect = element.getBoundingClientRect(),
+ docEl = document.documentElement;
+ return new Element.Offset(rect.left - docEl.clientLeft,
+ rect.top - docEl.clientTop);
+ }
+ });
+ }
+})();
+window.$$ = function() {
+ var expression = $A(arguments).join(', ');
+ return Prototype.Selector.select(expression, document);
+};
+
+Prototype.Selector = (function() {
+
+ function select() {
+ throw new Error('Method "Prototype.Selector.select" must be defined.');
+ }
+
+ function match() {
+ throw new Error('Method "Prototype.Selector.match" must be defined.');
+ }
+
+ function find(elements, expression, index) {
+ index = index || 0;
+ var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;
+
+ for (i = 0; i < length; i++) {
+ if (match(elements[i], expression) && index == matchIndex++) {
+ return Element.extend(elements[i]);
+ }
+ }
+ }
+
+ function extendElements(elements) {
+ for (var i = 0, length = elements.length; i < length; i++) {
+ Element.extend(elements[i]);
+ }
+ return elements;
+ }
+
+
+ var K = Prototype.K;
+
+ return {
+ select: select,
+ match: match,
+ find: find,
+ extendElements: (Element.extend === K) ? K : extendElements,
+ extendElement: Element.extend
+ };
+})();
+Prototype._original_property = window.Sizzle;
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true;
+
+[0, 0].sort(function(){
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+ results = results || [];
+ var origContext = context = context || document;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
+ soFar = selector;
+
+ while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] )
+ selector += parts.shift();
+
+ set = posProcess( selector, set );
+ }
+ }
+ } else {
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+ var ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+ }
+
+ if ( context ) {
+ var ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray(set);
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ var cur = parts.pop(), pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ throw "Syntax error, unrecognized expression: " + (cur || selector);
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+ } else if ( context && context.nodeType === 1 ) {
+ for ( var i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+ } else {
+ for ( var i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function(expr, set){
+ return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+ var set, match;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var type = Expr.order[i], match;
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace(/\\/g, "");
+ set = Expr.find[ type ]( match, context, isXML );
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = context.getElementsByTagName("*");
+ }
+
+ return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+ var old = expr, result = [], curLoop = set, match, anyFound,
+ isXMLFilter = set && set[0] && isXML(set[0]);
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.match[ type ].exec( expr )) != null ) {
+ var filter = Expr.filter[ type ], found, item;
+ anyFound = false;
+
+ if ( curLoop == result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+ } else {
+ curLoop[i] = false;
+ }
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ if ( expr == old ) {
+ if ( anyFound == null ) {
+ throw "Syntax error, unrecognized expression: " + expr;
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function(elem){
+ return elem.getAttribute("href");
+ }
+ },
+ relative: {
+ "+": function(checkSet, part, isXML){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !/\W/.test(part),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag && !isXML ) {
+ part = part.toUpperCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+ ">": function(checkSet, part, isXML){
+ var isPartStr = typeof part === "string";
+
+ if ( isPartStr && !/\W/.test(part) ) {
+ part = isXML ? part : part.toUpperCase();
+
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName === part ? parent : false;
+ }
+ }
+ } else {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+ "": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck;
+
+ if ( !/\W/.test(part) ) {
+ var nodeCheck = part = isXML ? part : part.toUpperCase();
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+ },
+ "~": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ var nodeCheck = part = isXML ? part : part.toUpperCase();
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+ }
+ },
+ find: {
+ ID: function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? [m] : [];
+ }
+ },
+ NAME: function(match, context, isXML){
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [], results = context.getElementsByName(match[1]);
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+ TAG: function(match, context){
+ return context.getElementsByTagName(match[1]);
+ }
+ },
+ preFilter: {
+ CLASS: function(match, curLoop, inplace, result, not, isXML){
+ match = " " + match[1].replace(/\\/g, "") + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
+ if ( !inplace )
+ result.push( elem );
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+ ID: function(match){
+ return match[1].replace(/\\/g, "");
+ },
+ TAG: function(match, curLoop){
+ for ( var i = 0; curLoop[i] === false; i++ ){}
+ return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
+ },
+ CHILD: function(match){
+ if ( match[1] == "nth" ) {
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+
+ match[0] = done++;
+
+ return match;
+ },
+ ATTR: function(match, curLoop, inplace, result, not, isXML){
+ var name = match[1].replace(/\\/g, "");
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+ PSEUDO: function(match, curLoop, inplace, result, not){
+ if ( match[1] === "not" ) {
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+ return false;
+ }
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+ POS: function(match){
+ match.unshift( true );
+ return match;
+ }
+ },
+ filters: {
+ enabled: function(elem){
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+ disabled: function(elem){
+ return elem.disabled === true;
+ },
+ checked: function(elem){
+ return elem.checked === true;
+ },
+ selected: function(elem){
+ elem.parentNode.selectedIndex;
+ return elem.selected === true;
+ },
+ parent: function(elem){
+ return !!elem.firstChild;
+ },
+ empty: function(elem){
+ return !elem.firstChild;
+ },
+ has: function(elem, i, match){
+ return !!Sizzle( match[3], elem ).length;
+ },
+ header: function(elem){
+ return /h\d/i.test( elem.nodeName );
+ },
+ text: function(elem){
+ return "text" === elem.type;
+ },
+ radio: function(elem){
+ return "radio" === elem.type;
+ },
+ checkbox: function(elem){
+ return "checkbox" === elem.type;
+ },
+ file: function(elem){
+ return "file" === elem.type;
+ },
+ password: function(elem){
+ return "password" === elem.type;
+ },
+ submit: function(elem){
+ return "submit" === elem.type;
+ },
+ image: function(elem){
+ return "image" === elem.type;
+ },
+ reset: function(elem){
+ return "reset" === elem.type;
+ },
+ button: function(elem){
+ return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
+ },
+ input: function(elem){
+ return /input|select|textarea|button/i.test(elem.nodeName);
+ }
+ },
+ setFilters: {
+ first: function(elem, i){
+ return i === 0;
+ },
+ last: function(elem, i, match, array){
+ return i === array.length - 1;
+ },
+ even: function(elem, i){
+ return i % 2 === 0;
+ },
+ odd: function(elem, i){
+ return i % 2 === 1;
+ },
+ lt: function(elem, i, match){
+ return i < match[3] - 0;
+ },
+ gt: function(elem, i, match){
+ return i > match[3] - 0;
+ },
+ nth: function(elem, i, match){
+ return match[3] - 0 == i;
+ },
+ eq: function(elem, i, match){
+ return match[3] - 0 == i;
+ }
+ },
+ filter: {
+ PSEUDO: function(elem, match, i, array){
+ var name = match[1], filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var i = 0, l = not.length; i < l; i++ ) {
+ if ( not[i] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ },
+ CHILD: function(elem, match){
+ var type = match[1], node = elem;
+ switch (type) {
+ case 'only':
+ case 'first':
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) return false;
+ }
+ if ( type == 'first') return true;
+ node = elem;
+ case 'last':
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) return false;
+ }
+ return true;
+ case 'nth':
+ var first = match[2], last = match[3];
+
+ if ( first == 1 && last == 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+ if ( first == 0 ) {
+ return diff == 0;
+ } else {
+ return ( diff % first == 0 && diff / first >= 0 );
+ }
+ }
+ },
+ ID: function(elem, match){
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+ TAG: function(elem, match){
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
+ },
+ CLASS: function(elem, match){
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+ ATTR: function(elem, match){
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value != check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+ POS: function(elem, match, i, array){
+ var name = match[2], filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
+}
+
+var makeArray = function(array, results) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 );
+
+} catch(e){
+ makeArray = function(array, results) {
+ var ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var i = 0, l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+ } else {
+ for ( var i = 0; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( "sourceIndex" in document.documentElement ) {
+ sortOrder = function( a, b ) {
+ if ( !a.sourceIndex || !b.sourceIndex ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
+ var ret = a.sourceIndex - b.sourceIndex;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( document.createRange ) {
+ sortOrder = function( a, b ) {
+ if ( !a.ownerDocument || !b.ownerDocument ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ }
+
+ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+ aRange.setStart(a, 0);
+ aRange.setEnd(a, 0);
+ bRange.setStart(b, 0);
+ bRange.setEnd(b, 0);
+ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+}
+
+(function(){
+ var form = document.createElement("div"),
+ id = "script" + (new Date).getTime();
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ var root = document.documentElement;
+ root.insertBefore( form, root.firstChild );
+
+ if ( !!document.getElementById( id ) ) {
+ Expr.find.ID = function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+ }
+ };
+
+ Expr.filter.ID = function(elem, match){
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+ root = form = null; // release memory in IE
+})();
+
+(function(){
+
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function(match, context){
+ var results = context.getElementsByTagName(match[1]);
+
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ div.innerHTML = "<a href='#'></a>";
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+ Expr.attrHandle.href = function(elem){
+ return elem.getAttribute("href", 2);
+ };
+ }
+
+ div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) (function(){
+ var oldSizzle = Sizzle, div = document.createElement("div");
+ div.innerHTML = "<p class='TEST'></p>";
+
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function(query, context, extra, seed){
+ context = context || document;
+
+ if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(e){}
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ div = null; // release memory in IE
+})();
+
+if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
+ var div = document.createElement("div");
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ if ( div.getElementsByClassName("e").length === 0 )
+ return;
+
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 )
+ return;
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function(match, context, isXML) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ var sibDir = dir == "previousSibling" && !isXML;
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ if ( sibDir && elem.nodeType === 1 ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ var sibDir = dir == "previousSibling" && !isXML;
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ if ( sibDir && elem.nodeType === 1 ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+var contains = document.compareDocumentPosition ? function(a, b){
+ return a.compareDocumentPosition(b) & 16;
+} : function(a, b){
+ return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+ !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
+};
+
+var posProcess = function(selector, context){
+ var tmpSet = [], later = "", match,
+ root = context.nodeType ? [context] : context;
+
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+
+window.Sizzle = Sizzle;
+
+})();
+
+;(function(engine) {
+ var extendElements = Prototype.Selector.extendElements;
+
+ function select(selector, scope) {
+ return extendElements(engine(selector, scope || document));
+ }
+
+ function match(element, selector) {
+ return engine.matches(selector, [element]).length == 1;
+ }
+
+ Prototype.Selector.engine = engine;
+ Prototype.Selector.select = select;
+ Prototype.Selector.match = match;
+})(Sizzle);
+
+window.Sizzle = Prototype._original_property;
+delete Prototype._original_property;
+
+var Form = {
+ reset: function(form) {
+ form = $(form);
+ form.reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit, accumulator, initial;
+
+ if (options.hash) {
+ initial = {};
+ accumulator = function(result, key, value) {
+ if (key in result) {
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ } else result[key] = value;
+ return result;
+ };
+ } else {
+ initial = '';
+ accumulator = function(result, key, value) {
+ return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
+ };
+ }
+
+ return elements.inject(initial, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ result = accumulator(result, key, value);
+ }
+ }
+ return result;
+ });
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ var elements = $(form).getElementsByTagName('*'),
+ element,
+ arr = [ ],
+ serializers = Form.Element.Serializers;
+ for (var i = 0; element = elements[i]; i++) {
+ arr.push(element);
+ }
+ return arr.inject([], function(elements, child) {
+ if (serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ });
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex; }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ var element = form.findFirstElement();
+ if (element) element.activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = (function() {
+ function input(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return inputSelector(element, value);
+ default:
+ return valueSelector(element, value);
+ }
+ }
+
+ function inputSelector(element, value) {
+ if (Object.isUndefined(value))
+ return element.checked ? element.value : null;
+ else element.checked = !!value;
+ }
+
+ function valueSelector(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ }
+
+ function select(element, value) {
+ if (Object.isUndefined(value))
+ return (element.type === 'select-one' ? selectOne : selectMany)(element);
+
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+
+ function selectOne(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? optionValue(element.options[index]) : null;
+ }
+
+ function selectMany(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(optionValue(opt));
+ }
+ return values;
+ }
+
+ function optionValue(opt) {
+ return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
+ }
+
+ return {
+ input: input,
+ inputSelector: inputSelector,
+ textarea: valueSelector,
+ select: select,
+ selectOne: selectOne,
+ selectMany: selectMany,
+ optionValue: optionValue,
+ button: valueSelector
+ };
+})();
+
+/*--------------------------------------------------------------------------*/
+
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+(function() {
+
+ var Event = {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: {}
+ };
+
+ var docEl = document.documentElement;
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+ && 'onmouseleave' in docEl;
+
+
+
+ var isIELegacyEvent = function(event) { return false; };
+
+ if (window.attachEvent) {
+ if (window.addEventListener) {
+ isIELegacyEvent = function(event) {
+ return !(event instanceof window.Event);
+ };
+ } else {
+ isIELegacyEvent = function(event) { return true; };
+ }
+ }
+
+ var _isButton;
+
+ function _isButtonForDOMEvents(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ }
+
+ var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
+ function _isButtonForLegacyEvents(event, code) {
+ return event.button === legacyButtonMap[code];
+ }
+
+ function _isButtonForWebKit(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
+ case 2: return event.which == 3;
+ default: return false;
+ }
+ }
+
+ if (window.attachEvent) {
+ if (!window.addEventListener) {
+ _isButton = _isButtonForLegacyEvents;
+ } else {
+ _isButton = function(event, code) {
+ return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
+ _isButtonForDOMEvents(event, code);
+ };
+ }
+ } else if (Prototype.Browser.WebKit) {
+ _isButton = _isButtonForWebKit;
+ } else {
+ _isButton = _isButtonForDOMEvents;
+ }
+
+ function isLeftClick(event) { return _isButton(event, 0); }
+
+ function isMiddleClick(event) { return _isButton(event, 1); }
+
+ function isRightClick(event) { return _isButton(event, 2); }
+
+ function element(event) {
+ event = Event.extend(event);
+
+ var node = event.target, type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+
+ if (node.nodeType == Node.TEXT_NODE)
+ node = node.parentNode;
+
+ return Element.extend(node);
+ }
+
+ function findElement(event, expression) {
+ var element = Event.element(event);
+
+ if (!expression) return element;
+ while (element) {
+ if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
+ return Element.extend(element);
+ }
+ element = element.parentNode;
+ }
+ }
+
+ function pointer(event) {
+ return { x: pointerX(event), y: pointerY(event) };
+ }
+
+ function pointerX(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0 };
+
+ return event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0));
+ }
+
+ function pointerY(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollTop: 0 };
+
+ return event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0));
+ }
+
+ function stop(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+
+ event.stopped = true;
+ }
+
+ Event.Methods = {
+ isLeftClick: isLeftClick,
+ isMiddleClick: isMiddleClick,
+ isRightClick: isRightClick,
+
+ element: element,
+ findElement: findElement,
+
+ pointer: pointer,
+ pointerX: pointerX,
+ pointerY: pointerY,
+
+ stop: stop
+ };
+
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (window.attachEvent) {
+ function _relatedTarget(event) {
+ var element;
+ switch (event.type) {
+ case 'mouseover':
+ case 'mouseenter':
+ element = event.fromElement;
+ break;
+ case 'mouseout':
+ case 'mouseleave':
+ element = event.toElement;
+ break;
+ default:
+ return null;
+ }
+ return Element.extend(element);
+ }
+
+ var additionalMethods = {
+ stopPropagation: function() { this.cancelBubble = true; },
+ preventDefault: function() { this.returnValue = false; },
+ inspect: function() { return '[object Event]'; }
+ };
+
+ Event.extend = function(event, element) {
+ if (!event) return false;
+
+ if (!isIELegacyEvent(event)) return event;
+
+ if (event._extendedByPrototype) return event;
+ event._extendedByPrototype = Prototype.emptyFunction;
+
+ var pointer = Event.pointer(event);
+
+ Object.extend(event, {
+ target: event.srcElement || element,
+ relatedTarget: _relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+
+ Object.extend(event, methods);
+ Object.extend(event, additionalMethods);
+
+ return event;
+ };
+ } else {
+ Event.extend = Prototype.K;
+ }
+
+ if (window.addEventListener) {
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
+ Object.extend(Event.prototype, methods);
+ }
+
+ function _createResponder(element, eventName, handler) {
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) {
+ CACHE.push(element);
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
+ }
+
+ var respondersForEvent = registry.get(eventName);
+ if (Object.isUndefined(respondersForEvent)) {
+ respondersForEvent = [];
+ registry.set(eventName, respondersForEvent);
+ }
+
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+ var responder;
+ if (eventName.include(":")) {
+ responder = function(event) {
+ if (Object.isUndefined(event.eventName))
+ return false;
+
+ if (event.eventName !== eventName)
+ return false;
+
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ } else {
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
+ responder = function(event) {
+ Event.extend(event, element);
+
+ var parent = event.relatedTarget;
+ while (parent && parent !== element) {
+ try { parent = parent.parentNode; }
+ catch(e) { parent = element; }
+ }
+
+ if (parent === element) return;
+
+ handler.call(element, event);
+ };
+ }
+ } else {
+ responder = function(event) {
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ }
+ }
+
+ responder.handler = handler;
+ respondersForEvent.push(responder);
+ return responder;
+ }
+
+ function _destroyCache() {
+ for (var i = 0, length = CACHE.length; i < length; i++) {
+ Event.stopObserving(CACHE[i]);
+ CACHE[i] = null;
+ }
+ }
+
+ var CACHE = [];
+
+ if (Prototype.Browser.IE)
+ window.attachEvent('onunload', _destroyCache);
+
+ if (Prototype.Browser.WebKit)
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+ var _getDOMEventName = Prototype.K,
+ translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+ _getDOMEventName = function(eventName) {
+ return (translations[eventName] || eventName);
+ };
+ }
+
+ function observe(element, eventName, handler) {
+ element = $(element);
+
+ var responder = _createResponder(element, eventName, handler);
+
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.addEventListener)
+ element.addEventListener("dataavailable", responder, false);
+ else {
+ element.attachEvent("ondataavailable", responder);
+ element.attachEvent("onlosecapture", responder);
+ }
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (element.addEventListener)
+ element.addEventListener(actualEventName, responder, false);
+ else
+ element.attachEvent("on" + actualEventName, responder);
+ }
+
+ return element;
+ }
+
+ function stopObserving(element, eventName, handler) {
+ element = $(element);
+
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+ if (!registry) return element;
+
+ if (!eventName) {
+ registry.each( function(pair) {
+ var eventName = pair.key;
+ stopObserving(element, eventName);
+ });
+ return element;
+ }
+
+ var responders = registry.get(eventName);
+ if (!responders) return element;
+
+ if (!handler) {
+ responders.each(function(r) {
+ stopObserving(element, eventName, r.handler);
+ });
+ return element;
+ }
+
+ var i = responders.length, responder;
+ while (i--) {
+ if (responders[i].handler === handler) {
+ responder = responders[i];
+ break;
+ }
+ }
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.removeEventListener)
+ element.removeEventListener("dataavailable", responder, false);
+ else {
+ element.detachEvent("ondataavailable", responder);
+ element.detachEvent("onlosecapture", responder);
+ }
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
+ if (element.removeEventListener)
+ element.removeEventListener(actualEventName, responder, false);
+ else
+ element.detachEvent('on' + actualEventName, responder);
+ }
+
+ registry.set(eventName, responders.without(responder));
+
+ return element;
+ }
+
+ function fire(element, eventName, memo, bubble) {
+ element = $(element);
+
+ if (Object.isUndefined(bubble))
+ bubble = true;
+
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent('HTMLEvents');
+ event.initEvent('dataavailable', bubble, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent)
+ element.dispatchEvent(event);
+ else
+ element.fireEvent(event.eventType, event);
+
+ return Event.extend(event);
+ }
+
+ Event.Handler = Class.create({
+ initialize: function(element, eventName, selector, callback) {
+ this.element = $(element);
+ this.eventName = eventName;
+ this.selector = selector;
+ this.callback = callback;
+ this.handler = this.handleEvent.bind(this);
+ },
+
+ start: function() {
+ Event.observe(this.element, this.eventName, this.handler);
+ return this;
+ },
+
+ stop: function() {
+ Event.stopObserving(this.element, this.eventName, this.handler);
+ return this;
+ },
+
+ handleEvent: function(event) {
+ var element = Event.findElement(event, this.selector);
+ if (element) this.callback.call(this.element, event, element);
+ }
+ });
+
+ function on(element, eventName, selector, callback) {
+ element = $(element);
+ if (Object.isFunction(selector) && Object.isUndefined(callback)) {
+ callback = selector, selector = null;
+ }
+
+ return new Event.Handler(element, eventName, selector, callback).start();
+ }
+
+ Object.extend(Event, Event.Methods);
+
+ Object.extend(Event, {
+ fire: fire,
+ observe: observe,
+ stopObserving: stopObserving,
+ on: on
+ });
+
+ Element.addMethods({
+ fire: fire,
+
+ observe: observe,
+
+ stopObserving: stopObserving,
+
+ on: on
+ });
+
+ Object.extend(document, {
+ fire: fire.methodize(),
+
+ observe: observe.methodize(),
+
+ stopObserving: stopObserving.methodize(),
+
+ on: on.methodize(),
+
+ loaded: false
+ });
+
+ if (window.Event) Object.extend(window.Event, Event);
+ else window.Event = Event;
+})();
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearTimeout(timer);
+ document.loaded = true;
+ document.fire('dom:loaded');
+ }
+
+ function checkReadyState() {
+ if (document.readyState === 'complete') {
+ document.stopObserving('readystatechange', checkReadyState);
+ fireContentLoadedEvent();
+ }
+ }
+
+ function pollDoScroll() {
+ try { document.documentElement.doScroll('left'); }
+ catch(e) {
+ timer = pollDoScroll.defer();
+ return;
+ }
+ fireContentLoadedEvent();
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
+ } else {
+ document.observe('readystatechange', checkReadyState);
+ if (window == top)
+ timer = pollDoScroll.defer();
+ }
+
+ Event.observe(window, 'load', fireContentLoadedEvent);
+})();
+
+Element.addMethods();
+
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+var Position = {
+ includeScrollOffsets: false,
+
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+(function() {
+ window.Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+ },
+
+ findElements: function(rootElement) {
+ return Prototype.Selector.select(this.expression, rootElement);
+ },
+
+ match: function(element) {
+ return Prototype.Selector.match(element, this.expression);
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector: " + this.expression + ">";
+ }
+ });
+
+ Object.extend(Selector, {
+ matchElements: function(elements, expression) {
+ var match = Prototype.Selector.match,
+ results = [];
+
+ for (var i = 0, length = elements.length; i < length; i++) {
+ var element = elements[i];
+ if (match(element, expression)) {
+ results.push(Element.extend(element));
+ }
+ }
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ index = index || 0;
+ var matchIndex = 0, element;
+ for (var i = 0, length = elements.length; i < length; i++) {
+ element = elements[i];
+ if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
+ return Element.extend(element);
+ }
+ }
+ },
+
+ findChildElements: function(element, expressions) {
+ var selector = expressions.toArray().join(', ');
+ return Prototype.Selector.select(selector, element || document);
+ }
+ });
+})();
diff --git a/src/usr/local/www/javascript/scriptaculous/scriptaculous.js b/src/usr/local/www/javascript/scriptaculous/scriptaculous.js
new file mode 100644
index 0000000..6bf437a
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/scriptaculous.js
@@ -0,0 +1,68 @@
+// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.3',
+ require: function(libraryName) {
+ try{
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ } catch(e) {
+ // for xhtml+xml served content, fall back to DOM methods
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = libraryName;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ }
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/slider.js b/src/usr/local/www/javascript/scriptaculous/slider.js
new file mode 100644
index 0000000..5fd0347
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider = Class.create({
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if (Object.isArray(handle)) {
+ this.handles = handle.collect( function(e) { return $(e); });
+ } else {
+ this.handles = [$(handle)];
+ }
+
+ this.track = $(track);
+ this.options = options || { };
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0; });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s); }) : false;
+ this.options.startSpan = $(this.options.startSpan || null);
+ this.options.endSpan = $(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if (this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if (this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (Object.isArray(slider.options.sliderValue) ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ });
+
+ this.track.observe("mousedown", this.eventMouseDown);
+ document.observe("mouseup", this.eventMouseUp);
+ document.observe("mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues){
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if (currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if (value > this.range.end) return this.range.end;
+ if (value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if (!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if (this.initialized && this.restricted) {
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+
+ this.drawSpans();
+ if (!this.dragging || !this.event) this.updateFinished();
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if (this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)); });
+ if (this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if (this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if (this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected'); });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if (Event.isLeftClick(event)) {
+ if (!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if (track==this.track) {
+ var offsets = this.track.cumulativeOffset();
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if (this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if (this.active) {
+ if (!this.dragging) this.dragging = true;
+ this.draw(event);
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = this.track.cumulativeOffset();
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ if (this.initialized && this.options.onSlide)
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+ },
+ endDrag: function(event) {
+ if (this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+ this.updateFinished();
+ },
+ updateFinished: function() {
+ if (this.initialized && this.options.onChange)
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+ this.event = null;
+ }
+}); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/sound.js b/src/usr/local/www/javascript/scriptaculous/sound.js
new file mode 100644
index 0000000..a3bf4cd
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/sound.js
@@ -0,0 +1,59 @@
+// script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+ tracks: {},
+ _enabled: true,
+ template:
+ new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+ enable: function(){
+ Sound._enabled = true;
+ },
+ disable: function(){
+ Sound._enabled = false;
+ },
+ play: function(url){
+ if(!Sound._enabled) return;
+ var options = Object.extend({
+ track: 'global', url: url, replace: false
+ }, arguments[1] || {});
+
+ if(options.replace && this.tracks[options.track]) {
+ $R(0, this.tracks[options.track].id).each(function(id){
+ var sound = $('sound_'+options.track+'_'+id);
+ sound.Stop && sound.Stop();
+ sound.remove();
+ });
+ this.tracks[options.track] = null;
+ }
+
+ if(!this.tracks[options.track])
+ this.tracks[options.track] = { id: 0 };
+ else
+ this.tracks[options.track].id++;
+
+ options.id = this.tracks[options.track].id;
+ $$('body')[0].insert(
+ Prototype.Browser.IE ? new Element('bgsound',{
+ id: 'sound_'+options.track+'_'+options.id,
+ src: options.url, loop: 1, autostart: true
+ }) : Sound.template.evaluate(options));
+ }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+ if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1; }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1; }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1; }))
+ Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');
+ else
+ Sound.play = function(){};
+} \ No newline at end of file
diff --git a/src/usr/local/www/javascript/scriptaculous/unittest.js b/src/usr/local/www/javascript/scriptaculous/unittest.js
new file mode 100644
index 0000000..e18b08e
--- /dev/null
+++ b/src/usr/local/www/javascript/scriptaculous/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// (c) 2005-2009 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+ var options = Object.extend({
+ pointerX: 0,
+ pointerY: 0,
+ buttons: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false
+ }, arguments[2] || {});
+ var oEvent = document.createEvent("MouseEvents");
+ oEvent.initMouseEvent(eventName, true, true, document.defaultView,
+ options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
+
+ if(this.mark) Element.remove(this.mark);
+ this.mark = document.createElement('div');
+ this.mark.appendChild(document.createTextNode(" "));
+ document.body.appendChild(this.mark);
+ this.mark.style.position = 'absolute';
+ this.mark.style.top = options.pointerY + "px";
+ this.mark.style.left = options.pointerX + "px";
+ this.mark.style.width = "5px";
+ this.mark.style.height = "5px;";
+ this.mark.style.borderTop = "1px solid red;";
+ this.mark.style.borderLeft = "1px solid red;";
+
+ if(this.step)
+ alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+
+ $(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+ var options = Object.extend({
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ keyCode: 0,
+ charCode: 0
+ }, arguments[2] || {});
+
+ var oEvent = document.createEvent("KeyEvents");
+ oEvent.initKeyEvent(eventName, true, true, window,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode );
+ $(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+ for(var i=0; i<command.length; i++) {
+ Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+ }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+ initialize: function(log) {
+ this.log = $(log);
+ if (this.log) {
+ this._createLogTable();
+ }
+ },
+ start: function(testName) {
+ if (!this.log) return;
+ this.testName = testName;
+ this.lastLogLine = document.createElement('tr');
+ this.statusCell = document.createElement('td');
+ this.nameCell = document.createElement('td');
+ this.nameCell.className = "nameCell";
+ this.nameCell.appendChild(document.createTextNode(testName));
+ this.messageCell = document.createElement('td');
+ this.lastLogLine.appendChild(this.statusCell);
+ this.lastLogLine.appendChild(this.nameCell);
+ this.lastLogLine.appendChild(this.messageCell);
+ this.loglines.appendChild(this.lastLogLine);
+ },
+ finish: function(status, summary) {
+ if (!this.log) return;
+ this.lastLogLine.className = status;
+ this.statusCell.innerHTML = status;
+ this.messageCell.innerHTML = this._toHTML(summary);
+ this.addLinksToResults();
+ },
+ message: function(message) {
+ if (!this.log) return;
+ this.messageCell.innerHTML = this._toHTML(message);
+ },
+ summary: function(summary) {
+ if (!this.log) return;
+ this.logsummary.innerHTML = this._toHTML(summary);
+ },
+ _createLogTable: function() {
+ this.log.innerHTML =
+ '<div id="logsummary"></div>' +
+ '<table id="logtable">' +
+ '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+ '<tbody id="loglines"></tbody>' +
+ '</table>';
+ this.logsummary = $('logsummary');
+ this.loglines = $('loglines');
+ },
+ _toHTML: function(txt) {
+ return txt.escapeHTML().replace(/\n/g,"<br />");
+ },
+ addLinksToResults: function(){
+ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run only this test";
+ Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+ });
+ $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run all tests";
+ Event.observe(td, 'click', function(){ window.location.search = "";});
+ });
+ }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+ initialize: function(testcases) {
+ this.options = Object.extend({
+ testLog: 'testlog'
+ }, arguments[1] || {});
+ this.options.resultsURL = this.parseResultsURLQueryParameter();
+ this.options.tests = this.parseTestsQueryParameter();
+ if (this.options.testLog) {
+ this.options.testLog = $(this.options.testLog) || null;
+ }
+ if(this.options.tests) {
+ this.tests = [];
+ for(var i = 0; i < this.options.tests.length; i++) {
+ if(/^test/.test(this.options.tests[i])) {
+ this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+ }
+ }
+ } else {
+ if (this.options.test) {
+ this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+ } else {
+ this.tests = [];
+ for(var testcase in testcases) {
+ if(/^test/.test(testcase)) {
+ this.tests.push(
+ new Test.Unit.Testcase(
+ this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
+ testcases[testcase], testcases["setup"], testcases["teardown"]
+ ));
+ }
+ }
+ }
+ }
+ this.currentTest = 0;
+ this.logger = new Test.Unit.Logger(this.options.testLog);
+ setTimeout(this.runTests.bind(this), 1000);
+ },
+ parseResultsURLQueryParameter: function() {
+ return window.location.search.parseQuery()["resultsURL"];
+ },
+ parseTestsQueryParameter: function(){
+ if (window.location.search.parseQuery()["tests"]){
+ return window.location.search.parseQuery()["tests"].split(',');
+ };
+ },
+ // Returns:
+ // "ERROR" if there was an error,
+ // "FAILURE" if there was a failure, or
+ // "SUCCESS" if there was neither
+ getResult: function() {
+ var hasFailure = false;
+ for(var i=0;i<this.tests.length;i++) {
+ if (this.tests[i].errors > 0) {
+ return "ERROR";
+ }
+ if (this.tests[i].failures > 0) {
+ hasFailure = true;
+ }
+ }
+ if (hasFailure) {
+ return "FAILURE";
+ } else {
+ return "SUCCESS";
+ }
+ },
+ postResults: function() {
+ if (this.options.resultsURL) {
+ new Ajax.Request(this.options.resultsURL,
+ { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+ }
+ },
+ runTests: function() {
+ var test = this.tests[this.currentTest];
+ if (!test) {
+ // finished!
+ this.postResults();
+ this.logger.summary(this.summary());
+ return;
+ }
+ if(!test.isWaiting) {
+ this.logger.start(test.name);
+ }
+ test.run();
+ if(test.isWaiting) {
+ this.logger.message("Waiting for " + test.timeToWait + "ms");
+ setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+ } else {
+ this.logger.finish(test.status(), test.summary());
+ this.currentTest++;
+ // tail recursive, hopefully the browser will skip the stackframe
+ this.runTests();
+ }
+ },
+ summary: function() {
+ var assertions = 0;
+ var failures = 0;
+ var errors = 0;
+ var messages = [];
+ for(var i=0;i<this.tests.length;i++) {
+ assertions += this.tests[i].assertions;
+ failures += this.tests[i].failures;
+ errors += this.tests[i].errors;
+ }
+ return (
+ (this.options.context ? this.options.context + ': ': '') +
+ this.tests.length + " tests, " +
+ assertions + " assertions, " +
+ failures + " failures, " +
+ errors + " errors");
+ }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+ initialize: function() {
+ this.assertions = 0;
+ this.failures = 0;
+ this.errors = 0;
+ this.messages = [];
+ },
+ summary: function() {
+ return (
+ this.assertions + " assertions, " +
+ this.failures + " failures, " +
+ this.errors + " errors" + "\n" +
+ this.messages.join("\n"));
+ },
+ pass: function() {
+ this.assertions++;
+ },
+ fail: function(message) {
+ this.failures++;
+ this.messages.push("Failure: " + message);
+ },
+ info: function(message) {
+ this.messages.push("Info: " + message);
+ },
+ error: function(error) {
+ this.errors++;
+ this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+ },
+ status: function() {
+ if (this.failures > 0) return 'failed';
+ if (this.errors > 0) return 'error';
+ return 'passed';
+ },
+ assert: function(expression) {
+ var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+ try { expression ? this.pass() :
+ this.fail(message); }
+ catch(e) { this.error(e); }
+ },
+ assertEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEqual";
+ try { (expected == actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInspect: function(expected, actual) {
+ var message = arguments[2] || "assertInspect";
+ try { (expected == actual.inspect()) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertEnumEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEnumEqual";
+ try { $A(expected).length == $A(actual).length &&
+ expected.zip(actual).all(function(pair) { return pair[0] == pair[1]; }) ?
+ this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
+ ', actual ' + Test.Unit.inspect(actual)); }
+ catch(e) { this.error(e); }
+ },
+ assertNotEqual: function(expected, actual) {
+ var message = arguments[2] || "assertNotEqual";
+ try { (expected != actual) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertIdentical";
+ try { (expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertNotIdentical";
+ try { !(expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNull: function(obj) {
+ var message = arguments[1] || 'assertNull';
+ try { (obj==null) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertMatch: function(expected, actual) {
+ var message = arguments[2] || 'assertMatch';
+ var regex = new RegExp(expected);
+ try { (regex.exec(actual)) ? this.pass() :
+ this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertHidden: function(element) {
+ var message = arguments[1] || 'assertHidden';
+ this.assertEqual("none", element.style.display, message);
+ },
+ assertNotNull: function(object) {
+ var message = arguments[1] || 'assertNotNull';
+ this.assert(object != null, message);
+ },
+ assertType: function(expected, actual) {
+ var message = arguments[2] || 'assertType';
+ try {
+ (actual.constructor == expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotOfType: function(expected, actual) {
+ var message = arguments[2] || 'assertNotOfType';
+ try {
+ (actual.constructor != expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertInstanceOf';
+ try {
+ (actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was not an instance of the expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertNotInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertNotInstanceOf';
+ try {
+ !(actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was an instance of the not expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertRespondsTo: function(method, obj) {
+ var message = arguments[2] || 'assertRespondsTo';
+ try {
+ (obj[method] && typeof obj[method] == 'function') ? this.pass() :
+ this.fail(message + ": object doesn't respond to [" + method + "]"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsTrue: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsTrue';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ m() ? this.pass() :
+ this.fail(message + ": method returned false"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsFalse: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsFalse';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ !m() ? this.pass() :
+ this.fail(message + ": method returned true"); }
+ catch(e) { this.error(e); }
+ },
+ assertRaise: function(exceptionName, method) {
+ var message = arguments[2] || 'assertRaise';
+ try {
+ method();
+ this.fail(message + ": exception expected but none was raised"); }
+ catch(e) {
+ ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
+ }
+ },
+ assertElementsMatch: function() {
+ var expressions = $A(arguments), elements = $A(expressions.shift());
+ if (elements.length != expressions.length) {
+ this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+ return false;
+ }
+ elements.zip(expressions).all(function(pair, index) {
+ var element = $(pair.first()), expression = pair.last();
+ if (element.match(expression)) return true;
+ this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+ }.bind(this)) && this.pass();
+ },
+ assertElementMatches: function(element, expression) {
+ this.assertElementsMatch([element], expression);
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ },
+ _isVisible: function(element) {
+ element = $(element);
+ if(!element.parentNode) return true;
+ this.assertNotNull(element);
+ if(element.style && Element.getStyle(element, 'display') == 'none')
+ return false;
+
+ return this._isVisible(element.parentNode);
+ },
+ assertNotVisible: function(element) {
+ this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+ },
+ assertVisible: function(element) {
+ this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+ initialize: function(name, test, setup, teardown) {
+ Test.Unit.Assertions.prototype.initialize.bind(this)();
+ this.name = name;
+
+ if(typeof test == 'string') {
+ test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+ test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+ this.test = function() {
+ eval('with(this){'+test+'}');
+ };
+ } else {
+ this.test = test || function() {};
+ }
+
+ this.setup = setup || function() {};
+ this.teardown = teardown || function() {};
+ this.isWaiting = false;
+ this.timeToWait = 1000;
+ },
+ wait: function(time, nextPart) {
+ this.isWaiting = true;
+ this.test = nextPart;
+ this.timeToWait = time;
+ },
+ run: function() {
+ try {
+ try {
+ if (!this.isWaiting) this.setup.bind(this)();
+ this.isWaiting = false;
+ this.test.bind(this)();
+ } finally {
+ if(!this.isWaiting) {
+ this.teardown.bind(this)();
+ }
+ }
+ }
+ catch(e) { this.error(e); }
+ }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+ var METHODMAP = {
+ shouldEqual: 'assertEqual',
+ shouldNotEqual: 'assertNotEqual',
+ shouldEqualEnum: 'assertEnumEqual',
+ shouldBeA: 'assertType',
+ shouldNotBeA: 'assertNotOfType',
+ shouldBeAn: 'assertType',
+ shouldNotBeAn: 'assertNotOfType',
+ shouldBeNull: 'assertNull',
+ shouldNotBeNull: 'assertNotNull',
+
+ shouldBe: 'assertReturnsTrue',
+ shouldNotBe: 'assertReturnsFalse',
+ shouldRespondTo: 'assertRespondsTo'
+ };
+ var makeAssertion = function(assertion, args, object) {
+ this[assertion].apply(this,(args || []).concat([object]));
+ };
+
+ Test.BDDMethods = {};
+ $H(METHODMAP).each(function(pair) {
+ Test.BDDMethods[pair.key] = function() {
+ var args = $A(arguments);
+ var scope = args.shift();
+ makeAssertion.apply(scope, [pair.value, args, this]); };
+ });
+
+ [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ function(p){ Object.extend(p, Test.BDDMethods); }
+ );
+};
+
+Test.context = function(name, spec, log){
+ Test.setupBDDExtensionMethods();
+
+ var compiledSpec = {};
+ var titles = {};
+ for(specName in spec) {
+ switch(specName){
+ case "setup":
+ case "teardown":
+ compiledSpec[specName] = spec[specName];
+ break;
+ default:
+ var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+ var body = spec[specName].toString().split('\n').slice(1);
+ if(/^\{/.test(body[0])) body = body.slice(1);
+ body.pop();
+ body = body.map(function(statement){
+ return statement.strip();
+ });
+ compiledSpec[testName] = body.join('\n');
+ titles[testName] = specName;
+ }
+ }
+ new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+}; \ No newline at end of file
diff --git a/src/usr/local/www/javascript/sorttable.js b/src/usr/local/www/javascript/sorttable.js
new file mode 100644
index 0000000..f150e56
--- /dev/null
+++ b/src/usr/local/www/javascript/sorttable.js
@@ -0,0 +1,584 @@
+/*
+ SortTable
+ version 2
+ 7th April 2007
+ Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
+
+ Instructions:
+ Download this file
+ Add <script src="sorttable.js"></script> to your HTML
+ Add class="sortable" to any table you'd like to make sortable
+ Click on the headers to sort
+
+ Thanks to many, many people for contributions and suggestions.
+ Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
+ This basically means: do what you want with it.
+
+ -- pfSense modifications --
+ Allow for sorting of IP adresses
+ 2012-09-15 Allow for multiple header rows, using "sortableHeaderRowIdentifier" class for the TR that has the column headers. (used in firewall-log)
+ 2012-09-15 Allow sorting multiple dual/mutlti rows together, using sortablemultirow="2" attribute for the table
+ 2012-09-15 Allow sorting of IP:Port texts, changed sort compare function
+ 2012-11-05 Allow sorting of IP:Port and *:port texts toghether also AAA_23 AAA_123 in 'numeric order' (used in Diagnostics\Sockets column LOCAL)
+*/
+
+
+var stIsIE = /*@cc_on!@*/false;
+
+sorttable = {
+ init: function() {
+ // quit if this function has already been called
+ if (arguments.callee.done) return;
+ // flag this function so we don't do the same thing twice
+ arguments.callee.done = true;
+ // kill the timer
+ if (_timer) clearInterval(_timer);
+
+ if (!document.createElement || !document.getElementsByTagName) return;
+
+ sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
+
+ forEach(document.getElementsByTagName('table'), function(table) {
+ if (table.className.search(/\bsortable\b/) != -1) {
+ sorttable.makeSortable(table);
+ }
+ });
+
+ },
+
+ makeSortable: function(table) {
+ if (table.getElementsByTagName('thead').length == 0) {
+ // table doesn't have a tHead. Since it should have, create one and
+ // put the first table row in it.
+ the = document.createElement('thead');
+ the.appendChild(table.rows[0]);
+ table.insertBefore(the,table.firstChild);
+ }
+ // Safari doesn't support table.tHead, sigh
+ if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
+
+ headrow = undefined;
+ if (table.tHead.rows.length == 1)
+ headrow = table.tHead.rows[0].cells;
+ else
+ {
+ //if multiple rows are found one must be marked with class <tr class="sortableHeaderRowIdentifier">
+ for (var i=0; i<table.tHead.rows.length; i++) {
+ if (table.tHead.rows[i].className.search(/\bsortableHeaderRowIdentifier\b/) != -1)
+ {
+ headrow = table.tHead.rows[i].cells;
+ break;
+ }
+ }
+ }
+ if (headrow == undefined)
+ return;
+
+ if (table.getAttribute("sortableMultirow") != undefined)
+ sortableMultirow = parseInt(table.getAttribute("sortableMultirow"));
+ else
+ sortableMultirow = 1;
+
+ // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
+ // "total" rows, for example). This is B&R, since what you're supposed
+ // to do is put them in a tfoot. So, if there are sortbottom rows,
+ // for backwards compatibility, move them to tfoot (creating it if needed).
+ sortbottomrows = [];
+ for (var i=0; i<table.rows.length; i++) {
+ if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
+ sortbottomrows[sortbottomrows.length] = table.rows[i];
+ }
+ }
+ if (sortbottomrows) {
+ if (table.tFoot == null) {
+ // table doesn't have a tfoot. Create one.
+ tfo = document.createElement('tfoot');
+ table.appendChild(tfo);
+ }
+ for (var i=0; i<sortbottomrows.length; i++) {
+ tfo.appendChild(sortbottomrows[i]);
+ }
+ delete sortbottomrows;
+ }
+
+ // work through each column and calculate its type
+ for (var i=0; i<headrow.length; i++) {
+ // manually override the type with a sorttable_type attribute
+ if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
+ mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
+ if (mtch) { override = mtch[1]; }
+ if (mtch && typeof sorttable["sort_"+override] == 'function') {
+ headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
+ } else {
+ headrow[i].sorttable_sortfunction = sorttable.guessType(table,i, sortableMultirow);
+ }
+ // make it clickable to sort
+ headrow[i].sorttable_columnindex = i;
+ headrow[i].sorttable_tbody = table.tBodies[0];
+ dean_addEvent(headrow[i],"click", function(e) {
+
+ if (this.className.search(/\bsorttable_sorted\b/) != -1) {
+ // if we're already sorted by this column, just
+ // reverse the table, which is quicker
+ sorttable.reverse(this.sorttable_tbody, sortableMultirow);
+ this.className = this.className.replace('sorttable_sorted',
+ 'sorttable_sorted_reverse');
+ this.removeChild(document.getElementById('sorttable_sortfwdind'));
+ sortrevind = document.createElement('span');
+ sortrevind.id = "sorttable_sortrevind";
+ sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ this.appendChild(sortrevind);
+ return;
+ }
+ if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
+ // if we're already sorted by this column in reverse, just
+ // re-reverse the table, which is quicker
+ sorttable.reverse(this.sorttable_tbody, sortableMultirow);
+ this.className = this.className.replace('sorttable_sorted_reverse',
+ 'sorttable_sorted');
+ this.removeChild(document.getElementById('sorttable_sortrevind'));
+ sortfwdind = document.createElement('span');
+ sortfwdind.id = "sorttable_sortfwdind";
+ sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ this.appendChild(sortfwdind);
+ return;
+ }
+
+ // remove sorttable_sorted classes
+ theadrow = this.parentNode;
+ forEach(theadrow.childNodes, function(cell) {
+ if (cell.nodeType == 1) { // an element
+ cell.className = cell.className.replace('sorttable_sorted_reverse','');
+ cell.className = cell.className.replace('sorttable_sorted','');
+ }
+ });
+ sortfwdind = document.getElementById('sorttable_sortfwdind');
+ if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
+ sortrevind = document.getElementById('sorttable_sortrevind');
+ if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
+
+ this.className += ' sorttable_sorted';
+ sortfwdind = document.createElement('span');
+ sortfwdind.id = "sorttable_sortfwdind";
+ sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ this.appendChild(sortfwdind);
+
+ // build an array to sort. This is a Schwartzian transform thing,
+ // i.e., we "decorate" each row with the actual sort key,
+ // sort based on the sort keys, and then put the rows back in order
+ // which is a lot faster because you only do getInnerText once per row
+ row_array = [];
+ col = this.sorttable_columnindex;
+ rows = this.sorttable_tbody.rows;
+ for (var j=0; j<rows.length; j+=sortableMultirow) {
+ row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
+ for(var k=1; k < sortableMultirow;k++)
+ {
+ row_array[row_array.length-1][k+1]=rows[j+k];
+ }
+ }
+ /* If you want a stable sort, uncomment the following line */
+ //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
+ /* and comment out this one */
+ row_array.sort(this.sorttable_sortfunction);
+
+ tb = this.sorttable_tbody;
+ for (var j=0; j<row_array.length; j++) {
+ for(var k=0; k<sortableMultirow; k++) {
+ row = row_array[j][k+1];
+ if (j % 2 == 0)
+ row.className = row.className.replace(' listMReven',' listMRodd');
+ else
+ row.className = row.className.replace(' listMRodd',' listMReven');
+
+ tb.appendChild(row);
+ }
+ }
+
+ delete row_array;
+ });
+ }
+ }
+ },
+
+ guessType: function(table, column, sortableMultirow) {
+ // guess the type of a column based on its first non-blank row
+ sortfn = sorttable.sort_alpha;
+ for (var i=0; i<table.tBodies[0].rows.length; i+=sortableMultirow) {
+ text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
+ if (text != '') {
+ if (text.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:[0-9]{1,5})?\b/)) {
+ return sorttable.sort_ipaddr;
+ }
+ if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
+ return sorttable.sort_numeric;
+ }
+ // check for a date: dd/mm/yyyy or dd/mm/yy
+ // can have / or . or - as separator
+ // can be mm/dd as well
+ possdate = text.match(sorttable.DATE_RE);
+ if (possdate) {
+ // looks like a date
+ first = parseInt(possdate[1]);
+ second = parseInt(possdate[2]);
+ if (first > 12) {
+ // definitely dd/mm
+ return sorttable.sort_ddmm;
+ } else if (second > 12) {
+ return sorttable.sort_mmdd;
+ } else {
+ // looks like a date, but we can't tell which, so assume
+ // that it's dd/mm (English imperialism!) and keep looking
+ sortfn = sorttable.sort_ddmm;
+ }
+ }
+ }
+ }
+ return sortfn;
+ },
+
+ getInnerText: function(node) {
+ // gets the text we want to use for sorting for a cell.
+ // strips leading and trailing whitespace.
+ // this is *not* a generic getInnerText function; it's special to sorttable.
+ // for example, you can override the cell text with a customkey attribute.
+ // it also gets .value for <input> fields.
+
+ hasInputs = (typeof node.getElementsByTagName == 'function') &&
+ node.getElementsByTagName('input').length;
+
+ if (node.getAttribute("sorttable_customkey") != null) {
+ return node.getAttribute("sorttable_customkey");
+ }
+ else if (typeof node.textContent != 'undefined' && !hasInputs) {
+ return node.textContent.replace(/^\s+|\s+$/g, '');
+ }
+ else if (typeof node.innerText != 'undefined' && !hasInputs) {
+ return node.innerText.replace(/^\s+|\s+$/g, '');
+ }
+ else if (typeof node.text != 'undefined' && !hasInputs) {
+ return node.text.replace(/^\s+|\s+$/g, '');
+ }
+ else {
+ switch (node.nodeType) {
+ case 3:
+ if (node.nodeName.toLowerCase() == 'input') {
+ return node.value.replace(/^\s+|\s+$/g, '');
+ }
+ case 4:
+ return node.nodeValue.replace(/^\s+|\s+$/g, '');
+ break;
+ case 1:
+ case 11:
+ var innerText = '';
+ for (var i = 0; i < node.childNodes.length; i++) {
+ innerText += sorttable.getInnerText(node.childNodes[i]);
+ }
+ return innerText.replace(/^\s+|\s+$/g, '');
+ break;
+ default:
+ return '';
+ }
+ }
+ },
+
+ reverse: function(tbody, sortableMultirow) {
+ // reverse the rows in a tbody
+ newrows = [];
+ for (var i=0; i<tbody.rows.length; i++) {
+ newrows[newrows.length] = tbody.rows[i];
+ }
+ for (var i=newrows.length-1; i>=0; i-=sortableMultirow) {
+ for(var j=sortableMultirow-1;j>=0;j--)
+ {
+ tbody.appendChild(newrows[i-j]);
+ }
+ }
+ delete newrows;
+ },
+
+ /* sort functions
+ each sort function takes two parameters, a and b
+ you are comparing a[0] and b[0] */
+ sort_numeric: function(a,b) {
+ aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
+ if (isNaN(aa)) aa = 0;
+ bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
+ if (isNaN(bb)) bb = 0;
+ return aa-bb;
+ },
+ sort_alpha: function(a,b) {
+ if (a[0]==b[0]) return 0;
+ if (a[0]<b[0]) return -1;
+ return 1;
+ },
+ sort_ddmm: function(a,b) {
+ mtch = a[0].match(sorttable.DATE_RE);
+ y = mtch[3]; m = mtch[2]; d = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt1 = y+m+d;
+ mtch = b[0].match(sorttable.DATE_RE);
+ y = mtch[3]; m = mtch[2]; d = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt2 = y+m+d;
+ if (dt1==dt2) return 0;
+ if (dt1<dt2) return -1;
+ return 1;
+ },
+ sort_mmdd: function(a,b) {
+ mtch = a[0].match(sorttable.DATE_RE);
+ y = mtch[3]; d = mtch[2]; m = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt1 = y+m+d;
+ mtch = b[0].match(sorttable.DATE_RE);
+ y = mtch[3]; d = mtch[2]; m = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt2 = y+m+d;
+ if (dt1==dt2) return 0;
+ if (dt1<dt2) return -1;
+ return 1;
+ },
+ sortWithNumber: function(a,b) {
+ amatch = a[0].match(/.*?(?=[0-9])/);
+ bmatch = b[0].match(/.*?(?=[0-9])/);
+ if (amatch && bmatch && amatch[0] == bmatch[0])
+ {
+ anumber = a[0].substring(amatch.length+1);
+ bnumber = b[0].substring(bmatch.length+1);
+ a2match = parseInt(anumber.match(/[0-9]*/));
+ b2match = parseInt(bnumber.match(/[0-9]*/));
+ if (a2match > b2match) return 1;
+ if (a2match < b2match) return -1;
+ }
+ if (a[0] == b[0]) return 0;
+ if (a[0] < b[0]) return -1;
+ return 1;
+ },
+ sort_ipaddr: function(a,b) {
+ aip = ip2ulong(a[0]);
+ bip = ip2ulong(b[0]);
+ if (aip && bip)
+ {
+ if (aip == bip) return 0;
+ if (aip < bip) return -1;
+ return 1;
+ } else {
+ if (aip !== false || bip !== false)
+ return aip === false ? -1 : 1;
+ else
+ {
+ return sorttable.sortWithNumber(a,b);
+ }
+ }
+ },
+
+ shaker_sort: function(list, comp_func) {
+ // A stable sort function to allow multi-level sorting of data
+ // see: http://en.wikipedia.org/wiki/Cocktail_sort
+ // thanks to Joseph Nahmias
+ var b = 0;
+ var t = list.length - 1;
+ var swap = true;
+
+ while(swap) {
+ swap = false;
+ for(var i = b; i < t; ++i) {
+ if ( comp_func(list[i], list[i+1]) > 0 ) {
+ var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
+ swap = true;
+ }
+ } // for
+ t--;
+
+ if (!swap) break;
+
+ for(var i = t; i > b; --i) {
+ if ( comp_func(list[i], list[i-1]) < 0 ) {
+ var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
+ swap = true;
+ }
+ } // for
+ b++;
+
+ } // while(swap)
+ }
+};
+
+/* ******************************************************************
+ Supporting functions: bundled here to avoid depending on a library
+ ****************************************************************** */
+
+function ip2ulong(ip) {
+ ip += "";
+ var ulip = false;
+ var octets = [];
+ ipportmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:[0-9]{1,5}\b/);// IP:port
+ if (ipportmatch) {
+ ipportmatch += "";
+ ipport = ipportmatch.split(':');
+ octets = ipport[0].split('.');
+ for (i=0; i < 4; i++) {
+ ulip += octets[i] * Math.pow(256, (5-i));
+ }
+ ulip += parseInt(ipport[1]);
+ } else {
+ ipmatch = ip.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/);// IP only
+ if (ipmatch) {
+ ipmatch+="";
+ octets = ipmatch.split('.');
+ for (i=0; i < 4; i++) {
+ ulip += octets[i] * Math.pow(256, (5-i));
+ }
+ }
+ }
+ return ulip;
+}
+
+// Dean Edwards/Matthias Miller/John Resig
+
+/* for Mozilla/Opera9 */
+if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", sorttable.init, false);
+}
+
+/* for Safari */
+if (/WebKit/i.test(navigator.userAgent)) { // sniff
+ var _timer = setInterval(function() {
+ if (/loaded|complete/.test(document.readyState)) {
+ sorttable.init(); // call the onload handler
+ }
+ }, 10);
+}
+
+/* for other browsers */
+window.onload = sorttable.init;
+
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel, Matthias Miller, Diego Perini
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function dean_addEvent(element, type, handler) {
+ if (element.addEventListener) {
+ element.addEventListener(type, handler, false);
+ } else {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = handleEvent;
+ }
+};
+// a counter used to create unique IDs
+dean_addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+ if (element.removeEventListener) {
+ element.removeEventListener(type, handler, false);
+ } else {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+ }
+};
+
+function handleEvent(event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ this.$$handleEvent = handlers[i];
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+function fixEvent(event) {
+ // add W3C standard event methods
+ event.preventDefault = fixEvent.preventDefault;
+ event.stopPropagation = fixEvent.stopPropagation;
+ return event;
+};
+fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+};
+
+// Dean's forEach: http://dean.edwards.name/base/forEach.js
+/*
+ forEach, version 1.0
+ Copyright 2006, Dean Edwards
+ License: http://www.opensource.org/licenses/mit-license.php
+*/
+
+// array-like enumeration
+if (!Array.forEach) { // mozilla already supports this
+ Array.forEach = function(array, block, context) {
+ for (var i = 0; i < array.length; i++) {
+ block.call(context, array[i], i, array);
+ }
+ };
+}
+
+// generic enumeration
+Function.prototype.forEach = function(object, block, context) {
+ for (var key in object) {
+ if (typeof this.prototype[key] == "undefined") {
+ block.call(context, object[key], key, object);
+ }
+ }
+};
+
+// character enumeration
+String.forEach = function(string, block, context) {
+ Array.forEach(string.split(""), function(chr, index) {
+ block.call(context, chr, index, string);
+ });
+};
+
+// globally resolve forEach enumeration
+var forEach = function(object, block, context) {
+ if (object) {
+ var resolve = Object; // default
+ if (object instanceof Function) {
+ // functions have a "length" property
+ resolve = Function;
+ } else if (object.forEach instanceof Function) {
+ // the object implements a custom forEach method so use that
+ object.forEach(block, context);
+ return;
+ } else if (typeof object == "string") {
+ // the object is a string
+ resolve = String;
+ } else if (typeof object.length == "number") {
+ // the object is array-like
+ resolve = Array;
+ }
+ resolve.forEach(object, block, context);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/suggestions.js b/src/usr/local/www/javascript/suggestions.js
new file mode 100644
index 0000000..682a352
--- /dev/null
+++ b/src/usr/local/www/javascript/suggestions.js
@@ -0,0 +1,33 @@
+
+/**
+ * Provides suggestions for state names (USA).
+ * @class
+ * @scope public
+ */
+function StateSuggestions(text) {
+ this.states = text;
+}
+
+/**
+ * Request suggestions for the given autosuggest control.
+ * @scope protected
+ * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
+ */
+StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
+ bTypeAhead /*:boolean*/) {
+ var aSuggestions = [];
+ var sTextboxValue = oAutoSuggestControl.textbox.value;
+
+ if (sTextboxValue.length > 0){
+
+ //search for matching states
+ for (var i=0; i < this.states.length; i++) {
+ if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
+ aSuggestions.push(this.states[i]);
+ }
+ }
+ }
+
+ //provide suggestions to the control
+ oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
+};
diff --git a/src/usr/local/www/javascript/ticker.js b/src/usr/local/www/javascript/ticker.js
new file mode 100644
index 0000000..defb1d8
--- /dev/null
+++ b/src/usr/local/www/javascript/ticker.js
@@ -0,0 +1,73 @@
+/* $Id$ */
+/*
+ ticker.js
+ Copyright (C) 2012 Marcello Coutinho
+ Copyright (C) 2012 Carlos Cesario - carloscesario@gmail.com
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+ pfSense_MODULE: utils
+
+*/
+function notice_action(action,msgid) {
+ jQuery.ajax({
+ type: 'post',
+ cache: false,
+ url: 'index.php',
+ data: {closenotice: msgid},
+ success: function(response) {
+ jQuery('#menu_messages').html(response);
+ }
+ });
+}
+
+function pulsateText(elem) {
+ jQuery(elem).effect("pulsate", { times:12 }, 500);
+ jQuery(elem).effect("pulsate", { times:6 }, 1500);
+ jQuery(elem).effect("pulsate", { times:3 }, 2500);
+}
+
+jQuery(document).ready(function() {
+ pulsateText('#marquee-text');
+ jQuery('#marquee-text a').hover(function () {
+ jQuery(this).css('cursor','pointer');
+ });
+});
+
+function alias_popup(alias_id,theme,loading) {
+ domTT_update('ttalias_'+alias_id,"<a><img src='/themes/"+theme+"/images/misc/loader.gif'>"+loading+"</a>");
+ jQuery.ajax({
+ type: 'post',
+ cache: false,
+ url: "/index.php",
+ data: {aliasid:alias_id, act:'alias_info_popup'},
+ success: function(response) {
+ //alert('<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
+ domTT_update('ttalias_'+alias_id,'<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/javascript/wizard/autosuggest.js b/src/usr/local/www/javascript/wizard/autosuggest.js
new file mode 100644
index 0000000..d9b5ac0
--- /dev/null
+++ b/src/usr/local/www/javascript/wizard/autosuggest.js
@@ -0,0 +1,337 @@
+
+/**
+ * An autosuggest textbox control.
+ * @class
+ * @scope public
+ */
+function AutoSuggestControl(oTextbox /*:HTMLInputElement*/,
+ oProvider /*:SuggestionProvider*/) {
+
+ /**
+ * The currently selected suggestions.
+ * @scope private
+ */
+ this.cur /*:int*/ = -1;
+
+ /**
+ * The dropdown list layer.
+ * @scope private
+ */
+ this.layer = null;
+
+ /**
+ * Suggestion provider for the autosuggest feature.
+ * @scope private.
+ */
+ this.provider /*:SuggestionProvider*/ = oProvider;
+
+ /**
+ * The textbox to capture.
+ * @scope private
+ */
+ this.textbox /*:HTMLInputElement*/ = oTextbox;
+
+ //initialize the control
+ this.init();
+
+}
+
+/**
+ * Autosuggests one or more suggestions for what the user has typed.
+ * If no suggestions are passed in, then no autosuggest occurs.
+ * @scope private
+ * @param aSuggestions An array of suggestion strings.
+ * @param bTypeAhead If the control should provide a type ahead suggestion.
+ */
+AutoSuggestControl.prototype.autosuggest = function (aSuggestions /*:Array*/,
+ bTypeAhead /*:boolean*/) {
+
+ //make sure there's at least one suggestion
+ if (aSuggestions.length > 0) {
+ if (bTypeAhead) {
+ this.typeAhead(aSuggestions[0]);
+ }
+
+ this.showSuggestions(aSuggestions);
+ } else {
+ this.hideSuggestions();
+ }
+};
+
+/**
+ * Creates the dropdown layer to display multiple suggestions.
+ * @scope private
+ */
+AutoSuggestControl.prototype.createDropDown = function () {
+
+ var oThis = this;
+
+ //create the layer and assign styles
+ this.layer = document.createElement("div");
+ this.layer.className = "suggestions";
+ this.layer.style.visibility = "hidden";
+ this.layer.style.width = this.textbox.offsetWidth;
+
+ //when the user clicks on the a suggestion, get the text (innerHTML)
+ //and place it into a textbox
+ this.layer.onmousedown =
+ this.layer.onmouseup =
+ this.layer.onmouseover = function (oEvent) {
+ oEvent = oEvent || window.event;
+ oTarget = oEvent.target || oEvent.srcElement;
+
+ if (oEvent.type == "mousedown") {
+ oThis.textbox.value = oTarget.firstChild.nodeValue;
+ oThis.hideSuggestions();
+ } else if (oEvent.type == "mouseover") {
+ oThis.highlightSuggestion(oTarget);
+ } else {
+ oThis.textbox.focus();
+ }
+ };
+
+
+ document.body.appendChild(this.layer);
+};
+
+/**
+ * Gets the left coordinate of the textbox.
+ * @scope private
+ * @return The left coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iLeft = 0;
+
+ while(oNode.tagName != "BODY") {
+ iLeft += oNode.offsetLeft;
+ oNode = oNode.offsetParent;
+ }
+
+ return iLeft;
+};
+
+/**
+ * Gets the top coordinate of the textbox.
+ * @scope private
+ * @return The top coordinate of the textbox in pixels.
+ */
+AutoSuggestControl.prototype.getTop = function () /*:int*/ {
+
+ var oNode = this.textbox;
+ var iTop = 0;
+
+ while(oNode.tagName != "BODY") {
+ iTop += oNode.offsetTop;
+ oNode = oNode.offsetParent;
+ }
+
+ return iTop;
+};
+
+/**
+ * Handles three keydown events.
+ * @scope private
+ * @param oEvent The event object for the keydown event.
+ */
+AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
+
+ switch(oEvent.keyCode) {
+ case 38: //up arrow
+ this.previousSuggestion();
+ break;
+ case 40: //down arrow
+ this.nextSuggestion();
+ break;
+ case 13: //enter
+ this.hideSuggestions();
+ break;
+ }
+
+};
+
+/**
+ * Handles keyup events.
+ * @scope private
+ * @param oEvent The event object for the keyup event.
+ */
+AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
+
+ var iKeyCode = oEvent.keyCode;
+
+ //for backspace (8) and delete (46), shows suggestions without typeahead
+ if (iKeyCode == 8 || iKeyCode == 46) {
+ this.provider.requestSuggestions(this, false);
+
+ //make sure not to interfere with non-character keys
+ } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
+ //ignore
+ } else {
+ //request suggestions from the suggestion provider with typeahead
+ this.provider.requestSuggestions(this, true);
+ }
+};
+
+/**
+ * Hides the suggestion dropdown.
+ * @scope private
+ */
+AutoSuggestControl.prototype.hideSuggestions = function () {
+ this.layer.style.visibility = "hidden";
+};
+
+/**
+ * Highlights the given node in the suggestions dropdown.
+ * @scope private
+ * @param oSuggestionNode The node representing a suggestion in the dropdown.
+ */
+AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {
+
+ for (var i=0; i < this.layer.childNodes.length; i++) {
+ var oNode = this.layer.childNodes[i];
+ if (oNode == oSuggestionNode) {
+ oNode.className = "current";
+ } else if (oNode.className == "current") {
+ oNode.className = "";
+ }
+ }
+};
+
+/**
+ * Initializes the textbox with event handlers for
+ * auto suggest functionality.
+ * @scope private
+ */
+AutoSuggestControl.prototype.init = function () {
+
+ //save a reference to this object
+ var oThis = this;
+
+ //assign the onkeyup event handler
+ this.textbox.onkeyup = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyUp() method with the event object
+ oThis.handleKeyUp(oEvent);
+ };
+
+ //assign onkeydown event handler
+ this.textbox.onkeydown = function (oEvent) {
+
+ //check for the proper location of the event object
+ if (!oEvent) {
+ oEvent = window.event;
+ }
+
+ //call the handleKeyDown() method with the event object
+ oThis.handleKeyDown(oEvent);
+ };
+
+ //assign onblur event handler (hides suggestions)
+ this.textbox.onblur = function () {
+ oThis.hideSuggestions();
+ };
+
+ //create the suggestions dropdown
+ this.createDropDown();
+};
+
+/**
+ * Highlights the next suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.nextSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
+ var oNode = cSuggestionNodes[++this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Highlights the previous suggestion in the dropdown and
+ * places the suggestion into the textbox.
+ * @scope private
+ */
+AutoSuggestControl.prototype.previousSuggestion = function () {
+ var cSuggestionNodes = this.layer.childNodes;
+
+ if (cSuggestionNodes.length > 0 && this.cur > 0) {
+ var oNode = cSuggestionNodes[--this.cur];
+ this.highlightSuggestion(oNode);
+ this.textbox.value = oNode.firstChild.nodeValue;
+ }
+};
+
+/**
+ * Selects a range of text in the textbox.
+ * @scope public
+ * @param iStart The start index (base 0) of the selection.
+ * @param iLength The number of characters to select.
+ */
+AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iLength /*:int*/) {
+
+ //use text ranges for Internet Explorer
+ if (this.textbox.createTextRange) {
+ var oRange = this.textbox.createTextRange();
+ oRange.moveStart("character", iStart);
+ oRange.moveEnd("character", iLength - this.textbox.value.length);
+ oRange.select();
+
+ //use setSelectionRange() for Mozilla
+ } else if (this.textbox.setSelectionRange) {
+ this.textbox.setSelectionRange(iStart, iLength);
+ }
+
+ //set focus back to the textbox
+ this.textbox.focus();
+};
+
+/**
+ * Builds the suggestion layer contents, moves it into position,
+ * and displays the layer.
+ * @scope private
+ * @param aSuggestions An array of suggestions for the control.
+ */
+AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
+
+ var oDiv = null;
+ this.layer.innerHTML = ""; //clear contents of the layer
+
+ for (var i=0; i < aSuggestions.length; i++) {
+ oDiv = document.createElement("div");
+ oDiv.appendChild(document.createTextNode(aSuggestions[i]));
+ this.layer.appendChild(oDiv);
+ }
+
+ this.layer.style.left = this.getLeft() + "px";
+ this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
+ this.layer.style.width = this.textbox.offsetWidth + "px";
+ this.layer.style.visibility = "visible";
+
+};
+
+/**
+ * Inserts a suggestion into the textbox, highlighting the
+ * suggested part of the text.
+ * @scope private
+ * @param sSuggestion The suggestion for the textbox.
+ */
+AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
+
+ //check for support of typeahead functionality
+ if (this.textbox.createTextRange || this.textbox.setSelectionRange){
+ var iLen = this.textbox.value.length;
+ this.textbox.value = sSuggestion;
+ this.selectRange(iLen, sSuggestion.length);
+ }
+};
+
diff --git a/src/usr/local/www/javascript/wizard/disablekeys.js b/src/usr/local/www/javascript/wizard/disablekeys.js
new file mode 100644
index 0000000..5d6c87a
--- /dev/null
+++ b/src/usr/local/www/javascript/wizard/disablekeys.js
@@ -0,0 +1,6 @@
+function kH(e) {
+ var pK = document.all? window.event.keyCode:e.which;
+ return pK != 13;
+}
+document.onkeypress = kH;
+if (document.layers) document.captureEvents(Event.KEYPRESS); \ No newline at end of file
diff --git a/src/usr/local/www/javascript/wizard/suggestions.js b/src/usr/local/www/javascript/wizard/suggestions.js
new file mode 100644
index 0000000..4d1e127
--- /dev/null
+++ b/src/usr/local/www/javascript/wizard/suggestions.js
@@ -0,0 +1,33 @@
+
+/**
+ * Provides suggestions for state names (USA).
+ * @class
+ * @scope public
+ */
+function StateSuggestions(text) {
+ this.states = text;
+}
+
+/**
+ * Request suggestions for the given autosuggest control.
+ * @scope protected
+ * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
+ */
+StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
+ bTypeAhead /*:boolean*/) {
+ var aSuggestions = [];
+ var sTextboxValue = oAutoSuggestControl.textbox.value;
+
+ if (sTextboxValue.length > 0){
+
+ //search for matching states
+ for (var i=0; i < this.states.length; i++) {
+ if (this.states[i].toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0) {
+ aSuggestions.push(this.states[i]);
+ }
+ }
+ }
+
+ //provide suggestions to the control
+ oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
+};
diff --git a/src/usr/local/www/license.php b/src/usr/local/www/license.php
new file mode 100644
index 0000000..2247d6a
--- /dev/null
+++ b/src/usr/local/www/license.php
@@ -0,0 +1,133 @@
+<?php
+/* $Id$ */
+/*
+ license.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-license
+##|*NAME=System: License page
+##|*DESCR=Allow access to the 'System: License' page.
+##|*MATCH=license.php*
+##|-PRIV
+
+require("guiconfig.inc");
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc"); ?>
+ <p class="pgtitle"><?=gettext("License");?></p>
+
+ <p><strong><?=$g['product_name'];?> <?=gettext("is Copyright");?> &copy; <?=$g['product_copyright_years'];?> <?=gettext("by");?> <?=$g['product_copyright'];?><br />
+ <?=gettext("All rights reserved");?>.</strong></p>
+
+ <p><strong><?=gettext("m0n0wall is Copyright ");?>&copy; <?=gettext("2002-2015 by Manuel Kasper");?>
+ (<a href="mailto:mk@neon1.net">mk@neon1.net</a>).<br />
+ <?=gettext("All rights reserved");?>.</strong></p>
+ <p> <?=gettext("Redistribution and use in source and binary forms, with or without");?><br />
+ <?=gettext("modification, are permitted provided that the following conditions are met");?>:<br />
+ <br />
+ <?=gettext("1. Redistributions of source code must retain the above copyright notice,");?><br />
+ <?=gettext("this list of conditions and the following disclaimer");?>.<br />
+ <br />
+ <?=gettext("2. Redistributions in binary form must reproduce the above copyright");?><br />
+ <?=gettext("notice, this list of conditions and the following disclaimer in the");?><br />
+ <?=gettext("documentation and/or other materials provided with the distribution.");?><br />
+ <br />
+ <strong><?=gettext("THIS SOFTWARE IS PROVIDED ");?>&quot;<?=gettext("AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,");?><br />
+ <?=gettext("INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY");?><br />
+ <?=gettext("AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE");?><br />
+ <?=gettext("AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,");?><br />
+ <?=gettext("OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF");?><br />
+ <?=gettext("SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS");?><br />
+ <?=gettext("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN");?><br />
+ <?=gettext("CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)");?><br />
+ <?=gettext("ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE");?><br />
+ <?=gettext("POSSIBILITY OF SUCH DAMAGE");?></strong>.</p>
+ <hr size="1">
+ <p><?= "{$g['product_name']} " . gettext("is based upon/includes various free software packages, listed below.");?><br />
+ <?php printf(gettext("The authors of %s would like to thank the authors of these software packages for their efforts"), $g['product_name']);?>.</p>
+ <p>FreeBSD (<a href="http://www.freebsd.org" target="_blank">http://www.freebsd.org</a>)<br />
+ <?=gettext("Copyright");?> &copy;<?=gettext("1992-2015 The FreeBSD Project. All rights reserved");?>.<br />
+ <br />
+ <?=gettext("This product includes PHP, freely available from");?> <a href="http://www.php.net/" target="_blank">http://www.php.net</a>.<br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("1999-2015 The PHP Group. All rights reserved.");?>.<br />
+ <br />
+ <?=gettext("LightTPD"); ?> (<a href="http://www.lighttpd.net" target="_blank">http://www.lighttpd.net)</a><br />
+ <?=gettext("Copyright"); ?> &copy;<?=gettext("2004, Jan Knescke, incremental");?><jan@kneschke.de>
+ <?=gettext("All rights reserved.");?><br />
+ <br />
+ <?=gettext("ISC DHCP server ");?>(<a href="http://www.isc.org/products/DHCP/" target="_blank">http://www.isc.org/products/DHCP</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("2004-2012 Internet Software Consortium, Inc.");?><br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("1995-2003 Internet Software Consortium");?><br />
+ <br />
+ <?=gettext("PF"); ?> (<a href="http://www.openbsd.org/faq/pf" target="_blank">http://www.openbsd.org</a>)<br />
+ <br />
+ <?=gettext("MPD - Multi-link PPP daemon for FreeBSD");?> (<a href="http://www.dellroad.org/mpd" target="_blank">http://www.dellroad.org/mpd</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; 2003-2004, Archie L. Cobbs, Michael Bretterklieber, Alexander Motin<br />
+ <?=gettext("All rights reserved.");?><br />
+ <br />
+ <?=gettext("Circular log support for FreeBSD syslogd ");?>(<a href="http://software.wheelhouse.org/syslogd/" target="_blank">http://software.wheelhouse.org/syslogd/</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; 2001 Jeff Wheelhouse (jdw@wwwi.com)<br />
+ <br />
+ <?=gettext("Dnsmasq - a DNS forwarder for NAT firewalls");?> (<a href="http://www.thekelleys.org.uk" target="_blank">http://www.thekelleys.org.uk</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; 2000-2012 Simon Kelley.<br />
+ <br />
+ <?=gettext("IPsec-Tools"); ?> (<a href="http://ipsec-tools.sourceforge.net/" target="_blank">http://ipsec-tools.sourceforge.net/</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("1995-2002 WIDE Project. All rights reserved.");?><br />
+ <br />
+ <?=gettext("msntp"); ?> (<a href="http://www.hpcf.cam.ac.uk/export" target="_blank">http://www.hpcf.cam.ac.uk/export</a>)<br />
+ <?=gettext("Copyright"); ?> &copy;<?=gettext(" 1996, 1997, 2000 N.M. Maclaren, University of Cambridge. ".
+ "All rights reserved.");?><br />
+ <br />
+ <?=gettext("UCD-SNMP"); ?> (<a href="http://www.ece.ucdavis.edu/ucd-snmp" target="_blank">http://www.ece.ucdavis.edu/ucd-snmp</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("1989, 1991, 1992 by Carnegie Mellon University.");?><br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("1996, 1998-2000 The Regents of the University of California. All rights reserved");?>.<br />
+ <?=gettext("Copyright"); ?> &copy; <?=gettext("2001-2002, Network Associates Technology, Inc. All rights reserved.");?><br />
+ <?=gettext("Portions of this code are copyright");?> &copy; <?=gettext("2001-2002, Cambridge Broadband Ltd. All rights reserved.");?><br />
+ <br />
+ <?=gettext("choparp"); ?> (<a href="http://choparp.sourceforge.net/" target="_blank">http://choparp.sourceforge.net</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; 1997 Takamichi Tateoka (tree@mma.club.uec.ac.jp)<br />
+ <?=gettext("Copyright"); ?> &copy; 2002 Thomas Quinot (thomas@cuivre.fr.eu.org)<br />
+ <br />
+ <?=gettext("php-radius"); ?> (<a href="http://www.mavetju.org/programming/php.php" target="_blank">http://www.mavetju.org/programming/php.php</a>)<br />
+ <?=gettext("Copyright 2000, 2001, 2002 by Edwin Groothuis. All rights reserved.");?><br />
+ <?=gettext("This product includes software developed by Edwin Groothuis.");?><br />
+ <br />
+ <?=gettext("wol"); ?> (<a href="http://ahh.sourceforge.net/wol" target="_blank">http://ahh.sourceforge.net/wol</a>)<br />
+ <?=gettext("Copyright"); ?> &copy; 2000,2001,2002,2003,2004 Thomas Krennwallner &lt;krennwallner@aon.at&gt;
+ <br />
+ <?=gettext("OpenVPN"); ?> (<a href="http://openvpn.net/" target="_blank">http://openvpn.net/</a>)
+ <?=gettext("Copyright (C) 2002-2005 OpenVPN Solutions LLC ");?>
+ </p>
+ <?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_monitor.php b/src/usr/local/www/load_balancer_monitor.php
new file mode 100644
index 0000000..87884e5
--- /dev/null
+++ b/src/usr/local/www/load_balancer_monitor.php
@@ -0,0 +1,138 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_monitor.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-services-loadbalancer-monitor
+##|*NAME=Services: Load Balancer: Monitors page
+##|*DESCR=Allow access to the 'Services: Load Balancer: Monitors' page.
+##|*MATCH=load_balancer_monitor.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("util.inc");
+
+if (!is_array($config['load_balancer']['monitor_type'])) {
+ $config['load_balancer']['monitor_type'] = array();
+}
+$a_monitor = &$config['load_balancer']['monitor_type'];
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $retval |= relayd_configure();
+
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('loadbalancer');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if (array_key_exists($_GET['id'], $a_monitor)) {
+ /* make sure no pools reference this entry */
+ if (is_array($config['load_balancer']['lbpool'])) {
+ foreach ($config['load_balancer']['lbpool'] as $pool) {
+ if ($pool['monitor'] == $a_monitor[$_GET['id']]['name']) {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one pool.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ unset($a_monitor[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('loadbalancer');
+ header("Location: load_balancer_monitor.php");
+ exit;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Monitor"));
+$shortcut_section = "relayd";
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="load_balancer_monitor.php" method="post">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
+<?php print_info_box_np(gettext("The load balancer configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer monitor">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
+ $tab_array[] = array(gettext("Monitors"), true, "load_balancer_monitor.php");
+ $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+<?php
+ $t = new MainTable();
+ $t->edit_uri('load_balancer_monitor_edit.php');
+ $t->my_uri('load_balancer_monitor.php');
+ $t->add_column(gettext('Name'), 'name', 20);
+ $t->add_column(gettext('Type'), 'type', 10);
+ $t->add_column(gettext('Description'), 'descr', 30);
+ $t->add_button('edit');
+ $t->add_button('dup');
+ $t->add_button('del');
+ $t->add_content_array($a_monitor);
+ $t->display();
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_monitor_edit.php b/src/usr/local/www/load_balancer_monitor_edit.php
new file mode 100644
index 0000000..532136b
--- /dev/null
+++ b/src/usr/local/www/load_balancer_monitor_edit.php
@@ -0,0 +1,390 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_monitor_edit.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-services-loadbalancer-monitor-edit
+##|*NAME=Services: Load Balancer: Monitor: Edit page
+##|*DESCR=Allow access to the 'Services: Load Balancer: Monitor: Edit' page.
+##|*MATCH=load_balancer_monitor_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_monitor.php');
+}
+
+if (!is_array($config['load_balancer']['monitor_type'])) {
+ $config['load_balancer']['monitor_type'] = array();
+}
+$a_monitor = &$config['load_balancer']['monitor_type'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_monitor[$id]) {
+ $pconfig['name'] = $a_monitor[$id]['name'];
+ $pconfig['type'] = $a_monitor[$id]['type'];
+ $pconfig['descr'] = $a_monitor[$id]['descr'];
+ $pconfig['options'] = array();
+ $pconfig['options'] = $a_monitor[$id]['options'];
+} else {
+ /* Some sane page defaults */
+ $pconfig['options']['path'] = '/';
+ $pconfig['options']['code'] = 200;
+}
+
+$changedesc = gettext("Load Balancer: Monitor:") . " ";
+$changecount = 0;
+
+if ($_POST) {
+ $changecount++;
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* turn $_POST['http_options_*'] into $pconfig['options'][*] */
+ foreach ($_POST as $key => $val) {
+ if (stristr($key, 'options') !== false) {
+ if (stristr($key, $pconfig['type'].'_') !== false) {
+ $opt = explode('_', $key);
+ $pconfig['options'][$opt[2]] = $val;
+ }
+ unset($pconfig[$key]);
+ }
+ }
+
+ /* input validation */
+ $reqdfields = explode(" ", "name type descr");
+ $reqdfieldsn = array(gettext("Name"), gettext("Type"), gettext("Description"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* Ensure that our monitor names are unique */
+ for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
+ if (($_POST['name'] == $config['load_balancer']['monitor_type'][$i]['name']) && ($i != $id)) {
+ $input_errors[] = gettext("This monitor name has already been used. Monitor names must be unique.");
+ }
+ }
+
+ if (preg_match('/[ \/]/', $_POST['name'])) {
+ $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
+ }
+
+ if (strlen($_POST['name']) > 16) {
+ $input_errors[] = gettext("The 'name' field must be 16 characters or less.");
+ }
+
+ switch ($_POST['type']) {
+ case 'icmp': {
+ break;
+ }
+ case 'tcp': {
+ break;
+ }
+ case 'http':
+ case 'https': {
+ if (is_array($pconfig['options'])) {
+ if (isset($pconfig['options']['host']) && $pconfig['options']['host'] != "") {
+ if (!is_hostname($pconfig['options']['host'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
+ }
+ }
+ if (isset($pconfig['options']['code']) && $pconfig['options']['code'] != "") {
+ // Check code
+ if (!is_rfc2616_code($pconfig['options']['code'])) {
+ $input_errors[] = gettext("HTTP(s) codes must be from RFC2616.");
+ }
+ }
+ if (!isset($pconfig['options']['path']) || $pconfig['options']['path'] == "") {
+ $input_errors[] = gettext("The path to monitor must be set.");
+ }
+ }
+ break;
+ }
+ case 'send': {
+ if (is_array($pconfig['options'])) {
+ if (isset($pconfig['options']['send']) && $pconfig['options']['send'] != "") {
+ // Check send
+ }
+ if (isset($pconfig['options']['expect']) && $pconfig['options']['expect'] != "") {
+ // Check expect
+ }
+ }
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $monent = array();
+ if (isset($id) && $a_monitor[$id]) {
+ $monent = $a_monitor[$id];
+ }
+ if ($monent['name'] != "") {
+ $changedesc .= " " . sprintf(gettext("modified '%s' monitor:"), $monent['name']);
+ }
+
+ update_if_changed("name", $monent['name'], $pconfig['name']);
+ update_if_changed("type", $monent['type'], $pconfig['type']);
+ update_if_changed("description", $monent['descr'], $pconfig['descr']);
+ if ($pconfig['type'] == "http" || $pconfig['type'] == "https") {
+ /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */
+ update_if_changed("path", $monent['options']['path'], $pconfig['options']['path']);
+ update_if_changed("host", $monent['options']['host'], $pconfig['options']['host']);
+ update_if_changed("code", $monent['options']['code'], $pconfig['options']['code']);
+ $monent['options'] = array();
+ $monent['options']['path'] = $pconfig['options']['path'];
+ $monent['options']['host'] = $pconfig['options']['host'];
+ $monent['options']['code'] = $pconfig['options']['code'];
+ }
+ if ($pconfig['type'] == "send") {
+ /* log updates, then clear array and reassign - dumb, but easiest way to have a clear array */
+ update_if_changed("send", $monent['options']['send'], $pconfig['options']['send']);
+ update_if_changed("expect", $monent['options']['expect'], $pconfig['options']['expect']);
+ $monent['options'] = array();
+ $monent['options']['send'] = $pconfig['options']['send'];
+ $monent['options']['expect'] = $pconfig['options']['expect'];
+ }
+ if ($pconfig['type'] == "tcp" || $pconfig['type'] == "icmp") {
+ $monent['options'] = array();
+ }
+
+ if (isset($id) && $a_monitor[$id]) {
+ /* modify all pools with this name */
+ for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ if ($config['load_balancer']['lbpool'][$i]['monitor'] == $a_monitor[$id]['name']) {
+ $config['load_balancer']['lbpool'][$i]['monitor'] = $monent['name'];
+ }
+ }
+ $a_monitor[$id] = $monent;
+ } else {
+ $a_monitor[] = $monent;
+ }
+
+ if ($changecount > 0) {
+ /* Mark config dirty */
+ mark_subsystem_dirty('loadbalancer');
+ write_config($changedesc);
+ }
+
+ header("Location: load_balancer_monitor.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Monitor"), gettext("Edit"));
+$shortcut_section = "relayd";
+
+include("head.inc");
+$types = array("icmp" => gettext("ICMP"), "tcp" => gettext("TCP"), "http" => gettext("HTTP"), "https" => gettext("HTTPS"), "send" => gettext("Send/Expect"));
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function updateType(t) {
+ switch (t) {
+<?php
+ /* OK, so this is sick using php to generate javascript, but it needed to be done */
+ foreach ($types as $key => $val) {
+ echo " case \"{$key}\": {\n";
+ $t = $types;
+ foreach ($t as $k => $v) {
+ if ($k != $key) {
+ echo " jQuery('#{$k}').hide();\n";
+ }
+ }
+ echo " }\n";
+ }
+?>
+ }
+ jQuery('#' + t).show();
+}
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="load_balancer_monitor_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="monitor entry">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Load Balancer - Monitor entry"); ?></td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="16" maxlength="16" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <select id="type" name="type">
+<?
+ foreach ($types as $key => $val) {
+ if (isset($pconfig['type']) && $pconfig['type'] == $key) {
+ $selected = " selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value=\"{$key}\" onclick=\"updateType('{$key}');\"{$selected}>{$val}</option>\n";
+ }
+?>
+ </select>
+ </td>
+ </tr>
+ <tr align="left" id="icmp"<?= $pconfig['type'] == "icmp" ? "" : " style=\"display:none;\""?>>
+ <td></td>
+ </tr>
+ <tr align="left" id="tcp"<?= $pconfig['type'] == "tcp" ? "" : " style=\"display:none;\""?>>
+ <td></td>
+ </tr>
+ <tr align="left" id="http"<?= $pconfig['type'] == "http" ? "" : " style=\"display:none;\""?>>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("HTTP"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="http">
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Path"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="http_options_path" type="text" <?if (isset($pconfig['options']['path'])) echo "value=\"" . htmlspecialchars($pconfig['options']['path']) . "\"";?> size="64" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Host"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="http_options_host" type="text" <?if (isset($pconfig['options']['host'])) echo "value=\"" . htmlspecialchars($pconfig['options']['host']) . "\"";?> size="64" /><br /><?=gettext("Hostname for Host: header if needed."); ?>
+ </td>
+ </tr>
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("HTTP Code"); ?></td>
+ <td class="vtable" colspan="2">
+ <?= print_rfc2616_select("http_options_code", $pconfig['options']['code']); ?>
+ </td>
+ </tr>
+<!-- BILLM: XXX not supported digest checking just yet
+ <tr align="left">
+ <td width="22%" valign="top" class="vncell">MD5 Page Digest</td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="digest" type="text" <?if (isset($pconfig['digest'])) echo "value=\"" . htmlspecialchars($pconfig['digest']) . "\"";?>size="32"><br /><b>TODO: add fetch functionality here</b>
+ </td>
+ </tr>
+-->
+ </table>
+ </td>
+ </tr>
+ <tr align="left" id="https"<?= $pconfig['type'] == "https" ? "" : " style=\"display:none;\""?>>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("HTTPS"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="https">
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Path"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="https_options_path" type="text" <?if (isset($pconfig['options']['path'])) echo "value=\"" . htmlspecialchars($pconfig['options']['path']) ."\"";?> size="64" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Host"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="https_options_host" type="text" <?if (isset($pconfig['options']['host'])) echo "value=\"" . htmlspecialchars($pconfig['options']['host']) . "\"";?> size="64" /><br /><?=gettext("Hostname for Host: header if needed."); ?>
+ </td>
+ </tr>
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("HTTP Code"); ?></td>
+ <td class="vtable" colspan="2">
+ <?= print_rfc2616_select("https_options_code", $pconfig['options']['code']); ?>
+ </td>
+ </tr>
+<!-- BILLM: XXX not supported digest checking just yet
+
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq">MD5 Page Digest</td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="digest" type="text" <?if (isset($pconfig['digest'])) echo "value=\"" . htmlspecialchars($pconfig['digest']) . "\"";?>size="32"><br /><b>TODO: add fetch functionality here</b>
+ </td>
+ </tr>
+-->
+ </table>
+ </td>
+ </tr>
+ <tr align="left" id="send"<?= $pconfig['type'] == "send" ? "" : " style=\"display:none;\""?>>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Send/Expect"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="send expect">
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Send string"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="send_options_send" type="text" <?if (isset($pconfig['options']['send'])) echo "value=\"" . htmlspecialchars($pconfig['options']['send']) . "\"";?> size="64" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td valign="top" align="right" class="vtable"><?=gettext("Expect string"); ?></td>
+ <td class="vtable" colspan="2">
+ <input name="send_options_expect" type="text" <?if (isset($pconfig['options']['expect'])) echo "value=\"" . htmlspecialchars($pconfig['options']['expect']) . "\"";?> size="64" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_monitor[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<br />
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_pool.php b/src/usr/local/www/load_balancer_pool.php
new file mode 100644
index 0000000..47f3a89
--- /dev/null
+++ b/src/usr/local/www/load_balancer_pool.php
@@ -0,0 +1,159 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_pool.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-loadbalancer-pool
+##|*NAME=Load Balancer: Pool page
+##|*DESCR=Allow access to the 'Load Balancer: Pool' page.
+##|*MATCH=load_balancer_pool.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['load_balancer']['lbpool'])) {
+ $config['load_balancer']['lbpool'] = array();
+}
+$a_pool = &$config['load_balancer']['lbpool'];
+
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $retval |= relayd_configure();
+
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('loadbalancer');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if (array_key_exists($_GET['id'], $a_pool)) {
+ /* make sure no virtual servers reference this entry */
+ if (is_array($config['load_balancer']['virtual_server'])) {
+ foreach ($config['load_balancer']['virtual_server'] as $vs) {
+ if ($vs['poolname'] == $a_pool[$_GET['id']]['name']) {
+ $input_errors[] = gettext("This entry cannot be deleted because it is still referenced by at least one virtual server.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ unset($a_pool[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('loadbalancer');
+ header("Location: load_balancer_pool.php");
+ exit;
+ }
+ }
+}
+
+/* Index monitor_type array for easy hyperlinking */
+$mondex = array();
+for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
+ $mondex[$config['load_balancer']['monitor_type'][$i]['name']] = $i;
+}
+for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ $a_pool[$i]['monitor'] = "<a href=\"/load_balancer_monitor_edit.php?id={$mondex[$a_pool[$i]['monitor']]}\">" . htmlspecialchars($a_pool[$i]['monitor']) . "</a>";
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Pool"));
+$shortcut_section = "relayd";
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="load_balancer_pool.php" method="post">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
+<?php print_info_box_np(sprintf(gettext("The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect."), "<br />"));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer pools">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), true, "load_balancer_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
+ $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
+ $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+<?php
+ $t = new MainTable();
+ $t->edit_uri('load_balancer_pool_edit.php');
+ $t->my_uri('load_balancer_pool.php');
+ $t->add_column(gettext('Name'), 'name', 10);
+ $t->add_column(gettext('Mode'), 'mode', 10);
+ $t->add_column(gettext('Servers'), 'servers', 15);
+ $t->add_column(gettext('Port'), 'port', 10);
+ $t->add_column(gettext('Monitor'), 'monitor', 10);
+ $t->add_column(gettext('Description'), 'descr', 25);
+ $t->add_button('edit');
+ $t->add_button('dup');
+ $t->add_button('del');
+ $t->add_content_array($a_pool);
+ $t->display();
+?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br />
+ <span class="red"><strong><?=gettext("Hint:");?></strong></span>
+ <br />
+ <?= sprintf(gettext("The Load Balancer in %s 2.0 is for server load balancing, not Multi-WAN. For load balancing or failover for multiple WANs, use "), $g['product_name']);?>
+ <a href="/system_gateway_groups.php"><?= gettext("Gateway Groups"); ?></a>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_pool_edit.php b/src/usr/local/www/load_balancer_pool_edit.php
new file mode 100644
index 0000000..cf5c72f
--- /dev/null
+++ b/src/usr/local/www/load_balancer_pool_edit.php
@@ -0,0 +1,368 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_pool_edit.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-loadbalancer-pool-edit
+##|*NAME=Load Balancer: Pool: Edit page
+##|*DESCR=Allow access to the 'Load Balancer: Pool: Edit' page.
+##|*MATCH=load_balancer_pool_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require_once("util.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_pool.php');
+}
+
+if (!is_array($config['load_balancer']['lbpool'])) {
+ $config['load_balancer']['lbpool'] = array();
+}
+$a_pool = &$config['load_balancer']['lbpool'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_pool[$id]) {
+ $pconfig['name'] = $a_pool[$id]['name'];
+ $pconfig['mode'] = $a_pool[$id]['mode'];
+ $pconfig['descr'] = $a_pool[$id]['descr'];
+ $pconfig['port'] = $a_pool[$id]['port'];
+ $pconfig['retry'] = $a_pool[$id]['retry'];
+ $pconfig['servers'] = &$a_pool[$id]['servers'];
+ $pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled'];
+ $pconfig['monitor'] = $a_pool[$id]['monitor'];
+}
+
+$changedesc = gettext("Load Balancer: Pool:") . " ";
+$changecount = 0;
+
+if ($_POST) {
+ $changecount++;
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "name mode port monitor servers");
+ $reqdfieldsn = array(gettext("Name"), gettext("Mode"), gettext("Port"), gettext("Monitor"), gettext("Server List"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* Ensure that our pool names are unique */
+ for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ if (($_POST['name'] == $config['load_balancer']['lbpool'][$i]['name']) && ($i != $id)) {
+ $input_errors[] = gettext("This pool name has already been used. Pool names must be unique.");
+ }
+ }
+
+ if (preg_match('/[ \/]/', $_POST['name'])) {
+ $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
+ }
+
+ if (strlen($_POST['name']) > 16) {
+ $input_errors[] = gettext("The 'name' field must be 16 characters or less.");
+ }
+
+ if (in_array($_POST['name'], $reserved_table_names)) {
+ $input_errors[] = sprintf(gettext("The name '%s' is a reserved word and cannot be used."), $_POST['name']);
+ }
+
+ if (is_alias($_POST['name'])) {
+ $input_errors[] = sprintf(gettext("Sorry, an alias is already named %s."), $_POST['name']);
+ }
+
+ if (!is_portoralias($_POST['port'])) {
+ $input_errors[] = gettext("The port must be an integer between 1 and 65535, or a port alias.");
+ }
+
+ // May as well use is_port as we want a positive integer and such.
+ if (!empty($_POST['retry']) && !is_port($_POST['retry'])) {
+ $input_errors[] = gettext("The retry value must be an integer between 1 and 65535.");
+ }
+
+ if (is_array($_POST['servers'])) {
+ foreach ($pconfig['servers'] as $svrent) {
+ if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) {
+ $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."), $svrent);
+ } else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) {
+ $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."), $svrent);
+ }
+ }
+ }
+ if (is_array($_POST['serversdisabled'])) {
+ foreach ($pconfig['serversdisabled'] as $svrent) {
+ if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) {
+ $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."), $svrent);
+ } else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) {
+ $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."), $svrent);
+ }
+ }
+ }
+ $m = array();
+ for ($i = 0; isset($config['load_balancer']['monitor_type'][$i]); $i++) {
+ $m[$config['load_balancer']['monitor_type'][$i]['name']] = $config['load_balancer']['monitor_type'][$i];
+ }
+
+ if (!isset($m[$_POST['monitor']])) {
+ $input_errors[] = gettext("Invalid monitor chosen.");
+ }
+
+ if (!$input_errors) {
+ $poolent = array();
+ if (isset($id) && $a_pool[$id]) {
+ $poolent = $a_pool[$id];
+ }
+ if ($poolent['name'] != "") {
+ $changedesc .= sprintf(gettext(" modified '%s' pool:"), $poolent['name']);
+ }
+
+ update_if_changed("name", $poolent['name'], $_POST['name']);
+ update_if_changed("mode", $poolent['mode'], $_POST['mode']);
+ update_if_changed("description", $poolent['descr'], $_POST['descr']);
+ update_if_changed("port", $poolent['port'], $_POST['port']);
+ update_if_changed("retry", $poolent['retry'], $_POST['retry']);
+ update_if_changed("servers", $poolent['servers'], $_POST['servers']);
+ update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']);
+ update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']);
+
+ if (isset($id) && $a_pool[$id]) {
+ /* modify all virtual servers with this name */
+ for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
+ if ($config['load_balancer']['virtual_server'][$i]['lbpool'] == $a_pool[$id]['name']) {
+ $config['load_balancer']['virtual_server'][$i]['lbpool'] = $poolent['name'];
+ }
+ }
+ $a_pool[$id] = $poolent;
+ } else {
+ $a_pool[] = $poolent;
+ }
+
+ if ($changecount > 0) {
+ /* Mark pool dirty */
+ mark_subsystem_dirty('loadbalancer');
+ write_config($changedesc);
+ }
+
+ header("Location: load_balancer_pool.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Pool"), gettext("Edit"));
+$shortcut_section = "relayd";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function clearcombo() {
+ for (var i = document.iform.serversSelect.options.length - 1; i >= 0; i--) {
+ document.iform.serversSelect.options[i] = null;
+ }
+ document.iform.serversSelect.selectedIndex = -1;
+}
+//]]>
+</script>
+
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="load_balancer_pool_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="load balancer pool entry">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Add/edit Load Balancer - Pool entry"); ?></td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="16" maxlength="16" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <select id="mode" name="mode" onchange="enforceFailover(); checkPoolControls();">
+ <option value="loadbalance" <?if (!isset($pconfig['mode']) || ($pconfig['mode'] == "loadbalance")) echo "selected=\"selected\"";?>><?=gettext("Load Balance");?></option>
+ <option value="failover" <?if ($pconfig['mode'] == "failover") echo "selected=\"selected\"";?>><?=gettext("Manual Failover");?></option>
+ </select>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
+ </td>
+ </tr>
+
+ <tr align="left">
+ <td width="22%" valign="top" id="monitorport_text" class="vncellreq"><?=gettext("Port"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input class="formfldalias" id="port" name="port" type="text" <?if (isset($pconfig['port'])) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> size="16" maxlength="16" /><br />
+ <div id="monitorport_desc">
+ <?=gettext("This is the port your servers are listening on."); ?><br />
+ <?=gettext("You may also specify a port alias listed in Firewall -&gt; Aliases here."); ?>
+ </div>
+ <script type="text/javascript">
+ //<![CDATA[
+ var addressarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("port"), new StateSuggestions(addressarray));
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" id="retry_text" class="vncell"><?=gettext("Retry"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="retry" type="text" <?if (isset($pconfig['retry'])) echo "value=\"" . htmlspecialchars($pconfig['retry']) . "\"";?> size="16" maxlength="16" /><br />
+ <div id="retry_desc"><?=gettext("Optionally specify how many times to retry checking a server before declaring it down."); ?></div>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Add item to pool"); ?></td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Monitor"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <?php if (count($config['load_balancer']['monitor_type'])): ?>
+ <select id="monitor" name="monitor">
+ <?php
+ foreach ($config['load_balancer']['monitor_type'] as $monitor) {
+ if ($monitor['name'] == $pconfig['monitor']) {
+ $selected=" selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value=\"{$monitor['name']}\"{$selected}>{$monitor['name']}</option>";
+ }
+ ?>
+ </select>
+ <?php else: ?>
+ <b><?=gettext("NOTE"); ?>:</b> <?=gettext("Please add a monitor IP address on the monitors tab if you wish to use this feature."); ?>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server IP Address"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="ipaddr" type="text" size="16" style="float: left;" />
+ <input class="formbtn" type="button" name="button1" value="<?=gettext("Add to pool"); ?>" onclick="AddServerToPool(document.iform); enforceFailover(); checkPoolControls();" /><br />
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Current Pool Members"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Members"); ?></td>
+ <td width="78%" class="vtable" colspan="2" valign="top">
+ <table summary="members">
+ <tbody>
+ <tr>
+ <td align="center">
+ <b><?=gettext("Pool Disabled"); ?></b>
+ <br/>
+ <select id="serversDisabledSelect" name="serversdisabled[]" multiple="multiple" size="5">
+<?php
+ if (is_array($pconfig['serversdisabled'])) {
+ foreach ($pconfig['serversdisabled'] as $svrent) {
+ if ($svrent != '') echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
+ }
+ }
+?>
+ </select>
+ <input class="formbtn" type="button" name="removeDisabled" value="<?=gettext("Remove"); ?>" onclick="RemoveServerFromPool(document.iform, 'serversdisabled[]');" />
+ </td>
+
+ <td valign="middle">
+ <input class="formbtn" type="button" id="moveToEnabled" name="moveToEnabled" value=">" onclick="moveOptions(document.iform.serversDisabledSelect, document.iform.serversSelect); checkPoolControls();" /><br />
+ <input class="formbtn" type="button" id="moveToDisabled" name="moveToDisabled" value="<" onclick="moveOptions(document.iform.serversSelect, document.iform.serversDisabledSelect); checkPoolControls();" />
+ </td>
+
+ <td align="center">
+ <b><?=gettext("Enabled (default)"); ?></b>
+ <br/>
+ <select id="serversSelect" name="servers[]" multiple="multiple" size="5">
+<?php
+ if (is_array($pconfig['servers'])) {
+ foreach ($pconfig['servers'] as $svrent) {
+ echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
+ }
+ }
+?>
+ </select>
+ <input class="formbtn" type="button" name="removeEnabled" value="<?=gettext("Remove"); ?>" onclick="RemoveServerFromPool(document.iform, 'servers[]');" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <br />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="AllServers('serversSelect', true); AllServers('serversDisabledSelect', true);" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_pool[$id] && $_GET['act'] != 'dup'): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<br />
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_setting.php b/src/usr/local/www/load_balancer_setting.php
new file mode 100644
index 0000000..d82f341
--- /dev/null
+++ b/src/usr/local/www/load_balancer_setting.php
@@ -0,0 +1,173 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_setting.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2008 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2012 Pierre POMES <pierre.pomes@gmail.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-services-loadbalancer-setting
+##|*NAME=Services: Load Balancer: setting page
+##|*DESCR=Allow access to the 'Settings: Load Balancer: Settings' page.
+##|*MATCH=load_balancer_setting.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("util.inc");
+
+if (!is_array($config['load_balancer']['setting'])) {
+ $config['load_balancer']['setting'] = array();
+}
+$lbsetting = &$config['load_balancer']['setting'];
+
+if ($_POST) {
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $retval |= relayd_configure();
+
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('loadbalancer');
+ } else {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) {
+ $input_errors[] = gettext("Timeout must be a numeric value");
+ }
+
+ if ($_POST['interval'] && !is_numeric($_POST['interval'])) {
+ $input_errors[] = gettext("Interval must be a numeric value");
+ }
+
+ if ($_POST['prefork']) {
+ if (!is_numeric($_POST['prefork'])) {
+ $input_errors[] = gettext("Prefork must be a numeric value");
+ } else {
+ if (($_POST['prefork'] <= 0) || ($_POST['prefork'] > 32)) {
+ $input_errors[] = gettext("Prefork value must be between 1 and 32");
+ }
+ }
+ }
+
+ /* update config if user entry is valid */
+ if (!$input_errors) {
+ $lbsetting['timeout'] = $_POST['timeout'];
+ $lbsetting['interval'] = $_POST['interval'];
+ $lbsetting['prefork'] = $_POST['prefork'];
+
+ write_config();
+ mark_subsystem_dirty('loadbalancer');
+ }
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Settings"));
+$shortcut_section = "relayd";
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="load_balancer_setting.php" method="post">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
+<?php print_info_box_np(gettext("The load balancer configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer settings">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), false, "load_balancer_virtual_server.php");
+ $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
+ $tab_array[] = array(gettext("Settings"), true, "load_balancer_setting.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Relayd global settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("timeout") ; ?></td>
+ <td width="78%" class="vtable">
+ <input name="timeout" id="timeout" value="<?php if ($lbsetting['timeout'] <> "") echo $lbsetting['timeout']; ?>" class="formfld unknown" />
+ <br />
+ <?=gettext("Set the global timeout in milliseconds for checks. Leave blank to use the default value of 1000 ms "); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("interval") ; ?></td>
+ <td width="78%" class="vtable">
+ <input name="interval" id="interval" value="<?php if ($lbsetting['interval'] <> "") echo $lbsetting['interval']; ?>" class="formfld unknown" />
+ <br />
+ <?=gettext("Set the interval in seconds at which the member of a pool will be checked. Leave blank to use the default interval of 10 seconds"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("prefork") ; ?></td>
+ <td width="78%" class="vtable">
+ <input name="prefork" id="prefork" value="<?php if ($lbsetting['prefork'] <> "") echo $lbsetting['prefork']; ?>" class="formfld unknown" />
+ <br />
+ <?=gettext("Number of processes used by relayd for dns protocol. Leave blank to use the default value of 5 processes"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_virtual_server.php b/src/usr/local/www/load_balancer_virtual_server.php
new file mode 100644
index 0000000..dec55f1
--- /dev/null
+++ b/src/usr/local/www/load_balancer_virtual_server.php
@@ -0,0 +1,152 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_virtual_server.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-services-loadbalancer-virtualservers
+##|*NAME=Services: Load Balancer: Virtual Servers page
+##|*DESCR=Allow access to the 'Services: Load Balancer: Virtual Servers' page.
+##|*MATCH=load_balancer_virtual_server.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("vslb.inc");
+
+if (!is_array($config['load_balancer']['virtual_server'])) {
+ $config['load_balancer']['virtual_server'] = array();
+}
+$a_vs = &$config['load_balancer']['virtual_server'];
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $retval |= relayd_configure();
+ $savemsg = get_std_save_message($retval);
+ /* Wipe out old relayd anchors no longer in use. */
+ cleanup_lb_marked();
+ clear_subsystem_dirty('loadbalancer');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if (array_key_exists($_GET['id'], $a_vs)) {
+
+ if (!$input_errors) {
+ cleanup_lb_mark_anchor($a_vs[$_GET['id']]['name']);
+ unset($a_vs[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('loadbalancer');
+ header("Location: load_balancer_virtual_server.php");
+ exit;
+ }
+ }
+}
+
+/* Index lbpool array for easy hyperlinking */
+$poodex = array();
+for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ $poodex[$config['load_balancer']['lbpool'][$i]['name']] = $i;
+}
+for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
+ if ($a_vs[$i]) {
+ $a_vs[$i]['poolname'] = "<a href=\"/load_balancer_pool_edit.php?id={$poodex[$a_vs[$i]['poolname']]}\">" . htmlspecialchars($a_vs[$i]['poolname']) . "</a>";
+ if ($a_vs[$i]['sitedown'] != '') {
+ $a_vs[$i]['sitedown'] = "<a href=\"/load_balancer_pool_edit.php?id={$poodex[$a_vs[$i]['sitedown']]}\">" . htmlspecialchars($a_vs[$i]['sitedown']) . "</a>";
+ } else {
+ $a_vs[$i]['sitedown'] = 'none';
+ }
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Virtual Servers"));
+$shortcut_section = "relayd-virtualservers";
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="load_balancer_virtual_server.php" method="post">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
+<?php print_info_box_np(gettext("The virtual server configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="load balancer virtual server">
+ <tr><td class="tabnavtbl">
+<?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), false, "load_balancer_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), true, "load_balancer_virtual_server.php");
+ $tab_array[] = array(gettext("Monitors"), false, "load_balancer_monitor.php");
+ $tab_array[] = array(gettext("Settings"), false, "load_balancer_setting.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+<?php
+ $t = new MainTable();
+ $t->edit_uri('load_balancer_virtual_server_edit.php');
+ $t->my_uri('load_balancer_virtual_server.php');
+ $t->add_column(gettext('Name'), 'name', 10);
+ $t->add_column(gettext('Protocol'), 'relay_protocol', 10);
+ $t->add_column(gettext('IP Address'), 'ipaddr', 15);
+ $t->add_column(gettext('Port'), 'port', 10);
+ $t->add_column(gettext('Pool'), 'poolname', 15);
+ $t->add_column(gettext('Fall Back Pool'), 'sitedown', 15);
+ $t->add_column(gettext('Description'), 'descr', 30);
+ $t->add_button('edit');
+ $t->add_button('dup');
+ $t->add_button('del');
+ $t->add_content_array($a_vs);
+ $t->display();
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/load_balancer_virtual_server_edit.php b/src/usr/local/www/load_balancer_virtual_server_edit.php
new file mode 100644
index 0000000..39bc6c9
--- /dev/null
+++ b/src/usr/local/www/load_balancer_virtual_server_edit.php
@@ -0,0 +1,315 @@
+<?php
+/* $Id$ */
+/*
+ load_balancer_virtual_server_edit.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005-2008 Bill Marquette <bill.marquette@gmail.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-loadbalancer-virtualserver-edit
+##|*NAME=Load Balancer: Virtual Server: Edit page
+##|*DESCR=Allow access to the 'Load Balancer: Virtual Server: Edit' page.
+##|*MATCH=load_balancer_virtual_server_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_virtual_server.php');
+}
+
+if (!is_array($config['load_balancer']['virtual_server'])) {
+ $config['load_balancer']['virtual_server'] = array();
+}
+$a_vs = &$config['load_balancer']['virtual_server'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_vs[$id]) {
+ $pconfig = $a_vs[$id];
+} else {
+ // Sane defaults
+ $pconfig['mode'] = 'redirect_mode';
+}
+
+$changedesc = gettext("Load Balancer: Virtual Server:") . " ";
+$changecount = 0;
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ switch ($pconfig['mode']) {
+ case "redirect_mode": {
+ $reqdfields = explode(" ", "ipaddr name mode");
+ $reqdfieldsn = array(gettext("IP Address"), gettext("Name"), gettext("Mode"));
+ break;
+ }
+ case "relay_mode": {
+ $reqdfields = explode(" ", "ipaddr name mode relay_protocol");
+ $reqdfieldsn = array(gettext("IP Address"), gettext("Name"), gettext("Mode"), gettext("Relay Protocol"));
+ break;
+ }
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) {
+ if (($_POST['name'] == $config['load_balancer']['virtual_server'][$i]['name']) && ($i != $id)) {
+ $input_errors[] = gettext("This virtual server name has already been used. Virtual server names must be unique.");
+ }
+ }
+
+ if (preg_match('/[ \/]/', $_POST['name'])) {
+ $input_errors[] = gettext("You cannot use spaces or slashes in the 'name' field.");
+ }
+
+ if (strlen($_POST['name']) > 32) {
+ $input_errors[] = gettext("The 'name' field must be 32 characters or less.");
+ }
+
+ if ($_POST['port'] != "" && !is_portoralias($_POST['port'])) {
+ $input_errors[] = gettext("The port must be an integer between 1 and 65535, a port alias, or left blank.");
+ }
+
+ if (!is_ipaddroralias($_POST['ipaddr']) && !is_subnetv4($_POST['ipaddr'])) {
+ $input_errors[] = sprintf(gettext("%s is not a valid IP address, IPv4 subnet, or alias."), $_POST['ipaddr']);
+ } else if (is_subnetv4($_POST['ipaddr']) && subnet_size($_POST['ipaddr']) > 64) {
+ $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses."), $_POST['ipaddr']);
+ }
+
+ if ((strtolower($_POST['relay_protocol']) == "dns") && !empty($_POST['sitedown'])) {
+ $input_errors[] = gettext("You cannot select a Fall Back Pool when using the DNS relay protocol.");
+ }
+
+ if (!$input_errors) {
+ $vsent = array();
+ if (isset($id) && $a_vs[$id]) {
+ $vsent = $a_vs[$id];
+ }
+ if ($vsent['name'] != "") {
+ $changedesc .= " " . sprintf(gettext("modified '%s' vs:"), $vsent['name']);
+ } else {
+ $changedesc .= " " . sprintf(gettext("created '%s' vs:"), $_POST['name']);
+ }
+
+ update_if_changed("name", $vsent['name'], $_POST['name']);
+ update_if_changed("descr", $vsent['descr'], $_POST['descr']);
+ update_if_changed("poolname", $vsent['poolname'], $_POST['poolname']);
+ update_if_changed("port", $vsent['port'], $_POST['port']);
+ update_if_changed("sitedown", $vsent['sitedown'], $_POST['sitedown']);
+ update_if_changed("ipaddr", $vsent['ipaddr'], $_POST['ipaddr']);
+ update_if_changed("mode", $vsent['mode'], $_POST['mode']);
+ update_if_changed("relay protocol", $vsent['relay_protocol'], $_POST['relay_protocol']);
+
+ if ($_POST['sitedown'] == "") {
+ unset($vsent['sitedown']);
+ }
+
+ if (isset($id) && $a_vs[$id]) {
+ if ($a_vs[$id]['name'] != $_POST['name']) {
+ /* Because the VS name changed, mark the old name for cleanup. */
+ cleanup_lb_mark_anchor($a_vs[$id]['name']);
+ }
+ $a_vs[$id] = $vsent;
+ } else {
+ $a_vs[] = $vsent;
+ }
+
+ if ($changecount > 0) {
+ /* Mark virtual server dirty */
+ mark_subsystem_dirty('loadbalancer');
+ write_config($changedesc);
+ }
+
+ header("Location: load_balancer_virtual_server.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Load Balancer"), gettext("Virtual Server"), gettext("Edit"));
+$shortcut_section = "relayd-virtualservers";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="load_balancer_virtual_server_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="load balancer server entry">
+ <tr>
+ <td colspan="3" valign="top" class="listtopic"><?=gettext("Edit Load Balancer - Virtual Server entry"); ?></td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="name" type="text" <?if (isset($pconfig['name'])) echo "value=\"" . htmlspecialchars($pconfig['name']) . "\"";?> size="32" maxlength="32" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input name="descr" type="text" <?if (isset($pconfig['descr'])) echo "value=\"" . htmlspecialchars($pconfig['descr']) . "\"";?> size="64" />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP Address"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input class="formfldalias" id="ipaddr" name="ipaddr" type="text" <?if (isset($pconfig['ipaddr'])) echo "value=\"" . htmlspecialchars($pconfig['ipaddr']) . "\"";?> size="39" maxlength="39" />
+ <br /><?=gettext("This is normally the WAN IP address that you would like the server to listen on. All connections to this IP and port will be forwarded to the pool cluster."); ?>
+ <br /><?=gettext("You may also specify a host alias listed in Firewall -&gt; Aliases here."); ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ var host_aliases = <?= json_encode(get_alias_list(array("host", "network", "url", "urltable"))) ?>;
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("ipaddr"), new StateSuggestions(host_aliases));
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Port"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <input class="formfldalias" name="port" id="port" type="text" <?if (isset($pconfig['port'])) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> size="16" maxlength="16" />
+ <br /><?=gettext("This is the port that the clients will connect to. All connections to this port will be forwarded to the pool cluster."); ?>
+ <br /><?=gettext("If left blank, listening ports from the pool will be used."); ?>
+ <br /><?=gettext("You may also specify a port alias listed in Firewall -&gt; Aliases here."); ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ var port_aliases = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>;
+ var oTextbox2 = new AutoSuggestControl(document.getElementById("port"), new StateSuggestions(port_aliases));
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Virtual Server Pool"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <?php if (count($config['load_balancer']['lbpool']) == 0): ?>
+ <b><?=gettext("NOTE:"); ?></b> <?=gettext("Please add a pool on the Pools tab to use this feature."); ?>
+ <?php else: ?>
+ <select id="poolname" name="poolname">
+ <?php
+ for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ $selected = "";
+ if ($config['load_balancer']['lbpool'][$i]['name'] == $pconfig['poolname']) {
+ $selected = " selected=\"selected\"";
+ }
+ echo "<option value=\"" . htmlspecialchars($config['load_balancer']['lbpool'][$i]['name']) . "\"{$selected}>{$config['load_balancer']['lbpool'][$i]['name']}</option>";
+ }
+ ?>
+ </select>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Fall Back Pool"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <?php if (count($config['load_balancer']['lbpool']) == 0): ?>
+ <b><?=gettext("NOTE:"); ?></b> <?=gettext("Please add a pool on the Pools tab to use this feature."); ?>
+ <?php else: ?>
+ <select id="sitedown" name="sitedown">
+ <option value=""<?=htmlspecialchars($pconfig['sitedown']) == '' ? ' selected' : ''?>><?=gettext("none"); ?></option>
+ <?php
+ for ($i = 0; isset($config['load_balancer']['lbpool'][$i]); $i++) {
+ $selected = "";
+ if ($config['load_balancer']['lbpool'][$i]['name'] == $pconfig['sitedown']) {
+ $selected = " selected=\"selected\"";
+ }
+ echo "<option value=\"" . htmlspecialchars($config['load_balancer']['lbpool'][$i]['name']) . "\"{$selected}>{$config['load_balancer']['lbpool'][$i]['name']}</option>";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("The server pool to which clients will be redirected if *ALL* servers in the Virtual Server Pool are offline."); ?>
+ <br /><?=gettext("This option is NOT compatible with the DNS relay protocol."); ?>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr style="display:none;"><td><input type="hidden" name="mode" value="redirect_mode" /></td></tr>
+<!--
+ <tr align="left">
+ <td width="22%" valign="top" class="vncellreq">Mode</td>
+ <td width="78%" class="vtable" colspan="2">
+ <input id="redirect_mode" type="radio" name="mode" value="redirect"<?=htmlspecialchars($pconfig['mode']) == 'redirect' ? ' checked="checked"': ''?> /> Redirect
+ <input id="relay_mode" type="radio" name="mode" value="relay"<?=htmlspecialchars($pconfig['mode']) == 'relay' ? ' checked="checked"': ''?> /> Relay
+ <br />
+ </td>
+ </tr>
+-->
+ <tr id="relay" align="left">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Relay Protocol"); ?></td>
+ <td width="78%" class="vtable" colspan="2">
+ <select id="relay_protocol" name="relay_protocol">
+ <?php
+ $lb_def_protos = array("tcp", "dns");
+ foreach ($lb_def_protos as $lb_proto) {
+ $selected = "";
+ if ($pconfig['relay_protocol'] == $lb_proto) {
+ $selected = " selected=\"selected\"";
+ }
+ echo "<option value=\"{$lb_proto}\"{$selected}>{$lb_proto}</option>";
+ }
+ ?>
+ </select>
+ <br />
+ </td>
+ </tr>
+ <tr align="left">
+ <td width="22%" valign="top">&nbsp;</td>
+ <td align="left" valign="bottom" width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_vs[$id] && $_GET['act'] != 'dup'): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<br />
+<span class="red"><strong><?=gettext("Note:"); ?></strong></span> <?=gettext("Don't forget to add a firewall rule for the virtual server/pool after you're finished setting it up."); ?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/logobig.jpg b/src/usr/local/www/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/niftycssCode.css b/src/usr/local/www/niftycssCode.css
new file mode 100755
index 0000000..ec4af80
--- /dev/null
+++ b/src/usr/local/www/niftycssCode.css
@@ -0,0 +1,21 @@
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 0px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px} \ No newline at end of file
diff --git a/src/usr/local/www/niftycssprintCode.css b/src/usr/local/www/niftycssprintCode.css
new file mode 100755
index 0000000..e856b5b
--- /dev/null
+++ b/src/usr/local/www/niftycssprintCode.css
@@ -0,0 +1 @@
+.rtop,.rbottom,.artop,.arbottom{display: none}
diff --git a/src/usr/local/www/pkg.php b/src/usr/local/www/pkg.php
new file mode 100755
index 0000000..c56ece5
--- /dev/null
+++ b/src/usr/local/www/pkg.php
@@ -0,0 +1,582 @@
+<?php
+/* $Id$ */
+/*
+ pkg.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-package-settings
+##|*NAME=Package: Settings page
+##|*DESCR=Allow access to the 'Package: Settings' page.
+##|*MATCH=pkg.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("pkg-utils.inc");
+
+function gentitle_pkg($pgname) {
+ global $config;
+ return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
+}
+
+function domTT_title($title_msg) {
+ print "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '".gettext($title_msg)."', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
+}
+
+$xml = $_REQUEST['xml'];
+
+if ($xml == "") {
+ print_info_box_np(gettext("ERROR: No package defined."));
+ exit;
+} else {
+ if (file_exists("/usr/local/pkg/" . $xml)) {
+ $pkg = parse_xml_config_pkg("/usr/local/pkg/" . $xml, "packagegui");
+ } else {
+ echo "File not found " . htmlspecialchars($xml);
+ exit;
+ }
+}
+
+if ($pkg['donotsave'] <> "") {
+ header("Location: pkg_edit.php?xml=" . $xml);
+ exit;
+}
+
+if ($pkg['include_file'] != "") {
+ require_once($pkg['include_file']);
+}
+
+$package_name = $pkg['menu'][0]['name'];
+$section = $pkg['menu'][0]['section'];
+$config_path = $pkg['configpath'];
+$title = $pkg['title'];
+
+if ($_REQUEST['startdisplayingat']) {
+ $startdisplayingat = $_REQUEST['startdisplayingat'];
+}
+
+if ($_REQUEST['display_maximum_rows']) {
+ if ($_REQUEST['display_maximum_rows']) {
+ $display_maximum_rows = $_REQUEST['display_maximum_rows'];
+ }
+}
+
+$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
+
+if ($_GET['act'] == "update") {
+
+ if (is_array($config['installedpackages'][$pkg['name']]) && $pkg['name'] != "" && $_REQUEST['ids'] !="") {
+ #get current values
+ $current_values=$config['installedpackages'][$pkg['name']]['config'];
+ #get updated ids
+ parse_str($_REQUEST['ids'], $update_list);
+ #sort ids to know what to change
+ #useful to do not lose data when using sorting and paging
+ $sort_list=$update_list['ids'];
+ sort($sort_list);
+ #apply updates
+ foreach ($update_list['ids'] as $key=> $value) {
+ $config['installedpackages'][$pkg['name']]['config'][$sort_list[$key]]=$current_values[$update_list['ids'][$key]];
+ }
+ #save current config
+ write_config();
+ #sync package
+ eval ("{$pkg['custom_php_resync_config_command']}");
+ }
+ #function called via jquery, no need to continue after save changes.
+ exit;
+}
+if ($_GET['act'] == "del") {
+ // loop through our fieldnames and automatically setup the fieldnames
+ // in the environment. ie: a fieldname of username with a value of
+ // testuser would automatically eval $username = "testuser";
+ foreach ($evaledvar as $ip) {
+ if ($pkg['adddeleteeditpagefields']['columnitem']) {
+ foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
+ ${xml_safe_fieldname($column['fielddescr'])} = $ip[xml_safe_fieldname($column['fieldname'])];
+ }
+ }
+ }
+
+ $a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
+
+ if ($a_pkg[$_GET['id']]) {
+ unset($a_pkg[$_GET['id']]);
+ write_config();
+ if ($pkg['custom_delete_php_command'] <> "") {
+ if ($pkg['custom_php_command_before_form'] <> "") {
+ eval($pkg['custom_php_command_before_form']);
+ }
+ eval($pkg['custom_delete_php_command']);
+ }
+ header("Location: pkg.php?xml=" . $xml);
+ exit;
+ }
+}
+
+ob_start();
+
+$iflist = get_configured_interface_with_descr(false, true);
+$evaledvar = $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
+
+if ($pkg['custom_php_global_functions'] <> "") {
+ eval($pkg['custom_php_global_functions']);
+}
+
+if ($pkg['custom_php_command_before_form'] <> "") {
+ eval($pkg['custom_php_command_before_form']);
+}
+
+$pgtitle = array($title);
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
+<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
+<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
+<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+ function setFilter(filtertext) {
+ jQuery('#pkg_filter').val(filtertext);
+ document.pkgform.submit();
+ }
+
+ <?php
+ if ($pkg['adddeleteeditpagefields']['movable']) {
+ ?>
+ jQuery(document).ready(function() {
+ jQuery('#mainarea table tbody').sortable({
+ items: 'tr.sortable',
+ cursor: 'move',
+ distance: 10,
+ opacity: 0.8,
+ helper: function(e, ui) {
+ ui.children().each(function() {
+ jQuery(this).width(jQuery(this).width());
+ });
+ return ui;
+ },
+ });
+ });
+ function save_changes_to_xml(xml) {
+ var ids=jQuery('#mainarea table tbody').sortable('serialize', {key:"ids[]"});
+ var strloading="<img src='/themes/<?= $g['theme']; ?>/images/misc/loader.gif' alt='loader' /> " + "<?=gettext('Saving changes...');?>";
+ if (confirm("<?=gettext("Do you really want to save changes?");?>")) {
+ jQuery.ajax({
+ type: 'get',
+ cache: false,
+ url: "<?=$_SERVER['SCRIPT_NAME'];?>",
+ data: {xml:'<?=$xml?>', act:'update', ids: ids},
+ beforeSend: function() {
+ jQuery('#savemsg').empty().html(strloading);
+ },
+ error: function(data) {
+ jQuery('#savemsg').empty().html('Error:' + data);
+ },
+ success: function(data) {
+ jQuery('#savemsg').empty().html(data);
+ }
+ });
+ }
+ }
+ <?php
+ }
+ ?>
+//]]>
+</script>
+<form action="pkg.php" name="pkgform" method="get">
+<input type='hidden' name='xml' value='<?=$_REQUEST['xml']?>' />
+<?php if ($_GET['savemsg'] <> "") $savemsg = htmlspecialchars($_GET['savemsg']); ?>
+<div id="savemsg"></div>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package settings">
+<?php
+ if ($pkg['tabs'] <> "") {
+ $tab_array = array();
+ foreach ($pkg['tabs']['tab'] as $tab) {
+ if ($tab['tab_level']) {
+ $tab_level = $tab['tab_level'];
+ } else {
+ $tab_level = 1;
+ }
+ if (isset($tab['active'])) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ if (isset($tab['no_drop_down'])) {
+ $no_drop_down = true;
+ }
+ $urltmp = "";
+ if ($tab['url'] <> "") {
+ $urltmp = $tab['url'];
+ }
+ if ($tab['xml'] <> "") {
+ $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
+ }
+
+ $addresswithport = getenv("HTTP_HOST");
+ $colonpos = strpos($addresswithport, ":");
+ if ($colonpos !== False) {
+ //my url is actually just the IP address of the pfsense box
+ $myurl = substr($addresswithport, 0, $colonpos);
+ } else {
+ $myurl = $addresswithport;
+ }
+ // eval url so that above $myurl item can be processed if need be.
+ $url = str_replace('$myurl', $myurl, $urltmp);
+
+ $tab_array[$tab_level][] = array(
+ $tab['text'],
+ $active,
+ $url
+ );
+ }
+
+ ksort($tab_array);
+ foreach ($tab_array as $tab) {
+ echo '<tr><td>';
+ display_top_tabs($tab, $no_drop_down);
+ echo '</td></tr>';
+ }
+ }
+?>
+<tr><td><div id="mainarea"><table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabs">
+<?php
+ /* Handle filtering bar A-Z */
+ $include_filtering_inputbox = false;
+ $colspan = 0;
+ if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
+ foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
+ $colspan++;
+ }
+ }
+ if ($pkg['fields']['field']) {
+ // First find the sorting type field if it exists
+ foreach ($pkg['fields']['field'] as $field) {
+ if ($field['type'] == "sorting") {
+ if (isset($field['include_filtering_inputbox'])) {
+ $include_filtering_inputbox = true;
+ }
+ if ($display_maximum_rows < 1) {
+ if ($field['display_maximum_rows']) {
+ $display_maximum_rows = $field['display_maximum_rows'];
+ }
+ }
+ echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
+ echo "Filter by: ";
+ $isfirst = true;
+ for ($char = 65; $char < 91; $char++) {
+ if (!$isfirst) {
+ echo " | ";
+ }
+ echo "<a href=\"#\" onclick=\"setFilter('" . chr($char) . "');\">" . chr($char) . "</a>";
+ $isfirst = false;
+ }
+ echo "</td></tr>";
+ echo "<tr><td class='listhdrr' colspan='$colspan' align='center'>";
+ if ($field['sortablefields']) {
+ echo "Filter field: <select name='pkg_filter_type'>";
+ foreach ($field['sortablefields']['item'] as $si) {
+ if ($si['name'] == $_REQUEST['pkg_filter_type']) {
+ $SELECTED = "selected=\"selected\"";
+ } else {
+ $SELECTED = "";
+ }
+ echo "<option value='{$si['name']}' {$SELECTED}>{$si['name']}</option>";
+ }
+ echo "</select>";
+ }
+ if ($include_filtering_inputbox) {
+ echo "&nbsp;&nbsp;Filter text: <input id='pkg_filter' name='pkg_filter' value='" . $_REQUEST['pkg_filter'] . "' /> <input type='submit' value='Filter' />";
+ }
+ echo "</td></tr><tr><td><font size='-3'>&nbsp;</font></td></tr>";
+ }
+ }
+ }
+?>
+ <tr>
+<?php
+ if ($display_maximum_rows) {
+ $totalpages = ceil(round((count($evaledvar) / $display_maximum_rows), 9));
+ $page = 1;
+ $tmpcount = 0;
+ $tmppp = 0;
+ if (is_array($evaledvar)) {
+ foreach ($evaledvar as $ipa) {
+ if ($tmpcount == $display_maximum_rows) {
+ $page++;
+ $tmpcount = 0;
+ }
+ if ($tmppp == $startdisplayingat) {
+ break;
+ }
+ $tmpcount++;
+ $tmppp++;
+ }
+ }
+ echo "<tr><td colspan='" . count($pkg['adddeleteeditpagefields']['columnitem']) . "'>";
+ echo "<table width='100%' summary=''>";
+ echo "<tr>";
+ echo "<td align='left'>Displaying page $page of $totalpages</b></td>";
+ echo "<td align='right'>Rows per page: <select onchange='document.pkgform.submit();' name='display_maximum_rows'>";
+ for ($x = 0; $x < 250; $x++) {
+ if ($x == $display_maximum_rows) {
+ $SELECTED = "selected=\"selected\"";
+ } else {
+ $SELECTED = "";
+ }
+ echo "<option value='$x' $SELECTED>$x</option>\n";
+ $x = $x + 4;
+ }
+ echo "</select></td></tr>";
+ echo "</table>";
+ echo "</td></tr>";
+ }
+ $cols = 0;
+ if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
+ foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
+ echo "<td class=\"listhdrr\">" . $column['fielddescr'] . "</td>";
+ $cols++;
+ }
+ }
+?>
+ </tr>
+<?php
+ $i = 0;
+ $pagination_startingrow = 0;
+ $pagination_counter = 0;
+ if ($evaledvar) {
+ foreach ($evaledvar as $ip) {
+ if ($startdisplayingat) {
+ if ($i < $startdisplayingat) {
+ $i++;
+ continue;
+ }
+ }
+ if ($_REQUEST['pkg_filter']) {
+ // Handle filtered items
+ if ($pkg['fields']['field'] && !$filter_regex) {
+ // First find the sorting type field if it exists
+ foreach ($pkg['fields']['field'] as $field) {
+ if ($field['type'] == "sorting") {
+ if ($field['sortablefields']['item']) {
+ foreach ($field['sortablefields']['item'] as $sf) {
+ if ($sf['name'] == $_REQUEST['pkg_filter_type']) {
+ $filter_fieldname = $sf['fieldname'];
+ #Use a default regex on sortable fields when none is declared
+ if ($sf['regex']) {
+ $filter_regex = str_replace("%FILTERTEXT%", $_REQUEST['pkg_filter'], trim($sf['regex']));
+ } else {
+ $filter_regex = "/{$_REQUEST['pkg_filter']}/i";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // Do we have something to filter on?
+ unset($filter_matches);
+ if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
+ foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
+ $fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
+ if ($column['fieldname'] == $filter_fieldname) {
+ if ($filter_regex) {
+ //echo "$filter_regex - $fieldname<p/>";
+ preg_match($filter_regex, $fieldname, $filter_matches);
+ break;
+ }
+ }
+ }
+ }
+ if (!$filter_matches) {
+ $i++;
+ continue;
+ }
+ }
+ if ($pkg['adddeleteeditpagefields']['movable']) {
+ echo "<tr valign=\"top\" class=\"sortable\" id=\"id_{$i}\">\n";
+ } else {
+ echo "<tr valign=\"top\">\n";
+ }
+ if ($pkg['adddeleteeditpagefields']['columnitem'] <> "") {
+ foreach ($pkg['adddeleteeditpagefields']['columnitem'] as $column) {
+ if ($column['fieldname'] == "description") {
+ $class = "listbg";
+ } else {
+ $class = "listlr";
+ }
+?>
+ <td class="<?=$class;?>" ondblclick="document.location='pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>';">
+<?php
+ $fieldname = $ip[xml_safe_fieldname($column['fieldname'])];
+ #Check if columnitem has a type field declared
+ if ($column['type'] == "checkbox") {
+ if ($fieldname == "") {
+ echo gettext("No");
+ } else {
+ echo gettext("Yes");
+ }
+ } else if ($column['type'] == "interface") {
+ echo $column['prefix'] . $iflist[$fieldname] . $column['suffix'];
+ } else {
+ #Check if columnitem has an encoding field declared
+ if ($column['encoding'] == "base64") {
+ echo $column['prefix'] . base64_decode($fieldname) . $column['suffix'];
+ #Check if there is a custom info to show when $fieldname is not empty
+ } else if ($column['listmodeon'] && $fieldname != "") {
+ echo $column['prefix'] . gettext($column['listmodeon']). $column['suffix'];
+ #Check if there is a custom info to show when $fieldname is empty
+ } else if ($column['listmodeoff'] && $fieldname == "") {
+ echo $column['prefix'] .gettext($column['listmodeoff']). $column['suffix'];
+ } else {
+ echo $column['prefix'] . $fieldname ." ". $column['suffix'];
+ }
+ }
+?>
+ </td>
+<?php
+ } // foreach columnitem
+ } // if columnitem
+?>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+<?php
+ #Show custom description to edit button if defined
+ $edit_msg=($pkg['adddeleteeditpagefields']['edittext']?$pkg['adddeleteeditpagefields']['edittext']:"Edit this item");
+?>
+ <td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;act=edit&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" <?=domTT_title($edit_msg)?> alt="edit" /></a></td>
+<?php
+ #Show custom description to delete button if defined
+ $delete_msg=($pkg['adddeleteeditpagefields']['deletetext']?$pkg['adddeleteeditpagefields']['deletetext']:"Delete this item");
+?>
+ <td valign="middle"><a href="pkg.php?xml=<?=$xml?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this item?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" <?=domTT_title($delete_msg)?> alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+<?php
+ echo "</tr>\n"; // Pairs with an echo tr some way above
+ // Handle pagination and display_maximum_rows
+ if ($display_maximum_rows) {
+ if ($pagination_counter == ($display_maximum_rows-1) or
+ $i == (count($evaledvar)-1)) {
+ $colcount = count($pkg['adddeleteeditpagefields']['columnitem']);
+ $final_footer = "";
+ $final_footer .= "<tr><td colspan='$colcount'>";
+ $final_footer .= "<table width='100%' summary=''><tr>";
+ $final_footer .= "<td align='left'>";
+ $startingat = $startdisplayingat - $display_maximum_rows;
+ if ($startingat > -1) {
+ $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat={$startingat}&amp;display_maximum_rows={$display_maximum_rows}'>";
+ } else if ($startdisplayingat > 1) {
+ $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=0&amp;display_maximum_rows={$display_maximum_rows}'>";
+ }
+ $final_footer .= "<font size='2'><< Previous page</font></a>";
+ if ($tmppp + $display_maximum_rows > count($evaledvar)) {
+ $endingrecord = count($evaledvar);
+ } else {
+ $endingrecord = $tmppp + $display_maximum_rows;
+ }
+ $final_footer .= "</td><td align='center'>";
+ $tmppp++;
+ $final_footer .= "<font size='2'>Displaying {$tmppp} - {$endingrecord} / " . count($evaledvar) . " records";
+ $final_footer .= "</font></td><td align='right'>&nbsp;";
+ if (($i+1) < count($evaledvar)) {
+ $final_footer .= "<a href='pkg.php?xml=" . $_REQUEST['xml'] . "&amp;startdisplayingat=" . ($startdisplayingat + $display_maximum_rows) . "&amp;display_maximum_rows={$display_maximum_rows}'>";
+ }
+ $final_footer .= "<font size='2'>Next page >></font></a>";
+ $final_footer .= "</td></tr></table></td></tr>";
+ $i = count($evaledvar);
+ break;
+ }
+ }
+ $i++;
+ $pagination_counter++;
+ } // foreach evaledvar
+ } // if evaledvar
+?>
+ <tr>
+ <td colspan="<?=$cols?>"></td>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+<?php
+ #Show custom description to add button if defined
+ $add_msg=($pkg['adddeleteeditpagefields']['addtext']?$pkg['adddeleteeditpagefields']['addtext']:"Add a new item");
+?>
+ <td valign="middle"><a href="pkg_edit.php?xml=<?=$xml?>&amp;id=<?=$i?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" <?=domTT_title($add_msg)?> alt="add" /></a></td>
+<?php
+ #Show description button and info if defined
+ if ($pkg['adddeleteeditpagefields']['description']) {
+?>
+ <td valign="middle"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_info_pkg.gif" width="17" height="17" border="0" <?=domTT_title($pkg['adddeleteeditpagefields']['description'])?> alt="info" /></td>
+<?php
+ }
+?>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?=$final_footer?>
+<?php
+ #Show save button only when movable is defined
+ if ($pkg['adddeleteeditpagefields']['movable']) {
+?>
+ <tr>
+ <td><input class="formbtn" type="button" value="Save" name="Submit" onclick="save_changes_to_xml('<?=$xml?>')" /></td>
+ </tr>
+<?php
+ }
+?>
+ </table>
+ </td>
+ </tr>
+</table></div></td></tr>
+</table>
+
+</form>
+<?php include("fend.inc"); ?>
+
+<?php
+ echo "<!-- filter_fieldname: {$filter_fieldname} -->";
+ echo "<!-- filter_regex: {$filter_regex} -->";
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/pkg_edit.php b/src/usr/local/www/pkg_edit.php
new file mode 100644
index 0000000..0b01a28
--- /dev/null
+++ b/src/usr/local/www/pkg_edit.php
@@ -0,0 +1,1267 @@
+<?php
+/* $Id$ */
+/*
+ pkg_edit.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-package-edit
+##|*NAME=Package: Edit page
+##|*DESCR=Allow access to the 'Package: Edit' page.
+##|*MATCH=pkg_edit.php*
+##|-PRIV
+
+ini_set('max_execution_time', '0');
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("pkg-utils.inc");
+
+/* dummy stubs needed by some code that was MFC'd */
+function pfSenseHeader($location) {
+ header("Location: " . $location);
+}
+
+function gentitle_pkg($pgname) {
+ global $pfSense_config;
+ return $pfSense_config['system']['hostname'] . "." . $pfSense_config['system']['domain'] . " - " . $pgname;
+}
+
+function domTT_title($title_msg) {
+ if (!empty($title_msg)) {
+ $title_msg = preg_replace("/\s+/", " ", $title_msg);
+ $title_msg = preg_replace("/'/", "\'", $title_msg);
+ return "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'delay', 300, 'styleClass', 'niceTitle');\"";
+ }
+}
+
+$xml = htmlspecialchars($_GET['xml']);
+if ($_POST['xml']) {
+ $xml = htmlspecialchars($_POST['xml']);
+}
+
+$xml_fullpath = realpath('/usr/local/pkg/' . $xml);
+
+if ($xml == "" || $xml_fullpath === false ||
+ substr($xml_fullpath, 0, strlen('/usr/local/pkg/')) != '/usr/local/pkg/') {
+ print_info_box_np(gettext("ERROR: No valid package defined."));
+ die;
+} else {
+ $pkg = parse_xml_config_pkg($xml_fullpath, "packagegui");
+}
+
+if ($pkg['include_file'] <> "") {
+ require_once($pkg['include_file']);
+}
+
+if (!isset($pkg['adddeleteeditpagefields'])) {
+ $only_edit = true;
+} else {
+ $only_edit = false;
+}
+
+$package_name = $pkg['menu'][0]['name'];
+$section = $pkg['menu'][0]['section'];
+$config_path = $pkg['configpath'];
+$name = $pkg['name'];
+$title = $pkg['title'];
+$pgtitle = $title;
+
+$id = $_GET['id'];
+if (isset($_POST['id'])) {
+ $id = htmlspecialchars($_POST['id']);
+}
+
+// Not posting? Then user is editing a record. There must be a valid id
+// when editing a record.
+if (!$id && !$_POST) {
+ $id = "0";
+}
+
+if (!is_numeric($id)) {
+ header("Location: /");
+ exit;
+}
+
+if ($pkg['custom_php_global_functions'] <> "") {
+ eval($pkg['custom_php_global_functions']);
+}
+
+// grab the installedpackages->package_name section.
+if ($config['installedpackages'] && !is_array($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'])) {
+ $config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'] = array();
+}
+
+// If the first entry in the array is an empty <config/> tag, kill it.
+if ($config['installedpackages'] && (count($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']) > 0)
+ && ($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'][0] == "")) {
+ array_shift($config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config']);
+}
+
+$a_pkg = &$config['installedpackages'][xml_safe_fieldname($pkg['name'])]['config'];
+
+if ($_GET['savemsg'] <> "") {
+ $savemsg = htmlspecialchars($_GET['savemsg']);
+}
+
+if ($pkg['custom_php_command_before_form'] <> "") {
+ eval($pkg['custom_php_command_before_form']);
+}
+
+if ($_POST) {
+ $firstfield = "";
+ $rows = 0;
+
+ $input_errors = array();
+ $reqfields = array();
+ $reqfieldsn = array();
+ foreach ($pkg['fields']['field'] as $field) {
+ if (($field['type'] == 'input') && isset($field['required'])) {
+ if ($field['fieldname']) {
+ $reqfields[] = $field['fieldname'];
+ }
+ if ($field['fielddescr']) {
+ $reqfieldsn[] = $field['fielddescr'];
+ }
+ }
+ }
+ do_input_validation($_POST, $reqfields, $reqfieldsn, $input_errors);
+
+ if ($pkg['custom_php_validation_command']) {
+ eval($pkg['custom_php_validation_command']);
+ }
+
+ if ($_POST['act'] == "del") {
+ if ($pkg['custom_delete_php_command']) {
+ if ($pkg['custom_php_command_before_form'] <> "") {
+ eval($pkg['custom_php_command_before_form']);
+ }
+ eval($pkg['custom_delete_php_command']);
+ }
+ write_config($pkg['delete_string']);
+ // resync the configuration file code if defined.
+ if ($pkg['custom_php_resync_config_command'] <> "") {
+ if ($pkg['custom_php_command_before_form'] <> "") {
+ eval($pkg['custom_php_command_before_form']);
+ }
+ eval($pkg['custom_php_resync_config_command']);
+ }
+ } else {
+ if (!$input_errors && $pkg['custom_add_php_command']) {
+ if ($pkg['donotsave'] <> "" or $pkg['preoutput'] <> "") {
+ ?>
+
+<?php include("head.inc"); ?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+ }
+ if ($pkg['preoutput']) {
+ echo "<pre>";
+ }
+ eval($pkg['custom_add_php_command']);
+ if ($pkg['preoutput']) {
+ echo "</pre>";
+ }
+ }
+ }
+
+ // donotsave is enabled. lets simply exit.
+ if (empty($pkg['donotsave'])) {
+
+ // store values in xml configuration file.
+ if (!$input_errors) {
+ $pkgarr = array();
+ foreach ($pkg['fields']['field'] as $fields) {
+ switch ($fields['type']) {
+ case "rowhelper":
+ // save rowhelper items.
+ #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
+ $rowhelpername="row";
+ foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
+ foreach ($_POST as $key => $value) {
+ if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
+ $pkgarr[$rowhelpername][$matches[1]][$rowhelperfield['fieldname']] = $value;
+ }
+ }
+ }
+ break;
+ default:
+ $fieldname = $fields['fieldname'];
+ if ($fieldname == "interface_array") {
+ $fieldvalue = $_POST[$fieldname];
+ } elseif (is_array($_POST[$fieldname])) {
+ $fieldvalue = implode(',', $_POST[$fieldname]);
+ } else {
+ $fieldvalue = trim($_POST[$fieldname]);
+ if ($fields['encoding'] == 'base64') {
+ $fieldvalue = base64_encode($fieldvalue);
+ }
+ }
+ if ($fieldname) {
+ $pkgarr[$fieldname] = $fieldvalue;
+ }
+ }
+ }
+
+ if (isset($id) && $a_pkg[$id]) {
+ $a_pkg[$id] = $pkgarr;
+ } else {
+ $a_pkg[] = $pkgarr;
+ }
+
+ write_config($pkg['addedit_string']);
+ // late running code
+ if ($pkg['custom_add_php_command_late'] <> "") {
+ eval($pkg['custom_add_php_command_late']);
+ }
+
+ if (isset($pkg['filter_rules_needed'])) {
+ filter_configure();
+ }
+
+ // resync the configuration file code if defined.
+ if ($pkg['custom_php_resync_config_command'] <> "") {
+ eval($pkg['custom_php_resync_config_command']);
+ }
+
+ parse_package_templates();
+
+ /* if start_command is defined, restart w/ this */
+ if ($pkg['start_command'] <> "") {
+ exec($pkg['start_command'] . ">/dev/null 2&>1");
+ }
+
+ /* if restart_command is defined, restart w/ this */
+ if ($pkg['restart_command'] <> "") {
+ exec($pkg['restart_command'] . ">/dev/null 2&>1");
+ }
+
+ if ($pkg['aftersaveredirect'] <> "") {
+ pfSenseHeader($pkg['aftersaveredirect']);
+ } elseif (!$pkg['adddeleteeditpagefields']) {
+ pfSenseHeader("pkg_edit.php?xml={$xml}&amp;id=0");
+ } elseif (!$pkg['preoutput']) {
+ pfSenseHeader("pkg.php?xml=" . $xml);
+ }
+ exit;
+ } else {
+ $get_from_post = true;
+ }
+ } elseif (!$input_errors) {
+ exit;
+ }
+}
+
+if ($pkg['title'] <> "") {
+ $edit = ($only_edit ? '' : ": " . gettext("Edit"));
+ $title = $pkg['title'] . $edit;
+} else {
+ $title = gettext("Package Editor");
+}
+
+$pgtitle = $title;
+
+if ($pkg['custom_php_after_head_command']) {
+ $closehead = false;
+ include("head.inc");
+ eval($pkg['custom_php_after_head_command']);
+ echo "</head>\n";
+} else {
+ include("head.inc");
+}
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+
+<?php if ($pkg['fields']['field'] <> "") { ?>
+<script type="text/javascript">
+//<![CDATA[
+ //Everything inside it will load as soon as the DOM is loaded and before the page contents are loaded
+ jQuery(document).ready(function() {
+
+ //Sortable function
+ jQuery('#mainarea table tbody').sortable({
+ items: 'tr.sortable',
+ cursor: 'move',
+ distance: 10,
+ opacity: 0.8,
+ helper: function(e, ui) {
+ ui.children().each(function() {
+ jQuery(this).width(jQuery(this).width());
+ });
+ return ui;
+ },
+ });
+
+ //delete current line jQuery function
+ jQuery('#maintable td .delete').live('click', function() {
+ //do not remove first line
+ if (jQuery("#maintable tr").length > 2) {
+ jQuery(this).parent().parent().remove();
+ return false;
+ }
+ });
+
+ //add new line jQuery function
+ jQuery('#mainarea table .add').click(function() {
+ //get table size and assign as new id
+ var c_id=jQuery("#maintable tr").length;
+ var new_row=jQuery("table#maintable tr:last").html().replace(/(name|id)="(\w+)(\d+)"/g,"$1='$2"+c_id+"'");
+ //apply new id to created line rowhelperid
+ jQuery("table#maintable tr:last").after("<tr>"+new_row+"<\/tr>");
+ return false;
+ });
+ // Call enablechange function
+ enablechange();
+ });
+
+ function enablechange() {
+ <?php
+ foreach ($pkg['fields']['field'] as $field) {
+ if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
+ echo "\tif (jQuery('form[name=\"iform\"] input[name=\"{$field['fieldname']}\"]').prop('checked') == false) {\n";
+
+ if (isset($field['enablefields'])) {
+ foreach (explode(',', $field['enablefields']) as $enablefield) {
+ echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
+ echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',true);\n";
+ echo "\t\t}\n";
+ }
+ }
+
+ if (isset($field['checkenablefields'])) {
+ foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
+ echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
+ echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',true);\n";
+ echo "\t\t}\n";
+ }
+ }
+
+ echo "\t}\n\telse {\n";
+
+ if (isset($field['enablefields'])) {
+ foreach (explode(',', $field['enablefields']) as $enablefield) {
+ echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').length > 0) {\n";
+ echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$enablefield}\"]').prop('disabled',false);\n";
+ echo "\t\t}\n";
+ }
+ }
+
+ if (isset($field['checkenablefields'])) {
+ foreach (explode(',', $field['checkenablefields']) as $checkenablefield) {
+ echo "\t\tif (jQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').length > 0) {\n";
+ echo "\t\t\tjQuery('form[name=\"iform\"] input[name=\"{$checkenablefield}\"]').prop('checked',false);\n";
+ echo "\t\t}\n";
+ }
+ }
+
+ echo "\t}\n";
+ }
+ }
+ ?>
+ }
+//]]>
+</script>
+<?php } ?>
+<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
+<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
+<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
+<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
+<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
+
+<?php if (!empty($input_errors)) print_input_errors($input_errors); ?>
+<form name="iform" action="pkg_edit.php" method="post">
+<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package edit">
+<?php
+if ($pkg['tabs'] <> "") {
+ $tab_array = array();
+ foreach ($pkg['tabs']['tab'] as $tab) {
+ if ($tab['tab_level']) {
+ $tab_level = $tab['tab_level'];
+ } else {
+ $tab_level = 1;
+ }
+ if (isset($tab['active'])) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ if (isset($tab['no_drop_down'])) {
+ $no_drop_down = true;
+ }
+ $urltmp = "";
+ if ($tab['url'] <> "") {
+ $urltmp = $tab['url'];
+ }
+ if ($tab['xml'] <> "") {
+ $urltmp = "pkg_edit.php?xml=" . $tab['xml'];
+ }
+
+ $addresswithport = getenv("HTTP_HOST");
+ $colonpos = strpos($addresswithport, ":");
+ if ($colonpos !== False) {
+ //my url is actually just the IP address of the pfsense box
+ $myurl = substr($addresswithport, 0, $colonpos);
+ } else {
+ $myurl = $addresswithport;
+ }
+ // eval url so that above $myurl item can be processed if need be.
+ $url = str_replace('$myurl', $myurl, $urltmp);
+
+ $tab_array[$tab_level][] = array(
+ $tab['text'],
+ $active,
+ $url
+ );
+ }
+
+ ksort($tab_array);
+ foreach ($tab_array as $tabid => $tab) {
+ echo '<tr><td>';
+ display_top_tabs($tab, $no_drop_down, $tabid);
+ echo '</td></tr>';
+ }
+}
+
+?>
+<tr><td><div id="mainarea"><table id="t" class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+<?php
+ $cols = 0;
+ $savevalue = gettext("Save");
+ if ($pkg['savetext'] <> "") {
+ $savevalue = $pkg['savetext'];
+ }
+ /* If a package's XML has <advanced_options/> configured, then setup
+ * the table rows for the fields that have <advancedfield/> set.
+ * These fields will be placed below other fields in a separate area titled 'Advanced Features'.
+ * These advanced fields are not normally configured and generally left to default to 'default settings'.
+ */
+
+ if ($pkg['advanced_options'] == "enabled") {
+ $adv_filed_count = 0;
+ $advanced = "<td>&nbsp;</td>";
+ $advanced .= "<tr><td colspan=\"2\" class=\"listtopic\">". gettext("Advanced features") . "<br /></td></tr>\n";
+ }
+ foreach ($pkg['fields']['field'] as $pkga) {
+ if ($pkga['type'] == "sorting") {
+ continue;
+ }
+
+ if ($pkga['type'] == "listtopic") {
+ $input = "<tr id='td_{$pkga['fieldname']}'><td>&nbsp;</td></tr>";
+ $input .= "<tr id='tr_{$pkga['fieldname']}'><td colspan=\"2\" class=\"listtopic\">{$pkga['name']}<br /></td></tr>\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ $adv_filed_count++;
+ } else {
+ echo $input;
+ }
+ continue;
+ }
+
+ if ($pkga['combinefields'] == "begin") {
+ $input="<tr valign='top' id='tr_{$pkga['fieldname']}'>";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ } else {
+ echo $input;
+ }
+ }
+
+ $size = "";
+ $colspan="";
+ if (isset($pkga['dontdisplayname'])) {
+ $input="";
+ // If this is in a set of combined fields and;
+ // - it is a "begin" (case already handled above) or
+ // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
+ // then we do not want this "tr" to be inserted.
+ // Thus only insert the "tr" if the not (!) of the above condition.
+ if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
+ $input .= "<tr valign='top' id='tr_{$pkga['fieldname']}'>";
+ }
+ if (isset($pkga['usecolspan2'])) {
+ $colspan="colspan='2'";
+ } else {
+ $input .= "<td width='22%' class='vncell{$req}'>&nbsp;</td>";
+ }
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ $adv_filed_count++;
+ } else {
+ echo $input;
+ }
+ } else if (!isset($pkga['placeonbottom'])) {
+ unset($req);
+ if (isset($pkga['required'])) {
+ $req = 'req';
+ }
+ $input="";
+ // If this is in a set of combined fields and;
+ // - it is a "begin" (case already handled above) or
+ // - usecolspan2 is in effect (so we want to spread all the combined fields horizontally)
+ // then we do not want this "tr" to be inserted.
+ // Thus only insert the "tr" if the not (!) of the above condition.
+ if (!((isset($pkga['combinefields'])) && (($pkga['combinefields'] == "begin") || (isset($pkga['usecolspan2']))))) {
+ $input .= "<tr>";
+ }
+ $input .= "<td valign='top' width=\"22%\" class=\"vncell{$req}\">";
+ $input .= fixup_string($pkga['fielddescr']);
+ $input .= "</td>";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ $adv_filed_count++;
+ } else {
+ echo $input;
+ }
+ }
+ if ($pkga['combinefields'] == "begin") {
+ $input="<td class=\"vncell\"><table summary=\"advanced\"><tr>";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ } else {
+ echo $input;
+ }
+ }
+
+ $class=(isset($pkga['combinefields']) ? '' : 'class="vtable"');
+ if (!isset($pkga['placeonbottom'])) {
+ $input="<td valign='top' {$colspan} {$class}>";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ $adv_filed_count++;
+ } else {
+ echo $input;
+ }
+ }
+
+ // if user is editing a record, load in the data.
+ $fieldname = $pkga['fieldname'];
+ if ($get_from_post) {
+ $value = $_POST[$fieldname];
+ if (is_array($value)) {
+ $value = implode(',', $value);
+ }
+ } else {
+ if (isset($id) && $a_pkg[$id]) {
+ $value = $a_pkg[$id][$fieldname];
+ } else {
+ $value = $pkga['default_value'];
+ }
+ }
+ switch ($pkga['type']) {
+ case "input":
+ $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
+ $input = "<input {$size} id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formfld unknown' value=\"" . htmlspecialchars($value) ."\" />\n";
+ $input .= "<br />" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "password":
+ $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
+ $input = "<input " . $size . " id='" . $pkga['fieldname'] . "' type='password' name='" . $pkga['fieldname'] . "' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
+ $input .= "<br />" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "info":
+ $input = fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input ."</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "select":
+ $fieldname = $pkga['fieldname'];
+ if (isset($pkga['multiple'])) {
+ $multiple = 'multiple="multiple"';
+ $items = explode(',', $value);
+ $fieldname .= "[]";
+ } else {
+ $multiple = '';
+ $items = array($value);
+ }
+ $size = ($pkga['size'] ? " size='{$pkga['size']}' " : "");
+ $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
+ $input = "<select id='" . $pkga['fieldname'] . "' $multiple $size $onchange name=\"$fieldname\">\n";
+ foreach ($pkga['options']['option'] as $opt) {
+ $selected = (in_array($opt['value'], $items) ? 'selected="selected"' : '');
+ $input .= "\t<option value=\"{$opt['value']}\" {$selected}>{$opt['name']}</option>\n";
+ }
+ $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "select_source":
+ $fieldname = $pkga['fieldname'];
+ if (isset($pkga['multiple'])) {
+ $multiple = 'multiple="multiple"';
+ $items = explode(',', $value);
+ $fieldname .= "[]";
+ } else {
+ $multiple = '';
+ $items = array($value);
+ }
+ $size = (isset($pkga['size']) ? "size=\"{$pkga['size']}\"" : '');
+ $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
+ $input = "<select id='{$pkga['fieldname']}' {$multiple} {$size} {$onchange} name=\"{$fieldname}\">\n";
+
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']) .$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ $source_url = $pkga['source'];
+ eval("\$pkg_source_txt = &$source_url;");
+ $input="";
+ #check if show disable option is present on xml
+ if (isset($pkga['show_disable_value'])) {
+ array_push($pkg_source_txt,
+ array(($pkga['source_name']? $pkga['source_name'] : $pkga['name'])=> $pkga['show_disable_value'], ($pkga['source_value']? $pkga['source_value'] : $pkga['value'])=> $pkga['show_disable_value']));
+ }
+ foreach ($pkg_source_txt as $opt) {
+ $source_name =($pkga['source_name']? $opt[$pkga['source_name']] : $opt[$pkga['name']]);
+ $source_value =($pkga['source_value'] ? $opt[$pkga['source_value']] : $opt[$pkga['value']]);
+ $selected = (in_array($source_value, $items)? 'selected="selected"' : '');
+ $input .= "\t<option value=\"{$source_value}\" $selected>{$source_name}</option>\n";
+ }
+ $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "vpn_selection" :
+ $input = "<select id='{$pkga['fieldname']}' name='{$vpn['name']}'>\n";
+ foreach ($config['ipsec']['phase1'] as $vpn) {
+ $input .= "\t<option value=\"{$vpn['descr']}\">{$vpn['descr']}</option>\n";
+ }
+ $input .= "</select>\n";
+ $input .= "<br />" . fixup_string($pkga['description']) . "\n";
+
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "checkbox":
+ $checkboxchecked =($value == "on" ? " checked=\"checked\"" : "");
+ $onchange = (isset($pkga['onchange']) ? "onchange=\"{$pkga['onchange']}\"" : '');
+ if (isset($pkga['enablefields']) || isset($pkga['checkenablefields'])) {
+ $onclick = ' onclick="javascript:enablechange();"';
+ }
+ $input = "<input id='{$pkga['fieldname']}' type='checkbox' name='{$pkga['fieldname']}' {$checkboxchecked} {$onclick} {$onchange} />\n";
+ $input .= "<br />" . fixup_string($pkga['description']) . "\n";
+
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "textarea":
+ if ($pkga['rows']) {
+ $rows = " rows='{$pkga['rows']}' ";
+ }
+ if ($pkga['cols']) {
+ $cols = " cols='{$pkga['cols']}' ";
+ }
+ if (($pkga['encoding'] == 'base64') && !$get_from_post && !empty($value)) {
+ $value = base64_decode($value);
+ }
+ $wrap =($pkga['wrap'] == "off" ? 'wrap="off" style="white-space:nowrap;"' : '');
+ $input = "<textarea {$rows} {$cols} name='{$pkga['fieldname']}'{$wrap}>{$value}</textarea>\n";
+ $input .= "<br />" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "aliases":
+ // Use xml tag <typealiases> to filter type aliases
+ $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
+ $fieldname = $pkga['fieldname'];
+ $a_aliases = &$config['aliases']['alias'];
+ $addrisfirst = 0;
+ $aliasesaddr = "";
+ $value = "value='{$value}'";
+
+ if (isset($a_aliases)) {
+ if (!empty($pkga['typealiases'])) {
+ foreach ($a_aliases as $alias) {
+ if ($alias['type'] == $pkga['typealiases']) {
+ if ($addrisfirst == 1) {
+ $aliasesaddr .= ",";
+ }
+ $aliasesaddr .= "'" . $alias['name'] . "'";
+ $addrisfirst = 1;
+ }
+ }
+ } else {
+ foreach ($a_aliases as $alias) {
+ if ($addrisfirst == 1) {
+ $aliasesaddr .= ",";
+ }
+ $aliasesaddr .= "'" . $alias['name'] . "'";
+ $addrisfirst = 1;
+ }
+ }
+ }
+
+ $input = "<input name='{$fieldname}' type='text' class='formfldalias' id='{$fieldname}' {$size} {$value} />\n<br />";
+ $input .= fixup_string($pkga['description']) . "\n";
+
+ $script = "<script type='text/javascript'>\n";
+ $script .= "//<![CDATA[\n";
+ $script .= "var aliasarray = new Array({$aliasesaddr})\n";
+ $script .= "var oTextbox1 = new AutoSuggestControl(document.getElementById('{$fieldname}'), new StateSuggestions(aliasarray))\n";
+ $script .= "//]]>\n";
+ $script .= "</script>";
+
+ echo $input;
+ echo $script;
+ break;
+
+ case "interfaces_selection":
+ $ips = array();
+ $interface_regex=(isset($pkga['hideinterfaceregex']) ? $pkga['hideinterfaceregex'] : "nointerfacestohide");
+ if (is_array($config['interfaces'])) {
+ foreach ($config['interfaces'] as $iface_key=>$iface_value) {
+ if (isset($iface_value['enable']) && !preg_match("/$interface_regex/", $iface_key)) {
+ $iface_description=($iface_value['descr'] !="" ? strtoupper($iface_value['descr']) : strtoupper($iface_key));
+ if (isset($pkga['showips'])) {
+ $iface_description .= " address";
+ }
+ $ips[] = array('ip'=> $iface_key, 'description'=> $iface_description);
+ }
+ }
+ }
+ if (is_array($config['virtualip']) && isset($pkga['showvirtualips'])) {
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if (!preg_match("/$interface_regex/", $vip['interface'])) {
+ $vip_description=($vip['descr'] !="" ? " ({$vip['descr']}) " : " ");
+ }
+ switch ($vip['mode']) {
+ case "ipalias":
+ case "carp":
+ $ips[] = array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
+ break;
+ case "proxyarp":
+ if ($vip['type'] == "network") {
+ $start = ip2long32(gen_subnet($vip['subnet'], $vip['subnet_bits']));
+ $end = ip2long32(gen_subnet_max($vip['subnet'], $vip['subnet_bits']));
+ $len = $end - $start;
+ for ($i = 0; $i <= $len; $i++) {
+ $ips[]= array('ip' => long2ip32($start+$i), 'description' => long2ip32($start+$i)." from {$vip['subnet']}/{$vip['subnet_bits']} {$vip_description}");
+ }
+ } else {
+ $ips[]= array('ip' => $vip['subnet'], 'description' => "{$vip['subnet']} $vip_description");
+ }
+ break;
+ }
+ }
+ }
+ sort($ips);
+ if (isset($pkga['showlistenall'])) {
+ array_unshift($ips, array('ip' => 'All', 'description' => 'Listen on All interfaces/ip addresses '));
+ }
+ if (!preg_match("/$interface_regex/", "loopback")) {
+ $iface_description=(isset($pkga['showips']) ? "127.0.0.1 (loopback)" : "loopback");
+ array_push($ips, array('ip' => 'lo0', 'description' => $iface_description));
+ }
+
+ #show interfaces array on gui
+ $size = ($pkga['size'] ? "size=\"{$pkga['size']}\"" : '');
+ $multiple = '';
+ $fieldname = $pkga['fieldname'];
+ if (isset($pkga['multiple'])) {
+ $fieldname .= '[]';
+ $multiple = 'multiple="multiple"';
+ }
+ $input = "<select id='{$pkga['fieldname']}' name=\"{$fieldname}\" {$size} {$multiple}>\n";
+ if (is_array($value)) {
+ $values = $value;
+ } else {
+ $values = explode(',', $value);
+ }
+ foreach ($ips as $iface) {
+ $selected = (in_array($iface['ip'], $values) ? 'selected="selected"' : '');
+ $input .= "<option value=\"{$iface['ip']}\" {$selected}>{$iface['description']}</option>\n";
+ }
+ $input .= "</select>\n<br />" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "radio":
+ $input = "<input type='radio' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' value='{$value}' />";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= $input;
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "button":
+ $input = "<input type='submit' id='{$pkga['fieldname']}' name='{$pkga['fieldname']}' class='formbtn' value='{$pkga['fieldname']}' />\n";
+ if (isset($pkga['placeonbottom'])) {
+ $pkg_buttons .= $input;
+ } else {
+ echo $input ."\n<br />" . fixup_string($pkga['description']) . "\n";
+ }
+ break;
+
+ case "schedule_selection":
+ $input = "<select id='{$pkga['fieldname']}' name='{$pkga['fieldname']}'>\n";
+ $schedules = array();
+ $schedules[] = "none";
+ if (is_array($config['schedules']['schedule'])) {
+ foreach ($config['schedules']['schedule'] as $schedule) {
+ if ($schedule['name'] <> "") {
+ $schedules[] = $schedule['name'];
+ }
+ }
+ }
+ foreach ($schedules as $schedule) {
+ $selected = ($value == $schedule ? "selected=\"selected\"" : "");
+ if ($schedule == "none") {
+ $input .= "<option value=\"\" {$selected}>{$schedule}</option>\n";
+ } else {
+ $input .= "<option value=\"{$schedule}\" {$selected}>{$schedule}</option>\n";
+ }
+ }
+ $input .= "</select>\n<br />\n" . fixup_string($pkga['description']) . "\n";
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $js_array[] = $pkga['fieldname'];
+ $advanced .= display_advanced_field($pkga['fieldname']).$input;
+ $advanced .= "</div>\n";
+ } else {
+ echo $input;
+ }
+ break;
+
+ case "rowhelper":
+ #$rowhelpername=($fields['fieldname'] ? $fields['fieldname'] : "row");
+ $rowhelpername="row";
+ ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ <?php
+ $rowcounter = 0;
+ $fieldcounter = 0;
+ foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
+ echo "rowname[{$fieldcounter}] = \"{$rowhelper['fieldname']}\";\n";
+ echo "rowtype[{$fieldcounter}] = \"{$rowhelper['type']}\";\n";
+ echo "rowsize[{$fieldcounter}] = \"{$rowhelper['size']}\";\n";
+ $fieldcounter++;
+ }
+ ?>
+ //]]>
+ </script>
+ <table id="maintable" summary="main table">
+ <tr id='<?="tr_{$pkga['fieldname']}";?>'>
+ <?php
+ foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
+ echo "<td ".domTT_title($rowhelper['description'])."><b>" . fixup_string($rowhelper['fielddescr']) . "</b></td>\n";
+ }
+
+ $rowcounter = 0;
+ $trc = 0;
+
+ //Use assigned $a_pkg or create an empty array to enter loop
+ if (isset($a_pkg[$id][$rowhelpername])) {
+ $saved_rows=$a_pkg[$id][$rowhelpername];
+ } else {
+ $saved_rows[] = array();
+ }
+
+ foreach ($saved_rows as $row) {
+ echo "</tr>\n<tr class=\"sortable\" id=\"id_{$rowcounter}\">\n";
+ foreach ($pkga['rowhelper']['rowhelperfield'] as $rowhelper) {
+ unset($value);
+ if ($rowhelper['value'] <> "") {
+ $value = $rowhelper['value'];
+ }
+ $fieldname = $rowhelper['fieldname'];
+ // if user is editing a record, load in the data.
+ if (isset($id) && $a_pkg[$id]) {
+ $value = $row[$fieldname];
+ }
+ $options = "";
+ $type = $rowhelper['type'];
+ $description = $rowhelper['description'];
+ $fieldname = $rowhelper['fieldname'];
+ if ($type == "option") {
+ $options = &$rowhelper['options']['option'];
+ }
+ if ($rowhelper['size']) {
+ $size = $rowhelper['size'];
+ } else if ($pkga['size']) {
+ $size = $pkga['size'];
+ } else {
+ $size = "8";
+ }
+ display_row($rowcounter, $value, $fieldname, $type, $rowhelper, $size);
+
+ $text = "";
+ $trc++;
+ }
+ $rowcounter++;
+ echo "<td>";
+ #echo "<a onclick=\"removeRow(this); return false;\" href=\"#\"><img border=\"0\" src=\"./themes/".$g['theme']."/images/icons/icon_x.gif\" alt=\"remove\" /></a>";
+ echo "<a class='delete' href=\"#\"><img border='0' src='./themes/{$g['theme']}/images/icons/icon_x.gif' alt='delete' /></a>";
+ echo "</td>\n";
+ }
+ ?>
+ </tr>
+ <tbody></tbody>
+ </table>
+
+ <!-- <br /><a onclick="javascript:addRowTo('maintable'); return false;" href="#"><img border="0" src="./themes/<?#= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>-->
+ <br /><a class="add" href="#"><img border="0" src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" /></a>
+ <br /><?php if ($pkga['description'] != "") echo $pkga['description']; ?>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = <?= $fieldcounter ?>;
+ rows = <?= $rowcounter ?>;
+ totalrows = <?php echo $rowcounter; ?>;
+ loaded = <?php echo $rowcounter; ?>;
+ //typesel_change();
+ //]]>
+ </script>
+
+ <?php
+ break;
+ }
+ #check typehint value
+ if ($pkga['typehint']) {
+ echo " " . $pkga['typehint'];
+ }
+ #check combinefields options
+ if (isset($pkga['combinefields'])) {
+ // At the end of each combined-fields field we always want to end a td tag.
+ $input = "</td>";
+ // The tr tag end is used to end the whole set of combined fields,
+ // but also if usecolspan2 is not in effect then we also put each combined field in its own tr.
+ if (($pkga['combinefields'] == "end") || (!isset($pkga['usecolspan2']))) {
+ $input .= "</tr>";
+ }
+ // At the end of the combined fields we finish up the table that encloses the combined fields...
+ if ($pkga['combinefields'] == "end") {
+ $input .= "</table></td></tr>";
+ }
+ } else {
+ $input = "</td></tr>";
+ if ($pkga['usecolspan2']) {
+ $input .= "</tr><br />";
+ }
+ }
+ if (isset($pkga['advancedfield']) && isset($adv_filed_count)) {
+ $advanced .= "{$input}\n";
+ } else {
+ echo "{$input}\n";
+ }
+ #increment counter
+ $i++;
+ }
+
+ #print advanced settings if any after reading all fields
+ if (isset($advanced) && $adv_filed_count > 0) {
+ echo $advanced;
+ }
+
+ ?>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <div id="buttons">
+ <?php
+ if ($pkg['note'] != "") {
+ echo "<p><span class=\"red\"><strong>" . gettext("Note") . ":</strong></span> {$pkg['note']}</p>";
+ }
+ //if (isset($id) && $a_pkg[$id]) // We'll always have a valid ID in our hands
+ echo "<input name='id' type='hidden' value=\"" . htmlspecialchars($id) . "\" />";
+ echo "<input name='Submit' type='submit' class='formbtn' value=\"" . htmlspecialchars($savevalue) . "\" />\n{$pkg_buttons}\n";
+ if (!$only_edit) {
+ echo "<input class=\"formbtn\" type=\"button\" value=\"".gettext("Cancel")."\" onclick=\"window.location.href='" . $_SERVER['HTTP_REFERER'] . "'\" />";
+ }
+ ?>
+ </div>
+ </td>
+ </tr>
+
+</table>
+</div></td></tr>
+</table>
+</form>
+
+<?php if ($pkg['custom_php_after_form_command']) eval($pkg['custom_php_after_form_command']); ?>
+
+<?php
+ /* JavaScript to handle the advanced fields. */
+ if ($pkg['advanced_options'] == "enabled") {
+ echo "<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ foreach ($js_array as $advfieldname) {
+ echo "function show_" . $advfieldname . "() {\n";
+ echo "\tjQuery('#showadv_{$advfieldname}').empty();\n";
+ echo "\tjQuery('#show_{$advfieldname}').css('display', 'block');\n";
+ echo "}\n\n";
+ }
+ echo "//]]>\n";
+ echo "</script>\n";
+ }
+?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+/*
+ * ROW Helpers function
+ */
+function display_row($trc, $value, $fieldname, $type, $rowhelper, $size) {
+ global $text, $config;
+ echo "<td>\n";
+ switch ($type) {
+ case "input":
+ echo "<input size='{$size}' name='{$fieldname}{$trc}' id='{$fieldname}{$trc}' class='formfld unknown' value=\"" . htmlspecialchars($value) . "\" />\n";
+ break;
+ case "checkbox":
+ echo "<input size='{$size}' type='checkbox' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' value='ON' ".($value?"CHECKED":"")." />\n";
+ break;
+ case "password":
+ echo "<input size='{$size}' type='password' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' class='formfld pwd' value=\"" . htmlspecialchars($value) . "\" />\n";
+ break;
+ case "textarea":
+ echo "<textarea rows='2' cols='12' id='{$fieldname}{$trc}' class='formfld unknown' name='{$fieldname}{$trc}'>{$value}</textarea>\n";
+ case "select":
+ echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$title}>\n";
+ foreach ($rowhelper['options']['option'] as $rowopt) {
+ $text .= "<option value='{$rowopt['value']}'>{$rowopt['name']}</option>";
+ echo "<option value='{$rowopt['value']}'".($rowopt['value'] == $value?" selected=\"selected\"":"").">{$rowopt['name']}</option>\n";
+ }
+ echo "</select>\n";
+ break;
+ case "interfaces_selection":
+ $size = ($size ? "size=\"{$size}\"" : '');
+ $multiple = '';
+ if (isset($rowhelper['multiple'])) {
+ $fieldname .= '[]';
+ $multiple = "multiple=\"multiple\"";
+ }
+ echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}' {$size} {$multiple}>\n";
+ $ifaces = get_configured_interface_with_descr();
+ $additional_ifaces = $rowhelper['add_to_interfaces_selection'];
+ if (!empty($additional_ifaces)) {
+ $ifaces = array_merge($ifaces, explode(',', $additional_ifaces));
+ }
+ if (is_array($value)) {
+ $values = $value;
+ } else {
+ $values = explode(',', $value);
+ }
+ $ifaces["lo0"] = "loopback";
+ echo "<option><name></name><value></value></option>/n";
+ foreach ($ifaces as $ifname => $iface) {
+ $text .="<option value=\"{$ifname}\">$iface</option>";
+ echo "<option value=\"{$ifname}\" ".(in_array($ifname, $values) ? 'selected="selected"' : '').">{$iface}</option>\n";
+ }
+ echo "</select>\n";
+ break;
+ case "select_source":
+ echo "<select style='height:22px;' id='{$fieldname}{$trc}' name='{$fieldname}{$trc}'>\n";
+ if (isset($rowhelper['show_disable_value'])) {
+ echo "<option value='{$rowhelper['show_disable_value']}'>{$rowhelper['show_disable_value']}</option>\n";
+ }
+ $source_url = $rowhelper['source'];
+ eval("\$pkg_source_txt = &$source_url;");
+ foreach ($pkg_source_txt as $opt) {
+ $source_name = ($rowhelper['source_name'] ? $opt[$rowhelper['source_name']] : $opt[$rowhelper['name']]);
+ $source_value = ($rowhelper['source_value'] ? $opt[$rowhelper['source_value']] : $opt[$rowhelper['value']]);
+ $text .= "<option value='{$source_value}'>{$source_name}</option>";
+ echo "<option value='{$source_value}'".($source_value == $value?" selected=\"selected\"":"").">{$source_name}</option>\n";
+ }
+ echo "</select>\n";
+ break;
+ }
+ echo "</td>\n";
+}
+
+function fixup_string($string) {
+ global $config;
+ // fixup #1: $myurl -> http[s]://ip_address:port/
+ $https = "";
+ $port = $config['system']['webguiport'];
+ if ($port <> "443" and $port <> "80") {
+ $urlport = ":" . $port;
+ } else {
+ $urlport = "";
+ }
+
+ if ($config['system']['webgui']['protocol'] == "https") {
+ $https = "s";
+ }
+ $myurl = "http" . $https . "://" . getenv("HTTP_HOST") . $urlport;
+ $newstring = str_replace("\$myurl", $myurl, $string);
+ $string = $newstring;
+ // fixup #2: $wanip
+ $curwanip = get_interface_ip();
+ $newstring = str_replace("\$wanip", $curwanip, $string);
+ $string = $newstring;
+ // fixup #3: $lanip
+ $lancfg = $config['interfaces']['lan'];
+ $lanip = $lancfg['ipaddr'];
+ $newstring = str_replace("\$lanip", $lanip, $string);
+ $string = $newstring;
+ // fixup #4: fix'r'up here.
+ return $newstring;
+}
+
+/*
+ * Parse templates if they are defined
+ */
+function parse_package_templates() {
+ global $pkg, $config;
+ $rows = 0;
+ if ($pkg['templates']['template'] <> "") {
+ foreach ($pkg['templates']['template'] as $pkg_template_row) {
+ $filename = $pkg_template_row['filename'];
+ $template_text = $pkg_template_row['templatecontents'];
+ $firstfield = "";
+ /* calculate total row helpers count and */
+ /* change fields defined as fieldname_fieldvalue to their value */
+ foreach ($pkg['fields']['field'] as $fields) {
+ switch ($fields['type']) {
+ case "rowhelper":
+ // save rowhelper items.
+ $row_helper_total_rows = 0;
+ $row_helper_data = "";
+ foreach ($fields['rowhelper']['rowhelperfield'] as $rowhelperfield) {
+ foreach ($_POST as $key => $value) {
+ if (preg_match("/^{$rowhelperfield['fieldname']}(\d+)$/", $key, $matches)) {
+ $row_helper_total_rows++;
+ $row_helper_data .= $value;
+ $sep = "";
+ ereg($rowhelperfield['fieldname'] . "_fieldvalue\[(.*)\]", $template_text, $sep);
+ foreach ($sep as $se) {
+ $separator = $se;
+ }
+ if ($separator <> "") {
+ $row_helper_data = ereg_replace(" ", $separator, $row_helper_data);
+ $template_text = ereg_replace("\[{$separator}\]", "", $template_text);
+ }
+ $template_text = str_replace($rowhelperfield['fieldname'] . "_fieldvalue", $row_helper_data, $template_text);
+ }
+ }
+ }
+ break;
+ default:
+ $fieldname = $fields['fieldname'];
+ $fieldvalue = $_POST[$fieldname];
+ $template_text = str_replace($fieldname . "_fieldvalue", $fieldvalue, $template_text);
+ }
+ }
+ /* replace $domain_total_rows with total rows */
+ $template_text = str_replace("$domain_total_rows", $row_helper_total_rows, $template_text);
+
+ /* replace cr's */
+ $template_text = str_replace("\\n", "\n", $template_text);
+
+ /* write out new template file */
+ $fout = fopen($filename, "w");
+ fwrite($fout, $template_text);
+ fclose($fout);
+ }
+ }
+}
+
+/* Return html div fields */
+function display_advanced_field($fieldname) {
+ $div = "<div id='showadv_{$fieldname}'>\n";
+ $div .= "<input type='button' onclick='show_{$fieldname}()' value='" . gettext("Advanced") . "' /> - " . gettext("Show advanced option") ."</div>\n";
+ $div .= "<div id='show_{$fieldname}' style='display:none'>\n";
+ return $div;
+}
+
+?>
diff --git a/src/usr/local/www/pkg_mgr.php b/src/usr/local/www/pkg_mgr.php
new file mode 100644
index 0000000..85f378f
--- /dev/null
+++ b/src/usr/local/www/pkg_mgr.php
@@ -0,0 +1,221 @@
+<?php
+/* $Id$ */
+/*
+ pkg_mgr.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013 Marcello Coutinho
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-system-packagemanager
+##|*NAME=System: Package Manager page
+##|*DESCR=Allow access to the 'System: Package Manager' page.
+##|*MATCH=pkg_mgr.php*
+##|-PRIV
+
+ini_set('max_execution_time', '0');
+
+require_once("globals.inc");
+require_once("guiconfig.inc");
+require_once("pkg-utils.inc");
+
+/* if upgrade in progress, alert user */
+if (is_subsystem_dirty('packagelock')) {
+ $pgtitle = array(gettext("System"), gettext("Package Manager"));
+ include("head.inc");
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+ include("fbegin.inc");
+ echo "Please wait while packages are reinstalled in the background.";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+function domTT_title($title_msg) {
+ if (!empty($title_msg)) {
+ $title_msg = preg_replace("/\s+/", " ", $title_msg);
+ $title_msg = preg_replace("/'/", "\'", $title_msg);
+ echo "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
+ }
+}
+
+$pkg_info = get_pkg_info();
+
+$closehead = false;
+$pgtitle = array(gettext("System"), gettext("Package Manager"));
+include("head.inc");
+
+?>
+<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
+<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
+<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
+<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
+<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php
+ include("fbegin.inc");
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager">
+ <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Available Packages"), true, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Installed Packages"), false, "pkg_mgr_installed.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr><td>
+<?php
+ if ($pkg_info) {
+ //Check categories
+ $categories = array();
+ foreach ($pkg_info as $pkg_data) {
+ if (isset($pkg_data['categories'][0])) {
+ $categories[$pkg_data['categories'][0]]++;
+ }
+ }
+ ksort($categories);
+ $cm_count = 0;
+ $tab_array = array();
+ $visible_categories = array();
+ $categories_min_count = ($g['pkg_categories_min_count'] ? $g['pkg_categories_min_count'] : 3);
+ $categories_max_display = ($g['pkg_categories_max_display'] ? $g['pkg_categories_max_display'] : 6);
+
+ /* check selected category or define default category to show */
+ if (isset($_REQUEST['category'])) {
+ $menu_category = $_REQUEST['category'];
+ } else if (isset($g['pkg_default_category'])) {
+ $menu_category = $g['pkg_default_category'];
+ } else {
+ $menu_category = "All";
+ }
+
+ $menu_category = (isset($_REQUEST['category']) ? $_REQUEST['category'] : "All");
+ $show_category = ($menu_category == "Other" || $menu_category == "All");
+
+ $tab_array[] = array(gettext("All"), $menu_category == "All" ? true : false, "pkg_mgr.php?category=All");
+ foreach ($categories as $category => $c_count) {
+ if ($c_count >= $categories_min_count && $cm_count <= $categories_max_display) {
+ $tab_array[] = array(gettext($category) , $menu_category == $category ? true : false, "pkg_mgr.php?category={$category}");
+ $visible_categories[]=$category;
+ $cm_count++;
+ }
+ }
+ $tab_array[] = array(gettext("Other Categories"), $menu_category == "Other" ? true : false, "pkg_mgr.php?category=Other");
+ if (count($categories) > 1) {
+ display_top_tabs($tab_array);
+ }
+ }
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
+<?php
+ if ($show_category) {
+ print '<td width="18%" class="listhdr">'.gettext("Category").'</td>'."\n";
+ }
+?>
+ <td width="<?php print $show_category ? "15%" : "20%"; ?>" class="listhdr"><?=gettext("Version"); ?></td>
+ <td width="<?php print $show_category ? "58%" : "70%"; ?>" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="17">&nbsp;</td>
+ </tr>
+<?php
+ if (!$pkg_info) {
+ echo "<tr><td colspan=\"5\"><center>" . gettext("There are currently no packages available for installation.") . "</td></tr>";
+ } else {
+ if (is_array($pkg_info)) {
+ foreach ($pkg_info as $index):
+ if (get_package_id($index['name']) >= 0) {
+ continue;
+ }
+
+ $shortname = $index['name'];
+ pkg_remove_prefix($shortname);
+
+ /* Check package info link */
+ if ($index['www'] && $index['www'] != 'UNKNOWN') {
+ $pkginfolink = $index['www'];
+ $pkginfo=gettext("Package info");
+ } else {
+ $pkginfolink = "https://forum.pfsense.org/index.php/board,15.0.html";
+ $pkginfo=gettext("No package info, check the forum");
+ }
+
+ if ($menu_category == "All" || $index['categories'][0] == $menu_category || ($menu_category == "Other" && !in_array($index['categories'][0], $visible_categories))):
+?>
+ <tr valign="top" class="<?= $index['categories'][0] ?>">
+ <td class="listlr" <?=domTT_title(gettext("Click on package name to access its website."))?>>
+ <a target="_blank" href="<?= $index['www'] ?>"><?=$shortname;?></a>
+ </td>
+<?php
+ if ($show_category) {
+ print '<td class="listr">'.gettext($index['categories'][0]).'</td>'."\n";
+ }
+
+?>
+ <td class="listr"><?=$index['version'];?></td>
+ <td class="listbg" style="overflow:hidden; text-align:justify;" <?=domTT_title(gettext("Click package info for more details about ".ucfirst($shortname)." package."))?>>
+ <?=str_replace("\n", '<br />', $index['desc']);?>
+<?php
+ if (!$g['disablepackageinfo']):
+?>
+ <br /><br />
+ <a target='_blank' href='<?=$pkginfolink?>' style='align:center;color:#ffffff; filter:Glow(color=#ff0000, strength=12);'><?=$pkginfo?></a>
+<?php
+ endif;
+?>
+ </td>
+ <td valign="middle" class="list nowrap" width="17">
+ <a href="pkg_mgr_install.php?id=<?=$shortname;?>"><img <?=domTT_title(gettext("Install ".ucfirst($shortname)." package."))?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+<?php
+ endif;
+ endforeach;
+ } else {
+ echo "<tr><td colspan='5' align='center'>" . gettext("There are currently no packages available for installation.") . "</td></tr>";
+ } /* if (is_array($pkg_info)) */
+ } /* if (!$pkg_info) */
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/pkg_mgr_install.php b/src/usr/local/www/pkg_mgr_install.php
new file mode 100644
index 0000000..1de2a40
--- /dev/null
+++ b/src/usr/local/www/pkg_mgr_install.php
@@ -0,0 +1,323 @@
+<?php
+/* $Id$ */
+/*
+ pkg_mgr_install.php
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2005 Colin Smith
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-system-packagemanager-installpackage
+##|*NAME=System: Package Manager: Install Package page
+##|*DESCR=Allow access to the 'System: Package Manager: Install Package' page.
+##|*MATCH=pkg_mgr_install.php*
+##|-PRIV
+
+ini_set('max_execution_time', '0');
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("pkg-utils.inc");
+
+global $static_output;
+
+$static_output = "";
+$static_status = "";
+$sendto = "output";
+
+$pgtitle = array(gettext("System"), gettext("Package Manager"), gettext("Install Package"));
+include("head.inc");
+
+if ($_POST) {
+ if (isset($_POST['pkgcancel']) || (empty($_POST['id']) && $_POST['mode'] != 'reinstallall')) {
+ header("Location: pkg_mgr_installed.php");
+ return;
+ }
+} else if ($_GET) {
+ switch ($_GET['mode']) {
+ case 'reinstallall':
+ case 'showlog':
+ break;
+ case 'installedinfo':
+ case 'reinstallxml':
+ case 'reinstallpkg':
+ case 'delete':
+ if (empty($_GET['pkg'])) {
+ header("Location: pkg_mgr_installed.php");
+ return;
+ }
+ break;
+ default:
+ if (empty($_GET['id'])) {
+ header("Location: pkg_mgr_installed.php");
+ return;
+ }
+ break;
+ }
+}
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+ <form action="pkg_mgr_install.php" method="post">
+ <div id="mainareapkg">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager install">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Available packages"), false, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Installed packages"), false, "pkg_mgr_installed.php");
+ $tab_array[] = array(gettext("Package Installer"), true, "");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+<?php
+if ((empty($_GET['mode']) && $_GET['id']) || (!empty($_GET['mode']) && (!empty($_GET['pkg']) || $_GET['mode'] == 'reinstallall') && ($_GET['mode'] != 'installedinfo' && $_GET['mode'] != 'showlog'))):
+ if (empty($_GET['mode']) && $_GET['id']) {
+ $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['id'], ENT_QUOTES | ENT_HTML401));
+ $pkgmode = 'installed';
+ } else if (!empty($_GET['mode']) && !empty($_GET['pkg'])) {
+ $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES | ENT_HTML401));
+ $pkgmode = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['mode'], ENT_QUOTES | ENT_HTML401));
+ } else if ($_GET['mode'] == 'reinstallall') {
+ $pkgmode = 'reinstallall';
+ }
+ $pkg_gui_xml_text = "";
+ switch ($pkgmode) {
+ case 'reinstallall':
+ $pkgname = 'All packages';
+ $pkgtxt = 'reinstalled';
+ break;
+ case 'reinstallxml':
+ $pkg_gui_xml_text = " GUI XML components";
+ case 'reinstallpkg':
+ $pkgtxt = 'reinstalled';
+ break;
+ case 'delete':
+ $pkgtxt = 'deleted';
+ break;
+ default:
+ $pkgtxt = $pkgmode;
+ break;
+ }
+?>
+ <tr>
+ <td class="tabcont" align="center">
+ <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
+ <tr>
+ <td class="tabcont" align="center">Package: <b><?=$pkgname;?></b><?=$pkg_gui_xml_text;?> will be <?=$pkgtxt;?>.<br/>
+ Please confirm the action.<br/>
+ </td>
+ <td class="tabcont" align="center">
+ <input type="hidden" name="id" value="<?=$pkgname;?>" />
+ <input type="hidden" name="mode" value="<?=$pkgmode;?>" />
+ <input type="submit" name="pkgconfirm" id="pkgconfirm" value="Confirm"/>
+ <input type="submit" name="pkgcancel" id="pkgcancel" value="Cancel"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+endif;
+if (!empty($_POST['id']) || $_GET['mode'] == 'showlog' || ($_GET['mode'] == 'installedinfo' && !empty($_GET['pkg']))):
+?>
+ <tr>
+ <td class="tabcont" align="center">
+ <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"></td>
+ <td>
+ <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="progress bar">
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
+ <img src='./themes/<?= $g['theme']; ?>/images/misc/bar_blue.gif' width="0" height="15" name="progressbar" id="progressbar" alt="progress bar" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5">
+ </td>
+ </tr>
+ </table>
+ <br />
+ <!-- status box -->
+ <textarea cols="80" rows="1" name="status" id="status" wrap="hard"><?=gettext("Beginning package installation.");?></textarea>
+ <br />
+ <!-- command output box -->
+ <textarea cols="80" rows="35" name="output" id="output" wrap="hard"></textarea>
+ </td>
+ </tr>
+<?php endif; ?>
+ </table>
+ </div>
+ </form>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+NiftyCheck();
+Rounded("div#mainareapkg","bl br","#FFF","#eeeeee","smooth");
+//]]>
+</script>
+
+<?php
+
+ob_flush();
+
+if ($_GET) {
+ $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES | ENT_HTML401));
+ switch ($_GET['mode']) {
+ case 'showlog':
+ if (strpos($pkgname, ".")) {
+ update_output_window(gettext("Something is wrong on the request."));
+ } else if (file_exists("/tmp/pkg_mgr_{$pkgname}.log")) {
+ update_output_window(@file_get_contents("/tmp/pkg_mgr_{$pkgname}.log"));
+ } else {
+ update_output_window(gettext("Log was not retrievable."));
+ }
+ break;
+ case 'installedinfo':
+ if (file_exists("/tmp/{$pkgname}.info")) {
+ $status = @file_get_contents("/tmp/{$pkgname}.info");
+ update_status("{$pkgname} " . gettext("installation completed."));
+ update_output_window($status);
+ } else {
+ update_output_window(sprintf(gettext("Could not find %s."), $pkgname));
+ }
+ break;
+ default:
+ break;
+ }
+} else if ($_POST) {
+ $pkgid = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_POST['id'], ENT_QUOTES | ENT_HTML401));
+
+ /* All other cases make changes, so mount rw fs */
+ conf_mount_rw();
+ /* Write out configuration to create a backup prior to pkg install. */
+ write_config(gettext("Creating restore point before package installation."));
+
+ switch ($_POST['mode']) {
+ case 'delete':
+ uninstall_package($pkgid);
+ update_status(gettext("Package deleted."));
+ $static_output .= "\n" . gettext("Package deleted.");
+ update_output_window($static_output);
+ filter_configure();
+ break;
+ case 'reinstallxml':
+ pkg_fetch_config_file($pkgid);
+ pkg_fetch_additional_files($pkgid);
+ break;
+ case 'reinstallpkg':
+ delete_package_xml($pkgid);
+ if (install_package($pkgid) != 0) {
+ update_status(gettext("Package reinstallation failed."));
+ $static_output .= "\n" . gettext("Package reinstallation failed.");
+ update_output_window($static_output);
+ } else {
+ update_status(gettext("Package reinstalled."));
+ $static_output .= "\n" . gettext("Package reinstalled.");
+ update_output_window($static_output);
+ filter_configure();
+ }
+ @file_put_contents("/tmp/{$pkgid}.info", $static_output);
+ $pkgid = htmlspecialchars($pkgid);
+ echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$pkgid}\";</script>";
+ send_event("service restart packages");
+ break;
+ case 'reinstallall':
+ if (is_array($config['installedpackages']) && is_array($config['installedpackages']['package'])) {
+ $todo = array();
+ foreach ($config['installedpackages']['package'] as $package) {
+ $todo[] = array('name' => $package['name'], 'version' => $package['version']);
+ }
+ foreach ($todo as $pkgtodo) {
+ $static_output = "";
+ if ($pkgtodo['name']) {
+ update_output_window($static_output);
+ uninstall_package($pkgtodo['name']);
+ install_package($pkgtodo['name']);
+ }
+ }
+ update_status(gettext("All packages reinstalled."));
+ $static_output .= "\n" . gettext("All packages reinstalled.");
+ update_output_window($static_output);
+ filter_configure();
+ send_event("service restart packages");
+ } else {
+ update_output_window(gettext("No packages are installed."));
+ }
+ break;
+ case 'installed':
+ default:
+ $status = install_package($pkgid);
+ if ($status != 0) {
+ update_status(gettext("Installation of") . " {$pkgid} " . gettext("FAILED!"));
+ $static_output .= "\n" . gettext("Installation halted.");
+ update_output_window($static_output);
+ } else {
+ $status_a = gettext(sprintf("Installation of %s completed.", $pkgid));
+ update_status($status_a);
+ $status = get_after_install_info($pkgid);
+ if ($status) {
+ $static_output .= "\n" . gettext("Installation completed.") . "\n{$pkgid} " . gettext("setup instructions") . ":\n{$status}";
+ } else {
+ $static_output .= "\n" . gettext("Installation completed. Please check to make sure that the package is configured from the respective menu then start the package.");
+ }
+
+ @file_put_contents("/tmp/{$pkgid}.info", $static_output);
+ echo "<script type='text/javascript'>document.location=\"pkg_mgr_install.php?mode=installedinfo&pkg={$pkgid}\";</script>";
+ }
+ filter_configure();
+ break;
+ }
+
+ // Delete all temporary package tarballs and staging areas.
+ unlink_if_exists("/tmp/apkg_*");
+ rmdir_recursive("/var/tmp/instmp*");
+
+ // close log
+ if ($fd_log) {
+ fclose($fd_log);
+ }
+
+ /* Restore to read only fs */
+ conf_mount_ro();
+}
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/pkg_mgr_installed.php b/src/usr/local/www/pkg_mgr_installed.php
new file mode 100644
index 0000000..3801271
--- /dev/null
+++ b/src/usr/local/www/pkg_mgr_installed.php
@@ -0,0 +1,259 @@
+<?php
+/* $Id$ */
+/*
+ pkg_mgr_installed.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2012 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-system-packagemanager-installed
+##|*NAME=System: Package Manager: Installed page
+##|*DESCR=Allow access to the 'System: Package Manager: Installed' page.
+##|*MATCH=pkg_mgr_installed.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("pkg-utils.inc");
+
+$timezone = $config['system']['timezone'];
+if (!$timezone) {
+ $timezone = "Etc/UTC";
+}
+
+date_default_timezone_set($timezone);
+
+/* if upgrade in progress, alert user */
+if (is_subsystem_dirty('packagelock')) {
+ $pgtitle = array(gettext("System"), gettext("Package Manager"));
+ include("head.inc");
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+ include("fbegin.inc");
+ echo "Please wait while packages are reinstalled in the background.";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+
+function domTT_title($title_msg, $return="echo") {
+ if (!empty($title_msg)) {
+ $title_msg = preg_replace("/\s+/", " ", $title_msg);
+ $title_msg = preg_replace("/'/", "\'", $title_msg);
+ $title= "onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\" onmouseover=\"domTT_activate(this, event, 'content', '{$title_msg}', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\"";
+ if ($return =="echo") {
+ echo $title;
+ } else {
+ return $title;
+ }
+ }
+}
+if (is_array($config['installedpackages']['package'])) {
+ foreach ($config['installedpackages']['package'] as $instpkg) {
+ $tocheck[] = $instpkg['name'];
+ }
+ $currentvers = get_pkg_info($tocheck, array('version', 'xmlver', 'pkginfolink', 'descr'));
+}
+$closehead = false;
+$pgtitle = array(gettext("System"), gettext("Package Manager"));
+include("head.inc");
+
+?>
+<script type="text/javascript" src="javascript/domTT/domLib.js"></script>
+<script type="text/javascript" src="javascript/domTT/domTT.js"></script>
+<script type="text/javascript" src="javascript/domTT/behaviour.js"></script>
+<script type="text/javascript" src="javascript/domTT/fadomatic.js"></script>
+<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <?php include("fbegin.inc");
+
+ /* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
+ if (!verify_all_package_servers()) {
+ print_info_box(package_server_mismatch_message());
+ }
+
+ /* Print package server SSL warning. See https://redmine.pfsense.org/issues/484 */
+ if (check_package_server_ssl() === false) {
+ print_info_box(package_server_ssl_failure_message());
+ }
+?>
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="packages installed">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Available Packages"), false, "pkg_mgr.php");
+// $tab_array[] = array("{$g['product_version']} " . gettext("packages"), false, "pkg_mgr.php");
+// $tab_array[] = array("Packages for any platform", false, "pkg_mgr.php?ver=none");
+// $tab_array[] = array("Packages for a different platform", $requested_version == "other" ? true : false, "pkg_mgr.php?ver=other");
+ $tab_array[] = array(gettext("Installed Packages"), true, "pkg_mgr_installed.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="12%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="16%" class="listhdrr"><?=gettext("Category"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Version"); ?></td>
+ <td width="53%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="40">&nbsp;</td>
+ </tr>
+ <?php
+ if (is_array($config['installedpackages']['package'])):
+
+ $instpkgs = array();
+ foreach ($config['installedpackages']['package'] as $instpkg) {
+ $instpkgs[] = $instpkg['name'];
+ }
+ natcasesort($instpkgs);
+
+ foreach ($instpkgs as $index => $pkgname):
+
+ $pkg = $config['installedpackages']['package'][$index];
+ if (!$pkg['name']) {
+ continue;
+ }
+
+ // get history/changelog git dir
+ $commit_dir = explode("/", $pkg['config_file']);
+ $changeloglink = "https://github.com/pfsense/pfsense-packages/commits/master/config/" . $commit_dir[(count($commit_dir)-2)];
+ #check package version
+ $latest_package = $currentvers[$pkg['name']]['version'];
+ if ($latest_package) {
+ // we're running a newer version of the package
+ if (strcmp($pkg['version'], $latest_package) > 0) {
+ $tdclass = "listbggrey";
+ if ($g['disablepackagehistory']) {
+ $pkgver = "<a>" . gettext("Available") . ": " . $latest_package . "<br />";
+ } else {
+ $pkgver = "<a target='_blank' href='$changeloglink'>" . gettext("Available") . ": " . $latest_package . "<br />";
+ }
+ $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</a>";
+ }
+ // we're running an older version of the package
+ if (strcmp($pkg['version'], $latest_package) < 0) {
+ $tdclass = "listbg";
+ if ($g['disablepackagehistory']) {
+ $pkgver = "<a><font color='#ffffff'>" . gettext("Available") . ": " . $latest_package . "</font><br />";
+ } else {
+ $pkgver = "<a target='_blank' href='$changeloglink'><font color='#ffffff'>" . gettext("Available") . ": " . $latest_package . "<br />";
+ }
+ $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</font></a>";
+ }
+ // we're running the current version
+ if (!strcmp($pkg['version'], $latest_package)) {
+ $tdclass = "listr";
+ if ($g['disablepackagehistory']) {
+ $pkgver = "<a>{$pkg['version']}</a>";
+ } else {
+ $pkgver = "<a target='_blank' href='$changeloglink'>{$pkg['version']}</a>";
+ }
+ }
+ $pkgdescr = $currentvers[$pkg['name']]['descr'];
+ } else {
+ // unknown available package version
+ $tdclass = "listbg";
+ if ($g['disablepackagehistory']) {
+ $pkgver = "<a><font color='#ffffff'>" . gettext("Latest") . ": " . gettext("N/A") . "</font><br />";
+ } else {
+ $pkgver = "<a target='_blank' href='$changeloglink'><font color='#ffffff'>" . gettext("Latest") . ": " . gettext("N/A") . "<br />";
+ }
+ $pkgver .= gettext("Installed") . ": " . $pkg['version'] . "</font></a>";
+ $pkgdescr = $pkg['descr'];
+ }
+ /* Check package info link */
+ if ($pkg['pkginfolink']) {
+ $pkginfolink = $pkg['pkginfolink'];
+ $pkginfo=gettext("Package info");
+ } else {
+ $pkginfolink = "https://forum.pfsense.org/index.php/board,15.0.html";
+ $pkginfo=gettext("No package info, check the forum");
+ }
+
+ ?>
+ <tr valign="top">
+ <td class="listlr">
+ <?=$pkg['name'];?>
+ </td>
+ <td class="listr">
+ <?=$pkg['category'];?>
+ </td>
+ <?php
+ if (isset($g['disablepackagehistory'])) {
+ echo "<td class='{$tdclass}'>{$pkgver}</td>";
+ } else {
+ echo "<td class='{$tdclass}' " . domTT_title(gettext("Click on " . ucfirst($pkg['name']) . " version to check its change log."), "return").">{$pkgver}</td>";
+ }
+ ?>
+ <td class="listbg" style="overflow:hidden; text-align:justify;" <?=domTT_title(gettext("Click package info for more details about " . ucfirst($pkg['name']) . " package."))?>>
+ <?=$pkgdescr;?>
+ <?php if (!$g['disablepackageinfo']): ?>
+ <br /><br />
+ <a target='_blank' href='<?=$pkginfolink?>' style='align:center;color:#ffffff; filter:Glow(color=#ff0000, strength=12);'><?=$pkginfo?></a>
+ <?php endif; ?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="pkg_mgr_install.php?mode=delete&amp;pkg=<?= $pkg['name']; ?>">
+ <img <?=domTT_title(gettext("Remove " . ucfirst($pkg['name']) . " package."))?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
+ </a>
+ <br />
+ <a href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?= $pkg['name']; ?>">
+ <img <?=domTT_title(gettext("Reinstall " . ucfirst($pkg['name']) . " package."));?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0" alt="reinstall" />
+ </a>
+ <a href="pkg_mgr_install.php?mode=reinstallxml&amp;pkg=<?= $pkg['name']; ?>">
+ <img <?=domTT_title(gettext("Reinstall " . ucfirst($pkg['name']) . "'s GUI components."));?> src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_xml.gif" width="17" height="17" border="0" alt="reinstall" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ endforeach;
+ else:
+ ?>
+ <tr>
+ <td colspan="5" align="center">
+ <?=gettext("There are no packages currently installed."); ?>
+ </td>
+ </tr>
+ <?php
+ endif;
+ ?>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/pkg_mgr_settings.php b/src/usr/local/www/pkg_mgr_settings.php
new file mode 100644
index 0000000..04a5151
--- /dev/null
+++ b/src/usr/local/www/pkg_mgr_settings.php
@@ -0,0 +1,163 @@
+<?php
+/* $Id$ */
+/*
+ pkg_mgr_settings.php
+ part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Jim Pingle <jimp@pfsense.org>
+ Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2005 Colin Smith
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-pkg-mgr-settings
+##|*NAME=Packages: Settings page
+##|*DESCR=Allow access to the 'Packages: Settings' page.
+##|*MATCH=pkg_mgr_settings.php*
+##|-PRIV
+
+ini_set('max_execution_time', '0');
+
+require_once("globals.inc");
+require_once("guiconfig.inc");
+require_once("pkg-utils.inc");
+
+if ($_POST) {
+ if (!$input_errors) {
+ if ($_POST['alturlenable'] == "yes") {
+ $config['system']['altpkgrepo']['enable'] = true;
+ $config['system']['altpkgrepo']['xmlrpcbaseurl'] = $_POST['pkgrepourl'];
+ } else {
+ unset($config['system']['altpkgrepo']['enable']);
+ }
+ write_config();
+ }
+}
+
+$curcfg = $config['system']['altpkgrepo'];
+$closehead = false;
+$pgtitle = array(gettext("System"), gettext("Package Settings"));
+include("head.inc");
+?>
+<script type="text/javascript">
+//<![CDATA[
+
+function enable_altpkgrepourl(enable_over) {
+ if (document.iform.alturlenable.checked || enable_over) {
+ document.iform.pkgrepourl.disabled = 0;
+ } else {
+ document.iform.pkgrepourl.disabled = 1;
+ }
+}
+
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc");
+
+ /* Print package server mismatch warning. See https://redmine.pfsense.org/issues/484 */
+ if (!verify_all_package_servers()) {
+ print_info_box(package_server_mismatch_message());
+ }
+
+ /* Print package server SSL warning. See https://redmine.pfsense.org/issues/484 */
+ if (check_package_server_ssl() === false) {
+ print_info_box(package_server_ssl_failure_message());
+ }
+?>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="pkg_mgr_settings.php" method="post" name="iform" id="iform">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="package manager settings">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(sprintf(gettext("%s packages"), $g['product_version']), false, "pkg_mgr.php");
+ $tab_array[] = array(gettext("Installed Packages"), false, "pkg_mgr_installed.php");
+ $tab_array[] = array(gettext("Package Settings"), true, "pkg_mgr_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="vncell">
+ <?php echo gettext("This page allows an alternate package repository to be configured, primarily for temporary use as a testing mechanism."); ?>
+ <?php echo gettext("The contents of unofficial packages servers cannot be verified and may contain malicious files."); ?>
+ <?php echo gettext("The package server settings should remain at their default values to ensure that verifiable and trusted packages are recevied."); ?>
+ <br/><br/>
+ <?php echo gettext("A warning is printed on the Dashboard and in the package manager when an unofficial package server is in use."); ?>
+ <br/><br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Package Repository URL");?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Package Repository URL");?></td>
+ <td class="vtable">
+ <input name="alturlenable" type="checkbox" id="alturlenable" value="yes" onclick="enable_altpkgrepourl()" <?php if (isset($curcfg['enable'])) echo "checked=\"checked\""; ?> /> <?=gettext("Use a non-official server for packages");?> <br />
+ <table summary="alternative URL">
+ <tr>
+ <td><?=gettext("Base URL:");?></td>
+ <td>
+ <input name="pkgrepourl" type="text" class="formfld url" id="pkgrepourl" size="64" value="<?php if ($curcfg['xmlrpcbaseurl']) echo htmlspecialchars($curcfg['xmlrpcbaseurl']); else echo $g['']; ?>" />
+ </td>
+ </tr>
+ </table>
+ <span class="vexpl">
+ <?php printf(gettext("This is where %s will check for packages when the"), $g['product_name']);?> <a href="pkg_mgr.php"><?=gettext("System: Packages");?></a> <?=gettext("page is viewed.");?>
+ </span>
+ </td>
+ </tr>
+ <script type="text/javascript">
+ //<![CDATA[
+ enable_altpkgrepourl();
+ //]]>
+ </script>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/protochart/ProtoChart.js b/src/usr/local/www/protochart/ProtoChart.js
new file mode 100644
index 0000000..4e60f18
--- /dev/null
+++ b/src/usr/local/www/protochart/ProtoChart.js
@@ -0,0 +1,2653 @@
+/**
+ * Class: ProtoChart
+ * Version: v0.5 beta
+ *
+ * ProtoChart is a charting lib on top of Prototype.
+ * This library is heavily motivated by excellent work done by:
+ * * Flot <http://code.google.com/p/flot/>
+ * * Flotr <http://solutoire.com/flotr/>
+ *
+ * Complete examples can be found at: <http://www.deensoft.com/lab/protochart>
+ */
+
+/**
+ * Events:
+ * ProtoChart:mousemove - Fired when mouse is moved over the chart
+ * ProtoChart:plotclick - Fired when graph is clicked
+ * ProtoChart:dataclick - Fired when graph is clicked AND the click is on a data point
+ * ProtoChart:selected - Fired when certain region on the graph is selected
+ * ProtoChart:hit - Fired when mouse is moved near or over certain data point on the graph
+ */
+
+
+if(!Proto) var Proto = {};
+
+Proto.Chart = Class.create({
+ /**
+ * Function:
+ * {Object} elem
+ * {Object} data
+ * {Object} options
+ */
+ initialize: function(elem, data, options)
+ {
+ options = options || {};
+ this.graphData = [];
+ /**
+ * Property: options
+ *
+ * Description: Various options can be set. More details in description.
+ *
+ * colors:
+ * {Array} - pass in a array which contains strings of colors you want to use. Default has 6 color set.
+ *
+ * legend:
+ * {BOOL} - show - if you want to show the legend. Default is false
+ * {integer} - noColumns - Number of columns for the legend. Default is 1
+ * {function} - labelFormatter - A function that returns a string. The function is called with a string and is expected to return a string. Default = null
+ * {string} - labelBoxBorderColor - border color for the little label boxes. Default #CCC
+ * {HTMLElem} - container - an HTML id or HTML element where the legend should be rendered. If left null means to put the legend on top of the Chart
+ * {string} - position - position for the legend on the Chart. Default value 'ne'
+ * {integer} - margin - default valud of 5
+ * {string} - backgroundColor - default to null (which means auto-detect)
+ * {float} - backgroundOpacity - leave it 0 to avoid background
+ *
+ * xaxis (yaxis) options:
+ * {string} - mode - default is null but you can pass a string "time" to indicate time series
+ * {integer} - min
+ * {integer} - max
+ * {float} - autoscaleMargin - in % to add if auto-setting min/max
+ * {mixed} - ticks - either [1, 3] or [[1, "a"], 3] or a function which gets axis info and returns ticks
+ * {function} - tickFormatter - A function that returns a string as a tick label. Default is null
+ * {float} - tickDecimals
+ * {integer} - tickSize
+ * {integer} - minTickSize
+ * {array} - monthNames
+ * {string} - timeformat
+ *
+ * Points / Lines / Bars options:
+ * {bool} - show, default is false
+ * {integer} - radius: default is 3
+ * {integer} - lineWidth : default is 2
+ * {bool} - fill : default is true
+ * {string} - fillColor: default is #ffffff
+ *
+ * Grid options:
+ * {string} - color
+ * {string} - backgroundColor - defualt is *null*
+ * {string} - tickColor - default is *#dddddd*
+ * {integer} - labelMargin - should be in pixels default is 3
+ * {integer} - borderWidth - default *1*
+ * {bool} - clickable - default *null* - pass in TRUE if you wish to monitor click events
+ * {mixed} - coloredAreas - default *null* - pass in mixed object eg. {x1, x2}
+ * {string} - coloredAreasColor - default *#f4f4f4*
+ * {bool} - drawXAxis - default *true*
+ * {bool} - drawYAxis - default *true*
+ *
+ * selection options:
+ * {string} - mode : either "x", "y" or "xy"
+ * {string} - color : string
+ */
+ this.options = this.merge(options,{
+ colors: ["#edc240", "#00A8F0", "#C0D800", "#cb4b4b", "#4da74d", "#9440ed"],
+ legend: {
+ show: false,
+ noColumns: 1,
+ labelFormatter: null,
+ labelBoxBorderColor: "#ccc",
+ container: null,
+ position: "ne",
+ margin: 5,
+ backgroundColor: null,
+ backgroundOpacity: 0.85
+ },
+ xaxis: {
+ mode: null,
+ min: null,
+ max: null,
+ autoscaleMargin: null,
+ ticks: null,
+ tickFormatter: null,
+ tickDecimals: null,
+ tickSize: null,
+ minTickSize: null,
+ monthNames: null,
+ timeformat: null
+ },
+ yaxis: {
+ mode: null,
+ min: null,
+ max: null,
+ ticks: null,
+ tickFormatter: null,
+ tickDecimals: null,
+ tickSize: null,
+ minTickSize: null,
+ monthNames: null,
+ timeformat: null,
+ autoscaleMargin: 0.02
+ },
+
+ points: {
+ show: false,
+ radius: 3,
+ lineWidth: 2,
+ fill: true,
+ fillColor: "#ffffff"
+ },
+ lines: {
+ show: false,
+ lineWidth: 2,
+ fill: false,
+ fillColor: null
+ },
+ bars: {
+ show: false,
+ lineWidth: 2,
+ barWidth: 1,
+ fill: true,
+ fillColor: null,
+ showShadow: false,
+ fillOpacity: 0.4,
+ autoScale: true
+ },
+ pies: {
+ show: false,
+ radius: 50,
+ borderWidth: 1,
+ fill: true,
+ fillColor: null,
+ fillOpacity: 0.90,
+ labelWidth: 30,
+ fontSize: 11,
+ autoScale: true
+ },
+ grid: {
+ color: "#545454",
+ backgroundColor: null,
+ tickColor: "#dddddd",
+ labelMargin: 3,
+ borderWidth: 1,
+ clickable: null,
+ coloredAreas: null,
+ coloredAreasColor: "#f4f4f4",
+ drawXAxis: true,
+ drawYAxis: true
+ },
+ mouse: {
+ track: false,
+ position: 'se',
+ fixedPosition: true,
+ clsName: 'mouseValHolder',
+ trackFormatter: this.defaultTrackFormatter,
+ margin: 3,
+ color: '#ff3f19',
+ trackDecimals: 1,
+ sensibility: 2,
+ radius: 5,
+ lineColor: '#cb4b4b'
+ },
+ selection: {
+ mode: null,
+ color: "#97CBFF"
+ },
+ allowDataClick: true,
+ makeRandomColor: false,
+ shadowSize: 4
+ });
+
+ /*
+ * Local variables.
+ */
+ this.canvas = null;
+ this.overlay = null;
+ this.eventHolder = null;
+ this.context = null;
+ this.overlayContext = null;
+
+ this.domObj = $(elem);
+
+ this.xaxis = {};
+ this.yaxis = {};
+ this.chartOffset = {left: 0, right: 0, top: 0, bottom: 0};
+ this.yLabelMaxWidth = 0;
+ this.yLabelMaxHeight = 0;
+ this.xLabelBoxWidth = 0;
+ this.canvasWidth = 0;
+ this.canvasHeight = 0;
+ this.chartWidth = 0;
+ this.chartHeight = 0;
+ this.hozScale = 0;
+ this.vertScale = 0;
+ this.workarounds = {};
+
+ this.domObj = $(elem);
+
+ this.barDataRange = [];
+
+ this.lastMousePos = { pageX: null, pageY: null };
+ this.selection = { first: { x: -1, y: -1}, second: { x: -1, y: -1} };
+ this.prevSelection = null;
+ this.selectionInterval = null;
+ this.ignoreClick = false;
+ this.prevHit = null;
+
+ if(this.options.makeRandomColor)
+ this.options.color = this.makeRandomColor(this.options.colors);
+
+ this.setData(data);
+ this.constructCanvas();
+ this.setupGrid();
+ this.draw();
+ },
+ /**
+ * Private function internally used.
+ */
+ merge: function(src, dest)
+ {
+ var result = dest || {};
+ for(var i in src){
+ result[i] = (typeof(src[i]) == 'object' && !(src[i].constructor == Array || src[i].constructor == RegExp)) ? this.merge(src[i], dest[i]) : result[i] = src[i];
+ }
+ return result;
+ },
+ /**
+ * Function: setData
+ * {Object} data
+ *
+ * Description:
+ * Sets datasoruces properly then sets the Bar Width accordingly, then copies the default data options and then processes the graph data
+ *
+ * Returns: none
+ *
+ */
+ setData: function(data)
+ {
+ this.graphData = this.parseData(data);
+ this.setBarWidth();
+ this.copyGraphDataOptions();
+ this.processGraphData();
+ },
+ /**
+ * Function: parseData
+ * {Object} data
+ *
+ * Return:
+ * {Object} result
+ *
+ * Description:
+ * Takes the provided data object and converts it into generic data that we can understand. User can pass in data in 3 different ways:
+ * - [d1, d2]
+ * - [{data: d1, label: "data1"}, {data: d2, label: "data2"}]
+ * - [d1, {data: d1, label: "data1"}]
+ *
+ * This function parses these senarios and makes it readable
+ */
+ parseData: function(data)
+ {
+ var res = [];
+ data.each(function(d){
+ var s;
+ if(d.data) {
+ s = {};
+ for(var v in d) {
+ s[v] = d[v];
+ }
+ }
+ else {
+ s = {data: d};
+ }
+ res.push(s);
+ }.bind(this));
+ return res;
+ },
+ /**
+ * function: makeRandomColor
+ * {Object} colorSet
+ *
+ * Return:
+ * {Array} result - array containing random colors
+ */
+ makeRandomColor: function(colorSet)
+ {
+ var randNum = Math.floor(Math.random() * colorSet.length);
+ var randArr = [];
+ var newArr = [];
+ randArr.push(randNum);
+
+ while(randArr.length < colorSet.length)
+ {
+ var tempNum = Math.floor(Math.random() * colorSet.length);
+
+ while(checkExisted(tempNum, randArr))
+ tempNum = Math.floor(Math.random() * colorSet.length);
+
+ randArr.push(tempNum);
+ }
+
+ randArr.each(function(ra){
+ newArr.push(colorSet[ra]);
+
+ }.bind(this));
+ return newArr;
+ },
+ /**
+ * function: checkExisted
+ * {Object} needle
+ * {Object} haystack
+ *
+ * return:
+ * {bool} existed - true if it finds needle in the haystack
+ */
+ checkExisted: function(needle, haystack)
+ {
+ var existed = false;
+ haystack.each(function(aNeedle){
+ if(aNeedle == needle) {
+ existed = true;
+ throw $break;
+ }
+ }.bind(this));
+ return existed;
+ },
+ /**
+ * function: setBarWidth
+ *
+ * Description: sets the bar width for Bar Graph, you should enable *autoScale* property for bar graph
+ */
+ setBarWidth: function()
+ {
+ if(this.options.bars.show && this.options.bars.autoScale)
+ {
+ this.options.bars.barWidth = 1 / this.graphData.length / 1.2;
+ }
+ },
+ /**
+ * Function: copyGraphDataOptions
+ *
+ * Description: Private function that goes through each graph data (series) and assigned the graph
+ * properties to it.
+ */
+ copyGraphDataOptions: function()
+ {
+ var i, neededColors = this.graphData.length, usedColors = [], assignedColors = [];
+
+ this.graphData.each(function(gd){
+ var sc = gd.color;
+ if(sc) {
+ --neededColors;
+ if(Object.isNumber(sc)) {
+ assignedColors.push(sc);
+ }
+ else {
+ usedColors.push(this.parseColor(sc));
+ }
+ }
+ }.bind(this));
+
+
+ assignedColors.each(function(ac){
+ neededColors = Math.max(neededColors, ac + 1);
+ });
+
+ var colors = [];
+ var variation = 0;
+ i = 0;
+ while (colors.length < neededColors) {
+ var c;
+ if (this.options.colors.length == i) {
+ c = new Proto.Color(100, 100, 100);
+ }
+ else {
+ c = this.parseColor(this.options.colors[i]);
+ }
+
+ var sign = variation % 2 == 1 ? -1 : 1;
+ var factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
+ c.scale(factor, factor, factor);
+
+ colors.push(c);
+
+ ++i;
+ if (i >= this.options.colors.length) {
+ i = 0;
+ ++variation;
+ }
+ }
+
+ var colorIndex = 0, s;
+
+ this.graphData.each(function(gd){
+ if(gd.color == null)
+ {
+ gd.color = colors[colorIndex].toString();
+ ++colorIndex;
+ }
+ else if(Object.isNumber(gd.color)) {
+ gd.color = colors[gd.color].toString();
+ }
+
+ gd.lines = Object.extend(Object.clone(this.options.lines), gd.lines);
+ gd.points = Object.extend(Object.clone(this.options.points), gd.points);
+ gd.bars = Object.extend(Object.clone(this.options.bars), gd.bars);
+ gd.mouse = Object.extend(Object.clone(this.options.mouse), gd.mouse);
+ if (gd.shadowSize == null) {
+ gd.shadowSize = this.options.shadowSize;
+ }
+ }.bind(this));
+
+ },
+ /**
+ * Function: processGraphData
+ *
+ * Description: processes graph data, setup xaxis and yaxis min and max points.
+ */
+ processGraphData: function() {
+
+ this.xaxis.datamin = this.yaxis.datamin = Number.MAX_VALUE;
+ this.xaxis.datamax = this.yaxis.datamax = Number.MIN_VALUE;
+
+ this.graphData.each(function(gd) {
+ var data = gd.data;
+ data.each(function(d){
+ if(d == null) {
+ return;
+ }
+
+ var x = d[0], y = d[1];
+ if(!x || !y || isNaN(x = +x) || isNaN(y = +y)) {
+ d = null;
+ return;
+ }
+
+ if (x < this.xaxis.datamin)
+ this.xaxis.datamin = x;
+ if (x > this.xaxis.datamax)
+ this.xaxis.datamax = x;
+ if (y < this.yaxis.datamin)
+ this.yaxis.datamin = y;
+ if (y > this.yaxis.datamax)
+ this.yaxis.datamax = y;
+ }.bind(this));
+ }.bind(this));
+
+
+ if (this.xaxis.datamin == Number.MAX_VALUE)
+ this.xaxis.datamin = 0;
+ if (this.yaxis.datamin == Number.MAX_VALUE)
+ this.yaxis.datamin = 0;
+ if (this.xaxis.datamax == Number.MIN_VALUE)
+ this.xaxis.datamax = 1;
+ if (this.yaxis.datamax == Number.MIN_VALUE)
+ this.yaxis.datamax = 1;
+ },
+ /**
+ * Function: constructCanvas
+ *
+ * Description: constructs the main canvas for drawing. It replicates the HTML elem (usually DIV) passed
+ * in via constructor. If there is no height/width assigned to the HTML elem then we take a default size
+ * of 400px (width) and 300px (height)
+ */
+ constructCanvas: function() {
+
+ this.canvasWidth = this.domObj.getWidth();
+ this.canvasHeight = this.domObj.getHeight();
+ this.domObj.update(""); // clear target
+ this.domObj.setStyle({
+ "position": "relative"
+ });
+
+ if (this.canvasWidth <= 0) {
+ this.canvasWdith = 400;
+ }
+ if(this.canvasHeight <= 0) {
+ this.canvasHeight = 300;
+ }
+
+ this.canvas = (Prototype.Browser.IE) ? document.createElement("canvas") : new Element("CANVAS", {'width': this.canvasWidth, 'height': this.canvasHeight});
+ Element.extend(this.canvas);
+ this.canvas.style.width = this.canvasWidth + "px";
+ this.canvas.style.height = this.canvasHeight + "px";
+
+ this.domObj.appendChild(this.canvas);
+
+ if (Prototype.Browser.IE) // excanvas hack
+ {
+ this.canvas = $(window.G_vmlCanvasManager.initElement(this.canvas));
+ }
+ this.canvas = $(this.canvas);
+
+ this.context = this.canvas.getContext("2d");
+
+ this.overlay = (Prototype.Browser.IE) ? document.createElement("canvas") : new Element("CANVAS", {'width': this.canvasWidth, 'height': this.canvasHeight});
+ Element.extend(this.overlay);
+ this.overlay.style.width = this.canvasWidth + "px";
+ this.overlay.style.height = this.canvasHeight + "px";
+ this.overlay.style.position = "absolute";
+ this.overlay.style.left = "0px";
+ this.overlay.style.right = "0px";
+
+ this.overlay.setStyle({
+ 'position': 'absolute',
+ 'left': '0px',
+ 'right': '0px'
+ });
+ this.domObj.appendChild(this.overlay);
+
+ if (Prototype.Browser.IE) {
+ this.overlay = $(window.G_vmlCanvasManager.initElement(this.overlay));
+ }
+
+ this.overlay = $(this.overlay);
+ this.overlayContext = this.overlay.getContext("2d");
+
+ if(this.options.selection.mode)
+ {
+ this.overlay.observe('mousedown', this.onMouseDown.bind(this));
+ this.overlay.observe('mousemove', this.onMouseMove.bind(this));
+ }
+ if(this.options.grid.clickable) {
+ this.overlay.observe('click', this.onClick.bind(this));
+ }
+ if(this.options.mouse.track)
+ {
+ this.overlay.observe('mousemove', this.onMouseMove.bind(this));
+ }
+ },
+ /**
+ * function: setupGrid
+ *
+ * Description: a container function that does a few interesting things.
+ *
+ * 1. calls <extendXRangeIfNeededByBar> function which makes sure that our axis are expanded if needed
+ *
+ * 2. calls <setRange> function providing xaxis options which fixes the ranges according to data points
+ *
+ * 3. calls <prepareTickGeneration> function for xaxis which generates ticks according to options provided by user
+ *
+ * 4. calls <setTicks> function for xaxis that sets the ticks
+ *
+ * similar sequence is called for y-axis.
+ *
+ * At the end if this is a pie chart than we insert Labels (around the pie chart) via <insertLabels> and we also call <insertLegend>
+ */
+ setupGrid: function()
+ {
+ if(this.options.bars.show)
+ {
+ this.xaxis.max += 0.5;
+ this.xaxis.min -= 0.5;
+ }
+ //x-axis
+ this.extendXRangeIfNeededByBar();
+ this.setRange(this.xaxis, this.options.xaxis);
+ this.prepareTickGeneration(this.xaxis, this.options.xaxis);
+ this.setTicks(this.xaxis, this.options.xaxis);
+
+
+ //y-axis
+ this.setRange(this.yaxis, this.options.yaxis);
+ this.prepareTickGeneration(this.yaxis, this.options.yaxis);
+ this.setTicks(this.yaxis, this.options.yaxis);
+ this.setSpacing();
+
+ if(!this.options.pies.show)
+ {
+ this.insertLabels();
+ }
+ this.insertLegend();
+ },
+ /**
+ * function: setRange
+ *
+ * parameters:
+ * {Object} axis
+ * {Object} axisOptions
+ */
+ setRange: function(axis, axisOptions) {
+ var min = axisOptions.min != null ? axisOptions.min : axis.datamin;
+ var max = axisOptions.max != null ? axisOptions.max : axis.datamax;
+
+ if (max - min == 0.0) {
+ // degenerate case
+ var widen;
+ if (max == 0.0)
+ widen = 1.0;
+ else
+ widen = 0.01;
+
+ min -= widen;
+ max += widen;
+ }
+ else {
+ // consider autoscaling
+ var margin = axisOptions.autoscaleMargin;
+ if (margin != null) {
+ if (axisOptions.min == null) {
+ min -= (max - min) * margin;
+ // make sure we don't go below zero if all values
+ // are positive
+ if (min < 0 && axis.datamin >= 0)
+ min = 0;
+ }
+ if (axisOptions.max == null) {
+ max += (max - min) * margin;
+ if (max > 0 && axis.datamax <= 0)
+ max = 0;
+ }
+ }
+ }
+ axis.min = min;
+ axis.max = max;
+ },
+ /**
+ * function: prepareTickGeneration
+ *
+ * Parameters:
+ * {Object} axis
+ * {Object} axisOptions
+ */
+ prepareTickGeneration: function(axis, axisOptions) {
+ // estimate number of ticks
+ var noTicks;
+ if (Object.isNumber(axisOptions.ticks) && axisOptions.ticks > 0)
+ noTicks = axisOptions.ticks;
+ else if (axis == this.xaxis)
+ noTicks = this.canvasWidth / 100;
+ else
+ noTicks = this.canvasHeight / 60;
+
+ var delta = (axis.max - axis.min) / noTicks;
+ var size, generator, unit, formatter, i, magn, norm;
+
+ if (axisOptions.mode == "time") {
+ function formatDate(d, fmt, monthNames) {
+ var leftPad = function(n) {
+ n = "" + n;
+ return n.length == 1 ? "0" + n : n;
+ };
+
+ var r = [];
+ var escape = false;
+ if (monthNames == null)
+ monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+ for (var i = 0; i < fmt.length; ++i) {
+ var c = fmt.charAt(i);
+
+ if (escape) {
+ switch (c) {
+ case 'h': c = "" + d.getHours(); break;
+ case 'H': c = leftPad(d.getHours()); break;
+ case 'M': c = leftPad(d.getMinutes()); break;
+ case 'S': c = leftPad(d.getSeconds()); break;
+ case 'd': c = "" + d.getDate(); break;
+ case 'm': c = "" + (d.getMonth() + 1); break;
+ case 'y': c = "" + d.getFullYear(); break;
+ case 'b': c = "" + monthNames[d.getMonth()]; break;
+ }
+ r.push(c);
+ escape = false;
+ }
+ else {
+ if (c == "%")
+ escape = true;
+ else
+ r.push(c);
+ }
+ }
+ return r.join("");
+ }
+
+
+ // map of app. size of time units in milliseconds
+ var timeUnitSize = {
+ "second": 1000,
+ "minute": 60 * 1000,
+ "hour": 60 * 60 * 1000,
+ "day": 24 * 60 * 60 * 1000,
+ "month": 30 * 24 * 60 * 60 * 1000,
+ "year": 365.2425 * 24 * 60 * 60 * 1000
+ };
+
+
+ // the allowed tick sizes, after 1 year we use
+ // an integer algorithm
+ var spec = [
+ [1, "second"], [2, "second"], [5, "second"], [10, "second"],
+ [30, "second"],
+ [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
+ [30, "minute"],
+ [1, "hour"], [2, "hour"], [4, "hour"],
+ [8, "hour"], [12, "hour"],
+ [1, "day"], [2, "day"], [3, "day"],
+ [0.25, "month"], [0.5, "month"], [1, "month"],
+ [2, "month"], [3, "month"], [6, "month"],
+ [1, "year"]
+ ];
+
+ var minSize = 0;
+ if (axisOptions.minTickSize != null) {
+ if (typeof axisOptions.tickSize == "number")
+ minSize = axisOptions.tickSize;
+ else
+ minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
+ }
+
+ for (i = 0; i < spec.length - 1; ++i) {
+ if (delta < (spec[i][0] * timeUnitSize[spec[i][1]] + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {
+ break;
+ }
+ }
+
+ size = spec[i][0];
+ unit = spec[i][1];
+
+ // special-case the possibility of several years
+ if (unit == "year") {
+ magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
+ norm = (delta / timeUnitSize.year) / magn;
+ if (norm < 1.5)
+ size = 1;
+ else if (norm < 3)
+ size = 2;
+ else if (norm < 7.5)
+ size = 5;
+ else
+ size = 10;
+
+ size *= magn;
+ }
+
+ if (axisOptions.tickSize) {
+ size = axisOptions.tickSize[0];
+ unit = axisOptions.tickSize[1];
+ }
+
+ var floorInBase = this.floorInBase; //gives us a reference to a global function..
+
+ generator = function(axis) {
+ var ticks = [],
+ tickSize = axis.tickSize[0], unit = axis.tickSize[1],
+ d = new Date(axis.min);
+
+ var step = tickSize * timeUnitSize[unit];
+
+
+
+ if (unit == "second")
+ d.setSeconds(floorInBase(d.getSeconds(), tickSize));
+ if (unit == "minute")
+ d.setMinutes(floorInBase(d.getMinutes(), tickSize));
+ if (unit == "hour")
+ d.setHours(floorInBase(d.getHours(), tickSize));
+ if (unit == "month")
+ d.setMonth(floorInBase(d.getMonth(), tickSize));
+ if (unit == "year")
+ d.setFullYear(floorInBase(d.getFullYear(), tickSize));
+
+ // reset smaller components
+ d.setMilliseconds(0);
+ if (step >= timeUnitSize.minute)
+ d.setSeconds(0);
+ if (step >= timeUnitSize.hour)
+ d.setMinutes(0);
+ if (step >= timeUnitSize.day)
+ d.setHours(0);
+ if (step >= timeUnitSize.day * 4)
+ d.setDate(1);
+ if (step >= timeUnitSize.year)
+ d.setMonth(0);
+
+
+ var carry = 0, v;
+ do {
+ v = d.getTime();
+ ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
+ if (unit == "month") {
+ if (tickSize < 1) {
+ d.setDate(1);
+ var start = d.getTime();
+ d.setMonth(d.getMonth() + 1);
+ var end = d.getTime();
+ d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
+ carry = d.getHours();
+ d.setHours(0);
+ }
+ else
+ d.setMonth(d.getMonth() + tickSize);
+ }
+ else if (unit == "year") {
+ d.setFullYear(d.getFullYear() + tickSize);
+ }
+ else
+ d.setTime(v + step);
+ } while (v < axis.max);
+
+ return ticks;
+ };
+
+ formatter = function (v, axis) {
+ var d = new Date(v);
+
+ // first check global format
+ if (axisOptions.timeformat != null)
+ return formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
+
+ var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
+ var span = axis.max - axis.min;
+
+ if (t < timeUnitSize.minute)
+ fmt = "%h:%M:%S";
+ else if (t < timeUnitSize.day) {
+ if (span < 2 * timeUnitSize.day)
+ fmt = "%h:%M";
+ else
+ fmt = "%b %d %h:%M";
+ }
+ else if (t < timeUnitSize.month)
+ fmt = "%b %d";
+ else if (t < timeUnitSize.year) {
+ if (span < timeUnitSize.year)
+ fmt = "%b";
+ else
+ fmt = "%b %y";
+ }
+ else
+ fmt = "%y";
+
+ return formatDate(d, fmt, axisOptions.monthNames);
+ };
+ }
+ else {
+ // pretty rounding of base-10 numbers
+ var maxDec = axisOptions.tickDecimals;
+ var dec = -Math.floor(Math.log(delta) / Math.LN10);
+ if (maxDec != null && dec > maxDec)
+ dec = maxDec;
+
+ magn = Math.pow(10, -dec);
+ norm = delta / magn; // norm is between 1.0 and 10.0
+
+ if (norm < 1.5)
+ size = 1;
+ else if (norm < 3) {
+ size = 2;
+ // special case for 2.5, requires an extra decimal
+ if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
+ size = 2.5;
+ ++dec;
+ }
+ }
+ else if (norm < 7.5)
+ size = 5;
+ else
+ size = 10;
+
+ size *= magn;
+
+ if (axisOptions.minTickSize != null && size < axisOptions.minTickSize)
+ size = axisOptions.minTickSize;
+
+ if (axisOptions.tickSize != null)
+ size = axisOptions.tickSize;
+
+ axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);
+
+ var floorInBase = this.floorInBase;
+
+ generator = function (axis) {
+ var ticks = [];
+ var start = floorInBase(axis.min, axis.tickSize);
+ // then spew out all possible ticks
+ var i = 0, v;
+ do {
+ v = start + i * axis.tickSize;
+ ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
+ ++i;
+ } while (v < axis.max);
+ return ticks;
+ };
+
+ formatter = function (v, axis) {
+ if(v) {
+ return v.toFixed(axis.tickDecimals);
+ }
+ return 0;
+ };
+ }
+
+ axis.tickSize = unit ? [size, unit] : size;
+ axis.tickGenerator = generator;
+ if (Object.isFunction(axisOptions.tickFormatter))
+ axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
+ else
+ axis.tickFormatter = formatter;
+ },
+ /**
+ * function: extendXRangeIfNeededByBar
+ */
+ extendXRangeIfNeededByBar: function() {
+
+ if (this.options.xaxis.max == null) {
+ // great, we're autoscaling, check if we might need a bump
+ var newmax = this.xaxis.max;
+ this.graphData.each(function(gd){
+ if(gd.bars.show && gd.bars.barWidth + this.xaxis.datamax > newmax)
+ {
+ newmax = this.xaxis.datamax + gd.bars.barWidth;
+ }
+ }.bind(this));
+ this.xaxis.nax = newmax;
+
+ }
+ },
+ /**
+ * function: setTicks
+ *
+ * parameters:
+ * {Object} axis
+ * {Object} axisOptions
+ */
+ setTicks: function(axis, axisOptions) {
+ axis.ticks = [];
+
+ if (axisOptions.ticks == null)
+ axis.ticks = axis.tickGenerator(axis);
+ else if (typeof axisOptions.ticks == "number") {
+ if (axisOptions.ticks > 0)
+ axis.ticks = axis.tickGenerator(axis);
+ }
+ else if (axisOptions.ticks) {
+ var ticks = axisOptions.ticks;
+
+ if (Object.isFunction(ticks))
+ // generate the ticks
+ ticks = ticks({ min: axis.min, max: axis.max });
+
+ // clean up the user-supplied ticks, copy them over
+ //var i, v;
+ ticks.each(function(t, i){
+ var v = null;
+ var label = null;
+ if(typeof t == 'object') {
+ v = t[0];
+ if(t.length > 1) { label = t[1]; }
+ }
+ else {
+ v = t;
+ }
+ if(!label) {
+ label = axis.tickFormatter(v, axis);
+ }
+ axis.ticks[i] = {v: v, label: label}
+ }.bind(this));
+
+ }
+
+ if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) {
+ if (axisOptions.min == null)
+ axis.min = Math.min(axis.min, axis.ticks[0].v);
+ if (axisOptions.max == null && axis.ticks.length > 1)
+ axis.max = Math.min(axis.max, axis.ticks[axis.ticks.length - 1].v);
+ }
+ },
+ /**
+ * Function: setSpacing
+ *
+ * Parameters: none
+ */
+ setSpacing: function() {
+ // calculate y label dimensions
+ var i, labels = [], l;
+ for (i = 0; i < this.yaxis.ticks.length; ++i) {
+ l = this.yaxis.ticks[i].label;
+
+ if (l)
+ labels.push('<div class="tickLabel">' + l + '</div>');
+ }
+
+ if (labels.length > 0) {
+ var dummyDiv = new Element('div', {'style': 'position:absolute;top:-10000px;font-size:smaller'});
+ dummyDiv.update(labels.join(""));
+ this.domObj.insert(dummyDiv);
+ this.yLabelMaxWidth = dummyDiv.getWidth();
+ this.yLabelMaxHeight = dummyDiv.select('div')[0].getHeight();
+ dummyDiv.remove();
+ }
+
+ var maxOutset = this.options.grid.borderWidth;
+ if (this.options.points.show)
+ maxOutset = Math.max(maxOutset, this.options.points.radius + this.options.points.lineWidth/2);
+ for (i = 0; i < this.graphData.length; ++i) {
+ if (this.graphData[i].points.show)
+ maxOutset = Math.max(maxOutset, this.graphData[i].points.radius + this.graphData[i].points.lineWidth/2);
+ }
+
+ this.chartOffset.left = this.chartOffset.right = this.chartOffset.top = this.chartOffset.bottom = maxOutset;
+
+ this.chartOffset.left += this.yLabelMaxWidth + this.options.grid.labelMargin;
+ this.chartWidth = this.canvasWidth - this.chartOffset.left - this.chartOffset.right;
+
+ this.xLabelBoxWidth = this.chartWidth / 6;
+ labels = [];
+
+ for (i = 0; i < this.xaxis.ticks.length; ++i) {
+ l = this.xaxis.ticks[i].label;
+ if (l) {
+ labels.push('<span class="tickLabel" width="' + this.xLabelBoxWidth + '">' + l + '</span>');
+ }
+ }
+
+ var xLabelMaxHeight = 0;
+ if (labels.length > 0) {
+ var dummyDiv = new Element('div', {'style': 'position:absolute;top:-10000px;font-size:smaller'});
+ dummyDiv.update(labels.join(""));
+ this.domObj.appendChild(dummyDiv);
+ xLabelMaxHeight = dummyDiv.getHeight();
+ dummyDiv.remove();
+ }
+
+ this.chartOffset.bottom += xLabelMaxHeight + this.options.grid.labelMargin;
+ this.chartHeight = this.canvasHeight - this.chartOffset.bottom - this.chartOffset.top;
+ this.hozScale = this.chartWidth / (this.xaxis.max - this.xaxis.min);
+ this.vertScale = this.chartHeight / (this.yaxis.max - this.yaxis.min);
+ },
+ /**
+ * function: draw
+ */
+ draw: function() {
+ if(this.options.bars.show)
+ {
+ this.extendXRangeIfNeededByBar();
+ this.setSpacing();
+ this.drawGrid();
+ this.drawBarGraph(this.graphData, this.barDataRange);
+ }
+ else if(this.options.pies.show)
+ {
+ this.preparePieData(this.graphData);
+ this.drawPieGraph(this.graphData);
+ }
+ else
+ {
+ this.drawGrid();
+ for (var i = 0; i < this.graphData.length; i++) {
+ this.drawGraph(this.graphData[i]);
+ }
+ }
+ },
+ /**
+ * function: translateHoz
+ *
+ * Paramters:
+ * {Object} x
+ *
+ * Description: Given a value this function translate it to relative x coord on canvas
+ */
+ translateHoz: function(x) {
+ return (x - this.xaxis.min) * this.hozScale;
+ },
+ /**
+ * function: translateVert
+ *
+ * parameters:
+ * {Object} y
+ *
+ * Description: Given a value this function translate it to relative y coord on canvas
+ */
+ translateVert: function(y) {
+ return this.chartHeight - (y - this.yaxis.min) * this.vertScale;
+ },
+ /**
+ * function: drawGrid
+ *
+ * parameters: none
+ *
+ * description: draws the actual grid on the canvas
+ */
+ drawGrid: function() {
+ var i;
+
+ this.context.save();
+ this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight);
+ this.context.translate(this.chartOffset.left, this.chartOffset.top);
+
+ // draw background, if any
+ if (this.options.grid.backgroundColor != null) {
+ this.context.fillStyle = this.options.grid.backgroundColor;
+ this.context.fillRect(0, 0, this.chartWidth, this.chartHeight);
+ }
+
+ // draw colored areas
+ if (this.options.grid.coloredAreas) {
+ var areas = this.options.grid.coloredAreas;
+ if (Object.isFunction(areas)) {
+ areas = areas({ xmin: this.xaxis.min, xmax: this.xaxis.max, ymin: this.yaxis.min, ymax: this.yaxis.max });
+ }
+
+ areas.each(function(a){
+ // clip
+ if (a.x1 == null || a.x1 < this.xaxis.min)
+ a.x1 = this.xaxis.min;
+ if (a.x2 == null || a.x2 > this.xaxis.max)
+ a.x2 = this.xaxis.max;
+ if (a.y1 == null || a.y1 < this.yaxis.min)
+ a.y1 = this.yaxis.min;
+ if (a.y2 == null || a.y2 > this.yaxis.max)
+ a.y2 = this.yaxis.max;
+
+ var tmp;
+ if (a.x1 > a.x2) {
+ tmp = a.x1;
+ a.x1 = a.x2;
+ a.x2 = tmp;
+ }
+ if (a.y1 > a.y2) {
+ tmp = a.y1;
+ a.y1 = a.y2;
+ a.y2 = tmp;
+ }
+
+ if (a.x1 >= this.xaxis.max || a.x2 <= this.xaxis.min || a.x1 == a.x2
+ || a.y1 >= this.yaxis.max || a.y2 <= this.yaxis.min || a.y1 == a.y2)
+ return;
+
+ this.context.fillStyle = a.color || this.options.grid.coloredAreasColor;
+ this.context.fillRect(Math.floor(this.translateHoz(a.x1)), Math.floor(this.translateVert(a.y2)),
+ Math.floor(this.translateHoz(a.x2) - this.translateHoz(a.x1)), Math.floor(this.translateVert(a.y1) - this.translateVert(a.y2)));
+ }.bind(this));
+
+
+ }
+
+ // draw the inner grid
+ this.context.lineWidth = 1;
+ this.context.strokeStyle = this.options.grid.tickColor;
+ this.context.beginPath();
+ var v;
+ if (this.options.grid.drawXAxis) {
+ this.xaxis.ticks.each(function(aTick){
+ v = aTick.v;
+ if(v <= this.xaxis.min || v >= this.xaxis.max) {
+ return;
+ }
+ this.context.moveTo(Math.floor(this.translateHoz(v)) + this.context.lineWidth / 2, 0);
+ this.context.lineTo(Math.floor(this.translateHoz(v)) + this.context.lineWidth / 2, this.chartHeight);
+ }.bind(this));
+
+ }
+
+ if (this.options.grid.drawYAxis) {
+ this.yaxis.ticks.each(function(aTick){
+ v = aTick.v;
+ if(v <= this.yaxis.min || v >= this.yaxis.max) {
+ return;
+ }
+ this.context.moveTo(0, Math.floor(this.translateVert(v)) + this.context.lineWidth / 2);
+ this.context.lineTo(this.chartWidth, Math.floor(this.translateVert(v)) + this.context.lineWidth / 2);
+ }.bind(this));
+
+ }
+ this.context.stroke();
+
+ if (this.options.grid.borderWidth) {
+ // draw border
+ this.context.lineWidth = this.options.grid.borderWidth;
+ this.context.strokeStyle = this.options.grid.color;
+ this.context.lineJoin = "round";
+ this.context.strokeRect(0, 0, this.chartWidth, this.chartHeight);
+ this.context.restore();
+ }
+ },
+ /**
+ * function: insertLabels
+ *
+ * parameters: none
+ *
+ * description: inserts the label with proper spacing. Both on X and Y axis
+ */
+ insertLabels: function() {
+ this.domObj.select(".tickLabels").invoke('remove');
+
+ var i, tick;
+ var html = '<div class="tickLabels" style="font-size:smaller;color:' + this.options.grid.color + '">';
+
+ // do the x-axis
+ this.xaxis.ticks.each(function(tick){
+ if (!tick.label || tick.v < this.xaxis.min || tick.v > this.xaxis.max)
+ return;
+ html += '<div style="position:absolute;top:' + (this.chartOffset.top + this.chartHeight + this.options.grid.labelMargin) + 'px;left:' + (this.chartOffset.left + this.translateHoz(tick.v) - this.xLabelBoxWidth/2) + 'px;width:' + this.xLabelBoxWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
+
+ }.bind(this));
+
+ // do the y-axis
+ this.yaxis.ticks.each(function(tick){
+ if (!tick.label || tick.v < this.yaxis.min || tick.v > this.yaxis.max)
+ return;
+ html += '<div id="ylabels" style="position:absolute;top:' + (this.chartOffset.top + this.translateVert(tick.v) - this.yLabelMaxHeight/2) + 'px;left:0;width:' + this.yLabelMaxWidth + 'px;text-align:right" class="tickLabel">' + tick.label + "</div>";
+ }.bind(this));
+
+ html += '</div>';
+
+ this.domObj.insert(html);
+ },
+ /**
+ * function: drawGraph
+ *
+ * Paramters:
+ * {Object} graphData
+ *
+ * Description: given a graphData (series) this function calls a proper lower level method to draw it.
+ */
+ drawGraph: function(graphData) {
+ if (graphData.lines.show || (!graphData.bars.show && !graphData.points.show))
+ this.drawGraphLines(graphData);
+ if (graphData.bars.show)
+ this.drawGraphBar(graphData);
+ if (graphData.points.show)
+ this.drawGraphPoints(graphData);
+ },
+ /**
+ * function: plotLine
+ *
+ * parameters:
+ * {Object} data
+ * {Object} offset
+ *
+ * description:
+ * Helper function that plots a line based on the data provided
+ */
+ plotLine: function(data, offset) {
+ var prev, cur = null, drawx = null, drawy = null;
+
+ this.context.beginPath();
+ for (var i = 0; i < data.length; ++i) {
+ prev = cur;
+ cur = data[i];
+
+ if (prev == null || cur == null)
+ continue;
+
+ var x1 = prev[0], y1 = prev[1],
+ x2 = cur[0], y2 = cur[1];
+
+ // clip with ymin
+ if (y1 <= y2 && y1 < this.yaxis.min) {
+ if (y2 < this.yaxis.min)
+ continue; // line segment is outside
+ // compute new intersection point
+ x1 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = this.yaxis.min;
+ }
+ else if (y2 <= y1 && y2 < this.yaxis.min) {
+ if (y1 < this.yaxis.min)
+ continue;
+ x2 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = this.yaxis.min;
+ }
+
+ // clip with ymax
+ if (y1 >= y2 && y1 > this.yaxis.max) {
+ if (y2 > this.yaxis.max)
+ continue;
+ x1 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = this.yaxis.max;
+ }
+ else if (y2 >= y1 && y2 > this.yaxis.max) {
+ if (y1 > this.yaxis.max)
+ continue;
+ x2 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = this.yaxis.max;
+ }
+
+ // clip with xmin
+ if (x1 <= x2 && x1 < this.xaxis.min) {
+ if (x2 < this.xaxis.min)
+ continue;
+ y1 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = this.xaxis.min;
+ }
+ else if (x2 <= x1 && x2 < this.xaxis.min) {
+ if (x1 < this.xaxis.min)
+ continue;
+ y2 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = this.xaxis.min;
+ }
+
+ // clip with xmax
+ if (x1 >= x2 && x1 > this.xaxis.max) {
+ if (x2 > this.xaxis.max)
+ continue;
+ y1 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = this.xaxis.max;
+ }
+ else if (x2 >= x1 && x2 > this.xaxis.max) {
+ if (x1 > this.xaxis.max)
+ continue;
+ y2 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = this.xaxis.max;
+ }
+
+ if (drawx != this.translateHoz(x1) || drawy != this.translateVert(y1) + offset)
+ this.context.moveTo(this.translateHoz(x1), this.translateVert(y1) + offset);
+
+ drawx = this.translateHoz(x2);
+ drawy = this.translateVert(y2) + offset;
+ this.context.lineTo(drawx, drawy);
+ }
+ this.context.stroke();
+ },
+ /**
+ * function: plotLineArea
+ *
+ * parameters:
+ * {Object} data
+ *
+ * description:
+ * Helper functoin that plots a colored line graph. This function
+ * takes the data nad then fill in the area on the graph properly
+ */
+ plotLineArea: function(data) {
+ var prev, cur = null;
+
+ var bottom = Math.min(Math.max(0, this.yaxis.min), this.yaxis.max);
+ var top, lastX = 0;
+
+ var areaOpen = false;
+
+ for (var i = 0; i < data.length; ++i) {
+ prev = cur;
+ cur = data[i];
+
+ if (areaOpen && prev != null && cur == null) {
+ // close area
+ this.context.lineTo(this.translateHoz(lastX), this.translateVert(bottom));
+ this.context.fill();
+ areaOpen = false;
+ continue;
+ }
+
+ if (prev == null || cur == null)
+ continue;
+
+ var x1 = prev[0], y1 = prev[1],
+ x2 = cur[0], y2 = cur[1];
+
+ // clip x values
+
+ // clip with xmin
+ if (x1 <= x2 && x1 < this.xaxis.min) {
+ if (x2 < this.xaxis.min)
+ continue;
+ y1 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = this.xaxis.min;
+ }
+ else if (x2 <= x1 && x2 < this.xaxis.min) {
+ if (x1 < this.xaxis.min)
+ continue;
+ y2 = (this.xaxis.min - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = this.xaxis.min;
+ }
+
+ // clip with xmax
+ if (x1 >= x2 && x1 > this.xaxis.max) {
+ if (x2 > this.xaxis.max)
+ continue;
+ y1 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x1 = this.xaxis.max;
+ }
+ else if (x2 >= x1 && x2 > this.xaxis.max) {
+ if (x1 > this.xaxis.max)
+ continue;
+ y2 = (this.xaxis.max - x1) / (x2 - x1) * (y2 - y1) + y1;
+ x2 = this.xaxis.max;
+ }
+
+ if (!areaOpen) {
+ // open area
+ this.context.beginPath();
+ this.context.moveTo(this.translateHoz(x1), this.translateVert(bottom));
+ areaOpen = true;
+ }
+
+ // now first check the case where both is outside
+ if (y1 >= this.yaxis.max && y2 >= this.yaxis.max) {
+ this.context.lineTo(this.translateHoz(x1), this.translateVert(this.yaxis.max));
+ this.context.lineTo(this.translateHoz(x2), this.translateVert(this.yaxis.max));
+ continue;
+ }
+ else if (y1 <= this.yaxis.min && y2 <= this.yaxis.min) {
+ this.context.lineTo(this.translateHoz(x1), this.translateVert(this.yaxis.min));
+ this.context.lineTo(this.translateHoz(x2), this.translateVert(this.yaxis.min));
+ continue;
+ }
+
+ var x1old = x1, x2old = x2;
+
+ // clip with ymin
+ if (y1 <= y2 && y1 < this.yaxis.min && y2 >= this.yaxis.min) {
+ x1 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = this.yaxis.min;
+ }
+ else if (y2 <= y1 && y2 < this.yaxis.min && y1 >= this.yaxis.min) {
+ x2 = (this.yaxis.min - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = this.yaxis.min;
+ }
+
+ // clip with ymax
+ if (y1 >= y2 && y1 > this.yaxis.max && y2 <= this.yaxis.max) {
+ x1 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y1 = this.yaxis.max;
+ }
+ else if (y2 >= y1 && y2 > this.yaxis.max && y1 <= this.yaxis.max) {
+ x2 = (this.yaxis.max - y1) / (y2 - y1) * (x2 - x1) + x1;
+ y2 = this.yaxis.max;
+ }
+
+
+ // if the x value was changed we got a rectangle
+ // to fill
+ if (x1 != x1old) {
+ if (y1 <= this.yaxis.min)
+ top = this.yaxis.min;
+ else
+ top = this.yaxis.max;
+
+ this.context.lineTo(this.translateHoz(x1old), this.translateVert(top));
+ this.context.lineTo(this.translateHoz(x1), this.translateVert(top));
+ }
+
+ // fill the triangles
+ this.context.lineTo(this.translateHoz(x1), this.translateVert(y1));
+ this.context.lineTo(this.translateHoz(x2), this.translateVert(y2));
+
+ // fill the other rectangle if it's there
+ if (x2 != x2old) {
+ if (y2 <= this.yaxis.min)
+ top = this.yaxis.min;
+ else
+ top = this.yaxis.max;
+
+ this.context.lineTo(this.translateHoz(x2old), this.translateVert(top));
+ this.context.lineTo(this.translateHoz(x2), this.translateVert(top));
+ }
+
+ lastX = Math.max(x2, x2old);
+ }
+
+ if (areaOpen) {
+ this.context.lineTo(this.translateHoz(lastX), this.translateVert(bottom));
+ this.context.fill();
+ }
+ },
+ /**
+ * function: drawGraphLines
+ *
+ * parameters:
+ * {Object} graphData
+ *
+ * description:
+ * Main function that daws the line graph. This function is called
+ * if <options> lines property is set to show or no other type of
+ * graph is specified. This function depends on <plotLineArea> and
+ * <plotLine> functions.
+ */
+ drawGraphLines: function(graphData) {
+ this.context.save();
+ this.context.translate(this.chartOffset.left, this.chartOffset.top);
+ this.context.lineJoin = "round";
+
+ var lw = graphData.lines.lineWidth;
+ var sw = graphData.shadowSize;
+ // FIXME: consider another form of shadow when filling is turned on
+ if (sw > 0) {
+ // draw shadow in two steps
+ this.context.lineWidth = sw / 2;
+ this.context.strokeStyle = "rgba(0,0,0,0.1)";
+ this.plotLine(graphData.data, lw/2 + sw/2 + this.context.lineWidth/2);
+
+ this.context.lineWidth = sw / 2;
+ this.context.strokeStyle = "rgba(0,0,0,0.2)";
+ this.plotLine(graphData.data, lw/2 + this.context.lineWidth/2);
+ }
+
+ this.context.lineWidth = lw;
+ this.context.strokeStyle = graphData.color;
+ if (graphData.lines.fill) {
+ this.context.fillStyle = graphData.lines.fillColor != null ? graphData.lines.fillColor : this.parseColor(graphData.color).scale(null, null, null, 0.4).toString();
+ this.plotLineArea(graphData.data, 0);
+ }
+
+ this.plotLine(graphData.data, 0);
+ this.context.restore();
+ },
+ /**
+ * function: plotPoints
+ *
+ * parameters:
+ * {Object} data
+ * {Object} radius
+ * {Object} fill
+ *
+ * description:
+ * Helper function that draws the point graph according to the data provided. Size of each
+ * point is provided by radius variable and fill specifies if points
+ * are filled
+ */
+ plotPoints: function(data, radius, fill) {
+ for (var i = 0; i < data.length; ++i) {
+ if (data[i] == null)
+ continue;
+
+ var x = data[i][0], y = data[i][1];
+ if (x < this.xaxis.min || x > this.xaxis.max || y < this.yaxis.min || y > this.yaxis.max)
+ continue;
+
+ this.context.beginPath();
+ this.context.arc(this.translateHoz(x), this.translateVert(y), radius, 0, 2 * Math.PI, true);
+ if (fill)
+ this.context.fill();
+ this.context.stroke();
+ }
+ },
+ /**
+ * function: plotPointShadows
+ *
+ * parameters:
+ * {Object} data
+ * {Object} offset
+ * {Object} radius
+ *
+ * description:
+ * Helper function that draws the shadows for the points.
+ */
+ plotPointShadows: function(data, offset, radius) {
+ for (var i = 0; i < data.length; ++i) {
+ if (data[i] == null)
+ continue;
+
+ var x = data[i][0], y = data[i][1];
+ if (x < this.xaxis.min || x > this.xaxis.max || y < this.yaxis.min || y > this.yaxis.max)
+ continue;
+ this.context.beginPath();
+ this.context.arc(this.translateHoz(x), this.translateVert(y) + offset, radius, 0, Math.PI, false);
+ this.context.stroke();
+ }
+ },
+ /**
+ * function: drawGraphPoints
+ *
+ * paramters:
+ * {Object} graphData
+ *
+ * description:
+ * Draws the point graph onto the canvas. This function depends on helper
+ * functions <plotPointShadows> and <plotPoints>
+ */
+ drawGraphPoints: function(graphData) {
+ this.context.save();
+ this.context.translate(this.chartOffset.left, this.chartOffset.top);
+
+ var lw = graphData.lines.lineWidth;
+ var sw = graphData.shadowSize;
+ if (sw > 0) {
+ // draw shadow in two steps
+ this.context.lineWidth = sw / 2;
+ this.context.strokeStyle = "rgba(0,0,0,0.1)";
+ this.plotPointShadows(graphData.data, sw/2 + this.context.lineWidth/2, graphData.points.radius);
+
+ this.context.lineWidth = sw / 2;
+ this.context.strokeStyle = "rgba(0,0,0,0.2)";
+ this.plotPointShadows(graphData.data, this.context.lineWidth/2, graphData.points.radius);
+ }
+
+ this.context.lineWidth = graphData.points.lineWidth;
+ this.context.strokeStyle = graphData.color;
+ this.context.fillStyle = graphData.points.fillColor != null ? graphData.points.fillColor : graphData.color;
+ this.plotPoints(graphData.data, graphData.points.radius, graphData.points.fill);
+ this.context.restore();
+ },
+ /**
+ * function: preparePieData
+ *
+ * parameters:
+ * {Object} graphData
+ *
+ * Description:
+ * Helper function that manipulates the given data stream so that it can
+ * be plotted as a Pie Chart
+ */
+ preparePieData: function(graphData)
+ {
+ for(i = 0; i < graphData.length; i++)
+ {
+ var data = 0;
+ for(j = 0; j < graphData[i].data.length; j++){
+ data += parseInt(graphData[i].data[j][1]);
+ }
+ graphData[i].data = data;
+ }
+ },
+ /**
+ * function: drawPieShadow
+ *
+ * {Object} anchorX
+ * {Object} anchorY
+ * {Object} radius
+ *
+ * description:
+ * Helper function that draws a shadow for the Pie Chart. This just draws
+ * a circle with offset that simulates shadow. We do not give each piece
+ * of the pie an individual shadow.
+ */
+ drawPieShadow: function(anchorX, anchorY, radius)
+ {
+ this.context.beginPath();
+ this.context.moveTo(anchorX, anchorY);
+ this.context.fillStyle = 'rgba(0,0,0,' + 0.1 + ')';
+ startAngle = 0;
+ endAngle = (Math.PI/180)*360;
+ this.context.arc(anchorX + 2, anchorY +2, radius + (this.options.shadowSize/2), startAngle, endAngle, false);
+ this.context.fill();
+ this.context.closePath();
+ },
+ /**
+ * function: drawPieGraph
+ *
+ * parameters:
+ * {Object} graphData
+ *
+ * description:
+ * Draws the actual pie chart. This function depends on helper function
+ * <drawPieShadow> to draw the actual shadow
+ */
+ drawPieGraph: function(graphData)
+ {
+ var sumData = 0;
+ var radius = 0;
+ var centerX = this.chartWidth/2;
+ var centerY = this.chartHeight/2;
+ var startAngle = 0;
+ var endAngle = 0;
+ var fontSize = this.options.pies.fontSize;
+ var labelWidth = this.options.pies.labelWidth;
+
+ //determine Pie Radius
+ if(!this.options.pies.autoScale)
+ radius = this.options.pies.radius;
+ else
+ radius = (this.chartHeight * 0.85)/2;
+
+ var labelRadius = radius * 1.05;
+
+ for(i = 0; i < graphData.length; i++)
+ sumData += graphData[i].data;
+
+ // used to adjust labels so that everything adds up to 100%
+ totalPct = 0;
+
+ //lets draw the shadow first.. we don't need an individual shadow to every pie rather we just
+ //draw a circle underneath to simulate the shadow...
+ this.drawPieShadow(centerX, centerY, radius, 0, 0);
+
+ //lets draw the actual pie chart now.
+ graphData.each(function(gd, j){
+ var pct = gd.data / sumData;
+ startAngle = endAngle;
+ endAngle += pct * (2 * Math.PI);
+ var sliceMiddle = (endAngle - startAngle) / 2 + startAngle;
+ var labelX = centerX + Math.cos(sliceMiddle) * labelRadius;
+ var labelY = centerY + Math.sin(sliceMiddle) * labelRadius;
+ var anchorX = centerX;
+ var anchorY = centerY;
+ var textAlign = null;
+ var verticalAlign = null;
+ var left = 0;
+ var top = 0;
+
+ //draw pie:
+ //drawing pie
+ this.context.beginPath();
+ this.context.moveTo(anchorX, anchorY);
+ this.context.arc(anchorX, anchorY, radius, startAngle, endAngle, false);
+ this.context.closePath();
+ this.context.fillStyle = this.parseColor(gd.color).scale(null, null, null, this.options.pies.fillOpacity).toString();
+
+ if(this.options.pies.fill) { this.context.fill(); }
+
+ // drawing labels
+ if (sliceMiddle <= 0.25 * (2 * Math.PI))
+ {
+ // text on top and align left
+ textAlign = "left";
+ verticalAlign = "top";
+ left = labelX;
+ top = labelY + fontSize;
+ }
+ else if (sliceMiddle > 0.25 * (2 * Math.PI) && sliceMiddle <= 0.5 * (2 * Math.PI))
+ {
+ // text on bottom and align left
+ textAlign = "left";
+ verticalAlign = "bottom";
+ left = labelX - labelWidth;
+ top = labelY;
+ }
+ else if (sliceMiddle > 0.5 * (2 * Math.PI) && sliceMiddle <= 0.75 * (2 * Math.PI))
+ {
+ // text on bottom and align right
+ textAlign = "right";
+ verticalAlign = "bottom";
+ left = labelX - labelWidth;
+ top = labelY - fontSize;
+ }
+ else
+ {
+ // text on top and align right
+ textAlign = "right";
+ verticalAlign = "bottom";
+ left = labelX;
+ top = labelY - fontSize;
+ }
+
+ left = left + "px";
+ top = top + "px";
+ var textVal = Math.round(pct * 100);
+
+ if (j == graphData.length - 1) {
+ if (textVal + totalPct < 100) {
+ textVal = textVal + 1;
+ } else if (textVal + totalPct > 100) {
+ textVal = textVal - 1;
+ };
+ }
+
+ var html = "<div style=\"position: absolute;zindex:11; width:" + labelWidth + "px;fontSize:" + fontSize + "px;overflow:hidden;top:"+ top + ";left:"+ left + ";textAlign:" + textAlign + ";verticalAlign:" + verticalAlign +"\">" + textVal + "%</div>";
+ //$(html).appendTo(target);
+ this.domObj.insert(html);
+
+ totalPct = totalPct + textVal;
+ }.bind(this));
+
+ },
+ /**
+ * function: drawBarGraph
+ *
+ * parameters:
+ * {Object} graphData
+ * {Object} barDataRange
+ *
+ * description:
+ * Goes through each series in graphdata and passes it onto <drawBarGraphs> function
+ */
+ drawBarGraph: function(graphData, barDataRange)
+ {
+ graphData.each(function(gd, i){
+ this.drawGraphBars(gd, i, graphData.size(), barDataRange);
+ }.bind(this));
+ },
+ /**
+ * function: drawGraphBar
+ *
+ * parameters:
+ * {Object} graphData
+ *
+ * description:
+ * This function is called when an individual series in GraphData is bar graph and plots it
+ */
+ drawGraphBar: function(graphData)
+ {
+ this.drawGraphBars(graphData, 0, this.graphData.length, this.barDataRange);
+ },
+ /**
+ * function: plotBars
+ *
+ * parameters:
+ * {Object} graphData
+ * {Object} data
+ * {Object} barWidth
+ * {Object} offset
+ * {Object} fill
+ * {Object} counter
+ * {Object} total
+ * {Object} barDataRange
+ *
+ * description:
+ * Helper function that draws the bar graph based on data.
+ */
+ plotBars: function(graphData, data, barWidth, offset, fill,counter, total, barDataRange) {
+ var shift = 0;
+
+ if(total % 2 == 0)
+ {
+ shift = (1 + ((counter - total /2 ) - 1)) * barWidth;
+ }
+ else
+ {
+ var interval = 0.5;
+ if(counter == (total/2 - interval )) {
+ shift = - barWidth * interval;
+ }
+ else {
+ shift = (interval + (counter - Math.round(total/2))) * barWidth;
+ }
+ }
+
+ var rangeData = [];
+ data.each(function(d){
+ if(!d) return;
+
+ var x = d[0], y = d[1];
+ var drawLeft = true, drawTop = true, drawRight = true;
+ var left = x + shift, right = x + barWidth + shift, bottom = 0, top = y;
+ var rangeDataPoint = {};
+ rangeDataPoint.left = left;
+ rangeDataPoint.right = right;
+ rangeDataPoint.value = top;
+ rangeData.push(rangeDataPoint);
+
+ if (right < this.xaxis.min || left > this.xaxis.max || top < this.yaxis.min || bottom > this.yaxis.max)
+ return;
+
+ // clip
+ if (left < this.xaxis.min) {
+ left = this.xaxis.min;
+ drawLeft = false;
+ }
+
+ if (right > this.xaxis.max) {
+ right = this.xaxis.max;
+ drawRight = false;
+ }
+
+ if (bottom < this.yaxis.min)
+ bottom = this.yaxis.min;
+
+ if (top > this.yaxis.max) {
+ top = this.yaxis.max;
+ drawTop = false;
+ }
+
+ if(graphData.bars.showShadow && graphData.shadowSize > 0)
+ this.plotShadowOutline(graphData, this.context.strokeStyle, left, bottom, top, right, drawLeft, drawRight, drawTop);
+
+ // fill the bar
+ if (fill) {
+ this.context.beginPath();
+ this.context.moveTo(this.translateHoz(left), this.translateVert(bottom) + offset);
+ this.context.lineTo(this.translateHoz(left), this.translateVert(top) + offset);
+ this.context.lineTo(this.translateHoz(right), this.translateVert(top) + offset);
+ this.context.lineTo(this.translateHoz(right), this.translateVert(bottom) + offset);
+ this.context.fill();
+ }
+
+ // draw outline
+ if (drawLeft || drawRight || drawTop) {
+ this.context.beginPath();
+ this.context.moveTo(this.translateHoz(left), this.translateVert(bottom) + offset);
+ if (drawLeft)
+ this.context.lineTo(this.translateHoz(left), this.translateVert(top) + offset);
+ else
+ this.context.moveTo(this.translateHoz(left), this.translateVert(top) + offset);
+
+ if (drawTop)
+ this.context.lineTo(this.translateHoz(right), this.translateVert(top) + offset);
+ else
+ this.context.moveTo(this.translateHoz(right), this.translateVert(top) + offset);
+ if (drawRight)
+ this.context.lineTo(this.translateHoz(right), this.translateVert(bottom) + offset);
+ else
+ this.context.moveTo(this.translateHoz(right), this.translateVert(bottom) + offset);
+ this.context.stroke();
+ }
+ }.bind(this));
+
+ barDataRange.push(rangeData);
+ },
+ /**
+ * function: plotShadowOutline
+ *
+ * parameters:
+ * {Object} graphData
+ * {Object} orgStrokeStyle
+ * {Object} left
+ * {Object} bottom
+ * {Object} top
+ * {Object} right
+ * {Object} drawLeft
+ * {Object} drawRight
+ * {Object} drawTop
+ *
+ * description:
+ * Helper function that draws a outline simulating shadow for bar chart
+ */
+ plotShadowOutline: function(graphData, orgStrokeStyle, left, bottom, top, right, drawLeft, drawRight, drawTop)
+ {
+ var orgOpac = 0.3;
+
+ for(var n = 1; n <= this.options.shadowSize/2; n++)
+ {
+ var opac = orgOpac * n;
+ this.context.beginPath();
+ this.context.strokeStyle = "rgba(0,0,0," + opac + ")";
+
+ this.context.moveTo(this.translateHoz(left) + n, this.translateVert(bottom));
+
+ if(drawLeft)
+ this.context.lineTo(this.translateHoz(left) + n, this.translateVert(top) - n);
+ else
+ this.context.moveTo(this.translateHoz(left) + n, this.translateVert(top) - n);
+
+ if(drawTop)
+ this.context.lineTo(this.translateHoz(right) + n, this.translateVert(top) - n);
+ else
+ this.context.moveTo(this.translateHoz(right) + n, this.translateVert(top) - n);
+
+ if(drawRight)
+ this.context.lineTo(this.translateHoz(right) + n, this.translateVert(bottom));
+ else
+ this.context.lineTo(this.translateHoz(right) + n, this.translateVert(bottom));
+
+ this.context.stroke();
+ this.context.closePath();
+ }
+
+ this.context.strokeStyle = orgStrokeStyle;
+ },
+ /**
+ * function: drawGraphBars
+ *
+ * parameters:
+ * {Object} graphData
+ * {Object} counter
+ * {Object} total
+ * {Object} barDataRange
+ *
+ * description:
+ * Draws the actual bar graphs. Calls <plotBars> to draw the individual bar
+ */
+ drawGraphBars: function(graphData, counter, total, barDataRange){
+ this.context.save();
+ this.context.translate(this.chartOffset.left, this.chartOffset.top);
+ this.context.lineJoin = "round";
+
+ var bw = graphData.bars.barWidth;
+ var lw = Math.min(graphData.bars.lineWidth, bw);
+
+
+ this.context.lineWidth = lw;
+ this.context.strokeStyle = graphData.color;
+ if (graphData.bars.fill) {
+ this.context.fillStyle = graphData.bars.fillColor != null ? graphData.bars.fillColor : this.parseColor(graphData.color).scale(null, null, null, this.options.bars.fillOpacity).toString();
+ }
+ this.plotBars(graphData, graphData.data, bw, 0, graphData.bars.fill, counter, total, barDataRange);
+ this.context.restore();
+ },
+ /**
+ * function: insertLegend
+ *
+ * description:
+ * inserts legend onto the graph. *legend: {show: true}* must be set in <options>
+ * for for this to work.
+ */
+ insertLegend: function() {
+ this.domObj.select(".legend").invoke('remove');
+
+ if (!this.options.legend.show)
+ return;
+
+ var fragments = [];
+ var rowStarted = false;
+ this.graphData.each(function(gd, index){
+ if(!gd.label) {
+ return;
+ }
+ if(index % this.options.legend.noColumns == 0) {
+ if(rowStarted) {
+ fragments.push('</tr>');
+ }
+ fragments.push('<tr>');
+ rowStarted = true;
+ }
+ var label = gd.label;
+ if(this.options.legend.labelFormatter != null) {
+ label = this.options.legend.labelFormatter(label);
+ }
+
+ fragments.push(
+ '<td class="legendColorBox"><div style="border:1px solid ' + this.options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:14px;height:10px;background-color:' + gd.color + ';overflow:hidden"></div></div></td>' +
+ '<td class="legendLabel">' + label + '</td>');
+
+ }.bind(this));
+
+ if (rowStarted)
+ fragments.push('</tr>');
+
+ if(fragments.length > 0){
+ var table = '<table style="font-size:smaller;color:' + this.options.grid.color + '">' + fragments.join("") + '</table>';
+ if($(this.options.legend.container) != null){
+ $(this.options.legend.container).insert(table);
+ }else{
+ var pos = '';
+ var p = this.options.legend.position, m = this.options.legend.margin;
+
+ if(p.charAt(0) == 'n') pos += 'top:' + (m + this.chartOffset.top) + 'px;';
+ else if(p.charAt(0) == 's') pos += 'bottom:' + (m + this.chartOffset.bottom) + 'px;';
+ if(p.charAt(1) == 'e') pos += 'right:' + (m + this.chartOffset.right) + 'px;';
+ else if(p.charAt(1) == 'w') pos += 'left:' + (m + this.chartOffset.bottom) + 'px;';
+ var div = this.domObj.insert('<div class="ProtoChart-legend" style="border: 1px solid '+this.options.legend.borderColor+'; position:absolute;z-index:2;' + pos +'">' + table + '</div>').getElementsBySelector('div.ProtoChart-legend').first();
+
+ if(this.options.legend.backgroundOpacity != 0.0){
+ var c = this.options.legend.backgroundColor;
+ if(c == null){
+ var tmp = (this.options.grid.backgroundColor != null) ? this.options.grid.backgroundColor : this.extractColor(div);
+ c = this.parseColor(tmp).adjust(null, null, null, 1).toString();
+ }
+ this.domObj.insert('<div class="ProtoChart-legend-bg" style="position:absolute;width:' + div.getWidth() + 'px;height:' + div.getHeight() + 'px;' + pos +'background-color:' + c + ';"> </div>').select('div.ProtoChart-legend-bg').first().setStyle({
+ 'opacity': this.options.legend.backgroundOpacity
+ });
+ }
+ }
+ }
+ },
+ /**
+ * Function: onMouseMove
+ *
+ * parameters:
+ * event: {Object} ev
+ *
+ * Description:
+ * Called whenever the mouse is moved on the graph. This takes care of the mousetracking.
+ * This event also fires <ProtoChart:mousemove> event, which gets current position of the
+ * mouse as a parameters.
+ */
+ onMouseMove: function(ev) {
+ var e = ev || window.event;
+ if (e.pageX == null && e.clientX != null) {
+ var de = document.documentElement, b = $(document.body);
+ this.lastMousePos.pageX = e.clientX + (de && de.scrollLeft || b.scrollLeft || 0);
+ this.lastMousePos.pageY = e.clientY + (de && de.scrollTop || b.scrollTop || 0);
+ }
+ else {
+ this.lastMousePos.pageX = e.pageX;
+ this.lastMousePos.pageY = e.pageY;
+ }
+
+ var offset = this.overlay.cumulativeOffset();
+ var pos = {
+ x: this.xaxis.min + (e.pageX - offset.left - this.chartOffset.left) / this.hozScale,
+ y: this.yaxis.max - (e.pageY - offset.top - this.chartOffset.top) / this.vertScale
+ };
+
+ if(this.options.mouse.track && this.selectionInterval == null) {
+ this.hit(ev, pos);
+ }
+ this.domObj.fire("ProtoChart:mousemove", [ pos ]);
+ },
+ /**
+ * Function: onMouseDown
+ *
+ * Parameters:
+ * Event - {Object} e
+ *
+ * Description:
+ * Called whenever the mouse is clicked.
+ */
+ onMouseDown: function(e) {
+ if (e.which != 1) // only accept left-click
+ return;
+
+ document.body.focus();
+
+ if (document.onselectstart !== undefined && this.workarounds.onselectstart == null) {
+ this.workarounds.onselectstart = document.onselectstart;
+ document.onselectstart = function () { return false; };
+ }
+ if (document.ondrag !== undefined && this.workarounds.ondrag == null) {
+ this.workarounds.ondrag = document.ondrag;
+ document.ondrag = function () { return false; };
+ }
+
+ this.setSelectionPos(this.selection.first, e);
+
+ if (this.selectionInterval != null)
+ clearInterval(this.selectionInterval);
+ this.lastMousePos.pageX = null;
+ this.selectionInterval = setInterval(this.updateSelectionOnMouseMove.bind(this), 200);
+
+ this.overlay.observe("mouseup", this.onSelectionMouseUp.bind(this));
+ },
+ /**
+ * Function: onClick
+ * parameters:
+ * Event - {Object} e
+ * Description:
+ * Handles the "click" event on the chart. This function fires <ProtoChart:plotclick> event. If
+ * <options.allowDataClick> is enabled then it also fires <ProtoChart:dataclick> event which gives
+ * you access to exact data point where user clicked.
+ */
+ onClick: function(e) {
+ if (this.ignoreClick) {
+ this.ignoreClick = false;
+ return;
+ }
+ var offset = this.overlay.cumulativeOffset();
+ var pos ={
+ x: this.xaxis.min + (e.pageX - offset.left - this.chartOffset.left) / this.hozScale,
+ y: this.yaxis.max - (e.pageY - offset.top - this.chartOffset.top) / this.vertScale
+ };
+ this.domObj.fire("ProtoChart:plotclick", [ pos ]);
+
+ if(this.options.allowDataClick)
+ {
+ var dataPoint = {};
+ if(this.options.points.show)
+ {
+ dataPoint = this.getDataClickPoint(pos, this.options);
+ this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
+ }
+ else if(this.options.lines.show && this.options.points.show)
+ {
+ dataPoint = this.getDataClickPoint(pos, this.options);
+ this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
+ }
+ else if(this.options.bars.show)
+ {
+ if(this.barDataRange.length > 0)
+ {
+ dataPoint = this.getDataClickPoint(pos, this.options, this.barDataRange);
+ this.domObj.fire("ProtoChart:dataclick", [dataPoint]);
+ }
+ }
+ }
+ },
+ /**
+ * Internal function used by onClick method.
+ */
+ getDataClickPoint: function(pos, options, barDataRange)
+ {
+ pos.x = parseInt(pos.x);
+ pos.y = parseInt(pos.y);
+ var yClick = pos.y.toFixed(0);
+ var dataVal = {};
+
+ dataVal.position = pos;
+ dataVal.value = '';
+
+ if(options.points.show)
+ {
+ this.graphData.each(function(gd){
+ var temp = gd.data;
+ var xClick = parseInt(pos.x.toFixed(0));
+ if(xClick < 0) { xClick = 0; }
+ if(temp[xClick] && yClick >= temp[xClick][1] - (this.options.points.radius * 10) && yClick <= temp[xClick][1] + (this.options.points.radius * 10)) {
+ dataVal.value = temp[xClick][1];
+ throw $break;
+ }
+
+ }.bind(this));
+ }
+ else if(options.bars.show)
+ {
+ xClick = pos.x;
+ this.barDataRange.each(function(barData){
+ barData.each(function(data){
+ var temp = data;
+ if(xClick > temp.left && xClick < temp.right) {
+ dataVal.value = temp.value;
+ throw $break;
+ }
+ }.bind(this));
+ }.bind(this));
+
+ }
+
+ return dataVal;
+ },
+ /**
+ * Function: triggerSelectedEvent
+ *
+ * Description:
+ * Internal function called when a selection on the graph is made. This function
+ * fires <ProtoChart:selected> event which has a parameter representing the selection
+ * {
+ * x1: {int}, y1: {int},
+ * x2: {int}, y2: {int}
+ * }
+ */
+ triggerSelectedEvent: function() {
+ var x1, x2, y1, y2;
+ if (this.selection.first.x <= this.selection.second.x) {
+ x1 = this.selection.first.x;
+ x2 = this.selection.second.x;
+ }
+ else {
+ x1 = this.selection.second.x;
+ x2 = this.selection.first.x;
+ }
+
+ if (this.selection.first.y >= this.selection.second.y) {
+ y1 = this.selection.first.y;
+ y2 = this.selection.second.y;
+ }
+ else {
+ y1 = this.selection.second.y;
+ y2 = this.selection.first.y;
+ }
+
+ x1 = this.xaxis.min + x1 / this.hozScale;
+ x2 = this.xaxis.min + x2 / this.hozScale;
+
+ y1 = this.yaxis.max - y1 / this.vertScale;
+ y2 = this.yaxis.max - y2 / this.vertScale;
+
+ this.domObj.fire("ProtoChart:selected", [ { x1: x1, y1: y1, x2: x2, y2: y2 } ]);
+ },
+ /**
+ * Internal function
+ */
+ onSelectionMouseUp: function(e) {
+ if (document.onselectstart !== undefined)
+ document.onselectstart = this.workarounds.onselectstart;
+ if (document.ondrag !== undefined)
+ document.ondrag = this.workarounds.ondrag;
+
+ if (this.selectionInterval != null) {
+ clearInterval(this.selectionInterval);
+ this.selectionInterval = null;
+ }
+
+ this.setSelectionPos(this.selection.second, e);
+ this.clearSelection();
+ if (!this.selectionIsSane() || e.which != 1)
+ return false;
+
+ this.drawSelection();
+ this.triggerSelectedEvent();
+ this.ignoreClick = true;
+
+ return false;
+ },
+ setSelectionPos: function(pos, e) {
+ var offset = $(this.overlay).cumulativeOffset();
+ if (this.options.selection.mode == "y") {
+ if (pos == this.selection.first)
+ pos.x = 0;
+ else
+ pos.x = this.chartWidth;
+ }
+ else {
+ pos.x = e.pageX - offset.left - this.chartOffset.left;
+ pos.x = Math.min(Math.max(0, pos.x), this.chartWidth);
+ }
+
+ if (this.options.selection.mode == "x") {
+ if (pos == this.selection.first)
+ pos.y = 0;
+ else
+ pos.y = this.chartHeight;
+ }
+ else {
+ pos.y = e.pageY - offset.top - this.chartOffset.top;
+ pos.y = Math.min(Math.max(0, pos.y), this.chartHeight);
+ }
+ },
+ updateSelectionOnMouseMove: function() {
+ if (this.lastMousePos.pageX == null)
+ return;
+
+ this.setSelectionPos(this.selection.second, this.lastMousePos);
+ this.clearSelection();
+ if (this.selectionIsSane())
+ this.drawSelection();
+ },
+ clearSelection: function() {
+ if (this.prevSelection == null)
+ return;
+
+ var x = Math.min(this.prevSelection.first.x, this.prevSelection.second.x),
+ y = Math.min(this.prevSelection.first.y, this.prevSelection.second.y),
+ w = Math.abs(this.prevSelection.second.x - this.prevSelection.first.x),
+ h = Math.abs(this.prevSelection.second.y - this.prevSelection.first.y);
+
+ this.overlayContext.clearRect(x + this.chartOffset.left - this.overlayContext.lineWidth,
+ y + this.chartOffset.top - this.overlayContext.lineWidth,
+ w + this.overlayContext.lineWidth*2,
+ h + this.overlayContext.lineWidth*2);
+
+ this.prevSelection = null;
+ },
+ /**
+ * Function: setSelection
+ *
+ * Parameters:
+ * Area - {Object} area represented as a range like: {x1: 3, y1: 3, x2: 4, y2: 8}
+ *
+ * Description:
+ * Sets the current graph selection to the provided range. Calls <drawSelection> and
+ * <triggerSelectedEvent> functions internally.
+ */
+ setSelection: function(area) {
+ this.clearSelection();
+
+ if (this.options.selection.mode == "x") {
+ this.selection.first.y = 0;
+ this.selection.second.y = this.chartHeight;
+ }
+ else {
+ this.selection.first.y = (this.yaxis.max - area.y1) * this.vertScale;
+ this.selection.second.y = (this.yaxis.max - area.y2) * this.vertScale;
+ }
+ if (this.options.selection.mode == "y") {
+ this.selection.first.x = 0;
+ this.selection.second.x = this.chartWidth;
+ }
+ else {
+ this.selection.first.x = (area.x1 - this.xaxis.min) * this.hozScale;
+ this.selection.second.x = (area.x2 - this.xaxis.min) * this.hozScale;
+ }
+
+ this.drawSelection();
+ this.triggerSelectedEvent();
+ },
+ /**
+ * Function: drawSelection
+ * Description: Internal function called to draw the selection made on the graph.
+ */
+ drawSelection: function() {
+ if (this.prevSelection != null &&
+ this.selection.first.x == this.prevSelection.first.x &&
+ this.selection.first.y == this.prevSelection.first.y &&
+ this.selection.second.x == this.prevSelection.second.x &&
+ this.selection.second.y == this.prevSelection.second.y)
+ {
+ return;
+ }
+
+ this.overlayContext.strokeStyle = this.parseColor(this.options.selection.color).scale(null, null, null, 0.8).toString();
+ this.overlayContext.lineWidth = 1;
+ this.context.lineJoin = "round";
+ this.overlayContext.fillStyle = this.parseColor(this.options.selection.color).scale(null, null, null, 0.4).toString();
+
+ this.prevSelection = { first: { x: this.selection.first.x,
+ y: this.selection.first.y },
+ second: { x: this.selection.second.x,
+ y: this.selection.second.y } };
+
+ var x = Math.min(this.selection.first.x, this.selection.second.x),
+ y = Math.min(this.selection.first.y, this.selection.second.y),
+ w = Math.abs(this.selection.second.x - this.selection.first.x),
+ h = Math.abs(this.selection.second.y - this.selection.first.y);
+
+ this.overlayContext.fillRect(x + this.chartOffset.left, y + this.chartOffset.top, w, h);
+ this.overlayContext.strokeRect(x + this.chartOffset.left, y + this.chartOffset.top, w, h);
+ },
+ /**
+ * Internal function
+ */
+ selectionIsSane: function() {
+ var minSize = 5;
+ return Math.abs(this.selection.second.x - this.selection.first.x) >= minSize &&
+ Math.abs(this.selection.second.y - this.selection.first.y) >= minSize;
+ },
+ /**
+ * Internal function that formats the track. This is the format the text is shown when mouse
+ * tracking is enabled.
+ */
+ defaultTrackFormatter: function(val)
+ {
+ return '['+val.x+', '+val.y+']';
+ },
+ /**
+ * Function: clearHit
+ */
+ clearHit: function(){
+ if(this.prevHit){
+ this.overlayContext.clearRect(
+ this.translateHoz(this.prevHit.x) + this.chartOffset.left - this.options.mouse.radius*2,
+ this.translateVert(this.prevHit.y) + this.chartOffset.top - this.options.mouse.radius*2,
+ this.options.mouse.radius*3 + this.options.points.lineWidth*3,
+ this.options.mouse.radius*3 + this.options.points.lineWidth*3
+ );
+ this.prevHit = null;
+ }
+ },
+ /**
+ * Function: hit
+ *
+ * Parameters:
+ * event - {Object} event object
+ * mouse - {Object} mouse object that is used to keep track of mouse movement
+ *
+ * Description:
+ * If hit occurs this function will fire a ProtoChart:hit event.
+ */
+ hit: function(event, mouse){
+ /**
+ * Nearest data element.
+ */
+ var n = {
+ dist:Number.MAX_VALUE,
+ x:null,
+ y:null,
+ mouse:null
+ };
+
+
+ for(var i = 0, data, xsens, ysens; i < this.graphData.length; i++){
+ if(!this.graphData[i].mouse.track) continue;
+ data = this.graphData[i].data;
+ xsens = (this.hozScale*this.graphData[i].mouse.sensibility);
+ ysens = (this.vertScale*this.graphData[i].mouse.sensibility);
+ for(var j = 0, xabs, yabs; j < data.length; j++){
+ xabs = this.hozScale*Math.abs(data[j][0] - mouse.x);
+ yabs = this.vertScale*Math.abs(data[j][1] - mouse.y);
+
+ if(xabs < xsens && yabs < ysens && (xabs+yabs) < n.dist){
+ n.dist = (xabs+yabs);
+ n.x = data[j][0];
+ n.y = data[j][1];
+ n.mouse = this.graphData[i].mouse;
+ }
+ }
+ }
+
+ if(n.mouse && n.mouse.track && !this.prevHit || (this.prevHit && n.x != this.prevHit.x && n.y != this.prevHit.y)){
+ var el = this.domObj.select('.'+this.options.mouse.clsName).first();
+ if(!el){
+ var pos = '', p = this.options.mouse.position, m = this.options.mouse.margin;
+ if(p.charAt(0) == 'n') pos += 'top:' + (m + this.chartOffset.top) + 'px;';
+ else if(p.charAt(0) == 's') pos += 'bottom:' + (m + this.chartOffset.bottom) + 'px;';
+ if(p.charAt(1) == 'e') pos += 'right:' + (m + this.chartOffset.right) + 'px;';
+ else if(p.charAt(1) == 'w') pos += 'left:' + (m + this.chartOffset.bottom) + 'px;';
+
+ this.domObj.insert('<div class="'+this.options.mouse.clsName+'" style="display:none;position:absolute;'+pos+'"></div>');
+ return;
+ }
+ if(n.x !== null && n.y !== null){
+ el.setStyle({display:'block'});
+
+ this.clearHit();
+ if(n.mouse.lineColor != null){
+ this.overlayContext.save();
+ this.overlayContext.translate(this.chartOffset.left, this.chartOffset.top);
+ this.overlayContext.lineWidth = this.options.points.lineWidth;
+ this.overlayContext.strokeStyle = n.mouse.lineColor;
+ this.overlayContext.fillStyle = '#ffffff';
+ this.overlayContext.beginPath();
+
+
+ this.overlayContext.arc(this.translateHoz(n.x), this.translateVert(n.y), this.options.mouse.radius, 0, 2 * Math.PI, true);
+ this.overlayContext.fill();
+ this.overlayContext.stroke();
+ this.overlayContext.restore();
+ }
+ this.prevHit = n;
+
+ var decimals = n.mouse.trackDecimals;
+ if(decimals == null || decimals < 0) decimals = 0;
+ if(!this.options.mouse.fixedPosition)
+ {
+ el.setStyle({
+ left: (this.translateHoz(n.x) + this.options.mouse.radius + 10) + "px",
+ top: (this.translateVert(n.y) + this.options.mouse.radius + 10) + "px"
+ });
+ }
+ el.innerHTML = n.mouse.trackFormatter({x: n.x.toFixed(decimals), y: n.y.toFixed(decimals)});
+ this.domObj.fire( 'ProtoChart:hit', [n] )
+ }else if(this.options.prevHit){
+ el.setStyle({display:'none'});
+ this.clearHit();
+ }
+ }
+ },
+ /**
+ * Internal function
+ */
+ floorInBase: function(n, base) {
+ return base * Math.floor(n / base);
+ },
+ /**
+ * Function: extractColor
+ *
+ * Parameters:
+ * element - HTML element or ID of an HTML element
+ *
+ * Returns:
+ * color in string format
+ */
+ extractColor: function(element)
+ {
+ var color;
+ do
+ {
+ color = $(element).getStyle('background-color').toLowerCase();
+ if(color != '' && color != 'transparent')
+ {
+ break;
+ }
+ element = element.up(0); //or else just get the parent ....
+ } while(element.nodeName.toLowerCase() != 'body');
+
+ //safari fix
+ if(color == 'rgba(0, 0, 0, 0)')
+ return 'transparent';
+ return color;
+ },
+ /**
+ * Function: parseColor
+ *
+ * Parameters:
+ * str - color string in different formats
+ *
+ * Returns:
+ * a Proto.Color Object - use toString() function to retreive the color in rgba/rgb format
+ */
+ parseColor: function(str)
+ {
+ var result;
+
+ /**
+ * rgb(num,num,num)
+ */
+ if((result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)))
+ return new Proto.Color(parseInt(result[1]), parseInt(result[2]), parseInt(result[3]));
+
+ /**
+ * rgba(num,num,num,num)
+ */
+ if((result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)))
+ return new Proto.Color(parseInt(result[1]), parseInt(result[2]), parseInt(result[3]), parseFloat(result[4]));
+
+ /**
+ * rgb(num%,num%,num%)
+ */
+ if((result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)))
+ return new Proto.Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55);
+
+ /**
+ * rgba(num%,num%,num%,num)
+ */
+ if((result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)))
+ return new Proto.Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]));
+
+ /**
+ * #a0b1c2
+ */
+ if((result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)))
+ return new Proto.Color(parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16));
+
+ /**
+ * #fff
+ */
+ if((result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)))
+ return new Proto.Color(parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16));
+
+ /**
+ * Otherwise, check if user wants transparent .. or we just return a standard color;
+ */
+ var name = str.strip().toLowerCase();
+ if(name == 'transparent'){
+ return new Proto.Color(255, 255, 255, 0);
+ }
+
+ return new Proto.Color(100,100,100, 1);
+
+ }
+});
+
+if(!Proto) var Proto = {};
+
+/**
+ * Class: Proto.Color
+ *
+ * Helper class that manipulates colors using RGBA values.
+ *
+ */
+
+Proto.Color = Class.create({
+ initialize: function(r, g, b, a) {
+ this.rgba = ['r', 'g', 'b', 'a'];
+ var x = 4;
+ while(-1<--x) {
+ this[this.rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0);
+ }
+ },
+ toString: function() {
+ if(this.a >= 1.0) {
+ return "rgb(" + [this.r, this.g, this.b].join(",") +")";
+ }
+ else {
+ return "rgba("+[this.r, this.g, this.b, this.a].join(",")+")";
+ }
+ },
+ scale: function(rf, gf, bf, af) {
+ x = 4;
+ while(-1<--x) {
+ if(arguments[x] != null) {
+ this[this.rgba[x]] *= arguments[x];
+ }
+ }
+ return this.normalize();
+ },
+ adjust: function(rd, gd, bd, ad) {
+ x = 4; //rgba.length
+ while (-1<--x) {
+ if (arguments[x] != null)
+ this[this.rgba[x]] += arguments[x];
+ }
+ return this.normalize();
+ },
+ clone: function() {
+ return new Proto.Color(this.r, this.b, this.g, this.a);
+ },
+ limit: function(val,minVal,maxVal) {
+ return Math.max(Math.min(val, maxVal), minVal);
+ },
+ normalize: function() {
+ this.r = this.limit(parseInt(this.r), 0, 255);
+ this.g = this.limit(parseInt(this.g), 0, 255);
+ this.b = this.limit(parseInt(this.b), 0, 255);
+ this.a = this.limit(this.a, 0, 1);
+ return this;
+ }
+}); \ No newline at end of file
diff --git a/src/usr/local/www/protochart/excanvas-compressed.js b/src/usr/local/www/protochart/excanvas-compressed.js
new file mode 100644
index 0000000..9d71658
--- /dev/null
+++ b/src/usr/local/www/protochart/excanvas-compressed.js
@@ -0,0 +1,19 @@
+if(!window.CanvasRenderingContext2D){(function(){var I=Math,i=I.round,L=I.sin,M=I.cos,m=10,A=m/2,Q={init:function(a){var b=a||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=this;b.attachEvent("onreadystatechange",function(){c.r(b)})}},r:function(a){if(a.readyState=="complete"){if(!a.namespaces["s"]){a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var b=a.createStyleSheet();b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";
+var c=a.getElementsByTagName("canvas");for(var d=0;d<c.length;d++){if(!c[d].getContext){this.initElement(c[d])}}}},q:function(a){var b=a.outerHTML,c=a.ownerDocument.createElement(b);if(b.slice(-2)!="/>"){var d="/"+a.tagName,e;while((e=a.nextSibling)&&e.tagName!=d){e.removeNode()}if(e){e.removeNode()}}a.parentNode.replaceChild(c,a);return c},initElement:function(a){a=this.q(a);a.getContext=function(){if(this.l){return this.l}return this.l=new K(this)};a.attachEvent("onpropertychange",V);a.attachEvent("onresize",
+W);var b=a.attributes;if(b.width&&b.width.specified){a.style.width=b.width.nodeValue+"px"}else{a.width=a.clientWidth}if(b.height&&b.height.specified){a.style.height=b.height.nodeValue+"px"}else{a.height=a.clientHeight}return a}};function V(a){var b=a.srcElement;switch(a.propertyName){case "width":b.style.width=b.attributes.width.nodeValue+"px";b.getContext().clearRect();break;case "height":b.style.height=b.attributes.height.nodeValue+"px";b.getContext().clearRect();break}}function W(a){var b=a.srcElement;
+if(b.firstChild){b.firstChild.style.width=b.clientWidth+"px";b.firstChild.style.height=b.clientHeight+"px"}}Q.init();var R=[];for(var E=0;E<16;E++){for(var F=0;F<16;F++){R[E*16+F]=E.toString(16)+F.toString(16)}}function J(){return[[1,0,0],[0,1,0],[0,0,1]]}function G(a,b){var c=J();for(var d=0;d<3;d++){for(var e=0;e<3;e++){var g=0;for(var h=0;h<3;h++){g+=a[d][h]*b[h][e]}c[d][e]=g}}return c}function N(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=
+a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.d=a.d;b.e=a.e}function O(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),g=a.substring(d+1,e).split(",");b="#";for(var h=0;h<3;h++){b+=R[Number(g[h])]}if(g.length==4&&a.substr(3,1)=="a"){c=g[3]}}else{b=a}return[b,c]}function S(a){switch(a){case "butt":return"flat";case "round":return"round";
+case "square":default:return"square"}}function K(a){this.a=J();this.m=[];this.k=[];this.c=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=m*1;this.globalAlpha=1;this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.overflow="hidden";b.style.position="absolute";a.appendChild(b);this.j=b;this.d=1;this.e=1}var j=K.prototype;j.clearRect=function(){this.j.innerHTML=
+"";this.c=[]};j.beginPath=function(){this.c=[]};j.moveTo=function(a,b){this.c.push({type:"moveTo",x:a,y:b});this.f=a;this.g=b};j.lineTo=function(a,b){this.c.push({type:"lineTo",x:a,y:b});this.f=a;this.g=b};j.bezierCurveTo=function(a,b,c,d,e,g){this.c.push({type:"bezierCurveTo",cp1x:a,cp1y:b,cp2x:c,cp2y:d,x:e,y:g});this.f=e;this.g=g};j.quadraticCurveTo=function(a,b,c,d){var e=this.f+0.6666666666666666*(a-this.f),g=this.g+0.6666666666666666*(b-this.g),h=e+(c-this.f)/3,l=g+(d-this.g)/3;this.bezierCurveTo(e,
+g,h,l,c,d)};j.arc=function(a,b,c,d,e,g){c*=m;var h=g?"at":"wa",l=a+M(d)*c-A,n=b+L(d)*c-A,o=a+M(e)*c-A,f=b+L(e)*c-A;if(l==o&&!g){l+=0.125}this.c.push({type:h,x:a,y:b,radius:c,xStart:l,yStart:n,xEnd:o,yEnd:f})};j.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath()};j.strokeRect=function(a,b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke()};j.fillRect=function(a,
+b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill()};j.createLinearGradient=function(a,b,c,d){var e=new H("gradient");return e};j.createRadialGradient=function(a,b,c,d,e,g){var h=new H("gradientradial");h.n=c;h.o=g;h.i.x=a;h.i.y=b;return h};j.drawImage=function(a,b){var c,d,e,g,h,l,n,o,f=a.runtimeStyle.width,k=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var q=a.width,r=a.height;a.runtimeStyle.width=
+f;a.runtimeStyle.height=k;if(arguments.length==3){c=arguments[1];d=arguments[2];h=(l=0);n=(e=q);o=(g=r)}else if(arguments.length==5){c=arguments[1];d=arguments[2];e=arguments[3];g=arguments[4];h=(l=0);n=q;o=r}else if(arguments.length==9){h=arguments[1];l=arguments[2];n=arguments[3];o=arguments[4];c=arguments[5];d=arguments[6];e=arguments[7];g=arguments[8]}else{throw"Invalid number of arguments";}var s=this.b(c,d),t=[],v=10,w=10;t.push(" <g_vml_:group",' coordsize="',m*v,",",m*w,'"',' coordorigin="0,0"',
+' style="width:',v,";height:",w,";position:absolute;");if(this.a[0][0]!=1||this.a[0][1]){var x=[];x.push("M11='",this.a[0][0],"',","M12='",this.a[1][0],"',","M21='",this.a[0][1],"',","M22='",this.a[1][1],"',","Dx='",i(s.x/m),"',","Dy='",i(s.y/m),"'");var p=s,y=this.b(c+e,d),z=this.b(c,d+g),B=this.b(c+e,d+g);p.x=Math.max(p.x,y.x,z.x,B.x);p.y=Math.max(p.y,y.y,z.y,B.y);t.push("padding:0 ",i(p.x/m),"px ",i(p.y/m),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",x.join(""),", sizingmethod='clip');")}else{t.push("top:",
+i(s.y/m),"px;left:",i(s.x/m),"px;")}t.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',m*e,";"," height:",m*g,';"',' cropleft="',h/q,'"',' croptop="',l/r,'"',' cropright="',(q-h-n)/q,'"',' cropbottom="',(r-l-o)/r,'"'," />","</g_vml_:group>");this.j.insertAdjacentHTML("BeforeEnd",t.join(""))};j.stroke=function(a){var b=[],c=O(a?this.fillStyle:this.strokeStyle),d=c[0],e=c[1]*this.globalAlpha,g=10,h=10;b.push("<g_vml_:shape",' fillcolor="',d,'"',' filled="',Boolean(a),'"',' style="position:absolute;width:',
+g,";height:",h,';"',' coordorigin="0 0" coordsize="',m*g," ",m*h,'"',' stroked="',!a,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',d,'"',' path="');var l={x:null,y:null},n={x:null,y:null};for(var o=0;o<this.c.length;o++){var f=this.c[o];if(f.type=="moveTo"){b.push(" m ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="lineTo"){b.push(" l ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="close"){b.push(" x ")}else if(f.type=="bezierCurveTo"){b.push(" c ");
+var k=this.b(f.x,f.y),q=this.b(f.cp1x,f.cp1y),r=this.b(f.cp2x,f.cp2y);b.push(i(q.x),",",i(q.y),",",i(r.x),",",i(r.y),",",i(k.x),",",i(k.y))}else if(f.type=="at"||f.type=="wa"){b.push(" ",f.type," ");var k=this.b(f.x,f.y),s=this.b(f.xStart,f.yStart),t=this.b(f.xEnd,f.yEnd);b.push(i(k.x-this.d*f.radius),",",i(k.y-this.e*f.radius)," ",i(k.x+this.d*f.radius),",",i(k.y+this.e*f.radius)," ",i(s.x),",",i(s.y)," ",i(t.x),",",i(t.y))}if(k){if(l.x==null||k.x<l.x){l.x=k.x}if(n.x==null||k.x>n.x){n.x=k.x}if(l.y==
+null||k.y<l.y){l.y=k.y}if(n.y==null||k.y>n.y){n.y=k.y}}}b.push(' ">');if(typeof this.fillStyle=="object"){var v={x:"50%",y:"50%"},w=n.x-l.x,x=n.y-l.y,p=w>x?w:x;v.x=i(this.fillStyle.i.x/w*100+50)+"%";v.y=i(this.fillStyle.i.y/x*100+50)+"%";var y=[];if(this.fillStyle.p=="gradientradial"){var z=this.fillStyle.n/p*100,B=this.fillStyle.o/p*100-z}else{var z=0,B=100}var C={offset:null,color:null},D={offset:null,color:null};this.fillStyle.h.sort(function(T,U){return T.offset-U.offset});for(var o=0;o<this.fillStyle.h.length;o++){var u=
+this.fillStyle.h[o];y.push(u.offset*B+z,"% ",u.color,",");if(u.offset>C.offset||C.offset==null){C.offset=u.offset;C.color=u.color}if(u.offset<D.offset||D.offset==null){D.offset=u.offset;D.color=u.color}}y.pop();b.push("<g_vml_:fill",' color="',D.color,'"',' color2="',C.color,'"',' type="',this.fillStyle.p,'"',' focusposition="',v.x,", ",v.y,'"',' colors="',y.join(""),'"',' opacity="',e,'" />')}else if(a){b.push('<g_vml_:fill color="',d,'" opacity="',e,'" />')}else{b.push("<g_vml_:stroke",' opacity="',
+e,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',S(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',d,'" />')}b.push("</g_vml_:shape>");this.j.insertAdjacentHTML("beforeEnd",b.join(""));this.c=[]};j.fill=function(){this.stroke(true)};j.closePath=function(){this.c.push({type:"close"})};j.b=function(a,b){return{x:m*(a*this.a[0][0]+b*this.a[1][0]+this.a[2][0])-A,y:m*(a*this.a[0][1]+b*this.a[1][1]+this.a[2][1])-A}};j.save=function(){var a={};N(this,a);
+this.k.push(a);this.m.push(this.a);this.a=G(J(),this.a)};j.restore=function(){N(this.k.pop(),this);this.a=this.m.pop()};j.translate=function(a,b){var c=[[1,0,0],[0,1,0],[a,b,1]];this.a=G(c,this.a)};j.rotate=function(a){var b=M(a),c=L(a),d=[[b,c,0],[-c,b,0],[0,0,1]];this.a=G(d,this.a)};j.scale=function(a,b){this.d*=a;this.e*=b;var c=[[a,0,0],[0,b,0],[0,0,1]];this.a=G(c,this.a)};j.clip=function(){};j.arcTo=function(){};j.createPattern=function(){return new P};function H(a){this.p=a;this.n=0;this.o=
+0;this.h=[];this.i={x:0,y:0}}H.prototype.addColorStop=function(a,b){b=O(b);this.h.push({offset:1-a,color:b})};function P(){}G_vmlCanvasManager=Q;CanvasRenderingContext2D=K;CanvasGradient=H;CanvasPattern=P})()};
diff --git a/src/usr/local/www/protochart/excanvas.js b/src/usr/local/www/protochart/excanvas.js
new file mode 100644
index 0000000..f8780b6
--- /dev/null
+++ b/src/usr/local/www/protochart/excanvas.js
@@ -0,0 +1,785 @@
+// Copyright 2006 Google Inc.
+//
+// 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.
+
+
+// Known Issues:
+//
+// * Patterns are not implemented.
+// * Radial gradient are not implemented. The VML version of these look very
+// different from the canvas one.
+// * Clipping paths are not implemented.
+// * Coordsize. The width and height attribute have higher priority than the
+// width and height style values which isn't correct.
+// * Painting mode isn't implemented.
+// * Canvas width/height should is using content-box by default. IE in
+// Quirks mode will draw the canvas using border-box. Either change your
+// doctype to HTML5
+// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
+// or use Box Sizing Behavior from WebFX
+// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
+// * Optimize. There is always room for speed improvements.
+
+// only add this code if we do not already have a canvas implementation
+if (!window.CanvasRenderingContext2D) {
+
+(function () {
+
+ // alias some functions to make (compiled) code shorter
+ var m = Math;
+ var mr = m.round;
+ var ms = m.sin;
+ var mc = m.cos;
+
+ // this is used for sub pixel precision
+ var Z = 10;
+ var Z2 = Z / 2;
+
+ var G_vmlCanvasManager_ = {
+ init: function (opt_doc) {
+ var doc = opt_doc || document;
+ if (/MSIE/.test(navigator.userAgent) && !window.opera) {
+ var self = this;
+ doc.attachEvent("onreadystatechange", function () {
+ self.init_(doc);
+ });
+ }
+ },
+
+ init_: function (doc) {
+ if (doc.readyState == "complete") {
+ // create xmlns
+ if (!doc.namespaces["g_vml_"]) {
+ doc.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml");
+ }
+
+ // setup default css
+ var ss = doc.createStyleSheet();
+ ss.cssText = "canvas{display:inline-block;overflow:hidden;" +
+ // default size is 300x150 in Gecko and Opera
+ "text-align:left;width:300px;height:150px}" +
+ "g_vml_\\:*{behavior:url(#default#VML)}";
+
+ // find all canvas elements
+ var els = doc.getElementsByTagName("canvas");
+ for (var i = 0; i < els.length; i++) {
+ if (!els[i].getContext) {
+ this.initElement(els[i]);
+ }
+ }
+ }
+ },
+
+ fixElement_: function (el) {
+ // in IE before version 5.5 we would need to add HTML: to the tag name
+ // but we do not care about IE before version 6
+ var outerHTML = el.outerHTML;
+
+ var newEl = el.ownerDocument.createElement(outerHTML);
+ // if the tag is still open IE has created the children as siblings and
+ // it has also created a tag with the name "/FOO"
+ if (outerHTML.slice(-2) != "/>") {
+ var tagName = "/" + el.tagName;
+ var ns;
+ // remove content
+ while ((ns = el.nextSibling) && ns.tagName != tagName) {
+ ns.removeNode();
+ }
+ // remove the incorrect closing tag
+ if (ns) {
+ ns.removeNode();
+ }
+ }
+ el.parentNode.replaceChild(newEl, el);
+ return newEl;
+ },
+
+ /**
+ * Public initializes a canvas element so that it can be used as canvas
+ * element from now on. This is called automatically before the page is
+ * loaded but if you are creating elements using createElement you need to
+ * make sure this is called on the element.
+ * @param {HTMLElement} el The canvas element to initialize.
+ * @return {HTMLElement} the element that was created.
+ */
+ initElement: function (el) {
+ el = this.fixElement_(el);
+ el.getContext = function () {
+ if (this.context_) {
+ return this.context_;
+ }
+ return this.context_ = new CanvasRenderingContext2D_(this);
+ };
+
+ // do not use inline function because that will leak memory
+ el.attachEvent('onpropertychange', onPropertyChange);
+ el.attachEvent('onresize', onResize);
+
+ var attrs = el.attributes;
+ if (attrs.width && attrs.width.specified) {
+ // TODO: use runtimeStyle and coordsize
+ // el.getContext().setWidth_(attrs.width.nodeValue);
+ el.style.width = attrs.width.nodeValue + "px";
+ } else {
+ el.width = el.clientWidth;
+ }
+ if (attrs.height && attrs.height.specified) {
+ // TODO: use runtimeStyle and coordsize
+ // el.getContext().setHeight_(attrs.height.nodeValue);
+ el.style.height = attrs.height.nodeValue + "px";
+ } else {
+ el.height = el.clientHeight;
+ }
+ //el.getContext().setCoordsize_()
+ return el;
+ }
+ };
+
+ function onPropertyChange(e) {
+ var el = e.srcElement;
+
+ switch (e.propertyName) {
+ case 'width':
+ el.style.width = el.attributes.width.nodeValue + "px";
+ el.getContext().clearRect();
+ break;
+ case 'height':
+ el.style.height = el.attributes.height.nodeValue + "px";
+ el.getContext().clearRect();
+ break;
+ }
+ }
+
+ function onResize(e) {
+ var el = e.srcElement;
+ if (el.firstChild) {
+ el.firstChild.style.width = el.clientWidth + 'px';
+ el.firstChild.style.height = el.clientHeight + 'px';
+ }
+ }
+
+ G_vmlCanvasManager_.init();
+
+ // precompute "00" to "FF"
+ var dec2hex = [];
+ for (var i = 0; i < 16; i++) {
+ for (var j = 0; j < 16; j++) {
+ dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);
+ }
+ }
+
+ function createMatrixIdentity() {
+ return [
+ [1, 0, 0],
+ [0, 1, 0],
+ [0, 0, 1]
+ ];
+ }
+
+ function matrixMultiply(m1, m2) {
+ var result = createMatrixIdentity();
+
+ for (var x = 0; x < 3; x++) {
+ for (var y = 0; y < 3; y++) {
+ var sum = 0;
+
+ for (var z = 0; z < 3; z++) {
+ sum += m1[x][z] * m2[z][y];
+ }
+
+ result[x][y] = sum;
+ }
+ }
+ return result;
+ }
+
+ function copyState(o1, o2) {
+ o2.fillStyle = o1.fillStyle;
+ o2.lineCap = o1.lineCap;
+ o2.lineJoin = o1.lineJoin;
+ o2.lineWidth = o1.lineWidth;
+ o2.miterLimit = o1.miterLimit;
+ o2.shadowBlur = o1.shadowBlur;
+ o2.shadowColor = o1.shadowColor;
+ o2.shadowOffsetX = o1.shadowOffsetX;
+ o2.shadowOffsetY = o1.shadowOffsetY;
+ o2.strokeStyle = o1.strokeStyle;
+ o2.arcScaleX_ = o1.arcScaleX_;
+ o2.arcScaleY_ = o1.arcScaleY_;
+ }
+
+ function processStyle(styleString) {
+ var str, alpha = 1;
+
+ styleString = String(styleString);
+ if (styleString.substring(0, 3) == "rgb") {
+ var start = styleString.indexOf("(", 3);
+ var end = styleString.indexOf(")", start + 1);
+ var guts = styleString.substring(start + 1, end).split(",");
+
+ str = "#";
+ for (var i = 0; i < 3; i++) {
+ str += dec2hex[Number(guts[i])];
+ }
+
+ if ((guts.length == 4) && (styleString.substr(3, 1) == "a")) {
+ alpha = guts[3];
+ }
+ } else {
+ str = styleString;
+ }
+
+ return [str, alpha];
+ }
+
+ function processLineCap(lineCap) {
+ switch (lineCap) {
+ case "butt":
+ return "flat";
+ case "round":
+ return "round";
+ case "square":
+ default:
+ return "square";
+ }
+ }
+
+ /**
+ * This class implements CanvasRenderingContext2D interface as described by
+ * the WHATWG.
+ * @param {HTMLElement} surfaceElement The element that the 2D context should
+ * be associated with
+ */
+ function CanvasRenderingContext2D_(surfaceElement) {
+ this.m_ = createMatrixIdentity();
+
+ this.mStack_ = [];
+ this.aStack_ = [];
+ this.currentPath_ = [];
+
+ // Canvas context properties
+ this.strokeStyle = "#000";
+ this.fillStyle = "#000";
+
+ this.lineWidth = 1;
+ this.lineJoin = "miter";
+ this.lineCap = "butt";
+ this.miterLimit = Z * 1;
+ this.globalAlpha = 1;
+ this.canvas = surfaceElement;
+
+ var el = surfaceElement.ownerDocument.createElement('div');
+ el.style.width = surfaceElement.clientWidth + 'px';
+ el.style.height = surfaceElement.clientHeight + 'px';
+ el.style.overflow = 'hidden';
+ el.style.position = 'absolute';
+ surfaceElement.appendChild(el);
+
+ this.element_ = el;
+ this.arcScaleX_ = 1;
+ this.arcScaleY_ = 1;
+ }
+
+ var contextPrototype = CanvasRenderingContext2D_.prototype;
+ contextPrototype.clearRect = function() {
+ this.element_.innerHTML = "";
+ this.currentPath_ = [];
+ };
+
+ contextPrototype.beginPath = function() {
+ // TODO: Branch current matrix so that save/restore has no effect
+ // as per safari docs.
+
+ this.currentPath_ = [];
+ };
+
+ contextPrototype.moveTo = function(aX, aY) {
+ this.currentPath_.push({type: "moveTo", x: aX, y: aY});
+ this.currentX_ = aX;
+ this.currentY_ = aY;
+ };
+
+ contextPrototype.lineTo = function(aX, aY) {
+ this.currentPath_.push({type: "lineTo", x: aX, y: aY});
+ this.currentX_ = aX;
+ this.currentY_ = aY;
+ };
+
+ contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
+ aCP2x, aCP2y,
+ aX, aY) {
+ this.currentPath_.push({type: "bezierCurveTo",
+ cp1x: aCP1x,
+ cp1y: aCP1y,
+ cp2x: aCP2x,
+ cp2y: aCP2y,
+ x: aX,
+ y: aY});
+ this.currentX_ = aX;
+ this.currentY_ = aY;
+ };
+
+ contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
+ // the following is lifted almost directly from
+ // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
+ var cp1x = this.currentX_ + 2.0 / 3.0 * (aCPx - this.currentX_);
+ var cp1y = this.currentY_ + 2.0 / 3.0 * (aCPy - this.currentY_);
+ var cp2x = cp1x + (aX - this.currentX_) / 3.0;
+ var cp2y = cp1y + (aY - this.currentY_) / 3.0;
+ this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, aX, aY);
+ };
+
+ contextPrototype.arc = function(aX, aY, aRadius,
+ aStartAngle, aEndAngle, aClockwise) {
+ aRadius *= Z;
+ var arcType = aClockwise ? "at" : "wa";
+
+ var xStart = aX + (mc(aStartAngle) * aRadius) - Z2;
+ var yStart = aY + (ms(aStartAngle) * aRadius) - Z2;
+
+ var xEnd = aX + (mc(aEndAngle) * aRadius) - Z2;
+ var yEnd = aY + (ms(aEndAngle) * aRadius) - Z2;
+
+ // IE won't render arches drawn counter clockwise if xStart == xEnd.
+ if (xStart == xEnd && !aClockwise) {
+ xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
+ // that can be represented in binary
+ }
+
+ this.currentPath_.push({type: arcType,
+ x: aX,
+ y: aY,
+ radius: aRadius,
+ xStart: xStart,
+ yStart: yStart,
+ xEnd: xEnd,
+ yEnd: yEnd});
+
+ };
+
+ contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ };
+
+ contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
+ // Will destroy any existing path (same as FF behaviour)
+ this.beginPath();
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ this.stroke();
+ };
+
+ contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
+ // Will destroy any existing path (same as FF behaviour)
+ this.beginPath();
+ this.moveTo(aX, aY);
+ this.lineTo(aX + aWidth, aY);
+ this.lineTo(aX + aWidth, aY + aHeight);
+ this.lineTo(aX, aY + aHeight);
+ this.closePath();
+ this.fill();
+ };
+
+ contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
+ var gradient = new CanvasGradient_("gradient");
+ return gradient;
+ };
+
+ contextPrototype.createRadialGradient = function(aX0, aY0,
+ aR0, aX1,
+ aY1, aR1) {
+ var gradient = new CanvasGradient_("gradientradial");
+ gradient.radius1_ = aR0;
+ gradient.radius2_ = aR1;
+ gradient.focus_.x = aX0;
+ gradient.focus_.y = aY0;
+ return gradient;
+ };
+
+ contextPrototype.drawImage = function (image, var_args) {
+ var dx, dy, dw, dh, sx, sy, sw, sh;
+
+ // to find the original width we overide the width and height
+ var oldRuntimeWidth = image.runtimeStyle.width;
+ var oldRuntimeHeight = image.runtimeStyle.height;
+ image.runtimeStyle.width = 'auto';
+ image.runtimeStyle.height = 'auto';
+
+ // get the original size
+ var w = image.width;
+ var h = image.height;
+
+ // and remove overides
+ image.runtimeStyle.width = oldRuntimeWidth;
+ image.runtimeStyle.height = oldRuntimeHeight;
+
+ if (arguments.length == 3) {
+ dx = arguments[1];
+ dy = arguments[2];
+ sx = sy = 0;
+ sw = dw = w;
+ sh = dh = h;
+ } else if (arguments.length == 5) {
+ dx = arguments[1];
+ dy = arguments[2];
+ dw = arguments[3];
+ dh = arguments[4];
+ sx = sy = 0;
+ sw = w;
+ sh = h;
+ } else if (arguments.length == 9) {
+ sx = arguments[1];
+ sy = arguments[2];
+ sw = arguments[3];
+ sh = arguments[4];
+ dx = arguments[5];
+ dy = arguments[6];
+ dw = arguments[7];
+ dh = arguments[8];
+ } else {
+ throw "Invalid number of arguments";
+ }
+
+ var d = this.getCoords_(dx, dy);
+
+ var w2 = sw / 2;
+ var h2 = sh / 2;
+
+ var vmlStr = [];
+
+ var W = 10;
+ var H = 10;
+
+ // For some reason that I've now forgotten, using divs didn't work
+ vmlStr.push(' <g_vml_:group',
+ ' coordsize="', Z * W, ',', Z * H, '"',
+ ' coordorigin="0,0"' ,
+ ' style="width:', W, ';height:', H, ';position:absolute;');
+
+ // If filters are necessary (rotation exists), create them
+ // filters are bog-slow, so only create them if abbsolutely necessary
+ // The following check doesn't account for skews (which don't exist
+ // in the canvas spec (yet) anyway.
+
+ if (this.m_[0][0] != 1 || this.m_[0][1]) {
+ var filter = [];
+
+ // Note the 12/21 reversal
+ filter.push("M11='", this.m_[0][0], "',",
+ "M12='", this.m_[1][0], "',",
+ "M21='", this.m_[0][1], "',",
+ "M22='", this.m_[1][1], "',",
+ "Dx='", mr(d.x / Z), "',",
+ "Dy='", mr(d.y / Z), "'");
+
+ // Bounding box calculation (need to minimize displayed area so that
+ // filters don't waste time on unused pixels.
+ var max = d;
+ var c2 = this.getCoords_(dx + dw, dy);
+ var c3 = this.getCoords_(dx, dy + dh);
+ var c4 = this.getCoords_(dx + dw, dy + dh);
+
+ max.x = Math.max(max.x, c2.x, c3.x, c4.x);
+ max.y = Math.max(max.y, c2.y, c3.y, c4.y);
+
+ vmlStr.push("padding:0 ", mr(max.x / Z), "px ", mr(max.y / Z),
+ "px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",
+ filter.join(""), ", sizingmethod='clip');");
+ } else {
+ vmlStr.push("top:", mr(d.y / Z), "px;left:", mr(d.x / Z), "px;");
+ }
+
+ vmlStr.push(' ">' ,
+ '<g_vml_:image src="', image.src, '"',
+ ' style="width:', Z * dw, ';',
+ ' height:', Z * dh, ';"',
+ ' cropleft="', sx / w, '"',
+ ' croptop="', sy / h, '"',
+ ' cropright="', (w - sx - sw) / w, '"',
+ ' cropbottom="', (h - sy - sh) / h, '"',
+ ' />',
+ '</g_vml_:group>');
+
+ this.element_.insertAdjacentHTML("BeforeEnd",
+ vmlStr.join(""));
+ };
+
+ contextPrototype.stroke = function(aFill) {
+ var lineStr = [];
+ var lineOpen = false;
+ var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);
+ var color = a[0];
+ var opacity = a[1] * this.globalAlpha;
+
+ var W = 10;
+ var H = 10;
+
+ lineStr.push('<g_vml_:shape',
+ ' fillcolor="', color, '"',
+ ' filled="', Boolean(aFill), '"',
+ ' style="position:absolute;width:', W, ';height:', H, ';"',
+ ' coordorigin="0 0" coordsize="', Z * W, ' ', Z * H, '"',
+ ' stroked="', !aFill, '"',
+ ' strokeweight="', this.lineWidth, '"',
+ ' strokecolor="', color, '"',
+ ' path="');
+
+ var newSeq = false;
+ var min = {x: null, y: null};
+ var max = {x: null, y: null};
+
+ for (var i = 0; i < this.currentPath_.length; i++) {
+ var p = this.currentPath_[i];
+
+ if (p.type == "moveTo") {
+ lineStr.push(" m ");
+ var c = this.getCoords_(p.x, p.y);
+ lineStr.push(mr(c.x), ",", mr(c.y));
+ } else if (p.type == "lineTo") {
+ lineStr.push(" l ");
+ var c = this.getCoords_(p.x, p.y);
+ lineStr.push(mr(c.x), ",", mr(c.y));
+ } else if (p.type == "close") {
+ lineStr.push(" x ");
+ } else if (p.type == "bezierCurveTo") {
+ lineStr.push(" c ");
+ var c = this.getCoords_(p.x, p.y);
+ var c1 = this.getCoords_(p.cp1x, p.cp1y);
+ var c2 = this.getCoords_(p.cp2x, p.cp2y);
+ lineStr.push(mr(c1.x), ",", mr(c1.y), ",",
+ mr(c2.x), ",", mr(c2.y), ",",
+ mr(c.x), ",", mr(c.y));
+ } else if (p.type == "at" || p.type == "wa") {
+ lineStr.push(" ", p.type, " ");
+ var c = this.getCoords_(p.x, p.y);
+ var cStart = this.getCoords_(p.xStart, p.yStart);
+ var cEnd = this.getCoords_(p.xEnd, p.yEnd);
+
+ lineStr.push(mr(c.x - this.arcScaleX_ * p.radius), ",",
+ mr(c.y - this.arcScaleY_ * p.radius), " ",
+ mr(c.x + this.arcScaleX_ * p.radius), ",",
+ mr(c.y + this.arcScaleY_ * p.radius), " ",
+ mr(cStart.x), ",", mr(cStart.y), " ",
+ mr(cEnd.x), ",", mr(cEnd.y));
+ }
+
+
+ // TODO: Following is broken for curves due to
+ // move to proper paths.
+
+ // Figure out dimensions so we can do gradient fills
+ // properly
+ if(c) {
+ if (min.x == null || c.x < min.x) {
+ min.x = c.x;
+ }
+ if (max.x == null || c.x > max.x) {
+ max.x = c.x;
+ }
+ if (min.y == null || c.y < min.y) {
+ min.y = c.y;
+ }
+ if (max.y == null || c.y > max.y) {
+ max.y = c.y;
+ }
+ }
+ }
+ lineStr.push(' ">');
+
+ if (typeof this.fillStyle == "object") {
+ var focus = {x: "50%", y: "50%"};
+ var width = (max.x - min.x);
+ var height = (max.y - min.y);
+ var dimension = (width > height) ? width : height;
+
+ focus.x = mr((this.fillStyle.focus_.x / width) * 100 + 50) + "%";
+ focus.y = mr((this.fillStyle.focus_.y / height) * 100 + 50) + "%";
+
+ var colors = [];
+
+ // inside radius (%)
+ if (this.fillStyle.type_ == "gradientradial") {
+ var inside = (this.fillStyle.radius1_ / dimension * 100);
+
+ // percentage that outside radius exceeds inside radius
+ var expansion = (this.fillStyle.radius2_ / dimension * 100) - inside;
+ } else {
+ var inside = 0;
+ var expansion = 100;
+ }
+
+ var insidecolor = {offset: null, color: null};
+ var outsidecolor = {offset: null, color: null};
+
+ // We need to sort 'colors' by percentage, from 0 > 100 otherwise ie
+ // won't interpret it correctly
+ this.fillStyle.colors_.sort(function (cs1, cs2) {
+ return cs1.offset - cs2.offset;
+ });
+
+ for (var i = 0; i < this.fillStyle.colors_.length; i++) {
+ var fs = this.fillStyle.colors_[i];
+
+ colors.push( (fs.offset * expansion) + inside, "% ", fs.color, ",");
+
+ if (fs.offset > insidecolor.offset || insidecolor.offset == null) {
+ insidecolor.offset = fs.offset;
+ insidecolor.color = fs.color;
+ }
+
+ if (fs.offset < outsidecolor.offset || outsidecolor.offset == null) {
+ outsidecolor.offset = fs.offset;
+ outsidecolor.color = fs.color;
+ }
+ }
+ colors.pop();
+
+ lineStr.push('<g_vml_:fill',
+ ' color="', outsidecolor.color, '"',
+ ' color2="', insidecolor.color, '"',
+ ' type="', this.fillStyle.type_, '"',
+ ' focusposition="', focus.x, ', ', focus.y, '"',
+ ' colors="', colors.join(""), '"',
+ ' opacity="', opacity, '" />');
+ } else if (aFill) {
+ lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
+ } else {
+ lineStr.push(
+ '<g_vml_:stroke',
+ ' opacity="', opacity,'"',
+ ' joinstyle="', this.lineJoin, '"',
+ ' miterlimit="', this.miterLimit, '"',
+ ' endcap="', processLineCap(this.lineCap) ,'"',
+ ' weight="', this.lineWidth, 'px"',
+ ' color="', color,'" />'
+ );
+ }
+
+ lineStr.push("</g_vml_:shape>");
+
+ this.element_.insertAdjacentHTML("beforeEnd", lineStr.join(""));
+
+ //this.currentPath_ = [];
+ };
+
+ contextPrototype.fill = function() {
+ this.stroke(true);
+ };
+
+ contextPrototype.closePath = function() {
+ this.currentPath_.push({type: "close"});
+ };
+
+ /**
+ * @private
+ */
+ contextPrototype.getCoords_ = function(aX, aY) {
+ return {
+ x: Z * (aX * this.m_[0][0] + aY * this.m_[1][0] + this.m_[2][0]) - Z2,
+ y: Z * (aX * this.m_[0][1] + aY * this.m_[1][1] + this.m_[2][1]) - Z2
+ };
+ };
+
+ contextPrototype.save = function() {
+ var o = {};
+ copyState(this, o);
+ this.aStack_.push(o);
+ this.mStack_.push(this.m_);
+ this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
+ };
+
+ contextPrototype.restore = function() {
+ copyState(this.aStack_.pop(), this);
+ this.m_ = this.mStack_.pop();
+ };
+
+ contextPrototype.translate = function(aX, aY) {
+ var m1 = [
+ [1, 0, 0],
+ [0, 1, 0],
+ [aX, aY, 1]
+ ];
+
+ this.m_ = matrixMultiply(m1, this.m_);
+ };
+
+ contextPrototype.rotate = function(aRot) {
+ var c = mc(aRot);
+ var s = ms(aRot);
+
+ var m1 = [
+ [c, s, 0],
+ [-s, c, 0],
+ [0, 0, 1]
+ ];
+
+ this.m_ = matrixMultiply(m1, this.m_);
+ };
+
+ contextPrototype.scale = function(aX, aY) {
+ this.arcScaleX_ *= aX;
+ this.arcScaleY_ *= aY;
+ var m1 = [
+ [aX, 0, 0],
+ [0, aY, 0],
+ [0, 0, 1]
+ ];
+
+ this.m_ = matrixMultiply(m1, this.m_);
+ };
+
+ /******** STUBS ********/
+ contextPrototype.clip = function() {
+ // TODO: Implement
+ };
+
+ contextPrototype.arcTo = function() {
+ // TODO: Implement
+ };
+
+ contextPrototype.createPattern = function() {
+ return new CanvasPattern_;
+ };
+
+ // Gradient / Pattern Stubs
+ function CanvasGradient_(aType) {
+ this.type_ = aType;
+ this.radius1_ = 0;
+ this.radius2_ = 0;
+ this.colors_ = [];
+ this.focus_ = {x: 0, y: 0};
+ }
+
+ CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
+ aColor = processStyle(aColor);
+ this.colors_.push({offset: 1-aOffset, color: aColor});
+ };
+
+ function CanvasPattern_() {}
+
+ // set up externs
+ G_vmlCanvasManager = G_vmlCanvasManager_;
+ CanvasRenderingContext2D = CanvasRenderingContext2D_;
+ CanvasGradient = CanvasGradient_;
+ CanvasPattern = CanvasPattern_;
+
+})();
+
+} // if
diff --git a/src/usr/local/www/reboot.php b/src/usr/local/www/reboot.php
new file mode 100755
index 0000000..3a986ac
--- /dev/null
+++ b/src/usr/local/www/reboot.php
@@ -0,0 +1,72 @@
+<?php
+/* $Id$ */
+/*
+ reboot.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-rebootsystem
+##|*NAME=Diagnostics: Reboot System page
+##|*DESCR=Allow access to the 'Diagnostics: Reboot System' page.
+##|*MATCH=reboot.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require("captiveportal.inc");
+
+if ($_POST['Submit'] == " " . gettext("No") . " ") {
+ header("Location: index.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Reboot System"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($_POST['Submit'] == " " . gettext("Yes") . " "): ?>
+<meta http-equiv=\"refresh\" content=\"70;url=/\">
+<?php print_info_box(gettext("The system is rebooting now. This may take one minute.")); ?>
+<pre>
+<?php system_reboot(); ?>
+</pre>
+<?php else: ?>
+<form action="reboot.php" method="post">
+ <p><strong><?=gettext("Are you sure you want to reboot the system?");?></strong></p>
+ <p>
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("Yes");?> " />
+ <input name="Submit" type="submit" class="formbtn" value=" <?=gettext("No");?> " />
+ </p>
+</form>
+<?php endif; ?>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/restart_httpd.php b/src/usr/local/www/restart_httpd.php
new file mode 100644
index 0000000..2f59bbf
--- /dev/null
+++ b/src/usr/local/www/restart_httpd.php
@@ -0,0 +1,68 @@
+<?php
+/* $Id$ */
+/*
+ restart_httpd.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005 Bill Marquette <bill.marquette@gmail.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/chmod
+ pfSense_MODULE: pkgs
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-restart-httpd
+##|*NAME=Diagnostics: Restart HTTPD : System page
+##|*DESCR=Allow access to the 'Diagnostics: Restart HTTPD: System' page.
+##|*MATCH=restart_httpd.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+$pgtitle = array(gettext("Restarting httpd"));
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<form>
+<?php include("fbegin.inc"); ?>
+
+<?=gettext("Mounting file systems read/write");?>...
+<?php flush(); sleep(1); conf_mount_rw(); ?>
+<?=gettext("Done");?>.<br />
+<?=gettext("Forcing all PHP file permissions to 0755");?>...
+<?php flush(); sleep(1); system('/bin/chmod -R 0755 /usr/local/www/*.php'); ?>
+<?=gettext("Done");?>.<br />
+<?=gettext("Mounting file systems read only");?>...
+<?php flush(); sleep(1); conf_mount_ro(); ?>
+<?=gettext("Done");?>.<br />
+<?=gettext("Restarting mini_httpd");?>...
+<?php flush(); sleep(1); system_webgui_start(); ?>
+<?=gettext("Done");?>.<br />
+
+<?php
+include("fend.inc");
+?>
diff --git a/src/usr/local/www/services_captiveportal.php b/src/usr/local/www/services_captiveportal.php
new file mode 100644
index 0000000..515bcbb
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal.php
@@ -0,0 +1,1253 @@
+<?php
+/*
+ services_captiveportal.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal
+##|*NAME=Services: Captive portal page
+##|*DESCR=Allow access to the 'Services: Captive portal' page.
+##|*MATCH=services_captiveportal.php*
+##|-PRIV
+
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("captiveportal.inc");
+
+if (substr($_GET['act'], 0, 3) == "get") {
+ $nocsrf = true;
+}
+
+require_once("guiconfig.inc");
+
+global $cpzone;
+global $cpzoneid;
+
+$cpzoneid = 1; /* Just a default */
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal";
+
+if ($_GET['act'] == "viewhtml") {
+ if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
+ echo base64_decode($a_cp[$cpzone]['page']['htmltext']);
+ }
+ exit;
+} else if ($_GET['act'] == "gethtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
+ $file_data = base64_decode($a_cp[$cpzone]['page']['htmltext']);
+ $file_size = strlen($file_data);
+
+ header("Content-Type: text/html");
+ header("Content-Disposition: attachment; filename=portal.html");
+ header("Content-Length: $file_size");
+ echo $file_data;
+
+ exit;
+} else if ($_GET['act'] == "delhtmlhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['htmltext']) {
+ unset($a_cp[$cpzone]['page']['htmltext']);
+ write_config(sprintf(gettext("Captive Portal: zone %s: Restore default portal page"), $cpzone));
+ header("Location: services_captiveportal.php?zone={$cpzone}");
+ exit;
+} else if ($_GET['act'] == "viewerrhtml") {
+ if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
+ echo base64_decode($a_cp[$cpzone]['page']['errtext']);
+ }
+ exit;
+} else if ($_GET['act'] == "geterrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
+ $file_data = base64_decode($a_cp[$cpzone]['page']['errtext']);
+ $file_size = strlen($file_data);
+
+ header("Content-Type: text/html");
+ header("Content-Disposition: attachment; filename=err.html");
+ header("Content-Length: $file_size");
+ echo $file_data;
+
+ exit;
+} else if ($_GET['act'] == "delerrhtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['errtext']) {
+ unset($a_cp[$cpzone]['page']['errtext']);
+ write_config(sprintf(gettext("Captive Portal: zone %s: Restore default error page"), $cpzone));
+ header("Location: services_captiveportal.php?zone={$cpzone}");
+ exit;
+} else if ($_GET['act'] == "viewlogouthtml") {
+ if ($a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
+ echo base64_decode($a_cp[$cpzone]['page']['logouttext']);
+ }
+ exit;
+} else if ($_GET['act'] == "getlogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
+ $file_data = base64_decode($a_cp[$cpzone]['page']['logouttext']);
+ $file_size = strlen($file_data);
+
+ header("Content-Type: text/html");
+ header("Content-Disposition: attachment; filename=logout.html");
+ header("Content-Length: $file_size");
+ echo $file_data;
+
+ exit;
+} else if ($_GET['act'] == "dellogouthtml" && $a_cp[$cpzone] && $a_cp[$cpzone]['page']['logouttext']) {
+ unset($a_cp[$cpzone]['page']['logouttext']);
+ write_config(sprintf(gettext("Captive Portal: zone %s: Restore default logout page"), $cpzone));
+ header("Location: services_captiveportal.php?zone={$cpzone}");
+ exit;
+}
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+if ($a_cp[$cpzone]) {
+ $cpzoneid = $pconfig['zoneid'] = $a_cp[$cpzone]['zoneid'];
+ $pconfig['cinterface'] = $a_cp[$cpzone]['interface'];
+ $pconfig['maxproc'] = $a_cp[$cpzone]['maxproc'];
+ $pconfig['maxprocperip'] = $a_cp[$cpzone]['maxprocperip'];
+ $pconfig['timeout'] = $a_cp[$cpzone]['timeout'];
+ $pconfig['idletimeout'] = $a_cp[$cpzone]['idletimeout'];
+ $pconfig['freelogins_count'] = $a_cp[$cpzone]['freelogins_count'];
+ $pconfig['freelogins_resettimeout'] = $a_cp[$cpzone]['freelogins_resettimeout'];
+ $pconfig['freelogins_updatetimeouts'] = isset($a_cp[$cpzone]['freelogins_updatetimeouts']);
+ $pconfig['enable'] = isset($a_cp[$cpzone]['enable']);
+ $pconfig['auth_method'] = $a_cp[$cpzone]['auth_method'];
+ $pconfig['localauth_priv'] = isset($a_cp[$cpzone]['localauth_priv']);
+ $pconfig['radacct_enable'] = isset($a_cp[$cpzone]['radacct_enable']);
+ $pconfig['radmac_enable'] = isset($a_cp[$cpzone]['radmac_enable']);
+ $pconfig['radmac_secret'] = $a_cp[$cpzone]['radmac_secret'];
+ $pconfig['reauthenticate'] = isset($a_cp[$cpzone]['reauthenticate']);
+ $pconfig['reauthenticateacct'] = $a_cp[$cpzone]['reauthenticateacct'];
+ $pconfig['httpslogin_enable'] = isset($a_cp[$cpzone]['httpslogin']);
+ $pconfig['httpsname'] = $a_cp[$cpzone]['httpsname'];
+ $pconfig['preauthurl'] = strtolower($a_cp[$cpzone]['preauthurl']);
+ $pconfig['blockedmacsurl'] = strtolower($a_cp[$cpzone]['blockedmacsurl']);
+ $pconfig['certref'] = $a_cp[$cpzone]['certref'];
+ $pconfig['nohttpsforwards'] = isset($a_cp[$cpzone]['nohttpsforwards']);
+ $pconfig['logoutwin_enable'] = isset($a_cp[$cpzone]['logoutwin_enable']);
+ $pconfig['peruserbw'] = isset($a_cp[$cpzone]['peruserbw']);
+ $pconfig['bwdefaultdn'] = $a_cp[$cpzone]['bwdefaultdn'];
+ $pconfig['bwdefaultup'] = $a_cp[$cpzone]['bwdefaultup'];
+ $pconfig['nomacfilter'] = isset($a_cp[$cpzone]['nomacfilter']);
+ $pconfig['noconcurrentlogins'] = isset($a_cp[$cpzone]['noconcurrentlogins']);
+ $pconfig['radius_protocol'] = $a_cp[$cpzone]['radius_protocol'];
+ $pconfig['redirurl'] = $a_cp[$cpzone]['redirurl'];
+ $pconfig['radiusip'] = $a_cp[$cpzone]['radiusip'];
+ $pconfig['radiusip2'] = $a_cp[$cpzone]['radiusip2'];
+ $pconfig['radiusip3'] = $a_cp[$cpzone]['radiusip3'];
+ $pconfig['radiusip4'] = $a_cp[$cpzone]['radiusip4'];
+ $pconfig['radiusport'] = $a_cp[$cpzone]['radiusport'];
+ $pconfig['radiusport2'] = $a_cp[$cpzone]['radiusport2'];
+ $pconfig['radiusport3'] = $a_cp[$cpzone]['radiusport3'];
+ $pconfig['radiusport4'] = $a_cp[$cpzone]['radiusport4'];
+ $pconfig['radiusacctport'] = $a_cp[$cpzone]['radiusacctport'];
+ $pconfig['radiuskey'] = $a_cp[$cpzone]['radiuskey'];
+ $pconfig['radiuskey2'] = $a_cp[$cpzone]['radiuskey2'];
+ $pconfig['radiuskey3'] = $a_cp[$cpzone]['radiuskey3'];
+ $pconfig['radiuskey4'] = $a_cp[$cpzone]['radiuskey4'];
+ $pconfig['radiusvendor'] = $a_cp[$cpzone]['radiusvendor'];
+ $pconfig['radiussession_timeout'] = isset($a_cp[$cpzone]['radiussession_timeout']);
+ $pconfig['radiussrcip_attribute'] = $a_cp[$cpzone]['radiussrcip_attribute'];
+ $pconfig['passthrumacadd'] = isset($a_cp[$cpzone]['passthrumacadd']);
+ $pconfig['passthrumacaddusername'] = isset($a_cp[$cpzone]['passthrumacaddusername']);
+ $pconfig['radmac_format'] = $a_cp[$cpzone]['radmac_format'];
+ $pconfig['reverseacct'] = isset($a_cp[$cpzone]['reverseacct']);
+ $pconfig['radiusnasid'] = $a_cp[$cpzone]['radiusnasid'];
+ $pconfig['page'] = array();
+ if ($a_cp[$cpzone]['page']['htmltext']) {
+ $pconfig['page']['htmltext'] = $a_cp[$cpzone]['page']['htmltext'];
+ }
+ if ($a_cp[$cpzone]['page']['errtext']) {
+ $pconfig['page']['errtext'] = $a_cp[$cpzone]['page']['errtext'];
+ }
+ if ($a_cp[$cpzone]['page']['logouttext']) {
+ $pconfig['page']['logouttext'] = $a_cp[$cpzone]['page']['logouttext'];
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable']) {
+ $reqdfields = explode(" ", "zone cinterface");
+ $reqdfieldsn = array(gettext("Zone name"), gettext("Interface"));
+
+ if (isset($_POST['auth_method']) && $_POST['auth_method'] == "radius") {
+ $reqdfields[] = "radius_protocol";
+ $reqdfieldsn[] = gettext("RADIUS Protocol");
+ $reqdfields[] = "radiusip";
+ $reqdfieldsn[] = gettext("Primary RADIUS server IP address");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* make sure no interfaces are bridged or used on other zones */
+ if (is_array($_POST['cinterface'])) {
+ foreach ($pconfig['cinterface'] as $cpbrif) {
+ if (link_interface_to_bridge($cpbrif)) {
+ $input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is part of a bridge."), $cpbrif);
+ }
+ foreach ($a_cp as $cpkey => $cp) {
+ if ($cpkey != $cpzone || empty($cpzone)) {
+ if (in_array($cpbrif, explode(",", $cp['interface']))) {
+ $input_errors[] = sprintf(gettext("The captive portal cannot be used on interface %s since it is used already on %s instance."), $cpbrif, $cp['zone']);
+ }
+ }
+ }
+ }
+ }
+
+ if ($_POST['httpslogin_enable']) {
+ if (!$_POST['certref']) {
+ $input_errors[] = gettext("Certificate must be specified for HTTPS login.");
+ }
+ if (!$_POST['httpsname'] || !is_domain($_POST['httpsname'])) {
+ $input_errors[] = gettext("The HTTPS server name must be specified for HTTPS login.");
+ }
+ }
+ }
+
+ if ($_POST['timeout']) {
+ if (!is_numeric($_POST['timeout']) || ($_POST['timeout'] < 1)) {
+ $input_errors[] = gettext("The timeout must be at least 1 minute.");
+ } else if (isset($config['dhcpd']) && is_array($config['dhcpd'])) {
+ foreach ($config['dhcpd'] as $dhcpd_if => $dhcpd_data) {
+ if (!isset($dhcpd_data['enable'])) {
+ continue;
+ }
+ if (!is_array($_POST['cinterface']) || !in_array($dhcpd_if, $_POST['cinterface'])) {
+ continue;
+ }
+
+ $deftime = 7200; // Default lease time
+ if (isset($dhcpd_data['defaultleasetime']) && is_numeric($dhcpd_data['defaultleasetime'])) {
+ $deftime = $dhcpd_data['defaultleasetime'];
+ }
+
+ if ($_POST['timeout'] > $deftime) {
+ $input_errors[] = gettext("Hard timeout must be less or equal Default lease time set on DHCP Server");
+ }
+ }
+ }
+ }
+ if ($_POST['idletimeout'] && (!is_numeric($_POST['idletimeout']) || ($_POST['idletimeout'] < 1))) {
+ $input_errors[] = gettext("The idle timeout must be at least 1 minute.");
+ }
+ if ($_POST['freelogins_count'] && (!is_numeric($_POST['freelogins_count']))) {
+ $input_errors[] = gettext("The pass-through credit count must be a number or left blank.");
+ } else if ($_POST['freelogins_count'] && is_numeric($_POST['freelogins_count']) && ($_POST['freelogins_count'] >= 1)) {
+ if (empty($_POST['freelogins_resettimeout']) || !is_numeric($_POST['freelogins_resettimeout']) || ($_POST['freelogins_resettimeout'] <= 0)) {
+ $input_errors[] = gettext("The waiting period to restore pass-through credits must be above 0 hours.");
+ }
+ }
+ if (($_POST['radiusip'] && !is_ipaddr($_POST['radiusip']))) {
+ $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip']);
+ }
+ if (($_POST['radiusip2'] && !is_ipaddr($_POST['radiusip2']))) {
+ $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip2']);
+ }
+ if (($_POST['radiusip3'] && !is_ipaddr($_POST['radiusip3']))) {
+ $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip3']);
+ }
+ if (($_POST['radiusip4'] && !is_ipaddr($_POST['radiusip4']))) {
+ $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['radiusip4']);
+ }
+ if (($_POST['radiusport'] && !is_port($_POST['radiusport']))) {
+ $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport']);
+ }
+ if (($_POST['radiusport2'] && !is_port($_POST['radiusport2']))) {
+ $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport2']);
+ }
+ if (($_POST['radiusport3'] && !is_port($_POST['radiusport3']))) {
+ $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport3']);
+ }
+ if (($_POST['radiusport4'] && !is_port($_POST['radiusport4']))) {
+ $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusport4']);
+ }
+ if (($_POST['radiusacctport'] && !is_port($_POST['radiusacctport']))) {
+ $input_errors[] = sprintf(gettext("A valid port number must be specified. [%s]"), $_POST['radiusacctport']);
+ }
+ if ($_POST['maxproc'] && (!is_numeric($_POST['maxproc']) || ($_POST['maxproc'] < 4) || ($_POST['maxproc'] > 100))) {
+ $input_errors[] = gettext("The maximum number of concurrent connections per client IP address may not be larger than the global maximum.");
+ }
+ if (trim($_POST['radiusnasid']) !== "" && !preg_match("/^[\x21-\x7e]{3,253}$/i", trim($_POST['radiusnasid']))) {
+ $input_errors[] = gettext("The NAS-Identifier must be 3-253 characters long and should only contain ASCII characters.");
+ }
+
+ if (!$input_errors) {
+ $newcp =& $a_cp[$cpzone];
+ //$newcp['zoneid'] = $a_cp[$cpzone]['zoneid'];
+ if (empty($newcp['zoneid'])) {
+ $newcp['zoneid'] = 2;
+ foreach ($a_cp as $keycpzone => $cp) {
+ if ($cp['zoneid'] == $newcp['zoneid'] && $keycpzone != $cpzone) {
+ $newcp['zoneid'] += 2; /* Reserve space for SSL config if needed */
+ }
+ }
+ $cpzoneid = $newcp['zoneid'];
+ }
+ $oldifaces = explode(",", $newcp['interface']);
+ if (is_array($_POST['cinterface'])) {
+ $newcp['interface'] = implode(",", $_POST['cinterface']);
+ }
+ $newcp['maxproc'] = $_POST['maxproc'];
+ $newcp['maxprocperip'] = $_POST['maxprocperip'] ? $_POST['maxprocperip'] : false;
+ $newcp['timeout'] = $_POST['timeout'];
+ $newcp['idletimeout'] = $_POST['idletimeout'];
+ $newcp['freelogins_count'] = $_POST['freelogins_count'];
+ $newcp['freelogins_resettimeout'] = $_POST['freelogins_resettimeout'];
+ $newcp['freelogins_updatetimeouts'] = $_POST['freelogins_updatetimeouts'] ? true : false;
+ if ($_POST['enable']) {
+ $newcp['enable'] = true;
+ } else {
+ unset($newcp['enable']);
+ }
+ $newcp['auth_method'] = $_POST['auth_method'];
+ $newcp['localauth_priv'] = isset($_POST['localauth_priv']);
+ $newcp['radacct_enable'] = $_POST['radacct_enable'] ? true : false;
+ $newcp['reauthenticate'] = $_POST['reauthenticate'] ? true : false;
+ $newcp['radmac_enable'] = $_POST['radmac_enable'] ? true : false;
+ $newcp['radmac_secret'] = $_POST['radmac_secret'] ? $_POST['radmac_secret'] : false;
+ $newcp['reauthenticateacct'] = $_POST['reauthenticateacct'];
+ if ($_POST['httpslogin_enable']) {
+ $newcp['httpslogin'] = true;
+ } else {
+ unset($newcp['httpslogin']);
+ }
+ $newcp['httpsname'] = $_POST['httpsname'];
+ $newcp['preauthurl'] = $_POST['preauthurl'];
+ $newcp['blockedmacsurl'] = $_POST['blockedmacsurl'];
+ $newcp['peruserbw'] = $_POST['peruserbw'] ? true : false;
+ if (isset($_POST['bwdefaultdn'])) {
+ $newcp['bwdefaultdn'] = $_POST['bwdefaultdn'];
+ } else {
+ unset($newcp['bwdefaultdn']);
+ }
+ if (isset($_POST['bwdefaultup'])) {
+ $newcp['bwdefaultup'] = $_POST['bwdefaultup'];
+ } else {
+ unset($newcp['bwdefaultup']);
+ }
+ $newcp['certref'] = $_POST['certref'];
+ $newcp['nohttpsforwards'] = $_POST['nohttpsforwards'] ? true : false;
+ $newcp['logoutwin_enable'] = $_POST['logoutwin_enable'] ? true : false;
+ $newcp['nomacfilter'] = $_POST['nomacfilter'] ? true : false;
+ $newcp['noconcurrentlogins'] = $_POST['noconcurrentlogins'] ? true : false;
+ $newcp['radius_protocol'] = $_POST['radius_protocol'];
+ $newcp['redirurl'] = $_POST['redirurl'];
+ if (isset($_POST['radiusip'])) {
+ $newcp['radiusip'] = $_POST['radiusip'];
+ } else {
+ unset($newcp['radiusip']);
+ }
+ if (isset($_POST['radiusip2'])) {
+ $newcp['radiusip2'] = $_POST['radiusip2'];
+ } else {
+ unset($newcp['radiusip2']);
+ }
+ if (isset($_POST['radiusip3'])) {
+ $newcp['radiusip3'] = $_POST['radiusip3'];
+ } else {
+ unset($newcp['radiusip3']);
+ }
+ if (isset($_POST['radiusip4'])) {
+ $newcp['radiusip4'] = $_POST['radiusip4'];
+ } else {
+ unset($newcp['radiusip4']);
+ }
+ $newcp['radiusport'] = $_POST['radiusport'];
+ $newcp['radiusport2'] = $_POST['radiusport2'];
+ if (isset($_POST['radiusport3'])) {
+ $newcp['radiusport3'] = $_POST['radiusport3'];
+ }
+ if (isset($_POST['radiusport4'])) {
+ $newcp['radiusport4'] = $_POST['radiusport4'];
+ }
+ $newcp['radiusacctport'] = $_POST['radiusacctport'];
+ $newcp['radiuskey'] = $_POST['radiuskey'];
+ $newcp['radiuskey2'] = $_POST['radiuskey2'];
+ $newcp['radiuskey3'] = $_POST['radiuskey3'];
+ $newcp['radiuskey4'] = $_POST['radiuskey4'];
+ $newcp['radiusvendor'] = $_POST['radiusvendor'] ? $_POST['radiusvendor'] : false;
+ $newcp['radiussession_timeout'] = $_POST['radiussession_timeout'] ? true : false;
+ $newcp['radiussrcip_attribute'] = $_POST['radiussrcip_attribute'];
+ $newcp['passthrumacadd'] = $_POST['passthrumacadd'] ? true : false;
+ $newcp['passthrumacaddusername'] = $_POST['passthrumacaddusername'] ? true : false;
+ $newcp['radmac_format'] = $_POST['radmac_format'] ? $_POST['radmac_format'] : false;
+ $newcp['reverseacct'] = $_POST['reverseacct'] ? true : false;
+ $newcp['radiusnasid'] = trim($_POST['radiusnasid']);
+ if (!is_array($newcp['page'])) {
+ $newcp['page'] = array();
+ }
+
+ /* file upload? */
+ if (is_uploaded_file($_FILES['htmlfile']['tmp_name'])) {
+ $newcp['page']['htmltext'] = base64_encode(file_get_contents($_FILES['htmlfile']['tmp_name']));
+ }
+ if (is_uploaded_file($_FILES['errfile']['tmp_name'])) {
+ $newcp['page']['errtext'] = base64_encode(file_get_contents($_FILES['errfile']['tmp_name']));
+ }
+ if (is_uploaded_file($_FILES['logoutfile']['tmp_name'])) {
+ $newcp['page']['logouttext'] = base64_encode(file_get_contents($_FILES['logoutfile']['tmp_name']));
+ }
+
+ write_config();
+
+ /* Clear up unselected interfaces */
+ $newifaces = explode(",", $newcp['interface']);
+ $toremove = array_diff($oldifaces, $newifaces);
+ if (!empty($toremove)) {
+ foreach ($toremove as $removeif) {
+ $removeif = get_real_interface($removeif);
+ mwexec("/sbin/ipfw zone {$cpzoneid} mdel {$removeif}");
+ }
+ }
+ captiveportal_configure_zone($newcp);
+ unset($newcp, $newifaces, $toremove);
+ filter_configure();
+ header("Location: services_captiveportal_zones.php");
+ exit;
+ } else {
+ if (is_array($_POST['cinterface'])) {
+ $pconfig['cinterface'] = implode(",", $_POST['cinterface']);
+ }
+ }
+}
+$closehead = false;
+include("head.inc");
+?>
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_change) {
+ var endis, radius_endis;
+ endis = !(document.iform.enable.checked || enable_change);
+ localauth_endis = !((!endis && document.iform.auth_method[1].checked) || enable_change);
+ radius_endis = !((!endis && document.iform.auth_method[2].checked) || enable_change);
+ https_endis = !((!endis && document.iform.httpslogin_enable.checked) || enable_change);
+
+ document.iform.cinterface.disabled = endis;
+ //document.iform.maxproc.disabled = endis;
+ document.iform.maxprocperip.disabled = endis;
+ document.iform.idletimeout.disabled = endis;
+ document.iform.freelogins_count.disabled = endis;
+ document.iform.freelogins_resettimeout.disabled = endis;
+ document.iform.freelogins_updatetimeouts.disabled = endis;
+ document.iform.timeout.disabled = endis;
+ document.iform.preauthurl.disabled = endis;
+ document.iform.blockedmacsurl.disabled = endis;
+ document.iform.redirurl.disabled = endis;
+ document.iform.localauth_priv.disabled = localauth_endis;
+ document.iform.radiusip.disabled = radius_endis;
+ document.iform.radiusip2.disabled = radius_endis;
+ document.iform.radiusip3.disabled = radius_endis;
+ document.iform.radiusip4.disabled = radius_endis;
+ document.iform.radiusport.disabled = radius_endis;
+ document.iform.radiusport3.disabled = radius_endis;
+ document.iform.radiusport4.disabled = radius_endis;
+ document.iform.radiusport2.disabled = radius_endis;
+ document.iform.radiuskey.disabled = radius_endis;
+ document.iform.radiuskey2.disabled = radius_endis;
+ document.iform.radiuskey3.disabled = radius_endis;
+ document.iform.radiuskey4.disabled = radius_endis;
+ document.iform.radacct_enable.disabled = radius_endis;
+ document.iform.peruserbw.disabled = endis;
+ document.iform.bwdefaultdn.disabled = endis;
+ document.iform.bwdefaultup.disabled = endis;
+ document.iform.reauthenticate.disabled = radius_endis;
+ document.iform.auth_method[0].disabled = endis;
+ document.iform.auth_method[1].disabled = endis;
+ document.iform.auth_method[2].disabled = endis;
+ document.iform.radius_protocol[0].disabled = radius_endis;
+ document.iform.radius_protocol[1].disabled = radius_endis;
+ document.iform.radius_protocol[2].disabled = radius_endis;
+ document.iform.radius_protocol[3].disabled = radius_endis;
+ document.iform.radmac_enable.disabled = radius_endis;
+ document.iform.httpslogin_enable.disabled = endis;
+ document.iform.radmac_format.disabled = radius_endis;
+ document.iform.httpsname.disabled = https_endis;
+ document.iform.certref.disabled = https_endis;
+ document.iform.nohttpsforwards.disabled = https_endis;
+ document.iform.logoutwin_enable.disabled = endis;
+ document.iform.nomacfilter.disabled = endis;
+ document.iform.noconcurrentlogins.disabled = endis;
+ document.iform.radiusvendor.disabled = radius_endis;
+ document.iform.radiussession_timeout.disabled = radius_endis;
+ document.iform.radiussrcip_attribute.disabled = radius_endis;
+ document.iform.htmlfile.disabled = endis;
+ document.iform.errfile.disabled = endis;
+ document.iform.logoutfile.disabled = endis;
+
+ document.iform.radiusacctport.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
+
+ document.iform.radmac_secret.disabled = (radius_endis || !document.iform.radmac_enable.checked) && !enable_change;
+
+ var radacct_dis = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
+ document.iform.reauthenticateacct[0].disabled = radacct_dis;
+ document.iform.reauthenticateacct[1].disabled = radacct_dis;
+ document.iform.reauthenticateacct[2].disabled = radacct_dis;
+ document.iform.reverseacct.disabled = (radius_endis || !document.iform.radacct_enable.checked) && !enable_change;
+ document.iform.radiusnasid.disabled = radius_endis;
+}
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_captiveportal.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), true, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main">
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?=gettext("Enable captive portal"); ?> </strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interfaces"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="cinterface[]" multiple="multiple" size="<?php echo count($config['interfaces']); ?>" class="formselect" id="cinterface">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ $cselected = explode(",", $pconfig['cinterface']);
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if (in_array($iface, $cselected)) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Select the interface(s) to enable for captive portal."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Maximum concurrent connections"); ?></td>
+ <td class="vtable">
+ <table cellpadding="0" cellspacing="0" summary="connections">
+ <tr>
+ <td>
+ <input name="maxprocperip" type="text" class="formfld unknown" id="maxprocperip" size="5" value="<?=htmlspecialchars($pconfig['maxprocperip']);?>" /> <?=gettext("per client IP address (0 = no limit)"); ?>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("This setting limits the number of concurrent connections to the captive portal HTTP(S) server. This does not set how many users can be logged in " .
+ "to the captive portal, but rather how many users can load the portal page or authenticate at the same time! " .
+ "Possible setting allowed is: minimum 4 connections per client IP address, with a total maximum of 100 connections."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Idle timeout"); ?></td>
+ <td class="vtable">
+ <input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="6" value="<?=htmlspecialchars($pconfig['idletimeout']);?>" />
+ <?=gettext("minutes"); ?><br />
+ <?=gettext("Clients will be disconnected after this amount of inactivity. They may log in again immediately, though. Leave this field blank for no idle timeout."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hard timeout"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="timeout" type="text" class="formfld unknown" id="timeout" size="6" value="<?=htmlspecialchars($pconfig['timeout']);?>" />
+ <?=gettext("minutes"); ?><br />
+ <?=gettext("Clients will be disconnected after this amount of time, regardless of activity. They may log in again immediately, though. Leave this field blank for no hard timeout (not recommended unless an idle timeout is set)."); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Pass-through credits allowed per MAC address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="freelogins_count" type="text" class="formfld unknown" id="freelogins_count" size="6" value="<?=htmlspecialchars($pconfig['freelogins_count']);?>" />
+ <?=gettext("per client MAC address (0 or blank = none)"); ?><br />
+ <?=gettext("This setting allows passing through the captive portal without authentication a limited number of times per MAC address. Once used up, the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set a hard timeout and/or idle timeout when using this for it to be effective."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Waiting period to restore pass-through credits"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="freelogins_resettimeout" type="text" class="formfld unknown" id="freelogins_resettimeout" size="6" value="<?=htmlspecialchars($pconfig['freelogins_resettimeout']);?>" />
+ <?=gettext("hours"); ?><br />
+ <?=gettext("Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. This must be above 0 hours if pass-through credits are enabled."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Reset waiting period on attempted access"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="freelogins_updatetimeouts" type="checkbox" class="formfld" id="freelogins_updatetimeouts" value="yes" <?php if ($pconfig['freelogins_updatetimeouts']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable waiting period reset on attempted access"); ?></strong><br />
+ <?=gettext("If enabled, the waiting period is reset to the original duration if access is attempted when all pass-through credits have already been exhausted."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Logout popup window"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="logoutwin_enable" type="checkbox" class="formfld" id="logoutwin_enable" value="yes" <?php if ($pconfig['logoutwin_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable logout popup window"); ?></strong><br />
+ <?=gettext("If enabled, a popup window will appear when clients are allowed through the captive portal. This allows clients to explicitly disconnect themselves before the idle or hard timeout occurs."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Pre-authentication redirect URL"); ?> </td>
+ <td class="vtable">
+ <input name="preauthurl" type="text" class="formfld url" id="preauthurl" size="60" value="<?=htmlspecialchars($pconfig['preauthurl']);?>" /><br />
+ <?php printf(gettext("Use this field to set \$PORTAL_REDIRURL\$ variable which can be accessed using your custom captive portal index.php page or error pages."));?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("After authentication Redirection URL"); ?></td>
+ <td class="vtable">
+ <input name="redirurl" type="text" class="formfld url" id="redirurl" size="60" value="<?=htmlspecialchars($pconfig['redirurl']);?>" />
+ <br />
+ <?=gettext("If you provide a URL here, clients will be redirected to that URL instead of the one they initially tried to access after they've authenticated."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Blocked MAC address redirect URL"); ?> </td>
+ <td class="vtable">
+ <input name="blockedmacsurl" type="text" class="formfld url" id="blockedmacsurl" size="60" value="<?=htmlspecialchars($pconfig['blockedmacsurl']);?>" /><br />
+ <?php printf(gettext("If you provide a URL here, MAC addresses set to be blocked will be redirect to that URL when attempt to access anything."));?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Concurrent user logins"); ?></td>
+ <td class="vtable">
+ <input name="noconcurrentlogins" type="checkbox" class="formfld" id="noconcurrentlogins" value="yes" <?php if ($pconfig['noconcurrentlogins']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable concurrent logins"); ?></strong><br />
+ <?=gettext("If this option is set, only the most recent login per username will be active. Subsequent logins will cause machines previously logged in with the same username to be disconnected."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("MAC filtering"); ?> </td>
+ <td class="vtable">
+ <input name="nomacfilter" type="checkbox" class="formfld" id="nomacfilter" value="yes" <?php if ($pconfig['nomacfilter']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable MAC filtering"); ?></strong><br />
+ <?=gettext("If this option is set, no attempts will be made to ensure that the MAC address of clients stays the same while they're logged in." .
+ "This is required when the MAC address of the client cannot be determined (usually because there are routers between"); ?> <?php echo $g['product_name'] ?> <?=gettext("and the clients)."); ?>
+ <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Pass-through MAC Auto Entry"); ?></td>
+ <td class="vtable">
+ <input name="passthrumacadd" type="checkbox" class="formfld" id="passthrumacadd" value="yes" <?php if ($pconfig['passthrumacadd']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable Pass-through MAC automatic additions"); ?></strong><br />
+ <?=gettext("If this option is set, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will never have to authenticate again."); ?>
+ <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
+ <?=gettext("If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown."); ?>
+ <br /><br />
+ <input name="passthrumacaddusername" type="checkbox" class="formfld" id="passthrumacaddusername" value="yes" <?php if ($pconfig['passthrumacaddusername']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable Pass-through MAC automatic addition with username"); ?></strong><br />
+ <?=gettext("If this option is set, with the automatically MAC passthrough entry created the username, used during authentication, will be saved."); ?>
+ <?=gettext("To remove the passthrough MAC entry you either have to log in and remove it manually from the"); ?> <a href="services_captiveportal_mac.php"><?=gettext("MAC tab"); ?></a> <?=gettext("or send a POST from another system to remove it."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Per-user bandwidth restriction"); ?></td>
+ <td class="vtable">
+ <input name="peruserbw" type="checkbox" class="formfld" id="peruserbw" value="yes" <?php if ($pconfig['peruserbw']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable per-user bandwidth restriction"); ?></strong><br /><br />
+ <table cellpadding="0" cellspacing="0" summary="bandwidth">
+ <tr>
+ <td><?=gettext("Default download"); ?></td>
+ <td>
+ <input type="text" class="formfld unknown" name="bwdefaultdn" id="bwdefaultdn" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultdn']);?>" /> <?=gettext("Kbit/s"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Default upload"); ?></td>
+ <td>
+ <input type="text" class="formfld unknown" name="bwdefaultup" id="bwdefaultup" size="10" value="<?=htmlspecialchars($pconfig['bwdefaultup']);?>" /> <?=gettext("Kbit/s"); ?>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <?=gettext("If this option is set, the captive portal will restrict each user who logs in to the specified default bandwidth. RADIUS can override the default settings. Leave empty or set to 0 for no limit."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?></td>
+ <td width="78%" class="vtable">
+ <table cellpadding="0" cellspacing="0" summary="authentication">
+ <tr>
+ <td colspan="2">
+ <input name="auth_method" type="radio" id="auth_method" value="none" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] != "local" && $pconfig['auth_method'] != "radius") echo "checked=\"checked\""; ?> />
+ <?=gettext("No Authentication"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="auth_method" type="radio" id="auth_method" value="local" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "local") echo "checked=\"checked\""; ?> />
+ <?=gettext("Local"); ?> <a href="system_usermanager.php"><?=gettext("User Manager"); ?></a> / <?=gettext("Vouchers"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <input name="localauth_priv" type="checkbox" id="localauth_priv" value="yes" onclick="enable_change(false)" <?php if ($pconfig['localauth_priv'] == "yes") echo "checked=\"checked\""; ?> />
+ <?=gettext("Allow only users/groups with 'Captive portal login' privilege set"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="auth_method" type="radio" id="auth_method" value="radius" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius") echo "checked=\"checked\""; ?> />
+ <?=gettext("RADIUS Authentication"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <table cellpadding="0" cellspacing="0" summary="radius">
+ <tr>
+ <td colspan="2">
+ <input name="radius_protocol" type="radio" id="radius_protocol" value="PAP" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] != "CHAP_MD5" && $pconfig['radius_protocol'] != "MSCHAPv1" && $pconfig['radius_protocol'] != "MSCHAPv2") echo "checked=\"checked\""; ?> />
+ <?=gettext("PAP"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="radius_protocol" type="radio" id="radius_protocol" value="CHAP_MD5" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "CHAP_MD5") echo "checked=\"checked\""; ?> />
+ <?=gettext("CHAP_MD5"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv1" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "MSCHAPv1") echo "checked=\"checked\""; ?> />
+ <?=gettext("MSCHAPv1"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="radius_protocol" type="radio" id="radius_protocol" value="MSCHAPv2" onclick="enable_change(false)" <?php if ($pconfig['auth_method'] == "radius" && $pconfig['radius_protocol'] == "MSCHAPv2") echo "checked=\"checked\""; ?> />
+ <?=gettext("MSCHAPv2"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="primary athentication">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Primary Authentication Source</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
+ <td class="vtable">
+ <input name="radiusip" type="text" class="formfld unknown" id="radiusip" size="20" value="<?=htmlspecialchars($pconfig['radiusip']);?>" /><br />
+ <?=gettext("Enter the IP address of the RADIUS server which users of the captive portal have to authenticate against."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
+ <td class="vtable">
+ <input name="radiusport" type="text" class="formfld unknown" id="radiusport" size="5" value="<?=htmlspecialchars($pconfig['radiusport']);?>" /><br />
+ <?=gettext("Leave this field blank to use the default port (1812)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
+ <td class="vtable">
+ <input name="radiuskey" type="text" class="formfld unknown" id="radiuskey" size="16" value="<?=htmlspecialchars($pconfig['radiuskey']);?>" /><br />
+ <?=gettext("Leave this field blank to not use a RADIUS shared secret (not recommended)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
+ <td class="vtable">
+ <input name="radiusip2" type="text" class="formfld unknown" id="radiusip2" size="20" value="<?=htmlspecialchars($pconfig['radiusip2']);?>" /><br />
+ <?=gettext("If you have a second RADIUS server, you can activate it by entering its IP address here."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
+ <td class="vtable">
+ <input name="radiusport2" type="text" class="formfld unknown" id="radiusport2" size="5" value="<?=htmlspecialchars($pconfig['radiusport2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
+ <td class="vtable">
+ <input name="radiuskey2" type="text" class="formfld unknown" id="radiuskey2" size="16" value="<?=htmlspecialchars($pconfig['radiuskey2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Secondary Authentication Source</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Primary RADIUS server"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
+ <td class="vtable">
+ <input name="radiusip3" type="text" class="formfld unknown" id="radiusip3" size="20" value="<?=htmlspecialchars($pconfig['radiusip3']);?>" /><br />
+ <?=gettext("If you have a third RADIUS server, you can activate it by entering its IP address here."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
+ <td class="vtable">
+ <input name="radiusport3" type="text" class="formfld unknown" id="radiusport3" size="5" value="<?=htmlspecialchars($pconfig['radiusport3']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
+ <td class="vtable">
+ <input name="radiuskey3" type="text" class="formfld unknown" id="radiuskey3" size="16" value="<?=htmlspecialchars($pconfig['radiuskey3']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t2"><?=gettext("Secondary RADIUS server"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("IP address"); ?></td>
+ <td class="vtable">
+ <input name="radiusip4" type="text" class="formfld unknown" id="radiusip4" size="20" value="<?=htmlspecialchars($pconfig['radiusip4']);?>" /><br />
+ <?=gettext("If you have a fourth RADIUS server, you can activate it by entering its IP address here."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Port"); ?></td>
+ <td class="vtable">
+ <input name="radiusport4" type="text" class="formfld unknown" id="radiusport4" size="5" value="<?=htmlspecialchars($pconfig['radiusport4']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Shared secret"); ?>&nbsp;&nbsp;</td>
+ <td class="vtable">
+ <input name="radiuskey4" type="text" class="formfld unknown" id="radiuskey4" size="16" value="<?=htmlspecialchars($pconfig['radiuskey4']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Accounting"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell">&nbsp;</td>
+ <td class="vtable">
+ <input name="radacct_enable" type="checkbox" id="radacct_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("send RADIUS accounting packets"); ?></strong><br />
+ <?=gettext("If this is enabled, RADIUS accounting packets will be sent to the primary RADIUS server."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Accounting port"); ?></td>
+ <td class="vtable">
+ <input name="radiusacctport" type="text" class="formfld unknown" id="radiusacctport" size="5" value="<?=htmlspecialchars($pconfig['radiusacctport']);?>" /><br />
+ <?=gettext("Leave blank to use the default port (1813)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Accounting updates"); ?></td>
+ <td class="vtable">
+ <input name="reauthenticateacct" type="radio" value="" <?php if (!$pconfig['reauthenticateacct']) echo "checked=\"checked\""; ?> /> <?=gettext("no accounting updates"); ?><br />
+ <input name="reauthenticateacct" type="radio" value="stopstart" <?php if ($pconfig['reauthenticateacct'] == "stopstart") echo "checked=\"checked\""; ?> /> <?=gettext("stop/start accounting"); ?><br />
+ <input name="reauthenticateacct" type="radio" value="interimupdate" <?php if ($pconfig['reauthenticateacct'] == "interimupdate") echo "checked=\"checked\""; ?> /> <?=gettext("interim update"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("RADIUS options"); ?></td>
+ </tr>
+ <tr>
+ <td class="vncell"><?=gettext("Reauthentication"); ?></td>
+ <td class="vtable">
+ <input name="reauthenticate" type="checkbox" id="reauthenticate" value="yes" onclick="enable_change(false)" <?php if ($pconfig['reauthenticate']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Reauthenticate connected users every minute"); ?></strong><br />
+ <?=gettext("If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is " .
+ "logged in every minute. If an Access-Reject is received for a user, that user is disconnected from the captive portal immediately."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class=""><?=gettext("RADIUS MAC authentication"); ?></td>
+ <td class="">
+ <input name="radmac_enable" type="checkbox" id="radmac_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['radmac_enable']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Enable RADIUS MAC authentication"); ?></strong><br />
+ <?=gettext("If this option is enabled, the captive portal will try to authenticate users by sending their MAC address as the username and the password " .
+ "entered below to the RADIUS server."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell"><?=gettext("MAC authentication secret"); ?></td>
+ <td class="vtable">
+ <input name="radmac_secret" type="text" class="formfld unknown" id="radmac_secret" size="16" value="<?=htmlspecialchars($pconfig['radmac_secret']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("RADIUS NAS IP attribute"); ?></td>
+ <td class="vtable">
+ <select name="radiussrcip_attribute" id="radiussrcip_attribute">
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $ifdesc => $ifdescr) {
+ $ipaddr = get_interface_ip($ifdesc);
+ if (is_ipaddr($ipaddr)) {
+ $selected = "";
+ if ($ifdesc == $pconfig['radiussrcip_attribute']) {
+ $selected= "selected=\"selected\"";
+ }
+ echo "<option value='{$ifdesc}' {$selected}>{$ifdescr} - {$ipaddr}</option>\n";
+ }
+ }
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $sn) {
+ if ($sn['mode'] == "proxyarp" && $sn['type'] == "network") {
+ $start = ip2long32(gen_subnet($sn['subnet'], $sn['subnet_bits']));
+ $end = ip2long32(gen_subnet_max($sn['subnet'], $sn['subnet_bits']));
+ $len = $end - $start;
+
+ for ($i = 0; $i <= $len; $i++) {
+ $snip = long2ip32($start+$i);
+ echo "<option value='{$snip}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$snip}") . "></option>\n";
+ }
+ } else {
+ echo "<option value='{$sn['subnet']}' {$selected}>" . htmlspecialchars("{$sn['descr']} - {$sn['subnet']}") . "></option>\n";
+ }
+ }
+ }
+ ?>
+ </select><br />
+ <?=gettext("Choose the IP to use for calling station attribute."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Session-Timeout"); ?></td>
+ <td class="vtable">
+ <input name="radiussession_timeout" type="checkbox" id="radiussession_timeout" value="yes" <?php if ($pconfig['radiussession_timeout']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Use RADIUS Session-Timeout attributes"); ?></strong><br />
+ <?=gettext("When this is enabled, clients will be disconnected after the amount of time retrieved from the RADIUS Session-Timeout attribute."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Type"); ?></td>
+ <td class="vtable">
+ <select name="radiusvendor" id="radiusvendor">
+ <option value="default"><?php echo gettext("default"); ?></option>
+ <?php
+ $radiusvendors = array("cisco");
+ foreach ($radiusvendors as $radiusvendor) {
+ if ($pconfig['radiusvendor'] == $radiusvendor) {
+ echo "<option selected=\"selected\" value=\"$radiusvendor\">$radiusvendor</option>\n";
+ } else {
+ echo "<option value=\"$radiusvendor\">$radiusvendor</option>\n";
+ }
+ }
+ ?>
+ </select><br />
+ <?php printf(gettext("If RADIUS type is set to Cisco, in Access-Requests the value of Calling-Station-Id will be set to the client's IP address and " .
+ "the Called-Station-Id to the client's MAC address. Default behavior is Calling-Station-Id = client's MAC address and Called-Station-Id = %s's WAN IP address."),
+ $g['product_name']);?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("Accounting Style"); ?></td>
+ <td class="vtable">
+ <input name="reverseacct" type="checkbox" id="reverseacct" value="yes" <?php if ($pconfig['reverseacct']) echo "checked=\"checked\""; ?> /><strong><?=gettext("Invert Acct-Input-Octets and Acct-Output-Octets"); ?></strong><br />
+ <?=gettext("When this is enabled, data counts for RADIUS accounting packets will be taken from the client perspective, not the NAS. Acct-Input-Octets will represent download, and Acct-Output-Octets will represent upload."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("NAS Identifier"); ?></td>
+ <td class="vtable">
+ <input name="radiusnasid" type="text" maxlength="253" class="formfld unknown" id="radiusnasid" value="<?=htmlspecialchars($pconfig['radiusnasid']);?>" /><br />
+ <?=gettext("Specify a NAS identifier to override the default value") . " (" . php_uname("n") . ")"; ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="vncell" valign="top"><?=gettext("MAC address format"); ?></td>
+ <td class="vtable">
+ <select name="radmac_format" id="radmac_format">
+ <option value="default"><?php echo gettext("default"); ?></option>
+ <?php
+ $macformats = array("singledash", "ietf", "cisco", "unformatted");
+ foreach ($macformats as $macformat) {
+ if ($pconfig['radmac_format'] == $macformat) {
+ echo "<option selected=\"selected\" value=\"$macformat\">", gettext($macformat), "</option>\n";
+ } else {
+ echo "<option value=\"$macformat\">", gettext($macformat), "</option>\n";
+ }
+ }
+ ?>
+ </select><br />
+ <?=gettext("This option changes the MAC address format used in the whole RADIUS system. Change this if you also"); ?>
+ <?=gettext("need to change the username format for RADIUS MAC authentication."); ?><br />
+ <?=gettext("default:"); ?> 00:11:22:33:44:55<br />
+ <?=gettext("singledash:"); ?> 001122-334455<br />
+ <?=gettext("ietf:"); ?> 00-11-22-33-44-55<br />
+ <?=gettext("cisco:"); ?> 0011.2233.4455<br />
+ <?=gettext("unformatted:"); ?> 001122334455
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("HTTPS login"); ?></td>
+ <td class="vtable">
+ <input name="httpslogin_enable" type="checkbox" class="formfld" id="httpslogin_enable" value="yes" onclick="enable_change(false)" <?php if ($pconfig['httpslogin_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable HTTPS login"); ?></strong><br />
+ <?=gettext("If enabled, the username and password will be transmitted over an HTTPS connection to protect against eavesdroppers. A server name and certificate must also be specified below."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("HTTPS server name"); ?> </td>
+ <td class="vtable">
+ <input name="httpsname" type="text" class="formfld unknown" id="httpsname" size="30" value="<?=htmlspecialchars($pconfig['httpsname']);?>" /><br />
+ <?php printf(gettext("This name will be used in the form action for the HTTPS POST and should match the Common Name (CN) in your certificate (otherwise, the client browser will most likely display a security warning). Make sure captive portal clients can resolve this name in DNS and verify on the client that the IP resolves to the correct interface IP on %s."), $g['product_name']);?>
+ </td>
+ </tr>
+ <tr id="ssl_opts">
+ <td width="22%" valign="top" class="vncell"><?=gettext("SSL Certificate"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_cert)): ?>
+ <select name="certref" id="certref" class="formselect">
+ <?php
+ foreach ($a_cert as $cert):
+ $selected = "";
+ if ($pconfig['certref'] == $cert['refid']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>"<?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <b><?=gettext("No Certificates defined."); ?></b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Disable HTTPS forwards"); ?></td>
+ <td class="vtable">
+ <input name="nohttpsforwards" type="checkbox" class="formfld" id="nohttpsforwards" value="yes" <?php if ($pconfig['nohttpsforwards']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable HTTPS forwards"); ?></strong><br/>
+ <?=gettext("If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites will not be forwarded to the captive portal. This prevents certificate errors from being presented to the user even if HTTPS logins are enabled. Users must attempt a connecton to an HTTP (Port 80) site to get forwarded to the captive portal. If HTTPS logins are enabled, the user will be redirected to the HTTPS login page."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Portal page contents"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input type="file" name="htmlfile" class="formfld file" id="htmlfile" /><br />
+ <?php
+ list($host) = explode(":", $_SERVER['HTTP_HOST']);
+ $zoneid = $pconfig['zoneid'] ? $pconfig['zoneid'] : 8000;
+ if ($pconfig['httpslogin_enable']) {
+ $port = $pconfig['listenporthttps'] ? $pconfig['listenporthttps'] : ($zoneid + 8001);
+ $href = "https://{$host}:{$port}";
+ } else {
+ $port = $pconfig['listenporthttp'] ? $pconfig['listenporthttp'] : ($zoneid + 8000);
+ $href = "http://{$host}:{$port}";
+ }
+ ?>
+ <?php if ($pconfig['page']['htmltext']): ?>
+ <a href="<?=$href?>" target="_blank"><?=gettext("View current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=gethtmlhtml" target="_blank"><?=gettext("Download current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=delhtmlhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
+ <?=gettext("Restore default portal page"); ?>
+ </a>
+ <br />
+ <br />
+ <?php endif; ?>
+ <?php
+ printf(
+ gettext('Upload an HTML/PHP file for the portal page here (leave blank to keep the current one). ' .
+ 'Make sure to include a form (POST to %1$s) with a submit button (%2$s) and a hidden field with %3$s and %4$s. ' .
+ 'Include the %5$s and %6$s and/or %7$s input fields if authentication is enabled, otherwise it will always fail.'),
+ '&quot;$PORTAL_ACTION$&quot;',
+ "name=&quot;accept&quot;",
+ "name=&quot;redirurl&quot;",
+ 'value=&quot;$PORTAL_REDIRURL$&quot;',
+ "&quot;auth_user&quot;",
+ "&quot;auth_pass&quot;",
+ "&quot;auth_voucher&quot;");
+ ?>
+ <?=gettext("Example code for the form:"); ?><br />
+ <br />
+ <tt>&lt;form method=&quot;post&quot; action=&quot;$PORTAL_ACTION$&quot;&gt;<br />
+ &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_user&quot; type=&quot;text&quot;&gt;<br />
+ &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_pass&quot; type=&quot;password&quot;&gt;<br />
+ &nbsp;&nbsp;&nbsp;&lt;input name=&quot;auth_voucher&quot; type=&quot;text&quot;&gt;<br />
+ &nbsp;&nbsp;&nbsp;&lt;input name=&quot;redirurl&quot; type=&quot;hidden&quot; value=&quot;$PORTAL_REDIRURL$&quot;&gt;<br />
+ &nbsp;&nbsp;&nbsp;&lt;input name=&quot;accept&quot; type=&quot;submit&quot; value=&quot;Continue&quot;&gt;<br />
+ &lt;/form&gt;</tt>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authentication"); ?><br />
+ <?=gettext("error page"); ?><br />
+ <?=gettext("contents"); ?>
+ </td>
+ <td class="vtable">
+ <input name="errfile" type="file" class="formfld file" id="errfile" /><br />
+ <?php if ($pconfig['page']['errtext']): ?>
+ <a href="?zone=<?=$cpzone?>&amp;act=viewerrhtml" target="_blank"><?=gettext("View current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=geterrhtml" target="_blank"><?=gettext("Download current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=delerrhtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
+ <?=gettext("Restore default error page"); ?>
+ </a>
+ <br />
+ <br />
+ <?php endif; ?>
+ <?=gettext("The contents of the HTML/PHP file that you upload here are displayed when an authentication error occurs. " .
+ "You may include"); ?> &quot;$PORTAL_MESSAGE$&quot;, <?=gettext("which will be replaced by the error or reply messages from the RADIUS server, if any."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Logout"); ?><br />
+ <?=gettext("page"); ?><br />
+ <?=gettext("contents"); ?></td>
+ <td class="vtable">
+ <input name="logoutfile" type="file" class="formfld file" id="logoutfile" /><br />
+ <?php if ($pconfig['page']['logouttext']): ?>
+ <a href="?zone=<?=$cpzone?>&amp;act=viewlogouthtml" target="_blank"><?=gettext("View current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=getlogouthtml" target="_blank"><?=gettext("Download current page"); ?></a>
+ <br />
+ <a href="?zone=<?=$cpzone?>&amp;act=dellogouthtml" onclick="return confirm('Do you really want to restore default page?')" target="_blank">
+ <?=gettext("Restore default logout page"); ?>
+ </a>
+ <br />
+ <br />
+ <?php endif; ?>
+ <?=gettext("The contents of the HTML/PHP file that you upload here are displayed on authentication success when the logout popup is enabled."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php echo "<input name='zone' id='zone' type='hidden' value='" . htmlspecialchars($cpzone, ENT_QUOTES | ENT_HTML401) . "' />"; ?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ <a href="services_captiveportal_zones.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" onclick="enable_change(true)" /></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:"); ?><br />
+ </strong>
+ </span>
+ <?=gettext("Changing any settings on this page will disconnect all clients! Don't forget to enable the DHCP server on your captive portal interface! Make sure that the default/maximum DHCP lease time is higher than the timeout entered on this page. Also, the DNS Forwarder or Resolver needs to be enabled for DNS lookups by unauthenticated clients to work."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_filemanager.php b/src/usr/local/www/services_captiveportal_filemanager.php
new file mode 100644
index 0000000..f672938
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_filemanager.php
@@ -0,0 +1,267 @@
+<?php
+/*
+ services_captiveportal_filemanager.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2005-2006 Jonathan De Graeve (jonathan.de.graeve@imelda.be)
+ and Paul Taylor (paultaylor@winn-dixie.com).
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-filemanager
+##|*NAME=Services: Captive portal: File Manager page
+##|*DESCR=Allow access to the 'Services: Captive portal: File Manager' page.
+##|*MATCH=services_captiveportal_filemanager.php*
+##|-PRIV
+
+function cpelementscmp($a, $b) {
+ return strcasecmp($a['name'], $b['name']);
+}
+
+function cpelements_sort() {
+ global $config, $cpzone;
+
+ usort($config['captiveportal'][$cpzone]['element'], "cpelementscmp");
+}
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal";
+
+if (!is_array($a_cp[$cpzone]['element'])) {
+ $a_cp[$cpzone]['element'] = array();
+}
+$a_element =& $a_cp[$cpzone]['element'];
+
+// Calculate total size of all files
+$total_size = 0;
+foreach ($a_element as $element) {
+ $total_size += $element['size'];
+}
+
+if ($_POST) {
+ unset($input_errors);
+
+ if (is_uploaded_file($_FILES['new']['tmp_name'])) {
+
+ if (!stristr($_FILES['new']['name'], "captiveportal-")) {
+ $name = "captiveportal-" . $_FILES['new']['name'];
+ } else {
+ $name = $_FILES['new']['name'];
+ }
+ $size = filesize($_FILES['new']['tmp_name']);
+
+ // is there already a file with that name?
+ foreach ($a_element as $element) {
+ if ($element['name'] == $name) {
+ $input_errors[] = sprintf(gettext("A file with the name '%s' already exists."), $name);
+ break;
+ }
+ }
+
+ // check total file size
+ if (($total_size + $size) > $g['captiveportal_element_sizelimit']) {
+ $input_errors[] = gettext("The total size of all files uploaded may not exceed ") .
+ format_bytes($g['captiveportal_element_sizelimit']) . ".";
+ }
+
+ if (!$input_errors) {
+ $element = array();
+ $element['name'] = $name;
+ $element['size'] = $size;
+ $element['content'] = base64_encode(file_get_contents($_FILES['new']['tmp_name']));
+
+ $a_element[] = $element;
+ cpelements_sort();
+
+ write_config();
+ captiveportal_write_elements();
+ header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
+ exit;
+ }
+ }
+} else if (($_GET['act'] == "del") && !empty($cpzone) && $a_element[$_GET['id']]) {
+ conf_mount_rw();
+ @unlink("{$g['captiveportal_element_path']}/" . $a_element[$_GET['id']]['name']);
+ @unlink("{$g['captiveportal_path']}/" . $a_element[$_GET['id']]['name']);
+ conf_mount_ro();
+ unset($a_element[$_GET['id']]);
+ write_config();
+ header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
+ exit;
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_captiveportal_filemanager.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal file manager">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), true, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="80%" border="0" cellpadding="0" cellspacing="0" summary="main">
+ <tr>
+ <td width="70%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="20%" class="listhdr"><?=gettext("Size"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_cp[$cpzone]['element'])):
+ $i = 0;
+ foreach ($a_cp[$cpzone]['element'] as $element):
+?>
+ <tr>
+ <td class="listlr"><?=htmlspecialchars($element['name']);?></td>
+ <td class="listr" align="right"><?=format_bytes($element['size']);?></td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this file?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete file"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+
+<?php
+ if ($total_size > 0):
+?>
+ <tr>
+ <td class="listlr" style="background-color: #eee"><strong><?=gettext("TOTAL"); ?></strong></td>
+ <td class="listr" style="background-color: #eee" align="right"><strong><?=format_bytes($total_size);?></strong></td>
+ <td valign="middle" class="list nowrap"></td>
+ </tr>
+<?php
+ endif;
+
+ if ($_GET['act'] == 'add'):
+?>
+ <tr>
+ <td class="listlr" colspan="2">
+ <input type="file" name="new" class="formfld file" size="40" id="new" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Upload"); ?>" />
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("cancel"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ else:
+?>
+ <tr>
+ <td class="list" colspan="2"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=add"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add file"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ </table>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:"); ?><br />
+ </strong>
+ </span>
+ <?=gettext("Any files that you upload here with the filename prefix of captiveportal- will " .
+ "be made available in the root directory of the captive portal HTTP(S) server. " .
+ "You may reference them directly from your portal page HTML code using relative paths. " .
+ "Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the " .
+ "file manager. Then you can include it in your portal page like this:"); ?>
+ <br /><br />
+ <tt>&lt;img src=&quot;captiveportal-test.jpg&quot; width=... height=...&gt;</tt>
+ <br /><br />
+ <?=gettext("In addition, you can also upload .php files for execution. You can pass the filename " .
+ "to your custom page from the initial page by using text similar to:"); ?>
+ <br /><br />
+ <tt>&lt;a href="/captiveportal-aup.php?zone=$PORTAL_ZONE$&amp;redirurl=$PORTAL_REDIRURL$"&gt;<?=gettext("Acceptable usage policy"); ?>&lt;/a&gt;</tt>
+ <br /><br />
+ <?php printf(gettext("The total size limit for all files is %s."), format_bytes($g['captiveportal_element_sizelimit']));?>
+ </span>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_hostname.php b/src/usr/local/www/services_captiveportal_hostname.php
new file mode 100644
index 0000000..939fb23
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_hostname.php
@@ -0,0 +1,232 @@
+<?php
+/*
+ services_captiveportal_hostname.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-allowedhostnames
+##|*NAME=Services: Captive portal: Allowed Hostnames page
+##|*DESCR=Allow access to the 'Services: Captive portal: Allowed Hostnames' page.
+##|*MATCH=services_captiveportal_hostname.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+}
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal";
+
+if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid)) {
+ $a_allowedhostnames =& $a_cp[$cpzone]['allowedhostname'];
+ if ($a_allowedhostnames[$_GET['id']]) {
+ $ipent = $a_allowedhostnames[$_GET['id']];
+
+ if (isset($a_cp[$cpzone]['enable'])) {
+ if (is_ipaddr($ipent['hostname'])) {
+ $ip = $ipent['hostname'];
+ } else {
+ $ip = gethostbyname($ipent['hostname']);
+ }
+ $sn = (is_ipaddrv6($ip)) ? 128 : 32;
+ if (is_ipaddr($ip)) {
+ $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $ip);
+ if (is_array($ipfw)) {
+ captiveportal_free_dn_ruleno($ipfw['dnpipe']);
+ pfSense_pipe_action("pipe delete {$ipfw['dnpipe']}");
+ pfSense_pipe_action("pipe delete " . ($ipfw['dnpipe']+1));
+ }
+ pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 3, $ip, $sn);
+ pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 4, $ip, $sn);
+ }
+ }
+
+ unset($a_allowedhostnames[$_GET['id']]);
+ write_config();
+ captiveportal_allowedhostname_configure();
+ header("Location: services_captiveportal_hostname.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_captiveportal_hostname.php" method="post">
+<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal hostname">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP Addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), true, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
+ <tr>
+ <td width="60%" class="listhdrr"><?=gettext("Hostname"); ?></td>
+ <td width="40%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_cp[$cpzone]['allowedhostname'])):
+ $i = 0;
+ foreach ($a_cp[$cpzone]['allowedhostname'] as $ip):
+?>
+ <tr ondblclick="document.location='services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
+ <td class="listlr">
+<?php
+ if ($ip['dir'] == "to") {
+ echo "any <img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> ";
+ }
+ if ($ip['dir'] == "both") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"pass\" /> ";
+ }
+ echo strtolower($ip['hostname']);
+ if ($ip['dir'] == "from") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> any";
+ }
+?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($ip['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit address"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ &nbsp;<a href="services_captiveportal_hostname.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete address"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="2">&nbsp;</td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_hostname_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list">
+ <p class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:"); ?><br />
+ </strong>
+ </span>
+ <?=gettext("Adding allowed Hostnames will allow a DNS hostname access to/from access through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example. By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal."); ?>
+ </p>
+ <table border="0" cellspacing="0" cellpadding="0" summary="icons">
+ <tr>
+ <td>
+ <span class="vexpl"><?=gettext("any"); ?> <img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="middle" alt="in" /> x.x.x.x </span>
+ </td>
+ <td>
+ <span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("to"); ?></strong> <?=gettext("the Hostname are allowed"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5" height="4"></td>
+ </tr>
+ <tr>
+ <td>x.x.x.x <span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_in.gif" width="11" height="11" align="middle" alt="in" /></span> <?=gettext("any"); ?>&nbsp;&nbsp;&nbsp; </td>
+ <td><span class="vexpl"><?=gettext("All connections"); ?> <strong><?=gettext("from"); ?></strong> <?=gettext("the Hostname are allowed"); ?> </span></td>
+ </tr>
+ <tr>
+ <td><span class="vexpl"><img src="/themes/<?=$g['theme'];?>/images/icons/icon_pass.gif" width="11" height="11" align="right" alt="pass" /></span>&nbsp;&nbsp;&nbsp;&nbsp; </td>
+ <td><span class="vexpl"> All connections <strong>to</strong> and <strong>from</strong> the Hostname are allowed </span></td>
+ </tr>
+ </table>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_hostname_edit.php b/src/usr/local/www/services_captiveportal_hostname_edit.php
new file mode 100644
index 0000000..674e220
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_hostname_edit.php
@@ -0,0 +1,244 @@
+<?php
+/*
+ services_captiveportal_hostname_edit.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-editallowedhostnames
+##|*NAME=Services: Captive portal: Edit Allowed Hostnames page
+##|*DESCR=Allow access to the 'Services: Captive portal: Edit Allowed Hostnames' page.
+##|*MATCH=services_captiveportal_hostname_edit.php*
+##|-PRIV
+
+function allowedhostnamescmp($a, $b) {
+ return strcmp($a['hostname'], $b['hostname']);
+}
+
+function allowedhostnames_sort() {
+ global $g, $config, $cpzone;
+ usort($config['captiveportal'][$cpzone]['allowedhostname'], "allowedhostnamescmp");
+}
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+global $cpzone, $cpzoneid;
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit allowed Hostname"));
+$shortcut_section = "captiveportal";
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+$cpzoneid = $config['captiveportal'][$cpzone]['zoneid'];
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($a_cp[$cpzone]['allowedhostname'])) {
+ $a_cp[$cpzone]['allowedhostname'] = array();
+}
+$a_allowedhostnames = &$a_cp[$cpzone]['allowedhostname'];
+
+if (isset($id) && $a_allowedhostnames[$id]) {
+ $pconfig['zone'] = $a_allowedhostnames[$id]['zone'];
+ $pconfig['hostname'] = $a_allowedhostnames[$id]['hostname'];
+ $pconfig['sn'] = $a_allowedhostnames[$id]['sn'];
+ $pconfig['dir'] = $a_allowedhostnames[$id]['dir'];
+ $pconfig['bw_up'] = $a_allowedhostnames[$id]['bw_up'];
+ $pconfig['bw_down'] = $a_allowedhostnames[$id]['bw_down'];
+ $pconfig['descr'] = $a_allowedhostnames[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "hostname");
+ $reqdfieldsn = array(gettext("Allowed Hostname"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['hostname'] && !is_hostname($_POST['hostname']))) {
+ $input_errors[] = sprintf(gettext("A valid Hostname must be specified. [%s]"), $_POST['hostname']);
+ }
+
+ if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
+ $input_errors[] = gettext("Upload speed needs to be an integer");
+ }
+ if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
+ $input_errors[] = gettext("Download speed needs to be an integer");
+ }
+
+ foreach ($a_allowedhostnames as $ipent) {
+ if (isset($id) && ($a_allowedhostnames[$id]) && ($a_allowedhostnames[$id] === $ipent)) {
+ continue;
+ }
+
+ if ($ipent['hostname'] == $_POST['hostname']) {
+ $input_errors[] = sprintf("[%s] %s.", $_POST['hostname'], gettext("already allowed")) ;
+ break ;
+ }
+ }
+
+ if (!$input_errors) {
+ $ip = array();
+ $ip['hostname'] = $_POST['hostname'];
+ $ip['sn'] = $_POST['sn'];
+ $ip['dir'] = $_POST['dir'];
+ $ip['descr'] = $_POST['descr'];
+ if ($_POST['bw_up']) {
+ $ip['bw_up'] = $_POST['bw_up'];
+ }
+ if ($_POST['bw_down']) {
+ $ip['bw_down'] = $_POST['bw_down'];
+ }
+ if (isset($id) && $a_allowedhostnames[$id]) {
+ $a_allowedhostnames[$id] = $ip;
+ } else {
+ $a_allowedhostnames[] = $ip;
+ }
+
+ allowedhostnames_sort();
+
+ write_config();
+
+ $rules = captiveportal_allowedhostname_configure();
+ @file_put_contents("{$g['tmp_path']}/hostname_rules", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} {$g['tmp_path']}/hostname_rules", true);
+ unset($rules);
+
+ header("Location: services_captiveportal_hostname.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_captiveportal_hostname_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal hostname edit">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Direction"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dir" class="formfld">
+ <?php
+ $dirs = array(gettext("Both"), gettext("From"), gettext("To")) ;
+ foreach ($dirs as $dir):
+ ?>
+ <option value="<?=strtolower($dir);?>" <?php if (strtolower($dir) == strtolower($pconfig['dir'])) echo "selected=\"selected\"";?> >
+ <?=htmlspecialchars($dir);?>
+ </option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Use"); ?> <em><?=gettext("From"); ?></em> <?=gettext("to always allow an Hostname through the captive portal (without authentication)"); ?>.
+ <?=gettext("Use"); ?> <em><?=gettext("To"); ?></em> <?=gettext("to allow access from all clients (even non-authenticated ones) behind the portal to this Hostname"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="hostname" type="text" class="formfld unknown" id="hostname" size="17" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Hostname");?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this Hostname in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this Hostname in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <?php if (isset($id) && $a_allowedhostnames[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_ip.php b/src/usr/local/www/services_captiveportal_ip.php
new file mode 100644
index 0000000..c475aeb
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_ip.php
@@ -0,0 +1,208 @@
+<?php
+/*
+ services_captiveportal_ip.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-allowedips
+##|*NAME=Services: Captive portal: Allowed IPs page
+##|*DESCR=Allow access to the 'Services: Captive portal: Allowed IPs' page.
+##|*MATCH=services_captiveportal_ip.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+}
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal";
+
+if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid)) {
+ $a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
+ if ($a_allowedips[$_GET['id']]) {
+ $ipent = $a_allowedips[$_GET['id']];
+
+ if (isset($config['captiveportal'][$cpzone]['enable'])) {
+ $mask = (!empty($ipent['sn'])) ? $ipent['sn'] : 32;
+
+ $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $ipent['ip']);
+ pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 3, $ipent['ip'], $mask);
+ pfSense_ipfw_Tableaction($cpzoneid, IP_FW_TABLE_XDEL, 4, $ipent['ip'], $mask);
+
+ if (is_array($ipfw)) {
+ captiveportal_free_dn_ruleno($ipfw['dnpipe']);
+ pfSense_pipe_action("pipe delete {$ipfw['dnpipe']}");
+ pfSense_pipe_action("pipe delete " . ($ipfw['dnpipe']+1));
+ }
+ }
+
+ unset($a_allowedips[$_GET['id']]);
+ write_config();
+ header("Location: services_captiveportal_ip.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_captiveportal_ip.php" method="post">
+ <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
+ <?php if ($savemsg) print_info_box($savemsg); ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal ip addresses">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP addresses"), true, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
+ <tr>
+ <td width="40%" class="listhdrr"><?=gettext("IP address"); ?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_cp[$cpzone]['allowedip'])):
+ $i = 0;
+ foreach ($a_cp[$cpzone]['allowedip'] as $ip):
+?>
+ <tr ondblclick="document.location='services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
+ <td class="listlr">
+<?php
+ if ($ip['dir'] == "to") {
+ echo "any <img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"in\" /> ";
+ }
+ if ($ip['dir'] == "both") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"pass\" /> ";
+ }
+ echo strtolower($ip['ip']);
+ if ($ip['sn'] != "32" && is_numeric($ip['sn'])) {
+ $sn = $ip['sn'];
+ echo "/$sn";
+ }
+ if ($ip['dir'] == "from") {
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_in.gif\" width=\"11\" height=\"11\" align=\"middle\" alt=\"any\" /> any";
+ }
+?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($ip['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit address"); ?>" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;
+ <a href="services_captiveportal_ip.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete address"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="2">&nbsp;</td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>"><img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add address"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list">
+ <p class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:"); ?><br />
+ </strong>
+ </span>
+ <?=gettext("Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example."); ?>
+ </p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_ip_edit.php b/src/usr/local/www/services_captiveportal_ip_edit.php
new file mode 100644
index 0000000..c5e5544
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_ip_edit.php
@@ -0,0 +1,253 @@
+<?php
+/*
+ services_captiveportal_ip_edit.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ipfw
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-editallowedips
+##|*NAME=Services: Captive portal: Edit Allowed IPs page
+##|*DESCR=Allow access to the 'Services: Captive portal: Edit Allowed IPs' page.
+##|*MATCH=services_captiveportal_ip_edit.php*
+##|-PRIV
+
+function allowedipscmp($a, $b) {
+ return strcmp($a['ip'], $b['ip']);
+}
+
+function allowedips_sort() {
+ global $g, $config, $cpzone;
+
+ usort($config['captiveportal'][$cpzone]['allowedip'], "allowedipscmp");
+}
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit allowed IP address"));
+$shortcut_section = "captiveportal";
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($config['captiveportal'][$cpzone]['allowedip'])) {
+ $config['captiveportal'][$cpzone]['allowedip'] = array();
+}
+$a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
+
+if (isset($id) && $a_allowedips[$id]) {
+ $pconfig['ip'] = $a_allowedips[$id]['ip'];
+ $pconfig['sn'] = $a_allowedips[$id]['sn'];
+ $pconfig['bw_up'] = $a_allowedips[$id]['bw_up'];
+ $pconfig['bw_down'] = $a_allowedips[$id]['bw_down'];
+ $pconfig['descr'] = $a_allowedips[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "ip sn");
+ $reqdfieldsn = array(gettext("Allowed IP address"), gettext("Subnet mask"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['ip'] && !is_ipaddr($_POST['ip'])) {
+ $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['ip']);
+ }
+
+ if ($_POST['sn'] && (!is_numeric($_POST['sn']) || ($_POST['sn'] < 1) || ($_POST['sn'] > 32))) {
+ $input_errors[] = gettext("A valid subnet mask must be specified");
+ }
+
+ if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
+ $input_errors[] = gettext("Upload speed needs to be an integer");
+ }
+
+ if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
+ $input_errors[] = gettext("Download speed needs to be an integer");
+ }
+
+ foreach ($a_allowedips as $ipent) {
+ if (isset($id) && ($a_allowedips[$id]) && ($a_allowedips[$id] === $ipent)) {
+ continue;
+ }
+
+ if ($ipent['ip'] == $_POST['ip']) {
+ $input_errors[] = sprintf("[%s] %s.", $_POST['ip'], gettext("already allowed")) ;
+ break ;
+ }
+ }
+
+ if (!$input_errors) {
+ $ip = array();
+ $ip['ip'] = $_POST['ip'];
+ $ip['sn'] = $_POST['sn'];
+ $ip['descr'] = $_POST['descr'];
+ if ($_POST['bw_up']) {
+ $ip['bw_up'] = $_POST['bw_up'];
+ }
+ if ($_POST['bw_down']) {
+ $ip['bw_down'] = $_POST['bw_down'];
+ }
+ if (isset($id) && $a_allowedips[$id]) {
+ $oldip = $a_allowedips[$id]['ip'];
+ if (!empty($a_allowedips[$id]['sn'])) {
+ $oldmask = $a_allowedips[$id]['sn'];
+ } else {
+ $oldmask = 32;
+ }
+ $a_allowedips[$id] = $ip;
+ } else {
+ $a_allowedips[] = $ip;
+ }
+ allowedips_sort();
+
+ write_config();
+
+ if (isset($a_cp[$cpzone]['enable']) && is_module_loaded("ipfw.ko")) {
+ $rules = "";
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+ unset($ipfw);
+ if (isset($oldip) && isset($oldmask)) {
+ $ipfw = pfSense_ipfw_getTablestats($cpzoneid, IP_FW_TABLE_XLISTENTRY, 3, $oldip);
+ $rules .= "table 3 delete {$oldip}/{$oldmask}\n";
+ $rules .= "table 4 delete {$oldip}/{$oldmask}\n";
+ if (is_array($ipfw)) {
+ $rules .= "pipe delete {$ipfw['dnpipe']}\n";
+ $rules .= "pipe delete " . ($ipfw['dnpipe']+1 . "\n");
+ }
+ }
+ $rules .= captiveportal_allowedip_configure_entry($ip);
+ if (is_array($ipfw)) {
+ captiveportal_free_dn_ruleno($ipfw['dnpipe']);
+ }
+ $uniqid = uniqid("{$cpzone}_allowed");
+ @file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
+ @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
+ }
+
+ header("Location: services_captiveportal_ip.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_captiveportal_ip_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal allow ip edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit allowed ip rule");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>" />
+ /<select name='sn' class="formselect" id='sn'>
+ <?php for ($i = 32; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) echo "selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this IP address in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this IP address in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <?php if (isset($id) && $a_allowedips[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_mac.php b/src/usr/local/www/services_captiveportal_mac.php
new file mode 100644
index 0000000..d6c1af3
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_mac.php
@@ -0,0 +1,244 @@
+<?php
+/*
+ services_captiveportal_mac.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-macaddresses
+##|*NAME=Services: Captive portal: Mac Addresses page
+##|*DESCR=Allow access to the 'Services: Captive portal: Mac Addresses' page.
+##|*MATCH=services_captiveportal_mac.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+global $cpzone;
+global $cpzoneid;
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal";
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+
+ if (is_array($a_cp[$cpzone]['passthrumac'])) {
+ $cpzoneid = $a_cp[$cpzone]['cpzoneid'];
+ $rules = captiveportal_passthrumac_configure();
+ if (!empty($rules)) {
+ @file_put_contents("{$g['tmp_path']}/passthrumac_gui", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} {$g['tmp_path']}/passthrumac_gui");
+ @unlink("{$g['tmp_path']}/passthrumac_gui");
+ }
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('passthrumac');
+ }
+ }
+ }
+
+ if ($_POST['postafterlogin']) {
+ if (!is_array($a_passthrumacs)) {
+ echo gettext("No entry exists yet!") ."\n";
+ exit;
+ }
+ if (empty($_POST['zone'])) {
+ echo gettext("Please set the zone on which the operation should be allowed");
+ exit;
+ }
+ if (!is_array($a_cp[$cpzone]['passthrumac'])) {
+ $a_cp[$cpzone]['passthrumac'] = array();
+ }
+ $a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
+
+ if ($_POST['username']) {
+ $mac = captiveportal_passthrumac_findbyname($_POST['username']);
+ if (!empty($mac)) {
+ $_POST['delmac'] = $mac['mac'];
+ } else {
+ echo gettext("No entry exists for this username:") . " " . $_POST['username'] . "\n";
+ }
+ }
+ if ($_POST['delmac']) {
+ $found = false;
+ foreach ($a_passthrumacs as $idx => $macent) {
+ if ($macent['mac'] == $_POST['delmac']) {
+ $found = true;
+ break;
+ }
+ }
+ if ($found == true) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+ $rules = captiveportal_passthrumac_delete_entry($a_passthrumacs[$idx]);
+ $uniqid = uniqid("{$cpzone}_mac");
+ file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
+ @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
+ unset($a_passthrumacs[$idx]);
+ write_config();
+ echo gettext("The entry was successfully deleted") . "\n";
+ } else {
+ echo gettext("No entry exists for this mac address:") . " " . $_POST['delmac'] . "\n";
+ }
+ }
+ exit;
+ }
+}
+
+if ($_GET['act'] == "del") {
+ $a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
+ if ($a_passthrumacs[$_GET['id']]) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+ $rules = captiveportal_passthrumac_delete_entry($a_passthrumacs[$_GET['id']]);
+ $uniqid = uniqid("{$cpzone}_mac");
+ file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
+ @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
+ unset($a_passthrumacs[$_GET['id']]);
+ write_config();
+ header("Location: services_captiveportal_mac.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_captiveportal_mac.php" method="post">
+<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('passthrumac')): ?><p>
+<?php print_info_box_np(gettext("The captive portal MAC address configuration has been changed.<br />You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="captiveportal mac">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), true, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="main">
+ <tr>
+ <td width="3%" class="list"></td>
+ <td width="37%" class="listhdrr"><?=gettext("MAC address"); ?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ if (is_array($a_cp[$cpzone]['passthrumac'])):
+ $i = 0;
+ foreach ($a_cp[$cpzone]['passthrumac'] as $mac):
+?>
+ <tr ondblclick="document.location='services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'">
+ <td valign="middle" class="list nowrap">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$mac['action'];?>.gif" width="11" height="11" border="0" alt="icon" />
+ </td>
+ <td class="listlr">
+ <?=$mac['mac'];?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($mac['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>">
+ <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit host"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ &nbsp;
+ <a href="services_captiveportal_mac.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?"); ?>')">
+ <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete host"); ?>" width="17" height="17" border="0" alt="delte" />
+ </a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list">
+ <a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>">
+ <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add host"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list">
+ <span class="vexpl">
+ <span class="red"><strong><?=gettext("Note:"); ?><br /></strong></span>
+ <?=gettext("Adding MAC addresses as 'pass' MACs allows them access through the captive portal automatically without being taken to the portal page."); ?>
+ </span>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_mac_edit.php b/src/usr/local/www/services_captiveportal_mac_edit.php
new file mode 100644
index 0000000..191c9bb
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_mac_edit.php
@@ -0,0 +1,270 @@
+<?php
+/*
+ services_captiveportal_mac_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004 Dinesh Nair <dinesh@alphaque.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-editmacaddresses
+##|*NAME=Services: Captive portal: Edit MAC Addresses page
+##|*DESCR=Allow access to the 'Services: Captive portal: Edit MAC Addresses' page.
+##|*MATCH=services_captiveportal_mac_edit.php*
+##|-PRIV
+
+function passthrumacscmp($a, $b) {
+ return strcmp($a['mac'], $b['mac']);
+}
+
+function passthrumacs_sort() {
+ global $config, $cpzone;
+
+ usort($config['captiveportal'][$cpzone]['passthrumac'], "passthrumacscmp");
+}
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+global $cpzone;
+global $cpzoneid;
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit MAC address rules"));
+$shortcut_section = "captiveportal";
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($a_cp[$cpzone]['passthrumac'])) {
+ $a_cp[$cpzone]['passthrumac'] = array();
+}
+$a_passthrumacs = &$a_cp[$cpzone]['passthrumac'];
+
+if (isset($id) && $a_passthrumacs[$id]) {
+ $pconfig['action'] = $a_passthrumacs[$id]['action'];
+ $pconfig['mac'] = $a_passthrumacs[$id]['mac'];
+ $pconfig['bw_up'] = $a_passthrumacs[$id]['bw_up'];
+ $pconfig['bw_down'] = $a_passthrumacs[$id]['bw_down'];
+ $pconfig['descr'] = $a_passthrumacs[$id]['descr'];
+ $pconfig['username'] = $a_passthrumacs[$id]['username'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "action mac");
+ $reqdfieldsn = array(gettext("Action"), gettext("MAC address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
+
+ if ($_POST['mac']) {
+ if (is_macaddr($_POST['mac'])) {
+ $iflist = get_interface_list();
+ foreach ($iflist as $if) {
+ if ($_POST['mac'] == strtolower($if['mac'])) {
+ $input_errors[] = sprintf(gettext("The MAC address %s belongs to a local interface, you cannot use it here."), $_POST['mac']);
+ break;
+ }
+ }
+ } else {
+ $input_errors[] = sprintf("%s. [%s]", gettext("A valid MAC address must be specified"), $_POST['mac']);
+ }
+ }
+ if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
+ $input_errors[] = gettext("Upload speed needs to be an integer");
+ }
+ if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
+ $input_errors[] = gettext("Download speed needs to be an integer");
+ }
+
+ foreach ($a_passthrumacs as $macent) {
+ if (isset($id) && ($a_passthrumacs[$id]) && ($a_passthrumacs[$id] === $macent)) {
+ continue;
+ }
+
+ if ($macent['mac'] == $_POST['mac']) {
+ $input_errors[] = sprintf("[%s] %s.", $_POST['mac'], gettext("already exists"));
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $mac = array();
+ $mac['action'] = $_POST['action'];
+ $mac['mac'] = $_POST['mac'];
+ if ($_POST['bw_up']) {
+ $mac['bw_up'] = $_POST['bw_up'];
+ }
+ if ($_POST['bw_down']) {
+ $mac['bw_down'] = $_POST['bw_down'];
+ }
+ if ($_POST['username']) {
+ $mac['username'] = $_POST['username'];
+ }
+
+ $mac['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_passthrumacs[$id]) {
+ $oldmac = $a_passthrumacs[$id];
+ $a_passthrumacs[$id] = $mac;
+ } else {
+ $oldmac = $mac;
+ $a_passthrumacs[] = $mac;
+ }
+ passthrumacs_sort();
+
+ write_config();
+
+ if (isset($config['captiveportal'][$cpzone]['enable'])) {
+ $cpzoneid = $config['captiveportal'][$cpzone]['zoneid'];
+ $rules = captiveportal_passthrumac_delete_entry($oldmac);
+ $rules .= captiveportal_passthrumac_configure_entry($mac);
+ $uniqid = uniqid("{$cpzone}_macedit");
+ file_put_contents("{$g['tmp_path']}/{$uniqid}_tmp", $rules);
+ mwexec("/sbin/ipfw -x {$cpzoneid} -q {$g['tmp_path']}/{$uniqid}_tmp");
+ @unlink("{$g['tmp_path']}/{$uniqid}_tmp");
+ unset($cpzoneid);
+ }
+
+ header("Location: services_captiveportal_mac.php?zone={$cpzone}");
+ exit;
+ }
+}
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_captiveportal_mac_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captiveportal mac edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit MAC address rules");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Action"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="action" class="formselect">
+<?php
+ $actions = explode(" ", "Pass Block");
+ foreach ($actions as $action):
+?>
+ <option value="<?=strtolower($action);?>"<?php if (strtolower($action) == strtolower($pconfig['action'])) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($action);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose what to do with packets coming from this MAC address"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="mac" type="text" class="formfld unknown" id="mac" size="17" value="<?=htmlspecialchars($pconfig['mac']);?>" />
+<?php
+ $ip = getenv('REMOTE_ADDR');
+ $mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
+ $mac = str_replace("\n", "", $mac);
+?>
+ <a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a>
+ <br />
+ <span class="vexpl"><?=gettext("MAC address (6 hex octets separated by colons)"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth up"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_up" type="text" class="formfld unknown" id="bw_up" size="10" value="<?=htmlspecialchars($pconfig['bw_up']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a upload limit to be enforced on this MAC address in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bandwidth down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="bw_down" type="text" class="formfld unknown" id="bw_down" size="10" value="<?=htmlspecialchars($pconfig['bw_down']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a download limit to be enforced on this MAC address in Kbit/s"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <?php if (isset($id) && $a_passthrumacs[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <?php if (isset($pconfig['username']) && $pconfig['username']): ?>
+ <input name="username" type="hidden" value="<?=htmlspecialchars($pconfig['username']);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_vouchers.php b/src/usr/local/www/services_captiveportal_vouchers.php
new file mode 100644
index 0000000..0bc7dae
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_vouchers.php
@@ -0,0 +1,715 @@
+<?php
+/*
+ services_captiveportal_vouchers.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/bin/voucher /usr/bin/openssl
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-vouchers
+##|*NAME=Services: Captive portal Vouchers page
+##|*DESCR=Allow access to the 'Services: Captive portal Vouchers' page.
+##|*MATCH=services_captiveportal_vouchers.php*
+##|-PRIV
+
+if ($_POST['postafterlogin']) {
+ $nocsrf= true;
+}
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_captiveportal_vouchers.php');
+}
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if ($_REQUEST['generatekey']) {
+ exec("/usr/bin/openssl genrsa 64 > /tmp/key64.private");
+ exec("/usr/bin/openssl rsa -pubout < /tmp/key64.private > /tmp/key64.public");
+ $privatekey = str_replace("\n", "\\n", file_get_contents("/tmp/key64.private"));
+ $publickey = str_replace("\n", "\\n", file_get_contents("/tmp/key64.public"));
+ exec("rm /tmp/key64.private /tmp/key64.public");
+ $alertmessage = gettext("You will need to recreate any existing Voucher Rolls due to the public and private key changes. Click cancel if you do not wish to recreate the vouchers.");
+ echo <<<EOF
+ jQuery('#publickey').val('{$publickey}');
+ jQuery('#privatekey').val('{$privatekey}');
+ alert('{$alertmessage}');
+ jQuery('#publickey').effect('highlight');
+ jQuery('#privatekey').effect('highlight');
+EOF;
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (!is_array($config['voucher'])) {
+ $config['voucher'] = array();
+}
+
+if (empty($a_cp[$cpzone])) {
+ log_error("Submission on captiveportal page with unknown zone parameter: " . htmlspecialchars($cpzone));
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal-vouchers";
+
+if (!is_array($config['voucher'][$cpzone]['roll'])) {
+ $config['voucher'][$cpzone]['roll'] = array();
+}
+if (!isset($config['voucher'][$cpzone]['charset'])) {
+ $config['voucher'][$cpzone]['charset'] = '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
+}
+if (!isset($config['voucher'][$cpzone]['rollbits'])) {
+ $config['voucher'][$cpzone]['rollbits'] = 16;
+}
+if (!isset($config['voucher'][$cpzone]['ticketbits'])) {
+ $config['voucher'][$cpzone]['ticketbits'] = 10;
+}
+if (!isset($config['voucher'][$cpzone]['checksumbits'])) {
+ $config['voucher'][$cpzone]['checksumbits'] = 5;
+}
+if (!isset($config['voucher'][$cpzone]['magic'])) {
+ $config['voucher'][$cpzone]['magic'] = rand(); // anything slightly random will do
+}
+if (!isset($config['voucher'][$cpzone]['exponent'])) {
+ while (true) {
+ while (($exponent = rand()) % 30000 < 5000) {
+ continue;
+ }
+ $exponent = ($exponent * 2) + 1; // Make it odd number
+ if ($exponent <= 65537) {
+ break;
+ }
+ }
+ $config['voucher'][$cpzone]['exponent'] = $exponent;
+ unset($exponent);
+}
+
+if (!isset($config['voucher'][$cpzone]['publickey'])) {
+ /* generate a random 64 bit RSA key pair using the voucher binary */
+ $fd = popen("/usr/local/bin/voucher -g 64 -e " . $config['voucher'][$cpzone]['exponent'], "r");
+ if ($fd !== false) {
+ $output = fread($fd, 16384);
+ pclose($fd);
+ list($privkey, $pubkey) = explode("\0", $output);
+ $config['voucher'][$cpzone]['publickey'] = base64_encode($pubkey);
+ $config['voucher'][$cpzone]['privatekey'] = base64_encode($privkey);
+ }
+}
+
+// Check for invalid or expired vouchers
+if (!isset($config['voucher'][$cpzone]['descrmsgnoaccess'])) {
+ $config['voucher'][$cpzone]['descrmsgnoaccess'] = gettext("Voucher invalid");
+}
+if (!isset($config['voucher'][$cpzone]['descrmsgexpired'])) {
+ $config['voucher'][$cpzone]['descrmsgexpired'] = gettext("Voucher expired");
+}
+
+$a_roll = &$config['voucher'][$cpzone]['roll'];
+
+if ($_GET['act'] == "del") {
+ $id = $_GET['id'];
+ if ($a_roll[$id]) {
+ $roll = $a_roll[$id]['number'];
+ $voucherlck = lock("voucher{$cpzone}");
+ unset($a_roll[$id]);
+ voucher_unlink_db($roll);
+ unlock($voucherlck);
+ write_config();
+ }
+ header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
+ exit;
+} else if ($_GET['act'] == "csv") {
+ /* print all vouchers of the selected roll */
+ $privkey = base64_decode($config['voucher'][$cpzone]['privatekey']);
+ if (strstr($privkey, "BEGIN RSA PRIVATE KEY")) {
+ $fd = fopen("{$g['varetc_path']}/voucher_{$cpzone}.private", "w");
+ if (!$fd) {
+ $input_errors[] = gettext("Cannot write private key file") . ".\n";
+ } else {
+ chmod("{$g['varetc_path']}/voucher_{$cpzone}.private", 0600);
+ fwrite($fd, $privkey);
+ fclose($fd);
+ $a_voucher = &$config['voucher'][$cpzone]['roll'];
+ $id = $_GET['id'];
+ if (isset($id) && $a_voucher[$id]) {
+ $number = $a_voucher[$id]['number'];
+ $count = $a_voucher[$id]['count'];
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename=vouchers_{$cpzone}_roll{$number}.csv");
+ if (file_exists("{$g['varetc_path']}/voucher_{$cpzone}.cfg")) {
+ system("/usr/local/bin/voucher -c {$g['varetc_path']}/voucher_{$cpzone}.cfg -p {$g['varetc_path']}/voucher_{$cpzone}.private $number $count");
+ }
+ @unlink("{$g['varetc_path']}/voucher_{$cpzone}.private");
+ } else {
+ header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
+ }
+ exit;
+ }
+ } else {
+ $input_errors[] = gettext("Need private RSA key to print vouchers") . "\n";
+ }
+}
+
+$pconfig['enable'] = isset($config['voucher'][$cpzone]['enable']);
+$pconfig['charset'] = $config['voucher'][$cpzone]['charset'];
+$pconfig['rollbits'] = $config['voucher'][$cpzone]['rollbits'];
+$pconfig['ticketbits'] = $config['voucher'][$cpzone]['ticketbits'];
+$pconfig['checksumbits'] = $config['voucher'][$cpzone]['checksumbits'];
+$pconfig['magic'] = $config['voucher'][$cpzone]['magic'];
+$pconfig['exponent'] = $config['voucher'][$cpzone]['exponent'];
+$pconfig['publickey'] = base64_decode($config['voucher'][$cpzone]['publickey']);
+$pconfig['privatekey'] = base64_decode($config['voucher'][$cpzone]['privatekey']);
+$pconfig['msgnoaccess'] = $config['voucher'][$cpzone]['descrmsgnoaccess'];
+$pconfig['msgexpired'] = $config['voucher'][$cpzone]['descrmsgexpired'];
+$pconfig['vouchersyncdbip'] = $config['voucher'][$cpzone]['vouchersyncdbip'];
+$pconfig['vouchersyncport'] = $config['voucher'][$cpzone]['vouchersyncport'];
+$pconfig['vouchersyncpass'] = $config['voucher'][$cpzone]['vouchersyncpass'];
+$pconfig['vouchersyncusername'] = $config['voucher'][$cpzone]['vouchersyncusername'];
+
+if ($_POST) {
+
+ unset($input_errors);
+
+ if ($_POST['postafterlogin']) {
+ voucher_expire($_POST['voucher_expire']);
+ exit;
+ }
+
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable'] == "yes") {
+ if (!$_POST['vouchersyncusername']) {
+ $reqdfields = explode(" ", "charset rollbits ticketbits checksumbits publickey magic");
+ $reqdfieldsn = array(gettext("charset"), gettext("rollbits"), gettext("ticketbits"), gettext("checksumbits"), gettext("publickey"), gettext("magic"));
+ } else {
+ $reqdfields = explode(" ", "vouchersyncdbip vouchersyncport vouchersyncpass vouchersyncusername");
+ $reqdfieldsn = array(gettext("Synchronize Voucher Database IP"), gettext("Sync port"), gettext("Sync password"), gettext("Sync username"));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ }
+
+ if (!$_POST['vouchersyncusername']) {
+ // Check for form errors
+ if ($_POST['charset'] && (strlen($_POST['charset'] < 2))) {
+ $input_errors[] = gettext("Need at least 2 characters to create vouchers.");
+ }
+ if ($_POST['charset'] && (strpos($_POST['charset'], "\"") > 0)) {
+ $input_errors[] = gettext("Double quotes aren't allowed.");
+ }
+ if ($_POST['charset'] && (strpos($_POST['charset'], ",") > 0)) {
+ $input_errors[] = "',' " . gettext("aren't allowed.");
+ }
+ if ($_POST['rollbits'] && (!is_numeric($_POST['rollbits']) || ($_POST['rollbits'] < 1) || ($_POST['rollbits'] > 31))) {
+ $input_errors[] = gettext("# of Bits to store Roll Id needs to be between 1..31.");
+ }
+ if ($_POST['ticketbits'] && (!is_numeric($_POST['ticketbits']) || ($_POST['ticketbits'] < 1) || ($_POST['ticketbits'] > 16))) {
+ $input_errors[] = gettext("# of Bits to store Ticket Id needs to be between 1..16.");
+ }
+ if ($_POST['checksumbits'] && (!is_numeric($_POST['checksumbits']) || ($_POST['checksumbits'] < 1) || ($_POST['checksumbits'] > 31))) {
+ $input_errors[] = gettext("# of Bits to store checksum needs to be between 1..31.");
+ }
+ if ($_POST['publickey'] && (!strstr($_POST['publickey'], "BEGIN PUBLIC KEY"))) {
+ $input_errors[] = gettext("This doesn't look like an RSA Public key.");
+ }
+ if ($_POST['privatekey'] && (!strstr($_POST['privatekey'], "BEGIN RSA PRIVATE KEY"))) {
+ $input_errors[] = gettext("This doesn't look like an RSA Private key.");
+ }
+ if ($_POST['vouchersyncdbip'] && (is_ipaddr_configured($_POST['vouchersyncdbip']))) {
+ $input_errors[] = gettext("You cannot sync the voucher database to this host (itself).");
+ }
+ }
+
+ if (!$input_errors) {
+ if (empty($config['voucher'][$cpzone])) {
+ $newvoucher = array();
+ } else {
+ $newvoucher = $config['voucher'][$cpzone];
+ }
+ if ($_POST['enable'] == "yes") {
+ $newvoucher['enable'] = true;
+ } else {
+ unset($newvoucher['enable']);
+ }
+ if (empty($_POST['vouchersyncusername'])) {
+ unset($newvoucher['vouchersyncdbip']);
+ unset($newvoucher['vouchersyncport']);
+ unset($newvoucher['vouchersyncusername']);
+ unset($newvoucher['vouchersyncpass']);
+ $newvoucher['charset'] = $_POST['charset'];
+ $newvoucher['rollbits'] = $_POST['rollbits'];
+ $newvoucher['ticketbits'] = $_POST['ticketbits'];
+ $newvoucher['checksumbits'] = $_POST['checksumbits'];
+ $newvoucher['magic'] = $_POST['magic'];
+ $newvoucher['exponent'] = $_POST['exponent'];
+ $newvoucher['publickey'] = base64_encode($_POST['publickey']);
+ $newvoucher['privatekey'] = base64_encode($_POST['privatekey']);
+ $newvoucher['descrmsgnoaccess'] = $_POST['msgnoaccess'];
+ $newvoucher['descrmsgexpired'] = $_POST['msgexpired'];
+ $config['voucher'][$cpzone] = $newvoucher;
+ write_config();
+ voucher_configure_zone();
+ } else {
+ $newvoucher['vouchersyncdbip'] = $_POST['vouchersyncdbip'];
+ $newvoucher['vouchersyncport'] = $_POST['vouchersyncport'];
+ $newvoucher['vouchersyncusername'] = $_POST['vouchersyncusername'];
+ $newvoucher['vouchersyncpass'] = $_POST['vouchersyncpass'];
+ if ($newvoucher['vouchersyncpass'] && $newvoucher['vouchersyncusername'] &&
+ $newvoucher['vouchersyncport'] && $newvoucher['vouchersyncdbip']) {
+ // Synchronize the voucher DB from the master node
+ require_once("xmlrpc.inc");
+
+ $protocol = "http";
+ if (is_array($config['system']) && is_array($config['system']['webgui']) && !empty($config['system']['webgui']['protocol']) &&
+ $config['system']['webgui']['protocol'] == "https") {
+ $protocol = "https";
+ }
+ if ($protocol == "https" || $newvoucher['vouchersyncport'] == "443") {
+ $url = "https://{$newvoucher['vouchersyncdbip']}";
+ } else {
+ $url = "http://{$newvoucher['vouchersyncdbip']}";
+ }
+
+ $execcmd = <<<EOF
+ \$toreturn = array();
+ \$toreturn['voucher'] = \$config['voucher']['$cpzone'];
+ unset(\$toreturn['vouchersyncport'], \$toreturn['vouchersyncpass'], \$toreturn['vouchersyncusername'], \$toreturn['vouchersyncdbip']);
+
+EOF;
+
+ /* assemble xmlrpc payload */
+ $params = array(
+ XML_RPC_encode($newvoucher['vouchersyncpass']),
+ XML_RPC_encode($execcmd)
+ );
+ $port = $newvoucher['vouchersyncport'];
+ log_error("voucher XMLRPC sync data {$url}:{$port}.");
+ $msg = new XML_RPC_Message('pfsense.exec_php', $params);
+ $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
+ $cli->setCredentials($newvoucher['vouchersyncusername'], $newvoucher['vouchersyncpass']);
+ $resp = $cli->send($msg, "250");
+ if (!is_object($resp)) {
+ $error = "A communications error occurred while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} (pfsense.exec_php).";
+ log_error($error);
+ file_notice("CaptivePortalVoucherSync", $error, "Communications error occurred", "");
+ $input_errors[] = $error;
+ } elseif ($resp->faultCode()) {
+ $cli->setDebug(1);
+ $resp = $cli->send($msg, "250");
+ $error = "An error code was received while attempting CaptivePortalVoucherSync XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString();
+ log_error($error);
+ file_notice("CaptivePortalVoucherSync", $error, "Error code received", "");
+ $input_errors[] = $error;
+ } else {
+ log_error("The Captive Portal voucher database has been synchronized with {$url}:{$port} (pfsense.exec_php).");
+ }
+ if (!$input_errors) {
+ $toreturn = XML_RPC_Decode($resp->value());
+ if (!is_array($toreturn)) {
+ if ($toreturn == "Authentication failed") {
+ $input_errors[] = "Could not synchronize the voucher database: Authentication Failed.";
+ }
+ } else {
+ // If we received back the voucher roll and other information then store it.
+ if ($toreturn['voucher']['roll']) {
+ $newvoucher['roll'] = $toreturn['voucher']['roll'];
+ }
+ if ($toreturn['voucher']['rollbits']) {
+ $newvoucher['rollbits'] = $toreturn['voucher']['rollbits'];
+ }
+ if ($toreturn['voucher']['ticketbits']) {
+ $newvoucher['ticketbits'] = $toreturn['voucher']['ticketbits'];
+ }
+ if ($toreturn['voucher']['checksumbits']) {
+ $newvoucher['checksumbits'] = $toreturn['voucher']['checksumbits'];
+ }
+ if ($toreturn['voucher']['magic']) {
+ $newvoucher['magic'] = $toreturn['voucher']['magic'];
+ }
+ if ($toreturn['voucher']['exponent']) {
+ $newvoucher['exponent'] = $toreturn['voucher']['exponent'];
+ }
+ if ($toreturn['voucher']['publickey']) {
+ $newvoucher['publickey'] = $toreturn['voucher']['publickey'];
+ }
+ if ($toreturn['voucher']['privatekey']) {
+ $newvoucher['privatekey'] = $toreturn['voucher']['privatekey'];
+ }
+ if ($toreturn['voucher']['descrmsgnoaccess']) {
+ $newvoucher['descrmsgnoaccess'] = $toreturn['voucher']['descrmsgnoaccess'];
+ }
+ if ($toreturn['voucher']['descrmsgexpired']) {
+ $newvoucher['descrmsgexpired'] = $toreturn['voucher']['descrmsgexpired'];
+ }
+ $savemsg = gettext("Voucher database has been synchronized from {$url}:{$port}");
+
+ $config['voucher'][$cpzone] = $newvoucher;
+ write_config();
+ voucher_configure_zone(true);
+ }
+ }
+ }
+ }
+ if (!$input_errors) {
+ header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
+ exit;
+ }
+ }
+}
+$closehead = false;
+include("head.inc");
+?>
+<script type="text/javascript">
+//<![CDATA[
+function generatenewkey() {
+ jQuery('#publickey').val('One moment please...');
+ jQuery('#privatekey').val('One moment please...');
+ jQuery.ajax("services_captiveportal_vouchers.php?zone=<?php echo($cpzone); ?>&generatekey=true", {
+ type: 'get',
+ success: function(data) {
+ eval(data);
+ }
+ });
+}
+function before_save() {
+ document.iform.charset.disabled = false;
+ document.iform.rollbits.disabled = false;
+ document.iform.ticketbits.disabled = false;
+ document.iform.checksumbits.disabled = false;
+ document.iform.magic.disabled = false;
+ document.iform.publickey.disabled = false;
+ document.iform.privatekey.disabled = false;
+ document.iform.msgnoaccess.disabled = false;
+ document.iform.msgexpired.disabled = false;
+ for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
+ jQuery('#addeditdelete' + x).show();
+ }
+ jQuery('#addnewroll').show();
+}
+function enable_change(enable_change) {
+ var endis;
+ endis = !(document.iform.enable.checked || enable_change);
+ document.iform.charset.disabled = endis;
+ document.iform.rollbits.disabled = endis;
+ document.iform.ticketbits.disabled = endis;
+ document.iform.checksumbits.disabled = endis;
+ document.iform.magic.disabled = endis;
+ document.iform.publickey.disabled = endis;
+ document.iform.privatekey.disabled = endis;
+ document.iform.msgnoaccess.disabled = endis;
+ document.iform.msgexpired.disabled = endis;
+ document.iform.vouchersyncdbip.disabled = endis;
+ document.iform.vouchersyncport.disabled = endis;
+ document.iform.vouchersyncpass.disabled = endis;
+ document.iform.vouchersyncusername.disabled = endis;
+ if (document.iform.vouchersyncusername.value != "") {
+ document.iform.charset.disabled = true;
+ document.iform.rollbits.disabled = true;
+ document.iform.ticketbits.disabled = true;
+ document.iform.checksumbits.disabled = true;
+ document.iform.magic.disabled = true;
+ document.iform.publickey.disabled = true;
+ document.iform.privatekey.disabled = true;
+ document.iform.msgnoaccess.disabled = true;
+ document.iform.msgexpired.disabled = true;
+ for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
+ jQuery('#addeditdelete' + x).hide();
+ }
+ jQuery('#addnewroll').hide();
+ } else {
+ for (var x = 0; x < <?php echo count($a_roll); ?>; x++) {
+ jQuery('#addeditdelete' + x).show();
+ }
+ jQuery('#addnewroll').show();
+ }
+}
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_captiveportal_vouchers.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Vouchers"), true, "services_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
+ display_top_tabs($tab_array, true);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="checkbox pane">
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?=gettext("Enable Vouchers"); ?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell">
+ <?=gettext("Voucher Rolls"); ?>
+ <?php
+ if ($pconfig['vouchersyncdbip']) {
+ echo "<br />(Synchronized from {$pconfig['vouchersyncdbip']})";
+ }
+ ?>
+ </td>
+ <td class="vtable">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Roll"); ?> #</td>
+ <td width="20%" class="listhdrr"><?=gettext("Minutes/Ticket"); ?></td>
+ <td width="20%" class="listhdrr"># <?=gettext("of Tickets"); ?></td>
+ <td width="35%" class="listhdr"><?=gettext("Comment"); ?></td>
+ <td width="15%" class="list"></td>
+ </tr>
+ <?php $i = 0; foreach ($a_roll as $rollent): ?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($rollent['number']); ?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['minutes']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['count']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['descr']); ?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <div id='addeditdelete<?=$i?>'>
+ <?php if ($pconfig['enable']): ?>
+ <a href="services_captiveportal_vouchers_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i; ?>"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit voucher"); ?>" width="17" height="17" border="0" alt="<?=gettext("edit voucher"); ?>" /></a>
+ <a href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i; ?>" onclick="return confirm('<?=gettext("Do you really want to delete this voucher? This makes all vouchers from this roll invalid"); ?>')"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete vouchers"); ?>" width="17" height="17" border="0" alt="<?=gettext("delete vouchers"); ?>" /></a>
+ <a href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=csv&amp;id=<?=$i; ?>"><img src="/themes/<?=$g['theme']; ?>/images/icons/icon_log_s.gif" title="<?=gettext("generate vouchers for this roll to CSV file"); ?>" width="11" height="15" border="0" alt="<?=gettext("generate vouchers for this roll to CSV file"); ?>" /></a>
+ <?php endif;?>
+ </div>
+ </td>
+ </tr>
+ <?php $i++; endforeach; ?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <?php
+ if ($pconfig['enable']) {
+ echo "<td class=\"list\"><div id='addnewroll'> <a href=\"services_captiveportal_vouchers_edit.php?zone={$cpzone}\"><img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" title=\"" . gettext("add voucher") . "\" width=\"17\" height=\"17\" border=\"0\" alt=\"" . gettext("add voucher") . "\" /></a></div></td>";
+ }
+ ?>
+ </tr>
+ </table>
+ <?php if ($pconfig['enable']): ?>
+ <?=gettext("Create, generate and activate Rolls with Vouchers that allow access through the " .
+ "captive portal for the configured time. Once a voucher is activated, " .
+ "its clock is started and runs uninterrupted until it expires. During that " .
+ "time, the voucher can be re-used from the same or a different computer. If the voucher " .
+ "is used again from another computer, the previous session is stopped."); ?>
+ <?php else: ?>
+ <?=gettext("Enable Voucher support first using the checkbox above and hit Save at the bottom."); ?>
+ <?php endif;?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq">
+ <?=gettext("Voucher public key"); ?>
+ </td>
+ <td class="vtable">
+ <textarea name="publickey" cols="65" rows="4" id="publickey" class="formpre"><?=htmlspecialchars($pconfig['publickey']);?></textarea>
+ <br />
+ <?=gettext("Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers."); ?> <a href='#' onclick='generatenewkey();'><?=gettext('Generate');?></a> <?=gettext('new key');?>.
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Voucher private key"); ?></td>
+ <td class="vtable">
+ <textarea name="privatekey" cols="65" rows="5" id="privatekey" class="formpre"><?=htmlspecialchars($pconfig['privatekey']);?></textarea>
+ <br />
+ <?=gettext("Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline."); ?> <a href='#' onclick='generatenewkey();'> <?=gettext('Generate');?></a> <?=gettext('new key');?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Character set"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="charset" type="text" class="formfld" id="charset" size="80" value="<?=htmlspecialchars($pconfig['charset']);?>" />
+ <br />
+ <?=gettext("Tickets are generated with the specified character set. It should contain printable characters (numbers, lower case and upper case letters) that are hard to confuse with others. Avoid e.g. 0/O and l/1."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Roll Bits"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="rollbits" type="text" class="formfld" id="rollbits" size="2" value="<?=htmlspecialchars($pconfig['rollbits']);?>" />
+ <br />
+ <?=gettext("Reserves a range in each voucher to store the Roll # it belongs to. Allowed range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the RSA key size."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Ticket Bits"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ticketbits" type="text" class="formfld" id="ticketbits" size="2" value="<?=htmlspecialchars($pconfig['ticketbits']);?>" />
+ <br />
+ <?=gettext("Reserves a range in each voucher to store the Ticket# it belongs to. Allowed range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A bit array, stored in RAM and in the config, is used to mark if a voucher has been used. A bit array for 65535 vouchers requires 8 KB of storage."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"># <?=gettext("of Checksum Bits"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="checksumbits" type="text" class="formfld" id="checksumbits" size="2" value="<?=htmlspecialchars($pconfig['checksumbits']);?>" />
+ <br />
+ <?=gettext("Reserves a range in each voucher to store a simple checksum over Roll # and Ticket#. Allowed range is 0..31."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Magic Number"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="magic" type="text" class="formfld" id="magic" size="20" value="<?=htmlspecialchars($pconfig['magic']);?>" />
+ <br />
+ <?=gettext("Magic number stored in every voucher. Verified during voucher check. Size depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits are used, no magic number will be used and checked."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Invalid Voucher Message"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="msgnoaccess" type="text" class="formfld" id="msgnoaccess" size="80" value="<?=htmlspecialchars($pconfig['msgnoaccess']);?>" />
+ <br /><?=gettext("Error message displayed for invalid vouchers on captive portal error page"); ?> ($PORTAL_MESSAGE$).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Expired Voucher Message"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="msgexpired" type="text" class="formfld" id="msgexpired" size="80" value="<?=htmlspecialchars($pconfig['msgexpired']);?>" />
+ <br /><?=gettext("Error message displayed for expired vouchers on captive portal error page"); ?> ($PORTAL_MESSAGE$).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ &nbsp;
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Voucher database synchronization"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Synchronize Voucher Database IP"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="vouchersyncdbip" type="text" class="formfld" id="vouchersyncdbip" size="17" value="<?=htmlspecialchars($pconfig['vouchersyncdbip']);?>" />
+ <br /><?=gettext("IP address of master nodes webConfigurator to synchronize voucher database and used vouchers from."); ?>
+ <br /><?=gettext("NOTE: this should be setup on the slave nodes and not the primary node!"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync port"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="vouchersyncport" type="text" class="formfld" id="vouchersyncport" size="7" value="<?=htmlspecialchars($pconfig['vouchersyncport']);?>" />
+ <br /><?=gettext("This is the port of the master voucher nodes webConfigurator. Example: 443"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="vouchersyncusername" type="text" class="formfld" id="vouchersyncusername" size="25" value="<?=htmlspecialchars($pconfig['vouchersyncusername']);?>" autocomplete="off" />
+ <br /><?=gettext("This is the username of the master voucher nodes webConfigurator."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Voucher sync password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="vouchersyncpass" type="password" class="formfld" id="vouchersyncpass" size="25" value="<?=htmlspecialchars($pconfig['vouchersyncpass']);?>" autocomplete="off" />
+ <br /><?=gettext("This is the password of the master voucher nodes webConfigurator."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
+ <input type="hidden" name="exponent" id="exponent" value="<?=$pconfig['exponent'];?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true); before_save();" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list">
+ <p class="vexpl">
+ <span class="red"><strong> <?=gettext("Note:"); ?><br /> </strong></span>
+ <?=gettext("Changing any Voucher parameter (apart from managing the list of Rolls) on this page will render existing vouchers useless if they were generated with different settings."); ?>
+ <br />
+ <?=gettext("Specifying the Voucher Database Synchronization options will not record any other value from the other options. They will be retrieved/synced from the master."); ?>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_vouchers_edit.php b/src/usr/local/www/services_captiveportal_vouchers_edit.php
new file mode 100644
index 0000000..0aa6a45
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_vouchers_edit.php
@@ -0,0 +1,230 @@
+<?php
+/*
+ services_captiveportal_vouchers_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-voucher-edit
+##|*NAME=Services: Captive portal Voucher Rolls page
+##|*DESCR=Allow access to the 'Services: Captive portal Edit Voucher Rolls' page.
+##|*MATCH=services_captiveportal_vouchers_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit Voucher Rolls"));
+$shortcut_section = "captiveportal-vouchers";
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (!is_array($config['voucher'])) {
+ $config['voucher'] = array();
+}
+
+if (!is_array($config['voucher'][$cpzone]['roll'])) {
+ $config['voucher'][$cpzone]['roll'] = array();
+}
+$a_roll = &$config['voucher'][$cpzone]['roll'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_roll[$id]) {
+ $pconfig['zone'] = $a_roll[$id]['zone'];
+ $pconfig['number'] = $a_roll[$id]['number'];
+ $pconfig['count'] = $a_roll[$id]['count'];
+ $pconfig['minutes'] = $a_roll[$id]['minutes'];
+ $pconfig['descr'] = $a_roll[$id]['descr'];
+}
+
+$maxnumber = (1<<$config['voucher'][$cpzone]['rollbits']) -1; // Highest Roll#
+$maxcount = (1<<$config['voucher'][$cpzone]['ticketbits']) -1; // Highest Ticket#
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "number count minutes");
+ $reqdfieldsn = array(gettext("Number"), gettext("Count"), gettext("minutes"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ // Look for duplicate roll #
+ foreach ($a_roll as $re) {
+ if ($re['number'] == $_POST['number']) {
+ $input_errors[] = sprintf(gettext("Roll number %s already exists."), $_POST['number']);
+ break;
+ }
+ }
+
+ if (!is_numeric($_POST['number']) || $_POST['number'] >= $maxnumber) {
+ $input_errors[] = sprintf(gettext("Roll number must be numeric and less than %s"), $maxnumber);
+ }
+
+ if (!is_numeric($_POST['count']) || $_POST['count'] < 1 || $_POST['count'] > $maxcount) {
+ $input_errors[] = sprintf(gettext("A roll has at least one voucher and less than %s."), $maxcount);
+ }
+
+ if (!is_numeric($_POST['minutes']) || $_POST['minutes'] < 1) {
+ $input_errors[] = gettext("Each voucher must be good for at least 1 minute.");
+ }
+
+ if (!$input_errors) {
+
+ if (isset($id) && $a_roll[$id]) {
+ $rollent = $a_roll[$id];
+ }
+
+ $rollent['zone'] = $_POST['zone'];
+ $rollent['number'] = $_POST['number'];
+ $rollent['minutes'] = $_POST['minutes'];
+ $rollent['descr'] = $_POST['descr'];
+
+ /* New Roll or modified voucher count: create bitmask */
+ $voucherlck = lock("voucher{$cpzone}");
+ if ($_POST['count'] != $rollent['count']) {
+ $rollent['count'] = $_POST['count'];
+ $len = ($rollent['count']>>3) + 1; // count / 8 +1
+ $rollent['used'] = base64_encode(str_repeat("\000", $len)); // 4 bitmask
+ $rollent['active'] = array();
+ voucher_write_used_db($rollent['number'], $rollent['used']);
+ voucher_write_active_db($rollent['number'], array()); // create empty DB
+ voucher_log(LOG_INFO, sprintf(gettext('All %1$s vouchers from Roll %2$s marked unused'), $rollent['count'], $rollent['number']));
+ } else {
+ // existing roll has been modified but without changing the count
+ // read active and used DB from ramdisk and store it in XML config
+ $rollent['used'] = base64_encode(voucher_read_used_db($rollent['number']));
+ $activent = array();
+ $db = array();
+ $active_vouchers = voucher_read_active_db($rollent['number'], $rollent['minutes']);
+ foreach ($active_vouchers as $voucher => $line) {
+ list($timestamp, $minutes) = explode(",", $line);
+ $activent['voucher'] = $voucher;
+ $activent['timestamp'] = $timestamp;
+ $activent['minutes'] = $minutes;
+ $db[] = $activent;
+ }
+ $rollent['active'] = $db;
+ }
+ unlock($voucherlck);
+
+ if (isset($id) && $a_roll[$id]) {
+ $a_roll[$id] = $rollent;
+ } else {
+ $a_roll[] = $rollent;
+ }
+
+ write_config();
+
+ header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
+ exit;
+ }
+}
+
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_captiveportal_vouchers_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Roll"); ?>#</td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="number" type="text" class="formfld" id="number" size="10" value="<?=htmlspecialchars($pconfig['number']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter the Roll"); ?># (0..<?=htmlspecialchars($maxnumber);?>) <?=gettext("found on top of the generated/printed vouchers"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Minutes per Ticket"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="minutes" type="text" class="formfld" id="minutes" size="10" value="<?=htmlspecialchars($pconfig['minutes']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Count"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="count" type="text" class="formfld" id="count" size="10" value="<?=htmlspecialchars($pconfig['count']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter the number of vouchers"); ?> (1..<?=htmlspecialchars($maxcount);?>) <?=gettext("found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Comment"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="descr" type="text" class="formfld" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Can be used to further identify this roll. Ignored by the system"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <?php if (isset($id) && $a_roll[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_zones.php b/src/usr/local/www/services_captiveportal_zones.php
new file mode 100644
index 0000000..6d956b5
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_zones.php
@@ -0,0 +1,154 @@
+<?php
+/*
+ services_captiveportal_zones.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-zones
+##|*NAME=Services: Captive portal Zones page
+##|*DESCR=Allow access to the 'Services: Captive portal Zones' page.
+##|*MATCH=services_captiveportal_zones.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+global $cpzone;
+global $cpzoneid;
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp = &$config['captiveportal'];
+
+if ($_GET['act'] == "del" && !empty($_GET['zone'])) {
+ $cpzone = htmlspecialchars($_GET['zone']);
+ if ($a_cp[$cpzone]) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+ unset($a_cp[$cpzone]['enable']);
+ captiveportal_configure_zone($a_cp[$cpzone]);
+ unset($a_cp[$cpzone]);
+ if (isset($config['voucher'][$cpzone])) {
+ unset($config['voucher'][$cpzone]);
+ }
+ write_config();
+ }
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Captive Portal"), gettext("Zones"));
+$shortcut_section = "captiveportal";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_captiveportal_zones.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('captiveportal')): ?><p>
+<?php print_info_box_np(gettext("The CaptivePortal entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
+<?php endif; ?>
+
+<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Zone");?></td>
+ <td width="30%" class="listhdrr"><?=gettext("Interfaces");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Number of users");?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle">
+ <a href="services_captiveportal_zones_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new captiveportal instance");?>" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ foreach ($a_cp as $cpzone => $cpitem):
+ if (!is_array($cpitem)) {
+ continue;
+ }
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
+ <?=htmlspecialchars($cpitem['zone']);?>
+ </td>
+ <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
+<?php
+ $cpifaces = explode(",", $cpitem['interface']);
+ foreach ($cpifaces as $cpiface) {
+ echo convert_friendly_interface_to_friendly_descr($cpiface) . " ";
+ }
+?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
+ <?=count(captiveportal_read_db());?>
+ </td>
+ <td class="listbg" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
+ <?=htmlspecialchars($cpitem['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_captiveportal.php?zone=<?=$cpzone?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit captiveportal instance"); ?>" alt="edit" /></a></td>
+ <td>
+ <a href="services_captiveportal_zones.php?act=del&amp;zone=<?=$cpzone;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete captiveportal instance");?>" alt="delete" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle">
+ <a href="services_captiveportal_zones_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new captiveportal instance");?>" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_captiveportal_zones_edit.php b/src/usr/local/www/services_captiveportal_zones_edit.php
new file mode 100644
index 0000000..fa37c80
--- /dev/null
+++ b/src/usr/local/www/services_captiveportal_zones_edit.php
@@ -0,0 +1,124 @@
+<?php
+/*
+ services_captiveportal_zones_edit.php
+ Copyright (C) 2011 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-services-captiveportal-editzones
+##|*NAME=Services: Captive portal: Edit Zones page
+##|*DESCR=Allow access to the 'Services: Captive portal: Edit Zones' page.
+##|*MATCH=services_captiveportal_zones_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit Zones"));
+$shortcut_section = "captiveportal";
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "zone");
+ $reqdfieldsn = array(gettext("Zone name"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match('/[^A-Za-z0-9_]/', $_POST['zone'])) {
+ $input_errors[] = gettext("The zone name can only contain letters, digits, and underscores (_).");
+ }
+
+ foreach ($a_cp as $cpkey => $cpent) {
+ if ($cpent['zone'] == $_POST['zone']) {
+ $input_errors[] = sprintf("[%s] %s.", $_POST['zone'], gettext("already exists"));
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $cpzone = strtolower($_POST['zone']);
+ $a_cp[$cpzone] = array();
+ $a_cp[$cpzone]['zone'] = str_replace(" ", "", $_POST['zone']);
+ $a_cp[$cpzone]['descr'] = $_POST['descr'];
+ $a_cp[$cpzone]['localauth_priv'] = true;
+ write_config();
+
+ header("Location: services_captiveportal.php?zone={$cpzone}");
+ exit;
+ }
+}
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="services_captiveportal_zones_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="captive portal edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Captive Portal Zones");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="zone" type="text" class="formfld unknown" id="zone" size="64" />
+ <br />
+ <span class="vexpl"><?=gettext("Zone name. Can only contain letters, digits, and underscores (_)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Continue"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcp.php b/src/usr/local/www/services_dhcp.php
new file mode 100644
index 0000000..3061812
--- /dev/null
+++ b/src/usr/local/www/services_dhcp.php
@@ -0,0 +1,1442 @@
+<?php
+/* $Id$ */
+/*
+ services_dhcp.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcpserver
+##|*NAME=Services: DHCP server page
+##|*DESCR=Allow access to the 'Services: DHCP server' page.
+##|*MATCH=services_dhcp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+
+if (!$g['services_dhcp_server_enable']) {
+ header("Location: /");
+ exit;
+}
+
+$if = $_GET['if'];
+if (!empty($_POST['if'])) {
+ $if = $_POST['if'];
+}
+
+/* if OLSRD is enabled, allow WAN to house DHCP. */
+if ($config['installedpackages']['olsrd']) {
+ foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
+ if ($olsrd['enable']) {
+ $is_olsr_enabled = true;
+ break;
+ }
+ }
+}
+
+$iflist = get_configured_interface_with_descr();
+
+/* set the starting interface */
+if (!$if || !isset($iflist[$if])) {
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
+ (!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr'])))) {
+ continue;
+ }
+ $if = $ifent;
+ break;
+ }
+}
+
+$act = $_GET['act'];
+if (!empty($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+$a_pools = array();
+
+if (is_array($config['dhcpd'][$if])) {
+ $pool = $_GET['pool'];
+ if (is_numeric($_POST['pool'])) {
+ $pool = $_POST['pool'];
+ }
+
+ // If we have a pool but no interface name, that's not valid. Redirect away.
+ if (is_numeric($pool) && empty($if)) {
+ header("Location: services_dhcp.php");
+ exit;
+ }
+
+ if (!is_array($config['dhcpd'][$if]['pool'])) {
+ $config['dhcpd'][$if]['pool'] = array();
+ }
+ $a_pools = &$config['dhcpd'][$if]['pool'];
+
+ if (is_numeric($pool) && $a_pools[$pool]) {
+ $dhcpdconf = &$a_pools[$pool];
+ } elseif ($act == "newpool") {
+ $dhcpdconf = array();
+ } else {
+ $dhcpdconf = &$config['dhcpd'][$if];
+ }
+}
+if (is_array($dhcpdconf)) {
+ // Global Options
+ if (!is_numeric($pool) && !($act == "newpool")) {
+ $pconfig['enable'] = isset($dhcpdconf['enable']);
+ $pconfig['staticarp'] = isset($dhcpdconf['staticarp']);
+ // No reason to specify this per-pool, per the dhcpd.conf man page it needs to be in every
+ // pool and should be specified in every pool both nodes share, so we'll treat it as global
+ $pconfig['failover_peerip'] = $dhcpdconf['failover_peerip'];
+
+ // dhcpleaseinlocaltime is global to all interfaces. So if it is selected on any interface,
+ // then show it true/checked.
+ foreach ($config['dhcpd'] as $dhcpdifitem) {
+ $dhcpleaseinlocaltime = $dhcpdifitem['dhcpleaseinlocaltime'];
+ if ($dhcpleaseinlocaltime) {
+ break;
+ }
+ }
+
+ $pconfig['dhcpleaseinlocaltime'] = $dhcpleaseinlocaltime;
+
+ if (!is_array($dhcpdconf['staticmap'])) {
+ $dhcpdconf['staticmap'] = array();
+ }
+ $a_maps = &$dhcpdconf['staticmap'];
+ } else {
+ // Options that exist only in pools
+ $pconfig['descr'] = $dhcpdconf['descr'];
+ }
+
+ // Options that can be global or per-pool.
+ if (is_array($dhcpdconf['range'])) {
+ $pconfig['range_from'] = $dhcpdconf['range']['from'];
+ $pconfig['range_to'] = $dhcpdconf['range']['to'];
+ }
+ $pconfig['deftime'] = $dhcpdconf['defaultleasetime'];
+ $pconfig['maxtime'] = $dhcpdconf['maxleasetime'];
+ $pconfig['gateway'] = $dhcpdconf['gateway'];
+ $pconfig['domain'] = $dhcpdconf['domain'];
+ $pconfig['domainsearchlist'] = $dhcpdconf['domainsearchlist'];
+ list($pconfig['wins1'], $pconfig['wins2']) = $dhcpdconf['winsserver'];
+ list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $dhcpdconf['dnsserver'];
+ $pconfig['denyunknown'] = isset($dhcpdconf['denyunknown']);
+ $pconfig['ddnsdomain'] = $dhcpdconf['ddnsdomain'];
+ $pconfig['ddnsdomainprimary'] = $dhcpdconf['ddnsdomainprimary'];
+ $pconfig['ddnsdomainkeyname'] = $dhcpdconf['ddnsdomainkeyname'];
+ $pconfig['ddnsdomainkey'] = $dhcpdconf['ddnsdomainkey'];
+ $pconfig['ddnsupdate'] = isset($dhcpdconf['ddnsupdate']);
+ $pconfig['mac_allow'] = $dhcpdconf['mac_allow'];
+ $pconfig['mac_deny'] = $dhcpdconf['mac_deny'];
+ list($pconfig['ntp1'], $pconfig['ntp2']) = $dhcpdconf['ntpserver'];
+ $pconfig['tftp'] = $dhcpdconf['tftp'];
+ $pconfig['ldap'] = $dhcpdconf['ldap'];
+ $pconfig['netboot'] = isset($dhcpdconf['netboot']);
+ $pconfig['nextserver'] = $dhcpdconf['nextserver'];
+ $pconfig['filename'] = $dhcpdconf['filename'];
+ $pconfig['filename32'] = $dhcpdconf['filename32'];
+ $pconfig['filename64'] = $dhcpdconf['filename64'];
+ $pconfig['rootpath'] = $dhcpdconf['rootpath'];
+ $pconfig['netmask'] = $dhcpdconf['netmask'];
+ $pconfig['numberoptions'] = $dhcpdconf['numberoptions'];
+}
+
+$ifcfgip = $config['interfaces'][$if]['ipaddr'];
+$ifcfgsn = $config['interfaces'][$if]['subnet'];
+
+function validate_partial_mac_list($maclist) {
+ $macs = explode(',', $maclist);
+
+ // Loop through and look for invalid MACs.
+ foreach ($macs as $mac) {
+ if (!is_macaddr($mac, true)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+if (isset($_POST['submit'])) {
+
+ unset($input_errors);
+
+ $pconfig = $_POST;
+
+ $numberoptions = array();
+ for ($x = 0; $x < 99; $x++) {
+ if (isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) {
+ $numbervalue = array();
+ $numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]);
+ $numbervalue['type'] = htmlspecialchars($_POST["itemtype{$x}"]);
+ $numbervalue['value'] = str_replace('&quot;', '"', htmlspecialchars($_POST["value{$x}"]));
+ $numberoptions['item'][] = $numbervalue;
+ }
+ }
+ // Reload the new pconfig variable that the form uses.
+ $pconfig['numberoptions'] = $numberoptions;
+
+ /* input validation */
+ if ($_POST['enable'] || is_numeric($pool) || $act == "newpool") {
+ $reqdfields = explode(" ", "range_from range_to");
+ $reqdfieldsn = array(gettext("Range begin"), gettext("Range end"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['range_from'] && !is_ipaddrv4($_POST['range_from']))) {
+ $input_errors[] = gettext("A valid range must be specified.");
+ }
+ if (($_POST['range_to'] && !is_ipaddrv4($_POST['range_to']))) {
+ $input_errors[] = gettext("A valid range must be specified.");
+ }
+ if (($_POST['gateway'] && $_POST['gateway'] != "none" && !is_ipaddrv4($_POST['gateway']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the gateway.");
+ }
+ if (($_POST['wins1'] && !is_ipaddrv4($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddrv4($_POST['wins2']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary WINS servers.");
+ }
+ $parent_ip = get_interface_ip($_POST['if']);
+ if (is_ipaddrv4($parent_ip) && $_POST['gateway'] && $_POST['gateway'] != "none") {
+ $parent_sn = get_interface_subnet($_POST['if']);
+ if (!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway'])) {
+ $input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
+ }
+ }
+ if (($_POST['dns1'] && !is_ipaddrv4($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddrv4($_POST['dns2'])) || ($_POST['dns3'] && !is_ipaddrv4($_POST['dns3'])) || ($_POST['dns4'] && !is_ipaddrv4($_POST['dns4']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for each of the DNS servers.");
+ }
+
+ if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
+ $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
+ }
+
+ if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
+ $deftime = 7200; // Default value if it's empty
+ if (is_numeric($_POST['deftime'])) {
+ $deftime = $_POST['deftime'];
+ }
+
+ foreach ($config['captiveportal'] as $cpZone => $cpdata) {
+ if (!isset($cpdata['enable'])) {
+ continue;
+ }
+ if (!isset($cpdata['timeout']) || !is_numeric($cpdata['timeout'])) {
+ continue;
+ }
+ $cp_ifs = explode(',', $cpdata['interface']);
+ if (!in_array($if, $cp_ifs)) {
+ continue;
+ }
+ if ($cpdata['timeout'] > $deftime) {
+ $input_errors[] = sprintf(gettext(
+ "The Captive Portal zone '%s' has Hard Timeout parameter set to a value bigger than Default lease time (%s)."), $cpZone, $deftime);
+ }
+ }
+ }
+
+ if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
+ $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
+ }
+ if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
+ $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
+ }
+ if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
+ $input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name.");
+ }
+ if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
+ ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
+ $input_errors[] = gettext("You must specify both a valid domain key and key name.");
+ }
+ if ($_POST['domainsearchlist']) {
+ $domain_array = preg_split("/[ ;]+/", $_POST['domainsearchlist']);
+ foreach ($domain_array as $curdomain) {
+ if (!is_domain($curdomain)) {
+ $input_errors[] = gettext("A valid domain search list must be specified.");
+ break;
+ }
+ }
+ }
+
+ // Validate MACs
+ if (!empty($_POST['mac_allow']) && !validate_partial_mac_list($_POST['mac_allow'])) {
+ $input_errors[] = gettext("If you specify a mac allow list, it must contain only valid partial MAC addresses.");
+ }
+ if (!empty($_POST['mac_deny']) && !validate_partial_mac_list($_POST['mac_deny'])) {
+ $input_errors[] = gettext("If you specify a mac deny list, it must contain only valid partial MAC addresses.");
+ }
+
+ if (($_POST['ntp1'] && !is_ipaddrv4($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv4($_POST['ntp2']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary NTP servers.");
+ }
+ if (($_POST['domain'] && !is_domain($_POST['domain']))) {
+ $input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
+ }
+ if ($_POST['tftp'] && !is_ipaddrv4($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
+ $input_errors[] = gettext("A valid IP address or hostname must be specified for the TFTP server.");
+ }
+ if (($_POST['nextserver'] && !is_ipaddrv4($_POST['nextserver']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the network boot server.");
+ }
+
+ if (gen_subnet($ifcfgip, $ifcfgsn) == $_POST['range_from']) {
+ $input_errors[] = gettext("You cannot use the network address in the starting subnet range.");
+ }
+ if (gen_subnet_max($ifcfgip, $ifcfgsn) == $_POST['range_to']) {
+ $input_errors[] = gettext("You cannot use the broadcast address in the ending subnet range.");
+ }
+
+ // Disallow a range that includes the virtualip
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if ($vip['interface'] == $if) {
+ if ($vip['subnet'] && is_inrange_v4($vip['subnet'], $_POST['range_from'], $_POST['range_to'])) {
+ $input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IP address %s."), $vip['subnet']);
+ }
+ }
+ }
+ }
+
+ $noip = false;
+ if (is_array($a_maps)) {
+ foreach ($a_maps as $map) {
+ if (empty($map['ipaddr'])) {
+ $noip = true;
+ }
+ }
+ }
+ if ($_POST['staticarp'] && $noip) {
+ $input_errors[] = "Cannot enable static ARP when you have static map entries without IP addresses. Ensure all static maps have IP addresses and try again.";
+ }
+
+ if (is_array($pconfig['numberoptions']['item'])) {
+ foreach ($pconfig['numberoptions']['item'] as $numberoption) {
+ if ($numberoption['type'] == 'text' && strstr($numberoption['value'], '"')) {
+ $input_errors[] = gettext("Text type cannot include quotation marks.");
+ } else if ($numberoption['type'] == 'string' && !preg_match('/^"[^"]*"$/', $numberoption['value']) && !preg_match('/^[0-9a-f]{2}(?:\:[0-9a-f]{2})*$/i', $numberoption['value'])) {
+ $input_errors[] = gettext("String type must be enclosed in quotes like \"this\" or must be a series of octets specified in hexadecimal, separated by colons, like 01:23:45:67:89:ab:cd:ef");
+ } else if ($numberoption['type'] == 'boolean' && $numberoption['value'] != 'true' && $numberoption['value'] != 'false' && $numberoption['value'] != 'on' && $numberoption['value'] != 'off') {
+ $input_errors[] = gettext("Boolean type must be true, false, on, or off.");
+ } else if ($numberoption['type'] == 'unsigned integer 8' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 255)) {
+ $input_errors[] = gettext("Unsigned 8-bit integer type must be a number in the range 0 to 255.");
+ } else if ($numberoption['type'] == 'unsigned integer 16' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 65535)) {
+ $input_errors[] = gettext("Unsigned 16-bit integer type must be a number in the range 0 to 65535.");
+ } else if ($numberoption['type'] == 'unsigned integer 32' && (!is_numeric($numberoption['value']) || $numberoption['value'] < 0 || $numberoption['value'] > 4294967295)) {
+ $input_errors[] = gettext("Unsigned 32-bit integer type must be a number in the range 0 to 4294967295.");
+ } else if ($numberoption['type'] == 'signed integer 8' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -128 || $numberoption['value'] > 127)) {
+ $input_errors[] = gettext("Signed 8-bit integer type must be a number in the range -128 to 127.");
+ } else if ($numberoption['type'] == 'signed integer 16' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -32768 || $numberoption['value'] > 32767)) {
+ $input_errors[] = gettext("Signed 16-bit integer type must be a number in the range -32768 to 32767.");
+ } else if ($numberoption['type'] == 'signed integer 32' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -2147483648 || $numberoption['value'] > 2147483647)) {
+ $input_errors[] = gettext("Signed 32-bit integer type must be a number in the range -2147483648 to 2147483647.");
+ } else if ($numberoption['type'] == 'ip-address' && !is_ipaddrv4($numberoption['value']) && !is_hostname($numberoption['value'])) {
+ $input_errors[] = gettext("IP address or host type must be an IP address or host name.");
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ /* make sure the range lies within the current subnet */
+ $subnet_start = ip2ulong(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
+ $subnet_end = ip2ulong(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
+
+ if ((ip2ulong($_POST['range_from']) < $subnet_start) || (ip2ulong($_POST['range_from']) > $subnet_end) ||
+ (ip2ulong($_POST['range_to']) < $subnet_start) || (ip2ulong($_POST['range_to']) > $subnet_end)) {
+ $input_errors[] = gettext("The specified range lies outside of the current subnet.");
+ }
+
+ if (ip2ulong($_POST['range_from']) > ip2ulong($_POST['range_to'])) {
+ $input_errors[] = gettext("The range is invalid (first element higher than second element).");
+ }
+
+ if (is_numeric($pool) || ($act == "newpool")) {
+ $rfrom = $config['dhcpd'][$if]['range']['from'];
+ $rto = $config['dhcpd'][$if]['range']['to'];
+
+ if (is_inrange_v4($_POST['range_from'], $rfrom, $rto) || is_inrange_v4($_POST['range_to'], $rfrom, $rto)) {
+ $input_errors[] = gettext("The specified range must not be within the DHCP range for this interface.");
+ }
+ }
+
+ foreach ($a_pools as $id => $p) {
+ if (is_numeric($pool) && ($id == $pool)) {
+ continue;
+ }
+
+ if (is_inrange_v4($_POST['range_from'], $p['range']['from'], $p['range']['to']) ||
+ is_inrange_v4($_POST['range_to'], $p['range']['from'], $p['range']['to'])) {
+ $input_errors[] = gettext("The specified range must not be within the range configured on a DHCP pool for this interface.");
+ break;
+ }
+ }
+
+ /* make sure that the DHCP Relay isn't enabled on this interface */
+ if (isset($config['dhcrelay']['enable']) && (stristr($config['dhcrelay']['interface'], $if) !== false)) {
+ $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."), $iflist[$if]);
+ }
+
+ $dynsubnet_start = ip2ulong($_POST['range_from']);
+ $dynsubnet_end = ip2ulong($_POST['range_to']);
+ if (is_array($a_maps)) {
+ foreach ($a_maps as $map) {
+ if (empty($map['ipaddr'])) {
+ continue;
+ }
+ if ((ip2ulong($map['ipaddr']) > $dynsubnet_start) &&
+ (ip2ulong($map['ipaddr']) < $dynsubnet_end)) {
+ $input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings."));
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ if (!is_numeric($pool)) {
+ if ($act == "newpool") {
+ $dhcpdconf = array();
+ } else {
+ if (!is_array($config['dhcpd'][$if])) {
+ $config['dhcpd'][$if] = array();
+ }
+ $dhcpdconf = $config['dhcpd'][$if];
+ }
+ } else {
+ if (is_array($a_pools[$pool])) {
+ $dhcpdconf = $a_pools[$pool];
+ } else {
+ // Someone specified a pool but it doesn't exist. Punt.
+ header("Location: services_dhcp.php");
+ exit;
+ }
+ }
+ if (!is_array($dhcpdconf['range'])) {
+ $dhcpdconf['range'] = array();
+ }
+
+ $dhcpd_enable_changed = false;
+
+ // Global Options
+ if (!is_numeric($pool) && !($act == "newpool")) {
+ $old_dhcpd_enable = isset($dhcpdconf['enable']);
+ $new_dhcpd_enable = ($_POST['enable']) ? true : false;
+ if ($old_dhcpd_enable != $new_dhcpd_enable) {
+ /* DHCP has been enabled or disabled. The pf ruleset will need to be rebuilt to allow or disallow DHCP. */
+ $dhcpd_enable_changed = true;
+ }
+ $dhcpdconf['enable'] = $new_dhcpd_enable;
+ $dhcpdconf['staticarp'] = ($_POST['staticarp']) ? true : false;
+ $previous = $dhcpdconf['failover_peerip'];
+ if ($previous <> $_POST['failover_peerip']) {
+ mwexec("/bin/rm -rf /var/dhcpd/var/db/*");
+ }
+ $dhcpdconf['failover_peerip'] = $_POST['failover_peerip'];
+ // dhcpleaseinlocaltime is global to all interfaces. So update the setting on all interfaces.
+ foreach ($config['dhcpd'] as &$dhcpdifitem) {
+ $dhcpdifitem['dhcpleaseinlocaltime'] = $_POST['dhcpleaseinlocaltime'];
+ }
+ } else {
+ // Options that exist only in pools
+ $dhcpdconf['descr'] = $_POST['descr'];
+ }
+
+ // Options that can be global or per-pool.
+ $dhcpdconf['range']['from'] = $_POST['range_from'];
+ $dhcpdconf['range']['to'] = $_POST['range_to'];
+ $dhcpdconf['defaultleasetime'] = $_POST['deftime'];
+ $dhcpdconf['maxleasetime'] = $_POST['maxtime'];
+ $dhcpdconf['netmask'] = $_POST['netmask'];
+
+ unset($dhcpdconf['winsserver']);
+ if ($_POST['wins1']) {
+ $dhcpdconf['winsserver'][] = $_POST['wins1'];
+ }
+ if ($_POST['wins2']) {
+ $dhcpdconf['winsserver'][] = $_POST['wins2'];
+ }
+
+ unset($dhcpdconf['dnsserver']);
+ if ($_POST['dns1']) {
+ $dhcpdconf['dnsserver'][] = $_POST['dns1'];
+ }
+ if ($_POST['dns2']) {
+ $dhcpdconf['dnsserver'][] = $_POST['dns2'];
+ }
+ if ($_POST['dns3']) {
+ $dhcpdconf['dnsserver'][] = $_POST['dns3'];
+ }
+ if ($_POST['dns4']) {
+ $dhcpdconf['dnsserver'][] = $_POST['dns4'];
+ }
+
+ $dhcpdconf['gateway'] = $_POST['gateway'];
+ $dhcpdconf['domain'] = $_POST['domain'];
+ $dhcpdconf['domainsearchlist'] = $_POST['domainsearchlist'];
+ $dhcpdconf['denyunknown'] = ($_POST['denyunknown']) ? true : false;
+ $dhcpdconf['ddnsdomain'] = $_POST['ddnsdomain'];
+ $dhcpdconf['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
+ $dhcpdconf['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
+ $dhcpdconf['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
+ $dhcpdconf['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
+ $dhcpdconf['mac_allow'] = $_POST['mac_allow'];
+ $dhcpdconf['mac_deny'] = $_POST['mac_deny'];
+
+ unset($dhcpdconf['ntpserver']);
+ if ($_POST['ntp1']) {
+ $dhcpdconf['ntpserver'][] = $_POST['ntp1'];
+ }
+ if ($_POST['ntp2']) {
+ $dhcpdconf['ntpserver'][] = $_POST['ntp2'];
+ }
+
+ $dhcpdconf['tftp'] = $_POST['tftp'];
+ $dhcpdconf['ldap'] = $_POST['ldap'];
+ $dhcpdconf['netboot'] = ($_POST['netboot']) ? true : false;
+ $dhcpdconf['nextserver'] = $_POST['nextserver'];
+ $dhcpdconf['filename'] = $_POST['filename'];
+ $dhcpdconf['filename32'] = $_POST['filename32'];
+ $dhcpdconf['filename64'] = $_POST['filename64'];
+ $dhcpdconf['rootpath'] = $_POST['rootpath'];
+
+ // Handle the custom options rowhelper
+ if (isset($dhcpdconf['numberoptions']['item'])) {
+ unset($dhcpdconf['numberoptions']['item']);
+ }
+
+ $dhcpdconf['numberoptions'] = $numberoptions;
+
+ if (is_numeric($pool) && is_array($a_pools[$pool])) {
+ $a_pools[$pool] = $dhcpdconf;
+ } elseif ($act == "newpool") {
+ $a_pools[] = $dhcpdconf;
+ } else {
+ $config['dhcpd'][$if] = $dhcpdconf;
+ }
+
+ write_config();
+ }
+}
+
+if ((isset($_POST['submit']) || isset($_POST['apply'])) && (!$input_errors)) {
+ $retval = 0;
+ $retvaldhcp = 0;
+ $retvaldns = 0;
+ /* dnsmasq_configure calls dhcpd_configure */
+ /* no need to restart dhcpd twice */
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
+ $retvaldns = services_dnsmasq_configure();
+ if ($retvaldns == 0) {
+ clear_subsystem_dirty('hosts');
+ clear_subsystem_dirty('staticmaps');
+ }
+ } else if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
+ $retvaldns = services_unbound_configure();
+ if ($retvaldns == 0) {
+ clear_subsystem_dirty('unbound');
+ clear_subsystem_dirty('hosts');
+ clear_subsystem_dirty('staticmaps');
+ }
+ } else {
+ $retvaldhcp = services_dhcpd_configure();
+ if ($retvaldhcp == 0) {
+ clear_subsystem_dirty('staticmaps');
+ }
+ }
+ if ($dhcpd_enable_changed) {
+ $retvalfc = filter_configure();
+ }
+
+ if ($retvaldhcp == 1 || $retvaldns == 1 || $retvalfc == 1) {
+ $retval = 1;
+ }
+ $savemsg = get_std_save_message($retval);
+}
+
+if ($act == "delpool") {
+ if ($a_pools[$_GET['id']]) {
+ unset($a_pools[$_GET['id']]);
+ write_config();
+ header("Location: services_dhcp.php?if={$if}");
+ exit;
+ }
+}
+
+if ($act == "del") {
+ if ($a_maps[$_GET['id']]) {
+ unset($a_maps[$_GET['id']]);
+ write_config();
+ if (isset($config['dhcpd'][$if]['enable'])) {
+ mark_subsystem_dirty('staticmaps');
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
+ mark_subsystem_dirty('hosts');
+ }
+ }
+ header("Location: services_dhcp.php?if={$if}");
+ exit;
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DHCP server"));
+$shortcut_section = "dhcp";
+
+include("head.inc");
+
+?>
+
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ function itemtype_field(fieldname, fieldsize, n) {
+ return '<select name="' + fieldname + n + '" class="formselect" id="' + fieldname + n + '"><?php
+ $customitemtypes = array('text' => gettext('Text'), 'string' => gettext('String'), 'boolean' => gettext('Boolean'),
+ 'unsigned integer 8' => gettext('Unsigned 8-bit integer'), 'unsigned integer 16' => gettext('Unsigned 16-bit integer'), 'unsigned integer 32' => gettext('Unsigned 32-bit integer'),
+ 'signed integer 8' => gettext('Signed 8-bit integer'), 'signed integer 16' => gettext('Signed 16-bit integer'), 'signed integer 32' => gettext('Signed 32-bit integer'), 'ip-address' => gettext('IP address or host'));
+ foreach ($customitemtypes as $typename => $typedescr) {
+ echo "<option value=\"{$typename}\">{$typedescr}<\/option>";
+ }
+ ?><\/select>';
+ }
+
+ rowname[0] = "number";
+ rowtype[0] = "textbox";
+ rowsize[0] = "10";
+ rowname[1] = "itemtype";
+ rowtype[1] = itemtype_field;
+ rowname[2] = "value";
+ rowtype[2] = "textbox";
+ rowsize[2] = "40";
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ function enable_change(enable_over) {
+ var endis;
+ <?php if (is_numeric($pool) || ($act == "newpool")): ?>
+ enable_over = true;
+ <?php endif; ?>
+ endis = !(document.iform.enable.checked || enable_over);
+ <?php if (is_numeric($pool) || ($act == "newpool")): ?>
+ document.iform.descr.disabled = endis;
+ <?php endif; ?>
+ document.iform.range_from.disabled = endis;
+ document.iform.range_to.disabled = endis;
+ document.iform.wins1.disabled = endis;
+ document.iform.wins2.disabled = endis;
+ document.iform.dns1.disabled = endis;
+ document.iform.dns2.disabled = endis;
+ document.iform.dns3.disabled = endis;
+ document.iform.dns4.disabled = endis;
+ document.iform.deftime.disabled = endis;
+ document.iform.maxtime.disabled = endis;
+ document.iform.gateway.disabled = endis;
+ document.iform.failover_peerip.disabled = endis;
+ document.iform.domain.disabled = endis;
+ document.iform.domainsearchlist.disabled = endis;
+ document.iform.staticarp.disabled = endis;
+ document.iform.dhcpleaseinlocaltime.disabled = endis;
+ document.iform.ddnsdomain.disabled = endis;
+ document.iform.ddnsdomainprimary.disabled = endis;
+ document.iform.ddnsdomainkeyname.disabled = endis;
+ document.iform.ddnsdomainkey.disabled = endis;
+ document.iform.ddnsupdate.disabled = endis;
+ document.iform.mac_allow.disabled = endis;
+ document.iform.mac_deny.disabled = endis;
+ document.iform.ntp1.disabled = endis;
+ document.iform.ntp2.disabled = endis;
+ document.iform.tftp.disabled = endis;
+ document.iform.ldap.disabled = endis;
+ document.iform.netboot.disabled = endis;
+ document.iform.nextserver.disabled = endis;
+ document.iform.filename.disabled = endis;
+ document.iform.filename32.disabled = endis;
+ document.iform.filename64.disabled = endis;
+ document.iform.rootpath.disabled = endis;
+ document.iform.denyunknown.disabled = endis;
+ }
+
+ function show_shownumbervalue() {
+ document.getElementById("shownumbervaluebox").innerHTML='';
+ aodiv = document.getElementById('shownumbervalue');
+ aodiv.style.display = "block";
+ }
+
+ function show_ddns_config() {
+ document.getElementById("showddnsbox").innerHTML='';
+ aodiv = document.getElementById('showddns');
+ aodiv.style.display = "block";
+ }
+
+ function show_maccontrol_config() {
+ document.getElementById("showmaccontrolbox").innerHTML='';
+ aodiv = document.getElementById('showmaccontrol');
+ aodiv.style.display = "block";
+ }
+
+ function show_ntp_config() {
+ document.getElementById("showntpbox").innerHTML='';
+ aodiv = document.getElementById('showntp');
+ aodiv.style.display = "block";
+ }
+
+ function show_tftp_config() {
+ document.getElementById("showtftpbox").innerHTML='';
+ aodiv = document.getElementById('showtftp');
+ aodiv.style.display = "block";
+ }
+
+ function show_ldap_config() {
+ document.getElementById("showldapbox").innerHTML='';
+ aodiv = document.getElementById('showldap');
+ aodiv.style.display = "block";
+ }
+
+ function show_netboot_config() {
+ document.getElementById("shownetbootbox").innerHTML='';
+ aodiv = document.getElementById('shownetboot');
+ aodiv.style.display = "block";
+ }
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dhcp.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php
+ if (isset($config['dhcrelay']['enable'])) {
+ echo gettext("DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.");
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+ }
+?>
+<?php if (is_subsystem_dirty('staticmaps')): ?><br/>
+<?php print_info_box_np(gettext("The static mapping configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp server">
+ <tr>
+ <td>
+<?php
+ /* active tabs */
+ $tab_array = array();
+ $tabscounter = 0;
+ $i = 0;
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
+ (!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr'])))) {
+ continue;
+ }
+ if ($ifent == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array($ifname, $active, "services_dhcp.php?if={$ifent}");
+ $tabscounter++;
+ }
+ if ($tabscounter == 0) {
+ echo "<b>" . gettext("The DHCP Server can only be enabled on interfaces configured with a static IPv4 address. This system has none.") . "<br/><br/>";
+ echo "</td></tr></table></form>";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <?php if (!is_numeric($pool) && !($act == "newpool")): ?>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?php printf(gettext("Enable DHCP server on %s interface"), htmlspecialchars($iflist[$if]));?></strong>
+ </td>
+ </tr>
+ <?php else: ?>
+ <tr>
+ <td colspan="2" class="listtopic"><?php echo gettext("Editing Pool-Specific Options. To return to the Interface, click its tab above."); ?></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="denyunknown" id="denyunknown" type="checkbox" value="yes" <?php if ($pconfig['denyunknown']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Deny unknown clients");?></strong><br />
+ <?=gettext("If this is checked, only the clients defined below will get DHCP leases from this server. ");?>
+ </td>
+ </tr>
+ <?php if (is_numeric($pool) || ($act == "newpool")): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Pool Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet");?></td>
+ <td width="78%" class="vtable">
+ <?=gen_subnet($ifcfgip, $ifcfgsn);?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet mask");?></td>
+ <td width="78%" class="vtable">
+ <?=gen_subnet_mask($ifcfgsn);?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Available range");?></td>
+ <td width="78%" class="vtable">
+ <?php
+ $range_from = ip2long(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
+ $range_from++;
+ echo long2ip32($range_from);
+ ?>
+ -
+ <?php
+ $range_to = ip2long(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
+ $range_to--;
+ echo long2ip32($range_to);
+ if (is_numeric($pool) || ($act == "newpool")):
+ ?>
+ <br />In-use DHCP Pool Ranges:
+ <?php
+ if (is_array($config['dhcpd'][$if]['range'])):
+ ?>
+ <br />
+ <?php
+ echo $config['dhcpd'][$if]['range']['from'];
+ ?>
+ -
+ <?php
+ echo $config['dhcpd'][$if]['range']['to'];
+ endif;
+ ?>
+ <?php
+ foreach ($a_pools as $p):
+ if (is_array($p['range'])):
+ ?>
+ <br />
+ <?php
+ echo $p['range']['from'];
+ ?>
+ -
+ <?php
+ echo $p['range']['to'];
+ endif;
+ endforeach;
+ endif;
+ ?>
+ </td>
+ </tr>
+<?php if ($is_olsr_enabled): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask");?></td>
+ <td width="78%" class="vtable">
+ <select name="netmask" class="formselect" id="netmask">
+ <?php
+ for ($i = 32; $i > 0; $i--) {
+ if ($i <> 31) {
+ echo "<option value=\"{$i}\" ";
+ if ($i == $pconfig['netmask']) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $i . "</option>";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Range");?></td>
+ <td width="78%" class="vtable">
+ <input name="range_from" type="text" class="formfld unknown" id="range_from" size="20" value="<?=htmlspecialchars($pconfig['range_from']);?>" />
+ &nbsp;<?=gettext("to"); ?>&nbsp; <input name="range_to" type="text" class="formfld unknown" id="range_to" size="20" value="<?=htmlspecialchars($pconfig['range_to']);?>" />
+ </td>
+ </tr>
+<?php
+ if (!is_numeric($pool) && !($act == "newpool")):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">
+ <?=gettext("Additional Pools");?>
+ </td>
+ <td width="78%" class="vtable">
+ <?php echo gettext("If you need additional pools of addresses inside of this subnet outside the above Range, they may be specified here."); ?>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="subnet">
+ <tr>
+ <td width="35%" class="listhdrr"><?=gettext("Pool Start");?></td>
+ <td width="35%" class="listhdrr"><?=gettext("Pool End");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="pool">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle">
+ <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=newpool"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="plus" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_pools)):
+ $i = 0;
+ foreach ($a_pools as $poolent):
+ if (!empty($poolent['range']['from']) && !empty($poolent['range']['to'])):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
+ <?=htmlspecialchars($poolent['range']['from']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
+ <?=htmlspecialchars($poolent['range']['to']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>';">
+ <?=htmlspecialchars($poolent['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle">
+ <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;pool=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ <td valign="middle">
+ <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=delpool&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this pool?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle">
+ <a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=newpool"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="wins1" type="text" class="formfld unknown" id="wins1" size="20" value="<?=htmlspecialchars($pconfig['wins1']);?>" /><br />
+ <input name="wins2" type="text" class="formfld unknown" id="wins2" size="20" value="<?=htmlspecialchars($pconfig['wins2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="dns1" type="text" class="formfld unknown" id="dns1" size="20" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
+ <input name="dns2" type="text" class="formfld unknown" id="dns2" size="20" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
+ <input name="dns3" type="text" class="formfld unknown" id="dns3" size="20" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
+ <input name="dns4" type="text" class="formfld unknown" id="dns4" size="20" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
+ <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
+ <td width="78%" class="vtable">
+ <input name="gateway" type="text" class="formfld host" id="gateway" size="20" value="<?=htmlspecialchars($pconfig['gateway']);?>" /><br />
+ <?=gettext("The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network. Type \"none\" for no gateway assignment.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
+ <td width="78%" class="vtable">
+ <input name="domain" type="text" class="formfld unknown" id="domain" size="20" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
+ <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
+ <td width="78%" class="vtable">
+ <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="20" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
+ <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator ");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 7200 seconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 86400 seconds.");?>
+ </td>
+ </tr>
+<?php
+ if (!is_numeric($pool) && !($act == "newpool")):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Failover peer IP:");?></td>
+ <td width="78%" class="vtable">
+ <input name="failover_peerip" type="text" class="formfld host" id="failover_peerip" size="20" value="<?=htmlspecialchars($pconfig['failover_peerip']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP. Interface's advskew determines whether the DHCPd process is Primary or Secondary. Ensure one machine's advskew<20 (and the other is >20).");?>
+ </td>
+ </tr>
+<?php
+ endif;
+
+ if (!is_numeric($pool) && !($act == "newpool")):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Static ARP");?></td>
+ <td width="78%" class="vtable">
+ <table summary="static arp">
+ <tr>
+ <td>
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="staticarp" id="staticarp" <?php if ($pconfig['staticarp']) echo " checked=\"checked\""; ?> />&nbsp;
+ </td>
+ <td><b><?=gettext("Enable Static ARP entries");?></b></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="red">
+ <strong><?=gettext("Note:");?></strong>
+ </span>
+ <?=gettext("This option persists even if DHCP server is disabled. Only the machines listed below will be able to communicate with the firewall on this NIC.");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+
+ if (!is_numeric($pool) && !($act == "newpool")): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Time format change"); ?></td>
+ <td width="78%" class="vtable">
+ <table summary="time format">
+ <tr>
+ <td>
+ <input name="dhcpleaseinlocaltime" type="checkbox" id="dhcpleaseinlocaltime" value="yes" <?php if ($pconfig['dhcpleaseinlocaltime']) echo "checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Change DHCP display lease time from UTC to local time."); ?>
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="red">
+ <strong><?=gettext("Note:");?></strong>
+ </span>
+ <?=gettext("By default DHCP leases are displayed in UTC time. By checking this box DHCP lease time will be displayed in local time and set to time zone selected. This will be used for all DHCP interfaces lease time."); ?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
+ <td width="78%" class="vtable">
+ <div id="showddnsbox" <?php if ($pconfig['ddnsupdate'] || !empty($pconfig['ddnsdomain']) || !empty($pconfig['ddnsdomainprimary']) || !empty($pconfig['ddnsdomainkeyname']) || !empty($pconfig['ddnsdomainkey'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
+ </div>
+ <div id="showddns" <?php if (!$pconfig['ddnsupdate'] && empty($pconfig['ddnsdomain']) && empty($pconfig['ddnsdomainprimary']) && empty($pconfig['ddnsdomainkeyname']) && empty($pconfig['ddnsdomainkey'])) echo "style='display:none'"; ?>>
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo " checked=\"checked\""; ?> />&nbsp;
+ <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
+ <br/>
+ <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
+ <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
+ <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
+ <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
+ <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("MAC Address Control");?></td>
+ <td width="78%" class="vtable">
+ <div id="showmaccontrolbox" <?php if (!empty($pconfig['mac_allow']) || !empty($pconfig['mac_deny'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_maccontrol_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show MAC Address Control");?>
+ </div>
+ <div id="showmaccontrol" <?php if (empty($pconfig['mac_allow']) && empty($pconfig['mac_deny'])) echo "style='display:none'"; ?>>
+ <input name="mac_allow" type="text" class="formfld unknown" id="mac_allow" size="20" value="<?=htmlspecialchars($pconfig['mac_allow']);?>" /><br />
+ <?=gettext("Enter a list of partial MAC addresses to allow, comma separated, no spaces, such as ");?>00:00:00,01:E5:FF<br />
+ <input name="mac_deny" type="text" class="formfld unknown" id="mac_deny" size="20" value="<?=htmlspecialchars($pconfig['mac_deny']);?>" /><br />
+ <?=gettext("Enter a list of partial MAC addresses to deny access, comma separated, no spaces, such as ");?>00:00:00,01:E5:FF
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
+ <td width="78%" class="vtable">
+ <div id="showntpbox" <?php if (!empty($pconfig['ntp1']) || !empty($pconfig['ntp2'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
+ </div>
+ <div id="showntp" <?php if (empty($pconfig['ntp1']) && empty($pconfig['ntp2'])) echo "style='display:none'"; ?>>
+ <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="20" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
+ <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="20" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
+ <td width="78%" class="vtable">
+ <div id="showtftpbox" <?php if (!empty($pconfig['tftp'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
+ </div>
+ <div id="showtftp" <?php if (empty($pconfig['tftp'])) echo "style='display:none'"; ?>>
+ <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("LDAP URI");?></td>
+ <td width="78%" class="vtable">
+ <div id="showldapbox" <?php if (!empty($pconfig['ldap'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_ldap_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show LDAP configuration");?>
+ </div>
+ <div id="showldap" <?php if (empty($pconfig['ldap'])) echo "style='display:none'"; ?>>
+ <input name="ldap" type="text" class="formfld unknown" id="ldap" size="80" value="<?=htmlspecialchars($pconfig['ldap']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable network booting");?></td>
+ <td width="78%" class="vtable">
+ <div id="shownetbootbox" <?php if ($pconfig['netboot'] || !empty($pconfig['nextserver']) || !empty($pconfig['filename']) || !empty($pconfig['filename32']) || !empty($pconfig['filename64']) || !empty($pconfig['rootpath'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_netboot_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Network booting");?>
+ </div>
+ <div id="shownetboot" <?php if (!$pconfig['netboot'] && empty($pconfig['nextserver']) && empty($pconfig['filename']) && empty($pconfig['filename32']) && empty($pconfig['filename64']) && empty($pconfig['rootpath'])) echo "style='display:none'"; ?>>
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="netboot" id="netboot" <?php if ($pconfig['netboot']) echo " checked=\"checked\""; ?> />&nbsp;
+ <b><?=gettext("Enables network booting.");?></b>
+ <br/>
+ <table border="0" cellspacing="0" cellpadding="2" summary="network booting">
+ <tr>
+ <td>
+ <?=gettext("Enter the IP of the"); ?> <b><?=gettext("next-server"); ?></b>
+ </td>
+ <td>
+ <input name="nextserver" type="text" class="formfld unknown" id="nextserver" size="20" value="<?=htmlspecialchars($pconfig['nextserver']);?>" /><br />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("and the default bios filename");?>
+ </td>
+ <td>
+ <input name="filename" type="text" class="formfld unknown" id="filename" size="20" value="<?=htmlspecialchars($pconfig['filename']);?>" /><br />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("and the UEFI 32bit filename ");?>
+ </td>
+ <td>
+ <input name="filename32" type="text" class="formfld unknown" id="filename32" size="20" value="<?=htmlspecialchars($pconfig['filename32']);?>" /><br />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("and the UEFI 64bit filename ");?>
+ </td>
+ <td>
+ <input name="filename64" type="text" class="formfld unknown" id="filename64" size="20" value="<?=htmlspecialchars($pconfig['filename64']);?>" /><br />
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Note: You need both a filename and a boot server configured for this to work!");?>
+ <?=gettext("You will need all three filenames and a boot server configured for UEFI to work!");?>
+ <?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>
+ <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" /><br />
+ <?=gettext("Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname");?>
+ </div>
+ </td>
+ </tr>
+<?php
+ if (!is_numeric($pool) && !($act == "newpool")):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Additional BOOTP/DHCP Options");?></td>
+ <td width="78%" class="vtable">
+ <div id="shownumbervaluebox" <?php if (!empty($pconfig['numberoptions'])) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_shownumbervalue()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Additional BOOTP/DHCP Options");?>
+ </div>
+ <div id="shownumbervalue" <?php if (empty($pconfig['numberoptions'])) echo "style='display:none'"; ?>>
+ <table id="maintable" summary="bootp-dhcp options">
+ <tbody>
+ <tr>
+ <td colspan="3">
+ <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
+ <?=gettext("Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"); ?> <a href="http://www.iana.org/assignments/bootp-dhcp-parameters/" target="_blank"><?=gettext("URL"); ?></a>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Number");?></div></td>
+ <td><div id="twocolumn"><?=gettext("Type");?></div></td>
+ <td><div id="threecolumn"><?=gettext("Value");?></div></td>
+ </tr>
+<?php
+ $counter = 0;
+ if ($pconfig['numberoptions']):
+ foreach ($pconfig['numberoptions']['item'] as $item):
+ $number = $item['number'];
+ $itemtype = $item['type'];
+ $value = $item['value'];
+?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld unknown" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
+ </td>
+ <td>
+ <select name="itemtype<?php echo $counter; ?>" class="formselect" id="itemtype<?php echo $counter; ?>">
+<?php
+ foreach ($customitemtypes as $typename => $typedescr) {
+ echo "<option value=\"{$typename}\" ";
+ if ($itemtype == $typename) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . $typedescr . "</option>";
+ }
+?>
+ </select>
+ </td>
+ <td>
+ <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld unknown" id="value<?php echo $counter; ?>" size="40" value="<?=htmlspecialchars($value);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+ endforeach;
+ endif; // numberoptions
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+ </div>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php if ($act == "newpool"): ?>
+ <input type="hidden" name="act" value="newpool" />
+ <?php endif; ?>
+ <?php if (is_numeric($pool)): ?>
+ <input type="hidden" name="pool" value="<?php echo $pool; ?>" />
+ <?php endif; ?>
+ <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <p>
+ <span class="vexpl">
+ <span class="red"><strong><?=gettext("Note:");?>
+ <br />
+ </strong>
+ </span>
+ <?=gettext("The DNS servers entered in"); ?>
+ <a href="system.php"><?=gettext("System: General setup"); ?></a>
+ <?=gettext("(or the"); ?> <a href="services_dnsmasq.php"><?=gettext("DNS forwarder"); ?></a>, <?=gettext("if enabled)"); ?>
+ </span>
+ <span class="vexpl">
+ <?=gettext("will be assigned to clients by the DHCP server."); ?>
+ <br />
+ <br />
+ <?=gettext("The DHCP lease table can be viewed on the"); ?>
+ <a href="status_dhcp_leases.php"><?=gettext("Status: DHCP leases"); ?></a>
+ <?=gettext("page."); ?>
+ <br />
+ </span>
+ </p>
+ </td>
+ </tr>
+ </table>
+<?php
+ if (!is_numeric($pool) && !($act == "newpool")):
+?>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="static mappings">
+ <tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("DHCP Static Mappings for this interface.");?></td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="7%" class="listhdrr"><?=gettext("Static ARP");?></td>
+ <td width="18%" class="listhdrr"><?=gettext("MAC address");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("IP address");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle">
+ <a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_maps)):
+ $i = 0;
+ foreach ($a_maps as $mapent):
+?>
+ <tr>
+ <td align="center" class="listlr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
+ <?php if (isset($mapent['arp_table_static_entry'])): ?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_alert.gif" alt="ARP Table Static Entry" width="17" height="17" border="0" alt="alert" />
+ <?php endif; ?>
+ </td>
+ <td class="listlr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['mac']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['ipaddr']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['hostname']);?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td valign="middle"><a href="services_dhcp.php?if=<?=htmlspecialchars($if);?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="5"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle"><a href="services_dhcp_edit.php?if=<?=htmlspecialchars($if);?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+<?php
+ endif;
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcp_edit.php b/src/usr/local/www/services_dhcp_edit.php
new file mode 100644
index 0000000..1fc947b
--- /dev/null
+++ b/src/usr/local/www/services_dhcp_edit.php
@@ -0,0 +1,625 @@
+<?php
+/* $Id$ */
+/*
+ services_dhcp_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/arp
+ pfSense_MODULE: dhcpserver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcpserver-editstaticmapping
+##|*NAME=Services: DHCP Server : Edit static mapping page
+##|*DESCR=Allow access to the 'Services: DHCP Server : Edit static mapping' page.
+##|*MATCH=services_dhcp_edit.php*
+##|-PRIV
+
+function staticmapcmp($a, $b) {
+ return ipcmp($a['ipaddr'], $b['ipaddr']);
+}
+
+function staticmaps_sort($ifgui) {
+ global $g, $config;
+
+ usort($config['dhcpd'][$ifgui]['staticmap'], "staticmapcmp");
+}
+
+require_once('globals.inc');
+
+if (!$g['services_dhcp_server_enable']) {
+ header("Location: /");
+ exit;
+}
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dhcp.php');
+}
+
+$if = $_GET['if'];
+if ($_POST['if']) {
+ $if = $_POST['if'];
+}
+
+if (!$if) {
+ header("Location: services_dhcp.php");
+ exit;
+}
+
+if (!is_array($config['dhcpd'])) {
+ $config['dhcpd'] = array();
+}
+if (!is_array($config['dhcpd'][$if])) {
+ $config['dhcpd'][$if] = array();
+}
+if (!is_array($config['dhcpd'][$if]['staticmap'])) {
+ $config['dhcpd'][$if]['staticmap'] = array();
+}
+
+if (!is_array($config['dhcpd'][$if]['pool'])) {
+ $config['dhcpd'][$if]['pool'] = array();
+}
+$a_pools = &$config['dhcpd'][$if]['pool'];
+
+$static_arp_enabled=isset($config['dhcpd'][$if]['staticarp']);
+$netboot_enabled=isset($config['dhcpd'][$if]['netboot']);
+$a_maps = &$config['dhcpd'][$if]['staticmap'];
+$ifcfgip = get_interface_ip($if);
+$ifcfgsn = get_interface_subnet($if);
+$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if);
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_maps[$id]) {
+ $pconfig['mac'] = $a_maps[$id]['mac'];
+ $pconfig['cid'] = $a_maps[$id]['cid'];
+ $pconfig['hostname'] = $a_maps[$id]['hostname'];
+ $pconfig['ipaddr'] = $a_maps[$id]['ipaddr'];
+ $pconfig['filename'] = $a_maps[$id]['filename'];
+ $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
+ $pconfig['descr'] = $a_maps[$id]['descr'];
+ $pconfig['arp_table_static_entry'] = isset($a_maps[$id]['arp_table_static_entry']);
+ $pconfig['deftime'] = $a_maps[$id]['defaultleasetime'];
+ $pconfig['maxtime'] = $a_maps[$id]['maxleasetime'];
+ $pconfig['gateway'] = $a_maps[$id]['gateway'];
+ $pconfig['domain'] = $a_maps[$id]['domain'];
+ $pconfig['domainsearchlist'] = $a_maps[$id]['domainsearchlist'];
+ list($pconfig['wins1'], $pconfig['wins2']) = $a_maps[$id]['winsserver'];
+ list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $a_maps[$id]['dnsserver'];
+ $pconfig['ddnsdomain'] = $a_maps[$id]['ddnsdomain'];
+ $pconfig['ddnsdomainprimary'] = $a_maps[$id]['ddnsdomainprimary'];
+ $pconfig['ddnsdomainkeyname'] = $a_maps[$id]['ddnsdomainkeyname'];
+ $pconfig['ddnsdomainkey'] = $a_maps[$id]['ddnsdomainkey'];
+ $pconfig['ddnsupdate'] = isset($a_maps[$id]['ddnsupdate']);
+ list($pconfig['ntp1'], $pconfig['ntp2']) = $a_maps[$id]['ntpserver'];
+ $pconfig['tftp'] = $a_maps[$id]['tftp'];
+} else {
+ $pconfig['mac'] = $_GET['mac'];
+ $pconfig['cid'] = $_GET['cid'];
+ $pconfig['hostname'] = $_GET['hostname'];
+ $pconfig['filename'] = $_GET['filename'];
+ $pconfig['rootpath'] = $_GET['rootpath'];
+ $pconfig['descr'] = $_GET['descr'];
+ $pconfig['arp_table_static_entry'] = $_GET['arp_table_static_entry'];
+ $pconfig['deftime'] = $_GET['defaultleasetime'];
+ $pconfig['maxtime'] = $_GET['maxleasetime'];
+ $pconfig['gateway'] = $_GET['gateway'];
+ $pconfig['domain'] = $_GET['domain'];
+ $pconfig['domainsearchlist'] = $_GET['domainsearchlist'];
+ $pconfig['wins1'] = $_GET['wins1'];
+ $pconfig['wins2'] = $_GET['wins2'];
+ $pconfig['dns1'] = $_GET['dns1'];
+ $pconfig['dns2'] = $_GET['dns2'];
+ $pconfig['dns3'] = $_GET['dns3'];
+ $pconfig['dns4'] = $_GET['dns4'];
+ $pconfig['ddnsdomain'] = $_GET['ddnsdomain'];
+ $pconfig['ddnsdomainprimary'] = $_GET['ddnsdomainprimary'];
+ $pconfig['ddnsdomainkeyname'] = $_GET['ddnsdomainkeyname'];
+ $pconfig['ddnsdomainkey'] = $_GET['ddnsdomainkey'];
+ $pconfig['ddnsupdate'] = isset($_GET['ddnsupdate']);
+ $pconfig['ntp1'] = $_GET['ntp1'];
+ $pconfig['ntp2'] = $_GET['ntp2'];
+ $pconfig['tftp'] = $_GET['tftp'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = array();
+ $reqdfieldsn = array();
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* either MAC or Client-ID must be specified */
+ if (empty($_POST['mac']) && empty($_POST['cid'])) {
+ $input_errors[] = gettext("Either MAC address or Client identifier must be specified");
+ }
+
+ /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
+ $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
+
+ if ($_POST['hostname']) {
+ preg_match("/\-\$/", $_POST['hostname'], $matches);
+ if ($matches) {
+ $input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952");
+ }
+ if (!is_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
+ } else {
+ if (!is_unqualified_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+ if (($_POST['ipaddr'] && !is_ipaddr($_POST['ipaddr']))) {
+ $input_errors[] = gettext("A valid IP address must be specified.");
+ }
+ if (($_POST['mac'] && !is_macaddr($_POST['mac']))) {
+ $input_errors[] = gettext("A valid MAC address must be specified.");
+ }
+ if ($static_arp_enabled && !$_POST['ipaddr']) {
+ $input_errors[] = gettext("Static ARP is enabled. You must specify an IP address.");
+ }
+
+ /* check for overlaps */
+ foreach ($a_maps as $mapent) {
+ if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent)) {
+ continue;
+ }
+ /* The fully qualified hostname (hostname + '.' + domainname) must be unique.
+ * The unqualified hostname does not have to be unique as long as the fully
+ * qualified hostname is unique. */
+ $existingFqn = "{$mapent['hostname']}.{$mapent['domain']}";
+ $candidateFqn = "{$_POST['hostname']}.{$_POST['domain']}";
+ if ((($existingFqn == $candidateFqn) && $mapent['hostname']) ||
+ (($mapent['mac'] == $_POST['mac']) && $mapent['mac']) ||
+ (($mapent['ipaddr'] == $_POST['ipaddr']) && $mapent['ipaddr']) ||
+ (($mapent['cid'] == $_POST['cid']) && $mapent['cid'])) {
+ $input_errors[] = gettext("This fully qualified hostname (Hostname + Domainname), IP, MAC address or Client identifier already exists.");
+ break;
+ }
+ }
+
+ /* make sure it's not within the dynamic subnet */
+ if ($_POST['ipaddr']) {
+ $dynsubnet_start = ip2ulong($config['dhcpd'][$if]['range']['from']);
+ $dynsubnet_end = ip2ulong($config['dhcpd'][$if]['range']['to']);
+ if ((ip2ulong($_POST['ipaddr']) >= $dynsubnet_start) &&
+ (ip2ulong($_POST['ipaddr']) <= $dynsubnet_end)) {
+ $input_errors[] = sprintf(gettext("The IP address must not be within the DHCP range for this interface."));
+ }
+
+ foreach ($a_pools as $pidx => $p) {
+ if (is_inrange_v4($_POST['ipaddr'], $p['range']['from'], $p['range']['to'])) {
+ $input_errors[] = gettext("The IP address must not be within the range configured on a DHCP pool for this interface.");
+ break;
+ }
+ }
+
+ $lansubnet_start = ip2ulong(long2ip32(ip2long($ifcfgip) & gen_subnet_mask_long($ifcfgsn)));
+ $lansubnet_end = ip2ulong(long2ip32(ip2long($ifcfgip) | (~gen_subnet_mask_long($ifcfgsn))));
+ if ((ip2ulong($_POST['ipaddr']) < $lansubnet_start) ||
+ (ip2ulong($_POST['ipaddr']) > $lansubnet_end)) {
+ $input_errors[] = sprintf(gettext("The IP address must lie in the %s subnet."), $ifcfgdescr);
+ }
+ }
+
+ if (($_POST['gateway'] && !is_ipaddrv4($_POST['gateway']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the gateway.");
+ }
+ if (($_POST['wins1'] && !is_ipaddrv4($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddrv4($_POST['wins2']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary WINS servers.");
+ }
+
+ $parent_ip = get_interface_ip($POST['if']);
+ if (is_ipaddrv4($parent_ip) && $_POST['gateway']) {
+ $parent_sn = get_interface_subnet($_POST['if']);
+ if (!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway'])) {
+ $input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
+ }
+ }
+ if (($_POST['dns1'] && !is_ipaddrv4($_POST['dns1'])) ||
+ ($_POST['dns2'] && !is_ipaddrv4($_POST['dns2'])) ||
+ ($_POST['dns3'] && !is_ipaddrv4($_POST['dns3'])) ||
+ ($_POST['dns4'] && !is_ipaddrv4($_POST['dns4']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for each of the DNS servers.");
+ }
+
+ if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
+ $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
+ }
+ if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
+ $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
+ }
+ if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
+ $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
+ }
+ if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
+ $input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name.");
+ }
+ if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
+ ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
+ $input_errors[] = gettext("You must specify both a valid domain key and key name.");
+ }
+ if ($_POST['domainsearchlist']) {
+ $domain_array=preg_split("/[ ;]+/", $_POST['domainsearchlist']);
+ foreach ($domain_array as $curdomain) {
+ if (!is_domain($curdomain)) {
+ $input_errors[] = gettext("A valid domain search list must be specified.");
+ break;
+ }
+ }
+ }
+
+ if (($_POST['ntp1'] && !is_ipaddrv4($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv4($_POST['ntp2']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the primary/secondary NTP servers.");
+ }
+ if ($_POST['tftp'] && !is_ipaddrv4($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
+ $input_errors[] = gettext("A valid IP address or hostname must be specified for the TFTP server.");
+ }
+ if (($_POST['nextserver'] && !is_ipaddrv4($_POST['nextserver']))) {
+ $input_errors[] = gettext("A valid IP address must be specified for the network boot server.");
+ }
+
+ if (!$input_errors) {
+ $mapent = array();
+ $mapent['mac'] = $_POST['mac'];
+ $mapent['cid'] = $_POST['cid'];
+ $mapent['ipaddr'] = $_POST['ipaddr'];
+ $mapent['hostname'] = $_POST['hostname'];
+ $mapent['descr'] = $_POST['descr'];
+ $mapent['arp_table_static_entry'] = ($_POST['arp_table_static_entry']) ? true : false;
+ $mapent['filename'] = $_POST['filename'];
+ $mapent['rootpath'] = $_POST['rootpath'];
+ $mapent['defaultleasetime'] = $_POST['deftime'];
+ $mapent['maxleasetime'] = $_POST['maxtime'];
+
+ unset($mapent['winsserver']);
+ if ($_POST['wins1']) {
+ $mapent['winsserver'][] = $_POST['wins1'];
+ }
+ if ($_POST['wins2']) {
+ $mapent['winsserver'][] = $_POST['wins2'];
+ }
+
+ unset($mapent['dnsserver']);
+ if ($_POST['dns1']) {
+ $mapent['dnsserver'][] = $_POST['dns1'];
+ }
+ if ($_POST['dns2']) {
+ $mapent['dnsserver'][] = $_POST['dns2'];
+ }
+ if ($_POST['dns3']) {
+ $mapent['dnsserver'][] = $_POST['dns3'];
+ }
+ if ($_POST['dns4']) {
+ $mapent['dnsserver'][] = $_POST['dns4'];
+ }
+
+ $mapent['gateway'] = $_POST['gateway'];
+ $mapent['domain'] = $_POST['domain'];
+ $mapent['domainsearchlist'] = $_POST['domainsearchlist'];
+ $mapent['ddnsdomain'] = $_POST['ddnsdomain'];
+ $mapent['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
+ $mapent['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
+ $mapent['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
+ $mapent['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
+
+ unset($mapent['ntpserver']);
+ if ($_POST['ntp1']) {
+ $mapent['ntpserver'][] = $_POST['ntp1'];
+ }
+ if ($_POST['ntp2']) {
+ $mapent['ntpserver'][] = $_POST['ntp2'];
+ }
+
+ $mapent['tftp'] = $_POST['tftp'];
+ $mapent['ldap'] = $_POST['ldap'];
+
+ if (isset($id) && $a_maps[$id]) {
+ $a_maps[$id] = $mapent;
+ } else {
+ $a_maps[] = $mapent;
+ }
+ staticmaps_sort($if);
+
+ write_config();
+
+ if (isset($config['dhcpd'][$if]['enable'])) {
+ mark_subsystem_dirty('staticmaps');
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
+ mark_subsystem_dirty('hosts');
+ }
+ if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
+ mark_subsystem_dirty('unbound');
+ }
+ }
+
+ header("Location: services_dhcp.php?if={$if}");
+ exit;
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DHCP"), gettext("Edit static mapping"));
+$shortcut_section = "dhcp";
+
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+ function show_ddns_config() {
+ document.getElementById("showddnsbox").innerHTML='';
+ aodiv = document.getElementById('showddns');
+ aodiv.style.display = "block";
+ }
+
+ function show_ntp_config() {
+ document.getElementById("showntpbox").innerHTML='';
+ aodiv = document.getElementById('showntp');
+ aodiv.style.display = "block";
+ }
+
+ function show_tftp_config() {
+ document.getElementById("showtftpbox").innerHTML='';
+ aodiv = document.getElementById('showtftp');
+ aodiv.style.display = "block";
+ }
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_dhcp_edit.php" method="post" name="iform" id="iform">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="static mapping">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=sprintf(gettext("Static DHCP Mapping on %s"), $ifcfgdescr);?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("MAC address");?></td>
+ <td width="78%" class="vtable">
+ <input name="mac" type="text" class="formfld unknown" id="mac" size="30" value="<?=htmlspecialchars($pconfig['mac']);?>" />
+ <?php
+ $ip = getenv('REMOTE_ADDR');
+ $mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
+ $mac = str_replace("\n", "", $mac);
+ ?>
+ <a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Client identifier");?></td>
+ <td width="78%" class="vtable">
+ <input name="cid" type="text" class="formfld unknown" id="cid" size="30" value="<?=htmlspecialchars($pconfig['cid']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>" />
+ <br />
+ <?=gettext("If an IPv4 address is entered, the address must be outside of the pool.");?>
+ <br />
+ <?=gettext("If no IPv4 address is given, one will be dynamically allocated from the pool.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hostname");?></td>
+ <td width="78%" class="vtable">
+ <input name="hostname" type="text" class="formfld unknown" id="hostname" size="20" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Name of the host, without domain part.");?>
+ </span>
+ </td>
+ </tr>
+<?php
+ if ($netboot_enabled) {
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Netboot Filename</td>
+ <td width="78%" class="vtable">
+ <input name="filename" type="text" class="formfld unknown" id="filename" size="20" value="<?=htmlspecialchars($pconfig['filename']);?>" />
+ <br />
+ <span class="vexpl">Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Root Path</td>
+ <td width="78%" class="vtable">
+ <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>, overrides setting on main page.
+ </span>
+ </td>
+ </tr>
+<?php
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("ARP Table Static Entry");?></td>
+ <td width="78%" class="vtable">
+ <input name="arp_table_static_entry" id="arp_table_static_entry" type="checkbox" value="yes" <?php if ($pconfig['arp_table_static_entry']) echo "checked=\"checked\""; ?> />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Create an ARP Table Static Entry for this MAC &amp; IP Address pair. ");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="wins1" type="text" class="formfld unknown" id="wins1" size="20" value="<?=htmlspecialchars($pconfig['wins1']);?>" /><br />
+ <input name="wins2" type="text" class="formfld unknown" id="wins2" size="20" value="<?=htmlspecialchars($pconfig['wins2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="dns1" type="text" class="formfld unknown" id="dns1" size="20" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
+ <input name="dns2" type="text" class="formfld unknown" id="dns2" size="20" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
+ <input name="dns3" type="text" class="formfld unknown" id="dns3" size="20" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
+ <input name="dns4" type="text" class="formfld unknown" id="dns4" size="20" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
+ <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
+ <td width="78%" class="vtable">
+ <input name="gateway" type="text" class="formfld host" id="gateway" size="20" value="<?=htmlspecialchars($pconfig['gateway']);?>" /><br />
+ <?=gettext("The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
+ <td width="78%" class="vtable">
+ <input name="domain" type="text" class="formfld unknown" id="domain" size="20" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
+ <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
+ <td width="78%" class="vtable">
+ <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="20" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
+ <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator ");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 7200 seconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 86400 seconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
+ <td width="78%" class="vtable">
+ <div id="showddnsbox">
+ <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
+ </div>
+ <div id="showddns" style="display:none">
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo "checked=\"checked\""; ?> />&nbsp;
+ <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
+ <p>
+ <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
+ <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
+ <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
+ <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
+ <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
+ </p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
+ <td width="78%" class="vtable">
+ <div id="showntpbox">
+ <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
+ </div>
+ <div id="showntp" style="display:none">
+ <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="20" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
+ <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="20" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
+ <td width="78%" class="vtable">
+ <div id="showtftpbox">
+ <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
+ </div>
+ <div id="showtftp" style="display:none">
+ <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_maps[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcp_relay.php b/src/usr/local/www/services_dhcp_relay.php
new file mode 100644
index 0000000..ae69c3a
--- /dev/null
+++ b/src/usr/local/www/services_dhcp_relay.php
@@ -0,0 +1,216 @@
+<?php
+/*
+ services_dhcp_relay.php
+
+ Copyright (C) 2003-2004 Justin Ellison <justin@techadvise.com>.
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dhcprelay
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcprelay
+##|*NAME=Services: DHCP Relay page
+##|*DESCR=Allow access to the 'Services: DHCP Relay' page.
+##|*MATCH=services_dhcp_relay.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pconfig['enable'] = isset($config['dhcrelay']['enable']);
+if (empty($config['dhcrelay']['interface'])) {
+ $pconfig['interface'] = array();
+} else {
+ $pconfig['interface'] = explode(",", $config['dhcrelay']['interface']);
+}
+$pconfig['server'] = $config['dhcrelay']['server'];
+$pconfig['agentoption'] = isset($config['dhcrelay']['agentoption']);
+
+$iflist = get_configured_interface_with_descr();
+
+/* set the enabled flag which will tell us if DHCP server is enabled
+ * on any interface. We will use this to disable dhcp-relay since
+ * the two are not compatible with each other.
+ */
+$dhcpd_enabled = false;
+if (is_array($config['dhcpd'])) {
+ foreach ($config['dhcpd'] as $dhcpif => $dhcp) {
+ if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) {
+ $dhcpd_enabled = true;
+ break;
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable']) {
+ $reqdfields = explode(" ", "server interface");
+ $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['server']) {
+ $checksrv = explode(",", $_POST['server']);
+ foreach ($checksrv as $srv) {
+ if (!is_ipaddr($srv)) {
+ $input_errors[] = gettext("A valid Destination Server IP address must be specified.");
+ }
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $config['dhcrelay']['enable'] = $_POST['enable'] ? true : false;
+ $config['dhcrelay']['interface'] = implode(",", $_POST['interface']);
+ $config['dhcrelay']['agentoption'] = $_POST['agentoption'] ? true : false;
+ $config['dhcrelay']['server'] = $_POST['server'];
+
+ write_config();
+
+ $retval = 0;
+ $retval = services_dhcrelay_configure();
+ $savemsg = get_std_save_message($retval);
+
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DHCP Relay"));
+$shortcut_section = "dhcp";
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_over) {
+ if (document.iform.enable.checked || enable_over) {
+ document.iform.server.disabled = 0;
+ document.iform.interface.disabled = 0;
+ document.iform.agentoption.disabled = 0;
+ } else {
+ document.iform.server.disabled = 1;
+ document.iform.interface.disabled = 1;
+ document.iform.agentoption.disabled = 1;
+ }
+}
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dhcp_relay.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp relay">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+<?php
+ if ($dhcpd_enabled) {
+ echo "<td>DHCP Server is currently enabled. Cannot enable the DHCP Relay service while the DHCP Server is enabled on any interface.";
+ echo "</td></tr></table></div></td></tr></table></form>";
+ include("fend.inc");
+ echo "</body></html>";
+ exit;
+ }
+?>
+
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCP Relay configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Enable</td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?php printf(gettext("Enable DHCP relay on interface"));?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
+ <td width="78%" class="vtable">
+ <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="3">
+ <?php
+ foreach ($iflist as $ifent => $ifdesc) {
+ if (!is_ipaddr(get_interface_ip($ifent))) {
+ continue;
+ }
+ echo "<option value=\"{$ifent}\"";
+ if (in_array($ifent, $pconfig['interface'])) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdesc}</option>\n";
+ }
+ ?>
+ </select>
+ <br />Interfaces without an IP address will not be shown.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="agentoption" type="checkbox" value="yes" <?php if ($pconfig['agentoption']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Append circuit ID and agent ID to requests"); ?></strong><br />
+ <?php printf(gettext("If this is checked, the DHCP relay will append the circuit ID (%s interface number) and the agent ID to the DHCP request."), $g['product_name']); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination server");?></td>
+ <td width="78%" class="vtable">
+ <input name="server" type="text" class="formfld unknown" id="server" size="20" value="<?=htmlspecialchars($pconfig['server']);?>" />
+ <br />
+ <?=gettext("This is the IP address of the server to which DHCP requests are relayed. You can enter multiple server IP addresses, separated by commas.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcpv6.php b/src/usr/local/www/services_dhcpv6.php
new file mode 100644
index 0000000..51a6ada
--- /dev/null
+++ b/src/usr/local/www/services_dhcpv6.php
@@ -0,0 +1,995 @@
+<?php
+/* $Id$ */
+/*
+ services_dhcpv6.php
+ parts of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcpv6server
+##|*NAME=Services: DHCPv6 server page
+##|*DESCR=Allow access to the 'Services: DHCPv6 server' page.
+##|*MATCH=services_dhcpv6.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+
+if (!$g['services_dhcp_server_enable']) {
+ header("Location: /");
+ exit;
+}
+
+/* Fix failover DHCP problem
+ * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
+ */
+ini_set("memory_limit", "64M");
+
+$if = $_GET['if'];
+if ($_POST['if']) {
+ $if = $_POST['if'];
+}
+
+/* if OLSRD is enabled, allow WAN to house DHCP. */
+if ($config['installedpackages']['olsrd']) {
+ foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
+ if ($olsrd['enable']) {
+ $is_olsr_enabled = true;
+ break;
+ }
+ }
+}
+
+$iflist = get_configured_interface_with_descr();
+$iflist = array_merge($iflist, get_configured_pppoe_server_interfaces());
+
+/* set the starting interface */
+if (!$if || !isset($iflist[$if])) {
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
+ (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
+ continue;
+ }
+ $if = $ifent;
+ break;
+ }
+}
+
+if (is_array($config['dhcpdv6'][$if])) {
+ /* DHCPv6 */
+ if (is_array($config['dhcpdv6'][$if]['range'])) {
+ $pconfig['range_from'] = $config['dhcpdv6'][$if]['range']['from'];
+ $pconfig['range_to'] = $config['dhcpdv6'][$if]['range']['to'];
+ }
+ if (is_array($config['dhcpdv6'][$if]['prefixrange'])) {
+ $pconfig['prefixrange_from'] = $config['dhcpdv6'][$if]['prefixrange']['from'];
+ $pconfig['prefixrange_to'] = $config['dhcpdv6'][$if]['prefixrange']['to'];
+ $pconfig['prefixrange_length'] = $config['dhcpdv6'][$if]['prefixrange']['prefixlength'];
+ }
+ $pconfig['deftime'] = $config['dhcpdv6'][$if]['defaultleasetime'];
+ $pconfig['maxtime'] = $config['dhcpdv6'][$if]['maxleasetime'];
+ $pconfig['domain'] = $config['dhcpdv6'][$if]['domain'];
+ $pconfig['domainsearchlist'] = $config['dhcpdv6'][$if]['domainsearchlist'];
+ list($pconfig['wins1'], $pconfig['wins2']) = $config['dhcpdv6'][$if]['winsserver'];
+ list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['dhcpdv6'][$if]['dnsserver'];
+ $pconfig['enable'] = isset($config['dhcpdv6'][$if]['enable']);
+ $pconfig['ddnsdomain'] = $config['dhcpdv6'][$if]['ddnsdomain'];
+ $pconfig['ddnsdomainprimary'] = $config['dhcpdv6'][$if]['ddnsdomainprimary'];
+ $pconfig['ddnsdomainkeyname'] = $config['dhcpdv6'][$if]['ddnsdomainkeyname'];
+ $pconfig['ddnsdomainkey'] = $config['dhcpdv6'][$if]['ddnsdomainkey'];
+ $pconfig['ddnsupdate'] = isset($config['dhcpdv6'][$if]['ddnsupdate']);
+ list($pconfig['ntp1'], $pconfig['ntp2']) = $config['dhcpdv6'][$if]['ntpserver'];
+ $pconfig['tftp'] = $config['dhcpdv6'][$if]['tftp'];
+ $pconfig['ldap'] = $config['dhcpdv6'][$if]['ldap'];
+ $pconfig['netboot'] = isset($config['dhcpdv6'][$if]['netboot']);
+ $pconfig['bootfile_url'] = $config['dhcpdv6'][$if]['bootfile_url'];
+ $pconfig['netmask'] = $config['dhcpdv6'][$if]['netmask'];
+ $pconfig['numberoptions'] = $config['dhcpdv6'][$if]['numberoptions'];
+ $pconfig['dhcpv6leaseinlocaltime'] = $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime'];
+ if (!is_array($config['dhcpdv6'][$if]['staticmap'])) {
+ $config['dhcpdv6'][$if]['staticmap'] = array();
+ }
+ $a_maps = &$config['dhcpdv6'][$if]['staticmap'];
+}
+
+$ifcfgip = get_interface_ipv6($if);
+$ifcfgsn = get_interface_subnetv6($if);
+
+/* set the enabled flag which will tell us if DHCP relay is enabled
+ * on any interface. We will use this to disable DHCP server since
+ * the two are not compatible with each other.
+ */
+
+$dhcrelay_enabled = false;
+$dhcrelaycfg = $config['dhcrelay6'];
+
+if (is_array($dhcrelaycfg)) {
+ foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) {
+ if (isset($dhcrelayifconf['enable']) && isset($iflist[$dhcrelayif]) &&
+ (!link_interface_to_bridge($dhcrelayif))) {
+ $dhcrelay_enabled = true;
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+
+ $old_dhcpdv6_enable = ($pconfig['enable'] == true);
+ $new_dhcpdv6_enable = ($_POST['enable'] ? true : false);
+ $dhcpdv6_enable_changed = ($old_dhcpdv6_enable != $new_dhcpdv6_enable);
+
+ $pconfig = $_POST;
+
+ $numberoptions = array();
+ for ($x = 0; $x < 99; $x++) {
+ if (isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) {
+ $numbervalue = array();
+ $numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]);
+ $numbervalue['value'] = htmlspecialchars($_POST["value{$x}"]);
+ $numberoptions['item'][] = $numbervalue;
+ }
+ }
+ // Reload the new pconfig variable that the forum uses.
+ $pconfig['numberoptions'] = $numberoptions;
+
+ /* input validation */
+ if ($_POST['enable']) {
+ $reqdfields = explode(" ", "range_from range_to");
+ $reqdfieldsn = array(gettext("Range begin"), gettext("Range end"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['prefixrange_from'] && !is_ipaddrv6($_POST['prefixrange_from']))) {
+ $input_errors[] = gettext("A valid range must be specified.");
+ }
+ if (($_POST['prefixrange_to'] && !is_ipaddrv6($_POST['prefixrange_to']))) {
+ $input_errors[] = gettext("A valid prefix range must be specified.");
+ }
+ if (($_POST['range_from'] && !is_ipaddrv6($_POST['range_from']))) {
+ $input_errors[] = gettext("A valid range must be specified.");
+ }
+ if (($_POST['range_to'] && !is_ipaddrv6($_POST['range_to']))) {
+ $input_errors[] = gettext("A valid range must be specified.");
+ }
+ if (($_POST['gateway'] && !is_ipaddrv6($_POST['gateway']))) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified for the gateway.");
+ }
+ if (($_POST['dns1'] && !is_ipaddrv6($_POST['dns1'])) ||
+ ($_POST['dns2'] && !is_ipaddrv6($_POST['dns2'])) ||
+ ($_POST['dns3'] && !is_ipaddrv6($_POST['dns3'])) ||
+ ($_POST['dns4'] && !is_ipaddrv6($_POST['dns4']))) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified for each of the DNS servers.");
+ }
+
+ if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60))) {
+ $input_errors[] = gettext("The default lease time must be at least 60 seconds.");
+ }
+ if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) {
+ $input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
+ }
+ if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) {
+ $input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
+ }
+ if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
+ $input_errors[] = gettext("A valid primary domain name server IPv4 address must be specified for the dynamic domain name.");
+ }
+ if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) ||
+ ($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) {
+ $input_errors[] = gettext("You must specify both a valid domain key and key name.");
+ }
+ if ($_POST['domainsearchlist']) {
+ $domain_array=preg_split("/[ ;]+/", $_POST['domainsearchlist']);
+ foreach ($domain_array as $curdomain) {
+ if (!is_domain($curdomain)) {
+ $input_errors[] = gettext("A valid domain search list must be specified.");
+ break;
+ }
+ }
+ }
+
+ if (($_POST['ntp1'] && !is_ipaddrv6($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv6($_POST['ntp2']))) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary NTP servers.");
+ }
+ if (($_POST['domain'] && !is_domain($_POST['domain']))) {
+ $input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
+ }
+ if ($_POST['tftp'] && !is_ipaddr($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp'])) {
+ $input_errors[] = gettext("A valid IPv6 address or hostname must be specified for the TFTP server.");
+ }
+ if (($_POST['bootfile_url'] && !is_URL($_POST['bootfile_url']))) {
+ $input_errors[] = gettext("A valid URL must be specified for the network bootfile.");
+ }
+
+ // Disallow a range that includes the virtualip
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if ($vip['interface'] == $if) {
+ if ($vip['subnetv6'] && is_inrange_v6($vip['subnetv6'], $_POST['range_from'], $_POST['range_to'])) {
+ $input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IPv6 address %s."), $vip['subnetv6']);
+ }
+ }
+ }
+ }
+
+ $noip = false;
+ if (is_array($a_maps)) {
+ foreach ($a_maps as $map) {
+ if (empty($map['ipaddrv6'])) {
+ $noip = true;
+ }
+ }
+ }
+ if (!$input_errors) {
+ /* make sure the range lies within the current subnet */
+ $subnet_start = gen_subnetv6($ifcfgip, $ifcfgsn);
+ $subnet_end = gen_subnetv6_max($ifcfgip, $ifcfgsn);
+
+ if (is_ipaddrv6($ifcfgip)) {
+ if ((!is_inrange_v6($_POST['range_from'], $subnet_start, $subnet_end)) ||
+ (!is_inrange_v6($_POST['range_to'], $subnet_start, $subnet_end))) {
+ $input_errors[] = gettext("The specified range lies outside of the current subnet.");
+ }
+ }
+ /* "from" cannot be higher than "to" */
+ if (inet_pton($_POST['range_from']) > inet_pton($_POST['range_to'])) {
+ $input_errors[] = gettext("The range is invalid (first element higher than second element).");
+ }
+
+ /* make sure that the DHCP Relay isn't enabled on this interface */
+ if (isset($config['dhcrelay'][$if]['enable'])) {
+ $input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."), $iflist[$if]);
+ }
+
+
+ /* Verify static mappings do not overlap:
+ - available DHCP range
+ - prefix delegation range (FIXME: still need to be completed) */
+ $dynsubnet_start = inet_pton($_POST['range_from']);
+ $dynsubnet_end = inet_pton($_POST['range_to']);
+
+ if (is_array($a_maps)) {
+ foreach ($a_maps as $map) {
+ if (empty($map['ipaddrv6'])) {
+ continue;
+ }
+ if ((inet_pton($map['ipaddrv6']) > $dynsubnet_start) &&
+ (inet_pton($map['ipaddrv6']) < $dynsubnet_end)) {
+ $input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings."));
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ if (!is_array($config['dhcpdv6'][$if])) {
+ $config['dhcpdv6'][$if] = array();
+ }
+ if (!is_array($config['dhcpdv6'][$if]['range'])) {
+ $config['dhcpdv6'][$if]['range'] = array();
+ }
+ if (!is_array($config['dhcpdv6'][$if]['prefixrange'])) {
+ $config['dhcpdv6'][$if]['prefixrange'] = array();
+ }
+
+ $config['dhcpdv6'][$if]['range']['from'] = $_POST['range_from'];
+ $config['dhcpdv6'][$if]['range']['to'] = $_POST['range_to'];
+ $config['dhcpdv6'][$if]['prefixrange']['from'] = $_POST['prefixrange_from'];
+ $config['dhcpdv6'][$if]['prefixrange']['to'] = $_POST['prefixrange_to'];
+ $config['dhcpdv6'][$if]['prefixrange']['prefixlength'] = $_POST['prefixrange_length'];
+ $config['dhcpdv6'][$if]['defaultleasetime'] = $_POST['deftime'];
+ $config['dhcpdv6'][$if]['maxleasetime'] = $_POST['maxtime'];
+ $config['dhcpdv6'][$if]['netmask'] = $_POST['netmask'];
+
+ unset($config['dhcpdv6'][$if]['winsserver']);
+
+ unset($config['dhcpdv6'][$if]['dnsserver']);
+ if ($_POST['dns1']) {
+ $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns1'];
+ }
+ if ($_POST['dns2']) {
+ $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns2'];
+ }
+ if ($_POST['dns3']) {
+ $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns3'];
+ }
+ if ($_POST['dns4']) {
+ $config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns4'];
+ }
+
+ $config['dhcpdv6'][$if]['domain'] = $_POST['domain'];
+ $config['dhcpdv6'][$if]['domainsearchlist'] = $_POST['domainsearchlist'];
+ $config['dhcpdv6'][$if]['enable'] = ($_POST['enable']) ? true : false;
+ $config['dhcpdv6'][$if]['ddnsdomain'] = $_POST['ddnsdomain'];
+ $config['dhcpdv6'][$if]['ddnsdomainprimary'] = $_POST['ddnsdomainprimary'];
+ $config['dhcpdv6'][$if]['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname'];
+ $config['dhcpdv6'][$if]['ddnsdomainkey'] = $_POST['ddnsdomainkey'];
+ $config['dhcpdv6'][$if]['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
+
+ unset($config['dhcpdv6'][$if]['ntpserver']);
+ if ($_POST['ntp1']) {
+ $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp1'];
+ }
+ if ($_POST['ntp2']) {
+ $config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp2'];
+ }
+
+ $config['dhcpdv6'][$if]['tftp'] = $_POST['tftp'];
+ $config['dhcpdv6'][$if]['ldap'] = $_POST['ldap'];
+ $config['dhcpdv6'][$if]['netboot'] = ($_POST['netboot']) ? true : false;
+ $config['dhcpdv6'][$if]['bootfile_url'] = $_POST['bootfile_url'];
+ $config['dhcpdv6'][$if]['dhcpv6leaseinlocaltime'] = $_POST['dhcpv6leaseinlocaltime'];
+
+ // Handle the custom options rowhelper
+ if (isset($config['dhcpdv6'][$if]['numberoptions']['item'])) {
+ unset($config['dhcpdv6'][$if]['numberoptions']['item']);
+ }
+
+ $config['dhcpdv6'][$if]['numberoptions'] = $numberoptions;
+
+ write_config();
+
+ $retval = 0;
+ $retvaldhcp = 0;
+ $retvaldns = 0;
+ /* Stop DHCPv6 so we can cleanup leases */
+ killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid");
+ // dhcp_clean_leases();
+ /* dnsmasq_configure calls dhcpd_configure */
+ /* no need to restart dhcpd twice */
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
+ $retvaldns = services_dnsmasq_configure();
+ if ($retvaldns == 0) {
+ clear_subsystem_dirty('hosts');
+ clear_subsystem_dirty('staticmaps');
+ }
+ } else if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
+ $retvaldns = services_unbound_configure();
+ if ($retvaldns == 0) {
+ clear_subsystem_dirty('unbound');
+ clear_subsystem_dirty('staticmaps');
+ }
+ } else {
+ $retvaldhcp = services_dhcpd_configure();
+ if ($retvaldhcp == 0) {
+ clear_subsystem_dirty('staticmaps');
+ }
+ }
+ if ($dhcpdv6_enable_changed) {
+ $retvalfc = filter_configure();
+ }
+ if ($retvaldhcp == 1 || $retvaldns == 1 || $retvalfc == 1) {
+ $retval = 1;
+ }
+ $savemsg = get_std_save_message($retval);
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_maps[$_GET['id']]) {
+ unset($a_maps[$_GET['id']]);
+ write_config();
+ if (isset($config['dhcpdv6'][$if]['enable'])) {
+ mark_subsystem_dirty('staticmapsv6');
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstaticv6'])) {
+ mark_subsystem_dirty('hosts');
+ }
+ }
+ header("Location: services_dhcpv6.php?if={$if}");
+ exit;
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DHCPv6 server"));
+$shortcut_section = "dhcp6";
+
+include("head.inc");
+
+?>
+
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "number";
+ rowtype[0] = "textbox";
+ rowsize[0] = "10";
+ rowname[1] = "value";
+ rowtype[1] = "textbox";
+ rowsize[1] = "55";
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ function enable_change(enable_over) {
+ var endis;
+ endis = !(document.iform.enable.checked || enable_over);
+ document.iform.range_from.disabled = endis;
+ document.iform.range_to.disabled = endis;
+ document.iform.prefixrange_from.disabled = endis;
+ document.iform.prefixrange_to.disabled = endis;
+ document.iform.prefixrange_length.disabled = endis;
+ document.iform.dns1.disabled = endis;
+ document.iform.dns2.disabled = endis;
+ document.iform.dns3.disabled = endis;
+ document.iform.dns4.disabled = endis;
+ document.iform.deftime.disabled = endis;
+ document.iform.maxtime.disabled = endis;
+ //document.iform.gateway.disabled = endis;
+ document.iform.dhcpv6leaseinlocaltime.disabled = endis;
+ document.iform.domain.disabled = endis;
+ document.iform.domainsearchlist.disabled = endis;
+ document.iform.ddnsdomain.disabled = endis;
+ document.iform.ddnsdomainprimary.disabled = endis;
+ document.iform.ddnsdomainkeyname.disabled = endis;
+ document.iform.ddnsdomainkey.disabled = endis;
+ document.iform.ddnsupdate.disabled = endis;
+ document.iform.ntp1.disabled = endis;
+ document.iform.ntp2.disabled = endis;
+ //document.iform.tftp.disabled = endis;
+ document.iform.ldap.disabled = endis;
+ document.iform.netboot.disabled = endis;
+ document.iform.bootfile_url.disabled = endis;
+ }
+
+ function show_shownumbervalue() {
+ document.getElementById("shownumbervaluebox").innerHTML='';
+ aodiv = document.getElementById('shownumbervalue');
+ aodiv.style.display = "block";
+ }
+
+ function show_ddns_config() {
+ document.getElementById("showddnsbox").innerHTML='';
+ aodiv = document.getElementById('showddns');
+ aodiv.style.display = "block";
+ }
+ function show_ntp_config() {
+ document.getElementById("showntpbox").innerHTML='';
+ aodiv = document.getElementById('showntp');
+ aodiv.style.display = "block";
+ }
+ /*
+ function show_tftp_config() {
+ document.getElementById("showtftpbox").innerHTML='';
+ aodiv = document.getElementById('showtftp');
+ aodiv.style.display = "block";
+ }
+ */
+ function show_ldap_config() {
+ document.getElementById("showldapbox").innerHTML='';
+ aodiv = document.getElementById('showldap');
+ aodiv.style.display = "block";
+ }
+
+ function show_netboot_config() {
+ document.getElementById("shownetbootbox").innerHTML='';
+ aodiv = document.getElementById('shownetboot');
+ aodiv.style.display = "block";
+ }
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dhcpv6.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php
+ if ($dhcrelay_enabled) {
+ echo gettext("DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.");
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+ }
+?>
+<?php if (is_subsystem_dirty('staticmaps')): ?><p>
+<?php print_info_box_np(gettext("The static mapping configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcpv6 server">
+ <tr>
+ <td>
+<?php
+ /* active tabs */
+ $tab_array = array();
+ $tabscounter = 0;
+ $i = 0;
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
+ (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
+ continue;
+ }
+ if ($ifent == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
+ $tabscounter++;
+ }
+ /* tack on PPPoE or PPtP servers here */
+ /* pppoe server */
+ if (is_array($config['pppoes']['pppoe'])) {
+ foreach ($config['pppoes']['pppoe'] as $pppoe) {
+ if ($pppoe['mode'] == "server") {
+ $ifent = "poes". $pppoe['pppoeid'];
+ $ifname = strtoupper($ifent);
+ if ($ifent == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
+ $tabscounter++;
+ }
+ }
+ }
+ if ($tabscounter == 0) {
+ echo "<b>" . gettext("The DHCPv6 Server can only be enabled on interfaces configured with a static IPv6 address. This system has none.") . "<br/><br/>";
+ echo "</td></tr></table></form>";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("DHCPv6 Server"), true, "services_dhcpv6.php?if={$if}");
+ $tab_array[] = array(gettext("Router Advertisements"), false, "services_router_advertisements.php?if={$if}");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCPv6 Server");?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false);" />
+ <strong><?php printf(gettext("Enable DHCPv6 server on %s interface"), htmlspecialchars($iflist[$if]));?></strong>
+ </td>
+ </tr>
+<?php
+ /* the PPPoE Server could well have no IPv6 address and operate fine with just link-local, just hide these */
+ if (is_ipaddrv6($ifcfgip)) {
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet");?></td>
+ <td width="78%" class="vtable">
+ <?=gen_subnetv6($ifcfgip, $ifcfgsn);?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet mask");?></td>
+ <td width="78%" class="vtable">
+ <?=$ifcfgsn;?> bits
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Available range");?></td>
+ <td width="78%" class="vtable">
+ <?php
+ $range_from = gen_subnetv6($ifcfgip, $ifcfgsn);
+ echo $range_from;
+ ?>
+ -
+ <?php
+ $range_to = gen_subnetv6_max($ifcfgip, $ifcfgsn);
+ echo $range_to;
+ ?>
+ </td>
+ </tr>
+<?php
+ }
+
+ if ($is_olsr_enabled):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask");?></td>
+ <td width="78%" class="vtable">
+ <select name="netmask" class="formselect" id="netmask">
+ <?php
+ for ($i = 128; $i > 0; $i--) {
+ if ($i <> 127) {
+ echo "<option value=\"{$i}\" ";
+ if ($i == $pconfig['netmask']) {
+ echo "selected";
+ }
+ echo ">" . $i . "</option>";
+ }
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Range");?></td>
+ <td width="78%" class="vtable">
+ <input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range_from']);?>" />
+ &nbsp;<?=gettext("to"); ?>&nbsp; <input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range_to']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Prefix Delegation Range");?></td>
+ <td width="78%" class="vtable">
+ <input name="prefixrange_from" type="text" class="formfld unknown" id="prefixrange_from" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_from']);?>" />
+ &nbsp;<?=gettext("to"); ?>&nbsp; <input name="prefixrange_to" type="text" class="formfld unknown" id="prefixrange_to" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_to']);?>" />
+ &nbsp;<br /><?=gettext("Prefix Delegation Size"); ?>:&nbsp;
+ <select name="prefixrange_length" class="formselect" id="prefixrange_length">
+ <option value="48" <?php if ($pconfig['prefixrange_length'] == 48) echo "selected=\"selected\""; ?>>48</option>
+ <option value="52" <?php if ($pconfig['prefixrange_length'] == 52) echo "selected=\"selected\""; ?>>52</option>
+ <option value="56" <?php if ($pconfig['prefixrange_length'] == 56) echo "selected=\"selected\""; ?>>56</option>
+ <option value="60" <?php if ($pconfig['prefixrange_length'] == 60) echo "selected=\"selected\""; ?>>60</option>
+ <option value="62" <?php if ($pconfig['prefixrange_length'] == 62) echo "selected=\"selected\""; ?>>62</option>
+ <option value="63" <?php if ($pconfig['prefixrange_length'] == 63) echo "selected=\"selected\""; ?>>63</option>
+ <option value="64" <?php if ($pconfig['prefixrange_length'] == 64) echo "selected=\"selected\""; ?>>64</option>
+ </select> <br />
+ <?php echo gettext("You can define a Prefix range here for DHCP Prefix Delegation. This allows for
+ assigning networks to subrouters. The start and end of the range must end on boundaries of the prefix delegation size."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="dns1" type="text" class="formfld unknown" id="dns1" size="28" value="<?=htmlspecialchars($pconfig['dns1']);?>" /><br />
+ <input name="dns2" type="text" class="formfld unknown" id="dns2" size="28" value="<?=htmlspecialchars($pconfig['dns2']);?>" /><br />
+ <input name="dns3" type="text" class="formfld unknown" id="dns3" size="28" value="<?=htmlspecialchars($pconfig['dns3']);?>" /><br />
+ <input name="dns4" type="text" class="formfld unknown" id="dns4" size="28" value="<?=htmlspecialchars($pconfig['dns4']);?>" /><br />
+ <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
+ <td width="78%" class="vtable">
+ <input name="domain" type="text" class="formfld unknown" id="domain" size="28" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
+ <?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
+ <td width="78%" class="vtable">
+ <input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="28" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>" /><br />
+ <?=gettext("The DHCP server can optionally provide a domain search list. Use the semicolon character as separator");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is used for clients that do not ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 7200 seconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
+ <td width="78%" class="vtable">
+ <input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>" />
+ <?=gettext("seconds");?><br />
+ <?=gettext("This is the maximum lease time for clients that ask for a specific expiration time."); ?><br />
+ <?=gettext("The default is 86400 seconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Time format change"); ?></td>
+ <td width="78%" class="vtable">
+ <table summary="time format change">
+ <tr>
+ <td>
+ <input name="dhcpv6leaseinlocaltime" type="checkbox" id="dhcpv6leaseinlocaltime" value="yes" <?php if ($pconfig['dhcpv6leaseinlocaltime']) echo "checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <strong>
+ <?=gettext("Change DHCPv6 display lease time from UTC to local time."); ?>
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <span class="red">
+ <strong><?=gettext("Note:");?></strong>
+ </span>
+ <?=gettext("By default DHCPv6 leases are displayed in UTC time. By checking this box DHCPv6 lease time will be displayed in local time and set to time zone selected. This will be used for all DHCPv6 interfaces lease time."); ?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
+ <td width="78%" class="vtable">
+ <div id="showddnsbox">
+ <input type="button" onclick="show_ddns_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Dynamic DNS");?>
+ </div>
+ <div id="showddns" style="display:none">
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if ($pconfig['ddnsupdate']) echo " checked=\"checked\""; ?> />&nbsp;
+ <b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
+ <p>
+ <input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="28" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>" /><br />
+ <?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
+ <?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainprimary" type="text" class="formfld unknown" id="ddnsdomainprimary" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainprimary']);?>" /><br />
+ <?=gettext("Enter the primary domain name server IP address for the dynamic domain name.");?><br />
+ <input name="ddnsdomainkeyname" type="text" class="formfld unknown" id="ddnsdomainkeyname" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkeyname']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key name which will be used to register client names in the DNS server.");?><br />
+ <input name="ddnsdomainkey" type="text" class="formfld unknown" id="ddnsdomainkey" size="20" value="<?=htmlspecialchars($pconfig['ddnsdomainkey']);?>" /><br />
+ <?=gettext("Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.");?>
+ </p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
+ <td width="78%" class="vtable">
+ <div id="showntpbox">
+ <input type="button" onclick="show_ntp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show NTP configuration");?>
+ </div>
+ <div id="showntp" style="display:none">
+ <input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="28" value="<?=htmlspecialchars($pconfig['ntp1']);?>" /><br />
+ <input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="28" value="<?=htmlspecialchars($pconfig['ntp2']);?>" />
+ </div>
+ </td>
+ </tr>
+ <!-- ISC dhcpd does not support tftp for ipv6 yet. See redmine #2016
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
+ <td width="78%" class="vtable">
+ <div id="showtftpbox">
+ <input type="button" onclick="show_tftp_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show TFTP configuration");?>
+ </div>
+ <div id="showtftp" style="display:none">
+ <input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
+ </div>
+ </td>
+ </tr>
+ -->
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("LDAP URI");?></td>
+ <td width="78%" class="vtable">
+ <div id="showldapbox">
+ <input type="button" onclick="show_ldap_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show LDAP configuration");?>
+ </div>
+ <div id="showldap" style="display:none">
+ <input name="ldap" type="text" class="formfld unknown" id="ldap" size="80" value="<?=htmlspecialchars($pconfig['ldap']);?>" /><br />
+ <?=gettext("Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com");?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable network booting");?></td>
+ <td width="78%" class="vtable">
+ <div id="shownetbootbox">
+ <input type="button" onclick="show_netboot_config()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Network booting");?>
+ </div>
+ <div id="shownetboot" style="display:none">
+ <input style="vertical-align:middle" type="checkbox" value="yes" name="netboot" id="netboot" <?php if ($pconfig['netboot']) echo " checked=\"checked\""; ?> />&nbsp;
+ <b><?=gettext("Enables network booting.");?></b>
+ <br/>
+ <?=gettext("Enter the Bootfile URL");?>
+ <input name="bootfile_url" type="text" class="formfld unknown" id="bootfile_url" size="28" value="<?=htmlspecialchars($pconfig['bootfile_url']);?>" />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Additional BOOTP/DHCP Options");?></td>
+ <td width="78%" class="vtable">
+ <div id="shownumbervaluebox">
+ <input type="button" onclick="show_shownumbervalue()" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Additional BOOTP/DHCP Options");?>
+ </div>
+ <div id="shownumbervalue" style="display:none">
+ <table id="maintable" summary="bootp-dhcp options">
+ <tbody>
+ <tr>
+ <td colspan="3">
+ <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
+ <?=gettext("Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"); ?> <a href="http://www.iana.org/assignments/bootp-dhcp-parameters/" target="_blank"><?=gettext("URL"); ?></a>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Number");?></div></td>
+ <td><div id="twocolumn"><?=gettext("Value");?></div></td>
+ </tr>
+<?php
+ $counter = 0;
+ if ($pconfig['numberoptions']):
+ foreach ($pconfig['numberoptions']['item'] as $item):
+ $number = $item['number'];
+ $value = $item['value'];
+?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
+ </td>
+ <td>
+ <input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld" id="value<?php echo $counter; ?>" size="55" value="<?=htmlspecialchars($value);?>" />
+ </td>
+ <td>
+ <input type="image" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" onclick="removeRow(this); return false;" value="<?=gettext("Delete");?>" />
+ </td>
+ </tr>
+<?php
+ $counter++;
+ endforeach;
+ endif;
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 2;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="if" type="hidden" value="<?=$if;?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?=gettext("The DNS servers entered in"); ?> <a href="system.php"><?=gettext("System: General setup"); ?></a>\
+ <?=gettext("(or the"); ?> <a href="services_dnsmasq.php"><?=gettext("DNS forwarder"); ?></a>, <?=gettext("if enabled)"); ?>
+ </span>
+ <span class="vexpl">
+ <?=gettext("will be assigned to clients by the DHCP server."); ?><br />
+ <br />
+ <?=gettext("The DHCP lease table can be viewed on the"); ?> <a href="status_dhcpv6_leases.php"><?=gettext("Status: DHCPv6 leases"); ?></a> <?=gettext("page."); ?><br />
+ </span>
+ </p>
+ </td>
+ </tr>
+ </table>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="static mappings">
+ <tr>
+ <td colspan="4" valign="top" class="listtopic"><?=gettext("DHCPv6 Static Mappings for this interface.");?></td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="25%" class="listhdrr"><?=gettext("DUID");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("IPv6 address");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle">
+ <a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if (is_array($a_maps)):
+ $i = 0;
+ foreach ($a_maps as $mapent):
+ if ($mapent['duid'] <> "" or $mapent['ipaddrv6'] <> ""):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['duid']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['ipaddrv6']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['hostname']);?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>';">
+ <?=htmlspecialchars($mapent['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>&amp;id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td valign="middle"><a href="services_dhcpv6.php?if=<?=$if;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcpv6_edit.php b/src/usr/local/www/services_dhcpv6_edit.php
new file mode 100644
index 0000000..2034049
--- /dev/null
+++ b/src/usr/local/www/services_dhcpv6_edit.php
@@ -0,0 +1,285 @@
+<?php
+/* $Id$ */
+/*
+ services_dhcpv6_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/sbin/arp
+ pfSense_MODULE: dhcpserver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcpserverv6-editstaticmapping
+##|*NAME=Services: DHCPv6 Server : Edit static mapping page
+##|*DESCR=Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page.
+##|*MATCH=services_dhcpv6_edit.php*
+##|-PRIV
+
+function staticmapcmp($a, $b) {
+ return ipcmp($a['ipaddrv6'], $b['ipaddrv6']);
+}
+
+function staticmaps_sort($ifgui) {
+ global $g, $config;
+
+ usort($config['dhcpdv6'][$ifgui]['staticmap'], "staticmapcmp");
+}
+
+require_once('globals.inc');
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dhcpv6.php');
+}
+
+if (!$g['services_dhcp_server_enable']) {
+ header("Location: /");
+ exit;
+}
+
+require("guiconfig.inc");
+
+$if = $_GET['if'];
+if ($_POST['if']) {
+ $if = $_POST['if'];
+}
+
+if (!$if) {
+ header("Location: services_dhcpv6.php");
+ exit;
+}
+
+if (!is_array($config['dhcpdv6'])) {
+ $config['dhcpdv6'] = array();
+}
+if (!is_array($config['dhcpdv6'][$if])) {
+ $config['dhcpdv6'][$if] = array();
+}
+if (!is_array($config['dhcpdv6'][$if]['staticmap'])) {
+ $config['dhcpdv6'][$if]['staticmap'] = array();
+}
+
+$netboot_enabled = isset($config['dhcpdv6'][$if]['netboot']);
+$a_maps = &$config['dhcpdv6'][$if]['staticmap'];
+$ifcfgipv6 = get_interface_ipv6($if);
+$ifcfgsnv6 = get_interface_subnetv6($if);
+$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if);
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_maps[$id]) {
+ $pconfig['duid'] = $a_maps[$id]['duid'];
+ $pconfig['hostname'] = $a_maps[$id]['hostname'];
+ $pconfig['ipaddrv6'] = $a_maps[$id]['ipaddrv6'];
+ $pconfig['filename'] = $a_maps[$id]['filename'];
+ $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
+ $pconfig['descr'] = $a_maps[$id]['descr'];
+} else {
+ $pconfig['duid'] = $_GET['duid'];
+ $pconfig['hostname'] = $_GET['hostname'];
+ $pconfig['filename'] = $_GET['filename'];
+ $pconfig['rootpath'] = $a_maps[$id]['rootpath'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "duid");
+ $reqdfieldsn = array(gettext("DUID"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['hostname']) {
+ preg_match("/\-\$/", $_POST['hostname'], $matches);
+ if ($matches) {
+ $input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952");
+ }
+ if (!is_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
+ } else {
+ if (!is_unqualified_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+ if (($_POST['ipaddrv6'] && !is_ipaddrv6($_POST['ipaddrv6']))) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified.");
+ }
+ if (empty($_POST['duid'])) {
+ $input_errors[] = gettext("A valid DUID must be specified.");
+ }
+
+ /* check for overlaps */
+ foreach ($a_maps as $mapent) {
+ if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent)) {
+ continue;
+ }
+
+ if ((($mapent['hostname'] == $_POST['hostname']) && $mapent['hostname']) || ($mapent['duid'] == $_POST['duid'])) {
+ $input_errors[] = gettext("This Hostname, IP or DUID already exists.");
+ break;
+ }
+ }
+
+ /* make sure it's not within the dynamic subnet */
+ if ($_POST['ipaddrv6']) {
+ /* oh boy, we need to be able to somehow do this at some point. skip */
+ }
+
+ if (!$input_errors) {
+ $mapent = array();
+ $mapent['duid'] = $_POST['duid'];
+ $mapent['ipaddrv6'] = $_POST['ipaddrv6'];
+ $mapent['hostname'] = $_POST['hostname'];
+ $mapent['descr'] = $_POST['descr'];
+ $mapent['filename'] = $_POST['filename'];
+ $mapent['rootpath'] = $_POST['rootpath'];
+
+ if (isset($id) && $a_maps[$id]) {
+ $a_maps[$id] = $mapent;
+ } else {
+ $a_maps[] = $mapent;
+ }
+ staticmaps_sort($if);
+
+ write_config();
+
+ if (isset($config['dhcpdv6'][$if]['enable'])) {
+ mark_subsystem_dirty('staticmaps');
+ if (isset($config['dnsmasq']['enable']) && isset($config['dnsmasq']['regdhcpstatic'])) {
+ mark_subsystem_dirty('hosts');
+ }
+ if (isset($config['unbound']['enable']) && isset($config['unbound']['regdhcpstatic'])) {
+ mark_subsystem_dirty('unbound');
+ }
+
+ }
+
+ header("Location: services_dhcpv6.php?if={$if}");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("DHCPv6"), gettext("Edit static mapping"));
+$shortcut_section = "dhcp6";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_dhcpv6_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="static mapping">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Static DHCPv6 Mapping");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DUID");?></td>
+ <td width="78%" class="vtable">
+ <input name="duid" type="text" class="formfld unknown" id="duid" size="40" value="<?=htmlspecialchars($pconfig['duid']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a DUID in the following format: ");?><br />
+"DUID-LLT - ETH -- TIME --- ---- address ----" <br />
+"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>" />
+ <br />
+ <?=gettext("If an IPv6 address is entered, the address must be outside of the pool.");?>
+ <br />
+ <?=gettext("If no IPv6 address is given, one will be dynamically allocated from the pool.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hostname");?></td>
+ <td width="78%" class="vtable">
+ <input name="hostname" type="text" class="formfld unknown" id="hostname" size="28" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
+ <br /> <span class="vexpl"><?=gettext("Name of the host, without domain part.");?></span>
+ </td>
+ </tr>
+<?php
+ if ($netboot_enabled) {
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Netboot filename</td>
+ <td width="78%" class="vtable">
+ <input name="filename" type="text" class="formfld unknown" id="filename" size="28" value="<?=htmlspecialchars($pconfig['filename']);?>" />
+ <br /> <span class="vexpl">Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Root Path</td>
+ <td width="78%" class="vtable">
+ <input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>" />
+ <br /> <span class="vexpl"><?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>, overrides setting on main page.</span>
+ </td>
+ </tr>
+<?php
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_maps[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <input name="if" type="hidden" value="<?=htmlspecialchars($if);?>" />
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dhcpv6_relay.php b/src/usr/local/www/services_dhcpv6_relay.php
new file mode 100644
index 0000000..c6e5daf
--- /dev/null
+++ b/src/usr/local/www/services_dhcpv6_relay.php
@@ -0,0 +1,216 @@
+<?php
+/*
+ services_dhcpv6_relay.php
+
+ Copyright (C) 2003-2004 Justin Ellison <justin@techadvise.com>.
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2010 Seth Mos
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dhcpv6relay
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dhcpv6relay
+##|*NAME=Services: DHCPv6 Relay page
+##|*DESCR=Allow access to the 'Services: DHCPv6 Relay' page.
+##|*MATCH=services_dhcpv6_relay.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pconfig['enable'] = isset($config['dhcrelay6']['enable']);
+if (empty($config['dhcrelay6']['interface'])) {
+ $pconfig['interface'] = array();
+} else {
+ $pconfig['interface'] = explode(",", $config['dhcrelay6']['interface']);
+}
+$pconfig['server'] = $config['dhcrelay6']['server'];
+$pconfig['agentoption'] = isset($config['dhcrelay6']['agentoption']);
+
+$iflist = get_configured_interface_with_descr();
+
+/* set the enabled flag which will tell us if DHCP server is enabled
+ * on any interface. We will use this to disable dhcp-relay since
+ * the two are not compatible with each other.
+ */
+$dhcpd_enabled = false;
+if (is_array($config['dhcpdv6'])) {
+ foreach ($config['dhcpdv6'] as $dhcp) {
+ if (isset($dhcp['enable']) && isset($config['interfaces'][$dhcpif]['enable'])) {
+ $dhcpd_enabled = true;
+ break;
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable']) {
+ $reqdfields = explode(" ", "server interface");
+ $reqdfieldsn = array(gettext("Destination Server"), gettext("Interface"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['server']) {
+ $checksrv = explode(",", $_POST['server']);
+ foreach ($checksrv as $srv) {
+ if (!is_ipaddrv6($srv)) {
+ $input_errors[] = gettext("A valid Destination Server IPv6 address must be specified.");
+ }
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $config['dhcrelay6']['enable'] = $_POST['enable'] ? true : false;
+ $config['dhcrelay6']['interface'] = implode(",", $_POST['interface']);
+ $config['dhcrelay6']['agentoption'] = $_POST['agentoption'] ? true : false;
+ $config['dhcrelay6']['server'] = $_POST['server'];
+
+ write_config();
+
+ $retval = 0;
+ $retval = services_dhcrelay6_configure();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DHCPv6 Relay"));
+$shortcut_section = "dhcp6";
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_over) {
+ if (document.iform.enable.checked || enable_over) {
+ document.iform.server.disabled = 0;
+ document.iform.interface.disabled = 0;
+ document.iform.agentoption.disabled = 0;
+ } else {
+ document.iform.server.disabled = 1;
+ document.iform.interface.disabled = 1;
+ document.iform.agentoption.disabled = 1;
+ }
+}
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dhcpv6_relay.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcpv6 relay">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+<?php
+ if ($dhcpd_enabled) {
+ echo "<td>DHCPv6 Server is currently enabled. Cannot enable the DHCPv6 Relay service while the DHCPv6 Server is enabled on any interface.";
+ echo "</td></tr></table></div></td></tr></table></form>";
+ include("fend.inc");
+ echo "</body></html>";
+ exit;
+ }
+?>
+
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("DHCPv6 Relay configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Enable</td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?php printf(gettext("Enable DHCPv6 relay on interface"));?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
+ <td width="78%" class="vtable">
+ <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="3">
+ <?php
+ foreach ($iflist as $ifent => $ifdesc) {
+ if (!is_ipaddrv6(get_interface_ipv6($ifent))) {
+ continue;
+ }
+ echo "<option value=\"{$ifent}\"";
+ if (in_array($ifent, $pconfig['interface'])) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdesc}</option>\n";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("Interfaces without an IPv6 address will not be shown."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="agentoption" type="checkbox" value="yes" <?php if ($pconfig['agentoption']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Append circuit ID and agent ID to requests"); ?></strong><br />
+ <?php printf(gettext("If this is checked, the DHCPv6 relay will append the circuit ID (%s interface number) and the agent ID to the DHCPv6 request."), $g['product_name']); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Destination server");?></td>
+ <td width="78%" class="vtable">
+ <input name="server" type="text" class="formfld unknown" id="server" size="20" value="<?=htmlspecialchars($pconfig['server']);?>" />
+ <br />
+ <?=gettext("This is the IPv6 address of the server to which DHCPv6 requests are relayed. You can enter multiple server IPv6 addresses, separated by commas. ");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dnsmasq.php b/src/usr/local/www/services_dnsmasq.php
new file mode 100644
index 0000000..4abf4d7
--- /dev/null
+++ b/src/usr/local/www/services_dnsmasq.php
@@ -0,0 +1,582 @@
+<?php
+/* $Id$ */
+/*
+ services_dnsmasq.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsforwarder
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dnsforwarder
+##|*NAME=Services: DNS Forwarder page
+##|*DESCR=Allow access to the 'Services: DNS Forwarder' page.
+##|*MATCH=services_dnsmasq.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("system.inc");
+
+$pconfig['enable'] = isset($config['dnsmasq']['enable']);
+$pconfig['regdhcp'] = isset($config['dnsmasq']['regdhcp']);
+$pconfig['regdhcpstatic'] = isset($config['dnsmasq']['regdhcpstatic']);
+$pconfig['dhcpfirst'] = isset($config['dnsmasq']['dhcpfirst']);
+$pconfig['strict_order'] = isset($config['dnsmasq']['strict_order']);
+$pconfig['domain_needed'] = isset($config['dnsmasq']['domain_needed']);
+$pconfig['no_private_reverse'] = isset($config['dnsmasq']['no_private_reverse']);
+$pconfig['port'] = $config['dnsmasq']['port'];
+$pconfig['custom_options'] = $config['dnsmasq']['custom_options'];
+
+$pconfig['strictbind'] = isset($config['dnsmasq']['strictbind']);
+if (!empty($config['dnsmasq']['interface'])) {
+ $pconfig['interface'] = explode(",", $config['dnsmasq']['interface']);
+} else {
+ $pconfig['interface'] = array();
+}
+
+if (!is_array($config['dnsmasq']['hosts'])) {
+ $config['dnsmasq']['hosts'] = array();
+}
+
+if (!is_array($config['dnsmasq']['domainoverrides'])) {
+ $config['dnsmasq']['domainoverrides'] = array();
+}
+
+$a_hosts = &$config['dnsmasq']['hosts'];
+$a_domainOverrides = &$config['dnsmasq']['domainoverrides'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+ unset($input_errors);
+
+ $config['dnsmasq']['enable'] = ($_POST['enable']) ? true : false;
+ $config['dnsmasq']['regdhcp'] = ($_POST['regdhcp']) ? true : false;
+ $config['dnsmasq']['regdhcpstatic'] = ($_POST['regdhcpstatic']) ? true : false;
+ $config['dnsmasq']['dhcpfirst'] = ($_POST['dhcpfirst']) ? true : false;
+ $config['dnsmasq']['strict_order'] = ($_POST['strict_order']) ? true : false;
+ $config['dnsmasq']['domain_needed'] = ($_POST['domain_needed']) ? true : false;
+ $config['dnsmasq']['no_private_reverse'] = ($_POST['no_private_reverse']) ? true : false;
+ $config['dnsmasq']['custom_options'] = str_replace("\r\n", "\n", $_POST['custom_options']);
+ $config['dnsmasq']['strictbind'] = ($_POST['strictbind']) ? true : false;
+
+ if (isset($_POST['enable']) && isset($config['unbound']['enable'])) {
+ if ($_POST['port'] == $config['unbound']['port']) {
+ $input_errors[] = "The DNS Resolver is enabled using this port. Choose a non-conflicting port, or disable DNS Resolver.";
+ }
+ }
+
+ if ($_POST['port']) {
+ if (is_port($_POST['port'])) {
+ $config['dnsmasq']['port'] = $_POST['port'];
+ } else {
+ $input_errors[] = gettext("You must specify a valid port number");
+ }
+ } else if (isset($config['dnsmasq']['port'])) {
+ unset($config['dnsmasq']['port']);
+ }
+
+ if (is_array($_POST['interface'])) {
+ $config['dnsmasq']['interface'] = implode(",", $_POST['interface']);
+ } elseif (isset($config['dnsmasq']['interface'])) {
+ unset($config['dnsmasq']['interface']);
+ }
+
+ if ($config['dnsmasq']['custom_options']) {
+ $args = '';
+ foreach (preg_split('/\s+/', $config['dnsmasq']['custom_options']) as $c) {
+ $args .= escapeshellarg("--{$c}") . " ";
+ }
+ exec("/usr/local/sbin/dnsmasq --test $args", $output, $rc);
+ if ($rc != 0) {
+ $input_errors[] = gettext("Invalid custom options");
+ }
+ }
+
+ if (!$input_errors) {
+ write_config();
+
+ $retval = 0;
+ $retval = services_dnsmasq_configure();
+ $savemsg = get_std_save_message($retval);
+
+ // Reload filter (we might need to sync to CARP hosts)
+ filter_configure();
+ /* Update resolv.conf in case the interface bindings exclude localhost. */
+ system_resolvconf_generate();
+ /* Start or restart dhcpleases when it's necessary */
+ system_dhcpleases_configure();
+
+ if ($retval == 0) {
+ clear_subsystem_dirty('hosts');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($_GET['type'] == 'host') {
+ if ($a_hosts[$_GET['id']]) {
+ unset($a_hosts[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('hosts');
+ header("Location: services_dnsmasq.php");
+ exit;
+ }
+ }
+ elseif ($_GET['type'] == 'doverride') {
+ if ($a_domainOverrides[$_GET['id']]) {
+ unset($a_domainOverrides[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('hosts');
+ header("Location: services_dnsmasq.php");
+ exit;
+ }
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DNS forwarder"));
+$shortcut_section = "forwarder";
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_over) {
+ var endis;
+ endis = !(document.iform.enable.checked || enable_over);
+ document.iform.regdhcp.disabled = endis;
+ document.iform.regdhcpstatic.disabled = endis;
+ document.iform.dhcpfirst.disabled = endis;
+}
+function show_advanced_dns() {
+ document.getElementById("showadvbox").innerHTML='';
+ aodiv = document.getElementById('showadv');
+ aodiv.style.display = "block";
+}
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dnsmasq.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('hosts')): ?><br/>
+<?php print_info_box_np(gettext("The DNS forwarder configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dns forwarder">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General DNS Forwarder Options");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable'] == "yes") echo "checked=\"checked\"";?> onclick="enable_change(false)" />
+ <strong>
+ <?=gettext("Enable DNS forwarder");?><br />
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCP Registration");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="regdhcp" type="checkbox" id="regdhcp" value="yes" <?php if ($pconfig['regdhcp'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Register DHCP leases in DNS forwarder");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, then machines that specify".
+ " their hostname when requesting a DHCP lease will be registered".
+ " in the DNS forwarder, so that their name can be resolved.".
+ " You should also set the domain in %sSystem:".
+ " General setup%s to the proper value."), '<a href="system.php">', '</a>')?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Static DHCP");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="regdhcpstatic" type="checkbox" id="regdhcpstatic" value="yes" <?php if ($pconfig['regdhcpstatic'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Register DHCP static mappings in DNS forwarder");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, then DHCP static mappings will ".
+ "be registered in the DNS forwarder, so that their name can be ".
+ "resolved. You should also set the domain in %s".
+ "System: General setup%s to the proper value."), '<a href="system.php">', '</a>');?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Prefer DHCP");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="dhcpfirst" type="checkbox" id="dhcpfirst" value="yes" <?php if ($pconfig['dhcpfirst'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Resolve DHCP mappings first");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, then DHCP mappings will ".
+ "be resolved before the manual list of names below. This only ".
+ "affects the name given for a reverse lookup (PTR)."));?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="3" width="22%" valign="top" class="vncellreq"><?=gettext("DNS Query Forwarding");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="strict_order" type="checkbox" id="strict_order" value="yes" <?php if ($pconfig['strict_order'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Query DNS servers sequentially");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
+ "query the DNS servers sequentially in the order specified (<i>System - General Setup - DNS Servers</i>), ".
+ "rather than all at once in parallel. "), $g['product_name']); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="domain_needed" type="checkbox" id="domain_needed" value="yes" <?php if ($pconfig['domain_needed'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Require domain");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
+ "not forward A or AAAA queries for plain names, without dots or domain parts, to upstream name servers. ".
+ "If the name is not known from /etc/hosts or DHCP then a \"not found\" answer is returned. "), $g['product_name']); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="no_private_reverse" type="checkbox" id="no_private_reverse" value="yes" <?php if ($pconfig['no_private_reverse'] == "yes") echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Do not forward private reverse lookups");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, %s DNS Forwarder (dnsmasq) will ".
+ "not forward reverse DNS lookups (PTR) for private addresses (RFC 1918) to upstream name servers. ".
+ "Any entries in the Domain Overrides section forwarding private \"n.n.n.in-addr.arpa\" names to a specific server are still forwarded. ".
+ "If the IP to name is not known from /etc/hosts, DHCP or a specific domain override then a \"not found\" answer is immediately returned. "), $g['product_name']); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Listen Port");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="port" type="text" id="port" size="6" <?php if ($pconfig['port']) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> />
+ <br /><br />
+ <?=gettext("The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53.");?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" rowspan="2" class="vncellreq"><?=gettext("Interfaces"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ $interface_addresses = get_possible_listen_ips(true);
+ ?>
+ <?=gettext("Interface IPs used by the DNS Forwarder for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address.");?>
+ <br /><br />
+ <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="5">
+ <option value="" <?php if (empty($pconfig['interface']) || empty($pconfig['interface'][0])) echo 'selected="selected"'; ?>>All</option>
+ <?php
+ foreach ($interface_addresses as $laddr => $ldescr):
+ $selected = "";
+ if (in_array($laddr, $pconfig['interface'])) {
+ $selected = 'selected="selected"';
+ }
+ ?>
+ <option value="<?=$laddr;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ldescr);?>
+ </option>
+ <?php
+ endforeach;
+ unset($interface_addresses);
+ ?>
+ </select>
+ <br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="strictbind" type="checkbox" id="strictbind" value="yes" <?php if ($pconfig['strictbind'] == "yes") echo "checked=\"checked\"";?> />
+ <strong><?=gettext("Strict Interface Binding");?></strong>
+ <br />
+ <?= gettext("If this option is set, the DNS forwarder will only bind to the interfaces containing the IP addresses selected above, rather than binding to all interfaces and discarding queries to other addresses."); ?>
+ <br /><br />
+ <?= gettext("NOTE: This option does NOT work with IPv6. If set, dnsmasq will not bind to IPv6 addresses."); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Advanced");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvbox" <?php if ($pconfig['custom_options']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_dns()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showadv" <?php if (empty($pconfig['custom_options'])) echo "style='display:none'"; ?>>
+ <strong><?=gettext("Advanced");?><br /></strong>
+ <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
+ <?=gettext("Enter any additional options you would like to add to the dnsmasq configuration here, separated by a space or newline"); ?><br />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+</table>
+
+<p>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?php printf(gettext("If the DNS forwarder is enabled, the DHCP".
+ " service (if enabled) will automatically serve the LAN IP".
+ " address as a DNS server to DHCP clients so they will use".
+ " the forwarder. The DNS forwarder will use the DNS servers".
+ " entered in %sSystem: General setup%s".
+ " or those obtained via DHCP or PPP on WAN if the &quot;Allow".
+ " DNS server list to be overridden by DHCP/PPP on WAN&quot;".
+ " is checked. If you don't use that option (or if you use".
+ " a static IP address on WAN), you must manually specify at".
+ " least one DNS server on the %sSystem:".
+ "General setup%s page."), '<a href="system.php">', '</a>', '<a href="system.php">', '</a>');?><br />
+ </span>
+</p>
+
+&nbsp;<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="host overrides">
+ <tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("Host Overrides");?></td>
+ </tr>
+ <tr>
+ <td>
+ <br />
+ <?=gettext("Entries in this section override individual results from the forwarders.");?>
+ <?=gettext("Use these for changing DNS results or for adding custom DNS records.");?>
+ </td>
+ </tr>
+</table>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
+ <thead>
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Host");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Domain");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle">
+ <a href="services_dnsmasq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle">
+ <a href="services_dnsmasq_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_hosts as $hostent):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=strtolower($hostent['host']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=strtolower($hostent['domain']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=$hostent['ip'];?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($hostent['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_dnsmasq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td>
+ <a href="services_dnsmasq.php?type=host&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])):
+ foreach ($hostent['aliases']['item'] as $alias):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=strtolower($alias['host']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=strtolower($alias['domain']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ Alias for <?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain'];?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_dnsmasq_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($alias['description']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_dnsmasq_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+ $i++;
+ endforeach;
+?>
+ <tr style="display:none">
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="domain overrides">
+ <tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("Domain Overrides");?></td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <?=gettext("Entries in this area override an entire domain, and subdomains, by specifying an".
+ " authoritative DNS server to be queried for that domain.");?>
+ </p>
+ </td>
+ </tr>
+</table>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
+ <thead>
+ <tr>
+ <td width="35%" class="listhdrr"><?=gettext("Domain");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
+ <td width="35%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_dnsmasq_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td>
+ <a href="services_dnsmasq_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_domainOverrides as $doment):
+?>
+ <tr>
+ <td class="listlr">
+ <?=strtolower($doment['domain']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=$doment['ip'];?>&nbsp;
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($doment['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_dnsmasq_domainoverride_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="services_dnsmasq.php?act=del&amp;type=doverride&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this domain override?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr style="display:none">
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dnsmasq_domainoverride_edit.php b/src/usr/local/www/services_dnsmasq_domainoverride_edit.php
new file mode 100644
index 0000000..ca66b49
--- /dev/null
+++ b/src/usr/local/www/services_dnsmasq_domainoverride_edit.php
@@ -0,0 +1,197 @@
+<?php
+/*
+ services_dnsmasq_domainoverride_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2005 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsforwarder
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dnsforwarder-editdomainoverride
+##|*NAME=Services: DNS Forwarder: Edit Domain Override page
+##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page.
+##|*MATCH=services_dnsmasq_domainoverride_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php');
+}
+
+if (!is_array($config['dnsmasq']['domainoverrides'])) {
+ $config['dnsmasq']['domainoverrides'] = array();
+}
+$a_domainOverrides = &$config['dnsmasq']['domainoverrides'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_domainOverrides[$id]) {
+ $pconfig['domain'] = $a_domainOverrides[$id]['domain'];
+ if (is_ipaddr($a_domainOverrides[$id]['ip']) && ($a_domainOverrides[$id]['ip'] != '#')) {
+ $pconfig['ip'] = $a_domainOverrides[$id]['ip'];
+ } else {
+ $dnsmasqpieces = explode('@', $a_domainOverrides[$id]['ip'], 2);
+ $pconfig['ip'] = $dnsmasqpieces[0];
+ $pconfig['dnssrcip'] = $dnsmasqpieces[1];
+ }
+ $pconfig['descr'] = $a_domainOverrides[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "domain ip");
+ $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ function String_Begins_With($needle, $haystack) {
+ return (substr($haystack, 0, strlen($needle)) == $needle);
+ }
+
+ if (String_Begins_With(_msdcs, $_POST['domain'])) {
+ $subdomainstr = substr($_POST['domain'], 7);
+ if ($subdomainstr && !is_domain($subdomainstr)) {
+ $input_errors[] = gettext("A valid domain must be specified after _msdcs.");
+ }
+ } elseif ($_POST['domain'] && !is_domain($_POST['domain'])) {
+ $input_errors[] = gettext("A valid domain must be specified.");
+ }
+ if ($_POST['ip'] && !is_ipaddr($_POST['ip']) && ($_POST['ip'] != '#') && ($_POST['ip'] != '!')) {
+ $input_errors[] = gettext("A valid IP address must be specified, or # for an exclusion or ! to not forward at all.");
+ }
+ if ($_POST['dnssrcip'] && !in_array($_POST['dnssrcip'], get_configured_ip_addresses())) {
+ $input_errors[] = gettext("An interface IP address must be specified for the DNS query source.");
+ }
+ if (!$input_errors) {
+ $doment = array();
+ $doment['domain'] = $_POST['domain'];
+ if (empty($_POST['dnssrcip'])) {
+ $doment['ip'] = $_POST['ip'];
+ } else {
+ $doment['ip'] = $_POST['ip'] . "@" . $_POST['dnssrcip'];
+ }
+ $doment['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_domainOverrides[$id]) {
+ $a_domainOverrides[$id] = $doment;
+ } else {
+ $a_domainOverrides[] = $doment;
+ }
+
+ $retval = services_dnsmasq_configure();
+
+ write_config();
+
+ header("Location: services_dnsmasq.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("DNS forwarder"), gettext("Edit Domain Override"));
+$shortcut_section = "forwarder";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_dnsmasq_domainoverride_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="domain override">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Domain to override (NOTE: this does not have to be a valid TLD!)"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("test"); ?></em> <?=gettext("or"); ?> <em>mycompany.localdomain</em> <?=gettext("or"); ?> <em>1.168.192.in-addr.arpa</em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("IP address of the authoritative DNS server for this domain"); ?><br />
+ <?=gettext("e.g."); ?> <em>192.168.100.100</em><br /><?=gettext("Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override."); ?><br /><?=gettext("Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Source IP");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="dnssrcip" type="text" class="formfld unknown" id="dnssrcip" size="40" value="<?=htmlspecialchars($pconfig['dnssrcip']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Source IP address for queries to the DNS server for the override domain."); ?><br />
+ <?=gettext("Leave blank unless your DNS server is accessed through a VPN tunnel."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_domainOverrides[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dnsmasq_edit.php b/src/usr/local/www/services_dnsmasq_edit.php
new file mode 100644
index 0000000..4b4c1c4
--- /dev/null
+++ b/src/usr/local/www/services_dnsmasq_edit.php
@@ -0,0 +1,345 @@
+<?php
+/* $Id$ */
+/*
+ services_dnsmasq_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsforwarder
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dnsforwarder-edithost
+##|*NAME=Services: DNS Forwarder: Edit host page
+##|*DESCR=Allow access to the 'Services: DNS Forwarder: Edit host' page.
+##|*MATCH=services_dnsmasq_edit.php*
+##|-PRIV
+
+function hostcmp($a, $b) {
+ return strcasecmp($a['host'], $b['host']);
+}
+
+function hosts_sort() {
+ global $g, $config;
+
+ if (!is_array($config['dnsmasq']['hosts'])) {
+ return;
+ }
+
+ usort($config['dnsmasq']['hosts'], "hostcmp");
+}
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_dnsmasq.php');
+}
+
+if (!is_array($config['dnsmasq']['hosts'])) {
+ $config['dnsmasq']['hosts'] = array();
+}
+
+$a_hosts = &$config['dnsmasq']['hosts'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_hosts[$id]) {
+ $pconfig['host'] = $a_hosts[$id]['host'];
+ $pconfig['domain'] = $a_hosts[$id]['domain'];
+ $pconfig['ip'] = $a_hosts[$id]['ip'];
+ $pconfig['descr'] = $a_hosts[$id]['descr'];
+ $pconfig['aliases'] = $a_hosts[$id]['aliases'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "domain ip");
+ $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['host']) {
+ if (!is_hostname($_POST['host'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
+ } else {
+ if (!is_unqualified_hostname($_POST['host'])) {
+ $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+
+ if (($_POST['domain'] && !is_domain($_POST['domain']))) {
+ $input_errors[] = gettext("A valid domain must be specified.");
+ }
+
+ if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
+ $input_errors[] = gettext("A valid IP address must be specified.");
+ }
+
+ /* collect aliases */
+ $aliases = array();
+ foreach ($_POST as $key => $value) {
+ $entry = '';
+ if (!substr_compare('aliashost', $key, 0, 9)) {
+ $entry = substr($key, 9);
+ $field = 'host';
+ }
+ elseif (!substr_compare('aliasdomain', $key, 0, 11)) {
+ $entry = substr($key, 11);
+ $field = 'domain';
+ }
+ elseif (!substr_compare('aliasdescription', $key, 0, 16)) {
+ $entry = substr($key, 16);
+ $field = 'description';
+ }
+ if (ctype_digit($entry)) {
+ $aliases[$entry][$field] = $value;
+ }
+ }
+ $pconfig['aliases']['item'] = $aliases;
+
+ /* validate aliases */
+ foreach ($aliases as $idx => $alias) {
+ $aliasreqdfields = array('aliasdomain' . $idx);
+ $aliasreqdfieldsn = array(gettext("Alias Domain"));
+
+ do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors);
+ if ($alias['host']) {
+ if (!is_hostname($alias['host'])) {
+ $input_errors[] = gettext("Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. They may not start or end with '-'.");
+ } else {
+ if (!is_unqualified_hostname($alias['host'])) {
+ $input_errors[] = gettext("A valid alias hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+ if (($alias['domain'] && !is_domain($alias['domain']))) {
+ $input_errors[] = gettext("A valid domain must be specified in alias list.");
+ }
+ }
+
+ /* check for overlaps */
+ foreach ($a_hosts as $hostent) {
+ if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) {
+ continue;
+ }
+
+ if (($hostent['host'] == $_POST['host']) &&
+ ($hostent['domain'] == $_POST['domain']) &&
+ ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) ||
+ (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) {
+ $input_errors[] = gettext("This host/domain already exists.");
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $hostent = array();
+ $hostent['host'] = $_POST['host'];
+ $hostent['domain'] = $_POST['domain'];
+ $hostent['ip'] = $_POST['ip'];
+ $hostent['descr'] = $_POST['descr'];
+ $hostent['aliases']['item'] = $aliases;
+
+ if (isset($id) && $a_hosts[$id]) {
+ $a_hosts[$id] = $hostent;
+ } else {
+ $a_hosts[] = $hostent;
+ }
+ hosts_sort();
+
+ mark_subsystem_dirty('hosts');
+
+ write_config();
+
+ header("Location: services_dnsmasq.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("DNS forwarder"), gettext("Edit host"));
+$shortcut_section = "forwarder";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "aliashost";
+ rowtype[0] = "textbox";
+ rowsize[0] = "20";
+ rowname[1] = "aliasdomain";
+ rowtype[1] = "textbox";
+ rowsize[1] = "20";
+ rowname[2] = "aliasdescription";
+ rowtype[2] = "textbox";
+ rowsize[2] = "20";
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_dnsmasq_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dns edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit DNS Forwarder entry");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Host");?></td>
+ <td width="78%" class="vtable">
+ <input name="host" type="text" class="formfld unknown" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Name of the host, without domain part"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("myhost"); ?></em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
+ <td width="78%" class="vtable">
+ <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Domain of the host"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("example.com"); ?></em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("IP address of the host"); ?><br />
+ <?=gettext("e.g."); ?> <em>192.168.100.100</em> <?=gettext("or"); ?> <em>fd00:abcd::1</em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("Aliases"); ?></div></td>
+ <td width="78%" class="vtable">
+ <table id="maintable" summary="aliases">
+ <tbody>
+ <tr>
+ <td colspan="4">
+ <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
+ <?=gettext("Enter additional names for this host."); ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Host");?></div></td>
+ <td><div id="twocolumn"><?=gettext("Domain");?></div></td>
+ <td><div id="threecolumn"><?=gettext("Description");?></div></td>
+ </tr>
+<?php
+ $counter = 0;
+ if ($pconfig['aliases']['item']):
+ foreach ($pconfig['aliases']['item'] as $item):
+ $host = $item['host'];
+ $domain = $item['domain'];
+ $description = $item['description'];
+?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="aliashost<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliashost<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+ <td>
+ <input autocomplete="off" name="aliasdomain<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdomain<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($domain);?>" />
+ </td>
+ <td>
+ <input name="aliasdescription<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdescription<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($description);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+ endforeach;
+ endif;
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_hosts[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dyndns.php b/src/usr/local/www/services_dyndns.php
new file mode 100644
index 0000000..5051f00
--- /dev/null
+++ b/src/usr/local/www/services_dyndns.php
@@ -0,0 +1,229 @@
+<?php
+/* $Id$ */
+/*
+ services_dyndns.php
+
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/host
+ pfSense_MODULE: dyndns
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dynamicdnsclients
+##|*NAME=Services: Dynamic DNS clients page
+##|*DESCR=Allow access to the 'Services: Dynamic DNS clients' page.
+##|*MATCH=services_dyndns.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['dyndnses']['dyndns'])) {
+ $config['dyndnses']['dyndns'] = array();
+}
+
+$a_dyndns = &$config['dyndnses']['dyndns'];
+
+if ($_GET['act'] == "del") {
+
+ $conf = $a_dyndns[$_GET['id']];
+ @unlink("{$g['conf_path']}/dyndns_{$conf['interface']}{$conf['type']}" . escapeshellarg($conf['host']) . "{$conf['id']}.cache");
+ unset($a_dyndns[$_GET['id']]);
+
+ write_config();
+ services_dyndns_configure();
+
+ header("Location: services_dyndns.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Services"), gettext("Dynamic DNS clients"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_dyndns.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="dynamic dns">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("DynDns"), true, "services_dyndns.php");
+ $tab_array[] = array(gettext("RFC 2136"), false, "services_rfc2136.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="5%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Service");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Cached IP");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_dyndns as $dyndns):
+?>
+ <tr ondblclick="document.location='services_dyndns_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+<?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc) {
+ if ($dyndns['interface'] == $if) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">{$ifdesc}</span>";
+ } else {
+ echo "{$ifdesc}";
+ }
+ break;
+ }
+ }
+ $groupslist = return_gateway_groups_array();
+ foreach ($groupslist as $if => $group) {
+ if ($dyndns['interface'] == $if) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">{$if}</span>";
+ } else {
+ echo "{$if}";
+ }
+ break;
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
+ $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
+ for ($j = 0; $j < count($vals); $j++) {
+ if ($vals[$j] == $dyndns['type']) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">" . htmlspecialchars($types[$j]) . "</span>";
+ } else {
+ echo htmlspecialchars($types[$j]);
+ }
+ break;
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">" . htmlspecialchars($dyndns['host']) . "</span>";
+ } else {
+ echo htmlspecialchars($dyndns['host']);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ $filename = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}.cache";
+ $filename_v6 = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}_v6.cache";
+ if (file_exists($filename)) {
+ $ipaddr = dyndnsCheckIP($dyndns['interface']);
+ $cached_ip_s = explode(":", file_get_contents($filename));
+ $cached_ip = $cached_ip_s[0];
+ if ($ipaddr <> $cached_ip) {
+ echo "<font color='red'>";
+ } else {
+ echo "<font color='green'>";
+ }
+ echo htmlspecialchars($cached_ip);
+ echo "</font>";
+ } else if (file_exists($filename_v6)) {
+ $ipv6addr = get_interface_ipv6($dyndns['interface']);
+ $cached_ipv6_s = explode("|", file_get_contents($filename_v6));
+ $cached_ipv6 = $cached_ipv6_s[0];
+ if ($ipv6addr <> $cached_ipv6) {
+ echo "<font color='red'>";
+ } else {
+ echo "<font color='green'>";
+ }
+ echo htmlspecialchars($cached_ipv6);
+ echo "</font>";
+ } else {
+ echo "N/A";
+ }
+?>
+ </td>
+ <td class="listbg">
+<?php
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">".htmlspecialchars($dyndns['descr'])."</span>";
+ } else {
+ echo htmlspecialchars($dyndns['descr']);
+ }
+?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_dyndns_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="services_dyndns.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="5"></td>
+ <td class="list">
+ <a href="services_dyndns_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5" class="list">
+ <p class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?=gettext("IP addresses appearing in green are up to date with Dynamic DNS provider.");?><br />
+ <?=gettext("You can force an update for an IP address on the edit page for that service.");?>
+ </p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_dyndns_edit.php b/src/usr/local/www/services_dyndns_edit.php
new file mode 100644
index 0000000..a619ce9
--- /dev/null
+++ b/src/usr/local/www/services_dyndns_edit.php
@@ -0,0 +1,485 @@
+<?php
+/* $Id$ */
+/*
+ services_dyndns_edit.php
+
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: dyndns
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dynamicdnsclient
+##|*NAME=Services: Dynamic DNS client page
+##|*DESCR=Allow access to the 'Services: Dynamic DNS client' page.
+##|*MATCH=services_dyndns_edit.php*
+##|-PRIV
+
+/* returns true if $uname is a valid DynDNS username */
+function is_dyndns_username($uname) {
+ if (!is_string($uname)) {
+ return false;
+ }
+
+ if (preg_match("/[^a-z0-9\-\+.@_:]/i", $uname)) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+require("guiconfig.inc");
+
+if (!is_array($config['dyndnses']['dyndns'])) {
+ $config['dyndnses']['dyndns'] = array();
+}
+
+$a_dyndns = &$config['dyndnses']['dyndns'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && isset($a_dyndns[$id])) {
+ $pconfig['username'] = $a_dyndns[$id]['username'];
+ $pconfig['password'] = $a_dyndns[$id]['password'];
+ $pconfig['host'] = $a_dyndns[$id]['host'];
+ $pconfig['mx'] = $a_dyndns[$id]['mx'];
+ $pconfig['type'] = $a_dyndns[$id]['type'];
+ $pconfig['enable'] = !isset($a_dyndns[$id]['enable']);
+ $pconfig['interface'] = $a_dyndns[$id]['interface'];
+ $pconfig['wildcard'] = isset($a_dyndns[$id]['wildcard']);
+ $pconfig['verboselog'] = isset($a_dyndns[$id]['verboselog']);
+ $pconfig['curl_ipresolve_v4'] = isset($a_dyndns[$id]['curl_ipresolve_v4']);
+ $pconfig['curl_ssl_verifypeer'] = isset($a_dyndns[$id]['curl_ssl_verifypeer']);
+ $pconfig['zoneid'] = $a_dyndns[$id]['zoneid'];
+ $pconfig['ttl'] = $a_dyndns[$id]['ttl'];
+ $pconfig['updateurl'] = $a_dyndns[$id]['updateurl'];
+ $pconfig['resultmatch'] = $a_dyndns[$id]['resultmatch'];
+ $pconfig['requestif'] = $a_dyndns[$id]['requestif'];
+ $pconfig['descr'] = $a_dyndns[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (($pconfig['type'] == "freedns" || $pconfig['type'] == "namecheap") && $_POST['username'] == "") {
+ $_POST['username'] = "none";
+ }
+
+ /* input validation */
+ $reqdfields = array();
+ $reqdfieldsn = array();
+ $reqdfields = array("type");
+ $reqdfieldsn = array(gettext("Service type"));
+ if ($pconfig['type'] != "custom" && $pconfig['type'] != "custom-v6") {
+ $reqdfields[] = "host";
+ $reqdfieldsn[] = gettext("Hostname");
+ $reqdfields[] = "passwordfld";
+ $reqdfieldsn[] = gettext("Password");
+ $reqdfields[] = "username";
+ $reqdfieldsn[] = gettext("Username");
+ } else {
+ $reqdfields[] = "updateurl";
+ $reqdfieldsn[] = gettext("Update URL");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (isset($_POST['host']) && in_array("host", $reqdfields)) {
+ /* Namecheap can have a @. in hostname */
+ if ($pconfig['type'] == "namecheap" && substr($_POST['host'], 0, 2) == '@.') {
+ $host_to_check = substr($_POST['host'], 2);
+ } else {
+ $host_to_check = $_POST['host'];
+ }
+
+ if ($pconfig['type'] != "custom" && $pconfig['type'] != "custom-v6") {
+ if (!is_domain($host_to_check)) {
+ $input_errors[] = gettext("The hostname contains invalid characters.");
+ }
+ }
+
+ unset($host_to_check);
+ }
+ if (($_POST['mx'] && !is_domain($_POST['mx']))) {
+ $input_errors[] = gettext("The MX contains invalid characters.");
+ }
+ if ((in_array("username", $reqdfields) && $_POST['username'] && !is_dyndns_username($_POST['username'])) || ((in_array("username", $reqdfields)) && ($_POST['username'] == ""))) {
+ $input_errors[] = gettext("The username contains invalid characters.");
+ }
+
+ if (!$input_errors) {
+ $dyndns = array();
+ $dyndns['type'] = $_POST['type'];
+ $dyndns['username'] = $_POST['username'];
+ $dyndns['password'] = $_POST['passwordfld'];
+ $dyndns['host'] = $_POST['host'];
+ $dyndns['mx'] = $_POST['mx'];
+ $dyndns['wildcard'] = $_POST['wildcard'] ? true : false;
+ $dyndns['verboselog'] = $_POST['verboselog'] ? true : false;
+ $dyndns['curl_ipresolve_v4'] = $_POST['curl_ipresolve_v4'] ? true : false;
+ $dyndns['curl_ssl_verifypeer'] = $_POST['curl_ssl_verifypeer'] ? true : false;
+ /* In this place enable means disabled */
+ if ($_POST['enable']) {
+ unset($dyndns['enable']);
+ } else {
+ $dyndns['enable'] = true;
+ }
+ $dyndns['interface'] = $_POST['interface'];
+ $dyndns['zoneid'] = $_POST['zoneid'];
+ $dyndns['ttl'] = $_POST['ttl'];
+ $dyndns['updateurl'] = $_POST['updateurl'];
+ // Trim hard-to-type but sometimes returned characters
+ $dyndns['resultmatch'] = trim($_POST['resultmatch'], "\t\n\r");
+ ($dyndns['type'] == "custom" || $dyndns['type'] == "custom-v6") ? $dyndns['requestif'] = $_POST['requestif'] : $dyndns['requestif'] = $_POST['interface'];
+ $dyndns['descr'] = $_POST['descr'];
+ $dyndns['force'] = isset($_POST['force']);
+
+ if ($dyndns['username'] == "none") {
+ $dyndns['username'] = "";
+ }
+
+ if (isset($id) && $a_dyndns[$id]) {
+ $a_dyndns[$id] = $dyndns;
+ } else {
+ $a_dyndns[] = $dyndns;
+ $id = count($a_dyndns) - 1;
+ }
+
+ $dyndns['id'] = $id;
+ //Probably overkill, but its better to be safe
+ for ($i = 0; $i < count($a_dyndns); $i++) {
+ $a_dyndns[$i]['id'] = $i;
+ }
+
+ write_config();
+
+ services_dyndns_configure_client($dyndns);
+
+ header("Location: services_dyndns.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Dynamic DNS client"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<script type="text/javascript">
+//<![CDATA[
+function _onTypeChange(type) {
+ switch (type) {
+ case "custom":
+ case "custom-v6":
+ document.getElementById("_resulttr").style.display = '';
+ document.getElementById("_urltr").style.display = '';
+ document.getElementById("_requestiftr").style.display = '';
+ document.getElementById("_curloptions").style.display = '';
+ document.getElementById("_hostnametr").style.display = 'none';
+ document.getElementById("_mxtr").style.display = 'none';
+ document.getElementById("_wildcardtr").style.display = 'none';
+ document.getElementById("r53_zoneid").style.display='none';
+ document.getElementById("r53_ttl").style.display='none';
+ break;
+ case "dnsimple":
+ case "route53":
+ document.getElementById("_resulttr").style.display = 'none';
+ document.getElementById("_urltr").style.display = 'none';
+ document.getElementById("_requestiftr").style.display = 'none';
+ document.getElementById("_curloptions").style.display = 'none';
+ document.getElementById("_hostnametr").style.display = '';
+ document.getElementById("_mxtr").style.display = '';
+ document.getElementById("_wildcardtr").style.display = '';
+ document.getElementById("r53_zoneid").style.display='';
+ document.getElementById("r53_ttl").style.display='';
+ break;
+ default:
+ document.getElementById("_resulttr").style.display = 'none';
+ document.getElementById("_urltr").style.display = 'none';
+ document.getElementById("_requestiftr").style.display = 'none';
+ document.getElementById("_curloptions").style.display = 'none';
+ document.getElementById("_hostnametr").style.display = '';
+ document.getElementById("_mxtr").style.display = '';
+ document.getElementById("_wildcardtr").style.display = '';
+ document.getElementById("r53_zoneid").style.display='none';
+ document.getElementById("r53_ttl").style.display='none';
+ }
+}
+//]]>
+</script>
+<form action="services_dyndns_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="dynamic dns edit">
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="title">
+ <tr>
+ <td class="optsect_s"><strong><?=gettext("Dynamic DNS client");?></strong></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable");?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" id="enable" value="<?=gettext("yes");?>" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Service type");?></td>
+ <td width="78%" class="vtable">
+ <select name="type" class="formselect" id="type" onchange="_onTypeChange(this.options[this.selectedIndex].value);">
+ <?php
+ $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
+ $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
+ $j = 0;
+ for ($j = 0; $j < count($vals); $j++):
+ ?>
+ <option value="<?=$vals[$j];?>" <?php if ($vals[$j] == $pconfig['type']) echo "selected=\"selected\"";?>>
+ <?=htmlspecialchars($types[$j]);?>
+ </option>
+ <?php
+ endfor;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect" id="interface">
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc) {
+ echo "<option value=\"{$if}\"";
+ if ($pconfig['interface'] == $if) {
+ echo "selected=\"selected\"";
+ }
+ echo ">{$ifdesc}</option>\n";
+ }
+ unset($iflist);
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ echo "<option value=\"{$name}\"";
+ if ($pconfig['interface'] == $name) {
+ echo "selected=\"selected\"";
+ }
+ echo ">GW Group {$name}</option>\n";
+ }
+ unset($grouplist);
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="_requestiftr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to send update from");?></td>
+ <td width="78%" class="vtable">
+ <select name="requestif" class="formselect" id="requestif">
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc) {
+ echo "<option value=\"{$if}\"";
+ if ($pconfig['requestif'] == $if) {
+ echo "selected=\"selected\"";
+ }
+ echo ">{$ifdesc}</option>\n";
+ }
+ unset($iflist);
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ echo "<option value=\"{$name}\"";
+ if ($pconfig['requestif'] == $name) {
+ echo "selected=\"selected\"";
+ }
+ echo ">GW Group {$name}</option>\n";
+ }
+ unset($grouplist);
+ ?>
+ </select>
+ <br /><?=gettext("Note: This is almost always the same as the Interface to Monitor.");?>
+ </td>
+ </tr>
+ <tr id="_hostnametr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
+ <td width="78%" class="vtable">
+ <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>" />
+ <br />
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("Note:");?><br /></strong>
+ </span>
+ <?=gettext("Enter the complete host/domain name. example: myhost.dyndns.org");?><br />
+ <?=gettext("he.net tunnelbroker: Enter your tunnel ID");?><br />
+ <?=gettext("GleSYS: Enter your record ID");?><br />
+ <?=gettext("DNSimple: Enter only the domain name");?><br />
+ <?=gettext("DNS Made Easy: Enter your record ID separated by commas if more than one at a time");?>
+ </span>
+ </td>
+ </tr>
+ <tr id="_mxtr">
+ <td width="22%" valign="top" class="vncell"><?=gettext("MX"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="mx" type="text" class="formfld unknown" id="mx" size="30" value="<?=htmlspecialchars($pconfig['mx']);?>" />
+ <br />
+ <?=gettext("Note: With DynDNS service you can only use a hostname, not an IP address.");?>
+ <br />
+ <?=gettext("Set this option only if you need a special MX record. Not all services support this.");?>
+ </td>
+ </tr>
+ <tr id="_wildcardtr">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Wildcards"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="wildcard" type="checkbox" id="wildcard" value="yes" <?php if ($pconfig['wildcard']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable ");?><?=gettext("Wildcard"); ?>
+ </td>
+ </tr>
+ <tr id="_verboselogtr">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Verbose logging"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="verboselog" type="checkbox" id="verboselog" value="yes" <?php if ($pconfig['verboselog']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable ");?><?=gettext("verbose logging"); ?>
+ </td>
+ </tr>
+ <tr id="_curloptions">
+ <td width="22%" valign="top" class="vncell"><?=gettext("CURL options"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="curl_ipresolve_v4" type="checkbox" id="curl_ipresolve_v4" value="yes" <?php if ($pconfig['curl_ipresolve_v4']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Force IPv4 resolving"); ?><br />
+ <input name="curl_ssl_verifypeer" type="checkbox" id="curl_ssl_verifypeer" value="yes" <?php if ($pconfig['curl_ssl_verifypeer']) echo "checked=\"checked\""; ?> />
+ <?=gettext("Verify SSL peer"); ?>
+ </td>
+ </tr>
+ <tr id="_usernametr">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
+ <td width="78%" class="vtable">
+ <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
+ <br /><?=gettext("Username is required for all types except Namecheap, FreeDNS and Custom Entries.");?>
+ <br /><?=gettext("Route 53: Enter your Access Key ID.");?>
+ <br /><?=gettext("GleSYS: Enter your API user.");?>
+ <br /><?=gettext("For Custom Entries, Username and Password represent HTTP Authentication username and passwords.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
+ <td width="78%" class="vtable">
+ <input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" value="<?=htmlspecialchars($pconfig['password']);?>" />
+ <br />
+ <?=gettext("FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided by FreeDNS.");?>
+ <br /><?=gettext("Route 53: Enter your Secret Access Key.");?>
+ <br /><?=gettext("GleSYS: Enter your API key.");?>
+ <br /><?=gettext("DNSimple: Enter your API token.");?>
+ </td>
+ </tr>
+ <tr id="r53_zoneid" style="display:none">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Zone ID");?></td>
+ <td width="78%" class="vtable">
+ <input name="zoneid" type="text" class="formfld user" id="zoneid" size="20" value="<?=htmlspecialchars($pconfig['zoneid']);?>" />
+ <br /><?=gettext("Enter Zone ID that you received when you created your domain in Route 53.");?>
+ <br /><?=gettext("DNSimple: Enter the Record ID of record to update.");?>
+ </td>
+ </tr>
+ <tr id="_urltr">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Update URL");?></td>
+ <td width="78%" class="vtable">
+ <input name="updateurl" type="text" class="formfld unknown" id="updateurl" size="60" value="<?=htmlspecialchars($pconfig['updateurl']);?>" />
+ <br /><?=gettext("This is the only field required by for Custom Dynamic DNS, and is only used by Custom Entries.");?>
+ <br /><?=gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
+ </td>
+ </tr>
+ <tr id="_resulttr">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Result Match");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="resultmatch" class="formpre" id="resultmatch" cols="65" rows="7"><?=htmlspecialchars($pconfig['resultmatch']);?></textarea>
+ <br /><?=gettext("This field is only used by Custom Dynamic DNS Entries.");?>
+ <br /><?=gettext("This field should be identical to what your DDNS Provider will return if the update succeeds, leave it blank to disable checking of returned results.");?>
+ <br /><?=gettext("If you need the new IP to be included in the request, put %IP% in its place.");?>
+ <br /><?=gettext("If you need to include multiple possible values, separate them with a |. If your provider includes a |, escape it with \\|");?>
+ <br /><?=gettext("Tabs (\\t), newlines (\\n) and carriage returns (\\r) at the beginning or end of the returned results are removed before comparison.");?>
+ </td>
+ </tr>
+ <tr id="r53_ttl" style="display:none">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("TTL");?></td>
+ <td width="78%" class="vtable">
+ <input name="ttl" type="text" class="formfld user" id="ttl" size="20" value="<?=htmlspecialchars($pconfig['ttl']);?>" />
+ <br /><?=gettext("Choose TTL for your dns record.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ <a href="services_dyndns.php"><input name="cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
+ <?php if (isset($id) && $a_dyndns[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <input name="force" type="submit" class="formbtn" value="<?=gettext("Save & Force Update");?>" onclick="enable_change(true)" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?php printf(gettext("You must configure a DNS server in %sSystem:
+ General setup%s or allow the DNS server list to be overridden
+ by DHCP/PPP on WAN for dynamic DNS updates to work."), '<a href="system.php">', '</a>');?>
+ </span>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+_onTypeChange("<?php echo $pconfig['type']; ?>");
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/services_igmpproxy.php b/src/usr/local/www/services_igmpproxy.php
new file mode 100644
index 0000000..8749b2d
--- /dev/null
+++ b/src/usr/local/www/services_igmpproxy.php
@@ -0,0 +1,189 @@
+<?php
+/* $Id$ */
+/*
+ services_igmpproxy.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: igmpproxy
+*/
+
+##|+PRIV
+##|*IDENT=page-services-igmpproxy
+##|*NAME=Services: Igmpproxy page
+##|*DESCR=Allow access to the 'Services: Igmpproxy' page.
+##|*MATCH=services_igmpproxy.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['igmpproxy']['igmpentry'])) {
+ $config['igmpproxy']['igmpentry'] = array();
+}
+
+//igmpproxy_sort();
+$a_igmpproxy = &$config['igmpproxy']['igmpentry'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ $retval = 0;
+ /* reload all components that use igmpproxy */
+ $retval = services_igmpproxy_configure();
+
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+
+ clear_subsystem_dirty('igmpproxy');
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_igmpproxy[$_GET['id']]) {
+ unset($a_igmpproxy[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('igmpproxy');
+ header("Location: services_igmpproxy.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("IGMP Proxy"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_igmpproxy.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('igmpproxy')): ?><br/>
+<?php print_info_box_np(gettext("The IGMP entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
+<?php endif; ?>
+
+<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="igmp proxy">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Type");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Values");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle">
+ <a href="services_igmpproxy_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new igmpentry");?>" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_igmpproxy as $igmpentry):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($igmpentry['ifname']));?>
+ </td>
+ <td class="listlr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($igmpentry['type']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
+<?php
+ $addresses = implode(", ", array_slice(explode(" ", $igmpentry['address']), 0, 10));
+ echo $addresses;
+ if (count($addresses) < 10) {
+ echo " ";
+ } else {
+ echo "...";
+ }
+?>
+ </td>
+ <td class="listbg" ondblclick="document.location='services_igmpproxy_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($igmpentry['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_igmpproxy_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit igmpentry"); ?>" alt="edit" /></a></td>
+ <td>
+ <a href="services_igmpproxy.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this igmp entry? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete igmpentry");?>" alt="delete" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="services_igmpproxy_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new igmpentry");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" width="78%">
+ <br />
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont" colspan="4">
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?=gettext("Please add the interface for upstream, the allowed subnets, and the downstream interfaces you would like the proxy to allow. Only one 'upstream' interface can be configured.");?>
+ </span>
+ </p>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_igmpproxy_edit.php b/src/usr/local/www/services_igmpproxy_edit.php
new file mode 100644
index 0000000..2d299c0
--- /dev/null
+++ b/src/usr/local/www/services_igmpproxy_edit.php
@@ -0,0 +1,312 @@
+<?php
+/* $Id$ */
+/*
+ services_igmpproxy_edit.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: igmpproxy
+*/
+
+##|+PRIV
+##|*IDENT=page-services-igmpproxy-edit
+##|*NAME=Firewall: Igmpproxy: Edit page
+##|*DESCR=Allow access to the 'Services: Igmpproxy: Edit' page.
+##|*MATCH=services_igmpproxy_edit.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Firewall"), gettext("IGMP Proxy"), gettext("Edit"));
+
+require("guiconfig.inc");
+
+if (!is_array($config['igmpproxy']['igmpentry'])) {
+ $config['igmpproxy']['igmpentry'] = array();
+}
+
+//igmpproxy_sort();
+$a_igmpproxy = &$config['igmpproxy']['igmpentry'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_igmpproxy[$id]) {
+ $pconfig['ifname'] = $a_igmpproxy[$id]['ifname'];
+ $pconfig['threshold'] = $a_igmpproxy[$id]['threshold'];
+ $pconfig['type'] = $a_igmpproxy[$id]['type'];
+ $pconfig['address'] = $a_igmpproxy[$id]['address'];
+ $pconfig['descr'] = html_entity_decode($a_igmpproxy[$id]['descr']);
+
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if ($_POST['type'] == "upstream") {
+ foreach ($a_igmpproxy as $pid => $proxyentry) {
+ if (isset($id) && $id == $pid) {
+ continue;
+ }
+ if ($proxyentry['type'] == "upstream" && $proxyentry['ifname'] != $_POST['interface']) {
+ $input_errors[] = gettext("Only one 'upstream' interface can be configured.");
+ }
+ }
+ }
+ $igmpentry = array();
+ $igmpentry['ifname'] = $_POST['ifname'];
+ $igmpentry['threshold'] = $_POST['threshold'];
+ $igmpentry['type'] = $_POST['type'];
+ $address = "";
+ $isfirst = 0;
+ /* item is a normal igmpentry type */
+ for ($x = 0; $x < 4999; $x++) {
+ if ($_POST["address{$x}"] <> "") {
+ if ($isfirst > 0) {
+ $address .= " ";
+ }
+ $address .= $_POST["address{$x}"];
+ $address .= "/" . $_POST["address_subnet{$x}"];
+ $isfirst++;
+ }
+ }
+
+ if (!$input_errors) {
+ $igmpentry['address'] = $address;
+ $igmpentry['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_igmpproxy[$id]) {
+ $a_igmpproxy[$id] = $igmpentry;
+ } else {
+ $a_igmpproxy[] = $igmpentry;
+ }
+
+ write_config();
+
+ mark_subsystem_dirty('igmpproxy');
+ header("Location: services_igmpproxy.php");
+ exit;
+ } else {
+ //we received input errors, copy data to prevent retype
+ $pconfig['descr'] = $_POST['descr'];
+ $pconfig['address'] = $address;
+ $pconfig['type'] = $_POST['type'];
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php
+ include("fbegin.inc");
+?>
+
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js">
+</script>
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+
+<input type="hidden" name="address_type" value="textbox" class="formfld unknown" />
+<input type="hidden" name="address_subnet_type" value="select" />
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "address";
+ rowtype[0] = "textbox,ipv4v6";
+ rowsize[0] = "30";
+
+ rowname[1] = "address_subnet";
+ rowtype[1] = "select,ipv4v6";
+ rowsize[1] = "1";
+
+ rowname[2] = "detail";
+ rowtype[2] = "textbox";
+ rowsize[2] = "50";
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+
+<form action="services_igmpproxy_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="igmp proxy edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("IGMP Proxy Edit");?></td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td class="vtable">
+ <select name="ifname" id="ifname" >
+<?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $ifnam => $ifdescr) {
+ echo "<option value=\"{$ifnam}\"";
+ if ($ifnam == $pconfig['ifname']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">{$ifdescr}</option>";
+ }
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Type");?></td>
+ <td class="vtable">
+ <select name="type" class="formselect" id="type" >
+ <option value="upstream" <?php if ($pconfig['type'] == "upstream") echo "selected=\"selected\""; ?>><?=gettext("Upstream Interface");?></option>
+ <option value="downstream" <?php if ($pconfig['type'] == "downstream") echo "selected=\"selected\""; ?>><?=gettext("Downstream Interface");?></option>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("The <b>upstream</b> network interface is the outgoing interface which is" .
+ " responsible for communicating to available multicast data sources." .
+ " There can only be one upstream interface.");?>
+ </span>
+ <br />
+ <span class="vexpl">
+ <b><?=gettext("Downstream"); ?></b>
+ <?=gettext("network interfaces are the distribution interfaces to the" .
+ " destination networks, where multicast clients can join groups and" .
+ " receive multicast data. One or more downstream interfaces must be configured.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Threshold");?></td>
+ <td class="vtable">
+ <input name="threshold" class="formfld unknown" id="threshold" value="<?php echo htmlspecialchars($pconfig['threshold']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Defines the TTL threshold for the network interface. Packets" .
+ " with a lower TTL than the threshold value will be ignored. This" .
+ " setting is optional, and by default the threshold is 1.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Network (s)");?></div></td>
+ <td width="78%" class="vtable">
+ <table id="maintable">
+ <tbody>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Network");?></div></td>
+ <td><div id="twocolumn"><?=gettext("CIDR");?></div></td>
+ </tr>
+
+<?php
+ $counter = 0;
+ $address = $pconfig['address'];
+ if ($address <> "") {
+ $item = explode(" ", $address);
+ foreach ($item as $ww) {
+ $address = $item[$counter];
+ $address_subnet = "";
+ $item2 = explode("/", $address);
+ foreach ($item2 as $current) {
+ if ($item2[1] <> "") {
+ $address = $item2[0];
+ $address_subnet = $item2[1];
+ }
+ }
+ $item4 = $item3[$counter];
+ $tracker = $counter;
+?>
+ <tr>
+ <td>
+ <input name="address<?php echo $tracker; ?>" type="text" class="formfld unknown" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
+ </td>
+ <td>
+ <select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
+ <option></option>
+ <?php for ($i = 32; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $address_subnet) echo "selected=\"selected\""; ?>><?=$i;?></option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+
+ } // end foreach
+ } // end if
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="add" title="<?=gettext("add another entry");?>" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <a href="services_igmpproxy.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
+ <?php if (isset($id) && $a_igmpproxy[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ field_counter_js = 2;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_ntpd.php b/src/usr/local/www/services_ntpd.php
new file mode 100644
index 0000000..1f4dd86
--- /dev/null
+++ b/src/usr/local/www/services_ntpd.php
@@ -0,0 +1,462 @@
+<?php
+/*
+ services_ntpd.php
+
+ Copyright (C) 2013 Dagorlad
+ Copyright (C) 2012 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: ntpd
+*/
+
+##|+PRIV
+##|*IDENT=page-services-ntpd
+##|*NAME=Services: NTP
+##|*DESCR=Allow access to the 'Services: NTP' page.
+##|*MATCH=services_ntpd.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once('rrd.inc');
+require_once("shaper.inc");
+
+if (!is_array($config['ntpd'])) {
+ $config['ntpd'] = array();
+}
+
+if (empty($config['ntpd']['interface'])) {
+ if (is_array($config['installedpackages']['openntpd']) && is_array($config['installedpackages']['openntpd']['config']) &&
+ is_array($config['installedpackages']['openntpd']['config'][0]) && !empty($config['installedpackages']['openntpd']['config'][0]['interface'])) {
+ $pconfig['interface'] = explode(",", $config['installedpackages']['openntpd']['config'][0]['interface']);
+ unset($config['installedpackages']['openntpd']);
+ write_config("Upgraded settings from openttpd");
+ } else {
+ $pconfig['interface'] = array();
+ }
+} else {
+ $pconfig['interface'] = explode(",", $config['ntpd']['interface']);
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!$input_errors) {
+ if (is_array($_POST['interface'])) {
+ $config['ntpd']['interface'] = implode(",", $_POST['interface']);
+ } elseif (isset($config['ntpd']['interface'])) {
+ unset($config['ntpd']['interface']);
+ }
+
+ if (!empty($_POST['gpsport']) && file_exists('/dev/'.$_POST['gpsport'])) {
+ $config['ntpd']['gpsport'] = $_POST['gpsport'];
+ } elseif (isset($config['ntpd']['gpsport'])) {
+ unset($config['ntpd']['gpsport']);
+ }
+
+ unset($config['ntpd']['prefer']);
+ unset($config['ntpd']['noselect']);
+ $timeservers = '';
+ for ($i = 0; $i < 10; $i++) {
+ $tserver = trim($_POST["server{$i}"]);
+ if (!empty($tserver)) {
+ $timeservers .= "{$tserver} ";
+ if (!empty($_POST["servprefer{$i}"])) {
+ $config['ntpd']['prefer'] .= "{$tserver} ";
+ }
+ if (!empty($_POST["servselect{$i}"])) {
+ $config['ntpd']['noselect'] .= "{$tserver} ";
+ }
+ }
+ }
+ if (trim($timeservers) == "") {
+ $timeservers = "pool.ntp.org";
+ }
+ $config['system']['timeservers'] = trim($timeservers);
+
+ if (!empty($_POST['ntporphan']) && ($_POST['ntporphan'] < 17) && ($_POST['ntporphan'] != '12')) {
+ $config['ntpd']['orphan'] = $_POST['ntporphan'];
+ } elseif (isset($config['ntpd']['orphan'])) {
+ unset($config['ntpd']['orphan']);
+ }
+
+ if (!empty($_POST['logpeer'])) {
+ $config['ntpd']['logpeer'] = $_POST['logpeer'];
+ } elseif (isset($config['ntpd']['logpeer'])) {
+ unset($config['ntpd']['logpeer']);
+ }
+
+ if (!empty($_POST['logsys'])) {
+ $config['ntpd']['logsys'] = $_POST['logsys'];
+ } elseif (isset($config['ntpd']['logsys'])) {
+ unset($config['ntpd']['logsys']);
+ }
+
+ if (!empty($_POST['clockstats'])) {
+ $config['ntpd']['clockstats'] = $_POST['clockstats'];
+ } elseif (isset($config['ntpd']['clockstats'])) {
+ unset($config['ntpd']['clockstats']);
+ }
+
+ if (!empty($_POST['loopstats'])) {
+ $config['ntpd']['loopstats'] = $_POST['loopstats'];
+ } elseif (isset($config['ntpd']['loopstats'])) {
+ unset($config['ntpd']['loopstats']);
+ }
+
+ if (!empty($_POST['peerstats'])) {
+ $config['ntpd']['peerstats'] = $_POST['peerstats'];
+ } elseif (isset($config['ntpd']['peerstats'])) {
+ unset($config['ntpd']['peerstats']);
+ }
+
+ if (empty($_POST['kod'])) {
+ $config['ntpd']['kod'] = 'on';
+ } elseif (isset($config['ntpd']['kod'])) {
+ unset($config['ntpd']['kod']);
+ }
+
+ if (empty($_POST['nomodify'])) {
+ $config['ntpd']['nomodify'] = 'on';
+ } elseif (isset($config['ntpd']['nomodify'])) {
+ unset($config['ntpd']['nomodify']);
+ }
+
+ if (!empty($_POST['noquery'])) {
+ $config['ntpd']['noquery'] = $_POST['noquery'];
+ } elseif (isset($config['ntpd']['noquery'])) {
+ unset($config['ntpd']['noquery']);
+ }
+
+ if (!empty($_POST['noserve'])) {
+ $config['ntpd']['noserve'] = $_POST['noserve'];
+ } elseif (isset($config['ntpd']['noserve'])) {
+ unset($config['ntpd']['noserve']);
+ }
+
+ if (empty($_POST['nopeer'])) {
+ $config['ntpd']['nopeer'] = 'on';
+ } elseif (isset($config['ntpd']['nopeer'])) {
+ unset($config['ntpd']['nopeer']);
+ }
+
+ if (empty($_POST['notrap'])) {
+ $config['ntpd']['notrap'] = 'on';
+ } elseif (isset($config['ntpd']['notrap'])) {
+ unset($config['ntpd']['notrap']);
+ }
+
+ if ((empty($_POST['statsgraph'])) == (isset($config['ntpd']['statsgraph']))) {
+ $enable_rrd_graphing = true;
+ }
+ if (!empty($_POST['statsgraph'])) {
+ $config['ntpd']['statsgraph'] = $_POST['statsgraph'];
+ } elseif (isset($config['ntpd']['statsgraph'])) {
+ unset($config['ntpd']['statsgraph']);
+ }
+ if (isset($enable_rrd_graphing)) {
+ enable_rrd_graphing();
+ }
+
+ if (!empty($_POST['leaptxt'])) {
+ $config['ntpd']['leapsec'] = base64_encode($_POST['leaptxt']);
+ } elseif (isset($config['ntpd']['leapsec'])) {
+ unset($config['ntpd']['leapsec']);
+ }
+
+ if (is_uploaded_file($_FILES['leapfile']['tmp_name'])) {
+ $config['ntpd']['leapsec'] = base64_encode(file_get_contents($_FILES['leapfile']['tmp_name']));
+ }
+
+ write_config("Updated NTP Server Settings");
+
+ $retval = 0;
+ $retval = system_ntp_configure();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+$closehead = false;
+$pconfig = &$config['ntpd'];
+if (empty($pconfig['interface'])) {
+ $pconfig['interface'] = array();
+} else {
+ $pconfig['interface'] = explode(",", $pconfig['interface']);
+}
+$pgtitle = array(gettext("Services"), gettext("NTP"));
+$shortcut_section = "ntp";
+include("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+ //Generic show an advanced option function
+ function show_advanced(showboxID, configvalueID) {
+ document.getElementById(showboxID).innerHTML='';
+ aodiv = document.getElementById(configvalueID);
+ aodiv.style.display = "block";
+ }
+
+ //Insure only one of two mutually exclusive options are checked
+ function CheckOffOther(clicked, checkOff) {
+ if (document.getElementById(clicked).checked) {
+ document.getElementById(checkOff).checked=false;
+ }
+ }
+
+ //Show another time server line, limited to 10 servers
+ function NewTimeServer(add) {
+ //If the last line has a value
+ var CheckServer = 'server' + (add - 1);
+ var LastId = document.getElementById(CheckServer);
+ if (document.getElementById(CheckServer).value != '') {
+ if (add < 10) {
+ var TimeServerID = 'timeserver' + add;
+ document.getElementById(TimeServerID).style.display = 'block';
+ //then revise the add another server line
+ if (add < 9) {
+ var next = add + 1;
+ var newdiv = '<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?php echo gettext("Add another Time server");?>" onclick="NewTimeServer(' + next + ')" alt="add" />\n';
+ document.getElementById('addserver').innerHTML=newdiv;
+ } else {
+ document.getElementById('addserver').style.display = 'none';
+ }
+ }
+ }
+ }
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_ntpd.php" method="post" name="iform" id="iform" enctype="multipart/form-data" accept-charset="utf-8">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("NTP"), true, "services_ntpd.php");
+ $tab_array[] = array(gettext("Serial GPS"), false, "services_ntpd_gps.php");
+ $tab_array[] = array(gettext("PPS"), false, "services_ntpd_pps.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP Server Configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Interface(s)</td>
+ <td width="78%" class="vtable">
+<?php
+ $interfaces = get_configured_interface_with_descr();
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
+ }
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+ $size = (count($interfaces) < 10) ? count($interfaces) : 10;
+?>
+ <select id="interface" name="interface[]" multiple="multiple" class="formselect" size="<?php echo $size; ?>">
+<?php
+ foreach ($interfaces as $iface => $ifacename) {
+ if (!is_ipaddr(get_interface_ip($iface)) && !is_ipaddr($iface)) {
+ continue;
+ }
+ echo "<option value='{$iface}'";
+ if (is_array($pconfig['interface'])) {
+ if (in_array($iface, $pconfig['interface'])) {
+ echo " selected=\"selected\"";
+ }
+ }
+ echo ">" . htmlspecialchars($ifacename) . "</option>\n";
+ }
+?>
+ </select>
+ <br />
+ <br /><?php echo gettext("Interfaces without an IP address will not be shown."); ?>
+ <br />
+ <br /><?php echo gettext("Selecting no interfaces will listen on all interfaces with a wildcard."); ?>
+ <br /><?php echo gettext("Selecting all interfaces will explicitly listen on only the interfaces/IPs specified."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Time servers</td>
+ <td width="78%" class="vtable">
+ <?php
+ $timeservers = explode(' ', $config['system']['timeservers']);
+ for ($i = $j = 0; $i < 10; $i++) {
+ echo "<div id=\"timeserver{$i}\"";
+ if ((isset($timeservers[$i])) || ($i < 3)) {
+ $j++;
+ } else {
+ echo " style=\"display:none\"";
+ }
+ echo ">\n";
+
+ echo "<input name=\"server{$i}\" class=\"formfld unknown\" id=\"server{$i}\" size=\"30\" value=\"" . htmlspecialchars($timeservers[$i]) . "\" type=\"text\" />&emsp;";
+ echo "\n<input name=\"servprefer{$i}\" class=\"formcheckbox\" id=\"servprefer{$i}\" onclick=\"CheckOffOther('servprefer{$i}', 'servselect{$i}')\" type=\"checkbox\"";
+ if (isset($config['ntpd']['prefer']) && isset($timeservers[$i]) && substr_count($config['ntpd']['prefer'], $timeservers[$i])) {
+ echo " checked=\"checked\"";
+ }
+ echo " />&nbsp;prefer&emsp;";
+ echo "\n<input name=\"servselect{$i}\" class=\"formcheckbox\" id=\"servselect{$i}\" onclick=\"CheckOffOther('servselect{$i}', 'servprefer{$i}')\" type=\"checkbox\"";
+ if (isset($config['ntpd']['noselect']) && isset($timeservers[$i]) && substr_count($config['ntpd']['noselect'], $timeservers[$i])) {
+ echo " checked=\"checked\"";
+ }
+ echo " />&nbsp;noselect\n<br />\n</div>\n";
+ }
+ ?>
+ <div id="addserver">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?php echo gettext("Add another Time server");?>" onclick="NewTimeServer(<?php echo $j;?>)" alt="add" />
+ </div>
+ <br />
+ <?php echo gettext('For best results three to five servers should be configured here.'); ?>
+ <br />
+ <?php echo gettext('The <i>prefer</i> option indicates that NTP should favor the use of this server more than all others.'); ?>
+ <br />
+ <?php echo gettext('The <i>noselect</i> option indicates that NTP should not use this server for time, but stats for this server will be collected and displayed.'); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Orphan mode</td>
+ <td width="78%" class="vtable">
+ <input name="ntporphan" type="text" class="formfld unknown" id="ntporphan" min="1" max="16" size="20" value="<?=htmlspecialchars($pconfig['orphan']);?>" /><?php echo gettext("(0-15)");?><br />
+ <?php echo gettext("Orphan mode allows the system clock to be used when no other clocks are available. The number here specifies the stratum reported during orphan mode and should normally be set to a number high enough to insure that any other servers available to clients are preferred over this server. (default: 12)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">NTP graphs</td>
+ <td width="78%" class="vtable">
+ <input name="statsgraph" type="checkbox" class="formcheckbox" id="statsgraph" <?php if ($pconfig['statsgraph']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable RRD graphs of NTP statistics (default: disabled)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Syslog logging</td>
+ <td width="78%" class="vtable">
+ <?php echo gettext("These options enable additional messages from NTP to be written to the System Log");?> (<a href="diag_logs_ntpd.php"><?php echo gettext("Status > System Logs > NTP"); ?></a>).
+ <br /><br />
+ <input name="logpeer" type="checkbox" class="formcheckbox" id="logpeer"<?php if ($pconfig['logpeer']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable logging of peer messages (default: disabled)."); ?>
+ <br />
+ <input name="logsys" type="checkbox" class="formcheckbox" id="logsys"<?php if ($pconfig['logsys']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable logging of system messages (default: disabled)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Statistics logging</td>
+ <td width="78%" class="vtable">
+ <div id="showstatisticsbox">
+ <input type="button" onclick="show_advanced('showstatisticsbox', 'showstatistics')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show statistics logging options");?>
+ </div>
+ <div id="showstatistics" style="display:none">
+ <strong><?php echo gettext("Warning: ")?></strong><?php echo gettext("these options will create persistent daily log files in /var/log/ntp."); ?>
+ <br /><br />
+ <input name="clockstats" type="checkbox" class="formcheckbox" id="clockstats"<?php if ($pconfig['clockstats']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable logging of reference clock statistics (default: disabled)."); ?>
+ <br />
+ <input name="loopstats" type="checkbox" class="formcheckbox" id="loopstats"<?php if ($pconfig['loopstats']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable logging of clock discipline statistics (default: disabled)."); ?>
+ <br />
+ <input name="peerstats" type="checkbox" class="formcheckbox" id="peerstats"<?php if ($pconfig['peerstats']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable logging of NTP peer statistics (default: disabled)."); ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Access restrictions</td>
+ <td width="78%" class="vtable">
+ <div id="showrestrictbox">
+ <input type="button" onclick="show_advanced('showrestrictbox', 'showrestrict')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show access restriction options");?>
+ </div>
+ <div id="showrestrict" style="display:none">
+ <?php echo gettext("these options control access to NTP from the WAN."); ?>
+ <br /><br />
+ <input name="kod" type="checkbox" class="formcheckbox" id="kod"<?php if (!$pconfig['kod']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Enable Kiss-o'-death packets (default: enabled)."); ?>
+ <br />
+ <input name="nomodify" type="checkbox" class="formcheckbox" id="nomodify"<?php if (!$pconfig['nomodify']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Deny state modifications (i.e. run time configuration) by ntpq and ntpdc (default: enabled)."); ?>
+ <br />
+ <input name="noquery" type="checkbox" class="formcheckbox" id="noquery"<?php if ($pconfig['noquery']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Disable ntpq and ntpdc queries (default: disabled)."); ?>
+ <br />
+ <input name="noserve" type="checkbox" class="formcheckbox" id="noserve"<?php if ($pconfig['noserve']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Disable all except ntpq and ntpdc queries (default: disabled)."); ?>
+ <br />
+ <input name="nopeer" type="checkbox" class="formcheckbox" id="nopeer"<?php if (!$pconfig['nopeer']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Deny packets that attempt a peer association (default: enabled)."); ?>
+ <br />
+ <input name="notrap" type="checkbox" class="formcheckbox" id="notrap"<?php if (!$pconfig['notrap']) echo " checked=\"checked\""; ?> />
+ <?php echo gettext("Deny mode 6 control message trap service (default: enabled)."); ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Leap seconds</td>
+ <td width="78%" class="vtable">
+ <div id="showleapsecbox">
+ <input type="button" onclick="show_advanced('showleapsecbox', 'showleapsec')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show Leap second configuration");?>
+ </div>
+ <div id="showleapsec" style="display:none">
+ <?php echo gettext("A leap second file allows NTP to advertise an upcoming leap second addition or subtraction.");?>
+ <?php echo gettext("Normally this is only useful if this server is a stratum 1 time server.");?>
+ <br /><br />
+ <?php echo gettext("Enter Leap second configuration as text:");?><br />
+ <textarea name="leaptxt" class="formpre" id="leaptxt" cols="65" rows="7"><?php $text = base64_decode(chunk_split($pconfig['leapsec'])); echo $text;?></textarea><br />
+ <strong><?php echo gettext("Or");?></strong>, <?php echo gettext("select a file to upload:");?>
+ <input type="file" name="leapfile" class="formfld file" id="leapfile" />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_ntpd_gps.php b/src/usr/local/www/services_ntpd_gps.php
new file mode 100644
index 0000000..c8098c1
--- /dev/null
+++ b/src/usr/local/www/services_ntpd_gps.php
@@ -0,0 +1,619 @@
+<?php
+/* $Id$ */
+/*
+ services_ntpd_gps.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2013 Dagorlad
+ Copyright (C) 2012 Jim Pingle
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: ntpd_gps
+*/
+
+##|+PRIV
+##|*IDENT=page-services-ntpd-gps
+##|*NAME=Services: NTP Serial GPS page
+##|*DESCR=Allow access to the 'Services: NTP Serial GPS' page..
+##|*MATCH=services_ntpd_gps.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+function set_default_gps() {
+ global $config;
+
+ if (!is_array($config['ntpd'])) {
+ $config['ntpd'] = array();
+ }
+ if (is_array($config['ntpd']['gps'])) {
+ unset($config['ntpd']['gps']);
+ }
+
+ $config['ntpd']['gps'] = array();
+ $config['ntpd']['gps']['type'] = 'Default';
+ /* copy an existing configured GPS port if it exists, the unset may be uncommented post production */
+ if (!empty($config['ntpd']['gpsport']) && empty($config['ntpd']['gps']['port'])) {
+ $config['ntpd']['gps']['port'] = $config['ntpd']['gpsport'];
+ unset($config['ntpd']['gpsport']); /* this removes the original port config from config.xml */
+ $config['ntpd']['gps']['speed'] = 0;
+ $config['ntpd']['gps']['nmea'] = 0;
+ }
+
+ write_config("Setting default NTPd settings");
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+
+ if (!empty($_POST['gpsport']) && file_exists('/dev/'.$_POST['gpsport'])) {
+ $config['ntpd']['gps']['port'] = $_POST['gpsport'];
+ } else {
+ /* if port is not set, remove all the gps config */
+ unset($config['ntpd']['gps']);
+ }
+
+ if (!empty($_POST['gpstype'])) {
+ $config['ntpd']['gps']['type'] = $_POST['gpstype'];
+ } elseif (isset($config['ntpd']['gps']['type'])) {
+ unset($config['ntpd']['gps']['type']);
+ }
+
+ if (!empty($_POST['gpsspeed'])) {
+ $config['ntpd']['gps']['speed'] = $_POST['gpsspeed'];
+ } elseif (isset($config['ntpd']['gps']['speed'])) {
+ unset($config['ntpd']['gps']['speed']);
+ }
+
+ if (!empty($_POST['gpsnmea']) && ($_POST['gpsnmea'][0] === "0")) {
+ $config['ntpd']['gps']['nmea'] = "0";
+ } else {
+ $config['ntpd']['gps']['nmea'] = strval(array_sum($_POST['gpsnmea']));
+ }
+
+ if (!empty($_POST['gpsfudge1'])) {
+ $config['ntpd']['gps']['fudge1'] = $_POST['gpsfudge1'];
+ } elseif (isset($config['ntpd']['gps']['fudge1'])) {
+ unset($config['ntpd']['gps']['fudge1']);
+ }
+
+ if (!empty($_POST['gpsfudge2'])) {
+ $config['ntpd']['gps']['fudge2'] = $_POST['gpsfudge2'];
+ } elseif (isset($config['ntpd']['gps']['fudge2'])) {
+ unset($config['ntpd']['gps']['fudge2']);
+ }
+
+ if (!empty($_POST['gpsstratum']) && ($_POST['gpsstratum']) < 17) {
+ $config['ntpd']['gps']['stratum'] = $_POST['gpsstratum'];
+ } elseif (isset($config['ntpd']['gps']['stratum'])) {
+ unset($config['ntpd']['gps']['stratum']);
+ }
+
+ if (empty($_POST['gpsprefer'])) {
+ $config['ntpd']['gps']['prefer'] = 'on';
+ } elseif (isset($config['ntpd']['gps']['prefer'])) {
+ unset($config['ntpd']['gps']['prefer']);
+ }
+
+ if (!empty($_POST['gpsselect'])) {
+ $config['ntpd']['gps']['noselect'] = $_POST['gpsselect'];
+ } elseif (isset($config['ntpd']['gps']['noselect'])) {
+ unset($config['ntpd']['gps']['noselect']);
+ }
+
+ if (!empty($_POST['gpsflag1'])) {
+ $config['ntpd']['gps']['flag1'] = $_POST['gpsflag1'];
+ } elseif (isset($config['ntpd']['gps']['flag1'])) {
+ unset($config['ntpd']['gps']['flag1']);
+ }
+
+ if (!empty($_POST['gpsflag2'])) {
+ $config['ntpd']['gps']['flag2'] = $_POST['gpsflag2'];
+ } elseif (isset($config['ntpd']['gps']['flag2'])) {
+ unset($config['ntpd']['gps']['flag2']);
+ }
+
+ if (!empty($_POST['gpsflag3'])) {
+ $config['ntpd']['gps']['flag3'] = $_POST['gpsflag3'];
+ } elseif (isset($config['ntpd']['gps']['flag3'])) {
+ unset($config['ntpd']['gps']['flag3']);
+ }
+
+ if (!empty($_POST['gpsflag4'])) {
+ $config['ntpd']['gps']['flag4'] = $_POST['gpsflag4'];
+ } elseif (isset($config['ntpd']['gps']['flag4'])) {
+ unset($config['ntpd']['gps']['flag4']);
+ }
+
+ if (!empty($_POST['gpssubsec'])) {
+ $config['ntpd']['gps']['subsec'] = $_POST['gpssubsec'];
+ } elseif (isset($config['ntpd']['gps']['subsec'])) {
+ unset($config['ntpd']['gps']['subsec']);
+ }
+
+ if (!empty($_POST['gpsrefid'])) {
+ $config['ntpd']['gps']['refid'] = $_POST['gpsrefid'];
+ } elseif (isset($config['ntpd']['gps']['refid'])) {
+ unset($config['ntpd']['gps']['refid']);
+ }
+
+ if (!empty($_POST['gpsinitcmd'])) {
+ $config['ntpd']['gps']['initcmd'] = base64_encode($_POST['gpsinitcmd']);
+ } elseif (isset($config['ntpd']['gps']['initcmd'])) {
+ unset($config['ntpd']['gps']['initcmd']);
+ }
+
+ write_config("Updated NTP GPS Settings");
+
+ $retval = system_ntp_configure();
+ $savemsg = get_std_save_message($retval);
+} else {
+ /* set defaults if they do not already exist */
+ if (!is_array($config['ntpd']) || !is_array($config['ntpd']['gps']) || empty($config['ntpd']['gps']['type'])) {
+ set_default_gps();
+ }
+}
+$closehead = false;
+$pconfig = &$config['ntpd']['gps'];
+$pgtitle = array(gettext("Services"), gettext("NTP GPS"));
+$shortcut_section = "ntp";
+include("head.inc");
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+ function show_advanced(showboxID, configvalueID) {
+ document.getElementById(showboxID).innerHTML='';
+ aodiv = document.getElementById(configvalueID);
+ aodiv.style.display = "block";
+ }
+
+ function ToggleOther(clicked, checkOff) {
+ if (document.getElementById(clicked).checked) {
+ document.getElementById(checkOff).checked=false;
+ }
+ }
+
+/*
+init commands are Base64 encoded
+Default = #Sponsored, probably a Ublox
+ $PUBX,40,GSV,0,0,0,0*59
+ $PUBX,40,GLL,0,0,0,0*5C
+ $PUBX,40,ZDA,0,0,0,0*44
+ $PUBX,40,VTG,0,0,0,0*5E
+ $PUBX,40,GSV,0,0,0,0*59
+ $PUBX,40,GSA,0,0,0,0*4E
+ $PUBX,40,GGA,0,0,0,0
+ $PUBX,40,TXT,0,0,0,0
+ $PUBX,40,RMC,0,0,0,0*46
+ $PUBX,41,1,0007,0003,4800,0
+ $PUBX,40,ZDA,1,1,1,1
+
+Generic = #do nothing
+
+Garmin = #most Garmin
+ $PGRMC,,,,,,,,,,3,,2,4*52 #enable PPS @ 100ms
+ $PGRMC1,,1,,,,,,W,,,,,,,*30 #enable WAAS
+ $PGRMO,,3*74 #turn off all sentences
+ $PGRMO,GPRMC,1*3D #enable RMC
+ $PGRMO,GPGGA,1*20 #enable GGA
+ $PGRMO,GPGLL,1*26 #enable GLL
+
+MediaTek = #Adafruit, Fastrax, some Garmin and others
+ $PMTK225,0*2B #normal power mode
+ $PMTK314,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0*28 #enable GLL, RMC, GGA and ZDA
+ $PMTK301,2*2E #enable WAAS
+ $PMTK320,0*2F #power save off
+ $PMTK330,0*2E #set WGS84 datum
+ $PMTK386,0*23 #disable static navigation (MT333X)
+ $PMTK397,0*23 #disable static navigation (MT332X)
+ $PMTK251,4800*14 #4800 baud rate
+
+SiRF = #used by many devices
+ $PSRF103,00,00,01,01*25 #turn on GGA
+ $PSRF103,01,00,01,01*24 #turn on GLL
+ $PSRF103,02,00,00,01*24 #turn off GSA
+ $PSRF103,03,00,00,01*24 #turn off GSV
+ $PSRF103,04,00,01,01*24 #turn on RMC
+ $PSRF103,05,00,00,01*24 #turn off VTG
+ $PSRF100,1,4800,8,1,0*0E #set port to 4800,N,8,1
+
+U-Blox = #U-Blox 5, 6 and probably 7
+ $PUBX,40,GGA,1,1,1,1,0,0*5A #turn on GGA all ports
+ $PUBX,40,GLL,1,1,1,1,0,0*5C #turn on GLL all ports
+ $PUBX,40,GSA,0,0,0,0,0,0*4E #turn off GSA all ports
+ $PUBX,40,GSV,0,0,0,0,0,0*59 #turn off GSV all ports
+ $PUBX,40,RMC,1,1,1,1,0,0*47 #turn on RMC all ports
+ $PUBX,40,VTG,0,0,0,0,0,0*5E #turn off VTG all ports
+ $PUBX,40,GRS,0,0,0,0,0,0*5D #turn off GRS all ports
+ $PUBX,40,GST,0,0,0,0,0,0*5B #turn off GST all ports
+ $PUBX,40,ZDA,1,1,1,1,0,0*44 #turn on ZDA all ports
+ $PUBX,40,GBS,0,0,0,0,0,0*4D #turn off GBS all ports
+ $PUBX,40,DTM,0,0,0,0,0,0*46 #turn off DTM all ports
+ $PUBX,40,GPQ,0,0,0,0,0,0*5D #turn off GPQ all ports
+ $PUBX,40,TXT,0,0,0,0,0,0*43 #turn off TXT all ports
+ $PUBX,40,THS,0,0,0,0,0,0*54 #turn off THS all ports (U-Blox 6)
+ $PUBX,41,1,0007,0003,4800,0*13 # set port 1 to 4800 baud
+
+SureGPS = #Sure Electronics SKG16B
+ $PMTK225,0*2B
+ $PMTK314,1,1,0,1,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0*2D
+ $PMTK301,2*2E
+ $PMTK397,0*23
+ $PMTK102*31
+ $PMTK313,1*2E
+ $PMTK513,1*28
+ $PMTK319,0*25
+ $PMTK527,0.00*00
+ $PMTK251,9600*17 #really needs to work at 9600 baud
+
+*/
+
+ function set_gps_default(form) {
+ //This handles a new config and also a reset to a defined default config
+ var gpsdef = new Object();
+ //get the text description of the selected type
+ var e = document.getElementById("gpstype");
+ var type = e.options[e.selectedIndex].text;
+
+ //stuff the JS object as needed for each type
+ switch (type) {
+ case "Default":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "0.155";
+ gpsdef['fudge2'] = "";
+ gpsdef['inittxt'] = "JFBVQlgsNDAsR1NWLDAsMCwwLDAqNTkNCiRQVUJYLDQwLEdMTCwwLDAsMCwwKjVDDQokUFVCWCw0MCxaREEsMCwwLDAsMCo0NA0KJFBVQlgsNDAsVlRHLDAsMCwwLDAqNUUNCiRQVUJYLDQwLEdTViwwLDAsMCwwKjU5DQokUFVCWCw0MCxHU0EsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR0dBLDAsMCwwLDANCiRQVUJYLDQwLFRYVCwwLDAsMCwwDQokUFVCWCw0MCxSTUMsMCwwLDAsMCo0Ng0KJFBVQlgsNDEsMSwwMDA3LDAwMDMsNDgwMCwwDQokUFVCWCw0MCxaREEsMSwxLDEsMQ0K";
+ break;
+
+ case "Garmin":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.600";
+ gpsdef['inittxt'] = "JFBHUk1DLCwsLCwsLCwsLDMsLDIsOCo1RQ0KJFBHUk1DMSwsMSwsLCwsLFcsLCwsLCwsKjMwDQokUEdSTU8sLDMqNzQNCiRQR1JNTyxHUFJNQywxKjNEDQokUEdSTU8sR1BHR0EsMSoyMA0KJFBHUk1PLEdQR0xMLDEqMjYNCg==";
+ break;
+
+ case "Generic":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.400";
+ gpsdef['inittxt'] = "";
+ break;
+
+ case "MediaTek":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.400";
+ gpsdef['inittxt'] = "JFBNVEsyMjUsMCoyQg0KJFBNVEszMTQsMSwxLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCoyOA0KJFBNVEszMDEsMioyRQ0KJFBNVEszMjAsMCoyRg0KJFBNVEszMzAsMCoyRQ0KJFBNVEszODYsMCoyMw0KJFBNVEszOTcsMCoyMw0KJFBNVEsyNTEsNDgwMCoxNA0K";
+ break;
+
+ case "SiRF":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.704"; //valid for 4800, 0.688 @ 9600, 0.640 @ USB
+ gpsdef['inittxt'] = "JFBTUkYxMDMsMDAsMDAsMDEsMDEqMjUNCiRQU1JGMTAzLDAxLDAwLDAxLDAxKjI0DQokUFNSRjEwMywwMiwwMCwwMCwwMSoyNA0KJFBTUkYxMDMsMDMsMDAsMDAsMDEqMjQNCiRQU1JGMTAzLDA0LDAwLDAxLDAxKjI0DQokUFNSRjEwMywwNSwwMCwwMCwwMSoyNA0KJFBTUkYxMDAsMSw0ODAwLDgsMSwwKjBFDQo=";
+ break;
+
+ case "U-Blox":
+ gpsdef['nmea'] = 0;
+ gpsdef['speed'] = 0;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.400";
+ gpsdef['inittxt'] = "JFBVQlgsNDAsR0dBLDEsMSwxLDEsMCwwKjVBDQokUFVCWCw0MCxHTEwsMSwxLDEsMSwwLDAqNUMNCiRQVUJYLDQwLEdTQSwwLDAsMCwwLDAsMCo0RQ0KJFBVQlgsNDAsR1NWLDAsMCwwLDAsMCwwKjU5DQokUFVCWCw0MCxSTUMsMSwxLDEsMSwwLDAqNDcNCiRQVUJYLDQwLFZURywwLDAsMCwwLDAsMCo1RQ0KJFBVQlgsNDAsR1JTLDAsMCwwLDAsMCwwKjVEDQokUFVCWCw0MCxHU1QsMCwwLDAsMCwwLDAqNUINCiRQVUJYLDQwLFpEQSwxLDEsMSwxLDAsMCo0NA0KJFBVQlgsNDAsR0JTLDAsMCwwLDAsMCwwKjREDQokUFVCWCw0MCxEVE0sMCwwLDAsMCwwLDAqNDYNCiRQVUJYLDQwLEdQUSwwLDAsMCwwLDAsMCo1RA0KJFBVQlgsNDAsVFhULDAsMCwwLDAsMCwwKjQzDQokUFVCWCw0MCxUSFMsMCwwLDAsMCwwLDAqNTQNCiRQVUJYLDQxLDEsMDAwNywwMDAzLDQ4MDAsMCoxMw0K";
+ break;
+
+ case "SureGPS":
+ gpsdef['nmea'] = 1;
+ gpsdef['speed'] = 16;
+ gpsdef['fudge1'] = "";
+ gpsdef['fudge2'] = "0.407";
+ gpsdef['inittxt'] = "JFBNVEsyMjUsMCoyQg0KJFBNVEszMTQsMSwxLDAsMSwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCoyRA0KJFBNVEszMDEsMioyRQ0KJFBNVEszOTcsMCoyMw0KJFBNVEsxMDIqMzENCiRQTVRLMzEzLDEqMkUNCiRQTVRLNTEzLDEqMjgNCiRQTVRLMzE5LDAqMjUNCiRQTVRLNTI3LDAuMDAqMDANCiRQTVRLMjUxLDk2MDAqMTcNCg==";
+ break;
+ default:
+ return;
+ }
+
+ //then update the html and set the common stuff
+ document.getElementById("gpsnmea").selectedIndex = gpsdef['nmea'];
+ document.getElementById("gpsspeed").selectedIndex = gpsdef['speed'];
+ form.gpsfudge1.value = gpsdef['fudge1'];
+ form.gpsfudge2.value = gpsdef['fudge2'];
+ form.gpsstratum.value = "";
+ form.gpsrefid.value = "";
+ form.gpsspeed.value = gpsdef['speed'];
+ document.getElementById("gpsflag1").checked=true
+ document.getElementById("gpsflag2").checked=false
+ document.getElementById("gpsflag3").checked=true
+ document.getElementById("gpsflag4").checked=false
+ document.getElementById("gpssubsec").checked=false
+ form.gpsinitcmd.value = atob(gpsdef['inittxt']);
+ }
+
+ //function to compute a NMEA checksum derived from the public domain function at http://www.hhhh.org/wiml/proj/nmeaxor.html
+ function NMEAChecksum(cmd) {
+ // Compute the checksum by XORing all the character values in the string.
+ var checksum = 0;
+ for (var i = 0; i < cmd.length; i++) {
+ checksum = checksum ^ cmd.charCodeAt(i);
+ }
+ // Convert it to hexadecimal (base-16, upper case, most significant byte first).
+ var hexsum = Number(checksum).toString(16).toUpperCase();
+ if (hexsum.length < 2) {
+ hexsum = ("00" + hexsum).slice(-2);
+ }
+ // Display the result
+ document.getElementById("nmeachecksum").innerHTML = hexsum;
+ }
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_ntpd_gps.php" method="post" name="iform" id="iform" accept-charset="utf-8">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd gps">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("NTP"), false, "services_ntpd.php");
+ $tab_array[] = array(gettext("Serial GPS"), true, "services_ntpd_gps.php");
+ $tab_array[] = array(gettext("PPS"), false, "services_ntpd_pps.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP Serial GPS Configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">
+ </td>
+ <td width="78%" class="vtable">A GPS connected via a serial port may be used as a reference clock for NTP. If the GPS also supports PPS and is properly configured, and connected, that GPS may also be used as a Pulse Per Second clock reference. NOTE: a USB GPS may work, but is not recommended due to USB bus timing issues.
+ <br />
+ <br /><?php echo gettext("For the best results, NTP should have at least three sources of time. So it is best to configure at least 2 servers under"); ?> <a href="services_ntpd.php"><?php echo gettext("Services > NTP"); ?></a> <?php echo gettext("to minimize clock drift if the GPS data is not valid over time. Otherwise ntpd may only use values from the unsynchronized local clock when providing time to clients."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("GPS"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <!-- Start with the original "Default", list a "Generic" and then specific configs alphabetically -->
+ <select id="gpstype" name="gpstype" class="formselect" onchange="set_gps_default(this.form)">
+ <option value="Custom"<?php if ($pconfig['type'] == 'Custom') echo " selected=\"selected\""; ?>>Custom</option>
+ <option value="Default"<?php if ($pconfig['type'] == 'Default') echo " selected=\"selected\""; ?>>Default</option>
+ <option value="Generic" title="Generic"<?php if ($pconfig['type'] == 'Generic') echo " selected=\"selected\"";?>>Generic</option>
+ <option value="Garmin" title="$PGRM... Most Garmin"<?php if ($pconfig['type'] == 'Garmin') echo " selected=\"selected\"";?>>Garmin</option>
+ <option value="MediaTek" title="$PMTK... Adafruit, Fastrax, some Garmin and others"<?php if ($pconfig['type'] == 'MediaTek') echo " selected=\"selected\"";?>>MediaTek</option>
+ <option value="SiRF" title="$PSRF... Used by many devices"<?php if ($pconfig['type'] == 'sirf') echo " selected=\"selected\"";?>>SiRF</option>
+ <option value="U-Blox" title="$PUBX... U-Blox 5, 6 and probably 7"<?php if ($pconfig['type'] == 'U-Blox') echo " selected=\"selected\"";?>>U-Blox</option>
+ <option value="SureGPS" title="$PMTK... Sure Electronics SKG16B"<?php if ($pconfig['type'] == 'SureGPS') echo " selected=\"selected\"";?>>SureGPS</option>
+ </select>
+ <?php echo gettext("This option allows you to select a predefined configuration.");?>
+ <br />
+ <br />
+ <strong><?php echo gettext("Note: ");?></strong><?php echo gettext("Default is the configuration of pfSense 2.1 and earlier"); ?>
+ <?php echo gettext(" (not recommended). Select Generic if your GPS is not listed.)"); ?><br />
+ <strong><?php echo gettext("Note: ");?></strong><?php echo gettext("The perdefined configurations assume your GPS has already been set to NMEA mode."); ?>
+ </td>
+ </tr>
+<?php
+ /* Probing would be nice, but much more complex. Would need to listen to each port for 1s+ and watch for strings. */
+ $serialports = glob("/dev/cua?[0-9]{,.[0-9]}", GLOB_BRACE);
+ if (!empty($serialports)):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Serial port</td>
+ <td width="78%" class="vtable">
+ <select name="gpsport" class="formselect">
+ <option value="">none</option>
+<?php
+ foreach ($serialports as $port):
+ $shortport = substr($port, 5);
+ $selected = ($shortport == $pconfig['port']) ? " selected=\"selected\"" : "";
+?>
+ <option value="<?php echo $shortport;?>"<?php echo $selected;?>><?php echo $shortport;?></option>
+<?php
+ endforeach;
+?>
+ </select>&nbsp;
+ <?php echo gettext("All serial ports are listed, be sure to pick the port with the GPS attached."); ?>
+ <br /><br />
+ <select id="gpsspeed" name="gpsspeed" class="formselect">
+ <option value="0"<?php if (!$pconfig['speed']) echo " selected=\"selected\""; ?>>4800</option>
+ <option value="16"<?php if ($pconfig['speed'] === '16') echo " selected=\"selected\"";?>>9600</option>
+ <option value="32"<?php if ($pconfig['speed'] === '32') echo " selected=\"selected\"";?>>19200</option>
+ <option value="48"<?php if ($pconfig['speed'] === '48') echo " selected=\"selected\"";?>>38400</option>
+ <option value="64"<?php if ($pconfig['speed'] === '64') echo " selected=\"selected\"";?>>57600</option>
+ <option value="80"<?php if ($pconfig['speed'] === '80') echo " selected=\"selected\"";?>>115200</option>
+ </select>&nbsp;<?php echo gettext("Serial port baud rate."); ?>
+ <br />
+ <br />
+ <?php echo gettext("Note: A higher baud rate is generally only helpful if the GPS is sending too many sentences. It is recommended to configure the GPS to send only one sentence at a baud rate of 4800 or 9600."); ?>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <!-- 1 = RMC, 2 = GGA, 4 = GLL, 8 = ZDA or ZDG -->
+ <td width="22%" valign="top" class="vncellreq">NMEA sentences</td>
+ <td width="78%" class="vtable">
+ <select id="gpsnmea" name="gpsnmea[]" multiple="multiple" class="formselect" size="5">
+ <option value="0"<?php if (!$pconfig['nmea']) echo " selected=\"selected\""; ?>>All</option>
+ <option value="1"<?php if ($pconfig['nmea'] & 1) echo " selected=\"selected\"";?>>RMC</option>
+ <option value="2"<?php if ($pconfig['nmea'] & 2) echo " selected=\"selected\"";?>>GGA</option>
+ <option value="4"<?php if ($pconfig['nmea'] & 4) echo " selected=\"selected\"";?>>GLL</option>
+ <option value="8"<?php if ($pconfig['nmea'] & 8) echo " selected=\"selected\"";?>>ZDA or ZDG</option>
+ </select><br />
+ <?php echo gettext("By default NTP will listen for all supported NMEA sentences. Here one or more sentences to listen for may be specified."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Fudge time 1</td>
+ <td width="78%" class="vtable">
+ <input name="gpsfudge1" type="text" class="formfld unknown" id="gpsfudge1" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge1']);?>" />(<?php echo gettext("seconds");?>)<br />
+ <?php echo gettext("Fudge time 1 is used to specify the GPS PPS signal offset");?> (<?php echo gettext("default");?>: 0.0).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Fudge time 2</td>
+ <td width="78%" class="vtable">
+ <input name="gpsfudge2" type="text" class="formfld unknown" id="gpsfudge2" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge2']);?>" />(<?php echo gettext("seconds");?>)<br />
+ <?php echo gettext("Fudge time 2 is used to specify the GPS time offset");?> (<?php echo gettext("default");?>: 0.0).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Stratum</td>
+ <td width="78%" class="vtable">
+ <input name="gpsstratum" type="text" class="formfld unknown" id="gpsstratum" max="16" size="20" value="<?=htmlspecialchars($pconfig['stratum']);?>" /><?php echo gettext("(0-16)");?><br />
+ <?php echo gettext("This may be used to change the GPS Clock stratum");?> (<?php echo gettext("default");?>: 0). <?php echo gettext("This may be useful if, for some reason, you want ntpd to prefer a different clock"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Flags</td>
+ <td width="78%" class="vtable">
+ <table>
+ <tr>
+ <td>
+ <?php echo gettext("Normally there should be no need to change these options from the defaults."); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table>
+ <tr>
+ <td>
+ <input name="gpsprefer" type="checkbox" class="formcheckbox" id="gpsprefer" onclick="ToggleOther('gpsprefer', 'gpsselect')"<?php if (!$pconfig['prefer']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("NTP should prefer this clock (default: enabled)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpsselect" type="checkbox" class="formcheckbox" id="gpsselect" onclick="ToggleOther('gpsselect', 'gpsprefer')"<?php if ($pconfig['noselect']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("NTP should not use this clock, it will be displayed for reference only(default: disabled)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpsflag1" type="checkbox" class="formcheckbox" id="gpsflag1"<?php if ($pconfig['flag1']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Enable PPS signal processing (default: enabled)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpsflag2" type="checkbox" class="formcheckbox" id="gpsflag2"<?php if ($pconfig['flag2']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Enable falling edge PPS signal processing (default: rising edge)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpsflag3" type="checkbox" class="formcheckbox" id="gpsflag3"<?php if ($pconfig['flag3']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Enable kernel PPS clock discipline (default: enabled)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpsflag4" type="checkbox" class="formcheckbox" id="gpsflag4"<?php if ($pconfig['flag4']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Obscure location in timestamp (default: unobscured)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="gpssubsec" type="checkbox" class="formcheckbox" id="gpssubsec"<?php if ($pconfig['subsec']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Log the sub-second fraction of the received time stamp (default: Not logged).<br />Note: enabling this will rapidly fill the log, but is useful for tuning Fudge time 2."); ?></span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Clock ID</td>
+ <td width="78%" class="vtable">
+ <input name="gpsrefid" type="text" class="formfld unknown" id="gpsrefid" maxlength= "4" size="20" value="<?=htmlspecialchars($pconfig['refid']);?>" /><?php echo gettext("(1 to 4 charactors)");?><br />
+ <?php echo gettext("This may be used to change the GPS Clock ID");?> (<?php echo gettext("default");?>: GPS).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">GPS Initialization</td>
+ <td width="78%" class="vtable">
+ <div id="showgpsinitbox">
+ <input type="button" onclick="show_advanced('showgpsinitbox', 'showgpsinit')" value="<?=gettext("Advanced");?>" /> - <?=gettext("Show GPS Initialization commands");?>
+ </div>
+ <div id="showgpsinit" style="display:none">
+ <p>
+ <textarea name="gpsinitcmd" class="formpre" id="gpsinitcmd" cols="65" rows="7"><?=htmlspecialchars(base64_decode($pconfig['initcmd'])); /*resultmatch*/?></textarea><br />
+ <?php echo gettext("Note: Commands entered here will be sent to the GPS during initialization. Please read and understand your GPS documentation before making any changes here.");?><br /><br />
+ <strong><?php echo gettext("NMEA checksum calculator");?>:</strong>
+ <br />
+ <?php echo gettext("Enter the text between &quot;$&quot; and &quot;*&quot; of a NMEA command string:");?><br /> $<input name="nmeastring" type="text" class="formfld unknown" id="nmeastring" size="30" value="" />*<span id="nmeachecksum"><?php echo gettext("checksum");?></span>&nbsp;&nbsp;
+ <input type="button" onclick="NMEAChecksum(nmeastring.value)" value="<?=gettext("Calculate NMEA checksum");?>" /><br />
+ </p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+set_gps_default(this.form);
+//]]>
+</script>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_ntpd_pps.php b/src/usr/local/www/services_ntpd_pps.php
new file mode 100644
index 0000000..e4abce0
--- /dev/null
+++ b/src/usr/local/www/services_ntpd_pps.php
@@ -0,0 +1,251 @@
+<?php
+/* $Id$ */
+/*
+ services_ntpd_pps.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2013 Dagorlad
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: ntpd_pps
+*/
+
+##|+PRIV
+##|*IDENT=page-services-ntpd-pps
+##|*NAME=Services: NTP PPS page
+##|*DESCR=Allow access to the 'Services: NTP PPS' page..
+##|*MATCH=services_ntpd_pps.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+if (!is_array($config['ntpd'])) {
+ $config['ntpd'] = array();
+}
+if (!is_array($config['ntpd']['pps'])) {
+ $config['ntpd']['pps'] = array();
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+
+ if (!$input_errors) {
+ if (!empty($_POST['ppsport']) && file_exists('/dev/'.$_POST['ppsport'])) {
+ $config['ntpd']['pps']['port'] = $_POST['ppsport'];
+ } else {
+ /* if port is not set, remove all the pps config */
+ unset($config['ntpd']['pps']);
+ }
+
+ if (!empty($_POST['ppsfudge1'])) {
+ $config['ntpd']['pps']['fudge1'] = $_POST['ppsfudge1'];
+ } elseif (isset($config['ntpd']['pps']['fudge1'])) {
+ unset($config['ntpd']['pps']['fudge1']);
+ }
+
+ if (!empty($_POST['ppsstratum']) && ($_POST['ppsstratum']) < 17) {
+ $config['ntpd']['pps']['stratum'] = $_POST['ppsstratum'];
+ } elseif (isset($config['ntpd']['pps']['stratum'])) {
+ unset($config['ntpd']['pps']['stratum']);
+ }
+
+ if (!empty($_POST['ppsselect'])) {
+ $config['ntpd']['pps']['noselect'] = $_POST['ppsselect'];
+ } elseif (isset($config['ntpd']['pps']['noselect'])) {
+ unset($config['ntpd']['pps']['noselect']);
+ }
+
+ if (!empty($_POST['ppsflag2'])) {
+ $config['ntpd']['pps']['flag2'] = $_POST['ppsflag2'];
+ } elseif (isset($config['ntpd']['pps']['flag2'])) {
+ unset($config['ntpd']['pps']['flag2']);
+ }
+
+ if (!empty($_POST['ppsflag3'])) {
+ $config['ntpd']['pps']['flag3'] = $_POST['ppsflag3'];
+ } elseif (isset($config['ntpd']['pps']['flag3'])) {
+ unset($config['ntpd']['pps']['flag3']);
+ }
+
+ if (!empty($_POST['ppsflag4'])) {
+ $config['ntpd']['pps']['flag4'] = $_POST['ppsflag4'];
+ } elseif (isset($config['ntpd']['pps']['flag4'])) {
+ unset($config['ntpd']['pps']['flag4']);
+ }
+
+ if (!empty($_POST['ppsrefid'])) {
+ $config['ntpd']['pps']['refid'] = $_POST['ppsrefid'];
+ } elseif (isset($config['ntpd']['pps']['refid'])) {
+ unset($config['ntpd']['pps']['refid']);
+ }
+
+ write_config("Updated NTP PPS Settings");
+
+ $retval = 0;
+ $retval = system_ntp_configure();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+$pconfig = &$config['ntpd']['pps'];
+
+$pgtitle = array(gettext("Services"), gettext("NTP PPS"));
+$shortcut_section = "ntp";
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_ntpd_pps.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ntpd pps">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("NTP"), false, "services_ntpd.php");
+ $tab_array[] = array(gettext("Serial GPS"), false, "services_ntpd_gps.php");
+ $tab_array[] = array(gettext("PPS"), true, "services_ntpd_pps.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("NTP PPS Configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">
+ </td>
+ <td width="78%" class="vtable"><?php echo gettext("Devices with a Pulse Per Second output such as radios that receive a time signal from DCF77 (DE), JJY (JP), MSF (GB) or WWVB (US) may be used as a PPS reference for NTP.");?>
+ <?php echo gettext("A serial GPS may also be used, but the serial GPS driver would usually be the better option.");?>
+ <?php echo gettext("A PPS signal only provides a reference to the change of a second, so at least one other source to number the seconds is required.");?>
+ <br />
+ <br /><strong><?php echo gettext("Note");?>:</strong> <?php echo gettext("At least 3 additional time sources should be configured under"); ?> <a href="services_ntpd.php"><?php echo gettext("Services > NTP"); ?></a> <?php echo gettext("to reliably supply the time of each PPS pulse."); ?>
+ </td>
+ </tr>
+<?php
+ $serialports = glob("/dev/cua?[0-9]{,.[0-9]}", GLOB_BRACE);
+ if (!empty($serialports)):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Serial port</td>
+ <td width="78%" class="vtable">
+ <select name="ppsport" class="formselect">
+ <option value="">none</option>
+ <?php
+ foreach ($serialports as $port):
+ $shortport = substr($port, 5);
+ $selected = ($shortport == $pconfig['port']) ? " selected=\"selected\"" : "";?>
+ <option value="<?php echo $shortport;?>"<?php echo $selected;?>><?php echo $shortport;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>&nbsp;
+ <?php echo gettext("All serial ports are listed, be sure to pick the port with the PPS source attached."); ?>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Fudge time</td>
+ <td width="78%" class="vtable">
+ <input name="ppsfudge1" type="text" class="formfld unknown" id="ppsfudge1" min="-1" max="1" size="20" value="<?=htmlspecialchars($pconfig['fudge1']);?>" />(<?php echo gettext("seconds");?>)<br />
+ <?php echo gettext("Fudge time is used to specify the PPS signal offset from the actual second such as the transmission delay between the transmitter and the receiver.");?> (<?php echo gettext("default");?>: 0.0).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Stratum</td>
+ <td width="78%" class="vtable">
+ <input name="ppsstratum" type="text" class="formfld unknown" id="ppsstratum" max="16" size="20" value="<?=htmlspecialchars($pconfig['stratum']);?>" /><?php echo gettext("(0-16)");?><br />
+ <?php echo gettext("This may be used to change the PPS Clock stratum");?> (<?php echo gettext("default");?>: 0). <?php echo gettext("This may be useful if, for some reason, you want ntpd to prefer a different clock and just monitor this source."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Flags</td>
+ <td width="78%" class="vtable">
+ <table summary="flags">
+ <tr>
+ <td>
+ <?php echo gettext("Normally there should be no need to change these options from the defaults."); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table>
+ <tr>
+ <td>
+ <input name="ppsflag2" type="checkbox" class="formcheckbox" id="ppsflag2"<?php if ($pconfig['flag2']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Enable falling edge PPS signal processing (default: rising edge)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="ppsflag3" type="checkbox" class="formcheckbox" id="ppsflag3"<?php if ($pconfig['flag3']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Enable kernel PPS clock discipline (default: disabled)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="ppsflag4" type="checkbox" class="formcheckbox" id="ppsflag4"<?php if ($pconfig['flag4']) echo " checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <span class="vexpl"><?php echo gettext("Record a timestamp once for each second, useful for constructing Allan deviation plots (default: disabled)."); ?></span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq">Clock ID</td>
+ <td width="78%" class="vtable">
+ <input name="ppsrefid" type="text" class="formfld unknown" id="ppsrefid" maxlength= "4" size="20" value="<?php htmlspecialchars($pconfig['refid']);?>" /><?php echo gettext("(1 to 4 charactors)");?><br />
+ <?php echo gettext("This may be used to change the PPS Clock ID");?> (<?php echo gettext("default");?>: PPS).
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_rfc2136.php b/src/usr/local/www/services_rfc2136.php
new file mode 100644
index 0000000..87d4770
--- /dev/null
+++ b/src/usr/local/www/services_rfc2136.php
@@ -0,0 +1,206 @@
+<?php
+/* $Id$ */
+/*
+ services_rfc2136.php
+
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsupdate
+*/
+
+##|+PRIV
+##|*IDENT=page-services-rfc2136clients
+##|*NAME=Services: RFC 2136 clients page
+##|*DESCR=Allow access to the 'Services: RFC 2136 clients' page.
+##|*MATCH=services_rfc2136.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['dnsupdates']['dnsupdate'])) {
+ $config['dnsupdates']['dnsupdate'] = array();
+}
+
+$a_rfc2136 = &$config['dnsupdates']['dnsupdate'];
+
+if ($_GET['act'] == "del") {
+ unset($a_rfc2136[$_GET['id']]);
+
+ write_config();
+
+ header("Location: services_rfc2136.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Services"), gettext("RFC 2136 clients"));
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="services_rfc2136.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rfc2136">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("DynDns"), false, "services_dyndns.php");
+ $tab_array[] = array(gettext("RFC 2136"), true, "services_rfc2136.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="5%" class="listhdrr"><?=gettext("If");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Server");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Cached IP");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_rfc2136 as $rfc2136):
+?>
+ <tr ondblclick="document.location='services_rfc2136_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+<?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc) {
+ if ($rfc2136['interface'] == $if) {
+ if (!isset($rfc2136['enable'])) {
+ echo "<span class=\"gray\">{$ifdesc}</span>";
+ } else {
+ echo "{$ifdesc}";
+ }
+ break;
+ }
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!isset($rfc2136['enable'])) {
+ echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['server']) . "</span>";
+ } else {
+ echo htmlspecialchars($rfc2136['server']);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ if (!isset($rfc2136['enable'])) {
+ echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['host']) . "</span>";
+ } else {
+ echo htmlspecialchars($rfc2136['host']);
+ }
+?>
+ </td>
+ <td class="listr">
+<?php
+ $filename = "{$g['conf_path']}/dyndns_{$rfc2136['interface']}_rfc2136_" . escapeshellarg($rfc2136['host']) . "_{$rfc2136['server']}.cache";
+ if (file_exists($filename)) {
+ echo "IPv4: ";
+ if (isset($rfc2136['usepublicip'])) {
+ $ipaddr = dyndnsCheckIP($rfc2136['interface']);
+ } else {
+ $ipaddr = get_interface_ip($rfc2136['interface']);
+ }
+ $cached_ip_s = explode("|", file_get_contents($filename));
+ $cached_ip = $cached_ip_s[0];
+ if ($ipaddr <> $cached_ip) {
+ echo "<font color='red'>";
+ } else {
+ echo "<font color='green'>";
+ }
+ echo htmlspecialchars($cached_ip);
+ echo "</font>";
+ } else {
+ echo "IPv4: N/A";
+ }
+ echo "<br />";
+ if (file_exists("{$filename}.ipv6")) {
+ echo "IPv6: ";
+ $ipaddr = get_interface_ipv6($rfc2136['interface']);
+ $cached_ip_s = explode("|", file_get_contents("{$filename}.ipv6"));
+ $cached_ip = $cached_ip_s[0];
+ if ($ipaddr <> $cached_ip) {
+ echo "<font color='red'>";
+ } else {
+ echo "<font color='green'>";
+ }
+ echo htmlspecialchars($cached_ip);
+ echo "</font>";
+ } else {
+ echo "IPv6: N/A";
+ }
+?>
+ </td>
+ <td class="listbg">
+<?php
+ if (!isset($rfc2136['enable'])) {
+ echo "<span class=\"gray\">" . htmlspecialchars($rfc2136['descr']) . "</span>";
+ } else {
+ echo htmlspecialchars($rfc2136['descr']);
+ }
+?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_rfc2136_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="services_rfc2136.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this client?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="5">&nbsp;</td>
+ <td class="list">
+ <a href="services_rfc2136_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" class="list">
+ <p class="vexpl"><span class="red"><strong><br /></strong></span></p>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_rfc2136_edit.php b/src/usr/local/www/services_rfc2136_edit.php
new file mode 100644
index 0000000..686ca27
--- /dev/null
+++ b/src/usr/local/www/services_rfc2136_edit.php
@@ -0,0 +1,276 @@
+<?php
+/* $Id$ */
+/*
+ services_rfc2136_edit.php
+
+ Copyright (C) 2008 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsupdate
+*/
+
+require("guiconfig.inc");
+
+if (!is_array($config['dnsupdates']['dnsupdate'])) {
+ $config['dnsupdates']['dnsupdate'] = array();
+}
+
+$a_rfc2136 = &$config['dnsupdates']['dnsupdate'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && isset($a_rfc2136[$id])) {
+ $pconfig['enable'] = isset($a_rfc2136[$id]['enable']);
+ $pconfig['host'] = $a_rfc2136[$id]['host'];
+ $pconfig['ttl'] = $a_rfc2136[$id]['ttl'];
+ if (!$pconfig['ttl']) {
+ $pconfig['ttl'] = 60;
+ }
+ $pconfig['keydata'] = $a_rfc2136[$id]['keydata'];
+ $pconfig['keyname'] = $a_rfc2136[$id]['keyname'];
+ $pconfig['keytype'] = $a_rfc2136[$id]['keytype'];
+ if (!$pconfig['keytype']) {
+ $pconfig['keytype'] = "zone";
+ }
+ $pconfig['server'] = $a_rfc2136[$id]['server'];
+ $pconfig['interface'] = $a_rfc2136[$id]['interface'];
+ $pconfig['usetcp'] = isset($a_rfc2136[$id]['usetcp']);
+ $pconfig['usepublicip'] = isset($a_rfc2136[$id]['usepublicip']);
+ $pconfig['recordtype'] = $a_rfc2136[$id]['recordtype'];
+ if (!$pconfig['recordtype']) {
+ $pconfig['recordtype'] = "both";
+ }
+ $pconfig['descr'] = $a_rfc2136[$id]['descr'];
+
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = array();
+ $reqdfieldsn = array();
+ $reqdfields = array_merge($reqdfields, explode(" ", "host ttl keyname keydata"));
+ $reqdfieldsn = array_merge($reqdfieldsn, array(gettext("Hostname"), gettext("TTL"), gettext("Key name"), gettext("Key")));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['host'] && !is_domain($_POST['host']))) {
+ $input_errors[] = gettext("The DNS update host name contains invalid characters.");
+ }
+ if (($_POST['ttl'] && !is_numericint($_POST['ttl']))) {
+ $input_errors[] = gettext("The DNS update TTL must be an integer.");
+ }
+ if (($_POST['keyname'] && !is_domain($_POST['keyname']))) {
+ $input_errors[] = gettext("The DNS update key name contains invalid characters.");
+ }
+
+ if (!$input_errors) {
+ $rfc2136 = array();
+ $rfc2136['enable'] = $_POST['enable'] ? true : false;
+ $rfc2136['host'] = $_POST['host'];
+ $rfc2136['ttl'] = $_POST['ttl'];
+ $rfc2136['keyname'] = $_POST['keyname'];
+ $rfc2136['keytype'] = $_POST['keytype'];
+ $rfc2136['keydata'] = $_POST['keydata'];
+ $rfc2136['server'] = $_POST['server'];
+ $rfc2136['usetcp'] = $_POST['usetcp'] ? true : false;
+ $rfc2136['usepublicip'] = $_POST['usepublicip'] ? true : false;
+ $rfc2136['recordtype'] = $_POST['recordtype'];
+ $rfc2136['interface'] = $_POST['interface'];
+ $rfc2136['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_rfc2136[$id]) {
+ $a_rfc2136[$id] = $rfc2136;
+ } else {
+ $a_rfc2136[] = $rfc2136;
+ }
+
+ write_config(gettext("New/Edited RFC2136 dnsupdate entry was posted."));
+
+ if ($_POST['Submit'] == gettext("Save & Force Update")) {
+ $retval = services_dnsupdate_process("", $rfc2136['host'], true);
+ } else {
+ $retval = services_dnsupdate_process();
+ }
+
+ header("Location: services_rfc2136.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("RFC 2136 client"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_rfc2136_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="rfs2136 edit">
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="title">
+ <tr>
+ <td class="optsect_s">
+ <strong><?=gettext("RFC 2136 client");?></strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface to monitor");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect" id="interface">
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc):?>
+ <option value="<?=$if;?>" <?php if ($pconfig['interface'] == $if) echo "selected=\"selected\"";?>><?=$ifdesc;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname");?></td>
+ <td width="78%" class="vtable">
+ <input name="host" type="text" class="formfld unknown" id="host" size="30" value="<?=htmlspecialchars($pconfig['host']);?>" />
+ <br /><span>Fully qualified hostname of the host to be updated</span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("TTL"); ?></td>
+ <td class="vtable">
+ <input name="ttl" type="text" class="formfld unknown" id="ttl" size="6" value="<?=htmlspecialchars($pconfig['ttl']);?>" />
+ <?=gettext("seconds");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Key name");?></td>
+ <td class="vtable">
+ <input name="keyname" type="text" class="formfld unknown" id="keyname" size="30" value="<?=htmlspecialchars($pconfig['keyname']);?>" />
+ <br />
+ <?=gettext("This must match the setting on the DNS server.");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Key type");?> </td>
+ <td class="vtable">
+ <input name="keytype" type="radio" value="zone" <?php if ($pconfig['keytype'] == "zone") echo "checked=\"checked\""; ?> /> <?=gettext("Zone");?> &nbsp;
+ <input name="keytype" type="radio" value="host" <?php if ($pconfig['keytype'] == "host") echo "checked=\"checked\""; ?> /> <?=gettext("Host");?> &nbsp;
+ <input name="keytype" type="radio" value="user" <?php if ($pconfig['keytype'] == "user") echo "checked=\"checked\""; ?> /><?=gettext(" User");?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Key");?></td>
+ <td class="vtable">
+ <input name="keydata" type="text" class="formfld unknown" id="keydata" size="70" value="<?=htmlspecialchars($pconfig['keydata']);?>" />
+ <br />
+ <?=gettext("Paste an HMAC-MD5 key here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server");?></td>
+ <td width="78%" class="vtable">
+ <input name="server" type="text" class="formfld unknown" id="server" size="30" value="<?=htmlspecialchars($pconfig['server'])?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td width="78%" class="vtable">
+ <input name="usetcp" type="checkbox" id="usetcp" value="<?=gettext("yes");?>" <?php if ($pconfig['usetcp']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Use TCP instead of UDP");?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Use Public IP");?></td>
+ <td width="78%" class="vtable">
+ <input name="usepublicip" type="checkbox" id="usepublicip" value="<?=gettext("yes");?>" <?php if ($pconfig['usepublicip']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("If the interface IP is private, attempt to fetch and use the public IP instead.");?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Record Type");?> </td>
+ <td class="vtable">
+ <input name="recordtype" type="radio" value="A" <?php if ($pconfig['recordtype'] == "A") echo "checked=\"checked\""; ?> /> <?=gettext("A (IPv4)");?> &nbsp;
+ <input name="recordtype" type="radio" value="AAAA" <?php if ($pconfig['recordtype'] == "AAAA") echo "checked=\"checked\""; ?> /> <?=gettext("AAAA (IPv6)");?> &nbsp;
+ <input name="recordtype" type="radio" value="both" <?php if ($pconfig['recordtype'] == "both") echo "checked=\"checked\""; ?> /> <?=gettext("Both");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ <a href="services_rfc2136.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel");?>" /></a>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save &amp; Force Update");?>" onclick="enable_change(true)" />
+ <?php if (isset($id) && $a_rfc2136[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?php printf(gettext("You must configure a DNS server in %sSystem: " .
+ "General setup %sor allow the DNS server list to be overridden " .
+ "by DHCP/PPP on WAN for dynamic DNS updates to work."), '<a href="system.php">', '</a>');?>
+ </span>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_router_advertisements.php b/src/usr/local/www/services_router_advertisements.php
new file mode 100644
index 0000000..3cf9dbb
--- /dev/null
+++ b/src/usr/local/www/services_router_advertisements.php
@@ -0,0 +1,480 @@
+<?php
+/* $Id$ */
+/*
+ services_router_advertisements.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-services-router-advertisements
+##|*NAME=Services: Router advertisementspage
+##|*DESCR=Allow access to the 'Services: Router Advertisements' page.
+##|*MATCH=services_router_advertisements.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!$g['services_dhcp_server_enable']) {
+ header("Location: /");
+ exit;
+}
+
+/* Fix failover DHCP problem
+ * http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
+ */
+ini_set("memory_limit", "64M");
+
+$if = $_GET['if'];
+if ($_POST['if']) {
+ $if = $_POST['if'];
+}
+
+/* if OLSRD is enabled, allow WAN to house DHCP. */
+if ($config['installedpackages']['olsrd']) {
+ foreach ($config['installedpackages']['olsrd']['config'] as $olsrd) {
+ if ($olsrd['enable']) {
+ $is_olsr_enabled = true;
+ break;
+ }
+ }
+}
+
+if (!$_GET['if']) {
+ $savemsg = "<p><b>" . gettext("The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses") . ".</b></p>" .
+ "<p><b>" . gettext("Only interfaces configured with a static IP will be shown") . ".</b></p>";
+}
+
+$iflist = get_configured_interface_with_descr();
+
+/* set the starting interface */
+if (!$if || !isset($iflist[$if])) {
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
+ (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
+ continue;
+ }
+ $if = $ifent;
+ break;
+ }
+}
+
+if (is_array($config['dhcpdv6'][$if])) {
+ /* RA specific */
+ $pconfig['ramode'] = $config['dhcpdv6'][$if]['ramode'];
+ $pconfig['rapriority'] = $config['dhcpdv6'][$if]['rapriority'];
+ if ($pconfig['rapriority'] == "") {
+ $pconfig['rapriority'] = "medium";
+ }
+ $pconfig['rainterface'] = $config['dhcpdv6'][$if]['rainterface'];
+ $pconfig['radomainsearchlist'] = $config['dhcpdv6'][$if]['radomainsearchlist'];
+ list($pconfig['radns1'], $pconfig['radns2'], $pconfig['radns3'], $pconfig['radns4']) = $config['dhcpdv6'][$if]['radnsserver'];
+ $pconfig['rasamednsasdhcp6'] = isset($config['dhcpdv6'][$if]['rasamednsasdhcp6']);
+
+ $pconfig['subnets'] = $config['dhcpdv6'][$if]['subnets']['item'];
+}
+if (!is_array($pconfig['subnets'])) {
+ $pconfig['subnets'] = array();
+}
+
+$advertise_modes = array("disabled" => "Disabled",
+ "router" => "Router Only",
+ "unmanaged" => "Unmanaged",
+ "managed" => "Managed",
+ "assist" => "Assisted",
+ "stateless_dhcp" => "Stateless DHCP");
+$priority_modes = array("low" => "Low",
+ "medium" => "Normal",
+ "high" => "High");
+$carplist = get_configured_carp_interface_list();
+
+$subnets_help = gettext("Subnets are specified in CIDR format. " .
+ "Select the CIDR mask that pertains to each entry. " .
+ "/128 specifies a single IPv6 host; /64 specifies a normal IPv6 network; etc. " .
+ "If no subnets are specified here, the Router Advertisement (RA) Daemon will advertise to the subnet to which the router's interface is assigned.");
+
+if ($_POST) {
+ unset($input_errors);
+
+ $pconfig = $_POST;
+
+ /* input validation */
+
+ $pconfig['subnets'] = array();
+ for ($x = 0; $x < 5000; $x += 1) {
+ $address = trim($_POST['subnet_address' . $x]);
+ if ($address === "") {
+ continue;
+ }
+
+ $bits = trim($_POST['subnet_bits' . $x]);
+ if ($bits === "") {
+ $bits = "128";
+ }
+
+ if (is_alias($address)) {
+ $pconfig['subnets'][] = $address;
+ } else {
+ $pconfig['subnets'][] = $address . "/" . $bits;
+ if (!is_ipaddrv6($address)) {
+ $input_errors[] = sprintf(gettext("An invalid subnet or alias was specified. [%s/%s]"), $address, $bits);
+ }
+ }
+ }
+
+ if (($_POST['radns1'] && !is_ipaddrv6($_POST['radns1'])) || ($_POST['radns2'] && !is_ipaddrv6($_POST['radns2'])) || ($_POST['radns3'] && !is_ipaddrv6($_POST['radns3'])) || ($_POST['radns4'] && !is_ipaddrv6($_POST['radns4']))) {
+ $input_errors[] = gettext("A valid IPv6 address must be specified for each of the DNS servers.");
+ }
+ if ($_POST['radomainsearchlist']) {
+ $domain_array=preg_split("/[ ;]+/", $_POST['radomainsearchlist']);
+ foreach ($domain_array as $curdomain) {
+ if (!is_domain($curdomain)) {
+ $input_errors[] = gettext("A valid domain search list must be specified.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ if (!is_array($config['dhcpdv6'][$if])) {
+ $config['dhcpdv6'][$if] = array();
+ }
+
+ $config['dhcpdv6'][$if]['ramode'] = $_POST['ramode'];
+ $config['dhcpdv6'][$if]['rapriority'] = $_POST['rapriority'];
+ $config['dhcpdv6'][$if]['rainterface'] = $_POST['rainterface'];
+
+ $config['dhcpdv6'][$if]['radomainsearchlist'] = $_POST['radomainsearchlist'];
+ unset($config['dhcpdv6'][$if]['radnsserver']);
+ if ($_POST['radns1']) {
+ $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns1'];
+ }
+ if ($_POST['radns2']) {
+ $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns2'];
+ }
+ if ($_POST['radns3']) {
+ $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns3'];
+ }
+ if ($_POST['radns4']) {
+ $config['dhcpdv6'][$if]['radnsserver'][] = $_POST['radns4'];
+ }
+
+ $config['dhcpdv6'][$if]['rasamednsasdhcp6'] = ($_POST['rasamednsasdhcp6']) ? true : false;
+
+ if (count($pconfig['subnets'])) {
+ $config['dhcpdv6'][$if]['subnets']['item'] = $pconfig['subnets'];
+ } else {
+ unset($config['dhcpdv6'][$if]['subnets']);
+ }
+
+ write_config();
+ $retval = services_radvd_configure();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Router advertisements"));
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1">
+</script>
+<script type="text/javascript" src="/javascript/suggestions.js">
+</script>
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "subnet_address";
+ rowtype[0] = "textbox";
+ rowsize[0] = "30";
+ rowname[1] = "subnet_bits";
+ rowtype[1] = "select";
+ rowsize[1] = "1";
+ function add_alias_control() {
+ var name = "subnet_address" + (totalrows - 1);
+ obj = document.getElementById(name);
+ obj.setAttribute('class', 'formfldalias');
+ obj.setAttribute('autocomplete', 'off');
+ objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
+ }
+//]]>
+</script>
+
+<form action="services_router_advertisements.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="router advert">
+ <tr>
+ <td>
+<?php
+ /* active tabs */
+ $tab_array = array();
+ $tabscounter = 0;
+ $i = 0;
+ foreach ($iflist as $ifent => $ifname) {
+ $oc = $config['interfaces'][$ifent];
+ if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6'])))) ||
+ (!is_array($config['dhcpdv6'][$ifent]) && !(is_ipaddrv6($oc['ipaddrv6']) && (!is_linklocal($oc['ipaddrv6']))))) {
+ continue;
+ }
+ if ($ifent == $if) {
+ $active = true;
+ } else {
+ $active = false;
+ }
+ $tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
+ $tabscounter++;
+ }
+ if ($tabscounter == 0) {
+ echo "</td></tr></table></form>";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("DHCPv6 Server"), false, "services_dhcpv6.php?if={$if}");
+ $tab_array[] = array(gettext("Router Advertisements"), true, "services_router_advertisements.php?if={$if}");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Router Advertisements");?></td>
+ <td width="78%" class="vtable">
+ <select name="ramode" id="ramode">
+ <?php foreach ($advertise_modes as $name => $value) { ?>
+ <option value="<?=$name ?>" <?php if ($pconfig['ramode'] == $name) echo "selected=\"selected\""; ?> > <?=$value ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ <strong><?php printf(gettext("Select the Operating Mode for the Router Advertisement (RA) Daemon."))?></strong>
+ <?php printf(gettext("Use \"Router Only\" to only advertise this router, \"Unmanaged\" for Router Advertising with Stateless Autoconfig, \"Managed\" for assignment through (a) DHCPv6 Server, \"Assisted\" for DHCPv6 Server assignment combined with Stateless Autoconfig"));?>
+ <?php printf(gettext("It is not required to activate this DHCPv6 server when set to \"Managed\", this can be another host on the network")); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Router Priority");?></td>
+ <td width="78%" class="vtable">
+ <select name="rapriority" id="rapriority">
+ <?php foreach ($priority_modes as $name => $value) { ?>
+ <option value="<?=$name ?>" <?php if ($pconfig['rapriority'] == $name) echo "selected=\"selected\""; ?> > <?=$value ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ <strong><?php printf(gettext("Select the Priority for the Router Advertisement (RA) Daemon."))?></strong>
+ </td>
+ </tr>
+<?php
+ $carplistif = array();
+ if (count($carplist) > 0) {
+ foreach ($carplist as $ifname => $vip) {
+ if ((preg_match("/^{$if}_/", $ifname)) && (is_ipaddrv6($vip))) {
+ $carplistif[$ifname] = $vip;
+ }
+ }
+ }
+ if (count($carplistif) > 0) {
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RA Interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="rainterface" id="rainterface">
+ <?php foreach ($carplistif as $ifname => $vip) { ?>
+ <option value="interface" <?php if ($pconfig['rainterface'] == "interface") echo "selected=\"selected\""; ?> > <?=strtoupper($if); ?></option>
+ <option value="<?=$ifname ?>" <?php if ($pconfig['rainterface'] == $ifname) echo "selected=\"selected\""; ?> > <?="$ifname - $vip"; ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ <strong><?php printf(gettext("Select the Interface for the Router Advertisement (RA) Daemon."))?></strong>
+ </td>
+ </tr>
+<?php
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RA Subnet(s)");?></td>
+ <td width="78%" class="vtable">
+ <div><?= htmlentities($subnets_help) ?></div>
+ <table id="maintable" summary="subnets">
+ <tbody>
+<?php
+ $counter = 0;
+ foreach ($pconfig['subnets'] as $subnet) {
+ $address_name = "subnet_address" . $counter;
+ $bits_name = "subnet_bits" . $counter;
+ list($address, $subnet) = explode("/", $subnet);
+?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="<?= $address_name ?>" type="text" class="formfldalias" id="<?= $address_name ?>" size="30" value="<?= htmlentities($address) ?>" />
+ </td>
+ <td>
+ <select name="<?= $bits_name ?>" class="formselect" id="<?= $bits_name ?>">
+ <option value="">
+ <?php for ($i = 128; $i >= 0; $i -= 1) { ?>
+ <option value="<?= $i ?>" <?= ("$subnet" === "$i") ? "selected='selected'" : "" ?>><?= $i ?></option>
+ <?php } ?>
+ </select>
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
+ </td>
+ </tr>
+<?php
+ $counter += 1;
+ }
+?>
+ <tr style="display:none">
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 2;
+ totalrows = <?= $counter ?>;
+ //]]>
+ </script>
+ <div id="addrowbutton">
+ <a onclick="javascript:addRowTo('maintable'); add_alias_control(); return false;" href="#"><!--
+ --><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" /></a>
+ </div>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">DNS</td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
+ <td width="78%" class="vtable">
+ <input name="radns1" type="text" class="formfld unknown" id="radns1" size="28" value="<?=htmlspecialchars($pconfig['radns1']);?>" /><br />
+ <input name="radns2" type="text" class="formfld unknown" id="radns2" size="28" value="<?=htmlspecialchars($pconfig['radns2']);?>" /><br />
+ <input name="radns3" type="text" class="formfld unknown" id="radns3" size="28" value="<?=htmlspecialchars($pconfig['radns3']);?>" /><br />
+ <input name="radns4" type="text" class="formfld unknown" id="radns4" size="28" value="<?=htmlspecialchars($pconfig['radns4']);?>" /><br />
+ <?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured on the General page.");?>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
+ <td width="78%" class="vtable">
+ <input name="radomainsearchlist" type="text" class="formfld unknown" id="radomainsearchlist" size="28" value="<?=htmlspecialchars($pconfig['radomainsearchlist']);?>" /><br />
+ <?=gettext("The RA server can optionally provide a domain search list. Use the semicolon character as separator");?>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input id="rasamednsasdhcp6" name="rasamednsasdhcp6" type="checkbox" value="yes" <?php if ($pconfig['rasamednsasdhcp6']) { echo "checked='checked'"; } ?> />
+ <strong><?= gettext("Use same settings as DHCPv6 server"); ?></strong>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="if" type="hidden" value="<?=$if;?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(function ($) {
+ var $rasamednsasdhcp6 = $("#rasamednsasdhcp6");
+ var $triggered_checkboxes = $("#radns1, #radns2, #radns3, #radns4, #radomainsearchlist");
+ if ($rasamednsasdhcp6.length !== 1) { return; }
+ var onchange = function () {
+ var checked = $rasamednsasdhcp6.is(":checked");
+ if (checked) {
+ $triggered_checkboxes.each(function () { this.disabled = true; });
+ } else {
+ $triggered_checkboxes.each(function () { this.disabled = false; });
+ }
+ };
+ $rasamednsasdhcp6.bind("change", onchange);
+ onchange();
+ });
+
+ var addressarray = <?= json_encode(get_alias_list("host", "network", "openvpn", "urltable")); ?>;
+ var objAlias = [];
+ function createAutoSuggest () {
+ <?php for ($i = 0; $i < $counter; $i += 1) { ?>
+ objAlias.push(new AutoSuggestControl(document.getElementById('subnet_address<?= $i ?>'), new StateSuggestions(addressarray)));
+ <?php } ?>
+ new AutoSuggestControl(document.getElementById('radns1'), new StateSuggestions(addressarray));
+ new AutoSuggestControl(document.getElementById('radns2'), new StateSuggestions(addressarray));
+ new AutoSuggestControl(document.getElementById('radns3'), new StateSuggestions(addressarray));
+ new AutoSuggestControl(document.getElementById('radns4'), new StateSuggestions(addressarray));
+ }
+ setTimeout(createAutoSuggest, 500);
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_snmp.php b/src/usr/local/www/services_snmp.php
new file mode 100644
index 0000000..a29ade0
--- /dev/null
+++ b/src/usr/local/www/services_snmp.php
@@ -0,0 +1,443 @@
+<?php
+/* $Id$ */
+/*
+ services_snmp.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: snmp
+*/
+
+##|+PRIV
+##|*IDENT=page-services-snmp
+##|*NAME=Services: SNMP page
+##|*DESCR=Allow access to the 'Services: SNMP' page.
+##|*MATCH=services_snmp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+if (!is_array($config['snmpd'])) {
+ $config['snmpd'] = array();
+ $config['snmpd']['rocommunity'] = "public";
+ $config['snmpd']['pollport'] = "161";
+}
+
+if (!is_array($config['snmpd']['modules'])) {
+ $config['snmpd']['modules'] = array();
+ $config['snmpd']['modules']['mibii'] = true;
+ $config['snmpd']['modules']['netgraph'] = true;
+ $config['snmpd']['modules']['pf'] = true;
+ $config['snmpd']['modules']['hostres'] = true;
+ $config['snmpd']['modules']['bridge'] = true;
+ $config['snmpd']['modules']['ucd'] = true;
+ $config['snmpd']['modules']['regex'] = true;
+}
+$pconfig['enable'] = isset($config['snmpd']['enable']);
+$pconfig['pollport'] = $config['snmpd']['pollport'];
+$pconfig['syslocation'] = $config['snmpd']['syslocation'];
+$pconfig['syscontact'] = $config['snmpd']['syscontact'];
+$pconfig['rocommunity'] = $config['snmpd']['rocommunity'];
+/* disabled until some docs show up on what this does.
+$pconfig['rwenable'] = isset($config['snmpd']['rwenable']);
+$pconfig['rwcommunity'] = $config['snmpd']['rwcommunity'];
+*/
+$pconfig['trapenable'] = isset($config['snmpd']['trapenable']);
+$pconfig['trapserver'] = $config['snmpd']['trapserver'];
+$pconfig['trapserverport'] = $config['snmpd']['trapserverport'];
+$pconfig['trapstring'] = $config['snmpd']['trapstring'];
+
+$pconfig['mibii'] = isset($config['snmpd']['modules']['mibii']);
+$pconfig['netgraph'] = isset($config['snmpd']['modules']['netgraph']);
+$pconfig['pf'] = isset($config['snmpd']['modules']['pf']);
+$pconfig['hostres'] = isset($config['snmpd']['modules']['hostres']);
+$pconfig['bridge'] = isset($config['snmpd']['modules']['bridge']);
+$pconfig['ucd'] = isset($config['snmpd']['modules']['ucd']);
+$pconfig['regex'] = isset($config['snmpd']['modules']['regex']);
+$pconfig['bindip'] = $config['snmpd']['bindip'];
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['enable']) {
+ if (strstr($_POST['syslocation'], "#")) {
+ $input_errors[] = gettext("Invalid character '#' in system location");
+ }
+ if (strstr($_POST['syscontact'], "#")) {
+ $input_errors[] = gettext("Invalid character '#' in system contact");
+ }
+ if (strstr($_POST['rocommunity'], "#")) {
+ $input_errors[] = gettext("Invalid character '#' in read community string");
+ }
+
+ $reqdfields = explode(" ", "rocommunity");
+ $reqdfieldsn = array(gettext("Community"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $reqdfields = explode(" ", "pollport");
+ $reqdfieldsn = array(gettext("Polling Port"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+
+ }
+
+ if ($_POST['trapenable']) {
+ if (strstr($_POST['trapstring'], "#")) {
+ $input_errors[] = gettext("Invalid character '#' in SNMP trap string");
+ }
+
+ $reqdfields = explode(" ", "trapserver");
+ $reqdfieldsn = array(gettext("Trap server"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $reqdfields = explode(" ", "trapserverport");
+ $reqdfieldsn = array(gettext("Trap server port"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ $reqdfields = explode(" ", "trapstring");
+ $reqdfieldsn = array(gettext("Trap string"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ }
+
+
+/* disabled until some docs show up on what this does.
+ if ($_POST['rwenable']) {
+ $reqdfields = explode(" ", "rwcommunity");
+ $reqdfieldsn = explode(",", "Write community string");
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ }
+*/
+
+
+
+ if (!$input_errors) {
+ $config['snmpd']['enable'] = $_POST['enable'] ? true : false;
+ $config['snmpd']['pollport'] = $_POST['pollport'];
+ $config['snmpd']['syslocation'] = $_POST['syslocation'];
+ $config['snmpd']['syscontact'] = $_POST['syscontact'];
+ $config['snmpd']['rocommunity'] = $_POST['rocommunity'];
+ /* disabled until some docs show up on what this does.
+ $config['snmpd']['rwenable'] = $_POST['rwenable'] ? true : false;
+ $config['snmpd']['rwcommunity'] = $_POST['rwcommunity'];
+ */
+ $config['snmpd']['trapenable'] = $_POST['trapenable'] ? true : false;
+ $config['snmpd']['trapserver'] = $_POST['trapserver'];
+ $config['snmpd']['trapserverport'] = $_POST['trapserverport'];
+ $config['snmpd']['trapstring'] = $_POST['trapstring'];
+
+ $config['snmpd']['modules']['mibii'] = $_POST['mibii'] ? true : false;
+ $config['snmpd']['modules']['netgraph'] = $_POST['netgraph'] ? true : false;
+ $config['snmpd']['modules']['pf'] = $_POST['pf'] ? true : false;
+ $config['snmpd']['modules']['hostres'] = $_POST['hostres'] ? true : false;
+ $config['snmpd']['modules']['bridge'] = $_POST['bridge'] ? true : false;
+ $config['snmpd']['modules']['ucd'] = $_POST['ucd'] ? true : false;
+ $config['snmpd']['modules']['regex'] = $_POST['regex'] ? true : false;
+ $config['snmpd']['bindip'] = $_POST['bindip'];
+
+ write_config();
+
+ $retval = 0;
+ $retval = services_snmpd_configure();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("SNMP"));
+$shortcut_section = "snmp";
+include("head.inc");
+
+?>
+<script type="text/javascript">
+//<![CDATA[
+function check_deps() {
+ if (jQuery('#hostres').prop('checked') == true) {
+ jQuery('#mibii').prop('checked', true);
+ }
+}
+
+function enable_change(whichone) {
+
+ if (whichone.name == "trapenable") {
+ if (whichone.checked == true) {
+ document.iform.trapserver.disabled = false;
+ document.iform.trapserverport.disabled = false;
+ document.iform.trapstring.disabled = false;
+ } else {
+ document.iform.trapserver.disabled = true;
+ document.iform.trapserverport.disabled = true;
+ document.iform.trapstring.disabled = true;
+ }
+ }
+
+ /* disabled until some docs show up on what this does.
+ if (whichone.name == "rwenable") {
+ if (whichone.checked == true) {
+ document.iform.rwcommunity.disabled = false;
+ } else {
+ document.iform.rwcommunity.disabled = true;
+ }
+ }
+ */
+
+ if (document.iform.enable.checked == true) {
+ document.iform.pollport.disabled = false;
+ document.iform.syslocation.disabled = false;
+ document.iform.syscontact.disabled = false;
+ document.iform.rocommunity.disabled = false;
+ document.iform.trapenable.disabled = false;
+ /* disabled until some docs show up on what this does.
+ document.iform.rwenable.disabled = false;
+ if (document.iform.rwenable.checked == true) {
+ document.iform.rwcommunity.disabled = false;
+ } else {
+ document.iform.rwcommunity.disabled = true;
+ }
+ */
+ if (document.iform.trapenable.checked == true) {
+ document.iform.trapserver.disabled = false;
+ document.iform.trapserverport.disabled = false;
+ document.iform.trapstring.disabled = false;
+ } else {
+ document.iform.trapserver.disabled = true;
+ document.iform.trapserverport.disabled = true;
+ document.iform.trapstring.disabled = true;
+ }
+ document.iform.mibii.disabled = false;
+ document.iform.netgraph.disabled = false;
+ document.iform.pf.disabled = false;
+ document.iform.hostres.disabled = false;
+ document.iform.ucd.disabled = false;
+ document.iform.regex.disabled = false;
+ //document.iform.bridge.disabled = false;
+ } else {
+ document.iform.pollport.disabled = true;
+ document.iform.syslocation.disabled = true;
+ document.iform.syscontact.disabled = true;
+ document.iform.rocommunity.disabled = true;
+ /*
+ document.iform.rwenable.disabled = true;
+ document.iform.rwcommunity.disabled = true;
+ */
+ document.iform.trapenable.disabled = true;
+ document.iform.trapserver.disabled = true;
+ document.iform.trapserverport.disabled = true;
+ document.iform.trapstring.disabled = true;
+
+ document.iform.mibii.disabled = true;
+ document.iform.netgraph.disabled = true;
+ document.iform.pf.disabled = true;
+ document.iform.hostres.disabled = true;
+ document.iform.ucd.disabled = true;
+ document.iform.regex.disabled = true;
+ //document.iform.bridge.disabled = true;
+ }
+}
+//]]>
+</script>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_snmp.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="snmp">
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="enable">
+ <tr>
+ <td class="optsect_s"><strong><?=gettext("SNMP Daemon");?></strong></td>
+ <td align="right" class="optsect_s">
+ <input name="enable" id="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(this)" /> <strong><?=gettext("Enable");?></strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Polling Port ");?></td>
+ <td width="78%" class="vtable">
+ <input name="pollport" type="text" class="formfld unknown" id="pollport" size="40" value="<?=htmlspecialchars($pconfig['pollport']) ? htmlspecialchars($pconfig['pollport']) : htmlspecialchars(161);?>" />
+ <br /><?=gettext("Enter the port to accept polling events on (default 161)");?><br />
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("System location");?></td>
+ <td width="78%" class="vtable">
+ <input name="syslocation" type="text" class="formfld unknown" id="syslocation" size="40" value="<?=htmlspecialchars($pconfig['syslocation']);?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("System contact");?></td>
+ <td width="78%" class="vtable">
+ <input name="syscontact" type="text" class="formfld unknown" id="syscontact" size="40" value="<?=htmlspecialchars($pconfig['syscontact']);?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Read Community String");?></td>
+ <td width="78%" class="vtable">
+ <input name="rocommunity" type="text" class="formfld unknown" id="rocommunity" size="40" value="<?=htmlspecialchars($pconfig['rocommunity']);?>" />
+ <br /><?=gettext("The community string is like a password, restricting access to querying SNMP to hosts knowing the community string. Use a strong value here to protect from unauthorized information disclosure.");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="enable">
+ <tr>
+ <td class="optsect_s"><strong><?=gettext("SNMP Traps");?></strong></td>
+ <td align="right" class="optsect_s">
+ <input name="trapenable" id="trapenable" type="checkbox" value="yes" <?php if ($pconfig['trapenable']) echo "checked=\"checked\""; ?> onclick="enable_change(this)" /> <strong><?=gettext("Enable");?></strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Trap server");?></td>
+ <td width="78%" class="vtable">
+ <input name="trapserver" type="text" class="formfld unknown" id="trapserver" size="40" value="<?=htmlspecialchars($pconfig['trapserver']);?>" />
+ <br /><?=gettext("Enter trap server name");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Trap server port ");?></td>
+ <td width="78%" class="vtable">
+ <input name="trapserverport" type="text" class="formfld unknown" id="trapserverport" size="40" value="<?=htmlspecialchars($pconfig['trapserverport']) ? htmlspecialchars($pconfig['trapserverport']) : htmlspecialchars(162);?>" />
+ <br /><?=gettext("Enter the port to send the traps to (default 162)");?><br />
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Enter the SNMP trap string");?></td>
+ <td width="78%" class="vtable">
+ <input name="trapstring" type="text" class="formfld unknown" id="trapstring" size="40" value="<?=htmlspecialchars($pconfig['trapstring']);?>" />
+ <br /><?=gettext("Trap string");?><br />
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="modules">
+ <tr>
+ <td class="optsect_s"><strong><?=gettext("Modules");?></strong></td>
+ <td align="right" class="optsect_s">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("SNMP Modules");?></td>
+ <td width="78%" class="vtable">
+ <input name="mibii" type="checkbox" id="mibii" value="yes" onclick="check_deps()" <?php if ($pconfig['mibii']) echo "checked=\"checked\""; ?> /><?=gettext("MibII"); ?>
+ <br />
+ <input name="netgraph" type="checkbox" id="netgraph" value="yes" <?php if ($pconfig['netgraph']) echo "checked=\"checked\""; ?> /><?=gettext("Netgraph"); ?>
+ <br />
+ <input name="pf" type="checkbox" id="pf" value="yes" <?php if ($pconfig['pf']) echo "checked=\"checked\""; ?> /><?=gettext("PF"); ?>
+ <br />
+ <input name="hostres" type="checkbox" id="hostres" value="yes" onclick="check_deps()" <?php if ($pconfig['hostres']) echo "checked=\"checked\""; ?> /><?=gettext("Host Resources (Requires MibII)");?>
+ <br />
+ <input name="ucd" type="checkbox" id="ucd" value="yes" <?php if ($pconfig['ucd']) echo "checked=\"checked\""; ?> /><?=gettext("UCD"); ?>
+ <br />
+ <input name="regex" type="checkbox" id="regex" value="yes" <?php if ($pconfig['regex']) echo "checked=\"checked\""; ?> /><?=gettext("Regex"); ?>
+ <br />
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="optsect_t">
+ <table border="0" cellspacing="0" cellpadding="0" width="100%" summary="interface">
+ <tr>
+ <td class="optsect_s"><strong><?=gettext("Interface Binding");?></strong></td>
+ <td align="right" class="optsect_s">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Bind Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="bindip" class="formselect">
+ <option value="">All</option>
+ <?php
+ $listenips = get_possible_listen_ips();
+ foreach ($listenips as $lip => $ldescr):
+ $selected = "";
+ if ($lip == $pconfig['bindip']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$lip;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ldescr);?>
+ </option>
+ <?php
+ endforeach;
+ unset($listenips);
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ </table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(this);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_unbound.php b/src/usr/local/www/services_unbound.php
new file mode 100644
index 0000000..a197c8c
--- /dev/null
+++ b/src/usr/local/www/services_unbound.php
@@ -0,0 +1,626 @@
+<?php
+/* $Id$ */
+/*
+ services_unbound.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2014 Warren Baker (warren@pfsense.org)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsresolver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-unbound
+##|*NAME=Services: DNS Resolver page
+##|*DESCR=Allow access to the 'Services: DNS Resolver' page.
+##|*MATCH=services_unbound.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("unbound.inc");
+require_once("system.inc");
+
+if (!is_array($config['unbound'])) {
+ $config['unbound'] = array();
+}
+
+$a_unboundcfg =& $config['unbound'];
+
+if (!is_array($config['unbound']['hosts'])) {
+ $config['unbound']['hosts'] = array();
+}
+
+$a_hosts =& $config['unbound']['hosts'];
+
+if (!is_array($config['unbound']['domainoverrides'])) {
+ $config['unbound']['domainoverrides'] = array();
+}
+
+$a_domainOverrides = &$config['unbound']['domainoverrides'];
+
+if (isset($config['unbound']['enable'])) {
+ $pconfig['enable'] = true;
+}
+if (isset($config['unbound']['dnssec'])) {
+ $pconfig['dnssec'] = true;
+}
+if (isset($config['unbound']['forwarding'])) {
+ $pconfig['forwarding'] = true;
+}
+if (isset($config['unbound']['regdhcp'])) {
+ $pconfig['regdhcp'] = true;
+}
+if (isset($config['unbound']['regdhcpstatic'])) {
+ $pconfig['regdhcpstatic'] = true;
+}
+if (isset($config['unbound']['txtsupport'])) {
+ $pconfig['txtsupport'] = true;
+}
+
+$pconfig['port'] = $config['unbound']['port'];
+$pconfig['custom_options'] = base64_decode($config['unbound']['custom_options']);
+
+if (empty($config['unbound']['active_interface'])) {
+ $pconfig['active_interface'] = array();
+} else {
+ $pconfig['active_interface'] = explode(",", $config['unbound']['active_interface']);
+}
+if (empty($config['unbound']['outgoing_interface'])) {
+ $pconfig['outgoing_interface'] = array();
+} else {
+ $pconfig['outgoing_interface'] = explode(",", $config['unbound']['outgoing_interface']);
+}
+
+if ($_POST) {
+ $pconfig = $_POST;
+ unset($input_errors);
+
+ if ($_POST['apply']) {
+ $retval = services_unbound_configure();
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('unbound');
+ }
+ /* Update resolv.conf in case the interface bindings exclude localhost. */
+ system_resolvconf_generate();
+ /* Start or restart dhcpleases when it's necessary */
+ system_dhcpleases_configure();
+ } else {
+ if (isset($_POST['enable']) && isset($config['dnsmasq']['enable'])) {
+ if ($_POST['port'] == $config['dnsmasq']['port']) {
+ $input_errors[] = "The DNS Forwarder is enabled using this port. Choose a non-conflicting port, or disable the DNS Forwarder.";
+ }
+ }
+
+ if (empty($_POST['active_interface'])) {
+ $input_errors[] = "One or more Network Interfaces must be selected for binding.";
+ } else if (!isset($config['system']['dnslocalhost']) && (!in_array("lo0", $_POST['active_interface']) && !in_array("all", $_POST['active_interface']))) {
+ $input_errors[] = "This system is configured to use the DNS Resolver as its DNS server, so Localhost or All must be selected in Network Interfaces.";
+ }
+
+ if (empty($_POST['outgoing_interface'])) {
+ $input_errors[] = "One or more Outgoing Network Interfaces must be selected.";
+ }
+
+ if ($_POST['port']) {
+ if (is_port($_POST['port'])) {
+ $a_unboundcfg['port'] = $_POST['port'];
+ } else {
+ $input_errors[] = gettext("You must specify a valid port number.");
+ }
+ } else if (isset($config['unbound']['port'])) {
+ unset($config['unbound']['port']);
+ }
+
+ if (isset($_POST['enable'])) {
+ $a_unboundcfg['enable'] = true;
+ } else {
+ unset($a_unboundcfg['enable']);
+ }
+ if (isset($_POST['dnssec'])) {
+ $a_unboundcfg['dnssec'] = true;
+ } else {
+ unset($a_unboundcfg['dnssec']);
+ }
+ if (isset($_POST['forwarding'])) {
+ $a_unboundcfg['forwarding'] = true;
+ } else {
+ unset($a_unboundcfg['forwarding']);
+ }
+ if (isset($_POST['regdhcp'])) {
+ $a_unboundcfg['regdhcp'] = true;
+ } else {
+ unset($a_unboundcfg['regdhcp']);
+ }
+ if (isset($_POST['regdhcpstatic'])) {
+ $a_unboundcfg['regdhcpstatic'] = true;
+ } else {
+ unset($a_unboundcfg['regdhcpstatic']);
+ }
+ if (isset($_POST['txtsupport'])) {
+ $a_unboundcfg['txtsupport'] = true;
+ } else {
+ unset($a_unboundcfg['txtsupport']);
+ }
+ if (is_array($_POST['active_interface']) && !empty($_POST['active_interface'])) {
+ $a_unboundcfg['active_interface'] = implode(",", $_POST['active_interface']);
+ }
+
+ if (is_array($_POST['outgoing_interface']) && !empty($_POST['outgoing_interface'])) {
+ $a_unboundcfg['outgoing_interface'] = implode(",", $_POST['outgoing_interface']);
+ }
+
+ $a_unboundcfg['custom_options'] = base64_encode(str_replace("\r\n", "\n", $_POST['custom_options']));
+
+ if (!$input_errors) {
+ write_config("DNS Resolver configured.");
+ mark_subsystem_dirty('unbound');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($_GET['type'] == 'host') {
+ if ($a_hosts[$_GET['id']]) {
+ unset($a_hosts[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('unbound');
+ header("Location: services_unbound.php");
+ exit;
+ }
+ } elseif ($_GET['type'] == 'doverride') {
+ if ($a_domainOverrides[$_GET['id']]) {
+ unset($a_domainOverrides[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('unbound');
+ header("Location: services_unbound.php");
+ exit;
+ }
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DNS Resolver"));
+$shortcut_section = "resolver";
+include_once("head.inc");
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+function enable_change(enable_over) {
+ var endis;
+ endis = !(jQuery('#enable').is(":checked") || enable_over);
+ jQuery("#active_interface,#outgoing_interface,#dnssec,#forwarding,#regdhcp,#regdhcpstatic,#dhcpfirst,#port,#txtsupport,#custom_options").prop('disabled', endis);
+}
+function show_advanced_dns() {
+ jQuery("#showadv").show();
+ jQuery("#showadvbox").hide();
+}
+//]]>
+</script>
+</head>
+
+<body>
+<?php include("fbegin.inc"); ?>
+<form action="services_unbound.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('unbound')): ?><br/>
+<?php print_info_box_np(gettext("The configuration of the DNS Resolver has been changed") . ".<br />" . gettext("You must apply changes for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound">
+ <tbody>
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General settings"), true, "services_unbound.php");
+ $tab_array[] = array(gettext("Advanced settings"), false, "services_unbound_advanced.php");
+ $tab_array[] = array(gettext("Access Lists"), false, "/services_unbound_acls.php");
+ display_top_tabs($tab_array, true);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General DNS Resolver Options");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Enable");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if (isset($pconfig['enable'])) echo "checked=\"checked\"";?> onclick="enable_change(false)" />
+ <strong>
+ <?=gettext("Enable DNS Resolver");?><br />
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Listen Port");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="port" type="text" id="port" size="6" <?php if ($pconfig['port']) echo "value=\"" . htmlspecialchars($pconfig['port']) . "\"";?> />
+ <br /><br />
+ <?=gettext("The port used for responding to DNS queries. It should normally be left blank unless another service needs to bind to TCP/UDP port 53.");?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Network Interfaces"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ $interface_addresses = get_possible_listen_ips(true);
+ ?>
+ <?=gettext("Interface IPs used by the DNS Resolver for responding to queries from clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries to other interface IPs not selected below are discarded. The default behavior is to respond to queries on every available IPv4 and IPv6 address.");?>
+ <br /><br />
+ <select id="active_interface" name="active_interface[]" multiple="multiple" size="<?php echo $size; ?>">
+ <option value="all" <?php if (empty($pconfig['active_interface']) || empty($pconfig['active_interface'][0]) || in_array("all", $pconfig['active_interface'], true)) echo 'selected="selected"'; ?>>All</option>
+ <?php
+ foreach ($interface_addresses as $laddr => $ldescr):
+ $selected = "";
+ if (in_array($laddr, $pconfig['active_interface'])) {
+ $selected = 'selected="selected"';
+ }
+ ?>
+ <option value="<?=$laddr;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ldescr);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Outgoing Network Interfaces"); ?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Utilize different network interface(s) that the DNS Resolver will use to send queries to authoritative servers and receive their replies. By default all interfaces are used.");?>
+ <br /><br />
+ <select id="outgoing_interface" name="outgoing_interface[]" multiple="multiple" size="<?php echo $size; ?>">
+ <option value="" <?php if (empty($pconfig['outgoing_interface']) || empty($pconfig['outgoing_interface'][0])) echo 'selected="selected"'; ?>>All</option>
+ <?php
+ foreach ($interface_addresses as $laddr => $ldescr):
+ $selected = "";
+ if (in_array($laddr, $pconfig['outgoing_interface'])) {
+ $selected = 'selected="selected"';
+ }
+ ?>
+ <option value="<?=$laddr;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ldescr);?>
+ </option>
+ <?php
+ endforeach;
+ unset($interface_addresses);
+ ?>
+ </select>
+ <br /><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DNSSEC");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="dnssec" type="checkbox" id="dnssec" value="yes" <?php echo (isset($pconfig['dnssec']) ? "checked=\"checked\"" : "");?> />
+ <strong>
+ <?=gettext("Enable DNSSEC Support");?><br />
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DNS Query Forwarding");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="forwarding" type="checkbox" id="forwarding" value="yes" <?php echo (isset($pconfig['forwarding']) ? "checked=\"checked\"" : "");?> />
+ <strong><?=gettext("Enable Forwarding Mode");?></strong><br />
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DHCP Registration");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="regdhcp" type="checkbox" id="regdhcp" value="yes" <?php if (isset($pconfig['regdhcp'])) echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Register DHCP leases in the DNS Resolver");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, then machines that specify".
+ " their hostname when requesting a DHCP lease will be registered".
+ " in the DNS Resolver, so that their name can be resolved.".
+ " You should also set the domain in %sSystem:".
+ " General setup%s to the proper value."), '<a href="system.php">', '</a>')?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Static DHCP");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="regdhcpstatic" type="checkbox" id="regdhcpstatic" value="yes" <?php if (isset($pconfig['regdhcpstatic'])) echo "checked=\"checked\"";?> />
+ <strong>
+ <?=gettext("Register DHCP static mappings in the DNS Resolver");?><br />
+ </strong>
+ <?php printf(gettext("If this option is set, then DHCP static mappings will ".
+ "be registered in the DNS Resolver, so that their name can be ".
+ "resolved. You should also set the domain in %s".
+ "System: General setup%s to the proper value."), '<a href="system.php">', '</a>');?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("TXT Comment Support");?></td>
+ <td width="78%" class="vtable">
+ <p>
+ <input name="txtsupport" type="checkbox" id="txtsupport" value="yes" <?php echo (isset($pconfig['txtsupport']) ? "checked=\"checked\"" : "");?> />
+ <strong>
+ <?=gettext("If this option is set, then any descriptions associated with Host entries and DHCP Static mappings will create a corresponding TXT record.");?><br />
+ </strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Advanced");?></td>
+ <td width="78%" class="vtable">
+ <div id="showadvbox" <?php if ($pconfig['custom_options']) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_dns()" value="<?=gettext("Advanced"); ?>" /> - <?=gettext("Show advanced option");?>
+ </div>
+ <div id="showadv" <?php if (empty($pconfig['custom_options'])) echo "style='display:none'"; ?>>
+ <strong><?=gettext("Advanced");?><br /></strong>
+ <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
+ <?=gettext("Enter any additional configuration parameters to add to the DNS Resolver configuration here, separated by a newline"); ?><br />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+
+<p>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?php printf(gettext("If the DNS Resolver is enabled, the DHCP".
+ " service (if enabled) will automatically serve the LAN IP".
+ " address as a DNS server to DHCP clients so they will use".
+ " the DNS Resolver. If Forwarding, is enabled, the DNS Resolver will use the DNS servers".
+ " entered in %sSystem: General setup%s".
+ " or those obtained via DHCP or PPP on WAN if the &quot;Allow".
+ " DNS server list to be overridden by DHCP/PPP on WAN&quot;".
+ " is checked."), '<a href="system.php">', '</a>');?>
+ <br />
+ </span>
+</p>
+
+&nbsp;<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="host overrides">
+ <tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("Host Overrides");?></td>
+ </tr>
+ <tr>
+ <td>
+ <br />
+ <?=gettext("Entries in this section override individual results from the forwarders.");?>
+ <?=gettext("Use these for changing DNS results or for adding custom DNS records.");?>
+ </td>
+ </tr>
+</table>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
+ <thead>
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Host");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Domain");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="services_unbound_host_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td valign="middle"><a href="services_unbound_host_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_hosts as $hostent):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=strtolower($hostent['host']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=strtolower($hostent['domain']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=$hostent['ip'];?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($hostent['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_unbound_host_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td><a href="services_unbound.php?type=host&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])):
+ foreach ($hostent['aliases']['item'] as $alias):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=strtolower($alias['host']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=strtolower($alias['domain']);?>&nbsp;
+ </td>
+ <td class="listr" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ Alias for <?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain'];?>&nbsp;
+ </td>
+ <td class="listbg" ondblclick="document.location='services_unbound_host_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($alias['description']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="services_unbound_host_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+ $i++;
+ endforeach;
+?>
+ <tr style="display:none"><td></td></tr>
+ </tbody>
+</table>
+<br />
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="domain overrides">
+<tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("Domain Overrides");?></td>
+</tr>
+<tr>
+ <td>
+ <p>
+ <?=gettext("Entries in this area override an entire domain by specifying an".
+ " authoritative DNS server to be queried for that domain.");?>
+ <?=gettext("If there are multiple authoritative DNS servers available for a domain then make a separate entry for each, using the same domain name.");?>
+ </p>
+ </td>
+</tr>
+</table>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" summary="results">
+ <thead>
+ <tr>
+ <td width="35%" class="listhdrr"><?=gettext("Domain");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("IP");?></td>
+ <td width="40%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td><a href="services_unbound_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17" height="17"></td>
+ <td><a href="services_unbound_domainoverride_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_domainOverrides as $doment):
+?>
+ <tr>
+ <td class="listlr">
+ <?=strtolower($doment['domain']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=$doment['ip'];?>&nbsp;
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($doment['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle">
+ <a href="services_unbound_domainoverride_edit.php?id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" />
+ </a>
+ </td>
+ <td valign="middle">
+ <a href="services_unbound.php?act=del&amp;type=doverride&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this domain override?");?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr style="display:none"><td></td></tr>
+ </tbody>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_unbound_acls.php b/src/usr/local/www/services_unbound_acls.php
new file mode 100644
index 0000000..3a51b3e
--- /dev/null
+++ b/src/usr/local/www/services_unbound_acls.php
@@ -0,0 +1,421 @@
+<?php
+/* $Id$ */
+/*
+ services_unbound_acls.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2011 Warren Baker <warren@decoy.co.za>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require("guiconfig.inc");
+require("unbound.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound_acls.php');
+}
+
+if (!is_array($config['unbound']['acls'])) {
+ $config['unbound']['acls'] = array();
+}
+
+$a_acls = &$config['unbound']['acls'];
+
+$id = $_GET['id'];
+if (isset($_POST['aclid'])) {
+ $id = $_POST['aclid'];
+}
+
+if (!empty($id) && !is_numeric($id)) {
+ pfSenseHeader("services_unbound_acls.php");
+ exit;
+}
+
+$act = $_GET['act'];
+if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+if ($act == "del") {
+ if (!$a_acls[$id]) {
+ pfSenseHeader("services_unbound_acls.php");
+ exit;
+ }
+
+ unset($a_acls[$id]);
+ write_config();
+ mark_subsystem_dirty('unbound');
+}
+
+if ($act == "new") {
+ $id = unbound_get_next_id();
+}
+
+if ($act == "edit") {
+ if (isset($id) && $a_acls[$id]) {
+ $pconfig = $a_acls[$id];
+ $networkacl = $a_acls[$id]['row'];
+ }
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = services_unbound_configure();
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('unbound');
+ }
+ } else {
+
+ // input validation - only allow 50 entries in a single ACL
+ for ($x = 0; $x < 50; $x++) {
+ if (isset($pconfig["acl_network{$x}"])) {
+ $networkacl[$x] = array();
+ $networkacl[$x]['acl_network'] = $pconfig["acl_network{$x}"];
+ $networkacl[$x]['mask'] = $pconfig["mask{$x}"];
+ $networkacl[$x]['description'] = $pconfig["description{$x}"];
+ if (!is_ipaddr($networkacl[$x]['acl_network'])) {
+ $input_errors[] = gettext("You must enter a valid IP address for each row under Networks.");
+ }
+
+ if (is_ipaddr($networkacl[$x]['acl_network'])) {
+ if (!is_subnet($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) {
+ $input_errors[] = gettext("You must enter a valid IPv4 netmask for each IPv4 row under Networks.");
+ }
+ } else if (function_exists("is_ipaddrv6")) {
+ if (!is_ipaddrv6($networkacl[$x]['acl_network'])) {
+ $input_errors[] = gettext("You must enter a valid IPv6 address for {$networkacl[$x]['acl_network']}.");
+ } else if (!is_subnetv6($networkacl[$x]['acl_network']."/".$networkacl[$x]['mask'])) {
+ $input_errors[] = gettext("You must enter a valid IPv6 netmask for each IPv6 row under Networks.");
+ }
+ } else {
+ $input_errors[] = gettext("You must enter a valid IP address for each row under Networks.");
+ }
+ } else if (isset($networkacl[$x])) {
+ unset($networkacl[$x]);
+ }
+ }
+
+ if (!$input_errors) {
+ if ($pconfig['Submit'] == gettext("Save")) {
+ $acl_entry = array();
+ $acl_entry['aclid'] = $pconfig['aclid'];
+ $acl_entry['aclname'] = $pconfig['aclname'];
+ $acl_entry['aclaction'] = $pconfig['aclaction'];
+ $acl_entry['description'] = $pconfig['description'];
+ $acl_entry['aclid'] = $pconfig['aclid'];
+ $acl_entry['row'] = array();
+ foreach ($networkacl as $acl) {
+ $acl_entry['row'][] = $acl;
+ }
+
+ if (isset($id) && $a_acls[$id]) {
+ $a_acls[$id] = $acl_entry;
+ } else {
+ $a_acls[] = $acl_entry;
+ }
+
+ mark_subsystem_dirty("unbound");
+ write_config();
+
+ pfSenseHeader("/services_unbound_acls.php");
+ exit;
+ }
+ }
+ }
+}
+
+$closehead = false;
+$pgtitle = "Services: DNS Resolver: Access Lists";
+$shortcut_section = "resolver";
+include("head.inc");
+
+?>
+
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<script type="text/javascript" src="/javascript/row_helper.js"></script>
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "acl_network";
+ rowtype[0] = "textbox,ipv4v6";
+ rowsize[0] = "30";
+
+ rowname[1] = "mask";
+ rowtype[1] = "select,ipv4v6";
+ rowsize[1] = "1";
+
+ rowname[2] = "description";
+ rowtype[2] = "textbox";
+ rowsize[2] = "40";
+//]]>
+</script>
+</head>
+
+<body>
+
+<?php include("fbegin.inc"); ?>
+<form action="services_unbound_acls.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('unbound')): ?><br/>
+<?php print_info_box_np(gettext("The configuration of the DNS Resolver, has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound acls">
+ <tbody>
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General Settings"), false, "/services_unbound.php");
+ $tab_array[] = array(gettext("Advanced settings"), false, "services_unbound_advanced.php");
+ $tab_array[] = array(gettext("Access Lists"), true, "/services_unbound_acls.php");
+ display_top_tabs($tab_array, true);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+<?php
+ if ($act == "new" || $act == "edit"):
+?>
+ <input name="aclid" type="hidden" value="<?=$id;?>" />
+ <input name="act" type="hidden" value="<?=$act;?>" />
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=ucwords(sprintf(gettext("%s Access List"), $act));?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Access List name");?></td>
+ <td width="78%" class="vtable">
+ <input name="aclname" type="text" class="formfld" id="aclname" size="30" maxlength="30" value="<?=htmlspecialchars($pconfig['aclname']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Provide an Access List name.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Action");?></td>
+ <td width="78%" class="vtable">
+ <select name="aclaction" class="formselect">
+ <?php
+ $types = explode(",", "Allow,Deny,Refuse,Allow Snoop");
+ foreach ($types as $type):
+ ?>
+ <option value="<?=strtolower($type);?>" <?php if (strtolower($type) == strtolower($pconfig['aclaction'])) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($type);?>
+ </option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Choose what to do with DNS requests that match the criteria specified below.");?> <br />
+ <?=gettext("<b>Deny:</b> This action stops queries from hosts within the netblock defined below.");?> <br />
+ <?=gettext("<b>Refuse:</b> This action also stops queries from hosts within the netblock defined below, but sends a DNS rcode REFUSED error message back to the client.");?> <br />
+ <?=gettext("<b>Allow:</b> This action allows queries from hosts within the netblock defined below.");?> <br />
+ <?=gettext("<b>Allow Snoop:</b> This action allows recursive and nonrecursive access from hosts within the netblock defined below. Used for cache snooping and ideally should only be configured for your administrative host.");?> <br />
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Networks");?></td>
+ <td width="78%" class="vtable">
+ <table id="maintable" summary="networks">
+ <tbody>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Network");?></div></td>
+ <td><div id="twocolumn"><?=gettext("CIDR");?></div></td>
+ <td><div id="threecolumn"><?=gettext("Description");?></div></td>
+ </tr>
+ <?php
+ $counter = 0;
+ if ($networkacl) {
+ foreach ($networkacl as $item):
+ $network = $item['acl_network'];
+ $cidr = $item['mask'];
+ $description = $item['description'];
+ ?>
+ <tr>
+ <td>
+ <input name="acl_network<?=$counter;?>" type="text" class="formfld unknown ipv4v6" id="acl_network<?=$counter;?>" size="30" value="<?=htmlspecialchars($network);?>" />
+ </td>
+ <td>
+ <select name="mask<?=$counter;?>" class="formselect ipv4v6" id="mask<?=$counter;?>">
+ <?php
+ for ($i = 128; $i > 0; $i--) {
+ echo "<option value=\"$i\" ";
+ if ($i == $cidr) echo "selected=\"selected\"";
+ echo ">" . $i . "</option>";
+ }
+ ?>
+ </select>
+ </td>
+ <td>
+ <input name="description<?=$counter;?>" type="text" class="formfld unknown" id="description<?=$counter;?>" size="40" value="<?=htmlspecialchars($description);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
+ </td>
+ </tr>
+ <?php
+ $counter++;
+ endforeach;
+ }
+ ?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="description" type="text" class="formfld unknown" id="description" size="52" maxlength="52" value="<?=htmlspecialchars($pconfig['description']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ &nbsp;<br />&nbsp;
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+ </table>
+<?php
+ else:
+?>
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
+ <thead>
+ <tr>
+ <td width="25%" class="listhdrr"><?=gettext("Access List Name"); ?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Action"); ?></td>
+ <td width="45%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="5%" class="list">&nbsp;</td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="3">&nbsp;</td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td width="17">&nbsp;</td>
+ <td valign="middle">
+ <a href="services_unbound_acls.php?act=new">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("Add new Access List"); ?>" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p>
+ <?=gettext("Access Lists to control access to the DNS Resolver can be defined here.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <?php
+ $i = 0;
+ foreach ($a_acls as $acl):
+ ?>
+ <tr ondblclick="document.location='services_unbound_acls.php?act=edit&amp;id=<?=$i;?>'">
+ <td class="listlr">
+ <?=htmlspecialchars($acl['aclname']);?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($acl['aclaction']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($acl['description']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle">
+ <a href="services_unbound_acls.php?act=edit&amp;id=<?=$i;?>">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit access list"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ </td>
+ <td valign="middle">
+ <a href="services_unbound_acls.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this access list?"); ?>')">
+ <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete access list"); ?>" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr style="display:none"><td></td></tr>
+ </tbody>
+ </table>
+<?php
+ endif;
+?>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_unbound_advanced.php b/src/usr/local/www/services_unbound_advanced.php
new file mode 100644
index 0000000..5fc4aed
--- /dev/null
+++ b/src/usr/local/www/services_unbound_advanced.php
@@ -0,0 +1,469 @@
+<?php
+/* $Id$ */
+/*
+ services_unbound_advanced.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2015 Warren Baker (warren@percol8.co.za)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsresolver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-unbound
+##|*NAME=Services: DNS Resolver Advanced page
+##|*DESCR=Allow access to the 'Services: DNS Resolver Advanced' page.
+##|*MATCH=services_unbound.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("unbound.inc");
+
+if (!is_array($config['unbound'])) {
+ $config['unbound'] = array();
+}
+
+if (isset($config['unbound']['hideidentity'])) {
+ $pconfig['hideidentity'] = true;
+}
+if (isset($config['unbound']['hideversion'])) {
+ $pconfig['hideversion'] = true;
+}
+if (isset($config['unbound']['prefetch'])) {
+ $pconfig['prefetch'] = true;
+}
+if (isset($config['unbound']['prefetchkey'])) {
+ $pconfig['prefetchkey'] = true;
+}
+if (isset($config['unbound']['dnssecstripped'])) {
+ $pconfig['dnssecstripped'] = true;
+}
+
+$pconfig['msgcachesize'] = $config['unbound']['msgcachesize'];
+$pconfig['outgoing_num_tcp'] = isset($config['unbound']['outgoing_num_tcp']) ? $config['unbound']['outgoing_num_tcp'] : '10';
+$pconfig['incoming_num_tcp'] = isset($config['unbound']['incoming_num_tcp']) ? $config['unbound']['incoming_num_tcp'] : '10';
+$pconfig['edns_buffer_size'] = isset($config['unbound']['edns_buffer_size']) ? $config['unbound']['edns_buffer_size'] : '4096';
+$pconfig['num_queries_per_thread'] = $config['unbound']['num_queries_per_thread'];
+$pconfig['jostle_timeout'] = isset($config['unbound']['jostle_timeout']) ? $config['unbound']['jostle_timeout'] : '200';
+$pconfig['cache_max_ttl'] = isset($config['unbound']['cache_max_ttl']) ? $config['unbound']['cache_max_ttl'] : '86400';
+$pconfig['cache_min_ttl'] = isset($config['unbound']['cache_min_ttl']) ? $config['unbound']['cache_min_ttl'] : '0';
+$pconfig['infra_host_ttl'] = isset($config['unbound']['infra_host_ttl']) ? $config['unbound']['infra_host_ttl'] : '900';
+$pconfig['infra_cache_numhosts'] = isset($config['unbound']['infra_cache_numhosts']) ? $config['unbound']['infra_cache_numhosts'] : '10000';
+$pconfig['unwanted_reply_threshold'] = isset($config['unbound']['unwanted_reply_threshold']) ? $config['unbound']['unwanted_reply_threshold'] : 'disabled';
+$pconfig['log_verbosity'] = isset($config['unbound']['log_verbosity']) ? $config['unbound']['log_verbosity'] : "1";
+
+if (isset($config['unbound']['disable_auto_added_access_control'])) {
+ $pconfig['disable_auto_added_access_control'] = true;
+}
+
+if (isset($config['unbound']['use_caps'])) {
+ $pconfig['use_caps'] = true;
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = services_unbound_configure();
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('unbound');
+ }
+ } else {
+ if (isset($_POST['msgcachesize']) && !in_array($_POST['msgcachesize'], array('4', '10', '20', '50', '100', '250', '512'), true)) {
+ $input_errors[] = "A valid value for Message Cache Size must be specified.";
+ }
+ if (isset($_POST['outgoing_num_tcp']) && !in_array($_POST['outgoing_num_tcp'], array('0', '10', '20', '30', '40', '50'), true)) {
+ $input_errors[] = "A valid value must be specified for Outgoing TCP Buffers.";
+ }
+ if (isset($_POST['outgoing_num_tcp']) && !in_array($_POST['incoming_num_tcp'], array('0', '10', '20', '30', '40', '50'), true)) {
+ $input_errors[] = "A valid value must be specified for Incoming TCP Buffers.";
+ }
+ if (isset($_POST['edns_buffer_size']) && !in_array($_POST['edns_buffer_size'], array('512', '1480', '4096'), true)) {
+ $input_errors[] = "A valid value must be specified for EDNS Buffer Size.";
+ }
+ if (isset($_POST['num_queries_per_thread']) && !in_array($_POST['num_queries_per_thread'], array('512', '1024', '2048'), true)) {
+ $input_errors[] = "A valid value must be specified for Number of queries per thread.";
+ }
+ if (isset($_POST['jostle_timeout']) && !in_array($_POST['jostle_timeout'], array('100', '200', '500', '1000'), true)) {
+ $input_errors[] = "A valid value must be specified for Jostle Timeout.";
+ }
+ if (isset($_POST['cache_max_ttl']) && (!is_numericint($_POST['cache_max_ttl']) || ($_POST['cache_max_ttl'] < 0))) {
+ $input_errors[] = "'Maximum TTL for RRsets and messages' must be a positive integer.";
+ }
+ if (isset($_POST['cache_min_ttl']) && (!is_numericint($_POST['cache_min_ttl']) || ($_POST['cache_min_ttl'] < 0))) {
+ $input_errors[] = "'Minimum TTL for RRsets and messages' must be a positive integer.";
+ }
+ if (isset($_POST['infra_host_ttl']) && !in_array($_POST['infra_host_ttl'], array('60', '120', '300', '600', '900'), true)) {
+ $input_errors[] = "A valid value must be specified for TTL for Host cache entries.";
+ }
+ if (isset($_POST['infra_cache_numhosts']) && !in_array($_POST['infra_cache_numhosts'], array('1000', '5000', '10000', '20000', '50000'), true)) {
+ $input_errors[] = "A valid value must be specified for Number of Hosts to cache.";
+ }
+ if (isset($_POST['unwanted_reply_threshold']) && !in_array($_POST['unwanted_reply_threshold'], array('disabled', '5000000', '10000000', '20000000', '40000000', '50000000'), true)) {
+ $input_errors[] = "A valid value must be specified for Unwanted Reply Threshold.";
+ }
+ if (isset($_POST['log_verbosity']) && !in_array($_POST['log_verbosity'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Log level verbosity.";
+ }
+ if (isset($_POST['dnssecstripped']) && !isset($config['unbound']['dnssec'])) {
+ $input_errors[] = "Harden DNSSEC Data option can only be enabled if DNSSEC support is enabled.";
+ }
+
+ if (!$input_errors) {
+
+ if (isset($_POST['hideidentity'])) {
+ $config['unbound']['hideidentity'] = true;
+ } else {
+ unset($config['unbound']['hideidentity']);
+ }
+ if (isset($_POST['hideversion'])) {
+ $config['unbound']['hideversion'] = true;
+ } else {
+ unset($config['unbound']['hideversion']);
+ }
+ if (isset($_POST['prefetch'])) {
+ $config['unbound']['prefetch'] = true;
+ } else {
+ unset($config['unbound']['prefetch']);
+ }
+ if (isset($_POST['prefetchkey'])) {
+ $config['unbound']['prefetchkey'] = true;
+ } else {
+ unset($config['unbound']['prefetchkey']);
+ }
+ if (isset($_POST['dnssecstripped'])) {
+ $config['unbound']['dnssecstripped'] = true;
+ } else {
+ unset($config['unbound']['dnssecstripped']);
+ }
+ $config['unbound']['msgcachesize'] = $_POST['msgcachesize'];
+ $config['unbound']['outgoing_num_tcp'] = $_POST['outgoing_num_tcp'];
+ $config['unbound']['incoming_num_tcp'] = $_POST['incoming_num_tcp'];
+ $config['unbound']['edns_buffer_size'] = $_POST['edns_buffer_size'];
+ $config['unbound']['num_queries_per_thread'] = $_POST['num_queries_per_thread'];
+ $config['unbound']['jostle_timeout'] = $_POST['jostle_timeout'];
+ $config['unbound']['cache_max_ttl'] = $_POST['cache_max_ttl'];
+ $config['unbound']['cache_min_ttl'] = $_POST['cache_min_ttl'];
+ $config['unbound']['infra_host_ttl'] = $_POST['infra_host_ttl'];
+ $config['unbound']['infra_cache_numhosts'] = $_POST['infra_cache_numhosts'];
+ $config['unbound']['unwanted_reply_threshold'] = $_POST['unwanted_reply_threshold'];
+ $config['unbound']['log_verbosity'] = $_POST['log_verbosity'];
+ if (isset($_POST['disable_auto_added_access_control'])) {
+ $config['unbound']['disable_auto_added_access_control'] = true;
+ } else {
+ unset($config['unbound']['disable_auto_added_access_control']);
+ }
+ if (isset($_POST['use_caps'])) {
+ $config['unbound']['use_caps'] = true;
+ } else {
+ unset($config['unbound']['use_caps']);
+ }
+ write_config("DNS Resolver configured.");
+
+ mark_subsystem_dirty('unbound');
+ }
+ }
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Advanced"));
+$shortcut_section = "resolver";
+include_once("head.inc");
+
+?>
+
+</head>
+
+<body>
+<?php include("fbegin.inc"); ?>
+<form action="services_unbound_advanced.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('unbound')): ?><br/>
+<?php print_info_box_np(gettext("The configuration of the DNS Resolver, has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services unbound advanced">
+ <tbody>
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("General settings"), false, "services_unbound.php");
+ $tab_array[] = array(gettext("Advanced settings"), true, "services_unbound_advanced.php");
+ $tab_array[] = array(gettext("Access Lists"), false, "/services_unbound_acls.php");
+ display_top_tabs($tab_array, true);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tbody>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Resolver Options");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hide Identity");?></td>
+ <td width="78%" class="vtable">
+ <input name="hideidentity" type="checkbox" id="hideidentity" value="yes" <?php if (isset($pconfig['hideidentity'])) echo "checked=\"checked\"";?> /><br />
+ <?=gettext("If enabled, id.server and hostname.bind queries are refused.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hide Version");?></td>
+ <td width="78%" class="vtable">
+ <input name="hideversion" type="checkbox" id="hideversion" value="yes" <?php if (isset($pconfig['hideversion'])) echo "checked=\"checked\"";?> /><br />
+ <?=gettext("If enabled, version.server and version.bind queries are refused.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Prefetch Support");?></td>
+ <td width="78%" class="vtable">
+ <input name="prefetch" type="checkbox" id="prefetch" value="yes" <?php if (isset($pconfig['prefetch'])) echo "checked=\"checked\"";?> /><br />
+ <?=gettext("Message cache elements are prefetched before they expire to help keep the cache up to date. When enabled, this option can cause an increase of around 10% more DNS traffic and load on the server, but frequently requested items will not expire from the cache.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Prefetch DNS Key Support");?></td>
+ <td width="78%" class="vtable">
+ <input name="prefetchkey" type="checkbox" id="prefetchkey" value="yes" <?php if (isset($pconfig['prefetchkey'])) echo "checked=\"checked\"";?> /><br />
+ <?=sprintf(gettext("DNSKEYs are fetched earlier in the validation process when a %sDelegation signer%s is encountered. This helps lower the latency of requests but does utilize a little more CPU."), "<a href='http://en.wikipedia.org/wiki/List_of_DNS_record_types'>", "</a>");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Harden DNSSEC data");?></td>
+ <td width="78%" class="vtable">
+ <input name="dnssecstripped" type="checkbox" id="dnssecstripped" value="yes" <?php if (isset($pconfig['dnssecstripped'])) echo "checked=\"checked\"";?> /><br />
+ <?=gettext("DNSSEC data is required for trust-anchored zones. If such data is absent, the zone becomes bogus. If this is disabled and no DNSSEC data is received, then the zone is made insecure.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Message Cache Size");?></td>
+ <td width="78%" class="vtable">
+ <select id="msgcachesize" name="msgcachesize">
+<?php
+ foreach (array("4", "10", "20", "50", "100", "250", "512") as $size) :
+?>
+ <option value="<?php echo $size; ?>" <?php if ($pconfig['msgcachesize'] == "{$size}") echo "selected=\"selected\""; ?>>
+ <?php echo $size; ?>MB
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <?=gettext("Size of the message cache. The message cache stores DNS rcodes and validation statuses. The RRSet cache will automatically be set to twice this amount. The RRSet cache contains the actual RR data. The default is 4 megabytes.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Outgoing TCP Buffers");?></td>
+ <td width="78%" class="vtable">
+ <select id="outgoing_num_tcp" name="outgoing_num_tcp">
+<?php
+ for ($num_tcp = 0; $num_tcp <= 50; $num_tcp += 10):
+?>
+ <option value="<?php echo $num_tcp; ?>" <?php if ($pconfig['outgoing_num_tcp'] == "{$num_tcp}") echo "selected=\"selected\""; ?>>
+ <?php echo $num_tcp; ?>
+ </option>
+<?php
+ endfor;
+?>
+ </select><br />
+ <?=gettext("The number of outgoing TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, to authoritative servers, are done.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Incoming TCP Buffers");?></td>
+ <td width="78%" class="vtable">
+ <select id="incoming_num_tcp" name="incoming_num_tcp">
+<?php
+ for ($num_tcp = 0; $num_tcp <= 50; $num_tcp += 10):
+?>
+ <option value="<?php echo $num_tcp; ?>" <?php if ($pconfig['incoming_num_tcp'] == "{$num_tcp}") echo "selected=\"selected\""; ?>>
+ <?php echo $num_tcp; ?>
+ </option>
+<?php
+ endfor;
+?>
+ </select><br />
+ <?=gettext("The number of incoming TCP buffers to allocate per thread. The default value is 10. If 0 is selected then no TCP queries, from clients, are accepted.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("EDNS Buffer Size");?></td>
+ <td width="78%" class="vtable">
+ <select id="edns_buffer_size" name="edns_buffer_size">
+<?php
+ foreach (array("512", "1480", "4096") as $size) :
+?>
+ <option value="<?php echo $size; ?>" <?php if ($pconfig['edns_buffer_size'] == "{$size}") echo "selected=\"selected\""; ?>>
+ <?php echo $size; ?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <?=gettext("Number of bytes size to advertise as the EDNS reassembly buffer size. This is the value that is used in UDP datagrams sent to peers. RFC recommendation is 4096 (which is the default). If you have fragmentation reassemble problems, usually seen as timeouts, then a value of 1480 should help. The 512 value bypasses most MTU path problems, but it can generate an excessive amount of TCP fallback.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Number of queries per thread");?></td>
+ <td width="78%" class="vtable">
+ <select id="num_queries_per_thread" name="num_queries_per_thread">
+<?php
+ foreach (array("512", "1024", "2048") as $queries) :
+?>
+ <option value="<?php echo $queries; ?>" <?php if ($pconfig['num_queries_per_thread'] == "{$queries}") echo "selected=\"selected\""; ?>>
+ <?php echo $queries; ?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <?=gettext("The number of queries that every thread will service simultaneously. If more queries arrive that need to be serviced, and no queries can be jostled, then these queries are dropped.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Jostle Timeout");?></td>
+ <td width="78%" class="vtable">
+ <select id="jostle_timeout" name="jostle_timeout">
+<?php
+ foreach (array("100", "200", "500", "1000") as $timeout) :
+?>
+ <option value="<?php echo $timeout; ?>" <?php if ($pconfig['jostle_timeout'] == "{$timeout}") echo "selected=\"selected\""; ?>>
+ <?php echo $timeout; ?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select><br />
+ <?=gettext("This timeout is used for when the server is very busy. This protects against denial of service by slow queries or high query rates. The default value is 200 milliseconds.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Maximum TTL for RRsets and messages");?></td>
+ <td width="78%" class="vtable">
+ <input type="text" id="cache_max_ttl" name="cache_max_ttl" size="5" value="<?php if (isset($pconfig['cache_max_ttl'])) echo htmlspecialchars($pconfig['cache_max_ttl']); ?>" /><br />
+ <?=gettext("Configure a maximum Time to live for RRsets and messages in the cache. The default is 86400 seconds (1 day). When the internal TTL expires the cache item is expired. This can be configured to force the resolver to query for data more often and not trust (very large) TTL values.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Minimum TTL for RRsets and messages");?></td>
+ <td width="78%" class="vtable">
+ <input type="text" id="cache_min_ttl" name="cache_min_ttl" size="5" value="<?php if (isset($pconfig['cache_min_ttl'])) echo htmlspecialchars($pconfig['cache_min_ttl']); ?>" /><br />
+ <?=gettext("Configure a minimum Time to live for RRsets and messages in the cache. The default is 0 seconds. If the minimum value kicks in, the data is cached for longer than the domain owner intended, and thus less queries are made to look up the data. The 0 value ensures the data in the cache is as the domain owner intended. High values can lead to trouble as the data in the cache might not match up with the actual data anymore.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TTL for Host cache entries");?></td>
+ <td width="78%" class="vtable">
+ <select id="infra_host_ttl" name="infra_host_ttl">
+ <option value="60" <?php if ($pconfig['infra_host_ttl'] == "60") echo "selected=\"selected\""; ?>>1 minute</option>
+ <option value="120" <?php if ($pconfig['infra_host_ttl'] == "120") echo "selected=\"selected\""; ?>>2 minutes</option>
+ <option value="300" <?php if ($pconfig['infra_host_ttl'] == "300") echo "selected=\"selected\""; ?>>5 minutes</option>
+ <option value="600" <?php if ($pconfig['infra_host_ttl'] == "600") echo "selected=\"selected\""; ?>>10 minutes</option>
+ <option value="900" <?php if ($pconfig['infra_host_ttl'] == "900") echo "selected=\"selected\""; ?>>15 minutes</option>
+ </select><br />
+ <?=gettext("Time to live for entries in the host cache. The host cache contains roundtrip timing, lameness and EDNS support information. The default is 15 minutes.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Number of Hosts to cache");?></td>
+ <td width="78%" class="vtable">
+ <select id="infra_cache_numhosts" name="infra_cache_numhosts">
+ <option value="1000" <?php if ($pconfig['infra_cache_numhosts'] == "1000") echo "selected=\"selected\""; ?>>1000</option>
+ <option value="5000" <?php if ($pconfig['infra_cache_numhosts'] == "5000") echo "selected=\"selected\""; ?>>5000</option>
+ <option value="10000" <?php if ($pconfig['infra_cache_numhosts'] == "10000") echo "selected=\"selected\""; ?>>10 000</option>
+ <option value="20000" <?php if ($pconfig['infra_cache_numhosts'] == "20000") echo "selected=\"selected\""; ?>>20 000</option>
+ <option value="50000" <?php if ($pconfig['infra_cache_numhosts'] == "50000") echo "selected=\"selected\""; ?>>50 000</option>
+ </select><br />
+ <?=gettext("Number of hosts for which information is cached. The default is 10,000.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Unwanted Reply Threshold");?></td>
+ <td width="78%" class="vtable">
+ <select id="unwanted_reply_threshold" name="unwanted_reply_threshold">
+ <option value="disabled" <?php if ($pconfig['unwanted_reply_threshold'] == "disabled") echo "selected=\"selected\""; ?>>disabled</option>
+ <option value="5000000" <?php if ($pconfig['unwanted_reply_threshold'] == "5000000") echo "selected=\"selected\""; ?>>5 million</option>
+ <option value="10000000" <?php if ($pconfig['unwanted_reply_threshold'] == "10000000") echo "selected=\"selected\""; ?>>10 million</option>
+ <option value="20000000" <?php if ($pconfig['unwanted_reply_threshold'] == "20000000") echo "selected=\"selected\""; ?>>20 million</option>
+ <option value="40000000" <?php if ($pconfig['unwanted_reply_threshold'] == "40000000") echo "selected=\"selected\""; ?>>40 million</option>
+ <option value="50000000" <?php if ($pconfig['unwanted_reply_threshold'] == "50000000") echo "selected=\"selected\""; ?>>50 million</option>
+ </select><br />
+ <?=gettext("If enabled, a total number of unwanted replies is kept track of in every thread. When it reaches the threshold, a defensive action is taken and a warning is printed to the log file. This defensive action is to clear the RRSet and message caches, hopefully flushing away any poison. The default is disabled, but if enabled a value of 10 million is suggested.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Log level verbosity");?></td>
+ <td width="78%" class="vtable">
+ <select id="log_verbosity" name="log_verbosity">
+<?php
+ for ($level = 0; $level <= 5; $level++):
+?>
+ <option value="<?php echo $level; ?>" <?php if ($pconfig['log_verbosity'] == "{$level}") echo "selected=\"selected\""; ?>>
+ Level <?php echo $level; ?>
+ </option>
+<?php
+ endfor;
+?>
+ </select><br />
+ <?=gettext("Select the log verbosity.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable auto-added access control");?></td>
+ <td width="78%" class="vtable">
+ <input name="disable_auto_added_access_control" type="checkbox" id="disable_auto_added_access_control" value="yes" <?php if (isset($pconfig['disable_auto_added_access_control'])) echo "checked=\"checked\"";?> />
+ <?=gettext("Check this box to disable the automatically-added access control entries. By default, IPv4 and IPv6 networks residing on internal interfaces of this system are permitted. Allowed networks must be manually configured on the Access Lists tab if the auto-added entries are disabled.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Experimental Bit 0x20 Support");?></td>
+ <td width="78%" class="vtable">
+ <input name="use_caps" type="checkbox" id="use_caps" value="yes" <?php if (isset($pconfig['use_caps'])) echo "checked=\"checked\"";?> /> <br />
+ <?=sprintf(gettext("Use 0x-20 encoded random bits in the DNS query to foil spoofing attempts. See the implementation %sdraft dns-0x20%s for more information."), "<a href='https://tools.ietf.org/html/draft-vixie-dnsext-dns0x20-00'>", "</a>");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%"></td>
+ <td width="78%">
+ <input type="submit" name="Save" class="formbtn" id="save" value="Save" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_unbound_domainoverride_edit.php b/src/usr/local/www/services_unbound_domainoverride_edit.php
new file mode 100644
index 0000000..28a8424
--- /dev/null
+++ b/src/usr/local/www/services_unbound_domainoverride_edit.php
@@ -0,0 +1,183 @@
+<?php
+/*
+ services_unbound_domainoverride_edit.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2014 Warren Baker (warren@decoy.co.za)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2003-2005 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsresolver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dnsresolver-editdomainoverride
+##|*NAME=Services: DNS Resolver: Edit Domain Override page
+##|*DESCR=Allow access to the 'Services: DNS Resolver: Edit Domain Override' page.
+##|*MATCH=services_unbound_domainoverride_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php');
+}
+
+if (!is_array($config['unbound']['domainoverrides'])) {
+ $config['unbound']['domainoverrides'] = array();
+}
+
+$a_domainOverrides = &$config['unbound']['domainoverrides'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_domainOverrides[$id]) {
+ $pconfig['domain'] = $a_domainOverrides[$id]['domain'];
+ $pconfig['ip'] = $a_domainOverrides[$id]['ip'];
+ $pconfig['descr'] = $a_domainOverrides[$id]['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "domain ip");
+ $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ function String_Begins_With($needle, $haystack) {
+ return (substr($haystack, 0, strlen($needle)) == $needle);
+ }
+
+ if (String_Begins_With(_msdcs, $_POST['domain'])) {
+ $subdomainstr = substr($_POST['domain'], 7);
+ if ($subdomainstr && !is_domain($subdomainstr)) {
+ $input_errors[] = gettext("A valid domain must be specified after _msdcs.");
+ }
+ } elseif ($_POST['domain'] && !is_domain($_POST['domain'])) {
+ $input_errors[] = gettext("A valid domain must be specified.");
+ }
+
+ if ($_POST['ip']) {
+ if (strpos($_POST['ip'], '@') !== false) {
+ $ip_details = explode("@", $_POST['ip']);
+ if (!is_ipaddr($ip_details[0]) || !is_port($ip_details[1])) {
+ $input_errors[] = gettext("A valid IP address and port must be specified, for example 192.168.100.10@5353.");
+ }
+ } else if (!is_ipaddr($_POST['ip'])) {
+ $input_errors[] = gettext("A valid IP address must be specified, for example 192.168.100.10.");
+ }
+ }
+
+ if (!$input_errors) {
+ $doment = array();
+ $doment['domain'] = $_POST['domain'];
+ $doment['ip'] = $_POST['ip'];
+ $doment['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_domainOverrides[$id]) {
+ $a_domainOverrides[$id] = $doment;
+ } else {
+ $a_domainOverrides[] = $doment;
+ }
+
+ mark_subsystem_dirty('unbound');
+
+ write_config();
+
+ header("Location: services_unbound.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Edit Domain Override"));
+$shortcut_section = "resolver";
+include("head.inc");
+
+?>
+
+<body>
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="services_unbound_domainoverride_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="domain override">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
+ <span class="vexpl">
+ <?=gettext("Domain to override (NOTE: this does not have to be a valid TLD!)"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("test"); ?></em> <?=gettext("or"); ?> <em>mycompany.localdomain</em> <?=gettext("or"); ?> <em>1.168.192.in-addr.arpa</em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" /><br />
+ <span class="vexpl">
+ <?=gettext("IP address of the authoritative DNS server for this domain"); ?><br />
+ <?=gettext("e.g."); ?> <em>192.168.100.100</em><br />
+ <?=gettext("To use a nondefault port for communication, append an '@' with the port number."); ?><br />
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_domainOverrides[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_unbound_host_edit.php b/src/usr/local/www/services_unbound_host_edit.php
new file mode 100644
index 0000000..6b365f2
--- /dev/null
+++ b/src/usr/local/www/services_unbound_host_edit.php
@@ -0,0 +1,337 @@
+<?php
+/* $Id$ */
+/*
+ services_unbound_host_edit.php
+ part of the pfSense project (https://www.pfsense.org)
+ Copyright (C) 2014 Warren Baker (warren@decoy.co.za)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2003-2004 Bob Zoller <bob@kludgebox.com> and Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: dnsresolver
+*/
+
+##|+PRIV
+##|*IDENT=page-services-dnsresolver-edithost
+##|*NAME=Services: DNS Resolver: Edit host page
+##|*DESCR=Allow access to the 'Services: DNS Resolver: Edit host' page.
+##|*MATCH=services_unbound_host_edit.php*
+##|-PRIV
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php');
+}
+
+function hostcmp($a, $b) {
+ return strcasecmp($a['host'], $b['host']);
+}
+
+function hosts_sort() {
+ global $g, $config;
+
+ if (!is_array($config['unbound']['hosts'])) {
+ return;
+ }
+
+ usort($config['unbound']['hosts'], "hostcmp");
+}
+
+require("guiconfig.inc");
+
+if (!is_array($config['unbound']['hosts'])) {
+ $config['unbound']['hosts'] = array();
+}
+
+$a_hosts = &$config['unbound']['hosts'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_hosts[$id]) {
+ $pconfig['host'] = $a_hosts[$id]['host'];
+ $pconfig['domain'] = $a_hosts[$id]['domain'];
+ $pconfig['ip'] = $a_hosts[$id]['ip'];
+ $pconfig['descr'] = $a_hosts[$id]['descr'];
+ $pconfig['aliases'] = $a_hosts[$id]['aliases'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "domain ip");
+ $reqdfieldsn = array(gettext("Domain"), gettext("IP address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['host']) {
+ if (!is_hostname($_POST['host'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9, '_' and '-'. It may not start or end with '-'.");
+ } else {
+ if (!is_unqualified_hostname($_POST['host'])) {
+ $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+
+ if (($_POST['domain'] && !is_domain($_POST['domain']))) {
+ $input_errors[] = gettext("A valid domain must be specified.");
+ }
+
+ if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
+ $input_errors[] = gettext("A valid IP address must be specified.");
+ }
+
+ /* collect aliases */
+ $aliases = array();
+ foreach ($_POST as $key => $value) {
+ $entry = '';
+ if (!substr_compare('aliashost', $key, 0, 9)) {
+ $entry = substr($key, 9);
+ $field = 'host';
+ } elseif (!substr_compare('aliasdomain', $key, 0, 11)) {
+ $entry = substr($key, 11);
+ $field = 'domain';
+ } elseif (!substr_compare('aliasdescription', $key, 0, 16)) {
+ $entry = substr($key, 16);
+ $field = 'description';
+ }
+ if (ctype_digit($entry)) {
+ $aliases[$entry][$field] = $value;
+ }
+ }
+ $pconfig['aliases']['item'] = $aliases;
+
+ /* validate aliases */
+ foreach ($aliases as $idx => $alias) {
+ $aliasreqdfields = array('aliasdomain' . $idx);
+ $aliasreqdfieldsn = array(gettext("Alias Domain"));
+
+ do_input_validation($_POST, $aliasreqdfields, $aliasreqdfieldsn, $input_errors);
+ if ($alias['host']) {
+ if (!is_hostname($alias['host'])) {
+ $input_errors[] = gettext("Hostnames in an alias list can only contain the characters A-Z, 0-9 and '-'. They may not start or end with '-'.");
+ } else {
+ if (!is_unqualified_hostname($alias['host'])) {
+ $input_errors[] = gettext("A valid alias hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+ if (($alias['domain'] && !is_domain($alias['domain']))) {
+ $input_errors[] = gettext("A valid domain must be specified in alias list.");
+ }
+ }
+
+ /* check for overlaps */
+ foreach ($a_hosts as $hostent) {
+ if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent)) {
+ continue;
+ }
+
+ if (($hostent['host'] == $_POST['host']) &&
+ ($hostent['domain'] == $_POST['domain']) &&
+ ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) || (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) {
+ $input_errors[] = gettext("This host/domain already exists.");
+ break;
+ }
+ }
+
+ if (!$input_errors) {
+ $hostent = array();
+ $hostent['host'] = $_POST['host'];
+ $hostent['domain'] = $_POST['domain'];
+ $hostent['ip'] = $_POST['ip'];
+ $hostent['descr'] = $_POST['descr'];
+ $hostent['aliases']['item'] = $aliases;
+
+ if (isset($id) && $a_hosts[$id]) {
+ $a_hosts[$id] = $hostent;
+ } else {
+ $a_hosts[] = $hostent;
+ }
+ hosts_sort();
+
+ mark_subsystem_dirty('unbound');
+
+ write_config();
+
+ header("Location: services_unbound.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Edit host"));
+$shortcut_section = "resolver";
+include("head.inc");
+
+?>
+
+<body onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript" src="/javascript/row_helper.js">
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "aliashost";
+ rowtype[0] = "textbox";
+ rowsize[0] = "20";
+ rowname[1] = "aliasdomain";
+ rowtype[1] = "textbox";
+ rowsize[1] = "20";
+ rowname[2] = "aliasdescription";
+ rowtype[2] = "textbox";
+ rowsize[2] = "20";
+//]]>
+</script>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="services_unbound_host_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="host edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit DNS Resolver entry");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Host");?></td>
+ <td width="78%" class="vtable">
+ <input name="host" type="text" class="formfld unknown" id="host" size="40" value="<?=htmlspecialchars($pconfig['host']);?>" /><br />
+ <span class="vexpl"><?=gettext("Name of the host, without domain part"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("myhost"); ?></em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain");?></td>
+ <td width="78%" class="vtable">
+ <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" /><br />
+ <span class="vexpl"><?=gettext("Domain of the host"); ?><br />
+ <?=gettext("e.g."); ?> <em><?=gettext("example.com"); ?></em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ip" type="text" class="formfld unknown" id="ip" size="40" value="<?=htmlspecialchars($pconfig['ip']);?>" /><br />
+ <span class="vexpl"><?=gettext("IP address of the host"); ?><br />
+ <?=gettext("e.g."); ?> <em>192.168.100.100</em> <?=gettext("or"); ?> <em>fd00:abcd::1</em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" /><br />
+ <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("Aliases"); ?></div></td>
+ <td width="78%" class="vtable">
+ <table id="maintable" summary="aliases">
+ <tbody>
+ <tr>
+ <td colspan="4">
+ <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
+ <?=gettext("Enter additional names for this host."); ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Host");?></div></td>
+ <td><div id="twocolumn"><?=gettext("Domain");?></div></td>
+ <td><div id="threecolumn"><?=gettext("Description");?></div></td>
+ </tr>
+ <?php
+ $counter = 0;
+ if ($pconfig['aliases']['item']):
+ foreach ($pconfig['aliases']['item'] as $item):
+ $host = $item['host'];
+ $domain = $item['domain'];
+ $description = $item['description'];
+ ?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="aliashost<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliashost<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($host);?>" />
+ </td>
+ <td>
+ <input autocomplete="off" name="aliasdomain<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdomain<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($domain);?>" />
+ </td>
+ <td>
+ <input name="aliasdescription<?php echo $counter; ?>" type="text" class="formfld unknown" id="aliasdescription<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($description);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#">
+ <img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ $counter++;
+ endforeach;
+ endif;
+ ?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_hosts[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_wol.php b/src/usr/local/www/services_wol.php
new file mode 100644
index 0000000..e443ab0
--- /dev/null
+++ b/src/usr/local/www/services_wol.php
@@ -0,0 +1,233 @@
+<?php
+/* $Id$ */
+/*
+ services_wol.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/bin/wol
+ pfSense_MODULE: wol
+*/
+
+##|+PRIV
+##|*IDENT=page-services-wakeonlan
+##|*NAME=Services: Wake on LAN page
+##|*DESCR=Allow access to the 'Services: Wake on LAN' page.
+##|*MATCH=services_wol.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['wol']['wolentry'])) {
+ $config['wol']['wolentry'] = array();
+}
+$a_wol = &$config['wol']['wolentry'];
+
+if ($_GET['wakeall'] <> "") {
+ $i = 0;
+ $savemsg = "";
+ foreach ($a_wol as $wolent) {
+ $mac = $wolent['mac'];
+ $if = $wolent['interface'];
+ $description = $wolent['descr'];
+ $ipaddr = get_interface_ip($if);
+ if (!is_ipaddr($ipaddr)) {
+ continue;
+ }
+ $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if));
+ /* Execute wol command and check return code. */
+ if (!mwexec("/usr/local/bin/wol -i {$bcip} {$mac}")) {
+ $savemsg .= sprintf(gettext('Sent magic packet to %1$s (%2$s)%3$s'), $mac, $description, ".<br />");
+ } else {
+ $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s (%4$s) did not complete successfully%5$s'), '<a href="/diag_logs.php">', '</a>', $description, $mac, ".<br />");
+ }
+ }
+}
+
+if ($_POST || $_GET['mac']) {
+ unset($input_errors);
+
+ if ($_GET['mac']) {
+ /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
+ $_GET['mac'] = strtolower(str_replace("-", ":", $_GET['mac']));
+ $mac = $_GET['mac'];
+ $if = $_GET['if'];
+ } else {
+ /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
+ $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
+ $mac = $_POST['mac'];
+ $if = $_POST['interface'];
+ }
+
+ /* input validation */
+ if (!$mac || !is_macaddr($mac)) {
+ $input_errors[] = gettext("A valid MAC address must be specified.");
+ }
+ if (!$if) {
+ $input_errors[] = gettext("A valid interface must be specified.");
+ }
+
+ if (!$input_errors) {
+ /* determine broadcast address */
+ $ipaddr = get_interface_ip($if);
+ if (!is_ipaddr($ipaddr)) {
+ $input_errors[] = gettext("A valid ip could not be found!");
+ } else {
+ $bcip = gen_subnet_max($ipaddr, get_interface_subnet($if));
+ /* Execute wol command and check return code. */
+ if (!mwexec("/usr/local/bin/wol -i {$bcip} " . escapeshellarg($mac))) {
+ $savemsg .= sprintf(gettext("Sent magic packet to %s."), $mac);
+ } else {
+ $savemsg .= sprintf(gettext('Please check the %1$ssystem log%2$s, the wol command for %3$s did not complete successfully%4$s'), '<a href="/diag_logs.php">', '</a>', $mac, ".<br />");
+ }
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_wol[$_GET['id']]) {
+ unset($a_wol[$_GET['id']]);
+ write_config();
+ header("Location: services_wol.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Wake on LAN"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="services_wol.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="wake on lan">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Wake on LAN");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if (!link_interface_to_bridge($iface) && $iface == $if) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose which interface the host to be woken up is connected to.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address");?></td>
+ <td width="78%" class="vtable">
+ <input name="mac" type="text" class="formfld unknown" id="mac" size="20" value="<?=htmlspecialchars($mac);?>" />
+ <br />
+ <?=gettext("Enter a MAC address ");?><span class="vexpl"> <?=gettext("in the following format: xx:xx:xx:xx:xx:xx");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Send");?>" />
+ </td>
+ </tr>
+ </table>
+ &nbsp;<br />
+ <?=gettext("Wake all clients at once: ");?><a href="services_wol.php?wakeall=true"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_wol_all.gif" width="17" height="17" border="0" alt="wol all" /></a><br/>
+ <?=gettext("Or Click the MAC address to wake up an individual device:");?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont" summary="clients">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("MAC address");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle"><a href="services_wol_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_wol as $wolent):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
+ <?=convert_friendly_interface_to_friendly_descr($wolent['interface']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
+ <a href="?mac=<?=$wolent['mac'];?>&amp;if=<?=$wolent['interface'];?>"><?=strtolower($wolent['mac']);?></a>
+ </td>
+ <td class="listbg" ondblclick="document.location='services_wol_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($wolent['descr']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="services_wol_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a></td>
+ <td valign="middle"><a href="services_wol.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17"></td>
+ <td valign="middle"><a href="services_wol_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Note:");?><br />
+ </strong>
+ </span>
+ <?=gettext("This service can be used to wake up (power on) computers by sending special"); ?> &quot;<?=gettext("Magic Packets"); ?>&quot;. <?=gettext("The NIC in the computer that is to be woken up must support Wake on LAN and has to be configured properly (WOL cable, BIOS settings). ");?>
+ </span>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/services_wol_edit.php b/src/usr/local/www/services_wol_edit.php
new file mode 100644
index 0000000..031ba83
--- /dev/null
+++ b/src/usr/local/www/services_wol_edit.php
@@ -0,0 +1,180 @@
+<?php
+/* $Id$ */
+/*
+ services_wol_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: wol
+*/
+
+##|+PRIV
+##|*IDENT=page-services-wakeonlan-edit
+##|*NAME=Services: Wake on LAN: Edit page
+##|*DESCR=Allow access to the 'Services: Wake on LAN: Edit' page.
+##|*MATCH=services_wol_edit.php*
+##|-PRIV
+
+function wolcmp($a, $b) {
+ return strcmp($a['descr'], $b['descr']);
+}
+
+function wol_sort() {
+ global $config;
+
+ usort($config['wol']['wolentry'], "wolcmp");
+}
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_wol.php');
+}
+
+if (!is_array($config['wol']['wolentry'])) {
+ $config['wol']['wolentry'] = array();
+}
+$a_wol = &$config['wol']['wolentry'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_wol[$id]) {
+ $pconfig['interface'] = $a_wol[$id]['interface'];
+ $pconfig['mac'] = $a_wol[$id]['mac'];
+ $pconfig['descr'] = $a_wol[$id]['descr'];
+} else {
+ $pconfig['interface'] = $_GET['if'];
+ $pconfig['mac'] = $_GET['mac'];
+ $pconfig['descr'] = $_GET['descr'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "interface mac");
+ $reqdfieldsn = array(gettext("Interface"), gettext("MAC address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
+ $_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
+
+ if (($_POST['mac'] && !is_macaddr($_POST['mac']))) {
+ $input_errors[] = gettext("A valid MAC address must be specified.");
+ }
+
+ if (!$input_errors) {
+ $wolent = array();
+ $wolent['interface'] = $_POST['interface'];
+ $wolent['mac'] = $_POST['mac'];
+ $wolent['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_wol[$id]) {
+ $a_wol[$id] = $wolent;
+ } else {
+ $a_wol[] = $wolent;
+ }
+ wol_sort();
+
+ write_config();
+
+ header("Location: services_wol.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("Wake on LAN"), gettext("Edit"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="services_wol_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="wol edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit WOL entry");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface");?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formfld">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ foreach ($interfaces as $iface => $ifacename): ?>
+ <option value="<?=$iface;?>" <?php if (!link_interface_to_bridge($iface) && $iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Choose which interface this host is connected to.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address");?></td>
+ <td width="78%" class="vtable">
+ <input name="mac" type="text" class="formfld unknown" id="mac" size="20" value="<?=htmlspecialchars($pconfig['mac']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_wol[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/shortcuts.inc b/src/usr/local/www/shortcuts.inc
new file mode 100644
index 0000000..c4bf48e
--- /dev/null
+++ b/src/usr/local/www/shortcuts.inc
@@ -0,0 +1,289 @@
+<?php
+/* $Id$ */
+/*
+ Copyright (C) 2012 Jim Pingle
+ All rights reserved.
+
+ Copyright (C) 2007, 2008 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+*/
+
+/*
+ pfSense_MODULE: system
+*/
+
+// On the page, add in like so:
+// $shortcut_section = "relayd";
+
+$shortcuts = array();
+
+/* Load and process custom shortcuts. */
+function get_shortcut_files($directory) {
+ $dir_array = array();
+ if (!is_dir($directory)) {
+ return;
+ }
+ if ($dh = opendir($directory)) {
+ while (($file = readdir($dh)) !== false) {
+ $canadd = 0;
+ if ($file == ".") {
+ $canadd = 1;
+ }
+ if ($file == "..") {
+ $canadd = 1;
+ }
+ if ($canadd == 0) {
+ array_push($dir_array, $file);
+ }
+ }
+ closedir($dh);
+ }
+ if (!is_array($dir_array)) {
+ return;
+ }
+ return $dir_array;
+}
+
+function get_shortcut_by_service_name($servicename) {
+ global $shortcuts;
+ foreach ($shortcuts as $name => $shortcut) {
+ if (!empty($shortcut['service']) && ($shortcut['service'] == $servicename)) {
+ return $name;
+ }
+ }
+ return null;
+}
+
+function get_shortcut_main_link($shortcut_section, $addspace = true, $service = array()) {
+ global $g, $shortcuts;
+ if (empty($shortcut_section)) {
+ return "";
+ }
+ $space = ($addspace) ? "&nbsp;" : "" ;
+ switch ($shortcut_section) {
+ case "openvpn":
+ if (!empty($service['mode']) && is_numeric($service['id'])) {
+ $link = "vpn_openvpn_{$service['mode']}.php?act=edit&amp;id={$service['id']}";
+ } else {
+ $link = $shortcuts[$shortcut_section]['main'];
+ }
+ break;
+ case "captiveportal":
+ if (!empty($service['zone'])) {
+ $link = "services_captiveportal.php?zone={$service['zone']}";
+ } else {
+ $link = $shortcuts[$shortcut_section]['main'];
+ }
+ break;
+ default:
+ $link = $shortcuts[$shortcut_section]['main'];
+ break;
+ }
+ if (!empty($link) && ($_SERVER['REQUEST_URI'] != "/{$link}")) {
+ return "{$space}<a href=\"{$link}\" title=\"" . gettext("Main page for this section") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" border=\"0\" alt=\"plus\" /></a>";
+ }
+}
+
+function get_shortcut_status_link($shortcut_section, $addspace = true, $service = array()) {
+ global $g, $shortcuts, $cpzone;
+ if (empty($shortcut_section)) {
+ return "";
+ }
+ $space = ($addspace) ? "&nbsp;" : "" ;
+ if (!empty($cpzone)) {
+ $zone = $cpzone;
+ } elseif (!empty($service['zone'])) {
+ $zone = $service['zone'];
+ }
+ switch ($shortcut_section) {
+ case "captiveportal":
+ if (!empty($zone)) {
+ $link = "status_captiveportal.php?zone={$zone}";
+ } else {
+ $link = $shortcuts[$shortcut_section]['status'];
+ }
+ break;
+ default:
+ $link = $shortcuts[$shortcut_section]['status'];
+ break;
+ }
+ if (!empty($link)) {
+ return "{$space}<a href=\"{$link}\" title=\"" . gettext("Status of items on this page") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_service_status.gif\" border=\"0\" alt=\"status\" /></a>";
+ }
+}
+
+function get_shortcut_log_link($shortcut_section, $addspace = true) {
+ global $g, $shortcuts;
+ $space = ($addspace) ? "&nbsp;" : "" ;
+ if (!empty($shortcut_section) && !empty($shortcuts[$shortcut_section]['log'])) {
+ return "{$space}<a href=\"{$shortcuts[$shortcut_section]['log']}\" title=\"" . gettext("Log entries for items on this page") . "\"><img style=\"vertical-align:middle\" src=\"/themes/{$g['theme']}/images/icons/icon_logs.gif\" border=\"0\" alt=\"logs\" /></a>";
+ }
+}
+
+// Load shortcuts
+$dir_array = get_shortcut_files("/usr/local/www/shortcuts");
+foreach ($dir_array as $file) {
+ if (!is_dir("/usr/local/www/shortcuts/{$file}") && stristr($file, ".inc")) {
+ include("/usr/local/www/shortcuts/{$file}");
+ }
+}
+if (is_dir("/usr/local/pkg/shortcuts")) {
+ $dir_array = get_shortcut_files("/usr/local/pkg/shortcuts");
+ foreach ($dir_array as $file) {
+ if (!is_dir("/usr/local/pkg/shortcuts/{$file}") && stristr($file, ".inc")) {
+ include("/usr/local/pkg/shortcuts/{$file}");
+ }
+ }
+}
+
+$shortcuts['relayd'] = array();
+$shortcuts['relayd']['main'] = "load_balancer_pool.php";
+$shortcuts['relayd']['log'] = "diag_logs_relayd.php";
+$shortcuts['relayd']['status'] = "status_lb_pool.php";
+$shortcuts['relayd']['service'] = "relayd";
+
+$shortcuts['relayd-virtualservers'] = array();
+$shortcuts['relayd-virtualservers']['main'] = "load_balancer_virtual_server.php";
+$shortcuts['relayd-virtualservers']['log'] = "diag_logs_relayd.php";
+$shortcuts['relayd-virtualservers']['status'] = "status_lb_vs.php";
+$shortcuts['relayd-virtualservers']['service'] = "relayd";
+
+$shortcuts['captiveportal'] = array();
+$shortcuts['captiveportal']['main'] = "services_captiveportal_zones.php";
+$shortcuts['captiveportal']['log'] = "diag_logs_auth.php";
+$shortcuts['captiveportal']['status'] = "status_captiveportal.php";
+$shortcuts['captiveportal']['service'] = "captiveportal";
+
+$shortcuts['captiveportal-vouchers'] = array();
+$shortcuts['captiveportal-vouchers']['log'] = "diag_logs_auth.php";
+$shortcuts['captiveportal-vouchers']['status'] = "status_captiveportal_vouchers.php";
+$shortcuts['captiveportal-vouchers']['service'] = "captiveportal";
+
+$shortcuts['dhcp'] = array();
+$shortcuts['dhcp']['main'] = "services_dhcp.php";
+$shortcuts['dhcp']['log'] = "diag_logs_dhcp.php";
+$shortcuts['dhcp']['status'] = "status_dhcp_leases.php";
+$shortcuts['dhcp']['service'] = "dhcpd";
+
+$shortcuts['dhcp6'] = array();
+$shortcuts['dhcp6']['main'] = "services_dhcpv6.php";
+$shortcuts['dhcp6']['log'] = "diag_logs_dhcp.php";
+$shortcuts['dhcp6']['status'] = "status_dhcpv6_leases.php";
+
+
+$shortcuts['ipsec'] = array();
+$shortcuts['ipsec']['main'] = "vpn_ipsec.php";
+$shortcuts['ipsec']['log'] = "diag_logs_ipsec.php";
+$shortcuts['ipsec']['status'] = "diag_ipsec.php";
+$shortcuts['ipsec']['service'] = "ipsec";
+
+$shortcuts['openvpn'] = array();
+$shortcuts['openvpn']['main'] = "vpn_openvpn_server.php";
+$shortcuts['openvpn']['log'] = "diag_logs_openvpn.php";
+$shortcuts['openvpn']['status'] = "status_openvpn.php";
+$shortcuts['openvpn']['service'] = "openvpn";
+
+$shortcuts['firewall'] = array();
+$shortcuts['firewall']['main'] = "firewall_rules.php";
+$shortcuts['firewall']['log'] = "diag_logs_filter.php";
+$shortcuts['firewall']['status'] = "status_filter_reload.php";
+
+$shortcuts['routing'] = array();
+$shortcuts['routing']['main'] = "system_routes.php";
+$shortcuts['routing']['log'] = "diag_logs_routing.php";
+$shortcuts['routing']['status'] = "diag_routes.php";
+
+$shortcuts['gateways'] = array();
+$shortcuts['gateways']['main'] = "system_gateways.php";
+$shortcuts['gateways']['log'] = "diag_logs_gateways.php";
+$shortcuts['gateways']['status'] = "status_gateways.php";
+$shortcuts['gateways']['service'] = "apinger";
+
+$shortcuts['gateway-groups'] = array();
+$shortcuts['gateway-groups']['main'] = "system_gateway_groups.php";
+$shortcuts['gateway-groups']['log'] = "diag_logs_gateways.php";
+$shortcuts['gateway-groups']['status'] = "status_gateway_groups.php";
+
+$shortcuts['interfaces'] = array();
+$shortcuts['interfaces']['main'] = "interfaces_assign.php";
+$shortcuts['interfaces']['status'] = "status_interfaces.php";
+
+$shortcuts['trafficshaper'] = array();
+$shortcuts['trafficshaper']['main'] = "firewall_shaper.php";
+$shortcuts['trafficshaper']['status'] = "status_queues.php";
+
+$shortcuts['trafficshaper-limiters'] = array();
+$shortcuts['trafficshaper-limiters']['main'] = "firewall_shaper_vinterface.php";
+$shortcuts['trafficshaper-limiters']['status'] = "diag_limiter_info.php";
+
+$shortcuts['forwarder'] = array();
+$shortcuts['forwarder']['main'] = "services_dnsmasq.php";
+$shortcuts['forwarder']['log'] = "diag_logs_resolver.php";
+$shortcuts['forwarder']['service'] = "dnsmasq";
+
+$shortcuts['resolver'] = array();
+$shortcuts['resolver']['main'] = "services_unbound.php";
+$shortcuts['resolver']['log'] = "diag_logs_resolver.php";
+$shortcuts['resolver']['service'] = "unbound";
+
+$shortcuts['wireless'] = array();
+$shortcuts['wireless']['main'] = "interfaces_wireless.php";
+$shortcuts['wireless']['log'] = "diag_logs_wireless.php";
+$shortcuts['wireless']['status'] = "status_wireless.php";
+
+$shortcuts['ntp'] = array();
+$shortcuts['ntp']['main'] = "services_ntpd.php";
+$shortcuts['ntp']['log'] = "diag_logs_ntpd.php";
+$shortcuts['ntp']['status'] = "status_ntpd.php";
+$shortcuts['ntp']['service'] = "ntpd";
+
+$shortcuts['pptps'] = array();
+$shortcuts['pptps']['main'] = "vpn_pptp.php";
+$shortcuts['pptps']['log'] = "diag_logs_vpn.php";
+
+$shortcuts['pppoes'] = array();
+$shortcuts['pppoes']['main'] = "vpn_pppoe.php";
+$shortcuts['pppoes']['log'] = "diag_logs_vpn.php?vpntype=poes";
+
+$shortcuts['l2tps'] = array();
+$shortcuts['l2tps']['main'] = "vpn_l2tp.php";
+$shortcuts['l2tps']['log'] = "diag_logs_vpn.php?vpntype=l2tp";
+
+$shortcuts['carp'] = array();
+$shortcuts['carp']['main'] = "system_hasync.php";
+$shortcuts['carp']['status'] = "carp_status.php";
+
+$shortcuts['snmp'] = array();
+$shortcuts['snmp']['main'] = "services_snmp.php";
+$shortcuts['snmp']['service'] = "bsnmpd";
+
+$shortcuts['authentication'] = array();
+$shortcuts['authentication']['main'] = "system_authservers.php";
+$shortcuts['authentication']['status'] = "diag_authentication.php";
+
+$shortcuts['aliases'] = array();
+$shortcuts['aliases']['main'] = "firewall_aliases.php";
+$shortcuts['aliases']['status'] = "diag_tables.php";
+?>
diff --git a/src/usr/local/www/shortcuts/pkg_upnp.inc b/src/usr/local/www/shortcuts/pkg_upnp.inc
new file mode 100644
index 0000000..2b068a7
--- /dev/null
+++ b/src/usr/local/www/shortcuts/pkg_upnp.inc
@@ -0,0 +1,11 @@
+<?php
+
+global $shortcuts;
+
+$shortcuts['upnp'] = array();
+$shortcuts['upnp']['main'] = "pkg_edit.php?xml=miniupnpd.xml";
+$shortcuts['upnp']['log'] = "diag_logs_routing.php";
+$shortcuts['upnp']['status'] = "status_upnp.php";
+$shortcuts['upnp']['service'] = "miniupnpd";
+
+?>
diff --git a/src/usr/local/www/stats.php b/src/usr/local/www/stats.php
new file mode 100644
index 0000000..6f34673
--- /dev/null
+++ b/src/usr/local/www/stats.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ $Id$
+ part of pfSense (https://www.pfsense.org)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-cpuutilization
+##|*NAME=Diagnostics: CPU Utilization page
+##|*DESCR=Allow access to the 'Diagnostics: CPU Utilization' page.
+##|*MATCH=stats.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("includes/functions.inc.php");
+
+$cpu = cpu_usage();
+
+echo $cpu;
+exit;
+
+?>
diff --git a/src/usr/local/www/status.php b/src/usr/local/www/status.php
new file mode 100755
index 0000000..6561c98
--- /dev/null
+++ b/src/usr/local/www/status.php
@@ -0,0 +1,281 @@
+<?php
+/* $Id$ */
+/* Run various commands and collect their output into HTML tables.
+ * Jim McBeath <jimmc@macrovision.com> Nov 2003
+ *
+ * (modified for m0n0wall by Manuel Kasper <mk@neon1.net>)
+ * (modified for pfSense by Scott Ullrich geekgod@pfsense.com)
+ *
+ */
+/*
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/vmstat /usr/bin/netstat /sbin/dmesg /sbin/mount /sbin/setkey /usr/local/sbin/pftop
+ pfSense_BUILDER_BINARIES: /sbin/pfctl /sbin/sysctl /usr/bin/top /usr/bin/netstat /sbin/pfctl /sbin/ifconfig
+ pfSense_MODULE: support
+*/
+
+##|+PRIV
+##|*IDENT=page-hidden-detailedstatus
+##|*NAME=Hidden: Detailed Status page
+##|*DESCR=Allow access to the 'Hidden: Detailed Status' page.
+##|*MATCH=status.php*
+##|-PRIV
+
+/* Execute a command, with a title, and generate an HTML table
+ * showing the results.
+ */
+
+/* include all configuration functions */
+require_once("guiconfig.inc");
+require_once("functions.inc");
+$output_path = "/tmp/status_output/";
+$output_file = "/tmp/status_output.tgz";
+
+if (is_dir($output_path)) {
+ unlink_if_exists("{$output_path}/*");
+ @rmdir($output_path);
+}
+unlink_if_exists($output_file);
+mkdir($output_path);
+
+function doCmdT($title, $command) {
+ global $output_path, $output_file;
+ /* Fixup output directory */
+
+ $rubbish = array('|', '-', '/', '.', ' '); /* fixes the <a> tag to be W3C compliant */
+ echo "\n<a name=\"" . str_replace($rubbish, '', $title) . "\" id=\"" . str_replace($rubbish, '', $title) . "\"></a>\n";
+ echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"" . $title . "\">\n";
+ echo "\t<tr><td class=\"listtopic\">" . $title . "</td></tr>\n";
+ echo "\t<tr>\n\t\t<td class=\"listlr\">\n\t\t\t<pre>"; /* no newline after pre */
+
+ if ($command == "dumpconfigxml") {
+ $ofd = @fopen("{$output_path}/config-sanitized.xml", "w");
+ $fd = @fopen("/conf/config.xml", "r");
+ if ($fd) {
+ while (!feof($fd)) {
+ $line = fgets($fd);
+ /* remove sensitive contents */
+ $line = preg_replace("/<password>.*?<\\/password>/", "<password>xxxxx</password>", $line);
+ $line = preg_replace("/<pre-shared-key>.*?<\\/pre-shared-key>/", "<pre-shared-key>xxxxx</pre-shared-key>", $line);
+ $line = preg_replace("/<rocommunity>.*?<\\/rocommunity>/", "<rocommunity>xxxxx</rocommunity>", $line);
+ $line = preg_replace("/<prv>.*?<\\/prv>/", "<prv>xxxxx</prv>", $line);
+ $line = preg_replace("/<shared_key>.*?<\\/shared_key>/", "<shared_key>xxxxx</shared_key>", $line);
+ $line = preg_replace("/<tls>.*?<\\/tls>/", "<tls>xxxxx</tls>", $line);
+ $line = preg_replace("/<ipsecpsk>.*?<\\/ipsecpsk>/", "<ipsecpsk>xxxxx</ipsecpsk>", $line);
+ $line = preg_replace("/<md5-hash>.*?<\\/md5-hash>/", "<md5-hash>xxxxx</md5-hash>", $line);
+ $line = preg_replace("/<md5password>.*?<\\/md5password>/", "<md5password>xxxxx</md5password>", $line);
+ $line = preg_replace("/<radius_secret>.*?<\\/radius_secret>/", "<radius_secret>xxxxx</radius_secret>", $line);
+ $line = preg_replace("/<ldap_bindpw>.*?<\\/ldap_bindpw>/", "<ldap_bindpw>xxxxx</ldap_bindpw>", $line);
+ $line = preg_replace("/<passwordagain>.*?<\\/passwordagain>/", "<passwordagain>xxxxx</passwordagain>", $line);
+ $line = preg_replace("/<crypto_password>.*?<\\/crypto_password>/", "<crypto_password>xxxxx</crypto_password>", $line);
+ $line = preg_replace("/<crypto_password2>.*?<\\/crypto_password2>/", "<crypto_password2>xxxxx</crypto_password2>", $line);
+ $line = str_replace("\t", " ", $line);
+ echo htmlspecialchars($line, ENT_NOQUOTES);
+ fwrite($ofd, $line);
+ }
+ }
+ fclose($fd);
+ fclose($ofd);
+ } else {
+ $ofd = @fopen("{$output_path}/{$title}.txt", "w");
+ $execOutput = "";
+ $execStatus = "";
+ exec ($command . " 2>&1", $execOutput, $execStatus);
+ for ($i = 0; isset($execOutput[$i]); $i++) {
+ if ($i > 0) {
+ echo "\n";
+ }
+ echo htmlspecialchars($execOutput[$i], ENT_NOQUOTES);
+ fwrite($ofd, $execOutput[$i] . "\n");
+ }
+ fclose($ofd);
+ }
+ echo "\n\t\t\t</pre>\n\t\t</td>\n\t</tr>\n";
+ echo "</table>\n";
+}
+
+/* Define a command, with a title, to be executed later. */
+function defCmdT($title, $command) {
+ global $commands;
+ $title = htmlspecialchars($title, ENT_NOQUOTES);
+ $commands[] = array($title, $command);
+}
+
+/* List all of the commands as an index. */
+function listCmds() {
+ global $commands;
+ $rubbish = array('|', '-', '/', '.', ' '); /* fixes the <a> tag to be W3C compliant */
+ echo "\n<p>" . gettext("This status page includes the following information") . ":\n";
+ echo "<ul>\n";
+ for ($i = 0; isset($commands[$i]); $i++) {
+ echo "\t<li><strong><a href=\"#" . str_replace($rubbish, '', $commands[$i][0]) . "\">" . $commands[$i][0] . "</a></strong></li>\n";
+ }
+ echo "</ul>\n";
+}
+
+/* Execute all of the commands which were defined by a call to defCmd. */
+function execCmds() {
+ global $commands;
+ for ($i = 0; isset($commands[$i]); $i++) {
+ doCmdT($commands[$i][0], $commands[$i][1]);
+ }
+}
+
+global $g, $config;
+
+/* Set up all of the commands we want to execute. */
+
+/* System stats/info */
+defCmdT("System uptime", "/usr/bin/uptime");
+defCmdT("Interfaces", "/sbin/ifconfig -a");
+defCmdT("Interface Statistics","/usr/bin/netstat -ni");
+defCmdT("Top Process Info", "/usr/bin/top | /usr/bin/head -n5");
+defCmdT("Processes", "/bin/ps xauww");
+defCmdT("Mounted Filesystems", "/sbin/mount");
+defCmdT("Free Disk Space", "/bin/df -hi");
+defCmdT("Routing tables", "/usr/bin/netstat -nWr");
+defCmdT("Mbuf Usage", "/usr/bin/netstat -mb");
+defCmdT("VMStat", "/usr/bin/vmstat -afimsz");
+defCmdT("Sockets", "/usr/bin/sockstat");
+
+/* Firewall rules and info */
+defCmdT("Generated Ruleset", "/bin/cat {$g['tmp_path']}/rules.debug");
+defCmdT("Generated Ruleset Limiters", "/bin/cat {$g['tmp_path']}/rules.limiter");
+defCmdT("Generated Ruleset Limits", "/bin/cat {$g['tmp_path']}/rules.limits");
+defCmdT("pf NAT Rules", "/sbin/pfctl -vvsn");
+defCmdT("pf Firewall Rules", "/sbin/pfctl -vvsr");
+defCmdT("pf Tables", "/sbin/pfctl -vs Tables");
+defCmdT("pf State Table Contents", "/sbin/pfctl -ss");
+defCmdT("pf Info", "/sbin/pfctl -si");
+defCmdT("pf Show All", "/sbin/pfctl -sa");
+defCmdT("pf Queues", "/sbin/pfctl -s queue -v");
+defCmdT("pf OSFP", "/sbin/pfctl -s osfp");
+defCmdT("pfsync stats", "/usr/bin/netstat -s -ppfsync");
+defCmdT("pftop Default", "/usr/local/sbin/pftop -a -b");
+defCmdT("pftop Long", "/usr/local/sbin/pftop -w 150 -a -b -v long");
+defCmdT("pftop Queue", "/usr/local/sbin/pftop -w 150 -a -b -v queue");
+defCmdT("pftop Rules", "/usr/local/sbin/pftop -w 150 -a -b -v rules");
+defCmdT("pftop Size", "/usr/local/sbin/pftop -w 150 -a -b -v size");
+defCmdT("pftop Speed", "/usr/local/sbin/pftop -w 150 -a -b -v speed");
+if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
+ foreach ($config['captiveportal'] as $cpZone => $cpdata) {
+ if (isset($cpdata['enable'])) {
+ defCmdT("IPFW rules for {$cpdata['zoneid']}", "/sbin/ipfw -x " . escapeshellarg($cpdata['zoneid']) . " show");
+ }
+ }
+}
+
+/* Configuration Files */
+defCmdT("Contents of /var/run", "/bin/ls /var/run");
+defCmdT("Contents of /conf", "/bin/ls /conf");
+defCmdT("config.xml", "dumpconfigxml");
+defCmdT("resolv.conf", "/bin/cat /etc/resolv.conf");
+defCmdT("DHCP Configuration", "/bin/cat /var/dhcpd/etc/dhcpd.conf");
+defCmdT("DHCPv6 Configuration", "/bin/cat /var/dhcpd/etc/dhcpdv6.conf");
+defCmdT("strongSwan config", "/bin/cat /var/etc/ipsec/strongswan.conf");
+defCmdT("IPsec config", "/bin/cat /var/etc/ipsec/ipsec.conf");
+defCmdT("SPD", "/sbin/setkey -DP");
+defCmdT("SAD", "/sbin/setkey -D");
+if (file_exists("/cf/conf/upgrade_log.txt")) {
+ defCmdT("Upgrade Log", "/bin/cat /cf/conf/upgrade_log.txt");
+}
+if (file_exists("/boot/loader.conf")) {
+ defCmdT("Loader Configuration", "/bin/cat /boot/loader.conf");
+}
+if (file_exists("/boot/loader.conf.local")) {
+ defCmdT("Loader Configuration (Local)", "/bin/cat /boot/loader.conf.local");
+}
+if (file_exists("/var/run/apinger.status")) {
+ defCmdT("Gateway Status", "/bin/cat /var/run/apinger.status");
+}
+if (file_exists("/var/etc/apinger.conf")) {
+ defCmdT("Gateway Monitoring Config", "/bin/cat /var/etc/apinger.conf");
+}
+if (file_exists("/var/etc/filterdns.conf")) {
+ defCmdT("Filter DNS Daemon Config", "/bin/cat /var/etc/filterdns.conf");
+}
+if (isset($config['system']['usefifolog'])) {
+ defCmdT("last 200 system log entries", "/usr/sbin/fifolog_reader /var/log/system.log 2>&1 | tail -n 200");
+ defCmdT("last 50 filter log entries", "/usr/sbin/fifolog_reader /var/log/filter.log 2>&1 | tail -n 50");
+} else {
+ defCmdT("last 200 system log entries", "/usr/local/sbin/clog /var/log/system.log 2>&1 | tail -n 200");
+ defCmdT("last 50 filter log entries", "/usr/local/sbin/clog /var/log/filter.log 2>&1 | tail -n 50");
+}
+if (file_exists("/tmp/PHP_errors.log")) {
+ defCmdT("PHP Error Log", "/bin/cat /tmp/PHP_errors.log");
+}
+defCmdT("System Message Buffer", "/sbin/dmesg -a");
+defCmdT("System Message Buffer (Boot)", "/bin/cat /var/log/dmesg.boot");
+defCmdT("sysctl values", "/sbin/sysctl -a");
+
+exec("/bin/date", $dateOutput, $dateStatus);
+$currentDate = $dateOutput[0];
+
+$pgtitle = array("{$g['product_name']}", "status");
+include("head.inc");
+
+?>
+<style type="text/css">
+/*<![CDATA[*/
+pre {
+ margin: 0px;
+ font-family: courier new, courier;
+ font-weight: normal;
+ font-size: 9pt;
+}
+/*]]>*/
+</style>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<strong><?=$currentDate;?></strong>
+<p><span class="red"><strong><?=gettext("Note: make sure to remove any sensitive information " .
+"(passwords, maybe also IP addresses) before posting " .
+"information from this page in public places (like mailing lists)"); ?>!</strong></span><br />
+<?=gettext("Passwords in config.xml have been automatically removed"); ?>.<br /><br />
+<?=gettext("When the page has finished loading, the output will be stored in {$output_file}. It may be downloaded via scp or "); ?>
+<a href="/exec.php?dlPath=<?= $output_file ?>"><?=gettext("Diagnostics > Command Prompt")?></a>
+
+<div id="cmdspace" style="width:700px">
+<?php listCmds(); ?>
+
+<?php execCmds(); ?>
+</div>
+<br />
+<?=gettext("Saving output to archive...");?>
+<?php
+if (is_dir($output_path)) {
+ mwexec("/usr/bin/tar czpf " . escapeshellarg($output_file) . " -C " . escapeshellarg(dirname($output_path)) . " " . escapeshellarg(basename($output_path)));
+ unlink_if_exists("{$output_path}/*");
+ @rmdir($output_path);
+}
+?>
+<?=gettext("Done.");?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_captiveportal.php b/src/usr/local/www/status_captiveportal.php
new file mode 100644
index 0000000..d88a452
--- /dev/null
+++ b/src/usr/local/www/status_captiveportal.php
@@ -0,0 +1,260 @@
+<?php
+/* $Id$ */
+/*
+ status_captiveportal.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-captiveportal
+##|*NAME=Status: Captive portal page
+##|*DESCR=Allow access to the 'Status: Captive portal' page.
+##|*MATCH=status_captiveportal.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+$pgtitle = array(gettext("Status: Captive portal"));
+$shortcut_section = "captiveportal";
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+if (count($a_cp) == 1) {
+ $cpzone = current(array_keys($a_cp));
+}
+
+/* If the zone does not exist, do not display the invalid zone */
+if (!array_key_exists($cpzone, $a_cp)) {
+ $cpzone = "";
+}
+
+if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+}
+
+if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid) && isset($_GET['id'])) {
+ captiveportal_disconnect_client($_GET['id']);
+ header("Location: status_captiveportal.php?zone={$cpzone}");
+ exit;
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+
+flush();
+
+function clientcmp($a, $b) {
+ global $order;
+ return strcmp($a[$order], $b[$order]);
+}
+
+if (!empty($cpzone)) {
+ $cpdb = captiveportal_read_db();
+
+ if ($_GET['order']) {
+ if ($_GET['order'] == "ip") {
+ $order = 2;
+ } else if ($_GET['order'] == "mac") {
+ $order = 3;
+ } else if ($_GET['order'] == "user") {
+ $order = 4;
+ } else if ($_GET['order'] == "lastact") {
+ $order = 5;
+ } else {
+ $order = 0;
+ }
+ usort($cpdb, "clientcmp");
+ }
+}
+
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
+
+?>
+
+<?php if (!empty($cpzone) && isset($config['voucher'][$cpzone]['enable'])): ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Active Users"), true, "status_captiveportal.php?zone=" . htmlspecialchars($cpzone));
+ $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone=" . htmlspecialchars($cpzone));
+ $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone=" . htmlspecialchars($cpzone));
+ $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone=" . htmlspecialchars($cpzone));
+ $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone=" . htmlspecialchars($cpzone));
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td class="tabcont">
+<?php endif; ?>
+
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="vncell" valign="top">
+ <br /><?=gettext("Captive Portal Zone"); ?><br/><br />
+ </td>
+ <td class="vncell" width="30%" align="center">
+<?php
+ if (count($a_cp) > 1) {
+?>
+ <form action="status_captiveportal.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
+ <select name="zone" class="formselect" onchange="document.form1.submit()">
+ <option value="">none</option>
+<?php
+ foreach ($a_cp as $cpkey => $cp) {
+ echo "<option value=\"" . htmlspecialchars($cpkey) . "\" ";
+ if ($cpzone == $cpkey) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($cp['zone']) . "</option>\n";
+ }
+?>
+ </select>
+ <br />
+ </form>
+<?php
+ } else {
+ echo htmlspecialchars($a_cp[$cpzone]['zone']);
+ }
+?>
+ </td>
+ <td colspan="3" width="50%"></td>
+ </tr>
+ <tr>
+ <td colspan="5"><br /></td>
+ </tr>
+<?php
+ if (!empty($cpzone)):
+?>
+ <tr>
+ <td colspan="5" valign="top" class="listtopic"><?=gettext("Captive Portal status");?></td>
+ </tr>
+ <tr>
+ <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=ip&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("IP address");?></a></td>
+ <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=mac&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("MAC address");?></a></td>
+ <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=user&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Username");?></a></td>
+<?php
+ if ($_GET['showact']):
+?>
+ <td class="listhdrr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=start&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Session start");?></a></td>
+ <td class="listhdr"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=lastact&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Last activity");?></a></td>
+<?php
+ else:
+?>
+ <td class="listhdr" colspan="2"><a href="?zone=<?=htmlspecialchars($cpzone)?>&amp;order=start&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Session start");?></a></td>
+<?php
+ endif;
+?>
+ <td class="list sort_ignore"></td>
+ </tr>
+<?php
+ foreach ($cpdb as $cpent):
+?>
+ <tr>
+ <td class="listlr"><?=$cpent[2];?></td>
+ <td class="listr">
+<?php
+ $mac=trim($cpent[3]);
+ if (!empty($mac)) {
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ print htmlentities($mac);
+ if (isset($mac_man[$mac_hi])) {
+ print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
+ }
+ }
+?>
+ &nbsp;
+ </td>
+ <td class="listr"><?=htmlspecialchars($cpent[4]);?>&nbsp;</td>
+<?php
+ if ($_GET['showact']):
+ $last_act = captiveportal_get_last_activity($cpent[2], $cpent[3]);
+?>
+ <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
+ <td class="listr"><?php if ($last_act != 0) echo htmlspecialchars(date("m/d/Y H:i:s", $last_act));?></td>
+<?php
+ else:
+?>
+ <td class="listr" colspan="2"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
+<?php
+ endif;
+?>
+ <td valign="middle" class="list nowrap">
+ <a href="?zone=<?=htmlspecialchars($cpzone);?>&amp;order=<?=$_GET['order'];?>&amp;showact=<?=htmlspecialchars($_GET['showact']);?>&amp;act=del&amp;id=<?=$cpent[5];?>" onclick="return confirm('<?=gettext("Do you really want to disconnect this client?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("Disconnect");?>"></a>
+ </td>
+ </tr>
+<?php
+ endforeach;
+ endif;
+?>
+ </table>
+
+<?php if (!empty($cpzone) && isset($config['voucher'][$cpzone]['enable'])): ?>
+ </td>
+ </tr>
+</table>
+<?php endif; ?>
+
+<form action="status_captiveportal.php" method="get" style="margin: 14px;">
+ <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
+<?php if (!empty($cpzone)): ?>
+<?php if ($_GET['showact']): ?>
+ <input type="hidden" name="showact" value="0" />
+ <input type="submit" class="formbtn" value="<?=gettext("Don't show last activity");?>" />
+<?php else: ?>
+ <input type="hidden" name="showact" value="1" />
+ <input type="submit" class="formbtn" value="<?=gettext("Show last activity");?>" />
+<?php endif; ?>
+ <input type="hidden" name="zone" value="<?=htmlspecialchars($cpzone);?>" />
+<?php endif; ?>
+</form>
+<?php include("fend.inc"); ?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/status_captiveportal_expire.php b/src/usr/local/www/status_captiveportal_expire.php
new file mode 100644
index 0000000..7d786b4
--- /dev/null
+++ b/src/usr/local/www/status_captiveportal_expire.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-captiveportal-expire
+##|*NAME=Status: Captive portal Expire Vouchers page
+##|*DESCR=Allow access to the 'Status: Captive portal Expire Vouchers' page.
+##|*MATCH=status_captiveportal_expire.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Expire Vouchers"), $a_cp[$cpzone]['zone']);
+
+include("head.inc");
+?>
+<body>
+<?php include("fbegin.inc"); ?>
+
+<form action="status_captiveportal_expire.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Expire Vouchers"), true, "status_captiveportal_expire.php?zone={$cpzone}");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td class="tabcont">
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Voucher(s)"); ?></td>
+ <td class="vtable">
+ <textarea name="vouchers" cols="65" rows="3" id="vouchers" class="formpre"><?=htmlspecialchars($_POST['vouchers']);?></textarea>
+ <br />
+ <?=gettext("Enter multiple vouchers separated by space or newline. All valid vouchers will be marked as expired"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<br/>
+<?php
+if ($_POST) {
+ if ($_POST['vouchers']) {
+ $result = voucher_expire($_POST['vouchers']);
+ echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n";
+ if ($result) {
+ echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>";
+ echo "<td bgcolor=\"#D9DEE8\">Success</td></tr>";
+ } else {
+ echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>";
+ echo "<td bgcolor=\"#FFD9D1\">Error</td></tr>";
+ }
+ echo "</table>";
+ }
+}
+
+include("fend.inc");
+?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_captiveportal_test.php b/src/usr/local/www/status_captiveportal_test.php
new file mode 100644
index 0000000..2a3dfc3
--- /dev/null
+++ b/src/usr/local/www/status_captiveportal_test.php
@@ -0,0 +1,128 @@
+<?php
+/*
+ status_captiveportal_test.php
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-captiveportal-test
+##|*NAME=Status: Captive portal test Vouchers page
+##|*DESCR=Allow access to the 'Status: Captive portal Test Vouchers' page.
+##|*MATCH=status_captiveportal_test.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Test Vouchers"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal-vouchers";
+
+include("head.inc");
+?>
+<body>
+<?php include("fbegin.inc"); ?>
+
+<form action="status_captiveportal_test.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Test Vouchers"), true, "status_captiveportal_test.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="content pane">
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Voucher(s)"); ?></td>
+ <td class="vtable">
+ <textarea name="vouchers" cols="65" rows="3" id="vouchers" class="formpre"><?=htmlspecialchars($_POST['vouchers']);?></textarea>
+ <br />
+ <?=gettext("Enter multiple vouchers separated by space or newline. The remaining time, if valid, will be shown for each voucher"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Submit"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<br/>
+<?php
+if ($_POST) {
+ if ($_POST['vouchers']) {
+ $test_results = voucher_auth($_POST['vouchers'], 1);
+ echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n";
+ foreach ($test_results as $result) {
+ if (strpos($result, " good ") || strpos($result, " granted ")) {
+ echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>";
+ echo "<td bgcolor=\"#D9DEE8\">$result</td></tr>";
+ } else {
+ echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>";
+ echo "<td bgcolor=\"#FFD9D1\">$result</td></tr>";
+ }
+ }
+ echo "</table>";
+ }
+}
+
+include("fend.inc");
+?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_captiveportal_voucher_rolls.php b/src/usr/local/www/status_captiveportal_voucher_rolls.php
new file mode 100644
index 0000000..512356b
--- /dev/null
+++ b/src/usr/local/www/status_captiveportal_voucher_rolls.php
@@ -0,0 +1,147 @@
+<?php
+/*
+ status_captiveportal_voucher_rolls.php
+
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-captiveportal-voucher-rolls
+##|*NAME=Status: Captive portal Voucher Rolls page
+##|*DESCR=Allow access to the 'Status: Captive portal Voucher Rolls' page.
+##|*MATCH=status_captiveportal_voucher_rolls.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Voucher Rolls"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal-vouchers";
+
+if (!is_array($config['voucher'][$cpzone]['roll'])) {
+ $config['voucher'][$cpzone]['roll'] = array();
+}
+$a_roll = &$config['voucher'][$cpzone]['roll'];
+
+include("head.inc");
+?>
+<body>
+<?php include("fbegin.inc"); ?>
+
+<form action="status_captiveportal_voucher_rolls.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Voucher Rolls"), true, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
+ <tr>
+ <td class="listhdrr"><?=gettext("Roll#"); ?></td>
+ <td class="listhdrr"><?=gettext("Minutes/Ticket"); ?></td>
+ <td class="listhdrr"><?=gettext("# of Tickets"); ?></td>
+ <td class="listhdrr"><?=gettext("Comment"); ?></td>
+ <td class="listhdrr"><?=gettext("used"); ?></td>
+ <td class="listhdrr"><?=gettext("active"); ?></td>
+ <td class="listhdr"><?=gettext("ready"); ?></td>
+ </tr>
+ <?php
+ $voucherlck = lock("vouche{$cpzone}r");
+ $i = 0;
+ foreach ($a_roll as $rollent):
+ $used = voucher_used_count($rollent['number']);
+ $active = count(voucher_read_active_db($rollent['number']), $rollent['minutes']);
+ $ready = $rollent['count'] - $used;
+ /* used also count active vouchers, remove them */
+ $used = $used - $active;
+ ?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($rollent['number']); ?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['minutes']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['count']);?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($rollent['comment']); ?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($used); ?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($active); ?>&nbsp;
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($ready); ?>&nbsp;
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ unlock($voucherlck);
+ ?>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_captiveportal_vouchers.php b/src/usr/local/www/status_captiveportal_vouchers.php
new file mode 100644
index 0000000..a7ab959
--- /dev/null
+++ b/src/usr/local/www/status_captiveportal_vouchers.php
@@ -0,0 +1,150 @@
+<?php
+/*
+ status_captiveportal_vouchers.php
+ Copyright (C) 2007 Marcel Wiget <mwiget@mac.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: captiveportal
+*/
+
+##|+PRIV
+##|*IDENT=page-status-captiveportal-vouchers
+##|*NAME=Status: Captive portal Vouchers page
+##|*DESCR=Allow access to the 'Status: Captive portal Vouchers' page.
+##|*MATCH=status_captiveportal_vouchers.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require("captiveportal.inc");
+require_once("voucher.inc");
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (empty($cpzone)) {
+ header("Location: services_captiveportal_zones.php");
+ exit;
+}
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
+$shortcut_section = "captiveportal-vouchers";
+
+function clientcmp($a, $b) {
+ global $order;
+ return strcmp($a[$order], $b[$order]);
+}
+
+if (!is_array($config['voucher'][$cpzone]['roll'])) {
+ $config['voucher'][$cpzone]['roll'] = array();
+}
+$a_roll = $config['voucher'][$cpzone]['roll'];
+
+$db = array();
+
+foreach ($a_roll as $rollent) {
+ $roll = $rollent['number'];
+ $minutes = $rollent['minutes'];
+
+ if (!file_exists("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db")) {
+ continue;
+ }
+
+ $active_vouchers = file("{$g['vardb_path']}/voucher_{$cpzone}_active_$roll.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ foreach ($active_vouchers as $voucher => $line) {
+ list($voucher, $timestamp, $minutes) = explode(",", $line);
+ $remaining = (($timestamp + 60*$minutes) - time());
+ if ($remaining > 0) {
+ $dbent[0] = $voucher;
+ $dbent[1] = $roll;
+ $dbent[2] = $timestamp;
+ $dbent[3] = intval($remaining/60);
+ $dbent[4] = $timestamp + 60*$minutes; // expires at
+ $db[] = $dbent;
+ }
+ }
+}
+
+if ($_GET['order']) {
+ $order = $_GET['order'];
+ usort($db, "clientcmp");
+}
+
+include("head.inc");
+?>
+<body>
+<?php include("fbegin.inc"); ?>
+
+<form action="status_captiveportal_vouchers.php" method="post" enctype="multipart/form-data" name="iform" id="iform">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="tab pane">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Active Vouchers"), true, "status_captiveportal_vouchers.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
+ $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="content pane">
+ <tr>
+ <td class="listhdrr"><a href="?order=0&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Voucher"); ?></a></td>
+ <td class="listhdrr"><a href="?order=1&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Roll"); ?></a></td>
+ <td class="listhdrr"><a href="?order=2&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Activated at"); ?></a></td>
+ <td class="listhdrr"><a href="?order=3&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires in"); ?></a></td>
+ <td class="listhdr"><a href="?order=4&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires at"); ?></a></td>
+ <td class="list"></td>
+ </tr>
+<?php foreach ($db as $dbent): ?>
+ <tr>
+ <td class="listlr"><?=$dbent[0];?></td>
+ <td class="listr"><?=$dbent[1];?></td>
+ <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[2]));?></td>
+ <td class="listr"><?=$dbent[3];?> <?=gettext("min"); ?></td>
+ <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[4]));?></td>
+ <td class="list"></td>
+ </tr>
+<?php endforeach; ?>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_dhcp_leases.php b/src/usr/local/www/status_dhcp_leases.php
new file mode 100644
index 0000000..4c37f21
--- /dev/null
+++ b/src/usr/local/www/status_dhcp_leases.php
@@ -0,0 +1,457 @@
+<?php
+/* $Id$ */
+/*
+ status_dhcp_leases.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004-2009 Scott Ullrich
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/arp /usr/bin/wc /usr/bin/grep
+ pfSense_MODULE: dhcpserver
+*/
+
+##|+PRIV
+##|*IDENT=page-status-dhcpleases
+##|*NAME=Status: DHCP leases page
+##|*DESCR=Allow access to the 'Status: DHCP leases' page.
+##|*MATCH=status_dhcp_leases.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("config.inc");
+
+$pgtitle = array(gettext("Status"), gettext("DHCP leases"));
+$shortcut_section = "dhcp";
+
+$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases";
+
+if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
+ /* Stop DHCPD */
+ killbyname("dhcpd");
+
+ /* Read existing leases */
+ /* $leases_contents has the lines of the file, including the newline char at the end of each line. */
+ $leases_contents = file($leasesfile);
+ $newleases_contents = array();
+ $i = 0;
+ while ($i < count($leases_contents)) {
+ /* Find the lease(s) we want to delete */
+ if ($leases_contents[$i] == "lease {$_GET['deleteip']} {\n") {
+ /* Skip to the end of the lease declaration */
+ do {
+ $i++;
+ } while ($leases_contents[$i] != "}\n");
+ } else {
+ /* It's a line we want to keep, copy it over. */
+ $newleases_contents[] = $leases_contents[$i];
+ }
+ $i++;
+ }
+
+ /* Write out the new leases file */
+ $fd = fopen($leasesfile, 'w');
+ fwrite($fd, implode("\n", $newleases_contents));
+ fclose($fd);
+
+ /* Restart DHCP Service */
+ services_dhcpd_configure();
+ header("Location: status_dhcp_leases.php?all={$_GET['all']}");
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+
+function leasecmp($a, $b) {
+ return strcmp($a[$_GET['order']], $b[$_GET['order']]);
+}
+
+function adjust_gmt($dt) {
+ global $config;
+ $dhcpd = $config['dhcpd'];
+ foreach ($dhcpd as $dhcpditem) {
+ $dhcpleaseinlocaltime = $dhcpditem['dhcpleaseinlocaltime'];
+ if ($dhcpleaseinlocaltime == "yes") {
+ break;
+ }
+ }
+ if ($dhcpleaseinlocaltime == "yes") {
+ $ts = strtotime($dt . " GMT");
+ if ($ts !== false) {
+ return strftime("%Y/%m/%d %I:%M:%S%p", $ts);
+ }
+ }
+ /* If we did not need to convert to local time or the conversion failed, just return the input. */
+ return $dt;
+}
+
+function remove_duplicate($array, $field) {
+ foreach ($array as $sub) {
+ $cmp[] = $sub[$field];
+ }
+ $unique = array_unique(array_reverse($cmp, true));
+ foreach ($unique as $k => $rien) {
+ $new[] = $array[$k];
+ }
+ return $new;
+}
+
+$awk = "/usr/bin/awk";
+/* this pattern sticks comments into a single array item */
+$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'";
+/* We then split the leases file by } */
+$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
+
+/* stuff the leases file in a proper format into a array by line */
+exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
+$leases_count = count($leases_content);
+exec("/usr/sbin/arp -an", $rawdata);
+$arpdata_ip = array();
+$arpdata_mac = array();
+foreach ($rawdata as $line) {
+ $elements = explode(' ', $line);
+ if ($elements[3] != "(incomplete)") {
+ $arpent = array();
+ $arpdata_ip[] = trim(str_replace(array('(', ')'), '', $elements[1]));
+ $arpdata_mac[] = strtolower(trim($elements[3]));
+ }
+}
+unset($rawdata);
+$pools = array();
+$leases = array();
+$i = 0;
+$l = 0;
+$p = 0;
+
+// Put everything together again
+foreach ($leases_content as $lease) {
+ /* split the line by space */
+ $data = explode(" ", $lease);
+ /* walk the fields */
+ $f = 0;
+ $fcount = count($data);
+ /* with less than 20 fields there is nothing useful */
+ if ($fcount < 20) {
+ $i++;
+ continue;
+ }
+ while ($f < $fcount) {
+ switch ($data[$f]) {
+ case "failover":
+ $pools[$p]['name'] = trim($data[$f+2], '"');
+ $pools[$p]['name'] = "{$pools[$p]['name']} (" . convert_friendly_interface_to_friendly_descr(substr($pools[$p]['name'], 5)) . ")";
+ $pools[$p]['mystate'] = $data[$f+7];
+ $pools[$p]['peerstate'] = $data[$f+14];
+ $pools[$p]['mydate'] = $data[$f+10];
+ $pools[$p]['mydate'] .= " " . $data[$f+11];
+ $pools[$p]['peerdate'] = $data[$f+17];
+ $pools[$p]['peerdate'] .= " " . $data[$f+18];
+ $p++;
+ $i++;
+ continue 3;
+ case "lease":
+ $leases[$l]['ip'] = $data[$f+1];
+ $leases[$l]['type'] = "dynamic";
+ $f = $f+2;
+ break;
+ case "starts":
+ $leases[$l]['start'] = $data[$f+2];
+ $leases[$l]['start'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "ends":
+ if ($data[$f+1] == "never") {
+ // Quote from dhcpd.leases(5) man page:
+ // If a lease will never expire, date is never instead of an actual date.
+ $leases[$l]['end'] = gettext("Never");
+ $f = $f+1;
+ } else {
+ $leases[$l]['end'] = $data[$f+2];
+ $leases[$l]['end'] .= " " . $data[$f+3];
+ $f = $f+3;
+ }
+ break;
+ case "tstp":
+ $f = $f+3;
+ break;
+ case "tsfp":
+ $f = $f+3;
+ break;
+ case "atsfp":
+ $f = $f+3;
+ break;
+ case "cltt":
+ $f = $f+3;
+ break;
+ case "binding":
+ switch ($data[$f+2]) {
+ case "active":
+ $leases[$l]['act'] = "active";
+ break;
+ case "free":
+ $leases[$l]['act'] = "expired";
+ $leases[$l]['online'] = "offline";
+ break;
+ case "backup":
+ $leases[$l]['act'] = "reserved";
+ $leases[$l]['online'] = "offline";
+ break;
+ }
+ $f = $f+1;
+ break;
+ case "next":
+ /* skip the next binding statement */
+ $f = $f+3;
+ break;
+ case "rewind":
+ /* skip the rewind binding statement */
+ $f = $f+3;
+ break;
+ case "hardware":
+ $leases[$l]['mac'] = $data[$f+2];
+ /* check if it's online and the lease is active */
+ if (in_array($leases[$l]['ip'], $arpdata_ip)) {
+ $leases[$l]['online'] = 'online';
+ } else {
+ $leases[$l]['online'] = 'offline';
+ }
+ $f = $f+2;
+ break;
+ case "client-hostname":
+ if ($data[$f+1] <> "") {
+ $leases[$l]['hostname'] = preg_replace('/"/', '', $data[$f+1]);
+ } else {
+ $hostname = gethostbyaddr($leases[$l]['ip']);
+ if ($hostname <> "") {
+ $leases[$l]['hostname'] = $hostname;
+ }
+ }
+ $f = $f+1;
+ break;
+ case "uid":
+ $f = $f+1;
+ break;
+ }
+ $f++;
+ }
+ $l++;
+ $i++;
+ /* slowly chisel away at the source array */
+ array_shift($leases_content);
+}
+/* remove the old array */
+unset($lease_content);
+
+/* remove duplicate items by mac address */
+if (count($leases) > 0) {
+ $leases = remove_duplicate($leases, "ip");
+}
+
+if (count($pools) > 0) {
+ $pools = remove_duplicate($pools, "name");
+ asort($pools);
+}
+
+foreach ($config['interfaces'] as $ifname => $ifarr) {
+ if (is_array($config['dhcpd'][$ifname]) &&
+ is_array($config['dhcpd'][$ifname]['staticmap'])) {
+ $staticmap_array_index = 0;
+ foreach ($config['dhcpd'][$ifname]['staticmap'] as $static) {
+ $slease = array();
+ $slease['ip'] = $static['ipaddr'];
+ $slease['type'] = "static";
+ $slease['mac'] = $static['mac'];
+ $slease['if'] = $ifname;
+ $slease['start'] = "";
+ $slease['end'] = "";
+ $slease['hostname'] = htmlentities($static['hostname']);
+ $slease['act'] = "static";
+ $slease['online'] = in_array(strtolower($slease['mac']), $arpdata_mac) ? 'online' : 'offline';
+ $slease['staticmap_array_index'] = $staticmap_array_index;
+ $leases[] = $slease;
+ $staticmap_array_index++;
+ }
+ }
+}
+
+if ($_GET['order']) {
+ usort($leases, "leasecmp");
+}
+
+/* only print pool status when we have one */
+if (count($pools) > 0) {
+?>
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
+ <tr>
+ <td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
+ <td class="listhdrr"><?=gettext("My State"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Since"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Since"); ?></a></td>
+ </tr>
+<?php
+ foreach ($pools as $data) {
+ echo "<tr>\n";
+ echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}</td>\n";
+ echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
+ echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
+ echo "</tr>\n";
+ }
+?>
+</table>
+
+<?php
+/* only print pool status when we have one */
+}
+?>
+
+<br/>
+
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
+ <tr>
+ <td class="listhdrr"><a href="#"><?=gettext("IP address"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("MAC address"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Hostname"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
+ </tr>
+<?php
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
+foreach ($leases as $data) {
+ if (($data['act'] == "active") || ($data['act'] == "static" && !empty($data['ip'])) || ($_GET['all'] == 1)) {
+ if ($data['act'] != "active" && $data['act'] != "static") {
+ $fspans = "<span class=\"gray\">";
+ $fspane = "&nbsp;</span>";
+ } else {
+ $fspans = "";
+ $fspane = "&nbsp;";
+ }
+ $lip = ip2ulong($data['ip']);
+ if ($data['act'] != "static") {
+ foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
+ if (!is_array($dhcpifconf['range'])) {
+ continue;
+ }
+ if (($lip >= ip2ulong($dhcpifconf['range']['from'])) && ($lip <= ip2ulong($dhcpifconf['range']['to']))) {
+ $data['if'] = $dhcpif;
+ break;
+ }
+ // Check if the IP is in the range of any DHCP pools
+ if (is_array($dhcpifconf['pool'])) {
+ foreach ($dhcpifconf['pool'] as $dhcppool) {
+ if (is_array($dhcppool['range'])) {
+ if (($lip >= ip2ulong($dhcppool['range']['from'])) && ($lip <= ip2ulong($dhcppool['range']['to']))) {
+ $data['if'] = $dhcpif;
+ break 2;
+ }
+ }
+ }
+ }
+ }
+ }
+ echo "<tr>\n";
+ echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}</td>\n";
+ $mac=$data['mac'];
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ if ($data['online'] != "online") {
+ if (isset($mac_man[$mac_hi])) { // Manufacturer for this MAC is defined
+ echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac=$mac\" title=\"" . gettext("$mac - send Wake on LAN packet to this MAC address") ."\">{$mac}</a><br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
+ } else {
+ echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane}</td>\n";
+ }
+ } else {
+ if (isset($mac_man[$mac_hi])) { // Manufacturer for this MAC is defined
+ echo "<td class=\"listr\">{$fspans}{$mac}<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
+ } else {
+ echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane}</td>\n";
+ }
+ }
+ echo "<td class=\"listr\">{$fspans}" . htmlentities($data['hostname']) . "{$fspane}</td>\n";
+ if ($data['type'] != "static") {
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
+ } else {
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ }
+ echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
+ echo "<td valign=\"middle\">&nbsp;";
+ if ($data['type'] == "dynamic") {
+ echo "<a href=\"services_dhcp_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;hostname={$data['hostname']}\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
+ } else {
+ echo "<a href=\"services_dhcp_edit.php?if={$data['if']}&amp;id={$data['staticmap_array_index']}\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_e.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("edit the static mapping for this entry") ."\" alt=\"add\" />&nbsp;\n";
+ }
+
+ echo "<a href=\"services_wol_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;descr={$data['hostname']}\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_wol_all.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a Wake on LAN mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
+
+ /* Only show the button for offline dynamic leases */
+ if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
+ echo "<a href=\"status_dhcp_leases.php?deleteip={$data['ip']}&amp;all=" . htmlspecialchars($_GET['all']) . "\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\" alt=\"delete\" /></a>&nbsp;\n";
+ }
+ echo "</td></tr>\n";
+ }
+}
+
+?>
+</table>
+<br/>
+<form action="status_dhcp_leases.php" method="get">
+ <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
+<?php if ($_GET['all']): ?>
+ <input type="hidden" name="all" value="0" />
+ <input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>" />
+<?php else: ?>
+ <input type="hidden" name="all" value="1" />
+ <input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>" />
+<?php endif; ?>
+</form>
+<?php if ($leases == 0): ?>
+<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
+<?php endif; ?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_dhcpv6_leases.php b/src/usr/local/www/status_dhcpv6_leases.php
new file mode 100644
index 0000000..63f1946
--- /dev/null
+++ b/src/usr/local/www/status_dhcpv6_leases.php
@@ -0,0 +1,581 @@
+<?php
+/* $Id$ */
+/*
+ status_dhcpv6_leases.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Seth Mos
+ Copyright (C) 2004-2009 Scott Ullrich
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/ndp /usr/bin/wc /usr/bin/grep
+ pfSense_MODULE: dhcpserver
+*/
+
+##|+PRIV
+##|*IDENT=page-status-dhcpv6leases
+##|*NAME=Status: DHCPv6 leases page
+##|*DESCR=Allow access to the 'Status: DHCPv6 leases' page.
+##|*MATCH=status_dhcpv6_leases.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("config.inc");
+
+$pgtitle = array(gettext("Status"), gettext("DHCPv6 leases"));
+$shortcut_section = "dhcp6";
+
+$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases";
+
+if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
+ /* Stop DHCPD */
+ killbyname("dhcpd");
+
+ /* Read existing leases */
+ $leases_contents = explode("\n", file_get_contents($leasesfile));
+ $newleases_contents = array();
+ $i = 0;
+ while ($i < count($leases_contents)) {
+ /* Find the lease(s) we want to delete */
+ if ($leases_contents[$i] == " iaaddr {$_GET['deleteip']} {") {
+ /* The iaaddr line is two lines down from the start of the lease, so remove those two lines. */
+ array_pop($newleases_contents);
+ array_pop($newleases_contents);
+ /* Skip to the end of the lease declaration */
+ do {
+ $i++;
+ } while ($leases_contents[$i] != "}");
+ } else {
+ /* It's a line we want to keep, copy it over. */
+ $newleases_contents[] = $leases_contents[$i];
+ }
+ $i++;
+ }
+
+ /* Write out the new leases file */
+ $fd = fopen($leasesfile, 'w');
+ fwrite($fd, implode("\n", $newleases_contents));
+ fclose($fd);
+
+ /* Restart DHCP Service */
+ services_dhcpd_configure();
+ header("Location: status_dhcpv6_leases.php?all={$_GET['all']}");
+}
+
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+
+function leasecmp($a, $b) {
+ return strcmp($a[$_GET['order']], $b[$_GET['order']]);
+}
+
+function adjust_gmt($dt) {
+ global $config;
+
+ $dhcpv6leaseinlocaltime == "no";
+ if (is_array($config['dhcpdv6'])) {
+ $dhcpdv6 = $config['dhcpdv6'];
+ foreach ($dhcpdv6 as $dhcpv6leaseinlocaltime) {
+ $dhcpv6leaseinlocaltime = $dhcpv6leaseinlocaltime['dhcpv6leaseinlocaltime'];
+ if ($dhcpv6leaseinlocaltime == "yes") {
+ break;
+ }
+ }
+ }
+
+ $timezone = $config['system']['timezone'];
+ $ts = strtotime($dt . " GMT");
+ if ($dhcpv6leaseinlocaltime == "yes") {
+ $this_tz = new DateTimeZone($timezone);
+ $dhcp_lt = new DateTime(strftime("%I:%M:%S%p", $ts), $this_tz);
+ $offset = $this_tz->getOffset($dhcp_lt);
+ $ts = $ts + $offset;
+ return strftime("%Y/%m/%d %I:%M:%S%p", $ts);
+ } else {
+ return strftime("%Y/%m/%d %H:%M:%S", $ts);
+ }
+}
+
+function remove_duplicate($array, $field) {
+ foreach ($array as $sub) {
+ $cmp[] = $sub[$field];
+ }
+ $unique = array_unique(array_reverse($cmp, true));
+ foreach ($unique as $k => $rien) {
+ $new[] = $array[$k];
+ }
+ return $new;
+}
+
+function parse_duid($duid_string) {
+ $parsed_duid = array();
+ for ($i = 0; $i < strlen($duid_string); $i++) {
+ $s = substr($duid_string, $i, 1);
+ if ($s == '\\') {
+ $n = substr($duid_string, $i+1, 1);
+ if (($n == '\\') || ($n == '"')) {
+ $parsed_duid[] = sprintf("%02x", ord($n));
+ } elseif (is_numeric($n)) {
+ $parsed_duid[] = sprintf("%02x", octdec(substr($duid_string, $i+1, 3)));
+ $i += 3;
+ }
+ } else {
+ $parsed_duid[] = sprintf("%02x", ord($s));
+ }
+ }
+ $iaid = array_slice($parsed_duid, 0, 4);
+ $duid = array_slice($parsed_duid, 4);
+ return array($iaid, $duid);
+}
+
+$awk = "/usr/bin/awk";
+
+/* this pattern sticks comments into a single array item */
+$cleanpattern = "'{ gsub(\"^#.*\", \"\");} { gsub(\"^server-duid.*\", \"\");} { gsub(\";$\", \"\"); print;}'";
+/* We then split the leases file by } */
+$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
+
+/* stuff the leases file in a proper format into a array by line */
+exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern} | /usr/bin/grep '^ia-.. '", $leases_content);
+$leases_count = count($leases_content);
+exec("/usr/sbin/ndp -an", $rawdata);
+$ndpdata = array();
+foreach ($rawdata as $line) {
+ $elements = preg_split('/\s+/ ', $line);
+ if ($elements[1] != "(incomplete)") {
+ $ndpent = array();
+ $ip = trim(str_replace(array('(', ')'), '', $elements[0]));
+ $ndpent['mac'] = trim($elements[1]);
+ $ndpent['interface'] = trim($elements[2]);
+ $ndpdata[$ip] = $ndpent;
+ }
+}
+
+$pools = array();
+$leases = array();
+$prefixes = array();
+$mappings = array();
+$i = 0;
+$l = 0;
+$p = 0;
+
+// Put everything together again
+while ($i < $leases_count) {
+ $entry = array();
+ /* split the line by space */
+ $duid_split = array();
+ preg_match('/ia-.. "(.*)" { (.*)/ ', $leases_content[$i], $duid_split);
+ if (!empty($duid_split[1])) {
+ $iaid_duid = parse_duid($duid_split[1]);
+ $entry['iaid'] = hexdec(implode("", array_reverse($iaid_duid[0])));
+ $entry['duid'] = implode(":", $iaid_duid[1]);
+ $data = explode(" ", $duid_split[2]);
+ } else {
+ $data = explode(" ", $leases_content[$i]);
+ }
+ /* walk the fields */
+ $f = 0;
+ $fcount = count($data);
+ /* with less then 12 fields there is nothing useful */
+ if ($fcount < 12) {
+ $i++;
+ continue;
+ }
+ while ($f < $fcount) {
+ switch ($data[$f]) {
+ case "failover":
+ $pools[$p]['name'] = $data[$f+2];
+ $pools[$p]['mystate'] = $data[$f+7];
+ $pools[$p]['peerstate'] = $data[$f+14];
+ $pools[$p]['mydate'] = $data[$f+10];
+ $pools[$p]['mydate'] .= " " . $data[$f+11];
+ $pools[$p]['peerdate'] = $data[$f+17];
+ $pools[$p]['peerdate'] .= " " . $data[$f+18];
+ $p++;
+ $i++;
+ continue 3;
+ case "ia-pd":
+ $is_prefix = true;
+ case "ia-na":
+ $entry['iaid'] = $tmp_iaid;
+ $entry['duid'] = $tmp_duid;
+ if ($data[$f+1][0] == '"') {
+ $duid = "";
+ /* FIXME: This needs a safety belt to prevent an infinite loop */
+ while ($data[$f][strlen($data[$f])-1] != '"') {
+ $duid .= " " . $data[$f+1];
+ $f++;
+ }
+ $entry['duid'] = $duid;
+ } else {
+ $entry['duid'] = $data[$f+1];
+ }
+ $entry['type'] = "dynamic";
+ $f = $f+2;
+ break;
+ case "iaaddr":
+ $entry['ip'] = $data[$f+1];
+ $entry['type'] = "dynamic";
+ if (in_array($entry['ip'], array_keys($ndpdata))) {
+ $entry['online'] = 'online';
+ } else {
+ $entry['online'] = 'offline';
+ }
+ $f = $f+2;
+ break;
+ case "iaprefix":
+ $is_prefix = true;
+ $entry['prefix'] = $data[$f+1];
+ $entry['type'] = "dynamic";
+ $f = $f+2;
+ break;
+ case "starts":
+ $entry['start'] = $data[$f+2];
+ $entry['start'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "ends":
+ $entry['end'] = $data[$f+2];
+ $entry['end'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "tstp":
+ $f = $f+3;
+ break;
+ case "tsfp":
+ $f = $f+3;
+ break;
+ case "atsfp":
+ $f = $f+3;
+ break;
+ case "cltt":
+ $entry['start'] = $data[$f+2];
+ $entry['start'] .= " " . $data[$f+3];
+ $f = $f+3;
+ break;
+ case "binding":
+ switch ($data[$f+2]) {
+ case "active":
+ $entry['act'] = "active";
+ break;
+ case "free":
+ $entry['act'] = "expired";
+ $entry['online'] = "offline";
+ break;
+ case "backup":
+ $entry['act'] = "reserved";
+ $entry['online'] = "offline";
+ break;
+ case "released":
+ $entry['act'] = "released";
+ $entry['online'] = "offline";
+ }
+ $f = $f+1;
+ break;
+ case "next":
+ /* skip the next binding statement */
+ $f = $f+3;
+ break;
+ case "hardware":
+ $f = $f+2;
+ break;
+ case "client-hostname":
+ if ($data[$f+1] <> "") {
+ $entry['hostname'] = preg_replace('/"/', '', $data[$f+1]);
+ } else {
+ $hostname = gethostbyaddr($entry['ip']);
+ if ($hostname <> "") {
+ $entry['hostname'] = $hostname;
+ }
+ }
+ $f = $f+1;
+ break;
+ case "uid":
+ $f = $f+1;
+ break;
+ }
+ $f++;
+ }
+ if ($is_prefix) {
+ $prefixes[] = $entry;
+ } else {
+ $leases[] = $entry;
+ $mappings[$entry['iaid'] . $entry['duid']] = $entry['ip'];
+ }
+ $l++;
+ $i++;
+ $is_prefix = false;
+}
+
+if (count($leases) > 0) {
+ $leases = remove_duplicate($leases, "ip");
+}
+
+if (count($prefixes) > 0) {
+ $prefixes = remove_duplicate($prefixes, "prefix");
+}
+
+if (count($pools) > 0) {
+ $pools = remove_duplicate($pools, "name");
+ asort($pools);
+}
+
+foreach ($config['interfaces'] as $ifname => $ifarr) {
+ if (is_array($config['dhcpdv6'][$ifname]) &&
+ is_array($config['dhcpdv6'][$ifname]['staticmap'])) {
+ foreach ($config['dhcpdv6'][$ifname]['staticmap'] as $static) {
+ $slease = array();
+ $slease['ip'] = $static['ipaddrv6'];
+ $slease['type'] = "static";
+ $slease['duid'] = $static['duid'];
+ $slease['start'] = "";
+ $slease['end'] = "";
+ $slease['hostname'] = htmlentities($static['hostname']);
+ $slease['act'] = "static";
+ if (in_array($slease['ip'], array_keys($ndpdata))) {
+ $slease['online'] = 'online';
+ } else {
+ $slease['online'] = 'offline';
+ }
+
+ $leases[] = $slease;
+ }
+ }
+}
+
+if ($_GET['order']) {
+ usort($leases, "leasecmp");
+}
+
+/* only print pool status when we have one */
+if (count($pools) > 0) {
+?>
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
+ <tr>
+ <td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
+ <td class="listhdrr"><?=gettext("My State"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Since"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
+ <td class="listhdrr"><?=gettext("Since"); ?></a></td>
+ </tr>
+<?php
+ foreach ($pools as $data) {
+ echo "<tr>\n";
+ echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}</td>\n";
+ echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
+ echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
+ echo "</tr>\n";
+ }
+?>
+</table>
+
+<?php
+/* only print pool status when we have one */
+}
+?>
+
+<br/>
+
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
+ <tr>
+ <td class="listhdrr"><a href="#"><?=gettext("IPv6 address"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("IAID"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("DUID"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Hostname/MAC"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
+ </tr>
+<?php
+foreach ($leases as $data) {
+ if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
+ if ($data['act'] != "active" && $data['act'] != "static") {
+ $fspans = "<span class=\"gray\">";
+ $fspane = "&nbsp;</span>";
+ } else {
+ $fspans = "";
+ $fspane = "&nbsp;";
+ }
+
+ if ($data['act'] == "static") {
+ foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
+ if (is_array($dhcpifconf['staticmap'])) {
+ foreach ($dhcpifconf['staticmap'] as $staticent) {
+ if ($data['ip'] == $staticent['ipaddr']) {
+ $data['if'] = $dhcpif;
+ break;
+ }
+ }
+ }
+ /* exit as soon as we have an interface */
+ if ($data['if'] != "") {
+ break;
+ }
+ }
+ } else {
+ $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip']));
+ }
+ echo "<tr>\n";
+ echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['iaid']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['duid']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}";
+ if (!empty($data['hostname'])) {
+ echo htmlentities($data['hostname']) . "<br />";
+ }
+
+ $mac=trim($ndpdata[$data['ip']]['mac']);
+ if (!empty($mac)) {
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ print htmlentities($mac);
+ if (isset($mac_man[$mac_hi])) {
+ print "<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>";
+ }
+ }
+
+ echo "{$fspane}&nbsp;</td>\n";
+ if ($data['type'] != "static") {
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
+ } else {
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ }
+ echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
+
+ if ($data['type'] == "dynamic") {
+ echo "<td valign=\"middle\"><a href=\"services_dhcpv6_edit.php?if={$data['if']}&amp;duid={$data['duid']}&amp;hostname={$data['hostname']}\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\" alt=\"add\" /></a></td>\n";
+ } else {
+ echo "<td class=\"list\" valign=\"middle\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus_mo.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"add\" /></td>\n";
+ }
+
+ /* Only show the button for offline dynamic leases */
+ if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
+ echo "<td class=\"list\" valign=\"middle\"><a href=\"status_dhcpv6_leases.php?deleteip={$data['ip']}&amp;all=" . htmlspecialchars($_GET['all']) . "\">";
+ echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\" alt=\"delete\" /></a></td>\n";
+ }
+ echo "</tr>\n";
+ }
+}
+?>
+</table>
+<br/>
+<h3>Delegated Prefixes</h3>
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="prefixes">
+ <tr>
+ <td class="listhdrr"><a href="#"><?=gettext("IPv6 Prefix"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("IAID"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("DUID"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
+ <td class="listhdrr"><a href="#"><?=gettext("State"); ?></a></td>
+ </tr>
+<?php
+foreach ($prefixes as $data) {
+ if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
+ if ($data['act'] != "active" && $data['act'] != "static") {
+ $fspans = "<span class=\"gray\">";
+ $fspane = "&nbsp;</span>";
+ } else {
+ $fspans = "";
+ $fspane = "&nbsp;";
+ }
+
+ if ($data['act'] == "static") {
+ foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
+ if (is_array($dhcpifconf['staticmap'])) {
+ foreach ($dhcpifconf['staticmap'] as $staticent) {
+ if ($data['ip'] == $staticent['ipaddr']) {
+ $data['if'] = $dhcpif;
+ break;
+ }
+ }
+ }
+ /* exit as soon as we have an interface */
+ if ($data['if'] != "") {
+ break;
+ }
+ }
+ } else {
+ $data['if'] = convert_real_interface_to_friendly_interface_name(guess_interface_from_ip($data['ip']));
+ }
+ echo "<tr>\n";
+ if ($mappings[$data['iaid'] . $data['duid']]) {
+ $dip = "<br />Routed To: {$mappings[$data['iaid'] . $data['duid']]}";
+ }
+ echo "<td class=\"listlr\">{$fspans}{$data['prefix']}{$dip}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['iaid']}{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}{$data['duid']}{$fspane}</td>\n";
+ if ($data['type'] != "static") {
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
+ } else {
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
+ }
+ echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
+ echo "</tr>\n";
+ }
+}
+?>
+</table>
+<br/>
+<form action="status_dhcpv6_leases.php" method="get">
+ <input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
+<?php if ($_GET['all']): ?>
+ <input type="hidden" name="all" value="0" />
+ <input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>" />
+<?php else: ?>
+ <input type="hidden" name="all" value="1" />
+ <input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>" />
+<?php endif; ?>
+</form>
+<?php if ($leases == 0): ?>
+<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
+<?php endif; ?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_filter_reload.php b/src/usr/local/www/status_filter_reload.php
new file mode 100644
index 0000000..8844a48
--- /dev/null
+++ b/src/usr/local/www/status_filter_reload.php
@@ -0,0 +1,179 @@
+<?php
+/* $Id$ */
+/*
+ status_filter_reload.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2006 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: filter
+*/
+
+##|+PRIV
+##|*IDENT=page-status-filterreloadstatus
+##|*NAME=Status: Filter Reload Status page
+##|*DESCR=Allow access to the 'Status: Filter Reload Status' page.
+##|*MATCH=status_filter_reload.php*
+##|-PRIV
+
+require_once("globals.inc");
+require_once("guiconfig.inc");
+require_once("functions.inc");
+
+$pgtitle = array(gettext("Status"), gettext("Filter Reload Status"));
+$shortcut_section = "firewall";
+
+if (file_exists("{$g['varrun_path']}/filter_reload_status")) {
+ $status = file_get_contents("{$g['varrun_path']}/filter_reload_status");
+}
+
+if ($_GET['getstatus']) {
+ echo "|{$status}|";
+ exit;
+}
+if ($_POST['reloadfilter']) {
+ send_event("filter reload");
+ header("Location: status_filter_reload.php");
+ exit;
+}
+if ($_POST['syncfilter']) {
+ send_event("filter sync");
+ header("Location: status_filter_reload.php");
+ exit;
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+<br />
+<form action="status_filter_reload.php" method="post" name="filter">
+ <input type="submit" value="Reload Filter" name="reloadfilter" id="reloadfilter" />
+<?php if ($config['hasync'] && $config['hasync']["synchronizetoip"] != ""): ?>
+ &nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="submit" value="Force Config Sync" name="syncfilter" id="syncfilter" />
+<?php endif; ?>
+</form>
+<br /><br /><br />
+<div id="status" style="padding:5px; border:1px dashed #990000; background-color: #ffffff; color: #000000;">
+ <?php echo $status; ?>
+</div>
+
+<div id="doneurl">
+</div>
+
+<br/>
+
+<div id="reloadinfo"><?=gettext("This page will automatically refresh every 3 seconds until the filter is done reloading"); ?>.</div>
+
+<script type="text/javascript">
+//<![CDATA[
+/* init update "thread */
+function update_status_thread() {
+ getURL('status_filter_reload.php?getstatus=true', update_data);
+}
+function update_data(obj) {
+ var result_text = obj.content;
+ var result_text_split = result_text.split("|");
+ result_text = result_text_split[1];
+ result_text = result_text.replace("\n", "");
+ result_text = result_text.replace("\r", "");
+ if (result_text) {
+ jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> ' + result_text + '...');
+ } else {
+ jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> Obtaining filter status...');
+ }
+ if (result_text == "Initializing") {
+ jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif" alt="loader" /> Initializing...');
+ } else if (result_text == "Done") {
+ jQuery('#status').effect('highlight');
+ jQuery('#status').html('Done. The filter rules have been reloaded.');
+ jQuery('#reloadinfo').css("visibility", "hidden");
+ jQuery('#doneurl').css("visibility", "visible");
+ jQuery('#doneurl').html("<p><a href='status_queues.php'>Queue Status<\/a><\/p>");
+ }
+ window.setTimeout('update_status_thread()', 2500);
+}
+//]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+/*
+ * getURL is a proprietary Adobe function, but it's simplicity has made it very
+ * popular. If getURL is undefined we spin our own by wrapping XMLHttpRequest.
+ */
+if (typeof getURL == 'undefined') {
+ getURL = function(url, callback) {
+ if (!url) {
+ throw 'No URL for getURL';
+ }
+
+ try {
+ if (typeof callback.operationComplete == 'function') {
+ callback = callback.operationComplete;
+ }
+ } catch (e) {}
+ if (typeof callback != 'function') {
+ throw 'No callback function for getURL';
+ }
+
+ var http_request = null;
+ if (typeof XMLHttpRequest != 'undefined') {
+ http_request = new XMLHttpRequest();
+ } else if (typeof ActiveXObject != 'undefined') {
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ } catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ } catch (e) {}
+ }
+ }
+ if (!http_request) {
+ throw 'Both getURL and XMLHttpRequest are undefined';
+ }
+
+ http_request.onreadystatechange = function() {
+ if (http_request.readyState == 4) {
+ callback( { success : true,
+ content : http_request.responseText,
+ contentType : http_request.getResponseHeader("Content-Type") } );
+ }
+ }
+ http_request.open('GET', url, true);
+ http_request.send(null);
+ }
+}
+window.setTimeout('update_status_thread()', 2500);
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/status_gateway_groups.php b/src/usr/local/www/status_gateway_groups.php
new file mode 100755
index 0000000..e9011c8
--- /dev/null
+++ b/src/usr/local/www/status_gateway_groups.php
@@ -0,0 +1,173 @@
+<?php
+/* $Id$ */
+/*
+ status_gateway_groups.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-gatewaygroups
+##|*NAME=Status: Gateway Groups page
+##|*DESCR=Allow access to the 'Status: Gateway Groups' page.
+##|*MATCH=status_gateway_groups.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (!is_array($config['gateways']['gateway_group'])) {
+ $config['gateways']['gateway_group'] = array();
+}
+
+$a_gateway_groups = &$config['gateways']['gateway_group'];
+$changedesc = gettext("Gateway Groups") . ": ";
+
+$gateways_status = return_gateways_status();
+
+$pgtitle = array(gettext("Status"), gettext("Gateway Groups"));
+$shortcut_section = "gateway-groups";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Gateways"), false, "status_gateways.php");
+ $tab_array[1] = array(gettext("Gateway Groups"), true, "status_gateway_groups.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Group Name"); ?></td>
+ <td width="50%" class="listhdrr"><?=gettext("Gateways"); ?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_gateway_groups as $gateway_group):
+?>
+ <tr>
+ <td class="listlr">
+<?php
+ echo $gateway_group['name'];
+?>
+ </td>
+ <td class="listr">
+ <table border='0'>
+<?php
+ /* process which priorities we have */
+ $priorities = array();
+ foreach ($gateway_group['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ $priorities[$itemsplit[1]] = true;
+ }
+ $priority_count = count($priorities);
+ ksort($priorities);
+
+ echo "<tr>";
+ foreach ($priorities as $number => $tier) {
+ echo "<td width='120'>" . sprintf(gettext("Tier %s"), $number) . "</td>";
+ }
+ echo "</tr>\n";
+
+ /* inverse gateway group to gateway priority */
+ $priority_arr = array();
+ foreach ($gateway_group['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ $priority_arr[$itemsplit[1]][] = $itemsplit[0];
+ }
+ ksort($priority_arr);
+ $p = 1;
+ foreach ($priority_arr as $number => $tier) {
+ /* for each priority process the gateways */
+ foreach ($tier as $member) {
+ /* we always have $priority_count fields */
+ echo "<tr>";
+ $c = 1;
+ while ($c <= $priority_count) {
+ $monitor = lookup_gateway_monitor_ip_by_name($member);
+ if ($p == $c) {
+ $status = $gateways_status[$monitor]['status'];
+ if (stristr($status, "down")) {
+ $online = gettext("Offline");
+ $bgcolor = "#F08080"; // lightcoral
+ } elseif (stristr($status, "loss")) {
+ $online = gettext("Warning, Packetloss");
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif (stristr($status, "delay")) {
+ $online = gettext("Warning, Latency");
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif ($status == "none") {
+ $online = gettext("Online");
+ $bgcolor = "#90EE90"; // lightgreen
+ } else {
+ $online = gettext("Gathering data");
+ $bgcolor = "#ADD8E6"; // lightblue
+ }
+ echo "<td bgcolor='$bgcolor'>&nbsp;". htmlspecialchars($member) .", $online&nbsp;</td>";
+ } else {
+ echo "<td>&nbsp;</td>";
+ }
+ $c++;
+ }
+ echo "</tr>\n";
+ }
+ $p++;
+ }
+?>
+ </table>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($gateway_group['descr']);?>&nbsp;
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_gateways.php b/src/usr/local/www/status_gateways.php
new file mode 100644
index 0000000..e6fcf9d
--- /dev/null
+++ b/src/usr/local/www/status_gateways.php
@@ -0,0 +1,169 @@
+<?php
+/* $Id$ */
+/*
+ status_gateways.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-gateways
+##|*NAME=Status: Gateways page
+##|*DESCR=Allow access to the 'Status: Gateways' page.
+##|*MATCH=status_gateways.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$a_gateways = return_gateways_array();
+$gateways_status = array();
+$gateways_status = return_gateways_status(true);
+
+$now = time();
+$year = date("Y");
+
+$pgtitle = array(gettext("Status"), gettext("Gateways"));
+$shortcut_section = "gateways";
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Gateways"), true, "status_gateways.php");
+ $tab_array[] = array(gettext("Gateway Groups"), false, "status_gateway_groups.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Gateway"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Monitor"); ?></td>
+ <td width="8%" class="listhdrr"><?=gettext("RTT"); ?></td>
+ <td width="7%" class="listhdrr"><?=gettext("Loss"); ?></td>
+ <td width="35%" class="listhdrr"><?=gettext("Status"); ?></td>
+ <td width="20%" class="listhdr"><?=gettext("Description"); ?></td>
+ </tr>
+<?php
+ foreach ($a_gateways as $gname => $gateway) {
+?>
+ <tr>
+ <td class="listlr">
+ <?=$gateway['name'];?>
+ </td>
+ <td class="listr" align="center" >
+ <?php echo lookup_gateway_ip_by_name($gname);?>
+ </td>
+ <td class="listr" align="center" >
+ <?php
+ if ($gateways_status[$gname]) {
+ echo $gateways_status[$gname]['monitorip'];
+ } else {
+ echo $gateway['monitorip'];
+ }
+ ?>
+ </td>
+ <td class="listr" align="center">
+ <?php
+ if ($gateways_status[$gname]) {
+ echo $gateways_status[$gname]['delay'];
+ } else {
+ echo gettext("Pending");
+ }
+ ?>
+ </td>
+ <td class="listr" align="center">
+ <?php
+ if ($gateways_status[$gname]) {
+ echo $gateways_status[$gname]['loss'];
+ } else {
+ echo gettext("Pending");
+ }
+ ?>
+ </td>
+ <td class="listr" >
+ <table border="0" cellpadding="0" cellspacing="2">
+ <?php
+ if ($gateways_status[$gname]) {
+ $status = $gateways_status[$gname];
+ if (stristr($status['status'], "force_down")) {
+ $online = gettext("Offline (forced)");
+ $bgcolor = "#F08080"; // lightcoral
+ } elseif (stristr($status['status'], "down")) {
+ $online = gettext("Offline");
+ $bgcolor = "#F08080"; // lightcoral
+ } elseif (stristr($status['status'], "loss")) {
+ $online = gettext("Warning, Packetloss").': '.$status['loss'];
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif (stristr($status['status'], "delay")) {
+ $online = gettext("Warning, Latency").': '.$status['delay'];
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif ($status['status'] == "none") {
+ $online = gettext("Online");
+ $bgcolor = "#90EE90"; // lightgreen
+ }
+ } else if (isset($gateway['monitor_disable'])) {
+ $online = gettext("Online");
+ $bgcolor = "#90EE90"; // lightgreen
+ } else {
+ $online = gettext("Pending");
+ $bgcolor = "#D3D3D3"; // lightgray
+ }
+ echo "<tr><td><table width='100%'><tr><td bgcolor=\"$bgcolor\">&nbsp;$online&nbsp;</td></tr><tr><td>";
+ $lastchange = $gateways_status[$gname]['lastcheck'];
+ if (!empty($lastchange)) {
+ echo gettext("Last check:") . '<br />' . $lastchange;
+ }
+ echo "</td></tr></table></td></tr>";
+ ?>
+ </table>
+ </td>
+ <td class="listbg"> <?=$gateway['descr']; ?></td>
+ </tr>
+<?php
+ } // foreach gateway
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_graph.php b/src/usr/local/www/status_graph.php
new file mode 100644
index 0000000..056c297
--- /dev/null
+++ b/src/usr/local/www/status_graph.php
@@ -0,0 +1,352 @@
+<?php
+/* $Id$ */
+/*
+ status_graph.php
+ Part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-trafficgraph
+##|*NAME=Status: Traffic Graph page
+##|*DESCR=Allow access to the 'Status: Traffic Graph' page.
+##|*MATCH=status_graph.php*
+##|*MATCH=bandwidth_by_ip.php*
+##|*MATCH=graph.php*
+##|*MATCH=ifstats.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if ($_POST['width']) {
+ $width = $_POST['width'];
+} else {
+ $width = "100%";
+}
+
+if ($_POST['height']) {
+ $height = $_POST['height'];
+} else {
+ $height = "200";
+}
+
+// Get configured interface list
+$ifdescrs = get_configured_interface_with_descr();
+if (isset($config['ipsec']['enable'])) {
+ $ifdescrs['enc0'] = "IPsec";
+}
+foreach (array('server', 'client') as $mode) {
+ if (is_array($config['openvpn']["openvpn-{$mode}"])) {
+ foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
+ if (!isset($setting['disable'])) {
+ $ifdescrs['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
+ }
+ }
+ }
+}
+
+if ($_GET['if']) {
+ $curif = $_GET['if'];
+ $found = false;
+ foreach ($ifdescrs as $descr => $ifdescr) {
+ if ($descr == $curif) {
+ $found = true;
+ break;
+ }
+ }
+ if ($found === false) {
+ header("Location: status_graph.php");
+ exit;
+ }
+} else {
+ if (empty($ifdescrs["wan"])) {
+ /* Handle the case when WAN has been disabled. Use the first key in ifdescrs. */
+ reset($ifdescrs);
+ $curif = key($ifdescrs);
+ } else {
+ $curif = "wan";
+ }
+}
+if ($_GET['sort']) {
+ $cursort = $_GET['sort'];
+} else {
+ $cursort = "";
+}
+if ($_GET['filter']) {
+ $curfilter = $_GET['filter'];
+} else {
+ $curfilter = "";
+}
+if ($_GET['hostipformat']) {
+ $curhostipformat = $_GET['hostipformat'];
+} else {
+ $curhostipformat = "";
+}
+
+$pgtitle = array(gettext("Status"), gettext("Traffic Graph"));
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+function updateBandwidth() {
+ var hostinterface = jQuery("#if").val();
+ var sorting = jQuery("#sort").val();
+ var filter = jQuery("#filter").val();
+ var hostipformat = jQuery("#hostipformat").val();
+ bandwidthAjax(hostinterface, sorting, filter, hostipformat);
+}
+
+function bandwidthAjax(hostinterface, sorting, filter, hostipformat) {
+ uri = "bandwidth_by_ip.php?if=" + hostinterface + "&sort=" + sorting + "&filter=" + filter + "&hostipformat=" + hostipformat;
+ var opt = {
+ // Use GET
+ type: 'get',
+ error: function(req) {
+ /* XXX: Leave this for debugging purposes: Handle 404
+ if (req.status == 404)
+ alert('Error 404: location "' + uri + '" was not found.');
+ */
+ /* Handle other errors
+ else
+ alert('Error ' + req.status + ' -- ' + req.statusText + ' -- ' + uri);
+ */
+ },
+ success: function(data) {
+ updateBandwidthHosts(data);
+ }
+ }
+ jQuery.ajax(uri, opt);
+}
+
+function updateBandwidthHosts(data) {
+ var hosts_split = data.split("|");
+ d = document;
+ //parse top ten bandwidth abuser hosts
+ for (var y = 0; y < 10; y++) {
+ if ((y < hosts_split.length) && (hosts_split[y] != "") && (hosts_split[y] != "no info")) {
+ hostinfo = hosts_split[y].split(";");
+
+ //update host ip info
+ var HostIpID = "hostip" + y;
+ var hostip = d.getElementById(HostIpID);
+ hostip.innerHTML = hostinfo[0];
+
+ //update bandwidth inbound to host
+ var hostbandwidthInID = "bandwidthin" + y;
+ var hostbandwidthin = d.getElementById(hostbandwidthInID);
+ hostbandwidthin.innerHTML = hostinfo[1] + " Bits/sec";
+
+ //update bandwidth outbound from host
+ var hostbandwidthOutID = "bandwidthout" + y;
+ var hostbandwidthOut = d.getElementById(hostbandwidthOutID);
+ hostbandwidthOut.innerHTML = hostinfo[2] + " Bits/sec";
+
+ //make the row appear if hidden
+ var rowid = "#host" + y;
+ if (jQuery(rowid).css('display') == "none") {
+ //hide rows that contain no data
+ jQuery(rowid).show(1000);
+ }
+ } else {
+ var rowid = "#host" + y;
+ if (jQuery(rowid).css('display') != "none") {
+ //hide rows that contain no data
+ jQuery(rowid).fadeOut(2000);
+ }
+ }
+ }
+
+ setTimeout('updateBandwidth()', 1000);
+}
+//]]>
+</script>
+
+<?php
+
+/* link the ipsec interface magically */
+if (isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable'])) {
+ $ifdescrs['enc0'] = "IPsec";
+}
+
+?>
+<form name="form1" action="status_graph.php" method="get" style="padding-bottom: 10px; margin-bottom: 14px; border-bottom: 1px solid #999999">
+<?=gettext("Interface"); ?>:
+ <select id="if" name="if" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+<?php
+ foreach ($ifdescrs as $ifn => $ifd) {
+ echo "<option value=\"$ifn\"";
+ if ($ifn == $curif) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($ifd) . "</option>\n";
+ }
+?>
+ </select>
+, Sort by:
+ <select id="sort" name="sort" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <option value="">Bw In</option>
+ <option value="out"<?php if ($cursort == "out") echo " selected=\"selected\"";?>>Bw Out</option>
+ </select>
+, Filter:
+ <select id="filter" name="filter" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <option value="local"<?php if ($curfilter == "local") echo " selected=\"selected\"";?>>Local</option>
+ <option value="remote"<?php if ($curfilter == "remote") echo " selected=\"selected\"";?>>Remote</option>
+ <option value="all"<?php if ($curfilter == "all") echo " selected=\"selected\"";?>>All</option>
+ </select>
+, Display:
+ <select id="hostipformat" name="hostipformat" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <option value="">IP Address</option>
+ <option value="hostname"<?php if ($curhostipformat == "hostname") echo " selected";?>>Host Name</option>
+ <option value="descr"<?php if ($curhostipformat == "descr") echo " selected=\"selected\"";?>>Description</option>
+ <option value="fqdn"<?php if ($curhostipformat == "fqdn") echo " selected=\"selected\"";?>>FQDN</option>
+ </select>
+</form>
+<p>&nbsp;</p>
+<div id="niftyOutter">
+ <div id="col1" style="float: left; width: 46%; padding: 5px; position: relative;">
+ <object data="graph.php?ifnum=<?=htmlspecialchars($curif);?>&amp;ifname=<?=rawurlencode($ifdescrs[htmlspecialchars($curif)]);?>">
+ <param name="id" value="graph" />
+ <param name="type" value="image/svg+xml" />
+ <param name="width" value="<? echo $width; ?>" />
+ <param name="height" value="<? echo $height; ?>" />
+ <param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />
+ </object>
+ </div>
+ <div id="col2" style="float: right; width: 48%; padding: 5px; position: relative;">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="status">
+ <tr>
+ <td class="listtopic" valign="top"><?=(($curhostipformat == "") ? gettext("Host IP") : gettext("Host Name or IP")); ?></td>
+ <td class="listtopic" valign="top"><?=gettext("Bandwidth In"); ?></td>
+ <td class="listtopic" valign="top"><?=gettext("Bandwidth Out"); ?></td>
+ </tr>
+ <tr id="host0" style="display:none">
+ <td id="hostip0" class="vncell">
+ </td>
+ <td id="bandwidthin0" class="listr">
+ </td>
+ <td id="bandwidthout0" class="listr">
+ </td>
+ </tr>
+ <tr id="host1" style="display:none">
+ <td id="hostip1" class="vncell">
+ </td>
+ <td id="bandwidthin1" class="listr">
+ </td>
+ <td id="bandwidthout1" class="listr">
+ </td>
+ </tr>
+ <tr id="host2" style="display:none">
+ <td id="hostip2" class="vncell">
+ </td>
+ <td id="bandwidthin2" class="listr">
+ </td>
+ <td id="bandwidthout2" class="listr">
+ </td>
+ </tr>
+ <tr id="host3" style="display:none">
+ <td id="hostip3" class="vncell">
+ </td>
+ <td id="bandwidthin3" class="listr">
+ </td>
+ <td id="bandwidthout3" class="listr">
+ </td>
+ </tr>
+ <tr id="host4" style="display:none">
+ <td id="hostip4" class="vncell">
+ </td>
+ <td id="bandwidthin4" class="listr">
+ </td>
+ <td id="bandwidthout4" class="listr">
+ </td>
+ </tr>
+ <tr id="host5" style="display:none">
+ <td id="hostip5" class="vncell">
+ </td>
+ <td id="bandwidthin5" class="listr">
+ </td>
+ <td id="bandwidthout5" class="listr">
+ </td>
+ </tr>
+ <tr id="host6" style="display:none">
+ <td id="hostip6" class="vncell">
+ </td>
+ <td id="bandwidthin6" class="listr">
+ </td>
+ <td id="bandwidthout6" class="listr">
+ </td>
+ </tr>
+ <tr id="host7" style="display:none">
+ <td id="hostip7" class="vncell">
+ </td>
+ <td id="bandwidthin7" class="listr">
+ </td>
+ <td id="bandwidthout7" class="listr">
+ </td>
+ </tr>
+ <tr id="host8" style="display:none">
+ <td id="hostip8" class="vncell">
+ </td>
+ <td id="bandwidthin8" class="listr">
+ </td>
+ <td id="bandwidthout8" class="listr">
+ </td>
+ </tr>
+ <tr id="host9" style="display:none">
+ <td id="hostip9" class="vncell">
+ </td>
+ <td id="bandwidthin9" class="listr">
+ </td>
+ <td id="bandwidthout9" class="listr">
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div style="clear: both;"></div>
+</div>
+<p><span class="red"><strong><?=gettext("Note"); ?>:</strong></span> <?=gettext("the"); ?> <a href="http://www.adobe.com/svg/viewer/install/" target="_blank"><?=gettext("Adobe SVG Viewer"); ?></a>, <?=gettext("Firefox 1.5 or later or other browser supporting SVG is required to view the graph"); ?>.</p>
+
+<?php include("fend.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+jQuery(document).ready(updateBandwidth);
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/status_graph_cpu.php b/src/usr/local/www/status_graph_cpu.php
new file mode 100644
index 0000000..6712508
--- /dev/null
+++ b/src/usr/local/www/status_graph_cpu.php
@@ -0,0 +1,55 @@
+<?php
+/*
+ $Id$
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-status-cpuload
+##|*NAME=Status: CPU load page
+##|*DESCR=Allow access to the 'Status: CPU load' page.
+##|*MATCH=status_graph_cpu.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Status"), gettext("CPU load"));
+require("guiconfig.inc");
+include("head.inc");
+include("fbegin.inc");
+
+$pgtitle = gettext("Status: CPU Graph");
+
+?>
+<div align="center">
+ <embed src="graph_cpu.php" type="image/svg+xml"
+ width="550" height="275" pluginspage="http://www.adobe.com/svg/viewer/install/auto" />
+</div>
+<br /><span class="red"><strong><?=gettext("Note"); ?>:</strong></span> <?=gettext("if you can't see the graph, you may have to install the"); ?> <a href="http://www.adobe.com/svg/viewer/install/" target="_blank"><?=gettext("Adobe SVG viewer"); ?></a>.
+<?php include("fend.inc"); ?>
diff --git a/src/usr/local/www/status_interfaces.php b/src/usr/local/www/status_interfaces.php
new file mode 100644
index 0000000..67ab96f
--- /dev/null
+++ b/src/usr/local/www/status_interfaces.php
@@ -0,0 +1,607 @@
+<?php
+/* $Id$ */
+/*
+ status_interfaces.php
+ part of pfSense
+ Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-status-interfaces
+##|*NAME=Status: Interfaces page
+##|*DESCR=Allow access to the 'Status: Interfaces' page.
+##|*MATCH=status_interfaces.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("shaper.inc");
+require_once("filter.inc");
+
+if ($_POST['if'] && $_POST['submit']) {
+ $interface = $_POST['if'];
+ if ($_POST['status'] == "up") {
+ interface_bring_down($interface);
+ } else {
+ interface_configure($interface);
+ }
+ header("Location: status_interfaces.php");
+ exit;
+}
+
+$pgtitle = array(gettext("Status"), gettext("Interfaces"));
+$shortcut_section = "interfaces";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="status interfaces">
+<?php
+ $i = 0;
+ $ifdescrs = get_configured_interface_with_descr(false, true);
+ foreach ($ifdescrs as $ifdescr => $ifname):
+ $ifinfo = get_interface_info($ifdescr);
+ // Load MAC-Manufacturer table
+ $mac_man = load_mac_manufacturer_table();
+?>
+<?php
+ if ($i):
+?>
+ <tr>
+ <td colspan="8" class="list" height="12"></td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td colspan="2" class="listtopic">
+ <?=htmlspecialchars($ifname);?> <?=gettext("interface"); ?> (<?=htmlspecialchars($ifdescr);?>, <?=htmlspecialchars($ifinfo['hwif']);?>)
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Status"); ?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['status']);?>
+ </td>
+ </tr>
+<?php
+ if ($ifinfo['dhcplink']):
+?>
+ <tr>
+ <td width="22%" class="vncellt">
+ DHCP
+ </td>
+ <td width="78%" class="listr">
+ <form name="dhcplink_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['dhcplink']; ?>" />
+ <?=htmlspecialchars($ifinfo['dhcplink']);?>&nbsp;&nbsp;
+ <?php $action = ($ifinfo['dhcplink'] == "up" ? gettext("Release") : gettext("Renew")); ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['dhcp6link']):
+?>
+ <tr>
+ <td width="22%" class="vncellt">
+ DHCP6
+ </td>
+ <td width="78%" class="listr">
+ <form name="dhcp6link_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['dhcp6link']; ?>" />
+ <?=htmlspecialchars($ifinfo['dhcp6link']);?>&nbsp;&nbsp;
+ <?php $action = ($ifinfo['dhcp6link'] == "up" ? gettext("Release") : gettext("Renew")); ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['pppoelink']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("PPPoE"); ?></td>
+ <td width="78%" class="listr">
+ <form name="pppoelink_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['pppoelink']; ?>" />
+ <?=htmlspecialchars($ifinfo['pppoelink']);?>&nbsp;&nbsp;
+ <?php $action = ($ifinfo['pppoelink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['pptplink']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("PPTP"); ?></td>
+ <td width="78%" class="listr">
+ <form name="pptplink_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['pptplink']; ?>" />
+ <?=htmlspecialchars($ifinfo['pptplink']);?>&nbsp;&nbsp;
+ <?php $action = ($ifinfo['pptplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['l2tplink']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("L2TP"); ?></td>
+ <td width="78%" class="listr">
+ <form name="l2tplink_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['l2tplink']; ?>" />
+ <?=htmlspecialchars($ifinfo['l2tplink']);?>&nbsp;&nbsp;
+ <?php $action = ($ifinfo['l2tplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo $action; ?>" />
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['ppplink']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("PPP"); ?></td>
+ <td width="78%" class="listr">
+ <form name="ppplink_form" action="status_interfaces.php" method="post">
+ <input type="hidden" name="if" value="<?php echo $ifdescr; ?>" />
+ <input type="hidden" name="status" value="<?php echo $ifinfo['ppplink']; ?>" />
+ <?=htmlspecialchars($ifinfo['ppplink']);?>
+ <?php if ($ifinfo['ppplink'] == "up"): ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo gettext("Disconnect"); ?>" />
+ <?php else: ?>
+ <?php if (!$ifinfo['nodevice']): ?>
+ <input type="submit" name="submit" class="formbtn" value="<?php echo gettext("Connect"); ?>" />
+ <?php endif; ?>
+ <?php endif; ?>
+ </form>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['ppp_uptime'] || $ifinfo['ppp_uptime_accumulated']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Uptime ");?><?php if ($ifinfo['ppp_uptime_accumulated']) echo "(historical)"; ?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['ppp_uptime']);?> <?=htmlspecialchars($ifinfo['ppp_uptime_accumulated']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_rssi']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Signal (RSSI)");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_rssi']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_mode']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Mode");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_mode']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_simstate']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell SIM State");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_simstate']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_service']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Service");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_service']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_bwupstream']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Upstream");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_bwupstream']);?> kbit/s
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_bwdownstream']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Downstream");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_bwdownstream']);?> kbit/s
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_upstream']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Current Up");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_upstream']);?> kbit/s
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['cell_downstream']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Cell Current Down");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['cell_downstream']);?> kbit/s
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['macaddr']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("MAC address");?></td>
+ <td width="78%" class="listr">
+ <?php
+ $mac=$ifinfo['macaddr'];
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ if (isset($mac_man[$mac_hi])) {
+ print "<span>" . $mac . " - " . htmlspecialchars($mac_man[$mac_hi]); print "</span>";
+ } else {
+ print htmlspecialchars($mac);
+ }
+ ?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['status'] != "down"):
+?>
+<?php
+ if ($ifinfo['dhcplink'] != "down" && $ifinfo['pppoelink'] != "down" && $ifinfo['pptplink'] != "down"):
+ if ($ifinfo['ipaddr']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("IPv4 address");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['ipaddr']);?>
+ &nbsp;
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['subnet']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Subnet mask IPv4");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['subnet']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['gateway']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Gateway IPv4");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($config['interfaces'][$ifdescr]['gateway']);?>
+ <?=htmlspecialchars($ifinfo['gateway']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['linklocal']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("IPv6 Link Local");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['linklocal']);?>
+ &nbsp;
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['ipaddrv6']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("IPv6 address");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['ipaddrv6']);?>
+ &nbsp;
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['subnetv6']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Subnet mask IPv6");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['subnetv6']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['gatewayv6']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Gateway IPv6");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($config['interfaces'][$ifdescr]['gatewayv6']);?>
+ <?=htmlspecialchars($ifinfo['gatewayv6']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifdescr == "wan" && file_exists("{$g['varetc_path']}/resolv.conf")):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("ISP DNS servers");?></td>
+ <td width="78%" class="listr">
+ <?php
+ $dns_servers = get_dns_servers();
+ foreach ($dns_servers as $dns) {
+ echo "{$dns}<br />";
+ }
+ ?>
+ </td>
+ </tr>
+<?php
+ endif;
+ endif;
+ if ($ifinfo['mtu']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("MTU");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['mtu']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['media']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Media");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['media']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['laggproto']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("LAGG Protocol");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['laggproto']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if (is_array($ifinfo['laggport'])):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("LAGG Ports");?></td>
+ <td width="78%" class="listr">
+ <?php
+ foreach ($ifinfo['laggport'] as $laggport) {
+ echo htmlspecialchars($laggport);
+ ?>
+ <br />
+ <?php
+ }
+ ?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['channel']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Channel");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['channel']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['ssid']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("SSID");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['ssid']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['bssid']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("BSSID");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['bssid']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['rate']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Rate");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['rate']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($ifinfo['rssi']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("RSSI");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['rssi']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("In/out packets");?></td>
+ <td width="78%" class="listr">
+ <?php
+ echo htmlspecialchars($ifinfo['inpkts'] . "/" . $ifinfo['outpkts'] . " (");
+ echo htmlspecialchars(format_bytes($ifinfo['inbytes']) . "/" . format_bytes($ifinfo['outbytes']) . ")");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("In/out packets (pass)");?></td>
+ <td width="78%" class="listr">
+ <?php
+ echo htmlspecialchars($ifinfo['inpktspass'] . "/" . $ifinfo['outpktspass'] . " (");
+ echo htmlspecialchars(format_bytes($ifinfo['inbytespass']) . "/" . format_bytes($ifinfo['outbytespass']) . ")");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("In/out packets (block)");?></td>
+ <td width="78%" class="listr">
+ <?php
+ echo htmlspecialchars($ifinfo['inpktsblock'] . "/" . $ifinfo['outpktsblock'] . " (");
+ echo htmlspecialchars(format_bytes($ifinfo['inbytesblock']) . "/" . format_bytes($ifinfo['outbytesblock']) . ")");
+ ?>
+ </td>
+ </tr>
+<?php
+ if (isset($ifinfo['inerrs'])):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("In/out errors");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['inerrs'] . "/" . $ifinfo['outerrs']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if (isset($ifinfo['collisions'])):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Collisions");?></td>
+ <td width="78%" class="listr">
+ <?=htmlspecialchars($ifinfo['collisions']);?>
+ </td>
+ </tr>
+<?php
+ endif;
+ endif;
+?>
+<?php
+ if ($ifinfo['bridge']):
+?>
+ <tr>
+ <td width="22%" class="vncellt"><?php printf(gettext("Bridge (%s)"), $ifinfo['bridgeint']);?></td>
+ <td width="78%" class="listr">
+ <?=$ifinfo['bridge'];?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if (file_exists("/usr/bin/vmstat")):
+ $real_interface = "";
+ $interrupt_total = "";
+ $interrupt_sec = "";
+ $real_interface = $ifinfo['hwif'];
+ $interrupt_total = `vmstat -i | grep $real_interface | awk '{ print $3 }'`;
+ $interrupt_sec = `vmstat -i | grep $real_interface | awk '{ print $4 }'`;
+ if (strstr($interrupt_total, "hci")) {
+ $interrupt_total = `vmstat -i | grep $real_interface | awk '{ print $4 }'`;
+ $interrupt_sec = `vmstat -i | grep $real_interface | awk '{ print $5 }'`;
+ }
+ unset($interrupt_total); // XXX: FIX ME! Need a regex and parse correct data 100% of the time.
+ if ($interrupt_total): ?>
+ <tr>
+ <td width="22%" class="vncellt"><?=gettext("Interrupts/Second");?></td>
+ <td width="78%" class="listr">
+ <?php
+ echo $interrupt_total . " " . gettext("total");
+ echo "<br />";
+ echo $interrupt_sec . " " . gettext("rate");
+ ?>
+ </td>
+ </tr>
+<?php
+ endif;
+ endif;
+ $i++;
+ endforeach;
+?>
+</table>
+
+<br />
+
+<?php printf(gettext("Using dial-on-demand will bring the connection up again if any packet ".
+"triggers it. To substantiate this point: disconnecting manually ".
+"will %snot%s prevent dial-on-demand from making connections ".
+"to the outside! Don't use dial-on-demand if you want to make sure that the line ".
+"is kept disconnected."), '<strong>', '</strong>')?>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_lb_pool.php b/src/usr/local/www/status_lb_pool.php
new file mode 100644
index 0000000..984ab9e
--- /dev/null
+++ b/src/usr/local/www/status_lb_pool.php
@@ -0,0 +1,231 @@
+<?php
+/* $Id$ */
+/*
+ status_lb_pool.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-loadbalancer-pool
+##|*NAME=Status: Load Balancer: Pool page
+##|*DESCR=Allow access to the 'Status: Load Balancer: Pool' page.
+##|*MATCH=status_lb_pool.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("vslb.inc");
+
+if (!is_array($config['load_balancer']['lbpool'])) {
+ $config['load_balancer']['lbpool'] = array();
+}
+$a_pool = &$config['load_balancer']['lbpool'];
+
+$lb_logfile = "{$g['varlog_path']}/relayd.log";
+
+$now = time();
+$year = date("Y");
+
+$pgtitle = array(gettext("Status"), gettext("Load Balancer"), gettext("Pool"));
+$shortcut_section = "relayd";
+include("head.inc");
+
+$relay_hosts = get_lb_summary();
+
+if ($_POST) {
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval |= filter_configure();
+ $retval |= relayd_configure();
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('loadbalancer');
+ } else {
+ /* Keep a list of servers we find in POST variables */
+ $newservers = array();
+ foreach ($_POST as $name => $value) {
+ /* Look through the POST vars to find the pool data */
+ if (strpos($name, '|') !== false) {
+ list($poolname, $ip) = explode("|", $name);
+ $ip = str_replace('_', '.', $ip);
+ $newservers[$poolname][] = $ip;
+ } elseif (is_ipaddr($value)) {
+ $newservers[$name][] = $value;
+ }
+ }
+ foreach ($a_pool as & $pool) {
+ if (is_array($pool['servers']) && is_array($pool['serversdisabled'])) {
+ $oldservers = array_merge($pool['servers'], $pool['serversdisabled']);
+ } elseif (is_array($pool['servers'])) {
+ $oldservers = $pool['servers'];
+ } elseif (is_array($pool['serversdisabled'])) {
+ $oldservers = $pool['serversdisabled'];
+ } else {
+ $oldservers = array();
+ }
+ if (is_array($newservers[$pool['name']])) {
+ $pool['servers'] = $newservers[$pool['name']];
+ $pool['serversdisabled'] = array_diff($oldservers, $newservers[$pool['name']]);
+ }
+ }
+ mark_subsystem_dirty('loadbalancer');
+ write_config("Updated load balancer pools via status screen.");
+ }
+}
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="status_lb_pool.php" method="post">
+<?php if (is_subsystem_dirty('loadbalancer')): ?><br/>
+<?php print_info_box_np(sprintf(gettext("The load balancer configuration has been changed%sYou must apply the changes in order for them to take effect."), "<br />"));?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status load balancer pools">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), true, "status_lb_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), false, "status_lb_vs.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont sortable" id="sortabletable" summary="main area">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Mode");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Servers");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Monitor");?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description");?></td>
+ </tr>
+<?php
+ foreach ($a_pool as & $pool):
+?>
+ <tr>
+ <td class="listlr">
+ <?=$pool['name'];?>
+ </td>
+ <td class="listr" align="center" >
+<?php
+ switch ($pool['mode']) {
+ case "loadbalance":
+ echo "Load balancing";
+ break;
+ case "failover":
+ echo "Manual failover";
+ break;
+ default:
+ echo "(default)";
+ }
+?>
+ </td>
+ <td class="listr" align="center">
+ <table border="0" cellpadding="2" cellspacing="0" summary="status">
+<?php
+ $pool_hosts = array();
+ foreach ((array) $pool['servers'] as $server) {
+ $svr['ip']['addr'] = $server;
+ $svr['ip']['state'] = $relay_hosts[$pool['name'] . ":" . $pool['port']][$server]['state'];
+ $svr['ip']['avail'] = $relay_hosts[$pool['name'] . ":" . $pool['port']][$server]['avail'];
+ $pool_hosts[]=$svr;
+ }
+ foreach ((array) $pool['serversdisabled'] as $server) {
+ $svr['ip']['addr'] = "$server";
+ $svr['ip']['state'] = 'disabled';
+ $svr['ip']['avail'] = 'disabled';
+ $pool_hosts[]=$svr;
+ }
+ asort($pool_hosts);
+
+ foreach ((array) $pool_hosts as $server) {
+ if ($server['ip']['addr'] != "") {
+ switch ($server['ip']['state']) {
+ case 'up':
+ $bgcolor = "#90EE90"; // lightgreen
+ $checked = "checked=\"checked\"";
+ break;
+ case 'disabled':
+ $bgcolor = "white";
+ $checked = "";
+ break;
+ default:
+ $bgcolor = "#F08080"; // lightcoral
+ $checked = "checked=\"checked\"";
+ }
+ echo "<tr>";
+ switch ($pool['mode']) {
+ case 'loadbalance':
+ echo "<td><input type=\"checkbox\" name=\"{$pool['name']}|" . str_replace('.', '_', $server['ip']['addr']) . "\" {$checked} /></td>\n";
+ break;
+ case 'failover':
+ echo "<td><input type=\"radio\" name=\"{$pool['name']}\" value=\"{$server['ip']['addr']}\" {$checked} /></td>\n";
+ break;
+ }
+ echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']}&nbsp;</td><td bgcolor=\"{$bgcolor}\">&nbsp;";
+# echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']} ";
+ if ($server['ip']['avail']) {
+ echo " ({$server['ip']['avail']}) ";
+ }
+ echo "&nbsp;</td></tr>";
+ }
+ }
+?>
+ </table>
+ </td>
+ <td class="listr" >
+ <?php echo $pool['monitor']; ?>
+ </td>
+ <td class="listbg" >
+ <?=$pool['descr'];?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ <tr>
+ <td colspan="5">
+ <input name="Submit" type="submit" class="formbtn" value="<?= gettext("Save"); ?>" />
+ <input name="Reset" type="reset" class="formbtn" value="<?= gettext("Reset"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_lb_vs.php b/src/usr/local/www/status_lb_vs.php
new file mode 100644
index 0000000..0d0bd60
--- /dev/null
+++ b/src/usr/local/www/status_lb_vs.php
@@ -0,0 +1,158 @@
+<?php
+/* $Id$ */
+/*
+ status_lb_vs.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/sbin/relayctl
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-status-loadbalancer-virtualserver
+##|*NAME=Status: Load Balancer: Virtual Server page
+##|*DESCR=Allow access to the 'Status: Load Balancer: Virtual Server' page.
+##|*MATCH=status_lb_vs.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("vslb.inc");
+
+if (!is_array($config['load_balancer']['lbpool'])) {
+ $config['load_balancer']['lbpool'] = array();
+}
+if (!is_array($config['load_balancer']['virtual_server'])) {
+ $config['load_balancer']['virtual_server'] = array();
+}
+$a_vs = &$config['load_balancer']['virtual_server'];
+$a_pool = &$config['load_balancer']['lbpool'];
+$rdr_a = get_lb_redirects();
+
+$pgtitle = array(gettext("Status"), gettext("Load Balancer"), gettext("Virtual Server"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status load balancer virtual servers">
+ <tr><td class="tabnavtbl">
+ <?php
+ /* active tabs */
+ $tab_array = array();
+ $tab_array[] = array(gettext("Pools"), false, "status_lb_pool.php");
+ $tab_array[] = array(gettext("Virtual Servers"), true, "status_lb_vs.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Address"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Servers"); ?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Status"); ?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description"); ?></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_vs as $vsent):
+?>
+ <tr>
+ <td class="listlr">
+ <?=$vsent['name'];?>
+ </td>
+ <td class="listr" align="center" >
+ <?=$vsent['ipaddr']." : ".$vsent['port'];?>
+ <br />
+ </td>
+ <td class="listr" align="center" >
+ <table border="0" cellpadding="0" cellspacing="2" summary="servers">
+<?php
+ foreach ($a_pool as $vipent) {
+ if ($vipent['name'] == $vsent['poolname']) {
+ foreach ((array) $vipent['servers'] as $server) {
+ print "<tr><td> {$server} </td></tr>";
+ }
+ }
+ }
+ ?>
+ </table>
+ </td>
+<?php
+ switch (trim($rdr_a[$vsent['name']]['status'])) {
+ case 'active':
+ $bgcolor = "#90EE90"; // lightgreen
+ $rdr_a[$vsent['name']]['status'] = "Active";
+ break;
+ case 'down':
+ $bgcolor = "#F08080"; // lightcoral
+ $rdr_a[$vsent['name']]['status'] = "Down";
+ break;
+ default:
+ $bgcolor = "#D3D3D3"; // lightgray
+ $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?';
+ }
+?>
+ <td class="listr nowrap">
+ <table border="0" cellpadding="3" cellspacing="2" summary="status">
+ <tr>
+ <td bgcolor="<?=$bgcolor?>"><?=$rdr_a[$vsent['name']]['status']?> </td>
+ </tr>
+ </table>
+<?php
+ if (!empty($rdr_a[$vsent['name']]['total'])) {
+ echo "Total Sessions: {$rdr_a[$vsent['name']]['total']}\n";
+ }
+ if (!empty($rdr_a[$vsent['name']]['last'])) {
+ echo "<br />Last: {$rdr_a[$vsent['name']]['last']}\n";
+ }
+ if (!empty($rdr_a[$vsent['name']]['average'])) {
+ echo "<br />Average: {$rdr_a[$vsent['name']]['average']}\n";
+ }
+?>
+ </td>
+ <td class="listbg" >
+ <?=$vsent['descr'];?>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_ntpd.php b/src/usr/local/www/status_ntpd.php
new file mode 100644
index 0000000..329764b
--- /dev/null
+++ b/src/usr/local/www/status_ntpd.php
@@ -0,0 +1,320 @@
+<?php
+/* $Id$ */
+/*
+ status_ntpd.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2013 Dagorlad
+ Copyright (C) 2012 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/sbin/ntpd /usr/local/sbin/ntpq
+ pfSense_MODULE: ntpd
+*/
+
+##|+PRIV
+##|*IDENT=page-status-ntp
+##|*NAME=Status: NTP page
+##|*DESCR=Allow access to the 'Status: NTP' page.
+##|*MATCH=status_ntpd.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+if (!isset($config['ntpd']['noquery'])) {
+ if (isset($config['system']['ipv6allow'])) {
+ $inet_version = "";
+ } else {
+ $inet_version = " -4";
+ }
+
+ exec("/usr/local/sbin/ntpq -pn $inet_version | /usr/bin/tail +3", $ntpq_output);
+
+ $ntpq_servers = array();
+ foreach ($ntpq_output as $line) {
+ $server = array();
+
+ switch (substr($line, 0, 1)) {
+ case " ":
+ $server['status'] = "Unreach/Pending";
+ break;
+ case "*":
+ $server['status'] = "Active Peer";
+ break;
+ case "+":
+ $server['status'] = "Candidate";
+ break;
+ case "o":
+ $server['status'] = "PPS Peer";
+ break;
+ case "#":
+ $server['status'] = "Selected";
+ break;
+ case ".":
+ $server['status'] = "Excess Peer";
+ break;
+ case "x":
+ $server['status'] = "False Ticker";
+ break;
+ case "-":
+ $server['status'] = "Outlier";
+ break;
+ }
+
+ $line = substr($line, 1);
+ $peerinfo = preg_split("/[\s\t]+/", $line);
+
+ $server['server'] = $peerinfo[0];
+ $server['refid'] = $peerinfo[1];
+ $server['stratum'] = $peerinfo[2];
+ $server['type'] = $peerinfo[3];
+ $server['when'] = $peerinfo[4];
+ $server['poll'] = $peerinfo[5];
+ $server['reach'] = $peerinfo[6];
+ $server['delay'] = $peerinfo[7];
+ $server['offset'] = $peerinfo[8];
+ $server['jitter'] = $peerinfo[9];
+
+ $ntpq_servers[] = $server;
+ }
+
+ exec("/usr/local/sbin/ntpq -c clockvar $inet_version", $ntpq_clockvar_output);
+ foreach ($ntpq_clockvar_output as $line) {
+ if (substr($line, 0, 9) == "timecode=") {
+ $tmp = explode('"', $line);
+ $tmp = $tmp[1];
+ if (substr($tmp, 0, 6) == '$GPRMC') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = ($gps_vars[2] == "A");
+ $gps_lat_deg = substr($gps_vars[3], 0, 2);
+ $gps_lat_min = substr($gps_vars[3], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[5], 0, 3);
+ $gps_lon_min = substr($gps_vars[5], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[4] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[6] == "E") ? 1 : -1);
+ } elseif (substr($tmp, 0, 6) == '$GPGGA') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = $gps_vars[6];
+ $gps_lat_deg = substr($gps_vars[2], 0, 2);
+ $gps_lat_min = substr($gps_vars[2], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[4], 0, 3);
+ $gps_lon_min = substr($gps_vars[4], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[3] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[5] == "E") ? 1 : -1);
+ $gps_alt = $gps_vars[9];
+ $gps_alt_unit = $gps_vars[10];
+ $gps_sat = $gps_vars[7];
+ } elseif (substr($tmp, 0, 6) == '$GPGLL') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = ($gps_vars[6] == "A");
+ $gps_lat_deg = substr($gps_vars[1], 0, 2);
+ $gps_lat_min = substr($gps_vars[1], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[3], 0, 3);
+ $gps_lon_min = substr($gps_vars[3], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[2] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[4] == "E") ? 1 : -1);
+ }
+ }
+ }
+
+}
+
+if (isset($config['ntpd']['gps']['type']) && ($config['ntpd']['gps']['type'] == 'SureGPS') && (isset($gps_ok))) {
+ //GSV message is only enabled by init commands in services_ntpd_gps.php for SureGPS board
+ $gpsport = fopen("/dev/gps0", "r+");
+ while ($gpsport) {
+ $buffer = fgets($gpsport);
+ if (substr($buffer, 0, 6) == '$GPGSV') {
+ //echo $buffer."\n";
+ $gpgsv = explode(',', $buffer);
+ $gps_satview = $gpgsv[3];
+ break;
+ }
+ }
+}
+
+$pgtitle = array(gettext("Status"), gettext("NTP"));
+$shortcut_section = "ntp";
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="status ntpd">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="heading">
+ <tr>
+ <td class="listtopic">Network Time Protocol Status</td>
+ </tr>
+ </table>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <thead>
+ <tr>
+ <th class="listhdrr"><?=gettext("Status"); ?></th>
+ <th class="listhdrr"><?=gettext("Server"); ?></th>
+ <th class="listhdrr"><?=gettext("Ref ID"); ?></th>
+ <th class="listhdrr"><?=gettext("Stratum"); ?></th>
+ <th class="listhdrr"><?=gettext("Type"); ?></th>
+ <th class="listhdrr"><?=gettext("When"); ?></th>
+ <th class="listhdrr"><?=gettext("Poll"); ?></th>
+ <th class="listhdrr"><?=gettext("Reach"); ?></th>
+ <th class="listhdrr"><?=gettext("Delay"); ?></th>
+ <th class="listhdrr"><?=gettext("Offset"); ?></th>
+ <th class="listhdr"><?=gettext("Jitter"); ?></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ if (isset($config['ntpd']['noquery'])):
+?>
+ <tr>
+ <td class="listlr" colspan="11" align="center">
+ Statistics unavailable because ntpq and ntpdc queries are disabled in the <a href="services_ntpd.php">NTP service settings</a>.
+ </td>
+ </tr>
+<?php
+ elseif (count($ntpq_servers) == 0):
+?>
+ <tr>
+ <td class="listlr" colspan="11" align="center">
+ No peers found, <a href="status_services.php">is the ntp service running?</a>.
+ </td>
+ </tr>
+<?php
+ else:
+ $i = 0;
+ foreach ($ntpq_servers as $server):
+?>
+ <tr>
+ <td class="listlr nowrap">
+ <?=$server['status'];?>
+ </td>
+ <td class="listr">
+ <?=$server['server'];?>
+ </td>
+ <td class="listr">
+ <?=$server['refid'];?>
+ </td>
+ <td class="listr">
+ <?=$server['stratum'];?>
+ </td>
+ <td class="listr">
+ <?=$server['type'];?>
+ </td>
+ <td class="listr">
+ <?=$server['when'];?>
+ </td>
+ <td class="listr">
+ <?=$server['poll'];?>
+ </td>
+ <td class="listr">
+ <?=$server['reach'];?>
+ </td>
+ <td class="listr">
+ <?=$server['delay'];?>
+ </td>
+ <td class="listr">
+ <?=$server['offset'];?>
+ </td>
+ <td class="listr">
+ <?=$server['jitter'];?>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ </tbody>
+ </table>
+<?php
+ if (($gps_ok) && ($gps_lat) && ($gps_lon)):
+ $gps_goo_lnk = 2;
+?>
+ <table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="gps status">
+ <thead>
+ <tr>
+ <th class="listhdrr"><?=gettext("Clock Latitude"); ?></th>
+ <th class="listhdrr"><?=gettext("Clock Longitude"); ?></th>
+<?php
+ if (isset($gps_alt)) {
+ echo '<th class="listhdrr">' . gettext("Clock Altitude") . '</th>';
+ $gps_goo_lnk++;
+ }
+
+ if (isset($gps_sat) || isset($gps_satview)) {
+ echo '<th class="listhdrr">' . gettext("Satellites") . '</th>';
+ $gps_goo_lnk++;
+ }
+?>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="listlr" align="center"><?php echo sprintf("%.5f", $gps_lat); ?> (<?php echo sprintf("%d", $gps_lat_deg); ?>&deg; <?php echo sprintf("%.5f", $gps_lat_min*60); ?><?php echo $gps_vars[4]; ?>)</td>
+ <td class="listlr" align="center"><?php echo sprintf("%.5f", $gps_lon); ?> (<?php echo sprintf("%d", $gps_lon_deg); ?>&deg; <?php echo sprintf("%.5f", $gps_lon_min*60); ?><?php echo $gps_vars[6]; ?>)</td>
+<?php
+ if (isset($gps_alt)) {
+ echo '<td class="listlr" align="center">' . $gps_alt . ' ' . $gps_alt_unit . '</td>';
+ }
+
+ if (isset($gps_sat) || isset($gps_satview)) {
+ echo '<td class="listr" align="center">';
+ if (isset($gps_satview)) {
+ echo 'in view ' . intval($gps_satview);
+ }
+ if (isset($gps_sat) && isset($gps_satview)) {
+ echo ', ';
+ }
+ if (isset($gps_sat)) {
+ echo 'in use ' . $gps_sat;
+ }
+ echo '</td>';
+ }
+?>
+ </tr>
+ <tr>
+ <td class="listlr" colspan="<?php echo $gps_goo_lnk; ?>" align="center"><a target="_gmaps" href="http://maps.google.com/?q=<?php echo $gps_lat; ?>,<?php echo $gps_lon; ?>">Google Maps Link</a></td>
+ </tr>
+ </tbody>
+ </table>
+<?php
+ endif;
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_openvpn.php b/src/usr/local/www/status_openvpn.php
new file mode 100644
index 0000000..e9d2073
--- /dev/null
+++ b/src/usr/local/www/status_openvpn.php
@@ -0,0 +1,443 @@
+<?php
+/*
+ status_openvpn.php
+
+ Copyright (C) 2005 Scott Ullrich, Colin Smith
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2010 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ AJAX bits borrowed from diag_dump_states.php
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: openvpn
+*/
+
+##|+PRIV
+##|*IDENT=page-status-openvpn
+##|*NAME=Status: OpenVPN page
+##|*DESCR=Allow access to the 'Status: OpenVPN' page.
+##|*MATCH=status_openvpn.php*
+##|-PRIV
+
+$pgtitle = array(gettext("Status"), gettext("OpenVPN"));
+$shortcut_section = "openvpn";
+
+require("guiconfig.inc");
+require_once("openvpn.inc");
+require_once("shortcuts.inc");
+require_once("service-utils.inc");
+
+/* Handle AJAX */
+if ($_GET['action']) {
+ if ($_GET['action'] == "kill") {
+ $port = $_GET['port'];
+ $remipp = $_GET['remipp'];
+ if (!empty($port) and !empty($remipp)) {
+ $retval = kill_client($port, $remipp);
+ echo htmlentities("|{$port}|{$remipp}|{$retval}|");
+ } else {
+ echo gettext("invalid input");
+ }
+ exit;
+ }
+}
+
+
+function kill_client($port, $remipp) {
+ global $g;
+
+ //$tcpsrv = "tcp://127.0.0.1:{$port}";
+ $tcpsrv = "unix://{$g['varetc_path']}/openvpn/{$port}.sock";
+ $errval;
+ $errstr;
+
+ /* open a tcp connection to the management port of each server */
+ $fp = @stream_socket_client($tcpsrv, $errval, $errstr, 1);
+ $killed = -1;
+ if ($fp) {
+ stream_set_timeout($fp, 1);
+ fputs($fp, "kill {$remipp}\n");
+ while (!feof($fp)) {
+ $line = fgets($fp, 1024);
+
+ $info = stream_get_meta_data($fp);
+ if ($info['timed_out']) {
+ break;
+ }
+
+ /* parse header list line */
+ if (strpos($line, "INFO:") !== false) {
+ continue;
+ }
+ if (strpos($line, "SUCCESS") !== false) {
+ $killed = 0;
+ }
+ break;
+ }
+ fclose($fp);
+ }
+ return $killed;
+}
+
+$servers = openvpn_get_active_servers();
+$sk_servers = openvpn_get_active_servers("p2p");
+$clients = openvpn_get_active_clients();
+
+include("head.inc"); ?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?=$jsevents["body"]["onload"];?>">
+<?php include("fbegin.inc"); ?>
+<form action="status_openvpn.php" method="get" name="iform">
+<script type="text/javascript">
+//<![CDATA[
+ function killClient(mport, remipp) {
+ var busy = function(index, icon) {
+ jQuery(icon).bind("onclick", "");
+ jQuery(icon).attr('src', jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
+ jQuery(icon).css("cursor", "wait");
+ }
+
+ jQuery('img[name="i:' + mport + ":" + remipp + '"]').each(busy);
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>" +
+ "?action=kill&port=" + mport + "&remipp=" + remipp,
+ { type: "get", complete: killComplete }
+ );
+ }
+
+ function killComplete(req) {
+ var values = req.responseText.split("|");
+ if (values[3] != "0") {
+ alert('<?=gettext("An error occurred.");?>' + ' (' + values[3] + ')');
+ return;
+ }
+
+ jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
+ function(index, row) { jQuery(row).fadeOut(1000); }
+ );
+ }
+//]]>
+</script>
+<?php
+ $i = 0;
+ foreach ($servers as $server):
+?>
+
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="status openvpn">
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?=$server['name'];?> <?=gettext("Client connections"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="connections">
+ <tr>
+ <td class="listhdrr"><?=gettext("Common Name"); ?></td>
+ <td class="listhdrr"><?=gettext("Real Address"); ?></td>
+ <td class="listhdrr"><?=gettext("Virtual Address"); ?></td>
+ <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Received"); ?></td>
+ </tr>
+<?php
+ foreach ($server['conns'] as $conn):
+?>
+ <tr id="<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>">
+ <td class="listlr">
+ <?=$conn['common_name'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['remote_host'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['virtual_addr'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['connect_time'];?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($conn['bytes_sent']);?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($conn['bytes_recv']);?>
+ </td>
+ <td class="list">
+ <img src="/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif" height="17" width="17" border="0"
+ onclick="killClient('<?php echo $server['mgmt']; ?>', '<?php echo $conn['remote_host']; ?>');" style="cursor:pointer;"
+ id="<?php echo "i:{$server['mgmt']}:{$conn['remote_host']}"; ?>"
+ title="<?php echo gettext("Kill client connection from") . " " . $conn['remote_host']; ?>" alt="delete" />
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ <tfoot>
+ <tr>
+ <td colspan="2" class="list" height="12">
+ <table>
+ <tr>
+ <td><?php $ssvc = find_service_by_openvpn_vpnid($server['vpnid']); ?>
+ <?= get_service_status_icon($ssvc, true, true); ?>
+ <?= get_service_control_links($ssvc, true); ?></td>
+ </tr>
+ </table>
+ </td>
+ <td colspan="4" class="list" height="12">&nbsp;</td>
+ </tr>
+ </tfoot>
+ </table>
+ </td>
+ </tr>
+</table>
+<?php
+ if (is_array($server['routes']) && count($server['routes'])):
+?>
+<div id="shroutebut-<?= $i ?>">
+ <input type="button" onClick="show_routes('tabroute-<?= $i ?>', 'shroutebut-<?= $i ?>')" value="<?php echo gettext("Show Routing Table"); ?>" /> - <?= gettext("Display OpenVPN's internal routing table for this server.") ?>
+ <br /><br />
+</div>
+<table style="display: none; padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" id="tabroute-<?= $i ?>" summary="routing table">
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?=$server['name'];?> <?=gettext("Routing Table"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
+ <tr>
+ <td class="listhdrr"><?=gettext("Common Name"); ?></td>
+ <td class="listhdrr"><?=gettext("Real Address"); ?></td>
+ <td class="listhdrr"><?=gettext("Target Network"); ?></td>
+ <td class="listhdrr"><?=gettext("Last Used"); ?></td>
+ </tr>
+
+<?php
+ foreach ($server['routes'] as $conn):
+?>
+ <tr id="<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>">
+ <td class="listlr">
+ <?=$conn['common_name'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['remote_host'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['virtual_addr'];?>
+ </td>
+ <td class="listr">
+ <?=$conn['last_time'];?>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ <tfoot>
+ <tr>
+ <td colspan="6" class="list" height="12"><?= gettext("An IP address followed by C indicates a host currently connected through the VPN.") ?></td>
+ </tr>
+ </tfoot>
+ </table>
+ </td>
+ </tr>
+</table>
+<?php
+ endif;
+?>
+<br />
+<?php
+ $i++;
+ endforeach;
+?>
+<br />
+
+<?php
+ if (!empty($sk_servers)) {
+?>
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="peer to peer stats">
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?=gettext("Peer to Peer Server Instance Statistics"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
+ <tr>
+ <td class="listhdrr"><?=gettext("Name"); ?></td>
+ <td class="listhdrr"><?=gettext("Status"); ?></td>
+ <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
+ <td class="listhdrr"><?=gettext("Virtual Addr"); ?></td>
+ <td class="listhdrr"><?=gettext("Remote Host"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Rcvd"); ?></td>
+ <td class="listhdrr"><?=gettext("Service"); ?></td>
+ </tr>
+
+<?php
+ foreach ($sk_servers as $sk_server):
+?>
+ <tr id="<?php echo "r:{$sk_server['port']}:{$sk_server['vpnid']}"; ?>">
+ <td class="listlr">
+ <?=$sk_server['name'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['status'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['connect_time'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['virtual_addr'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['remote_host'];?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($sk_server['bytes_sent']);?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($sk_server['bytes_recv']);?>
+ </td>
+ <td class="listr">
+ <table>
+ <tr>
+ <td><?php $ssvc = find_service_by_openvpn_vpnid($sk_server['vpnid']); ?>
+ <?= get_service_status_icon($ssvc, false, true); ?>
+ <?= get_service_control_links($ssvc, true); ?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<?php
+ }
+?>
+<br />
+<?php
+ if (!empty($clients)) {
+?>
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0" summary="client stats">
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?=gettext("Client Instance Statistics"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="results">
+ <tr>
+ <td class="listhdrr"><?=gettext("Name"); ?></td>
+ <td class="listhdrr"><?=gettext("Status"); ?></td>
+ <td class="listhdrr"><?=gettext("Connected Since"); ?></td>
+ <td class="listhdrr"><?=gettext("Virtual Addr"); ?></td>
+ <td class="listhdrr"><?=gettext("Remote Host"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Sent"); ?></td>
+ <td class="listhdrr"><?=gettext("Bytes Rcvd"); ?></td>
+ <td class="listhdrr"><?=gettext("Service"); ?></td>
+ </tr>
+
+<?php
+ foreach ($clients as $client):
+?>
+ <tr id="<?php echo "r:{$client['port']}:{$client['vpnid']}"; ?>">
+ <td class="listlr">
+ <?=$client['name'];?>
+ </td>
+ <td class="listr">
+ <?=$client['status'];?>
+ </td>
+ <td class="listr">
+ <?=$client['connect_time'];?>
+ </td>
+ <td class="listr">
+ <?=$client['virtual_addr'];?>
+ </td>
+ <td class="listr">
+ <?=$client['remote_host'];?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($client['bytes_sent']);?>
+ </td>
+ <td class="listr">
+ <?=format_bytes($client['bytes_recv']);?>
+ </td>
+ <td class="listr" height="12">
+ <table>
+ <tr>
+ <td>
+ <?php $ssvc = find_service_by_openvpn_vpnid($client['vpnid']); ?>
+ <?= get_service_status_icon($ssvc, false, true); ?>
+ <?= get_service_control_links($ssvc, true); ?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endforeach;
+?>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<?php
+ }
+
+ if ($DisplayNote) {
+ echo "<br /><b>" . gettext("NOTE") . ":</b> " . gettext("If you have custom options that override the management features of OpenVPN on a client or server, they will cause that OpenVPN instance to not work correctly with this status page.");
+ }
+
+ if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) {
+ echo gettext("No OpenVPN instances defined");
+ }
+?>
+</form>
+
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function show_routes(id, buttonid) {
+ document.getElementById(buttonid).innerHTML='';
+ aodiv = document.getElementById(id);
+ aodiv.style.display = "block";
+}
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/status_queues.php b/src/usr/local/www/status_queues.php
new file mode 100644
index 0000000..42789bf
--- /dev/null
+++ b/src/usr/local/www/status_queues.php
@@ -0,0 +1,310 @@
+#!/usr/local/bin/php
+<?php
+/* $Id$ */
+/*
+ status_queues.php
+ Part of the pfSense project
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: shaper
+*/
+
+##|+PRIV
+##|*IDENT=page-status-trafficshaper-queues
+##|*NAME=Status: Traffic shaper: Queues page
+##|*DESCR=Allow access to the 'Status: Traffic shaper: Queues' page.
+##|*MATCH=status_queues.php*
+##|-PRIV
+
+header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
+header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
+header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
+header("Pragma: no-cache"); // HTTP/1.0
+
+require("guiconfig.inc");
+class QueueStats {
+ public $queuename;
+ public $queuelength;
+ public $pps;
+ public $bandwidth;
+ public $borrows;
+ public $suspends;
+ public $drops;
+}
+if (!file_exists("{$g['varrun_path']}/qstats.pid") || !isvalidpid("{$g['varrun_path']}/qstats.pid")) {
+ /* Start in the background so we don't hang up the GUI */
+ mwexec_bg("/usr/local/sbin/qstats -p {$g['varrun_path']}/qstats.pid");
+ /* Give it a moment to start up */
+ sleep(1);
+}
+$fd = @fsockopen("unix://{$g['varrun_path']}/qstats");
+if (!$fd) {
+ $error = "Something wrong happened during communication with stat gathering";
+} else {
+ $stats = "";
+ while (!feof($fd)) {
+ $stats .= fread($fd, 4096);
+ }
+ fclose($fd);
+ @file_put_contents("{$g['tmp_path']}/qstats", $stats);
+ $altqstats = @parse_xml_config("{$g['tmp_path']}/qstats", array("altqstats"));
+ if ($altqstats == -1) {
+ $error = "No queue statistics could be read.";
+ }
+}
+if ($_REQUEST['getactivity']) {
+ $statistics = array();
+ $bigger_stat = 0;
+ $stat_type = $_REQUEST['stats'];
+ /* build the queue stats. */
+ foreach ($altqstats['queue'] as $q) {
+ statsQueues($q);
+ }
+ /* calculate the bigger amount of packets or bandwidth being moved through all queues. */
+ if ($stat_type == "0") {
+ foreach ($statistics as $q) {
+ if ($bigger_stat < $q->pps) {
+ $bigger_stat = $q->pps;
+ }
+ }
+ } else {
+ foreach ($statistics as $q) {
+ if ($bigger_stat < $q->bandwidth) {
+ $bigger_stat = $q->bandwidth;
+ }
+ }
+ }
+ $finscript = "";
+ foreach ($statistics as $q) {
+ if ($stat_type == "0") {
+ $packet_s = round(150 * (1 - $q->pps / $bigger_stat), 0);
+ } else {
+ $packet_s = round(150 * (1 - $q->bandwidth / $bigger_stat), 0);
+ }
+ if ($packet_s < 0) {
+ $packet_s = 0;
+ }
+ $finscript .= "jQuery('#queue{$q->queuename}widthb').width('{$packet_s}');";
+ $finscript .= "jQuery('#queue{$q->queuename}widtha').width('" . (150 - $packet_s) . "');";
+ $finscript .= "jQuery('#queue{$q->queuename}pps').val('" . number_format($q->pps, 1) . "');";
+ $finscript .= "jQuery('#queue{$q->queuename}bps').val('" . format_bits($q->bandwidth) . "');";
+ $finscript .= "jQuery('#queue{$q->queuename}borrows').val('{$q->borrows}');";
+ $finscript .= "jQuery('#queue{$q->queuename}suspends').val('{$q->suspends}');";
+ $finscript .= "jQuery('#queue{$q->queuename}drops').val('{$q->drops}');";
+ $finscript .= "jQuery('#queue{$q->queuename}length').val('{$q->queuelength}');";
+ }
+ unset($statistics, $altqstats);
+ header("Content-type: text/javascript");
+ echo $finscript;
+ exit;
+}
+$pgtitle = array(gettext("Status"), gettext("Traffic shaper"), gettext("Queues"));
+$shortcut_section = "trafficshaper";
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php
+if (!is_array($config['shaper']['queue']) || count($config['shaper']['queue']) < 1) {
+ echo gettext("Traffic shaping is not configured.");
+ include("fend.inc");
+ echo "</body></html>";
+ exit;
+}
+?>
+<?php if (!$error): ?>
+<form action="status_queues.php" method="post">
+<script type="text/javascript">
+//<![CDATA[
+ function getqueueactivity() {
+ var url = "/status_queues.php";
+ var pars = "getactivity=yes&stats=" + jQuery("#selStatistic").val();
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ setTimeout('getqueueactivity()', 5100);
+ }
+ jQuery(document).ready(function() {
+ setTimeout('getqueueactivity()', 150);
+ });
+//]]>
+</script>
+<?php endif; ?>
+<table width="100%" border="1" cellpadding="0" cellspacing="0" summary="status queues">
+<?php if ($error): ?>
+ <tr><td><?php echo $error; ?></td></tr>
+<?php else: ?>
+ <tr>
+ <td class="listhdr"><?=gettext("Queue"); ?></td>
+ <td class="listhdr">
+ <?=gettext("Statistics"); ?>
+ <select id="selStatistic">
+ <option value="0">PPS</option>
+ <option value="1">Bandwidth</option>
+ </select>
+ </td>
+ <td class="listhdr" width="1%"><?=gettext("PPS"); ?></td>
+ <td class="listhdr" width="1%"><?=gettext("Bandwidth"); ?></td>
+ <td class="listhdr" width="1%"><?=gettext("Borrows"); ?></td>
+ <td class="listhdr" width="1%"><?=gettext("Suspends"); ?></td>
+ <td class="listhdr" width="1%"><?=gettext("Drops"); ?></td>
+ <td class="listhdr" width="1%"><?=gettext("Length"); ?></td>
+ </tr>
+<?php
+ $if_queue_list = get_configured_interface_list_by_realif(false, true);
+ processQueues($altqstats, 0, "");
+?>
+<?php endif; ?>
+</table>
+<p>
+ <strong><span class="red"><?=gettext("Note"); ?>:</span></strong><br />
+ <?=gettext("Queue graphs take 5 seconds to sample data"); ?>.<br />
+ <?=gettext("You can configure the Traffic Shaper"); ?> <a href="/firewall_shaper_wizards.php"><?=gettext("here"); ?></a>.
+</p>
+<script type="text/javascript">
+//<![CDATA[
+ function StatsShowHide(classname) {
+ var firstrow = jQuery("." + classname).first();
+ if (firstrow.is(':visible')) {
+ jQuery("." + classname).hide();
+ } else {
+ jQuery("." + classname).show();
+ }
+ }
+//]]>
+</script>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+<?php
+function processQueues($altqstats, $level, $parent_name) {
+ global $g;
+ global $if_queue_list;
+ $gray_value = 190 + $level * 10;
+ if ($gray_value > 250) {
+ $gray_value = 255;
+ }
+ $row_background = str_repeat(dechex($gray_value), 3);
+ $parent_name = $parent_name . " queuerow" . $altqstats['name'] . $altqstats['interface'];
+ $prev_if = $altqstats['interface'];
+ foreach ($altqstats['queue'] as $q) {
+ $if_name = "";
+ foreach ($if_queue_list as $oif => $real_name) {
+ if ($oif == $q['interface']) {
+ $if_name = $real_name;
+ break;
+ }
+ }
+ if ($prev_if != $q['interface']) {
+ echo "<tr><td colspan=\"8\" style=\"padding: 2px;\"><b>Interface ". htmlspecialchars(convert_real_interface_to_friendly_descr($q['interface'])) . "</b></td></tr>";
+ $prev_if = $q['interface'];
+ }
+?>
+ <tr class="<?php echo $parent_name?>">
+ <td bgcolor="#<?php echo $row_background?>" style="padding-left: <?php echo $level * 20?>px;">
+ <font color="#000000">
+ <?
+ if (strstr($q['name'], "root_")) {
+ echo "<a href=\"firewall_shaper.php?interface={$if_name}&amp;queue={$if_name}&amp;action=show\">Root queue</a>";
+ } else {
+ echo "<a href=\"firewall_shaper.php?interface={$if_name}&amp;queue={$q['name']}&amp;action=show\">" . htmlspecialchars($q['name']) . "</a>";
+ }
+ ?>
+ </font>
+ </td>
+<?php
+ $cpuUsage = 0;
+ echo "<td class=\"nowrap\" width=\"1%\" bgcolor=\"#{$row_background}\">";
+ echo "<img src='./themes/".$g['theme']."/images/misc/bar_left.gif' height='10' width='4' border='0' align='middle' alt='' />";
+ echo "<img src='./themes/".$g['theme']."/images/misc/bar_blue.gif' height='10' name='queue{$q['name']}{$q['interface']}widtha' id='queue{$q['name']}{$q['interface']}widtha' width='" . $cpuUsage . "' border='0' align='middle' alt='" . htmlspecialchars($q['name']) . "' />";
+ echo "<img src='./themes/".$g['theme']."/images/misc/bar_gray.gif' height='10' name='queue{$q['name']}{$q['interface']}widthb' id='queue{$q['name']}{$q['interface']}widthb' width='" . (150 - $cpuUsage) . "' border='0' align='middle' alt='" . htmlspecialchars($q['name']) . "' />";
+ echo "<img src='./themes/".$g['theme']."/images/misc/bar_right.gif' height='10' width='5' border='0' align='middle' alt='' /> ";
+ if (is_array($q['queue'])) {
+ echo "<a href=\"#\" onclick=\"StatsShowHide('queuerow{$q['name']}{$q['interface']}');return false\">+/-</a> ";
+ }
+ echo " </td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}pps' id='queue{$q['name']}{$q['interface']}pps' value='(" . gettext("Loading") . ")' align='left' /></td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:80px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}bps' id='queue{$q['name']}{$q['interface']}bps' value='' align='right' /></td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}borrows' id='queue{$q['name']}{$q['interface']}borrows' value='' align='right' /></td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}suspends' id='queue{$q['name']}{$q['interface']}suspends' value='' align='right' /></td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}drops' id='queue{$q['name']}{$q['interface']}drops' value='' align='right' /></td>";
+ echo "<td width=\"1%\" bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}length' id='queue{$q['name']}{$q['interface']}length' value='' align='right' /></td>";
+?>
+ </tr>
+<?php
+ if (is_array($q['queue'])) {
+ processQueues($q, $level + 1, $parent_name);
+ }
+ };
+}
+function statsQueues($xml) {
+ global $statistics;
+
+ $current = new QueueStats();
+ $child = new QueueStats();
+ $current->queuename = $xml['name'] . $xml['interface'];
+ $current->queuelength = $xml['qlength'];
+ $current->pps = $xml['measured'];
+ $current->bandwidth = $xml['measuredspeedint'];
+ $current->borrows = intval($xml['borrows']);
+ $current->suspends = intval($xml['suspends']);
+ $current->drops = intval($xml['droppedpkts']);
+ if (is_array($xml['queue'])) {
+ foreach ($xml['queue'] as $q) {
+ $child = statsQueues($q);
+ $current->pps += $child->pps;
+ $current->bandwidth += $child->bandwidth;
+ $current->borrows += $child->borrows;
+ $current->suspends += $child->suspends;
+ $current->drops += $child->drops;
+ }
+ }
+ unset($child);
+ $statistics[] = $current;
+ return $current;
+}
+function format_bits($bits) {
+ if ($bits >= 1000000000) {
+ return sprintf("%.2f Gbps", $bits/1000000000);
+ } else if ($bits >= 1000000) {
+ return sprintf("%.2f Mbps", $bits/1000000);
+ } else if ($bits >= 1000) {
+ return sprintf("%.2f Kbps", $bits/1000);
+ } else {
+ return sprintf("%d bps", $bits);
+ }
+}
+?>
diff --git a/src/usr/local/www/status_rrd_graph.php b/src/usr/local/www/status_rrd_graph.php
new file mode 100644
index 0000000..ae9c709
--- /dev/null
+++ b/src/usr/local/www/status_rrd_graph.php
@@ -0,0 +1,834 @@
+<?php
+/* $Id$ */
+/*
+ status_rrd_graph.php
+ Part of pfSense
+ Copyright (C) 2007 Seth Mos <seth.mos@dds.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-status-rrdgraphs
+##|*NAME=Status: RRD Graphs page
+##|*DESCR=Allow access to the 'Status: RRD Graphs' page.
+##|*MATCH=status_rrd_graph.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require_once("rrd.inc");
+
+unset($input_errors);
+
+/* if the rrd graphs are not enabled redirect to settings page */
+if (!isset($config['rrd']['enable'])) {
+ header("Location: status_rrd_graph_settings.php");
+}
+
+$rrddbpath = "/var/db/rrd/";
+chdir($rrddbpath);
+$databases = glob("*.rrd");
+
+
+if ($_GET['cat']) {
+ $curcat = htmlspecialchars($_GET['cat']);
+} else {
+ if (!empty($config['rrd']['category'])) {
+ $curcat = $config['rrd']['category'];
+ } else {
+ $curcat = "system";
+ }
+}
+
+if ($_GET['zone']) {
+ $curzone = $_GET['zone'];
+} else {
+ $curzone = '';
+}
+
+if ($_GET['period']) {
+ $curperiod = $_GET['period'];
+} else {
+ if (!empty($config['rrd']['period'])) {
+ $curperiod = $config['rrd']['period'];
+ } else {
+ $curperiod = "absolute";
+ }
+}
+
+if ($_GET['option']) {
+ $curoption = $_GET['option'];
+} else {
+ switch ($curcat) {
+ case "system":
+ $curoption = "processor";
+ break;
+ case "queues":
+ $curoption = "queues";
+ break;
+ case "queuedrops":
+ $curoption = "queuedrops";
+ break;
+ case "quality":
+ foreach ($databases as $database) {
+ if (preg_match("/[-]quality\.rrd/i", $database)) {
+ /* pick off the 1st database we find that matches the quality graph */
+ $name = explode("-", $database);
+ $curoption = "$name[0]";
+ continue 2;
+ }
+ }
+ case "wireless":
+ foreach ($databases as $database) {
+ if (preg_match("/[-]wireless\.rrd/i", $database)) {
+ /* pick off the 1st database we find that matches the wireless graph */
+ $name = explode("-", $database);
+ $curoption = "$name[0]";
+ continue 2;
+ }
+ }
+ case "cellular":
+ foreach ($databases as $database) {
+ if (preg_match("/[-]cellular\.rrd/i", $database)) {
+ /* pick off the 1st database we find that matches the celullar graph */
+ $name = explode("-", $database);
+ $curoption = "$name[0]";
+ continue 2;
+ }
+ }
+ case "vpnusers":
+ foreach ($databases as $database) {
+ if (preg_match("/[-]vpnusers\.rrd/i", $database)) {
+ /* pick off the 1st database we find that matches the VPN graphs */
+ $name = explode("-", $database);
+ $curoption = "$name[0]";
+ continue 2;
+ }
+ }
+ case "captiveportal":
+ $curoption = "allgraphs";
+ break;
+ case "ntpd":
+ if (isset($config['ntpd']['statsgraph'])) {
+ $curoption = "allgraphs";
+ } else {
+ $curoption = "processor";
+ $curcat = "system";
+ }
+ break;
+ default:
+ $curoption = "wan";
+ break;
+ }
+}
+
+$now = time();
+if ($curcat == "custom") {
+ if (is_numeric($_GET['start'])) {
+ if ($start < ($now - (3600 * 24 * 365 * 5))) {
+ $start = $now - (8 * 3600);
+ }
+ $start = $_GET['start'];
+ } else if ($_GET['start']) {
+ $start = strtotime($_GET['start']);
+ if ($start === FALSE || $start === -1) {
+ $input_errors[] = gettext("Invalid start date/time:") . " '{$_GET['start']}'";
+ $start = $now - (8 * 3600);
+ }
+ } else {
+ $start = $now - (8 * 3600);
+ }
+}
+
+if (is_numeric($_GET['end'])) {
+ $end = $_GET['end'];
+} else if ($_GET['end']) {
+ $end = strtotime($_GET['end']);
+ if ($end === FALSE || $end === -1) {
+ $input_errors[] = gettext("Invalid end date/time:") . " '{$_GET['end']}'";
+ $end = $now;
+ }
+} else {
+ $end = $now;
+}
+
+/* this should never happen */
+if ($end < $start) {
+ log_error("start $start is smaller than end $end");
+ $end = $now;
+}
+
+$seconds = $end - $start;
+
+$styles = array('inverse' => gettext('Inverse'),
+ 'absolute' => gettext('Absolute'));
+
+// Set default and override later
+$curstyle = "inverse";
+
+if ($_GET['style']) {
+ foreach ($styles as $style) {
+ if (strtoupper($style) == strtoupper($_GET['style'])) {
+ $curstyle = $_GET['style'];
+ }
+ }
+} else {
+ if (!empty($config['rrd']['style'])) {
+ $curstyle = $config['rrd']['style'];
+ } else {
+ $curstyle = "inverse";
+ }
+}
+
+/* sort names reverse so WAN comes first */
+rsort($databases);
+
+/* these boilerplate databases are required for the other menu choices */
+$dbheader = array("allgraphs-traffic.rrd",
+ "allgraphs-quality.rrd",
+ "allgraphs-wireless.rrd",
+ "allgraphs-cellular.rrd",
+ "allgraphs-vpnusers.rrd",
+ "allgraphs-packets.rrd",
+ "system-allgraphs.rrd",
+ "system-throughput.rrd",
+ "outbound-quality.rrd",
+ "outbound-packets.rrd",
+ "outbound-traffic.rrd");
+
+/* additional menu choices for the custom tab */
+$dbheader_custom = array("system-throughput.rrd");
+
+foreach ($databases as $database) {
+ if (stristr($database, "-wireless")) {
+ $wireless = true;
+ }
+ if (stristr($database, "-queues")) {
+ $queues = true;
+ }
+ if (stristr($database, "-cellular") && !empty($config['ppps'])) {
+ $cellular = true;
+ }
+ if (stristr($database, "-vpnusers")) {
+ $vpnusers = true;
+ }
+ if (stristr($database, "captiveportal-") && is_array($config['captiveportal'])) {
+ $captiveportal = true;
+ }
+ if (stristr($database, "ntpd") && isset($config['ntpd']['statsgraph'])) {
+ $ntpd = true;
+ }
+}
+/* append the existing array to the header */
+$ui_databases = array_merge($dbheader, $databases);
+$custom_databases = array_merge($dbheader_custom, $databases);
+
+$graphs = array("eighthour", "day", "week", "month", "quarter", "year", "fouryear");
+$periods = array("absolute" => gettext("Absolute Timespans"), "current" => gettext("Current Period"), "previous" => gettext("Previous Period"));
+$graph_length = array(
+ "eighthour" => 28800,
+ "day" => 86400,
+ "week" => 604800,
+ "month" => 2678400,
+ "quarter" => 7948800,
+ "year" => 31622400,
+ "fouryear" => 126230400);
+
+$pgtitle = array(gettext("Status"), gettext("RRD Graphs"));
+
+$closehead = false;
+
+/* Load all CP zones */
+if ($captiveportal && is_array($config['captiveportal'])) {
+ $cp_zones_tab_array = array();
+ foreach ($config['captiveportal'] as $cpkey => $cp) {
+ if (!isset($cp['enable'])) {
+ continue;
+ }
+
+ if ($curzone == '') {
+ $tabactive = true;
+ $curzone = $cpkey;
+ } elseif ($curzone == $cpkey) {
+ $tabactive = true;
+ } else {
+ $tabactive = false;
+ }
+
+ $cp_zones_tab_array[] = array($cp['zone'], $tabactive, "status_rrd_graph.php?cat=captiveportal&zone=$cpkey");
+ }
+}
+
+include("head.inc");
+?>
+
+<?php if ($curcat === "custom") { ?>
+ <link rel="stylesheet" type="text/css" href="/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css" />
+ <?php if (file_exists("{$g['www_path']}/themes/{$g['theme']}/jquery-ui-1.11.1.css")) { ?>
+ <link rel="stylesheet" type="text/css" href="/themes/<?= $g['theme'] ?>/jquery-ui-1.11.1.css" />
+ <?php } else { ?>
+ <link rel="stylesheet" type="text/css" href="/javascript/jquery/jquery-ui-1.11.1.css" />
+ <?php } ?>
+ <script type="text/javascript" src="/javascript/jquery-ui-timepicker-addon/js/jquery-ui-timepicker-addon.js"></script>
+ <script type="text/javascript">
+ //<![CDATA[
+ jQuery(function ($) {
+ var options = {
+ dateFormat: 'mm/dd/yy',
+ timeFormat: 'hh:mm:ss',
+ showSecond: true
+ };
+ $("#startDateTime").datetimepicker(options);
+ $("#endDateTime").datetimepicker(options);
+ });
+ //]]>
+ </script>
+<?php } ?>
+
+<?php
+
+function get_dates($curperiod, $graph) {
+ global $graph_length;
+ $now = time();
+ $end = $now;
+
+ if ($curperiod == "absolute") {
+ $start = $end - $graph_length[$graph];
+ } else {
+ $curyear = date('Y', $now);
+ $curmonth = date('m', $now);
+ $curweek = date('W', $now);
+ $curweekday = date('N', $now) - 1; // We want to start on monday
+ $curday = date('d', $now);
+ $curhour = date('G', $now);
+
+ switch ($curperiod) {
+ case "previous":
+ $offset = -1;
+ break;
+ default:
+ $offset = 0;
+ }
+ switch ($graph) {
+ case "eighthour":
+ if ($curhour < 24) {
+ $starthour = 16;
+ }
+ if ($curhour < 16) {
+ $starthour = 8;
+ }
+ if ($curhour < 8) {
+ $starthour = 0;
+ }
+
+ switch ($offset) {
+ case 0:
+ $houroffset = $starthour;
+ break;
+ default:
+ $houroffset = $starthour + ($offset * 8);
+ break;
+ }
+ $start = mktime($houroffset, 0, 0, $curmonth, $curday, $curyear);
+ if ($offset != 0) {
+ $end = mktime(($houroffset + 8), 0, 0, $curmonth, $curday, $curyear);
+ }
+ break;
+ case "day":
+ $start = mktime(0, 0, 0, $curmonth, ($curday + $offset), $curyear);
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, $curmonth, (($curday + $offset) + 1), $curyear);
+ }
+ break;
+ case "week":
+ switch ($offset) {
+ case 0:
+ $weekoffset = 0;
+ break;
+ default:
+ $weekoffset = ($offset * 7) - 7;
+ break;
+ }
+ $start = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset), $curyear);
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, $curmonth, (($curday - $curweekday) + $weekoffset + 7), $curyear);
+ }
+ break;
+ case "month":
+ $start = mktime(0, 0, 0, ($curmonth + $offset), 0, $curyear);
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
+ }
+ break;
+ case "quarter":
+ $start = mktime(0, 0, 0, (($curmonth - 2) + $offset), 0, $curyear);
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, (($curmonth + $offset) + 1), 0, $curyear);
+ }
+ break;
+ case "year":
+ $start = mktime(0, 0, 0, 1, 0, ($curyear + $offset));
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
+ }
+ break;
+ case "fouryear":
+ $start = mktime(0, 0, 0, 1, 0, (($curyear - 3) + $offset));
+ if ($offset != 0) {
+ $end = mktime(0, 0, 0, 1, 0, (($curyear + $offset) +1));
+ }
+ break;
+ }
+ }
+ // echo "start $start ". date('l jS \of F Y h:i:s A', $start) .", end $end ". date('l jS \of F Y h:i:s A', $end) ."<br />";
+ $dates = array();
+ $dates['start'] = $start;
+ $dates['end'] = $end;
+ return $dates;
+}
+
+?>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors && count($input_errors)) { print_input_errors($input_errors); } ?>
+<form name="form1" action="status_rrd_graph.php" method="get">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rrd graphs">
+ <tr>
+ <td>
+ <input type="hidden" name="cat" value="<?php echo "$curcat"; ?>" />
+ <?php
+ $tab_array = array();
+ if ($curcat == "system") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("System"), $tabactive, "status_rrd_graph.php?cat=system");
+ if ($curcat == "traffic") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Traffic"), $tabactive, "status_rrd_graph.php?cat=traffic");
+ if ($curcat == "packets") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Packets"), $tabactive, "status_rrd_graph.php?cat=packets");
+ if ($curcat == "quality") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Quality"), $tabactive, "status_rrd_graph.php?cat=quality");
+ if ($queues) {
+ if ($curcat == "queues") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Queues"), $tabactive, "status_rrd_graph.php?cat=queues");
+ if ($curcat == "queuedrops") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("QueueDrops"), $tabactive, "status_rrd_graph.php?cat=queuedrops");
+ }
+ if ($wireless) {
+ if ($curcat == "wireless") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Wireless"), $tabactive, "status_rrd_graph.php?cat=wireless");
+ }
+ if ($cellular) {
+ if ($curcat == "cellular") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Cellular"), $tabactive, "status_rrd_graph.php?cat=cellular");
+ }
+ if ($vpnusers) {
+ if ($curcat == "vpnusers") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array("VPN", $tabactive, "status_rrd_graph.php?cat=vpnusers");
+ }
+ if ($captiveportal) {
+ if ($curcat == "captiveportal") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array("Captive Portal", $tabactive, "status_rrd_graph.php?cat=captiveportal");
+ }
+ if ($ntpd) {
+ if ($curcat == "ntpd") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array("NTP", $tabactive, "status_rrd_graph.php?cat=ntpd");
+ }
+ if ($curcat == "custom") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
+ if ($curcat == "settings") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Settings"), $tabactive, "status_rrd_graph_settings.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+<?php if ($curcat == "captiveportal") : ?>
+ <tr>
+ <td class="tabnavtbl">
+ <?php display_top_tabs($cp_zones_tab_array); ?>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="main area">
+ <tr>
+ <td colspan="2" class="list"><p><b><?=gettext("Note: Change of color and/or style may not take effect until the next refresh");?></b></p></td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list">
+ <?=gettext("Graphs:");?>
+ <?php if (!empty($curzone)): ?>
+ <input type="hidden" name="zone" value="<?= htmlspecialchars($curzone) ?>" />
+ <?php endif; ?>
+ <select name="option" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <?php
+ if ($curcat == "custom") {
+ foreach ($custom_databases as $db => $database) {
+ $optionc = explode("-", $database);
+ $friendly = convert_friendly_interface_to_friendly_descr(strtolower($optionc[0]));
+ if (empty($friendly)) {
+ $friendly = $optionc[0];
+ }
+ $search = array("-", ".rrd", $optionc[0]);
+ $replace = array(" :: ", "", $friendly);
+ echo "<option value=\"{$database}\"";
+ $prettyprint = ucwords(str_replace($search, $replace, $database));
+ if ($curoption == $database) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($prettyprint) . "</option>\n";
+ }
+ }
+ foreach ($ui_databases as $db => $database) {
+ if (!preg_match("/($curcat)/i", $database)) {
+ continue;
+ }
+
+ if (($curcat == "captiveportal") && !empty($curzone) && !preg_match("/captiveportal-{$curzone}/i", $database)) {
+ continue;
+ }
+
+ $optionc = explode("-", $database);
+ $search = array("-", ".rrd", $optionc);
+ $replace = array(" :: ", "", $friendly);
+
+ switch ($curcat) {
+ case "captiveportal":
+ $optionc = str_replace($search, $replace, $optionc[2]);
+ echo "<option value=\"$optionc\"";
+ $prettyprint = ucwords(str_replace($search, $replace, $optionc));
+ break;
+ case "system":
+ $optionc = str_replace($search, $replace, $optionc[1]);
+ echo "<option value=\"$optionc\"";
+ $prettyprint = ucwords(str_replace($search, $replace, $optionc));
+ break;
+ default:
+ /* Deduce a interface if possible and use the description */
+ $optionc = "$optionc[0]";
+ $friendly = convert_friendly_interface_to_friendly_descr(strtolower($optionc));
+ if (empty($friendly)) {
+ $friendly = $optionc;
+ }
+ $search = array("-", ".rrd", $optionc);
+ $replace = array(" :: ", "", $friendly);
+ echo "<option value=\"$optionc\"";
+ $prettyprint = ucwords(str_replace($search, $replace, $friendly));
+ }
+ if ($curoption == $optionc) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($prettyprint) . "</option>\n";
+ }
+ ?>
+ </select>
+
+ <?=gettext("Style:");?>
+ <select name="style" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <?php
+ foreach ($styles as $style => $styled) {
+ echo "<option value=\"$style\"";
+ if ($style == $curstyle) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($styled) . "</option>\n";
+ }
+ ?>
+ </select>
+
+<?php
+ if ($curcat == "custom") {
+ // Custom tab displays start and end time selectors.
+ $tz = date_default_timezone_get();
+ $tz_msg = gettext("Enter date and/or time. Current timezone:") . " $tz";
+ $start_fmt = strftime("%m/%d/%Y %H:%M:%S", $start);
+ $end_fmt = strftime("%m/%d/%Y %H:%M:%S", $end);
+?>
+ <?=gettext("Start:");?>
+ <input id="startDateTime" title="<?= htmlentities($tz_msg); ?>." type="text" name="start" class="formfld unknown" size="24" value="<?= htmlentities($start_fmt); ?>" />
+ <?=gettext("End:");?>
+ <input id="endDateTime" title="<?= htmlentities($tz_msg); ?>." type="text" name="end" class="formfld unknown" size="24" value="<?= htmlentities($end_fmt); ?>" />
+ <input type="submit" name="Submit" value="<?=gettext("Go"); ?>" />
+<?php
+ } else {
+ // Not on the custom tab - show the Period selector
+?>
+ <?=gettext("Period:");?>
+ <select name="period" class="formselect" style="z-index: -10;" onchange="document.form1.submit()">
+ <?php
+ foreach ($periods as $period => $value) {
+ echo "<option value=\"$period\"";
+ if ($period == $curperiod) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($value) . "</option>\n";
+ }
+ ?>
+ </select>
+<?php
+ }
+?>
+ </td>
+ </tr>
+<?php
+ if ($curcat == "custom") {
+ // Insert the chosen graph
+ $curdatabase = $curoption;
+ $graph = "custom-$curdatabase";
+ if (in_array($curdatabase, $custom_databases)) {
+ $id = "{$graph}-{$curoption}-{$curdatabase}";
+ $id = preg_replace('/\./', '_', $id);
+
+ echo "<tr><td colspan=\"2\" class=\"list\">\n";
+ echo "<img border=\"0\" name=\"{$id}\" ";
+ echo "id=\"{$id}\" alt=\"$prettydb Graph\" ";
+ echo "src=\"status_rrd_graph_img.php?start={$start}&amp;end={$end}&amp;database={$curdatabase}&amp;style={$curstyle}&amp;graph={$graph}\" />\n";
+ echo "<br /><hr /><br />\n";
+ echo "</td></tr>\n";
+ }
+ } else {
+ // Insert each of the graphs for the various set time periods
+ foreach ($graphs as $graph) {
+ /* check which databases are valid for our category */
+ foreach ($ui_databases as $curdatabase) {
+ if (!preg_match("/($curcat)/i", $curdatabase)) {
+ continue;
+ }
+
+ if (($curcat == "captiveportal") && !empty($curzone) && !preg_match("/captiveportal-{$curzone}/i", $curdatabase)) {
+ continue;
+ }
+
+ $optionc = explode("-", $curdatabase);
+ $search = array("-", ".rrd", $optionc);
+ $replace = array(" :: ", "", $friendly);
+ switch ($curoption) {
+ case "outbound":
+ /* make sure we do not show the placeholder databases in the outbound view */
+ if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
+ continue 2;
+ }
+ /* only show interfaces with a gateway */
+ $optionc = "$optionc[0]";
+ if (!interface_has_gateway($optionc)) {
+ if (!isset($gateways_arr)) {
+ if (preg_match("/quality/i", $curdatabase)) {
+ $gateways_arr = return_gateways_array();
+ } else {
+ $gateways_arr = array();
+ }
+ }
+ $found_gateway = false;
+ foreach ($gateways_arr as $gw) {
+ if ($gw['name'] == $optionc) {
+ $found_gateway = true;
+ break;
+ }
+ }
+ if (!$found_gateway) {
+ continue 2;
+ }
+ }
+ if (!preg_match("/(^$optionc-|-$optionc\\.)/i", $curdatabase)) {
+ continue 2;
+ }
+ break;
+ case "allgraphs":
+ /* make sure we do not show the placeholder databases in the all view */
+ if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
+ continue 2;
+ }
+ break;
+ default:
+ /* just use the name here */
+ if (!preg_match("/(^$curoption-|-$curoption\\.)/i", $curdatabase)) {
+ continue 2;
+ }
+ }
+ if (in_array($curdatabase, $ui_databases)) {
+ $id = "{$graph}-{$curoption}-{$curdatabase}";
+ $id = preg_replace('/\./', '_', $id);
+
+ $dates = get_dates($curperiod, $graph);
+ $start = $dates['start'];
+ $end = $dates['end'];
+ echo "<tr><td colspan=\"2\" class=\"list\">\n";
+ echo "<img border=\"0\" name=\"{$id}\" ";
+ echo "id=\"{$id}\" alt=\"$prettydb Graph\" ";
+ echo "src=\"status_rrd_graph_img.php?start={$start}&amp;end={$end}&amp;database={$curdatabase}&amp;style={$curstyle}&amp;graph={$graph}\" />\n";
+ echo "<br /><hr /><br />\n";
+ echo "</td></tr>\n";
+ }
+ }
+ }
+ }
+?>
+ <tr>
+ <td colspan="2" class="list">
+ <script type="text/javascript">
+ //<![CDATA[
+ function update_graph_images() {
+ //alert('updating');
+ var randomid = Math.floor(Math.random()*11);
+ <?php
+ foreach ($graphs as $graph) {
+ /* check which databases are valid for our category */
+ foreach ($ui_databases as $curdatabase) {
+ if (!stristr($curdatabase, $curcat)) {
+ continue;
+ }
+ $optionc = explode("-", $curdatabase);
+ $search = array("-", ".rrd", $optionc);
+ $replace = array(" :: ", "", $friendly);
+ switch ($curoption) {
+ case "outbound":
+ /* make sure we do not show the placeholder databases in the outbound view */
+ if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
+ continue 2;
+ }
+ /* only show interfaces with a gateway */
+ $optionc = "$optionc[0]";
+ if (!interface_has_gateway($optionc)) {
+ if (!isset($gateways_arr)) {
+ if (preg_match("/quality/i", $curdatabase)) {
+ $gateways_arr = return_gateways_array();
+ } else {
+ $gateways_arr = array();
+ }
+ }
+ $found_gateway = false;
+ foreach ($gateways_arr as $gw) {
+ if ($gw['name'] == $optionc) {
+ $found_gateway = true;
+ break;
+ }
+ }
+ if (!$found_gateway) {
+ continue 2;
+ }
+ }
+ if (!preg_match("/(^$optionc-|-$optionc\\.)/i", $curdatabase)) {
+ continue 2;
+ }
+ break;
+ case "allgraphs":
+ /* make sure we do not show the placeholder databases in the all view */
+ if ((stristr($curdatabase, "outbound")) || (stristr($curdatabase, "allgraphs"))) {
+ continue 2;
+ }
+ break;
+ default:
+ /* just use the name here */
+ if (!preg_match("/(^$curoption-|-$curoption\\.)/i", $curdatabase)) {
+ continue 2;
+ }
+ }
+ $dates = get_dates($curperiod, $graph);
+ $start = $dates['start'];
+ if ($curperiod == "current") {
+ $end = $dates['end'];
+ }
+ /* generate update events utilizing jQuery('') feature */
+ $id = "{$graph}-{$curoption}-{$curdatabase}";
+ $id = preg_replace('/\./', '_', $id);
+
+ echo "\n";
+ echo "\t\tjQuery('#{$id}').attr('src','status_rrd_graph_img.php?start={$start}&graph={$graph}&database={$curdatabase}&style={$curstyle}&tmp=' + randomid);\n";
+ }
+ }
+ ?>
+ window.setTimeout('update_graph_images()', 355000);
+ }
+ window.setTimeout('update_graph_images()', 355000);
+ //]]>
+ </script>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_rrd_graph_img.php b/src/usr/local/www/status_rrd_graph_img.php
new file mode 100644
index 0000000..d28472f
--- /dev/null
+++ b/src/usr/local/www/status_rrd_graph_img.php
@@ -0,0 +1,1278 @@
+<?php
+/* $Id$ */
+/*
+ status_rrd_graph_img.php
+ Part of pfSense
+ Copyright (C) 2009 Seth Mos <seth.mos@dds.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/rm /usr/local/bin/rrdtool
+ pfSense_MODULE: system
+*/
+
+require_once("globals.inc");
+require_once("guiconfig.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("rrd.inc");
+
+global $g;
+
+$pgtitle = array(gettext("System"), gettext("RRD Graphs"), gettext("Image viewer"));
+
+if ($_GET['database']) {
+ $curdatabase = basename($_GET['database']);
+ $curdatabase = str_replace(array("<", ">", ";", "&", "'", '"'), "", htmlspecialchars_decode($curdatabase, ENT_QUOTES | ENT_HTML401));
+} else {
+ $curdatabase = "wan-traffic.rrd";
+}
+
+if ($_GET['style']) {
+ $curstyle = $_GET['style'];
+} else {
+ $curstyle = "inverse";
+}
+
+/* this is used for temp name */
+if ($_GET['graph']) {
+ $curgraph = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['graph'], ENT_QUOTES | ENT_HTML401));
+} else {
+ $curgraph = "custom";
+}
+
+$now = time();
+
+if (is_numeric($_GET['start'])) {
+ $start = $_GET['start'];
+} else {
+ $start = $now - (8 * 3600);
+}
+
+if (is_numeric($_GET['end'])) {
+ $end = $_GET['end'];
+} else {
+ $end = $now;
+}
+
+/* this should never happen */
+if ($end < $start) {
+ log_error("start $start is smaller than end $end");
+ $end = $now;
+}
+
+$seconds = $end - $start;
+
+$scales = array();
+$scales[14400] = "MINUTE:5:MINUTE:10:MINUTE:30:0:%H%:%M";
+$scales[57600] = "MINUTE:30:HOUR:1:HOUR:1:0:%H";
+$scales[172800] = "HOUR:1:HOUR:6:HOUR:2:0:%H";
+$scales[691200] = "HOUR:2:HOUR:12:DAY:1:0:%D %d";
+$scales[2764800] = "DAY:1:WEEK:1:WEEK:1:0:Week %W";
+$scales[16070400] = "WEEK:1:MONTH:1:MONTH:1:0:%b";
+$scales[42854400] = "MONTH:1:MONTH:1:MONTH:1:0:%b";
+
+$archives = array();
+$archives[1] = 1200;
+$archives[5] = 720;
+$archives[60] = 1860;
+$archives[1440] = 2284;
+
+$defOptions = array(
+ 'to' => 1,
+ 'parts' => 1,
+ 'precision' => 'minute',
+ 'distance' => FALSE,
+ 'separator' => ', '
+);
+
+/* always set the average to the highest value as a fallback */
+$average = 1440 * 60;
+foreach ($archives as $rra => $value) {
+ $archivestart = $now - ($rra * 60 * $value);
+ if ($archivestart <= $start) {
+ $average = $rra * 60;
+ break;
+ }
+}
+
+foreach ($scales as $scalelength => $value) {
+ if ($scalelength >= $seconds) {
+ $scale = $value;
+ break;
+ }
+}
+
+// log_error("start $start, end $end, archivestart $archivestart, average $average, scale $scale, seconds $seconds");
+
+/* Deduce a interface if possible and use the description */
+$curif = explode("-", $curdatabase);
+$curif = "$curif[0]";
+$friendly = convert_friendly_interface_to_friendly_descr(strtolower($curif));
+if ($friendly == "") {
+ $friendly = $curif;
+}
+$search = array("-", ".rrd", $curif);
+$replace = array(" :: ", "", $friendly);
+$prettydb = ucwords(str_replace($search, $replace, $curdatabase));
+
+$rrddbpath = "/var/db/rrd/";
+$rrdtmppath = "/tmp/";
+$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
+$uptime = "/usr/bin/uptime";
+$sed = "/usr/bin/sed";
+
+$havg = timeDiff($average, $defOptions);
+$hperiod = timeDiff($seconds, $defOptions);
+$data = true;
+
+/* Don't leave it up to RRD Tool to select the RRA and resolution to use. */
+/* Specify the RRA and resolution to use per the graph havg value. */
+switch ($havg) {
+ case "1 minute": $step = 60; break;
+ case "5 minutes": $step = 300; break;
+ case "1 hour": $step = 3600; break;
+ case "1 day": $step = 86400; break;
+ default: $step = 0; break;
+}
+
+$rrddbpath = "/var/db/rrd/";
+chdir($rrddbpath);
+$databases = glob("*.rrd");
+rsort($databases);
+
+/* compare bytes/sec counters, divide bps by 8 */
+read_altq_config();
+if ($altq_list_queues[$curif]) {
+ $altq =& $altq_list_queues[$curif];
+ switch ($altq->GetBwscale()) {
+ case "Gb":
+ $factor = 1024 * 1024 * 1024;
+ break;
+ case "Mb":
+ $factor = 1024 * 1024;
+ break;
+ case "Kb":
+ $factor = 1024;
+ break;
+ case "b":
+ default:
+ $factor = 1;
+ break;
+ }
+ $upstream = (($altq->GetBandwidth()*$factor)/8);
+ if ($upstream != 0) {
+ $downstream = $upstream; /* XXX: Ugly hack */
+ } else {
+ $downstream = $upstream = 12500000;
+ }
+ $upif = $curif;
+ $downif = "lan"; /* XXX should this be set to something else?! */
+} else {
+ $altq = null;
+ $downstream = 12500000;
+ $upstream = 12500000;
+ $upif = "wan";
+ $downif = "lan";
+}
+
+$speedlimit = ($upstream + $downstream);
+
+/* Set default colors explicitly, the theme can then override them below.
+ This prevents missing colors in themes from crashing the graphs. */
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00', '990000', '0000FF', '000000', 'DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00', '990000', '0000FF', 'DD9B00', '000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00', '990000', '0000FF', '666666', 'DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF', '00E344', 'FF0000', '000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000', '7B0000', '0080FF', '00E344', 'FF0000', '2217AA', 'FFC875', 'FF9900', 'CC0000');
+$colorqueuesdown = array('000000', '7B7B7B', '999999', 'BBBBBB', 'CCCCCC', 'D9D9D9', 'EEEEEE', 'FFFFFF', 'CCCCCC');
+
+$colorqueuesdropup = array('000000', '7B0000', '0080FF', '00E344', 'FF0000', '2217AA', 'FFC875', 'FF9900', 'CC0000');
+$colorqueuesdropdown = array('000000', '7B7B7B', '999999', 'BBBBBB', 'CCCCCC', 'D9D9D9', 'EEEEEE', 'FFFFFF', 'CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000', 'a83c3c', 'b36666', 'bd9090', 'cccccc', '000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333', 'a83c3c', '999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* NTPD stats offset, clk jit, sys jit, wander */
+$colorntpd = array('0080FF', '00E344', 'FF0000', '000000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+/* select theme colors if the inclusion file exists */
+$rrdcolors = "{$g['www_path']}/themes/{$g['theme']}/rrdcolors.inc.php";
+if (file_exists($rrdcolors)) {
+ include($rrdcolors);
+} else {
+ log_error(sprintf(gettext("rrdcolors.inc.php for theme %s does not exist, using defaults!"), $g['theme']));
+}
+
+switch ($curstyle) {
+ case "absolute":
+ $multiplier = 1;
+ $AREA = "LINE1";
+ break;
+ default:
+ $multiplier = -1;
+ $AREA = "AREA";
+ break;
+}
+
+function timeDiff($time, $opt = array()) {
+ // The default values
+ $defOptions = array(
+ 'to' => 0,
+ 'parts' => 1,
+ 'precision' => 'second',
+ 'distance' => TRUE,
+ 'separator' => ', '
+ );
+ $opt = array_merge($defOptions, $opt);
+ // Default to current time if no to point is given
+ (!$opt['to']) && ($opt['to'] = time());
+ // Init an empty string
+ $str = '';
+ // To or From computation
+ $diff = ($opt['to'] > $time) ? $opt['to'] - $time : $time - $opt['to'];
+ // An array of label => periods of seconds;
+ $periods = array(
+ 'decade' => 315569260,
+ 'year' => 31539600,
+ 'month' => 2629744,
+ 'week' => 604800,
+ 'day' => 86400,
+ 'hour' => 3600,
+ 'minute' => 60,
+ 'second' => 1
+ );
+ // 31539600, 31556926, 31622400
+ // Round to precision
+ if ($opt['precision'] != 'second') {
+ $diff = round(($diff / $periods[$opt['precision']])) * $periods[$opt['precision']];
+ }
+ // Report the value is 'less than 1 ' precision period away
+ (0 == $diff) && ($str = 'less than 1 ' . $opt['precision']);
+ // Loop over each period
+ foreach ($periods as $label => $value) {
+ // Stitch together the time difference string
+ (($x = round($diff / $value)) && $opt['parts']--) && $str .= ($str ? $opt['separator'] : '') . ($x .' '. $label. ($x > 1 ? 's' : ''));
+ // Stop processing if no more parts are going to be reported.
+ if ($opt['parts'] == 0 || $label == $opt['precision']) {
+ break;
+ }
+ // Get ready for the next pass
+ $diff -= $x * $value;
+ }
+ $opt['distance'] && $str .= ($str && $opt['to'] >= $time) ? ' ago' : ' away';
+ return $str;
+}
+
+
+if ((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for traffic stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step --vertical-label \"bits/sec\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:$curif-in_bytes_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-out_bytes_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-in_bytes_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-out_bytes_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step ";
+
+ $graphcmd .= "DEF:$curif-in6_bytes_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-out6_bytes_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-in6_bytes_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step ";
+ $graphcmd .= "DEF:$curif-out6_bytes_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step ";
+
+ $graphcmd .= "CDEF:\"$curif-in_bits_pass=$curif-in_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits_pass=$curif-out_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-in_bits_block=$curif-in_bytes_block,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits_block=$curif-out_bytes_block,8,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-in6_bits_pass=$curif-in6_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bits_pass=$curif-out6_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-in6_bits_block=$curif-in6_bytes_block,8,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bits_block=$curif-out6_bytes_block,8,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-in_bytes=$curif-in_bytes_pass,$curif-in_bytes_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bytes=$curif-out_bytes_pass,$curif-out_bytes_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-in_bits=$curif-in_bits_pass,$curif-in_bits_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits=$curif-out_bits_pass,$curif-out_bits_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-in6_bytes=$curif-in6_bytes_pass,$curif-in6_bytes_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bytes=$curif-out6_bytes_pass,$curif-out6_bytes_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-in6_bits=$curif-in6_bits_pass,$curif-in6_bits_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bits=$curif-out6_bits_pass,$curif-out6_bits_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bits_io=$curif-in_bits,$curif-out_bits,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits_block_neg=$curif-out_bits_block,$multiplier,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits_pass_neg=$curif-out_bits_pass,$multiplier,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bits6_io=$curif-in6_bits,$curif-out6_bits,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bits_block_neg=$curif-out6_bits_block,$multiplier,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_bits_pass_neg=$curif-out6_bits_pass,$multiplier,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_in_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_in_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$average,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_in6_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out6_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_in6_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out6_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$average,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_pass=$curif-bytes_in_pass,$curif-bytes_out_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_block=$curif-bytes_in_block,$curif-bytes_out_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_pass6=$curif-bytes_in6_pass,$curif-bytes_out6_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_block6=$curif-bytes_in6_block,$curif-bytes_out6_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_in_t_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out_t_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_in_t_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out_t_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$seconds,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_in6_t_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out6_t_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_in6_t_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_out6_t_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$seconds,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_t_pass=$curif-bytes_in_t_pass,$curif-bytes_out_t_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_t_block=$curif-bytes_in_t_block,$curif-bytes_out_t_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_t=$curif-bytes_t_pass,$curif-bytes_t_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-bytes_t_pass6=$curif-bytes_in6_t_pass,$curif-bytes_out6_t_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_t_block6=$curif-bytes_in6_t_block,$curif-bytes_out6_t_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-bytes_t6=$curif-bytes_t_pass6,$curif-bytes_t_block6,+\" ";
+ $graphcmd .= "VDEF:\"$curif-in_bits_95=$curif-in_bits,95,PERCENT\" ";
+ $graphcmd .= "CDEF:\"$curif-out_bits_mul=$curif-out_bits,$multiplier,*\" ";
+ $perc = $multiplier > 0 ? "95" : "5";
+ $graphcmd .= "VDEF:\"$curif-out_bits_95=$curif-out_bits_mul,{$perc},PERCENT\" ";
+
+ $graphcmd .= "AREA:\"$curif-in_bits_block#{$colortrafficdown[1]}:$curif-in-block\" ";
+ $graphcmd .= "AREA:\"$curif-in_bits_pass#{$colortrafficdown[0]}:$curif-in-pass:STACK\" ";
+ $graphcmd .= "AREA:\"$curif-in6_bits_block#{$colortrafficdown[3]}:$curif-in6-block:STACK\" ";
+ $graphcmd .= "AREA:\"$curif-in6_bits_pass#{$colortrafficdown[2]}:$curif-in6-pass:STACK\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+
+ $graphcmd .= "{$AREA}:\"$curif-out_bits_block_neg#{$colortrafficup[1]}:$curif-out-block\" ";
+ $graphcmd .= "{$AREA}:\"$curif-out_bits_pass_neg#{$colortrafficup[0]}:$curif-out-pass:STACK\" ";
+ $graphcmd .= "{$AREA}:\"$curif-out6_bits_block_neg#{$colortrafficup[3]}:$curif-out6-block:STACK\" ";
+ $graphcmd .= "{$AREA}:\"$curif-out6_bits_pass_neg#{$colortrafficup[2]}:$curif-out6-pass:STACK\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "HRULE:\"$curif-in_bits_95#{$colortraffic95[1]}:$curif-in (95%)\" ";
+ $graphcmd .= "HRULE:\"$curif-out_bits_95#{$colortraffic95[0]}:$curif-out (95%)\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t maximum\t average\t\t current\t period\t 95th percentile\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv4 in-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_95:%7.2lf %sb/s\" ";
+
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv4 out-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_95:%7.2lf %sb/s\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv4 in-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv4 out-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv6 in-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_pass:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv6 out-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_pass:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv6 in-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_in6_t_block:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"IPv6 out-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"$curif-bytes_out6_t_block:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif (strstr($curdatabase, "-throughput.rrd")) {
+ /* define graphcmd for throughput stats */
+ /* this gathers all interface statistics, the database does not actually exist */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"bits/sec\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+
+ $iflist = get_configured_interface_list();
+ $g = 0;
+ $operand = "";
+ $comma = "";
+ $graphtputbip = "";
+ $graphtputbop = "";
+ $graphtputbtp = "";
+ $graphtputbib = "";
+ $graphtputbob = "";
+ $graphtputbtb = "";
+ $graphtputbyip = "";
+ $graphtputbyop = "";
+ $graphtputbytp = "";
+ $graphtputbyib = "";
+ $graphtputbyob = "";
+ $graphtputbytb = "";
+ foreach ($iflist as $ifname) {
+ /* collect all interface stats */
+ $graphcmd .= "DEF:\"{$ifname}-in_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:inpass:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"{$ifname}-out_bytes_pass={$rrddbpath}{$ifname}-traffic.rrd:outpass:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"{$ifname}-in_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:inblock:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"{$ifname}-out_bytes_block={$rrddbpath}{$ifname}-traffic.rrd:outblock:AVERAGE:step=$step\" ";
+
+ $graphcmd .= "CDEF:\"{$ifname}-in_bytes={$ifname}-in_bytes_pass,{$ifname}-in_bytes_block,+\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-out_bytes={$ifname}-out_bytes_pass,{$ifname}-out_bytes_block,+\" ";
+
+ $graphcmd .= "CDEF:\"{$ifname}-in_bits_pass={$ifname}-in_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-out_bits_pass={$ifname}-out_bytes_pass,8,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bits_io_pass={$ifname}-in_bits_pass,{$ifname}-out_bits_pass,+\" ";
+
+ $graphcmd .= "CDEF:\"{$ifname}-in_bits_block={$ifname}-in_bytes_block,8,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-out_bits_block={$ifname}-out_bytes_block,8,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bits_io_block={$ifname}-in_bits_block,{$ifname}-out_bits_block,+\" ";
+
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_in_pass={$ifname}-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_out_pass={$ifname}-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_in_block={$ifname}-in_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_out_block={$ifname}-out_bytes_block,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_pass={$ifname}-bytes_in_pass,{$ifname}-bytes_out_pass,+\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_block={$ifname}-bytes_in_pass,{$ifname}-bytes_out_block,+\" ";
+
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_pass={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_in_t_block={$ifname}-in_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-in_bytes_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_pass={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_out_t_block={$ifname}-out_bytes,0,$speedlimit,LIMIT,UN,0,{$ifname}-out_bytes_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_t_pass={$ifname}-bytes_in_t_pass,{$ifname}-bytes_out_t_pass,+\" ";
+ $graphcmd .= "CDEF:\"{$ifname}-bytes_t_block={$ifname}-bytes_in_t_block,{$ifname}-bytes_out_t_block,+\" ";
+ if ($g > 0) {
+ $operand .= ",+";
+ $comma = ",";
+ }
+ $graphtputbip .= "{$comma}{$ifname}-in_bits_pass";
+ $graphtputbop .= "{$comma}{$ifname}-out_bits_pass";
+ $graphtputbtp .= "{$comma}{$ifname}-bits_io_pass";
+ $graphtputbib .= "{$comma}{$ifname}-in_bits_block";
+ $graphtputbob .= "{$comma}{$ifname}-out_bits_block";
+ $graphtputbtb .= "{$comma}{$ifname}-bits_io_block";
+ $graphtputbyip .= "{$comma}{$ifname}-bytes_in_t_pass";
+ $graphtputbyop .= "{$comma}{$ifname}-bytes_out_t_pass";
+ $graphtputbyib .= "{$comma}{$ifname}-bytes_in_t_block";
+ $graphtputbyob .= "{$comma}{$ifname}-bytes_out_t_block";
+ $graphtputbytp .= "{$comma}{$ifname}-bytes_t_pass";
+ $graphtputbytb .= "{$comma}{$ifname}-bytes_t_block";
+ $g++;
+ }
+ $graphcmd .= "CDEF:\"tput-in_bits_pass={$graphtputbip}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-out_bits_pass={$graphtputbop}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bits_io_pass={$graphtputbtp}{$operand}\" ";
+
+ $graphcmd .= "CDEF:\"tput-in_bits_block={$graphtputbib}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-out_bits_block={$graphtputbob}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bits_io_block={$graphtputbtb}{$operand}\" ";
+
+ $graphcmd .= "CDEF:\"tput-out_bits_pass_neg=tput-out_bits_pass,$multiplier,*\" ";
+ $graphcmd .= "CDEF:\"tput-out_bits_block_neg=tput-out_bits_block,$multiplier,*\" ";
+
+ $graphcmd .= "CDEF:\"tput-bytes_in_t_pass={$graphtputbyip}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bytes_out_t_pass={$graphtputbyop}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bytes_t_pass={$graphtputbytp}{$operand}\" ";
+
+ $graphcmd .= "CDEF:\"tput-bytes_in_t_block={$graphtputbyib}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bytes_out_t_block={$graphtputbyob}{$operand}\" ";
+ $graphcmd .= "CDEF:\"tput-bytes_t_block={$graphtputbytb}{$operand}\" ";
+
+ $graphcmd .= "AREA:\"tput-in_bits_block#{$colortrafficdown[0]}:in-block \" ";
+ $graphcmd .= "AREA:\"tput-in_bits_pass#{$colortrafficdown[1]}:in-pass \" ";
+
+ $graphcmd .= "{$AREA}:\"tput-out_bits_block_neg#{$colortrafficup[1]}:out-block \" ";
+ $graphcmd .= "{$AREA}:\"tput-out_bits_pass_neg#{$colortrafficup[0]}:out-pass \" ";
+
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t maximum average current period\\n\" ";
+ $graphcmd .= "COMMENT:\"in-pass\t\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-bytes_in_t_pass:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-pass\t\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_pass:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_pass:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"in-block\t\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-in_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-block\t\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_block:MAX:%7.2lf %sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-out_bits_block:LAST:%7.2lf %Sb/s\" ";
+ $graphcmd .= "GPRINT:\"tput-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-packets.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for packets stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"packets/sec\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-in_pps_pass=$rrddbpath$curdatabase:inpass:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-out_pps_pass=$rrddbpath$curdatabase:outpass:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-in_pps_block=$rrddbpath$curdatabase:inblock:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-out_pps_block=$rrddbpath$curdatabase:outblock:AVERAGE:step=$step\" ";
+
+ $graphcmd .= "DEF:\"$curif-in6_pps_pass=$rrddbpath$curdatabase:inpass6:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-out6_pps_pass=$rrddbpath$curdatabase:outpass6:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-in6_pps_block=$rrddbpath$curdatabase:inblock6:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-out6_pps_block=$rrddbpath$curdatabase:outblock6:AVERAGE:step=$step\" ";
+
+ $graphcmd .= "CDEF:\"$curif-in_pps=$curif-in_pps_pass,$curif-in_pps_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out_pps=$curif-out_pps_pass,$curif-out_pps_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out_pps_pass_neg=$curif-out_pps_pass,$multiplier,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out_pps_block_neg=$curif-out_pps_block,$multiplier,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-in6_pps=$curif-in6_pps_pass,$curif-in6_pps_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_pps=$curif-out6_pps_pass,$curif-out6_pps_block,+\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_pps_pass_neg=$curif-out6_pps_pass,$multiplier,*\" ";
+ $graphcmd .= "CDEF:\"$curif-out6_pps_block_neg=$curif-out6_pps_block,$multiplier,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_in_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_in_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$average,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_in6_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out6_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_in6_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$average,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out6_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$average,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_io=$curif-in_pps,$curif-out_pps,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_pass=$curif-pps_in_pass,$curif-pps_out_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_block=$curif-pps_in_block,$curif-pps_out_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_io6=$curif-in6_pps,$curif-out6_pps,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_pass6=$curif-pps_in6_pass,$curif-pps_out6_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_block6=$curif-pps_in6_block,$curif-pps_out6_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_in_t_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out_t_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_in_t_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out_t_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$seconds,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_in6_t_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out6_t_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_in6_t_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$seconds,*\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_out6_t_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$seconds,*\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_t_pass=$curif-pps_in_t_pass,$curif-pps_out_t_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_t_block=$curif-pps_in_t_block,$curif-pps_out_t_block,+\" ";
+
+ $graphcmd .= "CDEF:\"$curif-pps_t_pass6=$curif-pps_in6_t_pass,$curif-pps_out6_t_pass,+\" ";
+ $graphcmd .= "CDEF:\"$curif-pps_t_block6=$curif-pps_in6_t_block,$curif-pps_out6_t_block,+\" ";
+
+ $graphcmd .= "AREA:\"$curif-in_pps_block#{$colorpacketsdown[1]}:$curif-in-block\" ";
+ $graphcmd .= "AREA:\"$curif-in_pps_pass#{$colorpacketsdown[0]}:$curif-in-pass:STACK\" ";
+ $graphcmd .= "AREA:\"$curif-in6_pps_block#{$colorpacketsdown[3]}:$curif-in6-block:STACK\" ";
+ $graphcmd .= "AREA:\"$curif-in6_pps_pass#{$colorpacketsdown[2]}:$curif-in6-pass:STACK\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "$AREA:\"$curif-out_pps_block_neg#{$colorpacketsup[1]}:$curif-out-block\" ";
+ $graphcmd .= "$AREA:\"$curif-out_pps_pass_neg#{$colorpacketsup[0]}:$curif-out-pass:STACK\" ";
+ $graphcmd .= "$AREA:\"$curif-out6_pps_block_neg#{$colorpacketsup[3]}:$curif-out6-block:STACK\" ";
+ $graphcmd .= "$AREA:\"$curif-out6_pps_pass_neg#{$colorpacketsup[2]}:$curif-out6-pass:STACK\" ";
+
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\t period\\n\" ";
+ $graphcmd .= "COMMENT:\"in-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_pass:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_pass:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_pass:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_in_t_pass:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-pass\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_pass:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_pass:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_pass:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_out_t_pass:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"in-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_block:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_block:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in_pps_block:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_in_t_block:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-block\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_block:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_block:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out_pps_block:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_out_t_block:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"in-pass6\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_pass:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_in6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-pass6\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_pass:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_out6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"in-block6\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_block:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_block:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-in6_pps_block:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_in6_t_block:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"out-pass6\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_block:MAX:%7.2lf %s pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_block:AVERAGE:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-out6_pps_block:LAST:%7.2lf %S pps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pps_out6_t_block:AVERAGE:%7.2lf %s pkts\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-wireless.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for packets stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"snr/channel/rate\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-snr=$rrddbpath$curdatabase:snr:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-rate=$rrddbpath$curdatabase:rate:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-channel=$rrddbpath$curdatabase:channel:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"$curif-snr#{$colorwireless[0]}:$curif-snr\" ";
+ $graphcmd .= "LINE2:\"$curif-rate#{$colorwireless[1]}:$curif-rate\" ";
+ $graphcmd .= "LINE2:\"$curif-channel#{$colorwireless[2]}:$curif-channel\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" ";
+ $graphcmd .= "COMMENT:\"SNR\t\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-snr:MAX:%7.2lf dBi \" ";
+ $graphcmd .= "GPRINT:\"$curif-snr:AVERAGE:%7.2lf dBi \" ";
+ $graphcmd .= "GPRINT:\"$curif-snr:LAST:%7.2lf dBi\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"RATE\t\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-rate:MAX:%7.2lf Mb \" ";
+ $graphcmd .= "GPRINT:\"$curif-rate:AVERAGE:%7.2lf Mb \" ";
+ $graphcmd .= "GPRINT:\"$curif-rate:LAST:%7.2lf Mb\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Channel\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-channel:MAX:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-channel:AVERAGE:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-channel:LAST:%7.2lf\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-vpnusers.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for vpn users stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"users\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-users=$rrddbpath$curdatabase:users:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"$curif-users#{$colorvpnusers[0]}:$curif-users\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t maximum\t\t average\t current\\n\" ";
+ $graphcmd .= "COMMENT:\"Users Online\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-users:MAX:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-users:AVERAGE:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-users:LAST:%7.2lf \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-states.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for states stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start -$seconds -e -$average --step $step ";
+ $graphcmd .= "--vertical-label \"states, ip\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-pfrate=$rrddbpath$curdatabase:pfrate:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-pfstates=$rrddbpath$curdatabase:pfstates:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-pfnat=$rrddbpath$curdatabase:pfnat:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-srcip=$rrddbpath$curdatabase:srcip:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"$curif-dstip=$rrddbpath$curdatabase:dstip:AVERAGE:step=$step\" ";
+ $graphcmd .= "CDEF:\"$curif-pfrate_t=$curif-pfrate,0,1000000,LIMIT,UN,0,$curif-pfrate,IF,$seconds,*\" ";
+ $graphcmd .= "LINE1:\"$curif-pfrate#{$colorstates[0]}:$curif-pfrate\" ";
+ $graphcmd .= "LINE1:\"$curif-pfstates#{$colorstates[1]}:$curif-pfstates\" ";
+ $graphcmd .= "LINE1:\"$curif-pfnat#{$colorstates[2]}:$curif-pfnat\" ";
+ $graphcmd .= "LINE1:\"$curif-srcip#{$colorstates[3]}:$curif-srcip\" ";
+ $graphcmd .= "LINE1:\"$curif-dstip#{$colorstates[4]}:$curif-dstip\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t minimum average maximum current period\\n\" ";
+ $graphcmd .= "COMMENT:\"state changes\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfrate:MIN:%7.2lf %s cps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfrate:AVERAGE:%7.2lf %s cps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfrate:MAX:%7.2lf %s cps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfrate:LAST:%7.2lf %S cps\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfrate_t:AVERAGE:%7.2lf %s chg\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"filter states\" ";
+ $graphcmd .= "GPRINT:\"$curif-pfstates:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfstates:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfstates:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfstates:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"nat states \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfnat:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfnat:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfnat:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-pfnat:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Source addr. \" ";
+ $graphcmd .= "GPRINT:\"$curif-srcip:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-srcip:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-srcip:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-srcip:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Dest. addr. \" ";
+ $graphcmd .= "GPRINT:\"$curif-dstip:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-dstip:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-dstip:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"$curif-dstip:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-processor.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for processor stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"utilization, number\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"user=$rrddbpath$curdatabase:user:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"nice=$rrddbpath$curdatabase:nice:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"system=$rrddbpath$curdatabase:system:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"interrupt=$rrddbpath$curdatabase:interrupt:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"processes=$rrddbpath$curdatabase:processes:AVERAGE:step=$step\" ";
+ $graphcmd .= "AREA:\"user#{$colorprocessor[0]}:user\" ";
+ $graphcmd .= "AREA:\"nice#{$colorprocessor[1]}:nice:STACK\" ";
+ $graphcmd .= "AREA:\"system#{$colorprocessor[2]}:system:STACK\" ";
+ $graphcmd .= "AREA:\"interrupt#{$colorprocessor[3]}:interrupt:STACK\" ";
+ $graphcmd .= "LINE2:\"processes#{$colorprocessor[4]}:processes\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
+ $graphcmd .= "COMMENT:\"User util. \" ";
+ $graphcmd .= "GPRINT:\"user:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"user:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"user:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"user:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Nice util. \" ";
+ $graphcmd .= "GPRINT:\"nice:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"nice:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"nice:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"nice:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"System util. \" ";
+ $graphcmd .= "GPRINT:\"system:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"system:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"system:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"system:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Interrupt \" ";
+ $graphcmd .= "GPRINT:\"interrupt:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"interrupt:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"interrupt:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"interrupt:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Processes \" ";
+ $graphcmd .= "GPRINT:\"processes:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"processes:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"processes:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"processes:LAST:%7.2lf %s \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-memory.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for memory usage stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"utilization, percent\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"active=$rrddbpath$curdatabase:active:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"inactive=$rrddbpath$curdatabase:inactive:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"free=$rrddbpath$curdatabase:free:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"wire=$rrddbpath$curdatabase:wire:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"active#{$colormemory[0]}:active\" ";
+ $graphcmd .= "LINE2:\"inactive#{$colormemory[1]}:inactive\" ";
+ $graphcmd .= "LINE2:\"free#{$colormemory[2]}:free\" ";
+ $graphcmd .= "LINE2:\"cache#{$colormemory[3]}:cache\" ";
+ $graphcmd .= "LINE2:\"wire#{$colormemory[4]}:wire\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
+ $graphcmd .= "COMMENT:\"Active. \" ";
+ $graphcmd .= "GPRINT:\"active:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"active:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"active:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"active:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Inactive. \" ";
+ $graphcmd .= "GPRINT:\"inactive:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"inactive:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"inactive:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"inactive:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Free. \" ";
+ $graphcmd .= "GPRINT:\"free:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"free:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"free:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"free:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Cached. \" ";
+ $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Wired. \" ";
+ $graphcmd .= "GPRINT:\"wire:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wire:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wire:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wire:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-mbuf.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for mbuf usage stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"utilization, percent\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} clusters - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"current=$rrddbpath$curdatabase:current:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"cache=$rrddbpath$curdatabase:cache:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"total=$rrddbpath$curdatabase:total:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"max=$rrddbpath$curdatabase:max:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"current#{$colormbuf[0]}:current\" ";
+ $graphcmd .= "LINE2:\"cache#{$colormbuf[1]}:cache\" ";
+ $graphcmd .= "LINE2:\"total#{$colormbuf[2]}:total\" ";
+ $graphcmd .= "LINE2:\"max#{$colormbuf[3]}:max\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
+ $graphcmd .= "COMMENT:\"Current. \" ";
+ $graphcmd .= "GPRINT:\"current:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"current:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"current:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"current:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Cache. \" ";
+ $graphcmd .= "GPRINT:\"cache:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cache:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Total. \" ";
+ $graphcmd .= "GPRINT:\"total:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"total:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"total:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"total:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Max. \" ";
+ $graphcmd .= "GPRINT:\"max:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"max:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"max:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"max:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-queues.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for queue stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"bits/sec\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ if ($altq) {
+ $a_queues =& $altq->get_queue_list();
+ $t = 0;
+ } else {
+ $a_queues = array();
+ $i = 0;
+ $t = 0;
+ }
+ foreach ($a_queues as $name => $q) {
+ $color = "$colorqueuesup[$t]";
+ if ($t > 0) {
+ $stack = ":STACK";
+ }
+ $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" ";
+ $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" ";
+ $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" ";
+ $graphcmd .= "$AREA:\"$name-bits_out#${color}:$name$stack\" ";
+ $t++;
+ if ($t > 7) {
+ $t = 0;
+ }
+ }
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-queuedrops.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for queuedrop stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"drops / sec\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ if ($altq) {
+ $a_queues =& $altq->get_queue_list();
+ $t = 0;
+ } else {
+ $a_queues = array();
+ $i = 0;
+ $t = 0;
+ }
+ foreach ($a_queues as $name => $q) {
+ $color = "$colorqueuesdropup[$t]";
+ if ($t > 0) {
+ $stack = ":STACK";
+ }
+ $graphcmd .= "DEF:\"$name=$rrddbpath$curdatabase:$name:AVERAGE:step=$step\" ";
+ $graphcmd .= "CDEF:\"$name-bytes_out=$name,0,$speedlimit,LIMIT,UN,0,$name,IF\" ";
+ $graphcmd .= "CDEF:\"$name-bits_out=$name-bytes_out,8,*\" ";
+ $graphcmd .= "CDEF:\"$name-bits_out_neg=$name-bits_out,$multiplier,*\" ";
+ $graphcmd .= "$AREA:\"$name-bits_out_neg#${color}:$name$stack\" ";
+ $t++;
+ if ($t > 7) {
+ $t = 0;
+ }
+ }
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-quality.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* make a link quality graphcmd */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\
+ --start $start --end $end --step $step \\
+ --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\
+ --color SHADEA#eeeeee --color SHADEB#eeeeee \\
+ --vertical-label \"ms / %\" \\
+ --height 200 --width 620 \\
+ --lower-limit 0 \\
+ DEF:delayraw=$rrddbpath$curdatabase:delay:AVERAGE:step=$step \\
+ DEF:loss=$rrddbpath$curdatabase:loss:AVERAGE:step=$step \\
+ \"CDEF:delay=delayraw,1000,*\" \\
+ \"CDEF:roundavg=delay,PREV(delay),+,2,/\" \\
+ \"CDEF:loss10=loss,$multiplier,*\" \\
+ \"CDEF:r0=delay,20,MIN\" \\
+ \"CDEF:r1=delay,60,MIN\" \\
+ \"CDEF:r2=delay,180,MIN\" \\
+ \"CDEF:r3=delay,420,MIN\" \\
+ COMMENT:\"\t\t\t\t\tDelay\t\t\tPacket loss\\n\" \\
+ AREA:delay#$colorqualityrtt[0]:\"> 420 ms\" \\
+ GPRINT:delay:MIN:\"\t\tMin\\: %7.2lf ms\" \\
+ GPRINT:loss:MIN:\"\tMin\\: %3.1lf %%\\n\" \\
+ AREA:r3#$colorqualityrtt[1]:\"180-420 ms\" \\
+ GPRINT:delay:AVERAGE:\"\t\tAvg\\: %7.2lf ms\" \\
+ GPRINT:loss:AVERAGE:\"\tAvg\\: %3.1lf %%\\n\" \\
+ AREA:r2#$colorqualityrtt[2]:\"60-180 ms\" \\
+ GPRINT:delay:MAX:\"\t\tMax\\: %7.2lf ms\" \\
+ GPRINT:loss:MAX:\"\tMax\\: %3.1lf %%\\n\" \\
+ AREA:r1#$colorqualityrtt[3]:\"20-60 ms\\n\" \\
+ AREA:r0#$colorqualityrtt[4]:\"< 20 ms\" \\
+ GPRINT:delay:LAST:\"\t\tLast\\: %7.2lf ms\" \\
+ GPRINT:loss:LAST:\"\tLast\: %3.1lf %%\\n\" \\
+ AREA:loss10#$colorqualityloss:\"Packet loss\\n\" \\
+ LINE1:delay#$colorqualityrtt[5]:\"Delay average\\n\" \\
+ COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\"";
+} elseif ((strstr($curdatabase, "spamd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* graph a spamd statistics graph */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png \\
+ --start $start --end $end --step $step \\
+ --title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" \\
+ --color SHADEA#eeeeee --color SHADEB#eeeeee \\
+ --vertical-label=\"Conn / Time, sec.\" \\
+ --height 200 --width 620 --no-gridfit \\
+ --lower-limit 0 \\
+ DEF:consmin=$rrddbpath$curdatabase:conn:MIN:step=$step \\
+ DEF:consavg=$rrddbpath$curdatabase:conn:AVERAGE:step=$step \\
+ DEF:consmax=$rrddbpath$curdatabase:conn:MAX:step=$step \\
+ DEF:timemin=$rrddbpath$curdatabase:time:MIN:step=$step \\
+ DEF:timeavg=$rrddbpath$curdatabase:time:AVERAGE:step=$step \\
+ DEF:timemax=$rrddbpath$curdatabase:time:MAX:step=$step \\
+ \"CDEF:timeminadj=timemin,0,86400,LIMIT,UN,0,timemin,IF\" \\
+ \"CDEF:timeavgadj=timeavg,0,86400,LIMIT,UN,0,timeavg,IF\" \\
+ \"CDEF:timemaxadj=timemax,0,86400,LIMIT,UN,0,timemax,IF\" \\
+ \"CDEF:t1=timeminadj,timeavgadj,+,2,/,timeminadj,-\" \\
+ \"CDEF:t2=timeavgadj,timemaxadj,+,2,/,timeminadj,-,t1,-\" \\
+ \"CDEF:t3=timemaxadj,timeminadj,-,t1,-,t2,-\" \\
+ AREA:timeminadj \\
+ AREA:t1#$colorspamdtime[0]::STACK \\
+ AREA:t2#$colorspamdtime[1]::STACK \\
+ AREA:t3#$colorspamdtime[2]::STACK \\
+ LINE2:timeavgadj#$colorspamdtime[3]:\"Time \" \\
+ GPRINT:timeminadj:MIN:\"Min\\:%6.2lf\\t\" \\
+ GPRINT:timeavgadj:AVERAGE:\"Avg\\:%6.2lf\\t\" \\
+ GPRINT:timemaxadj:MAX:\"Max\\:%6.2lf\\n\" \\
+ AREA:consmax#$colorspamdconn[0] \\
+ AREA:consmin#$colorspamdconn[1] \\
+ LINE1:consmin#$colorspamdconn[2] \\
+ LINE1:consmax#$colorspamdconn[3] \\
+ LINE1:consavg#$colorspamdconn[4]:\"Cons \" \\
+ GPRINT:consmin:MIN:\"Min\\:%6.2lf\\t\" \\
+ GPRINT:consavg:AVERAGE:\"Avg\\:%6.2lf\\t\" \\
+ GPRINT:consmax:MAX:\"Max\\:%6.2lf\\n\" \\
+ COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-cellular.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"signal\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-rssi=$rrddbpath$curdatabase:rssi:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"$curif-rssi#{$colorwireless[0]}:$curif-rssi\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\\n\" ";
+ $graphcmd .= "COMMENT:\"RSSI\t\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-rssi:MAX:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-rssi:AVERAGE:%7.2lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-rssi:LAST:%7.2lf \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-loggedin.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for online Captive Portal users stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--base=1000 ";
+ $graphcmd .= "--lower-limit=0 ";
+ $graphcmd .= "--slope-mode ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-loggedinusers=$rrddbpath$curdatabase:loggedinusers:AVERAGE:step=$step\" ";
+ $graphcmd .= "CDEF:\"$curif-totalusers_t=PREV,UN,0,PREV,IF,$curif-loggedinusers,+\" ";
+ $graphcmd .= "CDEF:\"$curif-totalusers_d=$curif-totalusers_t,FLOOR\" ";
+ $graphcmd .= "AREA:\"$curif-totalusers_d#{$colorcaptiveportalusers[0]}:Total logged in users\" ";
+ $graphcmd .= "GPRINT:\"$curif-totalusers_d:MAX:%8.0lf \\n\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "-concurrent.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for online Captive Portal users stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"Captive Portal Users\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--base=1000 ";
+ $graphcmd .= "--lower-limit=0 ";
+ $graphcmd .= "--slope-mode ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"$curif-concurrentusers=$rrddbpath$curdatabase:concurrentusers:AVERAGE:step=$step\" ";
+ $graphcmd .= "AREA:\"$curif-concurrentusers#{$colorcaptiveportalusers[0]}:Concurrent Users\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t current\t\t average\t maximum\\n\" ";
+ $graphcmd .= "COMMENT:\"Users Online\t\" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:LAST:%8.0lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:AVERAGE:%8.0lf \" ";
+ $graphcmd .= "GPRINT:\"$curif-concurrentusers:MAX:%8.0lf \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} elseif ((strstr($curdatabase, "ntpd.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
+ /* define graphcmd for ntpd (was: mbuf) usage stats */
+ $graphcmd = "$rrdtool graph $rrdtmppath$curdatabase-$curgraph.png ";
+ $graphcmd .= "--start $start --end $end --step $step ";
+ $graphcmd .= "--vertical-label \"time\" ";
+ $graphcmd .= "--color SHADEA#eeeeee --color SHADEB#eeeeee ";
+ $graphcmd .= "--title \"" . php_uname('n') . " - {$prettydb} - {$hperiod} - {$havg} average\" ";
+ $graphcmd .= "--height 200 --width 620 ";
+ $graphcmd .= "DEF:\"offset=$rrddbpath$curdatabase:offset:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"sjit=$rrddbpath$curdatabase:sjit:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"cjit=$rrddbpath$curdatabase:cjit:AVERAGE:step=$step\" ";
+ $graphcmd .= "DEF:\"wander=$rrddbpath$curdatabase:wander:AVERAGE:step=$step\" ";
+ $graphcmd .= "LINE2:\"offset#{$colorntpd[0]}:offset\" ";
+ $graphcmd .= "LINE2:\"sjit#{$colorntpd[1]}:sjit\" ";
+ $graphcmd .= "LINE2:\"cjit#{$colorntpd[2]}:cjit\" ";
+ $graphcmd .= "LINE2:\"wander#{$colorntpd[3]}:wander\" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t minimum average maximum current\\n\" ";
+ $graphcmd .= "COMMENT:\"Offset \" ";
+ $graphcmd .= "GPRINT:\"offset:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"offset:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"offset:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"offset:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"System jitter \" ";
+ $graphcmd .= "GPRINT:\"sjit:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"sjit:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"sjit:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"sjit:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Clock jitter \" ";
+ $graphcmd .= "GPRINT:\"cjit:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cjit:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cjit:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"cjit:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"Clk freq wander\" ";
+ $graphcmd .= "GPRINT:\"wander:MIN:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wander:AVERAGE:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wander:MAX:%7.2lf %s \" ";
+ $graphcmd .= "GPRINT:\"wander:LAST:%7.2lf %S \" ";
+ $graphcmd .= "COMMENT:\"\\n\" ";
+ $graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t" . strftime('%b %d %H\:%M\:%S %Y') . "\" ";
+} else {
+ $data = false;
+ log_error(sprintf(gettext("Sorry we do not have data to graph for %s"),$curdatabase));
+}
+
+/* check modification time to see if we need to generate image */
+if (file_exists("$rrdtmppath$curdatabase-$curgraph.png")) {
+ if ((time() - filemtime("$rrdtmppath$curdatabase-$curgraph.png")) >= 15) {
+ if ($data) {
+ $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn);
+ $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd;
+ flush();
+ usleep(500);
+ }
+ }
+} else {
+ if ($data) {
+ $_gb = exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn);
+ $graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd;
+ flush();
+ usleep(500);
+ }
+}
+if (($graphcmdreturn <> 0) || (!$data)) {
+ log_error(sprintf(gettext('Failed to create graph with error code %1$s, the error is: %2$s'), $graphcmdreturn, $graphcmdoutput));
+ if (strstr($curdatabase, "queues")) {
+ log_error(sprintf(gettext("failed to create graph from %s%s, removing database"), $rrddbpath, $curdatabase));
+ unlink_if_exists($rrddbpath . $curif . $queues);
+ flush();
+ usleep(500);
+ enable_rrd_graphing();
+ }
+ if (strstr($curdatabase, "queuesdrop")) {
+ log_error(sprintf(gettext("failed to create graph from %s%s, removing database"), $rrddbpath, $curdatabase));
+ unlink_if_exists($rrddbpath . $curdatabase);
+ flush();
+ usleep(500);
+ enable_rrd_graphing();
+ }
+ header("Content-type: image/png");
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ header("Cache-Control: no-cache, no-store, must-revalidate");
+ header("Pragma: no-cache");
+ $file= "/usr/local/www/themes/{$g['theme']}/images/misc/rrd_error.png";
+ readfile($file);
+} else {
+ $file = "$rrdtmppath$curdatabase-$curgraph.png";
+ if (file_exists("$file")) {
+ header("Content-type: image/png");
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ header("Cache-Control: no-cache, no-store, must-revalidate");
+ header("Pragma: no-cache");
+ readfile($file);
+ }
+}
+
+?>
diff --git a/src/usr/local/www/status_rrd_graph_settings.php b/src/usr/local/www/status_rrd_graph_settings.php
new file mode 100644
index 0000000..ede9f41
--- /dev/null
+++ b/src/usr/local/www/status_rrd_graph_settings.php
@@ -0,0 +1,316 @@
+<?php
+/* $Id$ */
+/*
+ status_rrd_graph_settings.php
+ Part of pfSense
+ Copyright (C) 2007 Seth Mos <seth.mos@dds.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/find
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-status-rrdgraph-settings
+##|*NAME=Status: RRD Graphs settings page
+##|*DESCR=Allow access to the 'Status: RRD Graphs: settings' page.
+##|*MATCH=status_rrd_graph_settings.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require_once("rrd.inc");
+
+$pconfig['enable'] = isset($config['rrd']['enable']);
+$pconfig['category'] = $config['rrd']['category'];
+$pconfig['style'] = $config['rrd']['style'];
+$pconfig['period'] = $config['rrd']['period'];
+
+$curcat = "settings";
+$categories = array('system' => gettext("System"),
+ 'traffic' => gettext("Traffic"),
+ 'packets' => gettext("Packets"),
+ 'quality' => gettext("Quality"),
+ 'queues' => gettext("Queues"),
+ 'captiveportal' => gettext("Captive Portal"));
+
+if (isset($config['ntpd']['statsgraph'])) {
+ $categories['ntpd'] = gettext("NTP");
+}
+
+$styles = array('inverse' => gettext("Inverse"),
+ 'absolute' => gettext("Absolute"));
+$periods = array("absolute" => gettext("Absolute Timespans"),
+ "current" => gettext("Current Period"),
+ "previous" => gettext("Previous Period"));
+
+if ($_POST['ResetRRD']) {
+ mwexec('/bin/rm /var/db/rrd/*');
+ enable_rrd_graphing();
+ setup_gateways_monitor();
+ $savemsg = "RRD data has been cleared. New RRD files have been generated.";
+} elseif ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ /* none */
+
+ if (!$input_errors) {
+ $config['rrd']['enable'] = $_POST['enable'] ? true : false;
+ $config['rrd']['category'] = $_POST['category'];
+ $config['rrd']['style'] = $_POST['style'];
+ $config['rrd']['period'] = $_POST['period'];
+ write_config();
+
+ $retval = 0;
+ $retval = enable_rrd_graphing();
+ $savemsg = get_std_save_message($retval);
+ }
+}
+
+$rrddbpath = "/var/db/rrd/";
+chdir($rrddbpath);
+$databases = glob("*.rrd");
+
+foreach ($databases as $database) {
+ if (stristr($database, "wireless")) {
+ $wireless = true;
+ }
+ if (stristr($database, "queues")) {
+ $queues = true;
+ }
+ if (stristr($database, "-cellular") && !empty($config['ppps'])) {
+ $cellular = true;
+ }
+ if (stristr($database, "-vpnusers")) {
+ $vpnusers = true;
+ }
+ if (stristr($database, "captiveportal-") && is_array($config['captiveportal'])) {
+ $captiveportal = true;
+ }
+}
+
+$pgtitle = array(gettext("Status"), gettext("RRD Graphs"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<form action="status_rrd_graph_settings.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="rrd graph settings">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ if ($curcat == "system") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("System"), $tabactive, "status_rrd_graph.php?cat=system");
+ if ($curcat == "traffic") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Traffic"), $tabactive, "status_rrd_graph.php?cat=traffic");
+ if ($curcat == "packets") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Packets"), $tabactive, "status_rrd_graph.php?cat=packets");
+ if ($curcat == "quality") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Quality"), $tabactive, "status_rrd_graph.php?cat=quality");
+ if ($queues) {
+ if ($curcat == "queues") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Queues"), $tabactive, "status_rrd_graph.php?cat=queues");
+ if ($curcat == "queuedrops") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("QueueDrops"), $tabactive, "status_rrd_graph.php?cat=queuedrops");
+ }
+ if ($wireless) {
+ if ($curcat == "wireless") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Wireless"), $tabactive, "status_rrd_graph.php?cat=wireless");
+ }
+ if ($cellular) {
+ if ($curcat == "cellular") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Cellular"), $tabactive, "status_rrd_graph.php?cat=cellular");
+ }
+ if ($vpnusers) {
+ if ($curcat == "vpnusers") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("VPN"), $tabactive, "status_rrd_graph.php?cat=vpnusers");
+ }
+ if ($captiveportal) {
+ if ($curcat == "captiveportal") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Captive Portal"), $tabactive, "status_rrd_graph.php?cat=captiveportal");
+ }
+ if (isset($config['ntpd']['statsgraph'])) {
+ if ($curcat == "ntpd") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array("NTP", $tabactive, "status_rrd_graph.php?cat=ntpd");
+ }
+ if ($curcat == "custom") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Custom"), $tabactive, "status_rrd_graph.php?cat=custom");
+ if ($curcat == "settings") {
+ $tabactive = True;
+ } else {
+ $tabactive = False;
+ }
+ $tab_array[] = array(gettext("Settings"), $tabactive, "status_rrd_graph_settings.php");
+
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vtable"><?=gettext("RRD Graphs");?></td>
+ <td width="78%" class="vtable">
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\"" ?> onclick="enable_change(false)" />
+ <b><?=gettext("Enables the RRD graphing backend.");?></b>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable"><?=gettext("Default category");?></td>
+ <td width="78%" class="vtable">
+ <select name="category" id="category" class="formselect" style="z-index: -10;" >
+ <?php
+ foreach ($categories as $category => $categoryd) {
+ echo "<option value=\"$category\"";
+ if ($category == $pconfig['category']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($categoryd) . "</option>\n";
+ }
+ ?>
+ </select>
+ <b><?=gettext("This selects default category.");?></b>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable"><?=gettext("Default style");?></td>
+ <td width="78%" class="vtable">
+ <select name="style" class="formselect" style="z-index: -10;" >
+ <?php
+ foreach ($styles as $style => $styled) {
+ echo "<option value=\"$style\"";
+ if ($style == $pconfig['style']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($styled) . "</option>\n";
+ }
+ ?>
+ </select>
+ <b><?=gettext("This selects the default style.");?></b>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable"><?=gettext("Default period");?></td>
+ <td width="78%" class="vtable">
+ <select name="period" class="formselect" style="z-index: -10;" >
+ <?php
+ foreach ($periods as $period => $periodd) {
+ echo "<option value=\"$period\"";
+ if ($period == $pconfig['period']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($periodd) . "</option>\n";
+ }
+ ?>
+ </select>
+ <b><?=gettext("This selects the default period.");?></b>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="ResetRRD" type="submit" class="formbtn" value="<?=gettext("Reset RRD Data");?>" onclick="return confirm('<?=gettext('Do you really want to reset the RRD graphs? This will erase all graph data.');?>')" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" height="53" valign="top">&nbsp;</td>
+ <td width="78%"><strong><span class="red"><?=gettext("Note:");?></span></strong><br />
+ <?=gettext("Graphs will not be allowed to be recreated within a 1 minute interval, please " .
+ "take this into account after changing the style.");?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_services.php b/src/usr/local/www/status_services.php
new file mode 100755
index 0000000..ac13b32
--- /dev/null
+++ b/src/usr/local/www/status_services.php
@@ -0,0 +1,135 @@
+<?php
+/*
+ status_services.php
+ Copyright (C) 2004, 2005 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/local/sbin/openvpn /usr/bin/killall /bin/ps
+ pfSense_MODULE: services
+*/
+
+##|+PRIV
+##|*IDENT=page-status-services
+##|*NAME=Status: Services page
+##|*DESCR=Allow access to the 'Status: Services' page.
+##|*MATCH=status_services.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("service-utils.inc");
+require_once("shortcuts.inc");
+
+$service_name = '';
+if (isset($_GET['service'])) {
+ $service_name = htmlspecialchars($_GET['service']);
+}
+
+if (!empty($service_name)) {
+ switch ($_GET['mode']) {
+ case "restartservice":
+ $savemsg = service_control_restart($service_name, $_GET);
+ break;
+ case "startservice":
+ $savemsg = service_control_start($service_name, $_GET);
+ break;
+ case "stopservice":
+ $savemsg = service_control_stop($service_name, $_GET);
+ break;
+ }
+ sleep(5);
+}
+
+/* batch mode, allow other scripts to call this script */
+if ($_GET['batch']) {
+ exit;
+}
+
+$pgtitle = array(gettext("Status"), gettext("Services"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php
+include("fbegin.inc");
+?>
+<form action="status_services.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<div id="boxarea">
+<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="status services">
+ <thead>
+ <tr>
+ <td class="listhdrr" align="center"><?=gettext("Service");?></td>
+ <td class="listhdrr" align="center"><?=gettext("Description");?></td>
+ <td class="listhdrr" align="center"><?=gettext("Status");?></td>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+
+$services = get_services();
+
+if (count($services) > 0) {
+ uasort($services, "service_name_compare");
+ foreach ($services as $service) {
+ if (empty($service['name'])) {
+ continue;
+ }
+ if (empty($service['description'])) {
+ $service['description'] = get_pkg_descr($service['name']);
+ }
+ echo "<tr><td class=\"listlr\" width=\"20%\">" . $service['name'] . "</td>\n";
+ echo "<td class=\"listr\" width=\"55%\">" . $service['description'] . "</td>\n";
+ // if service is running then listr else listbg
+ $bgclass = null;
+ if (get_service_status($service)) {
+ $bgclass = "listr";
+ } else {
+ $bgclass = "listbg";
+ }
+ echo "<td class=\"" . $bgclass . "\" align=\"center\">" . get_service_status_icon($service, true, true) . "</td>\n";
+ echo "<td valign=\"middle\" class=\"list nowrap\">" . get_service_control_links($service);
+ $scut = get_shortcut_by_service_name($service['name']);
+ if (!empty($scut)) {
+ echo get_shortcut_main_link($scut, true, $service);
+ echo get_shortcut_status_link($scut, true, $service);
+ echo get_shortcut_log_link($scut, true);
+ }
+ echo "</td></tr>\n";
+ }
+} else {
+ echo "<tr><td colspan=\"3\" align=\"center\">" . gettext("No services found") . " . </td></tr>\n";
+}
+
+?>
+ </tbody>
+</table>
+</div>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_upnp.php b/src/usr/local/www/status_upnp.php
new file mode 100644
index 0000000..62349df
--- /dev/null
+++ b/src/usr/local/www/status_upnp.php
@@ -0,0 +1,130 @@
+<?php
+/* $Id$ */
+/*
+ status_upnp.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/pfctl
+ pfSense_MODULE: upnp
+*/
+
+##|+PRIV
+##|*IDENT=page-status-upnpstatus
+##|*NAME=Status: UPnP Status page
+##|*DESCR=Allow access to the 'Status: UPnP Status' page.
+##|*MATCH=status_upnp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if ($_POST) {
+ if ($_POST['clear'] == "Clear") {
+ upnp_action('restart');
+ $savemsg = gettext("Rules have been cleared and the daemon restarted");
+ }
+}
+
+$rdr_entries = array();
+exec("/sbin/pfctl -aminiupnpd -sn", $rdr_entries, $pf_ret);
+
+$now = time();
+$year = date("Y");
+
+$pgtitle = array(gettext("Status"), gettext("UPnP &amp; NAT-PMP Status"));
+$shortcut_section = "upnp";
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php
+if (!$config['installedpackages'] || !$config['installedpackages']['miniupnpd']['config'][0]['iface_array'] ||
+ !$config['installedpackages']['miniupnpd']['config'][0]['enable']) {
+ echo gettext("UPnP is currently disabled.");
+ include("fend.inc");
+ exit;
+}
+?>
+<div id="mainlevel">
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabcont" >
+ <form action="status_upnp.php" method="post">
+ <input type="submit" name="clear" id="clear" value="<?=gettext("Clear");?>" /> <?=gettext("all currently connected sessions");?>.
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont" >
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabcont">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Port");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Protocol");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Internal IP");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Int. Port");?></td>
+ <td width="50%" class="listhdr"><?=gettext("Description");?></td>
+ </tr>
+<?php
+ foreach ($rdr_entries as $rdr_entry) {
+ if (preg_match("/on (.*) inet proto (.*) from any to any port = (.*) keep state label \"(.*)\" rtable [0-9] -> (.*) port (.*)/", $rdr_entry, $matches)) {
+ $rdr_proto = $matches[2];
+ $rdr_port = $matches[3];
+ $rdr_label =$matches[4];
+ $rdr_ip = $matches[5];
+ $rdr_iport = $matches[6];
+?>
+ <tr>
+ <td class="listlr">
+ <?php print $rdr_port;?>
+ </td>
+ <td class="listr">
+ <?php print $rdr_proto;?>
+ </td>
+ <td class="listr">
+ <?php print $rdr_ip;?>
+ </td>
+ <td class="listr">
+ <?php print $rdr_iport;?>
+ </td>
+ <td class="listr">
+ <?php print $rdr_label;?>
+ </td>
+ </tr>
+<?php
+ }
+ }
+?>
+ </table>
+ </td>
+ </tr>
+</table>
+</div>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/status_wireless.php b/src/usr/local/www/status_wireless.php
new file mode 100644
index 0000000..be51458
--- /dev/null
+++ b/src/usr/local/www/status_wireless.php
@@ -0,0 +1,201 @@
+<?php
+/*
+ status_wireless.php
+ Copyright (C) 2004 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-wirelessstatus
+##|*NAME=Status: Wireless page
+##|*DESCR=Allow access to the 'Status: Wireless' page.
+##|*MATCH=status_wireless.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+
+$pgtitle = array(gettext("Status"), gettext("Wireless"));
+$shortcut_section = "wireless";
+include("head.inc");
+
+$if = $_POST['if'];
+if ($_GET['if'] <> "") {
+ $if = $_GET['if'];
+}
+
+$ciflist = get_configured_interface_with_descr();
+if (empty($if)) {
+ /* Find the first interface
+ that is wireless */
+ foreach ($ciflist as $interface => $ifdescr) {
+ if (is_interface_wireless(get_real_interface($interface))) {
+ $if = $interface;
+ break;
+ }
+ }
+}
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php
+include("fbegin.inc");
+?>
+<form action="status_wireless.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr><td>
+<?php
+ $tab_array = array();
+ foreach ($ciflist as $interface => $ifdescr) {
+ if (is_interface_wireless(get_real_interface($interface))) {
+ $enabled = false;
+ if ($if == $interface) {
+ $enabled = true;
+ }
+ $tab_array[] = array(gettext("Status") . " ({$ifdescr})", $enabled, "status_wireless.php?if={$interface}");
+ }
+ }
+ $rwlif = get_real_interface($if);
+ if ($_POST['rescanwifi'] <> "") {
+ mwexec_bg("/sbin/ifconfig {$rwlif} scan 2>&1");
+ $savemsg = gettext("Rescan has been initiated in the background. Refresh this page in 10 seconds to see the results.");
+ }
+ if ($savemsg) print_info_box($savemsg);
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea" class="tabcont">
+ <input type="hidden" name="if" id="if" value="<?php echo htmlspecialchars($if); ?>">
+ <b><input type="submit" name="rescanwifi" id="rescanwifi" value="Rescan"></b><br /><br />
+ <b><?php echo gettext("Nearby access points or ad-hoc peers"); ?></b>
+ <table class="tabcont sortable" colspan="3" cellpadding="3" width="100%">
+ <thead>
+ <tr bgcolor='#990000'>
+ <td><b><font color='#ffffff'>SSID</font></b></td>
+ <td><b><font color='#ffffff'>BSSID</font></b></td>
+ <td><b><font color='#ffffff'>CHAN</font></b></td>
+ <td><b><font color='#ffffff'>RATE</font></b></td>
+ <td><b><font color='#ffffff'>RSSI</font></b></td>
+ <td><b><font color='#ffffff'>INT</font></b></td>
+ <td><b><font color='#ffffff'>CAPS</font></b></td>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ exec("/sbin/ifconfig {$rwlif} list scan 2>&1", $states, $ret);
+ /* Skip Header */
+ array_shift($states);
+
+ $counter = 0;
+ foreach ($states as $state) {
+ /* Split by Mac address for the SSID Field */
+ $split = preg_split("/([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])/i", $state);
+ preg_match("/([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])/i", $state, $bssid);
+ $ssid = htmlspecialchars($split[0]);
+ $bssid = $bssid[0];
+ /* Split the rest by using spaces for this line using the 2nd part */
+ $split = preg_split("/[ ]+/i", $split[1]);
+ $channel = $split[1];
+ $rate = $split[2];
+ $rssi = $split[3];
+ $int = $split[4];
+ $caps = "$split[5] $split[6] $split[7] $split[8] $split[9] $split[10] $split[11] ";
+
+ print "<tr>";
+ print "<td>{$ssid}</td>";
+ print "<td>{$bssid}</td>";
+ print "<td>{$channel}</td>";
+ print "<td>{$rate}</td>";
+ print "<td>{$rssi}</td>";
+ print "<td>{$int}</td>";
+ print "<td>{$caps}</td>";
+ print "</tr>\n";
+ }
+?>
+ </tbody>
+ </table>
+ <b><?php echo gettext("Associated or ad-hoc peers"); ?></b><br />
+ <table class="tabcont sortable" colspan="3" cellpadding="3" width="100%">
+ <thead>
+ <tr bgcolor='#990000'>
+ <td><b><font color='#ffffff'>ADDR</font></b></td>
+ <td><b><font color='#ffffff'>AID</font></b></td>
+ <td><b><font color='#ffffff'>CHAN</font></b></td>
+ <td><b><font color='#ffffff'>RATE</font></b></td>
+ <td><b><font color='#ffffff'>RSSI</font></b></td>
+ <td><b><font color='#ffffff'>IDLE</font></b></td>
+ <td><b><font color='#ffffff'>TXSEQ</font></b></td>
+ <td><b><font color='#ffffff'>RXSEQ</font></b></td>
+ <td><b><font color='#ffffff'>CAPS</font></b></td>
+ <td><b><font color='#ffffff'>ERP</font></b></td>
+ </tr>
+ </thead>
+ <tbody>
+
+<?php
+ $states = array();
+ exec("/sbin/ifconfig {$rwlif} list sta 2>&1", $states, $ret);
+ array_shift($states);
+
+ $counter = 0;
+ foreach ($states as $state) {
+ $split = preg_split("/[ ]+/i", $state);
+ /* Split the rest by using spaces for this line using the 2nd part */
+ print "<tr>";
+ print "<td>{$split[0]}</td>";
+ print "<td>{$split[1]}</td>";
+ print "<td>{$split[2]}</td>";
+ print "<td>{$split[3]}</td>";
+ print "<td>{$split[4]}</td>";
+ print "<td>{$split[5]}</td>";
+ print "<td>{$split[6]}</td>";
+ print "<td>{$split[7]}</td>";
+ print "<td>{$split[8]}</td>";
+ print "<td>{$split[9]}</td>";
+ print "</tr>\n";
+ }
+
+/* XXX: what stats to we get for adhoc mode? */
+
+?>
+ </tbody>
+ </table>
+ </div>
+ <br />
+ <b>Flags:</b> A = Authorized, E = Extended Rate (802.11g), P = Power save mode, H = High Throughput (HT), Q = QoS (WME)<br />
+ <b>Capabilities:</b> WME = Wireless Multimedia Extensions (QoS), WPA = Wi-Fi Protected Access, RSN = 802.11i, HTCAP = 802.11n High Throughput, ATH = Atheros protocol extensions<br />
+ </td>
+ </tr>
+</table>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system.php b/src/usr/local/www/system.php
new file mode 100644
index 0000000..b275129
--- /dev/null
+++ b/src/usr/local/www/system.php
@@ -0,0 +1,565 @@
+<?php
+/* $Id$ */
+/*
+ system.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /bin/kill /usr/bin/tar
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-generalsetup
+##|*NAME=System: General Setup page
+##|*DESCR=Allow access to the 'System: General Setup' page.
+##|*MATCH=system.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pconfig['hostname'] = $config['system']['hostname'];
+$pconfig['domain'] = $config['system']['domain'];
+list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $config['system']['dnsserver'];
+
+$arr_gateways = return_gateways_array();
+
+$pconfig['dns1gw'] = $config['system']['dns1gw'];
+$pconfig['dns2gw'] = $config['system']['dns2gw'];
+$pconfig['dns3gw'] = $config['system']['dns3gw'];
+$pconfig['dns4gw'] = $config['system']['dns4gw'];
+
+$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']);
+$pconfig['timezone'] = $config['system']['timezone'];
+$pconfig['timeupdateinterval'] = $config['system']['time-update-interval'];
+$pconfig['timeservers'] = $config['system']['timeservers'];
+$pconfig['theme'] = $config['system']['theme'];
+$pconfig['language'] = $config['system']['language'];
+
+$pconfig['dnslocalhost'] = isset($config['system']['dnslocalhost']);
+
+if (!isset($pconfig['timeupdateinterval'])) {
+ $pconfig['timeupdateinterval'] = 300;
+}
+if (!$pconfig['timezone']) {
+ $pconfig['timezone'] = "Etc/UTC";
+}
+if (!$pconfig['timeservers']) {
+ $pconfig['timeservers'] = "pool.ntp.org";
+}
+
+$changedesc = gettext("System") . ": ";
+$changecount = 0;
+
+function is_timezone($elt) {
+ return !preg_match("/\/$/", $elt);
+}
+
+if ($pconfig['timezone'] <> $_POST['timezone']) {
+ filter_pflog_start(true);
+}
+
+exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
+$timezonelist = array_filter($timezonelist, 'is_timezone');
+sort($timezonelist);
+
+$multiwan = false;
+$interfaces = get_configured_interface_list();
+foreach ($interfaces as $interface) {
+ if (interface_has_gateway($interface)) {
+ $multiwan = true;
+ }
+}
+
+if ($_POST) {
+
+ $changecount++;
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "hostname domain");
+ $reqdfieldsn = array(gettext("Hostname"), gettext("Domain"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['hostname']) {
+ if (!is_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'. It may not start or end with '-'.");
+ } else {
+ if (!is_unqualified_hostname($_POST['hostname'])) {
+ $input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
+ }
+ }
+ }
+ if ($_POST['domain'] && !is_domain($_POST['domain'])) {
+ $input_errors[] = gettext("The domain may only contain the characters a-z, 0-9, '-' and '.'.");
+ }
+
+ $ignore_posted_dnsgw = array();
+
+ for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
+ $dnsname="dns{$dnscounter}";
+ $dnsgwname="dns{$dnscounter}gw";
+ if (($_POST[$dnsname] && !is_ipaddr($_POST[$dnsname]))) {
+ $input_errors[] = gettext("A valid IP address must be specified for DNS server $dnscounter.");
+ } else {
+ if (($_POST[$dnsgwname] <> "") && ($_POST[$dnsgwname] <> "none")) {
+ // A real gateway has been selected.
+ if (is_ipaddr($_POST[$dnsname])) {
+ if ((is_ipaddrv4($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
+ $input_errors[] = gettext("You can not specify IPv6 gateway '{$_POST[$dnsgwname]}' for IPv4 DNS server '{$_POST[$dnsname]}'");
+ }
+ if ((is_ipaddrv6($_POST[$dnsname])) && (validate_address_family($_POST[$dnsname], $_POST[$dnsgwname]) === false)) {
+ $input_errors[] = gettext("You can not specify IPv4 gateway '{$_POST[$dnsgwname]}' for IPv6 DNS server '{$_POST[$dnsname]}'");
+ }
+ } else {
+ // The user selected a gateway but did not provide a DNS address. Be nice and set the gateway back to "none".
+ $ignore_posted_dnsgw[$dnsgwname] = true;
+ }
+ }
+ }
+ }
+
+ $direct_networks_list = explode(" ", filter_get_direct_networks_list());
+ for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
+ $dnsitem = "dns{$dnscounter}";
+ $dnsgwitem = "dns{$dnscounter}gw";
+ if ($_POST[$dnsgwitem]) {
+ if (interface_has_gateway($_POST[$dnsgwitem])) {
+ foreach ($direct_networks_list as $direct_network) {
+ if (ip_in_subnet($_POST[$dnsitem], $direct_network)) {
+ $input_errors[] = sprintf(gettext("You can not assign a gateway to DNS '%s' server which is on a directly connected network."), $_POST[$dnsitem]);
+ }
+ }
+ }
+ }
+ }
+
+ $t = (int)$_POST['timeupdateinterval'];
+ if (($t < 0) || (($t > 0) && ($t < 6)) || ($t > 1440)) {
+ $input_errors[] = gettext("The time update interval must be either 0 (disabled) or between 6 and 1440.");
+ }
+ # it's easy to have a little too much whitespace in the field, clean it up for the user before processing.
+ $_POST['timeservers'] = preg_replace('/[[:blank:]]+/', ' ', $_POST['timeservers']);
+ $_POST['timeservers'] = trim($_POST['timeservers']);
+ foreach (explode(' ', $_POST['timeservers']) as $ts) {
+ if (!is_domain($ts)) {
+ $input_errors[] = gettext("A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.");
+ }
+ }
+
+ if (!$input_errors) {
+ update_if_changed("hostname", $config['system']['hostname'], $_POST['hostname']);
+ update_if_changed("domain", $config['system']['domain'], $_POST['domain']);
+
+ update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
+ update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
+ update_if_changed("NTP update interval", $config['system']['time-update-interval'], $_POST['timeupdateinterval']);
+
+ if ($_POST['language'] && $_POST['language'] != $config['system']['language']) {
+ $config['system']['language'] = $_POST['language'];
+ set_language($config['system']['language']);
+ }
+
+ /* pfSense themes */
+ if (!$g['disablethemeselection']) {
+ update_if_changed("System Theme", $config['theme'], $_POST['theme']);
+ }
+
+ /* XXX - billm: these still need updating after figuring out how to check if they actually changed */
+ $olddnsservers = $config['system']['dnsserver'];
+ unset($config['system']['dnsserver']);
+ if ($_POST['dns1']) {
+ $config['system']['dnsserver'][] = $_POST['dns1'];
+ }
+ if ($_POST['dns2']) {
+ $config['system']['dnsserver'][] = $_POST['dns2'];
+ }
+ if ($_POST['dns3']) {
+ $config['system']['dnsserver'][] = $_POST['dns3'];
+ }
+ if ($_POST['dns4']) {
+ $config['system']['dnsserver'][] = $_POST['dns4'];
+ }
+
+ $olddnsallowoverride = $config['system']['dnsallowoverride'];
+
+ unset($config['system']['dnsallowoverride']);
+ $config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
+
+ if ($_POST['dnslocalhost'] == "yes") {
+ $config['system']['dnslocalhost'] = true;
+ } else {
+ unset($config['system']['dnslocalhost']);
+ }
+
+ /* which interface should the dns servers resolve through? */
+ $outdnscounter = 0;
+ for ($dnscounter=1; $dnscounter<5; $dnscounter++) {
+ $dnsname="dns{$dnscounter}";
+ $dnsgwname="dns{$dnscounter}gw";
+ $olddnsgwname = $config['system'][$dnsgwname];
+
+ if ($ignore_posted_dnsgw[$dnsgwname]) {
+ $thisdnsgwname = "none";
+ } else {
+ $thisdnsgwname = $pconfig[$dnsgwname];
+ }
+
+ // "Blank" out the settings for this index, then we set them below using the "outdnscounter" index.
+ $config['system'][$dnsgwname] = "none";
+ $pconfig[$dnsgwname] = "none";
+ $pconfig[$dnsname] = "";
+
+ if ($_POST[$dnsname]) {
+ // Only the non-blank DNS servers were put into the config above.
+ // So we similarly only add the corresponding gateways sequentially to the config (and to pconfig), as we find non-blank DNS servers.
+ // This keeps the DNS server IP and corresponding gateway "lined up" when the user blanks out a DNS server IP in the middle of the list.
+ $outdnscounter++;
+ $outdnsname="dns{$outdnscounter}";
+ $outdnsgwname="dns{$outdnscounter}gw";
+ $pconfig[$outdnsname] = $_POST[$dnsname];
+ if ($_POST[$dnsgwname]) {
+ $config['system'][$outdnsgwname] = $thisdnsgwname;
+ $pconfig[$outdnsgwname] = $thisdnsgwname;
+ } else {
+ // Note: when no DNS GW name is chosen, the entry is set to "none", so actually this case never happens.
+ unset($config['system'][$outdnsgwname]);
+ $pconfig[$outdnsgwname] = "";
+ }
+ }
+ if (($olddnsgwname != "") && ($olddnsgwname != "none") && (($olddnsgwname != $thisdnsgwname) || ($olddnsservers[$dnscounter-1] != $_POST[$dnsname]))) {
+ // A previous DNS GW name was specified. It has now gone or changed, or the DNS server address has changed.
+ // Remove the route. Later calls will add the correct new route if needed.
+ if (is_ipaddrv4($olddnsservers[$dnscounter-1])) {
+ mwexec("/sbin/route delete " . escapeshellarg($olddnsservers[$dnscounter-1]));
+ } else {
+ if (is_ipaddrv6($olddnsservers[$dnscounter-1])) {
+ mwexec("/sbin/route delete -inet6 " . escapeshellarg($olddnsservers[$dnscounter-1]));
+ }
+ }
+ }
+ }
+
+ if ($changecount > 0) {
+ write_config($changedesc);
+ }
+
+ $retval = 0;
+ $retval = system_hostname_configure();
+ $retval |= system_hosts_generate();
+ $retval |= system_resolvconf_generate();
+ if (isset($config['dnsmasq']['enable'])) {
+ $retval |= services_dnsmasq_configure();
+ } elseif (isset($config['unbound']['enable'])) {
+ $retval |= services_unbound_configure();
+ }
+ $retval |= system_timezone_configure();
+ $retval |= system_ntp_configure();
+
+ if ($olddnsallowoverride != $config['system']['dnsallowoverride']) {
+ $retval |= send_event("service reload dns");
+ }
+
+ // Reload the filter - plugins might need to be run.
+ $retval |= filter_configure();
+
+ $savemsg = get_std_save_message($retval);
+ }
+
+ unset($ignore_posted_dnsgw);
+}
+
+$pgtitle = array(gettext("System"), gettext("General Setup"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php
+ include("fbegin.inc");
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+ <form action="system.php" method="post">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general setup">
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("System"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname"); ?></td>
+ <td width="78%" class="vtable"> <input name="hostname" type="text" class="formfld unknown" id="hostname" size="40" value="<?=htmlspecialchars($pconfig['hostname']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Name of the firewall host, without domain part"); ?>
+ <br />
+ <?=gettext("e.g."); ?> <em>firewall</em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Domain"); ?></td>
+ <td width="78%" class="vtable"> <input name="domain" type="text" class="formfld unknown" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Do not use 'local' as a domain name. It will cause local hosts running mDNS (avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS."); ?>
+ <br />
+ <?=gettext("e.g."); ?> <em><?=gettext("mycorp.com, home, office, private, etc."); ?></em>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers"); ?></td>
+ <td width="78%" class="vtable">
+ <br />
+ <table summary="dns servers and gateways">
+ <tr>
+ <td><b><?=gettext("DNS Server"); ?></b></td>
+ <?php if ($multiwan): ?>
+ <td><b><?=gettext("Use gateway"); ?></b></td>
+ <?php endif; ?>
+ </tr>
+<?php
+ for ($dnscounter = 1; $dnscounter < 5; $dnscounter++):
+ $fldname="dns{$dnscounter}gw";
+?>
+ <tr>
+ <td>
+ <input name="dns<?php echo $dnscounter;?>" type="text" class="formfld unknown" id="dns<?php echo $dnscounter;?>" size="28" value="<?php echo $pconfig['dns'.$dnscounter];?>" />
+ </td>
+ <td>
+<?php
+ if ($multiwan):
+?>
+ <select name='<?=$fldname;?>'>
+<?php
+ $gwname = "none";
+ $dnsgw = "dns{$dnscounter}gw";
+ if ($pconfig[$dnsgw] == $gwname) {
+ $selected = "selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value='$gwname' $selected>$gwname</option>\n";
+ foreach ($arr_gateways as $gwname => $gwitem) {
+ //echo $pconfig[$dnsgw];
+ if ((is_ipaddrv4(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv6($gwitem['gateway'])))) {
+ continue;
+ }
+ if ((is_ipaddrv6(lookup_gateway_ip_by_name($pconfig[$dnsgw])) && (is_ipaddrv4($gwitem['gateway'])))) {
+ continue;
+ }
+ if ($pconfig[$dnsgw] == $gwname) {
+ $selected = "selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value='$gwname' $selected>$gwname - {$gwitem['friendlyiface']} - {$gwitem['gateway']}</option>\n";
+ }
+?>
+ </select>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ endfor;
+?>
+ </table>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter IP addresses to be used by the system for DNS resolution. " .
+ "These are also used for the DHCP service, DNS forwarder and for PPTP VPN clients."); ?>
+ <br />
+ <?php if ($multiwan): ?>
+ <br />
+ <?=gettext("In addition, optionally select the gateway for each DNS server. " .
+ "When using multiple WAN connections there should be at least one unique DNS server per gateway."); ?>
+ <br />
+ <?php endif; ?>
+ <br />
+ <input name="dnsallowoverride" type="checkbox" id="dnsallowoverride" value="yes" <?php if ($pconfig['dnsallowoverride']) echo "checked=\"checked\""; ?> />
+ <strong>
+ <?=gettext("Allow DNS server list to be overridden by DHCP/PPP on WAN"); ?>
+ </strong>
+ <br />
+ <?php printf(gettext("If this option is set, %s will " .
+ "use DNS servers assigned by a DHCP/PPP server on WAN " .
+ "for its own purposes (including the DNS forwarder). " .
+ "However, they will not be assigned to DHCP and PPTP " .
+ "VPN clients."), $g['product_name']); ?>
+ <br />
+ <br />
+ <input name="dnslocalhost" type="checkbox" id="dnslocalhost" value="yes" <?php if ($pconfig['dnslocalhost']) echo "checked=\"checked\""; ?> />
+ <strong>
+ <?=gettext("Do not use the DNS Forwarder or Resolver as a DNS server for the firewall"); ?>
+ </strong>
+ <br />
+ <?=gettext("By default localhost (127.0.0.1) will be used as the first DNS server where the DNS Forwarder or DNS Resolver is enabled and set to listen on Localhost, so system can use the local DNS service to perform lookups. ".
+ "Checking this box omits localhost from the list of DNS servers."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Time zone"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="timezone" id="timezone">
+ <?php foreach ($timezonelist as $value): ?>
+ <?php if (strstr($value, "GMT")) continue; ?>
+ <option value="<?=htmlspecialchars($value);?>" <?php if ($value == $pconfig['timezone']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($value);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Select the location closest to you"); ?>
+ </span>
+ </td>
+ </tr>
+<!--
+ <tr>
+ <td width="22%" valign="top" class="vncell">Time update interval</td>
+ <td width="78%" class="vtable">
+ <input name="timeupdateinterval" type="text" class="formfld unknown" id="timeupdateinterval" size="4" value="<?=htmlspecialchars($pconfig['timeupdateinterval']);?>" />
+ <br />
+ <span class="vexpl">
+ Minutes between network time sync. 300 recommended,
+ or 0 to disable
+ </span>
+ </td>
+ </tr>
+-->
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP time server"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="timeservers" type="text" class="formfld unknown" id="timeservers" size="40" value="<?=htmlspecialchars($pconfig['timeservers']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Use a space to separate multiple hosts (only one " .
+ "required). Remember to set up at least one DNS server " .
+ "if you enter a host name here!"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?php echo gettext("Language");?></td>
+ <td width="78%" class="vtable">
+ <select name="language">
+ <?php
+ foreach (get_locale_list() as $lcode => $ldesc) {
+ $selected = ' selected="selected"';
+ if ($lcode != $pconfig['language']) {
+ $selected = '';
+ }
+ echo "<option value=\"{$lcode}\"{$selected}>{$ldesc}</option>";
+ }
+ ?>
+ </select>
+ <strong>
+ <?=gettext("Choose a language for the webConfigurator"); ?>
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+<?php
+ if (!$g['disablethemeselection']):
+?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Theme"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <select name="theme">
+<?php
+ $files = return_dir_as_array("/usr/local/www/themes/");
+ foreach ($files as $f):
+ if ((substr($f, 0, 1) == "_") && !isset($config['system']['developer'])) {
+ continue;
+ }
+ if ($f == "CVS") {
+ continue;
+ }
+ $curtheme = "pfsense";
+ if ($config['theme']) {
+ $curtheme = $config['theme'];
+ }
+ $selected = "";
+ if ($f == $curtheme) {
+ $selected = " selected=\"selected\"";
+ }
+?>
+ <option <?=$selected;?>><?=$f;?></option>
+<?php
+ endforeach;
+?>
+ </select>
+ <strong>
+ <?=gettext("This will change the look and feel of"); ?>
+ <?=$g['product_name'];?>.
+ </strong>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_advanced_admin.php b/src/usr/local/www/system_advanced_admin.php
new file mode 100644
index 0000000..a449452
--- /dev/null
+++ b/src/usr/local/www/system_advanced_admin.php
@@ -0,0 +1,657 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_admin.php
+ part of pfSense
+ Copyright (C) 2005-2010 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/killall
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-admin
+##|*NAME=System: Advanced: Admin Access Page
+##|*DESCR=Allow access to the 'System: Advanced: Admin Access' page.
+##|*MATCH=system_advanced_admin.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pconfig['webguiproto'] = $config['system']['webgui']['protocol'];
+$pconfig['webguiport'] = $config['system']['webgui']['port'];
+$pconfig['max_procs'] = ($config['system']['webgui']['max_procs']) ? $config['system']['webgui']['max_procs'] : 2;
+$pconfig['ssl-certref'] = $config['system']['webgui']['ssl-certref'];
+$pconfig['disablehttpredirect'] = isset($config['system']['webgui']['disablehttpredirect']);
+$pconfig['disableconsolemenu'] = isset($config['system']['disableconsolemenu']);
+$pconfig['noantilockout'] = isset($config['system']['webgui']['noantilockout']);
+$pconfig['nodnsrebindcheck'] = isset($config['system']['webgui']['nodnsrebindcheck']);
+$pconfig['nohttpreferercheck'] = isset($config['system']['webgui']['nohttpreferercheck']);
+$pconfig['pagenamefirst'] = isset($config['system']['webgui']['pagenamefirst']);
+$pconfig['loginautocomplete'] = isset($config['system']['webgui']['loginautocomplete']);
+$pconfig['althostnames'] = $config['system']['webgui']['althostnames'];
+$pconfig['enableserial'] = $config['system']['enableserial'];
+$pconfig['serialspeed'] = $config['system']['serialspeed'];
+$pconfig['primaryconsole'] = $config['system']['primaryconsole'];
+$pconfig['enablesshd'] = $config['system']['enablesshd'];
+$pconfig['sshport'] = $config['system']['ssh']['port'];
+$pconfig['sshdkeyonly'] = isset($config['system']['ssh']['sshdkeyonly']);
+$pconfig['quietlogin'] = isset($config['system']['webgui']['quietlogin']);
+
+$a_cert =& $config['cert'];
+
+$certs_available = false;
+if (is_array($a_cert) && count($a_cert)) {
+ $certs_available = true;
+}
+
+if (!$pconfig['webguiproto'] || !$certs_available) {
+ $pconfig['webguiproto'] = "http";
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['webguiport']) {
+ if (!is_port($_POST['webguiport'])) {
+ $input_errors[] = gettext("You must specify a valid webConfigurator port number");
+ }
+ }
+
+ if ($_POST['max_procs']) {
+ if (!is_numericint($_POST['max_procs']) || ($_POST['max_procs'] < 1) || ($_POST['max_procs'] > 500)) {
+ $input_errors[] = gettext("Max Processes must be a number 1 or greater");
+ }
+ }
+
+ if ($_POST['althostnames']) {
+ $althosts = explode(" ", $_POST['althostnames']);
+ foreach ($althosts as $ah) {
+ if (!is_hostname($ah)) {
+ $input_errors[] = sprintf(gettext("Alternate hostname %s is not a valid hostname."), htmlspecialchars($ah));
+ }
+ }
+ }
+
+ if ($_POST['sshport']) {
+ if (!is_port($_POST['sshport'])) {
+ $input_errors[] = gettext("You must specify a valid port number");
+ }
+ }
+
+ if ($_POST['sshdkeyonly'] == "yes") {
+ $config['system']['ssh']['sshdkeyonly'] = "enabled";
+ } else if (isset($config['system']['ssh']['sshdkeyonly'])) {
+ unset($config['system']['ssh']['sshdkeyonly']);
+ }
+
+ ob_flush();
+ flush();
+
+ if (!$input_errors) {
+
+ if (update_if_changed("webgui protocol", $config['system']['webgui']['protocol'], $_POST['webguiproto'])) {
+ $restart_webgui = true;
+ }
+ if (update_if_changed("webgui port", $config['system']['webgui']['port'], $_POST['webguiport'])) {
+ $restart_webgui = true;
+ }
+ if (update_if_changed("webgui certificate", $config['system']['webgui']['ssl-certref'], $_POST['ssl-certref'])) {
+ $restart_webgui = true;
+ }
+ if (update_if_changed("webgui max processes", $config['system']['webgui']['max_procs'], $_POST['max_procs'])) {
+ $restart_webgui = true;
+ }
+
+ if ($_POST['disablehttpredirect'] == "yes") {
+ $config['system']['webgui']['disablehttpredirect'] = true;
+ $restart_webgui = true;
+ } else {
+ unset($config['system']['webgui']['disablehttpredirect']);
+ $restart_webgui = true;
+ }
+ if ($_POST['quietlogin'] == "yes") {
+ $config['system']['webgui']['quietlogin'] = true;
+ } else {
+ unset($config['system']['webgui']['quietlogin']);
+ }
+
+ if ($_POST['disableconsolemenu'] == "yes") {
+ $config['system']['disableconsolemenu'] = true;
+ } else {
+ unset($config['system']['disableconsolemenu']);
+ }
+
+ if ($_POST['noantilockout'] == "yes") {
+ $config['system']['webgui']['noantilockout'] = true;
+ } else {
+ unset($config['system']['webgui']['noantilockout']);
+ }
+
+ if ($_POST['enableserial'] == "yes" || $g['enableserial_force']) {
+ $config['system']['enableserial'] = true;
+ } else {
+ unset($config['system']['enableserial']);
+ }
+
+ if (is_numericint($_POST['serialspeed'])) {
+ $config['system']['serialspeed'] = $_POST['serialspeed'];
+ } else {
+ unset($config['system']['serialspeed']);
+ }
+
+ if ($_POST['primaryconsole']) {
+ $config['system']['primaryconsole'] = $_POST['primaryconsole'];
+ } else {
+ unset($config['system']['primaryconsole']);
+ }
+
+ if ($_POST['nodnsrebindcheck'] == "yes") {
+ $config['system']['webgui']['nodnsrebindcheck'] = true;
+ } else {
+ unset($config['system']['webgui']['nodnsrebindcheck']);
+ }
+
+ if ($_POST['nohttpreferercheck'] == "yes") {
+ $config['system']['webgui']['nohttpreferercheck'] = true;
+ } else {
+ unset($config['system']['webgui']['nohttpreferercheck']);
+ }
+
+ if ($_POST['pagenamefirst'] == "yes") {
+ $config['system']['webgui']['pagenamefirst'] = true;
+ } else {
+ unset($config['system']['webgui']['pagenamefirst']);
+ }
+
+ if ($_POST['loginautocomplete'] == "yes") {
+ $config['system']['webgui']['loginautocomplete'] = true;
+ } else {
+ unset($config['system']['webgui']['loginautocomplete']);
+ }
+
+ if ($_POST['althostnames']) {
+ $config['system']['webgui']['althostnames'] = $_POST['althostnames'];
+ } else {
+ unset($config['system']['webgui']['althostnames']);
+ }
+
+ $sshd_enabled = $config['system']['enablesshd'];
+ if ($_POST['enablesshd']) {
+ $config['system']['enablesshd'] = "enabled";
+ } else {
+ unset($config['system']['enablesshd']);
+ }
+
+ $sshd_keyonly = isset($config['system']['sshdkeyonly']);
+ if ($_POST['sshdkeyonly']) {
+ $config['system']['sshdkeyonly'] = true;
+ } else {
+ unset($config['system']['sshdkeyonly']);
+ }
+
+ $sshd_port = $config['system']['ssh']['port'];
+ if ($_POST['sshport']) {
+ $config['system']['ssh']['port'] = $_POST['sshport'];
+ } else if (isset($config['system']['ssh']['port'])) {
+ unset($config['system']['ssh']['port']);
+ }
+
+ if (($sshd_enabled != $config['system']['enablesshd']) ||
+ ($sshd_keyonly != $config['system']['sshdkeyonly']) ||
+ ($sshd_port != $config['system']['ssh']['port'])) {
+ $restart_sshd = true;
+ }
+
+ if ($restart_webgui) {
+ global $_SERVER;
+ $http_host_port = explode("]", $_SERVER['HTTP_HOST']);
+ /* IPv6 address check */
+ if (strstr($_SERVER['HTTP_HOST'], "]")) {
+ if (count($http_host_port) > 1) {
+ array_pop($http_host_port);
+ $host = str_replace(array("[", "]"), "", implode(":", $http_host_port));
+ $host = "[{$host}]";
+ } else {
+ $host = str_replace(array("[", "]"), "", implode(":", $http_host_port));
+ $host = "[{$host}]";
+ }
+ } else {
+ list($host) = explode(":", $_SERVER['HTTP_HOST']);
+ }
+ $prot = $config['system']['webgui']['protocol'];
+ $port = $config['system']['webgui']['port'];
+ if ($port) {
+ $url = "{$prot}://{$host}:{$port}/system_advanced_admin.php";
+ } else {
+ $url = "{$prot}://{$host}/system_advanced_admin.php";
+ }
+ }
+
+ write_config();
+
+ $retval = filter_configure();
+ $savemsg = get_std_save_message($retval);
+
+ if ($restart_webgui) {
+ $savemsg .= sprintf("<br />" . gettext("One moment...redirecting to %s in 20 seconds."), $url);
+ }
+
+ conf_mount_rw();
+ setup_serial_port();
+ // Restart DNS in case dns rebinding toggled
+ if (isset($config['dnsmasq']['enable'])) {
+ services_dnsmasq_configure();
+ } elseif (isset($config['unbound']['enable'])) {
+ services_unbound_configure();
+ }
+ conf_mount_ro();
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: Admin Access"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function prot_change() {
+
+ if (document.iform.https_proto.checked) {
+ document.getElementById("ssl_opts").style.display="";
+ } else {
+ document.getElementById("ssl_opts").style.display="none";
+ }
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+ <form action="system_advanced_admin.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced admin">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only."); ?>
+ <br />
+ </span>
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("webConfigurator"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($pconfig['webguiproto'] == "http") {
+ $http_chk = "checked=\"checked\"";
+ }
+ if ($pconfig['webguiproto'] == "https") {
+ $https_chk = "checked=\"checked\"";
+ }
+ if (!$certs_available) {
+ $https_disabled = "disabled=\"disabled\"";
+ }
+ ?>
+ <input name="webguiproto" id="http_proto" type="radio" value="http" <?=$http_chk;?> onclick="prot_change()" />
+ <?=gettext("HTTP"); ?>
+ &nbsp;&nbsp;&nbsp;
+ <input name="webguiproto" id="https_proto" type="radio" value="https" <?=$https_chk;?> <?=$https_disabled;?> onclick="prot_change()" />
+ <?=gettext("HTTPS"); ?>
+ <?php if (!$certs_available): ?>
+ <br />
+ <?=gettext("No Certificates have been defined. You must"); ?>
+ <a href="system_certmanager.php"><?=gettext("Create or Import"); ?></a>
+ <?=gettext("a Certificate before SSL can be enabled."); ?>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="ssl_opts">
+ <td width="22%" valign="top" class="vncell"><?=gettext("SSL Certificate"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ssl-certref" id="ssl-certref" class="formselect">
+ <?php
+ foreach ($a_cert as $cert):
+ $selected = "";
+ if ($pconfig['ssl-certref'] == $cert['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
+ <?php
+ endforeach;
+ if (!count($a_cert)) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("TCP port"); ?></td>
+ <td class="vtable">
+ <input name="webguiport" type="text" class="formfld unknown" id="webguiport" size="5" value="<?=htmlspecialchars($config['system']['webgui']['port']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter a custom port number for the webConfigurator " .
+ "above if you want to override the default (80 for HTTP, 443 " .
+ "for HTTPS). Changes will take effect immediately after save."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Max Processes"); ?></td>
+ <td class="vtable">
+ <input name="max_procs" type="text" class="formfld unknown" id="max_procs" size="5" value="<?=htmlspecialchars($pconfig['max_procs']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("Enter the number of webConfigurator processes you " .
+ "want to run. This defaults to 2. Increasing this will allow more " .
+ "users/browsers to access the GUI concurrently."); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI redirect"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablehttpredirect" type="checkbox" id="disablehttpredirect" value="yes" <?php if ($pconfig['disablehttpredirect']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable webConfigurator redirect rule"); ?></strong>
+ <br />
+ <?php echo gettext("When this is unchecked, access to the webConfigurator " .
+ "is always permitted even on port 80, regardless of the listening port configured. " .
+ "Check this box to disable this automatically added redirect rule. ");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI Login Autocomplete"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="loginautocomplete" type="checkbox" id="loginautocomplete" value="yes" <?php if ($pconfig['loginautocomplete']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable webConfigurator login autocomplete"); ?></strong>
+ <br />
+ <?php echo gettext("When this is checked, login credentials for the webConfigurator " .
+ "may be saved by the browser. While convenient, some security standards require this to be disabled. " .
+ "Check this box to enable autocomplete on the login form so that browsers will prompt to save credentials (NOTE: Some browsers do not respect this option). ");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WebGUI login messages"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="quietlogin" type="checkbox" id="quietlogin" value="yes" <?php if ($pconfig['quietlogin']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable logging of webConfigurator successful logins"); ?></strong>
+ <br />
+ <?php echo gettext("When this is checked, successful logins to the webConfigurator " .
+ "will not be logged.");
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Anti-lockout"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($config['interfaces']['lan']) {
+ $lockout_interface = "LAN";
+ } else {
+ $lockout_interface = "WAN";
+ }
+ ?>
+ <input name="noantilockout" type="checkbox" id="noantilockout" value="yes" <?php if ($pconfig['noantilockout']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable webConfigurator anti-lockout rule"); ?></strong>
+ <br />
+ <?php printf(gettext("When this is unchecked, access to the webConfigurator " .
+ "on the %s interface is always permitted, regardless of the user-defined firewall " .
+ "rule set. Check this box to disable this automatically added rule, so access " .
+ "to the webConfigurator is controlled by the user-defined firewall rules " .
+ "(ensure you have a firewall rule in place that allows you in, or you will " .
+ "lock yourself out!)"), $lockout_interface); ?>
+ <em> <?=gettext("Hint: the &quot;Set interface(s) IP address&quot; option in the console menu resets this setting as well."); ?> </em>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Rebind Check"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="nodnsrebindcheck" type="checkbox" id="nodnsrebindcheck" value="yes" <?php if ($pconfig['nodnsrebindcheck']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable DNS Rebinding Checks"); ?></strong>
+ <br />
+ <?php echo gettext("When this is unchecked, your system " .
+ "is protected against <a href=\"http://en.wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. " .
+ "This blocks private IP responses from your configured DNS servers. Check this box to disable this protection if it interferes with " .
+ "webConfigurator access or name resolution in your environment. "); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Alternate Hostnames"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="althostnames" type="text" class="formfld unknown" id="althostnames" size="75" value="<?=htmlspecialchars($pconfig['althostnames']);?>"/>
+ <br />
+ <strong><?=gettext("Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks"); ?></strong>
+ <br />
+ <?php echo gettext("Here you can specify alternate hostnames by which the router may be queried, to " .
+ "bypass the DNS Rebinding Attack checks. Separate hostnames with spaces."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Browser HTTP_REFERER enforcement"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="nohttpreferercheck" type="checkbox" id="nohttpreferercheck" value="yes" <?php if ($pconfig['nohttpreferercheck']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable HTTP_REFERER enforcement check"); ?></strong>
+ <br />
+ <?php echo gettext("When this is unchecked, access to the webConfigurator " .
+ "is protected against HTTP_REFERER redirection attempts. " .
+ "Check this box to disable this protection if you find that it interferes with " .
+ "webConfigurator access in certain corner cases such as using external scripts to interact with this system. More information on HTTP_REFERER is available from <a target='_blank' href='http://en.wikipedia.org/wiki/HTTP_referrer'>Wikipedia</a>."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Browser tab text"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pagenamefirst" type="checkbox" id="pagenamefirst" value="yes" <?php if ($pconfig['pagenamefirst']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Display page name first in browser tab"); ?></strong>
+ <br />
+ <?php echo gettext("When this is unchecked, the browser tab shows the host name followed by the current page. "); ?>
+ <br />
+ <?php echo gettext("Check this box to display the current page followed by the host name."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Secure Shell"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Secure Shell Server"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="enablesshd" type="checkbox" id="enablesshd" value="yes" <?php if (isset($pconfig['enablesshd'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable Secure Shell"); ?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Method"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="sshdkeyonly" type="checkbox" id="sshdkeyonly" value="yes" <?php if ($pconfig['sshdkeyonly']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable password login for Secure Shell (RSA/DSA key only)"); ?></strong>
+ <br />
+ <?=gettext("When enabled, authorized keys need to be configured for each"); ?>
+ <a href="system_usermanager.php"><?=gettext("user"); ?></a>
+ <?=gettext("that has been granted secure shell access."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("SSH port"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="sshport" type="text" id="sshport" value="<?php echo htmlspecialchars($pconfig['sshport']); ?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Note: Leave this blank for the default of 22."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Serial Communications"); ?></td>
+ </tr>
+ <?php if (!$g['enableserial_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Serial Terminal"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="enableserial" type="checkbox" id="enableserial" value="yes" <?php if (isset($pconfig['enableserial'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enables the first serial port with 115200/8/N/1 by default, or another speed selectable below."); ?></strong>
+ <span class="vexpl"><?=gettext("Note: This will redirect the console output and messages to the serial port. You can still access the console menu from the internal video card/keyboard. A <b>null modem</b> serial cable or adapter is required to use the serial console."); ?></span>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Serial Speed")?></td>
+ <td width="78%" class="vtable">
+ <select name="serialspeed" id="serialspeed" class="formselect">
+ <option value="115200" <?php if ($pconfig['serialspeed'] == "115200") echo "selected=\"selected\"";?>>115200</option>
+ <option value="57600" <?php if ($pconfig['serialspeed'] == "57600") echo "selected=\"selected\"";?>>57600</option>
+ <option value="38400" <?php if ($pconfig['serialspeed'] == "38400") echo "selected=\"selected\"";?>>38400</option>
+ <option value="19200" <?php if ($pconfig['serialspeed'] == "19200") echo "selected=\"selected\"";?>>19200</option>
+ <option value="14400" <?php if ($pconfig['serialspeed'] == "14400") echo "selected=\"selected\"";?>>14400</option>
+ <option value="9600" <?php if ($pconfig['serialspeed'] == "9600") echo "selected=\"selected\"";?>>9600</option>
+ </select> bps
+ <br /><?=gettext("Allows selection of different speeds for the serial console port."); ?>
+ </td>
+ </tr>
+ <?php if (!$g['primaryconsole_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Primary Console")?></td>
+ <td width="78%" class="vtable">
+ <select name="primaryconsole" id="primaryconsole" class="formselect">
+ <option value="serial" <?php if ($pconfig['primaryconsole'] == "serial") echo "selected=\"selected\"";?>>Serial Console</option>
+ <option value="video" <?php if ($pconfig['primaryconsole'] == "video") echo "selected=\"selected\"";?>>VGA Console</option>
+ </select>
+ <br /><?=gettext("Select the preferred console if multiple consoles are present. The preferred console will show pfSense boot script output. All consoles display OS boot messages, console messages, and the console menu."); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Console Options"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Console menu"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disableconsolemenu" type="checkbox" id="disableconsolemenu" value="yes" <?php if ($pconfig['disableconsolemenu']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Password protect the console menu"); ?></strong>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <script type="text/javascript">
+ //<![CDATA[
+ prot_change();
+ //]]>
+ </script>
+
+<?php include("fend.inc"); ?>
+<?php
+ if ($restart_webgui) {
+ echo "<meta http-equiv=\"refresh\" content=\"20;url={$url}\" />";
+ }
+?>
+</body>
+</html>
+
+<?php
+if ($restart_sshd) {
+
+ killbyname("sshd");
+ log_error(gettext("secure shell configuration has changed. Stopping sshd."));
+
+ if ($config['system']['enablesshd']) {
+ log_error(gettext("secure shell configuration has changed. Restarting sshd."));
+ send_event("service restart sshd");
+ }
+}
+if ($restart_webgui) {
+ ob_flush();
+ flush();
+ log_error(gettext("webConfigurator configuration has changed. Restarting webConfigurator."));
+ send_event("service restart webgui");
+}
+
+?>
diff --git a/src/usr/local/www/system_advanced_firewall.php b/src/usr/local/www/system_advanced_firewall.php
new file mode 100644
index 0000000..fc6b0ed
--- /dev/null
+++ b/src/usr/local/www/system_advanced_firewall.php
@@ -0,0 +1,807 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_firewall.php
+ part of pfSense
+ Copyright (C) 2005-2007 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-firewall
+##|*NAME=System: Advanced: Firewall and NAT page
+##|*DESCR=Allow access to the 'System: Advanced: Firewall and NAT' page.
+##|*MATCH=system_advanced_firewall.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$pconfig['disablefilter'] = $config['system']['disablefilter'];
+$pconfig['rfc959workaround'] = $config['system']['rfc959workaround'];
+$pconfig['scrubnodf'] = $config['system']['scrubnodf'];
+$pconfig['scrubrnid'] = $config['system']['scrubrnid'];
+$pconfig['tcpidletimeout'] = $config['filter']['tcpidletimeout'];
+$pconfig['optimization'] = $config['filter']['optimization'];
+$pconfig['adaptivestart'] = $config['system']['adaptivestart'];
+$pconfig['adaptiveend'] = $config['system']['adaptiveend'];
+$pconfig['maximumstates'] = $config['system']['maximumstates'];
+$pconfig['aliasesresolveinterval'] = $config['system']['aliasesresolveinterval'];
+$old_aliasesresolveinterval = $config['system']['aliasesresolveinterval'];
+$pconfig['checkaliasesurlcert'] = isset($config['system']['checkaliasesurlcert']);
+$pconfig['maximumtableentries'] = $config['system']['maximumtableentries'];
+$pconfig['maximumfrags'] = $config['system']['maximumfrags'];
+$pconfig['disablereplyto'] = isset($config['system']['disablereplyto']);
+$pconfig['disablenegate'] = isset($config['system']['disablenegate']);
+$pconfig['bogonsinterval'] = $config['system']['bogons']['interval'];
+$pconfig['disablenatreflection'] = $config['system']['disablenatreflection'];
+$pconfig['enablebinatreflection'] = $config['system']['enablebinatreflection'];
+$pconfig['reflectiontimeout'] = $config['system']['reflectiontimeout'];
+$pconfig['bypassstaticroutes'] = isset($config['filter']['bypassstaticroutes']);
+$pconfig['disablescrub'] = isset($config['system']['disablescrub']);
+$pconfig['tftpinterface'] = explode(",", $config['system']['tftpinterface']);
+$pconfig['disablevpnrules'] = isset($config['system']['disablevpnrules']);
+$pconfig['tcpfirsttimeout'] = $config['system']['tcpfirsttimeout'];
+$pconfig['tcpopeningtimeout'] = $config['system']['tcpopeningtimeout'];
+$pconfig['tcpestablishedtimeout'] = $config['system']['tcpestablishedtimeout'];
+$pconfig['tcpclosingtimeout'] = $config['system']['tcpclosingtimeout'];
+$pconfig['tcpfinwaittimeout'] = $config['system']['tcpfinwaittimeout'];
+$pconfig['tcpclosedtimeout'] = $config['system']['tcpclosedtimeout'];
+$pconfig['udpfirsttimeout'] = $config['system']['udpfirsttimeout'];
+$pconfig['udpsingletimeout'] = $config['system']['udpsingletimeout'];
+$pconfig['udpmultipletimeout'] = $config['system']['udpmultipletimeout'];
+$pconfig['icmpfirsttimeout'] = $config['system']['icmpfirsttimeout'];
+$pconfig['icmperrortimeout'] = $config['system']['icmperrortimeout'];
+$pconfig['otherfirsttimeout'] = $config['system']['otherfirsttimeout'];
+$pconfig['othersingletimeout'] = $config['system']['othersingletimeout'];
+$pconfig['othermultipletimeout'] = $config['system']['othermultipletimeout'];
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ((empty($_POST['adaptivestart']) && !empty($_POST['adaptiveend'])) || (!empty($_POST['adaptivestart']) && empty($_POST['adaptiveend']))) {
+ $input_errors[] = gettext("The Firewall Adaptive values must be set together.");
+ }
+ if (!empty($_POST['adaptivestart']) && !is_numericint($_POST['adaptivestart'])) {
+ $input_errors[] = gettext("The Firewall Adaptive Start value must be an integer.");
+ }
+ if (!empty($_POST['adaptiveend']) && !is_numericint($_POST['adaptiveend'])) {
+ $input_errors[] = gettext("The Firewall Adaptive End value must be an integer.");
+ }
+ if ($_POST['maximumstates'] && !is_numericint($_POST['maximumstates'])) {
+ $input_errors[] = gettext("The Firewall Maximum States value must be an integer.");
+ }
+ if ($_POST['aliasesresolveinterval'] && !is_numericint($_POST['aliasesresolveinterval'])) {
+ $input_errors[] = gettext("The Aliases Hostname Resolve Interval value must be an integer.");
+ }
+ if ($_POST['maximumtableentries'] && !is_numericint($_POST['maximumtableentries'])) {
+ $input_errors[] = gettext("The Firewall Maximum Table Entries value must be an integer.");
+ }
+ if ($_POST['maximumfrags'] && !is_numericint($_POST['maximumfrags'])) {
+ $input_errors[] = gettext("The Firewall Maximum Fragment Entries value must be an integer.");
+ }
+ if ($_POST['tcpidletimeout'] && !is_numericint($_POST['tcpidletimeout'])) {
+ $input_errors[] = gettext("The TCP idle timeout must be an integer.");
+ }
+ if ($_POST['reflectiontimeout'] && !is_numericint($_POST['reflectiontimeout'])) {
+ $input_errors[] = gettext("The Reflection timeout must be an integer.");
+ }
+ if ($_POST['tcpfirsttimeout'] && !is_numericint($_POST['tcpfirsttimeout'])) {
+ $input_errors[] = gettext("The TCP first timeout value must be an integer.");
+ }
+ if ($_POST['tcpopeningtimeout'] && !is_numericint($_POST['tcpopeningtimeout'])) {
+ $input_errors[] = gettext("The TCP opening timeout value must be an integer.");
+ }
+ if ($_POST['tcpestablishedtimeout'] && !is_numericint($_POST['tcpestablishedtimeout'])) {
+ $input_errors[] = gettext("The TCP established timeout value must be an integer.");
+ }
+ if ($_POST['tcpclosingtimeout'] && !is_numericint($_POST['tcpclosingtimeout'])) {
+ $input_errors[] = gettext("The TCP closing timeout value must be an integer.");
+ }
+ if ($_POST['tcpfinwaittimeout'] && !is_numericint($_POST['tcpfinwaittimeout'])) {
+ $input_errors[] = gettext("The TCP FIN wait timeout value must be an integer.");
+ }
+ if ($_POST['tcpclosedtimeout'] && !is_numericint($_POST['tcpclosedtimeout'])) {
+ $input_errors[] = gettext("The TCP closed timeout value must be an integer.");
+ }
+ if ($_POST['udpfirsttimeout'] && !is_numericint($_POST['udpfirsttimeout'])) {
+ $input_errors[] = gettext("The UDP first timeout value must be an integer.");
+ }
+ if ($_POST['udpsingletimeout'] && !is_numericint($_POST['udpsingletimeout'])) {
+ $input_errors[] = gettext("The UDP single timeout value must be an integer.");
+ }
+ if ($_POST['udpmultipletimeout'] && !is_numericint($_POST['udpmultipletimeout'])) {
+ $input_errors[] = gettext("The UDP multiple timeout value must be an integer.");
+ }
+ if ($_POST['icmpfirsttimeout'] && !is_numericint($_POST['icmpfirsttimeout'])) {
+ $input_errors[] = gettext("The ICMP first timeout value must be an integer.");
+ }
+ if ($_POST['icmperrortimeout'] && !is_numericint($_POST['icmperrortimeout'])) {
+ $input_errors[] = gettext("The ICMP error timeout value must be an integer.");
+ }
+ if ($_POST['otherfirsttimeout'] && !is_numericint($_POST['otherfirsttimeout'])) {
+ $input_errors[] = gettext("The Other first timeout value must be an integer.");
+ }
+ if ($_POST['othersingletimeout'] && !is_numericint($_POST['othersingletimeout'])) {
+ $input_errors[] = gettext("The Other single timeout value must be an integer.");
+ }
+ if ($_POST['othermultipletimeout'] && !is_numericint($_POST['othermultipletimeout'])) {
+ $input_errors[] = gettext("The Other multiple timeout value must be an integer.");
+ }
+
+ ob_flush();
+ flush();
+
+ if (!$input_errors) {
+
+ if ($_POST['disablefilter'] == "yes") {
+ $config['system']['disablefilter'] = "enabled";
+ } else {
+ unset($config['system']['disablefilter']);
+ }
+
+ if ($_POST['disablevpnrules'] == "yes") {
+ $config['system']['disablevpnrules'] = true;
+ } else {
+ unset($config['system']['disablevpnrules']);
+ }
+ if ($_POST['rfc959workaround'] == "yes") {
+ $config['system']['rfc959workaround'] = "enabled";
+ } else {
+ unset($config['system']['rfc959workaround']);
+ }
+
+ if ($_POST['scrubnodf'] == "yes") {
+ $config['system']['scrubnodf'] = "enabled";
+ } else {
+ unset($config['system']['scrubnodf']);
+ }
+
+ if ($_POST['scrubrnid'] == "yes") {
+ $config['system']['scrubrnid'] = "enabled";
+ } else {
+ unset($config['system']['scrubrnid']);
+ }
+
+ if (!empty($_POST['adaptiveend'])) {
+ $config['system']['adaptiveend'] = $_POST['adaptiveend'];
+ } else {
+ unset($config['system']['adaptiveend']);
+ }
+ if (!empty($_POST['adaptivestart'])) {
+ $config['system']['adaptivestart'] = $_POST['adaptivestart'];
+ } else {
+ unset($config['system']['adaptivestart']);
+ }
+
+ if ($_POST['checkaliasesurlcert'] == "yes") {
+ $config['system']['checkaliasesurlcert'] = true;
+ } else {
+ unset($config['system']['checkaliasesurlcert']);
+ }
+
+ $config['system']['optimization'] = $_POST['optimization'];
+ $config['system']['maximumstates'] = $_POST['maximumstates'];
+ $config['system']['aliasesresolveinterval'] = $_POST['aliasesresolveinterval'];
+ $config['system']['maximumtableentries'] = $_POST['maximumtableentries'];
+ $config['system']['maximumfrags'] = $_POST['maximumfrags'];
+
+ if (!empty($_POST['tcpfirsttimeout'])) {
+ $config['system']['tcpfirsttimeout'] = $_POST['tcpfirsttimeout'];
+ } else {
+ unset($config['system']['tcpfirsttimeout']);
+ }
+ if (!empty($_POST['tcpopeningtimeout'])) {
+ $config['system']['tcpopeningtimeout'] = $_POST['tcpopeningtimeout'];
+ } else {
+ unset($config['system']['tcpopeningtimeout']);
+ }
+ if (!empty($_POST['tcpestablishedtimeout'])) {
+ $config['system']['tcpestablishedtimeout'] = $_POST['tcpestablishedtimeout'];
+ } else {
+ unset($config['system']['tcpestablishedtimeout']);
+ }
+ if (!empty($_POST['tcpclosingtimeout'])) {
+ $config['system']['tcpclosingtimeout'] = $_POST['tcpclosingtimeout'];
+ } else {
+ unset($config['system']['tcpclosingtimeout']);
+ }
+ if (!empty($_POST['tcpfinwaittimeout'])) {
+ $config['system']['tcpfinwaittimeout'] = $_POST['tcpfinwaittimeout'];
+ } else {
+ unset($config['system']['tcpfinwaittimeout']);
+ }
+ if (!empty($_POST['tcpclosedtimeout'])) {
+ $config['system']['tcpclosedtimeout'] = $_POST['tcpclosedtimeout'];
+ } else {
+ unset($config['system']['tcpclosedtimeout']);
+ }
+ if (!empty($_POST['udpfirsttimeout'])) {
+ $config['system']['udpfirsttimeout'] = $_POST['udpfirsttimeout'];
+ } else {
+ unset($config['system']['udpfirsttimeout']);
+ }
+ if (!empty($_POST['udpsingletimeout'])) {
+ $config['system']['udpsingletimeout'] = $_POST['udpsingletimeout'];
+ } else {
+ unset($config['system']['udpsingletimeout']);
+ }
+ if (!empty($_POST['udpmultipletimeout'])) {
+ $config['system']['udpmultipletimeout'] = $_POST['udpmultipletimeout'];
+ } else {
+ unset($config['system']['udpmultipletimeout']);
+ }
+ if (!empty($_POST['icmpfirsttimeout'])) {
+ $config['system']['icmpfirsttimeout'] = $_POST['icmpfirsttimeout'];
+ } else {
+ unset($config['system']['icmpfirsttimeout']);
+ }
+ if (!empty($_POST['icmperrortimeout'])) {
+ $config['system']['icmperrortimeout'] = $_POST['icmperrortimeout'];
+ } else {
+ unset($config['system']['icmperrortimeout']);
+ }
+ if (!empty($_POST['otherfirsttimeout'])) {
+ $config['system']['otherfirsttimeout'] = $_POST['otherfirsttimeout'];
+ } else {
+ unset($config['system']['otherfirsttimeout']);
+ }
+ if (!empty($_POST['othersingletimeout'])) {
+ $config['system']['othersingletimeout'] = $_POST['othersingletimeout'];
+ } else {
+ unset($config['system']['othersingletimeout']);
+ }
+ if (!empty($_POST['othermultipletimeout'])) {
+ $config['system']['othermultipletimeout'] = $_POST['othermultipletimeout'];
+ } else {
+ unset($config['system']['othermultipletimeout']);
+ }
+
+ if ($_POST['natreflection'] == "proxy") {
+ unset($config['system']['disablenatreflection']);
+ unset($config['system']['enablenatreflectionpurenat']);
+ } else if ($_POST['natreflection'] == "purenat") {
+ unset($config['system']['disablenatreflection']);
+ $config['system']['enablenatreflectionpurenat'] = "yes";
+ } else {
+ $config['system']['disablenatreflection'] = "yes";
+ unset($config['system']['enablenatreflectionpurenat']);
+ }
+
+ if ($_POST['enablebinatreflection'] == "yes") {
+ $config['system']['enablebinatreflection'] = "yes";
+ } else {
+ unset($config['system']['enablebinatreflection']);
+ }
+
+ if ($_POST['disablereplyto'] == "yes") {
+ $config['system']['disablereplyto'] = $_POST['disablereplyto'];
+ } else {
+ unset($config['system']['disablereplyto']);
+ }
+
+ if ($_POST['disablenegate'] == "yes") {
+ $config['system']['disablenegate'] = $_POST['disablenegate'];
+ } else {
+ unset($config['system']['disablenegate']);
+ }
+
+ if ($_POST['enablenatreflectionhelper'] == "yes") {
+ $config['system']['enablenatreflectionhelper'] = "yes";
+ } else {
+ unset($config['system']['enablenatreflectionhelper']);
+ }
+
+ $config['system']['reflectiontimeout'] = $_POST['reflectiontimeout'];
+
+ if ($_POST['bypassstaticroutes'] == "yes") {
+ $config['filter']['bypassstaticroutes'] = $_POST['bypassstaticroutes'];
+ } elseif (isset($config['filter']['bypassstaticroutes'])) {
+ unset($config['filter']['bypassstaticroutes']);
+ }
+
+ if ($_POST['disablescrub'] == "yes") {
+ $config['system']['disablescrub'] = $_POST['disablescrub'];
+ } else {
+ unset($config['system']['disablescrub']);
+ }
+
+ if ($_POST['tftpinterface']) {
+ $config['system']['tftpinterface'] = implode(",", $_POST['tftpinterface']);
+ } else {
+ unset($config['system']['tftpinterface']);
+ }
+
+ if ($_POST['bogonsinterval'] != $config['system']['bogons']['interval']) {
+ switch ($_POST['bogonsinterval']) {
+ case 'daily':
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "*");
+ break;
+ case 'weekly':
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "*", "*", "0");
+ break;
+ case 'monthly':
+ // fall through
+ default:
+ install_cron_job("/usr/bin/nice -n20 /etc/rc.update_bogons.sh", true, "1", "3", "1", "*", "*");
+ }
+ $config['system']['bogons']['interval'] = $_POST['bogonsinterval'];
+ }
+
+ write_config();
+
+ // Kill filterdns when value changes, filter_configure() will restart it
+ if (($old_aliasesresolveinterval != $config['system']['aliasesresolveinterval']) &&
+ isvalidpid("{$g['varrun_path']}/filterdns.pid")) {
+ killbypid("{$g['varrun_path']}/filterdns.pid");
+ }
+
+ $retval = 0;
+ $retval = filter_configure();
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message($retval);
+ } else {
+ $savemsg = $retval;
+ }
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: Firewall and NAT"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+var descs=new Array(5);
+descs[0]="<?=gettext("as the name says, it's the normal optimization algorithm");?>";
+descs[1]="<?=gettext("used for high latency links, such as satellite links. Expires idle connections later than default");?>";
+descs[2]="<?=gettext("expires idle connections quicker. More efficient use of CPU and memory but can drop legitimate idle connections");?>";
+descs[3]="<?=gettext("tries to avoid dropping any legitimate idle connections at the expense of increased memory usage and CPU utilization.");?>";
+
+function update_description(itemnum) {
+ document.forms[0].info.value=descs[itemnum];
+
+}
+
+//]]>
+</script>
+
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+ <form action="system_advanced_firewall.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced firewall/nat">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), true, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:");?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only.");?>
+ <br />
+ </span>
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Firewall Advanced");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Do-Not-Fragment compatibility");?></td>
+ <td width="78%" class="vtable">
+ <input name="scrubnodf" type="checkbox" id="scrubnodf" value="yes" <?php if (isset($config['system']['scrubnodf'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Clear invalid DF bits instead of dropping the packets");?></strong><br />
+ <?=gettext("This allows for communications with hosts that generate fragmented " .
+ "packets with the don't fragment (DF) bit set. Linux NFS is known to " .
+ "do this. This will cause the filter to not drop such packets but " .
+ "instead clear the don't fragment bit.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Random id generation");?></td>
+ <td width="78%" class="vtable">
+ <input name="scrubrnid" type="checkbox" id="scrubrnid" value="yes" <?php if (isset($config['system']['scrubrnid'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Insert a stronger id into IP header of packets passing through the filter.");?></strong><br />
+ <?=gettext("Replaces the IP identification field of packets with random values to " .
+ "compensate for operating systems that use predictable values. " .
+ "This option only applies to packets that are not fragmented after the " .
+ "optional packet reassembly.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Optimization Options");?></td>
+ <td width="78%" class="vtable">
+ <select onchange="update_description(this.selectedIndex);" name="optimization" id="optimization">
+ <option value="normal"<?php if ($config['system']['optimization'] == "normal") echo " selected=\"selected\""; ?>><?=gettext("normal");?></option>
+ <option value="high-latency"<?php if ($config['system']['optimization'] == "high-latency") echo " selected=\"selected\""; ?>><?=gettext("high-latency");?></option>
+ <option value="aggressive"<?php if ($config['system']['optimization'] == "aggressive") echo " selected=\"selected\""; ?>><?=gettext("aggressive");?></option>
+ <option value="conservative"<?php if ($config['system']['optimization'] == "conservative") echo " selected=\"selected\""; ?>><?=gettext("conservative");?></option>
+ </select>
+ <br />
+ <textarea readonly="readonly" cols="60" rows="2" id="info" name="info" style="padding:5px; border:1px dashed #990000; background-color: #ffffff; color: #000000; font-size: 8pt;"></textarea>
+ <script type="text/javascript">
+ //<![CDATA[
+ update_description(document.forms[0].optimization.selectedIndex);
+ //]]>
+ </script>
+ <br />
+ <?=gettext("Select the type of state table optimization to use");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall");?></td>
+ <td width="78%" class="vtable">
+ <input name="disablefilter" type="checkbox" id="disablefilter" value="yes" <?php if (isset($config['system']['disablefilter'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable all packet filtering.");?></strong>
+ <br />
+ <span class="vexpl"><?php printf(gettext("Note: This converts %s into a routing only platform!"), $g['product_name']);?><br />
+ <?=gettext("Note: This will also turn off NAT!");?>
+ <br /><?=gettext("If you only want to disable NAT, and not firewall rules, visit the");?> <a href="firewall_nat_out.php"><?=gettext("Outbound NAT");?></a> <?=gettext("page");?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Firewall Scrub");?></td>
+ <td width="78%" class="vtable">
+ <input name="disablescrub" type="checkbox" id="disablescrub" value="yes" <?php if (isset($config['system']['disablescrub'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic.");?></strong>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Adaptive Timeouts");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("Timeouts for states can be scaled adaptively as the number of state table entries grows.");?></strong>
+ <br />
+ <input name="adaptivestart" type="text" id="adaptivestart" value="<?php echo htmlspecialchars($pconfig['adaptivestart']); ?>" />
+ <br /><?=gettext("When the number of state entries exceeds this value, adaptive scaling begins. All timeout values are scaled linearly with factor (adaptive.end - number of states) / (adaptive.end - adaptive.start).");?>
+
+ <br />
+ <input name="adaptiveend" type="text" id="adaptiveend" value="<?php echo htmlspecialchars($pconfig['adaptiveend']); ?>" />
+ <br /><?=gettext("When reaching this number of state entries, all timeout values become zero, effectively purging all state entries immediately. This value is used to define the scale factor, it should not actually be reached (set a lower state limit, see below).");?>
+ <br />
+ <span class="vexpl"><?=gettext("Note: Leave this blank for the default, which auto-calculates these values from your maximum state table size. Adaptive start is 60% and end is 120% of the state table size by default.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum States");?></td>
+ <td width="78%" class="vtable">
+ <input name="maximumstates" type="text" id="maximumstates" value="<?php echo htmlspecialchars($pconfig['maximumstates']); ?>" />
+ <br />
+ <strong><?=gettext("Maximum number of connections to hold in the firewall state table.");?></strong>
+ <br />
+ <span class="vexpl"><?=gettext("Note: Leave this blank for the default. On your system the default size is:");?> <?= pfsense_default_state_size() ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum Table Entries");?></td>
+ <td width="78%" class="vtable">
+ <input name="maximumtableentries" type="text" id="maximumtableentries" value="<?php echo htmlspecialchars($pconfig['maximumtableentries']); ?>" />
+ <br />
+ <strong><?=gettext("Maximum number of table entries for systems such as aliases, sshlockout, snort, etc, combined.");?></strong>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Note: Leave this blank for the default.");?>
+ <?php if (empty($pconfig['maximumtableentries'])): ?>
+ <?= gettext("On your system the default size is:");?> <?= pfsense_default_table_entries_size(); ?>
+ <?php endif; ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Firewall Maximum Fragment Entries");?></td>
+ <td width="78%" class="vtable">
+ <input name="maximumfrags" type="text" id="maximumfrags" value="<?php echo htmlspecialchars($pconfig['maximumfrags']); ?>" />
+ <br />
+ <strong><?=gettext("Maximum number of packet fragments to hold for reassembly by scrub rules.");?></strong>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Note: Leave this blank for the default (5000).");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Static route filtering");?></td>
+ <td width="78%" class="vtable">
+ <input name="bypassstaticroutes" type="checkbox" id="bypassstaticroutes" value="yes" <?php if ($pconfig['bypassstaticroutes']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Bypass firewall rules for traffic on the same interface");?></strong>
+ <br />
+ <?=gettext("This option only applies if you have defined one or more static routes. If it is enabled, traffic that enters and " .
+ "leaves through the same interface will not be checked by the firewall. This may be desirable in some situations where " .
+ "multiple subnets are connected to the same interface.");?>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Disable Auto-added VPN rules</td>
+ <td width="78%" class="vtable">
+ <input name="disablevpnrules" type="checkbox" id="disablevpnrules" value="yes" <?php if (isset($config['system']['disablevpnrules'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable all auto-added VPN rules.");?></strong>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Note: This disables automatically added rules for IPsec, PPTP.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Disable reply-to</td>
+ <td width="78%" class="vtable">
+ <input name="disablereplyto" type="checkbox" id="disablereplyto" value="yes" <?php if ($pconfig['disablereplyto']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable reply-to on WAN rules");?></strong>
+ <br />
+ <?=gettext("With Multi-WAN you generally want to ensure traffic leaves the same interface it arrives on, hence reply-to is added automatically by default. " .
+ "When using bridging, you must disable this behavior if the WAN gateway IP is different from the gateway IP of the hosts behind the bridged interface.");?>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Disable Negate rules</td>
+ <td width="78%" class="vtable">
+ <input name="disablenegate" type="checkbox" id="disablenegate" value="yes" <?php if ($pconfig['disablenegate']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable Negate rule on policy routing rules");?></strong>
+ <br />
+ <?=gettext("With Multi-WAN you generally want to ensure traffic reaches directly connected networks and VPN networks when using policy routing. You can disable this for special purposes but it requires manually creating rules for these networks");?>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Aliases Hostnames Resolve Interval");?></td>
+ <td width="78%" class="vtable">
+ <input name="aliasesresolveinterval" type="text" id="aliasesresolveinterval" value="<?php echo htmlspecialchars($pconfig['aliasesresolveinterval']); ?>" />
+ <br />
+ <strong><?=gettext("Interval, in seconds, that will be used to resolve hostnames configured on aliases.");?></strong>
+ <br />
+ <span class="vexpl"><?=gettext("Note: Leave this blank for the default (300s).");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Check certificate of aliases URLs");?></td>
+ <td width="78%" class="vtable">
+ <input name="checkaliasesurlcert" type="checkbox" id="checkaliasesurlcert" value="yes" <?php if ($pconfig['checkaliasesurlcert']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Verify HTTPS certificates when downloading alias URLs");?></strong>
+ <br />
+ <?=gettext("Make sure the certificate is valid for all HTTPS addresses on aliases. If it's not valid or is revoked, do not download it.");?>
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Bogon Networks");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Update Frequency");?></td>
+ <td width="78%" class="vtable">
+ <select name="bogonsinterval" class="formselect">
+ <option value="monthly" <?php if (empty($pconfig['bogonsinterval']) || $pconfig['bogonsinterval'] == 'monthly') echo "selected=\"selected\""; ?>><?=gettext("Monthly"); ?></option>
+ <option value="weekly" <?php if ($pconfig['bogonsinterval'] == 'weekly') echo "selected=\"selected\""; ?>><?=gettext("Weekly"); ?></option>
+ <option value="daily" <?php if ($pconfig['bogonsinterval'] == 'daily') echo "selected=\"selected\""; ?>><?=gettext("Daily"); ?></option>
+ </select>
+ <br />
+ <?=gettext("The frequency of updating the lists of IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA.");?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+<?php
+ if (count($config['interfaces']) > 1):
+?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Network Address Translation");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NAT Reflection mode for port forwards");?></td>
+ <td width="78%" class="vtable">
+ <select name="natreflection" class="formselect">
+ <option value="disable" <?php if (isset($config['system']['disablenatreflection'])) echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
+ <option value="proxy" <?php if (!isset($config['system']['disablenatreflection']) && !isset($config['system']['enablenatreflectionpurenat'])) echo "selected=\"selected\""; ?>><?=gettext("Enable (NAT + Proxy)"); ?></option>
+ <option value="purenat" <?php if (!isset($config['system']['disablenatreflection']) && isset($config['system']['enablenatreflectionpurenat'])) echo "selected=\"selected\""; ?>><?=gettext("Enable (Pure NAT)"); ?></option>
+ </select>
+ <br />
+ <strong><?=gettext("When enabled, this automatically creates additional NAT redirect rules for access to port forwards on your external IP addresses from within your internal networks.");?></strong>
+ <br /><br />
+ <?=gettext("The NAT + proxy mode uses a helper program to send packets to the target of the port forward. It is useful in setups where the interface and/or gateway IP used for communication with the target cannot be accurately determined at the time the rules are loaded. Reflection rules are not created for ranges larger than 500 ports and will not be used for more than 1000 ports total between all port forwards. Only TCP and UDP protocols are supported.");?>
+ <br /><br />
+ <?=gettext("The pure NAT mode uses a set of NAT rules to direct packets to the target of the port forward. It has better scalability, but it must be possible to accurately determine the interface and gateway IP used for communication with the target at the time the rules are loaded. There are no inherent limits to the number of ports other than the limits of the protocols. All protocols available for port forwards are supported.");?>
+ <br /><br />
+ <?=gettext("Individual rules may be configured to override this system setting on a per-rule basis.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Reflection Timeout");?></td>
+ <td width="78%" class="vtable">
+ <input name="reflectiontimeout" id="reflectiontimeout" value="<?php echo $config['system']['reflectiontimeout']; ?>" /><br />
+ <strong><?=gettext("Enter value for Reflection timeout in seconds.");?></strong>
+ <br /><br />
+ <?=gettext("Note: Only applies to Reflection on port forwards in NAT + proxy mode.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable NAT Reflection for 1:1 NAT");?></td>
+ <td width="78%" class="vtable">
+ <input name="enablebinatreflection" type="checkbox" id="enablebinatreflection" value="yes" <?php if (isset($config['system']['enablebinatreflection'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enables the automatic creation of additional NAT redirect rules for access to 1:1 mappings of your external IP addresses from within your internal networks.");?></strong>
+ <br /><br />
+ <?=gettext("Note: Reflection on 1:1 mappings is only for the inbound component of the 1:1 mappings. This functions the same as the pure NAT mode for port forwards. For more details, refer to the pure NAT mode description above.");?>
+ <br /><br />
+ <?=gettext("Individual rules may be configured to override this system setting on a per-rule basis.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable automatic outbound NAT for Reflection");?></td>
+ <td width="78%" class="vtable">
+ <input name="enablenatreflectionhelper" type="checkbox" id="enablenatreflectionhelper" value="yes" <?php if (isset($config['system']['enablenatreflectionhelper'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Automatically create outbound NAT rules which assist inbound NAT rules that direct traffic back out to the same subnet it originated from.");?></strong>
+ <br />
+ <?=gettext("Required for full functionality of the pure NAT mode of NAT Reflection for port forwards or NAT Reflection for 1:1 NAT.");?>
+ <br /><br />
+ <?=gettext("Note: This only works for assigned interfaces. Other interfaces require manually creating the outbound NAT rules that direct the reply packets back through the router.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TFTP Proxy");?></td>
+ <td width="78%" class="vtable">
+ <select name="tftpinterface[]" multiple="multiple" class="formselect" size="3">
+<?php
+ $ifdescs = get_configured_interface_with_descr();
+ $rowIndex = 0;
+ foreach ($ifdescs as $ifent => $ifdesc):
+ $rowIndex++;
+?>
+ <option value="<?=$ifent;?>" <?php if (in_array($ifent, $pconfig['tftpinterface'])) echo "selected=\"selected\""; ?>><?=gettext($ifdesc);?></option>
+<?php endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ <br/><strong><?=gettext("Choose the interfaces where you want TFTP proxy helper to be enabled.");?></strong>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("State Timeouts");?></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <strong><?=gettext("NOTE: The options below should usually be left at their defaults, as chosen by Firewall Optimization Options above. Click the Help link on this page for information.");?>&nbsp;</strong>
+ </td>
+ <br />
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("TCP Timeouts");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("TCP First: ");?></strong><input name="tcpfirsttimeout" id="tcpfirsttimeout" value="<?php echo $config['system']['tcpfirsttimeout']; ?>" /> <br/>
+ <?=gettext("Enter value for TCP first timeout in seconds. Leave blank for default (recommended).");?>
+ <br/><br/>
+ <strong><?=gettext("TCP Opening: ");?></strong><input name="tcpopeningtimeout" id="tcpopeningtimeout" value="<?php echo $config['system']['tcpopeningtimeout']; ?>" /><br />
+ <?=gettext("Enter value for TCP opening timeout in seconds. Leave blank for default (recommended).");?>
+ <br/><br/>
+ <strong><?=gettext("TCP Established: ");?></strong><input name="tcpestablishedtimeout" id="tcpestablishedtimeout" value="<?php echo $config['system']['tcpestablishedtimeout']; ?>" /><br />
+ <?=gettext("Enter value for TCP established timeout in seconds. Leave blank for default (recommended).");?>
+ <br/><br/>
+ <strong><?=gettext("TCP Closing: ");?></strong><input name="tcpclosingtimeout" id="tcpclosingtimeout" value="<?php echo $config['system']['tcpclosingtimeout']; ?>" /><br />
+ <?=gettext("Enter value for TCP closing timeout in seconds. Leave blank for default (recommended).");?>
+ <br/><br/>
+ <strong><?=gettext("TCP FIN Wait: ");?></strong><input name="tcpfinwaittimeout" id="tcpfinwaittimeout" value="<?php echo $config['system']['tcpfinwaittimeout']; ?>" /><br />
+ <?=gettext("Enter value for TCP FIN wait timeout in seconds. Leave blank for default (recommended).");?>
+ <br/><br/>
+ <strong><?=gettext("TCP Closed: ");?></strong><input name="tcpclosedtimeout" id="tcpclosedtimeout" value="<?php echo $config['system']['tcpclosedtimeout']; ?>" /><br />
+ <?=gettext("Enter value for TCP closed timeout in seconds. Leave blank for default (recommended).");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("UDP Timeouts");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("UDP First: ");?></strong><input name="udpfirsttimeout" id="udpfirsttimeout" value="<?php echo $config['system']['udpfirsttimeout']; ?>" /><br />
+ <?=gettext("Enter value for UDP first timeout in seconds. Leave blank for default (recommended).");?>
+ <br /><br />
+ <strong><?=gettext("UDP Single: ");?></strong><input name="udpsingletimeout" id="udpsingletimeout" value="<?php echo $config['system']['udpsingletimeout']; ?>" /><br />
+ <?=gettext("Enter value for UDP single timeout in seconds. Leave blank for default (recommended).");?>
+ <br /><br />
+ <strong><?=gettext("UDP Multiple: ");?></strong><input name="udpmultipletimeout" id="udpmultipletimeout" value="<?php echo $config['system']['udpmultipletimeout']; ?>" /><br />
+ <?=gettext("Enter value for UDP multiple timeout in seconds. Leave blank for default (recommended).");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("ICMP Timeouts");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("ICMP First: ");?></strong><input name="icmpfirsttimeout" id="icmpfirsttimeout" value="<?php echo $config['system']['icmpfirsttimeout']; ?>" /><br />
+ <?=gettext("Enter value for ICMP first timeout in seconds. Leave blank for default (recommended).");?>
+ <br /><br />
+ <strong><?=gettext("ICMP Error: ");?></strong><input name="icmperrortimeout" id="icmperrortimeout" value="<?php echo $config['system']['icmperrortimeout']; ?>" /><br />
+ <?=gettext("Enter value for ICMP error timeout in seconds. Leave blank for default (recommended).");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Other Timeouts");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("Other First: ");?></strong><input name="otherfirsttimeout" id="otherfirsttimeout" value="<?php echo $config['system']['otherfirsttimeout']; ?>" /><br />
+ <?=gettext("Enter value for Other first timeout in seconds. Leave blank for default (recommended).");?>
+ <br /><br />
+ <strong><?=gettext("Other Single: ");?></strong><input name="othersingletimeout" id="othersingletimeout" value="<?php echo $config['system']['othersingletimeout']; ?>" /><br />
+ <?=gettext("Enter value for Other single timeout in seconds. Leave blank for default (recommended).");?>
+ <br /><br />
+ <strong><?=gettext("Other Multiple: ");?></strong><input name="othermultipletimeout" id="othermultipletimeout" value="<?php echo $config['system']['othermultipletimeout']; ?>" /><br />
+ <?=gettext("Enter value for Other multiple timeout in seconds. Leave blank for default (recommended).");?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_advanced_misc.php b/src/usr/local/www/system_advanced_misc.php
new file mode 100644
index 0000000..72f4833
--- /dev/null
+++ b/src/usr/local/www/system_advanced_misc.php
@@ -0,0 +1,738 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_misc.php
+ part of pfSense
+ Copyright (C) 2005-2007 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-misc
+##|*NAME=System: Advanced: Miscellaneous page
+##|*DESCR=Allow access to the 'System: Advanced: Miscellaneous' page.
+##|*MATCH=system_advanced_misc.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("vpn.inc");
+require_once("vslb.inc");
+
+$pconfig['proxyurl'] = $config['system']['proxyurl'];
+$pconfig['proxyport'] = $config['system']['proxyport'];
+$pconfig['proxyuser'] = $config['system']['proxyuser'];
+$pconfig['proxypass'] = $config['system']['proxypass'];
+$pconfig['harddiskstandby'] = $config['system']['harddiskstandby'];
+$pconfig['lb_use_sticky'] = isset($config['system']['lb_use_sticky']);
+$pconfig['srctrack'] = $config['system']['srctrack'];
+$pconfig['gw_switch_default'] = isset($config['system']['gw_switch_default']);
+$pconfig['powerd_enable'] = isset($config['system']['powerd_enable']);
+$pconfig['crypto_hardware'] = $config['system']['crypto_hardware'];
+$pconfig['thermal_hardware'] = $config['system']['thermal_hardware'];
+$pconfig['schedule_states'] = isset($config['system']['schedule_states']);
+$pconfig['kill_states'] = isset($config['system']['kill_states']);
+$pconfig['skip_rules_gw_down'] = isset($config['system']['skip_rules_gw_down']);
+$pconfig['apinger_debug'] = isset($config['system']['apinger_debug']);
+$pconfig['use_mfs_tmpvar'] = isset($config['system']['use_mfs_tmpvar']);
+$pconfig['use_mfs_tmp_size'] = $config['system']['use_mfs_tmp_size'];
+$pconfig['use_mfs_var_size'] = $config['system']['use_mfs_var_size'];
+$pconfig['pkg_nochecksig'] = isset($config['system']['pkg_nochecksig']);
+$pconfig['host_uuid'] = !isset($config['system']['host_uuid']);
+
+$pconfig['powerd_ac_mode'] = "hadp";
+if (!empty($config['system']['powerd_ac_mode'])) {
+ $pconfig['powerd_ac_mode'] = $config['system']['powerd_ac_mode'];
+}
+
+$pconfig['powerd_battery_mode'] = "hadp";
+if (!empty($config['system']['powerd_battery_mode'])) {
+ $pconfig['powerd_battery_mode'] = $config['system']['powerd_battery_mode'];
+}
+
+$pconfig['powerd_normal_mode'] = "hadp";
+if (!empty($config['system']['powerd_normal_mode'])) {
+ $pconfig['powerd_normal_mode'] = $config['system']['powerd_normal_mode'];
+}
+
+$crypto_modules = array(
+ 'glxsb' => gettext("AMD Geode LX Security Block"),
+ 'aesni' => gettext("AES-NI CPU-based Acceleration"));
+
+$thermal_hardware_modules = array(
+ 'coretemp' => gettext("Intel Core* CPU on-die thermal sensor"),
+ 'amdtemp' => gettext("AMD K8, K10 and K11 CPU on-die thermal sensor"));
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ ob_flush();
+ flush();
+
+ if (!empty($_POST['crypto_hardware']) && !array_key_exists($_POST['crypto_hardware'], $crypto_modules)) {
+ $input_errors[] = gettext("Please select a valid Cryptographic Accelerator.");
+ }
+
+ if (!empty($_POST['thermal_hardware']) && !array_key_exists($_POST['thermal_hardware'], $thermal_hardware_modules)) {
+ $input_errors[] = gettext("Please select a valid Thermal Hardware Sensor.");
+ }
+
+ if (!empty($_POST['use_mfs_tmp_size']) && (!is_numeric($_POST['use_mfs_tmp_size']) || ($_POST['use_mfs_tmp_size'] < 40))) {
+ $input_errors[] = gettext("/tmp Size must be numeric and should not be less than 40MB.");
+ }
+
+ if (!empty($_POST['use_mfs_var_size']) && (!is_numeric($_POST['use_mfs_var_size']) || ($_POST['use_mfs_var_size'] < 60))) {
+ $input_errors[] = gettext("/var Size must be numeric and should not be less than 60MB.");
+ }
+
+ if (!empty($_POST['proxyport']) && !is_port($_POST['proxyport'])) {
+ $input_errors[] = gettext("Proxy port must be a valid port number, 1-65535.");
+ }
+
+ if (!empty($_POST['proxyurl']) && !is_fqdn($_POST['proxyurl']) && !is_ipaddr($_POST['proxyurl'])) {
+ $input_errors[] = gettext("Proxy URL must be a valid IP address or FQDN.");
+ }
+
+ if (!empty($_POST['proxyuser']) && preg_match("/[^a-zA-Z0-9\.\-_@]/", $_POST['proxyuser'])) {
+ $input_errors[] = gettext("The proxy username contains invalid characters.");
+ }
+
+ if (!$input_errors) {
+
+ if ($_POST['harddiskstandby'] <> "") {
+ $config['system']['harddiskstandby'] = $_POST['harddiskstandby'];
+ system_set_harddisk_standby();
+ } else {
+ unset($config['system']['harddiskstandby']);
+ }
+
+ if ($_POST['proxyurl'] <> "") {
+ $config['system']['proxyurl'] = $_POST['proxyurl'];
+ } else {
+ unset($config['system']['proxyurl']);
+ }
+
+ if ($_POST['proxyport'] <> "") {
+ $config['system']['proxyport'] = $_POST['proxyport'];
+ } else {
+ unset($config['system']['proxyport']);
+ }
+
+ if ($_POST['proxyuser'] <> "") {
+ $config['system']['proxyuser'] = $_POST['proxyuser'];
+ } else {
+ unset($config['system']['proxyuser']);
+ }
+
+ if ($_POST['proxypass'] <> "") {
+ $config['system']['proxypass'] = $_POST['proxypass'];
+ } else {
+ unset($config['system']['proxypass']);
+ }
+
+ $need_relayd_restart = false;
+ if ($_POST['lb_use_sticky'] == "yes") {
+ if (!isset($config['system']['lb_use_sticky'])) {
+ $config['system']['lb_use_sticky'] = true;
+ $need_relayd_restart = true;
+ }
+ if ($config['system']['srctrack'] != $_POST['srctrack']) {
+ $config['system']['srctrack'] = $_POST['srctrack'];
+ $need_relayd_restart = true;
+ }
+ } else {
+ if (isset($config['system']['lb_use_sticky'])) {
+ unset($config['system']['lb_use_sticky']);
+ $need_relayd_restart = true;
+ }
+ }
+
+ if ($_POST['gw_switch_default'] == "yes") {
+ $config['system']['gw_switch_default'] = true;
+ } else {
+ unset($config['system']['gw_switch_default']);
+ }
+
+ if ($_POST['pkg_nochecksig'] == "yes") {
+ $config['system']['pkg_nochecksig'] = true;
+ } elseif (isset($config['system']['pkg_nochecksig'])) {
+ unset($config['system']['pkg_nochecksig']);
+ }
+
+ if ($_POST['host_uuid'] == "yes") {
+ unset($config['system']['host_uuid']);
+ } else {
+ $config['system']['host_uuid'] = true;
+ }
+
+ if ($_POST['powerd_enable'] == "yes") {
+ $config['system']['powerd_enable'] = true;
+ } else {
+ unset($config['system']['powerd_enable']);
+ }
+
+ $config['system']['powerd_ac_mode'] = $_POST['powerd_ac_mode'];
+ $config['system']['powerd_battery_mode'] = $_POST['powerd_battery_mode'];
+ $config['system']['powerd_normal_mode'] = $_POST['powerd_normal_mode'];
+
+ if ($_POST['crypto_hardware']) {
+ $config['system']['crypto_hardware'] = $_POST['crypto_hardware'];
+ } else {
+ unset($config['system']['crypto_hardware']);
+ }
+
+ if ($_POST['thermal_hardware']) {
+ $config['system']['thermal_hardware'] = $_POST['thermal_hardware'];
+ } else {
+ unset($config['system']['thermal_hardware']);
+ }
+
+ if ($_POST['schedule_states'] == "yes") {
+ $config['system']['schedule_states'] = true;
+ } else {
+ unset($config['system']['schedule_states']);
+ }
+
+ if ($_POST['kill_states'] == "yes") {
+ $config['system']['kill_states'] = true;
+ } else {
+ unset($config['system']['kill_states']);
+ }
+
+ if ($_POST['skip_rules_gw_down'] == "yes") {
+ $config['system']['skip_rules_gw_down'] = true;
+ } else {
+ unset($config['system']['skip_rules_gw_down']);
+ }
+
+ $need_apinger_restart = false;
+ if ($_POST['apinger_debug'] == "yes") {
+ if (!isset($config['system']['apinger_debug'])) {
+ $need_apinger_restart = true;
+ }
+ $config['system']['apinger_debug'] = true;
+ } else {
+ if (isset($config['system']['apinger_debug'])) {
+ $need_apinger_restart = true;
+ }
+ unset($config['system']['apinger_debug']);
+ }
+
+ if ($_POST['use_mfs_tmpvar'] == "yes") {
+ $config['system']['use_mfs_tmpvar'] = true;
+ } else {
+ unset($config['system']['use_mfs_tmpvar']);
+ }
+
+ $config['system']['use_mfs_tmp_size'] = $_POST['use_mfs_tmp_size'];
+ $config['system']['use_mfs_var_size'] = $_POST['use_mfs_var_size'];
+
+ if (isset($_POST['rrdbackup'])) {
+ $config['system']['rrdbackup'] = $_POST['rrdbackup'];
+ install_cron_job("/etc/rc.backup_rrd.sh", ($config['system']['rrdbackup'] > 0), $minute="0", "*/{$config['system']['rrdbackup']}");
+ }
+ if (isset($_POST['dhcpbackup'])) {
+ $config['system']['dhcpbackup'] = $_POST['dhcpbackup'];
+ install_cron_job("/etc/rc.backup_dhcpleases.sh", ($config['system']['dhcpbackup'] > 0), $minute="0", "*/{$config['system']['dhcpbackup']}");
+ }
+
+ write_config();
+
+ $retval = 0;
+ system_resolvconf_generate(true);
+ $retval = filter_configure();
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message(gettext($retval));
+ } else {
+ $savemsg = gettext($retval);
+ }
+
+ activate_powerd();
+ load_crypto();
+ load_thermal_hardware();
+ if ($need_relayd_restart) {
+ relayd_configure();
+ }
+ if ($need_apinger_restart) {
+ setup_gateways_monitor();
+ }
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: Miscellaneous"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php
+ include("fbegin.inc");
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<script type="text/javascript">
+//<![CDATA[
+function sticky_checked(obj) {
+ if (obj.checked) {
+ jQuery('#srctrack').attr('disabled', false);
+ } else {
+ jQuery('#srctrack').attr('disabled', 'true');
+ }
+}
+function tmpvar_checked(obj) {
+ if (obj.checked) {
+ jQuery('#use_mfs_tmp_size').attr('disabled', false);
+ jQuery('#use_mfs_var_size').attr('disabled', false);
+ jQuery('#rrdbackup').attr('disabled', false);
+ jQuery('#dhcpbackup').attr('disabled', false);
+ } else {
+ jQuery('#use_mfs_tmp_size').attr('disabled', 'true');
+ jQuery('#use_mfs_var_size').attr('disabled', 'true');
+ jQuery('#rrdbackup').attr('disabled', 'true');
+ jQuery('#dhcpbackup').attr('disabled', 'true');
+ }
+}
+//]]>
+</script>
+ <form action="system_advanced_misc.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced misc">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), true, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only."); ?>
+ <br />
+ </span>
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Proxy support"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy URL"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="proxyurl" id="proxyurl" value="<?php if ($pconfig['proxyurl'] <> "") echo htmlspecialchars($pconfig['proxyurl']); ?>" class="formfld unknown" />
+ <br />
+ <?php printf(gettext("Hostname or IP address of proxy server this system will use for its outbound Internet access.")); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Port"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="proxyport" id="proxyport" value="<?php if ($pconfig['proxyport'] <> "") echo htmlspecialchars($pconfig['proxyport']); ?>" class="formfld unknown" />
+ <br />
+ <?php printf(gettext("Port where proxy server is listening.")); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Username"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="proxyuser" id="proxyuser" value="<?php if ($pconfig['proxyuser'] <> "") echo htmlspecialchars($pconfig['proxyuser']); ?>" class="formfld unknown" />
+ <br />
+ <?php printf(gettext("Username for authentication to proxy server. Optional, leave blank to not use authentication.")); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input type="password" name="proxypass" id="proxypass" value="<?php if ($pconfig['proxypass'] <> "") echo htmlspecialchars($pconfig['proxypass']); ?>" class="formfld unknown" />
+ <br />
+ <?php printf(gettext("Password for authentication to proxy server.")); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Load Balancing"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Load Balancing"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="lb_use_sticky" type="checkbox" id="lb_use_sticky" value="yes" <?php if ($pconfig['lb_use_sticky']) echo "checked=\"checked\""; ?> onclick="sticky_checked(this)" />
+ <strong><?=gettext("Use sticky connections"); ?></strong><br />
+ <?=gettext("Successive connections will be redirected to the servers " .
+ "in a round-robin manner with connections from the same " .
+ "source being sent to the same web server. This 'sticky " .
+ "connection' will exist as long as there are states that " .
+ "refer to this connection. Once the states expire, so will " .
+ "the sticky connection. Further connections from that host " .
+ "will be redirected to the next web server in the round " .
+ "robin. Changing this option will restart the Load Balancing service."); ?>
+ <br />
+ <input name="srctrack" id="srctrack" value="<?php if ($pconfig['srctrack'] <> "") echo htmlspecialchars($pconfig['srctrack']); else "1400"; ?>" class="formfld unknown" <?php if ($pconfig['lb_use_sticky'] == false) echo "disabled=\"disabled\""; ?> />
+ <br />
+ <?=gettext("Set the source tracking timeout for sticky connections. " .
+ "By default this is 0, so source tracking is removed as soon as the state expires. " .
+ "Setting this timeout higher will cause the source/destination relationship to persist for longer periods of time."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Load Balancing"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="gw_switch_default" type="checkbox" id="gw_switch_default" value="yes" <?php if ($pconfig['gw_switch_default']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable default gateway switching"); ?></strong><br />
+ <?=gettext("If the default gateway goes down, switch the default gateway to another available one. This is not enabled by default, as it's unnecessary in most all scenarios, which instead use gateway groups."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Power savings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("PowerD"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="powerd_enable" type="checkbox" id="powerd_enable" value="yes" <?php if ($pconfig['powerd_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Use PowerD"); ?></strong><br />
+ <br />
+ <table border="0" cellspacing="0" cellpadding="2" summary="powerd">
+ <tr>
+ <td><?=gettext("On AC Power Mode:");?> &nbsp;</td>
+ <td>
+ <select name="powerd_ac_mode" id="powerd_ac_mode">
+ <option value="hadp"<?php if ($pconfig['powerd_ac_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
+ <option value="adp"<?php if ($pconfig['powerd_ac_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
+ <option value="min"<?php if ($pconfig['powerd_ac_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
+ <option value="max"<?php if ($pconfig['powerd_ac_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("On Battery Power Mode:");?> &nbsp;</td>
+ <td>
+ <select name="powerd_battery_mode" id="powerd_battery_mode">
+ <option value="hadp"<?php if ($pconfig['powerd_battery_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
+ <option value="adp"<?php if ($pconfig['powerd_battery_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
+ <option value="min"<?php if ($pconfig['powerd_battery_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
+ <option value="max"<?php if ($pconfig['powerd_battery_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("On Unknown Power Mode:");?> &nbsp;</td>
+ <td>
+ <select name="powerd_normal_mode" id="powerd_normal_mode">
+ <option value="hadp"<?php if ($pconfig['powerd_normal_mode'] == "hadp") echo " selected=\"selected\""; ?>><?=gettext("Hiadaptive");?></option>
+ <option value="adp"<?php if ($pconfig['powerd_normal_mode'] == "adp") echo " selected=\"selected\""; ?>><?=gettext("Adaptive");?></option>
+ <option value="min"<?php if ($pconfig['powerd_normal_mode'] == "min") echo " selected=\"selected\""; ?>><?=gettext("Minimum");?></option>
+ <option value="max"<?php if ($pconfig['powerd_normal_mode'] == "max") echo " selected=\"selected\""; ?>><?=gettext("Maximum");?></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <?=gettext("The powerd utility monitors the system state and sets various power control " .
+ "options accordingly. It offers four modes (maximum, minimum, adaptive " .
+ "and hiadaptive) that can be individually selected while on AC power or batteries. " .
+ "The modes maximum, minimum, adaptive and hiadaptive may be abbreviated max, " .
+ "min, adp, hadp. Maximum mode chooses the highest performance values. Minimum " .
+ "mode selects the lowest performance values to get the most power savings. " .
+ "Adaptive mode attempts to strike a balance by degrading performance when " .
+ "the system appears idle and increasing it when the system is busy. It " .
+ "offers a good balance between a small performance loss for greatly " .
+ "increased power savings. Hiadaptive mode is alike adaptive mode, but " .
+ "tuned for systems where performance and interactivity are more important " .
+ "than power consumption. It raises frequency faster, drops slower and " .
+ "keeps twice lower CPU load."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Hardware Acceleration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Cryptographic Hardware"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="crypto_hardware" id="crypto_hardware">
+ <option value=""><?php echo gettext("None"); ?></option>
+ <?php foreach ($crypto_modules as $cryptomod_name => $cryptomod_descr): ?>
+ <option value="<?php echo $cryptomod_name; ?>" <?php if ($pconfig['crypto_hardware'] == $cryptomod_name) echo " selected=\"selected\""; ?>><?php echo "{$cryptomod_descr} ({$cryptomod_name})"; ?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("A cryptographic accelerator module will use hardware support to speed up some " .
+ "cryptographic functions on systems which have the chip. Do not enable this " .
+ "option if you have a Hifn cryptographic acceleration card, as this will take " .
+ "precedence and the Hifn card will not be used. Acceleration should be automatic " .
+ "for IPsec when using a cipher supported by your chip, such as AES-128. OpenVPN " .
+ "should be set for AES-128-CBC and have cryptodev enabled for hardware " .
+ "acceleration."); ?>
+ <br /><br />
+ <?=gettext("If you do not have a crypto chip in your system, this option will have no " .
+ "effect. To unload the selected module, set this option to 'none' and then reboot."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Thermal Sensors"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Thermal Sensors"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="thermal_hardware" id="thermal_hardware">
+ <option value=""><?php echo gettext("None/ACPI"); ?></option>
+ <?php foreach ($thermal_hardware_modules as $themalmod_name => $themalmod_descr): ?>
+ <option value="<?php echo $themalmod_name; ?>" <?php if ($pconfig['thermal_hardware'] == $themalmod_name) echo " selected=\"selected\""; ?>><?php echo "{$themalmod_descr} ({$themalmod_name})"; ?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("If you have a supported CPU, selecting a themal sensor will load the appropriate " .
+ "driver to read its temperature. Setting this to 'None' will attempt to read the " .
+ "temperature from an ACPI-compliant motherboard sensor instead, if one is present."); ?>
+ <br /><br />
+ <?=gettext("If you do not have a supported thermal sensor chip in your system, this option will have no " .
+ "effect. To unload the selected module, set this option to 'none' and then reboot."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("IP Security"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <?=gettext("These settings have moved to <a href=\"vpn_ipsec_settings.php\">VPN &gt; IPsec on the Advanced Settings tab</a>."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Schedules"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Schedule States"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="schedule_states" type="checkbox" id="schedule_states" value="yes" <?php if ($pconfig['schedule_states']) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("By default, when a schedule expires, connections permitted by that schedule are killed. ".
+ "This option overrides that behavior by not clearing states for existing connections."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Gateway Monitoring"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("State Killing on Gateway Failure"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="kill_states" type="checkbox" id="kill_states" value="yes" <?php if ($pconfig['kill_states']) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("The monitoring process will flush states for a gateway that goes down if this box is not checked. Check this box to disable this behavior."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Skip rules when gateway is down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="skip_rules_gw_down" type="checkbox" id="skip_rules_gw_down" value="yes" <?php if ($pconfig['skip_rules_gw_down']) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("By default, when a rule has a gateway specified and this gateway is down, ".
+ "the rule is created omitting the gateway. This option overrides that behavior by omitting ".
+ "the entire rule instead."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Enable gateway monitoring debug logging"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="apinger_debug" type="checkbox" id="apinger_debug" value="yes" <?php if ($pconfig['apinger_debug']) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("Enable this setting to log debug information from the gateway monitoring process to the system logs."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("RAM Disk Settings (Reboot to Apply Changes)"); ?></td>
+ </tr>
+ <?php if ($g['platform'] == "pfSense"): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Use RAM Disks"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="use_mfs_tmpvar" type="checkbox" id="use_mfs_tmpvar" value="yes" <?php if ($pconfig['use_mfs_tmpvar']) echo "checked=\"checked\""; ?> onclick="tmpvar_checked(this)" />
+ <strong><?=gettext("Use memory file system for /tmp and /var"); ?></strong><br />
+ <?=gettext("Set this if you wish to use /tmp and /var as RAM disks (memory file system disks) on a full install " .
+ "rather than use the hard disk. Setting this will cause the data in /tmp and /var to be lost at reboot, including log data. RRD and DHCP Leases will be retained."); ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("/tmp RAM Disk Size"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="use_mfs_tmp_size" id="use_mfs_tmp_size" value="<?php if ($pconfig['use_mfs_tmp_size'] <> "") echo htmlspecialchars($pconfig['use_mfs_tmp_size']); ?>" class="formfld unknown" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> /> MB
+ <br />
+ <?=gettext("Set the size, in MB, for the /tmp RAM disk. " .
+ "Leave blank for 40MB. Do not set lower than 40."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("/var RAM Disk Size"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="use_mfs_var_size" id="use_mfs_var_size" value="<?php if ($pconfig['use_mfs_var_size'] <> "") echo htmlspecialchars($pconfig['use_mfs_var_size']); ?>" class="formfld unknown" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> /> MB
+ <br />
+ <?=gettext("Set the size, in MB, for the /var RAM disk. " .
+ "Leave blank for 60MB. Do not set lower than 60."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Periodic RRD Backup");?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Frequency:");?>
+ <select name="rrdbackup" id="rrdbackup" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> >
+ <option value='0' <?php if (!isset($config['system']['rrdbackup']) || ($config['system']['rrdbackup'] == 0)) echo "selected='selected'"; ?>><?=gettext("Disable"); ?></option>
+ <?php for ($x=1; $x<=24; $x++) { ?>
+ <option value='<?= $x ?>' <?php if ($config['system']['rrdbackup'] == $x) echo "selected='selected'"; ?>><?= $x ?> <?=gettext("hour"); ?><?php if ($x>1) echo "s"; ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ <?=gettext("This will periodically backup the RRD data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media.");?>
+ <br />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Periodic DHCP Leases Backup");?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Frequency:");?>
+ <select name="dhcpbackup" id="dhcpbackup" <?php if (($g['platform'] == "pfSense") && ($pconfig['use_mfs_tmpvar'] == false)) echo "disabled=\"disabled\""; ?> >
+ <option value='0' <?php if (!isset($config['system']['dhcpbackup']) || ($config['system']['dhcpbackup'] == 0)) echo "selected='selected'"; ?>><?=gettext("Disable"); ?></option>
+ <?php for ($x=1; $x<=24; $x++) { ?>
+ <option value='<?= $x ?>' <?php if ($config['system']['dhcpbackup'] == $x) echo "selected='selected'"; ?>><?= $x ?> <?=gettext("hour"); ?><?php if ($x>1) echo "s"; ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ <?=gettext("This will periodically backup the DHCP leases data so it can be restored automatically on the next boot. Keep in mind that the more frequent the backup, the more writes will happen to your media.");?>
+ <br />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <?php if ($g['platform'] == "pfSenseDISABLED"): ?>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Hardware Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hard disk standby time "); ?></td>
+ <td width="78%" class="vtable">
+ <select name="harddiskstandby" class="formselect">
+ <?php
+ ## Values from ATA-2 http://www.t13.org/project/d0948r3-ATA-2.pdf (Page 66)
+ $sbvals = explode(" ", "0.5,6 1,12 2,24 3,36 4,48 5,60 7.5,90 10,120 15,180 20,240 30,241 60,242");
+ ?>
+ <option value="" <?php if (!$pconfig['harddiskstandby']) echo('selected="selected"');?>><?=gettext("Always on"); ?></option>
+ <?php
+ foreach ($sbvals as $sbval):
+ list($min, $val) = explode(",", $sbval);
+ ?>
+ <option value="<?=$val;?>" <?php if ($pconfig['harddiskstandby'] == $val) echo('selected="selected"');?>><?=$min;?> <?=gettext("minutes"); ?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Puts the hard disk into standby mode when the selected amount of time after the last ".
+ "access has elapsed."); ?> <em><?=gettext("Do not set this for CF cards."); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <?php endif; ?>
+
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Package settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Package signature"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pkg_nochecksig" type="checkbox" id="pkg_nochecksig" value="yes" <?php if ($pconfig['pkg_nochecksig']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Do NOT check package signature"); ?></strong><br />
+ <?=gettext("Enable this option to allow pfSense to install any package without checking its signature."); ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Installation Feedback"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Host UUID"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="host_uuid" type="checkbox" id="host_uuid" value="yes" <?php if ($pconfig['host_uuid']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Do NOT send HOST UUID with user agent"); ?></strong><br />
+ <?=gettext("Enable this option to not send HOST UUID to pfSense as part of User-Agent header."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_advanced_network.php b/src/usr/local/www/system_advanced_network.php
new file mode 100644
index 0000000..4b3b7ce
--- /dev/null
+++ b/src/usr/local/www/system_advanced_network.php
@@ -0,0 +1,320 @@
+<?php
+/*
+ system_advanced_network.php
+ part of pfSense
+ Copyright (C) 2005-2007 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-network
+##|*NAME=System: Advanced: Network page
+##|*DESCR=Allow access to the 'System: Advanced: Networking' page.
+##|*MATCH=system_advanced_network.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+
+$pconfig['ipv6nat_enable'] = isset($config['diag']['ipv6nat']['enable']);
+$pconfig['ipv6nat_ipaddr'] = $config['diag']['ipv6nat']['ipaddr'];
+$pconfig['ipv6allow'] = isset($config['system']['ipv6allow']);
+$pconfig['prefer_ipv4'] = isset($config['system']['prefer_ipv4']);
+$pconfig['polling_enable'] = isset($config['system']['polling']);
+$pconfig['sharednet'] = $config['system']['sharednet'];
+$pconfig['disablechecksumoffloading'] = isset($config['system']['disablechecksumoffloading']);
+$pconfig['disablesegmentationoffloading'] = isset($config['system']['disablesegmentationoffloading']);
+$pconfig['disablelargereceiveoffloading'] = isset($config['system']['disablelargereceiveoffloading']);
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if ($_POST['ipv6nat_enable'] && !is_ipaddr($_POST['ipv6nat_ipaddr'])) {
+ $input_errors[] = gettext("You must specify an IP address to NAT IPv6 packets.");
+ }
+
+ ob_flush();
+ flush();
+ if (!$input_errors) {
+
+ if ($_POST['ipv6nat_enable'] == "yes") {
+ $config['diag']['ipv6nat']['enable'] = true;
+ $config['diag']['ipv6nat']['ipaddr'] = $_POST['ipv6nat_ipaddr'];
+ } else {
+ if ($config['diag']) {
+ if ($config['diag']['ipv6nat']) {
+ unset($config['diag']['ipv6nat']['enable']);
+ unset($config['diag']['ipv6nat']['ipaddr']);
+ }
+ }
+ }
+
+ if ($_POST['ipv6allow'] == "yes") {
+ $config['system']['ipv6allow'] = true;
+ } else {
+ unset($config['system']['ipv6allow']);
+ }
+
+ if ($_POST['prefer_ipv4'] == "yes") {
+ $config['system']['prefer_ipv4'] = true;
+ } else {
+ unset($config['system']['prefer_ipv4']);
+ }
+
+ if ($_POST['sharednet'] == "yes") {
+ $config['system']['sharednet'] = true;
+ system_disable_arp_wrong_if();
+ } else {
+ unset($config['system']['sharednet']);
+ system_enable_arp_wrong_if();
+ }
+
+ if ($_POST['polling_enable'] == "yes") {
+ $config['system']['polling'] = true;
+ setup_polling();
+ } else {
+ unset($config['system']['polling']);
+ setup_polling();
+ }
+
+ if ($_POST['disablechecksumoffloading'] == "yes") {
+ $config['system']['disablechecksumoffloading'] = true;
+ } else {
+ unset($config['system']['disablechecksumoffloading']);
+ }
+
+ if ($_POST['disablesegmentationoffloading'] == "yes") {
+ $config['system']['disablesegmentationoffloading'] = true;
+ } else {
+ unset($config['system']['disablesegmentationoffloading']);
+ }
+
+ if ($_POST['disablelargereceiveoffloading'] == "yes") {
+ $config['system']['disablelargereceiveoffloading'] = true;
+ } else {
+ unset($config['system']['disablelargereceiveoffloading']);
+ }
+
+ setup_microcode();
+
+ // Write out configuration (config.xml)
+ write_config();
+
+ // Set preferred protocol
+ prefer_ipv4_or_ipv6();
+
+ $retval = filter_configure();
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message(gettext($retval));
+ } else {
+ $savemsg = gettext($retval);
+ }
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: Networking"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+function enable_change(enable_over) {
+ if (document.iform.ipv6nat_enable.checked || enable_over) {
+ document.iform.ipv6nat_ipaddr.disabled = 0;
+ } else {
+ document.iform.ipv6nat_ipaddr.disabled = 1;
+ }
+}
+
+//]]>
+</script>
+
+
+<?
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+ <form action="system_advanced_network.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced newtwork">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), true, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only."); ?>
+ <br />
+ </span>
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("IPv6 Options"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Allow IPv6"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ipv6allow" type="checkbox" id="ipv6allow" value="yes" <?php if ($pconfig['ipv6allow']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?=gettext("Allow IPv6"); ?></strong><br />
+ <?=gettext("All IPv6 traffic will be blocked by the firewall unless this box is checked."); ?><br />
+ <?=gettext("NOTE: This does not disable any IPv6 features on the firewall, it only blocks traffic."); ?><br />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 over IPv4 Tunneling"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="ipv6nat_enable" type="checkbox" id="ipv6nat_enable" value="yes" <?php if ($pconfig['ipv6nat_enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" />
+ <strong><?=gettext("Enable IPv4 NAT encapsulation of IPv6 packets"); ?></strong><br />
+ <?=gettext("This provides an RFC 2893 compatibility mechanism ".
+ "that can be used to tunnel IPv6 packets over IPv4 ".
+ "routing infrastructures. If enabled, don't forget to ".
+ "add a firewall rule to permit IPv6 packets."); ?><br />
+ <br />
+ <?=gettext("IP address"); ?>&nbsp;:&nbsp;
+ <input name="ipv6nat_ipaddr" type="text" class="formfld unknown" id="ipv6nat_ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipv6nat_ipaddr']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Prefer IPv4 over IPv6"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="prefer_ipv4" type="checkbox" id="prefer_ipv4" value="yes" <?php if ($pconfig['prefer_ipv4']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Prefer to use IPv4 even if IPv6 is available"); ?></strong><br />
+ <?=gettext("By default, if a hostname resolves IPv6 and IPv4 addresses IPv6 will be used. " .
+ "If you check this option, IPv4 will be used instead of IPv6."); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Network Interfaces"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Device polling"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="polling_enable" type="checkbox" id="polling_enable" value="yes" <?php if ($pconfig['polling_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable device polling"); ?></strong><br />
+ <?php printf(gettext("Device polling is a technique that lets the system periodically poll network devices for new data instead of relying on interrupts. This prevents your webConfigurator, SSH, etc. from being inaccessible due to interrupt floods when under extreme load. Generally this is not recommended. Not all NICs support polling; see the %s homepage for a list of supported cards."), $g['product_name']); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hardware Checksum Offloading"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablechecksumoffloading" type="checkbox" id="disablechecksumoffloading" value="yes" <?php if (isset($config['system']['disablechecksumoffloading'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable hardware checksum offload"); ?></strong><br />
+ <?=gettext("Checking this option will disable hardware checksum offloading. Checksum offloading is broken in some hardware, particularly some Realtek cards. Rarely, drivers may have problems with checksum offloading and some specific NICs."); ?>
+ <br />
+ <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
+ <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hardware TCP Segmentation Offloading"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablesegmentationoffloading" type="checkbox" id="disablesegmentationoffloading" value="yes" <?php if (isset($config['system']['disablesegmentationoffloading'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable hardware TCP segmentation offload"); ?></strong><br />
+ <?=gettext("Checking this option will disable hardware TCP segmentation offloading (TSO, TSO4, TSO6). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."); ?>
+ <br />
+ <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
+ <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Hardware Large Receive Offloading"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablelargereceiveoffloading" type="checkbox" id="disablelargereceiveoffloading" value="yes" <?php if (isset($config['system']['disablelargereceiveoffloading'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable hardware large receive offload"); ?></strong><br />
+ <?=gettext("Checking this option will disable hardware large receive offloading (LRO). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs."); ?>
+ <br />
+ <span class="red"><strong><?=gettext("Note:");?>&nbsp;</strong></span>
+ <?=gettext("This will take effect after you reboot the machine or re-configure each interface.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("ARP Handling"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="sharednet" type="checkbox" id="sharednet" value="yes" <?php if (isset($pconfig['sharednet'])) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Suppress ARP messages"); ?></strong><br />
+ <?=gettext("This option will suppress ARP log messages when multiple interfaces reside on the same broadcast domain"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%"><input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" /></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </form>
+ <script type="text/javascript">
+ //<![CDATA[
+ enable_change(false);
+ //]]>
+ </script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_advanced_notifications.php b/src/usr/local/www/system_advanced_notifications.php
new file mode 100644
index 0000000..45ac501
--- /dev/null
+++ b/src/usr/local/www/system_advanced_notifications.php
@@ -0,0 +1,413 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_notifications.php
+ part of pfSense
+ Copyright (C) 2009 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-notifications
+##|*NAME=System: Advanced: Notifications page
+##|*DESCR=Allow access to the 'System: Advanced: Notifications' page.
+##|*MATCH=system_advanced_notifications.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("notices.inc");
+
+// Growl
+$pconfig['disable_growl'] = isset($config['notifications']['growl']['disable']);
+if ($config['notifications']['growl']['password']) {
+ $pconfig['password'] = $config['notifications']['growl']['password'];
+}
+if ($config['notifications']['growl']['ipaddress']) {
+ $pconfig['ipaddress'] = $config['notifications']['growl']['ipaddress'];
+}
+
+if ($config['notifications']['growl']['notification_name']) {
+ $pconfig['notification_name'] = $config['notifications']['growl']['notification_name'];
+} else {
+ $pconfig['notification_name'] = "{$g['product_name']} growl alert";
+}
+
+if ($config['notifications']['growl']['name']) {
+ $pconfig['name'] = $config['notifications']['growl']['name'];
+} else {
+ $pconfig['name'] = 'PHP-Growl';
+}
+
+
+// SMTP
+$pconfig['disable_smtp'] = isset($config['notifications']['smtp']['disable']);
+if ($config['notifications']['smtp']['ipaddress']) {
+ $pconfig['smtpipaddress'] = $config['notifications']['smtp']['ipaddress'];
+}
+if ($config['notifications']['smtp']['port']) {
+ $pconfig['smtpport'] = $config['notifications']['smtp']['port'];
+}
+if (isset($config['notifications']['smtp']['ssl'])) {
+ $pconfig['smtpssl'] = true;
+}
+if (isset($config['notifications']['smtp']['tls'])) {
+ $pconfig['smtptls'] = true;
+}
+if ($config['notifications']['smtp']['notifyemailaddress']) {
+ $pconfig['smtpnotifyemailaddress'] = $config['notifications']['smtp']['notifyemailaddress'];
+}
+if ($config['notifications']['smtp']['username']) {
+ $pconfig['smtpusername'] = $config['notifications']['smtp']['username'];
+}
+if ($config['notifications']['smtp']['password']) {
+ $pconfig['smtppassword'] = $config['notifications']['smtp']['password'];
+}
+if ($config['notifications']['smtp']['authentication_mechanism']) {
+ $pconfig['smtpauthmech'] = $config['notifications']['smtp']['authentication_mechanism'];
+}
+if ($config['notifications']['smtp']['fromaddress']) {
+ $pconfig['smtpfromaddress'] = $config['notifications']['smtp']['fromaddress'];
+}
+
+// System Sounds
+$pconfig['disablebeep'] = isset($config['system']['disablebeep']);
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ system_setup_sysctl();
+ $savemsg = get_std_save_message($retval);
+ }
+
+ if ($_POST['Submit'] == gettext("Save")) {
+ $tunableent = array();
+
+ // Growl
+ $config['notifications']['growl']['ipaddress'] = $_POST['ipaddress'];
+ $config['notifications']['growl']['password'] = $_POST['password'];
+ $config['notifications']['growl']['name'] = $_POST['name'];
+ $config['notifications']['growl']['notification_name'] = $_POST['notification_name'];
+
+ if ($_POST['disable_growl'] == "yes") {
+ $config['notifications']['growl']['disable'] = true;
+ } else {
+ unset($config['notifications']['growl']['disable']);
+ }
+
+ // SMTP
+ $config['notifications']['smtp']['ipaddress'] = $_POST['smtpipaddress'];
+ $config['notifications']['smtp']['port'] = $_POST['smtpport'];
+ if (isset($_POST['smtpssl'])) {
+ $config['notifications']['smtp']['ssl'] = true;
+ } else {
+ unset($config['notifications']['smtp']['ssl']);
+ }
+ if (isset($_POST['smtptls'])) {
+ $config['notifications']['smtp']['tls'] = true;
+ } else {
+ unset($config['notifications']['smtp']['tls']);
+ }
+ $config['notifications']['smtp']['notifyemailaddress'] = $_POST['smtpnotifyemailaddress'];
+ $config['notifications']['smtp']['username'] = $_POST['smtpusername'];
+ $config['notifications']['smtp']['password'] = $_POST['smtppassword'];
+ $config['notifications']['smtp']['authentication_mechanism'] = $_POST['smtpauthmech'];
+ $config['notifications']['smtp']['fromaddress'] = $_POST['smtpfromaddress'];
+
+ if ($_POST['disable_smtp'] == "yes") {
+ $config['notifications']['smtp']['disable'] = true;
+ } else {
+ unset($config['notifications']['smtp']['disable']);
+ }
+
+ // System Sounds
+ if ($_POST['disablebeep'] == "yes") {
+ $config['system']['disablebeep'] = true;
+ } else {
+ unset($config['system']['disablebeep']);
+ }
+
+ write_config();
+ pfSenseHeader("system_advanced_notifications.php");
+ return;
+
+ }
+ if ($_POST['test_growl'] == gettext("Test Growl")) {
+ // Send test message via growl
+ if ($config['notifications']['growl']['ipaddress'] &&
+ $config['notifications']['growl']['password'] = $_POST['password']) {
+ unlink_if_exists($g['vardb_path'] . "/growlnotices_lastmsg.txt");
+ register_via_growl();
+ notify_via_growl(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true);
+ }
+ }
+ if ($_POST['test_smtp'] == gettext("Test SMTP")) {
+ // Send test message via smtp
+ if (file_exists("/var/db/notices_lastmsg.txt")) {
+ unlink("/var/db/notices_lastmsg.txt");
+ }
+ $savemsg = notify_via_smtp(sprintf(gettext("This is a test message from %s. It is safe to ignore this message."), $g['product_name']), true);
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: Notifications"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+ <form action="system_advanced_notifications.php" method="post">
+ <?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ ?>
+ </form>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced notifications">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), true, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <form action="system_advanced_notifications.php" method="post" name="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <!-- GROWL -->
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Growl"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Growl Notifications"); ?></td>
+ <td width="78%" class="vtable">
+ <input type='checkbox' name='disable_growl' value="yes" <?php if ($pconfig['disable_growl']) {?>checked="checked"<?php } ?> /><br />
+ <?=gettext("Check this option to disable growl notifications but preserve the settings below."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Registration Name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='name' value='<?php echo htmlspecialchars($pconfig['name'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("Enter the name to register with the Growl server (default: PHP-Growl)."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Notification Name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='notification_name' value='<?php echo htmlspecialchars($pconfig['notification_name'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=sprintf(gettext("Enter a name for the Growl notifications (default: %s growl alert)."), $g['product_name']); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='ipaddress' value='<?php echo htmlspecialchars($pconfig['ipaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("This is the IP address that you would like to send growl notifications to."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='password' type='password' value='<?php echo htmlspecialchars($pconfig['password'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("Enter the password of the remote growl notification device."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="">
+ &nbsp;
+ </td>
+ <td>
+ <input type='submit' id='test_growl' name='test_growl' value='<?=gettext("Test Growl"); ?>' />
+ <br /><?= gettext("NOTE: A test notification will be sent even if the service is marked as disabled.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <!-- SMTP -->
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("SMTP E-Mail"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable SMTP Notifications"); ?></td>
+ <td width="78%" class="vtable">
+ <input type='checkbox' name='disable_smtp' value="yes" <?php if ($pconfig['disable_smtp']) {?>checked="checked"<?php } ?> /><br />
+ <?=gettext("Check this option to disable SMTP notifications but preserve the settings below. Some other mechanisms, such as packages, may need these settings in place to function."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("E-Mail server"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtpipaddress' value='<?php echo htmlspecialchars($pconfig['smtpipaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("This is the FQDN or IP address of the SMTP E-Mail server to which notifications will be sent."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("SMTP Port of E-Mail server"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtpport' value='<?php echo htmlspecialchars($pconfig['smtpport'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("This is the port of the SMTP E-Mail server, typically 25, 587 (submission) or 465 (smtps)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Secure SMTP Connection"); ?></td>
+ <td width="78%" class="vtable">
+ <input type='checkbox' id='smtpssl' name='smtpssl' <?php if (isset($pconfig['smtpssl'])) echo "checked=\"checked\""; ?> />Enable SMTP over SSL/TLS<br />
+ <input type='checkbox' id='smtptls' name='smtptls' <?php if (isset($pconfig['smtptls'])) echo "checked=\"checked\""; ?> />Enable STARTTLS<br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("From e-mail address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtpfromaddress' type='text' value='<?php echo htmlspecialchars($pconfig['smtpfromaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("This is the e-mail address that will appear in the from field."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtpnotifyemailaddress' type='text' value='<?php echo htmlspecialchars($pconfig['smtpnotifyemailaddress'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("Enter the e-mail address that you would like email notifications sent to."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth username (optional)"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtpusername' type='text' value='<?php echo htmlspecialchars($pconfig['smtpusername'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("Enter the e-mail address username for SMTP authentication."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name='smtppassword' type='password' value='<?php echo htmlspecialchars($pconfig['smtppassword'], ENT_QUOTES | ENT_HTML401); ?>' /><br />
+ <?=gettext("Enter the e-mail address password for SMTP authentication."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Notification E-Mail auth mechanism"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='smtpauthmech' id='smtpauthmech' class="formselect">
+ <?php
+ foreach ($smtp_authentication_mechanisms as $name => $desc):
+ $selected = "";
+ if ($pconfig['smtpauthmech'] == $name) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Select the authentication mechanism used by the SMTP server. Most work with PLAIN, some servers like Exchange or Office365 might require LOGIN."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="">
+ &nbsp;
+ </td>
+ <td>
+ <input type='submit' id='test_smtp' name='test_smtp' value='<?=gettext("Test SMTP"); ?>' />
+ <br /><?= gettext("NOTE: A test message will be sent even if the service is marked as disabled.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <!-- System Sounds -->
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("System Sounds"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Startup/Shutdown Sound"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablebeep" type="checkbox" id="disablebeep" value="yes" <?php if ($pconfig['disablebeep']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable the startup/shutdown beep"); ?></strong>
+ <br />
+ <span class="vexpl"><?=gettext("When this is checked, startup and shutdown sounds will no longer play."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td valign="top" class="">
+ &nbsp;
+ </td>
+ <td>
+ <input type='submit' id='Submit' name='Submit' value='<?=gettext("Save"); ?>' />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+ </table>
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(document).ready(function() {
+ if (jQuery('#smtpssl').is(':checked')) {
+ jQuery('#smtptls').prop('disabled', true);
+ } else if (jQuery('#smtptls').is(':checked')) {
+ jQuery('#smtpssl').prop('disabled', true);
+ }
+ });
+ jQuery('#smtpssl').change( function() {
+ jQuery('#smtptls').prop('disabled', this.checked);
+ });
+ jQuery('#smtptls').change( function() {
+ jQuery('#smtpssl').prop('disabled', this.checked);
+ });
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_advanced_sysctl.php b/src/usr/local/www/system_advanced_sysctl.php
new file mode 100644
index 0000000..1992cc1
--- /dev/null
+++ b/src/usr/local/www/system_advanced_sysctl.php
@@ -0,0 +1,305 @@
+<?php
+/* $Id$ */
+/*
+ system_advanced_sysctl.php
+ part of pfSense
+ Copyright (C) 2005-2007 Scott Ullrich
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-advanced-sysctl
+##|*NAME=System: Advanced: Tunables page
+##|*DESCR=Allow access to the 'System: Advanced: Tunables' page.
+##|*MATCH=system_advanced_sysctl.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_advanced_sysctl.php');
+}
+
+if (!is_array($config['sysctl'])) {
+ $config['sysctl'] = array();
+}
+if (!is_array($config['sysctl']['item'])) {
+ $config['sysctl']['item'] = array();
+}
+
+$a_tunable = &$config['sysctl']['item'];
+$tunables = system_get_sysctls();
+
+if (isset($_GET['id'])) {
+ $id = htmlspecialchars_decode($_GET['id']);
+}
+if (isset($_POST['id'])) {
+ $id = htmlspecialchars_decode($_POST['id']);
+}
+
+$act = $_GET['act'];
+if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+if ($act == "edit") {
+ if (isset($a_tunable[$id])) {
+ $pconfig['tunable'] = $a_tunable[$id]['tunable'];
+ $pconfig['value'] = $a_tunable[$id]['value'];
+ $pconfig['descr'] = $a_tunable[$id]['descr'];
+ } else if (isset($tunables[$id])) {
+ $pconfig['tunable'] = $tunables[$id]['tunable'];
+ $pconfig['value'] = $tunables[$id]['value'];
+ $pconfig['descr'] = $tunables[$id]['descr'];
+ }
+}
+
+if ($act == "del") {
+ if ($a_tunable[$id]) {
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+ if (!$input_errors) {
+ unset($a_tunable[$id]);
+ write_config();
+ mark_subsystem_dirty('sysctl');
+ pfSenseHeader("system_advanced_sysctl.php");
+ exit;
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ system_setup_sysctl();
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('sysctl');
+ }
+
+ if ($_POST['Submit'] == gettext("Save")) {
+ $tunableent = array();
+
+ $tunableent['tunable'] = $_POST['tunable'];
+ $tunableent['value'] = $_POST['value'];
+ $tunableent['descr'] = $_POST['descr'];
+
+ if (isset($id) && isset($a_tunable[$id])) {
+ $a_tunable[$id] = $tunableent;
+ } else {
+ $a_tunable[] = $tunableent;
+ }
+
+ mark_subsystem_dirty('sysctl');
+
+ write_config();
+
+ pfSenseHeader("system_advanced_sysctl.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Advanced: System Tunables"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+ <form action="system_advanced_sysctl.php" method="post">
+ <?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ if (is_subsystem_dirty('sysctl') && ($act != "edit")) {
+ print_info_box_np(gettext("The firewall tunables have changed. You must apply the configuration to take affect."));
+ }
+ ?>
+ </form>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system advanced tunables">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), false, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), true, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <?php if ($act != "edit"): ?>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("NOTE:"); ?>&nbsp;</strong>
+ </span>
+ <?=gettext("The options on this page are intended for use by advanced users only."); ?>
+ <br />
+ </span>
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Tunable Name"); ?></td>
+ <td width="60%" class="listhdrr"><?=gettext("Description"); ?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Value"); ?></td>
+ </tr>
+ <?php foreach ($tunables as $i => $tunable):
+
+ if (!isset($tunable['modified'])) {
+ $i = urlencode($tunable['tunable']);
+ }
+ ?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
+ <?php echo htmlspecialchars($tunable['tunable']); ?>
+ </td>
+ <td class="listr" align="left" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
+ <?php echo htmlspecialchars($tunable['descr']); ?>
+ </td>
+ <td class="listr" align="left" ondblclick="document.location='system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>';">
+ <?php echo htmlspecialchars($tunable['value']); ?>
+ <?php
+ if ($tunable['value'] == "default") {
+ echo "(" . get_default_sysctl_value($tunable['tunable']) . ")";
+ }
+ ?>
+ </td>
+ <td class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit delete">
+ <tr>
+ <td valign="middle">
+ <a href="system_advanced_sysctl.php?act=edit&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="" />
+ </a>
+ </td>
+ <?php if (isset($tunable['modified'])): ?>
+ <td valign="middle">
+ <a href="system_advanced_sysctl.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?"); ?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="" />
+ </a>
+ </td>
+ <?php endif; ?>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php endforeach; unset($tunables); ?>
+ <tr>
+ <td class="list" colspan="3">
+ </td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td valign="middle">
+ <a href="system_advanced_sysctl.php?act=edit">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <?php else: ?>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <form action="system_advanced_sysctl.php" method="post" name="iform" id="iform">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="edit system tunable">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit system tunable"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Tunable"); ?></td>
+ <td width="78%" class="vtable">
+ <input size="65" name="tunable" value="<?php echo htmlspecialchars($pconfig['tunable']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <textarea rows="7" cols="50" name="descr"><?php echo htmlspecialchars($pconfig['descr']); ?></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Value"); ?></td>
+ <td width="78%" class="vtable">
+ <input size="65" name="value" value="<?php echo htmlspecialchars($pconfig['value']); ?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_tunable[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_authservers.php b/src/usr/local/www/system_authservers.php
new file mode 100644
index 0000000..0b7c81d
--- /dev/null
+++ b/src/usr/local/www/system_authservers.php
@@ -0,0 +1,912 @@
+<?php
+/*
+ system_authservers.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-authservers
+##|*NAME=System: Authentication Servers
+##|*DESCR=Allow access to the 'System: Authentication Servers' page.
+##|*MATCH=system_authservers.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("auth.inc");
+
+$pgtitle = array(gettext("System"), gettext("Authentication Servers"));
+$shortcut_section = "authentication";
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($config['system']['authserver'])) {
+ $config['system']['authserver'] = array();
+}
+
+$a_servers = auth_get_authserver_list();
+foreach ($a_servers as $servers) {
+ $a_server[] = $servers;
+}
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+$a_ca =& $config['ca'];
+
+$act = $_GET['act'];
+if ($_POST['act']) {
+ $act = $_POST['act'];
+}
+
+if ($act == "del") {
+
+ if (!$a_server[$_GET['id']]) {
+ pfSenseHeader("system_authservers.php");
+ exit;
+ }
+
+ /* Remove server from main list. */
+ $serverdeleted = $a_server[$_GET['id']]['name'];
+ foreach ($config['system']['authserver'] as $k => $as) {
+ if ($config['system']['authserver'][$k]['name'] == $serverdeleted) {
+ unset($config['system']['authserver'][$k]);
+ }
+ }
+
+ /* Remove server from temp list used later on this page. */
+ unset($a_server[$_GET['id']]);
+
+ $savemsg = gettext("Authentication Server") . " " . htmlspecialchars($serverdeleted) . " " . gettext("deleted") . "<br />";
+ write_config($savemsg);
+}
+
+if ($act == "edit") {
+ if (isset($id) && $a_server[$id]) {
+
+ $pconfig['type'] = $a_server[$id]['type'];
+ $pconfig['name'] = $a_server[$id]['name'];
+
+ if ($pconfig['type'] == "ldap") {
+ $pconfig['ldap_caref'] = $a_server[$id]['ldap_caref'];
+ $pconfig['ldap_host'] = $a_server[$id]['host'];
+ $pconfig['ldap_port'] = $a_server[$id]['ldap_port'];
+ $pconfig['ldap_urltype'] = $a_server[$id]['ldap_urltype'];
+ $pconfig['ldap_protver'] = $a_server[$id]['ldap_protver'];
+ $pconfig['ldap_scope'] = $a_server[$id]['ldap_scope'];
+ $pconfig['ldap_basedn'] = $a_server[$id]['ldap_basedn'];
+ $pconfig['ldap_authcn'] = $a_server[$id]['ldap_authcn'];
+ $pconfig['ldap_extended_enabled'] = $a_server[$id]['ldap_extended_enabled'];
+ $pconfig['ldap_extended_query'] = $a_server[$id]['ldap_extended_query'];
+ $pconfig['ldap_binddn'] = $a_server[$id]['ldap_binddn'];
+ $pconfig['ldap_bindpw'] = $a_server[$id]['ldap_bindpw'];
+ $pconfig['ldap_attr_user'] = $a_server[$id]['ldap_attr_user'];
+ $pconfig['ldap_attr_group'] = $a_server[$id]['ldap_attr_group'];
+ $pconfig['ldap_attr_member'] = $a_server[$id]['ldap_attr_member'];
+ $pconfig['ldap_utf8'] = isset($a_server[$id]['ldap_utf8']);
+ $pconfig['ldap_nostrip_at'] = isset($a_server[$id]['ldap_nostrip_at']);
+
+ if (!$pconfig['ldap_binddn'] || !$pconfig['ldap_bindpw']) {
+ $pconfig['ldap_anon'] = true;
+ }
+ }
+
+ if ($pconfig['type'] == "radius") {
+ $pconfig['radius_host'] = $a_server[$id]['host'];
+ $pconfig['radius_auth_port'] = $a_server[$id]['radius_auth_port'];
+ $pconfig['radius_acct_port'] = $a_server[$id]['radius_acct_port'];
+ $pconfig['radius_secret'] = $a_server[$id]['radius_secret'];
+ $pconfig['radius_timeout'] = $a_server[$id]['radius_timeout'];
+
+ if ($pconfig['radius_auth_port'] &&
+ $pconfig['radius_acct_port']) {
+ $pconfig['radius_srvcs'] = "both";
+ }
+
+ if ($pconfig['radius_auth_port'] &&
+ !$pconfig['radius_acct_port']) {
+ $pconfig['radius_srvcs'] = "auth";
+ $pconfig['radius_acct_port'] = 1813;
+ }
+
+ if (!$pconfig['radius_auth_port'] &&
+ $pconfig['radius_acct_port']) {
+ $pconfig['radius_srvcs'] = "acct";
+ $pconfig['radius_auth_port'] = 1812;
+ }
+
+ }
+ }
+}
+
+if ($act == "new") {
+ $pconfig['ldap_protver'] = 3;
+ $pconfig['ldap_anon'] = true;
+ $pconfig['radius_srvcs'] = "both";
+ $pconfig['radius_auth_port'] = "1812";
+ $pconfig['radius_acct_port'] = "1813";
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+
+ if ($pconfig['type'] == "ldap") {
+ $reqdfields = explode(" ",
+ "name type ldap_host ldap_port " .
+ "ldap_urltype ldap_protver ldap_scope " .
+ "ldap_attr_user ldap_attr_group ldap_attr_member ldapauthcontainers");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Type"),
+ gettext("Hostname or IP"),
+ gettext("Port value"),
+ gettext("Transport"),
+ gettext("Protocol version"),
+ gettext("Search level"),
+ gettext("User naming Attribute"),
+ gettext("Group naming Attribute"),
+ gettext("Group member attribute"),
+ gettext("Authentication container"));
+
+ if (!$pconfig['ldap_anon']) {
+ $reqdfields[] = "ldap_binddn";
+ $reqdfields[] = "ldap_bindpw";
+ $reqdfieldsn[] = gettext("Bind user DN");
+ $reqdfieldsn[] = gettext("Bind Password");
+ }
+ }
+
+ if ($pconfig['type'] == "radius") {
+ $reqdfields = explode(" ", "name type radius_host radius_srvcs");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Type"),
+ gettext("Hostname or IP"),
+ gettext("Services"));
+
+ if ($pconfig['radisu_srvcs'] == "both" ||
+ $pconfig['radisu_srvcs'] == "auth") {
+ $reqdfields[] = "radius_auth_port";
+ $reqdfieldsn[] = gettext("Authentication port value");
+ }
+
+ if ($pconfig['radisu_srvcs'] == "both" ||
+ $pconfig['radisu_srvcs'] == "acct") {
+ $reqdfields[] = "radius_acct_port";
+ $reqdfieldsn[] = gettext("Accounting port value");
+ }
+
+ if (!isset($id)) {
+ $reqdfields[] = "radius_secret";
+ $reqdfieldsn[] = gettext("Shared Secret");
+ }
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['host'])) {
+ $input_errors[] = gettext("The host name contains invalid characters.");
+ }
+
+ if (auth_get_authserver($pconfig['name']) && !isset($id)) {
+ $input_errors[] = gettext("An authentication server with the same name already exists.");
+ }
+
+ if (($pconfig['type'] == "radius") && isset($_POST['radius_timeout']) && !empty($_POST['radius_timeout']) && (!is_numeric($_POST['radius_timeout']) || (is_numeric($_POST['radius_timeout']) && ($_POST['radius_timeout'] <= 0)))) {
+ $input_errors[] = gettext("RADIUS Timeout value must be numeric and positive.");
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $server = array();
+ $server['refid'] = uniqid();
+ if (isset($id) && $a_server[$id]) {
+ $server = $a_server[$id];
+ }
+
+ $server['type'] = $pconfig['type'];
+ $server['name'] = $pconfig['name'];
+
+ if ($server['type'] == "ldap") {
+
+ if (!empty($pconfig['ldap_caref'])) {
+ $server['ldap_caref'] = $pconfig['ldap_caref'];
+ }
+ $server['host'] = $pconfig['ldap_host'];
+ $server['ldap_port'] = $pconfig['ldap_port'];
+ $server['ldap_urltype'] = $pconfig['ldap_urltype'];
+ $server['ldap_protver'] = $pconfig['ldap_protver'];
+ $server['ldap_scope'] = $pconfig['ldap_scope'];
+ $server['ldap_basedn'] = $pconfig['ldap_basedn'];
+ $server['ldap_authcn'] = $pconfig['ldapauthcontainers'];
+ $server['ldap_extended_enabled'] = $pconfig['ldap_extended_enabled'];
+ $server['ldap_extended_query'] = $pconfig['ldap_extended_query'];
+ $server['ldap_attr_user'] = $pconfig['ldap_attr_user'];
+ $server['ldap_attr_group'] = $pconfig['ldap_attr_group'];
+ $server['ldap_attr_member'] = $pconfig['ldap_attr_member'];
+ if ($pconfig['ldap_utf8'] == "yes") {
+ $server['ldap_utf8'] = true;
+ } else {
+ unset($server['ldap_utf8']);
+ }
+ if ($pconfig['ldap_nostrip_at'] == "yes") {
+ $server['ldap_nostrip_at'] = true;
+ } else {
+ unset($server['ldap_nostrip_at']);
+ }
+
+
+ if (!$pconfig['ldap_anon']) {
+ $server['ldap_binddn'] = $pconfig['ldap_binddn'];
+ $server['ldap_bindpw'] = $pconfig['ldap_bindpw'];
+ } else {
+ unset($server['ldap_binddn']);
+ unset($server['ldap_bindpw']);
+ }
+ }
+
+ if ($server['type'] == "radius") {
+
+ $server['host'] = $pconfig['radius_host'];
+
+ if ($pconfig['radius_secret']) {
+ $server['radius_secret'] = $pconfig['radius_secret'];
+ }
+
+ if ($pconfig['radius_timeout']) {
+ $server['radius_timeout'] = $pconfig['radius_timeout'];
+ } else {
+ $server['radius_timeout'] = 5;
+ }
+
+ if ($pconfig['radius_srvcs'] == "both") {
+ $server['radius_auth_port'] = $pconfig['radius_auth_port'];
+ $server['radius_acct_port'] = $pconfig['radius_acct_port'];
+ }
+
+ if ($pconfig['radius_srvcs'] == "auth") {
+ $server['radius_auth_port'] = $pconfig['radius_auth_port'];
+ unset($server['radius_acct_port']);
+ }
+
+ if ($pconfig['radius_srvcs'] == "acct") {
+ $server['radius_acct_port'] = $pconfig['radius_acct_port'];
+ unset($server['radius_auth_port']);
+ }
+ }
+
+ if (isset($id) && $config['system']['authserver'][$id]) {
+ $config['system']['authserver'][$id] = $server;
+ } else {
+ $config['system']['authserver'][] = $server;
+ }
+
+ write_config();
+
+ pfSenseHeader("system_authservers.php");
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function server_typechange(typ) {
+
+ var idx = 0;
+ if (!typ) {
+ idx = document.getElementById("type").selectedIndex;
+ typ = document.getElementById("type").options[idx].value;
+ }
+
+ switch (typ) {
+ case "ldap":
+ document.getElementById("ldap").style.display="";
+ document.getElementById("radius").style.display="none";
+ break;
+ case "radius":
+ document.getElementById("ldap").style.display="none";
+ document.getElementById("radius").style.display="";
+ break;
+ }
+}
+
+function ldap_urlchange() {
+ switch (document.getElementById("ldap_urltype").selectedIndex) {
+<?php
+ $index = 0;
+ foreach ($ldap_urltypes as $urltype => $urlport):
+?>
+ case <?=$index;?>:
+ document.getElementById("ldap_port").value = "<?=$urlport;?>";
+ break;
+<?php
+ $index++;
+ endforeach;
+?>
+ }
+}
+
+function ldap_bindchange() {
+
+ if (document.getElementById("ldap_anon").checked) {
+ document.getElementById("ldap_bind").style.display="none";
+ } else {
+ document.getElementById("ldap_bind").style.display="";
+ }
+}
+
+function ldap_tmplchange() {
+ switch (document.getElementById("ldap_tmpltype").selectedIndex) {
+<?php
+ $index = 0;
+ foreach ($ldap_templates as $tmpldata):
+?>
+ case <?=$index;?>:
+ document.getElementById("ldap_attr_user").value = "<?=$tmpldata['attr_user'];?>";
+ document.getElementById("ldap_attr_group").value = "<?=$tmpldata['attr_group'];?>";
+ document.getElementById("ldap_attr_member").value = "<?=$tmpldata['attr_member'];?>";
+ break;
+<?php
+ $index++;
+ endforeach;
+?>
+ }
+}
+
+function radius_srvcschange() {
+ switch (document.getElementById("radius_srvcs").selectedIndex) {
+ case 0: // both
+ document.getElementById("radius_auth").style.display="";
+ document.getElementById("radius_acct").style.display="";
+ break;
+ case 1: // authentication
+ document.getElementById("radius_auth").style.display="";
+ document.getElementById("radius_acct").style.display="none";
+ break;
+ case 2: // accounting
+ document.getElementById("radius_auth").style.display="none";
+ document.getElementById("radius_acct").style.display="";
+ break;
+ }
+}
+
+function select_clicked() {
+ if (document.getElementById("ldap_port").value == '' ||
+ document.getElementById("ldap_host").value == '' ||
+ document.getElementById("ldap_scope").value == '' ||
+ document.getElementById("ldap_basedn").value == '' ||
+ document.getElementById("ldapauthcontainers").value == '') {
+ alert("<?=gettext("Please fill the required values.");?>");
+ return;
+ }
+ if (!document.getElementById("ldap_anon").checked) {
+ if (document.getElementById("ldap_binddn").value == '' ||
+ document.getElementById("ldap_bindpw").value == '') {
+ alert("<?=gettext("Please fill the bind username/password.");?>");
+ return;
+ }
+ }
+ var url = 'system_usermanager_settings_ldapacpicker.php?';
+ url += 'port=' + document.getElementById("ldap_port").value;
+ url += '&host=' + document.getElementById("ldap_host").value;
+ url += '&scope=' + document.getElementById("ldap_scope").value;
+ url += '&basedn=' + document.getElementById("ldap_basedn").value;
+ url += '&binddn=' + document.getElementById("ldap_binddn").value;
+ url += '&bindpw=' + document.getElementById("ldap_bindpw").value;
+ url += '&urltype=' + document.getElementById("ldap_urltype").value;
+ url += '&proto=' + document.getElementById("ldap_protver").value;
+ url += '&authcn=' + document.getElementById("ldapauthcontainers").value;
+ <?php if (count($a_ca) > 0): ?>
+ url += '&cert=' + document.getElementById("ldap_caref").value;
+ <?php else: ?>
+ url += '&cert=';
+ <?php endif; ?>
+
+ var oWin = window.open(url, "pfSensePop", "width=620,height=400,top=150,left=150");
+ if (oWin == null || typeof(oWin) == "undefined") {
+ alert("<?=gettext('Popup blocker detected. Action aborted.');?>");
+ }
+}
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="auth servers">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), true, "system_authservers.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+
+ <?php if ($act == "new" || $act == "edit" || $input_errors): ?>
+
+ <form action="system_authservers.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <?php if (!isset($id)): ?>
+ <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>"/>
+ <?php else: ?>
+ <strong><?=htmlspecialchars($pconfig['name']);?></strong>
+ <input name='name' type='hidden' id='name' value="<?=htmlspecialchars($pconfig['name']);?>"/>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Type");?></td>
+ <td width="78%" class="vtable">
+ <?php if (!isset($id)): ?>
+ <select name='type' id='type' class="formselect" onchange='server_typechange()'>
+ <?php
+ foreach ($auth_server_types as $typename => $typedesc):
+ $selected = "";
+ if ($pconfig['type'] == $typename) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$typename;?>" <?=$selected;?>><?=$typedesc;?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <strong><?=$auth_server_types[$pconfig['type']];?></strong>
+ <input name='type' type='hidden' id='type' value="<?=htmlspecialchars($pconfig['type']);?>"/>
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="ldap" style="display:none" summary="">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("LDAP Server Settings");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ldap_host" type="text" class="formfld unknown" id="ldap_host" size="20" value="<?=htmlspecialchars($pconfig['ldap_host']);?>"/>
+ <br /><?= gettext("NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the LDAP server's SSL Certificate."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Port value");?></td>
+ <td width="78%" class="vtable">
+ <input name="ldap_port" type="text" class="formfld unknown" id="ldap_port" size="5" value="<?=htmlspecialchars($pconfig['ldap_port']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Transport");?></td>
+ <td width="78%" class="vtable">
+ <select name='ldap_urltype' id='ldap_urltype' class="formselect" onchange='ldap_urlchange()'>
+ <?php
+ foreach ($ldap_urltypes as $urltype => $urlport):
+ $selected = "";
+ if ($pconfig['ldap_urltype'] == $urltype) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$urltype;?>" <?=$selected;?>><?=$urltype;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="tls_ca">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Peer Certificate Authority"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_ca)): ?>
+ <select id='ldap_caref' name='ldap_caref' class="formselect">
+ <?php
+ foreach ($a_ca as $ca):
+ $selected = "";
+ if ($pconfig['ldap_caref'] == $ca['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <br /><span><?=gettext("This option is used if 'SSL Encrypted' option is chosen.");?> <br />
+ <?=gettext("It must match with the CA in the AD otherwise problems will arise.");?></span>
+ <?php else: ?>
+ <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol version");?></td>
+ <td width="78%" class="vtable">
+ <select name='ldap_protver' id='ldap_protver' class="formselect">
+ <?php
+ foreach ($ldap_protvers as $version):
+ $selected = "";
+ if ($pconfig['ldap_protver'] == $version) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$version;?>" <?=$selected;?>><?=$version;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Search scope");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="search scope">
+ <tr>
+ <td><?=gettext("Level:");?> &nbsp;</td>
+ <td>
+ <select name='ldap_scope' id='ldap_scope' class="formselect">
+ <?php
+ foreach ($ldap_scopes as $scopename => $scopedesc):
+ $selected = "";
+ if ($pconfig['ldap_scope'] == $scopename) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$scopename;?>" <?=$selected;?>><?=$scopedesc;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Base DN:");?> &nbsp;</td>
+ <td>
+ <input name="ldap_basedn" type="text" class="formfld unknown" id="ldap_basedn" size="40" value="<?=htmlspecialchars($pconfig['ldap_basedn']);?>"/>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication containers");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="auth containers">
+ <tr>
+ <td><?=gettext("Containers:");?> &nbsp;</td>
+ <td>
+ <input name="ldapauthcontainers" type="text" class="formfld unknown" id="ldapauthcontainers" size="40" value="<?=htmlspecialchars($pconfig['ldap_authcn']);?>"/>
+ <input type="button" onclick="select_clicked();" value="<?=gettext("Select");?>" />
+ <br /><?=gettext("Note: Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path containing a dc= component.");?>
+ <br /><?=gettext("Example:");?> CN=Users;DC=example,DC=com
+ <br /><?=gettext("Example:");?> OU=Staff;OU=Freelancers
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Extended Query");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="query">
+ <tr>
+ <td>
+ <input name="ldap_extended_enabled" type="checkbox" id="ldap_extended_enabled" value="no" <?php if ($pconfig['ldap_extended_enabled']) echo "checked=\"checked\""; ?> />
+ </td>
+ <td>
+
+ <input name="ldap_extended_query" type="text" class="formfld unknown" id="ldap_extended_query" size="40" value="<?=htmlspecialchars($pconfig['ldap_extended_query']);?>"/>
+ <br /><?=gettext("Example:");?> &amp;(objectClass=inetOrgPerson)(mail=*@example.com)
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bind credentials");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="bind credentials">
+ <tr>
+ <td>
+ <input name="ldap_anon" type="checkbox" id="ldap_anon" value="yes" <?php if ($pconfig['ldap_anon']) echo "checked=\"checked\""; ?> onclick="ldap_bindchange()" />
+ </td>
+ <td>
+ <?=gettext("Use anonymous binds to resolve distinguished names");?>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="0" cellpadding="2" id="ldap_bind" summary="bind">
+ <tr>
+ <td colspan="2"></td>
+ </tr>
+ <tr>
+ <td><?=gettext("User DN:");?> &nbsp;</td>
+ <td>
+ <input name="ldap_binddn" type="text" class="formfld unknown" id="ldap_binddn" size="40" value="<?=htmlspecialchars($pconfig['ldap_binddn']);?>"/><br />
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Password:");?> &nbsp;</td>
+ <td>
+ <input name="ldap_bindpw" type="password" class="formfld pwd" id="ldap_bindpw" size="20" value="<?=htmlspecialchars($pconfig['ldap_bindpw']);?>"/><br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php if (!isset($id)): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Initial Template");?></td>
+ <td width="78%" class="vtable">
+ <select name='ldap_tmpltype' id='ldap_tmpltype' class="formselect" onchange='ldap_tmplchange()'>
+ <?php
+ foreach ($ldap_templates as $tmplname => $tmpldata):
+ $selected = "";
+ if ($pconfig['ldap_template'] == $tmplname) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$tmplname;?>" <?=$selected;?>><?=$tmpldata['desc'];?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("User naming attribute");?></td>
+ <td width="78%" class="vtable">
+ <input name="ldap_attr_user" type="text" class="formfld unknown" id="ldap_attr_user" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_user']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Group naming attribute");?></td>
+ <td width="78%" class="vtable">
+ <input name="ldap_attr_group" type="text" class="formfld unknown" id="ldap_attr_group" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_group']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Group member attribute");?></td>
+ <td width="78%" class="vtable">
+ <input name="ldap_attr_member" type="text" class="formfld unknown" id="ldap_attr_member" size="20" value="<?=htmlspecialchars($pconfig['ldap_attr_member']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("UTF8 Encode");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="utf8 encoding">
+ <tr>
+ <td>
+ <input name="ldap_utf8" type="checkbox" id="ldap_utf8" value="yes" <?php if ($pconfig['ldap_utf8']) echo "checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <?=gettext("UTF8 encode LDAP parameters before sending them to the server. Required to support international characters, but may not be supported by every LDAP server.");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Username Alterations");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="username alterations">
+ <tr>
+ <td>
+ <input name="ldap_nostrip_at" type="checkbox" id="ldap_nostrip_at" value="yes" <?php if ($pconfig['ldap_nostrip_at']) echo "checked=\"checked\""; ?> />
+ </td>
+ <td>
+ <?=gettext("Do not strip away parts of the username after the @ symbol, e.g. user@host becomes user when unchecked.");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="radius" style="display:none" summary="">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Radius Server Settings");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hostname or IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="radius_host" type="text" class="formfld unknown" id="radius_host" size="20" value="<?=htmlspecialchars($pconfig['radius_host']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Secret");?></td>
+ <td width="78%" class="vtable">
+ <input name="radius_secret" type="password" class="formfld pwd" id="radius_secret" size="20" value="<?=htmlspecialchars($pconfig['radius_secret']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Services offered");?></td>
+ <td width="78%" class="vtable">
+ <select name='radius_srvcs' id='radius_srvcs' class="formselect" onchange='radius_srvcschange()'>
+ <?php
+ foreach ($radius_srvcs as $srvcname => $srvcdesc):
+ $selected = "";
+ if ($pconfig['radius_srvcs'] == $srvcname) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$srvcname;?>" <?=$selected;?>><?=$srvcdesc;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="radius_auth">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication port value");?></td>
+ <td width="78%" class="vtable">
+ <input name="radius_auth_port" type="text" class="formfld unknown" id="radius_auth_port" size="5" value="<?=htmlspecialchars($pconfig['radius_auth_port']);?>"/>
+ </td>
+ </tr>
+ <tr id="radius_acct">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Accounting port value");?></td>
+ <td width="78%" class="vtable">
+ <input name="radius_acct_port" type="text" class="formfld unknown" id="radius_acct_port" size="5" value="<?=htmlspecialchars($pconfig['radius_acct_port']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication Timeout");?></td>
+ <td width="78%" class="vtable">
+ <input name="radius_timeout" type="text" class="formfld unknown" id="radius_timeout" size="20" value="<?=htmlspecialchars($pconfig['radius_timeout']);?>"/>
+ <br /><?= gettext("This value controls how long, in seconds, that the RADIUS server may take to respond to an authentication request.") ?>
+ <br /><?= gettext("If left blank, the default value is 5 seconds.") ?>
+ <br /><br /><?= gettext("NOTE: If you are using an interactive two-factor authentication system, increase this timeout to account for how long it will take the user to receive and enter a token.") ?>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <?php if (isset($id) && $a_server[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else: ?>
+
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
+ <thead>
+ <tr>
+ <th width="25%" class="listhdrr"><?=gettext("Server Name");?></th>
+ <th width="25%" class="listhdrr"><?=gettext("Type");?></th>
+ <th width="35%" class="listhdrr"><?=gettext("Host Name");?></th>
+ <th width="10%" class="list"></th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <a href="system_authservers.php?act=new">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add server");?>" alt="<?=gettext("add server");?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <p>
+ <?=gettext("Additional authentication servers can be added here.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <?php
+ $i = 0;
+ foreach ($a_server as $server):
+ $name = htmlspecialchars($server['name']);
+ $type = htmlspecialchars($auth_server_types[$server['type']]);
+ $host = htmlspecialchars($server['host']);
+ ?>
+ <tr <?php if ($i < (count($a_server) - 1)): ?> ondblclick="document.location='system_authservers.php?act=edit&amp;id=<?=$i;?>'" <?php endif; ?>>
+ <td class="listlr"><?=$name?>&nbsp;</td>
+ <td class="listr"><?=$type;?>&nbsp;</td>
+ <td class="listr"><?=$host;?>&nbsp;</td>
+ <td valign="middle" class="list nowrap">
+ <?php if ($i < (count($a_server) - 1)): ?>
+ <a href="system_authservers.php?act=edit&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit server");?>" alt="<?=gettext("edit server");?>" width="17" height="17" border="0" />
+ </a>
+ &nbsp;
+ <a href="system_authservers.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Server?");?>')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete server");?>" alt="<?=gettext("delete server");?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ </tbody>
+ </table>
+
+ <?php endif; ?>
+
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+server_typechange('<?=htmlspecialchars($pconfig['type']);?>');
+<?php if (!isset($id) || $pconfig['type'] == "ldap"): ?>
+ldap_bindchange();
+if (document.getElementById("ldap_port").value == "") {
+ ldap_urlchange();
+}
+<?php if (!isset($id)): ?>
+ldap_tmplchange();
+<?php endif; ?>
+<?php endif; ?>
+<?php if (!isset($id) || $pconfig['type'] == "radius"): ?>
+radius_srvcschange();
+<?php endif; ?>
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/system_camanager.php b/src/usr/local/www/system_camanager.php
new file mode 100644
index 0000000..368b30c
--- /dev/null
+++ b/src/usr/local/www/system_camanager.php
@@ -0,0 +1,770 @@
+<?php
+/*
+ system_camanager.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: certificate_manager
+*/
+
+##|+PRIV
+##|*IDENT=page-system-camanager
+##|*NAME=System: CA Manager
+##|*DESCR=Allow access to the 'System: CA Manager' page.
+##|*MATCH=system_camanager.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("certs.inc");
+
+$ca_methods = array(
+ "existing" => gettext("Import an existing Certificate Authority"),
+ "internal" => gettext("Create an internal Certificate Authority"),
+ "intermediate" => gettext("Create an intermediate Certificate Authority"));
+
+$ca_keylens = array("512", "1024", "2048", "4096");
+$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
+
+$pgtitle = array(gettext("System"), gettext("Certificate Authority Manager"));
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+if (!is_array($config['crl'])) {
+ $config['crl'] = array();
+}
+
+$a_crl =& $config['crl'];
+
+$act = $_GET['act'];
+if ($_POST['act']) {
+ $act = $_POST['act'];
+}
+
+if ($act == "del") {
+
+ if (!isset($a_ca[$id])) {
+ pfSenseHeader("system_camanager.php");
+ exit;
+ }
+
+ $index = count($a_cert) - 1;
+ for (;$index >= 0; $index--) {
+ if ($a_cert[$index]['caref'] == $a_ca[$id]['refid']) {
+ unset($a_cert[$index]);
+ }
+ }
+
+ $index = count($a_crl) - 1;
+ for (;$index >= 0; $index--) {
+ if ($a_crl[$index]['caref'] == $a_ca[$id]['refid']) {
+ unset($a_crl[$index]);
+ }
+ }
+
+ $name = $a_ca[$id]['descr'];
+ unset($a_ca[$id]);
+ write_config();
+ $savemsg = sprintf(gettext("Certificate Authority %s and its CRLs (if any) successfully deleted"), htmlspecialchars($name)) . "<br />";
+ pfSenseHeader("system_camanager.php");
+ exit;
+}
+
+if ($act == "edit") {
+ if (!$a_ca[$id]) {
+ pfSenseHeader("system_camanager.php");
+ exit;
+ }
+ $pconfig['descr'] = $a_ca[$id]['descr'];
+ $pconfig['refid'] = $a_ca[$id]['refid'];
+ $pconfig['cert'] = base64_decode($a_ca[$id]['crt']);
+ $pconfig['serial'] = $a_ca[$id]['serial'];
+ if (!empty($a_ca[$id]['prv'])) {
+ $pconfig['key'] = base64_decode($a_ca[$id]['prv']);
+ }
+}
+
+if ($act == "new") {
+ $pconfig['method'] = $_GET['method'];
+ $pconfig['keylen'] = "2048";
+ $pconfig['digest_alg'] = "sha256";
+ $pconfig['lifetime'] = "3650";
+ $pconfig['dn_commonname'] = "internal-ca";
+}
+
+if ($act == "exp") {
+
+ if (!$a_ca[$id]) {
+ pfSenseHeader("system_camanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_ca[$id]['descr']}.crt");
+ $exp_data = base64_decode($a_ca[$id]['crt']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($act == "expkey") {
+
+ if (!$a_ca[$id]) {
+ pfSenseHeader("system_camanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_ca[$id]['descr']}.key");
+ $exp_data = base64_decode($a_ca[$id]['prv']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $input_errors = array();
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($pconfig['method'] == "existing") {
+ $reqdfields = explode(" ", "descr cert");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate data"));
+ if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
+ $input_errors[] = gettext("This certificate does not appear to be valid.");
+ }
+ if ($_POST['key'] && strstr($_POST['key'], "ENCRYPTED")) {
+ $input_errors[] = gettext("Encrypted private keys are not yet supported.");
+ }
+ }
+ if ($pconfig['method'] == "internal") {
+ $reqdfields = explode(" ",
+ "descr keylen lifetime dn_country dn_state dn_city ".
+ "dn_organization dn_email dn_commonname");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Key length"),
+ gettext("Lifetime"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
+ }
+ if ($pconfig['method'] == "intermediate") {
+ $reqdfields = explode(" ",
+ "descr caref keylen lifetime dn_country dn_state dn_city ".
+ "dn_organization dn_email dn_commonname");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Signing Certificate Authority"),
+ gettext("Key length"),
+ gettext("Lifetime"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ if ($pconfig['method'] != "existing") {
+ /* Make sure we do not have invalid characters in the fields for the certificate */
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
+ array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
+ }
+
+ for ($i = 0; $i < count($reqdfields); $i++) {
+ if ($reqdfields[$i] == 'dn_email') {
+ if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_email"])) {
+ array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters.");
+ }
+ } else if ($reqdfields[$i] == 'dn_commonname') {
+ if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_commonname"])) {
+ array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters.");
+ }
+ } else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST["$reqdfields[$i]"])) {
+ array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters.");
+ }
+ }
+ if (!in_array($_POST["keylen"], $ca_keylens)) {
+ array_push($input_errors, gettext("Please select a valid Key Length."));
+ }
+ if (!in_array($_POST["digest_alg"], $openssl_digest_algs)) {
+ array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* save modifications */
+ if (!$input_errors) {
+
+ $ca = array();
+ if (!isset($pconfig['refid']) || empty($pconfig['refid'])) {
+ $ca['refid'] = uniqid();
+ } else {
+ $ca['refid'] = $pconfig['refid'];
+ }
+
+ if (isset($id) && $a_ca[$id]) {
+ $ca = $a_ca[$id];
+ }
+
+ $ca['descr'] = $pconfig['descr'];
+
+ if ($_POST['edit'] == "edit") {
+ $ca['descr'] = $pconfig['descr'];
+ $ca['refid'] = $pconfig['refid'];
+ $ca['serial'] = $pconfig['serial'];
+ $ca['crt'] = base64_encode($pconfig['cert']);
+ if (!empty($pconfig['key'])) {
+ $ca['prv'] = base64_encode($pconfig['key']);
+ }
+ } else {
+ $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warnings directly to a page screwing menu tab */
+ if ($pconfig['method'] == "existing") {
+ ca_import($ca, $pconfig['cert'], $pconfig['key'], $pconfig['serial']);
+ } else if ($pconfig['method'] == "internal") {
+ $dn = array(
+ 'countryName' => $pconfig['dn_country'],
+ 'stateOrProvinceName' => $pconfig['dn_state'],
+ 'localityName' => $pconfig['dn_city'],
+ 'organizationName' => $pconfig['dn_organization'],
+ 'emailAddress' => $pconfig['dn_email'],
+ 'commonName' => $pconfig['dn_commonname']);
+ if (!ca_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['digest_alg'])) {
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors = array();
+ array_push($input_errors, "openssl library returns: " . $ssl_err);
+ }
+ }
+ }
+ else if ($pconfig['method'] == "intermediate") {
+ $dn = array(
+ 'countryName' => $pconfig['dn_country'],
+ 'stateOrProvinceName' => $pconfig['dn_state'],
+ 'localityName' => $pconfig['dn_city'],
+ 'organizationName' => $pconfig['dn_organization'],
+ 'emailAddress' => $pconfig['dn_email'],
+ 'commonName' => $pconfig['dn_commonname']);
+ if (!ca_inter_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['caref'], $pconfig['digest_alg'])) {
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors = array();
+ array_push($input_errors, "openssl library returns: " . $ssl_err);
+ }
+ }
+ }
+ error_reporting($old_err_level);
+ }
+
+ if (isset($id) && $a_ca[$id]) {
+ $a_ca[$id] = $ca;
+ } else {
+ $a_ca[] = $ca;
+ }
+
+ if (!$input_errors) {
+ write_config();
+ }
+
+// pfSenseHeader("system_camanager.php");
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function method_change() {
+
+ method = document.iform.method.selectedIndex;
+
+ switch (method) {
+ case 0:
+ document.getElementById("existing").style.display="";
+ document.getElementById("internal").style.display="none";
+ document.getElementById("intermediate").style.display="none";
+ break;
+ case 1:
+ document.getElementById("existing").style.display="none";
+ document.getElementById("internal").style.display="";
+ document.getElementById("intermediate").style.display="none";
+ break;
+ case 2:
+ document.getElementById("existing").style.display="none";
+ document.getElementById("internal").style.display="";
+ document.getElementById("intermediate").style.display="";
+ break;
+ }
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+
+ // Load valid country codes
+ $dn_cc = array();
+ if (file_exists("/etc/ca_countries")) {
+ $dn_cc_file=file("/etc/ca_countries");
+ foreach ($dn_cc_file as $line) {
+ if (preg_match('/^(\S*)\s(.*)$/', $line, $matches)) {
+ array_push($dn_cc, $matches[1]);
+ }
+ }
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="CA manager">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("CAs"), true, "system_camanager.php");
+ $tab_array[] = array(gettext("Certificates"), false, "system_certmanager.php");
+ $tab_array[] = array(gettext("Certificate Revocation"), false, "system_crlmanager.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+
+ <?php if ($act == "new" || $act == "edit" || $act == gettext("Save") || $input_errors): ?>
+
+ <form action="system_camanager.php" method="post" name="iform" id="iform">
+ <?php if ($act == "edit"): ?>
+ <input type="hidden" name="edit" value="edit" id="edit" />
+ <input type="hidden" name="id" value="<?php echo htmlspecialchars($id); ?>" id="id" />
+ <input type="hidden" name="refid" value="<?php echo $pconfig['refid']; ?>" id="refid" />
+ <?php endif; ?>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
+ </td>
+ </tr>
+ <?php if (!isset($id) || $act == "edit"): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
+ <td width="78%" class="vtable">
+ <select name='method' id='method' class="formselect" onchange='method_change()'>
+ <?php
+ foreach ($ca_methods as $method => $desc):
+ $selected = "";
+ if ($pconfig['method'] == $method) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$method;?>"<?=$selected;?>><?=$desc;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Existing Certificate Authority");?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
+ <br />
+ <?=gettext("Paste a certificate in X.509 PEM format here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Private Key");?><br /><?=gettext("(optional)");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="key" id="key" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['key']);?></textarea>
+ <br />
+ <?=gettext("Paste the private key for the above certificate here. This is optional in most cases, but required if you need to generate a Certificate Revocation List (CRL).");?>
+ </td>
+ </tr>
+
+ <?php if (!isset($id) || $act == "edit"): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Serial for next certificate");?></td>
+ <td width="78%" class="vtable">
+ <input name="serial" type="text" class="formfld unknown" id="serial" size="20" value="<?=htmlspecialchars($pconfig['serial']);?>"/>
+ <br /><?=gettext("Enter a decimal number to be used as the serial number for the next certificate to be created using this CA.");?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate Authority");?></td>
+ </tr>
+ <tr id='intermediate'>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Signing Certificate Authority");?></td>
+ <td width="78%" class="vtable">
+ <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
+ <?php
+ foreach ($a_ca as $ca):
+ if (!$ca['prv']) {
+ continue;
+ }
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>"<?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
+ <td width="78%" class="vtable">
+ <select name='keylen' id='keylen' class="formselect">
+ <?php
+ foreach ($ca_keylens as $len):
+ $selected = "";
+ if ($pconfig['keylen'] == $len) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <?=gettext("bits");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
+ <td width="78%" class="vtable">
+ <select name='digest_alg' id='digest_alg' class="formselect">
+ <?php
+ foreach ($openssl_digest_algs as $digest_alg):
+ $selected = "";
+ if ($pconfig['digest_alg'] == $digest_alg) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$digest_alg;?>"<?=$selected;?>><?=strtoupper($digest_alg);?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
+ <?=gettext("days");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="name">
+ <tr>
+ <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
+ <td align="left">
+ <select name='dn_country' class="formselect">
+ <?php
+ foreach ($dn_cc as $cc) {
+ $selected = "";
+ if ($pconfig['dn_country'] == $cc) {
+ $selected = " selected=\"selected\"";
+ }
+ print "<option value=\"$cc\"$selected>$cc</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_state']);?>"/>
+ &nbsp;
+ <em><?=gettext("ex:");?></em>
+ &nbsp;
+ <?=gettext("Texas");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("City");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_city']);?>"/>
+ &nbsp;
+ <em><?=gettext("ex:");?></em>
+ &nbsp;
+ <?=gettext("Austin");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_organization']);?>"/>
+ &nbsp;
+ <em><?=gettext("ex:");?></em>
+ &nbsp;
+ <?=gettext("My Company Inc.");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_email']);?>"/>
+ &nbsp;
+ <em><?=gettext("ex:");?></em>
+ &nbsp;
+ <?=gettext("admin@mycompany.com");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_commonname']);?>"/>
+ &nbsp;
+ <em><?=gettext("ex:");?></em>
+ &nbsp;
+ <?=gettext("internal-ca");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <?php if (isset($id) && $a_ca[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else: ?>
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Internal");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Issuer");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Certificates");?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Distinguished Name");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $i = 0;
+ foreach ($a_ca as $ca):
+ $name = htmlspecialchars($ca['descr']);
+ $subj = cert_get_subject($ca['crt']);
+ $issuer = cert_get_issuer($ca['crt']);
+ list($startdate, $enddate) = cert_get_dates($ca['crt']);
+ if ($subj == $issuer) {
+ $issuer_name = "<em>" . gettext("self-signed") . "</em>";
+ } else {
+ $issuer_name = "<em>" . gettext("external") . "</em>";
+ }
+ $subj = htmlspecialchars($subj);
+ $issuer = htmlspecialchars($issuer);
+ $certcount = 0;
+
+ $issuer_ca = lookup_ca($ca['caref']);
+ if ($issuer_ca) {
+ $issuer_name = htmlspecialchars($issuer_ca['descr']);
+ }
+
+ // TODO : Need gray certificate icon
+
+ if ($ca['prv']) {
+ $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
+ $internal = "YES";
+
+ } else {
+ $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
+ $internal = "NO";
+ }
+ foreach ($a_cert as $cert) {
+ if ($cert['caref'] == $ca['refid']) {
+ $certcount++;
+ }
+ }
+ foreach ($a_ca as $cert) {
+ if ($cert['caref'] == $ca['refid']) {
+ $certcount++;
+ }
+ }
+ ?>
+ <tr>
+ <td class="listlr">
+ <table border="0" cellpadding="0" cellspacing="0" summary="icon">
+ <tr>
+ <td align="left" valign="middle">
+ <img src="<?=$caimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
+ </td>
+ <td align="left" valign="middle">
+ <?=$name;?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td class="listr"><?=$internal;?>&nbsp;</td>
+ <td class="listr"><?=$issuer_name;?>&nbsp;</td>
+ <td class="listr"><?=$certcount;?>&nbsp;</td>
+ <td class="listr"><?=$subj;?><br />
+ <table width="100%" style="font-size: 9px" summary="valid">
+ <tr>
+ <td width="10%">&nbsp;</td>
+ <td width="20%"><?=gettext("Valid From")?>:</td>
+ <td width="70%"><?= $startdate ?></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><?=gettext("Valid Until")?>:</td>
+ <td><?= $enddate ?></td>
+ </tr>
+ </table>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="system_camanager.php?act=edit&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit CA");?>" alt="<?=gettext("edit CA");?>" width="17" height="17" border="0" />
+ </a>
+ <a href="system_camanager.php?act=exp&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export CA cert");?>" alt="<?=gettext("export CA cert");?>" width="17" height="17" border="0" />
+ </a>
+ <?php if ($ca['prv']): ?>
+ <a href="system_camanager.php?act=expkey&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export CA private key");?>" alt="<?=gettext("export CA private key");?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ <a href="system_camanager.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate Authority and its CRLs, and unreference any associated certificates?");?>')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete ca");?>" alt="<?=gettext("delete ca"); ?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="5"></td>
+ <td class="list">
+ <a href="system_camanager.php?act=new">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add or import ca");?>" alt="<?=gettext("add ca");?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5">
+ <p>
+ <?=gettext("Additional trusted Certificate Authorities can be added here.");?>
+ </p>
+ </td>
+ </tr>
+ </table>
+
+ <?php endif; ?>
+
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc");?>
+<script type="text/javascript">
+//<![CDATA[
+
+method_change();
+
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/system_certmanager.php b/src/usr/local/www/system_certmanager.php
new file mode 100644
index 0000000..cd553e6
--- /dev/null
+++ b/src/usr/local/www/system_certmanager.php
@@ -0,0 +1,1349 @@
+<?php
+/*
+ system_certmanager.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: certificate_manager
+*/
+
+##|+PRIV
+##|*IDENT=page-system-certmanager
+##|*NAME=System: Certificate Manager
+##|*DESCR=Allow access to the 'System: Certificate Manager' page.
+##|*MATCH=system_certmanager.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("certs.inc");
+
+$cert_methods = array(
+ "import" => gettext("Import an existing Certificate"),
+ "internal" => gettext("Create an internal Certificate"),
+ "external" => gettext("Create a Certificate Signing Request"),
+);
+
+$cert_keylens = array("512", "1024", "2048", "4096");
+$cert_types = array(
+ "ca" => "Certificate Authority",
+ "server" => "Server Certificate",
+ "user" => "User Certificate");
+
+$altname_types = array("DNS", "IP", "email", "URI");
+$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
+
+$pgtitle = array(gettext("System"), gettext("Certificate Manager"));
+
+if (is_numericint($_GET['userid'])) {
+ $userid = $_GET['userid'];
+}
+if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
+ $userid = $_POST['userid'];
+}
+
+if (isset($userid)) {
+ $cert_methods["existing"] = gettext("Choose an existing certificate");
+ if (!is_array($config['system']['user'])) {
+ $config['system']['user'] = array();
+ }
+ $a_user =& $config['system']['user'];
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+$internal_ca_count = 0;
+foreach ($a_ca as $ca) {
+ if ($ca['prv']) {
+ $internal_ca_count++;
+ }
+}
+
+$act = $_GET['act'];
+if ($_POST['act']) {
+ $act = $_POST['act'];
+}
+
+if ($act == "del") {
+
+ if (!isset($a_cert[$id])) {
+ pfSenseHeader("system_certmanager.php");
+ exit;
+ }
+
+ unset($a_cert[$id]);
+ write_config();
+ $savemsg = sprintf(gettext("Certificate %s successfully deleted"), htmlspecialchars($a_cert[$id]['descr'])) . "<br />";
+ pfSenseHeader("system_certmanager.php");
+ exit;
+}
+
+if ($act == "new") {
+ $pconfig['method'] = $_GET['method'];
+ $pconfig['keylen'] = "2048";
+ $pconfig['digest_alg'] = "sha256";
+ $pconfig['csr_keylen'] = "2048";
+ $pconfig['csr_digest_alg'] = "sha256";
+ $pconfig['type'] = "user";
+ $pconfig['lifetime'] = "3650";
+}
+
+if ($act == "exp") {
+
+ if (!$a_cert[$id]) {
+ pfSenseHeader("system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.crt");
+ $exp_data = base64_decode($a_cert[$id]['crt']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($act == "key") {
+
+ if (!$a_cert[$id]) {
+ pfSenseHeader("system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.key");
+ $exp_data = base64_decode($a_cert[$id]['prv']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($act == "p12") {
+ if (!$a_cert[$id]) {
+ pfSenseHeader("system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.p12");
+ $args = array();
+ $args['friendly_name'] = $a_cert[$id]['descr'];
+
+ $ca = lookup_ca($a_cert[$id]['caref']);
+ if ($ca) {
+ $args['extracerts'] = openssl_x509_read(base64_decode($ca['crt']));
+ }
+
+ $res_crt = openssl_x509_read(base64_decode($a_cert[$id]['crt']));
+ $res_key = openssl_pkey_get_private(array(0 => base64_decode($a_cert[$id]['prv']) , 1 => ""));
+
+ $exp_data = "";
+ openssl_pkcs12_export($res_crt, $exp_data, $res_key, null, $args);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($act == "csr") {
+
+ if (!$a_cert[$id]) {
+ pfSenseHeader("system_certmanager.php");
+ exit;
+ }
+
+ $pconfig['descr'] = $a_cert[$id]['descr'];
+ $pconfig['csr'] = base64_decode($a_cert[$id]['csr']);
+}
+
+if ($_POST) {
+ if ($_POST['save'] == gettext("Save")) {
+ $input_errors = array();
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($pconfig['method'] == "import") {
+ $reqdfields = explode(" ",
+ "descr cert key");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate data"),
+ gettext("Key data"));
+ if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
+ $input_errors[] = gettext("This certificate does not appear to be valid.");
+ }
+ }
+
+ if ($pconfig['method'] == "internal") {
+ $reqdfields = explode(" ",
+ "descr caref keylen type lifetime dn_country dn_state dn_city ".
+ "dn_organization dn_email dn_commonname");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate authority"),
+ gettext("Key length"),
+ gettext("Certificate Type"),
+ gettext("Lifetime"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
+ }
+
+ if ($pconfig['method'] == "external") {
+ $reqdfields = explode(" ",
+ "descr csr_keylen csr_dn_country csr_dn_state csr_dn_city ".
+ "csr_dn_organization csr_dn_email csr_dn_commonname");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Key length"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
+ }
+
+ if ($pconfig['method'] == "existing") {
+ $reqdfields = array("certref");
+ $reqdfieldsn = array(gettext("Existing Certificate Choice"));
+ }
+
+ $altnames = array();
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ if ($pconfig['method'] != "import" && $pconfig['method'] != "existing") {
+ /* subjectAltNames */
+ foreach ($_POST as $key => $value) {
+ $entry = '';
+ if (!substr_compare('altname_type', $key, 0, 12)) {
+ $entry = substr($key, 12);
+ $field = 'type';
+ }
+ elseif (!substr_compare('altname_value', $key, 0, 13)) {
+ $entry = substr($key, 13);
+ $field = 'value';
+ }
+ if (ctype_digit($entry)) {
+ $altnames[$entry][$field] = $value;
+ }
+ }
+ $pconfig['altnames']['item'] = $altnames;
+
+ /* Input validation for subjectAltNames */
+ foreach ($altnames as $idx => $altname) {
+ switch ($altname['type']) {
+ case "DNS":
+ if (!is_hostname($altname['value'])) {
+ array_push($input_errors, "DNS subjectAltName values must be valid hostnames or FQDNs");
+ }
+ break;
+ case "IP":
+ if (!is_ipaddr($altname['value'])) {
+ array_push($input_errors, "IP subjectAltName values must be valid IP Addresses");
+ }
+ break;
+ case "email":
+ if (empty($altname['value'])) {
+ array_push($input_errors, "You must provide an e-mail address for this type of subjectAltName");
+ }
+ if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $altname['value'])) {
+ array_push($input_errors, "The e-mail provided in a subjectAltName contains invalid characters.");
+ }
+ break;
+ case "URI":
+ /* Close enough? */
+ if (!is_URL($altname['value'])) {
+ $input_errors[] = "URI subjectAltName types must be a valid URI";
+ }
+ break;
+ default:
+ $input_errors[] = "Unrecognized subjectAltName type.";
+ }
+ }
+
+ /* Make sure we do not have invalid characters in the fields for the certificate */
+
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
+ array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
+ }
+
+ for ($i = 0; $i < count($reqdfields); $i++) {
+ if (preg_match('/email/', $reqdfields[$i])) { /* dn_email or csr_dn_name */
+ if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
+ array_push($input_errors, "The field 'Distinguished name Email Address' contains invalid characters.");
+ }
+ } else if (preg_match('/commonname/', $reqdfields[$i])) { /* dn_commonname or csr_dn_commonname */
+ if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
+ array_push($input_errors, "The field 'Distinguished name Common Name' contains invalid characters.");
+ }
+ } else if (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST[$reqdfields[$i]])) {
+ array_push($input_errors, "The field '" . $reqdfieldsn[$i] . "' contains invalid characters.");
+ }
+ }
+
+ if (($pconfig['method'] != "external") && isset($_POST["keylen"]) && !in_array($_POST["keylen"], $cert_keylens)) {
+ array_push($input_errors, gettext("Please select a valid Key Length."));
+ }
+ if (($pconfig['method'] != "external") && !in_array($_POST["digest_alg"], $openssl_digest_algs)) {
+ array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
+ }
+
+ if (($pconfig['method'] == "external") && isset($_POST["csr_keylen"]) && !in_array($_POST["csr_keylen"], $cert_keylens)) {
+ array_push($input_errors, gettext("Please select a valid Key Length."));
+ }
+ if (($pconfig['method'] == "external") && !in_array($_POST["csr_digest_alg"], $openssl_digest_algs)) {
+ array_push($input_errors, gettext("Please select a valid Digest Algorithm."));
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* save modifications */
+ if (!$input_errors) {
+
+ if ($pconfig['method'] == "existing") {
+ $cert = lookup_cert($pconfig['certref']);
+ if ($cert && $a_user) {
+ $a_user[$userid]['cert'][] = $cert['refid'];
+ }
+ } else {
+ $cert = array();
+ $cert['refid'] = uniqid();
+ if (isset($id) && $a_cert[$id]) {
+ $cert = $a_cert[$id];
+ }
+
+ $cert['descr'] = $pconfig['descr'];
+
+ $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warnings directly to a page screwing menu tab */
+
+ if ($pconfig['method'] == "import") {
+ cert_import($cert, $pconfig['cert'], $pconfig['key']);
+ }
+
+ if ($pconfig['method'] == "internal") {
+ $dn = array(
+ 'countryName' => $pconfig['dn_country'],
+ 'stateOrProvinceName' => $pconfig['dn_state'],
+ 'localityName' => $pconfig['dn_city'],
+ 'organizationName' => $pconfig['dn_organization'],
+ 'emailAddress' => $pconfig['dn_email'],
+ 'commonName' => $pconfig['dn_commonname']);
+ if (count($altnames)) {
+ $altnames_tmp = "";
+ foreach ($altnames as $altname) {
+ $altnames_tmp[] = "{$altname['type']}:{$altname['value']}";
+ }
+ $dn['subjectAltName'] = implode(",", $altnames_tmp);
+ }
+ if (!cert_create($cert, $pconfig['caref'], $pconfig['keylen'],
+ $pconfig['lifetime'], $dn, $pconfig['type'], $pconfig['digest_alg'])) {
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors = array();
+ array_push($input_errors, "openssl library returns: " . $ssl_err);
+ }
+ }
+ }
+
+ if ($pconfig['method'] == "external") {
+ $dn = array(
+ 'countryName' => $pconfig['csr_dn_country'],
+ 'stateOrProvinceName' => $pconfig['csr_dn_state'],
+ 'localityName' => $pconfig['csr_dn_city'],
+ 'organizationName' => $pconfig['csr_dn_organization'],
+ 'emailAddress' => $pconfig['csr_dn_email'],
+ 'commonName' => $pconfig['csr_dn_commonname']);
+ if (count($altnames)) {
+ $altnames_tmp = "";
+ foreach ($altnames as $altname) {
+ $altnames_tmp[] = "{$altname['type']}:{$altname['value']}";
+ }
+ $dn['subjectAltName'] = implode(",", $altnames_tmp);
+ }
+ if (!csr_generate($cert, $pconfig['csr_keylen'], $dn, $pconfig['csr_digest_alg'])) {
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors = array();
+ array_push($input_errors, "openssl library returns: " . $ssl_err);
+ }
+ }
+ }
+ error_reporting($old_err_level);
+
+ if (isset($id) && $a_cert[$id]) {
+ $a_cert[$id] = $cert;
+ } else {
+ $a_cert[] = $cert;
+ }
+ if (isset($a_user) && isset($userid)) {
+ $a_user[$userid]['cert'][] = $cert['refid'];
+ }
+ }
+
+ if (!$input_errors) {
+ write_config();
+ }
+
+ if ($userid) {
+ post_redirect("system_usermanager.php", array('act' => 'edit', 'userid' => $userid));
+ exit;
+ }
+ }
+ }
+
+ if ($_POST['save'] == gettext("Update")) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "descr cert");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Final Certificate data"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
+ array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
+ }
+
+// old way
+ /* make sure this csr and certificate subjects match */
+// $subj_csr = csr_get_subject($pconfig['csr'], false);
+// $subj_cert = cert_get_subject($pconfig['cert'], false);
+//
+// if (!isset($_POST['ignoresubjectmismatch']) && !($_POST['ignoresubjectmismatch'] == "yes")) {
+// if (strcmp($subj_csr, $subj_cert)) {
+// $input_errors[] = sprintf(gettext("The certificate subject '%s' does not match the signing request subject."), $subj_cert);
+// $subject_mismatch = true;
+// }
+// }
+ $mod_csr = csr_get_modulus($pconfig['csr'], false);
+ $mod_cert = cert_get_modulus($pconfig['cert'], false);
+
+ if (strcmp($mod_csr, $mod_cert)) {
+ // simply: if the moduli don't match, then the private key and public key won't match
+ $input_errors[] = sprintf(gettext("The certificate modulus does not match the signing request modulus."), $subj_cert);
+ $subject_mismatch = true;
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* save modifications */
+ if (!$input_errors) {
+
+ $cert = $a_cert[$id];
+
+ $cert['descr'] = $pconfig['descr'];
+
+ csr_complete($cert, $pconfig['cert']);
+
+ $a_cert[$id] = $cert;
+
+ write_config();
+
+ pfSenseHeader("system_certmanager.php");
+ }
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function method_change() {
+
+<?php
+ if ($internal_ca_count) {
+ $submit_style = "";
+ } else {
+ $submit_style = "none";
+ }
+?>
+
+ method = document.iform.method.selectedIndex;
+
+ switch (method) {
+ case 0:
+ document.getElementById("import").style.display="";
+ document.getElementById("internal").style.display="none";
+ document.getElementById("external").style.display="none";
+ document.getElementById("existing").style.display="none";
+ document.getElementById("descriptivename").style.display="";
+ document.getElementById("submit").style.display="";
+ break;
+ case 1:
+ document.getElementById("import").style.display="none";
+ document.getElementById("internal").style.display="";
+ document.getElementById("external").style.display="none";
+ document.getElementById("existing").style.display="none";
+ document.getElementById("descriptivename").style.display="";
+ document.getElementById("submit").style.display="<?=$submit_style;?>";
+ break;
+ case 2:
+ document.getElementById("import").style.display="none";
+ document.getElementById("internal").style.display="none";
+ document.getElementById("external").style.display="";
+ document.getElementById("existing").style.display="none";
+ document.getElementById("descriptivename").style.display="";
+ document.getElementById("submit").style.display="";
+ break;
+ case 3:
+ document.getElementById("import").style.display="none";
+ document.getElementById("internal").style.display="none";
+ document.getElementById("external").style.display="none";
+ document.getElementById("existing").style.display="";
+ document.getElementById("descriptivename").style.display="none";
+ document.getElementById("submit").style.display="";
+ break;
+ }
+}
+
+<?php if ($internal_ca_count): ?>
+function internalca_change() {
+
+ index = document.iform.caref.selectedIndex;
+ caref = document.iform.caref[index].value;
+
+ switch (caref) {
+<?php
+ foreach ($a_ca as $ca):
+ if (!$ca['prv']) {
+ continue;
+ }
+ $subject = cert_get_subject_array($ca['crt']);
+?>
+ case "<?=$ca['refid'];?>":
+ document.iform.dn_country.value = "<?=$subject[0]['v'];?>";
+ document.iform.dn_state.value = "<?=$subject[1]['v'];?>";
+ document.iform.dn_city.value = "<?=$subject[2]['v'];?>";
+ document.iform.dn_organization.value = "<?=$subject[3]['v'];?>";
+ document.iform.dn_email.value = "<?=$subject[4]['v'];?>";
+ break;
+<?php
+ endforeach;
+?>
+ }
+}
+<?php endif; ?>
+
+//]]>
+</script>
+<script type="text/javascript" src="/javascript/row_helper_dynamic.js"></script>
+<input type='hidden' name='altname_value_type' value='select' />
+<input type='hidden' name='altname_type_type' value='textbox' />
+<script type="text/javascript">
+//<![CDATA[
+ rowname[0] = "altname_type";
+ rowtype[0] = "textbox";
+ rowsize[0] = "10";
+ rowname[1] = "altname_value";
+ rowtype[1] = "textbox";
+ rowsize[1] = "30";
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+
+ // Load valid country codes
+ $dn_cc = array();
+ if (file_exists("/etc/ca_countries")) {
+ $dn_cc_file=file("/etc/ca_countries");
+ foreach ($dn_cc_file as $line) {
+ if (preg_match('/^(\S*)\s(.*)$/', $line, $matches)) {
+ array_push($dn_cc, $matches[1]);
+ }
+ }
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="cert manager">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("CAs"), false, "system_camanager.php");
+ $tab_array[] = array(gettext("Certificates"), true, "system_certmanager.php");
+ $tab_array[] = array(gettext("Certificate Revocation"), false, "system_crlmanager.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+
+ <?php if ($act == "new" || (($_POST['save'] == gettext("Save")) && $input_errors)): ?>
+
+ <form action="system_certmanager.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <?php if (!isset($id)): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
+ <td width="78%" class="vtable">
+ <select name='method' id='method' class="formselect" onchange='method_change()'>
+ <?php
+ foreach ($cert_methods as $method => $desc):
+ $selected = "";
+ if ($pconfig['method'] == $method) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$method;?>"<?=$selected;?>><?=$desc;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr id="descriptivename">
+ <?php
+ if ($a_user && empty($pconfig['descr'])) {
+ $pconfig['descr'] = $a_user[$userid]['name'];
+ }
+ ?>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="import" summary="import">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Import Certificate");?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
+ <br />
+ <?=gettext("Paste a certificate in X.509 PEM format here.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Private key data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="key" id="key" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['key']);?></textarea>
+ <br />
+ <?=gettext("Paste a private key in X.509 PEM format here.");?>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate");?></td>
+ </tr>
+
+ <?php if (!$internal_ca_count): ?>
+
+ <tr>
+ <td colspan="2" align="center" class="vtable">
+ <?=gettext("No internal Certificate Authorities have been defined. You must");?>
+ <a href="system_camanager.php?act=new&amp;method=internal"><?=gettext("create");?></a>
+ <?=gettext("an internal CA before creating an internal certificate.");?>
+ </td>
+ </tr>
+
+ <?php else: ?>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate authority");?></td>
+ <td width="78%" class="vtable">
+ <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
+ <?php
+ foreach ($a_ca as $ca):
+ if (!$ca['prv']) {
+ continue;
+ }
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>"<?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
+ <td width="78%" class="vtable">
+ <select name='keylen' class="formselect">
+ <?php
+ foreach ($cert_keylens as $len):
+ $selected = "";
+ if ($pconfig['keylen'] == $len) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <?=gettext("bits");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
+ <td width="78%" class="vtable">
+ <select name='digest_alg' id='digest_alg' class="formselect">
+ <?php
+ foreach ($openssl_digest_algs as $digest_alg):
+ $selected = "";
+ if ($pconfig['digest_alg'] == $digest_alg) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$digest_alg;?>"<?=$selected;?>><?=strtoupper($digest_alg);?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Type");?></td>
+ <td width="78%" class="vtable">
+ <select name='type' class="formselect">
+ <?php
+ foreach ($cert_types as $ct => $ctdesc):
+ $selected = "";
+ if ($pconfig['type'] == $ct) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ct;?>"<?=$selected;?>><?=$ctdesc;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br />
+ <?=gettext("Type of certificate to generate. Used for placing restrictions on the usage of the generated certificate.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
+ <?=gettext("days");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="name">
+ <tr>
+ <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_country" type="text" class="formfld unknown" maxlength="2" size="2" value="<?=htmlspecialchars($pconfig['dn_country']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_state']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("City");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_city']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['dn_organization']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
+ <td align="left">
+ <input name="dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_email']);?>"/>
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("webadmin@mycompany.com");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
+ <td align="left">
+ <?php
+ if ($a_user && empty($pconfig['dn_commonname'])) {
+ $pconfig['dn_commonname'] = $a_user[$userid]['name'];
+ }
+ ?>
+ <input name="dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['dn_commonname']);?>"/>
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("www.example.com");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Alternative Names");?> : &nbsp;</td>
+ <td align="left">
+ <table id="altNametable">
+ <thead>
+ <tr>
+ <th><div id="onecolumn"><?=gettext("Type");?></div></th>
+ <th><div id="twocolumn"><?=gettext("Value");?></div></th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php
+ $counter = 0;
+ if ($pconfig['altnames']['item']):
+ foreach ($pconfig['altnames']['item'] as $item):
+ $type = $item['type'];
+ $value = $item['value'];
+ ?>
+ <tr>
+ <td>
+ <input autocomplete="off" name="altname_type<?php echo $counter; ?>" type="text" class="formfld unknown" id="altname_type<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($type);?>" />
+ </td>
+ <td>
+ <input autocomplete="off" name="altname_value<?php echo $counter; ?>" type="text" class="formfld unknown" id="altname_value<?php echo $counter; ?>" size="20" value="<?=htmlspecialchars($value);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
+ </td>
+ </tr>
+ <?php
+ $counter++;
+ endforeach;
+ endif;
+ ?>
+ <tr><td>&nbsp;</td></tr>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('altNametable', 'formfldalias'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ <script type="text/javascript">
+ //<![CDATA[
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+ </script>
+ <br />NOTE: Type must be one of DNS (FQDN or Hostname), IP (IP address), URI, or email.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="external" summary="external">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("External Signing Request");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
+ <td width="78%" class="vtable">
+ <select name='csr_keylen' class="formselect">
+ <?php
+ if (!isset($pconfig['csr_keylen']) && isset($pconfig['csr_keylen'])) {
+ $pconfig['csr_keylen'] = $pconfig['csr_keylen'];
+ }
+ foreach ($cert_keylens as $len):
+ $selected = "";
+ if ($pconfig['csr_keylen'] == $len) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$len;?>"<?=$selected;?>><?=$len;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ bits
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Digest Algorithm");?></td>
+ <td width="78%" class="vtable">
+ <select name='csr_digest_alg' id='csr_digest_alg' class="formselect">
+ <?php
+ foreach ($openssl_digest_algs as $csr_digest_alg):
+ $selected = "";
+ if ($pconfig['csr_digest_alg'] == $csr_digest_alg) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$csr_digest_alg;?>"<?=$selected;?>><?=strtoupper($csr_digest_alg);?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ <br /><?= gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Distinguished name");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="2" summary="name">
+ <tr>
+ <td align="right"><?=gettext("Country Code");?> : &nbsp;</td>
+ <td align="left">
+ <select name='csr_dn_country' class="formselect">
+ <?php
+ foreach ($dn_cc as $cc) {
+ $selected = "";
+ if ($pconfig['csr_dn_country'] == $cc) {
+ $selected = " selected=\"selected\"";
+ }
+ print "<option value=\"$cc\"$selected>$cc</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("State or Province");?> : &nbsp;</td>
+ <td align="left">
+ <input name="csr_dn_state" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_state']);?>" />
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("Texas");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("City");?> : &nbsp;</td>
+ <td align="left">
+ <input name="csr_dn_city" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_city']);?>" />
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("Austin");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Organization");?> : &nbsp;</td>
+ <td align="left">
+ <input name="csr_dn_organization" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['csr_dn_organization']);?>" />
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("My Company Inc.");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Email Address");?> : &nbsp;</td>
+ <td align="left">
+ <input name="csr_dn_email" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['csr_dn_email']);?>"/>
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("webadmin@mycompany.com");?>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><?=gettext("Common Name");?> : &nbsp;</td>
+ <td align="left">
+ <input name="csr_dn_commonname" type="text" class="formfld unknown" size="25" value="<?=htmlspecialchars($pconfig['csr_dn_commonname']);?>"/>
+ &nbsp;
+ <em>ex:</em>
+ &nbsp;
+ <?=gettext("www.example.com");?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Choose an Existing Certificate");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Existing Certificates");?></td>
+ <td width="78%" class="vtable">
+ <?php if (isset($userid) && $a_user): ?>
+ <input name="userid" type="hidden" value="<?=htmlspecialchars($userid);?>" />
+ <?php endif;?>
+ <select name='certref' class="formselect">
+ <?php
+ foreach ($config['cert'] as $cert):
+ $selected = "";
+ $caname = "";
+ $inuse = "";
+ $revoked = "";
+ if (isset($userid) && in_array($cert['refid'], $config['system']['user'][$userid]['cert'])) {
+ continue;
+ }
+ $ca = lookup_ca($cert['caref']);
+ if ($ca) {
+ $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
+ }
+ if ($pconfig['certref'] == $cert['refid']) {
+ $selected = " selected=\"selected\"";
+ }
+ if (cert_in_use($cert['refid'])) {
+ $inuse = " *In Use";
+ }
+ if (is_cert_revoked($cert)) {
+ $revoked = " *Revoked";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>"<?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
+ <?php
+ endforeach;
+ ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <?php if (isset($id) && $a_cert[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php elseif ($act == "csr" || (($_POST['save'] == gettext("Update")) && $input_errors)):?>
+
+ <form action="system_certmanager.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="name">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Complete Signing Request");?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Signing request data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="csr" id="csr" cols="65" rows="7" class="formfld_cert" readonly="readonly"><?=htmlspecialchars($pconfig['csr']);?></textarea>
+ <br />
+ <?=gettext("Copy the certificate signing data from here and forward it to your certificate authority for signing.");?></td>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Final certificate data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="cert" id="cert" cols="65" rows="7" class="formfld_cert"><?=htmlspecialchars($pconfig['cert']);?></textarea>
+ <br />
+ <?=gettext("Paste the certificate received from your certificate authority here.");?></td>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php /* if (isset($subject_mismatch) && $subject_mismatch === true): ?>
+ <input id="ignoresubjectmismatch" name="ignoresubjectmismatch" type="checkbox" class="formbtn" value="yes" />
+ <label for="ignoresubjectmismatch"><strong><?=gettext("Ignore certificate subject mismatch"); ?></strong></label><br />
+ <?php echo gettext("Warning: Using this option may create an " .
+ "invalid certificate. Check this box to disable the request -> " .
+ "response subject verification. ");
+ ?><br />
+ <?php endif; */ ?>
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Update");?>" />
+ <?php if (isset($id) && $a_cert[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <input name="act" type="hidden" value="csr" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else:?>
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="details">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Issuer");?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Distinguished Name");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("In Use");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $pluginparams = array();
+ $pluginparams['type'] = 'certificates';
+ $pluginparams['event'] = 'used_certificates';
+ $certificates_used_by_packages = pkg_call_plugins('plugin_certificates', $pluginparams);
+ $i = 0;
+ foreach ($a_cert as $cert):
+ $name = htmlspecialchars($cert['descr']);
+
+ if ($cert['crt']) {
+ $subj = cert_get_subject($cert['crt']);
+ $issuer = cert_get_issuer($cert['crt']);
+ $purpose = cert_get_purpose($cert['crt']);
+ list($startdate, $enddate) = cert_get_dates($cert['crt']);
+ if ($subj == $issuer) {
+ $caname = "<em>" . gettext("self-signed") . "</em>";
+ } else {
+ $caname = "<em>" . gettext("external"). "</em>";
+ }
+ $subj = htmlspecialchars($subj);
+ }
+
+ if ($cert['csr']) {
+ $subj = htmlspecialchars(csr_get_subject($cert['csr']));
+ $caname = "<em>" . gettext("external - signature pending") . "</em>";
+ }
+
+ $ca = lookup_ca($cert['caref']);
+ if ($ca) {
+ $caname = htmlspecialchars($ca['descr']);
+ }
+
+ if ($cert['prv']) {
+ $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
+ } else {
+ $certimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
+ }
+ ?>
+ <tr>
+ <td class="listlr">
+ <table border="0" cellpadding="0" cellspacing="0" summary="icon">
+ <tr>
+ <td align="left" valign="middle">
+ <img src="<?=$certimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
+ </td>
+ <td align="left" valign="middle">
+ <?=$name;?>
+ </td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ <?php if ($cert['type']): ?>
+ <tr>
+ <td colspan="2"><em><?php echo $cert_types[$cert['type']]; ?></em></td>
+ </tr>
+ <?php endif; ?>
+ <?php if (is_array($purpose)): ?>
+ <tr>
+ <td colspan="2">
+ CA: <?php echo $purpose['ca']; ?>,
+ Server: <?php echo $purpose['server']; ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ </table>
+ </td>
+ <td class="listr"><?=$caname;?>&nbsp;</td>
+ <td class="listr"><?=$subj;?>&nbsp;<br />
+ <table width="100%" style="font-size: 9px" summary="valid">
+ <tr>
+ <td width="10%">&nbsp;</td>
+ <td width="20%"><?=gettext("Valid From")?>:</td>
+ <td width="70%"><?= $startdate ?></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><?=gettext("Valid Until")?>:</td>
+ <td><?= $enddate ?></td>
+ </tr>
+ </table>
+ </td>
+ <td class="listr">
+ <?php if (is_cert_revoked($cert)): ?>
+ <b>Revoked</b><br />
+ <?php endif; ?>
+ <?php if (is_webgui_cert($cert['refid'])): ?>
+ webConfigurator<br />
+ <?php endif; ?>
+ <?php if (is_user_cert($cert['refid'])): ?>
+ User Cert<br />
+ <?php endif; ?>
+ <?php if (is_openvpn_server_cert($cert['refid'])): ?>
+ OpenVPN Server<br />
+ <?php endif; ?>
+ <?php if (is_openvpn_client_cert($cert['refid'])): ?>
+ OpenVPN Client<br />
+ <?php endif; ?>
+ <?php if (is_ipsec_cert($cert['refid'])): ?>
+ IPsec Tunnel<br />
+ <?php endif; ?>
+ <?php if (is_captiveportal_cert($cert['refid'])): ?>
+ Captive Portal<br />
+ <?php endif; ?>
+ <?
+ $refid = $cert['refid'];
+ if (is_array($certificates_used_by_packages)) {
+ foreach ($certificates_used_by_packages as $name => $package) {
+ if (isset($package['certificatelist'][$refid])) {
+ $hint = "" ;
+ if (is_array($package['certificatelist'][$refid])) {
+ foreach ($package['certificatelist'][$refid] as $cert_used) {
+ $hint = $hint . $cert_used['usedby']."\n";
+ }
+ }
+ $count = count($package['certificatelist'][$refid]);
+ echo "<div title='".htmlspecialchars($hint)."'>";
+ echo htmlspecialchars($package['pkgname'])." ($count)<br />";
+ echo "</div>";
+ }
+ }
+ }
+ ?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="system_certmanager.php?act=exp&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export cert");?>" alt="<?=gettext("export ca");?>" width="17" height="17" border="0" />
+ </a>
+ <a href="system_certmanager.php?act=key&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export key");?>" alt="<?=gettext("export ca");?>" width="17" height="17" border="0" />
+ </a>
+ <a href="system_certmanager.php?act=p12&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("export ca cert+user cert+user cert key in .p12 format");?>" alt="<?=gettext("export ca cert+user cert+user cert key in .p12 format");?>" width="17" height="17" border="0" />
+ </a>
+ <?php if (!cert_in_use($cert['refid'])): ?>
+ <a href="system_certmanager.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate?");?>')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete cert");?>" alt="<?=gettext("delete cert");?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ <?php if ($cert['csr']): ?>
+ &nbsp;
+ <a href="system_certmanager.php?act=csr&amp;id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("update csr");?>" alt="<?=gettext("update csr");?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <a href="system_certmanager.php?act=new">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add or import certificate");?>" alt="<?=gettext("add certificate");?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td colspan="3"><?=gettext("Note: You can only delete a certificate if it is not currently in use.");?></td>
+ </tr>
+ </table>
+
+ <?php endif; ?>
+
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc");?>
+<script type="text/javascript">
+//<![CDATA[
+
+method_change();
+internalca_change();
+
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/system_crlmanager.php b/src/usr/local/www/system_crlmanager.php
new file mode 100644
index 0000000..ff70e9b
--- /dev/null
+++ b/src/usr/local/www/system_crlmanager.php
@@ -0,0 +1,722 @@
+<?php
+/*
+ system_crlmanager.php
+
+ Copyright (C) 2010 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: certificate_manager
+*/
+
+##|+PRIV
+##|*IDENT=page-system-crlmanager
+##|*NAME=System: CRL Manager
+##|*DESCR=Allow access to the 'System: CRL Manager' page.
+##|*MATCH=system_crlmanager.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("certs.inc");
+require_once("openvpn.inc");
+require_once("vpn.inc");
+
+global $openssl_crl_status;
+
+$pgtitle = array(gettext("System"), gettext("Certificate Revocation List Manager"));
+
+$crl_methods = array(
+ "internal" => gettext("Create an internal Certificate Revocation List"),
+ "existing" => gettext("Import an existing Certificate Revocation List"));
+
+if (ctype_alnum($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && ctype_alnum($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+if (!is_array($config['crl'])) {
+ $config['crl'] = array();
+}
+
+$a_crl =& $config['crl'];
+
+foreach ($a_crl as $cid => $acrl) {
+ if (!isset($acrl['refid'])) {
+ unset ($a_crl[$cid]);
+ }
+}
+
+$act = $_GET['act'];
+if ($_POST['act']) {
+ $act = $_POST['act'];
+}
+
+if (!empty($id)) {
+ $thiscrl =& lookup_crl($id);
+}
+
+// If we were given an invalid crlref in the id, no sense in continuing as it would only cause errors.
+if (!$thiscrl && (($act != "") && ($act != "new"))) {
+ pfSenseHeader("system_crlmanager.php");
+ $act="";
+ $savemsg = gettext("Invalid CRL reference.");
+}
+
+if ($act == "del") {
+ $name = htmlspecialchars($thiscrl['descr']);
+ if (crl_in_use($id)) {
+ $savemsg = sprintf(gettext("Certificate Revocation List %s is in use and cannot be deleted"), $name) . "<br />";
+ } else {
+ foreach ($a_crl as $cid => $acrl) {
+ if ($acrl['refid'] == $thiscrl['refid']) {
+ unset($a_crl[$cid]);
+ }
+ }
+ write_config("Deleted CRL {$name}.");
+ $savemsg = sprintf(gettext("Certificate Revocation List %s successfully deleted"), $name) . "<br />";
+ }
+}
+
+if ($act == "new") {
+ $pconfig['method'] = $_GET['method'];
+ $pconfig['caref'] = $_GET['caref'];
+ $pconfig['lifetime'] = "9999";
+ $pconfig['serial'] = "0";
+}
+
+if ($act == "exp") {
+ crl_update($thiscrl);
+ $exp_name = urlencode("{$thiscrl['descr']}.crl");
+ $exp_data = base64_decode($thiscrl['text']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+}
+
+if ($act == "addcert") {
+ if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!$pconfig['crlref'] || !$pconfig['certref']) {
+ pfSenseHeader("system_crlmanager.php");
+ exit;
+ }
+
+ // certref, crlref
+ $crl =& lookup_crl($pconfig['crlref']);
+ $cert = lookup_cert($pconfig['certref']);
+
+ if (!$crl['caref'] || !$cert['caref']) {
+ $input_errors[] = gettext("Both the Certificate and CRL must be specified.");
+ }
+
+ if ($crl['caref'] != $cert['caref']) {
+ $input_errors[] = gettext("CA mismatch between the Certificate and CRL. Unable to Revoke.");
+ }
+ if (!is_crl_internal($crl)) {
+ $input_errors[] = gettext("Cannot revoke certificates for an imported/external CRL.");
+ }
+
+ if (!$input_errors) {
+ $reason = (empty($pconfig['crlreason'])) ? OCSP_REVOKED_STATUS_UNSPECIFIED : $pconfig['crlreason'];
+ cert_revoke($cert, $crl, $reason);
+ // refresh IPsec and OpenVPN CRLs
+ openvpn_refresh_crls();
+ vpn_ipsec_configure();
+ write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}.");
+ pfSenseHeader("system_crlmanager.php");
+ exit;
+ }
+ }
+}
+
+if ($act == "delcert") {
+ if (!is_array($thiscrl['cert'])) {
+ pfSenseHeader("system_crlmanager.php");
+ exit;
+ }
+ $found = false;
+ foreach ($thiscrl['cert'] as $acert) {
+ if ($acert['refid'] == $_GET['certref']) {
+ $found = true;
+ $thiscert = $acert;
+ }
+ }
+ if (!$found) {
+ pfSenseHeader("system_crlmanager.php");
+ exit;
+ }
+ $certname = htmlspecialchars($thiscert['descr']);
+ $crlname = htmlspecialchars($thiscrl['descr']);
+ if (cert_unrevoke($thiscert, $thiscrl)) {
+ $savemsg = sprintf(gettext("Deleted Certificate %s from CRL %s"), $certname, $crlname) . "<br />";
+ // refresh IPsec and OpenVPN CRLs
+ openvpn_refresh_crls();
+ vpn_ipsec_configure();
+ write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $certname, $crlname));
+ } else {
+ $savemsg = sprintf(gettext("Failed to delete Certificate %s from CRL %s"), $certname, $crlname) . "<br />";
+ }
+ $act="edit";
+}
+
+if ($_POST) {
+ $input_errors = array();
+ $pconfig = $_POST;
+
+ /* input validation */
+ if (($pconfig['method'] == "existing") || ($act == "editimported")) {
+ $reqdfields = explode(" ", "descr crltext");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate Revocation List data"));
+ }
+ if ($pconfig['method'] == "internal") {
+ $reqdfields = explode(" ", "descr caref");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate Authority"));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $pconfig['descr'])) {
+ array_push($input_errors, "The field 'Descriptive Name' contains invalid characters.");
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ /* save modifications */
+ if (!$input_errors) {
+ $result = false;
+
+ if ($thiscrl) {
+ $crl =& $thiscrl;
+ } else {
+ $crl = array();
+ $crl['refid'] = uniqid();
+ }
+
+ $crl['descr'] = $pconfig['descr'];
+ if ($act != "editimported") {
+ $crl['caref'] = $pconfig['caref'];
+ $crl['method'] = $pconfig['method'];
+ }
+
+ if (($pconfig['method'] == "existing") || ($act == "editimported")) {
+ $crl['text'] = base64_encode($pconfig['crltext']);
+ }
+
+ if ($pconfig['method'] == "internal") {
+ $crl['serial'] = empty($pconfig['serial']) ? 9999 : $pconfig['serial'];
+ $crl['lifetime'] = empty($pconfig['lifetime']) ? 9999 : $pconfig['lifetime'];
+ $crl['cert'] = array();
+ }
+
+ if (!$thiscrl) {
+ $a_crl[] = $crl;
+ }
+
+ write_config("Saved CRL {$crl['descr']}");
+ // refresh IPsec and OpenVPN CRLs
+ openvpn_refresh_crls();
+ vpn_ipsec_configure();
+ pfSenseHeader("system_crlmanager.php");
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function method_change() {
+
+ method = document.iform.method.value;
+
+ switch (method) {
+ case "internal":
+ document.getElementById("existing").style.display="none";
+ document.getElementById("internal").style.display="";
+ break;
+ case "existing":
+ document.getElementById("existing").style.display="";
+ document.getElementById("internal").style.display="none";
+ break;
+ }
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="CRL manager">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("CAs"), false, "system_camanager.php");
+ $tab_array[] = array(gettext("Certificates"), false, "system_certmanager.php");
+ $tab_array[] = array(gettext("Certificate Revocation"), true, "system_crlmanager.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+
+<?php
+ if ($act == "new" || $act == gettext("Save") || $input_errors):
+?>
+
+ <form action="system_crlmanager.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <?php if (!isset($id)): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Method");?></td>
+ <td width="78%" class="vtable">
+ <select name='method' id='method' class="formselect" onchange='method_change()'>
+ <?php
+ $rowIndex = 0;
+ foreach ($crl_methods as $method => $desc):
+ if (($_GET['importonly'] == "yes") && ($method != "existing")) {
+ continue;
+ }
+ $selected = "";
+ if ($pconfig['method'] == $method) {
+ $selected = "selected=\"selected\"";
+ }
+ $rowIndex++;
+ ?>
+ <option value="<?=$method;?>" <?=$selected;?>><?=$desc;?></option>
+ <?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate Authority");?></td>
+ <td width="78%" class="vtable">
+ <select name='caref' id='caref' class="formselect">
+ <?php
+ $rowIndex = 0;
+ foreach ($a_ca as $ca):
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ $rowIndex++;
+ ?>
+ <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="existing" summary="existing">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Existing Certificate Revocation List");?></td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("CRL data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="crltext" id="crltext" cols="65" rows="7" class="formfld_crl"><?=$pconfig['crltext'];?></textarea>
+ <br />
+ <?=gettext("Paste a Certificate Revocation List in X.509 CRL format here.");?>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="internal" summary="internal">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Internal Certificate Revocation List");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>"/>
+ <?=gettext("days");?><br />
+ <?=gettext("Default: 9999");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Serial");?></td>
+ <td width="78%" class="vtable">
+ <input name="serial" type="text" class="formfld unknown" id="serial" size="5" value="<?=htmlspecialchars($pconfig['serial']);?>"/>
+ <br />
+ <?=gettext("Default: 0");?>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="save">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <?php if (isset($id) && $thiscrl): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php
+ elseif ($act == "editimported"):
+ $crl = $thiscrl;
+?>
+ <form action="system_crlmanager.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="editimported" summary="import">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit Imported Certificate Revocation List");?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($crl['descr']);?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("CRL data");?></td>
+ <td width="78%" class="vtable">
+ <textarea name="crltext" id="crltext" cols="65" rows="7" class="formfld_crl"><?=base64_decode($crl['text']);?></textarea>
+ <br />
+ <?=gettext("Paste a Certificate Revocation List in X.509 CRL format here.");?></td>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <input name="act" type="hidden" value="editimported" />
+ </td>
+ </tr>
+ </table>
+ </form>
+
+<?php
+ elseif ($act == "edit"):
+ $crl = $thiscrl;
+?>
+ <form action="system_crlmanager.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="revoke">
+ <thead>
+ <tr>
+ <th width="90%" class="listhdrr" colspan="3"><b><?php echo gettext("Currently Revoked Certificates for CRL") . ': ' . htmlspecialchars($crl['descr']); ?></b></th>
+ <th width="10%" class="list"></th>
+ </tr>
+ <tr>
+ <th width="30%" class="listhdrr"><b><?php echo gettext("Certificate Name")?></b></th>
+ <th width="30%" class="listhdrr"><b><?php echo gettext("Revocation Reason")?></b></th>
+ <th width="30%" class="listhdrr"><b><?php echo gettext("Revoked At")?></b></th>
+ <th width="10%" class="list"></th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php /* List Certs on CRL */
+ if (!is_array($crl['cert']) || (count($crl['cert']) == 0)):
+ ?>
+ <tr>
+ <td class="listlr" colspan="3">
+ &nbsp;&nbsp;&nbsp;&nbsp;<?php echo gettext("No Certificates Found for this CRL."); ?>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ <?php
+ else:
+ foreach ($crl['cert'] as $i => $cert):
+ $name = htmlspecialchars($cert['descr']);
+ ?>
+ <tr>
+ <td class="listlr">
+ <?php echo $name; ?>
+ </td>
+ <td class="listlr">
+ <?php echo $openssl_crl_status[$cert["reason"]]; ?>
+ </td>
+ <td class="listlr">
+ <?php echo date("D M j G:i:s T Y", $cert["revoke_time"]); ?>
+ </td>
+ <td class="list">
+ <a href="system_crlmanager.php?act=delcert&amp;id=<?php echo $crl['refid']; ?>&amp;certref=<?php echo $cert['refid']; ?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate from the CRL?");?>')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("Delete this certificate from the CRL ");?>" alt="<?=gettext("Delete this certificate from the CRL ");?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ endforeach;
+ endif;
+ ?>
+ <?php /* Drop-down with other certs from this CA. */
+ // Map Certs to CAs in one pass
+ $ca_certs = array();
+ foreach ($a_cert as $cert) {
+ if ($cert['caref'] == $crl['caref']) {
+ $ca_certs[] = $cert;
+ }
+ }
+ if (count($ca_certs) == 0): ?>
+ <tr>
+ <td class="listlr" colspan="3">
+ &nbsp;&nbsp;&nbsp;&nbsp;<?php echo gettext("No Certificates Found for this CA."); ?>
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ <?php
+ else:
+ ?>
+ <tr>
+ <td class="listlr" colspan="3" align="center">
+ <b><?php echo gettext("Choose a Certificate to Revoke"); ?></b>:
+ <select name='certref' id='certref' class="formselect">
+ <?php $rowIndex = 0;
+ foreach ($ca_certs as $cert):
+ $rowIndex++;
+ ?>
+ <option value="<?=$cert['refid'];?>"><?=htmlspecialchars($cert['descr'])?></option>
+ <?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ <b><?php echo gettext("Reason");?></b>:
+ <select name='crlreason' id='crlreason' class="formselect">
+ <?php $rowIndex = 0;
+ foreach ($openssl_crl_status as $code => $reason):
+ $rowIndex++;
+ ?>
+ <option value="<?= $code ?>"><?= htmlspecialchars($reason) ?></option>
+ <?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+ ?>
+ </select>
+ <input name="act" type="hidden" value="addcert" />
+ <input name="crlref" type="hidden" value="<?=$crl['refid'];?>" />
+ <input name="id" type="hidden" value="<?=$crl['refid'];?>" />
+ <input id="submit" name="add" type="submit" class="formbtn" value="<?=gettext("Add"); ?>" />
+ </td>
+ <td class="list">&nbsp;</td>
+ </tr>
+ <?php
+ endif;
+ ?>
+ </tbody>
+ </table>
+ </form>
+<?php
+ else:
+?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="ocpms">
+ <thead>
+ <tr>
+ <td width="35%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Internal");?></td>
+ <td width="35%" class="listhdrr"><?=gettext("Certificates");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("In Use");?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td colspan="5">
+ <p>
+ <?=gettext("Additional Certificate Revocation Lists can be added here.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <?php
+ $caimg = "/themes/{$g['theme']}/images/icons/icon_frmfld_cert.png";
+ // Map CRLs to CAs in one pass
+ $ca_crl_map = array();
+ foreach ($a_crl as $crl) {
+ $ca_crl_map[$crl['caref']][] = $crl['refid'];
+ }
+
+ $i = 0;
+ foreach ($a_ca as $ca):
+ $name = htmlspecialchars($ca['descr']);
+
+ if ($ca['prv']) {
+ $cainternal = "YES";
+ } else {
+ $cainternal = "NO";
+ }
+ ?>
+ <tr>
+ <td class="listlr" colspan="4">
+ <table border="0" cellpadding="0" cellspacing="0" summary="icon">
+ <tr>
+ <td align="left" valign="middle">
+ <img src="<?=$caimg;?>" alt="CA" title="CA" border="0" height="16" width="16" />
+ </td>
+ <td align="left" valign="middle">
+ <?=$name;?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td class="list">
+ <?php if ($cainternal == "YES"): ?>
+ <a href="system_crlmanager.php?act=new&amp;caref=<?php echo $ca['refid']; ?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?php printf(gettext("Add or Import CRL for %s"), htmlspecialchars($ca['descr']));?>" alt="<?=gettext("add crl");?>" width="17" height="17" border="0" />
+ </a>
+ <?php else: ?>
+ <a href="system_crlmanager.php?act=new&amp;caref=<?php echo $ca['refid']; ?>&amp;importonly=yes">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_plus.gif" title="<?php printf(gettext("Import CRL for %s"), htmlspecialchars($ca['descr']));?>" alt="<?=gettext("add crl");?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php
+ if (is_array($ca_crl_map[$ca['refid']])):
+ foreach ($ca_crl_map[$ca['refid']] as $crl):
+ $tmpcrl = lookup_crl($crl);
+ $internal = is_crl_internal($tmpcrl);
+ $inuse = crl_in_use($tmpcrl['refid']);
+ ?>
+ <tr>
+ <td class="listlr"><?php echo htmlspecialchars($tmpcrl['descr']); ?></td>
+ <td class="listr"><?php echo ($internal) ? "YES" : "NO"; ?></td>
+ <td class="listr"><?php echo ($internal) ? count($tmpcrl['cert']) : "Unknown (imported)"; ?></td>
+ <td class="listr"><?php echo ($inuse) ? "YES" : "NO"; ?></td>
+ <td valign="middle" class="list nowrap">
+ <a href="system_crlmanager.php?act=exp&amp;id=<?=$tmpcrl['refid'];?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_down.gif" title="<?=gettext("Export CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Export CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
+ </a>
+ <?php if ($internal): ?>
+ <a href="system_crlmanager.php?act=edit&amp;id=<?=$tmpcrl['refid'];?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
+ </a>
+ <?php else: ?>
+ <a href="system_crlmanager.php?act=editimported&amp;id=<?=$tmpcrl['refid'];?>">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Edit CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ <?php if (!$inuse): ?>
+ <a href="system_crlmanager.php?act=del&amp;id=<?=$tmpcrl['refid'];?>" onclick="return confirm('<?=gettext("Do you really want to delete this Certificate Revocation List?") . ' (' . htmlspecialchars($tmpcrl['descr']) . ')';?>')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("Delete CRL") . " " . htmlspecialchars($tmpcrl['descr']);?>" alt="<?=gettext("Delete CRL") . " " . htmlspecialchars($tmpcrl['descr']); ?>" width="17" height="17" border="0" />
+ </a>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ endif;
+ ?>
+ <tr>
+ <td colspan="5">&nbsp;</td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ </tbody>
+ </table>
+
+<?php
+ endif;
+?>
+
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc");?>
+<script type="text/javascript">
+//<![CDATA[
+
+method_change();
+
+//]]>
+</script>
+
+</body>
+</html>
diff --git a/src/usr/local/www/system_firmware.php b/src/usr/local/www/system_firmware.php
new file mode 100644
index 0000000..d6d48ee
--- /dev/null
+++ b/src/usr/local/www/system_firmware.php
@@ -0,0 +1,343 @@
+<?php
+/* $Id$ */
+/*
+ system_firmware.php
+ Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/tar
+ pfSense_MODULE: firmware
+*/
+
+##|+PRIV
+##|*IDENT=page-system-firmware-manualupdate
+##|*NAME=System: Firmware: Manual Update page
+##|*DESCR=Allow access to the 'System: Firmware: Manual Update' page.
+##|*MATCH=system_firmware.php*
+##|-PRIV
+
+$d_isfwfile = 1;
+$nocsrf = true;
+
+require_once("globals.inc");
+require_once("functions.inc");
+require_once("guiconfig.inc");
+require_once("xmlrpc_client.inc");
+
+$curcfg = $config['system']['firmware'];
+
+/* Allow additional execution time 0 = no limit. */
+ini_set('max_execution_time', '9999');
+ini_set('max_input_time', '9999');
+
+function file_is_for_platform($filename, $ul_name) {
+ global $g;
+ if ($g['platform'] == "nanobsd") {
+ if (stristr($ul_name, "nanobsd")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ $_gb = exec("/usr/bin/tar xzf $filename -C /tmp/ etc/platform");
+ unset($_gb);
+ if (!file_exists("/tmp/etc/platform")) {
+ return false;
+ }
+ $upgrade_is_for_platform = trim(file_get_contents("/tmp/etc/platform", " \n\t\r"));
+ if ($g['platform'] == $upgrade_is_for_platform) {
+ @unlink("/tmp/etc/platform");
+ return true;
+ }
+ return false;
+}
+
+function file_upload_error_message($error_code) {
+ switch ($error_code) {
+ case UPLOAD_ERR_INI_SIZE:
+ return gettext('The uploaded file exceeds the upload_max_filesize directive in php.ini');
+ case UPLOAD_ERR_FORM_SIZE:
+ return gettext('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form');
+ case UPLOAD_ERR_PARTIAL:
+ return gettext('The uploaded file was only partially uploaded');
+ case UPLOAD_ERR_NO_FILE:
+ return gettext('No file was uploaded');
+ case UPLOAD_ERR_NO_TMP_DIR:
+ return gettext('Missing a temporary folder');
+ case UPLOAD_ERR_CANT_WRITE:
+ return gettext('Failed to write file to disk');
+ case UPLOAD_ERR_EXTENSION:
+ return gettext('File upload stopped by extension');
+ default:
+ return gettext('Unknown upload error');
+ }
+}
+
+/* if upgrade in progress, alert user */
+if (is_subsystem_dirty('firmwarelock')) {
+ $pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Manual Update"));
+ include("head.inc");
+ echo "<body link=\"#0000CC\" vlink=\"#0000CC\" alink=\"#0000CC\">\n";
+ include("fbegin.inc");
+ echo "<div>\n";
+ print_info_box(gettext("An upgrade is currently in progress.<p>The firewall will reboot when the operation is complete.") . "</p><p><img src='/themes/{$g['theme']}/images/icons/icon_fw-update.gif' alt='update' /></p>");
+ echo "</div>\n";
+ include("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+
+if ($_POST['backupbeforeupgrade']) {
+ touch("/tmp/perform_full_backup.txt");
+}
+
+/* Handle manual upgrade */
+if ($_POST && !is_subsystem_dirty('firmwarelock')) {
+
+ unset($input_errors);
+ unset($sig_warning);
+
+ if (stristr($_POST['Submit'], gettext("Enable"))) {
+ $mode = "enable";
+ } else if (stristr($_POST['Submit'], gettext("Disable"))) {
+ $mode = "disable";
+ } else if (stristr($_POST['Submit'], gettext("Upgrade")) || $_POST['sig_override']) {
+ $mode = "upgrade";
+ } else if ($_POST['sig_no']) {
+ if (file_exists("{$g['upload_path']}/firmware.tgz")) {
+ unlink("{$g['upload_path']}/firmware.tgz");
+ }
+ }
+ if ($mode) {
+ if ($mode == "enable") {
+ conf_mount_rw();
+ mark_subsystem_dirty('firmware');
+ } else if ($mode == "disable") {
+ conf_mount_ro();
+ clear_subsystem_dirty('firmware');
+ } else if ($mode == "upgrade") {
+ if ($_FILES['ulfile']['error']) {
+ $errortext = "(" . file_upload_error_message($_FILES['ulfile']['error']) . ")";
+ }
+ if (is_uploaded_file($_FILES['ulfile']['tmp_name'])) {
+ /* verify firmware image(s) */
+ if (file_is_for_platform($_FILES['ulfile']['tmp_name'], $_FILES['ulfile']['name']) == false && !$_POST['sig_override']) {
+ $input_errors[] = gettext("The uploaded image file is not for this platform.");
+ } else if (!file_exists($_FILES['ulfile']['tmp_name'])) {
+ /* probably out of memory for the MFS */
+ $input_errors[] = gettext("Image upload failed (out of memory?)");
+ mwexec("/etc/rc.firmware disable");
+ clear_subsystem_dirty('firmware');
+ } else {
+ /* move the image so PHP won't delete it */
+ rename($_FILES['ulfile']['tmp_name'], "{$g['upload_path']}/firmware.tgz");
+
+ /* check digital signature */
+ $sigchk = verify_digital_signature("{$g['upload_path']}/firmware.tgz");
+
+ if ($sigchk == 1) {
+ $sig_warning = gettext("The digital signature on this image is invalid.");
+ } else if ($sigchk == 2 && !isset($config['system']['firmware']['allowinvalidsig'])) {
+ $sig_warning = gettext("This image is not digitally signed.");
+ } else if (($sigchk >= 3)) {
+ $sig_warning = gettext("There has been an error verifying the signature on this image.");
+ }
+
+ if (!verify_gzip_file("{$g['upload_path']}/firmware.tgz")) {
+ $input_errors[] = gettext("The image file is corrupt.");
+ unlink("{$g['upload_path']}/firmware.tgz");
+ }
+ }
+ }
+
+ run_plugins("/usr/local/pkg/firmware_upgrade");
+
+ /* Check for input errors, firmware locks, warnings, then check for firmware if sig_override is set */
+ if (!$input_errors && !is_subsystem_dirty('firmwarelock') && (!$sig_warning || $_POST['sig_override'])) {
+ if (file_exists("{$g['upload_path']}/firmware.tgz")) {
+ /* fire up the update script in the background */
+ mark_subsystem_dirty('firmwarelock');
+ $savemsg = gettext("The firmware is now being updated. The firewall will reboot automatically.");
+ if (stristr($_FILES['ulfile']['name'], "nanobsd") or $_POST['isnano'] == "yes") {
+ mwexec_bg("/etc/rc.firmware pfSenseNanoBSDupgrade {$g['upload_path']}/firmware.tgz");
+ } else {
+ if ($g['platform'] == "nanobsd") {
+ $whichone = "pfSenseNanoBSDupgrade";
+ } else {
+ $whichone = "pfSenseupgrade";
+ }
+ mwexec_bg("/etc/rc.firmware {$whichone} {$g['upload_path']}/firmware.tgz");
+ unset($whichone);
+ }
+ } else {
+ $savemsg = sprintf(gettext("Firmware image missing or other error, please try again %s."), $errortext);
+ }
+ }
+ }
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Firmware"));
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<form action="system_firmware.php" method="post" enctype="multipart/form-data">
+<?php
+ /* Construct an upload_id for this session */
+ if (!session_id()) {
+ $upload_id = uniqid();
+ } else {
+ $upload_id = session_id();
+ }
+?>
+<input type="hidden" name="UPLOAD_IDENTIFIER" value="<?php echo $upload_id;?>" />
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if ($fwinfo <> "") print_info_box($fwinfo); ?>
+<?php
+ if ($sig_warning && !$input_errors):
+ $sig_warning = "<strong>" . $sig_warning . "</strong><br />" . gettext("This means that the image you uploaded " .
+ "is not an official/supported image and may lead to unexpected behavior or security " .
+ "compromises. Only install images that come from sources that you trust, and make sure " .
+ "that the image has not been tampered with.") . "<br /><br />" .
+ gettext("Do you want to install this image anyway (on your own risk)?");
+ print_info_box($sig_warning);
+ if (stristr($_FILES['ulfile']['name'], "nanobsd")) {
+ echo "<input type='hidden' name='isnano' id='isnano' value='yes' />\n";
+ }
+?>
+<input name="sig_override" type="submit" class="formbtn" id="sig_override" value=" <?=gettext("Yes");?> " />
+<input name="sig_no" type="submit" class="formbtn" id="sig_no" value=" <?=gettext("No"); ?> " />
+<?php
+ else:
+ if (!is_subsystem_dirty('firmwarelock')):
+?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Manual Update"), true, "system_firmware.php");
+ $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
+ $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
+ if ($g['hidedownloadbackup'] == false) {
+ $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic"><?=gettext("Invoke") ." ". $g['product_name'] . " " . gettext("Manual Upgrade"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+<?php
+ if (!is_subsystem_dirty('rebootreq')):
+ if (!is_subsystem_dirty('firmware')):
+?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Enable firmware upload");?>" />
+ <br />
+ <?php printf(gettext('Click "Enable firmware upload" to begin.'), $g['firmware_update_text']);?>
+ <br />
+<?php
+ else:
+?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Disable firmware upload");?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="baseline" class="vncell">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($g['platform'] == "nanobsd") {
+ $type = "*.img.gz";
+ } else {
+ $type = "*.tgz";
+ }
+ ?>
+ <strong><?=gettext("Firmware image file ($type):");?> </strong>
+ <input name="ulfile" type="file" class="formfld" />
+ <br />
+ <?php if ($g['hidebackupbeforeupgrade'] === false): ?>
+ <input type="checkbox" name='backupbeforeupgrade' id='backupbeforeupgrade' /> <?=gettext("Perform full backup prior to upgrade");?>
+ <br />
+ <?php endif; ?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Upgrade firmware");?>" />
+ <?=gettext('Click "Upgrade firmware" to start the upgrade process.');?>
+<?php
+ endif;
+ else:
+?>
+ <strong><?=gettext("You must reboot the system before you can upgrade the firmware.");?></strong>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php if (is_subsystem_dirty('firmware')): ?>
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ <?=gettext("Warning:");?><br />
+ </strong>
+ </span>
+ <?=gettext("DO NOT abort the firmware upgrade once it " .
+ "has started. The firewall will reboot automatically after " .
+ "storing the new firmware. The configuration will be maintained.");?>
+ </span>
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+<?php
+ endif;
+ endif;
+?>
+<?php include("fend.inc"); ?>
+</form>
+</body>
+</html>
diff --git a/src/usr/local/www/system_firmware_auto.php b/src/usr/local/www/system_firmware_auto.php
new file mode 100755
index 0000000..e2970fa
--- /dev/null
+++ b/src/usr/local/www/system_firmware_auto.php
@@ -0,0 +1,296 @@
+<?php
+/* $Id$ */
+/*
+ system_firmware_auto.php
+ Copyright (C) 2005 Scott Ullrich
+ Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Based originally on system_firmware.php
+ (C)2003-2004 Manuel Kasper
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/tar /usr/bin/nohup /bin/cat /sbin/sha256
+ pfSense_MODULE: firmware
+*/
+
+##|+PRIV
+##|*IDENT=page-system-firmware-checkforupdate
+##|*NAME=System: Firmware: Check For Update page
+##|*DESCR=Allow access to the 'System: Firmware: Check For Update' page.
+##|*MATCH=system_firmware_auto.php*
+##|-PRIV
+
+$nocsrf = true;
+
+require("guiconfig.inc");
+require_once("pfsense-utils.inc");
+
+$curcfg = $config['system']['firmware'];
+
+if (isset($curcfg['alturl']['enable'])) {
+ $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
+} else {
+ $updater_url = $g['update_url'];
+}
+
+if ($_POST['backupbeforeupgrade']) {
+ touch("/tmp/perform_full_backup.txt");
+}
+
+$closehead = false;
+$pgtitle = array(gettext("Diagnostics"), gettext("Firmware"), gettext("Auto Update"));
+include("head.inc");
+
+?>
+
+<meta http-equiv="Content-Type" content="text/html; charset=<?=system_get_language_codeset();?>" />
+<link href="gui.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<form action="system_firmware_auto.php" method="post">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware auto-check">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
+ $tab_array[] = array(gettext("Auto Update"), true, "system_firmware_check.php");
+ $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
+ if ($g['hidedownloadbackup'] == false) {
+ $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
+ }
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="outer">
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="inner">
+ <tr>
+ <td align="center">
+ <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"> </td>
+ <td>
+ <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="">
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
+ <img src="./themes/<?=$g['theme'];?>/images/misc/bar_blue.gif" width="0" height="15" name="progressbar" id="progressbar" alt="" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5"></td>
+ </tr>
+ </table>
+ <br />
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("status").wrap='hard';
+ document.getElementById("output").wrap='hard';
+ }
+ //]]>
+ </script>
+ <!-- status box -->
+ <textarea cols="90" rows="1" name="status" id="status"><?=gettext("Beginning firmware upgrade"); ?>.</textarea>
+ <br />
+ <!-- command output box -->
+ <textarea cols="90" rows="25" name="output" id="output"></textarea>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+
+<?php
+
+update_status(gettext("Downloading current version information") . "...");
+$nanosize = "";
+if ($g['platform'] == "nanobsd") {
+ if (file_exists("/etc/nano_use_vga.txt")) {
+ $nanosize = "-nanobsd-vga-";
+ } else {
+ $nanosize = "-nanobsd-";
+ }
+
+ $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
+}
+
+@unlink("/tmp/{$g['product_name']}_version");
+download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version");
+$latest_version = str_replace("\n", "", @file_get_contents("/tmp/{$g['product_name']}_version"));
+if (!$latest_version) {
+ update_output_window(gettext("Unable to check for updates."));
+ require("fend.inc");
+ exit;
+} else {
+ $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
+ $latest_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
+ $latest_version_pfsense = strtotime($latest_version);
+ if (!$latest_version) {
+ update_output_window(gettext("Unable to check for updates."));
+ require("fend.inc");
+ exit;
+ } else {
+ if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $latest_version) == -1) {
+ update_status(gettext("Downloading updates") . "...");
+ conf_mount_rw();
+ if ($g['platform'] == "nanobsd") {
+ $update_filename = "latest{$nanosize}.img.gz";
+ } else {
+ $update_filename = "latest.tgz";
+ }
+ $status = download_file_with_progress_bar("{$updater_url}/{$update_filename}", "{$g['upload_path']}/latest.tgz", "read_body_firmware");
+ $status = download_file_with_progress_bar("{$updater_url}/{$update_filename}.sha256", "{$g['upload_path']}/latest.tgz.sha256");
+ conf_mount_ro();
+ update_output_window("{$g['product_name']} " . gettext("download complete."));
+ } else {
+ update_output_window(gettext("You are on the latest version."));
+ require("fend.inc");
+ exit;
+ }
+ }
+}
+
+/* launch external upgrade helper */
+$external_upgrade_helper_text = "/etc/rc.firmware ";
+
+if ($g['platform'] == "nanobsd") {
+ $external_upgrade_helper_text .= "pfSenseNanoBSDupgrade ";
+} else {
+ $external_upgrade_helper_text .= "pfSenseupgrade ";
+}
+
+$external_upgrade_helper_text .= "{$g['upload_path']}/latest.tgz";
+
+$downloaded_latest_tgz_sha256 = str_replace("\n", "", `/sbin/sha256 -q {$g['upload_path']}/latest.tgz`);
+$upgrade_latest_tgz_sha256 = str_replace("\n", "", `/bin/cat {$g['upload_path']}/latest.tgz.sha256 | awk '{ print $4 }'`);
+
+$sigchk = 0;
+
+if (!isset($curcfg['alturl']['enable'])) {
+ $sigchk = verify_digital_signature("{$g['upload_path']}/latest.tgz");
+}
+
+$exitstatus = 0;
+if ($sigchk == 1) {
+ $sig_warning = gettext("The digital signature on this image is invalid.");
+ $exitstatus = 1;
+} else if ($sigchk == 2) {
+ $sig_warning = gettext("This image is not digitally signed.");
+ if (!isset($config['system']['firmware']['allowinvalidsig'])) {
+ $exitstatus = 1;
+ }
+} else if (($sigchk >= 3)) {
+ $sig_warning = gettext("There has been an error verifying the signature on this image.");
+ $exitstatus = 1;
+}
+
+if ($exitstatus) {
+ update_status($sig_warning);
+ update_output_window(gettext("Update cannot continue. You can disable this check on the Updater Settings tab."));
+ require("fend.inc");
+ exit;
+} else if ($sigchk == 2) {
+ update_status("Upgrade in progress...");
+ update_output_window("\n" . gettext("Upgrade Image does not contain a signature but the system has been configured to allow unsigned images. One moment please...") . "\n");
+}
+
+if (!verify_gzip_file("{$g['upload_path']}/latest.tgz")) {
+ update_status(gettext("The image file is corrupt."));
+ update_output_window(gettext("Update cannot continue"));
+ if (file_exists("{$g['upload_path']}/latest.tgz")) {
+ conf_mount_rw();
+ unlink("{$g['upload_path']}/latest.tgz");
+ conf_mount_ro();
+ }
+ require("fend.inc");
+ exit;
+}
+
+if ($downloaded_latest_tgz_sha256 <> $upgrade_latest_tgz_sha256) {
+ update_status(gettext("Downloading complete but sha256 does not match."));
+ update_output_window(gettext("Auto upgrade aborted.") . " \n\n" . gettext("Downloaded SHA256") . ": " . $downloaded_latest_tgz_sha256 . "\n\n" . gettext("Needed SHA256") . ": " . $upgrade_latest_tgz_sha256);
+} else {
+ update_output_window($g['product_name'] . " " . gettext("is now upgrading.") . "\\n\\n" . gettext("The firewall will reboot once the operation is completed."));
+ echo "\n<script type=\"text/javascript\">";
+ echo "\n//<![CDATA[";
+ echo "\ndocument.progressbar.style.visibility='hidden';";
+ echo "\n//]]>";
+ echo "\n</script>";
+ mwexec_bg($external_upgrade_helper_text);
+}
+
+/*
+ Helper functions
+*/
+
+function read_body_firmware($ch, $string) {
+ global $g, $fout, $file_size, $downloaded, $counter, $version, $latest_version;
+ $length = strlen($string);
+ $downloaded += intval($length);
+ $downloadProgress = round(100 * (1 - $downloaded / $file_size), 0);
+ $downloadProgress = 100 - $downloadProgress;
+ $a = $file_size;
+ $b = $downloaded;
+ $c = $downloadProgress;
+ $text = " " . gettext("Auto Update Download Status") . "\\n";
+ $text .= "----------------------------------------------------\\n";
+ $text .= " " . gettext("Current Version") . " : {$g['product_version']}\\n";
+ $text .= " " . gettext("Latest Version") . " : {$latest_version}\\n";
+ $text .= " " . gettext("File size") . " : {$a}\\n";
+ $text .= " " . gettext("Downloaded") . " : {$b}\\n";
+ $text .= " " . gettext("Percent") . " : {$c}%\\n";
+ $text .= "----------------------------------------------------\\n";
+ $counter++;
+ if ($counter > 150) {
+ update_output_window($text);
+ update_progress_bar($downloadProgress);
+ $counter = 0;
+ }
+ fwrite($fout, $string);
+ return $length;
+}
+
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/system_firmware_check.php b/src/usr/local/www/system_firmware_check.php
new file mode 100644
index 0000000..2e56943
--- /dev/null
+++ b/src/usr/local/www/system_firmware_check.php
@@ -0,0 +1,206 @@
+<?php
+/* $Id$ */
+/*
+ system_firmware_check.php
+ Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: firmware
+*/
+
+##|+PRIV
+##|*IDENT=page-system-firmware-autoupdate
+##|*NAME=System: Firmware: Auto Update page
+##|*DESCR=Allow access to the 'System: Firmware: Auto Update' page.
+##|*MATCH=system_firmware_check.php*
+##|-PRIV
+
+$d_isfwfile = 1;
+require("guiconfig.inc");
+require_once("pfsense-utils.inc");
+
+$curcfg = $config['system']['firmware'];
+$pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Auto Update"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php include("fbegin.inc"); ?>
+
+<form action="system_firmware_auto.php" method="post">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware check">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
+ $tab_array[] = array(gettext("Auto Update"), true, "system_firmware_check.php");
+ $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
+ if ($g['hidedownloadbackup'] == false) {
+ $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
+ }
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="">
+ <tr>
+ <td align="center">
+ <!-- progress bar -->
+ <table style="height:15;colspacing:0" width="420" border="0" cellpadding="0" cellspacing="0" summary="images">
+
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_left.gif')" height="15" width="5"></td>
+ <td>
+ <table id="progholder" style="height:15;colspacing:0" width="410" border="0" cellpadding="0" cellspacing="0" summary="">
+ <tr>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_gray.gif')" valign="top" align="left">
+ <img src="./themes/<?=$g['theme'];?>/images/misc/bar_blue.gif" width="0" height="15" name="progressbar" id="progressbar" alt="" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td style="background:url('./themes/<?=$g['theme'];?>/images/misc/bar_right.gif')" height="15" width="5"></td>
+ </tr>
+ </table>
+ <br />
+ <!-- command output box -->
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("output").wrap='hard';
+ }
+ //]]>
+ </script>
+ <textarea style="border:1;bordercolordark:#000000;bordercolorlight:#000000" cols="90" rows="9" name="output" id="output"></textarea>
+ <div id="backupdiv" style="visibility:hidden">
+ <?php if ($g['hidebackupbeforeupgrade'] === false): ?>
+ <br /><input type="checkbox" name="backupbeforeupgrade" id="backupbeforeupgrade" /><?=gettext("Perform full backup prior to upgrade");?>
+ <?php endif; ?>
+ </div>
+ <input id='invokeupgrade' style='visibility:hidden' type="submit" value="<?=gettext("Invoke Auto Upgrade"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<p>
+
+<?php
+
+/* Define necessary variables. */
+if (isset($curcfg['alturl']['enable'])) {
+ $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
+} else {
+ $updater_url = $g['update_url'];
+}
+$needs_system_upgrade = false;
+$static_text .= gettext("Downloading new version information...");
+
+$nanosize = "";
+if ($g['platform'] == "nanobsd") {
+ if (file_exists("/etc/nano_use_vga.txt")) {
+ $nanosize = "-nanobsd-vga-";
+ } else {
+ $nanosize = "-nanobsd-";
+ }
+
+ $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
+}
+
+if (download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) {
+ $remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
+}
+$static_text .= gettext("done") . "\\n";
+if (!$remote_version) {
+ $static_text .= gettext("Unable to check for updates.") . "\\n";
+ if (isset($curcfg['alturl']['enable'])) {
+ $static_text .= gettext("Could not contact custom update server.") . "\\n";
+ } else {
+ $static_text .= sprintf(gettext('Could not contact %1$s update server %2$s%3$s'), $g['product_name'], $updater_url, "\\n");
+ }
+} else {
+ $static_text .= gettext("Obtaining current version information...");
+ update_output_window($static_text);
+
+ $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
+
+ $static_text .= "done\\n";
+ update_output_window($static_text);
+
+ if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version) == -1) {
+ $needs_system_upgrade = true;
+ } else {
+ $static_text .= "\\n" . gettext("You are on the latest version.") . "\\n";
+ }
+}
+
+update_output_window($static_text);
+if ($needs_system_upgrade == false) {
+ echo "</p>";
+ echo "</form>";
+ require("fend.inc");
+ echo "</body>";
+ echo "</html>";
+ exit;
+}
+
+echo "\n<script type=\"text/javascript\">\n";
+echo "//<![CDATA[\n";
+echo "jQuery('#invokeupgrade').css('visibility','visible');\n";
+echo "//]]>\n";
+echo "</script>\n";
+echo "\n<script type=\"text/javascript\">\n";
+echo "//<![CDATA[\n";
+echo "jQuery('#backupdiv').css('visibility','visible');\n";
+echo "//]]>\n";
+echo "</script>\n";
+
+$txt = gettext("A new version is now available") . "\\n\\n";
+$txt .= gettext("Current version") . ": " . $g['product_version'] . "\\n";
+if ($g['platform'] == "nanobsd") {
+ $txt .= " " . gettext("NanoBSD Size") . " : " . trim(file_get_contents("/etc/nanosize.txt")) . "\\n";
+}
+$txt .= " " . gettext("Built On") . ": " . $current_installed_buildtime . "\\n";
+$txt .= " " . gettext("New version") . ": " . htmlspecialchars($remote_version, ENT_QUOTES | ENT_HTML401). "\\n\\n";
+$txt .= " " . gettext("Update source") . ": " . $updater_url . "\\n";
+update_output_window($txt);
+?>
+</p>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_firmware_restorefullbackup.php b/src/usr/local/www/system_firmware_restorefullbackup.php
new file mode 100644
index 0000000..3cf3f83
--- /dev/null
+++ b/src/usr/local/www/system_firmware_restorefullbackup.php
@@ -0,0 +1,220 @@
+<?php
+/* $Id$ */
+/*
+ system_firmware_restorefullbackup.php
+ Copyright (C) 2011 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/*
+ pfSense_BUILDER_BINARIES: /etc/rc.restore_full_backup
+ pfSense_MODULE: backup
+*/
+
+##|+PRIV
+##|*IDENT=page-diagnostics-restore-full-backup
+##|*NAME=Diagnostics: Restore full backup
+##|*DESCR=Allow access to the 'Diagnostics: Restore Full Backup' page.
+##|*MATCH=system_firmware_restorefullbackup.php
+##|-PRIV
+
+/* Allow additional execution time 0 = no limit. */
+ini_set('max_execution_time', '0');
+ini_set('max_input_time', '0');
+
+require_once("functions.inc");
+require("guiconfig.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if ($_POST['overwriteconfigxml']) {
+ touch("/tmp/do_not_restore_config.xml");
+}
+
+if ($_GET['backupnow']) {
+ mwexec_bg("/etc/rc.create_full_backup");
+}
+
+if ($_GET['downloadbackup']) {
+ $filename = basename($_GET['downloadbackup']);
+ $path = "/root/{$filename}";
+ if (file_exists($path)) {
+ session_write_close();
+ ob_end_clean();
+ session_cache_limiter('public');
+ //$fd = fopen("/root/{$filename}", "rb");
+ $filesize = filesize("/root/{$filename}");
+ header("Cache-Control: ");
+ header("Pragma: ");
+ header("Content-Type: application/octet-stream");
+ header("Content-Length: " .(string)(filesize($path)));
+ header('Content-Disposition: attachment; filename="'.$filename.'"');
+ header("Content-Transfer-Encoding: binary\n");
+ if ($file = fopen("/root/{$filename}", 'rb')) {
+ while ((!feof($file)) && (connection_status() == 0)) {
+ print(fread($file, 1024*8));
+ flush();
+ }
+ fclose($file);
+ }
+
+ exit;
+ }
+}
+
+if ($_GET['deletefile']) {
+ $filename = basename($_GET['deletefile']);
+ if (file_exists("/root/{$filename}") && (preg_match("/pfSense-full-backup-\d+-\d+\.tgz/", $filename) == 1)) {
+ unlink("/root/" . $filename);
+ $savemsg = htmlspecialchars($filename) . " " . gettext("has been deleted.");
+ } else {
+ $savemsg = htmlspecialchars($filename) . " " . gettext("has not been been deleted (invalid backup file or file does not exist).");
+ }
+}
+
+if ($_POST['restorefile']) {
+ $filename = basename($_POST['restorefile']);
+ if (file_exists("/root/{$filename}") && (preg_match("/pfSense-full-backup-\d+-\d+\.tgz/", $filename) == 1)) {
+ mwexec_bg("/etc/rc.restore_full_backup /root/" . escapeshellcmd($filename));
+ $savemsg = gettext("The firewall is currently restoring") . " " . htmlspecialchars($filename);
+ } else {
+ $savemsg = htmlspecialchars($filename) . " " . gettext("has not been been restored (invalid backup file or file does not exist).");
+ }
+}
+
+$pgtitle = array(gettext("Diagnostics"), gettext("Restore full backup"));
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('restore')): ?>
+<p>
+ <form action="reboot.php" method="post">
+ <input name="Submit" type="hidden" value="Yes" />
+ <?php print_info_box(gettext("The firewall configuration has been changed.") . "<br />" . gettext("The firewall is now rebooting."));?><br />
+ </form>
+</p>
+<?php endif; ?>
+<form action="system_firmware_restorefullbackup.php" method="post">
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="restore full backup">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
+ $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
+ $tab_array[] = array(gettext("Updater Settings"), false, "system_firmware_settings.php");
+ if ($g['hidedownloadbackup'] == false) {
+ $tab_array[] = array(gettext("Restore Full Backup"), true, "system_firmware_restorefullbackup.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="1" class="listtopic"><?=gettext("Filename"); ?></td>
+ <td colspan="1" class="listtopic"><?=gettext("Date"); ?></td>
+ <td colspan="1" class="listtopic"><?=gettext("Size"); ?></td>
+ <td colspan="1" class="listtopic"></td>
+ </tr>
+<?php
+ chdir("/root");
+ $available_restore_files = glob("pfSense-full-backup-*");
+ $counter = 0;
+ foreach ($available_restore_files as $arf) {
+ $counter++;
+ $size = exec("gzip -l /root/$arf | grep -v compressed | awk '{ print $2 }'");
+ echo "<tr>";
+ echo "<td class='listlr' width='50%' colspan='1'>";
+ echo "<input type='radio' name='restorefile' value='$arf' /> $arf";
+ echo "</td>";
+ echo "<td class='listr' width='30%' colspan='1'>";
+ echo date ("F d Y H:i:s", filemtime($arf));
+ echo "</td>";
+ echo "<td class='listr' width='40%' colspan='1'>";
+ echo format_bytes($size);
+ echo "</td>";
+ echo "<td class='listr nowrap' width='20%' colspan='1'>";
+ echo "<a onclick=\"return confirm('" . gettext("Do you really want to delete this backup?") . "')\" href='system_firmware_restorefullbackup.php?deletefile=" . htmlspecialchars($arf) . "'>";
+ echo gettext("Delete");
+ echo "</a> | ";
+ echo "<a href='system_firmware_restorefullbackup.php?downloadbackup=" . htmlspecialchars($arf) . "'>";
+ echo gettext("Download");
+ echo "</a>";
+ echo "</td>";
+ echo "</tr>";
+ }
+ if ($counter == 0) {
+ echo "<tr>";
+ echo "<td class='listlr' width='100%' colspan='4' align='center'>";
+ echo gettext("Could not locate any previous backups.");
+ echo "</td>";
+ echo "</tr>";
+ }
+?>
+ <tr>
+ <td width="78%" colspan="3">
+ &nbsp;<br />
+ <input type="checkbox" name="overwriteconfigxml" id="overwriteconfigxml" checked="checked" /> <?=gettext("do not restore config.xml."); ?>
+ <br />
+ <input name="Restore" type="submit" class="formbtn" id="restore" value="<?=gettext("Restore"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+encrypt_change();
+decrypt_change();
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
+<?php
+
+if (is_subsystem_dirty('restore')) {
+ system_reboot();
+}
+
+?>
diff --git a/src/usr/local/www/system_firmware_settings.php b/src/usr/local/www/system_firmware_settings.php
new file mode 100644
index 0000000..9f6c5e0
--- /dev/null
+++ b/src/usr/local/www/system_firmware_settings.php
@@ -0,0 +1,318 @@
+<?php
+/* $Id$ */
+/*
+ system_firmware_settings.php
+ part of pfSense
+ Copyright (C) 2005 Colin Smith
+ Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/fetch
+ pfSense_MODULE: firmware
+*/
+
+##|+PRIV
+##|*IDENT=page-system-firmware-settings
+##|*NAME=System: Firmware: Settings page
+##|*DESCR=Allow access to the 'System: Firmware: Settings' page.
+##|*MATCH=system_firmware_settings.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if ($_POST) {
+ unset($input_errors);
+
+ /* input validation */
+ if (($_POST['alturlenable'] == "yes") && (empty($_POST['firmwareurl']))) {
+ $input_errors[] = gettext("A Firmware Auto Update Base URL must be specified when \"Use an unofficial server for firmware upgrades\" is enabled.");
+ }
+
+ if (!$input_errors) {
+ if ($_POST['alturlenable'] == "yes") {
+ $config['system']['firmware']['alturl']['enable'] = true;
+ $config['system']['firmware']['alturl']['firmwareurl'] = $_POST['firmwareurl'];
+ } else {
+ unset($config['system']['firmware']['alturl']['enable']);
+ unset($config['system']['firmware']['alturl']['firmwareurl']);
+ unset($config['system']['firmware']['alturl']);
+ unset($config['system']['firmware']);
+ }
+ if ($_POST['allowinvalidsig'] == "yes") {
+ $config['system']['firmware']['allowinvalidsig'] = true;
+ } else {
+ unset($config['system']['firmware']['allowinvalidsig']);
+ }
+
+ if ($_POST['disablecheck'] == "yes") {
+ $config['system']['firmware']['disablecheck'] = true;
+ } else {
+ unset($config['system']['firmware']['disablecheck']);
+ }
+
+ if ($_POST['synconupgrade'] == "yes") {
+ $config['system']['gitsync']['synconupgrade'] = true;
+ } else {
+ unset($config['system']['gitsync']['synconupgrade']);
+ }
+ $config['system']['gitsync']['repositoryurl'] = $_POST['repositoryurl'];
+ $config['system']['gitsync']['branch'] = $_POST['branch'];
+
+ write_config();
+ }
+}
+
+$curcfg = $config['system']['firmware'];
+$gitcfg = $config['system']['gitsync'];
+
+$pgtitle = array(gettext("System"), gettext("Firmware"), gettext("Settings"));
+$closehead = false;
+include("head.inc");
+
+exec("/usr/bin/fetch -q -o {$g['tmp_path']}/manifest \"{$g['update_manifest']}\"");
+if (file_exists("{$g['tmp_path']}/manifest")) {
+ $preset_urls_split = explode("\n", file_get_contents("{$g['tmp_path']}/manifest"));
+}
+
+?>
+<script type="text/javascript">
+//<![CDATA[
+
+
+function enable_altfirmwareurl(enable_over) {
+ if (document.iform.alturlenable.checked || enable_over) {
+ document.iform.firmwareurl.disabled = 0;
+ } else {
+ document.iform.firmwareurl.disabled = 1;
+ document.iform.firmwareurl.value = '';
+ }
+}
+
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<form action="system_firmware_settings.php" method="post" name="iform" id="iform">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="firmware settings">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Manual Update"), false, "system_firmware.php");
+ $tab_array[] = array(gettext("Auto Update"), false, "system_firmware_check.php");
+ $tab_array[] = array(gettext("Updater Settings"), true, "system_firmware_settings.php");
+ if ($g['hidedownloadbackup'] == false) {
+ $tab_array[] = array(gettext("Restore Full Backup"), false, "system_firmware_restorefullbackup.php");
+ }
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Firmware Branch"); ?></td>
+ </tr>
+<?php if (is_array($preset_urls_split)): ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Default Auto Update URLs"); ?></td>
+ <td class="vtable">
+ <select name='preseturls' id='preseturls' onchange="firmwareurl.value = preseturls.value; document.iform.firmwareurl.disabled = 0; alturlenable.checked=true; jQuery('#preseturls').parent().effect('highlight');">
+ <option></option>
+ <?php
+ foreach ($preset_urls_split as $pus) {
+ $pus_text = explode("\t", $pus);
+ if (empty($pus_text[0])) {
+ continue;
+ }
+ if (stristr($pus_text[0], php_uname("m")) !== false) {
+ $style = " style=\"font-weight: bold\"";
+ $yourarch = " (Current architecture)";
+ } else {
+ $style = "";
+ $yourarch = "";
+ }
+ echo "<option value='{$pus_text[1]}'{$style}>{$pus_text[0]}{$yourarch}</option>";
+ }
+ ?>
+ </select>
+ <br /><br /><?php echo sprintf(gettext("Entries denoted by \"Current architecture\" match the architecture of your current installation, such as %s. Changing architectures during an upgrade is not recommended, and may require a manual reboot after the update completes."), php_uname("m")); ?>
+ </td>
+ </tr>
+<?php endif; ?>
+ <tr>
+ <td valign="top" class="vncell"><?=gettext("Firmware Auto Update URL"); ?></td>
+ <td class="vtable">
+ <input name="alturlenable" type="checkbox" id="alturlenable" value="yes" onclick="enable_altfirmwareurl()" <?php if (isset($curcfg['alturl']['enable'])) echo "checked=\"checked\""; ?> /> <?=gettext("Use an unofficial server for firmware upgrades") ?><br />
+ <table summary="alternative Base URL">
+ <tr>
+ <td>
+ <?=gettext("Base URL:"); ?>
+ </td>
+ <td>
+ <input name="firmwareurl" type="text" class="formfld url" id="firmwareurl" size="64" value="<?php if ($curcfg['alturl']['firmwareurl']) echo htmlspecialchars($curcfg['alturl']['firmwareurl']); else echo $g['']; ?>" />
+ </td>
+ </tr>
+ </table>
+ <span class="vexpl">
+ <?=gettext("This is where"); ?> <?php echo $g['product_name'] ?> <?=gettext("will check for newer firmware versions when the"); ?> <a href="system_firmware_check.php"><?=gettext("System: Firmware: Auto Update"); ?></a> <?=gettext("page is viewed."); ?>
+ <br />
+ <b><?=gettext("NOTE:"); ?></b> <?php printf(gettext("When a custom URL is configured, the system will not verify the image has an official digital signature")); ?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Updates"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Unsigned images"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="allowinvalidsig" type="checkbox" id="allowinvalidsig" value="yes" <?php if (isset($curcfg['allowinvalidsig'])) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("Allow auto-update firmware images with a missing or invalid digital signature to be used."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dashboard check"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disablecheck" type="checkbox" id="disablecheck" value="yes" <?php if (isset($curcfg['disablecheck'])) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("Disable the automatic dashboard auto-update check."); ?>
+ </td>
+ </tr>
+<?php
+ if (file_exists("/usr/local/bin/git") && $g['platform'] == "pfSense"):
+?>
+ <tr>
+ <td colspan="2" class="list" height="12">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Gitsync"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Auto sync on update"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="synconupgrade" type="checkbox" id="synconupgrade" value="yes" <?php if (isset($gitcfg['synconupgrade'])) echo "checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("After updating, sync with the following repository/branch before reboot."); ?>
+ </td>
+ </tr>
+<?php
+ if (is_dir("/root/pfsense/pfSenseGITREPO/pfSenseGITREPO")) {
+ exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url", $output_str);
+ if (is_array($output_str) && !empty($output_str[0])) {
+ $lastrepositoryurl = $output_str[0];
+ }
+ unset($output_str);
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Repository URL"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="repositoryurl" type="text" class="formfld url" id="repositoryurl" size="64" value="<?php if ($gitcfg['repositoryurl']) echo htmlspecialchars($gitcfg['repositoryurl']); ?>" />
+<?php
+ if ($lastrepositoryurl):
+?>
+ <br />
+ <?=sprintf(gettext("The most recently used repository was %s"), $lastrepositoryurl); ?>
+ <br />
+ <?=gettext("This will be used if the field is left blank."); ?>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ if (is_dir("/root/pfsense/pfSenseGITREPO/pfSenseGITREPO")) {
+ exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git branch", $output_str);
+ if (is_array($output_str)) {
+ foreach ($output_str as $output_line) {
+ if (strstr($output_line, '* ')) {
+ $lastbranch = substr($output_line, 2);
+ break;
+ }
+ }
+ }
+ unset($output_str);
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Branch name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="branch" type="text" class="formfld unknown" id="branch" size="64" value="<?php if ($gitcfg['branch']) echo htmlspecialchars($gitcfg['branch']); ?>" />
+<?php
+ if ($lastbranch):
+?>
+ <br />
+ <?=sprintf(gettext("The most recently used branch was %s"), $lastbranch); ?>
+<?php
+ else:
+?>
+ <br />
+ <?=gettext("Usually the branch name is master"); ?>
+<?php
+ endif;
+?>
+ <br />
+ <?=gettext("Note: Sync will not be performed if a branch is not specified."); ?>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td>
+ <script type="text/javascript">
+ //<![CDATA[
+ enable_altfirmwareurl();
+ //]]>
+ </script>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_gateway_groups.php b/src/usr/local/www/system_gateway_groups.php
new file mode 100644
index 0000000..aeb0bad
--- /dev/null
+++ b/src/usr/local/www/system_gateway_groups.php
@@ -0,0 +1,235 @@
+<?php
+/* $Id$ */
+/*
+ system_gateway_groups.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-gatewaygroups
+##|*NAME=System: Gateway Groups page
+##|*DESCR=Allow access to the 'System: Gateway Groups' page.
+##|*MATCH=system_gateway_groups.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("openvpn.inc");
+
+if (!is_array($config['gateways']['gateway_group'])) {
+ $config['gateways']['gateway_group'] = array();
+}
+
+$a_gateway_groups = &$config['gateways']['gateway_group'];
+$a_gateways = &$config['gateways']['gateway_item'];
+$changedesc = gettext("Gateway Groups") . ": ";
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+
+ $retval = 0;
+
+ $retval = system_routing_configure();
+ send_multiple_events(array("service reload dyndnsall", "service reload ipsecdns", "filter reload"));
+
+ /* reconfigure our gateway monitor */
+ setup_gateways_monitor();
+
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('staticroutes');
+ }
+
+ foreach ($a_gateway_groups as $gateway_group) {
+ $gw_subsystem = 'gwgroup.' . $gateway_group['name'];
+ if (is_subsystem_dirty($gw_subsystem)) {
+ openvpn_resync_gwgroup($gateway_group['name']);
+ clear_subsystem_dirty($gw_subsystem);
+ }
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_gateway_groups[$_GET['id']]) {
+ $changedesc .= gettext("removed gateway group") . " {$_GET['id']}";
+ foreach ($config['filter']['rule'] as $idx => $rule) {
+ if ($rule['gateway'] == $a_gateway_groups[$_GET['id']]['name']) {
+ unset($config['filter']['rule'][$idx]['gateway']);
+ }
+ }
+ unset($a_gateway_groups[$_GET['id']]);
+ write_config($changedesc);
+ mark_subsystem_dirty('staticroutes');
+ header("Location: system_gateway_groups.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Gateway Groups"));
+$shortcut_section = "gateway-groups";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="system_gateway_groups.php" method="post">
+<input type="hidden" name="y1" value="1" />
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('staticroutes')): ?><br/>
+<?php print_info_box_np(sprintf(gettext("The gateway configuration has been changed.%sYou must apply the changes in order for them to take effect."), "<br />"));?><br /><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system groups">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Gateways"), false, "system_gateways.php");
+ $tab_array[1] = array(gettext("Routes"), false, "system_routes.php");
+ $tab_array[2] = array(gettext("Groups"), true, "system_gateway_groups.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <thead>
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Group Name");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Gateways");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Priority");?></td>
+ <td width="30%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="system_gateway_groups_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="system_gateway_groups_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_gateway_groups as $gateway_group):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
+ <?php
+ echo $gateway_group['name'];
+ ?>
+ </td>
+ <td class="listr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
+ <?php
+ foreach ($gateway_group['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ echo htmlspecialchars(strtoupper($itemsplit[0])) . "<br />\n";
+ }
+ ?>
+ </td>
+ <td class="listr" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
+ <?php
+ foreach ($gateway_group['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ echo "Tier ". htmlspecialchars($itemsplit[1]) . "<br />\n";
+ }
+ ?>
+ </td>
+ <td class="listbg" ondblclick="document.location='system_gateway_groups_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($gateway_group['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+ <a href="system_gateway_groups_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" /></a>
+ </td>
+ <td>
+ <a href="system_gateway_groups.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gateway group?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="system_gateway_groups_edit.php?dup=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="duplicate" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr style="display:none;">
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<p>
+ <b><?=gettext("Note:");?></b>
+ <?=gettext("Remember to use these Gateway Groups in firewall rules in order to enable load balancing, failover, or policy-based routing. Without rules directing traffic into the Gateway Groups, they will not be used.");?>
+</p>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_gateway_groups_edit.php b/src/usr/local/www/system_gateway_groups_edit.php
new file mode 100644
index 0000000..c5fcc3b
--- /dev/null
+++ b/src/usr/local/www/system_gateway_groups_edit.php
@@ -0,0 +1,378 @@
+<?php
+/* $Id$ */
+/*
+ system_gateway_groups_edit.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-gateways-editgatewaygroups
+##|*NAME=System: Gateways: Edit Gateway Groups page
+##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway Groups' page.
+##|*MATCH=system_gateway_groups_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateway_groups.php');
+}
+
+if (!is_array($config['gateways']['gateway_group'])) {
+ $config['gateways']['gateway_group'] = array();
+}
+
+$a_gateway_groups = &$config['gateways']['gateway_group'];
+$a_gateways = return_gateways_array();
+
+$categories = array(
+ 'down' => gettext("Member Down"),
+ 'downloss' => gettext("Packet Loss"),
+ 'downlatency' => gettext("High Latency"),
+ 'downlosslatency' => gettext("Packet Loss or High Latency"));
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+}
+
+if (isset($id) && $a_gateway_groups[$id]) {
+ $pconfig['name'] = $a_gateway_groups[$id]['name'];
+ $pconfig['item'] = &$a_gateway_groups[$id]['item'];
+ $pconfig['descr'] = $a_gateway_groups[$id]['descr'];
+ $pconfig['trigger'] = $a_gateway_groups[$id]['trigger'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "name");
+ $reqdfieldsn = explode(",", "Name");
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!isset($_POST['name'])) {
+ $input_errors[] = gettext("A valid gateway group name must be specified.");
+ }
+ if (!is_validaliasname($_POST['name'])) {
+ $input_errors[] = gettext("The gateway name must not contain invalid characters.");
+ }
+
+ if (isset($_POST['name'])) {
+ /* check for overlaps */
+ if (is_array($a_gateway_groups)) {
+ foreach ($a_gateway_groups as $gateway_group) {
+ if (isset($id) && ($a_gateway_groups[$id]) && ($a_gateway_groups[$id] === $gateway_group)) {
+ if ($gateway_group['name'] != $_POST['name']) {
+ $input_errors[] = gettext("Changing name on a gateway group is not allowed.");
+ }
+ continue;
+ }
+
+ if ($gateway_group['name'] == $_POST['name']) {
+ $input_errors[] = sprintf(gettext('A gateway group with this name "%s" already exists.'), $_POST['name']);
+ break;
+ }
+ }
+ }
+ }
+
+ /* Build list of items in group with priority */
+ $pconfig['item'] = array();
+ foreach ($a_gateways as $gwname => $gateway) {
+ if ($_POST[$gwname] > 0) {
+ $vipname = "{$gwname}_vip";
+ /* we have a priority above 0 (disabled), add item to list */
+ $pconfig['item'][] = "{$gwname}|{$_POST[$gwname]}|{$_POST[$vipname]}";
+ }
+ /* check for overlaps */
+ if ($_POST['name'] == $gwname) {
+ $input_errors[] = sprintf(gettext('A gateway group cannot have the same name with a gateway "%s" please choose another name.'), $_POST['name']);
+ }
+
+ }
+ if (count($pconfig['item']) == 0) {
+ $input_errors[] = gettext("No gateway(s) have been selected to be used in this group");
+ }
+
+ if (!$input_errors) {
+ $gateway_group = array();
+ $gateway_group['name'] = $_POST['name'];
+ $gateway_group['item'] = $pconfig['item'];
+ $gateway_group['trigger'] = $_POST['trigger'];
+ $gateway_group['descr'] = $_POST['descr'];
+
+ if (isset($id) && $a_gateway_groups[$id]) {
+ $a_gateway_groups[$id] = $gateway_group;
+ } else {
+ $a_gateway_groups[] = $gateway_group;
+ }
+
+ mark_subsystem_dirty('staticroutes');
+ mark_subsystem_dirty('gwgroup.' . $gateway_group['name']);
+
+ write_config();
+
+ header("Location: system_gateway_groups.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Gateways"), gettext("Edit gateway group"));
+$shortcut_section = "gateway-groups";
+
+function build_gateway_protocol_map (&$a_gateways) {
+ $result = array();
+ foreach ($a_gateways as $gwname => $gateway) {
+ $result[$gwname] = $gateway['ipprotocol'];
+ }
+ return $result;
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+
+<?php
+$gateway_protocol = build_gateway_protocol_map($a_gateways);
+$gateway_array = array_keys($a_gateways);
+$protocol_array = array_values($gateway_protocol);
+$protocol_array = array_values(array_unique($gateway_protocol));
+?>
+<script type="text/javascript">
+//<![CDATA[
+jQuery(function ($) {
+ var gateway_protocol = <?= json_encode($gateway_protocol) ?>;
+ var gateways = <?= json_encode($gateway_array) ?>;
+ var protocols = <?= json_encode($protocol_array) ?>;
+ if (protocols.length <= 1) { return; }
+
+ var update_gateway_visibilities = function () {
+ var which_protocol_to_show = undefined;
+ $.each(gateways, function (i, gateway) {
+ var $select = $("#" + gateway);
+ var value = $select.val();
+ var protocol = gateway_protocol[gateway];
+ if (value !== '0' /* i.e., an option is selected */) {
+ if (which_protocol_to_show === undefined) {
+ which_protocol_to_show = protocol;
+ } else if (which_protocol_to_show !== protocol) {
+ which_protocol_to_show = 'ALL OF THEM'; // this shouldn't happen
+ }
+ }
+ });
+ if (which_protocol_to_show !== undefined && which_protocol_to_show !== 'ALL OF THEM') {
+ $.each(gateways, function (i, gateway) {
+ var protocol = gateway_protocol[gateway];
+ var $row = $("tr.gateway_row#" + gateway + "_row");
+ if (protocol === which_protocol_to_show) {
+ if ($row.is(":hidden")) {
+ $row.fadeIn('slow');
+ }
+ } else {
+ if (!$row.is(":hidden")) {
+ $row.fadeOut('slow');
+ }
+ }
+ });
+ } else {
+ $("tr.gateway_row").each(function () {
+ if ($(this).is(":hidden")) {
+ $(this).fadeIn('slow');
+ }
+ });
+ }
+ };
+ $("select.gateway_tier_selector").change(update_gateway_visibilities);
+ update_gateway_visibilities();
+});
+//]]>
+</script>
+
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="system_gateway_groups_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system groups edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway group entry"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Group Name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ <br /> <span class="vexpl"><?=gettext("Group Name"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway Priority"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="6" cellspacing="0" summary="gateway priority">
+ <tr>
+ <td class="listhdrr">Gateway</td>
+ <td class="listhdrr">Tier</td>
+ <td class="listhdrr">Virtual IP</td>
+ <td class="listhdrr">Description</td>
+ </tr>
+ <?php
+ $carplist = get_configured_carp_interface_list($interface);
+ foreach ($a_gateways as $gwname => $gateway) {
+ if (!empty($pconfig['item'])) {
+ $af = explode("|", $pconfig['item'][0]);
+ $family = $a_gateways[$af[0]]['ipprotocol'];
+ if ($gateway['ipprotocol'] != $family) {
+ continue;
+ }
+ }
+ $interface = $gateway['friendlyiface'];
+ $selected = array();
+ foreach ((array)$pconfig['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ if ($itemsplit[0] == $gwname) {
+ $selected[$itemsplit[1]] = "selected=\"selected\"";
+ break;
+ } else {
+ $selected[0] = "selected=\"selected\"";
+ }
+ }
+ $tr_id = $gwname . "_row";
+ echo "<tr class='gateway_row' id='{$tr_id}'>\n";
+ echo "<td class='listlr'>";
+ echo "<strong>{$gateway['name']} </strong>";
+ echo "</td><td class='listr'>";
+ echo "<select name='{$gwname}' class='gateway_tier_selector formfldselect' id='{$gwname}'>\n";
+ echo "<option value='0' $selected[0] >" . gettext("Never") . "</option>\n";
+ echo "<option value='1' $selected[1] >" . gettext("Tier 1") . "</option>\n";
+ echo "<option value='2' $selected[2] >" . gettext("Tier 2") . "</option>\n";
+ echo "<option value='3' $selected[3] >" . gettext("Tier 3") . "</option>\n";
+ echo "<option value='4' $selected[4] >" . gettext("Tier 4") . "</option>\n";
+ echo "<option value='5' $selected[5] >" . gettext("Tier 5") . "</option>\n";
+ echo "</select>\n";
+ echo "</td>";
+
+ $selected = array();
+ foreach ((array)$pconfig['item'] as $item) {
+ $itemsplit = explode("|", $item);
+ if ($itemsplit[0] == $gwname) {
+ $selected[$itemsplit[2]] = "selected=\"selected\"";
+ break;
+ } else {
+ $selected['address'] = "selected=\"selected\"";
+ }
+ }
+ echo "<td class='listr'>";
+ echo "<select name='{$gwname}_vip' class='gateway_vip_selector formfldselect' id='{$gwname}_vip'>\n";
+ echo "<option value='address' {$selected['address']} >" . gettext("Interface Address") . "</option>\n";
+ foreach ($carplist as $vip => $address) {
+ echo "<!-- $vip - $address - $interface -->\n";
+ if (($gateway['ipprotocol'] == "inet") && (!is_ipaddrv4($address))) {
+ continue;
+ }
+ if (($gateway['ipprotocol'] == "inet6") && (!is_ipaddrv6($address))) {
+ continue;
+ }
+ echo "<option value='{$vip}' $selected[$vip] >$vip - $address</option>\n";
+ }
+ echo "</select></td>";
+ echo "<td class='listr'><strong>{$gateway['descr']}&nbsp;</strong>";
+ echo "</td></tr>";
+ }
+ ?>
+ </table>
+ <br /><span class="vexpl">
+ <strong><?=gettext("Link Priority"); ?></strong> <br />
+ <?=gettext("The priority selected here defines in what order failover and balancing of links will be done. " .
+ "Multiple links of the same priority will balance connections until all links in the priority will be exhausted. " .
+ "If all links in a priority level are exhausted we will use the next available link(s) in the next priority level.") ?>
+ <br />
+ <strong><?=gettext("Virtual IP"); ?></strong> <br />
+ <?=gettext("The virtual IP field selects what (virtual) IP should be used when this group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint") ?>
+ </span><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Trigger Level"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='trigger' class='formfldselect trigger_level_selector' id='trigger'>
+ <?php
+ foreach ($categories as $category => $categoryd) {
+ echo "<option value=\"$category\"";
+ if ($category == $pconfig['trigger']) {
+ echo " selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($categoryd) . "</option>\n";
+ }
+ ?>
+ </select>
+ <br /> <span class="vexpl"><?=gettext("When to trigger exclusion of a member"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_gateway_groups[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_gateways.php b/src/usr/local/www/system_gateways.php
new file mode 100644
index 0000000..850c5ba
--- /dev/null
+++ b/src/usr/local/www/system_gateways.php
@@ -0,0 +1,436 @@
+<?php
+/* $Id$ */
+/*
+ system_gateways.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-gateways
+##|*NAME=System: Gateways page
+##|*DESCR=Allow access to the 'System: Gateways' page.
+##|*MATCH=system_gateways.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+$a_gateways = return_gateways_array(true, false, true);
+$a_gateways_arr = array();
+foreach ($a_gateways as $gw) {
+ $a_gateways_arr[] = $gw;
+}
+$a_gateways = $a_gateways_arr;
+
+if (!is_array($config['gateways']['gateway_item'])) {
+ $config['gateways']['gateway_item'] = array();
+}
+
+$a_gateway_item = &$config['gateways']['gateway_item'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+
+ $retval = 0;
+
+ $retval = system_routing_configure();
+ $retval |= filter_configure();
+ /* reconfigure our gateway monitor */
+ setup_gateways_monitor();
+
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('staticroutes');
+ }
+ }
+}
+
+function can_delete_disable_gateway_item($id, $disable = false) {
+ global $config, $input_errors, $a_gateways;
+
+ if (!isset($a_gateways[$id])) {
+ return false;
+ }
+
+ if (is_array($config['gateways']['gateway_group'])) {
+ foreach ($config['gateways']['gateway_group'] as $group) {
+ foreach ($group['item'] as $item) {
+ $items = explode("|", $item);
+ if ($items[0] == $a_gateways[$id]['name']) {
+ if (!$disable) {
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']);
+ } else {
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']);
+ }
+ }
+ }
+ }
+ }
+
+ if (is_array($config['staticroutes']['route'])) {
+ foreach ($config['staticroutes']['route'] as $route) {
+ if ($route['gateway'] == $a_gateways[$id]['name']) {
+ if (!$disable) {
+ // The user wants to delete this gateway, but there is a static route (enabled or disabled) that refers to the gateway.
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']);
+ } else if (!isset($route['disabled'])) {
+ // The user wants to disable this gateway.
+ // But there is a static route that uses this gateway and is enabled (not disabled).
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']);
+ }
+ }
+ }
+ }
+
+ if (isset($input_errors)) {
+ return false;
+ }
+
+ return true;
+}
+
+function delete_gateway_item($id) {
+ global $config, $a_gateways;
+
+ if (!isset($a_gateways[$id])) {
+ return;
+ }
+
+ /* NOTE: Cleanup static routes for the monitor ip if any */
+ if (!empty($a_gateways[$id]['monitor']) &&
+ $a_gateways[$id]['monitor'] != "dynamic" &&
+ is_ipaddr($a_gateways[$id]['monitor']) &&
+ $a_gateways[$id]['gateway'] != $a_gateways[$id]['monitor']) {
+ if (is_ipaddrv4($a_gateways[$id]['monitor'])) {
+ mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$id]['monitor']));
+ } else {
+ mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$id]['monitor']));
+ }
+ }
+
+ if ($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway'] == $a_gateways[$id]['name']) {
+ unset($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway']);
+ }
+ unset($config['gateways']['gateway_item'][$a_gateways[$id]['attribute']]);
+}
+
+unset($input_errors);
+if ($_GET['act'] == "del") {
+ if (can_delete_disable_gateway_item($_GET['id'])) {
+ $realid = $a_gateways[$_GET['id']]['attribute'];
+ delete_gateway_item($_GET['id']);
+ write_config("Gateways: removed gateway {$realid}");
+ mark_subsystem_dirty('staticroutes');
+ header("Location: system_gateways.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected items */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei) {
+ if (!can_delete_disable_gateway_item($rulei)) {
+ break;
+ }
+ }
+
+ if (!isset($input_errors)) {
+ $items_deleted = "";
+ foreach ($_POST['rule'] as $rulei) {
+ delete_gateway_item($rulei);
+ $items_deleted .= "{$rulei} ";
+ }
+ if (!empty($items_deleted)) {
+ write_config("Gateways: removed gateways {$items_deleted}");
+ mark_subsystem_dirty('staticroutes');
+ }
+ header("Location: system_gateways.php");
+ exit;
+ }
+ }
+
+} else if ($_GET['act'] == "toggle" && $a_gateways[$_GET['id']]) {
+ $realid = $a_gateways[$_GET['id']]['attribute'];
+ $disable_gw = !isset($a_gateway_item[$realid]['disabled']);
+ if ($disable_gw) {
+ // The user wants to disable the gateway, so check if that is OK.
+ $ok_to_toggle = can_delete_disable_gateway_item($_GET['id'], $disable_gw);
+ } else {
+ // The user wants to enable the gateway. That is always OK.
+ $ok_to_toggle = true;
+ }
+ if ($ok_to_toggle) {
+ if ($disable_gw) {
+ $a_gateway_item[$realid]['disabled'] = true;
+ } else {
+ unset($a_gateway_item[$realid]['disabled']);
+ }
+
+ if (write_config("Gateways: enable/disable")) {
+ mark_subsystem_dirty('staticroutes');
+ }
+
+ header("Location: system_gateways.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Gateways"));
+$shortcut_section = "gateways";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="system_gateways.php" method="post">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('staticroutes')): ?><p>
+<?php print_info_box_np(gettext("The gateway configuration has been changed.") . "<br />" . gettext("You must apply the changes in order for them to take effect."));?><br /></p>
+<?php endif; ?>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system gatewyas">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Gateways"), true, "system_gateways.php");
+ $tab_array[1] = array(gettext("Routes"), false, "system_routes.php");
+ $tab_array[2] = array(gettext("Groups"), false, "system_gateway_groups.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr id="frheader">
+ <td width="2%" class="list">&nbsp;</td>
+ <td width="2%" class="list">&nbsp;</td>
+ <td width="15%" class="listhdrr"><?=gettext("Name"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Gateway"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Monitor IP"); ?></td>
+ <td width="31%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="system_gateways_edit.php">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $textse = "</span>";
+ $i = 0;
+ foreach ($a_gateways as $gateway):
+ if (isset($gateway['disabled']) || isset($gateway['inactive'])) {
+ $textss = "<span class=\"gray\">";
+ $iconfn = "pass_d";
+ } else {
+ $textss = "<span>";
+ $iconfn = "pass";
+ }
+?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="listt">
+<?php
+ if (is_numeric($gateway['attribute'])):
+?>
+ <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+<?php
+ else:
+?>
+ &nbsp;
+<?php
+ endif;
+?>
+ </td>
+ <td class="listt" align="center">
+<?php
+ if (isset($gateway['inactive'])):
+?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" border="0"
+ title="<?=gettext("This gateway is inactive because interface is missing");?>" alt="icon" />
+<?php
+ elseif (is_numeric($gateway['attribute'])):
+?>
+ <a href="?act=toggle&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+ </a>
+<?php
+ else:
+?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+<?php
+ endif;
+?>
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo $gateway['name'];
+ if (isset($gateway['defaultgw'])) {
+ echo " <strong>(default)</strong>";
+ }
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($gateway['friendlyiface']));
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo $gateway['gateway'] . " ";
+ echo $textse;
+?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ echo $textss;
+ echo htmlspecialchars($gateway['monitor']) . " ";
+ echo $textse;
+?>
+ </td>
+<?php
+ if (is_numeric($gateway['attribute'])):
+?>
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ else:
+?>
+ <td class="listbgns" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+<?php
+ endif;
+ echo $textss;
+ echo htmlspecialchars($gateway['descr']) . "&nbsp;";
+ echo $textse;
+?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td>
+ <a href="system_gateways_edit.php?id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" alt="edit" />
+ </a>
+ </td>
+<?php
+ if (is_numeric($gateway['attribute'])):
+?>
+ <td>
+ <a href="system_gateways.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this gateway?"); ?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+<?php
+ else:
+?>
+ <td width='17'></td>
+<?php
+ endif;
+?>
+ </tr>
+ <tr>
+ <td width="17"></td>
+ <td>
+ <a href="system_gateways_edit.php?dup=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="7"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
+ title="<?=gettext("delete selected items");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ style="width:17;height:17" title="<?=gettext("delete selected items");?>"
+ onclick="return confirm('<?=gettext("Do you really want to delete the selected gateway items?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ <td>
+ <a href="system_gateways_edit.php">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_gateways_edit.php b/src/usr/local/www/system_gateways_edit.php
new file mode 100644
index 0000000..af5e7cb
--- /dev/null
+++ b/src/usr/local/www/system_gateways_edit.php
@@ -0,0 +1,950 @@
+<?php
+/* $Id$ */
+/*
+ system_gateways_edit.php
+ part of pfSense (https://www.pfsense.org)
+
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-gateways-editgateway
+##|*NAME=System: Gateways: Edit Gateway page
+##|*DESCR=Allow access to the 'System: Gateways: Edit Gateway' page.
+##|*MATCH=system_gateways_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require("pkg-utils.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_gateways.php');
+}
+
+$a_gateways = return_gateways_array(true, false, true);
+$a_gateways_arr = array();
+foreach ($a_gateways as $gw) {
+ $a_gateways_arr[] = $gw;
+}
+$a_gateways = $a_gateways_arr;
+
+if (!is_array($config['gateways']['gateway_item'])) {
+ $config['gateways']['gateway_item'] = array();
+}
+
+$a_gateway_item = &$config['gateways']['gateway_item'];
+$apinger_default = return_apinger_defaults();
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+}
+
+if (isset($id) && $a_gateways[$id]) {
+ $pconfig = array();
+ $pconfig['name'] = $a_gateways[$id]['name'];
+ $pconfig['weight'] = $a_gateways[$id]['weight'];
+ $pconfig['interval'] = $a_gateways[$id]['interval'];
+ $pconfig['avg_delay_samples'] = $a_gateways[$id]['avg_delay_samples'];
+ $pconfig['avg_delay_samples_calculated'] = isset($a_gateways[$id]['avg_delay_samples_calculated']);
+ $pconfig['avg_loss_samples'] = $a_gateways[$id]['avg_loss_samples'];
+ $pconfig['avg_loss_samples_calculated'] = isset($a_gateways[$id]['avg_loss_samples_calculated']);
+ $pconfig['avg_loss_delay_samples'] = $a_gateways[$id]['avg_loss_delay_samples'];
+ $pconfig['avg_loss_delay_samples_calculated'] = isset($a_gateways[$id]['avg_loss_delay_samples_calculated']);
+ $pconfig['interface'] = $a_gateways[$id]['interface'];
+ $pconfig['friendlyiface'] = $a_gateways[$id]['friendlyiface'];
+ $pconfig['ipprotocol'] = $a_gateways[$id]['ipprotocol'];
+ if (isset($a_gateways[$id]['dynamic'])) {
+ $pconfig['dynamic'] = true;
+ }
+ $pconfig['gateway'] = $a_gateways[$id]['gateway'];
+ $pconfig['defaultgw'] = isset($a_gateways[$id]['defaultgw']);
+ $pconfig['force_down'] = isset($a_gateways[$id]['force_down']);
+ $pconfig['latencylow'] = $a_gateways[$id]['latencylow'];
+ $pconfig['latencyhigh'] = $a_gateways[$id]['latencyhigh'];
+ $pconfig['losslow'] = $a_gateways[$id]['losslow'];
+ $pconfig['losshigh'] = $a_gateways[$id]['losshigh'];
+ $pconfig['down'] = $a_gateways[$id]['down'];
+ $pconfig['monitor'] = $a_gateways[$id]['monitor'];
+ $pconfig['monitor_disable'] = isset($a_gateways[$id]['monitor_disable']);
+ $pconfig['descr'] = $a_gateways[$id]['descr'];
+ $pconfig['attribute'] = $a_gateways[$id]['attribute'];
+ $pconfig['disabled'] = isset($a_gateways[$id]['disabled']);
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+ unset($pconfig['attribute']);
+}
+
+if (isset($id) && $a_gateways[$id]) {
+ $realid = $a_gateways[$id]['attribute'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+
+ /* input validation */
+ $reqdfields = explode(" ", "name interface");
+ $reqdfieldsn = array(gettext("Name"), gettext("Interface"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!isset($_POST['name'])) {
+ $input_errors[] = "A valid gateway name must be specified.";
+ }
+ if (!is_validaliasname($_POST['name'])) {
+ $input_errors[] = gettext("The gateway name must not contain invalid characters.");
+ } else if (isset($_POST['disabled'])) {
+ // We have a valid gateway name that the user wants to mark as disabled.
+ // Check if the gateway name is used in any gateway group.
+ if (is_array($config['gateways']['gateway_group'])) {
+ foreach ($config['gateways']['gateway_group'] as $group) {
+ foreach ($group['item'] as $item) {
+ $items = explode("|", $item);
+ if ($items[0] == $_POST['name']) {
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Gateway Group '%s'"), $_POST['name'], $group['name']);
+ }
+ }
+ }
+ }
+
+ // Check if the gateway name is used in any enabled Static Route.
+ if (is_array($config['staticroutes']['route'])) {
+ foreach ($config['staticroutes']['route'] as $route) {
+ if ($route['gateway'] == $_POST['name']) {
+ if (!isset($route['disabled'])) {
+ // There is a static route that uses this gateway and is enabled (not disabled).
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be disabled because it is in use on Static Route '%s'"), $_POST['name'], $route['network']);
+ }
+ }
+ }
+ }
+ }
+ /* skip system gateways which have been automatically added */
+ if (($_POST['gateway'] && (!is_ipaddr($_POST['gateway'])) && ($_POST['attribute'] !== "system")) && ($_POST['gateway'] != "dynamic")) {
+ $input_errors[] = gettext("A valid gateway IP address must be specified.");
+ }
+
+ if ($_POST['gateway'] && (is_ipaddr($_POST['gateway'])) && !$_REQUEST['isAjax']) {
+ if (is_ipaddrv4($_POST['gateway'])) {
+ $parent_ip = get_interface_ip($_POST['interface']);
+ $parent_sn = get_interface_subnet($_POST['interface']);
+ if (empty($parent_ip) || empty($parent_sn)) {
+ $input_errors[] = gettext("Cannot add IPv4 Gateway Address because no IPv4 address could be found on the interface.");
+ } else {
+ $subnets = array(gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn);
+ $vips = link_interface_to_vips($_POST['interface']);
+ if (is_array($vips)) {
+ foreach ($vips as $vip) {
+ if (!is_ipaddrv4($vip['subnet'])) {
+ continue;
+ }
+ $subnets[] = gen_subnet($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
+ }
+ }
+
+ $found = false;
+ foreach ($subnets as $subnet) {
+ if (ip_in_subnet($_POST['gateway'], $subnet)) {
+ $found = true;
+ break;
+ }
+ }
+
+ if ($found === false) {
+ $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
+ }
+ }
+ } else if (is_ipaddrv6($_POST['gateway'])) {
+ /* do not do a subnet match on a link local address, it's valid */
+ if (!is_linklocal($_POST['gateway'])) {
+ $parent_ip = get_interface_ipv6($_POST['interface']);
+ $parent_sn = get_interface_subnetv6($_POST['interface']);
+ if (empty($parent_ip) || empty($parent_sn)) {
+ $input_errors[] = gettext("Cannot add IPv6 Gateway Address because no IPv6 address could be found on the interface.");
+ } else {
+ $subnets = array(gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn);
+ $vips = link_interface_to_vips($_POST['interface']);
+ if (is_array($vips)) {
+ foreach ($vips as $vip) {
+ if (!is_ipaddrv6($vip['subnet'])) {
+ continue;
+ }
+ $subnets[] = gen_subnetv6($vip['subnet'], $vip['subnet_bits']) . "/" . $vip['subnet_bits'];
+ }
+ }
+
+ $found = false;
+ foreach ($subnets as $subnet) {
+ if (ip_in_subnet($_POST['gateway'], $subnet)) {
+ $found = true;
+ break;
+ }
+ }
+
+ if ($found === false) {
+ $input_errors[] = sprintf(gettext("The gateway address %1\$s does not lie within one of the chosen interface's subnets."), $_POST['gateway']);
+ }
+ }
+ }
+ }
+
+ if (!empty($config['interfaces'][$_POST['interface']]['ipaddr'])) {
+ if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) {
+ $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv4 configuration.");
+ }
+ }
+ if (!empty($config['interfaces'][$_POST['interface']]['ipaddrv6'])) {
+ if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddrv6']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic")) {
+ $input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static IPv6 configuration.");
+ }
+ }
+ }
+ if (($_POST['monitor'] <> "") && !is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
+ $input_errors[] = gettext("A valid monitor IP address must be specified.");
+ }
+ /* only allow correct IPv4 and IPv6 gateway addresses */
+ if (($_POST['gateway'] <> "") && is_ipaddr($_POST['gateway']) && $_POST['gateway'] != "dynamic") {
+ if (is_ipaddrv6($_POST['gateway']) && ($_POST['ipprotocol'] == "inet")) {
+ $input_errors[] = gettext("The IPv6 gateway address '{$_POST['gateway']}' can not be used as a IPv4 gateway'.");
+ }
+ if (is_ipaddrv4($_POST['gateway']) && ($_POST['ipprotocol'] == "inet6")) {
+ $input_errors[] = gettext("The IPv4 gateway address '{$_POST['gateway']}' can not be used as a IPv6 gateway'.");
+ }
+ }
+ /* only allow correct IPv4 and IPv6 monitor addresses */
+ if (($_POST['monitor'] <> "") && is_ipaddr($_POST['monitor']) && $_POST['monitor'] != "dynamic") {
+ if (is_ipaddrv6($_POST['monitor']) && ($_POST['ipprotocol'] == "inet")) {
+ $input_errors[] = gettext("The IPv6 monitor address '{$_POST['monitor']}' can not be used on a IPv4 gateway'.");
+ }
+ if (is_ipaddrv4($_POST['monitor']) && ($_POST['ipprotocol'] == "inet6")) {
+ $input_errors[] = gettext("The IPv4 monitor address '{$_POST['monitor']}' can not be used on a IPv6 gateway'.");
+ }
+ }
+
+ if (isset($_POST['name'])) {
+ /* check for overlaps */
+ foreach ($a_gateways as $gateway) {
+ if (isset($id) && ($a_gateways[$id]) && ($a_gateways[$id] === $gateway)) {
+ if ($gateway['name'] != $_POST['name']) {
+ $input_errors[] = gettext("Changing name on a gateway is not allowed.");
+ }
+ continue;
+ }
+ if ($_POST['name'] <> "") {
+ if (($gateway['name'] <> "") && ($_POST['name'] == $gateway['name']) && ($gateway['attribute'] !== "system")) {
+ $input_errors[] = sprintf(gettext('The gateway name "%s" already exists.'), $_POST['name']);
+ break;
+ }
+ }
+ if (is_ipaddr($_POST['gateway'])) {
+ if (($gateway['gateway'] <> "") && ($_POST['gateway'] == $gateway['gateway']) && ($gateway['attribute'] !== "system")) {
+ $input_errors[] = sprintf(gettext('The gateway IP address "%s" already exists.'), $_POST['gateway']);
+ break;
+ }
+ }
+ if (is_ipaddr($_POST['monitor'])) {
+ if (($gateway['monitor'] <> "") && ($_POST['monitor'] == $gateway['monitor']) && ($gateway['attribute'] !== "system")) {
+ $input_errors[] = sprintf(gettext('The monitor IP address "%s" is already in use. You must choose a different monitor IP.'), $_POST['monitor']);
+ break;
+ }
+ }
+ }
+ }
+
+ /* input validation of apinger advanced parameters */
+ if ($_POST['latencylow']) {
+ if (!is_numeric($_POST['latencylow'])) {
+ $input_errors[] = gettext("The low latency threshold needs to be a numeric value.");
+ } else {
+ if ($_POST['latencylow'] < 1) {
+ $input_errors[] = gettext("The low latency threshold needs to be positive.");
+ }
+ }
+ }
+
+ if ($_POST['latencyhigh']) {
+ if (!is_numeric($_POST['latencyhigh'])) {
+ $input_errors[] = gettext("The high latency threshold needs to be a numeric value.");
+ } else {
+ if ($_POST['latencyhigh'] < 1) {
+ $input_errors[] = gettext("The high latency threshold needs to be positive.");
+ }
+ }
+ }
+
+ if ($_POST['losslow']) {
+ if (!is_numeric($_POST['losslow'])) {
+ $input_errors[] = gettext("The low Packet Loss threshold needs to be a numeric value.");
+ } else {
+ if ($_POST['losslow'] < 1) {
+ $input_errors[] = gettext("The low Packet Loss threshold needs to be positive.");
+ }
+ if ($_POST['losslow'] >= 100) {
+ $input_errors[] = gettext("The low Packet Loss threshold needs to be less than 100.");
+ }
+ }
+ }
+
+ if ($_POST['losshigh']) {
+ if (!is_numeric($_POST['losshigh'])) {
+ $input_errors[] = gettext("The high Packet Loss threshold needs to be a numeric value.");
+ } else {
+ if ($_POST['losshigh'] < 1) {
+ $input_errors[] = gettext("The high Packet Loss threshold needs to be positive.");
+ }
+ if ($_POST['losshigh'] > 100) {
+ $input_errors[] = gettext("The high Packet Loss threshold needs to be 100 or less.");
+ }
+ }
+ }
+
+ if (($_POST['latencylow']) && ($_POST['latencyhigh'])) {
+ if ((is_numeric($_POST['latencylow'])) && (is_numeric($_POST['latencyhigh']))) {
+ if (($_POST['latencylow'] > $_POST['latencyhigh'])) {
+ $input_errors[] = gettext("The high latency threshold needs to be higher than the low latency threshold");
+ }
+ }
+ } else {
+ if ($_POST['latencylow']) {
+ if (is_numeric($_POST['latencylow'])) {
+ if ($_POST['latencylow'] > $apinger_default['latencyhigh']) {
+ $input_errors[] = gettext(sprintf("The low latency threshold needs to be less than the default high latency threshold (%d)", $apinger_default['latencyhigh']));
+ }
+ }
+ }
+ if ($_POST['latencyhigh']) {
+ if (is_numeric($_POST['latencyhigh'])) {
+ if ($_POST['latencyhigh'] < $apinger_default['latencylow']) {
+ $input_errors[] = gettext(sprintf("The high latency threshold needs to be higher than the default low latency threshold (%d)", $apinger_default['latencylow']));
+ }
+ }
+ }
+ }
+
+ if (($_POST['losslow']) && ($_POST['losshigh'])) {
+ if ((is_numeric($_POST['losslow'])) && (is_numeric($_POST['losshigh']))) {
+ if ($_POST['losslow'] > $_POST['losshigh']) {
+ $input_errors[] = gettext("The high Packet Loss threshold needs to be higher than the low Packet Loss threshold");
+ }
+ }
+ } else {
+ if ($_POST['losslow']) {
+ if (is_numeric($_POST['losslow'])) {
+ if ($_POST['losslow'] > $apinger_default['losshigh']) {
+ $input_errors[] = gettext(sprintf("The low Packet Loss threshold needs to be less than the default high Packet Loss threshold (%d)", $apinger_default['losshigh']));
+ }
+ }
+ }
+ if ($_POST['losshigh']) {
+ if (is_numeric($_POST['losshigh'])) {
+ if ($_POST['losshigh'] < $apinger_default['losslow']) {
+ $input_errors[] = gettext(sprintf("The high Packet Loss threshold needs to be higher than the default low Packet Loss threshold (%d)", $apinger_default['losslow']));
+ }
+ }
+ }
+ }
+
+ if ($_POST['interval']) {
+ if (!is_numeric($_POST['interval'])) {
+ $input_errors[] = gettext("The probe interval needs to be a numeric value.");
+ } else {
+ if ($_POST['interval'] < 1) {
+ $input_errors[] = gettext("The probe interval needs to be positive.");
+ }
+ }
+ }
+
+ if ($_POST['down']) {
+ if (!is_numeric($_POST['down'])) {
+ $input_errors[] = gettext("The down time setting needs to be a numeric value.");
+ } else {
+ if ($_POST['down'] < 1) {
+ $input_errors[] = gettext("The down time setting needs to be positive.");
+ }
+ }
+ }
+
+ if (($_POST['interval']) && ($_POST['down'])) {
+ if ((is_numeric($_POST['interval'])) && (is_numeric($_POST['down']))) {
+ if ($_POST['interval'] > $_POST['down']) {
+ $input_errors[] = gettext("The probe interval needs to be less than the down time setting.");
+ }
+ }
+ } else {
+ if ($_POST['interval']) {
+ if (is_numeric($_POST['interval'])) {
+ if ($_POST['interval'] > $apinger_default['down']) {
+ $input_errors[] = gettext(sprintf("The probe interval needs to be less than the default down time setting (%d)", $apinger_default['down']));
+ }
+ }
+ }
+ if ($_POST['down']) {
+ if (is_numeric($_POST['down'])) {
+ if ($_POST['down'] < $apinger_default['interval']) {
+ $input_errors[] = gettext(sprintf("The down time setting needs to be higher than the default probe interval (%d)", $apinger_default['interval']));
+ }
+ }
+ }
+ }
+
+ if ($_POST['avg_delay_samples']) {
+ if (!is_numeric($_POST['avg_delay_samples'])) {
+ $input_errors[] = gettext("The average delay replies qty needs to be a numeric value.");
+ } else {
+ if ($_POST['avg_delay_samples'] < 1) {
+ $input_errors[] = gettext("The average delay replies qty needs to be positive.");
+ }
+ }
+ }
+
+ if ($_POST['avg_loss_samples']) {
+ if (!is_numeric($_POST['avg_loss_samples'])) {
+ $input_errors[] = gettext("The average packet loss probes qty needs to be a numeric value.");
+ } else {
+ if ($_POST['avg_loss_samples'] < 1) {
+ $input_errors[] = gettext("The average packet loss probes qty needs to be positive.");
+ }
+ }
+ }
+
+ if ($_POST['avg_loss_delay_samples']) {
+ if (!is_numeric($_POST['avg_loss_delay_samples'])) {
+ $input_errors[] = gettext("The lost probe delay needs to be a numeric value.");
+ } else {
+ if ($_POST['avg_loss_delay_samples'] < 1) {
+ $input_errors[] = gettext("The lost probe delay needs to be positive.");
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $reloadif = "";
+ $gateway = array();
+
+ if (empty($_POST['interface'])) {
+ $gateway['interface'] = $pconfig['friendlyiface'];
+ } else {
+ $gateway['interface'] = $_POST['interface'];
+ }
+ if (is_ipaddr($_POST['gateway'])) {
+ $gateway['gateway'] = $_POST['gateway'];
+ } else {
+ $gateway['gateway'] = "dynamic";
+ }
+ $gateway['name'] = $_POST['name'];
+ $gateway['weight'] = $_POST['weight'];
+ $gateway['ipprotocol'] = $_POST['ipprotocol'];
+ $gateway['interval'] = $_POST['interval'];
+
+ $gateway['avg_delay_samples'] = $_POST['avg_delay_samples'];
+ if ($_POST['avg_delay_samples_calculated'] == "yes" || $_POST['avg_delay_samples_calculated'] == "on") {
+ $gateway['avg_delay_samples_calculated'] = true;
+ }
+
+ $gateway['avg_loss_samples'] = $_POST['avg_loss_samples'];
+ if ($_POST['avg_loss_samples_calculated'] == "yes" || $_POST['avg_loss_samples_calculated'] == "on") {
+ $gateway['avg_loss_samples_calculated'] = true;
+ }
+
+ $gateway['avg_loss_delay_samples'] = $_POST['avg_loss_delay_samples'];
+ if ($_POST['avg_loss_delay_samples_calculated'] == "yes" || $_POST['avg_loss_delay_samples_calculated'] == "on") {
+ $gateway['avg_loss_delay_samples_calculated'] = true;
+ }
+
+ $gateway['descr'] = $_POST['descr'];
+ if ($_POST['monitor_disable'] == "yes") {
+ $gateway['monitor_disable'] = true;
+ }
+ if ($_POST['force_down'] == "yes") {
+ $gateway['force_down'] = true;
+ }
+ if (is_ipaddr($_POST['monitor'])) {
+ $gateway['monitor'] = $_POST['monitor'];
+ }
+
+ /* NOTE: If monitor ip is changed need to cleanup the old static route */
+ if ($_POST['monitor'] != "dynamic" && !empty($a_gateway_item[$realid]) && is_ipaddr($a_gateway_item[$realid]['monitor']) &&
+ $_POST['monitor'] != $a_gateway_item[$realid]['monitor'] && $gateway['gateway'] != $a_gateway_item[$realid]['monitor']) {
+ if (is_ipaddrv4($a_gateway_item[$realid]['monitor'])) {
+ mwexec("/sbin/route delete " . escapeshellarg($a_gateway_item[$realid]['monitor']));
+ } else {
+ mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateway_item[$realid]['monitor']));
+ }
+ }
+
+ if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") {
+ $i = 0;
+ /* remove the default gateway bits for all gateways with the same address family */
+ foreach ($a_gateway_item as $gw) {
+ if ($gateway['ipprotocol'] == $gw['ipprotocol']) {
+ unset($config['gateways']['gateway_item'][$i]['defaultgw']);
+ if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw']) {
+ $reloadif = $gw['interface'];
+ }
+ }
+ $i++;
+ }
+ $gateway['defaultgw'] = true;
+ }
+
+ if ($_POST['latencylow']) {
+ $gateway['latencylow'] = $_POST['latencylow'];
+ }
+ if ($_POST['latencyhigh']) {
+ $gateway['latencyhigh'] = $_POST['latencyhigh'];
+ }
+ if ($_POST['losslow']) {
+ $gateway['losslow'] = $_POST['losslow'];
+ }
+ if ($_POST['losshigh']) {
+ $gateway['losshigh'] = $_POST['losshigh'];
+ }
+ if ($_POST['down']) {
+ $gateway['down'] = $_POST['down'];
+ }
+
+ if (isset($_POST['disabled'])) {
+ $gateway['disabled'] = true;
+ } else {
+ unset($gateway['disabled']);
+ }
+
+ /* when saving the manual gateway we use the attribute which has the corresponding id */
+ if (isset($realid) && $a_gateway_item[$realid]) {
+ $a_gateway_item[$realid] = $gateway;
+ } else {
+ $a_gateway_item[] = $gateway;
+ }
+
+ mark_subsystem_dirty('staticroutes');
+
+ write_config();
+
+ if ($_REQUEST['isAjax']) {
+ echo $_POST['name'];
+ exit;
+ } else if (!empty($reloadif)) {
+ send_event("interface reconfigure {$reloadif}");
+ }
+
+ header("Location: system_gateways.php");
+ exit;
+ } else {
+ if ($_REQUEST['isAjax']) {
+ header("HTTP/1.0 500 Internal Server Error");
+ header("Content-type: text/plain");
+ foreach ($input_errors as $error) {
+ echo("$error\n");
+ }
+ exit;
+ }
+
+ $pconfig = $_POST;
+ if (empty($_POST['friendlyiface'])) {
+ $pconfig['friendlyiface'] = $_POST['interface'];
+ }
+ }
+}
+
+
+$pgtitle = array(gettext("System"), gettext("Gateways"), gettext("Edit gateway"));
+$shortcut_section = "gateways";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function show_advanced_gateway() {
+ document.getElementById("showadvgatewaybox").innerHTML='';
+ aodiv = document.getElementById('showgatewayadv');
+ aodiv.style.display = "block";
+}
+function monitor_change() {
+ document.iform.monitor.disabled = document.iform.monitor_disable.checked;
+}
+
+function interval_change(interval_obj) {
+ valid_value(interval_obj, 1, 86400);
+ calculate_state_change();
+
+ calculated_change(document.iform.avg_delay_samples_calculated, document.iform.avg_delay_samples);
+ calculated_change(document.iform.avg_loss_samples_calculated, document.iform.avg_loss_samples);
+ calculated_change(document.iform.avg_loss_delay_samples_calculated, document.iform.avg_loss_delay_samples);
+}
+
+function samples_change(calculated_obj, samples_obj) {
+ calculated_change(calculated_obj, samples_obj);
+}
+
+function calculated_change(calculated_obj, samples_obj) {
+ switch (samples_obj.name) {
+
+ case 'avg_delay_samples':
+ // How many replies should be used to compute average delay
+ // for controlling "delay" alarms.
+ // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
+ if (calculated_obj.checked && (document.iform.interval.value > 0)) {
+ samples_obj.value = 60 * (1/6) / Math.pow(document.iform.interval.value, 0.333); // Calculate & Round to Integer
+ }
+ valid_value(samples_obj, 1, 100);
+ break;
+
+ case 'avg_loss_samples':
+ // How many probes should be used to compute average loss.
+ // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
+ if (calculated_obj.checked && (document.iform.interval.value > 0)) {
+ samples_obj.value = 60 / document.iform.interval.value; // Calculate & Round to Integer
+ }
+ valid_value(samples_obj, 1, 1000);
+ break;
+
+ case 'avg_loss_delay_samples':
+ // The delay (in samples) after which loss is computed
+ // without this delays larger than interval would be treated as loss.
+ // Calculate a reasonable value based on gateway probe interval and RRD 1 minute average graph step size (60).
+ if (calculated_obj.checked && (document.iform.interval.value > 0)) {
+ samples_obj.value = 60 * (1/3) / document.iform.interval.value; // Calculate & Round to Integer
+ }
+ valid_value(samples_obj, 1, 200);
+ break;
+ default:
+ }
+
+ calculate_state_change();
+}
+
+function valid_value(object, min, max) {
+ if (object.value) {
+ object.value = Math.round(object.value); // Round to integer
+ if (object.value < min) object.value = min; // Min Value
+ if (object.value > max) object.value = max; // Max Value
+ if (isNaN(object.value)) object.value = ''; // Empty Value
+ }
+}
+
+function calculate_state_change() {
+ if (document.iform.interval.value > 0) {
+ document.iform.avg_delay_samples_calculated.disabled = false;
+ document.iform.avg_loss_samples_calculated.disabled = false;
+ document.iform.avg_loss_delay_samples_calculated.disabled = false;
+
+ document.iform.avg_delay_samples.disabled = document.iform.avg_delay_samples_calculated.checked;
+ document.iform.avg_loss_samples.disabled = document.iform.avg_loss_samples_calculated.checked;
+ document.iform.avg_loss_delay_samples.disabled = document.iform.avg_loss_delay_samples_calculated.checked;
+ } else {
+ document.iform.avg_delay_samples_calculated.disabled = true;
+ document.iform.avg_loss_samples_calculated.disabled = true;
+ document.iform.avg_loss_delay_samples_calculated.disabled = true;
+ document.iform.interval.value = '';
+
+ document.iform.avg_delay_samples.disabled = false;
+ document.iform.avg_loss_samples.disabled = false;
+ document.iform.avg_loss_delay_samples.disabled = false;
+
+ document.iform.avg_delay_samples_calculated.checked = false;
+ document.iform.avg_loss_samples_calculated.checked = false;
+ document.iform.avg_loss_delay_samples_calculated.checked = false;
+ }
+}
+
+function enable_change() {
+ document.iform.avg_delay_samples.disabled = false;
+ document.iform.avg_loss_samples.disabled = false;
+ document.iform.avg_loss_delay_samples.disabled = false;
+}
+//]]>
+</script>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="system_gateways_edit.php" method="post" name="iform" id="iform">
+ <?php
+
+ /* If this is a system gateway we need this var */
+ if (($pconfig['attribute'] == "system") || is_numeric($pconfig['attribute'])) {
+ echo "<input type='hidden' name='attribute' id='attribute' value=\"" . htmlspecialchars($pconfig['attribute']) . "\" />\n";
+ }
+ echo "<input type='hidden' name='friendlyiface' id='friendlyiface' value=\"" . htmlspecialchars($pconfig['friendlyiface']) . "\" />\n";
+ ?>
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system gateways edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit gateway"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled");?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this gateway");?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this gateway without removing it from the list.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='interface' class='formselect'>
+ <?php
+ $interfaces = get_configured_interface_with_descr(false, true);
+ foreach ($interfaces as $iface => $ifacename) {
+ echo "<option value=\"{$iface}\"";
+ if ($iface == $pconfig['friendlyiface']) {
+ echo " selected='selected'";
+ }
+ echo ">" . htmlspecialchars($ifacename) . "</option>";
+ }
+ ?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose which interface this gateway applies to."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Address Family"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='ipprotocol' class='formselect' >
+ <?php
+ $options = array("inet" => "IPv4", "inet6" => "IPv6");
+ foreach ($options as $name => $string) {
+ echo "<option value=\"{$name}\"";
+ if ($name == $pconfig['ipprotocol']) {
+ echo " selected='selected'";
+ }
+ echo ">" . htmlspecialchars($string) . "</option>\n";
+ }
+ ?>
+ </select><br />
+ <span class="vexpl"><?=gettext("Choose the Internet Protocol this gateway uses."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ <br /><span class="vexpl"><?=gettext("Gateway name"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="gateway" type="text" class="formfld host" id="gateway" size="28" value="<?php if ($pconfig['dynamic']) echo "dynamic"; else echo htmlspecialchars($pconfig['gateway']); ?>" />
+ <br /><span class="vexpl"><?=gettext("Gateway IP address"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Default Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="defaultgw" type="checkbox" id="defaultgw" value="yes" <?php if ($pconfig['defaultgw'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Default Gateway"); ?></strong><br />
+ <?=gettext("This will select the above gateway as the default gateway"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Gateway Monitoring"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="monitor_disable" type="checkbox" id="monitor_disable" value="yes" <?php if ($pconfig['monitor_disable'] == true) echo "checked=\"checked\""; ?> onclick="monitor_change()" />
+ <strong><?=gettext("Disable Gateway Monitoring"); ?></strong><br />
+ <?=gettext("This will consider this gateway as always being up"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Monitor IP"); ?></td>
+ <td width="78%" class="vtable">
+ <?php
+ if ($pconfig['gateway'] == $pconfig['monitor']) {
+ $monitor = "";
+ } else {
+ $monitor = htmlspecialchars($pconfig['monitor']);
+ }
+ ?>
+ <input name="monitor" type="text" id="monitor" value="<?php echo htmlspecialchars($monitor); ?>" size="28" />
+ <strong><?=gettext("Alternative monitor IP"); ?></strong> <br />
+ <?=gettext("Enter an alternative address here to be used to monitor the link. This is used for the " .
+ "quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond " .
+ "to ICMP echo requests (pings)"); ?>.
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Mark Gateway as Down"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="force_down" type="checkbox" id="force_down" value="yes" <?php if ($pconfig['force_down'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Mark Gateway as Down"); ?></strong><br />
+ <?=gettext("This will force this gateway to be considered Down"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced");?></td>
+ <td width="78%" class="vtable">
+ <?php $showbutton = (!empty($pconfig['latencylow']) || !empty($pconfig['latencyhigh']) || !empty($pconfig['losslow']) || !empty($pconfig['losshigh']) || (isset($pconfig['weight']) && $pconfig['weight'] > 1) || (isset($pconfig['interval']) && ($pconfig['interval'] > $apinger_default['interval'])) || (isset($pconfig['down']) && !($pconfig['down'] == $apinger_default['down']))); ?>
+ <div id="showadvgatewaybox" <?php if ($showbutton) echo "style='display:none'"; ?>>
+ <input type="button" onclick="show_advanced_gateway()" value="Advanced" /><?=gettext(" - Show advanced option"); ?>
+ </div>
+ <div id="showgatewayadv" <?php if (!$showbutton) echo "style='display:none'"; ?>>
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="advanced options">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Weight");?></td>
+ <td width="78%" class="vtable">
+ <select name='weight' class='formfldselect' id='weight'>
+ <?php
+ for ($i = 1; $i < 6; $i++) {
+ $selected = "";
+ if ($pconfig['weight'] == $i) {
+ $selected = "selected='selected'";
+ }
+ echo "<option value='{$i}' {$selected} >{$i}</option>";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("Weight for this gateway when used in a Gateway Group.");?> <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Latency thresholds");?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("From");?>
+ <input name="latencylow" type="text" class="formfld unknown" id="latencylow" size="2"
+ value="<?=htmlspecialchars($pconfig['latencylow']);?>" />
+ <?=gettext("To");?>
+ <input name="latencyhigh" type="text" class="formfld unknown" id="latencyhigh" size="2"
+ value="<?=htmlspecialchars($pconfig['latencyhigh']);?>" />
+ <br /><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for latency in milliseconds. Default is %d/%d.", $apinger_default['latencylow'], $apinger_default['latencyhigh']));?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Packet Loss thresholds");?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("From");?>
+ <input name="losslow" type="text" class="formfld unknown" id="losslow" size="2"
+ value="<?=htmlspecialchars($pconfig['losslow']);?>" />
+ <?=gettext("To");?>
+ <input name="losshigh" type="text" class="formfld unknown" id="losshigh" size="2"
+ value="<?=htmlspecialchars($pconfig['losshigh']);?>" />
+ <br /><span class="vexpl"><?=gettext(sprintf("Low and high thresholds for packet loss in %%. Default is %d/%d.", $apinger_default['losslow'], $apinger_default['losshigh']));?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Probe Interval");?></td>
+ <td width="78%" class="vtable">
+ <input name="interval" type="text" class="formfld unknown" id="interval" size="2"
+ value="<?=htmlspecialchars($pconfig['interval']);?>" onchange="interval_change(this)" />
+ <br />
+ <span class="vexpl">
+ <?=gettext(sprintf("How often that an ICMP probe will be sent in seconds. Default is %d.", $apinger_default['interval']));?><br /><br />
+ <?=gettext("NOTE: The quality graph is averaged over seconds, not intervals, so as the probe interval is increased the accuracy of the quality graph is decreased.");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Down");?></td>
+ <td width="78%" class="vtable">
+ <input name="down" type="text" class="formfld unknown" id="down" size="2"
+ value="<?=htmlspecialchars($pconfig['down']);?>" />
+ <br /><span class="vexpl"><?=gettext(sprintf("The number of seconds of failed probes before the alarm will fire. Default is %d.", $apinger_default['down']));?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Average Delay Replies Qty");?></td>
+ <td width="78%" class="vtable">
+ <input name="avg_delay_samples" type="text" class="formfld unknown" id="avg_delay_samples" size="2"
+ value="<?=htmlspecialchars($pconfig['avg_delay_samples']);?>" onchange="samples_change(document.iform.avg_delay_samples_calculated, this)" />
+ <input name="avg_delay_samples_calculated" type="checkbox" id="avg_delay_samples_calculated" value="yes" <?php if ($pconfig['avg_delay_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_delay_samples)" />
+ <?=gettext("Use calculated value."); ?>
+ <br /><span class="vexpl"><?=gettext(sprintf("How many replies should be used to compute average delay for controlling \"delay\" alarms? Default is %d.", $apinger_default['avg_delay_samples']));?><br /><br /></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Average Packet Loss Probes Qty");?></td>
+ <td width="78%" class="vtable">
+ <input name="avg_loss_samples" type="text" class="formfld unknown" id="avg_loss_samples" size="2"
+ value="<?=htmlspecialchars($pconfig['avg_loss_samples']);?>" onchange="samples_change(document.iform.avg_loss_samples_calculated, this)" />
+ <input name="avg_loss_samples_calculated" type="checkbox" id="avg_loss_samples_calculated" value="yes" <?php if ($pconfig['avg_loss_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_loss_samples)" />
+ <?=gettext("Use calculated value."); ?>
+ <br /><span class="vexpl"><?=gettext(sprintf("How many probes should be useds to compute average packet loss? Default is %d.", $apinger_default['avg_loss_samples']));?><br /><br /></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Lost Probe Delay");?></td>
+ <td width="78%" class="vtable">
+ <input name="avg_loss_delay_samples" type="text" class="formfld unknown" id="avg_loss_delay_samples" size="2"
+ value="<?=htmlspecialchars($pconfig['avg_loss_delay_samples']);?>" onchange="samples_change(document.iform.avg_loss_delay_samples_calculated, this)" />
+ <input name="avg_loss_delay_samples_calculated" type="checkbox" id="avg_loss_delay_samples_calculated" value="yes" <?php if ($pconfig['avg_loss_delay_samples_calculated'] == true) echo "checked=\"checked\""; ?> onclick="calculated_change(this, document.iform.avg_loss_delay_samples)" />
+ <?=gettext("Use calculated value."); ?>
+ <br /><span class="vexpl"><?=gettext(sprintf("The delay (in qty of probe samples) after which loss is computed. Without this, delays longer than the probe interval would be treated as packet loss. Default is %d.", $apinger_default['avg_loss_delay_samples']));?><br /><br /></span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <?= gettext("The probe interval must be less than the down time, otherwise the gateway will seem to go down then come up again at the next probe."); ?><br /><br />
+ <?= gettext("The down time defines the length of time before the gateway is marked as down, but the accuracy is controlled by the probe interval. For example, if your down time is 40 seconds but on a 30 second probe interval, only one probe would have to fail before the gateway is marked down at the 40 second mark. By default, the gateway is considered down after 10 seconds, and the probe interval is 1 second, so 10 probes would have to fail before the gateway is marked down."); ?><br />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change()" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_gateways[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+monitor_change();
+calculate_state_change();
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/system_groupmanager.php b/src/usr/local/www/system_groupmanager.php
new file mode 100644
index 0000000..17b0f73
--- /dev/null
+++ b/src/usr/local/www/system_groupmanager.php
@@ -0,0 +1,607 @@
+<?php
+/*
+ $Id: system_groupmanager.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ All rights reserved.
+
+ Copyright (C) 2005 Paul Taylor <paultaylor@winn-dixie.com>.
+ All rights reserved.
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-groupmanager
+##|*NAME=System: Group manager page
+##|*DESCR=Allow access to the 'System: Group manager' page.
+##|*MATCH=system_groupmanager.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pgtitle = array(gettext("System"), gettext("Group manager"));
+
+if (!is_array($config['system']['group'])) {
+ $config['system']['group'] = array();
+}
+
+$a_group = &$config['system']['group'];
+
+unset($id);
+if (isset($_POST['groupid']) && is_numericint($_POST['groupid'])) {
+ $id = $_POST['groupid'];
+}
+
+$act = (isset($_POST['act']) ? $_POST['act'] : '');
+
+if ($act == "delgroup") {
+
+ if (!isset($id) || !isset($_POST['groupname']) || !isset($a_group[$id]) || ($_POST['groupname'] != $a_group[$id]['name'])) {
+ pfSenseHeader("system_groupmanager.php");
+ exit;
+ }
+
+ conf_mount_rw();
+ local_group_del($a_group[$id]);
+ conf_mount_ro();
+ $groupdeleted = $a_group[$id]['name'];
+ unset($a_group[$id]);
+ write_config();
+ $savemsg = gettext("Group") . " {$groupdeleted} " .
+ gettext("successfully deleted") . "<br />";
+}
+
+if ($act == "delpriv") {
+
+ if (!isset($id) || !isset($a_group[$id])) {
+ pfSenseHeader("system_groupmanager.php");
+ exit;
+ }
+
+ $privdeleted = $priv_list[$a_group[$id]['priv'][$_POST['privid']]]['name'];
+ unset($a_group[$id]['priv'][$_POST['privid']]);
+
+ if (is_array($a_group[$id]['member'])) {
+ foreach ($a_group[$id]['member'] as $uid) {
+ $user = getUserEntryByUID($uid);
+ if ($user) {
+ local_user_set($user);
+ }
+ }
+ }
+
+ write_config();
+ $act = "edit";
+ $savemsg = gettext("Privilege") . " {$privdeleted} " .
+ gettext("successfully deleted") . "<br />";
+}
+
+if ($act == "edit") {
+ if (isset($id) && isset($a_group[$id])) {
+ $pconfig['name'] = $a_group[$id]['name'];
+ $pconfig['gid'] = $a_group[$id]['gid'];
+ $pconfig['gtype'] = $a_group[$id]['scope'];
+ $pconfig['description'] = $a_group[$id]['description'];
+ $pconfig['members'] = $a_group[$id]['member'];
+ $pconfig['priv'] = $a_group[$id]['priv'];
+ }
+}
+
+if (isset($_POST['dellall_x'])) {
+
+ $del_groups = $_POST['delete_check'];
+
+ if (!empty($del_groups)) {
+ foreach ($del_groups as $groupid) {
+ if (isset($a_group[$groupid]) && $a_group[$groupid]['scope'] != "system") {
+ conf_mount_rw();
+ local_group_del($a_group[$groupid]);
+ conf_mount_ro();
+ unset($a_group[$groupid]);
+ }
+ }
+ $savemsg = gettext("Selected groups removed successfully!");
+ write_config($savemsg);
+ }
+}
+
+if (isset($_POST['save'])) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "groupname");
+ $reqdfieldsn = array(gettext("Group Name"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_ ]/", $_POST['groupname'])) {
+ $input_errors[] = gettext("The group name contains invalid characters.");
+ }
+
+ if (strlen($_POST['groupname']) > 16) {
+ $input_errors[] = gettext("The group name is longer than 16 characters.");
+ }
+
+ if (!$input_errors && !(isset($id) && $a_group[$id])) {
+ /* make sure there are no dupes */
+ foreach ($a_group as $group) {
+ if ($group['name'] == $_POST['groupname']) {
+ $input_errors[] = gettext("Another entry with the same group name already exists.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $group = array();
+ if (isset($id) && $a_group[$id]) {
+ $group = $a_group[$id];
+ }
+
+ $group['name'] = $_POST['groupname'];
+ $group['description'] = $_POST['description'];
+
+ if (empty($_POST['members'])) {
+ unset($group['member']);
+ } else if ($group['gid'] != 1998) { // all group
+ $group['member'] = $_POST['members'];
+ }
+
+ if (isset($id) && $a_group[$id]) {
+ $a_group[$id] = $group;
+ } else {
+ $group['gid'] = $config['system']['nextgid']++;
+ $a_group[] = $group;
+ }
+
+ conf_mount_rw();
+ local_group_set($group);
+ conf_mount_ro();
+
+ /* Refresh users in this group since their privileges may have changed. */
+ if (is_array($group['member'])) {
+ $a_user = &$config['system']['user'];
+ foreach ($a_user as & $user) {
+ if (in_array($user['uid'], $group['member'])) {
+ local_user_set($user);
+ }
+ }
+ }
+
+ write_config();
+
+ header("Location: system_groupmanager.php");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+
+function setall_selected(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ selbox.options[index].selected = true;
+ }
+}
+
+function delete_empty(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ if (selbox.options[index].value == '') {
+ selbox.remove(index);
+ }
+ }
+}
+
+function clear_selected(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ selbox.options[index].selected = false;
+ }
+}
+
+function remove_selected(id) {
+ selbox = document.getElementById(id);
+ index = selbox.options.length - 1;
+ for (; index >= 0; index--) {
+ if (selbox.options[index].selected) {
+ selbox.remove(index);
+ }
+ }
+}
+
+function copy_selected(srcid, dstid) {
+ src_selbox = document.getElementById(srcid);
+ dst_selbox = document.getElementById(dstid);
+ count = dst_selbox.options.length;
+ for (index = count - 1; index >= 0; index--) {
+ if (dst_selbox.options[index].value == '') {
+ dst_selbox.remove(index);
+ }
+ }
+ count = src_selbox.options.length;
+ for (index = 0; index < count; index++) {
+ if (src_selbox.options[index].selected) {
+ option = document.createElement('option');
+ option.text = src_selbox.options[index].text;
+ option.value = src_selbox.options[index].value;
+ dst_selbox.add(option, null);
+ }
+ }
+}
+
+function move_selected(srcid, dstid) {
+ copy_selected(srcid, dstid);
+ remove_selected(srcid);
+}
+
+function presubmit() {
+ delete_empty('members');
+ delete_empty('notmembers');
+ clear_selected('notmembers');
+ setall_selected('members');
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="group manager">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), true, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+
+<?php
+ if ($act == "new" || $act == "edit"):
+?>
+ <form action="system_groupmanager.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
+ <input type="hidden" id="act" name="act" value="" />
+ <input type="hidden" id="groupid" name="groupid" value="<?=(isset($id) ? $id : '');?>" />
+ <input type="hidden" id="privid" name="privid" value="" />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+<?php
+ $ro = "";
+ if ($pconfig['gtype'] == "system") {
+ $ro = "readonly=\"readonly\"";
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Defined by");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=strtoupper($pconfig['gtype']);?></strong>
+ <input name="gtype" type="hidden" value="<?=htmlspecialchars($pconfig['gtype'])?>"/>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Group name");?></td>
+ <td width="78%" class="vtable">
+ <input name="groupname" type="text" class="formfld group" id="groupname" size="20" maxlength="16" value="<?=htmlspecialchars($pconfig['name']);?>" <?=$ro;?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" class="vtable">
+ <input name="description" type="text" class="formfld unknown" id="description" size="20" value="<?=htmlspecialchars($pconfig['description']);?>" />
+ <br />
+ <?=gettext("Group description, for your own information only");?>
+ </td>
+ </tr>
+<?php
+ if ($pconfig['gid'] != 1998): // all users group
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Group Memberships");?></td>
+ <td width="78%" class="vtable" align="center">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="membership">
+ <tr>
+ <td align="center" width="50%">
+ <strong><?=gettext("Not Members");?></strong><br />
+ <br />
+ <select size="10" style="width: 75%" name="notmembers[]" class="formselect" id="notmembers" onchange="clear_selected('members')" multiple="multiple">
+<?php
+ $rowIndex = 0;
+ foreach ($config['system']['user'] as $user):
+ if (is_array($pconfig['members']) && in_array($user['uid'], $pconfig['members'])) {
+ continue;
+ }
+ $rowIndex++;
+?>
+ <option value="<?=$user['uid'];?>" <?=$selected;?>>
+ <?=htmlspecialchars($user['name']);?>
+ </option>
+<?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ <br />
+ </td>
+ <td>
+ <br />
+ <a href="javascript:move_selected('notmembers', 'members')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_right.gif" title="<?=gettext("Add Members");?>" alt="<?=gettext("Add Members");?>" width="17" height="17" border="0" />
+ </a>
+ <br /><br />
+ <a href="javascript:move_selected('members', 'notmembers')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_left.gif" title="<?=gettext("Remove Members");?>" alt="<?=gettext("Remove Members");?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ <td align="center" width="50%">
+ <strong><?=gettext("Members");?></strong><br />
+ <br />
+ <select size="10" style="width: 75%" name="members[]" class="formselect" id="members" onchange="clear_selected('notmembers')" multiple="multiple">
+<?php
+ $rowIndex = 0;
+ foreach ($config['system']['user'] as $user):
+ if (!(is_array($pconfig['members']) && in_array($user['uid'], $pconfig['members']))) {
+ continue;
+ }
+ $rowIndex++;
+?>
+ <option value="<?=$user['uid'];?>">
+ <?=htmlspecialchars($user['name']);?>
+ </option>
+<?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ <br />
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
+ </td>
+ </tr>
+<?php
+ endif;
+ if ($act != "new"):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Assigned Privileges");?></td>
+ <td width="78%" class="vtable">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="privileges">
+ <tr>
+ <td width="40%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="60%" class="listhdrr"><?=gettext("Description");?></td>
+ <td class="list"></td>
+ </tr>
+<?php
+ if (is_array($pconfig['priv'])):
+ $i = 0;
+ foreach ($pconfig['priv'] as $priv):
+?>
+ <tr>
+ <td class="listr">
+ <?=htmlspecialchars($priv_list[$priv]['name']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($priv_list[$priv]['descr']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <input type="image" name="delpriv[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
+ onclick="document.getElementById('privid').value='<?=$i;?>';
+ document.getElementById('groupid').value='<?=$id;?>';
+ document.getElementById('act').value='<?php echo "delpriv";?>';
+ return confirm('<?=gettext("Do you really want to delete this privilege?");?>');"
+ title="<?=gettext("delete privilege");?>" />
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="2"></td>
+ <td class="list">
+ <a href="system_groupmanager_addprivs.php?groupid=<?=htmlspecialchars($id)?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
+ </a>
+
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+?>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='/system_groupmanager.php'" />
+ <?php if (isset($id) && $a_group[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <input name="gid" type="hidden" value="<?=htmlspecialchars($pconfig['gid']);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php
+ else:
+?>
+ <form action="system_groupmanager.php" method="post" name="iform2" id="iform2">
+ <input type="hidden" id="act" name="act" value="" />
+ <input type="hidden" id="groupid" name="groupid" value="<?=(isset($id) ? $id : '');?>" />
+ <input type="hidden" id="groupname" name="groupname" value="" />
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
+ <thead>
+ <tr>
+ <th width="5%" class="list">&nbsp;</th>
+ <th width="25%" class="listhdrr"><?=gettext("Group name");?></th>
+ <th width="25%" class="listhdrr"><?=gettext("Description");?></th>
+ <th width="30%" class="listhdrr"><?=gettext("Member Count");?></th>
+ <th width="10%" class="list"></th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <input type="image" name="addcert" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif"
+ onclick="document.getElementById('act').value='<?php echo "new";?>';"
+ title="<?=gettext("add group");?>" />
+ <input type="image" src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" name="dellall" title="<?=gettext('Delete selected groups')?>" onClick="return confirm('<?=gettext("Do you really want to delete selected groups?");?>')" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p>
+ <?=gettext("Additional webConfigurator groups can be added here.
+ Group permissions can be assigned which are inherited by users who are members of the group.
+ An icon that appears grey indicates that it is a system defined object.
+ Some system object properties can be modified but they cannot be deleted.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_group as $group):
+ if ($group['scope'] == "system") {
+ $grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group-grey.png";
+ } else {
+ $grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group.png";
+ }
+ $groupcount = count($group['member']);
+ if ($group["name"] == "all") {
+ $groupcount = count($config['system']['user']);
+ }
+?>
+ <tr ondblclick="document.getElementById('act').value='<?php echo "edit";?>';
+ document.getElementById('groupid').value='<?=$i;?>';
+ document.iform2.submit();" id="fr<?=$i?>">
+ <td class="list" id="frd<?=$i?>">
+ <?php if ($group['scope'] != "system") : ?>
+ <input type="checkbox" id="frc<?=$i?>" onclick="fr_bgcolor(<?=$i?>)" name="delete_check[]" value="<?=$i?>" />
+ <?php endif; ?>
+ </td>
+ <td class="listlr" id="frd<?=$i?>" onclick="fr_toggle(<?=$i?>)">
+ <table border="0" cellpadding="0" cellspacing="0" summary="">
+ <tr>
+ <td align="left" valign="middle">
+ <img src="<?=$grpimg;?>" alt="<?=gettext("User");?>" title="<?=gettext("User");?>" border="0" height="16" width="16" />
+ </td>
+ <td align="left" valign="middle">
+ <?=htmlspecialchars($group['name']); ?>&nbsp;
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td class="listr" id="frd<?=$i?>" onclick="fr_toggle(<?=$i?>)">
+ <?=htmlspecialchars($group['description']);?>&nbsp;
+ </td>
+ <td class="listbg" onclick="fr_toggle(<?=$i?>)">
+ <?=$groupcount;?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <input type="image" name="editgroup[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
+ onclick="document.getElementById('groupid').value='<?=$i;?>';
+ document.getElementById('act').value='<?php echo "edit";?>';"
+ title="<?=gettext("edit group");?>" />
+ &nbsp;
+<?php
+ if ($group['scope'] != "system"):
+?>
+ <input type="image" name="delgroup[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
+ onclick="document.getElementById('groupid').value='<?=$i;?>';
+ document.getElementById('groupname').value='<?=$group['name'];?>';
+ document.getElementById('act').value='<?php echo "delgroup";?>';
+ return confirm('<?=gettext("Do you really want to delete this group?");?>');"
+ title="<?=gettext("delete group");?>" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ </tbody>
+ </table>
+ </form>
+<?php
+ endif;
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_groupmanager_addprivs.php b/src/usr/local/www/system_groupmanager_addprivs.php
new file mode 100644
index 0000000..830d025
--- /dev/null
+++ b/src/usr/local/www/system_groupmanager_addprivs.php
@@ -0,0 +1,255 @@
+<?php
+/* $Id$ */
+/*
+ system_groupmanager_addprivs.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-groupmanager-addprivs
+##|*NAME=System: Group Manager: Add Privileges page
+##|*DESCR=Allow access to the 'System: Group Manager: Add Privileges' page.
+##|*MATCH=system_groupmanager_addprivs.php*
+##|-PRIV
+
+function cpusercmp($a, $b) {
+ return strcasecmp($a['name'], $b['name']);
+}
+
+function admin_groups_sort() {
+ global $config;
+
+ if (!is_array($config['system']['group'])) {
+ return;
+ }
+
+ usort($config['system']['group'], "cpusercmp");
+}
+
+require("guiconfig.inc");
+
+$pgtitle = array(gettext("System"), gettext("Group manager"), gettext("Add privileges"));
+
+if (is_numericint($_GET['groupid'])) {
+ $groupid = $_GET['groupid'];
+}
+if (isset($_POST['groupid']) && is_numericint($_POST['groupid'])) {
+ $groupid = $_POST['groupid'];
+}
+
+$a_group = & $config['system']['group'][$groupid];
+
+if (!is_array($a_group)) {
+ pfSenseHeader("system_groupmanager.php?id={$groupid}");
+ exit;
+}
+
+if (!is_array($a_group['priv'])) {
+ $a_group['priv'] = array();
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "sysprivs");
+ $reqdfieldsn = array(gettext("Selected privileges"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+
+ if (!is_array($pconfig['sysprivs'])) {
+ $pconfig['sysprivs'] = array();
+ }
+
+ if (!count($a_group['priv'])) {
+ $a_group['priv'] = $pconfig['sysprivs'];
+ } else {
+ $a_group['priv'] = array_merge($a_group['priv'], $pconfig['sysprivs']);
+ }
+
+ if (is_array($a_group['member'])) {
+ foreach ($a_group['member'] as $uid) {
+ $user = getUserEntryByUID($uid);
+ if ($user) {
+ local_user_set($user);
+ }
+ }
+ }
+
+ admin_groups_sort();
+
+ $retval = write_config();
+ $savemsg = get_std_save_message($retval);
+
+ pfSenseHeader("system_groupmanager.php?act=edit&amp;id={$groupid}");
+ exit;
+ }
+}
+
+/* if ajax is calling, give them an update message */
+if (isAjax()) {
+ print_info_box_np($savemsg);
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+<?php
+
+if (is_array($priv_list)) {
+ $id = 0;
+
+ $jdescs = "var descs = new Array();\n";
+ foreach ($priv_list as $pname => $pdata) {
+ if (in_array($pname, $a_group['priv'])) {
+ continue;
+ }
+ $desc = addslashes($pdata['descr']);
+ $jdescs .= "descs[{$id}] = '{$desc}';\n";
+ $id++;
+ }
+
+ echo $jdescs;
+}
+
+?>
+
+function update_description() {
+ var index = document.iform.sysprivs.selectedIndex;
+ document.getElementById("pdesc").innerHTML = descs[index];
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="group manager add privileges">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), true, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <form action="system_groupmanager_addprivs.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("System Privileges");?></td>
+ <td width="78%" class="vtable">
+ <table>
+ <tr>
+ <td>
+ <select name="sysprivs[]" id="sysprivs" class="formselect" onchange="update_description();" multiple="multiple" size="35">
+ <?php
+ foreach ($priv_list as $pname => $pdata):
+ if (in_array($pname, $a_group['priv'])) {
+ continue;
+ }
+ ?>
+ <option value="<?=$pname;?>"><?=$pdata['name'];?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
+ </td>
+ <td>
+ <a href='#'onClick="selectAll();">Select all</a>
+ <script type="text/javascript">
+ //<![CDATA[
+ function selectAll() {
+ var options = jQuery('select#sysprivs option');
+ var len = options.length;
+ for (var i = 0; i < len; i++) {
+ options[i].selected = true;
+ }
+ }
+ selectAll();
+ //]]>
+ </script>
+ <br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr height="60">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" valign="top" class="vtable" id="pdesc">
+ <em><?=gettext("Select a privilege from the list above for a description");?></em>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()" />
+ <?php if (isset($groupid)): ?>
+ <input name="groupid" type="hidden" value="<?=htmlspecialchars($groupid);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_hasync.php b/src/usr/local/www/system_hasync.php
new file mode 100755
index 0000000..8ebde1f
--- /dev/null
+++ b/src/usr/local/www/system_hasync.php
@@ -0,0 +1,365 @@
+<?php
+/* $Id$ */
+/*
+ system_hasync.php
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2012 Darren Embry <dse@webonastick.com>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: system
+*/
+
+##|+PRIV
+##|*IDENT=page-system-hasync
+##|*NAME=System: High Availability Sync
+##|*DESCR=Allow access to the 'System: High Availability Sync' page.
+##|*MATCH=system_hasync.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_hasync.php');
+}
+
+if (!is_array($config['hasync'])) {
+ $config['hasync'] = array();
+}
+
+$a_hasync = &$config['hasync'];
+
+$checkbox_names = array(
+ 'pfsyncenabled',
+ 'synchronizeusers',
+ 'synchronizeauthservers',
+ 'synchronizecerts',
+ 'synchronizerules',
+ 'synchronizeschedules',
+ 'synchronizealiases',
+ 'synchronizenat',
+ 'synchronizeipsec',
+ 'synchronizeopenvpn',
+ 'synchronizedhcpd',
+ 'synchronizewol',
+ 'synchronizestaticroutes',
+ 'synchronizelb',
+ 'synchronizevirtualip',
+ 'synchronizetrafficshaper',
+ 'synchronizetrafficshaperlimiter',
+ 'synchronizetrafficshaperlayer7',
+ 'synchronizednsforwarder',
+ 'synchronizecaptiveportal');
+
+if ($_POST) {
+ $pconfig = $_POST;
+ foreach ($checkbox_names as $name) {
+ $a_hasync[$name] = $pconfig[$name] ? $pconfig[$name] : false;
+ }
+ $a_hasync['pfsyncpeerip'] = $pconfig['pfsyncpeerip'];
+ $a_hasync['pfsyncinterface'] = $pconfig['pfsyncinterface'];
+ $a_hasync['synchronizetoip'] = $pconfig['synchronizetoip'];
+ $a_hasync['username'] = $pconfig['username'];
+ $a_hasync['password'] = $pconfig['passwordfld'];
+ write_config("Updated High Availability Sync configuration");
+ interfaces_sync_setup();
+ header("Location: system_hasync.php");
+ exit();
+}
+
+foreach ($checkbox_names as $name) {
+ $pconfig[$name] = $a_hasync[$name];
+}
+$pconfig['pfsyncpeerip'] = $a_hasync['pfsyncpeerip'];
+$pconfig['pfsyncinterface'] = $a_hasync['pfsyncinterface'];
+$pconfig['synchronizetoip'] = $a_hasync['synchronizetoip'];
+$pconfig['username'] = $a_hasync['username'];
+$pconfig['passwordfld'] = $a_hasync['password'];
+
+$ifaces = get_configured_interface_with_descr();
+$ifaces["lo0"] = "loopback";
+
+$pgtitle = array(gettext("System"), gettext("High Availability Sync"));
+$shortcut_section = "carp";
+include("head.inc");
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<form action="system_hasync.php" method="post" name="iform" id="iform">
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="high availability sync">
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" class="listtopic">State Synchronization Settings (pfsync)</td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize States</td>
+ <td class="vtable">
+ <input id='pfsyncenabled' type='checkbox' name='pfsyncenabled' value='on' <?php if ($pconfig['pfsyncenabled'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ pfsync transfers state insertion, update, and deletion messages between firewalls. Each firewall sends these messages out via multicast on a specified interface, using the PFSYNC protocol (IP Protocol 240). It also listens on that interface for similar messages from other firewalls, and imports them into the local state table.<p>This setting should be enabled on all members of a failover group.</p><p>NOTE: Clicking save will force a configuration sync if it is enabled! (see Configuration Synchronization Settings below)</p>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Interface</td>
+ <td class="vtable">
+ <select id='pfsyncinterface' name="pfsyncinterface">
+ <?php foreach ($ifaces as $ifname => $iface) { ?>
+ <?php $selected = ($pconfig['pfsyncinterface'] === $ifname) ? 'selected="selected"' : ''; ?>
+ <option value="<?= htmlentities($ifname); ?>" <?= $selected ?>><?= htmlentities($iface); ?></option>
+ <?php } ?>
+ </select>
+ <br />
+ If Synchronize States is enabled, it will utilize this interface for communication.<br />
+ <b>NOTE:</b> We recommend setting this to a interface other than LAN! A dedicated interface works the best.<br />
+ <b>NOTE:</b> You must define a IP on each machine participating in this failover group.<br />
+ <b>NOTE:</b> You must have an IP assigned to the interface on any participating sync nodes.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">pfsync Synchronize Peer IP</td>
+ <td class="vtable">
+ <input id='pfsyncpeerip' name='pfsyncpeerip' class='formfld unknown' value='<?= htmlentities($pconfig['pfsyncpeerip'], ENT_QUOTES | ENT_HTML401); ?>' />
+ <br />
+ Setting this option will force pfsync to synchronize its state table to this IP address. The default is directed multicast.
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="2" class="listtopic">Configuration Synchronization Settings (XMLRPC Sync)</td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Config to IP</td>
+ <td class="vtable">
+ <input id='synchronizetoip' name='synchronizetoip' class='formfld unknown' value='<?= htmlentities($pconfig['synchronizetoip'], ENT_QUOTES | ENT_HTML401); ?>' />
+ <br />
+ Enter the IP address of the firewall to which the selected configuration sections should be synchronized.<br />
+ <br />
+ NOTE: XMLRPC sync is currently only supported over connections using the same protocol and port as this system - make sure the remote system's port and protocol are set accordingly!<br />
+ <br />
+ NOTE: <b>Do not use the Synchronize Config to IP and password option on backup cluster members!</b>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Remote System Username</td>
+ <td class="vtable">
+ <input id='username' name='username' class='formfld unknown' value='<?= htmlentities($pconfig['username'], ENT_QUOTES | ENT_HTML401); ?>' />
+ <br />
+ Enter the webConfigurator username of the system entered above for synchronizing your configuration.<br />
+ <br />
+ NOTE: <b>Do not use the Synchronize Config to IP and username option on backup cluster members!</b>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Remote System Password</td>
+ <td class="vtable">
+ <input id='passwordfld' type='password' name='passwordfld' class='formfld pwd' value='<?= htmlentities($pconfig['passwordfld'], ENT_QUOTES | ENT_HTML401); ?>' />
+ <br />
+ Enter the webConfigurator password of the system entered above for synchronizing your configuration.<br />
+ <br />
+ NOTE: <b>Do not use the Synchronize Config to IP and password option on backup cluster members!</b>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Users and Groups</td>
+ <td class="vtable">
+ <input id='synchronizeusers' type='checkbox' name='synchronizeusers' value='on' <?php if ($pconfig['synchronizeusers'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the users and groups over to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Auth Servers</td>
+ <td class="vtable">
+ <input id='synchronizeauthservers' type='checkbox' name='synchronizeauthservers' value='on' <?php if ($pconfig['synchronizeauthservers'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the authentication servers (e.g. LDAP, RADIUS) over to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Certificates</td>
+ <td class="vtable">
+ <input id='synchronizecerts' type='checkbox' name='synchronizecerts' value='on' <?php if ($pconfig['synchronizecerts'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the Certificate Authorities, Certificates, and Certificate Revocation Lists over to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize rules</td>
+ <td class="vtable">
+ <input id='synchronizerules' type='checkbox' name='synchronizerules' value='on' <?php if ($pconfig['synchronizerules'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the firewall rules to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Firewall Schedules</td>
+ <td class="vtable">
+ <input id='synchronizeschedules' type='checkbox' name='synchronizeschedules' value='on' <?php if ($pconfig['synchronizeschedules'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the firewall schedules to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize aliases</td>
+ <td class="vtable">
+ <input id='synchronizealiases' type='checkbox' name='synchronizealiases' value='on' <?php if ($pconfig['synchronizealiases'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the aliases over to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize NAT</td>
+ <td class="vtable">
+ <input id='synchronizenat' type='checkbox' name='synchronizenat' value='on' <?php if ($pconfig['synchronizenat'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the NAT rules over to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize IPsec</td>
+ <td class="vtable">
+ <input id='synchronizeipsec' type='checkbox' name='synchronizeipsec' value='on' <?php if ($pconfig['synchronizeipsec'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the IPsec configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize OpenVPN</td>
+ <td class="vtable">
+ <input id='synchronizeopenvpn' type='checkbox' name='synchronizeopenvpn' value='on' <?php if ($pconfig['synchronizeopenvpn'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the OpenVPN configuration to the other HA host when changes are made. Using this option implies "Synchronize Certificates" as they are required for OpenVPN.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize DHCPD</td>
+ <td class="vtable">
+ <input id='synchronizedhcpd' type='checkbox' name='synchronizedhcpd' value='on' <?php if ($pconfig['synchronizedhcpd'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the DHCP Server settings over to the other HA host when changes are made. This only applies to DHCP for IPv4.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Wake on LAN</td>
+ <td class="vtable">
+ <input id='synchronizewol' type='checkbox' name='synchronizewol' value='on' <?php if ($pconfig['synchronizewol'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the WoL configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Static Routes</td>
+ <td class="vtable">
+ <input id='synchronizestaticroutes' type='checkbox' name='synchronizestaticroutes' value='on' <?php if ($pconfig['synchronizestaticroutes'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the Static Route configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Load Balancer</td>
+ <td class="vtable">
+ <input id='synchronizelb' type='checkbox' name='synchronizelb' value='on' <?php if ($pconfig['synchronizelb'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the Load Balancer configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Virtual IPs</td>
+ <td class="vtable">
+ <input id='synchronizevirtualip' type='checkbox' name='synchronizevirtualip' value='on' <?php if ($pconfig['synchronizevirtualip'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the CARP Virtual IPs to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize traffic shaper(queues)</td>
+ <td class="vtable">
+ <input id='synchronizetrafficshaper' type='checkbox' name='synchronizetrafficshaper' value='on' <?php if ($pconfig['synchronizetrafficshaper'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the traffic shaper configuration for queues to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize traffic shaper(limiter)</td>
+ <td class="vtable">
+ <input id='synchronizetrafficshaperlimiter' type='checkbox' name='synchronizetrafficshaperlimiter' value='on' <?php if ($pconfig['synchronizetrafficshaperlimiter'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the traffic shaper configuration for limiters to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize traffic shaper(layer7)</td>
+ <td class="vtable">
+ <input id='synchronizetrafficshaperlayer7' type='checkbox' name='synchronizetrafficshaperlayer7' value='on' <?php if ($pconfig['synchronizetrafficshaperlayer7'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the traffic shaper configuration for layer7 to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize DNS Forwarder / Resolver</td>
+ <td class="vtable">
+ <input id='synchronizednsforwarder' type='checkbox' name='synchronizednsforwarder' value='on' <?php if ($pconfig['synchronizednsforwarder'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the DNS Forwarder and DNS Resolver configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr valign="top">
+ <td width="22%" class="vncell">Synchronize Captive Portal</td>
+ <td class="vtable">
+ <input id='synchronizecaptiveportal' type='checkbox' name='synchronizecaptiveportal' value='on' <?php if ($pconfig['synchronizecaptiveportal'] === "on") echo "checked='checked'"; ?> />
+ <br />
+ When this option is enabled, this system will automatically sync the Captive Portal configuration to the other HA host when changes are made.
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="id" type="hidden" value="0" />
+ <input name="Submit" type="submit" class="formbtn" value="Save" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_routes.php b/src/usr/local/www/system_routes.php
new file mode 100644
index 0000000..9443d40
--- /dev/null
+++ b/src/usr/local/www/system_routes.php
@@ -0,0 +1,407 @@
+<?php
+/* $Id$ */
+/*
+ system_routes.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-staticroutes
+##|*NAME=System: Static Routes page
+##|*DESCR=Allow access to the 'System: Static Routes' page.
+##|*MATCH=system_routes.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+
+if (!is_array($config['staticroutes']['route'])) {
+ $config['staticroutes']['route'] = array();
+}
+
+$a_routes = &$config['staticroutes']['route'];
+$a_gateways = return_gateways_array(true, true, true);
+$changedesc_prefix = gettext("Static Routes") . ": ";
+unset($input_errors);
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+
+ $retval = 0;
+
+ if (file_exists("{$g['tmp_path']}/.system_routes.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply"));
+ foreach ($toapplylist as $toapply) {
+ mwexec("{$toapply}");
+ }
+
+ @unlink("{$g['tmp_path']}/.system_routes.apply");
+ }
+
+ $retval = system_routing_configure();
+ $retval |= filter_configure();
+ /* reconfigure our gateway monitor */
+ setup_gateways_monitor();
+
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ clear_subsystem_dirty('staticroutes');
+ }
+ }
+}
+
+function delete_static_route($id) {
+ global $config, $a_routes, $changedesc_prefix;
+
+ if (!isset($a_routes[$id])) {
+ return;
+ }
+
+ $targets = array();
+ if (is_alias($a_routes[$id]['network'])) {
+ foreach (filter_expand_alias_array($a_routes[$id]['network']) as $tgt) {
+ if (is_ipaddrv4($tgt)) {
+ $tgt .= "/32";
+ } else if (is_ipaddrv6($tgt)) {
+ $tgt .= "/128";
+ }
+ if (!is_subnet($tgt)) {
+ continue;
+ }
+ $targets[] = $tgt;
+ }
+ } else {
+ $targets[] = $a_routes[$id]['network'];
+ }
+
+ foreach ($targets as $tgt) {
+ $family = (is_subnetv6($tgt) ? "-inet6" : "-inet");
+ mwexec("/sbin/route delete {$family} " . escapeshellarg($tgt));
+ }
+
+ unset($targets);
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_routes[$_GET['id']]) {
+ $changedesc = $changedesc_prefix . gettext("removed route to") . " " . $a_routes[$_GET['id']]['network'];
+ delete_static_route($_GET['id']);
+ unset($a_routes[$_GET['id']]);
+ write_config($changedesc);
+ header("Location: system_routes.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected routes */
+ if (is_array($_POST['route']) && count($_POST['route'])) {
+ $changedesc = $changedesc_prefix . gettext("removed route to");
+ foreach ($_POST['route'] as $routei) {
+ $changedesc .= " " . $a_routes[$routei]['network'];
+ delete_static_route($routei);
+ unset($a_routes[$routei]);
+ }
+ write_config($changedesc);
+ header("Location: system_routes.php");
+ exit;
+ }
+
+} else if ($_GET['act'] == "toggle") {
+ if ($a_routes[$_GET['id']]) {
+ $do_update_config = true;
+ if (isset($a_routes[$_GET['id']]['disabled'])) {
+ // Do not enable a route whose gateway is disabled
+ if (isset($a_gateways[$a_routes[$_GET['id']]['gateway']]['disabled'])) {
+ $do_update_config = false;
+ $input_errors[] = $changedesc_prefix . gettext("gateway is disabled, cannot enable route to") . " " . $a_routes[$_GET['id']]['network'];
+ } else {
+ unset($a_routes[$_GET['id']]['disabled']);
+ $changedesc = $changedesc_prefix . gettext("enabled route to") . " " . $a_routes[$_GET['id']]['network'];
+ }
+ } else {
+ delete_static_route($_GET['id']);
+ $a_routes[$_GET['id']]['disabled'] = true;
+ $changedesc = $changedesc_prefix . gettext("disabled route to") . " " . $a_routes[$_GET['id']]['network'];
+ }
+
+ if ($do_update_config) {
+ if (write_config($changedesc)) {
+ mark_subsystem_dirty('staticroutes');
+ }
+ header("Location: system_routes.php");
+ exit;
+ }
+ }
+} else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($movebtn);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ break;
+ }
+ }
+ /* move selected routes before this route */
+ if (isset($movebtn) && is_array($_POST['route']) && count($_POST['route'])) {
+ $a_routes_new = array();
+
+ /* copy all routes < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['route'])) {
+ $a_routes_new[] = $a_routes[$i];
+ }
+ }
+
+ /* copy all selected routes */
+ for ($i = 0; $i < count($a_routes); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['route'])) {
+ $a_routes_new[] = $a_routes[$i];
+ }
+ }
+
+ /* copy $movebtn route */
+ if ($movebtn < count($a_routes)) {
+ $a_routes_new[] = $a_routes[$movebtn];
+ }
+
+ /* copy all routes > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_routes); $i++) {
+ if (!in_array($i, $_POST['route'])) {
+ $a_routes_new[] = $a_routes[$i];
+ }
+ }
+ if (count($a_routes_new) > 0) {
+ $a_routes = $a_routes_new;
+ }
+
+ if (write_config()) {
+ mark_subsystem_dirty('staticroutes');
+ }
+ header("Location: system_routes.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Static Routes"));
+$shortcut_section = "routing";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="system_routes.php" method="post">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('staticroutes')): ?><p>
+<?php print_info_box_np(sprintf(gettext("The static route configuration has been changed.%sYou must apply the changes in order for them to take effect."), "<br />"));?><br /></p>
+<?php endif; ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system routes">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Gateways"), false, "system_gateways.php");
+ $tab_array[1] = array(gettext("Routes"), true, "system_routes.php");
+ $tab_array[2] = array(gettext("Groups"), false, "system_gateway_groups.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr id="frheader">
+ <td width="2%" class="list">&nbsp;</td>
+ <td width="2%" class="list">&nbsp;</td>
+ <td width="22%" class="listhdrr"><?=gettext("Network");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Gateway");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="29%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="10%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td><a href="system_routes_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $i = 0;
+ foreach ($a_routes as $route):
+ ?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <?php
+ $iconfn = "pass";
+ if (isset($route['disabled'])) {
+ $textss = "<span class=\"gray\">";
+ $textse = "</span>";
+ $iconfn .= "_d";
+ } else {
+ $textss = $textse = "";
+ }
+ ?>
+ <td class="listt">
+ <input type="checkbox" id="frc<?=$i;?>" name="route[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ </td>
+ <td class="listt" align="center">
+ <a href="?act=toggle&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+ </a>
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?=strtolower($route['network']);?><?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?php
+ echo htmlentities($a_gateways[$route['gateway']]['name']) . " - " . htmlentities($a_gateways[$route['gateway']]['gateway']);
+ ?>
+ <?=$textse;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
+ <?=$textss;?>
+ <?php
+ echo convert_friendly_interface_to_friendly_descr($a_gateways[$route['gateway']]['friendlyiface']) . " ";
+ ?>
+ <?=$textse;?>
+ </td>
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_routes_edit.php?id=<?=$i;?>';">
+ <?=$textss;?><?=htmlspecialchars($route['descr']);?>&nbsp;<?=$textse;?>
+ </td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="move">
+ <tr>
+ <td>
+ <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>"
+ src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ title="<?=gettext("move selected routes before this route");?>"
+ type="image" style="height:17;width:17;border:0" />
+ </td>
+ <td>
+ <a href="system_routes_edit.php?id=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit route");?>" alt="edit" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle">
+ <a href="system_routes.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this route?");?>')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete route");?>" alt="delete" />
+ </a>
+ </td>
+ <td>
+ <a href="system_routes_edit.php?dup=<?=$i;?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new route based on this one");?>" width="17" height="17" border="0" alt="duplicate" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="6"></td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17"
+ title="<?=gettext("move selected routes to end");?>" border="0" alt="move" />
+<?php
+ else:
+?>
+ <input name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ style="width:17;height:17;border:0" title="<?=gettext("move selected routes to end");?>" />
+<?php
+ endif;
+?>
+ </td>
+ <td>
+ <a href="system_routes_edit.php">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"
+ title="<?=gettext("add new route");?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
+ title="<?=gettext("delete selected routes");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ style="width:17;height:17" title="<?=gettext("delete selected routes");?>"
+ onclick="return confirm('<?=gettext("Do you really want to delete the selected routes?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<p><b><?=gettext("Note:");?></b> <?=gettext("Do not enter static routes for networks assigned on any interface of this firewall. Static routes are only used for networks reachable via a different router, and not reachable via your default gateway.");?></p>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_routes_edit.php b/src/usr/local/www/system_routes_edit.php
new file mode 100644
index 0000000..a64580b
--- /dev/null
+++ b/src/usr/local/www/system_routes_edit.php
@@ -0,0 +1,445 @@
+<?php
+/*
+ system_routes_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2010 Scott Ullrich
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: routing
+*/
+
+##|+PRIV
+##|*IDENT=page-system-staticroutes-editroute
+##|*NAME=System: Static Routes: Edit route page
+##|*DESCR=Allow access to the 'System: Static Routes: Edit route' page.
+##|*MATCH=system_routes_edit.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("filter.inc");
+require_once("util.inc");
+require_once("gwlb.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/system_routes.php');
+}
+
+if (!is_array($config['staticroutes']['route'])) {
+ $config['staticroutes']['route'] = array();
+}
+
+$a_routes = &$config['staticroutes']['route'];
+$a_gateways = return_gateways_array(true, true);
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $id = $_GET['dup'];
+}
+
+if (isset($id) && $a_routes[$id]) {
+ list($pconfig['network'], $pconfig['network_subnet']) =
+ explode('/', $a_routes[$id]['network']);
+ $pconfig['gateway'] = $a_routes[$id]['gateway'];
+ $pconfig['descr'] = $a_routes[$id]['descr'];
+ $pconfig['disabled'] = isset($a_routes[$id]['disabled']);
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($id);
+}
+
+if ($_POST) {
+
+ global $aliastable;
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "network network_subnet gateway");
+ $reqdfieldsn = explode(",",
+ gettext("Destination network") . "," .
+ gettext("Destination network bit count") . "," .
+ gettext("Gateway"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['network'] && !is_ipaddr($_POST['network']) && !is_alias($_POST['network']))) {
+ $input_errors[] = gettext("A valid IPv4 or IPv6 destination network must be specified.");
+ }
+ if (($_POST['network_subnet'] && !is_numeric($_POST['network_subnet']))) {
+ $input_errors[] = gettext("A valid destination network bit count must be specified.");
+ }
+ if (($_POST['gateway']) && is_ipaddr($_POST['network'])) {
+ if (!isset($a_gateways[$_POST['gateway']])) {
+ $input_errors[] = gettext("A valid gateway must be specified.");
+ } else if (isset($a_gateways[$_POST['gateway']]['disabled']) && !$_POST['disabled']) {
+ $input_errors[] = gettext("The gateway is disabled but the route is not. You must disable the route in order to choose a disabled gateway.");
+ } else {
+ // Note that the 3rd parameter "disabled" must be passed as explicitly true or false.
+ if (!validate_address_family($_POST['network'], $_POST['gateway'], $_POST['disabled'] ? true : false)) {
+ $input_errors[] = gettext("The gateway '{$a_gateways[$_POST['gateway']]['gateway']}' is a different Address Family than network '{$_POST['network']}'.");
+ }
+ }
+ }
+
+ /* check for overlaps */
+ $current_targets = get_staticroutes(true);
+ $new_targets = array();
+ if (is_ipaddrv6($_POST['network'])) {
+ $osn = gen_subnetv6($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
+ $new_targets[] = $osn;
+ }
+ if (is_ipaddrv4($_POST['network'])) {
+ if ($_POST['network_subnet'] > 32) {
+ $input_errors[] = gettext("A IPv4 subnet can not be over 32 bits.");
+ } else {
+ $osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
+ $new_targets[] = $osn;
+ }
+ } elseif (is_alias($_POST['network'])) {
+ $osn = $_POST['network'];
+ foreach (preg_split('/\s+/', $aliastable[$osn]) as $tgt) {
+ if (is_ipaddrv4($tgt)) {
+ $tgt .= "/32";
+ }
+ if (is_ipaddrv6($tgt)) {
+ $tgt .= "/128";
+ }
+ if (!is_subnet($tgt)) {
+ continue;
+ }
+ if (!is_subnetv6($tgt)) {
+ continue;
+ }
+ $new_targets[] = $tgt;
+ }
+ }
+ if (!isset($id)) {
+ $id = count($a_routes);
+ }
+ $oroute = $a_routes[$id];
+ $old_targets = array();
+ if (!empty($oroute)) {
+ if (is_alias($oroute['network'])) {
+ foreach (filter_expand_alias_array($oroute['network']) as $tgt) {
+ if (is_ipaddrv4($tgt)) {
+ $tgt .= "/32";
+ } else if (is_ipaddrv6($tgt)) {
+ $tgt .= "/128";
+ }
+ if (!is_subnet($tgt)) {
+ continue;
+ }
+ $old_targets[] = $tgt;
+ }
+ } else {
+ $old_targets[] = $oroute['network'];
+ }
+ }
+
+ $overlaps = array_intersect($current_targets, $new_targets);
+ $overlaps = array_diff($overlaps, $old_targets);
+ if (count($overlaps)) {
+ $input_errors[] = gettext("A route to these destination networks already exists") . ": " . implode(", ", $overlaps);
+ }
+
+ if (is_array($config['interfaces'])) {
+ foreach ($config['interfaces'] as $if) {
+ if (is_ipaddrv4($_POST['network']) &&
+ isset($if['ipaddr']) && isset($if['subnet']) &&
+ is_ipaddrv4($if['ipaddr']) && is_numeric($if['subnet']) &&
+ ($_POST['network_subnet'] == $if['subnet']) &&
+ (gen_subnet($_POST['network'], $_POST['network_subnet']) == gen_subnet($if['ipaddr'], $if['subnet']))) {
+ $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']);
+ } else if (is_ipaddrv6($_POST['network']) &&
+ isset($if['ipaddrv6']) && isset($if['subnetv6']) &&
+ is_ipaddrv6($if['ipaddrv6']) && is_numeric($if['subnetv6']) &&
+ ($_POST['network_subnet'] == $if['subnetv6']) &&
+ (gen_subnetv6($_POST['network'], $_POST['network_subnet']) == gen_subnetv6($if['ipaddrv6'], $if['subnetv6']))) {
+ $input_errors[] = sprintf(gettext("This network conflicts with address configured on interface %s."), $if['descr']);
+ }
+ }
+ }
+
+ if (!$input_errors) {
+ $route = array();
+ $route['network'] = $osn;
+ $route['gateway'] = $_POST['gateway'];
+ $route['descr'] = $_POST['descr'];
+ if ($_POST['disabled']) {
+ $route['disabled'] = true;
+ } else {
+ unset($route['disabled']);
+ }
+
+ if (file_exists("{$g['tmp_path']}/.system_routes.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply"));
+ } else {
+ $toapplylist = array();
+ }
+ $a_routes[$id] = $route;
+
+ if (!empty($oroute)) {
+ $delete_targets = array_diff($old_targets, $new_targets);
+ if (count($delete_targets)) {
+ foreach ($delete_targets as $dts) {
+ if (is_ipaddrv6($dts)) {
+ $family = "-inet6";
+ }
+ $toapplylist[] = "/sbin/route delete {$family} {$dts}";
+ }
+ }
+ }
+ file_put_contents("{$g['tmp_path']}/.system_routes.apply", serialize($toapplylist));
+
+ mark_subsystem_dirty('staticroutes');
+
+ write_config();
+
+ header("Location: system_routes.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("System"), gettext("Static Routes"), gettext("Edit route"));
+$shortcut_section = "routing";
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<script type="text/javascript" src="/javascript/autosuggest.js?rev=1"></script>
+<script type="text/javascript" src="/javascript/suggestions.js"></script>
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="system_routes_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="system routes edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Edit route entry"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="network" type="text" class="formfldalias ipv4v6" id="network" size="20" value="<?=htmlspecialchars($pconfig['network']);?>" />
+ /
+ <select name="network_subnet" class="formselect ipv4v6" id="network_subnet">
+ <?php for ($i = 128; $i >= 1; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['network_subnet']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ <br /><span class="vexpl"><?=gettext("Destination network for this static route"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="gateway" id="gateway" class="formselect">
+ <?php
+ foreach ($a_gateways as $gateway) {
+ echo "<option value='{$gateway['name']}' ";
+ if ($gateway['name'] == $pconfig['gateway']) {
+ echo "selected=\"selected\"";
+ }
+ echo ">" . htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']) . "</option>\n";
+ }
+ ?>
+ </select> <br />
+ <div id='addgwbox'>
+ <?=gettext("Choose which gateway this route applies to or"); ?> <a onclick="show_add_gateway();" href="#"><?=gettext("add a new one.");?></a>
+ </div>
+ <div id='notebox'>
+ </div>
+ <div style="display:none" id="status">
+ </div>
+ <div style="display:none" id="addgateway">
+ <table border="1" style="background:#990000; border-style: none none none none; width:225px;" summary="add gateway">
+ <tr>
+ <td>
+ <table bgcolor="#990000" cellpadding="1" cellspacing="1" summary="add">
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td colspan="2" align="center"><b><font color="white"><?=gettext("Add new gateway:"); ?></font></b></td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td width="45%" align="right"><font color="white"><?=gettext("Default gateway:"); ?></font></td><td><input type="checkbox" id="defaultgw" name="defaultgw" /></td>
+ </tr>
+ <tr>
+ <td width="45%" align="right"><font color="white"><?=gettext("Interface:"); ?></font></td>
+ <td>
+ <select name="addinterfacegw" id="addinterfacegw">
+ <?php $gwifs = get_configured_interface_with_descr();
+ foreach ($gwifs as $fif => $dif) {
+ echo "<option value=\"{$fif}\">{$dif}</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></font></td><td><input id="name" name="name" value="GW" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Gateway IP:"); ?></font></td><td><input id="gatewayip" name="gatewayip" /></td>
+ </tr>
+ <tr>
+ <td align="right"><font color="white"><?=gettext("Description:"); ?></font></td><td><input id="gatewaydescr" name="gatewaydescr" /></td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td colspan="2" align="center">
+ <div id='savebuttondiv'>
+ <input type="hidden" name="addrtype" id="addrtype" value="IPv4" />
+ <input id="gwsave" type="button" value="<?=gettext("Save Gateway"); ?>" onclick='hide_add_gatewaysave();' />
+ <input id="gwcancel" type="button" value="<?=gettext("Cancel"); ?>" onclick='hide_add_gateway();' />
+ </div>
+ </td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disabled");?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this static route");?></strong><br />
+ <span class="vexpl"><?=gettext("Set this option to disable this static route without removing it from the list.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br /><span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="save" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <?php if (isset($id) && $a_routes[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+<script type="text/javascript">
+//<![CDATA[
+ var gatewayip;
+ var name;
+ function show_add_gateway() {
+ document.getElementById("addgateway").style.display = '';
+ document.getElementById("addgwbox").style.display = 'none';
+ document.getElementById("gateway").style.display = 'none';
+ document.getElementById("save").style.display = 'none';
+ document.getElementById("cancel").style.display = 'none';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ jQuery('#notebox').html("");
+ }
+ function hide_add_gateway() {
+ document.getElementById("addgateway").style.display = 'none';
+ document.getElementById("addgwbox").style.display = '';
+ document.getElementById("gateway").style.display = '';
+ document.getElementById("save").style.display = '';
+ document.getElementById("cancel").style.display = '';
+ document.getElementById("gwsave").style.display = '';
+ document.getElementById("gwcancel").style.display = '';
+ }
+ function hide_add_gatewaysave() {
+ document.getElementById("addgateway").style.display = 'none';
+ jQuery('#status').html('<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif"> One moment please...');
+ var iface = jQuery('#addinterfacegw').val();
+ name = jQuery('#name').val();
+ var descr = jQuery('#gatewaydescr').val();
+ gatewayip = jQuery('#gatewayip').val();
+ addrtype = jQuery('#addrtype').val();
+ var defaultgw = '';
+ if (jQuery('#defaultgw').checked) {
+ defaultgw = 'yes';
+ }
+ var url = "system_gateways_edit.php";
+ var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip) + '&type=' + escape(addrtype);
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ error: report_failure,
+ complete: save_callback
+ });
+ }
+ function addOption(selectbox, text, value) {
+ var optn = document.createElement("OPTION");
+ optn.text = text;
+ optn.value = value;
+ selectbox.append(optn);
+ selectbox.prop('selectedIndex', selectbox.children('option').length-1);
+ jQuery('#notebox').html("<p><strong><?=gettext("NOTE:");?><\/strong> <?php printf(gettext("You can manage Gateways %shere%s."), "<a target='_blank' href='system_gateways.php'>", "<\/a>");?> <\/strong><\/p>");
+ }
+ function report_failure() {
+ alert("<?=gettext("Sorry, we could not create your gateway at this time."); ?>");
+ hide_add_gateway();
+ }
+ function save_callback(transport) {
+ var response = transport.responseText;
+ if (response) {
+ document.getElementById("addgateway").style.display = 'none';
+ hide_add_gateway();
+ jQuery('#status').html('');
+ addOption(jQuery('#gateway'), name, name);
+ } else {
+ report_failure();
+ }
+ }
+ var addressarray = <?= json_encode(get_alias_list(array("host", "network"))) ?>;
+ var oTextbox1 = new AutoSuggestControl(document.getElementById("network"), new StateSuggestions(addressarray));
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager.php b/src/usr/local/www/system_usermanager.php
new file mode 100644
index 0000000..f08ce7c
--- /dev/null
+++ b/src/usr/local/www/system_usermanager.php
@@ -0,0 +1,1040 @@
+<?php
+/* $Id$ */
+/*
+ system_usermanager.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ part of pfSense
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ All rights reserved.
+
+ Copyright (C) 2005 Paul Taylor <paultaylor@winn-dixie.com>.
+ All rights reserved.
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES:
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-usermanager
+##|*NAME=System: User Manager page
+##|*DESCR=Allow access to the 'System: User Manager' page.
+##|*MATCH=system_usermanager.php*
+##|-PRIV
+
+require("certs.inc");
+require("guiconfig.inc");
+
+// start admin user code
+$pgtitle = array(gettext("System"), gettext("User Manager"));
+
+if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
+ $id = $_POST['userid'];
+}
+
+if (!isset($config['system']['user']) || !is_array($config['system']['user'])) {
+ $config['system']['user'] = array();
+}
+
+$a_user = &$config['system']['user'];
+
+if (isset($_SERVER['HTTP_REFERER'])) {
+ $referer = $_SERVER['HTTP_REFERER'];
+} else {
+ $referer = '/system_usermanager.php';
+}
+
+if (isset($id) && $a_user[$id]) {
+ $pconfig['usernamefld'] = $a_user[$id]['name'];
+ $pconfig['descr'] = $a_user[$id]['descr'];
+ $pconfig['expires'] = $a_user[$id]['expires'];
+ $pconfig['groups'] = local_user_get_groups($a_user[$id]);
+ $pconfig['utype'] = $a_user[$id]['scope'];
+ $pconfig['uid'] = $a_user[$id]['uid'];
+ $pconfig['authorizedkeys'] = base64_decode($a_user[$id]['authorizedkeys']);
+ $pconfig['priv'] = $a_user[$id]['priv'];
+ $pconfig['ipsecpsk'] = $a_user[$id]['ipsecpsk'];
+ $pconfig['disabled'] = isset($a_user[$id]['disabled']);
+}
+
+if ($_POST['act'] == "deluser") {
+
+ if (!isset($_POST['username']) || !isset($a_user[$id]) || ($_POST['username'] != $a_user[$id]['name'])) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+ }
+
+ conf_mount_rw();
+ local_user_del($a_user[$id]);
+ conf_mount_ro();
+ $userdeleted = $a_user[$id]['name'];
+ unset($a_user[$id]);
+ write_config();
+ $savemsg = gettext("User") . " {$userdeleted} " . gettext("successfully deleted") . "<br />";
+} else if ($_POST['act'] == "delpriv") {
+
+ if (!$a_user[$id]) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+ }
+
+ $privdeleted = $priv_list[$a_user[$id]['priv'][$_POST['privid']]]['name'];
+ unset($a_user[$id]['priv'][$_POST['privid']]);
+ local_user_set($a_user[$id]);
+ write_config();
+ $_POST['act'] = "edit";
+ $savemsg = gettext("Privilege") . " {$privdeleted} " . gettext("successfully deleted"). "<br />";
+} else if ($_POST['act'] == "expcert") {
+
+ if (!$a_user[$id]) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+ }
+
+ $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
+
+ $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.crt");
+ $exp_data = base64_decode($cert['crt']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+} else if ($_POST['act'] == "expckey") {
+
+ if (!$a_user[$id]) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+ }
+
+ $cert =& lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
+
+ $exp_name = urlencode("{$a_user[$id]['name']}-{$cert['descr']}.key");
+ $exp_data = base64_decode($cert['prv']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+} else if ($_POST['act'] == "delcert") {
+
+ if (!$a_user[$id]) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+ }
+
+ $certdeleted = lookup_cert($a_user[$id]['cert'][$_POST['certid']]);
+ $certdeleted = $certdeleted['descr'];
+ unset($a_user[$id]['cert'][$_POST['certid']]);
+ write_config();
+ $_POST['act'] = "edit";
+ $savemsg = gettext("Certificate") . " {$certdeleted} " . gettext("association removed.") . "<br />";
+} else if ($_POST['act'] == "new") {
+ /*
+ * set this value cause the text field is read only
+ * and the user should not be able to mess with this
+ * setting.
+ */
+ $pconfig['utype'] = "user";
+ $pconfig['lifetime'] = 3650;
+}
+
+if (isset($_POST['dellall_x'])) {
+
+ $del_users = $_POST['delete_check'];
+
+ if (!empty($del_users)) {
+ foreach ($del_users as $userid) {
+ if (isset($a_user[$userid]) && $a_user[$userid]['scope'] != "system") {
+ conf_mount_rw();
+ local_user_del($a_user[$userid]);
+ conf_mount_ro();
+ unset($a_user[$userid]);
+ }
+ }
+ $savemsg = gettext("Selected users removed successfully!");
+ write_config($savemsg);
+ }
+}
+
+if ($_POST['save']) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if (isset($id) && ($a_user[$id])) {
+ $reqdfields = explode(" ", "usernamefld");
+ $reqdfieldsn = array(gettext("Username"));
+ } else {
+ if (empty($_POST['name'])) {
+ $reqdfields = explode(" ", "usernamefld passwordfld1");
+ $reqdfieldsn = array(
+ gettext("Username"),
+ gettext("Password"));
+ } else {
+ $reqdfields = explode(" ", "usernamefld passwordfld1 name caref keylen lifetime");
+ $reqdfieldsn = array(
+ gettext("Username"),
+ gettext("Password"),
+ gettext("Descriptive name"),
+ gettext("Certificate authority"),
+ gettext("Key length"),
+ gettext("Lifetime"));
+ }
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['usernamefld'])) {
+ $input_errors[] = gettext("The username contains invalid characters.");
+ }
+
+ if (strlen($_POST['usernamefld']) > 16) {
+ $input_errors[] = gettext("The username is longer than 16 characters.");
+ }
+
+ if (($_POST['passwordfld1']) && ($_POST['passwordfld1'] != $_POST['passwordfld2'])) {
+ $input_errors[] = gettext("The passwords do not match.");
+ }
+
+ if (isset($_POST['ipsecpsk']) && !preg_match('/^[[:ascii:]]*$/', $_POST['ipsecpsk'])) {
+ $input_errors[] = gettext("IPsec Pre-Shared Key contains invalid characters.");
+ }
+
+ if (isset($id) && $a_user[$id]) {
+ $oldusername = $a_user[$id]['name'];
+ } else {
+ $oldusername = "";
+ }
+ /* make sure this user name is unique */
+ if (!$input_errors) {
+ foreach ($a_user as $userent) {
+ if ($userent['name'] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) {
+ $input_errors[] = gettext("Another entry with the same username already exists.");
+ break;
+ }
+ }
+ }
+ /* also make sure it is not reserved */
+ if (!$input_errors) {
+ $system_users = explode("\n", file_get_contents("/etc/passwd"));
+ foreach ($system_users as $s_user) {
+ $ent = explode(":", $s_user);
+ if ($ent[0] == $_POST['usernamefld'] && $oldusername != $_POST['usernamefld']) {
+ $input_errors[] = gettext("That username is reserved by the system.");
+ break;
+ }
+ }
+ }
+
+ /*
+ * Check for a valid expiration date if one is set at all (valid means,
+ * DateTime puts out a time stamp so any DateTime compatible time
+ * format may be used. to keep it simple for the enduser, we only
+ * claim to accept MM/DD/YYYY as inputs. Advanced users may use inputs
+ * like "+1 day", which will be converted to MM/DD/YYYY based on "now".
+ * Otherwise such an entry would lead to an invalid expiration data.
+ */
+ if ($_POST['expires']) {
+ try {
+ $expdate = new DateTime($_POST['expires']);
+ //convert from any DateTime compatible date to MM/DD/YYYY
+ $_POST['expires'] = $expdate->format("m/d/Y");
+ } catch (Exception $ex) {
+ $input_errors[] = gettext("Invalid expiration date format; use MM/DD/YYYY instead.");
+ }
+ }
+
+ if (!empty($_POST['name'])) {
+ $ca = lookup_ca($_POST['caref']);
+ if (!$ca) {
+ $input_errors[] = gettext("Invalid internal Certificate Authority") . "\n";
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ conf_mount_rw();
+ $userent = array();
+ if (isset($id) && $a_user[$id]) {
+ $userent = $a_user[$id];
+ }
+
+ isset($_POST['utype']) ? $userent['scope'] = $_POST['utype'] : $userent['scope'] = "system";
+
+ /* the user name was modified */
+ if (!empty($_POST['oldusername']) && ($_POST['usernamefld'] <> $_POST['oldusername'])) {
+ $_SERVER['REMOTE_USER'] = $_POST['usernamefld'];
+ local_user_del($userent);
+ }
+
+ /* the user password was modified */
+ if ($_POST['passwordfld1']) {
+ local_user_set_password($userent, $_POST['passwordfld1']);
+ }
+
+ $userent['name'] = $_POST['usernamefld'];
+ $userent['descr'] = $_POST['descr'];
+ $userent['expires'] = $_POST['expires'];
+ $userent['authorizedkeys'] = base64_encode($_POST['authorizedkeys']);
+ $userent['ipsecpsk'] = $_POST['ipsecpsk'];
+
+ if ($_POST['disabled']) {
+ $userent['disabled'] = true;
+ } else {
+ unset($userent['disabled']);
+ }
+
+ if (isset($id) && $a_user[$id]) {
+ $a_user[$id] = $userent;
+ } else {
+ if (!empty($_POST['name'])) {
+ $cert = array();
+ $cert['refid'] = uniqid();
+ $userent['cert'] = array();
+
+ $cert['descr'] = $_POST['name'];
+
+ $subject = cert_get_subject_array($ca['crt']);
+
+ $dn = array(
+ 'countryName' => $subject[0]['v'],
+ 'stateOrProvinceName' => $subject[1]['v'],
+ 'localityName' => $subject[2]['v'],
+ 'organizationName' => $subject[3]['v'],
+ 'emailAddress' => $subject[4]['v'],
+ 'commonName' => $userent['name']);
+
+ cert_create($cert, $_POST['caref'], $_POST['keylen'],
+ (int)$_POST['lifetime'], $dn);
+
+ if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+ }
+ $config['cert'][] = $cert;
+ $userent['cert'][] = $cert['refid'];
+ }
+ $userent['uid'] = $config['system']['nextuid']++;
+ /* Add the user to All Users group. */
+ foreach ($config['system']['group'] as $gidx => $group) {
+ if ($group['name'] == "all") {
+ if (!is_array($config['system']['group'][$gidx]['member'])) {
+ $config['system']['group'][$gidx]['member'] = array();
+ }
+ $config['system']['group'][$gidx]['member'][] = $userent['uid'];
+ break;
+ }
+ }
+
+ $a_user[] = $userent;
+ }
+
+ local_user_set($userent);
+ local_user_set_groups($userent, $_POST['groups']);
+ write_config();
+
+ if (is_dir("/etc/inc/privhooks")) {
+ run_plugins("/etc/inc/privhooks");
+ }
+
+ conf_mount_ro();
+
+ pfSenseHeader("system_usermanager.php");
+ }
+}
+
+$closehead = false;
+include("head.inc");
+?>
+
+<link rel="stylesheet" type="text/css" href="/javascript/jquery-ui-timepicker-addon/css/jquery-ui-timepicker-addon.css" />
+<link rel="stylesheet" type="text/css" href="/javascript/jquery/jquery-ui-1.11.1.css" />
+
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(function() {
+ jQuery( "#expires" ).datepicker( { dateFormat: 'mm/dd/yy', changeYear: true, yearRange: "+0:+100" } );
+ });
+//]]>
+</script>
+</head>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+function setall_selected(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ selbox.options[index].selected = true;
+ }
+}
+
+function delete_empty(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ if (selbox.options[index].value == '') {
+ selbox.remove(index);
+ }
+ }
+}
+
+function clear_selected(id) {
+ selbox = document.getElementById(id);
+ count = selbox.options.length;
+ for (index = 0; index<count; index++) {
+ selbox.options[index].selected = false;
+ }
+}
+
+function remove_selected(id) {
+ selbox = document.getElementById(id);
+ index = selbox.options.length - 1;
+ for (; index >= 0; index--) {
+ if (selbox.options[index].selected) {
+ selbox.remove(index);
+ }
+ }
+}
+
+function copy_selected(srcid, dstid) {
+ src_selbox = document.getElementById(srcid);
+ dst_selbox = document.getElementById(dstid);
+ count = dst_selbox.options.length;
+ for (index = count - 1; index >= 0; index--) {
+ if (dst_selbox.options[index].value == '') {
+ dst_selbox.remove(index);
+ }
+ }
+ count = src_selbox.options.length;
+ for (index = 0; index < count; index++) {
+ if (src_selbox.options[index].selected) {
+ option = document.createElement('option');
+ option.text = src_selbox.options[index].text;
+ option.value = src_selbox.options[index].value;
+ dst_selbox.add(option, null);
+ }
+ }
+}
+
+function move_selected(srcid, dstid) {
+ copy_selected(srcid, dstid);
+ remove_selected(srcid);
+}
+
+function presubmit() {
+ delete_empty('groups');
+ delete_empty('notgroups');
+ clear_selected('notgroups');
+ setall_selected('groups');
+}
+
+function usercertClicked(obj) {
+ if (obj.checked) {
+ document.getElementById("usercertchck").style.display="none";
+ document.getElementById("usercert").style.display="";
+ } else {
+ document.getElementById("usercert").style.display="none";
+ document.getElementById("usercertchck").style.display="";
+ }
+}
+
+function sshkeyClicked(obj) {
+ if (obj.checked) {
+ document.getElementById("sshkeychck").style.display="none";
+ document.getElementById("sshkey").style.display="";
+ } else {
+ document.getElementById("sshkey").style.display="none";
+ document.getElementById("sshkeychck").style.display="";
+ }
+}
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager">
+ <tr>
+ <td>
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), true, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+<?php
+ if ($_POST['act'] == "new" || $_POST['act'] == "edit" || $input_errors):
+?>
+ <form action="system_usermanager.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
+ <input type="hidden" id="act" name="act" value="" />
+ <input type="hidden" id="userid" name="userid" value="<?=(isset($id) ? $id : '');?>" />
+ <input type="hidden" id="privid" name="privid" value="" />
+ <input type="hidden" id="certid" name="certid" value="" />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+<?php
+ $ro = "";
+ if ($pconfig['utype'] == "system") {
+ $ro = "readonly=\"readonly\"";
+ }
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Defined by");?></td>
+ <td width="78%" class="vtable">
+ <strong><?=strtoupper(htmlspecialchars($pconfig['utype']));?></strong>
+ <input name="utype" type="hidden" value="<?=htmlspecialchars($pconfig['utype'])?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disabled");?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
+ <td width="78%" class="vtable">
+ <input name="usernamefld" type="text" class="formfld user" id="usernamefld" size="20" maxlength="16" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" <?=$ro;?> />
+ <input name="oldusername" type="hidden" id="oldusername" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq" rowspan="2"><?=gettext("Password");?></td>
+ <td width="78%" class="vtable">
+ <input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" value="" />
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" value="" />&nbsp;<?= gettext("(confirmation)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Full name");?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="20" value="<?=htmlspecialchars($pconfig['descr']);?>" <?=$ro;?> />
+ <br />
+ <?=gettext("User's full name, for your own information only");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Expiration date"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="expires" type="text" class="formfld unknown" id="expires" size="10" value="<?=htmlspecialchars($pconfig['expires']);?>" />
+ <br />
+ <span class="vexpl"><?=gettext("Leave blank if the account shouldn't expire, otherwise enter the expiration date in the following format: mm/dd/yyyy"); ?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Group Memberships");?></td>
+ <td width="78%" class="vtable" align="center">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="group membership">
+ <tr>
+ <td align="center" width="50%">
+ <strong><?=gettext("Not Member Of"); ?></strong><br />
+ <br />
+ <select size="10" style="width: 75%" name="notgroups[]" class="formselect" id="notgroups" onchange="clear_selected('groups')" multiple="multiple">
+<?php
+ $rowIndex = 0;
+ foreach ($config['system']['group'] as $group):
+ if ($group['gid'] == 1998) { /* all users group */
+ continue;
+ }
+ if (is_array($pconfig['groups']) && in_array($group['name'], $pconfig['groups'])) {
+ continue;
+ }
+ $rowIndex++;
+?>
+ <option value="<?=$group['name'];?>" <?=$selected;?>>
+ <?=htmlspecialchars($group['name']);?>
+ </option>
+<?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ <br />
+ </td>
+ <td>
+ <br />
+ <a href="javascript:move_selected('notgroups', 'groups')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_right.gif" title="<?=gettext("Add Groups"); ?>" alt="<?=gettext("Add Groups"); ?>" width="17" height="17" border="0" />
+ </a>
+ <br /><br />
+ <a href="javascript:move_selected('groups', 'notgroups')">
+ <img src="/themes/<?= $g['theme'];?>/images/icons/icon_left.gif" title="<?=gettext("Remove Groups"); ?>" alt="<?=gettext("Remove Groups"); ?>" width="17" height="17" border="0" />
+ </a>
+ </td>
+ <td align="center" width="50%">
+ <strong><?=gettext("Member Of"); ?></strong><br />
+ <br />
+ <select size="10" style="width: 75%" name="groups[]" class="formselect" id="groups" onchange="clear_selected('notgroups')" multiple="multiple">
+<?php
+ $rowIndex = 0;
+ if (is_array($pconfig['groups'])):
+ foreach ($config['system']['group'] as $group):
+ if ($group['gid'] == 1998) { /* all users group */
+ continue;
+ }
+ if (!in_array($group['name'], $pconfig['groups'])) {
+ continue;
+ }
+ $rowIndex++;
+?>
+ <option value="<?=$group['name'];?>">
+ <?=htmlspecialchars($group['name']);?>
+ </option>
+<?php
+ endforeach;
+ endif;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ <br />
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
+ </td>
+ </tr>
+<?php
+ if (isset($pconfig['uid'])):
+?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Effective Privileges");?></td>
+ <td width="78%" class="vtable">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="privileges">
+ <tr>
+ <td width="20%" class="listhdrr"><?=gettext("Inherited From");?></td>
+ <td width="30%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Description");?></td>
+ <td class="list"></td>
+ </tr>
+<?php
+ $privdesc = get_user_privdesc($a_user[$id]);
+ if (is_array($privdesc)):
+ $i = 0;
+ foreach ($privdesc as $priv):
+ $group = false;
+ if ($priv['group']) {
+ $group = $priv['group'];
+ }
+?>
+ <tr>
+ <td class="listlr"><?=$group;?></td>
+ <td class="listr">
+ <?=htmlspecialchars($priv['name']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($priv['descr']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+<?php
+ if (!$group):
+?>
+ <input type="image" name="delpriv[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
+ onclick="document.getElementById('privid').value='<?=$i;?>';
+ document.getElementById('userid').value='<?=$id;?>';
+ document.getElementById('act').value='<?php echo "delpriv";?>';
+ return confirm('<?=gettext("Do you really want to delete this privilege?");?>');"
+ title="<?=gettext("delete privilege");?>" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ /* can only delete user priv indexes */
+ if (!$group) {
+ $i++;
+ }
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <a href="system_usermanager_addprivs.php?userid=<?=$id?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("User Certificates");?></td>
+ <td width="78%" class="vtable">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="certificates">
+ <tr>
+ <td width="45%" class="listhdrr"><?=gettext("Name");?></td>
+ <td width="45%" class="listhdrr"><?=gettext("CA");?></td>
+ <td class="list"></td>
+ </tr>
+<?php
+ $a_cert = $a_user[$id]['cert'];
+ if (is_array($a_cert)):
+ $i = 0;
+ foreach ($a_cert as $certref):
+ $cert = lookup_cert($certref);
+ $ca = lookup_ca($cert['caref']);
+?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($cert['descr']);?>
+<?php
+ if (is_cert_revoked($cert)):
+?>
+ (<b>Revoked</b>)
+<?php
+ endif;
+?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($ca['descr']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <input type="image" name="expckey[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_down.gif"
+ onclick="document.getElementById('certid').value='<?=$i;?>';
+ document.getElementById('userid').value='<?=$id;?>';
+ document.getElementById('act').value='<?php echo "expckey";?>';"
+ title="<?=gettext("export private key");?>" />
+ <input type="image" name="expcert[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_down.gif"
+ onclick="document.getElementById('certid').value='<?=$i;?>';
+ document.getElementById('userid').value='<?=$id;?>';
+ document.getElementById('act').value='<?php echo "expcert";?>';"
+ title="<?=gettext("export cert");?>" />
+ <input type="image" name="delcert[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
+ onclick="document.getElementById('certid').value='<?=$i;?>';
+ document.getElementById('userid').value='<?=$id;?>';
+ document.getElementById('act').value='<?php echo "delcert";?>';
+ return confirm('<?=gettext("Do you really want to remove this certificate association?") .'\n'. gettext("(Certificate will not be deleted)");?>')"
+ title="<?=gettext("delete cert");?>" />
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+ endif;
+?>
+ <tr>
+ <td class="list" colspan="2"></td>
+ <td class="list">
+ <a href="system_certmanager.php?act=new&amp;userid=<?=$id?>">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+<?php
+ else:
+ if (is_array($config['ca']) && count($config['ca']) > 0):
+ $i = 0;
+ foreach ($config['ca'] as $ca) {
+ if (!$ca['prv']) {
+ continue;
+ }
+ $i++;
+ }
+?>
+
+ <tr id="usercertchck">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Certificate");?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" onclick="javascript:usercertClicked(this)" /> <?=gettext("Click to create a user certificate."); ?>
+ </td>
+ </tr>
+
+<?php
+ if ($i > 0):
+?>
+ <tr id="usercert" style="display:none">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Certificate");?></td>
+ <td width="78%" class="vtable">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="certificate">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Descriptive name");?></td>
+ <td width="78%" class="vtable">
+ <input name="name" type="text" class="formfld unknown" id="name" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Certificate authority");?></td>
+ <td width="78%" class="vtable">
+ <select name='caref' id='caref' class="formselect" onchange='internalca_change()'>
+<?php
+ $rowIndex = 0;
+ foreach ($config['ca'] as $ca):
+ if (!$ca['prv']) {
+ continue;
+ }
+ $rowIndex++;
+?>
+ <option value="<?=$ca['refid'];?>"><?=htmlspecialchars($ca['descr']);?></option>
+<?php
+ endforeach;
+ if ($rowIndex == 0) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Key length");?></td>
+ <td width="78%" class="vtable">
+ <select name='keylen' class="formselect">
+<?php
+ $cert_keylens = array("2048", "512", "1024", "4096");
+ foreach ($cert_keylens as $len):
+?>
+ <option value="<?=$len;?>"><?=$len;?></option>
+<?php
+ endforeach;
+ if (!count($cert_keylens)) {
+ echo "<option></option>";
+ }
+?>
+ </select>
+ bits
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Lifetime");?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="5" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />days
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ endif;
+ endif;
+ endif;
+?>
+ <tr id="sshkeychck" <?php if (!empty($pconfig['authorizedkeys'])) echo 'style="display:none"'; ?>>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authorized keys");?></td>
+ <td width="78%" class="vtable">
+ <input type="checkbox" onclick="javascript:sshkeyClicked(this)" /> <?=gettext("Click to paste an authorized key."); ?>
+ </td>
+ </tr>
+ <tr id="sshkey" <?php if (empty($pconfig['authorizedkeys'])) echo 'style="display:none"'; ?>>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authorized keys");?></td>
+ <td width="78%" class="vtable">
+ <script type="text/javascript">
+ //<![CDATA[
+ window.onload=function() {
+ document.getElementById("authorizedkeys").wrap='off';
+ }
+ //]]>
+ </script>
+ <textarea name="authorizedkeys" cols="65" rows="7" id="authorizedkeys" class="formfld_cert"><?=htmlspecialchars($pconfig['authorizedkeys']);?></textarea>
+ <br />
+ <?=gettext("Paste an authorized keys file here.");?>
+ </td>
+ </tr>
+ <tr id="ipsecpskrow">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPsec Pre-Shared Key");?></td>
+ <td width="78%" class="vtable">
+ <input name="ipsecpsk" type="text" class="formfld unknown" id="ipsecpsk" size="65" value="<?=htmlspecialchars($pconfig['ipsecpsk']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <?php if (isset($id) && $a_user[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif;?>
+ </td>
+ </tr>
+ </table>
+ </form>
+<?php
+ else:
+?>
+ <form action="system_usermanager.php" method="post" name="iform2" id="iform2">
+ <input type="hidden" id="act" name="act" value="" />
+ <input type="hidden" id="userid" name="userid" value="<?=(isset($id) ? $id : '');?>" />
+ <input type="hidden" id="username" name="username" value="" />
+ <input type="hidden" id="privid" name="privid" value="" />
+ <input type="hidden" id="certid" name="certid" value="" />
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="">
+ <thead>
+ <tr>
+ <th width="5%" class="list">&nbsp;</th>
+ <th width="25%" class="listhdrr"><?=gettext("Username"); ?></th>
+ <th width="25%" class="listhdrr"><?=gettext("Full name"); ?></th>
+ <th width="5%" class="listhdrr"><?=gettext("Disabled"); ?></th>
+ <th width="25%" class="listhdrr"><?=gettext("Groups"); ?></th>
+ <th width="10%" class="list"></th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="5"></td>
+ <td class="list">
+ <input type="image" name="addcert" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_plus.gif"
+ onclick="document.getElementById('act').value='<?php echo "new";?>';"
+ title="<?=gettext("add user");?>" />
+ <input type="image" src="/themes/<?= $g['theme'];?>/images/icons/icon_x.gif" name="dellall" title="<?=gettext('Delete selected users')?>" onClick="return confirm('<?=gettext("Do you really want to delete selected Users?");?>')" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="5">
+ <p>
+ <?=gettext("Additional users can be added here. User permissions for accessing " .
+ "the webConfigurator can be assigned directly or inherited from group memberships. " .
+ "An icon that appears grey indicates that it is a system defined object. " .
+ "Some system object properties can be modified but they cannot be deleted."); ?>
+ <br /><br />
+ <?=gettext("Accounts created here are also used for other parts of the system " .
+ "such as OpenVPN, IPsec, and Captive Portal.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+<?php
+ $i = 0;
+ foreach ($a_user as $userent):
+?>
+ <tr ondblclick="document.getElementById('act').value='<?php echo "edit";?>';
+ document.getElementById('userid').value='<?=$i;?>';
+ document.iform2.submit();" id="fr<?=$i?>">
+ <td class="list" id="frd<?=$i?>">
+ <?php if ($userent['scope'] != "system") : ?>
+ <input type="checkbox" id="frc<?=$i?>" onclick="fr_bgcolor(<?=$i?>)" name="delete_check[]" value="<?=$i?>" />
+ <?php endif; ?>
+ </td>
+ <td class="listlr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')">
+ <table border="0" cellpadding="0" cellspacing="0" summary="icons">
+ <tr>
+ <td align="left" valign="middle">
+<?php
+ if ($userent['scope'] != "user") {
+ $usrimg = "/themes/{$g['theme']}/images/icons/icon_system-user-grey.png";
+ } else {
+ $usrimg = "/themes/{$g['theme']}/images/icons/icon_system-user.png";
+ }
+?>
+ <img src="<?=$usrimg;?>" alt="<?=gettext("User"); ?>" title="<?=gettext("User"); ?>" border="0" height="16" width="16" />
+ </td>
+ <td align="left" valign="middle">
+ <?=htmlspecialchars($userent['name']);?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td class="listr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')"><?=htmlspecialchars($userent['descr']);?>&nbsp;</td>
+ <td class="listr" id="frd<?=$i?>" onclick="fr_toggle('<?=$i;?>')"><?php if (isset($userent['disabled'])) echo "*"; ?></td>
+ <td class="listbg" onclick="fr_toggle('<?=$i;?>')">
+ <?=implode(",", local_user_get_groups($userent));?>
+ &nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <input type="image" name="edituser[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
+ onclick="document.getElementById('userid').value='<?=$i;?>';
+ document.getElementById('act').value='<?php echo "edit";?>';"
+ title="<?=gettext("edit user");?>" />
+<?php
+ if ($userent['scope'] != "system"):
+?>
+ &nbsp;
+ <input type="image" name="deluser[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif"
+ onclick="document.getElementById('userid').value='<?=$i;?>';
+ document.getElementById('username').value='<?=$userent['name'];?>';
+ document.getElementById('act').value='<?php echo "deluser";?>';
+ return confirm('<?=gettext("Do you really want to delete this user?");?>');"
+ title="<?=gettext("delete user");?>" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ </tbody>
+ </table>
+ </form>
+<?php
+ endif;
+?>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc");?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager_addprivs.php b/src/usr/local/www/system_usermanager_addprivs.php
new file mode 100644
index 0000000..40b11a6
--- /dev/null
+++ b/src/usr/local/www/system_usermanager_addprivs.php
@@ -0,0 +1,220 @@
+<?php
+/* $Id$ */
+/*
+ system_usermanager_addprivs.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2006 Daniel S. Haischt.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-usermanager-addprivs
+##|*NAME=System: User Manager: Add Privileges page
+##|*DESCR=Allow access to the 'System: User Manager: Add Privileges' page.
+##|*MATCH=system_usermanager_addprivs.php*
+##|-PRIV
+
+function admusercmp($a, $b) {
+ return strcasecmp($a['name'], $b['name']);
+}
+
+require("guiconfig.inc");
+
+$pgtitle = array("System", "User manager", "Add privileges");
+
+if (is_numericint($_GET['userid'])) {
+ $userid = $_GET['userid'];
+}
+if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
+ $userid = $_POST['userid'];
+}
+
+if (!isset($config['system']['user'][$userid]) && !is_array($config['system']['user'][$userid])) {
+ pfSenseHeader("system_usermanager.php");
+ exit;
+}
+
+$a_user = & $config['system']['user'][$userid];
+
+if (!is_array($a_user['priv'])) {
+ $a_user['priv'] = array();
+}
+
+if ($_POST) {
+ conf_mount_rw();
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "sysprivs");
+ $reqdfieldsn = array(gettext("Selected privileges"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+
+ if (!is_array($pconfig['sysprivs'])) {
+ $pconfig['sysprivs'] = array();
+ }
+
+ if (!count($a_user['priv'])) {
+ $a_user['priv'] = $pconfig['sysprivs'];
+ } else {
+ $a_user['priv'] = array_merge($a_user['priv'], $pconfig['sysprivs']);
+ }
+
+ $a_user['priv'] = sort_user_privs($a_user['priv']);
+ local_user_set($a_user);
+ $retval = write_config();
+ $savemsg = get_std_save_message($retval);
+ conf_mount_ro();
+
+ post_redirect("system_usermanager.php", array('act' => 'edit', 'userid' => $userid));
+
+ exit;
+ }
+ conf_mount_ro();
+}
+
+/* if ajax is calling, give them an update message */
+if (isAjax()) {
+ print_info_box_np($savemsg);
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+<?php
+
+if (is_array($priv_list)) {
+ $id = 0;
+
+ $jdescs = "var descs = new Array();\n";
+ foreach ($priv_list as $pname => $pdata) {
+ if (in_array($pname, $a_user['priv'])) {
+ continue;
+ }
+ $desc = addslashes(preg_replace("/pfSense/i", $g['product_name'], $pdata['descr']));
+ $jdescs .= "descs[{$id}] = '{$desc}';\n";
+ $id++;
+ }
+
+ echo $jdescs;
+}
+
+?>
+
+function update_description() {
+ var index = document.iform.sysprivs.selectedIndex;
+ document.getElementById("pdesc").innerHTML = descs[index];
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager add privileges">
+ <tr>
+ <td>
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), true, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <form action="system_usermanager_addprivs.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("System Privileges");?></td>
+ <td width="78%" class="vtable">
+ <select name="sysprivs[]" id="sysprivs" class="formselect" onchange="update_description();" multiple="multiple" size="35">
+ <?php
+ foreach ($priv_list as $pname => $pdata):
+ if (in_array($pname, $a_user['priv'])) {
+ continue;
+ }
+ ?>
+ <option value="<?=$pname;?>"><?=$pdata['name'];?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
+ </td>
+ </tr>
+ <tr height="60">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
+ <td width="78%" valign="top" class="vtable" id="pdesc">
+ <em><?=gettext("Select a privilege from the list above for a description"); ?></em>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submitt" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input id="cancelbutton" class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()" />
+ <?php if (isset($userid)): ?>
+ <input name="userid" type="hidden" value="<?=htmlspecialchars($userid);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager_passwordmg.php b/src/usr/local/www/system_usermanager_passwordmg.php
new file mode 100644
index 0000000..6d785ee
--- /dev/null
+++ b/src/usr/local/www/system_usermanager_passwordmg.php
@@ -0,0 +1,155 @@
+<?php
+/* $Id$ */
+/*
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2011 Ermal Luçi
+ system_usermanager_passwordmg.php
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES:
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-usermanager-passwordmg
+##|*NAME=System: User Password Manager page
+##|*DESCR=Allow access to the 'System: User Password Manager' page.
+##|*MATCH=system_usermanager_passwordmg.php*
+##|-PRIV
+
+require_once("auth.inc");
+require_once("certs.inc");
+require_once("guiconfig.inc");
+
+$pgtitle = array(gettext("System"), gettext("User Password"));
+
+if (isset($_POST['save'])) {
+ unset($input_errors);
+ /* input validation */
+
+ $reqdfields = explode(" ", "passwordfld1");
+ $reqdfieldsn = array(gettext("Password"));
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($_POST['passwordfld1'] != $_POST['passwordfld2']) {
+ $input_errors[] = gettext("The passwords do not match.");
+ }
+
+ if (!$input_errors) {
+ if (!session_id()) {
+ session_start();
+ }
+ // all values are okay --> saving changes
+
+ $userent =& $config['system']['user'][$userindex[$_SESSION['Username']]];
+ local_user_set_password($userent, $_POST['passwordfld1']);
+ local_user_set($userent);
+ unset($userent);
+ session_commit();
+
+ write_config();
+
+ $savemsg = gettext("Password successfully changed") . "<br />";
+ }
+}
+
+if (!session_id()) {
+ session_start();
+}
+
+/* determine if user is not local to system */
+$islocal = false;
+foreach ($config['system']['user'] as $user) {
+ if ($user['name'] == $_SESSION['Username']) {
+ $islocal = true;
+ }
+}
+
+session_commit();
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php
+include("fbegin.inc");
+
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+
+if ($islocal == false) {
+ echo gettext("Sorry, you cannot change the password for a non-local user.");
+ include("fend.inc");
+ exit;
+}
+
+?>
+
+<div id="mainarea">
+ <div class="tabcont">
+ <form action="system_usermanager_passwordmg.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+<?php
+ if (!session_id()) {
+ session_start();
+ }
+?>
+ <td colspan="2" valign="top" class="listtopic"><?=$_SESSION['Username']?>'s <?=gettext("Password"); ?></td>
+<?php session_commit(); ?>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell" rowspan="2"><?=gettext("Password"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" />
+ </td>
+ </tr>
+ <tr>
+ <td width="78%" class="vtable">
+ <input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
+ &nbsp;<?=gettext("(confirmation)");?>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Select a new password");?>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+</div>
+<?php include("fend.inc");?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager_settings.php b/src/usr/local/www/system_usermanager_settings.php
new file mode 100644
index 0000000..cadfb08
--- /dev/null
+++ b/src/usr/local/www/system_usermanager_settings.php
@@ -0,0 +1,185 @@
+<?php
+/* $Id$ */
+/*
+ system_usermanager_settings.php
+
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2007 Bill Marquette <bill.marquette@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-usermanager-settings
+##|*NAME=System: User Manager: settings page
+##|*DESCR=Allow access to the 'System: User Manager: settings' page.
+##|*MATCH=system_usermanager_settings.php*
+##|-PRIV
+
+require("guiconfig.inc");
+
+$pconfig['session_timeout'] = &$config['system']['webgui']['session_timeout'];
+$pconfig['authmode'] = &$config['system']['webgui']['authmode'];
+$pconfig['backend'] = &$config['system']['webgui']['backend'];
+
+// Page title for main admin
+$pgtitle = array(gettext("System"), gettext("User manager settings"));
+
+$save_and_test = false;
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (isset($_POST['session_timeout'])) {
+ $timeout = intval($_POST['session_timeout']);
+ if ($timeout != "" && (!is_numeric($timeout) || $timeout <= 0)) {
+ $input_errors[] = gettext("Session timeout must be an integer value.");
+ }
+ }
+
+ if (!$input_errors) {
+ if ($_POST['authmode'] != "local") {
+ $authsrv = auth_get_authserver($_POST['authmode']);
+ if ($_POST['savetest']) {
+ if ($authsrv['type'] == "ldap") {
+ $save_and_test = true;
+ } else {
+ $savemsg = gettext("The test was not performed because it is supported only for ldap based backends.");
+ }
+ }
+ }
+
+
+ if (isset($_POST['session_timeout']) && $_POST['session_timeout'] != "") {
+ $config['system']['webgui']['session_timeout'] = intval($_POST['session_timeout']);
+ } else {
+ unset($config['system']['webgui']['session_timeout']);
+ }
+
+ if ($_POST['authmode']) {
+ $config['system']['webgui']['authmode'] = $_POST['authmode'];
+ } else {
+ unset($config['system']['webgui']['authmode']);
+ }
+
+ write_config();
+
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc");?>
+<?php if ($input_errors) print_input_errors($input_errors);?>
+<?php if ($savemsg) print_info_box($savemsg);?>
+
+<?php
+ if ($save_and_test) {
+ echo "<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ echo "myRef = window.open('system_usermanager_settings_test.php?authserver={$pconfig['authmode']}','mywin', ";
+ echo "'left=20,top=20,width=700,height=550,toolbar=1,resizable=0');\n";
+ echo "if (myRef==null || typeof(myRef)=='undefined') alert('" . gettext("Popup blocker detected. Action aborted.") ."');\n";
+ echo "//]]>\n";
+ echo "</script>\n";
+ }
+?>
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="user manager settings">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
+ $tab_array[] = array(gettext("Groups"), false, "system_groupmanager.php");
+ $tab_array[] = array(gettext("Settings"), true, "system_usermanager_settings.php");
+ $tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
+ display_top_tabs($tab_array);
+
+ /* Default to pfsense backend type if none is defined */
+ if (!$pconfig['backend']) {
+ $pconfig['backend'] = "pfsense";
+ }
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <form id="iform" name="iform" action="system_usermanager_settings.php" method="post">
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="6" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Session Timeout"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="session_timeout" id="session_timeout" type="text" size="8" value="<?=htmlspecialchars($pconfig['session_timeout']);?>" />
+ <br />
+ <?=gettext("Time in minutes to expire idle management sessions. The default is 4 hours (240 minutes).");?><br />
+ <?=gettext("Enter 0 to never expire sessions. NOTE: This is a security risk!");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Authentication Server"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='authmode' id='authmode' class="formselect" >
+<?php
+ $auth_servers = auth_get_authserver_list();
+ foreach ($auth_servers as $auth_server):
+ $selected = "";
+ if ($auth_server['name'] == $pconfig['authmode']) {
+ $selected = "selected=\"selected\"";
+ }
+ if (!isset($pconfig['authmode']) && $auth_server['name'] == "Local Database") {
+ $selected = "selected=\"selected\"";
+ }
+?>
+ <option value="<?=$auth_server['name'];?>" <?=$selected;?>><?=$auth_server['name'];?></option>
+<?php
+ endforeach;
+?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="save" name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <input id="savetest" name="savetest" type="submit" class="formbtn" value="<?=gettext("Save and Test");?>" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ </td>
+ </tr>
+ </table>
+<?php include("fend.inc");?>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager_settings_ldapacpicker.php b/src/usr/local/www/system_usermanager_settings_ldapacpicker.php
new file mode 100644
index 0000000..068142e
--- /dev/null
+++ b/src/usr/local/www/system_usermanager_settings_ldapacpicker.php
@@ -0,0 +1,131 @@
+<?php
+/* $Id$ */
+/*
+ system_usermanager_settings_ldapacpicker.php
+ part of pfSense (https://www.pfsense.org/)
+ Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+require("guiconfig.inc");
+require_once("auth.inc");
+
+$ous = array();
+
+if ($_GET) {
+ $authcfg = array();
+ $authcfg['ldap_port'] = $_GET['port'];
+ $authcfg['ldap_basedn'] = $_GET['basedn'];
+ $authcfg['host'] = $_GET['host'];
+ $authcfg['ldap_scope'] = $_GET['scope'];
+ $authcfg['ldap_binddn'] = $_GET['binddn'];
+ $authcfg['ldap_bindpw'] = $_GET['bindpw'];
+ $authcfg['ldap_urltype'] = $_GET['urltype'];
+ $authcfg['ldap_protver'] = $_GET['proto'];
+ $authcfg['ldap_authcn'] = explode(";", $_GET['authcn']);
+ $authcfg['ldap_caref'] = $_GET['cert'];
+ $ous = ldap_get_user_ous(true, $authcfg);
+}
+
+?>
+<html>
+ <head>
+ <STYLE type="text/css">
+ TABLE {
+ border-width: 1px 1px 1px 1px;
+ border-spacing: 0px;
+ border-style: solid solid solid solid;
+ border-color: gray gray gray gray;
+ border-collapse: separate;
+ background-color: collapse;
+ }
+ TD {
+ border-width: 0px 0px 0px 0px;
+ border-spacing: 0px;
+ border-style: solid solid solid solid;
+ border-color: gray gray gray gray;
+ border-collapse: collapse;
+ background-color: white;
+ }
+ </STYLE>
+ </head>
+<script type="text/javascript">
+function post_choices() {
+
+ var ous = <?php echo count($ous); ?>;
+ var i;
+ opener.document.forms[0].ldapauthcontainers.value="";
+ for (i = 0; i < ous; i++) {
+ if (document.forms[0].ou[i].checked) {
+ if (opener.document.forms[0].ldapauthcontainers.value != "") {
+ opener.document.forms[0].ldapauthcontainers.value+=";";
+ }
+ opener.document.forms[0].ldapauthcontainers.value+=document.forms[0].ou[i].value;
+ }
+ }
+ window.close();
+-->
+}
+</script>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
+<form method="post" action="system_usermanager_settings_ldapacpicker.php">
+<?php if (empty($ous)): ?>
+ <p><?=gettext("Could not connect to the LDAP server. Please check your LDAP configuration.");?></p>
+ <input type='button' value='<?=gettext("Close"); ?>' onClick="window.close();">
+<?php else: ?>
+ <b><?=gettext("Please select which containers to Authenticate against:");?></b>
+ <p/>
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabnavtbl">
+ <table width="100%">
+<?php
+ if (is_array($ous)) {
+ foreach ($ous as $ou) {
+ if (in_array($ou, $authcfg['ldap_authcn'])) {
+ $CHECKED=" CHECKED";
+ } else {
+ $CHECKED="";
+ }
+ echo " <tr><td><input type='checkbox' value='{$ou}' id='ou' name='ou[]'{$CHECKED}> {$ou}<br /></td></tr>\n";
+ }
+ }
+?>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <p/>
+
+ <input type='button' value='<?=gettext("Save");?>' onClick="post_choices();">
+<?php endif; ?>
+</form>
+</body>
+</html>
diff --git a/src/usr/local/www/system_usermanager_settings_test.php b/src/usr/local/www/system_usermanager_settings_test.php
new file mode 100755
index 0000000..9076262
--- /dev/null
+++ b/src/usr/local/www/system_usermanager_settings_test.php
@@ -0,0 +1,134 @@
+<?php
+/* $Id$ */
+/*
+ system_usermanager_settings_test.php
+ part of pfSense (https://www.pfsense.org/)
+ Copyright (C) 2007 Scott Ullrich <sullrich@gmail.com>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2014 Silvio Giunge <desenvolvimento@bluepex.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: auth
+*/
+
+##|+PRIV
+##|*IDENT=page-system-usermanager-settings-testldap
+##|*NAME=System: User Manager: Settings: Test LDAP page
+##|*DESCR=Allow access to the 'System: User Manager: Settings: Test LDAP' page.
+##|*MATCH=system_usermanager_settings_test.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("auth.inc");
+
+if (isset($config['system']['authserver'][0]['host'])) {
+ $auth_server = $config['system']['authserver'][0]['host'];
+ $authserver = $_GET['authserver'];
+ $authcfg = auth_get_authserver($authserver);
+}
+
+?>
+
+<html>
+<HEAD>
+ <STYLE type="text/css">
+ TABLE {
+ border-width: 1px;
+ border-spacing: 0px;
+ border-style: solid solid solid solid;
+ border-color: gray gray gray gray;
+ border-collapse: separate;
+ background-color: collapse;
+ }
+ TD {
+ border-width: 1px 1px 1px 1px;
+ border-spacing: 0px;
+ border-style: solid solid solid solid;
+ border-color: gray gray gray gray;
+ border-collapse: collapse;
+ background-color: #dddddd;
+ }
+ </STYLE>
+</HEAD>
+<body>
+ <form method="post" name="iform" id="iform">
+
+<?php
+$theme = $config['theme'];
+
+if (!$authcfg) {
+ printf(gettext("Could not find settings for %s%s"), htmlspecialchars($authserver), "<p/>");
+} else {
+ if ($theme != "" && file_exists("/usr/local/www/themes/{$theme}/images/logo.gif")) {
+ echo "<p><img src='/themes/{$theme}/images/logo.gif' style='float: left'><br/><br/><br/></p>";
+ }
+ echo "<b>" . sprintf(gettext("Testing %s LDAP settings... One moment please..."), $g['product_name']) . "</b>";
+
+ echo "<table width='100%'>";
+
+ echo "<tr><td>" . gettext("Attempting connection to") . " " . "<td><center>$auth_server</b></center></td>";
+ if (ldap_test_connection($authcfg)) {
+ echo "<td><center><font color=green>OK</center></td></tr>";
+
+ echo "<tr><td>" . gettext("Attempting bind to") . " " . "<td><center>$auth_server</b></center></td>";
+ if (ldap_test_bind($authcfg)) {
+ echo "<td><center><font color=green>OK</center></td></tr>";
+
+ echo "<tr><td>" . gettext("Attempting to fetch Organizational Units from") . " " . "<td><center>$auth_server</b></center></td>";
+ $ous = ldap_get_user_ous(true, $authcfg);
+ if (count($ous)>1) {
+ echo "<td><center><font color=green>OK</center></td></tr>";
+ echo "</table>";
+ if (is_array($ous)) {
+ echo "<br/>";
+ echo "<b>" . gettext("Organization units found") . "</b>";
+ echo "<table width='100%'>";
+ foreach ($ous as $ou) {
+ echo "<tr><td onmouseover=\"this.style.backgroundColor='#ffffff';\" onmouseout=\"this.style.backgroundColor='#dddddd';\">" . $ou . "</td></tr>";
+ }
+ }
+ } else {
+ echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
+ }
+
+ echo "</table><p/>";
+
+ } else {
+ echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
+ echo "</table><p/>";
+ }
+ } else {
+ echo "<td><font color=red>" . gettext("failed") . "</td></tr>";
+ echo "</table><p/>";
+ }
+}
+
+?>
+ <p/>
+ <input type="Button" value="<?=gettext("Close"); ?>" onClick='Javascript:window.close();'>
+
+ </form>
+</body>
+</html>
diff --git a/src/usr/local/www/themes/_corporate/all.css b/src/usr/local/www/themes/_corporate/all.css
new file mode 100644
index 0000000..ea578fa
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/all.css
@@ -0,0 +1,1209 @@
+/*
+ * "corporate" theme by Guillaume Belanger <gbelanger@exosecurity.com>
+ * based on the original "metallic" theme */
+
+
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ background-color: #333333;
+ margin: 5px auto;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 815px;
+ margin: 5px auto;
+}
+
+#header {
+ background: url('images/header.gif') no-repeat;
+ background-position: 4px;
+ height: 102px;
+ width: 808px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.gif') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 28px;
+ left: 230px;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: bold;
+ font-family: Verdana;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 4px;
+ margin-top: 0px;
+ margin-left: 5px;
+ padding-top: 0px;
+ width: 800px;
+ background: url('images/horizontal.gif') repeat-y;
+}
+
+#left {
+ width: 800px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.gif') no-repeat;
+ top: -18px;
+ left: 7px;
+ width: 800px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 7px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -24px;
+ left: -2px;
+ width: 800px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 7.75em;
+ height: 28px;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ background-color: #202020;
+ /* background: url("images/menu_footer.gif") no-repeat; */
+ background-position: bottom;
+
+ padding: 0em 0em 0em 0;
+ margin-top: 4px;
+ padding-top: 0em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #303030;
+ border-top: 0px;
+ width: 8.9em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background: url('images/metal_bgr.gif') repeat-x;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background: url('images/metal_bgr_red.gif') repeat-x;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(/themes/metallic/images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/_corporate/bottom-loader.js b/src/usr/local/www/themes/_corporate/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/_corporate/graphlink.css b/src/usr/local/www/themes/_corporate/graphlink.css
new file mode 100644
index 0000000..5bb1b4c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id$
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/corporate/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/_corporate/images/alert_bgr.gif b/src/usr/local/www/themes/_corporate/images/alert_bgr.gif
new file mode 100755
index 0000000..65498f1
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/alert_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/footer.gif b/src/usr/local/www/themes/_corporate/images/footer.gif
new file mode 100755
index 0000000..e516113
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/header.gif b/src/usr/local/www/themes/_corporate/images/header.gif
new file mode 100755
index 0000000..aebc511
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/header.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/help.png b/src/usr/local/www/themes/_corporate/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/horizontal.gif b/src/usr/local/www/themes/_corporate/images/horizontal.gif
new file mode 100755
index 0000000..4ed7694
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/horizontal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/favicon.ico b/src/usr/local/www/themes/_corporate/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_3g.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif
new file mode 100644
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif
new file mode 100644
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alert.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif
new file mode 100644
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif
new file mode 100644
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif
new file mode 100644
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif
new file mode 100644
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif
new file mode 100644
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_block.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_cal.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_carp.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_chain.png b/src/usr/local/www/themes/_corporate/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_check.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_close.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_configure.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_down.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_e.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_error.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_help.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif
new file mode 100644
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif
new file mode 100644
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_in.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif
new file mode 100644
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_left.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_log.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_logs.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_match.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_minus.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_open.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_other.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_out.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_parp.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_pass.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reject.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_right.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_right.gif
new file mode 100644
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png
new file mode 100644
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system-group.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system-group.png
new file mode 100644
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png
new file mode 100644
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system-user.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system-user.png
new file mode 100644
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png
new file mode 100644
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png b/src/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_up.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png
new file mode 100644
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png
new file mode 100644
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_x.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif b/src/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/in.gif b/src/usr/local/www/themes/_corporate/images/icons/in.gif
new file mode 100644
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/in_d.gif b/src/usr/local/www/themes/_corporate/images/icons/in_d.gif
new file mode 100644
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/out.gif b/src/usr/local/www/themes/_corporate/images/icons/out.gif
new file mode 100644
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/icons/out_d.gif b/src/usr/local/www/themes/_corporate/images/icons/out_d.gif
new file mode 100644
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/log.png b/src/usr/local/www/themes/_corporate/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/logo.gif b/src/usr/local/www/themes/_corporate/images/logo.gif
new file mode 100755
index 0000000..08638ff
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/menu_down.gif b/src/usr/local/www/themes/_corporate/images/menu_down.gif
new file mode 100755
index 0000000..137de8d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/menu_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/menu_footer.gif b/src/usr/local/www/themes/_corporate/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/menu_right.gif b/src/usr/local/www/themes/_corporate/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/metal_bgr.gif b/src/usr/local/www/themes/_corporate/images/metal_bgr.gif
new file mode 100755
index 0000000..a0ca6c8
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/metal_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/metal_bgr_red.gif b/src/usr/local/www/themes/_corporate/images/metal_bgr_red.gif
new file mode 100755
index 0000000..c4a1465
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/metal_bgr_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bar_blue.gif b/src/usr/local/www/themes/_corporate/images/misc/bar_blue.gif
new file mode 100755
index 0000000..953cde1
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bar_gray.gif b/src/usr/local/www/themes/_corporate/images/misc/bar_gray.gif
new file mode 100755
index 0000000..a82da78
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bar_left.gif b/src/usr/local/www/themes/_corporate/images/misc/bar_left.gif
new file mode 100755
index 0000000..ea98cec
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bar_right.gif b/src/usr/local/www/themes/_corporate/images/misc/bar_right.gif
new file mode 100755
index 0000000..b5114b0
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/button.gif b/src/usr/local/www/themes/_corporate/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/key_128.gif b/src/usr/local/www/themes/_corporate/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/key_152.gif b/src/usr/local/www/themes/_corporate/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/key_256.gif b/src/usr/local/www/themes/_corporate/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/key_64.gif b/src/usr/local/www/themes/_corporate/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/left_background.gif b/src/usr/local/www/themes/_corporate/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/loader.gif b/src/usr/local/www/themes/_corporate/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/loader_tab.gif b/src/usr/local/www/themes/_corporate/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/logon.png b/src/usr/local/www/themes/_corporate/images/misc/logon.png
new file mode 100755
index 0000000..baf8a9d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_0.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_0.gif
new file mode 100755
index 0000000..160b56d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_0.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_1.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_1.gif
new file mode 100755
index 0000000..50342d6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_1.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_10.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_10.gif
new file mode 100755
index 0000000..06cba14
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_10.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_2.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_2.gif
new file mode 100755
index 0000000..9d10230
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_2.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_3.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_3.gif
new file mode 100755
index 0000000..1983f87
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_3.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_4.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_4.gif
new file mode 100755
index 0000000..f7158bd
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_4.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_5.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_5.gif
new file mode 100755
index 0000000..c7af593
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_5.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_6.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_6.gif
new file mode 100755
index 0000000..310eb22
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_6.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_7.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_7.gif
new file mode 100755
index 0000000..06bd2e8
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_7.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_8.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_8.gif
new file mode 100755
index 0000000..c6ef564
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_8.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/plogo_9.gif b/src/usr/local/www/themes/_corporate/images/misc/plogo_9.gif
new file mode 100755
index 0000000..4f0cd4d
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/plogo_9.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/progress_bar.gif b/src/usr/local/www/themes/_corporate/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/tri_c.gif b/src/usr/local/www/themes/_corporate/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif b/src/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/tri_o.gif b/src/usr/local/www/themes/_corporate/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif b/src/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/misc/widget_loader.gif b/src/usr/local/www/themes/_corporate/images/misc/widget_loader.gif
new file mode 100755
index 0000000..fad101f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/new_tab_menu.png b/src/usr/local/www/themes/_corporate/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/status.png b/src/usr/local/www/themes/_corporate/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/transparent.gif b/src/usr/local/www/themes/_corporate/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/images/transparent_pixel.gif b/src/usr/local/www/themes/_corporate/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/blank.gif b/src/usr/local/www/themes/_corporate/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png b/src/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/javascript/niftyjsCode.js b/src/usr/local/www/themes/_corporate/javascript/niftyjsCode.js
new file mode 100644
index 0000000..75ef8b0
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/_corporate/loader.js b/src/usr/local/www/themes/_corporate/loader.js
new file mode 100644
index 0000000..4512d5e
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/loader.js
@@ -0,0 +1,29 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (version < 7) {
+ document.write('<script type="text/javascript" src="/themes/corporate/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/corporate/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/_corporate/new_tab_menu.css b/src/usr/local/www/themes/_corporate/new_tab_menu.css
new file mode 100644
index 0000000..aae94e3
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(imagesimages/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/_corporate/new_tab_menu.png b/src/usr/local/www/themes/_corporate/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/_corporate/rrdcolors.inc.php b/src/usr/local/www/themes/_corporate/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/_corporate/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/code-red/all.css b/src/usr/local/www/themes/code-red/all.css
new file mode 100644
index 0000000..c26ec3d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/all.css
@@ -0,0 +1,1301 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/background.gif') no-repeat;
+ background-position : center 0px;
+ background-color: #4a0203;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 29px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 22px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 15px;
+ left: 210px;
+ font-size: 14px;
+ color: #990000;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #990000;
+ text-align: right;
+ padding-right: 18px;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -5px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 82px;
+ color: #999999;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ position: relative;
+ top: -35px;
+ left: 3px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 80px;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ /* top: 2em;
+ left: -2px; */
+ width: 120px;
+ font-weight: normal;
+ /* background: transparent bottom left no-repeat; */
+ /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020; */
+ /* background: url("images/menubgr_footer.png") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 5px;
+ padding-bottom: 10px;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 0px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+/* background-color: #990000; */
+ background: url(images/menubgr.png) repeat-y;
+ z-index: 2;
+/* color: #FFF; */
+}
+#navigation ul li ul li:hover {
+/* background-color: #666666; */
+ background-image: url(images/menubgr_highlight.png);
+ background-repeat: repeat-y;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 5px;
+ margin-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #999999;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #B1B1B1;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ background-color:#eee;
+ color:#666666;
+ font-weight: bold;
+ cursor: default;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/code-red/bottom-loader.js b/src/usr/local/www/themes/code-red/bottom-loader.js
new file mode 100755
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/code-red/favicon.ico b/src/usr/local/www/themes/code-red/favicon.ico
new file mode 100755
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/graphlink.css b/src/usr/local/www/themes/code-red/graphlink.css
new file mode 100755
index 0000000..13f65f0
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id$
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/nervecenter/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/code-red/images/alert_bgr.png b/src/usr/local/www/themes/code-red/images/alert_bgr.png
new file mode 100755
index 0000000..f84afd4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/alert_bgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/background.gif b/src/usr/local/www/themes/code-red/images/background.gif
new file mode 100755
index 0000000..3f0dc77
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/background.png b/src/usr/local/www/themes/code-red/images/background.png
new file mode 100755
index 0000000..e68893d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/background.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/button_left.gif b/src/usr/local/www/themes/code-red/images/button_left.gif
new file mode 100755
index 0000000..2e46d25
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/button_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/button_mid.gif b/src/usr/local/www/themes/code-red/images/button_mid.gif
new file mode 100755
index 0000000..4198d93
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/button_mid.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/button_right.gif b/src/usr/local/www/themes/code-red/images/button_right.gif
new file mode 100755
index 0000000..0faaa67
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/button_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/footer.png b/src/usr/local/www/themes/code-red/images/footer.png
new file mode 100755
index 0000000..e609b9d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/header.png b/src/usr/local/www/themes/code-red/images/header.png
new file mode 100755
index 0000000..4525e61
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/header.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/help.png b/src/usr/local/www/themes/code-red/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/horizontal.gif b/src/usr/local/www/themes/code-red/images/horizontal.gif
new file mode 100755
index 0000000..a280dcb
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/horizontal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/favicon.ico b/src/usr/local/www/themes/code-red/images/icons/favicon.ico
new file mode 100755
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_3g.gif b/src/usr/local/www/themes/code-red/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_advanced.gif b/src/usr/local/www/themes/code-red/images/icons/icon_advanced.gif
new file mode 100644
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif
new file mode 100644
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alert.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_block.gif b/src/usr/local/www/themes/code-red/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_block_add.gif b/src/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_block_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..9173058
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_cal.gif b/src/usr/local/www/themes/code-red/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_carp.gif b/src/usr/local/www/themes/code-red/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_chain.png b/src/usr/local/www/themes/code-red/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_check.gif b/src/usr/local/www/themes/code-red/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_close.gif b/src/usr/local/www/themes/code-red/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_configure.gif b/src/usr/local/www/themes/code-red/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_down.gif b/src/usr/local/www/themes/code-red/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_down_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_e.gif b/src/usr/local/www/themes/code-red/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_error.gif b/src/usr/local/www/themes/code-red/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_exclam.gif b/src/usr/local/www/themes/code-red/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_flag_de.png b/src/usr/local/www/themes/code-red/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_flag_en.png b/src/usr/local/www/themes/code-red/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_flag_es.png b/src/usr/local/www/themes/code-red/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_help.gif b/src/usr/local/www/themes/code-red/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_in.gif b/src/usr/local/www/themes/code-red/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_in_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_left.gif b/src/usr/local/www/themes/code-red/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_left_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_log.gif b/src/usr/local/www/themes/code-red/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_log_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_log_s.gif b/src/usr/local/www/themes/code-red/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_logs.gif b/src/usr/local/www/themes/code-red/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_match.gif b/src/usr/local/www/themes/code-red/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_match_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_minus.gif b/src/usr/local/www/themes/code-red/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_open.gif b/src/usr/local/www/themes/code-red/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_other.gif b/src/usr/local/www/themes/code-red/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_other_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_out.gif b/src/usr/local/www/themes/code-red/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_out_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_parp.gif b/src/usr/local/www/themes/code-red/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_pass.gif b/src/usr/local/www/themes/code-red/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reject.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_right.gif b/src/usr/local/www/themes/code-red/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_running.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_start.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_status.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system-group.png b/src/usr/local/www/themes/code-red/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system-user.png b/src/usr/local/www/themes/code-red/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_system_logout.png b/src/usr/local/www/themes/code-red/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_trapped.gif b/src/usr/local/www/themes/code-red/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_up.gif b/src/usr/local/www/themes/code-red/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_up_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_wlan.gif b/src/usr/local/www/themes/code-red/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_x.gif b/src/usr/local/www/themes/code-red/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_x_d.gif b/src/usr/local/www/themes/code-red/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/icon_x_p.gif b/src/usr/local/www/themes/code-red/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/in.gif b/src/usr/local/www/themes/code-red/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/in_d.gif b/src/usr/local/www/themes/code-red/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/out.gif b/src/usr/local/www/themes/code-red/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/icons/out_d.gif b/src/usr/local/www/themes/code-red/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/log.png b/src/usr/local/www/themes/code-red/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/logo.gif b/src/usr/local/www/themes/code-red/images/logo.gif
new file mode 100755
index 0000000..3455d6b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/logobig.jpg b/src/usr/local/www/themes/code-red/images/logobig.jpg
new file mode 100755
index 0000000..62922ce
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/logon-background.gif b/src/usr/local/www/themes/code-red/images/logon-background.gif
new file mode 100755
index 0000000..0176101
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/logon-background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menu_down.gif b/src/usr/local/www/themes/code-red/images/menu_down.gif
new file mode 100755
index 0000000..137de8d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menu_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menu_footer.gif b/src/usr/local/www/themes/code-red/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menu_right.gif b/src/usr/local/www/themes/code-red/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menubgr.png b/src/usr/local/www/themes/code-red/images/menubgr.png
new file mode 100755
index 0000000..45e0ec7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menubgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menubgr_footer.png b/src/usr/local/www/themes/code-red/images/menubgr_footer.png
new file mode 100755
index 0000000..5d351e4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menubgr_footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/menubgr_highlight.png b/src/usr/local/www/themes/code-red/images/menubgr_highlight.png
new file mode 100755
index 0000000..f00582b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/menubgr_highlight.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/metal_bgr.gif b/src/usr/local/www/themes/code-red/images/metal_bgr.gif
new file mode 100755
index 0000000..a0ca6c8
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/metal_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/metal_bgr_red.gif b/src/usr/local/www/themes/code-red/images/metal_bgr_red.gif
new file mode 100755
index 0000000..c4a1465
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/metal_bgr_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/background.gif b/src/usr/local/www/themes/code-red/images/misc/background.gif
new file mode 100755
index 0000000..87cceb3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bar_blue.gif b/src/usr/local/www/themes/code-red/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bar_gray.gif b/src/usr/local/www/themes/code-red/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bar_left.gif b/src/usr/local/www/themes/code-red/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bar_right.gif b/src/usr/local/www/themes/code-red/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/button.gif b/src/usr/local/www/themes/code-red/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/graph.png b/src/usr/local/www/themes/code-red/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/key_128.gif b/src/usr/local/www/themes/code-red/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/key_152.gif b/src/usr/local/www/themes/code-red/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/key_256.gif b/src/usr/local/www/themes/code-red/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/key_64.gif b/src/usr/local/www/themes/code-red/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/left_background.gif b/src/usr/local/www/themes/code-red/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/loader.gif b/src/usr/local/www/themes/code-red/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/loader_all.gif b/src/usr/local/www/themes/code-red/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/loader_filter.gif b/src/usr/local/www/themes/code-red/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/loader_tab.gif b/src/usr/local/www/themes/code-red/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/logon.png b/src/usr/local/www/themes/code-red/images/misc/logon.png
new file mode 100755
index 0000000..7921782
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_0.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_0.gif
new file mode 100755
index 0000000..160b56d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_0.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_1.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_1.gif
new file mode 100755
index 0000000..50342d6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_1.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_10.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_10.gif
new file mode 100755
index 0000000..06cba14
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_10.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_2.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_2.gif
new file mode 100755
index 0000000..9d10230
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_2.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_3.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_3.gif
new file mode 100755
index 0000000..1983f87
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_3.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_4.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_4.gif
new file mode 100755
index 0000000..f7158bd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_4.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_5.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_5.gif
new file mode 100755
index 0000000..c7af593
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_5.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_6.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_6.gif
new file mode 100755
index 0000000..310eb22
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_6.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_7.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_7.gif
new file mode 100755
index 0000000..06bd2e8
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_7.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_8.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_8.gif
new file mode 100755
index 0000000..c6ef564
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_8.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/plogo_9.gif b/src/usr/local/www/themes/code-red/images/misc/plogo_9.gif
new file mode 100755
index 0000000..4f0cd4d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/plogo_9.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/progress_bar.gif b/src/usr/local/www/themes/code-red/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/rrd_error.png b/src/usr/local/www/themes/code-red/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_alerter.gif b/src/usr/local/www/themes/code-red/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_left.gif b/src/usr/local/www/themes/code-red/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_page_loading.gif b/src/usr/local/www/themes/code-red/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_reload_all.gif b/src/usr/local/www/themes/code-red/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/status_right.gif b/src/usr/local/www/themes/code-red/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/tri_c.gif b/src/usr/local/www/themes/code-red/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/tri_c_black.gif b/src/usr/local/www/themes/code-red/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/tri_o.gif b/src/usr/local/www/themes/code-red/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/tri_o_black.gif b/src/usr/local/www/themes/code-red/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/misc/widget_loader.gif b/src/usr/local/www/themes/code-red/images/misc/widget_loader.gif
new file mode 100755
index 0000000..ca35e2a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/new_tab_menu.png b/src/usr/local/www/themes/code-red/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/status.png b/src/usr/local/www/themes/code-red/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/transparent.gif b/src/usr/local/www/themes/code-red/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/images/transparent_pixel.gif b/src/usr/local/www/themes/code-red/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/blank.gif b/src/usr/local/www/themes/code-red/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js
new file mode 100755
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js
new file mode 100755
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js
new file mode 100755
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js
new file mode 100755
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js
new file mode 100755
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js
new file mode 100755
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js
new file mode 100755
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js
new file mode 100755
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js
new file mode 100755
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js
new file mode 100755
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css
new file mode 100755
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js
new file mode 100755
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/code-red/javascript/ie7/test-trans.png b/src/usr/local/www/themes/code-red/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/img/grey-40.png b/src/usr/local/www/themes/code-red/javascript/img/grey-40.png
new file mode 100755
index 0000000..758b716
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/img/grey-40.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/img/submenu-off.gif b/src/usr/local/www/themes/code-red/javascript/img/submenu-off.gif
new file mode 100755
index 0000000..ddcdcae
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/img/submenu-off.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/img/submenu-on.gif b/src/usr/local/www/themes/code-red/javascript/img/submenu-on.gif
new file mode 100755
index 0000000..7a58077
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/img/submenu-on.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/img/white-90.png b/src/usr/local/www/themes/code-red/javascript/img/white-90.png
new file mode 100755
index 0000000..efc84b4
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/img/white-90.png
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/img/x.gif b/src/usr/local/www/themes/code-red/javascript/img/x.gif
new file mode 100755
index 0000000..5bfd67a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/img/x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/code-red/javascript/niftyjsCode.js b/src/usr/local/www/themes/code-red/javascript/niftyjsCode.js
new file mode 100644
index 0000000..e71ea14
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/javascript/transmenu-body.php b/src/usr/local/www/themes/code-red/javascript/transmenu-body.php
new file mode 100755
index 0000000..6da8efc
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/transmenu-body.php
@@ -0,0 +1,53 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-body.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetBodyJS() {
+ global $rootmenu;
+
+ if (isset($rootmenu)) {
+ return $rootmenu->getMenuJScript();
+ } else if (empty($rootmenu)) {
+ return "alert('No rootmenu object found.');";
+ } else {
+ return "alert('No JavaScript attached to rootmenu object.');";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/code-red/javascript/transmenu-head.php b/src/usr/local/www/themes/code-red/javascript/transmenu-head.php
new file mode 100755
index 0000000..7d72c30
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/transmenu-head.php
@@ -0,0 +1,87 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-head.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetHeadJS() {
+ global $g, $rootmenu;
+
+ $transmenu_stub =<<<EOD
+ function tmenuinit() {
+ //==========================================================================================
+ // if supported, initialize TransMenus
+ //==========================================================================================
+ // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
+ // This is better than server-side checking because it will also catch browsers which would
+ // normally support the menus but have javascript disabled.
+ //
+ // If supported, call initialize() and then hook whatever image rollover code you need to do
+ // to the .onactivate and .ondeactivate events for each menu.
+ //==========================================================================================
+ if (TransMenu.isSupported()) {
+ TransMenu.initialize();
+
+ // hook all the highlight swapping of the main toolbar to menu activation/deactivation
+ // instead of simple rollover to get the effect where the button stays hightlit until
+ // the menu is closed.
+ @@CHILD_JSCRIPT@@
+ }
+ } // end function
+EOD;
+
+ if (empty($rootmenu)) {
+ require_once("menudef.inc");
+ }
+
+ $childJScript = "";
+ foreach ($rootmenu->getChildren() as $component) {
+ $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
+
+ $childJScript .=<<<EOD
+ {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
+ {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
+
+EOD;
+ }
+
+ $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
+
+ return $transmenu_stub;
+}
+
+?>
diff --git a/src/usr/local/www/themes/code-red/javascript/transmenu.org b/src/usr/local/www/themes/code-red/javascript/transmenu.org
new file mode 100755
index 0000000..6c9e353
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/transmenu.org
@@ -0,0 +1,785 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ *
+ * Customizable multi-level animated DHTML menus with transparency.
+ *
+ * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * =================================================================================================
+ * updates:
+ * 04.19.04 fixed cascade problem with menus nested greater than two levels.
+ * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
+ * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
+ * also made gecko check a little more strict by specifying build no.
+ * ============================================================================================== */
+
+
+
+//==================================================================================================
+// Configuration properties
+//==================================================================================================
+TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
+TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
+TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
+TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
+TransMenu.menuPadding = 5; // padding between menu border and items grid
+TransMenu.itemPadding = 3; // additional padding around each item
+TransMenu.shadowSize = 2; // size of shadow under menu
+TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
+TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
+TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
+TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
+TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
+TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
+TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
+
+
+//==================================================================================================
+// Internal use properties
+//==================================================================================================
+TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
+TransMenu.direction = {down:1,right:2};
+TransMenu.registry = [];
+TransMenu._maxZ = 100;
+
+
+
+//==================================================================================================
+// Static methods
+//==================================================================================================
+// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
+TransMenu.isSupported = function() {
+ var ua = navigator.userAgent.toLowerCase();
+ var pf = navigator.platform.toLowerCase();
+ var an = navigator.appName;
+ var r = false;
+
+ if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
+ else if (an == "Microsoft Internet Explorer") {
+ if (document.getElementById) { // ie5.1+ mac,win
+ if (pf.indexOf("mac") == 0) {
+ r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
+ }
+ else r = true;
+ }
+ }
+
+ return r;
+}
+
+// call this in onload once menus have been created
+TransMenu.initialize = function() {
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ menu.initialize();
+ }
+}
+
+// call this in document body to write out menu html
+TransMenu.renderAll = function() {
+ var aMenuHtml = [];
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ aMenuHtml[i] = menu.toString();
+ }
+ document.write(aMenuHtml.join(""));
+}
+
+//==================================================================================================
+// TransMenu constructor (only called internally)
+//==================================================================================================
+// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
+// reference to an HTML element, or a TransMenuItem from an existing menu.
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menu from actuator
+// iTop : Top pixel offset of menu from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+// parentMenuSet : Menuset this menu will be added to.
+//==================================================================================================
+function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
+ // public methods
+ this.addItem = addItem;
+ this.addMenu = addMenu;
+ this.toString = toString;
+ this.initialize = initialize;
+ this.isOpen = false;
+ this.show = show;
+ this.hide = hide;
+ this.items = [];
+
+ // events
+ this.onactivate = new Function(); // when the menu starts to slide open
+ this.ondeactivate = new Function(); // when the menu finishes sliding closed
+ this.onmouseover = new Function(); // when the menu has been moused over
+ this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
+ this.ondequeue = new Function();
+
+ // initialization
+ this.index = TransMenu.registry.length;
+ TransMenu.registry[this.index] = this;
+
+ var id = "TransMenu" + this.index;
+ var contentHeight = null;
+ var contentWidth = null;
+ var childMenuSet = null;
+ var animating = false;
+ var childMenus = [];
+ var slideAccel = -1;
+ var elmCache = null;
+ var ready = false;
+ var _this = this;
+ var a = null;
+
+ var pos = iDirection == TransMenu.direction.down ? "top" : "left";
+ var dim = null;
+
+ // private and public method implimentations
+ function addItem(sText, sUrl) {
+ var item = new TransMenuItem(sText, sUrl, this);
+ item._index = this.items.length;
+ this.items[item._index] = item;
+ }
+
+ function addMenu(oMenuItem) {
+ if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
+
+ if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
+
+ var m = childMenuSet.addMenu(oMenuItem);
+
+ childMenus[oMenuItem._index] = m;
+ m.onmouseover = child_mouseover;
+ m.ondeactivate = child_deactivate;
+ m.onqueue = child_queue;
+ m.ondequeue = child_dequeue;
+
+ return m;
+ }
+
+ function initialize() {
+ initCache();
+ initEvents();
+ initSize();
+ ready = true;
+ }
+
+ function show() {
+ //dbg_dump("show");
+ if (ready) {
+ _this.isOpen = true;
+ animating = true;
+ setContainerPos();
+ elmCache["clip"].style.visibility = "visible";
+ elmCache["clip"].style.zIndex = TransMenu._maxZ++;
+ //dbg_dump("maxZ: " + TransMenu._maxZ);
+ slideStart();
+ _this.onactivate();
+ }
+ }
+
+ function hide() {
+ if (ready) {
+ _this.isOpen = false;
+ animating = true;
+
+ for (var i = 0, item = null; item = elmCache.item[i]; i++)
+ dehighlight(item);
+
+ if (childMenuSet) childMenuSet.hide();
+
+ slideStart();
+ _this.ondeactivate();
+ }
+ }
+
+ function setContainerPos() {
+ var sub = oActuator.constructor == TransMenuItem;
+ var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
+ var el = act;
+
+ var x = 0;
+ var y = 0;
+
+
+ var minX = 0;
+ var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
+ var minY = 0;
+ var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
+
+ // add up all offsets... subtract any scroll offset
+ while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
+ x += el.offsetLeft;
+ y += el.offsetTop;
+
+ if (el.scrollLeft) x -= el.scrollLeft;
+ if (el.scrollTop) y -= el.scrollTop;
+
+ el = el.offsetParent;
+ }
+
+ if (oActuator.constructor == TransMenuItem) {
+ x += parseInt(el.parentNode.style.left);
+ y += parseInt(el.parentNode.style.top);
+ }
+
+ switch (iReferencePoint) {
+ case TransMenu.reference.topLeft:
+ break;
+ case TransMenu.reference.topRight:
+ x += act.offsetWidth;
+ break;
+ case TransMenu.reference.bottomLeft:
+ y += act.offsetHeight;
+ break;
+ case TransMenu.reference.bottomRight:
+ x += act.offsetWidth;
+ y += act.offsetHeight;
+ break;
+ }
+
+ x += iLeft;
+ y += iTop;
+
+ x = Math.max(Math.min(x, maxX), minX);
+ y = Math.max(Math.min(y, maxY), minY);
+
+ elmCache["clip"].style.left = x + "px";
+ elmCache["clip"].style.top = y + "px";
+ }
+
+ function slideStart() {
+ var x0 = parseInt(elmCache["content"].style[pos]);
+ var x1 = _this.isOpen ? 0 : -dim;
+
+ if (a != null) a.stop();
+ a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
+
+ a.onframe = slideFrame;
+ a.onend = slideEnd;
+
+ a.start();
+ }
+
+ function slideFrame(x) {
+ elmCache["content"].style[pos] = x + "px";
+ }
+
+ function slideEnd() {
+ if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
+ animating = false;
+ }
+
+ function initSize() {
+ // everything is based off the size of the items table...
+ var ow = elmCache["items"].offsetWidth;
+ var oh = elmCache["items"].offsetHeight;
+ var ua = navigator.userAgent.toLowerCase();
+
+ // clipping container should be ow/oh + the size of the shadow
+ elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
+ elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
+
+ // same with content...
+ elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
+ elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
+
+ contentHeight = oh + TransMenu.shadowSize;
+ contentWidth = ow + TransMenu.shadowSize;
+
+ dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
+
+ // set initially closed
+ elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
+ elmCache["clip"].style.visibility = "hidden";
+
+ // if *not* mac/ie 5
+ if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
+ // set background div to offset size
+ elmCache["background"].style.width = ow + "px";
+ elmCache["background"].style.height = oh + "px";
+ elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
+ elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
+ elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
+ }
+ // mac ie is a little different because we use a PNG for the transparency
+ else {
+ // set background div to offset size
+ elmCache["background"].firstChild.src = TransMenu.backgroundPng;
+ elmCache["background"].firstChild.width = ow;
+ elmCache["background"].firstChild.height = oh;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
+ elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
+ elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
+ }
+ }
+
+ function initCache() {
+ var menu = document.getElementById(id);
+ var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
+
+ elmCache = {};
+ elmCache["clip"] = menu;
+ elmCache["item"] = [];
+
+ for (var i = 0, elm = null; elm = all[i]; i++) {
+ switch (elm.className) {
+ case "items":
+ case "content":
+ case "background":
+ case "shadowRight":
+ case "shadowBottom":
+ elmCache[elm.className] = elm;
+ break;
+ case "item":
+ elm._index = elmCache["item"].length;
+ elmCache["item"][elm._index] = elm;
+ break;
+ }
+ }
+
+ // hack!
+ _this.elmCache = elmCache;
+ }
+
+ function initEvents() {
+ // hook item mouseover
+ for (var i = 0, item = null; item = elmCache.item[i]; i++) {
+ item.onmouseover = item_mouseover;
+ item.onmouseout = item_mouseout;
+ item.onclick = item_click;
+ }
+
+ // hook actuation
+ if (typeof oActuator.tagName != "undefined") {
+ oActuator.onmouseover = actuator_mouseover;
+ oActuator.onmouseout = actuator_mouseout;
+ }
+
+ // hook menu mouseover
+ elmCache["content"].onmouseover = content_mouseover;
+ elmCache["content"].onmouseout = content_mouseout;
+ }
+
+ function highlight(oRow) {
+ oRow.className = "item hover";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
+ }
+
+ function dehighlight(oRow) {
+ oRow.className = "item";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
+ }
+
+ function item_mouseover() {
+ if (!animating) {
+ highlight(this);
+
+ if (childMenus[this._index])
+ childMenuSet.showMenu(childMenus[this._index]);
+ else if (childMenuSet) childMenuSet.hide();
+ }
+ }
+
+ function item_mouseout() {
+ if (!animating) {
+ if (childMenus[this._index])
+ childMenuSet.hideMenu(childMenus[this._index]);
+ else // otherwise child_deactivate will do this
+ dehighlight(this);
+ }
+ }
+
+ function item_click() {
+ if (!animating) {
+ if (_this.items[this._index].url)
+ location.href = _this.items[this._index].url;
+ }
+ }
+
+ function actuator_mouseover() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function actuator_mouseout() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function content_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ _this.onmouseover();
+ }
+ }
+
+ function content_mouseout() {
+ if (!animating) {
+ parentMenuSet.hideMenu(_this);
+ }
+ }
+
+ function child_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ }
+ }
+
+ function child_deactivate() {
+ for (var i = 0; i < childMenus.length; i++) {
+ if (childMenus[i] == this) {
+ dehighlight(elmCache["item"][i]);
+ break;
+ }
+ }
+ }
+
+ function child_queue() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function child_dequeue() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function toString() {
+ var aHtml = [];
+ var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
+
+ for (var i = 0, item = null; item = this.items[i]; i++) {
+ aHtml[i] = item.toString(childMenus[i]);
+ }
+
+ return '<div id="' + id + '" class="' + sClassName + '">' +
+ '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
+ aHtml.join('') +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
+ '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '</div></div>';
+ }
+}
+
+
+//==================================================================================================
+// TransMenuSet
+//==================================================================================================
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menus from actuator
+// iTop : Top pixel offset of menus from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+//==================================================================================================
+TransMenuSet.registry = [];
+
+function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
+ // public methods
+ this.addMenu = addMenu;
+ this.showMenu = showMenu;
+ this.hideMenu = hideMenu;
+ this.hide = hide;
+ this.hideCurrent = hideCurrent;
+
+ // initialization
+ var menus = [];
+ var _this = this;
+ var current = null;
+
+ this.index = TransMenuSet.registry.length;
+ TransMenuSet.registry[this.index] = this;
+
+ // method implimentations...
+ function addMenu(oActuator) {
+ var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
+ menus[menus.length] = m;
+ return m;
+ }
+
+ function showMenu(oMenu) {
+ if (oMenu != current) {
+ // close currently open menu
+ if (current != null) hide(current);
+
+ // set current menu to this one
+ current = oMenu;
+
+ // if this menu is closed, open it
+ oMenu.show();
+ }
+ else {
+ // hide pending calls to close this menu
+ cancelHide(oMenu);
+ }
+ }
+
+ function hideMenu(oMenu) {
+ //dbg_dump("hideMenu a " + oMenu.index);
+ if (current == oMenu && oMenu.isOpen) {
+ //dbg_dump("hideMenu b " + oMenu.index);
+ if (!oMenu.hideTimer) scheduleHide(oMenu);
+ }
+ }
+
+ function scheduleHide(oMenu) {
+ //dbg_dump("scheduleHide " + oMenu.index);
+ oMenu.onqueue();
+ oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
+ }
+
+ function cancelHide(oMenu) {
+ //dbg_dump("cancelHide " + oMenu.index);
+ if (oMenu.hideTimer) {
+ oMenu.ondequeue();
+ window.clearTimeout(oMenu.hideTimer);
+ oMenu.hideTimer = null;
+ }
+ }
+
+ function hide(oMenu) {
+ if (!oMenu && current) oMenu = current;
+
+ if (oMenu && current == oMenu && oMenu.isOpen) {
+ hideCurrent();
+ }
+ }
+
+ function hideCurrent() {
+ if (null != current) {
+ cancelHide(current);
+ current.hideTimer = null;
+ current.hide();
+ current = null;
+ }
+ }
+}
+
+//==================================================================================================
+// TransMenuItem (internal)
+// represents an item in a dropdown
+//==================================================================================================
+// sText : The item display text
+// sUrl : URL to load when the item is clicked
+// oParent : Menu this item is a part of
+//==================================================================================================
+function TransMenuItem(sText, sUrl, oParent) {
+ this.toString = toString;
+ this.text = sText;
+ this.url = sUrl;
+ this.parentMenu = oParent;
+
+ function toString(bDingbat) {
+ var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
+ var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
+ var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
+ var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
+
+ return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
+ sText + '</td><td width="14" style="' + sPaddingRight + '">' +
+ '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
+ }
+}
+
+
+
+
+
+
+//=====================================================================
+// Accel[erated] [an]imation object
+// change a property of an object over time in an accelerated fashion
+//=====================================================================
+// obj : reference to the object whose property you'd like to animate
+// prop : property you would like to change eg: "left"
+// to : final value of prop
+// time : time the animation should take to run
+// zip : optional. specify the zippiness of the acceleration. pick a
+// number between -1 and 1 where -1 is full decelerated, 1 is
+// full accelerated, and 0 is linear (no acceleration). default
+// is 0.
+// unit : optional. specify the units for use with prop. default is
+// "px".
+//=====================================================================
+// bezier functions lifted from the lib_animation.js file in the
+// 13th Parallel API. www.13thparallel.org
+//=====================================================================
+
+function Accelimation(from, to, time, zip) {
+ if (typeof zip == "undefined") zip = 0;
+ if (typeof unit == "undefined") unit = "px";
+
+ this.x0 = from;
+ this.x1 = to;
+ this.dt = time;
+ this.zip = -zip;
+ this.unit = unit;
+ this.timer = null;
+ this.onend = new Function();
+ this.onframe = new Function();
+}
+
+
+
+//=====================================================================
+// public methods
+//=====================================================================
+
+// after you create an accelimation, you call this to start it-a runnin'
+Accelimation.prototype.start = function() {
+ this.t0 = new Date().getTime();
+ this.t1 = this.t0 + this.dt;
+ var dx = this.x1 - this.x0;
+ this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
+ this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
+ Accelimation._add(this);
+}
+
+// and if you need to stop it early for some reason...
+Accelimation.prototype.stop = function() {
+ Accelimation._remove(this);
+}
+
+
+
+//=====================================================================
+// private methods
+//=====================================================================
+
+// paints one frame. gets called by Accelimation._paintAll.
+Accelimation.prototype._paint = function(time) {
+ if (time < this.t1) {
+ var elapsed = time - this.t0;
+ this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
+ }
+ else this._end();
+}
+
+// ends the animation
+Accelimation.prototype._end = function() {
+ Accelimation._remove(this);
+ this.onframe(this.x1);
+ this.onend();
+}
+
+
+
+
+//=====================================================================
+// static methods (all private)
+//=====================================================================
+
+// add a function to the list of ones to call periodically
+Accelimation._add = function(o) {
+ var index = this.instances.length;
+ this.instances[index] = o;
+ // if this is the first one, start the engine
+ if (this.instances.length == 1) {
+ this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
+ }
+}
+
+// remove a function from the list
+Accelimation._remove = function(o) {
+ for (var i = 0; i < this.instances.length; i++) {
+ if (o == this.instances[i]) {
+ this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
+ break;
+ }
+ }
+ // if that was the last one, stop the engine
+ if (this.instances.length == 0) {
+ window.clearInterval(this.timerID);
+ this.timerID = null;
+ }
+}
+
+// "engine" - call each function in the list every so often
+Accelimation._paintAll = function() {
+ var now = new Date().getTime();
+ for (var i = 0; i < this.instances.length; i++) {
+ this.instances[i]._paint(now);
+ }
+}
+
+
+// Bezier functions:
+Accelimation._B1 = function(t) { return t*t*t }
+Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
+Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
+Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
+
+
+//Finds the coordinates of a point at a certain stage through a bezier curve
+Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
+ return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
+}
+
+
+//=====================================================================
+// static properties
+//=====================================================================
+
+Accelimation.instances = [];
+Accelimation.targetRes = 10;
+Accelimation.timerID = null;
+
+
+//=====================================================================
+// IE win memory cleanup
+//=====================================================================
+
+if (window.attachEvent) {
+ var cearElementProps = [
+ 'data',
+ 'onmouseover',
+ 'onmouseout',
+ 'onmousedown',
+ 'onmouseup',
+ 'ondblclick',
+ 'onclick',
+ 'onselectstart',
+ 'oncontextmenu'
+ ];
+
+ window.attachEvent("onunload", function() {
+ var el;
+ for(var d = document.all.length;d--;){
+ el = document.all[d];
+ for(var c = cearElementProps.length;c--;){
+ el[cearElementProps[c]] = null;
+ }
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/javascript/transmenuC.js b/src/usr/local/www/themes/code-red/javascript/transmenuC.js
new file mode 100755
index 0000000..88626c7
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/javascript/transmenuC.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ * Customizable multi-level animated DHTML menus with transparency.
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * ============================================================================================== */
+TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
+else r=true;}}
+return r;}
+TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
+TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
+document.write(aMenuHtml.join(""));}
+function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
+function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
+function initialize(){initCache();initEvents();initSize();ready=true;}
+function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
+function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
+function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
+if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
+switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
+x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
+function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
+function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
+function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
+function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
+else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
+function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
+_this.elmCache=elmCache;}
+function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
+if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
+elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
+function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
+function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
+function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
+function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
+function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
+function actuator_mouseover(){parentMenuSet.showMenu(_this);}
+function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
+function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
+function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
+function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
+function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
+function child_queue(){parentMenuSet.hideMenu(_this);}
+function child_dequeue(){parentMenuSet.showMenu(_this);}
+function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
+return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
+TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
+function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
+else{cancelHide(oMenu);}}
+function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
+function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
+function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
+function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
+function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
+function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
+var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
+return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
+function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
+Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
+Accelimation.prototype.stop=function(){Accelimation._remove(this);}
+Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
+else this._end();}
+Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
+Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
+Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
+if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
+Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
+Accelimation._B1=function(t){return t*t*t}
+Accelimation._B2=function(t){return 3*t*t*(1-t)}
+Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
+Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
+Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
+Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
+if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/jsevents/body.def b/src/usr/local/www/themes/code-red/jsevents/body.def
new file mode 100755
index 0000000..501d548
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/jsevents/body.def
@@ -0,0 +1,7 @@
+# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
+# where: forbidden pages are those pages that should *not* use
+# the particular JavaScript function within the JS event
+# specified below.
+# $Id$
+#
+onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/loader.js b/src/usr/local/www/themes/code-red/loader.js
new file mode 100644
index 0000000..7f67dc0
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/loader.js
@@ -0,0 +1,29 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/code-red/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/code-red/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/code-red/login.css b/src/usr/local/www/themes/code-red/login.css
new file mode 100755
index 0000000..6ccdd42
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/login.css
@@ -0,0 +1,1136 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/logon-background.gif') no-repeat;
+ background-position : center 0px;
+ background-color: #4a0203;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: -40px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -390px;
+ left: 60px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -112px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/menu.inc b/src/usr/local/www/themes/code-red/menu.inc
new file mode 100755
index 0000000..a274410
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/menu.inc
@@ -0,0 +1,177 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ menu.inc
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+require("menu.inc");
+
+define("TMENU_STUB", "
+ // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
+ // but you can experiment with effect on loadtime.
+ if (TransMenu.isSupported()) {
+
+ //==================================================================================================
+ // create a set of dropdowns
+ //==================================================================================================
+ // the first param should always be down, as it is here
+ //
+ // The second and third param are the top and left offset positions of the menus from their actuators
+ // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
+ // something like -5, 5
+ //
+ // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
+ // of the actuator from which to measure the offset positions above. Here we are saying we want the
+ // menu to appear directly below the bottom left corner of the actuator
+ //==================================================================================================
+ var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
+
+ //==================================================================================================
+ // create a dropdown menu
+ //==================================================================================================
+ // the first parameter should be the HTML element which will act actuator for the menu
+ //==================================================================================================
+
+ @@MENU_DEFINITIONS@@
+
+ //==================================================================================================
+ // write drop downs into page
+ //==================================================================================================
+ // this method writes all the HTML for the menus into the page with document.write(). It must be
+ // called within the body of the HTML page.
+ //==================================================================================================
+ TransMenu.renderAll();
+ }
+");
+
+class NervecenterMenu extends Menu {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+ private $menuID = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $c);
+
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+ $this->menuID = $id;
+
+ if ($this->hasParent()) {
+ $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
+ }
+ } // end __construct
+
+ public function getMenuID() {
+ return $this->menuID;
+ }
+
+ public function setMenuID($myMenuID) {
+ $this->menuID = $myMenuID;
+ }
+
+ public function getMenuJScript() {
+ $childJScript = "";
+ foreach ($this->getChildren() as $component) {
+ $childJScript .= $component->getMenuJScript();
+ }
+
+ if (! $this->hasParent()) {
+ $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
+ } else {
+ $this->menuJScript .= "\n$childJScript\n";
+ }
+
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ if (! $this->hasParent()) {
+ $menuMarkup =<<<EOD
+ <div id="menu">
+ @@CHILD_ELEMENTS@@
+ </div>
+
+EOD;
+ } else {
+ $name = gettext($this->getID());
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+
+ $menuMarkup =<<<EOD
+ <a id="{$id}" href="#">{$name}</a>
+ @@CHILD_ELEMENTS@@
+EOD;
+ }
+
+ $childMarkup = "";
+ foreach ($this->getChildren() as $component) {
+ $childMarkup .= $component;
+ }
+
+ $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
+
+ return $menuMarkup;
+ }
+}
+
+class NervecenterMenuItem extends MenuItem {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $href, $c);
+
+ $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
+ $name = gettext($this->getID());
+ $file = $this->getFile();
+
+ $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
+ }
+
+ public function getMenuJScript() {
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ return "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/code-red/new_tab_menu.css b/src/usr/local/www/themes/code-red/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/no_big_logo b/src/usr/local/www/themes/code-red/no_big_logo
new file mode 100755
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/rrdcolors.inc.php b/src/usr/local/www/themes/code-red/rrdcolors.inc.php
new file mode 100755
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/code-red/styles/menustyles.css b/src/usr/local/www/themes/code-red/styles/menustyles.css
new file mode 100755
index 0000000..06b3c7a
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/styles/menustyles.css
@@ -0,0 +1,44 @@
+#navigation {
+ /* border:1px solid black; */
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ padding-top: 4px;
+ }
+
+#menu {
+ /* background: #990000; */
+ /* border-bottom:1px solid white; */
+ padding: 0 0 0 0;
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ }
+#menu a {
+ padding: 2px 28px 4px 28px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.0em;
+ color: #FFFFFF;
+ width: 08%;
+ height: 16px;
+ }
+#menu a.hover {
+ background: #AF2020;
+ }
+#menu span {
+ display: none;
+ }
+
+#subnav {
+ font-size: 10px;
+ margin-bottom: 2em;
+ }
+#subnav a {
+ color: #FF0000; /* #FB3B00; */
+ margin-right: 1em;
+ }
+#subnav span {
+ color: silver;
+ margin-right: 1em;
+ }
diff --git a/src/usr/local/www/themes/code-red/styles/transmenu.css b/src/usr/local/www/themes/code-red/styles/transmenu.css
new file mode 100755
index 0000000..f683574
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/styles/transmenu.css
@@ -0,0 +1,75 @@
+/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
+.transMenu {
+ position:absolute;
+ overflow:hidden;
+ left:-1000px;
+ top:-1000px;
+ }
+
+/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
+.transMenu .content {
+ position:absolute;
+ }
+
+/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
+.transMenu .items {
+ position:relative;
+ left:0px; top:0px;
+ z-index:2;
+ }
+
+.transMenu.top .items {
+ border-top:none;
+ }
+
+/* each TR.item is one menu item */
+.transMenu .item {
+ color: #FFFFFF; /* #336; */
+ font-size: 1.1em;
+ font-weight: normal;
+ font-family:sans-serif;
+ text-decoration:none;
+ /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
+ border:none;
+ cursor:pointer;
+ cursor:hand;
+ }
+
+/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
+/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
+.transMenu .background {
+ position:absolute;
+ left:0px; top:0px;
+ z-index:1;
+ -moz-opacity:.8;
+ filter:alpha(opacity=80);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowRight {
+ position:absolute;
+ z-index:3;
+ top:3px; width:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowBottom {
+ position:absolute;
+ z-index:1;
+ left:3px; height:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
+.transMenu .item.hover {
+ background:#fdfdfd;
+ color:black;
+ }
+
+/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
+.transMenu .item img {
+ margin-left:10px;
+ } \ No newline at end of file
diff --git a/src/usr/local/www/themes/code-red/wizard.css b/src/usr/local/www/themes/code-red/wizard.css
new file mode 100755
index 0000000..c0a7546
--- /dev/null
+++ b/src/usr/local/www/themes/code-red/wizard.css
@@ -0,0 +1,1068 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #5f0406;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/logon-background.gif') no-repeat;
+ background-position : center 0px;
+ background-color: #4a0203;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+
+#graph {
+ position: relative;
+ z-index: 10;
+}
+
+
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
diff --git a/src/usr/local/www/themes/metallic/all.css b/src/usr/local/www/themes/metallic/all.css
new file mode 100644
index 0000000..18a8c0b
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/all.css
@@ -0,0 +1,1269 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+}
+
+.nowrap { white-space: nowrap; }
+
+.infobox {
+ width:100%;
+}
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ background-color: #333333;
+ margin: 5px auto;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 815px;
+ margin: 5px auto;
+}
+
+#header {
+ background: url('images/header.gif') no-repeat;
+ background-position: 4px;
+ height: 102px;
+ width: 808px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.gif') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: bold;
+ font-family: Verdana;
+ text-align: center;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 4px;
+ margin-top: 0px;
+ margin-left: 5px;
+ padding-top: 0px;
+ width: 800px;
+ background: url('images/horizontal.gif') repeat-y;
+}
+
+#left {
+ width: 800px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.gif') no-repeat;
+ top: -18px;
+ left: 7px;
+ width: 800px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ position: relative;
+ top: -24px;
+ left: -4px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 80px;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #505050;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background: url('images/metal_bgr.gif') repeat-x;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background: url('images/metal_bgr_red.gif') repeat-x;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 5px;
+ margin-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/metallic/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/metallic/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/metallic/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/metallic/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/metallic/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/metallic/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/metallic/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/metallic/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/metallic/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/metallic/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/metallic/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/metallic/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/metallic/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/metallic/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/metallic/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/metallic/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/metallic/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/metallic/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/metallic/apple-touch-icon.png b/src/usr/local/www/themes/metallic/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/bottom-loader.js b/src/usr/local/www/themes/metallic/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/metallic/images/alert_bgr.gif b/src/usr/local/www/themes/metallic/images/alert_bgr.gif
new file mode 100755
index 0000000..65498f1
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/alert_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/footer.gif b/src/usr/local/www/themes/metallic/images/footer.gif
new file mode 100755
index 0000000..f7c2af7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/header.gif b/src/usr/local/www/themes/metallic/images/header.gif
new file mode 100755
index 0000000..0a44068
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/header.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/help.png b/src/usr/local/www/themes/metallic/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/horizontal.gif b/src/usr/local/www/themes/metallic/images/horizontal.gif
new file mode 100755
index 0000000..a280dcb
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/horizontal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/favicon.ico b/src/usr/local/www/themes/metallic/images/icons/favicon.ico
new file mode 100755
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_3g.gif b/src/usr/local/www/themes/metallic/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_advanced.gif b/src/usr/local/www/themes/metallic/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alert.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_block.gif b/src/usr/local/www/themes/metallic/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_block_add.gif b/src/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_block_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_cal.gif b/src/usr/local/www/themes/metallic/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_carp.gif b/src/usr/local/www/themes/metallic/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_chain.png b/src/usr/local/www/themes/metallic/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_check.gif b/src/usr/local/www/themes/metallic/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_close.gif b/src/usr/local/www/themes/metallic/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_configure.gif b/src/usr/local/www/themes/metallic/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_down.gif b/src/usr/local/www/themes/metallic/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_down_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_e.gif b/src/usr/local/www/themes/metallic/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_error.gif b/src/usr/local/www/themes/metallic/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_exclam.gif b/src/usr/local/www/themes/metallic/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_flag_de.png b/src/usr/local/www/themes/metallic/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_flag_en.png b/src/usr/local/www/themes/metallic/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_flag_es.png b/src/usr/local/www/themes/metallic/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_help.gif b/src/usr/local/www/themes/metallic/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_in.gif b/src/usr/local/www/themes/metallic/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_in_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_left.gif b/src/usr/local/www/themes/metallic/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_left_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_log.gif b/src/usr/local/www/themes/metallic/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_log_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_log_s.gif b/src/usr/local/www/themes/metallic/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_logs.gif b/src/usr/local/www/themes/metallic/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_match.gif b/src/usr/local/www/themes/metallic/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_match_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_minus.gif b/src/usr/local/www/themes/metallic/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_open.gif b/src/usr/local/www/themes/metallic/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_other.gif b/src/usr/local/www/themes/metallic/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_other_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_out.gif b/src/usr/local/www/themes/metallic/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_out_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_parp.gif b/src/usr/local/www/themes/metallic/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_pass.gif b/src/usr/local/www/themes/metallic/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reject.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_right.gif b/src/usr/local/www/themes/metallic/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_running.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_start.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_status.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system-group.png b/src/usr/local/www/themes/metallic/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system-user.png b/src/usr/local/www/themes/metallic/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_system_logout.png b/src/usr/local/www/themes/metallic/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_trapped.gif b/src/usr/local/www/themes/metallic/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_up.gif b/src/usr/local/www/themes/metallic/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_up_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_wlan.gif b/src/usr/local/www/themes/metallic/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_x.gif b/src/usr/local/www/themes/metallic/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_x_d.gif b/src/usr/local/www/themes/metallic/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/icon_x_p.gif b/src/usr/local/www/themes/metallic/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/in.gif b/src/usr/local/www/themes/metallic/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/in_d.gif b/src/usr/local/www/themes/metallic/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/out.gif b/src/usr/local/www/themes/metallic/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/icons/out_d.gif b/src/usr/local/www/themes/metallic/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/log.png b/src/usr/local/www/themes/metallic/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/logo.gif b/src/usr/local/www/themes/metallic/images/logo.gif
new file mode 100755
index 0000000..08638ff
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/logobig.jpg b/src/usr/local/www/themes/metallic/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/menu_down.gif b/src/usr/local/www/themes/metallic/images/menu_down.gif
new file mode 100755
index 0000000..137de8d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/menu_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/menu_footer.gif b/src/usr/local/www/themes/metallic/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/menu_right.gif b/src/usr/local/www/themes/metallic/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/metal_bgr.gif b/src/usr/local/www/themes/metallic/images/metal_bgr.gif
new file mode 100755
index 0000000..a0ca6c8
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/metal_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/metal_bgr_red.gif b/src/usr/local/www/themes/metallic/images/metal_bgr_red.gif
new file mode 100755
index 0000000..c4a1465
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/metal_bgr_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bar_blue.gif b/src/usr/local/www/themes/metallic/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bar_gray.gif b/src/usr/local/www/themes/metallic/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bar_left.gif b/src/usr/local/www/themes/metallic/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bar_right.gif b/src/usr/local/www/themes/metallic/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/button.gif b/src/usr/local/www/themes/metallic/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/graph.png b/src/usr/local/www/themes/metallic/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/key_128.gif b/src/usr/local/www/themes/metallic/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/key_152.gif b/src/usr/local/www/themes/metallic/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/key_256.gif b/src/usr/local/www/themes/metallic/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/key_64.gif b/src/usr/local/www/themes/metallic/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/left_background.gif b/src/usr/local/www/themes/metallic/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/loader.gif b/src/usr/local/www/themes/metallic/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/loader_all.gif b/src/usr/local/www/themes/metallic/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/loader_filter.gif b/src/usr/local/www/themes/metallic/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/loader_tab.gif b/src/usr/local/www/themes/metallic/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/logon.png b/src/usr/local/www/themes/metallic/images/misc/logon.png
new file mode 100755
index 0000000..baf8a9d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/progress_bar.gif b/src/usr/local/www/themes/metallic/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/rrd_error.png b/src/usr/local/www/themes/metallic/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_alerter.gif b/src/usr/local/www/themes/metallic/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_left.gif b/src/usr/local/www/themes/metallic/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_page_loading.gif b/src/usr/local/www/themes/metallic/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_reload_all.gif b/src/usr/local/www/themes/metallic/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/status_right.gif b/src/usr/local/www/themes/metallic/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/tri_c.gif b/src/usr/local/www/themes/metallic/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/tri_c_black.gif b/src/usr/local/www/themes/metallic/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..3d33d49
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/tri_o.gif b/src/usr/local/www/themes/metallic/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/tri_o_black.gif b/src/usr/local/www/themes/metallic/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..4ed30d1
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/misc/widget_loader.gif b/src/usr/local/www/themes/metallic/images/misc/widget_loader.gif
new file mode 100755
index 0000000..fad101f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/new_tab_menu.png b/src/usr/local/www/themes/metallic/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/status.png b/src/usr/local/www/themes/metallic/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/transparent.gif b/src/usr/local/www/themes/metallic/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/images/transparent_pixel.gif b/src/usr/local/www/themes/metallic/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/blank.gif b/src/usr/local/www/themes/metallic/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/metallic/javascript/ie7/test-trans.png b/src/usr/local/www/themes/metallic/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/metallic/javascript/niftyjsCode.js b/src/usr/local/www/themes/metallic/javascript/niftyjsCode.js
new file mode 100644
index 0000000..75ef8b0
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/loader.js b/src/usr/local/www/themes/metallic/loader.js
new file mode 100644
index 0000000..9b435d5
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/loader.js
@@ -0,0 +1,29 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/metallic/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/metallic/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/metallic/login.css b/src/usr/local/www/themes/metallic/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/new_tab_menu.css b/src/usr/local/www/themes/metallic/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/no_big_logo b/src/usr/local/www/themes/metallic/no_big_logo
new file mode 100644
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/metallic/rrdcolors.inc.php b/src/usr/local/www/themes/metallic/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/metallic/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/nervecenter/all.css b/src/usr/local/www/themes/nervecenter/all.css
new file mode 100644
index 0000000..ba0a5e4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/all.css
@@ -0,0 +1,1301 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+.infobox {
+ width:100%;
+}
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/background.gif') no-repeat;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* style of disabled formelements */
+#wrap div {margin:1em 0}
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+ text-align: center;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ position: relative;
+ top: -25px;
+ left: 3px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 80px;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 5px;
+ margin-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+/* style of disabled formelements */
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #B1B1B1;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/nervecenter/apple-touch-icon.png b/src/usr/local/www/themes/nervecenter/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/bottom-loader.js b/src/usr/local/www/themes/nervecenter/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/nervecenter/favicon.ico b/src/usr/local/www/themes/nervecenter/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/graphlink.css b/src/usr/local/www/themes/nervecenter/graphlink.css
new file mode 100644
index 0000000..13f65f0
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id$
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/nervecenter/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/nervecenter/images/alert_bgr.png b/src/usr/local/www/themes/nervecenter/images/alert_bgr.png
new file mode 100755
index 0000000..39901be
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/alert_bgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/background.gif b/src/usr/local/www/themes/nervecenter/images/background.gif
new file mode 100755
index 0000000..bdfa5b3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/background.png b/src/usr/local/www/themes/nervecenter/images/background.png
new file mode 100755
index 0000000..e68893d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/background.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/footer.png b/src/usr/local/www/themes/nervecenter/images/footer.png
new file mode 100755
index 0000000..90b1022
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/header.png b/src/usr/local/www/themes/nervecenter/images/header.png
new file mode 100755
index 0000000..3b38584
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/header.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/help.png b/src/usr/local/www/themes/nervecenter/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/horizontal.gif b/src/usr/local/www/themes/nervecenter/images/horizontal.gif
new file mode 100755
index 0000000..a280dcb
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/horizontal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/favicon.ico b/src/usr/local/www/themes/nervecenter/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_block.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_chain.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_check.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_close.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_down.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_e.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_error.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_help.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_in.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_left.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_log.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_match.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_open.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_other.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_out.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_right.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_up.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_x.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/in.gif b/src/usr/local/www/themes/nervecenter/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/in_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/out.gif b/src/usr/local/www/themes/nervecenter/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/icons/out_d.gif b/src/usr/local/www/themes/nervecenter/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/log.png b/src/usr/local/www/themes/nervecenter/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/logo.gif b/src/usr/local/www/themes/nervecenter/images/logo.gif
new file mode 100755
index 0000000..a71ce5a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/logobig.jpg b/src/usr/local/www/themes/nervecenter/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/menu_down.gif b/src/usr/local/www/themes/nervecenter/images/menu_down.gif
new file mode 100755
index 0000000..137de8d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/menu_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/menu_footer.gif b/src/usr/local/www/themes/nervecenter/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/menu_right.gif b/src/usr/local/www/themes/nervecenter/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/metal_bgr.gif b/src/usr/local/www/themes/nervecenter/images/metal_bgr.gif
new file mode 100755
index 0000000..a0ca6c8
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/metal_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif b/src/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif
new file mode 100755
index 0000000..c4a1465
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/metal_bgr_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif b/src/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif b/src/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bar_left.gif b/src/usr/local/www/themes/nervecenter/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bar_right.gif b/src/usr/local/www/themes/nervecenter/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/button.gif b/src/usr/local/www/themes/nervecenter/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/graph.png b/src/usr/local/www/themes/nervecenter/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/key_128.gif b/src/usr/local/www/themes/nervecenter/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/key_152.gif b/src/usr/local/www/themes/nervecenter/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/key_256.gif b/src/usr/local/www/themes/nervecenter/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/key_64.gif b/src/usr/local/www/themes/nervecenter/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/left_background.gif b/src/usr/local/www/themes/nervecenter/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/loader.gif b/src/usr/local/www/themes/nervecenter/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/loader_all.gif b/src/usr/local/www/themes/nervecenter/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif b/src/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif b/src/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/logon.png b/src/usr/local/www/themes/nervecenter/images/misc/logon.png
new file mode 100755
index 0000000..ec644ed
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif b/src/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/rrd_error.png b/src/usr/local/www/themes/nervecenter/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_left.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/status_right.gif b/src/usr/local/www/themes/nervecenter/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/tri_c.gif b/src/usr/local/www/themes/nervecenter/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif b/src/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/tri_o.gif b/src/usr/local/www/themes/nervecenter/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif b/src/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif b/src/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif
new file mode 100755
index 0000000..ca35e2a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/new_tab_menu.png b/src/usr/local/www/themes/nervecenter/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/status.png b/src/usr/local/www/themes/nervecenter/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/transparent.gif b/src/usr/local/www/themes/nervecenter/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/images/transparent_pixel.gif b/src/usr/local/www/themes/nervecenter/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif b/src/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png b/src/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/img/grey-40.png b/src/usr/local/www/themes/nervecenter/javascript/img/grey-40.png
new file mode 100755
index 0000000..758b716
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/img/grey-40.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif b/src/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif
new file mode 100755
index 0000000..ddcdcae
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/img/submenu-off.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif b/src/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif
new file mode 100755
index 0000000..7a58077
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/img/submenu-on.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/img/white-90.png b/src/usr/local/www/themes/nervecenter/javascript/img/white-90.png
new file mode 100755
index 0000000..efc84b4
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/img/white-90.png
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/img/x.gif b/src/usr/local/www/themes/nervecenter/javascript/img/x.gif
new file mode 100755
index 0000000..5bfd67a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/img/x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js b/src/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js
new file mode 100644
index 0000000..e71ea14
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/javascript/transmenu-body.php b/src/usr/local/www/themes/nervecenter/javascript/transmenu-body.php
new file mode 100644
index 0000000..eea9235
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/transmenu-body.php
@@ -0,0 +1,51 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-body.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetBodyJS() {
+ global $rootmenu;
+
+ if (isset($rootmenu)) {
+ return $rootmenu->getMenuJScript();
+ } else if (empty($rootmenu)) {
+ return "alert('No rootmenu object found.');";
+ } else {
+ return "alert('No JavaScript attached to rootmenu object.');";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/nervecenter/javascript/transmenu-head.php b/src/usr/local/www/themes/nervecenter/javascript/transmenu-head.php
new file mode 100644
index 0000000..66e1952
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/transmenu-head.php
@@ -0,0 +1,85 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-head.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetHeadJS() {
+ global $g, $rootmenu;
+
+ $transmenu_stub =<<<EOD
+ function tmenuinit() {
+ //==========================================================================================
+ // if supported, initialize TransMenus
+ //==========================================================================================
+ // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
+ // This is better than server-side checking because it will also catch browsers which would
+ // normally support the menus but have javascript disabled.
+ //
+ // If supported, call initialize() and then hook whatever image rollover code you need to do
+ // to the .onactivate and .ondeactivate events for each menu.
+ //==========================================================================================
+ if (TransMenu.isSupported()) {
+ TransMenu.initialize();
+
+ // hook all the highlight swapping of the main toolbar to menu activation/deactivation
+ // instead of simple rollover to get the effect where the button stays hightlit until
+ // the menu is closed.
+ @@CHILD_JSCRIPT@@
+ }
+ } // end function
+EOD;
+
+ if (empty($rootmenu)) {
+ require_once("menudef.inc");
+ }
+
+ $childJScript = "";
+ foreach ($rootmenu->getChildren() as $component) {
+ $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
+
+ $childJScript .=<<<EOD
+ {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
+ {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
+
+EOD;
+ }
+
+ $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
+
+ return $transmenu_stub;
+}
+
+?>
diff --git a/src/usr/local/www/themes/nervecenter/javascript/transmenu.org b/src/usr/local/www/themes/nervecenter/javascript/transmenu.org
new file mode 100644
index 0000000..6c9e353
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/transmenu.org
@@ -0,0 +1,785 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ *
+ * Customizable multi-level animated DHTML menus with transparency.
+ *
+ * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * =================================================================================================
+ * updates:
+ * 04.19.04 fixed cascade problem with menus nested greater than two levels.
+ * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
+ * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
+ * also made gecko check a little more strict by specifying build no.
+ * ============================================================================================== */
+
+
+
+//==================================================================================================
+// Configuration properties
+//==================================================================================================
+TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
+TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
+TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
+TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
+TransMenu.menuPadding = 5; // padding between menu border and items grid
+TransMenu.itemPadding = 3; // additional padding around each item
+TransMenu.shadowSize = 2; // size of shadow under menu
+TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
+TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
+TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
+TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
+TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
+TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
+TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
+
+
+//==================================================================================================
+// Internal use properties
+//==================================================================================================
+TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
+TransMenu.direction = {down:1,right:2};
+TransMenu.registry = [];
+TransMenu._maxZ = 100;
+
+
+
+//==================================================================================================
+// Static methods
+//==================================================================================================
+// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
+TransMenu.isSupported = function() {
+ var ua = navigator.userAgent.toLowerCase();
+ var pf = navigator.platform.toLowerCase();
+ var an = navigator.appName;
+ var r = false;
+
+ if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
+ else if (an == "Microsoft Internet Explorer") {
+ if (document.getElementById) { // ie5.1+ mac,win
+ if (pf.indexOf("mac") == 0) {
+ r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
+ }
+ else r = true;
+ }
+ }
+
+ return r;
+}
+
+// call this in onload once menus have been created
+TransMenu.initialize = function() {
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ menu.initialize();
+ }
+}
+
+// call this in document body to write out menu html
+TransMenu.renderAll = function() {
+ var aMenuHtml = [];
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ aMenuHtml[i] = menu.toString();
+ }
+ document.write(aMenuHtml.join(""));
+}
+
+//==================================================================================================
+// TransMenu constructor (only called internally)
+//==================================================================================================
+// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
+// reference to an HTML element, or a TransMenuItem from an existing menu.
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menu from actuator
+// iTop : Top pixel offset of menu from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+// parentMenuSet : Menuset this menu will be added to.
+//==================================================================================================
+function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
+ // public methods
+ this.addItem = addItem;
+ this.addMenu = addMenu;
+ this.toString = toString;
+ this.initialize = initialize;
+ this.isOpen = false;
+ this.show = show;
+ this.hide = hide;
+ this.items = [];
+
+ // events
+ this.onactivate = new Function(); // when the menu starts to slide open
+ this.ondeactivate = new Function(); // when the menu finishes sliding closed
+ this.onmouseover = new Function(); // when the menu has been moused over
+ this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
+ this.ondequeue = new Function();
+
+ // initialization
+ this.index = TransMenu.registry.length;
+ TransMenu.registry[this.index] = this;
+
+ var id = "TransMenu" + this.index;
+ var contentHeight = null;
+ var contentWidth = null;
+ var childMenuSet = null;
+ var animating = false;
+ var childMenus = [];
+ var slideAccel = -1;
+ var elmCache = null;
+ var ready = false;
+ var _this = this;
+ var a = null;
+
+ var pos = iDirection == TransMenu.direction.down ? "top" : "left";
+ var dim = null;
+
+ // private and public method implimentations
+ function addItem(sText, sUrl) {
+ var item = new TransMenuItem(sText, sUrl, this);
+ item._index = this.items.length;
+ this.items[item._index] = item;
+ }
+
+ function addMenu(oMenuItem) {
+ if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
+
+ if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
+
+ var m = childMenuSet.addMenu(oMenuItem);
+
+ childMenus[oMenuItem._index] = m;
+ m.onmouseover = child_mouseover;
+ m.ondeactivate = child_deactivate;
+ m.onqueue = child_queue;
+ m.ondequeue = child_dequeue;
+
+ return m;
+ }
+
+ function initialize() {
+ initCache();
+ initEvents();
+ initSize();
+ ready = true;
+ }
+
+ function show() {
+ //dbg_dump("show");
+ if (ready) {
+ _this.isOpen = true;
+ animating = true;
+ setContainerPos();
+ elmCache["clip"].style.visibility = "visible";
+ elmCache["clip"].style.zIndex = TransMenu._maxZ++;
+ //dbg_dump("maxZ: " + TransMenu._maxZ);
+ slideStart();
+ _this.onactivate();
+ }
+ }
+
+ function hide() {
+ if (ready) {
+ _this.isOpen = false;
+ animating = true;
+
+ for (var i = 0, item = null; item = elmCache.item[i]; i++)
+ dehighlight(item);
+
+ if (childMenuSet) childMenuSet.hide();
+
+ slideStart();
+ _this.ondeactivate();
+ }
+ }
+
+ function setContainerPos() {
+ var sub = oActuator.constructor == TransMenuItem;
+ var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
+ var el = act;
+
+ var x = 0;
+ var y = 0;
+
+
+ var minX = 0;
+ var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
+ var minY = 0;
+ var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
+
+ // add up all offsets... subtract any scroll offset
+ while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
+ x += el.offsetLeft;
+ y += el.offsetTop;
+
+ if (el.scrollLeft) x -= el.scrollLeft;
+ if (el.scrollTop) y -= el.scrollTop;
+
+ el = el.offsetParent;
+ }
+
+ if (oActuator.constructor == TransMenuItem) {
+ x += parseInt(el.parentNode.style.left);
+ y += parseInt(el.parentNode.style.top);
+ }
+
+ switch (iReferencePoint) {
+ case TransMenu.reference.topLeft:
+ break;
+ case TransMenu.reference.topRight:
+ x += act.offsetWidth;
+ break;
+ case TransMenu.reference.bottomLeft:
+ y += act.offsetHeight;
+ break;
+ case TransMenu.reference.bottomRight:
+ x += act.offsetWidth;
+ y += act.offsetHeight;
+ break;
+ }
+
+ x += iLeft;
+ y += iTop;
+
+ x = Math.max(Math.min(x, maxX), minX);
+ y = Math.max(Math.min(y, maxY), minY);
+
+ elmCache["clip"].style.left = x + "px";
+ elmCache["clip"].style.top = y + "px";
+ }
+
+ function slideStart() {
+ var x0 = parseInt(elmCache["content"].style[pos]);
+ var x1 = _this.isOpen ? 0 : -dim;
+
+ if (a != null) a.stop();
+ a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
+
+ a.onframe = slideFrame;
+ a.onend = slideEnd;
+
+ a.start();
+ }
+
+ function slideFrame(x) {
+ elmCache["content"].style[pos] = x + "px";
+ }
+
+ function slideEnd() {
+ if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
+ animating = false;
+ }
+
+ function initSize() {
+ // everything is based off the size of the items table...
+ var ow = elmCache["items"].offsetWidth;
+ var oh = elmCache["items"].offsetHeight;
+ var ua = navigator.userAgent.toLowerCase();
+
+ // clipping container should be ow/oh + the size of the shadow
+ elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
+ elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
+
+ // same with content...
+ elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
+ elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
+
+ contentHeight = oh + TransMenu.shadowSize;
+ contentWidth = ow + TransMenu.shadowSize;
+
+ dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
+
+ // set initially closed
+ elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
+ elmCache["clip"].style.visibility = "hidden";
+
+ // if *not* mac/ie 5
+ if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
+ // set background div to offset size
+ elmCache["background"].style.width = ow + "px";
+ elmCache["background"].style.height = oh + "px";
+ elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
+ elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
+ elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
+ }
+ // mac ie is a little different because we use a PNG for the transparency
+ else {
+ // set background div to offset size
+ elmCache["background"].firstChild.src = TransMenu.backgroundPng;
+ elmCache["background"].firstChild.width = ow;
+ elmCache["background"].firstChild.height = oh;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
+ elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
+ elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
+ }
+ }
+
+ function initCache() {
+ var menu = document.getElementById(id);
+ var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
+
+ elmCache = {};
+ elmCache["clip"] = menu;
+ elmCache["item"] = [];
+
+ for (var i = 0, elm = null; elm = all[i]; i++) {
+ switch (elm.className) {
+ case "items":
+ case "content":
+ case "background":
+ case "shadowRight":
+ case "shadowBottom":
+ elmCache[elm.className] = elm;
+ break;
+ case "item":
+ elm._index = elmCache["item"].length;
+ elmCache["item"][elm._index] = elm;
+ break;
+ }
+ }
+
+ // hack!
+ _this.elmCache = elmCache;
+ }
+
+ function initEvents() {
+ // hook item mouseover
+ for (var i = 0, item = null; item = elmCache.item[i]; i++) {
+ item.onmouseover = item_mouseover;
+ item.onmouseout = item_mouseout;
+ item.onclick = item_click;
+ }
+
+ // hook actuation
+ if (typeof oActuator.tagName != "undefined") {
+ oActuator.onmouseover = actuator_mouseover;
+ oActuator.onmouseout = actuator_mouseout;
+ }
+
+ // hook menu mouseover
+ elmCache["content"].onmouseover = content_mouseover;
+ elmCache["content"].onmouseout = content_mouseout;
+ }
+
+ function highlight(oRow) {
+ oRow.className = "item hover";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
+ }
+
+ function dehighlight(oRow) {
+ oRow.className = "item";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
+ }
+
+ function item_mouseover() {
+ if (!animating) {
+ highlight(this);
+
+ if (childMenus[this._index])
+ childMenuSet.showMenu(childMenus[this._index]);
+ else if (childMenuSet) childMenuSet.hide();
+ }
+ }
+
+ function item_mouseout() {
+ if (!animating) {
+ if (childMenus[this._index])
+ childMenuSet.hideMenu(childMenus[this._index]);
+ else // otherwise child_deactivate will do this
+ dehighlight(this);
+ }
+ }
+
+ function item_click() {
+ if (!animating) {
+ if (_this.items[this._index].url)
+ location.href = _this.items[this._index].url;
+ }
+ }
+
+ function actuator_mouseover() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function actuator_mouseout() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function content_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ _this.onmouseover();
+ }
+ }
+
+ function content_mouseout() {
+ if (!animating) {
+ parentMenuSet.hideMenu(_this);
+ }
+ }
+
+ function child_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ }
+ }
+
+ function child_deactivate() {
+ for (var i = 0; i < childMenus.length; i++) {
+ if (childMenus[i] == this) {
+ dehighlight(elmCache["item"][i]);
+ break;
+ }
+ }
+ }
+
+ function child_queue() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function child_dequeue() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function toString() {
+ var aHtml = [];
+ var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
+
+ for (var i = 0, item = null; item = this.items[i]; i++) {
+ aHtml[i] = item.toString(childMenus[i]);
+ }
+
+ return '<div id="' + id + '" class="' + sClassName + '">' +
+ '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
+ aHtml.join('') +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
+ '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '</div></div>';
+ }
+}
+
+
+//==================================================================================================
+// TransMenuSet
+//==================================================================================================
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menus from actuator
+// iTop : Top pixel offset of menus from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+//==================================================================================================
+TransMenuSet.registry = [];
+
+function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
+ // public methods
+ this.addMenu = addMenu;
+ this.showMenu = showMenu;
+ this.hideMenu = hideMenu;
+ this.hide = hide;
+ this.hideCurrent = hideCurrent;
+
+ // initialization
+ var menus = [];
+ var _this = this;
+ var current = null;
+
+ this.index = TransMenuSet.registry.length;
+ TransMenuSet.registry[this.index] = this;
+
+ // method implimentations...
+ function addMenu(oActuator) {
+ var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
+ menus[menus.length] = m;
+ return m;
+ }
+
+ function showMenu(oMenu) {
+ if (oMenu != current) {
+ // close currently open menu
+ if (current != null) hide(current);
+
+ // set current menu to this one
+ current = oMenu;
+
+ // if this menu is closed, open it
+ oMenu.show();
+ }
+ else {
+ // hide pending calls to close this menu
+ cancelHide(oMenu);
+ }
+ }
+
+ function hideMenu(oMenu) {
+ //dbg_dump("hideMenu a " + oMenu.index);
+ if (current == oMenu && oMenu.isOpen) {
+ //dbg_dump("hideMenu b " + oMenu.index);
+ if (!oMenu.hideTimer) scheduleHide(oMenu);
+ }
+ }
+
+ function scheduleHide(oMenu) {
+ //dbg_dump("scheduleHide " + oMenu.index);
+ oMenu.onqueue();
+ oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
+ }
+
+ function cancelHide(oMenu) {
+ //dbg_dump("cancelHide " + oMenu.index);
+ if (oMenu.hideTimer) {
+ oMenu.ondequeue();
+ window.clearTimeout(oMenu.hideTimer);
+ oMenu.hideTimer = null;
+ }
+ }
+
+ function hide(oMenu) {
+ if (!oMenu && current) oMenu = current;
+
+ if (oMenu && current == oMenu && oMenu.isOpen) {
+ hideCurrent();
+ }
+ }
+
+ function hideCurrent() {
+ if (null != current) {
+ cancelHide(current);
+ current.hideTimer = null;
+ current.hide();
+ current = null;
+ }
+ }
+}
+
+//==================================================================================================
+// TransMenuItem (internal)
+// represents an item in a dropdown
+//==================================================================================================
+// sText : The item display text
+// sUrl : URL to load when the item is clicked
+// oParent : Menu this item is a part of
+//==================================================================================================
+function TransMenuItem(sText, sUrl, oParent) {
+ this.toString = toString;
+ this.text = sText;
+ this.url = sUrl;
+ this.parentMenu = oParent;
+
+ function toString(bDingbat) {
+ var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
+ var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
+ var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
+ var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
+
+ return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
+ sText + '</td><td width="14" style="' + sPaddingRight + '">' +
+ '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
+ }
+}
+
+
+
+
+
+
+//=====================================================================
+// Accel[erated] [an]imation object
+// change a property of an object over time in an accelerated fashion
+//=====================================================================
+// obj : reference to the object whose property you'd like to animate
+// prop : property you would like to change eg: "left"
+// to : final value of prop
+// time : time the animation should take to run
+// zip : optional. specify the zippiness of the acceleration. pick a
+// number between -1 and 1 where -1 is full decelerated, 1 is
+// full accelerated, and 0 is linear (no acceleration). default
+// is 0.
+// unit : optional. specify the units for use with prop. default is
+// "px".
+//=====================================================================
+// bezier functions lifted from the lib_animation.js file in the
+// 13th Parallel API. www.13thparallel.org
+//=====================================================================
+
+function Accelimation(from, to, time, zip) {
+ if (typeof zip == "undefined") zip = 0;
+ if (typeof unit == "undefined") unit = "px";
+
+ this.x0 = from;
+ this.x1 = to;
+ this.dt = time;
+ this.zip = -zip;
+ this.unit = unit;
+ this.timer = null;
+ this.onend = new Function();
+ this.onframe = new Function();
+}
+
+
+
+//=====================================================================
+// public methods
+//=====================================================================
+
+// after you create an accelimation, you call this to start it-a runnin'
+Accelimation.prototype.start = function() {
+ this.t0 = new Date().getTime();
+ this.t1 = this.t0 + this.dt;
+ var dx = this.x1 - this.x0;
+ this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
+ this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
+ Accelimation._add(this);
+}
+
+// and if you need to stop it early for some reason...
+Accelimation.prototype.stop = function() {
+ Accelimation._remove(this);
+}
+
+
+
+//=====================================================================
+// private methods
+//=====================================================================
+
+// paints one frame. gets called by Accelimation._paintAll.
+Accelimation.prototype._paint = function(time) {
+ if (time < this.t1) {
+ var elapsed = time - this.t0;
+ this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
+ }
+ else this._end();
+}
+
+// ends the animation
+Accelimation.prototype._end = function() {
+ Accelimation._remove(this);
+ this.onframe(this.x1);
+ this.onend();
+}
+
+
+
+
+//=====================================================================
+// static methods (all private)
+//=====================================================================
+
+// add a function to the list of ones to call periodically
+Accelimation._add = function(o) {
+ var index = this.instances.length;
+ this.instances[index] = o;
+ // if this is the first one, start the engine
+ if (this.instances.length == 1) {
+ this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
+ }
+}
+
+// remove a function from the list
+Accelimation._remove = function(o) {
+ for (var i = 0; i < this.instances.length; i++) {
+ if (o == this.instances[i]) {
+ this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
+ break;
+ }
+ }
+ // if that was the last one, stop the engine
+ if (this.instances.length == 0) {
+ window.clearInterval(this.timerID);
+ this.timerID = null;
+ }
+}
+
+// "engine" - call each function in the list every so often
+Accelimation._paintAll = function() {
+ var now = new Date().getTime();
+ for (var i = 0; i < this.instances.length; i++) {
+ this.instances[i]._paint(now);
+ }
+}
+
+
+// Bezier functions:
+Accelimation._B1 = function(t) { return t*t*t }
+Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
+Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
+Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
+
+
+//Finds the coordinates of a point at a certain stage through a bezier curve
+Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
+ return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
+}
+
+
+//=====================================================================
+// static properties
+//=====================================================================
+
+Accelimation.instances = [];
+Accelimation.targetRes = 10;
+Accelimation.timerID = null;
+
+
+//=====================================================================
+// IE win memory cleanup
+//=====================================================================
+
+if (window.attachEvent) {
+ var cearElementProps = [
+ 'data',
+ 'onmouseover',
+ 'onmouseout',
+ 'onmousedown',
+ 'onmouseup',
+ 'ondblclick',
+ 'onclick',
+ 'onselectstart',
+ 'oncontextmenu'
+ ];
+
+ window.attachEvent("onunload", function() {
+ var el;
+ for(var d = document.all.length;d--;){
+ el = document.all[d];
+ for(var c = cearElementProps.length;c--;){
+ el[cearElementProps[c]] = null;
+ }
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/javascript/transmenuC.js b/src/usr/local/www/themes/nervecenter/javascript/transmenuC.js
new file mode 100644
index 0000000..88626c7
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/javascript/transmenuC.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ * Customizable multi-level animated DHTML menus with transparency.
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * ============================================================================================== */
+TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
+else r=true;}}
+return r;}
+TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
+TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
+document.write(aMenuHtml.join(""));}
+function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
+function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
+function initialize(){initCache();initEvents();initSize();ready=true;}
+function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
+function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
+function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
+if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
+switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
+x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
+function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
+function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
+function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
+function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
+else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
+function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
+_this.elmCache=elmCache;}
+function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
+if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
+elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
+function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
+function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
+function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
+function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
+function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
+function actuator_mouseover(){parentMenuSet.showMenu(_this);}
+function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
+function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
+function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
+function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
+function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
+function child_queue(){parentMenuSet.hideMenu(_this);}
+function child_dequeue(){parentMenuSet.showMenu(_this);}
+function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
+return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
+TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
+function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
+else{cancelHide(oMenu);}}
+function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
+function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
+function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
+function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
+function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
+function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
+var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
+return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
+function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
+Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
+Accelimation.prototype.stop=function(){Accelimation._remove(this);}
+Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
+else this._end();}
+Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
+Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
+Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
+if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
+Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
+Accelimation._B1=function(t){return t*t*t}
+Accelimation._B2=function(t){return 3*t*t*(1-t)}
+Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
+Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
+Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
+Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
+if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/jsevents/body.def b/src/usr/local/www/themes/nervecenter/jsevents/body.def
new file mode 100644
index 0000000..501d548
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/jsevents/body.def
@@ -0,0 +1,7 @@
+# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
+# where: forbidden pages are those pages that should *not* use
+# the particular JavaScript function within the JS event
+# specified below.
+# $Id$
+#
+onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/loader.js b/src/usr/local/www/themes/nervecenter/loader.js
new file mode 100644
index 0000000..491e874
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/loader.js
@@ -0,0 +1,29 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/nervecenter/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/nervecenter/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/nervecenter/login.css b/src/usr/local/www/themes/nervecenter/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/menu.inc b/src/usr/local/www/themes/nervecenter/menu.inc
new file mode 100644
index 0000000..a274410
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/menu.inc
@@ -0,0 +1,177 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ menu.inc
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+require("menu.inc");
+
+define("TMENU_STUB", "
+ // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
+ // but you can experiment with effect on loadtime.
+ if (TransMenu.isSupported()) {
+
+ //==================================================================================================
+ // create a set of dropdowns
+ //==================================================================================================
+ // the first param should always be down, as it is here
+ //
+ // The second and third param are the top and left offset positions of the menus from their actuators
+ // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
+ // something like -5, 5
+ //
+ // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
+ // of the actuator from which to measure the offset positions above. Here we are saying we want the
+ // menu to appear directly below the bottom left corner of the actuator
+ //==================================================================================================
+ var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
+
+ //==================================================================================================
+ // create a dropdown menu
+ //==================================================================================================
+ // the first parameter should be the HTML element which will act actuator for the menu
+ //==================================================================================================
+
+ @@MENU_DEFINITIONS@@
+
+ //==================================================================================================
+ // write drop downs into page
+ //==================================================================================================
+ // this method writes all the HTML for the menus into the page with document.write(). It must be
+ // called within the body of the HTML page.
+ //==================================================================================================
+ TransMenu.renderAll();
+ }
+");
+
+class NervecenterMenu extends Menu {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+ private $menuID = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $c);
+
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+ $this->menuID = $id;
+
+ if ($this->hasParent()) {
+ $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
+ }
+ } // end __construct
+
+ public function getMenuID() {
+ return $this->menuID;
+ }
+
+ public function setMenuID($myMenuID) {
+ $this->menuID = $myMenuID;
+ }
+
+ public function getMenuJScript() {
+ $childJScript = "";
+ foreach ($this->getChildren() as $component) {
+ $childJScript .= $component->getMenuJScript();
+ }
+
+ if (! $this->hasParent()) {
+ $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
+ } else {
+ $this->menuJScript .= "\n$childJScript\n";
+ }
+
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ if (! $this->hasParent()) {
+ $menuMarkup =<<<EOD
+ <div id="menu">
+ @@CHILD_ELEMENTS@@
+ </div>
+
+EOD;
+ } else {
+ $name = gettext($this->getID());
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+
+ $menuMarkup =<<<EOD
+ <a id="{$id}" href="#">{$name}</a>
+ @@CHILD_ELEMENTS@@
+EOD;
+ }
+
+ $childMarkup = "";
+ foreach ($this->getChildren() as $component) {
+ $childMarkup .= $component;
+ }
+
+ $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
+
+ return $menuMarkup;
+ }
+}
+
+class NervecenterMenuItem extends MenuItem {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $href, $c);
+
+ $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
+ $name = gettext($this->getID());
+ $file = $this->getFile();
+
+ $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
+ }
+
+ public function getMenuJScript() {
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ return "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/nervecenter/new_tab_menu.css b/src/usr/local/www/themes/nervecenter/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/no_big_logo b/src/usr/local/www/themes/nervecenter/no_big_logo
new file mode 100644
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/rrdcolors.inc.php b/src/usr/local/www/themes/nervecenter/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/nervecenter/styles/menustyles.css b/src/usr/local/www/themes/nervecenter/styles/menustyles.css
new file mode 100644
index 0000000..06b3c7a
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/styles/menustyles.css
@@ -0,0 +1,44 @@
+#navigation {
+ /* border:1px solid black; */
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ padding-top: 4px;
+ }
+
+#menu {
+ /* background: #990000; */
+ /* border-bottom:1px solid white; */
+ padding: 0 0 0 0;
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ }
+#menu a {
+ padding: 2px 28px 4px 28px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.0em;
+ color: #FFFFFF;
+ width: 08%;
+ height: 16px;
+ }
+#menu a.hover {
+ background: #AF2020;
+ }
+#menu span {
+ display: none;
+ }
+
+#subnav {
+ font-size: 10px;
+ margin-bottom: 2em;
+ }
+#subnav a {
+ color: #FF0000; /* #FB3B00; */
+ margin-right: 1em;
+ }
+#subnav span {
+ color: silver;
+ margin-right: 1em;
+ }
diff --git a/src/usr/local/www/themes/nervecenter/styles/transmenu.css b/src/usr/local/www/themes/nervecenter/styles/transmenu.css
new file mode 100644
index 0000000..f683574
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/styles/transmenu.css
@@ -0,0 +1,75 @@
+/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
+.transMenu {
+ position:absolute;
+ overflow:hidden;
+ left:-1000px;
+ top:-1000px;
+ }
+
+/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
+.transMenu .content {
+ position:absolute;
+ }
+
+/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
+.transMenu .items {
+ position:relative;
+ left:0px; top:0px;
+ z-index:2;
+ }
+
+.transMenu.top .items {
+ border-top:none;
+ }
+
+/* each TR.item is one menu item */
+.transMenu .item {
+ color: #FFFFFF; /* #336; */
+ font-size: 1.1em;
+ font-weight: normal;
+ font-family:sans-serif;
+ text-decoration:none;
+ /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
+ border:none;
+ cursor:pointer;
+ cursor:hand;
+ }
+
+/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
+/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
+.transMenu .background {
+ position:absolute;
+ left:0px; top:0px;
+ z-index:1;
+ -moz-opacity:.8;
+ filter:alpha(opacity=80);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowRight {
+ position:absolute;
+ z-index:3;
+ top:3px; width:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowBottom {
+ position:absolute;
+ z-index:1;
+ left:3px; height:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
+.transMenu .item.hover {
+ background:#fdfdfd;
+ color:black;
+ }
+
+/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
+.transMenu .item img {
+ margin-left:10px;
+ } \ No newline at end of file
diff --git a/src/usr/local/www/themes/nervecenter/wizard.css b/src/usr/local/www/themes/nervecenter/wizard.css
new file mode 100644
index 0000000..a2d31d5
--- /dev/null
+++ b/src/usr/local/www/themes/nervecenter/wizard.css
@@ -0,0 +1,1060 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ /* background: url('images/background.png') no-repeat; */
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
diff --git a/src/usr/local/www/themes/pfsense-dropdown/all.css b/src/usr/local/www/themes/pfsense-dropdown/all.css
new file mode 100644
index 0000000..3fa0630
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/all.css
@@ -0,0 +1,1028 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+ text-align: center;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ background-color: #ffffff;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+
+}
+
+#header {
+ height: 70px;
+ width: 800px;
+}
+#header-left {
+ position: relative;
+ background: url('images/logo.gif') no-repeat;
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+ background-color: #fff;
+}
+#header-right {
+ position: relative;
+ background: url('images/header.gif') no-repeat;
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+
+#header-right .container .left {
+ position: relative;
+ top: 32px;
+ left: 9px;
+ font-size: 1.8em;
+}
+
+#header-right .container .right {
+ position: relative;
+ top: -8px;
+ left: 195px;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.gif') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+}
+
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: bold;
+ font: Verdana;
+ text-align: center;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+
+
+#content {
+ border-top: 1px solid #FFFFFF;
+ margin-top: 0px;
+ padding-top: 0px;
+ width: 800px;
+}
+
+#left {
+ width: 800px;
+ height: 25px;
+ margin-bottom: 5px;
+}
+#right {
+ width: 770px;
+ margin-left: 5px;
+ margin-right: 5px;
+ margin-top: 4px;
+ padding-top: 1px;
+ padding-bottom: 15px;
+ padding-left: 10px;
+ padding-right: 10px;
+ border-left: 1px solid #000000;
+ border-right: 1px solid #000000;
+}
+
+#footer {
+ position: relative;
+ top: 3px;
+ padding: 0px;
+ margin: 6px;
+ margin-left: 0px;
+ margin-top: 2px;
+ width: 800px;
+ background-color: #990000;
+ text-align: center;
+ color: #ffffff;
+ font-size: 0.75em;
+ clear: both;
+ margin-bottom: 20px;
+ z-index: 0;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ background: url('images/menu.gif') no-repeat;
+ /* width: 693px; */
+ width: 800px;
+ padding: 0px;
+ height: 28px;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+ z-index: 10;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 6.2em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: 0px;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ padding: 0em 0 1em 0;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: hand;
+}
+#navigation ul li:hover {
+ cursor: hand;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: underline;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #000;
+ background-color: #000;
+ color: #FFF;
+}
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: underline;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+<!-- background-color: #EEEEEE;-->
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png b/src/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/bottom-loader.js b/src/usr/local/www/themes/pfsense-dropdown/bottom-loader.js
new file mode 100644
index 0000000..fad206e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/bottom-loader.js
@@ -0,0 +1,11 @@
+//<![CDATA[
+
+NiftyCheck();
+Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+Rounded("div#topbox","all","#FFF","#990000","smooth");
+Rounded("div#footer","bl br tl tr","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif b/src/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif
new file mode 100755
index 0000000..2a5c000
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/alert_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif b/src/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif
new file mode 100755
index 0000000..02eca2b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/header-alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/header.gif b/src/usr/local/www/themes/pfsense-dropdown/images/header.gif
new file mode 100755
index 0000000..6f29ec9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/header.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/help.png b/src/usr/local/www/themes/pfsense-dropdown/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico b/src/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif
new file mode 100755
index 0000000..2f69355
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif
new file mode 100644
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif
new file mode 100644
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif
new file mode 100644
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif
new file mode 100644
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif
new file mode 100644
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png
new file mode 100644
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png
new file mode 100644
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png
new file mode 100644
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png
new file mode 100644
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png
new file mode 100644
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png
new file mode 100644
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png
new file mode 100644
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png
new file mode 100644
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png
new file mode 100644
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png
new file mode 100644
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png
new file mode 100644
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png
new file mode 100644
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png
new file mode 100644
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png
new file mode 100644
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png
new file mode 100644
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png
new file mode 100644
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif
new file mode 100644
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif
new file mode 100644
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif
new file mode 100644
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif
new file mode 100644
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif
new file mode 100644
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif
new file mode 100644
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png
new file mode 100644
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png
new file mode 100644
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png
new file mode 100644
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png
new file mode 100644
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png
new file mode 100644
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png
new file mode 100644
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif
new file mode 100644
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..c77a978
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png
new file mode 100644
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png
new file mode 100644
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif
new file mode 100644
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif
new file mode 100644
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif
new file mode 100644
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif b/src/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif
new file mode 100644
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/log.png b/src/usr/local/www/themes/pfsense-dropdown/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/logo.gif b/src/usr/local/www/themes/pfsense-dropdown/images/logo.gif
new file mode 100755
index 0000000..553cbd5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg b/src/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/menu.gif b/src/usr/local/www/themes/pfsense-dropdown/images/menu.gif
new file mode 100755
index 0000000..7269210
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/menu.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png b/src/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png
new file mode 100755
index 0000000..baf8a9d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png b/src/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif b/src/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif
new file mode 100755
index 0000000..fad101f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png b/src/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/status.png b/src/usr/local/www/themes/pfsense-dropdown/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/transparent.gif b/src/usr/local/www/themes/pfsense-dropdown/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif b/src/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js b/src/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js
new file mode 100644
index 0000000..75ef8b0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense-dropdown/loader.js b/src/usr/local/www/themes/pfsense-dropdown/loader.js
new file mode 100644
index 0000000..e8612db
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/loader.js
@@ -0,0 +1,29 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/pfsense-dropdown/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/pfsense-dropdown/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense-dropdown/login.css b/src/usr/local/www/themes/pfsense-dropdown/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css b/src/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php b/src/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense-dropdown/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/pfsense/all.css b/src/usr/local/www/themes/pfsense/all.css
new file mode 100644
index 0000000..372c4b2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/all.css
@@ -0,0 +1,1036 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+ text-align: center;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+
+form input {
+ font-size: 1.1em;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ background-color: #ffffff;
+}
+
+/* ID Based CSS Definitions */
+
+#notices {
+ width: 795px;
+ background-color: #E1E4B8;
+ border: 1px solid #000000;
+ padding: 0px;
+ margin-bottom: 5px;
+}
+#notices ul {
+ margin: 0px;
+ padding: 5px;
+ padding-top: 3px;
+ list-style: none;
+}
+
+#header {
+ height: 70px;
+ width: 900px;
+}
+#header-left {
+ position: relative;
+ background: url('images/logo.gif') no-repeat;
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+ background-color: #fff;
+}
+#header-right {
+ position: relative;
+ background: url('images/header.gif') no-repeat;
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+
+#header-right .container .left {
+ position: relative;
+ top: 32px;
+ left: 9px;
+ font-size: 1.8em;
+}
+
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: -9px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.gif') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: bold;
+ font: Verdana;
+ text-align: center;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+
+
+
+#content {
+ border-top: 1px solid #FFFFFF;
+ margin-top: 0px;
+ padding-top: 0px;
+ width: 900px;
+}
+
+#footer {
+ position: relative;
+ top: 10px;
+ padding: 0px;
+ margin: 6px;
+ width: 900px;
+ background-color: #990000;
+ text-align: center;
+ color: #ffffff;
+ font-size: 0.75em;
+ clear: both;
+ margin-bottom: 20px;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+#left {
+ width: 150px;
+ float: left;
+}
+#right {
+ /*margin-left: 171px;*/
+ margin-left: 170px;
+ margin-top: 5px;
+ width: 720px;
+}
+
+
+
+#navigation {
+ position: relative;
+ background-color: #000000;
+ top: 0px;
+ left: 5px;
+ width: 157px;
+ padding-top: 6px;
+ margin-left: 1px;
+ color: #fff;
+ padding-bottom: 6px;
+ padding-right: 0px;
+}
+
+#navigation ul {
+ margin: 0px;
+ padding: 0px;
+ width: 100%;
+}
+
+#navigation ul li {
+ display: block;
+ padding-left: 10px;
+}
+
+#navigation ul li div {
+ margin-top: 2px;
+}
+
+#navigation ul li div {
+ font-weight: bold;
+}
+
+#navigation ul li div .small,
+#navigation ul li div .small:hover {
+ font-weight: normal;
+ font-size: 0.79em;
+}
+
+#navigation ul li a {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ height: 1.2em;
+ line-height: 1.2em;
+ color: #fff;
+ text-decoration: none;
+ width: 61px;
+ font-size: 0.9em;
+ text-align: center;
+}
+
+#navigation ul li a:hover {
+ color: #fff;
+ text-decoration: underline;
+ font-size: 0.9em;
+}
+
+
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* loginscreen items follow */
+
+#login {
+/* background: #cccccc; */
+ background-color: #ffffff;
+ border-left: 4px dotted #990000;
+/* border: 0px solid #990000; */
+ margin: 5em auto;
+ padding: 0em;
+/* width: 300px; */
+ width: 300px;
+ height: 300px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/logo.gif) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 300px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+/* left: 70px; */
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+
+
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 120px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 300px;
+ height: 50px;
+ position: relative;
+ left: 0px;
+ top: -117px;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/pfsense/apple-touch-icon.png b/src/usr/local/www/themes/pfsense/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/bottom-loader.js b/src/usr/local/www/themes/pfsense/bottom-loader.js
new file mode 100644
index 0000000..8251766
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/bottom-loader.js
@@ -0,0 +1,12 @@
+//<![CDATA[
+
+NiftyCheck();
+Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+Rounded("div#topbox","all","#FFF","#990000","smooth");
+Rounded("div#navigation","top bottom","#FFFFFF","#000000","smooth");
+Rounded("div#footer","bl br tl tr]","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense/images/alert_bgr.gif b/src/usr/local/www/themes/pfsense/images/alert_bgr.gif
new file mode 100755
index 0000000..2a5c000
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/alert_bgr.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/header-alert.gif b/src/usr/local/www/themes/pfsense/images/header-alert.gif
new file mode 100755
index 0000000..02eca2b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/header-alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/header.gif b/src/usr/local/www/themes/pfsense/images/header.gif
new file mode 100755
index 0000000..01cfcef
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/header.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/help.png b/src/usr/local/www/themes/pfsense/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/favicon.ico b/src/usr/local/www/themes/pfsense/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_3g.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alert.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alert.gif
new file mode 100755
index 0000000..2f69355
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif
new file mode 100644
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif
new file mode 100644
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif
new file mode 100644
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif
new file mode 100644
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif
new file mode 100644
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_block.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_cal.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_carp.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_chain.png b/src/usr/local/www/themes/pfsense/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_check.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_close.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_configure.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_down.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_e.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_error.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png
new file mode 100644
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png
new file mode 100644
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png
new file mode 100644
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png
new file mode 100644
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png
new file mode 100644
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png
new file mode 100644
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png
new file mode 100644
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png
new file mode 100644
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png
new file mode 100644
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png
new file mode 100644
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png
new file mode 100644
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png
new file mode 100644
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png
new file mode 100644
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png
new file mode 100644
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png
new file mode 100644
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png
new file mode 100644
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_help.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif
new file mode 100644
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif
new file mode 100644
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_in.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_left.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_log.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_logs.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_match.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_minus.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_open.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_other.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_out.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_parp.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_pass.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif
new file mode 100644
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif
new file mode 100644
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif
new file mode 100644
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reject.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_right.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png
new file mode 100644
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system-group.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system-group.png
new file mode 100644
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png
new file mode 100644
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system-user.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system-user.png
new file mode 100644
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png
new file mode 100644
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png b/src/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png
new file mode 100644
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif
new file mode 100644
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_up.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png
new file mode 100644
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png
new file mode 100644
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_x.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif b/src/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/in.gif b/src/usr/local/www/themes/pfsense/images/icons/in.gif
new file mode 100644
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/in_d.gif b/src/usr/local/www/themes/pfsense/images/icons/in_d.gif
new file mode 100644
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/out.gif b/src/usr/local/www/themes/pfsense/images/icons/out.gif
new file mode 100644
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/icons/out_d.gif b/src/usr/local/www/themes/pfsense/images/icons/out_d.gif
new file mode 100644
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/log.png b/src/usr/local/www/themes/pfsense/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/logo.gif b/src/usr/local/www/themes/pfsense/images/logo.gif
new file mode 100755
index 0000000..553cbd5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/logobig.jpg b/src/usr/local/www/themes/pfsense/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/bar_blue.gif b/src/usr/local/www/themes/pfsense/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/bar_gray.gif b/src/usr/local/www/themes/pfsense/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/bar_left.gif b/src/usr/local/www/themes/pfsense/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/bar_right.gif b/src/usr/local/www/themes/pfsense/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/button.gif b/src/usr/local/www/themes/pfsense/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/key_128.gif b/src/usr/local/www/themes/pfsense/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/key_152.gif b/src/usr/local/www/themes/pfsense/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/key_256.gif b/src/usr/local/www/themes/pfsense/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/key_64.gif b/src/usr/local/www/themes/pfsense/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/left_background.gif b/src/usr/local/www/themes/pfsense/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/loader.gif b/src/usr/local/www/themes/pfsense/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/loader_tab.gif b/src/usr/local/www/themes/pfsense/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/logon.png b/src/usr/local/www/themes/pfsense/images/misc/logon.png
new file mode 100755
index 0000000..baf8a9d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/progress_bar.gif b/src/usr/local/www/themes/pfsense/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/rrd_error.png b/src/usr/local/www/themes/pfsense/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/tri_c.gif b/src/usr/local/www/themes/pfsense/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif b/src/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/tri_o.gif b/src/usr/local/www/themes/pfsense/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif b/src/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/misc/widget_loader.gif b/src/usr/local/www/themes/pfsense/images/misc/widget_loader.gif
new file mode 100755
index 0000000..fad101f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/new_tab_menu.png b/src/usr/local/www/themes/pfsense/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/status.png b/src/usr/local/www/themes/pfsense/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/transparent.gif b/src/usr/local/www/themes/pfsense/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/images/transparent_pixel.gif b/src/usr/local/www/themes/pfsense/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense/javascript/niftyjsCode.js b/src/usr/local/www/themes/pfsense/javascript/niftyjsCode.js
new file mode 100644
index 0000000..75ef8b0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense/loader.js b/src/usr/local/www/themes/pfsense/loader.js
new file mode 100644
index 0000000..2fc9b78
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/loader.js
@@ -0,0 +1,30 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/metallic/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/pfsense/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense/login.css b/src/usr/local/www/themes/pfsense/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense/new_tab_menu.css b/src/usr/local/www/themes/pfsense/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense/rrdcolors.inc.php b/src/usr/local/www/themes/pfsense/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng/all.css b/src/usr/local/www/themes/pfsense_ng/all.css
new file mode 100644
index 0000000..39beb77
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/all.css
@@ -0,0 +1,1414 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ align: left;
+ background: url('images/background.jpg') no-repeat;
+ background-position : left 0px;
+ background-attachment: fixed;
+ background-color: #7f7f7f;
+}
+a:link {
+ color: #550000;
+}
+
+a:visited {
+ color: #550000;
+}
+
+a:active {
+ color: #550000;
+}
+
+a:hover {
+ color: #550000;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* style of disabled formelements */
+#wrap div {margin:1em 0}
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+/* ID Based CSS Definitions */
+/* margin: 0px auto makes the content centered, margin 0px 0px makes it aligned to the left */
+#wrapper {
+ width: 810px;
+ margin: 0px 0px;
+/* left: 0px; */
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 40px;
+ width: 810px;
+ position: fixed;
+ left: 0;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 40px;
+ width: 80px;
+ left: 0px;
+ top:0px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 0px;
+ left: 0px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 30px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+/* for forcing an alert run the following command from diagnostics>command, php command:
+file_notice("blah", "blah blah...testing my new theme...");
+*/
+
+#header-right .container .right #alerts {
+ position: fixed;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 40px;
+ width: 400px;
+ top: 0px;
+ left: 810px;
+ z-index: 2;
+ padding-top: 1px;
+ padding-left: 10px;
+ margin: 0px;
+}
+
+#header-right .container .right #hostname {
+ position: fixed;
+ background: url('images/hostname.png') no-repeat;
+ height: 40px;
+ width: 400px;
+ z-index: 1;
+ padding-right: 5px;
+ margin: 0px;
+ top: 0px;
+ left: 810px;
+ font-size: 12px;
+ color: #000000;
+ font-weight: bold;
+ padding-left: 40px;
+ padding-top: 2px;
+ text-align: left;
+}
+
+
+
+
+table#marquee {
+ position: relative;
+ top: -4px;
+ left: 15px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 350px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+/* font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff; */
+ font-size: 12px;
+ font-weight: normal;
+ font-style: italic;
+ color: #000000;
+ padding-left: 30px;
+ padding-top: 2px;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 330px;
+ height: 16px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+#content {
+ position: relative;
+ top: 0px;
+ left: 75px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 50px;
+ padding-left: 20px;
+ width: 840px;
+ background-color: #ffffff;
+ background: url('images/horizontal.png') repeat-y;
+}
+
+
+/* try to abuse left as a fadeout at the end of the page */
+#left {
+ width: 810px;
+ height: 1px;
+}
+
+#right {
+ position: relative;
+ top: -10px;
+ left: 0px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 20px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 90px;
+ min-height: 400px;
+
+}
+
+#footer {
+ position: relative;
+/* margin-bottom: 5px; */
+ background: url('images/footer.png') no-repeat;
+/* top: -100px; */
+ bottom: 0px;
+ left: 75px;
+/* width: 1210px; */
+ width: 840px;
+ height: 60px;
+ color: #000000;
+ text-align: center;
+ font-size: 0.9em;
+ padding-top: 10px;
+ padding-left: 10px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+
+}
+
+/* Style the List */
+#navigation {
+ position: fixed;
+ top: 0px;
+ left: 100px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+ margin-left: 10px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ padding-right: 20px;
+ top: 0px;
+}
+
+/* Text mainmenubar */
+#navigation ul li div {
+ background-image: url(images/mainmenu-right.gif);
+ background-position: 2% 50%;
+ background-repeat: no-repeat;
+ padding-top:0px;
+ font-size: 12px;
+ font-weight: normal;
+ color: #ffffff;
+ text-align: left;
+ padding-left: 13px;
+ height: 13px;
+}
+
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ font-weight: normal;
+ margin-top: 1px;
+ padding-top: 5px;
+ background: #850000;
+ border: 0px;
+ /* transparent */
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
+ -moz-opacity: 0.95;
+ -khtml-opacity: 0.95;
+ opacity: 0.95;
+ /* borders */
+ border-bottom-right-radius: 0px;
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ /* Mozilla */
+ -moz-border-radius-bottomright: 0px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-topleft: 6px;
+ /* WebKit */
+ -webkit-border-bottom-right-radius: 0px;
+ -webkit-border-bottom-left-radius: 6px;
+ -webkit-border-top-right-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ /* Shadow Effect */
+ box-shadow: 5px 5px 10px #000000;
+ -webkit-box-shadow: 5px 5px 10px #000000;
+ -moz-box-shadow: 5px 5px 10px #000000;
+ /* Vertical menu max size */
+ /* max-height: 259px; /
+ /* Horizontal menu max size */
+ max-width: 128px;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+ background-image: url(images/mainmenu-down.gif);
+ background-position: 5% 50%;
+ background-repeat: no-repeat;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #000000;
+}
+/* dropdownmenu */
+#navigation ul li ul li {
+ border: 0px solid #850000;
+ width: 128px;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #850000;
+ /* borders */
+ border-bottom-right-radius: 0px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ /* Mozilla */
+ -moz-border-radius-bottomright: 0px;
+ -moz-border-radius-bottomleft: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-topleft: 3px;
+ /* WebKit */
+ -webkit-border-bottom-right-radius: 0px;
+ -webkit-border-bottom-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+}
+/* last element in dropdown menu*/
+#navigation ul li ul li:last-child {
+ margin-bottom: 5px;
+}
+#navigation ul li ul li:hover {
+ margin-left: 5px;
+ background-color: #666666;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
+ -moz-opacity: 0.95;
+ -khtml-opacity: 0.95;
+ opacity: 0.95;
+}
+
+/* textcolor in dropdownmenu */
+#navigation li li a {
+ display: block;
+ padding-left: 8px;
+ padding-right: 8px;
+ color: #ffffff;
+ font-size: 11px;
+ font-weight: normal;
+ text-align: left;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+}
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+ background-color: transparent;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+/* style of disabled formelements */
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #B1B1B1;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ /* background-color: #EEEEEE; this causing light gray rectangles to the right of many tables in gui */
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/pfsense_ng/apple-touch-icon.png b/src/usr/local/www/themes/pfsense_ng/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/bottom-loader.js b/src/usr/local/www/themes/pfsense_ng/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense_ng/favicon.ico b/src/usr/local/www/themes/pfsense_ng/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/graphlink.css b/src/usr/local/www/themes/pfsense_ng/graphlink.css
new file mode 100644
index 0000000..521059e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id: graphlink.css,v 1.2.2.1 2007/01/17 18:43:30 sullrich Exp $
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/nervecenter/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng/images/alert_bgr.png b/src/usr/local/www/themes/pfsense_ng/images/alert_bgr.png
new file mode 100755
index 0000000..5a8ac81
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/alert_bgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/alerter.png b/src/usr/local/www/themes/pfsense_ng/images/alerter.png
new file mode 100755
index 0000000..e026bfe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/alerter.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/background.jpg b/src/usr/local/www/themes/pfsense_ng/images/background.jpg
new file mode 100755
index 0000000..ebdff47
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/background.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/footer.png b/src/usr/local/www/themes/pfsense_ng/images/footer.png
new file mode 100755
index 0000000..b10002b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/header.png b/src/usr/local/www/themes/pfsense_ng/images/header.png
new file mode 100755
index 0000000..6f8128c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/header.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/help.png b/src/usr/local/www/themes/pfsense_ng/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/horizontal.png b/src/usr/local/www/themes/pfsense_ng/images/horizontal.png
new file mode 100755
index 0000000..f098bb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/horizontal.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/hostname.png b/src/usr/local/www/themes/pfsense_ng/images/hostname.png
new file mode 100755
index 0000000..cd79f5c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/hostname.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico b/src/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png
new file mode 100755
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/in.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/out.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif b/src/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/log.png b/src/usr/local/www/themes/pfsense_ng/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/logo.gif b/src/usr/local/www/themes/pfsense_ng/images/logo.gif
new file mode 100755
index 0000000..e5da95c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/logobig.jpg b/src/usr/local/www/themes/pfsense_ng/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif b/src/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif
new file mode 100755
index 0000000..e59432a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/mainmenu-down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif b/src/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif
new file mode 100755
index 0000000..14298a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/mainmenu-right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif b/src/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif
new file mode 100755
index 0000000..6e97478
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/mainmenuitem.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menu-dot.gif b/src/usr/local/www/themes/pfsense_ng/images/menu-dot.gif
new file mode 100755
index 0000000..c76609b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menu-dot.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menu_footer.gif b/src/usr/local/www/themes/pfsense_ng/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menu_right.gif b/src/usr/local/www/themes/pfsense_ng/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menubgr.png b/src/usr/local/www/themes/pfsense_ng/images/menubgr.png
new file mode 100755
index 0000000..45e0ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menubgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png b/src/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png
new file mode 100755
index 0000000..fdff49f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menubgr_footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png b/src/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png
new file mode 100755
index 0000000..05f4832
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/menubgr_highlight.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/button.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/graph.png b/src/usr/local/www/themes/pfsense_ng/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/loader.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/logon.png b/src/usr/local/www/themes/pfsense_ng/images/misc/logon.png
new file mode 100755
index 0000000..98aa37a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png b/src/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif b/src/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif
new file mode 100755
index 0000000..ca35e2a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png b/src/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/status.png b/src/usr/local/www/themes/pfsense_ng/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/transparent.gif b/src/usr/local/www/themes/pfsense_ng/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif b/src/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..dd62a21
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png b/src/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png
new file mode 100755
index 0000000..758b716
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/img/grey-40.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif b/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif
new file mode 100755
index 0000000..ddcdcae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-off.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif b/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif
new file mode 100755
index 0000000..7a58077
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/img/submenu-on.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png b/src/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png
new file mode 100755
index 0000000..efc84b4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/img/white-90.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/img/x.gif b/src/usr/local/www/themes/pfsense_ng/javascript/img/x.gif
new file mode 100755
index 0000000..5bfd67a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/img/x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js b/src/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js
new file mode 100644
index 0000000..e71ea14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php
new file mode 100644
index 0000000..afb7090
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-body.php
@@ -0,0 +1,51 @@
+<?php
+/* $Id: transmenu-body.php,v 1.1.2.1 2007/01/17 18:43:47 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ transmenu-body.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetBodyJS() {
+ global $rootmenu;
+
+ if (isset($rootmenu)) {
+ return $rootmenu->getMenuJScript();
+ } else if (empty($rootmenu)) {
+ return "alert('No rootmenu object found.');";
+ } else {
+ return "alert('No JavaScript attached to rootmenu object.');";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php
new file mode 100644
index 0000000..afc6402
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu-head.php
@@ -0,0 +1,85 @@
+<?php
+/* $Id: transmenu-head.php,v 1.2.2.1 2007/01/17 18:43:47 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ transmenu-head.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetHeadJS() {
+ global $g, $rootmenu;
+
+ $transmenu_stub =<<<EOD
+ function tmenuinit() {
+ //==========================================================================================
+ // if supported, initialize TransMenus
+ //==========================================================================================
+ // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
+ // This is better than server-side checking because it will also catch browsers which would
+ // normally support the menus but have javascript disabled.
+ //
+ // If supported, call initialize() and then hook whatever image rollover code you need to do
+ // to the .onactivate and .ondeactivate events for each menu.
+ //==========================================================================================
+ if (TransMenu.isSupported()) {
+ TransMenu.initialize();
+
+ // hook all the highlight swapping of the main toolbar to menu activation/deactivation
+ // instead of simple rollover to get the effect where the button stays hightlit until
+ // the menu is closed.
+ @@CHILD_JSCRIPT@@
+ }
+ } // end function
+EOD;
+
+ if (empty($rootmenu)) {
+ require_once("menudef.inc");
+ }
+
+ $childJScript = "";
+ foreach ($rootmenu->getChildren() as $component) {
+ $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
+
+ $childJScript .=<<<EOD
+ {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
+ {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
+
+EOD;
+ }
+
+ $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
+
+ return $transmenu_stub;
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/transmenu.org b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu.org
new file mode 100644
index 0000000..6c9e353
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/transmenu.org
@@ -0,0 +1,785 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ *
+ * Customizable multi-level animated DHTML menus with transparency.
+ *
+ * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * =================================================================================================
+ * updates:
+ * 04.19.04 fixed cascade problem with menus nested greater than two levels.
+ * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
+ * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
+ * also made gecko check a little more strict by specifying build no.
+ * ============================================================================================== */
+
+
+
+//==================================================================================================
+// Configuration properties
+//==================================================================================================
+TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
+TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
+TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
+TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
+TransMenu.menuPadding = 5; // padding between menu border and items grid
+TransMenu.itemPadding = 3; // additional padding around each item
+TransMenu.shadowSize = 2; // size of shadow under menu
+TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
+TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
+TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
+TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
+TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
+TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
+TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
+
+
+//==================================================================================================
+// Internal use properties
+//==================================================================================================
+TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
+TransMenu.direction = {down:1,right:2};
+TransMenu.registry = [];
+TransMenu._maxZ = 100;
+
+
+
+//==================================================================================================
+// Static methods
+//==================================================================================================
+// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
+TransMenu.isSupported = function() {
+ var ua = navigator.userAgent.toLowerCase();
+ var pf = navigator.platform.toLowerCase();
+ var an = navigator.appName;
+ var r = false;
+
+ if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
+ else if (an == "Microsoft Internet Explorer") {
+ if (document.getElementById) { // ie5.1+ mac,win
+ if (pf.indexOf("mac") == 0) {
+ r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
+ }
+ else r = true;
+ }
+ }
+
+ return r;
+}
+
+// call this in onload once menus have been created
+TransMenu.initialize = function() {
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ menu.initialize();
+ }
+}
+
+// call this in document body to write out menu html
+TransMenu.renderAll = function() {
+ var aMenuHtml = [];
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ aMenuHtml[i] = menu.toString();
+ }
+ document.write(aMenuHtml.join(""));
+}
+
+//==================================================================================================
+// TransMenu constructor (only called internally)
+//==================================================================================================
+// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
+// reference to an HTML element, or a TransMenuItem from an existing menu.
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menu from actuator
+// iTop : Top pixel offset of menu from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+// parentMenuSet : Menuset this menu will be added to.
+//==================================================================================================
+function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
+ // public methods
+ this.addItem = addItem;
+ this.addMenu = addMenu;
+ this.toString = toString;
+ this.initialize = initialize;
+ this.isOpen = false;
+ this.show = show;
+ this.hide = hide;
+ this.items = [];
+
+ // events
+ this.onactivate = new Function(); // when the menu starts to slide open
+ this.ondeactivate = new Function(); // when the menu finishes sliding closed
+ this.onmouseover = new Function(); // when the menu has been moused over
+ this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
+ this.ondequeue = new Function();
+
+ // initialization
+ this.index = TransMenu.registry.length;
+ TransMenu.registry[this.index] = this;
+
+ var id = "TransMenu" + this.index;
+ var contentHeight = null;
+ var contentWidth = null;
+ var childMenuSet = null;
+ var animating = false;
+ var childMenus = [];
+ var slideAccel = -1;
+ var elmCache = null;
+ var ready = false;
+ var _this = this;
+ var a = null;
+
+ var pos = iDirection == TransMenu.direction.down ? "top" : "left";
+ var dim = null;
+
+ // private and public method implimentations
+ function addItem(sText, sUrl) {
+ var item = new TransMenuItem(sText, sUrl, this);
+ item._index = this.items.length;
+ this.items[item._index] = item;
+ }
+
+ function addMenu(oMenuItem) {
+ if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
+
+ if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
+
+ var m = childMenuSet.addMenu(oMenuItem);
+
+ childMenus[oMenuItem._index] = m;
+ m.onmouseover = child_mouseover;
+ m.ondeactivate = child_deactivate;
+ m.onqueue = child_queue;
+ m.ondequeue = child_dequeue;
+
+ return m;
+ }
+
+ function initialize() {
+ initCache();
+ initEvents();
+ initSize();
+ ready = true;
+ }
+
+ function show() {
+ //dbg_dump("show");
+ if (ready) {
+ _this.isOpen = true;
+ animating = true;
+ setContainerPos();
+ elmCache["clip"].style.visibility = "visible";
+ elmCache["clip"].style.zIndex = TransMenu._maxZ++;
+ //dbg_dump("maxZ: " + TransMenu._maxZ);
+ slideStart();
+ _this.onactivate();
+ }
+ }
+
+ function hide() {
+ if (ready) {
+ _this.isOpen = false;
+ animating = true;
+
+ for (var i = 0, item = null; item = elmCache.item[i]; i++)
+ dehighlight(item);
+
+ if (childMenuSet) childMenuSet.hide();
+
+ slideStart();
+ _this.ondeactivate();
+ }
+ }
+
+ function setContainerPos() {
+ var sub = oActuator.constructor == TransMenuItem;
+ var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
+ var el = act;
+
+ var x = 0;
+ var y = 0;
+
+
+ var minX = 0;
+ var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
+ var minY = 0;
+ var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
+
+ // add up all offsets... subtract any scroll offset
+ while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
+ x += el.offsetLeft;
+ y += el.offsetTop;
+
+ if (el.scrollLeft) x -= el.scrollLeft;
+ if (el.scrollTop) y -= el.scrollTop;
+
+ el = el.offsetParent;
+ }
+
+ if (oActuator.constructor == TransMenuItem) {
+ x += parseInt(el.parentNode.style.left);
+ y += parseInt(el.parentNode.style.top);
+ }
+
+ switch (iReferencePoint) {
+ case TransMenu.reference.topLeft:
+ break;
+ case TransMenu.reference.topRight:
+ x += act.offsetWidth;
+ break;
+ case TransMenu.reference.bottomLeft:
+ y += act.offsetHeight;
+ break;
+ case TransMenu.reference.bottomRight:
+ x += act.offsetWidth;
+ y += act.offsetHeight;
+ break;
+ }
+
+ x += iLeft;
+ y += iTop;
+
+ x = Math.max(Math.min(x, maxX), minX);
+ y = Math.max(Math.min(y, maxY), minY);
+
+ elmCache["clip"].style.left = x + "px";
+ elmCache["clip"].style.top = y + "px";
+ }
+
+ function slideStart() {
+ var x0 = parseInt(elmCache["content"].style[pos]);
+ var x1 = _this.isOpen ? 0 : -dim;
+
+ if (a != null) a.stop();
+ a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
+
+ a.onframe = slideFrame;
+ a.onend = slideEnd;
+
+ a.start();
+ }
+
+ function slideFrame(x) {
+ elmCache["content"].style[pos] = x + "px";
+ }
+
+ function slideEnd() {
+ if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
+ animating = false;
+ }
+
+ function initSize() {
+ // everything is based off the size of the items table...
+ var ow = elmCache["items"].offsetWidth;
+ var oh = elmCache["items"].offsetHeight;
+ var ua = navigator.userAgent.toLowerCase();
+
+ // clipping container should be ow/oh + the size of the shadow
+ elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
+ elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
+
+ // same with content...
+ elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
+ elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
+
+ contentHeight = oh + TransMenu.shadowSize;
+ contentWidth = ow + TransMenu.shadowSize;
+
+ dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
+
+ // set initially closed
+ elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
+ elmCache["clip"].style.visibility = "hidden";
+
+ // if *not* mac/ie 5
+ if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
+ // set background div to offset size
+ elmCache["background"].style.width = ow + "px";
+ elmCache["background"].style.height = oh + "px";
+ elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
+ elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
+ elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
+ }
+ // mac ie is a little different because we use a PNG for the transparency
+ else {
+ // set background div to offset size
+ elmCache["background"].firstChild.src = TransMenu.backgroundPng;
+ elmCache["background"].firstChild.width = ow;
+ elmCache["background"].firstChild.height = oh;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
+ elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
+ elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
+ }
+ }
+
+ function initCache() {
+ var menu = document.getElementById(id);
+ var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
+
+ elmCache = {};
+ elmCache["clip"] = menu;
+ elmCache["item"] = [];
+
+ for (var i = 0, elm = null; elm = all[i]; i++) {
+ switch (elm.className) {
+ case "items":
+ case "content":
+ case "background":
+ case "shadowRight":
+ case "shadowBottom":
+ elmCache[elm.className] = elm;
+ break;
+ case "item":
+ elm._index = elmCache["item"].length;
+ elmCache["item"][elm._index] = elm;
+ break;
+ }
+ }
+
+ // hack!
+ _this.elmCache = elmCache;
+ }
+
+ function initEvents() {
+ // hook item mouseover
+ for (var i = 0, item = null; item = elmCache.item[i]; i++) {
+ item.onmouseover = item_mouseover;
+ item.onmouseout = item_mouseout;
+ item.onclick = item_click;
+ }
+
+ // hook actuation
+ if (typeof oActuator.tagName != "undefined") {
+ oActuator.onmouseover = actuator_mouseover;
+ oActuator.onmouseout = actuator_mouseout;
+ }
+
+ // hook menu mouseover
+ elmCache["content"].onmouseover = content_mouseover;
+ elmCache["content"].onmouseout = content_mouseout;
+ }
+
+ function highlight(oRow) {
+ oRow.className = "item hover";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
+ }
+
+ function dehighlight(oRow) {
+ oRow.className = "item";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
+ }
+
+ function item_mouseover() {
+ if (!animating) {
+ highlight(this);
+
+ if (childMenus[this._index])
+ childMenuSet.showMenu(childMenus[this._index]);
+ else if (childMenuSet) childMenuSet.hide();
+ }
+ }
+
+ function item_mouseout() {
+ if (!animating) {
+ if (childMenus[this._index])
+ childMenuSet.hideMenu(childMenus[this._index]);
+ else // otherwise child_deactivate will do this
+ dehighlight(this);
+ }
+ }
+
+ function item_click() {
+ if (!animating) {
+ if (_this.items[this._index].url)
+ location.href = _this.items[this._index].url;
+ }
+ }
+
+ function actuator_mouseover() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function actuator_mouseout() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function content_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ _this.onmouseover();
+ }
+ }
+
+ function content_mouseout() {
+ if (!animating) {
+ parentMenuSet.hideMenu(_this);
+ }
+ }
+
+ function child_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ }
+ }
+
+ function child_deactivate() {
+ for (var i = 0; i < childMenus.length; i++) {
+ if (childMenus[i] == this) {
+ dehighlight(elmCache["item"][i]);
+ break;
+ }
+ }
+ }
+
+ function child_queue() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function child_dequeue() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function toString() {
+ var aHtml = [];
+ var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
+
+ for (var i = 0, item = null; item = this.items[i]; i++) {
+ aHtml[i] = item.toString(childMenus[i]);
+ }
+
+ return '<div id="' + id + '" class="' + sClassName + '">' +
+ '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
+ aHtml.join('') +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
+ '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '</div></div>';
+ }
+}
+
+
+//==================================================================================================
+// TransMenuSet
+//==================================================================================================
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menus from actuator
+// iTop : Top pixel offset of menus from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+//==================================================================================================
+TransMenuSet.registry = [];
+
+function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
+ // public methods
+ this.addMenu = addMenu;
+ this.showMenu = showMenu;
+ this.hideMenu = hideMenu;
+ this.hide = hide;
+ this.hideCurrent = hideCurrent;
+
+ // initialization
+ var menus = [];
+ var _this = this;
+ var current = null;
+
+ this.index = TransMenuSet.registry.length;
+ TransMenuSet.registry[this.index] = this;
+
+ // method implimentations...
+ function addMenu(oActuator) {
+ var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
+ menus[menus.length] = m;
+ return m;
+ }
+
+ function showMenu(oMenu) {
+ if (oMenu != current) {
+ // close currently open menu
+ if (current != null) hide(current);
+
+ // set current menu to this one
+ current = oMenu;
+
+ // if this menu is closed, open it
+ oMenu.show();
+ }
+ else {
+ // hide pending calls to close this menu
+ cancelHide(oMenu);
+ }
+ }
+
+ function hideMenu(oMenu) {
+ //dbg_dump("hideMenu a " + oMenu.index);
+ if (current == oMenu && oMenu.isOpen) {
+ //dbg_dump("hideMenu b " + oMenu.index);
+ if (!oMenu.hideTimer) scheduleHide(oMenu);
+ }
+ }
+
+ function scheduleHide(oMenu) {
+ //dbg_dump("scheduleHide " + oMenu.index);
+ oMenu.onqueue();
+ oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
+ }
+
+ function cancelHide(oMenu) {
+ //dbg_dump("cancelHide " + oMenu.index);
+ if (oMenu.hideTimer) {
+ oMenu.ondequeue();
+ window.clearTimeout(oMenu.hideTimer);
+ oMenu.hideTimer = null;
+ }
+ }
+
+ function hide(oMenu) {
+ if (!oMenu && current) oMenu = current;
+
+ if (oMenu && current == oMenu && oMenu.isOpen) {
+ hideCurrent();
+ }
+ }
+
+ function hideCurrent() {
+ if (null != current) {
+ cancelHide(current);
+ current.hideTimer = null;
+ current.hide();
+ current = null;
+ }
+ }
+}
+
+//==================================================================================================
+// TransMenuItem (internal)
+// represents an item in a dropdown
+//==================================================================================================
+// sText : The item display text
+// sUrl : URL to load when the item is clicked
+// oParent : Menu this item is a part of
+//==================================================================================================
+function TransMenuItem(sText, sUrl, oParent) {
+ this.toString = toString;
+ this.text = sText;
+ this.url = sUrl;
+ this.parentMenu = oParent;
+
+ function toString(bDingbat) {
+ var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
+ var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
+ var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
+ var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
+
+ return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
+ sText + '</td><td width="14" style="' + sPaddingRight + '">' +
+ '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
+ }
+}
+
+
+
+
+
+
+//=====================================================================
+// Accel[erated] [an]imation object
+// change a property of an object over time in an accelerated fashion
+//=====================================================================
+// obj : reference to the object whose property you'd like to animate
+// prop : property you would like to change eg: "left"
+// to : final value of prop
+// time : time the animation should take to run
+// zip : optional. specify the zippiness of the acceleration. pick a
+// number between -1 and 1 where -1 is full decelerated, 1 is
+// full accelerated, and 0 is linear (no acceleration). default
+// is 0.
+// unit : optional. specify the units for use with prop. default is
+// "px".
+//=====================================================================
+// bezier functions lifted from the lib_animation.js file in the
+// 13th Parallel API. www.13thparallel.org
+//=====================================================================
+
+function Accelimation(from, to, time, zip) {
+ if (typeof zip == "undefined") zip = 0;
+ if (typeof unit == "undefined") unit = "px";
+
+ this.x0 = from;
+ this.x1 = to;
+ this.dt = time;
+ this.zip = -zip;
+ this.unit = unit;
+ this.timer = null;
+ this.onend = new Function();
+ this.onframe = new Function();
+}
+
+
+
+//=====================================================================
+// public methods
+//=====================================================================
+
+// after you create an accelimation, you call this to start it-a runnin'
+Accelimation.prototype.start = function() {
+ this.t0 = new Date().getTime();
+ this.t1 = this.t0 + this.dt;
+ var dx = this.x1 - this.x0;
+ this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
+ this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
+ Accelimation._add(this);
+}
+
+// and if you need to stop it early for some reason...
+Accelimation.prototype.stop = function() {
+ Accelimation._remove(this);
+}
+
+
+
+//=====================================================================
+// private methods
+//=====================================================================
+
+// paints one frame. gets called by Accelimation._paintAll.
+Accelimation.prototype._paint = function(time) {
+ if (time < this.t1) {
+ var elapsed = time - this.t0;
+ this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
+ }
+ else this._end();
+}
+
+// ends the animation
+Accelimation.prototype._end = function() {
+ Accelimation._remove(this);
+ this.onframe(this.x1);
+ this.onend();
+}
+
+
+
+
+//=====================================================================
+// static methods (all private)
+//=====================================================================
+
+// add a function to the list of ones to call periodically
+Accelimation._add = function(o) {
+ var index = this.instances.length;
+ this.instances[index] = o;
+ // if this is the first one, start the engine
+ if (this.instances.length == 1) {
+ this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
+ }
+}
+
+// remove a function from the list
+Accelimation._remove = function(o) {
+ for (var i = 0; i < this.instances.length; i++) {
+ if (o == this.instances[i]) {
+ this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
+ break;
+ }
+ }
+ // if that was the last one, stop the engine
+ if (this.instances.length == 0) {
+ window.clearInterval(this.timerID);
+ this.timerID = null;
+ }
+}
+
+// "engine" - call each function in the list every so often
+Accelimation._paintAll = function() {
+ var now = new Date().getTime();
+ for (var i = 0; i < this.instances.length; i++) {
+ this.instances[i]._paint(now);
+ }
+}
+
+
+// Bezier functions:
+Accelimation._B1 = function(t) { return t*t*t }
+Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
+Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
+Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
+
+
+//Finds the coordinates of a point at a certain stage through a bezier curve
+Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
+ return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
+}
+
+
+//=====================================================================
+// static properties
+//=====================================================================
+
+Accelimation.instances = [];
+Accelimation.targetRes = 10;
+Accelimation.timerID = null;
+
+
+//=====================================================================
+// IE win memory cleanup
+//=====================================================================
+
+if (window.attachEvent) {
+ var cearElementProps = [
+ 'data',
+ 'onmouseover',
+ 'onmouseout',
+ 'onmousedown',
+ 'onmouseup',
+ 'ondblclick',
+ 'onclick',
+ 'onselectstart',
+ 'oncontextmenu'
+ ];
+
+ window.attachEvent("onunload", function() {
+ var el;
+ for(var d = document.all.length;d--;){
+ el = document.all[d];
+ for(var c = cearElementProps.length;c--;){
+ el[cearElementProps[c]] = null;
+ }
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js b/src/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js
new file mode 100644
index 0000000..88626c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/javascript/transmenuC.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ * Customizable multi-level animated DHTML menus with transparency.
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * ============================================================================================== */
+TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
+else r=true;}}
+return r;}
+TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
+TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
+document.write(aMenuHtml.join(""));}
+function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
+function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
+function initialize(){initCache();initEvents();initSize();ready=true;}
+function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
+function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
+function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
+if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
+switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
+x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
+function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
+function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
+function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
+function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
+else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
+function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
+_this.elmCache=elmCache;}
+function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
+if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
+elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
+function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
+function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
+function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
+function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
+function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
+function actuator_mouseover(){parentMenuSet.showMenu(_this);}
+function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
+function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
+function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
+function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
+function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
+function child_queue(){parentMenuSet.hideMenu(_this);}
+function child_dequeue(){parentMenuSet.showMenu(_this);}
+function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
+return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
+TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
+function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
+else{cancelHide(oMenu);}}
+function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
+function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
+function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
+function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
+function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
+function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
+var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
+return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
+function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
+Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
+Accelimation.prototype.stop=function(){Accelimation._remove(this);}
+Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
+else this._end();}
+Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
+Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
+Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
+if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
+Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
+Accelimation._B1=function(t){return t*t*t}
+Accelimation._B2=function(t){return 3*t*t*(1-t)}
+Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
+Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
+Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
+Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
+if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/jsevents/body.def b/src/usr/local/www/themes/pfsense_ng/jsevents/body.def
new file mode 100644
index 0000000..df461e2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/jsevents/body.def
@@ -0,0 +1,7 @@
+# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
+# where: forbidden pages are those pages that should *not* use
+# the particular JavaScript function within the JS event
+# specified below.
+# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $
+#
+onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/loader.js b/src/usr/local/www/themes/pfsense_ng/loader.js
new file mode 100644
index 0000000..ee215f3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/loader.js
@@ -0,0 +1,36 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/niftyjsCode.js"></script>');
+
+// jQuery function to define dropdown menu size
+jQuery(document).ready(function () {
+ var hwindow = '';
+ hwindow = (jQuery(window).height()-35);
+ // Force the size dropdown menu
+ jQuery('#navigation ul li ul').css('max-height', hwindow);
+});
+//]]>
diff --git a/src/usr/local/www/themes/pfsense_ng/login.css b/src/usr/local/www/themes/pfsense_ng/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/menu.inc b/src/usr/local/www/themes/pfsense_ng/menu.inc
new file mode 100644
index 0000000..d703daf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/menu.inc
@@ -0,0 +1,177 @@
+<?php
+/* $Id: menu.inc,v 1.3.2.1 2007/01/17 18:43:30 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ menu.inc
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+require("menu.inc");
+
+define("TMENU_STUB", "
+ // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
+ // but you can experiment with effect on loadtime.
+ if (TransMenu.isSupported()) {
+
+ //==================================================================================================
+ // create a set of dropdowns
+ //==================================================================================================
+ // the first param should always be down, as it is here
+ //
+ // The second and third param are the top and left offset positions of the menus from their actuators
+ // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
+ // something like -5, 5
+ //
+ // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
+ // of the actuator from which to measure the offset positions above. Here we are saying we want the
+ // menu to appear directly below the bottom left corner of the actuator
+ //==================================================================================================
+ var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
+
+ //==================================================================================================
+ // create a dropdown menu
+ //==================================================================================================
+ // the first parameter should be the HTML element which will act actuator for the menu
+ //==================================================================================================
+
+ @@MENU_DEFINITIONS@@
+
+ //==================================================================================================
+ // write drop downs into page
+ //==================================================================================================
+ // this method writes all the HTML for the menus into the page with document.write(). It must be
+ // called within the body of the HTML page.
+ //==================================================================================================
+ TransMenu.renderAll();
+ }
+");
+
+class NervecenterMenu extends Menu {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+ private $menuID = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $c);
+
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+ $this->menuID = $id;
+
+ if ($this->hasParent()) {
+ $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
+ }
+ } // end __construct
+
+ public function getMenuID() {
+ return $this->menuID;
+ }
+
+ public function setMenuID($myMenuID) {
+ $this->menuID = $myMenuID;
+ }
+
+ public function getMenuJScript() {
+ $childJScript = "";
+ foreach ($this->getChildren() as $component) {
+ $childJScript .= $component->getMenuJScript();
+ }
+
+ if (! $this->hasParent()) {
+ $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
+ } else {
+ $this->menuJScript .= "\n$childJScript\n";
+ }
+
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ if (! $this->hasParent()) {
+ $menuMarkup =<<<EOD
+ <div id="menu">
+ @@CHILD_ELEMENTS@@
+ </div>
+
+EOD;
+ } else {
+ $name = gettext($this->getID());
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+
+ $menuMarkup =<<<EOD
+ <a id="{$id}" href="#">{$name}</a>
+ @@CHILD_ELEMENTS@@
+EOD;
+ }
+
+ $childMarkup = "";
+ foreach ($this->getChildren() as $component) {
+ $childMarkup .= $component;
+ }
+
+ $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
+
+ return $menuMarkup;
+ }
+}
+
+class NervecenterMenuItem extends MenuItem {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $href, $c);
+
+ $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
+ $name = gettext($this->getID());
+ $file = $this->getFile();
+
+ $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
+ }
+
+ public function getMenuJScript() {
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ return "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng/new_tab_menu.css b/src/usr/local/www/themes/pfsense_ng/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/no_big_logo b/src/usr/local/www/themes/pfsense_ng/no_big_logo
new file mode 100644
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php b/src/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng/styles/menustyles.css b/src/usr/local/www/themes/pfsense_ng/styles/menustyles.css
new file mode 100644
index 0000000..06b3c7a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/styles/menustyles.css
@@ -0,0 +1,44 @@
+#navigation {
+ /* border:1px solid black; */
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ padding-top: 4px;
+ }
+
+#menu {
+ /* background: #990000; */
+ /* border-bottom:1px solid white; */
+ padding: 0 0 0 0;
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ }
+#menu a {
+ padding: 2px 28px 4px 28px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.0em;
+ color: #FFFFFF;
+ width: 08%;
+ height: 16px;
+ }
+#menu a.hover {
+ background: #AF2020;
+ }
+#menu span {
+ display: none;
+ }
+
+#subnav {
+ font-size: 10px;
+ margin-bottom: 2em;
+ }
+#subnav a {
+ color: #FF0000; /* #FB3B00; */
+ margin-right: 1em;
+ }
+#subnav span {
+ color: silver;
+ margin-right: 1em;
+ }
diff --git a/src/usr/local/www/themes/pfsense_ng/styles/transmenu.css b/src/usr/local/www/themes/pfsense_ng/styles/transmenu.css
new file mode 100644
index 0000000..f683574
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/styles/transmenu.css
@@ -0,0 +1,75 @@
+/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
+.transMenu {
+ position:absolute;
+ overflow:hidden;
+ left:-1000px;
+ top:-1000px;
+ }
+
+/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
+.transMenu .content {
+ position:absolute;
+ }
+
+/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
+.transMenu .items {
+ position:relative;
+ left:0px; top:0px;
+ z-index:2;
+ }
+
+.transMenu.top .items {
+ border-top:none;
+ }
+
+/* each TR.item is one menu item */
+.transMenu .item {
+ color: #FFFFFF; /* #336; */
+ font-size: 1.1em;
+ font-weight: normal;
+ font-family:sans-serif;
+ text-decoration:none;
+ /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
+ border:none;
+ cursor:pointer;
+ cursor:hand;
+ }
+
+/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
+/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
+.transMenu .background {
+ position:absolute;
+ left:0px; top:0px;
+ z-index:1;
+ -moz-opacity:.8;
+ filter:alpha(opacity=80);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowRight {
+ position:absolute;
+ z-index:3;
+ top:3px; width:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowBottom {
+ position:absolute;
+ z-index:1;
+ left:3px; height:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
+.transMenu .item.hover {
+ background:#fdfdfd;
+ color:black;
+ }
+
+/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
+.transMenu .item img {
+ margin-left:10px;
+ } \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng/wizard.css b/src/usr/local/www/themes/pfsense_ng/wizard.css
new file mode 100644
index 0000000..f2c9f3e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng/wizard.css
@@ -0,0 +1,1117 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ /* background: url('images/background.png') no-repeat; */
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/all.css b/src/usr/local/www/themes/pfsense_ng_fs/all.css
new file mode 100644
index 0000000..7286d1c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/all.css
@@ -0,0 +1,1375 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+a:link {
+ color: #550000;
+}
+
+a:visited {
+ color: #550000;
+}
+
+a:active {
+ color: #550000;
+}
+
+a:hover {
+ color: #550000;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* style of disabled formelements */
+#wrap div {margin:1em 0}
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 40px;
+ width: 810px;
+ position: fixed;
+ left: 0;
+ margin-bottom: 5px;
+ z-index: 2;
+ top: 0;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 40px;
+ width: 80px;
+ left: 0px;
+ top:0px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 0px;
+ left: 0px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 30px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+/* for forcing an alert run the following command from diagnostics>command, php command:
+file_notice("blah", "blah blah...testing my new theme...");
+*/
+
+#header-right .container .right #alerts {
+ position: fixed;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 40px;
+ width: 400px;
+ top: 0px;
+ left: 810px;
+ z-index: 2;
+ padding-top: 1px;
+ padding-left: 10px;
+ margin: 0px;
+}
+
+#header-right .container .right #hostname {
+ position: fixed;
+ background: url('images/hostname.png') no-repeat;
+ height: 40px;
+ width: 400px;
+ z-index: 1;
+ padding-right: 5px;
+ margin: 0px;
+ top: 0px;
+ left: 810px;
+ font-size: 12px;
+ color: #000000;
+ font-weight: bold;
+ padding-left: 40px;
+ padding-top: 2px;
+ text-align: left;
+}
+
+
+
+
+table#marquee {
+ position: relative;
+ top: -4px;
+ left: 15px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 350px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+/* font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff; */
+ font-size: 12px;
+ font-weight: normal;
+ font-style: italic;
+ color: #000000;
+ padding-left: 30px;
+ padding-top: 2px;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 330px;
+ height: 16px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+#content {
+ padding-top: 50px;
+ padding-right: 40px;
+ padding-left: 40px;
+}
+
+
+/* try to abuse left as a fadeout at the end of the page */
+#left {
+ width: 810px;
+ height: 1px;
+}
+
+#right {
+ padding: 10px;
+ margin-bottom: 30px;
+ font-size: 12px;
+ font-weight: 200;
+ line-height: 12px;
+ color: inherit;
+ background-color: #eeeeee;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+#footer {
+ text-align: center;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+
+}
+
+/* Style the List */
+#navigation {
+ position: fixed;
+ top: 0px;
+ left: 100px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+ margin-left: 10px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ padding-right: 20px;
+ top: 0px;
+}
+
+/* Text mainmenubar */
+#navigation ul li div {
+ background-image: url(images/mainmenu-right.gif);
+ background-position: 2% 50%;
+ background-repeat: no-repeat;
+ padding-top:0px;
+ font-size: 12px;
+ font-weight: normal;
+ color: #ffffff;
+ text-align: left;
+ padding-left: 13px;
+ height: 13px;
+}
+
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ font-weight: normal;
+ margin-top: 1px;
+ padding-top: 5px;
+ background: #850000;
+ border: 0px;
+ /* transparent */
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
+ -moz-opacity: 0.95;
+ -khtml-opacity: 0.95;
+ opacity: 0.95;
+ /* borders */
+ border-bottom-right-radius: 0px;
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ /* Mozilla */
+ -moz-border-radius-bottomright: 0px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-topleft: 6px;
+ /* WebKit */
+ -webkit-border-bottom-right-radius: 0px;
+ -webkit-border-bottom-left-radius: 6px;
+ -webkit-border-top-right-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ /* Shadow Effect */
+ box-shadow: 5px 5px 10px #000000;
+ -webkit-box-shadow: 5px 5px 10px #000000;
+ -moz-box-shadow: 5px 5px 10px #000000;
+ /* Vertical menu max size */
+ /* max-height: 259px; /
+ /* Horizontal menu max size */
+ max-width: 128px;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+ background-image: url(images/mainmenu-down.gif);
+ background-position: 5% 50%;
+ background-repeat: no-repeat;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #000000;
+}
+/* dropdownmenu */
+#navigation ul li ul li {
+ border: 0px solid #850000;
+ width: 128px;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #850000;
+ /* borders */
+ border-bottom-right-radius: 0px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ /* Mozilla */
+ -moz-border-radius-bottomright: 0px;
+ -moz-border-radius-bottomleft: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-topleft: 3px;
+ /* WebKit */
+ -webkit-border-bottom-right-radius: 0px;
+ -webkit-border-bottom-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+}
+/* last element in dropdown menu*/
+#navigation ul li ul li:last-child {
+ margin-bottom: 5px;
+}
+#navigation ul li ul li:hover {
+ margin-left: 5px;
+ background-color: #666666;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=95);
+ -moz-opacity: 0.95;
+ -khtml-opacity: 0.95;
+ opacity: 0.95;
+}
+
+/* textcolor in dropdownmenu */
+#navigation li li a {
+ display: block;
+ padding-left: 8px;
+ padding-right: 8px;
+ color: #ffffff;
+ font-size: 11px;
+ font-weight: normal;
+ text-align: left;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+}
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+ background-color: transparent;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-left: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ color: #FFFFFF;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+/* style of disabled formelements */
+[disabled] {
+ color:#666666;
+ background:#eeeeee;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #B1B1B1;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ /* background-color: #EEEEEE; this causing light gray rectangles to the right of many tables in gui */
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png b/src/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js b/src/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/favicon.ico b/src/usr/local/www/themes/pfsense_ng_fs/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/graphlink.css b/src/usr/local/www/themes/pfsense_ng_fs/graphlink.css
new file mode 100644
index 0000000..521059e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id: graphlink.css,v 1.2.2.1 2007/01/17 18:43:30 sullrich Exp $
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/nervecenter/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png b/src/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png
new file mode 100755
index 0000000..5a8ac81
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/alert_bgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/alerter.png b/src/usr/local/www/themes/pfsense_ng_fs/images/alerter.png
new file mode 100755
index 0000000..e026bfe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/alerter.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/background.jpg b/src/usr/local/www/themes/pfsense_ng_fs/images/background.jpg
new file mode 100755
index 0000000..ebdff47
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/background.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/footer.png b/src/usr/local/www/themes/pfsense_ng_fs/images/footer.png
new file mode 100755
index 0000000..b10002b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/header.png b/src/usr/local/www/themes/pfsense_ng_fs/images/header.png
new file mode 100755
index 0000000..6f8128c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/header.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/help.png b/src/usr/local/www/themes/pfsense_ng_fs/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png b/src/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png
new file mode 100755
index 0000000..f098bb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/horizontal.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/hostname.png b/src/usr/local/www/themes/pfsense_ng_fs/images/hostname.png
new file mode 100755
index 0000000..cd79f5c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/hostname.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png
new file mode 100755
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/log.png b/src/usr/local/www/themes/pfsense_ng_fs/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/logo.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/logo.gif
new file mode 100755
index 0000000..e5da95c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg b/src/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif
new file mode 100755
index 0000000..e59432a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif
new file mode 100755
index 0000000..14298a1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenu-right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif
new file mode 100755
index 0000000..6e97478
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/mainmenuitem.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif
new file mode 100755
index 0000000..c76609b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menu-dot.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif
new file mode 100755
index 0000000..d06faa4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menu_footer.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png
new file mode 100755
index 0000000..45e0ec7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png
new file mode 100755
index 0000000..fdff49f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png
new file mode 100755
index 0000000..05f4832
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/menubgr_highlight.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif
new file mode 100755
index 0000000..529d827
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/left_background.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif
new file mode 100755
index 0000000..5d10ac3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif
new file mode 100755
index 0000000..05bb04c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png
new file mode 100755
index 0000000..98aa37a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif
new file mode 100755
index 0000000..ca35e2a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png b/src/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/status.png b/src/usr/local/www/themes/pfsense_ng_fs/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif b/src/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png
new file mode 100755
index 0000000..758b716
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/grey-40.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif
new file mode 100755
index 0000000..ddcdcae
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-off.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif
new file mode 100755
index 0000000..7a58077
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/submenu-on.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png
new file mode 100755
index 0000000..efc84b4
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/white-90.png
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif
new file mode 100755
index 0000000..5bfd67a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/img/x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js
new file mode 100644
index 0000000..e71ea14
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php
new file mode 100644
index 0000000..afb7090
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-body.php
@@ -0,0 +1,51 @@
+<?php
+/* $Id: transmenu-body.php,v 1.1.2.1 2007/01/17 18:43:47 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ transmenu-body.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetBodyJS() {
+ global $rootmenu;
+
+ if (isset($rootmenu)) {
+ return $rootmenu->getMenuJScript();
+ } else if (empty($rootmenu)) {
+ return "alert('No rootmenu object found.');";
+ } else {
+ return "alert('No JavaScript attached to rootmenu object.');";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php
new file mode 100644
index 0000000..afc6402
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu-head.php
@@ -0,0 +1,85 @@
+<?php
+/* $Id: transmenu-head.php,v 1.2.2.1 2007/01/17 18:43:47 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ transmenu-head.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetHeadJS() {
+ global $g, $rootmenu;
+
+ $transmenu_stub =<<<EOD
+ function tmenuinit() {
+ //==========================================================================================
+ // if supported, initialize TransMenus
+ //==========================================================================================
+ // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
+ // This is better than server-side checking because it will also catch browsers which would
+ // normally support the menus but have javascript disabled.
+ //
+ // If supported, call initialize() and then hook whatever image rollover code you need to do
+ // to the .onactivate and .ondeactivate events for each menu.
+ //==========================================================================================
+ if (TransMenu.isSupported()) {
+ TransMenu.initialize();
+
+ // hook all the highlight swapping of the main toolbar to menu activation/deactivation
+ // instead of simple rollover to get the effect where the button stays hightlit until
+ // the menu is closed.
+ @@CHILD_JSCRIPT@@
+ }
+ } // end function
+EOD;
+
+ if (empty($rootmenu)) {
+ require_once("menudef.inc");
+ }
+
+ $childJScript = "";
+ foreach ($rootmenu->getChildren() as $component) {
+ $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
+
+ $childJScript .=<<<EOD
+ {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
+ {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
+
+EOD;
+ }
+
+ $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
+
+ return $transmenu_stub;
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org
new file mode 100644
index 0000000..6c9e353
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenu.org
@@ -0,0 +1,785 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ *
+ * Customizable multi-level animated DHTML menus with transparency.
+ *
+ * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * =================================================================================================
+ * updates:
+ * 04.19.04 fixed cascade problem with menus nested greater than two levels.
+ * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
+ * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
+ * also made gecko check a little more strict by specifying build no.
+ * ============================================================================================== */
+
+
+
+//==================================================================================================
+// Configuration properties
+//==================================================================================================
+TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
+TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
+TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
+TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
+TransMenu.menuPadding = 5; // padding between menu border and items grid
+TransMenu.itemPadding = 3; // additional padding around each item
+TransMenu.shadowSize = 2; // size of shadow under menu
+TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
+TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
+TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
+TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
+TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
+TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
+TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
+
+
+//==================================================================================================
+// Internal use properties
+//==================================================================================================
+TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
+TransMenu.direction = {down:1,right:2};
+TransMenu.registry = [];
+TransMenu._maxZ = 100;
+
+
+
+//==================================================================================================
+// Static methods
+//==================================================================================================
+// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
+TransMenu.isSupported = function() {
+ var ua = navigator.userAgent.toLowerCase();
+ var pf = navigator.platform.toLowerCase();
+ var an = navigator.appName;
+ var r = false;
+
+ if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
+ else if (an == "Microsoft Internet Explorer") {
+ if (document.getElementById) { // ie5.1+ mac,win
+ if (pf.indexOf("mac") == 0) {
+ r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
+ }
+ else r = true;
+ }
+ }
+
+ return r;
+}
+
+// call this in onload once menus have been created
+TransMenu.initialize = function() {
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ menu.initialize();
+ }
+}
+
+// call this in document body to write out menu html
+TransMenu.renderAll = function() {
+ var aMenuHtml = [];
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ aMenuHtml[i] = menu.toString();
+ }
+ document.write(aMenuHtml.join(""));
+}
+
+//==================================================================================================
+// TransMenu constructor (only called internally)
+//==================================================================================================
+// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
+// reference to an HTML element, or a TransMenuItem from an existing menu.
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menu from actuator
+// iTop : Top pixel offset of menu from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+// parentMenuSet : Menuset this menu will be added to.
+//==================================================================================================
+function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
+ // public methods
+ this.addItem = addItem;
+ this.addMenu = addMenu;
+ this.toString = toString;
+ this.initialize = initialize;
+ this.isOpen = false;
+ this.show = show;
+ this.hide = hide;
+ this.items = [];
+
+ // events
+ this.onactivate = new Function(); // when the menu starts to slide open
+ this.ondeactivate = new Function(); // when the menu finishes sliding closed
+ this.onmouseover = new Function(); // when the menu has been moused over
+ this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
+ this.ondequeue = new Function();
+
+ // initialization
+ this.index = TransMenu.registry.length;
+ TransMenu.registry[this.index] = this;
+
+ var id = "TransMenu" + this.index;
+ var contentHeight = null;
+ var contentWidth = null;
+ var childMenuSet = null;
+ var animating = false;
+ var childMenus = [];
+ var slideAccel = -1;
+ var elmCache = null;
+ var ready = false;
+ var _this = this;
+ var a = null;
+
+ var pos = iDirection == TransMenu.direction.down ? "top" : "left";
+ var dim = null;
+
+ // private and public method implimentations
+ function addItem(sText, sUrl) {
+ var item = new TransMenuItem(sText, sUrl, this);
+ item._index = this.items.length;
+ this.items[item._index] = item;
+ }
+
+ function addMenu(oMenuItem) {
+ if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
+
+ if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
+
+ var m = childMenuSet.addMenu(oMenuItem);
+
+ childMenus[oMenuItem._index] = m;
+ m.onmouseover = child_mouseover;
+ m.ondeactivate = child_deactivate;
+ m.onqueue = child_queue;
+ m.ondequeue = child_dequeue;
+
+ return m;
+ }
+
+ function initialize() {
+ initCache();
+ initEvents();
+ initSize();
+ ready = true;
+ }
+
+ function show() {
+ //dbg_dump("show");
+ if (ready) {
+ _this.isOpen = true;
+ animating = true;
+ setContainerPos();
+ elmCache["clip"].style.visibility = "visible";
+ elmCache["clip"].style.zIndex = TransMenu._maxZ++;
+ //dbg_dump("maxZ: " + TransMenu._maxZ);
+ slideStart();
+ _this.onactivate();
+ }
+ }
+
+ function hide() {
+ if (ready) {
+ _this.isOpen = false;
+ animating = true;
+
+ for (var i = 0, item = null; item = elmCache.item[i]; i++)
+ dehighlight(item);
+
+ if (childMenuSet) childMenuSet.hide();
+
+ slideStart();
+ _this.ondeactivate();
+ }
+ }
+
+ function setContainerPos() {
+ var sub = oActuator.constructor == TransMenuItem;
+ var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
+ var el = act;
+
+ var x = 0;
+ var y = 0;
+
+
+ var minX = 0;
+ var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
+ var minY = 0;
+ var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
+
+ // add up all offsets... subtract any scroll offset
+ while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
+ x += el.offsetLeft;
+ y += el.offsetTop;
+
+ if (el.scrollLeft) x -= el.scrollLeft;
+ if (el.scrollTop) y -= el.scrollTop;
+
+ el = el.offsetParent;
+ }
+
+ if (oActuator.constructor == TransMenuItem) {
+ x += parseInt(el.parentNode.style.left);
+ y += parseInt(el.parentNode.style.top);
+ }
+
+ switch (iReferencePoint) {
+ case TransMenu.reference.topLeft:
+ break;
+ case TransMenu.reference.topRight:
+ x += act.offsetWidth;
+ break;
+ case TransMenu.reference.bottomLeft:
+ y += act.offsetHeight;
+ break;
+ case TransMenu.reference.bottomRight:
+ x += act.offsetWidth;
+ y += act.offsetHeight;
+ break;
+ }
+
+ x += iLeft;
+ y += iTop;
+
+ x = Math.max(Math.min(x, maxX), minX);
+ y = Math.max(Math.min(y, maxY), minY);
+
+ elmCache["clip"].style.left = x + "px";
+ elmCache["clip"].style.top = y + "px";
+ }
+
+ function slideStart() {
+ var x0 = parseInt(elmCache["content"].style[pos]);
+ var x1 = _this.isOpen ? 0 : -dim;
+
+ if (a != null) a.stop();
+ a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
+
+ a.onframe = slideFrame;
+ a.onend = slideEnd;
+
+ a.start();
+ }
+
+ function slideFrame(x) {
+ elmCache["content"].style[pos] = x + "px";
+ }
+
+ function slideEnd() {
+ if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
+ animating = false;
+ }
+
+ function initSize() {
+ // everything is based off the size of the items table...
+ var ow = elmCache["items"].offsetWidth;
+ var oh = elmCache["items"].offsetHeight;
+ var ua = navigator.userAgent.toLowerCase();
+
+ // clipping container should be ow/oh + the size of the shadow
+ elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
+ elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
+
+ // same with content...
+ elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
+ elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
+
+ contentHeight = oh + TransMenu.shadowSize;
+ contentWidth = ow + TransMenu.shadowSize;
+
+ dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
+
+ // set initially closed
+ elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
+ elmCache["clip"].style.visibility = "hidden";
+
+ // if *not* mac/ie 5
+ if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
+ // set background div to offset size
+ elmCache["background"].style.width = ow + "px";
+ elmCache["background"].style.height = oh + "px";
+ elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
+ elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
+ elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
+ }
+ // mac ie is a little different because we use a PNG for the transparency
+ else {
+ // set background div to offset size
+ elmCache["background"].firstChild.src = TransMenu.backgroundPng;
+ elmCache["background"].firstChild.width = ow;
+ elmCache["background"].firstChild.height = oh;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
+ elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
+ elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
+ }
+ }
+
+ function initCache() {
+ var menu = document.getElementById(id);
+ var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
+
+ elmCache = {};
+ elmCache["clip"] = menu;
+ elmCache["item"] = [];
+
+ for (var i = 0, elm = null; elm = all[i]; i++) {
+ switch (elm.className) {
+ case "items":
+ case "content":
+ case "background":
+ case "shadowRight":
+ case "shadowBottom":
+ elmCache[elm.className] = elm;
+ break;
+ case "item":
+ elm._index = elmCache["item"].length;
+ elmCache["item"][elm._index] = elm;
+ break;
+ }
+ }
+
+ // hack!
+ _this.elmCache = elmCache;
+ }
+
+ function initEvents() {
+ // hook item mouseover
+ for (var i = 0, item = null; item = elmCache.item[i]; i++) {
+ item.onmouseover = item_mouseover;
+ item.onmouseout = item_mouseout;
+ item.onclick = item_click;
+ }
+
+ // hook actuation
+ if (typeof oActuator.tagName != "undefined") {
+ oActuator.onmouseover = actuator_mouseover;
+ oActuator.onmouseout = actuator_mouseout;
+ }
+
+ // hook menu mouseover
+ elmCache["content"].onmouseover = content_mouseover;
+ elmCache["content"].onmouseout = content_mouseout;
+ }
+
+ function highlight(oRow) {
+ oRow.className = "item hover";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
+ }
+
+ function dehighlight(oRow) {
+ oRow.className = "item";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
+ }
+
+ function item_mouseover() {
+ if (!animating) {
+ highlight(this);
+
+ if (childMenus[this._index])
+ childMenuSet.showMenu(childMenus[this._index]);
+ else if (childMenuSet) childMenuSet.hide();
+ }
+ }
+
+ function item_mouseout() {
+ if (!animating) {
+ if (childMenus[this._index])
+ childMenuSet.hideMenu(childMenus[this._index]);
+ else // otherwise child_deactivate will do this
+ dehighlight(this);
+ }
+ }
+
+ function item_click() {
+ if (!animating) {
+ if (_this.items[this._index].url)
+ location.href = _this.items[this._index].url;
+ }
+ }
+
+ function actuator_mouseover() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function actuator_mouseout() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function content_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ _this.onmouseover();
+ }
+ }
+
+ function content_mouseout() {
+ if (!animating) {
+ parentMenuSet.hideMenu(_this);
+ }
+ }
+
+ function child_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ }
+ }
+
+ function child_deactivate() {
+ for (var i = 0; i < childMenus.length; i++) {
+ if (childMenus[i] == this) {
+ dehighlight(elmCache["item"][i]);
+ break;
+ }
+ }
+ }
+
+ function child_queue() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function child_dequeue() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function toString() {
+ var aHtml = [];
+ var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
+
+ for (var i = 0, item = null; item = this.items[i]; i++) {
+ aHtml[i] = item.toString(childMenus[i]);
+ }
+
+ return '<div id="' + id + '" class="' + sClassName + '">' +
+ '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
+ aHtml.join('') +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
+ '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '</div></div>';
+ }
+}
+
+
+//==================================================================================================
+// TransMenuSet
+//==================================================================================================
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menus from actuator
+// iTop : Top pixel offset of menus from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+//==================================================================================================
+TransMenuSet.registry = [];
+
+function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
+ // public methods
+ this.addMenu = addMenu;
+ this.showMenu = showMenu;
+ this.hideMenu = hideMenu;
+ this.hide = hide;
+ this.hideCurrent = hideCurrent;
+
+ // initialization
+ var menus = [];
+ var _this = this;
+ var current = null;
+
+ this.index = TransMenuSet.registry.length;
+ TransMenuSet.registry[this.index] = this;
+
+ // method implimentations...
+ function addMenu(oActuator) {
+ var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
+ menus[menus.length] = m;
+ return m;
+ }
+
+ function showMenu(oMenu) {
+ if (oMenu != current) {
+ // close currently open menu
+ if (current != null) hide(current);
+
+ // set current menu to this one
+ current = oMenu;
+
+ // if this menu is closed, open it
+ oMenu.show();
+ }
+ else {
+ // hide pending calls to close this menu
+ cancelHide(oMenu);
+ }
+ }
+
+ function hideMenu(oMenu) {
+ //dbg_dump("hideMenu a " + oMenu.index);
+ if (current == oMenu && oMenu.isOpen) {
+ //dbg_dump("hideMenu b " + oMenu.index);
+ if (!oMenu.hideTimer) scheduleHide(oMenu);
+ }
+ }
+
+ function scheduleHide(oMenu) {
+ //dbg_dump("scheduleHide " + oMenu.index);
+ oMenu.onqueue();
+ oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
+ }
+
+ function cancelHide(oMenu) {
+ //dbg_dump("cancelHide " + oMenu.index);
+ if (oMenu.hideTimer) {
+ oMenu.ondequeue();
+ window.clearTimeout(oMenu.hideTimer);
+ oMenu.hideTimer = null;
+ }
+ }
+
+ function hide(oMenu) {
+ if (!oMenu && current) oMenu = current;
+
+ if (oMenu && current == oMenu && oMenu.isOpen) {
+ hideCurrent();
+ }
+ }
+
+ function hideCurrent() {
+ if (null != current) {
+ cancelHide(current);
+ current.hideTimer = null;
+ current.hide();
+ current = null;
+ }
+ }
+}
+
+//==================================================================================================
+// TransMenuItem (internal)
+// represents an item in a dropdown
+//==================================================================================================
+// sText : The item display text
+// sUrl : URL to load when the item is clicked
+// oParent : Menu this item is a part of
+//==================================================================================================
+function TransMenuItem(sText, sUrl, oParent) {
+ this.toString = toString;
+ this.text = sText;
+ this.url = sUrl;
+ this.parentMenu = oParent;
+
+ function toString(bDingbat) {
+ var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
+ var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
+ var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
+ var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
+
+ return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
+ sText + '</td><td width="14" style="' + sPaddingRight + '">' +
+ '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
+ }
+}
+
+
+
+
+
+
+//=====================================================================
+// Accel[erated] [an]imation object
+// change a property of an object over time in an accelerated fashion
+//=====================================================================
+// obj : reference to the object whose property you'd like to animate
+// prop : property you would like to change eg: "left"
+// to : final value of prop
+// time : time the animation should take to run
+// zip : optional. specify the zippiness of the acceleration. pick a
+// number between -1 and 1 where -1 is full decelerated, 1 is
+// full accelerated, and 0 is linear (no acceleration). default
+// is 0.
+// unit : optional. specify the units for use with prop. default is
+// "px".
+//=====================================================================
+// bezier functions lifted from the lib_animation.js file in the
+// 13th Parallel API. www.13thparallel.org
+//=====================================================================
+
+function Accelimation(from, to, time, zip) {
+ if (typeof zip == "undefined") zip = 0;
+ if (typeof unit == "undefined") unit = "px";
+
+ this.x0 = from;
+ this.x1 = to;
+ this.dt = time;
+ this.zip = -zip;
+ this.unit = unit;
+ this.timer = null;
+ this.onend = new Function();
+ this.onframe = new Function();
+}
+
+
+
+//=====================================================================
+// public methods
+//=====================================================================
+
+// after you create an accelimation, you call this to start it-a runnin'
+Accelimation.prototype.start = function() {
+ this.t0 = new Date().getTime();
+ this.t1 = this.t0 + this.dt;
+ var dx = this.x1 - this.x0;
+ this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
+ this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
+ Accelimation._add(this);
+}
+
+// and if you need to stop it early for some reason...
+Accelimation.prototype.stop = function() {
+ Accelimation._remove(this);
+}
+
+
+
+//=====================================================================
+// private methods
+//=====================================================================
+
+// paints one frame. gets called by Accelimation._paintAll.
+Accelimation.prototype._paint = function(time) {
+ if (time < this.t1) {
+ var elapsed = time - this.t0;
+ this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
+ }
+ else this._end();
+}
+
+// ends the animation
+Accelimation.prototype._end = function() {
+ Accelimation._remove(this);
+ this.onframe(this.x1);
+ this.onend();
+}
+
+
+
+
+//=====================================================================
+// static methods (all private)
+//=====================================================================
+
+// add a function to the list of ones to call periodically
+Accelimation._add = function(o) {
+ var index = this.instances.length;
+ this.instances[index] = o;
+ // if this is the first one, start the engine
+ if (this.instances.length == 1) {
+ this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
+ }
+}
+
+// remove a function from the list
+Accelimation._remove = function(o) {
+ for (var i = 0; i < this.instances.length; i++) {
+ if (o == this.instances[i]) {
+ this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
+ break;
+ }
+ }
+ // if that was the last one, stop the engine
+ if (this.instances.length == 0) {
+ window.clearInterval(this.timerID);
+ this.timerID = null;
+ }
+}
+
+// "engine" - call each function in the list every so often
+Accelimation._paintAll = function() {
+ var now = new Date().getTime();
+ for (var i = 0; i < this.instances.length; i++) {
+ this.instances[i]._paint(now);
+ }
+}
+
+
+// Bezier functions:
+Accelimation._B1 = function(t) { return t*t*t }
+Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
+Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
+Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
+
+
+//Finds the coordinates of a point at a certain stage through a bezier curve
+Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
+ return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
+}
+
+
+//=====================================================================
+// static properties
+//=====================================================================
+
+Accelimation.instances = [];
+Accelimation.targetRes = 10;
+Accelimation.timerID = null;
+
+
+//=====================================================================
+// IE win memory cleanup
+//=====================================================================
+
+if (window.attachEvent) {
+ var cearElementProps = [
+ 'data',
+ 'onmouseover',
+ 'onmouseout',
+ 'onmousedown',
+ 'onmouseup',
+ 'ondblclick',
+ 'onclick',
+ 'onselectstart',
+ 'oncontextmenu'
+ ];
+
+ window.attachEvent("onunload", function() {
+ var el;
+ for(var d = document.all.length;d--;){
+ el = document.all[d];
+ for(var c = cearElementProps.length;c--;){
+ el[cearElementProps[c]] = null;
+ }
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js
new file mode 100644
index 0000000..88626c7
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/javascript/transmenuC.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ * Customizable multi-level animated DHTML menus with transparency.
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * ============================================================================================== */
+TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
+else r=true;}}
+return r;}
+TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
+TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
+document.write(aMenuHtml.join(""));}
+function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
+function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
+function initialize(){initCache();initEvents();initSize();ready=true;}
+function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
+function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
+function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
+if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
+switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
+x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
+function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
+function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
+function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
+function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
+else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
+function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
+_this.elmCache=elmCache;}
+function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
+if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
+elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
+function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
+function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
+function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
+function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
+function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
+function actuator_mouseover(){parentMenuSet.showMenu(_this);}
+function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
+function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
+function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
+function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
+function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
+function child_queue(){parentMenuSet.hideMenu(_this);}
+function child_dequeue(){parentMenuSet.showMenu(_this);}
+function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
+return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
+TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
+function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
+else{cancelHide(oMenu);}}
+function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
+function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
+function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
+function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
+function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
+function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
+var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
+return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
+function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
+Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
+Accelimation.prototype.stop=function(){Accelimation._remove(this);}
+Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
+else this._end();}
+Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
+Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
+Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
+if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
+Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
+Accelimation._B1=function(t){return t*t*t}
+Accelimation._B2=function(t){return 3*t*t*(1-t)}
+Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
+Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
+Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
+Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
+if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def b/src/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def
new file mode 100644
index 0000000..df461e2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/jsevents/body.def
@@ -0,0 +1,7 @@
+# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
+# where: forbidden pages are those pages that should *not* use
+# the particular JavaScript function within the JS event
+# specified below.
+# $Id: body.def,v 1.2.2.1 2007/01/17 18:43:52 sullrich Exp $
+#
+onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/loader.js b/src/usr/local/www/themes/pfsense_ng_fs/loader.js
new file mode 100644
index 0000000..c8ebe60
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/loader.js
@@ -0,0 +1,294 @@
+//<![CDATA[
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '')
+{
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '')
+{
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7)
+ document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/ie7/ie7-standard-p.js"></script>');
+
+document.write('<script type="text/javascript" src="/themes/pfsense_ng/javascript/niftyjsCode.js"></script>');
+
+///////////////////////////////////////////
+// jQuery code for columns / widgets part 1
+///////////////////////////////////////////
+
+var noCols = 2;
+var printed3 = false;
+var printed4 = false;
+var printed5 = false;
+var printed6 = false;
+var printed7 = false;
+var printed8 = false;
+var printed9 = false;
+var printed10 = false;
+var id;
+var noColsOnLoad = noCols; // holds a reference to the number of displayed columns on load
+var existing =[]; // array to hold each columns contents
+var specifiedColWidth = 350; // width of columns for resizing
+
+///////////////////////////////////////////
+// jQuery Widget functions
+///////////////////////////////////////////
+
+// function to connect all columns to each other to allow jQuery interaction (drag and droppable)
+function connectColumns()
+{
+ jQuery('.ui-sortable').sortable({connectWith: '.ui-sortable', dropOnEmpty: true, handle: '.widgetheader', change: showSave});
+}
+
+// function to add columns due to a window resize
+function resizeAddColumns()
+{
+ if(noColsOnLoad > noCols) // if a column has previously been deleted
+ {
+ var maxCols = maxColsToDisplay(); // the maximum we can display
+
+ if(noColsOnLoad < maxCols) // if the number of columns on load is less then the maximum number of columns we can display
+ maxCols = noColsOnLoad; // change the maximum number of columns as we do not want to display them all
+ if( (maxCols - noCols) > 0 ) // if we need to add more columns
+ {
+ replaceColumn();
+
+ for(var i=noCols; i<maxCols; i++)
+ {
+ var addCols = i +1;
+ jQuery('#col' + (i).toString() ).after("<div id=\"col" + addCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
+ jQuery(existing[i]).appendTo('#col' + addCols ); // append onLoad contents
+ }
+ noCols = maxCols;
+ for(var i=noCols; i<noColsOnLoad ; i++)
+ {
+ jQuery(existing[i]).appendTo('#col' + maxCols ); // append widgets from stored array to columns
+ }
+ correctWidgetDisplay(noCols);
+ connectColumns();
+ showSave();
+ }
+ }
+}
+
+
+// function to remove columns due to a window resize
+function resizeRmColumns()
+{
+ if( noCols > 1 ) // keep at least 1 column displayed at all times
+ {
+ var maxCols = maxColsToDisplay();
+ var noColsToDel = noCols - maxCols;
+
+ if(noColsToDel>0) // if columns need deleteing
+ {
+ for(var i=(noCols-noColsToDel); i<noColsOnLoad; i++)
+ {
+ jQuery(existing[i]).appendTo('#col' + maxCols ); // append widgets from stored array to columns
+ }
+ for(var i=0; i<noColsToDel; i++ )
+ {
+ var del = noCols -i;
+ jQuery('#col' + del ).remove(); // remove columns
+ }
+ noCols = maxCols;
+ correctWidgetDisplay(noCols);
+ showSave();
+ }
+ }
+};
+
+
+// functions to removes the highest value column current displayed and replaces it with the same column number on load ie before any resizing took place
+function replaceColumn()
+{
+ var tmpReplace = noCols -1;
+ jQuery('#col' + noCols ).remove();
+
+ // prepend column1 as we can't add it AFTER a column as none will exist
+ if(tmpReplace==0)
+ jQuery("#niftyOutter").prepend("<div id=\"col1\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
+ else
+ jQuery('#col' + (tmpReplace).toString() ).after("<div id=\"col" + noCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
+ jQuery(existing[tmpReplace]).appendTo('#col' + noCols);
+}
+
+
+// function to calculate & return the maximum number of columns we can display
+function maxColsToDisplay()
+{
+ var niftyWidth = jQuery('#niftyOutter.fakeClass').width();
+ return Math.round(niftyWidth / specifiedColWidth);
+}
+
+// function to amend the widget width
+function correctWidgetDisplay(noCols)
+{
+ var percent = ( 100 / noCols ) - 0.1;
+ var percentStr = percent.toString() + '%';
+
+ // set all column widths
+ jQuery('.ui-sortable').width(percentStr);
+}
+
+// function to insert a new column we can place content into (from saved state)
+function printColumn(newNum)
+{
+ if(newNum > noCols)
+ {
+ noCols = newNum;
+ noColsOnLoad = noCols;
+ }
+
+ document.write("</div><div id=\"col" + newNum + "\" style=\"float:left; padding-bottom:40px\" class=\"ui-sortable\">");
+ correctWidgetDisplay(noCols);
+ connectColumns();
+}
+
+// function to create the columns
+function createColumn(colPos)
+{
+ if (colpos == "col3" && printed3 == false){
+ printColumn(3);
+ printed3=true;
+ }
+ else if (colpos == "col4" && printed4 == false){
+ printColumn(4);
+ printed4=true;
+ }
+ else if (colpos == "col5" && printed5 == false){
+ printColumn(5);
+ printed5=true;
+ }
+ else if (colpos == "col6" && printed6 == false){
+ printColumn(6);
+ printed6=true;
+ }
+ else if (colpos == "col7" && printed7 == false){
+ printColumn(7);
+ printed7=true;
+ }
+ else if (colpos == "col8" && printed8 == false){
+ printColumn(8);
+ printed8=true;
+ }
+ else if (colpos == "col9" && printed9 == false){
+ printColumn(9);
+ printed9=true;
+ }
+ else if (colpos == "col10" && printed10 == false){
+ printColumn(10);
+ printed10=true;
+ }
+}
+
+// function which is called when the broswer window is resized
+jQuery( window ).resize(function()
+{
+ // stop resize firing twice: http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing
+ clearTimeout(id);
+ id = setTimeout(finishedResizing, 500);
+});
+
+// function called after the browser has finished resizing
+function finishedResizing()
+{
+ var colWidth = jQuery("#col1").width();
+ if( colWidth < specifiedColWidth ) // Columns width is too small to display all the columns properly so we delete some columns and resize the remaining columns
+ resizeRmColumns(); // Check if we can delete any columns
+ else if( colWidth > specifiedColWidth ) // Columns width COULD display more columns properly
+ resizeAddColumns(); // Check if we can add any columns
+}
+
+///////////////// end widget code part 1 /////////////////////////
+
+// jQuery function to define dropdown menu size
+jQuery(document).ready(function ()
+{
+ var hwindow = '';
+ hwindow = (jQuery(window).height()-35);
+ // Force the size dropdown menu
+ jQuery('#navigation ul li ul').css('max-height', hwindow);
+
+ ///////////////////////////////////////////
+ // jQuery code for columns / widgets part 2
+ ///////////////////////////////////////////
+
+ // insert add/delete column buttons
+ jQuery('<br /><br /><div id=\"columnModifier\"><div style=\"float:left\"><div id =\"addCol\" style=\"float:left\"><img src=\"./themes/pfsense_ng_fs/images/icons/icon_plus.gif\" style=\"cursor:pointer\" alt=\"Click here to add a column\"/></div>&nbsp;Add column&nbsp;</div><div style=\"float:left\"><div id =\"delCol\" style=\"float:left\"><img src=\"./themes/pfsense_ng_fs/images/icons/icon_x.gif\" style=\"cursor:pointer\" alt=\"Click here to delete a column\"/></div>&nbsp;Delete column</div><div id=\"columnWarningText\" style=\"float:left; margin-left:5em\"></div><br /><br />').insertBefore('#niftyOutter.fakeClass');
+
+ if ( jQuery('#columnModifier').length > 0 ) // only perform resizing on the dashboard page
+ {
+ // correct the css for column 2
+ jQuery('#col2').css("float","left");
+
+ // Make a copy of the current state of columns on page load
+ for ( var i = 1; i <= noCols; i = i + 1 )
+ {
+ var contents = jQuery('#col' + i ).html();
+ existing.push( contents );
+ }
+
+ finishedResizing(); // on page load correct display of columns to fit
+ }
+
+ // on click add a new column and change column widths
+ jQuery('#addCol').click(function()
+ {
+ var maxCols = maxColsToDisplay();
+ if( (noCols < maxCols) && (noCols < 10) )
+ {
+ var colAfter = noCols;
+ noCols++;
+
+ // insert new column
+ jQuery('#col' + (colAfter).toString() ).after("<div id=\"col" + noCols + "\" style=\"float: left; padding-bottom: 40px\" class=\"ui-sortable\"> </div>");
+
+ correctWidgetDisplay(noCols);
+ connectColumns();
+ }
+ else
+ jQuery('#columnWarningText').html('<b>Maximum number of columns reached for the current window size</b>').show().delay(1000).fadeOut(1000);
+ });
+
+ // on click delete a columns and change column widths
+ jQuery('#delCol').click(function()
+ {
+ if( noCols > 1 )
+ {
+ var colToDel = noCols;
+ noCols -= 1;
+
+ correctWidgetDisplay(noCols);
+
+ // get column contents before deletion
+ var colContent = jQuery('#col' + colToDel ).html();
+
+ // remove column
+ jQuery('#col' + colToDel ).remove();
+
+ // append deleted columns content to preceeding column
+ jQuery(colContent).appendTo('#col' + noCols );
+
+ showSave();
+ }
+ else
+ jQuery('#columnWarningText').html('<b>Minimum number of columns reached for the current window size</b>').show().delay(1000).fadeOut(1000);
+ });
+});
+//]]>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/login.css b/src/usr/local/www/themes/pfsense_ng_fs/login.css
new file mode 100644
index 0000000..f8abdfc
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/login.css
@@ -0,0 +1,1127 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/menu.inc b/src/usr/local/www/themes/pfsense_ng_fs/menu.inc
new file mode 100644
index 0000000..d703daf
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/menu.inc
@@ -0,0 +1,177 @@
+<?php
+/* $Id: menu.inc,v 1.3.2.1 2007/01/17 18:43:30 sullrich Exp $ */
+/* ========================================================================== */
+/*
+ menu.inc
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+require("menu.inc");
+
+define("TMENU_STUB", "
+ // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
+ // but you can experiment with effect on loadtime.
+ if (TransMenu.isSupported()) {
+
+ //==================================================================================================
+ // create a set of dropdowns
+ //==================================================================================================
+ // the first param should always be down, as it is here
+ //
+ // The second and third param are the top and left offset positions of the menus from their actuators
+ // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
+ // something like -5, 5
+ //
+ // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
+ // of the actuator from which to measure the offset positions above. Here we are saying we want the
+ // menu to appear directly below the bottom left corner of the actuator
+ //==================================================================================================
+ var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
+
+ //==================================================================================================
+ // create a dropdown menu
+ //==================================================================================================
+ // the first parameter should be the HTML element which will act actuator for the menu
+ //==================================================================================================
+
+ @@MENU_DEFINITIONS@@
+
+ //==================================================================================================
+ // write drop downs into page
+ //==================================================================================================
+ // this method writes all the HTML for the menus into the page with document.write(). It must be
+ // called within the body of the HTML page.
+ //==================================================================================================
+ TransMenu.renderAll();
+ }
+");
+
+class NervecenterMenu extends Menu {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+ private $menuID = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $c);
+
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+ $this->menuID = $id;
+
+ if ($this->hasParent()) {
+ $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
+ }
+ } // end __construct
+
+ public function getMenuID() {
+ return $this->menuID;
+ }
+
+ public function setMenuID($myMenuID) {
+ $this->menuID = $myMenuID;
+ }
+
+ public function getMenuJScript() {
+ $childJScript = "";
+ foreach ($this->getChildren() as $component) {
+ $childJScript .= $component->getMenuJScript();
+ }
+
+ if (! $this->hasParent()) {
+ $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
+ } else {
+ $this->menuJScript .= "\n$childJScript\n";
+ }
+
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ if (! $this->hasParent()) {
+ $menuMarkup =<<<EOD
+ <div id="menu">
+ @@CHILD_ELEMENTS@@
+ </div>
+
+EOD;
+ } else {
+ $name = gettext($this->getID());
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+
+ $menuMarkup =<<<EOD
+ <a id="{$id}" href="#">{$name}</a>
+ @@CHILD_ELEMENTS@@
+EOD;
+ }
+
+ $childMarkup = "";
+ foreach ($this->getChildren() as $component) {
+ $childMarkup .= $component;
+ }
+
+ $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
+
+ return $menuMarkup;
+ }
+}
+
+class NervecenterMenuItem extends MenuItem {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $href, $c);
+
+ $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
+ $name = gettext($this->getID());
+ $file = $this->getFile();
+
+ $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
+ }
+
+ public function getMenuJScript() {
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ return "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css b/src/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/no_big_logo b/src/usr/local/www/themes/pfsense_ng_fs/no_big_logo
new file mode 100644
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php b/src/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css b/src/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css
new file mode 100644
index 0000000..06b3c7a
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/styles/menustyles.css
@@ -0,0 +1,44 @@
+#navigation {
+ /* border:1px solid black; */
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ padding-top: 4px;
+ }
+
+#menu {
+ /* background: #990000; */
+ /* border-bottom:1px solid white; */
+ padding: 0 0 0 0;
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ }
+#menu a {
+ padding: 2px 28px 4px 28px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.0em;
+ color: #FFFFFF;
+ width: 08%;
+ height: 16px;
+ }
+#menu a.hover {
+ background: #AF2020;
+ }
+#menu span {
+ display: none;
+ }
+
+#subnav {
+ font-size: 10px;
+ margin-bottom: 2em;
+ }
+#subnav a {
+ color: #FF0000; /* #FB3B00; */
+ margin-right: 1em;
+ }
+#subnav span {
+ color: silver;
+ margin-right: 1em;
+ }
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css b/src/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css
new file mode 100644
index 0000000..f683574
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/styles/transmenu.css
@@ -0,0 +1,75 @@
+/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
+.transMenu {
+ position:absolute;
+ overflow:hidden;
+ left:-1000px;
+ top:-1000px;
+ }
+
+/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
+.transMenu .content {
+ position:absolute;
+ }
+
+/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
+.transMenu .items {
+ position:relative;
+ left:0px; top:0px;
+ z-index:2;
+ }
+
+.transMenu.top .items {
+ border-top:none;
+ }
+
+/* each TR.item is one menu item */
+.transMenu .item {
+ color: #FFFFFF; /* #336; */
+ font-size: 1.1em;
+ font-weight: normal;
+ font-family:sans-serif;
+ text-decoration:none;
+ /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
+ border:none;
+ cursor:pointer;
+ cursor:hand;
+ }
+
+/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
+/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
+.transMenu .background {
+ position:absolute;
+ left:0px; top:0px;
+ z-index:1;
+ -moz-opacity:.8;
+ filter:alpha(opacity=80);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowRight {
+ position:absolute;
+ z-index:3;
+ top:3px; width:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowBottom {
+ position:absolute;
+ z-index:1;
+ left:3px; height:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
+.transMenu .item.hover {
+ background:#fdfdfd;
+ color:black;
+ }
+
+/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
+.transMenu .item img {
+ margin-left:10px;
+ } \ No newline at end of file
diff --git a/src/usr/local/www/themes/pfsense_ng_fs/wizard.css b/src/usr/local/www/themes/pfsense_ng_fs/wizard.css
new file mode 100644
index 0000000..f2c9f3e
--- /dev/null
+++ b/src/usr/local/www/themes/pfsense_ng_fs/wizard.css
@@ -0,0 +1,1117 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ /* background: url('images/background.png') no-repeat; */
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
diff --git a/src/usr/local/www/themes/the_wall/all.css b/src/usr/local/www/themes/the_wall/all.css
new file mode 100644
index 0000000..35ddbd4
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/all.css
@@ -0,0 +1,1308 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+.addgatewaybox {
+ background-color: #990000;
+ border-style: none none none none;
+ width: 225px;
+}
+
+.infobox {
+ width:100%;
+}
+
+.infoboxsave {
+ padding-right: 10px;
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+.inputerrorsleft {
+ background-color: #990000;
+ width: 36px;
+ text-align: center;
+}
+
+.inputerrorsright {
+ background-color: #FFD9D1;
+ color: #000000;
+ font-size: 11px;
+ padding-left: 8px;
+ padding-top: 6px;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 220px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 11px;
+ font-family: "Trebuchet MS", sans-serif;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/background.jpg') repeat-x; background-attachment:fixed;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+a:link{color: #660000;}
+a:visited{color: #660000;}
+a:active{color: #660000;}
+a:hover{color: #660000;}
+
+
+
+
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 202px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 90px;
+ width: 190px;
+ z-index: 1;
+ top: 55px;
+ left: -5px;
+ padding-top: 45px;
+ padding-left: 0px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 128px;
+ left: 230px;
+ font-size: 14px;
+ color: #000000;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -21px;
+ left: -20px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 170px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.0em;
+ font-weight: normal;
+ font-family: Verdana;
+ font-weight: bold;
+ color: #000000;
+ padding-left: 5px;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 170px;
+ height: 16px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+#content {
+ position: relative;
+ top: -5px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background: url('images/horizontal.png') repeat-y;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -5px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ position: relative;
+ top: -25px;
+ left: 3px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 5px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ width: 80px;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+/* dropdownmenu mainitems textcolor */
+#navigation ul li {
+ background-color: transparent;
+ font-size:13px;
+ color: #000000;
+}
+/* dropdownmenubackground */
+#navigation ul li ul li {
+ border: 0px solid #999999;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #999999;
+ color: #FFF;
+ filter:alpha(opacity=90);
+ -moz-opacity:0.9;
+ -khtml-opacity: 0.9;
+ opacity: 0.9;
+}
+#navigation ul li ul li:hover {
+ background-color: #cccccc;
+}
+/* textcolor in dropdownmenu */
+#navigation li li a {
+ display: block;
+ padding-left: 5px;
+ margin-right: 10px;
+ color: #000000;
+}
+/* textcolor mouseover in dropdownmenu */
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+ color: #000000;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listrborder {
+ background-color: #FFFFFF;
+ border-left: 1px solid #999999;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ color: #FFFFFF;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 6px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #DDDDDD;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 6px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+ margin: 0px auto;
+ background: url('images/background.jpg') repeat-x; background-attachment:fixed;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password, #password2 {
+ font-size: small;
+ width: 60%;
+ padding-left: 19px;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+/* Widget CSS */
+.widgetsubheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #B1B1B1;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #000000;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetheader {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.widgetdiv{
+ margin:5px;
+ padding: 5px;
+ background:#CCCCCC;
+}
+.widgetconfigdiv{
+ background:#BBBBBB;
+ font-size: 11px;
+ color: #000000;
+ padding-right: 5px;
+ padding-left: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+div#log div.log-entry-mini {
+ clear: both;
+}
+
+div#log div.log-entry-mini span {
+ padding: 2px 2px 2px 2px;
+ padding-left: 6px;
+}
+
+div#log span.log-action-mini-header,
+div#log span.log-time-mini-header,
+div#log span.log-interface-mini-header,
+div#log span.log-source-mini-header,
+div#log span.log-destination-mini-header,
+div#log span.log-protocol-mini-header {
+ float: left;
+ text-align: left;
+ background-color: #B1B1B1;
+ font-size: 12px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-time-mini,
+div#log span.log-interface-mini,
+div#log span.log-source-mini,
+div#log span.log-destination-mini,
+div#log span.log-protocol-mini {
+ float: left;
+ text-align: left;
+ background-color: #FFFFFF;
+ font-size: 11px;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-action-mini,
+div#log span.log-action-mini-header {
+ width: 6%;
+}
+
+div#log span.log-time-mini,
+div#log span.log-time-mini-header {
+ width: 19%;
+}
+
+div#log span.log-interface-mini,
+div#log span.log-interface-mini-header {
+ width: 8%;
+}
+
+div#log span.log-source-mini,
+div#log span.log-source-mini-header {
+ width: 23%;
+}
+
+div#log span.log-destination-mini,
+div#log span.log-destination-mini-header {
+ width: 31%;
+}
+
+div#log span.log-protocol-mini,
+div#log span.log-protocol-mini-header {
+ width: 8%;
+ border-right: 1px solid #999;
+}
+
+/* Sortable tables */
+table.sortable thead {
+ cursor: default;
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+/*thermal_sensors widget styles*/
+
+.thermalSensorRow { width: 100%; border: 0px solid #ddd; padding: 1px; border-radius: 3px; }
+.thermalSensorBarShell { position: relative; width: 100%; height: 5px; border: 1px solid lightgray; border-radius: 3px; }
+.thermalSensorBar { position: absolute; width: 0%; height: 1px; z-index: 1; border-style: solid; border-radius: 3px;
+ background-color: LimeGreen;
+ border-top-width: 2px; border-top-color: Lime;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 2px; border-bottom-color: Green;
+}
+.thermalSensorTextShell { height: 20px; width: 100%; top: 3px; }
+.thermalSensorText { float: left; height: 20px; top: 3px; }
+.thermalSensorValue { float: left; height: 20px; top: 3px; font-weight: bold; margin-left: 10px;}
+
+.thermalSensorWarnThresh { position: absolute; background-color: orange; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+.thermalSensorCritThresh { position: absolute; background-color: red; height: 16px; width: 2px; z-index: 2; margin-top: -8px; }
+
+.thermal_sensors_widget_scale000 { position: absolute; height: 5px; width: 1px; left: -1px; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale020 { position: absolute; height: 3px; width: 1px; left: 10%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale010 { position: absolute; height: 3px; width: 1px; left: 20%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale030 { position: absolute; height: 3px; width: 1px; left: 30%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale040 { position: absolute; height: 3px; width: 1px; left: 40%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale050 { position: absolute; height: 3px; width: 1px; left: 50%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale060 { position: absolute; height: 3px; width: 1px; left: 60%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale070 { position: absolute; height: 3px; width: 1px; left: 70%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale080 { position: absolute; height: 3px; width: 1px; left: 80%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale090 { position: absolute; height: 3px; width: 1px; left: 90%; margin-top: -4px; background-color: lightgray; z-index: 0; font-size: 0; }
+.thermal_sensors_widget_scale100 { position: absolute; height: 9px; width: 1px; left: 100%; margin-top: -6px; background-color: lightgray; z-index: 0; font-size: 0; }
+
+.thermal_sensors_widget_mark100 { position: absolute; width: 15px; left: 96%; margin-top: -12px; font: 6pt Arial, sans-serif; text-align: left; color: #575757; }
+
+/* widget textarea styles - full width */
+.textarea_widget {
+ width: 100%;
+ resize:vertical;
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
+ box-sizing: border-box; /* IE 8+ */
+}
diff --git a/src/usr/local/www/themes/the_wall/apple-touch-icon.png b/src/usr/local/www/themes/the_wall/apple-touch-icon.png
new file mode 100755
index 0000000..7a4b975
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/apple-touch-icon.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/bottom-loader.js b/src/usr/local/www/themes/the_wall/bottom-loader.js
new file mode 100644
index 0000000..a21f775
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/bottom-loader.js
@@ -0,0 +1,10 @@
+//<![CDATA[
+
+ NiftyCheck();
+ Rounded("div#niftyMenu","top bottom","#FFFFFF","#000000","smooth");
+ Rounded("div#mainarea","bl br tr","#FFF","#DDDDDD","smooth");
+ Rounded("div#boxarea","bl br tl tr","#FFF","#DDDDDD","smooth");
+ Rounded("tr#fend","bl br tl tr","#FFF","#990000","smooth");
+ Rounded("div#topbox","all","#FFF","#990000","smooth");
+
+//]]>
diff --git a/src/usr/local/www/themes/the_wall/favicon.ico b/src/usr/local/www/themes/the_wall/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/graphlink.css b/src/usr/local/www/themes/the_wall/graphlink.css
new file mode 100644
index 0000000..13f65f0
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/graphlink.css
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ $Id$
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+*******************************************************************************/
+
+/**
+ * Defines the background image used for the graph, as well as the actual data
+ * locations.
+ * Use padding-left and padding-top to align the data area correctly with your
+ * background image.
+ * Width and height should same as the dimensions of the image, minus the
+ * padding values in both directions.
+ */
+div.GraphLink {
+ width: 212px;
+ height: 60px;
+ padding-left: 38px;
+ padding-top: 10px;
+ background-image: url(/themes/nervecenter/images/misc/graph.png);
+ overflow: hidden;
+}
+
+/**
+ * Defines the data display area. Modify to fit your background image.
+ */
+div.GraphLinkData {
+ width: 200px;
+ height: 50px;
+ overflow: hidden;
+}
+
+/**
+ * Defines the look of one bar. Nothing to change here other than the color.
+ */
+span.GraphLinkBar {
+ background-color: #990000;
+ height: 100%;
+ float: left;
+ overflow: hidden;
+}
diff --git a/src/usr/local/www/themes/the_wall/images/alert_bgr.png b/src/usr/local/www/themes/the_wall/images/alert_bgr.png
new file mode 100755
index 0000000..b186db0
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/alert_bgr.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/background.jpg b/src/usr/local/www/themes/the_wall/images/background.jpg
new file mode 100755
index 0000000..cdd1df6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/background.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/footer.png b/src/usr/local/www/themes/the_wall/images/footer.png
new file mode 100755
index 0000000..399e0ff
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/footer.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/header.png b/src/usr/local/www/themes/the_wall/images/header.png
new file mode 100755
index 0000000..25b813c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/header.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/help.png b/src/usr/local/www/themes/the_wall/images/help.png
new file mode 100755
index 0000000..1de05e3
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/help.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/horizontal.gif b/src/usr/local/www/themes/the_wall/images/horizontal.gif
new file mode 100755
index 0000000..a280dcb
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/horizontal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/horizontal.png b/src/usr/local/www/themes/the_wall/images/horizontal.png
new file mode 100755
index 0000000..e774028
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/horizontal.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/favicon.ico b/src/usr/local/www/themes/the_wall/images/icons/favicon.ico
new file mode 100644
index 0000000..3440bf2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/favicon.ico
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_3g.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_3g.gif
new file mode 100755
index 0000000..46ccb92
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_3g.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif
new file mode 100755
index 0000000..cf983e4
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_3g_inactive.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif
new file mode 100755
index 0000000..3ede1ff
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_advanced.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif
new file mode 100755
index 0000000..b233549
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_advanced_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alert.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alert.gif
new file mode 100755
index 0000000..7646941
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alert.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif
new file mode 100755
index 0000000..ad43e17
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_host.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif
new file mode 100755
index 0000000..abd1b8b
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_net.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif
new file mode 100755
index 0000000..4acf2aa
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_port.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif
new file mode 100755
index 0000000..660571e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif
new file mode 100755
index 0000000..55c1c4a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_alias_url_reload.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_block.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_block.gif
new file mode 100755
index 0000000..670c968
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_block.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
new file mode 100755
index 0000000..eb726d6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_block_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif
new file mode 100755
index 0000000..e6345fe
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_block_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif
new file mode 100755
index 0000000..a071c66
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_cablenic.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_cal.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_cal.gif
new file mode 100755
index 0000000..a9c7c87
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_cal.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif
new file mode 100755
index 0000000..1647e2f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_cal_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_carp.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_carp.gif
new file mode 100755
index 0000000..9454a82
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_carp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif
new file mode 100755
index 0000000..2ba8db2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_carp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_chain.png b/src/usr/local/www/themes/the_wall/images/icons/icon_chain.png
new file mode 100644
index 0000000..12db07a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_chain.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_check.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_check.gif
new file mode 100755
index 0000000..393674d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_check.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif
new file mode 100755
index 0000000..e171ba8
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_green.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif
new file mode 100755
index 0000000..00c865a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_grey.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif
new file mode 100755
index 0000000..7b412ee
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_clock_red.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_close.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_close.gif
new file mode 100755
index 0000000..e0f86a7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_close.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_configure.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_configure.gif
new file mode 100755
index 0000000..7182e0d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_configure.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_down.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_down.gif
new file mode 100755
index 0000000..b71a9c5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif
new file mode 100755
index 0000000..70a7473
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_down_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif
new file mode 100755
index 0000000..584587a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_down_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_e.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_e.gif
new file mode 100755
index 0000000..2950800
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_e.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif
new file mode 100755
index 0000000..9ba5738
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_e_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_error.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_error.gif
new file mode 100755
index 0000000..e0fa659
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_error.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif
new file mode 100755
index 0000000..36c2ec7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_exclam.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png
new file mode 100755
index 0000000..069cbbe
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_de.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png
new file mode 100755
index 0000000..bd7f9a5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_en.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png
new file mode 100755
index 0000000..434776c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_es.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png
new file mode 100755
index 0000000..f786349
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_flag_pt_BR.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png
new file mode 100755
index 0000000..48a34b6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_cert.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png
new file mode 100755
index 0000000..48a9ed2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_file.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png
new file mode 100755
index 0000000..7d929c0
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_group.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png
new file mode 100755
index 0000000..867ef2c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_host.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png
new file mode 100755
index 0000000..f667cfc
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_imp.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png
new file mode 100755
index 0000000..d2d4548
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_mail.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png
new file mode 100755
index 0000000..06b53a1
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_pwd.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png
new file mode 100755
index 0000000..33de926
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_search.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png
new file mode 100755
index 0000000..aa8300a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_time.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png
new file mode 100755
index 0000000..1857d0e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_unknown.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png
new file mode 100755
index 0000000..cf56792
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_url.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png
new file mode 100755
index 0000000..e00eebe
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_frmfld_user.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif
new file mode 100755
index 0000000..52c18ac
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_fw-update.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_help.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_help.gif
new file mode 100644
index 0000000..84c84db
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_help.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif
new file mode 100755
index 0000000..0c569a7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif
new file mode 100755
index 0000000..faa84d4
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_ifalias_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif
new file mode 100755
index 0000000..d11a5f0
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_import_alias.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_in.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif
new file mode 100755
index 0000000..cd3a532
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_info_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif
new file mode 100755
index 0000000..0626655
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_interface_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif
new file mode 100755
index 0000000..1449513
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_interface_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_left.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_left.gif
new file mode 100755
index 0000000..8effefe
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif
new file mode 100755
index 0000000..c778014
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_left_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif
new file mode 100755
index 0000000..84c6fa2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_left_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_log.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_log.gif
new file mode 100755
index 0000000..4a1983a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_log.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif
new file mode 100755
index 0000000..d31bd9b
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_log_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif
new file mode 100755
index 0000000..f9fda33
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_log_s.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif
new file mode 100755
index 0000000..fb2c05f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_log_s_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_logs.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_logs.gif
new file mode 100644
index 0000000..afe0104
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_logs.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_match.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_match.gif
new file mode 100644
index 0000000..215571f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_match.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif
new file mode 100644
index 0000000..6e4c364
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_match_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_minus.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_minus.gif
new file mode 100755
index 0000000..417544f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_minus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_open.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_open.gif
new file mode 100755
index 0000000..ac3da14
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_open.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_other.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_other.gif
new file mode 100755
index 0000000..e6f780f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_other.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif
new file mode 100755
index 0000000..b08d970
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_other_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_out.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_parp.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_parp.gif
new file mode 100755
index 0000000..96acaf3
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_parp.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif
new file mode 100755
index 0000000..7d7d00e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_parp_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_pass.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_pass.gif
new file mode 100755
index 0000000..fe1bb0d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_pass.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
new file mode 100755
index 0000000..f7f4c20
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_pass_add.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif
new file mode 100755
index 0000000..6adc431
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_pass_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus.gif
new file mode 100755
index 0000000..2a94eeb
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif
new file mode 100755
index 0000000..8dcd7c0
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif
new file mode 100755
index 0000000..0c79849
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_bl_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif
new file mode 100755
index 0000000..ebc7457
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif
new file mode 100755
index 0000000..1c7ca08
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif
new file mode 100755
index 0000000..eb41284
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_plus_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif
new file mode 100755
index 0000000..d78b867
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif
new file mode 100755
index 0000000..13658f7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif
new file mode 100755
index 0000000..90b576e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif
new file mode 100755
index 0000000..9aebb03
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif
new file mode 100755
index 0000000..4ab4992
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif
new file mode 100755
index 0000000..7025d20
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_pkg_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif
new file mode 100755
index 0000000..4542432
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif
new file mode 100755
index 0000000..8d3a68d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif
new file mode 100755
index 0000000..15e0aed
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reinstall_xml_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reject.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reject.gif
new file mode 100755
index 0000000..5565cd6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reject.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif
new file mode 100755
index 0000000..6c09fae
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_reject_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_right.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_right.gif
new file mode 100755
index 0000000..fdf2d8b
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif
new file mode 100755
index 0000000..e49fbd7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif
new file mode 100755
index 0000000..a5d6d7c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_restart_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif
new file mode 100644
index 0000000..543fd56
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_running.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif
new file mode 100755
index 0000000..09bb58f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_start.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif
new file mode 100755
index 0000000..f58f111
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_start_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif
new file mode 100644
index 0000000..a93bcfb
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_status.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif
new file mode 100755
index 0000000..922addc
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif
new file mode 100755
index 0000000..b4cfdea
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stop_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif
new file mode 100644
index 0000000..f93a25d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_service_stopped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif
new file mode 100755
index 0000000..a092b40
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_services_restart_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif
new file mode 100755
index 0000000..ecdb58f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_services_start_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif
new file mode 100755
index 0000000..c00e208
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_services_stop_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png
new file mode 100755
index 0000000..d7b964d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system-group-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system-group.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system-group.png
new file mode 100755
index 0000000..1c974f2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system-group.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png
new file mode 100755
index 0000000..2f6047d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system-user-grey.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system-user.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system-user.png
new file mode 100755
index 0000000..ef82156
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system-user.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png
new file mode 100755
index 0000000..30f306d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system_lock_screen.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png b/src/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png
new file mode 100755
index 0000000..9bbb6c7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_system_logout.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif
new file mode 100755
index 0000000..ffeb2cd
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_trapped.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif
new file mode 100755
index 0000000..6d46aaf
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_trapped_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif
new file mode 100755
index 0000000..e15ab6c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif
new file mode 100755
index 0000000..f776281
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_ts_rule_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_up.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_up.gif
new file mode 100755
index 0000000..883c5a2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_up.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif
new file mode 100755
index 0000000..0ddcce2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_up_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif
new file mode 100755
index 0000000..9f869a4
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_up_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif
new file mode 100755
index 0000000..1f0addc
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_wlan.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif
new file mode 100755
index 0000000..35bf580
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_wlan_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif
new file mode 100755
index 0000000..2d22182
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_wol_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png b/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png
new file mode 100755
index 0000000..21cb27d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_nsaved.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png b/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png
new file mode 100755
index 0000000..ab82946
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_wzd_saved.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_x.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_x.gif
new file mode 100755
index 0000000..24e4d49
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif
new file mode 100755
index 0000000..d2bfbc8
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_x_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif
new file mode 100755
index 0000000..da7b57c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_x_mo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif b/src/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif
new file mode 100755
index 0000000..8828fa6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/icon_x_p.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/in.gif b/src/usr/local/www/themes/the_wall/images/icons/in.gif
new file mode 100755
index 0000000..f1da771
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/in.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/in_d.gif b/src/usr/local/www/themes/the_wall/images/icons/in_d.gif
new file mode 100755
index 0000000..18e26be
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/in_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/out.gif b/src/usr/local/www/themes/the_wall/images/icons/out.gif
new file mode 100755
index 0000000..1a1d1d5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/out.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/icons/out_d.gif b/src/usr/local/www/themes/the_wall/images/icons/out_d.gif
new file mode 100755
index 0000000..879f1da
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/icons/out_d.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/log.png b/src/usr/local/www/themes/the_wall/images/log.png
new file mode 100755
index 0000000..762ba80
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/log.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/logo.gif b/src/usr/local/www/themes/the_wall/images/logo.gif
new file mode 100755
index 0000000..a71ce5a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/logo.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/logobig.jpg b/src/usr/local/www/themes/the_wall/images/logobig.jpg
new file mode 100755
index 0000000..2ef196d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/logobig.jpg
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/menu_down.gif b/src/usr/local/www/themes/the_wall/images/menu_down.gif
new file mode 100755
index 0000000..137de8d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/menu_down.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/menu_right.gif b/src/usr/local/www/themes/the_wall/images/menu_right.gif
new file mode 100755
index 0000000..881327c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/menu_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bar_blue.gif b/src/usr/local/www/themes/the_wall/images/misc/bar_blue.gif
new file mode 100755
index 0000000..741186a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bar_blue.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bar_gray.gif b/src/usr/local/www/themes/the_wall/images/misc/bar_gray.gif
new file mode 100755
index 0000000..e86e245
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bar_gray.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bar_left.gif b/src/usr/local/www/themes/the_wall/images/misc/bar_left.gif
new file mode 100755
index 0000000..af751fa
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bar_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bar_right.gif b/src/usr/local/www/themes/the_wall/images/misc/bar_right.gif
new file mode 100755
index 0000000..ff12d9e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bar_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png b/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png
new file mode 100755
index 0000000..37db2fd
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_minus.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png b/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png
new file mode 100755
index 0000000..fba7af9
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/bullet_toggle_plus.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/button.gif b/src/usr/local/www/themes/the_wall/images/misc/button.gif
new file mode 100755
index 0000000..e85dbb3
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/button.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/graph.png b/src/usr/local/www/themes/the_wall/images/misc/graph.png
new file mode 100755
index 0000000..507ec75
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/graph.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/key_128.gif b/src/usr/local/www/themes/the_wall/images/misc/key_128.gif
new file mode 100755
index 0000000..ea5ae34
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/key_128.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/key_152.gif b/src/usr/local/www/themes/the_wall/images/misc/key_152.gif
new file mode 100755
index 0000000..6c7fc03
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/key_152.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/key_256.gif b/src/usr/local/www/themes/the_wall/images/misc/key_256.gif
new file mode 100755
index 0000000..3e1c377
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/key_256.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/key_64.gif b/src/usr/local/www/themes/the_wall/images/misc/key_64.gif
new file mode 100755
index 0000000..87892bd
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/key_64.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/loader.gif b/src/usr/local/www/themes/the_wall/images/misc/loader.gif
new file mode 100755
index 0000000..a98cf78
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/loader_all.gif b/src/usr/local/www/themes/the_wall/images/misc/loader_all.gif
new file mode 100755
index 0000000..cb6bc0c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/loader_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/loader_filter.gif b/src/usr/local/www/themes/the_wall/images/misc/loader_filter.gif
new file mode 100755
index 0000000..b838b17
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/loader_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/loader_tab.gif b/src/usr/local/www/themes/the_wall/images/misc/loader_tab.gif
new file mode 100755
index 0000000..a98cf78
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/loader_tab.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/logon.png b/src/usr/local/www/themes/the_wall/images/misc/logon.png
new file mode 100755
index 0000000..acd388b
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/logon.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/progress_bar.gif b/src/usr/local/www/themes/the_wall/images/misc/progress_bar.gif
new file mode 100755
index 0000000..3b4aa52
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/progress_bar.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/rrd_error.png b/src/usr/local/www/themes/the_wall/images/misc/rrd_error.png
new file mode 100755
index 0000000..a79ecf3
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/rrd_error.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_alerter.gif b/src/usr/local/www/themes/the_wall/images/misc/status_alerter.gif
new file mode 100755
index 0000000..7ff1e95
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_alerter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif b/src/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif
new file mode 100755
index 0000000..2c32908
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_carpmaster.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_left.gif b/src/usr/local/www/themes/the_wall/images/misc/status_left.gif
new file mode 100755
index 0000000..b5a2930
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_left.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif b/src/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif
new file mode 100755
index 0000000..067ef18
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_page_loading.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif b/src/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif
new file mode 100755
index 0000000..72de6bd
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_reload_all.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif b/src/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif
new file mode 100755
index 0000000..d72761a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_reload_filter.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/status_right.gif b/src/usr/local/www/themes/the_wall/images/misc/status_right.gif
new file mode 100755
index 0000000..bf66fdb
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/status_right.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/tri_c.gif b/src/usr/local/www/themes/the_wall/images/misc/tri_c.gif
new file mode 100755
index 0000000..317b758
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/tri_c.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif b/src/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif
new file mode 100755
index 0000000..309846e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/tri_c_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/tri_o.gif b/src/usr/local/www/themes/the_wall/images/misc/tri_o.gif
new file mode 100755
index 0000000..eb95c32
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/tri_o.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif b/src/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif
new file mode 100755
index 0000000..f818f3b
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/tri_o_black.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/widget_loader.gif b/src/usr/local/www/themes/the_wall/images/misc/widget_loader.gif
new file mode 100755
index 0000000..ca35e2a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/widget_loader.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif b/src/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif
new file mode 100755
index 0000000..fad101f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/misc/widget_loader_old.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/new_tab_menu.png b/src/usr/local/www/themes/the_wall/images/new_tab_menu.png
new file mode 100755
index 0000000..4bdfcef
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/new_tab_menu.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/status.png b/src/usr/local/www/themes/the_wall/images/status.png
new file mode 100755
index 0000000..a3e368e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/status.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/transparent.gif b/src/usr/local/www/themes/the_wall/images/transparent.gif
new file mode 100755
index 0000000..89c5530
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/transparent.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/images/transparent_pixel.gif b/src/usr/local/www/themes/the_wall/images/transparent_pixel.gif
new file mode 100755
index 0000000..35d42e8
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/images/transparent_pixel.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/blank.gif b/src/usr/local/www/themes/the_wall/javascript/ie7/blank.gif
new file mode 100755
index 0000000..a4fe2e6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/blank.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js
new file mode 100644
index 0000000..45543f6
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-box-model.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js
new file mode 100644
index 0000000..b11e2b1
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-core.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js
new file mode 100644
index 0000000..4406d7a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css-strict.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-strict",function(){if(!modules["ie7-css2"])return;var NONE=[],ID=/#/g,CLASS=/[:@\.]/g,TAG=/^\w|[\s>+~]\w/g;IE7.parser.parse=function(cssText){var DYNAMIC=new RegExp("(.*):("+dynamicPseudoClasses+")(.*)");function addRule(selector,cssText){var match=selector.match(DYNAMIC);if(match)new DynamicRule(selector,match[1],match[2],match[3],cssText);else new Rule(selector,cssText)};cssText=cssText.replace(IE7.PseudoElement.ALL,IE7.PseudoElement.ID);var RULE=/([^\{]+)\{(\d+)\}/g,match;while(match=RULE.exec(cssText)){addRule(match[1],match[2]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}IE7.classes.sort(Rule.compare);return IE7.classes.join("\n")};function Rule(selector,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.Class;this.inherit(selector)};Rule.prototype=new IE7.Class.ancestor;Rule.prototype.toString=function(){return "."+this.name+"{"+this.cssText+"}"};Rule.score=function(selector){return(selector.match(ID)||NONE).length*10000+(selector.match(CLASS)||NONE).length*100+(selector.match(TAG)||NONE).length};Rule.compare=function(rule1,rule2){return rule1.specificity-rule2.specificity};function DynamicRule(selector,attach,dynamicPseudoClass,target,cssText){this.cssText=cssText;this.specificity=Rule.score(selector);this.inherit=IE7.DynamicStyle;this.inherit(selector,attach,dynamicPseudoClass,target)};DynamicRule.prototype=new IE7.DynamicStyle.ancestor;DynamicRule.prototype.toString=Rule.prototype.toString});
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js
new file mode 100644
index 0000000..7121c8e
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css2.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([/()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js
new file mode 100644
index 0000000..86b24f5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-css3.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-css3",function(){if(!modules["ie7-css2"])return;selectors["~"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=from[i];while(adjacent=nextElement(adjacent)){if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}}};var documentElement=(isHTML)?document.documentElement:firstChildElement(document.body);pseudoClasses["root"]=function(element){return Boolean(element==documentElement||element==document.body)};pseudoClasses["empty"]=function(element){return!firstChildElement(element)&&!element.innerText};pseudoClasses["last-child"]=function(element){return!nextElement(element)};pseudoClasses["only-child"]=function(element){return(element.parentNode&&childElements(element.parentNode).length==1)};pseudoClasses["nth-child"]=function(element,filterArgs,step){return nthChild(element,filterArgs,previousElement)};pseudoClasses["nth-last-child"]=function(element,filterArgs){return nthChild(element,filterArgs,nextElement)};function nthChild(element,filterArgs,traverse){switch(filterArgs){case "n":return true;case "even":filterArgs="2n";break;case "odd":filterArgs="2n+1"}var children=childElements(element.parentNode);function checkIndex(index){index=(traverse==nextElement)?children.length-index:index-1;return children[index]==element};if(!isNaN(filterArgs))return checkIndex(filterArgs);filterArgs=filterArgs.split("n");var multiplier=parseInt(filterArgs[0]);var step=parseInt(filterArgs[1]);if(isNaN(multiplier)||(multiplier==1))return true;if(multiplier==0&&!isNaN(step))return checkIndex(step);if(isNaN(step))step=0;var count=1;while(element=traverse(element))count++;return((count%multiplier)==step)};function childElements(element){var childElements=[],i;for(i=0;i<element.childNodes.length;i++){if(isElement(element.childNodes[i]))push(childElements,element.childNodes[i])}return childElements};attributeTests["^="]=function(attribute,value){return "/^"+attributeTests.escape(value)+"/.test("+attribute+")"};attributeTests["$="]=function(attribute,value){return "/"+attributeTests.escape(value)+"$/.test("+attribute+")"};attributeTests["*="]=function(attribute,value){return "/"+attributeTests.escape(value)+"/.test("+attribute+")"}});
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js
new file mode 100644
index 0000000..4321cda
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-fixed.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js
new file mode 100644
index 0000000..4d2baa9
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-html4.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true); \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js
new file mode 100644
index 0000000..707fa56
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-ie5.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(isHTML){HEADER+="address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,"+"frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,applet,center,"+"dir,hr,menu,pre{display:block;height:0cm}li,ol,ul{display:block}"}if(![].push)push=function(array,item){array[array.length]=item;return array.length};if(![].pop)pop=function(array){var item=array[array.length-1];array.length--;return item};if("i".replace(/i/,function(){return""})){var a=String.prototype.replace,b=function(r,w){var m,n="",s=this;while((m=r.exec(s))){n+=s.slice(0,m.index)+w(m[0],m[1],m[2],m[3],m[4]);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(r,w){this.replace=(typeof w=="function")?b:a;return this.replace(r,w)}} \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js
new file mode 100644
index 0000000..3a66d19
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[340]](e%a+161)};while(++r<474)l[r]=(r<378)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!ù.´)Ó £(){ÿ{ù.´=ª;¢ ¢Æ=ª.¢´=Ó ¤×;£ ¢©(){if(«.¢Ù)«.¢Ù.Ã.¤Ö=¤þ};ª.Õ=£(){¤ ¤ÿ};¢ â=(¤Ù.±(¢î.£Ë))?£(£Ì){ù.â(´+¥¡+£Ì)}:¢Æ;¢ Ã…=¤Ñ.Ã….¬(¤Ú)[1];if(¤Û.±(¢î.£Ë)||Ã…<5||!¤Ü.±(«.Ù.ü))¤ ¢©();¢ è=¢£(«.¤Ã!=¥¢);¢ ë=(¤Ë «.£Ê==¥£)?!¤Ãi.±(¢î.¢Ç):¢£(«.£Ê!=¥¤);¢ ¢í=¥¥;¢ ¢ë=¢í;if(!ë)¢ë+=¥¦;¢ ¢¹;¢ Ù=«.Ù;¢ ó={};ª.¢´=£(£È,ô,£É){if(!ó)¤;if(¢«)¢¬(¥§+¢Î(ô));if(£É){ô();ô=¢Æ}ó[£È]=ô};¢ £Ç=¤Þ;£ ¢È(²,¹){if(£Ç.±(²))²=(¹||¥¨)+²;¤ ²};£ ¢Ä(²,¹){²=¢È(²,¹);¤ ².»(0,².£Ã(¥©)+1)};¢ ¹=¢Ä(«.£Æ[«.£Æ.­-1].¤Å);¢ ¢Ê=Ó ¤Ä(¥ª);£ ã(²,¹){ÿ{²=¢È(²,¹);¢Ê.¤Ã(¥«,²,Þ);¢Ê.¤¿();¤ ¢Ê.¤¾}õ(¢à){â(¥¬+²);¤ ¥¨}};¢ ·=£(¢É,¢À){¤ ¢É.·(¢À)};¢ ¢½=£(¢É){¤ ¢É.¢½()};if(Ã…<5.5)¢¬(ã(¥­,¹));if(«.¢Ã==¥®||!ë)«.¤¹();Ö «.¤¸(¥¯);ª.¶=«.É[«.É.­-1];ª.¶.§=¢í;ª.¶.Æ=×;¢ §={};£ £¿(¶,¹){¢ ¢§=¢È(¶.²,¹);if(§[¢§])¤ ¥¨;§[¢§]=(¶.ý)?¥¨:£Å(¢Ã(¶,¹),¢Ä(¶.²,¹));¤ §[¢§]};¢ ¢Ã=£(¶){¤ ¶.§};¢ £Ä=¤ßgi;£ £Å(§,¢Ç){¤ §.³(£Ä,¥°+¢Ç.»(0,¢Ç.£Ã(¥©)+1)+¥±)};ª.Ë=[];ª.£¾=¢Æ;¢ ä=Þ;£ _ã(){ÿ{ä=×;¢ £Ã=¤ài;¢ É=«.É;¢ ¢ì=[];¢ ¢Å=«.£µ(¥²);¯(¢ i=¢Å.­-1;i>=0;i--){·(¢ì,¤á.±(¢Å[i].£Â)?¥¨:¢Å[i].£Â)}£ ¢Ã(¶,¹){¢ §=¥¨;if(£Ã.±(¶.¤µ)){¯(¢ i=0;i<¶.£À.­;i++){§+=¢¡.¤´(¶.£À[i],¢Ä(¶.²,¹))}§+=((¶.²)?£¿(¶,¹):¢½(¢ì))}¤ §};´.§=¥¨;¯(i=0;i<É.­;i++)´.§+=¢Ã(É[i],¥¨);´.§=£´(´.§);¯(i in ó)ó[i]();£¦ ó;if(¢¹)¢¹.¢·();Ñ.¢·();´.£¾();´.¶.§=¢ë+£³(´.§);¯(i=0;i<É.­;i++){if(!É[i].ý&&!É[i].Æ)É[i].§=¥¨}´.¢Â();â(¥³)}õ(¢¨){â(¥´+¢¨.¢ï)}¢Ë{¢©()}};ª.¢Â=£(){Ñ.¢Â();¯(¢ i=0;i<ª.Ë.­;i++)ª.Ë[i]()};¢ Ñ=Ó £(){¢ Ç=[];ª.û=£(){·(Ç,¢¡)};¢ Ë=[];ª.Ú=£(á,¢Þ){¢ £½=Ó ¢æ(¥µ+á,¥¶);¢ §=´.§;á=[];Ê(¬=£½.¤²(§)){·(á,¬[1]);if(Ã…<5.5)§=§.»(¬.¤±)}if(á.­){á=á.Õ();·(Ë,¢¡)}};ª.¢·=£(){¯(¢ i=0;i<Ç.­;i++){´.§=´.§.³(Ç[i][0],Ç[i][1])}ª.Ú(¥·,é);ª.Ú(¥¸,£(¡){if(¡.¢².©.Ãœ==¥¹)é(¡.¢²)})};ª.¢Â=£(){¯(¢ i=0;i<Ë.­;i++){¢ î=¢¶(Ë[i][0]);¯(¢ j=0;j<î.­;j++)Ë[i][1](î[j])}};ª.û(¤âgi,¥º);if(Ã…<6)ª.û(¤ãgi,¥»);if(è){¢ à=¥¼.¢ç(¥½);¯(¢ i=0;i<à.­;i++)à[à[i]]=à[i-1]||¥¾;£ ³($,$1,$2,$3){¤ $1+à[$3]};ª.û(Ó ¢æ(¥¿+à.¢å(¥À)+Â¥Ã,¥¶),³)}};¢ £¹=¤ä;¢ £¸=¤åg;¢ £·=¤æ;¢ £¼=¤çg;¢ £»=¥Â;¢ þ={};£ ¢¶(µ,¦){¢ ¢è=!¦;¢ ¢é=(¦)?(¦.¤§==¤¦)?¦:[¦]:[«];¢ ñ=µ.³(£¼,£»).¢ç(¥½);¢ ¬=[];¯(¢ i=0;i<ñ.­;i++){µ=£º(ñ[i]);if(µ.»(0,3).¢å(¥¨)==¥Ã){µ=µ.»(2);¦=£¶(¢é,µ[1])}Ö ¦=¢é;¢ j=0,ß,®,Ã,ò=¥¨;Ê(j<µ.­){ß=µ[j++];®=µ[j++];ò+=ß+®;Ã=¥¨;if(µ[j]==¥Ä){Ê(µ[j++]!=Â¥Ã)Ã+=µ[j];Ã=Ã.»(0,-1);ò+=¥Ä+Ã+Â¥Ã}¦=(¢è&&þ[ò])?þ[ò]:¢ß(¦,ß,®,Ã);if(¢è)þ[ò]=¦}¬=¬.¤¥(¦)}¤ ¬};£ £º(µ){if(£¹.±(µ))µ=¥Å+µ;¤ µ.¬(£¸)};£ ¢ß(¦,ß,®,Ã){¢ À=¥¨;if(£·.±(®)){®=®.¢ç(¥À);À=®[0];®=®[1]}¢ ¸=[];if(ñ[ß])ñ[ß](¸,¦,®,À||Ã);¤ ¸};£ £¶(¦,id){¢ ¸=[],i,j;¯(i=0;i<¦.­;i++){¢ ¬=¦[i].ì.¢À(id);if(¬){if(¬.­==¤¤)·(¸,¬);Ö ¯(j=0;j<¬.­;j++)·(¸,¬[j])}}¤ ¸};¢ ñ={¥Å:£(¸,¦,®,À){¯(¢ i=0;i<¦.­;i++){¢ ¢¦=(®==¥Æ&&¦[i].ì)?¦[i].ì:¦[i].£µ(®);¯(¢ j=0;j<¢¦.­;j++){if(ï(¢¦[j])&&(!À||¢¦[j].À==À))·(¸,¢¦[j])}}},¥Ç:£(¸,¦,®){¯(¢ i=0;i<¦.­;i++)if(¦[i].id==®)·(¸,¦[i])},¥È:£(¸,¦,®){®=Ó ¢æ(¥É+®+¥Ê);¯(¢ i=0;i<¦.­;i++)if(®.±(¦[i].¤£))·(¸,¦[i])},¥Ë:£(¸,¦,®,Ã){®=¢ä[®];if(®)¯(¢ i=0;i<¦.­;i++)if(®(¦[i],Ã))·(¸,¦[i])}};¢ ¤¢=¥¨;¢ ¢ä={Õ:£(){¢ Õ=[];¯(¢ ð in ª){if(ð!=¥Ì&&ð!=Â¥Ã){if(ª[ð].­>1)ð+=¥Î;·(Õ,ð)}}¤ Õ.¢å(¥À)},¥Ì:£(¡){¤ ¢£(¡.©[Â¥Ã]==¥Ì)},Â¥Ã:£(¡){¤ ¢£(¡.©[Â¥Ã]==Â¥Ã)}};¢ ¤¡={Õ:¢ä.Õ};£ £ÿ(¡,º,À){if(À&&¡.À!=À)¤ Þ;¤(º==¥Æ)?ï(¡):(ë)?(¡.º==º.¢ý()):(¡.º==º)};¢ ¢¾=[];£ £þ(¢¿){¤ ¢».±(¢¿)?¢¾[¢¿.»(1,-1)]:¢¿};¢ £´=£(§){¤ §.³(¤èg,£(¬){¤(¬.¢þ(0)==¥©)?¥¨:Â¥Ã+(·(¢¾,¬.»(1,-1))-1)+Â¥Ã}).³(¤ég,¥¨).³(¤êg,¥À).³(¤ëg,¥°)};£ £³(§){¤ §.³(¤æg,¥Ñ).³(¤ìg,£(¬,£²){¤ ¢¾[£²]})};¢ ¢¼=[];£ ö(¡,Ã,Ô){¡.£±(Ã,Ô);·(¢¼,¢¡)};£ £°(¡,Ã,Ô){ÿ{¡.£û(Ã,Ô)}õ(¢à){}};ù.£±(¥Ò,£(){Ê(¢¼.­){¢ Ô=¢½(¢¼);£°(Ô[0],Ô[1],Ô[2])}});¢ ¢³=(Ã…<6)?£(¡){¤ ¡.Ä}:£(¡){¤ ¡.©.¢³};£ é(¡){if(!¢³(¡)){¡.£ù=Þ;£¯(£«(¡))}};£ £¯(¡){Ê(¡){¡.°.£®=¡.©.£®;¡=¢â(¡)}};¢ ¢»=¤í;£ £ø(Â¥){¤(¢».±(Â¥))?Â¥:Â¥Ã+Â¥+Â¥Ã};£ £÷(Â¥){¤(¢».±(Â¥))?Â¥.»(1,-1):Â¥};£ £¡(º){¢ ¡=«.£ª(º||¥Ó);¡.Ã.§=¥Ô;¤ ¡};£ ï(¢¢){¤ ¢£(¢¢&&¢¢.£ñ==1&&¢¢.º!=¥Õ&&!¢¢.£ð)};£ £ï(¡){Ê(¡&&(¡=¡.£î)&&!ï(¡))£¬;¤ ¡};£ ¢â(¡){Ê(¡&&(¡=¡.ÃŒ)&&!ï(¡))£¬;¤ ¡};£ £«(¡){¡=¡.£í;¤(ï(¡))?¡:¢â(¡)};¢ ¢«=Þ;´.¢´(¥Ö,£(){if(ë)¢¹=Ó £(){¢ Ç=[];£ ¢Þ(¡){¢ ¢¸=«.£ª(¥×+¡.¢µ.»(1));if(¡.¢µ.»(-2)!=¥Ø){¢ £©=¥Ù+¡.º+¥Ú,ÃŒ;Ê((ÃŒ=¡.ÃŒ)&&ÃŒ.¢µ!=£©){¡.¢á.¢Ú(ÃŒ);¢¸.¢Ã(ÃŒ)}if(ÃŒ)¡.¢á.¢Ú(ÃŒ)}¡.¢á.£ë(¢¸,¡);¤ ¢¸};ª.í=£(){·(Ç,¢¡)};ª.¢·=£(){ÿ{if(Ã…>5)«.£ê.í(¥Û,¥Ü)}õ(¢à){}¢Ë{¯(¢ i=0;i<Ç.­;i++){¢ î=¢¶(Ç[i][0]);¯(¢ j=0;j<î.­;j++)Ç[i][1](î[j])}}};ª.í(Â¥Ã,£(¡){if(!¡.£§){¢ Ã’=¢¶(¥Þ,¡)[0];if(Ã’){if(!Ã’.id)Ã’.id=Ã’.ü;¡.£§=Ã’.id}}});ª.í(¥ß,£(¡){¢Þ(¡);£¦ þ[¥à]});ª.í(¥á,£(¡){if(¡.º==¥â){¢ ¬=¡.¢µ.¬(¤îi);¡.°.Â¥=(¬)?¬[1]:¥¨}if(¡.Ã==¥ã){ö(¡,¥ä,£(){¡.°.¢Ã=×;¢ª(¥å+¡.ü+¥æ,1)})}});ª.í(¥ç,£(¡){¢ ££=¤ï;ö(¡,¥è,£(){¯(¢ i=0;i<¡.­;i++){if(££.±(¡[i].Ã)&&!¡[i].ý&&!¡[i].°.¢Ã){¡[i].ý=×;¢ª(¥å+¡[i].ü+¥é,1)}Ö if(¡[i].º==¥â&&¡[i].Ã==¥ã){¢ª(¥å+¡[i].ü+¥ê+¡[i].Â¥+Â¥Ã,1);¡[i].Â¥=¡[i].°.Â¥}}})})}},×);´.¢´(¥ë,£(){¢ ¢¯=¥ì,¢û=¤ð,¢ñ=¤ñ,¢Ã=¤ò;¢ ¢ÿ=(Ã…<6)?¤ógi:¤ôgi;¢ ¢ö=(Ã…<5.5)?¤õ:¤ö;¢ Ã=£¡();·(´.Ë,£ ¢ò(){if(Ã.ÃŽ)Ã.ÃŽ.¢Ú(Ã)});Ñ.û(¢ÿ,£(¬){¤ ¬.»(0,3)+¬.¢þ(4).¢ý()+¬.»(5)});¢ ¢ü=(è)?«.¢Ù:Ù;£ ¢Ó(¡){¤ ¡.Ã.Ãœ==¥í||¡.©.Ãœ==¥í};£ ¾(¡){¢ ¾=¡.¢²;Ê(¾&&!¢³(¾))¾=¾.¢²;if(!¾||¢Ó(¡))¾=¢ü;¤ ¾};£ Ã¥(¢ó){Ã¥=£(¡,Â¥){if(!¡.°.¿&&(!ë||¡.º!=¥î)){if(!Â¥)Â¥=¡.©.¨;¡.°.¿=(¢û.±(Â¥))?£Þ.ú(0,ê(¡,Â¥)):Â¥;¡.°.¨=¡.°.¿;é(¡)}};if(è)Ñ.Ú(¥ï,Ã¥);¢ ê=(è)?£(¡,Â¥){¤ ç(¡,Â¥)+¢Õ(¡)+¢Ô(¡)}:£(¡,Â¥){¤ ç(¡,Â¥)};£ ¢Õ(¡){¤ ¡.¢Ñ-¡.Ä};£ ¢Ô(¡){¤ ç(¡,¡.©.£Ã)+ç(¡,¡.©.£Ü)};£ ¢ô(¡){¤((¡.©.¢ù==¥ð)?0:÷(¡,¡.©.¢ù))+((¡.©.¢ø==¥ð)?0:÷(¡,¡.©.¢ø))};£ ¼(¡){¼[¼.Ã++]=¡;if(¡.©.¢÷==¥ð)¡.°.¢÷=0;Ã¥(¡);é(¡);¢®(¡)};¼.Ã=0;Ñ.Ú(¥ñ+¢¯,¼);¢¬(¢Î(¼).³(¤÷g,¥ò));Ã.Ã=0;Ñ.Ú(¥ó+¢¯,Ã);£ ¢®(¡){¢ ¢°=¡.¢õ();¢ ¨=¢°.æ-¢°.Â;if(¡.©.Ã&&¨>=ê(¡,¡.©.Ã))¡.°.¨=ê(¡,¡.©.Ã);Ö if(¡.©.¼&&¨<=ê(¡,¡.©.¼))¡.°.¨=ê(¡,¡.©.¼);Ö ¡.°.¨=¡.°.¿};£ Ø(¡){if((¡.©.Ãœ==¥ô||¡.©.Ãœ==¥í)&&¡.©.Â!=¥ð&&¡.©.æ!=¥ð&&¢ö.±(¡.©.¨)){Ø[Ø.Ã++]=¡;é(¡);¢Ò(¡)}};Ø.Ã=0;Ñ.Ú(¥õ+¢¯,Ø);£ ¢Ò(¡){¡.°.¨=¥¨;¢ ÃŽ=¾(¡);¢ Â=(¡.°.£Û)?¡.¢õ().Â-2:÷(¡,¡.©.Â);¢ ¨=ÃŽ.Ä-÷(¡,¡.©.æ)-Â-¢ô(¡);if(!è)¨-=¢Õ(¡)+¢Ô(¡);if(¨<0)¨=0;if(¢Ó(¡)||¢ó||¡.¢Ñ<¨){¡.°.¿=¨;¡.°.¨=¨}};¢ Ä=Ù.Ä;ö(ù,¥ö,£(){¢ i,ø=(Ä<Ù.Ä);Ä=Ù.Ä;¯(i=0;i<¼.Ã;i++){¢ ¡=¼[i];¢ ¿=(¡.°.¨==¡.©.¼);if(ø&&¿)¡.°.¨=¥¨;if(ø==¿)¢®(¡)}¯(i=0;i<Ã.Ã;i++){¢ ¡=Ã[i];¢ ¿=(¡.°.¨==¡.©.Ã);if(!ø&&¿)¡.°.¨=¥¨;if(ø!=¿)¢®(¡)}¯(i=0;i<Ø.Ã;i++)¢Ò(Ø[i]);¢ò()});£ ç(¡,Â¥){if(¢Ã.±(Â¥))¤ ¢­(Â¥);if(¢ñ.±(Â¥))¤ ¢­(£Ù(Â¥)/100*¾(¡).Ä);¢ ÃŽ=(¡.£Ø)?¡:¡.ÃŽ;ÃŽ.¢Ã(Ã);Ã.Ã.¨=Â¥;¤ Ã.¢Ñ};£ ÷(¡,Â¥){if(¢­(Â¥)>0)¤ ç(¡,Â¥);if(¢Ã.±(Â¥))¤ ¢­(Â¥);¡.ÃŽ.¢Ã(Ã);Ã.Ã.Â=Â¥;¤ Ã.£×}};¢¬(¢Î(Ã¥).³(¤øg,¥÷).³(¤ùg,¥ø).³(¤úg,¥ù).³(¤ûg,¥ú).³(¤üg,¥û).³(¤ýg,¥ü));Ã¥();£Î(×)});¢«=×;if(«.¢Ã==¥®)_ã();Ö ö(«,¥ý,£(){if(!ä&&«.¢Ã==¥®)¢ª(_ã,0)})}õ(¢¨){¢©();â(¥þ+¢¨.¢ï)}¢Ë{}}();',340,0,/./,String,95,'element`var`function`return`value`from`cssText`width`currentStyle`this`document`match`length`filter`for`runtimeStyle`test`href`replace`IE7`selector`styleSheet`push`filtered`path`tagName`slice`minWidth`x5cs`layoutParent`fixedWidth`scopeName`filterArgs`left`ie7_tmp`clientWidth`appVersion`ie7`fixes`link`styleSheets`while`recalcs`nextSibling`style`parentElement`count`maxWidth`CSSFixes`input`new`handler`toString`else`true`fixRight`documentElement`addRecalc`auto`position`type`false`token`SIZES`pattern`alert`load`complete`fixWidth`right`getPixelWidth`quirksMode`boxSizing`getFixedWidth`isHTML`all`add`elements`isElement`pseudoClass`selectors`cacheSelector`modules`script`catch`addEventHandler`getPixelLeft`wider`window`max`addFix`uniqueID`disabled`cssCache`try`arguments`node`Boolean`x5c`visited`subset`url`error`unHide`setTimeout`loaded`eval`parseInt`resizeWidth`NUMERIC`rect`min`offsetParent`hasLayout`addModule`outerHTML`cssQuery`apply`fixedElement`HTMLFixes`display`QUOTED`handlers`pop`strings`string`item`small`recalc`getCSSText`getPath`styles`DUMMY`pathname`makePath`array`httpRequest`finally`Error`readyState`String`appendChild`PIXEL`offsetWidth`resizeRight`isFixed`getPaddingWidth`getBorderWidth`fixed`absolute`x5cw`body`removeChild`box`submit`clicked`fix`select`ignore`parentNode`nextElement`x2f`pseudoClasses`join`RegExp`split`useCache`base`large`HEADER`inlineStyles`LINKS`location`description`height`PERCENT`removeTempElement`HEIGHT`getMarginWidth`getBoundingClientRect`AUTO`minHeight`marginRight`marginLeft`x5cd`UNIT`viewport`toUpperCase`charAt`MATCH`tmpElement`BUTTON`UNSUCCESSFUL`button`abbr`delete`htmlFor`HTML`endTag`createElement`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`decode`encode`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`parse`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`name`autoload`mimeType`search`message`onreadystatechange`fixHeight`bottom`Bottom`Right`top`Top`Left`Height`Width`offsetLeft`canHaveChildren`parseFloat`onresize`screenLeft`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`firstChild`previousSibling`previousElement`ie7_anon`nodeType`clip`none`border`padding`object`unquote`quote`contentEditable`onbeforeunload`detachEvent`import`namespace`getString`compareTagName`dynamicPseudoClasses`attributeTests`className`null`concat`Array`constructor`size`font`medium`list`inline`float`relative`content`sizing`lastIndex`exec`successfully`callee`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`Microsoft`ActiveXObject`src`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ms_`ie7_off`MSIE`navigator`ie7_debug`alpha`version`visible`visibility`Function`fromCharCode`¤Ò`¤à (\\d\\.\\d)`¤Ã`^¤Î`\\.¤É$`^[\\w\\.]+[^:]*$`(¢§\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¤·\\b|\\¤¶\\b|^$`Æ-È`(¤­\\s*:\\s*(Â|æ))`¢º\\s*:\\s*¤«-¢À`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢ã\\*[^\\*]*\\*+([^\\¢ã][^\\*]*\\*+)*\\¢ã)|(\x27[^\x27]*\x27)|("[^"]*")`@(£ý|£ü)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\¢¤:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` Â¥="([^"]*)"`^(¢Ü|£á|£¤)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(¢±|ú)-(¨|¢ð)\\s*:\\s*\\d`\\b(¢±|ú)-¨\\s*:\\s*\\d`^Û|0cm$`^Û$`¢±`£Ö`¨`£Ô`Â`£Ñ`æ`¤Õ`´ ¤Ô 0.7.3 (¤Ó)`\\n\\n`¤Ì`¤Ê`¤È ¤Ç`:È{Æ-È:È}:¢¥{Æ-È:¢¥}`*{¤Æ:0}`ô=``/`¤Ã.¤Â`¤À`¢Ì [1]: ¤½ ¤¼ ã ¤» `Æ-¤º.js`ä`<Ã></Ã>`$1`$2`Ã`¢« ¤³`¢Ì [2]: `([^{}]*)\\¢¤{([^}]*[^\\¢Ø-])?`gi`¢Û-¤°\\½*:\\½*¤¯-¢Û`Ãœ\\½*:\\½*¢×`¤®`¢º:¤¬;$1`¢º:£­`xx-¢Ã,x-¢Ã,¢Ã,¤ª,¢ê,x-¢ê,xx-¢ê`,`xx-¢Ã`(¤©(-¤¨)?\\½*:\\½*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\½)`(\\½|$)`:`È`¢¥`\\¢¤([^)]*\\¢¤)`Æ-È`\x27`\\¢¤:`£ú`£ö`Ãœ:¢×;£õ:0;¢º:£­;£ô:£ó;£ò:¢°(0 0 0 0);Â:-9999`!`Æ-£ì`<£¨:`/>`</`>`£¨`£é://£è.w3.£ç/1999/£æ`£å`Ã’,¢ß,£ä`£¥` £¥`£¤,Ã’`£¢`¢Ü`£ã`«.ì.`.°.¢Ã=Þ`£â`£à`.ý=Þ`.Â¥=\x27`Æ-¢Û-£ß`\\½*:\\½*\\¢ú[\\¢Ø%]*`¢Ö`HR`¨\\½*:\\½*\\¢ú\\¢Ø*[^%]`Û`¢±-¨`ú`ú-¨`¢×`æ`£Ú`£Õ`¢ð`£Ó`£Ò`£Ã`£Ã`£Ã`¢Ì [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js
new file mode 100644
index 0000000..88c764f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-lite.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js
new file mode 100644
index 0000000..7b8f2cf
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-png.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(window.IE7)IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css
new file mode 100644
index 0000000..47c7edd
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-server.css
@@ -0,0 +1,43 @@
+body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
+body {margin: 8px; background: #333;}
+h1 {margin: 0;}
+h1 a:hover {background-color: transparent;}
+h2 {font-size: 1.75em;}
+h3 {font-size: 1.1em;}
+a:active {color: #ff0000;}
+a:link {color: #0a6cce;}
+a:visited {color: #0a6cce;}
+code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
+ padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
+code.box {display: block; padding: 10px; margin: 0.5em 0;}
+ul {list-style-type: square;}
+dd {margin: .2em 0 .5em 1em;}
+dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
+dl.library dd {font-style: italic; margin-left: 3em;}
+dt {font-weight: bold;}
+dt.pack {color: brown;}
+a img {border-style: none;}
+hr {height: 1px; color: #000; border-style: solid;}
+hr.short {height: 2px; width: 100px;}
+div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
+hr {border-bottom-width: 0px;}
+div.header hr {color: #0a6cce; background-color: #0a6cce;}
+div.content {min-height: 100px;}
+div.footer hr {color: #898e79; background-color: #898e79; }
+div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
+a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
+div.footer a:hover {background-color: transparent; text-decoration: none;}
+div.header .menu {text-align: right;}
+div.footer {font-size: x-small; margin-top: 8px;}
+div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
+#license {margin-top: 5px; font-size: xx-small;}
+table {border-top: 1px solid #000; border-left: 1px solid #000;}
+th {background-color: #fff; text-align: left;}
+th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
+th.small {width: 100px;}
+th.medium {width: 200px;}
+th.large {width: 270px;}
+th.x-large {width: 408px;}
+table.fixed {table-layout: fixed;}
+span.comment {color: #666;}
+
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js
new file mode 100644
index 0000000..73e99ac
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard-p.js
@@ -0,0 +1,3 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+eval(function(A,r,s,e,n,a,l){s=function(e){return((e<a)?'':s(e/a))+n[l[493]](e%a+161)};while(++r<735)l[r]=(r<549)?'/'+l[r]+'/':'"'+l[r]+'"';while(--r>=0)A=A.replace(new RegExp(s(r),'g'),l[r]);return A}('if(!¢¡.ª)¶ ¢(){¢Æ{¢¡.ª=¤;£ ¢Ø=¤.¢©=¶ ¤¬;¢ ¢ì(){if(².ß)².ß.ÃŒ.¦²=¦ë};¤.È=¢(){Â¥ ¦ì};£ ¢¶=(¦´.µ(¢ô.¤ì))?¢(¤í){¢¡.¢¶(ª+¦í+¤í)}:¢Ø;£ á=¤¥.á.§(¦µ)[1];if(¦¶.µ(¢ô.¤ì)||á<5||!¦·.µ(².ù.¢«))Â¥ ¢ì();£ ¢§=¢ê(².¦«!=¦î);£ ¢±=(¦© ².¤ë==¦ï)?!¦¸i.µ(¢ô.£»):¢ê(².¤ë!=¦ð);£ £ê=¦ñ;£ £¦=£ê;if(!¢±)£¦+=¦ò;£ ¢½;£ ù=².ù;£ ¢Ñ={};¤.¢©=¢(¢Ç,¢Ò,¤ê){if(!¢Ñ)Â¥;if(¢í)Ãœ(¦ó+¢ó(¢Ò));if(¤ê){¢Ò();¢Ò=¢Ø}¢Ñ[¢Ç]=¢Ò};£ ¤é=¦¹;¢ ¢À(¾,Ã){if(¤é.µ(¾))¾=(Ã||¦ô)+¾;Â¥ ¾};¢ £¹(¾,Ã){¾=¢À(¾,Ã);Â¥ ¾.Æ(0,¾.¤å(¦õ)+1)};£ Ã=£¹(².¤è[².¤è.¯-1].î);£ £½=¶ ¦£(¦ö);¢ ê(¾,Ã){¢Æ{¾=¢À(¾,Ã);£½.¦¡(¦÷,¾,ë);£½.¥þ();Â¥ £½.¥ý}¢·(£¥){¢¶(¦ø+¾);Â¥ ¦ô}};£ ¸=¢(£¼,£·){Â¥ £¼.¸(£·)};£ £´=¢(£¼){Â¥ £¼.£´()};if(á<5.5)Ãœ(ê(¦ù,Ã));if(².£À==¦ú||!¢±)².¥ø();Û ².¥÷(¦û);¤.¿=².é[².é.¯-1];¤.¿.¨=£ê;¤.¿.ÃŽ=Ö;£ ¨={};¢ ¤á(¿,Ã){£ Ô=¢À(¿.¾,Ã);if(¨[Ô])Â¥ ¦ô;¨[Ô]=(¿.¢ç)?¦ô:¤ç(¢ã(¿,Ã),£¹(¿.¾,Ã));Â¥ ¨[Ô]};£ ¢ã=¢(¿){Â¥ ¿.¨};£ ¤æ=¦ºgi;¢ ¤ç(¨,£»){Â¥ ¨.¬(¤æ,¦ü+£».Æ(0,£».¤å(¦õ)+1)+¦ý)};¤.ô=[];¤.¢â=¢Ø;£ ¢¸=ë;¢ _ê(){¢Æ{¢¸=Ö;£ ¤ã=¦»i;£ é=².é;£ £é=[];£ £º=².¤Ø(¦þ);®(£ i=£º.¯-1;i>=0;i--){¸(£é,¦¼.µ(£º[i].¤ä)?¦ô:£º[i].¤ä)}¢ ¢ã(¿,Ã){£ ¨=¦ô;if(¤ã.µ(¿.¥ô)){®(£ i=0;i<¿.¤â.¯;i++){¨+=í.£ó(¿.¤â[i],£¹(¿.¾,Ã))}¨+=((¿.¾)?¤á(¿,Ã):£´(£é))}Â¥ ¨};ª.¨=¦ô;®(i=0;i<é.¯;i++)ª.¨+=¢ã(é[i],¦ô);ª.¨=£©(ª.¨);®(i in ¢Ñ)¢Ñ[i]();£Ö ¢Ñ;if(¢½)¢½.£°();à.£°();ª.¢â();ª.¿.¨=£¦+£§(ª.¨);®(i=0;i<é.¯;i++){if(!é[i].¢ç&&!é[i].ÃŽ)é[i].¨=¦ô}ª.Ø();¢¶(¦ÿ)}¢·(¢ë){¢¶(§¡+¢ë.£ë)}£¾{¢ì()}};¤.Ø=¢(){à.Ø();®(£ i=0;i<¤.ô.¯;i++)¤.ô[i]()};£ à=¶ ¢(){£ è=[];¤.¢¿=¢(){¸(è,í)};£ ô=[];¤.ï=¢(¢µ,£ä){£ ¤à=¶ ç(§¢+¢µ,§£);£ ¨=ª.¨;¢µ=[];Ã(§=¤à.¢ß(¨)){¸(¢µ,§[1]);if(á<5.5)¨=¨.Æ(§.¥ò)}if(¢µ.¯){¢µ=¢µ.È();¸(ô,í)}};¤.£°=¢(){®(£ i=0;i<è.¯;i++){ª.¨=ª.¨.¬(è[i][0],è[i][1])}¤.ï(§¤,¢Ê);¤.ï(§¥,¢(¡){if(¡.¢¥.«.³==§¦)¢Ê(¡.¢¥)})};¤.Ø=¢(){®(£ i=0;i<ô.¯;i++){£ ¢Ã=ü(ô[i][0]);®(£ j=0;j<¢Ã.¯;j++)ô[i][1](¢Ã[j])}};¤.¢¿(¦½gi,§§);if(á<6)¤.¢¿(¦¾gi,§¨);if(¢§){£ ¢´=§©.£¨(§ª);®(£ i=0;i<¢´.¯;i++)¢´[¢´[i]]=¢´[i-1]||§«;¢ ¬($,$1,$2,$3){Â¥ $1+¢´[$3]};¤.¢¿(¶ ç(§¬+¢´.¢Ü(§­)+§®,§£),¬)}};£ ¤Ü=¦¿;£ ¤Û=¦Àg;£ ¤Ú=¦Ã;£ ¤ß=¦Âg;£ ¤Þ=§¯;£ ¢è={};¢ ü(´,­){£ £æ=!­;£ £ç=(­)?(­.¥ê==¥é)?­:[­]:[²];£ ò=´.¬(¤ß,¤Þ).£¨(§ª);£ §=[];®(£ i=0;i<ò.¯;i++){´=¤Ã(ò[i]);if(´.Æ(0,3).¢Ü(¦ô)==§°){´=´.Æ(2);­=¤Ù(£ç,´[1])}Û ­=£ç;£ j=0,¢³,±,É,¢Ã=¦ô;Ã(j<´.¯){¢³=´[j++];±=´[j++];¢Ã+=¢³+±;É=¦ô;if(´[j]==§±){Ã(´[j++]!=§®)É+=´[j];É=É.Æ(0,-1);¢Ã+=§±+É+§®}­=(£æ&&¢è[¢Ã])?¢è[¢Ã]:£å(­,¢³,±,É);if(£æ)¢è[¢Ã]=­}§=§.¥è(­)}Â¥ §};¢ ¤Ã(´){if(¤Ü.µ(´))´=§²+´;Â¥ ´.§(¤Û)};¢ £å(­,¢³,±,É){£ Ê=¦ô;if(¤Ú.µ(±)){±=±.£¨(§­);Ê=±[0];±=±[1]}£ ¼=[];if(ò[¢³])ò[¢³](¼,­,±,Ê||É);Â¥ ¼};¢ ¤Ù(­,id){£ ¼=[],i,j;®(i=0;i<­.¯;i++){£ §=­[i].¢Ì.£·(id);if(§){if(§.¯==¢Þ)¸(¼,§);Û ®(j=0;j<§.¯;j++)¸(¼,§[j])}}Â¥ ¼};£ ò={§²:¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=(±==§³&&­[i].¢Ì)?­[i].¢Ì:­[i].¤Ø(±);®(£ j=0;j<ó.¯;j++){if(¢Î(ó[j])&&(!Ê||ó[j].Ê==Ê))¸(¼,ó[j])}}},§´:¢(¼,­,±){®(£ i=0;i<­.¯;i++)if(­[i].id==±)¸(¼,­[i])},§µ:¢(¼,­,±){±=¶ ç(§¶+±+§·);®(£ i=0;i<­.¯;i++)if(±.µ(­[i].¢Ã))¸(¼,­[i])},§¸:¢(¼,­,±,É){±=¢®[±];if(±)®(£ i=0;i<­.¯;i++)if(±(­[i],É))¸(¼,­[i])}};£ ¢¬=¦ô;£ ¢®={È:¢(){£ È=[];®(£ ¢à in ¤){if(¢Ã!=§¹&&¢Ã!=§º){if(¤[¢Ã].¯>1)¢Ã+=§»;¸(È,¢Ã)}}Â¥ È.¢Ü(§­)},§¹:¢(¡){Â¥ ¢ê(¡.«[§¼]==§¹)},§º:¢(¡){Â¥ ¢ê(¡.«[§¼]==§º)}};£ ¢­={È:¢®.È};¢ £Ù(¡,Ã,Ê){if(Ê&&¡.Ê!=Ê)Â¥ ë;Â¥(Ã==§³)?¢Î(¡):(¢±)?(¡.Ã==Ã.¤Ç()):(¡.Ã==Ã)};£ £µ=[];¢ ¢ö(£¶){Â¥ £².µ(£¶)?£µ[£¶.Æ(1,-1)]:£¶};£ £©=¢(¨){Â¥ ¨.¬(¦Ãg,¢(§){Â¥(§.¤È(0)==¦õ)?¦ô:§½+(¸(£µ,§.Æ(1,-1))-1)+§½}).¬(¦Äg,¦ô).¬(¦Åg,§­).¬(¦Æg,¦ü)};¢ £§(¨){Â¥ ¨.¬(¦Ãg,§¾).¬(¦Çg,¢(§,¤×){Â¥ £µ[¤×]})};£ £³=[];¢ Ó(¡,Õ,þ){¡.¤Ö(Õ,þ);¸(£³,í)};¢ ¤Õ(¡,Õ,þ){¢Æ{¡.¥å(Õ,þ)}¢·(£¥){}};¢¡.¤Ö(§¿,¢(){Ã(£³.¯){£ þ=£´(£³);¤Õ(þ[0],þ[1],þ[2])}});£ £®=(á<6)?¢(¡){Â¥ ¡.Ã}:¢(¡){Â¥ ¡.«.£®};¢ ¢Ê(¡){if(!£®(¡)){¡.¥ã=ë;¤Ô(¤Ã(¡))}};¢ ¤Ô(¡){Ã(¡){¡.¦.¤Ó=¡.«.¤Ó;¡=¢þ(¡)}};£ £²=¦È;¢ ¤ª(©){Â¥(£².µ(©))?©:§½+©+§½};¢ ¥â(©){Â¥(£².µ(©))?©.Æ(1,-1):©};¢ £Ã(Ã){£ ¡=².£Û(Ã||§À);¡.ÃŒ.¨=§Ã;Â¥ ¡};¢ ¢Î(¢é){Â¥ ¢ê(¢é&&¢é.¥Þ==1&&¢é.Ã!=§Â&&!¢é.¢ÿ)};¢ ¤²(¡){Ã(¡&&(¡=¡.Â¥Ã)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¢þ(¡){Ã(¡&&(¡=¡.õ)&&!¢Î(¡))¤Ñ;Â¥ ¡};¢ ¤Ã(¡){¡=¡.¤¹;Â¥(¢Î(¡))?¡:¢þ(¡)};£ ¢í=ë;ª.¢©(§Ã,¢(){if(¢±)¢½=¶ ¢(){£ è=[];¢ £ä(¡){£ £±=².£Û(§Ä+¡.£¯.Æ(1));if(¡.£¯.Æ(-2)!=§Å){£ ¤Ã=§Æ+¡.Ã+§Ç,õ;Ã((õ=¡.õ)&&õ.£¯!=¤Ã){¡.¢ü.¢Õ(õ);£±.¢»(õ)}if(õ)¡.¢ü.¢Õ(õ)}¡.¢ü.¥Û(£±,¡);Â¥ £±};¤.æ=¢(){¸(è,í)};¤.£°=¢(){¢Æ{if(á>5)².¥Ú.æ(§È,§É)}¢·(£¥){}£¾{®(£ i=0;i<è.¯;i++){£ ¢Ã=ü(è[i][0]);®(£ j=0;j<¢Ã.¯;j++)è[i][1](¢Ã[j])}}};¤.æ(§Ê,¢(¡){if(!¡.¤Ã){£ ð=ü(§Ë,¡)[0];if(ð){if(!ð.id)ð.id=ð.¢«;¡.¤Ã=ð.id}}});¤.æ(§Ì,¢(¡){£ä(¡);£Ö ¢è[§Ã]});¤.æ(§Î,¢(¡){if(¡.Ã==§Ã){£ §=¡.£¯.§(¦Éi);¡.¦.©=(§)?§[1]:¦ô}if(¡.Õ==§Ã){Ó(¡,§Ñ,¢(){¡.¦.£ã=Ö;¢Ó(§Ò+¡.¢«+§Ó,1)})}});¤.æ(§Ô,¢(¡){£ ¤Ê=¦Ê;Ó(¡,§Õ,¢(){®(£ i=0;i<¡.¯;i++){if(¤Ê.µ(¡[i].Õ)&&!¡[i].¢ç&&!¡[i].¦.£ã){¡[i].¢ç=Ö;¢Ó(§Ò+¡[i].¢«+§Ö,1)}Û if(¡[i].Ã==§Ã&&¡[i].Õ==§Ã){¢Ó(§Ò+¡[i].¢«+§×+¡[i].©+§½,1);¡[i].©=¡[i].¦.©}}})})}},Ö);ª.¢©(§Ø,¢(){£ £«=§Ù,¤Æ=¦Ë,¢Ö=¦Ì,£Ã=¦Ã;£ ¢¾=(á<6)?¦Îgi:¦Ãgi;£ ¤Ã=(á<5.5)?¦Ã:¦Ñ;£ ¹=£Ã();¸(ª.ô,¢ ¤À(){if(¹.½)¹.½.¢Õ(¹)});à.¢¿(¢¾,¢(§){Â¥ §.Æ(0,3)+§.¤È(4).¤Ç()+§.Æ(5)});£ Þ=(¢§)?².ß:ù;¢ ö(¡){Â¥ ¡.ÃŒ.³==§Ú||¡.«.³==§Ú};¢ ã(¡){£ ã=¡.¢¥;Ã(ã&&!£®(ã))ã=ã.¢¥;if(!ã||ö(¡))ã=Þ;Â¥ ã};¢ ì(¤Ã){ì=¢(¡,©){if(!¡.¦.ä&&(!¢±||¡.Ã!=§Û)){if(!©)©=¡.«.°;¡.¦.ä=(¤Æ.µ(©))?¥Î.¢æ(0,¢Ë(¡,©)):©;¡.¦.°=¡.¦.ä;¢Ê(¡)}};if(¢§)à.ï(§Ü,ì);£ ¢Ë=(¢§)?¢(¡,©){Â¥ ¢É(¡,©)+£à(¡)+£ß(¡)}:¢(¡,©){Â¥ ¢É(¡,©)};¢ £à(¡){Â¥ ¡.¢¼-¡.Ã};¢ £ß(¡){Â¥ ¢É(¡,¡.«.Â¥Ã)+¢É(¡,¡.«.¥Ì)};¢ ¤Â(¡){Â¥((¡.«.¢ï==§Ã)?0:¢ä(¡,¡.«.¢ï))+((¡.«.¤Å==§Ã)?0:¢ä(¡,¡.«.¤Å))};¢ Ú(¡){Ú[Ú.Ë++]=¡;if(¡.«.¤Ä==§Ã)¡.¦.¤Ä=0;ì(¡);¢Ê(¡);£ª(¡)};Ú.Ë=0;à.ï(§Þ+£«,Ú);Ãœ(¢ó(Ú).¬(¦Òg,§ß));ý.Ë=0;à.ï(§à+£«,ý);¢ £ª(¡){£ £¬=¡.£É();£ °=£¬.×-£¬.À;if(¡.«.ý&&°>=¢Ë(¡,¡.«.ý))¡.¦.°=¢Ë(¡,¡.«.ý);Û if(¡.«.Ú&&°<=¢Ë(¡,¡.«.Ú))¡.¦.°=¢Ë(¡,¡.«.Ú);Û ¡.¦.°=¡.¦.ä};¢ ¢²(¡){if((¡.«.³==§á||¡.«.³==§Ú)&&¡.«.À!=§Ã&&¡.«.×!=§Ã&&¤Ã.µ(¡.«.°)){¢²[¢².Ë++]=¡;¢Ê(¡);£Þ(¡)}};¢².Ë=0;à.ï(§â+£«,¢²);¢ £Þ(¡){¡.¦.°=¦ô;£ ½=ã(¡);£ À=(¡.¦.¢Ô)?¡.£É().À-2:¢ä(¡,¡.«.À);£ °=½.Ã-¢ä(¡,¡.«.×)-À-¤Â(¡);if(!¢§)°-=£à(¡)+£ß(¡);if(°<0)°=0;if(ö(¡)||¤Ã||¡.¢¼<°){¡.¦.ä=°;¡.¦.°=°}};£ Ã=ù.Ã;Ó(¢¡,§ã,¢(){£ i,¢å=(Ã<ù.Ã);Ã=ù.Ã;®(i=0;i<Ú.Ë;i++){£ ¡=Ú[i];£ ä=(¡.¦.°==¡.«.Ú);if(¢å&&ä)¡.¦.°=¦ô;if(¢å==ä)£ª(¡)}®(i=0;i<ý.Ë;i++){£ ¡=ý[i];£ ä=(¡.¦.°==¡.«.ý);if(!¢å&&ä)¡.¦.°=¦ô;if(¢å!=ä)£ª(¡)}®(i=0;i<¢².Ë;i++)£Þ(¢²[i]);¤À()});¢ ¢É(¡,©){if(£Ã.µ(©))Â¥ ø(©);if(¢Ö.µ(©))Â¥ ø(£Æ(©)/100*ã(¡).Ã);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);¹.ÃŒ.°=©;Â¥ ¹.¢¼};¢ ¢ä(¡,©){if(ø(©)>0)Â¥ ¢É(¡,©);if(£Ã.µ(©))Â¥ ø(©);¡.½.¢»(¹);¹.ÃŒ.À=©;Â¥ ¹.¢¤}};Ãœ(¢ó(ì).¬(¦Óg,§ä).¬(¦Ôg,§å).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦×g,§è).¬(¦Øg,§é));ì();¥É(Ö)});ª.¢©(§ê,¢(){£ ¤§=¦Ùg,¤½=¦Úi;ª.¢á=[];ª.¤¿=¶ ¤¾;ª.·=·;ª.Ã’=Ã’;ª.Ã=Ã;ª.¢â=¢(){¥Ç(¤.¤¿)¤.¨=£§(¢â(£©(¤.¨)));®(£ i=0;i<ª.¢á.¯;i++)ª.¢á[i].¢ß();®(i=0;i<£¡.¯;i++)£¡[i].¤º()};¢ã=¢(¿,Ã){Â¥ ê(¿.¾,Ã)};£ ££=[];¢ ¤¾(){¤.¢â=¢(¨){·.û=¶ ç(§ë+¢®+§ì,§í);·.¤¨=¶ ç(§î+¢®+§­+¢­+§ï,§í);Ã’.û=¶ ç(§ð+¢­+§ñ,§í);Â¥ ¨.¬(Ã.û,Ã.ID).¬(Ã’.û,Ã’.ID).¬(·.û,·.ID)};¤.£©=¢(¨){ñ.û=¶ ç(§ò+¢¬+§ó+¢¬+§ô,§í);Â¥ ¨.¬(ñ.û,ñ.ID).¬(¦Ûg,¢($){Â¥ §õ+(¸(££,$)-1)+§ö}).¬(¦Üg,§¸).¬(¦Ãg,¢(§,À,×){Â¥ À.£¨(§ª).¢Ü(×)+×})};¤.£§=¢(¨){Â¥ ¨.¬(¦Þg,¢($,$1){Â¥ ££[$1]})}};¢ _·(){¤.È=¢(){Â¥ §µ+¤.¢Ç};¤.æ=¢(¡){¡.¢Ã+=§²+¤.¢Ç};¤.¤©=¢(¡){¡.¢Ã=¡.¢Ã.¬(¤.¢¾,¦ô)};¤.¢ß=¢(){£ §=ü(¤.´);®(£ i=0;i<§.¯;i++)¤.æ(§[i])}};¢ ·(´,¨){¤.id=ª.¢á.¯;¤.¢Ç=·.¢ø+¤.id;¤.´=´;¤.¢¾=¶ ç(§÷+¤.¢Ç+§ø,§í);¸(ª.¢á,¤)};·.£Ú=_·;·.¢ª=¶ _·;·.¢ø=§ù;·.ID=¢(§){Â¥ £Õ(§)+¶ ·(§)};¢ _Ã’(){¤.¢ß=¢(){£ §=ü(¤.¢°);®(£ i=0;i<§.¯;i++){£ º=(¤.º)?ü(¤.º,§[i]):[§[i]];if(º)¤.¢¯(§[i],º,¤)}}};_Ã’.¢ª=¶ _·;¢ Ã’(´,¢°,¢¯,º){¤.¢°=¢°;¤.¢¯=¢­[¢¯];¤.º=º;¤.£¢=·;¤.£¢(´)};Ã’.£Ú=_Ã’;Ã’.¢ª=¶ _Ã’;Ã’.ID=¢(§,¢°,¢¯,º){if(¢±&&¢¯!=§ú&&¤½.µ(¢°)&&!¦ß.µ(º))Â¥ §;Â¥ £Õ(§)+¶ Ã’(§,¢°,¢¯,º)};£¦+=§û;£ ¤·=¦àg;¢ ¤¶(§,£Ü){Â¥ Ãœ(§ü+§ý.Æ(£Ü.¯)+£Ü+§½)};£ £¡=[];¢ _Ã(){¤.Ã…=¢Þ;¤.È=¢(){Â¥ ¦ô};¤.¥Ã=0;¢ ¤¸(¢Ä,Ã…,¨){£ ÿ=¥Â(¢(){¢Æ{if(!¢Ä.ê)Â¥;¢Ä.ê(¢Ä,Ã…,¨);¤»(ÿ)}¢·(£¥){¤»(ÿ)}},10)};¤.¤º=¢(){if(¤.Ã…==¢Þ)Â¥;®(£ i=0;i<¤.§.¯;i++){£ º=¤.§[i];£ ¢Å=º.¦[¤.³];if(¢Å){£ ½=º.£Ì?º:º.½;£ £¤=¦á.µ(¤.Ã…);£ ¡=².£Û(£¤?Ã.¤³:§Â);¡.¢ÿ=Ö;¡.¦.¨=¢Å.¨;if(!£¤)¡.Â¥Ã=¢Å.Ã…;if(¤.³==§þ){½.¥À(¡,½.¤¹)}Û{½.¢»(¡)}if(£¤)¤¸(¡,¢Å.Ã…,¢Å.¨);º.¦[¤.³]=¢Þ}}};¤.¢ß=¢(){¤.§=ü(¤.´);®(£ i=0;i<¤.§.¯;i++){£ ¦=¤.§[i].¦;if(!¦[¤.³])¦[¤.³]={¨:¦ô};¦[¤.³].¨+=§ÿ+¤.¨;if(¤.Ã…!=¢Þ)¦[¤.³].Ã…=¤.Ã…}}};_Ã.¢ª=¶ _·;¢ Ã(´,³,¨){¤.³=³;¤.¨=££[¨].Æ(1,-1);£ Ã…=¤.¨.§(Ã.¤´);if(Ã…)¤.Ã…=¢ö(Ã…[1]).¬(¤·,¤¶);¤.£¢=·;¤.£¢(´);¸(£¡,¤)};Ã.£Ú=_Ã;Ã.¢ª=¶ _Ã;Ã.ID=¢(§,´,³,¨){Â¥ ¶ Ã(´,³,¨)};Ã.û=¦âg;Ã.¤´=¦ã;Ã.¤³=¨¡+¢À(¨¢,Ã)+¨£;ò[§Ç]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ó=­[i].¥º;®(£ j=0;j<ó.¯;j++)if(£Ù(ó[j],±,Ê))¸(¼,ó[j])}};ò[¨¤]=¢(¼,­,±,Ê){®(£ i=0;i<­.¯;i++){£ ¢ý=¢þ(­[i]);if(¢ý&&£Ù(¢ý,±,Ê))¸(¼,¢ý)}};ò[¨¥]=¢(¼,­,±){±=¢ú[±];®(£ i=0;i<­.¯;i++)if(±(­[i]))¸(¼,­[i])};¢®[¨¦]=¢(¡){Â¥!¤²(¡)};¢®[¨§]=¢(¡,É){É=¶ ç(¨¨+É,¨©);Ã(¡&&!¡.£×(¨§))¡=¡.¢ü;Â¥ ¡&&É.µ(¡.£×(¨§))};¢­.¢Ù=¢(¡){£ Â=í;Ó(¡,¨ª,¢(){ª.Ã.¢Ù.¢Û(Â)});Ó(¡,¨«,¢(){ª.Ã.¢Ù.¢Ú(Â)})};¢­.¢÷=¢(¡){£ Â=í;Ó(¡,¨¬,¢(){ª.Ã.¢÷.¢Û(Â)})};¢­.¢Ã=¢(¡){£ Â=í;Ó(¡,¨­,¢(){ª.Ã.¢Ã.¢Û(Â)});Ó(¡,¨®,¢(){ª.Ã.¢Ã.¢Ú(Â)});if(¡==².¥²){ª.Ã.¢Ã.¢Û(Â)}};Ó(²,¨¯,¢(){£ ú=ª.Ã.¢÷;£ Ù=ú.Ù,i;®(i in Ù)ú.¢Ú(Ù[i]);ú=ª.Ã.¢Ù;Ù=ú.Ù;®(i in Ù)if(!Ù[i][0].£õ(£ü.¥°))ú.¢Ú(Ù[i])});£ ¢ú=[];£ ¤«=¦äg;¢ ñ(Ä,¢Â,©){©=¢ö(©);¤.id=¢ú.¯;£ò(Ä.¥¯()){¢¦ ¨°:Ä=¨±;¤­;¢¦ ¨²:Ä=¨³;¤­;£ñ:Ä=¨´+Ä+¨µ}¢Â=¢¬[¢Â];¸(¢ú,¶ ¤¬(¨¶,¨·+¢Â(Ä,©)))};ñ.ID=¢(§,Ä,¢Â,©){Â¥ ¶ ñ(Ä,¢Â,©)};ñ.¢ª.È=¢(){Â¥ ñ.¢ø+¤.id};¢¬={È:¢(){£ È=[];®(£ i in ¤)if(i&&i!=¨¸)¸(È,i);Â¥ È.¢Ü(¦ô).¬(¦åg,¦ô)},¢ù:¢(©){Â¥ ©.¬(¤«,¨¹)},¦ô:¢(Ä){Â¥ Ä},¨º:¢(Ä,©){Â¥ Ä+¨»+¤ª(©)},¨¼:¢(Ä,©){Â¥ ¨½+¢¬.¢ù(©)+¨¾+Ä+§®},¨¿:¢(Ä,©){Â¥ ¨À+¢¬.¢ù(©)+¨Ã+Ä+§®}};ñ.¢ø=¨¥;¢ _ú(){¤.¢Û=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.æ(º[i]);¤.Ù[·.id+¡.¢«]=Â};¤.¢Ú=¢(Â){£ ¡=Â[0];£ º=Â[1];£ ·=Â[2];®(£ i=0;i<º.¯;i++)·.¤©(º[i]);£Ö ¤.Ù[·.id+¡.¢«]}};ª.Ã=¢(Õ){¤.Õ=Õ;¤.Ù={};ª.Ã[Õ]=¤};ª.Ã.¢ª=¶ _ú;¶ ª.Ã(¨Â);¶ ª.Ã(¨Ã);¶ ª.Ã(§ú);¢ £Õ(´){Â¥ ´.¬(·.¤¨,¦ô).¬(¤§,§²)}},Ö);ª.¢©(¨Ä,¢(){if(á<5.5)Â¥;£ £Ô=¨Å;£ £ý=(¦æ.µ(¤¥.¥©))?¢À(¨Æ,Ã):¨Ç;£ £Ó=¶ ç((¢¡.¤ý||¨È)+¨É,¨©);¢ £þ(¡,î){¡.¦.±=£Ô.¬(¦ç,î)};£ ¢¾=¦ègi;à.¢¿(¢¾,¢ ¬(§,¢õ,¤¡,Ô,£ÿ){Ô=¢ö(Ô);Â¥ £Ó.µ(Ô)?¨Ê+£Ô.¬(¦é,¨Ë).¬(¦ç,Ô)+¨Ì+(¢õ||¦ô)+§¸+(¤¡||¦ô)+¨Ã+(£ÿ||¦ô):§});if(¢½){¢ £Ò(¡){if(£Ó.µ(¡.î)){£ °=¡.°,÷=¡.÷;£þ(¡,¡.î);¡.î=£ý;¡.°=°;¡.÷=÷}Û ¡.¦.±=¦ô};¢½.æ(¨Î,¢(¡){if(¡.Ã==¨Ã&&¡.Õ!=¨Ã)Â¥;£Ò(¡);Ó(¡,¨Ñ,¢(){if(£ü.£Ê==¨Ò)£Ò(¡)})})}});ª.¢©(¨Ó,¢(){£ ¢Ö=¦Ì;à.ï(¨Ô,¢¢);à.ï(¨Õ,¢£);£ ß=².ß;£ Þ$=(¢§)?¨Ö:¨×;£ Þ=Ãœ(Þ$);¢ ¢ñ(){if(ß.«.£Î!=§Ú){if(ß.«.£Ã==¨Ã){ß.¦.£Ã=¨Ø+¢ô.¤÷+§®}ß.¦.£Î=§Ú}¢ñ=¢Ø};£ ¹=£Ã(¨Ù);¢ ¢º(£ú){Â¥ ¢ó(£ú).¬(¦Õg,§æ).¬(¦Ög,§ç).¬(¦Óg,§ä).¬(¦êg,¨Ú)};¢ ¢£(¡){if(¡.«.£Î!=§Ú)Â¥;if(!¡.£õ(ß)){¢ñ();¢£[¢£.Ë++]=¡;£Ë(¡);¤ö(¡);£Â(¡)}};¢£.Ë=0;¢ £Â(¡){¹.î=¡.«.£Ã.Æ(5,-2);£ ½=(¡.£Ì)?¡:¡.½;½.¢»(¹);£È(¡);¤õ(¡);½.¢Õ(¹)};¢ £Ë(¡){¡.ÃŒ.¢×=¡.«.¢×;if(!ö(¡)){£ £ô=¨Û+Þ$+¨Ü;¡.¦.£ð(¨Ã,£ô)}};Ãœ(¢º(£Ë));¢ £È(¡){£ £Ê=ö(¡)?¨Ã:¨Þ;¡.¦[£Ê]=£Ç(¡,¡.ÃŒ.¢×)-¡.£É().À-¡.¤ô};Ãœ(¢º(£È));¢ ö(¡){if(!¡)Â¥ ë;if(¡.ÃŒ.³==§Ú||¡.«.³==§Ú)Â¥ Ö;Â¥ í.£ó(¡.½)};¢ £Ç(¡,³){£ò(³){¢¦ ¨ß:¢¦ §ç:Â¥ 0;¢¦ §â:¢¦ §é:Â¥ Þ.Ã-¹.¢¼;¢¦ ¨à:Â¥(Þ.Ã-¹.¢¼)/2;£ñ:if(¢Ö.µ(³)){Â¥ ø((Þ.Ã-¹.¢¼)*£Æ(³)/100)}¹.ÃŒ.À=³;Â¥ ¹.¢¤}};Ãœ(¢º(£Ç));¢ ¢¢(¡){if(¡.«.³!=§Ú)Â¥;¢ñ();¢¢[¢¢.Ë++]=¡;¡.ÃŒ.³=§Ú;¡.¦.³=§á;£Ã(¡)};¢¢.Ë=0;¢ £Ã(¡,Ø){£Å(¡,Ø);¤ò(¡,Ø);if(!Ø||¡.¦.¤ñ){if(ø(¡.«.¢î)==0)¡.¦.¤ð++}};¢ £Å(¡,Ø){if(!Ø&&¢Ö.µ(¡.«.°))¡.¦.ì=¡.«.°;if(¡.¦.ì)¡.¦.°=ø(£Æ(¡.¦.ì)/100*Þ.Ã);if(Ø){if(!¡.¦.£Ä)Â¥}Û{¡.¦.£Ä=¡.«.×!=§Ã&&¡.«.À==§Ã}¡.¦.À=¦ô;¡.¦.¢Ô=¢¹(¡);if(¡.«.¢ï!=§Ã){¡.½.¢»(¹);¹.ÃŒ.À=¡.«.¢ï;¡.¦.¢Ô-=¹.¢¤;¡.½.¢Õ(¹)}if(ö(¡.¢¥))¡.¦.£ï=¡.¦.¢Ô;Û if(!Ø)¡.¦.£ð(¨á,¨â+Þ$+¨ã)};Ãœ(¢º(£Å).¬(¦Øg,§é).¬(¦Ôg,§å));¢ ¢¹(¡){£ ¢¹=¡.¢¤,£Ã=ë;£ Ç=ö(¡.¢¥)&&¡.¦.£Ä;Ã(¡=¡.¢¥){if(!Ç&&¡.«.³!=¨ä)£Ã=Ö;¢¹+=¡.¢¤*(£Ã?-1:1)}Â¥ ¢¹};Ãœ(¢º(¢¹));¢ £ì(){®(£ i=0;i<¢£.Ë;i++)£Â(¢£[i]);®(i=0;i<¢¢.Ë;i++)£Ã(¢¢[i],Ö);ÿ=0};£ ÿ;Ó(¢¡,§ã,¢(){if(!ÿ)ÿ=¢Ó(£ì,10)})});¢í=Ö;if(².£À==¦ú)_ê();Û Ó(²,¨å,¢(){if(!¢¸&&².£À==¦ú)¢Ó(_ê,0)})}¢·(¢ë){¢ì();¢¶(¨æ+¢ë.£ë)}£¾{}}();',493,0,/./,String,95,'element`function`var`this`return`runtimeStyle`match`cssText`value`IE7`currentStyle`replace`from`for`length`width`filter`document`position`selector`test`new`Class`push`ie7_tmp`target`x5cs`filtered`parentElement`href`styleSheet`left`path`instance`PseudoElement`attribute`content`slice`fixed`toString`filterArgs`scopeName`count`style`clientWidth`ie7`tagName`Event`x5c`DynamicStyle`addEventHandler`url`type`true`right`recalc`instances`minWidth`else`eval`while`viewport`body`CSSFixes`appVersion`link`layoutParent`fixedWidth`auto`add`RegExp`fixes`styleSheets`load`false`fixWidth`arguments`src`addRecalc`input`AttributeSelector`selectors`subset`recalcs`nextSibling`isFixed`height`parseInt`documentElement`ie7Event`ALL`cssQuery`maxWidth`handler`timer`window`positionFixed`backgroundFixed`offsetLeft`offsetParent`case`quirksMode`x5cw`addModule`prototype`uniqueID`attributeTests`dynamicPseudoClasses`pseudoClasses`dynamicPseudoClass`attach`isHTML`fixRight`token`SIZES`pattern`alert`catch`complete`getScreenLeft`topFunction`appendChild`offsetWidth`HTMLFixes`MATCH`addFix`makePath`focus`compare`x5cd`object`pseudoElement`try`name`visited`getPixelWidth`boxSizing`getFixedWidth`all`elements`isElement`pseudoClass`cacheSelector`modules`script`setTimeout`screenLeft`removeChild`PERCENT`backgroundPositionX`DUMMY`hover`unregister`register`join`className`null`exec`display`classes`parse`getCSSText`getPixelLeft`wider`max`disabled`cssCache`node`Boolean`error`unHide`loaded`bottom`marginLeft`absolute`fixBackground`top`String`location`image`getString`active`PREFIX`escape`attributeSelectors`x2f`parentNode`adjacent`nextElement`ie7_anon`pseudoElements`inherit`encoded`isURL`ignore`HEADER`decode`split`encode`resizeWidth`NUMERIC`rect`min`hasLayout`outerHTML`apply`fixedElement`QUOTED`handlers`pop`strings`string`item`small`getPath`styles`pathname`array`httpRequest`finally`Error`readyState`foregroundPosition`backgroundPosition`nested`autoLeft`positionLeft`parseFloat`getOffsetLeft`setOffsetLeft`getBoundingClientRect`propertyName`backgroundLeft`canHaveChildren`backgroundImage`backgroundAttachment`tmpElement`none`background`fixImg`pngTest`FILTER`simpleSelector`delete`getAttribute`lang`compareTagName`ancestor`createElement`code`PIXEL`resizeRight`getPaddingWidth`getBorderWidth`box`submit`clicked`fix`select`useCache`base`large`inlineStyles`LINKS`description`resize`onresize`scrollLeft`pixelLeft`setExpression`default`switch`callee`expression`contains`Height`Width`Top`Left`leftFunction`img`event`NULL`addFilter`suffix`prefix`scale`png`define`navigator`Microsoft`CHILD`COMPLEX`remove`quote`ESCAPE`Function`break`ie7_`x5cb`class`ms_`previousElement`OBJECT`CONTENT`before`unicode`HEX`addTimer`firstChild`create`clearInterval`inline`ANCHOR`Parser`parser`removeTempElement`HEIGHT`getMarginWidth`AUTO`minHeight`marginRight`UNIT`toUpperCase`charAt`BUTTON`UNSUCCESSFUL`button`abbr`htmlFor`HTML`endTag`firstChildElement`continue`block`marginTop`fixMargins`removeEventHandler`attachEvent`key`getElementsByTagName`selectById`NAMESPACE`STREAM`STANDARD_SELECT`toStream`ASTERISK`IMPLIED_SELECTOR`reg`loadStyleSheet`imports`MEDIA`innerHTML`lastIndexOf`URL`fixUrls`scripts`RELATIVE`autoload`mimeType`search`message`onreadystatechange`static`screenTop`autoTop`positionTop`center`clientLeft`setOffsetTop`backgroundTop`protocol`onpropertychange`INPUT`zoom`crop`trans`IE7_PNG_SUFFIX`x00`x_bits`char`x5cnstatic`x_height`x5cn`x_width`javascript`gif`blank`userAgent`bSV1`sizingMethod`AlphaImageLoader`DXImageTransform`progid`toLowerCase`srcElement`onmouseup`activeElement`onblur`onfocus`onmousedown`onmouseout`onmouseover`child`first`children`scriptlet`text`htm`data`after`insertBefore`innerText`setInterval`specificity`x5cu`align`vertical`with`css2`fixHeight`Bottom`Right`paddingRight`paddingLeft`Math`model`onsubmit`reset`form`onclick`textarea`label`xhtml`org`www`http`namespaces`replaceChild`html4`previousSibling`nodeType`clip`border`padding`unquote`contentEditable`onbeforeunload`detachEvent`import`namespace`concat`Array`constructor`size`font`medium`list`float`relative`sizing`lastIndex`successfully`media`ball`bscreen`write`createStyleSheet`ie5`file`not`could`responseText`send`GET`open`XMLHTTP`ActiveXObject`margin`Document`XML`xml`unknown`typeof`CSS1Compat`compatMode`ie7_off`MSIE`ie7_debug`alpha`version`visible`visibility`fromCharCode`¦®`¦­ (\\d\\.\\d)`¦¬`^¤±`\\.¦§$`^[\\w\\.]+[^:]*$`(Ô\\([\x27"]?)([\\w\\.]+[^:\\)]*[\x27"]?\\))`\\¥ö\\b|\\¥õ\\b|^$`ÃŽ-â`(¥ï\\s*:\\s*(À|×))`¢à\\s*:\\s*¥î-£·`^[^>\\+~\\s]`[\\s>\\+~:@#\\.\\(\\)]|[^\\s>\\+~:@#\\.\\(\\)]+`\\|`([\\s>~\\,]|[^(]\\+|^)([\\.:#@])`(\\¢û\\*[^\\*]*\\*+([^\\¢û][^\\*]*\\*+)*\\¢û)|(\x27[^\x27]*\x27)|("[^"]*")`@(¥ç|¥æ)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->`\\Ñ:`^\\s+|\\s*([\\{\\}\\+\\,>~\\s;])\\s*|\\s+$`\x27(\\d+)\x27`(\x27[^\x27]*\x27)|("[^"]*")` ©="([^"]*)"`^(£â|¥Ñ|¤Ë)$`^\\d\\w*$`^\\d+%$`^\\d+(px)?$`\\b(£­|¢æ)-(°|÷)\\s*:\\s*\\d`\\b(£­|¢æ)-°\\s*:\\s*\\d`^Ã¥|0cm$`^Ã¥$`£­`£÷`°`£ù`À`¥Ë`×`>`(\\ba(\\.[\\w-]+)?)$`\\{[^\\}]*\\}`::`([^\\}\\s]*\\,[^\\{]*)(\\{\\d+\\})`\\{(\\d+)\\}`[+>~]`\\Ñ([a-fA-F\\d]+)`^Ô\\(.*\\)$`([^}]*):(¤µ|¥¿)[^{]*\\{([^}]*)\\}`Ã…\\s*:\\s*([^;]*)(;|$)`([\\¢û()[\\]?{}|*+])`=`\\¥ª\\b`%1`£Ñ(-¢õ)?\\s*:([^(};]*)Ô\\(([^\\)]+)\\)([^;}]*)`¤¢`X`¦±`ª ¦° 0.7.3 (¦¯)`\\n\\n`¦ª`¦¨`¦¦ ¦¥`:â{ÃŽ-â:â}:¢È{ÃŽ-â:¢È}`*{¦¤:0}`¢Ò=``/`¤¦.¦¢`¥ÿ`£¿ [1]: ¥ü ¥û ê ¥ú `ÃŽ-¥ù.js`¢¸`<ÃŒ></ÃŒ>`$1`$2`ÃŒ`¢í ¥ó`£¿ [2]: `([^{}]*)\\Ñ{([^}]*[^\\¢¨-])?`gi`£á-¥ñ\\»*:\\»*Ã…-£á`³\\»*:\\»*¢ð`¥ð`¢à:¤¼;$1`¢à:¤Ò`xx-£¸,x-£¸,£¸,¥í,£è,x-£è,xx-£è`,`xx-£¸`(¥ì(-¥ë)?\\»*:\\»*)(`|`)`$1*$2` *#`(` `*`#`.`(^|\\»)`(\\»|$)`:`â`¢È`\\Ñ([^)]*\\Ñ)`ÃŽ-â`\x27`\\Ñ:`¥ä`¢Ä`³:¢ð;¥á:0;¢à:¤Ò;¥à:£Ã;¥ß:£¬(0 0 0 0);À:-9999`!`ÃŽ-¥Ü`<¤Î:`/>`</`>`¤Î`¥Ù://¥Ø.w3.¥×/1999/¥Ö`¥Õ`ð,£å,¥Ô`¤Ì` ¤Ì`¤Ë,ð`¤É`£â`¥Ó`².¢Ì.`.¦.£ã=ë`¥Ò`Â¥Ã`.¢ç=ë`.©=\x27`ÃŽ-£á-Â¥Ã`\\»*:\\»*\\¢Ã[\\¢¨%]*`Ç`HR`°\\»*:\\»*\\¢Ã\\¢¨*[^%]`Ã¥`£­-°`¢æ`¢æ-°`¢ð`×`£í`£ö`÷`£ø`¢ò`¥Ê`¢î`ÃŽ-¥È`[^},\\»]*([>+~][^:@,\\»{]+|:(`)|\\Ñ.[\\¢¨-]+\\Ñ.[\\¢¨-.]+|@[@\\¢Ã]+)`g`[^\\»(]+[+~]|@\\¢Ã+|:(â|¢È|`)|\\Ñ.[\\¢¨-.]+`([^}]*):(`)([^{]*)`\\Ñ[([^`=\\Ñ]]+)([`]?=?)([^\\Ñ]]+)?\\Ñ]`{`}`\\»`\\¤¯`¤®`¢Ã`.¢ÿ{¥Æ-¥Å:¢ò;¢à:¤¼}`\x27\\¥Ä`0000`¤µ`;`<¢Ä ¤°=¢ÿ ¥¾=\x27`ÃŽ-Ã….¥½`\x27 °=100% ÷=0 Õ=¥¼/x-¥»>`+`@`¥¹-¥¸`£Ø`^`i`¥·`¥¶`¥µ`¥´`¥³`¥±`id`¡.id.¬(/¤±\\¢Ã+/g,\x27\x27)`¤°`¡.¢Ã.¬(/\\¤¯\\»*¤®\\¢Ã+/g,\x27\x27)`¡.£×(\x27`\x27)`¡`Â¥ `¢ù`\\Ñ$1`=`==`~=`/(^|\\»)`(\\»|$)/.µ(`|=`/^`(-|$)/.µ(`¢Ù`¢÷`ÃŽ-¤£`¥®:¥­.¤¦.¥¬(î=%1,¥«=\x27¤¢\x27)`¥¨.¥§`¥¦:\x27#¤¤ ¥¥ 1\\¥¤#¤¤ ¥£ 1\\¥¢ ¥¡ ¤ÿ[]={0¤þ}\x27`-¤ü.¤£`$`±:`¤û`;¤ú:1;£Ñ`£Ã`£û,ð`¤ù`¢õ`¤ø`î`ÃŽ-Ç`³\\»*:\\»*Ç`£Ñ[\\¢¨\\»-]*:[^};]*Ç`ß`ù`Ô(`£û`Y`(ø(¦.¢¤)+².`.£î)||0`¢×`¢¤`À`¤ó`£ï`¦.¢Ô+².`.£î`¤ï`¤î`£¿ [0]: '.split('\x60')));
+/* packed with http://dean.edwards.name/packer/ */
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js
new file mode 100644
index 0000000..2109905
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/ie7-standard.js
@@ -0,0 +1,2 @@
+/* IE7 version 0.7.3 (alpha) 2004/09/18 */
+if(!window.IE7)new function(){try{window.IE7=this;var DUMMY=this.addModule=new Function;function unHide(){if(document.body)document.body.style.visibility="visible"};this.toString=function(){return "IE7 version 0.7.3 (alpha)"};var alert=(/ie7_debug/.test(location.search))?function(message){window.alert(IE7+"\n\n"+message)}:DUMMY;var appVersion=navigator.appVersion.match(/MSIE (\d\.\d)/)[1];if(/ie7_off/.test(location.search)||appVersion<5||!/^ms_/.test(document.documentElement.uniqueID))return unHide();var quirksMode=Boolean(document.compatMode!="CSS1Compat");var isHTML=(typeof document.mimeType=="unknown")?!/\.xml$/i.test(location.pathname):Boolean(document.mimeType!="XML Document");var LINKS=":link{ie7-link:link}:visited{ie7-link:visited}";var HEADER=LINKS;if(!isHTML)HEADER+="*{margin:0}";var HTMLFixes;var documentElement=document.documentElement;var modules={};this.addModule=function(name,script,autoload){if(!modules)return;if(loaded)eval("script="+String(script));if(autoload){script();script=DUMMY}modules[name]=script};var RELATIVE=/^[\w\.]+[^:]*$/;function makePath(href,path){if(RELATIVE.test(href))href=(path||"")+href;return href};function getPath(href,path){href=makePath(href,path);return href.slice(0,href.lastIndexOf("/")+1)};var path=getPath(document.scripts[document.scripts.length-1].src);var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");function load(href,path){try{href=makePath(href,path);httpRequest.open("GET",href,false);httpRequest.send();return httpRequest.responseText}catch(ignore){alert("Error [1]: could not load file "+href);return ""}};var push=function(array,item){return array.push(item)};var pop=function(array){return array.pop()};if(appVersion<5.5)eval(load("ie7-ie5.js",path));if(document.readyState=="complete"||!isHTML)document.createStyleSheet();else document.write("<style></style>");this.styleSheet=document.styleSheets[document.styleSheets.length-1];this.styleSheet.cssText=LINKS;this.styleSheet.ie7=true;var cssText={};function loadStyleSheet(styleSheet,path){var url=makePath(styleSheet.href,path);if(cssText[url])return "";cssText[url]=(styleSheet.disabled)?"":fixUrls(getCSSText(styleSheet,path),getPath(styleSheet.href,path));return cssText[url]};var getCSSText=function(styleSheet){return styleSheet.cssText};var URL=/(url\(['"]?)([\w\.]+[^:\)]*['"]?\))/gi;function fixUrls(cssText,pathname){return cssText.replace(URL,"$1"+pathname.slice(0,pathname.lastIndexOf("/")+1)+"$2")};this.recalcs=[];this.parse=DUMMY;var complete=false;function _load(){try{complete=true;var MEDIA=/\bscreen\b|\ball\b|^$/i;var styleSheets=document.styleSheets;var inlineStyles=[];var styles=document.getElementsByTagName("style");for(var i=styles.length-1;i>=0;i--){push(inlineStyles,/ie7-link/.test(styles[i].innerHTML)?"":styles[i].innerHTML)}function getCSSText(styleSheet,path){var cssText="";if(MEDIA.test(styleSheet.media)){for(var i=0;i<styleSheet.imports.length;i++){cssText+=arguments.callee(styleSheet.imports[i],getPath(styleSheet.href,path))}cssText+=((styleSheet.href)?loadStyleSheet(styleSheet,path):pop(inlineStyles))}return cssText};IE7.cssText="";for(i=0;i<styleSheets.length;i++)IE7.cssText+=getCSSText(styleSheets[i],"");IE7.cssText=encode(IE7.cssText);for(i in modules)modules[i]();delete modules;if(HTMLFixes)HTMLFixes.apply();CSSFixes.apply();IE7.parse();IE7.styleSheet.cssText=HEADER+decode(IE7.cssText);for(i=0;i<styleSheets.length;i++){if(!styleSheets[i].disabled&&!styleSheets[i].ie7)styleSheets[i].cssText=""}IE7.recalc();alert("loaded successfully")}catch(error){alert("Error [2]: "+error.description)}finally{unHide()}};this.recalc=function(){CSSFixes.recalc();for(var i=0;i<this.recalcs.length;i++)this.recalcs[i]()};var CSSFixes=new function(){var fixes=[];this.addFix=function(){push(fixes,arguments)};var recalcs=[];this.addRecalc=function(pattern,fix){var reg=new RegExp("([^{}]*)\x5c{([^}]*[^\x5cw-])?"+pattern,"gi");var cssText=IE7.cssText;pattern=[];while(match=reg.exec(cssText)){push(pattern,match[1]);if(appVersion<5.5)cssText=cssText.slice(match.lastIndex)}if(pattern.length){pattern=pattern.toString();push(recalcs,arguments)}};this.apply=function(){for(var i=0;i<fixes.length;i++){IE7.cssText=IE7.cssText.replace(fixes[i][0],fixes[i][1])}this.addRecalc("box-sizing\x5cs*:\x5cs*content-box",boxSizing);this.addRecalc("position\x5cs*:\x5cs*absolute",function(element){if(element.offsetParent.currentStyle.position=="relative")boxSizing(element.offsetParent)})};this.recalc=function(){for(var i=0;i<recalcs.length;i++){var elements=cssQuery(recalcs[i][0]);for(var j=0;j<elements.length;j++)recalcs[i][1](elements[j])}};this.addFix(/(float\s*:\s*(left|right))/gi,"display:inline;$1");if(appVersion<6)this.addFix(/display\s*:\s*list-item/gi,"display:block");if(quirksMode){var SIZES="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<SIZES.length;i++)SIZES[SIZES[i]]=SIZES[i-1]||"xx-small";function replace($,$1,$2,$3){return $1+SIZES[$3]};this.addFix(new RegExp("(font(-size)?\x5cs*:\x5cs*)("+SIZES.join("|")+")","gi"),replace)}};var STANDARD_SELECT=/^[^>\+~\s]/;var STREAM=/[\s>\+~:@#\.\(\)]|[^\s>\+~:@#\.\(\)]+/g;var NAMESPACE=/\|/;var IMPLIED_SELECTOR=/([\s>~\,]|[^(]\+|^)([\.:#@])/g;var ASTERISK="$1*$2";var cssCache={};function cssQuery(selector,from){var useCache=!from;var base=(from)?(from.constructor==Array)?from:[from]:[document];var selectors=selector.replace(IMPLIED_SELECTOR,ASTERISK).split(",");var match=[];for(var i=0;i<selectors.length;i++){selector=toStream(selectors[i]);if(selector.slice(0,3).join("")==" *#"){selector=selector.slice(2);from=selectById(base,selector[1])}else from=base;var j=0,token,filter,filterArgs,cacheSelector="";while(j<selector.length){token=selector[j++];filter=selector[j++];cacheSelector+=token+filter;filterArgs="";if(selector[j]=="("){while(selector[j++]!=")")filterArgs+=selector[j];filterArgs=filterArgs.slice(0,-1);cacheSelector+="("+filterArgs+")"}from=(useCache&&cssCache[cacheSelector])?cssCache[cacheSelector]:select(from,token,filter,filterArgs);if(useCache)cssCache[cacheSelector]=from}match=match.concat(from)}return match};function toStream(selector){if(STANDARD_SELECT.test(selector))selector=" "+selector;return selector.match(STREAM)};function select(from,token,filter,filterArgs){var scopeName="";if(NAMESPACE.test(filter)){filter=filter.split("|");scopeName=filter[0];filter=filter[1]}var filtered=[];if(selectors[token])selectors[token](filtered,from,filter,scopeName||filterArgs);return filtered};function selectById(from,id){var filtered=[],i,j;for(i=0;i<from.length;i++){var match=from[i].all.item(id);if(match){if(match.length==null)push(filtered,match);else for(j=0;j<match.length;j++)push(filtered,match[j])}}return filtered};var selectors={" ":function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=(filter=="*"&&from[i].all)?from[i].all:from[i].getElementsByTagName(filter);for(var j=0;j<subset.length;j++){if(isElement(subset[j])&&(!scopeName||subset[j].scopeName==scopeName))push(filtered,subset[j])}}},"#":function(filtered,from,filter){for(var i=0;i<from.length;i++)if(from[i].id==filter)push(filtered,from[i])},".":function(filtered,from,filter){filter=new RegExp("(^|\x5cs)"+filter+"(\x5cs|$)");for(var i=0;i<from.length;i++)if(filter.test(from[i].className))push(filtered,from[i])},":":function(filtered,from,filter,filterArgs){filter=pseudoClasses[filter];if(filter)for(var i=0;i<from.length;i++)if(filter(from[i],filterArgs))push(filtered,from[i])}};var attributeTests="";var pseudoClasses={toString:function(){var toString=[];for(var pseudoClass in this){if(pseudoClass!="link"&&pseudoClass!="visited"){if(this[pseudoClass].length>1)pseudoClass+="\x5c([^)]*\x5c)";push(toString,pseudoClass)}}return toString.join("|")},"link":function(element){return Boolean(element.currentStyle["ie7-link"]=="link")},"visited":function(element){return Boolean(element.currentStyle["ie7-link"]=="visited")}};var dynamicPseudoClasses={toString:pseudoClasses.toString};function compareTagName(element,tagName,scopeName){if(scopeName&&element.scopeName!=scopeName)return false;return(tagName=="*")?isElement(element):(isHTML)?(element.tagName==tagName.toUpperCase()):(element.tagName==tagName)};var strings=[];function getString(string){return QUOTED.test(string)?strings[string.slice(1,-1)]:string};var encode=function(cssText){return cssText.replace(/(\x2f\*[^\*]*\*+([^\x2f][^\*]*\*+)*\x2f)|('[^']*')|("[^"]*")/g,function(match){return(match.charAt(0)=="/")?"":"'"+(push(strings,match.slice(1,-1))-1)+"'"}).replace(/@(namespace|import)[^;\n]+[;\n]|<!\-\-|\-\->/g,"").replace(/\x5c:/g,"|").replace(/^\s+|\s*([\{\}\+\,>~\s;])\s*|\s+$/g,"$1")};function decode(cssText){return cssText.replace(/\|/g,"\x5c:").replace(/'(\d+)'/g,function(match,key){return strings[key]})};var handlers=[];function addEventHandler(element,type,handler){element.attachEvent(type,handler);push(handlers,arguments)};function removeEventHandler(element,type,handler){try{element.detachEvent(type,handler)}catch(ignore){}};window.attachEvent("onbeforeunload",function(){while(handlers.length){var handler=pop(handlers);removeEventHandler(handler[0],handler[1],handler[2])}});var hasLayout=(appVersion<6)?function(element){return element.clientWidth}:function(element){return element.currentStyle.hasLayout};function boxSizing(element){if(!hasLayout(element)){element.contentEditable=false;fixMargins(firstChildElement(element))}};function fixMargins(element){while(element){element.runtimeStyle.marginTop=element.currentStyle.marginTop;element=nextElement(element)}};var QUOTED=/('[^']*')|("[^"]*")/;function quote(value){return(QUOTED.test(value))?value:"'"+value+"'"};function unquote(value){return(QUOTED.test(value))?value.slice(1,-1):value};function tmpElement(tagName){var element=document.createElement(tagName||"object");element.style.cssText="position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";return element};function isElement(node){return Boolean(node&&node.nodeType==1&&node.tagName!="!"&&!node.ie7_anon)};function previousElement(element){while(element&&(element=element.previousSibling)&&!isElement(element))continue;return element};function nextElement(element){while(element&&(element=element.nextSibling)&&!isElement(element))continue;return element};function firstChildElement(element){element=element.firstChild;return(isElement(element))?element:nextElement(element)};var loaded=false;IE7.addModule("ie7-html4",function(){if(isHTML)HTMLFixes=new function(){var fixes=[];function fix(element){var fixedElement=document.createElement("<HTML:"+element.outerHTML.slice(1));if(element.outerHTML.slice(-2)!="/>"){var endTag="</"+element.tagName+">",nextSibling;while((nextSibling=element.nextSibling)&&nextSibling.outerHTML!=endTag){element.parentNode.removeChild(nextSibling);fixedElement.appendChild(nextSibling)}if(nextSibling)element.parentNode.removeChild(nextSibling)}element.parentNode.replaceChild(fixedElement,element);return fixedElement};this.add=function(){push(fixes,arguments)};this.apply=function(){try{if(appVersion>5)document.namespaces.add("HTML","http://www.w3.org/1999/xhtml")}catch(ignore){}finally{for(var i=0;i<fixes.length;i++){var elements=cssQuery(fixes[i][0]);for(var j=0;j<elements.length;j++)fixes[i][1](elements[j])}}};this.add("label",function(element){if(!element.htmlFor){var input=cssQuery("input,select,textarea",element)[0];if(input){if(!input.id)input.id=input.uniqueID;element.htmlFor=input.id}}});this.add("abbr",function(element){fix(element);delete cssCache[" abbr"]});this.add("button,input",function(element){if(element.tagName=="BUTTON"){var match=element.outerHTML.match(/ value="([^"]*)"/i);element.runtimeStyle.value=(match)?match[1]:""}if(element.type=="submit"){addEventHandler(element,"onclick",function(){element.runtimeStyle.clicked=true;setTimeout("document.all."+element.uniqueID+".runtimeStyle.clicked=false",1)})}});this.add("form",function(element){var UNSUCCESSFUL=/^(submit|reset|button)$/;addEventHandler(element,"onsubmit",function(){for(var i=0;i<element.length;i++){if(UNSUCCESSFUL.test(element[i].type)&&!element[i].disabled&&!element[i].runtimeStyle.clicked){element[i].disabled=true;setTimeout("document.all."+element[i].uniqueID+".disabled=false",1)}else if(element[i].tagName=="BUTTON"&&element[i].type=="submit"){setTimeout("document.all."+element[i].uniqueID+".value='"+element[i].value+"'",1);element[i].value=element[i].runtimeStyle.value}}})})}},true);IE7.addModule("ie7-box-model",function(){var NUMERIC="\x5cs*:\x5cs*\x5cd[\x5cw%]*",UNIT=/^\d\w*$/,PERCENT=/^\d+%$/,PIXEL=/^\d+(px)?$/;var MATCH=(appVersion<6)?/\b(min|max)-(width|height)\s*:\s*\d/gi:/\b(min|max)-width\s*:\s*\d/gi;var AUTO=(appVersion<5.5)?/^auto|0cm$/:/^auto$/;var ie7_tmp=tmpElement();push(IE7.recalcs,function removeTempElement(){if(ie7_tmp.parentElement)ie7_tmp.parentElement.removeChild(ie7_tmp)});CSSFixes.addFix(MATCH,function(match){return match.slice(0,3)+match.charAt(4).toUpperCase()+match.slice(5)});var viewport=(quirksMode)?document.body:documentElement;function isFixed(element){return element.style.position=="fixed"||element.currentStyle.position=="fixed"};function layoutParent(element){var layoutParent=element.offsetParent;while(layoutParent&&!hasLayout(layoutParent))layoutParent=layoutParent.offsetParent;if(!layoutParent||isFixed(element))layoutParent=viewport;return layoutParent};function fixWidth(HEIGHT){fixWidth=function(element,value){if(!element.runtimeStyle.fixedWidth&&(!isHTML||element.tagName!="HR")){if(!value)value=element.currentStyle.width;element.runtimeStyle.fixedWidth=(UNIT.test(value))?Math.max(0,getFixedWidth(element,value)):value;element.runtimeStyle.width=element.runtimeStyle.fixedWidth;boxSizing(element)}};if(quirksMode)CSSFixes.addRecalc("width\x5cs*:\x5cs*\x5cd\x5cw*[^%]",fixWidth);var getFixedWidth=(quirksMode)?function(element,value){return getPixelWidth(element,value)+getBorderWidth(element)+getPaddingWidth(element)}:function(element,value){return getPixelWidth(element,value)};function getBorderWidth(element){return element.offsetWidth-element.clientWidth};function getPaddingWidth(element){return getPixelWidth(element,element.currentStyle.paddingLeft)+getPixelWidth(element,element.currentStyle.paddingRight)};function getMarginWidth(element){return((element.currentStyle.marginLeft=="auto")?0:getPixelLeft(element,element.currentStyle.marginLeft))+((element.currentStyle.marginRight=="auto")?0:getPixelLeft(element,element.currentStyle.marginRight))};function minWidth(element){minWidth[minWidth.count++]=element;if(element.currentStyle.minHeight=="auto")element.runtimeStyle.minHeight=0;fixWidth(element);boxSizing(element);resizeWidth(element)};minWidth.count=0;CSSFixes.addRecalc("min-width"+NUMERIC,minWidth);eval(String(minWidth).replace(/min/g,"max"));maxWidth.count=0;CSSFixes.addRecalc("max-width"+NUMERIC,maxWidth);function resizeWidth(element){var rect=element.getBoundingClientRect();var width=rect.right-rect.left;if(element.currentStyle.maxWidth&&width>=getFixedWidth(element,element.currentStyle.maxWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.maxWidth);else if(element.currentStyle.minWidth&&width<=getFixedWidth(element,element.currentStyle.minWidth))element.runtimeStyle.width=getFixedWidth(element,element.currentStyle.minWidth);else element.runtimeStyle.width=element.runtimeStyle.fixedWidth};function fixRight(element){if((element.currentStyle.position=="absolute"||element.currentStyle.position=="fixed")&&element.currentStyle.left!="auto"&&element.currentStyle.right!="auto"&&AUTO.test(element.currentStyle.width)){fixRight[fixRight.count++]=element;boxSizing(element);resizeRight(element)}};fixRight.count=0;CSSFixes.addRecalc("right"+NUMERIC,fixRight);function resizeRight(element){element.runtimeStyle.width="";var parentElement=layoutParent(element);var left=(element.runtimeStyle.screenLeft)?element.getBoundingClientRect().left-2:getPixelLeft(element,element.currentStyle.left);var width=parentElement.clientWidth-getPixelLeft(element,element.currentStyle.right)-left-getMarginWidth(element);if(!quirksMode)width-=getBorderWidth(element)+getPaddingWidth(element);if(width<0)width=0;if(isFixed(element)||HEIGHT||element.offsetWidth<width){element.runtimeStyle.fixedWidth=width;element.runtimeStyle.width=width}};var clientWidth=documentElement.clientWidth;addEventHandler(window,"onresize",function(){var i,wider=(clientWidth<documentElement.clientWidth);clientWidth=documentElement.clientWidth;for(i=0;i<minWidth.count;i++){var element=minWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.minWidth);if(wider&&fixedWidth)element.runtimeStyle.width="";if(wider==fixedWidth)resizeWidth(element)}for(i=0;i<maxWidth.count;i++){var element=maxWidth[i];var fixedWidth=(element.runtimeStyle.width==element.currentStyle.maxWidth);if(!wider&&fixedWidth)element.runtimeStyle.width="";if(wider!=fixedWidth)resizeWidth(element)}for(i=0;i<fixRight.count;i++)resizeRight(fixRight[i]);removeTempElement()});function getPixelWidth(element,value){if(PIXEL.test(value))return parseInt(value);if(PERCENT.test(value))return parseInt(parseFloat(value)/100*layoutParent(element).clientWidth);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);ie7_tmp.style.width=value;return ie7_tmp.offsetWidth};function getPixelLeft(element,value){if(parseInt(value)>0)return getPixelWidth(element,value);if(PIXEL.test(value))return parseInt(value);element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=value;return ie7_tmp.offsetLeft}};eval(String(fixWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Left/g,"Top").replace(/left/g,"top").replace(/Right/g,"Bottom").replace(/right/g,"bottom"));fixWidth();fixHeight(true)});IE7.addModule("ie7-css2",function(){var CHILD=/>/g,ANCHOR=/(\ba(\.[\w-]+)?)$/i;IE7.classes=[];IE7.parser=new Parser;IE7.Class=Class;IE7.DynamicStyle=DynamicStyle;IE7.PseudoElement=PseudoElement;IE7.parse=function(){with(this.parser)this.cssText=decode(parse(encode(this.cssText)));for(var i=0;i<IE7.classes.length;i++)IE7.classes[i].exec();for(i=0;i<pseudoElements.length;i++)pseudoElements[i].create()};getCSSText=function(styleSheet,path){return load(styleSheet.href,path)};var encoded=[];function Parser(){this.parse=function(cssText){Class.ALL=new RegExp("[^},\x5cs]*([>+~][^:@,\x5cs{]+|:("+pseudoClasses+")|\x5c.[\x5cw-]+\x5c.[\x5cw-.]+|@[@\x5cd]+)","g");Class.COMPLEX=new RegExp("[^\x5cs(]+[+~]|@\x5cd+|:(link|visited|"+pseudoClasses+"|"+dynamicPseudoClasses+")|\x5c.[\x5cw-.]+","g");DynamicStyle.ALL=new RegExp("([^}]*):("+dynamicPseudoClasses+")([^{]*)","g");return cssText.replace(PseudoElement.ALL,PseudoElement.ID).replace(DynamicStyle.ALL,DynamicStyle.ID).replace(Class.ALL,Class.ID)};this.encode=function(cssText){AttributeSelector.ALL=new RegExp("\x5c[([^"+attributeTests+"=\x5c]]+)(["+attributeTests+"]?=?)([^\x5c]]+)?\x5c]","g");return cssText.replace(AttributeSelector.ALL,AttributeSelector.ID).replace(/\{[^\}]*\}/g,function($){return "{"+(push(encoded,$)-1)+"}"}).replace(/::/g,":").replace(/([^\}\s]*\,[^\{]*)(\{\d+\})/g,function(match,left,right){return left.split(",").join(right)+right})};this.decode=function(cssText){return cssText.replace(/\{(\d+)\}/g,function($,$1){return encoded[$1]})}};function _Class(){this.toString=function(){return "."+this.name};this.add=function(element){element.className+=" "+this.name};this.remove=function(element){element.className=element.className.replace(this.MATCH,"")};this.exec=function(){var match=cssQuery(this.selector);for(var i=0;i<match.length;i++)this.add(match[i])}};function Class(selector,cssText){this.id=IE7.classes.length;this.name=Class.PREFIX+this.id;this.selector=selector;this.MATCH=new RegExp("\x5cs"+this.name+"\x5cb","g");push(IE7.classes,this)};Class.ancestor=_Class;Class.prototype=new _Class;Class.PREFIX="ie7_";Class.ID=function(match){return simpleSelector(match)+new Class(match)};function _DynamicStyle(){this.exec=function(){var match=cssQuery(this.attach);for(var i=0;i<match.length;i++){var target=(this.target)?cssQuery(this.target,match[i]):[match[i]];if(target)this.dynamicPseudoClass(match[i],target,this)}}};_DynamicStyle.prototype=new _Class;function DynamicStyle(selector,attach,dynamicPseudoClass,target){this.attach=attach;this.dynamicPseudoClass=dynamicPseudoClasses[dynamicPseudoClass];this.target=target;this.inherit=Class;this.inherit(selector)};DynamicStyle.ancestor=_DynamicStyle;DynamicStyle.prototype=new _DynamicStyle;DynamicStyle.ID=function(match,attach,dynamicPseudoClass,target){if(isHTML&&dynamicPseudoClass!="focus"&&ANCHOR.test(attach)&&!/[+>~]/.test(target))return match;return simpleSelector(match)+new DynamicStyle(match,attach,dynamicPseudoClass,target)};HEADER+=".ie7_anon{vertical-align:top;display:inline}";var HEX=/\x5c([a-fA-F\d]+)/g;function unicode(match,code){return eval("'\x5cu"+"0000".slice(code.length)+code+"'")};var pseudoElements=[];function _PseudoElement(){this.content=null;this.toString=function(){return ""};this.specificity=0;function addTimer(object,content,cssText){var timer=setInterval(function(){try{if(!object.load)return;object.load(object,content,cssText);clearInterval(timer)}catch(ignore){clearInterval(timer)}},10)};this.create=function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){var target=this.match[i];var pseudoElement=target.runtimeStyle[this.position];if(pseudoElement){var parentElement=target.canHaveChildren?target:target.parentElement;var isURL=/^url\(.*\)$/.test(this.content);var element=document.createElement(isURL?PseudoElement.OBJECT:"!");element.ie7_anon=true;element.runtimeStyle.cssText=pseudoElement.cssText;if(!isURL)element.innerText=pseudoElement.content;if(this.position=="before"){parentElement.insertBefore(element,parentElement.firstChild)}else{parentElement.appendChild(element)}if(isURL)addTimer(element,pseudoElement.content,pseudoElement.cssText);target.runtimeStyle[this.position]=null}}};this.exec=function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var runtimeStyle=this.match[i].runtimeStyle;if(!runtimeStyle[this.position])runtimeStyle[this.position]={cssText:""};runtimeStyle[this.position].cssText+=";"+this.cssText;if(this.content!=null)runtimeStyle[this.position].content=this.content}}};_PseudoElement.prototype=new _Class;function PseudoElement(selector,position,cssText){this.position=position;this.cssText=encoded[cssText].slice(1,-1);var content=this.cssText.match(PseudoElement.CONTENT);if(content)this.content=getString(content[1]).replace(HEX,unicode);this.inherit=Class;this.inherit(selector);push(pseudoElements,this)};PseudoElement.ancestor=_PseudoElement;PseudoElement.prototype=new _PseudoElement;PseudoElement.ID=function(match,selector,position,cssText){return new PseudoElement(selector,position,cssText)};PseudoElement.ALL=/([^}]*):(before|after)[^{]*\{([^}]*)\}/g;PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class=ie7_anon data='"+makePath("ie7-content.htm",path)+"' width=100% height=0 type=text/x-scriptlet>";selectors[">"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var subset=from[i].children;for(var j=0;j<subset.length;j++)if(compareTagName(subset[j],filter,scopeName))push(filtered,subset[j])}};selectors["+"]=function(filtered,from,filter,scopeName){for(var i=0;i<from.length;i++){var adjacent=nextElement(from[i]);if(adjacent&&compareTagName(adjacent,filter,scopeName))push(filtered,adjacent)}};selectors["@"]=function(filtered,from,filter){filter=attributeSelectors[filter];for(var i=0;i<from.length;i++)if(filter(from[i]))push(filtered,from[i])};pseudoClasses["first-child"]=function(element){return!previousElement(element)};pseudoClasses["lang"]=function(element,filterArgs){filterArgs=new RegExp("^"+filterArgs,"i");while(element&&!element.getAttribute("lang"))element=element.parentNode;return element&&filterArgs.test(element.getAttribute("lang"))};dynamicPseudoClasses.hover=function(element){var instance=arguments;addEventHandler(element,"onmouseover",function(){IE7.Event.hover.register(instance)});addEventHandler(element,"onmouseout",function(){IE7.Event.hover.unregister(instance)})};dynamicPseudoClasses.active=function(element){var instance=arguments;addEventHandler(element,"onmousedown",function(){IE7.Event.active.register(instance)})};dynamicPseudoClasses.focus=function(element){var instance=arguments;addEventHandler(element,"onfocus",function(){IE7.Event.focus.register(instance)});addEventHandler(element,"onblur",function(){IE7.Event.focus.unregister(instance)});if(element==document.activeElement){IE7.Event.focus.register(instance)}};addEventHandler(document,"onmouseup",function(){var ie7Event=IE7.Event.active;var instances=ie7Event.instances,i;for(i in instances)ie7Event.unregister(instances[i]);ie7Event=IE7.Event.hover;instances=ie7Event.instances;for(i in instances)if(!instances[i][0].contains(event.srcElement))ie7Event.unregister(instances[i])});var attributeSelectors=[];var ESCAPE=/([\x2f()[\]?{}|*+])/g;function AttributeSelector(attribute,compare,value){value=getString(value);this.id=attributeSelectors.length;switch(attribute.toLowerCase()){case "id":attribute="element.id.replace(/ms_\x5cd+/g,'')";break;case "class":attribute="element.className.replace(/\x5cb\x5cs*ie7_\x5cd+/g,'')";break;default:attribute="element.getAttribute('"+attribute+"')"}compare=attributeTests[compare];push(attributeSelectors,new Function("element","return "+compare(attribute,value)))};AttributeSelector.ID=function(match,attribute,compare,value){return new AttributeSelector(attribute,compare,value)};AttributeSelector.prototype.toString=function(){return AttributeSelector.PREFIX+this.id};attributeTests={toString:function(){var toString=[];for(var i in this)if(i&&i!="escape")push(toString,i);return toString.join("").replace(/=/g,"")},escape:function(value){return value.replace(ESCAPE,"\x5c$1")},"":function(attribute){return attribute},"=":function(attribute,value){return attribute+"=="+quote(value)},"~=":function(attribute,value){return "/(^|\x5cs)"+attributeTests.escape(value)+"(\x5cs|$)/.test("+attribute+")"},"|=":function(attribute,value){return "/^"+attributeTests.escape(value)+"(-|$)/.test("+attribute+")"}};AttributeSelector.PREFIX="@";function _ie7Event(){this.register=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.add(target[i]);this.instances[Class.id+element.uniqueID]=instance};this.unregister=function(instance){var element=instance[0];var target=instance[1];var Class=instance[2];for(var i=0;i<target.length;i++)Class.remove(target[i]);delete this.instances[Class.id+element.uniqueID]}};IE7.Event=function(type){this.type=type;this.instances={};IE7.Event[type]=this};IE7.Event.prototype=new _ie7Event;new IE7.Event("hover");new IE7.Event("active");new IE7.Event("focus");function simpleSelector(selector){return selector.replace(Class.COMPLEX,"").replace(CHILD," ")}},true);IE7.addModule("ie7-png",function(){if(appVersion<5.5)return;var FILTER="progid:DXImageTransform.Microsoft.AlphaImageLoader(src=%1,sizingMethod='scale')";var NULL=(/\bSV1\b/.test(navigator.userAgent))?makePath("blank.gif",path):"javascript:'#define x_width 1\x5cn#define x_height 1\x5cnstatic char x_bits[]={0x00}'";var pngTest=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");function addFilter(element,src){element.runtimeStyle.filter=FILTER.replace(/%1/,src)};var MATCH=/background(-image)?\s*:([^(};]*)url\(([^\)]+)\)([^;}]*)/gi;CSSFixes.addFix(MATCH,function replace(match,image,prefix,url,suffix){url=getString(url);return pngTest.test(url)?"filter:"+FILTER.replace(/scale/,"crop").replace(/%1/,url)+";zoom:1;background"+(image||"")+":"+(prefix||"")+"none"+(suffix||""):match});if(HTMLFixes){function fixImg(element){if(pngTest.test(element.src)){var width=element.width,height=element.height;addFilter(element,element.src);element.src=NULL;element.width=width;element.height=height}else element.runtimeStyle.filter=""};HTMLFixes.add("img,input",function(element){if(element.tagName=="INPUT"&&element.type!="image")return;fixImg(element);addEventHandler(element,"onpropertychange",function(){if(event.propertyName=="src")fixImg(element)})})}});IE7.addModule("ie7-fixed",function(){var PERCENT=/^\d+%$/;CSSFixes.addRecalc("position\x5cs*:\x5cs*fixed",positionFixed);CSSFixes.addRecalc("background[\x5cw\x5cs-]*:[^};]*fixed",backgroundFixed);var body=document.body;var viewport$=(quirksMode)?"body":"documentElement";var viewport=eval(viewport$);function fixBackground(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundImage="url("+location.protocol+")"}body.runtimeStyle.backgroundAttachment="fixed"}fixBackground=DUMMY};var ie7_tmp=tmpElement("img");function topFunction(leftFunction){return String(leftFunction).replace(/Left/g,"Top").replace(/left/g,"top").replace(/Width/g,"Height").replace(/X/g,"Y")};function backgroundFixed(element){if(element.currentStyle.backgroundAttachment!="fixed")return;if(!element.contains(body)){fixBackground();backgroundFixed[backgroundFixed.count++]=element;backgroundLeft(element);backgroundTop(element);backgroundPosition(element)}};backgroundFixed.count=0;function backgroundPosition(element){ie7_tmp.src=element.currentStyle.backgroundImage.slice(5,-2);var parentElement=(element.canHaveChildren)?element:element.parentElement;parentElement.appendChild(ie7_tmp);setOffsetLeft(element);setOffsetTop(element);parentElement.removeChild(ie7_tmp)};function backgroundLeft(element){element.style.backgroundPositionX=element.currentStyle.backgroundPositionX;if(!isFixed(element)){var expression="(parseInt(runtimeStyle.offsetLeft)+document."+viewport$+".scrollLeft)||0";element.runtimeStyle.setExpression("backgroundPositionX",expression)}};eval(topFunction(backgroundLeft));function setOffsetLeft(element){var propertyName=isFixed(element)?"backgroundPositionX":"offsetLeft";element.runtimeStyle[propertyName]=getOffsetLeft(element,element.style.backgroundPositionX)-element.getBoundingClientRect().left-element.clientLeft};eval(topFunction(setOffsetLeft));function isFixed(element){if(!element)return false;if(element.style.position=="fixed"||element.currentStyle.position=="fixed")return true;return arguments.callee(element.parentElement)};function getOffsetLeft(element,position){switch(position){case "left":case "top":return 0;case "right":case "bottom":return viewport.clientWidth-ie7_tmp.offsetWidth;case "center":return(viewport.clientWidth-ie7_tmp.offsetWidth)/2;default:if(PERCENT.test(position)){return parseInt((viewport.clientWidth-ie7_tmp.offsetWidth)*parseFloat(position)/100)}ie7_tmp.style.left=position;return ie7_tmp.offsetLeft}};eval(topFunction(getOffsetLeft));function positionFixed(element){if(element.currentStyle.position!="fixed")return;fixBackground();positionFixed[positionFixed.count++]=element;element.style.position="fixed";element.runtimeStyle.position="absolute";foregroundPosition(element)};positionFixed.count=0;function foregroundPosition(element,recalc){positionLeft(element,recalc);positionTop(element,recalc);if(!recalc||element.runtimeStyle.autoTop){if(parseInt(element.currentStyle.bottom)==0)element.runtimeStyle.screenTop++}};function positionLeft(element,recalc){if(!recalc&&PERCENT.test(element.currentStyle.width))element.runtimeStyle.fixWidth=element.currentStyle.width;if(element.runtimeStyle.fixWidth)element.runtimeStyle.width=parseInt(parseFloat(element.runtimeStyle.fixWidth)/100*viewport.clientWidth);if(recalc){if(!element.runtimeStyle.autoLeft)return}else{element.runtimeStyle.autoLeft=element.currentStyle.right!="auto"&&element.currentStyle.left=="auto"}element.runtimeStyle.left="";element.runtimeStyle.screenLeft=getScreenLeft(element);if(element.currentStyle.marginLeft!="auto"){element.parentElement.appendChild(ie7_tmp);ie7_tmp.style.left=element.currentStyle.marginLeft;element.runtimeStyle.screenLeft-=ie7_tmp.offsetLeft;element.parentElement.removeChild(ie7_tmp)}if(isFixed(element.offsetParent))element.runtimeStyle.pixelLeft=element.runtimeStyle.screenLeft;else if(!recalc)element.runtimeStyle.setExpression("pixelLeft","runtimeStyle.screenLeft+document."+viewport$+".scrollLeft")};eval(topFunction(positionLeft).replace(/right/g,"bottom").replace(/width/g,"height"));function getScreenLeft(element){var getScreenLeft=element.offsetLeft,nested=false;var fixed=isFixed(element.offsetParent)&&element.runtimeStyle.autoLeft;while(element=element.offsetParent){if(!fixed&&element.currentStyle.position!="static")nested=true;getScreenLeft+=element.offsetLeft*(nested?-1:1)}return getScreenLeft};eval(topFunction(getScreenLeft));function resize(){for(var i=0;i<backgroundFixed.count;i++)backgroundPosition(backgroundFixed[i]);for(i=0;i<positionFixed.count;i++)foregroundPosition(positionFixed[i],true);timer=0};var timer;addEventHandler(window,"onresize",function(){if(!timer)timer=setTimeout(resize,10)})});loaded=true;if(document.readyState=="complete")_load();else addEventHandler(document,"onreadystatechange",function(){if(!complete&&document.readyState=="complete")setTimeout(_load,0)})}catch(error){unHide();alert("Error [0]: "+error.description)}finally{}}();
diff --git a/src/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png b/src/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png
new file mode 100755
index 0000000..e187e2c
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/ie7/test-trans.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/img/grey-40.png b/src/usr/local/www/themes/the_wall/javascript/img/grey-40.png
new file mode 100755
index 0000000..758b716
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/img/grey-40.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif b/src/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif
new file mode 100755
index 0000000..ddcdcae
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/img/submenu-off.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif b/src/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif
new file mode 100755
index 0000000..7a58077
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/img/submenu-on.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/img/white-90.png b/src/usr/local/www/themes/the_wall/javascript/img/white-90.png
new file mode 100755
index 0000000..efc84b4
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/img/white-90.png
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/img/x.gif b/src/usr/local/www/themes/the_wall/javascript/img/x.gif
new file mode 100755
index 0000000..5bfd67a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/img/x.gif
Binary files differ
diff --git a/src/usr/local/www/themes/the_wall/javascript/niftyjsCode.js b/src/usr/local/www/themes/the_wall/javascript/niftyjsCode.js
new file mode 100644
index 0000000..e71ea14
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/niftyjsCode.js
@@ -0,0 +1,174 @@
+function NiftyCheck(){
+if(!document.getElementById || !document.createElement)
+ return(false);
+isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
+if(Array.prototype.push==null){Array.prototype.push=function(){
+ this[this.length]=arguments[0]; return(this.length);};}
+return(true);
+}
+
+function Rounded(selector,wich,bk,color,opt){
+var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
+
+if(color=="transparent"){
+ cn=cn+"x";
+ ecolor=bk;
+ bk="transparent";
+ }
+else if(opt && opt.indexOf("border")>=0){
+ var optar=opt.split(" ");
+ for(i=0;i<optar.length;i++)
+ if(optar[i].indexOf("#")>=0) ecolor=optar[i];
+ if(ecolor=="") ecolor="#666";
+ cn+="e";
+ edges=true;
+ }
+else if(opt && opt.indexOf("smooth")>=0){
+ cn+="a";
+ ecolor=Mix(bk,color);
+ }
+if(opt && opt.indexOf("small")>=0) cn+="s";
+prefixt=cn;
+prefixb=cn;
+if(wich.indexOf("all")>=0){t=true;b=true;}
+else if(wich.indexOf("top")>=0) t="true";
+else if(wich.indexOf("tl")>=0){
+ t="true";
+ if(wich.indexOf("tr")<0) prefixt+="l";
+ }
+else if(wich.indexOf("tr")>=0){
+ t="true";
+ prefixt+="r";
+ }
+if(wich.indexOf("bottom")>=0) b=true;
+else if(wich.indexOf("bl")>=0){
+ b="true";
+ if(wich.indexOf("br")<0) prefixb+="l";
+ }
+else if(wich.indexOf("br")>=0){
+ b="true";
+ prefixb+="r";
+ }
+var v=getElementsBySelector(selector);
+var l=v.length;
+for(i=0;i<l;i++){
+ if(edges) AddBorder(v[i],ecolor);
+ if(t) AddTop(v[i],bk,color,ecolor,prefixt);
+ if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
+ }
+}
+
+function AddBorder(el,bc){
+var i;
+if(!el.passed){
+ if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
+ var t=el.firstChild.nodeValue;
+ el.removeChild(el.lastChild);
+ var d=CreateEl("span");
+ d.style.display="block";
+ d.appendChild(document.createTextNode(t));
+ el.appendChild(d);
+ }
+ for(i=0;i<el.childNodes.length;i++){
+ if(el.childNodes[i].nodeType==1){
+ el.childNodes[i].style.borderLeft="1px solid "+bc;
+ el.childNodes[i].style.borderRight="1px solid "+bc;
+ }
+ }
+ }
+el.passed=true;
+}
+
+function AddTop(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=1;i<=lim;i++){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingTop=0;
+el.insertBefore(d,el.firstChild);
+}
+
+function AddBottom(el,bk,color,bc,cn){
+var i,lim=4,d=CreateEl("b");
+
+if(cn.indexOf("s")>=0) lim=2;
+if(bc) d.className="artop";
+else d.className="rtop";
+d.style.backgroundColor=bk;
+for(i=lim;i>0;i--){
+ var x=CreateEl("b");
+ x.className=cn + i;
+ x.style.backgroundColor=color;
+ if(bc) x.style.borderColor=bc;
+ d.appendChild(x);
+ }
+el.style.paddingBottom=0;
+el.appendChild(d);
+}
+
+function CreateEl(x){
+if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
+else return(document.createElement(x));
+}
+
+function getElementsBySelector(selector){
+var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
+
+if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
+ s=selector.split(" ");
+ var fs=s[0].split("#");
+ if(fs.length==1) return(objlist);
+ f=document.getElementById(fs[1]);
+ if(f) return(f.getElementsByTagName(s[1]));
+ return(objlist);
+ }
+if(selector.indexOf("#")>0){ //id selector like "tag#id"
+ s=selector.split("#");
+ tag=s[0];
+ selid=s[1];
+ }
+if(selid!=""){
+ f=document.getElementById(selid);
+ if(f) objlist.push(f);
+ return(objlist);
+ }
+if(selector.indexOf(".")>0){ //class selector like "tag.class"
+ s=selector.split(".");
+ tag=s[0];
+ selclass=s[1];
+ }
+var v=document.getElementsByTagName(tag); // tag selector like "tag"
+if(selclass=="")
+ return(v);
+for(i=0;i<v.length;i++){
+ if(v[i].className.indexOf(selclass)>=0){
+ objlist.push(v[i]);
+ }
+ }
+return(objlist);
+}
+
+function Mix(c1,c2){
+var i,step1,step2,x,y,r=new Array(3);
+if(c1.length==4)step1=1;
+else step1=2;
+if(c2.length==4) step2=1;
+else step2=2;
+for(i=0;i<3;i++){
+ x=parseInt(c1.substr(1+step1*i,step1),16);
+ if(step1==1) x=16*x+x;
+ y=parseInt(c2.substr(1+step2*i,step2),16);
+ if(step2==1) y=16*y+y;
+ r[i]=Math.floor((x*50+y*50)/100);
+ }
+return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/javascript/transmenu-body.php b/src/usr/local/www/themes/the_wall/javascript/transmenu-body.php
new file mode 100644
index 0000000..eea9235
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/transmenu-body.php
@@ -0,0 +1,51 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-body.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetBodyJS() {
+ global $rootmenu;
+
+ if (isset($rootmenu)) {
+ return $rootmenu->getMenuJScript();
+ } else if (empty($rootmenu)) {
+ return "alert('No rootmenu object found.');";
+ } else {
+ return "alert('No JavaScript attached to rootmenu object.');";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/the_wall/javascript/transmenu-head.php b/src/usr/local/www/themes/the_wall/javascript/transmenu-head.php
new file mode 100644
index 0000000..66e1952
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/transmenu-head.php
@@ -0,0 +1,85 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ transmenu-head.php
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+function nervecenterTransmenuGetHeadJS() {
+ global $g, $rootmenu;
+
+ $transmenu_stub =<<<EOD
+ function tmenuinit() {
+ //==========================================================================================
+ // if supported, initialize TransMenus
+ //==========================================================================================
+ // Check isSupported() so that menus aren't accidentally sent to non-supporting browsers.
+ // This is better than server-side checking because it will also catch browsers which would
+ // normally support the menus but have javascript disabled.
+ //
+ // If supported, call initialize() and then hook whatever image rollover code you need to do
+ // to the .onactivate and .ondeactivate events for each menu.
+ //==========================================================================================
+ if (TransMenu.isSupported()) {
+ TransMenu.initialize();
+
+ // hook all the highlight swapping of the main toolbar to menu activation/deactivation
+ // instead of simple rollover to get the effect where the button stays hightlit until
+ // the menu is closed.
+ @@CHILD_JSCRIPT@@
+ }
+ } // end function
+EOD;
+
+ if (empty($rootmenu)) {
+ require_once("menudef.inc");
+ }
+
+ $childJScript = "";
+ foreach ($rootmenu->getChildren() as $component) {
+ $id = "mnua_" . str_replace(" ", "", strtolower($component->getID()));
+
+ $childJScript .=<<<EOD
+ {$id}.onactivate = function() { document.getElementById("{$id}").className = "hover"; };
+ {$id}.ondeactivate = function() { document.getElementById("{$id}").className = ""; };
+
+EOD;
+ }
+
+ $transmenu_stub = basename($_SERVER['PHP_SELF']) != "wizard.php" ? str_replace("@@CHILD_JSCRIPT@@", $childJScript, $transmenu_stub) : "";
+
+ return $transmenu_stub;
+}
+
+?>
diff --git a/src/usr/local/www/themes/the_wall/javascript/transmenu.org b/src/usr/local/www/themes/the_wall/javascript/transmenu.org
new file mode 100644
index 0000000..6c9e353
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/transmenu.org
@@ -0,0 +1,785 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ *
+ * Customizable multi-level animated DHTML menus with transparency.
+ *
+ * Copyright 2003-2004, Aaron Boodman (www.youngpup.net)
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * =================================================================================================
+ * updates:
+ * 04.19.04 fixed cascade problem with menus nested greater than two levels.
+ * 12.23.03 added hideCurrent for menu actuators with no menus. renamed to TransMenu.
+ * 04.18.03 fixed render bug in IE 5.0 Mac by removing that browser from compatibility table ;)
+ * also made gecko check a little more strict by specifying build no.
+ * ============================================================================================== */
+
+
+
+//==================================================================================================
+// Configuration properties
+//==================================================================================================
+TransMenu.spacerGif = "themes/nervecenter/javascript/img/x.gif"; // path to a transparent spacer gif
+TransMenu.dingbatOn = "themes/nervecenter/javascript/img/submenu-on.gif"; // path to the active sub menu dingbat
+TransMenu.dingbatOff = "themes/nervecenter/javascript/img/submenu-off.gif"; // path to the inactive sub menu dingbat
+TransMenu.dingbatSize = 14; // size of the dingbat (square shape assumed)
+TransMenu.menuPadding = 5; // padding between menu border and items grid
+TransMenu.itemPadding = 3; // additional padding around each item
+TransMenu.shadowSize = 2; // size of shadow under menu
+TransMenu.shadowOffset = 3; // distance shadow should be offset from leading edge
+TransMenu.shadowColor = "#FF0000"; // color of shadow (transparency is set in CSS)
+TransMenu.shadowPng = "themes/nervecenter/javascript/img/grey-40.png"; // a PNG graphic to serve as the shadow for mac IE5
+TransMenu.backgroundColor = "#990000"; // color of the background (transparency set in CSS)
+TransMenu.backgroundPng = "themes/nervecenter/javascript/img/white-90.png"; // a PNG graphic to server as the background for mac IE5
+TransMenu.hideDelay = 1000; // number of milliseconds to wait before hiding a menu
+TransMenu.slideTime = 400; // number of milliseconds it takes to open and close a menu
+
+
+//==================================================================================================
+// Internal use properties
+//==================================================================================================
+TransMenu.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
+TransMenu.direction = {down:1,right:2};
+TransMenu.registry = [];
+TransMenu._maxZ = 100;
+
+
+
+//==================================================================================================
+// Static methods
+//==================================================================================================
+// supporting win ie5+, mac ie5.1+ and gecko >= mozilla 1.0
+TransMenu.isSupported = function() {
+ var ua = navigator.userAgent.toLowerCase();
+ var pf = navigator.platform.toLowerCase();
+ var an = navigator.appName;
+ var r = false;
+
+ if (ua.indexOf("gecko") > -1 && navigator.productSub >= 20020605) r = true; // gecko >= moz 1.0
+ else if (an == "Microsoft Internet Explorer") {
+ if (document.getElementById) { // ie5.1+ mac,win
+ if (pf.indexOf("mac") == 0) {
+ r = /msie (\d(.\d*)?)/.test(ua) && Number(RegExp.$1) >= 5.1;
+ }
+ else r = true;
+ }
+ }
+
+ return r;
+}
+
+// call this in onload once menus have been created
+TransMenu.initialize = function() {
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ menu.initialize();
+ }
+}
+
+// call this in document body to write out menu html
+TransMenu.renderAll = function() {
+ var aMenuHtml = [];
+ for (var i = 0, menu = null; menu = this.registry[i]; i++) {
+ aMenuHtml[i] = menu.toString();
+ }
+ document.write(aMenuHtml.join(""));
+}
+
+//==================================================================================================
+// TransMenu constructor (only called internally)
+//==================================================================================================
+// oActuator : The thing that causes the menu to be shown when it is mousedover. Either a
+// reference to an HTML element, or a TransMenuItem from an existing menu.
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menu from actuator
+// iTop : Top pixel offset of menu from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+// parentMenuSet : Menuset this menu will be added to.
+//==================================================================================================
+function TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
+ // public methods
+ this.addItem = addItem;
+ this.addMenu = addMenu;
+ this.toString = toString;
+ this.initialize = initialize;
+ this.isOpen = false;
+ this.show = show;
+ this.hide = hide;
+ this.items = [];
+
+ // events
+ this.onactivate = new Function(); // when the menu starts to slide open
+ this.ondeactivate = new Function(); // when the menu finishes sliding closed
+ this.onmouseover = new Function(); // when the menu has been moused over
+ this.onqueue = new Function(); // hack .. when the menu sets a timer to be closed a little while in the future
+ this.ondequeue = new Function();
+
+ // initialization
+ this.index = TransMenu.registry.length;
+ TransMenu.registry[this.index] = this;
+
+ var id = "TransMenu" + this.index;
+ var contentHeight = null;
+ var contentWidth = null;
+ var childMenuSet = null;
+ var animating = false;
+ var childMenus = [];
+ var slideAccel = -1;
+ var elmCache = null;
+ var ready = false;
+ var _this = this;
+ var a = null;
+
+ var pos = iDirection == TransMenu.direction.down ? "top" : "left";
+ var dim = null;
+
+ // private and public method implimentations
+ function addItem(sText, sUrl) {
+ var item = new TransMenuItem(sText, sUrl, this);
+ item._index = this.items.length;
+ this.items[item._index] = item;
+ }
+
+ function addMenu(oMenuItem) {
+ if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
+
+ if (childMenuSet == null) childMenuSet = new TransMenuSet(TransMenu.direction.right, -5, 2, TransMenu.reference.topRight);
+
+ var m = childMenuSet.addMenu(oMenuItem);
+
+ childMenus[oMenuItem._index] = m;
+ m.onmouseover = child_mouseover;
+ m.ondeactivate = child_deactivate;
+ m.onqueue = child_queue;
+ m.ondequeue = child_dequeue;
+
+ return m;
+ }
+
+ function initialize() {
+ initCache();
+ initEvents();
+ initSize();
+ ready = true;
+ }
+
+ function show() {
+ //dbg_dump("show");
+ if (ready) {
+ _this.isOpen = true;
+ animating = true;
+ setContainerPos();
+ elmCache["clip"].style.visibility = "visible";
+ elmCache["clip"].style.zIndex = TransMenu._maxZ++;
+ //dbg_dump("maxZ: " + TransMenu._maxZ);
+ slideStart();
+ _this.onactivate();
+ }
+ }
+
+ function hide() {
+ if (ready) {
+ _this.isOpen = false;
+ animating = true;
+
+ for (var i = 0, item = null; item = elmCache.item[i]; i++)
+ dehighlight(item);
+
+ if (childMenuSet) childMenuSet.hide();
+
+ slideStart();
+ _this.ondeactivate();
+ }
+ }
+
+ function setContainerPos() {
+ var sub = oActuator.constructor == TransMenuItem;
+ var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
+ var el = act;
+
+ var x = 0;
+ var y = 0;
+
+
+ var minX = 0;
+ var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
+ var minY = 0;
+ var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
+
+ // add up all offsets... subtract any scroll offset
+ while (sub ? el.parentNode.className.indexOf("transMenu") == -1 : el.offsetParent) {
+ x += el.offsetLeft;
+ y += el.offsetTop;
+
+ if (el.scrollLeft) x -= el.scrollLeft;
+ if (el.scrollTop) y -= el.scrollTop;
+
+ el = el.offsetParent;
+ }
+
+ if (oActuator.constructor == TransMenuItem) {
+ x += parseInt(el.parentNode.style.left);
+ y += parseInt(el.parentNode.style.top);
+ }
+
+ switch (iReferencePoint) {
+ case TransMenu.reference.topLeft:
+ break;
+ case TransMenu.reference.topRight:
+ x += act.offsetWidth;
+ break;
+ case TransMenu.reference.bottomLeft:
+ y += act.offsetHeight;
+ break;
+ case TransMenu.reference.bottomRight:
+ x += act.offsetWidth;
+ y += act.offsetHeight;
+ break;
+ }
+
+ x += iLeft;
+ y += iTop;
+
+ x = Math.max(Math.min(x, maxX), minX);
+ y = Math.max(Math.min(y, maxY), minY);
+
+ elmCache["clip"].style.left = x + "px";
+ elmCache["clip"].style.top = y + "px";
+ }
+
+ function slideStart() {
+ var x0 = parseInt(elmCache["content"].style[pos]);
+ var x1 = _this.isOpen ? 0 : -dim;
+
+ if (a != null) a.stop();
+ a = new Accelimation(x0, x1, TransMenu.slideTime, slideAccel);
+
+ a.onframe = slideFrame;
+ a.onend = slideEnd;
+
+ a.start();
+ }
+
+ function slideFrame(x) {
+ elmCache["content"].style[pos] = x + "px";
+ }
+
+ function slideEnd() {
+ if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
+ animating = false;
+ }
+
+ function initSize() {
+ // everything is based off the size of the items table...
+ var ow = elmCache["items"].offsetWidth;
+ var oh = elmCache["items"].offsetHeight;
+ var ua = navigator.userAgent.toLowerCase();
+
+ // clipping container should be ow/oh + the size of the shadow
+ elmCache["clip"].style.width = ow + TransMenu.shadowSize + 2 + "px";
+ elmCache["clip"].style.height = oh + TransMenu.shadowSize + 2 + "px";
+
+ // same with content...
+ elmCache["content"].style.width = ow + TransMenu.shadowSize + "px";
+ elmCache["content"].style.height = oh + TransMenu.shadowSize + "px";
+
+ contentHeight = oh + TransMenu.shadowSize;
+ contentWidth = ow + TransMenu.shadowSize;
+
+ dim = iDirection == TransMenu.direction.down ? contentHeight : contentWidth;
+
+ // set initially closed
+ elmCache["content"].style[pos] = -dim - TransMenu.shadowSize + "px";
+ elmCache["clip"].style.visibility = "hidden";
+
+ // if *not* mac/ie 5
+ if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
+ // set background div to offset size
+ elmCache["background"].style.width = ow + "px";
+ elmCache["background"].style.height = oh + "px";
+ elmCache["background"].style.backgroundColor = TransMenu.backgroundColor;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].style.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize) + "px";
+ elmCache["shadowRight"].style.backgroundColor = TransMenu.shadowColor;
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].style.width = ow - TransMenu.shadowOffset + "px";
+ elmCache["shadowBottom"].style.backgroundColor = TransMenu.shadowColor;
+ }
+ // mac ie is a little different because we use a PNG for the transparency
+ else {
+ // set background div to offset size
+ elmCache["background"].firstChild.src = TransMenu.backgroundPng;
+ elmCache["background"].firstChild.width = ow;
+ elmCache["background"].firstChild.height = oh;
+
+ // shadow left starts at offset left and is offsetHeight pixels high
+ elmCache["shadowRight"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowRight"].style.left = ow + "px";
+ elmCache["shadowRight"].firstChild.width = TransMenu.shadowSize;
+ elmCache["shadowRight"].firstChild.height = oh - (TransMenu.shadowOffset - TransMenu.shadowSize);
+
+ // shadow bottom starts at offset height and is offsetWidth - shadowOffset
+ // pixels wide (we don't want the bottom and right shadows to overlap or we
+ // get an extra bright bottom-right corner)
+ elmCache["shadowBottom"].firstChild.src = TransMenu.shadowPng;
+ elmCache["shadowBottom"].style.top = oh + "px";
+ elmCache["shadowBottom"].firstChild.height = TransMenu.shadowSize;
+ elmCache["shadowBottom"].firstChild.width = ow - TransMenu.shadowOffset;
+ }
+ }
+
+ function initCache() {
+ var menu = document.getElementById(id);
+ var all = menu.all ? menu.all : menu.getElementsByTagName("*"); // IE/win doesn't support * syntax, but does have the document.all thing
+
+ elmCache = {};
+ elmCache["clip"] = menu;
+ elmCache["item"] = [];
+
+ for (var i = 0, elm = null; elm = all[i]; i++) {
+ switch (elm.className) {
+ case "items":
+ case "content":
+ case "background":
+ case "shadowRight":
+ case "shadowBottom":
+ elmCache[elm.className] = elm;
+ break;
+ case "item":
+ elm._index = elmCache["item"].length;
+ elmCache["item"][elm._index] = elm;
+ break;
+ }
+ }
+
+ // hack!
+ _this.elmCache = elmCache;
+ }
+
+ function initEvents() {
+ // hook item mouseover
+ for (var i = 0, item = null; item = elmCache.item[i]; i++) {
+ item.onmouseover = item_mouseover;
+ item.onmouseout = item_mouseout;
+ item.onclick = item_click;
+ }
+
+ // hook actuation
+ if (typeof oActuator.tagName != "undefined") {
+ oActuator.onmouseover = actuator_mouseover;
+ oActuator.onmouseout = actuator_mouseout;
+ }
+
+ // hook menu mouseover
+ elmCache["content"].onmouseover = content_mouseover;
+ elmCache["content"].onmouseout = content_mouseout;
+ }
+
+ function highlight(oRow) {
+ oRow.className = "item hover";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOn;
+ }
+
+ function dehighlight(oRow) {
+ oRow.className = "item";
+ if (childMenus[oRow._index])
+ oRow.lastChild.firstChild.src = TransMenu.dingbatOff;
+ }
+
+ function item_mouseover() {
+ if (!animating) {
+ highlight(this);
+
+ if (childMenus[this._index])
+ childMenuSet.showMenu(childMenus[this._index]);
+ else if (childMenuSet) childMenuSet.hide();
+ }
+ }
+
+ function item_mouseout() {
+ if (!animating) {
+ if (childMenus[this._index])
+ childMenuSet.hideMenu(childMenus[this._index]);
+ else // otherwise child_deactivate will do this
+ dehighlight(this);
+ }
+ }
+
+ function item_click() {
+ if (!animating) {
+ if (_this.items[this._index].url)
+ location.href = _this.items[this._index].url;
+ }
+ }
+
+ function actuator_mouseover() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function actuator_mouseout() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function content_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ _this.onmouseover();
+ }
+ }
+
+ function content_mouseout() {
+ if (!animating) {
+ parentMenuSet.hideMenu(_this);
+ }
+ }
+
+ function child_mouseover() {
+ if (!animating) {
+ parentMenuSet.showMenu(_this);
+ }
+ }
+
+ function child_deactivate() {
+ for (var i = 0; i < childMenus.length; i++) {
+ if (childMenus[i] == this) {
+ dehighlight(elmCache["item"][i]);
+ break;
+ }
+ }
+ }
+
+ function child_queue() {
+ parentMenuSet.hideMenu(_this);
+ }
+
+ function child_dequeue() {
+ parentMenuSet.showMenu(_this);
+ }
+
+ function toString() {
+ var aHtml = [];
+ var sClassName = "transMenu" + (oActuator.constructor != TransMenuItem ? " top" : "");
+
+ for (var i = 0, item = null; item = this.items[i]; i++) {
+ aHtml[i] = item.toString(childMenus[i]);
+ }
+
+ return '<div id="' + id + '" class="' + sClassName + '">' +
+ '<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">' +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr>' +
+ aHtml.join('') +
+ '<tr><td colspan="2"><img src="' + TransMenu.spacerGif + '" width="1" height="' + TransMenu.menuPadding + '"></td></tr></table>' +
+ '<div class="shadowBottom"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="shadowRight"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '<div class="background"><img src="' + TransMenu.spacerGif + '" width="1" height="1"></div>' +
+ '</div></div>';
+ }
+}
+
+
+//==================================================================================================
+// TransMenuSet
+//==================================================================================================
+// iDirection : The direction to slide out. One of TransMenu.direction.
+// iLeft : Left pixel offset of menus from actuator
+// iTop : Top pixel offset of menus from actuator
+// iReferencePoint : Corner of actuator to measure from. One of TransMenu.referencePoint.
+//==================================================================================================
+TransMenuSet.registry = [];
+
+function TransMenuSet(iDirection, iLeft, iTop, iReferencePoint) {
+ // public methods
+ this.addMenu = addMenu;
+ this.showMenu = showMenu;
+ this.hideMenu = hideMenu;
+ this.hide = hide;
+ this.hideCurrent = hideCurrent;
+
+ // initialization
+ var menus = [];
+ var _this = this;
+ var current = null;
+
+ this.index = TransMenuSet.registry.length;
+ TransMenuSet.registry[this.index] = this;
+
+ // method implimentations...
+ function addMenu(oActuator) {
+ var m = new TransMenu(oActuator, iDirection, iLeft, iTop, iReferencePoint, this);
+ menus[menus.length] = m;
+ return m;
+ }
+
+ function showMenu(oMenu) {
+ if (oMenu != current) {
+ // close currently open menu
+ if (current != null) hide(current);
+
+ // set current menu to this one
+ current = oMenu;
+
+ // if this menu is closed, open it
+ oMenu.show();
+ }
+ else {
+ // hide pending calls to close this menu
+ cancelHide(oMenu);
+ }
+ }
+
+ function hideMenu(oMenu) {
+ //dbg_dump("hideMenu a " + oMenu.index);
+ if (current == oMenu && oMenu.isOpen) {
+ //dbg_dump("hideMenu b " + oMenu.index);
+ if (!oMenu.hideTimer) scheduleHide(oMenu);
+ }
+ }
+
+ function scheduleHide(oMenu) {
+ //dbg_dump("scheduleHide " + oMenu.index);
+ oMenu.onqueue();
+ oMenu.hideTimer = window.setTimeout("TransMenuSet.registry[" + _this.index + "].hide(TransMenu.registry[" + oMenu.index + "])", TransMenu.hideDelay);
+ }
+
+ function cancelHide(oMenu) {
+ //dbg_dump("cancelHide " + oMenu.index);
+ if (oMenu.hideTimer) {
+ oMenu.ondequeue();
+ window.clearTimeout(oMenu.hideTimer);
+ oMenu.hideTimer = null;
+ }
+ }
+
+ function hide(oMenu) {
+ if (!oMenu && current) oMenu = current;
+
+ if (oMenu && current == oMenu && oMenu.isOpen) {
+ hideCurrent();
+ }
+ }
+
+ function hideCurrent() {
+ if (null != current) {
+ cancelHide(current);
+ current.hideTimer = null;
+ current.hide();
+ current = null;
+ }
+ }
+}
+
+//==================================================================================================
+// TransMenuItem (internal)
+// represents an item in a dropdown
+//==================================================================================================
+// sText : The item display text
+// sUrl : URL to load when the item is clicked
+// oParent : Menu this item is a part of
+//==================================================================================================
+function TransMenuItem(sText, sUrl, oParent) {
+ this.toString = toString;
+ this.text = sText;
+ this.url = sUrl;
+ this.parentMenu = oParent;
+
+ function toString(bDingbat) {
+ var sDingbat = bDingbat ? TransMenu.dingbatOff : TransMenu.spacerGif;
+ var iEdgePadding = TransMenu.itemPadding + TransMenu.menuPadding;
+ var sPaddingLeft = "padding:" + TransMenu.itemPadding + "px; padding-left:" + iEdgePadding + "px;"
+ var sPaddingRight = "padding:" + TransMenu.itemPadding + "px; padding-right:" + iEdgePadding + "px;"
+
+ return '<tr class="item"><td nowrap style="' + sPaddingLeft + '">' +
+ sText + '</td><td width="14" style="' + sPaddingRight + '">' +
+ '<img src="' + sDingbat + '" width="14" height="14"></td></tr>';
+ }
+}
+
+
+
+
+
+
+//=====================================================================
+// Accel[erated] [an]imation object
+// change a property of an object over time in an accelerated fashion
+//=====================================================================
+// obj : reference to the object whose property you'd like to animate
+// prop : property you would like to change eg: "left"
+// to : final value of prop
+// time : time the animation should take to run
+// zip : optional. specify the zippiness of the acceleration. pick a
+// number between -1 and 1 where -1 is full decelerated, 1 is
+// full accelerated, and 0 is linear (no acceleration). default
+// is 0.
+// unit : optional. specify the units for use with prop. default is
+// "px".
+//=====================================================================
+// bezier functions lifted from the lib_animation.js file in the
+// 13th Parallel API. www.13thparallel.org
+//=====================================================================
+
+function Accelimation(from, to, time, zip) {
+ if (typeof zip == "undefined") zip = 0;
+ if (typeof unit == "undefined") unit = "px";
+
+ this.x0 = from;
+ this.x1 = to;
+ this.dt = time;
+ this.zip = -zip;
+ this.unit = unit;
+ this.timer = null;
+ this.onend = new Function();
+ this.onframe = new Function();
+}
+
+
+
+//=====================================================================
+// public methods
+//=====================================================================
+
+// after you create an accelimation, you call this to start it-a runnin'
+Accelimation.prototype.start = function() {
+ this.t0 = new Date().getTime();
+ this.t1 = this.t0 + this.dt;
+ var dx = this.x1 - this.x0;
+ this.c1 = this.x0 + ((1 + this.zip) * dx / 3);
+ this.c2 = this.x0 + ((2 + this.zip) * dx / 3);
+ Accelimation._add(this);
+}
+
+// and if you need to stop it early for some reason...
+Accelimation.prototype.stop = function() {
+ Accelimation._remove(this);
+}
+
+
+
+//=====================================================================
+// private methods
+//=====================================================================
+
+// paints one frame. gets called by Accelimation._paintAll.
+Accelimation.prototype._paint = function(time) {
+ if (time < this.t1) {
+ var elapsed = time - this.t0;
+ this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));
+ }
+ else this._end();
+}
+
+// ends the animation
+Accelimation.prototype._end = function() {
+ Accelimation._remove(this);
+ this.onframe(this.x1);
+ this.onend();
+}
+
+
+
+
+//=====================================================================
+// static methods (all private)
+//=====================================================================
+
+// add a function to the list of ones to call periodically
+Accelimation._add = function(o) {
+ var index = this.instances.length;
+ this.instances[index] = o;
+ // if this is the first one, start the engine
+ if (this.instances.length == 1) {
+ this.timerID = window.setInterval("Accelimation._paintAll()", this.targetRes);
+ }
+}
+
+// remove a function from the list
+Accelimation._remove = function(o) {
+ for (var i = 0; i < this.instances.length; i++) {
+ if (o == this.instances[i]) {
+ this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
+ break;
+ }
+ }
+ // if that was the last one, stop the engine
+ if (this.instances.length == 0) {
+ window.clearInterval(this.timerID);
+ this.timerID = null;
+ }
+}
+
+// "engine" - call each function in the list every so often
+Accelimation._paintAll = function() {
+ var now = new Date().getTime();
+ for (var i = 0; i < this.instances.length; i++) {
+ this.instances[i]._paint(now);
+ }
+}
+
+
+// Bezier functions:
+Accelimation._B1 = function(t) { return t*t*t }
+Accelimation._B2 = function(t) { return 3*t*t*(1-t) }
+Accelimation._B3 = function(t) { return 3*t*(1-t)*(1-t) }
+Accelimation._B4 = function(t) { return (1-t)*(1-t)*(1-t) }
+
+
+//Finds the coordinates of a point at a certain stage through a bezier curve
+Accelimation._getBezier = function(percent,startPos,endPos,control1,control2) {
+ return endPos * this._B1(percent) + control2 * this._B2(percent) + control1 * this._B3(percent) + startPos * this._B4(percent);
+}
+
+
+//=====================================================================
+// static properties
+//=====================================================================
+
+Accelimation.instances = [];
+Accelimation.targetRes = 10;
+Accelimation.timerID = null;
+
+
+//=====================================================================
+// IE win memory cleanup
+//=====================================================================
+
+if (window.attachEvent) {
+ var cearElementProps = [
+ 'data',
+ 'onmouseover',
+ 'onmouseout',
+ 'onmousedown',
+ 'onmouseup',
+ 'ondblclick',
+ 'onclick',
+ 'onselectstart',
+ 'oncontextmenu'
+ ];
+
+ window.attachEvent("onunload", function() {
+ var el;
+ for(var d = document.all.length;d--;){
+ el = document.all[d];
+ for(var c = cearElementProps.length;c--;){
+ el[cearElementProps[c]] = null;
+ }
+ }
+ });
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/javascript/transmenuC.js b/src/usr/local/www/themes/the_wall/javascript/transmenuC.js
new file mode 100644
index 0000000..88626c7
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/javascript/transmenuC.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * TransMenu
+ * March, 2003
+ * Customizable multi-level animated DHTML menus with transparency.
+ * =================================================================================================
+ * "Can I use this?"
+ *
+ * Use of this library is governed by the Creative Commons Attribution 2.0 License. You can check it
+ * out at: http://creativecommons.org/licenses/by/2.0/
+ *
+ * Basically: You may copy, distribute, and eat this code as you wish. But you must give me credit
+ * for writing it. You may not misrepresent yourself as the author of this code.
+ * =================================================================================================
+ * "It's kinda hard to read, though"
+ *
+ * The uncompressed, commented version of this script can be found at:
+ * http://youngpup.net/projects/transMenus
+ * ============================================================================================== */
+TransMenu.spacerGif="themes/nervecenter/javascript/img/x.gif";TransMenu.dingbatOn="themes/nervecenter/javascript/img/submenu-on.gif";TransMenu.dingbatOff="themes/nervecenter/javascript/img/submenu-off.gif";TransMenu.dingbatSize=14;TransMenu.menuPadding=5;TransMenu.itemPadding=3;TransMenu.shadowSize=2;TransMenu.shadowOffset=3;TransMenu.shadowColor="#000000";TransMenu.shadowPng="themes/nervecenter/javascript/img/grey-40.png";TransMenu.backgroundColor="#990000";TransMenu.backgroundPng="themes/nervecenter/javascript/img/white-90.png";TransMenu.hideDelay=1000;TransMenu.slideTime=400;TransMenu.reference={topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};TransMenu.direction={down:1,right:2};TransMenu.registry=[];TransMenu._maxZ=100;TransMenu.isSupported=function(){var ua=navigator.userAgent.toLowerCase();var pf=navigator.platform.toLowerCase();var an=navigator.appName;var r=false;if(ua.indexOf("gecko")>-1&&navigator.productSub>=20020605)r=true;else if(an=="Microsoft Internet Explorer"){if(document.getElementById){if(pf.indexOf("mac")==0){r=/msie (\d(.\d*)?)/.test(ua)&&Number(RegExp.$1)>=5.1;}
+else r=true;}}
+return r;}
+TransMenu.initialize=function(){for(var i=0,menu=null;menu=this.registry[i];i++){menu.initialize();}}
+TransMenu.renderAll=function(){var aMenuHtml=[];for(var i=0,menu=null;menu=this.registry[i];i++){aMenuHtml[i]=menu.toString();}
+document.write(aMenuHtml.join(""));}
+function TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,parentMenuSet){this.addItem=addItem;this.addMenu=addMenu;this.toString=toString;this.initialize=initialize;this.isOpen=false;this.show=show;this.hide=hide;this.items=[];this.onactivate=new Function();this.ondeactivate=new Function();this.onmouseover=new Function();this.onqueue=new Function();this.ondequeue=new Function();this.index=TransMenu.registry.length;TransMenu.registry[this.index]=this;var id="TransMenu"+this.index;var contentHeight=null;var contentWidth=null;var childMenuSet=null;var animating=false;var childMenus=[];var slideAccel=-1;var elmCache=null;var ready=false;var _this=this;var a=null;var pos=iDirection==TransMenu.direction.down?"top":"left";var dim=null;function addItem(sText,sUrl){var item=new TransMenuItem(sText,sUrl,this);item._index=this.items.length;this.items[item._index]=item;}
+function addMenu(oMenuItem){if(!oMenuItem.parentMenu==this)throw new Error("Cannot add a menu here");if(childMenuSet==null)childMenuSet=new TransMenuSet(TransMenu.direction.right,-5,2,TransMenu.reference.topRight);var m=childMenuSet.addMenu(oMenuItem);childMenus[oMenuItem._index]=m;m.onmouseover=child_mouseover;m.ondeactivate=child_deactivate;m.onqueue=child_queue;m.ondequeue=child_dequeue;return m;}
+function initialize(){initCache();initEvents();initSize();ready=true;}
+function show(){if(ready){_this.isOpen=true;animating=true;setContainerPos();elmCache["clip"].style.visibility="visible";elmCache["clip"].style.zIndex=TransMenu._maxZ++;slideStart();_this.onactivate();}}
+function hide(){if(ready){_this.isOpen=false;animating=true;for(var i=0,item=null;item=elmCache.item[i];i++)dehighlight(item);if(childMenuSet)childMenuSet.hide();slideStart();_this.ondeactivate();}}
+function setContainerPos(){var sub=oActuator.constructor==TransMenuItem;var act=sub?oActuator.parentMenu.elmCache["item"][oActuator._index]:oActuator;var el=act;var x=0;var y=0;var minX=0;var maxX=(window.innerWidth?window.innerWidth:document.body.clientWidth)-parseInt(elmCache["clip"].style.width);var minY=0;var maxY=(window.innerHeight?window.innerHeight:document.body.clientHeight)-parseInt(elmCache["clip"].style.height);while(sub?el.parentNode.className.indexOf("transMenu")==-1:el.offsetParent){x+=el.offsetLeft;y+=el.offsetTop;if(el.scrollLeft)x-=el.scrollLeft;if(el.scrollTop)y-=el.scrollTop;el=el.offsetParent;}
+if(oActuator.constructor==TransMenuItem){x+=parseInt(el.parentNode.style.left);y+=parseInt(el.parentNode.style.top);}
+switch(iReferencePoint){case TransMenu.reference.topLeft:break;case TransMenu.reference.topRight:x+=act.offsetWidth;break;case TransMenu.reference.bottomLeft:y+=act.offsetHeight;break;case TransMenu.reference.bottomRight:x+=act.offsetWidth;y+=act.offsetHeight;break;}
+x+=iLeft;y+=iTop;x=Math.max(Math.min(x,maxX),minX);y=Math.max(Math.min(y,maxY),minY);elmCache["clip"].style.left=x+"px";elmCache["clip"].style.top=y+"px";}
+function slideStart(){var x0=parseInt(elmCache["content"].style[pos]);var x1=_this.isOpen?0:-dim;if(a!=null)a.stop();a=new Accelimation(x0,x1,TransMenu.slideTime,slideAccel);a.onframe=slideFrame;a.onend=slideEnd;a.start();}
+function slideFrame(x){elmCache["content"].style[pos]=x+"px";}
+function slideEnd(){if(!_this.isOpen)elmCache["clip"].style.visibility="hidden";animating=false;}
+function initSize(){var ow=elmCache["items"].offsetWidth;var oh=elmCache["items"].offsetHeight;var ua=navigator.userAgent.toLowerCase();elmCache["clip"].style.width=ow+TransMenu.shadowSize+2+"px";elmCache["clip"].style.height=oh+TransMenu.shadowSize+2+"px";elmCache["content"].style.width=ow+TransMenu.shadowSize+"px";elmCache["content"].style.height=oh+TransMenu.shadowSize+"px";contentHeight=oh+TransMenu.shadowSize;contentWidth=ow+TransMenu.shadowSize;dim=iDirection==TransMenu.direction.down?contentHeight:contentWidth;elmCache["content"].style[pos]=-dim-TransMenu.shadowSize+"px";elmCache["clip"].style.visibility="hidden";if(ua.indexOf("mac")==-1||ua.indexOf("gecko")>-1){elmCache["background"].style.width=ow+"px";elmCache["background"].style.height=oh+"px";elmCache["background"].style.backgroundColor=TransMenu.backgroundColor;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].style.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize)+"px";elmCache["shadowRight"].style.backgroundColor=TransMenu.shadowColor;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].style.width=ow-TransMenu.shadowOffset+"px";elmCache["shadowBottom"].style.backgroundColor=TransMenu.shadowColor;}
+else{elmCache["background"].firstChild.src=TransMenu.backgroundPng;elmCache["background"].firstChild.width=ow;elmCache["background"].firstChild.height=oh;elmCache["shadowRight"].firstChild.src=TransMenu.shadowPng;elmCache["shadowRight"].style.left=ow+"px";elmCache["shadowRight"].firstChild.width=TransMenu.shadowSize;elmCache["shadowRight"].firstChild.height=oh-(TransMenu.shadowOffset-TransMenu.shadowSize);elmCache["shadowBottom"].firstChild.src=TransMenu.shadowPng;elmCache["shadowBottom"].style.top=oh+"px";elmCache["shadowBottom"].firstChild.height=TransMenu.shadowSize;elmCache["shadowBottom"].firstChild.width=ow-TransMenu.shadowOffset;}}
+function initCache(){var menu=document.getElementById(id);var all=menu.all?menu.all:menu.getElementsByTagName("*");elmCache={};elmCache["clip"]=menu;elmCache["item"]=[];for(var i=0,elm=null;elm=all[i];i++){switch(elm.className){case"items":case"content":case"background":case"shadowRight":case"shadowBottom":elmCache[elm.className]=elm;break;case"item":elm._index=elmCache["item"].length;elmCache["item"][elm._index]=elm;break;}}
+_this.elmCache=elmCache;}
+function initEvents(){for(var i=0,item=null;item=elmCache.item[i];i++){item.onmouseover=item_mouseover;item.onmouseout=item_mouseout;item.onclick=item_click;}
+if(typeof oActuator.tagName!="undefined"){oActuator.onmouseover=actuator_mouseover;oActuator.onmouseout=actuator_mouseout;}
+elmCache["content"].onmouseover=content_mouseover;elmCache["content"].onmouseout=content_mouseout;}
+function highlight(oRow){oRow.className="item hover";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOn;}
+function dehighlight(oRow){oRow.className="item";if(childMenus[oRow._index])oRow.lastChild.firstChild.src=TransMenu.dingbatOff;}
+function item_mouseover(){if(!animating){highlight(this);if(childMenus[this._index])childMenuSet.showMenu(childMenus[this._index]);else if(childMenuSet)childMenuSet.hide();}}
+function item_mouseout(){if(!animating){if(childMenus[this._index])childMenuSet.hideMenu(childMenus[this._index]);else dehighlight(this);}}
+function item_click(){if(!animating){if(_this.items[this._index].url)location.href=_this.items[this._index].url;}}
+function actuator_mouseover(){parentMenuSet.showMenu(_this);}
+function actuator_mouseout(){parentMenuSet.hideMenu(_this);}
+function content_mouseover(){if(!animating){parentMenuSet.showMenu(_this);_this.onmouseover();}}
+function content_mouseout(){if(!animating){parentMenuSet.hideMenu(_this);}}
+function child_mouseover(){if(!animating){parentMenuSet.showMenu(_this);}}
+function child_deactivate(){for(var i=0;i<childMenus.length;i++){if(childMenus[i]==this){dehighlight(elmCache["item"][i]);break;}}}
+function child_queue(){parentMenuSet.hideMenu(_this);}
+function child_dequeue(){parentMenuSet.showMenu(_this);}
+function toString(){var aHtml=[];var sClassName="transMenu"+(oActuator.constructor!=TransMenuItem?" top":"");for(var i=0,item=null;item=this.items[i];i++){aHtml[i]=item.toString(childMenus[i]);}
+return'<div id="'+id+'" class="'+sClassName+'">'+'<div class="content"><table class="items" cellpadding="0" cellspacing="0" border="0">'+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr>'+aHtml.join('')+'<tr><td colspan="2"><img src="'+TransMenu.spacerGif+'" width="1" height="'+TransMenu.menuPadding+'"></td></tr></table>'+'<div class="shadowBottom"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="shadowRight"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'<div class="background"><img src="'+TransMenu.spacerGif+'" width="1" height="1"></div>'+'</div></div>';}}
+TransMenuSet.registry=[];function TransMenuSet(iDirection,iLeft,iTop,iReferencePoint){this.addMenu=addMenu;this.showMenu=showMenu;this.hideMenu=hideMenu;this.hide=hide;this.hideCurrent=hideCurrent;var menus=[];var _this=this;var current=null;this.index=TransMenuSet.registry.length;TransMenuSet.registry[this.index]=this;function addMenu(oActuator){var m=new TransMenu(oActuator,iDirection,iLeft,iTop,iReferencePoint,this);menus[menus.length]=m;return m;}
+function showMenu(oMenu){if(oMenu!=current){if(current!=null)hide(current);current=oMenu;oMenu.show();}
+else{cancelHide(oMenu);}}
+function hideMenu(oMenu){if(current==oMenu&&oMenu.isOpen){if(!oMenu.hideTimer)scheduleHide(oMenu);}}
+function scheduleHide(oMenu){oMenu.onqueue();oMenu.hideTimer=window.setTimeout("TransMenuSet.registry["+_this.index+"].hide(TransMenu.registry["+oMenu.index+"])",TransMenu.hideDelay);}
+function cancelHide(oMenu){if(oMenu.hideTimer){oMenu.ondequeue();window.clearTimeout(oMenu.hideTimer);oMenu.hideTimer=null;}}
+function hide(oMenu){if(!oMenu&&current)oMenu=current;if(oMenu&&current==oMenu&&oMenu.isOpen){hideCurrent();}}
+function hideCurrent(){if (null != current){cancelHide(current);current.hideTimer=null;current.hide();current=null;}}}
+function TransMenuItem(sText,sUrl,oParent){this.toString=toString;this.text=sText;this.url=sUrl;this.parentMenu=oParent;function toString(bDingbat){var sDingbat=bDingbat?TransMenu.dingbatOff:TransMenu.spacerGif;var iEdgePadding=TransMenu.itemPadding+TransMenu.menuPadding;var sPaddingLeft="padding:"+TransMenu.itemPadding+"px; padding-left:"+iEdgePadding+"px;"
+var sPaddingRight="padding:"+TransMenu.itemPadding+"px; padding-right:"+iEdgePadding+"px;"
+return'<tr class="item"><td nowrap style="'+sPaddingLeft+'">'+sText+'</td><td width="14" style="'+sPaddingRight+'">'+'<img src="'+sDingbat+'" width="14" height="14"></td></tr>';}}
+function Accelimation(from,to,time,zip){if(typeof zip=="undefined")zip=0;if(typeof unit=="undefined")unit="px";this.x0=from;this.x1=to;this.dt=time;this.zip=-zip;this.unit=unit;this.timer=null;this.onend=new Function();this.onframe=new Function();}
+Accelimation.prototype.start=function(){this.t0=new Date().getTime();this.t1=this.t0+this.dt;var dx=this.x1-this.x0;this.c1=this.x0+((1+this.zip)*dx/3);this.c2=this.x0+((2+this.zip)*dx/3);Accelimation._add(this);}
+Accelimation.prototype.stop=function(){Accelimation._remove(this);}
+Accelimation.prototype._paint=function(time){if(time<this.t1){var elapsed=time-this.t0;this.onframe(Accelimation._getBezier(elapsed/this.dt,this.x0,this.x1,this.c1,this.c2));}
+else this._end();}
+Accelimation.prototype._end=function(){Accelimation._remove(this);this.onframe(this.x1);this.onend();}
+Accelimation._add=function(o){var index=this.instances.length;this.instances[index]=o;if(this.instances.length==1){this.timerID=window.setInterval("Accelimation._paintAll()",this.targetRes);}}
+Accelimation._remove=function(o){for(var i=0;i<this.instances.length;i++){if(o==this.instances[i]){this.instances=this.instances.slice(0,i).concat(this.instances.slice(i+1));break;}}
+if(this.instances.length==0){window.clearInterval(this.timerID);this.timerID=null;}}
+Accelimation._paintAll=function(){var now=new Date().getTime();for(var i=0;i<this.instances.length;i++){this.instances[i]._paint(now);}}
+Accelimation._B1=function(t){return t*t*t}
+Accelimation._B2=function(t){return 3*t*t*(1-t)}
+Accelimation._B3=function(t){return 3*t*(1-t)*(1-t)}
+Accelimation._B4=function(t){return(1-t)*(1-t)*(1-t)}
+Accelimation._getBezier=function(percent,startPos,endPos,control1,control2){return endPos*this._B1(percent)+control2*this._B2(percent)+control1*this._B3(percent)+startPos*this._B4(percent);}
+Accelimation.instances=[];Accelimation.targetRes=10;Accelimation.timerID=null;
+if(window.attachEvent){var cearElementProps=['data','onmouseover','onmouseout','onmousedown','onmouseup','ondblclick','onclick','onselectstart','oncontextmenu'];window.attachEvent("onunload", function() {var el;for(var d=document.all.length;d--;){el=document.all[d];for(var c=cearElementProps.length;c--;){el[cearElementProps[c]] = null;}}});} \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/jsevents/body.def b/src/usr/local/www/themes/the_wall/jsevents/body.def
new file mode 100644
index 0000000..501d548
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/jsevents/body.def
@@ -0,0 +1,7 @@
+# Format: <event_name>=<jsfunction_name> !<forbidden_page_0>,<forbidden_page_1>...<forbidden_page_n>
+# where: forbidden pages are those pages that should *not* use
+# the particular JavaScript function within the JS event
+# specified below.
+# $Id$
+#
+onload=tmenuinit(); !wizard.php \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/loader.js b/src/usr/local/www/themes/the_wall/loader.js
new file mode 100644
index 0000000..20ecfbb
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/loader.js
@@ -0,0 +1,30 @@
+//<![CDATA[
+
+var browser = '';
+var version = '';
+var entrance = '';
+var cond = '';
+
+// BROWSER?
+if (browser == '') {
+ if (navigator.appName.indexOf('Microsoft') != -1)
+ browser = 'IE';
+ else if (navigator.appName.indexOf('Netscape') != -1)
+ browser = 'Netscape';
+ else
+ browser = 'IE';
+}
+if (version == '') {
+ version= navigator.appVersion;
+ paren = version.indexOf('(');
+ whole_version = navigator.appVersion.substring(0,paren-1);
+ version = parseInt(whole_version);
+}
+
+if (browser == 'IE' && version < 7) {
+ document.write('<script type="text/javascript" src="/themes/the_wall/javascript/ie7/ie7-standard-p.js"></script>');
+}
+
+document.write('<script type="text/javascript" src="/themes/the_wall/javascript/niftyjsCode.js"></script>');
+
+//]]>
diff --git a/src/usr/local/www/themes/the_wall/login.css b/src/usr/local/www/themes/the_wall/login.css
new file mode 100644
index 0000000..3c97a9a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/login.css
@@ -0,0 +1,1159 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.infoboxnptd2 {
+ width:100%;
+ color:white;
+ background-color:#990000;
+ padding-right: 10px;
+}
+
+.infoboxnptd {
+ width:8%;
+ background-color:#990000;
+}
+
+.infoboxnptable {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnptable2 {
+ height:32px;
+ width:100%;
+ background-color:#990000;
+}
+
+.infoboxnp {
+ background-color:#990000;
+ width:100%;
+}
+
+.infoboxnpimg {
+ vertical-align:middle;
+ width:28px;
+ height:32px;
+ background-color:#990000;
+}
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ background: url('images/background.jpg') repeat-x; background-attachment:fixed;
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 20px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+ text-align: center;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+/* background: #cccccc; */
+ background-color: transparent;
+ border: 0px solid #cccccc;
+ margin: 5em auto;
+ padding: 0em;
+ width: 400px;
+/* filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6; */
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+/* background: #ffffff; */
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 400px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -420px;
+ left: 70px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ top: -300px; */
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px;
+ position: relative;
+ left: 10px;
+ top: -300px; */
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ text-align: center;
+ padding: 3px;
+ margin: 0em;
+/* text-indent: 10px; */
+ position: relative;
+ top: -20px;
+ left: 170px;
+}
+
+/* loginerror box follows */
+
+#login #inputerrors {
+ background-color: transparent;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ vertical-align: middle;
+ padding: 0em;
+ width: 330px;
+ height: 50px;
+ position: relative;
+ top: -370px;
+}
+/*
+#login #errortext {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 330px;
+ position: relative;
+ top: -350px;
+}
+
+#login #errordesc {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 330px;
+ position: relative;
+ top: -350px;
+}
+#login #errordesc h1 {
+ background: url(/images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+// position: relative;
+// top: -300px;
+}
+*/ \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/menu.inc b/src/usr/local/www/themes/the_wall/menu.inc
new file mode 100644
index 0000000..a274410
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/menu.inc
@@ -0,0 +1,177 @@
+<?php
+/* $Id$ */
+/* ========================================================================== */
+/*
+ menu.inc
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+ */
+/* ========================================================================== */
+/*
+ Originally part of m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+/* ========================================================================== */
+
+require("menu.inc");
+
+define("TMENU_STUB", "
+ // set up drop downs anywhere in the body of the page. I think the bottom of the page is better..
+ // but you can experiment with effect on loadtime.
+ if (TransMenu.isSupported()) {
+
+ //==================================================================================================
+ // create a set of dropdowns
+ //==================================================================================================
+ // the first param should always be down, as it is here
+ //
+ // The second and third param are the top and left offset positions of the menus from their actuators
+ // respectively. To make a menu appear a little to the left and bottom of an actuator, you could use
+ // something like -5, 5
+ //
+ // The last parameter can be .topLeft, .bottomLeft, .topRight, or .bottomRight to inidicate the corner
+ // of the actuator from which to measure the offset positions above. Here we are saying we want the
+ // menu to appear directly below the bottom left corner of the actuator
+ //==================================================================================================
+ var ms = new TransMenuSet(TransMenu.direction.down, 1, 0, TransMenu.reference.bottomLeft);
+
+ //==================================================================================================
+ // create a dropdown menu
+ //==================================================================================================
+ // the first parameter should be the HTML element which will act actuator for the menu
+ //==================================================================================================
+
+ @@MENU_DEFINITIONS@@
+
+ //==================================================================================================
+ // write drop downs into page
+ //==================================================================================================
+ // this method writes all the HTML for the menus into the page with document.write(). It must be
+ // called within the body of the HTML page.
+ //==================================================================================================
+ TransMenu.renderAll();
+ }
+");
+
+class NervecenterMenu extends Menu {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+ private $menuID = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $c);
+
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+ $this->menuID = $id;
+
+ if ($this->hasParent()) {
+ $this->menuJScript = "\tvar {$id} = ms.addMenu(document.getElementById('{$id}'));\n";
+ }
+ } // end __construct
+
+ public function getMenuID() {
+ return $this->menuID;
+ }
+
+ public function setMenuID($myMenuID) {
+ $this->menuID = $myMenuID;
+ }
+
+ public function getMenuJScript() {
+ $childJScript = "";
+ foreach ($this->getChildren() as $component) {
+ $childJScript .= $component->getMenuJScript();
+ }
+
+ if (! $this->hasParent()) {
+ $this->menuJScript = str_replace("@@MENU_DEFINITIONS@@", $childJScript, TMENU_STUB);
+ } else {
+ $this->menuJScript .= "\n$childJScript\n";
+ }
+
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ if (! $this->hasParent()) {
+ $menuMarkup =<<<EOD
+ <div id="menu">
+ @@CHILD_ELEMENTS@@
+ </div>
+
+EOD;
+ } else {
+ $name = gettext($this->getID());
+ $id = "mnua_" . str_replace(" ", "", strtolower($this->getID()));
+
+ $menuMarkup =<<<EOD
+ <a id="{$id}" href="#">{$name}</a>
+ @@CHILD_ELEMENTS@@
+EOD;
+ }
+
+ $childMarkup = "";
+ foreach ($this->getChildren() as $component) {
+ $childMarkup .= $component;
+ }
+
+ $menuMarkup = str_replace("@@CHILD_ELEMENTS@@", $childMarkup, $menuMarkup);
+
+ return $menuMarkup;
+ }
+}
+
+class NervecenterMenuItem extends MenuItem {
+ private $menuJScript = "NOT-SET";
+ private $menuJScriptEvents = "NOT-SET";
+
+ public function __construct($identification = "", $filename = "", $href = "", Component $c = NULL) {
+ parent::__construct($identification, $filename, $href, $c);
+
+ $href = $this->getHref() <> "" ? $this->getHref() : "{$this->getFile()}";
+ $name = gettext($this->getID());
+ $file = $this->getFile();
+
+ $this->menuJScript = $this->check_access("{$file}", "\t{$this->getParent()->getMenuID()}.addItem('{$name}', '{$href}');\n");
+ }
+
+ public function getMenuJScript() {
+ return $this->menuJScript;
+ }
+
+ public function getMenuJScriptEvents() {
+ return $this->menuJScriptEvents;
+ }
+
+ public function __toString() {
+ return "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/themes/the_wall/new_tab_menu.css b/src/usr/local/www/themes/the_wall/new_tab_menu.css
new file mode 100644
index 0000000..04c4cf2
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/new_tab_menu.css
@@ -0,0 +1,101 @@
+/*
+ new_tab_menu.css
+ part of pfSense
+ Copyright (C) 2010-2011 Robert Zelaya
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+
+ Replace your old tab menu with the following code. To add a second tab menu line just cut and paste again.
+ The following code is dependent on new_tab_menu.css and images/new_tab_menu.png.
+
+ <tr>
+ <td>
+ <?php
+ $tab_array_indent = 0; // move to the line in px
+ $tab_array_space = 1; // space betwen lines in px
+ $tab_array_char_limit = 82; // number or chr before the drop down box
+ $tab_array = array();
+ $tab_array[] = array(gettext("Admin Access"), true, "system_advanced_admin.php");
+ $tab_array[] = array(gettext("Firewall / NAT"), false, "system_advanced_firewall.php");
+ $tab_array[] = array(gettext("Networking"), false, "system_advanced_network.php");
+ $tab_array[] = array(gettext("Miscellaneous"), false, "system_advanced_misc.php");
+ $tab_array[] = array(gettext("System Tunables"), false, "system_advanced_sysctl.php");
+ $tab_array[] = array(gettext("Notifications"), false, "system_advanced_notifications.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+
+*/
+
+.newtabmenu ul, li{border:0; margin:0; padding:0; list-style:none;}
+
+.newtabmenu li{float:left; margin-right:2px; text-align: center;}
+.newtabmenu a:link, .newtabmenu a:visited{
+ background:url(images/new_tab_menu.png) right 45px;
+ color:#ffffff; /* noactive font */
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ font-weight:bold;
+ font-size:.9em;
+ height:20px;
+ line-height:20px;
+ text-decoration:none;
+}
+.newtabmenu a span{
+ background:url(images/new_tab_menu.png) left 45px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ height:20px;
+ margin-right:7px;
+ padding-left:7px;
+}
+.newtabmenu a:hover{
+ background:url(images/new_tab_menu.png) right 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+ color:#ffffff; /* hover over font */
+}
+.newtabmenu a:hover span{
+ background:url(images/new_tab_menu.png) left 23px;
+ display:block;
+ /* fix for IE6 */
+ display: inline-block;
+ /* END */
+}
+
+/* -------------------------------- */
+/* ACTIVE ELEMENTS */
+.newtabmenu_active a:link, .newtabmenu_active a:visited, .newtabmenu_active a:visited, .newtabmenu_active a:hover{
+ color:#000000; /* active font */
+ background:url(images/new_tab_menu.png) right 0 no-repeat;
+}
+.newtabmenu_active a span, .newtabmenu_active a:hover span{
+ background:url(images/new_tab_menu.png) left 0 no-repeat;
+} \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/no_big_logo b/src/usr/local/www/themes/the_wall/no_big_logo
new file mode 100644
index 0000000..6e5c70d
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/no_big_logo
@@ -0,0 +1 @@
+NO! DONT! \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/rrdcolors.inc.php b/src/usr/local/www/themes/the_wall/rrdcolors.inc.php
new file mode 100644
index 0000000..dcb7a39
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/rrdcolors.inc.php
@@ -0,0 +1,89 @@
+<?php
+/* $Id$ */
+/*
+ rrdcolors.inc.php
+ Part of pfSense
+ Copyright (C) 2006 Seth Mos <seth.mos@xs4all.nl>
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+/* This file is included by the RRD graphing page and sets the colors */
+
+/* Traffic Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colortrafficup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Traffic Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colortrafficdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* Packets Outbound Out-P-4, Out-B-4, Out-P-6, Out-B-6 */
+$colorpacketsup = array('666666', 'CCCCCC', '2217AA', '625AE7');
+
+/* Packets Inbound In-P-4, In-B-4, In-P-6, In-B-6 */
+$colorpacketsdown = array('990000', 'CC0000', 'FFC875', 'FF9900');
+
+/* 95th Percentile Lines Out, In */
+$colortraffic95 = array('660000', 'FF0000');
+
+/* State Table pfrate, pfstates, pfnat, srcip, dstip */
+$colorstates = array('00AA00','990000','0000FF','000000','DD9B00');
+
+/* Processor Usage user, nice, system, int, processes */
+$colorprocessor = array('00AA00','990000','0000FF','DD9B00','000000');
+
+/* Memory Usage active, inact, free, cache, wire */
+$colormemory = array('00AA00','990000','0000FF','666666','DD9B00');
+
+/* MBUF Usage current, cache, total, max */
+$colormbuf = array('0080FF','00E344','FF0000','000000');
+
+/* Traffic Shaper Queues q1, q2, q3, q4, q5, q6, q7, q8, q9 */
+$colorqueuesup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+$colorqueuesdropup = array('000000','7B0000','0080FF','00E344','FF0000','2217AA','FFC875','FF9900','CC0000');
+$colorqueuesdropdown = array('000000','7B7B7B','999999','BBBBBB','CCCCCC','D9D9D9','EEEEEE','FFFFFF','CCCCCC');
+
+/* Quality Graph Delay >420, 180-420, 60-180, 20-60, <20, Delay Avg */
+$colorqualityrtt = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
+/* Quality Graph Loss */
+$colorqualityloss = 'ee0000';
+
+/* Wireless Graph SNR, Rate, Channel*/
+/* Cellular Graph RSSI, */
+$colorwireless = array('333333','a83c3c','999999');
+
+/* SPAMD Times min area, avg area, max area, Time line */
+$colorspamdtime = array('DDDDFF', 'AAAAFF', 'DDDDFF', '000066');
+/* SPAMD Connections max area, min area, min line, max line, avg line */
+$colorspamdconn = array('AA00BB', 'FFFFFF', '660088', 'FFFF88', '006600');
+
+/* OpenVPN Users Online Users */
+$colorvpnusers = array('990000');
+
+/* Captive Portal Total Users Total Users */
+/* Captive Portal Concurrent Concurrent Users */
+$colorcaptiveportalusers = array('990000');
+
+?>
diff --git a/src/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css b/src/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css
new file mode 100644
index 0000000..8a8c54f
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/styles/jquery-ui-1.11.1.css
@@ -0,0 +1,1226 @@
+/*! jQuery UI - v1.11.1 - 2014-09-22
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2C%20Helvetica%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=glass&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=inset_soft&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=glass&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=inset_hard&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=flat&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+ clear: both;
+}
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable {
+ position: relative;
+}
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+.ui-menu .ui-menu {
+ position: absolute;
+}
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+.ui-progressbar {
+ height: 1em;
+ text-align: left;
+ overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ background-color: #990000;
+}
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+.ui-selectmenu-open {
+ display: block;
+}
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+.ui-spinner-up {
+ top: 0;
+}
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+.ui-tabs {
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Helvetica, Arial, sans-serif;
+ font-size: 1em;
+}
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #c9c9c9 url("../../../javascript/jquery/images/ui-bg_inset-soft_50_c9c9c9_1x100.png") 50% bottom repeat-x;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #bbbbbb;
+ /* background: #dddddd url("../../../javascript/jquery/images/ui-bg_glass_35_dddddd_1x400.png") 50% 50% repeat-x; */
+ color: #444444;
+ font-weight: bold;
+}
+.ui-widget-header a {
+ color: #444444;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_glass_60_eeeeee_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #3383bb;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #3383bb;
+ text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #bbbbbb;
+ background: #f8f8f8 url("../../../javascript/jquery/images/ui-bg_glass_100_f8f8f8_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #599fcf;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #599fcf;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #999999;
+ background: #999999 url("../../../javascript/jquery/images/ui-bg_inset-hard_75_999999_1x100.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #ffffff;
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_55_eeeeee_40x100.png") 50% 50% repeat-x;
+ color: #444444;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #444444;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #c0402a;
+ background: #c0402a url("../../../javascript/jquery/images/ui-bg_flat_55_c0402a_40x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter:Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter:Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+.ui-state-disabled .ui-icon {
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_999999_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_70b2e1_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_3383bb_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../javascript/jquery/images/ui-icons_fbc856_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #eeeeee url("../../../javascript/jquery/images/ui-bg_flat_0_eeeeee_40x100.png") 50% 50% repeat-x;
+ opacity: .8;
+ filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: -4px 0 0 -4px;
+ padding: 4px;
+ background: #aaaaaa url("../../../javascript/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .6;
+ filter: Alpha(Opacity=60); /* support: IE8 */
+ border-radius: 0pxdow;
+}
diff --git a/src/usr/local/www/themes/the_wall/styles/menustyles.css b/src/usr/local/www/themes/the_wall/styles/menustyles.css
new file mode 100644
index 0000000..06b3c7a
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/styles/menustyles.css
@@ -0,0 +1,44 @@
+#navigation {
+ /* border:1px solid black; */
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ padding-top: 4px;
+ }
+
+#menu {
+ /* background: #990000; */
+ /* border-bottom:1px solid white; */
+ padding: 0 0 0 0;
+ width: 98%;
+ vertical-align: middle;
+ height: 16px;
+ }
+#menu a {
+ padding: 2px 28px 4px 28px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.0em;
+ color: #FFFFFF;
+ width: 08%;
+ height: 16px;
+ }
+#menu a.hover {
+ background: #AF2020;
+ }
+#menu span {
+ display: none;
+ }
+
+#subnav {
+ font-size: 10px;
+ margin-bottom: 2em;
+ }
+#subnav a {
+ color: #FF0000; /* #FB3B00; */
+ margin-right: 1em;
+ }
+#subnav span {
+ color: silver;
+ margin-right: 1em;
+ }
diff --git a/src/usr/local/www/themes/the_wall/styles/transmenu.css b/src/usr/local/www/themes/the_wall/styles/transmenu.css
new file mode 100644
index 0000000..f683574
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/styles/transmenu.css
@@ -0,0 +1,75 @@
+/* this is the clipping region for the menu. it's width and height get set by script, depending on the size of the items table */
+.transMenu {
+ position:absolute;
+ overflow:hidden;
+ left:-1000px;
+ top:-1000px;
+ }
+
+/* this is the main container for the menu itself. it's width and height get set by script, depending on the size of the items table */
+.transMenu .content {
+ position:absolute;
+ }
+
+/* this table comprises all menu items. each TR is one item. It is relatively positioned so that the shadow and background transparent divs can be positioned underneath it */
+.transMenu .items {
+ position:relative;
+ left:0px; top:0px;
+ z-index:2;
+ }
+
+.transMenu.top .items {
+ border-top:none;
+ }
+
+/* each TR.item is one menu item */
+.transMenu .item {
+ color: #FFFFFF; /* #336; */
+ font-size: 1.1em;
+ font-weight: normal;
+ font-family:sans-serif;
+ text-decoration:none;
+ /* this is a hack for mac/ie5, whom incorrectly cascades the border properties of the parent table to each row */
+ border:none;
+ cursor:pointer;
+ cursor:hand;
+ }
+
+/* this DIV is the semi-transparent white background of each menu. the -moz-opacity is a proprietary way to get transparency in mozilla, the filter is for IE/windows 5.0+. */
+/* we set the background color in script because ie mac does not use it; that browser only uses a semi-transparent white PNG that the spacer gif inside this DIV is replaced by */
+.transMenu .background {
+ position:absolute;
+ left:0px; top:0px;
+ z-index:1;
+ -moz-opacity:.8;
+ filter:alpha(opacity=80);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the right of the menu. It's left, height, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowRight {
+ position:absolute;
+ z-index:3;
+ top:3px; width:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* same concept as .background, but this is the sliver of shadow on the bottom of the menu. It's top, width, and background are set by script. In IE5/mac, it uses a PNG */
+.transMenu .shadowBottom {
+ position:absolute;
+ z-index:1;
+ left:3px; height:2px;
+ -moz-opacity:.4;
+ filter:alpha(opacity=40);
+ }
+
+/* this is the class that is used when the mouse is over an item. script sets the row to this class when required. */
+.transMenu .item.hover {
+ background:#fdfdfd;
+ color:black;
+ }
+
+/* this is either the dingbat that indicates there is a submenu, or a spacer gif in it's place. We give it extra margin to create some space between the text and the dingbat */
+.transMenu .item img {
+ margin-left:10px;
+ } \ No newline at end of file
diff --git a/src/usr/local/www/themes/the_wall/wizard.css b/src/usr/local/www/themes/the_wall/wizard.css
new file mode 100644
index 0000000..a2d31d5
--- /dev/null
+++ b/src/usr/local/www/themes/the_wall/wizard.css
@@ -0,0 +1,1060 @@
+/* Element CSS Definitions */
+html, body, td, th, input, select {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 0.9em;
+
+}
+
+.nowrap { white-space: nowrap; }
+
+/* please adjust the bgcolor to be used together with niftycorners! */
+.rtop, .artop {
+ background-color: #999999;
+}
+
+div.GraphLink {
+ position: relative;
+}
+
+span.GraphLinkLine {
+ position: absolute;
+ background-color: #990000;
+ width: 100%;
+}
+
+/* DOM Tooltip CSS definitions */
+div.niceTitle
+{
+ background-color: #333333;
+ color: #FFFFFF;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ width: 250px;
+ left: 0;
+ top: 0;
+ padding: 4px;
+ position: absolute;
+ text-align: left;
+ z-index: 20;
+ -moz-border-radius: 0 10px 10px 10px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=87);
+ -moz-opacity: .87;
+ -khtml-opacity: .87;
+ opacity: .87;
+}
+div.niceTitle h1
+{
+ background: #990000;
+ border-bottom: 1px dotted #FFFFFF;
+ font-weight: bold;
+ font-size: 13px;
+ font-family: "Trebuchet MS", sans-serif;
+ margin: 3px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 3px;
+ text-align: left;
+ left: 0;
+ top: 0;
+ -moz-border-radius: 0 8px 0 0;
+ -moz-opacity: 1;
+}
+div.niceTitle .contents
+{
+ margin: 0;
+ padding: 0 3px;
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+}
+div.niceTitle p
+{
+ background: #FFFFFF;
+ border: 1px solid #990000;
+ color: #000000;
+ font-size: 9px;
+ padding: 5px;
+ margin: 3px;
+ text-align: left;
+ -moz-opacity: 1;
+ -moz-border-radius: 0 0 8px 8px;
+}
+
+body {
+ margin: 0px auto;
+ /* background: url('images/background.png') no-repeat; */
+ background-position : center 0px;
+ background-color: #999999;
+}
+
+form {
+ margin: 0px;
+}
+a {
+ text-decoration: none;
+}
+form input {
+ font-size: 1.1em;
+}
+
+iframe {
+ z-index: 1;
+ border: 1px dashed #990000;
+}
+.iframe {
+ background-color: #FFFFFF;
+}
+
+/* ID Based CSS Definitions */
+#wrapper {
+ width: 810px;
+ margin: 0px auto;
+}
+
+#header {
+ background: url('images/header.png') no-repeat;
+ background-position: 0px;
+ height: 102px;
+ width: 810px;
+ margin-bottom: 5px;
+ z-index: 2;
+}
+#header-left {
+ position: relative;
+ /* background: url('images/logo.gif') no-repeat; */
+ background-position: center;
+ height: 65px;
+ width: 145px;
+ left: 10px;
+ float: left;
+}
+#header-left #status-link {
+ position: relative;
+ top: 10px;
+ left: 6px;
+}
+#header-right {
+ position: relative;
+ /* background: url('images/header.gif') no-repeat; */
+ height: 70px;
+ color: #fff;
+ left: 0px;
+ margin-left: 165px;
+}
+#header-right .alert {
+ position: relative;
+ /* background: url('images/alert.gif') no-repeat; */
+ background-position: 4px 2px;
+ color: #fff;
+ height: 17px;
+ width: 500px;
+ padding: 4px;
+ padding-left: 27px;
+ float: left;
+}
+#header-right .container {
+ position: relative;
+}
+#header-right .container .left {
+ position: relative;
+ float: left;
+ font-size: 1.3em;
+ font-weight: bold;
+ top: 15px;
+ left: 4px;
+ display: none;
+}
+#header-right .container .right {
+ position: relative;
+ float: right;
+ top: 22px;
+ padding-right: 4px;
+ z-index: 1;
+}
+
+#header-right .container .right #alerts {
+ position: relative;
+ background: url('images/alert_bgr.png') no-repeat;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-top: 20px;
+ padding-left: 5px;
+ margin: 0px;
+}
+#header-right .container .right #hostname {
+ position: relative;
+ height: 39px;
+ width: 431px;
+ z-index: 1;
+ padding-left: 5px;
+ margin: 0px;
+ top: 25px;
+ left: 230px;
+ font-size: 14px;
+ color: #cccccc;
+ font-weight: bold;
+}
+
+
+
+table#marquee {
+ position: relative;
+ top: -6px;
+ left: -5px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ width: 424px;
+ background-color: transparent;
+ padding: 2px;
+ border: 0px;
+}
+span#marquee-container {
+ position: absolute;
+ visibility: hidden;
+ top: -100px;
+ left: -10000px;
+}
+div#marquee-text {
+ font-size: 1.18em;
+ font-weight: normal;
+ font-family: Verdana;
+ color: #ffffff;
+}
+table#marquee div#container {
+ position: relative;
+ overflow: hidden;
+ width: 418px;
+ height: 20px;
+}
+table#marquee div#container div#scroller {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+
+
+
+#content {
+ position: relative;
+ top: -15px;
+ left: 0px;
+ margin-top: 0px;
+ margin-left: 0px;
+ padding-top: 0px;
+ width: 810px;
+ background-color: #ffffff;
+}
+
+#left {
+ width: 810px;
+ height: 1px;
+}
+#right {
+ position: relative;
+ top: -10px;
+ width: 770px;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right: 5px;
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-bottom: 20px;
+ min-height: 400px;
+}
+
+#footer {
+ position: relative;
+ background: url('images/footer.png') no-repeat;
+ top: -18px;
+ left: 0px;
+ width: 810px;
+ height: 75px;
+ color: #ffffff;
+ text-align: center;;
+ font-size: 0.9em;
+ padding-top: 17px;
+ margin-bottom: 20px;
+ clear: both;
+}
+#footer p {
+ padding: 0px;
+ margin: 0px;
+}
+
+/* Style the List */
+#navigation {
+ /* background: url('images/menu.gif') no-repeat; */
+ /* width: 693px; */
+ position: relative;
+ top: -25px;
+ left: 3px;
+ width: 810px;
+ padding: 0px;
+ height: 28px;
+ z-index: 3;
+}
+#navigation ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+}
+#navigation ul#menu {
+ padding-top: 3px;
+ padding-left: 5px;
+}
+
+/* Style the List Elements */
+#navigation ul li {
+ float: left;
+ position: relative;
+ /* width: 7.5em; */
+ width: 8.77em;
+}
+#navigation ul li div {
+ font-size: 1em;
+ font-weight: bold;
+}
+/* Make the List inside the List Elements */
+/* initially hidden with absolute position */
+#navigation ul li ul {
+ display: none;
+ position: absolute;
+ top: 2em;
+ left: -2px;
+ width: 9em;
+ font-weight: normal;
+ background: transparent bottom left no-repeat; /* This is key to making the menu maintain visibility when not on a link */
+ /* background-color: #202020;
+ background: url("images/menu_footer.gif") no-repeat;
+ background-position: bottom;
+ */
+ padding: 0em 0 0.4em 0;
+ padding-top: 0.3em;
+}
+/* to override top and left in browsers other than IE */
+/* which will position to the top right of the containing */
+/* li, rather than bottom left */
+#navigation ul li > ul {
+ top: auto;
+ left: auto;
+ left: -1px !important;
+}
+/* Show initial drop down upon mouse over, but do not show */
+/* nested side drop menus within listed elements */
+#navigation ul li:hover ul {
+ display: block;
+ cursor: pointer;
+}
+#navigation ul li:hover {
+ cursor: pointer;
+ cursor: pointer;
+}
+#navigation ul li:hover div {
+ text-decoration: none;
+}
+
+#navigation ul li {
+ background-color: transparent;
+ color: #FFF;
+}
+#navigation ul li ul li {
+ border: 1px solid #990000;
+ width: 8.8em;
+ height: 1.6em;
+ line-height: 1.6em;
+ background-color: #990000;
+ color: #FFF;
+}
+#navigation ul li ul li:hover {
+ background-color: #666666;
+}
+
+#navigation li li a {
+ display: block;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#navigation ul li ul li a.navlnk:hover {
+ text-decoration: none;
+}
+#navigation ul li.first {
+ border-right: 0px;
+}
+#navigation ul li.middle {
+ border-right: 0px;
+}
+#navigation ul li.last {
+
+}
+
+#navigation ul li.dropfirst {
+ border-bottom: 0px;
+}
+#navigation ul li.dropmiddle {
+ border-bottom: 0px;
+}
+#navigation ul li.droplast {
+}
+
+#wzdtabcont {
+ float: left;
+ background-color: #FFFFFF;
+ color: #000000;
+ padding: 0;
+}
+
+ul#wzdnav {
+ font-size: 0.96em;
+ float: left;
+ width: 14.5em;
+ margin: 0;
+ padding-left: 18px;
+}
+
+ul#wzdnav li {
+ list-style: none;
+ margin: 0;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+}
+
+ul#wzdnav a {
+ display: block;
+ padding: 0.3em;
+ font-weight: normal;
+}
+
+#wzdnavbold a {
+ display: block;
+ padding: 0.3em;
+ font-weight: bold ! important;
+}
+
+ul#wzdnav a:link {
+ color: black;
+ background-color: #eee;
+}
+
+ul#wzdnav a:visited {
+ color: #666;
+ background-color: #eee;
+}
+
+ul#wzdnav a:hover {
+ color: black;
+ background-color: white;
+}
+
+ul#wzdnav a:active {
+ color: white;
+ background-color: gray;
+}
+
+#graph {
+ position: relative;
+ z-index: 1;
+}
+
+#logoutbtn {
+ position: absolute;
+ left: 95%;
+ vertical-align: middle;
+}
+
+/* Class Based CSS Definitions */
+.pgtitle {
+ font-size: 18px;
+ color: #777777;
+ font-weight: bold;
+}
+.tfrtitle {
+ font-size: 18px;
+ color: #ffffff;
+ font-weight: bold;
+}
+.vncell {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ border-bottom: 1px solid #999999;
+}
+.formfld {
+ padding-left: 19px;
+ font-size: small;
+}
+.formselect {
+ font-size: 1.0em;
+}
+.langopt {
+ padding-left: 34px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.saved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_saved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_saved.png') ! important;
+}
+.notsaved {
+ /* background: url('/themes/nione/images/icons/icon_wzd_nsaved.png') no-repeat 0 1px #FFFFFF; */
+ list-style-image: url('/themes/nervecenter/images/icons/icon_wzd_nsaved.png') ! important;
+}
+.en {
+ background: url('/themes/nervecenter/images/icons/icon_flag_en.png') no-repeat 0 1px #FFFFFF;
+}
+.de {
+ background: url('/themes/nervecenter/images/icons/icon_flag_de.png') no-repeat 0 1px #FFFFFF;
+}
+.es {
+ background: url('/themes/nervecenter/images/icons/icon_flag_es.png') no-repeat 0 1px #FFFFFF;
+}
+.pt_BR {
+ background: url('/themes/nervecenter/images/icons/icon_flag_pt_BR.png') no-repeat 0 1px #FFFFFF;
+}
+.host {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_host.png') no-repeat 0 1px #FFFFFF;
+}
+.search {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_search.png') no-repeat 0 1px #FFFFFF;
+}
+.file {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_file.png') no-repeat 0 1px #FFFFFF;
+}
+.mail {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_mail.png') no-repeat 0 1px #FFFFFF;
+}
+.imp {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_imp.png') no-repeat 0 1px #FFFFFF;
+}
+.pwd {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_pwd.png') no-repeat 0 1px #FFFFFF;
+}
+.user {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_user.png') no-repeat 0 1px #FFFFFF ;
+}
+.group {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_group.png') no-repeat 0 1px #FFFFFF;
+}
+.url {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_url.png') no-repeat 0 1px #FFFFFF;
+}
+.time {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_time.png') no-repeat 0 1px #FFFFFF;
+}
+.unknown {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_unknown.png') no-repeat 0 1px #FFFFFF;
+}
+.formfld_cert {
+ background: url('/themes/nervecenter/images/icons/icon_frmfld_cert.png') no-repeat 0 1px #FFFFFF;
+ padding-left: 28px;
+ font-family: Courier New, Courier, monospaced;
+ font-size: 11px;
+}
+.formfldalias {
+ background-color: #990000;
+ color: #FFFFFF;
+}
+.formpre {
+ font-family: Courier New, Courier, monospaced;
+ font-size: 10px;
+}
+.formbtn {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-weight: bold;
+}
+.formbtns {
+ font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+.vvcell {
+ background-color: #FFFFC6;
+}
+.errmsg {
+ font-weight: bold;
+ color: #CC0000;
+}
+.red {
+ color: #CC0000;
+}
+.gray {
+ color: #A0A0A0;
+}
+.vexpl {
+ font-size: 11px;
+}
+.navlnk {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 13px;
+}
+.navlnks {
+ color: #FFFFFF;
+ text-decoration: none;
+ font-size: 11px;
+}
+.redlnk {
+ color: #990000;
+ text-decoration: none;
+}
+.tblnk {
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.vncellreq {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vncellt {
+ background-color: #DDDDDD;
+ padding-right: 20px;
+ padding-left: 8px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+}
+.vtable {
+ border-bottom: 1px solid #999999;
+}
+.vnsepcell {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.cpline {
+ font-size: 11px;
+ color: #FFFFFF;
+}
+.hostname {
+ font-size: 11px;
+ color: #990000;
+ font-weight: bold;
+}
+.vnsepcellr {
+ background-color: #BBBBBB;
+ padding-right: 20px;
+ padding-left: 8px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listrpad {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 10px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+.listn {
+ font-size: 11px;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbg {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listbggrey {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #999999;
+ padding-right: 16px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listhdr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdr a {
+ color: #000000;
+}
+.listhdrr {
+ background-color: #BBBBBB;
+ padding-right: 16px;
+ padding-left: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.listhdrr a {
+ color: #000000;
+}
+.listlr {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listlrns {
+ background-color: #FFFFFF;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ border-left: 1px solid #999999;
+ font-size: 11px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.list {
+ font-size: 11px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.listt {
+ font-size: 11px;
+ padding-top: 5px;
+}
+.listhdrrns {
+ background-color: #BBBBBB;
+ padding-left: 6px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 6px;
+ font-weight: bold;
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+}
+.listbgns {
+ border-right: 1px solid #999999;
+ border-bottom: 1px solid #999999;
+ font-size: 11px;
+ background-color: #D9DEE8;
+ padding-left: 6px;
+ padding-right: 4px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.listtopic {
+ border-right: 1px solid #999999;
+ font-size: 11px;
+ background-color: #990000;
+ padding-right: 16px;
+ padding-left: 6px;
+ color: #FFFFFF;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.optsect_t {
+ border-right: 1px solid #999999;
+ background-color: #990000;
+ padding-right: 6px;
+ padding-left: 6px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.optsect_s {
+ font-size: 11px;
+ color: #FFFFFF;
+ font-weight: bold;
+}
+.tabnavtbl {
+}
+
+
+/* MISC CSS Definitions */
+ul#tabnav {
+ font-size: 11px;
+ font-weight: bold;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+ul#tabnav li.tabinact1 {
+ float: left;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact {
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+ul#tabnav li.tabinact a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabinact1 a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ padding: 5px 8px 5px 8px;
+ color: #FFFFFF;
+}
+ul#tabnav li.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabcont {
+ background-color: #EEEEEE;
+ padding-right: 12px;
+ padding-left: 12px;
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+.tabact {
+ float: left;
+ background-color: #EEEEEE;
+ color: #000000;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+}
+.tabinact {
+ font-weight: bold;
+ float: left;
+ border-left: 1px solid #999999;
+ background-color: #777777;
+ color: #FFFFFF;
+ padding: 0;
+ white-space: nowrap;
+}
+.menu {
+ background-color: #000000;
+ white-space: nowrap;
+ padding: 0px 5px 0px 5px;
+ width: 100%;
+ vertical-align: top;
+}
+
+
+/* Auto Complete Suggestions */
+div.suggestions {
+ -moz-box-sizing: border-box;
+ /* box-sizing: border-box; */
+ border: 1px solid black;
+ position: absolute;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div {
+ cursor: default;
+ padding: 0px 3px;
+ background-color: #990000;
+ color: #FFF;
+}
+
+div.suggestions div.current {
+ background-color: #3366cc;
+ color: #FFF;
+}
+/* End Auto Complete Suggestions */
+
+
+/* Nifty Corners Crap */
+.rtop,.artop{display:block}
+.rtop *,.artop *{display:block;height:1px;overflow:hidden;font-size:1px}
+.artop *{border-style: solid;border-width:0 1px}
+.r1,.rl1,.re1,.rel1{margin-left:5px}
+.r1,.rr1,.re1,.rer1{margin-right:5px}
+.r2,.rl2,.re2,.rel2,.ra1,.ral1{margin-left:3px}
+.r2,.rr2,.re2,.rer2,.ra1,.rar1{margin-right:3px}
+.r3,.rl3,.re3,.rel3,.ra2,.ral2,.rs1,.rsl1,.res1,.resl1{margin-left:2px}
+.r3,.rr3,.re3,.rer3,.ra2,.rar2,.rs1,.rsr1,.res1,.resr1{margin-right:2px}
+.r4,.rl4,.rs2,.rsl2,.re4,.rel4,.ra3,.ral3,.ras1,.rasl1,.res2,.resl2{margin-left:1px}
+.r4,.rr4,.rs2,.rsr2,.re4,.rer4,.ra3,.rar3,.ras1,.rasr1,.res2,.resr2{margin-right:1px}
+.rx1,.rxl1{border-left-width:5px}
+.rx1,.rxr1{border-right-width:5px}
+.rx2,.rxl2{border-left-width:3px}
+.rx2,.rxr2{border-right-width:3px}
+.re2,.rel2,.ra1,.ral1,.rx3,.rxl3,.rxs1,.rxsl1{border-left-width:2px}
+.re2,.rer2,.ra1,.rar1,.rx3,.rxr3,.rxs1,.rxsr1{border-right-width:2px}
+.rxl1,.rxl2,.rxl3,.rxl4,.rxsl1,.rxsl2,.ral1,.ral2,.ral3,.ral4,.rasl1,.rasl2{border-right-width:0}
+.rxr1,.rxr2,.rxr3,.rxr4,.rxsr1,.rxsr2,.rar1,.rar2,.rar3,.rar4,.rasr1,.rasr2{border-left-width:0}
+.r4,.rl4,.rr4,.re4,.rel4,.rer4,.ra4,.rar4,.ral4,.rx4,.rxl4,.rxr4{height:2px}
+.rer1,.rel1,.re1,.res1,.resl1,.resr1{border-width:1px 0 0;height:0px !important;height /**/:1px}
+/* End Nifty Corners Crap */
+
+
+
+/* CSS for Dynamic Log Viewer */
+/* Author: Erik Kristensen */
+div#log div.log-entry {
+ clear: both;
+}
+
+div#log div.log-entry span,
+div#log div.log-header span {
+ padding: 3px 2px 3px 2px;
+ padding-left: 8px;
+}
+
+div#log div.log-entry span.log-action {
+ padding-bottom: 6px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+div#log div.log-header span {
+ border-top: 1px solid #999;
+ background-color: #bbb;
+ font-weight: bold;
+ text-align: left;
+}
+
+div#log span.log-action,
+div#log span.log-time,
+div#log span.log-interface,
+div#log span.log-source,
+div#log span.log-destination,
+div#log span.log-protocol {
+ float: left;
+ text-align: left;
+ border-left: 1px solid #999;
+ border-bottom: 1px solid #999;
+}
+
+div#log span.log-general {
+
+}
+
+div#log span.log-protocol {
+ border-right: 1px solid #999;
+}
+
+div#log span.log-action {
+ width: 2em;
+ text-align: center;
+}
+
+div#log span.log-time {
+ width: 12.5em;
+}
+
+div#log span.log-interface {
+ width: 5em;
+}
+
+div#log span.log-source,
+div#log span.log-destination {
+ width: 17.6em;
+}
+
+div#log span.log-protocol {
+ width: 5.5em;
+}
+/* END CSS FOR DYNAMIC LOG VIEWER */
+
+#login {
+ background: #cccccc;
+ border: 0px solid #666666;
+ margin: 5em auto;
+ padding: 0em;
+ width: 340px;
+}
+
+#login h1 {
+ background: url(images/misc/logon.png) no-repeat top left;
+ margin-top: 0;
+ display: block;
+ text-indent: -1000px;
+ height: 50px;
+ border-bottom: none;
+}
+
+#login p {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login span {
+ font-size: 1em;
+ font-weight: bold;
+ width: 20%;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login p#text {
+ font-size: 1em;
+ font-weight: normal;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
+
+#login #username, #password {
+ font-size: 1em;
+ width: 60%;
+ padding: 3px;
+ margin: 0em;
+}
+
+#login #submit {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 3px;
+ margin: 0em;
+ text-indent: 10px;
+}
diff --git a/src/usr/local/www/tree-images/empty.gif b/src/usr/local/www/tree-images/empty.gif
new file mode 100755
index 0000000..b501ceb
--- /dev/null
+++ b/src/usr/local/www/tree-images/empty.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/join.gif b/src/usr/local/www/tree-images/join.gif
new file mode 100755
index 0000000..976ba7e
--- /dev/null
+++ b/src/usr/local/www/tree-images/join.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/joinbottom.gif b/src/usr/local/www/tree-images/joinbottom.gif
new file mode 100755
index 0000000..8552b66
--- /dev/null
+++ b/src/usr/local/www/tree-images/joinbottom.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/line.gif b/src/usr/local/www/tree-images/line.gif
new file mode 100755
index 0000000..976beda
--- /dev/null
+++ b/src/usr/local/www/tree-images/line.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/minus_.gif b/src/usr/local/www/tree-images/minus_.gif
new file mode 100755
index 0000000..7c3a143
--- /dev/null
+++ b/src/usr/local/www/tree-images/minus_.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/minus_up.gif b/src/usr/local/www/tree-images/minus_up.gif
new file mode 100755
index 0000000..16915d4
--- /dev/null
+++ b/src/usr/local/www/tree-images/minus_up.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/page.gif b/src/usr/local/www/tree-images/page.gif
new file mode 100755
index 0000000..531f133
--- /dev/null
+++ b/src/usr/local/www/tree-images/page.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/plus_.gif b/src/usr/local/www/tree-images/plus_.gif
new file mode 100755
index 0000000..34c1a5e
--- /dev/null
+++ b/src/usr/local/www/tree-images/plus_.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/plus_up.gif b/src/usr/local/www/tree-images/plus_up.gif
new file mode 100755
index 0000000..d095e07
--- /dev/null
+++ b/src/usr/local/www/tree-images/plus_up.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/plus_updown.gif b/src/usr/local/www/tree-images/plus_updown.gif
new file mode 100755
index 0000000..afc1753
--- /dev/null
+++ b/src/usr/local/www/tree-images/plus_updown.gif
Binary files differ
diff --git a/src/usr/local/www/tree-images/zone.gif b/src/usr/local/www/tree-images/zone.gif
new file mode 100755
index 0000000..f49d647
--- /dev/null
+++ b/src/usr/local/www/tree-images/zone.gif
Binary files differ
diff --git a/src/usr/local/www/tree/i-bottom.gif b/src/usr/local/www/tree/i-bottom.gif
new file mode 100755
index 0000000..f07fa99
--- /dev/null
+++ b/src/usr/local/www/tree/i-bottom.gif
Binary files differ
diff --git a/src/usr/local/www/tree/i-repeater.gif b/src/usr/local/www/tree/i-repeater.gif
new file mode 100755
index 0000000..d5ab089
--- /dev/null
+++ b/src/usr/local/www/tree/i-repeater.gif
Binary files differ
diff --git a/src/usr/local/www/tree/index.html b/src/usr/local/www/tree/index.html
new file mode 100644
index 0000000..f2c45d4
--- /dev/null
+++ b/src/usr/local/www/tree/index.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
+
+ <head>
+ <title>SilverStripe Tree Control</title>
+ <link rel="stylesheet" type="text/css" media="all" href="tree.css" />
+ <script type="text/javascript" src="tree.js"></script>
+ <style>
+ html {
+ background-color: #DDD;
+ }
+ body {
+ font-size: 80%;
+ font-family: Arial, Helvetica, sans-serif;
+ width: 50em;
+ margin: 0 auto 3.5em auto;
+ padding: 1em;
+ background-color: white;
+ border-left: 1px #CCC solid;
+ border-right: 1px #CCC solid;
+ }
+ ul.tree a {
+ font-size: 0.8em;
+
+ }
+ code {
+ display: block;
+ font-size: 1.2em;
+ margin: 2em 5em;
+ padding: 0.5em;
+ border: 1px #CCC solid;
+ background-color: #EEE;
+ }
+ #version {
+ float: right;
+ font-style: italic;
+ margin-top: -4em;
+ }
+
+ dt {
+ margin: 1.2em 0 0.2em 0;
+ font-weight: bold;
+ font-size: 1.1em
+ }
+ dd {
+ margin: 0;
+ }
+ h2 {
+ margin-top: 4em;
+ border-bottom: 1px #CCC dotted;
+ }
+
+ #footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 3em;
+ }
+ #footer div {
+ margin: auto;
+ width: 52em;
+ height: 3em;
+ background-color: #777;
+ color: white;
+ }
+ #footer a {
+ color: white;
+ }
+ #footer p.left {
+ float: left;
+ margin: 0.75em 1em;
+ }
+ #footer p.right {
+ float: right;
+ margin: 0.75em 1em;
+ }
+
+ </style>
+ </head>
+
+<body>
+
+ <h1>SilverStripe Tree Control</h1>
+ <p>This tree control was put together by <a href="sam@silverstripe.com">Sam Minn&eacute;e</a> at
+ <a href="http://www.silverstripe.com/blog">SilverStripe</a> in New Zealand. We've put it out there
+ for everyone to enjoy. Check out <a href="http://www.silverstripe.com/blog">our blog</a> if you're
+ wondering what we're up to.</p>
+ <p>This file came from <a href="http://www.silverstripe.com/downloads/tree/">http://www.silverstripe.com/downloads/tree/</a>.
+ If you found this file elsewhere, check out that page: we might have posted an updated version.</p>
+
+ <p>
+ <b>Quick-links:</b>
+ <a href="#Demo">Demo</a> | <a href="#Usage">Usage</a> | <a href="#Download">Download</a> | <a href="#HowItWorks">How it Works</a>
+ </p>
+
+ <h2 id="Demo">Demo</h2>
+ <p>Here's a basic demo of the tree control. Our styling is fairly basic, but with updated CSS and
+ images you can do whatever you like. Just for fun, try changing the text size.</p>
+
+ <ul class="tree">
+ <li><a href="#">item 1</a>
+ <ul>
+ <li><a href="#">item 1.1</a></li>
+ <li class="closed"><a href="#">item 1.2</a>
+ <ul>
+ <li><a href="#">item 1.2.1</a></li>
+ <li><a href="#">item 1.2.2</a></li>
+ <li><a href="#">item 1.2.3</a></li>
+ </ul>
+ </li>
+ <li><a href="#">item 1.3</a></li>
+ </ul>
+ </li>
+ <li><a href="#">item 2</a>
+ <ul>
+ <li><a href="#">item 2.1</a></li>
+ <li><a href="#">item 2.2</a></li>
+ <li><a href="#">item 2.3</a></li>
+ </ul>
+ </li>
+ </ul>
+
+ <h2 id="Download">Download</h2>
+
+ <p><a href="../tree.zip">Download everything you need here</a> - tree.zip, 11kb</p>
+
+ <h2 id="Usage">Usage</h2>
+
+ <p>The first thing to do is include the appropriate JavaScript and CSS files:</p>
+
+ <code>
+ &lt;link rel="stylesheet" type="text/css" media="all" href="tree.css" /&gt;<br />
+ &lt;script type="text/javascript" src="tree.js"&gt;&lt;/script&gt;
+ </code>
+
+ <p>Then, create the HTML for you tree. This is basically a nested set of bullet pointed links. The
+ "tree" class at the top is what the script will look for. Note that you can make a tree ndoe closed
+ to begin with by adding class="closed".</p>
+
+ <p>Here's the HTML code that I inserted to create the demo tree above.</p>
+
+ <code>
+ &lt;ul class="tree"&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1&lt;/a&gt;<br />
+ &lt;ul&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1.1&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;li class="closed"&gt;&lt;a href="#"&gt;item 1.2&lt;/a&gt;<br />
+ &lt;ul&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1.2.1&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1.2.2&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1.2.3&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;/ul&gt; <br />
+ &lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 1.3&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;/ul&gt; <br />
+ &lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 2&lt;/a&gt;<br />
+ &lt;ul&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 2.1&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 2.2&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;li&gt;&lt;a href="#"&gt;item 2.3&lt;/a&gt;&lt;/li&gt;<br />
+ &lt;/ul&gt; <br />
+ &lt;/li&gt;<br />
+ &lt;/ul&gt;
+ </code>
+
+ <p>Your tree is now complete!</p>
+
+ <h2 id="HowItWorks">How it works</h2>
+ <dl>
+ <dt>Starting the script</dt>
+ <dd>In simple situations, creating an auto-loading script is a simple matter of setting window.onload
+ to a function. But what if there's more than one script? To this end, we created an appendLoader()
+ function that will execute multiple loader functions, including a previously defined loader function</dd>
+
+ <dt>Finding the tree content</dt>
+ <dd>Rather than write a piece of script to define we're your tree is, we've tried to make the script
+ as automatic as possible - it finds all ULs with a class name containing "tree".</dd>
+
+ <dt>Augmenting the HTML</dt>
+ <dd>Unfortunately, an LI containing an A isn't sufficient for doing all of the necessary tree styling.
+ Rather than force people to put non-semantic HTML into their file, the script generates extra &lt;span&gt; tags.
+ So, the following HTML:
+
+ <code>
+ &lt;li&gt;&lt;a href="#"&gt;My item&lt;/a&gt;&lt;/li&gt;
+ </code>
+
+ Is turned into the more ungainly, and yet more easily styled:
+
+ <code>
+ &lt;li&gt;&lt;span class="a"&gt;&lt;span class="b"&gt;&lt;span class="c"&gt;&lt;a href="#"&gt;My item&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
+ </code>
+
+ Additionally, some helper classes are applied to the &lt;li&gt; and &lt;span class="a"&gt; elements:
+ <ul>
+ <li>"last" is applied to the last node of any subtree.</li>
+ <li>"children" is applied to any node that has children.</li>
+ </ul>
+ </dd>
+
+ <dt>Styling it up</dt>
+ <dd>Why the heck do we need 5 styling elements? Basically, because there are 5 background-images to apply:
+ <ul>
+ <li><b>li:</b> A repeating vertical line is shown. Nested &lt;li&gt; tags
+ give us the multiple vertical lines that we need.</li>
+ <li><b>span.a:</b> We overlay the vertical line with 'L' and 'T' elements as needed.</li>
+ <li><b>span.b:</b> We overlay '+' or '-' signs on nodes with children.</li>
+ <li><b>span.c:</b> This is needed to fix up the vertical line.</li>
+ <li><b>a:</b> Finally, we apply the page icon.</li>
+ </ul>
+ </dd>
+
+ <dt>Opening / closing nodes</dt>
+ <dd>Having come this far, the "dynamic" aspect of the tree control is very trivial. We set a "closed"
+ class on the &lt;li&gt; and &lt;span class="a"&gt; elements, and our CSS takes care of hiding the
+ children, changing the - to a + and changing the folder icon.</dd>
+ </dl>
+
+ <div id="footer">
+ <div>
+ <p class="left"><a href="http://www.silverstripe.com/downloads/tree">SilverStripe Tree Control</a>: v0.1, 30 Oct 2005</p>
+ <p class="right">Copyright &copy; 2005 <a href="http://www.silverstripe.com/blog">SilverStripe Limited</a></p>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/usr/local/www/tree/l.gif b/src/usr/local/www/tree/l.gif
new file mode 100755
index 0000000..1e8c707
--- /dev/null
+++ b/src/usr/local/www/tree/l.gif
Binary files differ
diff --git a/src/usr/local/www/tree/minus.gif b/src/usr/local/www/tree/minus.gif
new file mode 100755
index 0000000..7a7fd3b
--- /dev/null
+++ b/src/usr/local/www/tree/minus.gif
Binary files differ
diff --git a/src/usr/local/www/tree/page-file.png b/src/usr/local/www/tree/page-file.png
new file mode 100755
index 0000000..d3bb119
--- /dev/null
+++ b/src/usr/local/www/tree/page-file.png
Binary files differ
diff --git a/src/usr/local/www/tree/page-file_play.gif b/src/usr/local/www/tree/page-file_play.gif
new file mode 100755
index 0000000..0c8e9ff
--- /dev/null
+++ b/src/usr/local/www/tree/page-file_play.gif
Binary files differ
diff --git a/src/usr/local/www/tree/page-file_x.gif b/src/usr/local/www/tree/page-file_x.gif
new file mode 100755
index 0000000..504f06e
--- /dev/null
+++ b/src/usr/local/www/tree/page-file_x.gif
Binary files differ
diff --git a/src/usr/local/www/tree/page-foldericon.png b/src/usr/local/www/tree/page-foldericon.png
new file mode 100755
index 0000000..d26f2dc
--- /dev/null
+++ b/src/usr/local/www/tree/page-foldericon.png
Binary files differ
diff --git a/src/usr/local/www/tree/page-openfoldericon.png b/src/usr/local/www/tree/page-openfoldericon.png
new file mode 100755
index 0000000..8d00c39
--- /dev/null
+++ b/src/usr/local/www/tree/page-openfoldericon.png
Binary files differ
diff --git a/src/usr/local/www/tree/plus.gif b/src/usr/local/www/tree/plus.gif
new file mode 100755
index 0000000..3530f59
--- /dev/null
+++ b/src/usr/local/www/tree/plus.gif
Binary files differ
diff --git a/src/usr/local/www/tree/t.gif b/src/usr/local/www/tree/t.gif
new file mode 100755
index 0000000..a92da2a
--- /dev/null
+++ b/src/usr/local/www/tree/t.gif
Binary files differ
diff --git a/src/usr/local/www/tree/tree.css b/src/usr/local/www/tree/tree.css
new file mode 100644
index 0000000..31b7979
--- /dev/null
+++ b/src/usr/local/www/tree/tree.css
@@ -0,0 +1,136 @@
+/*
+ * CSS for Standard tree layout
+ * Copyright (C) 2005 SilverStripe Limited
+ * Feel free to use this on your websites, but please leave this message in the fies
+ * http://www.silverstripe.com/blog
+ */
+
+ul.tree{
+ width: auto;
+ padding-left : 0px;
+ margin-left : 0px;
+}
+
+ul.tree img{
+ border : none;
+}
+
+
+ul.tree, ul.tree ul {
+ padding-left: 0;
+}
+
+ul.tree ul {
+ margin-left: 16px;
+
+}
+ul.tree li.closed ul {
+ display: none;
+}
+
+
+ul.tree li {
+ list-style: none;
+ background: url(i-repeater.gif) 0 0 repeat-y;
+ display: block;
+ width: auto;
+ /* background-color:#FFFFFF; */
+}
+
+
+
+ul.tree li.last {
+ list-style: none;
+ background-image: none;
+}
+
+
+
+/* Span-A: I/L/I glpyhs */
+ul.tree span.a {
+ background: url(t.gif) 0 50% no-repeat;
+ display: block;
+}
+ul.tree span.a.last {
+ background: url(l.gif) 0 50% no-repeat;
+}
+
+/* Span-B: Plus/Minus icon */
+ul.tree span.b {
+}
+ul.tree span.a.children span.b {
+ background: url(minus.gif) 0 50% no-repeat;
+ cursor: pointer;
+}
+ul.tree li.closed span.a.children span.b {
+ background: url(plus.gif) 0 50% no-repeat;
+ cursor: pointer;
+}
+
+/* Span-C: Spacing and extending tree line below the icon */
+ul.tree span.c {
+ margin-left: 16px;
+}
+ul.tree span.a.children span.c {
+ background: url(i-bottom.gif) 0 50% no-repeat;
+}
+ul.tree span.a.spanClosed span.c {
+ background-image: none;
+}
+
+
+/* Anchor tag: Page icon */
+ul.tree a {
+ white-space: nowrap;
+ overflow: hidden;
+
+/* padding: 10px 0px 10px 18px; */
+ padding: 3px 0px 3px 18px;
+ line-height: 16px;
+
+/* background: url(page-file.png) 0 50% no-repeat; */
+ background: url(page-file.png) 0 0 no-repeat;
+}
+ul.tree span.a.children a {
+ background-image: url(page-openfoldericon.png);
+}
+ul.tree span.a.children.spanClosed a {
+ background-image: url(page-foldericon.png);
+}
+
+/* Unformatted tree */
+ul.tree.unformatted li {
+ background-image: none;
+ padding-left: 16px;
+}
+ul.tree.unformatted li li {
+ background-image: none;
+ padding-left: 0px;
+}
+
+/*
+ * Divs, by default store vertically aligned data
+ */
+
+ul.tree li div {
+ float: right;
+ clear: right;
+ height: 1em;
+ margin-top: -26px;
+}
+/* As inside DIVs should be treated normally */
+ul.tree div a {
+ padding: 0;
+ background-image: none;
+ min-height: auto;
+ height: auto;
+}
+
+ul.tree li A:link, ul.tree li A:hover, ul.tree li A:visited {
+ color : #111111;
+}
+
+
+ul.tree li .over{
+ background-color : pink;
+}
diff --git a/src/usr/local/www/tree/tree.js b/src/usr/local/www/tree/tree.js
new file mode 100644
index 0000000..8e9651e
--- /dev/null
+++ b/src/usr/local/www/tree/tree.js
@@ -0,0 +1,195 @@
+/*
+ * Content-separated javascript tree widget
+ * Copyright (C) 2005 SilverStripe Limited
+ * Feel free to use this on your websites, but please leave this message in the fies
+ * http://www.silverstripe.com/blog
+*/
+
+/*
+ * Initialise all trees identified by <ul class="tree">
+ */
+function autoInit_trees() {
+ var candidates = document.getElementsByTagName('ul');
+ for(var i=0;i<candidates.length;i++) {
+ if(candidates[i].className && candidates[i].className.indexOf('tree') != -1) {
+ initTree(candidates[i]);
+ candidates[i].className = candidates[i].className.replace(/ ?unformatted ?/, ' ');
+ }
+ }
+}
+
+/*
+ * Initialise a tree node, converting all its LIs appropriately
+ */
+function initTree(el) {
+ var i,j;
+ var spanA, spanB, spanC;
+ var startingPoint, stoppingPoint, childUL;
+
+ // Find all LIs to process
+ for(i=0;i<el.childNodes.length;i++) {
+ if(el.childNodes[i].tagName && el.childNodes[i].tagName.toLowerCase() == 'li') {
+ var li = el.childNodes[i];
+
+ // Create our extra spans
+ spanA = document.createElement('span');
+ spanB = document.createElement('span');
+ spanC = document.createElement('span');
+ spanA.appendChild(spanB);
+ spanB.appendChild(spanC);
+ spanA.className = 'a ' + li.className.replace('closed','spanClosed');
+ spanA.onMouseOver = function() {};
+ spanB.className = 'b';
+ spanB.onclick = treeToggle;
+ spanC.className = 'c';
+
+
+ // Find the UL within the LI, if it exists
+ stoppingPoint = li.childNodes.length;
+ startingPoint = 0;
+ childUL = null;
+ for(j=0;j<li.childNodes.length;j++) {
+ if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'div') {
+ startingPoint = j + 1;
+ continue;
+ }
+
+ if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'ul') {
+ childUL = li.childNodes[j];
+ stoppingPoint = j;
+ break;
+ }
+ }
+
+ // Move all the nodes up until that point into spanC
+ for(j=startingPoint;j<stoppingPoint;j++) {
+ spanC.appendChild(li.childNodes[startingPoint]);
+ }
+
+ // Insert the outermost extra span into the tree
+ if(li.childNodes.length > startingPoint) li.insertBefore(spanA, li.childNodes[startingPoint]);
+ else li.appendChild(spanA);
+
+ // Process the children
+ if(childUL != null) {
+ if(initTree(childUL)) {
+ addClass(li, 'children', 'closed');
+ addClass(spanA, 'children', 'spanClosed');
+ }
+ }
+ }
+ }
+
+ if(li) {
+ // li and spanA will still be set to the last item
+
+ addClass(li, 'last', 'closed');
+ addClass(spanA, 'last', 'spanClosed');
+ return true;
+ } else {
+ return false;
+ }
+
+}
+
+
+/*
+ * +/- toggle the tree, where el is the <span class="b"> node
+ * force, will force it to "open" or "close"
+ */
+function treeToggle(el, force) {
+ el = this;
+
+ while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode;
+
+ // Get UL within the LI
+ var childSet = findChildWithTag(el, 'ul');
+ var topSpan = findChildWithTag(el, 'span');
+
+ if( force != null ){
+
+ if( force == "open"){
+ treeOpen( topSpan, el );
+ }
+ else if( force == "close" ){
+ treeClose( topSpan, el );
+ }
+
+ }
+
+ else if( childSet != null) {
+ // Is open, close it
+ if(!el.className.match(/(^| )closed($| )/)) {
+ treeClose( topSpan, el );
+ // Is closed, open it
+ } else {
+ treeOpen( topSpan, el );
+ }
+ }
+}
+
+
+function treeOpen( a, b ){
+ removeClass(a,'spanClosed');
+ removeClass(b,'closed');
+}
+
+
+function treeClose( a, b ){
+ addClass(a,'spanClosed');
+ addClass(b,'closed');
+}
+
+/*
+ * Find the a child of el of type tag
+ */
+function findChildWithTag(el, tag) {
+ for(var i=0;i<el.childNodes.length;i++) {
+ if(el.childNodes[i].tagName != null && el.childNodes[i].tagName.toLowerCase() == tag) return el.childNodes[i];
+ }
+ return null;
+}
+
+/*
+ * Functions to add and remove class names
+ * Mac IE hates unnecessary spaces
+ */
+function addClass(el, cls, forceBefore) {
+ if(forceBefore != null && el.className.match(new RegExp('(^| )' + forceBefore))) {
+ el.className = el.className.replace(new RegExp("( |^)" + forceBefore), '$1' + cls + ' ' + forceBefore);
+
+ } else if(!el.className.match(new RegExp('(^| )' + cls + '($| )'))) {
+ el.className += ' ' + cls;
+ el.className = el.className.replace(/(^ +)|( +$)/g, '');
+ }
+}
+function removeClass(el, cls) {
+ var old = el.className;
+ var newCls = ' ' + el.className + ' ';
+ newCls = newCls.replace(new RegExp(' (' + cls + ' +)+','g'), ' ');
+ el.className = newCls.replace(/(^ +)|( +$)/g, '');
+}
+
+/*
+ * Handlers for automated loading
+ */
+ _LOADERS = Array();
+
+function callAllLoaders() {
+ var i, loaderFunc;
+ for(i=0;i<_LOADERS.length;i++) {
+ loaderFunc = _LOADERS[i];
+ if(loaderFunc != callAllLoaders) loaderFunc();
+ }
+}
+
+function appendLoader(loaderFunc) {
+ if(window.onload && window.onload != callAllLoaders)
+ _LOADERS[_LOADERS.length] = window.onload;
+
+ window.onload = callAllLoaders;
+
+ _LOADERS[_LOADERS.length] = loaderFunc;
+}
+
+appendLoader(autoInit_trees);
diff --git a/src/usr/local/www/treeview.css b/src/usr/local/www/treeview.css
new file mode 100644
index 0000000..3cdf792
--- /dev/null
+++ b/src/usr/local/www/treeview.css
@@ -0,0 +1,48 @@
+.treeview {
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ color: #333;
+ white-space: nowrap;
+ border: 0px;
+ vertical-align: middle;
+}
+.treeview img {
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+.treeview a {
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+ color: #000;
+ text-decoration: none;
+ vertical-align: top;/* r3b*/
+}
+.treeview a.node {
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+ white-space: nowrap;
+ color: #00F;
+ height:16px;
+ width:auto;
+ overflow:hidden;
+ padding: 0px 0px 0px 0px;
+ vertical-align: top;
+}
+
+.treeview a.nodeSel {
+ border: 0px;
+ margin: 0px;
+ padding: 0px;
+
+}
+.treeview .clip {
+ overflow: hidden;
+
+}
diff --git a/src/usr/local/www/uploadconfig.php b/src/usr/local/www/uploadconfig.php
new file mode 100644
index 0000000..35e7c55
--- /dev/null
+++ b/src/usr/local/www/uploadconfig.php
@@ -0,0 +1,65 @@
+#!/usr/local/bin/php
+<?php
+/*
+ uploadconfig.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-hidden-uploadconfiguration
+##|*NAME=Hidden: Upload Configuration page
+##|*DESCR=Allow access to the 'Hidden: Upload Configuration' page.
+##|*MATCH=uploadconfig.php*
+##|-PRIV
+
+
+require("guiconfig.inc");
+
+header("Content-Type: text/plain");
+
+/* get config.xml in POST variable "config" */
+if ($_POST['config']) {
+ $fd = @fopen("{$g['tmp_path']}/config.xml", "w");
+ if (!$fd) {
+ echo gettext("ERR Could not save configuration.")."\n";
+ exit(0);
+ }
+ fwrite($fd, $_POST['config']);
+ fclose($fd);
+ if (config_install("{$g['tmp_path']}/config.xml") == 0) {
+ echo gettext("OK")."\n";
+ system_reboot();
+ } else {
+ echo gettext("ERR Could not install configuration.")."\n";
+ }
+} else {
+ echo gettext("ERR Invalid configuration received.")."\n";
+}
+
+exit(0);
+?>
diff --git a/src/usr/local/www/vpn_ipsec.php b/src/usr/local/www/vpn_ipsec.php
new file mode 100644
index 0000000..6ef6040
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec.php
@@ -0,0 +1,704 @@
+<?php
+/*
+ vpn_ipsec.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec
+##|*NAME=VPN: IPsec page
+##|*DESCR=Allow access to the 'VPN: IPsec' page.
+##|*MATCH=vpn_ipsec.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['ipsec']['phase1'])) {
+ $config['ipsec']['phase1'] = array();
+}
+
+if (!is_array($config['ipsec']['phase2'])) {
+ $config['ipsec']['phase2'] = array();
+}
+
+$a_phase1 = &$config['ipsec']['phase1'];
+$a_phase2 = &$config['ipsec']['phase2'];
+
+$pconfig['enable'] = isset($config['ipsec']['enable']);
+
+if ($_POST) {
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval = vpn_ipsec_configure();
+ /* reload the filter in the background */
+ filter_configure();
+ $savemsg = get_std_save_message($retval);
+ if ($retval >= 0) {
+ if (is_subsystem_dirty('ipsec')) {
+ clear_subsystem_dirty('ipsec');
+ }
+ }
+ } else if ($_POST['submit']) {
+ $pconfig = $_POST;
+
+ $config['ipsec']['enable'] = $_POST['enable'] ? true : false;
+
+ write_config();
+
+ $retval = vpn_ipsec_configure();
+ } else if (isset($_POST['del_x'])) {
+ /* delete selected p1 entries */
+ if (is_array($_POST['p1entry']) && count($_POST['p1entry'])) {
+ foreach ($_POST['p1entry'] as $p1entrydel) {
+ unset($a_phase1[$p1entrydel]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('ipsec');
+ }
+ }
+ } else if (isset($_POST['delp2_x'])) {
+ /* delete selected p2 entries */
+ if (is_array($_POST['p2entry']) && count($_POST['p2entry'])) {
+ foreach ($_POST['p2entry'] as $p2entrydel) {
+ unset($a_phase2[$p2entrydel]);
+ }
+ if (write_config()) {
+ mark_subsystem_dirty('ipsec');
+ }
+ }
+ } else {
+ /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
+ unset($delbtn, $delbtnp2, $movebtn, $movebtnp2, $togglebtn, $togglebtnp2);
+ foreach ($_POST as $pn => $pd) {
+ if (preg_match("/del_(\d+)_x/", $pn, $matches)) {
+ $delbtn = $matches[1];
+ } else if (preg_match("/delp2_(\d+)_x/", $pn, $matches)) {
+ $delbtnp2 = $matches[1];
+ } else if (preg_match("/move_(\d+)_x/", $pn, $matches)) {
+ $movebtn = $matches[1];
+ } else if (preg_match("/movep2_(\d+)_x/", $pn, $matches)) {
+ $movebtnp2 = $matches[1];
+ } else if (preg_match("/toggle_(\d+)_x/", $pn, $matches)) {
+ $togglebtn = $matches[1];
+ } else if (preg_match("/togglep2_(\d+)_x/", $pn, $matches)) {
+ $togglebtnp2 = $matches[1];
+ }
+ }
+
+ $save = 1;
+
+ /* move selected p1 entries before this */
+ if (isset($movebtn) && is_array($_POST['p1entry']) && count($_POST['p1entry'])) {
+ $a_phase1_new = array();
+
+ /* copy all p1 entries < $movebtn and not selected */
+ for ($i = 0; $i < $movebtn; $i++) {
+ if (!in_array($i, $_POST['p1entry'])) {
+ $a_phase1_new[] = $a_phase1[$i];
+ }
+ }
+
+ /* copy all selected p1 entries */
+ for ($i = 0; $i < count($a_phase1); $i++) {
+ if ($i == $movebtn) {
+ continue;
+ }
+ if (in_array($i, $_POST['p1entry'])) {
+ $a_phase1_new[] = $a_phase1[$i];
+ }
+ }
+
+ /* copy $movebtn p1 entry */
+ if ($movebtn < count($a_phase1)) {
+ $a_phase1_new[] = $a_phase1[$movebtn];
+ }
+
+ /* copy all p1 entries > $movebtn and not selected */
+ for ($i = $movebtn+1; $i < count($a_phase1); $i++) {
+ if (!in_array($i, $_POST['p1entry'])) {
+ $a_phase1_new[] = $a_phase1[$i];
+ }
+ }
+ if (count($a_phase1_new) > 0) {
+ $a_phase1 = $a_phase1_new;
+ }
+
+ } else if (isset($movebtnp2) && is_array($_POST['p2entry']) && count($_POST['p2entry'])) {
+ /* move selected p2 entries before this */
+ $a_phase2_new = array();
+
+ /* copy all p2 entries < $movebtnp2 and not selected */
+ for ($i = 0; $i < $movebtnp2; $i++) {
+ if (!in_array($i, $_POST['p2entry'])) {
+ $a_phase2_new[] = $a_phase2[$i];
+ }
+ }
+
+ /* copy all selected p2 entries */
+ for ($i = 0; $i < count($a_phase2); $i++) {
+ if ($i == $movebtnp2) {
+ continue;
+ }
+ if (in_array($i, $_POST['p2entry'])) {
+ $a_phase2_new[] = $a_phase2[$i];
+ }
+ }
+
+ /* copy $movebtnp2 p2 entry */
+ if ($movebtnp2 < count($a_phase2)) {
+ $a_phase2_new[] = $a_phase2[$movebtnp2];
+ }
+
+ /* copy all p2 entries > $movebtnp2 and not selected */
+ for ($i = $movebtnp2+1; $i < count($a_phase2); $i++) {
+ if (!in_array($i, $_POST['p2entry'])) {
+ $a_phase2_new[] = $a_phase2[$i];
+ }
+ }
+ if (count($a_phase2_new) > 0) {
+ $a_phase2 = $a_phase2_new;
+ }
+
+ } else if (isset($togglebtn)) {
+ if (isset($a_phase1[$togglebtn]['disabled'])) {
+ unset($a_phase1[$togglebtn]['disabled']);
+ } else {
+ $a_phase1[$togglebtn]['disabled'] = true;
+ }
+ } else if (isset($togglebtnp2)) {
+ if (isset($a_phase2[$togglebtnp2]['disabled'])) {
+ unset($a_phase2[$togglebtnp2]['disabled']);
+ } else {
+ $a_phase2[$togglebtnp2]['disabled'] = true;
+ }
+ } else if (isset($delbtn)) {
+ /* remove static route if interface is not WAN */
+ if ($a_phase1[$delbtn]['interface'] <> "wan") {
+ mwexec("/sbin/route delete -host {$a_phase1[$delbtn]['remote-gateway']}");
+ }
+
+ /* remove all phase2 entries that match the ikeid */
+ $ikeid = $a_phase1[$delbtn]['ikeid'];
+ foreach ($a_phase2 as $p2index => $ph2tmp) {
+ if ($ph2tmp['ikeid'] == $ikeid) {
+ unset($a_phase2[$p2index]);
+ }
+ }
+ unset($a_phase1[$delbtn]);
+
+ } else if (isset($delbtnp2)) {
+ unset($a_phase2[$delbtnp2]);
+
+ } else {
+ $save = 0;
+ }
+
+ if ($save === 1) {
+ if (write_config()) {
+ mark_subsystem_dirty('ipsec');
+ }
+ }
+ }
+}
+
+$pgtitle = array(gettext("VPN"), gettext("IPsec"));
+$shortcut_section = "ipsec";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="vpn_ipsec.php" method="post">
+<script type="text/javascript" src="/javascript/row_toggle.js"></script>
+<?php
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ if ($pconfig['enable'] && is_subsystem_dirty('ipsec')) {
+ print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec">
+ <tr>
+ <td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable">
+ <tr>
+ <td>
+ <input name="enable" type="checkbox" id="enable" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\"";?> />
+ </td>
+ <td>
+ <strong><?=gettext("Enable IPsec"); ?></strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ </td>
+ </tr>
+ </table>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="phase-1 entries">
+ <tr id="frheader">
+ <td class="list">&nbsp;</td>
+ <td class="list">&nbsp;</td>
+ <td class="listhdrr"><?=gettext("IKE"); ?></td>
+ <td class="listhdrr"><?=gettext("Remote Gateway"); ?></td>
+ <td class="listhdrr"><?=gettext("Mode"); ?></td>
+ <td class="listhdrr"><?=gettext("P1 Protocol"); ?></td>
+ <td class="listhdrr"><?=gettext("P1 Transforms"); ?></td>
+ <td class="listhdrr"><?=gettext("P1 Description"); ?></td>
+ <td class="list">
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_phase1 as $ph1ent):
+ $iconfn = "pass";
+ $spans = $spane = "";
+ if (isset($ph1ent['disabled'])) {
+ $spans = "<span class=\"gray\">";
+ $spane = "</span>";
+ $iconfn .= "_d";
+ }
+?>
+ <tr valign="top" id="fr<?=$i;?>" ondblclick="document.location='vpn_ipsec_phase1.php?p1index=<?=$i;?>'">
+ <td class="listt" align="center" valign="middle">
+ <input type="checkbox" id="frc<?=$i;?>" name="p1entry[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ </td>
+ <td class="listt" align="center" valign="middle">
+ <input name="toggle_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn?>.gif"
+ title="<?=gettext("click to toggle enabled/disabled status");?>"
+ type="image" style="height:11;width:11;border:0" />
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
+ <?=$spans;?>
+<?php
+ if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1") {
+ echo "V1";
+ } else {
+ echo "V2";
+ }
+?>
+ <?=$spane;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
+ <?=$spans;?>
+<?php
+ if ($ph1ent['interface']) {
+ $iflabels = get_configured_interface_with_descr();
+
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $iflabels[$cif] = $carpip." (".get_vip_descr($carpip).")";
+ }
+
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $iflabels[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ if ($group[0]['vip'] <> "") {
+ $vipif = $group[0]['vip'];
+ } else {
+ $vipif = $group[0]['int'];
+ }
+ $iflabels[$name] = "GW Group {$name}";
+ }
+ $if = htmlspecialchars($iflabels[$ph1ent['interface']]);
+ } else {
+ $if = "WAN";
+ }
+
+ if (!isset($ph1ent['mobile'])) {
+ echo $if."<br />".$ph1ent['remote-gateway'];
+ } else {
+ echo $if."<br /><strong>" . gettext("Mobile Client") . "</strong>";
+ }
+?>
+ <?=$spane;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
+ <?=$spans;?>
+ <?php
+ if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1") {
+ echo "{$ph1ent['mode']}";
+ }
+ ?>
+ <?=$spane;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
+ <?=$spans;?>
+ <?=$p1_ealgos[$ph1ent['encryption-algorithm']['name']]['name'];?>
+<?php
+ if ($ph1ent['encryption-algorithm']['keylen']) {
+ if ($ph1ent['encryption-algorithm']['keylen'] == "auto") {
+ echo " (" . gettext("auto") . ")";
+ } else {
+ echo " ({$ph1ent['encryption-algorithm']['keylen']} " . gettext("bits") . ")";
+ }
+ }
+?>
+ <?=$spane;?>
+ </td>
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>">
+ <?=$spans;?>
+ <?=$p1_halgos[$ph1ent['hash-algorithm']];?>
+ <?=$spane;?>
+ </td>
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)">
+ <?=$spans;?>
+ <?=htmlspecialchars($ph1ent['descr']);?>&nbsp;
+ <?=$spane;?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td>
+ <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)"
+ name="move_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ title="<?=gettext("move selected entries before this");?>"
+ type="image" style="height:17;width:17;border:0" />
+ </td>
+ <td>
+ <a href="vpn_ipsec_phase1.php?p1index=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit phase1 entry"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="del_<?=$i;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ title="<?=gettext("delete phase1 entry");?>"
+ type="image" style="height:17;width:17;border:0"
+ onclick="return confirm('<?=gettext("Do you really want to delete this phase1 and all associated phase2 entries?"); ?>')" />
+ </td>
+ <td>
+<?php
+ if (!isset($ph1ent['mobile'])):
+?>
+ <a href="vpn_ipsec_phase1.php?dup=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("copy phase1 entry"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="listt">&nbsp;</td>
+ <td class="listt">&nbsp;</td>
+ <td class="listrborder" colspan="6">
+<?php
+ if (isset($_POST["tdph2-{$i}-visible"])) {
+ $tdph2_visible = htmlspecialchars($_POST["tdph2-{$i}-visible"]);
+ } else {
+ $tdph2_visible = 0;
+ }
+?>
+ <input type="hidden" name="tdph2-<?=$i;?>-visible" id="tdph2-<?=$i;?>-visible" value="<?=$tdph2_visible?>" />
+ <div id="shph2but-<?=$i?>" <?php echo ($tdph2_visible == '1' ? 'style="display:none"' : '');?>>
+<?php
+ $phase2count = 0;
+ foreach ($a_phase2 as $ph2ent) {
+ if ($ph2ent['ikeid'] != $ph1ent['ikeid']) {
+ continue;
+ }
+ $phase2count++;
+ }
+ $fr_prefix = "frp2{$i}";
+ $fr_header = $fr_prefix . "header";
+?>
+ <input type="button" onclick="show_phase2('tdph2-<?=$i?>', 'shph2but-<?=$i?>')" value="+" /> - <?php printf(gettext("Show %s Phase-2 entries"), $phase2count); ?>
+ </div>
+ <div id="tdph2-<?=$i?>" <?php echo ($tdph2_visible != '1' ? 'style="display:none"' : '');?>>
+ <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0" summary="phase-2 entries">
+ <tr id="<?=$fr_header;?>">
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td class="listhdrr"><?=gettext("Mode"); ?></td>
+ <td class="listhdrr"><?=gettext("Local Subnet"); ?></td>
+ <td class="listhdrr"><?=gettext("Remote Subnet"); ?></td>
+ <td class="listhdrr"><?=gettext("P2 Protocol"); ?></td>
+ <td class="listhdrr"><?=gettext("P2 Transforms"); ?></td>
+ <td class="listhdrr"><?=gettext("P2 Auth Methods"); ?></td>
+ <td class ="list">&nbsp;</td>
+ </tr>
+<?php
+ $j = 0;
+ foreach ($a_phase2 as $ph2index => $ph2ent):
+ if ($ph2ent['ikeid'] != $ph1ent['ikeid']) {
+ continue;
+ }
+
+ $fr_c = $fr_prefix . "c" . $j;
+ $fr_d = $fr_prefix . "d" . $j;
+
+ $iconfn = "pass";
+ $spans = $spane = "";
+ if (isset($ph2ent['disabled']) || isset($ph1ent['disabled'])) {
+ $spans = "<span class=\"gray\">";
+ $spane = "</span>";
+ $iconfn .= "_d";
+ }
+?>
+ <tr valign="top" id="<?=$fr_prefix . $j;?>" ondblclick="document.location='vpn_ipsec_phase2.php?p2index=<?=$ph2ent['uniqid'];?>'">
+ <td class="listt" align="center" valign="middle">
+ <input type="checkbox" id="<?=$fr_c;?>" name="p2entry[]" value="<?=$ph2index;?>" onclick="fr_bgcolor('<?=$j;?>', '<?=$fr_prefix;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+ </td>
+ <td class="listt" align="center" valign="middle">
+ <input name="togglep2_<?=$ph2index;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn?>.gif"
+ title="<?=gettext("click to toggle enabled/disabled status");?>"
+ type="image" style="height:11;width:11;border:0" />
+ </td>
+ <td class="listlr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+ <?=$ph2ent['mode'];?>
+ <?=$spane;?>
+ </td>
+<?php
+ if (($ph2ent['mode'] == "tunnel") or ($ph2ent['mode'] == "tunnel6")):
+?>
+ <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+ <?=ipsec_idinfo_to_text($ph2ent['localid']); ?>
+ <?=$spane;?>
+ </td>
+ <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+ <?=ipsec_idinfo_to_text($ph2ent['remoteid']); ?>
+ <?=$spane;?>
+ </td>
+<?php
+ else:
+ echo "<td class=\"listr nowrap\">&nbsp;</td><td class=\"listr nowrap\">&nbsp;</td>";
+ endif;
+?>
+ <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+ <?php echo $p2_protos[$ph2ent['protocol']]; ?>
+ <?=$spane;?>
+ </td>
+ <td class="listr" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+<?php
+ foreach ($ph2ent['encryption-algorithm-option'] as $k => $ph2ea) {
+ if ($k) {
+ echo ", ";
+ }
+ echo $p2_ealgos[$ph2ea['name']]['name'];
+ if ($ph2ea['keylen']) {
+ if ($ph2ea['keylen'] == "auto") {
+ echo " (" . gettext("auto") . ")";
+ } else {
+ echo " ({$ph2ea['keylen']} " . gettext("bits") . ")";
+ }
+ }
+ }
+?>
+ <?=$spane;?>
+ </td>
+ <td class="listr nowrap" id="<?=$fr_d;?>" onclick="fr_toggle('<?=$j;?>', '<?=$fr_prefix;?>')">
+ <?=$spans;?>
+<?php
+ if (!empty($ph2ent['hash-algorithm-option']) && is_array($ph2ent['hash-algorithm-option'])) {
+ foreach ($ph2ent['hash-algorithm-option'] as $k => $ph2ha) {
+ if ($k) {
+ echo ", ";
+ }
+ echo $p2_halgos[$ph2ha];
+ }
+ }
+?>
+ <?=$spane;?>
+ </td>
+ <td class="list nowrap" valign="middle">
+ <input onmouseover="fr_insline(<?=$j;?>, true, '<?=$fr_prefix;?>')" onmouseout="fr_insline(<?=$j;?>, false, '<?=$fr_prefix;?>')"
+ name="movep2_<?=$j;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif"
+ title="<?=gettext("move selected entries before this");?>"
+ type="image" style="height:17;width:17;border:0" />
+ <a href="vpn_ipsec_phase2.php?p2index=<?=$ph2ent['uniqid'];?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit phase2 entry"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ <input name="delp2_<?=$ph2index;?>" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ title="<?=gettext("delete phase2 entry");?>"
+ type="image" style="height:17;width:17;border:0"
+ onclick="return confirm('<?=gettext("Do you really want to delete this phase2 entry?"); ?>')" />
+ <a href="vpn_ipsec_phase2.php?dup=<?=$ph2ent['uniqid'];?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add a new Phase 2 based on this one"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+<?php
+ $j++;
+ endforeach;
+?>
+ <tr valign="top" id="<?=$fr_prefix . $j;?>">
+ <td class="list" colspan="8"></td>
+ <td class="list nowrap" valign="middle">
+<?php
+ if ($j == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected phase2 entries to end");?>" border="0" alt="move" />
+<?php
+ else:
+?>
+ <input onmouseover="fr_insline(<?=$j;?>, true, '<?=$fr_prefix;?>')" onmouseout="fr_insline(<?=$j;?>, false, '<?=$fr_prefix;?>')" name="movep2_<?=$j;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected phase2 entries to end");?>" />
+<?php
+ endif;
+?>
+ <a href="vpn_ipsec_phase2.php?ikeid=<?=$ph1ent['ikeid'];?><?php if (isset($ph1ent['mobile'])) echo "&amp;mobile=true";?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add phase2 entry"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+<?php
+ if ($j == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected phase2 entries");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="delp2" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected phase2 entries");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected phase2 entries?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach; // $a_phase1 as $ph1ent
+?>
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="list" colspan="8"></td>
+ <td class="list nowrap" valign="middle">
+ <table border="0" cellspacing="0" cellpadding="1" summary="edit">
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_left_d.gif" width="17" height="17" title="<?=gettext("move selected phase1 entries to end");?>" border="0" alt="move" />
+<?php
+ else:
+?>
+ <input onmouseover="fr_insline(<?=$i;?>, true)" onmouseout="fr_insline(<?=$i;?>, false)" name="move_<?=$i;?>" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_left.gif" style="width:17;height:17;border:0" title="<?=gettext("move selected phase1 entries to end");?>" />
+<?php
+ endif;
+?>
+ </td>
+ <td>
+ <a href="vpn_ipsec_phase1.php">
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add new phase1");?>" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" title="<?=gettext("delete selected phase1 entries");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" style="width:17;height:17" title="<?=gettext("delete selected phase1 entries");?>" onclick="return confirm('<?=gettext("Do you really want to delete the selected phase1 entries?");?>')" />
+<?php
+ endif;
+?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("Note"); ?>:<br /></strong>
+ </span>
+ <?=gettext("You can check your IPsec status at"); ?> <a href="diag_ipsec.php"><?=gettext("Status:IPsec"); ?></a>.<br />
+ <?=gettext("IPsec Debug Mode can be enabled at"); ?> <a href="vpn_ipsec_settings.php"><?=gettext("VPN:IPsec:Advanced Settings"); ?></a>.<br />
+ <?=gettext("IPsec can be set to prefer older SAs at"); ?> <a href="vpn_ipsec_settings.php"><?=gettext("VPN:IPsec:Advanced Settings"); ?></a>.
+ </span>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function show_phase2(id, buttonid) {
+ document.getElementById(buttonid).innerHTML='';
+ document.getElementById(id).style.display = "block";
+ var visible = id + '-visible';
+ document.getElementById(visible).value = "1";
+}
+//]]>
+</script>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_ipsec_keys.php b/src/usr/local/www/vpn_ipsec_keys.php
new file mode 100644
index 0000000..8c30d6b
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_keys.php
@@ -0,0 +1,230 @@
+<?php
+/*
+ vpn_ipsec_keys.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-listkeys
+##|*NAME=VPN: IPsec: Pre-Shared Keys List
+##|*DESCR=Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page.
+##|*MATCH=vpn_ipsec_keys.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+require_once("filter.inc");
+
+if (!is_array($config['ipsec']['mobilekey'])) {
+ $config['ipsec']['mobilekey'] = array();
+}
+ipsec_mobilekey_sort();
+$a_secret = &$config['ipsec']['mobilekey'];
+
+$userkeys = array();
+foreach ($config['system']['user'] as $id => $user) {
+ if (!empty($user['ipsecpsk'])) {
+ $userkeys[] = array('ident' => $user['name'], 'type' => 'PSK', 'pre-shared-key' => $user['ipsecpsk'], 'id' => $id);;
+ }
+}
+
+if (isset($_POST['apply'])) {
+ $retval = vpn_ipsec_configure();
+ /* reload the filter in the background */
+ filter_configure();
+ $savemsg = get_std_save_message($retval);
+ if (is_subsystem_dirty('ipsec')) {
+ clear_subsystem_dirty('ipsec');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_secret[$_GET['id']]) {
+ unset($a_secret[$_GET['id']]);
+ write_config(gettext("Deleted IPsec Pre-Shared Key"));
+ mark_subsystem_dirty('ipsec');
+ header("Location: vpn_ipsec_keys.php");
+ exit;
+ }
+}
+
+$pgtitle = gettext("VPN: IPsec: Keys");
+$shortcut_section = "ipsec";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="vpn_ipsec_keys.php" method="post">
+<?php
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+if (is_subsystem_dirty('ipsec')) {
+ print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
+}
+?>
+</form>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec keys">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Keys"), true, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
+ <tr>
+ <td class="listhdrr"><?=gettext("Identifier"); ?></td>
+ <td class="listhdrr"><?=gettext("Type"); ?></td>
+ <td class="listhdr"><?=gettext("Pre-Shared Key"); ?></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add key">
+ <tr>
+ <td width="20" height="17"></td>
+ <td>
+ <a href="vpn_ipsec_keys_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add key"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($userkeys as $secretent):
+?>
+ <tr>
+ <td class="listlr gray">
+ <?php
+ if ($secretent['ident'] == 'allusers') {
+ echo gettext("ANY USER");
+ } else {
+ echo htmlspecialchars($secretent['ident']);
+ }
+ ?>
+ </td>
+ <td class="listlr gray">
+ <?php
+ if (empty($secretent['type'])) {
+ echo 'PSK';
+ } else {
+ echo htmlspecialchars($secretent['type']);
+ }
+ ?>
+ </td>
+ <td class="listr gray">
+ <?=htmlspecialchars($secretent['pre-shared-key']);?>
+ </td>
+ <td class="list nowrap">
+ <form action="system_usermanager.php" method="post" name="form_edit_key">
+ <input type="hidden" name="act" value="edit" />
+ <input type="hidden" name="userid" value="<?=$secretent['id'];?>" />
+ <input type="image" name="edituser[]" width="17" height="17" border="0"
+ src="/themes/<?=$g['theme'];?>/images/icons/icon_e.gif"
+ title="<?=gettext("edit");?>" />
+ </form>
+ &nbsp;
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+
+<?php
+ $i = 0;
+ foreach ($a_secret as $secretent):
+?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($secretent['ident']);?>
+ </td>
+ <td class="listlr">
+ <?php
+ if (empty($secretent['type'])) {
+ echo 'PSK';
+ } else {
+ echo htmlspecialchars($secretent['type']);
+ }
+ ?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($secretent['pre-shared-key']);?>
+ </td>
+ <td class="list nowrap"><a href="vpn_ipsec_keys_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit key"); ?>" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="vpn_ipsec_keys.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this Pre-Shared Key?"); ?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete key"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add key">
+ <tr>
+ <td width="20" height="17"></td>
+ <td>
+ <a href="vpn_ipsec_keys_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add key"); ?>" width="17" height="17" border="0" alt="add" /></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("Note"); ?>:<br /></strong>
+ </span>
+ <?=gettext("PSK for any user can be set by using an identifier of any/ANY");?>
+ </span>
+ </p>
+ </td>
+ </tr>
+</table>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_ipsec_keys_edit.php b/src/usr/local/www/vpn_ipsec_keys_edit.php
new file mode 100644
index 0000000..6419a6b
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_keys_edit.php
@@ -0,0 +1,199 @@
+<?php
+/*
+ vpn_ipsec_keys_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-editkeys
+##|*NAME=VPN: IPsec: Edit Pre-Shared Keys
+##|*DESCR=Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page.
+##|*MATCH=vpn_ipsec_keys_edit.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['ipsec']['mobilekey'])) {
+ $config['ipsec']['mobilekey'] = array();
+}
+ipsec_mobilekey_sort();
+$a_secret = &$config['ipsec']['mobilekey'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_secret[$id]) {
+ $pconfig['ident'] = $a_secret[$id]['ident'];
+ $pconfig['type'] = $a_secret[$id]['type'];
+ $pconfig['psk'] = $a_secret[$id]['pre-shared-key'];
+}
+
+if ($_POST) {
+ $userids = array();
+ foreach ($config['system']['user'] as $uid => $user) {
+ $userids[$user['name']] = $uid;
+ }
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ $reqdfields = explode(" ", "ident psk");
+ $reqdfieldsn = array(gettext("Identifier"), gettext("Pre-Shared Key"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9@\.\-]/", $_POST['ident'])) {
+ $input_errors[] = gettext("The identifier contains invalid characters.");
+ }
+
+ if (array_key_exists($_POST['ident'], $userids)) {
+ $input_errors[] = gettext("A user with this name already exists. Add the key to the user instead.");
+ }
+ unset($userids);
+
+ if (isset($_POST['psk']) && !preg_match('/^[[:ascii:]]*$/', $_POST['psk'])) {
+ $input_errors[] = gettext("Pre-Shared Key contains invalid characters.");
+ }
+
+ if (!$input_errors && !(isset($id) && $a_secret[$id])) {
+ /* make sure there are no dupes */
+ foreach ($a_secret as $secretent) {
+ if ($secretent['ident'] == $_POST['ident']) {
+ $input_errors[] = gettext("Another entry with the same identifier already exists.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+
+ if (isset($id) && $a_secret[$id]) {
+ $secretent = $a_secret[$id];
+ }
+
+ $secretent['ident'] = $_POST['ident'];
+ $secretent['type'] = $_POST['type'];
+ $secretent['pre-shared-key'] = $_POST['psk'];
+ $text = "";
+
+ if (isset($id) && $a_secret[$id]) {
+ $a_secret[$id] = $secretent;
+ $text = gettext("Edited");
+ } else {
+ $a_secret[] = $secretent;
+ $text = gettext("Added");
+ }
+
+ write_config("{$text} IPsec Pre-Shared Keys");
+ mark_subsystem_dirty('ipsec');
+
+ header("Location: vpn_ipsec_keys.php");
+ exit;
+ }
+}
+
+$pgtitle = gettext("VPN: IPsec: Edit Pre-Shared Key");
+$shortcut_section = "ipsec";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<form action="vpn_ipsec_keys_edit.php" method="post" name="iform" id="iform">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn ipsec keys edit">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">Edit pre-shared secret</td>
+ </tr>
+ <tr>
+ <td valign="top" class="vncellreq"><?=gettext("Identifier"); ?></td>
+ <td class="vtable">
+ <?=$mandfldhtml;?><input name="ident" type="text" class="formfld unknown" id="ident" size="30" value="<?=htmlspecialchars($pconfig['ident']);?>" />
+ <br />
+ <?=gettext("This can be either an IP address, fully qualified domain name or an e-mail address"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Secret type"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="type" class="formselect">
+ <?php
+ foreach ($ipsec_preshared_key_type as $value => $descr) {
+ echo "<option value='{$value}' ";
+ if ($pconfig['type'] == $value) {
+ echo "selected=\"selected\"";
+ }
+ echo ">{$descr}</option>";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Pre-Shared Key"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="psk" type="text" class="formfld unknown" id="psk" size="40" value="<?=htmlspecialchars($pconfig['psk']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <?php if (isset($id) && $a_secret[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p>
+ <span class="vexpl">
+ <span class="red">
+ <strong><?=gettext("Note"); ?>:<br /></strong>
+ </span>
+ <?=gettext("PSK for any user can be set by using an identifier of any/ANY");?>
+ </span>
+ </p>
+ </td>
+ </tr>
+ </table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_ipsec_mobile.php b/src/usr/local/www/vpn_ipsec_mobile.php
new file mode 100644
index 0000000..bb1ef75
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_mobile.php
@@ -0,0 +1,740 @@
+<?php
+/*
+ vpn_ipsec_mobile.php
+
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-mobile
+##|*NAME=VPN: IPsec: Mobile page
+##|*DESCR=Allow access to the 'VPN: IPsec: Mobile' page.
+##|*MATCH=vpn_ipsec_mobile.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+require_once("filter.inc");
+
+if (!is_array($config['ipsec']['phase1'])) {
+ $config['ipsec']['phase1'] = array();
+}
+
+$a_phase1 = &$config['ipsec']['phase1'];
+
+if (!is_array($config['ipsec']['client'])) {
+ $config['ipsec']['client'] = array();
+}
+
+$a_client = &$config['ipsec']['client'];
+
+if (count($a_client)) {
+
+ $pconfig['enable'] = $a_client['enable'];
+
+ $pconfig['user_source'] = $a_client['user_source'];
+ $pconfig['group_source'] = $a_client['group_source'];
+
+ $pconfig['pool_address'] = $a_client['pool_address'];
+ $pconfig['pool_netbits'] = $a_client['pool_netbits'];
+ $pconfig['net_list'] = $a_client['net_list'];
+ $pconfig['save_passwd'] = $a_client['save_passwd'];
+ $pconfig['dns_domain'] = $a_client['dns_domain'];
+ $pconfig['dns_split'] = $a_client['dns_split'];
+ $pconfig['dns_server1'] = $a_client['dns_server1'];
+ $pconfig['dns_server2'] = $a_client['dns_server2'];
+ $pconfig['dns_server3'] = $a_client['dns_server3'];
+ $pconfig['dns_server4'] = $a_client['dns_server4'];
+ $pconfig['wins_server1'] = $a_client['wins_server1'];
+ $pconfig['wins_server2'] = $a_client['wins_server2'];
+ $pconfig['pfs_group'] = $a_client['pfs_group'];
+ $pconfig['login_banner'] = $a_client['login_banner'];
+
+ if (isset($pconfig['enable'])) {
+ $pconfig['enable'] = true;
+ }
+
+ if ($pconfig['pool_address']&&$pconfig['pool_netbits']) {
+ $pconfig['pool_enable'] = true;
+ } else {
+ $pconfig['pool_netbits'] = 24;
+ }
+
+ if (isset($pconfig['net_list'])) {
+ $pconfig['net_list_enable'] = true;
+ }
+
+ if (isset($pconfig['save_passwd'])) {
+ $pconfig['save_passwd_enable'] = true;
+ }
+
+ if ($pconfig['dns_domain']) {
+ $pconfig['dns_domain_enable'] = true;
+ }
+
+ if ($pconfig['dns_split']) {
+ $pconfig['dns_split_enable'] = true;
+ }
+
+ if ($pconfig['dns_server1']||$pconfig['dns_server2']||$pconfig['dns_server3']||$pconfig['dns_server4']) {
+ $pconfig['dns_server_enable'] = true;
+ }
+
+ if ($pconfig['wins_server1']||$pconfig['wins_server2']) {
+ $pconfig['wins_server_enable'] = true;
+ }
+
+ if (isset($pconfig['pfs_group'])) {
+ $pconfig['pfs_group_enable'] = true;
+ }
+
+ if ($pconfig['login_banner']) {
+ $pconfig['login_banner_enable'] = true;
+ }
+}
+
+if ($_POST['create']) {
+ header("Location: vpn_ipsec_phase1.php?mobile=true");
+}
+
+if ($_POST['apply']) {
+ $retval = 0;
+ /* NOTE: #4353 Always restart ipsec when mobile clients settings change */
+ $retval = vpn_ipsec_configure(true);
+ $savemsg = get_std_save_message($retval);
+ if ($retval >= 0) {
+ if (is_subsystem_dirty('ipsec')) {
+ clear_subsystem_dirty('ipsec');
+ }
+ }
+}
+
+if ($_POST['submit']) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input consolidation */
+
+ /* input validation */
+
+ $reqdfields = explode(" ", "user_source group_source");
+ $reqdfieldsn = array(gettext("User Authentication Source"), gettext("Group Authentication Source"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if ($pconfig['pool_enable']) {
+ if (!is_ipaddr($pconfig['pool_address'])) {
+ $input_errors[] = gettext("A valid IP address for 'Virtual Address Pool Network' must be specified.");
+ }
+ }
+ if ($pconfig['dns_domain_enable']) {
+ if (!is_domain($pconfig['dns_domain'])) {
+ $input_errors[] = gettext("A valid value for 'DNS Default Domain' must be specified.");
+ }
+ }
+ if ($pconfig['dns_split_enable']) {
+ if (!empty($pconfig['dns_split'])) {
+ /* Replace multiple spaces by single */
+ $pconfig['dns_split'] = preg_replace('/\s+/', ' ', trim($pconfig['dns_split']));
+ $domain_array = explode(' ', $pconfig['dns_split']);
+ foreach ($domain_array as $curdomain) {
+ if (!is_domain($curdomain)) {
+ $input_errors[] = gettext("A valid split DNS domain list must be specified.");
+ break;
+ }
+ }
+ }
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ if (!$pconfig['dns_server1'] && !$pconfig['dns_server2'] &&
+ !$pconfig['dns_server3'] && !$pconfig['dns_server4']) {
+ $input_errors[] = gettext("At least one DNS server must be specified to enable the DNS Server option.");
+ }
+ if ($pconfig['dns_server1'] && !is_ipaddr($pconfig['dns_server1'])) {
+ $input_errors[] = gettext("A valid IP address for 'DNS Server #1' must be specified.");
+ }
+ if ($pconfig['dns_server2'] && !is_ipaddr($pconfig['dns_server2'])) {
+ $input_errors[] = gettext("A valid IP address for 'DNS Server #2' must be specified.");
+ }
+ if ($pconfig['dns_server3'] && !is_ipaddr($pconfig['dns_server3'])) {
+ $input_errors[] = gettext("A valid IP address for 'DNS Server #3' must be specified.");
+ }
+ if ($pconfig['dns_server4'] && !is_ipaddr($pconfig['dns_server4'])) {
+ $input_errors[] = gettext("A valid IP address for 'DNS Server #4' must be specified.");
+ }
+ }
+
+ if ($pconfig['wins_server_enable']) {
+ if (!$pconfig['wins_server1'] && !$pconfig['wins_server2']) {
+ $input_errors[] = gettext("At least one WINS server must be specified to enable the DNS Server option.");
+ }
+ if ($pconfig['wins_server1'] && !is_ipaddr($pconfig['wins_server1'])) {
+ $input_errors[] = gettext("A valid IP address for 'WINS Server #1' must be specified.");
+ }
+ if ($pconfig['wins_server2'] && !is_ipaddr($pconfig['wins_server2'])) {
+ $input_errors[] = gettext("A valid IP address for 'WINS Server #2' must be specified.");
+ }
+ }
+
+ if ($pconfig['login_banner_enable']) {
+ if (!strlen($pconfig['login_banner'])) {
+ $input_errors[] = gettext("A valid value for 'Login Banner' must be specified.");
+ }
+ }
+
+ if (!$input_errors) {
+ $client = array();
+
+ if ($pconfig['enable']) {
+ $client['enable'] = true;
+ }
+
+ if (!empty($pconfig['user_source'])) {
+ $client['user_source'] = implode(",", $pconfig['user_source']);
+ }
+ $client['group_source'] = $pconfig['group_source'];
+
+ if ($pconfig['pool_enable']) {
+ $client['pool_address'] = $pconfig['pool_address'];
+ $client['pool_netbits'] = $pconfig['pool_netbits'];
+ }
+
+ if ($pconfig['net_list_enable']) {
+ $client['net_list'] = true;
+ }
+
+ if ($pconfig['save_passwd_enable']) {
+ $client['save_passwd'] = true;
+ }
+
+ if ($pconfig['dns_domain_enable']) {
+ $client['dns_domain'] = $pconfig['dns_domain'];
+ }
+
+ if ($pconfig['dns_split_enable']) {
+ $client['dns_split'] = $pconfig['dns_split'];
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ $client['dns_server1'] = $pconfig['dns_server1'];
+ $client['dns_server2'] = $pconfig['dns_server2'];
+ $client['dns_server3'] = $pconfig['dns_server3'];
+ $client['dns_server4'] = $pconfig['dns_server4'];
+ }
+
+ if ($pconfig['wins_server_enable']) {
+ $client['wins_server1'] = $pconfig['wins_server1'];
+ $client['wins_server2'] = $pconfig['wins_server2'];
+ }
+
+ if ($pconfig['pfs_group_enable']) {
+ $client['pfs_group'] = $pconfig['pfs_group'];
+ }
+
+ if ($pconfig['login_banner_enable']) {
+ $client['login_banner'] = $pconfig['login_banner'];
+ }
+
+ $a_client = $client;
+
+ write_config();
+ mark_subsystem_dirty('ipsec');
+
+ header("Location: vpn_ipsec_mobile.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Mobile"));
+$shortcut_section = "ipsec";
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+function pool_change() {
+
+ if (document.iform.pool_enable.checked) {
+ document.iform.pool_address.disabled = 0;
+ document.iform.pool_netbits.disabled = 0;
+ } else {
+ document.iform.pool_address.disabled = 1;
+ document.iform.pool_netbits.disabled = 1;
+ }
+}
+
+function dns_domain_change() {
+
+ if (document.iform.dns_domain_enable.checked) {
+ document.iform.dns_domain.disabled = 0;
+ } else {
+ document.iform.dns_domain.disabled = 1;
+ }
+}
+
+function dns_split_change() {
+
+ if (document.iform.dns_split_enable.checked) {
+ document.iform.dns_split.disabled = 0;
+ } else {
+ document.iform.dns_split.disabled = 1;
+ }
+}
+
+function dns_server_change() {
+
+ if (document.iform.dns_server_enable.checked) {
+ document.iform.dns_server1.disabled = 0;
+ document.iform.dns_server2.disabled = 0;
+ document.iform.dns_server3.disabled = 0;
+ document.iform.dns_server4.disabled = 0;
+ } else {
+ document.iform.dns_server1.disabled = 1;
+ document.iform.dns_server2.disabled = 1;
+ document.iform.dns_server3.disabled = 1;
+ document.iform.dns_server4.disabled = 1;
+ }
+}
+
+function wins_server_change() {
+
+ if (document.iform.wins_server_enable.checked) {
+ document.iform.wins_server1.disabled = 0;
+ document.iform.wins_server2.disabled = 0;
+ } else {
+ document.iform.wins_server1.disabled = 1;
+ document.iform.wins_server2.disabled = 1;
+ }
+}
+
+function pfs_group_change() {
+
+ if (document.iform.pfs_group_enable.checked) {
+ document.iform.pfs_group.disabled = 0;
+ } else {
+ document.iform.pfs_group.disabled = 1;
+ }
+}
+
+function login_banner_change() {
+
+ if (document.iform.login_banner_enable.checked) {
+ document.iform.login_banner.disabled = 0;
+ } else {
+ document.iform.login_banner.disabled = 1;
+ }
+}
+
+//]]>
+</script>
+
+<form action="vpn_ipsec_mobile.php" method="post" name="iform" id="iform">
+
+<?php
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ if (isset($config['ipsec']['enable']) && is_subsystem_dirty('ipsec')) {
+ print_info_box_np(gettext("The IPsec tunnel configuration has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));
+ }
+ foreach ($a_phase1 as $ph1ent) {
+ if (isset($ph1ent['mobile'])) {
+ $ph1found = true;
+ }
+ }
+ if ($pconfig['enable'] && !$ph1found) {
+ print_info_box_np(gettext("Support for IPsec Mobile clients is enabled but a Phase1 definition was not found") . ".<br />" . gettext("Please click Create to define one."), gettext("create"), gettext("Create Phase1"));
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec mobile">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), true, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Key"), false, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("IKE Extensions"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="ike extensions">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['enable'], $chk); ?>
+ <input name="enable" type="checkbox" id="enable" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <strong><?=gettext("Enable IPsec Mobile Client Support"); ?></strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">
+ <?=gettext("Extended Authentication (Xauth)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("User Authentication"); ?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Source"); ?>:&nbsp;&nbsp;
+ <select name="user_source[]" class="formselect" id="user_source" multiple="multiple" size="3">
+ <?php
+ $authmodes = explode(",", $pconfig['user_source']);
+ $auth_servers = auth_get_authserver_list();
+ foreach ($auth_servers as $auth_server) {
+ $selected = "";
+ if (in_array($auth_server['name'], $authmodes)) {
+ $selected = "selected=\"selected\"";
+ }
+ echo "<option value='{$auth_server['name']}' {$selected}>{$auth_server['name']}</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Group Authentication"); ?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Source"); ?>:&nbsp;&nbsp;
+ <select name="group_source" class="formselect" id="group_source">
+ <option value="none"><?=gettext("none"); ?></option>
+ <option value="system" <?php if ($pconfig['group_source'] == "system") echo "selected=\"selected\""; ?> ><?=gettext("system"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">
+ <?=gettext("Client Configuration (mode-cfg)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Virtual Address Pool"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable pool">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['pool_enable'], $chk); ?>
+ <input name="pool_enable" type="checkbox" id="pool_enable" value="yes" <?=$chk;?> onclick="pool_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a virtual IP address to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="virtual address pool">
+ <tr>
+ <td>
+ <?=gettext("Network"); ?>:&nbsp;
+ <input name="pool_address" type="text" class="formfld unknown" id="pool_address" size="20" value="<?=htmlspecialchars($pconfig['pool_address']);?>" />
+ /
+ <select name="pool_netbits" class="formselect" id="pool_netbits">
+ <?php for ($i = 32; $i >= 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if ($i == $pconfig['pool_netbits']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Network List"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="network list">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['net_list_enable'], $chk); ?>
+ <input name="net_list_enable" type="checkbox" id="net_list_enable" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <?=gettext("Provide a list of accessible networks to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Save Xauth Password"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="password">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['save_passwd_enable'], $chk); ?>
+ <input name="save_passwd_enable" type="checkbox" id="save_passwd_enable" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <?=gettext("Allow clients to save Xauth passwords (Cisco VPN client only)."); ?><br />
+ <?=gettext("NOTE: With iPhone clients, this does not work when deployed via the iPhone configuration utility, only by manual entry."); ?><br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable dns default domain">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
+ <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a default domain name to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="dns default domain">
+ <tr>
+ <td>
+ <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Split DNS"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable split dns">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_split_enable'], $chk); ?>
+ <input name="dns_split_enable" type="checkbox" id="dns_split_enable" value="yes" <?=$chk;?> onclick="dns_split_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a list of split DNS domain names to clients. Enter a space separated list."); ?><br />
+ <?=gettext("NOTE: If left blank, and a default domain is set, it will be used for this value."); ?>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="split dns">
+ <tr>
+ <td>
+ <input name="dns_split" type="text" class="formfld unknown" id="dns_split" size="30" value="<?=htmlspecialchars($pconfig['dns_split']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable dns servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
+ <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a DNS server list to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="dns servers">
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #1:&nbsp;
+ <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #2:&nbsp;
+ <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #3:&nbsp;
+ <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #4:&nbsp;
+ <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable wins servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
+ <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a WINS server list to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="wins servers">
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #1:&nbsp;
+ <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=gettext("Server"); ?> #2:&nbsp;
+ <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Phase2 PFS Group"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable pfs group">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['pfs_group_enable'], $chk); ?>
+ <input name="pfs_group_enable" type="checkbox" id="pfs_group_enable" value="yes" <?=$chk;?> onclick="pfs_group_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide the Phase2 PFS group to clients ( overrides all mobile phase2 settings )"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="phase-2 pfs group">
+ <tr>
+ <td>
+ <?=gettext("Group"); ?>:&nbsp;&nbsp;
+ <select name="pfs_group" class="formselect" id="pfs_group">
+ <?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
+ <option value="<?=$keygroup;?>" <?php if ($pconfig['pfs_group'] == $keygroup) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($keygroupname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Login Banner"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="2" cellpadding="0" summary="enable login banner">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['login_banner_enable'], $chk); ?>
+ <input name="login_banner_enable" type="checkbox" id="login_banner_enable" value="yes" <?=$chk;?> onclick="login_banner_change()" />
+ </td>
+ <td>
+ <?=gettext("Provide a login banner to clients"); ?><br />
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellspacing="2" cellpadding="0" summary="banner">
+ <tr>
+ <td>
+ <?php $banner = htmlspecialchars($pconfig['login_banner']); ?>
+ <textarea name="login_banner" cols="65" rows="7" id="login_banner" class="formpre"><?=htmlspecialchars($banner);?></textarea>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+pool_change();
+dns_domain_change();
+dns_split_change();
+dns_server_change();
+wins_server_change();
+pfs_group_change();
+login_banner_change();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+/* local utility functions */
+
+function set_checked($var,& $chk) {
+ if ($var) {
+ $chk = "checked=\"checked\"";
+ } else {
+ $chk = "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/vpn_ipsec_phase1.php b/src/usr/local/www/vpn_ipsec_phase1.php
new file mode 100644
index 0000000..11a2e90
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_phase1.php
@@ -0,0 +1,1092 @@
+<?php
+/*
+ vpn_ipsec_phase1.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2014 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-editphase1
+##|*NAME=VPN: IPsec: Edit Phase 1 page
+##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 1' page.
+##|*MATCH=vpn_ipsec_phase1.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+require_once("filter.inc");
+
+if (!is_array($config['ipsec']['phase1'])) {
+ $config['ipsec']['phase1'] = array();
+}
+
+if (!is_array($config['ipsec']['phase2'])) {
+ $config['ipsec']['phase2'] = array();
+}
+
+$a_phase1 = &$config['ipsec']['phase1'];
+$a_phase2 = &$config['ipsec']['phase2'];
+
+if (is_numericint($_GET['p1index'])) {
+ $p1index = $_GET['p1index'];
+}
+if (isset($_POST['p1index']) && is_numericint($_POST['p1index'])) {
+ $p1index = $_POST['p1index'];
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ $p1index = $_GET['dup'];
+}
+
+if (isset($p1index) && $a_phase1[$p1index]) {
+ // don't copy the ikeid on dup
+ if (!isset($_GET['dup']) || !is_numericint($_GET['dup'])) {
+ $pconfig['ikeid'] = $a_phase1[$p1index]['ikeid'];
+ }
+
+ $old_ph1ent = $a_phase1[$p1index];
+
+ $pconfig['disabled'] = isset($a_phase1[$p1index]['disabled']);
+
+ if ($a_phase1[$p1index]['interface']) {
+ $pconfig['interface'] = $a_phase1[$p1index]['interface'];
+ } else {
+ $pconfig['interface'] = "wan";
+ }
+
+ list($pconfig['remotenet'], $pconfig['remotebits']) = explode("/", $a_phase1[$p1index]['remote-subnet']);
+
+ if (isset($a_phase1[$p1index]['mobile'])) {
+ $pconfig['mobile'] = 'true';
+ } else {
+ $pconfig['remotegw'] = $a_phase1[$p1index]['remote-gateway'];
+ }
+
+ if (empty($a_phase1[$p1index]['iketype'])) {
+ $pconfig['iketype'] = "ikev1";
+ } else {
+ $pconfig['iketype'] = $a_phase1[$p1index]['iketype'];
+ }
+ $pconfig['mode'] = $a_phase1[$p1index]['mode'];
+ $pconfig['protocol'] = $a_phase1[$p1index]['protocol'];
+ $pconfig['myid_type'] = $a_phase1[$p1index]['myid_type'];
+ $pconfig['myid_data'] = $a_phase1[$p1index]['myid_data'];
+ $pconfig['peerid_type'] = $a_phase1[$p1index]['peerid_type'];
+ $pconfig['peerid_data'] = $a_phase1[$p1index]['peerid_data'];
+ $pconfig['ealgo'] = $a_phase1[$p1index]['encryption-algorithm'];
+ $pconfig['halgo'] = $a_phase1[$p1index]['hash-algorithm'];
+ $pconfig['dhgroup'] = $a_phase1[$p1index]['dhgroup'];
+ $pconfig['lifetime'] = $a_phase1[$p1index]['lifetime'];
+ $pconfig['authentication_method'] = $a_phase1[$p1index]['authentication_method'];
+
+ if (($pconfig['authentication_method'] == "pre_shared_key") ||
+ ($pconfig['authentication_method'] == "xauth_psk_server")) {
+ $pconfig['pskey'] = $a_phase1[$p1index]['pre-shared-key'];
+ } else {
+ $pconfig['certref'] = $a_phase1[$p1index]['certref'];
+ $pconfig['caref'] = $a_phase1[$p1index]['caref'];
+ }
+
+ $pconfig['descr'] = $a_phase1[$p1index]['descr'];
+ $pconfig['nat_traversal'] = $a_phase1[$p1index]['nat_traversal'];
+ $pconfig['mobike'] = $a_phase1[$p1index]['mobike'];
+
+ if (isset($a_phase1[$p1index]['reauth_enable'])) {
+ $pconfig['reauth_enable'] = true;
+ }
+ if (isset($a_phase1[$p1index]['rekey_enable'])) {
+ $pconfig['rekey_enable'] = true;
+ }
+ if (isset($a_phase1[$p1index]['responderonly'])) {
+ $pconfig['responderonly'] = true;
+ }
+
+ if ($a_phase1[$p1index]['dpd_delay'] && $a_phase1[$p1index]['dpd_maxfail']) {
+ $pconfig['dpd_enable'] = true;
+ $pconfig['dpd_delay'] = $a_phase1[$p1index]['dpd_delay'];
+ $pconfig['dpd_maxfail'] = $a_phase1[$p1index]['dpd_maxfail'];
+ }
+} else {
+ /* defaults */
+ $pconfig['interface'] = "wan";
+ if ($config['interfaces']['lan']) {
+ $pconfig['localnet'] = "lan";
+ }
+ $pconfig['mode'] = "main";
+ $pconfig['protocol'] = "inet";
+ $pconfig['myid_type'] = "myaddress";
+ $pconfig['peerid_type'] = "peeraddress";
+ $pconfig['authentication_method'] = "pre_shared_key";
+ $pconfig['ealgo'] = array(name => "aes");
+ $pconfig['halgo'] = "sha1";
+ $pconfig['dhgroup'] = "2";
+ $pconfig['lifetime'] = "28800";
+ $pconfig['nat_traversal'] = 'on';
+ $pconfig['mobike'] = 'off';
+ $pconfig['dpd_enable'] = true;
+ $pconfig['iketype'] = "ikev1";
+
+ /* mobile client */
+ if ($_GET['mobile']) {
+ $pconfig['mobile'] = true;
+ $pconfig['mode'] = "aggressive";
+ }
+}
+
+if (isset($_GET['dup']) && is_numericint($_GET['dup'])) {
+ unset($p1index);
+}
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+
+ $method = $pconfig['authentication_method'];
+ // Unset ca and cert if not required to avoid storing in config
+ if ($method == "pre_shared_key" || $method == "xauth_psk_server") {
+ unset($pconfig['caref']);
+ unset($pconfig['certref']);
+ }
+
+ // Only require PSK here for normal PSK tunnels (not mobile) or xauth.
+ // For RSA methods, require the CA/Cert.
+ switch ($method) {
+ case 'eap-mschapv2':
+ if ($pconfig['iketype'] != 'ikev2') {
+ $input_errors[] = gettext("EAP-MSChapv2 can only be used with IKEv2 type VPNs.");
+ }
+ break;
+ case "eap-tls":
+ if ($pconfig['iketype'] != 'ikev2') {
+ $input_errors[] = gettext("EAP-TLS can only be used with IKEv2 type VPNs.");
+ }
+ break;
+ case "eap-radius":
+ if ($pconfig['iketype'] != 'ikev2') {
+ $input_errors[] = gettext("EAP-RADIUS can only be used with IKEv2 type VPNs.");
+ }
+ break;
+ case "pre_shared_key":
+ // If this is a mobile PSK tunnel the user PSKs go on
+ // the PSK tab, not here, so skip the check.
+ if ($pconfig['mobile']) {
+ break;
+ }
+ case "xauth_psk_server":
+ $reqdfields = explode(" ", "pskey");
+ $reqdfieldsn = array(gettext("Pre-Shared Key"));
+ $validate_pskey = true;
+ break;
+ case "hybrid_rsa_server":
+ case "xauth_rsa_server":
+ case "rsasig":
+ $reqdfields = explode(" ", "caref certref");
+ $reqdfieldsn = array(gettext("Certificate Authority"), gettext("Certificate"));
+ break;
+ }
+ if (!$pconfig['mobile']) {
+ $reqdfields[] = "remotegw";
+ $reqdfieldsn[] = gettext("Remote gateway");
+ }
+
+ do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (isset($validate_pskey) && isset($pconfig['pskey']) && !preg_match('/^[[:ascii:]]*$/', $pconfig['pskey'])) {
+ unset($validate_pskey);
+ $input_errors[] = gettext("Pre-Shared Key contains invalid characters.");
+ }
+
+ if (($pconfig['lifetime'] && !is_numeric($pconfig['lifetime']))) {
+ $input_errors[] = gettext("The P1 lifetime must be an integer.");
+ }
+
+ if ($pconfig['remotegw']) {
+ if (!is_ipaddr($pconfig['remotegw']) && !is_domain($pconfig['remotegw'])) {
+ $input_errors[] = gettext("A valid remote gateway address or host name must be specified.");
+ } elseif (is_ipaddrv4($pconfig['remotegw']) && ($pconfig['protocol'] != "inet")) {
+ $input_errors[] = gettext("A valid remote gateway IPv4 address must be specified or you need to change protocol to IPv6");
+ } elseif (is_ipaddrv6($pconfig['remotegw']) && ($pconfig['protocol'] != "inet6")) {
+ $input_errors[] = gettext("A valid remote gateway IPv6 address must be specified or you need to change protocol to IPv4");
+ }
+ }
+
+ if ($pconfig['remotegw'] && is_ipaddr($pconfig['remotegw']) && !isset($pconfig['disabled'])) {
+ $t = 0;
+ foreach ($a_phase1 as $ph1tmp) {
+ if ($p1index <> $t) {
+ $tremotegw = $pconfig['remotegw'];
+ if (($ph1tmp['remote-gateway'] == $tremotegw) && !isset($ph1tmp['disabled'])) {
+ $input_errors[] = sprintf(gettext('The remote gateway "%1$s" is already used by phase1 "%2$s".'), $tremotegw, $ph1tmp['descr']);
+ }
+ }
+ $t++;
+ }
+ }
+
+ if (is_array($a_phase2) && (count($a_phase2))) {
+ foreach ($a_phase2 as $phase2) {
+ if ($phase2['ikeid'] == $pconfig['ikeid']) {
+ if (($pconfig['protocol'] == "inet") && ($phase2['mode'] == "tunnel6")) {
+ $input_errors[] = gettext("There is a Phase 2 using IPv6, you cannot use IPv4.");
+ break;
+ }
+ if (($pconfig['protocol'] == "inet6") && ($phase2['mode'] == "tunnel")) {
+ $input_errors[] = gettext("There is a Phase 2 using IPv4, you cannot use IPv6.");
+ break;
+ }
+ }
+ }
+ }
+
+ /* My identity */
+
+ if ($pconfig['myid_type'] == "myaddress") {
+ $pconfig['myid_data'] = "";
+ }
+
+ if ($pconfig['myid_type'] == "address" and $pconfig['myid_data'] == "") {
+ $input_errors[] = gettext("Please enter an address for 'My Identifier'");
+ }
+
+ if ($pconfig['myid_type'] == "keyid tag" and $pconfig['myid_data'] == "") {
+ $input_errors[] = gettext("Please enter a keyid tag for 'My Identifier'");
+ }
+
+ if ($pconfig['myid_type'] == "fqdn" and $pconfig['myid_data'] == "") {
+ $input_errors[] = gettext("Please enter a fully qualified domain name for 'My Identifier'");
+ }
+
+ if ($pconfig['myid_type'] == "user_fqdn" and $pconfig['myid_data'] == "") {
+ $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'My Identifier'");
+ }
+
+ if ($pconfig['myid_type'] == "dyn_dns" and $pconfig['myid_data'] == "") {
+ $input_errors[] = gettext("Please enter a dynamic domain name for 'My Identifier'");
+ }
+
+ if (($pconfig['myid_type'] == "address") && !is_ipaddr($pconfig['myid_data'])) {
+ $input_errors[] = gettext("A valid IP address for 'My identifier' must be specified.");
+ }
+
+ if (($pconfig['myid_type'] == "fqdn") && !is_domain($pconfig['myid_data'])) {
+ $input_errors[] = gettext("A valid domain name for 'My identifier' must be specified.");
+ }
+
+ if ($pconfig['myid_type'] == "fqdn") {
+ if (is_domain($pconfig['myid_data']) == false) {
+ $input_errors[] = gettext("A valid FQDN for 'My identifier' must be specified.");
+ }
+ }
+
+ if ($pconfig['myid_type'] == "user_fqdn") {
+ $user_fqdn = explode("@", $pconfig['myid_data']);
+ if (is_domain($user_fqdn[1]) == false) {
+ $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'My identifier' must be specified.");
+ }
+ }
+
+ if ($pconfig['myid_type'] == "dyn_dns") {
+ if (is_domain($pconfig['myid_data']) == false) {
+ $input_errors[] = gettext("A valid Dynamic DNS address for 'My identifier' must be specified.");
+ }
+ }
+
+ /* Peer identity */
+
+ if ($pconfig['myid_type'] == "peeraddress") {
+ $pconfig['peerid_data'] = "";
+ }
+
+ // Only enforce peer ID if we are not dealing with a pure-psk mobile config.
+ if (!(($pconfig['authentication_method'] == "pre_shared_key") && ($pconfig['mobile']))) {
+ if ($pconfig['peerid_type'] == "address" and $pconfig['peerid_data'] == "") {
+ $input_errors[] = gettext("Please enter an address for 'Peer Identifier'");
+ }
+
+ if ($pconfig['peerid_type'] == "keyid tag" and $pconfig['peerid_data'] == "") {
+ $input_errors[] = gettext("Please enter a keyid tag for 'Peer Identifier'");
+ }
+
+ if ($pconfig['peerid_type'] == "fqdn" and $pconfig['peerid_data'] == "") {
+ $input_errors[] = gettext("Please enter a fully qualified domain name for 'Peer Identifier'");
+ }
+
+ if ($pconfig['peerid_type'] == "user_fqdn" and $pconfig['peerid_data'] == "") {
+ $input_errors[] = gettext("Please enter a user and fully qualified domain name for 'Peer Identifier'");
+ }
+
+ if ((($pconfig['peerid_type'] == "address") && !is_ipaddr($pconfig['peerid_data']))) {
+ $input_errors[] = gettext("A valid IP address for 'Peer identifier' must be specified.");
+ }
+
+ if ((($pconfig['peerid_type'] == "fqdn") && !is_domain($pconfig['peerid_data']))) {
+ $input_errors[] = gettext("A valid domain name for 'Peer identifier' must be specified.");
+ }
+
+ if ($pconfig['peerid_type'] == "fqdn") {
+ if (is_domain($pconfig['peerid_data']) == false) {
+ $input_errors[] = gettext("A valid FQDN for 'Peer identifier' must be specified.");
+ }
+ }
+
+ if ($pconfig['peerid_type'] == "user_fqdn") {
+ $user_fqdn = explode("@", $pconfig['peerid_data']);
+ if (is_domain($user_fqdn[1]) == false) {
+ $input_errors[] = gettext("A valid User FQDN in the form of user@my.domain.com for 'Peer identifier' must be specified.");
+ }
+ }
+ }
+
+ if ($pconfig['dpd_enable']) {
+ if (!is_numeric($pconfig['dpd_delay'])) {
+ $input_errors[] = gettext("A numeric value must be specified for DPD delay.");
+ }
+
+ if (!is_numeric($pconfig['dpd_maxfail'])) {
+ $input_errors[] = gettext("A numeric value must be specified for DPD retries.");
+ }
+ }
+
+ if (!empty($pconfig['iketype']) && $pconfig['iketype'] != "ikev1" && $pconfig['iketype'] != "ikev2") {
+ $input_errors[] = gettext("Valid arguments for IKE type is v1 or v2");
+ }
+
+ if (!empty($_POST['ealgo']) && isset($config['system']['crypto_hardware'])) {
+ if ($config['system']['crypto_hardware'] == "glxsb") {
+ if ($_POST['ealgo'] == "aes" && $_POST['ealgo_keylen'] != "128") {
+ $input_errors[] = gettext("Only 128 bit AES can be used where the glxsb crypto accelerator is enabled.");
+ }
+ }
+ }
+
+ /* build our encryption algorithms array */
+ $pconfig['ealgo'] = array();
+ $pconfig['ealgo']['name'] = $_POST['ealgo'];
+ if ($pconfig['ealgo_keylen']) {
+ $pconfig['ealgo']['keylen'] = $_POST['ealgo_keylen'];
+ }
+
+ if (!$input_errors) {
+ $ph1ent['ikeid'] = $pconfig['ikeid'];
+ $ph1ent['iketype'] = $pconfig['iketype'];
+ if ($pconfig['iketype'] != 'ikev1') {
+ unset($ph1ent['mode']);
+ } else {
+ $ph1ent['mode'] = $pconfig['mode'];
+ }
+ $ph1ent['disabled'] = $pconfig['disabled'] ? true : false;
+ $ph1ent['interface'] = $pconfig['interface'];
+ /* if the remote gateway changed and the interface is not WAN then remove route */
+ /* the vpn_ipsec_configure() handles adding the route */
+ if ($pconfig['interface'] <> "wan") {
+ if ($old_ph1ent['remote-gateway'] <> $pconfig['remotegw']) {
+ mwexec("/sbin/route delete -host {$old_ph1ent['remote-gateway']}");
+ }
+ }
+
+ if ($pconfig['mobile']) {
+ $ph1ent['mobile'] = true;
+ } else {
+ $ph1ent['remote-gateway'] = $pconfig['remotegw'];
+ }
+
+ $ph1ent['protocol'] = $pconfig['protocol'];
+
+ $ph1ent['myid_type'] = $pconfig['myid_type'];
+ $ph1ent['myid_data'] = $pconfig['myid_data'];
+ $ph1ent['peerid_type'] = $pconfig['peerid_type'];
+ $ph1ent['peerid_data'] = $pconfig['peerid_data'];
+
+ $ph1ent['encryption-algorithm'] = $pconfig['ealgo'];
+ $ph1ent['hash-algorithm'] = $pconfig['halgo'];
+ $ph1ent['dhgroup'] = $pconfig['dhgroup'];
+ $ph1ent['lifetime'] = $pconfig['lifetime'];
+ $ph1ent['pre-shared-key'] = $pconfig['pskey'];
+ $ph1ent['private-key'] = base64_encode($pconfig['privatekey']);
+ $ph1ent['certref'] = $pconfig['certref'];
+ $ph1ent['caref'] = $pconfig['caref'];
+ $ph1ent['authentication_method'] = $pconfig['authentication_method'];
+ $ph1ent['descr'] = $pconfig['descr'];
+ $ph1ent['nat_traversal'] = $pconfig['nat_traversal'];
+ $ph1ent['mobike'] = $pconfig['mobike'];
+
+ if (isset($pconfig['reauth_enable'])) {
+ $ph1ent['reauth_enable'] = true;
+ } else {
+ unset($ph1ent['reauth_enable']);
+ }
+ if (isset($pconfig['rekey_enable'])) {
+ $ph1ent['rekey_enable'] = true;
+ } else {
+ unset($ph1ent['rekey_enable']);
+ }
+
+ if (isset($pconfig['responderonly'])) {
+ $ph1ent['responderonly'] = true;
+ } else {
+ unset($ph1ent['responderonly']);
+ }
+
+ if (isset($pconfig['dpd_enable'])) {
+ $ph1ent['dpd_delay'] = $pconfig['dpd_delay'];
+ $ph1ent['dpd_maxfail'] = $pconfig['dpd_maxfail'];
+ }
+
+ /* generate unique phase1 ikeid */
+ if ($ph1ent['ikeid'] == 0) {
+ $ph1ent['ikeid'] = ipsec_ikeid_next();
+ }
+
+ if (isset($p1index) && $a_phase1[$p1index]) {
+ $a_phase1[$p1index] = $ph1ent;
+ } else {
+ $a_phase1[] = $ph1ent;
+ }
+
+ write_config();
+ mark_subsystem_dirty('ipsec');
+
+ header("Location: vpn_ipsec.php");
+ exit;
+ }
+}
+
+if ($pconfig['mobile']) {
+ $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 1"), gettext("Mobile Client"));
+} else {
+ $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 1"));
+}
+$shortcut_section = "ipsec";
+
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function myidsel_change() {
+ index = document.iform.myid_type.selectedIndex;
+ value = document.iform.myid_type.options[index].value;
+ if (value == 'myaddress') {
+ document.getElementById('myid_data').style.visibility = 'hidden';
+ } else {
+ document.getElementById('myid_data').style.visibility = 'visible';
+ }
+}
+
+function iketype_change() {
+ index = document.iform.iketype.selectedIndex;
+ value = document.iform.iketype.options[index].value;
+ if (value == 'ikev2') {
+ document.getElementById('negmode').style.display= 'none';
+ document.getElementById('mobike').style.display= '';
+ document.getElementById('natt').style.display= 'none';
+ document.getElementById('disablereauth').style.display= '';
+ } else {
+ document.getElementById('negmode').style.display = '';
+ document.getElementById('mobike').style.display = 'none';
+ document.getElementById('natt').style.display= '';
+ document.getElementById('disablereauth').style.display= 'none';
+ }
+}
+
+function peeridsel_change() {
+ index = document.iform.peerid_type.selectedIndex;
+ value = document.iform.peerid_type.options[index].value;
+ if (value == 'peeraddress') {
+ document.getElementById('peerid_data').style.visibility = 'hidden';
+ } else if (value == 'any') {
+ document.getElementById('peerid_data').style.visibility = 'hidden';
+ } else {
+ document.getElementById('peerid_data').style.visibility = 'visible';
+ }
+}
+
+function methodsel_change() {
+ index = document.iform.authentication_method.selectedIndex;
+ value = document.iform.authentication_method.options[index].value;
+
+ switch (value) {
+ case 'eap-mschapv2':
+ case 'eap-tls':
+ case 'eap-radius':
+ document.getElementById('opt_psk').style.display = 'none';
+ document.getElementById('opt_peerid').style.display = '';
+ document.getElementById('opt_cert').style.display = '';
+ document.getElementById('opt_ca').style.display = '';
+ document.getElementById('opt_cert').disabled = false;
+ document.getElementById('opt_ca').disabled = false;
+ break;
+ case 'hybrid_rsa_server':
+ document.getElementById('opt_psk').style.display = 'none';
+ document.getElementById('opt_peerid').style.display = '';
+ document.getElementById('opt_cert').style.display = '';
+ document.getElementById('opt_ca').style.display = '';
+ document.getElementById('opt_cert').disabled = false;
+ document.getElementById('opt_ca').disabled = false;
+ break;
+ case 'xauth_rsa_server':
+ case 'rsasig':
+ document.getElementById('opt_psk').style.display = 'none';
+ document.getElementById('opt_peerid').style.display = '';
+ document.getElementById('opt_cert').style.display = '';
+ document.getElementById('opt_ca').style.display = '';
+ document.getElementById('opt_cert').disabled = false;
+ document.getElementById('opt_ca').disabled = false;
+ break;
+<?php if ($pconfig['mobile']) { ?>
+ case 'pre_shared_key':
+ document.getElementById('opt_psk').style.display = 'none';
+ document.getElementById('opt_peerid').style.display = 'none';
+ document.getElementById('opt_cert').style.display = 'none';
+ document.getElementById('opt_ca').style.display = 'none';
+ document.getElementById('opt_cert').disabled = true;
+ document.getElementById('opt_ca').disabled = true;
+ break;
+<?php } ?>
+ default: /* psk modes*/
+ document.getElementById('opt_psk').style.display = '';
+ document.getElementById('opt_peerid').style.display = '';
+ document.getElementById('opt_cert').style.display = 'none';
+ document.getElementById('opt_ca').style.display = 'none';
+ document.getElementById('opt_cert').disabled = true;
+ document.getElementById('opt_ca').disabled = true;
+ break;
+ }
+}
+
+/* PHP generated java script for variable length keys */
+function ealgosel_change(bits) {
+ switch (document.iform.ealgo.selectedIndex) {
+<?php
+$i = 0;
+foreach ($p1_ealgos as $algo => $algodata) {
+ if (is_array($algodata['keysel'])) {
+ echo " case {$i}:\n";
+ echo " document.iform.ealgo_keylen.style.visibility = 'visible';\n";
+ echo " document.iform.ealgo_keylen.options.length = 0;\n";
+ // echo " document.iform.ealgo_keylen.options[document.iform.ealgo_keylen.options.length] = new Option( 'auto', 'auto' );\n";
+
+ $key_hi = $algodata['keysel']['hi'];
+ $key_lo = $algodata['keysel']['lo'];
+ $key_step = $algodata['keysel']['step'];
+
+ for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step) {
+ echo " document.iform.ealgo_keylen.options[document.iform.ealgo_keylen.options.length] = new Option( '{$keylen} bits', '{$keylen}' );\n";
+ }
+ echo " break;\n";
+ } else {
+ echo " case {$i}:\n";
+ echo " document.iform.ealgo_keylen.style.visibility = 'hidden';\n";
+ echo " document.iform.ealgo_keylen.options.length = 0;\n";
+ echo " break;\n";
+ }
+ $i++;
+}
+?>
+ }
+
+ if (bits) {
+ document.iform.ealgo_keylen.value = bits;
+ }
+}
+
+function dpdchkbox_change() {
+ if (document.iform.dpd_enable.checked) {
+ document.getElementById('opt_dpd').style.display = '';
+ } else {
+ document.getElementById('opt_dpd').style.display = 'none';
+ }
+
+ if (!document.iform.dpd_delay.value) {
+ document.iform.dpd_delay.value = "10";
+ }
+
+ if (!document.iform.dpd_maxfail.value) {
+ document.iform.dpd_maxfail.value = "5";
+ }
+}
+
+//]]>
+</script>
+
+<form action="vpn_ipsec_phase1.php" method="post" name="iform" id="iform">
+
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec phase-1">
+ <tr class="tabnavtbl">
+ <td id="tabnav">
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this phase1 entry"); ?></strong><br />
+ <span class="vexpl">
+ <?=gettext("Set this option to disable this phase1 without removing it from the list"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Key Exchange version"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="iketype" class="formselect" onchange='iketype_change()'>
+ <?php
+ $keyexchange = array("ikev1" => "V1", "ikev2" => "V2");
+ foreach ($keyexchange as $kidx => $name):
+ ?>
+ <option value="<?=$kidx;?>" <?php if ($kidx == $pconfig['iketype']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($name);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Select the Internet Key Exchange protocol version to be used, IKEv1 or IKEv2"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Internet Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="protocol" class="formselect">
+ <?php
+ $protocols = array("inet" => "IPv4", "inet6" => "IPv6");
+ foreach ($protocols as $protocol => $name):
+ ?>
+ <option value="<?=$protocol;?>" <?php if ($protocol == $pconfig['protocol']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($name);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Select the Internet Protocol family from this dropdown"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif] = $carpip." (".get_vip_descr($carpip).")";
+ }
+
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $interfaces[$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ if ($group[0]['vip'] <> "") {
+ $vipif = $group[0]['vip'];
+ } else {
+ $vipif = $group[0]['int'];
+ }
+ $interfaces[$name] = "GW Group {$name}";
+ }
+
+
+ foreach ($interfaces as $iface => $ifacename):
+ ?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl"><?=gettext("Select the interface for the local endpoint of this phase1 entry"); ?>.</span>
+ </td>
+ </tr>
+
+ <?php if (!$pconfig['mobile']): ?>
+
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="remotegw" type="text" class="formfld unknown" id="remotegw" size="28" value="<?=htmlspecialchars($pconfig['remotegw']);?>" />
+ <br />
+ <?=gettext("Enter the public IP address or host name of the remote gateway"); ?>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">
+ <?=gettext("Phase 1 proposal (Authentication)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication method"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="authentication_method" class="formselect" onchange="methodsel_change()">
+ <?php
+ foreach ($p1_authentication_methods as $method_type => $method_params):
+ if (!$pconfig['mobile'] && $method_params['mobile']) {
+ continue;
+ }
+ ?>
+ <option value="<?=$method_type;?>" <?php if ($method_type == $pconfig['authentication_method']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($method_params['name']);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Must match the setting chosen on the remote side"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr id='negmode' >
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Negotiation mode"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="mode" class="formselect">
+ <?php
+ $modes = array("main" => "Main", "aggressive" => "Aggressive");
+ foreach ($modes as $mode => $mdescr):
+ ?>
+ <option value="<?=$mode;?>" <?php if ($mode == $pconfig['mode']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($mdescr);?>
+ </option>
+ <?php endforeach; ?>
+ </select> <br /> <span class="vexpl"><?=gettext("Aggressive is more flexible, but less secure"); ?>.</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("My identifier"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="myid_type" class="formselect" onchange="myidsel_change()">
+ <?php foreach ($my_identifier_list as $id_type => $id_params): ?>
+ <option value="<?=$id_type;?>" <?php if ($id_type == $pconfig['myid_type']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($id_params['desc']);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <input name="myid_data" type="text" class="formfld unknown" id="myid_data" size="30" value="<?=htmlspecialchars($pconfig['myid_data']);?>" />
+ </td>
+ </tr>
+ <tr id="opt_peerid">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer identifier"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="peerid_type" class="formselect" onchange="peeridsel_change()">
+ <?php
+ foreach ($peer_identifier_list as $id_type => $id_params):
+ if ($pconfig['mobile'] && !$id_params['mobile']) {
+ continue;
+ }
+ ?>
+ <option value="<?=$id_type;?>" <?php if ($id_type == $pconfig['peerid_type']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($id_params['desc']);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <input name="peerid_data" type="text" class="formfld unknown" id="peerid_data" size="30" value="<?=htmlspecialchars($pconfig['peerid_data']);?>" />
+ <?php if ($pconfig['mobile']) { ?>
+ <br /><br /><?=gettext("NOTE: This is known as the \"group\" setting on some VPN client implementations"); ?>.
+ <?php } ?>
+ </td>
+ </tr>
+ <tr id="opt_psk">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Pre-Shared Key"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?>
+ <input name="pskey" type="text" class="formfld unknown" id="pskey" size="40" value="<?=htmlspecialchars($pconfig['pskey']);?>" />
+ <span class="vexpl">
+ <br />
+ <?=gettext("Input your Pre-Shared Key string"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr id="opt_cert">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("My Certificate"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="certref" class="formselect">
+ <?php
+ foreach ($config['cert'] as $cert):
+ $selected = "";
+ if ($pconfig['certref'] == $cert['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Select a certificate previously configured in the Certificate Manager"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr id="opt_ca">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("My Certificate Authority"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="caref" class="formselect">
+ <?php
+ foreach ($config['ca'] as $ca):
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Select a certificate authority previously configured in the Certificate Manager"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">
+ <?=gettext("Phase 1 proposal (Algorithms)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="ealgo" class="formselect" onchange="ealgosel_change()">
+ <?php
+ foreach ($p1_ealgos as $algo => $algodata):
+ $selected = "";
+ if ($algo == $pconfig['ealgo']['name']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$algo;?>"<?=$selected?>>
+ <?=htmlspecialchars($algodata['name']);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <select name="ealgo_keylen" width="30" class="formselect">
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hash algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="halgo" class="formselect">
+ <?php foreach ($p1_halgos as $algo => $algoname): ?>
+ <option value="<?=$algo;?>" <?php if ($algo == $pconfig['halgo']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($algoname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Must match the setting chosen on the remote side"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DH key group"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dhgroup" class="formselect">
+ <?php foreach ($p1_dhgroups as $keygroup => $keygroupname): ?>
+ <option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['dhgroup']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($keygroupname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Must match the setting chosen on the remote side"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Lifetime"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />
+ <?=gettext("seconds"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Options"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Rekey");?></td>
+ <td width="78%" class="vtable">
+ <input name="rekey_enable" type="checkbox" id="rekey_enable" value="yes" <?php if (isset($pconfig['rekey_enable'])) echo "checked=\"checked\""; ?> />
+ <?=gettext("Whether a connection should be renegotiated when it is about to expire."); ?><br />
+ </td>
+ </tr>
+ <tr id='disablereauth'>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Reauth");?></td>
+ <td width="78%" class="vtable">
+ <input name="reauth_enable" type="checkbox" id="reauth_enable" value="yes" <?php if (isset($pconfig['reauth_enable'])) echo "checked=\"checked\""; ?> />
+ <?=gettext("Whether rekeying of an IKE_SA should also reauthenticate the peer. In IKEv1, reauthentication is always done."); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Responder Only");?></td>
+ <td width="78%" class="vtable">
+ <input name="responderonly" type="checkbox" id="responderonly" value="yes" <?php if (isset($pconfig['responderonly'])) echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable this option to never initiate this connection from this side, only respond to incoming requests."); ?><br />
+ </td>
+ </tr>
+ <tr id='natt'>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NAT Traversal"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="nat_traversal" class="formselect">
+ <option value="on" <?php if ($pconfig['nat_traversal'] != 'on') echo "selected=\"selected\""; ?>><?=gettext("Auto"); ?></option>
+ <option value="force" <?php if ($pconfig['nat_traversal'] == 'force') echo "selected=\"selected\""; ?>><?=gettext("Force"); ?></option>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in UDP packets) if needed, " .
+ "which can help with clients that are behind restrictive firewalls"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr id='mobike'>
+ <td width="22%" valign="top" class="vncell"><?=gettext("MOBIKE"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="mobike" class="formselect">
+ <option value="on" <?php if ($pconfig['mobike'] == 'on') echo "selected=\"selected\""; ?>><?=gettext("Enable"); ?></option>
+ <option value="off" <?php if ($pconfig['mobike'] != 'on') echo "selected=\"selected\""; ?>><?=gettext("Disable"); ?></option>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set this option to control the use of MOBIKE"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dead Peer Detection"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="dpd_enable" type="checkbox" id="dpd_enable" value="yes" <?php if (isset($pconfig['dpd_enable'])) echo "checked=\"checked\""; ?> onclick="dpdchkbox_change()" />
+ <?=gettext("Enable DPD"); ?><br />
+ <div id="opt_dpd">
+ <br />
+ <input name="dpd_delay" type="text" class="formfld unknown" id="dpd_delay" size="5" value="<?=htmlspecialchars($pconfig['dpd_delay']);?>" />
+ <?=gettext("seconds"); ?><br />
+ <span class="vexpl">
+ <?=gettext("Delay between requesting peer acknowledgement"); ?>.
+ </span><br />
+ <br />
+ <input name="dpd_maxfail" type="text" class="formfld unknown" id="dpd_maxfail" size="5" value="<?=htmlspecialchars($pconfig['dpd_maxfail']);?>" />
+ <?=gettext("retries"); ?><br />
+ <span class="vexpl">
+ <?=gettext("Number of consecutive failures allowed before disconnect"); ?>.
+ </span>
+ <br />
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php if (isset($p1index) && $a_phase1[$p1index]): ?>
+ <input name="p1index" type="hidden" value="<?=htmlspecialchars($p1index);?>" />
+ <?php endif; ?>
+ <?php if ($pconfig['mobile']): ?>
+ <input name="mobile" type="hidden" value="true" />
+ <?php endif; ?>
+ <input name="ikeid" type="hidden" value="<?=htmlspecialchars($pconfig['ikeid']);?>" />
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+<?php
+ /* determine if we should init the key length */
+ $keyset = '';
+ if (isset($pconfig['ealgo']['keylen'])) {
+ if (is_numeric($pconfig['ealgo']['keylen'])) {
+ $keyset = $pconfig['ealgo']['keylen'];
+ }
+ }
+?>
+myidsel_change();
+peeridsel_change();
+iketype_change();
+methodsel_change();
+ealgosel_change(<?=$keyset;?>);
+dpdchkbox_change();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_ipsec_phase2.php b/src/usr/local/www/vpn_ipsec_phase2.php
new file mode 100644
index 0000000..f9a9805
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_phase2.php
@@ -0,0 +1,983 @@
+<?php
+/*
+ vpn_ipsec_phase2.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2008 Shrew Soft Inc
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-editphase2
+##|*NAME=VPN: IPsec: Edit Phase 2 page
+##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 2' page.
+##|*MATCH=vpn_ipsec_phase2.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['ipsec']['client'])) {
+ $config['ipsec']['client'] = array();
+}
+
+$a_client = &$config['ipsec']['client'];
+
+if (!is_array($config['ipsec']['phase1'])) {
+ $config['ipsec']['phase1'] = array();
+}
+
+if (!is_array($config['ipsec']['phase2'])) {
+ $config['ipsec']['phase2'] = array();
+}
+
+$a_phase1 = &$config['ipsec']['phase1'];
+$a_phase2 = &$config['ipsec']['phase2'];
+
+if (!empty($_GET['p2index'])) {
+ $uindex = $_GET['p2index'];
+}
+if (!empty($_POST['uniqid'])) {
+ $uindex = $_POST['uniqid'];
+}
+
+if (!empty($_GET['dup'])) {
+ $uindex = $_GET['dup'];
+}
+
+$ph2found = false;
+if (isset($uindex)) {
+ foreach ($a_phase2 as $p2index => $ph2) {
+ if ($ph2['uniqid'] == $uindex) {
+ $ph2found = true;
+ break;
+ }
+ }
+}
+
+if ($ph2found === true) {
+ $pconfig['ikeid'] = $ph2['ikeid'];
+ $pconfig['disabled'] = isset($ph2['disabled']);
+ $pconfig['mode'] = $ph2['mode'];
+ $pconfig['descr'] = $ph2['descr'];
+ $pconfig['uniqid'] = $ph2['uniqid'];
+
+ if (!empty($ph2['natlocalid'])) {
+ idinfo_to_pconfig("natlocal", $ph2['natlocalid'], $pconfig);
+ }
+ idinfo_to_pconfig("local", $ph2['localid'], $pconfig);
+ idinfo_to_pconfig("remote", $ph2['remoteid'], $pconfig);
+
+ $pconfig['proto'] = $ph2['protocol'];
+ ealgos_to_pconfig($ph2['encryption-algorithm-option'], $pconfig);
+ $pconfig['halgos'] = $ph2['hash-algorithm-option'];
+ $pconfig['pfsgroup'] = $ph2['pfsgroup'];
+ $pconfig['lifetime'] = $ph2['lifetime'];
+ $pconfig['pinghost'] = $ph2['pinghost'];
+ $pconfig['reqid'] = $ph2['reqid'];
+
+ if (isset($ph2['mobile'])) {
+ $pconfig['mobile'] = true;
+ }
+} else {
+ $pconfig['ikeid'] = $_GET['ikeid'];
+
+ /* defaults */
+ $pconfig['localid_type'] = "lan";
+ $pconfig['remoteid_type'] = "network";
+ $pconfig['proto'] = "esp";
+ $pconfig['ealgos'] = explode(",", "aes");
+ $pconfig['halgos'] = explode(",", "hmac_sha1");
+ $pconfig['pfsgroup'] = "0";
+ $pconfig['lifetime'] = "3600";
+ $pconfig['uniqid'] = uniqid();
+
+ /* mobile client */
+ if ($_GET['mobile']) {
+ $pconfig['mobile']=true;
+ }
+}
+
+unset($ph2);
+if (!empty($_GET['dup'])) {
+ unset($uindex);
+ unset($p2index);
+ $pconfig['uniqid'] = uniqid();
+ $pconfig['reqid'] = ipsec_new_reqid();
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!isset($_POST['ikeid'])) {
+ $input_errors[] = gettext("A valid ikeid must be specified.");
+ }
+
+ /* input validation */
+ $reqdfields = explode(" ", "localid_type uniqid");
+ $reqdfieldsn = array(gettext("Local network type"), gettext("Unique Identifier"));
+ if (!isset($pconfig['mobile'])) {
+ $reqdfields[] = "remoteid_type";
+ $reqdfieldsn[] = gettext("Remote network type");
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($pconfig['mode'] == "tunnel") || ($pconfig['mode'] == "tunnel6")) {
+ switch ($pconfig['localid_type']) {
+ case "network":
+ if (($pconfig['localid_netbits'] != 0 && !$pconfig['localid_netbits']) || !is_numeric($pconfig['localid_netbits'])) {
+ $input_errors[] = gettext("A valid local network bit count must be specified.");
+ }
+ case "address":
+ if (!$pconfig['localid_address'] || !is_ipaddr($pconfig['localid_address'])) {
+ $input_errors[] = gettext("A valid local network IP address must be specified.");
+ } elseif (is_ipaddrv4($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel")) {
+ $input_errors[] = gettext("A valid local network IPv4 address must be specified or you need to change Mode to IPv6");
+ } elseif (is_ipaddrv6($pconfig['localid_address']) && ($pconfig['mode'] != "tunnel6")) {
+ $input_errors[] = gettext("A valid local network IPv6 address must be specified or you need to change Mode to IPv4");
+ }
+ break;
+ }
+ /* Check if the localid_type is an interface, to confirm if it has a valid subnet. */
+ if (is_array($config['interfaces'][$pconfig['localid_type']])) {
+ // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201.
+ $address = get_interface_ip($pconfig['localid_type']);
+ $netbits = get_interface_subnet($pconfig['localid_type']);
+
+ if (empty($address) || empty($netbits)) {
+ $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['localid_type']) . " " . gettext("has no subnet.");
+ }
+ }
+
+ if (!empty($pconfig['natlocalid_address'])) {
+ switch ($pconfig['natlocalid_type']) {
+ case "network":
+ if (($pconfig['natlocalid_netbits'] != 0 && !$pconfig['natlocalid_netbits']) || !is_numeric($pconfig['natlocalid_netbits'])) {
+ $input_errors[] = gettext("A valid NAT local network bit count must be specified.");
+ }
+ if ($pconfig['localid_type'] == "address") {
+ $input_errors[] = gettext("You cannot configure a network type address for NAT while only an address type is selected for local source.");
+ }
+ case "address":
+ if (!empty($pconfig['natlocalid_address']) && !is_ipaddr($pconfig['natlocalid_address'])) {
+ $input_errors[] = gettext("A valid NAT local network IP address must be specified.");
+ } elseif (is_ipaddrv4($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel")) {
+ $input_errors[] = gettext("A valid NAT local network IPv4 address must be specified or you need to change Mode to IPv6");
+ } elseif (is_ipaddrv6($pconfig['natlocalid_address']) && ($pconfig['mode'] != "tunnel6")) {
+ $input_errors[] = gettext("A valid NAT local network IPv6 address must be specified or you need to change Mode to IPv4");
+ }
+ break;
+ }
+
+ if (is_array($config['interfaces'][$pconfig['natlocalid_type']])) {
+ // Don't let an empty subnet into racoon.conf, it can cause parse errors. Ticket #2201.
+ $address = get_interface_ip($pconfig['natlocalid_type']);
+ $netbits = get_interface_subnet($pconfig['natlocalid_type']);
+
+ if (empty($address) || empty($netbits)) {
+ $input_errors[] = gettext("Invalid Local Network.") . " " . convert_friendly_interface_to_friendly_descr($pconfig['natlocalid_type']) . " " . gettext("has no subnet.");
+ }
+ }
+ }
+
+ switch ($pconfig['remoteid_type']) {
+ case "network":
+ if (($pconfig['remoteid_netbits'] != 0 && !$pconfig['remoteid_netbits']) || !is_numeric($pconfig['remoteid_netbits'])) {
+ $input_errors[] = gettext("A valid remote network bit count must be specified.");
+ }
+ case "address":
+ if (!$pconfig['remoteid_address'] || !is_ipaddr($pconfig['remoteid_address'])) {
+ $input_errors[] = gettext("A valid remote network IP address must be specified.");
+ } elseif (is_ipaddrv4($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel")) {
+ $input_errors[] = gettext("A valid remote network IPv4 address must be specified or you need to change Mode to IPv6");
+ } elseif (is_ipaddrv6($pconfig['remoteid_address']) && ($pconfig['mode'] != "tunnel6")) {
+ $input_errors[] = gettext("A valid remote network IPv6 address must be specified or you need to change Mode to IPv4");
+ }
+ break;
+ }
+ }
+ /* Validate enabled phase2's are not duplicates */
+ if (isset($pconfig['mobile'])) {
+ /* User is adding phase 2 for mobile phase1 */
+ foreach ($a_phase2 as $key => $name) {
+ if (isset($name['mobile']) && $name['uniqid'] != $pconfig['uniqid']) {
+ /* check duplicate localids only for mobile clents */
+ $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']);
+ $entered = array();
+ $entered['type'] = $pconfig['localid_type'];
+ if (isset($pconfig['localid_address'])) $entered['address'] = $pconfig['localid_address'];
+ if (isset($pconfig['localid_netbits'])) $entered['netbits'] = $pconfig['localid_netbits'];
+ $entered_localid_data = ipsec_idinfo_to_cidr($entered, false, $pconfig['mode']);
+ if ($localid_data == $entered_localid_data) {
+ /* adding new p2 entry */
+ $input_errors[] = gettext("Phase2 with this Local Network is already defined for mobile clients.");
+ break;
+ }
+ }
+ }
+ } else {
+ /* User is adding phase 2 for site-to-site phase1 */
+ $input_error = 0;
+ foreach ($a_phase2 as $key => $name) {
+ if (!isset($name['mobile']) && $pconfig['ikeid'] == $name['ikeid'] && $pconfig['uniqid'] != $name['uniqid']) {
+ /* check duplicate subnets only for given phase1 */
+ $localid_data = ipsec_idinfo_to_cidr($name['localid'], false, $name['mode']);
+ $remoteid_data = ipsec_idinfo_to_cidr($name['remoteid'], false, $name['mode']);
+ $entered_local = array();
+ $entered_local['type'] = $pconfig['localid_type'];
+ if (isset($pconfig['localid_address'])) {
+ $entered_local['address'] = $pconfig['localid_address'];
+ }
+ if (isset($pconfig['localid_netbits'])) {
+ $entered_local['netbits'] = $pconfig['localid_netbits'];
+ }
+ $entered_localid_data = ipsec_idinfo_to_cidr($entered_local, false, $pconfig['mode']);
+ $entered_remote = array();
+ $entered_remote['type'] = $pconfig['remoteid_type'];
+ if (isset($pconfig['remoteid_address'])) {
+ $entered_remote['address'] = $pconfig['remoteid_address'];
+ }
+ if (isset($pconfig['remoteid_netbits'])) {
+ $entered_remote['netbits'] = $pconfig['remoteid_netbits'];
+ }
+ $entered_remoteid_data = ipsec_idinfo_to_cidr($entered_remote, false, $pconfig['mode']);
+ if ($localid_data == $entered_localid_data && $remoteid_data == $entered_remoteid_data) {
+ /* adding new p2 entry */
+ $input_errors[] = gettext("Phase2 with this Local/Remote networks combination is already defined for this Phase1.");
+ break;
+ }
+ }
+ }
+ foreach ($a_phase1 as $phase1) {
+ if ($phase1['ikeid'] == $pconfig['ikeid']) {
+ /* This is the P1 for this entry, validate its remote-gateway and local interface isn't within tunnel */
+ $entered_local = array();
+ $entered_local['type'] = $pconfig['localid_type'];
+ if (isset($pconfig['localid_address'])) {
+ $entered_local['address'] = $pconfig['localid_address'];
+ }
+ if (isset($pconfig['localid_netbits'])) {
+ $entered_local['netbits'] = $pconfig['localid_netbits'];
+ }
+ $entered_localid_data = ipsec_idinfo_to_cidr($entered_local, false, $pconfig['mode']);
+ list($entered_local_network, $entered_local_mask) = explode('/', $entered_localid_data);
+ $entered_remote = array();
+ $entered_remote['type'] = $pconfig['remoteid_type'];
+ if (isset($pconfig['remoteid_address'])) {
+ $entered_remote['address'] = $pconfig['remoteid_address'];
+ }
+ if (isset($pconfig['remoteid_netbits'])) {
+ $entered_remote['netbits'] = $pconfig['remoteid_netbits'];
+ }
+ $entered_remoteid_data = ipsec_idinfo_to_cidr($entered_remote, false, $pconfig['mode']);
+ list($entered_remote_network, $entered_remote_mask) = explode('/', $entered_remoteid_data);
+ if ($phase1['protocol'] == "inet6") {
+ $if = get_failover_interface($phase1['interface'], "inet6");
+ $interfaceip = get_interface_ipv6($if);
+ } else {
+ $if = get_failover_interface($phase1['interface']);
+ $interfaceip = get_interface_ip($if);
+ }
+ /* skip validation for hostnames, they're subject to change anyway */
+ if (is_ipaddr($phase1['remote-gateway'])) {
+ if ($pconfig['mode'] == "tunnel") {
+ if (check_subnets_overlap($interfaceip, 32, $entered_local_network, $entered_local_mask) && check_subnets_overlap($phase1['remote-gateway'], 32, $entered_remote_network, $entered_remote_mask)) {
+ $input_errors[] = gettext("The local and remote networks of a phase 2 entry cannot overlap the outside of the tunnel (interface and remote gateway) configured in its phase 1.");
+ break;
+ }
+ } else if ($pconfig['mode'] == "tunnel6") {
+ if (check_subnetsv6_overlap($interfaceip, 128, $entered_local_network, $entered_local_mask) && check_subnets_overlap($phase1['remote-gateway'], 128, $entered_remote_network, $entered_remote_mask)) {
+ $input_errors[] = gettext("The local and remote networks of a phase 2 entry cannot overlap the outside of the tunnel (interface and remote gateway) configured in its phase 1.");
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* For ESP protocol, handle encryption algorithms */
+ if ($pconfig['proto'] == "esp") {
+ $ealgos = pconfig_to_ealgos($pconfig);
+
+ if (!count($ealgos)) {
+ $input_errors[] = gettext("At least one encryption algorithm must be selected.");
+ } else {
+ foreach ($ealgos as $ealgo) {
+ if (isset($config['system']['crypto_hardware'])) {
+ if ($config['system']['crypto_hardware'] == "glxsb") {
+ if ($ealgo['name'] == "aes" && $ealgo['keylen'] != "128") {
+ $input_errors[] = gettext("Only 128 bit AES can be used where the glxsb crypto accelerator is enabled.");
+ }
+ }
+ }
+ if (empty($pconfig['halgos'])) {
+ if (!strpos($ealgo['name'], "gcm")) {
+ $input_errors[] = gettext("At least one hashing algorithm needs to be selected.");
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (($_POST['lifetime'] && !is_numeric($_POST['lifetime']))) {
+ $input_errors[] = gettext("The P2 lifetime must be an integer.");
+ }
+
+ if (!$input_errors) {
+
+ $ph2ent = array();
+ $ph2ent['ikeid'] = $pconfig['ikeid'];
+ $ph2ent['uniqid'] = $pconfig['uniqid'];
+ $ph2ent['mode'] = $pconfig['mode'];
+ $ph2ent['disabled'] = $pconfig['disabled'] ? true : false;
+ if (!isset($pconfig['reqid'])) {
+ $ph2ent['reqid'] = ipsec_new_reqid();
+ } else {
+ $ph2ent['reqid'] = $pconfig['reqid'];
+ }
+
+ if (($ph2ent['mode'] == "tunnel") || ($ph2ent['mode'] == "tunnel6")) {
+ if (!empty($pconfig['natlocalid_address'])) {
+ $ph2ent['natlocalid'] = pconfig_to_idinfo("natlocal", $pconfig);
+ }
+ $ph2ent['localid'] = pconfig_to_idinfo("local", $pconfig);
+ $ph2ent['remoteid'] = pconfig_to_idinfo("remote", $pconfig);
+ }
+
+ $ph2ent['protocol'] = $pconfig['proto'];
+ $ph2ent['encryption-algorithm-option'] = $ealgos;
+ if (!empty($pconfig['halgos'])) {
+ $ph2ent['hash-algorithm-option'] = $pconfig['halgos'];
+ } else {
+ unset($ph2ent['hash-algorithm-option']);
+ }
+ $ph2ent['pfsgroup'] = $pconfig['pfsgroup'];
+ $ph2ent['lifetime'] = $pconfig['lifetime'];
+ $ph2ent['pinghost'] = $pconfig['pinghost'];
+ $ph2ent['descr'] = $pconfig['descr'];
+
+ if (isset($pconfig['mobile'])) {
+ $ph2ent['mobile'] = true;
+ }
+
+ if ($ph2found === true && $a_phase2[$p2index]) {
+ $a_phase2[$p2index] = $ph2ent;
+ } else {
+ $a_phase2[] = $ph2ent;
+ }
+
+ write_config();
+ mark_subsystem_dirty('ipsec');
+
+ header("Location: vpn_ipsec.php");
+ exit;
+ }
+}
+
+if ($pconfig['mobile']) {
+ $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 2"), gettext("Mobile Client"));
+} else {
+ $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Edit Phase 2"));
+}
+$shortcut_section = "ipsec";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+
+function change_mode() {
+ index = document.iform.mode.selectedIndex;
+ value = document.iform.mode.options[index].value;
+ if ((value == 'tunnel') || (value == 'tunnel6')) {
+ document.getElementById('opt_localid').style.display = '';
+<?php if (!isset($pconfig['mobile'])): ?>
+ document.getElementById('opt_remoteid').style.display = '';
+<?php endif; ?>
+ } else {
+ document.getElementById('opt_localid').style.display = 'none';
+<?php if (!isset($pconfig['mobile'])): ?>
+ document.getElementById('opt_remoteid').style.display = 'none';
+<?php endif; ?>
+ }
+}
+
+function typesel_change_natlocal(bits) {
+ var value = document.iform.mode.options[index].value;
+ if (typeof(bits) === "undefined") {
+ if (value === "tunnel") {
+ bits = 24;
+ } else if (value === "tunnel6") {
+ bits = 64;
+ }
+ }
+ var address_is_blank = !/\S/.test(document.iform.natlocalid_address.value);
+ switch (document.iform.natlocalid_type.selectedIndex) {
+ case 0: /* single */
+ document.iform.natlocalid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.natlocalid_netbits.value = 0;
+ }
+ document.iform.natlocalid_netbits.disabled = 1;
+ break;
+ case 1: /* network */
+ document.iform.natlocalid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.natlocalid_netbits.value = bits;
+ }
+ document.iform.natlocalid_netbits.disabled = 0;
+ break;
+ case 3: /* none */
+ document.iform.natlocalid_address.disabled = 1;
+ document.iform.natlocalid_netbits.disabled = 1;
+ break;
+ default:
+ document.iform.natlocalid_address.value = "";
+ document.iform.natlocalid_address.disabled = 1;
+ if (address_is_blank) {
+ document.iform.natlocalid_netbits.value = 0;
+ }
+ document.iform.natlocalid_netbits.disabled = 1;
+ break;
+ }
+}
+
+function typesel_change_local(bits) {
+ var value = document.iform.mode.options[index].value;
+ if (typeof(bits) === "undefined") {
+ if (value === "tunnel") {
+ bits = 24;
+ } else if (value === "tunnel6") {
+ bits = 64;
+ }
+ }
+ var address_is_blank = !/\S/.test(document.iform.localid_address.value);
+ switch (document.iform.localid_type.selectedIndex) {
+ case 0: /* single */
+ document.iform.localid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.localid_netbits.value = 0;
+ }
+ document.iform.localid_netbits.disabled = 1;
+ break;
+ case 1: /* network */
+ document.iform.localid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.localid_netbits.value = bits;
+ }
+ document.iform.localid_netbits.disabled = 0;
+ break;
+ case 3: /* none */
+ document.iform.localid_address.disabled = 1;
+ document.iform.localid_netbits.disabled = 1;
+ break;
+ default:
+ document.iform.localid_address.value = "";
+ document.iform.localid_address.disabled = 1;
+ if (address_is_blank) {
+ document.iform.localid_netbits.value = 0;
+ }
+ document.iform.localid_netbits.disabled = 1;
+ break;
+ }
+}
+
+<?php if (!isset($pconfig['mobile'])): ?>
+
+function typesel_change_remote(bits) {
+ var value = document.iform.mode.options[index].value;
+ if (typeof(bits) === "undefined") {
+ if (value === "tunnel") {
+ bits = 24;
+ }
+ else if (value === "tunnel6") {
+ bits = 64;
+ }
+ }
+ var address_is_blank = !/\S/.test(document.iform.remoteid_address.value);
+ switch (document.iform.remoteid_type.selectedIndex) {
+ case 0: /* single */
+ document.iform.remoteid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.remoteid_netbits.value = 0;
+ }
+ document.iform.remoteid_netbits.disabled = 1;
+ break;
+ case 1: /* network */
+ document.iform.remoteid_address.disabled = 0;
+ if (address_is_blank) {
+ document.iform.remoteid_netbits.value = bits;
+ }
+ document.iform.remoteid_netbits.disabled = 0;
+ break;
+ default:
+ document.iform.remoteid_address.value = "";
+ document.iform.remoteid_address.disabled = 1;
+ if (address_is_blank) {
+ document.iform.remoteid_netbits.value = 0;
+ }
+ document.iform.remoteid_netbits.disabled = 1;
+ break;
+ }
+}
+
+<?php endif; ?>
+
+function change_protocol() {
+ index = document.iform.proto.selectedIndex;
+ value = document.iform.proto.options[index].value;
+ if (value == 'esp')
+ document.getElementById('opt_enc').style.display = '';
+ else
+ document.getElementById('opt_enc').style.display = 'none';
+}
+
+//]]>
+</script>
+
+<form action="vpn_ipsec_phase2.php" method="post" name="iform" id="iform">
+
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec phase-2">
+ <tr class="tabnavtbl">
+ <td id="tabnav">
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), true, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable this phase2 entry"); ?></strong>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Set this option to disable this phase2 entry without removing it from the list"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Mode"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="mode" class="formselect" onchange="change_mode()">
+ <?php
+ foreach ($p2_modes as $name => $value):
+ $selected = "";
+ if ($name == $pconfig['mode']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>" <?=$selected;?>><?=$value;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="opt_localid">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Local Network"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="local network">
+ <tr>
+ <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
+ <td></td>
+ <td>
+ <select name="localid_type" class="formselect" onchange="typesel_change_local()">
+ <option value="address" <?php if ($pconfig['localid_type'] == "address") echo "selected=\"selected\"";?>><?=gettext("Address"); ?></option>
+ <option value="network" <?php if ($pconfig['localid_type'] == "network") echo "selected=\"selected\"";?>><?=gettext("Network"); ?></option>
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $ifname => $ifdescr):
+ ?>
+ <option value="<?=$ifname; ?>" <?php if ($pconfig['localid_type'] == $ifname) echo "selected=\"selected\"";?>><?=sprintf(gettext("%s subnet"), $ifdescr); ?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td><?=$mandfldhtmlspc;?></td>
+ <td>
+ <input name="localid_address" type="text" class="formfld unknown ipv4v6" id="localid_address" size="28" value="<?=htmlspecialchars($pconfig['localid_address']);?>" />
+ /
+ <select name="localid_netbits" class="formselect ipv4v6" id="localid_netbits">
+ <?php for ($i = 128; $i >= 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if (isset($pconfig['localid_netbits']) && $i == $pconfig['localid_netbits']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <br />
+ <?php echo gettext("In case you need NAT/BINAT on this network specify the address to be translated"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
+ <td></td>
+ <td>
+ <select name="natlocalid_type" class="formselect" onchange="typesel_change_natlocal()">
+ <option value="address" <?php if ($pconfig['natlocalid_type'] == "address") echo "selected=\"selected\"";?>><?=gettext("Address"); ?></option>
+ <option value="network" <?php if ($pconfig['natlocalid_type'] == "network") echo "selected=\"selected\"";?>><?=gettext("Network"); ?></option>
+ <?php
+ $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $ifname => $ifdescr):
+ ?>
+ <option value="<?=$ifname; ?>" <?php if ($pconfig['natlocalid_type'] == $ifname) echo "selected=\"selected\"";?>><?=sprintf(gettext("%s subnet"), $ifdescr); ?></option>
+ <?php endforeach; ?>
+ <option value="none" <?php if (empty($pconfig['natlocalid_type']) || $pconfig['natlocalid_type'] == "none") echo "selected=\"selected\"";?>><?=gettext("None"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
+ <td><?=$mandfldhtmlspc;?></td>
+ <td>
+ <input name="natlocalid_address" type="text" class="formfld unknown ipv4v6" id="natlocalid_address" size="28" value="<?=htmlspecialchars($pconfig['natlocalid_address']);?>" />
+ /
+ <select name="natlocalid_netbits" class="formselect ipv4v6" id="natlocalid_netbits">
+ <?php for ($i = 128; $i >= 0; $i--): ?>
+ <option value="<?=$i;?>" <?php if (isset($pconfig['natlocalid_netbits']) && $i == $pconfig['natlocalid_netbits']) echo "selected=\"selected\""; ?>>
+ <?=$i;?>
+ </option>
+ <?php endfor; ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php if (!isset($pconfig['mobile'])): ?>
+
+ <tr id="opt_remoteid">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote Network"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="remote network">
+ <tr>
+ <td><?=gettext("Type"); ?>:&nbsp;&nbsp;</td>
+ <td></td>
+ <td>
+ <select name="remoteid_type" class="formselect" onchange="typesel_change_remote()">
+ <option value="address" <?php if ($pconfig['remoteid_type'] == "address") echo "selected=\"selected\""; ?>><?=gettext("Address"); ?></option>
+ <option value="network" <?php if ($pconfig['remoteid_type'] == "network") echo "selected=\"selected\""; ?>><?=gettext("Network"); ?></option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><?=gettext("Address"); ?>:&nbsp;&nbsp;</td>
+ <td><?=$mandfldhtmlspc;?></td>
+ <td>
+ <input name="remoteid_address" type="text" class="formfld unknown ipv4v6" id="remoteid_address" size="28" value="<?=htmlspecialchars($pconfig['remoteid_address']);?>" />
+ /
+ <select name="remoteid_netbits" class="formselect ipv4v6" id="remoteid_netbits">
+ <?php for ($i = 128; $i >= 0; $i--) {
+
+ echo "<option value=\"{$i}\"";
+ if (isset($pconfig['remoteid_netbits']) && $i == $pconfig['remoteid_netbits']) echo " selected=\"selected\"";
+ echo ">{$i}</option>\n";
+ } ?>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <?php endif; ?>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ <span class="vexpl">
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic">
+ <?=gettext("Phase 2 proposal (SA/Key Exchange)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="proto" class="formselect" onchange="change_protocol()">
+ <?php foreach ($p2_protos as $proto => $protoname): ?>
+ <option value="<?=$proto;?>" <?php if ($proto == $pconfig['proto']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($protoname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <span class="vexpl">
+ <?=gettext("ESP is encryption, AH is authentication only"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr id="opt_enc">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithms"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellspacing="0" cellpadding="0" summary="encryption">
+ <?php
+ foreach ($p2_ealgos as $algo => $algodata):
+ $checked = '';
+ if (is_array($pconfig['ealgos']) && in_array($algo, $pconfig['ealgos'])) {
+ $checked = " checked=\"checked\"";
+ }
+ ?>
+ <tr>
+ <td>
+ <input type="checkbox" name="ealgos[]" value="<?=$algo;?>"<?=$checked?> />
+ </td>
+ <td>
+ <?=htmlspecialchars($algodata['name']);?>
+ </td>
+ <td>
+ <?php if (is_array($algodata['keysel'])): ?>
+ &nbsp;&nbsp;
+ <select name="keylen_<?=$algo;?>" class="formselect">
+ <option value="auto"><?=gettext("auto"); ?></option>
+ <?php
+ $key_hi = $algodata['keysel']['hi'];
+ $key_lo = $algodata['keysel']['lo'];
+ $key_step = $algodata['keysel']['step'];
+ for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step):
+ $selected = "";
+ // if ($checked && in_array("keylen_".$algo, $pconfig))
+ if ($keylen == $pconfig["keylen_".$algo]) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$keylen;?>"<?=$selected;?>><?=$keylen;?> <?=gettext("bits"); ?></option>
+ <?php endfor; ?>
+ </select>
+ <?php endif; ?>
+ </td>
+ </tr>
+
+ <?php endforeach; ?>
+
+ </table>
+ <br />
+ <?=gettext("Hint: use 3DES for best compatibility or if you have a hardware " .
+ "crypto accelerator card. Blowfish is usually the fastest in " .
+ "software encryption"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hash algorithms"); ?></td>
+ <td width="78%" class="vtable">
+ <?php foreach ($p2_halgos as $algo => $algoname): ?>
+ <input type="checkbox" name="halgos[]" value="<?=$algo;?>" <?php if (in_array($algo, $pconfig['halgos'])) echo "checked=\"checked\""; ?> />
+ <?=htmlspecialchars($algoname);?>
+ <br />
+ <?php endforeach; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("PFS key group"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (!isset($pconfig['mobile']) || !isset($a_client['pfs_group'])): ?>
+ <select name="pfsgroup" class="formselect">
+ <?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
+ <option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['pfsgroup']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($keygroupname);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?php else: ?>
+
+ <select class="formselect" disabled="disabled">
+ <option selected="selected"><?=$p2_pfskeygroups[$a_client['pfs_group']];?></option>
+ </select>
+ <input name="pfsgroup" type="hidden" value="<?=htmlspecialchars($pconfig['pfsgroup']);?>" />
+ <br />
+ <span class="vexpl"><em><?=gettext("Set globally in mobile client options"); ?></em></span>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Lifetime"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=htmlspecialchars($pconfig['lifetime']);?>" />
+ <?=gettext("seconds"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced Options"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Automatically ping host"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="pinghost" type="text" class="formfld unknown" id="pinghost" size="28" value="<?=htmlspecialchars($pconfig['pinghost']);?>" />
+ <?=gettext("IP address"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <?php if ($pconfig['mobile']): ?>
+ <input name="mobile" type="hidden" value="true" />
+ <input name="remoteid_type" type="hidden" value="mobile" />
+ <?php endif; ?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="ikeid" type="hidden" value="<?=htmlspecialchars($pconfig['ikeid']);?>" />
+ <?php if (!empty($pconfig['reqid'])): ?>
+ <input name="reqid" type="hidden" value="<?=htmlspecialchars($pconfig['reqid']);?>" />
+ <?php endif; ?>
+ <input name="uniqid" type="hidden" value="<?=htmlspecialchars($pconfig['uniqid']);?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+change_mode('<?=htmlspecialchars($pconfig['mode'])?>');
+change_protocol('<?=htmlspecialchars($pconfig['proto'])?>');
+typesel_change_local(<?=htmlspecialchars($pconfig['localid_netbits'])?>);
+typesel_change_natlocal(<?=htmlspecialchars($pconfig['natlocalid_netbits'])?>);
+<?php if (!isset($pconfig['mobile'])): ?>
+typesel_change_remote(<?=htmlspecialchars($pconfig['remoteid_netbits'])?>);
+<?php endif; ?>
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+/* local utility functions */
+
+function pconfig_to_ealgos(& $pconfig) {
+ global $p2_ealgos;
+
+ $ealgos = array();
+ if (is_array($pconfig['ealgos'])) {
+ foreach ($p2_ealgos as $algo_name => $algo_data) {
+ if (in_array($algo_name, $pconfig['ealgos'])) {
+ $ealg = array();
+ $ealg['name'] = $algo_name;
+ if (is_array($algo_data['keysel'])) {
+ $ealg['keylen'] = $_POST["keylen_".$algo_name];
+ }
+ $ealgos[] = $ealg;
+ }
+ }
+ }
+
+ return $ealgos;
+}
+
+function ealgos_to_pconfig(& $ealgos,& $pconfig) {
+
+ $pconfig['ealgos'] = array();
+ foreach ($ealgos as $algo_data) {
+ $pconfig['ealgos'][] = $algo_data['name'];
+ if (isset($algo_data['keylen'])) {
+ $pconfig["keylen_".$algo_data['name']] = $algo_data['keylen'];
+ }
+ }
+
+ return $ealgos;
+}
+
+function pconfig_to_idinfo($prefix,& $pconfig) {
+
+ $type = $pconfig[$prefix."id_type"];
+ $address = $pconfig[$prefix."id_address"];
+ $netbits = $pconfig[$prefix."id_netbits"];
+
+ switch ($type) {
+ case "address":
+ return array('type' => $type, 'address' => $address);
+ case "network":
+ return array('type' => $type, 'address' => $address, 'netbits' => $netbits);
+ default:
+ return array('type' => $type);
+ }
+}
+
+function idinfo_to_pconfig($prefix,& $idinfo,& $pconfig) {
+
+ switch ($idinfo['type']) {
+ case "address":
+ $pconfig[$prefix."id_type"] = $idinfo['type'];
+ $pconfig[$prefix."id_address"] = $idinfo['address'];
+ break;
+ case "network":
+ $pconfig[$prefix."id_type"] = $idinfo['type'];
+ $pconfig[$prefix."id_address"] = $idinfo['address'];
+ $pconfig[$prefix."id_netbits"] = $idinfo['netbits'];
+ break;
+ default:
+ $pconfig[$prefix."id_type"] = $idinfo['type'];
+ break;
+ }
+}
+
+?>
diff --git a/src/usr/local/www/vpn_ipsec_settings.php b/src/usr/local/www/vpn_ipsec_settings.php
new file mode 100644
index 0000000..ac3fde9
--- /dev/null
+++ b/src/usr/local/www/vpn_ipsec_settings.php
@@ -0,0 +1,445 @@
+<?php
+/*
+ vpn_ipsec_settings.php
+
+ Copyright (C) 2015 Electric Sheep Fencing, LLC
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-ipsec-settings
+##|*NAME=VPN: IPsec: Settings page
+##|*DESCR=Allow access to the 'VPN: IPsec: Settings' page.
+##|*MATCH=vpn_ipsec_settings.php*
+##|-PRIV
+
+require("functions.inc");
+require("guiconfig.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+
+foreach ($ipsec_loglevels as $lkey => $ldescr) {
+ if (!empty($config['ipsec']["ipsec_{$lkey}"])) {
+ $pconfig["ipsec_{$lkey}"] = $config['ipsec']["ipsec_{$lkey}"];
+ }
+}
+$pconfig['unityplugin'] = isset($config['ipsec']['unityplugin']);
+$pconfig['strictcrlpolicy'] = isset($config['ipsec']['strictcrlpolicy']);
+$pconfig['makebeforebreak'] = isset($config['ipsec']['makebeforebreak']);
+$pconfig['noshuntlaninterfaces'] = isset($config['ipsec']['noshuntlaninterfaces']);
+$pconfig['compression'] = isset($config['ipsec']['compression']);
+$pconfig['enableinterfacesuse'] = isset($config['ipsec']['enableinterfacesuse']);
+$pconfig['acceptunencryptedmainmode'] = isset($config['ipsec']['acceptunencryptedmainmode']);
+$pconfig['maxmss_enable'] = isset($config['system']['maxmss_enable']);
+$pconfig['maxmss'] = $config['system']['maxmss'];
+$pconfig['uniqueids'] = $config['ipsec']['uniqueids'];
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!in_array($pconfig['ipsec_dmn'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Daemon debug.";
+ }
+ if (!in_array($pconfig['ipsec_mgr'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for SA Manager debug.";
+ }
+ if (!in_array($pconfig['ipsec_ike'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for IKE SA debug.";
+ }
+ if (!in_array($pconfig['ipsec_chd'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for IKE Child SA debug.";
+ }
+ if (!in_array($pconfig['ipsec_job'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Job Processing debug.";
+ }
+ if (!in_array($pconfig['ipsec_cfg'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Configuration backend debug.";
+ }
+ if (!in_array($pconfig['ipsec_knl'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Kernel Interface debug.";
+ }
+ if (!in_array($pconfig['ipsec_net'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Networking debug.";
+ }
+ if (!in_array($pconfig['ipsec_asn'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for ASN Encoding debug.";
+ }
+ if (!in_array($pconfig['ipsec_enc'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Message encoding debug.";
+ }
+ if (!in_array($pconfig['ipsec_imc'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Integrity checker debug.";
+ }
+ if (!in_array($pconfig['ipsec_imv'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Integrity Verifier debug.";
+ }
+ if (!in_array($pconfig['ipsec_pts'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for Platform Trust Service debug.";
+ }
+ if (!in_array($pconfig['ipsec_tls'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for TLS Handler debug.";
+ }
+ if (!in_array($pconfig['ipsec_esp'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for IPsec Traffic debug.";
+ }
+ if (!in_array($pconfig['ipsec_lib'], array('0', '1', '2', '3', '4', '5'), true)) {
+ $input_errors[] = "A valid value must be specified for StrongSwan Lib debug.";
+ }
+ if (isset($pconfig['maxmss'])) {
+ if (!is_numericint($pconfig['maxmss']) && $pconfig['maxmss'] <> '') {
+ $input_errors[] = "An integer must be specified for Maximum MSS.";
+ }
+ if ($pconfig['maxmss'] <> '' && $pconfig['maxmss'] < 576 || $pconfig['maxmss'] > 65535) {
+ $input_errors[] = "An integer between 576 and 65535 must be specified for Maximum MSS";
+ }
+ }
+
+ if (!$input_errors) {
+
+ foreach ($ipsec_loglevels as $lkey => $ldescr) {
+ if (empty($_POST["ipsec_{$lkey}"])) {
+ if (isset($config['ipsec']["ipsec_{$lkey}"])) {
+ unset($config['ipsec']["ipsec_{$lkey}"]);
+ }
+ } else {
+ $config['ipsec']["ipsec_{$lkey}"] = $_POST["ipsec_{$lkey}"];
+ }
+ }
+
+ $needsrestart = false;
+
+ if ($_POST['compression'] == "yes") {
+ if (!isset($config['ipsec']['compression'])) {
+ $needsrestart = true;
+ }
+ $config['ipsec']['compression'] = true;
+ } elseif (isset($config['ipsec']['compression'])) {
+ $needsrestart = true;
+ unset($config['ipsec']['compression']);
+ }
+
+ if ($_POST['enableinterfacesuse'] == "yes") {
+ if (!isset($config['ipsec']['enableinterfacesuse'])) {
+ $needsrestart = true;
+ }
+ $config['ipsec']['enableinterfacesuse'] = true;
+ } elseif (isset($config['ipsec']['enableinterfacesuse'])) {
+ $needsrestart = true;
+ unset($config['ipsec']['enableinterfacesuse']);
+ }
+
+ if ($_POST['unityplugin'] == "yes") {
+ if (!isset($config['ipsec']['unityplugin'])) {
+ $needsrestart = true;
+ }
+ $config['ipsec']['unityplugin'] = true;
+ } elseif (isset($config['ipsec']['unityplugin'])) {
+ $needsrestart = true;
+ unset($config['ipsec']['unityplugin']);
+ }
+
+ if ($_POST['strictcrlpolicy'] == "yes") {
+ $config['ipsec']['strictcrlpolicy'] = true;
+ } elseif (isset($config['ipsec']['strictcrlpolicy'])) {
+ unset($config['ipsec']['strictcrlpolicy']);
+ }
+
+ if ($_POST['makebeforebreak'] == "yes") {
+ $config['ipsec']['makebeforebreak'] = true;
+ } elseif (isset($config['ipsec']['makebeforebreak'])) {
+ unset($config['ipsec']['makebeforebreak']);
+ }
+
+ if ($_POST['noshuntlaninterfaces'] == "yes") {
+ if (isset($config['ipsec']['noshuntlaninterfaces'])) {
+ unset($config['ipsec']['noshuntlaninterfaces']);
+ }
+ } else {
+ $config['ipsec']['noshuntlaninterfaces'] = true;
+ }
+
+ if ($_POST['acceptunencryptedmainmode'] == "yes") {
+ if (!isset($config['ipsec']['acceptunencryptedmainmode'])) {
+ $needsrestart = true;
+ }
+ $config['ipsec']['acceptunencryptedmainmode'] = true;
+ } elseif (isset($config['ipsec']['acceptunencryptedmainmode'])) {
+ $needsrestart = true;
+ unset($config['ipsec']['acceptunencryptedmainmode']);
+ }
+
+ if (!empty($_POST['uniqueids'])) {
+ $config['ipsec']['uniqueids'] = $_POST['uniqueids'];
+ } else if (isset($config['ipsec']['uniqueids'])) {
+ unset($config['ipsec']['uniqueids']);
+ }
+
+ if ($_POST['maxmss_enable'] == "yes") {
+ $config['system']['maxmss_enable'] = true;
+ $config['system']['maxmss'] = $_POST['maxmss'];
+ } else {
+ if (isset($config['system']['maxmss_enable'])) {
+ unset($config['system']['maxmss_enable']);
+ }
+ if (isset($config['system']['maxmss'])) {
+ unset($config['system']['maxmss']);
+ }
+ }
+
+ write_config();
+
+ $retval = 0;
+ $retval = filter_configure();
+ if (stristr($retval, "error") <> true) {
+ $savemsg = get_std_save_message(gettext($retval));
+ } else {
+ $savemsg = gettext($retval);
+ }
+
+ vpn_ipsec_configure($needsrestart);
+ vpn_ipsec_configure_loglevels();
+
+ header("Location: vpn_ipsec_settings.php");
+ return;
+ }
+
+ // The logic value sent by $POST is opposite to the way it is stored in the config.
+ // Reset the $pconfig value so it reflects the opposite of what was $POSTed.
+ if ($_POST['noshuntlaninterfaces'] == "yes") {
+ $pconfig['noshuntlaninterfaces'] = false;
+ } else {
+ $pconfig['noshuntlaninterfaces'] = true;
+ }
+}
+
+$pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Settings"));
+$shortcut_section = "ipsec";
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+
+function maxmss_checked(obj) {
+ if (obj.checked) {
+ jQuery('#maxmss').attr('disabled', false);
+ } else {
+ jQuery('#maxmss').attr('disabled', 'true');
+ }
+}
+
+//]]>
+</script>
+
+<form action="vpn_ipsec_settings.php" method="post" name="iform" id="iform">
+
+<?php
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn ipsec settings">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Tunnels"), false, "vpn_ipsec.php");
+ $tab_array[1] = array(gettext("Mobile clients"), false, "vpn_ipsec_mobile.php");
+ $tab_array[2] = array(gettext("Pre-Shared Key"), false, "vpn_ipsec_keys.php");
+ $tab_array[3] = array(gettext("Advanced Settings"), true, "vpn_ipsec_settings.php");
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td id="mainarea">
+ <div class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("IPsec Advanced Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPsec Debug"); ?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("Start IPsec in debug mode based on sections selected"); ?></strong>
+ <br />
+ <table summary="ipsec debug">
+ <?php foreach ($ipsec_loglevels as $lkey => $ldescr): ?>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=$ldescr;?></td>
+ <td width="78%" valign="top" class="vncell">
+ <?php
+ echo "<select name=\"ipsec_{$lkey}\" id=\"ipsec_{$lkey}\">\n";
+ foreach (array("Silent", "Audit", "Control", "Diag", "Raw", "Highest") as $lidx => $lvalue) {
+ echo "<option value=\"{$lidx}\" ";
+ if ($pconfig["ipsec_{$lkey}"] == $lidx) {
+ echo "selected=\"selected\"";
+ }
+ echo ">{$lvalue}</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ <tr style="display:none;">
+ <td></td>
+ </tr>
+ </table>
+ <br /><?=gettext("Launches IPsec in debug mode so that more verbose logs " .
+ "will be generated to aid in troubleshooting."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Unique IDs"); ?></td>
+ <td width="78%" class="vtable">
+ <strong><?=gettext("Configure Unique IDs as: "); ?></strong>
+ <?php
+ echo "<select name=\"uniqueids\" id=\"uniqueids\">\n";
+ foreach ($ipsec_idhandling as $value => $lvalue) {
+ echo "<option value=\"{$value}\" ";
+ if ($pconfig['uniqueids'] == $value) {
+ echo "selected=\"selected\"";
+ }
+ echo ">{$lvalue}</option>\n";
+ }
+ ?>
+ </select>
+ <br />
+ <?=gettext("whether a particular participant ID should be kept unique, with any new IKE_SA using an ID " .
+ "deemed to replace all old ones using that ID. Participant IDs normally are unique, so a new " .
+ "IKE_SA using the same ID is almost invariably intended to replace an old one. " .
+ "The difference between <b>no</b> and <b>never</b> is that the old IKE_SAs will be replaced when receiving an " .
+ "INITIAL_CONTACT notify if the option is no but will ignore these notifies if <b>never</b> is configured. " .
+ "The daemon also accepts the value <b>keep</b> to reject " .
+ "new IKE_SA setups and keep the duplicate established earlier. Defaults to Yes."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP Compression"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="compression" type="checkbox" id="compression" value="yes" <?php if ($pconfig['compression']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable IPCompression"); ?></strong>
+ <br />
+ <?=gettext("IPComp compression of content is proposed on the connection."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Strict interface binding"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="enableinterfacesuse" type="checkbox" id="enableinterfacesuse" value="yes" <?php if ($pconfig['enableinterfacesuse']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable strict interface binding"); ?></strong>
+ <br />
+ <?=gettext("Enable strongSwan's interfaces_use option to bind specific interfaces only. This option is known to break IPsec with dynamic IP interfaces. This is not recommended at this time."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Unencrypted payloads in IKEv1 Main Mode"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="acceptunencryptedmainmode" type="checkbox" id="acceptunencryptedmainmode" value="yes" <?php if ($pconfig['acceptunencryptedmainmode']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Accept unencrypted ID and HASH payloads in IKEv1 Main Mode"); ?></strong>
+ <br />
+ <?=gettext("Some implementations send the third Main Mode message unencrypted, probably to find the PSKs for the specified ID for authentication." .
+ "This is very similar to Aggressive Mode, and has the same security implications: " .
+ "A passive attacker can sniff the negotiated Identity, and start brute forcing the PSK using the HASH payload." .
+ " It is recommended to keep this option to no, unless you know exactly what the implications are and require compatibility to such devices (for example, some SonicWall boxes).");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Maximum MSS"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="maxmss_enable" type="checkbox" id="maxmss_enable" value="yes" <?php if ($pconfig['maxmss_enable'] == true) echo "checked=\"checked\""; ?> onclick="maxmss_checked(this)" />
+ <strong><?=gettext("Enable MSS clamping on VPN traffic"); ?></strong>
+ <br />
+ <input name="maxmss" id="maxmss" value="<?php if ($pconfig['maxmss'] <> "") echo htmlspecialchars($pconfig['maxmss']); else "1400"; ?>" class="formfld unknown" <?php if ($pconfig['maxmss_enable'] == false) echo "disabled=\"disabled\""; ?> />
+ <br />
+ <?=gettext("Enable MSS clamping on TCP flows over VPN. " .
+ "This helps overcome problems with PMTUD on IPsec VPN links. If left blank, the default value is 1400 bytes. "); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable Cisco Extensions"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="unityplugin" type="checkbox" id="unityplugin" value="yes" <?php if ($pconfig['unityplugin'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Disable Unity Plugin"); ?></strong>
+ <br />
+ <?=gettext("Disable Unity Plugin which provides Cisco Extension support as Split-Include, Split-Exclude, Split-Dns, ..."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Strict CRL Checking"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="strictcrlpolicy" type="checkbox" id="strictcrlpolicy" value="yes" <?php if ($pconfig['strictcrlpolicy'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable strict Certificate Revocation List checking"); ?></strong>
+ <br />
+ <?=gettext("Check this to require availability of a fresh CRL for peer authentication based on RSA signatures to succeed."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Make before Break"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="makebeforebreak" type="checkbox" id="makebeforebreak" value="yes" <?php if ($pconfig['makebeforebreak'] == true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Initiate IKEv2 reauthentication with a make-before-break"); ?></strong>
+ <br />
+ <?=gettext("instead of a break-before-make scheme. Make-before-break uses overlapping IKE and CHILD_SA during reauthentication " .
+ "by first recreating all new SAs before deleting the old ones. This behavior can be beneficial to avoid connectivity gaps " .
+ "during reauthentication, but requires support for overlapping SAs by the peer.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Auto-exclude LAN address"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="noshuntlaninterfaces" type="checkbox" id="noshuntlaninterfaces" value="yes" <?php if ($pconfig['noshuntlaninterfaces'] != true) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable bypass for LAN interface IP"); ?></strong>
+ <br />
+ <?=gettext("Exclude traffic from LAN subnet to LAN IP address from IPsec."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_l2tp.php b/src/usr/local/www/vpn_l2tp.php
new file mode 100644
index 0000000..88f4eae
--- /dev/null
+++ b/src/usr/local/www/vpn_l2tp.php
@@ -0,0 +1,493 @@
+<?php
+/*
+ vpn_l2tp.php
+ part of pfSense
+
+ Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnl2tp
+##|*NAME=VPN: VPN L2TP page
+##|*DESCR=Allow access to the 'VPN: VPN L2TP' page.
+##|*MATCH=vpn_l2tp.php*
+##|-PRIV
+
+$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("L2TP"));
+$shortcut_section = "l2tps";
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['l2tp']['radius'])) {
+ $config['l2tp']['radius'] = array();
+}
+$l2tpcfg = &$config['l2tp'];
+
+$pconfig['remoteip'] = $l2tpcfg['remoteip'];
+$pconfig['localip'] = $l2tpcfg['localip'];
+$pconfig['l2tp_subnet'] = $l2tpcfg['l2tp_subnet'];
+$pconfig['mode'] = $l2tpcfg['mode'];
+$pconfig['interface'] = $l2tpcfg['interface'];
+$pconfig['l2tp_dns1'] = $l2tpcfg['dns1'];
+$pconfig['l2tp_dns2'] = $l2tpcfg['dns2'];
+$pconfig['wins'] = $l2tpcfg['wins'];
+$pconfig['radiusenable'] = isset($l2tpcfg['radius']['enable']);
+$pconfig['radacct_enable'] = isset($l2tpcfg['radius']['accounting']);
+$pconfig['radiusserver'] = $l2tpcfg['radius']['server'];
+$pconfig['radiussecret'] = $l2tpcfg['radius']['secret'];
+$pconfig['radiusissueips'] = $l2tpcfg['radius']['radiusissueips'];
+$pconfig['n_l2tp_units'] = $l2tpcfg['n_l2tp_units'];
+$pconfig['paporchap'] = $l2tpcfg['paporchap'];
+$pconfig['secret'] = $l2tpcfg['secret'];
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['mode'] == "server") {
+ $reqdfields = explode(" ", "localip remoteip");
+ $reqdfieldsn = array(gettext("Server address"), gettext("Remote start address"));
+
+ if ($_POST['radiusenable']) {
+ $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
+ $reqdfieldsn = array_merge($reqdfieldsn,
+ array(gettext("RADIUS server address"), gettext("RADIUS shared secret")));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
+ $input_errors[] = gettext("A valid server address must be specified.");
+ }
+ if (is_ipaddr_configured($_POST['localip'])) {
+ $input_errors[] = gettext("'Server address' parameter should NOT be set to any IP address currently in use on this firewall.");
+ }
+ if (($_POST['l2tp_subnet'] && !is_ipaddr($_POST['remoteip']))) {
+ $input_errors[] = gettext("A valid remote start address must be specified.");
+ }
+ if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
+ $input_errors[] = gettext("A valid RADIUS server address must be specified.");
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $_POST['remoteip'] = $pconfig['remoteip'] = gen_subnet($_POST['remoteip'], $_POST['l2tp_subnet']);
+ $subnet_start = ip2ulong($_POST['remoteip']);
+ $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['n_l2tp_units'] - 1;
+
+ if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
+ (ip2ulong($_POST['localip']) <= $subnet_end)) {
+ $input_errors[] = gettext("The specified server address lies in the remote subnet.");
+ }
+ if ($_POST['localip'] == get_interface_ip("lan")) {
+ $input_errors[] = gettext("The specified server address is equal to the LAN interface address.");
+ }
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+ $l2tpcfg['remoteip'] = $_POST['remoteip'];
+ $l2tpcfg['localip'] = $_POST['localip'];
+ $l2tpcfg['l2tp_subnet'] = $_POST['l2tp_subnet'];
+ $l2tpcfg['mode'] = $_POST['mode'];
+ $l2tpcfg['interface'] = $_POST['interface'];
+ $l2tpcfg['n_l2tp_units'] = $_POST['n_l2tp_units'];
+
+ $l2tpcfg['radius']['server'] = $_POST['radiusserver'];
+ $l2tpcfg['radius']['secret'] = $_POST['radiussecret'];
+ $l2tpcfg['secret'] = $_POST['secret'];
+
+ if ($_POST['wins']) {
+ $l2tpcfg['wins'] = $_POST['wins'];
+ } else {
+ unset($l2tpcfg['wins']);
+ }
+
+ $l2tpcfg['paporchap'] = $_POST['paporchap'];
+
+
+ if ($_POST['l2tp_dns1'] == "") {
+ if (isset($l2tpcfg['dns1'])) {
+ unset($l2tpcfg['dns1']);
+ }
+ } else {
+ $l2tpcfg['dns1'] = $_POST['l2tp_dns1'];
+ }
+
+ if ($_POST['l2tp_dns2'] == "") {
+ if (isset($l2tpcfg['dns2'])) {
+ unset($l2tpcfg['dns2']);
+ }
+ } else {
+ $l2tpcfg['dns2'] = $_POST['l2tp_dns2'];
+ }
+
+ if ($_POST['radiusenable'] == "yes") {
+ $l2tpcfg['radius']['enable'] = true;
+ } else {
+ unset($l2tpcfg['radius']['enable']);
+ }
+
+ if ($_POST['radacct_enable'] == "yes") {
+ $l2tpcfg['radius']['accounting'] = true;
+ } else {
+ unset($l2tpcfg['radius']['accounting']);
+ }
+
+ if ($_POST['radiusissueips'] == "yes") {
+ $l2tpcfg['radius']['radiusissueips'] = true;
+ } else {
+ unset($l2tpcfg['radius']['radiusissueips']);
+ }
+
+ write_config();
+
+ $retval = 0;
+ $retval = vpn_l2tp_configure();
+ $savemsg = get_std_save_message($retval);
+
+ /* if ajax is calling, give them an update message */
+ if (isAjax()) {
+ print_info_box_np($savemsg);
+ }
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<script type="text/javascript">
+//<![CDATA[
+function get_radio_value(obj) {
+ for (i = 0; i < obj.length; i++) {
+ if (obj[i].checked) {
+ return obj[i].value;
+ }
+ }
+ return null;
+}
+
+function enable_change(enable_over) {
+ if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
+ document.iform.remoteip.disabled = 0;
+ document.iform.localip.disabled = 0;
+ document.iform.l2tp_subnet.disabled = 0;
+ document.iform.radiusenable.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ document.iform.paporchap.disabled = 0;
+ document.iform.interface.disabled = 0;
+ document.iform.n_l2tp_units.disabled = 0;
+ document.iform.secret.disabled = 0;
+ document.iform.l2tp_dns1.disabled = 0;
+ document.iform.l2tp_dns2.disabled = 0;
+ /* fix colors */
+ document.iform.remoteip.style.backgroundColor = '#FFFFFF';
+ document.iform.localip.style.backgroundColor = '#FFFFFF';
+ document.iform.l2tp_subnet.style.backgroundColor = '#FFFFFF';
+ document.iform.radiusenable.style.backgroundColor = '#FFFFFF';
+ document.iform.radiusissueips.style.backgroundColor = '#FFFFFF';
+ document.iform.paporchap.style.backgroundColor = '#FFFFFF';
+ document.iform.interface.style.backgroundColor = '#FFFFFF';
+ document.iform.n_l2tp_units.style.backgroundColor = '#FFFFFF';
+ document.iform.secret.style.backgroundColor = '#FFFFFF';
+ if (document.iform.radiusenable.checked || enable_over) {
+ document.iform.radacct_enable.disabled = 0;
+ document.iform.radiusserver.disabled = 0;
+ document.iform.radiussecret.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ /* fix colors */
+ document.iform.radacct_enable.style.backgroundColor = '#FFFFFF';
+ document.iform.radiusserver.style.backgroundColor = '#FFFFFF';
+ document.iform.radiussecret.style.backgroundColor = '#FFFFFF';
+ document.iform.radiusissueips.style.backgroundColor = '#FFFFFF';
+ } else {
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ /* fix colors */
+ document.iform.radacct_enable.style.backgroundColor = '#D4D0C8';
+ document.iform.radiusserver.style.backgroundColor = '#D4D0C8';
+ document.iform.radiussecret.style.backgroundColor = '#D4D0C8';
+ document.iform.radiusissueips.style.backgroundColor = '#D4D0C8';
+ }
+ } else {
+ document.iform.interface.disabled = 1;
+ document.iform.n_l2tp_units.disabled = 1;
+ document.iform.l2tp_subnet.disabled = 1;
+ document.iform.l2tp_dns1.disabled = 1;
+ document.iform.l2tp_dns2.disabled = 1;
+ document.iform.paporchap.disabled = 1;
+ document.iform.remoteip.disabled = 1;
+ document.iform.localip.disabled = 1;
+ document.iform.radiusenable.disabled = 1;
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.secret.disabled = 1;
+ /* fix colors */
+ document.iform.interface.style.backgroundColor = '#D4D0C8';
+ document.iform.n_l2tp_units.style.backgroundColor = '#D4D0C8';
+ document.iform.l2tp_subnet.style.backgroundColor = '#D4D0C8';
+ document.iform.paporchap.style.backgroundColor = '#D4D0C8';
+ document.iform.remoteip.style.backgroundColor = '#D4D0C8';
+ document.iform.localip.style.backgroundColor = '#D4D0C8';
+ document.iform.radiusenable.style.backgroundColor = '#D4D0C8';
+ document.iform.radacct_enable.style.backgroundColor = '#D4D0C8';
+ document.iform.radiusserver.style.backgroundColor = '#D4D0C8';
+ document.iform.radiussecret.style.backgroundColor = '#D4D0C8';
+ document.iform.radiusissueips.style.backgroundColor = '#D4D0C8';
+ document.iform.secret.style.backgroundColor = '#D4D0C8';
+ }
+}
+//]]>
+</script>
+<form action="vpn_l2tp.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<div id="inputerrors"></div>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn l2tp">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Configuration"), true, "vpn_l2tp.php");
+ $tab_array[1] = array(gettext("Users"), false, "vpn_l2tp_users.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="mode" type="radio" onclick="enable_change(false)" value="off"
+ <?php if (($pconfig['mode'] != "server") && ($pconfig['mode'] != "redir")) echo "checked=\"checked\"";?> />
+ <?=gettext("Off"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable L2TP server"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><b><?=gettext("Interface");?></b></td>
+ <td width="78%" valign="top" class="vtable">
+ <select name="interface" class="formselect" id="interface">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ foreach ($interfaces as $iface => $ifacename):
+ ?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Address");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
+ <br />
+ <?=gettext("Enter the IP address the L2TP server should give to clients for use as their \"gateway\""); ?>.
+ <br />
+ <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
+ <br />
+ <br />
+ <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote Address Range");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
+ <br />
+ <?=gettext("Specify the starting address for the client IP address subnet.");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask"); ?></td>
+ <td width="78%" class="vtable">
+ <select id="l2tp_subnet" name="l2tp_subnet">
+ <?php
+ for ($x = 0; $x < 33; $x++) {
+ if ($x == $pconfig['l2tp_subnet']) {
+ $SELECTED = " selected=\"selected\"";
+ } else {
+ $SELECTED = "";
+ }
+ echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("Hint:"); ?> 24 <?=gettext("is"); ?> 255.255.255.0
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Number of L2TP users"); ?></td>
+ <td width="78%" class="vtable">
+ <select id="n_l2tp_units" name="n_l2tp_units">
+ <?php
+ for ($x = 0; $x < 255; $x++) {
+ if ($x == $pconfig['n_l2tp_units']) {
+ $SELECTED = " selected=\"selected\"";
+ } else {
+ $SELECTED = "";
+ }
+ echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("Hint:"); ?> 10 <?=gettext("is ten L2TP clients"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Secret");?></td>
+ <td width="78%" class="vtable">
+ <input type="password" name="secret" id="secret" class="formfld pwd" value="<?php echo htmlspecialchars($pconfig['secret']); ?>" />
+ <br />
+ <?=gettext("Specify optional secret shared between peers. Required on some devices/setups.");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Authentication Type");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?>
+ <select name="paporchap" id="paporchap">
+ <option value='chap'<?php if ($pconfig['paporchap'] == "chap") echo " selected=\"selected\""; ?>><?=gettext("CHAP"); ?></option>
+ <option value='pap'<?php if ($pconfig['paporchap'] == "pap") echo " selected=\"selected\""; ?>><?=gettext("PAP"); ?></option>
+ </select>
+ <br />
+ <?=gettext("Specifies which protocol to use for authentication.");?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("L2TP DNS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="l2tp_dns1" type="text" class="formfld unknown" id="l2tp_dns1" size="20" value="<?=htmlspecialchars($pconfig['l2tp_dns1']);?>" />
+ <br />
+ <input name="l2tp_dns2" type="text" class="formfld unknown" id="l2tp_dns2" size="20" value="<?=htmlspecialchars($pconfig['l2tp_dns2']);?>" />
+ <br />
+ <?=gettext("primary and secondary DNS servers assigned to L2TP clients"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS Server"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="wins" class="formfld unknown" id="wins" size="20" value="<?=htmlspecialchars($pconfig['wins']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
+ <strong> <?=gettext("Use a RADIUS server for authentication");?><br /></strong>
+ <?=gettext("When set, all users will be authenticated using the RADIUS server specified below. The local user database will not be used.");?><br />
+ <br />
+ <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable RADIUS accounting");?></strong><br />
+ <?=gettext("Sends accounting packets to the RADIUS server.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Server");?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
+ <br />
+ <?=gettext("Enter the IP address of the RADIUS server.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Shared Secret");?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
+ <br />
+ <?=gettext("Enter the shared secret that will be used to authenticate to the RADIUS server.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Issued IP's");?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips"<?php if (isset($pconfig['radiusissueips'])) echo " checked=\"checked\""; ?> />
+ <br />
+ <?=gettext("Issue IP Addresses via RADIUS server.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <span class="vexpl">
+ <strong class="red"><?=gettext("Note:");?></strong><br />
+ <?=gettext("Don't forget to add a firewall rule to permit traffic from L2TP clients!");?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<script type="text/javascript">
+//<![CDATA[
+ enable_change(false);
+//]]>
+</script>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_l2tp_users.php b/src/usr/local/www/vpn_l2tp_users.php
new file mode 100644
index 0000000..7ffc969
--- /dev/null
+++ b/src/usr/local/www/vpn_l2tp_users.php
@@ -0,0 +1,146 @@
+<?php
+/*
+ vpn_l2tp_users.php
+ part of pfSense
+
+ Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnl2tp-users
+##|*NAME=VPN: VPN L2TP : Users page
+##|*DESCR=Allow access to the 'VPN: VPN L2TP : Users' page.
+##|*MATCH=vpn_l2tp_users.php*
+##|-PRIV
+
+$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("Users"));
+$shortcut_section = "l2tps";
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['l2tp']['user'])) {
+ $config['l2tp']['user'] = array();
+}
+$a_secret = &$config['l2tp']['user'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ if (!is_subsystem_dirty('rebootreq')) {
+ $retval = vpn_l2tp_configure();
+ }
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ if (is_subsystem_dirty('l2tpusers')) {
+ clear_subsystem_dirty('l2tpusers');
+ }
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_secret[$_GET['id']]) {
+ unset($a_secret[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('l2tpusers');
+ pfSenseHeader("vpn_l2tp_users.php");
+ exit;
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<div id="inputerrors"></div>
+<form action="vpn_l2tp_users.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php
+if (isset($config['l2tp']['radius']['enable'])) {
+ print_info_box(gettext("Warning: RADIUS is enabled. The local user database will not be used."));
+}
+?>
+<?php if (is_subsystem_dirty('l2tpusers')): ?><br/>
+<?php print_info_box_np(gettext("The l2tp user list has been modified") . ".<br />" . gettext("You must apply the changes in order for them to take effect") . ".<br /><b>" . gettext("Warning: this will terminate all current l2tp sessions!") . "</b>");?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn l2pt users">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Configuration"), false, "vpn_l2tp.php");
+ $tab_array[1] = array(gettext("Users"), true, "vpn_l2tp_users.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td class="listhdrr"><?=gettext("Username");?></td>
+ <td class="listhdr"><?=gettext("IP address");?></td>
+ <td class="list"></td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_secret as $secretent):
+?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($secretent['name']);?>
+ </td>
+ <td class="listr">
+ <?php if ($secretent['ip'] == "") $secretent['ip'] = "Dynamic"; ?>
+ <?=htmlspecialchars($secretent['ip']);?>&nbsp;
+ </td>
+ <td class="list nowrap">
+ <a href="vpn_l2tp_users_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="edit user" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="vpn_l2tp_users.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this user?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete user"); ?>" width="17" height="17" border="0" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="2"></td>
+ <td class="list"> <a href="vpn_l2tp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user"); ?>" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_l2tp_users_edit.php b/src/usr/local/www/vpn_l2tp_users_edit.php
new file mode 100644
index 0000000..6cedc02
--- /dev/null
+++ b/src/usr/local/www/vpn_l2tp_users_edit.php
@@ -0,0 +1,212 @@
+<?php
+/*
+ vpn_l2tp_users_edit.php
+ part of pfSense
+
+ Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnl2tp-users-edit
+##|*NAME=VPN: VPN L2TP : Users : Edit page
+##|*DESCR=Allow access to the 'VPN: VPN L2TP : Users : Edit' page.
+##|*MATCH=vpn_l2tp_users_edit.php*
+##|-PRIV
+
+$pgtitle = array(gettext("VPN"), gettext("L2TP"), gettext("User"), gettext("Edit"));
+$shortcut_section = "l2tps";
+
+function l2tpusercmp($a, $b) {
+ return strcasecmp($a['name'], $b['name']);
+}
+
+function l2tp_users_sort() {
+ global $config;
+
+ if (!is_array($config['l2tp']['user'])) {
+ return;
+ }
+
+ usort($config['l2tp']['user'], "l2tpusercmp");
+}
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+if (isset($_POST['referer'])) {
+ $referer = $_POST['referer'];
+} else {
+ $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/vpn_l2tp_users.php');
+}
+
+if (!is_array($config['l2tp']['user'])) {
+ $config['l2tp']['user'] = array();
+}
+$a_secret = &$config['l2tp']['user'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_secret[$id]) {
+ $pconfig['usernamefld'] = $a_secret[$id]['name'];
+ $pconfig['ip'] = $a_secret[$id]['ip'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if (isset($id) && ($a_secret[$id])) {
+ $reqdfields = explode(" ", "usernamefld");
+ $reqdfieldsn = array(gettext("Username"));
+ } else {
+ $reqdfields = explode(" ", "usernamefld passwordfld");
+ $reqdfieldsn = array(gettext("Username"), gettext("Password"));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['usernamefld'])) {
+ $input_errors[] = gettext("The username contains invalid characters.");
+ }
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['passwordfld'])) {
+ $input_errors[] = gettext("The password contains invalid characters.");
+ }
+
+ if (($_POST['passwordfld']) && ($_POST['passwordfld'] != $_POST['passwordfld2'])) {
+ $input_errors[] = gettext("The passwords do not match.");
+ }
+ if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
+ $input_errors[] = gettext("The IP address entered is not valid.");
+ }
+
+ if (!$input_errors && !(isset($id) && $a_secret[$id])) {
+ /* make sure there are no dupes */
+ foreach ($a_secret as $secretent) {
+ if ($secretent['name'] == $_POST['usernamefld']) {
+ $input_errors[] = gettext("Another entry with the same username already exists.");
+ break;
+ }
+ }
+ }
+
+ /* if this is an AJAX caller then handle via JSON */
+ if (isAjax() && is_array($input_errors)) {
+ input_errors2Ajax($input_errors);
+ exit;
+ }
+
+ if (!$input_errors) {
+
+ if (isset($id) && $a_secret[$id]) {
+ $secretent = $a_secret[$id];
+ }
+
+ $secretent['name'] = $_POST['usernamefld'];
+ $secretent['ip'] = $_POST['ip'];
+
+ if ($_POST['passwordfld']) {
+ $secretent['password'] = $_POST['passwordfld'];
+ }
+
+ if (isset($id) && $a_secret[$id]) {
+ $a_secret[$id] = $secretent;
+ } else {
+ $a_secret[] = $secretent;
+ }
+ l2tp_users_sort();
+
+ write_config();
+
+ $retval = vpn_l2tp_configure();
+
+ pfSenseHeader("vpn_l2tp_users.php");
+
+ exit;
+ }
+}
+
+include("head.inc");
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<div id="inputerrors"></div>
+<form action="vpn_l2tp_users_edit.php" method="post" name="iform" id="iform">
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn l2tp users edit">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="usernamefld" type="text" class="formfld user" id="usernamefld" size="20" value="<?=htmlspecialchars($pconfig['usernamefld']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="passwordfld" type="password" class="formfld pwd" id="passwordfld" size="20" />
+ <br /><?=$mandfldhtml;?><input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
+ &nbsp;(<?=gettext("confirmation");?>)
+ <?php if (isset($id) && $a_secret[$id]): ?>
+ <br />
+ <span class="vexpl"><?=gettext("If you want to change the users password, enter it here twice.");?></span>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ip" type="text" class="formfld unknown" id="ip" size="20" value="<?=htmlspecialchars($pconfig['ip']);?>" />
+ <br /><span class="vexpl"><?=gettext("If you want the user to be assigned a specific IP address, enter it here.");?></span>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="submit" name="Submit" type="submit" class="formbtn" value="<?=gettext('Save');?>" />
+ <input type="button" class="formbtn" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" />
+ <input name="referer" type="hidden" value="<?=$referer;?>" />
+ <?php if (isset($id) && $a_secret[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+</form>
+
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_openvpn_client.php b/src/usr/local/www/vpn_openvpn_client.php
new file mode 100644
index 0000000..7a06c70
--- /dev/null
+++ b/src/usr/local/www/vpn_openvpn_client.php
@@ -0,0 +1,1271 @@
+<?php
+/*
+ vpn_openvpn_client.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-openvpn-client
+##|*NAME=OpenVPN: Client page
+##|*DESCR=Allow access to the 'OpenVPN: Client' page.
+##|*MATCH=vpn_openvpn_client.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("openvpn.inc");
+require_once("pkg-utils.inc");
+
+$pgtitle = array(gettext("OpenVPN"), gettext("Client"));
+$shortcut_section = "openvpn";
+
+if (!is_array($config['openvpn']['openvpn-client'])) {
+ $config['openvpn']['openvpn-client'] = array();
+}
+
+$a_client = &$config['openvpn']['openvpn-client'];
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+if (!is_array($config['crl'])) {
+ $config['crl'] = array();
+}
+
+$a_crl =& $config['crl'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+$act = $_GET['act'];
+if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+if (isset($id) && $a_client[$id]) {
+ $vpnid = $a_client[$id]['vpnid'];
+} else {
+ $vpnid = 0;
+}
+
+if ($_GET['act'] == "del") {
+
+ if (!isset($a_client[$id])) {
+ pfSenseHeader("vpn_openvpn_client.php");
+ exit;
+ }
+ if (!empty($a_client[$id])) {
+ openvpn_delete('client', $a_client[$id]);
+ }
+ unset($a_client[$id]);
+ write_config();
+ $savemsg = gettext("Client successfully deleted")."<br />";
+}
+
+if ($_GET['act'] == "new") {
+ $pconfig['autokey_enable'] = "yes";
+ $pconfig['tlsauth_enable'] = "yes";
+ $pconfig['autotls_enable'] = "yes";
+ $pconfig['interface'] = "wan";
+ $pconfig['server_port'] = 1194;
+ $pconfig['verbosity_level'] = 1; // Default verbosity is 1
+ // OpenVPN Defaults to SHA1
+ $pconfig['digest'] = "SHA1";
+}
+
+global $simplefields;
+$simplefields = array('auth_user', 'auth_pass');
+
+if ($_GET['act'] == "edit") {
+
+ if (isset($id) && $a_client[$id]) {
+ foreach ($simplefields as $stat) {
+ $pconfig[$stat] = $a_client[$id][$stat];
+ }
+
+ $pconfig['disable'] = isset($a_client[$id]['disable']);
+ $pconfig['mode'] = $a_client[$id]['mode'];
+ $pconfig['protocol'] = $a_client[$id]['protocol'];
+ $pconfig['interface'] = $a_client[$id]['interface'];
+ if (!empty($a_client[$id]['ipaddr'])) {
+ $pconfig['interface'] = $pconfig['interface'] . '|' . $a_client[$id]['ipaddr'];
+ }
+ $pconfig['local_port'] = $a_client[$id]['local_port'];
+ $pconfig['server_addr'] = $a_client[$id]['server_addr'];
+ $pconfig['server_port'] = $a_client[$id]['server_port'];
+ $pconfig['resolve_retry'] = $a_client[$id]['resolve_retry'];
+ $pconfig['proxy_addr'] = $a_client[$id]['proxy_addr'];
+ $pconfig['proxy_port'] = $a_client[$id]['proxy_port'];
+ $pconfig['proxy_user'] = $a_client[$id]['proxy_user'];
+ $pconfig['proxy_passwd'] = $a_client[$id]['proxy_passwd'];
+ $pconfig['proxy_authtype'] = $a_client[$id]['proxy_authtype'];
+ $pconfig['description'] = $a_client[$id]['description'];
+ $pconfig['custom_options'] = $a_client[$id]['custom_options'];
+ $pconfig['ns_cert_type'] = $a_client[$id]['ns_cert_type'];
+ $pconfig['dev_mode'] = $a_client[$id]['dev_mode'];
+
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ $pconfig['caref'] = $a_client[$id]['caref'];
+ $pconfig['certref'] = $a_client[$id]['certref'];
+ if ($a_client[$id]['tls']) {
+ $pconfig['tlsauth_enable'] = "yes";
+ $pconfig['tls'] = base64_decode($a_client[$id]['tls']);
+ }
+ } else {
+ $pconfig['shared_key'] = base64_decode($a_client[$id]['shared_key']);
+ }
+ $pconfig['crypto'] = $a_client[$id]['crypto'];
+ // OpenVPN Defaults to SHA1 if unset
+ $pconfig['digest'] = !empty($a_client[$id]['digest']) ? $a_client[$id]['digest'] : "SHA1";
+ $pconfig['engine'] = $a_client[$id]['engine'];
+
+ $pconfig['tunnel_network'] = $a_client[$id]['tunnel_network'];
+ $pconfig['tunnel_networkv6'] = $a_client[$id]['tunnel_networkv6'];
+ $pconfig['remote_network'] = $a_client[$id]['remote_network'];
+ $pconfig['remote_networkv6'] = $a_client[$id]['remote_networkv6'];
+ $pconfig['use_shaper'] = $a_client[$id]['use_shaper'];
+ $pconfig['compression'] = $a_client[$id]['compression'];
+ $pconfig['passtos'] = $a_client[$id]['passtos'];
+
+ // just in case the modes switch
+ $pconfig['autokey_enable'] = "yes";
+ $pconfig['autotls_enable'] = "yes";
+
+ $pconfig['no_tun_ipv6'] = $a_client[$id]['no_tun_ipv6'];
+ $pconfig['route_no_pull'] = $a_client[$id]['route_no_pull'];
+ $pconfig['route_no_exec'] = $a_client[$id]['route_no_exec'];
+ if (isset($a_client[$id]['verbosity_level'])) {
+ $pconfig['verbosity_level'] = $a_client[$id]['verbosity_level'];
+ } else {
+ $pconfig['verbosity_level'] = 1; // Default verbosity is 1
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (isset($id) && $a_client[$id]) {
+ $vpnid = $a_client[$id]['vpnid'];
+ } else {
+ $vpnid = 0;
+ }
+
+ list($iv_iface, $iv_ip) = explode ("|", $pconfig['interface']);
+ if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) {
+ $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address.");
+ } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) {
+ $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address.");
+ } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) {
+ $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address.");
+ } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) {
+ $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address.");
+ }
+
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ $tls_mode = true;
+ } else {
+ $tls_mode = false;
+ }
+
+ /* input validation */
+ if ($pconfig['local_port']) {
+
+ if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) {
+ $input_errors[] = $result;
+ }
+
+ $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid);
+ if (($portused != $vpnid) && ($portused != 0)) {
+ $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value");
+ }
+ }
+
+ if ($result = openvpn_validate_host($pconfig['server_addr'], 'Server host or address')) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_port($pconfig['server_port'], 'Server port')) {
+ $input_errors[] = $result;
+ }
+
+ if ($pconfig['proxy_addr']) {
+
+ if ($result = openvpn_validate_host($pconfig['proxy_addr'], 'Proxy host or address')) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_port($pconfig['proxy_port'], 'Proxy port')) {
+ $input_errors[] = $result;
+ }
+
+ if ($pconfig['proxy_authtype'] != "none") {
+ if (empty($pconfig['proxy_user']) || empty($pconfig['proxy_passwd'])) {
+ $input_errors[] = gettext("User name and password are required for proxy with authentication.");
+ }
+ }
+ }
+
+ if ($pconfig['tunnel_network']) {
+ if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) {
+ $input_errors[] = $result;
+ }
+ }
+
+ if ($pconfig['tunnel_networkv6']) {
+ if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) {
+ $input_errors[] = $result;
+ }
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ if (!empty($pconfig['use_shaper']) && (!is_numeric($pconfig['use_shaper']) || ($pconfig['use_shaper'] <= 0))) {
+ $input_errors[] = gettext("The bandwidth limit must be a positive numeric value.");
+ }
+
+ if ($pconfig['autokey_enable']) {
+ $pconfig['shared_key'] = openvpn_create_key();
+ }
+
+ if (!$tls_mode && !$pconfig['autokey_enable']) {
+ if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") ||
+ !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) {
+ $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid");
+ }
+ }
+
+ if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) {
+ if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") ||
+ !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) {
+ $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid");
+ }
+ }
+
+ /* If we are not in shared key mode, then we need the CA/Cert. */
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ $reqdfields = explode(" ", "caref");
+ $reqdfieldsn = array(gettext("Certificate Authority"));
+ } elseif (!$pconfig['autokey_enable']) {
+ /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */
+ $reqdfields = array('shared_key');
+ $reqdfieldsn = array(gettext('Shared key'));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($pconfig['mode'] != "p2p_shared_key") && empty($pconfig['certref']) && empty($pconfig['auth_user']) && empty($pconfig['auth_pass'])) {
+ $input_errors[] = gettext("If no Client Certificate is selected, a username and/or password must be entered.");
+ }
+
+ if (!$input_errors) {
+
+ $client = array();
+
+ foreach ($simplefields as $stat) {
+ update_if_changed($stat, $client[$stat], $_POST[$stat]);
+ }
+
+ if ($vpnid) {
+ $client['vpnid'] = $vpnid;
+ } else {
+ $client['vpnid'] = openvpn_vpnid_next();
+ }
+
+ if ($_POST['disable'] == "yes") {
+ $client['disable'] = true;
+ }
+ $client['protocol'] = $pconfig['protocol'];
+ $client['dev_mode'] = $pconfig['dev_mode'];
+ list($client['interface'], $client['ipaddr']) = explode ("|", $pconfig['interface']);
+ $client['local_port'] = $pconfig['local_port'];
+ $client['server_addr'] = $pconfig['server_addr'];
+ $client['server_port'] = $pconfig['server_port'];
+ $client['resolve_retry'] = $pconfig['resolve_retry'];
+ $client['proxy_addr'] = $pconfig['proxy_addr'];
+ $client['proxy_port'] = $pconfig['proxy_port'];
+ $client['proxy_authtype'] = $pconfig['proxy_authtype'];
+ $client['proxy_user'] = $pconfig['proxy_user'];
+ $client['proxy_passwd'] = $pconfig['proxy_passwd'];
+ $client['description'] = $pconfig['description'];
+ $client['mode'] = $pconfig['mode'];
+ $client['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']);
+
+ if ($tls_mode) {
+ $client['caref'] = $pconfig['caref'];
+ $client['certref'] = $pconfig['certref'];
+ if ($pconfig['tlsauth_enable']) {
+ if ($pconfig['autotls_enable']) {
+ $pconfig['tls'] = openvpn_create_key();
+ }
+ $client['tls'] = base64_encode($pconfig['tls']);
+ }
+ } else {
+ $client['shared_key'] = base64_encode($pconfig['shared_key']);
+ }
+ $client['crypto'] = $pconfig['crypto'];
+ $client['digest'] = $pconfig['digest'];
+ $client['engine'] = $pconfig['engine'];
+
+ $client['tunnel_network'] = $pconfig['tunnel_network'];
+ $client['tunnel_networkv6'] = $pconfig['tunnel_networkv6'];
+ $client['remote_network'] = $pconfig['remote_network'];
+ $client['remote_networkv6'] = $pconfig['remote_networkv6'];
+ $client['use_shaper'] = $pconfig['use_shaper'];
+ $client['compression'] = $pconfig['compression'];
+ $client['passtos'] = $pconfig['passtos'];
+
+ $client['no_tun_ipv6'] = $pconfig['no_tun_ipv6'];
+ $client['route_no_pull'] = $pconfig['route_no_pull'];
+ $client['route_no_exec'] = $pconfig['route_no_exec'];
+ $client['verbosity_level'] = $pconfig['verbosity_level'];
+
+ if (isset($id) && $a_client[$id]) {
+ $a_client[$id] = $client;
+ } else {
+ $a_client[] = $client;
+ }
+
+ openvpn_resync('client', $client);
+ write_config();
+
+ header("Location: vpn_openvpn_client.php");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function mode_change() {
+ index = document.iform.mode.selectedIndex;
+ value = document.iform.mode.options[index].value;
+ switch (value) {
+ case "p2p_tls":
+ document.getElementById("tls").style.display="";
+ document.getElementById("tls_ca").style.display="";
+ document.getElementById("tls_cert").style.display="";
+ document.getElementById("userpass").style.display="";
+ document.getElementById("userpassheader").style.display="";
+ document.getElementById("psk").style.display="none";
+ break;
+ case "p2p_shared_key":
+ document.getElementById("tls").style.display="none";
+ document.getElementById("tls_ca").style.display="none";
+ document.getElementById("tls_cert").style.display="none";
+ document.getElementById("userpass").style.display="none";
+ document.getElementById("userpassheader").style.display="none";
+ document.getElementById("psk").style.display="";
+ break;
+ }
+}
+
+function dev_mode_change() {
+ index = document.iform.dev_mode.selectedIndex;
+ value = document.iform.dev_mode.options[index].value;
+ switch (value) {
+ case "tun":
+ document.getElementById("chkboxNoTunIPv6").style.display="";
+ break;
+ case "tap":
+ document.getElementById("chkboxNoTunIPv6").style.display="none";
+ break;
+ }
+}
+
+function autokey_change() {
+ if (document.iform.autokey_enable.checked) {
+ document.getElementById("autokey_opts").style.display="none";
+ } else {
+ document.getElementById("autokey_opts").style.display="";
+ }
+}
+
+function useproxy_changed() {
+
+ if (jQuery('#proxy_authtype').val() != 'none') {
+ jQuery('#proxy_authtype_opts').show();
+ } else {
+ jQuery('#proxy_authtype_opts').hide();
+ }
+}
+
+function tlsauth_change() {
+
+<?php if (!$pconfig['tls']): ?>
+ if (document.iform.tlsauth_enable.checked) {
+ document.getElementById("tlsauth_opts").style.display="";
+ } else {
+ document.getElementById("tlsauth_opts").style.display="none";
+ }
+<?php endif; ?>
+
+ autotls_change();
+}
+
+function autotls_change() {
+
+<?php if (!$pconfig['tls']): ?>
+ autocheck = document.iform.autotls_enable.checked;
+<?php else: ?>
+ autocheck = false;
+<?php endif; ?>
+
+ if (document.iform.tlsauth_enable.checked && !autocheck) {
+ document.getElementById("autotls_opts").style.display="";
+ } else {
+ document.getElementById("autotls_opts").style.display="none";
+ }
+}
+
+//]]>
+</script>
+<?php
+if (!$savemsg) {
+ $savemsg = "";
+}
+
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn client">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Server"), false, "vpn_openvpn_server.php");
+ $tab_array[] = array(gettext("Client"), true, "vpn_openvpn_client.php");
+ $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php");
+ $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
+ add_package_tabs("openvpn-client-export", $tab_array);
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+
+ <?php if ($act == "new" || $act == "edit"): ?>
+
+ <form action="vpn_openvpn_client.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="enable disable client">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['disable'], $chk); ?>
+ <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ &nbsp;
+ <span class="vexpl">
+ <strong><?=gettext("Disable this client"); ?></strong><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Set this option to disable this client without removing it from the list"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Mode");?></td>
+ <td width="78%" class="vtable">
+ <select name="mode" id="mode" class="formselect" onchange="mode_change()">
+ <?php
+ foreach ($openvpn_client_modes as $name => $desc):
+ $selected = "";
+ if ($pconfig['mode'] == $name) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td width="78%" class="vtable">
+ <select name='protocol' class="formselect">
+ <?php
+ foreach ($openvpn_prots as $prot):
+ $selected = "";
+ if ($pconfig['protocol'] == $prot) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$prot;?>" <?=$selected;?>><?=$prot;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Device mode");?></td>
+ <td width="78%" class="vtable">
+ <select name='dev_mode' class="formselect" onchange="dev_mode_change()">
+ <?php
+ foreach ($openvpn_dev_mode as $mode):
+ $selected = "";
+ if ($pconfig['dev_mode'] == $mode) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$mode;?>" <?=$selected;?>><?=$mode;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
+ }
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ if ($group['ipprotocol'] != inet) {
+ continue;
+ }
+ if ($group[0]['vip'] <> "") {
+ $vipif = $group[0]['vip'];
+ } else {
+ $vipif = $group[0]['int'];
+ }
+ $interfaces[$name] = "GW Group {$name}";
+ }
+ $interfaces['lo0'] = "Localhost";
+ $interfaces['any'] = "any";
+ foreach ($interfaces as $iface => $ifacename):
+ $selected = "";
+ if ($iface == $pconfig['interface']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$iface;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select> <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Local port");?></td>
+ <td width="78%" class="vtable">
+ <input name="local_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['local_port']);?>" />
+ <br />
+ <?=gettext("Set this option if you would like to bind to a specific port. Leave this blank or enter 0 for a random dynamic port."); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server host or address");?></td>
+ <td width="78%" class="vtable">
+ <input name="server_addr" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['server_addr']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server port");?></td>
+ <td width="78%" class="vtable">
+ <input name="server_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['server_port']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy host or address");?></td>
+ <td width="78%" class="vtable">
+ <input name="proxy_addr" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['proxy_addr']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy port");?></td>
+ <td width="78%" class="vtable">
+ <input name="proxy_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['proxy_port']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Proxy authentication extra options");?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="proxy authentication">
+ <tr>
+ <td align="right" width="25%">
+ <span class="vexpl">
+ &nbsp;<?=gettext("Authentication method"); ?> :&nbsp;
+ </span>
+ </td>
+ <td>
+ <select name="proxy_authtype" id="proxy_authtype" class="formfld select" onchange="useproxy_changed()">
+ <option value="none" <?php if ($pconfig['proxy_authtype'] == "none") echo "selected=\"selected\""; ?>><?=gettext("none"); ?></option>
+ <option value="basic" <?php if ($pconfig['proxy_authtype'] == "basic") echo "selected=\"selected\""; ?>><?=gettext("basic"); ?></option>
+ <option value="ntlm" <?php if ($pconfig['proxy_authtype'] == "ntlm") echo "selected=\"selected\""; ?>><?=gettext("ntlm"); ?></option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <br />
+ <table border="0" cellpadding="2" cellspacing="0" id="proxy_authtype_opts" style="display:none" summary="proxy authentication options">
+ <tr>
+ <td align="right" width="25%">
+ <span class="vexpl">
+ &nbsp;<?=gettext("Username"); ?> :&nbsp;
+ </span>
+ </td>
+ <td>
+ <input name="proxy_user" id="proxy_user" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['proxy_user']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td align="right" width="25%">
+ <span class="vexpl">
+ &nbsp;<?=gettext("Password"); ?> :&nbsp;
+ </span>
+ </td>
+ <td>
+ <input name="proxy_passwd" id="proxy_passwd" type="password" class="formfld pwd" size="20" value="<?=htmlspecialchars($pconfig['proxy_passwd']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Server host name resolution"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="server host name resolution">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['resolve_retry'], $chk); ?>
+ <input name="resolve_retry" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Infinitely resolve server"); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Continuously attempt to resolve the server host " .
+ "name. Useful when communicating with a server " .
+ "that is not permanently connected to the Internet"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
+ <br />
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr id='userpassheader'>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("User Authentication Settings"); ?></td>
+ </tr>
+ <tr id='userpass'>
+ <td width="22%" valign="top" class="vncell"><?=gettext("User name/pass"); ?></td>
+ <td width="78%" class="vtable">
+ <?=gettext("Leave empty when no user name and/or password are needed."); ?>
+ <br/>
+ <table border="0" cellpadding="2" cellspacing="0" summary="user name password">
+ <tr>
+ <td align="right" width="25%">
+ <span class="vexpl">
+ &nbsp;<?=gettext("Username"); ?> :&nbsp;
+ </span>
+ </td>
+ <td>
+ <input name="auth_user" id="auth_user" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['auth_user']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td align="right" width="25%">
+ <span class="vexpl">
+ &nbsp;<?=gettext("Password"); ?> :&nbsp;
+ </span>
+ </td>
+ <td>
+ <input name="auth_pass" id="auth_pass" type="password" class="formfld pwd" size="20" value="<?=htmlspecialchars($pconfig['auth_pass']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Settings"); ?></td>
+ </tr>
+ <tr id="tls">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("TLS Authentication"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="tls authentication">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['tlsauth_enable'], $chk); ?>
+ <input name="tlsauth_enable" id="tlsauth_enable" type="checkbox" value="yes" <?=$chk;?> onclick="tlsauth_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Enable authentication of TLS packets"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php if (!$pconfig['tls']): ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="tlsauth_opts" summary="tls authentication options">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['autotls_enable'], $chk); ?>
+ <input name="autotls_enable" id="autotls_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autotls_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Automatically generate a shared TLS authentication key"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php endif; ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="autotls_opts" summary="tls authentication options">
+ <tr>
+ <td>
+ <textarea name="tls" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['tls']);?></textarea>
+ <br />
+ <?=gettext("Paste your shared key here"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="tls_ca">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Authority"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_ca)): ?>
+ <select name='caref' class="formselect">
+ <?php
+ foreach ($a_ca as $ca):
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="tls_cert">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Client Certificate"); ?></td>
+ <td width="78%" class="vtable">
+ <select name='certref' class="formselect">
+ <?php
+ foreach ($a_cert as $cert):
+ $selected = "";
+ $caname = "";
+ $inuse = "";
+ $revoked = "";
+ $ca = lookup_ca($cert['caref']);
+ if ($ca) {
+ $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
+ }
+ if ($pconfig['certref'] == $cert['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ if (cert_in_use($cert['refid'])) {
+ $inuse = " *In Use";
+ }
+ if (is_cert_revoked($cert)) {
+ $revoked = " *Revoked";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
+ <?php endforeach; ?>
+ <option value="" <?PHP if (empty($pconfig['certref'])) echo "selected=\"selected\""; ?>>None (Username and/or Password required)</option>
+ </select>
+ <?php if (!count($a_cert)): ?>
+ <b>No Certificates defined.</b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a> if one is required for this connection.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="psk">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Key"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (!$pconfig['shared_key']): ?>
+ <table border="0" cellpadding="2" cellspacing="0" summary="shared key">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['autokey_enable'], $chk); ?>
+ <input name="autokey_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autokey_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Automatically generate a shared key"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php endif; ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="autokey_opts" summary="shared key options">
+ <tr>
+ <td>
+ <textarea name="shared_key" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['shared_key']);?></textarea>
+ <br />
+ <?=gettext("Paste your shared key here"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="crypto" class="formselect">
+ <?php
+ $cipherlist = openvpn_get_cipherlist();
+ foreach ($cipherlist as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['crypto']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Auth Digest Algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="digest" class="formselect">
+ <?php
+ $digestlist = openvpn_get_digestlist();
+ foreach ($digestlist as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['digest']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br /><?PHP echo gettext("NOTE: Leave this set to SHA1 unless the server is set to match. SHA1 is the default for OpenVPN."); ?>
+ </td>
+ </tr>
+ <tr id="engine">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="engine" class="formselect">
+ <?php
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['engine']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Tunnel Network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
+ <br />
+ <?=gettext("This is the virtual network used for private " .
+ "communications between this client and the " .
+ "server expressed using CIDR (eg. 10.0.8.0/24). " .
+ "The first network address is assumed to be the " .
+ "server address and the second network address " .
+ "will be assigned to the client virtual " .
+ "interface"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Tunnel Network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="tunnel_networkv6" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_networkv6']);?>" />
+ <br />
+ <?=gettext("This is the IPv6 virtual network used for private " .
+ "communications between this client and the " .
+ "server expressed using CIDR (eg. fe80::/64). " .
+ "The first network address is assumed to be the " .
+ "server address and the second network address " .
+ "will be assigned to the client virtual " .
+ "interface"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
+ <br />
+ <?=gettext("These are the IPv4 networks that will be routed through " .
+ "the tunnel, so that a site-to-site VPN can be " .
+ "established without manually changing the routing tables. " .
+ "Expressed as a comma-separated list of one or more CIDR ranges. " .
+ "If this is a site-to-site VPN, enter the " .
+ "remote LAN/s here. You may leave this blank to " .
+ "only communicate with other clients"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
+ <br />
+ <?=gettext("These are the IPv6 networks that will be routed through " .
+ "the tunnel, so that a site-to-site VPN can be " .
+ "established without manually changing the routing tables. " .
+ "Expressed as a comma-separated list of one or more IP/PREFIX. " .
+ "If this is a site-to-site VPN, enter the " .
+ "remote LAN/s here. You may leave this blank to " .
+ "only communicate with other clients"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Limit outgoing bandwidth");?></td>
+ <td width="78%" class="vtable">
+ <input name="use_shaper" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['use_shaper']);?>" />
+ <br />
+ <?=gettext("Maximum outgoing bandwidth for this tunnel. " .
+ "Leave empty for no limit. The input value has " .
+ "to be something between 100 bytes/sec and 100 " .
+ "Mbytes/sec (entered as bytes per second)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Compression"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="compression" class="formselect">
+ <?php
+ foreach ($openvpn_compression_modes as $cmode => $cmodedesc):
+ $selected = "";
+ if ($cmode == $pconfig['compression']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?= $cmode ?>" <?= $selected ?>><?= $cmodedesc ?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently."); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Type-of-Service"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="type-of-service">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['passtos'], $chk); ?>
+ <input name="passtos" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Set the TOS IP header value of tunnel packets to match the encapsulated packet value"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="chkboxNoTunIPv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable IPv6"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="disable-ipv6">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['no_tun_ipv6'], $chk); ?>
+ <input name="no_tun_ipv6" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Don't forward IPv6 traffic"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="chkboxRouteNoPull">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Don't pull routes"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dont-pull-routes">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['route_no_pull'], $chk); ?>
+ <input name="route_no_pull" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("This option effectively bars the server from adding routes to the client's routing table, however note that this option still allows the server to set the TCP/IP properties of the client's TUN/TAP interface"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="chkboxRouteNoExec">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Don't add/remove routes"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dont-exec-routes">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['route_no_exec'], $chk); ?>
+ <input name="route_no_exec" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Don't add or remove routes automatically. Instead pass routes to "); ?> <strong>--route-up</strong> <?=gettext("script using environmental variables"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="advance configuration">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="advance configuration">
+ <tr>
+ <td>
+ <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
+ <?=gettext("Enter any additional options you would like to add to the OpenVPN client configuration here, separated by a semicolon"); ?><br />
+ <?=gettext("EXAMPLE:"); ?> <strong>remote server.example.com 1194;</strong> or <strong>remote 1.2.3.4 1194;</strong>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="comboboxVerbosityLevel">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Verbosity level");?></td>
+ <td width="78%" class="vtable">
+ <select name="verbosity_level" class="formselect">
+ <?php
+ foreach ($openvpn_verbosity_level as $verb_value => $verb_desc):
+ $selected = "";
+ if ($pconfig['verbosity_level'] == $verb_value) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$verb_value;?>" <?=$selected;?>><?=$verb_desc;?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Each level shows all info from the previous levels. Level 3 is recommended if you want a good summary of what's happening without being swamped by output"); ?>.<br /> <br />
+ <strong>none</strong> -- <?=gettext("No output except fatal errors"); ?>. <br />
+ <strong>default</strong>-<strong>4</strong> -- <?=gettext("Normal usage range"); ?>. <br />
+ <strong>5</strong> -- <?=gettext("Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets"); ?>. <br />
+ <strong>6</strong>-<strong>11</strong> -- <?=gettext("Debug info range"); ?>.
+ </td>
+ </tr>
+
+ </table>
+
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="icons">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="act" type="hidden" value="<?=$act;?>" />
+ <?php if (isset($id) && $a_client[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else: ?>
+
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="list of openvpn clients">
+ <thead>
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Protocol"); ?></td>
+ <td width="30%" class="listhdrr"><?=gettext("Server"); ?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <a href="vpn_openvpn_client.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add client"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p>
+ <?=gettext("Additional OpenVPN clients can be added here.");?>
+ </p>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <?php
+ $i = 0;
+ foreach ($a_client as $client):
+ $disabled = "NO";
+ if (isset($client['disable'])) {
+ $disabled = "YES";
+ }
+ $server = "{$client['server_addr']}:{$client['server_port']}";
+ ?>
+ <tr ondblclick="document.location='vpn_openvpn_client.php?act=edit&amp;id=<?=$i;?>'">
+ <td class="listlr">
+ <?=$disabled;?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($client['protocol']);?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($server);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($client['description']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="vpn_openvpn_client.php?act=edit&amp;id=<?=$i;?>">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit client"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ &nbsp;
+ <a href="vpn_openvpn_client.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this client?"); ?>')">
+ <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete client"); ?>" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr style="display:none;"><td></td></tr>
+ </tbody>
+ </table>
+
+ <?php endif; ?>
+
+ </td>
+ </tr>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+mode_change();
+autokey_change();
+tlsauth_change();
+useproxy_changed();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+/* local utility functions */
+
+function set_checked($var, & $chk) {
+ if ($var) {
+ $chk = "checked=\"checked\"";
+ } else {
+ $chk = "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/vpn_openvpn_csc.php b/src/usr/local/www/vpn_openvpn_csc.php
new file mode 100644
index 0000000..356db7f
--- /dev/null
+++ b/src/usr/local/www/vpn_openvpn_csc.php
@@ -0,0 +1,868 @@
+<?php
+/*
+ vpn_openvpn_csc.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-openvpn-csc
+##|*NAME=OpenVPN: Client Specific Override page
+##|*DESCR=Allow access to the 'OpenVPN: Client Specific Override' page.
+##|*MATCH=vpn_openvpn_csc.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("openvpn.inc");
+require_once("pkg-utils.inc");
+
+$pgtitle = array(gettext("OpenVPN"), gettext("Client Specific Override"));
+$shortcut_section = "openvpn";
+
+if (!is_array($config['openvpn']['openvpn-csc'])) {
+ $config['openvpn']['openvpn-csc'] = array();
+}
+
+$a_csc = &$config['openvpn']['openvpn-csc'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+$act = $_GET['act'];
+if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+if ($_GET['act'] == "del") {
+
+ if (!$a_csc[$id]) {
+ pfSenseHeader("vpn_openvpn_csc.php");
+ exit;
+ }
+
+ openvpn_delete_csc($a_csc[$id]);
+ unset($a_csc[$id]);
+ write_config();
+ $savemsg = gettext("Client Specific Override successfully deleted")."<br />";
+}
+
+if ($_GET['act'] == "edit") {
+
+ if (isset($id) && $a_csc[$id]) {
+ $pconfig['custom_options'] = $a_csc[$id]['custom_options'];
+ $pconfig['disable'] = isset($a_csc[$id]['disable']);
+ $pconfig['common_name'] = $a_csc[$id]['common_name'];
+ $pconfig['block'] = $a_csc[$id]['block'];
+ $pconfig['description'] = $a_csc[$id]['description'];
+
+ $pconfig['tunnel_network'] = $a_csc[$id]['tunnel_network'];
+ $pconfig['local_network'] = $a_csc[$id]['local_network'];
+ $pconfig['local_networkv6'] = $a_csc[$id]['local_networkv6'];
+ $pconfig['remote_network'] = $a_csc[$id]['remote_network'];
+ $pconfig['remote_networkv6'] = $a_csc[$id]['remote_networkv6'];
+ $pconfig['gwredir'] = $a_csc[$id]['gwredir'];
+
+ $pconfig['push_reset'] = $a_csc[$id]['push_reset'];
+
+ $pconfig['dns_domain'] = $a_csc[$id]['dns_domain'];
+ if ($pconfig['dns_domain']) {
+ $pconfig['dns_domain_enable'] = true;
+ }
+
+ $pconfig['dns_server1'] = $a_csc[$id]['dns_server1'];
+ $pconfig['dns_server2'] = $a_csc[$id]['dns_server2'];
+ $pconfig['dns_server3'] = $a_csc[$id]['dns_server3'];
+ $pconfig['dns_server4'] = $a_csc[$id]['dns_server4'];
+ if ($pconfig['dns_server1'] ||
+ $pconfig['dns_server2'] ||
+ $pconfig['dns_server3'] ||
+ $pconfig['dns_server4']) {
+ $pconfig['dns_server_enable'] = true;
+ }
+
+ $pconfig['ntp_server1'] = $a_csc[$id]['ntp_server1'];
+ $pconfig['ntp_server2'] = $a_csc[$id]['ntp_server2'];
+ if ($pconfig['ntp_server1'] ||
+ $pconfig['ntp_server2']) {
+ $pconfig['ntp_server_enable'] = true;
+ }
+
+ $pconfig['netbios_enable'] = $a_csc[$id]['netbios_enable'];
+ $pconfig['netbios_ntype'] = $a_csc[$id]['netbios_ntype'];
+ $pconfig['netbios_scope'] = $a_csc[$id]['netbios_scope'];
+
+ $pconfig['wins_server1'] = $a_csc[$id]['wins_server1'];
+ $pconfig['wins_server2'] = $a_csc[$id]['wins_server2'];
+ if ($pconfig['wins_server1'] ||
+ $pconfig['wins_server2']) {
+ $pconfig['wins_server_enable'] = true;
+ }
+
+ $pconfig['nbdd_server1'] = $a_csc[$id]['nbdd_server1'];
+ if ($pconfig['nbdd_server1']) {
+ $pconfig['nbdd_server_enable'] = true;
+ }
+ }
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'Tunnel network')) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) {
+ $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) {
+ $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) {
+ $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) {
+ $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address");
+ }
+ }
+
+ if ($pconfig['ntp_server_enable']) {
+ if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) {
+ $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) {
+ $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) {
+ $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) {
+ $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address");
+ }
+ }
+
+ if ($pconfig['netbios_enable']) {
+ if ($pconfig['wins_server_enable']) {
+ if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) {
+ $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) {
+ $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address");
+ }
+ }
+ if ($pconfig['nbdd_server_enable']) {
+ if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) {
+ $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address");
+ }
+ }
+ }
+
+ $reqdfields[] = 'common_name';
+ $reqdfieldsn[] = 'Common name';
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$input_errors) {
+
+ $csc = array();
+
+ $csc['custom_options'] = $pconfig['custom_options'];
+ if ($_POST['disable'] == "yes") {
+ $csc['disable'] = true;
+ }
+ $csc['common_name'] = $pconfig['common_name'];
+ $csc['block'] = $pconfig['block'];
+ $csc['description'] = $pconfig['description'];
+
+ $csc['tunnel_network'] = $pconfig['tunnel_network'];
+ $csc['local_network'] = $pconfig['local_network'];
+ $csc['local_networkv6'] = $pconfig['local_networkv6'];
+ $csc['remote_network'] = $pconfig['remote_network'];
+ $csc['remote_networkv6'] = $pconfig['remote_networkv6'];
+ $csc['gwredir'] = $pconfig['gwredir'];
+
+ $csc['push_reset'] = $pconfig['push_reset'];
+
+ if ($pconfig['dns_domain_enable']) {
+ $csc['dns_domain'] = $pconfig['dns_domain'];
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ $csc['dns_server1'] = $pconfig['dns_server1'];
+ $csc['dns_server2'] = $pconfig['dns_server2'];
+ $csc['dns_server3'] = $pconfig['dns_server3'];
+ $csc['dns_server4'] = $pconfig['dns_server4'];
+ }
+
+ if ($pconfig['ntp_server_enable']) {
+ $csc['ntp_server1'] = $pconfig['ntp_server1'];
+ $csc['ntp_server2'] = $pconfig['ntp_server2'];
+ }
+
+ $csc['netbios_enable'] = $pconfig['netbios_enable'];
+ $csc['netbios_ntype'] = $pconfig['netbios_ntype'];
+ $csc['netbios_scope'] = $pconfig['netbios_scope'];
+
+ if ($pconfig['netbios_enable']) {
+
+ if ($pconfig['wins_server_enable']) {
+ $csc['wins_server1'] = $pconfig['wins_server1'];
+ $csc['wins_server2'] = $pconfig['wins_server2'];
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ $csc['nbdd_server1'] = $pconfig['nbdd_server1'];
+ }
+ }
+
+ if (isset($id) && $a_csc[$id]) {
+ $old_csc_cn = $a_csc[$id]['common_name'];
+ $a_csc[$id] = $csc;
+ } else {
+ $a_csc[] = $csc;
+ }
+
+ if (!empty($old_csc_cn)) {
+ openvpn_cleanup_csc($old_csc_cn);
+ }
+ openvpn_resync_csc($csc);
+ write_config();
+
+ header("Location: vpn_openvpn_csc.php");
+ exit;
+ }
+}
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function dns_domain_change() {
+
+ if (document.iform.dns_domain_enable.checked) {
+ document.getElementById("dns_domain_data").style.display="";
+ } else {
+ document.getElementById("dns_domain_data").style.display="none";
+ }
+}
+
+function dns_server_change() {
+
+ if (document.iform.dns_server_enable.checked) {
+ document.getElementById("dns_server_data").style.display="";
+ } else {
+ document.getElementById("dns_server_data").style.display="none";
+ }
+}
+
+function wins_server_change() {
+
+ if (document.iform.wins_server_enable.checked) {
+ document.getElementById("wins_server_data").style.display="";
+ } else {
+ document.getElementById("wins_server_data").style.display="none";
+ }
+}
+
+function ntp_server_change() {
+
+ if (document.iform.ntp_server_enable.checked) {
+ document.getElementById("ntp_server_data").style.display="";
+ } else {
+ document.getElementById("ntp_server_data").style.display="none";
+ }
+}
+
+function netbios_change() {
+
+ if (document.iform.netbios_enable.checked) {
+ document.getElementById("netbios_data").style.display="";
+ document.getElementById("wins_opts").style.display="";
+ } else {
+ document.getElementById("netbios_data").style.display="none";
+ document.getElementById("wins_opts").style.display="none";
+ }
+}
+
+//]]>
+</script>
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn csc">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Server"), false, "vpn_openvpn_server.php");
+ $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php");
+ $tab_array[] = array(gettext("Client Specific Overrides"), true, "vpn_openvpn_csc.php");
+ $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
+ add_package_tabs("openvpn-client-export", $tab_array);
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+
+ <?php if ($act == "new" || $act == "edit"): ?>
+
+ <form action="vpn_openvpn_csc.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="enable disable">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['disable'], $chk); ?>
+ <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ &nbsp;
+ <span class="vexpl">
+ <strong><?=gettext("Disable this override"); ?></strong><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Set this option to disable this client-specific override without removing it from the list"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Common name"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="common_name" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['common_name']);?>" />
+ <br />
+ <?=gettext("Enter the client's X.509 common name here"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
+ <br />
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Connection blocking"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="connection blocking">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['block'], $chk); ?>
+ <input name="block" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Block this client connection based on its common name"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Don't use this option to permanently disable a " .
+ "client due to a compromised key or password. " .
+ "Use a CRL (certificate revocation list) instead"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Tunnel Network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
+ <br />
+ <?=gettext("This is the virtual network used for private " .
+ "communications between this client and the " .
+ "server expressed using CIDR (eg. 10.0.8.0/24). " .
+ "The first network address is assumed to be the " .
+ "server address and the second network address " .
+ "will be assigned to the client virtual " .
+ "interface"); ?>.
+ </td>
+ </tr>
+ <tr id="local_optsv4">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Local Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="local_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_network']);?>" />
+ <br />
+ <?=gettext("These are the IPv4 networks that will be accessible " .
+ "from this particular client. Expressed as a comma-separated list of one or more CIDR ranges."); ?>
+ <br /><?=gettext("NOTE: You do not need to specify networks here if they have " .
+ "already been defined on the main server configuration.");?>
+ </td>
+ </tr>
+ <tr id="local_optsv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Local Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="local_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_networkv6']);?>" />
+ <br />
+ <?=gettext("These are the IPv6 networks that will be accessible " .
+ "from this particular client. Expressed as a comma-separated list of one or more IP/PREFIX networks."); ?>
+ <br /><?=gettext("NOTE: You do not need to specify networks here if they have " .
+ "already been defined on the main server configuration.");?>
+ </td>
+ </tr>
+ <tr id="remote_optsv4">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
+ <br />
+ <?=gettext("These are the IPv4 networks that will be routed " .
+ "to this client specifically using iroute, so that a site-to-site " .
+ "VPN can be established. " .
+ "Expressed as a comma-separated list of one or more CIDR ranges. " .
+ "You may leave this blank if there are no client-side networks to " .
+ "be routed"); ?>.
+ <br /><?=gettext("NOTE: Remember to add these subnets to the " .
+ "IPv4 Remote Networks list on the corresponding OpenVPN server settings.");?>
+ </td>
+ </tr>
+ <tr id="remote_optsv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
+ <br />
+ <?=gettext("These are the IPv6 networks that will be routed " .
+ "to this client specifically using iroute, so that a site-to-site " .
+ "VPN can be established. " .
+ "Expressed as a comma-separated list of one or more IP/PREFIX networks. " .
+ "You may leave this blank if there are no client-side networks to " .
+ "be routed"); ?>.
+ <br /><?=gettext("NOTE: Remember to add these subnets to the " .
+ "IPv6 Remote Networks list on the corresponding OpenVPN server settings.");?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Redirect Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="redirect gateway">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['gwredir'], $chk); ?>
+ <input name="gwredir" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Force all client generated traffic through the tunnel"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Client Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Server Definitions"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="server definitions">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['push_reset'], $chk); ?>
+ <input name="push_reset" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Prevent this client from receiving any server-defined client settings"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dns default domain">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
+ <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a default domain name to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="dns_domain_data" summary="dns domain data">
+ <tr>
+ <td>
+ <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dns servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
+ <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a DNS server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="dns_server_data" summary="dns server list">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #3:&nbsp;
+ </span>
+ <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #4:&nbsp;
+ </span>
+ <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="ntp servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['ntp_server_enable'], $chk); ?>
+ <input name="ntp_server_enable" type="checkbox" id="ntp_server_enable" value="yes" <?=$chk;?> onclick="ntp_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a NTP server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="ntp_server_data" summary="ntp server list">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="ntp_server1" type="text" class="formfld unknown" id="ntp_server1" size="20" value="<?=htmlspecialchars($pconfig['ntp_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="ntp_server2" type="text" class="formfld unknown" id="ntp_server2" size="20" value="<?=htmlspecialchars($pconfig['ntp_server2']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NetBIOS Options"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="netbios options">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['netbios_enable'], $chk); ?>
+ <input name="netbios_enable" type="checkbox" id="netbios_enable" value="yes" <?=$chk;?> onclick="netbios_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Enable NetBIOS over TCP/IP"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled"); ?>.
+ <br />
+ <table border="0" cellpadding="2" cellspacing="0" id="netbios_data" summary="netbios options">
+ <tr>
+ <td>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Node Type"); ?>:&nbsp;
+ </span>
+ <select name='netbios_ntype' class="formselect">
+ <?php
+ foreach ($netbios_nodetypes as $type => $name):
+ $selected = "";
+ if ($pconfig['netbios_ntype'] == $type) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$type;?>" <?=$selected;?>><?=$name;?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Possible options: b-node (broadcasts), p-node " .
+ "(point-to-point name queries to a WINS server), " .
+ "m-node (broadcast then query name server), and " .
+ "h-node (query name server, then broadcast)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br />
+ <span class="vexpl">
+ Scope ID:&nbsp;
+ </span>
+ <input name="netbios_scope" type="text" class="formfld unknown" id="netbios_scope" size="30" value="<?=htmlspecialchars($pconfig['netbios_scope']);?>" />
+ <br />
+ <?=gettext("A NetBIOS Scope ID provides an extended naming " .
+ "service for NetBIOS over TCP/IP. The NetBIOS " .
+ "scope ID isolates NetBIOS traffic on a single " .
+ "network to only those nodes with the same " .
+ "NetBIOS scope ID"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="wins_opts">
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="wins servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
+ <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a WINS server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="wins_server_data" summary="wins server list">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="advanced">
+ <tr>
+ <td>
+ <textarea rows="6" cols="70" name="custom_options" id="custom_options"><?=$pconfig['custom_options'];?></textarea><br />
+ <?=gettext("Enter any additional options you would like to add for this client specific override, separated by a semicolon"); ?><br />
+ <?=gettext("EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""); ?>;
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="act" type="hidden" value="<?=$act;?>" />
+ <?php if (isset($id) && $a_csc[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else: ?>
+
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" summary="list">
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Common Name"); ?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ <?php
+ $i = 0;
+ foreach ($a_csc as $csc):
+ $disabled = "NO";
+ if (isset($csc['disable'])) {
+ $disabled = "YES";
+ }
+ ?>
+ <tr ondblclick="document.location='vpn_openvpn_csc.php?act=edit&amp;id=<?=$i;?>'">
+ <td class="listlr">
+ <?=$disabled;?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($csc['common_name']);?>
+ </td>
+ <td class="listbg">
+ <?=htmlspecialchars($csc['description']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="vpn_openvpn_csc.php?act=edit&amp;id=<?=$i;?>">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit csc"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ &nbsp;
+ <a href="vpn_openvpn_csc.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this csc?"); ?>')">
+ <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete csc"); ?>" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr>
+ <td class="list" colspan="3"></td>
+ <td class="list">
+ <a href="vpn_openvpn_csc.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add csc"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <p>
+ <?=gettext("Additional OpenVPN client specific overrides can be added here.");?>
+ </p>
+ </td>
+ </tr>
+ </table>
+
+ <?php endif; ?>
+
+ </td>
+ </tr>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+dns_domain_change();
+dns_server_change();
+wins_server_change();
+ntp_server_change();
+netbios_change();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+
+<?php
+
+/* local utility functions */
+
+function set_checked($var, & $chk) {
+ if ($var) {
+ $chk = "checked=\"checked\"";
+ } else {
+ $chk = "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/vpn_openvpn_server.php b/src/usr/local/www/vpn_openvpn_server.php
new file mode 100644
index 0000000..a7ff4ce
--- /dev/null
+++ b/src/usr/local/www/vpn_openvpn_server.php
@@ -0,0 +1,2042 @@
+<?php
+/*
+ vpn_openvpn_server.php
+
+ Copyright (C) 2008 Shrew Soft Inc.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-openvpn-server
+##|*NAME=OpenVPN: Server page
+##|*DESCR=Allow access to the 'OpenVPN: Server' page.
+##|*MATCH=vpn_openvpn_server.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("openvpn.inc");
+require_once("pkg-utils.inc");
+
+if (!is_array($config['openvpn']['openvpn-server'])) {
+ $config['openvpn']['openvpn-server'] = array();
+}
+
+$a_server = &$config['openvpn']['openvpn-server'];
+
+if (!is_array($config['ca'])) {
+ $config['ca'] = array();
+}
+
+$a_ca =& $config['ca'];
+
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
+}
+
+$a_cert =& $config['cert'];
+
+if (!is_array($config['crl'])) {
+ $config['crl'] = array();
+}
+
+$a_crl =& $config['crl'];
+
+foreach ($a_crl as $cid => $acrl) {
+ if (!isset($acrl['refid'])) {
+ unset ($a_crl[$cid]);
+ }
+}
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+$act = $_GET['act'];
+if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+}
+
+if (isset($id) && $a_server[$id]) {
+ $vpnid = $a_server[$id]['vpnid'];
+} else {
+ $vpnid = 0;
+}
+
+if ($_GET['act'] == "del") {
+
+ if (!isset($a_server[$id])) {
+ pfSenseHeader("vpn_openvpn_server.php");
+ exit;
+ }
+ if (!empty($a_server[$id])) {
+ openvpn_delete('server', $a_server[$id]);
+ }
+ unset($a_server[$id]);
+ write_config();
+ $savemsg = gettext("Server successfully deleted")."<br />";
+}
+
+if ($_GET['act'] == "new") {
+ $pconfig['autokey_enable'] = "yes";
+ $pconfig['tlsauth_enable'] = "yes";
+ $pconfig['autotls_enable'] = "yes";
+ $pconfig['dh_length'] = 1024;
+ $pconfig['dev_mode'] = "tun";
+ $pconfig['interface'] = "wan";
+ $pconfig['local_port'] = openvpn_port_next('UDP');
+ $pconfig['pool_enable'] = "yes";
+ $pconfig['cert_depth'] = 1;
+ $pconfig['verbosity_level'] = 1; // Default verbosity is 1
+ // OpenVPN Defaults to SHA1
+ $pconfig['digest'] = "SHA1";
+}
+
+if ($_GET['act'] == "edit") {
+
+ if (isset($id) && $a_server[$id]) {
+ $pconfig['disable'] = isset($a_server[$id]['disable']);
+ $pconfig['mode'] = $a_server[$id]['mode'];
+ $pconfig['protocol'] = $a_server[$id]['protocol'];
+ $pconfig['authmode'] = $a_server[$id]['authmode'];
+ $pconfig['dev_mode'] = $a_server[$id]['dev_mode'];
+ $pconfig['interface'] = $a_server[$id]['interface'];
+ if (!empty($a_server[$id]['ipaddr'])) {
+ $pconfig['interface'] = $pconfig['interface'] . '|' . $a_server[$id]['ipaddr'];
+ }
+ $pconfig['local_port'] = $a_server[$id]['local_port'];
+ $pconfig['description'] = $a_server[$id]['description'];
+ $pconfig['custom_options'] = $a_server[$id]['custom_options'];
+
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ if ($a_server[$id]['tls']) {
+ $pconfig['tlsauth_enable'] = "yes";
+ $pconfig['tls'] = base64_decode($a_server[$id]['tls']);
+ }
+ $pconfig['caref'] = $a_server[$id]['caref'];
+ $pconfig['crlref'] = $a_server[$id]['crlref'];
+ $pconfig['certref'] = $a_server[$id]['certref'];
+ $pconfig['dh_length'] = $a_server[$id]['dh_length'];
+ if (isset($a_server[$id]['cert_depth'])) {
+ $pconfig['cert_depth'] = $a_server[$id]['cert_depth'];
+ } else {
+ $pconfig['cert_depth'] = 1;
+ }
+ if ($pconfig['mode'] == "server_tls_user") {
+ $pconfig['strictusercn'] = $a_server[$id]['strictusercn'];
+ }
+ } else {
+ $pconfig['shared_key'] = base64_decode($a_server[$id]['shared_key']);
+ }
+ $pconfig['crypto'] = $a_server[$id]['crypto'];
+ // OpenVPN Defaults to SHA1 if unset
+ $pconfig['digest'] = !empty($a_server[$id]['digest']) ? $a_server[$id]['digest'] : "SHA1";
+ $pconfig['engine'] = $a_server[$id]['engine'];
+
+ $pconfig['tunnel_network'] = $a_server[$id]['tunnel_network'];
+ $pconfig['tunnel_networkv6'] = $a_server[$id]['tunnel_networkv6'];
+
+ $pconfig['remote_network'] = $a_server[$id]['remote_network'];
+ $pconfig['remote_networkv6'] = $a_server[$id]['remote_networkv6'];
+ $pconfig['gwredir'] = $a_server[$id]['gwredir'];
+ $pconfig['local_network'] = $a_server[$id]['local_network'];
+ $pconfig['local_networkv6'] = $a_server[$id]['local_networkv6'];
+ $pconfig['maxclients'] = $a_server[$id]['maxclients'];
+ $pconfig['compression'] = $a_server[$id]['compression'];
+ $pconfig['passtos'] = $a_server[$id]['passtos'];
+ $pconfig['client2client'] = $a_server[$id]['client2client'];
+
+ $pconfig['dynamic_ip'] = $a_server[$id]['dynamic_ip'];
+ $pconfig['pool_enable'] = $a_server[$id]['pool_enable'];
+ $pconfig['topology_subnet'] = $a_server[$id]['topology_subnet'];
+
+ $pconfig['serverbridge_dhcp'] = $a_server[$id]['serverbridge_dhcp'];
+ $pconfig['serverbridge_interface'] = $a_server[$id]['serverbridge_interface'];
+ $pconfig['serverbridge_dhcp_start'] = $a_server[$id]['serverbridge_dhcp_start'];
+ $pconfig['serverbridge_dhcp_end'] = $a_server[$id]['serverbridge_dhcp_end'];
+
+ $pconfig['dns_domain'] = $a_server[$id]['dns_domain'];
+ if ($pconfig['dns_domain']) {
+ $pconfig['dns_domain_enable'] = true;
+ }
+
+ $pconfig['dns_server1'] = $a_server[$id]['dns_server1'];
+ $pconfig['dns_server2'] = $a_server[$id]['dns_server2'];
+ $pconfig['dns_server3'] = $a_server[$id]['dns_server3'];
+ $pconfig['dns_server4'] = $a_server[$id]['dns_server4'];
+ if ($pconfig['dns_server1'] ||
+ $pconfig['dns_server2'] ||
+ $pconfig['dns_server3'] ||
+ $pconfig['dns_server4']) {
+ $pconfig['dns_server_enable'] = true;
+ }
+
+ $pconfig['ntp_server1'] = $a_server[$id]['ntp_server1'];
+ $pconfig['ntp_server2'] = $a_server[$id]['ntp_server2'];
+ if ($pconfig['ntp_server1'] ||
+ $pconfig['ntp_server2']) {
+ $pconfig['ntp_server_enable'] = true;
+ }
+
+ $pconfig['netbios_enable'] = $a_server[$id]['netbios_enable'];
+ $pconfig['netbios_ntype'] = $a_server[$id]['netbios_ntype'];
+ $pconfig['netbios_scope'] = $a_server[$id]['netbios_scope'];
+
+ $pconfig['wins_server1'] = $a_server[$id]['wins_server1'];
+ $pconfig['wins_server2'] = $a_server[$id]['wins_server2'];
+ if ($pconfig['wins_server1'] ||
+ $pconfig['wins_server2']) {
+ $pconfig['wins_server_enable'] = true;
+ }
+
+ $pconfig['client_mgmt_port'] = $a_server[$id]['client_mgmt_port'];
+ if ($pconfig['client_mgmt_port']) {
+ $pconfig['client_mgmt_port_enable'] = true;
+ }
+
+ $pconfig['nbdd_server1'] = $a_server[$id]['nbdd_server1'];
+ if ($pconfig['nbdd_server1']) {
+ $pconfig['nbdd_server_enable'] = true;
+ }
+
+ // just in case the modes switch
+ $pconfig['autokey_enable'] = "yes";
+ $pconfig['autotls_enable'] = "yes";
+
+ $pconfig['duplicate_cn'] = isset($a_server[$id]['duplicate_cn']);
+
+ $pconfig['no_tun_ipv6'] = $a_server[$id]['no_tun_ipv6'];
+ if (isset($a_server[$id]['verbosity_level'])) {
+ $pconfig['verbosity_level'] = $a_server[$id]['verbosity_level'];
+ } else {
+ $pconfig['verbosity_level'] = 1; // Default verbosity is 1
+ }
+
+ $pconfig['push_register_dns'] = $a_server[$id]['push_register_dns'];
+ }
+}
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (isset($id) && $a_server[$id]) {
+ $vpnid = $a_server[$id]['vpnid'];
+ } else {
+ $vpnid = 0;
+ }
+
+ list($iv_iface, $iv_ip) = explode ("|", $pconfig['interface']);
+ if (is_ipaddrv4($iv_ip) && (stristr($pconfig['protocol'], "6") !== false)) {
+ $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv6 protocol and an IPv4 IP address.");
+ } elseif (is_ipaddrv6($iv_ip) && (stristr($pconfig['protocol'], "6") === false)) {
+ $input_errors[] = gettext("Protocol and IP address families do not match. You cannot select an IPv4 protocol and an IPv6 IP address.");
+ } elseif ((stristr($pconfig['protocol'], "6") === false) && !get_interface_ip($iv_iface) && ($pconfig['interface'] != "any")) {
+ $input_errors[] = gettext("An IPv4 protocol was selected, but the selected interface has no IPv4 address.");
+ } elseif ((stristr($pconfig['protocol'], "6") !== false) && !get_interface_ipv6($iv_iface) && ($pconfig['interface'] != "any")) {
+ $input_errors[] = gettext("An IPv6 protocol was selected, but the selected interface has no IPv6 address.");
+ }
+
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ $tls_mode = true;
+ } else {
+ $tls_mode = false;
+ }
+
+ if (empty($pconfig['authmode']) && (($pconfig['mode'] == "server_user") || ($pconfig['mode'] == "server_tls_user"))) {
+ $input_errors[] = gettext("You must select a Backend for Authentication if the server mode requires User Auth.");
+ }
+
+ /* input validation */
+ if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port')) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'IPv4 Tunnel Network', false, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['tunnel_networkv6'], 'IPv6 Tunnel Network', false, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'IPv4 Remote Network', true, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['remote_networkv6'], 'IPv6 Remote Network', true, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['local_network'], 'IPv4 Local Network', true, "ipv4")) {
+ $input_errors[] = $result;
+ }
+
+ if ($result = openvpn_validate_cidr($pconfig['local_networkv6'], 'IPv6 Local Network', true, "ipv6")) {
+ $input_errors[] = $result;
+ }
+
+ $portused = openvpn_port_used($pconfig['protocol'], $pconfig['interface'], $pconfig['local_port'], $vpnid);
+ if (($portused != $vpnid) && ($portused != 0)) {
+ $input_errors[] = gettext("The specified 'Local port' is in use. Please select another value");
+ }
+
+ if ($pconfig['autokey_enable']) {
+ $pconfig['shared_key'] = openvpn_create_key();
+ }
+
+ if (!$tls_mode && !$pconfig['autokey_enable']) {
+ if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") ||
+ !strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----")) {
+ $input_errors[] = gettext("The field 'Shared Key' does not appear to be valid");
+ }
+ }
+
+ if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable']) {
+ if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") ||
+ !strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----")) {
+ $input_errors[] = gettext("The field 'TLS Authentication Key' does not appear to be valid");
+ }
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1']))) {
+ $input_errors[] = gettext("The field 'DNS Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2']))) {
+ $input_errors[] = gettext("The field 'DNS Server #2' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3']))) {
+ $input_errors[] = gettext("The field 'DNS Server #3' must contain a valid IP address");
+ }
+ if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4']))) {
+ $input_errors[] = gettext("The field 'DNS Server #4' must contain a valid IP address");
+ }
+ }
+
+ if ($pconfig['ntp_server_enable']) {
+ if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1']))) {
+ $input_errors[] = gettext("The field 'NTP Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2']))) {
+ $input_errors[] = gettext("The field 'NTP Server #2' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3']))) {
+ $input_errors[] = gettext("The field 'NTP Server #3' must contain a valid IP address");
+ }
+ if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4']))) {
+ $input_errors[] = gettext("The field 'NTP Server #4' must contain a valid IP address");
+ }
+ }
+
+ if ($pconfig['netbios_enable']) {
+ if ($pconfig['wins_server_enable']) {
+ if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1']))) {
+ $input_errors[] = gettext("The field 'WINS Server #1' must contain a valid IP address");
+ }
+ if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2']))) {
+ $input_errors[] = gettext("The field 'WINS Server #2' must contain a valid IP address");
+ }
+ }
+ if ($pconfig['nbdd_server_enable']) {
+ if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1']))) {
+ $input_errors[] = gettext("The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address");
+ }
+ }
+ }
+
+ if ($pconfig['client_mgmt_port_enable']) {
+ if ($result = openvpn_validate_port($pconfig['client_mgmt_port'], 'Client management port')) {
+ $input_errors[] = $result;
+ }
+ }
+
+ if ($pconfig['maxclients'] && !is_numeric($pconfig['maxclients'])) {
+ $input_errors[] = gettext("The field 'Concurrent connections' must be numeric.");
+ }
+
+ /* If we are not in shared key mode, then we need the CA/Cert. */
+ if ($pconfig['mode'] != "p2p_shared_key") {
+ $reqdfields = explode(" ", "caref certref");
+ $reqdfieldsn = array(gettext("Certificate Authority"), gettext("Certificate"));
+ } elseif (!$pconfig['autokey_enable']) {
+ /* We only need the shared key filled in if we are in shared key mode and autokey is not selected. */
+ $reqdfields = array('shared_key');
+ $reqdfieldsn = array(gettext('Shared key'));
+ }
+
+ if ($pconfig['dev_mode'] != "tap") {
+ $reqdfields[] = 'tunnel_network';
+ $reqdfieldsn[] = gettext('Tunnel network');
+ } else {
+ if ($pconfig['serverbridge_dhcp'] && $pconfig['tunnel_network']) {
+ $input_errors[] = gettext("Using a tunnel network and server bridge settings together is not allowed.");
+ }
+ if (($pconfig['serverbridge_dhcp_start'] && !$pconfig['serverbridge_dhcp_end']) ||
+ (!$pconfig['serverbridge_dhcp_start'] && $pconfig['serverbridge_dhcp_end'])) {
+ $input_errors[] = gettext("Server Bridge DHCP Start and End must both be empty, or defined.");
+ }
+ if (($pconfig['serverbridge_dhcp_start'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_start']))) {
+ $input_errors[] = gettext("Server Bridge DHCP Start must be an IPv4 address.");
+ }
+ if (($pconfig['serverbridge_dhcp_end'] && !is_ipaddrv4($pconfig['serverbridge_dhcp_end']))) {
+ $input_errors[] = gettext("Server Bridge DHCP End must be an IPv4 address.");
+ }
+ if (ip2ulong($pconfig['serverbridge_dhcp_start']) > ip2ulong($pconfig['serverbridge_dhcp_end'])) {
+ $input_errors[] = gettext("The Server Bridge DHCP range is invalid (start higher than end).");
+ }
+ }
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (!$input_errors) {
+
+ $server = array();
+
+ if ($id && $pconfig['dev_mode'] <> $a_server[$id]['dev_mode']) {
+ openvpn_delete('server', $a_server[$id]);// delete(rename) old interface so a new TUN or TAP interface can be created.
+ }
+
+ if ($vpnid) {
+ $server['vpnid'] = $vpnid;
+ } else {
+ $server['vpnid'] = openvpn_vpnid_next();
+ }
+
+ if ($_POST['disable'] == "yes") {
+ $server['disable'] = true;
+ }
+ $server['mode'] = $pconfig['mode'];
+ if (!empty($pconfig['authmode']) && (($pconfig['mode'] == "server_user") || ($pconfig['mode'] == "server_tls_user"))) {
+ $server['authmode'] = implode(",", $pconfig['authmode']);
+ }
+ $server['protocol'] = $pconfig['protocol'];
+ $server['dev_mode'] = $pconfig['dev_mode'];
+ list($server['interface'], $server['ipaddr']) = explode ("|", $pconfig['interface']);
+ $server['local_port'] = $pconfig['local_port'];
+ $server['description'] = $pconfig['description'];
+ $server['custom_options'] = str_replace("\r\n", "\n", $pconfig['custom_options']);
+
+ if ($tls_mode) {
+ if ($pconfig['tlsauth_enable']) {
+ if ($pconfig['autotls_enable']) {
+ $pconfig['tls'] = openvpn_create_key();
+ }
+ $server['tls'] = base64_encode($pconfig['tls']);
+ }
+ $server['caref'] = $pconfig['caref'];
+ $server['crlref'] = $pconfig['crlref'];
+ $server['certref'] = $pconfig['certref'];
+ $server['dh_length'] = $pconfig['dh_length'];
+ $server['cert_depth'] = $pconfig['cert_depth'];
+ if ($pconfig['mode'] == "server_tls_user") {
+ $server['strictusercn'] = $pconfig['strictusercn'];
+ }
+ } else {
+ $server['shared_key'] = base64_encode($pconfig['shared_key']);
+ }
+ $server['crypto'] = $pconfig['crypto'];
+ $server['digest'] = $pconfig['digest'];
+ $server['engine'] = $pconfig['engine'];
+
+ $server['tunnel_network'] = $pconfig['tunnel_network'];
+ $server['tunnel_networkv6'] = $pconfig['tunnel_networkv6'];
+ $server['remote_network'] = $pconfig['remote_network'];
+ $server['remote_networkv6'] = $pconfig['remote_networkv6'];
+ $server['gwredir'] = $pconfig['gwredir'];
+ $server['local_network'] = $pconfig['local_network'];
+ $server['local_networkv6'] = $pconfig['local_networkv6'];
+ $server['maxclients'] = $pconfig['maxclients'];
+ $server['compression'] = $pconfig['compression'];
+ $server['passtos'] = $pconfig['passtos'];
+ $server['client2client'] = $pconfig['client2client'];
+
+ $server['dynamic_ip'] = $pconfig['dynamic_ip'];
+ $server['pool_enable'] = $pconfig['pool_enable'];
+ $server['topology_subnet'] = $pconfig['topology_subnet'];
+
+ $server['serverbridge_dhcp'] = $pconfig['serverbridge_dhcp'];
+ $server['serverbridge_interface'] = $pconfig['serverbridge_interface'];
+ $server['serverbridge_dhcp_start'] = $pconfig['serverbridge_dhcp_start'];
+ $server['serverbridge_dhcp_end'] = $pconfig['serverbridge_dhcp_end'];
+
+ if ($pconfig['dns_domain_enable']) {
+ $server['dns_domain'] = $pconfig['dns_domain'];
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ $server['dns_server1'] = $pconfig['dns_server1'];
+ $server['dns_server2'] = $pconfig['dns_server2'];
+ $server['dns_server3'] = $pconfig['dns_server3'];
+ $server['dns_server4'] = $pconfig['dns_server4'];
+ }
+
+ if ($pconfig['push_register_dns']) {
+ $server['push_register_dns'] = $pconfig['push_register_dns'];
+ }
+
+ if ($pconfig['ntp_server_enable']) {
+ $server['ntp_server1'] = $pconfig['ntp_server1'];
+ $server['ntp_server2'] = $pconfig['ntp_server2'];
+ }
+
+ $server['netbios_enable'] = $pconfig['netbios_enable'];
+ $server['netbios_ntype'] = $pconfig['netbios_ntype'];
+ $server['netbios_scope'] = $pconfig['netbios_scope'];
+
+ $server['no_tun_ipv6'] = $pconfig['no_tun_ipv6'];
+ $server['verbosity_level'] = $pconfig['verbosity_level'];
+
+ if ($pconfig['netbios_enable']) {
+
+ if ($pconfig['wins_server_enable']) {
+ $server['wins_server1'] = $pconfig['wins_server1'];
+ $server['wins_server2'] = $pconfig['wins_server2'];
+ }
+
+ if ($pconfig['dns_server_enable']) {
+ $server['nbdd_server1'] = $pconfig['nbdd_server1'];
+ }
+ }
+
+ if ($pconfig['client_mgmt_port_enable']) {
+ $server['client_mgmt_port'] = $pconfig['client_mgmt_port'];
+ }
+
+ if ($_POST['duplicate_cn'] == "yes") {
+ $server['duplicate_cn'] = true;
+ }
+
+ if (isset($id) && $a_server[$id]) {
+ $a_server[$id] = $server;
+ } else {
+ $a_server[] = $server;
+ }
+
+ openvpn_resync('server', $server);
+ write_config();
+
+ header("Location: vpn_openvpn_server.php");
+ exit;
+ }
+ if (!empty($pconfig['authmode'])) {
+ $pconfig['authmode'] = implode(",", $pconfig['authmode']);
+ }
+}
+$pgtitle = array(gettext("OpenVPN"), gettext("Server"));
+$shortcut_section = "openvpn";
+
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function mode_change() {
+ index = document.iform.mode.selectedIndex;
+ value = document.iform.mode.options[index].value;
+ switch (value) {
+ case "p2p_tls":
+ case "server_tls":
+ case "server_user":
+ document.getElementById("tls").style.display="";
+ document.getElementById("tls_ca").style.display="";
+ document.getElementById("tls_crl").style.display="";
+ document.getElementById("tls_cert").style.display="";
+ document.getElementById("tls_dh").style.display="";
+ document.getElementById("cert_depth").style.display="";
+ document.getElementById("strictusercn").style.display="none";
+ document.getElementById("psk").style.display="none";
+ break;
+ case "server_tls_user":
+ document.getElementById("tls").style.display="";
+ document.getElementById("tls_ca").style.display="";
+ document.getElementById("tls_crl").style.display="";
+ document.getElementById("tls_cert").style.display="";
+ document.getElementById("tls_dh").style.display="";
+ document.getElementById("cert_depth").style.display="";
+ document.getElementById("strictusercn").style.display="";
+ document.getElementById("psk").style.display="none";
+ break;
+ case "p2p_shared_key":
+ document.getElementById("tls").style.display="none";
+ document.getElementById("tls_ca").style.display="none";
+ document.getElementById("tls_crl").style.display="none";
+ document.getElementById("tls_cert").style.display="none";
+ document.getElementById("tls_dh").style.display="none";
+ document.getElementById("cert_depth").style.display="none";
+ document.getElementById("strictusercn").style.display="none";
+ document.getElementById("psk").style.display="";
+ break;
+ }
+ switch (value) {
+ case "p2p_shared_key":
+ document.getElementById("client_opts").style.display="none";
+ document.getElementById("remote_optsv4").style.display="";
+ document.getElementById("remote_optsv6").style.display="";
+ document.getElementById("gwredir_opts").style.display="none";
+ document.getElementById("local_optsv4").style.display="none";
+ document.getElementById("local_optsv6").style.display="none";
+ document.getElementById("authmodetr").style.display="none";
+ document.getElementById("inter_client_communication").style.display="none";
+ break;
+ case "p2p_tls":
+ document.getElementById("client_opts").style.display="none";
+ document.getElementById("remote_optsv4").style.display="";
+ document.getElementById("remote_optsv6").style.display="";
+ document.getElementById("gwredir_opts").style.display="";
+ document.getElementById("local_optsv4").style.display="";
+ document.getElementById("local_optsv6").style.display="";
+ document.getElementById("authmodetr").style.display="none";
+ document.getElementById("inter_client_communication").style.display="none";
+ break;
+ case "server_user":
+ case "server_tls_user":
+ document.getElementById("authmodetr").style.display="";
+ document.getElementById("client_opts").style.display="";
+ document.getElementById("remote_optsv4").style.display="none";
+ document.getElementById("remote_optsv6").style.display="none";
+ document.getElementById("gwredir_opts").style.display="";
+ document.getElementById("local_optsv4").style.display="";
+ document.getElementById("local_optsv6").style.display="";
+ document.getElementById("inter_client_communication").style.display="";
+ break;
+ case "server_tls":
+ document.getElementById("authmodetr").style.display="none";
+ default:
+ document.getElementById("client_opts").style.display="";
+ document.getElementById("remote_optsv4").style.display="none";
+ document.getElementById("remote_optsv6").style.display="none";
+ document.getElementById("gwredir_opts").style.display="";
+ document.getElementById("local_optsv4").style.display="";
+ document.getElementById("local_optsv6").style.display="";
+ document.getElementById("inter_client_communication").style.display="";
+ break;
+ }
+ gwredir_change();
+}
+
+function autokey_change() {
+
+ if ((document.iform.autokey_enable != null) && (document.iform.autokey_enable.checked)) {
+ document.getElementById("autokey_opts").style.display="none";
+ } else {
+ document.getElementById("autokey_opts").style.display="";
+ }
+}
+
+function tlsauth_change() {
+
+<?php if (!$pconfig['tls']): ?>
+ if (document.iform.tlsauth_enable.checked) {
+ document.getElementById("tlsauth_opts").style.display="";
+ } else {
+ document.getElementById("tlsauth_opts").style.display="none";
+ }
+<?php endif; ?>
+
+ autotls_change();
+}
+
+function autotls_change() {
+
+<?php if (!$pconfig['tls']): ?>
+ autocheck = document.iform.autotls_enable.checked;
+<?php else: ?>
+ autocheck = false;
+<?php endif; ?>
+
+ if (document.iform.tlsauth_enable.checked && !autocheck) {
+ document.getElementById("autotls_opts").style.display="";
+ } else {
+ document.getElementById("autotls_opts").style.display="none";
+ }
+}
+
+function gwredir_change() {
+
+ if (document.iform.gwredir.checked) {
+ document.getElementById("local_optsv4").style.display="none";
+ document.getElementById("local_optsv6").style.display="none";
+ } else {
+ document.getElementById("local_optsv4").style.display="";
+ document.getElementById("local_optsv6").style.display="";
+ }
+}
+
+function dns_domain_change() {
+
+ if (document.iform.dns_domain_enable.checked) {
+ document.getElementById("dns_domain_data").style.display="";
+ } else {
+ document.getElementById("dns_domain_data").style.display="none";
+ }
+}
+
+function dns_server_change() {
+
+ if (document.iform.dns_server_enable.checked) {
+ document.getElementById("dns_server_data").style.display="";
+ } else {
+ document.getElementById("dns_server_data").style.display="none";
+ }
+}
+
+function wins_server_change() {
+
+ if (document.iform.wins_server_enable.checked) {
+ document.getElementById("wins_server_data").style.display="";
+ } else {
+ document.getElementById("wins_server_data").style.display="none";
+ }
+}
+
+function client_mgmt_port_change() {
+
+ if (document.iform.client_mgmt_port_enable.checked) {
+ document.getElementById("client_mgmt_port_data").style.display="";
+ } else {
+ document.getElementById("client_mgmt_port_data").style.display="none";
+ }
+}
+
+function ntp_server_change() {
+
+ if (document.iform.ntp_server_enable.checked) {
+ document.getElementById("ntp_server_data").style.display="";
+ } else {
+ document.getElementById("ntp_server_data").style.display="none";
+ }
+}
+
+function netbios_change() {
+
+ if (document.iform.netbios_enable.checked) {
+ document.getElementById("netbios_data").style.display="";
+ document.getElementById("wins_opts").style.display="";
+ } else {
+ document.getElementById("netbios_data").style.display="none";
+ document.getElementById("wins_opts").style.display="none";
+ }
+}
+
+function tuntap_change() {
+
+ mindex = document.iform.mode.selectedIndex;
+ mvalue = document.iform.mode.options[mindex].value;
+
+ switch (mvalue) {
+ case "p2p_tls":
+ case "p2p_shared_key":
+ p2p = true;
+ break;
+ default:
+ p2p = false;
+ break;
+ }
+
+ index = document.iform.dev_mode.selectedIndex;
+ value = document.iform.dev_mode.options[index].value;
+ switch (value) {
+ case "tun":
+ document.getElementById("chkboxNoTunIPv6").style.display="";
+ document.getElementById("ipv4_tunnel_network").className="vncellreq";
+ document.getElementById("serverbridge_dhcp").style.display="none";
+ document.getElementById("serverbridge_interface").style.display="none";
+ document.getElementById("serverbridge_dhcp_start").style.display="none";
+ document.getElementById("serverbridge_dhcp_end").style.display="none";
+ document.getElementById("topology_subnet_opt").style.display="";
+ break;
+ case "tap":
+ document.getElementById("chkboxNoTunIPv6").style.display="none";
+ document.getElementById("ipv4_tunnel_network").className="vncell";
+ if (!p2p) {
+ document.getElementById("serverbridge_dhcp").style.display="";
+ document.getElementById("serverbridge_interface").style.display="";
+ document.getElementById("serverbridge_dhcp_start").style.display="";
+ document.getElementById("serverbridge_dhcp_end").style.display="";
+ document.getElementById("topology_subnet_opt").style.display="none";
+ document.iform.serverbridge_dhcp.disabled = false;
+ if (document.iform.serverbridge_dhcp.checked) {
+ document.iform.serverbridge_interface.disabled = false;
+ document.iform.serverbridge_dhcp_start.disabled = false;
+ document.iform.serverbridge_dhcp_end.disabled = false;
+ } else {
+ document.iform.serverbridge_interface.disabled = true;
+ document.iform.serverbridge_dhcp_start.disabled = true;
+ document.iform.serverbridge_dhcp_end.disabled = true;
+ }
+ } else {
+ document.getElementById("topology_subnet_opt").style.display="none";
+ document.iform.serverbridge_dhcp.disabled = true;
+ document.iform.serverbridge_interface.disabled = true;
+ document.iform.serverbridge_dhcp_start.disabled = true;
+ document.iform.serverbridge_dhcp_end.disabled = true;
+ }
+ break;
+ }
+}
+//]]>
+</script>
+<?php
+if (!$savemsg) {
+ $savemsg = "";
+}
+
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+if ($savemsg) {
+ print_info_box_np($savemsg);
+}
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn openvpn server">
+ <tr>
+ <td class="tabnavtbl">
+ <?php
+ $tab_array = array();
+ $tab_array[] = array(gettext("Server"), true, "vpn_openvpn_server.php");
+ $tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php");
+ $tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php");
+ $tab_array[] = array(gettext("Wizards"), false, "wizard.php?xml=openvpn_wizard.xml");
+ add_package_tabs("openvpn-client-export", $tab_array);
+ display_top_tabs($tab_array);
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td class="tabcont">
+
+ <?php if ($act == "new" || $act == "edit"): ?>
+
+ <form action="vpn_openvpn_server.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="general information">
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("General information"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="0" cellspacing="0" summary="enable disable server">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['disable'], $chk); ?>
+ <input name="disable" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ &nbsp;
+ <span class="vexpl">
+ <strong><?=gettext("Disable this server"); ?></strong><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("Set this option to disable this server without removing it from the list"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Mode");?></td>
+ <td width="78%" class="vtable">
+ <select name='mode' id='mode' class="formselect" onchange='mode_change(); tuntap_change()'>
+ <?php
+ foreach ($openvpn_server_modes as $name => $desc):
+ $selected = "";
+ if ($pconfig['mode'] == $name) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="authmodetr" style="display:none">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Backend for authentication");?></td>
+ <td width="78%" class="vtable">
+ <select name='authmode[]' id='authmode' class="formselect" multiple="multiple" size="<?php echo count($auth_servers); ?>">
+ <?php
+ $authmodes = explode(",", $pconfig['authmode']);
+ $auth_servers = auth_get_authserver_list();
+ // If no authmodes set then default to selecting the first entry in auth_servers
+ if (empty($authmodes[0]) && !empty(key($auth_servers))) {
+ $authmodes[0] = key($auth_servers);
+ }
+
+ foreach ($auth_servers as $auth_server_key => $auth_server):
+ $selected = "";
+ if (in_array($auth_server_key, $authmodes)) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$auth_server_key;?>" <?=$selected;?>><?=$auth_server['name'];?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
+ <td width="78%" class="vtable">
+ <select name='protocol' class="formselect">
+ <?php
+ foreach ($openvpn_prots as $prot):
+ $selected = "";
+ if ($pconfig['protocol'] == $prot) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$prot;?>" <?=$selected;?>><?=$prot;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Device Mode"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dev_mode" class="formselect" onchange='tuntap_change()'>
+ <?php
+ foreach ($openvpn_dev_mode as $device):
+ $selected = "";
+ if (!empty($pconfig['dev_mode'])) {
+ if ($pconfig['dev_mode'] == $device) {
+ $selected = "selected=\"selected\"";
+ }
+ } else {
+ if ($device == "tun") {
+ $selected = "selected=\"selected\"";
+ }
+ }
+ ?>
+ <option value="<?=$device;?>" <?=$selected;?>><?=$device;?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="interface" class="formselect">
+ <?php
+ $interfaces = get_configured_interface_with_descr();
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $interfaces[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
+ }
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $interfaces[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+ $grouplist = return_gateway_groups_array();
+ foreach ($grouplist as $name => $group) {
+ if ($group['ipprotocol'] != inet) {
+ continue;
+ }
+ if ($group[0]['vip'] <> "") {
+ $vipif = $group[0]['vip'];
+ } else {
+ $vipif = $group[0]['int'];
+ }
+ $interfaces[$name] = "GW Group {$name}";
+ }
+ $interfaces['lo0'] = "Localhost";
+ $interfaces['any'] = "any";
+ foreach ($interfaces as $iface => $ifacename):
+ $selected = "";
+ if ($iface == $pconfig['interface']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$iface;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select> <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Local port");?></td>
+ <td width="78%" class="vtable">
+ <input name="local_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['local_port']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>" />
+ <br />
+ <?=gettext("You may enter a description here for your reference (not parsed)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Cryptographic Settings"); ?></td>
+ </tr>
+ <tr id="tls">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("TLS Authentication"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="tls authentication">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['tlsauth_enable'], $chk); ?>
+ <input name="tlsauth_enable" id="tlsauth_enable" type="checkbox" value="yes" <?=$chk;?> onclick="tlsauth_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Enable authentication of TLS packets"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php if (!$pconfig['tls']): ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="tlsauth_opts" summary="tls authentication options">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['autotls_enable'], $chk); ?>
+ <input name="autotls_enable" id="autotls_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autotls_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Automatically generate a shared TLS authentication key"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php endif; ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="autotls_opts" summary="tls authentication key">
+ <tr>
+ <td>
+ <textarea name="tls" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['tls']);?></textarea>
+ <br />
+ <?=gettext("Paste your shared key here"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="tls_ca">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Authority"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_ca)): ?>
+ <select name='caref' class="formselect">
+ <?php
+ foreach ($a_ca as $ca):
+ $selected = "";
+ if ($pconfig['caref'] == $ca['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$ca['refid'];?>" <?=$selected;?>><?=htmlspecialchars($ca['descr']);?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <b>No Certificate Authorities defined.</b> <br />Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="tls_crl">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Peer Certificate Revocation List"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_crl)): ?>
+ <select name='crlref' class="formselect">
+ <option value="">None</option>
+ <?php
+ foreach ($a_crl as $crl):
+ $selected = "";
+ $caname = "";
+ $ca = lookup_ca($crl['caref']);
+ if ($ca) {
+ $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
+ if ($pconfig['crlref'] == $crl['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ }
+ ?>
+ <option value="<?=$crl['refid'];?>" <?=$selected;?>><?=htmlspecialchars($crl['descr']) . $caname;?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <b>No Certificate Revocation Lists (CRLs) defined.</b> <br />Create one under <a href="system_crlmanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="tls_cert">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server Certificate"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (count($a_cert)): ?>
+ <select name='certref' class="formselect">
+ <?php
+ foreach ($a_cert as $cert):
+ $selected = "";
+ $caname = "";
+ $inuse = "";
+ $revoked = "";
+ $ca = lookup_ca($cert['caref']);
+ if ($ca) {
+ $caname = " (CA: " . htmlspecialchars($ca['descr']) . ")";
+ }
+ if ($pconfig['certref'] == $cert['refid']) {
+ $selected = "selected=\"selected\"";
+ }
+ if (cert_in_use($cert['refid'])) {
+ $inuse = " *In Use";
+ }
+ if (is_cert_revoked($cert)) {
+ $revoked = " *Revoked";
+ }
+ ?>
+ <option value="<?=$cert['refid'];?>" <?=$selected;?>><?=htmlspecialchars($cert['descr']) . $caname . $inuse . $revoked;?></option>
+ <?php endforeach; ?>
+ </select>
+ <?php else: ?>
+ <b>No Certificates defined.</b> <br />Create one under <a href="system_certmanager.php">System &gt; Cert Manager</a>.
+ <?php endif; ?>
+ </td>
+ </tr>
+ <tr id="tls_dh">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("DH Parameters Length"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="dh_length" class="formselect">
+ <?php
+ foreach ($openvpn_dh_lengths as $length):
+ $selected = "";
+ if ($length == $pconfig['dh_length']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option<?=$selected?>><?=$length;?></option>
+ <?php endforeach; ?>
+ </select>
+ <span class="vexpl">
+ <?=gettext("bits"); ?>
+ </span>
+ </td>
+ </tr>
+ <tr id="psk">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Shared Key"); ?></td>
+ <td width="78%" class="vtable">
+ <?php if (!$pconfig['shared_key']): ?>
+ <table border="0" cellpadding="2" cellspacing="0" summary="shared key">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['autokey_enable'], $chk); ?>
+ <input name="autokey_enable" type="checkbox" value="yes" <?=$chk;?> onclick="autokey_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Automatically generate a shared key"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?php endif; ?>
+ <table border="0" cellpadding="2" cellspacing="0" id="autokey_opts" summary="shared key">
+ <tr>
+ <td>
+ <textarea name="shared_key" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['shared_key']);?></textarea>
+ <br />
+ <?=gettext("Paste your shared key here"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Encryption algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="crypto" class="formselect">
+ <?php
+ $cipherlist = openvpn_get_cipherlist();
+ foreach ($cipherlist as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['crypto']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Auth Digest Algorithm"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="digest" class="formselect">
+ <?php
+ $digestlist = openvpn_get_digestlist();
+ foreach ($digestlist as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['digest']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ <br /><?PHP echo gettext("NOTE: Leave this set to SHA1 unless all clients are set to match. SHA1 is the default for OpenVPN."); ?>
+ </td>
+ </tr>
+ <tr id="engine">
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Hardware Crypto"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="engine" class="formselect">
+ <?php
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc):
+ $selected = "";
+ if ($name == $pconfig['engine']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$name;?>"<?=$selected?>>
+ <?=htmlspecialchars($desc);?>
+ </option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr id="cert_depth">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Certificate Depth"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="certificate depth">
+ <tr>
+ <td>
+ <select name="cert_depth" class="formselect">
+ <option value="">Do Not Check</option>
+ <?php
+ foreach ($openvpn_cert_depths as $depth => $depthdesc):
+ $selected = "";
+ if ($depth == $pconfig['cert_depth']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?= $depth ?>" <?= $selected ?>><?= $depthdesc ?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("When a certificate-based client logs in, do not accept certificates below this depth. Useful for denying certificates made with intermediate CAs generated from the same CA as the server."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="strictusercn">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Strict User/CN Matching"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="strict user/cn matching">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['strictusercn'], $chk); ?>
+ <input name="strictusercn" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("When authenticating users, enforce a match between the common name of the client certificate and the username given at login."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Tunnel Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq" id="ipv4_tunnel_network"><?=gettext("IPv4 Tunnel Network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>" />
+ <br />
+ <?=gettext("This is the IPv4 virtual network used for private " .
+ "communications between this server and client " .
+ "hosts expressed using CIDR (eg. 10.0.8.0/24). " .
+ "The first network address will be assigned to " .
+ "the server virtual interface. The remaining " .
+ "network addresses can optionally be assigned " .
+ "to connecting clients. (see Address Pool)"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Tunnel Network"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="tunnel_networkv6" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_networkv6']);?>" />
+ <br />
+ <?=gettext("This is the IPv6 virtual network used for private " .
+ "communications between this server and client " .
+ "hosts expressed using CIDR (eg. fe80::/64). " .
+ "The first network address will be assigned to " .
+ "the server virtual interface. The remaining " .
+ "network addresses can optionally be assigned " .
+ "to connecting clients. (see Address Pool)"); ?>
+ </td>
+ </tr>
+ <tr id="serverbridge_dhcp">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bridge DHCP"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="bridge dhcp">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['serverbridge_dhcp'], $chk); ?>
+ <input name="serverbridge_dhcp" type="checkbox" value="yes" <?=$chk;?> onchange="tuntap_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allow clients on the bridge to obtain DHCP."); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="serverbridge_interface">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Bridge Interface"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="serverbridge_interface" class="formselect">
+ <?php
+ $serverbridge_interface['none'] = "none";
+ $serverbridge_interface = array_merge($serverbridge_interface, get_configured_interface_with_descr());
+ $carplist = get_configured_carp_interface_list();
+ foreach ($carplist as $cif => $carpip) {
+ $serverbridge_interface[$cif.'|'.$carpip] = $carpip." (".get_vip_descr($carpip).")";
+ }
+ $aliaslist = get_configured_ip_aliases_list();
+ foreach ($aliaslist as $aliasip => $aliasif) {
+ $serverbridge_interface[$aliasif.'|'.$aliasip] = $aliasip." (".get_vip_descr($aliasip).")";
+ }
+ foreach ($serverbridge_interface as $iface => $ifacename):
+ $selected = "";
+ if ($iface == $pconfig['serverbridge_interface']) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$iface;?>" <?=$selected;?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+ <?php endforeach; ?>
+ </select> <br />
+ <?=gettext("The interface to which this tap instance will be " .
+ "bridged. This is not done automatically. You must assign this " .
+ "interface and create the bridge separately. " .
+ "This setting controls which existing IP address and subnet " .
+ "mask are used by OpenVPN for the bridge. Setting this to " .
+ "'none' will cause the Server Bridge DHCP settings below to be ignored."); ?>
+ </td>
+ </tr>
+ <tr id="serverbridge_dhcp_start">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Server Bridge DHCP Start"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="serverbridge_dhcp_start" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['serverbridge_dhcp_start']);?>" />
+ <br />
+ <?=gettext("When using tap mode as a multi-point server, " .
+ "you may optionally supply a DHCP range to use on the " .
+ "interface to which this tap instance is bridged. " .
+ "If these settings are left blank, DHCP will be passed " .
+ "through to the LAN, and the interface setting above " .
+ "will be ignored."); ?>
+ </td>
+ </tr>
+ <tr id="serverbridge_dhcp_end">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Server Bridge DHCP End"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="serverbridge_dhcp_end" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['serverbridge_dhcp_end']);?>" />
+ <br />
+ </td>
+ </tr>
+ <tr id="gwredir_opts">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Redirect Gateway"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="redirect gateway">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['gwredir'], $chk); ?>
+ <input name="gwredir" type="checkbox" value="yes" <?=$chk;?> onclick="gwredir_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Force all client generated traffic through the tunnel"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="local_optsv4">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Local Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="local_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_network']);?>" />
+ <br />
+ <?=gettext("These are the IPv4 networks that will be accessible " .
+ "from the remote endpoint. Expressed as a comma-separated list of one or more CIDR ranges. " .
+ "You may leave this blank if you don't " .
+ "want to add a route to the local network " .
+ "through this tunnel on the remote machine. " .
+ "This is generally set to your LAN network"); ?>.
+ </td>
+ </tr>
+ <tr id="local_optsv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Local Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="local_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['local_networkv6']);?>" />
+ <br />
+ <?=gettext("These are the IPv6 networks that will be accessible " .
+ "from the remote endpoint. Expressed as a comma-separated list of one or more IP/PREFIX. " .
+ "You may leave this blank if you don't " .
+ "want to add a route to the local network " .
+ "through this tunnel on the remote machine. " .
+ "This is generally set to your LAN network"); ?>.
+ </td>
+ </tr>
+ <tr id="remote_optsv4">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv4 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_network" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_network']);?>" />
+ <br />
+ <?=gettext("These are the IPv4 networks that will be routed through " .
+ "the tunnel, so that a site-to-site VPN can be " .
+ "established without manually changing the routing tables. " .
+ "Expressed as a comma-separated list of one or more CIDR ranges. " .
+ "If this is a site-to-site VPN, enter the " .
+ "remote LAN/s here. You may leave this blank if " .
+ "you don't want a site-to-site VPN"); ?>.
+ </td>
+ </tr>
+ <tr id="remote_optsv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("IPv6 Remote Network/s"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="remote_networkv6" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['remote_networkv6']);?>" />
+ <br />
+ <?=gettext("These are the IPv6 networks that will be routed through " .
+ "the tunnel, so that a site-to-site VPN can be " .
+ "established without manually changing the routing tables. " .
+ "Expressed as a comma-separated list of one or more IP/PREFIX. " .
+ "If this is a site-to-site VPN, enter the " .
+ "remote LAN/s here. You may leave this blank if " .
+ "you don't want a site-to-site VPN"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Concurrent connections");?></td>
+ <td width="78%" class="vtable">
+ <input name="maxclients" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['maxclients']);?>" />
+ <br />
+ <?=gettext("Specify the maximum number of clients allowed to concurrently connect to this server"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Compression"); ?></td>
+ <td width="78%" class="vtable">
+ <select name="compression" class="formselect">
+ <?php
+ foreach ($openvpn_compression_modes as $cmode => $cmodedesc):
+ $selected = "";
+ if ($cmode == $pconfig['compression']) {
+ $selected = " selected=\"selected\"";
+ }
+ ?>
+ <option value="<?= $cmode ?>" <?= $selected ?>><?= $cmodedesc ?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Type-of-Service"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="type-of-service">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['passtos'], $chk); ?>
+ <input name="passtos" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Set the TOS IP header value of tunnel packets to match the encapsulated packet value"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="inter_client_communication">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Inter-client communication"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="inter-client communication">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['client2client'], $chk); ?>
+ <input name="client2client" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allow communication between clients connected to this server"); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="duplicate_cn">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Duplicate Connections"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="duplicate connection">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['duplicate_cn'], $chk); ?>
+ <input name="duplicate_cn" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allow multiple concurrent connections from clients using the same Common Name.<br />NOTE: This is not generally recommended, but may be needed for some scenarios."); ?>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="chkboxNoTunIPv6">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Disable IPv6"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="disable-ipv6-srv">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['no_tun_ipv6'], $chk); ?>
+ <input name="no_tun_ipv6" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Don't forward IPv6 traffic"); ?>.
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="client settings">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Client Settings"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Dynamic IP"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dynamic ip">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dynamic_ip'], $chk); ?>
+ <input name="dynamic_ip" type="checkbox" id="dynamic_ip" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allow connected clients to retain their connections if their IP address changes"); ?>.<br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Address Pool"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="address pool">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['pool_enable'], $chk); ?>
+ <input name="pool_enable" type="checkbox" id="pool_enable" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a virtual adapter IP address to clients (see Tunnel Network)"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="topology_subnet_opt">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Topology"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="topology">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['topology_subnet'], $chk); ?>
+ <input name="topology_subnet" type="checkbox" id="topology_subnet" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Allocate only one IP per client (topology subnet), rather than an isolated subnet per client (topology net30)."); ?><br />
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ <?=gettext("Relevant when supplying a virtual adapter IP address to clients when using tun mode on IPv4."); ?><br />
+ <?=gettext("Some clients may require this even for IPv6, such as OpenVPN Connect (iOS/Android). Others may break if it is present, such as older versions of OpenVPN or clients such as Yealink phones."); ?><br />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Default Domain"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dns default domain">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_domain_enable'], $chk); ?>
+ <input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onclick="dns_domain_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a default domain name to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="dns_domain_data" summary="dns domain data">
+ <tr>
+ <td>
+ <input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="dns servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['dns_server_enable'], $chk); ?>
+ <input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onclick="dns_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a DNS server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="dns_server_data" summary="dns servers">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=htmlspecialchars($pconfig['dns_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=htmlspecialchars($pconfig['dns_server2']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #3:&nbsp;
+ </span>
+ <input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=htmlspecialchars($pconfig['dns_server3']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #4:&nbsp;
+ </span>
+ <input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=htmlspecialchars($pconfig['dns_server4']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="chkboxPushRegisterDNS">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Force DNS cache update"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="push register dns">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['push_register_dns'], $chk); ?>
+ <input name="push_register_dns" type="checkbox" value="yes" <?=$chk;?> />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Run ''net stop dnscache'', ''net start dnscache'', ''ipconfig /flushdns'' and ''ipconfig /registerdns'' on connection initiation. This is known to kick Windows into recognizing pushed DNS servers."); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NTP Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="ntp servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['ntp_server_enable'], $chk); ?>
+ <input name="ntp_server_enable" type="checkbox" id="ntp_server_enable" value="yes" <?=$chk;?> onclick="ntp_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a NTP server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="ntp_server_data" summary="ntp servers">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="ntp_server1" type="text" class="formfld unknown" id="ntp_server1" size="20" value="<?=htmlspecialchars($pconfig['ntp_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="ntp_server2" type="text" class="formfld unknown" id="ntp_server2" size="20" value="<?=htmlspecialchars($pconfig['ntp_server2']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("NetBIOS Options"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="netboios options">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['netbios_enable'], $chk); ?>
+ <input name="netbios_enable" type="checkbox" id="netbios_enable" value="yes" <?=$chk;?> onclick="netbios_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Enable NetBIOS over TCP/IP"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <?=gettext("If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled"); ?>.
+ <br />
+ <table border="0" cellpadding="2" cellspacing="0" id="netbios_data" summary="netboios options">
+ <tr>
+ <td>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Node Type"); ?>:&nbsp;
+ </span>
+ <select name='netbios_ntype' class="formselect">
+ <?php
+ foreach ($netbios_nodetypes as $type => $name):
+ $selected = "";
+ if ($pconfig['netbios_ntype'] == $type) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$type;?>" <?=$selected;?>><?=$name;?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Possible options: b-node (broadcasts), p-node " .
+ "(point-to-point name queries to a WINS server), " .
+ "m-node (broadcast then query name server), and " .
+ "h-node (query name server, then broadcast)"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br />
+ <span class="vexpl">
+ <?=gettext("Scope ID"); ?>:&nbsp;
+ </span>
+ <input name="netbios_scope" type="text" class="formfld unknown" id="netbios_scope" size="30" value="<?=htmlspecialchars($pconfig['netbios_scope']);?>" />
+ <br />
+ <?=gettext("A NetBIOS Scope ID provides an extended naming " .
+ "service for NetBIOS over TCP/IP. The NetBIOS " .
+ "scope ID isolates NetBIOS traffic on a single " .
+ "network to only those nodes with the same " .
+ "NetBIOS scope ID"); ?>.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="wins_opts">
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="wins servers">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['wins_server_enable'], $chk); ?>
+ <input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onclick="wins_server_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Provide a WINS server list to clients"); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="wins_server_data" summary="wins servers">
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #1:&nbsp;
+ </span>
+ <input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=htmlspecialchars($pconfig['wins_server1']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Server"); ?> #2:&nbsp;
+ </span>
+ <input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=htmlspecialchars($pconfig['wins_server2']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Client Management Port"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="client management port">
+ <tr>
+ <td>
+ <?php set_checked($pconfig['client_mgmt_port_enable'], $chk); ?>
+ <input name="client_mgmt_port_enable" type="checkbox" id="client_mgmt_port_enable" value="yes" <?=$chk;?> onclick="client_mgmt_port_change()" />
+ </td>
+ <td>
+ <span class="vexpl">
+ <?=gettext("Use a different management port on clients. The default port is 166. Specify a different port if the client machines need to select from multiple OpenVPN links."); ?><br />
+ </span>
+ </td>
+ </tr>
+ </table>
+ <table border="0" cellpadding="2" cellspacing="0" id="client_mgmt_port_data" summary="client management port">
+ <tr>
+ <td>
+ <input name="client_mgmt_port" type="text" class="formfld unknown" id="client_mgmt_port" size="30" value="<?=htmlspecialchars($pconfig['client_mgmt_port']);?>" />
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts" summary="advance configuration">
+ <tr>
+ <td colspan="2" class="list" height="12"></td>
+ </tr>
+ <tr>
+ <td colspan="2" valign="top" class="listtopic"><?=gettext("Advanced configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Advanced"); ?></td>
+ <td width="78%" class="vtable">
+ <table border="0" cellpadding="2" cellspacing="0" summary="advance configuration">
+ <tr>
+ <td>
+ <textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=htmlspecialchars($pconfig['custom_options']);?></textarea><br />
+ <?=gettext("Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon"); ?><br />
+ <?=gettext("EXAMPLE: push \"route 10.0.0.0 255.255.255.0\""); ?>;
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr id="comboboxVerbosityLevel">
+ <td width="22%" valign="top" class="vncell"><?=gettext("Verbosity level");?></td>
+ <td width="78%" class="vtable">
+ <select name="verbosity_level" class="formselect">
+ <?php
+ foreach ($openvpn_verbosity_level as $verb_value => $verb_desc):
+ $selected = "";
+ if ($pconfig['verbosity_level'] == $verb_value) {
+ $selected = "selected=\"selected\"";
+ }
+ ?>
+ <option value="<?=$verb_value;?>" <?=$selected;?>><?=$verb_desc;?></option>
+ <?php endforeach; ?>
+ </select>
+ <br />
+ <?=gettext("Each level shows all info from the previous levels. Level 3 is recommended if you want a good summary of what's happening without being swamped by output"); ?>.<br /> <br />
+ <strong>none</strong> -- <?=gettext("No output except fatal errors"); ?>. <br />
+ <strong>default</strong>-<strong>4</strong> -- <?=gettext("Normal usage range"); ?>. <br />
+ <strong>5</strong> -- <?=gettext("Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets"); ?>. <br />
+ <strong>6</strong>-<strong>11</strong> -- <?=gettext("Debug info range"); ?>.
+ </td>
+ </tr>
+
+ </table>
+
+ <br />
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="icons">
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
+ <input name="act" type="hidden" value="<?=$act;?>" />
+ <?php if (isset($id) && $a_server[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </form>
+
+ <?php else: ?>
+
+ <table class="sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="list">
+ <thead>
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Disabled"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Protocol / Port"); ?></td>
+ <td width="30%" class="listhdrr"><?=gettext("Tunnel Network"); ?></td>
+ <td width="40%" class="listhdrr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="list"></td>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <a href="vpn_openvpn_server.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add server"); ?>" width="17" height="17" border="0" alt="add" />
+ </a>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <?php
+ $i = 0;
+ foreach ($a_server as $server):
+ $disabled = "NO";
+ if (isset($server['disable'])) {
+ $disabled = "YES";
+ }
+ ?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
+ <?=$disabled;?>
+ </td>
+ <td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
+ <?=htmlspecialchars($server['protocol']);?> / <?=htmlspecialchars($server['local_port']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
+ <?=htmlspecialchars($server['tunnel_network']);?><br />
+ <?=htmlspecialchars($server['tunnel_networkv6']);?><br />
+ </td>
+ <td class="listbg" ondblclick="document.location='vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>'">
+ <?=htmlspecialchars($server['description']);?>
+ </td>
+ <td valign="middle" class="list nowrap">
+ <a href="vpn_openvpn_server.php?act=edit&amp;id=<?=$i;?>">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit server"); ?>" width="17" height="17" border="0" alt="edit" />
+ </a>
+ &nbsp;
+ <a href="vpn_openvpn_server.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this server?"); ?>')">
+ <img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete server"); ?>" width="17" height="17" border="0" alt="delete" />
+ </a>
+ </td>
+ </tr>
+ <?php
+ $i++;
+ endforeach;
+ ?>
+ <tr style="display:none;"><td></td></tr>
+ </tbody>
+ </table>
+
+ <?=gettext("Additional OpenVPN servers can be added here.");?>
+
+ <?php endif; ?>
+
+ </td>
+ </tr>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+mode_change();
+autokey_change();
+tlsauth_change();
+gwredir_change();
+dns_domain_change();
+dns_server_change();
+wins_server_change();
+client_mgmt_port_change();
+ntp_server_change();
+netbios_change();
+tuntap_change();
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
+<?php
+
+/* local utility functions */
+
+function set_checked($var,& $chk) {
+ if ($var) {
+ $chk = "checked=\"checked\"";
+ } else {
+ $chk = "";
+ }
+}
+
+?>
diff --git a/src/usr/local/www/vpn_pppoe.php b/src/usr/local/www/vpn_pppoe.php
new file mode 100644
index 0000000..4ad8d72
--- /dev/null
+++ b/src/usr/local/www/vpn_pppoe.php
@@ -0,0 +1,167 @@
+<?php
+/*
+ vpn_pppoe.php
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_MODULE: pppoe
+*/
+
+##|+PRIV
+##|*IDENT=page-services-pppoeserver
+##|*NAME=Services: PPPoE Server page
+##|*DESCR=Allow access to the 'Services: PPPoE Server' page.
+##|*MATCH=vpn_pppoe.php*
+##|-PRIV
+
+require_once("guiconfig.inc");
+require_once("filter.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['pppoes']['pppoe'])) {
+ $config['pppoes']['pppoe'] = array();
+}
+
+$a_pppoes = &$config['pppoes']['pppoe'];
+
+if ($_POST) {
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ if (file_exists("{$g['tmp_path']}/.vpn_pppoe.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.vpn_pppoe.apply"));
+ foreach ($toapplylist as $pppoeid) {
+ if (!is_numeric($pppoeid)) {
+ continue;
+ }
+ if (is_array($config['pppoes']['pppoe'])) {
+ foreach ($config['pppoes']['pppoe'] as $pppoe) {
+ if ($pppoe['pppoeid'] == $pppoeid) {
+ vpn_pppoe_configure($pppoe);
+ break;
+ }
+ }
+ }
+ }
+ @unlink("{$g['tmp_path']}/.vpn_pppoe.apply");
+ }
+ $retval = 0;
+ $retval |= filter_configure();
+ $savemsg = get_std_save_message($retval);
+ clear_subsystem_dirty('vpnpppoe');
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_pppoes[$_GET['id']]) {
+ if ("{$g['varrun_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'] . "-vpn.pid") {
+ killbypid("{$g['varrun_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'] . "-vpn.pid");
+ }
+ if (is_dir("{$g['varetc_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid'])) {
+ mwexec("/bin/rm -r {$g['varetc_path']}/pppoe" . $a_pppoes[$_GET['id']]['pppoeid']);
+ }
+ unset($a_pppoes[$_GET['id']]);
+ write_config();
+ header("Location: vpn_pppoe.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("VPN"), gettext("PPPoE"));
+$shortcut_section = "pppoes";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="vpn_pppoe.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (is_subsystem_dirty('vpnpppoe')): ?><br/>
+<?php print_info_box_np(gettext("The PPPoE entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
+<?php endif; ?>
+
+<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="15%" class="listhdrr"><?=gettext("Interface");?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Local IP");?></td>
+ <td width="25%" class="listhdrr"><?=gettext("Number of users");?></td>
+ <td width="25%" class="listhdr"><?=gettext("Description");?></td>
+ <td width="5%" class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="pppoe server">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="vpn_pppoe_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new pppoe instance");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i = 0;
+ foreach ($a_pppoes as $pppoe):
+?>
+ <tr>
+ <td class="listlr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($pppoe['interface']));?>
+ </td>
+ <td class="listlr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($pppoe['localip']);?>
+ </td>
+ <td class="listr" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($pppoe['n_pppoe_units']);?>
+ </td>
+ <td class="listbg" ondblclick="document.location='vpn_pppoe_edit.php?id=<?=$i;?>';">
+ <?=htmlspecialchars($pppoe['descr']);?>&nbsp;
+ </td>
+ <td valign="middle" class="list nowrap">
+ <table border="0" cellspacing="0" cellpadding="1" summary="icons">
+ <tr>
+ <td valign="middle"><a href="vpn_pppoe_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit PPPoE instance"); ?>" alt="edit" /></a></td>
+ <td><a href="vpn_pppoe.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry? All elements that still use it will become invalid (e.g. filter rules)!");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete pppoe instance");?>" alt="delete" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+<?php
+ $i++;
+ endforeach;
+?>
+ <tr>
+ <td class="list" colspan="4"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td valign="middle" width="17">&nbsp;</td>
+ <td valign="middle"><a href="vpn_pppoe_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add a new pppoe instance");?>" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_pppoe_edit.php b/src/usr/local/www/vpn_pppoe_edit.php
new file mode 100644
index 0000000..343c1f9
--- /dev/null
+++ b/src/usr/local/www/vpn_pppoe_edit.php
@@ -0,0 +1,671 @@
+<?php
+/*
+ vpn_pppoe_edit.php
+ part of pfSense
+
+ Copyright (C) 2005 Scott Ullrich (sullrich@gmail.com)
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-services-pppoeserver-edit
+##|*NAME=Services: PPPoE Server: Edit page
+##|*DESCR=Allow access to the 'Services: PPPoE Server: Edit' page.
+##|*MATCH=vpn_pppoe_edit.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+function vpn_pppoe_get_id() {
+ global $config;
+
+ $vpnid = 1;
+ if (is_array($config['pppoes']['pppoe'])) {
+ foreach ($config['pppoes']['pppoe'] as $pppoe) {
+ if ($vpnid == $pppoe['pppoeid']) {
+ $vpnid++;
+ } else {
+ return $vpnid;
+ }
+ }
+ }
+
+ return $vpnid;
+}
+
+if (!is_array($config['pppoes']['pppoe'])) {
+ $config['pppoes']['pppoe'] = array();
+}
+$a_pppoes = &$config['pppoes']['pppoe'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_pppoes[$id]) {
+ $pppoecfg =& $a_pppoes[$id];
+
+ $pconfig['remoteip'] = $pppoecfg['remoteip'];
+ $pconfig['localip'] = $pppoecfg['localip'];
+ $pconfig['mode'] = $pppoecfg['mode'];
+ $pconfig['interface'] = $pppoecfg['interface'];
+ $pconfig['n_pppoe_units'] = $pppoecfg['n_pppoe_units'];
+ $pconfig['pppoe_subnet'] = $pppoecfg['pppoe_subnet'];
+ $pconfig['pppoe_dns1'] = $pppoecfg['dns1'];
+ $pconfig['pppoe_dns2'] = $pppoecfg['dns2'];
+ $pconfig['descr'] = $pppoecfg['descr'];
+ $pconfig['username'] = $pppoecfg['username'];
+ $pconfig['pppoeid'] = $pppoecfg['pppoeid'];
+ if (is_array($pppoecfg['radius'])) {
+ $pconfig['radacct_enable'] = isset($pppoecfg['radius']['accounting']);
+ $pconfig['radiusissueips'] = isset($pppoecfg['radius']['radiusissueips']);
+ if (is_array($pppoecfg['radius']['server'])) {
+ $pconfig['radiusenable'] = isset($pppoecfg['radius']['server']['enable']);
+ $pconfig['radiusserver'] = $pppoecfg['radius']['server']['ip'];
+ $pconfig['radiusserverport'] = $pppoecfg['radius']['server']['port'];
+ $pconfig['radiusserveracctport'] = $pppoecfg['radius']['server']['acctport'];
+ $pconfig['radiussecret'] = $pppoecfg['radius']['server']['secret'];
+ }
+ if (is_array($pppoecfg['radius']['server2'])) {
+ $pconfig['radiussecenable'] = isset($pppoecfg['radius']['server2']['enable']);
+ $pconfig['radiusserver2'] = $pppoecfg['radius']['server2']['ip'];
+ $pconfig['radiusserver2port'] = $pppoecfg['radius']['server2']['port'];
+ $pconfig['radiusserver2acctport'] = $pppoecfg['radius']['server2']['acctport'];
+ $pconfig['radiussecret2'] = $pppoecfg['radius']['server2']['secret2'];
+ }
+ $pconfig['radius_nasip'] = $pppoecfg['radius']['nasip'];
+ $pconfig['radius_acct_update'] = $pppoecfg['radius']['acct_update'];
+ }
+}
+
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['mode'] == "server") {
+ $reqdfields = explode(" ", "localip remoteip");
+ $reqdfieldsn = array(gettext("Server address"), gettext("Remote start address"));
+
+ if ($_POST['radiusenable']) {
+ $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
+ $reqdfieldsn = array_merge($reqdfieldsn,
+ array(gettext("RADIUS server address"), gettext("RADIUS shared secret")));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
+ $input_errors[] = gettext("A valid server address must be specified.");
+ }
+ if (($_POST['pppoe_subnet'] && !is_ipaddr($_POST['remoteip']))) {
+ $input_errors[] = gettext("A valid remote start address must be specified.");
+ }
+ if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
+ $input_errors[] = gettext("A valid RADIUS server address must be specified.");
+ }
+
+ $_POST['remoteip'] = $pconfig['remoteip'] = gen_subnet($_POST['remoteip'], $_POST['pppoe_subnet']);
+ $subnet_start = ip2ulong($_POST['remoteip']);
+ $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['pppoe_subnet'] - 1;
+ if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
+ (ip2ulong($_POST['localip']) <= $subnet_end)) {
+ $input_errors[] = gettext("The specified server address lies in the remote subnet.");
+ }
+ if ($_POST['localip'] == get_interface_ip($_POST['interface'])) {
+ $input_errors[] = gettext("The specified server address is equal to an interface ip address.");
+ }
+
+ for ($x = 0; $x < 4999; $x++) {
+ if ($_POST["username{$x}"]) {
+ if (empty($_POST["password{$x}"])) {
+ $input_errors[] = sprintf(gettext("No password specified for username %s"), $_POST["username{$x}"]);
+ }
+ if ($_POST["ip{$x}"] <> "" && !is_ipaddr($_POST["ip{$x}"])) {
+ $input_errors[] = sprintf(gettext("Incorrect ip address specified for username %s"), $_POST["username{$x}"]);
+ }
+ }
+ }
+ }
+
+ if ($_POST['pppoeid'] && !is_numeric($_POST['pppoeid'])) {
+ $input_errors[] = gettext("Wrong data submitted");
+ }
+
+ if (!$input_errors) {
+ $pppoecfg = array();
+
+ $pppoecfg['remoteip'] = $_POST['remoteip'];
+ $pppoecfg['localip'] = $_POST['localip'];
+ $pppoecfg['mode'] = $_POST['mode'];
+ $pppoecfg['interface'] = $_POST['interface'];
+ $pppoecfg['n_pppoe_units'] = $_POST['n_pppoe_units'];
+ $pppoecfg['pppoe_subnet'] = $_POST['pppoe_subnet'];
+ $pppoecfg['descr'] = $_POST['descr'];
+ if ($_POST['radiusserver'] || $_POST['radiusserver2']) {
+ $pppoecfg['radius'] = array();
+
+ $pppoecfg['radius']['nasip'] = $_POST['radius_nasip'];
+ $pppoecfg['radius']['acct_update'] = $_POST['radius_acct_update'];
+ }
+ if ($_POST['radiusserver']) {
+ $pppoecfg['radius']['server'] = array();
+
+ $pppoecfg['radius']['server']['ip'] = $_POST['radiusserver'];
+ $pppoecfg['radius']['server']['secret'] = $_POST['radiussecret'];
+ $pppoecfg['radius']['server']['port'] = $_POST['radiusserverport'];
+ $pppoecfg['radius']['server']['acctport'] = $_POST['radiusserveracctport'];
+ }
+ if ($_POST['radiusserver2']) {
+ $pppoecfg['radius']['server2'] = array();
+
+ $pppoecfg['radius']['server2']['ip'] = $_POST['radiusserver2'];
+ $pppoecfg['radius']['server2']['secret2'] = $_POST['radiussecret2'];
+ $pppoecfg['radius']['server2']['port'] = $_POST['radiusserver2port'];
+ $pppoecfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport'];
+ }
+
+ if ($_POST['pppoe_dns1'] <> "") {
+ $pppoecfg['dns1'] = $_POST['pppoe_dns1'];
+ }
+
+ if ($_POST['pppoe_dns2'] <> "") {
+ $pppoecfg['dns2'] = $_POST['pppoe_dns2'];
+ }
+
+ if ($_POST['radiusenable'] == "yes") {
+ $pppoecfg['radius']['server']['enable'] = true;
+ }
+
+ if ($_POST['radiussecenable'] == "yes") {
+ $pppoecfg['radius']['server2']['enable'] = true;
+ }
+
+ if ($_POST['radacct_enable'] == "yes") {
+ $pppoecfg['radius']['accounting'] = true;
+ }
+
+ if ($_POST['radiusissueips'] == "yes") {
+ $pppoecfg['radius']['radiusissueips'] = true;
+ }
+
+ if ($_POST['pppoeid']) {
+ $pppoecfg['pppoeid'] = $_POST['pppoeid'];
+ } else {
+ $pppoecfg['pppoeid'] = vpn_pppoe_get_id();
+ }
+
+ $users = array();
+ for ($x = 0; $x < 4999; $x++) {
+ if ($_POST["username{$x}"]) {
+ $usernam = $_POST["username{$x}"] . ":" . base64_encode($_POST["password{$x}"]);
+ if ($_POST["ip{$x}"]) {
+ $usernam .= ":" . $_POST["ip{$x}"];
+ }
+ $users[] = $usernam;
+ }
+ }
+ if (count($users) > 0) {
+ $pppoecfg['username'] = implode(" ", $users);
+ }
+
+ if (!isset($id)) {
+ $id = count($a_pppoes);
+ }
+ if (file_exists("{$g['tmp_path']}/.vpn_pppoe.apply")) {
+ $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.vpn_pppoe.apply"));
+ } else {
+ $toapplylist = array();
+ }
+
+ $toapplylist[] = $pppoecfg['pppoeid'];
+ $a_pppoes[$id] = $pppoecfg;
+
+ write_config();
+ mark_subsystem_dirty('vpnpppoe');
+ file_put_contents("{$g['tmp_path']}/.vpn_pppoe.apply", serialize($toapplylist));
+ header("Location: vpn_pppoe.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("Services"), gettext("PPPoE Server"), gettext("Edit"));
+$shortcut_section = "pppoes";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript" src="/javascript/row_helper.js"></script>
+
+<input type='hidden' name='username' value='textbox' class="formfld unknown" />
+<input type='hidden' name='password' value='textbox' />
+<input type='hidden' name='ip' value='textbox' />
+
+<script type="text/javascript">
+ //<![CDATA[
+ rowname[0] = "username";
+ rowtype[0] = "textbox";
+ rowsize[0] = "20";
+
+ rowname[1] = "password";
+ rowtype[1] = "password";
+ rowsize[1] = "20";
+
+ rowname[2] = "ip";
+ rowtype[2] = "textbox";
+ rowsize[2] = "10";
+ //]]>
+</script>
+
+<script type="text/javascript">
+//<![CDATA[
+function get_radio_value(obj) {
+ for (i = 0; i < obj.length; i++) {
+ if (obj[i].checked) {
+ return obj[i].value;
+ }
+ }
+ return null;
+}
+
+function enable_change(enable_over) {
+ if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
+ document.iform.remoteip.disabled = 0;
+ document.iform.descr.disabled = 0;
+ document.iform.localip.disabled = 0;
+ document.iform.radiusenable.disabled = 0;
+ document.iform.interface.disabled = 0;
+ document.iform.n_pppoe_units.disabled = 0;
+ document.iform.pppoe_subnet.disabled = 0;
+ document.iform.pppoe_dns1.disabled = 0;
+ document.iform.pppoe_dns2.disabled = 0;
+ if (document.iform.radiusenable.checked || enable_over) {
+ document.iform.radacct_enable.disabled = 0;
+ document.iform.radiusserver.disabled = 0;
+ document.iform.radiussecret.disabled = 0;
+ document.iform.radiusserverport.disabled = 0;
+ document.iform.radiusserveracctport.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ document.iform.radius_nasip.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ document.iform.radius_nasip.disabled = 0;
+ document.iform.radius_acct_update.disabled = 0;
+ document.iform.radiussecenable.disabled = 0;
+ if (document.iform.radiussecenable.checked || enable_over) {
+ document.iform.radiusserver2.disabled = 0;
+ document.iform.radiussecret2.disabled = 0;
+ document.iform.radiusserver2port.disabled = 0;
+ document.iform.radiusserver2acctport.disabled = 0;
+ } else {
+
+ document.iform.radiusserver2.disabled = 1;
+ document.iform.radiussecret2.disabled = 1;
+ document.iform.radiusserver2port.disabled = 1;
+ document.iform.radiusserver2acctport.disabled = 1;
+ }
+ } else {
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radiusserverport.disabled = 1;
+ document.iform.radiusserveracctport.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.radius_nasip.disabled = 1;
+ document.iform.radius_acct_update.disabled = 1;
+ document.iform.radiussecenable.disabled = 1;
+ }
+ } else {
+ document.iform.interface.disabled = 1;
+ document.iform.n_pppoe_units.disabled = 1;
+ document.iform.pppoe_subnet.disabled = 1;
+ document.iform.remoteip.disabled = 1;
+ document.iform.descr.disabled = 1;
+ document.iform.localip.disabled = 1;
+ document.iform.pppoe_dns1.disabled = 1;
+ document.iform.pppoe_dns2.disabled = 1;
+ document.iform.radiusenable.disabled = 1;
+ document.iform.radiussecenable.disabled = 1;
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radiusserverport.disabled = 1;
+ document.iform.radiusserveracctport.disabled = 1;
+ document.iform.radiusserver2.disabled = 1;
+ document.iform.radiussecret2.disabled = 1;
+ document.iform.radiusserver2port.disabled = 1;
+ document.iform.radiusserver2acctport.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.radius_nasip.disabled = 1;
+ document.iform.radius_acct_update.disabled = 1;
+ }
+}
+//]]>
+</script>
+<form action="vpn_pppoe_edit.php" method="post" name="iform" id="iform">
+<?php
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+if ($savemsg) {
+ print_info_box($savemsg);
+}
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="pppoe edit">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td height="16" colspan="2" class="listtopic" valign="top"><?php echo gettext("PPPoE server configuration"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="mode" type="radio" onclick="enable_change(false)" value="off" <?php if ($pconfig['mode'] != "server") echo "checked=\"checked\"";?> />
+ <?=gettext("Off"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable PPPoE server"); ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="22%" valign="top" class="vncell"><b><?=gettext("Interface"); ?></b></td>
+ <td width="78%" valign="top" class="vtable">
+
+ <select name="interface" class="formselect" id="interface">
+<?php
+ $interfaces = get_configured_interface_with_descr();
+ foreach ($interfaces as $iface => $ifacename):
+?>
+ <option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected=\"selected\""; ?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+<?php
+ endforeach;
+?>
+ </select> <br />
+
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet netmask"); ?></td>
+ <td width="78%" class="vtable">
+ <select id="pppoe_subnet" name="pppoe_subnet">
+<?php
+ for ($x = 0; $x < 33; $x++) {
+ if ($x == $pconfig['pppoe_subnet']) {
+ $selected = "selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value=\"{$x}\" {$selected}>{$x}</option>\n";
+ }
+?>
+ </select>
+ <br /><?=gettext("Hint"); ?>: 24 <?=gettext("is"); ?> 255.255.255.0
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("No. PPPoE users"); ?></td>
+ <td width="78%" class="vtable">
+ <select id="n_pppoe_units" name="n_pppoe_units">
+<?php
+ for ($x = 0; $x < 255; $x++) {
+ if ($x == $pconfig['n_pppoe_units']) {
+ $selected = "selected=\"selected\"";
+ } else {
+ $selected = "";
+ }
+ echo "<option value=\"{$x}\" {$selected}>{$x}</option>\n";
+ }
+?>
+ </select>
+ <br /><?=gettext("Hint: 10 is ten PPPoE clients"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
+ <br />
+ <?=gettext("Enter the IP address the PPPoE server should give to clients for use as their \"gateway\""); ?>.
+ <br />
+ <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
+ <br />
+ <br />
+ <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote address range"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
+ <br />
+ <?=gettext("Specify the starting address for the client IP address subnet"); ?>.<br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
+ <br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("DNS servers"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="pppoe_dns1" type="text" class="formfld unknown" id="pppoe_dns1" size="20" value="<?=htmlspecialchars($pconfig['pppoe_dns1']);?>" />
+ <br />
+ <input name="pppoe_dns2" type="text" class="formfld unknown" id="pppoe_dns2" size="20" value="<?=htmlspecialchars($pconfig['pppoe_dns2']);?>" />
+ <br />
+ <?=gettext("If entered they will be given to all PPPoE clients, else LAN DNS and one WAN DNS will go to all clients"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Use a RADIUS server for authentication"); ?><br />
+ </strong><?=gettext("When set, all users will be authenticated using " .
+ "the RADIUS server specified below. The local user database " .
+ "will not be used"); ?>.<br />
+ <br />
+ <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable RADIUS accounting"); ?> <br />
+ <br />
+ </strong><?=gettext("Sends accounting packets to the RADIUS server"); ?>.<br />
+ <input name="radiussecenable" type="checkbox" id="radiussecenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiussecenable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Use Backup RADIUS Server"); ?></strong><br />
+ <?=gettext("When set, if primary server fails all requests will be sent via backup server"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("NAS IP Address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="radius_nasip" type="text" class="formfld unknown" id="radius_nasip" size="20" value="<?=htmlspecialchars($pconfig['radius_nasip']);?>" />
+ <br /><?=gettext("RADIUS server NAS IP Address"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("RADIUS Accounting Update"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="radius_acct_update" type="text" class="formfld unknown" id="radius_acct_update" size="20" value="<?=htmlspecialchars($pconfig['radius_acct_update']);?>" />
+ <br /><?=gettext("RADIUS accounting update period in seconds"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS issued IPs"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips" <?php if ($pconfig['radiusissueips']) echo "checked=\"checked\""; ?> />
+ <br /><?=gettext("Issue IP Addresses via RADIUS server"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS server Primary"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
+ <input name="radiusserverport" type="text" class="formfld unknown" id="radiusserverport" size="4" value="<?=htmlspecialchars($pconfig['radiusserverport']);?>" />
+ <input name="radiusserveracctport" type="text" class="formfld unknown" id="radiusserveracctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserveracctport']);?>" />
+ <br /><?=gettext("Enter the IP address, authentication port and accounting port (optional) of the RADIUS server."); ?><br />
+ <br /> <?=gettext("standard port 1812 and 1813 accounting"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS primary shared secret"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
+ <br /><?=gettext("Enter the shared secret that will be used to authenticate " .
+ "to the RADIUS server"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS server Secondary"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusserver2" type="text" class="formfld unknown" id="radiusserver2" size="20" value="<?=htmlspecialchars($pconfig['radiusserver2']);?>" />
+ <input name="radiusserver2port" type="text" class="formfld unknown" id="radiusserver2port" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2port']);?>" />
+ <input name="radiusserver2acctport" type="text" class="formfld unknown" id="radiusserver2acctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2acctport']);?>" />
+ <br /><?=gettext("Enter the IP address, authentication port and accounting port (optional) of the backup RADIUS server."); ?><br />
+ <br /> <?=gettext("standard port 1812 and 1813 accounting"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS secondary shared secret"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiussecret2" type="password" class="formfld pwd" id="radiussecret2" size="20" value="<?=htmlspecialchars($pconfig['radiussecret2']);?>" />
+ <br />
+ <?=gettext("Enter the shared secret that will be used to authenticate " .
+ "to the RADIUS server"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><div id="addressnetworkport"><?=gettext("User (s)");?></div></td>
+ <td width="78%" class="vtable">
+ <table id="usertable" summary="users">
+ <tbody>
+ <tr>
+ <td><div id="onecolumn"><?=gettext("Username");?></div></td>
+ <td><div id="twocolumn"><?=gettext("Password");?></div></td>
+ <td><div id="thirdcolumn"><?=gettext("IP");?></div></td>
+ </tr>
+<?php
+ $counter = 0;
+ $usernames = $pconfig['username'];
+ if ($usernames <> ""):
+ $item = explode(" ", $usernames);
+ foreach ($item as $ww):
+ $wws = explode(":", $ww);
+ $user = $wws[0];
+ $passwd = base64_decode($wws[1]);
+ $ip = $wws[2];
+ $tracker = $counter;
+?>
+ <tr>
+ <td>
+ <input name="username<?php echo $tracker; ?>" type="text" class="formfld unknown" id="username<?php echo $tracker; ?>" size="20" value="<?=htmlspecialchars($user);?>" />
+ </td>
+ <td>
+ <input name="password<?php echo $tracker; ?>" type="password" class="formfld pwd" id="password<?php echo $tracker; ?>" size="20" value="<?=htmlspecialchars($passwd);?>" />
+ </td>
+ <td>
+ <input name="ip<?php echo $tracker; ?>" type="text" class="formfld unknown" id="ip<?php echo $tracker; ?>" size="10" value="<?=htmlspecialchars($ip);?>" />
+ </td>
+ <td>
+ <a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="delete" /></a>
+ </td>
+ </tr>
+<?php
+ $counter++;
+ endforeach;
+ endif;
+?>
+ </tbody>
+ </table>
+ <a onclick="javascript:addRowTo('usertable'); return false;" href="#">
+ <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td height="16" colspan="2" valign="top"></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+<?php
+ if (isset($id)) {
+ echo "<input type=\"hidden\" name=\"id\" id=\"id\" value=\"" . htmlspecialchars($id, ENT_QUOTES | ENT_HTML401) . "\" />";
+ }
+?>
+<?php
+ if (isset($pconfig['pppoeid'])) {
+ echo "<input type=\"hidden\" name=\"pppoeid\" id=\"pppoeid\" value=\"{$pppoeid}\" />";
+ }
+?>
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ <a href="vpn_pppoe.php"><input name="Cancel" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <span class="vexpl">
+ <span class="red"><strong><?=gettext("Note"); ?>:<br /></strong></span>
+ <?=gettext("don't forget to add a firewall rule to permit traffic from PPPoE clients"); ?>!
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+ //<![CDATA[
+ enable_change(false);
+
+ field_counter_js = 3;
+ rows = 1;
+ totalrows = <?php echo $counter; ?>;
+ loaded = <?php echo $counter; ?>;
+ //]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_pptp.php b/src/usr/local/www/vpn_pptp.php
new file mode 100644
index 0000000..b6ded68
--- /dev/null
+++ b/src/usr/local/www/vpn_pptp.php
@@ -0,0 +1,504 @@
+<?php
+/*
+ vpn_pptp.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnpptp
+##|*NAME=VPN: VPN PPTP page
+##|*DESCR=Allow access to the 'VPN: VPN PPTP' page.
+##|*MATCH=vpn_pptp.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("functions.inc");
+require_once("filter.inc");
+require_once("shaper.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['pptpd']['radius'])) {
+ $config['pptpd']['radius'] = array();
+}
+$pptpcfg = &$config['pptpd'];
+
+$pconfig['remoteip'] = $pptpcfg['remoteip'];
+$pconfig['localip'] = $pptpcfg['localip'];
+$pconfig['redir'] = $pptpcfg['redir'];
+$pconfig['mode'] = $pptpcfg['mode'];
+$pconfig['wins'] = $pptpcfg['wins'];
+$pconfig['req128'] = isset($pptpcfg['req128']);
+$pconfig['n_pptp_units'] = $pptpcfg['n_pptp_units'];
+$pconfig['pptp_dns1'] = $pptpcfg['dns1'];
+$pconfig['pptp_dns2'] = $pptpcfg['dns2'];
+$pconfig['radiusenable'] = isset($pptpcfg['radius']['server']['enable']);
+$pconfig['radiusissueips'] = isset($pptpcfg['radius']['radiusissueips']);
+$pconfig['radiussecenable'] = isset($pptpcfg['radius']['server2']['enable']);
+$pconfig['radacct_enable'] = isset($pptpcfg['radius']['accounting']);
+$pconfig['radiusserver'] = $pptpcfg['radius']['server']['ip'];
+$pconfig['radiusserverport'] = $pptpcfg['radius']['server']['port'];
+$pconfig['radiusserveracctport'] = $pptpcfg['radius']['server']['acctport'];
+$pconfig['radiussecret'] = $pptpcfg['radius']['server']['secret'];
+$pconfig['radiusserver2'] = $pptpcfg['radius']['server2']['ip'];
+$pconfig['radiusserver2port'] = $pptpcfg['radius']['server2']['port'];
+$pconfig['radiusserver2acctport'] = $pptpcfg['radius']['server2']['acctport'];
+$pconfig['radiussecret2'] = $pptpcfg['radius']['server2']['secret2'];
+$pconfig['radius_acct_update'] = $pptpcfg['radius']['acct_update'];
+$pconfig['radius_nasip'] = $pptpcfg['radius']['nasip'];
+
+if ($_POST) {
+
+ if (isset($input_errors))
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if ($_POST['mode'] == "server") {
+ $reqdfields = explode(" ", "localip remoteip");
+ $reqdfieldsn = array(gettext("Server address"),gettext("Remote start address"));
+
+ if ($_POST['radiusenable']) {
+ $reqdfields = array_merge($reqdfields, explode(" ", "radiusserver radiussecret"));
+ $reqdfieldsn = array_merge($reqdfieldsn,
+ array(gettext("RADIUS server address"),gettext("RADIUS shared secret")));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['localip'] && !is_ipaddr($_POST['localip']))) {
+ $input_errors[] = gettext("A valid server address must be specified.");
+ }
+ if (is_ipaddr_configured($_POST['localip'])) {
+ $input_errors[] = gettext("'Server address' parameter should NOT be set to any IP address currently in use on this firewall.");
+ }
+ if (!is_ipaddr($_POST['remoteip'])) {
+ $input_errors[] = gettext("A valid remote start address must be specified.");
+ }
+ if (($_POST['radiusserver'] && !is_ipaddr($_POST['radiusserver']))) {
+ $input_errors[] = gettext("A valid RADIUS server address must be specified.");
+ }
+
+ if (!$input_errors) {
+ $subnet_start = ip2ulong($_POST['remoteip']);
+ $subnet_end = ip2ulong($_POST['remoteip']) + $_POST['n_pptp_units'] - 1;
+
+ if ((ip2ulong($_POST['localip']) >= $subnet_start) &&
+ (ip2ulong($_POST['localip']) <= $subnet_end)) {
+ $input_errors[] = gettext("The specified server address lies in the remote subnet.");
+ }
+ // TODO: Should this check be for any local IP address?
+ if ($_POST['localip'] == $config['interfaces']['lan']['ipaddr']) {
+ $input_errors[] = gettext("The specified server address is equal to the LAN interface address.");
+ }
+ }
+ } else if ($_POST['mode'] == "redir") {
+ $reqdfields = explode(" ", "redir");
+ $reqdfieldsn = array(gettext("PPTP redirection target address"));
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (($_POST['redir'] && !is_ipaddr($_POST['redir']))) {
+ $input_errors[] = gettext("A valid target address must be specified.");
+ }
+ } else if (isset($config['pptpd']['mode'])) {
+ unset($config['pptpd']['mode']);
+ }
+
+ if (!$input_errors) {
+ $pptpcfg['remoteip'] = $_POST['remoteip'];
+ $pptpcfg['redir'] = $_POST['redir'];
+ $pptpcfg['localip'] = $_POST['localip'];
+ $pptpcfg['mode'] = $_POST['mode'];
+ $pptpcfg['wins'] = $_POST['wins'];
+ $pptpcfg['n_pptp_units'] = $_POST['n_pptp_units'];
+ $pptpcfg['radius']['server']['ip'] = $_POST['radiusserver'];
+ $pptpcfg['radius']['server']['port'] = $_POST['radiusserverport'];
+ $pptpcfg['radius']['server']['acctport'] = $_POST['radiusserveracctport'];
+ $pptpcfg['radius']['server']['secret'] = $_POST['radiussecret'];
+ $pptpcfg['radius']['server2']['ip'] = $_POST['radiusserver2'];
+ $pptpcfg['radius']['server2']['port'] = $_POST['radiusserver2port'];
+ $pptpcfg['radius']['server2']['acctport'] = $_POST['radiusserver2acctport'];
+ $pptpcfg['radius']['server2']['secret2'] = $_POST['radiussecret2'];
+ $pptpcfg['radius']['nasip'] = $_POST['radius_nasip'];
+ $pptpcfg['radius']['acct_update'] = $_POST['radius_acct_update'];
+
+ if ($_POST['pptp_dns1'] == "") {
+ if (isset($pptpcfg['dns1']))
+ unset($pptpcfg['dns1']);
+ } else
+ $pptpcfg['dns1'] = $_POST['pptp_dns1'];
+
+ if ($_POST['pptp_dns2'] == "") {
+ if (isset($pptpcfg['dns2']))
+ unset($pptpcfg['dns2']);
+ } else
+ $pptpcfg['dns2'] = $_POST['pptp_dns2'];
+
+ if($_POST['req128'] == "yes")
+ $pptpcfg['req128'] = true;
+ else if (isset($pptpcfg['req128']))
+ unset($pptpcfg['req128']);
+
+ if($_POST['radiusenable'] == "yes")
+ $pptpcfg['radius']['server']['enable'] = true;
+ else if (isset($pptpcfg['radius']['server']['enable']))
+ unset($pptpcfg['radius']['server']['enable']);
+
+ if($_POST['radiussecenable'] == "yes")
+ $pptpcfg['radius']['server2']['enable'] = true;
+ else if (isset($pptpcfg['radius']['server2']['enable']))
+ unset($pptpcfg['radius']['server2']['enable']);
+
+ if($_POST['radacct_enable'] == "yes")
+ $pptpcfg['radius']['accounting'] = true;
+ else if (isset($pptpcfg['radius']['accounting']))
+ unset($pptpcfg['radius']['accounting']);
+
+ if($_POST['radiusissueips'] == "yes") {
+ $pptpcfg['radius']['radiusissueips'] = true;
+ } else if (isset($pptpcfg['radius']['radiusissueips']))
+ unset($pptpcfg['radius']['radiusissueips']);
+
+ write_config();
+
+ $retval = 0;
+ $retval = vpn_pptpd_configure();
+ $savemsg = get_std_save_message($retval);
+
+ filter_configure();
+ }
+}
+
+$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"));
+$shortcut_section = "pptps";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<script type="text/javascript">
+//<![CDATA[
+function get_radio_value(obj)
+{
+ for (i = 0; i < obj.length; i++) {
+ if (obj[i].checked)
+ return obj[i].value;
+ }
+ return null;
+}
+
+function enable_change(enable_over) {
+ if ((get_radio_value(document.iform.mode) == "server") || enable_over) {
+ document.iform.remoteip.disabled = 0;
+ document.iform.localip.disabled = 0;
+ document.iform.req128.disabled = 0;
+ document.iform.radiusenable.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ document.iform.wins.disabled = 0;
+ document.iform.n_pptp_units.disabled = 0;
+ document.iform.pptp_dns1.disabled = 0;
+ document.iform.pptp_dns2.disabled = 0;
+
+ if (document.iform.radiusenable.checked || enable_over) {
+ document.iform.radiussecenable.disabled = 0;
+ document.iform.radacct_enable.disabled = 0;
+ document.iform.radiusserver.disabled = 0;
+ document.iform.radiusserverport.disabled = 0;
+ document.iform.radiusserveracctport.disabled = 0;
+ document.iform.radiussecret.disabled = 0;
+ document.iform.radius_nasip.disabled = 0;
+ document.iform.radius_acct_update.disabled = 0;
+ document.iform.radiusissueips.disabled = 0;
+ if (document.iform.radiussecenable.checked || enable_over) {
+ document.iform.radiusserver2.disabled = 0;
+ document.iform.radiussecret2.disabled = 0;
+ document.iform.radiusserver2port.disabled = 0;
+ document.iform.radiusserver2acctport.disabled = 0;
+ } else {
+
+ document.iform.radiusserver2.disabled = 1;
+ document.iform.radiussecret2.disabled = 1;
+ document.iform.radiusserver2port.disabled = 1;
+ document.iform.radiusserver2acctport.disabled = 1;
+ }
+ } else {
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiusserverport.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.radiusserveracctport.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radius_nasip.disabled = 1;
+ document.iform.radius_acct_update.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.radiusserver2.disabled = 1;
+ document.iform.radiussecret2.disabled = 1;
+ document.iform.radiusserver2port.disabled = 1;
+ document.iform.radiusserver2acctport.disabled = 1;
+ }
+
+ } else {
+ document.iform.remoteip.disabled = 1;
+ document.iform.localip.disabled = 1;
+ document.iform.req128.disabled = 1;
+ document.iform.n_pptp_units.disabled = 1;
+ document.iform.pptp_dns1.disabled = 1;
+ document.iform.pptp_dns2.disabled = 1;
+ document.iform.radiusenable.disabled = 1;
+ document.iform.radacct_enable.disabled = 1;
+ document.iform.radiusserver.disabled = 1;
+ document.iform.radiusserverport.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ document.iform.radiusserveracctport.disabled = 1;
+ document.iform.radiussecret.disabled = 1;
+ document.iform.radius_nasip.disabled = 1;
+ document.iform.radius_acct_update.disabled = 1;
+ document.iform.radiussecenable.disabled = 1;
+ document.iform.radiusserver2.disabled = 1;
+ document.iform.radiusserver2port.disabled = 1;
+ document.iform.radiusserver2acctport.disabled = 1;
+ document.iform.radiussecret2.disabled = 1;
+ document.iform.wins.disabled = 1;
+ document.iform.radiusissueips.disabled = 1;
+ }
+ if ((get_radio_value(document.iform.mode) == "redir") || enable_over) {
+ document.iform.redir.disabled = 0;
+ } else {
+ document.iform.redir.disabled = 1;
+ }
+}
+//]]>
+</script>
+<form action="vpn_pptp.php" method="post" name="iform" id="iform">
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php print_info_box(gettext("PPTP is no longer considered a secure VPN technology because it relies upon MS-CHAPv2 which has been compromised. If you continue to use PPTP be aware that intercepted traffic can be decrypted by a third party, so it should be considered unencrypted. We advise migrating to another VPN type such as OpenVPN or IPsec.<br /><br /><a href=\"https://isc.sans.edu/diary/End+of+Days+for+MS-CHAPv2/13807\">Read More</a>")); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn pptp">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Configuration"), true, "vpn_pptp.php");
+ $tab_array[1] = array(gettext("Users"), false, "vpn_pptp_users.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+<div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="mode" type="radio" onclick="enable_change(false)" value="off"
+ <?php if (($pconfig['mode'] != "server") && ($pconfig['mode'] != "redir")) echo "checked=\"checked\"";?> />
+ <?=gettext("Off"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+
+ <input type="radio" name="mode" value="redir" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "redir") echo "checked=\"checked\"" ?> />
+ <?=gettext("Redirect incoming PPTP connections to");?>:</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("PPTP redirection");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="redir" type="text" class="formfld unknown" id="redir" size="20" value="<?=htmlspecialchars($pconfig['redir']);?>" />
+ <br />
+ <?=gettext("Enter the IP address of a host which will accept incoming " .
+ "PPTP connections"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vtable">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input type="radio" name="mode" value="server" onclick="enable_change(false)" <?php if ($pconfig['mode'] == "server") echo "checked=\"checked\""; ?> />
+ <?=gettext("Enable PPTP server"); ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("No. PPTP users"); ?></td>
+ <td width="78%" class="vtable">
+ <select id="n_pptp_units" name="n_pptp_units">
+ <?php
+ $toselect = ($pconfig['n_pptp_units'] > 0) ? $pconfig['n_pptp_units'] : 16;
+ for($x=1; $x<255; $x++) {
+ if($x == $toselect)
+ $SELECTED = " selected=\"selected\"";
+ else
+ $SELECTED = "";
+ echo "<option value=\"{$x}\"{$SELECTED}>{$x}</option>\n";
+ }
+ ?>
+ </select>
+ <br /><?=gettext("Hint: 10 is ten PPTP clients"); ?>
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Server address"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="localip" type="text" class="formfld unknown" id="localip" size="20" value="<?=htmlspecialchars($pconfig['localip']);?>" />
+ <br />
+ <?=gettext("Enter the IP address the PPTP server should give to clients for use as their \"gateway\""); ?>.
+ <br />
+ <?=gettext("Typically this is set to an unused IP just outside of the client range"); ?>.
+ <br />
+ <br />
+ <?=gettext("NOTE: This should NOT be set to any IP address currently in use on this firewall"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Remote address " .
+ "range"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="remoteip" type="text" class="formfld unknown" id="remoteip" size="20" value="<?=htmlspecialchars($pconfig['remoteip']);?>" />
+ <br />
+ <?=gettext("Specify the starting address for the client IP subnet"); ?>.<br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("PPTP DNS Servers"); ?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="pptp_dns1" type="text" class="formfld unknown" id="pptp_dns1" size="20" value="<?=htmlspecialchars($pconfig['pptp_dns1']);?>" />
+ <br />
+ <input name="pptp_dns2" type="text" class="formfld unknown" id="pptp_dns2" size="20" value="<?=htmlspecialchars($pconfig['pptp_dns2']);?>" />
+ <br />
+ <?=gettext("primary and secondary DNS servers assigned to PPTP clients"); ?><br />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("WINS Server"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="wins" class="formfld unknown" id="wins" size="20" value="<?=htmlspecialchars($pconfig['wins']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS"); ?></td>
+ <td width="78%" class="vtable">
+ <input name="radiusenable" type="checkbox" id="radiusenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiusenable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Use a RADIUS server for authentication"); ?></strong><br />
+ <?=gettext("When set, all users will be authenticated using " .
+ "the RADIUS server specified below. The local user database " .
+ "will not be used"); ?>.<br />
+ <br />
+ <input name="radacct_enable" type="checkbox" id="radacct_enable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radacct_enable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Enable RADIUS accounting"); ?> <br />
+ </strong><?=gettext("Sends accounting packets to the RADIUS server"); ?>.<br />
+ <br />
+ <input name="radiussecenable" type="checkbox" id="radiussecenable" onclick="enable_change(false)" value="yes" <?php if ($pconfig['radiussecenable']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Secondary RADIUS server for failover authentication"); ?></strong><br />
+ <?=gettext("When set, all requests will go to the secondary server when primary fails"); ?><br />
+ <br />
+ <input name="radiusissueips" value="yes" type="checkbox" class="formfld" id="radiusissueips"<?php if($pconfig['radiusissueips']) echo " checked=\"checked\""; ?> />
+ <strong><?=gettext("RADIUS issued IPs"); ?></strong>
+ <br /><?=gettext("Issue IP addresses via RADIUS server"); ?>.
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS NAS IP"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radius_nasip" class="formfld unknown" id="radius_nasip" size="20" value="<?=htmlspecialchars($pconfig['radius_nasip']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Accounting Update"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radius_acct_update" class="formfld unknown" id="radius_acct_update" size="20" value="<?=htmlspecialchars($pconfig['radius_acct_update']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS Server"); ?> </td>
+ <td width="78%" class="vtable">
+ <input name="radiusserver" type="text" class="formfld unknown" id="radiusserver" size="20" value="<?=htmlspecialchars($pconfig['radiusserver']);?>" />
+ <input name="radiusserverport" type="text" class="formfld unknown" id="radiusserverport" size="4" value="<?=htmlspecialchars($pconfig['radiusserverport']);?>" />
+ <input name="radiusserveracctport" type="text" class="formfld unknown" id="radiusserveracctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserveracctport']);?>" />
+ <br />
+ <?=gettext("Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("RADIUS shared secret"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiussecret" type="password" class="formfld pwd" id="radiussecret" size="20" value="<?=htmlspecialchars($pconfig['radiussecret']);?>" />
+ <br />
+ <?=gettext("Enter the shared secret that will be used to authenticate " .
+ "to the RADIUS server"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Secondary RADIUS server"); ?> </td>
+ <td width="78%" class="vtable">
+ <input name="radiusserver2" type="text" class="formfld unknown" id="radiusserver2" size="20" value="<?=htmlspecialchars($pconfig['radiusserver2']);?>" />
+ <input name="radiusserver2port" type="text" class="formfld unknown" id="radiusserver2port" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2port']);?>" />
+ <input name="radiusserver2acctport" type="text" class="formfld unknown" id="radiusserver2acctport" size="4" value="<?=htmlspecialchars($pconfig['radiusserver2acctport']);?>" />
+ <br />
+ <?=gettext("Enter the IP address, RADIUS port, and RADIUS accounting port of the RADIUS server"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("Secondary RADIUS shared secret"); ?></td>
+ <td width="78%" valign="top" class="vtable">
+ <input name="radiussecret2" type="password" class="formfld pwd" id="radiussecret2" size="20" value="<?=htmlspecialchars($pconfig['radiussecret2']);?>" />
+ <br />
+ <?=gettext("Enter the shared secret that will be used to authenticate " .
+ "to the secondary RADIUS server"); ?>.</td>
+ </tr>
+ <tr>
+ <td height="16" colspan="2" valign="top"></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="middle">&nbsp;</td>
+ <td width="78%" class="vtable">
+ <input name="req128" type="checkbox" id="req128" value="yes" <?php if ($pconfig['req128']) echo "checked=\"checked\""; ?> />
+ <strong><?=gettext("Require 128-bit encryption"); ?></strong><br />
+ <?=gettext("When set, only 128-bit encryption will be accepted. Otherwise " .
+ "40-bit and 56-bit encryption will be accepted as well. Note that " .
+ "encryption will always be forced on PPTP connections (i.e. " .
+ "unencrypted connections will not be accepted)"); ?>.</td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%"><span class="vexpl"><span class="red"><strong><?=gettext("Note");?>:<br />
+ </strong></span><?=gettext("don't forget to ");?><a href="firewall_rules.php?if=pptp"><?=gettext("add a firewall rule"); ?></a> <?=gettext("to permit ".
+ "traffic from PPTP clients");?>!</span></td>
+ </tr>
+ </table>
+</div>
+ </td>
+ </tr>
+</table>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+enable_change(false);
+//]]>
+</script>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_pptp_users.php b/src/usr/local/www/vpn_pptp_users.php
new file mode 100644
index 0000000..553888f
--- /dev/null
+++ b/src/usr/local/www/vpn_pptp_users.php
@@ -0,0 +1,142 @@
+<?php
+/*
+ vpn_pptp_users.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnpptp-users
+##|*NAME=VPN: VPN PPTP: Users page
+##|*DESCR=Allow access to the 'VPN: VPN PPTP: Users' page.
+##|*MATCH=vpn_pptp_users.php*
+##|-PRIV
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['pptpd']['user'])) {
+ $config['pptpd']['user'] = array();
+}
+$a_secret = &$config['pptpd']['user'];
+
+if ($_POST) {
+
+ $pconfig = $_POST;
+
+ if ($_POST['apply']) {
+ $retval = 0;
+ $retval = vpn_setup();
+ $savemsg = get_std_save_message($retval);
+ if ($retval == 0) {
+ if (is_subsystem_dirty('pptpusers'))
+ clear_subsystem_dirty('pptpusers');
+ }
+ }
+}
+
+if ($_GET['act'] == "del") {
+ if ($a_secret[$_GET['id']]) {
+ unset($a_secret[$_GET['id']]);
+ write_config();
+ mark_subsystem_dirty('pptpusers');
+ header("Location: vpn_pptp_users.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("Users"));
+$shortcut_section = "pptps";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<form action="vpn_pptp_users.php" method="post">
+<?php if ($savemsg) print_info_box($savemsg); ?>
+<?php if (isset($config['pptpd']['radius']['enable']))
+ print_info_box(gettext("Warning: RADIUS is enabled. The local user database will not be used.")); ?>
+<?php if (is_subsystem_dirty('pptpusers')): ?><br/>
+<?php print_info_box_np(gettext("The PPTP user list has been modified").".<br />".gettext("You must apply the changes in order for them to take effect").".<br /></b><b>".gettext("Warning: this will terminate all current PPTP sessions")."!");?><br />
+<?php endif; ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="vpn pptp users">
+ <tr><td class="tabnavtbl">
+<?php
+ $tab_array = array();
+ $tab_array[0] = array(gettext("Configuration"), false, "vpn_pptp.php");
+ $tab_array[1] = array(gettext("Users"), true, "vpn_pptp_users.php");
+ display_top_tabs($tab_array);
+?> </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td class="listhdrr"><?=gettext("Username");?></td>
+ <td class="listhdr"><?=gettext("IP address");?></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td><a href="vpn_pptp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user");?>" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <?php $i = 0; foreach ($a_secret as $secretent): ?>
+ <tr>
+ <td class="listlr">
+ <?=htmlspecialchars($secretent['name']);?>
+ </td>
+ <td class="listr">
+ <?=htmlspecialchars($secretent['ip']);?>&nbsp;
+ </td>
+ <td class="list nowrap"><a href="vpn_pptp_users_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" title="<?=gettext("edit user");?>" width="17" height="17" border="0" alt="edit" /></a>
+ &nbsp;<a href="vpn_pptp_users.php?act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this user?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" title="<?=gettext("delete user");?>" width="17" height="17" border="0" alt="delete" /></a></td>
+ </tr>
+ <?php $i++; endforeach; ?>
+ <tr>
+ <td class="list" colspan="2"></td>
+ <td class="list">
+ <table border="0" cellspacing="0" cellpadding="1" summary="add">
+ <tr>
+ <td width="17"></td>
+ <td><a href="vpn_pptp_users_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("add user");?>" width="17" height="17" border="0" alt="add" /></a></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/vpn_pptp_users_edit.php b/src/usr/local/www/vpn_pptp_users_edit.php
new file mode 100644
index 0000000..8b09a7f
--- /dev/null
+++ b/src/usr/local/www/vpn_pptp_users_edit.php
@@ -0,0 +1,184 @@
+<?php
+/*
+ vpn_pptp_users_edit.php
+ part of m0n0wall (http://m0n0.ch/wall)
+ part of pfSense
+
+ Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-vpn-vpnpptp-user-edit
+##|*NAME=VPN: VPN PPTP: User: Edit page
+##|*DESCR=Allow access to the 'VPN: VPN PPTP: User: Edit' page.
+##|*MATCH=vpn_pptp_users_edit.php*
+##|-PRIV
+
+function pptpusercmp($a, $b) {
+ return strcasecmp($a['name'], $b['name']);
+}
+
+function pptpd_users_sort() {
+ global $config;
+
+ if (!is_array($config['ppptpd']['user']))
+ return;
+
+ usort($config['pptpd']['user'], "pptpusercmp");
+}
+
+require("guiconfig.inc");
+require_once("vpn.inc");
+
+if (!is_array($config['pptpd']['user'])) {
+ $config['pptpd']['user'] = array();
+}
+$a_secret = &$config['pptpd']['user'];
+
+if (is_numericint($_GET['id']))
+ $id = $_GET['id'];
+if (isset($_POST['id']) && is_numericint($_POST['id']))
+ $id = $_POST['id'];
+
+if (isset($id) && $a_secret[$id]) {
+ $pconfig['username'] = $a_secret[$id]['name'];
+ $pconfig['ip'] = $a_secret[$id]['ip'];
+}
+
+if ($_POST) {
+
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ /* input validation */
+ if (isset($id) && ($a_secret[$id])) {
+ $reqdfields = explode(" ", "username");
+ $reqdfieldsn = array(gettext("Username"));
+ } else {
+ $reqdfields = explode(" ", "username passwordfld1");
+ $reqdfieldsn = array(gettext("Username"),gettext("Password"));
+ }
+
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+
+ if (preg_match("/[^a-zA-Z0-9\.\-_]/", $_POST['username']))
+ $input_errors[] = gettext("The username contains invalid characters.");
+
+ if (preg_match("/^!/", $_POST['passwordfld1']))
+ $input_errors[] = gettext("The password cannot start with '!'.");
+
+ if (!preg_match("/^[\x20-\x7E]*$/", $_POST['passwordfld1']))
+ $input_errors[] = gettext("The password contains invalid characters.");
+
+ if (($_POST['passwordfld1']) && ($_POST['passwordfld1'] != $_POST['passwordfld2'])) {
+ $input_errors[] = gettext("The passwords do not match.");
+ }
+ if (($_POST['ip'] && !is_ipaddr($_POST['ip']))) {
+ $input_errors[] = gettext("The IP address entered is not valid.");
+ }
+
+ if (!$input_errors && !(isset($id) && $a_secret[$id])) {
+ /* make sure there are no dupes */
+ foreach ($a_secret as $secretent) {
+ if ($secretent['name'] == $_POST['username']) {
+ $input_errors[] = gettext("Another entry with the same username already exists.");
+ break;
+ }
+ }
+ }
+
+ if (!$input_errors) {
+
+ if (isset($id) && $a_secret[$id])
+ $secretent = $a_secret[$id];
+
+ $secretent['name'] = $_POST['username'];
+ $secretent['ip'] = $_POST['ip'];
+
+ if ($_POST['passwordfld1'])
+ $secretent['password'] = $_POST['passwordfld1'];
+
+ if (isset($id) && $a_secret[$id])
+ $a_secret[$id] = $secretent;
+ else
+ $a_secret[] = $secretent;
+ pptpd_users_sort();
+
+ write_config();
+ mark_subsystem_dirty('pptpusers');
+
+ header("Location: vpn_pptp_users.php");
+ exit;
+ }
+}
+
+$pgtitle = array(gettext("VPN"),gettext("VPN PPTP"),gettext("User"),gettext("Edit"));
+$shortcut_section = "pptps";
+include("head.inc");
+
+?>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+ <form action="vpn_pptp_users_edit.php" method="post" name="iform" id="iform">
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="vpn pptp users edit">
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Username");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>" />
+ </td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Password");?></td>
+ <td width="78%" class="vtable">
+ <?=$mandfldhtml;?><input name="passwordfld1" type="password" class="formfld pwd" id="passwordfld1" size="20" />
+ <br /><?=$mandfldhtml;?><input name="passwordfld2" type="password" class="formfld pwd" id="passwordfld2" size="20" />
+ &nbsp;(<?=gettext("confirmation");?>)<?php if (isset($id) && $a_secret[$id]): ?><br />
+ <span class="vexpl"><?=gettext("If you want to change the users' password, ".
+ "enter it here twice.");?></span><?php endif; ?></td>
+ </tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell"><?=gettext("IP address");?></td>
+ <td width="78%" class="vtable">
+ <input name="ip" type="text" class="formfld unknown" id="ip" size="20" value="<?=htmlspecialchars($pconfig['ip']);?>" />
+ <br /><span class="vexpl"><?=gettext("If you want the user to be assigned a specific IP address, enter it here.");?></span></td>
+ </tr>
+ <tr>
+ <td class="vncell" width="22%" valign="top">&nbsp;</td>
+ <td class="vncell" width="78%">
+ <input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" />
+ <?php if (isset($id) && $a_secret[$id]): ?>
+ <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
+ <?php endif; ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>
diff --git a/src/usr/local/www/widgets/include/captiveportal.inc b/src/usr/local/www/widgets/include/captiveportal.inc
new file mode 100644
index 0000000..3714209
--- /dev/null
+++ b/src/usr/local/www/widgets/include/captiveportal.inc
@@ -0,0 +1,4 @@
+<?php
+$captive_portal_status_title = "Captive Portal Status";
+$captive_portal_status_title_link = "status_captiveportal.php";
+?>
diff --git a/src/usr/local/www/widgets/include/carp_status.inc b/src/usr/local/www/widgets/include/carp_status.inc
new file mode 100644
index 0000000..79d3c03
--- /dev/null
+++ b/src/usr/local/www/widgets/include/carp_status.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$carp_status_title = "Carp Status";
+$carp_status_title_link = "carp_status.php";
+
+?>
diff --git a/src/usr/local/www/widgets/include/dyn_dns_status.inc b/src/usr/local/www/widgets/include/dyn_dns_status.inc
new file mode 100644
index 0000000..8116fe7
--- /dev/null
+++ b/src/usr/local/www/widgets/include/dyn_dns_status.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$dyn_dns_status_title = "Dyn DNS Status";
+$dyn_dns_status_title_link = "services_dyndns.php";
+
+?>
diff --git a/src/usr/local/www/widgets/include/gateways.inc b/src/usr/local/www/widgets/include/gateways.inc
new file mode 100644
index 0000000..4666689
--- /dev/null
+++ b/src/usr/local/www/widgets/include/gateways.inc
@@ -0,0 +1,5 @@
+<?php
+//set variable for custom title
+$gateways_title = "Gateways";
+$gateways_title_link = "status_gateways.php";
+?>
diff --git a/src/usr/local/www/widgets/include/gmirror_status.inc b/src/usr/local/www/widgets/include/gmirror_status.inc
new file mode 100644
index 0000000..6547d4d
--- /dev/null
+++ b/src/usr/local/www/widgets/include/gmirror_status.inc
@@ -0,0 +1,4 @@
+<?php
+$gmirror_status_title = "GEOM Mirror Status";
+$gmirror_status_title_link = "diag_gmirror.php";
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/installed_packages.inc b/src/usr/local/www/widgets/include/installed_packages.inc
new file mode 100644
index 0000000..a978191
--- /dev/null
+++ b/src/usr/local/www/widgets/include/installed_packages.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$installed_packages_title = "Installed Packages";
+$installed_packages_title_link = "pkg_mgr_installed.php";
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/interface_statistics.inc b/src/usr/local/www/widgets/include/interface_statistics.inc
new file mode 100644
index 0000000..c789418
--- /dev/null
+++ b/src/usr/local/www/widgets/include/interface_statistics.inc
@@ -0,0 +1,5 @@
+<?php
+//set variable for custom title
+$interface_statistics_title = "Interface Statistics";
+$interface_statistics_title_link = "status_interfaces.php";
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/interfaces.inc b/src/usr/local/www/widgets/include/interfaces.inc
new file mode 100644
index 0000000..6c19a6b
--- /dev/null
+++ b/src/usr/local/www/widgets/include/interfaces.inc
@@ -0,0 +1,6 @@
+<?php
+//set variable for custom title
+$interfaces_title = "Interfaces";
+$interfaces_title_link = "status_interfaces.php";
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/ipsec.inc b/src/usr/local/www/widgets/include/ipsec.inc
new file mode 100644
index 0000000..6df0a7c
--- /dev/null
+++ b/src/usr/local/www/widgets/include/ipsec.inc
@@ -0,0 +1,4 @@
+<?php
+$ipsec_title = "IPsec";
+$ipsec_title_link = "diag_ipsec.php";
+?>
diff --git a/src/usr/local/www/widgets/include/load_balancer.inc b/src/usr/local/www/widgets/include/load_balancer.inc
new file mode 100644
index 0000000..367ea46
--- /dev/null
+++ b/src/usr/local/www/widgets/include/load_balancer.inc
@@ -0,0 +1,4 @@
+<?php
+$load_balancer_status_title = "Load Balancer Status";
+$load_balancer_status_title_link = "status_lb_pool.php";
+?>
diff --git a/src/usr/local/www/widgets/include/log.inc b/src/usr/local/www/widgets/include/log.inc
new file mode 100644
index 0000000..7ad453a
--- /dev/null
+++ b/src/usr/local/www/widgets/include/log.inc
@@ -0,0 +1,6 @@
+<?php
+//set variable for custom title
+$log_title = "Firewall Logs";
+$log_title_link = "diag_logs_filter.php";
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/ntp_status.inc b/src/usr/local/www/widgets/include/ntp_status.inc
new file mode 100644
index 0000000..1115095
--- /dev/null
+++ b/src/usr/local/www/widgets/include/ntp_status.inc
@@ -0,0 +1,5 @@
+<?php
+//set variable for custom title
+$ntp_status_title = "NTP Status";
+$ntp_status_title_link = "status_ntpd.php";
+?>
diff --git a/src/usr/local/www/widgets/include/openvpn.inc b/src/usr/local/www/widgets/include/openvpn.inc
new file mode 100644
index 0000000..075d0e5
--- /dev/null
+++ b/src/usr/local/www/widgets/include/openvpn.inc
@@ -0,0 +1,4 @@
+<?php
+$openvpn_title = "OpenVPN";
+$openvpn_title_link = "status_openvpn.php";
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/services_status.inc b/src/usr/local/www/widgets/include/services_status.inc
new file mode 100644
index 0000000..685aee4
--- /dev/null
+++ b/src/usr/local/www/widgets/include/services_status.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$services_status_title = "Services Status";
+$services_status_title_link = "status_services.php";
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/include/smart_status.inc b/src/usr/local/www/widgets/include/smart_status.inc
new file mode 100644
index 0000000..bbfa274
--- /dev/null
+++ b/src/usr/local/www/widgets/include/smart_status.inc
@@ -0,0 +1,5 @@
+<?php
+//set variable for custom title
+$smart_status_title = "SMART Status";
+$smart_status_title_link = "diag_smart.php";
+?>
diff --git a/src/usr/local/www/widgets/include/thermal_sensors.inc b/src/usr/local/www/widgets/include/thermal_sensors.inc
new file mode 100644
index 0000000..a6e727a
--- /dev/null
+++ b/src/usr/local/www/widgets/include/thermal_sensors.inc
@@ -0,0 +1,27 @@
+<?php
+/*
+ $Id: thermal_sensors.inc
+ File location:
+ \usr\local\www\widgets\include\
+
+ Used by:
+ \usr\local\www\widgets\widgets\thermal_sensors.widget.php
+
+
+*/
+
+//set variable for custom title
+$thermal_sensors_widget_title = "Thermal Sensors";
+//$thermal_sensors_widget_link = "thermal_sensors.php";
+
+
+//returns core temp data (from coretemp.ko or amdtemp.ko driver) as "|"-delimited string.
+//NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
+function getThermalSensorsData() {
+
+ $_gb = exec("/sbin/sysctl -a | grep temperature", $dfout);
+ $thermalSensorsData = join("|", $dfout);
+ return $thermalSensorsData;
+
+}
+?>
diff --git a/src/usr/local/www/widgets/include/traffic_graph.inc b/src/usr/local/www/widgets/include/traffic_graph.inc
new file mode 100644
index 0000000..3901db6
--- /dev/null
+++ b/src/usr/local/www/widgets/include/traffic_graph.inc
@@ -0,0 +1,4 @@
+<?php
+$traffic_graphs_title = "Traffic Graphs";
+$traffic_graphs_title_link = "status_graph.php";
+?>
diff --git a/src/usr/local/www/widgets/include/wake_on_lan.inc b/src/usr/local/www/widgets/include/wake_on_lan.inc
new file mode 100644
index 0000000..af3229c
--- /dev/null
+++ b/src/usr/local/www/widgets/include/wake_on_lan.inc
@@ -0,0 +1,7 @@
+<?php
+
+//set variable for custom title
+$wake_on_lan_title = "Wake On Lan";
+$wake_on_lan_title_link = "services_wol.php";
+
+?> \ No newline at end of file
diff --git a/src/usr/local/www/widgets/javascript/cpu_graphs.js b/src/usr/local/www/widgets/javascript/cpu_graphs.js
new file mode 100644
index 0000000..1fc690a
--- /dev/null
+++ b/src/usr/local/www/widgets/javascript/cpu_graphs.js
@@ -0,0 +1,245 @@
+/******************************************************************************
+ $Id: graphlink.js,v 1.1 2006/12/21 17:10:25 dberlin Exp $
+
+ This file is part of the GraphLink software.
+ GraphLink is distributed under the MIT License.
+ Copyright (C) 2005-2006 Max Khitrov <max@mxsoft.org>
+ ******************************************************************************/
+
+/***** Global data ************************************************************/
+
+var gl_graphCount = 0; // Number of graphs on the current page
+
+/***** Constants **************************************************************/
+
+var GL_START = 0;
+var GL_END = 1;
+var GL_STATIC = 0;
+var GL_DYNAMIC = 1;
+
+/***** Public functions *******************************************************/
+
+/**
+ * Creates a graph and returns the graph data structure which can later be
+ * manipulated using the other graph functions.
+ *
+ * element_id - DOM element id (should be a DIV) that will contain the graph.
+ * width - The width of the graph in pixels.
+ * height - Height of the graph in pixels.
+ * bar_width - Width of each bar on the graph. This number should divide width
+ * evenly, or else width will be adjusted to meet this requirement.
+ * General formula to keep in mind:
+ * Smaller bar width = more bars = higher CPU usage on client-side.
+ *
+ * Returns graph data structure on success, false on error.
+ */
+function GraphInitialize(element_id, width, height, bar_width) {
+ // Find the page element which will contain the graph
+ var owner;
+ if((owner = jQuery('#' + element_id)) == null) {
+ alert("GraphLink Error: Element ID '" + element_id + "' not found.");
+ return false;
+ }
+
+ // Make sure width is divisible by bar_width
+ if(width / bar_width != Math.floor(width / bar_width))
+ width = Math.floor(width / bar_width) * bar_width;
+
+ var bar_count = width / bar_width;
+
+ // Create the graph data structure
+ var graph = new Array();
+ graph['id'] = gl_graphCount; // ID used to separate elements of one graph from those of another
+ graph['width'] = width; // Graph width
+ graph['height'] = height; // Graph height
+ graph['bar_count'] = bar_count; // Number of bars on the graph
+ graph['scale_type'] = GL_STATIC; // How the graph is scaled
+ graph['scale'] = 1; // Multiplier for the bar height
+ graph['max'] = 0; // Largest value currently on the graph
+ graph['vmax'] = height; // Virtual graph maximum
+ graph['spans'] = new Array(bar_count); // References to all the spans for each graph
+ graph['vals'] = new Array(bar_count); // The height of each bar on the graph, actually it's (graph height - bar height)
+ gl_graphCount++;
+
+ // Build the graph (x)html
+ var graph_html = '';
+ graph_html += '<div id="GraphLinkData' + graph['id'] + '" class="GraphLinkData">';
+
+ for(var i = 0; i < bar_count; i++) {
+ graph['vals'][i] = height;
+ graph_html += '<span id="GraphLinkBar' + graph['id'] + '_' + i + '" class="GraphLinkBar"></span>';
+ }
+
+ graph_html += '</div>';
+ owner.html(graph_html);
+ graph['element_id'] = jQuery('#GraphLinkData' + graph['id']);
+
+ for(i = 0; i < bar_count; i++) {
+ graph['spans'][i] = jQuery('#GraphLinkBar' + graph['id'] + '_' + i);
+ graph['spans'][i].css('width',bar_width + 'px');
+ graph['spans'][i].css('margin-top',height + 'px');
+ }
+
+ return graph;
+}
+
+/**
+ * Adds a new value to a graph.
+ *
+ * graph - Graph object to which to add the new value.
+ * value - Value to add.
+ * where - (optional) GL_START (0) or GL_END (1), depending on where you want
+ * the new value to appear. GL_START will add the value on the left
+ * of the graph, GL_END will add it on the right (default).
+ */
+function GraphValue(graph, value, where) {
+ if(typeof(where) == 'undefined')
+ where = GL_END;
+
+ var rescale = false;
+ var lost = 0;
+
+ if(value < 0)
+ value = 0;
+
+ if(graph['scale_type'] == GL_DYNAMIC && value > graph['max'])
+ rescale = true;
+
+ if(graph['scale_type'] == GL_STATIC) {
+ if(value > graph['vmax'])
+ value = graph['vmax'];
+ value = Math.round(value * graph['scale']);
+ }
+
+ if(where == GL_START) {
+ graph['vals'].unshift(graph['height'] - value);
+ lost = graph['vals'].pop();
+ }
+ else {
+ graph['vals'].push(graph['height'] - value);
+ lost = graph['vals'].shift();
+ }
+
+ if(graph['scale_type'] == GL_DYNAMIC && (graph['height'] - lost) == graph['max'])
+ rescale = true;
+
+ if(rescale)
+ GraphAdjustScale(graph)
+
+ GraphDraw(graph);
+}
+
+/**
+ * Sets a virtual maximum for the graph allowing you to have non-scaled graphs
+ * that can show a value greater then the graph height. This function will
+ * automatically set the graph to a static scale mode, meaning that no values
+ * above the maximum will be permitted. If you need to have a graph with no
+ * pre-defined maximum, make it dynamic. Also note that if you set a vmax on a
+ * graph that has data larger than vmax, that data will be reduced.
+ *
+ * graph - Graph object for which to set virtual max.
+ * vmax - The virtual maximum value for the graph.
+ */
+function GraphSetVMax(graph, vmax) {
+ graph['scale_type'] = GL_STATIC;
+ graph['vmax'] = vmax;
+
+ GraphAdjustScale(graph);
+ GraphDraw(graph);
+}
+
+/**
+ * This function instructs the graph to be scaled according to what the maximum
+ * value is. That value is used as the graph maximum and is reevaluated whenever
+ * a new value is added, or the current maximum is removed. Dynamic scaling is a
+ * good way of showing data for which you don't know what the maximum will be,
+ * but it also is a bit more resource-intensive then statically scaled graphs.
+ *
+ * graph - Graph object for which to enable dynamic scaling.
+ */
+function GraphDynamicScale(graph) {
+ graph['scale_type'] = GL_DYNAMIC;
+
+ GraphAdjustScale(graph);
+ GraphDraw(graph);
+}
+
+/***** Private functions ******************************************************/
+
+/**
+ * Checks if the current scale of the graph is still valid, or needs to be
+ * adjusted.
+ *
+ * graph - Graph object for which to check the scale.
+ */
+function GraphAdjustScale(graph) {
+ var limit = graph['bar_count'];
+ var new_max = 0;
+ var new_scale = 0;
+ var val = 0;
+
+ if(graph['scale_type'] == GL_STATIC) {
+ new_max = graph['vmax'];
+ new_scale = graph['height'] / new_max;
+
+ if(new_scale == graph['scale'])
+ return;
+ }
+
+ for(var i = 0; i < limit; i++) {
+ if(graph['scale_type'] == GL_STATIC) {
+ val = (graph['height'] - graph['vals'][i]) * graph['scale'];
+ val = val * new_scale;
+
+ if(val > new_max)
+ val = new_max;
+
+ graph['vals'][i] = graph['height'] - Math.round(val * new_scale);
+
+ }
+ else if((graph['height'] - graph['vals'][i]) > new_max) {
+ new_max = graph['height'] - graph['vals'][i];
+ }
+ }
+
+
+ if(graph['scale_type'] == GL_STATIC) {
+ graph['scale'] = new_scale;
+ }
+ else {
+ if(new_max == 0)
+ graph['scale'] = 1;
+ else
+ graph['scale'] = graph['height'] / new_max;
+
+ graph['max'] = new_max;
+ }
+}
+
+/**
+ * Redraws the graph on the screen.
+ *
+ * graph - Graph object which needs to be re-drawn.
+ */
+function GraphDraw(graph) {
+ var count = graph['bar_count'];
+
+ if(graph['scale_type'] == GL_STATIC)
+ var getMargin = function(i) {
+ return graph['vals'][i] + 'px';
+ };
+ else
+ var getMargin = function(i) {
+ var h = graph['height'];
+ var s = graph['scale'];
+ var v = graph['vals'][i];
+ return (h - Math.round((h - v) * s)) + 'px';
+ };
+
+ graph['spans'][count - 1].css("display", "none");
+
+ for(var i = 0; i < count; i++)
+ graph['spans'][i].css("marginTop", getMargin(i));
+
+// jQuery('#' + graph['spans'][count - 1]).fadeIn(500);
+}
diff --git a/src/usr/local/www/widgets/javascript/ipsec.js b/src/usr/local/www/widgets/javascript/ipsec.js
new file mode 100644
index 0000000..d38f6cd
--- /dev/null
+++ b/src/usr/local/www/widgets/javascript/ipsec.js
@@ -0,0 +1,9 @@
+function updateIpsec() {
+ selectIntLink = "ipsecDetailed";
+ ipsecsettings = "ipsecDetail=";
+ ipsecsettings += d.getElementById(selectIntLink).checked;
+
+ selectIntLink = "ipsec-config";
+ textlink = d.getElementById(selectIntLink);
+ textlink.value = ipsecsettings;
+} \ No newline at end of file
diff --git a/src/usr/local/www/widgets/javascript/thermal_sensors.js b/src/usr/local/www/widgets/javascript/thermal_sensors.js
new file mode 100644
index 0000000..7415b01
--- /dev/null
+++ b/src/usr/local/www/widgets/javascript/thermal_sensors.js
@@ -0,0 +1,296 @@
+/*
+ $Id: thermal_sensors.js
+ Description:
+ Javascript functions to get and show thermal sensors data in thermal_sensors.widget.php.
+ NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
+ File location:
+ \usr\local\www\widgets\javascript\
+ Used by:
+ \usr\local\www\widgets\widgets\thermal_sensors.widget.php
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+
+
+//should be called from "thermal_sensors.widget.php"
+function showThermalSensorsData() {
+
+ //get data from thermal_sensors.widget.php
+ url = "/widgets/widgets/thermal_sensors.widget.php?getThermalSensorsData=1"
+ //IE fix to disable cache when using http:// , just append timespan
+ + new Date().getTime();
+
+ jQuery.ajax(url, {
+ type: 'get',
+ success: function(data) {
+ var thermalSensorsData = data || "";
+ buildThermalSensorsData(thermalSensorsData);
+ },
+ error: function(jqXHR, status, error) {
+ buildThermalSensorsDataRaw(
+ "Error getting data from [thermal_sensors.widget.php] - |" +
+ "status: [" + (status || "") + "]|" +
+ "error: [" + (error || "") + "]");
+ }
+ });
+
+ //call itself in 11 seconds
+ window.setTimeout(showThermalSensorsData, 11000);
+}
+
+function buildThermalSensorsData(thermalSensorsData) {
+ //NOTE: variable thermal_sensors_widget_showRawOutput is declared/set in "thermal_sensors.widget.php"
+ if (thermal_sensors_widget_showRawOutput) {
+ buildThermalSensorsDataRaw(thermalSensorsData);
+ } else {
+ buildThermalSensorsDataGraph(thermalSensorsData);
+ }
+}
+
+function buildThermalSensorsDataRaw(thermalSensorsData) {
+
+ var thermalSensorsContent = "";
+
+ if (thermalSensorsData && thermalSensorsData != "") {
+ thermalSensorsContent = thermalSensorsData.replace(/\|/g, "<br />");
+ //rawData = thermalSensorsData.split("|").join("<br />");
+ }
+
+ loadThermalSensorsContainer(thermalSensorsContent);
+}
+
+function loadThermalSensorsContainer (thermalSensorsContent) {
+
+ if (thermalSensorsContent && thermalSensorsContent != "") {
+ //load generated graph (or raw data) into thermalSensorsContainer (thermalSensorsContainer DIV defined in "thermal_sensors.widget.php")
+ jQuery('#thermalSensorsContainer').html(thermalSensorsContent);
+ } else {
+ jQuery('#thermalSensorsContainer').html("No Thermal Sensors data available.<br /><br />");
+ jQuery('<div/>').html(
+ "<span>* You can configure a proper Thermal Sensor / Module under <br />" +
+ "&nbsp;&nbsp;&nbsp;<a href='system_advanced_misc.php'>System &gt; Advanced &gt; Miscellaneous : Thermal Sensors section</a>.</span>"
+ ).appendTo('#thermalSensorsContainer');
+ }
+}
+
+function buildThermalSensorsDataGraph(thermalSensorsData) {
+
+ //local constants
+ var normalColor = "LimeGreen";
+ var normalColorShadowTop = "Lime";
+ var normalColorShadowBottom = "Green";
+
+ var warningColor = "Orange";
+ var warningColorShadowBottom = "Chocolate";
+
+ var criticalColor = "Red";
+ var criticalColorShadowBottom = "DarkRed";
+
+ //local variables
+ var barBgColor = normalColor; //green/normal as default
+ var barBgColorShadowTop = normalColorShadowTop; //green/normal as default
+ var barBgColorShadowBottom = normalColorShadowBottom; //green/normal as default
+
+ var thermalSensorsArray = new Array();
+
+ if (thermalSensorsData && thermalSensorsData != "") {
+ thermalSensorsArray = thermalSensorsData.split("|");
+ }
+
+ var thermalSensorsHTMLContent = "";
+ var itemsToPulsate = new Array();
+
+ //generate graph for each temperature sensor and append to thermalSensorsHTMLContent string
+ for (var i = 0; i < thermalSensorsArray.length; i++) {
+
+ var sensorDataArray = thermalSensorsArray[i].split(":");
+ var sensorName = sensorDataArray[0].trim();
+ var thermalSensorValue = getThermalSensorValue(sensorDataArray[1]);
+
+ var pulsateTimes = 0;
+ var pulsateDuration = 0;
+
+ var warningTempThresholdPosition = 0;
+ var criticalTempThresholdPosition = 0;
+
+ //NOTE: the following variables are declared/set in "thermal_sensors.widget.php":
+ // thermal_sensors_widget_coreWarningTempThreshold, thermal_sensors_widget_coreCriticalTempThreshold,
+ // thermal_sensors_widget_zoneWarningTempThreshold, thermal_sensors_widget_zoneCriticalTempThreshold
+ // thermal_sensors_widget_pulsateWarning, thermal_sensors_widget_pulsateCritical
+
+ //set graph color and pulsate parameters
+ if (sensorName.indexOf("cpu") > -1) { //check CPU Threshold config settings
+
+ warningTempThresholdPosition = thermal_sensors_widget_coreWarningTempThreshold;
+ criticalTempThresholdPosition = thermal_sensors_widget_coreCriticalTempThreshold;
+
+ if (thermalSensorValue < thermal_sensors_widget_coreWarningTempThreshold) {
+ barBgColor = normalColor;
+ barBgColorShadowTop = normalColorShadowTop;
+ barBgColorShadowBottom = normalColorShadowBottom;
+ pulsateTimes = 0;
+ pulsateDuration = 0;
+ } else if (thermalSensorValue >= thermal_sensors_widget_coreWarningTempThreshold && thermalSensorValue < thermal_sensors_widget_coreCriticalTempThreshold) {
+ barBgColor = warningColor;
+ barBgColorShadowTop = warningColor;
+ barBgColorShadowBottom = warningColorShadowBottom;
+ pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0;
+ pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0;
+ } else { // thermalSensorValue > thermal_sensors_widget_coreCriticalTempThreshold
+ barBgColor = criticalColor;
+ barBgColorShadowTop = criticalColor;
+ barBgColorShadowBottom = criticalColorShadowBottom;
+ pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0;
+ pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0;
+ }
+ } else { //assuming sensor is for a zone, check Zone Threshold config settings
+
+ warningTempThresholdPosition = thermal_sensors_widget_zoneWarningTempThreshold;
+ criticalTempThresholdPosition = thermal_sensors_widget_zoneCriticalTempThreshold;
+
+ if (thermalSensorValue < thermal_sensors_widget_zoneWarningTempThreshold) {
+
+ barBgColor = normalColor;
+ barBgColorShadowTop = normalColorShadowTop;
+ barBgColorShadowBottom = normalColorShadowBottom;
+ pulsateTimes = 0;
+ pulsateDuration = 0;
+
+ } else if (thermalSensorValue >= thermal_sensors_widget_zoneWarningTempThreshold &&
+ thermalSensorValue < thermal_sensors_widget_zoneCriticalTempThreshold) {
+
+ barBgColor = warningColor;
+ barBgColorShadowTop = warningColor;
+ barBgColorShadowBottom = warningColorShadowBottom;
+ pulsateTimes = thermal_sensors_widget_pulsateWarning ? 4 : 0;
+ pulsateDuration = thermal_sensors_widget_pulsateWarning ? 900 : 0;
+
+ } else { // thermalSensorValue > thermal_sensors_widget_zoneCriticalTempThreshold
+
+ barBgColor = criticalColor;
+ barBgColorShadowTop = criticalColor;
+ barBgColorShadowBottom = criticalColorShadowBottom;
+ pulsateTimes = thermal_sensors_widget_pulsateCritical ? 7 : 0;
+ pulsateDuration = thermal_sensors_widget_pulsateCritical ? 900 : 0;
+ }
+ }
+
+ //NOTE: variable thermal_sensors_widget_showFullSensorName is declared/set in "thermal_sensors.widget.php"
+ if (!thermal_sensors_widget_showFullSensorName) {
+ sensorName = getSensorFriendlyName(sensorName);
+ }
+
+ //build temperature item/row for a sensor
+ //NOTE: additional styles are set in 'thermal_sensors.widget.php'
+ var thermalSensorRow = "<div class='thermalSensorRow' id='thermalSensorRow" + i + "' >" +
+ //sensor name and temperature value
+ " <div class='thermalSensorTextShell'><div class='thermalSensorText' id='thermalSensorText" + i + "'>" + sensorName + ": </div><div class='thermalSensorValue' id='thermalSensorValue" + i + "'>" + thermalSensorValue + " &deg;C</div></div>" +
+ //temperature bar
+ " <div class='thermalSensorBarShell' id='thermalSensorBarShell" + i + "' >" +
+ " <div class='thermalSensorBar' id='thermalSensorBar" + i + "' style='background-color: " + barBgColor + "; border-top-color: " + barBgColorShadowTop + "; border-bottom-color: " + barBgColorShadowBottom + "; width:" + thermalSensorValue + "%;' ></div>" +
+ //threshold targets (warning and critical)
+ " <div class='thermalSensorWarnThresh' id='thermalSensorWarnThresh" + i + "' style='left:" + warningTempThresholdPosition + "%;' ></div>" +
+ " <div class='thermalSensorCritThresh' id='thermalSensorCritThresh" + i + "' style='left:" + criticalTempThresholdPosition + "%;' ></div>" +
+ //temperature scale (max 100 C)
+ " <div class='thermal_sensors_widget_scale000'></div>" +
+ " <div class='thermal_sensors_widget_scale010'></div>" +
+ " <div class='thermal_sensors_widget_scale020'></div>" +
+ " <div class='thermal_sensors_widget_scale030'></div>" +
+ " <div class='thermal_sensors_widget_scale040'></div>" +
+ " <div class='thermal_sensors_widget_scale050'></div>" +
+ " <div class='thermal_sensors_widget_scale060'></div>" +
+ " <div class='thermal_sensors_widget_scale070'></div>" +
+ " <div class='thermal_sensors_widget_scale080'></div>" +
+ " <div class='thermal_sensors_widget_scale090'></div>" +
+ " <div class='thermal_sensors_widget_scale100'></div>" +
+ " <div class='thermal_sensors_widget_mark100'>100&deg;</div>" +
+ " </div>" +
+ "</div>";
+
+ //collect parameters for warning/critical items we need to pulsate
+ if (pulsateTimes > 0) {
+ var params = i + "|" + barBgColor + "|" + pulsateTimes + "|" + pulsateDuration;
+ itemsToPulsate.push(params);
+ }
+
+ //append HTML item
+ thermalSensorsHTMLContent = thermalSensorsHTMLContent + thermalSensorRow;
+ }
+
+ //load generated graph into thermalSensorsContainer (DIV defined in "thermal_sensors.widget.php")
+ loadThermalSensorsContainer(thermalSensorsHTMLContent);
+
+ if (itemsToPulsate.length > 0) {
+ //pulsate/flash warning/critical items we collected
+ pulsateThermalSensorsItems(itemsToPulsate);
+ }
+}
+
+function pulsateThermalSensorsItems(itemsToPulsate) {
+
+ //pulsate/flash warning/critical items we collected
+ for (var i = 0; i < itemsToPulsate.length; i++) {
+
+ var pulsateParams = itemsToPulsate[i].split("|");
+ var rowNum = parseInt(pulsateParams[0]);
+ //var textColor = pulsateParams[1];
+ var pulsateTimes = parseInt(pulsateParams[2]);
+ var pulsateDuration = parseInt(pulsateParams[3]);
+
+ //pulsate temp Value
+ var divThermalSensorValue = jQuery("#thermalSensorValue" + rowNum); //get temp value by id
+ divThermalSensorValue.effect("pulsate", {
+ times: pulsateTimes,
+ easing: 'linear' //'easeInExpo'
+ }, pulsateDuration);
+ ////set Temp Value color
+ //divThermalSensorValue.css({ color: textColor });
+
+ //pulsate temp Bar
+ var divThermalSensorBar = jQuery("#thermalSensorBar" + rowNum); //get temp bar by id
+ divThermalSensorBar.effect("pulsate", {
+ times: pulsateTimes,
+ easing: 'linear' //'easeInExpo'
+ }, pulsateDuration);
+
+ }
+}
+
+function getSensorFriendlyName(sensorFullName) {
+ var rzone = /^hw\.acpi\.thermal\.tz([0-9]+)\.temperature$/;
+ var rcore = /^dev\.cpu\.([0-9]+)\.temperature$/;
+
+ if (rzone.test(sensorFullName)) {
+ return "Zone " + rzone.exec(sensorFullName)[1];
+ }
+
+ if (rcore.test(sensorFullName)) {
+ return "Core " + rcore.exec(sensorFullName)[1];
+ }
+
+ return sensorFullName;
+}
+
+function getThermalSensorValue(stringValue) {
+ return (+parseFloat(stringValue) || 0).toFixed(1);
+}
diff --git a/src/usr/local/www/widgets/javascript/traffic_graph.js b/src/usr/local/www/widgets/javascript/traffic_graph.js
new file mode 100644
index 0000000..383a549
--- /dev/null
+++ b/src/usr/local/www/widgets/javascript/traffic_graph.js
@@ -0,0 +1,41 @@
+function trafficshowDiv(incDiv,ifDescription,refreshIntervalSec,swapButtons) {
+ // put the graph object HTML in the element and make it appear
+ selectedDiv = incDiv + "graphdiv";
+ jQuery('#' + selectedDiv).html(
+ '<object data="graph.php?ifnum=' + incDiv + '&amp;ifname=' + ifDescription + '&amp;timeint=' + refreshIntervalSec + '&amp;initdelay=0" height="100%" width="100%">' +
+ '<param name="id" value="graph" />' +
+ '<param name="type" value="image/svg+xml" />' +
+ '<param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />' +
+ '</object>');
+ jQuery('#' + selectedDiv).effect('blind',{mode:'show'},1000);
+ d = document;
+ if (swapButtons) {
+ selectIntLink = selectedDiv + "-min";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+
+ selectIntLink = selectedDiv + "-open";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "none";
+ }
+ document.traffic_graphs_widget_iform["shown[" + incDiv + "]"].value = "show";
+}
+
+function trafficminimizeDiv(incDiv,swapButtons) {
+ // remove the graph object HTML from the element (so it does not keep using CPU) and fade
+ selectedDiv = incDiv + "graphdiv";
+ jQuery('#' + selectedDiv).html('');
+ jQuery('#' + selectedDiv).effect('blind',{mode:'hide'},1000);
+ d = document;
+ if (swapButtons) {
+ selectIntLink = selectedDiv + "-open";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+
+ selectIntLink = selectedDiv + "-min";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "none";
+ }
+ document.traffic_graphs_widget_iform["shown[" + incDiv + "]"].value = "hide";
+}
+
diff --git a/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php
new file mode 100644
index 0000000..21c44e3
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php
@@ -0,0 +1,146 @@
+<?php
+/*
+ captive_portal_status.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright (C) 2007 Sam Wenham
+ All rights reserved.
+
+ status_captiveportal.php
+ part of m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("globals.inc");
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("captiveportal.inc");
+
+?>
+
+<?php
+
+if (!is_array($config['captiveportal'])) {
+ $config['captiveportal'] = array();
+}
+$a_cp =& $config['captiveportal'];
+
+$cpzone = $_GET['zone'];
+if (isset($_POST['zone'])) {
+ $cpzone = $_POST['zone'];
+}
+
+if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
+ $cpzoneid = $a_cp[$cpzone]['zoneid'];
+}
+
+if (($_GET['act'] == "del") && !empty($cpzone) && isset($cpzoneid)) {
+ captiveportal_disconnect_client($_GET['id']);
+}
+unset($cpzone);
+
+flush();
+
+function clientcmp($a, $b) {
+ global $order;
+ return strcmp($a[$order], $b[$order]);
+}
+
+$cpdb_all = array();
+
+$showact = isset($_GET['showact']) ? 1 : 0;
+
+foreach ($a_cp as $cpzone => $cp) {
+ $cpdb = captiveportal_read_db();
+ foreach ($cpdb as $cpent) {
+ $cpent[10] = $cpzone;
+ if ($showact == 1) {
+ $cpent[11] = captiveportal_get_last_activity($cpent[2], $cpentry[3]);
+ }
+ $cpdb_all[] = $cpent;
+ }
+}
+
+if ($_GET['order']) {
+ if ($_GET['order'] == "ip") {
+ $order = 2;
+ } else if ($_GET['order'] == "mac") {
+ $order = 3;
+ } else if ($_GET['order'] == "user") {
+ $order = 4;
+ } else if ($_GET['order'] == "lastact") {
+ $order = 5;
+ } else if ($_GET['order'] == "zone") {
+ $order = 10;
+ } else {
+ $order = 0;
+ }
+ usort($cpdb_all, "clientcmp");
+}
+?>
+<table class="sortable" id="sortabletable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="captive portal status">
+ <tr>
+ <td class="listhdrr"><a href="?order=ip&amp;showact=<?=$showact;?>">IP address</a></td>
+ <td class="listhdrr"><a href="?order=mac&amp;showact=<?=$showact;?>">MAC address</a></td>
+ <td class="listhdrr"><a href="?order=user&amp;showact=<?=$showact;?>"><?=gettext("Username");?></a></td>
+<?php
+ if ($showact == 1):
+?>
+ <td class="listhdrr"><a href="?order=start&amp;showact=<?=$showact;?>"><?=gettext("Session start");?></a></td>
+ <td class="listhdrr"><a href="?order=start&amp;showact=<?=$showact;?>"><?=gettext("Last activity");?></a></td>
+<?php
+ endif;
+?>
+ </tr>
+<?php
+foreach ($cpdb_all as $cpent):
+?>
+ <tr>
+ <td class="listlr"><?=$cpent[2];?></td>
+ <td class="listr"><?=$cpent[3];?>&nbsp;</td>
+ <td class="listr"><?=$cpent[4];?>&nbsp;</td>
+<?php
+ if ($showact == 1):
+?>
+ <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
+ <td class="listr"><?php if ($cpent[11] && ($cpent[11] > 0)) echo htmlspecialchars(date("m/d/Y H:i:s", $cpent[11]));?></td>
+<?php
+ endif;
+?>
+ <td valign="middle" class="list nowrap">
+ <a href="?order=<?=htmlspecialchars($_GET['order']);?>&amp;showact=<?=$showact;?>&amp;act=del&amp;zone=<?=$cpent[10];?>&amp;id=<?=$cpent[5];?>" onclick="return confirm('Do you really want to disconnect this client?')">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="x" />
+ </a>
+ </td>
+ </tr>
+<?php
+endforeach;
+?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/carp_status.widget.php b/src/usr/local/www/widgets/widgets/carp_status.widget.php
new file mode 100644
index 0000000..bb68dbd
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/carp_status.widget.php
@@ -0,0 +1,85 @@
+<?php
+/*
+ $Id$
+ carp_status.widget.php
+ Copyright (C) 2007 Sam Wenham
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/carp_status.inc");
+
+$carp_enabled = get_carp_status();
+
+?>
+<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="carp status">
+<?php
+ if (is_array($config['virtualip']['vip'])) {
+ $carpint=0;
+ foreach ($config['virtualip']['vip'] as $carp) {
+ if ($carp['mode'] != "carp") {
+ continue;
+ }
+ $ipaddress = $carp['subnet'];
+ $password = $carp['password'];
+ $netmask = $carp['subnet_bits'];
+ $vhid = $carp['vhid'];
+ $advskew = $carp['advskew'];
+ $status = get_carp_interface_status("_vip{$carp['uniqid']}");
+?>
+<tr>
+ <td class="vncellt" width="35%">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_cablenic.gif" alt="cablenic" />&nbsp;
+ <strong><a href="/system_hasync.php">
+ <span style="color:#000000"><?=htmlspecialchars(convert_friendly_interface_to_friendly_descr($carp['interface']) . "@{$vhid}");?></span></a></strong>
+ </td>
+ <td width="65%" class="listr">
+<?php
+ if ($carp_enabled == false) {
+ $status = "DISABLED";
+ echo "<img src='/themes/".$g['theme']."/images/icons/icon_block.gif' title=\"$status\" alt=\"$status\" />";
+ } else {
+ if($status == "MASTER") {
+ echo "<img src='/themes/".$g['theme']."/images/icons/icon_pass.gif' title=\"$status\" alt=\"$status\" />";
+ } else if($status == "BACKUP") {
+ echo "<img src='/themes/".$g['theme']."/images/icons/icon_pass_d.gif' title=\"$status\" alt=\"$status\" />";
+ } else if($status == "INIT") {
+ echo "<img src='/themes/".$g['theme']."/images/icons/icon_log.gif' title=\"$status\" alt=\"$status\" />";
+ }
+ }
+ if ($ipaddress){ ?> &nbsp;
+ <?=htmlspecialchars($status);?> &nbsp;
+ <?=htmlspecialchars($ipaddress);}?>
+</td></tr><?php }
+ } else { ?>
+ <tr><td class="listr">No CARP Interfaces Defined. Click <a href="carp_status.php">here</a> to configure CARP.</td></tr>
+<?php } ?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php b/src/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php
new file mode 100644
index 0000000..09723d7
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/deactivated/cpu_graphs.widget.php
@@ -0,0 +1,76 @@
+<?php
+/*
+ $Id$
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+?>
+<link href="/themes/<?=$g['theme'];?>/graphlink.css" rel="stylesheet" type="text/css" />
+<script src="/widgets/javascript/cpu_graphs.js" type="text/javascript"></script>
+<script type="text/javascript">
+ /* initialize the graph */
+ // --- Global Data --- //
+ var graphs; // An array that stores all created graphs
+ var graph_dir; // The direction in which each graph moves
+ var last_val; // An array of values for each graph
+ var last_val_span; // References to Last Value span tags for each graph
+ var pause; // Controls execution
+
+ var ajaxStarted = false;
+
+ /**
+ * Launches the GraphLink demo. It initializes the graph along with the ajax
+ * engine and starts the main execution loop.
+ */
+ graph = new Array();
+ graph_dir = new Array();
+ last_val = new Array();
+ last_val_span = new Array();
+</script>
+<div style='display: block; margin-left: auto; margin-right: auto' class="GraphLink" id="GraphOutput"></div>
+<script type="text/javascript">
+
+ // Graph 1
+ graph[0] = GraphInitialize('GraphOutput', 200, 50, 4);
+ graph_dir[0] = GL_END;
+ last_val[0] = Math.floor(Math.random() * 50);
+ last_val_span[0] = document.getElementById('LastValue0');
+
+ GraphSetVMax(graph[0], 100);
+ GraphDynamicScale(graph[0]);
+
+</script>
diff --git a/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php b/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php
new file mode 100644
index 0000000..c2eee76
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php
@@ -0,0 +1,174 @@
+<?php
+/*
+ Original status page code from: services_dyndns.php
+ Copyright (C) 2008 Ermal Luçi
+ Edits to convert it to a widget: dyn_dns_status.widget.php
+ Copyright (C) 2013 Stanley P. Miller \ stan-qaz
+ All rights reserved.
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /usr/bin/host
+ pfSense_MODULE: dyndns
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/dyn_dns_status.inc");
+
+if (!is_array($config['dyndnses']['dyndns'])) {
+ $config['dyndnses']['dyndns'] = array();
+}
+
+$a_dyndns = &$config['dyndnses']['dyndns'];
+
+if ($_REQUEST['getdyndnsstatus']) {
+ $first_entry = true;
+ foreach ($a_dyndns as $dyndns) {
+ if ($first_entry) {
+ $first_entry = false;
+ } else {
+ // Put a vertical bar delimiter between the echoed HTML for each entry processed.
+ echo "|";
+ }
+
+ $filename = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($dyndns['host']) . "{$dyndns['id']}.cache";
+ if (file_exists($filename)) {
+ $ipaddr = dyndnsCheckIP($dyndns['interface']);
+ $cached_ip_s = explode(':', file_get_contents($filename));
+ $cached_ip = $cached_ip_s[0];
+ if ($ipaddr <> $cached_ip) {
+ echo "<font color='red'>";
+ } else {
+ echo "<font color='green'>";
+ }
+ echo htmlspecialchars($cached_ip);
+ echo "</font>";
+ } else {
+ echo "N/A " . date("H:i:s");
+ }
+ }
+ exit;
+}
+
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="5%" class="listhdrr"><?=gettext("Int.");?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Service");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
+ <td width="20%" class="listhdrr"><?=gettext("Cached IP");?></td>
+ </tr>
+ <?php $i = 0; foreach ($a_dyndns as $dyndns): ?>
+ <tr ondblclick="document.location='services_dyndns_edit.php?id=<?=$i;?>'">
+ <td class="listlr">
+ <?php $iflist = get_configured_interface_with_descr();
+ foreach ($iflist as $if => $ifdesc) {
+ if ($dyndns['interface'] == $if) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">{$ifdesc}</span>";
+ } else {
+ echo "{$ifdesc}";
+ }
+ break;
+ }
+ }
+ $groupslist = return_gateway_groups_array();
+ foreach ($groupslist as $if => $group) {
+ if ($dyndns['interface'] == $if) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">{$if}</span>";
+ } else {
+ echo "{$if}";
+ }
+ break;
+ }
+ }
+ ?>
+ </td>
+ <td class="listr">
+ <?php
+ $types = explode(",", DYNDNS_PROVIDER_DESCRIPTIONS);
+ $vals = explode(" ", DYNDNS_PROVIDER_VALUES);
+ for ($j = 0; $j < count($vals); $j++) {
+ if ($vals[$j] == $dyndns['type']) {
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">".htmlspecialchars($types[$j])."</span>";
+ } else {
+ echo htmlspecialchars($types[$j]);
+ }
+ break;
+ }
+ }
+ ?>
+ </td>
+ <td class="listr">
+ <?php
+ if (!isset($dyndns['enable'])) {
+ echo "<span class=\"gray\">".htmlspecialchars($dyndns['host'])."</span>";
+ } else {
+ echo htmlspecialchars($dyndns['host']);
+ }
+ ?>
+ </td>
+ <td class="listr">
+ <div id='dyndnsstatus<?php echo $i; ?>'><?php echo gettext("Checking ..."); ?></div>
+ </td>
+ </tr>
+ <?php $i++; endforeach; ?>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+ function dyndns_getstatus() {
+ scroll(0,0);
+ var url = "/widgets/widgets/dyn_dns_status.widget.php";
+ var pars = 'getdyndnsstatus=yes';
+ jQuery.ajax(
+ url,
+ {
+ type: 'get',
+ data: pars,
+ complete: dyndnscallback
+ });
+ // Refresh the status every 5 minutes
+ setTimeout('dyndns_getstatus()', 5*60*1000);
+ }
+ function dyndnscallback(transport) {
+ // The server returns a string of statuses separated by vertical bars
+ var responseStrings = transport.responseText.split("|");
+ for (var count=0; count<responseStrings.length; count++) {
+ var divlabel = '#dyndnsstatus' + count;
+ jQuery(divlabel).prop('innerHTML',responseStrings[count]);
+ }
+ }
+ // Do the first status check 2 seconds after the dashboard opens
+ setTimeout('dyndns_getstatus()', 2000);
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/gateways.widget.php b/src/usr/local/www/widgets/widgets/gateways.widget.php
new file mode 100644
index 0000000..26a6f4d
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/gateways.widget.php
@@ -0,0 +1,227 @@
+<?php
+/*
+ gateways.widget.php
+ Copyright 2008 Seth Mos
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/gateways.inc");
+
+if ($_POST) {
+ if (!is_array($config["widgets"]["gateways_widget"])) {
+ $config["widgets"]["gateways_widget"] = array();
+ }
+ if (isset($_POST["display_type"])) {
+ $config["widgets"]["gateways_widget"]["display_type"] = $_POST["display_type"];
+ }
+ write_config("Updated gateways widget settings via dashboard.");
+ header("Location: /");
+ exit(0);
+}
+
+if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
+ $display_type = $config["widgets"]["gateways_widget"]["display_type"];
+} else {
+ $display_type = "gw_ip";
+}
+
+$a_gateways = return_gateways_array();
+$gateways_status = array();
+$gateways_status = return_gateways_status(true);
+
+$counter = 1;
+
+?>
+
+<input type="hidden" id="gateways-config" name="gateways-config" value="" />
+
+<div id="gateways-settings" class="widgetconfigdiv" style="display:none;">
+<form action="/widgets/widgets/gateways.widget.php" method="post" name="gateways_widget_iform" id="gateways_widget_iform">
+ Display:
+ <?php
+ $display_type_gw_ip="checked=\"checked\"";
+ $display_type_monitor_ip="";
+ $display_type_both_ip="";
+ if (isset($config["widgets"]["gateways_widget"]["display_type"])) {
+ $selected_radio = $config["widgets"]["gateways_widget"]["display_type"];
+ if ($selected_radio == "gw_ip") {
+ $display_type_gw_ip = "checked=\"checked\"";
+ $display_type_monitor_ip="";
+ $display_type_both_ip="";
+ } else if ($selected_radio == "monitor_ip") {
+ $display_type_gw_ip = "";
+ $display_type_monitor_ip="checked=\"checked\"";
+ $display_type_both_ip="";
+ } else if ($selected_radio == "both_ip") {
+ $display_type_gw_ip = "";
+ $display_type_monitor_ip="";
+ $display_type_both_ip="checked=\"checked\"";
+ }
+ }
+ ?>
+ <input name="display_type" class="radio" type="radio" id="display_type_gw_ip" value="gw_ip" <?php echo $display_type_gw_ip; ?> onchange="updateGatewayDisplays();" /> <span>Gateway IP</span>
+ <input name="display_type" class="radio" type="radio" id="display_type_monitor_ip" value="monitor_ip" <?php echo $display_type_monitor_ip; ?> onchange="updateGatewayDisplays();" /> <span>Monitor IP</span>
+ <input name="display_type" class="radio" type="radio" id="display_type_both_ip" value="both_ip" <?php echo $display_type_both_ip; ?> onchange="updateGatewayDisplays();" /> <span>Both</span>
+ <br /><br />
+ <input id="submit_settings" name="submit_settings" type="submit" onclick="return updatePref();" class="formbtn" value="Save Settings" />
+</form>
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+ d = document;
+ selectIntLink = "gateways-configure";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
+
+<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="gateway status">
+ <tr>
+ <td class="listhdrr" id="gatewayname" align="center">Name</td>
+ <td class="listhdrr" align="center">RTT</td>
+ <td class="listhdrr" align="center">Loss</td>
+ <td class="listhdrr" align="center">Status</td>
+ </tr>
+ <?php foreach ($a_gateways as $gname => $gateway) { ?>
+ <tr>
+ <td class="listhdrr" id="gateway<?php echo $counter; ?>" rowspan="2" align="center">
+ <strong>
+ <?php echo htmlspecialchars($gateway['name']); ?>
+ </strong>
+ <?php $counter++; ?>
+ </td>
+ <td colspan="3" class="listr ellipsis" align="center">
+ <div id="gateway<?php echo $counter; ?>" style="display:inline"><b>
+ <?php
+ $monitor_address = "";
+ $monitor_address_disp = "";
+ if ($display_type == "monitor_ip" || $display_type == "both_ip") {
+ $monitor_address = $gateway['monitor'];
+ if ($monitor_address != "" && $display_type == "both_ip") {
+ $monitor_address_disp = " (" . $monitor_address . ")";
+ } else {
+ $monitor_address_disp = $monitor_address;
+ }
+ }
+ $if_gw = '';
+ // If the user asked to display Gateway IP or both IPs, or asked for just monitor IP but the monitor IP is blank
+ // then find the gateway IP (which is also the monitor IP if the monitor IP was not explicitly set).
+ if ($display_type == "gw_ip" || $display_type == "both_ip" || ($display_type == "monitor_ip" && $monitor_address == "")) {
+ if (is_ipaddr($gateway['gateway'])) {
+ $if_gw = htmlspecialchars($gateway['gateway']);
+ } else {
+ if ($gateway['ipprotocol'] == "inet") {
+ $if_gw = htmlspecialchars(get_interface_gateway($gateway['friendlyiface']));
+ }
+ if ($gateway['ipprotocol'] == "inet6") {
+ $if_gw = htmlspecialchars(get_interface_gateway_v6($gateway['friendlyiface']));
+ }
+ }
+ if ($if_gw == "") {
+ $if_gw = "~";
+ }
+ }
+ if ($monitor_address == $if_gw) {
+ $monitor_address_disp = "";
+ }
+ echo $if_gw . $monitor_address_disp;
+ unset ($if_gw);
+ unset ($monitor_address);
+ unset ($monitor_address_disp);
+ $counter++;
+ ?>
+ </b></div>
+ </td>
+ </tr>
+ <tr>
+ <td class="listr ellipsis" align="center" id="gateway<?php echo $counter; ?>">
+ <?php
+ if ($gateways_status[$gname]) {
+ echo htmlspecialchars($gateways_status[$gname]['delay']);
+ } else {
+ echo gettext("Pending");
+ }
+ ?>
+ <?php $counter++; ?>
+ </td>
+ <td class="listr ellipsis" align="center" id="gateway<?php echo $counter; ?>">
+ <?php
+ if ($gateways_status[$gname]) {
+ echo htmlspecialchars($gateways_status[$gname]['loss']);
+ } else {
+ echo gettext("Pending");
+ }
+ ?>
+ <?php $counter++; ?>
+ </td>
+ <?php
+ if ($gateways_status[$gname]) {
+ if (stristr($gateways_status[$gname]['status'], "force_down")) {
+ $online = "Offline (forced)";
+ $bgcolor = "#F08080"; // lightcoral
+ } elseif (stristr($gateways_status[$gname]['status'], "down")) {
+ $online = "Offline";
+ $bgcolor = "#F08080"; // lightcoral
+ } elseif (stristr($gateways_status[$gname]['status'], "loss")) {
+ $online = "Packetloss";
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif (stristr($gateways_status[$gname]['status'], "delay")) {
+ $online = "Latency";
+ $bgcolor = "#F0E68C"; // khaki
+ } elseif ($gateways_status[$gname]['status'] == "none") {
+ $online = "Online";
+ $bgcolor = "#90EE90"; // lightgreen
+ } elseif ($gateways_status[$gname]['status'] == "") {
+ $online = "Pending";
+ $bgcolor = "#D3D3D3"; // lightgray
+ }
+ } else {
+ $online = gettext("Unknown");
+ $bgcolor = "#ADD8E6"; // lightblue
+ }
+ echo "<td class=\"listr ellipsis\" align=\"center\" id=\"gateway$counter\">$online</td>\n";
+ ?>
+ <td style="display:none;">
+ <script type="text/javascript">
+ //<![CDATA[
+ jQuery('#gateway<?php echo $counter;?>').css('background-color',"<?php echo $bgcolor;?>");
+ //]]>
+ </script>
+ </td>
+ <?php
+ $counter++;
+ ?>
+ </tr>
+ <?php } // foreach ?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/gmirror_status.widget.php b/src/usr/local/www/widgets/widgets/gmirror_status.widget.php
new file mode 100644
index 0000000..59e7f16
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/gmirror_status.widget.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ gmirror_status.widget.php
+ Copyright (C) 2009-2010 Jim Pingle
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("gmirror.inc");
+
+if ($_GET['textonly'] == "true") {
+ header("Cache-Control: no-cache");
+ echo gmirror_html_status();
+ exit;
+}
+?>
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="gmirror status">
+ <tbody id="gmirror_status_table">
+ <?php echo gmirror_html_status(); ?>
+ </tbody>
+</table>
+
+<script type="text/javascript">
+//<![CDATA[
+ var gmirrorupdater = new Ajax.PeriodicalUpdater('gmirror_status_table', '/widgets/widgets/gmirror_status.widget.php?textonly=true',
+ { method: 'get', frequency: 5 } );
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/installed_packages.widget.php b/src/usr/local/www/widgets/widgets/installed_packages.widget.php
new file mode 100644
index 0000000..3190e1b
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/installed_packages.widget.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ installed_packages.widget.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/installed_packages.inc");
+require_once("pkg-utils.inc");
+
+if (is_array($config['installedpackages']['package'])) {
+ foreach ($config['installedpackages']['package'] as $instpkg) {
+ $tocheck[] = $instpkg['name'];
+ }
+ $currentvers = get_pkg_info($tocheck, array('version', 'xmlver'));
+}
+
+$updateavailable = false;
+?>
+
+<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="installed packages">
+ <tr>
+ <td width="15%" class="listhdrr">Package Name</td>
+ <td width="15%" class="listhdrr">Category</td>
+ <td width="30%" class="listhdrr">Package Version</td>
+ </tr>
+ <?php
+ if ($config['installedpackages']['package'] != "") {
+ $instpkgs = array();
+ foreach ($config['installedpackages']['package'] as $instpkg) {
+ $instpkgs[] = $instpkg['name'];
+ }
+ natcasesort($instpkgs);
+ $y=1;
+ foreach ($instpkgs as $index => $pkgname){
+
+ $pkg = $config['installedpackages']['package'][$index];
+ if ($pkg['name'] <> "") { ?>
+ <tr valign="top">
+ <td class="listlr">
+ <?= $pkg['name'] ?>
+ </td>
+ <td class="listr">
+ <?= $pkg['category'] ?>
+ </td>
+ <td class="listr">
+ <?php
+ $latest_package = $currentvers[$pkg['name']]['version'];
+ if ($latest_package == false) {
+ // We can't determine this package's version status.
+ echo "Current: Unknown.<br />Installed: " . $pkg['version'];
+ } elseif (strcmp($pkg['version'], $latest_package) > 0) {
+ /* we're running a newer version of the package */
+ echo "Current: {$latest_package}";
+ echo "<br />Installed: {$pkg['version']}";
+ } elseif (strcmp($pkg['version'], $latest_package) < 0) {
+ /* our package is out of date */
+ $updateavailable = true;
+ ?>
+ <div id="updatediv-<?php echo $y; ?>" style="color:red">
+ <b>Update Available!</b></div><div style="float:left">
+ Current: <?php echo $latest_package; ?><br />
+ Installed: <?php echo $pkg['version']; ?></div><div style="float:right">
+ <a href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?= $pkg['name']; ?>"><img title="Update this package." src="./themes/<?= $g['theme']; ?>/images/icons/icon_reinstall_pkg.gif" width="17" height="17" border="0" alt="reinstall" /></a>
+ </div>
+ <?php
+ $y++;
+ } else {
+ echo $pkg['version'];
+ } ?>
+ </td>
+ </tr>
+ <?php }
+ }
+ } else {
+ echo "<tr><td colspan=\"5\" align=\"center\">There are no packages currently installed.</td></tr>";
+ }
+ ?>
+</table>
+
+<?php if ($updateavailable): ?>
+<script type="text/javascript">
+//<![CDATA[
+ window.onload = function(in_event)
+ {
+ for (y=1; y<=<?php echo $y;?>; y++) {
+ textID = "#updatediv-" + y;
+ jQuery(textID).effect('pulsate');
+ }
+ }
+//]]>
+</script>
+<?php endif; ?>
diff --git a/src/usr/local/www/widgets/widgets/interface_statistics.widget.php b/src/usr/local/www/widgets/widgets/interface_statistics.widget.php
new file mode 100644
index 0000000..a124ea3
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/interface_statistics.widget.php
@@ -0,0 +1,216 @@
+<?php
+/*
+ $Id: interface_statistics.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/interface_statistics.inc");
+
+$ifdescrs = get_configured_interface_with_descr();
+
+$array_in_packets = array();
+$array_out_packets = array();
+$array_in_bytes = array();
+$array_out_bytes = array();
+$array_in_errors = array();
+$array_out_errors = array();
+$array_collisions = array();
+$array_interrupt = array();
+$interfacecounter = 0;
+
+//build data arrays
+foreach ($ifdescrs as $ifdescr => $ifname) {
+ $ifinfo = get_interface_info($ifdescr);
+ $interfacecounter++;
+ if ($ifinfo['status'] != "down") {
+ $array_in_packets[] = $ifinfo['inpkts'];
+ $array_out_packets[] = $ifinfo['outpkts'];
+ $array_in_bytes[] = format_bytes($ifinfo['inbytes']);
+ $array_out_bytes[] = format_bytes($ifinfo['outbytes']);
+ if (isset($ifinfo['inerrs'])) {
+ $array_in_errors[] = $ifinfo['inerrs'];
+ $array_out_errors[] = $ifinfo['outerrs'];
+ } else {
+ $array_in_errors[] = "n/a";
+ $array_out_errors[] = "n/a";
+ }
+ if (isset($ifinfo['collisions'])) {
+ $array_collisions[] = htmlspecialchars($ifinfo['collisions']);
+ } else {
+ $array_collisions[] = "n/a";
+ }
+ }
+} //end for
+
+
+
+
+?>
+ <div id="int_labels" style="float:left;width:32%">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="interfaces statistics">
+ <tr>
+ <td class="widgetsubheader" style="height:25px">&nbsp;&nbsp;&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Packets In</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Packets Out</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Bytes In</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Bytes Out</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Errors In</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Errors Out</td>
+ </tr>
+ <tr>
+ <td class="vncellt" style="height:25px">Collisions</td>
+ </tr>
+ </table>
+ </div>
+ <div id="interfacestats" style="float:right;overflow: auto; width:68%">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="the stats">
+ <tr>
+ <?php
+ $interface_names = array();
+ foreach ($ifdescrs as $ifdescr => $ifname):
+ $ifinfo = get_interface_info($ifdescr);
+ if ($ifinfo['status'] != "down") { ?>
+ <td class="widgetsubheader nowrap" style="height:25px">
+ <?=htmlspecialchars($ifname);?>
+ </td>
+ <?php
+ //build array of interface names
+ $interface_names[] = $ifname;
+ }
+ endforeach;
+ ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 1;
+ foreach ($array_in_packets as $data):
+ ?>
+ <td class="listr nowrap" id="stat<?php echo $counter?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach;
+ ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 2;
+ foreach ($array_out_packets as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 3;
+ foreach ($array_in_bytes as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 4;
+ foreach ($array_out_bytes as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 5;
+ foreach ($array_in_errors as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 6;
+ foreach ($array_out_errors as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+
+ <tr>
+ <?php
+ $counter = 7;
+ foreach ($array_collisions as $data): ?>
+ <td class="listr nowrap" id="stat<?php echo $counter;?>" style="height:25px">
+ <?=htmlspecialchars($data);?>
+ </td>
+ <?php
+ $counter = $counter + 7;
+ endforeach; ?>
+ </tr>
+ </table>
+ </div>
diff --git a/src/usr/local/www/widgets/widgets/interfaces.widget.php b/src/usr/local/www/widgets/widgets/interfaces.widget.php
new file mode 100644
index 0000000..e49a030
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/interfaces.widget.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ interfaces.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/interfaces.inc");
+
+$ifdescrs = get_configured_interface_with_descr();
+?>
+
+<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="interfaces">
+<?php
+foreach ($ifdescrs as $ifdescr => $ifname):
+ $ifinfo = get_interface_info($ifdescr);
+
+ if ($ifinfo['ppplink']) {
+ $icon = '3g';
+ } else if (is_interface_wireless($ifdescr)) {
+ if ($ifinfo['status'] == "associated") {
+ $icon = 'wlan';
+ } else {
+ $icon = 'wlan_d';
+ }
+ } else {
+ $icon = 'cablenic';
+ }
+
+ if ($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") {
+ $known_status = true;
+ $up_display = "inline";
+ $down_display = "none";
+ $block_display = "none";
+ } elseif ($ifinfo['status'] == "no carrier") {
+ $known_status = true;
+ $up_display = "none";
+ $down_display = "inline";
+ $block_display = "none";
+ } elseif ($ifinfo['status'] == "down") {
+ $known_status = true;
+ $up_display = "none";
+ $down_display = "none";
+ $block_display = "inline";
+ } else {
+ $known_status = false;
+ }
+?>
+ <tr>
+ <td class="vncellt" rowspan="2">
+ <span onclick="location.href='/interfaces.php?if=<?=$ifdescr; ?>'" style="cursor:pointer; white-space:nowrap">
+ <img src="./themes/<?=$g['theme'];?>/images/icons/icon_<?=$icon;?>.gif" alt="<?=$icon;?>" />
+ <u><?=htmlspecialchars($ifname);?></u>
+ </span>
+<?php
+ if ($ifinfo['dhcplink']) {
+ echo "<br />(DHCP)";
+ }
+?>
+ </td>
+<?php
+ if ($known_status):
+?>
+ <td rowspan="2" class="listr" align="center">
+ <div id="<?php echo $ifname . "-up";?>" style="display:<?=$up_display;?>" >
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_interface_up.gif" title="<?=$ifname;?> is up" alt="up" />
+ </div>
+ <div id="<?php echo $ifname . "-down";?>" style="display:<?=$down_display;?>" >
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_interface_down.gif" title="<?=$ifname;?> is down" alt="down" />
+ </div>
+ <div id="<?php echo $ifname . "-block";?>" style="display:<?=$block_display;?>" >
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" title="<?=$ifname;?> is disabled" alt="block" />
+ </div>
+ </td>
+<?php
+ else:
+ echo htmlspecialchars($ifinfo['status']);
+ endif;
+?>
+ <td class="listr">
+ <div id="<?php echo $ifname;?>-media" style="display:inline"><?=htmlspecialchars($ifinfo['media']);?></div>
+ </td>
+ </tr>
+ <tr>
+ <td class="listr">
+ <div id="<?php echo $ifname;?>-ip" style="display:inline"><strong><?=htmlspecialchars($ifinfo['ipaddr']);?> </strong><?php if ($ifinfo['ipaddr']) echo "<br />";?></div>
+ <div id="<?php echo $ifname;?>-ipv6" style="display:inline"><strong><?=htmlspecialchars($ifinfo['ipaddrv6']);?> </strong></div>
+ </td>
+ </tr>
+<?php
+endforeach;
+?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/ipsec.widget.php b/src/usr/local/www/widgets/widgets/ipsec.widget.php
new file mode 100644
index 0000000..49250ce
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/ipsec.widget.php
@@ -0,0 +1,265 @@
+<?php
+/*
+ ipsec.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("functions.inc");
+require_once("ipsec.inc");
+
+if (isset($config['ipsec']['phase1'])) {
+?>
+ <div>&nbsp;</div>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array("Overview", true, "ipsec-Overview");
+ $tab_array[1] = array("Tunnels", false, "ipsec-tunnel");
+ $tab_array[2] = array("Mobile", false, "ipsec-mobile");
+ display_widget_tabs($tab_array);
+
+ $spd = ipsec_dump_spd();
+ $sad = ipsec_dump_sad();
+ $mobile = ipsec_dump_mobile();
+ $ipsec_status = ipsec_smp_dump_status();
+
+ $activecounter = 0;
+ $inactivecounter = 0;
+
+ if (!is_array($ipsec_status['query'])) {
+ $ipsec_status['query'] = array();
+ $ipsec_status['query']['ikesalist'] = array();
+ $ipsec_status['query']['ikesalist']['ikesa'] = array();
+ } else if (!is_array($ipsec_status['query']['ikesalist'])) {
+ $ipsec_status['query']['ikesalist'] = array();
+ $ipsec_status['query']['ikesalist']['ikesa'] = array();
+ } else if (!is_array($ipsec_status['query']['ikesalist']['ikesa'])) {
+ $ipsec_status['query']['ikesalist']['ikesa'] = array();
+ }
+
+ $ipsec_detail_array = array();
+ $ikenum = array();
+ if (isset($config['ipsec']['phase2'])) {
+ foreach ($config['ipsec']['phase2'] as $ph2ent) {
+ if (!ipsec_lookup_phase1($ph2ent,$ph1ent)) {
+ continue;
+ }
+
+ if ($ph2ent['remoteid']['type'] == "mobile" || isset($ph1ent['mobile'])) {
+ continue;
+ }
+ if (isset($ph1ent['disabled']) || isset($ph2ent['disabled'])) {
+ continue;
+ }
+
+ if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == 'ikev1') {
+ if (!isset($ikenum[$ph1ent['ikeid']])) {
+ $ikenum[$ph1ent['ikeid']] = 0;
+ } else {
+ $ikenum[$ph1ent['ikeid']]++;
+ }
+ $ikeid = "con{$ph1ent['ikeid']}00" . $ikenum[$ph1ent['ikeid']];
+ } else {
+ if (isset($ikenum[$ph1ent['ikeid']])) {
+ continue;
+ }
+ $ikeid = "con{$ph1ent['ikeid']}";
+ $ikenum[$ph1ent['ikeid']] = true;
+ }
+
+ $found = false;
+ foreach ($ipsec_status['query']['ikesalist']['ikesa'] as $ikesa) {
+ if (isset($ikesa['childsalist']) && isset($ikesa['childsalist']['childsa'])) {
+ foreach ($ikesa['childsalist']['childsa'] as $childsa) {
+ if ($ikeid == $childsa['childconfig']) {
+ $found = true;
+ break;
+ }
+ }
+ } else if ($ikeid == $ikesa['peerconfig']) {
+ $found = true;
+ }
+
+ if ($found === true) {
+ if ($ikesa['status'] == 'established') {
+ /* tunnel is up */
+ $iconfn = "true";
+ $activecounter++;
+ } else {
+ /* tunnel is down */
+ $iconfn = "false";
+ $inactivecounter++;
+ }
+ break;
+ }
+ }
+
+ if ($found === false) {
+ /* tunnel is down */
+ $iconfn = "false";
+ $inactivecounter++;
+ }
+
+ $ipsec_detail_array[] = array('src' => convert_friendly_interface_to_friendly_descr($ph1ent['interface']),
+ 'dest' => $ph1ent['remote-gateway'],
+ 'remote-subnet' => ipsec_idinfo_to_text($ph2ent['remoteid']),
+ 'descr' => $ph2ent['descr'],
+ 'status' => $iconfn);
+ }
+ }
+ unset($ikenum);
+}
+
+if (isset($config['ipsec']['phase2'])) {
+?>
+
+<div id="ipsec-Overview" style="display:block;background-color:#EEEEEE;">
+ <div>
+ <table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="heading">
+ <tr>
+ <td class="listhdrr nowrap">Active Tunnels</td>
+ <td class="listhdrr nowrap">Inactive Tunnels</td>
+ <td class="listhdrr nowrap">Mobile Users</td>
+ </tr>
+ <tr>
+ <td class="listlr"><?php echo $activecounter; ?></td>
+ <td class="listr"><?php echo $inactivecounter; ?></td>
+ <td class="listr"><?php if (is_array($mobile['pool'])) echo htmlspecialchars($mobile['pool'][0]['usage']); else echo 0; ?></td>
+ </tr>
+ </table>
+ </div>
+</div>
+
+<div id="ipsec-tunnel" style="display:none;background-color:#EEEEEE;">
+ <div style="padding: 10px">
+ <div style="display:table-row;">
+ <div class="widgetsubheader" style="display:table-cell;width:40px">Source</div>
+ <div class="widgetsubheader" style="display:table-cell;width:100px">Destination</div>
+ <div class="widgetsubheader" style="display:table-cell;width:90px">Description</div>
+ <div class="widgetsubheader" style="display:table-cell;width:30px">Status</div>
+ </div>
+ <div style="max-height:105px;overflow:auto;">
+
+ <?php
+ foreach ($ipsec_detail_array as $ipsec) :
+ ?>
+
+ <div style="display:table-row;">
+ <div class="listlr" style="display:table-cell;width:39px">
+ <?php echo htmlspecialchars($ipsec['src']);?>
+ </div>
+ <div class="listr" style="display:table-cell;width:100px">
+ <?php echo $ipsec['remote-subnet'];?>
+ <br />
+ (<?php echo htmlspecialchars($ipsec['dest']);?>)
+ </div>
+ <div class="listr" style="display:table-cell;width:90px">
+ <?php echo htmlspecialchars($ipsec['descr']);?>
+ </div>
+ <div class="listr" style="display:table-cell;width:37px" align="center">
+ <?php
+ if ($ipsec['status'] == "true") {
+ /* tunnel is up */
+ $iconfn = "interface_up";
+ } else {
+ /* tunnel is down */
+ $iconfn = "interface_down";
+ }
+
+ echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='Tunnel status' width='11' height='11' />";
+ ?>
+ </div>
+ </div>
+ <?php
+ endforeach;
+ ?>
+ </div>
+ </div>
+</div>
+<div id="ipsec-mobile" style="display:none;background-color:#EEEEEE;">
+ <div style="padding: 10px">
+ <div style="display:table-row;">
+ <div class="widgetsubheader" style="display:table-cell;width:140px">User</div>
+ <div class="widgetsubheader" style="display:table-cell;width:130px">IP</div>
+ <div class="widgetsubheader" style="display:table-cell;width:30px">Status</div>
+ </div>
+ <div style="max-height:105px;overflow:auto;">
+<?php
+ if (is_array($mobile['pool'])):
+ foreach ($mobile['pool'] as $pool):
+ if (is_array($pool['lease'])):
+ foreach ($pool['lease'] as $muser) :
+?>
+ <div style="display:table-row;">
+ <div class="listlr" style="display:table-cell;width:139px">
+ <?php echo htmlspecialchars($muser['id']);?><br />
+ </div>
+ <div class="listr" style="display:table-cell;width:130px">
+ <?php echo htmlspecialchars($muser['host']);?><br />
+ </div>
+ <div class="listr" style="display:table-cell;width:30px">
+ <?php echo htmlspecialchars($muser['status']);?><br/>
+ </div>
+ </div>
+<?php
+ endforeach;
+ endif;
+ endforeach;
+ endif;
+?>
+ </div>
+ </div>
+</div>
+<?php // end if tunnels are configured, else show code below
+} else {
+?>
+<div style="display:block">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="note">
+ <tr>
+ <td colspan="4">
+ <span class="vexpl">
+ <span class="red">
+ <strong>
+ Note: There are no configured IPsec Tunnels<br />
+ </strong>
+ </span>
+ You can configure your IPsec <a href="vpn_ipsec.php">here</a>.
+ </span>
+ </td>
+ </tr>
+ </table>
+</div>
+<?php
+}
+?>
diff --git a/src/usr/local/www/widgets/widgets/load_balancer_status.widget.php b/src/usr/local/www/widgets/widgets/load_balancer_status.widget.php
new file mode 100644
index 0000000..f5ddda9
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/load_balancer_status.widget.php
@@ -0,0 +1,155 @@
+<?php
+/*
+ load_balancer_status.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2010 Jim Pingle
+ Portions copied from status_lb_pool.php, status_lb_vs.php, and vslb.inc:
+ Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
+ Copyright (C) 2005-2008 Bill Marquette
+
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("vslb.inc");
+
+$now = time();
+$year = date("Y");
+
+if (!is_array($config['load_balancer']['lbpool'])) {
+ $config['load_balancer']['lbpool'] = array();
+}
+if (!is_array($config['load_balancer']['virtual_server'])) {
+ $config['load_balancer']['virtual_server'] = array();
+}
+$a_vs = &$config['load_balancer']['virtual_server'];
+$a_pool = &$config['load_balancer']['lbpool'];
+$rdr_a = get_lb_redirects();
+$relay_hosts = get_lb_summary();
+
+$lb_logfile = "{$g['varlog_path']}/relayd.log";
+$nentries = $config['syslog']['nentries'];
+if (!$nentries) {
+ $nentries = 50;
+}
+
+?>
+
+<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0" summary="load balancer">
+ <tr>
+ <td width="10%" class="listhdrr">Server</td>
+ <td width="10%" class="listhdrr">Pool</td>
+ <td width="30%" class="listhdr">Description</td>
+ </tr>
+<?php
+$i = 0;
+foreach ($a_vs as $vsent):
+?>
+ <tr>
+ <?php
+ switch (trim($rdr_a[$vsent['name']]['status'])) {
+ case 'active':
+ $bgcolor = "#90EE90"; // lightgreen
+ $rdr_a[$vsent['name']]['status'] = "Active";
+ break;
+ case 'down':
+ $bgcolor = "#F08080"; // lightcoral
+ $rdr_a[$vsent['name']]['status'] = "Down";
+ break;
+ default:
+ $bgcolor = "#D3D3D3"; // lightgray
+ $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?';
+ }
+ ?>
+ <td class="listlr">
+ <?=$vsent['name'];?><br />
+ <span style="background-color: <?=$bgcolor?>; display: block"><i><?=$rdr_a[$vsent['name']]['status']?></i></span>
+ <?=$vsent['ipaddr'].":".$vsent['port'];?><br />
+ </td>
+ <td class="listr" align="center" >
+ <table border="0" cellpadding="0" cellspacing="2" summary="status">
+ <?php
+ foreach ($a_pool as $pool) {
+ if ($pool['name'] == $vsent['poolname']) {
+ $pool_hosts=array();
+ foreach ((array) $pool['servers'] as $server) {
+ $svr['ip']['addr']=$server;
+ $svr['ip']['state']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['state'];
+ $svr['ip']['avail']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['avail'];
+ $pool_hosts[]=$svr;
+ }
+ foreach ((array) $pool['serversdisabled'] as $server) {
+ $svr['ip']['addr']="$server";
+ $svr['ip']['state']='disabled';
+ $svr['ip']['avail']='disabled';
+ $pool_hosts[]=$svr;
+ }
+ asort($pool_hosts);
+ foreach ((array) $pool_hosts as $server) {
+ if ($server['ip']['addr']!="") {
+ switch ($server['ip']['state']) {
+ case 'up':
+ $bgcolor = "#90EE90"; // lightgreen
+ $checked = "checked";
+ break;
+ case 'disabled':
+ $bgcolor = "#FFFFFF"; // white
+ $checked = "";
+ break;
+ default:
+ $bgcolor = "#F08080"; // lightcoral
+ $checked = "checked";
+ }
+ echo "<tr>";
+ echo "<td bgcolor=\"{$bgcolor}\">&nbsp;{$server['ip']['addr']}:{$pool['port']}&nbsp;</td><td bgcolor=\"{$bgcolor}\">&nbsp;";
+ if ($server['ip']['avail']) {
+ echo " ({$server['ip']['avail']}) ";
+ }
+ echo "&nbsp;</td></tr>";
+ }
+ }
+ }
+ }
+ ?>
+ </table>
+ </td>
+ <td class="listbg" >
+ <font color="#FFFFFF"><?=$vsent['descr'];?></font>
+ </td>
+ </tr>
+<?php
+ $i++;
+endforeach;
+?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/log.widget.php b/src/usr/local/www/widgets/widgets/log.widget.php
new file mode 100644
index 0000000..45205a4
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/log.widget.php
@@ -0,0 +1,281 @@
+<?php
+/*
+ log.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+
+/* In an effort to reduce duplicate code, many shared functions have been moved here. */
+require_once("filter_log.inc");
+
+if (is_numeric($_POST['filterlogentries'])) {
+ $config['widgets']['filterlogentries'] = $_POST['filterlogentries'];
+
+ $acts = array();
+ if ($_POST['actpass']) {
+ $acts[] = "Pass";
+ }
+ if ($_POST['actblock']) {
+ $acts[] = "Block";
+ }
+ if ($_POST['actreject']) {
+ $acts[] = "Reject";
+ }
+
+ if (!empty($acts)) {
+ $config['widgets']['filterlogentriesacts'] = implode(" ", $acts);
+ } else {
+ unset($config['widgets']['filterlogentriesacts']);
+ }
+ unset($acts);
+
+ if (($_POST['filterlogentriesinterfaces']) and ($_POST['filterlogentriesinterfaces'] != "All")) {
+ $config['widgets']['filterlogentriesinterfaces'] = trim($_POST['filterlogentriesinterfaces']);
+ } else {
+ unset($config['widgets']['filterlogentriesinterfaces']);
+ }
+
+ write_config("Saved Filter Log Entries via Dashboard");
+ Header("Location: /");
+ exit(0);
+}
+
+$nentries = isset($config['widgets']['filterlogentries']) ? $config['widgets']['filterlogentries'] : 5;
+
+//set variables for log
+
+$nentriesacts = isset($config['widgets']['filterlogentriesacts']) ? $config['widgets']['filterlogentriesacts'] : 'All';
+$nentriesinterfaces = isset($config['widgets']['filterlogentriesinterfaces']) ? $config['widgets']['filterlogentriesinterfaces'] : 'All';
+
+$filterfieldsarray = array(
+ "act" => $nentriesacts,
+ "interface" => $nentriesinterfaces
+);
+
+$filter_logfile = "{$g['varlog_path']}/filter.log";
+$filterlog = conv_log_filter($filter_logfile, $nentries, 50, $filterfieldsarray); //Get log entries
+
+/* AJAX related routines */
+handle_ajax($nentries, $nentries + 20);
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+lastsawtime = '<?php echo time(); ?>';
+var lines = Array();
+var timer;
+var updateDelay = 30000;
+var isBusy = false;
+var isPaused = false;
+var nentries = <?php echo $nentries; ?>;
+
+<?php
+if (isset($config['syslog']['reverse'])) {
+ echo "var isReverse = true;\n";
+} else {
+ echo "var isReverse = false;\n";
+}
+?>
+
+/* Called by the AJAX updater */
+function format_log_line(row) {
+ var rrText = "<?php echo gettext("Reverse Resolve with DNS"); ?>";
+
+ if (row[8] == '6') {
+ srcIP = '[' + row[3] + ']';
+ dstIP = '[' + row[5] + ']';
+ } else {
+ srcIP = row[3];
+ dstIP = row[5];
+ }
+
+ if (row[4] == '') {
+ srcPort = '';
+ } else {
+ srcPort = ':' + row[4];
+ }
+ if (row[6] == '') {
+ dstPort = '';
+ } else {
+ dstPort = ':' + row[6];
+ }
+
+ var line = '<td class="listMRlr" align="center">' + row[0] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[1] + '">' + row[1].slice(0,-3) + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[2] + '">' + row[2] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + srcIP + srcPort + '"><a href="diag_dns.php?host=' + row[3] + '" title="' + rrText + '">' + srcIP + '</a></td>' +
+ '<td class="listMRr ellipsis" title="' + dstIP + dstPort + '"><a href="diag_dns.php?host=' + row[5] + '" title="' + rrText + '">' + dstIP + '</a>' + dstPort + '</td>';
+
+ var nentriesacts = "<?php echo $nentriesacts; ?>";
+ var nentriesinterfaces = "<?php echo $nentriesinterfaces; ?>";
+
+ var Action = row[0].match(/alt=.*?(pass|block|reject)/i).join("").match(/pass|block|reject/i).join("");
+ var Interface = row[2];
+
+ if (!(in_arrayi(Action, nentriesacts.replace (/\s+/g, ',').split(','))) && (nentriesacts != 'All')) {
+ return false;
+ }
+ if (!(in_arrayi(Interface, nentriesinterfaces.replace(/\s+/g, ',').split(','))) && (nentriesinterfaces != 'All')) {
+ return false;
+ }
+
+ return line;
+}
+//]]>
+</script>
+<script src="/javascript/filter_log.js" type="text/javascript"></script>
+<input type="hidden" id="log-config" name="log-config" value="" />
+
+<div id="log-settings" class="widgetconfigdiv" style="display:none;">
+ <form action="/widgets/widgets/log.widget.php" method="post" name="log_widget_iform">
+ Number of lines to display:
+ <select name="filterlogentries" class="formfld unknown" id="filterlogentries">
+ <?php for ($i = 1; $i <= 20; $i++) { ?>
+ <option value="<?php echo $i;?>" <?php if ($nentries == $i) echo "selected=\"selected\"";?>><?php echo $i;?></option>
+ <?php } ?>
+ </select>
+
+<?php
+ $Include_Act = explode(" ", $nentriesacts);
+ if ($nentriesinterfaces == "All") {
+ $nentriesinterfaces = "";
+ }
+?>
+ <input id="actpass" name="actpass" type="checkbox" value="Pass" <?php if (in_arrayi('Pass', $Include_Act)) echo "checked=\"checked\""; ?> /> Pass
+ <input id="actblock" name="actblock" type="checkbox" value="Block" <?php if (in_arrayi('Block', $Include_Act)) echo "checked=\"checked\""; ?> /> Block
+ <input id="actreject" name="actreject" type="checkbox" value="Reject" <?php if (in_arrayi('Reject', $Include_Act)) echo "checked=\"checked\""; ?> /> Reject
+ <br />
+ Interfaces:
+ <select id="filterlogentriesinterfaces" name="filterlogentriesinterfaces" class="formselect">
+ <option value="All">ALL</option>
+<?php
+ $interfaces = get_configured_interface_with_descr();
+ foreach ($interfaces as $iface => $ifacename):
+?>
+ <option value="<?=$iface;?>" <?php if ($nentriesinterfaces == $iface) echo "selected=\"selected\"";?>>
+ <?=htmlspecialchars($ifacename);?>
+ </option>
+<?php
+ endforeach;
+ unset($interfaces);
+ unset($Include_Act);
+?>
+ </select>
+
+ <input id="log_widget_submit" name="log_widget_submit" type="submit" class="formbtn" value="Save" />
+ </form>
+</div>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout: fixed;" summary="logs">
+ <colgroup>
+ <col style='width: 7%;' />
+ <col style='width: 23%;' />
+ <col style='width: 11%;' />
+ <col style='width: 28%;' />
+ <col style='width: 31%;' />
+ </colgroup>
+ <thead>
+ <tr>
+ <td class="listhdrr"><?=gettext("Act");?></td>
+ <td class="listhdrr"><?=gettext("Time");?></td>
+ <td class="listhdrr"><?=gettext("IF");?></td>
+ <td class="listhdrr"><?=gettext("Source");?></td>
+ <td class="listhdrr"><?=gettext("Destination");?></td>
+ </tr>
+ </thead>
+ <tbody id='filter-log-entries'>
+ <?php
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
+ if ($filterent['version'] == '6') {
+ $srcIP = "[" . htmlspecialchars($filterent['srcip']) . "]";
+ $dstIP = "[" . htmlspecialchars($filterent['dstip']) . "]";
+ } else {
+ $srcIP = htmlspecialchars($filterent['srcip']);
+ $dstIP = htmlspecialchars($filterent['dstip']);
+ }
+
+ if ($filterent['srcport']) {
+ $srcPort = ":" . htmlspecialchars($filterent['srcport']);
+ } else {
+ $srcPort = "";
+ }
+
+ if ($filterent['dstport']) {
+ $dstPort = ":" . htmlspecialchars($filterent['dstport']);
+ } else {
+ $dstPort = "";
+ }
+
+ ?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr nowrap" align="center">
+ <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['tracker']},{$filterent['act']}"; ?>', outputrule);">
+ <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" />
+ </a>
+ </td>
+ <td class="listMRr ellipsis nowrap" title="<?php echo htmlspecialchars($filterent['time']);?>"><?php echo substr(htmlspecialchars($filterent['time']),0,-3);?></td>
+ <td class="listMRr ellipsis nowrap" title="<?php echo htmlspecialchars($filterent['interface']);?>"><?php echo htmlspecialchars($filterent['interface']);?></td>
+ <td class="listMRr ellipsis nowrap" title="<?php echo $srcIP . $srcPort;?>">
+ <a href="diag_dns.php?host=<?php echo "{$filterent['srcip']}"; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
+ <?php echo $srcIP;?></a></td>
+ <td class="listMRr ellipsis nowrap" title="<?php echo $dstIP . $dstPort;?>">
+ <a href="diag_dns.php?host=<?php echo "{$filterent['dstip']}"; ?>" title="<?=gettext("Reverse Resolve with DNS");?>">
+ <?php echo $dstIP;?></a><?php echo $dstPort;?></td>
+ <?php
+ if ($filterent['proto'] == "TCP") {
+ $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ }
+ ?>
+ </tr>
+ <?php
+ endforeach;
+ ?>
+ </tbody>
+</table>
+
+<!-- needed to display the widget settings menu -->
+<script type="text/javascript">
+//<![CDATA[
+ selectIntLink = "log-configure";
+ textlink = document.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/ntp_status.widget.php b/src/usr/local/www/widgets/widgets/ntp_status.widget.php
new file mode 100644
index 0000000..64522be
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/ntp_status.widget.php
@@ -0,0 +1,515 @@
+<?php
+/*
+ ntp_status.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+
+require_once("/usr/local/www/widgets/include/ntp_status.inc");
+
+if ($_REQUEST['updateme']) {
+//this block displays only on ajax refresh
+ if (isset($config['system']['ipv6allow'])) {
+ $inet_version = "";
+ } else {
+ $inet_version = " -4";
+ }
+
+ exec("/usr/local/sbin/ntpq -pn $inet_version | /usr/bin/tail +3", $ntpq_output);
+ $ntpq_counter = 0;
+ foreach ($ntpq_output as $line) {
+ if (substr($line, 0, 1) == "*") {
+ //Active NTP Peer
+ $line = substr($line, 1);
+ $peerinfo = preg_split("/[\s\t]+/", $line);
+ if ($peerinfo[2] == "1") {
+ $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ", " . $peerinfo[1] . ")";
+ } else {
+ $syncsource = $peerinfo[0] . " (stratum " . $peerinfo[2] . ")";
+ }
+ $ntpq_counter++;
+ } elseif (substr($line, 0, 1) == "o") {
+ //Local PPS Peer
+ $line = substr($line, 1);
+ $peerinfo = preg_split("/[\s\t]+/", $line);
+ $syncsource = $peerinfo[1] . " (stratum " . $peerinfo[2] . ", PPS)";
+ $ntpq_counter++;
+ }
+ }
+
+ exec("/usr/local/sbin/ntpq -c clockvar $inet_version", $ntpq_clockvar_output);
+ foreach ($ntpq_clockvar_output as $line) {
+ if (substr($line, 0, 9) == "timecode=") {
+ $tmp = explode('"', $line);
+ $tmp = $tmp[1];
+ if (substr($tmp, 0, 6) == '$GPRMC') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = ($gps_vars[2] == "A");
+ $gps_lat_deg = substr($gps_vars[3], 0, 2);
+ $gps_lat_min = substr($gps_vars[3], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[5], 0, 3);
+ $gps_lon_min = substr($gps_vars[5], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[4] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[6] == "E") ? 1 : -1);
+ $gps_la = $gps_vars[4];
+ $gps_lo = $gps_vars[6];
+ } elseif (substr($tmp, 0, 6) == '$GPGGA') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = $gps_vars[6];
+ $gps_lat_deg = substr($gps_vars[2], 0, 2);
+ $gps_lat_min = substr($gps_vars[2], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[4], 0, 3);
+ $gps_lon_min = substr($gps_vars[4], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[3] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[5] == "E") ? 1 : -1);
+ $gps_alt = $gps_vars[9];
+ $gps_alt_unit = $gps_vars[10];
+ $gps_sat = $gps_vars[7];
+ $gps_la = $gps_vars[3];
+ $gps_lo = $gps_vars[5];
+ } elseif (substr($tmp, 0, 6) == '$GPGLL') {
+ $gps_vars = explode(",", $tmp);
+ $gps_ok = ($gps_vars[6] == "A");
+ $gps_lat_deg = substr($gps_vars[1], 0, 2);
+ $gps_lat_min = substr($gps_vars[1], 2) / 60.0;
+ $gps_lon_deg = substr($gps_vars[3], 0, 3);
+ $gps_lon_min = substr($gps_vars[3], 3) / 60.0;
+ $gps_lat = $gps_lat_deg + $gps_lat_min;
+ $gps_lat = $gps_lat * (($gps_vars[2] == "N") ? 1 : -1);
+ $gps_lon = $gps_lon_deg + $gps_lon_min;
+ $gps_lon = $gps_lon * (($gps_vars[4] == "E") ? 1 : -1);
+ $gps_la = $gps_vars[2];
+ $gps_lo = $gps_vars[4];
+ }
+ }
+ }
+
+ if (isset($config['ntpd']['gps']['type']) && ($config['ntpd']['gps']['type'] == 'SureGPS') && (isset($gps_ok))) {
+ //GSV message is only enabled by init commands in services_ntpd_gps.php for SureGPS board
+ $gpsport = fopen("/dev/gps0", "r+");
+ while ($gpsport) {
+ $buffer = fgets($gpsport);
+ if (substr($buffer, 0, 6)=='$GPGSV') {
+ //echo $buffer."\n";
+ $gpgsv = explode(',',$buffer);
+ $gps_satview = $gpgsv[3];
+ break;
+ }
+ }
+ }
+?>
+
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
+ <tbody>
+ <tr>
+ <td width="40%" class="vncellt">Sync Source</td>
+ <td width="60%" class="listr">
+ <?php if ($ntpq_counter == 0): ?>
+ No active peers available
+ <?php else: ?>
+ <?php echo $syncsource; ?>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php if (($gps_ok) && ($gps_lat) && ($gps_lon)): ?>
+ <tr>
+ <td width="40%" class="vncellt">Clock location</td>
+ <td width="60%" class="listr">
+ <a target="_gmaps" href="http://maps.google.com/?q=<?php echo $gps_lat; ?>,<?php echo $gps_lon; ?>">
+ <?php
+ echo sprintf("%.5f", $gps_lat) . " " . $gps_la . ", " . sprintf("%.5f", $gps_lon) . " " . $gps_lo;
+ ?>
+ </a>
+ <?php
+ if (isset($gps_alt)) {
+ echo " (" . $gps_alt . " " . $gps_alt_unit . " alt.)";
+ }
+ ?>
+ </td>
+ </tr>
+ <?php if (isset($gps_sat) || isset($gps_satview)): ?>
+ <tr>
+ <td width="40%" class="vncellt">Satellites</td>
+ <td width="60%" class="listr">
+ <?php
+ if (isset($gps_satview)) {
+ echo 'in view ' . intval($gps_satview);
+ }
+ if (isset($gps_sat) && isset($gps_satview)) {
+ echo ', ';
+ }
+ if (isset($gps_sat)) {
+ echo 'in use ' . $gps_sat;
+ }
+ ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ </tbody>
+</table>
+<?php
+ exit;
+}
+
+/*** Clock -- beginning of server-side support code
+by Andrew Shearer, http://www.shearersoftware.com/
+v2.1.2-PHP, 2003-08-07. For updates and explanations, see
+<http://www.shearersoftware.com/software/web-tools/clock/>. ***/
+
+/* Prevent this page from being cached (though some browsers still
+ cache the page anyway, which is why we use cookies). This is
+ only important if the cookie is deleted while the page is still
+ cached (and for ancient browsers that don't know about Cache-Control).
+ If that's not an issue, you may be able to get away with
+ "Cache-Control: private" instead. */
+
+/* Grab the current server time. */
+$gDate = time();
+/* Are the seconds shown by default? When changing this, also change the
+ JavaScript client code's definition of clockShowsSeconds below to match. */
+$gClockShowsSeconds = true;
+
+function getServerDateItems($inDate) {
+ return date('Y,n,j,G,',$inDate).intval(date('i',$inDate)).','.intval(date('s',$inDate));
+ // year (4-digit),month,day,hours (0-23),minutes,seconds
+ // use intval to strip leading zero from minutes and seconds
+ // so JavaScript won't try to interpret them in octal
+ // (use intval instead of ltrim, which translates '00' to '')
+}
+
+function clockDateString($inDate) {
+ return date('Y. F j l',$inDate); // eg "Monday, January 1, 2002"
+}
+
+function clockTimeString($inDate, $showSeconds) {
+ return date($showSeconds ? 'G:i:s' : 'g:i',$inDate).' ';
+}
+/*** Clock -- end of server-side support code ***/
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+/* set up variables used to init clock in BODY's onLoad handler;
+ should be done as early as possible */
+var clockLocalStartTime = new Date();
+var clockServerStartTime = new Date(<?php echo(getServerDateItems($gDate))?>);
+
+/* stub functions for older browsers;
+ will be overridden by next JavaScript1.2 block */
+function clockInit() {
+}
+//]]>
+</script>
+
+
+<script type="text/javascript">
+//<![CDATA[
+/*** simpleFindObj, by Andrew Shearer
+
+Efficiently finds an object by name/id, using whichever of the IE,
+classic Netscape, or Netscape 6/W3C DOM methods is available.
+The optional inLayer argument helps Netscape 4 find objects in
+the named layer or floating DIV. */
+function simpleFindObj(name, inLayer) {
+ return document[name] || (document.all && document.all[name])
+ || (document.getElementById && document.getElementById(name))
+ || (document.layers && inLayer && document.layers[inLayer].document[name]);
+}
+
+/*** Beginning of Clock 2.1.2, by Andrew Shearer
+See: http://www.shearersoftware.com/software/web-tools/clock/
+Redistribution is permitted with the above notice intact.
+
+Client-side clock, based on computed time differential between browser &
+server. The server time is inserted by server-side JavaScript, and local
+time is subtracted from it by client-side JavaScript while the page is
+loading.
+
+Cookies: The local and remote times are saved in cookies named
+localClock and remoteClock, so that when the page is loaded from local
+cache (e.g. by the Back button) the clock will know that the embedded
+server time is stale compared to the local time, since it already
+matches its cookie. It can then base the calculations on both cookies,
+without reloading the page from the server. (IE 4 & 5 for Windows didn't
+respect Response.Expires = 0, so if cookies weren't used, the clock
+would be wrong after going to another page then clicking Back. Netscape
+& Mac IE were OK.)
+
+Every so often (by default, one hour) the clock will reload the page, to
+make sure the clock is in sync (as well as to update the rest of the
+page content).
+
+Compatibility: IE 4.x and 5.0, Netscape 4.x and 6.0, Mozilla 1.0. Mac & Windows.
+
+History: 1.0 2000-05-09 GIF-image digits
+ 2.0 2000-06-29 Uses text DIV layers (so 4.0 browsers req'd), &
+ cookies to work around Win IE stale-time bug
+ 2.1 2002-10-12 Noted Mozilla 1.0 compatibility; released PHP version.
+ 2.1.1 2002-10-20 Fixed octal bug in the PHP translation; the number of
+ minutes & seconds were misinterpreted when less than 10
+ 2.1.2 2003-08-07 The previous fix had introduced a bug when the
+ minutes or seconds were exactly 0. Thanks to Man Bui
+ for reporting the bug.
+*/
+var clockIncrementMillis = 1000;
+var localTime;
+var clockOffset;
+var clockExpirationLocal;
+var clockShowsSeconds = true;
+var clockTimerID = null;
+
+function clockInit(localDateObject, serverDateObject)
+{
+ var origRemoteClock = parseInt(clockGetCookieData("remoteClock"));
+ var origLocalClock = parseInt(clockGetCookieData("localClock"));
+ var newRemoteClock = serverDateObject.getTime();
+ // May be stale (WinIE); will check against cookie later
+ // Can't use the millisec. ctor here because of client inconsistencies.
+ var newLocalClock = localDateObject.getTime();
+ var maxClockAge = 60 * 60 * 1000; // get new time from server every 1hr
+
+ if (newRemoteClock != origRemoteClock) {
+ // new clocks are up-to-date (newer than any cookies)
+ document.cookie = "remoteClock=" + newRemoteClock;
+ document.cookie = "localClock=" + newLocalClock;
+ clockOffset = newRemoteClock - newLocalClock;
+ clockExpirationLocal = newLocalClock + maxClockAge;
+ localTime = newLocalClock; // to keep clockUpdate() happy
+ } else if (origLocalClock != origLocalClock) {
+ // error; localClock cookie is invalid (parsed as NaN)
+ clockOffset = null;
+ clockExpirationLocal = null;
+ } else {
+ // fall back to clocks in cookies
+ clockOffset = origRemoteClock - origLocalClock;
+ clockExpirationLocal = origLocalClock + maxClockAge;
+ localTime = origLocalClock;
+ // so clockUpdate() will reload if newLocalClock
+ // is earlier (clock was reset)
+ }
+ /* Reload page at server midnight to display the new date,
+ by expiring the clock then */
+ var nextDayLocal = (new Date(serverDateObject.getFullYear(),
+ serverDateObject.getMonth(),
+ serverDateObject.getDate() + 1)).getTime() - clockOffset;
+ if (nextDayLocal < clockExpirationLocal) {
+ clockExpirationLocal = nextDayLocal;
+ }
+}
+
+function clockOnLoad()
+{
+ clockUpdate();
+}
+
+function clockOnUnload() {
+ clockClearTimeout();
+}
+
+function clockClearTimeout() {
+ if (clockTimerID) {
+ clearTimeout(clockTimerID);
+ clockTimerID = null;
+ }
+}
+
+function clockToggleSeconds()
+{
+ clockClearTimeout();
+ if (clockShowsSeconds) {
+ clockShowsSeconds = false;
+ clockIncrementMillis = 60000;
+ } else {
+ clockShowsSeconds = true;
+ clockIncrementMillis = 1000;
+ }
+ clockUpdate();
+}
+
+function clockTimeString(inHours, inMinutes, inSeconds) {
+ return inHours
+ + (inMinutes < 10 ? ":0" : ":") + inMinutes
+ + (inSeconds < 10 ? ":0" : ":") + inSeconds;
+}
+
+function clockDisplayTime(inHours, inMinutes, inSeconds) {
+ clockWriteToDiv("ClockTime", clockTimeString(inHours, inMinutes, inSeconds));
+}
+
+function clockWriteToDiv(divName, newValue) // APS 6/29/00
+{
+ var divObject = simpleFindObj(divName);
+ newValue = '<b>' + newValue + '<' + '/b>';
+ if (divObject && divObject.innerHTML) {
+ divObject.innerHTML = newValue;
+ } else if (divObject && divObject.document) {
+ divObject.document.writeln(newValue);
+ divObject.document.close();
+ }
+ // else divObject wasn't found; it's only a clock, so don't bother complaining
+}
+
+function clockGetCookieData(label) {
+ /* find the value of the specified cookie in the document's
+ semicolon-delimited collection. For IE Win98 compatibility, search
+ from the end of the string (to find most specific host/path) and
+ don't require "=" between cookie name & empty cookie values. Returns
+ null if cookie not found. One remaining problem: Under IE 5 [Win98],
+ setting a cookie with no equals sign creates a cookie with no name,
+ just data, which is indistinguishable from a cookie with that name
+ but no data but can't be overwritten by any cookie with an equals
+ sign. */
+ var c = document.cookie;
+ if (c) {
+ var labelLen = label.length, cEnd = c.length;
+ while (cEnd > 0) {
+ var cStart = c.lastIndexOf(';',cEnd-1) + 1;
+ /* bug fix to Danny Goodman's code: calculate cEnd, to
+ prevent walking the string char-by-char & finding cookie
+ labels that contained the desired label as suffixes */
+ // skip leading spaces
+ while (cStart < cEnd && c.charAt(cStart)==" ") {
+ cStart++;
+ }
+ if (cStart + labelLen <= cEnd && c.substr(cStart,labelLen) == label) {
+ if (cStart + labelLen == cEnd) {
+ return ""; // empty cookie value, no "="
+ } else if (c.charAt(cStart+labelLen) == "=") {
+ // has "=" after label
+ return unescape(c.substring(cStart + labelLen + 1,cEnd));
+ }
+ }
+ cEnd = cStart - 1; // skip semicolon
+ }
+ }
+ return null;
+}
+
+/* Called regularly to update the clock display as well as onLoad (user
+ may have clicked the Back button to arrive here, so the clock would need
+ an immediate update) */
+function clockUpdate()
+{
+ var lastLocalTime = localTime;
+ localTime = (new Date()).getTime();
+
+ /* Sanity-check the diff. in local time between successive calls;
+ reload if user has reset system clock */
+ if (clockOffset == null) {
+ clockDisplayTime(null, null, null);
+ } else if (localTime < lastLocalTime || clockExpirationLocal < localTime) {
+ /* Clock expired, or time appeared to go backward (user reset
+ the clock). Reset cookies to prevent infinite reload loop if
+ server doesn't give a new time. */
+ document.cookie = 'remoteClock=-';
+ document.cookie = 'localClock=-';
+ location.reload(); // will refresh time values in cookies
+ } else {
+ // Compute what time would be on server
+ var serverTime = new Date(localTime + clockOffset);
+ clockDisplayTime(serverTime.getHours(), serverTime.getMinutes(),
+ serverTime.getSeconds());
+
+ // Reschedule this func to run on next even clockIncrementMillis boundary
+ clockTimerID = setTimeout("clockUpdate()",
+ clockIncrementMillis - (serverTime.getTime() % clockIncrementMillis));
+ }
+}
+
+/*** End of Clock ***/
+window.onload=clockInit(clockLocalStartTime, clockServerStartTime);clockOnLoad();
+window.onunload=clockOnUnload()
+clockUpdate();
+//]]>
+</script>
+
+
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
+ <tbody>
+ <tr>
+ <td width="40%" class="vncellt">Server Time</td>
+ <td width="60%" class="listr">
+ <div id="ClockTime">
+ <b><?php echo(clockTimeString($gDate,$gClockShowsSeconds));?></b>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<div id='ntpstatus'>
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="clock">
+ <tbody>
+ <tr>
+ <td width="100%" class="listr">
+ Updating...
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+ function ntp_getstatus() {
+ scroll(0,0);
+ var url = "/widgets/widgets/ntp_status.widget.php";
+ var pars = 'updateme=yes';
+ jQuery.ajax(
+ url,
+ {
+ type: 'get',
+ data: pars,
+ complete: ntpstatuscallback
+ });
+ // Refresh the status every 1 minute
+ setTimeout('ntp_getstatus()', 1*60*1000);
+ }
+ function ntpstatuscallback(transport) {
+ // The server returns formatted html code
+ var responseStringNtp = transport.responseText
+ jQuery('#ntpstatus').prop('innerHTML',responseStringNtp);
+ }
+ // Do the first status check 1 second after the dashboard opens
+ setTimeout('ntp_getstatus()', 1000);
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/openvpn.widget.php b/src/usr/local/www/widgets/widgets/openvpn.widget.php
new file mode 100644
index 0000000..6f813c5
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/openvpn.widget.php
@@ -0,0 +1,290 @@
+<?php
+
+/*
+ openvpn.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Part of pfSense widgets (https://www.pfsense.org)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("openvpn.inc");
+
+/* Handle AJAX */
+if ($_GET['action']) {
+ if ($_GET['action'] == "kill") {
+ $port = $_GET['port'];
+ $remipp = $_GET['remipp'];
+ if (!empty($port) and !empty($remipp)) {
+ $retval = kill_client($port, $remipp);
+ echo htmlentities("|{$port}|{$remipp}|{$retval}|");
+ } else {
+ echo gettext("invalid input");
+ }
+ exit;
+ }
+}
+
+
+function kill_client($port, $remipp) {
+ global $g;
+
+ //$tcpsrv = "tcp://127.0.0.1:{$port}";
+ $tcpsrv = "unix://{$g['varetc_path']}/openvpn/{$port}.sock";
+ $errval;
+ $errstr;
+
+ /* open a tcp connection to the management port of each server */
+ $fp = @stream_socket_client($tcpsrv, $errval, $errstr, 1);
+ $killed = -1;
+ if ($fp) {
+ stream_set_timeout($fp, 1);
+ fputs($fp, "kill {$remipp}\n");
+ while (!feof($fp)) {
+ $line = fgets($fp, 1024);
+
+ $info = stream_get_meta_data($fp);
+ if ($info['timed_out']) {
+ break;
+ }
+
+ /* parse header list line */
+ if (strpos($line, "INFO:") !== false) {
+ continue;
+ }
+ if (strpos($line, "SUCCESS") !== false) {
+ $killed = 0;
+ }
+ break;
+ }
+ fclose($fp);
+ }
+ return $killed;
+}
+
+$servers = openvpn_get_active_servers();
+$sk_servers = openvpn_get_active_servers("p2p");
+$clients = openvpn_get_active_clients();
+?>
+
+<br />
+<script type="text/javascript">
+//<![CDATA[
+ function killClient(mport, remipp) {
+ var busy = function(index,icon) {
+ jQuery(icon).bind("onclick","");
+ jQuery(icon).attr('src',jQuery(icon).attr('src').replace("\.gif", "_d.gif"));
+ jQuery(icon).css("cursor","wait");
+ }
+
+ jQuery('img[name="i:' + mport + ":" + remipp + '"]').each(busy);
+
+ jQuery.ajax(
+ "<?=$_SERVER['SCRIPT_NAME'];?>" +
+ "?action=kill&port=" + mport + "&remipp=" + remipp,
+ { type: "get", complete: killComplete }
+ );
+ }
+
+ function killComplete(req) {
+ var values = req.responseText.split("|");
+ if (values[3] != "0") {
+ alert('<?=gettext("An error occurred.");?>' + ' (' + values[3] + ')');
+ return;
+ }
+
+ jQuery('tr[name="r:' + values[1] + ":" + values[2] + '"]').each(
+ function(index,row) { jQuery(row).fadeOut(1000); }
+ );
+ }
+//]]>
+</script>
+
+<?php foreach ($servers as $server): ?>
+
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?=$server['name'];?> Client connections
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" sortableMultirow="2">
+ <tr>
+ <td class="listhdrr">Name/Time</td>
+ <td class="listhdrr">Real/Virtual IP</td>
+ </tr>
+ <?php
+ $rowIndex = 0;
+ foreach ($server['conns'] as $conn):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
+ ?>
+ <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
+ <td class="listMRlr">
+ <?=$conn['common_name'];?>
+ </td>
+ <td class="listMRr">
+ <?=$conn['remote_host'];?>
+ </td>
+ <td class='listMR' rowspan="2">
+ <img src='/themes/<?php echo $g['theme']; ?>/images/icons/icon_x.gif' height='17' width='17' border='0'
+ onclick="killClient('<?php echo $server['mgmt']; ?>', '<?php echo $conn['remote_host']; ?>');" style='cursor:pointer;'
+ name='<?php echo "i:{$server['mgmt']}:{$conn['remote_host']}"; ?>'
+ title='Kill client connection from <?php echo $conn['remote_host']; ?>' alt='' />
+ </td>
+ </tr>
+ <tr name='<?php echo "r:{$server['mgmt']}:{$conn['remote_host']}"; ?>' class="<?=$evenRowClass?>">
+ <td class="listMRlr">
+ <?=$conn['connect_time'];?>
+ </td>
+ <td class="listMRr">
+ <?=$conn['virtual_addr'];?>
+ </td>
+ </tr>
+
+ <?php endforeach; ?>
+ <tfoot>
+ <tr>
+ <td colspan="6" class="list" height="12"></td>
+ </tr>
+ </tfoot>
+ </table>
+ </td>
+ </tr>
+</table>
+
+<?php endforeach; ?>
+<?php if (!empty($sk_servers)) { ?>
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td colspan="6" class="listtopic">
+ Peer to Peer Server Instance Statistics
+ </td>
+ </tr>
+ <tr>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="listhdrr">Name/Time</td>
+ <td class="listhdrr">Remote/Virtual IP</td>
+ </tr>
+
+<?php foreach ($sk_servers as $sk_server): ?>
+ <tr name='<?php echo "r:{$sk_server['port']}:{$sk_server['remote_host']}"; ?>'>
+ <td class="listlr">
+ <?=$sk_server['name'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['remote_host'];?>
+ </td>
+ <td rowspan="2" align="center">
+ <?php
+ if ($sk_server['status'] == "up") {
+ /* tunnel is up */
+ $iconfn = "interface_up";
+ } else {
+ /* tunnel is down */
+ $iconfn = "interface_down";
+ }
+ echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='' />";
+ ?>
+ </td>
+ </tr>
+ <tr name='<?php echo "r:{$sk_server['port']}:{$sk_server['remote_host']}"; ?>'>
+ <td class="listlr">
+ <?=$sk_server['connect_time'];?>
+ </td>
+ <td class="listr">
+ <?=$sk_server['virtual_addr'];?>
+ </td>
+ </tr>
+<?php endforeach; ?>
+ </table>
+ </tr>
+</table>
+
+<?php
+} ?>
+<?php if (!empty($clients)) { ?>
+<table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td colspan="6" class="listtopic">
+ Client Instance Statistics
+ </td>
+ </tr>
+ <tr>
+ <table style="padding-top:0px; padding-bottom:0px; padding-left:0px; padding-right:0px" class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="listhdrr">Name/Time</td>
+ <td class="listhdrr">Remote/Virtual IP</td>
+ </tr>
+
+ <?php foreach ($clients as $client): ?>
+ <tr name='<?php echo "r:{$client['port']}:{$client['remote_host']}"; ?>'>
+ <td class="listlr">
+ <?=$client['name'];?>
+ </td>
+ <td class="listr">
+ <?=$client['remote_host'];?>
+ </td>
+ <td rowspan="2" align="center">
+ <?php
+ if ($client['status'] == "up") {
+ /* tunnel is up */
+ $iconfn = "interface_up";
+ } else {
+ /* tunnel is down */
+ $iconfn = "interface_down";
+ }
+ echo "<img src ='/themes/{$g['theme']}/images/icons/icon_{$iconfn}.gif' alt='' />";
+ ?>
+ </td>
+ </tr>
+ <tr name='<?php echo "r:{$client['port']}:{$client['remote_host']}"; ?>'>
+ <td class="listlr">
+ <?=$client['connect_time'];?>
+ </td>
+ <td class="listr">
+ <?=$client['virtual_addr'];?>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </table>
+ </tr>
+</table>
+
+<?php
+}
+
+if ($DisplayNote) {
+ echo "<br /><b>NOTE:</b> You need to bind each OpenVPN client to enable its management daemon: use 'Local port' setting in the OpenVPN client screen";
+}
+
+if ((empty($clients)) && (empty($servers)) && (empty($sk_servers))) {
+ echo "No OpenVPN instances defined";
+}
+?>
diff --git a/src/usr/local/www/widgets/widgets/picture.widget.php b/src/usr/local/www/widgets/widgets/picture.widget.php
new file mode 100644
index 0000000..02a002a
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/picture.widget.php
@@ -0,0 +1,96 @@
+<?php
+/*
+ picture.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright 2009 Scott Ullrich
+ Part of pfSense widgets (https://www.pfsense.org)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+
+if ($_GET['getpic']=="true") {
+ $pic_type_s = explode(".", $config['widgets']['picturewidget_filename']);
+ $pic_type = $pic_type_s[1];
+ if ($config['widgets']['picturewidget']) {
+ $data = base64_decode($config['widgets']['picturewidget']);
+ }
+ header("Content-Disposition: inline; filename=\"{$config['widgets']['picturewidget_filename']}\"");
+ header("Content-Type: image/{$pic_type}");
+ header("Content-Length: " . strlen($data));
+ echo $data;
+ exit;
+}
+
+if ($_POST) {
+ if (is_uploaded_file($_FILES['pictfile']['tmp_name'])) {
+ /* read the file contents */
+ $fd_pic = fopen($_FILES['pictfile']['tmp_name'], "rb");
+ while (($buf=fread($fd_pic, 8192)) != '') {
+ // Here, $buf is guaranteed to contain data
+ $data .= $buf;
+ }
+ fclose($fd_pic);
+ if (!$data) {
+ log_error("Warning, could not read file " . $_FILES['pictfile']['tmp_name']);
+ die("Could not read temporary file");
+ } else {
+ $picname = basename($_FILES['uploadedfile']['name']);
+ $config['widgets']['picturewidget'] = base64_encode($data);
+ $config['widgets']['picturewidget_filename'] = $_FILES['pictfile']['name'];
+ write_config("Picture widget saved via Dashboard.");
+ header("Location: /index.php");
+ exit;
+ }
+ }
+}
+
+?>
+
+<input type="hidden" id="picture-config" name="picture-config" value="" />
+
+<div id="picture-settings" class="widgetconfigdiv" style="display:none;">
+ <form action="/widgets/widgets/picture.widget.php" method="post" name="picture_widget_iform" enctype="multipart/form-data">
+ <input name="pictfile" type="file" class="formbtn" id="pictfile" size="20" />
+ <input id="picture_widget_submit" name="picture_widget_submit" type="submit" class="formbtn" value="Upload" />
+ </form>
+</div>
+
+<div id="picture-widgets" style="padding: 5px">
+ <a href='/widgets/widgets/picture.widget.php?getpic=true' target='_blank'>
+ <img border="0" width="100%" height="100%" src="/widgets/widgets/picture.widget.php?getpic=true" alt="picture" />
+ </a>
+</div>
+
+<!-- needed to show the settings widget icon -->
+<script type="text/javascript">
+//<![CDATA[
+ selectIntLink = "picture-configure";
+ textlink = document.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/rss.widget.php b/src/usr/local/www/widgets/widgets/rss.widget.php
new file mode 100644
index 0000000..0850039
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/rss.widget.php
@@ -0,0 +1,198 @@
+<?php
+/*
+ rss.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2009 Scott Ullrich
+ Part of pfSense widgets (https://www.pfsense.org)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+
+if ($_POST['rssfeed']) {
+ $config['widgets']['rssfeed'] = str_replace("\n", ",", htmlspecialchars($_POST['rssfeed'], ENT_QUOTES | ENT_HTML401));
+ $config['widgets']['rssmaxitems'] = str_replace("\n", ",", htmlspecialchars($_POST['rssmaxitems'], ENT_QUOTES | ENT_HTML401));
+ $config['widgets']['rsswidgetheight'] = htmlspecialchars($_POST['rsswidgetheight'], ENT_QUOTES | ENT_HTML401);
+ $config['widgets']['rsswidgettextlength'] = htmlspecialchars($_POST['rsswidgettextlength'], ENT_QUOTES | ENT_HTML401);
+ write_config("Saved RSS Widget feed via Dashboard");
+ header("Location: /");
+}
+
+// Use saved feed and max items
+if ($config['widgets']['rssfeed']) {
+ $rss_feed_s = explode(",", $config['widgets']['rssfeed']);
+}
+
+if ($config['widgets']['rssmaxitems']) {
+ $max_items = $config['widgets']['rssmaxitems'];
+}
+
+if (is_numeric($config['widgets']['rsswidgetheight'])) {
+ $rsswidgetheight = $config['widgets']['rsswidgetheight'];
+}
+
+if (is_numeric($config['widgets']['rsswidgettextlength'])) {
+ $rsswidgettextlength = $config['widgets']['rsswidgettextlength'];
+}
+
+// Set a default feed if none exists
+if (!$rss_feed_s) {
+ $rss_feed_s = "https://blog.pfsense.org";
+ $config['widgets']['rssfeed'] = "https://blog.pfsense.org";
+}
+
+if (!$max_items) {
+ $max_items = 10;
+}
+
+if (!$rsswidgetheight) {
+ $rsswidgetheight = 300;
+}
+
+if (!$rsswidgettextlength) {
+ $rsswidgettextlength = 140; // oh twitter, how do we love thee?
+}
+
+if ($config['widgets']['rssfeed']) {
+ $textarea_txt = str_replace(",", "\n", $config['widgets']['rssfeed']);
+} else {
+ $textarea_txt = "";
+}
+
+?>
+
+<input type="hidden" id="rss-config" name="rss-config" value="" />
+
+<div id="rss-settings" class="widgetconfigdiv" style="display:none;">
+ <form action="/widgets/widgets/rss.widget.php" method="post" name="rss_widget_iform">
+ <textarea name="rssfeed" class="formfld unknown textarea_widget" id="rssfeed" cols="40" rows="3"><?=$textarea_txt;?></textarea>
+ <br />
+ <table summary="rss widget">
+ <tr>
+ <td align="right">
+ Display number of items:
+ </td>
+ <td>
+ <select name='rssmaxitems' id='rssmaxitems'>
+ <option value='<?= $max_items ?>'><?= $max_items ?></option>
+ <?php
+ for ($x=100; $x<5100; $x=$x+100) {
+ echo "<option value='{$x}'>{$x}</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Widget height:
+ </td>
+ <td>
+ <select name='rsswidgetheight' id='rsswidgetheight'>
+ <option value='<?= $rsswidgetheight ?>'><?= $rsswidgetheight ?>px</option>
+ <?php
+ for ($x=100; $x<5100; $x=$x+100) {
+ echo "<option value='{$x}'>{$x}px</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Show how many characters from story:
+ </td>
+ <td>
+ <select name='rsswidgettextlength' id='rsswidgettextlength'>
+ <option value='<?= $rsswidgettextlength ?>'><?= $rsswidgettextlength ?></option>
+ <?php
+ for ($x=10; $x<5100; $x=$x+10) {
+ echo "<option value='{$x}'>{$x}</option>\n";
+ }
+ ?>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+ <input id="rss_widget_submit" name="rss_widget_submit" type="submit" class="formbtn" value="Save" />
+ </td>
+ </tr>
+ </table>
+ </form>
+</div>
+
+<div id="rss-widgets" style="padding: 5px; height: <?=$rsswidgetheight?>px; overflow:scroll;">
+<?php
+ if (!is_dir("/tmp/simplepie")) {
+ mkdir("/tmp/simplepie");
+ mkdir("/tmp/simplepie/cache");
+ }
+ exec("chmod a+rw /tmp/simplepie/.");
+ exec("chmod a+rw /tmp/simplepie/cache/.");
+ require_once("simplepie/simplepie.inc");
+ function textLimit($string, $length, $replacer = '...') {
+ if (strlen($string) > $length) {
+ return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
+ }
+ return $string;
+ }
+ $feed = new SimplePie();
+ $feed->set_cache_location("/tmp/simplepie/");
+ $feed->set_feed_url($rss_feed_s);
+ $feed->init();
+ $feed->handle_content_type();
+ $counter = 1;
+ foreach ($feed->get_items() as $item) {
+ $feed = $item->get_feed();
+ $feed->strip_htmltags();
+ echo "<a target='blank' href='" . $item->get_permalink() . "'>" . $item->get_title() . "</a><br />";
+ $content = $item->get_content();
+ $content = strip_tags($content);
+ echo textLimit($content, $rsswidgettextlength) . "<br />";
+ echo "Source: <a target='_blank' href='" . $item->get_permalink() . "'><img src='" . $feed->get_favicon() . "' alt='" . $feed->get_title() . "' title='" . $feed->get_title() . "' border='0' width='16' height='16' /></a><br />";
+ $counter++;
+ if ($counter > $max_items) {
+ break;
+ }
+ echo "<hr/>";
+ }
+?>
+</div>
+
+<!-- needed to display the widget settings menu -->
+<script type="text/javascript">
+//<![CDATA[
+ selectIntLink = "rss-configure";
+ textlink = document.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/services_status.widget.php b/src/usr/local/www/widgets/widgets/services_status.widget.php
new file mode 100644
index 0000000..f4c3542
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/services_status.widget.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ services_status.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright (C) 2004, 2005 Scott Ullrich
+ All rights reserved.
+
+ services_status.widget.php
+ Copyright (C) 2007 Sam Wenham
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("captiveportal.inc");
+require_once("service-utils.inc");
+require_once("ipsec.inc");
+require_once("vpn.inc");
+require_once("/usr/local/www/widgets/include/services_status.inc");
+
+$services = get_services();
+
+if (isset($_POST['servicestatusfilter'])) {
+ $config['widgets']['servicestatusfilter'] = htmlspecialchars($_POST['servicestatusfilter'], ENT_QUOTES | ENT_HTML401);
+ write_config("Saved Service Status Filter via Dashboard");
+ header("Location: ../../index.php");
+}
+?>
+<input type="hidden" id="services_status-config" name="services_status-config" value="" />
+<div id="services_status-settings" class="widgetconfigdiv" style="display:none;">
+ <form action="/widgets/widgets/services_status.widget.php" method="post" name="services_status_widget_iform">
+ Comma separated list of services to NOT display in the widget<br />
+ <input type="text" size="30" name="servicestatusfilter" class="formfld unknown" id="servicestatusfilter" value="<?= $config['widgets']['servicestatusfilter'] ?>" />
+ <input id="services_status_widget_submit" name="services_status_widget_submit" type="submit" class="formbtn" value="Save" />
+ </form>
+</div>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="services">
+ <tr>
+ <td class="widgetsubheader" align="center"><b>Service</b></td>
+ <td class="widgetsubheader" align="center"><b>Description</b></td>
+ <td class="widgetsubheader" align="center"><b>Status</b></td>
+ <td class="widgetsubheader">&nbsp;</td>
+ </tr>
+<?php
+$skipservices = explode(",", $config['widgets']['servicestatusfilter']);
+
+if (count($services) > 0) {
+ uasort($services, "service_name_compare");
+ foreach ($services as $service) {
+ if ((!$service['name']) || (in_array($service['name'], $skipservices)) || (!is_service_enabled($service['name']))) {
+ continue;
+ }
+ if (empty($service['description'])) {
+ $service['description'] = get_pkg_descr($service['name']);
+ }
+ $service_desc = explode(".",$service['description']);
+ echo "<tr><td class=\"listlr\">" . $service['name'] . "</td>\n";
+ echo "<td class=\"listr\">" . $service_desc[0] . "</td>\n";
+ // if service is running then listr else listbg
+ $bgclass = null;
+ if (get_service_status($service)) {
+ $bgclass = "listr";
+ } else {
+ $bgclass = "listbg";
+ }
+ echo "<td class=\"" . $bgclass . "\" align=\"center\">" . get_service_status_icon($service, false, true) . "</td>\n";
+ echo "<td valign=\"middle\" class=\"list nowrap\">" . get_service_control_links($service) . "</td></tr>\n";
+ }
+} else {
+ echo "<tr><td colspan=\"3\" align=\"center\">" . gettext("No services found") . " . </td></tr>\n";
+}
+?>
+</table>
+
+<!-- needed to display the widget settings menu -->
+<script type="text/javascript">
+//<![CDATA[
+ selectIntLink = "services_status-configure";
+ textlink = document.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/smart_status.widget.php b/src/usr/local/www/widgets/widgets/smart_status.widget.php
new file mode 100644
index 0000000..87f0605
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/smart_status.widget.php
@@ -0,0 +1,76 @@
+<?php
+/*
+ smart_status.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright 2012 mkirbst @ pfSense Forum
+ Part of pfSense widgets (https://www.pfsense.org)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+require_once("/usr/local/www/widgets/include/smart_status.inc");
+?>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="smart status">
+ <tr>
+ <td class="widgetsubheader" align="center"><b><?php echo gettext("Drive") ?></b></td>
+ <td class="widgetsubheader" align="center"><b><?php echo gettext("Ident") ?></b></td>
+ <td class="widgetsubheader" align="center"><b><?php echo gettext("SMART Status") ?></b></td>
+ </tr>
+
+<?php
+$devs = array();
+## Get all adX, daX, and adaX (IDE, SCSI, and AHCI) devices currently installed
+$devs = get_smart_drive_list();
+
+if (count($devs) > 0) {
+ foreach ($devs as $dev) { ## for each found drive do
+ $dev_ident = exec("diskinfo -v /dev/$dev | grep ident | awk '{print $1}'"); ## get identifier from drive
+ $dev_state = trim(exec("smartctl -H /dev/$dev | awk -F: '/^SMART overall-health self-assessment test result/ {print $2;exit}
+/^SMART Health Status/ {print $2;exit}'")); ## get SMART state from drive
+ switch ($dev_state) {
+ case "PASSED":
+ case "OK":
+ $color = "#90EE90";
+ break;
+ case "":
+ $dev_state = "Unknown";
+ $color = "#C0B788";
+ break;
+ default:
+ $color = "#F08080";
+ break;
+ }
+?>
+ <tr>
+ <td class="listlr"><?php echo $dev; ?></td>
+ <td class="listr" align="center"><?php echo $dev_ident; ?></td>
+ <td class="listr" align="center"><span style="background-color:<?php echo $color; ?>">&nbsp;<?php echo $dev_state; ?>&nbsp;</span></td>
+ </tr>
+<?php }
+}
+?>
+</table>
diff --git a/src/usr/local/www/widgets/widgets/system_information.widget.php b/src/usr/local/www/widgets/widgets/system_information.widget.php
new file mode 100644
index 0000000..231f2ee
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/system_information.widget.php
@@ -0,0 +1,322 @@
+<?php
+/*
+ system_information.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+require_once("functions.inc");
+require_once("guiconfig.inc");
+require_once('notices.inc');
+include_once("includes/functions.inc.php");
+
+if ($_REQUEST['getupdatestatus']) {
+ if (isset($config['system']['firmware']['disablecheck'])) {
+ exit;
+ }
+ if (isset($config['system']['firmware']['alturl']['enable'])) {
+ $updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
+ } else {
+ $updater_url = $g['update_url'];
+ }
+
+ $nanosize = "";
+ if ($g['platform'] == "nanobsd") {
+ if (file_exists("/etc/nano_use_vga.txt")) {
+ $nanosize = "-nanobsd-vga-";
+ } else {
+ $nanosize = "-nanobsd-";
+ }
+ $nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
+ }
+
+ @unlink("/tmp/{$g['product_name']}_version");
+ if (download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) {
+ $remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
+ }
+
+ if (empty($remote_version)) {
+ echo "<br /><br />Unable to check for updates.";
+ } else {
+ $current_installed_buildtime = trim(file_get_contents("/etc/version.buildtime"));
+
+ if (!$remote_version) {
+ echo "<br /><br />Unable to check for updates.";
+ } else {
+ $needs_system_upgrade = false;
+ if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version) == -1) {
+ echo "<br /><span class=\"red\" id=\"updatealert\"><b>Update available. </b></span><a href=\"/system_firmware_check.php\">Click Here</a> to view update.";
+ echo "\n<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ echo "jQuery('#updatealert').effect('pulsate',{times: 30},10000);\n";
+ echo "//]]>\n";
+ echo "</script>\n";
+ } else {
+ echo "<br />You are on the latest version.";
+ }
+ }
+ }
+ exit;
+}
+
+$curcfg = $config['system']['firmware'];
+
+$filesystems = get_mounted_filesystems();
+
+?>
+<script type="text/javascript">
+//<![CDATA[
+ jQuery(function() {
+ jQuery("#statePB").progressbar( { value: <?php echo get_pfstate(true); ?> } );
+ jQuery("#mbufPB").progressbar( { value: <?php echo get_mbuf(true); ?> } );
+ jQuery("#cpuPB").progressbar( { value:false } );
+ jQuery("#memUsagePB").progressbar( { value: <?php echo mem_usage(); ?> } );
+
+<?PHP $d = 0; ?>
+<?PHP foreach ($filesystems as $fs): ?>
+ jQuery("#diskUsagePB<?php echo $d++; ?>").progressbar( { value: <?php echo $fs['percent_used']; ?> } );
+<?PHP endforeach; ?>
+
+ <?php if ($showswap == true): ?>
+ jQuery("#swapUsagePB").progressbar( { value: <?php echo swap_usage(); ?> } );
+ <?php endif; ?>
+ <?php if (get_temp() != ""): ?>
+ jQuery("#tempPB").progressbar( { value: <?php echo get_temp(); ?> } );
+ <?php endif; ?>
+ });
+//]]>
+</script>
+
+<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="system information">
+ <tbody>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Name");?></td>
+ <td width="75%" class="listr"><?php echo $config['system']['hostname'] . "." . $config['system']['domain']; ?></td>
+ </tr>
+ <tr>
+ <td width="25%" valign="top" class="vncellt"><?=gettext("Version");?></td>
+ <td width="75%" class="listr">
+ <strong><?=$g['product_version']?></strong>
+ (<?php echo php_uname("m"); ?>)
+ <br />
+ built on <?php readfile("/etc/version.buildtime"); ?>
+ <?php if (!$g['hideuname']): ?>
+ <br />
+ <div id="uname"><a href="#" onclick='swapuname(); return false;'><?php echo php_uname("s") . " " . php_uname("r"); ?></a></div>
+ <?php endif; ?>
+ <?php if (!isset($config['system']['firmware']['disablecheck'])): ?>
+ <div id='updatestatus'><br /><?php echo gettext("Obtaining update status"); ?> ...</div>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php if (!$g['hideplatform']): ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Platform");?></td>
+ <td width="75%" class="listr">
+ <?=htmlspecialchars($g['platform']);?>
+ <?php if (($g['platform'] == "nanobsd") && (file_exists("/etc/nanosize.txt"))) {
+ echo " (" . htmlspecialchars(trim(file_get_contents("/etc/nanosize.txt"))) . ")";
+ } ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php if ($g['platform'] == "nanobsd"): ?>
+ <?
+ global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH;
+ global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH;
+ global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE;
+ nanobsd_detect_slice_info();
+ $rw = is_writable("/") ? "(rw)" : "(ro)";
+ ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("NanoBSD Boot Slice");?></td>
+ <td width="75%" class="listr">
+ <?=htmlspecialchars(nanobsd_friendly_slice_name($BOOT_DEVICE));?> / <?=htmlspecialchars($BOOTFLASH);?> <?php echo $rw; ?>
+ <?php if ($BOOTFLASH != $ACTIVE_SLICE): ?>
+ <br /><br />Next Boot:<br />
+ <?=htmlspecialchars(nanobsd_friendly_slice_name($GLABEL_SLICE));?> / <?=htmlspecialchars($ACTIVE_SLICE);?>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("CPU Type");?></td>
+ <td width="75%" class="listr">
+ <?php
+ echo (htmlspecialchars(get_single_sysctl("hw.model")));
+ ?>
+ <div id="cpufreq"><?= get_cpufreq(); ?></div>
+ <?php
+ $cpucount = get_cpu_count();
+ if ($cpucount > 1): ?>
+ <div id="cpucount">
+ <?= htmlspecialchars($cpucount) ?> CPUs: <?= htmlspecialchars(get_cpu_count(true)); ?></div>
+ <?php endif; ?>
+ </td>
+ </tr>
+ <?php if ($hwcrypto): ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Hardware crypto");?></td>
+ <td width="75%" class="listr"><?=htmlspecialchars($hwcrypto);?></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Uptime");?></td>
+ <td width="75%" class="listr" id="uptime"><?= htmlspecialchars(get_uptime()); ?></td>
+ </tr>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Current date/time");?></td>
+ <td width="75%" class="listr">
+ <div id="datetime"><?= date("D M j G:i:s T Y"); ?></div>
+ </td>
+ </tr>
+ <tr>
+ <td width="30%" class="vncellt"><?=gettext("DNS server(s)");?></td>
+ <td width="70%" class="listr">
+ <?php
+ $dns_servers = get_dns_servers();
+ foreach ($dns_servers as $dns) {
+ echo "{$dns}<br />";
+ }
+ ?>
+ </td>
+ </tr>
+ <?php if ($config['revision']): ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Last config change");?></td>
+ <td width="75%" class="listr"><?= htmlspecialchars(date("D M j G:i:s T Y", intval($config['revision']['time'])));?></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("State table size");?></td>
+ <td width="75%" class="listr">
+ <?php
+ $pfstatetext = get_pfstate();
+ $pfstateusage = get_pfstate(true);
+ ?>
+ <div id="statePB"></div>
+ <span id="pfstateusagemeter"><?= $pfstateusage.'%'; ?></span> (<span id="pfstate"><?= htmlspecialchars($pfstatetext); ?></span>)
+ <br />
+ <a href="diag_dump_states.php"><?=gettext("Show states");?></a>
+ </td>
+ </tr>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("MBUF Usage");?></td>
+ <td width="75%" class="listr">
+ <?php
+ $mbufstext = get_mbuf();
+ $mbufusage = get_mbuf(true);
+ ?>
+ <div id="mbufPB"></div>
+ <span id="mbufusagemeter"><?= $mbufusage.'%'; ?></span> (<span id="mbuf"><?= $mbufstext ?></span>)
+ </td>
+ </tr>
+ <?php if (get_temp() != ""): ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Temperature");?></td>
+ <td width="75%" class="listr">
+ <?php $TempMeter = $temp = get_temp(); ?>
+ <div id="tempPB"></div>
+ <span id="tempmeter"><?= $temp."&#176;C"; ?></span>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Load average");?></td>
+ <td width="75%" class="listr">
+ <div id="load_average" title="Last 1, 5 and 15 minutes"><?= get_load_average(); ?></div>
+ </td>
+ </tr>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("CPU usage");?></td>
+ <td width="75%" class="listr">
+ <div id="cpuPB"></div>
+ <span id="cpumeter">(Updating in 10 seconds)</span>
+ </td>
+ </tr>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Memory usage");?></td>
+ <td width="75%" class="listr">
+ <?php $memUsage = mem_usage(); ?>
+ <div id="memUsagePB"></div>
+ <span id="memusagemeter"><?= $memUsage.'%'; ?></span> of <?= sprintf("%.0f", get_single_sysctl('hw.physmem') / (1024*1024)) ?> MB
+ </td>
+ </tr>
+ <?php if ($showswap == true): ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("SWAP usage");?></td>
+ <td width="75%" class="listr">
+ <?php $swapusage = swap_usage(); ?>
+ <div id="swapUsagePB"></div>
+ <span id="swapusagemeter"><?= $swapusage.'%'; ?></span> of <?= sprintf("%.0f", `/usr/sbin/swapinfo -m | /usr/bin/grep -v Device | /usr/bin/awk '{ print $2;}'`) ?> MB
+ </td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td width="25%" class="vncellt"><?=gettext("Disk usage");?></td>
+ <td width="75%" class="listr">
+ <?php $d = 0; ?>
+ <?php foreach ($filesystems as $fs): ?>
+ <div id="diskUsagePB<?php echo $d; ?>"></div>
+ <?php if (substr(basename($fs['device']), 0, 2) == "md") $fs['type'] .= " in RAM"; ?>
+ <?php echo "{$fs['mountpoint']} ({$fs['type']})";?>: <span id="diskusagemeter<?php echo $d++ ?>"><?= $fs['percent_used'].'%'; ?></span> of <?PHP echo $fs['total_size'];?>
+ <br />
+ <?php endforeach; ?>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<script type="text/javascript">
+//<![CDATA[
+ function swapuname() {
+ jQuery('#uname').html("<?php echo php_uname("a"); ?>");
+ }
+ <?php if (!isset($config['system']['firmware']['disablecheck'])): ?>
+ function getstatus() {
+ scroll(0,0);
+ var url = "/widgets/widgets/system_information.widget.php";
+ var pars = 'getupdatestatus=yes';
+ jQuery.ajax(
+ url,
+ {
+ type: 'get',
+ data: pars,
+ complete: activitycallback
+ });
+ }
+ function activitycallback(transport) {
+ // .html() method process all script tags contained in responseText,
+ // to avoid this we set the innerHTML property
+ jQuery('#updatestatus').prop('innerHTML',transport.responseText);
+ }
+ setTimeout('getstatus()', 4000);
+ <?php endif; ?>
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php b/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php
new file mode 100644
index 0000000..0dac0cb
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/thermal_sensors.widget.php
@@ -0,0 +1,279 @@
+<?php
+/*
+ $Id: thermal_sensors.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Description: Thermal Sensors Widget.
+ NOTE: depends on proper config in System >> Advanced >> Miscellaneous tab >> Thermal Sensors section.
+
+ File location:
+ \usr\local\www\widgets\widgets\
+ Depends on:
+ \usr\local\www\widgets\javascript\thermal_sensors.js
+ \usr\local\www\widgets\include\thermal_sensors.inc
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */
+
+require_once("guiconfig.inc");
+require_once("/usr/local/www/widgets/include/thermal_sensors.inc");
+
+//=========================================================================
+//called by showThermalSensorsData() (jQuery Ajax call) in thermal_sensors.js
+if (isset($_GET["getThermalSensorsData"])) {
+ //get Thermal Sensors data and return
+ echo getThermalSensorsData();
+ return;
+}
+//=========================================================================
+
+
+const WIDGETS_CONFIG_SECTION_KEY = "widgets";
+const THERMAL_SENSORS_WIDGET_SUBSECTION_KEY = "thermal_sensors_widget";
+
+//default constants
+const DEFAULT_WARNING_THRESHOLD = 60; //60 C
+const DEFAULT_CRITICAL_THRESHOLD = 70; //70 C
+const MIN_THRESHOLD_VALUE = 1; //deg C
+const MAX_THRESHOLD_VALUE = 100; //deg C
+
+//NOTE: keys used in $_POST and $config should match text and checkbox inputs' IDs/names in HTML code section
+//=========================================================================
+//save widget config settings on POST
+if ($_POST) {
+ saveThresholdSettings($config, $_POST, "thermal_sensors_widget_zone_warning_threshold", "thermal_sensors_widget_zone_critical_threshold");
+ saveThresholdSettings($config, $_POST, "thermal_sensors_widget_core_warning_threshold", "thermal_sensors_widget_core_critical_threshold");
+
+ //handle checkboxes separately
+ saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_raw_output");
+ saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_show_full_sensor_name");
+ saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_warning");
+ saveGraphDisplaySettings($config, $_POST, "thermal_sensors_widget_pulsate_critical");
+
+ //write settings to config file
+ write_config("Saved thermal_sensors_widget settings via Dashboard.");
+ header("Location: ../../index.php");
+}
+
+function saveThresholdSettings(&$configArray, &$postArray, $warningValueKey, $criticalValueKey) {
+ $warningValue = 0;
+ $criticalValue = 0;
+
+ if (isset($postArray[$warningValueKey])) {
+ $warningValue = (int) $postArray[$warningValueKey];
+ }
+
+ if (isset($postArray[$criticalValueKey])) {
+ $criticalValue = (int) $postArray[$criticalValueKey];
+ }
+
+ if (($warningValue >= MIN_THRESHOLD_VALUE && $warningValue <= MAX_THRESHOLD_VALUE) &&
+ ($criticalValue >= MIN_THRESHOLD_VALUE && $criticalValue <= MAX_THRESHOLD_VALUE) &&
+ ($warningValue < $criticalValue)) {
+ //all validated ok, save to config array
+ $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$warningValueKey] = $warningValue;
+ $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$criticalValueKey] = $criticalValue;
+ }
+}
+
+function saveGraphDisplaySettings(&$configArray, &$postArray, $valueKey) {
+ $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey] = isset($postArray[$valueKey]) ? 1 : 0;
+}
+
+//=========================================================================
+//get Threshold settings from config (apply defaults if missing)
+$thermal_sensors_widget_zoneWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_warning_threshold", DEFAULT_WARNING_THRESHOLD);
+$thermal_sensors_widget_zoneCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_zone_critical_threshold", DEFAULT_CRITICAL_THRESHOLD);
+$thermal_sensors_widget_coreWarningTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_warning_threshold", DEFAULT_WARNING_THRESHOLD);
+$thermal_sensors_widget_coreCriticalTempThreshold = getThresholdValueFromConfig($config, "thermal_sensors_widget_core_critical_threshold", DEFAULT_CRITICAL_THRESHOLD);
+
+//get display settings from config (apply defaults if missing)
+$thermal_sensors_widget_showRawOutput = getBoolValueFromConfig($config, "thermal_sensors_widget_show_raw_output", false);
+$thermal_sensors_widget_showFullSensorName = getBoolValueFromConfig($config, "thermal_sensors_widget_show_full_sensor_name", false);
+$thermal_sensors_widget_pulsateWarning = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_warning", true);
+$thermal_sensors_widget_pulsateCritical = getBoolValueFromConfig($config, "thermal_sensors_widget_pulsate_critical", true);
+
+function getThresholdValueFromConfig(&$configArray, $valueKey, $defaultValue) {
+
+ $thresholdValue = $defaultValue;
+
+ if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) {
+ $thresholdValue = (int) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey];
+ }
+
+ if ($thresholdValue < MIN_THRESHOLD_VALUE || $thresholdValue > MAX_THRESHOLD_VALUE) {
+ //set to default if not in allowed range
+ $thresholdValue = $defaultValue;
+ }
+ return $thresholdValue;
+}
+
+function getBoolValueFromConfig(&$configArray, $valueKey, $defaultValue) {
+
+ $boolValue = false;
+
+ if (isset($configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey])) {
+ $boolValue = (bool) $configArray[WIDGETS_CONFIG_SECTION_KEY][THERMAL_SENSORS_WIDGET_SUBSECTION_KEY][$valueKey];
+ } else {
+ //set to default if not in allowed range
+ $boolValue = $defaultValue;
+ }
+ return $boolValue;
+}
+
+//=========================================================================
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+ //set Thresholds, to be used in thermal_sensors.js
+ var thermal_sensors_widget_zoneWarningTempThreshold = <?= $thermal_sensors_widget_zoneWarningTempThreshold; ?>;
+ var thermal_sensors_widget_zoneCriticalTempThreshold = <?= $thermal_sensors_widget_zoneCriticalTempThreshold; ?>;
+ var thermal_sensors_widget_coreWarningTempThreshold = <?= $thermal_sensors_widget_coreWarningTempThreshold; ?>;
+ var thermal_sensors_widget_coreCriticalTempThreshold = <?= $thermal_sensors_widget_coreCriticalTempThreshold; ?>;
+
+ //set Graph display settings, to be used in thermal_sensors.js
+ var thermal_sensors_widget_showRawOutput = <?= $thermal_sensors_widget_showRawOutput ? "true" : "false"; ?>;
+ var thermal_sensors_widget_showFullSensorName = <?= $thermal_sensors_widget_showFullSensorName ? "true" : "false"; ?>;
+ var thermal_sensors_widget_pulsateWarning = <?= $thermal_sensors_widget_pulsateWarning ? "true" : "false"; ?>;
+ var thermal_sensors_widget_pulsateCritical = <?= $thermal_sensors_widget_pulsateCritical ? "true" : "false"; ?>;
+
+ //start showing temp data
+ //NOTE: the refresh interval will be reset to a proper value in showThermalSensorsData() (thermal_sensors.js).
+ jQuery(document).ready(function() {
+ showThermalSensorsData();
+ });
+//]]>
+</script>
+
+<input type="hidden" id="thermal_sensors-config" name="thermal_sensors-config" value="" />
+<div id="thermal_sensors-settings" class="widgetconfigdiv" style="display:none;">
+ <form action="/widgets/widgets/thermal_sensors.widget.php" method="post" id="thermal_sensors_widget_iform" name="thermal_sensors_widget_iform">
+ <table width="100%" border="0" summary="thermal sensors widget">
+ <tr>
+ <td align="left" colspan="2">
+ <span style="font-weight: bold" >Thresholds in &deg;C (1 to 100):</span>
+ </td>
+ <td align="right" colspan="1">
+ <span style="font-weight: bold" >Display settings:</span>
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Zone Warning:
+ </td>
+ <td>
+ <input type="text" maxlength="3" size="3" class="formfld unknown"
+ name="thermal_sensors_widget_zone_warning_threshold"
+ id="thermal_sensors_widget_zone_warning_threshold"
+ value="<?= $thermal_sensors_widget_zoneWarningTempThreshold; ?>" />
+ </td>
+ <td align="right">
+ <label for="thermal_sensors_widget_show_raw_output">Show raw output (no graph): </label>
+ <input type="checkbox"
+ id="thermal_sensors_widget_show_raw_output"
+ name="thermal_sensors_widget_show_raw_output"
+ value="<?= $thermal_sensors_widget_showRawOutput; ?>" <?= ($thermal_sensors_widget_showRawOutput) ? " checked='checked'" : ""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Zone Critical:
+ </td>
+ <td>
+ <input type="text" maxlength="3" size="3" class="formfld unknown"
+ name="thermal_sensors_widget_zone_critical_threshold"
+ id="thermal_sensors_widget_zone_critical_threshold"
+ value="<?= $thermal_sensors_widget_zoneCriticalTempThreshold; ?>" />
+ </td>
+ <td align="right">
+ <label for="thermal_sensors_widget_show_full_sensor_name">Show full sensor name: </label>
+ <input type="checkbox"
+ id="thermal_sensors_widget_show_full_sensor_name"
+ name="thermal_sensors_widget_show_full_sensor_name"
+ value="<?= $thermal_sensors_widget_showFullSensorName; ?>" <?= ($thermal_sensors_widget_showFullSensorName) ? " checked='checked'" : ""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Core Warning:
+ </td>
+ <td>
+ <input type="text" maxlength="3" size="3" class="formfld unknown"
+ name="thermal_sensors_widget_core_warning_threshold"
+ id="thermal_sensors_widget_core_warning_threshold"
+ value="<?= $thermal_sensors_widget_coreWarningTempThreshold ?>" />
+ </td>
+ <td align="right">
+ <label for="thermal_sensors_widget_pulsate_warning">Pulsate Warning: </label>
+ <input type="checkbox"
+ id="thermal_sensors_widget_pulsate_warning"
+ name="thermal_sensors_widget_pulsate_warning"
+ value="<?= $thermal_sensors_widget_pulsateWarning; ?>" <?= ($thermal_sensors_widget_pulsateWarning) ? " checked='checked'" : ""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ Core Critical:
+ </td>
+ <td>
+ <input type="text" maxlength="3" size="3" class="formfld unknown"
+ name="thermal_sensors_widget_core_critical_threshold"
+ id="thermal_sensors_widget_core_critical_threshold"
+ value="<?= $thermal_sensors_widget_coreCriticalTempThreshold ?>" />
+ </td>
+ <td align="right">
+ <label for="thermal_sensors_widget_pulsate_critical">Pulsate Critical: </label>
+ <input type="checkbox"
+ id="thermal_sensors_widget_pulsate_critical"
+ name="thermal_sensors_widget_pulsate_critical"
+ value="<?= $thermal_sensors_widget_pulsateCritical; ?>" <?= ($thermal_sensors_widget_pulsateCritical) ? " checked='checked'" : ""; ?> />
+ </td>
+ </tr>
+ <tr>
+ <td align="right" colspan="3">
+ <input type="submit" id="thermal_sensors_widget_submit" name="thermal_sensors_widget_submit" class="formbtn" value="Save" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" colspan="3">
+ <span>* You can configure a proper Thermal Sensor / Module under <br />
+ &nbsp;&nbsp;&nbsp;<a href="system_advanced_misc.php">System &gt; Advanced &gt; Miscellaneous : Thermal Sensors section</a>.</span>
+ </td>
+ </tr>
+ </table>
+ </form>
+</div>
+
+<div style="padding: 5px">
+ <div id="thermalSensorsContainer" class="listr">
+ (Updating...)<br /><br />
+ </div>
+</div>
+
+<!-- needed to display the widget settings menu -->
+<script type="text/javascript">
+//<![CDATA[
+ textlink = jQuery("#thermal_sensors-configure");
+ textlink.css({display: "inline"});
+//]]>
+</script>
diff --git a/src/usr/local/www/widgets/widgets/traffic_graphs.widget.php b/src/usr/local/www/widgets/widgets/traffic_graphs.widget.php
new file mode 100644
index 0000000..c5f6286
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/traffic_graphs.widget.php
@@ -0,0 +1,193 @@
+<?php
+/*
+ traffic_graphs.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright 2007 Scott Dale
+ Part of pfSense widgets (https://www.pfsense.org)
+ originally based on m0n0wall (http://m0n0.ch/wall)
+
+ Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net>
+ and Jonathan Watt <jwatt@jwatt.org>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("pfsense-utils.inc");
+require_once("functions.inc");
+
+$first_time = false;
+if (!is_array($config["widgets"]["trafficgraphs"])) {
+ $first_time = true;
+ $config["widgets"]["trafficgraphs"] = array();
+}
+$a_config = &$config["widgets"]["trafficgraphs"];
+
+if (!is_array($a_config["shown"])) {
+ $a_config["shown"] = array();
+}
+if (!is_array($a_config["shown"]["item"])) {
+ $a_config["shown"]["item"] = array();
+}
+
+$ifdescrs = get_configured_interface_with_descr();
+if (isset($config['ipsec']['enable'])) {
+ $ifdescrs['enc0'] = "IPsec";
+}
+
+if ($_POST) {
+ if (isset($_POST["refreshinterval"])) {
+ $a_config["refreshinterval"] = $_POST["refreshinterval"];
+ }
+ if (isset($_POST["scale_type"])) {
+ $a_config["scale_type"] = $_POST["scale_type"];
+ }
+ $a_config["shown"]["item"] = array();
+ foreach ($ifdescrs as $ifname => $ifdescr) {
+ $state = $_POST["shown"][$ifname];
+ if ($state === "show") {
+ $a_config["shown"]["item"][] = $ifname;
+ }
+ }
+ write_config("Updated traffic graph settings via dashboard.");
+ header("Location: /");
+ exit(0);
+}
+
+$shown = array();
+foreach ($a_config["shown"]["item"] as $if) {
+ $shown[$if] = true;
+}
+if ($first_time) {
+ $keys = array_keys($ifdescrs);
+ $shown[$keys[0]] = true;
+}
+
+if (isset($a_config["refreshinterval"])) {
+ $refreshinterval = $a_config["refreshinterval"];
+} else {
+ $refreshinterval = 10;
+}
+
+if (isset($a_config["scale_type"])) {
+ $scale_type = $a_config["scale_type"];
+} else {
+ $scale_type = "up";
+}
+
+?>
+<input type="hidden" id="traffic_graphs-config" name="traffic_graphs-config" value="" />
+
+<div id="traffic_graphs-settings" class="widgetconfigdiv" style="display:none;">
+<form action="/widgets/widgets/traffic_graphs.widget.php" method="post" name="traffic_graphs_widget_iform" id="traffic_graphs_widget_iform">
+ <?php foreach ($ifdescrs as $ifname => $ifdescr) { ?>
+ <input type="hidden" name="shown[<?= $ifname ?>]" value="<?= $shown[$ifname] ? "show" : "hide" ?>" />
+ <?php } ?>
+ Default AutoScale:
+ <?php
+ $scale_type_up="checked=\"checked\"";
+ $scale_type_follow="";
+ if (isset($config["widgets"]["trafficgraphs"]["scale_type"])) {
+ $selected_radio = $config["widgets"]["trafficgraphs"]["scale_type"];
+ if ($selected_radio == "up") {
+ $scale_type_up = "checked=\"checked\"";
+ $scale_type_follow="";
+ } else if ($selected_radio == "follow") {
+ $scale_type_up="";
+ $scale_type_follow = "checked=\"checked\"";
+ }
+ }
+ ?>
+ <input name="scale_type" class="radio" type="radio" id="scale_type_up" value="up" <?php echo $scale_type_up; ?> onchange="updateGraphDisplays();" /> <span>up</span>
+ <input name="scale_type" class="radio" type="radio" id="scale_type_follow" value="follow" <?php echo $scale_type_follow; ?> onchange="updateGraphDisplays();" /> <span>follow</span><br /><br />
+ Refresh Interval:
+ <select name="refreshinterval" class="formfld" id="refreshinterval" onchange="updateGraphDisplays();">
+ <?php for ($i = 1; $i <= 10; $i += 1) { ?>
+ <option value="<?= $i ?>" <?php if ($refreshinterval == $i) echo "selected=\"selected\"";?>><?= $i ?></option>
+ <?php } ?>
+ </select>&nbsp; Seconds<br />&nbsp; &nbsp; &nbsp; <b>Note:</b> changing this setting will increase CPU utilization<br /><br />
+ <input id="traffic_graphs_widget_submit" name="traffic_graphs_widget_submit" type="submit" onclick="return updatePref();" class="formbtn" value="Save Settings" />
+</form>
+</div>
+
+<script type="text/javascript">
+//<![CDATA[
+ d = document;
+ selectIntLink = "traffic_graphs-configure";
+ textlink = d.getElementById(selectIntLink);
+ textlink.style.display = "inline";
+//]]>
+</script>
+
+<?php
+$graphcounter = 0;
+foreach ($ifdescrs as $ifname => $ifdescr) {
+ $ifinfo = get_interface_info($ifname);
+ if ($shown[$ifname]) {
+ $mingraphbutton = "inline";
+ $showgraphbutton = "none";
+ $graphdisplay = "inline";
+ $interfacevalue = "show";
+ $graphcounter++;
+ } else {
+ $mingraphbutton = "none";
+ $showgraphbutton = "inline";
+ $graphdisplay = "none";
+ $interfacevalue = "hide";
+ }
+ if ($ifinfo['status'] != "down") { ?>
+ <div id="<?=$ifname;?>trafficdiv" style="padding: 5px">
+ <div id="<?=$ifname;?>topic" class="widgetsubheader">
+ <div style="float:left;width:49%">
+ <span onclick="location.href='/status_graph.php?if=<?=$ifname;?>'" style="cursor:pointer">Current <?=$ifdescr;?> Traffic</span>
+ </div>
+ <div align="right" style="float:right;width:49%">
+ <div id="<?=$ifname;?>graphdiv-min" onclick='return trafficminimizeDiv("<?= $ifname ?>", true);'
+ style="display:<?php echo $mingraphbutton;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_minus.gif" alt="Minimize <?=$ifname;?> traffic graph" /></div>
+ <div id="<?=$ifname;?>graphdiv-open" onclick='return trafficshowDiv("<?= $ifname ?>", "<?= rawurlencode($ifdescr); ?>", "<?= $refreshinterval ?>", true);'
+ style="display:<?php echo $showgraphbutton;?>; cursor:pointer" ><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_open.gif" alt="Show <?=$ifname;?> traffic graph" /></div>
+ </div>
+ <div style="clear:both;"></div>
+ </div>
+ <div id="<?=$ifname;?>graphdiv" style="display:<?php echo $graphdisplay;?>">
+<?php
+ // If the graph is already enabled by the config then put the object inside the div now.
+ // Otherwise the graph object is inserted by trafficshowDiv JS when the user opens it.
+ if ($graphdisplay == "inline") {
+?>
+ <object data="graph.php?ifnum=<?=$ifname;?>&amp;ifname=<?=rawurlencode($ifdescr);?>&amp;timeint=<?=$refreshinterval;?>&amp;initdelay=<?=$graphcounter * 2;?>" height="100%" width="100%">
+ <param name="id" value="graph" />
+ <param name="type" value="image/svg+xml" />
+ <param name="pluginspage" value="http://www.adobe.com/svg/viewer/install/auto" />
+ </object>
+<?php
+ }
+?>
+ </div>
+ </div>
+ <?php }
+}
+?>
diff --git a/src/usr/local/www/widgets/widgets/wake_on_lan.widget.php b/src/usr/local/www/widgets/widgets/wake_on_lan.widget.php
new file mode 100644
index 0000000..9cb760a
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/wake_on_lan.widget.php
@@ -0,0 +1,80 @@
+<?php
+/*
+ wake_on_lan.widget.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+
+ Copyright (C) 2010 Yehuda Katz
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+$nocsrf = true;
+
+require_once("guiconfig.inc");
+require_once("/usr/local/www/widgets/include/wake_on_lan.inc");
+
+if (is_array($config['wol']['wolentry'])) {
+ $wolcomputers = $config['wol']['wolentry'];
+} else {
+ $wolcomputers = array();
+}
+
+?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="wol status">
+ <tr>
+ <?php
+ echo '<td class="widgetsubheader" align="center">' . gettext("Computer / Device") . '</td>';
+ echo '<td class="widgetsubheader" align="center">' . gettext("Interface") . '</td>';
+ echo '<td class="widgetsubheader" align="center">' . gettext("Status") . '</td>';
+ ?>
+ <td class="widgetsubheader">&nbsp;</td>
+ </tr>
+<?php
+
+if (count($wolcomputers) > 0) {
+ foreach ($wolcomputers as $wolent) {
+ echo '<tr><td class="listlr">' . $wolent['descr'] . '<br />' . $wolent['mac'] . '</td>' . "\n";
+ echo '<td class="listr">' . convert_friendly_interface_to_friendly_descr($wolent['interface']) . '</td>' . "\n";
+
+ $is_active = exec("/usr/sbin/arp -an |/usr/bin/grep {$wolent['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'");
+ if ($is_active == 1) {
+ echo '<td class="listr" align="center">' . "\n";
+ echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_pass.gif\" alt=\"pass\" /> " . gettext("Online") . "</td>\n";
+ } else {
+ echo '<td class="listbg" align="center">' . "\n";
+ echo "<img src=\"/themes/" . $g["theme"] . "/images/icons/icon_block.gif\" alt=\"block\" />&nbsp;<font color=\"white\">" . gettext("Offline") . "</font></td>\n";
+ }
+ echo '<td valign="middle" class="list nowrap">';
+ /*if ($is_active) { */
+ /* Will always show wake-up button even if pfsense thinks it is awake */
+ /* } else { */
+ echo "<a href='services_wol.php?mac={$wolent['mac']}&amp;if={$wolent['interface']}'> ";
+ echo "<img title='" . gettext("Wake Up") . "' border='0' src='./themes/".$g['theme']."/images/icons/icon_wol_all.gif' alt='wol' /></a>\n";
+ /* } */
+ echo "</td></tr>\n";
+ }
+} else {
+ echo "<tr><td colspan=\"4\" align=\"center\">" . gettext("No saved WoL addresses") . ".</td></tr>\n";
+}
+?>
+</table>
+<center><a href="status_dhcp_leases.php" class="navlink">DHCP Leases Status</a></center>
diff --git a/src/usr/local/www/wizard.php b/src/usr/local/www/wizard.php
new file mode 100644
index 0000000..adab493
--- /dev/null
+++ b/src/usr/local/www/wizard.php
@@ -0,0 +1,1061 @@
+<?php
+/* $Id$ */
+/*
+ wizard.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2010 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-pfsensewizardsubsystem
+##|*NAME=pfSense wizard subsystem page
+##|*DESCR=Allow access to the 'pfSense wizard subsystem' page.
+##|*MATCH=wizard.php*
+##|-PRIV
+
+
+require("globals.inc");
+require("guiconfig.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("shaper.inc");
+require_once("rrd.inc");
+
+function gentitle_pkg($pgname) {
+ global $config;
+ return $config['system']['hostname'] . "." . $config['system']['domain'] . " - " . $pgname;
+}
+
+global $g;
+
+$stepid = htmlspecialchars($_GET['stepid']);
+if (isset($_POST['stepid'])) {
+ $stepid = htmlspecialchars($_POST['stepid']);
+}
+if (!$stepid) {
+ $stepid = "0";
+}
+
+$xml = htmlspecialchars($_GET['xml']);
+if ($_POST['xml']) {
+ $xml = htmlspecialchars($_POST['xml']);
+}
+
+if (empty($xml)) {
+ $xml = "not_defined";
+ print_info_box_np(sprintf(gettext("ERROR: Could not open %s."), $xml));
+ die;
+} else {
+ if (file_exists("{$g['www_path']}/wizards/{$xml}")) {
+ $pkg = parse_xml_config_pkg("{$g['www_path']}/wizards/" . $xml, "pfsensewizard");
+ } else {
+ print_info_box_np(sprintf(gettext("ERROR: Could not open %s."), $xml));
+ die;
+ }
+}
+
+if (!is_array($pkg)) {
+ print_info_box_np(sprintf(gettext("ERROR: Could not parse %s/wizards/%s file."), $g['www_path'], $xml));
+ die;
+}
+
+$title = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
+$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
+$totalsteps = $pkg['totalsteps'];
+
+if ($pkg['includefile']) {
+ require_once($pkg['includefile']);
+}
+
+if ($pkg['step'][$stepid]['includefile']) {
+ require_once($pkg['step'][$stepid]['includefile']);
+}
+
+if ($pkg['step'][$stepid]['stepsubmitbeforesave']) {
+ eval($pkg['step'][$stepid]['stepsubmitbeforesave']);
+}
+
+if ($_POST && !$input_errors) {
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if (!empty($field['bindstofield']) and $field['type'] <> "submit") {
+ $fieldname = $field['name'];
+ $fieldname = str_replace(" ", "", $fieldname);
+ $fieldname = strtolower($fieldname);
+ // update field with posted values.
+ if ($field['unsetfield'] <> "") {
+ $unset_fields = "yes";
+ } else {
+ $unset_fields = "";
+ }
+ if ($field['arraynum'] <> "") {
+ $arraynum = $field['arraynum'];
+ } else {
+ $arraynum = "";
+ }
+
+ update_config_field($field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']);
+ }
+
+ }
+ // run custom php code embedded in xml config.
+ if ($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") {
+ eval($pkg['step'][$stepid]['stepsubmitphpaction']);
+ }
+ if (!$input_errors) {
+ write_config();
+ }
+ $stepid++;
+ if ($stepid > $totalsteps) {
+ $stepid = $totalsteps;
+ }
+}
+
+function update_config_field($field, $updatetext, $unset, $arraynum, $field_type) {
+ global $config;
+ $field_split = explode("->", $field);
+ foreach ($field_split as $f) {
+ $field_conv .= "['" . $f . "']";
+ }
+ if ($field_conv == "") {
+ return;
+ }
+ if ($arraynum <> "") {
+ $field_conv .= "[" . $arraynum . "]";
+ }
+ if (($field_type == "checkbox" and $updatetext <> "on") || $updatetext == "") {
+ /*
+ * item is a checkbox, it should have the value "on"
+ * if it was checked
+ */
+ $var = "\$config{$field_conv}";
+ $text = "if (isset({$var})) unset({$var});";
+ eval($text);
+ return;
+ }
+
+ if ($field_type == "interfaces_selection") {
+ $var = "\$config{$field_conv}";
+ $text = "if (isset({$var})) unset({$var});";
+ $text .= "\$config" . $field_conv . " = \"" . $updatetext . "\";";
+ eval($text);
+ return;
+ }
+
+ if ($unset == "yes") {
+ $text = "unset(\$config" . $field_conv . ");";
+ eval($text);
+ }
+ $text = "\$config" . $field_conv . " = \"" . addslashes($updatetext) . "\";";
+ eval($text);
+}
+
+$title = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['title']);
+$description = preg_replace("/pfSense/i", $g['product_name'], $pkg['step'][$stepid]['description']);
+
+// handle before form display event.
+do {
+ $oldstepid = $stepid;
+ if ($pkg['step'][$stepid]['stepbeforeformdisplay'] <> "") {
+ eval($pkg['step'][$stepid]['stepbeforeformdisplay']);
+ }
+} while ($oldstepid != $stepid);
+
+$closehead = false;
+$pgtitle = array($title);
+include("head.inc");
+
+if (file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) {
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n";
+} else {
+ echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"/themes/{$g['theme']}/all.css\" media=\"all\" />";
+}
+?>
+</head>
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC" >
+
+<?php if ($pkg['step'][$stepid]['fields']['field'] <> "") { ?>
+<script type="text/javascript">
+//<![CDATA[
+
+function FieldValidate(userinput, regexp, message) {
+ if (!userinput.match(regexp)) {
+ alert(message);
+ }
+}
+
+function enablechange() {
+<?php
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
+ print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked) {' . "\n";
+ if (isset($field['enablefields'])) {
+ $enablefields = explode(',', $field['enablefields']);
+ foreach ($enablefields as $enablefield) {
+ $enablefield = strtolower($enablefield);
+ print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
+ }
+ }
+ if (isset($field['checkenablefields'])) {
+ $checkenablefields = explode(',', $field['checkenablefields']);
+ foreach ($checkenablefields as $checkenablefield) {
+ $checkenablefield = strtolower($checkenablefield);
+ print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
+ }
+ }
+ print "\t" . '} else {' . "\n";
+ if (isset($field['enablefields'])) {
+ $enablefields = explode(',', $field['enablefields']);
+ foreach ($enablefields as $enablefield) {
+ $enablefield = strtolower($enablefield);
+ print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
+ }
+ }
+ if (isset($field['checkenablefields'])) {
+ $checkenablefields = explode(',', $field['checkenablefields']);
+ foreach ($checkenablefields as $checkenablefield) {
+ $checkenablefield = strtolower($checkenablefield);
+ print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
+ }
+ }
+ print "\t" . '}' . "\n";
+ }
+ }
+?>
+}
+
+function disablechange() {
+<?php
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if (isset($field['disablefields']) or isset($field['checkdisablefields'])) {
+ print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked) {' . "\n";
+ if (isset($field['disablefields'])) {
+ $enablefields = explode(',', $field['disablefields']);
+ foreach ($enablefields as $enablefield) {
+ $enablefield = strtolower($enablefield);
+ print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 1;' . "\n";
+ }
+ }
+ if (isset($field['checkdisablefields'])) {
+ $checkenablefields = explode(',', $field['checkdisablefields']);
+ foreach ($checkenablefields as $checkenablefield) {
+ $checkenablefield = strtolower($checkenablefield);
+ print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 1;' . "\n";
+ }
+ }
+ print "\t" . '} else {' . "\n";
+ if (isset($field['disablefields'])) {
+ $enablefields = explode(',', $field['disablefields']);
+ foreach ($enablefields as $enablefield) {
+ $enablefield = strtolower($enablefield);
+ print "\t\t" . 'document.iform.' . $enablefield . '.disabled = 0;' . "\n";
+ }
+ }
+ if (isset($field['checkdisablefields'])) {
+ $checkenablefields = explode(',', $field['checkdisablefields']);
+ foreach ($checkenablefields as $checkenablefield) {
+ $checkenablefield = strtolower($checkenablefield);
+ print "\t\t" . 'document.iform.' . $checkenablefield . '.checked = 0;' . "\n";
+ }
+ }
+ print "\t" . '}' . "\n";
+ }
+ }
+?>
+}
+
+function showchange() {
+<?php
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if (isset($field['showfields'])) {
+ print "\t" . 'if (document.iform.' . strtolower($field['name']) . '.checked == false) {' . "\n";
+ if (isset($field['showfields'])) {
+ $showfields = explode(',', $field['showfields']);
+ foreach ($showfields as $showfield) {
+ $showfield = strtolower($showfield);
+ //print "\t\t" . 'document.iform.' . $showfield . ".display =\"none\";\n";
+ print "\t\t jQuery('#". $showfield . "').hide();";
+ }
+ }
+ print "\t" . '} else {' . "\n";
+ if (isset($field['showfields'])) {
+ $showfields = explode(',', $field['showfields']);
+ foreach ($showfields as $showfield) {
+ $showfield = strtolower($showfield);
+ #print "\t\t" . 'document.iform.' . $showfield . ".display =\"\";\n";
+ print "\t\t jQuery('#". $showfield . "').show();";
+ }
+ }
+ print "\t" . '}' . "\n";
+ }
+ }
+?>
+}
+//]]>
+</script>
+<?php } ?>
+
+<form action="wizard.php" method="post" name="iform" id="iform">
+<input type="hidden" name="xml" value="<?= htmlspecialchars($xml) ?>" />
+<input type="hidden" name="stepid" value="<?= htmlspecialchars($stepid) ?>" />
+
+<center>
+
+&nbsp;<br />
+
+<?php
+ if ($title == "Reload in progress") {
+ $ip = fixup_string("\$myurl");
+ } else {
+ $ip = "/";
+ }
+ echo "<a href='$ip'>";
+?>
+<img border="0" src="./themes/<?= $g['theme']; ?>/images/logo.gif" alt="logo" /></a>
+<p>&nbsp;</p>
+<div style="width:800px;background-color:#ffffff" id="roundme">
+<?php
+ if ($input_errors) {
+ print_input_errors($input_errors);
+ }
+ if ($savemsg) {
+ print_info_box($savemsg);
+ }
+ if ($_GET['message'] != "") {
+ print_info_box(htmlspecialchars($_GET['message']));
+ }
+ if ($_POST['message'] != "") {
+ print_info_box(htmlspecialchars($_POST['message']));
+ }
+?>
+<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2" summary="wizard">
+ <!-- wizard goes here -->
+ <tr><td>&nbsp;</td></tr>
+ <tr>
+ <td class="tabcont">
+ <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="main area">
+ <tr>
+ <td colspan="2" align="center"><font size="2"><b><?= fixup_string($description) ?></b></font></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ if (!$pkg['step'][$stepid]['disableheader']) {
+ echo "<tr><td colspan=\"2\" class=\"listtopic\">" . fixup_string($title) . "</td></tr>";
+ }
+?>
+
+<?php
+ $inputaliases = array();
+ if ($pkg['step'][$stepid]['fields']['field'] <> "") {
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+
+ $value = $field['value'];
+ $name = $field['name'];
+
+ $name = preg_replace("/\s+/", "", $name);
+ $name = strtolower($name);
+
+ if ($field['bindstofield'] <> "") {
+ $arraynum = "";
+ $field_conv = "";
+ $field_split = explode("->", $field['bindstofield']);
+ // arraynum is used in cases where there is an array of the same field
+ // name such as dnsserver (2 of them)
+ if ($field['arraynum'] <> "") {
+ $arraynum = "[" . $field['arraynum'] . "]";
+ }
+ foreach ($field_split as $f) {
+ $field_conv .= "['" . $f . "']";
+ }
+ if ($field['type'] == "checkbox") {
+ $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }";
+ } else {
+ $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";";
+ }
+ eval($toeval);
+ }
+
+ if (!$field['combinefieldsend']) {
+ echo "<tr>";
+ }
+
+ switch ($field['type']) {
+ case "input":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>\n";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">\n";
+ }
+
+ echo "<input class='formfld unknown' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
+ if ($field['size']) {
+ echo " size='" . $field['size'] . "' ";
+ }
+ if ($field['validate']) {
+ echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
+ }
+ echo " />\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+ break;
+ case "text":
+ echo "<td colspan=\"2\" align=\"center\" class=\"vncell\">\n";
+ if ($field['description'] <> "") {
+ echo "<center><br /> " . $field['description'] . "</center>";
+ }
+ break;
+ case "inputalias":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>\n";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">\n";
+ }
+
+ $inputaliases[] = $name;
+ echo "<input class='formfldalias' autocomplete='off' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\"";
+ if ($field['size']) {
+ echo " size='" . $field['size'] . "' ";
+ }
+ if ($field['validate']) {
+ echo " onchange='FieldValidate(this.value, \"{$field['validate']}\", \"{$field['message']}\");'";
+ }
+ echo " />\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+ break;
+ case "interfaces_selection":
+ case "interface_select":
+ $size = "";
+ $multiple = "";
+ $name = strtolower($name);
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
+ echo "</td>";
+ echo "<td class=\"vtable\">\n";
+ if ($field['size'] <> "") {
+ $size = "size=\"{$field['size']}\"";
+ }
+ if ($field['multiple'] <> "" and $field['multiple'] <> "0") {
+ $multiple = "multiple=\"multiple\"";
+ $name .= "[]";
+ }
+ echo "<select class='formselect' id='{$name}' name='{$name}' {$size} {$multiple}>\n";
+ if ($field['add_to_interfaces_selection'] <> "") {
+ $SELECTED = "";
+ if ($field['add_to_interfaces_selection'] == $value) {
+ $SELECTED = " selected=\"selected\"";
+ }
+ echo "<option value='" . $field['add_to_interfaces_selection'] . "'" . $SELECTED . ">" . $field['add_to_interfaces_selection'] . "</option>\n";
+ }
+ if ($field['type'] == "interface_select") {
+ $interfaces = get_interface_list();
+ } else {
+ $interfaces = get_configured_interface_with_descr();
+ }
+ foreach ($interfaces as $ifname => $iface) {
+ if ($field['type'] == "interface_select") {
+ $iface = $ifname;
+ if ($iface['mac']) {
+ $iface .= " ({$iface['mac']})";
+ }
+ }
+ $SELECTED = "";
+ if ($value == $ifname) $SELECTED = " selected=\"selected\"";
+ $to_echo = "<option value='" . $ifname . "'" . $SELECTED . ">" . $iface . "</option>\n";
+ $to_echo .= "<!-- {$value} -->";
+ $canecho = 0;
+ if ($field['interface_filter'] <> "") {
+ if (stristr($ifname, $field['interface_filter']) == true) {
+ $canecho = 1;
+ }
+ } else {
+ $canecho = 1;
+ }
+ if ($canecho == 1) {
+ echo $to_echo;
+ }
+ }
+ echo "</select>\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "password":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>\n";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">";
+ }
+ echo "<input class='formfld pwd' id='" . $name . "' name='" . $name . "' value=\"" . htmlspecialchars($value) . "\" type='password' ";
+ if ($field['size']) {
+ echo " size='" . $field['size'] . "' ";
+ }
+ echo " />\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "certca_selection":
+ $size = "";
+ $multiple = "";
+ $name = strtolower($name);
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
+ echo "</td>";
+ echo "<td class=\"vtable\">\n";
+ if ($field['size'] <> "") {
+ $size = "size=\"{$field['size']}\"";
+ }
+ echo "<select id='{$name}' name='{$name}' {$size}>\n";
+ if ($field['add_to_certca_selection'] <> "") {
+ $SELECTED = "";
+ if ($field['add_to_certca_selection'] == $value) {
+ $SELECTED = " selected=\"selected\"";
+ }
+ echo "<option value='" . $field['add_to_certca_selection'] . "'" . $SELECTED . ">" . $field['add_to_certca_selection'] . "</option>\n";
+ }
+ foreach ($config['ca'] as $ca) {
+ $name = htmlspecialchars($ca['descr']);
+ $SELECTED = "";
+ if ($value == $name) $SELECTED = " selected=\"selected\"";
+ $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
+ $to_echo .= "<!-- {$value} -->";
+ $canecho = 0;
+ if ($field['certca_filter'] <> "") {
+ if (stristr($name, $field['certca_filter']) == true) {
+ $canecho = 1;
+ }
+ } else {
+ $canecho = 1;
+ }
+ if ($canecho == 1) {
+ echo $to_echo;
+ }
+ }
+ echo "</select>\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "cert_selection":
+ $size = "";
+ $multiple = "";
+ $name = strtolower($name);
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['displayname'] ? $field['displayname'] : $field['name']) . ":\n";
+ echo "</td>";
+ echo "<td class=\"vtable\">\n";
+ if ($field['size'] <> "") {
+ $size = "size=\"{$field['size']}\"";
+ }
+ echo "<select id='{$name}' name='{$name}' {$size}>\n";
+ if ($field['add_to_cert_selection'] <> "") {
+ $SELECTED = "";
+ if ($field['add_to_cert_selection'] == $value) {
+ $SELECTED = " selected=\"selected\"";
+ }
+ echo "<option value='" . $field['add_to_cert_selection'] . "'" . $SELECTED . ">" . $field['add_to_cert_selection'] . "</option>\n";
+ }
+ foreach ($config['cert'] as $ca) {
+ if (stristr($ca['descr'], "webconf")) {
+ continue;
+ }
+ $name = htmlspecialchars($ca['descr']);
+ $SELECTED = "";
+ if ($value == $name) {
+ $SELECTED = " selected=\"selected\"";
+ }
+ $to_echo = "<option value='" . $ca['refid'] . "'" . $SELECTED . ">" . $name . "</option>\n";
+ $to_echo .= "<!-- {$value} -->";
+ $canecho = 0;
+ if ($field['cert_filter'] <> "") {
+ if (stristr($name, $field['cert_filter']) == true) {
+ $canecho = 1;
+ }
+ } else {
+ $canecho = 1;
+ }
+ if ($canecho == 1) {
+ echo $to_echo;
+ }
+ }
+ echo "</select>\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "select":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>\n";
+ }
+ if ($field['size']) {
+ $size = " size='" . $field['size'] . "' ";
+ }
+ if ($field['multiple'] == "yes") {
+ $multiple = "multiple=\"multiple\" ";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">\n";
+ }
+ $onchange = "";
+ foreach ($field['options']['option'] as $opt) {
+ if ($opt['enablefields'] <> "") {
+ $onchange = "onchange=\"enableitems(this.selectedIndex);\" ";
+ }
+ }
+ echo "<select class='formselect' " . $onchange . $multiple . $size . "id='" . $name . "' name='" . $name . "'>\n";
+ foreach ($field['options']['option'] as $opt) {
+ $selected = "";
+ if ($value == $opt['value']) {
+ $selected = " selected=\"selected\"";
+ }
+ echo "\t<option value='" . $opt['value'] . "'" . $selected . ">";
+ if ($opt['displayname']) {
+ echo $opt['displayname'];
+ } else {
+ echo $opt['name'];
+ }
+ echo "</option>\n";
+ }
+ echo "</select>\n";
+ echo "<!-- {$value} -->\n";
+
+ if ($field['description'] <> "") {
+ echo $field['description'];
+ }
+
+ break;
+ case "textarea":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">";
+ }
+ echo "<textarea class='formpre' id='" . $name . "' name='" . $name . "'";
+ if ($field['rows']) {
+ echo " rows='" . $field['rows'] . "' ";
+ }
+ if ($field['cols']) {
+ echo " cols='" . $field['cols'] . "' ";
+ }
+ echo ">" . $value . "</textarea>\n";
+
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "submit":
+ echo "<td>&nbsp;<br /></td></tr>";
+ echo "<tr><td colspan=\"2\" align=\"center\">";
+ echo "<input type='submit' name='" . $name . "' value=\"" . htmlspecialchars($field['name']) . "\" />\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "listtopic":
+ echo "<td>&nbsp;</td></tr>";
+ echo "<tr><td colspan=\"2\" class=\"listtopic\">" . $field['name'] . "<br />\n";
+
+ break;
+ case "subnet_select":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">";
+ }
+ echo "<select class='formselect' name='{$name}'>\n";
+ for ($x=1; $x<33; $x++) {
+ $CHECKED = "";
+ if ($value == $x) {
+ $CHECKED = " selected=\"selected\"";
+ }
+ if ($x <> 31) {
+ echo "<option value='{$x}' {$CHECKED}>{$x}</option>\n";
+ }
+ }
+ echo "</select>\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "timezone_select":
+ exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
+ $timezonelist = array_filter($timezonelist, 'is_timezone');
+ sort($timezonelist);
+
+ /* kill carriage returns */
+ for ($x = 0; $x < count($timezonelist); $x++) {
+ $timezonelist[$x] = str_replace("\n", "", $timezonelist[$x]);
+ }
+
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo fixup_string($field['name']);
+ echo ":</td>";
+ }
+ if (!$field['dontcombinecells']) {
+ echo "<td class=\"vtable\">";
+ }
+ echo "<select class='formselect' name='{$name}'>\n";
+ foreach ($timezonelist as $tz) {
+ if (strstr($tz, "GMT")) {
+ continue;
+ }
+ $SELECTED = "";
+ if ($value == $tz) {
+ $SELECTED = " selected=\"selected\"";
+ }
+ echo "<option value=\"" . htmlspecialchars($tz) . "\" {$SELECTED}>";
+ echo htmlspecialchars($tz);
+ echo "</option>\n";
+ }
+ echo "</select>\n";
+
+ if ($field['description'] <> "") {
+ echo "<br /> " . $field['description'];
+ }
+
+ break;
+ case "checkbox":
+ if ($field['displayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['displayname'];
+ echo ":</td>\n";
+ } else if (!$field['dontdisplayname']) {
+ echo "<td width=\"22%\" align=\"right\" class=\"vncellreq\">\n";
+ echo $field['name'];
+ echo ":</td>";
+ }
+ $checked = "";
+ if ($value <> "") {
+ $checked = " checked=\"checked\"";
+ }
+ echo "<td class=\"vtable\"><input value=\"on\" type='checkbox' id='" . $name . "' name='" . $name . "' " . $checked;
+ if (isset($field['enablefields']) or isset($field['checkenablefields'])) {
+ echo " onclick=\"enablechange()\"";
+ } else if (isset($field['disablefields']) or isset($field['checkdisablefields'])) {
+ echo " onclick=\"disablechange()\"";
+ }
+ echo " />\n";
+
+ if ($field['description'] <> "") {
+ echo $field['description'];
+ }
+
+ break;
+ }
+
+ if ($field['typehint'] <> "") {
+ echo $field['typehint'];
+ }
+ if ($field['warning'] <> "") {
+ echo "<br /><b><font color=\"red\">" . $field['warning'] . "</font></b>";
+ }
+
+ if (!$field['combinefieldsbegin']) {
+ if (!$field['dontcombinecells']) {
+ echo "</td>";
+ }
+
+ echo "</tr>\n";
+ }
+
+ }
+ }
+?>
+ </table>
+ </td>
+ </tr>
+</table>
+<br />&nbsp;
+</div>
+</center>
+</form>
+<script type="text/javascript">
+//<![CDATA[
+ if (typeof ext_change != 'undefined') {
+ ext_change();
+ }
+ if (typeof proto_change != 'undefined') {
+ ext_change();
+ }
+ if (typeof proto_change != 'undefined') {
+ proto_change();
+ }
+
+<?php
+ $isfirst = 0;
+ $aliases = "";
+ $addrisfirst = 0;
+ $aliasesaddr = "";
+ if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) {
+ foreach ($config['aliases']['alias'] as $alias_name) {
+ if ($isfirst == 1) {
+ $aliases .= ",";
+ }
+ $aliases .= "'" . $alias_name['name'] . "'";
+ $isfirst = 1;
+ }
+ }
+?>
+
+ var customarray=new Array(<?php echo $aliases; ?>);
+
+ window.onload = function () {
+
+<?php
+ $counter = 0;
+ foreach ($inputaliases as $alias) {
+ echo "var oTextbox$counter = new AutoSuggestControl(document.getElementById(\"$alias\"), new StateSuggestions(customarray));\n";
+ $counter++;
+ }
+?>
+
+ }
+
+//]]>
+</script>
+
+<?php
+
+$fieldnames_array = Array();
+if ($pkg['step'][$stepid]['disableallfieldsbydefault'] <> "") {
+ // create a fieldname loop that can be used with javascript
+ // hide and enable features.
+ echo "\n<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ echo "function disableall() {\n";
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if ($field['type'] <> "submit" and $field['type'] <> "listtopic") {
+ if (!$field['donotdisable'] <> "") {
+ array_push($fieldnames_array, $field['name']);
+ $fieldname = preg_replace("/\s+/", "", $field['name']);
+ $fieldname = strtolower($fieldname);
+ echo "\tdocument.forms[0]." . $fieldname . ".disabled = 1;\n";
+ }
+ }
+ }
+ echo "}\ndisableall();\n";
+ echo "function enableitems(selectedindex) {\n";
+ echo "disableall();\n";
+ $idcounter = 0;
+ if ($pkg['step'][$stepid]['fields']['field'] <> "") {
+ echo "\tswitch (selectedindex) {\n";
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $field) {
+ if ($field['options']['option'] <> "") {
+ foreach ($field['options']['option'] as $opt) {
+ if ($opt['enablefields'] <> "") {
+ echo "\t\tcase " . $idcounter . ":\n";
+ $enablefields_split = explode(",", $opt['enablefields']);
+ foreach ($enablefields_split as $efs) {
+ $fieldname = preg_replace("/\s+/", "", $efs);
+ $fieldname = strtolower($fieldname);
+ if ($fieldname <> "") {
+ $onchange = "\t\t\tdocument.forms[0]." . $fieldname . ".disabled = 0; \n";
+ echo $onchange;
+ }
+ }
+ echo "\t\t\tbreak;\n";
+ }
+ $idcounter = $idcounter + 1;
+ }
+ }
+ }
+ echo "\t}\n";
+ }
+ echo "}\n";
+ echo "//]]>\n";
+ echo "</script>\n\n";
+}
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+NiftyCheck();
+var bgcolor = document.getElementsByTagName("body")[0].style.backgroundColor;
+Rounded("div#roundme","all",bgcolor,"#FFFFFF","smooth");
+enablechange();
+disablechange();
+showchange();
+//]]>
+</script>
+
+<?php
+if ($pkg['step'][$stepid]['stepafterformdisplay'] <> "") {
+ // handle after form display event.
+ eval($pkg['step'][$stepid]['stepafterformdisplay']);
+}
+
+if ($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") {
+ // handle after form display event.
+ echo "\n<script type=\"text/javascript\">\n";
+ echo "//<![CDATA[\n";
+ echo $pkg['step'][$stepid]['javascriptafterformdisplay'] . "\n";
+ echo "//]]>\n";
+ echo "</script>\n\n";
+}
+
+/*
+ * HELPER FUNCTIONS
+ */
+
+function fixup_string($string) {
+ global $config, $g, $myurl, $title;
+ $newstring = $string;
+ // fixup #1: $myurl -> http[s]://ip_address:port/
+ switch ($config['system']['webgui']['protocol']) {
+ case "http":
+ $proto = "http";
+ break;
+ case "https":
+ $proto = "https";
+ break;
+ default:
+ $proto = "http";
+ break;
+ }
+ $port = $config['system']['webgui']['port'];
+ if ($port != "") {
+ if (($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) {
+ $urlport = ":" . $port;
+ } elseif ($port != "80" and $port != "443") {
+ $urlport = ":" . $port;
+ } else {
+ $urlport = "";
+ }
+ }
+ $http_host = $_SERVER['SERVER_NAME'];
+ $urlhost = $http_host;
+ // If finishing the setup wizard, check if accessing on a LAN or WAN address that changed
+ if ($title == "Reload in progress") {
+ if (is_ipaddr($urlhost)) {
+ $host_if = find_ip_interface($urlhost);
+ if ($host_if) {
+ $host_if = convert_real_interface_to_friendly_interface_name($host_if);
+ if ($host_if && is_ipaddr($config['interfaces'][$host_if]['ipaddr'])) {
+ $urlhost = $config['interfaces'][$host_if]['ipaddr'];
+ }
+ }
+ } else if ($urlhost == $config['system']['hostname']) {
+ $urlhost = $config['wizardtemp']['system']['hostname'];
+ } else if ($urlhost == $config['system']['hostname'] . '.' . $config['system']['domain']) {
+ $urlhost = $config['wizardtemp']['system']['hostname'] . '.' . $config['wizardtemp']['system']['domain'];
+ }
+ }
+ if ($urlhost != $http_host) {
+ file_put_contents("{$g['tmp_path']}/setupwizard_lastreferrer", $proto . "://" . $http_host . $urlport . $_SERVER['REQUEST_URI']);
+ }
+ $myurl = $proto . "://" . $urlhost . $urlport . "/";
+
+ if (strstr($newstring, "\$myurl")) {
+ $newstring = str_replace("\$myurl", $myurl, $newstring);
+ }
+ // fixup #2: $wanip
+ if (strstr($newstring, "\$wanip")) {
+ $curwanip = get_interface_ip();
+ $newstring = str_replace("\$wanip", $curwanip, $newstring);
+ }
+ // fixup #3: $lanip
+ if (strstr($newstring, "\$lanip")) {
+ $lanip = get_interface_ip("lan");
+ $newstring = str_replace("\$lanip", $lanip, $newstring);
+ }
+ // fixup #4: fix'r'up here.
+ return $newstring;
+}
+
+function is_timezone($elt) {
+ return !preg_match("/\/$/", $elt);
+}
+
+?>
+
+</body>
+</html>
diff --git a/src/usr/local/www/wizards/openvpn_wizard.inc b/src/usr/local/www/wizards/openvpn_wizard.inc
new file mode 100644
index 0000000..ee530a2
--- /dev/null
+++ b/src/usr/local/www/wizards/openvpn_wizard.inc
@@ -0,0 +1,676 @@
+<?php
+/*
+ Copyright (C) 2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+
+ pfSense_MODULE: openvpn
+*/
+require_once("openvpn.inc");
+
+function has_special_chars($text) {
+ return preg_match('/[^A-Za-z0-9 _-]/', $text);
+}
+
+function step1_submitphpaction() {
+ global $stepid, $config;
+ if ($_POST['authtype'] == "local") {
+ $stepid = 4;
+ $config['ovpnserver']['step1']['type'] = "local";
+ } else if ($_POST['authtype'] == "ldap") {
+ $stepid = 0;
+ } else if ($_POST['authtype'] == "radius") {
+ $stepid = 2;
+ $config['ovpnserver']['step1']['type'] = "radius";
+ unset($config['ovpnserver']['step1']['uselist']);
+ }
+}
+
+function step2_stepbeforeformdisplay() {
+ global $pkg, $stepid;
+
+ $fields =& $pkg['step'][1]['fields']['field'];
+
+ $found = false;
+ $authlist = auth_get_authserver_list();
+ $fields[1]['options']['option'] = array();
+ foreach ($authlist as $i => $auth) {
+ if ($auth['type'] != "ldap")
+ continue;
+ $found = true;
+ $opts = array();
+ $opts['name'] = $auth['name'];
+ $opts['value'] = $auth['name'];
+ $fields[1]['options']['option'][] = $opts;
+ }
+ if ($found == false) {
+ $stepid = 2;
+ }
+}
+
+function step2_submitphpaction() {
+ global $stepid;
+
+ if (isset($_POST['next'])) {
+ $_POST['uselist'] = "";
+ $stepid +=3;
+ }
+}
+
+function step3_submitphpaction() {
+ global $stepid, $savemsg, $config;
+
+ /* Default LDAP port is 389 for TCP and 636 for SSL */
+ if (empty($_POST['port'])) {
+ if ($_POST['transport'] == "tcp")
+ $config['ovpnserver']['step2']['port'] = 389;
+ elseif ($_POST['transport'] == "ssl")
+ $config['ovpnserver']['step2']['port'] = 636;
+ } elseif (!is_port($_POST['port'])) {
+ $stepid--;
+ $savemsg = "Please enter a valid port number.";
+ }
+
+ if (empty($_POST['name']) || empty($_POST['ip']) ||empty($_POST['transport']) ||
+ empty($_POST['scope']) || empty($_POST['basedn']) || empty($_POST['authscope']) || empty($_POST['nameattr'])) {
+ $stepid--;
+ $savemsg = "Please enter all information for authentication server.";
+ } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
+ $stepid--;
+ $savemsg = "Please choose a different name because an authentication server with this name already exists.";
+ } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
+ $stepid--;
+ $savemsg = "Please enter a valid IP address or hostname for the authentication server.";
+ } else {
+ $config['ovpnserver']['step2']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ $stepid += 2;
+ }
+}
+
+function step4_stepbeforeformdisplay() {
+ global $pkg, $stepid;
+
+ $fields =& $pkg['step'][3]['fields']['field'];
+
+ $found = false;
+ $authlist = auth_get_authserver_list();
+ $fields[1]['options']['option'] = array();
+ foreach ($authlist as $i => $auth) {
+ if ($auth['type'] != "radius")
+ continue;
+ $found = true;
+ $opts = array();
+ $opts['name'] = $auth['name'];
+ $opts['value'] = $auth['name'];
+ $fields[1]['options']['option'][] = $opts;
+ }
+ if ($found == false)
+ $stepid = 4;
+}
+
+function step4_submitphpaction() {
+ global $stepid;
+
+ if (isset($_POST['next'])) {
+ $_POST['uselist'] = "";
+ $stepid++;
+ }
+}
+
+function step5_submitphpaction() {
+ global $stepid, $savemsg, $config;
+
+ /* Default RADIUS Auth port = 1812 */
+ if (empty($_POST['port'])) {
+ $config['ovpnserver']['step2']['port'] = 1812;
+ } elseif (!is_port($_POST['port'])) {
+ $stepid--;
+ $savemsg = "Please enter a valid port number.";
+ }
+
+ if (empty($_POST['name']) || empty($_POST['ip']) || empty($_POST['secret'])) {
+ $stepid--;
+ $savemsg = "Please enter all information for authentication server.";
+ } else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
+ $stepid--;
+ $savemsg = "Please choose a different name because an authentication server with this name already exists.";
+ } elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
+ $stepid--;
+ $savemsg = "Please enter a valid IP address or hostname for the authentication server.";
+ } else {
+ $config['ovpnserver']['step2']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ }
+}
+
+function step6_stepbeforeformdisplay() {
+ global $stepid, $config;
+
+ if (count($config['ca']) < 1) {
+ $stepid++;
+ }
+}
+
+function step6_submitphpaction() {
+ global $stepid, $config;
+
+ if (isset($_POST['next'])) {
+ $_POST['uselist'] = "";
+ unset($config['ovpnserver']['step6']['uselist']);
+ $stepid++;
+ } else {
+ $config['ovpnserver']['step6']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ }
+}
+
+function step7_submitphpaction() {
+ global $input_errors, $stepid, $savemsg, $_POST, $config;
+
+ $canames = array();
+ $cacns = array();
+ if (is_array($config['ca'])) {
+ foreach($config['ca'] as $ca) {
+ $canames[] = $ca['descr'];
+ $cainfo = cert_get_subject_hash($ca['crt']);
+ $cacns[] = $cainfo["CN"];
+ }
+ }
+
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
+ $input_errors[] = "The field 'Descriptive Name' contains invalid characters.";
+ }
+
+ if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
+ empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
+ empty($_POST['organization']) || empty($_POST['email'])) {
+ $stepid--;
+ $savemsg = "Please enter all information for the new Certificate Authority.";
+ } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) ||
+ has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
+ $stepid--;
+ $input_errors[] = "Please do not use special characters in Certificate field names.";
+ } elseif (in_array($_POST['descr'], $canames) || in_array($_POST['descr'], $cacns)) {
+ $stepid--;
+ $savemsg = "Please enter a different name for the Certificate Authority. A Certificate Authority with that name already exists.";
+ } elseif (strlen($_POST['country']) != 2) {
+ $stepid--;
+ $savemsg = "Please enter only a two-letter ISO country code";
+ } else {
+ $config['ovpnserver']['step6']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ }
+}
+
+function step8_stepbeforeformdisplay() {
+ global $stepid, $config;
+
+ if (count($config['cert']) < 1 ||
+ (count($config['cert']) == 1 && stristr($config['cert'][0]['descr'], "webconf"))) {
+ $stepid++;
+ }
+}
+
+function step8_submitphpaction() {
+ global $stepid, $config, $_POST;
+
+ if (isset($_POST['next'])) {
+ $_POST['uselist'] = "";
+ unset($config['ovpnserver']['step9']['uselist']);
+ $stepid++;
+ } else {
+ $config['ovpnserver']['step6']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ }
+}
+
+function step9_stepbeforeformdisplay() {
+ global $config, $pkg, $stepid;
+
+ $pconfig = $config['ovpnserver'];
+
+ if (isset($pconfig['step6']['uselist'])) {
+ $country = $pconfig['step6']['country'];
+ $state = $pconfig['step6']['state'];
+ $city = $pconfig['step6']['city'];
+ $org = $pconfig['step6']['organization'];
+ $email = $pconfig['step6']['email'];
+ } else {
+ $ca = lookup_ca($pconfig['step6']['authcertca']);
+ $cavl = cert_get_subject_array($ca['crt']);
+ $country = $cavl[0]['v'];
+ $state = $cavl[1]['v'];
+ $city = $cavl[2]['v'];
+ $org = $cavl[3]['v'];
+ $email = $cavl[4]['v'];
+ }
+ $fields =& $pkg['step'][$stepid]['fields']['field'];
+
+ foreach ($fields as $idx => $field) {
+ switch ($field['name']) {
+ case 'country':
+ $fields[$idx]['value'] = $country;
+ break;
+ case 'state':
+ $fields[$idx]['value'] = $state;
+ break;
+ case 'city':
+ $fields[$idx]['value'] = $city;
+ break;
+ case 'organization':
+ $fields[$idx]['value'] = $org;
+ break;
+ case 'email':
+ $fields[$idx]['value'] = $email;
+ break;
+ }
+ }
+}
+
+function step9_submitphpaction() {
+ global $input_errors, $stepid, $savemsg, $_POST, $config;
+
+ $certnames = array();
+ $certcns = array();
+ if (is_array($config['cert'])) {
+ foreach($config['cert'] as $cert) {
+ $certnames[] = $cert['descr'];
+ $certinfo = cert_get_subject_hash($cert['crt']);
+ $certcns[] = $certinfo["CN"];
+ }
+ }
+
+ if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
+ $input_errors[] = "The field 'Descriptive Name' contains invalid characters.";
+ }
+
+ if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
+ empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
+ empty($_POST['organization']) || empty($_POST['email'])) {
+ $stepid--;
+ $savemsg = "Please enter all information for the new certificate.";
+ } elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) ||
+ has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
+ $stepid--;
+ $input_errors[] = "Please do not use special characters in Certificate field names.";
+ } elseif (in_array($_POST['descr'], $certnames) || in_array($_POST['descr'], $certcns)) {
+ $stepid--;
+ $savemsg = "Please enter a different name for the Certificate. A Certificate with that name/common name already exists.";
+ } elseif (strlen($_POST['country']) != 2) {
+ $stepid--;
+ $savemsg = "Please enter only a two-letter ISO country code";
+ } else {
+ $config['ovpnserver']['step9']['uselist'] = "on";
+ $_POST['uselist'] = "on";
+ }
+}
+
+function step10_stepbeforeformdisplay() {
+ global $pkg, $stepid, $netbios_nodetypes;
+
+ foreach ($pkg['step'][$stepid]['fields']['field'] as $idx => $field) {
+ if ($field['name'] == "crypto") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ $cipherlist = openvpn_get_cipherlist();
+ foreach ($cipherlist as $name => $desc) {
+ $opt = array();
+ $opt['name'] = $desc;
+ $opt['value'] = $name;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
+ } else if ($field['name'] == "digest") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ $digestlist = openvpn_get_digestlist();
+ foreach ($digestlist as $name => $desc) {
+ $opt = array();
+ $opt['name'] = $desc;
+ $opt['value'] = $name;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
+ } else if ($field['name'] == "compression") {
+ global $openvpn_compression_modes;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ foreach ($openvpn_compression_modes as $name => $desc) {
+ $opt = array();
+ $opt['name'] = $desc;
+ $opt['value'] = $name;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
+ } else if ($field['name'] == "engine") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ $engines = openvpn_get_engines();
+ foreach ($engines as $name => $desc) {
+ $opt = array();
+ $opt['name'] = $desc;
+ $opt['value'] = $name;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
+ } else if ($field['name'] == "nbttype") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
+ foreach ($netbios_nodetypes as $type => $name) {
+ $opt = array();
+ $opt['name'] = $name;
+ $opt['value'] = $type;
+ $pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
+ }
+ } else if ($field['name'] == "localport") {
+ $pkg['step'][$stepid]['fields']['field'][$idx]['value'] = openvpn_port_next('UDP');
+ }
+ }
+}
+
+function step10_submitphpaction() {
+ global $savemsg, $stepid;
+
+ /* Default OpenVPN port to next available port if left empty. */
+ if (empty($_POST['localport']))
+ $pconfig["step10"]["localport"] = openvpn_port_next('UDP');
+
+ /* input validation */
+ if ($result = openvpn_validate_port($_POST['localport'], 'Local port'))
+ $input_errors[] = $result;
+
+ if ($result = openvpn_validate_cidr($_POST['tunnelnet'], 'Tunnel Network', false, "ipv4"))
+ $input_errors[] = $result;
+
+ if ($result = openvpn_validate_cidr($_POST['localnet'], 'Local Network', true, "ipv4"))
+ $input_errors[] = $result;
+
+ $portused = openvpn_port_used($_POST['protocol'], $_POST['interface'], $_POST['localport']);
+ if ($portused != 0)
+ $input_errors[] = "The specified 'Local port' is in use. Please enter a port not already in use.";
+
+ if (!isset($_POST['generatetlskey']) && isset($_POST['tlsauthentication']))
+ if (!strstr($_POST['tlssharedkey'], "-----BEGIN OpenVPN Static key V1-----") ||
+ !strstr($_POST['tlssharedkey'], "-----END OpenVPN Static key V1-----"))
+ $input_errors[] = "The field 'TLS Authentication Key' does not appear to be valid";
+
+ if (!empty($_POST['dnsserver1']) && !is_ipaddr(trim($_POST['dnsserver1'])))
+ $input_errors[] = "The field 'DNS Server #1' must contain a valid IP address";
+ if (!empty($_POST['dnsserver2']) && !is_ipaddr(trim($_POST['dnsserver2'])))
+ $input_errors[] = "The field 'DNS Server #2' must contain a valid IP address";
+ if (!empty($_POST['dnsserver3']) && !is_ipaddr(trim($_POST['dnsserver3'])))
+ $input_errors[] = "The field 'DNS Server #3' must contain a valid IP address";
+ if (!empty($_POST['dnsserver4']) && !is_ipaddr(trim($_POST['dnsserver4'])))
+ $input_errors[] = "The field 'DNS Server #4' must contain a valid IP address";
+
+ if (!empty($_POST['ntpserver1']) && !is_ipaddr(trim($_POST['ntpserver1'])))
+ $input_errors[] = "The field 'NTP Server #1' must contain a valid IP address";
+ if (!empty($_POST['ntpserver2']) && !is_ipaddr(trim($_POST['ntpserver2'])))
+ $input_errors[] = "The field 'NTP Server #2' must contain a valid IP address";
+
+ if (!empty($_POST['winsserver1']) && !is_ipaddr(trim($_POST['winsserver1'])))
+ $input_errors[] = "The field 'WINS Server #1' must contain a valid IP address";
+ if (!empty($_POST['winsserver2']) && !is_ipaddr(trim($_POST['winsserver2'])))
+ $input_errors[] = "The field 'WINS Server #2' must contain a valid IP address";
+
+ if ($_POST['concurrentcon'] && !is_numeric($_POST['concurrentcon']))
+ $input_errors[] = "The field 'Concurrent connections' must be numeric.";
+
+ if (empty($_POST['tunnelnet']))
+ $input_errors[] = "You must specify a 'Tunnel network'.";
+
+ if (count($input_errors) > 0) {
+ $savemsg = $input_errors[0];
+ $stepid = $stepid - 1;
+ }
+}
+
+function step12_submitphpaction() {
+ global $config;
+
+ $pconfig = $config['ovpnserver'];
+
+ if (!is_array($config['ovpnserver'])) {
+ $message = "No configuration found, please try again.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
+ exit;
+ }
+
+ if ($pconfig['step1']['type'] == "local") {
+ $auth = array();
+ $auth['name'] = "Local Database";
+ $auth['type'] = "local";
+ } else if (isset($pconfig['step2']['uselist'])) {
+ $auth = array();
+ $auth['type'] = $pconfig['step1']['type'];
+ $auth['refid'] = uniqid();
+ $auth['name'] = $pconfig['step2']['authtype'];
+
+ if ($auth['type'] == "ldap") {
+ $auth['host'] = $pconfig['step2']['ip'];
+ $auth['ldap_port'] = $pconfig['step2']['port'];
+ if ($pconfig['step1']['transport'] == "tcp")
+ $auth['ldap_urltype'] = 'TCP - Standard';
+ else
+ $auth['ldap_urltype'] = 'SSL - Encrypted';
+ $auth['ldap_protver'] = 3;
+ $auth['ldap_scope'] = $pconfig['step2']['scope'];
+ $auth['ldap_basedn'] = $pconfig['step2']['basedn'];
+ $auth['ldap_authcn'] = $pconfig['step2']['authscope'];
+ $auth['ldap_binddn'] = $pconfig['step2']['userdn'];
+ $auth['ldap_bindpw'] = $pconfig['step2']['passdn'];
+ $auth['ldap_attr_user'] = $pconfig['step1']['nameattr'];
+ $auth['ldap_attr_member'] = $pconfig['step1']['memberattr'];
+ $auth['ldap_attr_group'] = $pconfig['step1']['groupattr'];
+ } else if ($auth['type'] == "radius") {
+ $auth['host'] = $pconfig['step2']['ip'];
+ $auth['radius_auth_port'] = $pconfig['step2']['port'];
+ $auth['radius_secret'] = $pconfig['step2']['password'];
+ $auth['radius_srvcs'] = "auth";
+ }
+ if (!is_array($config['system']['authserver']))
+ $config['system']['authserver'] = array();
+
+ $config['system']['authserver'][] = $auth;
+ } else if (!isset($pconfig['step2']['uselist']) && empty($pconfig['step2']['authserv'])) {
+ $message = "Please choose an authentication server .";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
+ exit;
+ } else if (!($auth = auth_get_authserver($pconfig['step2']['authserv']))) {
+ $message = "An invalid authentication server has been specified.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
+ exit;
+ }
+
+ if (isset($pconfig['step6']['uselist']) && !empty($pconfig['step6']['certca'])) {
+ $ca = array();
+ $ca['refid'] = uniqid();
+ $ca['descr'] = $pconfig['step6']['certca'];
+ $dn = array(
+ 'countryName' => $pconfig['step6']['country'],
+ 'stateOrProvinceName' => $pconfig['step6']['state'],
+ 'localityName' => $pconfig['step6']['city'],
+ 'organizationName' => $pconfig['step6']['organization'],
+ 'emailAddress' => $pconfig['step6']['email'],
+ 'commonName' => $pconfig['step6']['certca']);
+
+ ca_create($ca, $pconfig['step6']['keylength'], $pconfig['step6']['lifetime'], $dn, "sha256");
+ if (!is_array($config['ca']))
+ $config['ca'] = array();
+
+ $config['ca'][] = $ca;
+ } else if (!isset($pconfig['step6']['uselist']) && empty($pconfig['step6']['authcertca'])) {
+ $message = "Please choose a Certificate Authority.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
+ exit;
+ } else if (!($ca = lookup_ca($pconfig['step6']['authcertca']))) {
+ $message = "An invalid Certificate Authority has been specified.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
+ exit;
+ }
+
+ if (isset($pconfig['step9']['uselist'])) {
+ $cert = array();
+ $cert['refid'] = uniqid();
+ $cert['descr'] = $pconfig['step9']['certname'];
+ $dn = array(
+ 'countryName' => $pconfig['step9']['country'],
+ 'stateOrProvinceName' => $pconfig['step9']['state'],
+ 'localityName' => $pconfig['step9']['city'],
+ 'organizationName' => $pconfig['step9']['organization'],
+ 'emailAddress' => $pconfig['step9']['email'],
+ 'commonName' => $pconfig['step9']['certname']);
+
+ cert_create($cert, $ca['refid'], $pconfig['step9']['keylength'], $pconfig['step9']['lifetime'], $dn, 'server', "sha256");
+ if (!is_array($config['cert']))
+ $config['cert'] = array();
+
+ $config['cert'][] = $cert;
+ } else if (!isset($pconfig['step9']['uselist']) && empty($pconfig['step9']['authcertname'])) {
+ $message = "Please choose a Certificate.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
+ exit;
+ } else if (!($cert = lookup_cert($pconfig['step9']['authcertname']))) {
+ $message = "An invalid Certificate has been specified.";
+ header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
+ exit;
+ }
+ $server = array();
+ $server['vpnid'] = openvpn_vpnid_next();
+ switch ($auth['type']) {
+ case "ldap":
+ $server['authmode'] = $auth['name'];
+ $server['mode'] = "server_user";
+ break;
+ case "radius":
+ $server['authmode'] = $auth['name'];
+ $server['mode'] = "server_user";
+ break;
+ default:
+ $server['authmode'] = "Local Database";
+ $server['mode'] = "server_tls_user";
+ break;
+ }
+ $server['caref'] = $ca['refid'];
+ $server['certref'] = $cert['refid'];
+ $server['protocol'] = $pconfig['step10']['protocol'];
+ $server['interface'] = $pconfig['step10']['interface'];
+ if (isset($pconfig['step10']['localport']))
+ $server['local_port'] = $pconfig['step10']['localport'];
+
+ if (strlen($pconfig['step10']['descr']) > 30)
+ $pconfig['step10']['descr'] = substr($pconfig['step10']['descr'], 0, 30);
+ $server['description'] = $pconfig['step10']['descr'];
+ $server['custom_options'] = $pconfig['step10']['advanced'];
+ if (isset($pconfig['step10']['tlsauth'])) {
+ if (isset($pconfig['step10']['gentlskey']))
+ $tlskey = openvpn_create_key();
+ else
+ $tlskey = $pconfig['step10']['tlskey'];
+ $server['tls'] = base64_encode($tlskey);
+ }
+ $server['dh_length'] = $pconfig['step10']['dhkey'];
+ $server['tunnel_network'] = $pconfig['step10']['tunnelnet'];
+ if (isset($pconfig['step10']['rdrgw']))
+ $server['gwredir'] = $pconfig['step10']['rdrgw'];
+ if (isset($pconfig['step10']['localnet']))
+ $server['local_network'] = $pconfig['step10']['localnet'];
+ if (isset($pconfig['step10']['concurrentcon']))
+ $server['maxclients'] = $pconfig['step10']['concurrentcon'];
+ if (isset($pconfig['step10']['compression']))
+ $server['compression'] = $pconfig['step10']['compression'];
+ if (isset($pconfig['step10']['tos']))
+ $server['passtos'] = $pconfig['step10']['tos'];
+ if (isset($pconfig['step10']['interclient']))
+ $server['client2client'] = $pconfig['step10']['interclient'];
+ if (isset($pconfig['step10']['duplicate_cn']))
+ $server['duplicate_cn'] = $pconfig['step10']['duplicate_cn'];
+ if (isset($pconfig['step10']['dynip']))
+ $server['dynamic_ip'] = $pconfig['step10']['dynip'];
+ if (isset($pconfig['step10']['addrpool']))
+ $server['pool_enable'] = $pconfig['step10']['addrpool'];
+ if (isset($pconfig['step10']['defaultdomain']))
+ $server['dns_domain'] = $pconfig['step10']['defaultdomain'];
+ if (isset($pconfig['step10']['dns1']))
+ $server['dns_server1'] = $pconfig['step10']['dns1'];
+ if (isset($pconfig['step10']['dns2']))
+ $server['dns_server2'] = $pconfig['step10']['dns2'];
+ if (isset($pconfig['step10']['dns3']))
+ $server['dns_server3'] = $pconfig['step10']['dns3'];
+ if (isset($pconfig['step10']['dns4']))
+ $server['dns_server4'] = $pconfig['step10']['dns4'];
+ if (isset($pconfig['step10']['ntp1']))
+ $server['ntp_server1'] = $pconfig['step10']['ntp1'];
+ if (isset($pconfig['step10']['ntp2']))
+ $server['ntp_server2'] = $pconfig['step10']['ntp2'];
+ if (isset($pconfig['step10']['wins1']))
+ $server['wins_server1'] = $pconfig['step10']['wins1'];
+ if (isset($pconfig['step10']['wins2']))
+ $server['wins_server2'] = $pconfig['step10']['wins2'];
+ if (isset($pconfig['step10']['nbtenable'])) {
+ $server['netbios_ntype'] = $pconfig['step10']['nbttype'];
+ if (isset($pconfig['step10']['nbtscope']))
+ $server['netbios_scope'] = $pconfig['step10']['nbtscope'];
+ $server['netbios_enable'] = $pconfig['step10']['nbtenable'];
+ }
+ $server['crypto'] = $pconfig['step10']['crypto'];
+ $server['digest'] = $pconfig['step10']['digest'];
+ $server['engine'] = $pconfig['step10']['engine'];
+
+ if (isset($pconfig['step11']['ovpnrule'])) {
+ $rule = array();
+ $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']);
+ /* Ensure the rule descr is not too long for pf to handle */
+ if (strlen($rule['descr']) > 52)
+ $rule['descr'] = substr($rule['descr'], 0, 52);
+ $rule['direction'] = "in";
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['network'] = $server['interface'] . "ip";
+ $rule['destination']['port'] = $server['local_port'];
+ $rule['interface'] = $server['interface'];
+ $rule['protocol'] = strtolower($server['protocol']);
+ $rule['type'] = "pass";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ if (isset($pconfig['step11']['ovpnallow'])) {
+ $rule = array();
+ $rule['descr'] = sprintf(gettext("OpenVPN %s wizard"),$server['description']);
+ /* Ensure the rule descr is not too long for pf to handle */
+ if (strlen($rule['descr']) > 52)
+ $rule['descr'] = substr($rule['descr'], 0, 52);
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['interface'] = "openvpn";
+ //$rule['protocol'] = $server['protocol'];
+ $rule['type'] = "pass";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("OpenVPN Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+
+ if (!is_array($config['openvpn']['openvpn-server']))
+ $config['openvpn']['openvpn-server'] = array();
+
+ $config['openvpn']['openvpn-server'][] = $server;
+
+ openvpn_resync('server', $server);
+ write_config();
+ header("Location: vpn_openvpn_server.php");
+ exit;
+}
+
+?>
diff --git a/src/usr/local/www/wizards/openvpn_wizard.xml b/src/usr/local/www/wizards/openvpn_wizard.xml
new file mode 100644
index 0000000..6aea7fd
--- /dev/null
+++ b/src/usr/local/www/wizards/openvpn_wizard.xml
@@ -0,0 +1,987 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<pfsensewizard>
+<copyright>
+/*
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+</copyright>
+<totalsteps>12</totalsteps>
+<step>
+ <id>1</id>
+ <title>OpenVPN Wizard: Authentication Type Selection</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Select an Authentication Backend Type</name>
+ </field>
+ <field>
+ <type>select</type>
+ <displayname>Type of Server</displayname>
+ <name>authtype</name>
+ <description>&lt;br/&gt;&lt;b&gt;NOTE:&lt;/b&gt; If you are unsure, leave this set to "Local User Access."</description>
+ <bindstofield>ovpnserver->step1->type</bindstofield>
+ <options>
+ <option>
+ <name>Local User Access</name>
+ <value>local</value>
+ </option>
+ <option>
+ <name>LDAP</name>
+ <value>ldap</value>
+ </option>
+ <option>
+ <name>Radius</name>
+ <value>radius</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>2</id>
+ <title>OpenVPN Wizard: LDAP Server Selection</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>LDAP Authentication Server List</name>
+ </field>
+ <field>
+ <name>authserv</name>
+ <displayname>LDAP servers</displayname>
+ <type>select</type>
+ <bindstofield>ovpnserver->step2->authserv</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Add new LDAP server</name>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Next</name>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step2_submitphpaction();</stepsubmitphpaction>
+ <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>3</id>
+ <title>OpenVPN Wizard: Add LDAP Server</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>LDAP Authentication Server Parameters</name>
+ </field>
+ <field>
+ <name>name</name>
+ <displayname>Name</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->authtype</bindstofield>
+ <size>30</size>
+ <description>Descriptive server name, for your own reference.</description>
+ </field>
+ <field>
+ <name>ip</name>
+ <displayname>Hostname or IP address</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->ip</bindstofield>
+ <description>Address of the LDAP server.</description>
+ </field>
+ <field>
+ <name>port</name>
+ <displayname>Port</displayname>
+ <type>input</type>
+ <size>8</size>
+ <bindstofield>ovpnserver->step2->port</bindstofield>
+ <description>LDAP Server port, leave blank for the default (389 for TCP, 636 for SSL).</description>
+ </field>
+ <field>
+ <name>transport</name>
+ <displayname>Transport</displayname>
+ <type>select</type>
+ <bindstofield>ovpnserver->step2->transport</bindstofield>
+ <options>
+ <option>
+ <name>TCP - Standard</name>
+ <value>tcp</value>
+ </option>
+ <option>
+ <name>SSL - Encrypted</name>
+ <value>ssl</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;The protocol used by your LDAP server. It can either be standard TCP or SSL encrypted.</description>
+ </field>
+ <field>
+ <name>scope</name>
+ <displayname>Search Scope Level</displayname>
+ <type>select</type>
+ <options>
+ <option>
+ <name>One Level</name>
+ <value>one</value>
+ </option>
+ <option>
+ <name>Entire Subtree</name>
+ <value>subtree</value>
+ </option>
+ </options>
+ <bindstofield>ovpnserver->step2->scope</bindstofield>
+ </field>
+ <field>
+ <name>basedn</name>
+ <displayname>Search Scope Base DN</displayname>
+ <type>input</type>
+ <size>40</size>
+ <bindstofield>ovpnserver->step2->basedn</bindstofield>
+ </field>
+ <field>
+ <name>authscope</name>
+ <displayname>Authentication Containers</displayname>
+ <type>input</type>
+ <size>40</size>
+ <bindstofield>ovpnserver->step2->authscope</bindstofield>
+ <description>Semi-Colon separated. This will be prepended to the search base dn above or you can specify full container path.&lt;br/&gt;EXAMPLE: CN=Users;DC=example&lt;br/&gt;EXAMPLE: CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com </description>
+ </field>
+ <field>
+ <name>userdn</name>
+ <displayname>LDAP Bind User DN</displayname>
+ <type>input</type>
+ <size>20</size>
+ <description>If left blank, an anonymous bind will be done.</description>
+ <bindstofield>ovpnserver->step2->userdn</bindstofield>
+ </field>
+ <field>
+ <name>passdn</name>
+ <displayname>LDAP Bind Password</displayname>
+ <type>password</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step2->passdn</bindstofield>
+ <description>If a user DN was supplied above, this password will also be used when performing a bind operation.</description>
+ </field>
+ <field>
+ <name>nameattr</name>
+ <displayname>User Naming Attribute</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->nameattr</bindstofield>
+ <description>Typically "cn" (OpenLDAP, Novell eDirectory), "samAccountName" (Microsoft AD)</description>
+ </field>
+ <field>
+ <name>groupattr</name>
+ <displayname>Group Naming Attribute</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->groupattr</bindstofield>
+ <description>Typically "cn" (OpenLDAP, Microsoft AD, and Novell eDirectory)</description>
+ </field>
+ <field>
+ <name>memberattr</name>
+ <displayname>Member Naming Attribute</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->memberattr</bindstofield>
+ <description>Typically "member" (OpenLDAP), "memberOf" (Microsoft AD), "uniqueMember" (Novell eDirectory)</description>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Add new Server</name>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step3_submitphpaction();</stepsubmitphpaction>
+ <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>4</id>
+ <title>OpenVPN Wizard: RADIUS Server Selection</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>RADIUS Authentication Server List</name>
+ </field>
+ <field>
+ <name>authserv</name>
+ <displayname>RADIUS servers</displayname>
+ <type>select</type>
+ <bindstofield>ovpnserver->step2->authserv</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Add new RADIUS server</name>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Next</name>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step4_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step4_submitphpaction();</stepsubmitphpaction>
+ <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>5</id>
+ <title>OpenVPN Wizard: Add RADIUS Server</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>RADIUS Authentication Server Parameters</name>
+ </field>
+ <field>
+ <name>name</name>
+ <displayname>Name</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->authtype</bindstofield>
+ <size>20</size>
+ <description>Descriptive name for the RADIUS server, for your reference.</description>
+ </field>
+ <field>
+ <name>ip</name>
+ <displayname>Hostname or IP address</displayname>
+ <type>input</type>
+ <bindstofield>ovpnserver->step2->ip</bindstofield>
+ <description>Address of the RADIUS server.</description>
+ </field>
+ <field>
+ <name>port</name>
+ <displayname>Authentication Port</displayname>
+ <type>input</type>
+ <size>8</size>
+ <bindstofield>ovpnserver->step2->port</bindstofield>
+ <description>Port used by the RADIUS server for accepting Authentication requests, typically 1812.</description>
+ </field>
+ <field>
+ <name>secret</name>
+ <displayname>Shared Secret</displayname>
+ <type>password</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step2->password</bindstofield>
+ <description></description>
+ </field>
+ <field>
+ <name>Add new Server</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step5_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>6</id>
+ <title>OpenVPN Wizard: Certificate Authority Selection</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <name>Choose a Certificate Authority (CA)</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <type>certca_selection</type>
+ <name>certca</name>
+ <displayname>Certificate Authority</displayname>
+ <bindstofield>ovpnserver->step6->authcertca</bindstofield>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Add new CA</name>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step6_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step6_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>7</id>
+ <title>OpenVPN Wizard: Add Certificate Authority</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <name>Create a New Certificate Authority (CA) Certificate</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>descr</name>
+ <displayname>Descriptive name</displayname>
+ <description>A name for your reference, to identify this certificate. This is the same as common-name field for other Certificates.</description>
+ <type>input</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step6->certca</bindstofield>
+ </field>
+ <field>
+ <name>keylength</name>
+ <displayname>Key length</displayname>
+ <description>&lt;br/&gt;Size of the key which will be generated. The larger the key, the more security it offers, but larger keys are generally slower to use.</description>
+ <type>select</type>
+ <value>2048</value>
+ <bindstofield>ovpnserver->step6->keylength</bindstofield>
+ <options>
+ <option>
+ <name>512 bit</name>
+ <value>512</value>
+ </option>
+ <option>
+ <name>1024 bit</name>
+ <value>1024</value>
+ </option>
+ <option>
+ <name>2048 bit</name>
+ <value>2048</value>
+ </option>
+ <option>
+ <name>4096 bit</name>
+ <value>4096</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <name>lifetime</name>
+ <displayname>Lifetime</displayname>
+ <type>input</type>
+ <size>10</size>
+ <value>3650</value>
+ <description>Lifetime in days. This is commonly set to 3650 (Approximately 10 years.)</description>
+ <bindstofield>ovpnserver->step6->lifetime</bindstofield>
+ </field>
+ <field>
+ <name>country</name>
+ <displayname>Country Code</displayname>
+ <description>Two-letter ISO country code (e.g. US, AU, CA) </description>
+ <type>input</type>
+ <size>5</size>
+ <bindstofield>ovpnserver->step6->country</bindstofield>
+ </field>
+ <field>
+ <name>state</name>
+ <displayname>State or Province</displayname>
+ <description>Full State or Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario).</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step6->state</bindstofield>
+ </field>
+ <field>
+ <name>city</name>
+ <displayname>City</displayname>
+ <description>City or other Locality name (e.g. Louisville, Indianapolis, Toronto).</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step6->city</bindstofield>
+ </field>
+ <field>
+ <name>organization</name>
+ <displayname>Organization</displayname>
+ <description>Organization name, often the Company or Group name.</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step6->organization</bindstofield>
+ </field>
+ <field>
+ <name>email</name>
+ <displayname>E-mail</displayname>
+ <description>E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.)</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step6->email</bindstofield>
+ </field>
+ <field>
+ <name>Add new CA</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step7_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+ <javascriptafterformdisplay>enablechange();</javascriptafterformdisplay>
+</step>
+<step>
+ <id>8</id>
+ <title>OpenVPN Wizard: Server Certificate Selection</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <name>Choose a Server Certificate</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <type>cert_selection</type>
+ <name>certname</name>
+ <displayname>Certificate</displayname>
+ <bindstofield>ovpnserver->step9->authcertname</bindstofield>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Add new Certificate</name>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step8_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step8_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>9</id>
+ <title>OpenVPN Wizard: Add a Server Certificate</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <name>Create a New Server Certificate</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>descr</name>
+ <displayname>Descriptive name</displayname>
+ <description>A name for your reference, to identify this certificate. This is also known as the certificate's "Common Name."</description>
+ <type>input</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step9->certname</bindstofield>
+ </field>
+ <field>
+ <name>keylength</name>
+ <displayname>Key length</displayname>
+ <description>&lt;br/&gt;Size of the key which will be generated. The larger the key, the more security it offers, but larger keys are generally slower to use.</description>
+ <type>select</type>
+ <value>2048</value>
+ <bindstofield>ovpnserver->step9->keylength</bindstofield>
+ <options>
+ <option>
+ <name>512 bits</name>
+ <value>512</value>
+ </option>
+ <option>
+ <name>1024 bits</name>
+ <value>1024</value>
+ </option>
+ <option>
+ <name>2048 bits</name>
+ <value>2048</value>
+ </option>
+ <option>
+ <name>4096 bits</name>
+ <value>4096</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <name>lifetime</name>
+ <displayname>Lifetime</displayname>
+ <description>Lifetime in days. This is commonly set to 3650 (Approximately 10 years.)</description>
+ <type>input</type>
+ <size>10</size>
+ <value>3650</value>
+ <bindstofield>ovpnserver->step9->lifetime</bindstofield>
+ </field>
+ <field>
+ <name>country</name>
+ <displayname>Country Code</displayname>
+ <description>Two-letter ISO country code (e.g. US, AU, CA) </description>
+ <type>input</type>
+ <size>5</size>
+ <bindstofield>ovpnserver->step9->country</bindstofield>
+ </field>
+ <field>
+ <name>state</name>
+ <displayname>State or Province</displayname>
+ <description>Full State of Province name, not abbreviated (e.g. Kentucky, Indiana, Ontario).</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step9->state</bindstofield>
+ </field>
+ <field>
+ <name>city</name>
+ <displayname>City</displayname>
+ <description>City or other Locality name (e.g. Louisville, Indianapolis, Toronto).</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step9->city</bindstofield>
+ </field>
+ <field>
+ <name>organization</name>
+ <displayname>Organization</displayname>
+ <description>Organization name, often the Company or Group name.</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step9->organization</bindstofield>
+ </field>
+ <field>
+ <name>email</name>
+ <displayname>E-mail</displayname>
+ <description>E-mail address for the Certificate contact. Often the e-mail of the person generating the certificate (i.e. You.)</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step9->email</bindstofield>
+ </field>
+ <field>
+ <name>Create new Certificate</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step9_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step9_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>10</id>
+ <title>OpenVPN Wizard: Server Setup</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>General OpenVPN Server Information</name>
+ </field>
+ <field>
+ <name>interface</name>
+ <type>interfaces_selection</type>
+ <description>The interface where OpenVPN will listen for incoming connections (typically WAN.)</description>
+ <displayname>Interface</displayname>
+ <bindstofield>ovpnserver->step10->interface</bindstofield>
+ </field>
+ <field>
+ <name>Protocol</name>
+ <type>select</type>
+ <bindstofield>ovpnserver->step10->protocol</bindstofield>
+ <options>
+ <option>
+ <name>UDP</name>
+ <value>UDP</value>
+ </option>
+ <option>
+ <name>TCP</name>
+ <value>TCP</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;Protocol to use for OpenVPN connections. If you are unsure, leave this set to UDP.</description>
+ </field>
+ <field>
+ <name>localport</name>
+ <displayname>Local Port</displayname>
+ <description>Local port upon which OpenVPN will listen for connections. The default port is 1194. This can be left at its default unless you need to use a different port.</description>
+ <type>input</type>
+ <size>10</size>
+ <bindstofield>ovpnserver->step10->localport</bindstofield>
+ </field>
+ <field>
+ <name>description</name>
+ <displayname>Description</displayname>
+ <description>A name for this OpenVPN instance, for your reference. It can be set however you like, but is often used to distinguish the purpose of the service (e.g. "Remote Technical Staff"). It is also used by OpenVPN Client Export to identify this VPN on clients.</description>
+ <type>input</type>
+ <size>30</size>
+ <bindstofield>ovpnserver->step10->descr</bindstofield>
+ </field>
+ <field>
+ <type>listtopic</type>
+ <name>Cryptographic Settings</name>
+ </field>
+ <field>
+ <name>TLS Authentication</name>
+ <type>checkbox</type>
+ <value>on</value>
+ <description>Enable authentication of TLS packets.</description>
+ <bindstofield>ovpnserver->step10->tlsauth</bindstofield>
+ </field>
+ <field>
+ <displayname>Generate TLS Key</displayname>
+ <name>generatetlskey</name>
+ <disablefields>tlssharedkey</disablefields>
+ <value>on</value>
+ <type>checkbox</type>
+ <description>Automatically generate a shared TLS authentication key.</description>
+ <bindstofield>ovpnserver->step10->gentlskey</bindstofield>
+ </field>
+ <field>
+ <displayname>TLS Shared Key</displayname>
+ <name>tlssharedkey</name>
+ <description>Paste in a shared TLS key if one has already been generated.</description>
+ <type>textarea</type>
+ <cols>30</cols>
+ <rows>5</rows>
+ <bindstofield>ovpnserver->step10->tlskey</bindstofield>
+ </field>
+ <field>
+ <displayname>DH Parameters Length</displayname>
+ <name>dhparameters</name>
+ <type>select</type>
+ <value>2048</value>
+ <bindstofield>ovpnserver->step10->dhkey</bindstofield>
+ <options>
+ <option>
+ <name>1024 bit</name>
+ <value>1024</value>
+ </option>
+ <option>
+ <name>2048 bit</name>
+ <value>2048</value>
+ </option>
+ <option>
+ <name>4096 bit</name>
+ <value>4096</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;Length of Diffie-Hellman (DH) key exchange parameters, used for establishing a secure communications channel. As with other such settings, the larger values are more secure, but may be slower in operation.</description>
+ </field>
+ <field>
+ <name>crypto</name>
+ <type>select</type>
+ <displayname>Encryption Algorithm</displayname>
+ <bindstofield>ovpnserver->step10->crypto</bindstofield>
+ <value>AES-256-CBC</value>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;The algorithm used to encrypt traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like. Certain algorithms will perform better on different hardware, depending on the availability of supported VPN accelerator chips.</description>
+ </field>
+ <field>
+ <name>digest</name>
+ <type>select</type>
+ <displayname>Auth Digest Algorithm</displayname>
+ <bindstofield>ovpnserver->step10->digest</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ <value>SHA1</value>
+ <description>&lt;br/&gt;The method used to authenticate traffic between endpoints. This setting must match on the client and server side, but is otherwise set however you like.</description>
+ </field>
+ <field>
+ <name>engine</name>
+ <type>select</type>
+ <displayname>Hardware Crypto</displayname>
+ <bindstofield>ovpnserver->step10->engine</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;The hardware cryptographic accelerator to use for this VPN connection, if any.</description>
+ </field>
+ <field>
+ <type>listtopic</type>
+ <name>Tunnel Settings</name>
+ </field>
+ <field>
+ <displayname>Tunnel Network</displayname>
+ <name>tunnelnet</name>
+ <type>input</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step10->tunnelnet</bindstofield>
+ <description>This is the virtual network used for private communications between this server and client hosts expressed using CIDR notation (eg. 10.0.8.0/24). The first network address will be assigned to the server virtual interface. The remaining network addresses can optionally be assigned to connecting clients. (see Address Pool)</description>
+ </field>
+ <field>
+ <displayname>Redirect Gateway</displayname>
+ <name>redirectgw</name>
+ <type>checkbox</type>
+ <description>Force all client generated traffic through the tunnel.</description>
+ <bindstofield>ovpnserver->step10->rdrgw</bindstofield>
+ </field>
+ <field>
+ <displayname>Local Network</displayname>
+ <name>localnet</name>
+ <type>input</type>
+ <size>20</size>
+ <bindstofield>ovpnserver->step10->localnet</bindstofield>
+ <description>This is the network that will be accessible from the remote endpoint, expressed as a CIDR range. You may leave this blank if you don't want to add a route to the local network through this tunnel on the remote machine. This is generally set to your LAN network.</description>
+ </field>
+ <field>
+ <displayname>Concurrent Connections</displayname>
+ <name>concurrentcon</name>
+ <description>Specify the maximum number of clients allowed to concurrently connect to this server.</description>
+ <type>input</type>
+ <size>10</size>
+ <bindstofield>ovpnserver->step10->concurrentcon</bindstofield>
+ </field>
+ <field>
+ <displayname>Compression</displayname>
+ <name>compression</name>
+ <description>&lt;br/&gt;Compress tunnel packets using the LZO algorithm. Adaptive compression will dynamically disable compression for a period of time if OpenVPN detects that the data in the packets is not being compressed efficiently.</description>
+ <bindstofield>ovpnserver->step10->compression</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <displayname>Type-of-Service</displayname>
+ <name>tos</name>
+ <type>checkbox</type>
+ <description>Set the TOS IP header value of tunnel packets to match the encapsulated packet's TOS value.</description>
+ <bindstofield>ovpnserver->step10->tos</bindstofield>
+ </field>
+ <field>
+ <displayname>Inter-Client Communication</displayname>
+ <name>interclient</name>
+ <type>checkbox</type>
+ <description>Allow communication between clients connected to this server.</description>
+ <bindstofield>ovpnserver->step10->interclient</bindstofield>
+ </field>
+ <field>
+ <displayname>Duplicate Connections</displayname>
+ <name>duplicate_cn</name>
+ <type>checkbox</type>
+ <description>Allow multiple concurrent connections from clients using the same Common Name.&lt;br/&gt;NOTE: This is not generally recommended, but may be needed for some scenarios.</description>
+ <bindstofield>ovpnserver->step10->duplicate_cn</bindstofield>
+ </field>
+ <field>
+ <type>listtopic</type>
+ <name>Client Settings</name>
+ </field>
+ <field>
+ <displayname>Dynamic IP</displayname>
+ <name>dynip</name>
+ <type>checkbox</type>
+ <value>on</value>
+ <description>Allow connected clients to retain their connections if their IP address changes.</description>
+ <bindstofield>ovpnserver->step10->dynip</bindstofield>
+ </field>
+ <field>
+ <displayname>Address Pool</displayname>
+ <name>addrpool</name>
+ <type>checkbox</type>
+ <value>on</value>
+ <description>Provide a virtual adapter IP address to clients (see Tunnel Network).</description>
+ <bindstofield>ovpnserver->step10->addrpool</bindstofield>
+ </field>
+ <field>
+ <displayname>DNS Default Domain</displayname>
+ <name>defaultdomain</name>
+ <type>input</type>
+ <description>Provide a default domain name to clients.</description>
+ <bindstofield>ovpnserver->step10->defaultdomain</bindstofield>
+ </field>
+ <field>
+ <displayname>DNS Server 1</displayname>
+ <name>dnsserver1</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->dns1</bindstofield>
+ <description>DNS server IP to provide to connecting clients.</description>
+ </field>
+ <field>
+ <displayname>DNS Server 2</displayname>
+ <name>dnserver2</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->dns2</bindstofield>
+ <description>DNS server IP to provide to connecting clients.</description>
+ </field>
+ <field>
+ <displayname>DNS Server 3</displayname>
+ <name>dnserver3</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->dns3</bindstofield>
+ <description>DNS server IP to provide to connecting clients.</description>
+ </field>
+ <field>
+ <displayname>DNS Server 4</displayname>
+ <name>dnserver4</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->dns4</bindstofield>
+ <description>DNS server IP to provide to connecting clients.</description>
+ </field>
+ <field>
+ <displayname>NTP Server</displayname>
+ <name>ntpserver1</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->ntp1</bindstofield>
+ <description>Network Time Protocol server to provide to connecting clients.</description>
+ </field>
+ <field>
+ <displayname>NTP Server 2</displayname>
+ <name>ntpserver2</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->ntp2</bindstofield>
+ <description>Network Time Protocol server to provide to connecting clients.</description>
+ </field>
+ <field>
+ <name>nbtenable</name>
+ <type>checkbox</type>
+ <displayname>NetBIOS Options</displayname>
+ <bindstofield>ovpnserver->step10->nbtenable</bindstofield>
+ <description>Enable NetBIOS over TCP/IP. &lt;br/&gt;If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled. </description>
+ </field>
+ <field>
+ <displayname>NetBIOS Node Type</displayname>
+ <name>nbttype</name>
+ <type>select</type>
+ <bindstofield>ovpnserver->step10->nbttype</bindstofield>
+ <options>
+ <option>
+ <name>dummy</name>
+ <value>dummy</value>
+ </option>
+ </options>
+ <description>&lt;br/&gt;Possible options: b-node (broadcasts), p-node (point-to-point name queries to a WINS server), m-node (broadcast then query name server), and h-node (query name server, then broadcast).</description>
+ </field>
+ <field>
+ <displayname>NetBIOS Scope ID</displayname>
+ <name>nbtscope</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->nbtscope</bindstofield>
+ <description>A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to only those nodes with the same NetBIOS scope ID.</description>
+ </field>
+ <field>
+ <displayname>WINS Server 1</displayname>
+ <name>winsserver1</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->wins1</bindstofield>
+ <description>A Windows Internet Name Service (WINS) server IP to provide to connecting clients. Not desirable in most all modern networks.</description>
+ </field>
+ <field>
+ <displayname>WINS Server 2</displayname>
+ <name>winsserver2</name>
+ <type>input</type>
+ <bindstofield>ovpnserver->step10->wins2</bindstofield>
+ <description>A Windows Internet Name Service (WINS) server IP to provide to connecting clients. Not desirable in most all modern networks.</description>
+ </field>
+ <field>
+ <name>Advanced</name>
+ <type>textarea</type>
+ <cols>30</cols>
+ <rows>5</rows>
+ <description>Enter any additional options you would like to add to the OpenVPN server configuration here, separated by a semicolon. EXAMPLE: push "route 10.0.0.0 255.255.255.0"</description>
+ <bindstofield>ovpnserver->step10->advanced</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step10_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step10_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+<step>
+ <id>11</id>
+ <title>OpenVPN Wizard: Firewall Rule Configuration</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Firewall Rule Configuration</name>
+ </field>
+ <field>
+ <type>text</type>
+ <description>Firewall rules control what network traffic is permitted. You must add rules to allow traffic to the OpenVPN server's IP and port, as well as allowing traffic from connected clients through the tunnel. These rules can be automatically added here, or configured manually after completing the wizard.</description>
+ </field>
+ <field>
+ <type>listtopic</type>
+ <name>Traffic from clients to server</name>
+ </field>
+ <field>
+ <name>ovpnrule</name>
+ <displayname>Firewall Rule</displayname>
+ <description>Add a rule to permit connections to this OpenVPN server process from clients anywhere on the Internet.</description>
+ <type>checkbox</type>
+ <bindstofield>ovpnserver->step11->ovpnrule</bindstofield>
+ </field>
+ <field>
+ <type>listtopic</type>
+ <name>Traffic from clients through VPN</name>
+ </field>
+ <field>
+ <name>ovpnallow</name>
+ <displayname>OpenVPN rule</displayname>
+ <description>Add a rule to allow all traffic from connected clients to pass inside the VPN tunnel.</description>
+ <type>checkbox</type>
+ <bindstofield>ovpnserver->step11->ovpnallow</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>12</id>
+ <title>OpenVPN Wizard: Finished!</title>
+ <description>OpenVPN Remote Access Server Setup Wizard</description>
+ <disableheader>on</disableheader>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Configuration Complete!</name>
+ </field>
+ <field>
+ <type>text</type>
+ <description>Your configuration is now complete.</description>
+ </field>
+ <field>
+ <type>text</type>
+ <description>To be able to export client configurations, browse to System->Packages and install the OpenVPN Client Export package.</description>
+ </field>
+ <field>
+ <type>submit</type>
+ <name>Finish</name>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step12_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/openvpn_wizard.inc</includefile>
+</step>
+</pfsensewizard> \ No newline at end of file
diff --git a/src/usr/local/www/wizards/setup_wizard.xml b/src/usr/local/www/wizards/setup_wizard.xml
new file mode 100644
index 0000000..9da0509
--- /dev/null
+++ b/src/usr/local/www/wizards/setup_wizard.xml
@@ -0,0 +1,703 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<pfsensewizard>
+<copyright>
+/* $Id$ */
+/*
+ setup_wizard.xml
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2004, 2005 Scott Ullrich
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+</copyright>
+<totalsteps>10</totalsteps>
+<step>
+ <id>1</id>
+ <title>pfSense Setup Wizard</title>
+ <disableheader>true</disableheader>
+ <description>This wizard will guide you through the initial configuration of pfSense.&lt;br/&gt;&lt;br/&gt; The wizard may be stopped at any time by clicking the logo image at the top of the screen.</description>
+ <fields>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>
+ conf_mount_rw();
+ unlink_if_exists('/conf/trigger_initial_wizard');
+ conf_mount_ro();
+ </stepbeforeformdisplay>
+</step>
+<step>
+ <id>2</id>
+ <title>Bling your pfSense with pfSense Gold</title>
+ <disableheader>true</disableheader>
+ <description>Feel the power of a pfSense Gold subscription. Receive special benefits while supporting ongoing development of the Open Source pfSense project.&lt;br/&gt; &lt;br/&gt; Benefits include access to our AutoConfigBackup secure cloud based backup service for up to 10 hosts, pre-publication access to the updated pfSense: The Definitive Guide book in PDF, fully updated for the pfSense 2.1 release, and a monthly online MeetUp! Video conference to discuss and demonstrate advanced features and architectures using pfSense. &lt;br/&gt; &lt;br/&gt; Go to &lt;a href="https://www.pfsense.org/gold" target="_blank"&gt; pfSense Gold Subscriptions&lt;/a&gt; to sign up now &lt;br/&gt; &lt;br/&gt; </description>
+ <fields>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>3</id>
+ <title>General Information</title>
+ <description>On this screen you will set the general pfSense parameters.</description>
+ <fields>
+ <field>
+ <name>Hostname</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->system->hostname</bindstofield>
+ <description>EXAMPLE: myserver</description>
+ <validate>^[a-zA-Z0-9-]+$</validate>
+ <message>Invalid Hostname</message>
+ </field>
+ <field>
+ <name>Domain</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->system->domain</bindstofield>
+ <description>EXAMPLE: mydomain.com</description>
+ <validate>^[a-zA-Z0-9.-]+$</validate>
+ <message>Domain name field is invalid</message>
+ </field>
+ <field>
+ <name>DNS Resolver Behavior</name>
+ <type>text</type>
+ <description>The default behavior of the DNS Resolver will ignore manually configured DNS servers for client queries and query root DNS servers directly. To use the manually configured DNS servers below for client queries, visit Services &gt; DNS Resolver and enable DNS Query Forwarding after completing the wizard.</description>
+ </field>
+ <field>
+ <name>Primary DNS Server</name>
+ <type>input</type>
+ <bindstofield>system->dnsserver</bindstofield>
+ <!-- we must unset the fields because this is an array. -->
+ <unsetfield>yes</unsetfield>
+ <arraynum>0</arraynum>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>Primary DNS Server field is invalid</message>
+ </field>
+ <field>
+ <name>Secondary DNS Server</name>
+ <type>input</type>
+ <bindstofield>system->dnsserver</bindstofield>
+ <arraynum>1</arraynum>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>Secondary DNS Server field is invalid</message>
+ </field>
+ <field>
+ <name>Override DNS</name>
+ <description>Allow DNS servers to be overridden by DHCP/PPP on WAN</description>
+ <type>checkbox</type>
+ <bindstofield>system->dnsallowoverride</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>
+ <![CDATA[
+ $config['wizardtemp'] = array();
+ $config['wizardtemp']['system'] = array();
+ $config['wizardtemp']['system']['hostname'] = $config['system']['hostname'];
+ $config['wizardtemp']['system']['domain'] = $config['system']['domain'];
+ ]]>
+ </stepbeforeformdisplay>
+ <stepsubmitphpaction>
+ <![CDATA[
+ if(empty($_POST['hostname']) || !is_unqualified_hostname($_POST['hostname'])) {
+ print_info_box_np("Hostname is invalid. Please press back in your browser window and correct.");
+ die;
+ }
+ if(empty($_POST['domain']) || !is_domain($_POST['domain'])) {
+ print_info_box_np("Domain is invalid. Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['primarydnsserver']) && !is_ipaddr($_POST['primarydnsserver'])) {
+ print_info_box_np("Primary DNS server is invalid. Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['secondarydnsserver']) && !is_ipaddr($_POST['secondarydnsserver'])) {
+ print_info_box_np("Second DNS server is invalid. Please press back in your browser window and correct.");
+ die;
+ }
+ ]]>
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>4</id>
+ <title>Time Server Information</title>
+ <description>Please enter the time, date and time zone.</description>
+ <fields>
+ <field>
+ <name>Time server hostname</name>
+ <description>Enter the hostname (FQDN) of the time server.</description>
+ <type>input</type>
+ <bindstofield>system->timeservers</bindstofield>
+ </field>
+ <field>
+ <name>Timezone</name>
+ <type>timezone_select</type>
+ <bindstofield>system->timezone</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ <![CDATA[
+ foreach (explode(' ', $_POST['timeserverhostname']) as $ts) {
+ if (!is_domain($ts)) {
+ print_info_box_np(gettext("NTP Time Server names may only contain the characters a-z, 0-9, '-' and '.'. Entries may be separated by spaces. Please press back in your browser window and correct."));
+ die;
+ }
+ }
+ ]]>
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>5</id>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <title>Configure WAN Interface</title>
+ <description>On this screen we will configure the Wide Area Network information.</description>
+ <javascriptafterformdisplay>
+ var selectedItem = 0;
+ if(document.forms[0].ipaddress.value == 'dhcp') {
+ selectedItem = 1;
+ document.forms[0].ipaddress.value = '';
+ } else if(document.forms[0].ipaddress.value == 'pppoe') {
+ selectedItem = 2;
+ document.forms[0].ipaddress.value = '';
+ } else if(document.forms[0].ipaddress.value == 'pptp') {
+ selectedItem = 3;
+ document.forms[0].ipaddress.value = '';
+ } else if(document.forms[0].ipaddress.value == 'ppp' || document.forms[0].ipaddress.value == 'l2tp') {
+ document.forms[0].ipaddress.value = '';
+ } else {
+ selectedItem = 0;
+ }
+ document.forms[0].selectedtype.selectedIndex = selectedItem;
+ enableitems(selectedItem);
+ </javascriptafterformdisplay>
+ <fields>
+ <field>
+ <name>SelectedType</name>
+ <type>select</type>
+ <donotdisable>true</donotdisable>
+ <options>
+ <option>
+ <name>Static</name>
+ <value>Static</value>
+ <enablefields>ipaddress,subnetmask,upstreamgateway</enablefields>
+ </option>
+ <option>
+ <name>DHCP</name>
+ <value>dhcp</value>
+ <enablefields>dhcphostname</enablefields>
+ </option>
+ <option>
+ <name>PPPoE</name>
+ <value>pppoe</value>
+ <enablefields>pppoeusername,pppoepassword,pppoeservicename,pppoedialondemand,pppoeidletimeout</enablefields>
+ </option>
+ <option>
+ <name>PPTP</name>
+ <value>pptp</value>
+ <enablefields>pptpusername,pptppassword,pptplocalipaddress,pptplocalsubnet,pptpremoteipaddress,pptpdialondemand,pptpidletimeout
+ </enablefields>
+ </option>
+ </options>
+ </field>
+ <field>
+ <name>General configuration</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>MAC Address</name>
+ <bindstofield>interfaces->wan->spoofmac</bindstofield>
+ <type>input</type>
+ <description> This field can be used to modify ("spoof") the MAC address of the WAN interface (may be required with some cable connections). Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx or leave blank.</description>
+ <validate>^([0-9a-f]{2}([:-]||$)){6}$</validate>
+ <message>MAC Address field is invalid</message>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>MTU</name>
+ <type>input</type>
+ <bindstofield>interfaces->wan->mtu</bindstofield>
+ <description> Set the MTU of the WAN interface. If you leave this field blank, an MTU of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed.</description>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>MSS</name>
+ <type>input</type>
+ <bindstofield>interfaces->wan->mss</bindstofield>
+ <description> If you enter a value in this field, then MSS clamping for TCP connections to the value entered above minus 40 (TCP/IP header size) will be in effect. If you leave this field blank, an MSS of 1492 bytes for PPPoE and 1500 bytes for all other connection types will be assumed. This should match the above MTU value in most all cases.</description>
+ </field>
+ <field>
+ <name>Static IP Configuration</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>IP Address</name>
+ <bindstofield>interfaces->wan->ipaddr</bindstofield>
+ <type>input</type>
+ <typehint> / </typehint>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>IP Address field is invalid</message>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <name>Subnet Mask</name>
+ <bindstofield>interfaces->wan->subnet</bindstofield>
+ <type>subnet_select</type>
+ </field>
+ <field>
+ <name>Upstream Gateway</name>
+ <bindstofield>wizardtemp->wangateway</bindstofield>
+ <type>input</type>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>Gateway IP Address field is invalid</message>
+ </field>
+ <field>
+ <name>DHCP client configuration</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>DHCP Hostname</name>
+ <type>input</type>
+ <bindstofield>interfaces->wan->dhcphostname</bindstofield>
+ <description> The value in this field is sent as the DHCP client identifier and hostname when requesting a DHCP lease. Some ISPs may require this (for client identification).</description>
+ </field>
+ <field>
+ <name>PPPoE configuration</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>PPPoE Username</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->wan->username</bindstofield>
+ </field>
+ <field>
+ <name>PPPoE Password</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->wan->password</bindstofield>
+ </field>
+ <field>
+ <name>PPPoE Service name</name>
+ <type>input</type>
+ <description>Hint: this field can usually be left empty</description>
+ <bindstofield>wizardtemp->wan->provider</bindstofield>
+ </field>
+ <field>
+ <name>PPPoE Dial on demand</name>
+ <typehint>Enable Dial-On-Demand mode</typehint>
+ <type>checkbox</type>
+ <description>This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected.</description>
+ <bindstofield>wizardtemp->wan->ondemand</bindstofield>
+ </field>
+ <field>
+ <name>PPPoE Idle timeout</name>
+ <type>input</type>
+ <description>If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature.</description>
+ <bindstofield>wizardtemp->wan->idletimeout</bindstofield>
+ </field>
+ <field>
+ <name>PPTP configuration</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>PPTP Username</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->wan->pptpusername</bindstofield>
+ </field>
+ <field>
+ <name>PPTP Password</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->wan->pptppassword</bindstofield>
+ </field>
+ <field>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ <name>PPTP Local IP Address</name>
+ <type>input</type>
+ <typehint> / </typehint>
+ <bindstofield>wizardtemp->wan->localip</bindstofield>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>PPTP Local IP Address field is invalid</message>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <name>pptplocalsubnet</name>
+ <bindstofield>wizardtemp->wan->subnet</bindstofield>
+ <type>subnet_select</type>
+ </field>
+ <field>
+ <name>PPTP Remote IP Address</name>
+ <bindstofield>wizardtemp->wan->gateway</bindstofield>
+ <type>input</type>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>PPTP Remote IP Address field is invalid</message>
+ </field>
+ <field>
+ <name>PPTP Dial on demand</name>
+ <typehint>Enable Dial-On-Demand mode</typehint>
+ <type>checkbox</type>
+ <bindstofield>wizardtemp->wan->pptpondemand</bindstofield>
+ <description>This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected.</description>
+ </field>
+ <field>
+ <name>PPTP Idle timeout</name>
+ <type>input</type>
+ <bindstofield>wizardtemp->wan->pptpidletimeout</bindstofield>
+ <description>If no qualifying outgoing packets are transmitted for the specified number of seconds, the connection is brought down. An idle timeout of zero disables this feature.</description>
+ </field>
+ <field>
+ <name>RFC1918 Networks</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Block RFC1918 Private Networks</name>
+ <description> When set, this option blocks traffic from IP addresses that are reserved for private networks as per RFC 1918 (10/8, 172.16/12, 192.168/16) as well as loopback addresses (127/8). You should generally leave this option turned on, unless your WAN network lies in such a private address space, too.</description>
+ <type>checkbox</type>
+ <bindstofield>interfaces->wan->blockpriv</bindstofield>
+ <typehint>Block private networks from entering via WAN</typehint>
+ </field>
+ <field>
+ <name>Block bogon networks</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Block bogon networks</name>
+ <description>When set, this option blocks traffic from IP addresses that are reserved (but not RFC 1918) or not yet assigned by IANA. Bogons are prefixes that should never appear in the Internet routing table, and obviously should not appear as the source address in any packets you receive.</description>
+ <type>checkbox</type>
+ <bindstofield>interfaces->wan->blockbogons</bindstofield>
+ <typehint>Block non-Internet routed networks from entering via WAN</typehint>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>
+ <![CDATA[
+ if (empty($config['interfaces']['wan']['gateway'])) {
+ $wangw_name = "WANGW";
+ } else {
+ $wangw_name = $config['interfaces']['wan']['gateway'];
+ }
+ if (is_array($config['gateways']['gateway_item']))
+ foreach ($config['gateways']['gateway_item'] as $gw)
+ if ($gw['name'] == $wangw_name || (!empty($config['wizardtemp']['wangateway']) && $gw['gateway'] == $config['wizardtemp']['wangateway']))
+ $config['wizardtemp']['wangateway'] = $gw['gateway'];
+ ]]>
+ </stepbeforeformdisplay>
+ <stepsubmitphpaction>
+ <![CDATA[
+ if(!empty($_POST['mtu']) && ($_POST['mtu'] < 576)) {
+ print_info_box_np("MTU Must be at least 576 (Per RFC 791). Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['macaddress']) && !is_macaddr($_POST['macaddress'])) {
+ print_info_box_np("Invalid MAC Address. Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['ipaddress']) && ($_POST['selectedtype'] == "Static")) {
+ if (!is_ipaddr($_POST['ipaddress'])) {
+ print_info_box_np("Invalid WAN IP Address. Please press back in your browser window and correct.");
+ die;
+ }
+ if ($_POST['subnetmask'] < 31 &&
+ ($_POST['ipaddress'] == gen_subnet($_POST['ipaddress'], $_POST['subnetmask']) ||
+ $_POST['ipaddress'] == gen_subnet_max($_POST['ipaddress'], $_POST['subnetmask']))) {
+ print_info_box_np("Invalid WAN IP Address. Please press back in your browser window and correct.");
+ die;
+ }
+ }
+ if(!empty($_POST['dhcphostname']) && !is_hostname($_POST['dhcphostname'])) {
+ print_info_box_np("Invalid DHCP Hostname. Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['pptplocalipaddress']) && !is_ipaddr($_POST['pptplocalipaddress'])) {
+ print_info_box_np("Invalid PPTP Local IP Address. Please press back in your browser window and correct.");
+ die;
+ }
+ if(!empty($_POST['pptpremoteipaddress']) && !is_ipaddr($_POST['pptpremoteipaddress'])) {
+ print_info_box_np("Invalid PPTP Remote IP Address. Please press back in your browser window and correct.");
+ die;
+ }
+ $type = $_POST['selectedtype'];
+
+ if (!is_array($config['ppps']['ppp']))
+ $config['ppps']['ppp'] = array();
+ if (count($config['ppps']['ppp'])) {
+ foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
+ if ($ppp['ptpid'] == "0") {
+ if ((substr($config['interfaces']['wan']['if'],0,5) == "pppoe") || (substr($config['interfaces']['wan']['if'],0,4) == "pptp")) {
+ $oldif = explode(",", $ppp['ports']);
+ $config['interfaces']['wan']['if'] = $oldif[0];
+ }
+ if ($type == "pppoe" || $type == "pptp")
+ unset($config['ppps']['ppp'][$pppid]);
+ }
+ }
+ }
+
+ if ($type == "pppoe" || $type == "pptp") {
+ if ($type == "pptp") {
+ $config['wizardtemp']['wan']['username'] = $config['wizardtemp']['wan']['pptpusername'];
+ $config['wizardtemp']['wan']['password'] = $config['wizardtemp']['wan']['pptppassword'];
+ $config['wizardtemp']['wan']['ondemand'] = $config['wizardtemp']['wan']['pptpondemand'];
+ $config['wizardtemp']['wan']['idletimeout'] = $config['wizardtemp']['wan']['pptpidletimeout'];
+ unset($config['wizardtemp']['wan']['pptpusername']);
+ unset($config['wizardtemp']['wan']['pptppassword']);
+ unset($config['wizardtemp']['wan']['pptpondemand']);
+ unset($config['wizardtemp']['wan']['pptpidletimeout']);
+ }
+ $config['wizardtemp']['wan']['password'] = base64_encode($config['wizardtemp']['wan']['password']);
+ $tmp = array();
+ $tmp['ptpid'] = "0";
+ $tmp['type'] = $type;
+ $tmp['if'] = $type . "0";
+ $tmp['ports'] = $config['interfaces']['wan']['if'];
+ $config['ppps']['ppp'][] = array_merge($tmp, $config['wizardtemp']['wan']);
+ unset($tmp);
+ $config['interfaces']['wan']['if'] = $type."0";
+ }
+ unset($config['wizardtemp']['wan']);
+ ]]>
+ </stepsubmitphpaction>
+ <stepsubmitbeforesave>
+ <![CDATA[
+ if($_POST['selectedtype'] == "Static") {
+
+ } else {
+ $_POST['ipaddress'] = $_POST['selectedtype'];
+ $config['interfaces']['wan']['ipaddr'] = $_POST['selectedtype'];
+ write_config();
+ if(!$config['interfaces']['lan'])
+ header("Location: /wizard.php?xml=setup_wizard.xml&stepid=6&next=Next");
+ }
+ ]]>
+ </stepsubmitbeforesave>
+</step>
+<step>
+ <id>6</id>
+ <title>Configure LAN Interface</title>
+ <description>On this screen we will configure the Local Area Network information.</description>
+ <fields>
+ <field>
+ <name>LAN IP Address</name>
+ <type>input</type>
+ <bindstofield>interfaces->lan->ipaddr</bindstofield>
+ <description>Type dhcp if this interface uses DHCP to obtain its IP address.</description>
+ <validate>^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$</validate>
+ <message>LAN IP Address field is invalid</message>
+ </field>
+ <field>
+ <name>Subnet Mask</name>
+ <type>subnet_select</type>
+ <bindstofield>interfaces->lan->subnet</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ <![CDATA[
+ if(empty($_POST['lanipaddress']) || !is_ipaddr($_POST['lanipaddress'])) {
+ print_info_box_np("Invalid LAN IP Address. Please press back in your browser window and correct.");
+ die;
+ }
+
+ $lowestip = gen_subnet($_POST['lanipaddress'], $_POST['subnetmask']);
+ $highestip = gen_subnet_max($_POST['lanipaddress'], $_POST['subnetmask']);
+
+ if ($_POST['subnetmask'] < 31) {
+ if ($_POST['lanipaddress'] == $lowestip) {
+ print_info_box_np("LAN IP Address equals subnet network address. This is not allowed. Please press back in your browser window and correct.");
+ die;
+ }
+ if ($_POST['lanipaddress'] == $highestip) {
+ print_info_box_np("LAN IP Address equals subnet broadcast address. This is not allowed. Please press back in your browser window and correct.");
+ die;
+ }
+ } else {
+ print_info_box_np("Invalid subnet mask, choose a mask less than 31. Please press back in your browser window and correct.");
+ die;
+ }
+
+ $ipaddresses_before = ip_range_size_v4($lowestip, $_POST['lanipaddress']);
+ $ipaddresses_after = ip_range_size_v4($_POST['lanipaddress'], $highestip);
+
+ if ($ipaddresses_after >= $ipaddresses_before) {
+ // The LAN IP is in the 1st half of the subnet, so put DHCP in the 2nd half.
+ if ($ipaddresses_after > 30) {
+ // There is reasonable space in the subnet, use a smaller chunk of the space for DHCP
+ // This case will work out like the old defaults if the user has specified the ".1" address.
+ // The range will be something like ".10" to ".245"
+ $config['dhcpd']['lan']['range']['from'] = ip_after($_POST['lanipaddress'], 9);
+ $config['dhcpd']['lan']['range']['to'] = ip_before($highestip, 10);
+ } else {
+ // There is not much space in the subnet, so allocate everything above the LAN IP to DHCP.
+ $config['dhcpd']['lan']['range']['from'] = ip_after($_POST['lanipaddress']);
+ $config['dhcpd']['lan']['range']['to'] = ip_before($highestip);
+ }
+ } else {
+ // The LAN IP is in the 2nd half of the subnet, so put DHCP in the 1st half.
+ if ($ipaddresses_before > 30) {
+ // There is reasonable space in the subnet, use a smaller chunk of the space for DHCP
+ $config['dhcpd']['lan']['range']['from'] = ip_after($lowestip, 10);
+ $config['dhcpd']['lan']['range']['to'] = ip_before($_POST['lanipaddress'], 9);
+ } else {
+ // There is not much space in the subnet, so allocate everything below the LAN IP to DHCP.
+ $config['dhcpd']['lan']['range']['from'] = ip_after($lowestip);
+ $config['dhcpd']['lan']['range']['to'] = ip_before($_POST['lanipaddress']);
+ }
+ }
+ ]]>
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>7</id>
+ <title>Set Admin WebGUI Password</title>
+ <description>On this screen we will set the admin password, which is used to access the WebGUI and also SSH services if you wish to enable them.</description>
+ <fields>
+ <field>
+ <name>Admin Password</name>
+ <type>password</type>
+ </field>
+ <field>
+ <name>Admin Password AGAIN</name>
+ <type>password</type>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>
+ if($_POST['adminpassword'] != "") {
+ if($_POST['adminpassword'] == $_POST['adminpasswordagain']) {
+ $admin_user =&amp; getUserEntryByUID(0);
+ local_user_set_password($admin_user, $_POST['adminpassword']);
+ local_user_set($admin_user);
+ write_config();
+ } else {
+ print_info_box_np("Passwords do not match! Please press back in your browser window and correct.");
+ die;
+ }
+ }
+ </stepsubmitphpaction>
+</step>
+<step>
+ <id>8</id>
+ <title>Reload configuration</title>
+ <disableheader>true</disableheader>
+ <description>Click 'Reload' to reload pfSense with new changes.</description>
+ <fields>
+ <field>
+ <name>Reload</name>
+ <type>submit</type>
+ </field>
+ </fields>
+</step>
+<step>
+ <id>9</id>
+ <title>Reload in progress</title>
+ <description>
+ A reload is now in progress. Please wait. &lt;p&gt;
+ &lt;meta http-equiv="refresh" content="5; url=wizard.php?xml=setup_wizard.xml&amp;stepid=9" &gt;
+ &lt;p&gt;
+ The wizard will redirect to the next step once the reload is completed.
+ </description>
+ <stepafterformdisplay>
+ <![CDATA[
+ $config['system']['hostname'] = $config['wizardtemp']['system']['hostname'];
+ $config['system']['domain'] = $config['wizardtemp']['system']['domain'];
+ if (!empty($config['wizardtemp']['wangateway'])) {
+ if (!is_array($config['gateways']['gateway_item']))
+ $config['gateways']['gateway_item'] = array();
+ $found = false;
+ $defaultgw_found = false;
+ foreach ($config['gateways']['gateway_item'] as & $gw) {
+ if ($gw['interface'] != "wan")
+ continue;
+ if (isset($gw['defaultgw']))
+ $defaultgw_found = true;
+ if ($gw['name'] == 'WANGW' || (!empty($config['wizardtemp']['wangateway']) && $gw['gateway'] == $config['wizardtemp']['wangateway'])) {
+ $found = true;
+ $gw['gateway'] = $config['wizardtemp']['wangateway'];
+ $config['interfaces']['wan']['gateway'] = $gw['name'];
+ }
+ }
+ if (!$found) {
+ $newgw = array();
+ $newgw['interface'] = "wan";
+ $newgw['gateway'] = $config['wizardtemp']['wangateway'];
+ $newgw['name'] = "WANGW";
+ $newgw['weight'] = 1;
+ $newgw['descr'] = "WAN Gateway";
+ $newgw['defaultgw'] = !$defaultgw_found;
+ $config['gateways']['gateway_item'][] = $newgw;
+ $config['interfaces']['wan']['gateway'] = "WANGW";
+ }
+ }
+ unset($config['wizardtemp']);
+ write_config();
+ reload_all();
+ mwexec_bg("/etc/rc.update_bogons.sh now");
+ ]]>
+ </stepafterformdisplay>
+</step>
+<step>
+ <id>10</id>
+ <title>Wizard completed.</title>
+ <stepbeforeformdisplay>
+ <![CDATA[
+ if($g['product_name'] <> 'pfSense') {
+ header("Location: " . fixup_string("\$myurl"));
+ exit;
+ }
+ ]]>
+ </stepbeforeformdisplay>
+ <description>
+ <![CDATA[
+ Congratulations! pfSense is now configured.<p/>
+ Please consider contributing back to the project!<p/>
+ Click <a target='_new' href='https://www.pfsense.org/get-involved/index.html'>here</a> to purchase services offered by the pfSense team and find other ways to contribute.<p/>
+ Click <a href='$myurl'>here</a> to continue on to pfSense webConfigurator.
+ ]]>
+ </description>
+</step>
+</pfsensewizard>
diff --git a/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc b/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
new file mode 100644
index 0000000..d984fed
--- /dev/null
+++ b/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc
@@ -0,0 +1,1664 @@
+<?php
+/*
+ traffic_shaper_wizard_dedicated.inc
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
+ Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
+ Copyright (C) 2008-2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+function step1_stepbeforeformdisplay() {
+ global $stepid, $savemsg, $pkg;
+
+ $fields =& $pkg['step'][0]['fields']['field'];
+
+ $wans = 0;
+ $lans = 0;
+
+ $iflisttmp = get_configured_interface_with_descr();
+ foreach ($iflisttmp as $if => $ifdesc) {
+ if (!is_altq_capable(get_real_interface($if)))
+ continue;
+ if (interface_has_gateway($if) || interface_has_gatewayv6($if))
+ $wans++;
+ else
+ $lans++;
+ }
+
+ foreach ($fields as &$field)
+ if ($field['name'] == 'numberofconnections')
+ $field['value'] = ($wans < $lans ? $wans : $lans);
+}
+
+function step1_submitphpaction() {
+ global $stepid, $savemsg;
+
+ if (!isset($_POST['numberofconnections'])) {
+ $savemsg=gettext("You need to specify the number of connections.");
+ $stepid--;
+ return;
+ }
+ if (intval($_POST['numberofconnections']) < 1) {
+ $savemsg=gettext("The number of connections should be greater than 1.");
+ $stepid--;
+ return;
+ }
+}
+
+function step2_stepbeforeformdisplay() {
+ global $config, $pkg;
+ global $stepid, $savemsg;
+
+ $wans = 0;
+ $lans = 0;
+ $iflist = array();
+ $iflisttmp = get_configured_interface_with_descr();
+ foreach ($iflisttmp as $if => $ifdesc) {
+ if (!is_altq_capable(get_real_interface($if)))
+ continue;
+ if (interface_has_gateway($if) || interface_has_gatewayv6($if))
+ $wans++;
+ else
+ $lans++;
+ $iflist[$if] = $ifdesc;
+ }
+ $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
+ if ($numberofconnections > ($wans < $lans ? $wans : $lans)) {
+ $savemsg=gettext("You have less interfaces than number of connections!");
+ $stepid--;
+ return;
+ }
+
+ $cfgname = "traffic_shaper_wizard_dedicated.xml";
+
+ $fields =& $pkg['step'][1]['fields']['field'];
+
+ /*
+ unset($config['ezshaper']['step2']);
+ $config['ezshaper']['step2'] = array();
+ write_config();
+ */
+ $fields = array();
+
+ for ($i = 0; $i < $numberofconnections; $i++) {
+ $field = array();
+ $linknum = $i+1;
+ $ifsel = ($i * 2);
+ $field['name'] = "Connection #{$linknum} parameters";
+ $field['type'] = "listtopic";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Local interface";
+ $field['name'] = "local{$i}interface";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $ifcnt = 0;
+ foreach ($iflist as $ifname => $ifdescr) {
+ // Skip wan interfaces here
+ if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
+ continue;
+ if ($ifcnt == ($ifsel + 1))
+ $field['value'] = $ifname;
+ $opts = array();
+ $opts['displayname'] = $ifdescr;
+ $opts['name'] = $ifname;
+ $opts['value'] = $ifname;
+ $field['options']['option'][] = $opts;
+ $ifcnt++;
+ }
+ $field['combinefieldsbegin'] = "true";
+ $field['bindstofield'] = "ezshaper->step2->local{$i}interface";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "local{$i}downloadscheduler";
+ $field['type'] = "select";
+ $field['typehint'] = "Queueing discipline to apply on the download of this connection.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "HFSC";
+ $opts['value'] = "HFSC";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "CBQ";
+ $opts['value'] = "CBQ";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PRIQ";
+ $opts['value'] = "PRIQ";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "WAN Interface";
+ $field['name'] = "conn{$i}interface";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $ifcnt = 0;
+ foreach ($iflist as $ifname => $ifdescr) {
+ // Skip lan interfaces here
+ if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
+ continue;
+ if ($ifcnt == $ifsel)
+ $field['value'] = $ifname;
+ $opts = array();
+ $opts['displayname'] = $ifdescr;
+ $opts['name'] = $ifname;
+ $opts['value'] = $ifname;
+ $field['options']['option'][] = $opts;
+ $ifcnt++;
+ }
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['name'] = "conn{$i}uploadscheduler";
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['type'] = "select";
+ $field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "HFSC";
+ $opts['value'] = "HFSC";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "CBQ";
+ $opts['value'] = "CBQ";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PRIQ";
+ $opts['value'] = "PRIQ";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upload";
+ $field['name'] = "conn{$i}upload";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}uploadspeed";
+ $field['typehint'] = "Upload bandwidth on this connection.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Download";
+ $field['name'] = "conn{$i}download";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}download";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}downloadspeed";
+ $field['typehint'] = "Download bandwidth on this connection.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
+ $fields[] = $field;
+ }
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $fields[] = $field;
+}
+
+function step2_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+ $sumdownloads = 0;
+
+ /* Input Validation */
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+ for ($i = 0; $i < $steps; $i++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
+ if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
+ $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
+ $stepid--;
+ return;
+ }
+ if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if (!is_numeric($_POST["conn{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ $upbw = $_POST["conn{$i}upload"];
+ $downbw = $_POST["conn{$i}download"];
+ if ($upbw < 1 || $downbw < 1) {
+ $savemsg = gettext("You cannot specify bandwidth smaller than 1!");
+ $stepid--;
+ return;
+ }
+ if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
+ $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
+ $stepid--;
+ return;
+ }
+ }
+ if ($_POST["local{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
+ $savemsg=gettext("You cannot select the same interface for local and outside.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+
+ /* This is necessary since the wizard expects predefined fields. */
+ unset($config['ezshaper']['step2']);
+ $config['ezshaper']['step2'] = array();
+
+ for ($i = 0; $i < $steps; $i++) {
+ $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
+ $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
+ $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
+ $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
+ $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
+ $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
+ $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
+ $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
+ }
+}
+
+function step3_stepbeforeformdisplay() {
+ global $config, $pkg;
+ global $stepid, $savemsg;
+
+ $cfgname = "traffic_shaper_wizard_dedicated.xml";
+
+ $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
+
+ $fields =& $pkg['step'][1]['fields']['field'];
+
+ $voipfields =& $pkg['step'][2]['fields']['field'];
+
+ $voipfields = array();
+ $enablefields = array();
+
+ $field = array();
+ $field['name'] = "Enable";
+ $field['type'] = "checkbox";
+ $field['typehint'] = "Prioritize Voice over IP traffic.";
+ $field['bindstofield'] = "ezshaper->step3->enable";
+ $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['name'] = "VOIP specific settings";
+ $field['type'] = "listtopic";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['name'] = "Provider";
+ $enablefields[] = "Provider";
+ $field['type'] = "select";
+ $field['description'] = "Choose Generic if your provider isn't listed.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "Generic (lowdelay)";
+ $opts['value'] = "Generic";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "VoicePulse";
+ $opts['value'] = "VoicePulse";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "Asterisk/Vonage";
+ $opts['value'] = "Asterisk";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PanasonicTDA";
+ $opts['value'] = "Panasonic";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->provider";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upstream SIP Server";
+ $field['name'] = "upstream_sip_server";
+ $enablefields[] = "upstream_sip_server";
+ $field['type'] = "inputalias";
+ $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
+ $field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
+ $field['bindstofield'] = "ezshaper->step3->address";
+ $voipfields[] = $field;
+
+ for ($i = 0; $i < $numberofconnections; $i++) {
+ $connum = $i + 1;
+ $field = array();
+ $field['name'] = "Connection #{$connum} parameters";
+ $field['type'] = "listtopic";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upload";
+ $field['name'] = "conn{$i}upload";
+ $enablefields[] = "conn{$i}upload";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
+ $field['combinefieldsbegin'] = "true";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}uploadspeed";
+ $enablefields[] = "conn{$i}uploadspeed";
+ $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Download";
+ $field['name'] = "local{$i}download";
+ $enablefields[] = "local{$i}download";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step3->local{$i}download";
+ $field['combinefieldsbegin'] = "true";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "local{$i}downloadspeed";
+ $enablefields[] = "local{$i}downloadspeed";
+ $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
+ $voipfields[] = $field;
+ }
+
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $voipfields[] = $field;
+ $voipfields[0]['enablefields'] = implode(",", $enablefields);
+}
+
+function step3_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+
+ if (!$_POST['enable'])
+ return;
+
+ if($_POST['upstream_sip_server']) {
+ if(!is_ipaddroralias($_POST['upstream_sip_server'])) {
+ /* item is not an ip or alias. error out */
+ $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
+ $stepid--;
+ return;
+ }
+ }
+
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+ for ($i = 0; $i < $steps; $i++) {
+ if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] != "PRIQ") {
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if ($_POST["conn{$i}uploadspeed"] == "%") {
+ if (intval($_POST["conn{$i}upload"]) > 80) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ } else {
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
+ $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+
+ if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] != "PRIQ") {
+ if (!is_numeric($_POST["local{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if ($_POST["local{$i}downloadspeed"] == "%") {
+ if (intval($_POST["local{$i}download"]) > 80) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ } else {
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
+ $input_bw = $factor * floatval($_POST["local{$i}download"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+ }
+
+ /* This is necessary since the wizard expects predefined fields. */
+ unset($config['ezshaper']['step3']);
+ $config['ezshaper']['step3'] = array();
+
+ if (!empty($_POST['upstream_sip_server']))
+ $config['ezshaper']['step3']['address'] = $_POST['upstream_sip_server'];
+ if ($_POST['enable'] == 'on')
+ $config['ezshaper']['step3']['enable'] = 'on';
+ for ($i = 0; $i < $steps; $i++) {
+ $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
+ $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
+ $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
+ $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
+ }
+}
+
+function step4_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+
+ if ( $_POST['enable'] ) {
+ if(!$_POST['bandwidth']) {
+ $savemsg="You need to specify a value for bandwidth!";
+ $stepid--;
+ return;
+ }
+ if(!is_numeric($_POST['bandwidth'])) {
+ $savemsg="The posted value is not a valid bandwidth.";
+ $stepid--;
+ return;
+ }
+
+ if ($_POST['bandwidthspeed'] <> "%") {
+ $savemsg = gettext("Only percentage bandwidth specification is allowed.");
+ $stepid--;
+ return;
+ }
+ $bw = $_POST['bandwidth'];
+ if($bw > 15 || $bw < 2) {
+ $savemsg="Values should be between 2% and 15%!";
+ $stepid--;
+ return;
+ }
+ if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
+ /* item is not an ip or alias. error out */
+ $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
+ $stepid--;
+ }
+ }
+}
+
+function step5_stepsubmitphpaction() {
+ global $stepid, $savemsg;
+
+ if ( $_POST['enable'] ) {
+ if ($_POST['p2pcatchall']) {
+ if(!is_numeric($_POST['bandwidth'])) {
+ $savemsg="Posted value is not a valid bandwidth.";
+ $stepid--;
+ return;
+ }
+ if ($_POST['bandwidthspeed'] <> "%") {
+ $savemsg = gettext("Only percentage bandwidth specification is allowed.");
+ $stepid--;
+ return;
+ }
+ $bw = $_POST['bandwidth'];
+ if($bw > 15 || $bw < 2) {
+ $savemsg="Values should be between 2% and 15%!";
+ $stepid--;
+ return;
+ }
+ }
+ }
+}
+
+function step8_stepsubmitphpaction() {
+ global $g, $config;
+
+ /* save the new configuration */
+ apply_all_chosen_items();
+
+ /* reset rrd queues */
+ system("rm -f /var/db/rrd/*queuedrops.rrd");
+ system("rm -f /var/db/rrd/*queues.rrd");
+ enable_rrd_graphing();
+
+ /* apply the new configuration to the system */
+ filter_configure();
+
+ /* And we're no longer dirty! */
+ clear_subsystem_dirty('shaper');
+
+ update_filter_reload_status("Initializing");
+ header("Location: status_filter_reload.php");
+ exit;
+}
+
+function apply_all_chosen_items() {
+ global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
+
+ require_once("wizardapp.inc");
+
+ /*
+ * Wipe previous config.
+ * Doing it here makes sense since we can wipe the previous config only after
+ * the user decides to do so, finishing the wizard.
+ */
+ if(isset($config['shaper']['queue']))
+ unset($config['shaper']['queue']);
+ /* XXX: This is redundant, because this should be handled by converter at startup. */
+ if(isset($config['shaper']['rule']))
+ unset($config['shaper']['rule']);
+ foreach ($config['filter']['rule'] as $key => $rule)
+ if ($rule['wizard'] == "yes")
+ unset($config['filter']['rule'][$key]);
+
+ /* restart the cached config */
+ unset($altq_list_queues);
+ $altq_list_queues = array();
+
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+
+ $interfacelist = array();
+
+ for ($i = 0; $i < $steps; $i++) {
+
+ $tmppath = array();
+ $altq =& new altq_root_queue();
+
+ $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
+ $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
+ $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
+ $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
+ $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $altq->SetEnabled("on");
+ $altq_list_queues[$altq->GetQname()] =& $altq;
+ array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
+ $altq->SetLink($tmppath);
+ $altq->wconfig();
+
+ $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
+ $voipbw =0;
+ $voipbwunit = "Kb";
+ $voip = false;
+ $penalty = false;
+ $penaltybw = 0;
+ $penaltybwunit = "Kb";
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ $p2pcatchbwunit = "%";
+ $games = false;
+ $otherpriority = false;
+ $remainbw = 0;
+ $factor = 0;
+ $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
+
+ if ($config['ezshaper']['step3']['enable']) {
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
+ $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
+ }
+ if ($config['ezshaper']['step4']['enable']) {
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
+ } else {
+ $penalty = false;
+ $penaltybw = 0;
+ }
+ if ($config['ezshaper']['step5']['enable']) {
+ $p2p = true;
+ if ($config['ezshaper']['step5']['p2pcatchall']) {
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
+ } else {
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ } else {
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ if ($config['ezshaper']['step6']['enable']) {
+ $games = true;
+ } else {
+ $games = false;
+ }
+
+ if ($config['ezshaper']['step7']['enable']) {
+ $otherpriority = true;
+ } else {
+ $otherpriority = false;
+ }
+ $remainbw = round($remainbw / $upbw * 100, 2);
+
+ if (intval($remainbw) > 0 && intval($remainbw) > 30) {
+ $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
+ header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
+ exit;
+ } else {
+ $remainbw = 100 - $remainbw;
+ }
+
+ if ($sched != "PRIQ") {
+ if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qInternet";
+ //$tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ }
+ else if ($sched == "HFSC") {
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] =
+ floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ }
+ array_push($tmppath, "qInternet");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ //array_pop($tmppath);
+ //echo "qInternet <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ $altq =& $qtmp;
+ }
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qACK";
+ $tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ else if ($sched == "HFSC") {
+ $lkbw = 0.20 * $remainbw;
+ $tmpcf['linkshare3'] = "{$lkbw}%";
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = $lkbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qACK");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qACK <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ if ($p2pcatchall)
+ $tmpcf['name'] = "qOthersDefault";
+ else
+ $tmpcf['name'] = "qDefault";
+ $tmpcf['priority'] = 3;
+ $tmpcf['enabled'] = "on";
+ if (!$p2pcatchall)
+ $tmpcf['default'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, $tmpcf['name']);
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qDefault <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($p2p) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qP2P";
+ $tmpcf['priority'] = 1;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($p2pcatchall) {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ }
+ $tmpcf['default'] = "on";
+
+ } else {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$tmpbw}%";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$tmpbw}%";
+ $tmpcf['bandwidth'] = $tmpbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ }
+ array_push($tmppath, "qP2P");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qP2P <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($voip) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qVoIP";
+ $tmpcf['priority'] = 7;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($voipbw > 0) {
+ $tmpcf['bandwidth'] = $voipbw;
+ $tmpcf['bandwidthtype'] = $voipbwunit;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($voipbw > 0) {
+ $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
+ } else {
+ $voipbw = $remainbw * 0.20; /* 20% bandwidth */
+ $tmpcf['realtime3'] = "{$voipbw}%";
+ }
+ $tmpcf['realtime'] = "on";
+ $tmpcf['bandwidth'] = 32;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ array_push($tmppath, "qVoIP");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qVoIP <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($games) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qGames";
+ $tmpcf['priority'] = 5;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$gamesbw}%";
+ $tmpcf['bandwidth'] = "{$gamesbw}";
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qGames");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qGames <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($otherpriority) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersHigh";
+ $tmpcf['priority'] = 4;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $otherbw = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['linkshare3'] = "{$otherbw}%";
+ $tmpcf['bandwidth'] = $otherbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qOthersHigh");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qHigh <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersLow";
+ $tmpcf['priority'] = 2;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($penalty) {
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ $tmpcf['bandwidth'] = $penaltybw;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($penalty) {
+ $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $lsbw = $remainbw * 0.05;
+ $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
+ $tmpcf['bandwidth'] = $lsbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ $tmpcf['linkshare'] = "on";
+ }
+ array_push($tmppath, "qOthersLow");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qLow <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+ array_pop($tmppath);
+
+ $downfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $downbw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $downfactor;
+
+ $tmppath = array();
+ $altq =& new altq_root_queue();
+
+ $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
+ $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
+ //$altq->SetBandwidth($config['ezshaper']['step2']["conn{$i}download"]);
+ //$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $altq->SetEnabled("on");
+ $altq_list_queues[$altq->GetQname()] =& $altq;
+ array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
+ $altq->SetLink($tmppath);
+ //var_dump($input_errors);
+ $altq->wconfig();
+
+ $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
+ $voipbw =0;
+ $voipbwunit = "%";
+ $voip = false;
+ $penalty = false;
+ $penaltybw = 0;
+ $penaltybwunit = "%";
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ $games = false;
+ $otherpriority = false;
+ $remainbw = 0;
+
+ if ($config['ezshaper']['step3']['enable']) {
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["local{$i}download"];
+ $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
+ if ($sched != HFSC) {
+ if ($voipbwunit == "%")
+ $factor = $downbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += floatval($voipbw) * $factor;
+ } else
+ $remainbw += 32000; /* 32Kbit/s reserved for HFSC link sharing */
+ }
+ if ($config['ezshaper']['step4']['enable']) {
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $downbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += floatval($penaltybw) * $factor;
+ } else {
+ $penalty = false;
+ $penaltybw = 0;
+ }
+ if ($config['ezshaper']['step5']['enable']) {
+ $p2p = true;
+ if ($config['ezshaper']['step5']['p2pcatchall']) {
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $downbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += floatval($p2pcatchbw) * $factor;
+ } else {
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ } else {
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ if ($config['ezshaper']['step6']['enable']) {
+ $games = true;
+ } else {
+ $games = false;
+ }
+
+ if ($config['ezshaper']['step7']['enable']) {
+ $otherpriority = true;
+ } else {
+ $otherpriority = false;
+ }
+ $remainbw = round($remainbw / $downbw * 100, 2);
+ if (intval($remainbw) > 0 && intval($remainbw) > 40) {
+ $savemsg=gettext("Custom Bandwidths are greater than 40%. Please lower them for the wizard to continue.");
+ header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
+ exit;
+ } else {
+ $remainbw = 100 - $remainbw;
+ }
+
+ if (!$p2pcatchall) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qLink";
+ $tmpcf['priority'] = 2;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['default'] = "on";
+ $tmpcf['qlimit'] = 500;
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, $tmpcf['name']);
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qDefault <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($sched != "PRIQ") {
+ if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qInternet";
+ //$tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
+ }
+ else if ($sched == "HFSC") {
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
+ }
+ array_push($tmppath, "qInternet");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ //array_pop($tmppath);
+ //echo "qInternet <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ $altq =& $qtmp;
+ }
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qACK";
+ $tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2;
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $lkbw = 0.20 * $remainbw;
+ $tmpcf['linkshare3'] = "{$lkbw}%";
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = $lkbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qACK");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qACK $remainbw <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($p2p) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qP2P";
+ $tmpcf['priority'] = 1;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($p2pcatchall) {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ }
+ $tmpcf['default'] = "on";
+ $tmpcf['qlimit'] = 500;
+ } else {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$tmpbw}%";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$tmpbw}%";
+ $tmpcf['bandwidth'] = $tmpbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ }
+ array_push($tmppath, "qP2P");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qP2P <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($voip) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qVoIP";
+ $tmpcf['priority'] = 7;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($voipbw > 0) {
+ $tmpcf['bandwidth'] = $voipbw;
+ $tmpcf['bandwidthtype'] = $voipbwunit;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($voipbw > 0) {
+ $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
+ } else {
+ $voipbw = $remainbw * 0.20; /* 20% bandwidth */
+ $tmpcf['realtime3'] = "{$voipbw}%";
+ }
+ $tmpcf['realtime'] = "on";
+ $tmpcf['bandwidth'] = 32;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ array_push($tmppath, "qVoIP");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qVoIP <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($games) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qGames";
+ $tmpcf['priority'] = 5;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$gamesbw}%";
+ $tmpcf['bandwidth'] = "{$gamesbw}";
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qGames");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qGames <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($otherpriority) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersHigh";
+ $tmpcf['priority'] = 4;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $otherbw = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['linkshare3'] = "{$otherbw}%";
+ $tmpcf['bandwidth'] = $otherbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qOthersHigh");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qHigh <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersLow";
+ $tmpcf['priority'] = 3;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($penalty) {
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $tmpcf['bandwidthtype'] = "%";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ }
+ } else if ($sched == "HFSC") {
+ if ($penalty) {
+ $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $lsbw = $remainbw * 0.05;
+ $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
+ $tmpcf['bandwidth'] = $lsbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ $tmpcf['linkshare'] = "on";
+ }
+ array_push($tmppath, "qOthersLow");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qLow <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+ array_pop($tmppath);
+ }
+
+ if (!is_array($config['filter']['rule']))
+ $config['filter']['rule'] = array();
+
+ $interfacelist = implode(",", $interfacelist);
+
+ /* Rules */
+ if ($penalty) {
+ if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Penalty Box");
+ $rule['defaultqueue'] = "qOthersLow";
+ $rule['source']['address'] = $config['ezshaper']['step4']['address'];
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+
+ /* If user specifies an IP, we don't bother with providers */
+ if ($voip) {
+ if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
+ /* create VOIP rules */
+ $rule = array();
+ $rule['type'] = "match";
+ //$rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Connections From Upstream SIP Server");
+ $rule['protocol'] = "udp";
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['source']['address'] = $config['ezshaper']['step3']['address'];
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ $rule = array();
+ $rule['type'] = "match";
+ //$rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Connections To Upstream SIP Server");
+ $rule['protocol'] = "udp";
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['address'] = $config['ezshaper']['step3']['address'];
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
+ /* create VOIP rules */
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['descr'] = "DiffServ/Lowdelay/Upload";
+ $rule['protocol'] = "udp";
+ $rule['source']['any'] = TRUE;
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['destination']['any'] = TRUE;
+ $rule['iptos'] = "lowdelay";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ } else {
+ /* loop through voiplist[] */
+ foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qVoIP';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['descr'] = "m_voip {$voip[0]} outbound";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['destination']['port'] = $voip[2]."-".$voip[3];
+ if($voip[1] != '')
+ $rule['protocol'] = $voip[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through p2plist[] */
+ if ($p2p) {
+ foreach($config['ezshaper']['step5'] as $key => $val) {
+ if (!is_array($p2plist[$key]))
+ continue;
+ foreach ($p2plist[$key] as $p2pclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qP2P';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
+ if($p2pclient[1] != '')
+ $rule['protocol'] = $p2pclient[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through gamesplist[] */
+ if ($games) {
+ foreach($config['ezshaper']['step6'] as $key => $val) {
+ if (!is_array($gamesplist[$key]))
+ continue;
+ foreach ($gamesplist[$key] as $Gameclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qGames';
+ if ($Gameclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['descr'] = "m_Game {$Gameclient[0]} outbound";
+ $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
+ if($Gameclient[1] != '')
+ $rule['protocol'] = $Gameclient[1];
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through othersplist[] */
+ if ($otherpriority) {
+ foreach($config['ezshaper']['step7'] as $key => $val) {
+ if (!is_array($othersplist[$key]))
+ continue;
+ foreach ($othersplist[$key] as $otherclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ switch ($val) {
+ case "H":
+ $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $loop = 0;
+ break;
+ case "L":
+ $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $loop = 0;
+ break;
+ case "D":
+ if ($p2pcatchall) {
+ $loop = 0;
+ $rule['defaultqueue'] = 'qOthersDefault';
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ } else
+ $loop = 1; /* It automatically goes to default queue */
+ break;
+ default:
+ $loop = 1;
+ }
+ if (!$loop) {
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['descr'] = "m_Other {$otherclient[0]} outbound";
+
+ if($otherclient[2] or $otherclient[3]) {
+ $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
+ }
+ if($otherclient[1] != '')
+ $rule['protocol'] = $otherclient[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+ }
+ write_config();
+}
+
+function wizard_get_bandwidthtype_scale($type = "b") {
+ switch ($type) {
+ case "Gb":
+ $factor = 1024 * 1024 * 1024;
+ break;
+ case "Mb":
+ $factor = 1024 * 1024;
+ break;
+ case "Kb":
+ $factor = 1024;
+ break;
+ case "b":
+ default:
+ $factor = 1;
+ break;
+ }
+ return intval($factor);
+}
+
+?>
diff --git a/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml b/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml
new file mode 100755
index 0000000..c86a72a
--- /dev/null
+++ b/src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.xml
@@ -0,0 +1,1649 @@
+<?xml version="1.0"?>
+<pfsensewizard>
+ <copyright><![CDATA[
+ /*
+ traffic_shaper_wizard_dedicated.xml
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
+ Copyright (C) 2008-2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */]]></copyright>
+
+ <totalsteps>9</totalsteps>
+ <step>
+ <id>1</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableheader>true</disableheader>
+ <description>This wizard will guide you through setting up the pfSense traffic shaper.
+ Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
+ </description>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Traffic shaper Wizard</name>
+ </field>
+ <field>
+ <displayname>Enter number of WAN type connections</displayname>
+ <name>numberofconnections</name>
+ <type>input</type>
+ <validate>^[0-9]+$</validate>
+ <description>Number of connections you have</description>
+ <bindstofield>ezshaper->step1->numberofconnections</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>2</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Shaper configuration</description>
+ <javascriptafterformdisplay/>
+ <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ <fields>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ </step>
+ <step>
+ <id>3</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Voice over IP</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Prioritize Voice over IP traffic</typehint>
+ <description>This will raise the priority of VOIP traffic above all other traffic.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>VOIP specific settings</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Provider</name>
+ <type>select</type>
+ <description>Choose Generic if your provider isn't listed.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
+ <options>
+ <option>
+ <name>Generic (lowdelay)</name>
+ <value>Generic</value>
+ </option>
+ <option>
+ <name>VoicePulse</name>
+ <value>VoicePulse</value>
+ </option>
+ <option>
+ <name>Asterisk/Vonage</name>
+ <value>Asterisk</value>
+ </option>
+ <option>
+ <name>PanasonicTDA</name>
+ <value>Panasonic</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <displayname>Upstream SIP Server</displayname>
+ <name>upstream_sip_server</name>
+ <type>inputalias</type>
+ <description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
+ <message>IP Address field is non-blank and doesn't look like an IP address.</message>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>4</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Penalty Box</description>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Penalize IP or Alias</typehint>
+ <description>This will lower the priority of traffic from this IP or alias.</description>
+ <enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
+ <bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>PenaltyBox specific settings</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Address</name>
+ <type>inputalias</type>
+ <description>This allows you to just provide the IP address of the computer(s) to penalize. NOTE: You can also use a Firewall Alias in this location.</description>
+ <bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
+ <message>IP Address field is non-blank and doesn't look like an IP address.</message>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <message>Speed must be numerical.</message>
+ <bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <donotdisable>true</donotdisable>
+ <name>BandwidthSpeed</name>
+ <description>The limit you want to apply.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>%</name>
+ <value>%</value>
+ </option>
+ <option>
+ <name>bit/s</name>
+ <value>b</value>
+ </option>
+ <option>
+ <name>Kilobit/s</name>
+ <value>Kb</value>
+ </option>
+ <option>
+ <name>Megabit/s</name>
+ <value>Mb</value>
+ </option>
+ <option>
+ <name>Gigabit/s</name>
+ <value>Gb</value>
+ </option>
+ </options>
+ <bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>5</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Peer to Peer networking</description>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Lower priority of Peer-to-Peer traffic</typehint>
+ <description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
+ <enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
+ <bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>p2p Catch all</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>p2pCatchAll</name>
+ <type>checkbox</type>
+ <typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <message>Speed must be numerical.</message>
+ <bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <donotdisable>true</donotdisable>
+ <name>BandwidthSpeed</name>
+ <description>The limit you want to apply.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>%</name>
+ <value>%</value>
+ </option>
+ <option>
+ <name>bit/s</name>
+ <value>b</value>
+ </option>
+ <option>
+ <name>Kilobit/s</name>
+ <value>Kb</value>
+ </option>
+ <option>
+ <name>Megabit/s</name>
+ <value>Mb</value>
+ </option>
+ <option>
+ <name>Gigabit/s</name>
+ <value>Gb</value>
+ </option>
+ </options>
+ <bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
+ </field>
+ <field>
+ <name>Enable/Disable specific P2P protocols</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Aimster</name>
+ <type>checkbox</type>
+ <typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
+ </field>
+ <field>
+ <name>BitTorrent</name>
+ <type>checkbox</type>
+ <typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
+ </field>
+ <field>
+ <name>BuddyShare</name>
+ <type>checkbox</type>
+ <typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
+ </field>
+ <field>
+ <name>CuteMX</name>
+ <type>checkbox</type>
+ <typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
+ </field>
+ <field>
+ <name>DCplusplus</name>
+ <type>checkbox</type>
+ <typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
+ </field>
+ <field>
+ <name>DCC</name>
+ <type>checkbox</type>
+ <typehint>irc DCC file transfers</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
+ </field>
+ <field>
+ <name>DirectConnect</name>
+ <type>checkbox</type>
+ <typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
+ </field>
+ <field>
+ <name>DirectFileExpress</name>
+ <type>checkbox</type>
+ <typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
+ </field>
+ <field>
+ <name>eDonkey2000</name>
+ <type>checkbox</type>
+ <typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
+ </field>
+ <field>
+ <name>FastTrack</name>
+ <type>checkbox</type>
+ <typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
+ </field>
+ <field>
+ <name>Gnutella</name>
+ <type>checkbox</type>
+ <typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
+ </field>
+ <field>
+ <name>grouper</name>
+ <type>checkbox</type>
+ <typehint>grouper and other P2P using the grouper protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
+ </field>
+ <field>
+ <name>hotComm</name>
+ <type>checkbox</type>
+ <typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
+ </field>
+ <field>
+ <name>HotlineConnect</name>
+ <type>checkbox</type>
+ <typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
+ </field>
+ <field>
+ <name>iMesh</name>
+ <type>checkbox</type>
+ <typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
+ </field>
+ <field>
+ <name>Napster</name>
+ <type>checkbox</type>
+ <typehint>Napster and other P2P using the Napster protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
+ </field>
+ <field>
+ <name>OpenNap</name>
+ <type>checkbox</type>
+ <typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
+ </field>
+ <field>
+ <name>Scour</name>
+ <type>checkbox</type>
+ <typehint>Scour and other P2P using the Scour protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
+ </field>
+ <field>
+ <name>Shareaza</name>
+ <type>checkbox</type>
+ <typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
+ </field>
+ <field>
+ <name>SongSpy</name>
+ <type>checkbox</type>
+ <typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
+ </field>
+ <field>
+ <name>WinMX</name>
+ <type>checkbox</type>
+ <typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>6</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <description>Network Games</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Prioritize network gaming traffic</typehint>
+ <description>This will raise the priority of gaming traffic to higher than most traffic.</description>
+ <enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
+ <donotdisable>true</donotdisable>
+ <bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>Enable/Disable specific game consoles and services</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>BattleNET</name>
+ <type>checkbox</type>
+ <typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
+ </field>
+ <field>
+ <name>EAOrigin</name>
+ <type>checkbox</type>
+ <typehint>EA Origin Client - Some PC games by EA use this.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
+ </field>
+ <field>
+ <name>GameForWindowsLive</name>
+ <type>checkbox</type>
+ <typehint>Games for Windows Live</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
+ </field>
+ <field>
+ <name>PlayStationConsoles</name>
+ <type>checkbox</type>
+ <typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
+ </field>
+ <field>
+ <name>Steam</name>
+ <type>checkbox</type>
+ <typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
+ </field>
+ <field>
+ <name>WiiConsoles</name>
+ <type>checkbox</type>
+ <typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
+ </field>
+ <field>
+ <name>XboxConsoles</name>
+ <type>checkbox</type>
+ <typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
+ </field>
+ <field>
+ <name>Enable/Disable specific games</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>ARMA2</name>
+ <type>checkbox</type>
+ <typehint>ARMA 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
+ </field>
+ <field>
+ <name>ARMA3</name>
+ <type>checkbox</type>
+ <typehint>ARMA 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
+ </field>
+ <field>
+ <name>Battlefield2</name>
+ <type>checkbox</type>
+ <typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
+ </field>
+ <field>
+ <name>Battlefield3</name>
+ <type>checkbox</type>
+ <typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
+ </field>
+ <field>
+ <name>BattlefieldBC2</name>
+ <type>checkbox</type>
+ <typehint>Battlefield: Bad Company 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
+ </field>
+ <field>
+ <name>Borderlands</name>
+ <type>checkbox</type>
+ <typehint>Borderlands</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
+ </field>
+ <field>
+ <name>CallOfDuty</name>
+ <type>checkbox</type>
+ <typehint>Call Of Duty (United Offensive)</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
+ </field>
+ <field>
+ <name>Counterstrike</name>
+ <type>checkbox</type>
+ <typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
+ </field>
+ <field>
+ <name>Crysis2</name>
+ <type>checkbox</type>
+ <typehint>Crysis 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
+ </field>
+ <field>
+ <name>Crysis3</name>
+ <type>checkbox</type>
+ <typehint>Crysis 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
+ </field>
+ <field>
+ <name>DeadSpace2</name>
+ <type>checkbox</type>
+ <typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
+ </field>
+ <field>
+ <name>DeadSpace3</name>
+ <type>checkbox</type>
+ <typehint>Dead Space 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
+ </field>
+ <field>
+ <name>DeltaForce</name>
+ <type>checkbox</type>
+ <typehint>Delta Force</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
+ </field>
+ <field>
+ <name>Dirt3</name>
+ <type>checkbox</type>
+ <typehint>Dirt 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
+ </field>
+ <field>
+ <name>DOOM3</name>
+ <type>checkbox</type>
+ <typehint>DOOM3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
+ </field>
+ <field>
+ <name>DragonAge2</name>
+ <type>checkbox</type>
+ <typehint>Dragon Age 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
+ </field>
+ <field>
+ <name>EmpireEarth</name>
+ <type>checkbox</type>
+ <typehint>Empire Earth</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
+ </field>
+ <field>
+ <name>EveOnline</name>
+ <type>checkbox</type>
+ <typehint>EVE Online</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
+ </field>
+ <field>
+ <name>Everquest</name>
+ <type>checkbox</type>
+ <typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
+ </field>
+ <field>
+ <name>Everquest2</name>
+ <type>checkbox</type>
+ <typehint>Everquest II</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
+ </field>
+ <field>
+ <name>FarCry</name>
+ <type>checkbox</type>
+ <typehint>Far Cry</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
+ </field>
+ <field>
+ <name>FarCry2</name>
+ <type>checkbox</type>
+ <typehint>Far Cry 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
+ </field>
+ <field>
+ <name>FarCry3</name>
+ <type>checkbox</type>
+ <typehint>Far Cry 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
+ </field>
+ <field>
+ <name>GunZOnline</name>
+ <type>checkbox</type>
+ <typehint>GunZ Online</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
+ </field>
+ <field>
+ <name>HalfLife</name>
+ <type>checkbox</type>
+ <typehint>Half-Life</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
+ </field>
+ <field>
+ <name>LeagueofLegends</name>
+ <type>checkbox</type>
+ <typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
+ </field>
+ <field>
+ <name>Lineage2</name>
+ <type>checkbox</type>
+ <typehint>Lineage II</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
+ </field>
+ <field>
+ <name>MassEffect3</name>
+ <type>checkbox</type>
+ <typehint>Mass Effect 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
+ </field>
+ <field>
+ <name>MechwarriorOnline</name>
+ <type>checkbox</type>
+ <typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
+ </field>
+ <field>
+ <name>Minecraft</name>
+ <type>checkbox</type>
+ <typehint>Minecraft</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
+ </field>
+ <field>
+ <name>PlanetSide</name>
+ <type>checkbox</type>
+ <typehint>PlanetSide</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
+ </field>
+ <field>
+ <name>PlanetSide2</name>
+ <type>checkbox</type>
+ <typehint>PlanetSide 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
+ </field>
+ <field>
+ <name>OperationFlashpointDR</name>
+ <type>checkbox</type>
+ <typehint>Operation Flashpoint: Dragon Rising</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
+ </field>
+ <field>
+ <name>QuakeIII</name>
+ <type>checkbox</type>
+ <typehint>Quake III</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
+ </field>
+ <field>
+ <name>QuakeIV</name>
+ <type>checkbox</type>
+ <typehint>Quake IV</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
+ </field>
+ <field>
+ <name>StarWarsTOR</name>
+ <type>checkbox</type>
+ <typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
+ </field>
+ <field>
+ <name>TigerWoods2004PS2</name>
+ <type>checkbox</type>
+ <typehint>Tiger Woods 2004 for PS2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
+ </field>
+ <field>
+ <name>TribesAscend</name>
+ <type>checkbox</type>
+ <typehint>Tribes Ascend</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
+ </field>
+ <field>
+ <name>UnrealTournament</name>
+ <type>checkbox</type>
+ <typehint>Unreal Tournament Series</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
+ </field>
+ <field>
+ <name>WolfensteinEnemyTerritory</name>
+ <type>checkbox</type>
+ <typehint>Wolfenstein Enemy Territory</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
+ </field>
+ <field>
+ <name>WorldOfWarcraft</name>
+ <type>checkbox</type>
+ <typehint>World of Warcraft</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>7</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <description>Raise or lower other Applications</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Other networking protocols</typehint>
+ <description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
+ <enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,RTMP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
+ <donotdisable>true</donotdisable>
+ <bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>Remote Service / Terminal emulation</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>AppleRemoteDesktop</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Remote Desktop</typehint>
+ </field>
+ <field>
+ <name>MSRDP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft Remote Desktop Protocol</typehint>
+ </field>
+ <field>
+ <name>PCAnywhere</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Symantec PC Anywhere</typehint>
+ </field>
+ <field>
+ <name>VNC</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Virtual Network Computing</typehint>
+ </field>
+ <field>
+ <name>Messengers</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>AIM</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>AOL Instant Messenger</typehint>
+ </field>
+ <field>
+ <name>Facetime</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Facetime</typehint>
+ </field>
+ <field>
+ <name>ICQ</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>ICQ</typehint>
+ </field>
+ <field>
+ <name>IRC</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Internet Relay Chat</typehint>
+ </field>
+ <field>
+ <name>Jabber</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Jabber instant messenger</typehint>
+ </field>
+ <field>
+ <name>GoogleHangouts</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Google Hangouts</typehint>
+ </field>
+ <field>
+ <name>MSN</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>MSN Messenger</typehint>
+ </field>
+ <field>
+ <name>Teamspeak</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>TeamSpeak</typehint>
+ </field>
+ <field>
+ <name>Teamspeak3</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>TeamSpeak 3</typehint>
+ </field>
+ <field>
+ <name>Ventrilo</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Ventrilo</typehint>
+ </field>
+ <field>
+ <name>VPN</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>PPTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft Point to Point tunneling protocol</typehint>
+ </field>
+ <field>
+ <name>IPSEC</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>IPSEC VPN traffic</typehint>
+ </field>
+ <field>
+ <name>Multimedia/Streaming</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>iTunesRadio</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ </field>
+ <field>
+ <name>StreamingMP3</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Streaming Media</typehint>
+ </field>
+ <field>
+ <name>RTSP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>RealTime streaming protocol</typehint>
+ </field>
+ <field>
+ <name>RTMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;rtmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Real-Time Messaging Protocol - Used by video streaming services such as Twitch.tv.</typehint>
+ </field>
+ <field>
+ <name>Web</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>HTTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>HTTP and HTTPS aka Web Traffic</typehint>
+ </field>
+ <field>
+ <name>Mail</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>SMTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Mail Protocol</typehint>
+ </field>
+ <field>
+ <name>POP3</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>POP3 Protocol</typehint>
+ </field>
+ <field>
+ <name>IMAP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>IMAP Protocol</typehint>
+ </field>
+ <field>
+ <name>LotusNotes</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Lotus Notes</typehint>
+ </field>
+ <field>
+ <name>Game Downloader</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>BattleNetDownloader</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Battle.NET Downloader</typehint>
+ </field>
+ <field>
+ <name>SteamDownloader</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Steam Downloader</typehint>
+ </field>
+ <field>
+ <name>Miscellaneous</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>APNS</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Push Notification Service</typehint>
+ </field>
+ <field>
+ <name>AppleMobileSync</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Mobile Sync</typehint>
+ </field>
+ <field>
+ <name>CrashPlan</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>CrashPlan</typehint>
+ </field>
+ <field>
+ <name>CVSUP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>CVSUP</typehint>
+ </field>
+ <field>
+ <name>DNS</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Domain Name Services</typehint>
+ </field>
+ <field>
+ <name>Git</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Git Server</typehint>
+ </field>
+ <field>
+ <name>HBCI</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>HBCI</typehint>
+ </field>
+ <field>
+ <name>ICMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>ICMP Protocol</typehint>
+ </field>
+ <field>
+ <name>SMB</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft SMB Protocol and friends</typehint>
+ </field>
+ <field>
+ <name>SNMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Simple Network Management Protocol</typehint>
+ </field>
+ <field>
+ <name>MySQLServer</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>MySQL Server</typehint>
+ </field>
+ <field>
+ <name>NNTP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Internet News</typehint>
+ </field>
+ <field>
+ <name>Slingbox</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Slingbox</typehint>
+ </field>
+ <field>
+ <name>Subversion</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Subversion Server</typehint>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+ <step>
+ <id>8</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <field>
+ <name>Reload profile notice</name>
+ <type>listtopic</type>
+ </field>
+ <description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
+ <fields>
+ <field>
+ <name>Finish</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
+ </step>
+</pfsensewizard>
diff --git a/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc b/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
new file mode 100644
index 0000000..3f68869
--- /dev/null
+++ b/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc
@@ -0,0 +1,1741 @@
+<?php
+/*
+ traffic_shaper_wizard_multi_all.inc
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
+ Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
+ Copyright (C) 2008-2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+function step1_stepbeforeformdisplay() {
+ global $stepid, $savemsg, $pkg;
+
+ $fields =& $pkg['step'][0]['fields']['field'];
+
+ $lans = 0;
+ $wans = 0;
+
+ $iflisttmp = get_configured_interface_with_descr();
+ foreach ($iflisttmp as $if => $ifdesc) {
+ if (!is_altq_capable(get_real_interface($if)))
+ continue;
+ if (interface_has_gateway($if) || interface_has_gatewayv6($if))
+ $wans++;
+ else
+ $lans++;
+ }
+
+ foreach ($fields as &$field) {
+ if ($field['name'] == 'numberofconnections')
+ $field['value'] = $wans;
+ else if ($field['name'] == 'numberoflocalinterfaces')
+ $field['value'] = $lans;
+ }
+}
+
+function step1_submitphpaction() {
+ global $stepid, $savemsg;
+
+ if (!isset($_POST['numberofconnections'])) {
+ $savemsg=gettext("You need to specify the number of connections.");
+ $stepid--;
+ return;
+ }
+ if (intval($_POST['numberofconnections']) < 1) {
+ $savemsg=gettext("The number of connections should be greater than 1.");
+ $stepid--;
+ return;
+ }
+
+ if (!isset($_POST['numberoflocalinterfaces'])) {
+ $savemsg=gettext("You need to specify the number of LAN type interfaces.");
+ $stepid--;
+ return;
+ }
+ if (intval($_POST['numberoflocalinterfaces']) < 1) {
+ $savemsg=gettext("The number of LAN type interfaces should be greater than 1.");
+ $stepid--;
+ return;
+ }
+}
+
+function step2_stepbeforeformdisplay() {
+ global $config, $pkg;
+ global $stepid, $savemsg;
+
+ $wans = 0;
+ $lans = 0;
+ $iflist = array();
+ $iflisttmp = get_configured_interface_with_descr();
+ foreach ($iflisttmp as $if => $ifdesc) {
+ if (!is_altq_capable(get_real_interface($if)))
+ continue;
+ if (interface_has_gateway($if) || interface_has_gatewayv6($if))
+ $wans++;
+ else
+ $lans++;
+ $iflist[$if] = $ifdesc;
+ }
+ $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
+ if ($numberofconnections > $wans) {
+ $savemsg=gettext("You have less interfaces than number of connections!");
+ $stepid--;
+ return;
+ }
+
+ $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
+ if ($numberoflocalinterfaces > $lans) {
+ $savemsg=gettext("You have less interfaces than number of connections!");
+ $stepid--;
+ return;
+ }
+ $cfgname = "traffic_shaper_wizard_multi_all.xml";
+
+ $fields =& $pkg['step'][1]['fields']['field'];
+
+ /*
+ unset($config['ezshaper']['step2']);
+ $config['ezshaper']['step2'] = array();
+ write_config();
+ */
+ $fields = array();
+
+ for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
+ $field = array();
+ $interface_friendly = $i+1;
+ $field['name'] = "Setup connection speed and scheduler information for interface LAN #{$interface_friendly}";
+ $field['type'] = "listtopic";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Interface & Scheduler";
+ $field['name'] = "local{$i}interface";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ foreach ($iflist as $ifname => $ifdescr) {
+ // Skip wan interfaces here
+ if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
+ continue;
+ $opts = array();
+ $opts['displayname'] = $ifdescr;
+ $opts['name'] = $ifname;
+ $opts['value'] = $ifname;
+ $field['options']['option'][] = $opts;
+ }
+ $field['combinefieldsbegin'] = "true";
+ $field['bindstofield'] = "ezshaper->step2->local{$i}interface";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "local{$i}downloadscheduler";
+ $field['type'] = "select";
+ $field['typehint'] = "Queueing discipline to apply on this local interface.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "HFSC";
+ $opts['value'] = "HFSC";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "CBQ";
+ $opts['value'] = "CBQ";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PRIQ";
+ $opts['value'] = "PRIQ";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
+ $fields[] = $field;
+ }
+
+ for ($i = 0; $i < $numberofconnections; $i++) {
+ $field = array();
+ $interface_friendly = $i+1;
+ $field['name'] = "Setup connection speed and scheduler information for interface WAN#{$interface_friendly}";
+ $field['type'] = "listtopic";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Interface & Scheduler";
+ $field['name'] = "conn{$i}interface";
+ $field['type'] = "select";
+ $interface_real = $i+1;
+ $field['options']['option'] = array();
+ foreach ($iflist as $ifname => $ifdescr) {
+ // Skip lan interfaces here
+ if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
+ continue;
+ $opts = array();
+ $opts['displayname'] = $ifdescr;
+ $opts['name'] = $ifname;
+ $opts['value'] = $ifname;
+ $field['options']['option'][] = $opts;
+ }
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}uploadscheduler";
+ $field['type'] = "select";
+ $field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "HFSC";
+ $opts['value'] = "HFSC";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "CBQ";
+ $opts['value'] = "CBQ";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PRIQ";
+ $opts['value'] = "PRIQ";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upload";
+ $field['name'] = "conn{$i}upload";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}uploadspeed";
+ $field['typehint'] = "Upload bandwidth on this connection.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
+ $fields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Download";
+ $field['name'] = "conn{$i}download";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}download";
+ $field['combinefieldsbegin'] = "true";
+ $fields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}downloadspeed";
+ $field['typehint'] = "Download bandwidth on this connection.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
+ $fields[] = $field;
+ }
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $fields[] = $field;
+}
+
+function step2_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+ $sumdownloads = 0;
+
+ /* Input Validation */
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+ $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
+ for ($i = 0; $i < $steps; $i++) {
+ for ($j = $i + 1; $j <= $steps; $j++) {
+ if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
+ $savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
+ $stepid--;
+ return;
+ }
+ if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if (!is_numeric($_POST["conn{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ $upbw = $_POST["conn{$i}upload"];
+ $downbw = $_POST["conn{$i}download"];
+ if ($upbw < 1 || $downbw < 1) {
+ $savemsg = gettext("You cannot specify 0 bandwidth!");
+ $stepid--;
+ return;
+ }
+ if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
+ $savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+ for ($j = 0; $j < $localint; $j++) {
+ if ($_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
+ $savemsg=gettext("You cannot select the same interface for local and outside.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+ for ($i = 0; $i < $localint; $i++) {
+ for ($j = $i + 1; $j < $localint; $j++) {
+ if ($_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
+ $savemsg=gettext("You cannot select the same interface twice on local interfaces.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+
+ /* This is necessary since the wizard expects predefined fields. */
+ unset($config['ezshaper']['step2']);
+ $config['ezshaper']['step2'] = array();
+
+ for ($i = 0; $i < $localint; $i++) {
+ $config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
+ $config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
+ }
+
+ for ($i = 0; $i < $steps; $i++) {
+ $config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
+ $config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
+ $config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
+ $config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
+ $config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
+ $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
+ }
+}
+
+function step3_stepbeforeformdisplay() {
+ global $config, $pkg;
+ global $stepid, $savemsg;
+
+ $cfgname = "traffic_shaper_wizard_multi_all.xml";
+
+ $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
+ $numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
+
+ $fields =& $pkg['step'][1]['fields']['field'];
+
+ $voipfields =& $pkg['step'][2]['fields']['field'];
+
+ $voipfields = array();
+ $enablefields = array();
+
+ $field = array();
+ $field['name'] = "enable";
+ $field['type'] = "checkbox";
+ $field['typehint'] = "Prioritize Voice over IP traffic.";
+ $field['bindstofield'] = "ezshaper->step3->enable";
+ $field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['name'] = "VOIP specific settings";
+ $field['type'] = "listtopic";
+ $voipfields[] = $field;
+
+ $field['name'] = "Provider";
+ $enablefields[] = "Provider";
+ $field['type'] = "select";
+ $field['description'] = "Choose Generic if your provider isn't listed.";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['name'] = "Generic (lowdelay)";
+ $opts['value'] = "Generic";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "VoicePulse";
+ $opts['value'] = "VoicePulse";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "Asterisk/Vonage";
+ $opts['value'] = "Asterisk";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['name'] = "PanasonicTDA";
+ $opts['value'] = "Panasonic";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->provider";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upstream SIP Server";
+ $field['name'] = "upstream_sip_server";
+ $enablefields[] = "upstream_sip_server";
+ $field['type'] = "inputalias";
+ $field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
+ $field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
+ $field['bindstofield'] = "ezshaper->step3->address";
+ $voipfields[] = $field;
+
+ for ($i = 0; $i < $numberofconnections; $i++) {
+ $field = array();
+ $interface_friendly = $i+1;
+ $field['name'] = "Connection WAN #{$interface_friendly}";
+ $field['type'] = "listtopic";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Upload";
+ $field['name'] = "conn{$i}upload";
+ $enablefields[] = "conn{$i}upload";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
+ $field['combinefieldsbegin'] = "true";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "conn{$i}uploadspeed";
+ $enablefields[] = "conn{$i}uploadspeed";
+ $field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
+ $voipfields[] = $field;
+ }
+
+ for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
+ $field = array();
+ $interface_friendly = $i+1;
+ $field['name'] = "Connection LAN #{$interface_friendly}";
+ $field['type'] = "listtopic";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['displayname'] = "Download";
+ $field['name'] = "local{$i}download";
+ $enablefields[] = "local{$i}download";
+ $field['type'] = "input";
+ $field['bindstofield'] = "ezshaper->step3->local{$i}download";
+ $field['combinefieldsbegin'] = "true";
+ $voipfields[] = $field;
+
+ $field = array();
+ $field['combinefieldsend'] = "true";
+ $field['dontdisplayname'] = "true";
+ $field['dontcombinecells'] = "true";
+ $field['name'] = "local{$i}downloadspeed";
+ $enablefields[] = "local{$i}downloadspeed";
+ $field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
+ $field['type'] = "select";
+ $field['options']['option'] = array();
+ $opts = array();
+ $opts['value'] = "Kb";
+ $opts['name'] = "Kbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Mb";
+ $opts['name'] = "Mbit/s";
+ $field['options']['option'][] = $opts;
+ $opts = array();
+ $opts['value'] = "Gb";
+ $opts['name'] = "Gbit/s";
+ $field['options']['option'][] = $opts;
+ $field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
+ $voipfields[] = $field;
+ }
+
+ $field = array();
+ $field['name'] = "Next";
+ $field['type'] = "submit";
+ $voipfields[] = $field;
+ $voipfields[0]['enablefields'] = implode(",", $enablefields);
+}
+
+function step3_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+
+ if (!$_POST['enable'])
+ return;
+
+ if($_POST['upstream_sip_server']) {
+ if(!is_ipaddroralias($_POST['upstream_sip_server'])) {
+ /* item is not an ip or alias. error out */
+ $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
+ $stepid--;
+ return;
+ }
+ }
+
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+ for ($i = 0; $i < $steps; $i++) {
+ if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] == "PRIQ")
+ continue;
+ if (!is_numeric($_POST["conn{$i}upload"])) {
+ $savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if ($_POST["conn{$i}uploadspeed"] == "%") {
+ if (intval($_POST["conn{$i}upload"]) > 80) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ } else {
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
+ $input_bw = $factor * floatval($_POST["conn{$i}upload"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+
+ $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
+ for ($i = 0; $i < $localint; $i++) {
+ if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] == "PRIQ")
+ continue;
+ if (!is_numeric($_POST["local{$i}download"])) {
+ $savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
+ $stepid--;
+ return;
+ }
+ if ($_POST["local{$i}downloadspeed"] == "%") {
+ if (intval($_POST["local{$i}download"]) > 80) {
+ $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ } else {
+ for ($j = 0; $j < $steps; $j++) {
+ $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$j}downloadspeed"]);
+ $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$j}download"]);
+ $factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
+ $input_bw = $factor * floatval($_POST["local{$i}download"]);
+ if ((0.8 * $ifbw) < $input_bw) {
+ $savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$j} higher than 80% of the connection.");
+ $stepid--;
+ return;
+ }
+ }
+ }
+ }
+
+ /* This is necessary since the wizard expects predefined fields. */
+ unset($config['ezshaper']['step3']);
+ $config['ezshaper']['step3'] = array();
+
+ if (!empty($_POST['upstream_sip_server']))
+ $config['ezshaper']['step3']['address'] = $_POST['upstream_sip_server'];
+ if ($_POST['enable'] == 'on')
+ $config['ezshaper']['step3']['enable'] = 'on';
+ if (!empty($_POST['provider'])) {
+ $VoIPproviders = array("Generic", "VoicePulse", "Asterisk", "Panasonic");
+ if (in_array($_POST['provider'], $VoIPproviders)) {
+ $config['ezshaper']['step3']['provider'] = $_POST['provider'];
+ }
+ }
+ for ($i = 0; $i < $localint; $i++) {
+ $config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
+ $config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
+ }
+
+ for ($i = 0; $i < $steps; $i++) {
+ $config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
+ $config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
+ }
+}
+
+function step4_stepsubmitphpaction() {
+ global $config;
+ global $stepid, $savemsg;
+
+ if ( $_POST['enable'] ) {
+ if(!$_POST['bandwidth']) {
+ $savemsg="You need to specify a value for bandwidth!";
+ $stepid--;
+ return;
+ }
+ if(!is_numeric($_POST['bandwidth'])) {
+ $savemsg="The posted value is not a valid bandwidth.";
+ $stepid--;
+ return;
+ }
+ if ($_POST['bandwidthspeed'] <> "%") {
+ $savemsg = gettext("Only percentage bandwidth specification is allowed.");
+ $stepid--;
+ return;
+ }
+ $bw = $_POST['bandwidth'];
+ if($bw > 15 || $bw < 2) {
+ $savemsg="Values should be between 2% and 15%!";
+ $stepid--;
+ return;
+ }
+ if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
+ /* item is not an ip or alias. error out */
+ $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
+ $stepid--;
+ }
+ }
+}
+
+function step5_stepsubmitphpaction() {
+ global $stepid, $savemsg;
+ if ( $_POST['enable'] ) {
+ if ($_POST['p2pcatchall']) {
+ if(!is_numeric($_POST['bandwidth'])) {
+ $savemsg="Posted value is not a valid bandwidth.";
+ $stepid--;
+ }
+ if ($_POST['bandwidthspeed'] <> "%") {
+ $savemsg = gettext("Only percentage bandwidth specification is allowed.");
+ $stepid--;
+ return;
+ }
+ $bw = $_POST['bandwidth'];
+ if($bw > 15 || $bw < 2) {
+ $savemsg="Values should be between 2% and 15%!";
+ $stepid--;
+ return;
+ }
+ }
+ }
+}
+
+function step8_stepsubmitphpaction() {
+ global $g, $config;
+
+ /* save the new configuration */
+ apply_all_chosen_items();
+
+ /* reset rrd queues */
+ system("rm -f /var/db/rrd/*queuedrops.rrd");
+ system("rm -f /var/db/rrd/*queues.rrd");
+ enable_rrd_graphing();
+
+ /* apply the new configuration to the system */
+ filter_configure();
+
+ /* And we're no longer dirty! */
+ clear_subsystem_dirty('shaper');
+
+ update_filter_reload_status("Initializing");
+ header("Location: status_filter_reload.php");
+ exit;
+}
+
+function apply_all_chosen_items() {
+ global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
+
+ require_once("wizardapp.inc");
+
+ /*
+ * Wipe previous config.
+ * Doing it here makes sense since we can wipe the previous config only after
+ * the user decides to do so, finishing the wizard.
+ */
+ if(isset($config['shaper']['queue']))
+ unset($config['shaper']['queue']);
+ /* XXX: This is redundant, because this should be handled by converter at startup. */
+ if(isset($config['shaper']['rule']))
+ unset($config['shaper']['rule']);
+ foreach ($config['filter']['rule'] as $key => $rule)
+ if ($rule['wizard'] == "yes")
+ unset($config['filter']['rule'][$key]);
+
+ /* restart the cached config */
+ unset($altq_list_queues);
+ $altq_list_queues = array();
+
+ $steps = intval($config['ezshaper']['step1']['numberofconnections']);
+
+ $interfacelist = array();
+
+ for ($i = 0; $i < $steps; $i++) {
+
+ $tmppath = array();
+ $altq =& new altq_root_queue();
+
+ $altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
+ $interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
+ $altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
+ $altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
+ $altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $altq->SetEnabled("on");
+ $altq_list_queues[$altq->GetQname()] =& $altq;
+ array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
+ $altq->SetLink($tmppath);
+ $altq->wconfig();
+
+ $sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
+ $voipbw =0;
+ $voipbwunit = "Kb";
+ $voip = false;
+ $penalty = false;
+ $penaltybw = 0;
+ $penaltybwunit = "Kb";
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ $p2pcatchbwunit = "%";
+ $games = false;
+ $otherpriority = false;
+ $remainbw = 0;
+ $factor = 0;
+ $upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
+ $upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
+
+ if ($config['ezshaper']['step3']['enable']) {
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
+ $voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
+ if ($voipbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += $voipbw * $factor;
+ }
+ if ($config['ezshaper']['step4']['enable']) {
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += $penaltybw * $factor;
+ } else {
+ $penalty = false;
+ $penaltybw = 0;
+ }
+ if ($config['ezshaper']['step5']['enable']) {
+ $p2p = true;
+ if ($config['ezshaper']['step5']['p2pcatchall']) {
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += $p2pcatchbw * $factor;
+ } else {
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ } else {
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ if ($config['ezshaper']['step6']['enable']) {
+ $games = true;
+ } else {
+ $games = false;
+ }
+
+ if ($config['ezshaper']['step7']['enable']) {
+ $otherpriority = true;
+ } else {
+ $otherpriority = false;
+ }
+
+ $remainbw = round($remainbw / $upbw * 100, 2);
+
+ if (intval($remainbw) > 0 && intval($remainbw) > 30) {
+ $savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
+ header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
+ exit;
+ } else {
+ $remainbw = 100 - $remainbw;
+ }
+
+ if ($sched != "PRIQ") {
+ if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qInternet";
+ //$tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ }
+ else if ($sched == "HFSC") {
+ $tmpcf['linkshare3'] =
+ floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ $tmpcf['upperlimit3'] =
+ floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ $tmpcf['upperlimit'] = "on";
+
+
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
+ $tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
+ }
+ array_push($tmppath, "qInternet");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ //array_pop($tmppath);
+ //echo "qInternet <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ $altq =& $qtmp;
+ }
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qACK";
+ $tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ else if ($sched == "HFSC") {
+ $lkbw = 0.20 * $remainbw;
+ $tmpcf['linkshare3'] = "{$lkbw}%";
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = $lkbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qACK");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qACK <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ if ($p2pcatchall)
+ $tmpcf['name'] = "qOthersDefault";
+ else
+ $tmpcf['name'] = "qDefault";
+ $tmpcf['priority'] = 3;
+ $tmpcf['enabled'] = "on";
+ if (!$p2pcatchall)
+ $tmpcf['default'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, $tmpcf['name']);
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qDefault <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($p2p) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qP2P";
+ $tmpcf['priority'] = 1;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($p2pcatchall) {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ }
+ $tmpcf['default'] = "on";
+
+ } else {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$tmpbw}%";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$tmpbw}%";
+ $tmpcf['bandwidth'] = $tmpbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ }
+ array_push($tmppath, "qP2P");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qP2P <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($voip) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qVoIP";
+ $tmpcf['priority'] = 7;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($voipbw > 0) {
+ $tmpcf['bandwidth'] = $voipbw;
+ $tmpcf['bandwidthtype'] = $voipbwunit;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($voipbw > 0) {
+ $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
+ } else {
+ $voipbw = $remainbw * 0.20; /* 20% bandwidth */
+ $tmpcf['realtime3'] = "{$voipbw}%";
+ }
+ $tmpcf['realtime'] = "on";
+ $tmpcf['bandwidth'] = 32;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ array_push($tmppath, "qVoIP");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qVoIP <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($games) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qGames";
+ $tmpcf['priority'] = 5;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$gamesbw}%";
+ $tmpcf['bandwidth'] = "{$gamesbw}";
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qGames");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qGames <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($otherpriority) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersHigh";
+ $tmpcf['priority'] = 4;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $otherbw = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['linkshare3'] = "{$otherbw}%";
+ $tmpcf['bandwidth'] = $otherbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qOthersHigh");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qHigh <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersLow";
+ $tmpcf['priority'] = 2;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($penalty) {
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ $tmpcf['bandwidth'] = $penaltybw;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($penalty) {
+ $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $lsbw = $remainbw * 0.05;
+ $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
+ $tmpcf['bandwidth'] = $lsbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ $tmpcf['linkshare'] = "on";
+ }
+ array_push($tmppath, "qOthersLow");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qLow <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+ array_pop($tmppath);
+ }
+
+ /* LAN bandwidth ----------------------------------------------------------------------------------------- */
+ $localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
+ $lanbw = 0;
+ for ($i = 0; $i < $steps; $i++) {
+ $down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
+ $input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down;
+ $lanbw += $input_bw;
+ }
+
+ for ($i = 0; $i < $localint; $i++) {
+
+ $tmppath = array();
+ $altq =& new altq_root_queue();
+
+ $altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
+ $altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
+ //$altq->SetBandwidth($lanbw/1000);
+ //$altq->SetBwscale("Kb");
+ $altq->SetEnabled("on");
+ $altq_list_queues[$altq->GetQname()] =& $altq;
+ array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
+ $altq->SetLink($tmppath);
+ //var_dump($input_errors);
+ $altq->wconfig();
+
+ $sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
+ $voipbw =0;
+ $voipbwunit = "%";
+ $voip = false;
+ $penalty = false;
+ $penaltybw = 0;
+ $penaltybwunit = "%";
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ $games = false;
+ $otherpriority = false;
+ $remainbw = 0;
+
+
+ if ($config['ezshaper']['step3']['enable']) {
+ $voip = true;
+ $voipbw = $config['ezshaper']['step3']["local{$i}download"];
+ $voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
+ if ($sched != HFSC) {
+ if ($voipbwunit == "%")
+ $factor = $lanbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($voipbwunit);
+ $remainbw += floatval($voipbw) * $factor;
+ } else
+ $remainbw += 32000; /* 32Kbit/s reserved for HFSC link sharing */
+ }
+ if ($config['ezshaper']['step4']['enable']) {
+ $penalty = true;
+ $penaltybw = $config['ezshaper']['step4']['bandwidth'];
+ $penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
+ if ($penaltybwunit == "%")
+ $factor = $lanbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($penaltybwunit);
+ $remainbw += floatval($penaltybw) * $factor;
+ } else {
+ $penalty = false;
+ $penaltybw = 0;
+ }
+ if ($config['ezshaper']['step5']['enable']) {
+ $p2p = true;
+ if ($config['ezshaper']['step5']['p2pcatchall']) {
+ $p2pcatchall = true;
+ $p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
+ $p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
+ if ($p2pcatchbwunit == "%")
+ $factor = $upbw/100;
+ else
+ $factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
+ $remainbw += floatval($p2pcatchbw) * $factor;
+ } else {
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ } else {
+ $p2p = false;
+ $p2pcatchall = false;
+ $p2pcatchbw = 0;
+ }
+ if ($config['ezshaper']['step6']['enable']) {
+ $games = true;
+ } else {
+ $games = false;
+ }
+
+ if ($config['ezshaper']['step7']['enable']) {
+ $otherpriority = true;
+ } else {
+ $otherpriority = false;
+ }
+ $remainbw = round($remainbw / $lanbw * 100, 2);
+
+ if (intval($remainbw) > 0 && intval($remainbw) > 40) {
+ $savemsg=gettext("Custom Bandwidths are greater than 40%. Please lower them for the wizard to continue.");
+ header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
+ exit;
+ } else {
+ $remainbw = 100 - $remainbw;
+ }
+
+ if (!$p2pcatchall) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qLink";
+ $tmpcf['priority'] = 2;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['default'] = "on";
+ $tmpcf['qlimit'] = 500;
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['bandwidth'] = 20; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, $tmpcf['name']);
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qDefault <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($sched != "PRIQ") {
+ if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qInternet";
+ //$tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['bandwidth'] = $lanbw/1000;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ else if ($sched == "HFSC") {
+ $tmpcf['linkshare3'] = $lanbw/1000 . "Kb";
+ $tmpcf['upperlimit3'] = $lanbw/1000 . "Kb";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = $lanbw/1000;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ array_push($tmppath, "qInternet");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ //array_pop($tmppath);
+ //echo "qInternet <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ $altq =& $qtmp;
+ }
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qACK";
+ $tmpcf['priority'] = 6;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ If ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ else if ($sched == "HFSC") {
+ $lkbw = 0.20 * $remainbw;
+ $tmpcf['linkshare3'] = "{$lkbw}%";
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['bandwidth'] = $lkbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qACK");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qACK <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+ if ($p2p) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qP2P";
+ $tmpcf['priority'] = 1;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($p2pcatchall) {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
+ $tmpcf['bandwidth'] = $p2pcatchbw;
+ $tmpcf['bandwidthtype'] = $p2pcatchbwunit;
+ }
+ $tmpcf['default'] = "on";
+ $tmpcf['qlimit'] = 500;
+ } else {
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpbw = $remainbw * 0.05; /* 5% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$tmpbw}%";
+ $tmpcf['upperlimit'] = "on";
+ $tmpcf['upperlimit3'] = "{$tmpbw}%";
+ $tmpcf['bandwidth'] = $tmpbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ }
+ array_push($tmppath, "qP2P");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qP2P <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($voip) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qVoIP";
+ $tmpcf['priority'] = 7;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($voipbw > 0) {
+ $tmpcf['bandwidth'] = $voipbw;
+ $tmpcf['bandwidthtype'] = $voipbwunit;
+ } else {
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ } else if ($sched == "HFSC") {
+ if ($voipbw > 0) {
+ $tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
+ } else {
+ $voipbw = $remainbw * 0.20; /* 20% bandwidth */
+ $tmpcf['realtime3'] = "{$voipbw}%";
+ }
+ $tmpcf['realtime'] = "on";
+ $tmpcf['bandwidth'] = 32;
+ $tmpcf['bandwidthtype'] = "Kb";
+ }
+ array_push($tmppath, "qVoIP");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qVoIP <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($games) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qGames";
+ $tmpcf['priority'] = 5;
+ $tmpcf['enabled'] = "on";
+ $tmpcf['ecn'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $gamesbw = $remainbw * 0.2; /* 20% bandwidth */
+ $tmpcf['linkshare'] = "on";
+ $tmpcf['linkshare3'] = "{$gamesbw}%";
+ $tmpcf['bandwidth'] = "{$gamesbw}";
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qGames");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qGames <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+
+ if ($otherpriority) {
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersHigh";
+ $tmpcf['priority'] = 4;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ $tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['bandwidthtype'] = "%";
+ } else if ($sched == "HFSC") {
+ $tmpcf['linkshare'] = "on";
+ $otherbw = $remainbw * 0.1; /* 10% bandwidth */
+ $tmpcf['linkshare3'] = "{$otherbw}%";
+ $tmpcf['bandwidth'] = $otherbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ array_push($tmppath, "qOthersHigh");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qHigh <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+
+
+ if ($sched == "PRIQ")
+ $q =& new priq_queue();
+ else if ($sched == "CBQ")
+ $q =& new cbq_queue();
+ else if ($sched == "HFSC")
+ $q =& new hfsc_queue();
+ $tmpcf = array();
+ $tmpcf['name'] = "qOthersLow";
+ $tmpcf['priority'] = 3;
+ $tmpcf['ecn'] = "on";
+ $tmpcf['enabled'] = "on";
+ if ($sched == "CBQ") {
+ $tmpcf['borrow'] = "on";
+ if ($penalty) {
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $tmpcf['bandwidthtype'] = "%";
+ $tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
+ }
+ } else if ($sched == "HFSC") {
+ if ($penalty) {
+ $tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
+ $tmpcf['bandwidth'] = $penaltybw;
+ $tmpcf['bandwidthtype'] = $penaltybwunit;
+ } else {
+ $lsbw = $remainbw * 0.05;
+ $tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
+ $tmpcf['bandwidth'] = $lsbw;
+ $tmpcf['bandwidthtype'] = "%";
+ }
+ $tmpcf['linkshare'] = "on";
+ }
+ array_push($tmppath, "qOthersLow");
+ $qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
+ array_pop($tmppath);
+ //echo "qLow <br />";
+ //var_dump($input_errors);
+ $qtmp->wconfig();
+ }
+ array_pop($tmppath);
+ }
+
+/* End LAN bandwidth ------------------------------------------------------------------------------------- */
+
+
+
+ if (!is_array($config['filter']['rule']))
+ $config['filter']['rule'] = array();
+
+ $interfacelist = implode(",", $interfacelist);
+
+ /* Rules */
+ if ($penalty) {
+ if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Penalty Box");
+ $rule['defaultqueue'] = "qOthersLow";
+ $rule['source']['address'] = $config['ezshaper']['step4']['address'];
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ }
+ }
+
+ /* If user specifies an IP, we don't bother with providers */
+ if ($voip) {
+ if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
+ /* create VOIP rules */
+ $rule = array();
+ $rule['type'] = "match";
+ //$rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Connections From Upstream SIP Server");
+ $rule['protocol'] = "udp";
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['source']['address'] = $config['ezshaper']['step3']['address'];
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ $rule = array();
+ $rule['type'] = "match";
+ //$rule['interface'] = $interfacelist;
+ $rule['descr'] = gettext("Connections To Upstream SIP Server");
+ $rule['protocol'] = "udp";
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['address'] = $config['ezshaper']['step3']['address'];
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ } elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
+ /* create VOIP rules */
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['descr'] = "DiffServ/Lowdelay/Upload";
+ $rule['protocol'] = "udp";
+ $rule['source']['any'] = TRUE;
+ $rule['defaultqueue'] = "qVoIP";
+ $rule['destination']['any'] = TRUE;
+ $rule['iptos'] = "lowdelay";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+
+ } else {
+ /* loop through voiplist[] */
+ foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qVoIP';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['descr'] = "m_voip {$voip[0]} outbound";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['destination']['port'] = $voip[2]."-".$voip[3];
+ if($voip[1] != '')
+ $rule['protocol'] = $voip[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through p2plist[] */
+ if ($p2p) {
+ foreach($config['ezshaper']['step5'] as $key => $val) {
+ if (!is_array($p2plist[$key]))
+ continue;
+ foreach ($p2plist[$key] as $p2pclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qP2P';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
+ if($p2pclient[1] != '')
+ $rule['protocol'] = $p2pclient[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through gamesplist[] */
+ if ($games) {
+ foreach($config['ezshaper']['step6'] as $key => $val) {
+ if (!is_array($gamesplist[$key]))
+ continue;
+ foreach ($gamesplist[$key] as $Gameclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ $rule['defaultqueue'] = 'qGames';
+ if ($Gameclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['descr'] = "m_Game {$Gameclient[0]} outbound";
+ $rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
+ if($Gameclient[1] != '')
+ $rule['protocol'] = $Gameclient[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+
+ /* loop through othersplist[] */
+ if ($otherpriority) {
+ foreach($config['ezshaper']['step7'] as $key => $val) {
+ if (!is_array($othersplist[$key]))
+ continue;
+ foreach ($othersplist[$key] as $otherclient) {
+ $rule = array();
+ $rule['type'] = "match";
+ $rule['interface'] = $interfacelist;
+ switch ($val) {
+ case "H":
+ $rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $loop = 0;
+ break;
+ case "L":
+ $rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ $loop = 0;
+ break;
+ case "D":
+ if ($p2pcatchall) {
+ $loop = 0;
+ $rule['defaultqueue'] = 'qOthersDefault';
+ if ($otherclient[1] == "tcp")
+ $rule['ackqueue'] = 'qACK';
+ } else
+ $loop = 1; /* It automatically goes to default queue */
+ break;
+ default:
+ $loop = 1;
+ }
+ if (!$loop) {
+ $rule['source']['any'] = TRUE;
+ $rule['destination']['any'] = TRUE;
+ $rule['floating'] = "yes";
+ $rule['wizard'] = "yes";
+ $rule['enabled'] = "on";
+ $rule['descr'] = "m_Other {$otherclient[0]} outbound";
+
+ if($otherclient[2] or $otherclient[3]) {
+ $rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
+ }
+ if($otherclient[1] != '')
+ $rule['protocol'] = $otherclient[1];
+ $rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
+ $config['filter']['rule'][] = $rule;
+ }
+ }
+ }
+ }
+ write_config();
+}
+
+function wizard_get_bandwidthtype_scale($type = "b") {
+ switch ($type) {
+ case "Gb":
+ $factor = 1024 * 1024 * 1024;
+ break;
+ case "Mb":
+ $factor = 1024 * 1024;
+ break;
+ case "Kb":
+ $factor = 1024;
+ break;
+ case "b":
+ default:
+ $factor = 1;
+ break;
+ }
+ return intval($factor);
+}
+
+?>
diff --git a/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml b/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml
new file mode 100755
index 0000000..e94256b
--- /dev/null
+++ b/src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.xml
@@ -0,0 +1,1657 @@
+<?xml version="1.0"?>
+<pfsensewizard>
+ <copyright><![CDATA[
+ /*
+ traffic_shaper_wizard_multi_all.xml
+ part of pfSense (https://www.pfsense.org/)
+
+ Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
+ Copyright (C) 2008-2010 Ermal Luçi
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+ */]]></copyright>
+
+ <totalsteps>9</totalsteps>
+ <step>
+ <id>1</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableheader>true</disableheader>
+ <description>This wizard will guide you through setting up the pfSense traffic shaper.
+ Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
+ </description>
+ <fields>
+ <field>
+ <type>listtopic</type>
+ <name>Traffic shaper Wizard</name>
+ </field>
+ <field>
+ <displayname>Enter number of WAN type connections</displayname>
+ <name>numberofconnections</name>
+ <type>input</type>
+ <validate>^[0-9]+$</validate>
+ <description>Number of connections you have</description>
+ <bindstofield>ezshaper->step1->numberofconnections</bindstofield>
+ </field>
+ <field>
+ <displayname>Enter number of LAN type interfaces</displayname>
+ <name>numberoflocalinterfaces</name>
+ <type>input</type>
+ <validate>^[0-9]+$</validate>
+ <description>Number of local interfaces you have</description>
+ <bindstofield>ezshaper->step1->numberoflocalinterfaces</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>2</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Shaper configuration</description>
+ <javascriptafterformdisplay/>
+ <stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ <fields>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ </step>
+ <step>
+ <id>3</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Voice over IP</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Prioritize Voice over IP traffic</typehint>
+ <description>This will raise the priority of VOIP traffic above all other traffic.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>VOIP specific settings</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Provider</name>
+ <type>select</type>
+ <description>Choose Generic if your provider isn't listed.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
+ <options>
+ <option>
+ <name>Generic (lowdelay)</name>
+ <value>Generic</value>
+ </option>
+ <option>
+ <name>VoicePulse</name>
+ <value>VoicePulse</value>
+ </option>
+ <option>
+ <name>Asterisk/Vonage</name>
+ <value>Asterisk</value>
+ </option>
+ <option>
+ <name>PanasonicTDA</name>
+ <value>Panasonic</value>
+ </option>
+ </options>
+ </field>
+ <field>
+ <displayname>Upstream SIP Server</displayname>
+ <name>upstream_sip_server</name>
+ <type>inputalias</type>
+ <description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
+ <bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
+ <message>IP Address field is non-blank and doesn't look like an IP address.</message>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
+ <stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>4</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Penalty Box</description>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Penalize IP or Alias</typehint>
+ <description>This will lower the priority of traffic from this IP or alias.</description>
+ <enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
+ <bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>PenaltyBox specific settings</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Address</name>
+ <type>inputalias</type>
+ <description>This allows you to just provide the IP address of the computer(s) to penalize. NOTE: You can also use a Firewall Alias in this location.</description>
+ <bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
+ <message>IP Address field is non-blank and doesn't look like an IP address.</message>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <message>Speed must be numerical.</message>
+ <bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <donotdisable>true</donotdisable>
+ <name>BandwidthSpeed</name>
+ <description>The limit you want to apply.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>%</name>
+ <value>%</value>
+ </option>
+ <option>
+ <name>bit/s</name>
+ <value>b</value>
+ </option>
+ <option>
+ <name>Kilobit/s</name>
+ <value>Kb</value>
+ </option>
+ <option>
+ <name>Megabit/s</name>
+ <value>Mb</value>
+ </option>
+ <option>
+ <name>Gigabit/s</name>
+ <value>Gb</value>
+ </option>
+ </options>
+ <bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>5</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <description>Peer to Peer networking</description>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <fields>
+ <field>
+ <donotdisable>true</donotdisable>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Lower priority of Peer-to-Peer traffic</typehint>
+ <description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
+ <enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
+ <bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>p2p Catch all</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>p2pCatchAll</name>
+ <type>checkbox</type>
+ <typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
+ </field>
+ <field>
+ <name>Bandwidth</name>
+ <type>input</type>
+ <validate>^[0-9]*$</validate>
+ <message>Speed must be numerical.</message>
+ <bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
+ <combinefieldsbegin>true</combinefieldsbegin>
+ </field>
+ <field>
+ <combinefieldsend>true</combinefieldsend>
+ <dontdisplayname>true</dontdisplayname>
+ <dontcombinecells>true</dontcombinecells>
+ <donotdisable>true</donotdisable>
+ <name>BandwidthSpeed</name>
+ <description>The limit you want to apply.</description>
+ <type>select</type>
+ <options>
+ <option>
+ <name>%</name>
+ <value>%</value>
+ </option>
+ <option>
+ <name>bit/s</name>
+ <value>b</value>
+ </option>
+ <option>
+ <name>Kilobit/s</name>
+ <value>Kb</value>
+ </option>
+ <option>
+ <name>Megabit/s</name>
+ <value>Mb</value>
+ </option>
+ <option>
+ <name>Gigabit/s</name>
+ <value>Gb</value>
+ </option>
+ </options>
+ <bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
+ </field>
+ <field>
+ <name>Enable/Disable specific P2P protocols</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>Aimster</name>
+ <type>checkbox</type>
+ <typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
+ </field>
+ <field>
+ <name>BitTorrent</name>
+ <type>checkbox</type>
+ <typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
+ </field>
+ <field>
+ <name>BuddyShare</name>
+ <type>checkbox</type>
+ <typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
+ </field>
+ <field>
+ <name>CuteMX</name>
+ <type>checkbox</type>
+ <typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
+ </field>
+ <field>
+ <name>DCplusplus</name>
+ <type>checkbox</type>
+ <typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
+ </field>
+ <field>
+ <name>DCC</name>
+ <type>checkbox</type>
+ <typehint>irc DCC file transfers</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
+ </field>
+ <field>
+ <name>DirectConnect</name>
+ <type>checkbox</type>
+ <typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
+ </field>
+ <field>
+ <name>DirectFileExpress</name>
+ <type>checkbox</type>
+ <typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
+ </field>
+ <field>
+ <name>eDonkey2000</name>
+ <type>checkbox</type>
+ <typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
+ </field>
+ <field>
+ <name>FastTrack</name>
+ <type>checkbox</type>
+ <typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
+ </field>
+ <field>
+ <name>Gnutella</name>
+ <type>checkbox</type>
+ <typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
+ </field>
+ <field>
+ <name>grouper</name>
+ <type>checkbox</type>
+ <typehint>grouper and other P2P using the grouper protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
+ </field>
+ <field>
+ <name>hotComm</name>
+ <type>checkbox</type>
+ <typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
+ </field>
+ <field>
+ <name>HotlineConnect</name>
+ <type>checkbox</type>
+ <typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
+ </field>
+ <field>
+ <name>iMesh</name>
+ <type>checkbox</type>
+ <typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
+ </field>
+ <field>
+ <name>Napster</name>
+ <type>checkbox</type>
+ <typehint>Napster and other P2P using the Napster protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
+ </field>
+ <field>
+ <name>OpenNap</name>
+ <type>checkbox</type>
+ <typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
+ </field>
+ <field>
+ <name>Scour</name>
+ <type>checkbox</type>
+ <typehint>Scour and other P2P using the Scour protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
+ </field>
+ <field>
+ <name>Shareaza</name>
+ <type>checkbox</type>
+ <typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
+ </field>
+ <field>
+ <name>SongSpy</name>
+ <type>checkbox</type>
+ <typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
+ </field>
+ <field>
+ <name>WinMX</name>
+ <type>checkbox</type>
+ <typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
+ <bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>6</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <description>Network Games</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Prioritize network gaming traffic</typehint>
+ <description>This will raise the priority of gaming traffic to higher than most traffic.</description>
+ <enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
+ <donotdisable>true</donotdisable>
+ <bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>Enable/Disable specific game consoles and services</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>BattleNET</name>
+ <type>checkbox</type>
+ <typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
+ </field>
+ <field>
+ <name>EAOrigin</name>
+ <type>checkbox</type>
+ <typehint>EA Origin Client - Some PC games by EA use this.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
+ </field>
+ <field>
+ <name>GameForWindowsLive</name>
+ <type>checkbox</type>
+ <typehint>Games for Windows Live</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
+ </field>
+ <field>
+ <name>PlayStationConsoles</name>
+ <type>checkbox</type>
+ <typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
+ </field>
+ <field>
+ <name>Steam</name>
+ <type>checkbox</type>
+ <typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
+ </field>
+ <field>
+ <name>WiiConsoles</name>
+ <type>checkbox</type>
+ <typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
+ </field>
+ <field>
+ <name>XboxConsoles</name>
+ <type>checkbox</type>
+ <typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
+ </field>
+ <field>
+ <name>Enable/Disable specific games</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>ARMA2</name>
+ <type>checkbox</type>
+ <typehint>ARMA 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
+ </field>
+ <field>
+ <name>ARMA3</name>
+ <type>checkbox</type>
+ <typehint>ARMA 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
+ </field>
+ <field>
+ <name>Battlefield2</name>
+ <type>checkbox</type>
+ <typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
+ </field>
+ <field>
+ <name>Battlefield3</name>
+ <type>checkbox</type>
+ <typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
+ </field>
+ <field>
+ <name>BattlefieldBC2</name>
+ <type>checkbox</type>
+ <typehint>Battlefield: Bad Company 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
+ </field>
+ <field>
+ <name>Borderlands</name>
+ <type>checkbox</type>
+ <typehint>Borderlands</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
+ </field>
+ <field>
+ <name>CallOfDuty</name>
+ <type>checkbox</type>
+ <typehint>Call Of Duty (United Offensive)</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
+ </field>
+ <field>
+ <name>Counterstrike</name>
+ <type>checkbox</type>
+ <typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
+ </field>
+ <field>
+ <name>Crysis2</name>
+ <type>checkbox</type>
+ <typehint>Crysis 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
+ </field>
+ <field>
+ <name>Crysis3</name>
+ <type>checkbox</type>
+ <typehint>Crysis 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
+ </field>
+ <field>
+ <name>DeadSpace2</name>
+ <type>checkbox</type>
+ <typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
+ </field>
+ <field>
+ <name>DeadSpace3</name>
+ <type>checkbox</type>
+ <typehint>Dead Space 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
+ </field>
+ <field>
+ <name>DeltaForce</name>
+ <type>checkbox</type>
+ <typehint>Delta Force</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
+ </field>
+ <field>
+ <name>Dirt3</name>
+ <type>checkbox</type>
+ <typehint>Dirt 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
+ </field>
+ <field>
+ <name>DOOM3</name>
+ <type>checkbox</type>
+ <typehint>DOOM3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
+ </field>
+ <field>
+ <name>DragonAge2</name>
+ <type>checkbox</type>
+ <typehint>Dragon Age 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
+ </field>
+ <field>
+ <name>EmpireEarth</name>
+ <type>checkbox</type>
+ <typehint>Empire Earth</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
+ </field>
+ <field>
+ <name>EveOnline</name>
+ <type>checkbox</type>
+ <typehint>EVE Online</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
+ </field>
+ <field>
+ <name>Everquest</name>
+ <type>checkbox</type>
+ <typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
+ </field>
+ <field>
+ <name>Everquest2</name>
+ <type>checkbox</type>
+ <typehint>Everquest II</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
+ </field>
+ <field>
+ <name>FarCry</name>
+ <type>checkbox</type>
+ <typehint>Far Cry</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
+ </field>
+ <field>
+ <name>FarCry2</name>
+ <type>checkbox</type>
+ <typehint>Far Cry 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
+ </field>
+ <field>
+ <name>FarCry3</name>
+ <type>checkbox</type>
+ <typehint>Far Cry 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
+ </field>
+ <field>
+ <name>GunZOnline</name>
+ <type>checkbox</type>
+ <typehint>GunZ Online</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
+ </field>
+ <field>
+ <name>HalfLife</name>
+ <type>checkbox</type>
+ <typehint>Half-Life</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
+ </field>
+ <field>
+ <name>LeagueofLegends</name>
+ <type>checkbox</type>
+ <typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
+ </field>
+ <field>
+ <name>Lineage2</name>
+ <type>checkbox</type>
+ <typehint>Lineage II</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
+ </field>
+ <field>
+ <name>MassEffect3</name>
+ <type>checkbox</type>
+ <typehint>Mass Effect 3</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
+ </field>
+ <field>
+ <name>MechwarriorOnline</name>
+ <type>checkbox</type>
+ <typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
+ </field>
+ <field>
+ <name>Minecraft</name>
+ <type>checkbox</type>
+ <typehint>Minecraft</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
+ </field>
+ <field>
+ <name>PlanetSide</name>
+ <type>checkbox</type>
+ <typehint>PlanetSide</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
+ </field>
+ <field>
+ <name>PlanetSide2</name>
+ <type>checkbox</type>
+ <typehint>PlanetSide 2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
+ </field>
+ <field>
+ <name>OperationFlashpointDR</name>
+ <type>checkbox</type>
+ <typehint>Operation Flashpoint: Dragon Rising</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
+ </field>
+ <field>
+ <name>QuakeIII</name>
+ <type>checkbox</type>
+ <typehint>Quake III</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
+ </field>
+ <field>
+ <name>QuakeIV</name>
+ <type>checkbox</type>
+ <typehint>Quake IV</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
+ </field>
+ <field>
+ <name>StarWarsTOR</name>
+ <type>checkbox</type>
+ <typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
+ </field>
+ <field>
+ <name>TigerWoods2004PS2</name>
+ <type>checkbox</type>
+ <typehint>Tiger Woods 2004 for PS2</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
+ </field>
+ <field>
+ <name>TribesAscend</name>
+ <type>checkbox</type>
+ <typehint>Tribes Ascend</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
+ </field>
+ <field>
+ <name>UnrealTournament</name>
+ <type>checkbox</type>
+ <typehint>Unreal Tournament Series</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
+ </field>
+ <field>
+ <name>WolfensteinEnemyTerritory</name>
+ <type>checkbox</type>
+ <typehint>Wolfenstein Enemy Territory</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
+ </field>
+ <field>
+ <name>WorldOfWarcraft</name>
+ <type>checkbox</type>
+ <typehint>World of Warcraft</typehint>
+ <bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>7</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <disableallfieldsbydefault>true</disableallfieldsbydefault>
+ <description>Raise or lower other Applications</description>
+ <fields>
+ <field>
+ <name>Enable</name>
+ <type>checkbox</type>
+ <typehint>Other networking protocols</typehint>
+ <description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
+ <enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,RTMP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
+ <donotdisable>true</donotdisable>
+ <bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ <field>
+ <name>Remote Service / Terminal emulation</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>AppleRemoteDesktop</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Remote Desktop</typehint>
+ </field>
+ <field>
+ <name>MSRDP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft Remote Desktop Protocol</typehint>
+ </field>
+ <field>
+ <name>PCAnywhere</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Symantec PC Anywhere</typehint>
+ </field>
+ <field>
+ <name>VNC</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Virtual Network Computing</typehint>
+ </field>
+ <field>
+ <name>Messengers</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>AIM</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>AOL Instant Messenger</typehint>
+ </field>
+ <field>
+ <name>Facetime</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Facetime</typehint>
+ </field>
+ <field>
+ <name>ICQ</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>ICQ</typehint>
+ </field>
+ <field>
+ <name>IRC</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Internet Relay Chat</typehint>
+ </field>
+ <field>
+ <name>Jabber</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Jabber instant messenger</typehint>
+ </field>
+ <field>
+ <name>GoogleHangouts</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Google Hangouts</typehint>
+ </field>
+ <field>
+ <name>MSN</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>MSN Messenger</typehint>
+ </field>
+ <field>
+ <name>Teamspeak</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>TeamSpeak</typehint>
+ </field>
+ <field>
+ <name>Teamspeak3</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>TeamSpeak 3</typehint>
+ </field>
+ <field>
+ <name>Ventrilo</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Ventrilo</typehint>
+ </field>
+ <field>
+ <name>VPN</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>PPTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft Point to Point tunneling protocol</typehint>
+ </field>
+ <field>
+ <name>IPSEC</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>IPSEC VPN traffic</typehint>
+ </field>
+ <field>
+ <name>Multimedia/Streaming</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>iTunesRadio</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
+ </field>
+ <field>
+ <name>StreamingMP3</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Streaming Media</typehint>
+ </field>
+ <field>
+ <name>RTSP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>RealTime streaming protocol</typehint>
+ </field>
+ <field>
+ <name>RTMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;rtmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Real-Time Messaging Protocol - Used by video streaming services such as Twitch.tv.</typehint>
+ </field>
+ <field>
+ <name>Web</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>HTTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>HTTP and HTTPS aka Web Traffic</typehint>
+ </field>
+ <field>
+ <name>Mail</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>SMTP</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Mail Protocol</typehint>
+ </field>
+ <field>
+ <name>POP3</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>POP3 Protocol</typehint>
+ </field>
+ <field>
+ <name>IMAP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>IMAP Protocol</typehint>
+ </field>
+ <field>
+ <name>LotusNotes</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Lotus Notes</typehint>
+ </field>
+ <field>
+ <name>Game Downloader</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>BattleNetDownloader</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Battle.NET Downloader</typehint>
+ </field>
+ <field>
+ <name>SteamDownloader</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Steam Downloader</typehint>
+ </field>
+ <field>
+ <name>Miscellaneous</name>
+ <type>listtopic</type>
+ </field>
+ <field>
+ <name>APNS</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Push Notification Service</typehint>
+ </field>
+ <field>
+ <name>AppleMobileSync</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Apple Mobile Sync</typehint>
+ </field>
+ <field>
+ <name>CrashPlan</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>CrashPlan</typehint>
+ </field>
+ <field>
+ <name>CVSUP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>CVSUP</typehint>
+ </field>
+ <field>
+ <name>DNS</name>
+ <type>select</type>
+ <bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Domain Name Services</typehint>
+ </field>
+ <field>
+ <name>Git</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Git Server</typehint>
+ </field>
+ <field>
+ <name>HBCI</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>HBCI</typehint>
+ </field>
+ <field>
+ <name>ICMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>ICMP Protocol</typehint>
+ </field>
+ <field>
+ <name>SMB</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Microsoft SMB Protocol and friends</typehint>
+ </field>
+ <field>
+ <name>SNMP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Simple Network Management Protocol</typehint>
+ </field>
+ <field>
+ <name>MySQLServer</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>MySQL Server</typehint>
+ </field>
+ <field>
+ <name>NNTP</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Internet News</typehint>
+ </field>
+ <field>
+ <name>Slingbox</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Slingbox</typehint>
+ </field>
+ <field>
+ <name>Subversion</name>
+ <bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
+ <type>select</type>
+ <options>
+ <option>
+ <name>Default priority</name>
+ <value>D</value>
+ </option>
+ <option>
+ <name>Higher priority</name>
+ <value>H</value>
+ </option>
+ <option>
+ <name>Lower priority</name>
+ <value>L</value>
+ </option>
+ </options>
+ <typehint>Subversion Server</typehint>
+ </field>
+ <field>
+ <name>Next</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+ <step>
+ <id>8</id>
+ <title>pfSense Traffic Shaper Wizard</title>
+ <field>
+ <name>Reload profile notice</name>
+ <type>listtopic</type>
+ </field>
+ <description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
+ <fields>
+ <field>
+ <name>Finish</name>
+ <type>submit</type>
+ </field>
+ </fields>
+ <stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
+ <includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
+ </step>
+</pfsensewizard>
diff --git a/src/usr/local/www/xmlrpc.php b/src/usr/local/www/xmlrpc.php
new file mode 100755
index 0000000..5fd022a
--- /dev/null
+++ b/src/usr/local/www/xmlrpc.php
@@ -0,0 +1,592 @@
+<?php
+/*
+ xmlrpc.php
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009, 2010 Scott Ullrich
+ Copyright (C) 2005 Colin Smith
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED ``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
+ AUTHOR 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.
+*/
+
+##|+PRIV
+##|*IDENT=page-xmlrpclibrary
+##|*NAME=XMLRPC Library page
+##|*DESCR=Allow access to the 'XMLRPC Library' page.
+##|*MATCH=xmlrpc.php*
+##|-PRIV
+
+require("config.inc");
+require("functions.inc");
+require_once("filter.inc");
+require("ipsec.inc");
+require("vpn.inc");
+require("shaper.inc");
+require("xmlrpc_server.inc");
+require("xmlrpc.inc");
+
+function xmlrpc_loop_detect() {
+ global $config;
+
+ /* grab sync to ip if enabled */
+ if ($config['hasync']) {
+ $synchronizetoip = $config['hasync']['synchronizetoip'];
+ }
+ if ($synchronizetoip) {
+ if ($synchronizetoip == $_SERVER['REMOTE_ADDR']) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+$xmlrpc_g = array(
+ "return" => array(
+ "true" => new XML_RPC_Response(new XML_RPC_Value(true, $XML_RPC_Boolean)),
+ "false" => new XML_RPC_Response(new XML_RPC_Value(false, $XML_RPC_Boolean)),
+ "authfail" => new XML_RPC_Response(new XML_RPC_Value(gettext("Authentication failed"), $XML_RPC_String))
+ )
+);
+
+/*
+ * pfSense XMLRPC errors
+ * $XML_RPC_erruser + 1 = Auth failure
+ */
+$XML_RPC_erruser = 200;
+
+/* EXPOSED FUNCTIONS */
+$exec_php_doc = gettext("XMLRPC wrapper for eval(). This method must be called with two parameters: a string containing the local system\'s password followed by the PHP code to evaluate.");
+$exec_php_sig = array(
+ array(
+ $XML_RPC_Boolean, // First signature element is return value.
+ $XML_RPC_String, // password
+ $XML_RPC_String, // shell code to exec
+ )
+);
+
+function xmlrpc_authfail() {
+ log_auth("webConfigurator authentication error for 'admin' from {$_SERVER['REMOTE_ADDR']}");
+}
+
+function exec_php_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ $exec_php = $params[0];
+ eval($exec_php);
+ if ($toreturn) {
+ $response = XML_RPC_encode($toreturn);
+ return new XML_RPC_Response($response);
+ } else {
+ return $xmlrpc_g['return']['true'];
+ }
+}
+
+/*****************************/
+$exec_shell_doc = gettext("XMLRPC wrapper for mwexec(). This method must be called with two parameters: a string containing the local system\'s password followed by an shell command to execute.");
+$exec_shell_sig = array(
+ array(
+ $XML_RPC_Boolean, // First signature element is return value.
+ $XML_RPC_String, // password
+ $XML_RPC_String, // shell code to exec
+ )
+);
+
+function exec_shell_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ $shell_cmd = $params[0];
+ mwexec($shell_cmd);
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$backup_config_section_doc = gettext("XMLRPC wrapper for backup_config_section. This method must be called with two parameters: a string containing the local system\'s password followed by an array containing the keys to be backed up.");
+$backup_config_section_sig = array(
+ array(
+ $XML_RPC_Struct, // First signature element is return value.
+ $XML_RPC_String,
+ $XML_RPC_Array
+ )
+);
+
+function backup_config_section_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ if (xmlrpc_loop_detect()) {
+ log_error("Disallowing CARP sync loop");
+ return;
+ }
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ $val = array_intersect_key($config, array_flip($params[0]));
+
+ return new XML_RPC_Response(XML_RPC_encode($val));
+}
+
+/*****************************/
+$restore_config_section_doc = gettext("XMLRPC wrapper for restore_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
+$restore_config_section_sig = array(
+ array(
+ $XML_RPC_Boolean,
+ $XML_RPC_String,
+ $XML_RPC_Struct
+ )
+);
+
+function restore_config_section_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ $old_config = $config;
+
+ if (xmlrpc_loop_detect()) {
+ log_error("Disallowing CARP sync loop");
+ return;
+ }
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+
+ /*
+ * Make sure it doesn't end up with both dnsmasq and unbound enabled
+ * simultaneously in secondary
+ * */
+ if (isset($params[0]['unbound']['enable']) && isset($config['dnsmasq']['enable'])) {
+ unset($config['dnsmasq']['enable']);
+ services_dnsmasq_configure();
+ } else if (isset($params[0]['dnsmasq']['enable']) && isset($config['unbound']['enable'])) {
+ unset($config['unbound']['enable']);
+ services_unbound_configure();
+ }
+
+ // Some sections should just be copied and not merged or we end
+ // up unable to sync the deletion of the last item in a section
+ $sync_full = array('dnsmasq', 'unbound', 'ipsec', 'aliases', 'wol', 'load_balancer', 'openvpn', 'cert', 'ca', 'crl', 'schedules', 'filter', 'nat', 'dhcpd', 'dhcpv6');
+ $sync_full_done = array();
+ foreach ($sync_full as $syncfull) {
+ if (isset($params[0][$syncfull])) {
+ $config[$syncfull] = $params[0][$syncfull];
+ unset($params[0][$syncfull]);
+ $sync_full_done[] = $syncfull;
+ }
+ }
+
+ $vipbackup = array();
+ $oldvips = array();
+ if (isset($params[0]['virtualip'])) {
+ if (is_array($config['virtualip']['vip'])) {
+ foreach ($config['virtualip']['vip'] as $vipindex => $vip) {
+ if ($vip['mode'] == "carp") {
+ $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['content'] = "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}";
+ $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['interface'] = $vip['interface'];
+ $oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['subnet'] = $vip['subnet'];
+ } else if ($vip['mode'] == "ipalias" && (substr($vip['interface'], 0, 4) == '_vip' || strpos($vip['interface'], "lo0"))) {
+ $oldvips[$vip['subnet']]['content'] = "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}";
+ $oldvips[$vip['subnet']]['interface'] = $vip['interface'];
+ $oldvips[$vip['subnet']]['subnet'] = $vip['subnet'];
+ } else if (($vip['mode'] == "ipalias" || $vip['mode'] == 'proxyarp') && !(substr($vip['interface'], 0, 4) == '_vip') || strpos($vip['interface'], "lo0")) {
+ $vipbackup[] = $vip;
+ }
+ }
+ }
+ }
+
+ // For vip section, first keep items sent from the master
+ $config = array_merge_recursive_unique($config, $params[0]);
+
+ /* Then add ipalias and proxyarp types already defined on the backup */
+ if (is_array($vipbackup) && !empty($vipbackup)) {
+ if (!is_array($config['virtualip'])) {
+ $config['virtualip'] = array();
+ }
+ if (!is_array($config['virtualip']['vip'])) {
+ $config['virtualip']['vip'] = array();
+ }
+ foreach ($vipbackup as $vip) {
+ array_unshift($config['virtualip']['vip'], $vip);
+ }
+ }
+
+ /* Log what happened */
+ $mergedkeys = implode(",", array_merge(array_keys($params[0]), $sync_full_done));
+ write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
+
+ /*
+ * The real work on handling the vips specially
+ * This is a copy of intefaces_vips_configure with addition of not reloading existing/not changed carps
+ */
+ if (isset($params[0]['virtualip']) && is_array($config['virtualip']) && is_array($config['virtualip']['vip'])) {
+ $carp_setuped = false;
+ $anyproxyarp = false;
+ foreach ($config['virtualip']['vip'] as $vip) {
+ if ($vip['mode'] == "carp" && isset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"])) {
+ if ($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]['content'] == "{$vip['password']}{$vip['advskew']}{$vip['subnet']}{$vip['subnet_bits']}{$vip['advbase']}") {
+ if (does_vip_exist($vip)) {
+ unset($oldvips["{$vip['interface']}_vip{$vip['vhid']}"]);
+ continue; // Skip reconfiguring this vips since nothing has changed.
+ }
+ }
+ } else if ($vip['mode'] == "ipalias" && strstr($vip['interface'], "_vip") && isset($oldvips[$vip['subnet']])) {
+ if ($oldvips[$vip['subnet']]['content'] == "{$vip['interface']}{$vip['subnet']}{$vip['subnet_bits']}") {
+ if (does_vip_exist($vip)) {
+ unset($oldvips[$vip['subnet']]);
+ continue; // Skip reconfiguring this vips since nothing has changed.
+ }
+ }
+ unset($oldvips[$vip['subnet']]);
+ }
+
+ switch ($vip['mode']) {
+ case "proxyarp":
+ $anyproxyarp = true;
+ break;
+ case "ipalias":
+ interface_ipalias_configure($vip);
+ break;
+ case "carp":
+ if ($carp_setuped == false) {
+ $carp_setuped = true;
+ }
+ interface_carp_configure($vip);
+ break;
+ }
+ }
+ /* Cleanup remaining old carps */
+ foreach ($oldvips as $oldvipar) {
+ $oldvipif = get_real_interface($oldvipar['interface']);
+ if (!empty($oldvipif)) {
+ if (is_ipaddrv6($oldvipar['subnet'])) {
+ mwexec("/sbin/ifconfig " . escapeshellarg($oldvipif) . " inet6 " . escapeshellarg($oldvipar['subnet']) . " delete");
+ } else {
+ pfSense_interface_deladdress($oldvipif, $oldvipar['subnet']);
+ }
+ }
+ }
+ if ($carp_setuped == true) {
+ interfaces_sync_setup();
+ }
+ if ($anyproxyarp == true) {
+ interface_proxyarp_configure();
+ }
+ }
+
+ if (isset($old_config['ipsec']['enable']) !== isset($config['ipsec']['enable'])) {
+ vpn_ipsec_configure();
+ }
+
+ unset($old_config);
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$merge_config_section_doc = gettext("XMLRPC wrapper for merging package sections. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
+$merge_config_section_sig = array(
+ array(
+ $XML_RPC_Boolean,
+ $XML_RPC_String,
+ $XML_RPC_Struct
+ )
+);
+
+function merge_installedpackages_section_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ if (xmlrpc_loop_detect()) {
+ log_error("Disallowing CARP sync loop");
+ return;
+ }
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ $config['installedpackages'] = array_merge($config['installedpackages'], $params[0]);
+ $mergedkeys = implode(",", array_keys($params[0]));
+ write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$merge_config_section_doc = gettext("XMLRPC wrapper for merge_config_section. This method must be called with two parameters: a string containing the local system\'s password and an array to merge into the system\'s config. This function returns true upon completion.");
+$merge_config_section_sig = array(
+ array(
+ $XML_RPC_Boolean,
+ $XML_RPC_String,
+ $XML_RPC_Struct
+ )
+);
+
+function merge_config_section_xmlrpc($raw_params) {
+ global $config, $xmlrpc_g;
+
+ if (xmlrpc_loop_detect()) {
+ log_error("Disallowing CARP sync loop");
+ return;
+ }
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ $config_new = array_overlay($config, $params[0]);
+ $config = $config_new;
+ $mergedkeys = implode(",", array_keys($params[0]));
+ write_config(sprintf(gettext("Merged in config (%s sections) from XMLRPC client."), $mergedkeys));
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$filter_configure_doc = gettext("Basic XMLRPC wrapper for filter_configure. This method must be called with one parameter: a string containing the local system\'s password. This function returns true upon completion.");
+$filter_configure_sig = array(
+ array(
+ $XML_RPC_Boolean,
+ $XML_RPC_String
+ )
+);
+
+function filter_configure_xmlrpc($raw_params) {
+ global $xmlrpc_g, $config;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ filter_configure();
+ system_routing_configure();
+ setup_gateways_monitor();
+ relayd_configure();
+ require_once("openvpn.inc");
+ openvpn_resync_all();
+ if (isset($config['dnsmasq']['enable'])) {
+ services_dnsmasq_configure();
+ } elseif (isset($config['unbound']['enable'])) {
+ services_unbound_configure();
+ } else {
+ # Both calls above run services_dhcpd_configure(), then we just
+ # need to call it when they are not called to avoid restarting dhcpd
+ # twice, as described on ticket #3797
+ services_dhcpd_configure();
+ }
+ local_sync_accounts();
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$carp_configure_doc = gettext("Basic XMLRPC wrapper for configuring CARP interfaces.");
+$carp_configure_sig = array(
+ array(
+ $XML_RPC_Boolean,
+ $XML_RPC_String
+ )
+);
+
+function interfaces_carp_configure_xmlrpc($raw_params) {
+ global $xmlrpc_g;
+
+ if (xmlrpc_loop_detect()) {
+ log_error("Disallowing CARP sync loop");
+ return;
+ }
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ interfaces_vips_configure();
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$check_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
+
+$check_firmware_version_sig = array(
+ array(
+ $XML_RPC_String,
+ $XML_RPC_String
+ )
+);
+
+function check_firmware_version_xmlrpc($raw_params) {
+ global $xmlrpc_g, $XML_RPC_String;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ return new XML_RPC_Response(new XML_RPC_Value(check_firmware_version(false), $XML_RPC_String));
+}
+
+/*****************************/
+$pfsense_firmware_version_doc = gettext("Basic XMLRPC wrapper for check_firmware_version. This function will return the output of check_firmware_version upon completion.");
+
+$pfsense_firmware_version_sig = array (
+ array (
+ $XML_RPC_Struct,
+ $XML_RPC_String
+ )
+);
+
+function pfsense_firmware_version_xmlrpc($raw_params) {
+ global $xmlrpc_g;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ return new XML_RPC_Response(XML_RPC_encode(host_firmware_version()));
+}
+
+/*****************************/
+$reboot_doc = gettext("Basic XMLRPC wrapper for rc.reboot.");
+$reboot_sig = array(array($XML_RPC_Boolean, $XML_RPC_String));
+function reboot_xmlrpc($raw_params) {
+ global $xmlrpc_g;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ mwexec_bg("/etc/rc.reboot");
+
+ return $xmlrpc_g['return']['true'];
+}
+
+/*****************************/
+$get_notices_sig = array(
+ array(
+ $XML_RPC_Array,
+ $XML_RPC_String
+ ),
+ array(
+ $XML_RPC_Array
+ )
+);
+
+function get_notices_xmlrpc($raw_params) {
+ global $g, $xmlrpc_g;
+
+ $params = xmlrpc_params_to_php($raw_params);
+ if (!xmlrpc_auth($params)) {
+ xmlrpc_authfail();
+ return $xmlrpc_g['return']['authfail'];
+ }
+ if (!function_exists("get_notices")) {
+ require("notices.inc");
+ }
+ if (!$params) {
+ $toreturn = get_notices();
+ } else {
+ $toreturn = get_notices($params);
+ }
+ $response = new XML_RPC_Response(XML_RPC_encode($toreturn));
+
+ return $response;
+}
+
+$xmlrpclockkey = lock('xmlrpc', LOCK_EX);
+
+/*****************************/
+$server = new XML_RPC_Server(
+ array(
+ 'pfsense.exec_shell' => array('function' => 'exec_shell_xmlrpc',
+ 'signature' => $exec_shell_sig,
+ 'docstring' => $exec_shell_doc),
+ 'pfsense.exec_php' => array('function' => 'exec_php_xmlrpc',
+ 'signature' => $exec_php_sig,
+ 'docstring' => $exec_php_doc),
+ 'pfsense.filter_configure' => array('function' => 'filter_configure_xmlrpc',
+ 'signature' => $filter_configure_sig,
+ 'docstring' => $filter_configure_doc),
+ 'pfsense.interfaces_carp_configure' => array('function' => 'interfaces_carp_configure_xmlrpc',
+ 'docstring' => $carp_configure_sig),
+ 'pfsense.backup_config_section' => array('function' => 'backup_config_section_xmlrpc',
+ 'signature' => $backup_config_section_sig,
+ 'docstring' => $backup_config_section_doc),
+ 'pfsense.restore_config_section' => array('function' => 'restore_config_section_xmlrpc',
+ 'signature' => $restore_config_section_sig,
+ 'docstring' => $restore_config_section_doc),
+ 'pfsense.merge_config_section' => array('function' => 'merge_config_section_xmlrpc',
+ 'signature' => $merge_config_section_sig,
+ 'docstring' => $merge_config_section_doc),
+ 'pfsense.merge_installedpackages_section_xmlrpc' => array('function' => 'merge_installedpackages_section_xmlrpc',
+ 'signature' => $merge_config_section_sig,
+ 'docstring' => $merge_config_section_doc),
+ 'pfsense.check_firmware_version' => array('function' => 'check_firmware_version_xmlrpc',
+ 'signature' => $check_firmware_version_sig,
+ 'docstring' => $check_firmware_version_doc),
+ 'pfsense.host_firmware_version' => array('function' => 'pfsense_firmware_version_xmlrpc',
+ 'signature' => $pfsense_firmware_version_sig,
+ 'docstring' => $host_firmware_version_doc),
+ 'pfsense.reboot' => array('function' => 'reboot_xmlrpc',
+ 'signature' => $reboot_sig,
+ 'docstring' => $reboot_doc),
+ 'pfsense.get_notices' => array('function' => 'get_notices_xmlrpc',
+ 'signature' => $get_notices_sig)
+ )
+);
+
+unlock($xmlrpclockkey);
+
+function array_overlay($a1, $a2) {
+ foreach ($a1 as $k => $v) {
+ if (!array_key_exists($k, $a2)) {
+ continue;
+ }
+ if (is_array($v) && is_array($a2[$k])) {
+ $a1[$k] = array_overlay($v, $a2[$k]);
+ } else {
+ $a1[$k] = $a2[$k];
+ }
+ }
+ return $a1;
+}
+
+?>
OpenPOWER on IntegriCloud